fix 4.1.3 tag


git-svn-id: https://svn.apache.org/repos/asf/tapestry/tapestry4/tags/4.1.3@579604 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/tapestry/.checkstyle b/tapestry/.checkstyle
deleted file mode 100644
index 6429254..0000000
--- a/tapestry/.checkstyle
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<fileset-config file-format-version="1.2.0" simple-config="true">
-    <local-check-config name="tapestry" location="tapestry-checkstyle.xml" type="project" description="The core tapestry checkstyle configuration">
-        <additional-data name="protect-config-file" value="false"/>
-    </local-check-config>
-    <fileset name="all" enabled="true" check-config-name="tapestry" local="true">
-        <file-match-pattern match-pattern="." include-pattern="true"/>
-    </fileset>
-    <filter name="FilesFromPackage" enabled="true">
-        <filter-data value="tapestry-framework/src/test"/>
-        <filter-data value="tapestry-portlet/src/test"/>
-        <filter-data value="tapestry-examples/Workbench/src/test"/>
-        <filter-data value="tapestry-framework/src/js"/>
-        <filter-data value="tapestry-contrib/src/test"/>
-        <filter-data value="tapestry-annotations/src/test"/>
-        <filter-data value="tapestry-annotations/src/descriptor"/>
-        <filter-data value="tapestry-contrib/src/descriptor"/>
-        <filter-data value="tapestry-framework/src/descriptor"/>
-        <filter-data value="tapestry-portlet/src/descriptor"/>
-    </filter>
-    <filter name="NonSrcDirs" enabled="true"/>
-</fileset-config>
diff --git a/tapestry/.classpath b/tapestry/.classpath
deleted file mode 100644
index 3910baf..0000000
--- a/tapestry/.classpath
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="tapestry-framework/src/test"/>
-	<classpathentry kind="src" path="tapestry-framework/src/java"/>
-	<classpathentry kind="src" path="tapestry-examples/TimeTracker/src/java"/>
-	<classpathentry kind="src" path="tapestry-contrib/src/java"/>
-	<classpathentry kind="src" path="tapestry-portlet/src/test"/>
-	<classpathentry kind="src" path="tapestry-portlet/src/java"/>
-	<classpathentry kind="src" path="tapestry-annotations/src/java"/>
-	<classpathentry kind="src" path="tapestry-examples/Workbench/src/test"/>
-	<classpathentry excluding="**/*.java" kind="src" path="tapestry-framework/src/js"/>
-	<classpathentry kind="src" path="tapestry-contrib/src/test"/>
-	<classpathentry kind="src" path="tapestry-annotations/src/test"/>
-	<classpathentry kind="src" path="tapestry-examples/Workbench/src/java"/>
-	<classpathentry kind="lib" path="config"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
-	<classpathentry kind="lib" path="tapestry-annotations/src/descriptor"/>
-	<classpathentry kind="lib" path="tapestry-contrib/src/descriptor"/>
-	<classpathentry kind="lib" path="tapestry-framework/src/descriptor"/>
-	<classpathentry kind="lib" path="tapestry-portlet/src/descriptor"/>
-	<classpathentry kind="src" path=".apt_generated"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/tapestry/.project b/tapestry/.project
deleted file mode 100644
index 3a21a0d..0000000
--- a/tapestry/.project
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>tapestry</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.maven.ide.eclipse.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.maven.ide.eclipse.maven2Nature</nature>
-		<nature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</nature>
-	</natures>
-</projectDescription>
diff --git a/tapestry/.settings/org.eclipse.core.resources.prefs b/tapestry/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 0e5dd1d..0000000
--- a/tapestry/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sat Dec 16 02:01:37 EST 2006
-eclipse.preferences.version=1
-encoding//tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.jwc=UTF-8
-encoding//tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.jwc=UTF-8
-encoding//tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script=UTF-8
-encoding//tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.jwc=UTF-8
-encoding//tapestry-framework/src/test-data/context19/upload-image.request=ISO-8859-1
diff --git a/tapestry/.settings/org.eclipse.jdt.apt.core.prefs b/tapestry/.settings/org.eclipse.jdt.apt.core.prefs
deleted file mode 100644
index d558794..0000000
--- a/tapestry/.settings/org.eclipse.jdt.apt.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Sat Nov 04 22:34:49 EST 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.apt.aptEnabled=true
-org.eclipse.jdt.apt.genSrcDir=.apt_generated
diff --git a/tapestry/.settings/org.eclipse.jdt.core.prefs b/tapestry/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index eab2dab..0000000
--- a/tapestry/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,339 +0,0 @@
-#Mon Nov 13 21:02:39 EST 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=warning
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
-org.eclipse.jdt.core.codeComplete.argumentPrefixes=
-org.eclipse.jdt.core.codeComplete.argumentSuffixes=
-org.eclipse.jdt.core.codeComplete.fieldPrefixes=_
-org.eclipse.jdt.core.codeComplete.fieldSuffixes=
-org.eclipse.jdt.core.codeComplete.localPrefixes=
-org.eclipse.jdt.core.codeComplete.localSuffixes=
-org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=_
-org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
-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.maxProblemPerUnit=100
-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.deprecation=ignore
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=error
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-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=warning
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-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.missingJavadocTags=ignore
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=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.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-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.uncheckedTypeOperation=ignore
-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.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=error
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-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.varargsArgumentNeedCast=ignore
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
-org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL
-org.eclipse.jdt.core.compiler.taskTags=TODO,FIXME,XXX
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=37
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=37
-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=1
-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=0
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_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=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines=true
-org.eclipse.jdt.core.formatter.comment.format_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_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=100
-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.format_guardian_clause_on_one_line=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=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=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=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=do not 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=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=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.keep_else_statement_on_same_line=true
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=120
-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=false
-org.eclipse.jdt.core.formatter.tabulation.char=space
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.incompatibleJDKLevel=ignore
-org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/tapestry/.settings/org.eclipse.jdt.ui.prefs b/tapestry/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index db03e64..0000000
--- a/tapestry/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,14 +0,0 @@
-#Sat Jan 20 15:32:28 EST 2007
-eclipse.preferences.version=1
-formatter_profile=_tapestry
-formatter_settings_version=10
-org.eclipse.jdt.ui.exception.name=ex
-org.eclipse.jdt.ui.gettersetter.use.is=true
-org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=java;org;com;javax;
-org.eclipse.jdt.ui.javadoc=true
-org.eclipse.jdt.ui.keywordthis=false
-org.eclipse.jdt.ui.ondemandthreshold=99
-org.eclipse.jdt.ui.overrideannotation=true
-org.eclipse.jdt.ui.staticondemandthreshold=99
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return Returns the ${bare_field_name}.\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} The ${bare_field_name} to set.\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">// Copyright 2004, 2005 The Apache Software Foundation\n//\n// Licensed under the Apache License, Version 2.0 (the "License");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http\://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an "AS IS" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * \n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/** ${field} */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/**\n * {@inheritDoc}\n */</template><template autoinsert\="false" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">// Copyright 2004, 2005 The Apache Software Foundation\n//\n// Licensed under the Apache License, Version 2.0 (the "License");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http\://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an "AS IS" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${tags}\n * ${see_to_target}\n */</template></templates>
diff --git a/tapestry/.settings/org.eclipse.ltk.core.refactoring.prefs b/tapestry/.settings/org.eclipse.ltk.core.refactoring.prefs
deleted file mode 100644
index e440f7f..0000000
--- a/tapestry/.settings/org.eclipse.ltk.core.refactoring.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Sat Nov 04 22:34:49 EST 2006
-eclipse.preferences.version=1
-org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/tapestry/.settings/org.eclipse.wst.validation.prefs b/tapestry/.settings/org.eclipse.wst.validation.prefs
deleted file mode 100644
index 44992b6..0000000
--- a/tapestry/.settings/org.eclipse.wst.validation.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-#Sun May 07 00:30:31 EDT 2006
-DELEGATES_PREFERENCE=delegateValidatorListorg.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator\=org.eclipse.wst.wsdl.validation.internal.eclipse.Validator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator\=org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator;
-USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.jst.jsp.core.internal.validation.JSPDirectiveValidator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;org.eclipse.jst.jsp.core.internal.validation.JSPELValidator;org.eclipse.jst.jsp.core.internal.validation.JSPJavaValidator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;
-USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.jst.jsp.core.internal.validation.JSPDirectiveValidator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;org.eclipse.jst.jsp.core.internal.validation.JSPELValidator;org.eclipse.jst.jsp.core.internal.validation.JSPJavaValidator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;
-USER_PREFERENCE=overrideGlobalPreferencesfalse
-eclipse.preferences.version=1
diff --git a/tapestry/BUILDING.txt b/tapestry/BUILDING.txt
deleted file mode 100644
index 989ea79..0000000
--- a/tapestry/BUILDING.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-There is a small bug currently with maven that prevents assemblies from being properly produced
-if using the defaults. (to be fixed in maven 2.1)
-
-For now, use a command similar to this to produce a distribution:
-mvn -Dmaven.test.skip=true clean package assembly:assembly
diff --git a/tapestry/KEYS b/tapestry/KEYS
deleted file mode 100644
index e8c035a..0000000
--- a/tapestry/KEYS
+++ /dev/null
@@ -1,116 +0,0 @@
-This file contains the PGP keys of various developers.
-
-Users: pgp < KEYS
-       gpg --import KEYS
-Developers: 
-        pgp -kxa <your name> and append it to this file.
-        (pgpk -ll <your name> && pgpk -xa <your name>) >> this file.
-        (gpg --list-sigs <your name>
-             && gpg --armor --export <your name>) >> this file.
-
-
-
-
-
-pub  1024D/2DDB17D0 2003-06-01 Howard M. Lewis Ship <hlship@apache.org>
-sig 3       2DDB17D0 2003-06-01   Howard M. Lewis Ship <hlship@apache.org>
-sub  1024g/7837388C 2003-06-01
-sig         2DDB17D0 2003-06-01   Howard M. Lewis Ship <hlship@apache.org>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.2.2 (Cygwin)
-
-mQGiBD7aKV8RBACd181gddOl6a2AM57Ae1r14d3u2TOXDvZRICl4wH8TjJO/+M/4
-K27+3X2ENLo3zuI5aVnDo1png/KVVx7PzRdyru1O4D3TDNLKKahmN/eAW2MvnLBK
-SCaEz+FjSt16M+wGoOkd0M2JMIXGD44r6k74e7lCvj/wnsBVaIcB/y7HtwCglqYe
-DtMa0lmDAZW0vZ5G2zqL/vkD/0cnfWXyL+a+GobHzXKc245UmPpfSzCPqjYFyr+W
-UjU4qQrmod+CoTRADmu+qdeHJSX9Bs0y6HKSFYalEOfl7m90xvH+pdKvdPOsu2LU
-SMH0cpmZHt7NJmXOUeaaTNJ2fcO+exRhqiijSREgBDiVO8YsBTHXiNxTaJREHIeN
-0RRiA/9fw8GzIN6Nez8ikKHanvuKojNE68GfIlJqCrJBNB2/rPBIQgCnKuwjwQpX
-73EalqEfQiIAI/Ekq6TZ9rzoxICaO0CdMDCGuStdL74Vq7XKQvX5ifuQzXgZ1jdf
-3CAZo5vrMDc5b6p+Mt8Gw/uSjK+Sl8tg6PkC1pTcxjCbAm1T8LQoSG93YXJkIE0u
-IExld2lzIFNoaXAgPGhsc2hpcEBhcGFjaGUub3JnPohbBBMRAgAbBQI+2ilfBgsJ
-CAcDAgMVAgMDFgIBAh4BAheAAAoJEIa00not2xfQIjYAn2V6U4zBa5FT0gPSJgCt
-6ZZBBLNxAJ9sPcjK2OS8TL5OvbN9J5BUuReNKbkBDQQ+2ilhEAQAu5TtBmHvKB1T
-7xrTMBJxEmdfxZodrCqR11tZOqRrvT/RcLLZbDQ3ntscZNoiAxoGrGv1vpeO4FwD
-t5T2G93Hza7aYuVV3ucNMAiWUCnkXzLVvVxZ9xK1hnhKDkeQyIyyIjaoiRyq19bi
-2j0NBaG2QNMQpcDSkwy1vHO2SPW8GNMAAwUD/Atf6puXOZn7vj0My580uy5PczQh
-f6EazspE7hqTxuTR8Um6mznAlaFiEjXoprTk6vBpiRzihYHXWhdsOTcLzxVxK+TW
-7Ve2OJGc8jwEWWXfXImorvvlH3HTadV0d63+Sw4oLgO9etUamlM3vVOYavBCfC81
-FVh4vOvy4cKKizOFiEYEGBECAAYFAj7aKWEACgkQhrTSei3bF9CZowCdEiyvPimY
-D3G2EeSaq1C4qb2iqREAn2qZk6Dlf4XrWJiZG+27KvdyaA5N
-=p680
------END PGP PUBLIC KEY BLOCK-----
-
-pub   1024D/FD6C524C 2005-03-29
-uid                  Paul Ferraro <pferraro@apache.org>
-sig 3        FD6C524C 2005-03-29  Paul Ferraro <pferraro@apache.org>
-sub   2048g/B89AF99B 2005-03-29
-sig          FD6C524C 2005-03-29  Paul Ferraro <pferraro@apache.org>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.0 (Cygwin)
-
-mQGiBEJInnIRBADLh6hjNRNPUDshPXl4iuzmVU2tGYfjYfOoAitU6AtAl5astuwe
-0EprzpTXrf1axd84CWlWmx/iI244UhAljEbHoZ5kI/MMJm6P0DoQRIWj3nvtdbJw
-jlgjwij1gWb3c3o3GwIwZx5onB252Np9whhG33lTmq3gVnPi528DxXpQwwCg71l8
-ZQfCR4bIGrmptM7iF2HpdJ0D/Avik9oyxvKqb8rvM72/UhP6WPl/W/6PGe7zDdzM
-9zAUdkXDmSRD4pHS2lOARHGIT3dZ/L2/Hwgc2U9IaWGnxr64WM8VqyKLF8Fx89/5
-NjvwDAwXWTdyDojvg4TamVF4xycQhSLtAyWxXp983OPp4eBGjMlAGV7SH9RtaNGw
-bQfDBACRIT3QXGQPN4ZA9osVvudo3v1OLV7whbvyPVZoRz85dtSNrDquXGmsmsLm
-g/qBMHV++QiNKF0zCR3LgSKMgBXNLKiYrKZAP+ITXn1PWDZDqHGrst58qJ1AcAe3
-JnPsqqMKzY50bd1P7lQjq9ZQM0FL29imwjiM4YhdZvT/r+PQFrQiUGF1bCBGZXJy
-YXJvIDxwZmVycmFyb0BhcGFjaGUub3JnPoheBBMRAgAeBQJCSJ5yAhsDBgsJCAcD
-AgMVAgMDFgIBAh4BAheAAAoJENoTCsn9bFJM9l0AoL+sj2ysb0pdwEHlIejG54ZW
-GV9vAKDU3+oVU0xxnd+R9yWkG7Ys32i5+LkCDQRCSJ6hEAgAx+a5d4krGWo+BFsC
-EeNDPI/3anJhvACuMwoYbWpResZH1G39UA9mUG/kI2A7Gbm96DGiPpsB9KKJWBfE
-SuXEBLjp8ukXZvrmS8NLrH0bLajptTrjlq8P49AK6C1CFPZRaoq+yd/zA+9ZlM6z
-gPFypK/WoTCQtng0ej4YGA/KEZEIE4FwU+2i9UieVcWJOarggStibPclfY+wZy6p
-YPmkHcUtKTjDTzkdileT11DahACDPAnfjVMvAb3JrkdAqTEapEMkB8TpgZx9NZKB
-yqilxfxDGKAL079exx8ats5XowBQ4/arisHc9AA26MwtoqJowsqpMUPutJ4Rskw8
-59KQCwADBgf/ZliG2GwY7SnE5jujECBGSLJLFb5CuZc/M+RyjqlhnMQsQYmj9GZT
-92I5r5jlydB3tKZ//pkA/YUqHPgKNR4VFO46SAO1QFtau3Sd6Plz82v4KVBt4HUr
-P3w4xl5p1NY/T03qij3Mn/ly6Gkn+b1CmJBBa0+ebaT63bgpRa5MaazWGf+WXx/Y
-BoBBTOOSkKrLJ6YlTQOzIKlknSlQvEuLVdAY+MNetYXpkjW0cjI0Yt9f+obSrsI6
-SeiqO57xRBK+aeDcQMVLrzAdVNkV4UMiLjLc/quLTJ3ShbO8t9RU2JIBZrppplog
-LFSMO33g6znCNXXsmzeMVHxKyrAnDzDI1ohJBBgRAgAJBQJCSJ6hAhsMAAoJENoT
-Csn9bFJMUZEAn2VCJH3MjoV6rVAt5Df892iX0zsMAJ96iBYmm/1KV2NaaqWb7XjY
-YBlFKw==
-=xwwi
------END PGP PUBLIC KEY BLOCK-----
-pub   1024D/3E6D26D2 2006-01-26
-uid                  Jesse Kuhnert <jkuhnert@apache.org>
-sig 3        3E6D26D2 2006-01-26  Jesse Kuhnert <jkuhnert@apache.org>
-sub   2048g/BFF7F76A 2006-01-26
-sig          3E6D26D2 2006-01-26  Jesse Kuhnert <jkuhnert@apache.org>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.2 (GNU/Linux)
-
-mQGiBEPYLjoRBACa783DbiuMCc1LlbRDHbD8SYXz6zMMS3zSZ698yk91HG15mejQ
-hLXjenuH7PWuh83m5YyqRz3s2tuEROng5iXwn+A6iVJwnHNNMAA9l+Jy0Z9u5eFN
-29Dwd37GW0yF3tfivN/Y6b2fJzsQh6mTIwuSp6wfLtIvnBwXcDwsIQYgvwCgqX8w
-x3+fLdhPUj5VkYh9CqtBF60EAILCIaiUwk1TH6nFCfPg+UJQLLXpD6YaPItlkEdO
-OIM6P8mfYNraO8O2ZnZtdATRImaOIQ5pSbbQ44d2rGEwr7johU3B8KWb0r0RwLEE
-KAksAgdVZQ4HH9HIL3OYH7b2ED4KyhHG3TTQBmz7h6k4zNgTW3I5GHRVmoM1+x2q
-+BY2A/9Z24Oixhq2hbHPbl3YceYJE8W9l4hV+e/a9jP0G4WcvOGxMpj7yO7I/eaf
-ARCr+TjCHEMBEaZXjXe3w1F8iHyf3w5XMVbYCbhPRYUle0Z+690Lz2+hPwXOXFI5
-yVxK2J0xDrQ24CjMAZxdOlzxscIEvPkif2FlIlcElaCaw8NsbLQjSmVzc2UgS3Vo
-bmVydCA8amt1aG5lcnRAYXBhY2hlLm9yZz6IYAQTEQIAIAUCQ9guOgIbAwYLCQgH
-AwIEFQIIAwQWAgMBAh4BAheAAAoJEMB0lGc+bSbShlAAmwe4+Uexyc35UaNWAVhz
-6kiiEQbeAJ97yOFs2rpg5D3jLjK+Oowp6nvKmrkCDQRD2C5EEAgA6SBt6HRmAT0h
-hZJYmmjQZZ4FTxHHxwoIBxbnB/UcrtmavPMTSmaTwmq/EtbCWk4L/IonDXTLtLMa
-Q2UhXrBUIuK2mzOMQ4D96Dcga/M/PiR8Gtnr8t0jDimah/6IVDyKU3cyJ5LfXxP2
-/uIOcAdbwXmR/Pq64SRQx6ub3kkU/5gDGf/B8OmYTRPT+MsfkrS9V2Uo6QDx2nFq
-zel7a3KD4g4s+wybTMSC1W3pYGUeyUgRRMOIJ3MG0zJi//zkohj4QdSgnZvNciwk
-Cud0v6F+OkuMEF8rprJPCDWHrE3mbYjmVVmoVkmsjWpNEvZXuGZnfhw9RE9L2awo
-1bE6PcyXSwADBggAsJ/Rxk49qrn77X/7iOukDQHEz98yDqXxxM/l2edeyjURFbWE
-elu3BLUNGgaUVAMT+/W6dxrH4S9G8K5xLVwiNSelTtOLylYOjiO16InPpZ6I8HcX
-u9CkONthpaj7Es4hGpXxmYpnIkBN0EFA/cEK3GfPX2OiFKJ0CxOAlIkT0wMbFdpU
-tpvyltlD7KMglUJobOtFYjq5wfMyROWnJ4XLIc2XtiiT9Bzgw2blxVtfjCJ4uUUf
-c0JJ8UT+5w7/2QB3RdiSocKpS5FAkemH1gknpHhEeG8cItY0DTNDB39aa8jOIm+1
-Al0KHk4S6kedJEz4t0xcGo5NzZU323Xcl4UEPohJBBgRAgAJBQJD2C5EAhsMAAoJ
-EMB0lGc+bSbS1okAnR498zEVDPUHFMoT3kGd+xkPyf0FAJ44KZYBZLXHFIwiwuMb
-FrdorwKsLQ==
-=1t0m
------END PGP PUBLIC KEY BLOCK-----
diff --git a/tapestry/LICENSE-2.0.txt b/tapestry/LICENSE-2.0.txt
deleted file mode 100644
index d645695..0000000
--- a/tapestry/LICENSE-2.0.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/tapestry/LICENSE-javassist-MPL_1_1.txt b/tapestry/LICENSE-javassist-MPL_1_1.txt
deleted file mode 100644
index 7714141..0000000
--- a/tapestry/LICENSE-javassist-MPL_1_1.txt
+++ /dev/null
@@ -1,470 +0,0 @@
-                          MOZILLA PUBLIC LICENSE
-                                Version 1.1
-
-                              ---------------
-
-1. Definitions.
-
-     1.0.1. "Commercial Use" means distribution or otherwise making the
-     Covered Code available to a third party.
-
-     1.1. "Contributor" means each entity that creates or contributes to
-     the creation of Modifications.
-
-     1.2. "Contributor Version" means the combination of the Original
-     Code, prior Modifications used by a Contributor, and the Modifications
-     made by that particular Contributor.
-
-     1.3. "Covered Code" means the Original Code or Modifications or the
-     combination of the Original Code and Modifications, in each case
-     including portions thereof.
-
-     1.4. "Electronic Distribution Mechanism" means a mechanism generally
-     accepted in the software development community for the electronic
-     transfer of data.
-
-     1.5. "Executable" means Covered Code in any form other than Source
-     Code.
-
-     1.6. "Initial Developer" means the individual or entity identified
-     as the Initial Developer in the Source Code notice required by Exhibit
-     A.
-
-     1.7. "Larger Work" means a work which combines Covered Code or
-     portions thereof with code not governed by the terms of this License.
-
-     1.8. "License" means this document.
-
-     1.8.1. "Licensable" means having the right to grant, to the maximum
-     extent possible, whether at the time of the initial grant or
-     subsequently acquired, any and all of the rights conveyed herein.
-
-     1.9. "Modifications" means any addition to or deletion from the
-     substance or structure of either the Original Code or any previous
-     Modifications. When Covered Code is released as a series of files, a
-     Modification is:
-          A. Any addition to or deletion from the contents of a file
-          containing Original Code or previous Modifications.
-
-          B. Any new file that contains any part of the Original Code or
-          previous Modifications.
-
-     1.10. "Original Code" means Source Code of computer software code
-     which is described in the Source Code notice required by Exhibit A as
-     Original Code, and which, at the time of its release under this
-     License is not already Covered Code governed by this License.
-
-     1.10.1. "Patent Claims" means any patent claim(s), now owned or
-     hereafter acquired, including without limitation,  method, process,
-     and apparatus claims, in any patent Licensable by grantor.
-
-     1.11. "Source Code" means the preferred form of the Covered Code for
-     making modifications to it, including all modules it contains, plus
-     any associated interface definition files, scripts used to control
-     compilation and installation of an Executable, or source code
-     differential comparisons against either the Original Code or another
-     well known, available Covered Code of the Contributor's choice. The
-     Source Code can be in a compressed or archival form, provided the
-     appropriate decompression or de-archiving software is widely available
-     for no charge.
-
-     1.12. "You" (or "Your")  means an individual or a legal entity
-     exercising rights under, and complying with all of the terms of, this
-     License or a future version of this License issued under Section 6.1.
-     For legal entities, "You" includes any entity which controls, is
-     controlled by, or is under common control with You. For purposes of
-     this definition, "control" means (a) the power, direct or indirect,
-     to cause the direction or management of such entity, whether by
-     contract or otherwise, or (b) ownership of more than fifty percent
-     (50%) of the outstanding shares or beneficial ownership of such
-     entity.
-
-2. Source Code License.
-
-     2.1. The Initial Developer Grant.
-     The Initial Developer hereby grants You a world-wide, royalty-free,
-     non-exclusive license, subject to third party intellectual property
-     claims:
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Initial Developer to use, reproduce,
-          modify, display, perform, sublicense and distribute the Original
-          Code (or portions thereof) with or without Modifications, and/or
-          as part of a Larger Work; and
-
-          (b) under Patents Claims infringed by the making, using or
-          selling of Original Code, to make, have made, use, practice,
-          sell, and offer for sale, and/or otherwise dispose of the
-          Original Code (or portions thereof).
-
-          (c) the licenses granted in this Section 2.1(a) and (b) are
-          effective on the date Initial Developer first distributes
-          Original Code under the terms of this License.
-
-          (d) Notwithstanding Section 2.1(b) above, no patent license is
-          granted: 1) for code that You delete from the Original Code; 2)
-          separate from the Original Code;  or 3) for infringements caused
-          by: i) the modification of the Original Code or ii) the
-          combination of the Original Code with other software or devices.
-
-     2.2. Contributor Grant.
-     Subject to third party intellectual property claims, each Contributor
-     hereby grants You a world-wide, royalty-free, non-exclusive license
-
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Contributor, to use, reproduce, modify,
-          display, perform, sublicense and distribute the Modifications
-          created by such Contributor (or portions thereof) either on an
-          unmodified basis, with other Modifications, as Covered Code
-          and/or as part of a Larger Work; and
-
-          (b) under Patent Claims infringed by the making, using, or
-          selling of  Modifications made by that Contributor either alone
-          and/or in combination with its Contributor Version (or portions
-          of such combination), to make, use, sell, offer for sale, have
-          made, and/or otherwise dispose of: 1) Modifications made by that
-          Contributor (or portions thereof); and 2) the combination of
-          Modifications made by that Contributor with its Contributor
-          Version (or portions of such combination).
-
-          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
-          effective on the date Contributor first makes Commercial Use of
-          the Covered Code.
-
-          (d)    Notwithstanding Section 2.2(b) above, no patent license is
-          granted: 1) for any code that Contributor has deleted from the
-          Contributor Version; 2)  separate from the Contributor Version;
-          3)  for infringements caused by: i) third party modifications of
-          Contributor Version or ii)  the combination of Modifications made
-          by that Contributor with other software  (except as part of the
-          Contributor Version) or other devices; or 4) under Patent Claims
-          infringed by Covered Code in the absence of Modifications made by
-          that Contributor.
-
-3. Distribution Obligations.
-
-     3.1. Application of License.
-     The Modifications which You create or to which You contribute are
-     governed by the terms of this License, including without limitation
-     Section 2.2. The Source Code version of Covered Code may be
-     distributed only under the terms of this License or a future version
-     of this License released under Section 6.1, and You must include a
-     copy of this License with every copy of the Source Code You
-     distribute. You may not offer or impose any terms on any Source Code
-     version that alters or restricts the applicable version of this
-     License or the recipients' rights hereunder. However, You may include
-     an additional document offering the additional rights described in
-     Section 3.5.
-
-     3.2. Availability of Source Code.
-     Any Modification which You create or to which You contribute must be
-     made available in Source Code form under the terms of this License
-     either on the same media as an Executable version or via an accepted
-     Electronic Distribution Mechanism to anyone to whom you made an
-     Executable version available; and if made available via Electronic
-     Distribution Mechanism, must remain available for at least twelve (12)
-     months after the date it initially became available, or at least six
-     (6) months after a subsequent version of that particular Modification
-     has been made available to such recipients. You are responsible for
-     ensuring that the Source Code version remains available even if the
-     Electronic Distribution Mechanism is maintained by a third party.
-
-     3.3. Description of Modifications.
-     You must cause all Covered Code to which You contribute to contain a
-     file documenting the changes You made to create that Covered Code and
-     the date of any change. You must include a prominent statement that
-     the Modification is derived, directly or indirectly, from Original
-     Code provided by the Initial Developer and including the name of the
-     Initial Developer in (a) the Source Code, and (b) in any notice in an
-     Executable version or related documentation in which You describe the
-     origin or ownership of the Covered Code.
-
-     3.4. Intellectual Property Matters
-          (a) Third Party Claims.
-          If Contributor has knowledge that a license under a third party's
-          intellectual property rights is required to exercise the rights
-          granted by such Contributor under Sections 2.1 or 2.2,
-          Contributor must include a text file with the Source Code
-          distribution titled "LEGAL" which describes the claim and the
-          party making the claim in sufficient detail that a recipient will
-          know whom to contact. If Contributor obtains such knowledge after
-          the Modification is made available as described in Section 3.2,
-          Contributor shall promptly modify the LEGAL file in all copies
-          Contributor makes available thereafter and shall take other steps
-          (such as notifying appropriate mailing lists or newsgroups)
-          reasonably calculated to inform those who received the Covered
-          Code that new knowledge has been obtained.
-
-          (b) Contributor APIs.
-          If Contributor's Modifications include an application programming
-          interface and Contributor has knowledge of patent licenses which
-          are reasonably necessary to implement that API, Contributor must
-          also include this information in the LEGAL file.
-
-               (c)    Representations.
-          Contributor represents that, except as disclosed pursuant to
-          Section 3.4(a) above, Contributor believes that Contributor's
-          Modifications are Contributor's original creation(s) and/or
-          Contributor has sufficient rights to grant the rights conveyed by
-          this License.
-
-     3.5. Required Notices.
-     You must duplicate the notice in Exhibit A in each file of the Source
-     Code.  If it is not possible to put such notice in a particular Source
-     Code file due to its structure, then You must include such notice in a
-     location (such as a relevant directory) where a user would be likely
-     to look for such a notice.  If You created one or more Modification(s)
-     You may add your name as a Contributor to the notice described in
-     Exhibit A.  You must also duplicate this License in any documentation
-     for the Source Code where You describe recipients' rights or ownership
-     rights relating to Covered Code.  You may choose to offer, and to
-     charge a fee for, warranty, support, indemnity or liability
-     obligations to one or more recipients of Covered Code. However, You
-     may do so only on Your own behalf, and not on behalf of the Initial
-     Developer or any Contributor. You must make it absolutely clear than
-     any such warranty, support, indemnity or liability obligation is
-     offered by You alone, and You hereby agree to indemnify the Initial
-     Developer and every Contributor for any liability incurred by the
-     Initial Developer or such Contributor as a result of warranty,
-     support, indemnity or liability terms You offer.
-
-     3.6. Distribution of Executable Versions.
-     You may distribute Covered Code in Executable form only if the
-     requirements of Section 3.1-3.5 have been met for that Covered Code,
-     and if You include a notice stating that the Source Code version of
-     the Covered Code is available under the terms of this License,
-     including a description of how and where You have fulfilled the
-     obligations of Section 3.2. The notice must be conspicuously included
-     in any notice in an Executable version, related documentation or
-     collateral in which You describe recipients' rights relating to the
-     Covered Code. You may distribute the Executable version of Covered
-     Code or ownership rights under a license of Your choice, which may
-     contain terms different from this License, provided that You are in
-     compliance with the terms of this License and that the license for the
-     Executable version does not attempt to limit or alter the recipient's
-     rights in the Source Code version from the rights set forth in this
-     License. If You distribute the Executable version under a different
-     license You must make it absolutely clear that any terms which differ
-     from this License are offered by You alone, not by the Initial
-     Developer or any Contributor. You hereby agree to indemnify the
-     Initial Developer and every Contributor for any liability incurred by
-     the Initial Developer or such Contributor as a result of any such
-     terms You offer.
-
-     3.7. Larger Works.
-     You may create a Larger Work by combining Covered Code with other code
-     not governed by the terms of this License and distribute the Larger
-     Work as a single product. In such a case, You must make sure the
-     requirements of this License are fulfilled for the Covered Code.
-
-4. Inability to Comply Due to Statute or Regulation.
-
-     If it is impossible for You to comply with any of the terms of this
-     License with respect to some or all of the Covered Code due to
-     statute, judicial order, or regulation then You must: (a) comply with
-     the terms of this License to the maximum extent possible; and (b)
-     describe the limitations and the code they affect. Such description
-     must be included in the LEGAL file described in Section 3.4 and must
-     be included with all distributions of the Source Code. Except to the
-     extent prohibited by statute or regulation, such description must be
-     sufficiently detailed for a recipient of ordinary skill to be able to
-     understand it.
-
-5. Application of this License.
-
-     This License applies to code to which the Initial Developer has
-     attached the notice in Exhibit A and to related Covered Code.
-
-6. Versions of the License.
-
-     6.1. New Versions.
-     Netscape Communications Corporation ("Netscape") may publish revised
-     and/or new versions of the License from time to time. Each version
-     will be given a distinguishing version number.
-
-     6.2. Effect of New Versions.
-     Once Covered Code has been published under a particular version of the
-     License, You may always continue to use it under the terms of that
-     version. You may also choose to use such Covered Code under the terms
-     of any subsequent version of the License published by Netscape. No one
-     other than Netscape has the right to modify the terms applicable to
-     Covered Code created under this License.
-
-     6.3. Derivative Works.
-     If You create or use a modified version of this License (which you may
-     only do in order to apply it to code which is not already Covered Code
-     governed by this License), You must (a) rename Your license so that
-     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
-     "MPL", "NPL" or any confusingly similar phrase do not appear in your
-     license (except to note that your license differs from this License)
-     and (b) otherwise make it clear that Your version of the license
-     contains terms which differ from the Mozilla Public License and
-     Netscape Public License. (Filling in the name of the Initial
-     Developer, Original Code or Contributor in the notice described in
-     Exhibit A shall not of themselves be deemed to be modifications of
-     this License.)
-
-7. DISCLAIMER OF WARRANTY.
-
-     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
-     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
-     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
-     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
-     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
-     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
-     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
-     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
-     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
-     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-8. TERMINATION.
-
-     8.1.  This License and the rights granted hereunder will terminate
-     automatically if You fail to comply with terms herein and fail to cure
-     such breach within 30 days of becoming aware of the breach. All
-     sublicenses to the Covered Code which are properly granted shall
-     survive any termination of this License. Provisions which, by their
-     nature, must remain in effect beyond the termination of this License
-     shall survive.
-
-     8.2.  If You initiate litigation by asserting a patent infringement
-     claim (excluding declatory judgment actions) against Initial Developer
-     or a Contributor (the Initial Developer or Contributor against whom
-     You file such action is referred to as "Participant")  alleging that:
-
-     (a)  such Participant's Contributor Version directly or indirectly
-     infringes any patent, then any and all rights granted by such
-     Participant to You under Sections 2.1 and/or 2.2 of this License
-     shall, upon 60 days notice from Participant terminate prospectively,
-     unless if within 60 days after receipt of notice You either: (i)
-     agree in writing to pay Participant a mutually agreeable reasonable
-     royalty for Your past and future use of Modifications made by such
-     Participant, or (ii) withdraw Your litigation claim with respect to
-     the Contributor Version against such Participant.  If within 60 days
-     of notice, a reasonable royalty and payment arrangement are not
-     mutually agreed upon in writing by the parties or the litigation claim
-     is not withdrawn, the rights granted by Participant to You under
-     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
-     the 60 day notice period specified above.
-
-     (b)  any software, hardware, or device, other than such Participant's
-     Contributor Version, directly or indirectly infringes any patent, then
-     any rights granted to You by such Participant under Sections 2.1(b)
-     and 2.2(b) are revoked effective as of the date You first made, used,
-     sold, distributed, or had made, Modifications made by that
-     Participant.
-
-     8.3.  If You assert a patent infringement claim against Participant
-     alleging that such Participant's Contributor Version directly or
-     indirectly infringes any patent where such claim is resolved (such as
-     by license or settlement) prior to the initiation of patent
-     infringement litigation, then the reasonable value of the licenses
-     granted by such Participant under Sections 2.1 or 2.2 shall be taken
-     into account in determining the amount or value of any payment or
-     license.
-
-     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
-     all end user license agreements (excluding distributors and resellers)
-     which have been validly granted by You or any distributor hereunder
-     prior to termination shall survive termination.
-
-9. LIMITATION OF LIABILITY.
-
-     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
-     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
-     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
-     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
-     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
-     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
-     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
-     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
-     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
-     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
-     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
-     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
-     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-10. U.S. GOVERNMENT END USERS.
-
-     The Covered Code is a "commercial item," as that term is defined in
-     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
-     software" and "commercial computer software documentation," as such
-     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
-     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
-     all U.S. Government End Users acquire Covered Code with only those
-     rights set forth herein.
-
-11. MISCELLANEOUS.
-
-     This License represents the complete agreement concerning subject
-     matter hereof. If any provision of this License is held to be
-     unenforceable, such provision shall be reformed only to the extent
-     necessary to make it enforceable. This License shall be governed by
-     California law provisions (except to the extent applicable law, if
-     any, provides otherwise), excluding its conflict-of-law provisions.
-     With respect to disputes in which at least one party is a citizen of,
-     or an entity chartered or registered to do business in the United
-     States of America, any litigation relating to this License shall be
-     subject to the jurisdiction of the Federal Courts of the Northern
-     District of California, with venue lying in Santa Clara County,
-     California, with the losing party responsible for costs, including
-     without limitation, court costs and reasonable attorneys' fees and
-     expenses. The application of the United Nations Convention on
-     Contracts for the International Sale of Goods is expressly excluded.
-     Any law or regulation which provides that the language of a contract
-     shall be construed against the drafter shall not apply to this
-     License.
-
-12. RESPONSIBILITY FOR CLAIMS.
-
-     As between Initial Developer and the Contributors, each party is
-     responsible for claims and damages arising, directly or indirectly,
-     out of its utilization of rights under this License and You agree to
-     work with Initial Developer and Contributors to distribute such
-     responsibility on an equitable basis. Nothing herein is intended or
-     shall be deemed to constitute any admission of liability.
-
-13. MULTIPLE-LICENSED CODE.
-
-     Initial Developer may designate portions of the Covered Code as
-     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
-     Developer permits you to utilize portions of the Covered Code under
-     Your choice of the NPL or the alternative licenses, if any, specified
-     by the Initial Developer in the file described in Exhibit A.
-
-EXHIBIT A -Mozilla Public License.
-
-     ``The contents of this file are subject to the Mozilla Public License
-     Version 1.1 (the "License"); you may not use this file except in
-     compliance with the License. You may obtain a copy of the License at
-     http://www.mozilla.org/MPL/
-
-     Software distributed under the License is distributed on an "AS IS"
-     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
-     License for the specific language governing rights and limitations
-     under the License.
-
-     The Original Code is ______________________________________.
-
-     The Initial Developer of the Original Code is ________________________.
-     Portions created by ______________________ are Copyright (C) ______
-     _______________________. All Rights Reserved.
-
-     Contributor(s): ______________________________________.
-
-     Alternatively, the contents of this file may be used under the terms
-     of the _____ license (the  "[___] License"), in which case the
-     provisions of [______] License are applicable instead of those
-     above.  If you wish to allow use of your version of this file only
-     under the terms of the [____] License and not to allow others to use
-     your version of this file under the MPL, indicate your decision by
-     deleting  the provisions above and replace  them with the notice and
-     other provisions required by the [___] License.  If you do not delete
-     the provisions above, a recipient may use your version of this file
-     under either the MPL or the [___] License."
-
-     [NOTE: The text of this Exhibit A may differ slightly from the text of
-     the notices in the Source Code files of the Original Code. You should
-     use the text of this Exhibit A rather than the text found in the
-     Original Code Source Code for Your Modifications.]
-
diff --git a/tapestry/LICENSE_DOJO.txt b/tapestry/LICENSE_DOJO.txt
deleted file mode 100644
index 225d20c..0000000
--- a/tapestry/LICENSE_DOJO.txt
+++ /dev/null
@@ -1,195 +0,0 @@
-Dojo is availble under *either* the terms of the modified BSD license *or* the
-Academic Free License version 2.1. As a recipient of Dojo, you may choose which
-license to receive this code under (except as noted in per-module LICENSE
-files). Some modules may not be the copyright of the Dojo Foundation. These
-modules contain explicit declarations of copyright in both the LICENSE files in
-the directories in which they reside and in the code itself. No external
-contributions are allowed under licenses which are fundamentally incompatible
-with the AFL or BSD licenses that Dojo is distributed under.
-
-The text of the AFL and BSD licenses is reproduced below. 
-
--------------------------------------------------------------------------------
-The "New" BSD License:
-**********************
-
-Copyright (c) 2005-2006, The Dojo Foundation
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  * Redistributions of source code must retain the above copyright notice, this
-    list of conditions and the following disclaimer.
-  * Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
-  * Neither the name of the Dojo Foundation nor the names of its contributors
-    may be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--------------------------------------------------------------------------------
-The Academic Free License, v. 2.1:
-**********************************
-
-This Academic Free License (the "License") applies to any original work of
-authorship (the "Original Work") whose owner (the "Licensor") has placed the
-following notice immediately following the copyright notice for the Original
-Work:
-
-Licensed under the Academic Free License version 2.1
-
-1) Grant of Copyright License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license to do the
-following:
-
-a) to reproduce the Original Work in copies;
-
-b) to prepare derivative works ("Derivative Works") based upon the Original
-Work;
-
-c) to distribute copies of the Original Work and Derivative Works to the
-public;
-
-d) to perform the Original Work publicly; and
-
-e) to display the Original Work publicly.
-
-2) Grant of Patent License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
-claims owned or controlled by the Licensor that are embodied in the Original
-Work as furnished by the Licensor, to make, use, sell and offer for sale the
-Original Work and Derivative Works.
-
-3) Grant of Source Code License. The term "Source Code" means the preferred
-form of the Original Work for making modifications to it and all available
-documentation describing how to modify the Original Work. Licensor hereby
-agrees to provide a machine-readable copy of the Source Code of the Original
-Work along with each copy of the Original Work that Licensor distributes.
-Licensor reserves the right to satisfy this obligation by placing a
-machine-readable copy of the Source Code in an information repository
-reasonably calculated to permit inexpensive and convenient access by You for as
-long as Licensor continues to distribute the Original Work, and by publishing
-the address of that information repository in a notice immediately following
-the copyright notice that applies to the Original Work.
-
-4) Exclusions From License Grant. Neither the names of Licensor, nor the names
-of any contributors to the Original Work, nor any of their trademarks or
-service marks, may be used to endorse or promote products derived from this
-Original Work without express prior written permission of the Licensor. Nothing
-in this License shall be deemed to grant any rights to trademarks, copyrights,
-patents, trade secrets or any other intellectual property of Licensor except as
-expressly stated herein. No patent license is granted to make, use, sell or
-offer to sell embodiments of any patent claims other than the licensed claims
-defined in Section 2. No right is granted to the trademarks of Licensor even if
-such marks are included in the Original Work. Nothing in this License shall be
-interpreted to prohibit Licensor from licensing under different terms from this
-License any Original Work that Licensor otherwise would have a right to
-license.
-
-5) This section intentionally omitted.
-
-6) Attribution Rights. You must retain, in the Source Code of any Derivative
-Works that You create, all copyright, patent or trademark notices from the
-Source Code of the Original Work, as well as any notices of licensing and any
-descriptive text identified therein as an "Attribution Notice." You must cause
-the Source Code for any Derivative Works that You create to carry a prominent
-Attribution Notice reasonably calculated to inform recipients that You have
-modified the Original Work.
-
-7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
-the copyright in and to the Original Work and the patent rights granted herein
-by Licensor are owned by the Licensor or are sublicensed to You under the terms
-of this License with the permission of the contributor(s) of those copyrights
-and patent rights. Except as expressly stated in the immediately proceeding
-sentence, the Original Work is provided under this License on an "AS IS" BASIS
-and WITHOUT WARRANTY, either express or implied, including, without limitation,
-the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
-This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
-license to Original Work is granted hereunder except under this disclaimer.
-
-8) Limitation of Liability. Under no circumstances and under no legal theory,
-whether in tort (including negligence), contract, or otherwise, shall the
-Licensor be liable to any person for any direct, indirect, special, incidental,
-or consequential damages of any character arising as a result of this License
-or the use of the Original Work including, without limitation, damages for loss
-of goodwill, work stoppage, computer failure or malfunction, or any and all
-other commercial damages or losses. This limitation of liability shall not
-apply to liability for death or personal injury resulting from Licensor's
-negligence to the extent applicable law prohibits such limitation. Some
-jurisdictions do not allow the exclusion or limitation of incidental or
-consequential damages, so this exclusion and limitation may not apply to You.
-
-9) Acceptance and Termination. If You distribute copies of the Original Work or
-a Derivative Work, You must make a reasonable effort under the circumstances to
-obtain the express assent of recipients to the terms of this License. Nothing
-else but this License (or another written agreement between Licensor and You)
-grants You permission to create Derivative Works based upon the Original Work
-or to exercise any of the rights granted in Section 1 herein, and any attempt
-to do so except under the terms of this License (or another written agreement
-between Licensor and You) is expressly prohibited by U.S. copyright law, the
-equivalent laws of other countries, and by international treaty. Therefore, by
-exercising any of the rights granted to You in Section 1 herein, You indicate
-Your acceptance of this License and all of its terms and conditions.
-
-10) Termination for Patent Action. This License shall terminate automatically
-and You may no longer exercise any of the rights granted to You by this License
-as of the date You commence an action, including a cross-claim or counterclaim,
-against Licensor or any licensee alleging that the Original Work infringes a
-patent. This termination provision shall not apply for an action alleging
-patent infringement by combinations of the Original Work with other software or
-hardware.
-
-11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
-License may be brought only in the courts of a jurisdiction wherein the
-Licensor resides or in which Licensor conducts its primary business, and under
-the laws of that jurisdiction excluding its conflict-of-law provisions. The
-application of the United Nations Convention on Contracts for the International
-Sale of Goods is expressly excluded. Any use of the Original Work outside the
-scope of this License or after its termination shall be subject to the
-requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et
-seq., the equivalent laws of other countries, and international treaty. This
-section shall survive the termination of this License.
-
-12) Attorneys Fees. In any action to enforce the terms of this License or
-seeking damages relating thereto, the prevailing party shall be entitled to
-recover its costs and expenses, including, without limitation, reasonable
-attorneys' fees and costs incurred in connection with such action, including
-any appeal of such action. This section shall survive the termination of this
-License.
-
-13) Miscellaneous. This License represents the complete agreement concerning
-the subject matter hereof. If any provision of this License is held to be
-unenforceable, such provision shall be reformed only to the extent necessary to
-make it enforceable.
-
-14) Definition of "You" in This License. "You" throughout this License, whether
-in upper or lower case, means an individual or a legal entity exercising rights
-under, and complying with all of the terms of, this License. For legal
-entities, "You" includes any entity that controls, is controlled by, or is
-under common control with you. For purposes of this definition, "control" means
-(i) the power, direct or indirect, to cause the direction or management of such
-entity, whether by contract or otherwise, or (ii) ownership of fifty percent
-(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
-entity.
-
-15) Right to Use. You may use the Original Work in all ways not otherwise
-restricted or conditioned by this License or by law, and Licensor promises not
-to interfere with or be responsible for such uses by You.
-
-This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved.
-Permission is hereby granted to copy and distribute this license without
-modification. This license may not be modified without the express written
-permission of its copyright owner.
diff --git a/tapestry/MIT-LICENSE-scriptaculous.txt b/tapestry/MIT-LICENSE-scriptaculous.txt
deleted file mode 100644
index b5e74b4..0000000
--- a/tapestry/MIT-LICENSE-scriptaculous.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/tapestry/NOTICE.txt b/tapestry/NOTICE.txt
deleted file mode 100644
index d75079a..0000000
--- a/tapestry/NOTICE.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org/).
-
-This product additionally includes script code developed by the Dojo Foundation under
-the BSD or Academic Free License v2.1 licenses. (http://opensource.org/licenses/bsd-license.php or http://opensource.org/licenses/afl-2.1.php).
-
-The Scriptaculous javascript library is also included in Tapestry - which is licensed with the MIT License. (http://www.opensource.org/licenses/mit-license.php)
-
-This product makes use of the Javassist library, distributed under the terms of the
-Mozilla Public License version 1.1.
-http://www.jboss.com/products/javassist
diff --git a/tapestry/config/log4j.properties b/tapestry/config/log4j.properties
deleted file mode 100644
index 90635b0..0000000
--- a/tapestry/config/log4j.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-log4j.rootCategory=WARN, A1
-
-# A1 is set to be a ConsoleAppender. 
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%c{1} [%p] %m%n
-
-log4j.category.org.apache.hivemind=ERROR
-log4j.category.hivemind=ERROR
-
-log4j.category.org.apache.tapestry.ApplicationServlet=info
diff --git a/tapestry/doap_Tapestry.rdf b/tapestry/doap_Tapestry.rdf
deleted file mode 100644
index 54304f0..0000000
--- a/tapestry/doap_Tapestry.rdf
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl"?>
-<rdf:RDF xml:lang="en"
-         xmlns="http://usefulinc.com/ns/doap#" 
-         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-         xmlns:asfext="http:projects.apache.org/ns/asfext#">
-  <Project rdf:about="http://tapestry.apache.org/">
-    <created>2006-01-31</created>
-    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20" />
-    <name>Apache Tapestry</name>
-    <!-- Not for long! -->
-    <homepage rdf:resource="http://tapestry.apache.org/" />
-    <asfext:pmc rdf:resource="http://tapestry.apache.org/" />
-    <shortdesc>Framework for creating dynamic, robust, highly scalable web applications</shortdesc>
-    <description>Tapestry is a component-based web application framework, written in Java. Tapestry is more than a simple templating system; Tapestry builds on the Java Servlet API to build a platform for creating dynamic, interactive web sites. More than just another templating language, Tapestry is a real framework for building complex applications from simple, reusable components. Tapestry offloads much of the error-prone work in creating web applications into the framework itself, taking over mundane tasks such as dispatching incoming requests, constructing and interpretting URLs encoded with information, handling localization and internationalization and much more besides.</description>
-    <bug-database rdf:resource="http://issues.apache.org/jira/secure/BrowseProject.jspa?id= 10573" />
-    <mailing-list rdf:resource="http://tapestry.apache.org/mail-lists.html" />
-    <download-page rdf:resource="http://tapestry.apache.org/download.html" />
-    <programming-language>Java</programming-language>
-    <category rdf:resource="http://projects.apache.org/category/web-framework" />
-    <release>
-      <Version>
-        <name>tapestry</name>
-        <created>2006-01-07</created>
-        <revision>4.0</revision>
-      </Version>
-    </release>
-    <repository>
-      <SVNRepository>
-        <location rdf:resource="http://svn.apache.org/repos/asf/tapestry/tapestry4"/>
-        <browse rdf:resource="http://svn.apache.org/viewcvs.cgi/tapestry/tapestry4/"/>
-      </SVNRepository>
-    </repository>
-  </Project>
-</rdf:RDF>
diff --git a/tapestry/eclipse/codetemplates.xml b/tapestry/eclipse/codetemplates.xml
deleted file mode 100644
index 85eb70f..0000000
--- a/tapestry/eclipse/codetemplates.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><templates><template autoinsert="false" context="newtype_context" deleted="false" description="Newly created files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.newtype" name="newtype">// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-${package_declaration}
-
-${typecomment}
-${type_declaration}</template><template autoinsert="true" context="getterbody_context" deleted="false" description="Code in created getters" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.getterbody" name="getterbody">return ${field};</template><template autoinsert="true" context="setterbody_context" deleted="false" description="Code in created setters" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.setterbody" name="setterbody">${field} = ${param};</template><template autoinsert="true" context="constructorbody_context" deleted="false" description="Code in created constructor stubs" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name="constructorbody">${body_statement}
-// ${todo} Auto-generated constructor stub</template><template autoinsert="true" context="methodbody_context" deleted="false" description="Code in created method stubs" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodbody" name="methodbody">// ${todo} Auto-generated method stub
-${body_statement}</template><template autoinsert="true" context="catchblock_context" deleted="false" description="Code in new catch blocks" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.catchblock" name="catchblock">// ${todo} Auto-generated catch block
-${exception_var}.printStackTrace();</template><template autoinsert="true" context="classbody_context" deleted="false" description="Code in new class type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.classbody" name="classbody">
-</template><template autoinsert="true" context="annotationbody_context" deleted="false" description="Code in new annotation type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name="annotationbody">
-</template><template autoinsert="true" context="interfacebody_context" deleted="false" description="Code in new interface type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name="interfacebody">
-</template><template autoinsert="true" context="enumbody_context" deleted="false" description="Code in new enum type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.enumbody" name="enumbody">
-</template></templates>
\ No newline at end of file
diff --git a/tapestry/eclipse/formatter.xml b/tapestry/eclipse/formatter.xml
deleted file mode 100644
index cde9448..0000000
--- a/tapestry/eclipse/formatter.xml
+++ /dev/null
@@ -1,251 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<profiles version="10">
-<profile name="tapestry" version="10">
-<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="37"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="37"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="100"/>
-<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
-<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
-<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
-</profile>
-</profiles>
diff --git a/tapestry/pom.xml b/tapestry/pom.xml
deleted file mode 100644
index d6bba38..0000000
--- a/tapestry/pom.xml
+++ /dev/null
@@ -1,439 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-project</artifactId>
-    <packaging>pom</packaging>
-    <version>4.1.3</version>
-    <description>Java Web Application Framework</description>
-    <name>Tapestry</name>
-    <inceptionYear>2006</inceptionYear>
-    <url>http://tapestry.apache.org/tapestry4.1/</url>
-
-    <licenses>
-        <license>
-            <name>Apache Software License 2.0</name>
-            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-            <distribution>repo</distribution>
-        </license>
-    </licenses>
-
-    <organization>
-        <name>Apache Software Foundation</name>
-        <url>http://www.apache.org</url>
-    </organization>
-
-    <issueManagement>
-        <system>jira</system>
-        <url>http://issues.apache.org/jira/browse/TAPESTRY</url>
-    </issueManagement>
-
-    <scm>
-        <connection>scm:svn:https://svn.apache.org/repos/asf/tapestry/tapestry4/trunk</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/tapestry/tapestry4/trunk/</developerConnection>
-        <url>http://svn.apache.org/viewcvs.cgi/tapestry/tapestry4/trunk</url>
-    </scm>
-
-    <mailingLists>
-        <mailingList>
-            <name>Tapestry User List</name>
-            <subscribe>users-subscribe@tapestry.apache.org</subscribe>
-            <unsubscribe>users-unsubscribe@tapestry.apache.org</unsubscribe>
-            <archive>http://mail-archives.apache.org/mod_mbox/tapestry-users/</archive>
-            <otherArchives>
-                <otherArchive>http://www.nabble.com/Tapestry---User-f340.html</otherArchive>
-                <otherArchive>http://www.nabble.com/Jakarta-Tapestry-f302.html</otherArchive>
-            </otherArchives>
-        </mailingList>
-        <mailingList>
-            <name>Tapestry Developer List</name>
-            <subscribe>dev-subscribe@tapestry.apache.org</subscribe>
-            <unsubscribe>dev-unsubscribe@tapestry.apache.org</unsubscribe>
-            <archive>http://mail-archives.apache.org/mod_mbox/tapestry-dev/</archive>
-            <otherArchives>
-                <otherArchive>http://www.nabble.com/Tapestry---Dev-f339.html</otherArchive>
-            </otherArchives>
-        </mailingList>
-        <mailingList>
-            <name>Tapestry Commits List</name>
-            <subscribe>commits-subscribe@tapestry.apache.org</subscribe>
-            <unsubscribe>commits-unsubscribe@tapestry.apache.org</unsubscribe>
-            <archive>http://mail-archives.apache.org/mod_mbox/tapestry-commits/</archive>
-        </mailingList>
-    </mailingLists>
-
-    <developers>
-        <developer>
-            <id>hls</id>
-            <name>Howard M. Lewis Ship</name>
-            <email>hlship@apache.org</email>
-            <url>http://howardlewisship.com</url>
-            <roles>
-                <role>Menace</role>
-            </roles>
-            <timezone>-8</timezone>
-        </developer>
-        <developer>
-            <id>jk</id>
-            <name>Jesse Kuhnert</name>
-            <email>jkuhnert@apache.org</email>
-            <url>http://blog.opencomponentry.com</url>
-            <roles>
-                <role>Developer</role>
-            </roles>
-            <timezone>-5</timezone>
-        </developer>
-        <developer>
-            <id>aa</id>
-            <name>Andreas Andreou</name>
-            <email>andyhot@apache.org</email>
-            <url>http://andyhot.di.uoa.gr</url>
-            <roles>
-                <role>Developer</role>
-            </roles>
-            <timezone>2</timezone>
-        </developer>
-    </developers>
-
-    <modules>
-        <module>tapestry-framework</module>
-        <module>tapestry-annotations</module>
-        <module>tapestry-contrib</module>
-        <module>tapestry-portlet</module>
-        <module>tapestry-examples</module>
-		<module>tapestry-archetype</module>	
-    </modules>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>jboss</groupId>
-                <artifactId>javassist</artifactId>
-                <version>3.4.ga</version>
-                <scope>runtime</scope>
-            </dependency>
-            <dependency>
-                <groupId>hivemind</groupId>
-                <artifactId>hivemind</artifactId>
-                <version>1.1.1</version>
-                <scope>compile</scope>
-            </dependency>
-            <dependency>
-                <groupId>hivemind</groupId>
-                <artifactId>hivemind-lib</artifactId>
-                <version>1.1.1</version>
-                <scope>compile</scope>
-            </dependency>
-            <!-- Really, a transitive dependency of hivemind. -->
-            <dependency>
-                <groupId>oro</groupId>
-                <artifactId>oro</artifactId>
-                <version>2.0.8</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-logging</groupId>
-                <artifactId>commons-logging</artifactId>
-                <version>1.1</version>
-                <!-- This is almost always provided by the container. If not, then WARs will have to
-                    create an explicit dependency. -->
-                <scope>provided</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.easymock</groupId>
-                <artifactId>easymock</artifactId>
-                <version>2.3</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.easymock</groupId>
-                <artifactId>easymockclassextension</artifactId>
-                <version>2.2.2</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.testng</groupId>
-                <artifactId>testng</artifactId>
-                <version>5.1</version>
-                <classifier>jdk15</classifier>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <groupId>commons-codec</groupId>
-                <artifactId>commons-codec</artifactId>
-                <version>1.3</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-pool</groupId>
-                <artifactId>commons-pool</artifactId>
-                <version>1.3</version>
-            </dependency>
-            <dependency>
-                <groupId>ognl</groupId>
-                <artifactId>ognl</artifactId>
-                <version>2.7.1</version>
-            </dependency>
-            <dependency>
-                <groupId>javax.servlet</groupId>
-                <artifactId>servlet-api</artifactId>
-                <version>2.4</version>
-                <scope>provided</scope>
-            </dependency>
-            <dependency>
-                <groupId>commons-fileupload</groupId>
-                <artifactId>commons-fileupload</artifactId>
-                <version>1.2</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-beanutils</groupId>
-                <artifactId>commons-beanutils</artifactId>
-                <version>1.7.0</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-lang</groupId>
-                <artifactId>commons-lang</artifactId>
-                <version>2.3</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-io</artifactId>
-                <version>1.3.2</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.tapestry</groupId>
-                <artifactId>tapestry-test</artifactId>
-                <version>4.1.3-SNAPSHOT</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <groupId>backport-util-concurrent</groupId>
-                <artifactId>backport-util-concurrent</artifactId>
-                <version>3.0</version>
-            </dependency>
-            <dependency>
-                <groupId>org.openqa.selenium.client-drivers</groupId>
-                <artifactId>selenium-java-client-driver</artifactId>
-                <version>0.9.0</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.openqa.selenium.server</groupId>
-                <artifactId>selenium-server</artifactId>
-                <version>0.9.0</version>
-                <scope>test</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>cobertura-maven-plugin</artifactId>
-                <version>2.0</version>
-                <inherited>true</inherited>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>clean</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-surefire-plugin</artifactId>
-                    <version>2.3</version>
-                    <inherited>true</inherited>
-                    <configuration>
-                        <systemProperties>
-                            <property>
-                                <name>user.language</name>
-                                <value>en_US</value>
-                            </property>
-                        </systemProperties>
-                        <excludedGroups>integration</excludedGroups>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>2.0.2</version>
-                    <inherited>true</inherited>
-                    <configuration>
-                        <source>1.4</source>
-                        <target>1.4</target>
-                    </configuration>
-                    <executions>
-                        <execution>
-                            <id>compile-tests</id>
-                            <phase>process-test-sources</phase>
-                            <goals>
-                                <goal>testCompile</goal>
-                            </goals>
-                            <configuration>
-                                <source>1.5</source>
-                                <target>1.5</target>
-                            </configuration>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-clean-plugin</artifactId>
-                    <version>2.1.1</version>
-                    <inherited>true</inherited>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-site-plugin</artifactId>
-                    <version>2.0-beta-5</version>
-                    <inherited>true</inherited>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-assembly-plugin</artifactId>
-                    <inherited>true</inherited>
-                    <configuration>
-                        <descriptors>
-                            <descriptor>src/main/assembly/dep.xml</descriptor>
-                            <descriptor>src/main/assembly/full.xml</descriptor>
-                        </descriptors>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-    <reporting>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-report-plugin</artifactId>
-                <version>2.3</version>
-                <inherited>true</inherited>
-            </plugin>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>cobertura-maven-plugin</artifactId>
-                <version>2.0</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-project-info-reports-plugin</artifactId>
-                <version>2.0.1</version>
-                <inherited>true</inherited>
-                <reportSets>
-                    <reportSet>
-                        <reports>
-                            <report>project-team</report>
-                            <report>mailing-list</report>
-                            <report>issue-tracking</report>
-                            <report>license</report>
-                            <report>scm</report>
-                            <report>index</report>
-                            <report>dependencies</report>
-                            <report>dependency-convergence</report>
-                        </reports>
-                    </reportSet>
-                </reportSets>
-                <configuration>
-                    <dependencyLocationsEnabled>true</dependencyLocationsEnabled>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <version>2.2</version>
-                <configuration>
-                    <linksource>true</linksource>
-                    <aggregate>true</aggregate>
-                    <excludePackageNames>
-                        org.apache.tapestry.timetracker:org.apache.tapestry.workbench:org.apache.tapestry.vlib:org.apache.tapestry.wap
-                    </excludePackageNames>
-                    <tags>
-                        <tag>
-                            <name>todo</name>
-                            <placement>a</placement>
-                            <head>To do something:</head>
-                        </tag>
-                    </tags>
-                    <links>
-                        <link>http://hivemind.apache.org/hivemind/apidocs/</link>
-                        <link>http://java.sun.com/j2se/1.4.2/docs/api/</link>
-                        <link>http://java.sun.com/products/servlet/2.3/javadoc/</link>
-                        <link>http://jakarta.apache.org/commons/codec/api-release/</link>
-                        <link>http://jakarta.apache.org/commons/fileupload/apidocs/</link>
-                        <link>http://jakarta.apache.org/commons/logging/apidocs/</link>
-                        <link>http://www.ognl.org/2.6.9/Documentation/javadoc/</link>
-                    </links>
-                    <stylesheetfile>${basedir}/src/site/resources/css/jdstyle.css</stylesheetfile>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-site-plugin</artifactId>
-                <version>2.0-beta-5</version>
-                <inherited>true</inherited>
-            </plugin>
-        </plugins>
-    </reporting>
-
-    <distributionManagement>
-        <site>
-            <id>tapestry</id>
-            <url>scpexe://people.apache.org/www/tapestry.apache.org/tapestry4.1/</url>
-        </site>
-        <repository>
-            <id>tapestry</id>
-            <url>scpexe://people.apache.org/www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
-        </repository>
-        <snapshotRepository>
-            <id>tapestry</id>
-            <url>scpexe://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</url>
-        </snapshotRepository>
-    </distributionManagement>
-
-    <repositories>
-        <repository>
-            <id>apache.snapshots</id>
-            <url>http://people.apache.org/repo/m2-snapshot-repository</url>
-        </repository>
-        <repository>
-            <id>opencomponentry.com</id>
-            <name>Open Componentry OGNL Repository</name>
-            <url>http://opencomponentry.com/repository/m2-snapshot-repo</url>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-        </repository>
-        <repository>
-            <id>openqa</id>
-            <name>OpenQA Maven Repository</name>
-            <url>http://maven.openqa.org/</url>
-        </repository>
-    </repositories>
-
-    <pluginRepositories>
-        <pluginRepository>
-            <id>apache.snapshots</id>
-            <url>http://people.apache.org/repo/m2-snapshot-repository</url>
-        </pluginRepository>
-        <pluginRepository>
-            <id>codehaus.org</id>
-            <url>http://repository.codehaus.org</url>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-        </pluginRepository>
-    </pluginRepositories>
-
-</project>
diff --git a/tapestry/sign.rb b/tapestry/sign.rb
deleted file mode 100644
index f923a04..0000000
--- a/tapestry/sign.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/ruby
-
-DIST_DIR="target"
-
-Dir.glob("#{DIST_DIR}/*.{zip,gz,bz2}") do |filename|
-  puts filename
-  # ... and you have to provide your passphrase again and again!
-  system "gpg --armor --output #{filename}.asc --detach-sig #{filename}"
-  system "md5sum #{filename} > #{filename}.md5"
-end
-
-puts "Uploading distributions ..."
-
-# system 'scp #{DIST_DIR}/*.* jkuhnert@people.apache.org:public_html/tapestry_releases'
diff --git a/tapestry/src/main/assembly/dep.xml b/tapestry/src/main/assembly/dep.xml
deleted file mode 100644
index 313fecf..0000000
--- a/tapestry/src/main/assembly/dep.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE assembly PUBLIC "-//APACHE//DTD Assembly V1.2//EN"
-        "http://maven.apache.org/xsd/assembly-1.0.0.xsd">
-<assembly>
-    <id>bin</id>
-    <formats>
-        <format>tar.gz</format>
-        <format>tar.bz2</format>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>true</includeBaseDirectory>
-    <fileSets>
-        <fileSet>
-            <includes>
-                <include>README*</include>
-                <include>LICENSE*</include>
-                <include>NOTICE*</include>
-                <include>MIT-LICENSE*</include>
-                <include>BUILDING*</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>target</directory>
-            <outputDirectory>lib</outputDirectory>
-            <includes>
-                <include>*.jar</include>
-            </includes>
-        </fileSet>
-    </fileSets>
-    <moduleSets>
-        <moduleSet>
-            <includes>
-                <include>org.apache.tapestry:tapestry-annotations</include>
-                <include>org.apache.tapestry:tapestry-contrib</include>
-                <include>org.apache.tapestry:tapestry-examples</include>
-                <include>org.apache.tapestry:tapestry-framework</include>
-                <include>org.apache.tapestry:tapestry-portlet</include>    
-	            <include>org.apache.tapestry:tapestry-archetype</include>
-            </includes>
-            
-            <binaries>
-                <outputDirectory>lib</outputDirectory>
-                <includeDependencies>true</includeDependencies>
-                <unpack>false</unpack>
-            </binaries>
-        </moduleSet>
-    </moduleSets>
-</assembly>
diff --git a/tapestry/src/main/assembly/full.xml b/tapestry/src/main/assembly/full.xml
deleted file mode 100644
index 30f8ac1..0000000
--- a/tapestry/src/main/assembly/full.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE assembly PUBLIC "-//APACHE//DTD Assembly V1.2//EN"
-        "http://maven.apache.org/xsd/assembly-1.0.0.xsd">
-<assembly>
-    <id>full</id>
-    <formats>
-        <format>tar.gz</format>
-        <format>tar.bz2</format>
-        <format>zip</format>
-    </formats>
-    <includeBaseDirectory>true</includeBaseDirectory>
-    <fileSets>
-        <fileSet>
-            <includes>
-                <include>README*</include>
-                <include>LICENSE*</include>
-                <include>NOTICE*</include>
-                <include>MIT-LICENSE*</include>
-                <include>BUILDING*</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>target</directory>
-            <outputDirectory>lib</outputDirectory>
-            <includes>
-                <include>*.jar</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>target/site</directory>
-            <outputDirectory>docs</outputDirectory>
-        </fileSet>
-
-        <fileSet>
-            <directory>tapestry-examples/TimeTracker/target</directory>
-            <outputDirectory>apps/</outputDirectory>
-            <includes>
-                <include>*.war</include>
-                <include>tapestry-examples/Workbench/target/*.war</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>tapestry-examples/Workbench/target</directory>
-            <outputDirectory>apps/</outputDirectory>
-            <includes>
-                <include>*.war</include>
-            </includes>
-        </fileSet>
-        
-        <fileSet>
-            <outputDirectory>src/</outputDirectory>
-            <includes>
-                <include>pom.xml</include>
-                <include>src/**</include>
-            </includes>
-            <excludes>
-                <exclude>target</exclude>
-                <exclude>test-output</exclude>
-            </excludes>
-        </fileSet>
-        <fileSet>
-            <directory>tapestry-annotations</directory>
-            <outputDirectory>src/tapestry-annotations</outputDirectory>
-            <includes>
-                <include>pom.xml</include>
-                <include>src/**</include>
-            </includes>
-            <excludes>
-                <exclude>target</exclude>
-                <exclude>test-output</exclude>
-            </excludes>
-        </fileSet>
-        <fileSet>
-            <directory>tapestry-contrib</directory>
-            <outputDirectory>src/tapestry-contrib</outputDirectory>
-            <includes>
-                <include>pom.xml</include>
-                <include>src/**</include>
-            </includes>
-            <excludes>
-                <exclude>target</exclude>
-                <exclude>test-output</exclude>
-            </excludes>
-        </fileSet>
-        <fileSet>
-            <directory>tapestry-examples/TimeTracker</directory>
-            <outputDirectory>src/TimeTracker</outputDirectory>
-            <includes>
-                <include>pom.xml</include>
-                <include>src/**</include>
-            </includes>
-            <excludes>
-                <exclude>target</exclude>
-                <exclude>test-output</exclude>
-            </excludes>
-        </fileSet>
-        <fileSet>
-            <directory>tapestry-examples/Workbench</directory>
-            <outputDirectory>src/Workbench</outputDirectory>
-            <includes>
-                <include>pom.xml</include>
-                <include>src/**</include>
-            </includes>
-            <excludes>
-                <exclude>target</exclude>
-                <exclude>test-output</exclude>
-            </excludes>
-        </fileSet>
-        <fileSet>
-            <directory>tapestry-framework</directory>
-            <outputDirectory>src/tapestry-framework</outputDirectory>
-            <includes>
-                <include>pom.xml</include>
-                <include>src/**</include>
-            </includes>
-            <excludes>
-                <exclude>target</exclude>
-                <exclude>test-output</exclude>
-            </excludes>
-        </fileSet>
-        <fileSet>
-            <directory>tapestry-portlet</directory>
-            <outputDirectory>src/tapestry-portlet</outputDirectory>
-            <includes>
-                <include>pom.xml</include>
-                <include>src/**</include>
-            </includes>
-            <excludes>
-                <exclude>target</exclude>
-                <exclude>test-output</exclude>
-            </excludes>
-        </fileSet>
-    </fileSets>
-    <moduleSets>
-        <moduleSet>
-            <includes>
-                <include>org.apache.tapestry:tapestry-annotations</include>
-                <include>org.apache.tapestry:tapestry-contrib</include>
-                <include>org.apache.tapestry:tapestry-examples</include>
-                <include>org.apache.tapestry:tapestry-framework</include>
-                <include>org.apache.tapestry:tapestry-portlet</include>
-	            <include>org.apache.tapestry:tapestry-archetype</include>
-            </includes>
-
-            <binaries>
-                <outputDirectory>lib</outputDirectory>
-                <includeDependencies>true</includeDependencies>
-                <unpack>false</unpack>
-            </binaries>
-        </moduleSet>
-    </moduleSets>
-</assembly>
diff --git a/tapestry/src/site/apt/ajax/basics.apt b/tapestry/src/site/apt/ajax/basics.apt
deleted file mode 100644
index 3ba7d7c..0000000
--- a/tapestry/src/site/apt/ajax/basics.apt
+++ /dev/null
@@ -1,239 +0,0 @@
- ------
-Ajax/DHTML Guide - Basics
- ------
-Jesse Kuhnert
- ------
-24 June 2007
- ------
-
-Ajax Development Basics
-
-  The overall concept behind the majority of built in AJAX functionality in Tapestry is that everything should work exactly the same way in your pages/components
-  in AJAX requests as it does during normal page rendering.  There are a few corner cases that have no real intuitive XHR equivalent which we will discuss as
-  well.
-
-* Including JavaScript in your HTML Template
-
-  One of the first things you will need to do is make sure you have the necessary javascript includes.  Tapestry makes extensive use of the {{{http://dojotoolkit.org}Dojo}}
-  javascript toolkit and provides a couple of options for including it for you automatically via the {{{../components/general/shell.html}Shell}} or
-  {{{../components/general/scriptincludes.html}ScriptIncludes}} components.  An example of defining a basic outer layer using the {{{../components/general/shell.html}Shell}}
-  component would look like:
-
-+-------------------------------------------------------------------------------------------------------------
-<html jwcid="@Shell" title="Basic Ajax Page">
-<body jwcid="@Body">
-
-    <p>Basic javascript inclusion sample.</p>
-
-</body>
-</html>
-+-------------------------------------------------------------------------------------------------------------
-
-* Updating Components:  The universal updateComponents parameter
-
-  One of the most frequently used pieces of ajax functionality is the <<<updateComponents="foo,bar">>> parameter that is now implemented by all of the core Tapestry
-  components - where it makes sense.   Some of the more familiar of these are {{{../components/link/directlink.html}DirectLink}}, {{{../components/form/linksubmit.html}LinkSubmit}},
-  {{{../components/form/form.html}Form}}, {{{../components/form/imagesubmit.html}ImageSubmit}} and {{{../components/form/submit.html}Submit}}.  We'll build on our previous
-  example and use the {{{../components/link/directlink.html}DirectLink}} component to refresh a current time display.
-
-+-------------------------------------------------------------------------------------------------------------
-..
-<p>Basic javascript inclusion sample.</p>
-
-<p>
-    <a jwcid="@DirectLink" listener="listener:setTime" updateComponents="time">Refresh time</a>.
-</p>
-
-<div jwcid="time@Insert" value="ognl:time" renderTag="true" />
-..
-+-------------------------------------------------------------------------------------------------------------
-
-  The corresponding java page class:
-
-+-------------------------------------------------------------------------------------------------------------
-..
-public abstract BasicAjax extends BasePage {
-
-    public abstract void setTime(Date time);
-
-    public void setTime()
-    {
-        setTime(new java.util.Date());
-    }
-}
-+-------------------------------------------------------------------------------------------------------------
-
-  That's it!  Building and running this small example should be all you need to start using the very basic AJAX functionality provided by Tapestry.  
-
-** updateComponents == IComponent.getClientId()
-
-  There are a few subtle things happening here that may not be apparent at first glance.  One of the more important changes in Tapestry 4.1.x was the addition of
-  the {{{../apidocs/org/apache/tapestry/IComponent.html#getClientId()}IComponent.getClientId()}} method to all component classes.  When dealing with client side javascript
-  functionality the unique client side element id of the html elements your components generate becomes very important.  What this method gives you is the unique element id
-  attribute that will be written for any given component depending on the context in which you call it.
-
-  If you are in a {{{../components/general/for.html}For}} loop then the <<<clientId>>> will automatically be incremented for each loop and always represent the unique
-  value of the component.  The same semantics work whether in {{{../components/form/form.html}Forms}} / {{{../components/general/for.html}For}} or any other nested
-  type of structure.  This has been one of key changes in the API that has made the AJAX functionality provided <much> easier to work with.
-
-  In our example the <<<updateComponents>>> parameter given made use of the new smart auto binding functionality added to the framework recently, but you could write
-  the equivalent parameter using an ognl expression as well:
-
-+-------------------------------------------------------------------------------------------------------------
-<a jwcid="@DirectLink" listener="listener:setTime"
-    updateComponents="ognl:components.time.clientId">Refresh time</a>
-+-------------------------------------------------------------------------------------------------------------
-
-  Things can get a lot uglier once you start trying to update multiple components:
-
-+-------------------------------------------------------------------------------------------------------------
-<a jwcid="@DirectLink" listener="listener:setTime"
-    updateComponents="ognl:{components.time.clientId, page.components.status.clientId}">Refresh time</a>
-+-------------------------------------------------------------------------------------------------------------
-
-  The much easier simple string list <<<updateComponents="compA, compB, compC">>> is not only shorter / easier to understand but also more efficient and robust
-  in many different circumstances.  For instance, the auto binding functionality would be able to detect that you were trying to update a component contained within
-  one of your own custom components as well as a component on the page containing your component and wire up and find all the correct <<<clientId>>> values for you
-  automatically.
-
-  The thing to walk away with here is that in 98% of the cases you run in to this style of <<<updateComponents>>> syntax is the way to go:
-
-+-------------------------------------------------------------------------------------------------------------
-<a jwcid="@DirectLink" listener="listener:setTime" updateComponents="time,status">Refresh time</a>
-+-------------------------------------------------------------------------------------------------------------
-
-** How clientId values are generated
-
-  The actual value that is output by a component is determined by a number of rules depending on the context and type of component involved.  Of course,  no id will
-  be generated at all if your custom components don't call the new
-  {{{../apidocs/org/apache/tapestry/AbstractComponent.html#renderIdAttribute(org.apache.tapestry.IMarkupWriter,%20org.apache.tapestry.IRequestCycle)}AbstractComponent.renderIdAttribute(IMarkupWriter, IRequestCycle)}}
-  method provided in the base <<<AbstractComponent>>> superclass that most components derive from.  When that method is called the rules for determining what value to render out
-  in to the generated html element are evaluated in this order:
-
-  [[1]] <<informal id parameter bound?>> - If the definition of the component being rendered had an informal <<<id="UpdatedComponent">>> parameter specified that will
-  take higher precendence than anything else.  It may eventually end up being output as <<<id="UpdatedComponent_4">>> if your component is being rendered in a loop but
-  it will still use the id as the basis for its client side id values.
-
-+----------------------------------------------
-<div jwcid="@Any" id="customId" >Content</div>
-+----------------------------------------------
-
-  [[1]] <<use IComponent.getId() value>> - If no informal id parameter is bound then the next candidate used to seed the clientIds is the value returned from
-  <<<IComponent.getId()>>>.  This will be the id specified in your <<<Page.page>>> file or the id assigned in your html snippet as in:
-
-+----------------------------------------------
-<div jwcid="customId@Any">Content</div>
-
-or .page file:
-
-<component id="customId" type="Any">
-</component>
-+----------------------------------------------
-
-  [[1]] <<form component?>> - If the component in question implements {{{../apidocs/org/apache/tapestry/form/IFormComponent.html}IFormComponent}} then the same semantics
-  as above apply with the caveat that the inner workings of client id generation work slightly differently here as they are synchronized back with the normal
-  {{{../components/form/form.html}Form}} input name/clientId semantics that Tapestry has always had.
-
-  []
-  
-  The previously mentioned <<<renderIdAttribute>>> method is the crucual piece that anyone writing custom components will need to make sure to call if you plan on
-  overriding <<<IComponent.renderComponent>>>.  One very simplistic example of calling this new base method would be:
-
-+-------------------------------------------------------------------------------------------------------------
-..
-public abstract MyCustomComponent extends AbstractComponent {
-
-    public void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.begin("div");
-
-        writer.renderIdAttribute(writer, cycle); <----------------------------------*
-        writer.renderInformalParamters(writer, cycle);
-
-        writer.print("Custom text content..");
-
-        writer.end();
-    }
-}
-+-------------------------------------------------------------------------------------------------------------
-
-** Common Mistake:  Can't update a component not already rendered on the page
-
-  One of more common questions on the users mailing list inevitably involves this innocent looking block of code modified from our previous examples:
-
-+-------------------------------------------------------------------------------------------------------------
-..
-<p>Basic javascript inclusion sample.</p>
-
-<p>
-    <a jwcid="@DirectLink" listener="listener:setTime" updateComponents="time">Refresh time</a>.
-</p>
-
-<span jwcid="@If" condition="ognl:time != null">
-    <div jwcid="time@Insert" value="ognl:time" renderTag="true" />
-</span>
-..
-+-------------------------------------------------------------------------------------------------------------
-
-  The problem with this code is that the component being requested to update - <<<time>>> - doesn't actually exist as a valid client side
-  html element when you click on the <<<Refresh Time>>> link.  The initial block of html generated from this template will really look
-  like:
-
-+-------------------------------------------------------------------------------------------------------------
-..
-<p>Basic javascript inclusion sample.</p>
-
-<p>
-    <a href="http://localhost:80080/app?..." id="DirectLink"
-        onClick="return tapestry.linkOnClick(this.href)">Refresh time</a>.
-</p>
-..
-+-------------------------------------------------------------------------------------------------------------
-
-  The crucial piece missing in the above sample snippet is an html block for our <<<time>>> component.  It wasn't rendered initially because
-  the time value was null.  The semantics of how the client side XHR io logic works basically comes down to:
-
-  * <<make XHR IO Request>> - Initiate client side XHR request which will eventually return a block of html for our <<<time>>> component
-  of:
-
-+-------------------------------------------------------------------------------------------------------------
-<div id="time">10:49 am 1/2/2007</div>
-+-------------------------------------------------------------------------------------------------------------
-
-  * <<find the matching client side dom node and update it>> - This is the part that breaks down.  The very basic minimal example of how it is
-  done would look something like:
-
-+-------------------------------------------------------------------------------------------------------------
-..
-var responseNode = getResponseHtml(); // this is the time div block from the last example
-
-var updateNode = document.getElementById("time");
-updateNode.innerHTML = getContentAsString(responseNode);
-..
-+-------------------------------------------------------------------------------------------------------------
-
-  The resulting client side error that is logged should be something along the lines of <<<"couldn't find a matching client side dom node to update with id of 'time'">>>.
-
-  The solution to get around this varies for each situation but the most common / easiest method is usually done by just wrapping the block that conditionally renders
-  with a simple {{{../components/general/any.html}Any}} component:
-
-+-------------------------------------------------------------------------------------------------------------
-..
-<p>Basic javascript inclusion sample.</p>
-
-<p>
-    <a jwcid="@DirectLink" listener="listener:setTime" updateComponents="updateArea">Refresh time</a>.
-</p>
-
-<span jwcid="updateArea@Any">
-    <span jwcid="@If" condition="ognl:time != null">
-        <div jwcid="time@Insert" value="ognl:time" renderTag="true" />
-    </span>
-</span>
-..
-+-------------------------------------------------------------------------------------------------------------
-
-  Now the example specifies a <<<updateComponents="updateArea">>> definition for which components to update and has the {{{../components/general/any.html}Any}} updated
-  instead of <<<time>>> directly as it <will> exist on the client side prior to our requesting an update on it and shouldn't interfere overly much with whatever
-  CSS/design we have setup.
-  
\ No newline at end of file
diff --git a/tapestry/src/site/apt/ajax/debugging.apt b/tapestry/src/site/apt/ajax/debugging.apt
deleted file mode 100644
index c25c46e..0000000
--- a/tapestry/src/site/apt/ajax/debugging.apt
+++ /dev/null
@@ -1,71 +0,0 @@
- ------
-Ajax/DHTML Guide - Debugging
- ------
-Jesse Kuhnert
- ------
-11 February 2007
- ------
- 
-Server Side Debugging
-
-  There are of course a variety of debugging methods / options you can employ, but the easiest thing to do when getting going initially may 
-  be to turn on two key logging categories in your logging configuration file of choice. This example shows how to turn on debugging using
-  log4j configurations:
-  
-+-----------------------------------------------------------
-log4j.rootLogger=DEBUG, A1
-
-# A1 is set to be a ConsoleAppender. 
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%c{1} [%p] %m%n
-
-log4j.logger.tapestry.globals.ResponseBuilder=DEBUG
-log4j.logger.org.apache.tapestry.services.impl.DojoAjaxResponseBuilder=DEBUG
-+-----------------------------------------------------------
-
-  This simple configuration example should be enough to turn on an enormous amount of detail on the inner workings of the 
-  {{{../apidocs/org/apache/tapestry/services/ResponseBuilder.html}ResponseBuilder}} service. The global
-  {{{../tapestry-framework/hivedoc/service/tapestry.globals.ResponseBuilder.html}tapestry.globals.ResponseBuilder}} hivemind service
-  should be a great place to apply the hivemind {{{http://hivemind.apache.org/hivemind1/hivemind/LoggingInterceptor.html}logging interceptor}}
-  service. An example of applying the logging interceptor would be:
-
-+----------------------------------------------------------------------------------
-<implementation service-id="tapestry.globals.ResponseBuilder">
-    <interceptor service-id="hivemind.LoggingInterceptor" />
-</implementation>
-+----------------------------------------------------------------------------------
-  
-Client Side Debugging
-
-  First and foremost, if you don't have the {{{http://getfirebug.com/}FireBug}} firefox extension installed - {{{http://getfirebug.com/}get it now}}. Using
-  this plugin alone should give you a plethora of useful debugging information. Tapestry/Dojo also make good use of some of the core functionality exposed
-  by this plugin in client side debugging facilities, so there is even greater incentive to check it out.
-  
-* Configuration
-
-  The logging facilities employed on the client side work in much the same way as the standard log4j style logging semantics many people are used to. The options
-  for turning this kind of logging on / configuration can all be controlled through the {{{../components/general/shell.html}Shell}} or {{{../components/general/scriptincludes.html}ScriptIncludes}} components - 
-  whichever you use in your projects. 
-  
-  There are 3 core configuration parameters to these components that control the majority of logic here:
-  
-  * <<browserLogLevel>> - Sets the default browser based javascript log level to use to debug client side interactions. If you specify an html element id to 
-  						  place the debug content it will be written there. Otherwise, the default is to write to an element with id "debug", or append to the 
-  						  document body if none exists.
-  						  
-  						  See the dojo docs for more information about logging, but the basic idea is that you can write statements like <<<dojo.log.info("Doing some operation");>>>
-  						  in javascript and have them appropriately filtered based on the log level.
-  
-  * <<debugEnabled>> - Turns browser level logging completely on/off.
-  
-  * <<consoleEnabled>> - Enables/disables the <<<dojo.debug.console>>> functionality which should redirect most logging messages to your browsers javascript console <(if it supports one)>.
-  						 
-  						 The debug console is disabled by default. Currently known supported browsers are FireFox<(having FireBug extension helps a great deal)>/Opera/Safari.  
-
-* Sample
-
-  Following is a sample screenshot of the kind of debugging statements you'll find in debug mode from the {{{../demos.html}TimeTracker demo}}.
-  
-[../images/ajax-firebug.png] Sample firebug output with console debugging enabled.
\ No newline at end of file
diff --git a/tapestry/src/site/apt/ajax/eventlistener.apt b/tapestry/src/site/apt/ajax/eventlistener.apt
deleted file mode 100644
index 1672a6e..0000000
--- a/tapestry/src/site/apt/ajax/eventlistener.apt
+++ /dev/null
@@ -1,205 +0,0 @@
- ------
-Ajax/DHTML Guide - EventListener
- ------
-Jesse Kuhnert
- ------
-26 July 2006
- ------
- 
-EventListener, the swiss army knife of ajax functionality
-
-  The {{{../tapestry-annotations/index.html#EventListener}EventListener}} annotation is probably going to
-  be the most frequently used new feature <(if history from tacos users is any indicator)> in 
-  Tapestry 4.1. It offers an awful lot,  and is based around the functionality now familiar to many
-  in {{{http://dojotoolkit.org}dojo}}'s {{{http://dojotoolkit.org/book/dojo-book-0-4/part-5-connecting-pieces/event-system-0}event API}}.
-  
-  <<See also:>> {{{../tapestry-annotations/index.html#EventListener}EventListener}} core annotation documentation.,  {{{http://www.quirksmode.org/js/introevents.html}Quircksmode}}
-  
-  At its core this new annotation allows you to bind client side events to page/component 
-  {{{../usersguide/listenermethods.html}listener}} methods. "Client Side" events can have a lot
-  of different meanings. It could mean listening to function calls on a Tapestry 
-  {{{../apidocs/org/apache/tapestry/dojo/IWidget.html}supported}} dojo widget, 
-  or it could mean listening to changing field values in a Tapestry {{{../components/form/form.html}Form}} component.
-  
-* Basic example, listening to pure DOM events
-
-  In this example we want to be notified whenever anyone moves their mouse over a particular 
-  html element on our page. :
-
-  <<Note:>> Not to be confused with listening to elements rendered by components, for that use the target attribute.
-
-+-----------------------------------------------------------
-....
-<body>
-
-  <div id="myFavoriteDiv">Big brother is watching you.</div>
-
-</body>
-....
-+-----------------------------------------------------------
-  
-  The java page class snippet required to bind to this event:
-  
-+-------------------------------------------------------------
-....
-
-@EventListener(elements = "myFavoriteDiv", events = "onmouseover")
-public void watchText()
-{
- // do something 
-}
-
-....
-+-------------------------------------------------------------
-  
-  That's it! If you'd like more contextual information, like what was happening
-  with the event that initiated the original client-side event just add a 
-  {{{../apidocs/org/apache/tapestry/event/BrowserEvent.html}BrowserEvent}} 
-  parameter to your listener and it will be automatically populated.
-  
-+-------------------------------------------------------------
-....
-
-@EventListener(elements = "myFavoriteDiv", events = "onmouseover")
-public void watchText(BrowserEvent event)
-{
- // do something 
- System.out.println("User clicked on x/y coordinates " 
-                    + event.getPageX() + "/" + event.getPageY());
-}
-
-....
-+-------------------------------------------------------------
-
-* Complex possibilities, binding widget functions to form submissions
-
-  Depending on the number of parameters you specify you can achieve some fairly 
-  complicated <(under the covers at least)> logic with very little work. 
-  
-** Listening to widget functions
-  
-  In this example we want our {{{../usersguide/listenermethods.html}listener}} method to 
-  be called when the {{{../apidocs/org/apache/tapestry/dojo/form/Autocompleter.html}Autocomplete}} 
-  component on our page has selected an entry.
-  
-  The relevant html:
-  
-+-----------------------------------------------------------------------
-....
-
-<form jwcid="myform@Form" clientValidationEnabled="true">
-	<fieldset>
-	   Select a project:
-	   <span jwcid="projectSelect" />
-	</fieldset>
-</form>
-
-....
-+-----------------------------------------------------------------------
-
-  The java page class snippet:
-
-+-----------------------------------------------------------------------
-....
-@Component(bindings = { "model=projectModel", "value=selectedProject",
-        "displayName=message:choose.project", "filterOnChange=true",
-        "validators=validators:required"})
-public abstract Autocompleter getProjectSelection();
-
-@EventListener(targets = "projectChoose", events = "onValueChanged")
-public void projectSelected()
-{
-	// do something
-}
-....
-+-----------------------------------------------------------------------
-
-** Accessing intercepted functions' parameters on the server-side
-
-  <<Note:>> This feature requires version 4.1.3.
-
-  When listening to a client-side javascript function that does not represent a native
-  browser-event, you can access the parameters passed to the function on the server-side. 
-  The Parameters are made available as a JSON-Array within the class 
-  {{{../apidocs/org/apache/tapestry/event/BrowserEvent.html}BrowserEvent}}.
-  
-  So, given a javascript function "trigger" defined on component "triggerable" which
-  was called like <<<triggerable.trigger(\{"theAnswer":42\}, ... )>>>, you may get hold
-  of the answer like that:
-  
-+-----------------------------------------------------------------------
-@EventListener(events="trigger", targets="triggerable", elements="element")
-public void onTriggered( BrowserEvent event )
-{
-   doSomething( event.getMethodArguments().getJSONObject(0).getInt("theAnswer") );
-}
-+-----------------------------------------------------------------------    
-
-** Submitting forms when an event happens, and bypass client validation while you're at it
-  
-  The last example was good for showing how to listen to widget function events, but what are you
-  supposed to do with an event that comes from a 
-  {{{../apidocs/org/apache/tapestry/form/IFormComponent.html}IFormComponent}} that 
-  doesn't also submit and update the form value that was changed? 
-
-  Nothing! If you specify a component target that already implements {{{../apidocs/org/apache/tapestry/form/IFormComponent.html}IFormComponent}}
-  the event system will automatically wire up the form submission for you.
-
-  In the rare instance where you would want to submit some <<other>> form instead of the default you can do so
-  by using the <<<submitForm>>> parameter.
-  
-+-----------------------------------------------------------------------
-....
-
-@EventListener(targets = "projectChoose", events = "onValueChanged",
-          submitForm = "myForm")
-public void projectSelected()
-{
-	// do something
-}
-
-....
-+-----------------------------------------------------------------------
-
-  That's it! When your {{{../usersguide/listenermethods.html}listener}} is invoked you can be confident
-  that your <<<projectSelect>>> {{{../components/dojo/autocompleter.html}Autocompleter}} 
-  component has also been updated to reflect the currently selected value.
-  
-  As an added bonus, form validation is turned off by default with the {{{../tapestry-annotations/index.html#EventListener}EventListener}} 
-  annotation as the majority use case is likely to be one off individual events where invoking 
-  client side validation would be a cumbersome experience for users.
-
-** Turning off asynchronous submissions
-
-  There are some rare instances where you want to wire up an event to a {{{../apidocs/org/apache/tapestry/form/IFormComponent.html}IFormComponent}} that
-  you would like to cause a submission but not have it happen asynchronously. For that you can use the <<<async=false>>> attribute.
-
-+-----------------------------------------------------------------------
-....
-
-@EventListener(targets = "projectChoose", events = "onValueChanged", async = false)
-public void projectSelected()
-{
-	// do something
-}
-
-....
-+-----------------------------------------------------------------------
-
-* A note about event names
-
-  One common misunderstanding with EventListener is the exact syntax to use when listening to events. 
-  The rules aren't very complicated, but there are two important differences:
-  
-  * <<Native Events>> : These are events generated by actions people take in the web browser. Such events
-  might be Mouse,Keyboard,Focus,or any combination within. All are covered in the handy reference at
-  {{{http://www.quirksmode.org/js/introevents.html}Quircksmode.org}}. These events should almost always be 
-  specified in all lowercase. Event though it is perfectly legal to do something like 
-  <<<window.onScroll=function doMyBidding(evt){}>>>, this is not the same thing that happens when you call
-  <<<window.addEventListener('onscroll',function(e){});>>> - which is more or less what Dojo is doing. Just keep
-  all of your event names in lowercase and you'll be ok.
-  
-  * <<Function Names>> : Because the Dojo event connection system is so powerful it allows you to bind to more
-  than just native javascript events, like function calls on javascript functions. The example above referenced 
-  the <<<selectOption>>> function for the Autocompleter widget. It <is> valid/correct to use proper capital case
-  when referencing actual javascript functions on the client side.
\ No newline at end of file
diff --git a/tapestry/src/site/apt/ajax/index.apt b/tapestry/src/site/apt/ajax/index.apt
deleted file mode 100644
index 433334b..0000000
--- a/tapestry/src/site/apt/ajax/index.apt
+++ /dev/null
@@ -1,13 +0,0 @@
- ------
-Ajax/DHTML Guide - Introduction
- ------
-Jesse Kuhnert
- ------
-26 July 2006
- ------
- 
-Introduction
-
-  This section of the site is definitely a work in progress, but for now most people will find
-  the {{{eventlistener.html}EventListener}} documentation particularly helpful.
-  
\ No newline at end of file
diff --git a/tapestry/src/site/apt/ajax/json.apt b/tapestry/src/site/apt/ajax/json.apt
deleted file mode 100644
index 4892cfa..0000000
--- a/tapestry/src/site/apt/ajax/json.apt
+++ /dev/null
@@ -1,136 +0,0 @@
- ------
-Ajax/DHTML Guide - JSON (JavaScript Object Notation)
- ------
-Jesse Kuhnert
- ------
-24 June 2007
- ------
-
-JSON - JavaScript Object Notation
-
-  JSON is a very popular data transmission format used in many XHR applications - the ever popular gmail application makes extensive use of it.  The official
-  web site has much more information on all the details at {{http://json.org}}.
-
-  While the majority of default XHR (ajax) behaviour provided by Tapestry uses
-  XML as the exchange format - because of how easy it is to wrap existing html blocks - it does also provide a great deal of support/API functionality for you
-  to utilize JSON data transmission formats in your own applications.
-
-  This document will go over some of the basics of using this part of the API on the client / server side as well as show examples of how it is used by Tapestry
-  itself in components such as the {{{../components/dojo/autocompleter.html}Autocompleter}}. 
-
-* JSON Basics
-
-  The basic idea behind the JSON format is that you can output something using it from the server and your browser can evaluate it and access the structures you
-  define directly - like any other javascript object.  For example,  we could define a response listing the general attributes of a user in some theoretical system
-  we are building:
-
-+--------------------------------------------------------------------------------------
-{name:"Dr. No", occupation:"Super villain", age:52, email:"noknows@gmail.com"}
-+--------------------------------------------------------------------------------------
-
-  The above block of JSON can be interpreted and used on the client side in javascript with a couple simple statements:
-
-+--------------------------------------------------------------------------------------
-var user=eval("{name:'Dr No', occupation: 'Super villain'}");
-alert("User occupation:" + user.occupation + " name:" + user.name);
-+--------------------------------------------------------------------------------------
-
-  The format also supports returning array like structures as well as nesting of differnt kind of structures as in:
-
-+--------------------------------------------------------------------------------------
-{users:[
-    {name:"Dr. No", occupation:"Super villain", age:52, email:"noknows@gmail.com"},
-    {name:"Henrietta Smith"},
-    {name:"Lev Nikolayevich Myshkin", occupation:"Idiot"}
-    ]
-}
-
-or just..:
-
-["10", "30", "14", "5"]
-+--------------------------------------------------------------------------------------
-
-  You get the idea..  One of the more useful things provided by {{http://json.org}} is a sample java API for working with the format - {{http://www.json.org/java/index.html}}.
-  Tapestry has incorporated this java code in to the API proper <(with some minor improvements)> so creating our first example JSON object output can be as simple as:
-
-+-----------------------------------------------------------------------------------------------------------------
-..
-org.apache.tapestry.json.JSONObject json = new JSONObject();
-json.put("name", "Dr. No");
-json.put("occupation", "Super villain");
-..
-calling json.toString() should produce:
-{"name":"Dr. No", "occupation":"Super villain"}
-+-----------------------------------------------------------------------------------------------------------------
-
-  <<See also:>> {{{../apidocs/org/apache/tapestry/json/package-summary.html}Tapestry JSON API}}
-
-* {{{../apidocs/org/apache/tapestry/IJSONRender.html}IJSONRender}}:  Writing JSON capable components
-
-  To support this new format we've added a new optional interface that you can implement in your components - {{{../apidocs/org/apache/tapestry/IJSONRender.html}IJSONRender}}:
-
-+-----------------------------------------------------------------------------------------------------------------
-public void renderComponent(IJSONWriter writer, IRequestCycle cycle)
-{
-}
-+-----------------------------------------------------------------------------------------------------------------
-
-  The basic idea is the same as the typical <<<IComponent.renderComponent(IMarkupWriter, IRequestCycle)>>> call - except that in this case you are dealing with
-  a {{{../apidocs/org/apache/tapestry/json/IJSONWriter.html}IJSONWriter}} instance instead of the more familiar {{{../apidocs/org/apache/tapestry/IMarkupWriter.html}IMarkupWriter}}.
-  This interface is really just a wrapper around the JSON api provided by Tapestry.
-
-  Once you have implemented this {{{../apidocs/org/apache/tapestry/IJSONRender.html}IJSONRender}} interface in one of your components that is pretty much all there is to
-  do.  The JSON method you implement will only be called if a JSON request is processed by Tapestry <AND> the request has specified your component as one of the components
-  to update and capture the response of.  Otherwise the normal html markup based methods will be called on your component.
-
-** Client Side Processing
-
-  Processing json response data on the client side isn't really something Tapestry can do for you,  so you'll have to have your own consumer of this data set up
-  to handle it beforehand.  If you use the standard Tapestry API's then the global {{{../jsdoc/files/core-js.html#tapestry.loadJson}tapestry.loadJson}} javascript function
-  will be invoked.  Currently this function does nothing other than decrement the global <<<tapestry.requestsInFlight>>> javascript variable value.  You can replace or
-  do an event connection on this function to provide your own implementation.  An example of doing an event connection would be:
-
-+-----------------------------------------------------------------------------------------------------------------
-dojo.event.connect(tapestry, "loadJson", function(type, data, http, kwArgs){
-    // do your stuff...the data argument is your json object
-});
-+-----------------------------------------------------------------------------------------------------------------
-
-* Example:  Tapestry's Autocompleter Component
-
-  One example of a core Tapestry component that implements the {{{../apidocs/org/apache/tapestry/IJSONRender.html}IJSONRender}} interface is the
-  {{{../components/dojo/autocompleter.html}Autocompleter}} component.  The method implementation of that component looks like this:
-
-+-----------------------------------------------------------------------------------------------------------------
-public void renderComponent(IJSONWriter writer, IRequestCycle cycle)
-{
-   IAutocompleteModel model = getModel();
-
-   if (model == null)
-     throw Tapestry.createRequiredParameterException(this, "model");
-
-   List filteredValues = model.getValues(getFilter());
-
-   if (filteredValues == null)
-    return;
-
-   Object key = null;
-   String label = null;
-   JSONObject json = writer.object();
-
-   for (int i=0; i < filteredValues.size(); i++) {
-    Object value = filteredValues.get(i);
-
-    key = model.getPrimaryKey(value);
-    label = model.getLabelFor(value);
-    json.put(getDataSqueezer().squeeze(key), label );
-   }     
-}
-+-----------------------------------------------------------------------------------------------------------------
-
-  This component actually makes use of some new base classes - like {{{../apidocs/org/apache/tapestry/dojo/form/AbstractFormWidget.html}AbstractFormWidget}} - don't
-  let this distract you from the <<<IJSONRender>>> interface portion.  They are both mutually exclusive and totally unrelated.
-
-  That is pretty much it.  This component hands off the majority of client side functionality to a Dojo widget and only provides the widget with a URL string produced
-  by a pre-generated JSON request.  You can find the full source and all of the gory details of the rest of
-  that {{{http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java?view=markup}here}}.
diff --git a/tapestry/src/site/apt/ajax/responsebuilder.apt b/tapestry/src/site/apt/ajax/responsebuilder.apt
deleted file mode 100644
index c5976ab..0000000
--- a/tapestry/src/site/apt/ajax/responsebuilder.apt
+++ /dev/null
@@ -1,58 +0,0 @@
- ------
-Ajax/DHTML Guide - ResponseBuilder
- ------
-Jesse Kuhnert
- ------
-28 July 2006
- ------
- 
-Overview
-
-  One of the largest changes made to Tapestry 4.1 was the rendering cycle. Traditionally, responses were made
-  using one basic {{{../apidocs/org/apache/tapestry/IMarkupWriter.html}IMarkupWriter}} instance
-  to capture and render output back to the browser. <(this isn't entirely true, NullWriter instances are used 
-  in some instances, like rewinding {{{../components/form/form.html}Form}} components)>
-  
-  The new method looks basically the same on the surface, but rendering output is now managed by specific
-  {{{../apidocs/org/apache/tapestry/services/ResponseBuilder.html}ResponseBuilder}} instances,
-  depending on the type of request. These classes are responsible for calling 
-  {{{../apidocs/org/apache/tapestry/AbstractComponent.html#render(org.apache.tapestry.IMarkupWriter,%20org.apache.tapestry.IRequestCycle)}AbstractComponent.html#render(IMarkupWriter writer, IRequestCycle cycle}}
-  for all component renders. They are also responsible for managing javascript output from script templates.
-  
-  You can always get a reference to the correct {{{../apidocs/org/apache/tapestry/services/ResponseBuilder.html}ResponseBuilder}} for 
-  the current request by calling <<<cycle.getResponseBuilder()>>> on your {{{../apidocs/org/apache/tapestry/IRequestCycle.html}IRequestCycle}} 
-  instance.
-  
-  <<See also:>> {{{../apidocs/org/apache/tapestry/services/ResponseBuilder.html}ResponseBuilder}}, 
-  {{{../apidocs/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.html}DojoAjaxResponseBuilder}},
-  {{{../apidocs/org/apache/tapestry/services/impl/JSONResponseBuilder.html}JSONResponseBuilder}}
-  
-* Using ResponseBuilder to dynamically update content
-
-  Based on the type of request made, one of the three available {{{../apidocs/org/apache/tapestry/services/ResponseBuilder.html}ResponseBuilder}}s 
-  will be chosen to handle it. In the case of a request made using the {{{EventListener.html}EventListener}} annotation, the
-  builder used will <(not in all cases, if you specify async=false on your annotation the request will be a 
-  normal http post)> be {{{../apidocs/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.html}DojoAjaxResponseBuilder}}.
-  
-  Building on the example started in the {{{EventListener.html}EventListener}} overview, this is how you
-  would dynamically update the contents of a component:
-  
-+-----------------------------------------------------------------------
-....
-
-@EventListener(targets = "projectChoose", events = "onValueChanged")
-public void projectSelected(IRequestCycle cycle)
-{
-  cycle.getResponseBuilder().updateComponent("myComponentId");
-}
-
-....
-+-----------------------------------------------------------------------
-
-  The string value passed in to <<<updateComponent(String componentId)>>> is the component id of the component
-  which you would like to update. 
-  
-  Tapestry will correctly manage and render all javascript/form state/etc needed, depending on the component 
-  type you are requesting an update on. 
-  
- 
diff --git a/tapestry/src/site/apt/demos.apt b/tapestry/src/site/apt/demos.apt
deleted file mode 100644
index b74de69..0000000
--- a/tapestry/src/site/apt/demos.apt
+++ /dev/null
@@ -1,22 +0,0 @@
- ------
-Tapestry 4.1 Demos
- ------
-Jesse Kuhnert
- ------
-28 July 2006
- ------
-
-{{{http://opencomponentry.com:8080/timetracker}TimeTracker}}
-
-  The {{{http://opencomponentry.com:8080/timetracker}TimeTracker}} application is a <work in progress> 
-  demonstration of some of the new XHR features available in tapestry.
-  
-  <<Demo:>> {{{http://opencomponentry.com:8080/timetracker}TimeTracker}}
-
-{{{http://opencomponentry.com:8080/workbench}Tapestry Workbench}}
-
-  The familiar {{{http://opencomponentry.com:8080/workbench}Workbench}} application has been updated 
-  to demonstrate what some of the new built in features look like, most notably the client side validation
-  API.
-
-  <<Demo:>> {{{http://opencomponentry.com:8080/workbench}Tapestry Workbench}}
diff --git a/tapestry/src/site/apt/developmentguide/exceptionpages.apt b/tapestry/src/site/apt/developmentguide/exceptionpages.apt
deleted file mode 100644
index 26206ca..0000000
--- a/tapestry/src/site/apt/developmentguide/exceptionpages.apt
+++ /dev/null
@@ -1,80 +0,0 @@
- ------
-Development Guide - Exception Pages
- ------
-Jesse Kuhnert
- ------
-13 Nov 2006
- ------
- 
-Custom Exception Pages
-
-  One of the most common requests seen on the users mailing list is "how do I replace the default Tapestry exception 
-  page with my own custom page?". This section will attemp to clear that up.
-  
-* Default hivemind configuration
-
-  The Tapestry exception presenting logic works by using whatever configuration values are found in
-  the global hivemind <<<tapestry.Infrastructure>>> configuration point to specify which pages to 
-  use. <(using Page names)>
-  
-  The following fragment is the complete configuration used by the default Tapestry exception presenting
-  services:
-
-+-----------------------------------------------------------
-<contribution configuration-id="tapestry.Infrastructure">
-    <property name="exceptionPageName" value="Exception"/>
-    <property name="exceptionPageName" mode="wml" value="WMLException"/>
-    
-    <property name="staleSessionPageName" value="StaleSession"/>
-    <property name="staleSessionPageName" mode="wml" value="WMLStaleSession"/>
-    
-    <property name="staleLinkPageName" value="StaleLink"/>
-    <property name="staleLinkPageName" mode="wml" value="WMLStaleLink"/>
-    
-    <property name="requestExceptionReporter" object="service:RequestExceptionReporter"/>    
-    <property name="exceptionPresenter" object="service:ExceptionPresenter"/>
-    <property name="exceptionPresenter" mode="wml" object="service:WMLExceptionPresenter"/>
-    
-    <property name="staleSessionExceptionPresenter" object="service:StaleSessionExceptionPresenter"/>
-    <property name="staleLinkExceptionPresenter" object="service:StaleLinkExceptionPresenter"/>
-</contribution>  
-+-----------------------------------------------------------
-  
-* Override the core <<<Exception>>> page with your own
-
-  Using the configuration reference above we can see that we only need to override the default 
-  <<<exceptionPageName>>> configuration property to have our own page used. 
-  
-  So, for example - if you had written a custom page in your application called <<<MyCustomExceptionPage>>> 
-  you would be able  to make it the default exception page by adding this fragment to your application's 
-  <<<hivemodule.xml>>> configuration file:
-  
-+-----------------------------------------------------------
-<contribution configuration-id="tapestry.InfrastructureOverrides">
-    <property name="exceptionPageName" value="MyCustomExceptionPageName"/>
-</contribution>  
-+-----------------------------------------------------------
-
-  Your page would have to have a property
-  called <<<exception>>>. A sample page class might look as follows:
-
-+-----------------------------------------------------------
-public abstract class MyCustomExceptionPage extends BasePage
-{
-    private static Logger logger = Logger.getLogger(ExceptionPage.class);
-
-    @InitialValue("false")
-    public abstract boolean isPageNotFound();
-    public abstract void setPageNotFound(boolean pageNotFound);
-    
-    public void setException(Throwable t)
-    {
-        logger.error("an exception occured", t);
-        if(t instanceof PageNotFoundException ||
-                t.getCause() instanceof PageNotFoundException)
-        {
-            setPageNotFound(true);
-        }
-    }
-}  
-+-----------------------------------------------------------
diff --git a/tapestry/src/site/apt/developmentguide/index.apt b/tapestry/src/site/apt/developmentguide/index.apt
deleted file mode 100644
index b32914a..0000000
--- a/tapestry/src/site/apt/developmentguide/index.apt
+++ /dev/null
@@ -1,14 +0,0 @@
- ------
-Development Guide - Introduction
- ------
-Jesse Kuhnert
- ------
-13 Nov 2006
- ------
- 
-Introduction
-
-  This guide is intended for more advanced audiences where slight customizations are needed to extend 
-  existing functionality,  as well as give an overview for how some of the important core Tapestry services involved
-  behind the scenes works.
-  
\ No newline at end of file
diff --git a/tapestry/src/site/apt/developmentguide/performancetuning.apt b/tapestry/src/site/apt/developmentguide/performancetuning.apt
deleted file mode 100644
index 607e00f..0000000
--- a/tapestry/src/site/apt/developmentguide/performancetuning.apt
+++ /dev/null
@@ -1,45 +0,0 @@
- ------
-Development Guide - Performance Tuning
- ------
-Jesse Kuhnert
- ------
-22 Jun 2007
- ------
-
-Performance Tuning
-
-  There are a number of new options available to help you tune Tapestry's internal configuration to better suite you particular
-  applications scaling requirements.  This section will go over what these options are and how to use them.
-
-* Page Pooling
-
-  The internal pooling of Tapestry pages now delegates the majority of actual pooling work to the {{{http://jakarta.apache.org/commons/pool/}commons-pool}}
-  library.  This means that your Tapestry application can now actually release idle pages from memory when they are no longer needed and hopefully increase
-  the reliability/resources used of your production applications.  All of the key configuration options are available in the HiveMind <<<hivemind.FactoryDefaults>>>
-  configuration point which means that you can control these options via your servlet context parameters/.application file/hivemind/jvm system properties.  The current
-  options available are:
-
-+-------------------------------------------------------------------------------------------------------------------------
-<contribution configuration-id="hivemind.FactoryDefaults">
-    <default symbol="org.apache.tapestry.page-pool-min-idle" value="1" />
-    <default symbol="org.apache.tapestry.page-pool-max-active" value="-1" />
-    <default symbol="org.apache.tapestry.page-pool-max-idle" value="-1" />
-    <default symbol="org.apache.tapestry.page-pool-evict-thread-sleep-minutes" value="4" />
-    <default symbol="org.apache.tapestry.page-pool-evict-idle-page-minutes" value="40" />
-</contribution>
-+-------------------------------------------------------------------------------------------------------------------------
-
-  This configuration is based around using the {{{http://jakarta.apache.org/commons/pool/api-1.3/org/apache/commons/pool/impl/GenericKeyedObjectPool.html}GenericKeyedObjectPool}}
-  implementation in particular.  The key used to store each Tapestry page is a combination of the pageName and Locale of the page.  The meaning and use of each value is as follows:
-
-  * <<org.apache.tapestry.page-pool-min-idle>> - The minimum number of page instances that must not be evicted for a given key.  The default value of 1 means that we want at least
-                                             one instance of each unique page to be available at any given time.
-
-  * <<org.apache.tapestry.page-pool-max-active>> - The maximum number of total pages that may be active in the pool.  The default value of -1 indicates an unlimited number.
-
-  * <<org.apache.tapestry.page-pool-max-idle>> - The maximum number of idle pages that can exist in the pool.  The -1 value here also means unlimited. (but doesn't mean they won't be evicted)
-
-  * <<org.apache.tapestry.page-pool-evict-thread-sleep-minutes>> - This pool launches a seperate thread which is responsible for managing and evicted expired pages from the pool
-                                                            when appropriate.  This value controls the number of minutes this thread should sleep before checking for expired pages.
-
-  * <<org.apache.tapestry.page-pool-evict-idle-page-minutes>> - The number of minutes that a page must be idle for before being eligable for eviction from the pool.
diff --git a/tapestry/src/site/apt/developmentguide/testing.apt b/tapestry/src/site/apt/developmentguide/testing.apt
deleted file mode 100644
index 49ba594..0000000
--- a/tapestry/src/site/apt/developmentguide/testing.apt
+++ /dev/null
@@ -1,15 +0,0 @@
- ------
-Development Guide - Testing
- ------
-Jesse Kuhnert
- ------
-29 Apr 2007
- ------
-
-Testing Tapestry Components and Pages
-
-  There is a new library available - along with comprehensive documention - covering most of the core testing logic that Tapestry itself uses to test components
-  and pages. Please see that site for more information.
-
-  <<tapestry-test:>> {{http://tapestry.apache.org/tapestry4.1/tapestry-test/index.html}}
-  
\ No newline at end of file
diff --git a/tapestry/src/site/apt/javascript/core.apt b/tapestry/src/site/apt/javascript/core.apt
deleted file mode 100644
index f759d79..0000000
--- a/tapestry/src/site/apt/javascript/core.apt
+++ /dev/null
@@ -1,102 +0,0 @@
- ------
-JavaScript Reference - tapestry core
- ------
-Jesse Kuhnert
- ------
-26 July 2006
- ------
- 
-tapestry core API
-
-  This package defines the core API included on all pages by default. Most of it has to do with managing 
-  IO requests, as well as handling remote server exception pages resulting from asynchronous IO calls.
-
-  The source for <<<tapestry.core>>> can be found {{{http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/core.js?view=markup}here}}. 
-  
-* tapestry.version
-
-  A string property that defines the current version of the Tapestry JavaScript core API.
- 
-  An example that would show the current version might be:
-  
-+----------------------
-alert("Current tapestry version is " + tapestry.version);
-+----------------------
-
-* tapestry.bind(url, content, json)
-
-  Global XHR bind function for tapestry internals. The error/load functions defined in 
-  this package are used to handle load/error of dojo.io.bind.
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  url 				   | String        |  yes       |          | The url to bind the request to.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  content 			   | json          |  no        |          | A properties map of optional extra content to send. This will be appended to the URL in the form of name/value query parameters.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  json 				   | boolean       |  no        |   false  | Optional parameter specifying whether or not to create a json request. If not specified the default is to use XHR.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-  <<See also:>> Dojo {{{http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book8}IO}}.
-
-** Example bind call
-
- The bind call is fairly simple in implementation as it uses the dojo {{{http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book8}IO}} API
- to make XHR calls back to tapestry.(or any web url really)
-
-+-----------------------------------
-var url="http://localhost:8080/app";
-var content={chosenBook:"Cryptonomicon",numberOfCopies:"10"};
-
-tapestry.bind(url, content);
-+-----------------------------------
-
-* tapestry.error(type, exception, http, kwArgs)
-
-  Global error handling function for dojo.io.bind requests. This function is used by all of the IO
-  functions used in tapestry to handle IO errors. The default behaviour of this function is to display
-  a special {{{exceptions.html}Exception}} dojo widget displaying any errors received from the server. If
-  no server exceptions are available the only other action taken is logging the error in the browser 
-  via <<<dojo.log.exception(message, exception)>>>.
-  
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  type 				   | Object        |  no        |          | The error type receieved.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  exception 		   | Object        |  no        |          | The javascript exception that was thrown. (if any)
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  http 				   | XmlHttpRequest|  no        |          | The XmlHttpRequest object used to make the IO requests. (implementation dependant on browser being used)
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  kwArgs 			   | JSON          |  no        |          | The original set of arguments passed in to dojo.io.bind() when the IO request was made.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-  If you would like to handle errors differently you can either override the definition of 
-  <<<tapestry.error>>> with your own function or be notified when it is executed via:
-  
-+-----------------------
-dojo.event.connect(tapestry, "error", function(type, exception, http, kwArgs){
-	// insert your logic for handling errors here, this function will be called ~after~
-	// the core tapestry.error function is called with the above style dojo.event.connect call
-});
-+-----------------------
-  
-* tapestry.load(type, data, http, kwArgs)
-
-  The core function registered to handle loading XHR requests. (Xml requests) The implementation details
-  are fairly complicated for this function as they handle parsing/managing Tapestry-defined XML content
-  nodes in a format recognized by the API so that intelligent handling of partial updates/javascript/etc 
-  can be handled on the client.
-  
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  type 				   | Object        |  no        |          | The error type receieved.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  data 		   		   | XML Object    |  no        |          | The data recieved in the request. Should be a javascript Xml document.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  http 				   | XmlHttpRequest|  no        |          | The XmlHttpRequest object used to make the IO requests. (implementation dependant on browser being used)
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  kwArgs 			   | JSON          |  no        |          | The original set of arguments passed in to dojo.io.bind() when the IO request was made.
-*----------------------*---------------*------------*----------*----------------------------------------------+
diff --git a/tapestry/src/site/apt/javascript/form-validation.apt b/tapestry/src/site/apt/javascript/form-validation.apt
deleted file mode 100644
index 68f97b9..0000000
--- a/tapestry/src/site/apt/javascript/form-validation.apt
+++ /dev/null
@@ -1,164 +0,0 @@
- ------
-JavaScript Reference - tapestry.form.validation
- ------
-Jesse Kuhnert
- ------
-26 July 2006
- ------
- 
-tapestry.form.validation
-
-  Defines the default client side validation logic which will be invoked by {{{../components/form/form.html}Form}} components
-  with the <<<clientValidationEnabled>>> parameter set to true. You can override as little or as much of the default
-  logic as you would like.
-
-  The source for <<<tapestry.form.validation>>> can be found {{{http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js?view=markup}here}}. 
-
-  <<See also:>> {{{../usersguide/clientside-validation.html}Client-Side Validation}},  {{{form.html}Form}} JavaScript Reference
-
-* tapestry.form.validation.missingClass
-
-  The default CSS class name that will be applied to input fields with missing values. <(also applies to other field 
-  types, like <select> elements)>. 
-
-  The current default value is <<fieldMissing>>.
-
-* tapestry.form.validation.invalidClass
-
-  The default CSS class name that will be applied to input fields with invalid values. <(also applies to other field 
-  types, like <select> elements)>. 
-
-  The current default value is <<fieldInvalid>>.
-
-* tapestry.form.validation.validateForm(form, profileProperties)
-
-  Main entry point for running form validation. The props object passed in contains a number of 
-  fields that are managed by tapestry.form.
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  form 				   | String element id / HTMLForm node |  yes  |          | The element id of the form, or the form html element itself.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  profileProperties    | json          |  no        |          | A properties object containing tapestry specific form information, as well as the dojo {{{form.html}validation profile}}s registered with this form.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-  <<Returns:>> Boolean - If true then form validation passed and the form should be allowed to 
-  						 submit to the server, if false the form submission is cancelled and will not
-  						 be posted to the server.
-
-** Example
-  
-  Sample properties format style used:
-
-+----------------------------------------------------------
-props = {
-	// whether to run validation at all
-	validateForm:[true|false],
-	
-	// set of dojo.validate.check() style profiles
-	// that may have been registered with form
-	profiles:[profile1, profile2] 
-}
-+----------------------------------------------------------
-
-  The individual profiles will contain any of the data described by the dojo documentation 
-  for <<<dojo.validate.check(form, profile)>>>. In addition to that, each profile will also have a 
-  corresponding string message to display if the specified condition has been met. 
-  
-  For example, if you have specified that a select field named <<<select1>>> was required your 
-  profile would look something like:
-
-+----------------------------------------------------------
-profile = {
-	"required":["select1"], // normal dojo.validate.check data
-	"select1":{ // tapestry field/error type specific data
-		"required":"You must select a value for select1."
-	 }
-}
-+----------------------------------------------------------
-
-  It is intended for you to call <<<dojo.validate.check(form, profile)>>> for each profile stored in 
-  the <<<profiles>>> field, as well as deciding how to display errors / warnings.
-
-* tapestry.form.validation.processResults(form, results, profile)
-
-  Called for each registered profile on a form after <<<dojo.validate.check()>>> has been called. 
-  This function is expected to do UI related notifications of fields in error.
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  form 				   | Form node     |  yes       |          | The form node that was processed.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  results              | JSON          |  yes       |          | The result of calling <<<dojo.validate.check(form,profile)>>>.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  profile              | JSON          |  yes       |          | The original profile used to validate form, also holds validation error messages to be used for each field.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-  <<Returns:>> Boolean - If <<<false>>> the form should not be submitted and all validation 
-  						 should be stopped. If <<<true>>> validation will continue and eventually 
-  						 form will be submitted. <(if no other validation logic fails)>
-
-* tapestry.form.validation.handleMissingField(field, profile)
-
-  Default field decorator for missing fields.
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  field 			   | element id    |  yes       |          | The field element that was missing data.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  profile              | JSON          |  yes       |          | The form validation profile.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-* tapestry.form.validation.handleInvalidField(field, profile)
-
-  Default field decorator for invalid fields.
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  field 			   | element id    |  yes       |          | The field element that had invalid data.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  profile              | JSON          |  yes       |          | The form validation profile.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-* tapestry.form.validation.clearValidationDecorations(field, profileProperties)
-
-  Clears out previous css classes set on fields during previous validation checks. This is called
-  by <<<tapestry.form.validation.validateForm>>> just before running validation to ensure that any 
-  fields previously decorated with css rules reflect any changes users may have made to make them
-  valid during the next validation check.
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  field 			   | element id    |  yes       |          | The field element to clear UI validation decorations on.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  profileProperties    | json          |  no        |          | A properties object containing tapestry specific form information, as well as the dojo {{{form.html}validation profile}}s registered with this field's form.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-* tapestry.form.validation.summarizeErrors(form, results, profile)
-
-  Optionally allows an alert dialog/dhtml dialog/etc to be displayed to user to alert them 
-  to the invalid state of their form if validation errors have occurred.
-
-  This function is called by the default Tapestry client side form validation semantics to 
-  present a modal summary dialog to the user listing the error messages that indicate why 
-  their fields are in error.
-  
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
- form 				   | Form node     |  yes       |          | The form node that was processed.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  results              | JSON          |  yes       |          | The result of calling <<<dojo.validate.check(form,profile)>>>.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  profileProperties    | json          |  yes       |          | A properties object containing tapestry specific form information, as well as the dojo {{{form.html}validation profile}}s registered with this field's form.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-** Example
-
-[../images/UsersGuide/validation-dialog.png] Validation dialog example.
-
diff --git a/tapestry/src/site/apt/javascript/form.apt b/tapestry/src/site/apt/javascript/form.apt
deleted file mode 100644
index 812de87..0000000
--- a/tapestry/src/site/apt/javascript/form.apt
+++ /dev/null
@@ -1,245 +0,0 @@
- ------
-JavaScript Reference - tapestry.form
- ------
-Jesse Kuhnert
- ------
-26 July 2006
- ------
- 
-tapestry.form
-
-  The form package defines the core functionality used in tapestry to interact with forms, as well as kicking
-  off the {{{../usersguide/clientside-validation.html}client side validation}} process when forms are submitted.
-
-  All forms registered with the core tapestry client side form manager will by default have event listeners
-  bound to them that will invoke any registered validation profiles when the form is submitted. <(by listening 
-  to the form "onsubmit" event defined by all browser forms)>
-
-  The source for <<<tapestry.form>>> can be found {{{http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form.js?view=markup}here}}. 
-
-* tapestry.form.registerForm(form)
-
-  Registers a reference to a form that will be managed by tapestry. If the form passed in has already
-  been registered the call will be ignored. The majority of the form functions in this package require that
-  this one first be called or a client side exception will be thrown.(Via dojo, so browser logging will make
-  it look pretty.)
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  form 				   | String element id / HTMLForm node |   yes       |          | The element id of the form to register or the form html element itself.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-** Example usage
-
-  This example takes an existing form and registers it.
-
-+----------------------------
-<form id="myform" action="/app" >
-	<fieldset>
-		<label for="firstName">First Name</label>
-		<input type="text" id="firstName" name="firstName" />
-	</fieldset>
-</form>
-
-<script type="text/javascript">
-dojo.require("tapestry.form");
-
-// could also be tapestry.form.registerForm(dojo.byId("myform"))
-tapestry.form.registerForm("myform");
-</script>
-+----------------------------
-
-* tapestry.form.registerProfile(form, profile)
-
-  Registers a form validation/translation profile. There can potentially be more than 
-  one profile registered with a form. <(such as when you want to register additional validation
-  logic to an existing form without overriding the default tapestry validation profile)>
-  
-  The profiles will be consulted at various points in the forms life, which currently only 
-  involves running the profile checks before form submission. <(more points to be determined in the future)>
-  
-  If no form has previosly been registered via <<<tapestry.form.registerForm(form)>>> matching the specified
-  <<<form>>> an exception will be raised.
-  
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  form 				   | String element id / HTMLForm node |   yes       |          | The element id of the form to register the profile for, or the form html element itself.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  profile 			   | JSON 		   |   yes       |          | The JSON object structure representing the logic that should be used to validate this form.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-** Dojo validation profiles
-
-  The new tapestry client side validation API relies completely on the logic provided by the
-  <<<dojo.validate.check(form, profile)>>> function. This section will probably be undergoing more extensive
-  documentation at some point, but for now the jsdoc comments in dojo are pasted in below. <(tapestry profile
-  specifics are covered in the javascript {{{form-validation.html}Validation}} section)>.
-  
-  <<See also:>> <<<dojo.validate.common>>> {{{http://archive.dojotoolkit.org/nightly/src/validate/common.js}source}}
-  
-  <<Dojo Documentation>> <(pulled from dojo.validate.common)>:
-  
-*** Procedural API Description
-
-  The main aim is to make input validation expressible in a simple format. You define profiles 
-  which declare the required and optional fields and any constraints they might have. The results 
-  are provided as an object that makes it easy to handle missing and invalid input.
-
-  <<Usage:>>
-
-+------------------------------------------------------
-var results = dojo.validate.check(form, profile);
-+------------------------------------------------------
-
-  <<Profile Object:>>
-
-+--------------------------------------------------------------------------------------------
-var profile = {
-	// filters change the field value and are applied before validation.
-	trim: ["tx1", "tx2"],
-	uppercase: ["tx9"],
-	lowercase: ["tx5", "tx6", "tx7"],
-	ucfirst: ["tx10"],
-	digit: ["tx11"],
-
-	// required input fields that are blank will be reported missing.
-	// required radio button groups and drop-down lists with no selection will be reported missing.
-	// checkbox groups and selectboxes can be required to have more than one value selected.
-	// List required fields by name and use this notation to require more than one value: {checkboxgroup: 2}, {selectboxname: 3}.
-	required: ["tx7", "tx8", "pw1", "ta1", "rb1", "rb2", "cb3", "s1", {"doubledip":2}, {"tripledip":3}],
-
-	// dependant/conditional fields are required if the target field is present and not blank.
-	// At present only textbox, password, and textarea fields are supported.
-	dependancies:	{
-		cc_exp: "cc_no",	
-		cc_type: "cc_no",	
-	},
-
-	// Fields can be validated using any boolean valued function.  
-	// Use arrays to specify parameters in addition to the field value.
-	constraints: {
-		field_name1: myValidationFunction,
-		field_name2: dojo.validate.isInteger,
-		field_name3: [myValidationFunction, additional parameters],
-		field_name4: [dojo.validate.isValidDate, "YYYY.MM.DD"],
-		field_name5: [dojo.validate.isEmailAddress, false, true],
-	},
-
-	// Confirm is a sort of conditional validation.
-	// It associates each field in its property list with another field whose value should be equal.
-	// If the values are not equal, the field in the property list is reported as Invalid. Unless the target field is blank.
-	confirm: {
-		email_confirm: "email",	
-		pw2: "pw1",	
-	}
-};
-+--------------------------------------------------------------------------------------------
-
-  <<Results Object:>>
-
-+------------------------------------------------------------------------------------------
-isSuccessful(): Returns true if there were no invalid or missing fields, else it returns false.
-hasMissing():  Returns true if the results contain any missing fields.
-getMissing():  Returns a list of required fields that have values missing.
-isMissing(field):  Returns true if the field is required and the value is missing.
-hasInvalid():  Returns true if the results contain fields with invalid data.
-getInvalid():  Returns a list of fields that have invalid values.
-isInvalid(field):  Returns true if the field has an invalid value.
-+------------------------------------------------------------------------------------------
-
-* tapestry.form.clearProfiles(form)
-
-  Clears any previously registered validation profiles on the specified form. Normally called 
-  during XHR requests by returned JS response to ensure new validation logic coming in from 
-  potentially new/changing form fields is accounted for.
-  
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  form 				   | String element id / HTMLForm node |   yes       |          | The element id of the form, or the form html element itself.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-* tapestry.form.setFormValidating(form, validate)
-
-  If a form registered matching the specified <<<form>>> exists a local property will be set 
-  that causes validation to be turned on/off depending on the argument.
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  form 				   | String element id / HTMLForm node |   yes       |          | The element id of the form, or the form html element itself.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  validate 			   | boolean       |   yes       |          | If true, turns form client side validation on (the default) - false turns validation off.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-* tapestry.form.submit(form, submitName)
-
-  Submits the form specified, optionally setting the submitname hidden input field to the value 
-  of <<<submitName>>> to let the {{{../components/form/form.html}Form}} component on the server know 
-  which button caused the submission. (For the case of submit button listeners).
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  form 				   | String element id / HTMLForm node |  yes  |          | The element id of the form, or the form html element itself.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  submitName 		   | String        |   no       |          | Optional submit name string to use when submitting.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-** Example
-
-+-------------------------
-<script type="text/javascript">
-	dojo.require("tapestry.form");
-	
-	tapestry.form.submit(dojo.byId("myform"));
-</script>
-+-------------------------
-
-* tapestry.form.cancel(form, submitName)
-
-  Submits the form specified, and also sets the hidden form input field controlled by tapestry that
-  specifies the <<<submitmode>>> used so that if you have registered a <<<cancel listener>>> on your
-  {{{../components/form/form.html}Form}} component it will be called by this invocation.
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  form 				   | String element id / HTMLForm node |  yes  |          | The element id of the form, or the form html element itself.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  submitName 		   | String        |   no       |          | Optional submit name string to use when submitting.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-* tapestry.form.refresh(form, submitName)
-
-  Submits the form specified, and also sets the hidden form input field controlled by tapestry that
-  specifies the <<<submitmode>>> used so that if you have registered a <<<refresh listener>>> on your
-  {{{../components/form/form.html}Form}} component it will be called by this invocation.
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  form 				   | String element id / HTMLForm node |  yes  |          | The element id of the form, or the form html element itself.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  submitName 		   | String        |   no       |          | Optional submit name string to use when submitting.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-* tapestry.form.submitAsync(form, content, submitName, validate)
-
-  Similar to the {{{core.html}tapestry.bind}} function call, in that it submits the request asynchronously and
-  expects a valid tapestry xml content response. This is the core function used by Tapestry when submitting
-  forms asynchronously. The same load/error handling functions are called as in {{{core.html}tapestry.bind}}.
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  form 				   | String element id / HTMLForm node |  yes  |          | The element id of the form, or the form html element itself.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  content 			   | json          |  no        |          | A properties map of optional extra content to send. This will be sent <in addition> to the content encapsulated by your form. 
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  submitName 		   | String        |  no        |          | Optional submit name string to use when submitting to bind the request to a specific {{{../components/form/submit.html}Submit}} component.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  validate 		       | boolean       |  no        |   false  | Controls whether or not to invoke client side validation.
-*----------------------*---------------*------------*----------*----------------------------------------------+
diff --git a/tapestry/src/site/apt/javascript/html.apt b/tapestry/src/site/apt/javascript/html.apt
deleted file mode 100644
index f121449..0000000
--- a/tapestry/src/site/apt/javascript/html.apt
+++ /dev/null
@@ -1,58 +0,0 @@
- ------
-JavaScript Reference - tapestry.html
- ------
-Jesse Kuhnert
- ------
-26 July 2006
- ------
- 
-tapestry.html
-
-  This package currently only defines one DOM String related function. 
-
-  The source for <<<tapestry.html>>> can be found {{{http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/html.js?view=markup}here}}. 
-
-* tapestry.html.getContentAsString(node)
-
-  Used primarily in {{{core.html}tapestry.bind}} to convert incoming XML document node content into a 
-  javascript String that will be compatible with DomNode.innerHTML calls. The semantics of using innerHTML
-  are fairly quircky from browser to browser <(if you want to maintain stylesheet rules/etc)>, so this function
-  will determine your browser type and act accordingly. It should universally be able to produce a String compatible
-  with innerHTML statements from almost any source, even existing HTML DOM nodes that aren't part of an IO
-  XML document return.
-
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  Parameter            |    Type	   |  Required  | Default  | 		Description
-*----------------------*---------------*------------*----------*----------------------------------------------+
-  node 				   | DOMNode/HtmlDOMNode    |  yes       |          | The XML or HTML DOM node to parse html textual fragment contents from.
-*----------------------*---------------*------------*----------*----------------------------------------------+
-
-** Example usage
-
-  If you wanted to take an IO return chunk of xml that looked like this:
-  
-+----------------------------
-<?xml version="1.0"?>
-<ajax-response>
-<response id="chunk1" type="element">
-This is some example html content.
-
-<p>
-As you can see, any valid html element can be embedded in the response.
-</p>
-</response>
-</ajax-response>
-+----------------------------
-
-  and place it's content into an existing HTML dom node you might do something like this:
-  
-+-----------------------------------------------------------
-dojo.require("tapestry.html"); // ensures tapestry.html package is loaded
-
-var xmlData=functionFoo();
-var domNode = xmlData.getElementById("chunk1");
-
-dojo.byId("myHtmlNode").innerHTML=tapestry.html.getContentAsString(domNode);
-+-----------------------------------------------------------
-
-  <<See also:>> {{{http://developer.mozilla.org/en/docs/DOM:document#1022427}Mozilla DOM reference}}
diff --git a/tapestry/src/site/apt/javascript/index.apt b/tapestry/src/site/apt/javascript/index.apt
deleted file mode 100644
index 659b03c..0000000
--- a/tapestry/src/site/apt/javascript/index.apt
+++ /dev/null
@@ -1,35 +0,0 @@
- ------
-JavaScript Reference - Introduction
- ------
-Jesse Kuhnert
- ------
-26 July 2006
- ------
- 
-Introduction
-
-  Tapestry makes extensive use of the {{{http://dojotoolkit.org}dojo}} toolkit library to facilitate
-  easier client side management / communication. Without a better way to automate the documentation process
-  for javascript this section will attemp to define the most important Tapestry javascript functions/objects
-  available.
-  
-  By default, the {{{../components/general/shell.html}Shell}} component will include the core 
-  {{{http://dojotoolkit.org}dojo}} javascript object <<<dojo.js>>>, as well as the new core
-  Tapestry javascript object - <<<core.js>>>. This means that you don't have to worry about how to include
-  dojo or Tapestry javascript on any of your pages, they will already be available.
-  
-  All of the Tapestry javascript is heavily documented in <<<jsdoc>>> style javadoc formatting. If you 
-  would like to see the source yourself and bypass the online docs you may view it 
-  {{{http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/}here}}.
-
-* Dojo documentation
-
-  For documentation related to {{{http://dojotoolkit.org}dojo}}, please see the resources available on
-  the dojo website:
-  
-  * {{http://manual.dojotoolkit.org/}} - The dojo manual.
-  
-  * {{http://dojo.jot.com}} - The dojo wiki.
-  
-  []
-  
\ No newline at end of file
diff --git a/tapestry/src/site/apt/javascript/packaging.apt b/tapestry/src/site/apt/javascript/packaging.apt
deleted file mode 100644
index cc14d4d..0000000
--- a/tapestry/src/site/apt/javascript/packaging.apt
+++ /dev/null
@@ -1,54 +0,0 @@
- ------
-JavaScript Reference - Packaging
- ------
-Jesse Kuhnert
- ------
-26 July 2006
- ------
- 
-Packaging
-
-  The Tapestry javascript API uses the dojo 
-  {{{http://manual.dojotoolkit.org/WikiHome/DojoDotBook/BookModules}packaging system}} to include
-  both dojo and Tapestry javascript files on the fly.
-  
-  This means that most of the API is broken up over a number of files that will be optionally included
-  automatically - only when you need them. As an example, this is how you would import the Tapestry 
-  form related functions onto your page:
-  
-+-------------------------
-<script type="text/javascript">
-	dojo.require("tapestry.form");
-	
-	tapestry.form.submit(dojo.byId("myform"));
-</script>
-+-------------------------
-
-* Download/Performance concerns of included JavaScript
-
-  A very valid concern that a lot of users will worry about is the performance impact of including all of
-  this JavaScript on their pages! This is still a very grey area that may change to meet real world needs
-  as they come up, but the following is the current thinking behind this:
-  
-  * The bundled {{{http://dojotoolkit.org}dojo}} core javascript file that is included by default is 
-    only about <<<176k>>> in size. This is fairly small compared to the average size of most images displayed
-    in web applications. 
-    
-  * Part of the beauty of the dojo {{{http://manual.dojotoolkit.org/WikiHome/DojoDotBook/BookModules}packaging}} 
-    system is that you can build very small core javascript files and only have your web application incur performance
-    hits for additional functionality <(like widgets)> when you need it. This should keep your app nice and slim
-    in most areas.
-    
-  * Overhauled Tapestry {{{../apidocs/org/apache/tapestry/asset/AssetService.html}AssetService}} 
-  	implementation that does a much better job at properly interpreting and setting the correct browser cache 
-  	settings on included asset resources, like dojo and Tapestry javascript API files/resources. It even goes as far
-  	as serving up the files via a new hivemind configuration point that eliminates the need to have an MD5 hash 
-  	string in the include URL's, making application restarts have no effect on user browser caching of your 
-  	javascript files.
-  
-  []
-  
-  As mentioned previously, this area of Tapestry is not set in stone. The new move to 
-  {{{http://maven.apache.org}maven2}} has made doing snapshot updates of Tapestry very easy, so if/when 
-  issues are found/addressed people should be able to get updated versions pretty quickly.
-  
\ No newline at end of file
diff --git a/tapestry/src/site/apt/tutorials/index.apt b/tapestry/src/site/apt/tutorials/index.apt
deleted file mode 100644
index c718863..0000000
--- a/tapestry/src/site/apt/tutorials/index.apt
+++ /dev/null
@@ -1,81 +0,0 @@
- ------
-Tapestry 4 Tutorials
- ------
-Jesse Kuhnert
- ------
-12 May 2007
- ------
-
-Tapestry tutorial series at DevShed
-
-  {{{http://sundraw.ws/}Alexander Kolesnikov}} has written a great series of Tapestry 4 tutorials that should be a great help for anyone
-  getting started with Tapestry or just wanting a quick reference for some of the common areas of development.
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/Apache-Tapestry-4-Tutorial/}Apache Tapestry 4 Tutorial}}
-
-  In this article we'll begin by taking a look at servlets and JavaServer Pages, then proceed to learn about the MVC design pattern. After
-  examining the problems these technologies solved, we'll focus on the Tapestry framework, study its advantages, and dispel some prejudices
-  about it. This is the first article in a multi-part series covering Tapestry.
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/Preparing-the-Workspace-for-Apache-Tapestry/}Preparing the Workspace for Apache Tapestry}}
-
-  In the previous article of this series I explained, in the historical perspective, why Tapestry is a very attractive and advanced framework
-  for building Java Web applications. Now we are moving from theory to practice. But before doing anything, we need to prepare the workplace.
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/Creating-Your-First-Tapestry-Project/}Creating Your First Tapestry Project}}
-
-  In the previous article, we began moving from theory to practice by preparing our work place and setting up our system. In this article, we
-  actually get our hands dirty (at least figuratively) by building our first Tapestry project.
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/Introducing-Simple-Components-in-Apache-Tapestry/}Introducing Simple Components in Apache Tapestry}}
-
-  In the previous article, you witnessed the interplay between a Tapestry page and its components (granted, we had only one simple component
-  there, but you get my point). Page class, when rendering its page, finds any components mentioned in the template and asks those components
-  to display themselves, as they know better how to do that. Components, in their turn, might need some information to display themselves, and
-  they ask the page class to provide the necessary information by calling some of its methods
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/A-Closer-Look-at-Simple-Components-in-Apache-Tapestry/}A Closer Look at Simple Components in Apache Tapestry}}
-
-  In the previous article, we took a look at some of the components that are used most often in Tapestry applications, and learned some important
-  concepts related to them. At the end, we found that we needed three components for our example application. In this article, we will configure
-  those components. We will also learn how to disable caching.
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/The-Properties-of-Tapestry-Pages/}The Properties of Tapestry Pages}}
-
-  In the previous part of this tutorial we started to build a new project,  GuessTheWord.  The project is very simple, but we are going to spend a lot of
-  time working on it and experimenting with it. This is because the main aim is to learn a lot about the most basic concepts of Tapestry. For every important
-  concept, I want to show you a number of options as to how it can be implemented and explain which option is good for what.
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/Apache-Tapestry-and-Listener-Methods-Conditional-Components-and-PageLink/}Apache Tapestry and Listener Methods Conditional Components and PageLink}}
-
-  Today we continue to explore some of the most fundamental concepts of Tapestry while building one of the simplest Java Web applications.  In the previous
-  part of this tutorial we became familiar with properties of Tapestry pages and different ways to configure them.  Now we will look into the details of
-  writing listener methods.
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/Making-a-CelebrityCollector-with-Apache-Tapestry-the-For-Component/}Making a CelebrityCollector with Apache Tapestry: the For Component}}
-
-  We are going to start a new project today, named CelebrityCollector.  At first it will be very simple, but in the following articles we will be adding more
-  and more functionality to it.  Of course, the purpose at this stage of study is not to build a real-world application but to meet different Tapestry
-  components and to learn various important concepts
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/Apache-Tapestry-and-DirectLink-IoC-and-DI/}Apache Tapestry and DirectLink, IoC and DI }}
-
-  Previously we began building our CelebrityCollector application. But right now it is a hollow shell.  In this article we will use several new Apache Tapestry
-  components to help us start filling in the details.
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/Apache-Tapestry-ASO-and-More-Components/}Apache Tapestry: ASO and More Components}}
-
-  We shall continue working on the CelebrityCollector application.  The next step is to create a page for adding a new celebrity.  While we create that page, I will
-  introduce you to three more components that will add new capabilities to our application and help us get around certain problems.
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/The-DatePicker-and-Shell-Components-of-Apache-Tapestry/}The DatePicker and Shell Components of Apache Tapestry}}
-
-  In the previous article in this series we came to adding a component for accepting a date input, to specify the date of birth for the newly added celebrity.
-  DatePicker, a standard Tapestry component, is an excellent choice for this, and we are going to learn today how to add a DatePicker to a page.
-
-  [[1]] {{{http://www.devshed.com/c/a/Apache/PropertySelection-and-IPropertySelectionModel-in-Apache-Tapestry/}PropertySelection and IPropertySelectionModel in Apache Tapestry}}
-
-  We already encountered PropertySelection in one of the previous articles so we know that it is a Tapestry component used to display a drop-down list, allowing the
-  user to choose one of multiple options.  You might think that the way in which options are provided to this component (through its model binding) is somewhat
-  cumbersome when all you need to do is select one of a few strings.  However, PropertySelection was designed with a great deal of power and flexibility in mind, and I
-  hope that today you will appreciate this.
diff --git a/tapestry/src/site/apt/usersguide/clientside-validation.apt b/tapestry/src/site/apt/usersguide/clientside-validation.apt
deleted file mode 100644
index 0bbe810..0000000
--- a/tapestry/src/site/apt/usersguide/clientside-validation.apt
+++ /dev/null
@@ -1,124 +0,0 @@
- ------
-Client-Side Validation
- ------
-Jesse Kuhnert
- ------
-26 July 2006
- ------
-
-Client-Side Validation
-
-  Client side validation in Tapestry is now moving towards being just as powerful as its 
-  server side counterpart,  if not more so. To use the client side API all you need to do
-  is set the <<<clientValidationEnabled>>> parameter to <<<true>>> on your 
-  {{{../components/form/form.html}Form}} and it will automatically be setup for you.
-  
-  This document will focus on how you can customize and interact with the default tapestry javascript
-  validation system, leaving the normal {{{validation.html}Input Validation}} guide as the core resource
-  for configuring and using validation in general.
-  
-  <<See also:>> Tapestry {{{../javascript/form.html}Form}} JavaScript API reference.
-  
-* Configuring CSS definitions
-
-  One of the largest changes made to Tapestry 4.1 was the complete replacement of most of the javascript
-  functions in the framework, including validation. As part of this change the new validation API doesn't
-  use window <<<alert>>> <alert('Clicked!')> dialogs anymore. The new system uses a 
-  combination of {{{http://dojotoolkit.org}dojo}} dhtml widgets and <<<CSSS>>> rules to apply UI hints
-  to form fields with missing or invalid data.
-  
-  There are now two core CSS classes that you must define for your input fields. There names are:
-  
-  * <<fieldMissing>> - Applied to form input fields that are required and missing a selection/input value.
-  
-  * <<fieldInvalid>> - Applied to form input fields that have <invalid> data. A field could be invalid for
-  					   a number of reasons, like an integer value not being within a certain range or a 
-  					   {{{../components/form/datepicker.html}date}} field being in an invalid format.
-  					   
-  []
-  
-  By default Tapestry <<does not>> define these two css classes, you must define them yourself in order to 
-  see the classes applied to your forms. The TimeTracker demo application has defined these two css classes
-  as:
-  
-+----------------------------------------------
-.fieldMissing {
-    background: #bedef4;
-}
-
-.fieldInvalid {
-    background: #ffaf7e;
-    font-weight: bold;
-}
-+----------------------------------------------
-
-** Dojo dialog CSS definitions
-
-  This is still a questionable default, but for now the new way that error messages are presented to users
-  is with a client side {{{http://dojotoolkit.org}dojo}} Dialog widget. 
-  
-[../images/UsersGuide/validation-dialog.png] Validation dialog example.
-  
-  Much like the core validation system, the presentation of the validation dialog is also controlled by user
-  defined css rules:
-  
-  * <<missingList>> - Applied to a block of <<< <ul><li>Message</li></ul> >>> html content for messages 
-  					  resulting from missing fields.
-  					
-  * <<invalidList>> - Applied to a block of <<< <ul><li>Message</li></ul> >>> html content for messages 
-  					  resulting from invalid fields.
-
-  []
-
-  The TimeTracker demo application also defines a default set of classes to handle the dialog classes:
-  
-+-----------------------------------------------
-.alertButton {
-	width: auto;
-	border: none;
-	background-color: #699ED9;
-	color: #fff;
-	padding: 0.1em;
-	border-bottom: 1px solid #5885b6 !important;
-	border-right: 1px solid #5885b6 !important;
-	border-top: 1px solid #92b8e2 !important;
-	border-left: 1px solid #92b8e2 !important;
-	cursor: hand;
-	cursor: pointer;
-}
-
-.alertDialog {
-    width: 30em;
-    border: 2px solid #ff660a;
-    padding: 1em;
-    background: #ffffff;
-    -moz-border-radius: 10px;
-}
-
-.alertContent .alertButton {
-    float:right;
-    position:relative;
-    bottom:1em;
-}
-
-.missingList, .invalidList {
-    padding-bottom: 0.6em;
-    padding-top: 0.2em;
-    padding-left:0.1em;
-    padding-right:0.2em;
-    margin: 0;
-}
-
-.missingList {
-    border-top: 4px solid #bedef4;
-}
-
-.invalidList {
-    border-top: 4px solid #ffaf7e;
-}
-
-.missingList li, .invalidList li {
-    list-style:none;
-    font-style:italic;
-}
-+-----------------------------------------------
diff --git a/tapestry/src/site/apt/usersguide/validation.apt b/tapestry/src/site/apt/usersguide/validation.apt
deleted file mode 100644
index c0998a6..0000000
--- a/tapestry/src/site/apt/usersguide/validation.apt
+++ /dev/null
@@ -1,257 +0,0 @@
- ------
-Input Validation
- ------
-Jesse Kuhnert
- ------
-22 July 2006
- ------
- 
-Input Validation
-
-  The tapestry validation system provides a very powerful means of validating data 
-  intuitively on most of the form element components, such as {{{../components/form/textfield.html}TextField}}, 
-  {{{../components/form/textarea.html}TextArea}}, {{{../components/form/checkbox.html}Checkbox}}, and so forth.  All of these 
-  components implement the interface {{{../apidocs/org/apache/tapestry/form/IFormComponent.html}IFormComponent}}
-  , and include the necessary hooks to fit into the overall validation framework.
-  
-  Localization, server-side, and client side validation are handled by the framework,
-  as well as the ability to extend or override most of the built in functionality to
-  suit your purposes as you see fit.
-  
-  Validation has evolved over time (the first attempt at proper validation using
-  Tapestry occured back in 2001). Through Tapestry 3, validation was limited to the
-  <<ValidField>> component (which is now gone). For Tapestry 4, the APIs related to 
-  validation were effectively rewritten, resulting in a more powerful, more extensible approach
-  that can be used with all kinds of form element components.
-  
-* FieldLabel component
-
-  Generally speaking, every form input component ({{{../components/form/textfield.html}TextField}}, etc.) will 
-  be paired with a {{{../components/form/fieldlabel.html}FieldLabel}} component. The FieldLabel is responsible 
-  for generating the HTML <<<\<label\>>>> element, which is extremely effective for accessible user 
-  interfaces (user interfaces that work for people with visual disabilities). Typical usage:
-  
-+------------------------------------------
-<tr>
-   <td><label jwcid="@FieldLabel" field="component:userName">User Name</label></td>
-   <td><input jwcid="userName@TextField" value="ognl:userName" validators="validators:required" 
-   		displayName="User Name" size="30"/></td>
-</tr>
-+------------------------------------------
-
-  At runtime, this may render as:
-  
-+------------------------------------------
-<tr>
-   <td><label for="userName">User Name</label></td>
-  <td><input name="userName" id="userName" value="" size="30"/></td>
-</tr>
-+------------------------------------------
-
-  However, this is not all there is to FieldLabel. An important part of validation is
-  <<<decoration>>> of fields, to mark when they contain errors. This is one of the 
-  responsibilities of {{{../apidocs/org/apache/tapestry/valid/IValidationDelegate.html}IValidationDelegate}}
-  ... decorating fields and labels.
-  
-  If the above form is submitted without specifying a user name, the userName field will be 
-  in error. The page will be redisplayed to show the user the error message and the decorated 
-  fields and labels. The <<<default>>> decoration is primitive, but effective:
-  
-+----------------------------------------------
-<tr>
-   <td><font color="red"><label for="userName">User Name</label></font></td>
-   <td><input name="userName" id="userName" value="" size="30"/> <font color="red">**</font></td>
-</tr>
-+----------------------------------------------
-
-  By subclassing the default implementation of {{{../apidocs/org/apache/tapestry/valid/IValidationDelegate.html}IValidationDelegate}}
-  (the {{{../apidocs/org/apache/tapestry/valid/ValidationDelegate.html}ValidationDelegate}} 
-  class), you can change how these decorations are rendered. It then becomes a matter of providing this custom 
-  validation delegate to the {{{../components/form/form.html}Form}} component, via its delegate parameter. This is 
-  covered in more detail shortly.
-  
-* Field validation
-
-  Validation for form element components, such as {{{../components/form/textfield.html}TextField}}
-  , is controlled by three common component parameters provided by all such 
-  components: <<<validators>>> / <<<translators>>> / and <<<displayName>>>.
-  
-  The validators parameter provides a list of validator objects, objects that implement the
-  {{{../apidocs/org/apache/tapestry/form/validator/Validator.html}Validator}} 
-  interface. Why a list? Unlike Tapestry 3 validation, each individual validator checks just a single
-  <<<constraint>>>. Contraints are things like minimum string length, maximum string length,
-  minimum numeric value, etc. This is a very fine grained approach, and one that is easily extensible 
-  to new contraints.
-  
-  The <<<translator>>> parameter configures how the resulting input value should be translated from
-  its generic String input form to the targeted type, like a <<<Date>>> or double. All translators implement
-  the {{{../apidocs/org/apache/tapestry/form/translator/Translator.html}Translator}}
-  interface. 
-  
-  The displayName parameter is used to provide the label for the component (perhaps some day, this 
-  parameter will be renamed to "label"; why it has such a cumbersome name has been forgotten). 
-  In any case, this label is used by the matching {{{../components/form/fieldlabel.html}FieldLabel}} 
-  component, and is also incorporated into an error messages created for the component.
-  
-** validators: binding prefix
-
-  The validators: binding prefix is a powerful shorthand for constructing a list of configured
-  {{{../apidocs/org/apache/tapestry/form/validator/Validator.html}Validator}} objects. 
-  It allows a very declarative style; for example, to state that a field is required with a minimum 
-  length of four characters, the following parameter binding could be used 
-  (in a page or component specification):
-  
-+-------------------------------------------
-<binding name="validators" value="validators:required,minLength=4"/>
-+-------------------------------------------
-
-  Notice that the actual type of the data isn't specified in this instance, it is implied by 
-  which parameters you specify. A specification is a comma-seperated list of entries. 
-  Each entry is in one of the following forms:
-  
-  * <<<name>>>
-  
-  * <<<name>>> = <<<value>>>
-  
-  * <<<name[message]>>>
-  
-  * <<<name = value[message]>>>
-  
-  * $<<<name>>>
-  
-  []
-  
-  Most validator classes are <<<configurable>>>: they have a property that matches their name. 
-  For example, {{{../apidocs/org/apache/tapestry/form/validator/MinDate.html}MinDate}} 
-  (which is named "minDate" has a <<<minDate>>> property. A few validators are not configurable 
-  ("required" => {{{../apidocs/org/apache/tapestry/form/validator/Required.html}Required}}, 
-  for example).
-  
-  Validators are expected to have a public no-args constructor. They are also expected to have a 
-  <<<message>>> property which is set from the value in brackets. The message is either a
-  literal string, or may be prefixed with a '%' character, to indicate a localized key, resolved 
-  using the component's message catalog.
-  
-  When the name is prefixed with a dollary sign, it indicates a reference to a 
-  <<<bean>>> with the given name.
-  
-  A full validator specification might be:
-
-+------------------------------
-required,email[%email-format],minLength=20[Email addresses must be at least 20 characters long.]
-+------------------------------
-
-  Here is a partial list of the validator classes provided and their configurable attributes.
-  
-*-----------------+-------------------------------------------+
-| {{{../apidocs/org/apache/tapestry/form/validator/Validator.html}Validator}} | attributes |
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/validator/BaseValidator.html}BaseValidator}} | <<<message>>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/validator/Email.html}Email}} | <<<none, uses standard email regexp "^\\w[-._\\w]*\\w@\\w[-._\\w]*\\w\\.\\w{2,6}$">>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/validator/Max.html}Max}} | <<<max=<maximum value, 10>>>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/validator/MaxDate.html}MaxDate}} | <<<maxDate=<maximum date, 06/09/2010> >>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/validator/MaxLength.html}MaxLength}} | <<< maxLength=<maximum length, 23> >>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/validator/Min.html}Min}} | <<< min=<minimum value, 0.718> >>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/validator/MinDate.html}MinDate}} | <<< minDate=<minimum date, 04/23/05> >>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/validator/MinLength.html}MinLength}} | <<< minLength=<minmum length, 15> >>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/validator/Identity.html}Match}} | <<< match=<component to compare against> (since v4.1.2)>>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/validator/Identity.html}Differ}} | <<< differ=<component to compare against> (since v4.1.2)>>>
-*-----------------+-------------------------------------------+
-
-** translator: binding prefix
-
-  Much like the <<<validators:>>> binding, the 
-  {{{../apidocs/org/apache/tapestry/form/translator/Translator.html}translator}} 
-  binding can be configured with a simple comma-seperated string list to provide rules on how your 
-  incoming data should be translated. Some of these bindings are also used on the client side validation 
-  API to ensure the input format matches your translator parameters.
-
-  For example, to validate and translate a TextField bound to a date object you might do something like:
-  
-+----------------------------------------------------------
-<component id="inputDate" type="TextField">
-  <binding name="value" value="person.dateValue"/>
-  <binding name="translator" value="translator:date,pattern=MM-dd-yyyy"/>
-  <binding name="validators" value="validators:required"/>
-  <binding name="displayName" value="literal:Date Field"/>
-</component>
-+----------------------------------------------------------
-
-  Currently available translator bindings:
-  
-*-----------------+-------------------------------------------+
-| {{{../apidocs/org/apache/tapestry/form/translator/Translator.html}Translator}} | attributes |
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/translator/AbstractTranslator.html}AbstractTranslator}} | <<< trim=<true/false> >>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/translator/StringTranslator.html}StringTranslator}} | <<< trim=<true/false>,empty=<default value if input is empty> >>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/translator/FormatTranslator.html}FormatTranslator}} | <<< trim=<true/false>,pattern=<any pattern supported by {{{http://java.sun.com/j2se/1.4.2/docs/api/java/text/Format.html}Format}}> >>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/translator/DateTranslator.html}DateTranslator}} | <<< trim=<true/false>,pattern=<any pattern supported by {{{http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html}DateFormat}}> >>>
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/translator/NumberTranslator.html}NumberTranslator}} | <<< trim=<true/false>,pattern=<any pattern supported by {{{http://java.sun.com/j2se/1.4.2/docs/api/java/text/NumberFormat.html}NumberFormat}}>,omitZero=<true/false> >>> If true (default is false), then values that are 0 are rendered to an empty string, not "0" or "0.00". This is useful in most cases where the field is optional; it allows the field to render blank when no value is present.
-*-----------------+-------------------------------------------+
- {{{../apidocs/org/apache/tapestry/form/translator/BigDecimalTranslator.html}BigDecimalTranslator}} | <<< trim=<true/false> >>>
-*-----------------+-------------------------------------------+
-
-* Extending ValidationDelegate
-
-  There are a lot of scenerios where you may wish to do something more than that provided by the 
-  default, like apply a CSS class to labels in error, or even provide the ability to render the 
-  error message directly in or around the label or field.
-  
-  Below is a typical subclass of ValidationDelegate that provides more application-specific decorations:
-  
-+---------------------------------------------------------------
-/**
- * Provides more intelligent validation delegate support.
- */
-public class MyValidationDelegate extends ValidationDelegate {
-
-/**
- * This method is overwritten so that the error message generated during 
- * server-side validation actually appears next to the field in question.
- *
- * Don't be confused by the method names, there is a complimenting writeSuffix
- * for fields, as well as a pair of writeLabelSuffix/writeLabelPrefix methods to
- * do the same to labels.
- * {@inheritDoc}
- */
- public void writePrefix(IMarkupWriter writer, IRequestCycle cycle, 
-         IFormComponent component, IValidator validator)
- {
-     IFieldTracking ft = getCurrentFieldTracking();
-     
-     // There is a default error renderer for fields 
-     // which simply writes the message, which is what 
-     // we want to have happen in this case.
-     
-     if (ft != null && ft.getErrorRenderer() != null) 
-         ft.getErrorRenderer().render(writer, cycle);
- }
- 
- /**
-  * Adds a class style attribute to the label if in error
-  * {@inheritDoc}
-  */
- public void writeLabelAttributes(IMarkupWriter writer, IRequestCycle cycle, 
-  IFormComponent component) 
- {
-      if (isInError(component))
-      {
-         writer.attribute("class", "labelError");
-      }
- }
- 
- }
-+---------------------------------------------------------------
diff --git a/tapestry/src/site/fml/faq.fml b/tapestry/src/site/fml/faq.fml
deleted file mode 100644
index 5a52233..0000000
--- a/tapestry/src/site/fml/faq.fml
+++ /dev/null
@@ -1,732 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<faqs title="Frequently Asked Questions">
-    <part id="general">
-        <title>General</title>
-        
-        <faq id="framework-comparison">
-            <question>How does Tapestry compare to other frameworks?</question>
-            <answer>
-                <p>
-                    Tapestry is very much unlike most other frameworks in that it doesn't use code
-                    generation; instead it uses a true component object model based on JavaBeans
-                    properties and strong specifications. This gives Tapestry a huge amount of
-                    flexibility and enables dynamic runtime inspection of the application with the
-                    Tapestry Inspector (a mini-application that can be built into any Tapestry
-                    application).
-                </p>
-
-                <p>
-                    In addition, Tapestry applications require far less Java coding and are far more
-                    robust than equivalent applications developed with other popular frameworks.
-                    This is because the Tapestry framework takes responsibility for many important
-                    tasks, such as maintaining server-side state and dispatching incoming requests
-                    to appropriate objects and methods.
-                </p>
-                <p>
-                    The many new features of release 4.0 mean that Tapestry is not only the most
-                    powerful web application framework available, it is also the fastest and easiest
-                    to adopt, regardless of whether your background is Java, Perl, XML or PHP!
-                </p>
-            </answer>
-        </faq>
-
-
-        <faq id="performance">
-            <question>How is the performance of Tapestry?</question>
-            <answer>
-                <p>
-                    My own testing, documented in the Sept. 2001 issue of the Java Report, agrees
-                    with other testing (documented in the Tapestry discussion forums): Although
-                    straight JSPs have a slight edge in demo applications, in real applications with
-                    a database or application server backend, the performance curves for equivalent
-                    Tapestry and JSP applications are identical.
-                </p>
-
-                <p>
-                    Tapestry has a performance advantage in that it uses a very coarse-grained
-                    pooling strategy (pooling entire pages), whereas JSPs burn a fair number of
-                    cycles pooling individual JSP tags. Tapestry 4.0 trades slightly longer start up
-                    time for improved runtime performance, since it makes much less use of Java
-                    reflection.
-                </p>
-
-                <p>
-                    Except in the most extreme cases, application performance is gated by the
-                    database. Tapestry gives your developers the time they need to analyze and fix
-                    those kinds of problems, rather than getting bogged down in the user interface
-                    layer.
-                </p>
-
-            </answer>
-        </faq>
-
-        <faq id="jsp-library">
-            <question>Is Tapestry a JSP tag library?</question>
-
-            <answer>
-                <p>
-                    Tapestry is most explicitly
-                    <strong>not</strong>
-                    a JSP tag library; Tapestry builds on the servlet API, but doesn't use JSPs in
-                    any way. Tapestry uses it own HTML template format and its own rendering engine.
-                </p>
-
-
-
-            </answer>
-        </faq>
-
-        <faq id="cost">
-            <question>What does it cost?</question>
-
-            <answer>
-                <p>
-                    Tapestry is open source and free. It is licensed under the Apache Software
-                    License, which allows it to be used even inside proprietary software.
-                </p>
-            </answer>
-        </faq>
-
-        <faq id="ide-support">
-            <question>Is there a WYSIWYG editor for Tapestry, or an IDE plugin?</question>
-
-            <answer>
-                <p>
-
-                    Currently, no WYSIWYG editor is available for Tapestry; however, the design of
-                    Tapestry allows existing editors to work reasonably well (Tapestry additions to
-                    the HTML markup are virtually invisible to a WYSIWYG editor).
-                </p>
-
-                <p>
-                    <a href="http://sf.net/projects/spindle">Spindle</a>
-                    is a Tapestry plugin for the excellent open-source
-                    <a href="http://www.eclipse.org">Eclipse</a>
-                    IDE. It adds wizards and editors for creating Tapestry applications, pages and
-                    components.
-                </p>
-                <p>
-                    All of the various ide plugins can be found <a href="http://tapestry.apache.org/community.html">here</a>.
-                </p>
-            </answer>
-        </faq>
-
-        <faq id="integration-support">
-            <question>
-                Does Tapestry work with other other application servers besides JBoss?
-            </question>
-            <answer>
-
-                <p>
-                    Of course!
-                    <a href="http://www.jboss.org">JBoss</a>
-                    is free and convienient for the turn-key demonstrations. You can download
-                    Tapestry and JBoss and have a real J2EE application running in about a minute!
-                    The scripts that configure JBoss are sensitive to the particular release of
-                    JBoss, it must be release 3.0.6.
-                </p>
-                <p>
-                    However, Tapestry applications are 100% container agnostic ... Tapestry doesn't
-                    care what servlet container it is used with and does not even require an EJB
-                    container.
-                </p>
-                <p>
-                    All of the various integration libraries can be found <a href="http://tapestry.apache.org/community.html">here</a>.
-                </p>
-            </answer>
-        </faq>
-
-    </part>
-
-    <part id="technical">
-        <title>Technical</title>
-
-        <faq id="j2ee-security">
-            <question>
-                How do I integrate a Tapestry application with J2EE declarative security/JAAS?
-            </question>
-            <answer>
-                <p>
-                    In Tapestry 3.0, this could be a problem, because of the way Tapestry generated
-                    URLs. Tapestry 4.0 adds native support for
-                    <a href="UsersGuide/friendly-urls.html">friendly URLs</a>
-                    which allow you to modularize your application across multiple folders in a more
-                    traditional manner.
-                </p>
-            </answer>
-        </faq>
-        
-        <faq id="script-component">
-            <question>
-                What is the
-                <a href="components/general/Script.html">Script</a>
-                component? Why is it needed and how does it work?
-            </question>
-            <answer>
-
-                <p>
-                    One of the challenges in building a component framework for the web is
-                    addressing client-side scripting. In the Tapestry world, a component may be used
-                    multiple times within a single page, or even rendered multiple times within a
-                    loop. This creates issues when that component is expected to have client-side
-                    behavior because the same component will render out as many HTML elements with
-                    different names, and naming conflicts could break the behavior on the client
-                    side.
-                </p>
-
-                <p>
-                    The challenge is to adapt the JavaScript to the particular names related to a
-                    specific component. This requires a special templating language just for
-                    generating JavaScript.
-                </p>
-
-                <p>
-                    IMO, this script templating framework is an effective means to bundle scripts in
-                    components. It provides scripts with the advantages of components. It can now be
-                    reused like a component and not have to worry about renaming field names or the
-                    wiring between the fields and the scripts. You just declare the component and
-                    you are good to go. It certainly is another layer of abstraction that one will
-                    have to learn but once you have learned it, it is very powerful. And honestly
-                    there is not much to it.
-                </p>
-
-                <p>
-                    The script framework is mandated by the fact that form element/field names are
-                    automatically generated by the framework. And so you write your script in XML
-                    and use variables for these names and let the framework provide the correct
-                    names during runtime. Going further, you may also ask the framework to provide
-                    other objects that would help in creating your script. For example...
-                </p>
-<p>
-<source><![CDATA[
-<input-symbol key="select" 
-    class="org.apache.tapestry.form.PropertySelection"
-    required="yes"/>
-]]></source>
-</p>
-                <p>
-                    This defines an input variable "select" of type
-                    "org.apache.tapestry.form.PropertySelection". All such variables/symbols passed
-                    in to the script is stored in a symbol map. And now you can use the form select
-                    list name by using an ant style syntax like ${select.name}. The expression
-                    within "${}" is an OGNL expression and is evaluated with respect to the symbol
-                    map. You may also define your own symbols/variables using &lt;let...&gt; like...
-                </p>
-
-<p>
-<source>
-<let key="formObj">
-
-    document.${select.form.name}
-
-</let>
-<let key="selectObj">
-
-    ${formObj}.${select.name}
-
-</let>
-</source>
-</p>
-                <p>
-                    These variables/symbols are stored in the symbol map also. So now if you want to
-                    set the value of the form select list all you do is say
-                    ${formObj}.${selectObj}.value = 'whatever'; this would be equivalent to
-                    <code>document.myForm.mySelect.value = 'whatever';</code>
-                    where
-                    <code>myForm</code>
-                    is the form name and mySelect is the select list name.
-                </p>
-
-
-                <p>
-                    <code>input-symbol</code>s are like method parameters and 
-                    <code>let</code>s are like
-                    instance variables. Typically you would pass values to the
-                    <code>input-symbol</code>s via the Script component like...
-                </p>
-
-<p>
-<source>
-<component id="myScript" type="Script">
-
-    <binding name="script" value="ScriptSpecificationName.script"/>
-    <binding name="select" value="components.somePropertySelection"/>
-
-</component>
-</source>
-</p>
-                <p>
-                    The actual scripts are defined in one of the two sections of the script
-                    specification, &lt;body...&gt; or &lt;initialization...&gt;, depending on when
-                    you want the script to execute. If you want the script to execute on load of the
-                    page, then you define it in the &lt;initialization...&gt;, if you want it to
-                    execute on any other event, define it in the &lt;body...&gt; section of the
-                    specification. For example...
-                </p>
-                
-<p>
-<source>
-<body>
-
-    function onChangeList(listObj)
-    {
-
-        alert(listObj.value);
-
-    }
-
-</body>
-
-<initialization>
-
-    ${selectObj}.onchange = function(e)
-    {
-
-        onChangeList(${selectObj});
-
-    }
-
-</initialization>
-</source>
-</p>
-
-                <p>
-                    The JavaScript generated inside the &lt;body&gt; element (of the script
-                    template) is ultimately rendered into a single JavaScript block located just
-                    inside the HTML &lt;body&gt; tag. The &lt;intialization&gt; content is placed in
-                    a second JavaScript block, just before the HTML &lt;/body&gt; tag.
-                </p>
-
-
-                <p>
-                    One more thing to remember, scripts being components, and components by nature
-                    being independent of its environment, will render the script in the page once
-                    for every ocurrance of the component. If you want the body of the script to be
-                    rendered only once no matter how many times the component is used, just wrap the
-                    body in a &lt;unique&gt; tag like...
-                </p>
-
-
-<p>
-<source>
-<body>
-<unique>
-
-    function onChangeList(listObj)
-    {
-
-        alert(listObj.value);
-
-    }
-
-</unique>
-</body>
-</source>
-</p>
-
-                <p>That's all there is to it!</p>
-
-            </answer>
-        </faq>
-        
-        <faq id="cycle-activate">
-            <question>
-                cycle.activate() does not seem to alter the URL. Is there any alternative that will
-                alter the URL to point to the correct page?
-            </question>
-            <answer>
-                <p>
-                    You would need to throw a RedirectException with the new URL; this sends an HTTP
-                    redirect to the client.
-                </p>
-            </answer>
-        </faq>
-        
-        <faq id="page-navigation">
-            <question>How do I do page navigation like Struts?</question>
-            <answer>
-                <p>Usage page meta-data:</p>
-
-
-<p>
-<source>
-Page1.page
-<page-specification>
-...
-        <meta key="success" value="Home" />
-        <meta key="error" value="Error" />
-
-
-</page-specification>
-
-
-Page2.page
-<page-specification>
-...
-        <meta key="success" value="ClientInfo" />
-        <meta key="error" value="SecurityCheck" />
-
-</page-specification>
-
-
-public void submitListener(IRequestCycle cycle)
-{
-  String key = ifSuccess() ? "success" : "error";
-  String pageName = getSpecification().getProperty(key);
-  
-  cycle.activate(pageName);
-}
-</source>
-</p>
-
-                <p>-- Tip from Harish</p>
-
-            </answer>
-        </faq>
-        
-        <faq id="popup-component">
-            <question>How do I make a link popup a new window?</question>
-            <answer>
-                <p>Use the contrib:PopupLink component.</p>
-            </answer>
-        </faq>
-
-        <faq id="file-streaming">
-            <question>How do I stream a file to the user from Tapestry?</question>
-            <answer>
-                <p>
-                    Make a method like the following a a listener, such as from a DirectLink or
-                    whatever.
-                </p>
-
-                <p>
-                    (The Document is just a class that holds the file information you want to send
-                    to the user.)
-                </p>
-                
-<p>
-<source>
-public void downloadAction(IRequestCycle cycle)
-{
-    try
-    {
-        HttpServletResponse response =
-        cycle.getRequestContext().getResponse();
-
-
-        byte[] data = new byte[1024];
-        FileInputStream in = document.getFileInputstream();
-
-
-        response.setHeader("Content-disposition",
-          "inline; filename=" +
-           document.getFileName());
-        response.setContentType(document.getMimeType());
-        response.setContentLength(new Long(document.getSize()).intValue());
-        ServletOutputStream out = response.getOutputStream();
-
-        int bytesRead = 0;
-        while ((bytesRead = in.read(data)) &gt; -1)
-        {
-            out.write(data, 0 , bytesRead);
-        }
-        in.close();
-        response.flushBuffer();
-    }
-    catch (IOException e)
-    {
-        e.printStackTrace();
-    }
-}
-</source>
-</p>
-                <span class="warn">
-                    <strong>Warning:</strong>
-                    <p>
-                    This is not sanctioned by Howard. The correct approach is to define a new engine
-                    service for accessing the content, and build a URL to that content, possibly
-                    sending a redirect to the client to load that content. This approach has not be
-                    verified to work in Tapestry 4.0.
-                    </p>
-                </span>
-            </answer>
-
-
-
-        </faq>
-
-        <faq id="url-generation">
-            <question>
-                I need to calculate a URL to jump to a particular page. How do I do this?
-            </question>
-            <answer>
-                <p>
-                    The best bet is to use the external service. This lets you directly invoke a
-                    page and pass objects as parameters. The page you want to jump to will need to
-                    implement IExternalPage. To calculate the URL you have to use something like
-                    this:
-                </p>
-
-
-<p>
-<source>
-// Add <inject property="externalService" object="engine-service:external" /> to specification
-// or use @InjectObject("engine-service:external")
-public abstract IEngineService getExternalService();
-
-public String getURL(IRequestCycle cycle, String pageName, Object[] parameters)
-{
-  IEngineService service = getExternalService();
-  ExternalServiceParameter parameter = new ExternalServiceParameter(pageName, parameters);
-  ILink link = service.getLink(cycle, parameter);
-  
-  return link.getURL();
-}
-</source>
-</p>
-                <p>
-                    Different engine services take different types of objects as that final
-                    parameter.
-                </p>
-            </answer>
-        </faq>
-
-        <faq id="submit-listeners">
-            <question>
-                I have a form with a submit button. On the form and the submit button are two
-                separate listeners. Which is invoked first?
-            </question>
-            <answer>
-
-                <p>
-                    The listener for the Submit (or ImageSubmit, or LinkSubmit) component will
-                    always trigger first; the Form's listener always triggers last.
-                </p>
-
-                <p>
-                    The timing on the Submit listener can be confusing. In Tapestry 3.0, the Submit
-                    listener would be invoked in the middle of the form's "rewind"; and in some
-                    cases, properties (set by components "further down" the form) would not have
-                    been set yet.
-                </p>
-
-                <p>
-                    In Tapestry 4.0, the execution of the listener method is deferred until just
-                    before the form's listener by default. This can be turned off using the Submit's
-                    defer parameter.
-                </p>
-
-            </answer>
-        </faq>
-
-        <faq id="form-javascript">
-            <question>
-                I'd like to be able attach my own client-side javascript handling on the form
-                submit. What's the best way to do this?
-            </question>
-            <answer>
-                <p>You can add event handler during component rendering:</p>
-
-<p>
-<source>
-protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle){
-    ...
-    yourFormComponent.addEventHandler(FormEventType.SUBMIT, "javaScriptValidatingFunctionName");
-    ...
-}
-</source>
-</p>
-                <p>
-                    <code>org.apache.tapestry.contrib.palette.Palette</code>
-                    can be used for detailed example.
-                </p>
-
-                <span class="warn">
-                    <strong>Warning:</strong>
-                    <p>
-                    This is about to change significantly for Tapestry 4.0, with the bulk of the
-                    client-side event handling moving to the client side.
-                    </p>
-                </span>
-            </answer>
-        </faq>
-
-        <faq id="submit-lifecycle">
-            <question>What's the lifecycle of a form submit?</question>
-            <answer>
-                <p>Events will trigger in the following order:</p>
-
-                <ul>
-                    <li>initialize()</li>
-                    <li>pageBeginRender() ("rewind")</li>
-                    <li>rewind of the form / setting of properties</li>
-                    <li>Deferred listeners (for Submit components)</li>
-                    <li>Form's listener</li>
-                    <li>pageEndRender() ("rewind")</li>
-                    <li>pageBeginRender() (normal)</li>
-                    <li>pageEndRender() (normal)</li>
-                </ul>
-
-
-                <p>
-                    The form "rewind" cycle is nothing more than a render cycle where the output is
-                    buffered and scrapped rather than written to the servlet output stream. The
-                    second <code>pageBeginRender()</code> is triggered during the actual page rendering. You can
-                    use <code>requestCycle.isRewinding()</code> to distinguish between these two render cycles.
-                </p>
-
-            </answer>
-        </faq>
-
-        <faq id="component-reuse">
-            <question>Can I use the same component multiple times in one template?</question>
-            <answer>
-                <p>No - but you can copy the definition of a component pretty easily.</p>
-
-<p>
-<source>
-<component id="valueInsert" type="Insert" >
-   <binding name="value" value="getValueAt( rowIndex, columnIndex )" />
-</component>
-
-<component id="valueInsert1" copy-of="valueInsert"/>
-<component id="valueInsert2" copy-of="valueInsert"/>
-<component id="valueInsert3" copy-of="valueInsert"/>
-<component id="valueInsert4" copy-of="valueInsert"/>
-</source>
-</p>
-            </answer>
-        </faq>
-
-        <faq id="development-caching">
-            <question>
-                I have to restart my application to pick up changes to specifications and templates,
-                how can I avoid this?
-            </question>
-
-            <answer>
-                <p>
-
-                    Start your servlet container with the JVM system parameter
-                    <code>org.apache.tapestry.disable-caching</code>
-                    set to true, i.e.,
-                    <code>-Dorg.apache.tapestry.disable-caching=true</code>
-                    .
-                </p>
-
-                <p>
-                    Tapestry will discard cached specifications and templates after each request.
-                    You application will run a bit slower, but changes to templates and
-                    specifications will show up immediately. This also tests that you are persisting
-                    server-side state correctly.
-                </p>
-            </answer>
-
-        </faq>
-
-        <faq id="error-reporting">
-            <question>What is "line precise error reporting"?</question>
-
-            <answer>
-                <p>
-                    Tapestry applications are built from templates and specifications. It's natural
-                    that when these templates and specifications are read, any syntax errors are
-                    reported, and the precise file and location is identified.
-                </p>
-
-                <p>
-                    Tapestry goes far beyond that! It always relates runtime objects back to the
-                    corresponding files so that even runtime errors report the file and location.
-
-
-
-                    <a href="images/LinePrecise.png">
-                        <img src="images/LinePrecise_thumb.png" alt="Line Precise" />
-                    </a>
-
-                </p>
-
-                <p>
-                    For example; say you bind a parameter of a component that expects a non-null
-                    value, but the value ends up being null anyway, due to a bug in your code or
-                    your specification. Tapestry can't tell, until runtime, that you made a mistake
-                    ... but when it does, part of the exception report will be the line in the
-                    template or specification where you bound the component parameter. Zap! You are
-                    sent right to the offending file to fix the problem.
-                </p>
-
-
-                <p>
-                    Other frameworks may report syntax errors when they parse their specifications,
-                    but after that, you are own your own: if you are lucky, you'll get a stack
-                    trace. Good luck finding your error in that! Tapestry gives you a wealth of
-                    information when unexpected exceptions occur, usually more than enough to
-                    pinpoint the problem
-                    <em>without</em>
-                    having to restart the application inside a debugger.
-                </p>
-            </answer>
-        </faq>
-    </part>
-
-    <part id="other-frameworks">
-        <title>Other Frameworks</title>
-        <faq id="spring-integration">
-            <question>How do I integrate Tapestry with Spring?</question>
-
-            <answer>
-                <p>
-                    <a href="http://www.springframework.org/">Spring</a>
-                    is a popular service framework. There is an
-                    <a
-                        href="http://www.springframework.org/docs/reference/webintegration.html#view-tapestry">
-                        integration section
-                    </a>
-                    in Spring Reference Documentation about how to integrate these two open-source
-                    frameworks together. This documentation refers to Tapestry 3.0, however. The
-                    Tapestry 4.0 story is much cleaner, but still evolving.
-                </p>
-            </answer>
-        </faq>
-        
-        <faq id="jsp-includes">
-            <question>How can I include files in tapestry like jsp.include does?</question>
-
-            <answer>
-                <p>
-                  The replies usually follow these patterns:
-                </p>
-                <ul>
-                <li>
-                  <em>"No, I really need to include arbitrary components."</em>
-                  -> Then use <a href="components/general/renderblock.html">RenderBlock</a>.
-                </li>
-                <li>
-                  <em>"No, I really need to be able to add new components at runtime."</em>
-                  -> Then try <a href="http://www.behindthesite.com/blog/C1931765677/E1630021481/">DynamicBlock</a>.
-                </li>
-                <li>
-                  <em>"No, I really need to include arbitrary text/files."</em>
-                  -> Then try <a href="http://www.tapestrycomponents.org/Tassel/app?service=external/ViewComponent&amp;sp=SInclude">Include</a>, which is for T3. Maybe you can update it to T4.
-                </li>
-                </ul>
-            </answer>
-        </faq>
-        
-    </part>
-</faqs>
diff --git a/tapestry/src/site/resources/css/jdstyle.css b/tapestry/src/site/resources/css/jdstyle.css
deleted file mode 100644
index 819d52f..0000000
--- a/tapestry/src/site/resources/css/jdstyle.css
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Javadoc style sheet */
-
-/* Define colors, fonts and other style attributes here to override the defaults  */
-
-/* Page background color */
-body { 	font-family: Arial;
-	background-color: white;
-	font-size: 10pt;
- }
-td { 	font-family: Arial;
-	font-size: 10pt;
- }
-/* Table colors */
-.TableHeadingColor     { background: #F4F4F4 }
-.TableSubHeadingColor  { background: #F4F4F4 }
-.TableRowColor         { background: #FFFFFF }
-
-/* Font used in left-hand frame lists */
-.FrameTitleFont   { font-size: normal; font-family: Arial }
-.FrameHeadingFont { font-size: normal; font-family: Arial }
-.FrameItemFont    { font-size: normal; font-family: Arial }
-
-/* Example of smaller, sans-serif font in frames */
-/* .FrameItemFont  { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
-
-/* Navigation bar fonts and colors */
-.NavBarCell1    { background-color:#F4F4F4;}
-.NavBarCell1Rev { background-color:silver;}
-
-.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
-.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
-
-.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
-
-A {
-    color: #003399;
-}
-
-A:active {
-    color: #003399;
-}
-
-A:visited {
-    color: #888888;
-}
-
-P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
-    color: #000000;
-}
-
-TD, TH, SPAN {
-    color: #000000;
-}
-
-BLOCKQUOTE {
-    margin-right: 0px;
-}
-
-
-/*H1, H2, H3, H4, H5, H6    {
-    color: #000000;
-    font-weight:500;
-    margin-top:10px;
-    padding-top:15px;
-}
-
-H1 { font-size: 150%; }
-H2 { font-size: 140%; }
-H3 { font-size: 110%; font-weight: bold; }
-H4 { font-size: 110%; font-weight: bold;}
-H5 { font-size: 100%; font-style: italic; }
-H6 { font-size: 100%; font-style: italic; }*/
-
-TT {
-font-size: 90%;
-    font-family: "Courier New", Courier, monospace;
-    color: #000000;
-}
-
-PRE {
-font-size: 90%;
-    padding: 5px;
-    border-style: solid;
-    border-width: 1px;
-    border-color: #CCCCCC;
-    background-color: #F4F4F4;
-}
-
-UL, OL, LI {
-    list-style: disc;
-}
-
-HR  {
-    width: 100%;
-    height: 1px;
-    background-color: #CCCCCC;
-    border-width: 0px;
-    padding: 0px;
-    color: #CCCCCC;
-}
-
-.variablelist { 
-    padding-top: 10; 
-    padding-bottom:10; 
-    margin:0;
-}
-
-.itemizedlist, UL { 
-    padding-top: 0; 
-    padding-bottom:0; 
-    margin:0; 
-}
-
-.term { 
-    font-weight:bold;
-}
diff --git a/tapestry/src/site/resources/css/site.css b/tapestry/src/site/resources/css/site.css
deleted file mode 100644
index a7bcb35..0000000
--- a/tapestry/src/site/resources/css/site.css
+++ /dev/null
@@ -1,43 +0,0 @@
-a.externalLink,a.externalLink:link,a.externalLink:visited,a.externalLink:active,a.externalLink:hover {
-    background: none;
-    padding: 0;
-}
-
-body ul {
-    list-style-type: square;
-}
-
-#downloadbox {
-    float: right;
-    margin: 0 1em 2em 2em;
-    padding: 1em;
-    border: 1px solid #999;
-    background-color: #eee;
-}
-
-#downloadbox h5 {
-    color: #000;
-    margin: 0;
-    border-bottom: 1px solid #aaaaaa;
-    font-size: smaller;
-    padding: 0;
-}
-
-#downloadbox p {
-    margin-top: 1em;
-    margin-bottom: 0;
-}
-
-#downloadbox ul {
-    margin-top: 0;
-    margin-bottom: 1em;
-    list-style-type: disc;
-}
-
-#downloadbox li {
-    font-size: smaller;
-}
-
-.section ul li {
-    margin-top: 8px;
-}
diff --git a/tapestry/src/site/resources/favicon.ico b/tapestry/src/site/resources/favicon.ico
deleted file mode 100644
index 2fcfa08..0000000
--- a/tapestry/src/site/resources/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/Autocompleter.png b/tapestry/src/site/resources/images/ComponentReference/Autocompleter.png
deleted file mode 100644
index c941d84..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/Autocompleter.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/Dialog.png b/tapestry/src/site/resources/images/ComponentReference/Dialog.png
deleted file mode 100644
index e47f65a..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/Dialog.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/DirectLink.png b/tapestry/src/site/resources/images/ComponentReference/DirectLink.png
deleted file mode 100644
index 7a2c6bf..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/DirectLink.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/DropdownDatePicker.png b/tapestry/src/site/resources/images/ComponentReference/DropdownDatePicker.png
deleted file mode 100644
index b2b8753..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/DropdownDatePicker.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/DropdownTimePicker.png b/tapestry/src/site/resources/images/ComponentReference/DropdownTimePicker.png
deleted file mode 100644
index 4e41a89..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/DropdownTimePicker.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/GTimePicker.png b/tapestry/src/site/resources/images/ComponentReference/GTimePicker.png
deleted file mode 100644
index 051b48f..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/GTimePicker.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/Image.png b/tapestry/src/site/resources/images/ComponentReference/Image.png
deleted file mode 100644
index b44efb0..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/Image.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/InlineEditBox-editing.png b/tapestry/src/site/resources/images/ComponentReference/InlineEditBox-editing.png
deleted file mode 100644
index ea88dd5..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/InlineEditBox-editing.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/InlineEditBox.png b/tapestry/src/site/resources/images/ComponentReference/InlineEditBox.png
deleted file mode 100644
index c3a2a2e..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/InlineEditBox.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/Insert.png b/tapestry/src/site/resources/images/ComponentReference/Insert.png
deleted file mode 100644
index 0065277..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/Insert.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/PoweredByTapestry.png b/tapestry/src/site/resources/images/ComponentReference/PoweredByTapestry.png
deleted file mode 100644
index baed4de..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/PoweredByTapestry.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/RenderBlock.png b/tapestry/src/site/resources/images/ComponentReference/RenderBlock.png
deleted file mode 100644
index cd489da..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/RenderBlock.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/RenderBody.png b/tapestry/src/site/resources/images/ComponentReference/RenderBody.png
deleted file mode 100644
index 5870d26..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/RenderBody.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/Script.png b/tapestry/src/site/resources/images/ComponentReference/Script.png
deleted file mode 100644
index 521eb84..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/Script.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ComponentReference/Suggest.png b/tapestry/src/site/resources/images/ComponentReference/Suggest.png
deleted file mode 100644
index 414ac1d..0000000
--- a/tapestry/src/site/resources/images/ComponentReference/Suggest.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/LinePrecise.png b/tapestry/src/site/resources/images/LinePrecise.png
deleted file mode 100644
index 5c023bd..0000000
--- a/tapestry/src/site/resources/images/LinePrecise.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/LinePrecise_thumb.png b/tapestry/src/site/resources/images/LinePrecise_thumb.png
deleted file mode 100644
index d0dc640..0000000
--- a/tapestry/src/site/resources/images/LinePrecise_thumb.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/QuickStart/directlink1.png b/tapestry/src/site/resources/images/QuickStart/directlink1.png
deleted file mode 100644
index 040cc59..0000000
--- a/tapestry/src/site/resources/images/QuickStart/directlink1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/QuickStart/directlink2.png b/tapestry/src/site/resources/images/QuickStart/directlink2.png
deleted file mode 100644
index 3ecc383..0000000
--- a/tapestry/src/site/resources/images/QuickStart/directlink2.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/QuickStart/directlink3.png b/tapestry/src/site/resources/images/QuickStart/directlink3.png
deleted file mode 100644
index 4efc47a..0000000
--- a/tapestry/src/site/resources/images/QuickStart/directlink3.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/QuickStart/directlink4.png b/tapestry/src/site/resources/images/QuickStart/directlink4.png
deleted file mode 100644
index ba60f25..0000000
--- a/tapestry/src/site/resources/images/QuickStart/directlink4.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/QuickStart/forms1.png b/tapestry/src/site/resources/images/QuickStart/forms1.png
deleted file mode 100644
index b88bd15..0000000
--- a/tapestry/src/site/resources/images/QuickStart/forms1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/QuickStart/forms2.png b/tapestry/src/site/resources/images/QuickStart/forms2.png
deleted file mode 100644
index cff4c04..0000000
--- a/tapestry/src/site/resources/images/QuickStart/forms2.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/QuickStart/forms3.png b/tapestry/src/site/resources/images/QuickStart/forms3.png
deleted file mode 100644
index b4825a4..0000000
--- a/tapestry/src/site/resources/images/QuickStart/forms3.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/QuickStart/helloworld1.png b/tapestry/src/site/resources/images/QuickStart/helloworld1.png
deleted file mode 100644
index 1b82c3b..0000000
--- a/tapestry/src/site/resources/images/QuickStart/helloworld1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/QuickStart/helloworld2.png b/tapestry/src/site/resources/images/QuickStart/helloworld2.png
deleted file mode 100644
index 31a7536..0000000
--- a/tapestry/src/site/resources/images/QuickStart/helloworld2.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/QuickStart/helloworld3.png b/tapestry/src/site/resources/images/QuickStart/helloworld3.png
deleted file mode 100644
index 2553b19..0000000
--- a/tapestry/src/site/resources/images/QuickStart/helloworld3.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/QuickStart/helloworld4.png b/tapestry/src/site/resources/images/QuickStart/helloworld4.png
deleted file mode 100644
index 24a5ea2..0000000
--- a/tapestry/src/site/resources/images/QuickStart/helloworld4.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/Tapestry-Banner.png b/tapestry/src/site/resources/images/Tapestry-Banner.png
deleted file mode 100644
index 2b14253..0000000
--- a/tapestry/src/site/resources/images/Tapestry-Banner.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/UsersGuide/component-body.png b/tapestry/src/site/resources/images/UsersGuide/component-body.png
deleted file mode 100644
index 513224c..0000000
--- a/tapestry/src/site/resources/images/UsersGuide/component-body.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/UsersGuide/core-classes.png b/tapestry/src/site/resources/images/UsersGuide/core-classes.png
deleted file mode 100644
index b8cfbea..0000000
--- a/tapestry/src/site/resources/images/UsersGuide/core-classes.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/UsersGuide/high-level-component-request.png b/tapestry/src/site/resources/images/UsersGuide/high-level-component-request.png
deleted file mode 100644
index 2766051..0000000
--- a/tapestry/src/site/resources/images/UsersGuide/high-level-component-request.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/UsersGuide/parameter-bindings.png b/tapestry/src/site/resources/images/UsersGuide/parameter-bindings.png
deleted file mode 100644
index 24a9002..0000000
--- a/tapestry/src/site/resources/images/UsersGuide/parameter-bindings.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/UsersGuide/validation-dialog.png b/tapestry/src/site/resources/images/UsersGuide/validation-dialog.png
deleted file mode 100644
index 81c059f..0000000
--- a/tapestry/src/site/resources/images/UsersGuide/validation-dialog.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ajax-firebug.png b/tapestry/src/site/resources/images/ajax-firebug.png
deleted file mode 100644
index 031d3bd..0000000
--- a/tapestry/src/site/resources/images/ajax-firebug.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/autocompleter.png b/tapestry/src/site/resources/images/autocompleter.png
deleted file mode 100644
index 3691e04..0000000
--- a/tapestry/src/site/resources/images/autocompleter.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/developmentguide/rounded-bottom-left-green.gif b/tapestry/src/site/resources/images/developmentguide/rounded-bottom-left-green.gif
deleted file mode 100644
index 09b1f0f..0000000
--- a/tapestry/src/site/resources/images/developmentguide/rounded-bottom-left-green.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/developmentguide/rounded-bottom-right-red.gif b/tapestry/src/site/resources/images/developmentguide/rounded-bottom-right-red.gif
deleted file mode 100644
index 6668f01..0000000
--- a/tapestry/src/site/resources/images/developmentguide/rounded-bottom-right-red.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/developmentguide/rounded-top-left-blue.gif b/tapestry/src/site/resources/images/developmentguide/rounded-top-left-blue.gif
deleted file mode 100644
index 8d21be2..0000000
--- a/tapestry/src/site/resources/images/developmentguide/rounded-top-left-blue.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/developmentguide/rounded-top-right-orange.gif b/tapestry/src/site/resources/images/developmentguide/rounded-top-right-orange.gif
deleted file mode 100644
index 91d6bdc..0000000
--- a/tapestry/src/site/resources/images/developmentguide/rounded-top-right-orange.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/developmentguide/side-shadow.png b/tapestry/src/site/resources/images/developmentguide/side-shadow.png
deleted file mode 100644
index c9e3620..0000000
--- a/tapestry/src/site/resources/images/developmentguide/side-shadow.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/developmentguide/whole-shadow.gif b/tapestry/src/site/resources/images/developmentguide/whole-shadow.gif
deleted file mode 100644
index 9294663..0000000
--- a/tapestry/src/site/resources/images/developmentguide/whole-shadow.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/ewdt_tong_cover.jpg b/tapestry/src/site/resources/images/ewdt_tong_cover.jpg
deleted file mode 100644
index 567e7a5..0000000
--- a/tapestry/src/site/resources/images/ewdt_tong_cover.jpg
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/examples/vlib.png b/tapestry/src/site/resources/images/examples/vlib.png
deleted file mode 100644
index 36b3efa..0000000
--- a/tapestry/src/site/resources/images/examples/vlib.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/examples/workbench.png b/tapestry/src/site/resources/images/examples/workbench.png
deleted file mode 100644
index c8a2c61..0000000
--- a/tapestry/src/site/resources/images/examples/workbench.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/jakarta-logo.gif b/tapestry/src/site/resources/images/jakarta-logo.gif
deleted file mode 100644
index 4824b79..0000000
--- a/tapestry/src/site/resources/images/jakarta-logo.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/rounded-blue.gif b/tapestry/src/site/resources/images/rounded-blue.gif
deleted file mode 100644
index f06b915..0000000
--- a/tapestry/src/site/resources/images/rounded-blue.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/rounded-orange.gif b/tapestry/src/site/resources/images/rounded-orange.gif
deleted file mode 100644
index 0680a82..0000000
--- a/tapestry/src/site/resources/images/rounded-orange.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/rss.png b/tapestry/src/site/resources/images/rss.png
deleted file mode 100644
index f0796ac..0000000
--- a/tapestry/src/site/resources/images/rss.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/small-dojo-logo.png b/tapestry/src/site/resources/images/small-dojo-logo.png
deleted file mode 100644
index 9b68b19..0000000
--- a/tapestry/src/site/resources/images/small-dojo-logo.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/tapestry-german-cover.gif b/tapestry/src/site/resources/images/tapestry-german-cover.gif
deleted file mode 100644
index 935bafe..0000000
--- a/tapestry/src/site/resources/images/tapestry-german-cover.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/tapestry-in-action.png b/tapestry/src/site/resources/images/tapestry-in-action.png
deleted file mode 100644
index 98c73ea..0000000
--- a/tapestry/src/site/resources/images/tapestry-in-action.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/images/tsn-logo.png b/tapestry/src/site/resources/images/tsn-logo.png
deleted file mode 100644
index 7ed4bcb..0000000
--- a/tapestry/src/site/resources/images/tsn-logo.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/src/site/resources/jsdoc/files/core-js.html b/tapestry/src/site/resources/jsdoc/files/core-js.html
deleted file mode 100644
index f43d531..0000000
--- a/tapestry/src/site/resources/jsdoc/files/core-js.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<html><head><title>tapestry</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body id=FramedContentPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass CTopic" id=MainTopic><h1 class=CTitle><a name="tapestry"></a>tapestry</h1><div class=CBody><p class=CParagraph>Provides the core functionality for the Tapestry javascript package libraries.</p><p class=CParagraph>Most of the functions in here are related to initiating and parsing IO requests.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBody><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#tapestry" >tapestry</a></td><td class=SDescription>Provides the core functionality for the Tapestry javascript package libraries.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#tapestry.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#tapestry.version" >version</a></td><td class=SDescription>The current client side library version, usually matching the current java library version. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#tapestry.requestEncoding" >requestEncoding</a></td><td class=SDescription>Defines the encoding that will be used in all Tapestry initiated XHR requests to encode URL or form data. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#tapestry.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.bind" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">bind</a></td><td class=SDescription>Core XHR bind function for tapestry internals. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.error" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">error</a></td><td class=SDescription>Global error handling function for dojo.io.bind requests. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.load" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">load</a></td><td class=SDescription>Global load handling function for dojo.io.bind requests. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.loadJson" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">loadJson</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.loadContent" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">loadContent</a></td><td class=SDescription>Used by <a href="#tapestry.load" class=LFunction id=link6 onMouseOver="ShowTip(event, 'tt3', 'link6')" onMouseOut="HideTip('tt3')">tapestry.load</a> when handling xml responses to iterate over the tapestry specific xml response and appropriately load all content types / perform animations / execute scripts in the proper order / etc..</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.loadScriptContent" id=link7 onMouseOver="ShowTip(event, 'tt6', 'link7')" onMouseOut="HideTip('tt6')">loadScriptContent</a></td><td class=SDescription>Manages loading javascript content for a specific incoming xml element.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.loadScriptFromUrl" id=link8 onMouseOver="ShowTip(event, 'tt7', 'link8')" onMouseOut="HideTip('tt7')">loadScriptFromUrl</a></td><td class=SDescription>Takes a url string and loads the javascript it points to as a normal document head script include section. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.presentException" id=link9 onMouseOver="ShowTip(event, 'tt8', 'link9')" onMouseOut="HideTip('tt8')">presentException</a></td><td class=SDescription>When remote exceptions are caught on the server special xml blocks are returned to the client when the requests are initiated via async IO. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.cleanConnect" id=link10 onMouseOver="ShowTip(event, 'tt9', 'link10')" onMouseOut="HideTip('tt9')">cleanConnect</a></td><td class=SDescription>Utility used to disconnect a previously connected event/function.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.isServingRequests" id=link11 onMouseOver="ShowTip(event, 'tt10', 'link11')" onMouseOut="HideTip('tt10')">isServingRequests</a></td><td class=SDescription>Utility used to find out if there are any ajax requests in progress.</td></tr><tr class="SClass"><td class=SEntry><a href="#tapestry.html" >tapestry.html</a></td><td class=SDescription>Provides functionality related to parsing and rendering dom nodes.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#tapestry.html.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.html.getContentAsString" id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')">getContentAsString</a></td><td class=SDescription>Takes a dom node and returns its contents rendered in a string.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.html.getElementAsString" id=link13 onMouseOver="ShowTip(event, 'tt12', 'link13')" onMouseOut="HideTip('tt12')">getElementAsString</a></td><td class=SDescription>Takes a dom node and returns itself and its contents rendered in a string.</td></tr><tr class="SClass"><td class=SEntry><a href="#tapestry.event" >tapestry.<span class=HB> </span>event</a></td><td class=SDescription>Utility functions that handle converting javascript event objects into a name/value pair format that can be sent to the remote server.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#tapestry.event.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.event.buildEventProperties" id=link14 onMouseOver="ShowTip(event, 'tt13', 'link14')" onMouseOut="HideTip('tt13')">buildEventProperties</a></td><td class=SDescription>Takes an incoming browser generated event (like key/mouse events) and creates a js object holding the basic values of the event in order for it to be submitted to the server.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.event.buildTargetProperties" id=link15 onMouseOver="ShowTip(event, 'tt14', 'link15')" onMouseOut="HideTip('tt14')">buildTargetProperties</a></td><td class=SDescription>Generic function to build a properties object populated with relevent target data.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.event.buildNodeProperties" id=link16 onMouseOver="ShowTip(event, 'tt15', 'link16')" onMouseOut="HideTip('tt15')">buildNodeProperties</a></td><td class=SDescription>Builds needed target node properties, like the node&rsquo;s id.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div>
-
-<div class="CGroup CTopic"><h3 class=CTitle><a name="tapestry.Properties"></a>Properties</h3></div>
-
-<div class="CProperty CTopic"><h3 class=CTitle><a name="tapestry.version"></a>version</h3><div class=CBody><p class=CParagraph>The current client side library version, usually matching the current java library version.&nbsp; (ie 4.1, etc..)</p></div></div>
-
-<div class="CProperty CTopic"><h3 class=CTitle><a name="tapestry.requestEncoding"></a>requestEncoding</h3><div class=CBody><p class=CParagraph>Defines the encoding that will be used in all Tapestry initiated XHR requests to encode URL or form data.&nbsp; Gets set by AjaxShellDelegate class on server on most requests by default.</p></div></div>
-
-<div class="CGroup CTopic"><h3 class=CTitle><a name="tapestry.Functions"></a>Functions</h3></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.bind"></a>bind</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>bind:function(</td><td class=PParameter nowrap>url,</td></tr><tr><td></td><td class=PParameter nowrap>content,</td></tr><tr><td></td><td class=PParameter nowrap>json</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Core XHR bind function for tapestry internals.&nbsp; The <a href="#tapestry.error" class=LFunction id=link17 onMouseOver="ShowTip(event, 'tt2', 'link17')" onMouseOut="HideTip('tt2')">error</a>/<a href="#tapestry.load" class=LFunction id=link18 onMouseOver="ShowTip(event, 'tt3', 'link18')" onMouseOut="HideTip('tt3')">load</a> functions defined in this package are used to handle load/error of dojo.io.bind.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>The url to bind the request to.</td></tr><tr><td class=CDLEntry>content</td><td class=CDLDescription>A properties map of optional extra content to send.</td></tr><tr><td class=CDLEntry>json</td><td class=CDLDescription>Boolean, optional parameter specifying whether or not to create a json request.&nbsp; If not specified the default is to use XHR.</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.error"></a>error</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>error:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>exception,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Global error handling function for dojo.io.bind requests.&nbsp; This function is mapped as the &ldquo;error:functionName&rdquo; part of a request in the dojo.io.bind arguments in <a href="#tapestry.bind" class=LFunction id=link19 onMouseOver="ShowTip(event, 'tt1', 'link19')" onMouseOut="HideTip('tt1')">tapestry.bind</a> calls.</p><h4 class=CHeading>See Also</h4><p class=CParagraph><a href="#tapestry.bind" class=LFunction id=link20 onMouseOver="ShowTip(event, 'tt1', 'link20')" onMouseOut="HideTip('tt1')">tapestry.bind</a>, <a href="#tapestry.load" class=LFunction id=link21 onMouseOver="ShowTip(event, 'tt3', 'link21')" onMouseOut="HideTip('tt3')">tapestry.load</a></p></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.load"></a>load</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>load:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Global load handling function for dojo.io.bind requests.&nbsp; This isn&rsquo;t typically called directly by anything, but passed in as the &ldquo;load&rdquo; argument to dojo.io.bind when making IO requests as the function that will handle the return response.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>type</td><td class=CDLDescription>Type of request.</td></tr><tr><td class=CDLEntry>data</td><td class=CDLDescription>The data returned, depending on the request type might be an xml document / plaintext / json / etc.</td></tr><tr><td class=CDLEntry>http</td><td class=CDLDescription>The http object used in request, like XmlHttpRequest.</td></tr><tr><td class=CDLEntry>kwArgs</td><td class=CDLDescription>The original set of arguments passed into dojo.io.bind({arg:val,arg1:val2}).</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.loadJson"></a>loadJson</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadJson:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Executed by default during JSON requests</td><td class=CDLDescription>default implementation does nothing but decrement the &lt;tapestry.requestsInFlight&gt; global variable.</td></tr></table><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>type</td><td class=CDLDescription>Type of request.</td></tr><tr><td class=CDLEntry>data</td><td class=CDLDescription>The data returned, depending on the request type might be an xml document / plaintext / json / etc.</td></tr><tr><td class=CDLEntry>http</td><td class=CDLDescription>The http object used in request, like XmlHttpRequest.</td></tr><tr><td class=CDLEntry>kwArgs</td><td class=CDLDescription>The original set of arguments passed into dojo.io.bind({arg:val,arg1:val2}).</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.loadContent"></a>loadContent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadContent:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>node,</td></tr><tr><td></td><td class=PParameter nowrap>element</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Used by <a href="#tapestry.load" class=LFunction id=link22 onMouseOver="ShowTip(event, 'tt3', 'link22')" onMouseOut="HideTip('tt3')">tapestry.load</a> when handling xml responses to iterate over the tapestry specific xml response and appropriately load all content types / perform animations / execute scripts in the proper order / etc..</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>id</td><td class=CDLDescription>The element id that this content should be applied to in the existing document.</td></tr><tr><td class=CDLEntry>node</td><td class=CDLDescription>The node that this new content will be applied to.</td></tr><tr><td class=CDLEntry>element</td><td class=CDLDescription>The incoming xml node containing rules/content to apply to this node.</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.loadScriptContent"></a>loadScriptContent</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadScriptContent:function(</td><td class=PParameter nowrap>element,</td></tr><tr><td></td><td class=PParameter nowrap>async</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Manages loading javascript content for a specific incoming xml element.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>element</td><td class=CDLDescription>The element to parse javascript statements from and execute.</td></tr><tr><td class=CDLEntry>async</td><td class=CDLDescription>Whether or not to process the script content asynchronously, meaning whether or not to execute the script in a block done in a setTimeout call so as to avoid IE specific issues.</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.loadScriptFromUrl"></a>loadScriptFromUrl</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadScriptFromUrl:function(</td><td class=PParameter nowrap>url</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Takes a url string and loads the javascript it points to as a normal document head script include section. ie:</p><blockquote><pre class=CCode>&lt;script type=&quot;text/javascript&quot; src=&quot;http://localhost/js/foo.js&quot;&gt;&lt;/script&gt;</pre></blockquote><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>url</td><td class=CDLDescription>The url to the script to load into this documents head.</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.presentException"></a>presentException</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>presentException:function(</td><td class=PParameter nowrap>node,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>When remote exceptions are caught on the server special xml blocks are returned to the client when the requests are initiated via async IO.&nbsp; This function takes the incoming Tapestry exception page content and dumps it into a modal dialog that is presented to the user.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>The incoming xml exception node.</td></tr><tr><td class=CDLEntry>kwArgs</td><td class=CDLDescription>The kwArgs used to initiate the original IO request.</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.cleanConnect"></a>cleanConnect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>cleanConnect:function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>event,</td></tr><tr><td></td><td class=PParameter nowrap>funcName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Utility used to disconnect a previously connected event/function.</p><p class=CParagraph>This assumes that the incoming function name is being attached to the global namespace &ldquo;tapestry&rdquo;.</p></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.isServingRequests"></a>isServingRequests</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>isServingRequests:function()</td></tr></table></blockquote><p class=CParagraph>Utility used to find out if there are any ajax requests in progress.</p></div></div>
-
-<div class="CClass CTopic"><h2 class=CTitle><a name="tapestry.html"></a>tapestry.html</h2><div class=CBody><p class=CParagraph>Provides functionality related to parsing and rendering dom nodes.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBody><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#tapestry.html.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#tapestry.html.getContentAsString" id=link23 onMouseOver="ShowTip(event, 'tt11', 'link23')" onMouseOut="HideTip('tt11')">getContentAsString</a></td><td class=SDescription>Takes a dom node and returns its contents rendered in a string.</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#tapestry.html.getElementAsString" id=link24 onMouseOver="ShowTip(event, 'tt12', 'link24')" onMouseOut="HideTip('tt12')">getElementAsString</a></td><td class=SDescription>Takes a dom node and returns itself and its contents rendered in a string.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div>
-
-<div class="CGroup CTopic"><h3 class=CTitle><a name="tapestry.html.Functions"></a>Functions</h3></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.html.getContentAsString"></a>getContentAsString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>getContentAsString:function(</td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Takes a dom node and returns its contents rendered in a string.</p><p class=CParagraph>The resulting string does NOT contain any markup (or attributes) of the given node - only child nodes are rendered and returned.Content</p><p class=CParagraph>Implementation Note: This function tries to make use of browser specific features (the xml attribute of nodes in IE and the XMLSerializer object in Mozilla derivatives) - if those fails, a generic implementation is used that is guaranteed to work in all platforms.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>The dom node.&nbsp; Returns:</td></tr></table><p class=CParagraph>The string representation of the given node&rsquo;s contents.</p></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.html.getElementAsString"></a>getElementAsString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>getElementAsString:function(</td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Takes a dom node and returns itself and its contents rendered in a string.</p><p class=CParagraph>Implementation Note: This function uses a generic implementation in order to generate the returned string.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>node</td><td class=CDLDescription>The dom node.&nbsp; Returns:</td></tr></table><p class=CParagraph>The string representation of the given node.</p></div></div>
-
-<div class="CClass CTopic"><h2 class=CTitle><a name="tapestry.event"></a>tapestry.<span class=HB> </span>event</h2><div class=CBody><p class=CParagraph>Utility functions that handle converting javascript event objects into a name/value pair format that can be sent to the remote server.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBody><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#tapestry.event.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#tapestry.event.buildEventProperties" id=link25 onMouseOver="ShowTip(event, 'tt13', 'link25')" onMouseOut="HideTip('tt13')">buildEventProperties</a></td><td class=SDescription>Takes an incoming browser generated event (like key/mouse events) and creates a js object holding the basic values of the event in order for it to be submitted to the server.</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#tapestry.event.buildTargetProperties" id=link26 onMouseOver="ShowTip(event, 'tt14', 'link26')" onMouseOut="HideTip('tt14')">buildTargetProperties</a></td><td class=SDescription>Generic function to build a properties object populated with relevent target data.</td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#tapestry.event.buildNodeProperties" id=link27 onMouseOver="ShowTip(event, 'tt15', 'link27')" onMouseOut="HideTip('tt15')">buildNodeProperties</a></td><td class=SDescription>Builds needed target node properties, like the node&rsquo;s id.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div>
-
-<div class="CGroup CTopic"><h3 class=CTitle><a name="tapestry.event.Functions"></a>Functions</h3></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.event.buildEventProperties"></a>buildEventProperties</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildEventProperties:function(</td><td class=PParameter nowrap>event,</td></tr><tr><td></td><td class=PParameter nowrap>props</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Takes an incoming browser generated event (like key/mouse events) and creates a js object holding the basic values of the event in order for it to be submitted to the server.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>event</td><td class=CDLDescription>The javascript event method is based on, if it isn&rsquo;t a valid browser event it will be ignored.</td></tr><tr><td class=CDLEntry>props</td><td class=CDLDescription>The existing property object to set the values on, if it doesn&rsquo;t exist one will be created.&nbsp; Returns:</td></tr></table><p class=CParagraph>The desired event properties bound to an object.&nbsp; Ie obj.target,obj.charCode, etc..</p></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.event.buildTargetProperties"></a>buildTargetProperties</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildTargetProperties:function(</td><td class=PParameter nowrap>props,</td></tr><tr><td></td><td class=PParameter nowrap>target</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Generic function to build a properties object populated with relevent target data.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>props</td><td class=CDLDescription>The object that event properties are being set on to return to the server.</td></tr><tr><td class=CDLEntry>target</td><td class=CDLDescription>The javscript Event.target object that the original event was targeted for.</td></tr></table><h4 class=CHeading>Returns</h4><p class=CParagraph>The original props object passed in, populated with any data found.</p></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.event.buildNodeProperties"></a>buildNodeProperties</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildNodeProperties:function(</td><td class=PParameter nowrap>props,</td></tr><tr><td></td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Builds needed target node properties, like the node&rsquo;s id.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>props</td><td class=CDLDescription>The object that event properties are being set on to return to the server.</td></tr><tr><td class=CDLEntry>node</td><td class=CDLDescription>The dom node specified as the Event.target in a javascript event.</td></tr></table></div></div>
-
-</div><!--Content-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>bind:function(</td><td class=PParameter nowrap>url,</td></tr><tr><td></td><td class=PParameter nowrap>content,</td></tr><tr><td></td><td class=PParameter nowrap>json</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Core XHR bind function for tapestry internals. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>error:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>exception,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Global error handling function for dojo.io.bind requests. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>load:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Global load handling function for dojo.io.bind requests. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadJson:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadContent:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>node,</td></tr><tr><td></td><td class=PParameter nowrap>element</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Used by tapestry.load when handling xml responses to iterate over the tapestry specific xml response and appropriately load all content types / perform animations / execute scripts in the proper order / etc..</div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadScriptContent:function(</td><td class=PParameter nowrap>element,</td></tr><tr><td></td><td class=PParameter nowrap>async</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Manages loading javascript content for a specific incoming xml element.</div></div><div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadScriptFromUrl:function(</td><td class=PParameter nowrap>url</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes a url string and loads the javascript it points to as a normal document head script include section. </div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>presentException:function(</td><td class=PParameter nowrap>node,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>When remote exceptions are caught on the server special xml blocks are returned to the client when the requests are initiated via async IO. </div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>cleanConnect:function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>event,</td></tr><tr><td></td><td class=PParameter nowrap>funcName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Utility used to disconnect a previously connected event/function.</div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>isServingRequests:function()</td></tr></table></blockquote>Utility used to find out if there are any ajax requests in progress.</div></div><div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>getContentAsString:function(</td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes a dom node and returns its contents rendered in a string.</div></div><div class=CToolTip id="tt12"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>getElementAsString:function(</td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes a dom node and returns itself and its contents rendered in a string.</div></div><div class=CToolTip id="tt13"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildEventProperties:function(</td><td class=PParameter nowrap>event,</td></tr><tr><td></td><td class=PParameter nowrap>props</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes an incoming browser generated event (like key/mouse events) and creates a js object holding the basic values of the event in order for it to be submitted to the server.</div></div><div class=CToolTip id="tt14"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildTargetProperties:function(</td><td class=PParameter nowrap>props,</td></tr><tr><td></td><td class=PParameter nowrap>target</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Generic function to build a properties object populated with relevent target data.</div></div><div class=CToolTip id="tt15"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildNodeProperties:function(</td><td class=PParameter nowrap>props,</td></tr><tr><td></td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Builds needed target node properties, like the node&rsquo;s id.</div></div><!--END_ND_TOOLTIPS-->
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/files/form-js.html b/tapestry/src/site/resources/jsdoc/files/form-js.html
deleted file mode 100644
index 5db303c..0000000
--- a/tapestry/src/site/resources/jsdoc/files/form-js.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<html><head><title>tapestry.form</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body id=FramedContentPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass CTopic" id=MainTopic><h1 class=CTitle><a name="tapestry.form"></a>tapestry.form</h1><div class=CBody><p class=CParagraph>Provides central handling of all client side form related logic.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBody><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#tapestry.form" >tapestry.form</a></td><td class=SDescription>Provides central handling of all client side form related logic.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#tapestry.form.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#tapestry.form.forms" >forms</a></td><td class=SDescription>Contains a reference to all registered Tapestry forms in the current document.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#tapestry.form.currentFocus" >currentFocus</a></td><td class=SDescription>Reference to form element/element id of field that should currently recieve focus, if any</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#tapestry.form.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.form.focusField" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">focusField</a></td><td class=SDescription>If possible, brings keyboard input focus to the specified field.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.form.registerForm" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">registerForm</a></td><td class=SDescription>Registers the form with the local <a href="#tapestry.form.forms" class=LProperty id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">forms</a> property so that there is a central reference of all tapestry forms.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.form.registerProfile" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">registerProfile</a></td><td class=SDescription>Registers a form validation/translation profile. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.form.clearProfiles" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">clearProfiles</a></td><td class=SDescription>Clears any previously registered validation profiles on the specified form. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.form.setFormValidating" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">setFormValidating</a></td><td class=SDescription>If a form registered with the specified formId exists a local property will be set that causes validation to be turned on/off depending on the argument.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.form.submit" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">submit</a></td><td class=SDescription>Submits the form specified, optionally setting the submitname hidden input field to the value of submitName to let the Form component on server know which button caused the submission. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.form.cancel" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">cancel</a></td><td class=SDescription>Submits the form to the server in &ldquo;cancel&rdquo; mode, invoking any cancel listeners registered to the server side equivalent to the form passed in.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.form.refresh" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">refresh</a></td><td class=SDescription>Submits the form to the server in &ldquo;refresh&rdquo; mode, invoking any refresh listeners registered to the server side equivalent to the form passed in.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.form.submitAsync" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">submitAsync</a></td><td class=SDescription>Does almost the same thing as <a href="#tapestry.form.submit" class=LFunction id=link11 onMouseOver="ShowTip(event, 'tt7', 'link11')" onMouseOut="HideTip('tt7')">tapestry.form.submit</a>, but submits the request via XHR to the server asynchronously.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div>
-
-<div class="CGroup CTopic"><h3 class=CTitle><a name="tapestry.form.Properties"></a>Properties</h3></div>
-
-<div class="CProperty CTopic"><h3 class=CTitle><a name="tapestry.form.forms"></a>forms</h3><div class=CBody><p class=CParagraph>Contains a reference to all registered Tapestry forms in the current document.</p></div></div>
-
-<div class="CProperty CTopic"><h3 class=CTitle><a name="tapestry.form.currentFocus"></a>currentFocus</h3><div class=CBody><p class=CParagraph>Reference to form element/element id of field that should currently recieve focus, if any</p></div></div>
-
-<div class="CGroup CTopic"><h3 class=CTitle><a name="tapestry.form.Functions"></a>Functions</h3></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.form.focusField"></a>focusField</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>focusField:function(</td><td class=PParameter nowrap>field</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>If possible, brings keyboard input focus to the specified field.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>field</td><td class=CDLDescription>The field(field id) of the field to focus.</td></tr></table><h4 class=CHeading>Note</h4><p class=CParagraph>Function deprecated in favor of dojo equivalent, like dojo.html.selectInputText(node).</p></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.form.registerForm"></a>registerForm</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>registerForm:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>async,</td></tr><tr><td></td><td class=PParameter nowrap>json</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Registers the form with the local <a href="#tapestry.form.forms" class=LProperty id=link12 onMouseOver="ShowTip(event, 'tt3', 'link12')" onMouseOut="HideTip('tt3')">forms</a> property so that there is a central reference of all tapestry forms.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>id</td><td class=CDLDescription>The form(form id) to register.</td></tr><tr><td class=CDLEntry>async</td><td class=CDLDescription>Boolean, if true causes form submission to be asynchronous.</td></tr><tr><td class=CDLEntry>json</td><td class=CDLDescription>Boolean, if true causes form submission to be asyncrhronous with an expected JSON response.</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.form.registerProfile"></a>registerProfile</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>registerProfile:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>profile</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Registers a form validation/translation profile.&nbsp; There can potentially be more than one profile registered with a form.</p><p class=CParagraph>The profiles will be consulted at various points in the forms life, which currently only involves running the profile checks before form submission.&nbsp; (more points to be determined in the future)</p><h4 class=CHeading>See Also</h4><p class=CParagraph>&lt;dojo.validate.check&gt;</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>id</td><td class=CDLDescription>The form(form id) to register profile with.</td></tr><tr><td class=CDLEntry>profile</td><td class=CDLDescription>The object containing all of the validation/value constraints for the form.</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.form.clearProfiles"></a>clearProfiles</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>clearProfiles:function(</td><td class=PParameter nowrap>id</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Clears any previously registered validation profiles on the specified form.&nbsp; Normally called during XHR requests by returned JS response to ensure new validation logic coming in from potentially new form fields is accounted for.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>id</td><td class=CDLDescription>The form id to clear profiles for.</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.form.setFormValidating"></a>setFormValidating</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>setFormValidating:function(</td><td class=PParameter nowrap>formId,</td></tr><tr><td></td><td class=PParameter nowrap>validate</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>If a form registered with the specified formId exists a local property will be set that causes validation to be turned on/off depending on the argument.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>formId</td><td class=CDLDescription>The id of the form to turn validation on/off for.</td></tr><tr><td class=CDLEntry>validate</td><td class=CDLDescription>Boolean for whether or not to validate form, if not specified assumes true.</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.form.submit"></a>submit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>submit:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Submits the form specified, optionally setting the submitname hidden input field to the value of submitName to let the Form component on server know which button caused the submission.&nbsp; (For the case of submit button listeners).</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>form</td><td class=CDLDescription>The form(form id) to submit.</td></tr><tr><td class=CDLEntry>submitName</td><td class=CDLDescription>Optional submit name string to use when submitting.&nbsp; This is used to associate a form submission with a particular component, like a Submit/LinkSubmit/etc..</td></tr><tr><td class=CDLEntry>parms</td><td class=CDLDescription>Optional extra set of arguments that can control the form submission semantics such as url/async/json/etc.</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.form.cancel"></a>cancel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>cancel:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Submits the form to the server in &ldquo;cancel&rdquo; mode, invoking any cancel listeners registered to the server side equivalent to the form passed in.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>form</td><td class=CDLDescription>The form(form id) to cancel.</td></tr><tr><td class=CDLEntry>submitName</td><td class=CDLDescription>Optional submit name string to use when submitting.&nbsp; This is used to associate a form submission with a particular component, like a Submit/LinkSubmit/etc..</td></tr><tr><td class=CDLEntry>parms</td><td class=CDLDescription>Optional object parms passed through to tapestry.form.submit().</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.form.refresh"></a>refresh</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>refresh:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Submits the form to the server in &ldquo;refresh&rdquo; mode, invoking any refresh listeners registered to the server side equivalent to the form passed in.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>form</td><td class=CDLDescription>The form(form id) to refresh.</td></tr><tr><td class=CDLEntry>submitName</td><td class=CDLDescription>Optional submit name string to use when submitting.&nbsp; This is used to associate a form submission with a particular component, like a Submit/LinkSubmit/etc..</td></tr><tr><td class=CDLEntry>parms</td><td class=CDLDescription>Optional object parms passed through to tapestry.form.submit().</td></tr></table></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.form.submitAsync"></a>submitAsync</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>submitAsync:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>content,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Does almost the same thing as <a href="#tapestry.form.submit" class=LFunction id=link13 onMouseOver="ShowTip(event, 'tt7', 'link13')" onMouseOut="HideTip('tt7')">tapestry.form.submit</a>, but submits the request via XHR to the server asynchronously.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>form</td><td class=CDLDescription>The form(form id) to submit.</td></tr><tr><td class=CDLEntry>content</td><td class=CDLDescription>Optional content map, mainly used to pass in browser event parameters to form submission, but can be any typical form/value pair.</td></tr><tr><td class=CDLEntry>submitName</td><td class=CDLDescription>Optional submit name string to use when submitting.</td></tr><tr><td class=CDLEntry>parms</td><td class=CDLDescription>Optional set of extra parms that can override the defautls for this specific form submission, like the url/async/json behaviour of the submission.</td></tr></table></div></div>
-
-</div><!--Content-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>focusField:function(</td><td class=PParameter nowrap>field</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>If possible, brings keyboard input focus to the specified field.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>registerForm:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>async,</td></tr><tr><td></td><td class=PParameter nowrap>json</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Registers the form with the local forms property so that there is a central reference of all tapestry forms.</div></div><div class=CToolTip id="tt3"><div class=CProperty>Contains a reference to all registered Tapestry forms in the current document.</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>registerProfile:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>profile</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Registers a form validation/translation profile. </div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>clearProfiles:function(</td><td class=PParameter nowrap>id</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Clears any previously registered validation profiles on the specified form. </div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>setFormValidating:function(</td><td class=PParameter nowrap>formId,</td></tr><tr><td></td><td class=PParameter nowrap>validate</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>If a form registered with the specified formId exists a local property will be set that causes validation to be turned on/off depending on the argument.</div></div><div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>submit:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Submits the form specified, optionally setting the submitname hidden input field to the value of submitName to let the Form component on server know which button caused the submission. </div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>cancel:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Submits the form to the server in &ldquo;cancel&rdquo; mode, invoking any cancel listeners registered to the server side equivalent to the form passed in.</div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>refresh:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Submits the form to the server in &ldquo;refresh&rdquo; mode, invoking any refresh listeners registered to the server side equivalent to the form passed in.</div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>submitAsync:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>content,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Does almost the same thing as tapestry.form.submit, but submits the request via XHR to the server asynchronously.</div></div><!--END_ND_TOOLTIPS-->
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/files/form_compat-js.html b/tapestry/src/site/resources/jsdoc/files/form_compat-js.html
deleted file mode 100644
index 1a1b588..0000000
--- a/tapestry/src/site/resources/jsdoc/files/form_compat-js.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<html><head><title>tapestry.form_compat</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body id=FramedContentPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass CTopic" id=MainTopic><h1 class=CTitle><a name="tapestry.form_compat"></a>tapestry.<span class=HB> </span>form_compat</h1><div class=CBody><p class=CParagraph>Backwards compatibility functions, to be removed in 4.1.1 js version.&nbsp; Contains all of the functions found in the old Form.js provided by previous Tapestry releases.&nbsp; Should only be included by tapestry.form, don&rsquo;t dojo.require() this module.</p></div></div>
-
-</div><!--Content-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/files/fx-js.html b/tapestry/src/site/resources/jsdoc/files/fx-js.html
deleted file mode 100644
index 7b1bb8c..0000000
--- a/tapestry/src/site/resources/jsdoc/files/fx-js.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<html><head><title>tapestry.fx</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body id=FramedContentPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass CTopic" id=MainTopic><h1 class=CTitle><a name="tapestry.fx"></a>tapestry.fx</h1><div class=CBody><p class=CParagraph>Provides handling of effects applied before, during or after an XHR request/response.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBody><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#tapestry.fx" >tapestry.fx</a></td><td class=SDescription>Provides handling of effects applied before, during or after an XHR request/response.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#tapestry.fx.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#tapestry.fx.preEffects" >preEffects</a></td><td class=SDescription>Contains a reference to all registered pre-effects, i.e. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#tapestry.fx.postEffects" >postEffects</a></td><td class=SDescription>Contains a reference to all registered post-effects, i.e. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#tapestry.fx.ajaxStatusAction" >ajaxStatusAction</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#tapestry.fx.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.fx.attachPreEffect" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">attachPreEffect</a></td><td class=SDescription>Schedules the execution of an effect when the specified link is clicked (and thus an XHR request begins).</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.fx.attachPostEffect" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">attachPostEffect</a></td><td class=SDescription>Schedules the execution of an effect when the specified content is returned through an XHR response.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#tapestry.fx.removeAll" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">removeAll</a></td><td class=SDescription>Removes all registered effects (preEffects and postEffects).</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#tapestry.fx.attachAjaxStatus" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">attachAjaxStatus</a></td><td class=SDescription>Allows specifying a dom node that will be shown or hidden while ajax requests are in progress or have finished. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div>
-
-<div class="CGroup CTopic"><h3 class=CTitle><a name="tapestry.fx.Properties"></a>Properties</h3></div>
-
-<div class="CProperty CTopic"><h3 class=CTitle><a name="tapestry.fx.preEffects"></a>preEffects</h3><div class=CBody><p class=CParagraph>Contains a reference to all registered pre-effects, i.e. effects that are executed before an XHR request.</p></div></div>
-
-<div class="CProperty CTopic"><h3 class=CTitle><a name="tapestry.fx.postEffects"></a>postEffects</h3><div class=CBody><p class=CParagraph>Contains a reference to all registered post-effects, i.e. effects that are executed when new content arrives through an XHR response.</p></div></div>
-
-<div class="CProperty CTopic"><h3 class=CTitle><a name="tapestry.fx.ajaxStatusAction"></a>ajaxStatusAction</h3></div>
-
-<div class="CGroup CTopic"><h3 class=CTitle><a name="tapestry.fx.Functions"></a>Functions</h3></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.fx.attachPreEffect"></a>attachPreEffect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachPreEffect:function(</td><td class=PParameter nowrap>triggerId,</td></tr><tr><td></td><td class=PParameter nowrap>animationFunc,</td></tr><tr><td></td><td class=PParameter nowrap>async</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Schedules the execution of an effect when the specified link is clicked (and thus an XHR request begins).</p><h4 class=CHeading>See Also</h4><p class=CParagraph><a href="#tapestry.fx.attachPostEffect" class=LFunction id=link5 onMouseOver="ShowTip(event, 'tt2', 'link5')" onMouseOut="HideTip('tt2')">tapestry.fx.attachPostEffect</a> &lt;dojo.lfx.IAnimation&gt;</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>triggerId</td><td class=CDLDescription>The clientId of the DirectLink that triggers the effect.</td></tr><tr><td class=CDLEntry>animationFunc</td><td class=CDLDescription>A function that returns the animation to execute.</td></tr><tr><td class=CDLEntry>async</td><td class=CDLDescription>Boolean for whether to execute the effect in parallel to the XHR request.&nbsp; Defaults to false, i.e. the XHR is blocked until the effect ends.</td></tr></table><h4 class=CHeading>Note</h4><p class=CParagraph>Here&rsquo;s an example usage: tapestry.fx.attachPreEffect(&ldquo;DirectLink&rdquo;, function(){return dojo.lfx.wipeOut(&ldquo;entry&rdquo;, 800, dojo.lfx.easeDefault) });</p></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.fx.attachPostEffect"></a>attachPostEffect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachPostEffect:function(</td><td class=PParameter nowrap>updateId,</td></tr><tr><td></td><td class=PParameter nowrap>animationFunc</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Schedules the execution of an effect when the specified content is returned through an XHR response.</p><h4 class=CHeading>See Also</h4><p class=CParagraph><a href="#tapestry.fx.attachPreEffect" class=LFunction id=link6 onMouseOver="ShowTip(event, 'tt1', 'link6')" onMouseOut="HideTip('tt1')">tapestry.fx.attachPreEffect</a> &lt;dojo.lfx.IAnimation&gt;</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>updateId</td><td class=CDLDescription>The id of a dom node that (when updated) triggers the effect.</td></tr><tr><td class=CDLEntry>animationFunc</td><td class=CDLDescription>A function that returns the animation to execute.</td></tr></table><h4 class=CHeading>Note</h4><p class=CParagraph>Here&rsquo;s an example usage: tapestry.fx.attachPostEffect(&ldquo;entry&rdquo;, function(){return dojo.lfx.wipeIn(&ldquo;entry&rdquo;, 1500, dojo.lfx.easeDefault) });</p></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.fx.removeAll"></a>removeAll</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>removeAll:function()</td></tr></table></blockquote><p class=CParagraph>Removes all registered effects (preEffects and postEffects).</p></div></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="tapestry.fx.attachAjaxStatus"></a>attachAjaxStatus</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachAjaxStatus:function(</td><td class=PParameter nowrap>a1</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Allows specifying a dom node that will be shown or hidden while ajax requests are in progress or have finished.&nbsp; Alternatively, one can specify a custom function which will get invoked when an ajax request starts or ends - the first argument to that function will be a boolean corresponding to wheather the status element should be showing or not.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>a1</td><td class=CDLDescription>The dom id to show - hide, or the function to invoke when ajax starts or ends.</td></tr></table></div></div>
-
-</div><!--Content-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachPreEffect:function(</td><td class=PParameter nowrap>triggerId,</td></tr><tr><td></td><td class=PParameter nowrap>animationFunc,</td></tr><tr><td></td><td class=PParameter nowrap>async</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Schedules the execution of an effect when the specified link is clicked (and thus an XHR request begins).</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachPostEffect:function(</td><td class=PParameter nowrap>updateId,</td></tr><tr><td></td><td class=PParameter nowrap>animationFunc</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Schedules the execution of an effect when the specified content is returned through an XHR response.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>removeAll:function()</td></tr></table></blockquote>Removes all registered effects (preEffects and postEffects).</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachAjaxStatus:function(</td><td class=PParameter nowrap>a1</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Allows specifying a dom node that will be shown or hidden while ajax requests are in progress or have finished. </div></div><!--END_ND_TOOLTIPS-->
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/files/widget/AlertDialog-js.html b/tapestry/src/site/resources/jsdoc/files/widget/AlertDialog-js.html
deleted file mode 100644
index 624acd9..0000000
--- a/tapestry/src/site/resources/jsdoc/files/widget/AlertDialog-js.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<html><head><title>tapestry.widget.AlertDialog</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script></head><body id=FramedContentPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CFile CTopic" id=MainTopic><h1 class=CTitle><a name="tapestry.widget.AlertDialog"></a>tapestry.<span class=HB> </span>widget.<span class=HB> </span>AlertDialog</h1><div class=CBody><p class=CParagraph>The modal dialog used to display client side validation errors / informational messages.</p><h4 class=CHeading>Inherits from</h4><p class=CParagraph>&lt;dojo.widget.Dialog&gt;</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBody><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#tapestry.widget.AlertDialog" >tapestry.<span class=HB> </span>widget.<span class=HB> </span>AlertDialog</a></td><td class=SDescription>The modal dialog used to display client side validation errors / informational messages.</td></tr><tr class="SGroup"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#postCreate" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">postCreate</a></td><td class=SDescription>Called after widget constructed.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div>
-
-<div class="CGroup CTopic"><h3 class=CTitle><a name="Functions"></a>Functions</h3></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="postCreate"></a>postCreate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>postCreate: function(</td><td class=PParameter nowrap>args,</td></tr><tr><td></td><td class=PParameter nowrap>frag,</td></tr><tr><td></td><td class=PParameter nowrap>parentComp</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p class=CParagraph>Called after widget constructed.</p></div></div>
-
-</div><!--Content-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>postCreate: function(</td><td class=PParameter nowrap>args,</td></tr><tr><td></td><td class=PParameter nowrap>frag,</td></tr><tr><td></td><td class=PParameter nowrap>parentComp</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Called after widget constructed.</div></div><!--END_ND_TOOLTIPS-->
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/files/widget/TDebugConsole-js.html b/tapestry/src/site/resources/jsdoc/files/widget/TDebugConsole-js.html
deleted file mode 100644
index f9c47ad..0000000
--- a/tapestry/src/site/resources/jsdoc/files/widget/TDebugConsole-js.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<html><head><title>tapestry.widget.TDebugConsole</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script></head><body id=FramedContentPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CFile CTopic" id=MainTopic><h1 class=CTitle><a name="tapestry.widget.TDebugConsole"></a>tapestry.<span class=HB> </span>widget.<span class=HB> </span>TDebugConsole</h1><div class=CBody><p class=CParagraph>The modal dialog used to display client side validation errors / informational messages.</p><h4 class=CHeading>Inherits from</h4><p class=CParagraph>&lt;dojo.widget.HtmlWidget&gt;</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBody><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#tapestry.widget.TDebugConsole" >tapestry.<span class=HB> </span>widget.<span class=HB> </span>TDebugConsole</a></td><td class=SDescription>The modal dialog used to display client side validation errors / informational messages.</td></tr><tr class="SGroup"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#fillInTemplate" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">fillInTemplate</a></td><td class=SDescription>Called during widget creation.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div>
-
-<div class="CGroup CTopic"><h3 class=CTitle><a name="Functions"></a>Functions</h3></div>
-
-<div class="CFunction CTopic"><h3 class=CTitle><a name="fillInTemplate"></a>fillInTemplate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>fillInTemplate:function()</td></tr></table></blockquote><h4 class=CHeading>Remarks</h4><p class=CParagraph>Called during widget creation.</p></div></div>
-
-</div><!--Content-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>fillInTemplate:function()</td></tr></table></blockquote>Called during widget creation.</div></div><!--END_ND_TOOLTIPS-->
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/index.html b/tapestry/src/site/resources/jsdoc/index.html
deleted file mode 100644
index 9c07517..0000000
--- a/tapestry/src/site/resources/jsdoc/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd"><html><head><title></title></head>
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-<frameset cols="185,*"><frame name=Menu src="menu.html"><frame name=Content src="files/core-js.html"></frameset><noframes>This documentation was designed for use with frames.  However, you can still use it by <a href="menu.html">starting from the menu page</a>.<script language=JavaScript><!--
-location.href="menu.html";
-// --></script></noframes></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/index/Classes.html b/tapestry/src/site/resources/jsdoc/index/Classes.html
deleted file mode 100644
index c487f58..0000000
--- a/tapestry/src/site/resources/jsdoc/index/Classes.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><title>Class Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body id=FramedIndexPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; C &middot; D &middot; E &middot; F &middot; G &middot; H &middot; I &middot; J &middot; K &middot; L &middot; M &middot; N &middot; O &middot; P &middot; Q &middot; R &middot; S &middot; <a href="#T">T</a> &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>tapestry</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.event" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>tapestry.<span class=HB> </span>event</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>tapestry.form</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form_compat-js.html#tapestry.form_compat" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>tapestry.<span class=HB> </span>form_compat</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>tapestry.fx</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.html" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>tapestry.html</a></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Provides the core functionality for the Tapestry javascript package libraries.</div></div><div class=CToolTip id="tt2"><div class=CClass>Utility functions that handle converting javascript event objects into a name/value pair format that can be sent to the remote server.</div></div><div class=CToolTip id="tt3"><div class=CClass>Provides central handling of all client side form related logic.</div></div><div class=CToolTip id="tt4"><div class=CClass>Backwards compatibility functions, to be removed in 4.1.1 js version. </div></div><div class=CToolTip id="tt5"><div class=CClass>Provides handling of effects applied before, during or after an XHR request/response.</div></div><div class=CToolTip id="tt6"><div class=CClass>Provides functionality related to parsing and rendering dom nodes.</div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/index/Files.html b/tapestry/src/site/resources/jsdoc/index/Files.html
deleted file mode 100644
index 4dfa869..0000000
--- a/tapestry/src/site/resources/jsdoc/index/Files.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><title>File Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body id=FramedIndexPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>File Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; C &middot; D &middot; E &middot; F &middot; G &middot; H &middot; I &middot; J &middot; K &middot; L &middot; M &middot; N &middot; O &middot; P &middot; Q &middot; R &middot; S &middot; <a href="#T">T</a> &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/widget/AlertDialog-js.html#tapestry.widget.AlertDialog" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>tapestry.<span class=HB> </span>widget.<span class=HB> </span>AlertDialog</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/widget/TDebugConsole-js.html#tapestry.widget.TDebugConsole" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>tapestry.<span class=HB> </span>widget.<span class=HB> </span>TDebugConsole</a></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFile>The modal dialog used to display client side validation errors / informational messages.</div></div><div class=CToolTip id="tt2"><div class=CFile>The modal dialog used to display client side validation errors / informational messages.</div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/index/Functions.html b/tapestry/src/site/resources/jsdoc/index/Functions.html
deleted file mode 100644
index db6f06e..0000000
--- a/tapestry/src/site/resources/jsdoc/index/Functions.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><title>Function Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body id=FramedIndexPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="#A">A</a> &middot; <a href="#B">B</a> &middot; <a href="#C">C</a> &middot; D &middot; <a href="#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="#G">G</a> &middot; H &middot; <a href="#I">I</a> &middot; J &middot; K &middot; <a href="#L">L</a> &middot; M &middot; N &middot; O &middot; <a href="#P">P</a> &middot; Q &middot; <a href="#R">R</a> &middot; <a href="#S">S</a> &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachAjaxStatus" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>attachAjaxStatus</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachPostEffect" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>attachPostEffect</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachPreEffect" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>attachPreEffect</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=IHeading><a name="B"></a>B</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.bind" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>bind</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.event.buildEventProperties" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>buildEventProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.event.buildNodeProperties" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>buildNodeProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.event.buildTargetProperties" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>buildTargetProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></td></tr><tr><td class=IHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.cancel" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>cancel</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.cleanConnect" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>cleanConnect</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.clearProfiles" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>clearProfiles</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.error" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>error</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=IHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/widget/TDebugConsole-js.html#fillInTemplate" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>fillInTemplate</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.focusField" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>focusField</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.html.getContentAsString" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>getContentAsString</a>, <span class=IParent>tapestry.html</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.html.getElementAsString" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>getElementAsString</a>, <span class=IParent>tapestry.html</span></td></tr><tr><td class=IHeading><a name="I"></a>I</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.isServingRequests" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>isServingRequests</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.load" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>load</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.loadContent" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=ISymbol>loadContent</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.loadJson" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>loadJson</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.loadScriptContent" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=ISymbol>loadScriptContent</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.loadScriptFromUrl" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=ISymbol>loadScriptFromUrl</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/widget/AlertDialog-js.html#postCreate" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=ISymbol>postCreate</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.presentException" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=ISymbol>presentException</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.refresh" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>refresh</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.registerForm" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=ISymbol>registerForm</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.registerProfile" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=ISymbol>registerProfile</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.removeAll" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=ISymbol>removeAll</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.setFormValidating" id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')" class=ISymbol>setFormValidating</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.submit" id=link29 onMouseOver="ShowTip(event, 'tt29', 'link29')" onMouseOut="HideTip('tt29')" class=ISymbol>submit</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.submitAsync" id=link30 onMouseOver="ShowTip(event, 'tt30', 'link30')" onMouseOut="HideTip('tt30')" class=ISymbol>submitAsync</a>, <span class=IParent>tapestry.form</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachAjaxStatus:function(</td><td class=PParameter nowrap>a1</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Allows specifying a dom node that will be shown or hidden while ajax requests are in progress or have finished. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachPostEffect:function(</td><td class=PParameter nowrap>updateId,</td></tr><tr><td></td><td class=PParameter nowrap>animationFunc</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Schedules the execution of an effect when the specified content is returned through an XHR response.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachPreEffect:function(</td><td class=PParameter nowrap>triggerId,</td></tr><tr><td></td><td class=PParameter nowrap>animationFunc,</td></tr><tr><td></td><td class=PParameter nowrap>async</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Schedules the execution of an effect when the specified link is clicked (and thus an XHR request begins).</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>bind:function(</td><td class=PParameter nowrap>url,</td></tr><tr><td></td><td class=PParameter nowrap>content,</td></tr><tr><td></td><td class=PParameter nowrap>json</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Core XHR bind function for tapestry internals. </div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildEventProperties:function(</td><td class=PParameter nowrap>event,</td></tr><tr><td></td><td class=PParameter nowrap>props</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes an incoming browser generated event (like key/mouse events) and creates a js object holding the basic values of the event in order for it to be submitted to the server.</div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildNodeProperties:function(</td><td class=PParameter nowrap>props,</td></tr><tr><td></td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Builds needed target node properties, like the node&rsquo;s id.</div></div><div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildTargetProperties:function(</td><td class=PParameter nowrap>props,</td></tr><tr><td></td><td class=PParameter nowrap>target</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Generic function to build a properties object populated with relevent target data.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>cancel:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Submits the form to the server in &ldquo;cancel&rdquo; mode, invoking any cancel listeners registered to the server side equivalent to the form passed in.</div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>cleanConnect:function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>event,</td></tr><tr><td></td><td class=PParameter nowrap>funcName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Utility used to disconnect a previously connected event/function.</div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>clearProfiles:function(</td><td class=PParameter nowrap>id</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Clears any previously registered validation profiles on the specified form. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>error:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>exception,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Global error handling function for dojo.io.bind requests. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt12"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>fillInTemplate:function()</td></tr></table></blockquote>Called during widget creation.</div></div><div class=CToolTip id="tt13"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>focusField:function(</td><td class=PParameter nowrap>field</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>If possible, brings keyboard input focus to the specified field.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt14"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>getContentAsString:function(</td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes a dom node and returns its contents rendered in a string.</div></div><div class=CToolTip id="tt15"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>getElementAsString:function(</td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes a dom node and returns itself and its contents rendered in a string.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt16"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>isServingRequests:function()</td></tr></table></blockquote>Utility used to find out if there are any ajax requests in progress.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt17"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>load:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Global load handling function for dojo.io.bind requests. </div></div><div class=CToolTip id="tt18"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadContent:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>node,</td></tr><tr><td></td><td class=PParameter nowrap>element</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Used by tapestry.load when handling xml responses to iterate over the tapestry specific xml response and appropriately load all content types / perform animations / execute scripts in the proper order / etc..</div></div><div class=CToolTip id="tt19"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadJson:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt20"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadScriptContent:function(</td><td class=PParameter nowrap>element,</td></tr><tr><td></td><td class=PParameter nowrap>async</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Manages loading javascript content for a specific incoming xml element.</div></div><div class=CToolTip id="tt21"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadScriptFromUrl:function(</td><td class=PParameter nowrap>url</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes a url string and loads the javascript it points to as a normal document head script include section. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt22"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>postCreate: function(</td><td class=PParameter nowrap>args,</td></tr><tr><td></td><td class=PParameter nowrap>frag,</td></tr><tr><td></td><td class=PParameter nowrap>parentComp</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Called after widget constructed.</div></div><div class=CToolTip id="tt23"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>presentException:function(</td><td class=PParameter nowrap>node,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>When remote exceptions are caught on the server special xml blocks are returned to the client when the requests are initiated via async IO. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt24"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>refresh:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Submits the form to the server in &ldquo;refresh&rdquo; mode, invoking any refresh listeners registered to the server side equivalent to the form passed in.</div></div><div class=CToolTip id="tt25"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>registerForm:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>async,</td></tr><tr><td></td><td class=PParameter nowrap>json</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Registers the form with the local forms property so that there is a central reference of all tapestry forms.</div></div><div class=CToolTip id="tt26"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>registerProfile:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>profile</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Registers a form validation/translation profile. </div></div><div class=CToolTip id="tt27"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>removeAll:function()</td></tr></table></blockquote>Removes all registered effects (preEffects and postEffects).</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt28"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>setFormValidating:function(</td><td class=PParameter nowrap>formId,</td></tr><tr><td></td><td class=PParameter nowrap>validate</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>If a form registered with the specified formId exists a local property will be set that causes validation to be turned on/off depending on the argument.</div></div><div class=CToolTip id="tt29"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>submit:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Submits the form specified, optionally setting the submitname hidden input field to the value of submitName to let the Form component on server know which button caused the submission. </div></div><div class=CToolTip id="tt30"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>submitAsync:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>content,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Does almost the same thing as tapestry.form.submit, but submits the request via XHR to the server asynchronously.</div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/index/General.html b/tapestry/src/site/resources/jsdoc/index/General.html
deleted file mode 100644
index 20fb4aa..0000000
--- a/tapestry/src/site/resources/jsdoc/index/General.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body id=FramedIndexPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="#A">A</a> &middot; <a href="#B">B</a> &middot; <a href="#C">C</a> &middot; D &middot; <a href="#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="#G">G</a> &middot; H &middot; <a href="#I">I</a> &middot; J &middot; K &middot; <a href="#L">L</a> &middot; M &middot; N &middot; O &middot; <a href="#P">P</a> &middot; Q &middot; <a href="#R">R</a> &middot; <a href="#S">S</a> &middot; <a href="#T">T</a> &middot; U &middot; <a href="#V">V</a> &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.ajaxStatusAction"  class=ISymbol>ajaxStatusAction</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachAjaxStatus" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>attachAjaxStatus</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachPostEffect" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>attachPostEffect</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachPreEffect" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>attachPreEffect</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=IHeading><a name="B"></a>B</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.bind" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>bind</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.event.buildEventProperties" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>buildEventProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.event.buildNodeProperties" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>buildNodeProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.event.buildTargetProperties" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>buildTargetProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></td></tr><tr><td class=IHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.cancel" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>cancel</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.cleanConnect" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>cleanConnect</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.clearProfiles" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>clearProfiles</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.currentFocus" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>currentFocus</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.error" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>error</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=IHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/widget/TDebugConsole-js.html#fillInTemplate" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>fillInTemplate</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.focusField" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>focusField</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.forms" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>forms</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>Functions</span><div class=ISubIndex><span class=IParent>Global</span><div class=ISubIndex><a href="../files/widget/AlertDialog-js.html#Functions"  class=IFile>widget/<span class=HB> </span>AlertDialog.js</a><a href="../files/widget/TDebugConsole-js.html#Functions"  class=IFile>widget/<span class=HB> </span>TDebugConsole.js</a></div><a href="../files/core-js.html#tapestry.Functions"  class=IParent>tapestry</a><a href="../files/core-js.html#tapestry.event.Functions"  class=IParent>tapestry.<span class=HB> </span>event</a><a href="../files/form-js.html#tapestry.form.Functions"  class=IParent>tapestry.form</a><a href="../files/fx-js.html#tapestry.fx.Functions"  class=IParent>tapestry.fx</a><a href="../files/core-js.html#tapestry.html.Functions"  class=IParent>tapestry.html</a></div></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.html.getContentAsString" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>getContentAsString</a>, <span class=IParent>tapestry.html</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.html.getElementAsString" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>getElementAsString</a>, <span class=IParent>tapestry.html</span></td></tr><tr><td class=IHeading><a name="I"></a>I</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.isServingRequests" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=ISymbol>isServingRequests</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.load" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>load</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.loadContent" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=ISymbol>loadContent</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.loadJson" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=ISymbol>loadJson</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.loadScriptContent" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=ISymbol>loadScriptContent</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.loadScriptFromUrl" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=ISymbol>loadScriptFromUrl</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/widget/AlertDialog-js.html#postCreate" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>postCreate</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.postEffects" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=ISymbol>postEffects</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.preEffects" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=ISymbol>preEffects</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.presentException" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=ISymbol>presentException</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>Properties</span><div class=ISubIndex><a href="../files/core-js.html#tapestry.Properties"  class=IParent>tapestry</a><a href="../files/form-js.html#tapestry.form.Properties"  class=IParent>tapestry.form</a><a href="../files/fx-js.html#tapestry.fx.Properties"  class=IParent>tapestry.fx</a></div></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.refresh" id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')" class=ISymbol>refresh</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.registerForm" id=link29 onMouseOver="ShowTip(event, 'tt29', 'link29')" onMouseOut="HideTip('tt29')" class=ISymbol>registerForm</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.registerProfile" id=link30 onMouseOver="ShowTip(event, 'tt30', 'link30')" onMouseOut="HideTip('tt30')" class=ISymbol>registerProfile</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.removeAll" id=link31 onMouseOver="ShowTip(event, 'tt31', 'link31')" onMouseOut="HideTip('tt31')" class=ISymbol>removeAll</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.requestEncoding" id=link32 onMouseOver="ShowTip(event, 'tt32', 'link32')" onMouseOut="HideTip('tt32')" class=ISymbol>requestEncoding</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.setFormValidating" id=link33 onMouseOver="ShowTip(event, 'tt33', 'link33')" onMouseOut="HideTip('tt33')" class=ISymbol>setFormValidating</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.submit" id=link34 onMouseOver="ShowTip(event, 'tt34', 'link34')" onMouseOut="HideTip('tt34')" class=ISymbol>submit</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.submitAsync" id=link35 onMouseOver="ShowTip(event, 'tt35', 'link35')" onMouseOut="HideTip('tt35')" class=ISymbol>submitAsync</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=IHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry" id=link36 onMouseOver="ShowTip(event, 'tt36', 'link36')" onMouseOut="HideTip('tt36')" class=ISymbol>tapestry</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.event" id=link37 onMouseOver="ShowTip(event, 'tt37', 'link37')" onMouseOut="HideTip('tt37')" class=ISymbol>tapestry.<span class=HB> </span>event</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form" id=link38 onMouseOver="ShowTip(event, 'tt38', 'link38')" onMouseOut="HideTip('tt38')" class=ISymbol>tapestry.form</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form_compat-js.html#tapestry.form_compat" id=link39 onMouseOver="ShowTip(event, 'tt39', 'link39')" onMouseOut="HideTip('tt39')" class=ISymbol>tapestry.<span class=HB> </span>form_compat</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx" id=link40 onMouseOver="ShowTip(event, 'tt40', 'link40')" onMouseOut="HideTip('tt40')" class=ISymbol>tapestry.fx</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.html" id=link41 onMouseOver="ShowTip(event, 'tt41', 'link41')" onMouseOut="HideTip('tt41')" class=ISymbol>tapestry.html</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/widget/AlertDialog-js.html#tapestry.widget.AlertDialog" id=link42 onMouseOver="ShowTip(event, 'tt42', 'link42')" onMouseOut="HideTip('tt42')" class=ISymbol>tapestry.<span class=HB> </span>widget.<span class=HB> </span>AlertDialog</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/widget/TDebugConsole-js.html#tapestry.widget.TDebugConsole" id=link43 onMouseOver="ShowTip(event, 'tt43', 'link43')" onMouseOut="HideTip('tt43')" class=ISymbol>tapestry.<span class=HB> </span>widget.<span class=HB> </span>TDebugConsole</a></td></tr><tr><td class=IHeading><a name="V"></a>V</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.version" id=link44 onMouseOver="ShowTip(event, 'tt44', 'link44')" onMouseOut="HideTip('tt44')" class=ISymbol>version</a>, <span class=IParent>tapestry</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachAjaxStatus:function(</td><td class=PParameter nowrap>a1</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Allows specifying a dom node that will be shown or hidden while ajax requests are in progress or have finished. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachPostEffect:function(</td><td class=PParameter nowrap>updateId,</td></tr><tr><td></td><td class=PParameter nowrap>animationFunc</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Schedules the execution of an effect when the specified content is returned through an XHR response.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>attachPreEffect:function(</td><td class=PParameter nowrap>triggerId,</td></tr><tr><td></td><td class=PParameter nowrap>animationFunc,</td></tr><tr><td></td><td class=PParameter nowrap>async</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Schedules the execution of an effect when the specified link is clicked (and thus an XHR request begins).</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>bind:function(</td><td class=PParameter nowrap>url,</td></tr><tr><td></td><td class=PParameter nowrap>content,</td></tr><tr><td></td><td class=PParameter nowrap>json</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Core XHR bind function for tapestry internals. </div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildEventProperties:function(</td><td class=PParameter nowrap>event,</td></tr><tr><td></td><td class=PParameter nowrap>props</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes an incoming browser generated event (like key/mouse events) and creates a js object holding the basic values of the event in order for it to be submitted to the server.</div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildNodeProperties:function(</td><td class=PParameter nowrap>props,</td></tr><tr><td></td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Builds needed target node properties, like the node&rsquo;s id.</div></div><div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>buildTargetProperties:function(</td><td class=PParameter nowrap>props,</td></tr><tr><td></td><td class=PParameter nowrap>target</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Generic function to build a properties object populated with relevent target data.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>cancel:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Submits the form to the server in &ldquo;cancel&rdquo; mode, invoking any cancel listeners registered to the server side equivalent to the form passed in.</div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>cleanConnect:function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>event,</td></tr><tr><td></td><td class=PParameter nowrap>funcName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Utility used to disconnect a previously connected event/function.</div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>clearProfiles:function(</td><td class=PParameter nowrap>id</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Clears any previously registered validation profiles on the specified form. </div></div><div class=CToolTip id="tt11"><div class=CProperty>Reference to form element/element id of field that should currently recieve focus, if any</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt12"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>error:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>exception,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Global error handling function for dojo.io.bind requests. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt13"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>fillInTemplate:function()</td></tr></table></blockquote>Called during widget creation.</div></div><div class=CToolTip id="tt14"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>focusField:function(</td><td class=PParameter nowrap>field</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>If possible, brings keyboard input focus to the specified field.</div></div><div class=CToolTip id="tt15"><div class=CProperty>Contains a reference to all registered Tapestry forms in the current document.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt16"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>getContentAsString:function(</td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes a dom node and returns its contents rendered in a string.</div></div><div class=CToolTip id="tt17"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>getElementAsString:function(</td><td class=PParameter nowrap>node</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes a dom node and returns itself and its contents rendered in a string.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt18"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>isServingRequests:function()</td></tr></table></blockquote>Utility used to find out if there are any ajax requests in progress.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt19"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>load:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Global load handling function for dojo.io.bind requests. </div></div><div class=CToolTip id="tt20"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadContent:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>node,</td></tr><tr><td></td><td class=PParameter nowrap>element</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Used by tapestry.load when handling xml responses to iterate over the tapestry specific xml response and appropriately load all content types / perform animations / execute scripts in the proper order / etc..</div></div><div class=CToolTip id="tt21"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadJson:function(</td><td class=PParameter nowrap>type,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>http,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote></div></div><div class=CToolTip id="tt22"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadScriptContent:function(</td><td class=PParameter nowrap>element,</td></tr><tr><td></td><td class=PParameter nowrap>async</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Manages loading javascript content for a specific incoming xml element.</div></div><div class=CToolTip id="tt23"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>loadScriptFromUrl:function(</td><td class=PParameter nowrap>url</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Takes a url string and loads the javascript it points to as a normal document head script include section. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt24"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>postCreate: function(</td><td class=PParameter nowrap>args,</td></tr><tr><td></td><td class=PParameter nowrap>frag,</td></tr><tr><td></td><td class=PParameter nowrap>parentComp</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Called after widget constructed.</div></div><div class=CToolTip id="tt25"><div class=CProperty>Contains a reference to all registered post-effects, i.e. </div></div><div class=CToolTip id="tt26"><div class=CProperty>Contains a reference to all registered pre-effects, i.e. </div></div><div class=CToolTip id="tt27"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>presentException:function(</td><td class=PParameter nowrap>node,</td></tr><tr><td></td><td class=PParameter nowrap>kwArgs</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>When remote exceptions are caught on the server special xml blocks are returned to the client when the requests are initiated via async IO. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt28"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>refresh:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Submits the form to the server in &ldquo;refresh&rdquo; mode, invoking any refresh listeners registered to the server side equivalent to the form passed in.</div></div><div class=CToolTip id="tt29"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>registerForm:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>async,</td></tr><tr><td></td><td class=PParameter nowrap>json</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Registers the form with the local forms property so that there is a central reference of all tapestry forms.</div></div><div class=CToolTip id="tt30"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>registerProfile:function(</td><td class=PParameter nowrap>id,</td></tr><tr><td></td><td class=PParameter nowrap>profile</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Registers a form validation/translation profile. </div></div><div class=CToolTip id="tt31"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>removeAll:function()</td></tr></table></blockquote>Removes all registered effects (preEffects and postEffects).</div></div><div class=CToolTip id="tt32"><div class=CProperty>Defines the encoding that will be used in all Tapestry initiated XHR requests to encode URL or form data. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt33"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>setFormValidating:function(</td><td class=PParameter nowrap>formId,</td></tr><tr><td></td><td class=PParameter nowrap>validate</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>If a form registered with the specified formId exists a local property will be set that causes validation to be turned on/off depending on the argument.</div></div><div class=CToolTip id="tt34"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>submit:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Submits the form specified, optionally setting the submitname hidden input field to the value of submitName to let the Form component on server know which button caused the submission. </div></div><div class=CToolTip id="tt35"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>submitAsync:function(</td><td class=PParameter nowrap>form,</td></tr><tr><td></td><td class=PParameter nowrap>content,</td></tr><tr><td></td><td class=PParameter nowrap>submitName,</td></tr><tr><td></td><td class=PParameter nowrap>parms</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Does almost the same thing as tapestry.form.submit, but submits the request via XHR to the server asynchronously.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt36"><div class=CClass>Provides the core functionality for the Tapestry javascript package libraries.</div></div><div class=CToolTip id="tt37"><div class=CClass>Utility functions that handle converting javascript event objects into a name/value pair format that can be sent to the remote server.</div></div><div class=CToolTip id="tt38"><div class=CClass>Provides central handling of all client side form related logic.</div></div><div class=CToolTip id="tt39"><div class=CClass>Backwards compatibility functions, to be removed in 4.1.1 js version. </div></div><div class=CToolTip id="tt40"><div class=CClass>Provides handling of effects applied before, during or after an XHR request/response.</div></div><div class=CToolTip id="tt41"><div class=CClass>Provides functionality related to parsing and rendering dom nodes.</div></div><div class=CToolTip id="tt42"><div class=CFile>The modal dialog used to display client side validation errors / informational messages.</div></div><div class=CToolTip id="tt43"><div class=CFile>The modal dialog used to display client side validation errors / informational messages.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt44"><div class=CProperty>The current client side library version, usually matching the current java library version. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/index/Properties.html b/tapestry/src/site/resources/jsdoc/index/Properties.html
deleted file mode 100644
index 1a855e5..0000000
--- a/tapestry/src/site/resources/jsdoc/index/Properties.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body id=FramedIndexPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="#A">A</a> &middot; B &middot; <a href="#C">C</a> &middot; D &middot; E &middot; <a href="#F">F</a> &middot; G &middot; H &middot; I &middot; J &middot; K &middot; L &middot; M &middot; N &middot; O &middot; <a href="#P">P</a> &middot; Q &middot; <a href="#R">R</a> &middot; S &middot; T &middot; U &middot; <a href="#V">V</a> &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.ajaxStatusAction"  class=ISymbol>ajaxStatusAction</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=IHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.currentFocus" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>currentFocus</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=IHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/form-js.html#tapestry.form.forms" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>forms</a>, <span class=IParent>tapestry.form</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.postEffects" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>postEffects</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/fx-js.html#tapestry.fx.preEffects" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>preEffects</a>, <span class=IParent>tapestry.fx</span></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.requestEncoding" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>requestEncoding</a>, <span class=IParent>tapestry</span></td></tr><tr><td class=IHeading><a name="V"></a>V</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/core-js.html#tapestry.version" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>version</a>, <span class=IParent>tapestry</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty>Reference to form element/element id of field that should currently recieve focus, if any</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt2"><div class=CProperty>Contains a reference to all registered Tapestry forms in the current document.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt3"><div class=CProperty>Contains a reference to all registered post-effects, i.e. </div></div><div class=CToolTip id="tt4"><div class=CProperty>Contains a reference to all registered pre-effects, i.e. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt5"><div class=CProperty>Defines the encoding that will be used in all Tapestry initiated XHR requests to encode URL or form data. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt6"><div class=CProperty>The current client side library version, usually matching the current java library version. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/javascript/main.js b/tapestry/src/site/resources/jsdoc/javascript/main.js
deleted file mode 100644
index 30ef06e..0000000
--- a/tapestry/src/site/resources/jsdoc/javascript/main.js
+++ /dev/null
@@ -1,801 +0,0 @@
-// This file is part of Natural Docs, which is Copyright (C) 2003-2005 Greg Valure
-// Natural Docs is licensed under the GPL
-
-
-//
-//  Browser Styles
-// ____________________________________________________________________________
-
-var agt=navigator.userAgent.toLowerCase();
-var browserType;
-var browserVer;
-
-if (agt.indexOf("opera") != -1)
-    {
-    browserType = "Opera";
-
-    if (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1)
-        {  browserVer = "Opera7";  }
-    else if (agt.indexOf("opera 8") != -1 || agt.indexOf("opera/8") != -1)
-        {  browserVer = "Opera8";  }
-    else if (agt.indexOf("opera 9") != -1 || agt.indexOf("opera/9") != -1)
-        {  browserVer = "Opera9";  }
-    }
-
-else if (agt.indexOf("khtml") != -1 || agt.indexOf("konq") != -1 || agt.indexOf("safari") != -1 || agt.indexOf("applewebkit") != -1)
-    {
-    browserType = "KHTML";
-    }
-
-else if (agt.indexOf("msie") != -1)
-    {
-    browserType = "IE";
-
-    if (agt.indexOf("msie 6") != -1)
-        {  browserVer = "IE6";  }
-    else if (agt.indexOf("msie 7") != -1)
-        {  browserVer = "IE7";  }
-    }
-
-else if (agt.indexOf("gecko") != -1)
-    {
-    browserType = "Firefox";
-
-    if (agt.indexOf("rv:1.7") != -1)
-        {  browserVer = "Firefox1";  }
-    else if (agt.indexOf("rv:1.8)") != -1 || agt.indexOf("rv:1.8.0") != -1)
-        {  browserVer = "Firefox15";  }
-    else if (agt.indexOf("rv:1.8.1") != -1)
-        {  browserVer = "Firefox2";  }
-    }
-
-
-//
-//  Support Functions
-// ____________________________________________________________________________
-
-
-function GetXPosition(item)
-    {
-    var position = 0;
-
-    if (item.offsetWidth != null)
-        {
-        while (item != document.body && item != null)
-            {
-            position += item.offsetLeft;
-            item = item.offsetParent;
-            };
-        };
-
-    return position;
-    };
-
-
-function GetYPosition(item)
-    {
-    var position = 0;
-
-    if (item.offsetWidth != null)
-        {
-        while (item != document.body && item != null)
-            {
-            position += item.offsetTop;
-            item = item.offsetParent;
-            };
-        };
-
-    return position;
-    };
-
-
-function MoveToPosition(item, x, y)
-    {
-    // Opera 5 chokes on the px extension, so it can use the Microsoft one instead.
-
-    if (item.style.left != null)
-        {
-        item.style.left = x + "px";
-        item.style.top = y + "px";
-        }
-    else if (item.style.pixelLeft != null)
-        {
-        item.style.pixelLeft = x;
-        item.style.pixelTop = y;
-        };
-    };
-
-
-//
-//  Menu
-// ____________________________________________________________________________
-
-
-function ToggleMenu(id)
-    {
-    if (!window.document.getElementById)
-        {  return;  };
-
-    var display = window.document.getElementById(id).style.display;
-
-    if (display == "none")
-        {  display = "block";  }
-    else
-        {  display = "none";  }
-
-    window.document.getElementById(id).style.display = display;
-    }
-
-
-//
-//  Tooltips
-// ____________________________________________________________________________
-
-
-var tooltipTimer = 0;
-
-function ShowTip(event, tooltipID, linkID)
-    {
-    if (tooltipTimer)
-        {  clearTimeout(tooltipTimer);  };
-
-    var docX = event.clientX + window.pageXOffset;
-    var docY = event.clientY + window.pageYOffset;
-
-    var showCommand = "ReallyShowTip('" + tooltipID + "', '" + linkID + "', " + docX + ", " + docY + ")";
-
-    tooltipTimer = setTimeout(showCommand, 1000);
-    }
-
-function ReallyShowTip(tooltipID, linkID, docX, docY)
-    {
-    tooltipTimer = 0;
-
-    var tooltip;
-    var link;
-
-    if (document.getElementById)
-        {
-        tooltip = document.getElementById(tooltipID);
-        link = document.getElementById(linkID);
-        }
-/*    else if (document.all)
-        {
-        tooltip = eval("document.all['" + tooltipID + "']");
-        link = eval("document.all['" + linkID + "']");
-        }
-*/
-    if (tooltip)
-        {
-        var left = GetXPosition(link);
-        var top = GetYPosition(link);
-        top += link.offsetHeight;
-
-
-        // The fallback method is to use the mouse X and Y relative to the document.  We use a separate if and test if its a number
-        // in case some browser snuck through the above if statement but didn't support everything.
-
-        if (!isFinite(top) || top == 0)
-            {
-            left = docX;
-            top = docY;
-            }
-
-        // Some spacing to get it out from under the cursor.
-
-        top += 10;
-
-        // Make sure the tooltip doesnt get smushed by being too close to the edge, or in some browsers, go off the edge of the
-        // page.  We do it here because Konqueror does get offsetWidth right even if it doesnt get the positioning right.
-
-        if (tooltip.offsetWidth != null)
-            {
-            var width = tooltip.offsetWidth;
-            var docWidth = document.body.clientWidth;
-
-            if (left + width > docWidth)
-                {  left = docWidth - width - 1;  }
-
-            // If there's a horizontal scroll bar we could go past zero because it's using the page width, not the window width.
-            if (left < 0)
-                {  left = 0;  };
-            }
-
-        MoveToPosition(tooltip, left, top);
-        tooltip.style.visibility = "visible";
-        }
-    }
-
-function HideTip(tooltipID)
-    {
-    if (tooltipTimer)
-        {
-        clearTimeout(tooltipTimer);
-        tooltipTimer = 0;
-        }
-
-    var tooltip;
-
-    if (document.getElementById)
-        {  tooltip = document.getElementById(tooltipID); }
-    else if (document.all)
-        {  tooltip = eval("document.all['" + tooltipID + "']");  }
-
-    if (tooltip)
-        {  tooltip.style.visibility = "hidden";  }
-    }
-
-
-//
-//  Blockquote fix for IE
-// ____________________________________________________________________________
-
-
-function NDOnLoad()
-    {
-    if (browserType == "IE")
-        {
-        var scrollboxes = document.getElementsByTagName('blockquote');
-
-        if (scrollboxes.item(0))
-            {
-            NDDoResize();
-            window.onresize=NDOnResize;
-            };
-        };
-    };
-
-
-var resizeTimer = 0;
-
-function NDOnResize()
-    {
-    if (resizeTimer != 0)
-        {  clearTimeout(resizeTimer);  };
-
-    resizeTimer = setTimeout(NDDoResize, 250);
-    };
-
-
-function NDDoResize()
-    {
-    var scrollboxes = document.getElementsByTagName('blockquote');
-
-    var i;
-    var item;
-
-    i = 0;
-    while (item = scrollboxes.item(i))
-        {
-        item.style.width = 100;
-        i++;
-        };
-
-    i = 0;
-    while (item = scrollboxes.item(i))
-        {
-        item.style.width = item.parentNode.offsetWidth;
-        i++;
-        };
-
-    clearTimeout(resizeTimer);
-    resizeTimer = 0;
-    }
-
-
-
-/* ________________________________________________________________________________________________________
-
-    Class: SearchPanel
-    ________________________________________________________________________________________________________
-
-    A class handling everything associated with the search panel.
-
-    Parameters:
-
-        name - The name of the global variable that will be storing this instance.  Is needed to be able to set timeouts.
-        mode - The mode the search is going to work in.  Pass <NaturalDocs::Builder::Base->CommandLineOption()>, so the
-                   value will be something like "HTML" or "FramedHTML".
-
-    ________________________________________________________________________________________________________
-*/
-
-
-function SearchPanel(name, mode, resultsPath)
-    {
-    if (!name || !mode || !resultsPath)
-        {  alert("Incorrect parameters to SearchPanel.");  };
-
-
-    // Group: Variables
-    // ________________________________________________________________________
-
-    /*
-        var: name
-        The name of the global variable that will be storing this instance of the class.
-    */
-    this.name = name;
-
-    /*
-        var: mode
-        The mode the search is going to work in, such as "HTML" or "FramedHTML".
-    */
-    this.mode = mode;
-
-    /*
-        var: resultsPath
-        The relative path from the current HTML page to the results page directory.
-    */
-    this.resultsPath = resultsPath;
-
-    /*
-        var: keyTimeout
-        The timeout used between a keystroke and when a search is performed.
-    */
-    this.keyTimeout = 0;
-
-    /*
-        var: keyTimeoutLength
-        The length of <keyTimeout> in thousandths of a second.
-    */
-    this.keyTimeoutLength = 500;
-
-    /*
-        var: lastSearchValue
-        The last search string executed, or an empty string if none.
-    */
-    this.lastSearchValue = "";
-
-    /*
-        var: lastResultsPage
-        The last results page.  The value is only relevant if <lastSearchValue> is set.
-    */
-    this.lastResultsPage = "";
-
-    /*
-        var: deactivateTimeout
-
-        The timeout used between when a control is deactivated and when the entire panel is deactivated.  Is necessary
-        because a control may be deactivated in favor of another control in the same panel, in which case it should stay
-        active.
-    */
-    this.deactivateTimout = 0;
-
-    /*
-        var: deactivateTimeoutLength
-        The length of <deactivateTimeout> in thousandths of a second.
-    */
-    this.deactivateTimeoutLength = 200;
-
-
-
-
-    // Group: DOM Elements
-    // ________________________________________________________________________
-
-
-    // Function: DOMSearchField
-    this.DOMSearchField = function()
-        {  return document.getElementById("MSearchField");  };
-
-    // Function: DOMSearchType
-    this.DOMSearchType = function()
-        {  return document.getElementById("MSearchType");  };
-
-    // Function: DOMPopupSearchResults
-    this.DOMPopupSearchResults = function()
-        {  return document.getElementById("MSearchResults");  };
-
-    // Function: DOMPopupSearchResultsWindow
-    this.DOMPopupSearchResultsWindow = function()
-        {  return document.getElementById("MSearchResultsWindow");  };
-
-    // Function: DOMSearchPanel
-    this.DOMSearchPanel = function()
-        {  return document.getElementById("MSearchPanel");  };
-
-
-
-
-    // Group: Event Handlers
-    // ________________________________________________________________________
-
-
-    /*
-        Function: OnSearchFieldFocus
-        Called when focus is added or removed from the search field.
-    */
-    this.OnSearchFieldFocus = function(isActive)
-        {
-        this.Activate(isActive);
-        };
-
-
-    /*
-        Function: OnSearchFieldChange
-        Called when the content of the search field is changed.
-    */
-    this.OnSearchFieldChange = function()
-        {
-        if (this.keyTimeout)
-            {
-            clearTimeout(this.keyTimeout);
-            this.keyTimeout = 0;
-            };
-
-        var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
-
-        if (searchValue != this.lastSearchValue)
-            {
-            if (searchValue != "")
-                {
-                this.keyTimeout = setTimeout(this.name + ".Search()", this.keyTimeoutLength);
-                }
-            else
-                {
-                if (this.mode == "HTML")
-                    {  this.DOMPopupSearchResultsWindow().style.display = "none";  };
-                this.lastSearchValue = "";
-                };
-            };
-        };
-
-
-    /*
-        Function: OnSearchTypeFocus
-        Called when focus is added or removed from the search type.
-    */
-    this.OnSearchTypeFocus = function(isActive)
-        {
-        this.Activate(isActive);
-        };
-
-
-    /*
-        Function: OnSearchTypeChange
-        Called when the search type is changed.
-    */
-    this.OnSearchTypeChange = function()
-        {
-        var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
-
-        if (searchValue != "")
-            {
-            this.Search();
-            };
-        };
-
-
-
-    // Group: Action Functions
-    // ________________________________________________________________________
-
-
-    /*
-        Function: CloseResultsWindow
-        Closes the results window.
-    */
-    this.CloseResultsWindow = function()
-        {
-        this.DOMPopupSearchResultsWindow().style.display = "none";
-        this.Activate(false, true);
-        };
-
-
-    /*
-        Function: Search
-        Performs a search.
-    */
-    this.Search = function()
-        {
-        this.keyTimeout = 0;
-
-        var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
-        var searchTopic = this.DOMSearchType().value;
-
-        var pageExtension = searchValue.substr(0,1);
-
-        if (pageExtension.match(/^[a-z]/i))
-            {  pageExtension = pageExtension.toUpperCase();  }
-        else if (pageExtension.match(/^[0-9]/))
-            {  pageExtension = 'Numbers';  }
-        else
-            {  pageExtension = "Symbols";  };
-
-        var resultsPage;
-        var resultsPageWithSearch;
-        var hasResultsPage;
-
-        // indexSectionsWithContent is defined in searchdata.js
-        if (indexSectionsWithContent[searchTopic][pageExtension] == true)
-            {
-            resultsPage = this.resultsPath + '/' + searchTopic + pageExtension + '.html';
-            resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
-            hasResultsPage = true;
-            }
-        else
-            {
-            resultsPage = this.resultsPath + '/NoResults.html';
-            resultsPageWithSearch = resultsPage;
-            hasResultsPage = false;
-            };
-
-        var resultsFrame;
-        if (this.mode == "HTML")
-            {  resultsFrame = window.frames.MSearchResults;  }
-        else if (this.mode == "FramedHTML")
-            {  resultsFrame = window.top.frames['Content'];  };
-
-
-        if (resultsPage != this.lastResultsPage ||
-
-            // Bug in IE.  If everything becomes hidden in a run, none of them will be able to be reshown in the next for some
-            // reason.  It counts the right number of results, and you can even read the display as "block" after setting it, but it
-            // just doesn't work in IE 6 or IE 7.  So if we're on the right page but the previous search had no results, reload the
-            // page anyway to get around the bug.
-            (browserType == "IE" && hasResultsPage && resultsFrame.searchResults.lastMatchCount == 0) )
-
-            {
-            resultsFrame.location.href = resultsPageWithSearch;
-            }
-
-        // So if the results page is right and there's no IE bug, reperform the search on the existing page.  We have to check if there
-        // are results because NoResults.html doesn't have any JavaScript, and it would be useless to do anything on that page even
-        // if it did.
-        else if (hasResultsPage)
-            {
-            // We need to check if this exists in case the frame is present but didn't finish loading.
-            if (resultsFrame.searchResults)
-                {  resultsFrame.searchResults.Search(searchValue);  }
-
-            // Otherwise just reload instead of waiting.
-            else
-                {  resultsFrame.location.href = resultsPageWithSearch;  };
-            };
-
-
-        var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
-
-        if (this.mode == "HTML" && domPopupSearchResultsWindow.style.display != "block")
-            {
-            var domSearchType = this.DOMSearchType();
-
-            var left = GetXPosition(domSearchType);
-            var top = GetYPosition(domSearchType) + domSearchType.offsetHeight;
-
-            MoveToPosition(domPopupSearchResultsWindow, left, top);
-            domPopupSearchResultsWindow.style.display = 'block';
-            };
-
-
-        this.lastSearchValue = searchValue;
-        this.lastResultsPage = resultsPage;
-        };
-
-
-
-    // Group: Activation Functions
-    // Functions that handle whether the entire panel is active or not.
-    // ________________________________________________________________________
-
-
-    /*
-        Function: Activate
-
-        Activates or deactivates the search panel, resetting things to their default values if necessary.  You can call this on every
-        control's OnBlur() and it will handle not deactivating the entire panel when focus is just switching between them transparently.
-
-        Parameters:
-
-            isActive - Whether you're activating or deactivating the panel.
-            ignoreDeactivateDelay - Set if you're positive the action will deactivate the panel and thus want to skip the delay.
-    */
-    this.Activate = function(isActive, ignoreDeactivateDelay)
-        {
-        // We want to ignore isActive being false while the results window is open.
-        if (isActive || (this.mode == "HTML" && this.DOMPopupSearchResultsWindow().style.display == "block"))
-            {
-            if (this.inactivateTimeout)
-                {
-                clearTimeout(this.inactivateTimeout);
-                this.inactivateTimeout = 0;
-                };
-
-            this.DOMSearchPanel().className = 'MSearchPanelActive';
-
-            var searchField = this.DOMSearchField();
-
-            if (searchField.value == 'Search')
-                 {  searchField.value = "";  }
-            }
-        else if (!ignoreDeactivateDelay)
-            {
-            this.inactivateTimeout = setTimeout(this.name + ".InactivateAfterTimeout()", this.inactivateTimeoutLength);
-            }
-        else
-            {
-            this.InactivateAfterTimeout();
-            };
-        };
-
-
-    /*
-        Function: InactivateAfterTimeout
-
-        Called by <inactivateTimeout>, which is set by <Activate()>.  Inactivation occurs on a timeout because a control may
-        receive OnBlur() when focus is really transferring to another control in the search panel.  In this case we don't want to
-        actually deactivate the panel because not only would that cause a visible flicker but it could also reset the search value.
-        So by doing it on a timeout instead, there's a short period where the second control's OnFocus() can cancel the deactivation.
-    */
-    this.InactivateAfterTimeout = function()
-        {
-        this.inactivateTimeout = 0;
-
-        this.DOMSearchPanel().className = 'MSearchPanelInactive';
-        this.DOMSearchField().value = "Search";
-        };
-    };
-
-
-
-
-/* ________________________________________________________________________________________________________
-
-   Class: SearchResults
-   _________________________________________________________________________________________________________
-
-   The class that handles everything on the search results page.
-   _________________________________________________________________________________________________________
-*/
-
-
-function SearchResults(name, mode)
-    {
-    /*
-        var: mode
-        The mode the search is going to work in, such as "HTML" or "FramedHTML".
-    */
-    this.mode = mode;
-
-    /*
-        var: lastMatchCount
-        The number of matches from the last run of <Search()>.
-    */
-    this.lastMatchCount = 0;
-
-
-    /*
-        Function: Toggle
-        Toggles the visibility of the passed element ID.
-    */
-    this.Toggle = function(id)
-        {
-        if (this.mode == "FramedHTML")
-            {  return;  };
-
-        var parentElement = document.getElementById(id);
-
-        var element = parentElement.firstChild;
-
-        while (element && element != parentElement)
-            {
-            if (element.nodeName == 'DIV' && element.className == 'ISubIndex')
-                {
-                if (element.style.display == 'block')
-                    {  element.style.display = "none";  }
-                else
-                    {  element.style.display = 'block';  }
-                };
-
-            if (element.nodeName == 'DIV' && element.hasChildNodes())
-                {  element = element.firstChild;  }
-            else if (element.nextSibling)
-                {  element = element.nextSibling;  }
-            else
-                {
-                do
-                    {
-                    element = element.parentNode;
-                    }
-                while (element && element != parentElement && !element.nextSibling);
-
-                if (element && element != parentElement)
-                    {  element = element.nextSibling;  };
-                };
-            };
-        };
-
-
-    /*
-        Function: Search
-
-        Searches for the passed string.  If there is no parameter, it takes it from the URL query.
-
-        Always returns true, since other documents may try to call it and that may or may not be possible.
-    */
-    this.Search = function(search)
-        {
-        if (!search)
-            {
-            search = window.location.search;
-            search = search.substring(1);  // Remove the leading ?
-            search = unescape(search);
-            };
-
-        search = search.replace(/^ +/, "");
-        search = search.replace(/ +$/, "");
-        search = search.toLowerCase();
-
-        if (search.match(/[^a-z0-9]/)) // Just a little speedup so it doesn't have to go through the below unnecessarily.
-            {
-            search = search.replace(/\_/g, "_und");
-            search = search.replace(/\ +/gi, "_spc");
-            search = search.replace(/\~/g, "_til");
-            search = search.replace(/\!/g, "_exc");
-            search = search.replace(/\@/g, "_att");
-            search = search.replace(/\#/g, "_num");
-            search = search.replace(/\$/g, "_dol");
-            search = search.replace(/\%/g, "_pct");
-            search = search.replace(/\^/g, "_car");
-            search = search.replace(/\&/g, "_amp");
-            search = search.replace(/\*/g, "_ast");
-            search = search.replace(/\(/g, "_lpa");
-            search = search.replace(/\)/g, "_rpa");
-            search = search.replace(/\-/g, "_min");
-            search = search.replace(/\+/g, "_plu");
-            search = search.replace(/\=/g, "_equ");
-            search = search.replace(/\{/g, "_lbc");
-            search = search.replace(/\}/g, "_rbc");
-            search = search.replace(/\[/g, "_lbk");
-            search = search.replace(/\]/g, "_rbk");
-            search = search.replace(/\:/g, "_col");
-            search = search.replace(/\;/g, "_sco");
-            search = search.replace(/\"/g, "_quo");
-            search = search.replace(/\'/g, "_apo");
-            search = search.replace(/\</g, "_lan");
-            search = search.replace(/\>/g, "_ran");
-            search = search.replace(/\,/g, "_com");
-            search = search.replace(/\./g, "_per");
-            search = search.replace(/\?/g, "_que");
-            search = search.replace(/\//g, "_sla");
-            search = search.replace(/[^a-z0-9\_]i/gi, "_zzz");
-            };
-
-        var resultRows = document.getElementsByTagName("div");
-        var matches = 0;
-
-        var i = 0;
-        while (i < resultRows.length)
-            {
-            var row = resultRows.item(i);
-
-            if (row.className == "SRResult")
-                {
-                var rowMatchName = row.id.toLowerCase();
-                rowMatchName = rowMatchName.replace(/^sr\d*_/, '');
-
-                if (search.length <= rowMatchName.length && rowMatchName.substr(0, search.length) == search)
-                    {
-                    row.style.display = "block";
-                    matches++;
-                    }
-                else
-                    {  row.style.display = "none";  };
-                };
-
-            i++;
-            };
-
-        document.getElementById("Searching").style.display="none";
-
-        if (matches == 0)
-            {  document.getElementById("NoMatches").style.display="block";  }
-        else
-            {  document.getElementById("NoMatches").style.display="none";  }
-
-        this.lastMatchCount = matches;
-
-        return true;
-        };
-    };
-
diff --git a/tapestry/src/site/resources/jsdoc/javascript/searchdata.js b/tapestry/src/site/resources/jsdoc/javascript/searchdata.js
deleted file mode 100644
index 0773e71..0000000
--- a/tapestry/src/site/resources/jsdoc/javascript/searchdata.js
+++ /dev/null
@@ -1,152 +0,0 @@
-var indexSectionsWithContent = {
-   "General": {
-      "Symbols": false,
-      "Numbers": false,
-      "A": true,
-      "B": true,
-      "C": true,
-      "D": false,
-      "E": true,
-      "F": true,
-      "G": true,
-      "H": false,
-      "I": true,
-      "J": false,
-      "K": false,
-      "L": true,
-      "M": false,
-      "N": false,
-      "O": false,
-      "P": true,
-      "Q": false,
-      "R": true,
-      "S": true,
-      "T": true,
-      "U": false,
-      "V": true,
-      "W": false,
-      "X": false,
-      "Y": false,
-      "Z": false
-      },
-   "Functions": {
-      "Symbols": false,
-      "Numbers": false,
-      "A": true,
-      "B": true,
-      "C": true,
-      "D": false,
-      "E": true,
-      "F": true,
-      "G": true,
-      "H": false,
-      "I": true,
-      "J": false,
-      "K": false,
-      "L": true,
-      "M": false,
-      "N": false,
-      "O": false,
-      "P": true,
-      "Q": false,
-      "R": true,
-      "S": true,
-      "T": false,
-      "U": false,
-      "V": false,
-      "W": false,
-      "X": false,
-      "Y": false,
-      "Z": false
-      },
-   "Files": {
-      "Symbols": false,
-      "Numbers": false,
-      "A": false,
-      "B": false,
-      "C": false,
-      "D": false,
-      "E": false,
-      "F": false,
-      "G": false,
-      "H": false,
-      "I": false,
-      "J": false,
-      "K": false,
-      "L": false,
-      "M": false,
-      "N": false,
-      "O": false,
-      "P": false,
-      "Q": false,
-      "R": false,
-      "S": false,
-      "T": true,
-      "U": false,
-      "V": false,
-      "W": false,
-      "X": false,
-      "Y": false,
-      "Z": false
-      },
-   "Classes": {
-      "Symbols": false,
-      "Numbers": false,
-      "A": false,
-      "B": false,
-      "C": false,
-      "D": false,
-      "E": false,
-      "F": false,
-      "G": false,
-      "H": false,
-      "I": false,
-      "J": false,
-      "K": false,
-      "L": false,
-      "M": false,
-      "N": false,
-      "O": false,
-      "P": false,
-      "Q": false,
-      "R": false,
-      "S": false,
-      "T": true,
-      "U": false,
-      "V": false,
-      "W": false,
-      "X": false,
-      "Y": false,
-      "Z": false
-      },
-   "Properties": {
-      "Symbols": false,
-      "Numbers": false,
-      "A": true,
-      "B": false,
-      "C": true,
-      "D": false,
-      "E": false,
-      "F": true,
-      "G": false,
-      "H": false,
-      "I": false,
-      "J": false,
-      "K": false,
-      "L": false,
-      "M": false,
-      "N": false,
-      "O": false,
-      "P": true,
-      "Q": false,
-      "R": true,
-      "S": false,
-      "T": false,
-      "U": false,
-      "V": true,
-      "W": false,
-      "X": false,
-      "Y": false,
-      "Z": false
-      }
-   }
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/menu.html b/tapestry/src/site/resources/jsdoc/menu.html
deleted file mode 100644
index f3f5784..0000000
--- a/tapestry/src/site/resources/jsdoc/menu.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><title>Menu - </title><base target="Content"><link rel="stylesheet" type="text/css" href="styles/main.css"><script language=JavaScript src="javascript/main.js"></script><script language=JavaScript src="javascript/searchdata.js"></script></head><body id=FramedMenuPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Menu><div class="MFile MEntry"><a href="files/core-js.html">tapestry</a></div><div class="MFile MEntry"><a href="files/form-js.html">tapestry.form</a></div><div class="MFile MEntry"><a href="files/form_compat-js.html">tapestry.<span class=HB> </span>form_compat</a></div><div class="MFile MEntry"><a href="files/fx-js.html">tapestry.fx</a></div><div class="MFile MEntry"><a href="files/widget/AlertDialog-js.html">tapestry.<span class=HB> </span>widget.<span class=HB> </span>AlertDialog</a></div><div class="MFile MEntry"><a href="files/widget/TDebugConsole-js.html">tapestry.<span class=HB> </span>widget.<span class=HB> </span>TDebugConsole</a></div><div class="MGroup MEntry"><a href="javascript:ToggleMenu('MGroupContent1')" target="_self">Index</a><div class=MGroupContent id=MGroupContent1><div class="MIndex MEntry"><a href="index/General.html">Everything</a></div><div class="MIndex MEntry"><a href="index/Classes.html">Classes</a></div><div class="MIndex MEntry"><a href="index/Files.html">Files</a></div><div class="MIndex MEntry"><a href="index/Functions.html">Functions</a></div><div class="MIndex MEntry"><a href="index/Properties.html">Properties</a></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "FramedHTML", "search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Properties">Properties</option></select></div></div><!--Menu-->
-
-
-<div id=Footer><p><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></p></div><!--Footer-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/ClassesT.html b/tapestry/src/site/resources/jsdoc/search/ClassesT.html
deleted file mode 100644
index d36ea36..0000000
--- a/tapestry/src/site/resources/jsdoc/search/ClassesT.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tapestry><div class=IEntry><a href="../files/core-js.html#tapestry" class=ISymbol>tapestry</a></div></div><div class=SRResult id=SR_tapestry_perevent><div class=IEntry><a href="../files/core-js.html#tapestry.event" class=ISymbol>tapestry.<span class=HB> </span>event</a></div></div><div class=SRResult id=SR_tapestry_perform><div class=IEntry><a href="../files/form-js.html#tapestry.form" class=ISymbol>tapestry.form</a></div></div><div class=SRResult id=SR_tapestry_perform_undcompat><div class=IEntry><a href="../files/form_compat-js.html#tapestry.form_compat" class=ISymbol>tapestry.<span class=HB> </span>form_compat</a></div></div><div class=SRResult id=SR_tapestry_perfx><div class=IEntry><a href="../files/fx-js.html#tapestry.fx" class=ISymbol>tapestry.fx</a></div></div><div class=SRResult id=SR_tapestry_perhtml><div class=IEntry><a href="../files/core-js.html#tapestry.html" class=ISymbol>tapestry.html</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FilesT.html b/tapestry/src/site/resources/jsdoc/search/FilesT.html
deleted file mode 100644
index fbed87f..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FilesT.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tapestry_perwidget_perAlertDialog><div class=IEntry><a href="../files/widget/AlertDialog-js.html#tapestry.widget.AlertDialog" class=ISymbol>tapestry.<span class=HB> </span>widget.<span class=HB> </span>AlertDialog</a></div></div><div class=SRResult id=SR_tapestry_perwidget_perTDebugConsole><div class=IEntry><a href="../files/widget/TDebugConsole-js.html#tapestry.widget.TDebugConsole" class=ISymbol>tapestry.<span class=HB> </span>widget.<span class=HB> </span>TDebugConsole</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FunctionsA.html b/tapestry/src/site/resources/jsdoc/search/FunctionsA.html
deleted file mode 100644
index 7fe7556..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FunctionsA.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_attachAjaxStatus><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachAjaxStatus" class=ISymbol>attachAjaxStatus</a>, <span class=IParent>tapestry.fx</span></div></div><div class=SRResult id=SR_attachPostEffect><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachPostEffect" class=ISymbol>attachPostEffect</a>, <span class=IParent>tapestry.fx</span></div></div><div class=SRResult id=SR_attachPreEffect><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachPreEffect" class=ISymbol>attachPreEffect</a>, <span class=IParent>tapestry.fx</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FunctionsB.html b/tapestry/src/site/resources/jsdoc/search/FunctionsB.html
deleted file mode 100644
index e8f9158..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FunctionsB.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_bind><div class=IEntry><a href="../files/core-js.html#tapestry.bind" class=ISymbol>bind</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_buildEventProperties><div class=IEntry><a href="../files/core-js.html#tapestry.event.buildEventProperties" class=ISymbol>buildEventProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></div></div><div class=SRResult id=SR_buildNodeProperties><div class=IEntry><a href="../files/core-js.html#tapestry.event.buildNodeProperties" class=ISymbol>buildNodeProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></div></div><div class=SRResult id=SR_buildTargetProperties><div class=IEntry><a href="../files/core-js.html#tapestry.event.buildTargetProperties" class=ISymbol>buildTargetProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FunctionsC.html b/tapestry/src/site/resources/jsdoc/search/FunctionsC.html
deleted file mode 100644
index 9478d72..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FunctionsC.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_cancel><div class=IEntry><a href="../files/form-js.html#tapestry.form.cancel" class=ISymbol>cancel</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_cleanConnect><div class=IEntry><a href="../files/core-js.html#tapestry.cleanConnect" class=ISymbol>cleanConnect</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_clearProfiles><div class=IEntry><a href="../files/form-js.html#tapestry.form.clearProfiles" class=ISymbol>clearProfiles</a>, <span class=IParent>tapestry.form</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FunctionsE.html b/tapestry/src/site/resources/jsdoc/search/FunctionsE.html
deleted file mode 100644
index e29f6a0..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FunctionsE.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_error><div class=IEntry><a href="../files/core-js.html#tapestry.error" class=ISymbol>error</a>, <span class=IParent>tapestry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FunctionsF.html b/tapestry/src/site/resources/jsdoc/search/FunctionsF.html
deleted file mode 100644
index 033b999..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FunctionsF.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fillInTemplate><div class=IEntry><a href="../files/widget/TDebugConsole-js.html#fillInTemplate" class=ISymbol>fillInTemplate</a></div></div><div class=SRResult id=SR_focusField><div class=IEntry><a href="../files/form-js.html#tapestry.form.focusField" class=ISymbol>focusField</a>, <span class=IParent>tapestry.form</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FunctionsG.html b/tapestry/src/site/resources/jsdoc/search/FunctionsG.html
deleted file mode 100644
index 4da61ce..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FunctionsG.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_getContentAsString><div class=IEntry><a href="../files/core-js.html#tapestry.html.getContentAsString" class=ISymbol>getContentAsString</a>, <span class=IParent>tapestry.html</span></div></div><div class=SRResult id=SR_getElementAsString><div class=IEntry><a href="../files/core-js.html#tapestry.html.getElementAsString" class=ISymbol>getElementAsString</a>, <span class=IParent>tapestry.html</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FunctionsI.html b/tapestry/src/site/resources/jsdoc/search/FunctionsI.html
deleted file mode 100644
index ff3e77b..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FunctionsI.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_isServingRequests><div class=IEntry><a href="../files/core-js.html#tapestry.isServingRequests" class=ISymbol>isServingRequests</a>, <span class=IParent>tapestry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FunctionsL.html b/tapestry/src/site/resources/jsdoc/search/FunctionsL.html
deleted file mode 100644
index 957bc0f..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FunctionsL.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_load><div class=IEntry><a href="../files/core-js.html#tapestry.load" class=ISymbol>load</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_loadContent><div class=IEntry><a href="../files/core-js.html#tapestry.loadContent" class=ISymbol>loadContent</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_loadJson><div class=IEntry><a href="../files/core-js.html#tapestry.loadJson" class=ISymbol>loadJson</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_loadScriptContent><div class=IEntry><a href="../files/core-js.html#tapestry.loadScriptContent" class=ISymbol>loadScriptContent</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_loadScriptFromUrl><div class=IEntry><a href="../files/core-js.html#tapestry.loadScriptFromUrl" class=ISymbol>loadScriptFromUrl</a>, <span class=IParent>tapestry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FunctionsP.html b/tapestry/src/site/resources/jsdoc/search/FunctionsP.html
deleted file mode 100644
index c6bff43..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FunctionsP.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_postCreate><div class=IEntry><a href="../files/widget/AlertDialog-js.html#postCreate" class=ISymbol>postCreate</a></div></div><div class=SRResult id=SR_presentException><div class=IEntry><a href="../files/core-js.html#tapestry.presentException" class=ISymbol>presentException</a>, <span class=IParent>tapestry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FunctionsR.html b/tapestry/src/site/resources/jsdoc/search/FunctionsR.html
deleted file mode 100644
index 3b7e1da..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FunctionsR.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_refresh><div class=IEntry><a href="../files/form-js.html#tapestry.form.refresh" class=ISymbol>refresh</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_registerForm><div class=IEntry><a href="../files/form-js.html#tapestry.form.registerForm" class=ISymbol>registerForm</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_registerProfile><div class=IEntry><a href="../files/form-js.html#tapestry.form.registerProfile" class=ISymbol>registerProfile</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_removeAll><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.removeAll" class=ISymbol>removeAll</a>, <span class=IParent>tapestry.fx</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/FunctionsS.html b/tapestry/src/site/resources/jsdoc/search/FunctionsS.html
deleted file mode 100644
index 8e8c4e1..0000000
--- a/tapestry/src/site/resources/jsdoc/search/FunctionsS.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_setFormValidating><div class=IEntry><a href="../files/form-js.html#tapestry.form.setFormValidating" class=ISymbol>setFormValidating</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_submit><div class=IEntry><a href="../files/form-js.html#tapestry.form.submit" class=ISymbol>submit</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_submitAsync><div class=IEntry><a href="../files/form-js.html#tapestry.form.submitAsync" class=ISymbol>submitAsync</a>, <span class=IParent>tapestry.form</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralA.html b/tapestry/src/site/resources/jsdoc/search/GeneralA.html
deleted file mode 100644
index 0954dc2..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralA.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ajaxStatusAction><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.ajaxStatusAction" class=ISymbol>ajaxStatusAction</a>, <span class=IParent>tapestry.fx</span></div></div><div class=SRResult id=SR_attachAjaxStatus><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachAjaxStatus" class=ISymbol>attachAjaxStatus</a>, <span class=IParent>tapestry.fx</span></div></div><div class=SRResult id=SR_attachPostEffect><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachPostEffect" class=ISymbol>attachPostEffect</a>, <span class=IParent>tapestry.fx</span></div></div><div class=SRResult id=SR_attachPreEffect><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.attachPreEffect" class=ISymbol>attachPreEffect</a>, <span class=IParent>tapestry.fx</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralB.html b/tapestry/src/site/resources/jsdoc/search/GeneralB.html
deleted file mode 100644
index e8f9158..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralB.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_bind><div class=IEntry><a href="../files/core-js.html#tapestry.bind" class=ISymbol>bind</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_buildEventProperties><div class=IEntry><a href="../files/core-js.html#tapestry.event.buildEventProperties" class=ISymbol>buildEventProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></div></div><div class=SRResult id=SR_buildNodeProperties><div class=IEntry><a href="../files/core-js.html#tapestry.event.buildNodeProperties" class=ISymbol>buildNodeProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></div></div><div class=SRResult id=SR_buildTargetProperties><div class=IEntry><a href="../files/core-js.html#tapestry.event.buildTargetProperties" class=ISymbol>buildTargetProperties</a>, <span class=IParent>tapestry.<span class=HB> </span>event</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralC.html b/tapestry/src/site/resources/jsdoc/search/GeneralC.html
deleted file mode 100644
index e1de58e..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralC.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_cancel><div class=IEntry><a href="../files/form-js.html#tapestry.form.cancel" class=ISymbol>cancel</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_cleanConnect><div class=IEntry><a href="../files/core-js.html#tapestry.cleanConnect" class=ISymbol>cleanConnect</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_clearProfiles><div class=IEntry><a href="../files/form-js.html#tapestry.form.clearProfiles" class=ISymbol>clearProfiles</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_currentFocus><div class=IEntry><a href="../files/form-js.html#tapestry.form.currentFocus" class=ISymbol>currentFocus</a>, <span class=IParent>tapestry.form</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralE.html b/tapestry/src/site/resources/jsdoc/search/GeneralE.html
deleted file mode 100644
index e29f6a0..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralE.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_error><div class=IEntry><a href="../files/core-js.html#tapestry.error" class=ISymbol>error</a>, <span class=IParent>tapestry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralF.html b/tapestry/src/site/resources/jsdoc/search/GeneralF.html
deleted file mode 100644
index 4b76472..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralF.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fillInTemplate><div class=IEntry><a href="../files/widget/TDebugConsole-js.html#fillInTemplate" class=ISymbol>fillInTemplate</a></div></div><div class=SRResult id=SR_focusField><div class=IEntry><a href="../files/form-js.html#tapestry.form.focusField" class=ISymbol>focusField</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_forms><div class=IEntry><a href="../files/form-js.html#tapestry.form.forms" class=ISymbol>forms</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_Functions><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Functions')" class=ISymbol>Functions</a><div class=ISubIndex><span class=IParent>Global</span><div class=ISubIndex><a href="../files/widget/AlertDialog-js.html#Functions" class=IFile>widget/<span class=HB> </span>AlertDialog.js</a><a href="../files/widget/TDebugConsole-js.html#Functions" class=IFile>widget/<span class=HB> </span>TDebugConsole.js</a></div><a href="../files/core-js.html#tapestry.Functions" class=IParent>tapestry</a><a href="../files/core-js.html#tapestry.event.Functions" class=IParent>tapestry.<span class=HB> </span>event</a><a href="../files/form-js.html#tapestry.form.Functions" class=IParent>tapestry.form</a><a href="../files/fx-js.html#tapestry.fx.Functions" class=IParent>tapestry.fx</a><a href="../files/core-js.html#tapestry.html.Functions" class=IParent>tapestry.html</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralG.html b/tapestry/src/site/resources/jsdoc/search/GeneralG.html
deleted file mode 100644
index 4da61ce..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralG.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_getContentAsString><div class=IEntry><a href="../files/core-js.html#tapestry.html.getContentAsString" class=ISymbol>getContentAsString</a>, <span class=IParent>tapestry.html</span></div></div><div class=SRResult id=SR_getElementAsString><div class=IEntry><a href="../files/core-js.html#tapestry.html.getElementAsString" class=ISymbol>getElementAsString</a>, <span class=IParent>tapestry.html</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralI.html b/tapestry/src/site/resources/jsdoc/search/GeneralI.html
deleted file mode 100644
index ff3e77b..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralI.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_isServingRequests><div class=IEntry><a href="../files/core-js.html#tapestry.isServingRequests" class=ISymbol>isServingRequests</a>, <span class=IParent>tapestry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralL.html b/tapestry/src/site/resources/jsdoc/search/GeneralL.html
deleted file mode 100644
index 957bc0f..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralL.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_load><div class=IEntry><a href="../files/core-js.html#tapestry.load" class=ISymbol>load</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_loadContent><div class=IEntry><a href="../files/core-js.html#tapestry.loadContent" class=ISymbol>loadContent</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_loadJson><div class=IEntry><a href="../files/core-js.html#tapestry.loadJson" class=ISymbol>loadJson</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_loadScriptContent><div class=IEntry><a href="../files/core-js.html#tapestry.loadScriptContent" class=ISymbol>loadScriptContent</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_loadScriptFromUrl><div class=IEntry><a href="../files/core-js.html#tapestry.loadScriptFromUrl" class=ISymbol>loadScriptFromUrl</a>, <span class=IParent>tapestry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralP.html b/tapestry/src/site/resources/jsdoc/search/GeneralP.html
deleted file mode 100644
index 9e04492..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralP.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_postCreate><div class=IEntry><a href="../files/widget/AlertDialog-js.html#postCreate" class=ISymbol>postCreate</a></div></div><div class=SRResult id=SR_postEffects><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.postEffects" class=ISymbol>postEffects</a>, <span class=IParent>tapestry.fx</span></div></div><div class=SRResult id=SR_preEffects><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.preEffects" class=ISymbol>preEffects</a>, <span class=IParent>tapestry.fx</span></div></div><div class=SRResult id=SR_presentException><div class=IEntry><a href="../files/core-js.html#tapestry.presentException" class=ISymbol>presentException</a>, <span class=IParent>tapestry</span></div></div><div class=SRResult id=SR_Properties><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Properties')" class=ISymbol>Properties</a><div class=ISubIndex><a href="../files/core-js.html#tapestry.Properties" class=IParent>tapestry</a><a href="../files/form-js.html#tapestry.form.Properties" class=IParent>tapestry.form</a><a href="../files/fx-js.html#tapestry.fx.Properties" class=IParent>tapestry.fx</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralR.html b/tapestry/src/site/resources/jsdoc/search/GeneralR.html
deleted file mode 100644
index 3a52a00..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralR.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_refresh><div class=IEntry><a href="../files/form-js.html#tapestry.form.refresh" class=ISymbol>refresh</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_registerForm><div class=IEntry><a href="../files/form-js.html#tapestry.form.registerForm" class=ISymbol>registerForm</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_registerProfile><div class=IEntry><a href="../files/form-js.html#tapestry.form.registerProfile" class=ISymbol>registerProfile</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_removeAll><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.removeAll" class=ISymbol>removeAll</a>, <span class=IParent>tapestry.fx</span></div></div><div class=SRResult id=SR_requestEncoding><div class=IEntry><a href="../files/core-js.html#tapestry.requestEncoding" class=ISymbol>requestEncoding</a>, <span class=IParent>tapestry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralS.html b/tapestry/src/site/resources/jsdoc/search/GeneralS.html
deleted file mode 100644
index 8e8c4e1..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralS.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_setFormValidating><div class=IEntry><a href="../files/form-js.html#tapestry.form.setFormValidating" class=ISymbol>setFormValidating</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_submit><div class=IEntry><a href="../files/form-js.html#tapestry.form.submit" class=ISymbol>submit</a>, <span class=IParent>tapestry.form</span></div></div><div class=SRResult id=SR_submitAsync><div class=IEntry><a href="../files/form-js.html#tapestry.form.submitAsync" class=ISymbol>submitAsync</a>, <span class=IParent>tapestry.form</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralT.html b/tapestry/src/site/resources/jsdoc/search/GeneralT.html
deleted file mode 100644
index 907741d..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralT.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_tapestry><div class=IEntry><a href="../files/core-js.html#tapestry" class=ISymbol>tapestry</a></div></div><div class=SRResult id=SR_tapestry_perevent><div class=IEntry><a href="../files/core-js.html#tapestry.event" class=ISymbol>tapestry.<span class=HB> </span>event</a></div></div><div class=SRResult id=SR_tapestry_perform><div class=IEntry><a href="../files/form-js.html#tapestry.form" class=ISymbol>tapestry.form</a></div></div><div class=SRResult id=SR_tapestry_perform_undcompat><div class=IEntry><a href="../files/form_compat-js.html#tapestry.form_compat" class=ISymbol>tapestry.<span class=HB> </span>form_compat</a></div></div><div class=SRResult id=SR_tapestry_perfx><div class=IEntry><a href="../files/fx-js.html#tapestry.fx" class=ISymbol>tapestry.fx</a></div></div><div class=SRResult id=SR_tapestry_perhtml><div class=IEntry><a href="../files/core-js.html#tapestry.html" class=ISymbol>tapestry.html</a></div></div><div class=SRResult id=SR_tapestry_perwidget_perAlertDialog><div class=IEntry><a href="../files/widget/AlertDialog-js.html#tapestry.widget.AlertDialog" class=ISymbol>tapestry.<span class=HB> </span>widget.<span class=HB> </span>AlertDialog</a></div></div><div class=SRResult id=SR_tapestry_perwidget_perTDebugConsole><div class=IEntry><a href="../files/widget/TDebugConsole-js.html#tapestry.widget.TDebugConsole" class=ISymbol>tapestry.<span class=HB> </span>widget.<span class=HB> </span>TDebugConsole</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/GeneralV.html b/tapestry/src/site/resources/jsdoc/search/GeneralV.html
deleted file mode 100644
index fe583ac..0000000
--- a/tapestry/src/site/resources/jsdoc/search/GeneralV.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_version><div class=IEntry><a href="../files/core-js.html#tapestry.version" class=ISymbol>version</a>, <span class=IParent>tapestry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/NoResults.html b/tapestry/src/site/resources/jsdoc/search/NoResults.html
deleted file mode 100644
index 654a7a9..0000000
--- a/tapestry/src/site/resources/jsdoc/search/NoResults.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=NoMatches>No Matches</div></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/PropertiesA.html b/tapestry/src/site/resources/jsdoc/search/PropertiesA.html
deleted file mode 100644
index 3dd225d..0000000
--- a/tapestry/src/site/resources/jsdoc/search/PropertiesA.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ajaxStatusAction><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.ajaxStatusAction" class=ISymbol>ajaxStatusAction</a>, <span class=IParent>tapestry.fx</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/PropertiesC.html b/tapestry/src/site/resources/jsdoc/search/PropertiesC.html
deleted file mode 100644
index 651b714..0000000
--- a/tapestry/src/site/resources/jsdoc/search/PropertiesC.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_currentFocus><div class=IEntry><a href="../files/form-js.html#tapestry.form.currentFocus" class=ISymbol>currentFocus</a>, <span class=IParent>tapestry.form</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/PropertiesF.html b/tapestry/src/site/resources/jsdoc/search/PropertiesF.html
deleted file mode 100644
index 1c36a96..0000000
--- a/tapestry/src/site/resources/jsdoc/search/PropertiesF.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_forms><div class=IEntry><a href="../files/form-js.html#tapestry.form.forms" class=ISymbol>forms</a>, <span class=IParent>tapestry.form</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/PropertiesP.html b/tapestry/src/site/resources/jsdoc/search/PropertiesP.html
deleted file mode 100644
index 702e0fd..0000000
--- a/tapestry/src/site/resources/jsdoc/search/PropertiesP.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_postEffects><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.postEffects" class=ISymbol>postEffects</a>, <span class=IParent>tapestry.fx</span></div></div><div class=SRResult id=SR_preEffects><div class=IEntry><a href="../files/fx-js.html#tapestry.fx.preEffects" class=ISymbol>preEffects</a>, <span class=IParent>tapestry.fx</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/search/PropertiesV.html b/tapestry/src/site/resources/jsdoc/search/PropertiesV.html
deleted file mode 100644
index fe583ac..0000000
--- a/tapestry/src/site/resources/jsdoc/search/PropertiesV.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body id=FramedSearchResultsPage onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div id=" + browserType + ">");if (browserVer) {document.write("<div id=" + browserVer + ">"); }}// --></script>
-
-
-
-
-<!--  Generated by Natural Docs, version Development Release 02-10-2007 (1.35 base) -->
-<!--  http://www.naturaldocs.org  -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Index><div class=IPageTitle>Search Results</div><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_version><div class=IEntry><a href="../files/core-js.html#tapestry.version" class=ISymbol>version</a>, <span class=IParent>tapestry</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "FramedHTML");
-searchResults.Search();
---></script></div><!--Index-->
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
\ No newline at end of file
diff --git a/tapestry/src/site/resources/jsdoc/styles/main.css b/tapestry/src/site/resources/jsdoc/styles/main.css
deleted file mode 100644
index 0df35fc..0000000
--- a/tapestry/src/site/resources/jsdoc/styles/main.css
+++ /dev/null
@@ -1,755 +0,0 @@
-/*
-   IMPORTANT: If you're editing this file in the output directory of one of
-   your projects, your changes will be overwritten the next time you run
-   Natural Docs.  Instead, copy this file to your project directory, make your
-   changes, and you can use it with -s.  Even better would be to make a CSS
-   file in your project directory with only your changes, which you can then
-   use with -s [original style] [your changes].
-
-   On the other hand, if you're editing this file in the Natural Docs styles
-   directory, the changes will automatically be applied to all your projects
-   that use this style the next time Natural Docs is run on them.
-
-   This file is part of Natural Docs, which is Copyright (C) 2003-2005 Greg Valure
-   Natural Docs is licensed under the GPL
-*/
-
-body {
-    font-family: Verdana, Arial, sans-serif;
-    color: #000000;
-    margin: 0px; padding: 0px }
-
-body#ContentPage,
-body#IndexPage,
-body#FramedMenuPage {
-    background-color: #E8E8E8;
-    }
-body#FramedContentPage,
-body#FramedIndexPage {
-    background-color: #FFFFFF;
-    }
-
-
-a:link,
-a:visited { color: #900000; text-decoration: none }
-a:hover { color: #900000; text-decoration: underline }
-a:active { color: #FF0000; text-decoration: underline }
-
-td {
-    vertical-align: top }
-
-img { border: 0;  }
-
-
-/*
-    Comment out this line to use web-style paragraphs (blank line between
-    paragraphs, no indent) instead of print-style paragraphs (no blank line,
-    indented.)
-*/
-p {
-    text-indent: 5ex; margin: 0 }
-
-
-/*  Can't use something like display: none or it won't break.  */
-.HB {
-    font-size: 1px;
-    visibility: hidden;
-    }
-
-/*  Blockquotes are used as containers for things that may need to scroll.  */
-blockquote {
-    padding: 0;
-    margin: 0;
-    overflow: auto;
-    }
-
-
-#Firefox blockquote {
-    padding-bottom: .5em;
-    }
-
-/*  Turn off scrolling when printing.  */
-@media print {
-    blockquote {
-        overflow: visible;
-        }
-    #IE blockquote {
-        width: auto;
-        }
-    }
-
-
-
-#Menu {
-    font-size: 9pt;
-    padding: 10px 0 0 0;
-    }
-#ContentPage #Menu,
-#IndexPage #Menu {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 31ex;
-    }
-#ContentPage #Firefox #Menu,
-#IndexPage #Firefox #Menu {
-    width: 27ex;
-    }
-
-
-    #MTitle {
-        font-size: 16pt; font-weight: bold; font-variant: small-caps;
-        text-align: center;
-        padding: 5px 10px 15px 10px;
-        border-bottom: 1px dotted #000000;
-        margin-bottom: 15px }
-
-    #MSubTitle {
-        font-size: 9pt; font-weight: normal; font-variant: normal;
-        margin-top: 1ex; margin-bottom: 5px }
-
-
-    .MEntry a:link,
-    .MEntry a:hover,
-    .MEntry a:visited { color: #606060; margin-right: 0 }
-    .MEntry a:active { color: #A00000; margin-right: 0 }
-
-
-    .MGroup {
-        font-variant: small-caps; font-weight: bold;
-        margin: 1em 0 1em 10px }
-
-    .MGroupContent {
-        font-variant: normal; font-weight: normal }
-
-    .MGroup a:link,
-    .MGroup a:hover,
-    .MGroup a:visited { color: #545454; margin-right: 10px }
-    .MGroup a:active { color: #A00000; margin-right: 10px }
-
-
-    .MFile,
-    .MText,
-    .MLink,
-    .MIndex {
-        padding: 1px 17px 2px 10px;
-        margin: .25em 0 .25em 0 }
-
-    .MText {
-        font-size: 8pt; font-style: italic }
-
-    .MLink {
-        font-style: italic }
-
-    #MSelected {
-        color: #000000; background-color: #FFFFFF;
-        /*  Replace padding with border.  */
-        padding: 0 10px 0 10px;
-        border-width: 1px 2px 2px 0; border-style: solid; border-color: #000000;
-        margin-right: 5px }
-
-    /*  Close off the left side when its in a group.  */
-    .MGroup #MSelected {
-        padding-left: 9px; border-left-width: 1px }
-
-    /*  A treat for Mozilla users.  Blatantly non-standard.  Will be replaced with CSS 3 attributes when finalized/supported.  */
-    #Firefox #MSelected {
-        -moz-border-radius-topright: 10px;
-        -moz-border-radius-bottomright: 10px }
-    #Firefox .MGroup #MSelected {
-        -moz-border-radius-topleft: 10px;
-        -moz-border-radius-bottomleft: 10px }
-
-
-    #MSearchPanel {
-        padding: 0px 6px;
-        margin: .25em 0;
-        }
-
-
-    #MSearchField {
-        font: italic 9pt Verdana, sans-serif;
-        color: #606060;
-        background-color: #E8E8E8;
-        border: none;
-        padding: 2px 4px;
-        width: 100%;
-        }
-    /* Only Opera gets it right. */
-    #Firefox #MSearchField,
-    #IE #MSearchField {
-        width: 94%;
-        }
-
-    /* Firefox doesn't do this right in frames without #MSearchPanel added on.
-        It's presence doesn't hurt anything other browsers. */
-    #MSearchPanel.MSearchPanelInactive:hover #MSearchField {
-        background-color: #FFFFFF;
-        border: 1px solid #C0C0C0;
-        padding: 1px 3px;
-        }
-    .MSearchPanelActive #MSearchField {
-        background-color: #FFFFFF;
-        border: 1px solid #C0C0C0;
-        font-style: normal;
-        padding: 1px 3px;
-        }
-
-    #MSearchType {
-        visibility: hidden;
-        font: 8pt Verdana, sans-serif;
-        width: 98%;
-        padding: 0;
-        border: 1px solid #C0C0C0;
-        }
-    .MSearchPanelActive #MSearchType,
-    /*  As mentioned above, Firefox doesn't do this right in frames without #MSearchPanel added on. */
-    #MSearchPanel.MSearchPanelInactive:hover #MSearchType,
-    #MSearchType:focus {
-        visibility: visible;
-        color: #606060;
-        }
-    #MSearchType option#MSearchEverything {
-        font-weight: bold;
-        }
-
-    #Opera8 .MSearchPanelInactive:hover,
-    #Opera8 .MSearchPanelActive {
-        margin-left: -1px;
-        }
-
-
-    iframe#MSearchResults {
-        width: 60ex;
-        height: 15em;
-        }
-    #MSearchResultsWindow {
-        display: none;
-        position: absolute;
-        left: 0; top: 0;
-        border: 1px solid black;
-        background-color: #E8E8E8;
-        }
-    #MSearchResultsWindowClose {
-        font-weight: bold;
-        font-size: 8pt;
-        padding: 2px 5px;
-        display: block;
-        }
-    #MSearchResultsWindowClose:link,
-    #MSearchResultsWindowClose:visited {
-        color: #000000;
-        text-decoration: none;
-        }
-    #MSearchResultsWindowClose:active,
-    #MSearchResultsWindowClose:hover {
-        color: #800000;
-        text-decoration: none;
-        background-color: #F4F4F4;
-        }
-
-
-
-
-#Content {
-    padding-bottom: 15px;
-    }
-
-#ContentPage #Content {
-    border-width: 0 0 1px 1px;
-    border-style: solid;
-    border-color: #000000;
-    background-color: #FFFFFF;
-    font-size: 9pt;  /* To make 31ex match the menu's 31ex. */
-    margin-left: 31ex;
-    }
-#ContentPage #Firefox #Content {
-    margin-left: 27ex;
-    }
-
-
-
-    .CTopic {
-        font-size: 10pt;
-        margin-bottom: 3em;
-        }
-
-
-    .CTitle {
-        font-size: 12pt; font-weight: bold;
-        border-width: 0 0 1px 0; border-style: solid; border-color: #A0A0A0;
-        margin: 0 15px .5em 15px }
-
-    .CGroup .CTitle {
-        font-size: 16pt; font-variant: small-caps;
-        padding-left: 15px; padding-right: 15px;
-        border-width: 0 0 2px 0; border-color: #000000;
-        margin-left: 0; margin-right: 0 }
-
-    .CClass .CTitle,
-    .CInterface .CTitle,
-    .CDatabase .CTitle,
-    .CDatabaseTable .CTitle,
-    .CSection .CTitle {
-        font-size: 18pt;
-        color: #FFFFFF; background-color: #A0A0A0;
-        padding: 10px 15px 10px 15px;
-        border-width: 2px 0; border-color: #000000;
-        margin-left: 0; margin-right: 0 }
-
-    #MainTopic .CTitle {
-        font-size: 20pt;
-        color: #FFFFFF; background-color: #7070C0;
-        padding: 10px 15px 10px 15px;
-        border-width: 0 0 3px 0; border-color: #000000;
-        margin-left: 0; margin-right: 0 }
-
-    .CBody {
-        margin-left: 15px; margin-right: 15px }
-
-
-    .CToolTip {
-        position: absolute; visibility: hidden;
-        left: 0; top: 0;
-        background-color: #FFFFE0;
-        padding: 5px;
-        border-width: 1px 2px 2px 1px; border-style: solid; border-color: #000000;
-        font-size: 8pt;
-        }
-
-    #Opera .CToolTip {
-        max-width: 98%;
-        }
-
-    /*  Scrollbars would be useless.  */
-    .CToolTip blockquote {
-        overflow: hidden;
-        }
-    #IE6 .CToolTip blockquote {
-        overflow: visible;
-        }
-
-    .CHeading {
-        font-weight: bold; font-size: 10pt;
-        margin-top: 1.5em; margin-bottom: .5em }
-
-    .CCode {
-        font: 10pt "Courier New", Courier, monospace;
-        }
-
-    .CBulletList {
-        /*  I don't know why CBody's margin doesn't apply, but it's consistent across browsers so whatever.
-             Reapply it here as padding.  */
-        padding-left: 15px; padding-right: 15px;
-        margin: .5em 5ex .5em 5ex;
-        }
-
-    .CDescriptionList {
-        margin: .5em 5ex 0 5ex }
-
-        .CDLEntry {
-            font: 10pt "Courier New", Courier, monospace; color: #808080;
-            padding-bottom: .25em;
-            white-space: nowrap }
-
-        .CDLDescription {
-            font-size: 10pt;  /*  For browsers that don't inherit correctly, like Opera 5.  */
-            padding-bottom: .5em; padding-left: 5ex }
-
-
-    .CImage {
-        text-align: center;
-        margin: 1em 0;
-        }
-    .CImageLink {
-        color: #808080;
-        font-style: italic;
-        }
-    a.CImageLink:link,
-    a.CImageLink:visited,
-    a.CImageLink:hover { color: #808080 }
-
-    .CImageCaption {
-        font-variant: small-caps;
-        font-size: 8pt;
-        color: #808080;
-        }
-
-
-
-
-.Prototype {
-    font: 10pt "Courier New", Courier, monospace;
-    padding: 5px 3ex;
-    border-width: 1px; border-style: solid;
-    margin: 0 5ex 1.5em 5ex;
-    }
-
-    .Prototype td {
-        font-size: 10pt;
-        }
-
-    .PDefaultValue,
-    .PDefaultValuePrefix,
-    .PTypePrefix {
-        color: #8F8F8F;
-        }
-    .PTypePrefix {
-        text-align: right;
-        }
-    .PAfterParameters {
-        vertical-align: bottom;
-        }
-
-    #IE .Prototype table {
-        padding: 0;
-        }
-
-    .CFunction .Prototype {
-        background-color: #F4F4F4; border-color: #D0D0D0 }
-    .CProperty .Prototype {
-        background-color: #F4F4FF; border-color: #C0C0E8 }
-    .CVariable .Prototype {
-        background-color: #FFFFF0; border-color: #E0E0A0 }
-
-    .CDatabaseIndex .Prototype,
-    .CConstant .Prototype {
-        background-color: #D0D0D0; border-color: #000000 }
-    .CType .Prototype,
-    .CClass .Prototype,
-    .CInterface .Prototype {
-        background-color: #FAF0F0; border-color: #E0B0B0;
-        }
-    .CDatabaseTrigger .Prototype,
-    .CEvent .Prototype,
-    .CDelegate .Prototype {
-        background-color: #F0FCF0; border-color: #B8E4B8 }
-
-    .CToolTip .Prototype {
-        margin: 0 0 .5em 0;
-        white-space: nowrap;
-        }
-
-
-
-
-
-.Summary {
-    margin: 1.5em 5ex 0 5ex }
-
-    .STitle {
-        font-size: 12pt; font-weight: bold;
-        margin-bottom: .5em }
-
-
-    .SBody {
-        background-color: #FFFFF0;
-        padding: 15px;
-        border: 1px solid #C0C060 }
-
-    /* In a frame IE 6 will make them too long unless you set the width to 100%.  Without frames it will be correct without a width
-        or slightly too long (but not enough to scroll) with a width.  This arbitrary weirdness simply astounds me.  */
-    body#FramedContentPage #IE6 .SBody {
-        width: 100% }
-
-    /*  A treat for Mozilla users.  Blatantly non-standard.  Will be replaced with CSS 3 attributes when finalized/supported.  */
-    #Firefox .SBody {
-        -moz-border-radius: 20px }
-
-
-    .STable {
-        font-size: 9pt; width: 100% }
-
-    .SEntry {
-        width: 30% }
-    .SDescription {
-        width: 70% }
-
-
-    .SMarked {
-        background-color: #F8F8D8 }
-
-    .SDescription { padding-left: 2ex }
-    .SIndent1 .SEntry { padding-left: 1.5ex }   .SIndent1 .SDescription { padding-left: 3.5ex }
-    .SIndent2 .SEntry { padding-left: 3.0ex }   .SIndent2 .SDescription { padding-left: 5.0ex }
-    .SIndent3 .SEntry { padding-left: 4.5ex }   .SIndent3 .SDescription { padding-left: 6.5ex }
-    .SIndent4 .SEntry { padding-left: 6.0ex }   .SIndent4 .SDescription { padding-left: 8.0ex }
-    .SIndent5 .SEntry { padding-left: 7.5ex }   .SIndent5 .SDescription { padding-left: 9.5ex }
-
-    .SDescription a { color: #800000}
-    .SDescription a:active { color: #A00000 }
-
-    .SGroup td {
-        padding-top: .5em; padding-bottom: .25em }
-
-    .SGroup .SEntry {
-        font-weight: bold; font-variant: small-caps }
-
-    .SGroup .SEntry a { color: #800000 }
-    .SGroup .SEntry a:active { color: #F00000 }
-
-
-    .SMain td,
-    .SClass td,
-    .SDatabase td,
-    .SDatabaseTable td,
-    .SSection td {
-        font-size: 10pt;
-        padding-bottom: .25em }
-
-    .SClass td,
-    .SDatabase td,
-    .SDatabaseTable td,
-    .SSection td {
-        padding-top: 1em }
-
-    .SMain .SEntry,
-    .SClass .SEntry,
-    .SDatabase .SEntry,
-    .SDatabaseTable .SEntry,
-    .SSection .SEntry {
-        font-weight: bold;
-        }
-
-    .SMain .SEntry a,
-    .SClass .SEntry a,
-    .SDatabase .SEntry a,
-    .SDatabaseTable .SEntry a,
-    .SSection .SEntry a { color: #000000 }
-
-    .SMain .SEntry a:active,
-    .SClass .SEntry a:active,
-    .SDatabase .SEntry a:active,
-    .SDatabaseTable .SEntry a:active,
-    .SSection .SEntry a:active { color: #A00000 }
-
-
-
-
-
-.ClassHierarchy {
-    margin: 0 15px 1em 15px }
-
-    .CHEntry {
-        border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0;
-        margin-bottom: 3px;
-        padding: 2px 2ex;
-        font-size: 10pt;
-        background-color: #F4F4F4; color: #606060;
-        }
-
-    #Firefox .CHEntry {
-        -moz-border-radius: 4px;
-        }
-
-    .CHIndent0,
-    .CHIndent1,
-    .CHIndent2 {
-        float: left;
-        clear: both;
-        }
-
-    /*  Clear the float  */
-    .ClassHierarchy:after {
-        content: '.';
-        clear: both;
-        display: block;
-        height: 0;
-        visibility: hidden;
-        }
-    /*  IE doesn't support :after.  Take advantage of a bug to get the same effect.  */
-    #IE .ClassHierarchy {
-        height: 1%;
-        }
-
-    .CHIndent1 { margin-left: 3ex }
-    .CHIndent2 { margin-left: 6ex }
-
-    .CHCurrent {
-        font-weight: bold;
-        border-color: #000000;
-        color: #000000;
-        }
-
-    .CHChildNote {
-        font-style: italic;
-        font-size: 8pt;
-        }
-
-    .CHEntry a:link,
-    .CHEntry a:visited,
-    .CHEntry a:hover {
-        color: #606060;
-        }
-    .CHEntry a:active {
-        color: #800000;
-        }
-
-
-
-
-
-#Index {
-    background-color: #FFFFFF;
-    }
-
-#IndexPage #Index,
-#FramedIndexPage #Index,
-#FramedSearchResultsPage #Index {
-    padding: 15px;
-    }
-
-#IndexPage #Index {
-    border-width: 0 0 1px 1px;
-    border-style: solid;
-    border-color: #000000;
-    font-size: 9pt;  /* To make 27ex match the menu's 27ex. */
-    margin-left: 27ex;
-    }
-
-#SearchResultsPage,
-#FramedSearchResultsPage {
-    background-color: #FFFFFF;
-    }
-
-    .IPageTitle {
-        font-size: 20pt; font-weight: bold;
-        color: #FFFFFF; background-color: #7070C0;
-        padding: 10px 15px 10px 15px;
-        border-width: 0 0 3px 0; border-color: #000000; border-style: solid;
-        margin: -15px -15px 0 -15px }
-
-    #FramedSearchResultsPage .IPageTitle {
-        margin-bottom: 15px; }
-
-    .INavigationBar {
-        font-size: 10pt;
-        text-align: center;
-        background-color: #FFFFF0;
-        padding: 5px;
-        border-bottom: solid 1px black;
-        margin: 0 -15px 15px -15px;
-        }
-
-    .INavigationBar a {
-        font-weight: bold }
-
-    .IHeading {
-        font-size: 16pt; font-weight: bold;
-        padding: 2.5em 0 .5em 0;
-        text-align: center;
-        width: 3.5ex;
-        }
-    #IFirstHeading {
-        padding-top: 0;
-        }
-
-    .IEntry {
-        font-size: 10pt;
-        padding-left: 1ex;
-        }
-    #SearchResultsPage .IEntry {
-        font-size: 8pt;
-        padding: 1px 5px;
-        }
-    #SearchResultsPage #Opera9 .IEntry,
-    #FramedSearchResultsPage #Opera9 .IEntry {
-        text-align: left;
-        }
-    #FramedSearchResultsPage .IEntry {
-        padding: 0;
-        }
-
-    .ISubIndex {
-        padding-left: 3ex; padding-bottom: .5em }
-    #SearchResultsPage .ISubIndex {
-        display: none;
-        }
-
-    /*  While it may cause some entries to look like links when they aren't, I found it's much easier to read the
-         index if everything's the same color.  */
-    .ISymbol {
-        font-weight: bold; color: #900000  }
-
-    #IndexPage .ISymbolPrefix,
-    #FramedIndexPage .ISymbolPrefix {
-        font-size: 10pt;
-        text-align: right;
-        color: #C47C7C;
-        background-color: #F8F8F8;
-        border-right: 3px solid #E0E0E0;
-        border-left: 1px solid #E0E0E0;
-        padding: 0 1px 0 2px;
-        }
-    #SearchResultsPage .ISymbolPrefix,
-    #FramedSearchResultsPage .ISymbolPrefix {
-        color: #900000;
-        }
-    #SearchResultsPage .ISymbolPrefix {
-        font-size: 8pt;
-        }
-
-    #IndexPage #IFirstSymbolPrefix,
-    #FramedIndexPage #IFirstSymbolPrefix {
-        border-top: 1px solid #E0E0E0;
-        }
-    #IndexPage #ILastSymbolPrefix,
-    #FramedIndexPage #ILastSymbolPrefix {
-        border-bottom: 1px solid #E0E0E0;
-        }
-    #IndexPage #IOnlySymbolPrefix,
-    #FramedIndexPage #IOnlySymbolPrefix {
-        border-top: 1px solid #E0E0E0;
-        border-bottom: 1px solid #E0E0E0;
-        }
-
-    a.IParent,
-    a.IFile {
-        display: block;
-        }
-
-    #SearchResultsPage .SRStatus {
-        padding: 2px 5px;
-        font-size: 8pt;
-        font-style: italic;
-        }
-    #FramedSearchResultsPage .SRStatus {
-        font-size: 10pt;
-        font-style: italic;
-        }
-
-    .SRResult {
-        display: none;
-        }
-
-
-
-#Footer {
-    font-size: 8pt;
-    color: #989898;
-    text-align: right;
-    }
-
-#Footer p {
-    text-indent: 0;
-    margin-bottom: .5em;
-    }
-
-body#ContentPage #Footer,
-body#IndexPage #Footer {
-    text-align: right;
-    margin: 2px;
-    }
-
-body#FramedMenuPage #Footer {
-    text-align: center;
-    margin: 5em 10px 10px 10px;
-    padding-top: 1em;
-    border-top: 1px solid #C8C8C8;
-    }
-
-    #Footer a:link,
-    #Footer a:hover,
-    #Footer a:visited { color: #989898 }
-    #Footer a:active { color: #A00000 }
-
diff --git a/tapestry/src/site/site.xml b/tapestry/src/site/site.xml
deleted file mode 100644
index 91d00bb..0000000
--- a/tapestry/src/site/site.xml
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<project name="Tapestry">
-    <bannerLeft>
-        <name>Tapestry Web Application Framework</name>
-        <href>http://tapestry.apache.org/</href>
-        <src>images/tapestry_banner.gif</src>
-    </bannerLeft>
-    <bannerRight>
-        <name>Apache Software Foundation</name>
-        <href>http://www.apache.org</href>
-        <src>images/asf_logo_wide.gif</src>
-    </bannerRight>
-    
-    <skin>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>maven-skin</artifactId>
-        <version>1.2</version>
-    </skin>
-    
-    <publishDate format="dd MMM yyyy" />
-    
-    <body>
-        <links>
-            <item name="Tapestry" href="http://tapestry.apache.org/" />
-            <item name="Hivemind" href="http://jakarta.apache.org/hivemind/" />
-            <item name="Apache" href="http://www.apache.org/" />
-        </links>
-        
-        <head>
-            <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script>
-            <script type="text/javascript">_uacct = "UA-400821-1"; urchinTracker();</script>
-            <link rel="shortcut icon" href="http://tapestry.apache.org/tapestry4.1/favicon.ico" />
-        </head>
-        
-        <menu ref="parent" />
-        
-        <menu name="Quick Links" inherit="top">
-            <item name="Home" href="/index.html" />
-            <item name="Blog" href="http://howardlewisship.com/blog/" />
-            <item name="Download" href="http://tapestry.apache.org/tapestry4.1/download.html" />
-            <item name="Wiki" href="http://wiki.apache.org/tapestry/" />
-            <item name="FAQ" href="http://tapestry.apache.org/tapestry4.1/faq.html" />
-            <item name="Demos" href="http://tapestry.apache.org/tapestry4.1/demos.html" />
-            <item name="Release Notes" href="/release-notes.html" />
-        </menu>
-        
-        <menu name="Documentation" >
-
-            <item name="Tutorials" href="/tutorials/index.html" />
-
-            <item name="Quick Start" href="/quickstart/helloworld.html" collapse="true">
-                <item name="Hello World" href="/quickstart/helloworld.html" />
-                <item name="Direct Links" href="/quickstart/directlink.html" />
-                <item name="Forms" href="/quickstart/forms.html" />
-                <item name="Contributed" href="/quickstart/contributed.html" />
-            </item>
-
-            <item name="Users Guide" href="/usersguide/index.html" collapse="true">
-                <item name="Introduction" href="/usersguide/index.html" />
-                <item name="Templates" href="usersguide/template.html" />
-                <item name="Bindings" href="/usersguide/bindings.html" />
-                <item name="Listeners" href="/usersguide/listenermethods.html" />
-                <item name="Page Classes" href="/usersguide/page-class.html" />
-                <item name="Input Validation" href="/usersguide/validation.html" />
-                <item name="Client-Side Validation" href="/usersguide/clientside-validation.html" />
-                <item name="Creating Components" href="/usersguide/components.html" />
-                <item name="Property Injection" href="/usersguide/injection.html" />
-                <item name="Localization" href="/usersguide/localization.html" />
-                <item name="State Management" href="/usersguide/state.html" />
-                <item name="IOC (HiveMind)" href="/usersguide/hivemind.html" />
-                <item name="Friendly URLs" href="/usersguide/friendly-urls.html" />
-                <item name="Page Events" href="/usersguide/events.html" />
-                <item name="Configuration" href="/usersguide/configuration.html" />
-                <item name="Shared Properties" href="/usersguide/properties.html" />
-                <item name="Upgrading from 3.0" href="/usersguide/upgrade.html" />
-                <item name="Upgrading from 4.0" href="/usersguide/upgrade4.0.html" />
-                <item name="Specification DTD" href="/usersguide/spec.html" />
-                <item name="Script Template DTD" href="/usersguide/script.html" />
-            </item>
-            
-            <item name="Development Guide" href="/developmentguide/index.html" collapse="true">
-                <item name="Exception Pages" href="/developmentguide/exceptionpages.html" />
-                <item name="Testing" href="/developmentguide/testing.html" />
-                <item name="Rounded Corners" href="/developmentguide/hivemind/roundedcorners.html" />
-                <item name="Performance Tuning" href="/developmentguide/performancetuning.html" />
-            </item>
-            
-            <item name="XHR/DHTML Guide" href="/ajax/index.html" collapse="true">
-                <item name="Introduction" href="/ajax/index.html" />
-                <item name="Basics" href="/ajax/basics.html" />
-                <item name="Debugging" href="/ajax/debugging.html" />
-                <item name="EventListener" href="/ajax/eventlistener.html" />
-                <item name="ResponseBuilder" href="/ajax/responsebuilder.html" />
-                <item name="JSON" href="/ajax/json.html" />
-            </item>
-            
-            <item name="JavaScript Reference" href="/javascript/index.html" collapse="true">
-                <item name="JavascriptDoc" href="/jsdoc/index.html" />
-                <item name="Introduction" href="/javascript/index.html" />
-                <item name="Packaging" href="/javascript/packaging.html" />
-                <item name="Core" href="/javascript/core.html" />
-                <item name="Html" href="/javascript/html.html" />
-                <item name="Form" href="/javascript/form.html" />
-                <item name="Validation" href="/javascript/form-validation.html" />
-            </item>
-            
-            <item name="Examples" href="/exampleapps/index.html" />
-            
-        </menu>
-        
-        <menu name="Components" >
-            
-            <item name="General" href="/components/index.html" collapse="true">
-                <item name="Any" href="/components/general/any.html" />
-                <item name="Block" href="/components/general/block.html" />
-                <item name="Body" href="/components/general/body.html" />
-                <item name="Delegator" href="/components/general/delegator.html" />
-                <item name="Describe" href="/components/general/describe.html" />
-                <item name="Else" href="/components/general/else.html" />
-                <item name="ExceptionDisplay" href="/components/general/exceptiondisplay.html" />
-                <item name="For" href="/components/general/for.html" />
-                <item name="Frame" href="/components/general/frame.html" />
-                <item name="If" href="/components/general/if.html" />
-                <item name="Image" href="/components/general/image.html" />
-                <item name="Insert" href="/components/general/insert.html" />
-                <item name="InsertText" href="/components/general/inserttext.html" />
-                <item name="InvokeListener" href="/components/general/invokelistener.html" />
-                <item name="Relation" href="/components/general/relation.html" />                
-                <item name="RenderBlock" href="/components/general/renderblock.html" />
-                <item name="RenderBody" href="/components/general/renderbody.html" />
-                <item name="Script" href="/components/general/script.html" />
-                <item name="ScriptIncludes" href="/components/general/scriptincludes.html" />
-                <item name="Shell" href="/components/general/shell.html" />
-                <item name="Style" href="/components/general/style.html" />
-            </item>
-            
-            <item name="Form" href="/components/form/index.html" collapse="true">
-                <item name="Button" href="/components/form/button.html" />
-                <item name="Checkbox" href="/components/form/checkbox.html" />
-                <item name="DatePicker" href="/components/form/datepicker.html" />
-                <item name="FieldLabel" href="/components/form/fieldlabel.html" />
-                <item name="Form" href="/components/form/form.html" />
-                <item name="Hidden" href="/components/form/hidden.html" />
-                <item name="ImageSubmit" href="/components/form/imagesubmit.html" />
-                <item name="LinkSubmit" href="/components/form/linksubmit.html" />
-                <item name="Option" href="/components/form/option.html" />
-                <item name="PropertySelection" href="/components/form/propertyselection.html" />
-                <item name="Radio" href="/components/form/radio.html" />
-                <item name="RadioGroup" href="/components/form/radiogroup.html" />
-                <item name="Select" href="/components/form/select.html" />
-                <item name="Submit" href="/components/form/submit.html" />
-                <item name="TextArea" href="/components/form/textarea.html" />
-                <item name="TextField" href="/components/form/textfield.html" />
-                <item name="Upload" href="/components/form/upload.html" />
-            </item>
-            
-            <item name="Link" href="/components/link/index.html" collapse="true">
-                 <item name="DirectLink" href="/components/link/directlink.html" />
-                 <item name="ExternalLink" href="/components/link/externallink.html" />
-                 <item name="GenericLink" href="/components/link/genericlink.html" />
-                 <item name="PageLink" href="/components/link/pagelink.html" />
-                 <item name="Rollover" href="/components/link/rollover.html" />
-                 <item name="ServiceLink" href="/components/link/servicelink.html" />
-            </item>
-            
-            <item name="Dojo" href="/components/dojo/index.html" collapse="true">
-                <item name="Autocompleter" href="/components/dojo/autocompleter.html" />
-                <item name="Dialog" href="/components/dojo/dialog.html" />
-                <item name="DropdownDatePicker" href="/components/dojo/dropdowndatepicker.html" />
-                <item name="DropdownTimePicker" href="/components/dojo/dropdowntimepicker.html" />
-                <item name="GTimePicker" href="/components/dojo/gtimepicker.html" />
-                <item name="InlineEditBox" href="/components/dojo/inlineeditbox.html" />
-            </item>
-
-            <item name="script.aculo.us" href="/components/scriptaculous/index.html" collapse="true">
-                <item name="Suggest" href="/components/scriptaculous/suggest.html" />
-            </item>
-
-        </menu>
-
-        <menu name="Modules">
-            <item name="Tapestry Core" href="/tapestry-framework/index.html" />
-            <item name="Contrib Library" href="/tapestry-contrib/index.html" />
-            <item name="Annotations" href="/tapestry-annotations/index.html" />
-            <item name="Portlet Support" href="/tapestry-portlet/index.html" />
-            <item name="Examples" href="/tapestry-examples/index.html" />
-            <item name="Archetype" href="/tapestry-archetype/index.html" />
-        </menu>
-        
-        ${reports} 
-    </body>
-    
-</project>
diff --git a/tapestry/src/site/xdoc/components/dojo/autocompleter.xml b/tapestry/src/site/xdoc/components/dojo/autocompleter.xml
deleted file mode 100644
index 04b7d80..0000000
--- a/tapestry/src/site/xdoc/components/dojo/autocompleter.xml
+++ /dev/null
@@ -1,214 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-    "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Autocompleter</title>
-    </properties>
-    <body>
-
-        <section name="Autocompleter">
-
-            <p>
-                Creates form elements that allow a property of an object to be set from a drop-down
-                list.
-            </p>
-            <img src="../../images/ComponentReference/Autocompleter.png" />
-            <p>
-                Besides the fact that the list being populated is dynamically retrieved via ajax it is almost 
-                identical to the <a href="../form/propertyselection.html">PropertySelection</a> component.
-            </p>
-            <p>
-                Uses a
-                <a href="../../apidocs/org/apache/tapestry/dojo/form/IAutocompleteModel.html">
-                    IAutocompleteModel
-                </a>
-                to map between Java values that will be assigned, and textual labels that will
-                appear in the HTML response.
-            </p>
-            <p>
-                A useful property selection model is available (
-                <a
-                    href="../../apidocs/org/apache/tapestry/dojo/form/DefaultAutocompleteModel.html">
-                    DefaultAutocompleteModel
-                </a>). You can also create your own model, as illustrated in the examples below.
-            </p>
-            
-            <p>
-                <strong>
-                    See also:
-                    <a
-                        href="../../apidocs/org/apache/tapestry/dojo/form/Autocompleter.html">
-                        org.apache.tapestry.dojo.form.Autocompleter
-                    </a>
-                    ,
-                    <a href="../form/select.html">Select</a>
-                    ,
-                    <a href="../form/option.html">Option</a>
-                    ,
-                    <a href="../form/form.html">Form</a>
-                </strong>
-
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>Object</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The property to set. During rendering, this property is read, and sets
-                            the default value of the selection (if it is null, no element is
-                            selected). When the form is submitted, this property is updated based on
-                            the new selection.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>model</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/dojo/form/IAutocompleteModel.html">
-                                IAutocompleteModel
-                            </a>
-                        </td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The model provides a list of possible labels, and matches those labels
-                            against possible values that can be assigned back to the property.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Controls whether the <code>&lt;select&gt;</code> is active or not. A disabled
-                            Autocompleter does not update its value parameter. Corresponds to
-                            the "disabled" HTML attribute.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>displayName</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="../form/fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-                            
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>local</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            The autocompleter can work either in remote or in local mode. This parameter
-                            controls whether the component will contact the server for finding the matching 
-                            data, or use the values that it already contains within its html nodes.
-                            
-                            In the later case, the model parameter is used during render in order to provide all
-                            possible values. Those are are then rendered as options inside the select tag of the
-                            autocompleter.
-                        </td>
-                    </tr>                    
-                    <tr>
-                        <td>searchDelay</td>
-                        <td>long<em>(ms)</em></td>
-                        <td>no</td>
-                        <td>100 ms</td>
-                        <td>
-                            The amount of time to wait before initiating a server side search based
-                            on user input action.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>fadeTime</td>
-                        <td>long<em>(ms)</em></td>
-                        <td>no</td>
-                        <td>200 ms</td>
-                        <td>
-                            The duration of the animation used to fade away the selection list.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>maxListLength</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>8</td>
-                        <td>
-                            Maximum number of items to display in drop down list.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>name, autocomplete</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-                TODO...
-            </section>
-            
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/dojo/dialog.xml b/tapestry/src/site/xdoc/components/dojo/dialog.xml
deleted file mode 100644
index 6e8e4df..0000000
--- a/tapestry/src/site/xdoc/components/dojo/dialog.xml
+++ /dev/null
@@ -1,319 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-    "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Dialog</title>
-    </properties>
-    <body>
-
-        <section name="Dialog">
-            <p>
-                Creates a modal Dialog on the client side (of sorts). This component may prove useful for cutting down
-                on typical CRUD operations where you normally have to navigate to a lot of seperate pages to do things
-                like "edit" / "view" / or "add" something. Why make your users navigate all over the place when they
-                can do it right there? :)
-            </p>
-            
-            <p>
-                Also note that this particular component comes with two very useful methods that you can 
-                invoke in java code to hide and show the Dialog. They are aptly named <code>hide()</code> and
-                <code>show()</code>.
-            </p>
-
-            <span class="warn">
-                <strong>Warning:</strong>
-                <p>
-                    There are quite a few gotchas and special conditions you need to be aware of when using this component.  You can find them outlined
-                    as well as solutions to common problems at the bottom of this document.
-                </p>
-            </span>
-
-            <img src="../../images/ComponentReference/Dialog.png" alt="Dialog Example"/>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/dojo/html/Dialog.html">
-                        org.apache.tapestry.dojo.html.Dialog
-                    </a>
-                </strong>
-
-            </p>
-            
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>hidden</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            Whether or not the Dialog should be hidden by default. (Which is what you want in most
-                            cases.)
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>backgroundColor</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>literal:black</td>
-                        <td>
-                            The html style color to give the background of the dialog. The color given can be a literal
-                            color name or hex string such as <code>#efefef</code>. 
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>opacity</td>
-                        <td>float</td>
-                        <td>no</td>
-                        <td>0.4</td>
-                        <td>
-                            Controls how opaque the background is. This parameter is given in the form of a percent, so
-                            valid values would range from <code>0.1 - 1</code>.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>followScroll</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            Whether ot not the dialog should follow the scroll remaining centered on the browser viewport.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>closeOnBackgroundClick</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Whether ot not the dialog should close when clicking on the background.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>blockDuration</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>0</td>
-                        <td>
-                            Number of seconds for which the user cannot dismiss the dialog.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>lifeTime</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>0</td>
-                        <td>
-                            The number of seconds the dialog will be displayed before automatically disappearing.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>toggle</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>literal:fade</td>
-                        <td>
-                            The type of effect to be used on dialog show/hide. Possible values are:
-                            <code>litera:plain</code>, <code>literal:wipe</code>, <code>literal:fade</code>, <code>literal:explode</code>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>toggleDuration</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>150</td>
-                        <td>
-                            Controls how opaque the background is. This parameter is given in the form of a percent, so
-                            valid values would range from <code>0.1 - 1</code>.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Gotchas">
-                There are a few things that most poeple will need to keep in mind when using this component/client side control.
-
-                <ul>
-                    <li>
-                        <p>
-                        <b>Dialog display flickering</b> - In the typical situation of defining a simple html template definition of a Dialog - such
-                        as in:
-                        </p>
-                        <source xml:space="preserve"><![CDATA[
-<div jwcid="testDialog@Dialog" hidden="ognl:dialogHidden" >
-    <p>Sample dialog display</p>
-</div>
-]]></source>
-                        <p>
-                            With the definition given above you will inevitably get a <em>flickering</em> effect of the content within the dialog being
-                            breifly displayed before being hidden by the client side widget control.  This is simply because your html content is rendered
-                            in the browser before the client side widget has had a chance to hide it.  To be sure that you don't have flickering on your
-                            dialog content simply define a <code>style="display:none"</code> attribute on your Dialog tag:
-                        </p>
-
-                        <source xml:space="preserve"><![CDATA[
-<div jwcid="testDialog@Dialog" hidden="ognl:dialogHidden" style="display:none;">
-    <p>Sample dialog display</p>
-</div>
-]]></source>
-                    </li>
-                    <li>
-                        <p>
-                            <b>Dialog content background color</b> - By default the content you display within the dialog will have an opaque background because
-                            that is the background of the dialog itself.  If you don't want this <em>(the majoriy won't..)</em> you should define a background color
-                            and style accordingly for your content.  It is often easier to define a single css class definition for dialog content and apply it to
-                            a single outer node within the dialog like this:
-                        </p>
-                        <source xml:space="preserve"><![CDATA[
-..
-.dialog { background-color: white; width: 400px; height: 300px; }
-...
-
-<div jwcid="testDialog@Dialog" hidden="ognl:dialogHidden" style="display:none;">
-    <p class="dialog">
-        Sample dialog display
-    </p>
-</div>
-]]></source>
-                    </li>
-                    <li>
-                        <p>
-                            <b>Updating Dialog in AJAX requests</b> - This is by far the biggest gotcha,  so you'll want to read this section carefully.  Because of
-                            the way the client side widget displays/manipulates the Dialog the ultimate position your dialog html node in the overall document will not
-                            be the same as how it is initially rendered by Tapestry.  The short of it is that the client side takes your dialog html node and moves it to
-                            the very bottom of the document - regardless of what is surrounding it or any other careful semantics you have setup. ...So given a sample
-                            html template definition looking like this:
-                        </p>
-
-                        <source xml:space="preserve"><![CDATA[                 
-<body>
-
-  <div id="content">
-     <p>
-        <div jwcid="testDialog@Dialog" hidden="ognl:dialogHidden" style="display:none;">
-            <p>Sample dialog display</p>
-        </div>
-    </p>
-  </div>
-
-</body>
-]]></source>
-                        <p>..the actual placement of your dialog node will actually be more like:</p>
-
-                        <source xml:space="preserve"><![CDATA[
-<body>
-
-  <div id="content">
-     <p>
-
-    </p>
-  </div>
-
-<div id="testDialog" style="display:none;">
-  <p>Sample dialog display</p>
-</div>
-</body>
-]]></source>
-                        <p>
-                            This can cause endless hours of frustration if you don't know about its behaviour - and can get even worse with certain ajax
-                            updating semantics.  The key things to remember with doing ajax updates involving dialogs are:
-                        </p>
-                        <ul>
-                            <li>
-                                <p>
-                                    <b>Only update the dialog directly or things contained within it.</b>
-                                </p>
-                                <p>
-                                    This means that you can't do things like:
-                                </p>
-
-                                <source xml:space="preserve"><![CDATA[
-<a jwcid="@DirectLink" listener="listener:showDialog" updateComponents="dialogUpdateArea">Show Dialog</a>
-
-<div jwcid="dialogUpdateArea@Any">
-<div jwcid="testDialog@Dialog" hidden="ognl:dialogHidden" style="display:none;">
-    <p class="dialog">
-        Sample dialog display
-    </p>
-</div>
-</div>
-]]></source>
-                                <p>
-                                    The above example would have questionable results because the actual client side dom node of the dialog will be detached
-                                    and not actually be a child of the <code>dialogUpdateArea</code> Any component you are trying to update.  The good news is
-                                    that updating a Dialog directly or children within it should work fine, so rewriting the example above to the more correct version
-                                    will yield better results:
-                                </p>
-
-                                <source xml:space="preserve"><![CDATA[
-<a jwcid="@DirectLink" listener="listener:showDialog" updateComponents="testDialog">Show Dialog</a>
-
-<div jwcid="testDialog@Dialog" hidden="ognl:dialogHidden" style="display:none;">
-    <p class="dialog">
-        Sample dialog display
-    </p>
-</div>
-]]></source>
-                            </li>
-                            <li>
-                                <p>
-                                    <b>Don't wrap portions of a <a href="../form/form.html">Form</a>.</b>
-                                </p>
-                                <p>
-                                    Because the Dialog client dom node is always detached you are almost assured to have problems if you try and take
-                                    a small portion of a form and wrap it within a dialog.  The form input controls will be moved to the bottom of your
-                                    document - outside the scope of the containing form - along with all the other content the Dialog normally moves.  This will
-                                    likely result in your form breaking and / or just not submitting the input values contained within the dialog.
-                                </p>
-                                <p>
-                                    For this situation the only real answer is that you need to break the form up in to two separate forms - one that you will nest
-                                    within the Dialog itself and the other being your main outer form. 
-                                </p>
-                            </li>
-                        </ul>
-                    </li>
-                </ul>
-            </subsection>
-            
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/dojo/dropdowndatepicker.xml b/tapestry/src/site/xdoc/components/dojo/dropdowndatepicker.xml
deleted file mode 100644
index 45219f9..0000000
--- a/tapestry/src/site/xdoc/components/dojo/dropdowndatepicker.xml
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>DropdownDatePicker</title>
-    </properties>
-    <body>
-
-        <section name="DropdownDatePicker">
-
-            <p>
-                Provides a form Date field component for selecting dates. DatePicker presents a drop
-                down monthly calendar for users to select dates from.
-            </p>
-            <p>
-                JavaScript must be enabled in the client browser to use the drop down calendar. If
-                JavaScript is not enabled users can still enter a date value in the HTML text field.
-            </p>
-            
-            <img src="../../images/ComponentReference/DropdownDatePicker.png" />
-            
-            <p>
-                <strong>
-                    See also:
-                    <a href="dropdowntimepicker.html">DropdownTimePicker</a>
-                    ,
-                    <a href="../form/datepicker.html">DatePicker</a>
-                </strong>
-
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>Object</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The date value. Take care to ensure date time values are 'normalized'
-                            before performing any millisec based comparison or equality operations.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Controls whether the date field and calendar button is active or not.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>displayName</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="../form/fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-                            
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>translator</td>
-                        <td>
-                            <a
-                                href="../../tapestry/apidocs/org/apache/tapestry/form/translator/Translator.html">
-                                Translator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>translator:date,pattern=dd MMM yyyy</td>
-                        <td>
-                            The translator to use when displaying and parsing the date.
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>iconAlt</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>literal:Select a Date</td>
-                        <td>
-                           The textual name given to the date picking icon before the image is loaded.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>displayWeeks</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>6</td>
-                        <td>
-                            Number of weeks to display, default is 6.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>adjustWeeks</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, weekly size of calendar changes to accomodate the month. If false (the default), 42 day format is used.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>startDate</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            First available date in the calendar set. If specified then no date earlier than startDate will be selectable.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>endDate</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Last available date in the calendar set. If specified then no date later than endDate will be selectable.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>weekStartsOn</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>0</td>
-                        <td>
-                            Adjusts the first day of the week 0==Sunday..6==Saturday.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>staticDisplay</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Disables all incremental controls, must pick a date in the current display. Default is false.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>name, autocomplete</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-                TODO...
-            </section>
-            
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/dojo/dropdowntimepicker.xml b/tapestry/src/site/xdoc/components/dojo/dropdowntimepicker.xml
deleted file mode 100644
index 70cf024..0000000
--- a/tapestry/src/site/xdoc/components/dojo/dropdowntimepicker.xml
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>DropdownTimePicker</title>
-    </properties>
-    <body>
-
-        <section name="DropdownTimePicker">
-
-            <p>
-                Provides a form Date field component for selecting <em>times</em>. A drop down selection
-                of time values is displayed, optionally specifying am/pm.
-            </p>
-            <p>
-                JavaScript must be enabled in the client browser to use the drop down calendar. If
-                JavaScript is not enabled users can still enter a date value in the HTML text field.
-            </p>
-            
-            <img src="../../images/ComponentReference/DropdownTimePicker.png" />
-            
-            <p>
-                <strong>
-                    See also:
-                    <a href="dropdowndatepicker.html">DropdownDatePicker</a>
-                    ,
-                    <a href="../form/datepicker.html">DatePicker</a>
-                </strong>
-
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>Object</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The data value. Take care to ensure date time values are 'normalized'
-                            before performing any millisec based comparison or equality operations.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Controls whether the date field and calendar button is active or not.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>displayName</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="../form/fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-                            
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>translator</td>
-                        <td>
-                            <a
-                                href="../../tapestry/apidocs/org/apache/tapestry/form/translator/Translator.html">
-                                Translator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>translator:date,pattern=hh:mm a</td>
-                        <td>
-                            The translator to use when displaying and parsing the time.
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>iconAlt</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>literal:Select a Time</td>
-                        <td>
-                           The textual name given to the date picking icon before the image is loaded.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>name, autocomplete</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-                TODO...
-            </section>
-            
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/dojo/gtimepicker.xml b/tapestry/src/site/xdoc/components/dojo/gtimepicker.xml
deleted file mode 100644
index d78125f..0000000
--- a/tapestry/src/site/xdoc/components/dojo/gtimepicker.xml
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2006 The Apache Software Foundation
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>DropdownTimePicker</title>
-    </properties>
-    <body>
-
-        <section name="GTimePicker">
-
-            <p>
-                Provides a form Date field component for selecting <em>time</em> values. A drop down selection
-                of time values are displayed in half hour segments. (48 total)  The 'G' stands for Google as the
-                control was largely based around the <a href="http://www.google.com/calendar/">Google Calendar</a> time
-                input javascript widget.
-            </p>
-            <p>
-                JavaScript must be enabled in the client browser to use the drop down picker. If
-                JavaScript is not enabled users can still enter a date value in the HTML text field.
-            </p>
-
-            <img src="../../images/ComponentReference/GTimePicker.png" />
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="dropdowntimepicker.html">DropdownTimePicker</a>
-                    ,
-                    <a href="dropdowndatepicker.html">DropdownDatePicker</a>
-                    ,
-                    <a href="../form/datepicker.html">DatePicker</a>
-                </strong>
-
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>Object</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The data value. Take care to ensure date time values are 'normalized'
-                            before performing any millisec based comparison or equality operations as the date
-                            portion of the translated object will likely be the current day.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Controls whether the input field is active or not.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>displayName</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="../form/fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>translator</td>
-                        <td>
-                            <a
-                                href="../../tapestry/apidocs/org/apache/tapestry/form/translator/Translator.html">
-                                Translator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>translator:date,pattern=h:mm a</td>
-                        <td>
-                            The translator to use when displaying and parsing the time.
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>iconAlt</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>literal:Select a Time</td>
-                        <td>
-                           The textual name given to the date picking icon before the image is loaded.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>name, autocomplete, type</em>
-                </p>
-
-            </section>
-
-            <section name="CSS Styling">
-                <p>
-                    You will need to define a couple css class definitions in order to have your time picker displayed properly.  The image displayed
-                    of the picker at the top of this page was rendered using the css definitions of:
-                </p>
-
-<source xml:space="preserve"><![CDATA[
-.dropdownCombobox {
-    background: #ffffff;
-    border: 1px solid #545454;
-}
-
-.dropdownOption {
-    font-family: arial;
-    font-size: 0.8em;
-    padding: 0.1em 0 0.1em 0.2em;
-    cursor:hand;
-    cursor:pointer;
-}
-
-.optionHover {
-    background: cornflowerblue;
-    color: #ffffff;
-}
-]]></source>
-            </section>
-
-            <section name="Examples">
-                TODO...
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/dojo/index.xml b/tapestry/src/site/xdoc/components/dojo/index.xml
deleted file mode 100644
index cec935d..0000000
--- a/tapestry/src/site/xdoc/components/dojo/index.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Dojo Components</title>
-    </properties>
-    <body>
-        <section name="Dojo Components">
-            <p>
-            <img src="../../images/small-dojo-logo.png" alt="Dojo Toolkit" style="float:right" />
-                This set of components wraps/extends/relies on the <a href="http://dojotoolkit.org">Dojo</a>
-                toolkit to provide ajax / dhtml enhancenced behavior.
-            </p>
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/dojo/inlineeditbox.xml b/tapestry/src/site/xdoc/components/dojo/inlineeditbox.xml
deleted file mode 100644
index 481046c..0000000
--- a/tapestry/src/site/xdoc/components/dojo/inlineeditbox.xml
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>InlineEditBox</title>
-    </properties>
-    <body>
-
-        <section name="InlineEditBox">
-
-            <p>
-                Manages a single string value that can be edited "inline" in either text or textarea mode.
-            </p>
-
-            <img src="../../images/ComponentReference/InlineEditBox.png" />
-
-            <img src="../../images/ComponentReference/InlineEditBox-editing.png" />
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>String</td>
-                        <td>yes</td>
-                        <td> </td>
-                        <td>
-                            The string property to manage. This will be dynamically updated with any changes made by
-                            someone editing the value "inline" in the browser.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>listener</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            Specifies an object that is notified when the inline change is made,  which is
-                            typically a listener method of its container (for example, listeners.<em>method</em>).
-
-                            <br /><br />
-                            <span class="warn">
-                                <strong>Warning:</strong>
-                                <p>
-                                    Because of the way the client side control works for this widget you will <em>not</em> be able to make an
-                                    <code>updateComponents</code> call from your listener method when a change is made.  
-                                </p>
-                                <p>
-                                    If you would like a slightly more flexible way to get notified of changes AND be able to update other components
-                                    asynchronously you should use an <code>@EventListener(events = "onSave", targets="projName")</code> annotation instead.
-                                </p>
-                            </span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>parameters</td>
-                        <td>
-                            Object or
-                            <br />
-
-                            Object[] or
-                            <br />
-                            List
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            <p>
-                                An array of objects to be encoded into the URL. These parameters
-                                will be decoded when the inline change is triggered.
-                            </p>
-
-                            <p>
-                                In a web application built onto of Enterprise JavaBeans, the context
-                                is often the primary key of some Entity bean; typically such keys
-                                are Strings or Integers.
-                            </p>
-                            <p>
-                                A listener method can retrieve the parameters three ways:
-                                <br />
-                                parameters are declared in the method itself, e.g. - listenerMethod(
-                                <em>parameters</em>
-                                )
-                                <br />
-                                parameters are declared along with the IRequestCycle, e.g. -
-                                listenerMethod(IRequestCycle cycle,
-                                <em>parameters</em>
-                                )
-
-                                <br />
-                                or through the request cycle, e.g. - listenerMethod(IReuqestCycle
-                                cycle), using IRequestCycle.getListenerParameters()
-                            </p>
-                            <p>
-                                Prior to release 2.2, the parameters were always type String. They
-                                may now be of any type; type will be maintained when the parameters
-                                are later retrieved by a listener. See
-                                <a href="../../apidocs/org/apache/tapestry/util/io/SqueezeAdaptor.html">
-                                    SqueezeAdaptor
-                                </a>
-                                for more details.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>stateful</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            If true (the default), then the component requires an active (i.e.,
-                            non-new) HttpSession when triggered. Failing that, it throws a
-                            <a href="../../apidocs/org/apache/tapestry/StaleLinkException.html">
-                                StaleLinkException
-                            </a>
-                            . If false, then no check is necessary. The latter works well with links
-                            that encode all necessary state inside the URL itself.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>mode</td>
-                        <td>
-                            One of [text,textarea].
-                        </td>
-                        <td>no</td>
-                        <td>literal:text</td>
-                        <td>
-                            Defines the editing mode that will be displayed when editing the value.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Controls whether the component is active or not. A disabled
-                            InlineEditBox that isn't currently being edited will simply not allow editing
-                            when clicking on it. If the edit box is already being used when it is disable (like with
-                            an ajax request update) the editable area will be "greyed" out using the native browser
-                            controls for disabling form input.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>minWidth</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>100</td>
-                        <td>
-                            The minimum display width for the editable input/textarea control in "pixels".
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>minHeight</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>200</td>
-                        <td>
-                            The minimum display height for the editable input/textarea control in "pixels".
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>doFade</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Whether the animation transition from editing -> normal mode should be a fade. If
-                            false (the default) - the animation sequence will be a simple highlight effect.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-                TODO...
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/button.xml b/tapestry/src/site/xdoc/components/form/button.xml
deleted file mode 100644
index ae59d67..0000000
--- a/tapestry/src/site/xdoc/components/form/button.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Button</title>
-    </properties>
-    <body>
-
-        <section name="Button">
-            <p>
-                Provides a HTML form button element <code>&lt;button&gt;</code> for attaching
-                JavaScript onclick event handlers.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="form.html">Form</a>,
-                    <a href="../general/script.html">Script</a>,
-                    <a href="submit.html">Submit</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>lable</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The label put on the button (this becomes the HTML value attribute).
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If set to true, the button will be disabled (will not respond to the
-                            mouse); the browser should provide a "greyed out" appearance.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>name, type</em>
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/checkbox.xml b/tapestry/src/site/xdoc/components/form/checkbox.xml
deleted file mode 100644
index 51febcd..0000000
--- a/tapestry/src/site/xdoc/components/form/checkbox.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Checkbox</title>
-    </properties>
-    <body>
-
-        <section name="Checkbox">
-            <p>Renders an HTML checkbox, based on a boolean value.</p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/Checkbox.html">
-                        org.apache.tapestry.form.Checkbox
-                    </a>
-                    ,
-                    <a href="form.html">Form</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>value</td>
-                        <td>boolean</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            Value editted by the component; read on render, updated on form submit.
-                            This sets the check attribute of the rendered element. Deprecated alias:
-                            selected.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>displayName</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then the checkbox will render as disabled and any input from
-                            the checkbox will be ignored.
-                        </td>
-                    </tr>
-                    
-                    <tr>
-                        <td>id</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>Sets the id attribute for the rendered <code>&lt;input&gt;</code> element.</td>
-                    </tr>
-                    
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-                            
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>translator</td>
-                        <td>
-                            <a
-                                href="../../tapestry/apidocs/org/apache/tapestry/form/translator/Translator.html">
-                                Translator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The translator to use when displaying and parsing the date.
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>Reserved parameters: type, checked, name</p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/datepicker.xml b/tapestry/src/site/xdoc/components/form/datepicker.xml
deleted file mode 100644
index bece8c6..0000000
--- a/tapestry/src/site/xdoc/components/form/datepicker.xml
+++ /dev/null
@@ -1,248 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>DatePicker</title>
-    </properties>
-    <body>
-
-        <section name="DatePicker">
-
-            <p>
-                Provides a form Date field component for selecting dates. DatePicker presents a drop
-                down monthly calendar for users to select dates from.
-            </p>
-            <p>
-                JavaScript must be enabled in the client browser to use the drop down calendar. If
-                JavaScript is not enabled users can still enter a date value in the HTML text field.
-            </p>
-            <p>
-                Note a rendering feature of Netscape and Internet Explorer gives the HTML
-                <code>&lt;select&gt;</code> element the highest Z-level index. The HTML 
-                <code>&lt;select&gt;</code> cannot be
-                covered by other elements. If a <code>&lt;select&gt;</code> is located inside the DatePicker's
-                popup calendar region, the <code>&lt;select&gt;</code> will render through the popup calendar
-                obscuring part of the calendar. In these situation organize the form's UI layout so
-                this does not occur.
-            </p>
-            <p>
-                <strong>
-                    See also:
-                    <a href="button.html">Button</a>
-                    ,
-                    <a href="form.html">Form</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>java.util.Date</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The data value. Take care to ensure date time values are 'normalized'
-                            before performing any millisec based comparison or equality operations.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Controls whether the date field and calendar button is active or not.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>displayName</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-                            
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>translator</td>
-                        <td>
-                            <a
-                                href="../../tapestry/apidocs/org/apache/tapestry/form/translator/Translator.html">
-                                Translator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>translator:date,pattern=dd MMM yyyy</td>
-                        <td>
-                            The translator to use when displaying and parsing the date.
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>icon</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The icon used to toggle the calendar on and off. The calendar will
-                            automatically line itself up beneath the text input field.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>id</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>Sets the id attribute for the rendered <code>&lt;input&gt;</code> element.</td>
-                    </tr>
-
-                    <tr>
-                        <td>includeWeek</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>If true, displays in the calendar the week number for each week.</td>
-                    </tr>
-                    
-                    <tr>
-                        <td>title</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>Localized String representing the expected format. (ie MM/DD/YYYY)</td>
-                        <td>If not overriden the default title will be a localized pattern string representing 
-                        the currently accepted patterns.</td>
-                    </tr>
-                    
-                    <tr>
-                        <td>imageClass</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>datePickerImg</td>
-                        <td>
-                            Specifies the css class name that will be applied to the DatePicker img icon reference.
-                        </td>
-                    </tr>
-                    
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                    (These parameters will be applied to the text field)
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-                <p>
-                    This example provides a simple form where the user can select a start date and
-                    an end date.
-                </p>
-                <p>HTML template</p>
-                <source xml:space="preserve"><![CDATA[
-<form jwcid="Form" listener="listener:formSubmit">
-<table valign="middle">
- <tr>
-  <td>Start Date:</td> <td><input jwcid="@DatePicker" value="ognl:startDate"/></td>
- </tr>
- <tr>
-  <td>End Date:</td> <td><input jwcid="@DatePicker" value="ognl:endDate"/></td>
- </tr>
- <tr>
-  <td colspan="2">&nbsp;</td>
- </tr>
- <tr>
-  <td colspan="2" align="right"><input type="submit" value="Submit"/></td>
- </tr>
-</table>
-</form>
-]]></source>
-                <p>Page specification</p>
-                <source xml:space="preserve"><![CDATA[
-...
-<property name="startDate" type="java.util.Date"/>
-<property name="endDate" type="java.util.Date"/>
-...
-]]></source>
-                <p>Java source</p>
-                <source xml:space="preserve">
-public abstract class Dates extends BasePage {
-    public abstract Date getStartDate();
-
-    public abstract Date getEndDate();
-
-    public void formSubmit(IRequestCycle cycle) {
-        // Process the submitted dates.
-    }
-}
-</source>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/fieldlabel.xml b/tapestry/src/site/xdoc/components/form/fieldlabel.xml
deleted file mode 100644
index 3ca68b1..0000000
--- a/tapestry/src/site/xdoc/components/form/fieldlabel.xml
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>FieldLabel</title>
-    </properties>
-    <body>
-
-        <section name="FieldLabel">
-
-            <p>
-                A FieldLabel works with form element components (such as
-                <a href="textfield.html">TextField</a>
-                ,
-                <a href="textarea.html">TextArea</a>
-                ,
-                <a href="checkbox.html">Checkbox</a>
-                , etc.), labeling the field with the
-                <code>displayName</code>
-                property of the field. The FieldLabel may also be
-                <em>decorated</em>
-                by the validation delegate (to highlight when the corresponding field is in error).
-            </p>
-
-            <p>
-                The body of the component is discarded, but often has a provisional label (for
-                WYSIWYG). The actual value is typically provided by the field (so that it may be
-                localized just once).
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/valid/FieldLabel.html">
-                        org.apache.tapestry.valid.FieldLabel
-                    </a>
-                    ,
-                    <a href="../../usersguide/validation.html">Validation</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>field</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/IFormComponent.html">
-                                IFormComponent
-                            </a>
-                        </td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The component to be labeled. The component will be
-                            <em>pre-rendered</em>
-                            by the FieldLabel, and its displayName property used as the label string
-                            (note that most form element components return null for displayName).
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>displayName</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Overrides the displayName provided by the component or supplies a 
-                            displayName for components (such as
-                            <a href="textfield.html">TextField</a>
-                            , etc.) that don't provide one. A runtime exception occurs if
-                            displayName is null and not supplied by the component.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>raw</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then the displayName is printed "raw" (without filtering),
-                            which is appropriate when the displayName includes markup text.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>prerender</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            If true (the default), then the field for this label is pre-renderered.
-                            This is necessary so that the field can render itself, and set its
-                            client id (which is needed for the FieldLabel to render). When the
-                            FieldLabel is positioned
-                            <em>after</em>
-                            the field, prerender should be set to false.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>for</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-
-                <p>
-                    FieldLabel components are simple, and generally expressed entirely in the HTML
-                    template. Here we see a
-                    <a href="textfield.html">TextField</a>
-                    being labeled (and the displayName being provided as a FieldLabel parameter).
-                </p>
-
-                <source xml:space="preserve"><![CDATA[
-<tr>
-  <th>
-    <label jwcid="@FieldLabel" field="component:textField" displayName="message:textfield-label">Text Field</label>:
-  </th>
-  <td>
-    <input jwcid="textField@TextField" . . . />
-  </td>
-</tr>
-<tr>
-  <th>
-    <label jwcid="@FieldLabel" field="component:validField">Valid Field</label>:
-  </th>
-  <td>
-    <input jwcid="validField@ValidField" displayName="message:validfield-label" . . . />
-  </td>
-</tr>
-]]></source>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/form.xml b/tapestry/src/site/xdoc/components/form/form.xml
deleted file mode 100644
index 23113ee..0000000
--- a/tapestry/src/site/xdoc/components/form/form.xml
+++ /dev/null
@@ -1,288 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Form</title>
-    </properties>
-    <body>
-
-
-        <section name="Form">
-
-            <p>
-                A Form component must enclose the other form element components (such as
-                <a href="textfield.html">TextField</a>
-                and
-                <a href="checkbox.html">Checkbox</a>
-                ). It manages the rendering of the form as well as processing when the form is
-                submitted (known as "rewinding" the form). In traditional web applications, the
-                developer is responsible for providing a name for each form and each form control
-                element; in Tapestry, the Form component generates its own unique name, and unique
-                names for each enclosed component ... this is necessary to support advanced features
-                such as loops within forms.
-            </p>
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/Form.html">
-                        org.apache.tapestry.form.Form
-                    </a>
-                    ,
-                    <a href="../../usersguide/validation.html">Validation</a>
-                </strong>
-            </p>
-            <section name="Parameters">
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>method</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td>post</td>
-                        <td>Method used by the form when it is submitted.</td>
-                    </tr>
-                    <tr>
-                        <td>success</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Listener invoked when the form is submitted normally (not a cancel or a
-                            refresh) and the validation delegate indicates no errors. If the
-                            delegate indicates errors, then the listener parameter (if non-null) is
-                            used instead.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>cancel</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Listener used when a form is cancelled, overriding the default listener.
-                            Forms are cancelled by invoking the client-side JavaScript function
-                            document.<br/><br/>
-                            
-                            <code>tapestry.form.cancel(formId || form element, submitName)</code>
-                            
-                            <br/>
-                            A cancelled form <em>does not</em> rewind. If no cancel listener is 
-                            provided, then the normal listener will be used.
-                            
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../javascript/form.html">Form JavaScript API</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>refresh</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Listener used when a form is refreshed, overriding the default listener.
-                            A refreshed form bypasses input field validation on the client side,
-                            though validation still occurs on the server side. If no refresh
-                            listener is provided, then the normal listener will be used.
-                            
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../javascript/form.html">Form JavaScript API</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>listener</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Default listener to be invoked when the form is submitted. Invoked only
-                            if another listener (success, cancel or refresh) is not invoked.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>stateful</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            If true (the default), then an active session is required when the form
-                            is submitted, if there was an active session when the form was rendered.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>delegate</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/valid/IValidationDelegate.html">
-                                IValidationDelegate
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>default instance</td>
-                        <td>
-                            An object that tracks user input and input field errors, and decorates
-                            fields and field labels. This is typically overriden to provide an
-                            application-specific look and feel.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>clientValidationEnabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then client-side validation will be enabled for components that
-                            support it (such as
-                            <a href="textfield.html">TextField</a>
-                            ).
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../usersguide/clientside-validation.html">Client Side Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>focus</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            If true (the default), the the Form will determine a field to receive
-                            input focus, and add JavaScript to move the cursor to that field.
-                            Priority is given to fields in error, then required fields, then any
-                            non-disabled field. On a page with multiple forms, use this parameter to
-                            control which form will take focus.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>scheme</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The required scheme ("http" or "https", typically) for the URL. This
-                            will force the creation of an absolute URL when the current request's
-                            scheme does not match the value for this parameter. This is most often
-                            used to switch to "https" for secure portions of an application (such as
-                            a login page), before switching back to standard "http" for the majority
-                            of an application.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>port</td>
-                        <td>Integer</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The required port (80, 443, 8080. 8443, typically) for the URL. This
-                            will force the creation of an absolute URL when the current request's
-                            scheme does not match the value for this parameter. This is most often
-                            used in conjunction with scheme to switch to <code>"https:443"/"https:8443"</code>
-                            for secure portions of an application (such as a login page), before
-                            switching back to standard <code>"http:80"/"http:80"</code> for the majority of an
-                            application.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>updateComponents</td>
-                        <td>String[],Collection</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            In an asynchronous request, specifies which components should have their content
-                            rendered back to the client. These are expected to be unique component ids. 
-                            
-                            <p>
-                            See: <a href="../../apidocs/org/apache/tapestry/services/ResponseBuilder.html">ResponseBuilder</a>
-                            </p>
-                            
-                            <br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>json</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Causes the request to be asynchronous and the response to be captured/rendered via
-                            the <a href="../../apidocs/org/apache/tapestry/services/impl/JSONResponseBuilder.html">JSONResponseBuilder</a>
-                            renderer.
-                            
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>async</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Causes the request to be asynchronous and the response to be captured/rendered via
-                            the <a href="../../apidocs/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.html">DojoAjaxResponseBuilder</a>
-                            renderer.
-                            
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                </table>
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-                <p>Reserved parameters: action, enctype, id, name, onreset, onsubmit</p>
-                <p>
-                    A note about clientValidationEnabled: This refers to the revamped input
-                    validation support that debuts in Tapestry 4.0. 
-                </p>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/hidden.xml b/tapestry/src/site/xdoc/components/form/hidden.xml
deleted file mode 100644
index a130821..0000000
--- a/tapestry/src/site/xdoc/components/form/hidden.xml
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Hidden</title>
-    </properties>
-    <body>
-
-        <section name="Hidden">
-
-            <p>
-                Adds a hidden HTML <code>&lt;input type="hidden"&gt;</code> field to a
-                <a href="form.html">Form</a>
-                . This is often used to synchronize data when the form is submitted with values
-                known when the page was rendered.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="form.html">Form</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>Object</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The value to be stored in the the hidden field. The parameter is read
-                            when the HTML response is generated, and then written when the form is
-                            submitted. A
-                            <a
-                                href="../../apidocs/org/apache/tapestry/services/DataSqueezer.html">
-                                DataSqueezer
-                            </a>
-                            is used to convert the value between an arbitrary type and a String.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>id</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td>undefined in HTML presentation.</td>
-                        <td>
-                            ID parameter of HTML hidden object. The parameter is read when the HTML
-                            response is generated and if there is a specific value the component
-                            generate parameter id with passed value in its HTML presentation.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>listener</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            <p>
-                                A listener that is informed after the value parameter is updated.
-                                This allows the data set operated on by the rest of the
-                                <a href="form.html">Form</a>
-                                components to be synchronized to the value stored in the hidden
-                                field.
-                            </p>
-                            <p>
-                                A typical use is to encode the primary key of an entity as a Hidden;
-                                when the form is submitted, the Hidden's listener re-reads the
-                                corresponding entity from the database.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>encode</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            <p>
-                                If true (the default) a
-                                <a
-                                    href="../../apidocs/org/apache/tapestry/services/DataSqueezer.html">
-                                    DataSqueezer
-                                </a>
-                                is used to transform the value Object into the HTML value string,
-                                and (on submit) to convert the string back into an Object.
-                            </p>
-                            <p>
-                                If false, then the value must be a String. This is most likely used
-                                when the hidden field is used to communicate with client-side logic
-                                in JavaScript (which is not able to interpret even Strings encoded
-                                by
-                                <a
-                                    href="../../apidocs/org/apache/tapestry/services/DataSqueezer.html">
-                                    DataSqueezer
-                                </a>
-                                ). If you find yourself getting strange errors during the form
-                                rewind it could easily be Tapestry trying to interpret a value
-                                you've set via JavaScript.
-                            </p>
-                        </td>
-
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>name</em>
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/imagesubmit.xml b/tapestry/src/site/xdoc/components/form/imagesubmit.xml
deleted file mode 100644
index 512de85..0000000
--- a/tapestry/src/site/xdoc/components/form/imagesubmit.xml
+++ /dev/null
@@ -1,352 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>ImageSubmit</title>
-    </properties>
-    <body>
-
-        <section name="ImageSubmit">
-
-            <p>
-                A component that generates a clickable image that will cause the enclosing form to
-                submit. The <code>&lt;input type="image"&gt;</code> form element was originally designed 
-                for use as a way to select a pixel within an image that was presumable a map; it has been
-                co-opted by web applications as a way to decorate a form submit button using a
-                custom image instead of ordinary clickable buttons. This component is simply an
-                enhanced version of the
-                <a href="submit.html">Submit</a>
-                component that will display an image instead of a text label.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/ImageSubmit.html">
-                        org.apache.tapestry.form.ImageSubmit
-                    </a>
-                    ,
-                    <a href="form.html">Form</a>
-                    ,
-                    <a href="linksubmit.html">LinkSubmit</a>
-                    ,
-                    <a href="submit.html">Submit</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>image</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The normal image to display for the button.</td>
-                    </tr>
-
-                    <tr>
-                        <td>name</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Overrides the default mechanism for selecting the form element id; this
-                            allows the name attribute of the rendered <code>&lt;input&gt;</code> tag to be
-                            controlled, which is necessary is some browsers to control the tooltip
-                            help message for the control.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If set to true, the button will be disabled (will not respond to the
-                            mouse); the browser should provide a "greyed out" appearance.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>disabledImage</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If specified, and if the component is disabled, then this image is used
-                            rather than the normal image parameter. This allows an alternate image
-                            to be used to indicate to the user that the option is not available.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>point</td>
-                        <td>java.awt.Point</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>Set to the coordinates of the clicked point within the image.</td>
-                    </tr>
-
-                    <tr>
-                        <td>selected</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            This parameter is bound to a property that is updated when the submit
-                            button is clicked by the user. The property is updated to match the tag
-                            parameter.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>tag</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Tag used with the selected parameter to indicate which Submit button on
-                            a form was clicked.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>listener</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            An optional listener (typically specified as the name of a listener
-                            method), notified when the Submit is triggered.
-                            
-                            <p>
-                            When invoking listeners invoked within a <a href="../general/for.html">For</a> loop this
-                            listener should be used.
-                            </p>
-                            
-                            <p>
-                            This parameter should <strong>not</strong> be used in the majority of cases as the
-                            listener is notified before all form data has been captured on the server. Only use
-                            this when you know you are going to redirect or do some other cancelling sort of action
-                            that isn't likely to alter form state. Use <em>action</em> as your preferred listener
-                            method parameter. 
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>action</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            A listener that is notified if this component is triggered just before
-                            the form's listener, after all components enclosed by the Form have had
-                            a chance to update their properties.
-                            
-                            <p>
-                            If you are going to notify a listener, this is probably the parameter you want 
-                            to bind to.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>parameters</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Parameter(s) gathered at the time the button is triggered, supplied as
-                            listener parameters in the IRequestCycle available to the listener.
-                            <p>
-                                If the parameter is a Collection, it will be converted to an Object
-                                array (to match the IRequestCycle getListenerParameters()
-                                signature).
-                            </p>
-                            <p>
-                                Allows deferred listeners (defer = true) access to any rewind state
-                                not conveniently placed using tag/selected (e.g. when there are
-                                multiple objects to select as might happen with a nested Foreach).
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>submitType</td>
-                        <td>String - [submit,cancel,refresh]</td>
-                        <td>yes</td>
-                        <td>submit</td>
-                        <td>
-                            Controls the type of submission that this component invokes. Using javascript
-                            this parameter will cause the invocation of the component to be recognized as 
-                            a cancel/refresh/normal form submission depending on the value given. If you 
-                            have a <code>cancel="listener"</code> or <code>refresh="listener"</code> 
-                            parameter set on your <a href="form.html">Form</a> they will be invoked 
-                            accordingly.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>updateComponents</td>
-                        <td>String[],Collection</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            In an asynchronous request, specifies which components should have their content
-                            rendered back to the client. These are expected to be unique component ids. 
-                            
-                            <p>
-                            See: <a href="../../apidocs/org/apache/tapestry/services/ResponseBuilder.html">ResponseBuilder</a>
-                            </p>
-                            
-                            <br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>json</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Causes the request to be asynchronous and the response to be captured/rendered via
-                            the <a href="../../apidocs/org/apache/tapestry/services/impl/JSONResponseBuilder.html">JSONResponseBuilder</a>
-                            renderer.
-                            
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>async</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Causes the request to be asynchronous and the response to be captured/rendered via
-                            the <a href="../../apidocs/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.html">DojoAjaxResponseBuilder</a>
-                            renderer.
-                            
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>type, src</em>
-                </p>
-
-                <span class="warn">
-                    <strong>Warning:</strong>
-                    <p>
-                    In Tapestry 3.0, the behavior of the ImageSubmit was
-                    <em>undeferred</em>
-                    , the equivalent of setting the defer parameter to false. The default for the
-                    defer parameter in 4.0 is <em>true</em>
-                    , which may in rare cases, cause problems when upgrading an applicaton from 3.0
-                    to 4.0.
-                    </p>
-                </span>
-
-            </section>
-
-            <section name="Examples">
-
-
-                <p>HTML template:</p>
-
-                <source xml:space="preserve">
-&lt;form jwcid="form@Form" success="listener:doSubmit"&gt;
-&lt;table&gt;
-  &lt;tr&gt;
-    &lt;th&gt;User name:&lt;/th&gt;
-    &lt;td&gt;&lt;input jwcid="userName@TextField" value="ognl:userName" size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;th&gt;Password:&lt;/th&gt;
-    &lt;td&gt;&lt;input jwcid="password@TextField" value="ognl:password" hidden="true" size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;td colspan="2"&gt;
-      &lt;input type="image" src="images/login.png"/&gt;
-      &lt;input type="image" jwcid="help@ImageSubmit" action="listener:doHelp" image="asset:help/&gt;
-    &lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;</source>
-
-                <p>Page specification:</p>
-                <source xml:space="preserve">
-                
-. . .
-
-  &lt;asset name="help" path="images/help.png"/&gt;
-
-. . .
-
-</source>
-
-
-                <p>
-                    This is a variation of the example for the
-                    <a href="Submit.html">Submit</a>
-                    component; it uses images instead of ordinary clickable buttons for the help and
-                    login actions.
-                </p>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/index.xml b/tapestry/src/site/xdoc/components/form/index.xml
deleted file mode 100644
index 2433773..0000000
--- a/tapestry/src/site/xdoc/components/form/index.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Framework Component Reference - Form Components</title>
-    </properties>
-    <body>
-        
-        <section name="Form Components">
-            <p>
-                The menu to the left lists all of the form related components provided 
-                with the Tapestry framework.
-            </p>
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/linksubmit.xml b/tapestry/src/site/xdoc/components/form/linksubmit.xml
deleted file mode 100644
index aae0363..0000000
--- a/tapestry/src/site/xdoc/components/form/linksubmit.xml
+++ /dev/null
@@ -1,241 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE document PUBLIC
-  "-//Apache Software Foundation//DTD XDOC 1.0//EN"
-  "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>LinkSubmit</title>
-    </properties>
-    <body>
-
-        <section name="LinkSubmit">
-
-            <p>
-                Creates a hyperlink that submits its enclosing form using a JavaScript function.
-                <br />
-                Pages incorporating a LinkSubmit component must also include a
-                <a href="../general/body.html">Body</a>
-                component.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/LinkSubmit.html">
-                        org.apache.tapestry.form.LinkSubmit
-                    </a>
-                    ,
-                    <a href="form.html">Form</a>
-                    ,
-                    <a href="imagesubmit.html">ImageSubmit</a>
-                    ,
-                    <a href="submit.html">Submit</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Controls whether the link is produced. If disabled, the portion of the
-                            template the link surrounds is still rendered, but not the link itself.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>selected</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            This parameter is bound to a property that is updated when the submit
-                            button is clicked by the user. The property is updated to match the tag
-                            parameter.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>tag</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Tag used with the selected parameter to indicate which Submit button on
-                            a form was clicked.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>listener</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            An optional listener (typically specified as the name of a listener
-                            method), notified when the Submit is triggered.
-                            
-                            <p>
-                            When invoking listeners invoked within a <a href="../general/for.html">For</a> loop this
-                            listener should be used.
-                            </p>
-                            
-                            <p>
-                            This parameter should <strong>not</strong> be used in the majority of cases as the
-                            listener is notified before all form data has been captured on the server. Only use
-                            this when you know you are going to redirect or do some other cancelling sort of action
-                            that isn't likely to alter form state. Use <em>action</em> as your preferred listener
-                            method parameter. 
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>action</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            A listener that is notified if this component is triggered just before
-                            the form's listener, after all components enclosed by the Form have had
-                            a chance to update their properties.
-                            
-                            <p>
-                            If you are going to notify a listener, this is probably the parameter you want 
-                            to bind to.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>parameters</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Parameter(s) gathered at the time the link is triggered, supplied as
-                            listener parameters in the IRequestCycle available to the listener.
-                            <p>
-                                If the parameter is a Collection, it will be converted to an Object
-                                array (to match the IRequestCycle getListenerParameters()
-                                signature).
-                            </p>
-                            <p>
-                                Allows deferred listeners (defer = true) access to any rewind state
-                                not conveniently placed using tag/selected (e.g. when there are
-                                multiple objects to select as might happen with a nested Foreach).
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>submitType</td>
-                        <td>String - [submit,cancel,refresh]</td>
-                        <td>yes</td>
-                        <td>submit</td>
-                        <td>
-                            Controls the type of submission that this component invokes. Using javascript
-                            this parameter will cause the invocation of the component to be recognized as 
-                            a cancel/refresh/normal form submission depending on the value given. If you 
-                            have a <code>cancel="listener"</code> or <code>refresh="listener"</code> 
-                            parameter set on your <a href="form.html">Form</a> they will be invoked 
-                            accordingly.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>updateComponents</td>
-                        <td>String[],Collection</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            In an asynchronous request, specifies which components should have their content
-                            rendered back to the client. These are expected to be unique component ids. 
-                            
-                            <p>
-                            See: <a href="../../apidocs/org/apache/tapestry/services/ResponseBuilder.html">ResponseBuilder</a>
-                            </p>
-                            
-                            <br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>json</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Causes the request to be asynchronous and the response to be captured/rendered via
-                            the <a href="../../apidocs/org/apache/tapestry/services/impl/JSONResponseBuilder.html">JSONResponseBuilder</a>
-                            renderer.
-                            
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>async</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Causes the request to be asynchronous and the response to be captured/rendered via
-                            the <a href="../../apidocs/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.html">DojoAjaxResponseBuilder</a>
-                            renderer.
-                            
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>name, href</em>
-                </p>
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/option.xml b/tapestry/src/site/xdoc/components/form/option.xml
deleted file mode 100644
index 662d5ca..0000000
--- a/tapestry/src/site/xdoc/components/form/option.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Option</title>
-    </properties>
-    <body>
-
-        <section name="Option">
-
-            <p>
-                A component that renders an HTML <code>&lt;option&gt;</code> form element. 
-                
-                The Option component must be wrapped by a <a href="select.html">Select</a>
-                component. For a fully worked example showing the Option component, please refer to
-                the
-                <a href="select.html">Select</a>
-                documentation.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/Option.html">
-                        org.apache.tapestry.form.Option
-                    </a>
-                    ,
-                    <a href="form.html">Form</a>
-                    ,
-                    <a href="propertyselection.html">PropertySelection</a>
-                    ,
-                    <a href="select.html">Select</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>selected</td>
-                        <td>boolean</td>
-                        <td>yes</td>
-                        <td />
-                        <td>Used to indicate whether the given option is selected.</td>
-                    </tr>
-                    <tr>
-                        <td>label</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            A string which represents the option that may be selected. This is
-                            optional; any text that follows the <code>&lt;option&gt;</code> tag is considered the
-                            label, but this saves the designer from have to include one more
-                            <a href="../general/insert.html">Insert</a>
-                            component to display the option label.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>Reserved parameters: value</p>
-
-            </section>
-
-            <section name="Examples">
-                <p>
-                    Please see the documentation for the
-                    <a href="select.html">Select</a>
-                    component.
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/propertyselection.xml b/tapestry/src/site/xdoc/components/form/propertyselection.xml
deleted file mode 100644
index e10f2e7..0000000
--- a/tapestry/src/site/xdoc/components/form/propertyselection.xml
+++ /dev/null
@@ -1,446 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2007 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>PropertySelection</title>
-    </properties>
-    <body>
-
-        <section name="PropertySelection">
-
-            <p>
-                Creates form elements that allow a property of an object to be set from a drop-down
-                list.
-            </p>
-            <p>
-                Uses a
-                <a href="../../apidocs/org/apache/tapestry/form/IPropertySelectionModel.html">IPropertySelectionModel</a>
-                to map between Java values that will be assigned, and textual labels that will
-                appear in the HTML response.
-            </p>
-            <p>
-                A useful property selection model is available (
-                <a href="../../apidocs/org/apache/tapestry/form/StringPropertySelectionModel.html">StringPropertySelectionModel</a>
-                , or
-                <a href="../../apidocs/org/apache/tapestry/form/BeanPropertySelectionModel.html">BeanPropertySelectionModel</a>).
-                You can also create your own model, as illustrated in the examples below.
-            </p>
-            <p>
-                Note that complex value Objects need to properly implement the <code>Object.equals()</code>
-                method if the correct initial item is to be displayed.
-            </p>
-
-            <p>
-                Informal parameters are applied to the <code>&lt;select&gt;</code> tag.  To have greater control
-                over the <code>&lt;option&gt;</code> tags, you must use the <a href="select.html">Select</a> and
-                <a href="option.html">Option</a> components.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/PropertySelection.html">org.apache.tapestry.form.PropertySelection</a>
-                    ,
-                    <a href="select.html">Select</a>
-                    ,
-                    <a href="option.html">Option</a>
-                    ,
-                    <a href="radio.html">Radio</a>
-                    ,
-                    <a href="radiogroup.html">RadioGroup</a>
-                    ,
-                    <a href="form.html">Form</a>
-                    ,
-                    <a href="../general/script.html">Script</a>
-                </strong>
-
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>Object</td>
-                        <td>yes</td>
-                        <td> </td>
-                        <td>
-                            The property to set. During rendering, this property is read, and sets
-                            the default value of the selection (if it is null, no element is
-                            selected). When the form is submitted, this property is updated based on
-                            the new selection.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>model</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/form/IPropertySelectionModel.html">
-                                IPropertySelectionModel
-                            </a>
-                        </td>
-                        <td>yes</td>
-                        <td> </td>
-                        <td>
-                            The model provides a list of possible labels, and matches those labels
-                            against possible values that can be assigned back to the property.
-                        </td>
-
-                    </tr>
-                    <tr>
-                        <td>optionRenderer</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/form/IOptionRenderer.html">
-                                IOptionRenderer
-                            </a>
-                        </td>
-                        <td>yes</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/form/DefaultOptionRenderer.html">
-                                DefaultOptionRenderer
-                            </a>
-                        </td>
-                        <td>
-                            Object used to render the <code>&lt;option&gt;Label&lt;/option&gt;</code> elements
-                            within the enclosing <code>&lt;select&gt;</code> tags.  The default implementation currently
-                            handles only writing out the <code>disabled/selected</code> attributes corresponding the methods
-                            implemented by
-                            <a href="../../apidocs/org/apache/tapestry/form/IPropertySelectionModel.html">
-                                IPropertySelectionModel
-                            </a>.
-                            <br /><br />
-                            It is possible to implement more advanced display semantics of your options list by implementing a custom
-                            <a href="../../apidocs/org/apache/tapestry/form/IOptionRenderer.html">
-                                IOptionRenderer
-                            </a> of your own.  Things like <code>optgroup</code> and various indentation strategies are typically good
-                            candidates for implementing custom renderers.
-                        </td>
-
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Controls whether the <code>&lt;select&gt;</code> is active or not. A disabled
-                            PropertySelection does not update its value parameter. Corresponds to
-                            the "disabled" HTML attribute.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>displayName</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-
-                            The user-presentable name for the component, which will be used by a
-                            <a href="fieldlabel">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>name</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-                <subsection name="Example 1">
-                    <p>
-                        The PropertySelection component provides Gender selection drop down list
-                        using a
-                        <a href="../../apidocs/org/apache/tapestry/form/StringPropertySelectionModel.html">
-                            StringPropertySelectionModel
-                        </a>
-                    </p>
-
-                    <source xml:space="preserve"><![CDATA[
-<form jwcid="@Form" listener="listener:formSubmit">
- Gender: <select jwcid="@PropertySelection" model="ognl:@com.myexample.DetailsPage@GENDER_MODEL" value="ognl:gender"></select>
- <input type="submit"/>
-</form>
-]]></source>
-
-                    <source xml:space="preserve">
-public abstract class DetailsPage extends BasePage {
-  public static final IPropertySelectionModel GENDER_MODEL =
-      new StringPropertySelectionModel(new String[] { "Unspecified", "Female", "Male" });
-
-  public abstract String getGender();
-
-  public void formSubmit(IRequestCycle cycle) {
-      // Process form submission
-      String genderSelection = getGender();
-      ...
-  }
-}
-</source>
-                </subsection>
-
-                <subsection name="Example 2 : Custom IOptionRenderer">
-                    <p>
-                        The <code>optionRenderer</code> parameter allows you complete control over the display of your options list with custom
-                        renderer implementations.  The following example shows a sample custom renderer implementation for generating a google style
-                        drop down actions list. <em>(similar to the gmail drop down actions list)</em>
-                    </p>
-
-                    <p>
-                        The resulting option list would look something like:
-                    </p>
-
-                    <select name="sampleOptions">
-                        <option value="-1" style="color: rgb(119, 119, 119);">choose..</option>
-                        <option value="0" style="padding-left:1em;">Dogs</option>
-                        <option value="1" style="padding-left:1em;">Elephants</option>
-                        <option value="2" style="padding-left:1em;">Mongoose</option>
-                        <option value="3" style="padding-left:1em;">Angry Chipmunks</option>
-                    </select>
-
-                    <source xml:space="preserve"><![CDATA[
-/**
- * Implementation of {@link IOptionRenderer} that pretty prints options
- * that aren't disabled with padded whitespace at the beginning.
- */
-public class FormattedOptionRenderer implements IOptionRenderer {
-
-    // Provided for efficiency / convenience
-    public static final IOptionRenderer DEFAULT_INSTANCE = new FormattedOptionRenderer();
-
-    /**
-     * {@inheritDoc}
-     */
-    public void renderOptions(IMarkupWriter writer, IRequestCycle cycle, IPropertySelectionModel model, Object selected) {
-        int count = model.getOptionCount();
-
-        for (int i = 0; i < count; i++)
-        {
-            Object option = model.getOption(i);
-
-            writer.begin("option");
-            writer.attribute("value", model.getValue(i));
-
-            if (isEqual(option, selected, model))
-                writer.attribute("selected", "selected");
-
-            if (model.isDisabled(i))
-                writer.attribute("style", "color: rgb(119, 119, 119);");
-
-            if (i > 0)
-                writer.printRaw("&nbsp;");
-
-            writer.print(model.getLabel(i));
-            
-            writer.end();
-            writer.println();
-        }
-    }
-
-    protected boolean isEqual(Object left, Object right, IPropertySelectionModel model) {
-
-        if (List.class.isInstance(right) && IPrimaryKeyConverter.class.isInstance(model))
-        {
-            List values = (List) right;
-            IPrimaryKeyConverter converter = (IPrimaryKeyConverter) model;
-
-            if (left == null)
-                return false;
-
-            for (Object option : values)
-                if (converter.getPrimaryKey(option).equals(converter.getPrimaryKey(left)))
-                    return true;
-
-            return false;
-        }
-
-        // Both null, or same object, then are equal
-
-        if (left == right)
-            return true;
-
-        // If one is null, the other isn't, then not equal.
-        
-        if (left == null || right == null)
-            return false;
-
-        // Both non-null; use standard comparison.
-
-        return left.equals(right);
-    }
-}
-]]></source>
-                </subsection>
-
-                <subsection name="Example 3">
-
-                    <p>
-                        Provides list of clothing items for the user to select. When the user
-                        selects a cloting item from the list the description the label and price is
-                        automatically updated. The list of clothing items would typically be loaded
-                        from a database.
-                    </p>
-
-                    <p>PurchasePage.html</p>
-
-                    <source xml:space="preserve"><![CDATA[
-<body jwcid="@Body">
-<form jwcid="@Form" listener="listener:formSubmit">
- <label jwcid="@FieldLabel" field="component:itemSelection">Selection</label>
- <select jwcid="itemSelection@PropertySelection"
-       model="ognl:itemSelectionModel"
-       value="ognl:clothingItem"
-       onchange="javascript:this.form.events.refresh();"
-       displayName="Choose an item"></select>
- <input type="submit" value="Show me this item"/>
- <span jwcid="@Conditional" condition="ognl:clothingItem!=null">
- <p>Description: <span jwcid="@Insert" value="ognl:clothingItem.description"/></p>
- <p>Label: <span jwcid="@Insert" value="ognl:clothingItem.label"/></p>
- <p>Price: $<span jwcid="@Insert" value="ognl:clothingItem.price"/></p>
- </span>
-</form>
-</body>
-]]></source>
-
-                    <p>PurchasePage.java</p>
-                    <source xml:space="preserve">
-public abstract class PurchasePage extends BasePage implements PageDetachListener {
-
-  private ItemSelectionModel model = null;
-
-  public abstract Item getClothingItem();
-  public abstract void setClothingItem(Item value);
-
-  public ItemSelectionModel getItemSelectionModel() {
-    if (model == null) {
-      List items = new ArrayList();
-      items.add(new Item(1, "Dress", "Cotton full length Summer dress", "CountryClub", "89.95"));
-      items.add(new Item(2, "Jacket", "Gorgeous jacket", "CountryClub", "119.95"));
-      model = new ItemSelectionModel(items);
-    }
-    return model;
-  }
-
-  public void formSubmit() {
-    // Process form submission
-
-  }
-
-  public void pageDetached(PageEvent pageEvent) {
-    model = null;
-  }
-
-}
-</source>
-
-                    <p>Item.java</p>
-                    <source xml:space="preserve">
-public class Item implements Serializable {
-  private int id;
-  private String name;
-  private String description;
-  private String label;
-  private String price;
-
-  public Item(int id, String name, String desc, String label, String price) {
-      this.id = id;
-      this.name = name;
-      this.description = desc;
-      this.label = label;
-      this.price = price;
-  }
-
-  public int getId() { return id;  }
-
-  public String getName() { return name;  }
-
-  public String getDescription() { return description;  }
-
-  public String getLabel() { return label;  }
-
-  public String getPrice() { return price;  }
-}
-</source>
-
-                    <p>ItemSelectionModel.java</p>
-                    <source xml:space="preserve">
-public class ItemSelectionModel implements IPropertySelectionModel, Serializable {
-  private List itemList;
-
-  public ItemSelectionModel(List itemList) {
-      this.itemList = itemList;
-  }
-
-  public int getOptionCount() { return itemList.size(); }
-
-  public Object getOption(int index) {
-      return itemList.get(index);
-  }
-
-  public String getLabel(int index) {
-      return ((Item) itemList.get(index)).getName();
-  }
-
-  public String getValue(int index) { return Integer.toString(index); }
-
-  public Object translateValue(String value) {
-      return getOption(Integer.parseInt(value));
-  }
-}
-</source>
-                </subsection>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/radio.xml b/tapestry/src/site/xdoc/components/form/radio.xml
deleted file mode 100644
index 17ee6c2..0000000
--- a/tapestry/src/site/xdoc/components/form/radio.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Radio</title>
-    </properties>
-    <body>
-
-        <section name="Radio">
-
-            <p>
-                Provides a HTML <code>&lt;input type="radio"&gt;</code> form element. The Radio component must be
-                wrapped (possibly indirectly) inside a
-                <a href="radiogroup.html">RadioGroup</a>
-                component.
-            </p>
-
-            <p>
-                Generally the
-                <a href="propertyselection.html">PropertySelection</a>
-                component is used in preference to the Radio and
-                <a href="radiogroup.html">RadioGroup</a>
-                , except in special cases.
-            </p>
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/Radio.html">
-                        org.apache.tapestry.form.Radio
-                    </a>
-                    ,
-                    <a href="form.html">Form</a>
-                    ,
-                    <a href="option.html">Option</a>
-                    ,
-                    <a href="propertyselection.html">PropertySelection</a>
-                    ,
-                    <a href="radiogroup.html">RadioGroup</a>
-                    ,
-                    <a href="select.html">Select</a>
-                </strong>
-
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The value is used to determine if the radio button is initially selected
-                            (when rendering) and is the value assigned to the selected parameter
-                            when the form is submitted, if the HTML radio button is selected.
-                        </td>
-                    </tr>
-                    <tr>
-
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-
-                            If true, then the Radio is disabled. It will write a <code>disabled</code>
-                            attribute into its tag when rendering, and will not update its selected
-                            binding. A Radio may also be disabled if its containing RadioGroup is
-                            disabled.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-
-                </p>
-
-                <p>Reserved parameters: checked, name, type</p>
-
-            </section>
-
-            <section name="Examples">
-
-
-                <p>
-                    See
-                    <a href="radiogroup.html">RadioGroup</a>
-                    for a Radio component example.
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/radiogroup.xml b/tapestry/src/site/xdoc/components/form/radiogroup.xml
deleted file mode 100644
index f74304c..0000000
--- a/tapestry/src/site/xdoc/components/form/radiogroup.xml
+++ /dev/null
@@ -1,200 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>RadioGroup</title>
-    </properties>
-    <body>
-
-        <section name="RadioGroup">
-
-            <p>
-                Provides a container group for Radio components. The RadioGroup itself must be
-                within a
-                <a href="form.html">Form</a>
-                component. The
-                <a href="radio.html">Radio</a>
-                and RadioGroup components work together to update a property of an object, much like
-                a more flexible version of a
-                <a href="propertyselection.html">PropertySelection</a>
-                . This component should wrap around other
-                <a href="radio.html">Radio</a>
-                components.
-            </p>
-
-            <span class="warn">
-                <strong>Warning:</strong>
-                <p>
-                RadioGroup components may not nest.
-                </p>
-            </span>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/RadioGroup.html">
-                        org.apache.tapestry.form.RadioGroup
-                    </a>
-                    ,
-                    <a href="option.html">Option</a>
-                    ,
-                    <a href="propertyselection.html">PropertySelection</a>
-                    ,
-                    <a href="radio.html">Radio</a>
-                    ,
-                    <a href="select.html">Select</a>
-                </strong>
-
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>selected</td>
-                        <td>Object</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            Read during rendering to determine which Radio will be the default.
-                            Updated during rewinding (when the form is submitted) to indicate which
-                            radio button was selected by the user (null if no button was selected).
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then all contained Radio components will be disabled as well.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>displayName</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-                            
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>translator</td>
-                        <td>
-                            <a
-                                href="../../tapestry/apidocs/org/apache/tapestry/form/translator/Translator.html">
-                                Translator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The translator to use when displaying and parsing the date.
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                </table>
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-
-                </p>
-
-            </section>
-
-            <section name="Examples">
-                <p>
-                    This RadioGroup example illustrates an order form where a user can select the
-                    order size.
-                </p>
-
-                <source xml:space="preserve"><![CDATA[
-<form jwcid="@Form" success="listener:doSubmit">
- <label jwcid="@FieldLabel" field="component:size">Radio</label>
- <span jwcid="size@RadioGroup" selected="ognl:orderSize" displayName="Size" validators="validators:required">
-  <input type="radio" jwcid="@Radio" value="ognl:@com.myexample.OrderPage@SMALL"/> Small
-  <input type="radio" jwcid="@Radio" value="ognl:@com.myexample.OrderPage@MEDIUM"/> Medium
-  <input type="radio" jwcid="@Radio" value="ognl:@com.myexample.OrderPage@LARGE"/> Large
-  <input type="submit" value="Order"/>
- </span>
-</form>
-]]></source>
-
-                <source xml:space="preserve">
-package com.myexample;
-
-import org.apache.tapestry.html.BasePage;
-
-public abstract class OrderPage extends BasePage {
-
-  public final static Integer SMALL = new Integer(1);
-  public final static Integer MEDIUM = new Integer(2);
-  public final static Integer LARGE = new Integer(3);
-
-  public abstract Integer getOrderSize();
-
-  public void doSubmit() {
-    // process order
-
-  }
-
-}
-</source>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/select.xml b/tapestry/src/site/xdoc/components/form/select.xml
deleted file mode 100644
index f487089..0000000
--- a/tapestry/src/site/xdoc/components/form/select.xml
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Select</title>
-    </properties>
-    <body>
-
-        <section name="Select">
-
-            <p>
-                Implements a component that manages an HTML <code>&lt;select&gt;</code> form element. 
-                The Select component can take the form of a drop down list (default) or a list selection 
-                box if the "multiple" parameter is set to true. The Select component must wrap around
-                <a href="option.html">Option</a>
-                components within a
-                <a href="form.html">Form</a>
-                .
-            </p>
-            <p>
-                Unless multiple selections are required, it is generally easier to use the
-                <a href="propertyselection.html">PropertySelection</a>
-                component.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/Select.html">
-                        org.apache.tapestry.form.Select
-                    </a>
-                    ,
-                    <a href="form.html">Form</a>
-                    ,
-                    <a href="option.html">Option</a>
-                    ,
-                    <a href="radiogroup.html">RadioGroup</a>
-                    ,
-                    <a href="radio.html">Radio</a>
-                    ,
-                    <a href="propertyselection.html">PropertySelection</a>
-                </strong>
-
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>multiple</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>If true, the component allows multiple selection.</td>
-                    </tr>
-                    <tr>
-
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-
-                            Controls whether the select is active or not. Corresponds to the
-                            "disabled" HTML attribute.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>displayName</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-                            
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>id</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>Sets the id attribute for the rendered <code>&lt;select&gt;</code> element.</td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>name</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-                <p>
-                    In the following example, a user can select several colors (and, because of the
-                    validator, he must select at least one).
-                </p>
-
-                <source xml:space="preserve"><![CDATA[
-<form jwcid="@Form" listener="listener:formSubmit">
- <label jwcid="@FieldLabel" field="component:colorChooser" displayName="Choose a color">Color</label>
- <select jwcid="colorChooser@Select" multiple="ognl:true" validators="validators:required">
-  <span jwcid="@Foreach" source="ognl:colors" value="ognl:currentColor" index="ognl:currentColorIndex">
-   <option jwcid="@Option" selected="ognl:selection[currentColorIndex]" label="ognl:currentColor"/>
-  </span>
- </select>
- <input type="submit"/>
-</form>
-]]></source>
-
-                <source xml:space="preserve">
-public abstract class ColorChooser extends BasePage implements PageBeginRenderListener{
-
-  private String[] colors = {"blue", "red", "green", "yellow"};
-
-  public abstract int getCurrentColorIndex();
-  public abstract String getCurrentColor();
-  public abstract boolean[] getSelection();
-  public abstract void setSelection(boolean[] selection);
-
-  public String[] getColors() {
-    return colors;
-  }
-
-  public void formSubmit() {
-    // process form
-
-  }
-
-  public void pageBeginRender(PageEvent event) {
-    if (getSelection() == null) {
-      setSelection(new boolean[colors.length]);
-    }
-  }
-
-}
-</source>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/submit.xml b/tapestry/src/site/xdoc/components/form/submit.xml
deleted file mode 100644
index c7e73b5..0000000
--- a/tapestry/src/site/xdoc/components/form/submit.xml
+++ /dev/null
@@ -1,306 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Submit</title>
-    </properties>
-    <body>
-
-        <section name="Submit">
-            <p>
-                Provides an HTML form submission element, <code>&lt;input type="submit"&gt;</code>. 
-                The Submit component must be enclosed by a
-                <a href="form.html">Form</a>
-                component. A Submit component is used when a single form has multiple form
-                submission buttons, and the application needs to know which one is the trigger for
-                the form submission.
-            </p>
-
-            <p>
-                The application can use two techniques to determine which Submit component (if any)
-                caused the form to be submitted:
-            </p>
-
-            <ul>
-                <li>
-                    A property may be set to some value; this uses the selected and tag parameters.
-                </li>
-                <li>A listener may be notified.</li>
-            </ul>
-
-            <p>
-                It is even possible to combine the two, in which case the property is set first,
-                then the listener is notified. The listener may be notified immediately (i.e., in
-                the middle of processing the form submission) if provided via the 'listener'
-                parameter, but if it is provided via the 'action' parameter, the listener will be
-                notified later, just before the form's listener (if any) is invoked.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/Submit.html">
-                        org.apache.tapestry.form.Submit
-                    </a>
-                    ,
-                    <a href="form.html">Form</a>
-                    ,
-                    <a href="imagesubmit.html">ImageSubmit</a>
-                    ,
-                    <a href="linksubmit.html">LinkSubmit</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>
-                            label
-                            <strong>(deprecated)</strong>
-                        </td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The label put on the button (this becomes the HTML value attribute).
-                            Alternately, the value attribute may simply be specified as an informal
-                            parameter.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If set to true, the button will be disabled (will not respond to the
-                            mouse); the browser should provide a "greyed out" appearance.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>selected</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            This parameter is bound to a property that is updated when the submit
-                            button is clicked by the user. The property is updated to match the tag
-                            parameter.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>tag</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Tag used with the selected parameter to indicate which Submit button on
-                            a form was clicked.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>listener</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            An optional listener (typically specified as the name of a listener
-                            method), notified when the Submit is triggered.
-                            
-                            <p>
-                            When invoking listeners invoked within a <a href="for.html">For</a> loop this
-                            listener should be used.
-                            </p>
-                            
-                            <p>
-                            This parameter should <strong>not</strong> be used in the majority of cases as the
-                            listener is notified before all form data has been captured on the server. Only use
-                            this when you know you are going to redirect or do some other cancelling sort of action
-                            that isn't likely to alter form state. Use <em>action</em> as your preferred listener
-                            method parameter. 
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>action</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            A listener that is notified if this component is triggered just before
-                            the form's listener, after all components enclosed by the Form have had
-                            a chance to update their properties.
-                            
-                            <p>
-                            If you are going to notify a listener, this is probably the parameter you want 
-                            to bind to.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>parameters</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Parameter(s) gathered at the time the button is triggered, supplied as
-                            listener parameters in the IRequestCycle available to the listener.
-                            <p>
-                                If the parameter is a Collection, it will be converted to an Object
-                                array (to match the IRequestCycle getListenerParameters()
-                                signature).
-                            </p>
-                            <p>
-                                Allows listeners provided by the 'action' parameter to access any
-                                rewinded state not conveniently placed using tag/selected (e.g. when
-                                there are multiple objects to select as might happen with a nested
-                                For).
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>submitType</td>
-                        <td>String - [submit,cancel,refresh]</td>
-                        <td>yes</td>
-                        <td>submit</td>
-                        <td>
-                            Controls the type of submission that this component invokes. Using javascript
-                            this parameter will cause the invocation of the component to be recognized as 
-                            a cancel/refresh/normal form submission depending on the value given. If you 
-                            have a <code>cancel="listener"</code> or <code>refresh="listener"</code> 
-                            parameter set on your <a href="form.html">Form</a> they will be invoked 
-                            accordingly.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>updateComponents</td>
-                        <td>String[],Collection</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            In an asynchronous request, specifies which components should have their content
-                            rendered back to the client. These are expected to be unique component ids. 
-                            
-                            <p>
-                            See: <a href="../../apidocs/org/apache/tapestry/services/ResponseBuilder.html">ResponseBuilder</a>
-                            </p>
-                            
-                            <br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>json</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Causes the request to be asynchronous and the response to be captured/rendered via
-                            the <a href="../../apidocs/org/apache/tapestry/services/impl/JSONResponseBuilder.html">JSONResponseBuilder</a>
-                            renderer.
-                            
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>async</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Causes the request to be asynchronous and the response to be captured/rendered via
-                            the <a href="../../apidocs/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.html">DojoAjaxResponseBuilder</a>
-                            renderer.
-                            
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../ajax/index.html">Ajax Features</a>
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>Reserved parameters: name, type</p>
-
-            </section>
-
-            <section name="Example">
-
-
-                <source xml:space="preserve">
-&lt;form jwcid="form@Form" listener="listener:doSubmit"&gt;
-&lt;table&gt;
-  &lt;tr&gt;
-    &lt;th&gt;User name:&lt;/th&gt;
-    &lt;td&gt;&lt;input jwcid="userName@TextField" value="ognl:userName" size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;th&gt;Password:&lt;/th&gt;
-    &lt;td&gt;&lt;input jwcid="password@TextField" value="ognl:password" hidden="true" size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;td colspan="2"&gt;
-      &lt;input type="submit" value="Login"/&gt;
-      &lt;input type="submit" jwcid="help@Submit" action="listener:doHelp" value="Help"/&gt;
-    &lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;</source>
-
-                <p>
-                    Here, the page class will have
-                    <em>two</em>
-                    listener methods: doHelp() and doSubmit(). doHelp() will be invoked if the user
-                    clicks the Help button, then doSubmit() will be invoked either way.
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/textarea.xml b/tapestry/src/site/xdoc/components/form/textarea.xml
deleted file mode 100644
index c845c46..0000000
--- a/tapestry/src/site/xdoc/components/form/textarea.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>TextArea</title>
-    </properties>
-    <body>
-
-        <section name="TextArea">
-
-            <p>
-                A form element control that renders an HTML <code>&lt;textarea&gt;</code>, a multi-line text
-                input.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/TextArea.html">
-                        org.apache.tapestry.form.TextArea
-                    </a>
-                    ,
-                    <a href="../general/inserttext.html">InsertText</a>
-                    ,
-                    <a href="textfield.html">TextField</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>value</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The value to read and update (unless the disabled parameters is true).
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then the <code>&lt;textarea&gt;</code> will be written with a disabled
-                            attribute (preventing user interaction in the client web browser). In
-                            addition, when the form is submitted, the component will not update its
-                            value parameter.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>displayName</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            A name for the field, which may be used by the
-                            <a href="fieldlabel.html">FieldLabel</a>
-                            component connected to the TextArea.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-                            
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>translator</td>
-                        <td>
-                            <a
-                                href="../../tapestry/apidocs/org/apache/tapestry/form/translator/Translator.html">
-                                Translator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The translator to use when displaying and parsing the date.
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>Reserved parameters: name</p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/textfield.xml b/tapestry/src/site/xdoc/components/form/textfield.xml
deleted file mode 100644
index 4423a5a..0000000
--- a/tapestry/src/site/xdoc/components/form/textfield.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>TextField</title>
-    </properties>
-    <body>
-
-        <section name="TextField">
-
-            <p>A form element component that renders an <code>&lt;input&gt;</code> element.</p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/form/TextField.html">
-                        org.apache.tapestry.form.TextField
-                    </a>
-                    ,
-                    <a href="form.html">Form</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>value</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The value to be editted, which is is usually a string. Tapestry has
-                            limited ability to convert to and from strings.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then a disabled attribute will be rendered as part of the
-                            <code>&lt;input&gt;</code> tag, and the component will not update its value parameter
-                            when the form is submitted.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>displayName</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-                            
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>translator</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/translator/Translator.html">
-                                Translator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The translator to use when displaying and parsing the date.
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>hidden</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then the type attribute will be "password", not "text", and
-                            user input in the browser will be masked.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>Reserved parameters: name, type, value</p>
-
-            </section>
-
-            <section name="Example">
-                <p>
-                    Below is an excerpt from a Login page, that collects a user id and a password.
-                </p>
-
-                <p>Login.html: (partial)</p>
-
-                <source xml:space="preserve">
-&lt;form jwcid="form@Form" success="listener:doLogin"&gt;
-  &lt;table&gt;
-    &lt;tr&gt;
-      &lt;th&gt;User id:&lt;/th&gt;
-      &lt;td&gt;&lt;input jwcid="userId@TextField" value="ognl:userId" size="8"/&gt;&lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;tr&gt;
-      &lt;th&gt;Password:&lt;/th&gt;
-      &lt;td&gt;&lt;input jwcid="password@TextField" value="ognl:password" size="8" hidden="true"/&gt;&lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;tr&gt;
-      &lt;td colpsan="2"&gt;
-        &lt;input type="submit" value="Login"/&gt;
-      &lt;/td&gt;
-    &lt;/tr&gt;
-  &lt;/table&gt;
-&lt;/form&gt;</source>
-
-                <p>Login.java:</p>
-
-                <source xml:space="preserve">
-public abstract class Login extends BasePage
-{
-  public abstract String getUserId();
-  public abstract String getPassword();
-  
-  public void doLogin()
-  {
-    // Talk to back end system, etc.
-  }
-}
-</source>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/form/upload.xml b/tapestry/src/site/xdoc/components/form/upload.xml
deleted file mode 100644
index 2272950..0000000
--- a/tapestry/src/site/xdoc/components/form/upload.xml
+++ /dev/null
@@ -1,232 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Upload</title>
-    </properties>
-    <body>
-
-        <section name="Upload">
-
-            <p>
-                A form element used to handle file uploads. The uploaded file is represented by an
-                instance of
-                <a href="../../apidocs/org/apache/tapestry/request/IUploadFile.html">
-                    IUploadFile
-                </a>
-                .
-            </p>
-
-            <p>
-                The maximum upload size of a file can be set by configuring the
-                <a
-                    href="../../apidocs/org/apache/tapestry/multipart/MultipartDecoder.html">
-                    MultipartDecoder
-                </a>
-                service in hivemind. The default is 10000000(10mb). The <code>maxSize</code> parameter is 
-                specified in bytes, so you will have to give it the long form.
-            </p>
-
-            <section name="Example override of default maximum file upload size.">
-
-                <source xml:space="preserve">
-&lt;implementation service-id="tapestry.multipart.ServletMultipartDecoder"&gt;
-&lt;create-instance class="org.apache.tapestry.multipart.MultipartDecoderImpl,maxSize=-1" model="threaded" /&gt;
-&lt;/implementation&gt; 
-</source>
-            </section>
-
-            <p>
-                <strong>
-                    See also:
-
-                    <a href="../../apidocs/org/apache/tapestry/form/Upload.html">
-                        org.apache.tapestry.form.Upload
-                    </a>
-                    ,
-                    <a href="form.html">Form</a>
-                </strong>
-                ,
-                <a
-                    href="../../apidocs/org/apache/tapestry/multipart/ServletMultipartDecoder.html">
-                    ServletMultipartDecoder
-                </a>
-            </p>
-            
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>file</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/request/IUploadFile.html">
-                                IUploadFile
-                            </a>
-                        </td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            Updated, when the form is submitted, with the name and content uploaded.
-                        </td>
-                    </tr>
-                    <tr>
-
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-
-                            If true, then (on render) the "disabled" attribute is written into the
-                            tag and on submit, the upload will not update its file parameter.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>displayName</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-                            
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>id</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>Sets the id attribute for the rendered <code>&lt;input&gt;</code> element.</td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>Reserved parameters: name, type</p>
-
-            </section>
-
-            <section name="Examples">
-                <p>UploadPage.html</p>
-
-                <source xml:space="preserve"><![CDATA[
-<form jwcid="@Form" listener="listener:formSubmit">
-<label jwcid="@FieldLabel" field="component:upload">File</label>
-<input jwcid="upload@Upload" file="ognl:uploadFile" type="file" displayName="File" validators="validators:required"/>
-<input type="submit" value="Upload"/>
-<span jwcid="@If" condition="ognl: uploadFile &amp;&amp; serverFile">
-<ul>
-  <li>Filename: <span jwcid="@Insert" value="ognl:uploadFile.fileName"/></li>
-  <li>Client path: <span jwcid="@Insert" value="ognl:uploadFile.filePath"/></li>
-  <li>Server Path: <span jwcid="@Insert" value="ognl:serverFile.absolutePath"/></li>
-  <li>File Size: <span jwcid="@Insert" value="ognl:serverFile.length()" format="ognl:numberFormat"/> bytes</li>
-</ul>
-</span>
-</form>
-]]></source>
-
-                <p>UploadPage.java</p>
-
-                <source xml:space="preserve">
-public abstract class UploadPage extends BasePage {
-
-  public abstract IUploadFile getUploadFile();
-  public abstract File getServerFile();
-  public abstract void setServerFile(File file);
-
-  public Format getNumberFormat() {
-    return NumberFormat.getNumberInstance();
-  }
-
-  public void formSubmit(IRequestCycle cycle) {
-      if (getUploadFile() == null) {
-        return;
-      }
-
-      InputStream fis = getUploadFile().getStream();
-      FileOutputStream fos = null;
-
-      try {
-          fos = new FileOutputStream(new  File(getUploadFile().getFileName()));
-          byte[] buffer = new byte[1024];
-          while (true) {
-              int length = fis.read(buffer);
-              if (length &lt;  0) {
-                  break;
-              }
-              fos.write(buffer, 0, length);
-          }
-          fis.close();
-          fos.close();
-          setServerFile(new File(getUploadFile().getFileName()));
-
-      } catch (IOException ioe) {
-          ioe.printStackTrace();
-      } finally {
-          if (fis != null) {
-              try { fis.close(); } catch (IOException ioe) {}
-          }
-          if (fos != null) {
-              try { fos.close(); } catch (IOException ioe) {}
-          }
-      }
-  }
-
-}
-</source>
-
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/any.xml b/tapestry/src/site/xdoc/components/general/any.xml
deleted file mode 100644
index 94a67b1..0000000
--- a/tapestry/src/site/xdoc/components/general/any.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Any</title>
-    </properties>
-    <body>
-
-        <section name="Any">
-
-            <p>
-                A "Swiss Army Knife" component that can emulate any tag whatsoever. The Any
-                component renders the tag for its element in the template, plus any informal
-                parameters, and its body. This is typically used to make certain attributes of a tag
-                dynamic without having to write an entire component for that single purpose.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a
-                        href="../../apidocs/org/apache/tapestry/components/Any.html">
-                        org.apache.tapestry.components.Any
-                    </a>
-                    ,
-                    <a href="if.html">If</a>
-                    ,
-                    <a href="for.html">For</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>element</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td>
-                            <em>From the HTML template</em>
-                        </td>
-                        <td>The element to render.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-                <p>
-                    Certain other components, including
-                    <a href="if.html">If</a>
-                    and
-                    <a href="for.html">For</a>
-                    , can behave much like an Any component, in addition to their normal behavior,
-                    by specifying a value for their element parameter.
-                </p>
-
-            </subsection>
-
-            <subsection name="Example">
-
-
-                <p>
-                    In this example, the Any component is emulating an <code>&lt;img&gt;</code> element, and is
-                    dynamically calculating the URL, width, height, and title from data (presumably
-                    obtained from a database).
-                </p>
-
-                <source xml:space="preserve">
-  
-&lt;h2&gt;Thumbails:&lt;/h2&gt;
-
-&lt;span jwcid="loop"&gt;
-  &lt;p&gt;
-    &lt;img jwcid="@Any" src="ognl:image.thumbURL" width="ognl:image.thumbWidth" height="ognl:image.thumbHeight"
-    alt="ognl:image.title"/&gt;
-    &lt;br/&gt;
-    &lt;span jwcid="@Insert" value="ognl:image.title"/&gt;
-  &lt;/p&gt;
-&lt;/span&gt;
-</source>
-
-                <p>This template is complemented by some details in the specification:</p>
-
-                <source xml:space="preserve">
-  . . .
-  
-  &lt;property name="image"/&gt;
-  
-  &lt;component id="loop" type="Foreach"&gt;
-    &lt;binding name="source" value="thumbnails"/&gt;
-    &lt;binding name="value" value="image"/&gt;
-  &lt;/component&gt;
-  
-  . . .
-</source>
-
-                <p>
-                    The
-                    <a href="RenderBlock.html">RenderBlock</a>
-                    component contains an extensive example that includes the use of the Any
-                    component.
-                </p>
-
-            </subsection>
-
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/block.xml b/tapestry/src/site/xdoc/components/general/block.xml
deleted file mode 100644
index 077a423..0000000
--- a/tapestry/src/site/xdoc/components/general/block.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Block</title>
-    </properties>
-    <body>
-
-        <section name="Block">
-            <p>
-                Contains markup and other components, and defers rendering of its body until invoked
-                by a
-                <a href="renderblock.html">RenderBlock</a>
-                .
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/components/Block.html">
-                        org.apache.tapestry.components.Block
-                    </a>
-                    ,
-                    <a href="renderblock.html">RenderBlock</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-                <p>
-                    <em>No parameters</em>
-                </p>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-
-                <p>
-                    When a
-                    <a href="block.html">Block</a>
-                    component renders normally, it does absolutely nothing. It doesn't render any
-                    tag, or render its body. However, a
-                    <a href="renderblock.html">RenderBlock</a>
-                    component can be passed a Block instance, which will trigger the Block to render
-                    its body.
-                </p>
-
-                <p>
-                    The parameters of the
-                    <a href="renderblock.html">RenderBlock</a>
-                    , including informal parameters, are indirectly available to the Block
-                    component. The OGNL expression components.
-                    <em>block</em>
-                    .getParameter("
-                    <em>name</em>
-                    ") returns the value of a parameter bound to the
-                    <a href="renderblock.html">RenderBlock</a>
-                    which invoked the rendering of the Block's body.
-                </p>
-
-            </section>
-
-            <section name="Example">
-
-
-                <p>
-                    The
-                    <a href="renderblock.html">RenderBlock</a>
-                    component has an extensive example.
-                </p>
-
-            </section>
-
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/body.xml b/tapestry/src/site/xdoc/components/general/body.xml
deleted file mode 100644
index ea439fc..0000000
--- a/tapestry/src/site/xdoc/components/general/body.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Body</title>
-    </properties>
-    <body>
-
-        <section name="Body">
-            <p>
-                Generates the <code>&lt;body&gt;</code> element for the page, and is involved in generating and
-                organizing the JavaScript on the page. You should always use the Body component for
-                your <code>&lt;body&gt;</code> tag, since you can never know which components within the page
-                will require the services it provides.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/html/Body.html">
-                        org.apache.tapestry.html.Body
-                    </a>
-                    ,
-                    <a href="../link/rollover.html">Rollover</a>
-                    ,
-                    <a href="script.html">Script</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>element</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td>body</td>
-                        <td>
-                            The element to use; this can be overriden, for example, when the Body
-                            component is used to generate a <code>&lt;frameset&gt;</code>.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/delegator.xml b/tapestry/src/site/xdoc/components/general/delegator.xml
deleted file mode 100644
index 30fcc3e..0000000
--- a/tapestry/src/site/xdoc/components/general/delegator.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Delegator</title>
-    </properties>
-    <body>
-
-        <section name="Delegator">
-
-            <p>
-                A component which delegates its behavior (that is, the HTML rendered) to some other
-                object.
-                <br />
-                This is occasionally useful when the HTML to render is best generated from pure Java
-                code (or has been provided from some source outside of Tapestry).
-            </p>
-
-            <section name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>delegate</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IRender.html">
-                                IRender
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If specified, the object which will provide the rendering for the
-                            component.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/describe.xml b/tapestry/src/site/xdoc/components/general/describe.xml
deleted file mode 100644
index 966f8e8..0000000
--- a/tapestry/src/site/xdoc/components/general/describe.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Describe</title>
-    </properties>
-    <body>
-
-        <section name="Describe">
-
-            <p>
-                Used to produce an HTML description of an object; typically a table is rendered, and
-                the object's properties are displayed in successive rows of the table. In some
-                cases, a property may be described recursively. Simple objects may be described as
-                strings. The behavior behind this is extensible, defined in terms of contributions
-                to the
-                <a href="../../tapestry-framework/hivedoc/config/tapestry.describe.DescribableStrategies">
-                    tapestry.describe.DescribableStrategies
-                </a>
-                configuration point.
-            </p>
-
-            <p>
-                This component is used internally by Tapestry as part of the default Exception page.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/html/Describe.html">
-                        org.apache.tapestry.html.Describe
-                    </a>
-                    ,
-                    <a href="../../tapestry-framework/hivedoc/service/tapestry.describe.HTMLDescriber">
-                        tapestry.describe.HTMLDescriber
-                    </a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>object</td>
-                        <td>any</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The object to be described.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/else.xml b/tapestry/src/site/xdoc/components/general/else.xml
deleted file mode 100644
index 3c70b77..0000000
--- a/tapestry/src/site/xdoc/components/general/else.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Else</title>
-    </properties>
-    <body>
-
-        <section name="Else">
-
-            <p>
-                Conditionally emulates an element and its attributes and/or includes a block of
-                content if the condition of the previous If component evaluates to false.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/components/ElseBean.html">
-                        org.apache.tapestry.components.ElseBean
-                    </a>
-                    ,
-                    <a href="if.html">If</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>renderTag</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-
-                        <td>
-                            Specifies whether or not to render the html tag name used to reference this
-                            component. This logic also deprecates the <code>element</code> parameter in 
-                            that tag names are already captured from the html temlpate read in, so you
-                            only need to tell the component to render or not render whatever tag you used.
-                            
-                            <span class="info">
-                                <strong>Info:</strong>
-                                <p>
-                                    You can also control the default value of this property via the global
-                                    configuration property <code>org.apache.tapestry.renderTags</code> which 
-                                    is covered in more depth in the 
-                                    <a href="../../usersguide/configuration.html#Configuration%20Properties">configuration section</a>
-                                     of the <a href="../../usersguide/index.html">Users Guide</a>.
-                                </p>
-                            </span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>element</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-
-                        <td>
-                            The element to emulate. If specified, then the component acts like an
-                            <a href="any.html">Any</a>
-                            , emitting an open and close tag. Informal parameters are applied to the
-                            tag.
-                            <br/>
-                            This parameter is now <em>deprecated</em> in favor of the new renderTag 
-                            parameter, the element tag to render is implied by the html used to reference
-                            the component now.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-                <p>
-                    In the example, we say hello to our user if he/she has login, or we ask him/her
-                    login. (Just the same example for If component.)
-                </p>
-                <p>Home.html</p>
-
-                <source xml:space="preserve">
-...
-&lt;p&gt;
-Hello, &lt;span jwcid="@If" condition="ognl:user.login"&gt;&lt;span jwcid="@Insert" value="ognl:user.name"/&gt;&lt;/span&gt;
-&lt;span jwcid="@Else"&gt; please &lt;span jwcid="@PageLink" page="Login"&gt;login&lt;/span&gt;&lt;/span&gt;	
-&lt;/p&gt;
-...
-
-</source>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/exceptiondisplay.xml b/tapestry/src/site/xdoc/components/general/exceptiondisplay.xml
deleted file mode 100644
index 102963d..0000000
--- a/tapestry/src/site/xdoc/components/general/exceptiondisplay.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>ExceptionDisplay</title>
-    </properties>
-    <body>
-
-        <section name="ExceptionDisplay">
-
-
-            <p>
-                A component used on the standard exception page to render a detailed list of
-                exceptions.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../tapestry-contrib/ComponentReference/InspectorButton.html">InspectorButton</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>exceptions</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/util/exception/ExceptionDescription.html">
-                                ExceptionDescription
-                            </a>
-                            []
-                        </td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>Provides the exception descriptions to render.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/for.xml b/tapestry/src/site/xdoc/components/general/for.xml
deleted file mode 100644
index fee7801..0000000
--- a/tapestry/src/site/xdoc/components/general/for.xml
+++ /dev/null
@@ -1,394 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>For</title>
-    </properties>
-    <body>
-
-        <section name="For">
-
-            <p>
-                Loops over a collection of source values. May also emulate an element (like an Any
-                component). If this component is placed in a Form, it will automatically store the
-                collection in Hidden fields so that the structure of the page is preserved when the
-                form is submitted even if the values in the source parameter have changed.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/components/ForBean.html">
-                        org.apache.tapestry.components.ForBean
-                    </a>
-                    ,
-                    <a
-                        href="../../apidocs/org/apache/tapestry/utils/DefaultPrimaryKeyConverter.html">
-                        org.apache.tapestry.utils.DefaultPrimaryKeyConverter
-                    </a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>source</td>
-                        <td>Iterator, Collection, Object[], or Object</td>
-                        <td>yes</td>
-                        <td> </td>
-                        <td>
-                            The source of objects to be iterated, which may be a Collection, an
-                            Iterator, an array of Objects, or a even a single Object (which is
-                            treated as a singleton collection).
-                            <p />
-                            The source parameter may even be null, in which case the For's body is
-                            never renderred.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>value</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If provided, the parameter is updated with the current value on each
-                            iteration.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>index</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If provided, the parameter is updated with the index of the loop on each
-                            iteration.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>renderTag</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-
-                        <td>
-                            Specifies whether or not to render the html tag name used to reference this
-                            component. This logic also deprecates the <code>element</code> parameter in 
-                            that tag names are already captured from the html template read in, so you
-                            only need to tell the component to render or not render whatever tag you used.
-                            
-                            <span class="info">
-                                <strong>Info:</strong>
-                                <p>
-                                    You can also control the default value of this property via the global
-                                    configuration property <code>org.apache.tapestry.renderTags</code> which 
-                                    is covered in more depth in the 
-                                    <a href="../../usersguide/configuration.html#Configuration%20Properties">configuration section</a>
-                                     of the <a href="../../usersguide/index.html">Users Guide</a>.
-                                </p>
-                            </span>
-                        </td>
-                    </tr>
-                    
-                    <tr>
-                        <td>element</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-
-                        <td>
-                            If provided, the component wraps its content with the requested element.
-                            Informal parameters become attributes of that element.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>keyExpression</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        
-                        <td>
-                            Only active in a form. An OGNL expression that returns the primary key
-                            of the iterated value. The primary keys are stored in hidden fields
-                            during rendering and are loaded from the form during a rewind to ensure
-                            that the iterations remain the same.
-                            <p />
-                            This is a simpler, but a less efficient alternative of the 'converter'
-                            parameter. If needed, please use in conjuction with 'fullSource' to
-                            reference objects not currently present in 'source'. Use the
-                            'defaultValue' parameter to define the object to be returned if a value
-                            corresponding to a particular primary key cannot be found.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>fullSource</td>
-                        <td>Iterator, Collection, Object[], or Object</td>
-                        <td>no</td>
-                        <td></td>
-
-                        <td>
-                            Only active in a form. If an object with a representation stored in the
-                            form cannot be found in the 'source' parameter, then the objects
-                            provided by this parameter are searched for a match next.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>defaultValue</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-
-                        <td>
-                            Only active in a form. The value to be used when no match for a given
-                            representation stored in the hidden fields cannot be found.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>converter</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/components/IPrimaryKeyConverter.html">
-                                IPrimaryKeyConverter
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-
-                        <td>
-                            Only active in a form. Defines how the items iterated upon will be
-                            stored in the form as hidden values and how the stored information will
-                            be converted back to objects.
-                            <p />
-                            This interface allows only the primary key of the items to be stored,
-                            rather than the whole item.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>primaryKeys</td>
-                        <td>List</td>
-                        <td>no</td>
-                        <td></td>
-
-                        <td>
-                            Only active in a form. If provided, the parameter is automatically
-                            updated during a rewind with the list of primary keys stored in the
-                            form. The parameter is updated right before the iterations begin in a
-                            rewind and could be used to preload the relevant objects in the provided
-                            'converter'.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>match</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-
-                        <td>
-                            Only active in a form. This parameter allows the matching of the string
-                            representation of the values stored in the hidden fields with that of
-                            the values in 'source'. It guarantees that the values iterated upon are
-                            physically identical to the ones provided.
-                            <p />
-                            The method is sometimes slower than simple unsqueezing, but it
-                            eliminates a number of potential pitfalls. Please disable with caution.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>volatile</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-
-                        <td>
-                            Only active in a form. Determines whether to avoid creating hidden
-                            fields within a form. Using this parameter may make the form structure
-                            different during render and rewind, and cause exceptions as a result.
-                            Please use with caution.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-                <p>
-                    <strong>View list of customers</strong>
-                </p>
-                <p>This example displays a list of customers:</p>
-
-                <source xml:space="preserve">
-&lt;table cellspacing="10"&gt;
-  &lt;tr&gt;
-    &lt;td&gt;ID&lt;/td&gt;
-    &lt;td&gt;Name&lt;/td&gt;
-    &lt;td&gt;Level&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;td colspan="3"&gt;&lt;hr&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr jwcid="@For" source="ognl:customerList" value="ognl:customer" element="tr"&gt;
-    &lt;td&gt;&lt;span jwcid="@Insert" value="ognl:customer.id"/&gt;&lt;/td&gt;
-    &lt;td&gt;&lt;span jwcid="@Insert" value="ognl:customer.fullName"/&gt;&lt;/td&gt;
-    &lt;td&gt;&lt;span jwcid="@Insert" value="ognl:customer.memberLevel"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-</source>
-
-                <p>
-                    <br />
-                    <strong>Edit a list of customers</strong>
-                </p>
-                <p>
-                    This examples allows the user to edit a list of customers. The 'keyExpression'
-                    parameter is optional. It tells the component to use the 'id' expression to
-                    obtain the primary key of the customers. The parameter is particularly useful
-                    when the Customer object is not Serializable, as only the primary key is stored
-                    in the hidden fields, rather than the full Customer record.
-                </p>
-
-                <source xml:space="preserve">
-&lt;table cellspacing="10"&gt;
-  &lt;tr&gt;
-    &lt;td&gt;ID&lt;/td&gt;
-    &lt;td&gt;Name&lt;/td&gt;
-    &lt;td&gt;Level&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;td colspan="3"&gt;&lt;hr&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr jwcid="@For" source="ognl:customerList" keyExpression="id"
-      value="ognl:customer" element="tr"&gt;
-    &lt;td&gt;&lt;span jwcid="@Insert" value="ognl:customer.id"/&gt;&lt;/td&gt;
-    &lt;td&gt;&lt;span jwcid="@TextField" value="ognl:customer.fullName"/&gt;&lt;/td&gt;
-    &lt;td&gt;&lt;span jwcid="@PropertySelection" value="ognl:customer.memberLevel"
-              model="ognl:@com.mycorp.Customer@MEMBER_LEVEL_MODEL"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-</source>
-
-            </section>
-
-            <section name="Hints">
-
-
-                <p>
-                    <strong>Representing data as a string</strong>
-                </p>
-                <p>
-                    If the
-                    <a href="for.html">For</a>
-                    component is used in a form, it will automatically convert the provided data to
-                    strings and store it in hidden fields in order to ensure that the form is
-                    processed correctly when submitted.
-                </p>
-                <p>
-                    If the data is in one of the basic types or if the data is serializable,
-                    Tapestry will automatically build string representation of the objects. If it is
-                    not serializable however, an
-                    <code>ApplicationRuntimeException</code>
-                    will be thrown with the message 'Could not find a strategy instance for class'.
-                </p>
-                <p>There are several options to resolve this problem:</p>
-                <ol>
-                    <li>
-                        <p>
-                            <strong>Store only the primary keys of your data objects</strong>
-                            <br />
-                            You can define the name of a property that contains the primary keys
-                            using the
-                            <code>keyExpression</code>
-                            parameter.
-                            <br />
-                            The second example shows that approach and uses the
-                            <code>id</code>
-                            property to represent the object.
-                            <br />
-                            Alternatively, you can implement the
-                            <code>IPrimaryKeyConverter</code>
-                            interface and use the
-                            <code>converter</code>
-                            parameter to define how the primary key is obtained from the object.
-                        </p>
-                    </li>
-                    <li>
-                        <strong>Make your data class Serializable.</strong>
-                        <br />
-                        Tapestry will automatically convert Serializable data into a string and
-                        store it in the form.
-                    </li>
-                    <li>
-                        Define your own way to convert the class into a string. To do this,
-                        implement the
-                        <code>SqueezeAdaptor</code>
-                        interface and register your squeeze adaptor in the WEB-INF/hivemodule.xml
-                        file. Please refer to the documentation for more information.
-                    </li>
-                    <li>
-                        Make the For component volatile by setting the
-                        <code>volatile</code>
-                        parameter to 'true'. This approach is discouraged, since the data will not
-                        be stored in the form as a result. That may cause a
-                        <code>StaleLinkException</code>
-                        to be thrown if the data changes between the form rendering and the form
-                        submission. To avoid this problem you must make sure that the data stays the
-                        same.
-                    </li>
-                </ol>
-                <p>Either of the above options will work, but the first two are preferred.</p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/frame.xml b/tapestry/src/site/xdoc/components/general/frame.xml
deleted file mode 100644
index a335c0b..0000000
--- a/tapestry/src/site/xdoc/components/general/frame.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Frame</title>
-    </properties>
-    <body>
-
-        <section name="Frame">
-
-            <p>
-                Provides the HTML <code>&lt;frame&gt;</code> element within a <code>&lt;frameset&gt;</code>, 
-                inserting the specified Tapestry page as the content of the frame.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="renderblock.html">RenderBlock</a>
-                    ,
-                    <a href="renderbody.html">RenderBody</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>page</td>
-                        <td>String</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The name of the page to display in the frame.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>src</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-                <p>This example is under construction.</p>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/if.xml b/tapestry/src/site/xdoc/components/general/if.xml
deleted file mode 100644
index 46f0f76..0000000
--- a/tapestry/src/site/xdoc/components/general/if.xml
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>If</title>
-    </properties>
-    <body>
-
-        <section name="If">
-
-            <p>
-                Conditionally emulates an element and its attributes and/or includes a block of
-                content if a condition is met.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/components/IfBean.html">
-                        org.apache.tapestry.components.IfBean
-                    </a>
-                    ,
-                    <a href="else.html">Else</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>condition</td>
-                        <td>boolean</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The condition to evaluate.</td>
-                    </tr>
-                    <tr>
-                        <td>conditionValue</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The value of the condition. During render this is obtained from the
-                            condition parameter. During rewind it is the submitted condition.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>listener</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-
-                        <td>
-                            The listener is called before the component renders itself, regardless
-                            of the value of the condition parameter.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>renderTag</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-
-                        <td>
-                            Specifies whether or not to render the html tag name used to reference this
-                            component. This logic also deprecates the <code>element</code> parameter in 
-                            that tag names are already captured from the html temlpate read in, so you
-                            only need to tell the component to render or not render whatever tag you used.
-                            
-                            <span class="info">
-                                <strong>Info:</strong>
-                                <p>
-                                    You can also control the default value of this property via the global
-                                    configuration property <code>org.apache.tapestry.renderTags</code> which 
-                                    is covered in more depth in the 
-                                    <a href="../../usersguide/configuration.html#Configuration%20Properties">configuration section</a>
-                                     of the <a href="../../usersguide/index.html">Users Guide</a>.
-                                </p>
-                            </span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>element</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-
-                        <td>
-                            The element to emulate. If specified, then the component acts like an
-                            <a href="any.html">Any</a>
-                            , emitting an open and close tag. Informal parameters are applied to the
-                            tag.
-                            <br/>
-                            This parameter is now <em>deprecated</em> in favor of the new renderTag 
-                            parameter, the element tag to render is implied by the html used to reference
-                            the component now.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>volatile</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-
-                        <td>
-                            Only active in a form. Determines whether to avoid creating hidden
-                            fields within a form. Using this parameter may make the form structure
-                            different during render and rewind, and cause exceptions as a result.
-                            Please use with caution.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>name</em>
-                    ,
-                    <em>form</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-
-                <p>
-                    In this example we say hello to our user if he/she has login, or we ask him/her
-                    login.
-                </p>
-                <p>Home.html</p>
-
-                <source xml:space="preserve">
-...
-&lt;p&gt;
-Hello, &lt;span jwcid="@If" condition="ognl:user.login"&gt;&lt;span jwcid="@Insert" value="ognl:user.name"/&gt;&lt;/span&gt;
-&lt;span jwcid="@Else"&gt;please &lt;span jwcid="@PageLink" page="Login"&gt;login&lt;/span&gt;&lt;/span&gt;
-&lt;/p&gt;
-...
-
-</source>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/image.xml b/tapestry/src/site/xdoc/components/general/image.xml
deleted file mode 100644
index 54cdc6d..0000000
--- a/tapestry/src/site/xdoc/components/general/image.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Image</title>
-    </properties>
-    <body>
-
-        <section name="Image">
-
-            <p>
-                Displays an image, deriving the source URL for the image from an asset.
-                <br />
-                <a href="../link/rollover.html">Rollover</a>
-                is a similar component that can create dynamic mouse-over effects as well.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../form/imagesubmit.html">ImageSubmit</a>
-                    ,
-                    <a href="../link/rollover.html">Rollover</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>image</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The image to show.</td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>src</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-                <p>
-                    Inserts the static context path based image.
-                    <br />
-                    This example uses a <code>&lt;context-asset&gt;</code> to reference the image.
-                </p>
-                <img src="../../images/ComponentReference/PoweredByTapestry.png"
-                    alt="PoweredByTapestry Screen Shot" />
-                <p>HTML Template</p>
-                <source xml:space="preserve">
-&lt;table cellpadding="8" valign="middle"&gt;
-&lt;tr&gt;
- &lt;td&gt;
-  &lt;a href="http://jakarta.apache.org/tapestry/"&gt;
-   &lt;img jwcid="@Image" image="asset:imageAsset" alt="View Tapestry Home"/&gt;
-  &lt;/a&gt;
- &lt;/td&gt;
- &lt;td&gt;
-  &lt;font color="navy" size="+2"&gt;&lt;b&gt;&lt;i&gt;Powered by Tapestry&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;
- &lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-</source>
-
-                <p>Page Specification</p>
-                <source xml:space="preserve">
-&lt;asset name="imageAsset" path="/images/poweredby.png"/&gt;
-</source>
-
-                <p>
-                    <br />
-                    Inserts the dynamic image obtained from the page's NewsItem property.
-                    <br />
-                    This example uses the
-                    <a href="../../apidocs/org/apache/tapestry/asset/ExternalAsset.html">
-                        ExternalAsset
-                    </a>
-                    to reference the image's URL.
-                </p>
-                <img src="../images/ComponentReference/Image.png"
-                    alt="Image Screen Shot" />
-                <p>HTML Template</p>
-                <source xml:space="preserve">
-&lt;table cellpadding="8"&gt;
-&lt;tr&gt;
- &lt;td&gt;
-  &lt;h4&gt;&lt;span jwcid="@Insert" value="ognl:newsItem.title"/&gt;&lt;/h4&gt;
-  &lt;span jwcid="@Insert" value="ognl:newsItem.body"/&gt;
-  &lt;p&gt;
-  Date : &lt;span jwcid="@Insert" value="ognl:newsItem.date" format="ognl:@NewsItemPage@DATE_FORMAT"/&gt;
- &lt;/td&gt;
- &lt;td&gt;
-  &lt;img jwcid="@Image" image="ognl:newsItem.imageAsset" alt="ognl:newsItem.summary"/&gt;
- &lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-</source>
-
-                <p>Page Specification</p>
-                <source xml:space="preserve">
-&lt;property name="orderItem" type="com.dsconsulting.cms.model.NewsItem"/&gt;
-</source>
-
-                <p>Java classes</p>
-                <source xml:space="preserve">
-public abstract class NewsItemPage extends BasePage {
-    public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd MMM yyyy");
-
-    public abstract NewsItem getNewsItem();
-}
-
-public class NewsItem implements Serializable {
-    private String title;
-    private String body;
-    private String summary;
-    private Date date;
-    private String imageURL;
-
-    public NewsItem(String title, String summary, String body, Date date,
-            String imageURL) {
-        this.title = title;
-        this.body = body;
-        this.summary = summary;
-        this.date = date;
-        this.imageURL = imageURL;
-    }
-
-    public String getTitle() { return title; }
-
-    public String getBody() { return body; }
-
-    public String getSummary() { return summary; }
-
-    public String getDate() { return date; }
-
-    public IAsset getImageAsset() { return new ExternalAsset(imageURL, null); }
-}
-</source>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/insert.xml b/tapestry/src/site/xdoc/components/general/insert.xml
deleted file mode 100644
index e482ea6..0000000
--- a/tapestry/src/site/xdoc/components/general/insert.xml
+++ /dev/null
@@ -1,249 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Insert</title>
-    </properties>
-    <body>
-
-        <section name="Insert">
-
-            <p>
-                Allows for the insertion of text (with a specified format) into the HTML response. The text itself can
-                be filtered or not. When filtering is enabled (the default), certain characters (such as
-                <code>&lt; and &gt;</code>
-                ) are escaped into HTML safe representations (such as
-                <code>&amp;lt; and &amp;gt;</code>
-                ).
-            </p>
-
-            <p>
-                Also allows insertion of multi-line text, breaking it into individual lines according to a mode.
-                Commonly used to properly display the data provided by a user via the
-                <a href="../form/textarea.html">TextArea</a>
-                component.
-            </p>
-
-            <p>
-                <strong>See also:</strong>
-                <a href="../../apidocs/org/apache/tapestry/components/Insert.html">
-                    org.apache.tapestry.components.Insert
-                </a>
-                <a href="renderblock.html">RenderBlock</a>
-                ,
-                <a href="renderbody.html">RenderBody</a>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The value to be inserted. If the binding is null, then nothing is inserted. Any object may
-                            be inserted, the
-                            <code>toString()</code>
-                            method is used to convert it to a printable value.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>format</td>
-                        <td>
-                            <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/Format.html">Format</a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            An optional format object used to convert the value parameter for insertion into the HTML
-                            response.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>class</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If specified, then the output is wrapped in an HTML tag, using the value specified as the
-                            CSS class. (the html tag being whatever you used to reference the component to begin with )
-                            <br />
-                            <br />
-                            <span class="warn">
-                                <strong>Warning:</strong>
-                                <p>
-                                    Using class to force tag rendering is now deprecated, please use the renderTag
-                                    parameter to control tag rendering.
-                                </p>
-                            </span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>renderTag</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If specified, then the output is wrapped in an HTML tag.
-
-                            <p>Example:</p>
-                            <source><![CDATA[
-<div jwcid="@Insert" value="literal:TestValue" class="myStyle" id="An Id" renderTag="true">
-Text
-</div>
-]]></source>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>raw</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then the method
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IMarkupWriter.html#printRaw(java.lang.String)">
-                                <code>IMarkupWriter.printRaw(String)</code>
-                            </a>
-                            is used, rather than
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IMarkupWriter.html#print(java.lang.String)">
-                                <code>IMarkupWriter.print(String)</code>
-                            </a>
-                            .
-                            <p>
-                                This bypasses the normal safeguards and is used when the value to
-                                insert contains HTML markup that should be emitted as is.
-                            </p>
-
-                        </td>
-                    </tr>
-                     <tr>
-                        <td>mode</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/components/InsertMode.html">
-                                InsertMode
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Controls how each line is rendered.
-                            
-                            <p>
-                                The OGNL expression
-                                <code>@org.apache.tapestry.components.InsertMode@PARAGRAPH</code> OR
-                                <code>@org.apache.tapestry.components.InsertMode@BREAK</code>
-                                 can be used to specify paragraph or line break rendering mode.
-                            </p>
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-                
-                <p>
-                    The value parameter is split into multiple lines when specifying a "mode" paramater, and 
-                    each line is printed. The BREAK
-                    <em>mode</em>
-                    renders a
-                    <code>&lt;br/&gt;</code>
-                    tag between lines (that is, before each line after the first line output). The alternate mode
-                    renders
-                    <code>&lt;p&gt; and &lt;/p&gt;</code>
-                    tags around each line.
-                </p>
-                
-            </section>
-
-            <section name="Examples">
-                <p>
-                    Inserts the pages dueDate and applies the specified DateFormat and HTML class.
-                    Example output:
-                </p>
-
-                <img src="../../images/ComponentReference/Insert.png"
-                    alt="Insert Screen Shot" />
-
-                <p>HTML template</p>
-
-                <source xml:space="preserve">
-&lt;table class="examples" cellpadding="8"&gt;
-&lt;tr&gt;
- &lt;td&gt;
- The order was due on the &lt;font color="red"&gt;&lt;b&gt;
- &lt;span jwcid="@Insert" value="ognl:date" format="ognl:dateFormat" class="ognl:dueClass"&gt;21 January 2002&lt;/span&gt;. 	
- &lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-</source>
-
-                <p>
-                    This will extract the date and dueClass properties from the page. It will also
-                    obtain the dateFormat property (which is lazily instantiated), and use that to
-                    format the date before inserting it.
-                </p>
-
-
-                <p>Java class</p>
-
-                <source xml:space="preserve">
-public abstract class EnquiryPage extends BasePage 
-{
-  private Format _dateFormat;
-
-  public Format getDateFormat()
-  {
-    if (_dateFormat == null)
-      _dateFormat = new SimpleDateFormat("dd MMM yyyy");
-      
-    return _dateFormat;
-  }
-
-  public abstract Date getDueDate();
-
-  public abstract String getDueClass();
-}
-</source>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/inserttext.xml b/tapestry/src/site/xdoc/components/general/inserttext.xml
deleted file mode 100644
index 66263c0..0000000
--- a/tapestry/src/site/xdoc/components/general/inserttext.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>InsertText</title>
-    </properties>
-    <body>
-
-        <section name="InsertText">
-
-            <p>
-                Inserts multi-line text, breaking it into individual lines according to a mode. Commonly used to
-                properly display the data provided by a user via the
-                <a href="../form/textarea.html">TextArea</a>
-                component.
-            </p>
-
-            <span class="warn">
-                <strong>Warning:</strong>
-                <p>
-                    This component has now been deprecated in favor of the additional functionality
-                    added to the <a href="insert.html">Insert</a> component.
-                </p>
-            </span>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/html/InsertText.html">
-                        org.apache.tapestry.html.InsertText
-                    </a>
-                    ,
-                    <a href="../../apidocs/org/apache/tapestry/html/InsertTextMode.html">
-                        org.apache.tapestry.html.InsertTextMode
-                    </a>
-                    ,
-                    <a href="../form/textarea.html">TextArea</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>value</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The multi-line string to render.</td>
-                    </tr>
-
-                    <tr>
-                        <td>mode</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/html/InsertTextMode.html">InsertTextMode</a>
-                        </td>
-                        <td>no</td>
-                        <td>BREAK</td>
-                        <td>Controls how each line is rendered.</td>
-                    </tr>
-
-                    <tr>
-                        <td>raw</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then output is not filtered for HTML entities. Used when the value parameter
-                            contains markup that should be rendered as-is.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-                <p>
-                    The value parameter is split into multiple lines, and each line is printed. The default
-                    <em>mode</em>
-                    renders a
-                    <code>&lt;br/&gt;</code>
-                    tag between lines (that is, before each line after the first line output). The alternate mode
-                    renders
-                    <code>&lt;p&gt; and &lt;/p&gt;</code>
-                    tags around each line.
-                </p>
-            </section>
-
-            <p>
-                The OGNL expression
-                <code>@org.apache.tapestry.html.InsertTextMode@PARAGRAPH</code>
-                can be used to specify paragraph rendering mode.
-            </p>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/invokelistener.xml b/tapestry/src/site/xdoc/components/general/invokelistener.xml
deleted file mode 100644
index a38ef6d..0000000
--- a/tapestry/src/site/xdoc/components/general/invokelistener.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>InvokeListener</title>
-    </properties>
-    <body>
-
-        <section name="InvokeListener">
-
-            <p>
-                Invoke a listener during the render of the page. Parameters may be passed to the
-                listener.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a
-                        href="../../apidocs/org/apache/tapestry/components/InvokeListener.html">
-                        org.apache.tapestry.components.InvokeListener
-                    </a>
-                    ,
-                    <a href="delegator.html">Delegator</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>listener</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>The listener to invoke. If this parameter is not provided,
-	                        Tapestry will attempt to find a listener with the capitalized id of the
-	                        component, prefixed by "do". For example, jwcid="clear@InvokeListener" would
-	                        expect a listener called doClear().</td>
-                    </tr>
-
-                    <tr>
-                        <td>parameters</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Parameter(s) gathered at the time the listener is invoked, supplied as
-                            listener parameters in the IRequestCycle available to the listener.
-                            <p>
-                                If the parameter is a Collection, it will be converted to an Object
-                                array (to match the <code>IRequestCycle getListenerParameters()</code>
-                                signature).
-                            </p>
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-                <p>
-                    This component does not render any output at all. The component is a placeholder
-                    within the page or component template that marks a point where logic within the
-                    Java class should be executed. A typical use of this is to setup properties
-                    needed by components within the template, for example, to fetch an object from a
-                    database so that other components may read or update its properties.
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/relation.xml b/tapestry/src/site/xdoc/components/general/relation.xml
deleted file mode 100644
index 2b87db7..0000000
--- a/tapestry/src/site/xdoc/components/general/relation.xml
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005, 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Relation</title>
-    </properties>
-    <body>
-
-        <section name="Relation">
-
-            <p>
-                Creates a relationship between two documents. Examples of such relationships
-                include: stylesheet, alternate stylesheet, shortcut icon, copyright, bookmark,
-                chapter, glossary, help, home, next, prev, e.t.c. 
-            </p>
-            <p>
-                Note that a Shell component is required when using the Relation element. 
-                The Shell component is responsible for gathering all Relation
-                components found in a page, and rendering them inside the 
-                <code>&lt;head&gt;</code> tag.
-            </p>            
-            <p>
-                <strong>See also:</strong>
-                <a href="style.html">Style</a>
-                ,
-                <a href="shell.html">Shell</a>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>href</td>
-                        <td>String or 
-                        <a href="../../apidocs/org/apache/tapestry/IAsset.html">IAsset</a>
-                        </td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The target URL of the related resource.</td>
-                    </tr>
-                    
-                    <tr>
-                        <td>rel</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>literal:stylesheet</td>
-                        <td>Defines the relationship between the current document and the targeted document.</td>
-                    </tr> 
-                    
-                    <tr>
-                        <td>type</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>literal:text/css</td>
-                        <td>Specifies the MIME type of the target URL.</td>
-                    </tr>                      
-                    
-                    <tr>
-                        <td>rev</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>Defines the relationship between the targeted document and the current document, 
-                        i.e. the reverse relationship.</td>
-                    </tr>                     
-                    
-                    <tr>
-                        <td>title</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>The title of the relation.</td>
-                    </tr> 
-                    
-                    <tr>
-                        <td>media</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>Specifies on which device the document will be displayed.</td>
-                    </tr>                                                                                                 
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-                <p>
-                    This example demonstrates how a component (in this case Article) can declare
-                    relationships to external documents. In this case, all declarations
-                    (a stylesheet, a shortcut icon and a copyright document) are rendered inside the 
-                    <code>&lt;head&gt;</code> tag of the containing page.
-                </p>
-
-                <p>Home.html</p>
-                <source xml:space="preserve">
-&lt;html jwcid="@Shell" title="Relation Example"&gt;
-   &lt;body jwcid="@Body"&gt;
-      &lt;span jwcid="@Article"/>
-  &lt;/body&gt;
-&lt;/html&gt;
-</source>
-                <p>Article.html</p>
-                <source xml:space="preserve">
-&lt;link jwcid="@Relation" href="main.css" media="all"/&gt;                
-&lt;link jwcid="@Relation" rel="shortcut icon" href="favicon.ico" type="image/gif"/&gt;
-&lt;link jwcid="@Relation" rel="copyright" href="http://www.gnu.org/copyleft/fdl.html"/&gt;  
-Article details ...
-</source>
-                <p>Article.jwc</p>
-                <source xml:space="preserve">
-&lt;component-specification allow-body="yes" allow-informal-parameters="no"&gt;
-&lt;/component-specification&gt;
-</source>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/renderblock.xml b/tapestry/src/site/xdoc/components/general/renderblock.xml
deleted file mode 100644
index e626c5a..0000000
--- a/tapestry/src/site/xdoc/components/general/renderblock.xml
+++ /dev/null
@@ -1,374 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>RenderBlock</title>
-    </properties>
-    <body>
-
-        <section name="RenderBlock">
-
-            <p>
-                Renders the body of a
-                <a href="block.html">Block</a>
-                component, which may be selected dynamically. The
-                <a href="block.html">Block</a>
-                may be on the same page as the RenderBlock or on another page entirely.
-            </p>
-
-            <span class="warn">
-                <strong>Warning:</strong>
-                <p>
-                The
-                <a
-                    href="../../apidocs/org/apache/tapestry/event/PageBeginRenderListener.html">
-                    PageBeginRenderListener
-                </a>
-                (and
-                <a
-                    href="../../apidocs/org/apache/tapestry/event/PageEndRenderListener.html">
-                    PageEndRenderListener
-                </a>
-                ) event notications only go to the
-                <em>active page</em>
-                (the active page is the page that renders the response). It is possible to pass a
-                <a href="block.html">Block</a>
-                from an entirely different page to a RenderBlock, but render listeners of both types
-                on the non-active pages will
-                <em>not</em>
-                be notified.
-                </p>
-            </span>
-
-            <p>
-                <strong>
-                    See also:
-                    <a
-                        href="../../apidocs/org/apache/tapestry/components/RenderBlock.html">
-                        org.apache.tapestry.components.RenderBlock
-                    </a>
-                    ,
-                    <a href="block.html">Block</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>block</td>
-                        <td>
-                            <a href="block.html">Block</a>
-                        </td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The
-                            <a href="block.html">Block</a>
-                            to render.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-                <p>
-                    Informal parameters are allowed, but are not used by the RenderBlock component.
-                    Instead, they are used to pass information to the
-                    <a href="block.html">Block</a>
-                    itself. The Block's invoker property will be the
-                    <a href="renderblock.html">RenderBlock</a>
-                    that invokes it (in 3.0, this property was called "inserter", which is
-                    maintained for backwards compatibility). The parameters of the RenderBlock are
-                    available via the <code>getParameter()</code> method of
-                    <a href="block.html">Block</a>
-                    . This is most useful when the RenderBlock and Block are contained within
-                    different components or even different pages.
-                </p>
-
-            </section>
-
-            <section name="Example">
-
-
-                <p>
-                    This example shows a page with a custom TabPanel component. When a user selects
-                    a tab, TabPanel switches content. Each tab content is defined by a Block. The
-                    final result shows a tab view that highlights the currently selected tab:
-
-                </p>
-
-                <img src="../../images/ComponentReference/RenderBlock.png"
-                    alt="RenderBlock Screen Shot" />
-
-                <p>First we'll show a page that makes use of the TabPanel component.</p>
-
-                <p>TabTest.html:</p>
-
-                <source xml:space="preserve">
-&lt;html jwcid="@Shell" title="TabPanel Test"&gt;
-  &lt;body&gt;
-  &lt;span jwcid="@TabPanel" blockIds="ognl:{'berlin', 'rome', 'tokyo'}" selectColor="#FFFF00" unSelectColor="#CCFFFF" borderColor="#00CC33"/&gt;
-
-  &lt;span jwcid="berlin@Block"&gt;
-    &lt;h1&gt;Berlin&lt;/h1&gt;
-  &lt;/span&gt;
-
-  &lt;span jwcid="rome@Block"&gt;
-    &lt;h1&gt;Rome&lt;/h1&gt;
-  &lt;/span&gt;
-
-  &lt;span jwcid="tokyo@Block"&gt;
-    &lt;h1&gt;Tokyo&lt;/h1&gt;
-  &lt;/span&gt;
-  &lt;/body&gt;
-&lt;/html&gt;
-</source>
-
-                <p>
-                    For simplicity, this example uses an
-                    <em>engineered naming coincidence</em>
-                    : the names of the
-                    <a href="block.html">Block</a>
-                    components matches the localized message key used to obtain the title. In this
-                    case, the Blocks contain just a snippet of HTML ... but they could contain any
-                    valid markup, including components, links, forms, or other complex components.
-                    The use of
-                    <a class="externalLink" href="http://www.ognl.org">OGNL</a>
-                    makes it easy to assemble a list of strings, the component ids for the Blocks,
-                    and pass that list into the TabPanel component.
-                </p>
-
-                <p>TabTest.properties:</p>
-
-                <source xml:space="preserve">
-berlin=Berlin
-rome=Rome
-tokyo=Tokyo
-</source>
-
-                <p>
-                    Most of the interesting parts, including the use of the RenderBlock component,
-                    occurs inside the TabPanel component specification and template.
-                </p>
-
-                <p>TabPanel.html:</p>
-
-                <source xml:space="preserve">
-&lt;table border="0" width="50%" cellspacing="0" cellpadding="0"&gt;
-  &lt;tr&gt;
-    &lt;td width="10"&gt;&amp;nbsp;&lt;/td&gt;
-    &lt;td&gt;
-      &lt;table border="0" cellspacing="0" cellpadding="5"&gt;
-        &lt;tr&gt;
-          &lt;span jwcid="loop"&gt;
-            &lt;td jwcid="tab"&gt;
-              &lt;a jwcid="link"&gt;
-                &lt;span jwcid="@Insert" value="ognl:container.messages.getMessage(blockId)"&gt;Tab Title&lt;/span&gt;
-              &lt;/a&gt;
-            &lt;/td&gt;
-            &lt;td width="1"&gt;&lt;/td&gt;
-          &lt;/span&gt;
-        &lt;/tr&gt;
-      &lt;/table&gt;
-    &lt;/td&gt;
-    &lt;td width="10"&gt;&amp;nbsp;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;td jwcid="@Any" height="5" bgcolor="ognl:borderColor" colspan="3"&gt;&amp;nbsp;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;td jwcid="@Any" width="10" bgcolor="ognl:borderColor"&gt;&amp;nbsp;&lt;/td&gt;
-    &lt;td align="center"&gt;
-      &lt;span jwcid="@RenderBlock" block="ognl:selectedBlock"&gt;Page content goes here&lt;/span&gt;
-    &lt;/td&gt;
-    &lt;td jwcid="@Any" width="10" bgcolor="ognl:borderColor"&gt;&amp;nbsp;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;td jwcid="@Any" height="5" bgcolor="ognl:borderColor" colspan="3"&gt;&amp;nbsp;&lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-</source>
-
-                <p>The key concepts shown here are:</p>
-
-                <ul>
-                    <li>
-                        The loop component, which iterates over the blockIds parameter (a List of
-                        strings), setting the blockId property on each pass
-                    </li>
-                    <li>
-                        The @
-                        <a href="insert.html">Insert</a>
-                        component, which users the current blockId to look up a localized message in
-                        the TabPanel component's container (the TabTest page)
-                    </li>
-                    <li>
-                        The RenderBlock component, which uses the component's selectedBlock property
-                        to determine what
-                        <a href="block.html">Block</a>
-                        to actually render
-                    </li>
-                    <li>
-                        The use of the @
-                        <a href="any.html">Any</a>
-                        component to render several <code>&lt;td&gt;</code> elements with the current bgcolor
-                        attribute.
-                    </li>
-                </ul>
-
-                <p>Several of the details are filled out in the component specification.</p>
-
-                <p>TabPanel.jwc:</p>
-
-                <source xml:space="preserve">
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE component-specification
-  PUBLIC "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd"&gt;
-
-&lt;component-specification class="com.example.components.TabPanel" allow-body="no" allow-informal-parameters="no"&gt;
-
-  &lt;property name="selectedBlockId" persist="session"/&gt;
-
-  &lt;parameter name="blockIds" required="yes"/&gt;
-  &lt;parameter name="borderColor" required="yes"/&gt;
-  &lt;parameter name="selectColor" default-value="#7D000D"/&gt;
-  &lt;parameter name="unSelectColor" default-value="#C0C0C0"/&gt;
-
-  &lt;component id="loop" type="Foreach"&gt;
-    &lt;binding name="source" value="blockIds"/&gt;
-    &lt;binding name="value" value="blockId"/&gt;
-  &lt;/component&gt;
-  
-  &lt;component id="tab" type="Any"&gt;
-    &lt;binding name="bgcolor"&gt;
-      tabSelected ? selectColor : unSelectColor
-    &lt;/binding&gt;
-  &lt;/component&gt;
-      
-  &lt;component id="link" type="DirectLink"&gt;
-    &lt;binding name="listener" value="listener:doClick"/&gt;
-    &lt;binding name="parameters" value="blockId"/&gt;
-    &lt;binding name="disabled" value="tabSelected"/&gt;
-  &lt;/component&gt;
-&lt;/component-specification&gt;
-
-
-</source>
-
-                <p>
-                    Several bindings in the specification depend on the tabSelected property, which
-                    is a synthetic property calculated in Java code. In addition, the @
-                    <a href="../link/directlink.html">DirectLink</a>
-                    component is configured to pass the block id in the URL as a listener parameter.
-                </p>
-
-                <p>TabPanel.java:</p>
-
-                <source xml:space="preserve">
-package com.example.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.components.Block;
-
-import java.util.List;
-
-public abstract class TabPanel extends BaseComponent
-{
-    // Persistent
-    public abstract String getSelectedBlockId();
-    public abstract void setSelectedBlockId(String id);
-
-    public abstract List getBlockIds();
-
-    // Current block id within the loop
-    public abstract String getBlockId();
-    
-    public Block getSelectedBlock()
-    {
-      String selectedId = getSelectedBlockId();
-      
-      if (selectedId == null)
-        selectedId = (String) getBlockIds().get(0);
-        
-      return (Block) getContainer().getComponent(selectedId);   
-    }
-
-    public boolean isTabSelected()
-    {
-      String selectedId = getSelectedBlockId();
-      
-      if (selectedId == null)
-        selectedId = (String) getBlockIds().get(0);
-        
-      return getBlockId().equals(selectedId);
-    }
-
-    public void doClick(String selectedId) 
-    {
-      setSelectedBlockId(selectedId);
-    }
-}
-</source>
-
-                <p>
-                    The only major trick here is that initially the persistent selectedBlockId
-                    property will be null, and we have to work around it by treating the first
-                    element in the blockIds parameter as the default selectedBlockId. The doClick()
-                    listener method is very simple; the blockId that was passed in the URL is
-                    obtained and used to update the selectedBlockId property, which was declared
-                    persistent in the specification.
-                </p>
-
-                <p>
-                    Note that we don't store the
-                    <a href="block.html">Block</a>
-                    <em>instance</em>
-                    as a persistent property ... components are not serializable and should never be
-                    stored as persistent properties. We store the id needed to locate the
-                    <a href="block.html">Block</a>
-                    .
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/renderbody.xml b/tapestry/src/site/xdoc/components/general/renderbody.xml
deleted file mode 100644
index 7d0c5ef..0000000
--- a/tapestry/src/site/xdoc/components/general/renderbody.xml
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>RenderBody</title>
-    </properties>
-    <body>
-
-        <section name="RenderBody">
-
-            <p>
-                Renders the body (static HTML and components) wrapped by the container of the
-                RenderBody component. Components which have HTML templates and can wrap other
-                elements should include exactly one RenderBody component in their template.
-            </p>
-            <p>
-                This component is very useful for creating a common navigational component used by
-                multiple pages of an application. Typically you create a common navigational
-                component which contains navigational links
-                <a href="../link/pagelink.html">PageLink</a>
-                to other pages and a RenderBody component which will insert the actual content of
-                the page. The application pages then use the navigational component as their first
-                element, and then their usual content. When the pages renders, it renders the
-                surrounding navigational component and then the page's content.
-            </p>
-            <p>
-                <strong>See also:</strong>
-                <a href="block.html">Block</a>
-                ,
-                <a href="insert.html">Insert</a>
-                ,
-                <a href="renderblock.html">RenderBlock</a>
-                ,
-                <a href="inserttext.html">InsertText</a>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <td>None</td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-                <p>
-                    This example shows an implementation of the classical Border component, an
-                    application specific component. It is a common practice to use a Border
-                    component to provide common layout to almost all of application pages.
-                </p>
-                <img src="../../images/ComponentReference/RenderBody.png"
-                    alt="RenderBody Screen Shot" />
-                <p>Template</p>
-                <source xml:space="preserve">
-&lt;span jwcid="@Border"&gt;
-&lt;H1 align=center&gt;&lt;FONT color=#ff3333&gt;Agnosis&lt;/FONT&gt;&lt;/H1&gt;
-&lt;TABLE align=center border=0&gt;
-   &lt;TR&gt;
-      &lt;TD&gt;
-         &lt;P&gt;
-            &lt;B&gt;A&lt;/B&gt;GNOSIS feliz
-            &lt;BR/&gt;
-            &lt;B&gt;G&lt;/B&gt;racias al ciego destino
-            &lt;BR/&gt;
-            &lt;B&gt;N&lt;/B&gt;ada es constante
-            &lt;BR/&gt;
-            &lt;B&gt;O&lt;/B&gt;lvidados por el Hado
-            &lt;BR/&gt;
-            &lt;B&gt;S&lt;/B&gt;i El existe
-            &lt;BR/&gt;
-            &lt;B&gt;I&lt;/B&gt;ncomprensible y eterno
-            &lt;BR/&gt;
-            &lt;B&gt;S&lt;/B&gt;ilencio
-         &lt;/P&gt;
-      &lt;/TD&gt;
-   &lt;/TR&gt;
-&lt;/TABLE&gt;
-&lt;br/&gt;
-&lt;/span&gt;
-</source>
-                <p>Border.html</p>
-                <source xml:space="preserve">
-&lt;html jwcid="@Shell" title="RenderBody Example"&gt;
-   &lt;body jwcid="@Body"&gt;
-      &lt;table width="100%" cellspacing="0" border="0"&gt;
-         &lt;tr&gt;
-           &lt;td valign="top" style="text-align:justify;"&gt;
-              &lt;span jwcid="@RenderBody"&gt;Page content goes here.&lt;/span&gt;
-           &lt;/td&gt;
-        &lt;/tr&gt;
-        &lt;tr&gt;
-           &lt;td valign="bottom"&gt;
-              &lt;table width="100%" cellspacing="0" border="0"&gt;
-                 &lt;tr&gt;
-                    &lt;td align="center"&gt;
-                       &lt;a href="http://jakarta.apache.org/tapestry"&gt;&lt;img src="images/poweredbyTapestry.gif" width="79" height="33" border="0" alt="Tapestry"&gt;&lt;/a&gt;
-                       &lt;br/&gt;
-                       &lt;br/&gt;
-                    &lt;/td&gt;
-                 &lt;/tr&gt;
-              &lt;/table&gt;
-           &lt;/td&gt;
-        &lt;/tr&gt;
-     &lt;/table&gt;
-  &lt;/body&gt;
-&lt;/html&gt;
-</source>
-                <p>Border.jwc</p>
-                <source xml:space="preserve">
-.....
-&lt;component-specification allow-body="yes" allow-informal-parameters="no"&gt;
-&lt;/component-specification&gt;
-.....
-</source>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/script.xml b/tapestry/src/site/xdoc/components/general/script.xml
deleted file mode 100644
index d316a6d..0000000
--- a/tapestry/src/site/xdoc/components/general/script.xml
+++ /dev/null
@@ -1,265 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Script</title>
-    </properties>
-    <body>
-
-        <section name="Script">
-
-            <p>
-                A component that accesses a script file and adds JavaScript functions and statements
-                to the response page. The specified script file is read and parsed and substitutions
-                are made before the final scripting code is inserted into the page. This allows the
-                JavaScript to be tailored to the ids and names that are generated by Tapestry.
-            </p>
-            <p>
-                Components within a Script's body may access the input and output parameters of the
-                Script via the OGNL expression components.scriptId.symbols.name.
-            </p>
-            <p>
-                Note a Body component is required when using the Script element. The Body component
-                is used to write out the JavaScript after the HTML <code>&lt;body&gt;</code> section and attach
-                any initialization code to the body's "onload" event handler.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="body.html">Body</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>script</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            The path of a resource (on the classpath) containing the script. One of
-                            either <code>script</code> or <code>scriptAsset</code> must be specified.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>scriptAsset</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            A reference to a script as an
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                            parameter. One of either script or scriptAsset must be specified.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>symbols</td>
-                        <td>java.util.Map</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            The base set of symbols to be provided to the
-                            <a href="../../apidocs/org/apache/tapestry/IScript.html">
-                                IScript
-                            </a>
-                            . To this is added (in a copy of the Map) any informal parameters.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-                <p>
-                    See the
-                    <a href="../form/propertyselection.html">PropertySelection</a>
-                    example use of SelectSubmit script to submit a
-                    <a href="../form/form.html">Form</a>
-                    when a user selects a drop down list item.
-                </p>
-                <p>
-                    In this example a Script is used set the focus to the first text field of the
-                    login form. In the script file .. tags are used to wrap the JavaScript code to
-                    prevent '&lt;' and '&amp;&amp;' character XML parsing errors.
-                </p>
-                <p>
-                    Note Tapestry will not perform property substitutions in CDATA blocks when using
-                    the <code>&lt;expression&gt;</code> style syntax, instead use the ${expression} syntax.
-                </p>
-                <img src="../../images/ComponentReference/Script.png"
-                    alt="Script Screen Shot" />
-                <p>
-                    <strong>HTML Template</strong>
-                </p>
-
- <source><![CDATA[<body jwcid="@Body">
-<span jwcid="@Script" script="/com/mycorp/scripts/FormFocus.script"/>
-<form jwcid="@Form" listener="ognl:listener.formSubmit">
- <table cellpadding="4">
-   <tr><td>Username:</td><td><input jwcid="@TextField" value="ognl:visit.username" size="12"/></td>
-  </tr>
-   <tr><td>Password:</td><td><input jwcid="@TextField" value="ognl:visit.password" hidden="ognl:true" size="12"/></td>
-  </tr>
-  <tr align="right">
-   <td colspan="2"><input type="submit" value="Login"/></td>
-  </tr>
- </table>
-</form>
-</body>]]></source>
-                <p>
-                    <strong>Script File (FormFocus.script)</strong>
-                </p>
-<source><![CDATA[<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-  <script>
-  <body>
-<![CDATA[
-function setFocus() {
-    if (document.forms[0]) {
-        for (i = 0; i < document.forms[0].elements.length; i++) {
-            if (document.forms[0].elements[i].type != "hidden" &&
-                document.forms[0].elements[i].disabled != true) {
-
-                document.forms[0].elements[i].focus();
-                return;
-            }
-        }
-    }
-}
-  </body>
-  <initialization>
-    setFocus();
-  </initialization>
-</script>]]></source>
-                <p>
-                    This alternative FormFocus.script specifies the actual input field to give the
-                    focus to. The target input field is identified by an informal parameter named
-                    component. The script then uses ${expression} element name insertions to
-                    complete the JavaScript.
-                </p>
-                <p>
-                    Note when using this script, the target input field component must be declared
-                    before the script component in the HTML template, and within the Form block, so
-                    that the target field component can be resolved by the Script component.
-                </p>
-                <p>
-                    <strong>HTML Template</strong>
-                </p>
-                <source xml:space="preserve">
-&lt;body jwcid="@Body"&gt;
-&lt;form jwcid="@Form" listener="ognl:listener.formSubmit"&gt;
- &lt;table cellpadding=
-  "4"&gt;
-   &lt;tr&gt;&lt;td&gt;Username:&lt;/td&gt;&lt;td&gt;&lt;input jwcid="usernameTextField@TextField" value="ognl:visit.username" size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-   &lt;tr&gt;&lt;td&gt;Password:&lt;/td&gt;&lt;td&gt;&lt;input jwcid="@TextField" value="ognl:visit.password" hidden="ognl:true" size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr align="right"&gt;
-   &lt;td colspan="2"&gt;&lt;input type="submit" value="Login"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
- &lt;/table&gt;
- &lt;span jwcid="@Script" script="/com/mycorp/scripts/FormFocus.script" component="ognl:components.usernameTextField"/&gt;
-&lt;/form&gt;
-&lt;/body&gt;
-    </source>
-
-                <p>
-                    <strong>Script File (FormFocus.script)</strong>
-                </p>
-<source><![CDATA[<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-<!--
-Selects the specified form input field on body load if the input type is not
-"hidden" and the input field is not disabled.
-
-Input symbols:
-  component: the component input field to give focus
--->
-
-<script>
-
-<input-symbol key="component" class="org.apache.tapestry.form.AbstractFormComponent" required="yes"/>
-
-<let key="formObject">
-	document.${component.form.name}
-</let>
-
-<let key="componentObject">
-	${formObject}.${component.name}
-</let>
-
-<body>
-function setFocus() {
-    var inputField = ${componentObject};
-
-    if (inputField.type != "hidden") {
-        if (inputField.disabled != true) {
-            inputField.focus();
-        }
-    } else {
-         window.alert('InputFocus.script cannot set focus on a hidden field');
-    }
-}
-</body>
-
-<initialization>
-    setFocus();
-</initialization>
-
-</script>]]></source>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/scriptincludes.xml b/tapestry/src/site/xdoc/components/general/scriptincludes.xml
deleted file mode 100644
index d0569bf..0000000
--- a/tapestry/src/site/xdoc/components/general/scriptincludes.xml
+++ /dev/null
@@ -1,260 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>ScriptIncludes</title>
-    </properties>
-    <body>
-
-        <section name="ScriptIncludes">
-
-            <p>
-                Manages writing out and configuring the necessary javascript includes for Tapestry when <em>not</em>
-                using the <a href="shell.html">Shell</a> component to do it. Both <a href="shell.html">Shell</a> and
-                this component defer the actual functionality of rendering script includes to the delegate class 
-                <a href="../../apidocs/org/apache/tapestry/dojo/AjaxShellDelegate.html">AjaxShellDelegate</a>.
-            </p>
-            <p><strong>Sample Output</strong></p>
-            <p>
-<source><![CDATA[
-<script type="text/javascript" src="http://localhost:8080/assets/static/dojo/dojo.js"></script>
-<script type="text/javascript" src="http://localhost:8080/assets/static/tapestry/core.js"></script>
-<script type="text/javascript">
-dojo.require("dojo.debug.console");
-dojo.log.setLevel(dojo.log.getLevel("DEBUG"));
-dojo.require("tapestry.namespace");
-</script>
-]]></source>
-            </p>
-            
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/dojo/AjaxShellDelegate.html">
-                        org.apache.tapestry.dojo.AjaxShellDelegate
-                    </a>
-                    ,
-                    <a href="shell.html">Shell</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>delegate</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IRender.html">
-                                IRender
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If specified, the delegate is rendered before the close of the
-                            <code>&lt;head&gt;</code> tag. Typically, this is used to provide additional
-                            <code>&lt;meta&gt;</code> tags.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>ajaxDelegate</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IRender.html">
-                            IRender
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/dojo/AjaxShellDelegate.html">
-                            AjaxShellDelegate
-                            </a>
-                        </td>
-                        <td>
-                            If specified, allows for the default ajaxDelegate that renders the dojo script
-                            includes to be overriden.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>browserLogLevel</td>
-                        <td>String - One of [DEBUG,INFO,WARNING,ERROR,CRITICAL]</td>
-                        <td>no</td>
-                        <td>WARNING</td>
-                        <td>
-                            Sets the default browser based javascript log level to use to debug client side
-                            interactions. If you specify an html element id to place the debug content it will be
-                            written there. Otherwise, the default is to write to an element with id "debug", or append to
-                            the document body if none exists.
-                            
-                            <p>
-                            See the dojo docs for more information about logging, but the basic idea is that you can write
-                            statements like <code>dojo.log.info("Doing some operation");</code> in javascript and have them
-                            appropriately filtered based on the log level used.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>debugEnabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Turns browser level logging completely on/off.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>debugAtAllCosts</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Turns off deep context level javascript debugging mode for dojo. This means 
-                            that exceptions/debug statements will show you line numbers from the actual 
-                            javascript file that generated them instead of the normal default which is 
-                            usually bootstrap.js .
-                            
-                            <p>
-                                People should be wary of turning this on as it may cause problems under certain 
-                                conditions, and you definitely don't ever want this on in production.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>debugContainerId</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            Sets the html element node id of the element you would like all browser debug content to
-                            go to, if you have logging turned on.
-                            
-                            <p>
-                            For example, if you had an element on your html page with <code>id="myElement"</code> you would
-                            set the debugContainerId to <code>"myElement"</code>.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>consoleEnabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Enables/disables the dojo.debug.console functionality which should redirect 
-                            most logging messages to your browsers javascript console. (if it supports one).
-                            
-                            <p>
-                                The debug console is disabled by default. Currently known supported browsers 
-                                are FireFox(having FireBug extension helps a great deal)/Opera/Safari.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>preventBackButtonFix</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Sets the dojo preventBackButtonFix djConfig configuration. This should typically 
-                            be avoided but is provided for flexibility.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>parseWidgets</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Tells dojo whether or not to parse widgets by traversing the entire dom node of your
-                            document. It is highly reccomended that you keep this at its default value of false.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>tapestrySource</td>
-                        <td>
-                        <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                            IAsset
-                        </a>                        
-                        </td>
-                        <td>false</td>
-                        <td>classpath:/tapestry/core.js</td>
-                        <td>
-                            Controls what the root source inclusion is for tapestry javascript packages. Override if you
-                            want to replace the built in defaults with a version of your own.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>dojoSource</td>
-                        <td>
-                        <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                            IAsset
-                        </a>
-                        </td>
-                        <td>false</td>
-                        <td>classpath:/dojo/dojo.js</td>
-                        <td>
-                            Controls what the root source inclusion is for the dojo javascript packages. Override if you
-                            want to replace the built in defaults with a version of your own.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>dojoPath</td>
-                        <td>
-                        <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                            IAsset
-                        </a>
-                        </td>
-                        <td>false</td>
-                        <td>classpath:/dojo/</td>
-                        <td>
-                            Specifies the default path to the root dojo folder, not the dojo.js file itself. This
-                            is used by the <code>djConfig.baseRelativePath</code> javascript configuration property in dojo
-                            to resolve relative resource includes - like widgets/images/js/css/etc..
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>not allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-                TODO..
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/shell.xml b/tapestry/src/site/xdoc/components/general/shell.xml
deleted file mode 100644
index 0aebb56..0000000
--- a/tapestry/src/site/xdoc/components/general/shell.xml
+++ /dev/null
@@ -1,440 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Shell</title>
-    </properties>
-    <body>
-
-        <section name="Shell">
-
-            <p>
-                Provides the outer 'shell' of a page, including the <code>&lt;html&gt;, &lt;head&gt;</code> and
-                <code>&lt;title&gt;</code> tags, but not the <code>&lt;body&gt;</code> tag (which is typically provided by a
-                <a href="Body.html">Body</a>
-                component).
-            </p>
-            <p>
-                Most Tapestry pages will include a Shell component enclosing a
-                <a href="body.html">Body</a>
-                component. The Shell is used to resolve the page's HTML stylesheet and the
-                <a href="body.html">Body</a>
-                component manages dynamically generated JavaScript.
-            </p>
-            <p>
-                When designing the look and feel of a Tapestry page, include the normal HTML
-                elements before the Shell component, including a <code>&lt;link rel="stylesheet"&gt;</code>
-                element, so that the page will render normally in a web browser, but use a 
-                <code>&lt;span jwcid="$content$"&gt;</code> around the actual content.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/html/Shell.html">
-                        org.apache.tapestry.html.Shell
-                    </a>
-                    ,
-                    <a href="body.html">Body</a>
-                    ,
-                    <a href="../link/pagelink.html">PageLink</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>title</td>
-                        <td>String</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The title for the page, used to render the <code>&lt;title&gt;</code> tag.</td>
-                    </tr>
-
-                    <tr>
-                        <td>raw</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If false (the default), then HTML characters in the title are escaped.
-                            If true, then value is emitted exactly as is.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>stylesheet</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>If provided, then a <code>&lt;link&gt;</code> to the stylesheet is generated.</td>
-                    </tr>
-
-                    <tr>
-                        <td>stylesheets</td>
-                        <td>
-                            Array or collection of
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If provided, then <code>&lt;link&gt;</code> elements are created for each stylesheet
-                            asset.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>doctype</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>
-                            HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-                            "http://www.w3.org/TR/html4/loose.dtd"
-                        </td>
-                        <td>
-                            Used to specify the full definition of the DOCTYPE element in the
-                            response page.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>renderContentType</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            If true (the default), then a <code>&lt;meta&gt;</code> tag will be written to set
-                            the content type of the page.
-                        </td>
-                    </tr>
-                    
-                    <tr>
-                        <td>disableTapestryMeta</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            When set to true, disables rendering of hidden comment meta content normally
-                            written out which includes the Tapestry version being used as well as total rendering time 
-            	            that each response takes. This should be used by people not wanting to make their use or version
-                            of any particular framework a widely known item.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>refresh</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If provided, then a <code>&lt;meta&gt;</code> tag will be written to cause a page
-                            refresh. The parameter value is the number of seconds before the
-                            refresh.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disableCaching</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If provided, then a <code>&lt;meta&gt;</code> tag will be written setting the
-                            content="nocache" value to try and prevent browser caching of page.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>delegate</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IRender.html">
-                                IRender
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If specified, the delegate is rendered before the close of the
-                            <code>&lt;head&gt;</code> tag. Typically, this is used to provide additional
-                            <code>&lt;meta&gt;</code> tags.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>renderBaseTag</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Specifies whether or not to render the html BASE tag element in the
-                            document HEAD.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>ajaxDelegate</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IRender.html">
-                            IRender
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/dojo/AjaxShellDelegate.html">
-                            AjaxShellDelegate
-                            </a>
-                        </td>
-                        <td>
-                            If specified, allows for the default ajaxDelegate that renders the dojo script
-                            includes to be overriden.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>browserLogLevel</td>
-                        <td>String - One of [DEBUG,INFO,WARNING,ERROR,CRITICAL]</td>
-                        <td>no</td>
-                        <td>WARNING</td>
-                        <td>
-                            Sets the default browser based javascript log level to use to debug client side
-                            interactions. If you specify an html element id to place the debug content it will be
-                            written there. Otherwise, the default is to write to an element with id "debug", or append to
-                            the document body if none exists.
-                            
-                            <p>
-                            See the dojo docs for more information about logging, but the basic idea is that you can write
-                            statements like <code>dojo.log.info("Doing some operation");</code> in javascript and have them
-                            appropriately filtered based on the log level used.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>debugEnabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Turns browser level logging completely on/off.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>debugAtAllCosts</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Turns off deep context level javascript debugging mode for dojo. This means 
-                            that exceptions/debug statements will show you line numbers from the actual 
-                            javascript file that generated them instead of the normal default which is 
-                            usually bootstrap.js .
-                            
-                            <p>
-                                People should be wary of turning this on as it may cause problems under certain 
-                                conditions, and you definitely don't ever want this on in production.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>debugContainerId</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            If you have logging turned on, all browser debug content is appended at the end of the 
-                            html document. 
-                            You can control this behavior by setting this parameter to the html element node id 
-                            that you want to receive the debug content.
-                            
-                            <p>
-                            For example, if you had an element on your html page with <code>id="myElement"</code> you would
-                            set the debugContainerId to <code>"myElement"</code>.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>consoleEnabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Enables/disables the dojo.debug.console functionality which should redirect 
-                            most logging messages to your browsers javascript console. (if it supports one).
-                            
-                            <p>
-                                The debug console is disabled by default. Currently known supported browsers 
-                                are FireFox(having FireBug extension helps a great deal)/Opera/Safari.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>preventBackButtonFix</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Sets the dojo preventBackButtonFix djConfig configuration. This should typically 
-                            be avoided but is provided for flexibility.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>parseWidgets</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Tells dojo whether or not to parse widgets by traversing the entire dom node of your
-                            document. It is highly reccomended that you keep this at its default value of false.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>tapestrySource</td>
-                        <td>
-                        <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                            IAsset
-                        </a>                        
-                        </td>
-                        <td>false</td>
-                        <td>classpath:/tapestry/core.js</td>
-                        <td>
-                            Controls what the root source inclusion is for tapestry javascript packages. Override if you
-                            want to replace the built in defaults with a version of your own.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>dojoSource</td>
-                        <td>
-                        <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                            IAsset
-                        </a>
-                        </td>
-                        <td>false</td>
-                        <td>classpath:/dojo/dojo.js</td>
-                        <td>
-                            Controls what the root source inclusion is for the dojo javascript packages. Override if you
-                            want to replace the built in defaults with a version of your own.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>dojoPath</td>
-                        <td>
-                        <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                            IAsset
-                        </a>
-                        </td>
-                        <td>false</td>
-                        <td>classpath:/dojo/</td>
-                        <td>
-                            Specifies the default path to the root dojo folder, not the dojo.js file itself. This
-                            is used by the <code>djConfig.baseRelativePath</code> javascript configuration property in dojo
-                            to resolve relative resource includes - like widgets/images/js/css/etc..
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-
-                <p>The Shell component is used here to provide the page's stylesheet and title.</p>
-
-                <p>
-                    In this example, the Login.html template is in the login subdirectory of the
-                    root application context. The stylesheet is within the styles directory, below
-                    the root application context.
-                </p>
-
-                <p>login/Login.html:</p>
-
-                <source xml:space="preserve">
-&lt;html&gt;
-&lt;head&gt;
- &lt;link rel="stylesheet" type="text/css" href="../styles/style.css"/&gt;
- &lt;title&gt;MyCorp Customer Login&lt;/title&gt;
-&lt;/head&gt;
-
-&lt;span jwcid="$content$"&gt;
-&lt;span jwcid="@Shell" stylesheet="asset:stylesheet" title="MyCorp Customer Login"&gt;
-&lt;body jwcid="@Body"&gt;
-
-&lt;h1&gt;Customer Login&lt;/h1&gt;
-Welcome to MyCorp's Customer Portal secure login page.
-
-. . .
-
-&lt;/body&gt;
-&lt;/span&gt;
-&lt;/span&gt;
-&lt;/html&gt;
-</source>
-
-                <p>WEB-INF/login/Login.page:</p>
-
-                <source xml:space="preserve">
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd"&gt;
-  
-&lt;page-specification&gt;
-
-  . . .
-  
-  &lt;asset name="stylesheet" path="styles/style.css"/&gt;
-   
-&lt;/page-specification&gt;
-
-</source>
-
-                <p>
-                    Note that for page and component specifications stored in the web application
-                    context (even under WEB-INF), relative asset paths are computed from the
-                    <em>root application context directory</em>
-                    .
-                </p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/general/style.xml b/tapestry/src/site/xdoc/components/general/style.xml
deleted file mode 100644
index 8e477f4..0000000
--- a/tapestry/src/site/xdoc/components/general/style.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005, 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Style</title>
-    </properties>
-    <body>
-
-        <section name="Style">
-
-            <p>
-                Declares a stylesheet to be included in the current page. This component
-                is a special case of the <a href="relation.html">Relation</a> component, 
-            </p>
-            <p>
-                Note that a Shell component is required when using the Style element. 
-                The Shell component is responsible for gathering all Style 
-                components found in a page, and rendering them inside the 
-                <code>&lt;head&gt;</code> tag.
-            </p>  
-            <p>
-                <strong>See also:</strong>
-                <a href="relation.html">Relation</a>
-                ,
-                <a href="shell.html">Shell</a>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>href</td>
-                        <td>String or 
-                        <a href="../../apidocs/org/apache/tapestry/IAsset.html">IAsset</a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>The target URL of the related resource. <br/>
-                        If this value is provided and is not null, this component behaves exactly like the 
-                        <a href="relation.html">Relation</a> component, i.e. it renders a <code>&lt;link&gt;</code>
-                        tag in the html header.<br/>
-                        Otherwise, it renders a <code>&lt;style&gt;</code> tag which includes its contents.
-                        </td>
-                    </tr>
-                    
-                    <tr>
-                        <td>rel</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>literal:stylesheet</td>
-                        <td>Defines the relationship between the current document and the targeted document.</td>
-                    </tr> 
-                    
-                    <tr>
-                        <td>title</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>The title of the stylesheet.</td>
-                    </tr> 
-                    
-                    <tr>
-                        <td>media</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>Specifies on which device this stylesheet will apply.</td>
-                    </tr>                                                                                                 
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-                <p>
-                    This example demonstrates how a component (in this case Book) can declare
-                    additional css files and use specific styles. In this case, both declarations
-                    (a css file and an inline style) are rendered inside the 
-                    <code>&lt;head&gt;</code> tag of the containing page.
-                </p>
-
-                <p>Home.html</p>
-                <source xml:space="preserve">
-&lt;html jwcid="@Shell" title="Style Example"&gt;
-   &lt;body jwcid="@Body"&gt;
-      &lt;span jwcid="@Book"/>
-  &lt;/body&gt;
-&lt;/html&gt;
-</source>
-                <p>Book.html</p>
-                <source xml:space="preserve">
-&lt;link jwcid="@Style" href="main.css" media="all"/&gt;  
-&lt;style jwcid="@Style" media="print"&gt;      
-body {background:none;}
-&lt;/style&gt;
-
-Book details ...
-</source>
-                <p>Book.jwc</p>
-                <source xml:space="preserve">
-&lt;component-specification allow-body="yes" allow-informal-parameters="no"&gt;
-&lt;/component-specification&gt;
-</source>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/index.xml b/tapestry/src/site/xdoc/components/index.xml
deleted file mode 100644
index 1503664..0000000
--- a/tapestry/src/site/xdoc/components/index.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Framework Component Reference</title>
-    </properties>
-    <body>
-        
-        <section name="Framework Component Reference">
-            <p>
-                The menu to the left lists all the components provided with the Tapestry framework.
-            </p>
-            <p>
-                Such components may always be referenced without any library prefix; in cases where
-                an application or library provides a component with the same name, the special
-                prefix <code>framework:</code> may be used. That is, <code>DirectLink</code> and 
-                <code>framework:DirectLink</code> are equivalent, unless your application 
-                (or library) includes a component <em>also</em> named "DirectLink".
-            </p>
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/link/directlink.xml b/tapestry/src/site/xdoc/components/link/directlink.xml
deleted file mode 100644
index 37cf5f0..0000000
--- a/tapestry/src/site/xdoc/components/link/directlink.xml
+++ /dev/null
@@ -1,400 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>DirectLink</title>
-    </properties>
-    <body>
-
-        <section name="DirectLink">
-
-            <p>
-                Creates an <code>&lt;a&gt;</code> hyperlink that notifies the component when the link is
-                triggered. The link includes some context-specific data that is made available to
-                the component's listener. 
-            </p>
-            <p>
-                See the Developers Guide DirectLink listeners for a more complete
-                description.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="externallink.html">ExternalLink</a>
-                    ,
-                    <a href="genericlink.html">GenericLink</a>
-                    ,
-                    <a href="pagelink.html">PageLink</a>
-                    ,
-                    <a href="servicelink.html">ServiceLink</a>
-                </strong>
-
-            </p>
-
-            <section name="Parameters">
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        
-                        <th>Required</th>
-                        <th>Default</th>
-
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>listener</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            Specifies an object that is notified when the link is clicked, which is
-                            typically a listener method of its container (for example, listeners.
-                            <em>method</em>). If this parameter is not provided, Tapestry will attempt
-	                        to find a listener with the capitalized id of the component, prefixed by
-	                        "do". For example, jwcid="clear@DirectLink" would expect a listener called doClear().
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>parameters</td>
-                        <td>
-                            Object or
-                            <br />
-
-                            Object[] or
-                            <br />
-                            List
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            <p>
-                                An array of objects to be encoded into the URL. These parameters
-                                will be decoded when the link is triggered.
-                            </p>
-
-                            <p>
-                                In a web application built onto of Enterprise JavaBeans, the context
-                                is often the primary key of some Entity bean; typically such keys
-                                are Strings or Integers.
-                            </p>
-                            <p>
-                                A listener method can retrieve the parameters three ways:
-                                <br />
-                                parameters are declared in the method itself, e.g. - listenerMethod(
-                                <em>parameters</em>
-                                )
-                                <br />
-                                parameters are declared along with the IRequestCycle, e.g. -
-                                listenerMethod(IRequestCycle cycle,
-                                <em>parameters</em>
-                                )
-
-                                <br />
-                                or through the request cycle, e.g. - listenerMethod(IReuqestCycle
-                                cycle), using IRequestCycle.getServiceParameters()
-                            </p>
-                            <p>
-                                Prior to release 2.2, the parameters were always type String. They
-                                may now be of any type; type will be maintained when the parameters
-                                are later retrieved by a listener. See
-                                <a
-                                    href="../../apidocs/org/apache/tapestry/util/io/SqueezeAdaptor.html">
-                                    SqueezeAdaptor
-                                </a>
-                                for more details.
-                            </p>
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-
-                        <td>
-                            Controls whether the link is produced. If disabled, the portion of the
-                            template the link surrounds is still rendered, but not the link itself.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>stateful</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            If true (the default), then the component requires an active (i.e.,
-                            non-new) HttpSession when triggered. Failing that, it throws a
-                            <a
-                                href="../../apidocs/org/apache/tapestry/StaleLinkException.html">
-                                StaleLinkException
-                            </a>
-                            . If false, then no check is necessary. The latter works well with links
-                            that encode all necessary state inside the URL itself.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>target</td>
-
-                        <td>String</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The name of the html target for this link, this is just the normal html attribute that will
-                            control where the response generated from this link will go. (Usually used in frames) 
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>anchor</td>
-
-                        <td>String</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-
-                            The name of an anchor or element to link to. The final URL will have '#'
-                            and the anchor appended to it.
-                        </td>
-
-                    </tr>
-
-                    <tr>
-                        <td>scheme</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            The required scheme ("http" or "https", typically) for the URL. This
-                            will force the creation of an absolute URL when the current request's
-                            scheme does not match the value for this parameter. This is most often
-                            used to switch to "https" for secure portions of an application (such as
-                            a login page), before switching back to standard "http" for the majority
-                            of an application.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>port</td>
-                        <td>Integer</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            The required port (80, 443, 8080. 8443, typically) for the URL. This
-                            will force the creation of an absolute URL when the current request's
-                            scheme does not match the value for this parameter. This is most often
-                            used in conjunction with scheme to switch to "https:443"/"https:8443"
-                            for secure portions of an application (such as a login page), before
-                            switching back to standard "http:80"/"http:80" for the majority of an
-                            application.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>renderer</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/link/ILinkRenderer.html">
-                                ILinkRenderer
-                            </a>
-                        </td>
-                        <td>no</td>
-
-                        <td> </td>
-
-                        <td>The object which will actually render the link.</td>
-                    </tr>
-                    <tr>
-                        <td>updateComponents</td>
-                        <td>String[],Collection</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            In an asynchronous request, specifies which components should have their content
-                            rendered back to the client. These are expected to be unique component ids. 
-                            
-                            <p>
-                            See: <a href="../../apidocs/org/apache/tapestry/services/ResponseBuilder.html">ResponseBuilder</a>
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>json</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Causes the request to be asynchronous and the response to be captured/rendered via
-                            the <a href="../../apidocs/org/apache/tapestry/services/impl/JSONResponseBuilder.html">JSONResponseBuilder</a>
-                            renderer.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>async</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Causes the request to be asynchronous and the response to be captured/rendered via
-                            the <a href="../../apidocs/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.html">DojoAjaxResponseBuilder</a>
-                            renderer.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>rendered</strong>
-
-                </p>
-
-                <p>
-
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>href</em>
-                </p>
-
-            </section>
-            <section name="Examples">
-
-                <p>
-                    In this example the DirectLink component enables users to select a Customer from
-                    the Customer List table.
-                </p>
-
-                <img src="../../images/ComponentReference/DirectLink.png"
-                    alt="DirectLink Screen Shot" />
-
-
-                <p>HTML template</p>
-                <source xml:space="preserve"><![CDATA[
-<table cellspacing="6">
-  <tr>
-    <td>ID</td>
-    <td>&nbsp;</td>
-    <td>Name</td>
-    <td>&nbsp;</td>
-    <td>Level</td>
-    <th>&nbsp;</th>
-  </tr>
-  <tr>
-    <td colspan="6"><hr></td>
-  </tr>
-  <tr jwcid="@Foreach" source="ognl:customerList" value="ognl:customer" element="tr">
-    <td><span jwcid="@Insert" value="ognl:customer.id"/></td>
-    <td>&nbsp;</td>
-    <td><a jwcid="@DirectLink" listener="listener:customerSelectAction" parameters="ognl:customer.id"> <span jwcid="@Insert" value="ognl:customer.fullName"/> </a></td>
-    <td>&nbsp;</td>
-    <td><span jwcid="@Insert" value="ognl:customer.memberLevel"/></td>
-    <td>
-      <a jwcid="@DirectLink" listener="listener.customerDeleteAction" parameters="ognl:customer.id" onclick="return window.confirm('Are you sure you want remove this customer?');">
-        <img jwcid="@Image" image="ognl:assets.deleteImage" alt="Delete"/>
-      </a>
-    </td>
-  </tr>
-</table>
-]]></source>
-
-                <p>Page specification</p>
-                <source xml:space="preserve"><![CDATA[
-<property name="customerList" type="java.util.List" persistent="yes"/>
-<property name="customer" type="Customer"/>
-]]></source>
-
-
-                <p>Java sources</p>
-                <source xml:space="preserve">
-public abstract class SalesPage extends BasePage {
-    public abstract List getCustomerList();
-    public abstract List setCustomerList(List value);
-
-    public abstract Customer getCustomer();
-
-    public void customerSelectAction(Integer id) {
-        Visit visit = (Visit) getVisit();
-        Customer customer = visit.findCustomerByPrimaryKey(id);
-        // Perform some action with the selected customer.
-        ..
-    }
-
-    public void customerDeleteAction(Integer id) {
-        Visit visit = (Visit) getVisit();
-        Customer customer = visit.findCustomerByPrimaryKey(id);
-        visit.deleteCustomer(customer);
-    }
-}
-</source>
-                <source xml:space="preserve">
-public class Visit() implements Serializable {
-
-    public List getCustomerList() {
-        List customerList = new ArrayList();
-        // Perform a database query retrieving the list of customers.
-        ..
-        return customerList;
-    }
-
-    public Customer findCustomerByPrimaryKey(Integer id) {
-        Customer customer = null;
-        // Retrieve the customer from the database with given the customer ID.
-        ..
-        return customer;
-    }
-
-    public void deleteCustomer(Customer customer) {
-        // Delete customer from the database.
-        ..
-    }
-}
-</source>
-
-                <source xml:space="preserve">
-public class Customer implements Serializable {
-    private Integer id;
-    private String fullName;
-    private String memberLevel;
-
-    public Customer(Integer id, String fullName, String memberLevel) {
-        this.id = id;
-        this.fullName = fullName;
-        this.memberLevel = memberLevel;
-    }
-
-    public Integer getId() { return id; }
-
-    public String getFullName() { return fullName; }
-
-    public String getMemberLevel() { return memberLevel; }
-}
-</source>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/link/externallink.xml b/tapestry/src/site/xdoc/components/link/externallink.xml
deleted file mode 100644
index eb78a0d..0000000
--- a/tapestry/src/site/xdoc/components/link/externallink.xml
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>ExternalLink</title>
-    </properties>
-    <body>
-
-        <section name="ExternalLink">
-
-            <p>
-                Creates a &lt;a&gt; hyperlink to an
-                <a href="../../apidocs/org/apache/tapestry/IExternalPage.html">
-                    IExternalPage
-                </a>
-                which may be bookmarked using the hyperlink's URL.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/link/ExternalLink.html">
-                        org.apache.tapestry.link.ExternalLink
-                    </a>
-                    ,
-                    <a href="directlink.html">DirectLink</a>
-                    ,
-                    <a href="genericlink.html">GenericLink</a>
-                    ,
-                    <a href="pagelink.html">PageLink</a>
-                    ,
-                    <a href="servicelink.html">ServiceLink</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>page</td>
-                        <td>String</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of a application page to link to.</td>
-                    </tr>
-                    <tr>
-                        <td>parameters</td>
-                        <td>Object or Object[] or List</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            An array of objects to be encoded into the URL. These parameters will be
-                            passed to IExternalPage.activateExternalPage() method.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Controls whether the link is produced. If disabled, the portion of the
-                            template the link surrounds is still rendered, but not the link itself.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>anchor</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The name of an anchor or element to link to. The final URL will have '#'
-                            and the anchor appended to it.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>scheme</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The required scheme ("http" or "https", typically) for the URL. This
-                            will force the creation of an absolute URL when the current request's
-                            scheme does not match the value for this parameter. This is most often
-                            used to switch to "https" for secure portions of an application (such as
-                            a login page), before switching back to standard "http" for the majority
-                            of an application.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>port</td>
-                        <td>Integer</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The required port (80, 443, 8080. 8443, typically) for the URL. This
-                            will force the creation of an absolute URL when the current request's
-                            scheme does not match the value for this parameter. This is most often
-                            used in conjunction with scheme to switch to "https:443"/"https:8443"
-                            for secure portions of an application (such as a login page), before
-                            switching back to standard "http:80"/"http:80" for the majority of an
-                            application.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>target</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td />
-                        <td>The target window to use in the link.</td>
-                    </tr>
-                    <tr>
-                        <td>renderer</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/link/ILinkRenderer.html">
-                                ILinkRenderer
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td />
-                        <td>The object which will actually render the link.</td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>Reserved parameters: href</p>
-
-            </section>
-
-            <section name="Examples">
-
-                <p>
-                    This example illustrates a page displaying some content based on an id and a
-                    language code. It contains a link to view the same content in German.
-                </p>
-                <source xml:space="preserve">
-&lt;a href="#" 
-   jwcid="@ExternalLink" 
-   page="ViewArticle" 
-   parameters="ognl:{articleId, 'de'}" 
-   disabled="ognl:languageCode=='de'"
-&gt;view this article in German&lt;/a&gt;
-
-&lt;div jwcid="@Insert" value="ognl:content"&gt;content of the article&lt;/div&gt;
-</source>
-
-                <source xml:space="preserve">
-package com.myexample;
-
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-public abstract class ViewArticle extends BasePage implements IExternalPage {
-
-  public abstract Integer getArticleId();
-  public abstract void setArticleId(Integer articleId);
-  public abstract String getLanguageCode();
-  public abstract void setLanguageCode(String language);
-  
-  public void activateExternalPage(Object[] params, IRequestCycle cycle) {
-    setArticleId((Integer) params[0]);
-    setLanguageCode((String) params[1]);
-  }
-
-  public String getContent() {
-    // retrieve the content of the article for the selected language
-    
-  }
-  
-}
-</source>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/link/genericlink.xml b/tapestry/src/site/xdoc/components/link/genericlink.xml
deleted file mode 100644
index 6d03b51..0000000
--- a/tapestry/src/site/xdoc/components/link/genericlink.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>GenericLink</title>
-    </properties>
-    <body>
-
-        <section name="GenericLink">
-
-            <p>Creates an <code>&lt;a&gt;</code> hyperlink for an arbitrary URL.</p>
-            <p>
-                Although a GenericLink can be accomplished using an
-                <a href="../general/any.html">Any</a>
-                component, a GenericLink is more flexible: it can be disabled, like a
-                <a href="directlink.html">DirectLink</a>
-                and can also wrap around
-                <a href="rollover.html">Rollover</a>
-                components. GenericLinks are often used with javascript: URLs to perform client-side
-                scripting.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="directlink.html">DirectLink</a>
-                    ,
-                    <a href="externallink.html">ExternalLink</a>
-                    ,
-                    <a href="pagelink.html">PageLink</a>
-                    ,
-                    <a href="rollover.html">Rollover</a>
-                    ,
-                    <a href="servicelink.html">ServiceLink</a>
-                </strong>
-
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>href</td>
-                        <td>String</td>
-                        <td>yes</td>
-                        <td> </td>
-                        <td>
-                            The URL to trigger when the link is clicked. This is often of the form:
-                            <code>&lt;a&gt; href="javascript:functionName('param')"&gt;</code>
-                        </td>
-                    </tr>
-                    <tr>
-
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-
-                            Controls whether the link is produced. If disabled, the portion of the
-                            template the link surrounds is still rendered, but not the link itself.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>target</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            The name of the html target for this link, this is just the normal html attribute that will
-                            control where the response generated from this link will go. (Usually used in frames) 
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>anchor</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            The name of an anchor or element to link to. The final URL will have '#'
-                            and the anchor appended to it.
-                        </td>
-
-                    </tr>
-                    <tr>
-                        <td>renderer</td>
-
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/link/ILinkRenderer.html">
-                                ILinkRenderer
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>The object which will actually render the link.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>rendered</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-                <p>
-                    Under Construction.
-
-                </p>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/link/index.xml b/tapestry/src/site/xdoc/components/link/index.xml
deleted file mode 100644
index e27b342..0000000
--- a/tapestry/src/site/xdoc/components/link/index.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Framework Component Reference - Link Components</title>
-    </properties>
-    <body>
-        
-        <section name="Link Components">
-            <p>
-                The menu to the left lists all of the link related components provided 
-                with the Tapestry framework.
-            </p>
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/link/pagelink.xml b/tapestry/src/site/xdoc/components/link/pagelink.xml
deleted file mode 100644
index 151d96f..0000000
--- a/tapestry/src/site/xdoc/components/link/pagelink.xml
+++ /dev/null
@@ -1,293 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>PageLink</title>
-    </properties>
-    <body>
-
-        <section name="PageLink">
-
-            <p>
-                Creates a HTML <code>&lt;a&gt;</code> hyperlink to another page within the application. The Page
-                component uses the PageService to construct the anchor's "href" URL.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/link/PageLink.html">
-                        org.apache.tapestry.link.PageLink
-                    </a>
-                    ,
-                    <a href="directlink.html">DirectLink</a>
-                    ,
-                    <a href="externallink.html">ExternalLink</a>
-                    ,
-                    <a href="genericlink.html">GenericLink</a>
-                    ,
-                    <a href="rollover.html">Rollover</a>
-                    ,
-                    <a href="servicelink.html">ServiceLink</a>
-                </strong>
-
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>page</td>
-                        <td>String</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The name of an application page to link to.</td>
-                    </tr>
-                    <tr>
-                        <td>namespace</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/INamespace.html">
-                                INamespace
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If specified, the namespace's prefix is prefixed (with a colon) to the
-                            page name. This is primarily used when pages (or components) in a
-                            namespace need to create links to other pages inside the same namespace
-                            (this is only a concern for developers of component libraries, not
-                            developers of applications).
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Controls whether the link is produced. If disabled, the portion of the
-                            template the link surrounds is still rendered, but not the link itself.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>anchor</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The name of an anchor or element to link to. The final URL will have '#'
-                            and the anchor appended to it.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>scheme</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The required scheme ("http" or "https", typically) for the URL. This
-                            will force the creation of an absolute URL when the current request's
-                            scheme does not match the value for this parameter. This is most often
-                            used to switch to "https" for secure portions of an application (such as
-                            a login page), before switching back to standard "http" for the majority
-                            of an application.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>port</td>
-                        <td>Integer</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The required port (80, 443, 8080. 8443, typically) for the URL. This
-                            will force the creation of an absolute URL when the current request's
-                            scheme does not match the value for this parameter. This is most often
-                            used in conjunction with scheme to switch to "https:443"/"https:8443"
-                            for secure portions of an application (such as a login page), before
-                            switching back to standard "http:80"/"http:80" for the majority of an
-                            application.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>target</td>
-
-                        <td>String</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The name of the html target for this link, this is just the normal html attribute that will
-                            control where the response generated from this link will go. (Usually used in frames) 
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>renderer</td>
-
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/link/ILinkRenderer.html">
-                                ILinkRenderer
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>The object which will actually render the link.</td>
-                    </tr>
-                </table>
-
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>href</em>
-
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-
-                <p>There are two PageLink components in our Home page: Page1 and Page2.</p>
-
-                <p>The Home.html:</p>
-                <source xml:space="preserve"><![CDATA[
-...
-<a jwcid="@PageLink" page="Page1">go to Page1</a>
-<p> </p>
-<a jwcid="page2">go to Page2</a>
-...
-
-]]></source>
-
-                <p>The Home.page:</p>
-
-                <source xml:space="preserve"><![CDATA[
-...
-<page-specification>
-  ...
-  <component id="page2" type="PageLink">
-    <binding name="page" value="literal:Page2"/>
-  </component>
-  ...
-</page-specification>
-
-]]></source>
-
-                <p>
-                    Note: in the Home.page file, we use "literal" prefix when binding value of the
-                    "page" parameter of "page2" component, because the default prefix in the
-                    specification file is "ognl".
-                </p>
-
-
-                <p/>
-                <p>
-                    <strong>Another example:</strong>
-                </p>
-                <p>
-
-                    This example uses the PageLink component to create a navigation menu bar across
-                    the top of the page. If the user is not authenticated, in their Visit object,
-                    all the navigation bar links are disabled.
-                </p>
-                <p>
-                    Typically you would create an navigation menu component, using the RenderBody
-                    component. This navigation menu component would then be included as the first
-                    element in all the application's pages.
-                </p>
-
-                <p>the html file:</p>
-                <source xml:space="preserve"><![CDATA[
-<!-- Navigation Bar -->
-<table bgcolor="navy" cellpadding="8" cellspacing="6" width="100%">
- <tr jwcid="@Foreach" source="ognl:engine@NAVIGATION_PAGES" value="ognl:navigationPage" element="tr">
-   <td><font color="white"><b><a jwcid="@PageLink" page="ognl:navigationPage" 
-             disabled="ognl:! visit.authenticated">Link</a></b></font></td>
- </tr>
-</table>
-
-]]></source>
-
-                <p>the application specification file:</p>
-
-                <source xml:space="preserve"><![CDATA[
-...
-<application name="PageLink Examples">
-  <meta key="org.apache.tapestry.engine-class" value="MailEngine"/>
-  ...
-</application>
-
-]]></source>
-
-                <p>the page specification file:</p>
-                <source xml:space="preserve"><![CDATA[
-...
-<page-specification class="MailPage">
-  <property name="navigationPage"/>
-  ...
-</page-specification>
-
-]]></source>
-
-                <p>the java class files:</p>
-
-                <source xml:space="preserve">
-public abstract class MailPage extends BasePage {
-    public abstract String getNavigationPage();
-}
-
-public class Visit implements Serializable {
-    private boolean authenticated;
-
-    public boolean isAuthenticated() { return authenticated; }
-
-    public void setAuthenticated(boolean value) {
-        authenticated = value;
-    }
-}
-
-public class MailEngine extends SimpleEngine implements Serializable {
-    public static final String[] NAVIGATION_PAGES =
-        { "Home", "Inbox", "Sent", "Compose", "Contacts", "Options", "Help", "Logout" };
-}
-
-</source>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/link/rollover.xml b/tapestry/src/site/xdoc/components/link/rollover.xml
deleted file mode 100644
index 1042b1d..0000000
--- a/tapestry/src/site/xdoc/components/link/rollover.xml
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Rollover</title>
-    </properties>
-    <body>
-
-        <section name="Rollover">
-
-            <p>
-                The Rollover component provides a rollover image button for use with any kind of
-                link component. A rollover button image changes when the mouse move over it or off
-                of it. A Rollover is disabled if the link that wraps it is disabled (in which case
-                it doesn't respond to the mouse). If this dynamic behavior isn't required use the
-                simpler
-                <a href="../general/image.html">Image</a>
-                component.
-            </p>
-            <p>
-                The component provides all the necessary JavaScript to swap the image when the mouse
-                enters and exits the button. However, the Rollover must be wrapped (ultimately) by a
-                <a href="../general/body.html">Body</a>
-                component.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../general/body.html">Body</a>
-                    ,
-                    <a href="genericlink.html">GenericLink</a>
-                    ,
-                    <a href="../general/image.html">Image</a>
-                    ,
-                    <a href="pagelink.html">PageLink</a>
-                    ,
-                    <a href="../general/script.html">Script</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>image</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The initial image to show, if the surrounding link component is not
-                            disabled.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>mouseOver</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td ></td>
-                        <td>
-                            If provided (and the component is not disabled), then a JavaScript
-                            onMouseOver event handler is added to change the image. An onMouseOut
-                            event handler is also provided, to change the button to either its base
-                            image, or its mouseOut image. Deprecated alias: focus.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>mouseOut</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If provided (and the component is not disabled), then a JavaScript
-                            onMouseOut event handler is added to change the image when the mouse is
-                            moved off of the image. Deprecated alias: blur.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            <p>
-                                Image used when the Rollover is disabled. A Rollover is disabled
-                                when the link component containing it is disabled. Note that the
-                                Rollover component is wrapped by a link component such as the
-                                <a href="pagelink.html">PageLink</a>
-                                component.
-                            </p>
-                            <p>
-                                If no disabled asset is specified, then image asset is used instead.
-                                A disabled Rollover does not respond to the mouse.
-                            </p>
-                        </td>
-
-                    </tr>
-                    <tr>
-                        <td>renderer</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/link/ILinkRenderer.html">
-                                ILinkRenderer
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>The object which will actually render the link.</td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>name, src, border</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-                <p>This example is under construction.</p>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/link/servicelink.xml b/tapestry/src/site/xdoc/components/link/servicelink.xml
deleted file mode 100644
index 0920f98..0000000
--- a/tapestry/src/site/xdoc/components/link/servicelink.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>ServiceLink</title>
-    </properties>
-    <body>
-
-        <section name="ServiceLink">
-
-            <p>
-                A component for creating a link for an arbitrary engine service that uses no
-                parameters, such as the reset or home service. A ServiceLink component can emulate
-                an ActionLink, PageLink or DirectLink component, but is most often used in
-                conjunction with an application-specific service.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="directlink.html">DirectLink</a>
-                    ,
-                    <a href="externallink.html">ExternalLink</a>
-                    ,
-                    <a href="genericlink.html">GenericLink</a>
-                    ,
-                    <a href="pagelink.html">PageLink</a>
-                </strong>
-            </p>
-
-            <section name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>service</td>
-                        <td>String</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The name of the
-                            <a
-                                href="../../apidocs/org/apache/tapestry/engine/IEngineService.html">
-                                IEngineService
-                            </a>
-                            to invoke. Can be any service, esp random ones contributed by you.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>parameters</td>
-                        <td>
-                            Object or
-                            <br />
-                            Object[] or
-                            <br />
-                            List
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            An array of Objects to be encoded into the URL. These parameters will be
-                            decoded when the link is triggered.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            <p>
-                                Controls whether the link is produced. If disabled, the portion of
-                                the template the link surrounds is still rendered, but not the link
-                                itself.
-                            </p>
-                            <p>
-                                Using the namespace scheme, to create a link to a page in a library,
-                                you must provide the libraries namespace prefix.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>target</td>
-
-                        <td>String</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The name of the html target for this link, this is just the normal html attribute that will
-                            control where the response generated from this link will go. (Usually used in frames) 
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>anchor</td>
-
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The name of an anchor or element to link to. The final URL will have '#'
-                            and the anchor appended to it.
-                        </td>
-
-                    </tr>
-
-                    <tr>
-                        <td>scheme</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The required scheme ("http" or "https", typically) for the URL. This
-                            will force the creation of an absolute URL when the current request's
-                            scheme does not match the value for this parameter. This is most often
-                            used to switch to "https" for secure portions of an application (such as
-                            a login page), before switching back to standard "http" for the majority
-                            of an application.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>port</td>
-                        <td>Integer</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The required port (80, 443, 8080. 8443, typically) for the URL. This
-                            will force the creation of an absolute URL when the current request's
-                            scheme does not match the value for this parameter. This is most often
-                            used in conjunction with scheme to switch to "https:443"/"https:8443"
-                            for secure portions of an application (such as a login page), before
-                            switching back to standard "http:80"/"http:80" for the majority of an
-                            application.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>renderer</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/link/ILinkRenderer.html">
-                                ILinkRenderer
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-
-                        <td>The object which will actually render the link.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>rendered</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>href</em>
-                </p>
-
-            </section>
-
-            <section name="Examples">
-
-                <p>This example is under construction.</p>
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/scriptaculous/index.xml b/tapestry/src/site/xdoc/components/scriptaculous/index.xml
deleted file mode 100644
index 606f13d..0000000
--- a/tapestry/src/site/xdoc/components/scriptaculous/index.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2007 The Apache Software Foundation
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-    "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Script.aculo.us Components</title>
-    </properties>
-    <body>
-        <section name="Script.aculo.us Components">
-            <p>
-                This set of components wraps/extends/relies on the <a href="http://script.aculo.us/">script.acuulo.us</a>
-                javascript toolkit to provide ajax / dhtml enhancenced behavior.
-            </p>
-
-            <subsection name="Documentation">
-                <p>
-                    Most of the documentation for using the majority of <a href="http://script.aculo.us/">script.acuulo.us</a>
-                    controls can be found on their wiki <a href="http://wiki.script.aculo.us/scriptaculous/">here</a>. 
-                </p>
-                <p>
-                    <b>Script.aculo.us Documentation:</b> <a href="http://wiki.script.aculo.us/scriptaculous/">http://wiki.script.aculo.us/scriptaculous/</a>.
-                </p>
-            </subsection>
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/components/scriptaculous/suggest.xml b/tapestry/src/site/xdoc/components/scriptaculous/suggest.xml
deleted file mode 100644
index d050964..0000000
--- a/tapestry/src/site/xdoc/components/scriptaculous/suggest.xml
+++ /dev/null
@@ -1,496 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2007 The Apache Software Foundation
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-        "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Suggest</title>
-    </properties>
-    <body>
-
-        <section name="Suggest">
-
-            <p>
-                The exact same thing as the standard <a href="../form/textfield.html">TextField</a> component - with the additional
-                client side behavior of providing a dynamic autocompletion suggestion list drop down below the field as input
-                is typed in.
-            </p>
-            <img src="../../images/ComponentReference/Suggest.png" alt="Suggest Example" />
-            <p>
-                The main distinction between this and <a href="../form/textfield.html">TextField</a> is that this component needs some
-                additional parameters such as the source of the dynamic list that will be generated - as well as a listener method to invoke
-                on your page / component when something has been typed in on the client side input field. 
-            </p>
-            <p>
-                In addition to the regular client side enhancements this component can optionally render either a <code>&lt;input type="text" /&gt;</code> standard
-                form input field <em>or</em> it can render a <code>&lt;textarea&gt;Paragraph text...&lt;/textarea&gt;</code>.  The type rendered depends on how you
-                define the component in your html template.  Following is a small example of defining it as a <b>textarea</b> or <b>input</b>:
-            </p>
-<source><![CDATA[<input jwcid="@Suggest" listener="listener:filterSearch" listSource="ognl:listValues" />
-
-...
-
-<textarea jwcid="@Suggest" listener="listener:filterSearch" listSource="ognl:listValues" />
-]]></source>
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../apidocs/org/apache/tapestry/scriptaculous/Suggest.html">Suggest</a>
-                    ,
-                    <a href="../../apidocs/org/apache/tapestry/scriptaculous/ListItemRenderer.html">ListItemRenderer</a>
-                    ,
-                    <a href="../../apidocs/org/apache/tapestry/scriptaculous/DefaultListItemRenderer.html">DefaultListItemRenderer</a>
-                    ,
-                    <a href="http://wiki.script.aculo.us/scriptaculous/show/Ajax.Autocompleter">Script.aculo.us Ajax.Autocompleter</a>
-                    ,
-                    <a href="../form/textfield.html">TextField</a>
-                </strong>
-
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td> </td>
-                        <td>
-                            The value to be editted, which is is usually a string. Tapestry has
-                            limited ability to convert to and from strings.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then a disabled attribute will be rendered as part of the
-                            <code>&lt;input&gt;</code> or <code>&lt;textarea&gt;</code> tag, and the component will not update its value parameter
-                            when the form is submitted.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>displayName</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="../form/fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>translator</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/translator/Translator.html">
-                                Translator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            The translator to use when displaying and parsing the date.
-                            <br/><br/>
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>hidden</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then the type attribute will be "password", not "text", and
-                            user input in the browser will be masked.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>listener</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            Specifies an object that is notified when input is typed in to the field, which is
-                            typically a listener method of its container (for example, listeners.
-                            <em>method</em>).  This listener method will by default contain exactly one parameter of type String when
-                            invoked - which wil be the value that was typed in to the field in the browser.  You may add other
-                            additional parameters using the <b>parameters</b> parameter of this component. If this parameter is not provided,
-	                        Tapestry will attempt to find a listener with the capitalized id of the
-	                        component, prefixed by "do". For example, jwcid="nameSearch@Suggest" would expect
-	                        a listener called doNameSearch().
-                            
-                            <br /><br />
-
-                            <strong>See also:</strong> <a href="../../usersguide/listenermethods.html">Users Guide - Listeners</a>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>parameters</td>
-                        <td>
-                            Object or
-                            <br />
-                            Object[] or
-                            <br />
-                            List
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            <p>
-                                An array of objects to be encoded into the URL. These parameters
-                                will be decoded when the listener method is executed.
-                            </p>
-                            <p>
-                                In a web application built onto of Enterprise JavaBeans, the context
-                                is often the primary key of some Entity bean; typically such keys
-                                are Strings or Integers.
-                            </p>
-                            <p>
-                                A listener method can retrieve the parameters three ways:
-                                <br />
-                                parameters are declared in the method itself, e.g. - listenerMethod(
-                                <em>parameters</em>
-                                )
-                                <br />
-                                parameters are declared along with the IRequestCycle, e.g. -
-                                listenerMethod(IRequestCycle cycle,
-                                <em>parameters</em>
-                                )
-
-                                <br />
-                                or through the request cycle, e.g. - listenerMethod(IReuqestCycle
-                                cycle), using IRequestCycle.getServiceParameters()
-                            </p>
-                            <p>
-                                Prior to release 2.2, the parameters were always type String. They
-                                may now be of any type; type will be maintained when the parameters
-                                are later retrieved by a listener. See
-                                <a
-                                    href="../../apidocs/org/apache/tapestry/util/io/SqueezeAdaptor.html">
-                                    SqueezeAdaptor
-                                </a>
-                                for more details.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>stateful</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then the component requires an active (i.e.,
-                            non-new) HttpSession when triggered. Failing that, it throws a
-                            <a href="../../apidocs/org/apache/tapestry/StaleLinkException.html">
-                                StaleLinkException
-                            </a>
-                            . If false, then no check is necessary. The latter works well with links
-                            that encode all necessary state inside the URL itself.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>listSource</td>
-                        <td>Iterator, Collection, Object[], or Object</td>
-                        <td>yes</td>
-                        <td> </td>
-                        <td>
-                            The source of objects to be iterated, which may be a Collection, an
-                            Iterator, an array of Objects, or a even a single Object (which is
-                            treated as a singleton collection).
-
-                            <br /><br />
-                            This list is used as the source for all dynamic autocompletions and is expected to be appropriately
-                            filtered by you when the corresponding listener method is invoked to filter the list of available options.
-                        </td>
-                    </tr>
-                    
-                    <tr>
-                        <td>listItemRenderer</td>
-                        <td><a href="../../apidocs/org/apache/tapestry/scriptaculous/ListItemRenderer.html">ListItemRenderer</a></td>
-                        <td>yes</td>
-                        <td><a href="../../apidocs/org/apache/tapestry/scriptaculous/DefaultListItemRenderer.html">DefaultListItemRenderer</a></td>
-                        <td>
-                            This is the object that the component will defer actual rendering of the dynamic html list to.  According to the
-                            <a href="http://wiki.script.aculo.us/scriptaculous/show/Ajax.Autocompleter">Script.aculo.us Ajax.Autocompleter</a> documentation
-                            it is expected that this renderer return an unordered html list at the very least:
-
- <source><![CDATA[<ul>
-    <li>First Option</li>
-    <li>Second Option</li>
-    <li>Third Option</li>
-</ul>]]></source>
-                           <br />
-                            More elaborate options are of course possible - such as the
-                            <a href="http://opencomponentry.com:8080/timetracker/LocaleSuggest.html">TimeTracker demo</a> where the options returned
-                            contain image references to render the flag associated with different countries using a custom <a href="../../apidocs/org/apache/tapestry/scriptaculous/ListItemRenderer.html">ListItemRenderer</a>
-                            implementation.  The source for this custom implementation example can be found
-                            <a href="http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleListItemRenderer.java?view=markup">here</a>. 
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>maxResults</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>
-                            Optionally specified the maximum number of autocomplete suggestions that will be displayed to users.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>updateElementClass</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>autocomplete</td>
-                        <td>
-                            Specifies the html css class attribute that will be written to the hidden &lt;div&gt; that this component generates
-                            for the local client side javascript to populate the autocompletion results in to.  Override this parameter if you would
-                            like to change the css class name to another definition.
-
-                            The <a href="http://opencomponentry.com:8080/timetracker/LocaleSuggest.html">TimeTracker demo</a> page defines an inline
-                            css style block to style the autocompletion results <em>(something you will have to do for it to be usable at all)</em>
-                            using something like the following:
-
- <source><![CDATA[<style type="text/css">
-        div.autocomplete {
-            position:absolute;
-            width:250px;
-            background-color:white;
-            border:1px solid #888;
-            margin:0px;
-            padding:0px;
-        }
-        div.autocomplete ul {
-            list-style-type:none;
-            margin:0px;
-            padding:0px;
-        }
-        div.autocomplete ul li.selected { background-color: #ffb;}
-        div.autocomplete ul li {
-            list-style-type:none;
-            display:block;
-            margin:0;
-            padding:4px 0 4px 4px;
-            cursor:pointer;
-        }
-        div.autocomplete ul li img { border:none; margin-right: 10px; vertical-align:middle;}
-    </style>]]></source>
-                            <br /><br />
-                            <span class="warn">
-                                <strong>Warning:</strong>
-                                <p>
-                                    This component provides no default css style rules for the returned list - so if you don't define any such as the example
-                                    above shows your copmonent is not likely to work very well or be very usable.
-                                </p>
-                                <p>
-                                    There are other examples of default styling provided in the
-                                    <a href="http://wiki.script.aculo.us/scriptaculous/show/Ajax.Autocompleter">Script.aculo.us Ajax.Autocompleter</a> documentation.
-                                </p>
-                            </span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>options</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>literal:{method: 'get', frequency: 0.2}</td>
-                        <td>
-                            There are additional options for configuring how the client side behavior of this component works covered in the
-                            <a href="http://wiki.script.aculo.us/scriptaculous/show/Ajax.Autocompleter">Script.aculo.us Ajax.Autocompleter</a> documentation. By
-                            default this component uses http get <em>(something highly reccomended, it probably wouldn't even work with post)</em> and configures
-                            the frequency with which results are grabbed for autocompletion when input changes as <b>0.2</b> seconds.  The configuration specified
-                            here is passed in directly to the client side script.aculo.us object so they must conform to
-                            <a href="http://json.org">JSON</a> syntax rules or it will result in a parse exception being generated when your html template is
-                            processed by tapestry. <em>(JSON = JavaScript Object Notation)</em>
-
-                            <br /><br />
-                            You can also pass in things like <code>afterUpdateElement:"nameOfClientSideJavascriptFuncion"</code>, which is a way of having your custom
-                            javascript functions called after an item has been selected from the autocompletion list.
-
-                            <br /><br />
-                            Please see the <a href="http://wiki.script.aculo.us/scriptaculous/show/Ajax.Autocompleter">Script.aculo.us Ajax.Autocompleter</a> documentation
-                            for more information on all the available options. 
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body: <strong>removed</strong>
-                </p>
-                <p>
-                    Informal parameters: <strong>allowed</strong>
-                </p>
-                <p>
-                    Reserved parameters: <em>name, autocomplete</em>
-                </p>
-
-            </subsection>
-
-        </section>
-
-        <section name="Example">
-            <p>
-                This example is a basic bare-minimum using the majority of built in defaults to do something similar to the
-                <a href="http://opencomponentry.com:8080/timetracker/LocaleSuggest.html">TimeTracker demo</a> - only without the custom
-                <a href="../../apidocs/org/apache/tapestry/scriptaculous/ListItemRenderer.html">ListItemRenderer</a> implementation.  There is
-                no .page file shown here as this example uses annotations to define the page properties used.
-            </p>
-
-            <subsection name="HTML Template">
-
- <source><![CDATA[<span jwcid="@Border">
-
-<p>
-Autocompleting input suggestion fields using scriptaculous javascript library.
-</p>
-
-    <style type="text/css">
-        div.autocomplete {
-            position:absolute;
-            width:250px;
-            background-color:white;
-            border:1px solid #888;
-            margin:0px;
-            padding:0px;
-        }
-        div.autocomplete ul {
-            list-style-type:none;
-            margin:0px;
-            padding:0px;
-        }
-        div.autocomplete ul li.selected { background-color: #ffb;}
-        div.autocomplete ul li {
-            list-style-type:none;
-            display:block;
-            margin:0;
-            padding:4px 0 4px 4px;
-            cursor:pointer;
-        }
-        div.autocomplete ul li img { border:none; margin-right: 10px; vertical-align:middle;}
-    </style>
-
-    <form jwcid="@Form" class="container">
-        <h3>Locale suggestion</h3>
-
-        <fieldset>
-             <table width="90%" class="form" cellpadding="2" cellspacing="0" >
-                 <tbody>
-                     <tr>
-                         <td><label jwcid="@FieldLabel" field="component:suggest" /></td>
-                         <td><input jwcid="suggest" size="34" /></td>
-                     </tr>
-                 </tbody>
-             </table>
-        </fieldset>
-    </form>
-
-</span>]]></source>
-            </subsection>
-
-            <subsection name="Java Page">
- <source><![CDATA[public abstract class LocaleSuggest extends BasePage {
-
-    @Component(bindings = {"value=inputLocale",
-            "displayName=literal:Locale",
-            "listSource=localeList",
-            "listener=listener:suggestLocale"})
-    public abstract Suggest getSuggest();
-
-    public abstract String getInputLocale();
-
-    public abstract String getFilterString();
-    public abstract void setFilterString(String filter);
-
-    public List getLocaleList()
-    {
-        String filter = getFilterString();
-        Locale[] locales = Locale.getAvailableLocales();
-
-        if (filter == null || filter.length() < 1)
-        {
-            return Arrays.asList(locales);
-        }
-
-        filter = filter.toUpperCase();
-
-        List<Locale> ret = new ArrayList<Locale>();
-        // used to ensure no duplicates are stored in the list as java.util.Locale doesn't
-        // provde an equals() method.
-        List temp = new ArrayList();
-
-        for (Locale locale : locales)
-        {
-            if (locale.getDisplayCountry().toUpperCase().indexOf(filter) > -1
-                    && !temp.contains(locale.getDisplayCountry()))
-            {
-                ret.add(locale);
-                temp.add(locale.getDisplayCountry());
-            }
-        }
-
-        return ret;
-    }
-
-    /**
-     * Invoked dynamically via XHR whenever input changes in the form input field. The method above - getLocaleList() -
-     * is what actually filters the list of suggested options displayed based on the characters they typed in to the input field.
-     */
-    public void suggestLocale(String filter)
-    {
-        setFilterString(filter);
-    }
-}
-
-]]></source>
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/developmentguide/hivemind/index.xml b/tapestry/src/site/xdoc/developmentguide/hivemind/index.xml
deleted file mode 100644
index dc28ed9..0000000
--- a/tapestry/src/site/xdoc/developmentguide/hivemind/index.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2007 The Apache Software Foundation
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-        "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Development Guide - HiveMind</title>
-    </properties>
-    <body>
-
-        <section name="HiveMind IoC">
-            <p>
-                Tapestry makes extensive use of the <a href="http://hivemind.apache.org/hivemind1/">HiveMind</a> Inversion of Control container
-                for all of the core inner API and services.
-            </p>
-
-            <p>
-                This section of the development guide will go over some of the key services you may need to understand in order to take
-                full advantage of the functionality available to you. 
-            </p>
-
-            <p>
-                <strong>See Also:</strong> <a href="../tapestry-framework/hivedoc/index.html">Tapestry HiveDoc</a> documentation.
-            </p>
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/developmentguide/hivemind/roundedcorners.xml b/tapestry/src/site/xdoc/developmentguide/hivemind/roundedcorners.xml
deleted file mode 100644
index 80ea4d9..0000000
--- a/tapestry/src/site/xdoc/developmentguide/hivemind/roundedcorners.xml
+++ /dev/null
@@ -1,444 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2007 The Apache Software Foundation
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-        "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Development Guide - Rounded Corner Service</title>
-    </properties>
-    <body>
-
-        <section name="Rounded Corners Service">
-            <p>
-                As of version 4.1.2 of Tapestry a new Rounded Corner generator service is now available for you to use
-                as a convenience for generating various types of images that are easily referencable in your CSS and html
-                templates. 
-            </p>
-
-            <p>
-                The original inspiration for this service is based around the article on ajaxian.com which outlines the
-                <a href="http://ajaxian.com/archives/googles-rounded-corner-generator">Google Rounded Corner Generator</a> service
-                used by some of the google web services to construct UIs.
-            </p>
-
-            <img src="../../images/developmentguide/rounded-top-right-orange.gif" alt="Orange Rounded Corner Example" />
-            <img src="../../images/developmentguide/rounded-bottom-left-green.gif" alt="Green Rounded Corner Example" />
-            <img src="../../images/developmentguide/rounded-top-left-blue.gif" alt="Blue Rounded Corner Example" />
-            <img src="../../images/developmentguide/rounded-bottom-right-red.gif" alt="Red Rounded Corner Example" />
-
-            <p>
-                The basic idea behind the service is that it lets you write really simple / definable URL strings generate the images.
-                For instance - the orange corner listed above was generated with a URL like: 
-            </p>
-
-<source><![CDATA[./rounded?c=FF9900&bc=white&w=60&h=60&a=tr&sw=3&o=.5
-]]></source>
-
-            <p>
-                There are actually a lot more options than just generating rounded corners.  If you look at the images listed above you'll notice
-                that they additionally have drop shadows generated. 
-            </p>
-
-            <span class="info">
-                <strong>Information:</strong>
-                <p>
-                    The rounded corner service is currently only available by including the <b>tapestry-contrib</b>
-                    library dependency in your project.
-                </p>
-            </span>
-
-        </section>
-
-        <section name="Rounded Corner Parameters">
-            <table>
-                <tr>
-                    <th>Name</th>
-                    <th>Type</th>
-                    <th>Required</th>
-                    <th>Default</th>
-                    <th>Description</th>
-                </tr>
-                <tr>
-                    <td>c</td>
-                    <td>
-                        Hex string <br />
-                        or <br />
-                        any <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#color-units">css2</a> color name.
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        Primary color of the generated image.  Can be any standard hex string - such as <code>FF9900</code> or any
-                        of the 16 standard css2 colors defined in the <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#color-units">w3 css2 spec</a>.
-
-                        <br /><br />
-                        <strong>CSS2 Color names:</strong> aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, and yellow
-                    </td>
-                </tr>
-                <tr>
-                    <td>bc</td>
-                    <td>
-                        Hex string <br />
-                        or <br />
-                        any <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#color-units">css2</a> color name.
-                    </td>
-                    <td>no</td>
-                    <td>transparent</td>
-                    <td>
-                        Background color of the generated image.  Can be any standard hex string - such as <code>FF9900</code> or any
-                        of the 16 standard css2 colors defined in the <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#color-units">w3 css2 spec</a>.
-
-                        <br /><br />
-                        <strong>CSS2 Color names:</strong> aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, and yellow
-
-                        <span class="warn">
-                            <strong>Warning:</strong>
-                            <p>
-                                If you don't specify a background color for your image the service will render the image with a transparent background and serve the
-                                image as type <code>image/png</code>.  While this does provide additional flexibility please keep in mind that most Internet Explorer browsers
-                                are incapable of rendering PNG images.
-                            </p>
-                        </span>
-                    </td>
-                </tr>
-                <tr>
-                    <td>w</td>
-                    <td>
-                       pixels
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        Specifies the width of the generated image.  Can be simple numbers like <code>10</code> for 10 pixels or more precise such as
-                        <code>5.16</code> pixels.
-                    </td>
-                </tr>
-                <tr>
-                    <td>h</td>
-                    <td>
-                        pixels
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        Specifies the height of the generated image in pixels.
-                    </td>
-                </tr>
-                <tr>
-                    <td>a</td>
-                    <td>
-                        One of:[tl,tr,bl,br]
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        The angle of the corner you would like to generate.  <code>tl=Top Left</code>,  <code>tr=Top Right</code>,  <code>bl=Bottom Left</code>,  <code>br=Bottom Right</code>
-                    </td>
-                </tr>
-                <tr>
-                    <td>sw</td>
-                    <td>
-                        pixels
-                    </td>
-                    <td>no</td>
-                    <td> </td>
-                    <td>
-                        If you would like the corner to also have a drop shadow this parameter controls the relative width in pixels of the generated drop shadow effect around the outer
-                        edges of your corner.
-                    </td>
-                </tr>
-                <tr>
-                    <td>o</td>
-                    <td>
-                        percent
-                    </td>
-                    <td>no</td>
-                    <td>0.5</td>
-                    <td>
-                        Controls the opacity of the generated drop shadow when used in conjunction with the <code>sw</code>(shadow width) parameter.   
-                    </td>
-                </tr>
-            </table>
-        </section>
-
-        <section name="Side Shadow Parameters">
-            <p>
-                There are two additional types of images this service can generate - one of these is buidling straight side shadows.
-            </p>
-
-<source><![CDATA[<style type="text/css">
-.side {
-    background: url('/rounded?s=right&sw=2') repeat-y right;
-    padding-right: 10px;
-}
-</style>]]></source>
-
-            <style type="text/css">
-                .side {
-                    background: url('../../images/developmentguide/side-shadow.png') repeat-y right;
-                    padding-right: 10px;
-                }
-            </style>
-
-            <p><strong>Example:</strong></p>
-            <span class="side">This has a side shadow.</span>
-            <p> </p>
-            
-            <table>
-                <tr>
-                    <th>Name</th>
-                    <th>Type</th>
-                    <th>Required</th>
-                    <th>Default</th>
-                    <th>Description</th>
-                </tr>
-                <tr>
-                    <td>s</td>
-                    <td>
-                        One of: [left, right, top, bottom]
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        The side to generate the side shadow for.
-                    </td>
-                </tr>
-                <tr>
-                    <td>sw</td>
-                    <td>
-                        pixels
-                    </td>
-                    <td>no</td>
-                    <td> </td>
-                    <td>
-                        This parameter controls the relative width in pixels of the generated drop shadow effect.
-                    </td>
-                </tr>
-                <tr>
-                    <td>o</td>
-                    <td>
-                        percent
-                    </td>
-                    <td>no</td>
-                    <td>0.5</td>
-                    <td>
-                        Controls the opacity of the generated drop shadow when used in conjunction with the <code>sw</code>(shadow width) parameter.
-                    </td>
-                </tr>
-            </table>
-        </section>
-
-        <section name="Whole Shadow Parameters">
-            <p>
-                Entire areas can also be generated with a shadow effect coming out in the bottom right.  This particular image generation is still
-                slightly inflexible in all available options but should suffice for the majority of simple circumstances.
-            </p>
-
-<source><![CDATA[<style type="text/css">
-.detail {
-    display:block;
-    margin-top:2em;
-    padding: 0 1.1em 2em;
-    background: url("rounded?c=white&bc=white&w=600&h=40&shadow=true&ah=10&aw=10&sw=4&o=.5") left bottom no-repeat;
-}
-</style>]]></source>
-
-            <style type="text/css">
-                .detail {
-                    display:block;
-                    margin-top:2em;
-                    padding: 0 1.1em 2em;
-                    background: url('../../images/developmentguide/whole-shadow.gif') left bottom no-repeat;
-                }
-            </style>
-
-            <p><strong>Example:</strong></p>
-            <div class="detail">
-                This is a detail block of text surrounded with a drop shadow.
-            </div>
-
-            <table>
-                <tr>
-                    <th>Name</th>
-                    <th>Type</th>
-                    <th>Required</th>
-                    <th>Default</th>
-                    <th>Description</th>
-                </tr>
-                <tr>
-                    <td>c</td>
-                    <td>
-                        Hex string <br />
-                        or <br />
-                        any <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#color-units">css2</a> color name.
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        Primary color of the generated image.  Can be any standard hex string - such as <code>FF9900</code> or any
-                        of the 16 standard css2 colors defined in the <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#color-units">w3 css2 spec</a>.
-
-                        <br /><br />
-                        <strong>CSS2 Color names:</strong> aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, and yellow
-                    </td>
-                </tr>
-                <tr>
-                    <td>bc</td>
-                    <td>
-                        Hex string <br />
-                        or <br />
-                        any <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#color-units">css2</a> color name.
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        Background color of the generated image.  Can be any standard hex string - such as <code>FF9900</code> or any
-                        of the 16 standard css2 colors defined in the <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#color-units">w3 css2 spec</a>.
-
-                        <br /><br />
-                        <strong>CSS2 Color names:</strong> aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, and yellow
-                    </td>
-                </tr>
-                <tr>
-                    <td>w</td>
-                    <td>
-                       pixels
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        Specifies the width of the generated image.  Can be simple numbers like <code>10</code> for 10 pixels or more precise such as
-                        <code>5.16</code> pixels.
-                    </td>
-                </tr>
-                <tr>
-                    <td>h</td>
-                    <td>
-                        pixels
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        Specifies the height of the generated image in pixels.
-                    </td>
-                </tr>
-                <tr>
-                    <td>aw</td>
-                    <td>
-                       pixels
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        Specifies the arc width of the generated image in pixels.
-                    </td>
-                </tr>
-                <tr>
-                    <td>ah</td>
-                    <td>
-                        pixels
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        Specifies the arc height of the generated image in pixels.
-                    </td>
-                </tr>
-                <tr>
-                    <td>sw</td>
-                    <td>
-                        pixels
-                    </td>
-                    <td>yes</td>
-                    <td> </td>
-                    <td>
-                        This parameter controls the relative width in pixels of the generated drop shadow effect around the outer
-                        edges of your corners.
-                    </td>
-                </tr>
-                <tr>
-                    <td>o</td>
-                    <td>
-                        percent
-                    </td>
-                    <td>no</td>
-                    <td>0.5</td>
-                    <td>
-                        Controls the opacity of the generated drop shadow when used in conjunction with the <code>sw</code>(shadow width) parameter.
-                    </td>
-                </tr>
-            </table>
-        </section>
-
-        <section name="HiveMind / web.xml Configuration">
-            <p>
-                The <a href="http://opencomponentry.com:8080/timetracker/LocaleList.html">TimeTracker</a> demo application is probably the best example
-                of configuring this service and using it in an application. 
-            </p>
-
-            <p>
-                There isn't a whole lot to configuring the service, but it will require that you have a <code>hivemodule.xml</code> hivemind configuration
-                file set-up in your project's <code>WEB-INF/</code> directory.  The TimeTracker demo application has a hivemodule.xml definition looking like:
-            </p>
-
-<source><![CDATA[
-<?xml version="1.0"?>
-<module id="timetracker" version="1.0.0" package="org.apache.tapestry.timetracker">
-
-    <contribution configuration-id="tapestry.url.ServiceEncoders">
-        <asset-encoder id="asset" path="/assets" />
-        <extension-encoder id="extension" extension="svc" after="*"/>
-        <direct-service-encoder id="direct" stateless-extension="direct" stateful-extension="sdirect"/>
-        <page-service-encoder id="page" extension="html" service="page"/>
-
-        <!-- This is key - maps /rounded servlet path requests to the rounded corner service -->
-        <path-encoder id="rounded" path="/rounded" service="rounded" />
-    </contribution>
-    
-</module>
-]]></source>
-
-            <p>
-                The key addition to the file is the use of the new path-encoder service in what is probably the standard hivemined setup that
-                most people already configured to take advantage of <a href="../../usersguide/friendly-urls.html">friendly urls</a>. 
-            </p>
-
-<source><![CDATA[<path-encoder id="rounded" path="/rounded" service="rounded" />]]></source>
-
-            <p>
-                The only other addition you'll want to make is to configure your web.xml servlet mapping section to include the
-                new <code>path="/rounded"</code> configuration you just added to your hivemodule.xml:
-            </p>
-
-<source><![CDATA[..
-<servlet-mapping>
-    <servlet-name>timetracker</servlet-name>
-    <url-pattern>/rounded</url-pattern>
-</servlet-mapping>
-]]></source>
-
-        </section>
-
-        <section name="Caching">
-            <p>
-                By default the rounded corner service handles all of the necessary http caching header logic in addition to caching the generated
-                images on the server side - so the service and the images it generates should be more than scalable enough to fit the majority of
-                asset serving needs of most applications.
-            </p>
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/download.xml b/tapestry/src/site/xdoc/download.xml
deleted file mode 100644
index 3a20e28..0000000
--- a/tapestry/src/site/xdoc/download.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-    "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Download Tapestry 4.1</title>
-    </properties>
-    <body>
-
-<section name="Download Tapestry 4.1">
-    If you are looking for the official binary/source distributions of Tapestry 4.1.2, they can be downloaded
-    <a href="http://tapestry.apache.org/download.html">here.</a>
-    
-    <p>
-    <a href="http://tapestry.apache.org/download.html">Download official distribution</a>
-    </p>
-</section>
-
-<section name="Snapshot builds">
-  <p>
-  The Tapestry snapshot builds are currently available via the ibiblio maven2 and apache.org snapshot 
-  repositories. To download the current 4.1.3-SNAPSHOT release you shouldn't need to change your pom settings at 
-  all, other than including the right artifacts to download Tapestry.
-  </p>
-  
-  <p>
-  In order to download the snapshot release versions of Tapestry you will need to add the following repository
-  to your project's pom <em>(if not already present)</em>:
-  </p>
- 
-<source xml:space="preserve"><![CDATA[
-http://people.apache.org/repo/m2-snapshot-repository/
-]]></source>
-   
-    <span class="warn">
-    <strong>Warning:</strong>
-    <p>
-    Anything released to the snapshot repositories will be under active development and should not be considered stable. 
-    </p>
-    </span>
-   
-    <subsection name="POM Configuration">
-        <p>To add this repository to your own projects pom.xml you will need a section that looks like:</p>
-        
-<source xml:space="preserve"><![CDATA[
-<repositories>
-    <repository>
-        <id>apache.snapshots</id>
-        <url>http://people.apache.org/repo/m2-snapshot-repository</url>
-    </repository>
-</repositories>
-]]></source>
-        
-        <p>
-            The dependency inclusion rules should be easy once you have the snapshot repository installed, here is 
-            an example of adding just the framework and annotation modules:
-        </p>
-        
-<source xml:space="preserve"><![CDATA[
-<dependency>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-framework</artifactId>
-    <version>4.1.3-SNAPSHOT</version>
-</dependency>
-<dependency>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-annotations</artifactId>
-    <version>4.1.3-SNAPSHOT</version>
-</dependency>
-<dependency>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-contrib</artifactId>
-    <version>4.1.3-SNAPSHOT</version>
-</dependency>
-]]></source>
-    
-    </subsection>
-    
-    <p>
-        Tapestry is distributed under the <a href="http://tapestry.apache.org/license.html">Apache License, version 2.0</a>.
-    </p>
-    
-</section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/exampleapps/index.xml b/tapestry/src/site/xdoc/exampleapps/index.xml
deleted file mode 100644
index 5a94521..0000000
--- a/tapestry/src/site/xdoc/exampleapps/index.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Tapestry Examples</title>
-    </properties>
-    <body>
-    
-    
-        <section name="Tapestry Examples">
-        <p>
-            Tapestry's main distribution includes the Tapestry JAR files plus all source code for
-            Tapestry, the Tapestry documentation, and Tapestry examples.
-        </p>
-        
-        
-        <span class="info">
-            <strong>Note:</strong>
-            <p>
-            While the main source distribution does not require a 1.5 JDK, the examples do as they
-            make use of features such as annotations.
-            </p>
-        </span>
-        
-        <p>
-            Because of licensing concerns, JAR dependencies (such as Javassist) and example
-            applications are not distributed with Tapestry itself. As an Apache Software Foundation
-            project, the Tapestry distributions
-            <em>must</em>
-            be limited to just software directly provided by the ASF; nothing from outside the ASF
-            is allowed.
-        </p>
-        <p>
-            If you like, you can easily (?) build Tapestry, including the examples, from source. The
-            necessary dependencies are automatically downloaded by Ant build scripts, but it takes
-            some elbow grease to set up. Details at
-            <a href="http://wiki.apache.org/tapestry/BuildingTapestry">the Wiki</a>
-            .
-        </p>
-        <p>
-            <strong>
-                But wouldn't it be nice to just get the compiled examples, ready to take for a spin?
-            </strong>
-            We think so, so we now provide the examples, precompiled, packaged, and ready to go, as
-            a seperate distribution, from a non-ASF server.
-        </p>
-        <p>
-            These examples are available at
-            <a href="http://howardlewisship.com/downloads/quick-start/">
-                http://howardlewisship.com/downloads/quick-start/
-            </a>
-            as
-            <code>tapestry-examples-</code>
-            <em>version</em>
-            <code>.tar.gz</code>
-            .
-        </p>
-
-        <p>
-            The distribution is a snapshot of a
-            <a href="http://jboss.org/">JBoss</a>
-            4.0.2 instance, with two Tapestry applications deployed into it.
-        </p>
-
-        <p>
-            To make use of it, unpack the distribution, which will create a
-            <code>jboss-tapestry-examples-</code>
-            <em>version</em>
-            directory. Change to the
-            <code>bin</code>
-            sub-directory and execute the
-            <code>run.bat</code>
-            or
-            <code>run.sh</code>
-            startup script.
-        </p>
-
-        <p>JBoss will start up and you'll be able to access the two demonstration applications.</p>
-
-
-        <section name="Workbench">
-
-            <p>
-                <a href="http://localhost:8080/workbench/">http://localhost:8080/workbench/</a>
-            </p>
-
-            <img src="../images/examples/workbench.png" alt="Workbench Screenshot" />
-
-            <p>
-                The workbench is a testbed for many common Tapestry components. The tabs across the
-                top demonstrate different Tapestry features and components, including localization,
-                input validation, exception reporting, and the Palette and Table components.
-            </p>
-        </section>
-        <section name="Virtual Library">
-
-            <p>
-                <a href="http://localhost:8080/vlib/">http://localhost:8080/vlib/</a>
-            </p>
-
-            <img src="../images/examples/vlib.png" alt="Virtual Library Screenshot" />
-
-
-            <p>
-                The Virtual Library is a small but complete J2EE application. It uses J2EE Entity
-                beans with container managed persistence, and a stateless session facade, with
-                Tapestry on the front end. The application is used to manage a shared pool of books,
-                tracking who owns and who is currently borrowing each book.
-            </p>
-            <p>
-                Three users are built into the library. All three use the same password, "secret":
-            </p>
-            <ul>
-                <li>dilbert@bigco.com</li>
-                <li>squeue@bug.org</li>
-                <li>ringbearer@bagend.shire</li>
-            </ul>
-            <p>
-                The "ringbearer" user has administrative access. When logged in as ringbearer,
-                you'll see additional menu options for managing users and publishers.
-            </p>
-        </section>
-        
-        
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/index.xml b/tapestry/src/site/xdoc/index.xml
deleted file mode 100644
index cf78853..0000000
--- a/tapestry/src/site/xdoc/index.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-        "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Tapestry 4.1 - Dojo Integrated</title>
-        <author email="jkuhnert@apache.org">Jesse Kuhnert</author>
-    </properties>
-    <body>
-        <section name="Tapestry 4.1 - Dojo Integrated">
-            <p>
-                Tapestry is an open-source framework for creating dynamic, robust, highly scalable
-                web applications in Java.  Tapestry complements and builds upon the standard Java
-                Servlet API, and so it works in any servlet container or application server.
-            </p>
-
-            <p>
-                This development series is focused around providing a full layer of support for building
-                highly dynamic web applications (XHR/ajax/dhtml).  Whether you would like to sprinkle in a
-                few tiny ajax effects in an existing application, or build a full featured <em>heavy client</em>
-                application Tapestry(and <a href="http://dojotoolkit.org">dojo</a>) should be able to
-                support your needs.
-
-                <a href="http://opencomponentry.com:8080/timetracker"><img style="float:right;margin-top:8px;margin-left:8px" src="./images/autocompleter.png" alt="Autocompleting select component" /></a>
-            </p>
-
-            <p><strong>New Features:</strong></p>
-            <ul>
-                <li><b>JSON -</b>  Brand new <a href="apidocs/org/apache/tapestry/IJSONRender.html">API</a>
-                    enabling data communication via the
-                    <a href="http://json.org/">JSON</a>(JavaScript Object Notation)
-                    standard. New <a href="apidocs/org/apache/tapestry/dojo/IWidget.html">component classes</a>
-                    and <a href="apidocs/org/apache/tapestry/services/ResponseBuilder.html">rendering schemes</a> also accompany the API addition, allowing anyone to easily
-                    add JSON communication to an existing component or new components. </li>
-                <li><b>XHR -</b>  The ever popular XML communication format has also been added into the
-                    <a href="apidocs/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.html">Tapestry core</a>,
-                    allowing most of the common <em>ajax</em> concepts to be easily developed in yours
-                    and existing Tapestry components.</li>
-                <li><b><a href="http://dojotoolkit.org">Dojo</a> bundled -</b> As all of the functionality
-                    in this release is based around the <a href="http://dojotoolkit.org">dojo</a>
-                    javascript toolkit, we have provided it bundled with the core Tapestry jar
-                    files. No profile building/installation necessary. Just drop the jars in and
-                    get at all of the client side goodies you like.</li>
-                <li><b>Widgets -</b> New <a href="http://dojotoolkit.org">dojo</a> toolkit based
-                    <a href="apidocs/org/apache/tapestry/dojo/form/Autocompleter.html">widget</a>
-                    <a href="apidocs/org/apache/tapestry/dojo/form/DropdownDatePicker.html">components</a>
-                    and complimenting <a href="apidocs/org/apache/tapestry/dojo/form/IFormWidget.html">foundation</a> Component classes make it easy for anyone to create
-                    dojo widgets and use them as Tapestry components. The initial 4.1 release won't be
-                    as focused on providing new components as it will solid infrastructure support, but
-                    more and more will be included as the release matures. Currently included are
-                    <em><a href="components/dojo/autocompleter.html">Autocompleter</a>
-                        ,
-                        <a href="components/dojo/dropdowndatepicker.html">DropdownDatePicker</a>
-                        ,
-                        <a href="components/dojo/dropdowntimepicker.html">DropdownTimePicker</a></em>.</li>
-                <li><b>Client Side Validation -</b> The <a href="usersguide/clientside-validation.html">client side validation</a> support
-                    in Tapestry has been completely replaced with a new <a href="http://dojotoolkit.org">dojo</a> based API,
-                    providing richer and <a href="javascript/form-validation.html">more complete</a> validation than has been
-                    seen in previous releases. All of the validation constraints that can be specified on the server now have
-                    client side functional equivalents. Default logic for displaying validation errors/interactions on the client side
-                    UI has also been updated a great deal. The old alert box mechanism has been replaced by field
-                    decorators that apply css rules to your form fields, as well as dhtml dialog boxes displaying
-                    summaries of errors. Much much more is planned in this area, but the current set of functionality
-                    should be more than enough to make many happy.</li>
-                <li><b>New Annotations -</b> Perhaps the most exciting new addition, a new <a href="tapestry-annotations/index.html#EventListener">@EventListener</a>
-                    annotation has been added. This will allow people to bind one of their page/component
-                    class listeners to virtually any client side widget/html event concievable. The API also supports
-                    varying types of listening, such as being able to submit a form when a particular event happens,
-                    or simplying using the new <a href="apidocs/org/apache/tapestry/event/BrowserEvent.html">BrowserEvent</a>
-                    object to determine the client side state when the event happened.
-                    <em>(Such as x/y coordinates of mouse clicks, event targets, etc..This is pretty
-                        much a literal one-to-one mapping to real browser generated Events.)</em></li>
-                <li><b>Rounded Corner/Drop Shadow services -</b> <a href="developmentguide/hivemind/roundedcorners.html">Check out</a> some of the cool new
-                    <a href="developmentguide/hivemind/roundedcorners.html">image generation services</a> available.
-                    <br />
-                    <img src="images/rounded-blue.gif" alt="Blue Rounded Corner" style="margin-right:6px; margin-top:6px;"/>
-                    <img src="images/rounded-orange.gif" alt="Orange Rounded Corner" style="margin-top:6px;"/>
-                </li>
-            </ul>
-
-            <subsection name="New Tutorials!">
-                <p>
-                    A great new <a href="tutorials/index.html">Devshed Tutorial Series</a> written by <a href="http://sundraw.ws/">Alexander Kolesnikov</a> has been slowly
-                    building up as he continues to pump new articles out.
-                </p>
-                <br /><br />
-                <p>
-                    The amount of material covered is closer to being an actual book than a random set of tutorials.  This is
-                    well worth reading for anyone wanting to get a better overall handle on using Tapestry 4.
-                </p>
-            </subsection>
-
-            <subsection name="Getting started?: Try the Tapestry 4 Archetype">
-                <p>
-                    Try the maven2 <a href="tapestry-archetype/index.html">Archetype</a> to bootstrap your project with some typical configurations.
-                </p>
-            </subsection>
-
-        </section>
-
-        <section name="Dojo">
-            <p>
-                <a href="http://dojotoolkit.org"><img src="./images/small-dojo-logo.png" alt="Dojo Toolkit" style="float:right" /></a>
-                Most of the functionality in this series is based entirely on the wonderful
-                <a href="http://dojotoolkit.org">Dojo</a> javascript toolkit library. Not to
-                say that you won't easily be able to plug in another toolkit if you like, just
-                that the defaults will all be based around dojo.
-            </p>
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/quickstart/contributed.xml b/tapestry/src/site/xdoc/quickstart/contributed.xml
deleted file mode 100644
index ac2a79f..0000000
--- a/tapestry/src/site/xdoc/quickstart/contributed.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-    "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Quick Start: Contributed</title>
-        <author email="jkuhnert@apache.org">Jesse Kuhnert</author>
-    </properties>
-    <body>
-    
-        <section name="Quick Start: Contributed Tutorials">
-        <p>
-            This page provides links/summaries of community contributed tutorials/papers
-            that may be helpful for learning Tapestry.
-        </p>
-        
-        <h4><a href="http://files.doublenegative.com.au/jumpstart/">Tapestry JumpStart</a></h4>
-        <p>
-            The <a href="http://files.doublenegative.com.au/jumpstart/">Tapestry JumpStart</a> project provides
-            a fully functional example application demonstrating some commonly used/needed functionality in
-            typical Tapestry applications.
-        </p>
-        
-        <p><strong>Features:</strong></p>
-        <ul>
-            <li>A login screen with basic authentication.</li>
-            <li>These pre-built tables and entities: Users, Roles, Codes and CodeGroups.</li>
-            <li>Screens to search, create, edit, and delete them.</li>
-            <li>All the source.</li>
-            <li><strong>The Back button.</strong> JumpStart uses a flow synchronizer to handle the re-posting problems 
-                caused by the Back button, Refresh button, and double-clicking on Submit buttons.</li>
-            <li><strong>Navigating back.</strong> JumpStart implements a callback stack to answer 
-                the question "where did I come from".</li>
-            <li><strong>Date handling.</strong> JumpStart uses the joda-time classes, and provides validators, 
-                translators, and a date picker for them.</li>
-            <li><strong>Localization.</strong> JumpStart illustrates Tapestry's localization mechanism in action.</li>
-            <li><strong>Client Persistence.</strong> JumpStart implements the "client:form"  strategy.</li>
-            <li><strong>Business and data layer.</strong> JumpStart uses <b>EJB3</b>, without the need for value objects/DTOs.</li>
-        </ul>
-        
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/quickstart/directlink.xml b/tapestry/src/site/xdoc/quickstart/directlink.xml
deleted file mode 100644
index d17c7f3..0000000
--- a/tapestry/src/site/xdoc/quickstart/directlink.xml
+++ /dev/null
@@ -1,601 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>QuickStart: DirectLink</title>
-    </properties>
-    <body>
-        
-        <section name="QuickStart: DirectLink">
-        <p>
-            In this tutorial, we'll get introduced to one of the real workhorses of Tapestry, the
-            <a href="../components/link/directlink.html">DirectLink</a>
-            component. It is one of the most common ways of triggering server-side behavior. Along
-            the way, we'll start seeing some other common aspects of developing web applications
-            using Tapestry.
-        </p>
-        
-        <section name="HTML Template">
-            <p>This application simply counts the number of times we click a link.</p>
-
-            <img src="../images/QuickStart/directlink1.png" alt="Initial DirectLink Tutorial" />
-
-            <p>
-                This requires a little more than we can accomplish with just an HTML template; we'll
-                need to supplement with a Java class. This java class will contain a property that
-                stores the count, and contain logic used to increment the count.
-            </p>
-
-            <p>We'll start again with the Home page's template:</p>
-
-            <source xml:space="preserve">
-&lt;html&gt;
-  &lt;head&gt;
-    &lt;title&gt;Tutorial: DirectLink&lt;/title&gt;
-  &lt;/head&gt;
-  &lt;body&gt;
-    &lt;h1&gt;DirectLink Tutorial&lt;/h1&gt;
-        
-&lt;p&gt;
-  The current value is: 
-    &lt;span style="font-size:xx-large"&gt;&lt;span jwcid="@Insert" value="ognl:counter"&gt;37&lt;/span&gt;&lt;/span&gt;
-&lt;/p&gt;        
-
-&lt;p&gt;
-  &lt;a href="#" jwcid="@DirectLink" listener="listener:doClick"&gt;increment counter&lt;/a&gt;
-&lt;/p&gt;
-        
-&lt;p&gt;
-  &lt;a href="#" jwcid="@PageLink" page="Home"&gt;refresh&lt;/a&gt;
-&lt;/p&gt;        
-        
-  &lt;/body&gt;
-&lt;/html&gt;  
-</source>
-
-            <p>
-                Much of this should look familiar. We're again using the
-                <a href="../components/general/insert.html">Insert</a>
-                component, and we're using
-                <a href="http://www.ognl.org">OGNL</a>
-                again. Instead of creating a new instance, we're using OGNL in a simpler way; it
-                will read the counter property and provide that to the Insert component in its value
-                parameter.
-            </p>
-
-            <p>
-                That's fine, but where does this counter property live? In the Home page's Java
-                class. We'll see how to create that class shortly.
-            </p>
-
-            <p>
-                Just displaying the current value isn't enough, we need a way to change that value.
-                That's where the
-                <a href="../components/link/directlink.html">DirectLink</a>
-                component comes in; it will invoke a method of our Java class for us. This
-                connection between component and method is supplied in the listener parameter. The
-                "listener:" prefix activates the logic that lets Tapestry invoke the method with the
-                matching name. We provide a method, doClick(), in the page's Java class, and the
-                DirectLink component will invoke this method for us, in response to the user
-                clicking the rendered link in their web browser.
-            </p>
-
-
-        </section>
-
-        <section name="Page classes">
-
-
-            <p>
-                So, we have half the puzzle: the HTML template. But we need the Java class that will
-                contain the properties to be stored, and the methods to be invoked.
-            </p>
-
-            <p>
-                First, we need a Java package to store the class. For this tutorial, we'll use
-                tutorials.directlink.pages. That means we'll create the Home.java source file as
-                src/java/tutorials/directlink/pages/Home.java:
-            </p>
-
-            <source xml:space="preserve">
-package tutorials.directlink.pages;
-
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.html.BasePage;
-
-public abstract class Home extends BasePage
-{
-    @Persist
-    public abstract int getCounter();
-    public abstract void setCounter(int counter);
-    
-    public void doClick()
-    {
-        int counter = getCounter();
-        
-        counter++;
-        
-        setCounter(counter);
-    }
-}
-</source>
-
-            <p>
-                The Java classes you write will extend from the Tapestry BasePage class
-                <sup>1</sup>
-                . To this base class, we are adding a property, counter, and a listener method,
-                doClick()
-                <sup>2</sup>
-                .
-            </p>
-
-
-            <p>
-                <em>Abstract? What's up with that?</em>
-                That's a pretty typical first reaction to seeing a Tapestry page class; why is it
-                abstract, why is it not an ordinary JavaBean?
-            </p>
-
-            <p>
-                The answer involves a bit of a digression. Tapestry pages exist on the server, and
-                are somewhat expensive to create ... expensive enough that you don't want to
-                constantly create them and discard them. In this way, they are much like database
-                connections ... you want to pool pages for reuse from one request to the next.
-            </p>
-
-            <p>
-                Because the pages are pooled and shared, in fact shared
-                <em>between different users</em>
-                , it's very important that they page objects be cleansed of any user-specific or
-                request-specific data before they go back into the pool. You can do this in your own
-                code (there are additional interfaces to implement and additional code to write),
-                but it is
-                <em>easier</em>
-                to let Tapestry do that work for you.
-            </p>
-
-            <p>
-                By declaring an accessor method as abstract, you are implicitly directing Tapestry
-                to "fill in" the details; at
-                <em>runtime</em>
-                , it will create a subclass of the Java class you provide, extending your
-                implementation with all the grinding details. As well see in later tutorials, this
-                in fact goes far beyond just properties; all sorts of useful features can be tied to
-                different flavors of abstract methods (often coupled with different
-                <a href="../tapestry-annotations/index.html">annotations</a>
-                ).
-            </p>
-
-            <p>
-                There's something special about this counter property. It has to remember its value
-                <em>between</em>
-                requests. The @Persist annotation, attached to the getCounter() accessor method,
-                directs Tapestry to make this a
-                <em>persistent page property</em>
-                . Despite the name, this has nothing to do with database persistence, it's about
-                storing the value for the property in the HttpSession between requests, and
-                restoring it the next time that the same user, in the same session, accesses the
-                page.
-            </p>
-
-            <p>
-                This is another pivotal feature in Tapestry; individual page properties (or
-                properties of components used within the page) can store their value in the
-                HttpSession automatically. We can seperate out the persistent state of the page from
-                any
-                <em>instance</em>
-                of the page. This minimizes the amount of information that must be stored in the
-                HttpSession; rather than entire page objects (with all those templates and nested
-                components), we store just the tiny handful of properties that need to "stick
-                around" until the next request.
-            </p>
-
-            <p>
-                This approach to session management, combined with the pooling of page instances, is
-                critical to achieving another of Tapestry fundamental principals:
-                <strong>Efficiency</strong>
-                . Tapestry applications will scale because of how they manage server-side state. The
-                cost of this is that the classes and methods are abstract, with the implementations
-                of many methods only provided dynamically, by Tapestry, at runtime.
-            </p>
-
-            <p>
-                Back from our digression. We now have the counter property, and we understand how it
-                is stored in the HttpSession between requests. That makes the implementation of the
-                doClick() listener method straight forward: get the current value for the proeprty,
-                increment it, and store it back into the property.
-            </p>
-
-            <p>
-                Again, we're demonstrating part of our promise about Tapestry: we're talking about
-                objects and methods and properties. There's a URL in there, generated by Tapestry,
-                for the DirectLink. There's attributes stored in the HttpSession. We don't see those
-                or care about them.
-            </p>
-
-        </section>
-
-        <section name="Locating the page class">
-
-
-            <p>
-                We've provided the Home page's template and Java class, but we haven't quite
-                connected the dots enough for our application to run. If we tried to run the
-                application (by opening a web browser to
-                <a href="http://localhost:8080/directlink/app">
-                    http://localhost:8080/directlink/app
-                </a>
-                ), we'd get the Tapestry exception page:
-            </p>
-
-            <img src="../images/QuickStart/directlink2.png"
-                alt="Exception report - missing property" />
-
-            <p>
-                That's quite a lot of information. The root cause of the exception is the fact that
-                Tapestry couldn't find the Home class we created, so it instead used BasePage as-is.
-                BasePage doesn't have a counter property, so the OGNL expression
-                <code>counter</code>
-                couldn't be evaluated (you can see that in the deepest exception). You can see in
-                the target property of the ognl.NoSuchPropertyException, the value
-                <code>$BasePage_0@cec78d[Home]</code>
-                is the toString() of a page class; the first part is the name of the class
-                (remember, this is a subclass generated at runtime by Tapestry), the value in
-                brackets is the name of the page.
-            </p>
-
-            <p>
-                This exception bubbled up to the top-level of Tapestry, getting wrapped inside other
-                exceptions along the way. The framework couldn't continue with the Home page, so it
-                generated this exception report instead.
-            </p>
-
-
-            <p>
-                As you can see, the exception report is quite detailed; it shows the entire stack of
-                exceptions, including their properties. It identifies the file and line at the root
-                of the problem, and even displays an excerpt from that file. Further down on the
-                page are exhaustive details about all the Servlet API objects ... in short you are
-                given all the information you need to understand what was going on in your
-                application at the time of the failure, without having to restart using a debugger.
-                This is another Tapestry priciple in action:
-                <strong>Feedback</strong>
-                . When things go wrong, Tapestry should help you fix your problem, rather than get
-                in the way.
-            </p>
-
-            <p>
-                So, the root of our problem is that Tapestry can't find our Home page, so we need to
-                tell it where to look. This involves providing Tapestry with a little bit of
-                configuration about our application.
-            </p>
-
-            <p>
-                We'll create an
-                <em>application specification</em>
-                for our application, and store the configuration data there. An application
-                specification is an XML file that provides extra information about the application
-                to Tapestry. It is optional; we didn't have one in the previous example.
-            </p>
-
-            <p>
-                The name of the servlet ("app", in this example) is appended with the extension
-                ".application" to form the name of the specification. The specification itself is
-                stored in the WEB-INF folder of the web application. In our project, it is stored as
-                src/context/WEB-INF/app.application:
-            </p>
-
-            <source xml:space="preserve">
-&lt;?xml version="1.0"?&gt;
-&lt;!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd"&gt;
-  
-&lt;application&gt;  
-  &lt;meta key="org.apache.tapestry.page-class-packages" value="tutorials.directlink.pages"/&gt;
-	
-&lt;/application&gt;
-</source>
-
-            <p>
-                Application specifications are validated XML files, with a real DTD (at the
-                specified location). The &lt;meta&gt; element is used to specify meta data ...
-                configuration data that doesn't fit in elsewhere. Here we're using it to inform
-                Tapestry about which Java packages to search for pages. This value can even be a
-                comma-seperated list of packages, if there is more than one package to search.
-            </p>
-
-            <p>
-                With this file in place, Tapestry has all it needs to run our application: the Home
-                page's HTML template, its Java class, at the connection between the two. Now, let's
-                look at improving our example a bit.
-            </p>
-
-        </section>
-
-        <section name="Understanding DirectLink URLs">
-
-
-            <p>
-                The URLs generated by the DirectLink component are more complex than those generated
-                by the PageLink component. Let's look at one:
-            </p>
-
-            <source xml:space="preserve">
-http://localhost:8080/directlink/app?component=%24DirectLink&amp;page=Home&amp;service=direct&amp;session=T
-</source>
-
-            <p>
-                The first query parameter, component, identifies the component within the page. That
-                %24 is "URL-ese" for a dollar sign. In Tapestry, every component ends up with a
-                unique id within its page. If you don't provide one, Tapestry creates one from the
-                component type, prefixed with a dollar sign. Here, our annoynmous DirectLink
-                component was given the id $DirectLink. If you had many different DirectLinks on a
-                page, you'd start seeing component ids such as $DirectLink_0, $DirectLink_1, etc.
-            </p>
-
-            <p>
-                You can give a component a shorter and more mneumonic id by putting the desired id
-                before the "@" sign:
-            </p>
-
-            <source xml:space="preserve">
-  &lt;a href="#" jwcid="inc@DirectLink" listener="listener:doClick"&gt;increment counter&lt;/a&gt;
-</source>
-
-            <p>
-                After making that change to the template, the URL for the DirectLink component is
-                just a bit easier to read:
-            </p>
-
-            <source xml:space="preserve">
-http://localhost:8080/directlink/app?component=inc&amp;page=Home&amp;service=direct&amp;session=T
-</source>
-
-            <p>
-                The other changes from the previous examples are the service query parameter and the
-                session query parameter. The service query parameter indicates that the processing
-                of the request is different than for a link created by the PageLink component. Here
-                we need to get a page, find a component in the page and invoke a listener method
-                <em>before</em>
-                we can render the response. With PageLink, we just get the page and render it.
-            </p>
-
-            <p>
-                Lastly, the session query parameter indicates whether there was an HttpSession at
-                the time the link was rendered. Tapestry uses this to detect when the HttpSession
-                expired ... perhaps because the user walked away from the computer for a while
-                before clicking the link. If the application was stateless (no HttpSession) when
-                this link was generated, then the session parameter simply wouldn't appear in the
-                URL.
-            </p>
-
-            <p>
-                One thing to take note of is that the method name
-                <em>is not</em>
-                part of the URL, just the id of the component. This is very desirable ... why expose
-                more of the construction of your application than you have to? As importantly, this
-                helps to prevent malicious users from subverting your application; there simply
-                isn't a way to get an arbitrary listener method to be invoked, only one that you, as
-                the developer, wired to a specific component.
-            </p>
-
-            <p>
-                These are what Tapestry pros call "ugly URLs". The ugly part is the use of query
-                parameters, rather than paths, to express the information in the URL. Ugly URLs can
-                cause some problems; since the entire application is routed through the /app path,
-                it's hard to apply J2EE declarative security. Likewise, the use of query parameters
-                means that most search engines will not spider the site. The solution is to use
-                "friendly URLs"
-                <sup>3</sup>
-                , which is covered in a later tutorial.
-            </p>
-
-
-        </section>
-
-        <section name="Adding more links">
-
-
-            <p>
-                This application is good, but we should have a way to reset the counter back to
-                zero. We're going to add a link to the page to do just that. The end result will
-                look like:
-            </p>
-
-            <img src="../images/QuickStart/directlink3.png" alt="Tutorial with clear link" />
-
-            <p>
-                To accomplish this we need to add another link to the Home page's HTML template, and
-                connect that to logic expressed as a new method on the Home page class. First the
-                template:
-            </p>
-
-            <source xml:space="preserve">
-&lt;p&gt;
-  &lt;a href="#" jwcid="clear@DirectLink" listener="listener:doClear"&gt;clear counter&lt;/a&gt;
-&lt;/p&gt;
-</source>
-
-            <p>
-                This is just
-                <em>another</em>
-                DirectLink component, on the same page, but with a different component id, and a
-                different configuration. Here, we've called the component "clear", and connected it
-                to the doClear() listener method.
-            </p>
-
-            <p>That method is also quite simple:</p>
-
-            <source xml:space="preserve">
-    public void doClear()
-    {
-        setCounter(0);
-    }
-</source>
-
-            <p>
-                And that's all it takes. We've added a new operation to our page, clearing the
-                counter, in four lines of Java code (three if you format your code the way Sun likes
-                you to), and a couple of lines of HTML. No outside configuration beyond that. This
-                conforms to another Tapestry principle:
-                <strong>Consistency</strong>
-                . Adding more operations is not different from adding the first operation. Add as
-                many as you like, Tapestry will take care of it.
-            </p>
-
-            <p>By contrast, using traditional servlets, we would have had to:</p>
-            <ul>
-                <li>Decide on the URL</li>
-                <li>Update the HTML with that URL</li>
-                <li>Write an entire new servlet class for this single operation</li>
-                <li>Update web.xml with the servlet and the servlet mapping (the URL)</li>
-            </ul>
-
-
-        </section>
-
-        <section name="Passing data in the links">
-
-
-            <p>
-                Just invoking a single operation is a bit limiting; we should be able to increment
-                by more than just 1:
-            </p>
-
-            <img src="../images/QuickStart/directlink4.png" alt="Multiple DirectLinks" />
-
-            <p>
-                In this case, we want to have more than one DirectLink component call the same
-                listener. And we need to figure out whether to increment the counter by 1, 5 or 10.
-            </p>
-
-            <p>
-                This requires two changes. First, we must change the old increment link into three
-                new links:
-            </p>
-
-            <source xml:space="preserve">
-&lt;p&gt;
-  &lt;a href="#" jwcid="by1@DirectLink" listener="listener:doClick" parameters="ognl:1"&gt;increment counter by 1&lt;/a&gt;
-&lt;/p&gt;
-
-&lt;p&gt;
-  &lt;a href="#" jwcid="by5@DirectLink" listener="listener:doClick" parameters="ognl:5"&gt;increment counter by 5&lt;/a&gt;
-&lt;/p&gt;
-
-&lt;p&gt;
-  &lt;a href="#" jwcid="by10@DirectLink" listener="listener:doClick" parameters="ognl:10"&gt;increment counter by 10&lt;/a&gt;
-&lt;/p&gt;
-</source>
-
-            <p>
-                We've given the three components mnuemonic ids ("by1", "by5" and "by10"). In
-                addition, we're passing parameters in the URL; that's the parameters parameter
-                <sup>4</sup>
-                . We can see that value encoded into the URL:
-            </p>
-
-            <source xml:space="preserve">http://localhost:8080/directlink/app?component=by10&amp;page=Home&amp;service=direct&amp;session=T&amp;sp=10</source>
-
-            <p>
-                The sp query parameter holds the value. "sp" is short for "service parameter", and
-                is a hold over from Tapestry 3.0. In Tapestry 4.0, these are called "listener
-                parameters", because they are only meaningful to the listener method. Also, we're
-                only showing a single parameter, but the same mechanism supports multiple
-                parameters.
-            </p>
-
-            <p>
-                That's how information gets encoded into the URL, but how does the listener method
-                find out about it? By adding a parameter to the doClick() listener method:
-            </p>
-
-            <source xml:space="preserve">
-    public void doClick(int increment)
-    {
-        int counter = getCounter();
-        
-        counter += increment;
-        
-        setCounter(counter);
-    }  
-</source>
-
-            <p>
-                Tapestry maps the values in the sp query parameter to the parameters of the listener
-                method. Also, note that
-                <em>type</em>
-                of the value has been maintained. it started as a number, and is still a number.
-                Listener parameters can be of virtually any type, and will keep their type through
-                being encoded into the URL and decoded in the subsequent request. You can even pass
-                arbitrary objects ... as long as they implement java.io.Serializable (but you will
-                start seeing some very long URLs if you do).
-            </p>
-
-            <p>
-                Again, we're seeing consistency. We wanted to pass information in the URL, and were
-                able to use the same mechanisms; the DirectLink component, the listener method ...
-                we just added a little sensible extra to get the needed information from point A
-                (the page as it renders) to point B (the listener method when the link is clicked).
-            </p>
-        </section>
-
-        <section name="Next: Forms">
-
-
-            <p>
-                <a href="../components/link/directlink.html">DirectLink</a>
-                may be a real workhorse, but the heart of most web applications are the subject of
-                our next tutorial:
-                <a href="forms.html">Tapestry Forms</a>
-                .
-            </p>
-
-        </section>
-        
-        <span class="info">
-        <strong>Note:</strong>
-        <p>
-            <sup>1</sup>
-            This is my (Howard Lewis Ship's) least favorite thing in Tapestry 4.0; it is something
-            that should be erradicated from Tapestry (you should not have to extend a base class at
-            all), but that will cause some significant backwards compatibility issues.
-        </p>
-
-        <p>
-            <sup>2</sup>
-            Listener methods don't have to be named in any special way, they just have to be public
-            methods. This naming convention, do
-            <em>Something</em>
-            , is a good one, but is anything but mandatory.
-        </p>
-
-        <p>
-            <sup>3</sup>
-            For some reason, "ugly" is the opposite of "friendly".
-        </p>
-
-        <p>
-            <sup>4</sup>
-            Say that a few times fast.
-        </p>
-        </span>
-        
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/quickstart/forms.xml b/tapestry/src/site/xdoc/quickstart/forms.xml
deleted file mode 100644
index 8ee5fb9..0000000
--- a/tapestry/src/site/xdoc/quickstart/forms.xml
+++ /dev/null
@@ -1,638 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>QuickStart: Forms</title>
-    </properties>
-    <body>
-
-        <section name="QuickStart: Forms">
-            <p>
-                In this tutorial, we'll cover the basics of Tapestry forms, and gain an
-                understanding of the lifecycle of a Tapestry application. We'll also see how to
-                transfer information from one page to another.
-            </p>
-
-            <p>
-                The theme of this tutorial is an application used to track third-party libraries for
-                Tapestry. Each project will have a number of properties:
-            </p>
-
-            <ul>
-                <li>name</li>
-                <li>release ID</li>
-                <li>short and long description</li>
-                <li>category</li>
-                <li>supported Tapestry version</li>
-                <li>release date</li>
-                <li>public (visible to others) or private (visible only to the owner)</li>
-            </ul>
-
-            <p>
-                Later tutorials will return to this theme, and cover the issues related to accessing
-                data from a database. For this tutorial, we're just going to collect the above data
-                (in an Add Project page), and then echo it back to the user.
-            </p>
-
-        <section name="Home Page">
-
-
-            <p>
-                The Home page for our application is very simple, it doesn't require a Java class:
-            </p>
-
-            <source xml:space="preserve">
-&lt;html jwcid="@Shell" title="Tapestry Component Database"&gt;
-&lt;body&gt;
-	
-&lt;h1&gt;Tapestry Component Database&lt;/h1&gt;
-
-&lt;p&gt;
-  Options:
-&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;&lt;a jwcid="@PageLink" page="AddProject"&gt;Add New Project&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;
-	
-	
-&lt;/body&gt;
-&lt;/html&gt;
-</source>
-
-            <p>
-                We've introduced another handy component,
-                <a href="../components/general/shell.html">Shell</a>
-                . This component is just a convienience for generating the &lt;html&gt;,
-                &lt;head&gt;, and &lt;title&gt; tags (though it has quite a few other tricks up its
-                sleeve).
-            </p>
-
-
-        </section>
-
-        <section name="Value Object">
-
-
-            <p>
-                One of the cornerstones of Tapestry is the ability to edit properties of value
-                objects directly. These value objects, in a real application, will be read from the
-                database, editted by Tapestry components, then written back into the database.
-            </p>
-
-            <p>
-                Objects editted by Tapestry in this manner have
-                <em>no</em>
-                requirements. Unlike pages, they don't have to extend a base class or implement an
-                interface. They are truly the
-                <strong>Model</strong>
-                in the
-                <strong>Model-View-Controller Pattern</strong>
-                .
-            </p>
-
-            <p>For this tutorial, we're using a very simple value object:</p>
-
-            <source xml:space="preserve">package tutorial.forms.data;
-
-import java.util.Date;
-
-/**
- * Contains the name and description of a release of a project.
- * 
- * @author Howard M. Lewis Ship
- */
-public class ProjectRelease
-{
-    private String _name;
-
-    private String _releaseId;
-
-    private String _shortDescription;
-
-    private String _longDescription;
-
-    private String _category;
-
-    private String _tapestryVersion;
-
-    private Date _releaseDate;
-
-    private boolean _public;
-
-    /**
-     * A user-specified category, used to group similar projects.
-     */
-    public String getCategory()
-    {
-        return _category;
-    }
-
-    public void setCategory(String category)
-    {
-        _category = category;
-    }
-
-    /**
-     * A longer description used on a detail page.
-     */
-    public String getLongDescription()
-    {
-        return _longDescription;
-    }
-
-    public void setLongDescription(String longDescription)
-    {
-        _longDescription = longDescription;
-    }
-
-    /**
-     * The name of the project.
-     */
-    public String getName()
-    {
-        return _name;
-    }
-
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    /**
-     * If true, the project is visible to other users. If false, then the project is not visible.
-     * This is used as a "draft" mode, when information about the project is not complete.
-     */
-    public boolean isPublic()
-    {
-        return _public;
-    }
-
-    public void setPublic(boolean public1)
-    {
-        _public = public1;
-    }
-
-    /**
-     * The date when the project was released. Used to generate a chronological listing.
-     */
-    public Date getReleaseDate()
-    {
-        return _releaseDate;
-    }
-
-    public void setReleaseDate(Date releaseDate)
-    {
-        _releaseDate = releaseDate;
-    }
-
-    /**
-     * The version number of the project that was released.
-     */
-    public String getReleaseId()
-    {
-        return _releaseId;
-    }
-
-    public void setReleaseId(String releaseId)
-    {
-        _releaseId = releaseId;
-    }
-
-    /**
-     * A single-line description used in an overview listing.
-     */
-    public String getShortDescription()
-    {
-        return _shortDescription;
-    }
-
-    public void setShortDescription(String shortDescription)
-    {
-        _shortDescription = shortDescription;
-    }
-
-    /**
-     * The version of Tapestry required for the project.
-     */
-    public String getTapestryVersion()
-    {
-        return _tapestryVersion;
-    }
-
-    public void setTapestryVersion(String tapestryVersion)
-    {
-        _tapestryVersion = tapestryVersion;
-    }
-}
-</source>
-
-        </section>
-
-        <section name="AddProject Page">
-
-
-            <p>
-                As we've seen, the Home page includes a link to the AddProject page; the AddProject
-                page will contain the form that collects the data about the project before storing
-                it into a database. We don't have a database in this example, but we can still
-                collect the data.
-            </p>
-
-            <subsection name="HTML Template">
-
-
-                <source xml:space="preserve">&lt;html jwcid="@Shell" title="Add New Project"&gt;
-  &lt;body jwcid="@Body"&gt;
-    &lt;h1&gt;Add New Project&lt;/h1&gt;
-    &lt;form jwcid="form@Form" success="listener:doSubmit"&gt;
-      &lt;table&gt;
-        &lt;tr&gt;
-          &lt;th&gt;Name&lt;/th&gt;
-          &lt;td&gt;
-            &lt;input jwcid="name@TextField" value="ognl:project.name" size="40"/&gt;
-          &lt;/td&gt;
-        &lt;/tr&gt;
-        &lt;tr&gt;
-          &lt;th&gt;Release ID&lt;/th&gt;
-          &lt;td&gt;
-            &lt;input jwcid="release@TextField" value="ognl:project.releaseId" size="20"/&gt;
-          &lt;/td&gt;
-        &lt;/tr&gt;
-        &lt;tr&gt;
-          &lt;th&gt;Short Description&lt;/th&gt;
-          &lt;td&gt;
-            &lt;input jwcid="short@TextField" value="ognl:project.shortDescription" size="40"/&gt;
-          &lt;/td&gt;
-        &lt;/tr&gt;
-        &lt;tr&gt;
-          &lt;th&gt;Long Description&lt;/th&gt;
-          &lt;td&gt;
-            &lt;textarea jwcid="long@TextArea" value="ognl:project.longDescription" rows="10" cols="40"/&gt;
-          &lt;/td&gt;
-        &lt;/tr&gt;
-        &lt;tr&gt;
-          &lt;th&gt;Tapestry Version&lt;/th&gt;
-          &lt;td&gt;
-            &lt;input jwcid="tapestryVersion@TextField" value="ognl:project.tapestryVersion" size="20"/&gt;
-          &lt;/td&gt;
-        &lt;/tr&gt;
-        &lt;tr&gt;
-          &lt;th&gt;Release Date&lt;/th&gt;
-          &lt;td&gt;
-            &lt;input jwcid="releaseDate@DatePicker" value="ognl:project.releaseDate"/&gt;
-          &lt;/td&gt;
-        &lt;/tr&gt;
-        &lt;tr&gt;
-          &lt;th&gt;Public&lt;/th&gt;
-          &lt;td&gt;
-            &lt;input jwcid="public@Checkbox" value="ognl:project.public"/&gt;
-          &lt;/td&gt;
-        &lt;/tr&gt;
-      &lt;/table&gt;
-      &lt;input type="submit" value="Add Project"/&gt;
-    &lt;/form&gt;
-  &lt;/body&gt;
-&lt;/html&gt;</source>
-
-                <p>This template introduces a number of new components:</p>
-
-                <ul>
-                    <li>
-                        <a href="../components/general/body.html">Body</a>
-                        -- organizes the JavaScript generated for the page (needed to use the
-                        <a href="../components/form/datepicker.html">DatePicker</a>
-                        )
-                    </li>
-                    <li>
-                        <a href="../components/form/form.html">Form</a>
-                        -- generates an HTML form and controls the submit behavior
-                    </li>
-                    <li>
-                        <a href="../components/form/textfield.html">TextField</a>
-                        -- creates a text field (&lt;input type="text"/&gt;) used to
-                        <em>edit</em>
-                        (read and update) a property of the page
-                    </li>
-                    <li>
-                        <a href="../components/form/textarea.html">TextArea</a>
-                        -- as with
-                        <a href="../components/form/textfield.html">TextField</a>
-                        , but generates a multi-line &lt;textarea&gt;
-                    </li>
-                    <li>
-                        <a href="../components/form/datepicker.html">DatePicker</a>
-                        -- a JavaScript popup calendar
-                    </li>
-                    <li>
-                        <a href="../components/form/checkbox.html">Checkbox</a>
-                        -- edits a
-                        <em>boolean</em>
-                        property of the page
-                    </li>
-                </ul>
-
-                <p>
-                    The
-                    <a href="../components/form/form.html">Form</a>
-                    's success parameter is linked to a listener method. It is invoked only when
-                    there are no validation errors. We'll discuss validation in a later tutorial.
-                </p>
-
-                <p>
-                    The
-                    <a href="../components/general/body.html">Body</a>
-                    component plays a crucial role in Tapestry; it organizes all the JavaScript
-                    generated when a page renders. It assists components with generated unique names
-                    for client-side variables and functions, and organizes all the JavaScript
-                    generated by all the component within the page into two large blocks (one at the
-                    top of the page, one at the bottom). The
-                    <a href="../components/form/datepicker.html">DatePicker</a>
-                    component will not operate unless it is enclosed by a
-                    <a href="../components/general/body.html">Body</a>
-                    component.
-                </p>
-
-                <p>
-                    The
-                    <a href="../components/form/textfield.html">TextField</a>
-                    and
-                    <a href="../components/form/textarea.html">TextArea</a>
-                    components edit properties of the page. Because the value parameter is an
-                    <a href="http://www.ognl.org">OGNL</a>
-                    expression, it is not limited to editting properties directly exposed by the
-                    page class; it can follow property paths. We'll see how to define the project
-                    property of the page shortly.
-                </p>
-
-                <p>
-                    As you can see, Tapestry offers a number of components for editting specific
-                    types of properties. In addition, we'll see in a bit how the existing components
-                    can be configured for editting other types as well.
-                </p>
-
-                <p>
-                    As the template shows, this page is reliant on having a specific Java class,
-                    with a doSubmit() listener method and a project property. Let's create that
-                    next.
-                </p>
-
-            </subsection>
-
-            <subsection name="AddProject Page Class">
-
-
-                <p>Let's start with the minimum for this class and add details as necessary.</p>
-
-                <source xml:space="preserve">package tutorial.forms.pages;
-
-import org.apache.tapestry.html.BasePage;
-
-import tutorial.forms.data.ProjectRelease;
-
-/**
- * Java class for the AddProject page; contains a form used to collect data for creating a new
- * {@link tutorial.forms.data.ProjectRelease}.
- * 
- * @author Howard M. Lewis Ship
- */
-public abstract class AddProject extends BasePage
-{
-    public abstract ProjectRelease getProject();
-
-    public void doSubmit()
-    {
-
-    }
-}
-</source>
-
-                <p>
-                    Maybe this is too minimal; if we launch the application and choose the Add New
-                    Project link, we get an exception:
-                </p>
-
-                <img src="../images/QuickStart/forms1.png" alt="Null Pointer Exception" />
-
-                <p>
-                    The root of this exception is a null value: we defined a place to store a
-                    ProjectRelease object but didn't actually provide an instance.
-                    <a href="http://www.ognl.org">OGNL</a>
-                    attempted to dereference through the null value and threw the OgnlException.
-                    Here we can see the advantage of Tapestry's exception reporting ... showing the
-                    stack of exceptions gave us context into our application (the line in the
-                    template associated with the error) without obscuring the underlying cause.
-                </p>
-
-                <p>
-                    What we need to do is create an instance of ProjectRelease and store it into the
-                    property so that the
-                    <a href="../components/form/textfield.html">TextField</a>
-                    components can edit it. We have to be careful because in a live application,
-                    pages will be pooled and reused constantly.
-                </p>
-
-                <p>
-                    For this situation, the right approach is to listen for the PageBeginRender
-                    event, and store the new instance into the property then. The ProjectRelease
-                    object will be used for the duration of the request, then discarded at the end
-                    of the request.
-                </p>
-
-                <p>
-                    Listening for these lifecycle events is simple; you just need to select the
-                    correct listener interface and implement it; Tapestry will automatically
-                    register your page to receive the notifications. Here, the interface is
-                    <a
-                        href="../apidocs/org/apache/tapestry/event/PageBeginRenderListener.html">
-                        PageBeginRenderListener
-                    </a>
-                    :
-                </p>
-
-                <source xml:space="preserve">package tutorial.forms.pages;
-
-import java.util.Date;
-
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.html.BasePage;
-
-import tutorial.forms.data.ProjectRelease;
-
-/**
- * Java class for the AddProject page; contains a form used to collect data for creating a new
- * {@link tutorial.forms.data.ProjectRelease}.
- * 
- * @author Howard M. Lewis Ship
- */
-public abstract class AddProject extends BasePage implements PageBeginRenderListener
-{
-    public abstract ProjectRelease getProject();
-
-    public abstract void setProject(ProjectRelease project);
-
-    public void pageBeginRender(PageEvent event)
-    {
-        ProjectRelease project = new ProjectRelease();
-
-        project.setReleaseDate(new Date());
-
-        setProject(project);
-    }
-
-    public void doSubmit()
-    {
-
-    }
-}
-</source>
-
-                <p>
-                    The pageBeginRender() method will be invoked whenever the page renders. It is
-                    also, due to a useful quirk of Tapestry, invoked when a form within the page is
-                    submitted. Not only can we create an instance, but we have the opportunity to
-                    set some initial values for fields.
-                </p>
-
-                <p>
-                    With this in place, the page will now render, and we can begin entering some
-                    data into it:
-                </p>
-
-                <img src="../images/QuickStart/forms2.png" alt="AddProject Page" />
-
-
-            </subsection>
-
-            <subsection name="Form Submission">
-
-
-                <p>
-                    As implemented above, submitting the form doesn't appear to do anything. Sure,
-                    the form submits, and information is pulled out of the request and applied to
-                    the properties of the ProjectRelease object, but then the AddProject page is
-                    re-rendered.
-                </p>
-
-                <p>
-                    So ... how did the ProjectRelease object stick around? Shouldn't we have gotten
-                    a NullPointerException again, when the form submitted and the
-                    <a href="../components/form/textfield.html">TextField</a>
-                    component updated property project.name? What actually happened is that the
-                    ProjectRelease object was discarded ... but when a form is submitted on a page,
-                    the PageBeginRender interface is triggered again, just like for a form render.
-                    This means that the existing code does create a new ProjectRelease instance,
-                    giving the TextField components a place to store the values from the form.
-                </p>
-
-
-                <p>
-                    As wonderful as it is that the new ProjectRelease object gets updated, what we
-                    really want is for
-                    <em>something to happen</em>
-                    . We're going to change things so that a different page is displayed when the
-                    form is submitted. Further, that form will show the same information collected
-                    by the AddProject page.
-                </p>
-
-                <p>
-                    To accomplish this, we're going to change the doSubmit() method, and have it
-                    obtain the ShowProject page. The easiest way to make different pages work
-                    together is by
-                    <em>injecting</em>
-                    one page into another. This can be done using an annotation
-                    <sup>1</sup>
-                    :
-                </p>
-
-                <source xml:space="preserve">
-    @InjectPage("ShowProject")
-    public abstract ShowProject getShowProject();   </source>
-
-                <p>
-                    This code, part of AddProject.java, establishes the connection from the
-                    AddProject page to the ShowProject page.
-                </p>
-
-                <p>
-                    We can leverage that code inside doSubmit() to pass information from the
-                    AddProject page to the ShowProject page; we can also
-                    <em>activate</em>
-                    the ShowProject page, so that it renders the response.
-                </p>
-
-                <source xml:space="preserve">  
-  public IPage doSubmit()
-  {
-    ShowProject showProject = getShowProject();
-
-    showProject.setProject(getProject());
-
-    return showProject;
-  }  </source>
-
-                <p>
-                    A lot is going on here in a very small amount of code. First off, this method is
-                    no longer void, it returns a page (
-                    <a href="../apidocs/org/apache/tapestry/IPage.html">IPage</a>
-                    is the interface all page classes must implement). When a listener method
-                    returns a page, that page becomes the
-                    <em>active page</em>
-                    , the page which will render the response to the client.
-                </p>
-
-                <p>
-                    This is an example of what we mean when we talk about objects, methods and
-                    properties. We don't talk about the "ShowProject.html" template ... we talk
-                    about the ShowProject page, and leave the details about where its template is
-                    and what's on that template to the ShowProject page. Further, to pass
-                    information from the AddProject page to the ShowProject page, we don't muck
-                    about with HttpServletRequest attributes ... we store an object into a property
-                    of the ShowProject page.
-                </p>
-
-                <p>
-                    With all this in place, we can now submit the form and see the ShowProject page:
-                </p>
-
-                <img src="../images/QuickStart/forms3.png" alt="ShowProject Page" />
-
-            </subsection>
-
-        </section>
-
-        <section name="Next: ???">
-            <p>
-                <em>More coming soon ...</em>
-            </p>
-        </section>
-            
-            <span class="info">
-            <strong>Note:</strong>
-            <p>
-                <sup>1</sup>
-                Of course, annotations required JDK 1.5, which you'll need for these tutorials. If
-                you can't use JDK 1.5 in production, that's OK. Tapestry is compatible with JDK 1.3
-                and has another approach, based on XML, for injecting pages or doing just about
-                anything else that shows up as an annotation in the tutorials.
-            </p>
-            </span>
-            
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/quickstart/helloworld.xml b/tapestry/src/site/xdoc/quickstart/helloworld.xml
deleted file mode 100644
index fe1831a..0000000
--- a/tapestry/src/site/xdoc/quickstart/helloworld.xml
+++ /dev/null
@@ -1,416 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Quick Start: Hello World</title>
-    </properties>
-    <body>
-
-        <section name="Quick Start: Hello World">
-        <p>
-            In this tutorial, we'll cover setting up the most basic Tapestry application, a simple
-            "Hello World" application that displays the current time. We'll then extend it just a
-            bit, adding a touch of interactivity.
-        </p>
-        
-        <p>
-            The final source for this tutorial is packaged as
-            <strong>helloworld.tar.gz</strong>
-            .
-        </p>
-        
-        <section name="Tapestry Application Basics">
-
-
-            <p>Our first application will look like the following when it runs:</p>
-
-            <img src="../images/QuickStart/helloworld1.png" alt="HelloWorld step 1 screen shot." />
-
-            <p>
-                Tapestry applications always include a page named "Home". The Home page is the first
-                page displayed by the application, when it is first started (that is, when the
-                client web browser first accesses the starting URL).
-            </p>
-
-            <p>
-                Tapestry pages are always a combination of a Java class and a template (we could
-                say, "an HTML template", but Tapestry is not limited to just HTML). In many cases,
-                Tapestry will use a built-in Java class when you don't provide one; for a trivial
-                page like ours, we don't need to supply a Java class at all.
-            </p>
-
-            <p>
-                We'll start with the HTML template then, which is a file named Home.html in the root
-                of the web application context. In the project, it is stored as
-                src/context/Home.html:
-            </p>
-
-            <source xml:space="preserve">
-&lt;html&gt;
-  &lt;head&gt;
-    &lt;title&gt;Tutorial: HelloWorld&lt;/title&gt;
-  &lt;/head&gt;
-  &lt;body&gt;
-    &lt;h1&gt;HelloWorld Tutorial&lt;/h1&gt;
-  &lt;/body&gt;
-&lt;/html&gt;
-</source>
-
-            <p>
-                There's nothing special in this HTML template, nothing dynamic (not yet, anyway). We
-                could access it as http://localhost:8080/helloworld/Home.html and see the same
-                thing; but notice that in the screen shot the URL is
-                <a href="http://localhost:8080/hellworld/app">
-                    http://localhost:8080/hellworld/app
-                </a>
-                . That means that a servlet, mapped to the /app path within the web application, was
-                responsible for the output you can see in the web browser.
-            </p>
-
-            <p>
-                Tapestry applications always use a specific servlet class provided with the
-                framework. This is defined in the web deployment descriptor, web.xml. This file is
-                stored in the project as src/context/WEB-INF/web.xml:
-            </p>
-
-            <source xml:space="preserve">
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE web-app
-      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-      "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;
-
-&lt;web-app&gt;
-  &lt;display-name&gt;Tutorial: HelloWorld&lt;/display-name&gt;
-  &lt;servlet&gt;
-    &lt;servlet-name&gt;app&lt;/servlet-name&gt;
-    &lt;servlet-class&gt;org.apache.tapestry.ApplicationServlet&lt;/servlet-class&gt;
-    &lt;load-on-startup&gt;0&lt;/load-on-startup&gt;
-  &lt;/servlet&gt;
-  &lt;servlet-mapping&gt;
-    &lt;servlet-name&gt;app&lt;/servlet-name&gt;
-    &lt;url-pattern&gt;/app&lt;/url-pattern&gt;
-  &lt;/servlet-mapping&gt;
-&lt;/web-app&gt;
-</source>
-
-            <p>
-                Here we've given our application a name, "app". We're using the standard Tapestry
-                ApplicationServlet class as our servlet, and mapped it to the path /app. The name
-                you choose for you application is relatively unimportant, and Tapestry will adapt to
-                whatever name you do choose.
-            </p>
-
-            <p>
-                The path, on the other hand, needs to be /app. This is not hard-coded into Tapestry,
-                but does require a small amount of configuration if you choose to use another path.
-                As well see in a later tutorial, Tapestry can be quite sophisticated in terms of
-                building application URLs, so don't be too concerned about this aspect of Tapestry
-                just yet.
-            </p>
-
-            <p>
-                That's all there is to HelloWorld in this phase. No Java code at all. Before going
-                on to bigger and better things, we're going to add a little bit to this application,
-                to give you a slightly more realistic feel for Tapestry ... but we'll still avoid
-                writing any Java code at all.
-            </p>
-
-        </section>
-
-        <section name="Adding dynamic output">
-
-
-            <p>
-                We're going to change the Home page to display the current date and time. It will
-                look something like this:
-            </p>
-
-            <img src="../images/QuickStart/helloworld2.png"
-                alt="HelloWorld showing current date/time" />
-
-            <p>
-                In Tapestry, pretty much any time anything dynamic occurs, there's going to be a
-                <em>component</em>
-                involved. Tapestry components are much like Tapestry pages ... they consist of a
-                template and a Java class (purists may note that there may be an XML file to tie
-                those together, and that the template and the Java class are both optional -- more
-                on this later).
-            </p>
-
-            <p>
-                Tapestry components "hide" inside the HTML template. They look like ordinary HTML
-                tags, but have extra attributes in them, often with unusual values. The revised
-                Home.html template:
-            </p>
-
-            <source xml:space="preserve">
-&lt;html&gt;
-  &lt;head&gt;
-    &lt;title&gt;Tutorial: HelloWorld&lt;/title&gt;
-  &lt;/head&gt;
-  &lt;body&gt;
-    &lt;h1&gt;HelloWorld Tutorial&lt;/h1&gt;
-    
-&lt;p&gt;
-  The current data and time is: 
-  &lt;strong&gt;&lt;span jwcid="@Insert" value="ognl:new java.util.Date()"&gt;June 26 2005&lt;/span&gt;&lt;/strong&gt;
-&lt;/p&gt;    
-    
-  &lt;/body&gt;
-&lt;/html&gt;
-</source>
-
-            <p>
-                The &lt;span&gt; tag is the placeholder within the template for the component. The
-                special attribute, jwcid, is Tapestry's clue that this is a component, and not just
-                ordinary HTML.
-            </p>
-
-            <p>
-                The "@Insert" value for the jwcid attribute can be thought of as "instance of the
-                <a href="../components/general/insert.html">Insert</a>
-                component". Insert is one of many built-in Tapestry components. This isn't quite the
-                Java class; it is a component type, which is used by Tapestry to find out about the
-                component, such as what parameters can be configured and what Java class contains
-                the logic for the component. Again, more on that later.
-            </p>
-
-            <p>
-                Before we get to the value parameter, a word about the
-                <em>body</em>
-                of the component. The body is the portion of the template enclosed by the
-                component's start (&lt;span&gt;) and end (&lt;/span&gt;) tags. Ultimately, the
-                component itself determines when, if, or how many times it will render its body
-                ("render" is the verb used throughout Tapestry meaning "write HTML output").
-            </p>
-
-            <p>
-                The Insert component expressly
-                <em>does not</em>
-                render its body. Any text inside the component's body is quietly discarded at
-                runtime. We could, in fact, abbreviate the component within the template to just
-                <code>&lt;span jwcid="@Insert" value="ognl:new java.util.Date()"/&gt;</code>
-                and not put any text inside its tags. So why did we?
-            </p>
-
-            <p>
-                The answer is
-                <em>previewability</em>
-                , that is, the ability to see, at least approximately, what the page will look like
-                <em>without</em>
-                running the actual application. You can load the Home.html file into a web browser,
-                or a specialized editor such as Dreamweaver or HomeSite, and see what it looks like.
-                For example, if we bypass the Tapestry servlet and access the template directly, we
-                see the following:
-            </p>
-
-            <img src="../images/QuickStart/helloworld3.png" alt="HelloWorld Home.html template" />
-
-            <p>
-                That
-                <em>provisional text</em>
-                , "June 26 2005" is not
-                <em>exactly</em>
-                what the application will display at runtime ... but it's close enough; it's not
-                blank and it's approximately right. In a real application with real style sheets and
-                layouts, this would be enough validate that the layout of the running application
-                was correct.
-            </p>
-
-            <span class="info">
-                <strong>Note:</strong>
-                <p>
-                This side track, about previewability, is actually one of the cornerstones of
-                Tapestry: a
-                <em>clean</em>
-                seperation between logic and content. A non-Java HTML developer could edit this
-                template and make significant changes and validate them in their editor of choice
-                without involving a Java developer. As long as the HTML side of the team honors the
-                components, the tags with a jwcid attribute, and doesn't make changes to
-                <em>those</em>
-                elements, the rest of the HTML template can be freely editted. It is only at the
-                junction between content and runtime behavior, that is,
-                <em>inside</em>
-                components, that HTML and Java developers need to work together.
-                </p>
-            </span>
-
-            <p>
-                So, what does
-                <code>value="ognl:new java.util.Date()"</code>
-                mean? Let's start with the attribute value,
-                <code>ognl:new java.util.Date</code>
-                . The "ognl:" prefix signals to Tapestry that this is an expression to be evaluated,
-                rather than a ordinary, literal string. If we did want the Insert to always render
-                the same literal string, such as "Tapestry Rocks!", we wouldn't need the prefix, we
-                could just write
-                <code>value="Tapestry Rocks!"</code>
-                .
-            </p>
-
-            <p>
-                OGNL is the Object Graph Navigation Language, an open source expression language
-                used by several open-source projects, including Tapestry,
-                <a href="http://opensymphony.com/webwork/">WebWork</a>
-                and
-                <a href="http://springframework.org/">Spring</a>
-                . OGNL has some astounding capabilities, not just reading and updating object
-                properties, but also includes support for creating new objects entirely (as here),
-                as well as creating lists, maps and arrays of objects.
-            </p>
-
-            <p>
-                Here, evaluating the expression results in a new instance of the java.util.Date
-                class. This Date instance is
-                <em>bound</em>
-                to the value parameter of the Insert component. "Bound" is another specialized
-                Tapestry term, one that concerns the relationship between a component parameter and
-                a property (or expression) of its container. Here, the component is the Insert
-                component, the container is the Home page, and the expression is
-                <code>new java.util.Date</code>
-                . Binding might look like just an assignment of a property of the Insert component,
-                but is a bit more; components often use bindings to
-                <em>update</em>
-                properties of their container, something we'll see when discussing the form element
-                components.
-            </p>
-
-            <p>
-                In the Java code for the Insert component is the logic that obtains value parameter
-                and converts it into into a string that is rendered into the response.
-            </p>
-
-            <p>
-                So, the expression provides the Date instance, the value parameter gives the Insert
-                component access to that value, and the Insert component provides the logic for
-                converting that Date into a string and having it show up on the rendered page. Every
-                time the Insert component renders, it will re-read its value parameter, causing the
-                expression to be evaluated once more, and a new Date instance to be created. You can
-                see this by hitting your browser's refresh button repeatedly; the displayed date
-                will keep changing.
-            </p>
-
-            <p>
-                In the next section, we'll see how to create a link to get the displayed date to be
-                updated.
-            </p>
-
-        </section>
-
-        <section name="Creating Links">
-
-
-            <p>
-                We're going to extend the application once more, adding a refresh link that we can
-                click instead of using the browser's refresh button. The end result looks like:
-            </p>
-
-            <img src="../images/QuickStart/helloworld4.png" alt="HelloWorld with refresh link" />
-
-            <p>We created this new link by adding the following to Home.html:</p>
-
-            <source xml:space="preserve">
-&lt;p&gt;
-  &lt;a href="#" jwcid="@PageLink" page="Home"&gt;refresh&lt;/a&gt;
-&lt;/p&gt;
-</source>
-
-            <p>
-                Again, anything dynamic in Tapestry is going to involve a component; here it's the
-                <a href="../components/link/pagelink.html">PageLink</a>
-                component, one of a family of components that generate callback links into a
-                Tapestry application.
-            </p>
-
-            <p>
-                Tapestry automatically creates a URL for this; you can see this URL in the
-                screenshot: http://localhost:8080/workbench/app?page=Home&amp;service=page. That URL
-                provides two critical pieces of information: service=page means "render a page", and
-                page=Home identifies which page to render.
-            </p>
-
-            <p>
-                <em>Do I really need a component for that?</em>
-                You might be tempted to change the template to:
-            </p>
-
-            <source xml:space="preserve">
-  &lt;a href="/app?service=page&amp;amp;page=Home"&gt;refresh&lt;/a&gt;
-</source>
-
-            <p>
-                This is a
-                <strong>bad idea</strong>
-                . Tapestry is doing more than spewing out a URL, it's
-                <em>session encoding</em>
-                the URL for you
-                <sup>1</sup>
-                and may be doing other useful things that we'll see later. Further, second guessing
-                Tapestry's URLs is never a good idea; the PageLink component will be around in the
-                next release of Tapestry, but the URL format may change between releases.
-            </p>
-
-            <p>
-                Another question: what's with the href attribute in the attribute? What does
-                <code>href="#"</code>
-                mean? This is another side to previewability: to preview this page, the link
-                ultimately generated by the PageLink needs to preview as a
-                <em>link</em>
-                . An &lt;a&gt; tag without an href attribute is an
-                <em>anchor</em>
-                . Again, this is a distinction that is more visible in real applications, supported
-                by a style sheet.
-            </p>
-
-            <p>
-                The href provided in the HTML template is simply discarded in favor of the href
-                attribute generated inside the PageLink components (/app?service=...). You can
-                actually mix and match these component-generated attributes with extra attributes
-                provided in the template; these are called
-                <em>informal parameters</em>
-                , and are covered in a later tutorial.
-            </p>
-
-        </section>
-
-        <section name="Next: DirectLink">
-
-
-            <p>
-                That covers the PageLink component, at least for now. Next up: the
-                <a href="directlink.html">DirectLink Tutorial</a>
-                .
-            </p>
-        </section>
-        
-        <span class="info">
-        <strong>Note:</strong>
-        <p>
-            <sup>1</sup>
-            Session encoding is an aspect of the Servlet API. Encoding a URL adds information about
-            the server-side session (the HttpSession) if there is one. Although this information can
-            be obtained via HTTP cookies, not all users have cookies enabled in their browser. The
-            servlet specification encourages you to always encode your URLs, and this is simply done
-            for you in Tapestry. It's another example of the basic Tapestry principle:
-            <em>make the simplest choice the correct choice</em>
-            .
-        </p>
-        </span>
-        
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/release-notes.xml b/tapestry/src/site/xdoc/release-notes.xml
deleted file mode 100644
index 1c22ca9..0000000
--- a/tapestry/src/site/xdoc/release-notes.xml
+++ /dev/null
@@ -1,1131 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-        "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Tapestry Release Notes</title>
-        <author email="jkuhnert@apache.org">Jesse Kuhnert</author>
-    </properties>
-    <body>
-
-        <section name="Tapestry 4 Releases">
-
-            <subsection name="Release Notes - Tapestry - Version 4.1.3">
-                <h2>        Bug
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-340'>TAPESTRY-340</a>] -         url-encoded parameters are not considered in multipart-requests
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-399'>TAPESTRY-399</a>] -         If a RedirectException is thrown after IEngine.setLocale(...) has been called, the cookie org.apache.tapestry.locale is not being set
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1522'>TAPESTRY-1522</a>] -         @EventListener is not been called if target ids contains _
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1527'>TAPESTRY-1527</a>] -         @Dialog component triggers a lot a javascript errors on scroll after show/hide by EventListener
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1540'>TAPESTRY-1540</a>] -         no response with dojo ajax responsebuilder
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1551'>TAPESTRY-1551</a>] -         404 in some dojo bundles
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1575'>TAPESTRY-1575</a>] -         @EventListener doesn't work with multi-part forms
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1580'>TAPESTRY-1580</a>] -         AJAX response to update a component doesn't include the updated component's root tag
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1616'>TAPESTRY-1616</a>] -         Tap 4.1.2 PageNotFoundException not caught
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1622'>TAPESTRY-1622</a>] -         IE 6 doesn't update a component, if its new content is empty.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1638'>TAPESTRY-1638</a>] -         ImageSubmit doesn't trigger it's listener/action when called asynchronously
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1640'>TAPESTRY-1640</a>] -         FieldLabel + IFormComponent update in ajax request fails because of prerender
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1651'>TAPESTRY-1651</a>] -         ComponentSpecificationResolverImpl not checking app namespace
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1654'>TAPESTRY-1654</a>] -         Contrib:Timeout caused TimeoutConfirm is not defined js error
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1660'>TAPESTRY-1660</a>] -         inject script xml declaration forces context relative paths
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1663'>TAPESTRY-1663</a>] -         @RadioGroup client-side validation does not work
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1680'>TAPESTRY-1680</a>] -         Anchors are missing in usersguide/spec.html
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1681'>TAPESTRY-1681</a>] -         Workbench pom.xml is buggy this patch fixes it
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1682'>TAPESTRY-1682</a>] -         Parameters with defined with a default-value counted as &quot;invariant&quot;
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1685'>TAPESTRY-1685</a>] -         Examples in documentation for @Script are incomplete
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1687'>TAPESTRY-1687</a>] -         Autocompleter handles null values in a wrong way
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1701'>TAPESTRY-1701</a>] -         Wrong link in Hidden component documentation
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1705'>TAPESTRY-1705</a>] -         form focus errors out on ie if focusing on a dialog form before it is displayed
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1706'>TAPESTRY-1706</a>] -         Rounded corner service fails with 0 byte image buffer.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1740'>TAPESTRY-1740</a>] -         Error in documentation of Custom Exception Pages
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1744'>TAPESTRY-1744</a>] -         tab doesn't close time list drop down on gtimepicker
-                    </li>
-                </ul>
-
-                <h2>        Improvement
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-400'>TAPESTRY-400</a>] -         LinkSubmit and Rollover should be able to play together.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1448'>TAPESTRY-1448</a>] -         Ability to set the default @Persist property persistence strategy
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1656'>TAPESTRY-1656</a>] -         InlineEditBox needs a listener parameter
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1661'>TAPESTRY-1661</a>] -         Specless component html template needs a package based resolution strategy
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1688'>TAPESTRY-1688</a>] -         the tapestry form.js script has an unnecessary call to eval
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1693'>TAPESTRY-1693</a>] -         exception pages documentation example wanted and minor mistakes
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1707'>TAPESTRY-1707</a>] -         Note in rounded services documentation that tapestry-contrib must be installed.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1708'>TAPESTRY-1708</a>] -         Document all rounded service parameters.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1729'>TAPESTRY-1729</a>] -         Additional bindings for Dialog component
-                    </li>
-                </ul>
-
-                <h2>        New Feature
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-394'>TAPESTRY-394</a>] -         Default for listener parameter of DirectLink, etc.
-                    </li>
-                </ul>
-
-                <h2>        Wish
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1202'>TAPESTRY-1202</a>] -         EventListener - send custom data in the same way browser event data is sent
-                    </li>
-                </ul>
-            </subsection>
-
-            <subsection name="Release Notes - Tapestry - Version 4.1.2">
-                <h2>        Sub-task
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1231'>TAPESTRY-1231</a>] -         org.apache.tapestry.form.ImageSubmit renders invalid XHTML attribute 'border=&quot;0&quot;'
-                    </li>
-                </ul>
-
-                <h2>        Bug
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/HIVEMIND-206'>HIVEMIND-206</a>] -         registryDidShutdown not called on Hivemind services on undeploy
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-403'>TAPESTRY-403</a>] -         Bean binding with contrib:tablerows
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-415'>TAPESTRY-415</a>] -         For component should use line precise error reporting for data conversions
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-572'>TAPESTRY-572</a>] -         NumberValidator should accept Strings
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-633'>TAPESTRY-633</a>] -         Default behavior of NumberTranslator treats zeros asymmetrically.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-638'>TAPESTRY-638</a>] -         Recursive components result in a StackOverflowError
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-695'>TAPESTRY-695</a>] -         WebRequestServicerFilter lacks support for tapestry.globals.*
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-825'>TAPESTRY-825</a>] -         Cookies failing due to improper timing on flush() method
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-851'>TAPESTRY-851</a>] -         DatePicker does not error when bound to values of wrong type
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-853'>TAPESTRY-853</a>] -         Palette silently fails when bound to wrong collection type
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-872'>TAPESTRY-872</a>] -         Persitent page properties are not set before PageAttachListener#pageAttached method is fired
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-873'>TAPESTRY-873</a>] -         Minor XHTML 1.0 Strict compliance issues
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-881'>TAPESTRY-881</a>] -         Allow global i18n bundle location to be customized
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-907'>TAPESTRY-907</a>] -         overridden parameter problem
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-937'>TAPESTRY-937</a>] -         Custom binding prefixes shorter than 2 characters fail without useful diagnostics
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-954'>TAPESTRY-954</a>] -         Session lost when PageLInk inside a form
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-958'>TAPESTRY-958</a>] -         Table column headers with a custom render block cannot be sorted
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-988'>TAPESTRY-988</a>] -         Function mismatch with description in document:  Form.jwc and tapestry.request.xml
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1014'>TAPESTRY-1014</a>] -         java.util.ConcurrentModificationException in portlet when trying to show ArrayList
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1026'>TAPESTRY-1026</a>] -         PageSpecificationResolverImpl doesn't search &quot;implict&quot; page specifications/templates in all the right places.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1065'>TAPESTRY-1065</a>] -         TreeDataView.renderComponent() and TreeTableDataView.generateNodeList()  cause ClassCastException in ITreeDataModel.getUniqueKey()
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1071'>TAPESTRY-1071</a>] -         Client-side number validation does not work
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1091'>TAPESTRY-1091</a>] -         Invalid URL for injected using annotation assets
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1101'>TAPESTRY-1101</a>] -         @Persist(&quot;session&quot;) does not make the accessor fetch from session everytime
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1120'>TAPESTRY-1120</a>] -         UploadPart / getFileName() doesn't work cross-platform
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1145'>TAPESTRY-1145</a>] -         Unable to trigger EventListener when it is inside a block
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1151'>TAPESTRY-1151</a>] -         PagePool doesnt remove idle pages, heap memory doens't get reallocated
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1179'>TAPESTRY-1179</a>] -         practical component class naming for For, If and Else
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1193'>TAPESTRY-1193</a>] -         .script files: &quot;index&quot; property of &quot;foreach&quot; tag is stored as a String, not an integer
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1198'>TAPESTRY-1198</a>] -         problem with Checkbox + custom validators
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1199'>TAPESTRY-1199</a>] -         multiple Autocompleters on the same page b0rken
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1203'>TAPESTRY-1203</a>] -         boolean.getBoolean doesn't work as expected in InjectMetaWorker
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1204'>TAPESTRY-1204</a>] -         boolean meta values in the component descriptor does not work
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1205'>TAPESTRY-1205</a>] -         bad links in &quot;Defining new Application State Objects&quot; doc's chapter
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1206'>TAPESTRY-1206</a>] -         Asynchronous Selection Boxes work with Firefox 2.0 but not with Internet Explorer 6/7
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1208'>TAPESTRY-1208</a>] -         bad links in &quot;Determining the Page Class&quot;
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1210'>TAPESTRY-1210</a>] -         Problem with InlineEditBox on persisted page property
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1212'>TAPESTRY-1212</a>] -         AlertDialog widget button text should be &quot;OK&quot;
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1214'>TAPESTRY-1214</a>] -         @Submit with submitType=&quot;refresh&quot; : JavaScript syntax error
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1215'>TAPESTRY-1215</a>] -         Autocomplete triggers a syntax error in dojo.js when getValues() returns an empty list
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1216'>TAPESTRY-1216</a>] -         async Submit won't skip client side validation
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1217'>TAPESTRY-1217</a>] -         IE watchInFlight Error when receiving a &lt;tr&gt;
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1218'>TAPESTRY-1218</a>] -         URL to dojo.js is not escaped
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1222'>TAPESTRY-1222</a>] -         HTTP headers setting through WebResponse is ignored
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1227'>TAPESTRY-1227</a>] -         IUploadFile implementations should be prepared for &quot;all&quot; file name-separator characters in getFileName()
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1228'>TAPESTRY-1228</a>] -         core.js doesn't process embedded &lt;script&gt;&lt;/script&gt; elements in ajax fragments
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1229'>TAPESTRY-1229</a>] -         AssetService not thread safe
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1234'>TAPESTRY-1234</a>] -         ResourceMatcherImpl not thread safe on multi-CPU system
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1240'>TAPESTRY-1240</a>] -         LinkSubmit with parameters causes exception although it has validators attached
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1241'>TAPESTRY-1241</a>] -         @EventListener produces multiple events
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1242'>TAPESTRY-1242</a>] -         Typing in autocompleter does not display dropdown values
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1247'>TAPESTRY-1247</a>] -         When a div containing a DirectLink using a PopupLinkRenderer is updated asynchronously, the attached javascript portion of the ajax response is ignored.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1248'>TAPESTRY-1248</a>] -         Localization Problem when using Min Max Validator
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1249'>TAPESTRY-1249</a>] -         4.1.1 binary downloads include non-Apache modules (including OGNL and Javassist).
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1253'>TAPESTRY-1253</a>] -         Meta injection throws exception unless property accessor is defined
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1254'>TAPESTRY-1254</a>] -         IE7 mixed secure/nonsecure SSL warning on https using dojo dialog component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1256'>TAPESTRY-1256</a>] -         IllegalStateException if you try to access an ASO with OGNL, before accessing it in code
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1259'>TAPESTRY-1259</a>] -         EventListener generates duplicate javascript with page caching on
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1261'>TAPESTRY-1261</a>] -         need default styling on async exception responses somehow
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1268'>TAPESTRY-1268</a>] -         setting focus=false on EventListener doesn't prevent focus from being claimed on form elements
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1273'>TAPESTRY-1273</a>] -         ValidationStrings_de.properties is incomplete
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1280'>TAPESTRY-1280</a>] -         add exclusion filter for Generic persistent types
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1288'>TAPESTRY-1288</a>] -         Incorrect link in documentation
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1301'>TAPESTRY-1301</a>] -         Class not found with cglib loaded in a parent (non-webapp) classloader. (CglibProxiedPropertyChangeObserverImpl)
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1309'>TAPESTRY-1309</a>] -         clearValidationDecorations in validation.js has huge performance issues with many form elements
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1312'>TAPESTRY-1312</a>] -         When an EventListener updates a datepicker, the new date is not rendered to the user
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1313'>TAPESTRY-1313</a>] -         css classes fieldMissing/fieldInvalid not written in default ValidationDelegate
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1347'>TAPESTRY-1347</a>] -         Shell refresh tag incorrectly encoded with cookies disabled
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1366'>TAPESTRY-1366</a>] -         calling IRequestCycle.redirect() and then setting page properties causes property changes to be lost
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1374'>TAPESTRY-1374</a>] -         GenericsMethodSignatureImpl throw exception!
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1376'>TAPESTRY-1376</a>] -         can't find page if template has parse error
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1380'>TAPESTRY-1380</a>] -         Page name validation regex is incorrect.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1383'>TAPESTRY-1383</a>] -         number translator
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1390'>TAPESTRY-1390</a>] -         DatePicker component doesn't work in IE
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1391'>TAPESTRY-1391</a>] -         @EventListener method in component doesn't rewind the containing page's client-persistent properties
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1396'>TAPESTRY-1396</a>] -         Specless components in libraries don't get their assets properly resolved
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1398'>TAPESTRY-1398</a>] -         @EventListener in any component doesn't get called
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1399'>TAPESTRY-1399</a>] -         NumberTranslator omitZero attribute doesn't default to true like docs say
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1402'>TAPESTRY-1402</a>] -         OGNL Workaround doesn't work
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1407'>TAPESTRY-1407</a>] -         XHR Exception page renders exception page &amp;&amp; partial content
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1410'>TAPESTRY-1410</a>] -         fail to test GenericsMethodSignatureImpl class.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1413'>TAPESTRY-1413</a>] -         absolute classpath asset paths not found when no &quot;classpath&quot; specifier used
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1415'>TAPESTRY-1415</a>] -         A page with a form and a getOrg() method will crash on retrieval
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1418'>TAPESTRY-1418</a>] -         ComponentEventInvoker sometimes throws a NPE
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1419'>TAPESTRY-1419</a>] -         Bracket notation with addition in OGNL expression causes failure to find appropriate listener
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1420'>TAPESTRY-1420</a>] -         ognl string concatenation + static syntax does not render properly
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1426'>TAPESTRY-1426</a>] -         Style component bug
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1428'>TAPESTRY-1428</a>] -         Validators contribution fails regexp match
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1432'>TAPESTRY-1432</a>] -         Regression in the AssetFactory().createAsset()
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1437'>TAPESTRY-1437</a>] -         Unnecessary logging of MalformedURLException while searching for component templates
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1452'>TAPESTRY-1452</a>] -         RedirectException does not work on Safari
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1459'>TAPESTRY-1459</a>] -         Can't use dojo Editor
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1462'>TAPESTRY-1462</a>] -         LinkFactoryImpl caches context path and servlet path
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1468'>TAPESTRY-1468</a>] -         dojo.i18n.number needs explicit groupSize parameter of 0 for patterns with no grouping separator
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1477'>TAPESTRY-1477</a>] -         IF component's condition expression get evaluated 3 or more times when it should only be evaluated once.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1496'>TAPESTRY-1496</a>] -         getTableRow() returns incorrect Class
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1512'>TAPESTRY-1512</a>] -         someone added local parameter to Autocompleter but didn't document it
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1517'>TAPESTRY-1517</a>] -         form submitAsync doesn't set a JSON load handler
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1520'>TAPESTRY-1520</a>] -         Tapestry 4.1 is no longer jdk 1.4 compatible - compiled by java 5
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1527'>TAPESTRY-1527</a>] -         @Dialog component triggers a lot a javascript errors on scroll after show/hide by EventListener
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1534'>TAPESTRY-1534</a>] -         Fix of Bug TAPESTRY-988 results in java.lang.IllegalArgumentException at hivemind.util.PropertyAdaptor.write trying to set the &quot;org.apache.tapestry.default-cookie-max-age&quot;
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1535'>TAPESTRY-1535</a>] -         Suggest component doesn't work in a loop
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1536'>TAPESTRY-1536</a>] -         LinkSubmit creates duplicate onclick event listener when combined with submitBindings() superclass method
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1548'>TAPESTRY-1548</a>] -         tapestry.form.focusField on non displayed field
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1549'>TAPESTRY-1549</a>] -         event connection evaluations via XHR
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1552'>TAPESTRY-1552</a>] -         @Any divs with no body content render &lt;div /&gt; shorthand form
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1553'>TAPESTRY-1553</a>] -         ETag header incorrect format
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1563'>TAPESTRY-1563</a>] -         LinkSubmit async broken with new href javascript event change
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1569'>TAPESTRY-1569</a>] -         If component doesn't render client id
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1574'>TAPESTRY-1574</a>] -         cyclic page rendering of exception pages not detected in DojoAjaxResponseBuilder
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1577'>TAPESTRY-1577</a>] -         optionRenderer not documented in PropertySelection
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1578'>TAPESTRY-1578</a>] -         ParseException in AssetService
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1582'>TAPESTRY-1582</a>] -         whole shadow foreground color not supported
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1587'>TAPESTRY-1587</a>] -         Script assets without a DTD result in a Server Error 500
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1591'>TAPESTRY-1591</a>] -         Encoding for Ajax Request is always UTF-8
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1592'>TAPESTRY-1592</a>] -         TemplateParser converts &lt;div ...&gt;&lt;/div&gt; structures into &lt;div ... /&gt; structures
-                    </li>
-                </ul>
-
-                <h2>        Improvement
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-410'>TAPESTRY-410</a>] -         IdentityValidator
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-550'>TAPESTRY-550</a>] -         IMarkupWriter should automatically filter out duplicate attributes when rendering an element
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-573'>TAPESTRY-573</a>] -         would like InjectStateWorker to add an &quot;exists&quot; method
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-697'>TAPESTRY-697</a>] -         Add getters for validators properties.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-717'>TAPESTRY-717</a>] -         Easier accessing the hivemind registry
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-738'>TAPESTRY-738</a>] -         Create ability to use SqueezeAdaptors for @Persist(&quot;client:app&quot;)
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-792'>TAPESTRY-792</a>] -         Defining page property in definition file versus using implemented methods
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-856'>TAPESTRY-856</a>] -         lazy initialization of abstract properties
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-867'>TAPESTRY-867</a>] -         Do not display errors or errored field decoration on form refresh
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-933'>TAPESTRY-933</a>] -         Add getRowCount() to ITableModel interface
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-962'>TAPESTRY-962</a>] -         enhance ExpressionEvaluator
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-989'>TAPESTRY-989</a>] -         Improve @PropertySelection
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-996'>TAPESTRY-996</a>] -         Better locale detection for fully localized applications
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1035'>TAPESTRY-1035</a>] -         Allow common stylesheets/favicon/geoinfo/doctype settings across pages/requests
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1068'>TAPESTRY-1068</a>] -         allow throwing of RenderRewoundException from (submit) listeners
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1088'>TAPESTRY-1088</a>] -         Exception page should have a &quot;reset&quot; ServiceLink
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1182'>TAPESTRY-1182</a>] -         make ComponentAnnotationWorker extensible
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1183'>TAPESTRY-1183</a>] -         @InjectParameterFlag annotation
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1184'>TAPESTRY-1184</a>] -         @InjectPageLink and @InjectExternalLink annotations
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1196'>TAPESTRY-1196</a>] -         When &lt;let unique=&quot;true&quot; ..&gt; is used, make sure the output string is a valid js identifier
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1201'>TAPESTRY-1201</a>] -         tapestry-contrib depends on jboss-j2ee
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1245'>TAPESTRY-1245</a>] -         Alter LinkSubmit to output javascript in onclick (instead of in href)
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1260'>TAPESTRY-1260</a>] -         add logging interceptor to ResponseBuilder services as well as logging of ajax xml response output / etc
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1266'>TAPESTRY-1266</a>] -         Style should not render anything if href is null and no body present
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1305'>TAPESTRY-1305</a>] -         ServiceEncoding needs ability to set the PathInfo variable
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1350'>TAPESTRY-1350</a>] -         add Shell component parameter to disable Tapestry meta runtime info
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1378'>TAPESTRY-1378</a>] -         Make Dropdown date/time pickers capable of taking a generic object - so that things like Joda time can be used as well
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1449'>TAPESTRY-1449</a>] -         Leave off port 443 when generating https URLs
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1453'>TAPESTRY-1453</a>] -         upgrade dojo to 0.4.2 version
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1474'>TAPESTRY-1474</a>] -         autowiring of generic service properties
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1489'>TAPESTRY-1489</a>] -         ValidationStrings for de and ru
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1513'>TAPESTRY-1513</a>] -         convert StringToListConverter strings going to a binding property of updateComponents to their component clientId equivalents
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1550'>TAPESTRY-1550</a>] -         don't log exceptions when browser IO connections close serving asset resources
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1554'>TAPESTRY-1554</a>] -         remove description from AbstractBinding
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1561'>TAPESTRY-1561</a>] -         improve the user experience of javascript-based links
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1589'>TAPESTRY-1589</a>] -         have debugEnabled=false by default for @Shell component
-                    </li>
-                </ul>
-
-                <h2>        New Feature
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-330'>TAPESTRY-330</a>] -         Add uninitialization tag to Script specification and component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-817'>TAPESTRY-817</a>] -         Translator for BigDecimal values
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1414'>TAPESTRY-1414</a>] -         I am new about tapestry pls send me user friendly document
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1531'>TAPESTRY-1531</a>] -         Integrate prototype and provide alternative @Suggest component for Autocompleter that uses the more robust scriptaculous version
-                    </li>
-                </ul>
-
-                <h2>        Task
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-659'>TAPESTRY-659</a>] -         Document available services
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1285'>TAPESTRY-1285</a>] -         Upload http://tapestry.apache.org/dtd/Script_4_0.dtd
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1392'>TAPESTRY-1392</a>] -         Update validation strings for locale pt
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1519'>TAPESTRY-1519</a>] -         upgrade dojo to 0.4.3 release
-                    </li>
-                </ul>
-
-                <h2>        Wish
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-396'>TAPESTRY-396</a>] -         RequestLocaleManagerImpl: Change private members to protected, to enable overriding implementation
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-765'>TAPESTRY-765</a>] -         Create testing guide
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-838'>TAPESTRY-838</a>] -         ListenerInvokerFilter provides no way to find out what listener method is being invoked
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1454'>TAPESTRY-1454</a>] -         isDisabledDate() in DatePicker in Dojo4.1
-                    </li>
-                </ul>
-
-            </subsection>
-
-            <subsection name="Release Notes - Tapestry - Version 4.1.1">
-                <h2>        Sub-task
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-490'>TAPESTRY-490</a>] -         Document FormTable component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-499'>TAPESTRY-499</a>] -         Document Table component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-500'>TAPESTRY-500</a>] -         Document TableColumns component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-501'>TAPESTRY-501</a>] -         Document TableFormPages component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-502'>TAPESTRY-502</a>] -         Document TableFormRows component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-503'>TAPESTRY-503</a>] -         Document TableRows component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-504'>TAPESTRY-504</a>] -         Document TablePages component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-505'>TAPESTRY-505</a>] -         Document TableValues component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-506'>TAPESTRY-506</a>] -         Document Tree component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-507'>TAPESTRY-507</a>] -         Document TreeDataView component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-508'>TAPESTRY-508</a>] -         Document TreeNodeView component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-509'>TAPESTRY-509</a>] -         Document TreeTable component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-510'>TAPESTRY-510</a>] -         Document TreeTableDataView component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-511'>TAPESTRY-511</a>] -         Document TreeTableNodeViewDelegator component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-512'>TAPESTRY-512</a>] -         Document TreeView component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-900'>TAPESTRY-900</a>] -         Document port parameter in FormSupport.render() and breaking change
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-921'>TAPESTRY-921</a>] -         Document XTile component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-922'>TAPESTRY-922</a>] -         Document Timeout component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-923'>TAPESTRY-923</a>] -         Document DumpObject component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-924'>TAPESTRY-924</a>] -         Document CheckboxGroup component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-925'>TAPESTRY-925</a>] -         Document ControlCheckbox component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-926'>TAPESTRY-926</a>] -         Document ControlledCheckbox component
-                    </li>
-                </ul>
-
-                <h2>        Bug
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-199'>TAPESTRY-199</a>] -         Addition of a simple way to get component CSS stylesheets into an overall page
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-245'>TAPESTRY-245</a>] -         Using &quot;Any&quot; component in XML generation should render an empty tag if there is no body
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-305'>TAPESTRY-305</a>] -         Wrong example for file download
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-366'>TAPESTRY-366</a>] -         docu: persist attribute / property documentation is insufficient
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-376'>TAPESTRY-376</a>] -         (Link)Submit vs. client-side validation; should allow for refresh
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-450'>TAPESTRY-450</a>] -         ForBean can't restore a value from it's primary key when only &quot;source&quot; and &quot;keyExpression&quot; are given
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-544'>TAPESTRY-544</a>] -         Unmatched &lt;p&gt; and DatePicker problem in MSIE 6
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-562'>TAPESTRY-562</a>] -         Example web.xml in Configuring Tapestry section of UserGuide does not meet the dtd specification.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-590'>TAPESTRY-590</a>] -         ServiceLink uses deprecated API
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-618'>TAPESTRY-618</a>] -         No location provided when an unknown library prefix is used.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-640'>TAPESTRY-640</a>] -         ValidationStrings.properties for Swedish (sv) has an error
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-681'>TAPESTRY-681</a>] -         &lt;inherited-binding&gt; specification element is not documented
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-686'>TAPESTRY-686</a>] -         TextArea uses String type for value
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-709'>TAPESTRY-709</a>] -         @ComponentClass and @Parameter annotations should not be allowed on page classes
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-726'>TAPESTRY-726</a>] -         AssetSourceImpl does not allow null for parameter &quot;base&quot; ...
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-771'>TAPESTRY-771</a>] -         Dependencies are not loaded from Ibiblio when using Tapestry in a Maven 2 project
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-775'>TAPESTRY-775</a>] -         DatePicker javascript iframe causes security popup warnings in IE on https
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-799'>TAPESTRY-799</a>] -         TableColumns / TableValues should not cache class parameter
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-803'>TAPESTRY-803</a>] -         Infinite loop when displaying an exception that has a property that refers to itself
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-809'>TAPESTRY-809</a>] -         Performance bottleneck due to HiveMind class loading issue
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-811'>TAPESTRY-811</a>] -         Palette javascript not compatible with ajax requests
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-818'>TAPESTRY-818</a>] -         LinkSubmit documentation lacks &quot;action&quot; parameter
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-823'>TAPESTRY-823</a>] -         ConcurrentModificationException in HTMLDescriptionReceiver
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-827'>TAPESTRY-827</a>] -         Incorrect parsing of decimals in French locale by NumberTranslator
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-829'>TAPESTRY-829</a>] -         FormLinkRenderer throws NPE with DirectlLinks
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-832'>TAPESTRY-832</a>] -         Bad links to the javadoc in the component reference: Radio, RadioGroup, Upload
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-835'>TAPESTRY-835</a>] -         FieldLabel throws NullPointerException when field is null but displayName is set
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-841'>TAPESTRY-841</a>] -         TreeNodeView
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-842'>TAPESTRY-842</a>] -         @Script example appears to be wrong
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-843'>TAPESTRY-843</a>] -         Friendly URL documentation concerning security and ugly URLs
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-846'>TAPESTRY-846</a>] -         Random error accesing pages: Property &quot; &quot; has already been accounted for by the element at Annotation ...
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-848'>TAPESTRY-848</a>] -         Binding Exceptions more prominent with annotations
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-854'>TAPESTRY-854</a>] -         Document replacement for AbstractPage.initialize()
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-862'>TAPESTRY-862</a>] -         The current regex PATTERN in ..validator.Email requires at least two letters on either side of the @.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-874'>TAPESTRY-874</a>] -         RadioGroup component does not render validator error messages
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-894'>TAPESTRY-894</a>] -         SpecificationResolverDelegate not consulted if component class found first
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-895'>TAPESTRY-895</a>] -         White space is stripped between localization directives.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-902'>TAPESTRY-902</a>] -         org.apache.tapestry.enhance.InjectMetaWorker not JDK1.4 compatible
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-911'>TAPESTRY-911</a>] -         Date Picker Icon does not have alt test
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-920'>TAPESTRY-920</a>] -         Body.get() documentation incorrect
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-927'>TAPESTRY-927</a>] -         example in renderblock documentation broken
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-932'>TAPESTRY-932</a>] -         SimpleTableColumnComponent.html contains invalid CSS
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-934'>TAPESTRY-934</a>] -         Upload component file size override method needs updated.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-956'>TAPESTRY-956</a>] -         TableColumns and TableValues: impossible to assign different styles to different columns
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-957'>TAPESTRY-957</a>] -         When trying to upload a file that is greater that the set maxSize an uncatchable exception is thrown
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-970'>TAPESTRY-970</a>] -         AssetEncoder fails to encode properly if path does not start with /
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-974'>TAPESTRY-974</a>] -         Modify ValidationDelegate or FieldLabel so it allows markup to be written inside &lt;label&gt;
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-977'>TAPESTRY-977</a>] -         XTile component incorrectly quotes request URLs
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-987'>TAPESTRY-987</a>] -         Tapestry palette component not working in konqueror
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1012'>TAPESTRY-1012</a>] -         PageRenderSupportImpl.writeInitializationScript(IMarkupWriter) does not use the &quot;writer&quot; parameter
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1023'>TAPESTRY-1023</a>] -         Calling updateComponent in @EventListener method on a component that is prerendered results in null update
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1024'>TAPESTRY-1024</a>] -         Client validation bug
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1027'>TAPESTRY-1027</a>] -         &quot;direct&quot; parameter removed from Form component -- documentation not updated
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1028'>TAPESTRY-1028</a>] -         Unit tests using JSONObject.toString are fragile &amp; may break in different environments.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1030'>TAPESTRY-1030</a>] -         cant seem to get a component updated if the event listener is applied to a method that doesnt submit a form
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1032'>TAPESTRY-1032</a>] -         Validation messages for zh_CN .
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1034'>TAPESTRY-1034</a>] -         &quot;action&quot; parameter of Submit and LinkSubmit should not be deprecated
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1036'>TAPESTRY-1036</a>] -         AutoCompleter primary key handling problem
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1044'>TAPESTRY-1044</a>] -         min/max date client side validators b0rken
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1045'>TAPESTRY-1045</a>] -         Pattern vlidator message is wrong.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1046'>TAPESTRY-1046</a>] -         EventListener invoke all listener inside a form eventhought only one event was trigger
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1050'>TAPESTRY-1050</a>] -         The InspectorButton doesn't work:
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1051'>TAPESTRY-1051</a>] -         EventListener does not allow use of versions of methods with BrowserEvent and RequestCyle parameters
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1054'>TAPESTRY-1054</a>] -         DojoAjaxResponseBuilder will never render FormComponents
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1056'>TAPESTRY-1056</a>] -         Fix links in 'Tapestry Annotations' page
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1057'>TAPESTRY-1057</a>] -         EventListener validateForm = false causes form to be permanently non validating on client side
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1058'>TAPESTRY-1058</a>] -         should clean html before replacing
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1059'>TAPESTRY-1059</a>] -         JSONResponseBuilder parseParameters method cause NPE.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1060'>TAPESTRY-1060</a>] -         dojo config &quot;parseWidgets: false&quot; prevent tree widget.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1061'>TAPESTRY-1061</a>] -         AssetService doesn't translate paths relative to CSS file.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1063'>TAPESTRY-1063</a>] -         The single update block for hidden form input fields should only happen when updating individual items contained in a form, but not when the whole form itself needs to be rendered.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1066'>TAPESTRY-1066</a>] -         Duplicate listeners added for events in browser every time @EventListener is fired.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1069'>TAPESTRY-1069</a>] -         When submitting a form via ajax (async = &quot;ognl: true&quot;), @Submit components dont honor their tag/selected/listener parameters
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1070'>TAPESTRY-1070</a>] -         no id specified on the rendered Body element
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1072'>TAPESTRY-1072</a>] -         Form still validates field removed with AJAX on first submit.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1074'>TAPESTRY-1074</a>] -         Autocompleter breaks when submited with no value
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1076'>TAPESTRY-1076</a>] -         Wraped form components can't be attached to FieldLabels
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1077'>TAPESTRY-1077</a>] -         multiple EventListeners not firing syncSubmit?
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1079'>TAPESTRY-1079</a>] -         Several problems when generating a lot of ajax requests. (Including: Unreached characters at end of expression. Please report this bug!)
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1083'>TAPESTRY-1083</a>] -         Tapestry 4.1 Form component docs missing a column
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1085'>TAPESTRY-1085</a>] -         ValidationStrings messed in Portuguese BR version
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1087'>TAPESTRY-1087</a>] -         undocumented parameters in component contrib:Palette
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1089'>TAPESTRY-1089</a>] -         NullPointerException in Upload component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1090'>TAPESTRY-1090</a>] -         DojoAjaxResponseBuilder encoding problem with Internet Explorer
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1092'>TAPESTRY-1092</a>] -         servlet-api dependency should have scope &quot;provided&quot;
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1093'>TAPESTRY-1093</a>] -         Patch for unit tests that fail in Windows environment
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1095'>TAPESTRY-1095</a>] -         Button component breaks with EventListener
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1096'>TAPESTRY-1096</a>] -         FieldLabel+EventListener breaks Checkbox value
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1098'>TAPESTRY-1098</a>] -         XTile: function encodeUri is not defined
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1099'>TAPESTRY-1099</a>] -         Current snapshot of 4.1 has HTTPS DoJo problem, having trouble updating DoJo
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1100'>TAPESTRY-1100</a>] -         EventListener called several times for a single form event if caching disabled
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1102'>TAPESTRY-1102</a>] -         AlertDialog doesn't trap tabs or set focus to the button
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1104'>TAPESTRY-1104</a>] -         FieldLabel's field id never changes (possibly due to reuse)
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1105'>TAPESTRY-1105</a>] -         DropdownDatePicker.java uses wrong format to pass date value to DoJo
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1106'>TAPESTRY-1106</a>] -         FormComponentContributorContext.addSubmitHandler() should be deprecated
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1107'>TAPESTRY-1107</a>] -         Required Field validation behavior changed between 4.0 and 4.1.1
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1108'>TAPESTRY-1108</a>] -         Various Exceptions on first concurrent request
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1109'>TAPESTRY-1109</a>] -         Client Form validation validates disabled fields
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1110'>TAPESTRY-1110</a>] -         Asynchronious link with disable=true generates errors
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1113'>TAPESTRY-1113</a>] -         Form component focus parameter not working in 4.1.1
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1115'>TAPESTRY-1115</a>] -         ie doesn't cache images in XHR requests
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1118'>TAPESTRY-1118</a>] -         Patch for AjaxShellDelegateTest under Windows
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1119'>TAPESTRY-1119</a>] -         external js packages need to be loaded syncrhonously instead of async
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1125'>TAPESTRY-1125</a>] -         Duplicate id and updateComponents
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1126'>TAPESTRY-1126</a>] -         DropdownDatePicker do not transfer class informal parameter
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1127'>TAPESTRY-1127</a>] -         Client Side Validation - Field decorators mechanism do not work
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1129'>TAPESTRY-1129</a>] -         AJAX page update problem in Firefox
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1131'>TAPESTRY-1131</a>] -         Hidden Component (maybe all FormComonents?) don't get ids assigned on a page basis.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1133'>TAPESTRY-1133</a>] -         TitlePane component with nested div acts irregularly in IE 7
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1135'>TAPESTRY-1135</a>] -         Dialog js error
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1136'>TAPESTRY-1136</a>] -         DropdownDatePicker and DropdownTimePicker do not display when default browser language isn't en-us
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1138'>TAPESTRY-1138</a>] -         contrib:Table doesn't render id attribute
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1139'>TAPESTRY-1139</a>] -         InlineEditBox doesn't work correctly in forms
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1140'>TAPESTRY-1140</a>] -         new page render other than starting page
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1141'>TAPESTRY-1141</a>] -         Async form fails if keyboard is used to trigger the submit...
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1143'>TAPESTRY-1143</a>] -         DropDownDatePicker handles initial value differently between IE and FF
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1146'>TAPESTRY-1146</a>] -         https problem in special ssl environment
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1147'>TAPESTRY-1147</a>] -         AjaxShellDelegate will only compile/run under Java 6
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1150'>TAPESTRY-1150</a>] -         can't override default dojo included with tapestry
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1155'>TAPESTRY-1155</a>] -         Same event ID is generated for EventListener rendered within loop
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1158'>TAPESTRY-1158</a>] -         contrib:Palette has deprecated code
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1159'>TAPESTRY-1159</a>] -         Rollover component and async DirectLink - Dojo: Error evaluating script
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1161'>TAPESTRY-1161</a>] -         encodeURL is not working if context.xml is configured with cookies=false
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1162'>TAPESTRY-1162</a>] -         @EventListener doesn't get called inside a custom component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1163'>TAPESTRY-1163</a>] -         Dialog is hidden when background is clicked
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1164'>TAPESTRY-1164</a>] -         &lt;iframe&gt; in Dialog problem
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1165'>TAPESTRY-1165</a>] -         Form submits multiple times
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1166'>TAPESTRY-1166</a>] -         If and Else components ignore element parameter when renderTag is false
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1168'>TAPESTRY-1168</a>] -         Update of nested component causes it to lose its @EventListener
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1169'>TAPESTRY-1169</a>] -         Autocompleter does not return labels but object.toStrings on json response
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1170'>TAPESTRY-1170</a>] -         Problem with dojo.validate.isInRange(), desired flexibility in Tapestry validators
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1173'>TAPESTRY-1173</a>] -         Rendering error messages get swallowed on async requests.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1175'>TAPESTRY-1175</a>] -         security flaw - unprotected asset regexp paths allow access to other things
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1176'>TAPESTRY-1176</a>] -         Form field focus shouldn't be set on asynchronous submit.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1177'>TAPESTRY-1177</a>] -         ForBean can cause NullPointerException when rendered without a template
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1178'>TAPESTRY-1178</a>] -         4.1 DTD is not uploaded
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1181'>TAPESTRY-1181</a>] -         NUll Pointer exception in shell component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1186'>TAPESTRY-1186</a>] -         Error pages not properly caught/displayed in dojo ajax request if &quot;forwarded&quot;
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1187'>TAPESTRY-1187</a>] -         Tapestry doesn't work under JRE1.4
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1189'>TAPESTRY-1189</a>] -         Dojo related issue
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1191'>TAPESTRY-1191</a>] -         Misreporting Script component &quot;scriptPath&quot; property
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1195'>TAPESTRY-1195</a>] -         parameter &quot;target&quot; of link components is not documented
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1197'>TAPESTRY-1197</a>] -         Unable to re render dojo widgets when responsebuilder updates a component in the form
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1352'>TAPESTRY-1352</a>] -         OGNL expression try to access hidden class java.util.HashMap$Entry
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1456'>TAPESTRY-1456</a>] -         Problems With RenderBlock
-                    </li>
-                </ul>
-
-                <h2>        Improvement
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-231'>TAPESTRY-231</a>] -         support better DatePicker CSS layout by providing a (configurable) class attribute on the &lt;img&gt; generated
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-232'>TAPESTRY-232</a>] -         Add &lt;label&gt; to CheckBoxMultiplePropertySelectionRenderer
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-237'>TAPESTRY-237</a>] -         Support for log out action
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-257'>TAPESTRY-257</a>] -         favicon support for Shell component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-332'>TAPESTRY-332</a>] -         Adding InsertText functionality into Insert. Deprecating InsertText.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-334'>TAPESTRY-334</a>] -         DatePicker's title is not localized and attributes not defined as reserved.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-516'>TAPESTRY-516</a>] -         Make Page extension configurable.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-561'>TAPESTRY-561</a>] -         Common form field parameter for controlling submit behavior
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-565'>TAPESTRY-565</a>] -         Provide replacement for EnumPropertySelectionModel, based on JDK 1.5 Enums
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-597'>TAPESTRY-597</a>] -         Submit (and similar) should have easy ways of cancelling or refreshing a form
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-605'>TAPESTRY-605</a>] -         Generated markup for empty tags should include space before closing slash
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-662'>TAPESTRY-662</a>] -         InjectMeta annotation's value should be optonal
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-670'>TAPESTRY-670</a>] -         PageNotFoundException should include the requested page name as a property
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-732'>TAPESTRY-732</a>] -         LabeledPropertySelectionModel should support null String values
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-736'>TAPESTRY-736</a>] -         PageRenderSupport should support pre-loaded assets
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-747'>TAPESTRY-747</a>] -         Add translator parameter to the Select component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-751'>TAPESTRY-751</a>] -         CookieSource needs ability to control domain of cookie
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-754'>TAPESTRY-754</a>] -         Checkbox should render DelegateSuffix
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-762'>TAPESTRY-762</a>] -         Document new methods on AbstractFormComponent
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-777'>TAPESTRY-777</a>] -         Call RequestGlobals.store(WebRequest request, WebResponse response) earlier
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-820'>TAPESTRY-820</a>] -         Translator and Validator causes confusion
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-834'>TAPESTRY-834</a>] -         Missing documentation in componentes descriptor
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-839'>TAPESTRY-839</a>] -         Documentation for location of hivemodule.xml unclear for web applications
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-891'>TAPESTRY-891</a>] -         CLONE -Add getParent() method to IComponent
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-904'>TAPESTRY-904</a>] -         DatePicker SimpleDateParser needs &quot;strict&quot; parser
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-913'>TAPESTRY-913</a>] -         Cannot specify property or copy-of without using a page specification
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-935'>TAPESTRY-935</a>] -         Improve BASE tag for IE
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-944'>TAPESTRY-944</a>] -         add page parameter to DirectLink component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-946'>TAPESTRY-946</a>] -         Log message for synthesizing application file should be a higher priority
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-980'>TAPESTRY-980</a>] -         in ExternalService, activate the external page before validating
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-983'>TAPESTRY-983</a>] -         Allow Radio components id overriding
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-994'>TAPESTRY-994</a>] -         component types unnecessary for annotations
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1031'>TAPESTRY-1031</a>] -         theres no javascript lifecycle for components rendered using the ajax rewind.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1033'>TAPESTRY-1033</a>] -         Autocompleter should pass further parameters to the dojo widget
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1040'>TAPESTRY-1040</a>] -         update Annotation documentation to reflect new functionality of Component annotation
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1041'>TAPESTRY-1041</a>] -         create documentation for how to include the new tapestry/dojo features in portlets
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1053'>TAPESTRY-1053</a>] -         Can't use IJSONWriter to write a JSONArray object.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1064'>TAPESTRY-1064</a>] -         Add isSecure to WebRequest interface
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1103'>TAPESTRY-1103</a>] -         Allow InjectState and InjectStateFlag to 'guess' the name of the ASO
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1123'>TAPESTRY-1123</a>] -         Polish validation strings
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1134'>TAPESTRY-1134</a>] -         TitlePane handles 'open' attribute
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1142'>TAPESTRY-1142</a>] -         Change Body component to call ComponentRenderWorker#renderBody on entire chain of workers
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1156'>TAPESTRY-1156</a>] -         service interface in tapestry event hivemodule.xml
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1157'>TAPESTRY-1157</a>] -         Client side validation popup &quot;OK&quot; button needs ID for automated testing
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1160'>TAPESTRY-1160</a>] -         Add renderTag parameter to For component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1171'>TAPESTRY-1171</a>] -         Change IAutocompleterModel semantics to be object friendly instead of string friendly
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1180'>TAPESTRY-1180</a>] -         synchronizeWidgetState doesn't allow position to be used
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1190'>TAPESTRY-1190</a>] -         create a component class for framework:Style
-                    </li>
-                </ul>
-
-                <h2>        New Feature
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-274'>TAPESTRY-274</a>] -         @Shell infrastructure that can do to CSS what @Body can do with @Script contributions
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-331'>TAPESTRY-331</a>] -         Simplified insert binding template syntax
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-975'>TAPESTRY-975</a>] -         Overriding ValidationDelegate and adding a &quot;class&quot; attribute results in duplicate attributes
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1081'>TAPESTRY-1081</a>] -         Add a new ILinkRenderer that only outputs the target url
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1137'>TAPESTRY-1137</a>] -         New Binding Type that returns the client id of a given component
-                    </li>
-                </ul>
-
-                <h2>        Task
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-486'>TAPESTRY-486</a>] -         Missing contrib component documentation
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-916'>TAPESTRY-916</a>] -         Place link to Cognition Framework under Related Items within Tapestry Forrest docs
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-930'>TAPESTRY-930</a>] -         Tapestry Documentation Errata (Render Block)
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1114'>TAPESTRY-1114</a>] -         table related component docs woefully out of date
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1172'>TAPESTRY-1172</a>] -         Button documentation page is inaccurate
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1174'>TAPESTRY-1174</a>] -         Review validation error messages.
-                    </li>
-                </ul>
-
-                <h2>        Wish
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-263'>TAPESTRY-263</a>] -         Add an element parameter to the Insert component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-268'>TAPESTRY-268</a>] -         Add a raw (title) parameter to the Shell component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1080'>TAPESTRY-1080</a>] -         wish Tapestry shell can add javascripts.
-                    </li>
-                </ul>
-            </subsection>
-
-            <subsection name="Release Notes - Tapestry - Version 4.1">
-                <h2>        Sub-task
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-634'>TAPESTRY-634</a>] -         Cannot dynamically set the id for a Form
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-840'>TAPESTRY-840</a>] -         Using Submit component as a cancel button causes listener to be called twice in Internet Explorer 6
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-943'>TAPESTRY-943</a>] -         Migrate 4.x builds to Maven2
-                    </li>
-                </ul>
-
-                <h2>        Bug
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-192'>TAPESTRY-192</a>] -         DatePicker doesn't pass the W3C validation
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-195'>TAPESTRY-195</a>] -         Cannot disable auto-focus feature in ValidField
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-197'>TAPESTRY-197</a>] -         Leading &amp; trailing spaces not trimmed from ValidField
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-212'>TAPESTRY-212</a>] -         DatePicker produces &quot;Security information&quot; dialog in IE on secure connection
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-221'>TAPESTRY-221</a>] -         TableFormPages component does use pagesClass property
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-436'>TAPESTRY-436</a>] -         Form Table not being updated properly
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-674'>TAPESTRY-674</a>] -         Some errors of DatePicker component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-774'>TAPESTRY-774</a>] -         PopupLinkRenderer fails in Form rewind
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-788'>TAPESTRY-788</a>] -         DatePicker doesn't work in a portlet. Initialization script is run before window finishes loading.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-794'>TAPESTRY-794</a>] -         Extra space in Timeout.jwc prevents warning message from displaying
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-795'>TAPESTRY-795</a>] -         Client-side validation of numbers doesn't allow punctuation
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-802'>TAPESTRY-802</a>] -         All Tapestry URLs should be encoded using RequestCycle.encodeURL(), except for portlets URLs
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-833'>TAPESTRY-833</a>] -         Tapestry.require_field in form.js does not cater for input type select (length property of value property does not exist)
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-847'>TAPESTRY-847</a>] -         Max and Min validators throw NumberFormatException
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-859'>TAPESTRY-859</a>] -         form name &amp; id collision
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-861'>TAPESTRY-861</a>] -         AbstractComponent.prepareForRender() has a little bit confusing javadoc
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-869'>TAPESTRY-869</a>] -         DatePicker icon should specify an alt attribute to support XHTML validation.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-884'>TAPESTRY-884</a>] -         Wrong handling of ResourceBundles in ValidationStrings, when running in non-en environment
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-885'>TAPESTRY-885</a>] -         incorrect Example in the web page
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-931'>TAPESTRY-931</a>] -         Template parsing fails on javascript.
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-948'>TAPESTRY-948</a>] -         Missing resource key: unable-to-open-content-file
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-949'>TAPESTRY-949</a>] -         Fix TableColumns documentation to reflect the changes on embedded CSS
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-950'>TAPESTRY-950</a>] -         Incorect dojo baseRelativePath
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-952'>TAPESTRY-952</a>] -         Resources defined in dojo's css cannot be served
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-955'>TAPESTRY-955</a>] -         Expires header not set correctly in AssetService
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-963'>TAPESTRY-963</a>] -         Script component parameter 'script' is wrong in the documentation
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-976'>TAPESTRY-976</a>] -         Use of XTile error function causes bad JavaScript
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-995'>TAPESTRY-995</a>] -         Overriding maximum file upload size throws Hivemind exception
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1003'>TAPESTRY-1003</a>] -         Grammatical error in Rollover documentation
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1004'>TAPESTRY-1004</a>] -         NPE in EventListenerAnnotationWorker
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1013'>TAPESTRY-1013</a>] -         DefaultResponseContributorImpl has wrong doc
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1015'>TAPESTRY-1015</a>] -         ParseException in AssetService
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1018'>TAPESTRY-1018</a>] -         ActionLink is not completely removed
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1019'>TAPESTRY-1019</a>] -         Creating a required Number-Field does not work as expected
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1020'>TAPESTRY-1020</a>] -         AssetService cannot handle relative paths when asset is in jar
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1021'>TAPESTRY-1021</a>] -         javadoc problem
-                    </li>
-                </ul>
-
-                <h2>        Improvement
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-240'>TAPESTRY-240</a>] -         XHTML 1.0 Strict compliance
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-315'>TAPESTRY-315</a>] -         add submitOnChange parameter to checkboxes and radio buttons
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-440'>TAPESTRY-440</a>] -         Public API for rendering pages inside a page/component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-545'>TAPESTRY-545</a>] -         Hook into the rendering process for AJAX improvement
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-624'>TAPESTRY-624</a>] -         Default exception page should not be cached by browser
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-628'>TAPESTRY-628</a>] -         BeanPropertySelectionModel
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-737'>TAPESTRY-737</a>] -         Support custom PageRenderSupportImpl in component Body
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-801'>TAPESTRY-801</a>] -         Document Validation system
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-810'>TAPESTRY-810</a>] -         Radio components don't have unique client id's
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-812'>TAPESTRY-812</a>] -         [PATCH]Japanese Localization Message
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-813'>TAPESTRY-813</a>] -         Provide a global clientId for all components, not only forms related ones
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-821'>TAPESTRY-821</a>] -         IAssetService should support relative path resolutions
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-822'>TAPESTRY-822</a>] -         Tapestry  should correctly handle url's to private assets in private-asset stylesheets
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-929'>TAPESTRY-929</a>] -         OGNL Null Handler
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-947'>TAPESTRY-947</a>] -         Squeezer Pipeline
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-969'>TAPESTRY-969</a>] -         add &quot;cache-control&quot; header
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-986'>TAPESTRY-986</a>] -         move base test classes out of test and into org.apache.tapestry.test
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-997'>TAPESTRY-997</a>] -         Small patch to start the timetracker application from within maven using the jetty plugin
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-1005'>TAPESTRY-1005</a>] -         Add sources to maven distribution
-                    </li>
-                </ul>
-
-                <h2>        New Feature
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-273'>TAPESTRY-273</a>] -         Autowire Hivemind services into pages or components
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-735'>TAPESTRY-735</a>] -         SubmitScript component
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-917'>TAPESTRY-917</a>] -         HiveMind Service AutoWire Enhancement Worker
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-971'>TAPESTRY-971</a>] -         Include a NullDataSqueezerFilter in the data squeezer pipeline
-                    </li>
-                </ul>
-
-                <h2>        Task
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-787'>TAPESTRY-787</a>] -         Port late bug fixes from 4.0 branch to trunk
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-886'>TAPESTRY-886</a>] -         apply trunk patches/fixes to 4.0 branch
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-940'>TAPESTRY-940</a>] -         Fix parameter reassignments
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-941'>TAPESTRY-941</a>] -         Migrate builds to Maven2
-                    </li>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-951'>TAPESTRY-951</a>] -         Incompatibly licensed file in Tapestry
-                    </li>
-                </ul>
-
-                <h2>        Wish
-                </h2>
-                <ul>
-                    <li>[<a href='https://issues.apache.org/jira/browse/TAPESTRY-928'>TAPESTRY-928</a>] -         Clean source distribution
-                    </li>
-                </ul>
-            </subsection>
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/bindings.xml b/tapestry/src/site/xdoc/usersguide/bindings.xml
deleted file mode 100644
index dcd5cbd..0000000
--- a/tapestry/src/site/xdoc/usersguide/bindings.xml
+++ /dev/null
@@ -1,243 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Component Bindings</title>
-    </properties>
-    <body>
-
-        <section name="Component Bindings">
-            <p>
-                Components are configured by
-                <em>binding</em>
-                their parameters. Binding of parameters may occur inside a page or component template,
-                or a page or component specification.
-            </p>
-
-            <p>
-                When binding a component parameter, the value to be bound may be just a literal string,
-                or it could be an
-                <a href="http://www.ognl.org">OGNL</a>
-                expression, or subject to any of a number of other interpretations. Tapestry uses a
-                <em>prefix</em>
-                value, such as <code>ognl:</code>, or <code>message:</code>, to identify how the rest of the value is to be
-                interpreted. The prefix identifies the
-                <em>binding type</em>
-                :
-            </p>
-
-
-            <table>
-                <tr>
-                    <th>Binding Type</th>
-                    <th>Description</th>
-                    <th>Example</th>
-                    <th>OGNL Equivalent</th>
-                </tr>
-
-                <tr>
-                    <td>asset</td>
-                    <td>References an asset of the component.</td>
-                    <td>asset:stylesheet</td>
-                    <td>ognl:assets.stylesheet</td>
-                </tr>
-
-                <tr>
-                    <td>bean</td>
-                    <td>
-                        References a named bean (defined by a
-                        <a href="spec.html#spec.bean">&lt;bean&gt;</a>
-                        element).
-                    </td>
-                    <td>bean:validationDelegate</td>
-                    <td>ognl:beans.validationDelegate</td>
-                </tr>
-
-                <tr>
-                    <td>clientId</td>
-                    <td>The clientId of the given component.</td>
-                    <td>clientId:myForm</td>
-                    <td>ognl:components.myForm.clientId</td>
-                </tr>
-
-                <tr>
-                    <td>component</td>
-                    <td>References a nested component with the provided component id.</td>
-                    <td>component:form</td>
-                    <td>ognl:components.form</td>
-                </tr>
-
-                <tr>
-                    <td>hivemind</td>
-                    <td>
-                        References a HiveMind object, much like
-                        <a href="spec.html#spec.inject">&lt;inject&gt;</a>
-                        .
-                    </td>
-                    <td>hivemind:service:app.MyService</td>
-                    <td />
-                </tr>
-
-                <tr>
-                    <td>listener</td>
-                    <td>
-                        The name of a
-                        <a href="listenermethods.html">listener method</a>
-                        .
-                    </td>
-                    <td>listener:formSubmit</td>
-                    <td>ognl:listeners.formSubmit</td>
-                </tr>
-
-                <tr>
-                    <td>literal</td>
-                    <td>Used to "escape" a binding prefix, marking the suffix as a literal value.</td>
-                    <td>literal:ognl:not-an-expression</td>
-                    <td />
-                </tr>
-
-                <tr>
-                    <td>message</td>
-                    <td>References a localized message from the component's message catalog.</td>
-                    <td>message:page-title</td>
-                    <td>ognl:messages.getMessage("page-title")</td>
-                </tr>
-
-                <tr>
-                    <td>meta</td>
-                    <td>References a meta configured value for a specific component/page or global configuration file. (such as APPNAME.application or FooComponent.jwc)</td>
-                    <td>meta:renderIfTags</td>
-                    <td>n/a</td>
-                </tr>
-
-                <tr>
-                    <td>ognl</td>
-                    <td>An OGNL expression to be evaluated.</td>
-                    <td>ognl:engine.visit.admin</td>
-                    <td />
-                </tr>
-
-                <tr>
-                    <td>state</td>
-                    <td>
-                        True of false dependening on whether the named
-                        <a href="state.html#state.aso">application state object</a>
-                        exists.
-                    </td>
-                    <td>state:visit</td>
-                    <td />
-                </tr>
-
-                <tr>
-                    <td>translator</td>
-                    <td>
-                        Initializer used to obtain and configure a
-                        <a
-                                href="../apidocs/org/apache/tapestry/form/translator/Translator.html">
-                            Translator
-                        </a>
-                        instance.
-                    </td>
-                    <td>translator:number,pattern=#</td>
-                    <td />
-                </tr>
-                <tr>
-                    <td>validators</td>
-                    <td>
-                        List of configured
-                        <a
-                                href="../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                            Validator
-                        </a>
-                        instances (used with
-                        <a href="../components/form/textfield.html">TextField</a>
-                        and others).
-                    </td>
-                    <td>validators:email,required,minLength=10</td>
-                    <td />
-                </tr>
-            </table>
-
-            <p>
-                Most of these are quite straight forward; the
-                <a href="validation.html#validation.validator-binding">
-                    validator, validators and translator
-                </a>
-                prefixes require some additional description.
-            </p>
-
-            <span class="info">
-                <strong>Note:</strong>
-                <p>
-                    You can define your own prefixes by contributing into the
-                    <a href="../tapestry-framework/hivedoc/config/tapestry.bindings.BindingFactories.html">tapestry.bindings.BindingFactories</a> configuration point.
-                </p>
-            </span>
-
-            <p>
-                What happens when you omit a binding prefix? In a page or component
-                <em>template</em>
-                , the value it is assumed to be a literal string, as with the "literal:" prefix. In a
-                page or component specification, or inside a Java annotation, the value is assumed to be
-                an
-                <a href="http://www.ognl.org">OGNL</a>
-                expression, as with the "ognl:" prefix (but even this can be configured). You will
-                occasionally have to use an explicit "literal:" prefix inside such files.
-            </p>
-
-
-            <p>
-                Many of the bindings are driven by a HiveMind configuration; the configuration will
-                define the available values, and contributing the configuration allows new values to be
-                defined.
-            </p>
-
-            <table>
-                <tr>
-                    <th>Binding Prefix</th>
-                    <th>Configuration</th>
-                </tr>
-                <tr>
-                    <td>translator</td>
-                    <td>
-                        <a
-                                href="../tapestry-framework/hivedoc/config/tapestry.form.translator.Translators.html">
-                            tapestry.form.translator.Translators
-                        </a>
-                    </td>
-                </tr>
-                <tr>
-                    <td>state</td>
-                    <td>
-                        <a href="../tapestry-framework/hivedoc/config/tapestry.state.ApplicationObjects.html">
-                            tapestry.state.ApplicationObjects
-                        </a>
-                    </td>
-                </tr>
-                <tr>
-                    <td>validator</td>
-                    <td>
-                        <a href="../tapestry-framework/hivedoc/config/tapestry.valid.Validators.html">
-                            tapestry.valid.Validators
-                        </a>
-                    </td>
-                </tr>
-            </table>
-
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/components.xml b/tapestry/src/site/xdoc/usersguide/components.xml
deleted file mode 100644
index f605f72..0000000
--- a/tapestry/src/site/xdoc/usersguide/components.xml
+++ /dev/null
@@ -1,904 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Creating Tapestry components</title>
-    </properties>
-    <body>
-
-        <section name="Creating Tapestry Components">
-            <p>
-                Tapestry is a component based web application framework; components, objects which
-                implement the
-                <a href="../apidocs/org/apache/tapestry/IComponent.html">
-                    IComponent
-                </a>
-                interface, are the fundamental building blocks of Tapestry. Additional objects, such
-                as the the engine,
-                <a href="../apidocs/org/apache/tapestry/IMarkupWriter.html">
-                    IMarkupWriter
-                </a>
-                and the request cycle are infrastructure. The following figure identifies the core
-                Tapestry classes and interfaces.
-            </p>
-
-            <img alt="Core Tapestry Classes and Interfaces"
-                src="../images/UsersGuide/core-classes.png" />
-
-            <p>
-                Tapestry components can be simple or complex. They can be specific to a single
-                application or completely generic. They can be part of an application, or they can
-                be packaged into a
-                <a href="#components.libraries">component library</a>
-                .
-            </p>
-
-            <p>
-                All the techniques used with pages work with components as well ... pages are a
-                specialized kind of Tapestry component. This includes
-                <a href="state.html#state.page-properties">specified properties</a>
-                (including persistent properties) and
-                <a href="listenermethods.html">listener method</a>
-                s.
-            </p>
-
-            <p>
-                Components fit into the overall page rendering process because they implement the
-                <a href="../apidocs/org/apache/tapestry/IRender.html">IRender</a>
-                interface. Components that inherit from
-                <a href="../apidocs/org/apache/tapestry/BaseComponent.html">
-                    BaseComponent
-                </a>
-                will use an HTML template. Components that inherit from
-                <a
-                    href="../apidocs/org/apache/tapestry/AbstractComponent.html">
-                    AbstractComponent
-                </a>
-                will render output in Java code, by implementing method
-                <code>renderComponent()</code>
-                .
-            </p>
-
-            <p>
-                The components provided with the framework are not special in any way: they don't
-                have access to any special APIs or perform any special down-casts. Anything a
-                framework component can do, can be done by your own components.
-            </p>
-
-
-            <subsection name="Component Specifications">
-
-
-                <p>
-                    Every component has a component specification, a file ending with a .jwc
-                    extension, whose root element is
-                    <a href="spec.html#spec.component-specification">
-                        &lt;component-specification&gt;
-                    </a>
-                    .
-                </p>
-
-                <p>
-                    Each component's specification defines the basic characteristics of the
-                    component:
-                </p>
-
-                <ul>
-                    <li>
-                        The Java class for the component (which defaults to
-                        <a
-                            href="../apidocs/org/apache/tapestry/BaseComponent.html">
-                            BaseComponent
-                        </a>
-                        )
-                    </li>
-                    <li>
-                        Whether the component uses its body, or discards it (the allow-body
-                        attribute, which defaults to yes)
-                    </li>
-                    <li>
-                        <p>
-                            The name, type and other information for each
-                            <em>formal</em>
-                            parameter.
-                        </p>
-                    </li>
-                    <li>
-                        <p>
-                            Whether the component allows informal parameters or discards them (the
-                            allow-informal-parameters attribute, which defaults to yes)
-                        </p>
-                    </li>
-                    <li>
-                        <p>
-                            The names of any
-                            <em>reserved parameters</em>
-                            which may
-                            <em>not</em>
-                            be used as informal parameters.
-                        </p>
-                    </li>
-                </ul>
-
-
-                <p>
-                    Beyond those additions, a component specification is otherwise the same as a
-                    <a href="spec.html#spec.page-specification">&lt;page-specification&gt;</a>
-                    .
-                </p>
-
-                <p>
-                    When a component is referenced in an HTML template (using the @
-                    <em>Type</em>
-                    syntax), or in a specification (as the type attribute of a
-                    <a href="spec.html#spec.component">&lt;component&gt;</a>
-                    element), Tapestry must locate and parse the component's specification (this is
-                    only done once, with the result cached for later).
-                </p>
-
-                <p>Tapestry searches for components in the following places:</p>
-
-                <ul>
-                    <li>
-                        As specified in a
-                        <a href="spec.html#spec.component-type">&lt;component-type&gt;</a>
-                        element (within the application specification).
-                    </li>
-                    <li>
-                        In the same folder as the application specification, which is typically the
-                        WEB-INF folder.
-                    </li>
-                    <li>
-                        In the WEB-INF/
-                        <em>servlet-name</em>
-                        folder (
-                        <em>servlet-name</em>
-                        is the name of the Tapestry
-                        <a
-                            href="../apidocs/org/apache/tapestry/ApplicationServlet.html">
-                            ApplicationServlet
-                        </a>
-                        for the application).
-                    </li>
-                    <li>In the WEB-INF folder.</li>
-                    <li>In the root context directory.</li>
-                </ul>
-                
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                        The second option, WEB-INF/
-                        <em>servlet-name</em>
-                        , exists to support the rare case of a single WAR file containing multiple
-                        Tapestry applications.
-                    </p>
-                </span>
-
-                <p>
-                    Generally, the
-                    <em>correct</em>
-                    place is in the WEB-INF folder.
-                    <a href="#components.libraries">Components packaged into libraries</a>
-                    have a different (and simpler) search.
-                </p>
-
-
-            </subsection><!-- components.spec -->
-
-            <subsection name="Coding components">
-
-
-                <p>
-                    When creating a new component by subclassing
-                    <a
-                        href="../apidocs/org/apache/tapestry/AbstractComponent.html">
-                        AbstractComponent
-                    </a>
-                    , you must implement the
-                    <code>renderComponent()</code>
-                    method. This method is invoked when the component's container (typically, but
-                    not always, a page) invokes its own
-                    <code>renderBody()</code>
-                    method.
-                </p>
-
-                <source xml:space="preserve">
-protected void renderComponent(<a
-                        href="../apidocs/org/apache/tapestry/IMarkupWriter.html">IMarkupWriter</a> writer, <a
-                        href="../apidocs/org/apache/tapestry/IRequestCycle.html">IRequestCycle</a> cycle)
-{
-  . . .
-}	
-</source>
-
-                <p>
-                    The
-                    <a
-                        href="../apidocs/org/apache/tapestry/IMarkupWriter.html">
-                        IMarkupWriter
-                    </a>
-                    object is used to produce output. It contains a number of
-                    <code>print()</code>
-                    methods that output text (the method is overloaded for different types). It also
-                    contains
-                    <code>printRaw()</code>
-                    methods -- the difference being that
-                    <code>print()</code>
-                    uses a filter to convert certain characters into HTML entities.
-                </p>
-
-
-                <p>
-                    <a
-                        href="../apidocs/org/apache/tapestry/IMarkupWriter.html">
-                        IMarkupWriter
-                    </a>
-                    also includes methods to simplify creating markup style output: that is,
-                    elements with attributes.
-                </p>
-
-
-                <p>For example, to create a &lt;a&gt; link:</p>
-
-                <source xml:space="preserve">
-public void renderComponent(<a
-                        href="../apidocs/org/apache/tapestry/IMarkupWriter.html">IMarkupWriter</a> writer, <a
-                        href="../apidocs/org/apache/tapestry/IRequestCycle.html">IRequestCycle</a> cycle)
-{
-  . . .
-  
-  writer.begin("a");
-  writer.attribute("url", url);
-  writer.attribute("class", styleClass);
-
-  renderBody(writer, cycle);
-
-  writer.end(); // close the &lt;a&gt;	
-}
-</source>
-
-
-                <p>
-                    The
-                    <code>begin()</code>
-                    method renders an open tag (the &lt;a&gt;, in this case). The
-                    <code>end()</code>
-                    method renders the corresponding &lt;/a&gt;. As you can see, writing attributes
-                    into the tag is equally simple.
-                </p>
-
-
-                <p>
-                    The call to
-                    <code>renderBody()</code>
-                    is used to render
-                    <em>this</em>
-                    component's body. A component doesn't have to render its body; the standard
-                    <a href="../components/general/image.html">Image</a>
-                    component doesn't render its body (and its component specification indicates
-                    that it discards its body). The
-                    <a href="../components/general/if.html">If</a>
-                    component decides whether or not to render its body, and the
-                    <a href="../components/general/for.html">For</a>
-                    component may render its body multiple times.
-                </p>
-
-                <p>A component that allows informal parameters can render those as well:</p>
-
-                <source xml:space="preserve">
-  writer.beginEmpty("img");
-  writer.attribute("src", imageURL);
-  renderInformalParameters(writer, cycle);
-</source>
-
-
-                <p>
-                    This example will add any informal parameters for the component as additional
-                    attributes within the &lt;img&gt; element. These informal parameters can be
-                    specified in the page's HTML template, or within the
-                    <a href="spec.html#spec.component">&lt;component&gt;</a>
-                    tag of the page's specification. Note the use of the
-                    <code>beginEmpty()</code>
-                    method, for creating a start tag that is not balanced with an end tag (or a call
-                    to the
-                    <code>end()</code>
-                    method).
-                </p>
-
-            </subsection><!-- components.coding -->
-
-            <subsection name="Component Parameters">
-
-
-                <p>
-                    A Tapestry page consists of a number of components. These components communicate
-                    with, and coordinate with, the page (and each other) via
-                    <em>parameters</em>
-                    .
-                </p>
-
-                <p>
-                    A formal component parameter has a unique name, and may be optional or required.
-                    Optional parameters may have a default value. The
-                    <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                    component specification element is used to define formal component parameters.
-                </p>
-
-                <p>
-                    In a traditional desktop application, components have
-                    <em>properties</em>
-                    . A controller may set the properties of a component, but that's it: properties
-                    are write-and-forget.
-                </p>
-
-                <p>
-                    The Tapestry model is a little more complex. A component's parameters are
-                    <em>bound</em>
-                    to properties of the enclosing page (or component). The component is allowed to
-                    read its parameter, to access the page property the parameter is bound to. A
-                    component may also
-                    <em>update</em>
-                    its parameter, to force a change to the bound page property. In fact, behind the
-                    scenes, each component parameter has a
-                    <em>binding</em>
-                    object, an instance of type
-                    <a href="../apidocs/org/apache/tapestry/IBinding.html">
-                        IBinding
-                    </a>
-                    , that is used to read or update the property.
-                </p>
-
-                <p>
-                    The vast majority of components simply read their parameters. Updating
-                    parameters is more rare; the most common components that update their parameters
-                    are form element components such as
-                    <a href="../components/form/textfield.html">TextField</a>
-                    or
-                    <a href="../components/form/checkbox.html">Checkbox</a>
-                    .
-                </p>
-
-                <p>
-                    Because bindings are often in the form of
-                    <a href="http://www.ognl.org">OGNL</a>
-                    expressions, the property bound to a component parameter may not directly be a
-                    property of the page ... using a property sequence allows great flexibility.
-                </p>
-
-                <img alt="Parameter Bindings" src="../images/UsersGuide/parameter-bindings.png" />
-
-                <p>
-                    Using
-                    <a href="http://www.ognl.org">OGNL</a>
-                    , the
-                    <a href="../components/form/textfield.html">TextField</a>
-                    component's value parameter is bound to the LineItem's quantity property, using
-                    the OGNL expression lineItem.quantity, and the
-                    <a href="../components/general/insert.html">Insert</a>
-                    component's value parameter is bound to the Product's name property using the
-                    OGNL expression lineItem.product.name.
-                </p>
-
-
-                <p>
-                    When using localized messages (the message: prefix) or literal strings (no
-                    prefix), there is still a binding object, just a binding of a different type.
-                    Not all bindings are writable. OGNL expressions may be writeable, if the
-                    expression identifies a property that is itself writeable. Most other types of
-                    bindings are read only.
-                </p>
-
-
-                <p>
-                    To access a component parameter inside Java code is simply a matter of defining
-                    an accessor method. For example, if your component has a title parameter, then
-                    you define a getTitle() accessor method:
-                </p>
-
-                <source xml:space="preserve">
-public abstract String getTitle();
-  
-public void renderComponent(<a
-                        href="../apidocs/org/apache/tapestry/IMarkupWriter.html">IMarkupWriter</a> writer, <a
-                        href="../apidocs/org/apache/tapestry/IRequestCycle.html">IRequestCycle</a> cycle)
-{
-  writer.begin("a");
-  writer.attribute("href", . . .);
-  writer.attribute("title", getTitle());
-  
-  . . .
-}
-</source>
-
-                <p>
-                    When your code invokes getTitle(), the binding for the title parameter will be
-                    used to obtain a value, which is returned. Likewise, invoking setTitle() will
-                    use the binding for the title parameter to update the bound value.
-                </p>
-
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                        If you are upgrading from Tapestry 3.0, you may be wondering "how do I
-                        specify parameter direction now?". Parameter direction was a hint you would
-                        provide to Tapestry that would tell Tapestry when it was appropriate to copy
-                        values into, or out of, component parameter properties. This is no longer
-                        necessary in Tapestry 4.0 -- the runtime code generation for parameter
-                        properties is much more sophisticated. All parameters are now similar to
-                        Tapestry 3.0's auto direction, but much smarter. Tapestry 3.0 auto
-                        parameters were only useable with required parameters and were inefficient.
-                        In Tapestry 4.0, parameter values are cached such that the OGNL expression
-                        does not have to be evaluated every time the parameter is accessed and
-                        things still work properly for optional parameters.
-                    </p>
-                </span>
-
-
-                <p>
-                    There are two ways to set default values for parameters. You may provide a
-                    default-value attribute in the
-                    <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                    element. This is, effectively, a binding to use if no binding is provided.
-                </p>
-
-                <source xml:space="preserve">
-  &lt;parameter name="title" default-value="literal:Link to current thread"/&gt;
-</source>
-
-                <p>
-                    Remember that outside of the template, all
-                    <a href="bindings.html">binding reference</a>
-                    s, including the default-value attribute, default to OGNL expressions.
-                    Therefore, it is necessary to prefix the default value with the literal: prefix
-                    to ensure that Tapestry doesn't treat it as an expression.
-                </p>
-
-                <p>
-                    What's nice is that the default value doesn't have to be a simple string; it can
-                    be a computed OGNL expression, or a reference to a localized message:
-                </p>
-
-
-                <source xml:space="preserve">
-  &lt;parameter name="title"  default-value="message:link-title"/&gt;  
-</source>
-
-                <source xml:space="preserve">
-link-title=Link to current thread
-</source>
-
-                <p>
-                    The second approach to defining default values for parameters is to set the
-                    parameter's property from the component's finishLoad() method.
-                </p>
-
-                <source xml:space="preserve">
-public abstract void setTitle(String title);
-
-protected void finishLoad()
-{
-  super.finishLoad();
-  
-  setTitle("Link to current thread");
-} 
-</source>
-
-                <p>
-                    Even with parameter defaults, there are times when you want to behave
-                    differently depending on whether a parameter is bound or not bound. The method
-                    isParameterBound() exists for those cases:
-                </p>
-
-                <source xml:space="preserve">
-public abstract String getTitle();
-  
-public void renderComponent(<a
-                        href="../apidocs/org/apache/tapestry/IMarkupWriter.html">IMarkupWriter</a> writer, <a
-                        href="../apidocs/org/apache/tapestry/IRequestCycle.html">IRequestCycle</a> cycle)
-{
-  writer.begin("a");
-  writer.attribute("href", . . .);
-  
-  if (isParameterBound("title"))
-    writer.attribute("title", getTitle());
-  
-  . . .
-}
-</source>
-
-
-                <p>
-                    Using isParameterBound() is most useful with parameters whose type is a
-                    primitive type. In the previous example, we could simply invoke getTitle() and
-                    see if the result is null. For, say, an int property, we would need a way to
-                    distinguish between 0 and no value provided ... that's what isParameterBound()
-                    is for.
-                </p>
-
-
-                <p>
-                    Note that you always pass the name of the
-                    <em>parameter</em>
-                    to the isParameterBound() method, even when you've used the property attribute
-                    of the
-                    <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                    element to use a different property name:
-                </p>
-
-                <source xml:space="preserve">
-&lt;parameter name="title" property="titleParameter"/&gt;  
-</source>
-
-                <source xml:space="preserve">
-public abstract String getTitleParameter();
-  
-public void renderComponent(<a
-                        href="../apidocs/org/apache/tapestry/IMarkupWriter.html">IMarkupWriter</a> writer, <a
-                        href="../apidocs/org/apache/tapestry/IRequestCycle.html">IRequestCycle</a> cycle)
-{
-  writer.begin("a");
-  writer.attribute("href", . . .);
-  
-  if (isParameterBound("title"))
-    writer.attribute("title", getTitleParameter());
-  
-  . . .
-}
-</source>
-
-                <p>
-                    When Tapestry enhances a class to add a component property, it (by default)
-                    caches the value of the binding for the duration of the component's render. That
-                    is, while a component is rendering, it will (at most) use the parameter's
-                    binding once, and store the result internally, clearing the cached value as the
-                    component finishes rendering. The parameter property
-                    <em>can be accessed when the component is not rendering</em>
-                    (an important improvement from Tapestry 3.0), the result simply is not cached
-                    (each access to the property when the component is not rendering is another
-                    access via the binding object).
-                </p>
-
-                <p>
-                    This caching behavior is not always desired; in some cases, the component
-                    operates best with caching disabled. The
-                    <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                    element's cache parameter can be set to "false" to defeat this caching.
-                </p>
-
-
-                <p>
-                    However, for the majority of binding types (most types except for "ognl"), the
-                    value obtained is invariant ... it will always be the same value. Values
-                    obtained from invariant bindings are
-                    <em>always</em>
-                    cached
-                    <em>indefinately</em>
-                    (not just for the component's render). In other words, literal string values,
-                    localized messages and so forth are accessed via the binding just once. This is
-                    great for
-                    <em>efficiency</em>
-                    ; after "warming up", a Tapestry page will render faster the second time
-                    through, because so many component parameters are invariant and already in place
-                    inside component properties.
-                </p>
-
-                <p>
-                    On the other hand,
-                    <em>informal parameters</em>
-                    are not cached at all; the values for such parameters are always re-obtained
-                    from the binding object on each use.
-                </p>
-
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                        When using 3.0 DTDs with Tapestry 4.0, parameters with direction "auto" are
-                        <em>not cached</em>
-                        . Other direction types (or no direction specified) are cached. There is no
-                        real support for direction "custom" in 4.0 ... all parameters will be
-                        realized as parameter properties.
-                    </p>
-                </span>
-
-            </subsection><!-- components.parameters -->
-
-
-
-            <subsection name="Component Libraries">
-
-
-                <p>
-                    Tapestry has a very advanced concept of a
-                    <em>component library</em>
-                    . A component library contains both Tapestry components and Tapestry pages (not
-                    to mention engine services).
-                </p>
-
-                <subsection name="Referencing Library Components">
-
-
-                    <p>
-                        Before a component library may be used, it must be listed in the application
-                        specification. Often, an application specification is
-                        <em>only</em>
-                        needed so that it may list the libraries used by the application. Libraries
-                        are identified using the
-                        <a href="spec.html#spec.library">&lt;library&gt;</a>
-                        element.
-                    </p>
-
-                    <p>
-                        The
-                        <a href="spec.html#spec.library">&lt;library&gt;</a>
-                        element provides an
-                        <em>id</em>
-                        for the library, which is used to reference components (and pages) within
-                        the library. It also provides a path to the library's specification. This is
-                        a complete path for a .library file on the classpath. For example:
-                    </p>
-                    <source xml:space="preserve">
-&lt;application name="Example Application"&gt;
-      
-  &lt;library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/&gt;
-  	
-&lt;/application&gt;</source>
-
-                    <p>
-                        In this example, Contrib.library defines a set of components, and those
-                        component can be accessed using contrib: as a prefix. In an HTML template,
-                        this might appear as:
-                    </p>
-
-                    <source xml:space="preserve">	
-&lt;span jwcid="palette@contrib:Palette" . . . /&gt;
-</source>
-
-
-                    <p>
-                        This example defines a component with id
-                        <code>palette</code>
-                        . The component will be an instance of the Palette component, supplied
-                        within the contrib component library. If an application uses multiple
-                        libraries, they will each have their own prefix. Unlike JSPs and JSP tag
-                        libraries, the prefix is set once, in the application specification, and is
-                        used consistently in all HTML templates and specifications within the
-                        application.
-                    </p>
-
-                    <p>The same syntax may be used in page and component specifications:</p>
-
-                    <source xml:space="preserve">
-&lt;component id="palette" type="contrib:Palette"&gt;
-  . . .
-&lt;/component&gt;
-</source>
-
-
-                </subsection><!-- components.libraries.ref -->
-
-                <subsection name="Library component search path">
-
-
-                    <p>
-                        <a href="#components.spec">Previously</a>
-                        , we described the search path for components and pages within the
-                        application. The rules are somewhat different for components and pages
-                        within a library.
-                    </p>
-
-                    <p>
-                        Tapestry searches for library component specifications in the following
-                        places:
-                    </p>
-
-                    <ul>
-                        <li>
-                            As specified in a
-                            <a href="spec.html#spec.component-type">&lt;component-type&gt;</a>
-                            element (with the library specification).
-                        </li>
-                        <li>In the same package folder as the library specification.</li>
-                    </ul>
-
-
-                    <p>
-                        The search for page specifications is identical: as defined in the library
-                        specification, or in the same package folder.
-                    </p>
-
-                </subsection><!-- components.libraries.search -->
-
-                <subsection name="Using Private Assets">
-
-
-                    <p>
-                        Often, a component must be packaged up with images, stylesheets or other
-                        resources (collectively termed "assets") that are needed at runtime. A
-                        reference to such an asset can be created using the
-                        <a href="spec.html#spec.asset">&lt;asset&gt;</a>
-                        element of the page or component specification. For example:
-                    </p>
-
-                    <source xml:space="preserve">
-	
-  &lt;asset name="logo" path="images/logo_200.png"/&gt;
-  
-  &lt;component id="image" type="Image"&gt;
-    &lt;binding name="image" value="asset:logo"/&gt;
-  &lt;/component&gt;
-</source>
-
-                    <p>
-                        In this case, if the component is packaged as
-                        /com/example/mylibrary/MyComponent.jwc, then the asset will be
-                        /com/examples/mylibrary/images/logo_200.png. Further, the asset path will be
-                        localized.
-                    </p>
-
-                    <p>
-                        All assets (classpath, context or external) are converted into instances of
-                        <a href="../apidocs/org/apache/tapestry/IAsset.html">
-                            IAsset
-                        </a>
-                        and treated identically by components (such as
-                        <a href="../components/general/image.html">Image</a>
-                        ). As in this example, relative paths are allowed: they are interpreted
-                        relative to the specification (page or component) they appear in.
-                    </p>
-
-                    <p>
-                        The Tapestry framework will ensure that an asset will be converted to a
-                        valid URL that may be referenced from a client web browser ... even though
-                        the actual service is inside a JAR or otherwise on the classpath, not
-                        normally referenceable from the client browser.
-                    </p>
-
-                    <p>
-                        The
-                        <em>default</em>
-                        behavior is to serve up the
-                        <em>localized</em>
-                        resource using the asset service. In effect, the framework will read the
-                        contents of the asset and pipe that binary content down to the client web
-                        browser.
-                    </p>
-
-                    <p>
-                        An alternate behavior is to have the framework copy the asset to a fixed
-                        directory. This directory should be mapped to a known web folder; that is,
-                        have a URL that can be referenced from a client web browser. In this way,
-                        the web server can more efficiently serve up the asset, as a static resource
-                        (that just happens to be copied into place in a just-in-time manner).
-
-                    </p>
-
-                    <p>
-                        This behavior is controlled by a pair of
-                        <a href="configuration.html#configuration.properties">
-                            configuration properties
-                        </a>
-                        : org.apache.tapestry.asset.dir and org.apache.tapestry.asset.URL.
-
-                    </p>
-                </subsection><!-- components.libraries.classpath-assets -->
-
-                <subsection name="Library Specifications">
-
-
-
-                    <p>
-                        A library specification is a file with a .library extension. Library
-                        specifications use a root element of
-                        <a href="spec.html#spec.library-specification">
-                            &lt;library-specification&gt;
-                        </a>
-                        , which supports a subset of the attributes allowed within an
-                        <a href="spec.html#spec.application">&lt;application&gt;</a>
-                        element (but allowing the
-                        <em>same</em>
-                        nested elements). Often, the library specification is an empty placeholder,
-                        used to an establish a search location for page and component
-                        specifications:
-                    </p>
-
-                    <source xml:space="preserve">
-&lt;!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd"&gt;
-	
-&lt;library-specification/&gt;
-</source>
-
-
-                    <p>
-                        It is allowed that components in one library be constructed using components
-                        provided by another library. The referencing library's specification may
-                        contain
-                        <a href="spec.html#spec.library">&lt;library&gt;</a>
-                        elements that identify some other library.
-                    </p>
-
-                </subsection><!-- comopnents.libraries.spec -->
-
-                <subsection name="Libraries and Namespaces">
-
-
-                    <p>
-                        Tapestry organizes components and pages (but
-                        <em>not</em>
-                        engine services) into
-                        <em>namespaces</em>
-                        . Namespaces are closely related to, but not exactly the same as, the
-                        library prefix established using the
-                        <a href="spec.html#spec.library">&lt;library&gt;</a>
-                        element in an application or library specification.
-                    </p>
-
-                    <p>
-                        Every Tapestry application consists of a default namespace, the application
-                        namespace. This is the namespace used when referencing a page or component
-                        without a prefix. When a page or component can't be resolved within the
-                        application namespace, the framework namespace is searched. Only if the
-                        component (or page) is not part of the framework namespace does an error
-                        result.
-                    </p>
-
-                    <p>
-                        In fact, it is possible to override both pages and components provided by
-                        the framework. This is frequently used to change the look and feel of the
-                        default StateSession or Exception page. In theory, it is even possible to
-                        override fundamental components such as
-                        <a href="../components/general/insert.html">Insert</a>
-                        or
-                        <a href="../components/general/for.html">For</a>
-                        !
-                    </p>
-
-                    <p>
-                        Every component provides a namespace property that defines the namespace (an
-                        instance of
-                        <a
-                            href="../apidocs/org/apache/tapestry/INamespace.html">
-                            INamespace
-                        </a>
-                        ) that the component belongs to.
-                    </p>
-
-                    <p>
-                        You rarely need to be concerned with namespaces, however. The rare exception
-                        is when a page from a library wishes to make use of the
-                        <a href="../components/link/pagelink.html">PageLink</a>
-                        or
-                        <a href="../components/link/externallink.html">ExternalLink</a>
-                        components to create a link to
-                        <em>another page</em>
-                        within the same namespace. This is accomplished (in the source page's HTML
-                        template) as:
-                    </p>
-
-                    <source xml:space="preserve">
-  &lt;a href="#" jwcid="@PageLink" page="OtherPage" namespace="ognl:namespace"&gt; ... &lt;/a&gt;	
-</source>
-
-
-                </subsection><!-- components.libraries.namespace -->
-
-            </subsection><!-- components.libraries -->
-
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/configuration.xml b/tapestry/src/site/xdoc/usersguide/configuration.xml
deleted file mode 100644
index 0f7c6a9..0000000
--- a/tapestry/src/site/xdoc/usersguide/configuration.xml
+++ /dev/null
@@ -1,963 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-    "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Configuring Tapestry</title>
-    </properties>
-    <body>
-
-    <section name="Configuring Tapestry">
-    
-        <span class="warn">
-            <strong>Warning:</strong>
-            <p>
-            Configuration is the area of greatest change between Tapestry 3.0 and Tapestry 4.0.
-            Tapestry 4.0 has been restructured around
-            <a href="http://hivemind.apache.org/hivemind1/">HiveMind</a>
-            , which includes a very rich environment for services and configurations.
-            </p>
-        </span>
-        
-        <p>
-            Tapestry is designed to operate on a variety of different JVMs and versions of the Java
-            Servlet API. Below you can find the list of supported and tested configurations:
-        </p>
-
-        <dl>
-            <dt>Java 1.4.x</dt>
-            <dd>Operates correctly.</dd>
-            
-            <dt>Java 1.5.x (recommended)</dt>
-            <dd>Operates correctly. Annotation-configuration can be used.</dd>
-            
-            <dt>Java 1.6.x </dt>
-            <dd>Operates correctly.</dd>
-        </dl>
-
-        <p>Supported Java Servlet API Versions:</p>
-
-        <dl>
-            <dt>Java Servlet API 2.2</dt>
-
-            <dd>
-                Operates correctly with minor exceptions related to character encoding of the
-                requests due to the limitations of the Servlet API version.
-            </dd>
-
-            <dt>Java Servlet API 2.3 (recommended)</dt>
-
-            <dd>Operates correctly.</dd>
-        </dl>
-
-
-        <subsection name="Web deployment descriptor">
-            <p>
-                All Tapestry applications make use of the
-                <a
-                    href="../apidocs/org/apache/tapestry/ApplicationServlet.html">
-                    ApplicationServlet
-                </a>
-                class as their servlet; it is rarely necessary to create a subclass. A typical
-                web.xml configuration maps the servlet to the /app path, and adds a servlet filter
-                (discussed shortly):
-            </p>
-
-
-            <source xml:space="preserve">
-&lt;?xml version="1.0"?&gt;
-&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;
-&lt;web-app&gt;
-  &lt;display-name&gt;My Application&lt;/display-name&gt;
-  
-  &lt;servlet-mapping&gt;
-    &lt;servlet-name&gt;myapp&lt;/servlet-name&gt;
-    &lt;url-pattern&gt;/app&lt;/url-pattern&gt; 
-  &lt;/servlet-mapping&gt;
-  
-  &lt;filter&gt; 
-    &lt;filter-name&gt;redirect&lt;/filter-name&gt;
-    &lt;filter-class&gt;org.apache.tapestry.RedirectFilter&lt;/filter-class&gt;
-  &lt;/filter&gt;
-	
-  &lt;filter-mapping&gt;
-    &lt;filter-name&gt;redirect&lt;/filter-name&gt;
-    &lt;url-pattern&gt;/&lt;/url-pattern&gt;
-  &lt;/filter-mapping&gt;
-
-  &lt;servlet&gt;
-    &lt;servlet-name&gt;myapp&lt;/servlet-name&gt;
-    &lt;servlet-class&gt;org.apache.tapestry.ApplicationServlet&lt;/servlet-class&gt; 
-    &lt;load-on-startup&gt;0&lt;/load-on-startup&gt;
-  &lt;/servlet&gt;
-  
-  &lt;session-config&gt;
-  	&lt;session-timeout&gt;15&lt;/session-timeout&gt;
-  &lt;/session-config&gt;
-    
-  &lt;welcome-file-list&gt;
-    &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;
-  &lt;/welcome-file-list&gt;
-&lt;/web-app&gt;
-
-</source>
-
-            <p>
-                The servlet class should always be
-                <a
-                    href="../apidocs/org/apache/tapestry/ApplicationServlet.html">
-                    ApplicationServlet
-                </a>
-                . There's rarely a need to create a subclass; Tapestry has many other hooks for
-                extending the application.
-            </p>
-            <p>
-                It is generally a good idea to specify &lt;load-on-startup&gt;, this causes the
-                servlet container to instantitate and initialize the the application servlet, which
-                in turn, reads the Tapestry application specification. Many common development
-                errors will be spotted immediately, rather than when the first application request
-                arrives.
-            </p>
-
-            <p>
-                The servlet is mapped to /app within the context. The context itself has a path,
-                determined by the application server and based on the name of the WAR file.
-
-                The client web browser will see the Tapestry application as http://
-                <em>host</em>
-                /
-                <em>war-name</em>
-                /app.
-            </p>
-
-            <p>
-                Using /app as the URL is a common convention when creating Tapestry applications,
-                but is not a requirement. If you choose an alternate URL, you must override the
-                <code>org.apache.tapestry.servlet-path</code>
-                configuration property.
-            </p>
-
-            <p>
-                The
-                <a href="../apidocs/org/apache/tapestry/RedirectFilter.html">
-                    RedirectFilter
-                </a>
-                filter sends a client redirect to the user when they access the web application
-                context. The filter sends a client redirect to the user's browser, directing them to
-                the application servlet. In this way, the "public" URL for an application can be
-                http://myserver/mycontext/ when, in fact, the real address is
-                http://myserver/mycontext/app.
-            </p>
-
-            <p>
-                On initialization, the Tapestry servlet will locate its application specification; a
-                file that identifies details about the application, the pages and components within
-                it, and any component libraries it uses. Tapestry provides a great deal of
-                flexibility on where the specification is stored; trivial Tapestry applications can
-                operate without an application specification.
-            </p>
-
-            <p>
-             Since Tapestry 4.0, the application specification is complemented and greatly 
-             extended by the <a href="hivemind.html">HiveMind configurations</a>.
-
-            </p>
-
-            <p>
-                The specification is normally stored under WEB-INF. In fact, Tapestry performs a
-                search to find the specification:
-            </p>
-
-            <ul>
-                <li>
-                    On the classpath, as defined by the
-                    org.apache.tapestry.application-specification
-                    <a href="configuration.html#Configuration Properties">configuration property</a>
-                    .
-                </li>
-                <li>
-                    As /WEB-INF/
-                    <em>name</em>
-                    /
-                    <em>name</em>
-                    .application. The
-                    <em>name</em>
-                    is the servlet name. This location is only used in the rare case of a single WAR
-                    containing multiple Tapestry applications.
-                </li>
-                <li>
-                    As /WEB-INF/
-                    <em>name</em>
-                    .application. Again,
-                    <em>name</em>
-                    is the servlet name. This is the standard location.
-                </li>
-            </ul>
-
-            <p>
-                If the application specification still can not be found, then an empty, "stand in"
-                application specification is used. This is perfectly acceptible ... an application
-                specification is typically needed only when an application makes use of component
-                libraries, or requires some other kind of customization only possible with an
-                application specification.
-            </p>
-
-
-        </subsection><!-- configuration.deployment-descriptor -->
-
-        <subsection name="Property Sources">
-            <p>
-                Tapestry occasionally must obtain a value for a configuration property. These
-                configuration properties are items that are frequently optional, and don't fit into
-                any particular specification. Many are related to the runtime environment, such as
-                which class to instantiate as the Visit object.
-            </p>
-
-            <p>
-                Tapestry is very flexible about where values for such properties may be obtained.
-                There are three kinds of property sources with different search paths which are used
-                in different contexts; these are: global, application and component property sources.
-            </p>
-
-             In general, the search path for configuration properties is:
-            <ul> 
-                <li>
-                    As a
-                    <a href="spec.html#spec.meta">&lt;meta&gt;</a>
-                    of the
-                    <a href="spec.html#spec.application">&lt;application&gt;</a>
-                    (in the application specification, if the application uses one).
-                </li>
-                <li>
-                    As an &lt;init-parameter&gt; for the servlet, in the web application deployment
-                    descriptor.
-                </li>
-                <li>
-                    As an &lt;init-parameter&gt; for the servlet context, also in the web
-                    application deployment descriptor.
-                </li>
-                <li>As a JVM system property.</li>
-                <li>
-                    Hard-coded "factory" defaults (for some properties). These are accessed as
-                    <a href="http://hivemind.apache.org/hivemind1/">HiveMind</a>
-                    symbols.
-                </li>
-            </ul>
-            
-
-            <p>
-                It is expected that some configuration properties are not defined at any level;
-                those will return null.
-            </p>
-            
-            <p>Applications are free to leverage this lookup mechanism as well.</p>
-            
-            <p>
-             Within the framework the following three services provide access to properties
-             from the above-mentioned sources:
-             <ul>
-               <li> The <a href="../tapestry-framework/hivedoc/service/tapestry.props.ComponentPropertySource.html">
-                     ComponentPropertySource </a> serves the need of components, looking
-                     up properties starting at component-spec-level and working its way upwards</li>
-               <li> The <a href="../tapestry-framework/hivedoc/service/tapestry.props.ApplicationPropertySource.html">
-                     ApplicationPropertySource </a> provides access to application-scoped
-                     properties where "application" means tapestry application as opposed to web 
-                     application (see next item).</li>
-               <li> The <a href="../tapestry-framework/hivedoc/service/tapestry.props.GlobalPropertySource.html">
-                     GlobalPropertySource </a> provides access to much the same properties as the
-                     ApplicationPropertySource omitting the application-specification itself since
-                     there might be multiple tapestry applications living within the same
-                     web application.</li>
-              </ul>
-            
-            </p>
-            
-            <p>
-                Applications may also want to change or augment the default search path; this is
-                accomplished by 
-                <ol> 
-                  <li> writing a HiveMind service implementing the interface
-                <a href="../apidocs/org/apache/tapestry/engine/IPropertySource.html">
-                    IPropertySource</a>
-                  </li>
-                <li> contributing it to the <a href="../tapestry-framework/hivedoc/config/tapestry.props.ApplicationPropertySources.html">tapestry.props.ApplicationPropertySource 
-                   configuration point</a></li>
-                </ol>
-                . For example, some configuration data could be drawn from a database.
-            </p>
-
-            
-        </subsection><!-- configuration.app-property-source -->
-
-        <subsection name="Global Property Source">
-
-
-            <p>
-                In some cases, a slightly different property source is used, the global property
-                source.
-            </p>
-
-            <ul>
-                <li>
-                    As an &lt;init-parameter&gt; for the servlet, in the web application deployment
-                    descriptor.
-                </li>
-                <li>
-                    As an &lt;init-parameter&gt; for the servlet context, also in the web
-                    application deployment descriptor.
-                </li>
-                <li>As a JVM system property.</li>
-                <li>
-                    Hard-coded "factory" defaults (for some properties). These are accessed as
-                    <a href="http://hivemind.apache.org/hivemind1/">HiveMind</a>
-                    symbols.
-                </li>
-            </ul>
-        </subsection><!-- configuration.global-property-source -->
-
-        <subsection name="Configuration Properties">
-
-
-            <p>The following are all the configuration values currently used in Tapestry:</p>
-
-            <table>
-                <thead>
-                    <tr>
-                    <th>Property</th>
-                    <th>Default Value</th>
-                    <th>Description</th>
-                    </tr>
-                </thead>
-                
-                <tbody>
-                <tr>
-                    <td>org.apache.tapestry.accepted-locales</td>
-                    <td>any/all</td>
-                    <td>
-                        Controls which locales are supported by the application; see the
-                        documentation on
-                        <a href="localization.html#localization.accepted-locales">
-                            limiting accepted locales
-                        </a>
-                        for details.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.bean-class-packages</td>
-                    <td></td>
-                    <td>
-                        A comma-seperated list, used when converting class names for managed beans
-                        (specified using the
-                        <a href="spec.html#spec.bean">&lt;bean&gt;</a>
-                        element) into fully qualified class names. This property is specified in the
-                        containing library or application specification.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.component-class-packages</td>
-                    <td> </td>
-                    <td>
-                        A comma-seperated list of package names, used when
-                        <a href="page-class.html#page-class.component">
-                            searching for the component class
-                        </a>
-                        . These must appear as
-                        <a href="spec.html#spec.meta">&lt;meta&gt;</a>
-                        tags in the application or library specification containing the component
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.default-binding-prefix</td>
-                    <td>ognl</td>
-                    <td>
-                        The default binding to use when no explicit binding prefix is provided. This
-                        is typically set inside a page or component specification, or within an
-                        application specification or library specification (to provide the default
-                        for all pages and components). If not otherwise specified, the default
-                        binding prefix is "ognl".
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.default-cookie-max-age</td>
-                    <td>6123600</td>
-                    <td>
-                        The default max age (in seconds) for cookies written by Tapestry, including
-                        the cookie used to track the user's locale. A value of -1 means the cookie
-                        is a session cookie, stored only until the user's browser exits. The default
-                        value is equivalent to one week.
-                    </td>
-                </tr>
-
-	            <tr>
-		            <td>org.apache.tapestry.default-property-persistence-strategy</td>
-		            <td>session</td>
-		            <td>
-			            The default property persistence strategy to use for page properties annotated
-			            with @Persist. The default is "session", which stores the properties in the
-			            HttpSession as a session attribute. Tapestry also provides a "client" strategy
-			            and additional strategies can be defined.
-		            </td>
-	            </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.application-specification</td>
-                    <td></td>
-                    <td>
-                        The alternate application specification path. This must be given as a servlet
-                        context parameter in your web.xml and must point to a resource in your applications
-                        classpath.
-                    </td>
-                </tr>
-                <tr>
-                    <td>org.apache.tapestry.namespace-properties-name</td>
-                    <td></td>
-                    <td>
-                        When specified in an application/library/page/component specification provides an alternate
-                        name to resolve <code>.properties</code> files. The default name is the name of the 
-                        application/library/page/component specification file with <code>.properties</code> added
-                        onto it.
-                        <br/><br/>
-                        <p>Example, change default global properties file to be Global.properties instead of the 
-                        typical default of <code>MyApplication.properties</code>:</p>
-<source><![CDATA[<application name="MyApplication">
-
-<meta key="org.apache.tapestry.namespace-properties-name"
-  value="Global" />
-
-</application>]]></source>
-                    </td>
-                </tr>
-                <tr>
-
-                    <td>org.apache.tapestry.default-page-class</td>
-                    <td>org.apache.tapestry.
-                    html.BasePage</td>
-                    <td>
-                        By default, any page that omits the class attribute (in its
-                        <a href="spec.html#spec.page-specification">&lt;page-specification&gt;</a>
-                        ) will be instantiated as
-                        <a
-                            href="../apidocs/org/apache/tapestry/html/BasePage.html">
-                            BasePage
-                        </a>
-                        . If this is not desired, the default may be overridden by specifying a
-                        fully qualified class name.
-                    </td>
-
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.disable-caching</td>
-                    <td>false</td>
-                    <td>
-                        If specified (as "true"), then the framework will discard all cached data
-                        (specifications, templates, pooled objects, etc.) at the end of each request
-                        cycle.
-
-                        <p>
-                            This slows down request handling by a noticable amount, but is very
-                            useful in development; it means that changes to templates and
-                            specifications are immediately visible to the application. It also helps
-                            identify any errors in managing persistent page state.
-                        </p>
-
-                        <p>
-                            This should never be enabled in production; the performance hit is too
-                            large. Unlike most other configuration values, this must be specified as
-                            a JVM system property.
-                        </p>
-                    </td>
-                </tr>
-                <tr>
-                    <td>org.apache.tapestry.enable-reset-service</td>
-                    <td>false</td>
-                    <td>
-                        If not specified as "true", then the reset service will be non-functional.
-                        The reset service is used to force the running Tapestry application to
-                        discard all cached data (including templates, specifications, pooled objects
-                        and more). This must be explicitly enabled, and should only be used in
-                        development (in production, it is too easily exploited as a denial of
-                        service attack).
-
-                        <p>
-                            Unlike most other configuration values, this must be specified as a JVM
-                            system property.
-                        </p>
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.engine-class</td>
-                    <td>org.apache.tapestry.
-                    engine.BaseEngine</td>
-                    <td>
-                        The fully qualified class name to instantiate as the application engine.
-                        This configuration value is only used when the application specification
-                        does not exist, or fails to specify a class. By default,
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/BaseEngine.html">
-                            BaseEngine
-                        </a>
-                        is used if this configuration value is also left unspecified.
-                    </td>
-                </tr>
-                <tr>
-                    <td>org.apache.tapestry.enhance.
-                    disable-abstract-method-validation</td>
-                    <td>false</td>
-                    <td>
-                        Used to trigger a work around for a bug in IBM's JDK 1.4.0. This particular
-                        JDK reports
-                        <em>all</em>
-                        methods of an abstract class as abstract, even if they are, in fact,
-                        concrete. This causes spurious errors about unimplemented abstract methods.
-                        Specifying true for this property disables checks for unimplemented abstract
-                        methods.
-
-                        <span class="warn">
-                            <strong>Warning:</strong>
-                            <p>
-                            Support for this property has been temporarily removed from release 4.0.
-                            </p>
-                        </span>
-                    </td>
-                </tr>
-
-
-                <tr>
-                    <td>org.apache.tapestry.global-class</td>
-                    <td>java.util.HashMap</td>
-                    <td>
-                        The fully qualified class name to instantiate as the engine global property.
-                        The Global object is much like Visit object, except that it is shared by all
-                        instances of the application engine rather than being private to any
-                        particular session. If not specified, a synchronized instance of HashMap is
-                        used.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.home-page</td>
-                    <td>Home</td>
-                    <td>
-                        The name of the page to be displayed by the home engine service (that is,
-                        the page initially displayed when there's no other information in the
-                        request URL). The default is "Home".
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.jwcid-attribute-name</td>
-                    <td>jwcid</td>
-                    <td>
-                        Controls the attribute used to recognize the locations of contained
-                        components within a
-                        <a href="template.html#template.components">component template</a>
-                        . The default is "jwcid".
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.messages-encoding</td>
-                    <td>ISO-8859-1</td>
-                    <td>
-                        Defines the character set used when reading the properties files comprising
-                        a page or component
-                        <a href="localization.html#localization.component-catalog">
-                            message catalog
-                        </a>
-                        . The default value is ISO-8859-1.
-
-
-                        <p>
-                            Please see the
-                            <a href="localization.html#localization.component-catalog.encoding">
-                                message catalog localization discussion
-                            </a>
-                            for more information.
-                        </p>
-                    </td>
-                </tr>
-
-
-                <tr>
-                    <td>org.apache.tapestry.output-encoding</td>
-                    <td>UTF-8</td>
-                    <td>
-                        Defines the character set used by the application to encode its HTTP
-                        responses. This is also the character set that the application assumes that
-                        the browser uses when submitting data unless it is not specified differently
-                        in the HTTP request.
-
-                        <p>
-                            The default for this configuration property is UTF-8. Normally there is
-                            no need to modify this value since UTF-8 allows almost all characters to
-                            be correctly encoded and displayed.
-                        </p>
-                    </td>
-
-                </tr>
-                <tr>
-                    <td>org.apache.tapestry.page-class-packages</td>
-                    <td></td>
-                    <td>
-                        A comma-seperated list of package names, used when
-                        <a href="page-class.html">searching for the page class</a>
-                        . These must appear as
-                        <a href="spec.html#spec.meta">&lt;meta&gt;</a>
-                        tags in the application or library specification containing the page.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.servlet-path</td>
-                    <td>/app</td>
-                    <td>
-                        Defines the servlet path used when constructing URLs. The default value is
-                        <code>/app</code>
-                        . Note that this is just the
-                        <em>servlet path</em>
-                        . In many cases, the application will be inside a context; Tapestry will
-                        automatically prefix this value with the correct value for the context. For
-                        example, workbench.war will by default be deployed with a context path of
-                        /workbench, and Tapestry will build URLs as /workbench/app.
-                    </td>
-
-                </tr>
-
-
-                <tr>
-                    <td>org.apache.tapestry.template-encoding</td>
-                    <td>ISO-8859-1</td>
-                    <td>
-                        Defines the character set used by the application templates. The default
-                        value is ISO-8859-1.
-
-
-                        <p>
-                            Please see the
-                            <a href="localization.html#localization.template-encoding">
-                                template localization discussion
-                            </a>
-                            for more information.
-                        </p>
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.template-extension</td>
-                    <td>html</td>
-                    <td>
-                        Overrides the default extension used to locate templates for pages or
-                        components. The default extension is "html", this configuration property
-                        allows overrides where appropriate. For example, an application that
-                        produces WML may want to override this to "wml".
-
-
-                        <p>
-                            This configuration property does not follow the normal search path
-                            rules. The
-                            <a href="spec.html#spec.meta">&lt;meta&gt;</a>
-                            must be provided in the
-                            <a href="spec.html#spec.page-specification">
-                                &lt;page-specification&gt;
-                            </a>
-                            or
-                            <a href="spec.html#spec.component-specification">
-                                &lt;component-specification&gt;
-                            </a>
-                            . If no value is found there, the immediate containing
-                            <a href="spec.html#spec.application">&lt;application&gt;</a>
-                            or
-                            <a href="spec.html#spec.library-specification">
-                                &lt;library-specification&gt;
-                            </a>
-                            is checked. If still not found, the default is used.
-                        </p>
-
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.607-patch</td>
-                    <td>false</td>
-                    <td>
-                        A workaround for
-                        <a href="http://issues.apache.org/jira/browse/TAPESTRY-607">TAPESTRY-607</a>
-                        , a problem related to response character sets when using some versions of
-                        Tomcat 5. The Tomcat bug is
-                        <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=37072">37072</a>
-                        . This patch ensures that HttpServletResponse.setContentType() is only
-                        invoked once, even if the output is reset (for instance, to switch to the
-                        Tapestry exception page). The value must be set to true as a JVM system
-                        property.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.visit-class</td>
-                    <td>java.util.HashMap</td>
-                    <td>
-                        The fully qualified class name to instantiate as the
-                        <a href="index.html#intro.engine-service-visit">Visit object</a>
-                        .
-
-                        <p>If not specified, an instance of HashMap will be created.</p>
-
-                        <p>
-                            This is something of a holdover from Tapestry 3.0; for Tapestry 4.0, you
-                            will likely want to override the default visit
-                            <a href="state.html#state.aso">application state object</a>
-                            (or simply add your own application state objects).
-                        </p>
-
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.renderTags</td>
-                    <td>true</td>
-                    <td>
-                        Whether or not some block level components will render their template 
-                        tag names by default. 
-                        
-                        <p>
-                            This currently affects the <a href="../components/general/if.html">If</a>,
-                            <a href="../components/general/else.html">Else</a> and 
-                            <a href="../components/general/for.html">For</a> components.
-                        </p>
-                        
-                        <p>
-                        For example, with the default value of true - the following h2 element tag would 
-                        be printed out literally as specified:
-                        </p>
-
-<source><![CDATA[
-<h2 jwcid="@If" condition="true">
-This is a header
-</h2>
-]]></source>
-                    </td>
-                </tr>
-
-                </tbody>
-            </table>
-        </subsection><!-- configuration.properties -->
-
-        <subsection name="Application extensions">
-
-
-            <span class="warn">
-                <strong>Warning:</strong>
-                <p>
-                Application extensions are deprecated as of release 4.0. The use of
-                <a href="http://hivemind.apache.org/hivemind1/">HiveMind</a>
-                services and contributions eliminates the need for extensions.
-                </p>
-            </span>
-
-            <p>
-                Tapestry is designed for flexibility; this extends beyond simply configuring the
-                framework, and encompasses actually replacing or augmenting the implementation of
-                the framework. If Tapestry doesn't do what you want it to, there are multiple paths
-                for extending, changing and overriding its normal behavior. In some cases, it is
-                necessary to subclass framework classes in order to alter behavior, but in many
-                cases, it is possible to use an application extension.
-            </p>
-
-            <p>
-                Application extensions are JavaBeans declared in the application specification using
-                the
-                <a href="spec.html#spec.extension">&lt;extension&gt;</a>
-                element. Each extension consists of a name, a Java class to instantiate, and an
-                optional configuration (that is, properties of the bean may be set). The framework
-                has a finite number of extension points. If an extension bean with the correct name
-                exists, it will be used at that extension point.
-            </p>
-
-            <p>
-                Your application may have its own set of extensions not related to Tapestry
-                framework extension points. For example, you might have an application extension
-                referenced from multiple pages to perform common operations such as JNDI lookups.
-            </p>
-
-            <p>
-                You may access application extensions via the engine's specification property. For
-                example:
-            </p>
-
-            <source xml:space="preserve">
-<a href="../apidocs/org/apache/tapestry/IEngine.html">IEngine</a> engine = getEngine();
-<a href="../apidocs/org/apache/tapestry/spec/IApplicationSpecification.html">IApplicationSpecification</a> specification = engine.getSpecification();
-	
-MyExtension myExtension = (MyExtension) specification.getExtension("myExtension");	
-</source>
-
-
-            <p>
-                Each application extension used with an framework extension point must implement an
-                interface particular to the extension point.
-            </p>
-
-            <table>
-                <tr>
-                    <th>Extension Name</th>
-                    <th>Type</th>
-                    <th>Description</th>
-                </tr>
-                <tr>
-                    <td>org.apache.tapestry.property-source</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/IPropertySource.html">
-                            IPropertySource
-                        </a>
-                    </td>
-
-                    <td>
-                        This extension is fit into the configuration property search path, after the
-                        servlet context, but before JVM system properties. A typical use would be to
-                        access some set of configuration properties stored in a database.
-                    </td>
-                </tr>
-
-
-
-                <tr>
-                    <td>org.apache.tapestry.request-decoder</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/request/IRequestDecoder.html">
-                            IRequestDecoder
-                        </a>
-                    </td>
-                    <td>
-                        A request decoder is used to identify the actual server name, server port,
-                        scheme and request URI for the request. In some configurations, a firewall
-                        may invalidate the values provided by the actual HttpServletRequest (the
-                        values reflect the internal server forwarded to by the firewall, not the
-                        actual values used by the external client). A request decoder knows how to
-                        determine the actual values.
-                    </td>
-                </tr>
-
-
-
-                <tr>
-                    <td>org.apache.tapestry.monitor-factory</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/IMonitorFactory.html">
-                            IMonitorFactory
-                        </a>
-                    </td>
-
-                    <td>
-                        An object that is used to create
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/IMonitor.html">
-                            IMonitor
-                        </a>
-                        instances. Monitors are informed about key application events (such as
-                        loading a page) during the processing of a request.
-
-
-                        <p>
-                            The factory may create a new instance for the request, or may simply
-                            provide access to a shared instance.
-                        </p>
-
-                        <p>
-                            If not specified, a default implementation is used (
-                            <a
-                                href="../apidocs/org/apache/tapestry/engine/DefaultMonitorFactory.html">
-                                DefaultMonitorFactory
-                            </a>
-                            ).
-                        </p>
-                    </td>
-                </tr>
-
-
-
-                <tr>
-                    <td>org.apache.tapestry.
-                    specification-resolver-delegate</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/resolver/ISpecificationResolverDelegate.html">
-                            ISpecificationResolverDelegate
-                        </a>
-                    </td>
-
-                    <td>
-                        An object which is used to find page and component specifications that are
-                        not located using the default search rules. The use of this is open-ended,
-                        but is generally useful in very advanced scenarios where specifications are
-                        stored externally (perhaps in a database), or constructed on the fly.
-                    </td>
-                </tr>
-
-
-
-                <tr>
-                    <td>org.apache.tapestry.
-                    template-source-delegate</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/ITemplateSourceDelegate.html">
-                            ITemplateSourceDelegate
-                        </a>
-                    </td>
-
-                    <td>
-                        An object which is used to find page or component templates that are not
-                        located using the default search rules. The use of this is open-ended, but
-                        is generally useful in very advanced scenarios where templates are stored
-                        externally (perhaps in a database), or constructed on the fly.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>org.apache.tapestry.ognl-type-converter</td>
-                    <td>ognl.TypeConverter</td>
-
-                    <td>
-                        Specifies an implementation of ognl.TypeConverter to be used for expression
-                        bindings. See OGNL's
-                        <a
-                            href="http://www.ognl.org/2.6.9/Documentation/html/DeveloperGuide/typeConversion.html">
-                            Type Converter documentation
-                        </a>
-                        for further information on implementing a custom type converter.
-                    </td>
-                </tr>
-
-            </table>
-
-        </subsection><!-- configuration.extensions -->
-
-
-    </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/events.xml b/tapestry/src/site/xdoc/usersguide/events.xml
deleted file mode 100644
index 87aa711..0000000
--- a/tapestry/src/site/xdoc/usersguide/events.xml
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Page Events</title>
-    </properties>
-    <body>
-    
-        <section name="Page Events">
-        <p>
-            Tapestry component and page classes may implement
-            <em>optional listener interfaces</em>
-            . This interfaces allow the component (or page) to be notified when certain lifecycle
-            events occur. Each interface consists of a single method.
-        </p>
-
-        <p>
-            It is merely necessary to implement the interface; the framework will automatically
-            register the component (or page) to receive the notification. It is perfectly acceptible
-            to implement multiple interfaces.
-        </p>
-
-        <table>
-            <tr>
-                <th>Interface</th>
-                <th>Invoked</th>
-                <th>Notes</th>
-            </tr>
-            <tr>
-                <td>
-                    <a
-                        href="../apidocs/org/apache/tapestry/event/PageAttachListener.html">
-                        PageAttachListener
-                    </a>
-                </td>
-                <td>
-                    When a page is first attached to the current request. After the page's
-                    persistent properties have been rolled back.
-                </td>
-                <td>
-                    Set up the page's properties based on the current session state, possibly by
-                    pulling data from an
-                    <a href="state.html#state.aso">application state object</a>
-                    .
-                </td>
-            </tr>
-            <tr>
-                <td>
-                    <a
-                        href="../apidocs/org/apache/tapestry/event/PageValidateListener.html">
-                        PageValidateListener
-                    </a>
-                </td>
-                <td>
-                    When a page is activated (selected to render the reponse). Throw
-                    <a
-                        href="../apidocs/org/apache/tapestry/PageRedirectException.html">
-                        PageRedirectException
-                    </a>
-                    to activate a different page.
-                </td>
-                <td>
-                    Typically, checking the user's allowed access to a page, based on
-                    application-specific security rules.
-                </td>
-            </tr>
-            <tr>
-                <td>
-                    <a
-                        href="../apidocs/org/apache/tapestry/event/PageBeginRenderListener.html">
-                        PageBeginRenderListener
-                    </a>
-                </td>
-                <td>
-                    Just before the page begins to render. This is the last chance to update
-                    persistent page properties.
-                </td>
-                <td />
-            </tr>
-            <tr>
-                <td>
-                    <a
-                        href="../apidocs/org/apache/tapestry/event/PageEndRenderListener.html">
-                        PageEndRenderListener
-                    </a>
-                </td>
-                <td>
-                    At the end of the page render (even if an exception is thrown while the page
-                    renders).
-                </td>
-                <td />
-            </tr>
-            <tr>
-                <td>
-                    <a
-                        href="../apidocs/org/apache/tapestry/event/PageDetachListener.html">
-                        PageDetachListener
-                    </a>
-                </td>
-                <td>
-                    As the page is detached from the request and returned to the shared page pool.
-                </td>
-                <td>
-                    Final cleanups to "scrub" the page, remove any client-specific state, and
-                    otherwise return it to a pristine state.
-                </td>
-            </tr>
-        </table>
-
-        <span class="info">
-            <strong>Note:</strong>
-            <p>
-            Tapestry 3.0 defined a single
-            <a
-                href="../apidocs/org/apache/tapestry/event/PageRenderListener.html">
-                PageRenderListener
-            </a>
-            interface instead of
-            <a
-                href="../apidocs/org/apache/tapestry/event/PageBeginRenderListener.html">
-                PageBeginRenderListener
-            </a>
-            and
-            <a
-                href="../apidocs/org/apache/tapestry/event/PageEndRenderListener.html">
-                PageEndRenderListener
-            </a>
-            . This is still supported in 4.0 (it has been redefined as extending the other two
-            interfaces), but will likely be removed in a future release.
-            </p>
-        </span>
-        
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/friendly-urls.xml b/tapestry/src/site/xdoc/usersguide/friendly-urls.xml
deleted file mode 100644
index a074661..0000000
--- a/tapestry/src/site/xdoc/usersguide/friendly-urls.xml
+++ /dev/null
@@ -1,571 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE document PUBLIC "//xdoc/" "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Configuring Friendly URLs</title>
-    </properties>
-    <body>
-
-        <section name="Configuring Friendly URLs">
-            <p>
-                Earlier versions of Tapestry have had a long-standing tradition of
-                <em>really ugly URLs</em>
-                . Because the framework generates the URLs and is also responsible for parsing and
-                dispatching on them in later requests, it was not seen as an issue.
-            </p>
-
-            <p>
-                In fact, the ugly URLs
-                <em>do</em>
-                cause some problems:
-            </p>
-
-            <ul>
-                <li>
-                    Since all requests are routed through a single servlet (typically mapped to
-                    <code>/app</code>
-                    ), J2EE declarative security, which is path-based, is defeated.
-                </li>
-                <li>
-                    Ugly URLs tend to be longer than friendly URLs, which can make a difference when
-                    creating a WML application.
-                </li>
-                <li>
-                    A single directory may contain all the artifacts (HTML templates,
-                    specifications, properties files) for all the pages in an entire application.
-                    There isn't a sanctioned approach to organizing things into subdirectories.
-                </li>
-                <li>
-                    The reliance on query parameters means that common search engines will only see
-                    a tiny fraction of the application.
-                </li>
-            </ul>
-
-            <p>
-                Starting with 4.0,
-                <em>friendly URLs</em>
-                are integrated directly into framework (in 3.0 an ambitious, but more limited, patch
-                was required).
-            </p>
-
-            <span class="warn">
-                <strong>Warning:</strong>
-                <p>
-                    For security purposes, enabling friendly URLs implies that pages are no longer
-                    accessible via their ugly URL counterpart. This is not the case. If a malevolent
-                    user can either guess - or via cookies identify - your servlet path, they can
-                    construct an ugly URL to a resource that is protected via security and gain access
-                    to the protected resource.
-                </p>
-            </span>
-            
-            <p>Friendly URLs are divided into two concerns:</p>
-
-            <ul>
-                <li>
-                    Converting information normally stored as a query parameter into part of the URL
-                    path.
-                </li>
-                <li>Parsing the path to restore the information previously encoded.</li>
-            </ul>
-
-            <p>
-                For example, the ugly URL
-                <code>/app?page=news/Thread&amp;service=page</code>
-                may be converted into the friendly URL
-                <code>/news/Threads.html</code>
-                . In this case, the
-                <code>page=news/Thread</code>
-                query parameter became the
-                <code>news/Thread</code>
-                portion of the URL, and the
-                <code>service=page</code>
-                query parameter became the
-                <code>.html</code>
-                extension to the URL.
-            </p>
-
-            <subsection name="Understanding Tapestry URLs">
-
-
-                <p>
-                    To understand how to get friendly URLs, you must understand a little about what
-                    information Tapestry packs into URLs.
-                </p>
-
-                <p>
-                    Every request to a Tapestry application is mapped to an
-                    <em>engine service</em>
-                    . An engine service is something like a servlet, embedded within Tapestry. The
-                    <code>service</code>
-                    query parameter is used to select an engine service by name. A number of
-                    services are provided with the framework, the most common of which are:
-                </p>
-
-
-                <dl>
-                    <dt>page</dt>
-                    <dd>Activates and renders a specific page.</dd>
-                    <dt>direct</dt>
-                    <dd>
-                        Used with the
-                        <a href="../components/link/directlink.html">DirectLink</a>
-                        and
-                        <a href="../components/form/form.html">Form</a>
-                        components.
-                    </dd>
-                    <dt>home</dt>
-                    <dd>
-                        Default service used when the service parameter is not specified (such as
-                        when first accessing the application); activates and renders the Home page.
-                    </dd>
-                </dl>
-
-                <p>
-                    Each service is responsible for creating URLs with the correct query parameters.
-                    By default, the URL path is always
-                    <code>/app</code>
-                    and any additional information comes out of the query parameters. The most
-                    common parameters are:
-                </p>
-
-                <dl>
-                    <dt>page</dt>
-                    <dd>The name of a page to activate.</dd>
-                    <dt>service</dt>
-                    <dd>The service responsible for the request.</dd>
-                    <dt>component</dt>
-                    <dd>The nested component id of a component.</dd>
-                    <dt>
-                        sp
-
-                    </dt>
-                    <dd>
-                        Stores listener parameters passed in the URL (used by
-                        <a href="../components/link/directlink.html">DirectLink</a>
-                        and passed into
-                        <a href="listenermethods.html">listener method</a>
-                        s, the "sp" is a holdover from 3.0).
-                    </dd>
-                </dl>
-
-                <p>
-                    Following this scheme, a typical URL might be
-                    <code>
-                        /app?component=border.logout&amp;page=news/Thread&amp;service=direct
-                    </code>
-                    . Yep, that's UGLY.
-                </p>
-
-            </subsection>
-
-            <subsection name="Enabling Friendly URLs">
-
-
-                <p>
-                    To use ordinary ugly URLs, Tapestry requires only a
-                    <a href="configuration.html#configuration.deployment-descriptor">
-                        small amount of configuration in web.xml
-                    </a>
-                    . Enabling friendly URLs requires adding more configuration to web.xml, and to
-                    your
-                    <a href="hivemind.html">HiveMind module deployment descriptor</a>
-                    .
-                </p>
-
-                <p>
-                    Friendly URLs are controlled by
-                    <a
-                            href="../apidocs/org/apache/tapestry/engine/ServiceEncoder.html">
-                        ServiceEncoder
-                    </a>
-                    s. Getting Tapestry to output friendly URLs is a matter of plugging encoders
-                    into the correct pipeline ... this is all done using HiveMind.
-                </p>
-
-                <subsection name="page-service-encoder">
-
-
-                    <p>
-                        The most common type of encoder is the
-                        <code>page-service-encoder</code>
-                        , which encodes the
-                        <code>page</code>
-                        and
-                        <code>service</code>
-                        parameters. In your hivemodule.xml:
-                    </p>
-
-                    <source xml:space="preserve">
-                        &lt;contribution configuration-id="tapestry.url.ServiceEncoders"&gt;
-                        &lt;page-service-encoder id="page" extension="html" service="page"/&gt;
-                        &lt;/contribution&gt;</source>
-
-                    <p>
-                        This contribution to the
-                        <a href="../tapestry-framework/hivedoc/config/tapestry.url.ServiceEncoders.html">
-                            tapestry.url.ServiceEncoders
-                        </a>
-                        configuration point creates a
-                        <a
-                                href="../apidocs/org/apache/tapestry/engine/ServiceEncoder.html">
-                            ServiceEncoder
-                        </a>
-                        that maps the
-                        <code>.html</code>
-                        extension (on the URL path) to the page service. The
-                        <code>id</code>
-                        attribute must be unique for all contributed encoders.
-                    </p>
-
-                    <p>
-                        For Tapestry to recognize the URLs, you must inform the servlet container to
-                        send them to the Tapestry application servlet, by adding a mapping to
-                        web.xml:
-                    </p>
-                    <source xml:space="preserve">
-                        &lt;servlet-mapping&gt;
-                        &lt;servlet-name&gt;myapp&lt;/servlet-name&gt;
-                        &lt;url-pattern&gt;*.html&lt;/url-pattern&gt;
-                        &lt;/servlet-mapping&gt;</source>
-
-
-                    <span class="info">
-                        <strong>Note:</strong>
-                        <p>
-                            This means that even static HTML pages that are part of your web
-                            application will be treated as Tapestry pages; any incoming request that
-                            ends with .html will be routed into the Tapestry application. Page
-                            specifications are optional, so Tapestry will treat the HTML pages are
-                            if they were HTML page templates. If you want to allow ordinary static
-                            content, then you should use another extension such as ".page" or ".tap"
-                            (the choice is arbitrary).
-                        </p>
-                    </span>
-
-                </subsection>
-
-                <subsection name="direct-service-encoder">
-
-
-                    <p>
-                        A specialized encoder used
-                        <em>exclusively</em>
-                        with the direct service. Encodes the page name into the servlet path, then a
-                        comma, then the nested id for the component. One of two extensions is used,
-                        depending on whether the URL is stateful (an HttpSession existed when the
-                        link was rendered), or stateless.
-                    </p>
-
-                    <p>
-                        A typical URL might be:
-                        <code>/admin/Menu,border.link.direct</code>
-                        . This indicates a page name of
-                        <code>admin/Menu</code>
-                        and a component id of
-                        <code>border.link</code>
-                        . By convention, the ".direct" extension is for stateless URLs.
-                    </p>
-
-                    <p>The hivemodule.xml contribution:</p>
-
-                    <source xml:space="preserve">
-                        &lt;contribution configuration-id="tapestry.url.ServiceEncoders"&gt;
-                        &lt;direct-service-encoder id="direct" stateless-extension="direct" stateful-extension="sdirect"/&gt;
-                        &lt;/contribution&gt;
-                    </source>
-
-                    <p>
-                        In addition, the
-                        <code>*.direct</code>
-                        and
-                        <code>*.sdirect</code>
-                        mappings must be added to web.xml:
-                    </p>
-
-                    <source xml:space="preserve">
-                        &lt;servlet-mapping&gt;
-                        &lt;servlet-name&gt;myapp&lt;/servlet-name&gt;
-                        &lt;url-pattern&gt;*.direct&lt;/url-pattern&gt;
-                        &lt;/servlet-mapping&gt;
-
-                        &lt;servlet-mapping&gt;
-                        &lt;servlet-name&gt;myapp&lt;/servlet-name&gt;
-                        &lt;url-pattern&gt;*.sdirect&lt;/url-pattern&gt;
-                        &lt;/servlet-mapping&gt;  </source>
-
-                </subsection>
-
-                <subsection name="asset-encoder">
-
-
-                    <p>
-                        The
-                        <code>asset-encoder</code>
-                        is for use with the asset service. The asset service exposes assets stored
-                        on the classpath (i.e., inside JARs) to the client web browser. The asset
-                        service receives a request with a resource path, and writes back a binary
-                        stream of that resources content.
-                    </p>
-
-                    <p>
-                        In addition, each request includes a
-                        <em>message digest</em>
-                        , a string generated from the bytes of the the resource. This message digest
-                        acts as a
-                        <em>credential</em>
-                        , assuring that only classpath resources explicitly exposed by the
-                        application are accessible by the client (this prevents devious users from
-                        obtaining Java class files, for example). The message digest can only be
-                        computed by the server, using the full content of the actual file.
-                    </p>
-
-                    <p>
-                        To enable friendly URLs for the asset service, add the following to your
-                        hivemodule.xml:
-                    </p>
-
-                    <source xml:space="preserve">
-                        &lt;contribution configuration-id="tapestry.url.ServiceEncoders"&gt;
-                        &lt;asset-encoder id="asset" path="/assets"/&gt;
-                        &lt;/contribution&gt;</source>
-
-                    <p>
-                        This contribution will encode asset URLs using the given path. The provided
-                        path,
-                        <code>/assets</code>
-                        comes first, then the digest string, then the path for the URL. An example
-                        URI would be
-                        <code>
-                            /assets/91ab6d51232df0384663312f405babbe/org/apache/tapestry/contrib/palette/select_right.gif
-                        </code>
-                        .
-                    </p>
-
-                    <p>In addition you must add a mapping to web.xml:</p>
-
-                    <source xml:space="preserve">
-                        &lt;servlet-mapping&gt;
-                        &lt;servlet-name&gt;myapp&lt;/servlet-name&gt;
-                        &lt;url-pattern&gt;/assets/*&lt;/url-pattern&gt;
-                        &lt;/servlet-mapping&gt;</source>
-
-
-                    <p>
-                        If you choose a different folder than
-                        <code>/assets/</code>
-                        then be sure to make corresponding changes in both hivemodule.xml and
-                        web.xml.
-                    </p>
-
-                </subsection>
-
-                <subsection name="extension-encoder">
-
-
-                    <p>
-                        The
-                        <code>extension-encoder</code>
-                        is used to encode just the
-                        <code>service</code>
-                        query parameter. The output URL is the service name with a fixed extension
-                        (typically, ".svc"), i.e.,
-                        <code>/home.svc</code>
-                        or
-                        <code>/restart.svc</code>
-                        .
-                    </p>
-
-                    <p>In your hivemodule.xml:</p>
-
-                    <source xml:space="preserve">
-                        &lt;contribution configuration-id="tapestry.url.ServiceEncoders"&gt;
-                        &lt;extension-encoder id="extension" extension="svc" after="*"/&gt;
-                        &lt;/contribution&gt;</source>
-
-
-                    <p>
-                        The use of the
-                        <code>after</code>
-                        attribute ensures that this encoder is always executed after any other
-                        encoders. Order is important!
-                    </p>
-
-                    <p>For this example, another mapping is required in the web.xml:</p>
-
-                    <source xml:space="preserve">
-                        &lt;servlet-mapping&gt;
-                        &lt;servlet-name&gt;myapp&lt;/servlet-name&gt;
-                        &lt;url-pattern&gt;*.svc&lt;/url-pattern&gt;
-                        &lt;/servlet-mapping&gt;</source>
-                </subsection>
-
-                <subsection name="encoder">
-
-
-                    <p>
-                        Finally, when one of the pre-defined encoders is insufficient, you can
-                        define your own. The &lt;encoder&gt; element allows an arbitrary object that
-                        implements the
-                        <a
-                                href="../apidocs/org/apache/tapestry/engine/ServiceEncoder.html">
-                            ServiceEncoder
-                        </a>
-                        interface to be plugged into the pipeline. The &lt;encoder&gt; element
-                        supports the (required) id attribute, and the optional before and after
-                        attributes.
-                    </p>
-
-                    <p>
-                        From the Virtual Library example, a custom encoder implementation is used as
-                        a special way to reference the ViewBook and ViewPerson pages using the
-                        external service (see the
-                        <a href="../components/link/externallink.html">ExternalLink</a>
-                        component for more information about using this engine service). The end
-                        result is that the URLs for these two pages look like
-                        <code>/vlib/book/2096</code>
-                        rather than
-                        <code>/vlib/ViewBook.external?sp=2096</code>
-                        or
-                        <code>/vlib/app?page=ViewBook&amp;service=external&amp;sp=2096</code>
-                        . Certainly the first option is by far the prettiest.
-                    </p>
-
-                    <p>These encoders are configured in hivemodule.xml as follows:</p>
-
-                    <source xml:space="preserve">
-                        &lt;encoder id="viewbook" before="external" object="instance:ViewPageEncoder,pageName=ViewBook,url=/book"/&gt;
-                        &lt;encoder id="viewperson" before="external" object="instance:ViewPageEncoder,pageName=ViewPerson,url=/person"/&gt;
-                        &lt;page-service-encoder id="external" extension="external" service="external"/&gt;
-                    </source>
-
-                    <p>
-                        The order of the encoders in the pipline is very important, so the use of
-                        the before attribute ensures that the specialized encoders for these two
-                        pages are allowed to operate before the general purpose external service
-                        encoder.
-                    </p>
-
-                    <p>The two special pages are mapped in web.xml using their custom URLs:</p>
-
-                    <source xml:space="preserve">  &lt;servlet-mapping&gt;
-                        &lt;servlet-name&gt;vlib&lt;/servlet-name&gt;
-                        &lt;url-pattern&gt;/book/*&lt;/url-pattern&gt;
-                        &lt;/servlet-mapping&gt;
-                        &lt;servlet-mapping&gt;
-                        &lt;servlet-name&gt;vlib&lt;/servlet-name&gt;
-                        &lt;url-pattern&gt;/person/*&lt;/url-pattern&gt;
-                        &lt;/servlet-mapping&gt;
-                    </source>
-
-                    <p>
-                        The implementation of the ViewPageEncoder class is all about an encode()
-                        method and a matching decode() method.
-                    </p>
-
-                    <p>
-                        The encode() method must check to see if the link being generated is the
-                        right page name and the right service, returning (without doing anything) if
-                        not. The link being constructed is represented as an instance of
-                        <a
-                                href="../apidocs/org/apache/tapestry/engine/ServiceEncoding.html">
-                            ServiceEncoding
-                        </a>
-                        :
-                    </p>
-
-                    <source xml:space="preserve">
-                        public void encode(ServiceEncoding encoding)
-                        {
-                        if (!isExternalService(encoding))
-                        return;
-
-                        String pageName = encoding.getParameterValue(ServiceConstants.PAGE);
-
-                        if (!pageName.equals(_pageName))
-                        return;
-
-                        StringBuilder builder = new StringBuilder(_url);
-
-                        String[] params = encoding.getParameterValues(ServiceConstants.PARAMETER);
-
-                        // params will not be null; in fact, pretty sure it will consist
-                        // of just one element (an integer).
-
-                        for (String param : params)
-                        {
-                        builder.append("/");
-                        builder.append(param);
-                        }
-
-                        encoding.setServletPath(builder.toString());
-
-                        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-                        encoding.setParameterValue(ServiceConstants.PAGE, null);
-                        encoding.setParameterValue(ServiceConstants.PARAMETER, null);
-                        }
-
-                        private boolean isExternalService(ServiceEncoding encoding)
-                        {
-                        String service = encoding.getParameterValue(ServiceConstants.SERVICE);
-
-                        return service.equals(Tapestry.EXTERNAL_SERVICE);
-                        }  </source>
-
-                    <p>
-                        We cheat just a bit here because we know that the service parameters will be
-                        a single numeric string. You can see exactly how encoder works, by building
-                        a new servlet path that encodes information that was stored as query
-                        parameters, the setting those query parameters to null
-                    </p>
-
-                    <p>
-                        The flip side is the decode() method, which works by recognizing the URL
-                        generated by the encode() method and restoring the query parameters by
-                        parsing the URL:
-                    </p>
-
-                    <source xml:space="preserve">  public void decode(ServiceEncoding encoding)
-                        {
-                        String servletPath = encoding.getServletPath();
-
-                        if (!servletPath.equals(_url))
-                        return;
-
-                        String pathInfo = encoding.getPathInfo();
-
-                        String[] params = TapestryUtils.split(pathInfo.substring(1), '/');
-
-                        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.EXTERNAL_SERVICE);
-                        encoding.setParameterValue(ServiceConstants.PAGE, _pageName);
-                        encoding.setParameterValues(ServiceConstants.PARAMETER, params);
-                        } </source>
-
-                </subsection>
-
-                <p>
-                    When constructing this style of encoder, it is important to remember that the
-                    servlet path does not end with a slash, but tthe path info, if non-null, will
-                    start with a slash.
-                </p>
-
-            </subsection>
-
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/hivemind.xml b/tapestry/src/site/xdoc/usersguide/hivemind.xml
deleted file mode 100644
index 1c60f31..0000000
--- a/tapestry/src/site/xdoc/usersguide/hivemind.xml
+++ /dev/null
@@ -1,251 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>HiveMind Integration</title>
-    </properties>
-    <body>
-
-        <section name="HiveMind Integration">
-            <p>
-                Tapestry 4.0 is intimately integrated into the
-                <a href="http://hivemind.apache.org/hivemind1/">HiveMind</a>
-                microkernel. Building a complex system onto a dependency injection microkernel such
-                as HiveMind has many benefits; the code is easier to write, test and maintain.
-                HiveMind's flexible approach makes it easy to provide extension points ... many of
-                the common kinds of customizations in Tapestry 3.0 that required code changes (such
-                as subclassing
-                <a
-                    href="../apidocs/org/apache/tapestry/engine/BaseEngine.html">
-                    BaseEngine
-                </a>
-                ) are now accomplished by providing objects via a HiveMind module descriptor for
-                your application.
-            </p>
-            <p>
-                In fact, you should not think of HiveMind as just Tapestry's infrastructure, but as
-                infrastructure for your application as well. A very succesful design pattern in
-                Tapestry is to keep pages and components very simple, and
-                <em>delegate</em>
-                as much logic as possible out to HiveMind services. Listener methods should ideally
-                do little more than marshall together the correct information and pass it over to a
-                service (this sidesteps most of the issues with testing pages and components, which
-                tend to be abstract).
-            </p>
-
-            <span class="warn">
-                <strong>Warning:</strong>
-                <p>
-                    Tapestry 4.0 is
-                    <em>not compatible with HiveMind 1.0</em>
-                    . Tapestry 4.0 may only be used with HiveMind 1.1. The compatibility issues are
-                    related to the underlying Javassist library; HiveMind 1.0 and Tapestry 3.0 use
-                    one version of the library, HiveMind 1.1 and Tapestry 4.0 use a more recent
-                    version.
-                </p>
-            </span>
-
-            <subsection name="Injecting Services">
-
-                <p>
-                    But how to get access to those services? Tapestry allows you to
-                    <em>inject</em>
-                    your pages and components with HiveMind services (or other objects accessible
-                    from within a HiveMind registry). This is accomplished via the
-                    <a href="spec.html#spec.inject">&lt;inject&gt;</a>
-                    specification element:
-                </p>
-                <source xml:space="preserve">
-&lt;page-specification class=". . ."&gt;
-
-  &lt;inject property="mailSender" object="service:mymodule.MailSender"/&gt;
-  
-&lt;/page-specification&gt; </source>
-                <p>
-                    This would create a new property on your page, mailSender, that would be
-                    connected to a HiveMind service, mymodule.MailSender. The object attribute is an
-                    <em>object reference</em>
-                    , consisting of a prefix ("service:") followed by a
-                    <em>locator</em>
-                    . The prefix identifies how the locator should be interpreted; in this case, as
-                    a full qualified service id. HiveMind itself defines a
-                    <a href="http://hivemind.apache.org/hivemind1/hivemind/ObjectProviders.html">
-                        base set of prefixes
-                    </a>
-                    , to which Tapestry adds the following:
-                </p>
-                <table>
-                    <tr>
-                        <th>Prefix</th>
-                        <th>Description</th>
-                        <th>Example</th>
-                    </tr>
-                    <tr>
-                        <td>app-property</td>
-                        <td>
-                            The locator is the name of a property that is resolved using:
-                            <ul>
-                                <li>
-                                    The application specification's
-                                    <a href="spec.html#spec.meta">&lt;meta&gt;</a>
-                                    properties
-                                </li>
-                                <li>The servlet's &lt;init-parameter&gt; elements</li>
-                                <li>The servlet context's &lt;init-parameter&gt; elements</li>
-                                <li>
-                                    The delegate property source (a
-                                    <a href="spec.html#spec.extension">&lt;extension&gt;</a>
-                                    )
-                                </li>
-                                <li>A HiveMind symbol</li>
-                            </ul>
-                        </td>
-                        <td>app-property:org.apache.tapestry.template-extension</td>
-                    </tr>
-                    <tr>
-                        <td>engine-service</td>
-                        <td>
-                            The locator is the name of an engine service (an instance of
-                            <a
-                                href="../apidocs/org/apache/tapestry/engine/IEngineService.html">
-                                IEngineService
-                            </a>
-                            ).
-                        </td>
-                        <td>engine-service:page</td>
-                    </tr>
-                    <tr>
-                        <td>global-property</td>
-                        <td>
-                            The locator is the name of global property, defined as a servlet
-                            &lt;init-parameter&gt;, a servlet context &lt;init-parameter&gt;, or a
-                            HiveMind symbol.
-                        </td>
-                        <td>global-property:org.apache.tapestry.disable-caching</td>
-                    </tr>
-                    <tr>
-                        <td>infrastructure</td>
-                        <td>
-                            The locator is the name of a property provided by the
-                            tapestry.Infrastructure service; this service provides access to the key
-                            Tapestry services.
-                        </td>
-                        <td>infrastructure:applicationSpecification</td>
-                    </tr>
-
-                </table>
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>More prefixes are forthcoming.</p>
-                </span>
-
-                <p>
-                    You can access the service via the property. You can do this from a
-                    <a href="spec.html#spec.binding">&lt;binding&gt;</a>
-                    element, or from within the template, using an OGNL expression. For example:
-                    <code>ognl:mailSender.sendMail(to, subject)</code>
-                    would read the to and subject properties of the page, and pass them to the
-                    sendMail() method of the mymodule.MailSender service (which has been injected
-                    into the mailSender property).
-                </p>
-
-                <p>From within Java code, you can define an abstract accessor method:</p>
-
-                <source xml:space="preserve">
-public abstract class MyPage extends BasePage
-{
-  public abstract MailSender getMailSender();
-  
-  . . .
-        
-  public void myListener(IRequestCycle cycle)
-  {
-    String to = getTo();
-    String subject = getSubject();
-          
-    getMailSender().sendMail(to, subject);
-          
-     . . .
-  }
-}</source>
-
-
-            </subsection>
-            <!-- hivemind.inject -->
-
-            <subsection name="Bootstrapping the Registry">
-
-                <p>
-                    The
-                    <a
-                        href="../apidocs/org/apache/tapestry/ApplicationServlet.html">
-                        ApplicationServlet
-                    </a>
-                    is responsible for initializing HiveMind's Registry on startup.
-                </p>
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                        The ApplicationServlet takes over all the roles usually supplied by
-                        HiveMind's HiveMindFilter. This includes the initial creation of the
-                        HiveMind Registry (as discussed), but also includes cleaning up thread local
-                        information at the end of each request, and shutting down the Registry when
-                        the servlet is destroyed.
-                    </p>
-                </span>
-                <p>
-                    The ApplicationServlet will create a default registry, consisting of all
-                    META-INF/hivemodule.xml files found on the servlet classpath. This is how the
-                    base HiveMind and Tapestry module descriptors are loaded. You may package module
-                    deployment descriptors inside libraries or even in your application WAR.
-                </p>
-                <p>In addition, two other descriptors will be parsed if they exist:</p>
-                <ul>
-                    <li>
-                        /WEB-INF/
-                        <em>applicationId</em>
-                        /hivemodule.xml
-                    </li>
-                    <li>/WEB-INF/hivemodule.xml</li>
-                </ul>
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                        The descriptor will not be recognized if it is located in META-INF/ in the
-                        context root of a web application however it will if it is under the
-                        WEB-INF/ locations. The META-INF/ location is specific to libraries.
-                    </p>
-                </span>
-                <p>
-                    Both of these files exist in the web application context; the
-                    <em>applicationId</em>
-                    is the name of the application servlet, as given in web.xml deployment
-                    descriptor (this is only useful in the very rare case that you package more than
-                    one Tapestry application in a single web application).
-                </p>
-                <p>
-                    By subclassing ApplicationServlet and overriding the
-                    <code>constructRegistry()</code>
-                    method, you can easily extend these rules, loading additional descriptors from
-                    arbitrary locations.
-                </p>
-            </subsection>
-            <!-- hivemind.bootstrap -->
-
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/index.xml b/tapestry/src/site/xdoc/usersguide/index.xml
deleted file mode 100644
index a816798..0000000
--- a/tapestry/src/site/xdoc/usersguide/index.xml
+++ /dev/null
@@ -1,391 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-    "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-    <properties>
-        <title>Introduction</title>
-    </properties>
-    <body>
-        
-        <section name="Introduction" >
-            <p>
-                Tapestry is a component-based web application framework, written in Java. Tapestry
-                is more than a simple templating system; Tapestry builds on the Java Servlet API to
-                build a platform for creating dynamic, interactive web sites. More than just another
-                templating language, Tapestry is a real framework for building complex applications
-                from simple, reusable components. Tapestry offloads much of the error-prone work in
-                creating web applications into the framework itself, taking over mundane tasks such
-                as dispatching incoming requests, constructing and interpretting URLs encoded with
-                information, handling localization and internationalization and much more besides.
-            </p>
-
-            <p>
-                The "mantra" of Tapestry is "objects, methods and properties". That is, rather than
-                have developers concerned about the paraphanlia of the Servlet API: requests,
-                responses, sessions, attributes, parameters, URLs and so on, Tapestry focuses the
-                developer on objects (including Tapestry pages and components, but also including
-                the domain objects of the application), methods on those objects, and JavaBeans
-                properties of those objects. That is, in a Tapestry application, the actions of the
-                user (clicking links and submitting forms) results in changes to object properties
-                combined with the invocation of user-supplied methods (containing application
-                logic). Tapestry takes care of the plumbing necessary to connect these user actions
-                with the objects.
-            </p>
-            
-            <p>
-                This can take some getting used to. You don't write servlets in Tapestry, you write
-                <a href="listenermethods.html">listener method</a>
-                s. You don't build URLs to servlets either -- you use an existing component (such as
-                <a href="../components/link/directlink.html">DirectLink</a>
-                ) and configure its
-                <code>listener</code>
-                parameter to invoke your listener method. What does a listener method do? It
-                interacts with backend systems (often, stateless session EJBs) or does other
-                bookkeeping related to the request and selects a new page to provide a response to
-                the user ... basically, the core code at the center of a servlet. In Tapestry, you
-                write much less code because all the boring, mechanical plumbing (creating URLs,
-                dispatching incoming requests, managing server-side state, and so forth) is the
-                responsibility of the framework.
-            </p>
-
-            <p>
-                This is not to say the Servlet API is inaccessible; it is simply not
-                <em>relevant</em>
-                to a typical Tapestry user.
-            </p>
-
-            <p>
-                This document describes many of the internals of Tapestry. It is not a tutorial,
-                that is available as a separate document. Instead, this is a guide to some of the
-                internals of Tapestry, and is intended for experienced developers who wish to
-                leverage Tapestry fully.
-            </p>
-
-            <p>
-                Tapestry is currently in release 4.0, and has come a long way in the last couple of
-                years. Tapestry's focus is still on generating dynamic HTML pages, although there's
-                plenty of support for XHTML, WML and other types of markup as well.
-            </p>
-
-            <p>
-                Nearly all of Tapestry's API is described in terms of interfaces, with default
-                implementations supplied. By substituting new objects with the correct interfaces,
-                the behavior of the framework can be changed significantly. A common example is to
-                override where page and component specifications are stored (perhaps in a database).
-            </p>
-
-            <p>
-                Finally, Tapestry boasts extremely complete JavaDoc API documentation. This document
-                exists to supplement that documentation, to fill in gaps that may not be obvious.
-                The JavaDoc is often the best reference.
-            </p>
-
-            <subsection name="An overview of Tapestry" >
-                <p>
-                    Perhaps the hardest part of understanding Tapestry is the fact that it is
-                    <em>component-centric</em>
-                    not
-                    <em>operation-centric</em>
-                    . Most web technologies (
-                    <a href="http://struts.apache.org/">Struts</a>
-                    , servlets, PHP, etc.) are operation-centric. You create servlets (or Actions,
-                    or what have you) that are invoked when a user clicks a link or submits a form.
-                    You are responsible for selecting an appropriate URL, and the name and type of
-                    any query parameters, so that you can pass along the information you need in the
-                    URL.
-                </p>
-                
-                <p>
-                    You are also responsible for connecting your output pages (whether they are
-                    JSPs,
-                    <a href="http://jakarta.apache.org/velocity/">Velocity</a>
-                    templates, or some other form of templating technology) to those operations.
-                    This requires you to construct those URLs and get them into the
-                    <code>href</code>
-                    attribute of your &lt;a&gt; tag, or into the
-                    <code>action</code>
-                    attribute of your &lt;form&gt; tag.
-                </p>
-
-                <p>
-                    Everything is different inside Tapestry. Tapestry applications consist of pages;
-                    pages are constructed from smaller components. Components may themselves be
-                    constructed from other components. Every page has a unique name, and every
-                    component within a page has its own unique id ... this is a
-                    <em>component object model</em>
-                    . Effectively, every component has an
-                    <em>address</em>
-                    that can easily be incorporated into a URL.
-                </p>
-
-                <p>
-                    In practical terms, your don't write a servlet for the
-                    <code>add-item-to-shopping-cart</code>
-                    operation. In fact, you don't even write an
-                    <code>add-item-to-shopping-cart</code>
-                    component. What you do is take an existing component, such as
-                    <a href="../components/link/directlink.html">DirectLink</a>
-                    , and configure it. When the component renders, it will create a callback URL.
-                    When you click that link, the callback URL (which includes the name of the page
-                    and the id of the component within the page) will invoke a method on the
-                    component ... and
-                    <em>that</em>
-                    method invokes your application-specific
-                    <em>listener method</em>
-                    .
-                </p>
-
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                    Listener methods in Tapestry are very similar in intent to
-                    <em>delegates</em>
-                    in C#. In both cases, a method of a particular object instance is represented as
-                    an object. Calling this a "listener" or a "listener method" is a bit of a naming
-                    snafu; it should be called a "delegate" and a "delegate method" but the existing
-                    naming is too deeply entrenched to change any time soon.
-                    </p>
-                </span>
-
-                <p>
-                    You supply just the listener method ... not an entire servlet. Tapestry takes
-                    care that your listener method is invoked at the right time, under the right
-                    conditions. You don't have to think about how to build that URL, what data goes
-                    in the URL, or how to hook it up to your application-specific code--that's all
-                    handled by the framework.
-                </p>
-
-                <img alt="Tapestry request dispatch (high level)"
-                    src="../images/UsersGuide/high-level-component-request.png" />
-
-            </subsection><!-- intro.overview -->
-
-            <subsection name="Pages and components">
-
-
-                <p>
-                    Tapestry divides an application into a set of pages. Each page is assembled from
-                    Tapestry components. Components themselves may be assembled from other
-                    components ... there's no artificial depth limit.
-                </p>
-
-
-                <p>
-                    Tapestry pages are themselves components, but are components with some special
-                    responsibilities.
-                </p>
-
-                <p>
-                    All Tapestry components can be containers of other components. Tapestry pages,
-                    and most user-defined components, have a template, a special HTML file that
-                    defines the static and dynamic portions of the component, with markers to
-                    indicate where embedded components are active. Components do not have to have a
-                    template, most of the components provided with Tapestry generate their portion
-                    of response in code, not using a template.
-                </p>
-
-                <p>
-                    Components may have one or more named parameters which may be set (or, more
-                    correctly, "bound") by the page or component which contains them. Unlike Java
-                    method parameters, Tapestry component parameters may be bidirectional; a
-                    component may read a parameter to obtain a value, or write a parameter to set a
-                    value.
-                </p>
-
-                <p>
-                    Most components are concerned only with generating HTML. A certain subset of
-                    components deal with the flip-side of requests; handling of incoming requests.
-                    Link classes, such as
-                    <a href="../components/link/pagelink.html">PageLink</a>
-                   and  
-                    <a href="../components/link/directlink.html">DirectLink</a>
-                    create clickable links in the rendered page and are involved in dispatching to
-                    user-supplied code when such a link is triggered by clicking it.
-                </p>
-
-                <p>
-                    Other components,
-                    <a href="../components/form/form.html">Form</a>
-                    , and the form control components (
-                    <a href="../components/form/textfield.html">TextField</a>
-                    ,
-                    <a href="../components/form/propertyselection.html">PropertySelection</a>
-                    ,
-                    <a href="../components/form/checkbox.html">Checkbox</a>
-                    , etc.), facilitate HTML forms. When such components render, they read
-                    properties from application objects so as to provide default values. When the
-                    forms are submitted, the components within the form read HTTP query parameters,
-                    convert the values to appropriate types and then update properties of
-                    application objects.
-                </p>
-
-            </subsection><!-- intro.pages-and-components -->
-
-            <subsection name="Engines, services and friends">
-
-
-                <p>Tapestry has evolved its own jargon over time.</p>
-
-                <p>
-                    The Engine is a central object, it occupies the same semantic space in Tapestry
-                    that the HttpSession does in the Servlet API. The Engine is ultimately
-                    responsible for storing the persistent state of the application (properties that
-                    exist from one request to the next), and this is accomplished by storing the
-                    Engine into the HttpSession. This document will largely discuss the
-                    <em>default</em>
-                    implementation, with notes about how the default implementation may be extended
-                    or overriden, where appropriate.
-                </p>
-
-                <p>
-                    Engine services are the bridge between servlets and URLs and the rest of
-                    Tapestry. Engine services are responsible for encoding URLs, providing query
-                    parameters that identify, to the framework, the exact operation that should
-                    occur when the generated URL is triggered (by the end user clicking a link or
-                    submitting a form). Services are also responsible for dispatching those incoming
-                    requests. This encapsulation of URL encoding and decoding inside a single object
-                    is key to how Tapestry components can flexibily operate without concern for how
-                    they are contained and on which page ... the services take into account page and
-                    location when formulating URLs.
-                </p>
-
-                <p>
-                    The
-                    <a href="state.html#state.visit">Visit object</a>
-                    is an application-defined object that acts as a focal point for all server-side
-                    state (not associated with any single page). Individual applications define for
-                    themselves the class of the Visit object. The Visit is stored as a property of
-                    the Engine, and so is ultimately stored persistently in the HttpSession.
-                </p>
-
-                <p>
-                    The
-                    <a href="state.html#state.global">Global object</a>
-                    is also application-specific. It stores information global to the entire
-                    application, independent of any particular user or session. A common use for the
-                    Global object is to centralize logic that performs JNDI lookups of session EJBs.
-                </p>
-
-            </subsection><!-- intro.engine-service-visit -->
-
-            <subsection name="Object Graph Navigation Language">
-
-
-                <p>
-                    Tapestry is tightly integrated with
-                    <a href="http://www.ognl.org">OGNL</a>
-                    , the Object Graph Navigation Language. OGNL is a Java expression language,
-                    which is used to peek into objects and read or update their properties. OGNL is
-                    similar to, and must more powerful than, the expression language built into the
-                    JSP 2.0 standard tag library. OGNL not only support property access, it can
-                    include mathematical expressions and method invocations. It can reference static
-                    fields of public classes. It can create new objects, including lists and maps.
-                </p>
-
-                <p>
-                    The simplest OGNL expressions are property names, such as
-                    <code>foo</code>
-                    , which is equivalent to method
-                    <code>getFoo()</code>
-                    (or
-                    <code>setFoo()</code>
-                    if the expression is being used to update a property). The "Navigation" part
-                    comes into play when the expression is a series of property names, such as
-                    <code>foo.bar.baz</code>
-                    , which is equivalent to
-                    <code>getFoo().getBar().getBaz()</code>
-                    ... though care must always be taken that the intermediate properties (
-                    <code>foo</code>
-                    and
-                    <code>bar</code>
-                    in this example) are not null.
-                </p>
-
-                <p>
-                    OGNL is primarily used to allow two different objects (such as a page and a
-                    component contained by that page) to share information.
-                </p>
-
-            </subsection><!-- intro.ognl -->
-
-            <subsection name="Tapestry Past, Tapestry Future">
-
-
-                <p>
-                    Since its initial introduction in early 2000, Tapestry has been in a constant
-                    state of evolution, driven by feedback from its community. Tapestry took a big
-                    leap forward in 2003. During that period, the Tapestry project moved from
-                    <a href="http://sf.net">SourceForge</a>
-                    to
-                    <a href="http://jakarta.apache.org">Jakarta</a>
-                    . This was also the transition from release 2.3 to release 3.0 (the final 3.0
-                    release occuring in April 2004).
-                </p>
-
-                <p>
-                    Tapestry 3.0 was designed to radically change how Tapestry applications were
-                    created. It introduced a kind of RAD (Rapid Application Development) support in
-                    the form of
-                    <a href="template.html#template.components">implicit components</a>
-                    ... a way of specifying a component's type and parameters in place in the HTML
-                    template, which is much more familiar to JSP and PHP developers.
-                </p>
-
-                <p>
-                    Tapestry 3.0 also saw the introduction of
-                    <em>line precise error reporting</em>
-                    , in which runtime errors are related back to relevant lines in the HTML
-                    template or specification file. Further, 3.0 introduced the
-                    <a href="spec.html#spec.property">&lt;property&gt;</a>
-                    element, and the
-                    <em>bytecode enhancement</em>
-                    technology behind it.
-                </p>
-
-                <p>
-                    Tapestry 4.0 represents an even more radical leap beyond 3.0 by introducing a
-                    new, sophisticated infrastructure on top of the
-                    <a href="http://hivemind.apache.org/hivemind1/">HiveMind</a>
-                    microkernel. This new backbone provides the support necessary to meet the needs
-                    of Tapestry's much larger community ... including support for
-                    <em>prettier</em>
-                    URLs, integration of Tapestry and the Java Portlet API, and modularization of
-                    applications (allowing the use of folders, and thus, J2EE declarative security).
-                    In addition, a more sophisticated approach to implementing connected parameter
-                    properties has been introduced in release 4.0, and more flexibility for storing
-                    session-specific state as HTTP query parameters has been provided. For JDK 1.5
-                    users, the XML page and component specifications can now be sidelined in favor
-                    of Java annotations.
-                </p>
-
-                <p>
-                    A further future direction, in the Tapestry 5.0 timeframe (the far future), is
-                    to rethink the component object model such that the classes
-                    <em>you</em>
-                    write do not sub-class Tapestry base classes. Page and component Java classes
-                    will be simple POJOs (Plain Old Java Objects) and will have any Tapestry
-                    dependencies
-                    <em>injected</em>
-                    into them.
-                </p>
-
-            </subsection>
-        
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/injection.xml b/tapestry/src/site/xdoc/usersguide/injection.xml
deleted file mode 100644
index 1ddffc6..0000000
--- a/tapestry/src/site/xdoc/usersguide/injection.xml
+++ /dev/null
@@ -1,294 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Property Injection</title>
-    </properties>
-    <body>
-
-        <section name="Property Injection">
-            <p>
-                Tapestry 4.0 introduces an entirely new concept into Tapestry application
-                development: property injection. By use of the
-                <a href="spec.html#spec.inject">&lt;inject&gt;</a>
-                element in page and component specifications, it is possible to add new properties
-                to pages or components, using the
-                <a href="spec.html#spec.inject">&lt;inject&gt;</a>
-                element in the page or component specification.
-            </p>
-
-            <p>
-                The new properties that are created often are more than just wrappers around an
-                instance variable; in many cases they create complex synthetic accessor methods.
-            </p>
-
-            <p>
-                There are different
-                <em>types</em>
-                of injected properties, defined by the type attribute of the
-                <a href="spec.html#spec.inject">&lt;inject&gt;</a>
-                element. The type determines how the object attribute is interpreted, and otherwise
-                guides how code for the property is generated at runtime. The default type is
-                <strong>object</strong>
-                .
-            </p>
-
-            <p>
-                Like so much in Tapestry, this list is open to extension. The
-                <a href="../tapestry-framework/hivedoc/config/tapestry.enhance.InjectWorkers.html">
-                    tapestry.enhance.InjectWorkers
-                </a>
-                configuration point defines the available types of injection. The
-                <a href="../tapestry-framework/hivedoc/config/tapestry.enhance.EnhancementWorkers.html">
-                    tapestry.enhance.EnhancementWorkers
-                </a>
-                configuration point defines an entire pipeline used to perform runtime code
-                enhancement (of which property injection is a critical phase).
-            </p>
-
-            <p>
-                In addition, many other elements support a property attribute; this is the name of a
-                property to create that holds the corresponding object. For example, the
-                <a href="spec.html#spec.bean">&lt;bean&gt;</a>
-                element's property allows access to a managed bean; the bean is
-                <em>still</em>
-                created on first reference. Components and assets may also be injected in this way.
-            </p>
-
-
-            <subsection name="meta injection">
-
-
-                <p>
-                    The meta injection type provides a page or component with access to its meta
-                    data. Meta data for a component is primarily provided as
-                    <a href="spec.html#spec.meta">&lt;meta&gt;</a>
-                    tags in the component or page specification.
-                </p>
-
-                <p>
-                    However, meta-data may be specified elsewhere; the search starts in the
-                    component (or page) specification, but if not defined there, the search
-                    continues inside the component's namespace (its application or library
-                    specification). If no value is found there, the search continues in the list of
-                    application property sources. In other words, there are multiple places to set
-                    defaults, which can be overridden.
-                </p>
-
-                <p>
-                    Beyond wide searching, the other added value for the meta property injection is
-                    <em>type coercion</em>
-                    . Meta data always starts as simple strings, but your properties may be of any
-                    type. Tapestry will attempt to coerce the string value to your desired type.
-                </p>
-
-                <p>
-                    For example, perhaps you want to use meta-data to control the number of items
-                    from some large list that is displayed on a single page. You can define the
-                    meta-data, and the property in your page or component specification:
-                </p>
-
-                <source xml:space="preserve">
-
-  &lt;meta key="page.size" value="15"/&gt;
-  
-  &lt;inject property="pageSize" type="meta" object="page.size"/&gt;
-
-</source>
-
-                <p>You can access the this meta data value in code by defining a property:</p>
-
-                <source xml:space="preserve">
-  
-  public abstract int getPageSize();
-  
-</source>
-
-            </subsection><!-- injection.meta -->
-
-            <subsection name="object injection">
-
-
-                <p>
-                    The most common kind of injection, because "object" is the default injection
-                    type. The object is a HiveMind object. The
-                    <a href="hivemind.html">HiveMind integration documentation</a>
-                    covers this type of injection in more detail.
-                </p>
-
-                <p>
-
-                </p>
-
-            </subsection><!-- injection.object -->
-
-            <subsection name="page injection">
-
-
-                <p>
-                    Page injection allows a page to be injected into another page (or component).
-                    Beneather the covers, the logic simply accesses the
-                    <a
-                        href="../apidocs/org/apache/tapestry/IRequestCycle.html">
-                        IRequestCycle
-                    </a>
-                    object and obtains the page from it, and adds a cast if necessary.
-                </p>
-
-                <p>
-                    The property type can be Object,
-                    <a href="../apidocs/org/apache/tapestry/IPage.html">IPage</a>
-                    , or any type assignable to
-                    <a href="../apidocs/org/apache/tapestry/IPage.html">IPage</a>
-                    .
-                </p>
-
-                <p>
-                    This is often used with
-                    <a href="listenermethods.html">listener method</a>
-                    s. For example:
-                </p>
-
-                <source xml:space="preserve">
-  &lt;inject property="detailsPage" type="page" object="Details"/&gt;
-</source>
-
-                <source xml:space="preserve">
-  public abstract Details getDetailsPage();
-  
-  public IPage doShowDetails(long productId)
-  {
-    Details details = getDetailsPage();
-    
-    details.setProductId(productId);
-    
-    return details;
-  }
-</source>
-
-                <p>
-                    This is a common idiom: getting a page and casting it to its real type, invoking
-                    methods upon it, then returning it (from the listener method), so that it is
-                    activated to render the response.
-                </p>
-
-            </subsection><!-- injection.page -->
-
-            <subsection name="script injection">
-
-
-                <p>
-                    Tapestry includes extensive support for creating client-side JavaScript. At the
-                    core of this are specialized script templates. These templates must be parsed
-                    into
-                    <a href="../apidocs/org/apache/tapestry/IScript.html">
-                        IScript
-                    </a>
-                    objects in order to be used. The script injection type hides the details of this
-                    process, and simply represents the parsed script template as a read-only
-                    property.
-                </p>
-
-                <p>
-                    The object is the relative path to the script template; it is evaluated relative
-                    to the page or component specification (typically, it is another file in the
-                    same folder).
-                </p>
-
-                <p>This example is from the Palette component:</p>
-
-                <source xml:space="preserve">
-  &lt;inject property="script" type="script" object="Palette.script"/&gt;
-</source>
-
-                <p>The script can then be executed from the Java code:</p>
-
-                <source xml:space="preserve">
-  public abstract IScript getScript();
-
-  . . .   
-  
-  PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, this);
-  
-  getScript().execute(cycle, pageRenderSupport, _symbols);
-</source>
-
-            </subsection><!-- injection.script -->
-
-            <subsection name="state injection">
-
-
-                <p>
-                    This style of injection allows easy access to
-                    <a href="state.html#state.aso">Application State Objects</a>
-                    , objects which store various kinds of global information (information needed on
-                    many pages).
-                </p>
-
-            </subsection>
-
-            <subsection name="state-flag injection">
-
-
-                <p>
-                    Using the
-                    <a href="#injection.state">state</a>
-                    injection can force the creation of an application state object; this type of
-                    injection will create a
-                    <em>read only</em>
-                    boolean property that indicates
-                    <em>if</em>
-                    an application state object already exists.
-                </p>
-
-                <p>
-                    This is used to
-                    <em>prevent</em>
-                    the creation of an application state object until it is absolutely needed.
-                </p>
-
-                <p>
-                    For example; in a situtation where the user may or may not be logged in, you
-                    would inject a state flag and the state in two properties and check the state
-                    flag
-                    <em>first</em>
-                    :
-                </p>
-
-                <source xml:space="preserve">
-// &lt;inject&gt; type state-flag in the XML
-public abstract boolean getUserIdentityExists();
-
-// &lt;inject&gt; type state in the XML
-public abstract WizardState  getUserIdentity();
-  
-public void doOperation()
-{
-  if (getUserIdentityExists() &amp;&amp; getUserIdentity().isLoggedIn())
-  {
-    . . .
-  }
-  else
-  {
-    . . .
-  }
-}
-</source>
-            </subsection><!-- injection.state-flag -->
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/listenermethods.xml b/tapestry/src/site/xdoc/usersguide/listenermethods.xml
deleted file mode 100644
index a6272b6..0000000
--- a/tapestry/src/site/xdoc/usersguide/listenermethods.xml
+++ /dev/null
@@ -1,315 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Listener Methods</title>
-    </properties>
-    <body>
-        
-        <section name="Listener Methods" >
-        <p>
-            Listener methods are the main approach by which you add application-specific behavior to
-            your application.
-        </p>
-
-        <p>
-            Listener methods are a kind of call back; they are triggered when a form is submitted or
-            a link is clicked. The listener methods exist within your page and component classes.
-            Components such as
-            <a href="../components/link/directlink.html">DirectLink</a>
-            and
-            <a href="../components/form/form.html">Form</a>
-            take a listener parameter, and you can use a listener:
-            <a href="bindings.html">binding reference</a>
-            to use a listener method in your class as the listener. As of Tapestry 4.1.3, components
-	        that require a listener (XTile, DirectLink, InvokeListener, Suggest) no longer need
-	        an explicit listener provided for their "listener" parameter as long as a listener method
-	        exists on the component whose name is composed of the capitalized component id, prefixed
-	        by "do". For example, jwcid="clear@DirectLink" would expect a listener method called
-	        doClear() if the listener parameter is not used.
-        </p>
-
-        <span class="info">
-            <strong>Note:</strong>
-            <p>
-            The parameter type for listeners is
-            <a href="../apidocs/org/apache/tapestry/IActionListener.html">
-                IActionListener
-            </a>
-            . Internally, Tapestry creates an object that implements that interface and uses
-            reflection to invoke the corrsponding method on your page or component instance. On rare
-            occasions, it is useful to create objects that implement the interface directly. For
-            pages, components and the engine, there is a listeners property whose keys are the names
-            of listener methods, but the listener: binding reference is easier to use.
-            </p>
-        </span>
-
-        <p>
-            A listener method is always a public instance method. It may take parameters, or not,
-            and may return void or certain other types.
-        </p>
-        
-        <subsection name="Return Type">
-
-            
-            <p>
-                A listener method may return void, may return a string, or may return an object that
-                implements
-                <a href="../apidocs/org/apache/tapestry/IPage.html">IPage</a>
-                . The last two options are used to change the
-                <em>active page</em>
-                , the page which will render the response. Returning null will not change the active
-                page (it defaults to the page containing the link or form components which invoked
-                the listener method).
-            </p>
-
-            <dl>
-                <dt>void</dt>
-                <dd>The listener method does not change the active page.</dd>
-
-                <dt>java.lang.String</dt>
-                <dd>
-                    The listener method may return the name of a page to activate (and render the
-                    response). Returning null does not change the active page.
-                </dd>
-                
-                <dt>
-                    <a href="../apidocs/org/apache/tapestry/IPage.html">IPage</a>
-                </dt>
-                <dd>
-                    A non-null
-                    <a href="../apidocs/org/apache/tapestry/IPage.html">IPage</a>
-                    will activate that page instance. The page object may be obtained from the
-                    request cycle, or via
-                    <a href="injection.html#injection.page">page injection</a>
-                    .
-                </dd>
-
-                <dt>
-                    <a href="../apidocs/org/apache/tapestry/engine/ILink.html">
-                        ILink
-                    </a>
-                </dt>
-                <dd>
-                    Returning a non-null
-                    <a href="../apidocs/org/apache/tapestry/engine/ILink.html">
-                        ILink
-                    </a>
-                    will send a redirect to the client for the URL associated with the link. This is
-                    commonly used to perform a
-                    <em>redirect-after-post</em>
-                    .
-                </dd>
-            </dl>
-
-        </subsection><!-- listenermethods.return -->
-
-
-
-        <subsection name="Listener Method Parameters">
-
-
-            <p>
-                When using the
-                <a href="../components/link/directlink.html">DirectLink</a>
-                component, you may specify additional
-                <em>listener parameters</em>
-                . The listener parameters are encoded into the URL and will be available in a later
-                request, when the listener is triggered.
-            </p>
-
-            <span class="info">
-                <strong>Note:</strong>
-                <p>
-                In Tapestry 3.0 and earlier,
-                <em>listener parameters</em>
-                were known as
-                <em>service parameters</em>
-                . In addition, listener methods had to be in a very fixed form, taking exactly one
-                parameter of type
-                <a href="../apidocs/org/apache/tapestry/IRequestCycle.html">
-                    IRequestCycle
-                </a>
-                and returning void.
-                </p>
-            </span>
-
-            <p>The listener can gain access these parameters in one of two ways:</p>
-
-            <ul>
-                <li>
-                    By invoking the
-                    <code>getListenerParameters()</code>
-                    method of
-                    <a
-                        href="../apidocs/org/apache/tapestry/IRequestCycle.html">
-                        IRequestCycle
-                    </a>
-                </li>
-                <li>
-                    By declaring a method parameter for
-                    <em>each</em>
-                    listener parameter (in order)
-                </li>
-            </ul>
-
-            <p>
-                Using the second method is usually the best way. The link parameter values are
-                <em>not</em>
-                simply converted into strings, they are encoded as strings but maintain their type;
-                therefore, the listener method parameters must be of the correct type.
-            </p>
-
-            <p>
-                For example, suppose that the link encoded a String objectId and an integer index.
-                The component in the template names the listener method, and the two parameters are
-                passed into the DirectLink as an OGNL list expression:
-            </p>
-
-            <source xml:space="preserve">
-&lt;a jwcid="@DirectLink" listener="listener:doClick" parameters="ognl:{ objectId, index }"&gt; . . . &lt;/a&gt;
-</source>
-
-            <p>In the Java class, the listener method might look like:</p>
-
-            <source xml:space="preserve">
-public void doClick(String objectId, int index)
-{
-  . . .
-}
-</source>
-
-            <p>Alternately, the listener method could look like:</p>
-
-            <source xml:space="preserve">
-public void doClick(IRequestCycle cycle)
-{
-  Object[] parameters = cycle.getListenerParameters();
-  String objectId = (String)parameters[0];
-  int index = ((Integer)parameters[1]).intValue();
-  
-  . . .
-}
-</source>
-
-            <p>
-                This second case is maintained in Tapestry 4.0 mostly for backwards compatibility,
-                or to handle the case where a single listener method must handle an indeterminate
-                number of listener parameters.
-            </p>
-
-            <p>
-                In fact, Tapestry does a search for the most appropriate method, given the number of
-                listener parameters:
-            </p>
-
-            <ul>
-                <li>
-                    public
-                    <em>type</em>
-                    <em>method</em>
-                    (
-                    <em>parameters</em>
-                    )
-                </li>
-                <li>
-                    public
-                    <em>type</em>
-                    <em>method</em>
-                    (IRequestCycle cycle,
-                    <em>parameters</em>
-                    )
-                </li>
-                <li>
-                    public
-                    <em>type</em>
-                    <em>method</em>
-                    ()
-                </li>
-                <li>
-                    public
-                    <em>type</em>
-                    <em>method</em>
-                    (IRequestCycle cycle)
-                </li>
-            </ul>
-
-            <p>
-                Tapestry 3.0 and earlier only accepted the final variation (and it had to return
-                void). Don't get too tricky with multiple overloadings of the method; Tapestry
-                doesn't attempt to match the listener parameter types to the method parameter types
-                (it works just by comparing the
-                <em>number</em>
-                of parameters). However, you can count on Java boxing and autoboxing the parameter
-                values (so you can use
-                <code>int</code>
-                and
-                <code>java.lang.Integer</code>
-                interchangeably).
-            </p>
-
-        </subsection><!-- listenermethods.parameters -->
-
-        <subsection name="Invoking Listener Methods">
-
-
-
-            <p>
-                When creating components that accept a listener as a parameter, you should not
-                invoke the
-                <a href="../apidocs/org/apache/tapestry/IActionListener.html">
-                    IActionListener
-                </a>
-                directly, instead, you should inject the infrastructure:ListenerInvoker service into
-                your component, and have it invoke the listener. The ListenerInvoker is extensible,
-                and application logic may depend on ListenerInvoker's behavior (commonly, it is used
-                to mark transactions boundaries).
-            </p>
-
-            <p>In your component specification:</p>
-
-            <source xml:space="preserve">
-  &lt;parameter name="listener" required="yes"/&gt;
-
-  &lt;inject property="listenerInvoker" object="infrastructure:listenerInvoker"/&gt;
-</source>
-
-            <p>In your source code:</p>
-
-            <source xml:space="preserve">
-  public abstract IActionListener getListener();
-  
-  public abstract ListenerInvoker getListenerInvoker();
-  
-  . . .
-  
-  IActionListener listener = getListener();
-  ListenerInvoker invoker = getListenerInvoker();
-  
-  invoker.invokeListener(listener, this, cycle);
-</source>
-
-            <p>
-                It is acceptible to pass null as the listener; this saves you the necessity of
-                checking for null when the listener is an optional parameter.
-            </p>
-
-        </subsection><!-- listenermethods.invoking -->
-        
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/localization.xml b/tapestry/src/site/xdoc/usersguide/localization.xml
deleted file mode 100644
index 92b3eec..0000000
--- a/tapestry/src/site/xdoc/usersguide/localization.xml
+++ /dev/null
@@ -1,480 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Localization</title>
-    </properties>
-    <body>
-        <section name="Localization">
-            <p>
-                Proper localization is a pervasive aspect of web application development. Supporting
-                users from different countries, with different languages, can be a tricky
-                proposition ... it is more than just text that must be localized, but more subtle
-                aspects of the application such as date and currency formats. It is also more than
-                text ... in some cases, a localized application will want to change images or even
-                color schemes.
-            </p>
-            <p>Localization support in Tapestry is likewise pervasive.</p>
-            <subsection name="Component Message Catalogs">
-
-                <p>
-                    The most fundamental aspect of localization in Tapestry are component message
-                    catalogs (remember that pages are components too). A message catalog is a
-                    mapping from a logical key (that may appear in Java code or in OGNL expressions)
-                    to a literal string. Tapestry message catalogs are similar to Java's
-                    ResourceBundle class, except there is more flexibility in the character set of
-                    the files, and the location of the files.
-                </p>
-                <p>
-                    Each component
-                    <em>may</em>
-                    have a message catalog, consisting of a set of localized message properties
-                    files.
-                </p>
-                <p>
-                    These files are stored with the page or component specification file. They are
-                    named the same as the specification file, but with a different extension
-                    (".properties" instead of ".jwc" or ".page").
-                </p>
-                <p>
-                    In addition, this is a
-                    <em>set</em>
-                    of files; a locale string may be inserted just before the extension. For
-                    example,
-                    <code>WEB-INF/Home_fr.properties</code>
-                    to contain the French language localization of the keys.
-                </p>
-                <p>
-                    As with Java's ResourceBundle, resolution of a key to a message starts with the
-                    most
-                    <em>specific</em>
-                    properties file. Any key not found there will be searched for in less specific
-                    files. For example, the search path could be
-                    <code>Home_fr_BE.properties</code>
-                    ,
-                    <code>Home_fr.properties</code>
-                    ,
-                    <code>Home.properties</code>
-                    .
-                </p>
-                <p>
-                    If a properties file does not exist, that's perfectly ok, the search will
-                    continue.
-                </p>
-                <p>
-                    When a key can not be found even in the most general properties file, a search
-                    occurs in the
-                    <a href="#localization.namespace">namespace</a>
-                    . In this way, very common strings can be stored and localized once, and used
-                    throughout a library or application.
-                </p>
-                <p>
-                    We'll describe how to use the message catalog shortly, but first some notes on
-                    how the message catalogs are read.
-                </p>
-                <subsection name="Properties file encoding">
-
-                    <p>
-                        For Java's ResourceBundle, the properties files must be in UTF-8 character
-                        set. This can be problematic, as in non-western languages it is necessary to
-                        use Java's native2ascii tool to convert from non-native files into an ASCII
-                        encoding of UTF-8.
-                    </p>
-                    <p>
-                        Tapestry can read properties files in alternate character sets, but must be
-                        told what character set the file is encoded in (internally, the contents
-                        must be converted into standard multi-byte Unicode).
-                    </p>
-                    <p>
-                        This is accomplished by providing some metadata inside the component (or
-                        page) specification. Metadata is specified using the
-                        <a href="spec.html#spec.meta">&lt;meta&gt;</a>
-                        element.
-                    </p>
-                    <p>
-                        The resolution of the character set is somewhat complicated; it is possible
-                        that each properties file will use a different character set. At the same
-                        time, repetition is bad ... therefore it is possible to specify some of this
-                        information in the namespace meta data (in the containing application or
-                        library specification) so that it can apply to all pages and components
-                        within the namespace.
-                    </p>
-
-                    <p>
-                        The basic meta-data property name searched for is
-                        <code>org.apache.tapestry.messages-encoding</code>
-                        . The value for this name is the name of the charset for the properties
-                        file.
-                    </p>
-
-                    <p>
-                        However, the base name is modified to reflect the locale for the file being
-                        read; the locale string is appended to the key, thus
-                        <code>org.apache.tapestry.messages-encoding_fr</code>
-                        will define the character set for the file
-                        <code>WEB-INF/Home_fr.properties</code>
-                    </p>
-
-                    <p>
-                        For each localization of the base property name, a search of the following
-                        locations takes place.
-                    </p>
-                    <ul>
-                        <li>The page or component specification.</li>
-                        <li>
-                            The namespace (library or application) specification for the namespace
-                            containing the page or component.
-                        </li>
-                        <li>
-                            The
-                            <a href="configuration.html#configuration.global-property-source">
-                                global property source
-                            </a>
-                            .
-                        </li>
-                    </ul>
-
-                    <p>
-                        Because localization of templates is similar to localization of message
-                        properties files, a second search occurs if the search for (variations of)
-                        <code>org.apache.tapestry.messages-encoding</code>
-                        fails; this time for
-                        <code>org.apache.tapestry.template-encoding</code>
-                        occurs (again, with variations for each locale).
-                    </p>
-
-                    <p>
-                        The ultimate default for encoding character set is ISO-8859-1; in other
-                        words, the same behavior as reading an ordinary Java ResourceBundle.
-                    </p>
-
-                </subsection>
-            </subsection>
-            <subsection name="Missing keys">
-
-
-                <p>
-                    While developing, you may occasionally reference a key that does not exist.
-                    Rather than fail with an exception, Tapestry will fabricate a missing key value.
-                    This is the key, converted to upper-case, and surrounded with brackets. For
-                    example,
-                    <code>[A-MISSING-KEY]</code>
-                    . This allows missing key values to stand out an demand to be fixed, without
-                    completely subverting your application.
-                </p>
-
-            </subsection><!-- localization.missing-keys -->
-            <subsection name="Namespace message catalogs">
-
-
-                <p>
-                    It is very likely that you'll have a number of strings that are used, and
-                    re-used, throughout your application. Rather than duplicate the same message
-                    keys and localized values in all your page and component message catalogs, you
-                    can put these into your
-                    <em>namespace</em>
-                    catalog.
-                </p>
-
-                <p>
-                    Each page and component is part of a
-                    <code>namespace</code>
-                    , identified by a library specification or component specification.
-                </p>
-
-                <p>
-                    The specification may also have a message catalog; for instance, for
-                    <code>WEB-INF/myapp.application</code>
-                    , the files would be named
-                    <code>WEB-INF/myapp.properties</code>
-                    , etc. Again, the name of the file is based on the servlet name ("myapp").
-                </p>
-
-                <p>
-                    Very simple applications may not have an application specification, but may
-                    still have properties, just as if the application specification existed.
-                </p>
-
-            </subsection><!-- localization.namespace -->
-            <!-- localization.component-catalog -->
-            <subsection name="Template text localization">
-
-                <p>
-                    As described in
-                    <a href="template.html#template.directives.l10n">
-                        the discussion of Tapestry templates
-                    </a>
-                    , static text in an HTML template can be enclosed in a specialized &lt;span&gt;
-                    tag.
-                </p>
-
-            </subsection>
-
-            <subsection name="Localized templates">
-
-
-                <p>
-                    In some cases, the entire layout of a page (or component) must change due to
-                    locale. For example, because of differences between western languages (which
-                    read left to right) and many eastern languages (which read right to left).
-                </p>
-
-                <p>
-                    In this case, it is possible to have multiple HTML templates. If a localized
-                    template (e.g.,
-                    <code>Home_jp.html</code>
-                    for a Japanese locale) exists, it will be used as appropriate.
-                </p>
-
-                <p>
-                    Page and component
-                    <em>specifications</em>
-                    are never localized, just
-                    <em>templates</em>
-                    .
-                </p>
-
-                <p>
-                    It is a good idea to make use of declared components, rather than implicit
-                    components, when using localized templates ... it reduces duplication in the
-                    templates.
-                </p>
-            </subsection>
-
-            <subsection name="Template encoding">
-
-
-                <p>
-                    Like
-                    <a href="#localization.component-catalog.encoding">message catalogs</a>
-                    , each template may be written in a different character set.
-                </p>
-
-                <p>
-                    For each localization of the base key (
-                    <code>org.apache.tapestry.template-encoding</code>
-                    , a search of the following locations takes place.
-                </p>
-                <ul>
-                    <li>The page or component specification.</li>
-                    <li>
-                        The namespace specification for the namespace containing the page or
-                        component.
-                    </li>
-                    <li>
-                        The
-                        <a href="configuration.html#configuration.search-path">
-                            application property search path
-                        </a>
-                    </li>
-                </ul>
-            </subsection>
-
-            <subsection name="Using the message: binding prefix">
-
-
-                <p>
-                    When specifying a parameter binding, the
-                    <code>message:</code>
-                    prefix is used to reference a localized message key. For example:
-                </p>
-
-                <source xml:space="preserve">
-&lt;html jwcid="@<a href="../components/general/shell.html">Shell</a>" title="message:page-title"&gt;
- . . .
-&lt;/html&gt;
-</source>
-
-            </subsection>
-
-            <subsection name="Localization of Assets">
-
-
-                <p>
-                    Assets may also be localized. Classpath and context assets will automatically
-                    search for a locale-specific match (this is very similar to how localized
-                    templates work).
-                </p>
-            </subsection><!-- localization.assets -->
-
-            <subsection name="Formatting messages">
-
-
-                <p>
-                    Messages may contain
-                    <em>arguments</em>
-                    , strings of the form
-                    <code>{0}</code>
-                    (or some other number). The argument are handled exactly the same as with Java's
-                    MessageFormat class (in fact, under the covers, MessageFormat does the work).
-                </p>
-
-                <p>
-                    Components include a
-                    <code>messages</code>
-                    property for accessing localized messages. This property is of type Messages,
-                    and includes two methods:
-                </p>
-
-                <ul>
-                    <li>
-                        <code>getMessage()</code>
-                        takes a string parameter and returns a localized message
-                    </li>
-                    <li>
-                        <code>format()</code>
-                        takes a string parameter (the key) and then takes a number of additional
-                        parameters as arguments. The arguments are just objects. If you have more
-                        than three arguments, then specify them as an object array.
-                    </li>
-                </ul>
-
-                <p>It is common to format messages using OGNL expessions, i.e.:</p>
-
-                <source xml:space="preserve">
-&lt;span jwcid="@<a href="../components/general/insert.html">Insert</a>" value="ognl:messages.format('billing-info', amountDue)"/&gt;
-</source>
-
-                <p>
-                    The above example would get the amountDue property and pass it in as argument 0
-                    to the message format retrieved from the message catalog as key 'billing-info'.
-                </p>
-
-            </subsection>
-
-            <subsection name="Changing the locale">
-
-
-                <p>
-                    In order to change the locale, you must obtain the
-                    <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                        IEngine
-                    </a>
-                    and invoke
-                    <code>setLocale()</code>
-                    on it. This will change the value stored in the engine (which is used when
-                    loading new pages), and:
-                </p>
-
-                <ul>
-                    <li>
-                        Update the hivemind.ThreadLocale service, allowing localized messages from
-                        services to be generated in the correct locale
-                    </li>
-                    <li>
-                        Cause an HTTP Cookie to be added to the request so that future requests from
-                        the same client will be in the same locale
-                    </li>
-                </ul>
-
-                <p>
-                    Changing the locale
-                    <a href="#localization.engine-locale">
-                        does not affect any pages loaded in the current request.
-                    </a>
-                </p>
-
-
-            </subsection>
-
-            <subsection name="Engine locale vs. page locale">
-
-
-                <p>
-                    When pages are created, or obtained from the page pool, the engine's locale is
-                    taken into account. Pages are obtained when they are used by a service, or when
-                    accessed via
-                    <a
-                        href="../apidocs/org/apache/tapestry/IRequestCycle.html">
-                        IRequestCycle
-                    </a>
-                    .getPage().
-                </p>
-
-                <p>
-                    A page is loaded for a particular locale, and the page's locale never changes.
-                    This is because of the degree to which localization creeps into the properties
-                    of the page and the components within the page.
-                </p>
-
-                <p>
-                    Additionally, once a page is loaded during a request cycle, it is kept for the
-                    duration of the cycle ... even if the engine locale changes.
-                </p>
-
-                <p>
-                    If you have a listener method on a page that changes the engine's locale, it is
-                    necessary to activate a
-                    <em>different</em>
-                    page to render the response. This new page will be loaded in the new locale.
-                </p>
-
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                        This may be addressed somewhat in Tapestry 4.0. Two options are possible: a
-                        service for changing the locale before rendering a page, and a way to force
-                        Tapestry to re-load a page, in a new locale.
-                    </p>
-                </span>
-
-            </subsection>
-
-            <subsection name="Limiting accepted locales">
-
-
-                <p>
-                    By default, Tapestry accepts incoming locales (as specified in the request HTTP
-                    header) as-is. The requested locale is used as-is. This has some implications,
-                    primarily in terms of resource usage.
-                </p>
-
-                <p>
-                    Imagine an application that is being accessed by users in the US, the UK and in
-                    Canada. The incoming request locales will be "en_US", "en_UK" and "en_CA"
-                    (respectively). However, it is likely that you will only have created a single
-                    localization, for English in general (locale "en"). Despite this, there will be
-                    several different versions of each page in the page pool: one for each of the
-                    above locales, even though they will be functionally identical.
-                </p>
-
-                <p>
-                    Ideally, what we want is to limit incoming requests so that all of the listed
-                    locales ("en_US", "en_UK" and "en_CA") will be 'filtered down' to just "en".
-                </p>
-
-                <p>
-                    That functionality is controlled by the org.apache.tapestry.accepted-locales
-                    <a href="configuration.html#configuration.properties">configuration property</a>
-                    . By setting this property to a comma-seperated list of local names, incoming
-                    requests will be converted to the closest match. For example, the the property
-                    could be configured to "en,fr,de" to support English, French and German.
-                </p>
-
-                <p>
-                    Matching takes place by stripping off "terms" (the locale variant, then the
-                    locale country code) from the locale name. So "en_US" would be stripped to "en"
-                    (which would match). When no match can be found, the
-                    <em>first</em>
-                    locale in the list is treated as the default. In the prior example, Russian
-                    users would be matched to the "en" locale.
-                </p>
-
-            </subsection>
-        </section>
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/page-class.xml b/tapestry/src/site/xdoc/usersguide/page-class.xml
deleted file mode 100644
index 4b3f7d3..0000000
--- a/tapestry/src/site/xdoc/usersguide/page-class.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Determining the Page Class</title>
-    </properties>
-    <body>
-    
-        <section name="Determining the Page Class">
-            <p>
-                When it comes time for Tapestry to instantiate a page, it must identify the Java
-                class to instantiate.
-            </p>
-
-            <p>
-                Tapestry pages implement the
-                <a href="../apidocs/org/apache/tapestry/IPage.html">IPage</a>
-                interface. Because this is a large interface, you will typically extends the
-                <a href="../apidocs/org/apache/tapestry/html/BasePage.html">
-                    BasePage
-                </a>
-                base class (for HTML pages).
-            </p>
-
-            <p>
-                Typically, you will identify the page class within the page's specification, using
-                the
-                <a href="spec.html#spec.page-specification">&lt;page-specification&gt;</a>
-                element's class attribute.
-            </p>
-
-            <p>
-                In many cases, however, the page specification is optional. Alternately, the class
-                attribute may be omitted from the page specification. Tapestry takes the following
-                steps to find the class for a page:
-            </p>
-
-            <ul>
-                <li>As indicated in the page specification</li>
-                <li>
-                    By searching the packages listed in the application specification (more below)
-                </li>
-                <li>
-                    The application specification's org.apache.tapestry.default-page-class property
-                </li>
-                <li>The global property org.apache.tapestry.default-page-class</li>
-            </ul>
-
-            <p>
-                The most useful of these is the second option, to search. For this step, Tapestry
-                looks in the application specification for the
-                org.apache.tapestry.page-class-packages
-                <a href="spec.html#spec.meta">&lt;meta&gt;</a>
-                property. This is a comma-seperated list of package names to search. The list of
-                packages is optional, and the default Java package is searched last.
-            </p>
-
-            <p>
-                Also, for this search, the page name is converted into a partial class name. For
-                pages inside folders, the folder names are part of the package name, so page name
-                <code>admin/EditUser</code>
-                will be become
-                <code>admin.EditUser</code>
-                .
-            </p>
-
-            <p>
-                So, if the prefix list is
-                <code>org.example.pages</code>
-                , then Tapestry will search for
-                <code>org.example.pages.admin.EditUser</code>
-                , then
-                <code>admin.EditUser</code>
-                (that is, in the default package).
-            </p>
-
-            <p>
-                Only if those searches fail to locate a class does Tapestry continue to the next
-                steps, using default page class names in the application specification and beyond.
-            </p>
-
-            <span class="info">
-                <strong>Note:</strong>
-                <p>
-                    These steps are specified in the
-                    <a
-                        href="../tapestry-framework/hivedoc/config/tapestry.page.PageClassProviderChain.html">
-                        tapestry.page.PageClassProviderChain
-                    </a>
-                    configuration point.
-                </p>
-            </span>
-
-            <p>
-                For simplicity, we described the search for application pages. For pages within a
-                library, the process is the same, but it is the library's specification which is
-                searched for the list of packages, and later, for the default page class name.
-            </p>
-
-            <subsection name="Component Classes">
-
-
-                <p>
-                    A similar search occurs for components (again, with the express desire that the
-                    class attribute of the
-                    <a href="spec.html#spec.component-specification">
-                        &lt;component-specification&gt;
-                    </a>
-                    <em>not</em>
-                    be used).
-                </p>
-
-                <ul>
-                    <li>As defined by the component specification</li>
-                    <li>
-                        In any package defined by the containing namespace's
-                        org.apache.tapestry.component-class-packages meta data property (if any)
-                    </li>
-                    <li>In the default package</li>
-                    <li>
-                        <a
-                            href="../apidocs/org/apache/tapestry/BaseComponent.html">
-                            BaseComponent
-                        </a>
-                        is the final default
-                    </li>
-                </ul>
-
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                        These steps are specified in the
-                        <a
-                            href="../tapestry-framework/hivedoc/config/tapestry.page.ComponentClassProviderChain.html">
-                            tapestry.page.ComponentClassProviderChain
-                        </a>
-                        configuration point.
-                    </p>
-                </span>
-            </subsection>
-            
-        </section>
-        
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/properties.xml b/tapestry/src/site/xdoc/usersguide/properties.xml
deleted file mode 100644
index dfa3471..0000000
--- a/tapestry/src/site/xdoc/usersguide/properties.xml
+++ /dev/null
@@ -1,744 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Tapestry Object Properties</title>
-    </properties>
-    <body>
-
-        <section name="Tapestry Object Properties">
-
-            <p>
-                When using Tapestry, an important aspect of your work is to leverage the properties
-                exposed by the various objects within Tapestry. A page has properties (inherited
-                from base classes such as
-                <a
-                    href="../apidocs/org/apache/tapestry/AbstractComponent.html">
-                    AbstractComponent
-                </a>
-                and
-                <a href="../apidocs/org/apache/tapestry/html/BasePage.html">
-                    BasePage
-                </a>
-                ) and contains components and other objects with more properties. Pages are
-                connected to an engine, which exports its own set of properties. This table is a
-                quick guide to the most common objects and their properties.
-            </p>
-
-            <table>
-                <tr>
-                    <th>Property name</th>
-                    <th>Defining class</th>
-                    <th>Property type</th>
-                    <th>Description</th>
-                </tr>
-
-
-                <tr>
-                    <td>assets</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>
-                        Map of
-                        <a href="../apidocs/org/apache/tapestry/IAsset.html">
-                            IAsset
-                        </a>
-                    </td>
-                    <td>Localized assets as defined in the component's specification.</td>
-                </tr>
-
-
-
-                <tr>
-                    <td>beans</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IBeanProvider.html">
-                            IBeanProvider
-                        </a>
-                    </td>
-                    <td>
-                        Used to access beans defined using the
-                        <a href="spec.html#spec.bean">&lt;bean&gt;</a>
-                        specification element.
-                    </td>
-                </tr>
-
-
-                <tr>
-                    <td>bindingNames</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>Collection of String</td>
-                    <td>
-                        The names of all formal and informal parameter bindings for the component.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>bindings</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>
-                        Map of
-                        <a href="../apidocs/org/apache/tapestry/IBinding.html">
-                            IBinding
-                        </a>
-                    </td>
-                    <td>
-                        All bindings (for both formal and informal parameters) for this component,
-                        keyed on the parameter name.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>body</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/AbstractComponent.html">
-                            AbstractComponent
-                        </a>
-                    </td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IRender.html">
-                            IRender
-                        </a>
-                        []
-                    </td>
-                    <td>
-                        The body of the component: the text (as
-                        <a href="../apidocs/org/apache/tapestry/IRender.html">
-                            IRender
-                        </a>
-                        ) and components (which inherit from
-                        <a href="../apidocs/org/apache/tapestry/IRender.html">
-                            IRender
-                        </a>
-                        ) that the component directly encloses within its container's template.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>bodyCount</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/AbstractComponent.html">
-                            AbstractComponent
-                        </a>
-                    </td>
-                    <td>int</td>
-                    <td>The active number of elements in the body property array.</td>
-                </tr>
-
-
-                <tr>
-                    <td>components</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>
-                        Map of
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>All components contained by this component, keyed on the component id.</td>
-                </tr>
-
-
-                <tr>
-                    <td>changeObserver</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IPage.html">
-                            IPage
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/event/ChangeObserver.html">
-                            ChangeObserver
-                        </a>
-                    </td>
-                    <td>
-                        An object that recieves notifications about changes to persistent page
-                        properties.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>classResolver</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                            IEngine
-                        </a>
-                    </td>
-                    <td>ClassResolver</td>
-                    <td>Object responsible for locating classes and classpath resources.</td>
-                </tr>
-                
-                <tr>
-                    <td>clientId</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>String</td>
-                    <td>
-                        The component's client-side element id.
-                    </td>                    
-                </tr>                
-
-                <tr>
-                    <td>componentMessagesSource</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                            IEngine
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/IComponentMessagesSource.html">
-                            IComponentMessagesSource
-                        </a>
-                    </td>
-                    <td>
-                        An object that allows components to find their set of localized messages.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>container</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>
-                        The page or component which contains this component. Pages will return null.
-                    </td>
-                </tr>
-
-
-
-                <tr>
-                    <td>disabled</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/form/IFormComponent.html">
-                            IFormComponent
-                        </a>
-                    </td>
-                    <td>boolean</td>
-                    <td>
-                        If true, the component should be disabled (and not respond to query
-                        parameters passed up in the request).
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>displayName</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/form/IFormComponent.html">
-                            IFormComponent
-                        </a>
-                    </td>
-                    <td>String</td>
-                    <td>
-                        Localized string to be displayed as a label for the form control. Most
-                        implementations leave this undefined (as null).
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>engine</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IPage.html">
-                            IPage
-                        </a>
-                    </td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                            IEngine
-                        </a>
-                    </td>
-                    <td>The engine to which the page is currently attached.</td>
-                </tr>
-
-                <tr>
-                    <td>extendedId</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>String</td>
-                    <td>
-                        An "extended" version of the idPath property that includes the name of the
-                        page containing the component as well.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>form</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/form/IFormComponent.html">
-                            IFormComponent
-                        </a>
-                    </td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IForm.html">
-                            IForm
-                        </a>
-                    </td>
-                    <td>The form which encloses the form control component.</td>
-                </tr>
-
-                <tr>
-                    <td>global</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                            IEngine
-                        </a>
-                        ,
-                        <a href="../apidocs/org/apache/tapestry/IPage.html">
-                            IPage
-                        </a>
-                    </td>
-                    <td>Object</td>
-                    <td>The Global object for the application.</td>
-                </tr>
-
-                <tr>
-                    <td>hasVisit</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/AbstractEngine.html">
-                            AbstractEngine
-                        </a>
-                    </td>
-                    <td>boolean</td>
-                    <td>Returns true if the Visit object has been created, false initially.</td>
-                </tr>
-
-                <tr>
-                    <td>id</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>String</td>
-                    <td>
-                        The id of the component, which is unique within its container. In many
-                        cases, the framework may have assigned an automatically generated id. Pages
-                        do not have an id and return null.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>idPath</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>String</td>
-                    <td>
-                        A sequence of id's used to locate a component within a page. A component
-                        <code>bar</code>
-                        within a component
-                        <code>foo</code>
-                        within a page will have an idPath of
-                        <code>foo.bar</code>
-                        . Pages return null.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>listeners</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/AbstractComponent.html">
-                            AbstractComponent
-                        </a>
-                        ,
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/AbstractEngine.html">
-                            AbstractEngine
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/listener/ListenerMap.html">
-                            ListenerMap
-                        </a>
-                    </td>
-                    <td>
-                        Used to map listener methods as objects that implement the
-                        <a
-                            href="../apidocs/org/apache/tapestry/IActionListener.html">
-                            IActionListener
-                        </a>
-                        interface.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>locale</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                            IEngine
-                        </a>
-                    </td>
-                    <td>Locale</td>
-                    <td>
-                        The locale for the current client; this is used when loading pages from the
-                        page pool, or when instantiating new page instances.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>locale</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IPage.html">
-                            IPage
-                        </a>
-                    </td>
-                    <td>Locale</td>
-                    <td>
-                        The locale to which the page and all components within the page is
-                        localized.
-                    </td>
-                </tr>
-
-
-
-
-
-                <tr>
-                    <td>location</td>
-                    <td>
-                        <em>many</em>
-                    </td>
-                    <td>Location</td>
-                    <td>
-                        The location that should be used with any error messages generated about the
-                        object. This is ultimately the file, line (and even column) of the template
-                        or specification file responsible for defining the object (be it a
-                        component, a page, or some other kind of object).
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>messages</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>Messages</td>
-                    <td>Localized messages for the component.</td>
-                </tr>
-
-                <tr>
-                    <td>name</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/form/IFormComponent.html">
-                            IFormComponent
-                        </a>
-                    </td>
-                    <td>String</td>
-                    <td>
-                        The name, or element id, assigned to the form control by the
-                        <a href="../apidocs/org/apache/tapestry/IForm.html">
-                            IForm
-                        </a>
-                        . This is set as the component renders (but the property can then be read
-                        after the component renders).
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>namespace</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/INamespace.html">
-                            INamespace
-                        </a>
-                    </td>
-                    <td>
-                        The namespace containing the component. Components are always within
-                        <em>some</em>
-                        namespace, whether it is the default (application) namespace, the framework
-                        namespace, or a namespace for a component library.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>outputEncoding</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/AbstractPage.html">
-                            AbstractPage
-                        </a>
-                    </td>
-                    <td>String</td>
-                    <td>Output encoding for the page.</td>
-                </tr>
-
-                <tr>
-                    <td>page</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IPage.html">
-                            IPage
-                        </a>
-                    </td>
-                    <td>The page which ultimately contains the component.</td>
-                </tr>
-
-                <tr>
-                    <td>propertySource</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                            IEngine
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/IPropertySource.html">
-                            IPropertySource
-                        </a>
-                    </td>
-                    <td>Source for configuration properties.</td>
-                </tr>
-
-                <tr>
-                    <td>pageName</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IPage.html">
-                            IPage
-                        </a>
-                    </td>
-                    <td>String</td>
-                    <td>The fully qualified page name (possibly including a namespace prefix).</td>
-                </tr>
-
-                <tr>
-                    <td>pageSource</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                            IEngine
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/IPageSource.html">
-                            IPageSource
-                        </a>
-                    </td>
-                    <td>The object used to obtain page instances.</td>
-                </tr>
-
-
-                <tr>
-                    <td>rendering</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>boolean</td>
-                    <td>
-                        True if the component is actively rendering (inside it's
-                        <code>render()</code>
-                        method).
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>requestCycle</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IPage.html">
-                            IPage
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IRequestCycle.html">
-                            IRequestCycle
-                        </a>
-                    </td>
-                    <td>The request cycle to which the page is currently attached.</td>
-                </tr>
-
-                <tr>
-                    <td>scriptSource</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                            IEngine
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/IScriptSource.html">
-                            IScriptSource
-                        </a>
-                    </td>
-                    <td>Object that parses and caches script specifications.</td>
-                </tr>
-
-
-                <tr>
-                    <td>specification</td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/IComponent.html">
-                            IComponent
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/spec/IComponentSpecification.html">
-                            IComponentSpecification
-                        </a>
-                    </td>
-                    <td>
-                        The specification which defines this component. Often used to access meta
-                        data defined in the component's specification using the
-                        <a href="spec.html#spec.meta">&lt;meta&gt;</a>
-                        element.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>specification</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                            IEngine
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/spec/IApplicationSpecification.html">
-                            IApplicationSpecification
-                        </a>
-                    </td>
-                    <td>The specification for the application.</td>
-                </tr>
-
-                <tr>
-                    <td>specificationSource</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                            IEngine
-                        </a>
-                    </td>
-                    <td>
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/ISpecificationSource.html">
-                            ISpecificationSource
-                        </a>
-                    </td>
-                    <td>
-                        Object responsible for reading and caching page and component
-                        specifications.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>visit</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IEngine.html">
-                            IEngine
-                        </a>
-                    </td>
-                    <td>Object</td>
-                    <td>
-                        Returns the Visit object for the current client, or null if the Visit object
-                        has not yet been created.
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>visit</td>
-                    <td>
-                        <a href="../apidocs/org/apache/tapestry/IPage.html">
-                            IPage
-                        </a>
-                    </td>
-                    <td>Object</td>
-                    <td>
-                        Returns the Visit object for the current client, creating it if necessary.
-                    </td>
-                </tr>
-            </table>
-            
-        </section>
-        
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/script.xml b/tapestry/src/site/xdoc/usersguide/script.xml
deleted file mode 100644
index b7fc34b..0000000
--- a/tapestry/src/site/xdoc/usersguide/script.xml
+++ /dev/null
@@ -1,532 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Script Template Specification DTDs</title>
-    </properties>
-    <body>
-
-        <section name="Script Template Specification DTDs">
-            <p>
-                Script template specifications are the odd man out when it comes to Tapestry XML
-                files as they don't use the same DTD as the
-                <a href="spec.html">other specifications</a>
-                .
-            </p>
-
-            <p>
-                Script templates are used to dynamically generate JavaScript to support client-side
-                behaviors associated with components. Tapestry is all about dynamically renderered,
-                customized HTML, so it makes sense that dynamically rendered, customize JavaScript
-                to complement that HTML should also be supported.
-            </p>
-
-            <p>
-                Script template files are parsed into memory as instances of
-                <a href="../apidocs/org/apache/tapestry/IScript.html">IScript</a>
-                . These script template
-                <em>objects</em>
-                may be executed to generate the JavaScript.
-            </p>
-
-            <p>
-                Many different script template objects may be executed during the course of
-                rendering a page; all the JavaScript from all the executions are organized into two
-                JavaScript blocks in the output page: the
-                <em>main body</em>
-                at the top of the page (just inside the HTML &lt;body&gt; tag), and an
-                <em>initialization block</em>
-                at the bottom of the page, (just before the HTML &lt;/body&gt; tag).
-            </p>
-
-            <p>
-                Executing a script template requires access to an
-                <a href="../apidocs/org/apache/tapestry/IScriptProcessor.html">
-                    IScriptProcessor
-                </a>
-                instance; this is usually provided by the
-                <a href="../components/general/body.html">Body</a>
-                component. The script processor is responsible for managing the buffers of
-                JavaScript, and assists with generating unique ids for client-side variables and
-                functions.
-            </p>
-
-            <p>
-                A script template works with
-                <em>symbols</em>
-                , a set of key/value pairs (implements as a Map). The script operates upon the input
-                symbols and generates new output symbols along the way, while generating JavaScript.
-                In some cases, the output symbols may be used by a component when rendering HTML.
-            </p>
-
-            <p>
-                Many of the elements in a script template have a body of parsable character data. In
-                the body of an element, you may reference symbols using the Ant-like ${...} syntax.
-                I.e.
-                <code>${name}</code>
-                . In fact, the string inside the curly braces is an
-                <a href="http://www.ognl.org">OGNL</a>
-                expression, so you may create more complex expressions, such as
-                <code>${field.form.name}</code>
-                .
-            </p>
-
-            <subsection name="DOCTYPE">
-
-
-                <p>The DOCTYPE for a script template specification is:</p>
-
-                <source xml:space="preserve">
-&lt;!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd"&gt;</source>
-            </subsection><!-- DOCTYPE -->
-
-			<a name="script.body"></a>
-            <subsection name="&lt;body&gt; element">
-
-
-                <p>
-                    Appears in:
-                    <a href="#script.script">&lt;script&gt;</a>
-                </p>
-
-                <p>
-                    Allows a mix of text and control elements. This text is added to the large
-                    scripting block just inside the HTML &lt;body&gt; tag.
-                </p>
-
-                <p>&lt;body&gt; elements:</p>
-
-                <source xml:space="preserve">(<em>text</em> | <a href="#script.foreach">&lt;foreach&gt;</a> | <a
-                        href="#script.if">&lt;if&gt;</a> | <a href="#script.if-not">&lt;if-not&gt;</a> | <a
-                        href="#script.unique">&lt;unique&gt;</a>)*</source>
-            </subsection>
-
-			<a name="script.foreach"></a>
-            <subsection name="&lt;foreach&gt; element">
-
-
-                <p>
-                    Appears in:
-                    <em>many</em>
-                </p>
-
-                <p>
-                    Iterates over a list of items; this is modeled after the For component. No
-                    iteration occurs if the value from the expression is null.
-                </p>
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>key</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>Defines the symbol into which each succesive value is stored.</td>
-                    </tr>
-
-                    <tr>
-                        <td>index</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            Defines the symbol into which the index of the value of the current
-                            iteration is stored.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>expression</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            The source of values, as an OGNL expression rooted in the symbols Map.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>&lt;foreach&gt; elements:</p>
-
-                <source xml:space="preserve">(<em>text</em> | <a href="#script.foreach">&lt;foreach&gt;</a> | <a
-                        href="#script.if">&lt;if&gt;</a> | <a href="#script.if-not">&lt;if-not&gt;</a> | <a
-                        href="#script.unique">&lt;unique&gt;</a>)*</source>
-            </subsection>
-
-			<a name="script.if"></a>
-            <subsection name="&lt;if&gt; element">
-
-
-                <p>
-                    Appears in:
-                    <em>many</em>
-                </p>
-
-                <p>
-                    Creates a conditional portion of the script; The body of the element is only
-                    included if the expression evaulates to true.
-                </p>
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>expression</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            The
-                            <a href="http://www.ognl.org">OGNL</a>
-                            expression to evaluate.
-                        </td>
-                    </tr>
-
-
-                </table>
-
-                <p>&lt;if&gt; Elements</p>
-
-                <source xml:space="preserve">(<em>text</em> | <a href="#script.foreach">&lt;foreach&gt;</a> | <a
-                        href="#script.if">&lt;if&gt;</a> | <a href="#script.if-not">&lt;if-not&gt;</a> | <a
-                        href="#script.unique">&lt;unique&gt;</a>)*</source>
-
-            </subsection>
-
-			<a name="script.if-not"></a>
-            <subsection name="&lt;if-not&gt; element">
-
-
-                <p>
-                    Identical to the
-                    <a href="#script.if">&lt;if&gt;</a>
-                    element, except that the body is only included in the output if the expression
-                    evaluates to
-                    <strong>false</strong>
-                    .
-                </p>
-            </subsection>
-
-
-			<a name="script.include-script"></a>
-            <subsection name="&lt;include-script&gt; element">
-
-
-                <p>
-                    Inserts a reference to a static JavaScript file stored on the classpath. A
-                    particular file will only be included once per rendering of a page.
-                </p>
-
-                <p>
-                    For best performance, as much logic as possible should be shifted into static
-                    JavaScript library files that are included via this element. The dynamic portion
-                    of the JavaScript should really be initialization of code provided by such a
-                    static JavaScript library. This optimizes that amount of data that must be sent
-                    to the client web browser, as it will be able to cache the content of static
-                    library files.
-                </p>
-
-                <p>
-                    Appears in:
-                    <a href="#script.script">&lt;script&gt;</a>
-                </p>
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>resource-path</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The path to the script within the classpath.</td>
-                    </tr>
-                </table>
-
-            </subsection>
-            
-            <a name="script.initialization"></a>
-            <subsection name="&lt;initialization&gt; element">
-
-
-                <p>
-                    Appears in:
-                    <a href="#script.script">&lt;script&gt;</a>
-                </p>
-
-                <p>
-                    Allows a mix of text and control elements. This text is added to the large
-                    scripting block just inside the HTML &lt;/body&gt; tag. It therefore can
-                    refrence HTML objects within the page.
-                </p>
-
-                <p>&lt;initialization&gt; elements:</p>
-
-                <source xml:space="preserve">(<em>text</em> | <a href="#script.foreach">&lt;foreach&gt;</a> | <a
-                        href="#script.if">&lt;if&gt;</a> | <a href="#script.if-not">&lt;if-not&gt;</a> | <a
-                        href="#script.unique">&lt;unique&gt;</a>)*</source>
-            </subsection>
-
-			<a name="script.input-symbol"></a>
-            <subsection name="&lt;input-symbol&gt; element">
-
-
-                <p>
-                    Appears in:
-                    <a href="#script.script">&lt;script&gt;</a>
-                </p>
-
-                <p>
-                    Defines an input symbol used by the script. Defining input symbols is optional;
-                    it merely enforces that symbols be of a particular type, or enforces that a
-                    non-null value be provided. This is handy as
-                    <em>defensive programming</em>
-                    .
-                </p>
-
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>key</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of the symbol to check.</td>
-                    </tr>
-
-                    <tr>
-                        <td>class</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            If provided, then the actual value must be assignable to the given type
-                            (which may be a Java class or interface name).
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>required</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>no</td>
-                        <td>If "yes", then a non-null value must be provided.</td>
-                    </tr>
-                </table>
-
-            </subsection>
-            
-            
-			<a name="script.let"></a>
-            <subsection name="&lt;let&gt; element">
-
-
-                <p>
-                    Appears in:
-                    <a href="#script.script">&lt;script&gt;</a>
-                </p>
-
-                <p>
-                    Defines a new symbol in terms of a string (usually with embedded expressions).
-                </p>
-
-                <p>
-                    When a string is marked as unique, it is passed through a page-wide filter; if
-                    the name conflicts with a previous unique string, then a numeric suffix is
-                    appended to the string to ensure its uniqueness. This is most useful when
-                    defining JavaScript client-side variables and functions, to ensure there are no
-                    conflicts between different script templates, or successive executions of the
-                    same script template.
-                </p>
-               
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                        Starting with Tapestry 4.1.2, unique also ensures that the returned string can
-                        be safely used as a javascript identifier (by replacing hyphens, colons and periods with
-                        underscores).
-                    </p>
-                </span>
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>key</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of the new symbol to create.</td>
-                    </tr>
-
-                    <tr>
-                        <td>unique</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>no</td>
-                        <td>If yes, then the string is made unique.</td>
-                    </tr>
-
-                </table>
-
-                <p>&lt;let&gt; Elements</p>
-
-                <source xml:space="preserve">(<em>text</em> | <a href="#script.foreach">&lt;foreach&gt;</a> | <a
-                        href="#script.if">&lt;if&gt;</a> | <a href="#script.if-not">&lt;if-not&gt;</a> | <a
-                        href="#script.unique">&lt;unique&gt;</a>)*</source>
-
-
-            </subsection>
-	
-			<a name="script.script"></a>
-            <subsection name="&lt;script&gt; element">
-
-
-                <p>
-                    <em>root element</em>
-                </p>
-
-                <p>
-                    The &lt;script&gt; element is the root element of the document. It contains no
-                    attributes.
-                </p>
-
-                <p>&lt;script&gt; Elements</p>
-                <source xml:space="preserve">
-(<a href="#script.include-script">&lt;include-script&gt;</a>*, <a href="#script.input-symbol">&lt;input-symbol&gt;</a>*, (<a
-                        href="#script.let">&lt;let&gt;</a> | <a href="#script.set">&lt;set&gt;</a>)*, <a
-                        href="#script.body">&lt;body&gt;</a>?, <a href="#script.initialization">&lt;initialization&gt;</a>?)                  
-            </source>
-
-            </subsection><!-- script -->
-
-			<a name="script.set"></a>
-            <subsection name="&lt;set&gt; element">
-
-
-                <p>
-                    Appears in:
-                    <em>many</em>
-                </p>
-
-                <p>
-                    Creates a new symbol, or overwrites an existing symbol, in terms of an
-                    <a href="http://www.ognl.org">OGNL</a>
-                    expression.
-                </p>
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>key</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The key for the input symbol to be created (or overwritten).</td>
-                    </tr>
-
-                    <tr>
-                        <td>expression</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            The
-                            <a href="http://www.ognl.org">OGNL</a>
-                            expression to evaluate and assign to the input symbol.
-                        </td>
-                    </tr>
-                </table>
-
-            </subsection><!-- script.set -->
-
-			<a name="script.unique"></a>
-            <subsection name="&lt;unique&gt; element">
-
-
-                <p>
-                    Appears in:
-                    <em>many</em>
-                </p>
-
-                <p>
-                    Defines a block of text that is only rendered once per page. This is appropriate
-                    to certain kinds of initialization code that should not be duplicated, even if
-                    the same script template is executed multiple times.
-                </p>
-
-                <p>&lt;script&gt; elements:</p>
-
-                <source xml:space="preserve">(<em>text</em> | <a href="#script.foreach">&lt;foreach&gt;</a> | <a
-                        href="#script.if">&lt;if&gt;</a> | <a href="#script.if-not">&lt;if-not&gt;</a> | <a
-                        href="#script.unique">&lt;unique&gt;</a>)*</source>
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/spec.xml b/tapestry/src/site/xdoc/usersguide/spec.xml
deleted file mode 100644
index 812c322..0000000
--- a/tapestry/src/site/xdoc/usersguide/spec.xml
+++ /dev/null
@@ -1,1829 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Tapestry Specification DTDs</title>
-    </properties>
-    <body>
-
-        <section name="Tapestry Specification DTDs">
-
-            <p>
-                This document describes the four main types of specifications used in Tapestry. In
-                all four cases, the same DOCTYPE is used:
-            </p>
-
-            <source xml:space="preserve">
-
-&lt;!DOCTYPE <em>root element</em> PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd"&gt;
-</source>
-
-            <p>
-                The
-                <em>root element</em>
-                is different for each of the four types of specification files:
-            </p>
-
-            <table>
-
-                <tr>
-                    <th>Type</th>
-                    <th>File Extension</th>
-                    <th>Root Element</th>
-                </tr>
-
-                <tr>
-                    <td>Application</td>
-                    <td>application</td>
-                    <td>
-                        <a href="spec.html#spec.application">&lt;application&gt;</a>
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>Page</td>
-                    <td>page</td>
-                    <td>
-                        <a href="spec.html#spec.page-specification">&lt;page-specification&gt;</a>
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>Component</td>
-                    <td>jwc</td>
-                    <td>
-                        <a href="spec.html#spec.component-specification">
-                            &lt;component-specification&gt;
-                        </a>
-                    </td>
-                </tr>
-
-                <tr>
-                    <td>Library</td>
-                    <td>library</td>
-                    <td>
-                        <a href="spec.html#spec.library-specification">
-                            &lt;library-specification&gt;
-                        </a>
-                    </td>
-                </tr>
-
-
-            </table>
-
-            <span class="info">
-                <strong>Note:</strong>
-                <p>
-                A fifth type of specification, the script template specification, is
-                <a href="script.html">described seperately</a>
-                . In addition, in Tapestry 4.0, a significant part of an application's behavior is
-                defined by its
-                <a href="http://hivemind.apache.org/hivemind1/">HiveMind</a>
-                module deployment descriptor.
-                </p>
-            </span>
-
-            <section name="Changes between releases 3.0 and 4.0">
-
-
-                <p>
-                    The specifications evolve over time, with each release providing an updated DTD
-                    allowing access to new features. Tapestry 4.0 supports the Tapestry 3.0 DTD
-                    (just be sure to use the matching public ID), and in most cases existing
-                    applications coded against release 3.0 will run unchanged under release 4.0
-                    (though it is expected that there will be some runtime warnings).
-                </p>
-
-                <p>The following features of the release 3.0 DTD are changed for release 4.0:</p>
-
-                <ul>
-                    <li>
-                        The &lt;service&gt; element (inside
-                        <a href="spec.html#spec.application">&lt;application&gt;</a>
-                        or
-                        <a href="spec.html#spec.library-specification">
-                            &lt;library-specification&gt;
-                        </a>
-                        ) is no longer supported in release 4.0. 3.0 DTD specifications that use
-                        &lt;service&gt; will generate a warning. Use the
-                        <a
-                            href="../tapestry-framework/hivedoc/service/tapestry.services.ApplicationServices.html">
-                            tapestry.services.ApplicationServices
-                        </a>
-                        configuration point instead.
-                    </li>
-                    <li>
-                        In the 3.0 DTD, the
-                        <a href="spec.html#spec.binding">&lt;binding&gt;</a>
-                        element was for specifying OGNL expressions only, and had an expression
-                        attribute. In the 4.0 DTD, it is used for setting all types of attributes,
-                        and has a value attribute. The value is a
-                        <a href="bindings.html">binding reference</a>
-                        , which uses a prefix to determine which type of binding is to be used.
-                    </li>
-                    <li>
-                        The &lt;static-binding&gt; and &lt;message-binding&gt; elements have been
-                        removed, replaced with the
-                        <a href="spec.html#spec.binding">&lt;binding&gt;</a>
-                        element and the ognl: and message: prefixes, respectively.
-                    </li>
-                    <li>
-                        The &lt;property&gt; element (in 3.0) has been renamed to
-                        <a href="spec.html#spec.meta">&lt;meta&gt;</a>
-                        .
-                    </li>
-                    <li>
-                        The &lt;property-specification&gt; element (in 3.0) has been renamed to
-                        <a href="spec.html#spec.property">&lt;property&gt;</a>
-                        . The type attribute has been dropped. The persistent attribute has been
-                        renamed to persist, and is a string (allowing a variety of persistence
-                        strategies to be applied).
-                    </li>
-                    <li>
-                        The
-                        <a href="spec.html#spec.inject">&lt;inject&gt;</a>
-                        element has been added.
-                    </li>
-                    <li>
-                        The
-                        <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                        element has been simplified; the type and direction attributes have been
-                        dropped. The default-value attribute is now a
-                        <em>
-                            <a href="bindings.html">binding reference</a>
-                        </em>
-                        , as with the
-                        <a href="spec.html#spec.binding">&lt;binding&gt;</a>
-                        element's value attribute.
-                    </li>
-                    <li>
-                        The
-                        <a href="spec.html#spec.property">&lt;property&gt;</a>
-                        element's initial-value attribute (or enclosed character data) is now a
-                        <a href="bindings.html">binding reference</a>
-                        . In release 3.0 it was always an OGNL expression, but is now a
-                        <a href="bindings.html">binding reference</a>
-                        .
-                    </li>
-                    <li>
-                        The &lt;context-asset&gt;, &lt;private-asset&gt; and &lt;external-asset&gt;
-                        elements have been consolidated into the new
-                        <a href="spec.html#spec.asset">&lt;asset&gt;</a>
-                        element, and a prefixing system has been introduced.
-                    </li>
-                    <li>
-                        The &lt;set-property&gt; and &lt;set-message-property&gt; elements have been
-                        consolidated into &lt;set&gt;, which now uses a (wait for it)
-                        <a href="bindings.html">binding reference</a>
-                        .
-                    </li>
-                    <li>
-                        The 4.0 DTD is more liberal about the order in which elements may be
-                        specified than the 3.0 DTD.
-                    </li>
-                    <li>
-                        Added the property attribute to the
-                        <a href="spec.html#spec.component">&lt;component&gt;</a>
-                        and
-                        <a href="spec.html#spec.bean">&lt;bean&gt;</a>
-                        elements.
-                    </li>
-                    <li>
-                        Removed the type attribute from the
-                        <a href="spec.html#spec.configure">&lt;configure&gt;</a>
-                        element.
-                    </li>
-                    <li>
-                        Added many more options for
-                        <a href="#spec.boolean-types">boolean attributes</a>
-                        .
-                    </li>
-                    <li>
-                        Added the aliases and cache attributes to the
-                        <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                        element.
-                    </li>
-                    <li>
-                        Added the deprecated attribute to
-                        <a href="spec.html#spec.component-specification">
-                            &lt;component-specification&gt;
-                        </a>
-                        and
-                        <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                        .
-                    </li>
-                    <li>Renamed property-name attribute to property (in several places)</li>
-                    <li>Removed the &lt;listener-binding&gt; element</li>
-                </ul>
-
-                <p>
-                    More detailed notes on
-                    <a href="upgrade.html">upgrading from Tapestry 3.0 to Tapestry 4.0</a>
-                    are available.
-                </p>
-
-            </section><!-- changes -->
-
-			<a name="spec.property-injection"></a>
-			
-            <section name="Property Injection">
-			
-                <p>
-                    Several of the specification elements are concerned with
-                    <a href="injection.html">property injection</a>
-                    . For
-                    <a href="spec.html#spec.inject">&lt;inject&gt;</a>
-                    , the entire element exists to describe a property injection; in others (
-                    <a href="spec.html#spec.component">&lt;component&gt;</a>
-                    ,
-                    <a href="spec.html#spec.bean">&lt;bean&gt;</a>
-                    and
-                    <a href="spec.html#spec.asset">&lt;asset&gt;</a>
-                    ), the injection is just one piece of the behavior defined using the element.
-                </p>
-
-                <p>
-                    In all of these cases, Tapestry will create a
-                    <em>new property</em>
-                    at runtime. That is, it will create the accessor method (or methods), the
-                    instance variables, and any necessary setup or cleanup code automatically. As
-                    with
-                    <a href="state.html#state.page-properties">persistent page properties</a>
-                    , you should at most declare
-                    <em>abstract</em>
-                    accessor methods.
-                </p>
-
-            </section><!-- spec.property-injection -->
-
-            <section name="Boolean type values">
-
-
-                <p>
-                    Several attributes are type boolean. Tapestry supports a number of common (and
-                    one humorous) values for booleans. Values considered true:
-                </p>
-
-                <ul>
-                    <li>true</li>
-                    <li>yes</li>
-                    <li>on</li>
-                    <li>1</li>
-                    <li>t</li>
-                    <li>y</li>
-                    <li>aye</li>
-                </ul>
-
-                <p>Values considered false:</p>
-
-                <ul>
-                    <li>false</li>
-                    <li>no</li>
-                    <li>off</li>
-                    <li>0</li>
-                    <li>f</li>
-                    <li>n</li>
-                    <li>nay</li>
-                </ul>
-
-            </section>
-
-			<a name="spec.application"></a>
-			
-            <section name="&lt;application&gt; element">
-            
-
-                <p>
-                    <em>root element</em>
-                </p>
-
-                <p>
-                    The application specification defines the pages and components specific to a
-                    single Tapestry application. It also defines any libraries that are used within
-                    the application.
-                </p>
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>name</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>User presentable name of application.</td>
-                    </tr>
-                    <tr>
-                        <td>engine-class</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            Name of an implementation of
-                            <a
-                                href="../apidocs/org/apache/tapestry/IEngine.html">
-                                IEngine
-                            </a>
-                            to instantiate. Defaults to
-                            <a
-                                href="../apidocs/org/apache/tapestry/engine/BaseEngine.html">
-                                BaseEngine
-                            </a>
-                            if not specified.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>&lt;application&gt; Elements:</p>
-                <source xml:space="preserve">
-  <a href="spec.html#spec.description">&lt;description&gt;</a> ?,
-  (<a href="spec.html#spec.meta">&lt;meta&gt;</a> | <a href="spec.html#spec.page">&lt;page&gt;</a> | <a
-                        href="spec.html#spec.component-type">&lt;component-type&gt;</a> |  <a
-                        href="spec.html#spec.library">&lt;library&gt;</a> | <a
-                        href="spec.html#spec.extension">&lt;extension&gt;</a>) *
-</source>
-
-            </section><!-- spec.application -->
-
-			<a name="spec.asset"></a>
-			
-            <section name="&lt;asset&gt; element">
-			
-
-                <p>
-                    Specifies the location of an asset, a file (typically an image or stylesheet)
-                    that may be exposed to the client web browser.
-                </p>
-
-                <p>
-                    Assets may be stored in the web application (that is, within or beneath the web
-                    application root context folder), on the classpath (often the case for
-                    components packaged in a reusable library) or at an arbitrary URL.
-                </p>
-
-                <p>
-                    The path to a resource may be absolute (beginning with a leading slash), or
-                    relative (no leading slash). At this time, other common path sequences (".",
-                    "..", etc.) are not supported.
-                </p>
-
-                <table>
-                    <tr>
-                        <th>Prefix</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>context:</td>
-                        <td>
-                            The asset is stored in the web application context. Relative paths are
-                            compouted from the web application root context folder, not the
-                            specification file.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>classpath:</td>
-                        <td>
-                            The asset is a file on the classpath. Relative paths are computed from
-                            the specification file.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Context and classpath assets will automatically be localized. Thus an asset with
-                    path "/images/Logo.gif" may be localized to "/images/Logo_fr.gif" if the active
-                    locale is French (and such a file exists).
-                </p>
-
-                <p>
-                    Unrecognized prefixes are considered to be the scheme portion of a URL. Such
-                    paths are passed through unchanged, and not localized.
-                </p>
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>name</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of the asset, which must be a valid Java identifier.</td>
-                    </tr>
-                    <tr>
-                        <td>path</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The relative or absolute path to the asset.</td>
-                    </tr>
-
-                    <tr>
-                        <td>property</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>The name of a property into which the asset shoud be injected.</td>
-                    </tr>
-
-                </table>
-
-
-            </section><!-- spec.asset -->
-
-
-			<a name="spec.bean"></a>
-			
-            <section name="&lt;bean&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.component-specification">
-                        &lt;component-specification&gt;
-                    </a>
-                    and
-                    <a href="spec.html#spec.page-specification">&lt;page-specification&gt;</a>
-                </p>
-
-                <p>
-                    A &lt;bean&gt; is used to add behaviors to a page or component via aggregation.
-                    Each &lt;bean&gt; defines a named JavaBean that is instantiated on demand. Such
-                    managed beans are accessed through the OGNL expression beans.
-                    <em>name</em>
-                    or via the bean:
-                    <a href="bindings.html">binding reference</a>
-                    .
-                </p>
-
-                <p>
-                    Beans are only instantiated on demand, typically by using a bean:
-                    <a href="bindings.html">binding reference</a>
-                    . Once a bean is instantiated and initialized, it will be retained by the page
-                    or component for some period of time, specified by the bean's lifecycle.
-                </p>
-
-                <dl>
-                    <dt>none</dt>
-                    <dd>The bean is not retained, a new bean will be created on each access.</dd>
-
-                    <dt>page</dt>
-                    <dd>The bean is retained for the lifecycle of the page itself.</dd>
-
-                    <dt>render</dt>
-                    <dd>
-                        The bean is retained until the current render operation completes. This will
-                        also discard the bean when a page or form finishes rewinding. This is the
-                        default lifecycle.
-                    </dd>
-
-                    <dt>request</dt>
-                    <dd>The bean is retained until the end of the current request.</dd>
-
-                </dl>
-
-                <p>
-                    Caution should be taken when using lifeycle page. A bean is associated with a
-                    particular instance of a page within a particular JVM. Consecutive requests may
-                    be processed using different instances of the page, possibly in different JVMs
-                    (if the application is operating in a clustered environment). No state
-                    particular to a single client session should be stored in a page.
-                </p>
-
-                <p>
-                    Beans must be public classes with a default (no arguments) constructor.
-                    Properties of the bean may be configured nested
-                    <a href="spec.html#spec.set">&lt;set&gt;</a>
-                    elements.
-                </p>
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>name</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of the bean, which must be a valid Java identifier.</td>
-                    </tr>
-                    <tr>
-                        <td>class</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            The name of the class to instantiate. May optionally include
-                            <em>lightweight initialization</em>
-                            (see below).
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>lifecycle</td>
-                        <td>none|page|render|request</td>
-                        <td>no</td>
-                        <td>request</td>
-                        <td>
-                            As described above; duration that bean is retained once instantiated.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>property</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            If a property name is specified, then the name property will be injected
-                            into the component; accessing the property will return the bean. This
-                            makes it easier to access beans from Java code.
-                        </td>
-                    </tr>
-
-
-                </table>
-
-
-                <p>
-                    <em>Lightweight intialization:</em>
-                    A concept borrowed from HiveMind where simple properties of the bean can be
-                    configured in-line, as a comma-separated list of property=value pairs. The
-                    values are converted to appropriate types automatically. For boolean values, the
-                    value may be omitted. Example:
-                </p>
-
-                <source xml:space="preserve">
-  &lt;bean name="validator" class="org.apache.tapestry.valid.StringValidator,required,minimumLength=10"/&gt;
-</source>
-
-
-                <p>&lt;bean&gt; Elements:</p>
-                <source xml:space="preserve">
-  <a href="spec.html#spec.description">&lt;description&gt;</a> ?, (<a href="spec.html#spec.meta">&lt;meta&gt;</a> | <a
-                        href="spec.html#spec.set">&lt;set&gt;</a>) *
-</source>
-
-
-            </section><!-- spec.bean -->
-
-			<a name="spec.binding"></a>
-            <section name="&lt;binding&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.component">&lt;component&gt;</a>
-                </p>
-
-                <p>Binds a parameter of an embedded component to particular value.</p>
-
-                <p>
-                    In an instantiated component, bindings can be accessed with the OGNL expression
-                    bindings.
-                    <em>name</em>
-                    .
-                </p>
-
-                <p>
-                    If the value attribute is omitted, then the body of the element must contain the
-                    value. This is useful when the value is long, or contains problematic characters
-                    (such as a mix of single and double quotes).
-                </p>
-
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>name</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of the parameter to bind.</td>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The value to bind to the parameter.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    The value may be literal string, or a
-                    <a href="bindings.html">binding reference</a>
-                    . Binding references are divided into a
-                    <em>prefix</em>
-                    and a
-                    <em>locator</em>
-                    . The prefix identifies how the locator is interpreted.
-                </p>
-
-                <table>
-                    <tr>
-                        <th>Prefix</th>
-                        <th>Locator Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>ognl:</td>
-                        <td>
-                            The locator is an
-                            <a href="http://www.ognl.org">OGNL</a>
-                            expression. The expression is evaluated with the page or component as
-                            its root object (this is the page or component defined by the
-                            specification). This is the only type of expression that may be
-                            writeable.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>message:</td>
-                        <td>
-                            The locator is a key used to obtain a localized message for the page or
-                            component.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    <strong>Note:</strong>
-                    <br />
-                    More prefixes are forthcoming in release 4.0, and it is is also possible to
-                    define your own prefixes.
-                </p>
-
-
-            </section><!-- spec.binding -->
-
-			<a name="spec.component"></a>
-            <section name="&lt;component&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.component-specification">
-                        &lt;component-specification&gt;
-                    </a>
-                    and
-                    <a href="spec.html#spec.page-specification">&lt;page-specification&gt;</a>
-                </p>
-
-                <p>
-                    Defines an embedded component within a container (a page or another component).
-                </p>
-
-                <p>
-                    In an instantiated component, embedded components can be accessed with the OGNL
-                    expression components.
-                    <em>id</em>
-                    .
-                </p>
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>id</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            Identifier for the component here and in the component's template. Must
-                            be a valid Java identifier.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>type</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>A component type to instantiate.</td>
-                    </tr>
-                    <tr>
-                        <td>copy-of</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The name of a previously defined component. The type and bindings of
-                            that component will be copied to this component.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>inherit-informal-parameters</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then any informal parameters of the containing component will
-                            be copied into this component.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>property</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            If a name is provided, then a read-only property will be created with
-                            the given name that will allow access to the component.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>Either type or copy-of must be specified.</p>
-
-                <p>
-                    A component type is either a simple name or a qualified name. A simple name is
-                    the name of an component either provided by the framework, or provided by the
-                    application (if the page or component is defined in an application), or provided
-                    by the library (if the page or component is defined in a library).
-                </p>
-
-                <p>
-                    A qualified name is a library id, a colon, and a simple name of a component
-                    provided by the named library (for example, contrib:Palette). Library ids are
-                    defined by a
-                    <a href="spec.html#spec.library">&lt;library&gt;</a>
-                    element in the containing library or application.
-                </p>
-
-                <p>&lt;component&gt; Elements</p>
-                <source xml:space="preserve">
-  (<a href="spec.html#spec.meta">&lt;meta&gt;</a> | <a href="spec.html#spec.binding">&lt;binding&gt;</a>) *
-</source>
-
-
-            </section><!-- spec.component -->
-
-
-
-			<a name="spec.component-specification"></a>
-            <section name="&lt;component-specification&gt; element">
-			
-
-                <p>
-                    <em>root element</em>
-                </p>
-
-                <p>
-                    Defines a new component, in terms of its API (
-                    <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                    s), embedded components, beans and assets.
-                </p>
-
-                <p>
-                    The structure of a &lt;component-specification&gt; is very similar to a
-                    <a href="spec.html#spec.page-specification">&lt;page-specification&gt;</a>
-                    except components have additional attributes and elements related to parameters.
-                </p>
-
-
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>class</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The Java class to instantiate, which must implement the interface
-                            <a
-                                href="../apidocs/org/apache/tapestry/IComponent.html">
-                                IComponent
-                            </a>
-                            . If not specified,
-                            <a
-                                href="../apidocs/org/apache/tapestry/BaseComponent.html">
-                                BaseComponent
-                            </a>
-                            is used (though Tapestry 4.0 will do a
-                            <a href="page-class.html">
-                                lookup of the class based on component type
-                            </a>
-                            )
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>allow-body</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            <p>
-                                If true, then any body for this component, from its containing page
-                                or component's template, is retained and may be rendered using a
-                                <a href="../components/general/renderbody.html">RenderBody</a>
-                                component.
-                            </p>
-                            <p>
-                                If false, then any body for this component is discarded, and it is
-                                not allowed for the body to contain components.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>allow-informal-parameters</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            <p>
-                                If true, then any informal parameters (bindings that don't match a
-                                formal parameter) specified here, or in the component's tag within
-                                its container's template, are retained. Typically, they are
-                                converted into additional HTML attributes.
-                            </p>
-                            <p>
-                                If false, then informal parameters are not allowed in the
-                                specification, and discarded if in the template.
-                            </p>
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>deprecated</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then using the component will generate a warning. This is used
-                            to mark obsolete components. The component's documentation should
-                            indicate what component replaces the deprecated component.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>&lt;component-specification&gt; Elements</p>
-                <source xml:space="preserve">
-  <a href="spec.html#spec.description">&lt;description&gt;</a> ?, 
-  (<a href="spec.html#spec.parameter">&lt;parameter&gt;</a> | <a
-                        href="spec.html#spec.reserved-parameter">&lt;reserved-parameter&gt;</a> | <a
-                        href="spec.html#spec.meta">&lt;meta&gt;</a> | <a
-                        href="spec.html#spec.bean">&lt;bean&gt;</a> | 
-   <a href="spec.html#spec.component">&lt;component&gt;</a> | <a href="spec.html#spec.asset">&lt;asset&gt;</a> | <a
-                        href="spec.html#spec.property">&lt;property&gt;</a> | <a
-                        href="spec.html#spec.inject">&lt;inject&gt;</a>)*
-</source>
-
-
-            </section><!-- spec.component-specification -->
-
-
-			<a name="spec.component-type"></a>
-            <section name="&lt;component-type&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.application">&lt;application&gt;</a>
-                    and
-                    <a href="spec.html#spec.library-specification">&lt;library-specification&gt;</a>
-                </p>
-
-                <p>
-                    Defines a component type that may latter be used in a
-                    <a href="spec.html#spec.component">&lt;component&gt;</a>
-                    element (for pages and components also defined by this application or library).
-                </p>
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>type</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>A name to be used as a component type.</td>
-                    </tr>
-                    <tr>
-                        <td>specification-path</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            An absolute or relative resource path to the component's specification
-                            (including leading slash and file extension). Relative resources are
-                            evaluated relative to the location of the containing application or
-                            library specfication.
-                        </td>
-                    </tr>
-
-                </table>
-
-
-            </section><!-- spec.component-type -->
-
-			<a name="spec.configure"></a>
-			
-            <section name="&lt;configure&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.extension">&lt;extension&gt;</a>
-                </p>
-
-                <p>
-                    Allows a JavaBeans property of the extension to be set from a statically defined
-                    value. The &lt;configure&gt; element wraps around the static value. The value is
-                    trimmed of leading and trailing whitespace and optionally converted to a
-                    specified type before being assigned to the property.
-                </p>
-
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>property</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of the extension property to configure.</td>
-                    </tr>
-
-                    <tr>
-                        <td>value</td>
-                        <td />
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The value to configure, which will be converted before being assigned to
-                            the property. If not provided, the character data wrapped by the element
-                            is used instead.
-                        </td>
-                    </tr>
-
-                </table>
-
-
-
-
-            </section><!-- spec.configure -->
-
-
-			<a name="spec.description"></a>
-			
-            <section name="&lt;description&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <em>many</em>
-                </p>
-
-                <p>
-                    A description may be attached to a many different elements. Descriptions are
-                    used by an intelligent IDE to provide help. The Tapestry Inspector may also
-                    display a description.
-                </p>
-
-                <p>
-                    The descriptive text appears inside the &lt;description&gt; tags. Leading and
-                    trailing whitespace is removed and interior whitespace may be altered or
-                    removed. Descriptions should be short; external documentation can provide
-                    greater details.
-                </p>
-
-                <p>The &lt;description&gt; element has no attributes.</p>
-
-            </section><!-- spec.description -->
-
-			<a name="spec.extension"></a>
-			
-            <section name="&lt;extension&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.application">&lt;application&gt;</a>
-                    and
-                    <a href="spec.html#spec.library-specification">&lt;library-specification&gt;</a>
-                </p>
-
-                <p>
-                    Defines an extension, a JavaBean that is instantiated as needed to provide a
-                    global service to the application.
-                </p>
-
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>name</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            A name for the extension, which can (and should) look like a qualified
-                            class name, but may also include the dash character.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>class</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            The Java class to instantiate. The class must have a zero-arguments
-                            constructor.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>immediate</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, the extension is instantiated when the specification is read.
-                            If false, then the extension is not created until first needed.
-                        </td>
-                    </tr>
-
-                </table>
-
-
-                <p>&lt;extension&gt; Elements</p>
-                <source xml:space="preserve">
-  (<a href="spec.html#spec.meta">&lt;meta&gt;</a> | <a href="spec.html#spec.configure">&lt;configure&gt;</a>) *
-</source>
-
-
-            </section><!-- spec.extension -->
-
-			<a name="spec.inject"></a>
-            <section name="&lt;inject&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.component-specification">
-                        &lt;component-specification&gt;
-                    </a>
-                    and
-                    <a href="spec.html#spec.page-specification">&lt;page-specification&gt;</a>
-                    .
-                </p>
-
-                <p>
-                    <a href="injection.html">Injects</a>
-                    an object into the page or component as a property. Frequently used to inject
-                    <a href="hivemind.xml">HiveMind services</a>
-                    into a page or component, but has other uses as well.
-                </p>
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>property</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            The name of the property to be created. If the class provides an
-                            abstract accessor method, then that method defines the type of the
-                            property; otherwise java.lang.Object will be used.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>type</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td>object</td>
-                        <td>
-                            The type of injection, which determines how the object attribute is
-                            interpreted.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>object</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            The
-                            <em>object reference</em>
-                            for the object to be injected.
-
-                        </td>
-                    </tr>
-
-                </table>
-
-            </section><!-- spec.inject -->
-
-			<a name="spec.library"></a>
-            <section name="&lt;library&gt; element">
-			
-
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.application">&lt;application&gt;</a>
-                    and
-                    <a href="spec.html#spec.library-specification">&lt;library-specification&gt;</a>
-                </p>
-
-                <p>
-                    Establishes that the containing application or library uses components defined
-                    in another library, and sets the prefix used to reference those components.
-                </p>
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>id</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            The id associated with the library. Components within the library can be
-                            referenced with the component type
-                            <em>id</em>
-                            :
-                            <em>name</em>
-                            .
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>specification-path</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The complete resource path for the library specification.</td>
-                    </tr>
-
-                </table>
-
-                <p>&lt;library&gt; Elements:</p>
-                <source xml:space="preserve">
-  <a href="spec.html#spec.description">&lt;description&gt;</a> ?,
-  (<a href="spec.html#spec.meta">&lt;meta&gt;</a> | <a href="spec.html#spec.page">&lt;page&gt;</a> | <a
-                        href="spec.html#spec.component-type">&lt;component-type&gt;</a> |  <a
-                        href="spec.html#spec.library">&lt;library&gt;</a> | <a
-                        href="spec.html#spec.extension">&lt;extension&gt;</a>) *
-</source>
-
-            </section><!-- spec.library -->
-
-			<a name="spec.library-specification"></a>
-            <section name="&lt;library-specification&gt; element">
-			
-			
-
-                <p>
-                    <em>root element</em>
-                </p>
-
-                <p>
-                    Defines the pages, components, services and libraries used by a library. Very
-                    similar to
-                    <a href="spec.html#spec.application">&lt;application&gt;</a>
-                    , but without attributes related application name or engine class.
-                </p>
-
-                <p>The &lt;library-specification&gt; element has no attributes.</p>
-
-
-                <p>&lt;library-specification&gt; Elements</p>
-                <source xml:space="preserve">
-  <a href="spec.html#spec.description">&lt;description&gt;</a> ?, <a href="spec.html#spec.meta">&lt;meta&gt;</a> *,
-  (<a href="spec.html#spec.page">&lt;page&gt;</a> | <a href="spec.html#spec.component-type">&lt;component-type&gt;</a> | <a
-                        href="spec.html#spec.library">&lt;library&gt;</a> | <a
-                        href="spec.html#spec.extension">&lt;extension&gt;</a>) *
-</source>
-
-            </section><!-- spec.library-specification -->
-
-			<a name="spec.meta"></a>
-			
-            <section name="&lt;meta&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <em>many</em>
-                </p>
-
-                <p>
-                    The &lt;meta&gt; element is used to store meta-data about some other element (it
-                    is contained within). Tapestry ignores this meta-data. Any number of key/value
-                    pairs may be stored. The value is provided with the value attribute, or the
-                    character data for the &lt;meta&gt; element.
-                </p>
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>key</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of the property.</td>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The value for the property. If omitted, the value is taken from the
-                            character data (the text the tag wraps around). If specified, the
-                            character data is ignored.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    <strong>Note:</strong>
-                    <br />
-                    In the Tapestry 3.0 DTD, this element was named &lt;property&gt;.
-                </p>
-
-            </section><!-- spec.meta -->
-
-			<a name="spec.page"></a>
-            <section name="&lt;page&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.application">&lt;application&gt;</a>
-                    and
-                    <a href="spec.html#spec.library-specification">&lt;library-specification&gt;</a>
-                </p>
-
-                <p>
-                    Defines a page within an application (or contributed by a library). Relates a
-                    logical name for the page to the path to the page's specification file.
-                </p>
-
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>name</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            The name for the page, which must start with a letter, and may contain
-                            letters, numbers, underscores and the dash character.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>specification-path</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>
-                            The path to the page's specification, which may be absolute (start with
-                            a leading slash), or relative to the application or library
-                            specification.
-                        </td>
-                    </tr>
-
-                </table>
-
-
-            </section><!-- spec.page -->
-
-			<a name="spec.page-specification"></a>
-            <section name="&lt;page-specification&gt; element">
-			
-
-                <p>
-                    <em>root element</em>
-                </p>
-
-                <p>
-                    Defines a page within an application (or a library). The
-                    &lt;page-specification&gt; is a subset of
-                    <a href="spec.html#spec.component-specification">
-                        &lt;component-specification&gt;
-                    </a>
-                    with attributes and entities related to parameters removed.
-                </p>
-
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>class</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            The Java class to instantiate, which must implement the interface
-                            <a
-                                href="../apidocs/org/apache/tapestry/IPage.html">
-                                IPage
-                            </a>
-                            . Typically, this is
-                            <a
-                                href="../apidocs/org/apache/tapestry/html/BasePage.html">
-                                BasePage
-                            </a>
-                            or a subclass of it.
-                            <a
-                                href="../apidocs/org/apache/tapestry/html/BasePage.html">
-                                BasePage
-                            </a>
-                            is the default if not otherwise specified (though Tapestry 4.0 will do a
-                            <a href="page-class.html">lookup of the class based on page name</a>
-                            ).
-                        </td>
-                    </tr>
-
-                </table>
-
-
-                <p>&lt;page-specification&gt; Elements</p>
-                <source xml:space="preserve">
-  <a href="spec.html#spec.description">&lt;description&gt;</a> ?, 
-  (<a href="spec.html#spec.meta">&lt;meta&gt;</a> | <a href="spec.html#spec.bean">&lt;bean&gt;</a> | <a
-                        href="spec.html#spec.component">&lt;component&gt;</a> | <a
-                        href="spec.html#spec.asset">&lt;asset&gt;</a> | <a
-                        href="spec.html#spec.property">&lt;property&gt;</a> | <a
-                        href="spec.html#spec.inject">&lt;inject&gt;</a>)*
-</source>
-
-
-            </section><!-- spec.page-specification -->
-
-			<a name="spec.parameter"></a>
-            <section name="&lt;parameter&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.component-specification">
-                        &lt;component-specification&gt;
-                    </a>
-                </p>
-
-
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>name</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of the parameter, which must be a valid Java identifier.</td>
-                    </tr>
-
-
-                    <tr>
-                        <td>required</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then the parameter must be bound (though it is possible that
-                            the binding's value will still be null).
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>property</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            Allows the name of the property to differ from the name of the
-                            parameter. If not specified, the property name will be the same as the
-                            parameter name.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>default-value</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            Specifies the default value for the parameter, if the parameter is not
-                            bound. This value is a
-                            <em>
-                                <a href="bindings.html">binding reference</a>
-                            </em>
-                            , exactly like a
-                            <a href="spec.html#spec.binding">&lt;binding&gt;</a>
-                            element's value attribute.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>cache</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>true</td>
-                        <td>
-                            If true (the default), then the parameter property will cache the
-                            parameter property for the duration of the components' render. if false,
-                            then the parameter property will not cache the value, and each access to
-                            the property will result in re-obtaining the value via the binding
-                            object. Note that invariant bindings (most bindings except for "ognl")
-                            will always be accessed just once and cached.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>aliases</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            An optional, comma-seperated list of alises for the parameter. Aliases
-                            are used to maintain backwards compatibility when a parameter name is
-                            changed. A parameter may be bound using an aliased name, but a warning
-                            will be logged.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>deprecated</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then binding the parameter will generate a runtime warning.
-                            This is used when a parameter is being removed entirely in a later
-                            release.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    To a component, component parameters appear as new properties that can be read
-                    and updated (in Java code, or using OGNL). As with specified properties, you may
-                    define abstract accessor methods in you Java code, to allow type-safe access to
-                    the parameter values.
-                </p>
-
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                    In Tapestry 3.0 and earlier, it was necesary to specify a
-                    <em>parameter direction</em>
-                    , which informed Tapestry about how the parameter was used by the component.
-                    This allowed Tapestry to properly control when values moved between a component
-                    and its container ... but was an awkward solution. Tapestry 4.0 adds much more
-                    sophisticated runtime code generation for parameters so they
-                    <em>just work</em>
-                    , regardless of whether you access a parameter property while the component is
-                    rendering, in a listener method, or at some other time entirely.
-                    </p>
-                </span>
-
-            </section><!-- spec.parameter -->
-            
-            <a name="property"></a>
-            <section name="&lt;property&gt; element">
-
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.component-specification">
-                        &lt;component-specification&gt;
-                    </a>
-                    ,
-                    <a href="spec.html#spec.page-specification">&lt;page-specification&gt;</a>
-                </p>
-
-                <p>
-                    Defines a transient or persistent property to be added to the page or component.
-                    Tapestry will create a subclass of the page or component class (at runtime) and
-                    add the necessary fields and accessor methods, as well as end-of-request
-                    cleanup.
-                </p>
-
-                <p>
-                    It is acceptible for a page (or component) to be abstract, and have abstract
-                    accessor methods matching the names that Tapestry will generate for the
-                    subclass. This can be useful when setting properties of the page (or component)
-                    from a
-                    <a href="listenermethods.html">listener method</a>
-                    .
-                </p>
-
-                <p>
-                    A connected parameter specified in a
-                    <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                    element may also cause an enhanced subclass to be created.
-                </p>
-
-                <p>
-                    An initial value may be specified as either the initial-value attribute, or as
-                    the body of the &lt;property&gt; element itself.
-                </p>
-
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>name</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of the property to create.</td>
-                    </tr>
-                    <tr>
-                        <td>persist</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td>no</td>
-                        <td>
-                            If blank (the default), then the property is transient (i.e., not
-                            persistent). Otherwise, the name of a persistence strategy must be
-                            supplied. The most common persistence strategy is "session" (the
-                            property is stored into an HttpSession attribute) - see
-                            <a href="state.html#state.page-properties.types">
-                                Managing server-side state
-                            </a>
-                            for more details.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>initial-value</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            An optional
-                            <a href="bindings.html">binding reference</a>
-                            used to initialize the property. The default prefix for the refrence is
-                            "ognl:".
-                        </td>
-                    </tr>
-
-                </table>
-
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                    In the Tapestry 3.0 DTD, this element was named &lt;property-specification&gt;
-                    and had an additional attribute, type. In Tapestry 4.0, the type of the
-                    implemented property will simply match the type of any existing (abstract)
-                    property, or will default to Object. In addition, Tapestry 3.0 only had
-                    persistent or not persistent; Tapestry 4.0 has different kinds of persistence,
-                    denoted by the different strategies. Tapestry 3.0 persistence is equivalent to
-                    Tapestry 4.0 "session" persistence.
-                    </p>
-                </span>
-
-            </section><!-- spec.property -->
-
-			<a name="spec.reserved-parameter"></a>
-            <section name="&lt;reserved-parameter&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.component-specification">
-                        &lt;component-specification&gt;
-                    </a>
-                </p>
-
-                <p>
-                    Used in components that allow informal parameters to limit the possible informal
-                    parameters (so that there aren't conflicts with HTML attributes generated by the
-                    component).
-                </p>
-
-                <p>All formal parameters are automatically reserved.</p>
-
-                <p>
-                    Comparisons are caseless, so an informal parameter of "SRC", "sRc", etc., will
-                    match a reserved parameter named "src" (or any variation), and be excluded.
-                </p>
-
-
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>name</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of the reserved parameter.</td>
-                    </tr>
-
-                </table>
-
-
-
-            </section><!-- spec.reserved-parameter -->
-	
-			<a name="spec.set"></a>
-            <section name="&lt;set&gt; element">
-			
-
-                <p>
-                    Appears in:
-                    <a href="spec.html#spec.bean">&lt;bean&gt;</a>
-                </p>
-
-                <p>
-                    Allows a property of a managed bean to be set to a value obtained via a
-                    <a href="bindings.html">binding reference</a>
-                    .
-                </p>
-
-                <table>
-
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required ?</th>
-                        <th>Default Value</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>name</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td />
-                        <td>The name of the helper bean property to set.</td>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td />
-                        <td>
-                            A
-                            <a href="bindings.html">binding reference</a>
-                            that provides the value to assign to the bean property.
-                        </td>
-                    </tr>
-
-                </table>
-
-
-            </section><!-- spec.set -->
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/state.xml b/tapestry/src/site/xdoc/usersguide/state.xml
deleted file mode 100644
index ab3ccc4..0000000
--- a/tapestry/src/site/xdoc/usersguide/state.xml
+++ /dev/null
@@ -1,727 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Managing server-side state</title>
-    </properties>
-    <body>
-
-        <section name="Managing server-side state">
-
-            <p>
-                Server-side state is any information that exists on the server, and persists between
-                requests. This can be anything from a single flag all the way up to a large database
-                result set. In a typical application, server-side state is the identity of the user
-                (once the user logs in) and, perhaps, a few important domain objects (or, at the
-                very least, primary keys for those objects).
-            </p>
-
-            <p>
-                In an ordinary servlet application, managing server-side state is entirely the
-                application's responsibility. The Servlet API provides just the HttpSession, which
-                acts like a Map, relating keys to arbitrary objects. It is the application's
-                responsibility to obtain values from the session, and to update values into the
-                session when they change.
-            </p>
-
-            <p>
-                Tapestry takes a different tack; it defines server side state in terms of either
-                entire objects (
-                <a href="state.html#state.aso">application state object</a>
-                s) or by allowing specific page or component properties to be persistent.
-            </p>
-
-            <section name="Understanding servlet state">
-
-
-
-                <p>
-                    Managing server-side state is one of the most complicated and error-prone
-                    aspects of web application design, and one of the areas where Tapestry provides
-                    the most benefit. Generally speaking, Tapestry applications which are functional
-                    within a single server will be functional within a cluster with no additional
-                    effort. This doesn't mean planning for clustering, and testing of clustering, is
-                    not necessary; it just means that, when using Tapestry, it is possible to narrow
-                    the design and testing focus. The Tapestry framework embraces the correct
-                    best-practices for managing client state on either a single server or a cluster
-                    of services.
-                </p>
-
-                <p>
-                    The point of server-side state is to ensure that information about the user
-                    acquired during the session is available later in the same session. The
-                    canonical example is an application that requires some form of login to access
-                    some or all of its content; the identify of the user must be collected at some
-                    point (in a login page) and be generally available to other pages.
-                </p>
-
-                <p>
-                    The other aspect of server-side state concerns failover. Failover is an aspect
-                    of highly-available computing where the processing of the application is spread
-                    across many servers. A group of servers used in this way is referred to as a
-                    <em>cluster</em>
-                    . Generally speaking (and this may vary significantly between vendor's
-                    implementations) requests from a particular client will be routed to the same
-                    server within the cluster.
-                </p>
-
-                <p>
-                    In the event that the particular server in question fails (crashes unexpectedly,
-                    or otherwise brought out of service), future requests from the client will be
-                    routed to a different, surviving server within the cluster. This failover event
-                    should occur in such a way that the client is unaware that anything exceptional
-                    has occured with the web application; and this means that any server-side state
-                    gathered by the original server must be available to the backup server.
-                </p>
-
-                <p>
-                    The main mechanism for handling this using the Java Servlet API is the
-                    HttpSession. The session can store
-                    <em>attributes</em>
-                    , much like a Map. Attributes are object values referenced with a string key. In
-                    the event of a failover, all such attributes are expected to be available on the
-                    new, backup server, to which the client's requests are routed.
-                </p>
-
-                <p>
-                    Different application servers implement HttpSession replication and failover in
-                    different ways; the servlet API specification is delibrately non-specific on how
-                    this implementation should take place. Tapestry follows the conventions of the
-                    most limited interpretation of the servlet specification; it assumes that
-                    attribute replication only occurs when the HttpSession
-                    <code>setAttribute()</code>
-                    method is invoked.
-                </p>
-
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                    This is the replication strategy employed by BEA's WebLogic server.
-                    </p>
-                </span>
-
-                <p>
-                    Attribute replication was envisioned as a way to replicate simple, immutable
-                    objects such as String or Integer. Attempting to store mutable objects, such as
-                    List, Map or some user-defined class, can be problematic. For example, modifying
-                    an attribute value after it has been stored into the HttpSession may cause a
-                    failover error. Effectively, the backup server sees a snapshot of the object at
-                    the time that
-                    <code>setAttribute()</code>
-                    was invoked; any later change to the object's internal state is
-                    <em>not</em>
-                    replicated to the other servers in the cluster! This can result in strange and
-                    unpredictable behavior following a failover.
-                </p>
-
-                <p>
-                    Tapestry attempts to sort out the issues involving server-side state in such a
-                    way that they are invisible to the developer. Most applications will not need to
-                    explicitly access the HttpSession at all, but may still have significant amounts
-                    of server-side state. The following sections go into more detail about how
-                    Tapestry approaches these issues.
-                </p>
-
-
-            </section><!-- state.general -->
-
-            <section name="Persistent page properties">
-
-
-                <p>
-                    Servlets, and by extension, JavaServer Pages, are inherently stateless. That is,
-                    they will be used simultaneously by many threads and clients. Because of this,
-                    they must not store (in instance variables) any properties or values that are
-                    specific to any single client.
-                </p>
-
-                <p>
-                    This creates a frustration for developers, because ordinary programming
-                    techniques must be avoided. Instead, client-specific state and data must be
-                    stored in the HttpSession or as HttpServletRequest attributes. This is an
-                    awkward and limiting way to handle both
-                    <em>transient</em>
-                    state (state that is only needed during the actual processing of the request)
-                    and
-                    <em>persistent</em>
-                    state (state that should be available during the processing of this and
-                    subsequent requests).
-                </p>
-
-                <p>
-                    Tapestry bypasses most of these issues by
-                    <em>not</em>
-                    sharing objects between threads and clients. Tapestry uses an
-                    <em>object pool</em>
-                    to store constructed page instances. As a page is needed, it is removed from the
-                    page pool. If there are no available pages in the pool, a fresh page instance is
-                    constructed.
-                </p>
-
-                <p>
-                    For the duration of a request, a page and all components within the page are
-                    reserved to the single request. There is no chance of conflicts because only the
-                    single thread processing the request will have access to the page. At the end of
-                    the request cycle, the page is reset back to a pristine state and returned to
-                    the shared pool, ready for reuse by the same client, or by a different client.
-                </p>
-
-                <p>
-                    In fact, even in a high-volume Tapestry application, there will rarely be more
-                    than a few instances of any particular page in the page pool.
-                </p>
-
-                <p>
-                    For this scheme to work it is important that, at the end of the request cycle,
-                    the page be returned to its
-                    <em>pristine state</em>
-                    . The prisitine state is equivalent to a freshly created instance of the page.
-                    In other words, any properties of the page that changed during the processing of
-                    the request must be returned to their initial values.
-                </p>
-
-                <p>
-                    The page is then returned to the page pool, where it will wait to be used in a
-                    future request. That request may be for the same end user, or for another user
-                    entirely.
-                </p>
-
-                <span class="warn">
-                    <strong>Warning:</strong>
-                    <p>
-                    Imagine a page containing a form in which a user enters their address and credit
-                    card information. When the form is submitted, properties of the page will be
-                    updated with the values supplied by the user. Those values must be cleared out
-                    before the page is stored into the page pool ... if not, then the
-                    <em>next</em>
-                    user who accesses the page will see the previous user's address and credit card
-                    information as default values for the form fields!
-                    </p>
-                </span>
-
-                <p>
-                    Tapestry separates the persistent state of a page from any instance of the page.
-                    This is very important, because from one request cycle to another, a different
-                    instance of the page may be used ... even when clustering is not used. Tapestry
-                    has many copies of any page in a pool, and pulls an arbitrary instance out of
-                    the pool for each request.
-                </p>
-
-                <p>
-                    In Tapestry, a page may have many properties and may have many components, each
-                    with many properties, but only a tiny number of all those properties needs to
-                    persist between request cycles. On a later request, the same or different page
-                    instance may be used. With a little assistance from the developer, the Tapestry
-                    framework can create the illusion that the same page instance is being used in a
-                    later request, even though the request may use a different page instance (from
-                    the page pool) ... or (in a clustering environment) may be handled by a
-                    completely different server.
-                </p>
-
-                <p>
-                    Tapestry is flexible about how these properties are ultimately stored. Tapestry
-                    3.0 and earlier were less so ... persistent page properties were always stored
-                    in the HttpSession. Starting in release 4.0, persistent page properties may be
-                    stored in the session, or on the client.
-                </p>
-
-                <subsection name="Using Persistent Page Properties">
-
-
-                    <p>
-                        Persistent properties make use of a
-                        <a href="spec.html#spec.property">&lt;property&gt;</a>
-                        element in the page or component specification. Tapestry does something
-                        special when a component contains any such elements; it dynamically
-                        fabricates a subclass that provides the desired fields, methods and whatever
-                        extra initialization or cleanup is required.
-                    </p>
-
-                    <p>
-                        You may also, optionally, make your page or component class abstract, and
-                        define abstract accessor methods that will be filled in by Tapestry in the
-                        fabricated subclass. This allows you to read and update properties inside
-                        your Java code, such as inside listener methods.
-                    </p>
-
-                    <span class="info">
-                        <strong>Note:</strong>
-                        <p>
-                        You only need to define abstract accessor methods if you are going to invoke
-                        those accesor methods in your code, such as in a
-                        <a href="listenermethods.html">listener method</a>
-                        . Tapestry will create an enhanced subclass that contains the new field, a
-                        getter method and a setter method, plus any necessary initialization
-                        methods. If you are only going to access the property using OGNL
-                        expressions, then there's no need to define either accessor method.
-                        </p>
-                    </span>
-
-                    <span class="info">
-                        <strong>Note:</strong>
-                        <p>
-                        Properties defined this way may be either transient or persistent. For
-                        transient properties (properties which do not persist between requests), it
-                        is only necessary to specify the property (with a
-                        <a href="spec.html#spec.property">&lt;property&gt;</a>
-                        element) if it has an initial value. Tapestry scans the component class
-                        looking for abstract properties that don't match up against component
-                        parameters or
-                        <a href="spec.html#spec.property">&lt;property&gt;</a>
-                        elements; for each of these unclaimed properties, a concrete property is
-                        created. The property is a transient property, exactly as if a
-                        <a href="spec.html#spec.property">&lt;property&gt;</a>
-                        element
-                        <em>did</em>
-                        exist for it.
-                        </p>
-                    </span>
-
-                    <p>A page class that uses a specified property:</p>
-                    <source xml:space="preserve">
-package mypackage;
-
-import org.apache.tapestry.html.BasePage;
-	
-public abstract class MyPage extends <a
-                            href="../apidocs/org/apache/tapestry/html/BasePage.html">BasePage</a>
-{
-    abstract public int getItemsPerPage();
-	
-    abstract public void setItemsPerPage(int itemsPerPage);
-}
-</source>
-
-                    <p>
-                        This is combined with a
-                        <a href="spec.html#spec.property">&lt;property&gt;</a>
-                        element in the page's specification:
-                    </p>
-
-                    <source xml:space="preserve">
-
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd"&gt;
-	
-&lt;page-specification class="mypackage.MyPage"&gt;
-
-  &lt;property
-    name="itemsPerPage"
-    persist="session"
-    initial-value="10"/&gt;
-
-&lt;/page-specification&gt;
-
-</source>
-
-                    <p>
-                        Again, making the class abstract, and defining abstract accessors is
-                        <em>optional</em>
-                        . It is only useful when a method within the class will need to read or
-                        update the property. It is also valid to just implement one of the two
-                        accessors. The enhanced subclass will always include both a getter and a
-                        setter.
-                    </p>
-
-                    <span class="info">
-                        <strong>Note:</strong>
-                        <p>
-                        In Tapestry 3.0, many users were frustrated that they had to specify the
-                        type of property in both the Java code and in the page specification. This
-                        is a violation of the
-                        <a href="http://c2.com/cgi/wiki?DontRepeatYourself">Dont Repeat Yourself</a>
-                        principal -- requiring coordination is just an invitation for the two sides
-                        to get out of synchronization. Starting with Tapestry 4.0, there is no type
-                        attribute on the
-                        <a href="spec.html#spec.property">&lt;property&gt;</a>
-                        element; instead Tapestry matches the type to the property type of any
-                        existing accessor methods, and simply uses Object when there are no accessor
-                        methods. In this example, the persistent itemsPerPage property will be type
-                        int, because of the abstract accessor methods.
-                        </p>
-                    </span>
-
-                    <p>
-                        This exact same technique can be used with components as well as pages, the
-                        component specification also supports the
-                        <a href="spec.html#spec.property">&lt;property&gt;</a>
-                        element.
-                    </p>
-
-                    <p>
-                        When an initial-value is provided, it is evaluated once inside
-                        <code>finishLoad()</code>
-                        , but then again every time the page is detached (returned to pristine
-                        state) before being stored into the page pool for later re-use. By default,
-                        it is an
-                        <a href="http://www.ognl.org">OGNL</a>
-                        expression, but this can be overriden by providing a
-                        <a href="bindings.html">binding reference</a>
-                        prefix.
-                    </p>
-
-
-                    <p>
-                        This means that you may perform initialization for the property inside
-                        <code>finishLoad()</code>
-                        (instead of providing an initial-value). However, don't attempt to update
-                        the property from
-                        <code>initialize()</code>
-                        ... the order of operations when the page detaches is not defined and is
-                        subject to change.
-                    </p>
-
-                    <span class="warn">
-                        <strong>Warning:</strong>
-                        <p>
-                        If the values stored as a persistent property is
-                        <em>mutable</em>
-                        (for example, a List, or a Map, or some custom Java class), you should
-                        <em>not</em>
-                        modify its internal state once it has been stored into the persistent page
-                        property. Changes to internal state of a persistent property, after it has
-                        been stored, may
-                        <em>not</em>
-                        be propogated to other servers in the cluster (this is really a function of
-                        how session replication is implemented by the application server, it has
-                        very little to do with Tapestry). Similar problems concerning mis-matched
-                        state can occur with client persistence.
-                        </p>
-                    </span>
-
-                </subsection><!-- state.page-properties.using -->
-
-                <subsection name="Persistence Types">
-
-
-                    <p>
-                        Tapestry defines two basic types of property persistence. The type of
-                        persistence (internally known as the
-                        <em>property persistence strategy</em>
-                        ) is defined by the value of the persist attribute (in the
-                        <a href="spec.html#spec.property">&lt;property&gt;</a>
-                        element). Omitting the persist attribute, or not providing a
-                        <a href="spec.html#spec.property">&lt;property&gt;</a>
-                        element, indicates a
-                        <em>transient</em>
-                        page property, one which does not persist from request to request.
-                    </p>
-
-                    <dl>
-                        <dt>client</dt>
-                        <dd>
-                            Client properties are stored on the client, in the form of query
-                            parameters. All persistent properties for each page are encoded into a
-                            single query parameter, named
-                            <code>state:</code>
-                            <em>PageName</em>
-                            . The query parameter value is a MIME encoded byte stream. This can get
-                            quite long if there are many client persistent properties on the page
-                            ... which may quickly run into limitations on the maximum size of a URL
-                            (approximately 4000 characters is a good guideline). This is less a
-                            problem for forms.
-                        </dd>
-                        <dt>session</dt>
-                        <dd>
-                            The traditional style of property persistence (and the only kind
-                            available in Tapestry 3.0 and earlier). Each persistent property is
-                            mapped to a HttpSession attribute.
-                        </dd>
-                    </dl>
-
-                    <p>
-                        More such stategies are expected; these will give more control over the
-                        lifecycle of the page property.
-                    </p>
-
-                    <span class="info">
-                        <strong>Fixme:</strong>
-                        <p>
-                        Mind Bridge has added (or changed) these, adding a concept of "scope" for
-                        how long a property will persist. This documentation needs to be updated.
-                        </p>
-                    </span>
-                </subsection><!-- state.page-properties.types -->
-
-            </section><!-- state.page-properties -->
-
-            <section name="Application state objects">
-
-
-                <p>
-                    What happens when you have objects that are needed by multiple pages? For that,
-                    you need an
-                    <em>application state object</em>
-                    . ASO's are global objects that can be
-                    <a href="#state.aso.access">accessed</a>
-                    from any page or component in the application. Each ASO has a unique name (the
-                    two default ASO's are called "visit" and "global" for historical reasons). An
-                    ASO is created when first referenced by any page. ASO's with session scope are
-                    stored into the HttpSession at the end of the request (and
-                    <a href="#state.stateless">may force the creation of the session</a>
-                    ). ASOs in the application scope are available to any and all users.
-                </p>
-
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                    Tapestry 3.0 had a more limited form of ASO: The Visit object and the Global
-                    object. The Visit object is session scope, the Global object is application
-                    scope. This concept has been extended in Tapestry 4.0 to allow any number of
-                    ASOs with any desired scope, and lots of flexibility on how ASOs get created.
-                    The Visit and Global still exist in 4.0, as default ASOs you can use or
-                    override.
-                    </p>
-                </span>
-
-                <subsection name="Defining new Application State Objects">
-
-
-                    <p>
-                        To create a new ASO, you must update your
-                        <a href="hivemind.html">HiveMind module deployment descriptor</a>
-                        and add a contribution to the
-                        <a
-                            href="../tapestry-framework/hivedoc/config/tapestry.state.ApplicationObjects.html">
-                            tapestry.state.ApplicationObjects
-                        </a>
-                        configuration point:
-                    </p>
-
-                    <source xml:space="preserve">
-&lt;contribution configuration-id="tapestry.state.ApplicationObjects"&gt;
-  &lt;state-object name="registration-data" scope="session"&gt;
-    &lt;create-instance class="org.example.registration.RegistrationData"/&gt;
-  &lt;/state-object&gt;  
-&lt;/contribution&gt;
-</source>
-
-                    <p>
-                        This defines an ASO named registration-data that is session scoped (stored
-                        in the HttpSession once created). The first time it is referenced, an
-                        instance of RegistrationData is created and stored into the session.
-                    </p>
-
-                    <p>
-                        If your data object can't be created using a simple constructor, then you
-                        can supply an &lt;invoke-factory&gt; element instead of
-                        &lt;create-instance&gt;. &lt;invoke-factory&gt; allows you to reference an
-                        object or service that implements the
-                        <a
-                            href="../apidocs/org/apache/tapestry/engine/state/StateObjectFactory.html">
-                            StateObjectFactory
-                        </a>
-                        interface.
-                    </p>
-
-                    <span class="info">
-                        <strong>Note:</strong>
-                        <p>
-                        The two default ASOs, "visit" and "global", are defined in the
-                        hivemind.state.FactoryObjects configuration point. Definitions in the
-                        ApplicationObjects configuration point override definitions in
-                        FactoryObjects with the same name.
-                        </p>
-                    </span>
-
-                </subsection><!-- state.aso.defining -->
-
-                <subsection name="Accessing Application State Objects">
-
-
-                    <p>
-                        Tapestry provides an
-                        <a href="spec.html#spec.inject">&lt;inject&gt;</a>
-                        element to support access to the application state objects. This element can
-                        be used in any page or component specification to create a new property.
-                        Reading the property will obtain the corresponding state object (which will
-                        be created if necessary). The property may be updated, which will store a
-                        new application state object, overwriting the automatically created one.
-                    </p>
-
-                    <p>For example:</p>
-
-                    <source xml:space="preserve">
-&lt;inject property="registration" type="state" object="registration-data"/&gt;
-</source>
-
-                    <p>
-                        This will create a
-                        <code>registration</code>
-                        property, which can be wired to components. Your class may define accessors
-                        for this property, in which case you should be sure that the application
-                        state object is assignable.
-                    </p>
-
-                    <span class="warn">
-                        <strong>Warning:</strong>
-                        <p>
-                        The
-                        <a href="../apidocs/org/apache/tapestry/IPage.html">
-                            IPage
-                        </a>
-                        interface defines two read-only properties:
-                        <code>visit</code>
-                        and
-                        <code>global</code>
-                        . These are both type Object. This is a holdover from Tapestry 3.0, which
-                        only supported these two application state objects. If you want to access
-                        the visit or the global application state objects without needing casts, you
-                        will have to inject as a differently named property (say
-                        <code>appVisit</code>
-                        or
-                        <code>visitObject</code>
-                        ).
-                        </p>
-                    </span>
-
-
-                </subsection><!-- state.aso.access -->
-
-                <subsection name="Optimizing Storage">
-
-
-                    <p>
-                        Normally, Tapestry has no way of knowing when the internal state of an ASO
-                        has changed. On any request where the ASO is accessed, Tapestry assumes that
-                        its internal state has changed. The ASO is re-stored at the end of the
-                        request. For session-scoped ASOs in a cluster, this is critical to ensure
-                        that information is properly distributed around the cluster.
-                    </p>
-
-                    <p>
-                        However, it can also be expensive. Assuming that your application mostly
-                        <em>reads</em>
-                        information out of the ASO, that means a lot of wasted resources needlessly
-                        copying the ASO around the cluster.
-                    </p>
-
-                    <p>
-                        To control this, ASOs may
-                        <em>optionally</em>
-                        implement the
-                        <a
-                            href="../apidocs/org/apache/tapestry/SessionStoreOptimized.html">
-                            SessionStoreOptimized
-                        </a>
-                        interface. The method isStoreToSessionNeeded() will be checked; if it
-                        returns false, the object will
-                        <em>not</em>
-                        be stored.
-                    </p>
-
-                    <p>
-                        Typically, the ASO will store a dirty flag, and will set the dirty flag on
-                        any change to internal state. The flag will be returned by
-                        isStoreToSessionNeeded(). The ASO will also implement the
-                        HttpSessionBindingListener interface, and clear the flag in valueBound().
-                    </p>
-
-                    <p>
-                        A base class,
-                        <a
-                            href="../apidocs/org/apache/tapestry/BaseSessionStoreOptimized.html">
-                            BaseSessionStoreOptimized
-                        </a>
-                        , implements this behavior.
-                    </p>
-
-                </subsection>
-
-            </section><!-- state.aso -->
-
-            <section name="Stateless applications">
-
-
-                <p>
-                    In a Tapestry application, the framework acts as a buffer between the
-                    application code and the Servlet API ... in particular, it manages how data is
-                    stored into the HttpSession. In fact, the framework controls
-                    <em>when</em>
-                    the session is first created.
-                </p>
-
-                <p>
-                    This is important and powerful, because an application that runs, even just
-                    initially, without a session consumes far less resources than a stateful
-                    application. This is even more important in a clustered environment with
-                    multiple servers; any data stored into the HttpSession will have to be
-                    replicated to other servers in the cluster, which can be expensive in terms of
-                    resources (CPU time, network bandwidth, and so forth). Using less resources
-                    means better throughput and more concurrent clients, always a good thing in a
-                    web application.
-                </p>
-
-                <p>
-                    Tapestry defers creation of the HttpSession until one of two things happens:
-                    When a session-scoped
-                    <a href="state.html#state.aso">application state object</a>
-                    is first created, or when the first persistent page property is recorded. At
-                    this point, Tapestry will create the HttpSession to hold the object or property.
-                </p>
-
-
-                <p>
-                    For the most part, your application will be unaware of when it is stateful or
-                    stateless; statefulness just happens on its own. Ideally, at least the first, or
-                    <code>Home</code>
-                    page, should be stateless (it should be organized in such a way that the Visit
-                    object is not created, and no persistent state is stored). This will help speed
-                    the initial display of the application, since no processing time will be used in
-                    creating the HttpSession.
-                </p>
-
-                <p>
-                    The
-                    <code>state:</code>
-                    <a href="bindings.html">binding reference</a>
-                    combined with the
-                    <a href="../components/general/if.html">If</a>
-                    component makes it easy for you to skip portions of a page if a particular ASO
-                    does not already exist; this allows you to avoid accidentally forcing its
-                    creation on first reference.
-                </p>
-
-                <p>
-                    The application may be
-                    <em>stateless</em>
-                    even when it has persistent page properties, if those properties use the
-                    <em>client</em>
-                    persistence strategy (which encodes pesistent page data into URLs as query
-                    parameters). This can be a very powerful approach, though it introduces its own
-                    problems:
-                </p>
-
-                <ul>
-                    <li>
-                        The query parameters are an encoding of Java objects, and could be decoded
-                        to expose privileged information.
-                    </li>
-                    <li>
-                        The encoding of page state can result in very long strings included as part
-                        of URLs, possibly extending beyond the 3000 to 4000 character effective
-                        maximum URL length.
-                    </li>
-                </ul>
-            </section><!-- state.stateless -->
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/template.xml b/tapestry/src/site/xdoc/usersguide/template.xml
deleted file mode 100644
index 3ff8fa0..0000000
--- a/tapestry/src/site/xdoc/usersguide/template.xml
+++ /dev/null
@@ -1,899 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Page and component templates</title>
-    </properties>
-    <body>
-
-        <section name="Page and component templates">
-            <p>
-                Unlike many other web frameworks, such as
-                <a href="http://struts.apache.org/">Struts</a>
-                or
-                <a href="http://opensymphony.com/webwork/">WebWork</a>
-                , Tapestry does not "plug into" an external templating system such as JavaServer
-                Pages or
-                <a href="http://velocity.apache.org/">Velocity</a>
-                . Instead, Tapestry integrates its own templating system.
-            </p>
-
-            <p>
-                Tapestry templates are designed to look like valid HTML files (component HTML
-                templates will just be snippets of HTML rather than complete pages). Tapestry
-                "hides" its extensions into special attributes of ordinary HTML elements.
-            </p>
-
-            <p>
-                Don't be fooled by the terminology; we say "HTML templates" because that is the
-                prevalent use of Tapestry ... but Tapestry is equally adept at WML or XML.
-            </p>
-
-            <subsection name="Template locations">
-                <p>
-                    The general rule of thumb is that a page's HTML template is simply an HTML file,
-                    stored in the context root directory. That is, you'll have a
-                    <em>MyPage</em>.html HTML template, a WEB-INF/
-                    <em>MyPage</em>.page page specification, and a
-                    <em>MyPage</em> class, in some Java package.
-                </p>
-
-                <p>
-                    Tapestry always starts knowing the name of the page and the location of the
-                    page's specification when it searches for the page's HTML template. Starting
-                    with this, it performs the following search:
-                </p>
-
-                <ul>
-                    <li>In the same location as the specification</li>
-                    <li>
-                        In the web application's context root directory (if the page is an
-                        application page, not a page from a component library)
-                    </li>
-                </ul>
-
-                <p>
-                    In addition, any HTML template in the web application context is considered a
-                    page, even if there is no matching page specification. For simple pages that
-                    don't need to have any page-specific logic or properties, there's no need for a
-                    page specification. Such a page may still use the special Tapestry attributes
-                    (described in the following sections).
-                </p>
-
-                <p>
-                    Finally, with some
-                    <a href="configuration.html#configuration.search-path">minor configuration</a>
-                    it is possible to change the extension used for templates. For example, if you
-                    are developing a WML application, you may wish to name your application's
-                    template files with the extension .wml.
-                </p>
-
-            </subsection><!-- template.locations -->
-
-            <subsection name="Template Contents">
-
-
-                <p>Tapestry templates contain a mix of the following elements:</p>
-
-                <ul>
-                    <li>Static HTML markup</li>
-                    <li>Tapestry components</li>
-                    <li>Localized messages</li>
-                    <li>Special template directives</li>
-                </ul>
-
-                <p>
-                    Usually, about 90% of a template is ordinary HTML markup. Hidden inside that
-                    markup are particular tags that are placeholders for Tapestry components; these
-                    tags are recognized by the presence of the jwcid attribute. "JWC" is short for
-                    "Java Web Component", and was chosen as the "magic" attribute so as not to
-                    conflict with any real HTML attribute.
-                </p>
-
-
-                <p>
-                    Tapestry's parser is quite flexible, accepting all kinds of invalid HTML markup.
-                    That is, attributes don't
-                    <em>have</em>
-                    to be quoted. Start and end tags don't have to balance. Case is ignored when
-                    matching start and end tags. Basically, the kind of ugly HTML you'll find "in
-                    the field" is accepted.
-                </p>
-
-                <p>
-                    The goal is to allow you to preview your HTML templates using a WYSIWYG HTML
-                    editor (or even an ordinary web browser). The editor will ignore the undefined
-                    HTML attributes (such as jwcid).
-                </p>
-
-                <p>
-                    A larger goal is to support real project teams: The special markup for Tapestry
-                    is unobtrusive, even invisible. This allows an HTML designer to work on a
-                    template without breaking the dynamic portions of it. Importantly, the designers
-                    can work with their normal tools and editors. This is completely unlike JSPs,
-                    where the changes to support dynamic output are extremely intrusive and result
-                    in a file that is meaningless to an HTML editor.
-                </p>
-
-            </subsection><!-- template.contents -->
-
-            <subsection name="Components in templates">
-
-
-                <p>
-                    Components can be placed anywhere inside a template, simply by adding the jwcid
-                    attribute to any existing tag. For example:
-                </p>
-
-                <source xml:space="preserve">&lt;html&gt;
-  &lt;head&gt;
-    &lt;title&gt;Example HTML Template&lt;/title&gt;
-  &lt;/head&gt;
-  &lt;body
-    &lt;span jwcid="border"&gt;
-    
-      Hello,
-      &lt;span jwcid="@Insert" value="ognl:user.name"&gt;Joe User&lt;/span&gt;
-    &lt;/span&gt;
-  &lt;/body&gt;
-&lt;/html&gt;</source>
-
-                <p>
-                    The first span is a reference to a
-                    <em>declared component</em>
-                    ; the type and parameters of the component are declared in the page's
-                    specification.
-                </p>
-
-                <p>
-                    The second span is an
-                    <em>implicit component</em>
-                    ; the type of the component is
-                    <a href="../components/general/insert.html">Insert</a>
-                    . The value parameter is bound to the
-                    <a href="http://www.ognl.org">OGNL</a>
-                    expression
-                    <code>user.name</code>
-                    .
-                </p>
-
-                <p>
-                    The point of all this is that the HTML template should preview properly in a
-                    WYSIWYG HTML editor. Unlike
-                    <a href="http://jakarta.apache.org/velocity/">Velocity</a>
-                    or JSPs, there are no strange directives to get in the way of a preview (or
-                    necessitate a special editting tool), Tapestry hides what's needed inside
-                    existing tags; at worst, it adds a few non-standard attributes (such as jwcid)
-                    to tags. This rarely causes a problem with most HTML editors.
-                </p>
-
-                <p>
-                    Templates may contain components using two different styles.
-                    <em>Declared components</em>
-                    are little more than a placeholder; the type of the component is defined
-                    elsewhere, in the page (or component) specification.
-                </p>
-
-                <p>
-                    Alternately, an
-                    <em>implicit component</em>
-                    can be defined in place, by preceding the component type with an "@" symbol.
-                    Tapestry includes over forty components with the framework, additional
-                    components may be created as part of your application, or may be provided inside
-                    a component library.
-                </p>
-
-                <p>
-                    In the above example, a &lt;span&gt; was used for both components. Tapestry
-                    doesn't care what tag is used for a component, as long as the start and end tags
-                    for components balance (it doesn't even care if the case of the start tag
-                    matches the case of the end tag). The example could just as easily use
-                    &lt;div&gt; or &lt;fred&gt;, the rendered page sent back to the client web
-                    browser will be the same.
-                </p>
-
-                <p>
-                    The default attribute name is
-                    <code>jwcid</code>
-                    , but there are occasions when that is not desirable. The
-                    org.apache.tapestry.jwcid-attribute-name
-                    <a href="configuration.html#configuration.properties">configuration property</a>
-                    allows you to control the template parser's behavior.
-                </p>
-
-                <subsection name="Component bodies">
-
-
-                    <p>
-                        In Tapestry, each component is responsible for rendering itself and its
-                        <em>body</em>
-                        . A component's body is the portion of its page's template that its tags
-                        encloses. The Tapestry HTML template parser is responsible for dividing up
-                        the template into chunks: blocks of static HTML, component start tags
-                        (recognized by the jwcid attribute) and matching component end tags. It is
-                        quite forgiving about case, quotes (which may be single quotes, double
-                        quotes, or even omitted), and missing close tags (except for components,
-                        which must be balanced).
-                    </p>
-
-                    <span class="info">
-                        <strong>Note:</strong>
-                        <p>
-                            More correct would be to say "its container's template" as a component
-                            may be contained within another component. For simplicities sake, we'll
-                            describe this as if it was always a simple two-level heirarchy even
-                            though practical Tapestry applications can be many levels deep.
-                        </p>
-                    </span>
-
-                    <img alt="Component templates and bodies"
-                        src="../images/UsersGuide/component-body.png" />
-
-                    <p>
-                        In most cases, a component will make use of its body; it simply controls if,
-                        when and how often its body is rendered (when rendering the HTML response
-                        sent to the client). Other components, such as
-                        <a href="../components/general/insert.html">Insert</a>
-                        , have no use for their bodies, which they discard. Each component declares
-                        in its own specification (the allow-body attribute of the
-                        <a href="spec.html#spec.component-specification">
-                            &lt;component-specification&gt;
-                        </a>
-                        ) whether is allows or discards its body.
-                    </p>
-
-                    <p>
-                        In the previous example, the
-                        <a href="../components/general/insert.html">Insert</a>
-                        component had a body, the text "Joe User". This supports WYSIWYG preview;
-                        the text will be displayed when previewing. Since the
-                        <a href="../components/general/insert.html">Insert</a>
-                        component discards its body, this text will not be used at runtime, instead
-                        the OGNL expression
-                        <code>user.name</code>
-                        will be evaluated and the result inserted into the response.
-                    </p>
-
-                    <span class="warn">
-                        <strong>Warning:</strong>
-                        <p>
-                            If you put a component inside the body of an
-                            <a href="../components/general/insert.html">Insert</a>
-                            (or any other component that discards its body), then Tapestry will
-                            throw an exception. You aren't allowed to create a component simply to
-                            discard it.
-                        </p>
-                    </span>
-
-                </subsection><!-- templates.components.body -->
-
-                <subsection name="Component ids">
-
-
-                    <p>
-                        Every component in Tapestry has its own id. In the above example, the first
-                        component has the id "border". The second component is anonymous; the
-                        framework provides a unique id for the component since one was not supplied
-                        in the HTML template. The framework provided id is built from the
-                        component's type; this component would have an id of
-                        <code>$Insert</code>
-                        ; other
-                        <a href="../components/general/insert.html">Insert</a>
-                        components would have ids
-                        <code>$Insert$0</code>
-                        ,
-                        <code>$Insert$1</code>
-                        , etc.
-                    </p>
-
-                    <p>
-                        A component's id must only be unique within its immediate container. Pages
-                        are top-level containers, but components may have their own templates, and
-                        so can also contain other components.
-                    </p>
-
-
-                    <p>
-                        Implicit components can also have a specific id, by placing the id in front
-                        of the "@" symbol:
-                    </p>
-
-                    <source xml:space="preserve">
-  &lt;span jwcid="insert@Insert" value="ognl:user.name"&gt;Joe User&lt;/span&gt;
-</source>
-
-                    <p>
-                        The component is still implicit; nothing about the component would go in the
-                        specification, but the id of the component would be
-                        <code>insert</code>
-                        .
-                    </p>
-
-                    <p>
-                        Providing explicit ids for your components is rarely required, but often
-                        beneficial. It is especially useful for form control components.
-                    </p>
-
-                    <p>
-                        Each component may only appear
-                        <em>once</em>
-                        in the template. You simply can't use the same component repatedly ... but
-                        you can duplicate a component fairly easily; make the component a declared
-                        component, then use the copy-of attribute of the
-                        <a href="spec.html#spec.component">&lt;component&gt;</a>
-                        element to create clones of the component with new ids.
-                    </p>
-
-
-                </subsection><!-- templates.components.ids -->
-
-                <subsection name="Specifying parameters">
-
-
-                    <p>
-                        Components are configured by
-                        <em>
-                            <a href="bindings.html">binding</a>
-                        </em>
-                        their parameters. In a page or component specification, the
-                        <a href="spec.html#spec.binding">&lt;binding&gt;</a>
-                        element is used to bind component parameters.
-                    </p>
-
-                    <p>
-                        Inside an HTML template, attributes of the tag are used to bind parameters.
-                        This can be very succinct. In some cases where an
-                        <a href="http://www.ognl.org">OGNL</a>
-                        expression is used, the value can become quite long or complex ... in which
-                        case, converting the component to be a declared component (that is, defined
-                        in the page or component specification) and using the
-                        <a href="spec.html#spec.binding">&lt;binding&gt;</a>
-                        element will be more manageable.
-                    </p>
-
-
-                    <p>
-                        Tapestry will
-                        <em>merge</em>
-                        together parameter bindings in the specification with those provided
-                        directly in the template. Generally speaking, conflicts (the same parameter
-                        bound in both places) will be an error. The exception is when the parameter
-                        bound in the HTML template, as an attribute, is a literal string value ...
-                        in which case, Tapestry assumes that the attribute value is there for
-                        WYSIWYG purposes and is quietly ignored.
-                    </p>
-
-
-                    <p>
-                        Components may have both
-                        <em>formal</em>
-                        and
-                        <em>informal</em>
-                        parameters. The component specification defines each formal parameters using
-                        the
-                        <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                        element, and a component indicates whether it accepts or rejects informal
-                        parameters with the allow-informal-parameters attribute of the
-                        <a href="spec.html#spec.component-specification">
-                            &lt;component-specification&gt;
-                        </a>
-                        element.
-                    </p>
-
-                    <p>
-                        Informal parameters are
-                        <em>not</em>
-                        limited to simply strings; using
-                        <a href="bindings.html">binding reference</a>
-                        prefixes, it is possible for them to be OGNL expressions, references to
-                        assets, or anything else.
-                    </p>
-
-                    <p>
-                        If a component does not allow informal parameters, then attempting to bind
-                        any parameters (beyond the formal set of parameters for the component) is an
-                        error. The exception to this is literal values in the template, which are
-                        (again) assumed to be there for WYSIWYG purposes, and quietly ignored.
-                    </p>
-
-                    <p>Two final notes about informal parameters:</p>
-
-                    <ul>
-                        <li>
-                            Informal parameters in the template are assumed to be literal strings
-                            unless they have a binding prefix (i.e., "ognl:", "message:", or so
-                            forth).
-                        </li>
-                        <li>
-                            Informal parameters are normally converted to string values and added as
-                            additional attributes in the output markup. A special case is when the
-                            value for an informal parameter is an
-                            <a
-                                href="../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                            (possibly specified with the "asset:" prefix), in which case the
-                            attribute value will be the
-                            <em>URL</em>
-                            for the asset.
-                        </li>
-                    </ul>
-
-                    <subsection name="Seperation of Concerns">
-
-
-                        <p>
-                            Before Tapestry 3.0, there was a more clear separation of concerns. The
-                            template could only have declared components (not implicit), and any
-                            informal attributes in the template were always static values. The type
-                            of the component and all its formal parameters were always expressed in
-                            the specification. The template was very much focused on presentation,
-                            and the specification was very much focused on business logic. There
-                            were always minor exceptions to the rules, but in general, seperation of
-                            concerns was very good.
-                        </p>
-
-                        <p>
-                            With Tapestry 3.0, you can do more in the HTML template, and the
-                            specification file is much less important ... but the seperation of
-                            concerns is much more blurred together. It is very much acceptible to
-                            mix and match these approaches, even within a single page. In general,
-                            when learning Tapestry, or when prototyping, it is completely appopriate
-                            to do as much as possible in the HTML template. For large and complex
-                            applications, there are benefits to moving as much of the dynamic logic
-                            as possible out of the template and into the specification.
-                        </p>
-
-                    </subsection>
-
-                </subsection><!-- templates.components.parameters -->
-
-                <subsection name="Formal and informal parameters">
-
-
-                    <p>
-                        Components may accept two types of parameters:
-                        <em>formal</em>
-                        and
-                        <em>informal</em>
-                        . Formal parameters are those defined in the component's specification,
-                        using the
-                        <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                        element. Informal parameters are
-                        <em>additional</em>
-                        parameters, beyond those known when the component was created.
-                    </p>
-
-                    <p>
-                        The majority of components that accept informal parameters simply emit the
-                        informal parameters as additional attributes. Why is that useful? Because it
-                        allows you to specify common HTML attributes such as class or id, or
-                        JavaScript event handlers, without requiring that each component define each
-                        possible HTML attribute (the list of which expands all the time).
-                    </p>
-
-                    <span class="info">
-                        <strong>Note:</strong>
-                        <p>
-                            If you are used to developing with JSPs and JSP tags, this will be quite
-                            a difference. JSP tags have the equivalent of formal parameters (they
-                            are called "tag attributes"), but nothing like informal parameters.
-                            Often a relatively simply JSP tag must be bloated with dozens of extra
-                            attributes, to support arbitrary HTML attributes.
-                        </p>
-                    </span>
-
-                    <p>
-                        Informal and formal parameters can be specified in either the specification
-                        or in the template. Informal parameters
-                        <em>are not</em>
-                        limited to literal strings, you may use the
-                        <code>ognl:</code>
-                        and
-                        <code>message:</code>
-                        prefixes with them as well.
-                    </p>
-
-
-                    <p>
-                        Not all components allow informal parameters; this is controlled by the
-                        allow-informal-parameters attribute of the
-                        <a href="spec.html#spec.component-specification">
-                            &lt;component-specification&gt;
-                        </a>
-                        element. Many components do not map directly to an HTML element, those are
-                        the ones that do not allow informal parameters. If a component forbids
-                        informal parameters, then any informal parameters in the specification or
-                        the template will result in errors, with one exception: static strings in
-                        the HTML template are simply ignored when informal parameters are forbidden;
-                        they are presumed to be there only to support WYSIWYG preview.
-                    </p>
-
-                    <p>
-                        Another conflict can occur when the HTML template specified an attribute
-                        that the component needs to render itself. For example, the
-                        <a href="../components/link/directlink.html">DirectLink</a>
-                        component generates a
-                        <code>&lt;a&gt;</code>
-                        tag, and needs to control the href attribute. However, for preview purposes,
-                        it often will be written into the HTML template as:
-                    </p>
-
-                    <source xml:space="preserve">
-  &lt;a jwcid="@DirectLink" listener="listener:. . ." href="#"&gt; . . . &lt;/a&gt;</source>
-
-
-                    <p>
-                        This creates a conflict: will the template href (the literal string "#") be
-                        used, or the dynamically generated URL produced by the
-                        <a href="../components/link/directlink.html">DirectLink</a>
-                        component, or both? The answer is: the component wins. The href attribute in
-                        the template is ignored.
-                    </p>
-
-                    <p>
-                        Each component declares a list of reserved names using the
-                        <a href="spec.html#spec.reserved-parameter">&lt;reserved-parameter&gt;</a>
-                        element; these are names which are not allowed as informal parameters,
-                        because the component generates the named attribute itself, and doesn't want
-                        the value it writes to be overriden by an informal parameter. Case is
-                        ignored when comparing attribute names to reserved names.
-                    </p>
-
-                </subsection><!-- template.components.formal -->
-
-
-
-            </subsection><!-- template.components -->
-
-            <subsection name="Template directives">
-
-
-                <p>
-                    For the most part, a Tapestry page or component template consists of just static
-                    HTML intermixed with tags representing components (containing the jwcid
-                    attribute). The overarching goal is to make the Tapestry extensions completely
-                    invisible.
-                </p>
-
-                <p>
-                    Tapestry supports a limited number of additional directives that are not about
-                    component placement, but instead address other concerns about integrating the
-                    efforts of HTML developers with the Java developers responsible for the running
-                    application.
-                </p>
-
-                <subsection name="Localization">
-
-
-                    <p>
-                        Tapestry includes a number of
-                        <a href="localization.html">localization features</a>
-                        localization features. As we've seen, it is possible to access the messages
-                        for a page or component using the
-                        <code>message:</code>
-                        prefix on a component parameter.
-                    </p>
-
-                    <p>
-                        What about the static text in the template itself? How does that get
-                        translated? One possibility would be to make use of the Insert component for
-                        each piece of text to be displayed, for example:
-                    </p>
-
-                    <source xml:space="preserve">
-  &lt;span jwcid="@Insert" value="message:hello"&gt;Hello&lt;/span&gt;</source>
-
-
-                    <p>
-                        This snippet will get the
-                        <code>hello</code>
-                        message from the page's message catalog and insert it into the response. The
-                        text inside the &lt;span&gt; tag is useful for WYSIWYG preview, but will be
-                        discarded at runtime in favor of a message string from the catalog, such as
-                        "Hello", "Hola" or "Bonjour" (depending on the selected locale).
-                    </p>
-
-                    <p>
-                        Because, in an internationalized application, this scenario will occur with
-                        great frequency, Tapestry includes a special directive to perform the
-                        equivalent function:
-                    </p>
-
-                    <source xml:space="preserve">
-  &lt;span key="hello"&gt;Hello&lt;/span&gt;</source>
-
-
-                    <p>
-                        This is not an
-                        <a href="../components/general/insert.html">Insert</a>
-                        component, but behaves in a similar way. The tag used
-                        <em>must be</em>
-                        &lt;span&gt;. You do not use the
-                        <code>message:</code>
-                        prefix on the message key (
-                        <code>hello</code>
-                        ). You can't use OGNL expressions.
-                    </p>
-
-                    <p>
-                        Normally, the &lt;span&gt; does not render, just the message. However, if
-                        you specify any additional attributes in the &lt;span&gt; tag (such as,
-                        commonly, id, class, or style, to specify a CSS style), then the
-                        &lt;span&gt; will render around the message. For example, the template:
-                    </p>
-
-                    <source xml:space="preserve">
-  &lt;span class="error" key="invalid-access"&gt;Invalid Access&lt;/span&gt;</source>
-
-                    <p>might render as:</p>
-
-                    <source xml:space="preserve">
-  &lt;span class="error"&gt;You do not have the necessary access.&lt;/span&gt;
-</source>
-
-
-                    <p>
-                        In this example, the placeholder text "Invalid Access" was replaced with a
-                        much longer message acquired from the message catalog.
-
-                    </p>
-
-                    <p>
-                        In rare cases, your message may have pre-formatted HTML inside it. Normally,
-                        output is filtered, so that any reserved HTML characters in a message string
-                        are expanded to HTML entities. For example, a &lt; will be expanded to
-                        &amp;lt; If this is not desired, add the attribute value
-                        <code>raw="true"</code>
-                        to the &lt;span&gt;. This defeats the filtering, and text in the message is
-                        passed through as-is.
-                    </p>
-
-
-                </subsection><!-- template.directives.l10n -->
-
-                <subsection name="$remove$ jwcid&#10;&#9; ">
-
-
-                    <p>
-                        HTML templates in Tapestry serve two purposes. On the one hand, they are
-                        used to dynamically render pages that end up in client web browsers. On the
-                        other hand, they allow HTML developers to use WYSIWYG editors to modify the
-                        pages without running the full application.
-                    </p>
-
-                    <p>
-                        We've already seen two ways in which Tapestry accomidates WYSIWYG preview.
-                        Informal component parameters may be quietly dropped if they conflict with
-                        reserved names defined by the component. Components that discard their body
-                        may enclose static text used for WYSIWYG prefix.
-                    </p>
-
-                    <p>
-                        In some cases, we need even more direct control over the content of the
-                        template. Consider, for example, the following HTML template:
-                    </p>
-
-                    <source xml:space="preserve">
-&lt;table&gt;
-  &lt;tr&gt;
-    &lt;th&gt;First Name&lt;/th&gt;
-    &lt;th&gt;Last Name&lt;/h&gt;
-  &lt;/tr&gt;
-  &lt;tr jwcid="loop"&gt;
-    &lt;td&gt;&lt;span jwcid="insertFirstName"&gt;John&lt;/span&gt;&lt;/td&gt;
-    &lt;td&gt;&lt;span jwcid="insertLastName"&gt;Doe&lt;/span&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;td&gt;Frank&lt;/td&gt;
-    &lt;td&gt;Smith&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;td&gt;Jane&lt;/td&gt;
-    &lt;td&gt;Jones&lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-</source>
-
-                    <p>
-                        This is part of the HTML template that writes out the names of a list of
-                        people, perhaps from some kind of database. When this page renders, the
-                        <code>loop</code>
-                        component (presumably a
-                        <a href="../components/general/for.html">Foreach</a>
-                        , such details being in the page's specification) will render its body zero
-                        or more times. So we might see rows for "Frank Miller", "Alan Moore" and so
-                        forth (depending on the content of the database). However, every listing
-                        will also include "Frank Smith" and "Jane Jones" ... because the HTML
-                        developer left those two rows in, to ensure that the layout of the table was
-                        correct with more than one row.
-                    </p>
-
-                    <p>
-                        Tapestry allows a special jwcid,
-                        <code>$remove$</code>
-                        , for this case. A tag so marked is not a component, but is instead
-                        eliminated from the template. It is used, as in this case, to mark sections
-                        of the template that are just there for WYSIWYG preview.
-                    </p>
-
-                    <span class="info">
-                        <strong>Note:</strong>
-                        <p>
-                            Normally,
-                            <code>$remove$</code>
-                            would not be a valid component id, because it contains a dollar sign.
-                        </p>
-                    </span>
-
-                    <p>With this in mind, the template can be rewritten:</p>
-
-
-                    <source xml:space="preserve">
-&lt;table&gt;
-  &lt;tr&gt;
-    &lt;th&gt;First Name&lt;/th&gt;
-    &lt;th&gt;Last Name&lt;/h&gt;
-  &lt;/tr&gt;
-  &lt;tr jwcid="loop"&gt;
-    &lt;td&gt;&lt;span jwcid="insertFirstName"&gt;John&lt;/span&gt;&lt;/td&gt;
-    &lt;td&gt;&lt;span jwcid="insertLastName"&gt;Doe&lt;/span&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr jwcid="$remove$"&gt;
-    &lt;td&gt;Frank&lt;/td&gt;
-    &lt;td&gt;Smith&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr jwcid="$remove$"&gt;
-    &lt;td&gt;Jane&lt;/td&gt;
-    &lt;td&gt;Jones&lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-</source>
-                    <p>
-                        With the
-                        <code>$remove$</code>
-                        blocks in place, the output is as expected, one table row for each row read
-                        from the database, and "Frank Smith" and "Jane Jones" nowhere to be seen.
-                    </p>
-
-                    <span class="warn">
-                        <strong>Warning:</strong>
-                        <p>
-                            It's not allowed to put components inside a removed block. This is
-                            effectively the same rule that prevents components from being put inside
-                            discarded component bodies. Tapestry will throw an exception if a
-                            template violates this rule.
-                        </p>
-                    </span>
-
-
-                </subsection><!-- template.directives.remove -->
-
-                <subsection name="$content$ jwcid">
-
-
-                    <p>
-                        In Tapestry, components can have their own templates. Because of how
-                        components integrate their own templates with their bodies (the portion from
-                        their container's template), you can do a lot of interesting things. It is
-                        very common for a Tapestry application to have a Border component: a
-                        component that produces the &lt;html&gt;, &lt;head&gt;, and &lt;body&gt;
-                        tags (along with additional tags to reference stylesheets), plus some form
-                        of navigational control (typically, a nested table and a collection of links
-                        and images).
-                    </p>
-
-                    <p>
-                        Once again, maintaining the ability to use WYSIWYG preview is a problem.
-                        Consider the following:
-                    </p>
-
-                    <source xml:space="preserve">
-&lt;html&gt;
-  &lt;head&gt;
-    &lt;title&gt;Home page&lt;/title&gt;
-    &lt;link ref="stylesheet" href="style.css" type="text/css"/&gt;
-  &lt;/head&gt;
-  &lt;body&gt;
-    &lt;span jwcid="border"&gt;
-    
-      &lt;!-- Page specific content: --&gt;
-      
-      &lt;form jwcid=". . ."&gt;
-        . . .
-      &lt;/form&gt;
-    &lt;/span&gt;
-  &lt;/body&gt;
-&lt;/html&gt;
-</source>
-
-
-
-                    <p>
-                        It is quite common for Tapestry applications to have a
-                        <em>Border</em>
-                        component, a component that is used by pages to provide the &lt;html&gt;,
-                        &lt;head&gt;, and &lt;body&gt; tags, plus common navigational features
-                        (menus, copyrights, and so forth). In this example, it is presumed that the
-                        <code>border</code>
-                        component is a reference to just such as component.
-                    </p>
-
-                    <p>
-                        When this page renders, the page template will provide the &lt;html&gt;,
-                        &lt;head&gt; and &lt;body&gt; tags. Then when the
-                        <code>border</code>
-                        component renders, it will
-                        <em>again</em>
-                        render those tags (possibly with different attributes, and mixed in with
-                        much other stuff).
-                    </p>
-
-                    <p>
-                        If we put a
-                        <code>$remove$</code>
-                        on the &lt;html&gt; tag in the page template, the entire page will be
-                        removed, causing runtime exceptions.
-                    </p>
-
-                    <p>
-                        Instead, we want to identify that the portion of the template
-                        <em>inside</em>
-                        the &lt;body&gt; tag (on the page template) as the only part that should be
-                        used. The
-                        <code>$content$</code>
-                        component id is used for this purpose:
-                    </p>
-
-                    <source xml:space="preserve">
-&lt;html&gt;
-  &lt;head&gt;
-    &lt;title&gt;Home page&lt;/title&gt;
-    &lt;link ref="stylesheet" href="style.css" type="text/css"/&gt;
-  &lt;/head&gt;
-  &lt;body jwcid="$content$"&gt;
-    &lt;span jwcid="border"&gt;
-    
-      &lt;!-- Page specific content: --&gt;
-      
-      &lt;form jwcid=". . ."&gt;
-        . . .
-      &lt;/form&gt;
-    &lt;/span&gt;
-  &lt;/body&gt;
-&lt;/html&gt;
-</source>
-
-
-                    <p>
-                        The &lt;body&gt; tag, the text preceding its open tag, the &lt;/body&gt;
-                        tag, and the text following it are all removed. It's as if the template
-                        consisted only of the &lt;span&gt; tag for the
-                        <code>border</code>
-                        component.
-                    </p>
-
-                </subsection><!-- template.directives.content -->
-
-
-            </subsection><!-- template.directives -->
-
-        </section>
-
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/upgrade.xml b/tapestry/src/site/xdoc/usersguide/upgrade.xml
deleted file mode 100644
index 2153a8a..0000000
--- a/tapestry/src/site/xdoc/usersguide/upgrade.xml
+++ /dev/null
@@ -1,496 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Upgrading from Tapestry 3.0</title>
-    </properties>
-    <body>
-
-
-        <section name="Upgrading from Tapestry 3.0">
-
-            <p>
-                One goal of Tapestry 4.0 is to make upgrading from release 3.0 as painless as
-                possible.
-            </p>
-
-            <p>Tapestry 4.0 still supports the Tapestry 3.0 DTDs (with minor exceptions).</p>
-
-            <section name="Defining the servlet path">
-
-
-                <p>
-                    In Tapestry 3.0, the framework could automatically determine the servlet path
-                    (used when constructing new URLs), because there was only a single mapping. The
-                    convention was to map the servlet to "/app", but any path-based mapping would
-                    automatically work.
-                </p>
-
-                <p>
-                    Because of
-                    <a href="friendly-urls.html">friendly URLs</a>
-                    , there are any number of possible servlet mappings in Tapestry 4.0, so you must
-                    inform Tapestry what the correct mapping is. It is necessary to define, to
-                    Tapestry, what this mapping is, using the org.apache.tapestry.servlet-path
-                    <a href="configuration.html#configuration.properties">configuration property</a>
-                    .
-                </p>
-
-            </section><!-- upgrade.servlet-path -->
-
-            <section name="Defining Engine Services">
-
-
-                <p>
-                    Tapestry 3.0 allowed engine services to be defined in the application
-                    specification using a &lt;service&gt; element. This is no longer supported in
-                    the 4.0 DTD.
-                </p>
-
-                <p>
-                    Engine services are now defined using HiveMind, in the
-                    <code>tapestry.services.ApplicationServices</code>
-                    configuration point. The following is the chart service from the Workbench
-                    example:
-                </p>
-
-                <source xml:space="preserve">
-  &lt;contribution configuration-id="tapestry.services.ApplicationServices"&gt;
-    &lt;service name="chart" object="service:Chart"/&gt;
-  &lt;/contribution&gt;
-
-  &lt;service-point id="Chart" interface="org.apache.tapestry.engine.IEngineService"&gt;
-    &lt;invoke-factory&gt;
-      &lt;construct class="chart.ChartService"&gt;
-        &lt;set-object property="exceptionReporter" value="infrastructure:requestExceptionReporter"/&gt;
-        &lt;set-object property="response" value="infrastructure:response"/&gt;
-        &lt;set-object property="linkFactory" value="infrastructure:linkFactory"/&gt;
-      &lt;/construct&gt;
-    &lt;/invoke-factory&gt;
-  &lt;/service-point&gt;
-</source>
-
-                <p>
-                    The &lt;service&gt; element in a Tapestry 3.0 DTD is now
-                    <strong>ignored</strong>
-                    .
-                </p>
-
-                <p>
-                    The
-                    <a
-                        href="../apidocs/org/apache/tapestry/engine/IEngineService.html">
-                        IEngineService
-                    </a>
-                    interface has changed in non-backwards compatible ways. If your application
-                    created custom engine services, you will have to make changes to your code. If
-                    your custom service was based on the
-                    <code>org.apache.tapestry.engine.AbstractService</code>
-                    class, that class has been removed so you will have significant rewrites. As a
-                    suggested course of action, find the service that the original service was based
-                    on, and build a new service based on that Tapestry service. For example, if the
-                    original service was based on
-                    <code>org.apache.tapestry.asset.AssetService</code>
-                    , then get the source for the AssetService, and model your service after the new
-                    implementation.
-                </p>
-
-            </section><!-- upgrade.service -->
-
-            <section name="Component Parameters">
-
-
-                <p>
-                    Tapestry 4.0 has greatly streamlined
-                    <a href="components.html#components.parameters">component parameters</a>
-                    .
-                </p>
-
-                <subsection name="Parameter Type">
-
-
-                    <p>
-                        In Tapestry 3.0, the
-                        <a href="spec.html#spec.parameter">&lt;parameter&gt;</a>
-                        element included a type attribute. This has been removed in Tapestry 4.0.
-                    </p>
-
-                    <p>
-                        The parameter type is now determined from the Java class, by examining the
-                        accessor methods for the property.
-                    </p>
-
-                    <p>
-                        Tapestry 3.0 required an exact match on values bound to parameters. The
-                        bound value had to be assignable to the parameter's type. In Tapestry 4.0,
-                        parameters include built-in
-                        <em>coercion</em>
-                        ; Tapestry will attempt to coerce the value extracted from the bound
-                        property into the correct type. This is especially useful when using literal
-                        bindings for numeric properties. For example, an HTML template may specify a
-                        numeric value to an attribute as a simple string:
-                    </p>
-
-                    <source xml:space="preserve">
-  &lt;span jwcid="@MyComponent" intParam="50"/&gt;
-</source>
-
-                    <p>The type of the parameter is determined from the accessor method:</p>
-
-                    <source xml:space="preserve">
-public abstract class MyComponent . . .
-
-  public abstract int getIntParam();
-</source>
-
-                    <p>Tapestry will convert the string value to an integer automatically.</p>
-
-                    <p>
-                        The coercion rules are driven by a number of configuration points and
-                        services, starting with the
-                        <code>tapestry.coerce.ValueConverter</code>
-                        service.
-                    </p>
-
-                </subsection>
-
-
-                <subsection name="Parameter Direction">
-
-
-
-                    <p>
-                        In Tapestry 3.0, it was necessary to inform Tapestry of how and when a
-                        component parameter property was accessed -- this was parameter direction.
-                        Parameter direction is now ignored; Tapestry 4.0 now generates smart,
-                        caching accessor methods for parameter properties that work properly in all
-                        cases. In effect, all parameters are now of direction auto (but its a
-                        smarter, more flexible version of direction auto than was available in
-                        Tapestry 3.0).
-                    </p>
-
-                    <p>
-                        This may be of concern if your component used the custom parameter
-                        direction. In Tapestry 3.0, direction custom meant that your code would
-                        directly access the
-                        <a href="../apidocs/org/apache/tapestry/IBinding.html">
-                            IBinding
-                        </a>
-                        object for the parameter, and no property for the parameter would be
-                        created. In Tapestry 4.0, a property
-                        <em>will</em>
-                        be created ... even if you continue to use the 3.0 DTD and specify direction
-                        custom.
-                    </p>
-
-                    <span class="warn">
-                        <strong>Warning:</strong>
-                        <p>
-                            You should search for all component parameters that use direction custom
-                            and update the Java class.
-                        </p>
-                    </span>
-
-                    <p>
-                        For example, if you had a Tapestry 3.0 specification for a listener
-                        parameter:
-                    </p>
-
-                    <source xml:space="preserve">
-  &lt;parameter name="listener" direction="custom" type="org.apache.tapestry.IActionListener"/&gt;  
-</source>
-
-                    <p>Then your 3.0 source code might look like:</p>
-
-                    <source xml:space="preserve">
-  public abstract IBinding getListenerBinding();
-  
-  public void someMethod(. . .)
-  {
-    IBinding binding = getListenerBinding();
-    
-    if (binding != null)
-    {
-      IActionListener listener = (IActionListener) binding.getObject("listener", IActionListener.class);
-      
-      if (listener != null)
-        listener.actionTriggered(this, cycle);
-    }
-    
-    . . .      
-</source>
-
-                    <p>In Tapestry 4.0, the specification is much simpler:</p>
-
-                    <source xml:space="preserve">
-  &lt;parameter name="listener"/&gt;
-</source>
-
-                    <p>As is the Java code:</p>
-
-                    <source xml:space="preserve">
-  public abstract IActionListener getListener();
-  
-  public void someMethod(. . .)
-  {
-    IActionListener listener = getListener();
-    
-    if (listener != null)
-      listener.actionTriggered(this, cycle);
-  }
-  
-  . . .
-</source>
-
-                    <p>
-                        Tapestry takes care of de-referencing the binding (if the parameter is
-                        bound), along with type checks or coercions.
-                    </p>
-
-                </subsection>
-
-                <subsection name="Accessing binding objects">
-
-
-                    <p>
-                        In Tapestry 3.0, it was possible to access a
-                        <a href="../apidocs/org/apache/tapestry/IBinding.html">
-                            IBinding
-                        </a>
-                        object for a parameter by defining an additional property in your
-                        component's Java code:
-                    </p>
-
-                    <source xml:space="preserve">
-  public abstract IBinding getListenerBinding();
-</source>
-
-                    <p>
-                        This is no longer supported; the correct way to obtain a binding object is
-                        via the getBinding() method.
-                    </p>
-
-                    <span class="info">
-                        <strong>Note:</strong>
-                        <p>
-                        Because of the other improvements to parameters, it is virtually never
-                        necessary to obtain a binding object.
-                        </p>
-                    </span>
-
-                </subsection>
-
-                <subsection name="Default value">
-
-
-                    <p>
-                        In the Tapestry 3.0 DTD, the optional default-value attribute was used to
-                        provide an OGNL expression to use for a parameter, if the parameter is not
-                        otherwise bound. In the Tapestry 4.0 DTD, the default-value attribute is a
-                        <a href="bindings.html">binding reference</a>
-                        . The following are equivalent:
-                    </p>
-
-                    <source xml:space="preserve">
-  &lt;parameter name="foo" type="int" default-value="bar.baz"/&gt;  &lt;!-- 3.0 --&gt;
-  
-  &lt;parameter name="foo" default-value="bar.baz"/&gt;             &lt;!-- 4.0 --&gt;
-</source>
-
-
-                    <source xml:space="preserve">
-  &lt;parameter name="bar" type="java.lang.String" 
-    default-value="messages.getMessage('default-bar')"/&gt;      &lt;!-- 3.0 --&gt;
-  
-  &lt;parameter name="bar" default-value="message:default-bar"/&gt; &lt;!-- 4.0 --&gt; 
-</source>
-
-
-
-
-                </subsection>
-
-                <subsection name="Inherited binding">
-
-
-                    <p>
-                        Tapestry 3.0 included an &lt;inherited-binding&gt; element, this was a way
-                        to directly pass the
-                        <a href="../apidocs/org/apache/tapestry/IBinding.html">
-                            IBinding
-                        </a>
-                        object for a component parameter to a parameter of a nested component. This
-                        is no longer supported in Tapestry 4.0; instead, the property for the
-                        component parameter should be bound to the nested component parameter:
-                    </p>
-
-                    <source xml:space="preserve">
-
-  &lt;!-- 3.0 --&gt;
-  
-  &lt;parameter name="itemCount" type="int"/&gt;
-
-  &lt;component id="nested" type="Nested"&gt;
-    &lt;inherited-binding name="count" parameter-name="itemCount"/&gt;
-  &lt;/component&gt;
-  
-  &lt;!-- 4.0 --&gt;
-  
-  &lt;parameter name="itemCount"/&gt;
-  
-  &lt;component id="nested" type="Nested"&gt;
-    &lt;binding name="count" value="itemCount"/&gt;
-  &lt;/component&gt;
-
-</source>
-
-                    <span class="warn">
-                        <strong>Warning:</strong>
-                        <p>inherited-binding may make a comeback in Tapestry 4.0!</p>
-                    </span>
-
-                </subsection>
-
-            </section><!-- upgrade.parameters -->
-
-
-            <section name="Specified Properties">
-
-
-                <p>
-                    Property specifications in Tapestry 4.0 have been simplified. The specification
-                    element has changed from &lt;property-specification&gt; to the simpler,
-                    <a href="spec.html#spec.property">&lt;property&gt;</a>
-                    .
-                </p>
-
-                <p>
-                    In Tapestry 3.0, it was necessary to specify the type of the property; this is
-                    no longer necessary or possible. The type attribute has been removed, and the
-                    type is determined from the Java code (and defaults to Object if the Java code
-                    does not define abstract accessors).
-                </p>
-
-                <p>
-                    In addition, any abstract properties in the Java code will be converted into
-                    transient properties, even if there is no matching
-                    <a href="spec.html#spec.property">&lt;property&gt;</a>
-                    element. Typically, the
-                    <a href="spec.html#spec.property">&lt;property&gt;</a>
-                    element is only used when the property is either not referenced inside Java code
-                    (such as a listener method), or when when the property must be persistent.
-                </p>
-
-                <p>
-                    In the 3.0 DTDs, properties could have an initial value set. The initial-value
-                    attribute was an OGNL expression used to initial the property when the page is
-                    first constructed, and when the page is detached (at the end of a request
-                    cycle). The initial value may instead be specified as the enclosed character
-                    data of the &lt;property-specification&gt; element.
-                </p>
-
-                <p>
-                    Using the 4.0 DTDs, this is still true, but the initial-value attribute (or the
-                    enclosed character data) is a
-                    <a href="bindings.html">binding reference</a>
-                    with a default prefix of "ognl:".
-                </p>
-
-            </section><!-- upgrade.property -->
-
-            <section name="Managed beans">
-
-
-                <p>
-                    The
-                    <a href="spec.html#spec.bean">&lt;bean&gt;</a>
-                    element is used to define managed beans. In Tapestry 3.0, it could contain
-                    &lt;set-property&gt; and &lt;set-message-property&gt; elements to configure the
-                    properties of the bean.
-                </p>
-
-                <p>
-                    In Tapestry 4.0, these two elements have been replaced by the
-                    <a href="spec.html#spec.set">&lt;set&gt;</a>
-                    element, which uses a
-                    <a href="bindings.html">binding reference</a>
-                    to provide the value.
-                </p>
-
-            </section><!-- upgrade.bean -->
-
-            <section name="Dependency Changes">
-
-
-                <p>
-                    Part of the transition to Tapestry 4.0, and targetting (in a later release) a
-                    minimum JDK of 1.5, is the
-                    <em>removal</em>
-                    of support for the Jakarta commons-lang library. commons-lang defined an Enum
-                    class that makes it impossible to compile code for JDK 1.5 ("enum" is a reserved
-                    word in JDK 1.5). With the loss of that dependency, so goes
-                    org.apache.tapestry.form.EnumPropertySelectionModel, an
-                    <a
-                        href="../apidocs/org/apache/tapestry/form/IPropertySelectionModel.html">
-                        IPropertySelectionModel
-                    </a>
-                    implementation.
-                </p>
-
-            </section>
-
-            <section name="Other code changes">
-
-
-                <p>
-                    A number of more subtle, and more rarely used, changes exist between the 3.0 and
-                    4.0 releases.
-                </p>
-
-                <p>
-                    The contract for
-                    <a
-                        href="../apidocs/org/apache/tapestry/resolver/ISpecificationResolverDelegate.html">
-                        ISpecificationResolverDelegate
-                    </a>
-                    has changed. The specifications returned by the delegate are now cached by
-                    Tapestry exactly as if they had been read from files on the classpath or web
-                    context.
-                </p>
-
-            </section>
-
-            <section name="Changes to Components">
-                <subsection name="Image and Rollover">
-                    <p>
-                        The border parameter of the
-                        <a href="../components/general/image.html">Image</a>
-                        and
-                        <a href="../components/link/rollover.html">Rollover</a>
-                        components has been removed, for XHTML compliance. You may still specify a
-                        value for border as an informal parameter ... or better yet, handle this
-                        using CSS.
-                    </p>
-
-                </subsection>
-
-            </section>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/src/site/xdoc/usersguide/upgrade4.0.xml b/tapestry/src/site/xdoc/usersguide/upgrade4.0.xml
deleted file mode 100644
index 1d8d1ee..0000000
--- a/tapestry/src/site/xdoc/usersguide/upgrade4.0.xml
+++ /dev/null
@@ -1,269 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN"
-    "http://maven.apache.org/dtd/xdoc_1_0.dtd">
-<document>
-<properties>
-    <title>Upgrading from 4.0</title>
-</properties>
-<body>
-    <section name="Upgrading from 4.0">
-        <p>
-            There have been a large number of general bug fixes made in Tapestry 4.1, as well as a lot of work
-            in the area of "ajax" support in the core framework.
-        </p>
-        <p>
-            This guide will attempt to highlight some of the key changes that might affect people trying to upgrade from <strong>4.0.X</strong> 
-            to the current <strong>4.1.X</strong> version. 
-        </p>
-    </section>
-    
-    <section name="Core API Changes">
-        <p>
-            Many of the previously marked as deprecated for removal in Tapestry 4.1 API sections have now been removed.  There is also some new functionality
-            that many may not be aware of.
-        </p>
-        <p>
-            <ul>
-                <li>
-                    <p>
-                        <b>IRequestCycle.getRequestContext() -</b> The old <code>getRequestContext()</code> method has now been removed from
-                        <a href="../apidocs/org/apache/tapestry/IRequestCycle.html">IRequestCycle</a>.  The proper way to get the equivalent
-                        functionality is to have the HttpServletRequest object <a href="injection.html">injected</a> in to your page/component:
-                    </p>
-                    <source xml:space="preserve"><![CDATA[
-@InjectObject("service:tapestry.globals.HttpServletRequest")
-public abstract HttpServletRequest getRequest();
-]]></source>
-                </li>
-                <li>
-                    <p>
-                        <b>Autowiring services -</b>  Thanks to James Carman of <a href="http://hivemind.apache.org">HiveMind</a> all components/pages now support
-                        autowiring of services.  The rule is that you can have any service / configuration that is normally injectable via exlplicit
-                        <a href="injection.html">injection</a> configurations simply by defining a property of the same type as any of the available HiveMind services.
-                        The only caveat is that services of the same interface with more than one contributed definition can't be autowired as it would be impossible
-                        for the framework to correctly choose the right one.
-                    </p>
-                    <p>
-                        This should greatly cut down on a lot of pain of having to look up service ids in the
-                        <a href="../tapestry-framework/hivedoc/">hivedoc</a> documentation.  The injection of the HttpServletRequest outlined in the first point
-                        could be re-written as:
-                    </p>
-                    <source xml:space="preserve"><![CDATA[
-public abstract HttpServletRequest getRequest();
-]]></source>
-                </li>
-                <li>
-                    <p>
-                        <b>IRequestCycle.getServiceParameters() -</b> This method has been replaced with <code>IRequestCycle.getListenerParameters()</code>.
-                    </p>
-                </li>
-                <li>
-                    <p>
-                        <b>org.apache.tapestry.event.PageRenderListener gone -</b> PageRenderListener was split into PageBeginRenderListener and PageEndRenderListener.  More
-                        on the available listener types/events can be found <a href="events.html">here</a>.
-                    </p>
-                </li>
-            </ul>
-        </p>
-    </section>
-    
-    <section name="Javascript">
-        <p>
-            One of the largest changes to come about has been the general strategy in dealing with javascript inclusions as well 
-            as bundling of the <a href="http://dojotoolkit.org">Dojo</a> javascript toolkit directly in Tapestry. More about these 
-            packaging changes can be found in the <a href="../javascript/index.html">javascript guide</a>.
-        </p>
-
-        <p>
-        <ul>
-            <li>
-            <strong>Javascript includes -</strong> The inclusion of dojo now happens automatically if you are using the <a href="../components/general/shell.html">Shell</a> component, 
-            and is in general required for Tapestry to function properly in many circumstances. If don't currently use / can't use the 
-            <a href="../components/general/shell.html">Shell</a> component the same logic is also encapsulated in the 
-            <a href="../components/general/scriptincludes.html">ScriptIncludes</a> component. Both components provide a variety of options 
-            allowing for client side debugging / level of debug statements / whether to use the built in dojo provided or a custom build of your own / etc..
-            </li>
-            
-            <li>
-                <strong>form.events removed -</strong> A good majority of the core Tapestry javascript includes have either been modified or entirely replaced 
-                with new versions that are slightly easier to manage using <a href="http://dojotoolkit.org">Dojo's</a> dynamic module inclusion capability. 
-                <em>Almost</em> 
-                all of the changes are backwards compatible and include new deprecation warning messages when you call one of the old Tapestry javascript
-                functions. The new javascript API's are also heavily documented, which you can browse <a href="../javascript/index.html">here</a>.
-                
-                <br/><br/>
-                
-                There is one change that is unfortunately not backwards compatible with these javascript changes, specifically dealing with the old
-                Form.js javascript functions and how they interact with client side events for the <a href="../components/form/form.html">Form</a> 
-                component. Tapestry used to modify the client side DOM <code>&lt;form&gt;</code> element by attaching a <code>form.events</code> property 
-                to the object. This is no longer the case. Tapestry doesn't modify any of the DOM elements or client side events on your page anymore. While
-                this change has resulted in much easier form handling abilities on the client side it has come with a price of breaking anyone previously
-                relying on this functionality.  
-            </li>
-            
-            <li>
-                <strong>onload and <a href="../components/general/script.html">Script</a> templates -</strong> In previous versions of the framework 
-                Tapestry would try to ensure that javascript was written to the document body in such a way that the various sections of 
-                a <a href="../components/general/script.html">Script</a> template were written out at the correct points in the document to match the 
-                various sections of your template. This has now been modified slightly to use <a href="http://dojotoolkit.org">Dojo's</a> event handling
-                facilities to control this behaviour. 
-                
-                <br/><br/>
-                
-                <strong>Example Javascript Template:</strong>
-<source xml:space="preserve"><![CDATA[
-<script>
-<input-symbol key="component" required="yes"/>
-<let key="formObject">
-    document.${component.form.name}
-</let>
-<let key="componentObject">
-    ${formObject}.${component.name}
-</let>
-
-<body>
-function setFocus() {
-    var inputField = ${componentObject};
-    if (inputField.type != "hidden") {
-        if (inputField.disabled != true) {
-            inputField.focus();
-        }
-    } else {
-         window.alert('InputFocus.script cannot set focus on a hidden field');
-    }
-}
-</body>
-<initialization>
-    setFocus();
-</initialization>
-</script>
-]]></source>
-            
-            <p>
-            In previous versions of the framework the template above would be rendered out as html looking somewhat like:
-            </p>
-<p><strong>Previous Tapestry 4.0.X generated output:</strong></p>
-<source xml:space="preserve"><![CDATA[
-<html>
-<head><title>Sample</title></head>
-
-<body>
-<script type="text/javascript">
-function setFocus() {
-    var inputField = document.form.field;
-    if (inputField.type != "hidden") {
-        if (inputField.disabled != true) {
-            inputField.focus();
-        }
-    } else {
-         window.alert('InputFocus.script cannot set focus on a hidden field');
-    }
-}
-</script>
-
-<p>Hello! This is my sample page.</p>
-
-<script type="text/javascript">
-setFocus();
-</script>
-</body>
-</html>
-]]></source>
-            
-            <p>With the changes made this section would now be rendered as:</p>
-<p><strong>New Tapestry 4.1.X generated output:</strong></p>
-<source xml:space="preserve"><![CDATA[
-<html>
-<head><title>Sample</title></head>
-
-<body>
-<script type="text/javascript">
-function setFocus() {
-    var inputField = document.form.field;
-    if (inputField.type != "hidden") {
-        if (inputField.disabled != true) {
-            inputField.focus();
-        }
-    } else {
-         window.alert('InputFocus.script cannot set focus on a hidden field');
-    }
-}
-</script>
-
-<p>Hello! This is my sample page.</p>
-
-<script type="text/javascript">
-dojo.addOnLoad(function(){
-setFocus();
-});
-</script>
-</body>
-</html>
-]]></source>
-            
-            </li>
-            
-            <li>
-                <strong><a href="../apidocs/org/apache/tapestry/services/ResponseBuilder.html">ResponseBuilder</a> -</strong> Don't like the way
-                javascript is being managed? Don't want to use <a href="http://dojotoolkit.org">Dojo</a> to manage your javascript either? That's ok 
-                too. 
-                
-                <p>
-                    The new response management system allows for easy contribution to many different response types in Tapestry so that you have 
-                    complete control over the whole process. Currently these different types cover normal html rendering / Dojo XHR responses / JSON 
-                    responses. Feel free to replace one of the existing implementations or add your own. More can be found by looking at the hivemind
-                    configuration point for it <a href="../tapestry-framework/hivedoc/config/tapestry.services.ResponseContributors.html">here</a>.
-                </p>
-            </li>
-            
-            <li>
-                <strong><a href="../apidocs/org/apache/tapestry/IComponent.html#getClientId()">IComponent.getClientId()</a> -</strong> The method 
-                that was previously only available to form components has now been moved back up the chain to IComponent itself. The logic surrounding 
-                generating / working with these client ID's has also undergone extensive refactoring / improvements so that you can reliably use this method
-                for (almost?) all of <em>your</em> and the core Tapestry components. This of course means that all of the core Tapestry components now output 
-                unique <code>id="foo"</code> attributes to support the new method as well. 
-            </li>
-          </ul>
-        </p>
-    
-        <span class="info">
-            <strong>Note:</strong>
-            <p>
-                The logic of what value is actually used for the id attribute varies widely depending on many different
-                things
-                <em>(such as finding informal id parameters)</em>
-                , but all of changes are things to make it more intuitive for you / ie tries to do what you expect most
-                of the time.
-            </p>
-        </span>
-    </section>
-    
-    <section name="Asset Management">
-        <ul>
-          <li>
-            <strong><a href="http://blog.opencomponentry.com/?p=30">Gzip Compression</a> -</strong>
-          </li>
-        </ul>
-    </section>
-    
-    <section name="To be continued..">
-        <p>This is very much a work in progress, expect to see much more leak in over the next few weeks.</p>
-    </section>
-    
-</body>
-</document>
\ No newline at end of file
diff --git a/tapestry/support/build.xml b/tapestry/support/build.xml
deleted file mode 100644
index 4c56684..0000000
--- a/tapestry/support/build.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!-- Special build script used when creating new Tapestry releases. 
-
-	 Copy this file and a copy of build.properties to a temporary directory
-	 and execute "ant -emacs setup build" using JDK 1.3.
-	 
-	 *** 
-	 NOTE: JDK 1.3 is not compatible with Forrest, so ignore the above and
-	 used JDK 1.4. 
-	 ***
-	 
-	 Be sure to have a complete build.properties and environment, including
-	 the necessary settings and packages for generating documentation
-	 (i.e., settings for "fop.dir" and "clover.dir").
-	 
-	 Generates release distributions into the a sub-directory (name matches
-	 the release version).
-	 
-	 -->
-<project name="Hivedoc" default="build" >
-
-	<echo>Creating hivemind registry documentation index..</echo>
-	<path id="doc.path" >
-		<fileset dir="src/descriptor/META-INF">
-			<include name="**/hivemodule.xml" />
-		</fileset>
-	</path>
-
-	<taskdef name="constructregistry" classname="org.apache.hivemind.ant.ConstructRegistry" />
-
-	<target name="build">
-		<mkdir dir="${target.dir}/hivedoc" />
-		<constructregistry output="${target.dir}/hivedoc/registry.xml">
-			<descriptors refid="doc.path" />
-		</constructregistry>
-
-		<xslt out="${target.dir}/hivedoc/index.html" in="${target.dir}/hivedoc/registry.xml" style="../support/hivemind.xsl">
-			<param name="base.dir" expression="${basedir}/${target.dir}/hivedoc" />
-		</xslt>
-
-		<copy todir="${target.dir}/hivedoc">
-			<fileset dir="../support">
-				<include name="*.css" />
-				<include name="*.png" />
-			</fileset>
-		</copy>
-	</target>
-
-</project>
diff --git a/tapestry/support/forrest2maven-xdoc.xsl b/tapestry/support/forrest2maven-xdoc.xsl
deleted file mode 100644
index 6d5dc83..0000000
--- a/tapestry/support/forrest2maven-xdoc.xsl
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-    <xsl:output indent="yes" method="xml"/>
-    <xsl:template match="//document">
-        <document>
-            <properties>
-                <title>
-                    <xsl:value-of select="header/title"/>
-                </title>
-            </properties>
-            <!-- Ignore the rest of the header and all of the footer. -->
-            <xsl:apply-templates select="body"/>
-        </document>
-    </xsl:template>
-    <xsl:template match="body/section">
-        <section name="{title}">
-            <xsl:apply-templates/>
-        </section>
-    </xsl:template>
-    <xsl:template match="section[ancestor:: section]">
-        <subsection name="{title}">
-            <xsl:apply-templates/>
-        </subsection>
-    </xsl:template>
-    <!-- Just edit these out. -->
-    <xsl:template match="title"/>
-    <!-- Forrest <link> (and <jump> and <fork> is just <a> in Maven/Anakia -->
-    <xsl:template match="link|jump|fork">
-        <xsl:element name="a">
-            <!-- Skip the 'role' attribute, which is in Forrest but not in Anakia or HTML. -->
-            <xsl:apply-templates select="@*[name() != 'role']|node()"/>
-        </xsl:element>
-    </xsl:template>
-    <!-- Anakia doesn't have note, warning or fixme. -->
-    <xsl:template match="note">
-        <p>
-            <strong>Note:</strong>
-            <br/>
-            <xsl:apply-templates/>
-        </p>
-    </xsl:template>
-    <xsl:template match="warning">
-        <p>
-            <strong>Warning:</strong>
-            <br/>
-            <xsl:apply-templates/>
-        </p>
-    </xsl:template>
-    <xsl:template match="fixme">
-        <p>
-            <strong>Fixme:</strong>
-            <br/>
-            <xsl:apply-templates/>
-        </p>
-    </xsl:template>
-    <!-- Forrest has <icon> and <figure>, which we translate to <img>. -->
-    <xsl:template match="icon|figure">
-        <img>
-            <xsl:apply-templates select="@*"/>
-        </img>
-    </xsl:template>
-    <xsl:template match="anchor">
-        <a name="{id}"/>
-    </xsl:template>
-    <!-- Forrest XML defines default values for colspan and rowspan that force them to
-         be output, so we edit those out. -->
-    <xsl:template match="td|th">
-        <xsl:copy>
-            <!-- Probably an easier way to do this, but it works. -->
-            <xsl:if test="@colspan != 1">
-                <xsl:attribute name="colspan">
-                    <xsl:value-of select="@colspan"/>
-                </xsl:attribute>
-            </xsl:if>
-            <xsl:if test="@rowspan != 1">
-                <xsl:attribute name="rowspan">
-                    <xsl:value-of select="@rowspan"/>
-                </xsl:attribute>
-            </xsl:if>
-            <xsl:apply-templates select="@*[name() != 'rowspan'][name() != 'colspan']"/>
-            <xsl:apply-templates/>
-        </xsl:copy>
-    </xsl:template>
-    <!-- General copy element/attribute rule. -->
-    <xsl:template match="node()|@*">
-        <xsl:copy>
-            <xsl:apply-templates select="node()|@*"/>
-        </xsl:copy>
-    </xsl:template>
-</xsl:stylesheet>
diff --git a/tapestry/support/gump.xml b/tapestry/support/gump.xml
deleted file mode 100644
index 6e0fc05..0000000
--- a/tapestry/support/gump.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<module name="jakarta-tapestry">
-
-  <!-- $Id$ -->
-
-  <url href="http://jakarta.apache.org/tapestry/index.html"/>
-  <description>
-  Component-based web application framework organized around insanely
-  high levels of resuse.
-  </description>
-
-  <cvs repository="jakarta"/>
-  
-  <project name="jakarta-tapestry">
-    <package>org.apache.tapestry</package>
-
-    <ant>
-      <property name="framework.version" value="@@DATE@@"/>
-    </ant>
-
-    <!-- framework -->
-    <depend project="ant" inherit="runtime"/>
-    <depend project="commons-beanutils"/>
-    <depend project="commons-digester"/>
-    
-    <depend project="commons-fileupload"/>
-    
-    
-    <depend project="commons-logging"/>
-    <depend project="commons-lang"/>
-    <depend project="jakarta-bsf"/>
-    <depend project="jakarta-oro"/>
-    <depend project="jakarta-servletapi-4"/>
-    <depend project="ognl"/>
-    <depend project="xml-xerces"/>
-    <depend project="jakarta-oro"/>
-    <depend project="commons-digester"/>
-    <depend project="commons-lang"/>
-    <depend project="jakarta-bsf"/>
-    <depend project="javassist"/>
-        
-    <!-- These aren't built, yet, by Gump.  We direct Gump to
-    	   use the versions stored in our CVS. -->
-    	   
-    <depend project="ognl"/>
-    <depend project="jakarta-commons-codec"/>
-
-    <!-- contrib -->
-    <work nested="framework/classes"/>
-    <depend project="ejb"/>
-
-    <!-- examples -->
-    <work nested="contrib/classes"/>
-    <depend project="jcharts"/>
-
-    <!-- examples/Vlib -->
-    <work nested="examples/VlibBeans/classes"/>
-
-    <jar name="lib/tapestry-@@DATE@@.jar"/>
-    <license name="LICENSE.txt"/>
-
-    <nag from="Howard M. Lewis Ship &lt;hlship@apache.org&gt;"
-         to="tapestry-dev@jakarta.apache.org"/>
-  </project>
-
-  <project name="ognl">
-    <package>ognl</package>
-    <url href="http://www.ognl.org"/>
-    
-    <!-- This needs to be kept up-to-date as we update to later versions of OGNL. -->
-    
-    <jar name="lib/ext/ognl-2.6.3.jar"/>
-    <license name="lib/ext/LICENSE.ognl.txt"/>
-  </project>
-   
-  <project name="jcharts">
-    <package>org.jCharts</package>
-    <url href="http://jcharts.sourceforge.net/"/>
-    <jar name="examples/Workbench/lib/jCharts-0.6.0.jar"/>
-    <license name="examples/Workbench/lib/LICENSE.jCharts.txt"/>
-  </project>
-
-  <!-- This is the 10/19/03 dev version of codec. 
-  	   Needs to be updated to a finalized version when it comes out 
-  	   and this project will be removed.
-  -->
-  <project name="jakarta-commons-codec">
-    <package>org.apache.commons.codec</package>
-    <url href="http://jakarta.apache.org/commons/codec/"/>
-    <jar name="lib/ext/commons-codec-1.2.jar"/>
-    <license name="lib/ext/LICENSE.commons-codec.txt"/>
-  </project>
-
-</module>
diff --git a/tapestry/support/hivemind.css b/tapestry/support/hivemind.css
deleted file mode 100644
index 09ccc74..0000000
--- a/tapestry/support/hivemind.css
+++ /dev/null
@@ -1,251 +0,0 @@
-/* 
- * Copyright 2004, 2005 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-{
-	font-size: 14px;	
-}
-BODY
-{
-	background-color: #EEEEDD;
-}
-
-HR
-{
-  clear: both;
-}
-
-a
-{
-	color:#358;
-	border-bottom:1px dotted #469;
-	text-decoration: none;
-}
-a:visited
-{
-  color:#358;
-  border-color:#899;
-}
-a:hover, a:active
-{
-  color:#933;
-  border-color:#b55;
-  border-bottom-style:solid;
-}
-  
-DIV.title
-{
-  font-variant: small-caps;
-  text-align: center;
-  font-weight: bold;
-}
-
-DIV.center-nav
-{
-  text-align: center;
-  font-weight: bold;
-}
-
-DIV.left-nav
-{
- float: left;
- font-weight: bold; 
-}
-
-DIV.right-nav
-{
-  float: right;
-  font-weight: bold;
-}
-
-TABLE.top-level-object
-{
-  border-left: 5px solid black;
-  padding-left: 0px;
-  margin-left: 0px;
-  border-top: 1px solid black;
-  border-right: 1px solid black;
-  border-bottom: 1px solid black;
-}
-
-TABLE.nested-object
-{
-  border-left: 2px solid black;
-  margin-right: 10px;
-  margin-left: 0px;
-  border-top: 1px solid black;
-  border-right: 1px solid black;
-}
-
-TABLE.top-level-object TD
-{
-  border-bottom: 1px solid black;
-}
-
-TABLE.top-level-object TH
-{
-  text-align: right;
-  padding-right: 5px;
-  border-bottom: 1px solid black;
-}
-
-TABLE.top-level-object TR
-{
- vertical-align: top;
-}
-
-TABLE.top-level-object TH.object-id
-{
-	color: white;
-	background-color: #3A4E6B;
-	padding-left: 10px;
-	text-align: left;
-	font-variant: small-caps;
-}
-
-TABLE.nested-object TH.object-id
-{
-  font-variant: normal;
-}
-
-TABLE.nested-object TH.sub-id
-{
-  color: white;
-  background-color: #526D96;
-  text-align: left;
-  padding-left: 10px;
-}
-
-TABLE.top-level-object TD.service-interface
-{
-  text-align: right;
-  font-style: italic;
-}
-
-TD.description
-{
-	padding-left: 10px;
-	font-style: italic;
-}
-
-TABLE.top-level-object TH.section
-{
-  padding-left: 10px;
-  color: white;
-  background-color: #526D96;
-  font-weight: bold;
-  text-align: left;
-}
-
-DIV.xml
-{
-	margin-top: 5px;
-	margin-left: 15px;
-	padding-bottom: 10px;
-}
-
-DIV.xml UL
-{
-  margin-bottom: 0px;
-  margin-top: 0px;
-  margin-left: 15px;
-  list-style-type: none;
-}
-
-SPAN.attribute
-{
-  font-weight: bold;
-}
-
-SPAN.attribute-value
-{
-	color: #444455;
-}
-
-SPAN.attribute-translator
-{
-  color: black;
-  font-style: italic;
-}
-
-TD.container
-{
-  padding-top: 5px;
-  padding-bottom: 10px;
-  padding-left: 10px;
-}
-
-TABLE.summary
-{
-	border: 1px solid #CCCCCC;
-}
-
-TABLE.layout
-{
-  margin-right: 20px;
-}
-
-TABLE.layout TR
-{
- vertical-align: top;
-}
-
-TABLE.layout TD
-{
-  border: none;
-}
-
-TABLE.summary TH
-{
-  text-align: center;
-  font-variant: small-caps;
-  background-color: #3A4E6B;
-  color: white;
-}
-
-TABLE.summary TD
-{
-	background-color: #FFFFFF;
-	padding-right: 3px;
-	padding-bottom: 3px;
-	padding-left: 3px;
-}
-
-TH.section A
-{
-	color: white;
-	border-bottom: 1px solid white;
-}
-
-TH.section A:hover,A:active
-{
-	color:#933;
-}
-
-TH.object-id A
-{
-	color: white;
-	border-bottom: 1px solid white;
-}
-
-TH.object-id A:hover,A:active
-{
-	color:#933;
-}
-
-DIV.info
-{
-  font-style: italic;
-}
\ No newline at end of file
diff --git a/tapestry/support/hivemind.xsl b/tapestry/support/hivemind.xsl
deleted file mode 100644
index 953cd95..0000000
--- a/tapestry/support/hivemind.xsl
+++ /dev/null
@@ -1,840 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
-  xmlns:redirect="http://xml.apache.org/xalan/redirect" extension-element-prefixes="redirect">
-  <xsl:param name="base.dir" select="string('.')"/>
-  
-  <xsl:template match="/registry">
-    <!-- The master index is one level up from most of the content, so a few things
-         are handled idiosyncratically here. -->
-    <xsl:message>Writing master index to <xsl:value-of select="$base.dir"/></xsl:message>
-    <html>
-      <head>
-        <title>HiveMind Registry</title>
-        <link rel="STYLESHEET" type="text/css" href="hivemind.css"/>
-      </head>
-      <body>
-        <div class="title">HiveMind Module Registry</div>
-        <table class="summary" cellspacing="0">
-          <tr>
-            <th>Module</th>
-            <th>Version</th>
-            <th>Description</th>
-          </tr>
-          <xsl:for-each select="module">
-            <xsl:sort select="@id"/>
-            <tr>
-              <td>
-                <a href="module/{@id}.html">
-                  <xsl:value-of select="@id"/>
-                </a>
-              </td>
-              <td>
-                <xsl:value-of select="@version"/>
-              </td>
-              <td>
-                <xsl:value-of select="./text()"/>
-              </td>
-            </tr>
-          </xsl:for-each>
-        </table>
-        <table class="layout" cellspacing="0">
-          <tr>
-            <td>
-              <xsl:call-template name="master-index-configurations"/>
-            </td>
-            <td>
-              <xsl:call-template name="master-index-services"/>
-            </td>
-            <td>
-              <xsl:call-template name="master-index-schemas"/>
-            </td>
-          </tr>
-        </table>
-      </body>
-    </html>
-    <xsl:call-template name="output-detail-files"/>
-  </xsl:template>
-  <!--
-    == master-index-configurations
-    -->
-  <xsl:template name="master-index-configurations">
-    <table class="summary" cellspacing="0">
-      <tr>
-        <th>Configuration Points</th>
-      </tr>
-      <xsl:for-each select="module/configuration-point">
-        <xsl:sort select="@id"/>
-        <tr>
-          <td>
-            <a href="config/{@id}.html">
-              <xsl:value-of select="@id"/>
-            </a>
-          </td>
-        </tr>
-      </xsl:for-each>
-    </table>
-    <div class="info">
-      <xsl:value-of select="count(module/configuration-point)"/> configuration points
-    </div>
-  </xsl:template>
-  <!--
-    == master-index-services
-    -->
-  <xsl:template name="master-index-services">
-    <table class="summary" cellspacing="0">
-      <tr>
-        <th>Service Points</th>
-      </tr>
-      <xsl:for-each select="module/service-point">
-        <xsl:sort select="@id"/>
-        <tr>
-          <td>
-            <a href="service/{@id}.html">
-              <xsl:value-of select="@id"/>
-            </a>
-          </td>
-        </tr>
-      </xsl:for-each>
-    </table>
-    <div class="info">
-      <xsl:value-of select="count(module/service-point)"/> service points
-    </div>    
-  </xsl:template>
-  <!--
-    == master-index-schemas
-    -->
-  <xsl:template name="master-index-schemas">
-    <table class="summary" cellspacing="0">
-      <tr>
-        <th>Schemas</th>
-      </tr>
-      <xsl:for-each select="module/schema">
-        <xsl:sort select="@id"/>
-        <tr>
-          <td>
-            <a href="schema/{@id}.html">
-              <xsl:value-of select="@id"/>
-            </a>
-          </td>
-        </tr>
-      </xsl:for-each>
-    </table>
-    <div class="info">
-      <xsl:value-of select="count(module/schema)"/> schemas
-    </div>     
-  </xsl:template>
-  <!--
-    == link-to-configuration
-    -->
-  <xsl:template name="link-to-configuration">
-    <!-- 'config' must be a configuration-point element -->
-    <xsl:param name="config" select="."/>
-    <a href="../config/{$config/@id}.html">
-      <xsl:value-of select="$config/@id"/>
-    </a>
-  </xsl:template>
-  <!--
-    == link-to-service
-    -->
-  <xsl:template name="link-to-service">
-    <!-- 'service' must be a service-point element -->
-    <xsl:param name="service" select="."/>
-    <a href="../service/{$service/@id}.html">
-      <xsl:value-of select="$service/@id"/>
-    </a>
-  </xsl:template>
-  <!--
-    == link-to-schema
-    -->
-  <xsl:template name="link-to-schema">
-    <!-- 'schema' must be a schema element -->
-    <xsl:param name="schema" select="."/>
-    <a href="../schema/{$schema/@id}.html">
-      <xsl:value-of select="$schema/@id"/>
-    </a>
-  </xsl:template>
-  <!--
-    == link-to-module
-    -->
-  <xsl:template name="link-to-module">
-    <!-- 'module' must be a module element. A little different than the other
-         link templates; expects the module to be the immediate parent of the current
-         node. -->
-    <xsl:param name="module" select=".."/>
-    <a href="../module/{$module/@id}.html">
-      <xsl:value-of select="$module/@id"/>
-    </a>
-  </xsl:template>
-  <!--
-    == output-detail-files
-    == Outputs each individual file with details about a particular module, configuration,
-    == schema, or service.
-    -->
-  <xsl:template name="output-detail-files">
-    <xsl:apply-templates select="/registry/module"/>
-    <xsl:apply-templates select="/registry/module/schema" mode="detail-file"/>
-    <xsl:apply-templates select="/registry/module/configuration-point"/>
-    <xsl:apply-templates select="/registry/module/service-point"/>
-  </xsl:template>
-  <!-- 
-    == module
-    == Outputs a module index (listing stuff within a single module).
-    -->
-  <xsl:template match="module">
-    <xsl:message>Writing module <xsl:value-of select="@id"/></xsl:message>
-    <redirect:write file="{$base.dir}/module/{@id}.html">
-      <html>
-        <xsl:call-template name="head">
-          <xsl:with-param name="title"> Module <xsl:value-of select="@id"/> </xsl:with-param>
-        </xsl:call-template>
-        <body>
-          <div class="title">Module <xsl:value-of select="@id"/></div>
-          <div class="center-nav">
-            <a href="../index.html">Back to master index</a>
-          </div>
-          <table class="top-level-object" cellspacing="0">
-            <tr>
-              <th class="object-id">Module <xsl:value-of select="@id"/></th>
-              <th>Version:</th>
-              <td>
-                <xsl:value-of select="@version"/>
-              </td>
-            </tr>
-            <tr>
-              <th class="object-id" colspan="2">Package:</th>
-              <td><xsl:value-of select="@package"/></td>
-            </tr>
-            <xsl:call-template name="output-description"/>
-            <!-- TODO dependencies -->
-            <!-- TODO submodules -->
-            <xsl:if test="configuration-point|service-point|schema">
-              <tr>
-                <td colspan="3" class="container">
-                  <table class="layout" cellspacing="0">
-                    <tr>
-                      <td>
-                        <xsl:call-template name="output-configurations-for-module"/>
-                      </td>
-                      <td>
-                        <xsl:call-template name="output-services-for-module"/>
-                      </td>
-                      <td>
-                        <xsl:call-template name="output-schemas-for-module"/>
-                      </td>
-                    </tr>
-                  </table>
-                </td>
-              </tr>
-            </xsl:if>
-            <xsl:apply-templates select="contribution" mode="module-listing">
-              <xsl:sort select="@configuration-id"/>
-            </xsl:apply-templates>
-            <xsl:apply-templates select="implementation" mode="module-listing">
-              <xsl:sort select="@service-id"/>
-            </xsl:apply-templates>
-          </table>
-          <hr/>
-          <div class="center-nav">
-            <a href="../index.html">Back to master index</a>
-          </div>
-        </body>
-      </html>
-    </redirect:write>
-  </xsl:template>
-  <!-- head
-    == Writes out the head block, with a title and a stylesheet link.
-    -->
-  <xsl:template name="head">
-    <xsl:param name="title"/>
-    <head>
-      <link rel="stylesheet" type="text/css" href="../hivemind.css"/>
-      <title>HiveMind Registry - <xsl:value-of select="$title"/></title>
-    </head>
-  </xsl:template>
-  <!-- output-description
-    == Outputs a row for a description, if one is present.  A description
-    == is character data inside certain elements.
-    -->
-  <xsl:template name="output-description">
-    <xsl:if test="normalize-space(./text())">
-      <tr>
-        <td class="description" colspan="3">
-          <xsl:value-of select="./text()"/>
-        </td>
-      </tr>
-    </xsl:if>
-  </xsl:template>
-  <!-- output-configurations-for-module
-    == Writes an index of configuration-points for the current module.
-    -->
-  <xsl:template name="output-configurations-for-module">
-    <xsl:if test="configuration-point">
-      <table class="summary" cellspacing="0">
-        <tr>
-          <th>Configuration Points</th>
-        </tr>
-        <xsl:for-each select="configuration-point">
-          <xsl:sort select="@id"/>
-          <tr>
-            <td>
-              <xsl:call-template name="link-to-configuration"/>
-            </td>
-          </tr>
-        </xsl:for-each>
-      </table>
-      <div class="info">
-        <xsl:value-of select="count(configuration-point)"/> configuration points
-      </div>      
-    </xsl:if>    
-  </xsl:template>
-  <!--
-    == output-services-for-module
-    -->
-  <xsl:template name="output-services-for-module">
-    <xsl:if test="service-point">
-      <table class="summary" cellspacing="0">
-        <tr>
-          <th>Service Points</th>
-        </tr>
-        <xsl:for-each select="service-point">
-          <xsl:sort select="@id"/>
-          <tr>
-            <td>
-              <xsl:call-template name="link-to-service"/>
-            </td>
-          </tr>
-        </xsl:for-each>
-      </table>
-      <div class="info">
-        <xsl:value-of select="count(service-point)"/> service points
-      </div>       
-    </xsl:if>
-  </xsl:template>
-  <xsl:template name="output-schemas-for-module">
-    <xsl:if test="schema">
-      <table class="summary" cellspacing="0">
-        <tr>
-          <th>Schemas</th>
-        </tr>
-        <xsl:for-each select="schema">
-          <xsl:sort select="@id"/>
-          <tr>
-            <td>
-              <xsl:call-template name="link-to-schema"/>
-            </td>
-          </tr>
-        </xsl:for-each>
-      </table>
-      <div class="info">
-        <xsl:value-of select="count(schema)"/> schemas
-      </div>       
-    </xsl:if>
-  </xsl:template>
-  <!--
-    == contribution
-    -->
-  <xsl:template match="contribution">
-    <tr>
-      <th class="object-id"> <!-- Columns 2 and 3 are for the if attribute. If it doesn't exist,
-           "expand" this column to eat those columns. --> <xsl:if test="not(@if)"> <xsl:attribute name="colspan">3</xsl:attribute> </xsl:if> Contribution to <xsl:call-template name="link-to-configuration"> <xsl:with-param name="config" select="/registry/module/configuration-point[@id = current()/@configuration-id]"/> </xsl:call-template> </th>
-      <xsl:if test="@if">
-        <th>If:</th>
-        <td>
-          <xsl:value-of select="@if"/>
-        </td>
-      </xsl:if>
-    </tr>
-    <tr>
-      <td colspan="3" class="container">
-        <xsl:call-template name="output-content-raw"/>
-      </td>
-    </tr>
-  </xsl:template>
-  <!--
-    == implementation
-    -->
-  <xsl:template match="implementation" mode="module-listing">
-    <tr>
-      <th class="object-id"> <!-- Columns 2 and 3 are for the if attribute. If it doesn't exist,
-           "expand" this column to eat those columns. --> <xsl:if test="not(@if)"> <xsl:attribute name="colspan">3</xsl:attribute> </xsl:if> Implementation for service <xsl:call-template name="link-to-service"> <xsl:with-param name="service" select="/registry/module/service-point[@id = current()/@service-id]"/> </xsl:call-template> </th>
-      <xsl:if test="@if">
-        <th>If:</th>
-        <td>
-          <xsl:value-of select="@if"/>
-        </td>
-      </xsl:if>
-    </tr>
-    <xsl:call-template name="output-service-implementation"/>
-  </xsl:template>
-  <!--
-    == implementation
-    -->
-  <xsl:template match="implementation">
-    <tr>
-      <th class="section"> <!-- Columns 2 and 3 are for the if attribute. If it doesn't exist,
-           "expand" this column to eat those columns. --> <xsl:if test="not(@if)"> <xsl:attribute name="colspan">3</xsl:attribute> </xsl:if> Implementation from module <xsl:call-template name="link-to-module"/> </th>
-      <xsl:if test="@if">
-        <th>If:</th>
-        <td>
-          <xsl:value-of select="@if"/>
-        </td>
-      </xsl:if>
-    </tr>
-    <xsl:call-template name="output-service-implementation"/>
-  </xsl:template>  
-  <!--
-    == output-service-implementation
-    -->
-  <xsl:template name="output-service-implementation">
-    <xsl:if test="create-instance|invoke-factory|interceptor">
-      <tr>
-        <td colspan="3" class="container">
-          <div class="xml">
-            <ul>
-              <xsl:apply-templates select="create-instance"/>
-              <xsl:apply-templates select="invoke-factory"/>
-              <xsl:apply-templates select="interceptor"/>
-            </ul>
-          </div>
-        </td>
-      </tr>
-    </xsl:if>
-  </xsl:template>
-  <!--
-    == output-content-raw
-    == Invoked to output the content of an element as raw XML.  We "cook" the elements
-    == by wrapping them is special elements to control output formatting.
-    -->
-  <xsl:template name="output-content-raw">
-    <xsl:if test="*">
-      <div class="xml">
-        <xsl:for-each select="*">
-          <xsl:apply-templates select="." mode="raw"/>
-          <xsl:if test="position() != last()">
-            <br/>
-          </xsl:if>
-        </xsl:for-each>
-      </div>
-    </xsl:if>
-  </xsl:template>
-  <!--
-    == * (mode=raw)
-    -->
-  <xsl:template match="*" mode="raw">
-     &lt;<xsl:value-of select="name()"/>   
-      <xsl:for-each select="@*" xml:space="preserve">
-        <xsl:value-of select="' '"/>
-        <span class="attribute"><xsl:value-of select="name()"/></span>="<span class="attribute-value"><xsl:value-of select="."/></span>"
-      </xsl:for-each> <xsl:call-template name="raw-content"/> </xsl:template>
-  <!--
-    == raw-content
-    == Closes the current tag and outputs its content (if any) in the form of nested elements or character data.
-    -->
-  <xsl:template name="raw-content">
-    <xsl:choose>
-      <xsl:when test="*"> &gt; <ul> <xsl:apply-templates mode="nested-raw"/> </ul> &lt;/<xsl:value-of select="name()"/>&gt; </xsl:when>
-      <xsl:when test="normalize-space()"> &gt; <ul> <li> <xsl:value-of select="."/> </li> </ul> &lt;/<xsl:value-of select="name()"/>&gt; </xsl:when>
-      <xsl:otherwise> /&gt; </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-  <!--
-    == * (mode=nested-raw)
-    -->
-  <xsl:template match="*" mode="nested-raw">
-    <li>
-      <xsl:apply-templates select="." mode="raw"/>
-    </li>
-  </xsl:template>
-  <!--
-    == create-instance
-    -->
-  <xsl:template match="create-instance">
-    <li>
-      <xsl:apply-templates select="." mode="raw"/>
-    </li>
-  </xsl:template>
-  <!--
-    == interceptor
-    -->
-  <xsl:template match="interceptor">
-    <li> &lt;interceptor <span class="attribute">service-id</span>="<span class="attribute-value"><xsl:call-template name="link-to-service"> <xsl:with-param name="service" select="/registry/module/service-point[@id = current()/@service-id]"/> </xsl:call-template></span>" <xsl:for-each select="@*[name() != 'service-id']" xml:space="preserve">
-        <span class="attribute"><xsl:value-of select="name()"/></span>="<span class="attribute-value"><xsl:value-of select="."/></span>"
-      </xsl:for-each> <xsl:call-template name="raw-content"/> </li>
-  </xsl:template>
-  <!-- 
-    == invoke-factory
-    -->
-  <xsl:template match="invoke-factory">
-    <li> &lt;invoke-factory <span class="attribute">service-id</span>="<span class="attribute-value"><xsl:choose> <xsl:when test="@service-id"> <xsl:call-template name="link-to-service"> <xsl:with-param name="service" select="/registry/module/service-point[@id = current()/@service-id]"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <a href="../services/hivemind.BuilderFactory.html">hivemind.BuilderFactory</a> </xsl:otherwise> </xsl:choose></span>" <span class="attribute">model</span>="<span 
-      class="attribute-value"><a href="../config/hivemind.ServiceModels.html"><xsl:choose> <xsl:when test="@model"> <xsl:value-of select="@model"/> </xsl:when> <xsl:otherwise>singleton</xsl:otherwise></xsl:choose></a></span>" <xsl:call-template name="raw-content"/> </li>
-  </xsl:template>
-  <!--
-    == schema (detail-file)
-    == Outputs a detail file for the schema.
-    -->
-  <xsl:template match="schema" mode="detail-file">
-    <xsl:message>Writing schema <xsl:value-of select="@id"/></xsl:message>
-    <redirect:write file="{$base.dir}/schema/{@id}.html">
-      <html>
-        <xsl:call-template name="head">
-          <xsl:with-param name="title"> Schema <xsl:value-of select="@id"/> </xsl:with-param>
-        </xsl:call-template>
-        <body>
-          <xsl:call-template name="artifact-links"/>
-          <hr/>
-          <table class="top-level-object" cellspacing="0">
-            <tr>
-              <th class="object-id" colspan="3"> <xsl:call-template name="output-visibility"/> Schema <xsl:value-of select="@id"/> </th>
-            </tr>
-            <xsl:call-template name="output-description"/>
-            <tr>
-              <td class="container" colspan="3">
-                <table class="nested-object" cellspacing="0">
-                  <xsl:apply-templates select="*"/>
-                  <xsl:if test="/registry/module/configuration-point[@schema-id = current()/@id] | /registry/module/service-point[@parameters-schema-id = current()/@id]">
-                    <tr>
-                      <th colspan="3" class="section">References</th>
-                    </tr>
-                    <tr>
-                      <td colspan="3" class="container">
-                        <table cellspacing="0" class="layout">
-                          <tr>
-                            <xsl:if test="/registry/module/configuration-point[@schema-id = current()/@id]">
-                              <td>
-                                <table class="summary" cellspacing="0">
-                                  <tr>
-                                    <th> Configurations </th>
-                                  </tr>
-                                  <xsl:for-each select="/registry/module/configuration-point[@schema-id = current()/@id]">
-                                    <xsl:sort select="@id"/>
-                                    <tr>
-                                      <td>
-                                        <xsl:call-template name="link-to-configuration"/>
-                                      </td>
-                                    </tr>
-                                  </xsl:for-each>
-                                </table>
-                              </td>
-                            </xsl:if>
-                            <xsl:if test="/registry/module/service-point[@parameters-schema-id = current()/@id]">
-                              <td>
-                                <table class="summary" cellspacing="0">
-                                  <tr>
-                                    <th> Services </th>
-                                  </tr>
-                                  <xsl:for-each select="/registry/module/service-point[@parameters-schema-id = current()/@id]">
-                                    <xsl:sort select="@id"/>
-                                    <tr>
-                                      <td>
-                                        <xsl:call-template name="link-to-service"/>
-                                      </td>
-                                    </tr>
-                                  </xsl:for-each>
-                                </table>
-                              </td>
-                            </xsl:if>
-                          </tr>
-                        </table>
-                      </td>
-                    </tr>
-                  </xsl:if>
-                </table>
-              </td>
-            </tr>
-          </table>
-          <hr/>
-          <xsl:call-template name="artifact-links"/>
-        </body>
-      </html>
-    </redirect:write>
-  </xsl:template>
-  <!--
-    == element
-    == element within a schema
-    == contains attributes and conversion rules
-    == See schema-content template
-    -->
-  <xsl:template match="element">
-    <tr>
-      <th class="object-id"> <xsl:if test="not(@content-translator)"> <xsl:attribute name="colspan">3</xsl:attribute> </xsl:if> Element &lt;<xsl:value-of select="@name"/>&gt; </th>
-      <xsl:if test="@content-translator">
-        <th> Content translator: </th>
-        <td>
-          <xsl:call-template name="link-to-translator">
-            <xsl:with-param name="translator" select="@content-translator"/>
-          </xsl:call-template>
-        </td>
-      </xsl:if>
-    </tr>
-    <xsl:call-template name="output-description"/>
-    <xsl:apply-templates select="attribute">
-      <xsl:sort select="@name"/>
-    </xsl:apply-templates>
-    <xsl:if test="element">
-      <tr>
-        <th colspan="3" class="section">Nested Elements</th>
-      </tr>
-      <tr>
-        <td colspan="3" class="container">
-          <table class="nested-object" cellspacing="0">
-            <xsl:apply-templates/>
-          </table>
-        </td>
-      </tr>
-    </xsl:if>
-    <xsl:if test="rules">
-      <tr>
-        <th colspan="3" class="section">Conversion Rules</th>
-      </tr>
-      <tr>
-        <td colspan="3" class="container">
-          <xsl:apply-templates select="rules"/>
-        </td>
-      </tr>
-    </xsl:if>
-  </xsl:template>
-  <!--
-    == rules
-    == For rules  elements, we don't care about the element itself, but we do want
-    == to output its content formatted as XML.
-    -->
-  <xsl:template match="rules">
-    <xsl:call-template name="output-content-raw"/>
-  </xsl:template>
-  <!--
-    == attribute
-    -->
-  <xsl:template match="attribute">
-    <tr>
-      <th class="sub-id">Attribute <xsl:value-of select="@name"/> <xsl:if test="@required = 'true'"> (required) </xsl:if> <xsl:if test="@unique = 'true'"> (unique) </xsl:if> <!-- TODO: mark if key attribute --> </th>
-      <th> Translator: </th>
-      <td>
-        <xsl:choose>
-          <xsl:when test="@translator">
-            <xsl:call-template name="link-to-translator">
-              <xsl:with-param name="translator" select="@translator"/>
-            </xsl:call-template>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:call-template name="link-to-translator">
-              <xsl:with-param name="translator" select="'string'"/>
-            </xsl:call-template>
-          </xsl:otherwise>
-        </xsl:choose>
-      </td>
-    </tr>
-    <xsl:call-template name="output-description"/>
-  </xsl:template>
-  <!--
-    == link-to-translator
-    -->
-  <xsl:template name="link-to-translator">
-    <xsl:param name="translator"/>
-    <a href="../config/hivemind.Translators.html">
-      <xsl:value-of select="$translator"/>
-    </a>
-  </xsl:template>
-  <!--
-    == artifact-links
-    == Writes links back up the the module and master index.
-    -->
-  <xsl:template name="artifact-links">
-    <div class="title"> Module <xsl:call-template name="link-to-module"/> </div>
-    <div class="center-nav">
-      <a href="../index.html">Back to master index</a>
-    </div>
-  </xsl:template>
-  <!--
-    == configuration-point
-    -->
-  <xsl:template match="configuration-point">
-    <xsl:message>Writing configuration-point <xsl:value-of select="@id"/></xsl:message>
-    <redirect:write file="{$base.dir}/config/{@id}.html">
-      <html>
-        <xsl:call-template name="head">
-          <xsl:with-param name="title"> Configuration Point <xsl:value-of select="@id"/> </xsl:with-param>
-        </xsl:call-template>
-        <body>
-          <xsl:call-template name="artifact-links"/>
-          <hr/>
-          <table class="top-level-object" cellspacing="0">
-            <tr>
-              <th class="object-id"> <xsl:call-template name="output-visibility"/> Configuration Point <xsl:value-of select="@id"/> </th>
-              <th>Occurs:</th>
-              <td>
-                <xsl:value-of select="@occurs"/>
-                <xsl:if test="not(@occurs)"> unbounded </xsl:if>
-              </td>
-            </tr>
-            <xsl:if test="@schema-id">
-              <tr>
-                <th colspan="2">Schema:</th>
-                <td>
-                  <xsl:call-template name="link-to-schema">
-                    <xsl:with-param name="schema" select="/registry/module/schema[@id = current()/@schema-id]"/>
-                  </xsl:call-template>
-                </td>
-              </tr>
-            </xsl:if>
-            <xsl:call-template name="output-description"/>
-            <xsl:if test="schema">
-              <tr>
-                <th colspan="3" class="section">Schema</th>
-              </tr>
-              <tr>
-                <td colspan="3" class="container">
-                  <!-- TODO: usage -->
-                  <table class="nested-object" cellspacing="0">
-                    <xsl:apply-templates select="schema/element"/>
-                  </table>
-                </td>
-              </tr>
-            </xsl:if>
-            <xsl:apply-templates select="/registry/module/contribution[@configuration-id = current()/@id]">
-              <!-- Order by module id -->
-              <xsl:sort select="../@id"/>
-            </xsl:apply-templates>
-          </table>
-          <hr/>
-          <xsl:call-template name="artifact-links"/>
-        </body>
-      </html>
-    </redirect:write>
-  </xsl:template>
-  <!--
-    == contribution
-    -->
-  <xsl:template match="contribution">
-    <tr>
-      <th class="section"> <xsl:if test="not(@if)"> <xsl:attribute name="colspan">3</xsl:attribute> </xsl:if> Contribution from module <xsl:call-template name="link-to-module"/> </th>
-      <xsl:if test="@if">
-        <th>If:</th>
-        <td>
-          <xsl:value-of select="@if"/>
-        </td>
-      </xsl:if>
-    </tr>
-    <tr>
-      <td colspan="3" class="container">
-        <xsl:call-template name="output-content-raw"/>
-      </td>
-    </tr>
-  </xsl:template>
-  <!--
-    == contribution
-    -->
-  <xsl:template match="contribution" mode="module-listing">
-    <tr>
-      <th class="object-id"> <xsl:if test="not(@if)"> <xsl:attribute name="colspan">3</xsl:attribute> </xsl:if> Contribution to <xsl:call-template name="link-to-configuration"> <xsl:with-param name="config" select="/registry/module/configuration-point[@id = current()/@configuration-id]"/> </xsl:call-template> </th>
-      <xsl:if test="@if">
-        <th>If:</th>
-        <td>
-          <xsl:value-of select="@if"/>
-        </td>
-      </xsl:if>
-    </tr>
-    <tr>
-      <td colspan="3" class="container">
-        <xsl:call-template name="output-content-raw"/>
-      </td>
-    </tr>
-  </xsl:template>
-  <!-- 
-    == output-visibility
-    -->
-  <xsl:template name="output-visibility">
-    <xsl:choose>
-      <xsl:when test="@visibility = 'private'">
-        <img src="../private.png" width="20" height="20" alt="[private]"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <img src="../public.png" width="20" height="20" alt="[public]"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-  <xsl:template match="service-point">
-    <xsl:message>Writing service-point <xsl:value-of select="@id"/></xsl:message>
-    <redirect:write file="{$base.dir}/service/{@id}.html">
-      <html>
-        <xsl:call-template name="head">
-          <xsl:with-param name="title"> Service Point <xsl:value-of select="@id"/> </xsl:with-param>
-        </xsl:call-template>
-        <body>
-          <xsl:call-template name="artifact-links"/>
-          <hr/>
-          <table class="top-level-object" cellspacing="0">
-            <tr>
-              <th class="object-id"> <xsl:call-template name="output-visibility"/> Service Point <xsl:value-of select="@id"/> </th>
-              <th> Interface: </th>
-              <td>
-                <a ><xsl:attribute name="href">http://tapestry.apache.org/tapestry4.1/apidocs/<xsl:value-of select="translate(@interface, '.', '/')"/>.html</xsl:attribute> 
-                <xsl:value-of select="@interface"/>
-                </a>
-              </td>
-            </tr>
-            <xsl:call-template name="output-description"/>
-            <xsl:if test="@parameters-schema-id">
-              <tr>
-                <th colspan="2"> Parameters Schema: </th>
-                <td>
-                  <xsl:call-template name="link-to-schema">
-                    <xsl:with-param name="schema" select="/registry/module/schema[@id = current()/@parameters-schema-id]"/>
-                  </xsl:call-template>
-                </td>
-              </tr>
-            </xsl:if>
-            <xsl:if test="parameters-schema or @parameters-schema-id">
-              <tr>
-                <th colspan="2"> Parameters occurs: </th>
-                <td>
-                  <xsl:value-of select="@parameters-occurs"/>
-                  <xsl:if test="not(@parameters-occurs)">1</xsl:if>
-                </td>
-              </tr>
-            </xsl:if>
-            <xsl:if test="parameters-schema">
-              <tr>
-                <th colspan="3" class="section"> Parameters Schema </th>
-              </tr>
-              <tr>
-                <td colspan="3" class="container">
-                  <!-- TODO: usage -->
-                  <table class="nested-object" cellspacing="0">
-                    <xsl:apply-templates select="parameters-schema/element"/>
-                  </table>
-                </td>
-              </tr>
-            </xsl:if>
-            <xsl:if test="interceptor|create-instance|invoke-factory">
-              <tr>
-                <th colspan="3" class="section">Implementation</th>
-              </tr>
-              <xsl:call-template name="output-service-implementation"/>
-            </xsl:if>
-            <xsl:apply-templates select="/registry/module/implementation[@service-id = current()/@id]">
-              <xsl:sort select="../@id"/>
-            </xsl:apply-templates>
-          </table>
-          <hr/>
-          <xsl:call-template name="artifact-links"/>
-        </body>
-      </html>
-    </redirect:write>
-  </xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/tapestry/support/private.png b/tapestry/support/private.png
deleted file mode 100644
index cf382cb..0000000
--- a/tapestry/support/private.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/support/public.png b/tapestry/support/public.png
deleted file mode 100644
index 4c0b857..0000000
--- a/tapestry/support/public.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-annotations/pom.xml b/tapestry/tapestry-annotations/pom.xml
deleted file mode 100644
index ac83853..0000000
--- a/tapestry/tapestry-annotations/pom.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-annotations</artifactId>
-    <packaging>jar</packaging>
-    <version>4.1.3</version>
-    <!-- This should change to tapestry-project -->
-    <parent>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>tapestry-project</artifactId>
-        <version>4.1.3</version>
-    </parent>
-    <name>Annotations</name>
-    <inceptionYear>2006</inceptionYear>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-framework</artifactId>
-            <version>4.1.3</version>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind-lib</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymockclassextension</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.9</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>5.1</version>
-            <classifier>jdk15</classifier>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-test</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <sourceDirectory>src/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/descriptor/META-INF</directory>
-                <includes>
-                    <include>**</include>
-                </includes>
-                <targetPath>META-INF</targetPath>
-            </resource>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-                <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </resource>
-        </resources>
-
-        <testSourceDirectory>src/test</testSourceDirectory>
-        <testResources>
-            <testResource>
-                <directory>src/test</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-                <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </testResource>
-            <testResource>
-                <directory>src/conf</directory>
-                <includes>
-                    <include>log4j.properties</include>
-                </includes>
-            </testResource>
-        </testResources>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>2.1</version>
-                <configuration>
-                    <archive>
-                        <compress>true</compress>
-                        <index>true</index>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>2.0.2</version>
-                <inherited>true</inherited>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-source-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <version>1.1</version>
-                <inherited>true</inherited>
-                <executions>
-                    <execution>
-                        <phase>compile</phase>
-                        <configuration>
-                            <tasks>
-                                <ant antfile="../support/build.xml" inheritRefs="true">
-                                    <property name="target.dir" value="../target/site/tapestry-annotations" />
-                                    <target name="build" />
-                                </ant>
-                            </tasks>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>hivemind</groupId>
-                        <artifactId>hivemind</artifactId>
-                        <version>1.1.1</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>xerces</groupId>
-                        <artifactId>xercesImpl</artifactId>
-                        <version>2.6.2</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>commons-logging</groupId>
-                        <artifactId>commons-logging</artifactId>
-                        <version>1.0.4</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>log4j</groupId>
-                        <artifactId>log4j</artifactId>
-                        <version>1.2.13</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>oro</groupId>
-                        <artifactId>oro</artifactId>
-                        <version>2.0.8</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>ant</groupId>
-                        <artifactId>ant-xslp</artifactId>
-                        <version>1.6.5</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>ant</groupId>
-                        <artifactId>ant-trax</artifactId>
-                        <version>1.6.5</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-        </plugins>
-    </build>
-
-    <reporting>
-        <outputDirectory>../target/site/tapestry-annotations</outputDirectory>
-    </reporting>
-
-</project>
diff --git a/tapestry/tapestry-annotations/src/descriptor/META-INF/hivemodule.xml b/tapestry/tapestry-annotations/src/descriptor/META-INF/hivemodule.xml
deleted file mode 100644
index 62dd6a7..0000000
--- a/tapestry/tapestry-annotations/src/descriptor/META-INF/hivemodule.xml
+++ /dev/null
@@ -1,237 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<module id="tapestry.annotation" version="4.0.0" package="org.apache.tapestry.annotations">
-
-    JDK 1.5 annotation support for Tapestry, allowing classes (including base classes) to provide details normally
-    specified in the XML component or page specification.
-
-    <service-point id="AnnotationEnhancementWorker" interface="org.apache.tapestry.enhance.EnhancementWorker">
-
-        Bridge from ordinary specification-based enhancements, to annotation-driven enhancements.
-
-        <invoke-factory>
-            <construct class="AnnotationEnhancementWorker">
-                <set-configuration property="methodWorkers" configuration-id="MethodWorkers" />
-                <set-configuration property="classWorkers" configuration-id="ClassWorkers" />
-                <set-configuration property="secondaryAnnotationWorkers" configuration-id="SecondaryAnnotationWorkers" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="ComponentHousekeepingWorker" interface="org.apache.tapestry.enhance.EnhancementWorker">
-
-        Perform additional housekeeping relating to injected components, i.e. ensure bindings are set for copyOf
-        components.
-
-        <invoke-factory>
-            <construct class="ComponentHousekeepingWorker" />
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="ComponentPropertyProxyWorker" interface="org.apache.tapestry.enhance.EnhancementWorker">
-
-        Checks for proxy capabilities of specified properties.
-        
-        <invoke-factory>
-            <construct class="ComponentPropertyProxyWorker">
-                <set-configuration property="excludedPackages" configuration-id="ExcludedProxyAnnotations" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <!-- Only contribute when in JDK 1.5 and java.lang.Annotation exists -->
-
-    <contribution configuration-id="tapestry.enhance.EnhancementWorkers" if="class java.lang.annotation.Annotation">
-        <!-- Needs to come first because some enhancements modify
-            the component specification, affecting what occurs in later commands. -->
-        <command id="annotation-worker" object="service:AnnotationEnhancementWorker" before="*" />
-        
-        <command id="component-housekeeping-worker" object="service:ComponentHousekeepingWorker" after="annotation-worker" />
-        <command id="component-propertyproxy-worker" object="service:ComponentPropertyProxyWorker" before="tapestry.enhance.specified-property" />
-        <command id="inject-asset-annotation" object="service:InjectAssetAnnotationWorker" after="tapestry.enhance.inject-asset" />
-    </contribution>
-
-    <configuration-point id="ExcludedProxyAnnotations">
-    
-        Definition of simple string match configurations that will cause any annotation class name 
-        matching any of the definitions in this configuration point to not be eligable for cglib proxying
-        enhancements later on. This is done to prevent issues with popular persistence frameworks like
-        Hibernate.
-        
-        <schema>
-            <element name="exclude">
-                <attribute name="match" required="true" unique="true" >
-                    The string to use in matching containment within the string returned from Annotation.annotationType().getName().
-                </attribute>
-                <rules>
-                    <push-attribute attribute="match" />
-                    <invoke-parent method="addElement" />
-                </rules>
-            </element>
-        </schema>
-    </configuration-point>
-
-    <contribution configuration-id="ExcludedProxyAnnotations">
-        <exclude match="org.hibernate" />
-        <exclude match="javax.persistence" />
-        <exclude match="Entity" />
-    </contribution>
-
-    <configuration-point id="ClassWorkers">
-
-        Maps from a specific Annotation class, to a particular ClassAnnotationEnhancementWorker (typically, a service).
-        <schema>
-            <element name="worker" key-attribute="annotation">
-
-                <attribute name="annotation" translator="class">
-                    The name of an Annotation class which triggers the enhancement worker's behavior.
-                </attribute>
-
-                <attribute name="object" translator="object">
-
-                    An object that implements the ClassAnnotationEnhancementWorker interface.
-                </attribute>
-
-                <rules>
-                    <push-attribute attribute="object" />
-                    <invoke-parent method="addElement" />
-                </rules>
-
-            </element>
-        </schema>
-
-    </configuration-point>
-
-    <contribution configuration-id="ClassWorkers">
-        <worker annotation="ComponentClass" object="instance:ComponentClassAnnotationWorker" />
-        <worker annotation="Meta" object="instance:MetaAnnotationWorker" />
-    </contribution>
-
-    <configuration-point id="MethodWorkers">
-
-        Maps from a specific Annotation class, to a particular MethodAnnotationEnhancementWorker (typically, a service).
-        <schema>
-            <element name="worker" key-attribute="annotation">
-
-                <attribute name="annotation" translator="class">
-                    The name of an Annotation class which triggers the enhancement worker's behavior.
-                </attribute>
-
-                <attribute name="object" translator="object">
-
-                    An object that implements the MethodAnnotationEnhancementWorker interface.
-                </attribute>
-
-                <rules>
-                    <push-attribute attribute="object" />
-                    <invoke-parent method="addElement" />
-                </rules>
-
-            </element>
-        </schema>
-
-    </configuration-point>
-
-    <contribution configuration-id="MethodWorkers">
-
-        <!-- These instantiate the corresponding enhancement worker, and delegate to it. -->
-        <worker annotation="InjectObject" object="service:InjectObjectAnnotationWorker" />
-        <worker annotation="InjectComponent" object="instance:InjectComponentAnnotationWorker" />
-        <worker annotation="Message" object="instance:MessageAnnotationWorker" />
-
-        <!-- These update the component specification with new sub-elements. Later, the 
-            existing enhancement workers perform the work, as if the sub-elements were
-            specified in the XML. This is actually a lot easier and just as powerful, and
-            the delegating style will probably go pretty soon.  -->
-
-        <worker annotation="InjectState" object="instance:InjectStateAnnotationWorker" />
-        <worker annotation="InjectStateFlag" object="instance:InjectStateFlagAnnotationWorker" />
-        <worker annotation="Persist" object="service:PersistAnnotationWorker" />
-        <worker annotation="Bean" object="instance:BeanAnnotationWorker" />
-        <worker annotation="Asset" object="instance:AssetAnnotationWorker" />
-        <worker annotation="Parameter" object="instance:ParameterAnnotationWorker" />
-        <worker annotation="InjectPage" object="instance:InjectPageAnnotationWorker" />
-        <worker annotation="Component" object="service:ComponentAnnotationWorker" />
-        <worker annotation="InjectMeta" object="instance:InjectMetaAnnotationWorker" />
-        <worker annotation="InjectScript" object="instance:InjectScriptAnnotationWorker" />
-    </contribution>
-
-    <service-point id="ComponentAnnotationWorker" interface="MethodAnnotationEnhancementWorker">
-        <invoke-factory>
-            <construct class="ComponentAnnotationWorker" />
-        </invoke-factory>
-    </service-point>
-
-	<service-point id="PersistAnnotationWorker" interface="MethodAnnotationEnhancementWorker">
-		<invoke-factory>
-			<construct class="PersistAnnotationWorker">
-				<set-service property="propertySource" service-id="tapestry.props.ApplicationPropertySource" />
-			</construct>
-		</invoke-factory>
-	</service-point>
-
-    <service-point id="InjectAssetAnnotationWorker" interface="org.apache.tapestry.enhance.EnhancementWorker">
-
-        Injects IAsset assets based on previously defined asset alias names. (such as in a .page or .jwc spec )
-
-        <invoke-factory>
-            <construct class="InjectAssetAnnotationWorker" />
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectObjectAnnotationWorker" interface="MethodAnnotationEnhancementWorker">
-
-        Injects HiveMind objects, based on the InjectObject annotation.
-
-        <invoke-factory>
-            <construct class="InjectObjectAnnotationWorker">
-                <set-service property="provider" service-id="tapestry.InjectedValueProvider" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <configuration-point id="SecondaryAnnotationWorkers">
-
-        Configures a list of secondary annotation workers.
-        <schema>
-            <element name="worker">
-
-                <attribute name="object" translator="object" required="true">
-
-                    An object that implements the SecondaryAnnotationEnhancementWorker interface.
-                </attribute>
-
-                <rules>
-                    <push-attribute attribute="object" />
-                    <invoke-parent method="addElement" />
-                </rules>
-
-            </element>
-        </schema>
-
-    </configuration-point>
-
-    <contribution configuration-id="SecondaryAnnotationWorkers">
-        <worker object="instance:InitialValueAnnotationWorker" />
-        <worker object="instance:EventListenerAnnotationWorker" />
-    </contribution>
-
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationEnhancementWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationEnhancementWorker.java
deleted file mode 100644
index a1342ea..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationEnhancementWorker.java
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.enhance.EnhancementWorker;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.DescribedLocation;
-
-/**
- * Implementation of {@link org.apache.tapestry.enhance.EnhancementWorker} that finds class and
- * method annotations and delegates out to specific
- * {@link org.apache.tapestry.annotations.ClassAnnotationEnhancementWorker} and
- * {@link org.apache.tapestry.annotations.MethodAnnotationEnhancementWorker} instances.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class AnnotationEnhancementWorker implements EnhancementWorker
-{
-    private ClassResolver _classResolver;
-
-    private ErrorLog _errorLog;
-
-    private Map<Class, MethodAnnotationEnhancementWorker> _methodWorkers;
-
-    private Map<Class, ClassAnnotationEnhancementWorker> _classWorkers;
-
-    private List<SecondaryAnnotationWorker> _secondaryAnnotationWorkers;
-
-    public void setClassWorkers(Map<Class, ClassAnnotationEnhancementWorker> classWorkers)
-    {
-        _classWorkers = classWorkers;
-    }
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
-    {
-        Class clazz = op.getBaseClass();
-
-        Resource classResource = newClassResource(clazz);
-
-        for (Annotation a : clazz.getAnnotations())
-        {
-            performClassEnhancement(op, spec, clazz, a, classResource);
-        }
-
-        for (Method m : clazz.getMethods())
-        {
-            performMethodEnhancement(op, spec, m, classResource);
-        }
-    }
-
-    private ClasspathResource newClassResource(Class clazz)
-    {
-        return new ClasspathResource(_classResolver, clazz.getName().replace('.', '/'));
-    }
-
-    void performClassEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Class clazz, Annotation annotation, Resource classResource)
-    {
-        ClassAnnotationEnhancementWorker worker = _classWorkers.get(annotation.annotationType());
-
-        if (worker == null)
-            return;
-
-        try
-        {
-            Location location = new DescribedLocation(classResource, AnnotationMessages.classAnnotation(annotation, clazz));
-
-            worker.performEnhancement(op, spec, clazz, location);
-        }
-        catch (Exception ex)
-        {
-            _errorLog.error(AnnotationMessages.failureProcessingClassAnnotation(
-                    annotation,
-                    clazz,
-                    ex), null, ex);
-        }
-
-    }
-
-    void performMethodEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Resource classResource)
-    {
-        for (Annotation a : method.getAnnotations())
-        {
-            performMethodEnhancement(op, spec, method, a, classResource);
-        }
-
-        try
-        {
-            
-            for (SecondaryAnnotationWorker worker : _secondaryAnnotationWorkers)
-                if (worker.canEnhance(method))
-                    worker.peformEnhancement(op, spec, method, classResource);
-            
-        }
-        catch (Exception ex)
-        {
-            _errorLog.error(AnnotationMessages.failureEnhancingMethod(method, ex), null, ex);
-        }
-    }
-
-    void performMethodEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Annotation annotation, Resource classResource)
-    {
-        MethodAnnotationEnhancementWorker worker = _methodWorkers.get(annotation.annotationType());
-
-        if (worker == null)
-            return;
-
-        try
-        {
-            Location location = AnnotationUtils.buildLocationForAnnotation(
-                    method,
-                    annotation,
-                    classResource);
-            worker.performEnhancement(op, spec, method, location);
-        }
-        catch (Exception ex)
-        {
-            _errorLog.error(
-                    AnnotationMessages.failureProcessingAnnotation(annotation, method, ex),
-                    null,
-                    ex);
-        }
-
-    }
-
-    public void setMethodWorkers(Map<Class, MethodAnnotationEnhancementWorker> methodWorkers)
-    {
-        _methodWorkers = methodWorkers;
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-
-    public void setSecondaryAnnotationWorkers(List<SecondaryAnnotationWorker> workers)
-    {
-        _secondaryAnnotationWorkers = workers;
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationMessages.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationMessages.java
deleted file mode 100644
index a08f130..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationMessages.java
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.hivemind.service.ClassFabUtils;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-
-final class AnnotationMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(
-            AnnotationMessages.class);
-    
-    /* defeat instantiation */
-    private AnnotationMessages() { }
-    
-    static String noParametersExpected(Method m)
-    {
-        return _formatter.format("no-parameters-expected", m);
-    }
-
-    static String notAccessor(Method method)
-    {
-        return _formatter.format("no-accessor", method);
-    }
-
-    static String voidAccessor(Method method)
-    {
-        return _formatter.format("void-accessor", method);
-    }
-
-    static String nonVoidMutator(Method method)
-    {
-        return _formatter.format("non-void-mutator", method);
-    }
-
-    static String wrongParameterCount(Method method)
-    {
-        return _formatter.format("wrong-parameter-count", method);
-    }
-
-    static String failureProcessingAnnotation(Annotation annotation, Method method, Throwable cause)
-    {
-        return _formatter.format("failure-processing-annotation", annotation, method, cause);
-    }
-
-    static String failureProcessingClassAnnotation(Annotation annotation, Class clazz,
-            Throwable cause)
-    {
-        return _formatter.format(
-                "failure-processing-class-annotation",
-                annotation,
-                clazz.getName(),
-                cause);
-    }
-
-    static String returnStringOnly(Class returnType)
-    {
-        return _formatter.format("return-string-only", ClassFabUtils.getJavaClassName(returnType));
-    }
-
-    static String bindingWrongFormat(String binding)
-    {
-        return _formatter.format("binding-wrong-format", binding);
-    }
-
-    static String methodAnnotation(Annotation annotation, Method method)
-    {
-        return _formatter.format("method-annotation", annotation, method);
-    }
-
-    static String classAnnotation(Annotation annotation, Class clazz)
-    {
-        return _formatter.format("class-annotation", annotation, clazz.getName());
-    }
-
-    static String missingEqualsInMeta(String value)
-    {
-        return _formatter.format("missing-equals-in-meta", value);
-    }
-
-    static String failureEnhancingMethod(Method method, Exception cause)
-    {
-        return _formatter.format("failure-enhancing-method", method, cause);
-    }
-    
-    static String targetsNotFound(Method method)
-    {
-        return _formatter.format("no-targets-found", method);
-    }
-    
-    static String invalidAnnotationInClass(Class annotation, Class clazz)
-    {
-        return _formatter.format("invalid-annotation-in-class", annotation.getName(), clazz.getName());
-    }  
-    
-    static String unableToCopy(String id)
-    {
-        return _formatter.format("unable-to-copy", id);
-    }
-    
-    static String bothTypeAndCopyOf(String id)
-    {
-        return _formatter.format("both-type-and-copy-of", id);
-    }  
-    
-    static String unknownAsset(String name, Location l)
-    {
-        return _formatter.format("missing-asset-property", name, l);
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationStrings.properties b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationStrings.properties
deleted file mode 100644
index 26d5182..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationStrings.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-no-parameters-expected=Annotated method {0} is expected to be an accessor, and should have no parameters.
-no-accessor=Annotated method {0} should be an accessor (no parameters), or a mutator (single parameter, returns void).
-void-accessor=Annotated method {0} is named like an accessor method, but returns void.
-non-void-mutator=Annotated method {0} is named like a mutator method, but does not return void.
-wrong-parameter-count=Annotated method {0} is named like a mutator method, but takes an incorrect number of parameters (it should have exactly one parameter).
-failure-processing-annotation=An error occured processing annotation {0} of {1}: {2}
-failure-processing-class-annotation=An error occured processing annotation {0} of class {1}: {2}
-return-string-only=The method''s return type is {0}; this annotation is only allowed on methods that return java.lang.String.
-binding-wrong-format=The specified binding, ''{0}'', is not properly formatted. It should be ''name=binding reference''.
-method-annotation=Annotation {0} of {1}
-class-annotation=Annotation {0} of class {1}
-missing-equals-in-meta=The meta value ''{0}'' must include an equals sign to seperate the key and the value.
-failure-enhancing-method=Error enhancing method {0}: {1}
-no-component-found=Unable to find component with id while enhancing method {0}: {1}
-no-targets-found=No targets found for annotated method {0}. You must specify at least one of targets or elements.
-no-form-found=Unable to find form with id while enhancing method bound with submitForm annotation {0}: {1}
-invalid-annotation-in-class=Annotation {0} is not allowed in a class (''{1}'') that implements the IPage interface.
-unable-to-copy=Unable to copy component {0}, which does not exist.
-both-type-and-copy-of=Annotation for component {0} contains both type and copy-of attributes.
-missing-asset-property=No asset has been mapped with a name of ''{0}'': {1}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationUtils.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationUtils.java
deleted file mode 100644
index 6c926e7..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AnnotationUtils.java
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.beans.Introspector;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.util.Iterator;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.spec.IBindingSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-import org.apache.tapestry.util.DescribedLocation;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-
-public final class AnnotationUtils
-{
-    /* defeat instantiation */
-    private AnnotationUtils() { }
-    
-    /**
-     * Determines the property name for a method, by stripping off the is/get/set prefix and
-     * decapitalizing the first name.
-     * 
-     * @param method
-     *            accessor method (get/set/is)
-     * @return the property name for the method
-     * @throws ApplicationRuntimeException
-     *             if the method is not an accessor or mutator method
-     */
-    public static String getPropertyName(Method method)
-    {
-        String name = method.getName();
-
-        if (name.startsWith("is"))
-        {
-            checkGetter(method);
-            return Introspector.decapitalize(name.substring(2));
-        }
-
-        if (name.startsWith("get"))
-        {
-            checkGetter(method);
-            return Introspector.decapitalize(name.substring(3));
-        }
-
-        if (name.startsWith("set"))
-        {
-            checkSetter(method);
-            return Introspector.decapitalize(name.substring(3));
-        }
-
-        throw new ApplicationRuntimeException(AnnotationMessages.notAccessor(method));
-    }
-    
-    /**
-     * Converts a method name to a property key. The steps performed are:
-     * <p>The prefix "get" is stripped off (if present)
-     * <p>The letter following "get" is converted to lower case
-     * <p>Other capitalized letters are converted to lower case and preceded with a dash ("-")
-     * 
-     * @param methodName the method to convert
-     * @return the converted key
-     * 
-     * @since 4.1.1 
-     */
-    public static String convertMethodNameToKeyName(String methodName)
-    {
-        StringBuffer buffer = new StringBuffer();
-    
-        int cursorx = methodName.startsWith("get") ? 3 : 0;
-        int length = methodName.length();
-        boolean atStart = true;
-    
-        while (cursorx < length)
-        {
-            char ch = methodName.charAt(cursorx);
-    
-            if (Character.isUpperCase(ch))
-            {
-                if (!atStart)
-                    buffer.append('-');
-                buffer.append(Character.toLowerCase(ch));
-            }
-            else
-                buffer.append(ch);
-    
-            atStart = false;
-    
-            cursorx++;
-        }
-    
-        return buffer.toString();
-    }    
-    
-    /**
-     * Copies all bindings of a component to another one.
-     * @param source
-     * @param target
-     * 
-     * @since 4.1.1
-     */
-    public static void copyBindings(IContainedComponent source, IContainedComponent target)
-    {
-        Iterator i = source.getBindingNames().iterator();
-        while (i.hasNext())
-        {
-            String bindingName = (String) i.next();
-            IBindingSpecification binding = source.getBinding(bindingName);
-            target.setBinding(bindingName, binding);
-        }
-    
-        target.setType(source.getType());
-    }    
-
-    private static void checkGetter(Method method)
-    {
-        if (method.getParameterTypes().length > 0)
-            throw new ApplicationRuntimeException(AnnotationMessages.noParametersExpected(method));
-
-        if (method.getReturnType().equals(void.class))
-            throw new ApplicationRuntimeException(AnnotationMessages.voidAccessor(method));
-
-    }
-
-    private static void checkSetter(Method method)
-    {
-        if (!method.getReturnType().equals(void.class))
-            throw new ApplicationRuntimeException(AnnotationMessages.nonVoidMutator(method));
-
-        if (method.getParameterTypes().length != 1)
-            throw new ApplicationRuntimeException(AnnotationMessages.wrongParameterCount(method));
-    }
-
-    public static Location buildLocationForAnnotation(Method method, Annotation annotation,
-            Resource classResource)
-    {
-        return new DescribedLocation(classResource, AnnotationMessages.methodAnnotation(
-                annotation,
-                method));
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Asset.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Asset.java
deleted file mode 100644
index 1f1372c..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Asset.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Defines a new asset. The asset will have the same name as the property (and will be accessible
- * via the "asset:" binding prefix, or using {@link org.apache.tapestry.IComponent#getAsset(String)},
- * with that name).
- * <p>
- * Note: if we ever rename IAsset to Asset, this will cause a naming conflict. Perhaps we should
- * come up with annotation names that are compatible with a potential rename.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface Asset {
-
-    /**
-     * The value is the asset path, which may include a prefix to define the module in which it can
-     * be resolved.
-     */
-
-    String value();
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AssetAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AssetAnnotationWorker.java
deleted file mode 100644
index 75229e1..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/AssetAnnotationWorker.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.AssetSpecification;
-import org.apache.tapestry.spec.IAssetSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Uses the {@link org.apache.tapestry.annotations.Asset} annotation to create a new
- * {@link org.apache.tapestry.spec.IAssetSpecification} which is then added to the
- * {@link org.apache.tapestry.spec.IComponentSpecification}.
- * 
- */
-public class AssetAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        Asset asset = method.getAnnotation(Asset.class);
-        String propertyName = AnnotationUtils.getPropertyName(method);
-
-        IAssetSpecification as = new AssetSpecification();
-        as.setPath(asset.value());
-        as.setPropertyName(propertyName);
-
-        // Very important for assets, as they need a location (really, the Resource
-        // of a location) to figure out what kind of asset they are.
-
-        //Resource specResource = spec.getSpecificationLocation();
-        //Location assetLocation = new DescribedLocation(specResource, location.toString());
-        
-        as.setLocation(location);
-
-        spec.addAsset(propertyName, as);
-    }
-
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Bean.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Bean.java
deleted file mode 100644
index 3139379..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Bean.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import org.apache.tapestry.spec.BeanLifecycle;
-
-/**
- * Annotation used to <em>define</em> new managed beans, including limited/lightweight
- * initialization. For complex initialiation, the XML specification is necessary.
- * <p>
- * One of the advantages is that, on the XML side, it is always necessary to provide complete class
- * names; here on the Java/annotation side, we can leverage imports.
- * <p>
- * The managed bean will have a name that matches the property name; this allows such a bean to be
- * referenced via the "bean:" binding prefix, or via
- * {@link org.apache.tapestry.IComponent#getBeans()}.
- * <p>
- * This annotation adds a new {@link org.apache.tapestry.spec.IBeanSpecification} to the
- * {@link org.apache.tapestry.spec.IComponentSpecification}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface Bean {
-    /**
-     * The Java class to instantiate. The default is Object.class; if a non-default value is
-     * specified, that will be the class to instantiate; otherwise, the bean class will be
-     * determined from the property type. Generally, this annotation is only used when the property
-     * type is an interface (or abstract base class).
-     */
-
-    Class value() default Object.class;
-
-    /**
-     * Optional initializer string for the bean, as <em>lightweight initialization</em> (a list of
-     * properties and values).
-     */
-
-    String initializer() default "";
-
-    /**
-     * The lifecycle of the bean, defaults to Lifecycle.REQUEST.
-     * 
-     * @see BeanLifecycle
-     */
-
-    Lifecycle lifecycle() default Lifecycle.REQUEST;
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/BeanAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/BeanAnnotationWorker.java
deleted file mode 100644
index d2c105f..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/BeanAnnotationWorker.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.bean.LightweightBeanInitializer;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.BeanSpecification;
-import org.apache.tapestry.spec.IBeanSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Creates a {@link org.apache.tapestry.spec.IBeanSpecification} from the
- * {@link org.apache.tapestry.annotations.Bean} annotation.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class BeanAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        Bean bean = method.getAnnotation(Bean.class);
-        String propertyName = AnnotationUtils.getPropertyName(method);
-
-        Class beanClass = bean.value();
-        if (beanClass.equals(Object.class))
-            beanClass = op.getPropertyType(propertyName);
-
-        IBeanSpecification bs = new BeanSpecification();
-
-        // A shame to convert it to a string then back to
-        // a class later, but ...
-
-        bs.setClassName(beanClass.getName());
-        bs.setPropertyName(propertyName);
-        bs.setLocation(location);
-
-        // Starting to like enums!
-
-        bs.setLifecycle(bean.lifecycle().getBeanLifecycle());
-
-        String initializer = bean.initializer();
-
-        if (HiveMind.isNonBlank(initializer))
-            bs.addInitializer(new LightweightBeanInitializer(initializer));
-
-        spec.addBeanSpecification(propertyName, bs);
-    }
-
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ClassAnnotationEnhancementWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ClassAnnotationEnhancementWorker.java
deleted file mode 100644
index 062663b..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ClassAnnotationEnhancementWorker.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Defines workers that perform annotation enhancements at the class level.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ClassAnnotationEnhancementWorker
-{
-    /**
-     * Performs a particular enhancement based on a registered annotation. Exception reporting is
-     * the responsibility of the caller.
-     * 
-     * @param op
-     *            the enhancement operaration
-     * @param spec
-     *            the specification of the component for which a class is being enhanced
-     * @param baseClass
-     *            the class containing the annotation
-     * @param location
-     *            the location associated with the annotation
-     */
-
-    void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Class baseClass, Location location);
-
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Component.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Component.java
deleted file mode 100644
index d138c11..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Component.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation used within a page or component class to define a contained component (which will
- * typically match up against a component reference in the template). This annotation is attached to
- * an accessor method.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface Component {
-
-    /**
-     * The component's id. Defaults to the property name if left unspecified.
-     */
-
-    String id() default "";
-
-    /**
-     * The component type. Defaults to the return type class name if left unspecified.
-     */
-
-    String type() default "";
-    
-    /**
-     * The name of a previously defined component. 
-     * The type and bindings of that component will be copied to this component. 
-     * Either type or copy-of must be specified. 
-     */
-
-    String copyOf() default "";    
-
-    /**
-     * If true, then the component inherits informal parameters from its container.
-     */
-
-    boolean inheritInformalParameters() default false;
-
-    /**
-     * Bindings for the component. Each binding string is of the format
-     * <code><em>name</em>=<em>binding refernce</em></code>, where the binding reference is
-     * the same kind of string (possibly with a prefix such as "ognl:" or "message:" as would appear
-     * in a specification.
-     * 
-     * @Binding annotations.
-     */
-
-    String[] bindings() default {};
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentAnnotationWorker.java
deleted file mode 100644
index c7a0eb7..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentAnnotationWorker.java
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.BindingSpecification;
-import org.apache.tapestry.spec.BindingType;
-import org.apache.tapestry.spec.ContainedComponent;
-import org.apache.tapestry.spec.IBindingSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-
-/**
- * Adds a {@link org.apache.tapestry.spec.IContainedComponent} to the
- * {@link org.apache.tapestry.spec.IComponentSpecification}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- * @see Component
- */
-public class ComponentAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        Component component = method.getAnnotation(Component.class);
-
-        String propertyName = AnnotationUtils.getPropertyName(method);
-        String type = component.type();
-        String copyOf = component.copyOf();
-        boolean hasCopyOf = HiveMind.isNonBlank(copyOf);
-        
-        if (hasCopyOf)
-        {
-            if (HiveMind.isNonBlank(type))
-                throw new ApplicationRuntimeException(AnnotationMessages.bothTypeAndCopyOf(propertyName));
-            type = null;
-        }
-        else
-        {
-            if (type.equals(""))
-            {
-                Class retTypeClazz = method.getReturnType();
-                type = resolveComponentType(retTypeClazz);
-            }
-            copyOf = null;
-        }
-        
-        IContainedComponent cc = new ContainedComponent();
-
-        cc.setInheritInformalParameters(component.inheritInformalParameters());
-        cc.setType(type);
-        cc.setCopyOf(copyOf);
-        cc.setPropertyName(propertyName);
-        cc.setLocation(location);
-
-        for (String binding : component.bindings())
-        {
-            addBinding(cc, binding, location);
-        }
-
-        String id = component.id();
-
-        if (id.equals(""))
-            id = propertyName;
-        
-        spec.addComponent(id, cc);
-        
-        if (hasCopyOf)
-        {
-            IContainedComponent source = spec.getComponent(copyOf);
-            if (source != null)                
-                AnnotationUtils.copyBindings(source, cc);
-        }
-    }
-    
-    protected String resolveComponentType(Class retTypeClass)
-    {
-        return retTypeClass.getSimpleName();
-    }
-
-    void addBinding(IContainedComponent component, String binding, Location location)
-    {
-        int equalsx = binding.indexOf('=');
-
-        if (equalsx < 1)
-            invalidBinding(binding);
-
-        if (equalsx + 1 >= binding.length())
-            invalidBinding(binding);
-
-        String name = binding.substring(0, equalsx).trim();
-        String value = binding.substring(equalsx + 1).trim();
-
-        IBindingSpecification bs = new BindingSpecification();
-        bs.setType(BindingType.PREFIXED);
-        bs.setValue(value);
-        bs.setLocation(location);
-
-        component.setBinding(name, bs);
-    }    
-
-    protected void invalidBinding(String binding)
-    {
-        throw new ApplicationRuntimeException(AnnotationMessages.bindingWrongFormat(binding));
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentClass.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentClass.java
deleted file mode 100644
index 55eccf3..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentClass.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * A class-level annotation that identifies a class as a component. Note that values defined by this
- * annotation will <strong>override</strong> corresponding values in the XML component
- * specification. At this time it is still necessary to have a component specification, even if it
- * is empty (this limitation may be lifted before the final 4.0 release).
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Target(
-{ ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-public @interface ComponentClass {
-
-    /**
-     * If true (the default), then the defined component will allow and use it's body. Otherwise the
-     * body is discarded (which may cause errors if the body contains components).
-     */
-
-    boolean allowBody() default true;
-
-    /**
-     * If true (the default), then the component accepts informal parameters. Generally, informal
-     * parameters become additional attributes of the element rendered by this component.
-     */
-
-    boolean allowInformalParameters() default true;
-
-    /**
-     * A comma-seperated list of parameter names that can not be bound informally. These represent
-     * attributes generated internally by the component, and this is used to prevent name conflicts.
-     * Comparison of informal parameter name against reserved parameter name is caseless. Note also
-     * that all formal parameters are automatically part of the list of reserved parameters.
-     */
-    String reservedParameters() default "";
-
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentClassAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentClassAnnotationWorker.java
deleted file mode 100644
index 095103b..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentClassAnnotationWorker.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Sets properties of the {@link org.apache.tapestry.spec.IComponentSpecification} based on the
- * {@link org.apache.tapestry.annotations.ComponentClass} annotation. In addition, marks the
- * component as deprecated if the {@link java.lang.Deprecated} annotation is present on the class.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ComponentClassAnnotationWorker implements ClassAnnotationEnhancementWorker
-{
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Class baseClass, Location location)
-    {
-        if (IPage.class.isAssignableFrom(baseClass))
-        {
-            throw new ApplicationRuntimeException(
-                    AnnotationMessages.invalidAnnotationInClass(ComponentClass.class, baseClass));            
-        }
-        ComponentClass component = (ComponentClass) baseClass.getAnnotation(ComponentClass.class);
-
-        spec.setAllowBody(component.allowBody());
-        spec.setAllowInformalParameters(component.allowInformalParameters());
-        spec.setLocation(location);
-
-        String[] names = TapestryUtils.split(component.reservedParameters());
-        for (String name : names)
-            spec.addReservedParameterName(name);
-
-        if (baseClass.isAnnotationPresent(Deprecated.class))
-            spec.setDeprecated(true);
-    }
-
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentHousekeepingWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentHousekeepingWorker.java
deleted file mode 100755
index 5c3f44a..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentHousekeepingWorker.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-package org.apache.tapestry.annotations;

-

-import java.util.Collection;

-import java.util.Iterator;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.HiveMind;

-import org.apache.tapestry.enhance.EnhancementOperation;

-import org.apache.tapestry.enhance.EnhancementWorker;

-import org.apache.tapestry.spec.IComponentSpecification;

-import org.apache.tapestry.spec.IContainedComponent;

-

-/**

- * An enhancement worker which performs several housekeeping tasks

- * relating to injected components.

- * Currently the worker ensures that copies of components contain

- * the correct bindings.

- * 

- * @author Andreas Andreou

- * @since 4.1.1

- */

-public class ComponentHousekeepingWorker implements EnhancementWorker

-{

-    public void performEnhancement( EnhancementOperation op, IComponentSpecification spec )

-    {

-        for ( Iterator i = spec.getComponentIds().iterator(); i.hasNext(); )

-        {

-            String id = ( String ) i.next();

-            IContainedComponent cc = spec.getComponent(id);

-            String copyOf = cc.getCopyOf();

-            Collection bindingNames = cc.getBindingNames();

-            

-            if (HiveMind.isNonBlank(copyOf) && bindingNames.size() == 0)

-            {

-                IContainedComponent source = spec.getComponent(copyOf);

-                if (source == null)

-                    throw new ApplicationRuntimeException(AnnotationMessages.unableToCopy(copyOf));                

-                

-                AnnotationUtils.copyBindings(source, cc);

-            }            

-        }

-    }

-}

diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentPropertyProxyWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentPropertyProxyWorker.java
deleted file mode 100644
index ee2fd9d..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ComponentPropertyProxyWorker.java
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.annotations;
-
-import java.beans.BeanInfo;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.enhance.EnhanceUtils;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.enhance.EnhancementWorker;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IPropertySpecification;
-
-
-/**
- * Performs runtime checks on persistent properties to ensure that objects being
- * managed by competing bytecode enhancement libraries (such as Hibernate) aren't
- * proxied.
- */
-public class ComponentPropertyProxyWorker implements EnhancementWorker {
-
-    private List<String> _excludedPackages;
-
-    /**
-     * {@inheritDoc}
-     */
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec) {
-        for (Object o : spec.getPropertySpecificationNames()) {
-            String name = (String) o;
-            IPropertySpecification ps = spec.getPropertySpecification(name);
-
-            checkProxy(op, ps);
-        }
-    }
-    
-    public Class extractPropertyType(Class type, String propertyName, IPropertySpecification ps) {
-        
-        try {
-            BeanInfo info = Introspector.getBeanInfo(type);
-            PropertyDescriptor[] props = info.getPropertyDescriptors();
-
-            for (PropertyDescriptor prop : props) {
-
-                if (!propertyName.equals(prop.getName())) {
-                    continue;
-                }
-                
-                Method m = prop.getReadMethod();
-                if (m != null && !m.getGenericReturnType().getClass().getName().equals("java.lang.Class")
-                        && TypeVariable.class.isAssignableFrom(m.getGenericReturnType().getClass())) {
-                    
-                    ps.setGeneric(true);
-                    TypeVariable tvar = (TypeVariable)m.getGenericReturnType();
-                    
-                    // try to set the actual type
-                    if (type.getGenericSuperclass() != null 
-                            && ParameterizedType.class.isInstance(type.getGenericSuperclass())) {
-                        
-                        ParameterizedType ptype = (ParameterizedType)type.getGenericSuperclass();
-                        if (ptype.getActualTypeArguments().length > 0) {
-                            
-                            ps.setCanProxy(canProxyType((Class)ptype.getActualTypeArguments()[0]));
-                            ps.setType(((Class)tvar.getBounds()[0]).getName());
-                            
-                            return (Class)tvar.getBounds()[0];
-                        }
-                    }
-                    
-                    return null;
-                } else if (m != null) {
-                    
-                    ps.setCanProxy(canProxyType(m.getReturnType()));
-                    ps.setType(m.getReturnType().getName());
-                    
-                    return m.getReturnType();
-                }
-                
-                // try write method instead
-                
-                if (m == null && prop.getWriteMethod() == null)
-                    return null;
-                
-                m = prop.getWriteMethod();
-                if (m.getParameterTypes().length != 1)
-                    return null;
-                
-                Type genParam = m.getGenericParameterTypes()[0];
-                Class param = m.getParameterTypes()[0];
-                
-                if (!genParam.getClass().getName().equals("java.lang.Class")
-                        && TypeVariable.class.isAssignableFrom(genParam.getClass())) {
-                    
-                    TypeVariable tvar = (TypeVariable)genParam;
-                    ps.setGeneric(true);
-                    
-                    if (type.getGenericSuperclass() != null) {
-                        
-                        ParameterizedType ptype = (ParameterizedType)type.getGenericSuperclass();
-                        if (ptype.getActualTypeArguments().length > 0) {
-                            
-                            ps.setCanProxy(canProxyType((Class)ptype.getActualTypeArguments()[0]));
-                            ps.setType(((Class)tvar.getBounds()[0]).getName());
-                            
-                            return (Class)tvar.getBounds()[0];
-                        }
-                    }
-                }
-                
-                ps.setCanProxy(canProxyType(param));
-                ps.setType(param.getName());
-                return param;
-            }
-
-        } catch (Throwable t) {
-            
-            throw new ApplicationRuntimeException("Error reading property " + propertyName + " from base component class : " + type, t);
-        }
-
-        return null;
-    }
-
-    boolean canProxyType(Class type)
-    {
-        if (type == null)
-            return false;
-        
-        if (!EnhanceUtils.canProxyPropertyType(type))
-            return false;
-        
-        for (Annotation an : type.getAnnotations()) {
-            if (isExcluded(an)) {
-                return false;
-            }
-        }
-        
-        return true;
-    }
-    
-    void checkProxy(EnhancementOperation op, IPropertySpecification ps) {
-        ps.setProxyChecked(true);
-
-        if (!ps.isPersistent()) {
-            return;
-        }
-        
-        extractPropertyType(op.getBaseClass(), ps.getName(), ps);
-    }
-    
-    boolean isExcluded(Annotation annotation) {
-        for (String match : _excludedPackages) {
-
-            if (annotation.annotationType().getName().indexOf(match) > -1) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    public void setExcludedPackages(List<String> packages) {
-        _excludedPackages = packages;
-    }
-}
-
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListener.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListener.java
deleted file mode 100644
index dfef405..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListener.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright May 14, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.annotations;
-
-import org.apache.tapestry.IComponent;
-
-import java.lang.annotation.*;
-
-/**
- * Annotation used to connect an event on a component / page with a particular listener method. This
- * is currently intended to be used to connect client side events to listener methods but may have
- * uses elsewhere.
- * 
- */
-@Target( { ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface EventListener
-{
-
-    /**
-     * The unique {@link IComponent} ids of the targeted sources that this listener will be
-     * listening to events on.
-     */
-    String[] targets() default {};
-
-    /**
-     * The unique html element ids to listen to the events on.
-     */
-    String[] elements() default {};
-
-    /**
-     * The list of events that should cause this listener to invoke. Ie
-     * <code>events = {"onClick", "onOptionSelect"}</code> etc..
-     */
-    String[] events();
-
-    /**
-     * The form id of the form that should have its data submitted when one of the specified events
-     * is triggered.
-     * 
-     * @return The form name (or id of component) to submit when event is triggered.
-     */
-    String submitForm() default "";
-
-    /**
-     * When any of the components targeted for an event is an instance of {@link org.apache.tapestry.form.IFormComponent} this
-     * setting can allow the form to be automatically discovered when wiring this listener up to the event such that it is
-     * submitted for you automatically without having to specify a {@link #submitForm()} parameter. The default is true.
-     *
-     * @return True if {@link org.apache.tapestry.form.IFormComponent}s should submit their containing forms by default, false otherwise.
-     */
-    boolean autoSubmit() default true;
-
-    /**
-     * Whether or not to perform form validation if the {@link #submitForm()} parameter has been set.
-     * Default is false.
-     * 
-     * @return Whether or not to validate the form.
-     */
-    boolean validateForm() default false;
-    
-    /**
-     * Controls whether or not any forms being submitted as part of this event will request focus 
-     * as per normal form semantics. The default is false.
-     * 
-     * @return True if the form should get focus, false otherwise. The default is false.
-     */
-    boolean focus() default false;
-    
-    /**
-     * If used in conjunction with {@link #submitForm()} <i>(or just targeting a {@link org.apache.tapestry.form.IFormComponent})</i>,
-     * will either submit the form normally or asynchronously. Default is asyncrhonous.
-     * 
-     * @return True if form should be submitted asynchronously, false otherwise.
-     */
-    boolean async() default true;
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java
deleted file mode 100644
index a8d1163..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright May 14, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.annotations;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.lang.reflect.Method;
-
-
-/**
- * Performs {@link EventListener} annotation enhancements on components.
- *
- * @author jkuhnert
- */
-public class EventListenerAnnotationWorker implements SecondaryAnnotationWorker
-{
-    /**
-     * {@inheritDoc}
-     */
-    public boolean canEnhance(Method method)
-    {
-        return method.getAnnotation(EventListener.class) != null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void peformEnhancement(EnhancementOperation op, IComponentSpecification spec, Method method, Resource classResource)
-    {
-        EventListener listener = method.getAnnotation(EventListener.class);
-
-        String[] targets = listener.targets();
-        String[] elements = listener.elements();
-        String formId = listener.submitForm();
-        boolean validateForm = listener.validateForm();
-        boolean async = listener.async();
-        boolean focus = listener.focus();
-        boolean autoSubmit = listener.autoSubmit();
-
-        if (targets.length < 1 && elements.length < 1)
-            throw new ApplicationRuntimeException(AnnotationMessages.targetsNotFound(method));
-
-        for (int i=0; i < targets.length; i++)
-        {
-            spec.addEventListener(targets[i], listener.events(),
-                                  method.getName(), formId, validateForm, async, focus, autoSubmit);
-        }
-
-        for (int i=0; i < elements.length; i++)
-        {
-            spec.addElementEventListener(elements[i], listener.events(),
-                                         method.getName(), formId, validateForm, async, focus);
-        }
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InitialValue.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InitialValue.java
deleted file mode 100644
index 4bed507..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InitialValue.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-import java.lang.annotation.Documented;

-import java.lang.annotation.ElementType;

-import java.lang.annotation.Retention;

-import java.lang.annotation.RetentionPolicy;

-import java.lang.annotation.Target;

-

-/**

- * An annotation used to provide the initial value of a transient or persistent property.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- * @see org.apache.tapestry.annotations.PersistAnnotationWorker

- * @see org.apache.tapestry.annotations.InitialValueAnnotationWorker

- */

-@Target(

-{ ElementType.METHOD })

-@Retention(RetentionPolicy.RUNTIME)

-@Documented

-public @interface InitialValue {

-    /**

-     * The initial value for the property as a binding reference that is evaluated when the page is

-     * first constructed, and again every time the page is detached and returned to the page pool.

-     * The default binding prefix is "ognl:".

-     */

-    String value();

-}

diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InitialValueAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InitialValueAnnotationWorker.java
deleted file mode 100644
index 47b7a92..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InitialValueAnnotationWorker.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-import java.lang.reflect.Method;

-

-import org.apache.hivemind.Location;

-import org.apache.hivemind.Resource;

-import org.apache.tapestry.enhance.EnhancementOperation;

-import org.apache.tapestry.spec.IComponentSpecification;

-import org.apache.tapestry.spec.IPropertySpecification;

-import org.apache.tapestry.spec.PropertySpecification;

-

-/**

- * Looks for {@link org.apache.tapestry.annotations.InitialValue} annotations on methods that don't

- * have a {@link org.apache.tapestry.annotations.Persist} annotation (that's handled by

- * {@link org.apache.tapestry.annotations.PersistAnnotationWorker}); adds an

- * {@link org.apache.tapestry.spec.IPropertySpecification} for the property, so that its initial

- * value may be set.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class InitialValueAnnotationWorker implements SecondaryAnnotationWorker

-{

-    /**

-     * Returns true if the method has the InitialValue annotation.

-     */

-    public boolean canEnhance(Method method)

-    {

-        return method.getAnnotation(InitialValue.class) != null;

-    }

-

-    public void peformEnhancement(EnhancementOperation op, IComponentSpecification spec,

-            Method method, Resource classResource)

-    {

-        InitialValue iv = method.getAnnotation(InitialValue.class);

-

-        if (iv == null)

-            return;

-

-        if (method.getAnnotation(Persist.class) != null)

-            return;

-

-        Location location = AnnotationUtils.buildLocationForAnnotation(method, iv, classResource);

-

-        String propertyName = AnnotationUtils.getPropertyName(method);

-

-        // Define a transient property

-

-        IPropertySpecification pspec = new PropertySpecification();

-

-        pspec.setName(propertyName);

-        pspec.setLocation(location);

-        pspec.setInitialValue(iv.value());

-

-        spec.addPropertySpecification(pspec);

-    }

-}

diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectAsset.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectAsset.java
deleted file mode 100644
index 1ff0367..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectAsset.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation for injecting an asset by its name.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface InjectAsset {
-
-    /**
-     * The name of the asset to inject. The asset is defined in the page or component specification.
-     */
-    String value();
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectAssetAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectAssetAnnotationWorker.java
deleted file mode 100644
index 392933b..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectAssetAnnotationWorker.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.enhance.EnhancementWorker;
-import org.apache.tapestry.enhance.InjectAssetWorker;
-import org.apache.tapestry.spec.IAssetSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Injects an asset.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.annotations.InjectAsset
- * @see org.apache.tapestry.enhance.InjectAssetWorker
- */
-public class InjectAssetAnnotationWorker implements EnhancementWorker
-{
-    InjectAssetWorker _delegate;
-    
-    private ClassResolver _classResolver;
-    
-    InjectAssetAnnotationWorker(InjectAssetWorker delegate)
-    {
-        _delegate = delegate;
-    }
-
-    public InjectAssetAnnotationWorker()
-    {
-        this(new InjectAssetWorker());
-    }
-    
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
-    {
-        Class clazz = op.getBaseClass();
-        
-        Resource classResource = newClassResource(clazz);
-        
-        for (Method m : clazz.getMethods())
-        {
-            if (m.getAnnotation(InjectAsset.class) != null) {
-                
-                performEnhancement(op, spec, m, 
-                        AnnotationUtils.buildLocationForAnnotation(
-                        m,
-                        m.getAnnotation(InjectAsset.class),
-                        classResource));
-            }
-        }
-    }
-    
-    private ClasspathResource newClassResource(Class clazz)
-    {
-        return new ClasspathResource(_classResolver, clazz.getName().replace('.', '/'));
-    }
-    
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec, Method method, Location location)
-    {
-        InjectAsset as = method.getAnnotation(InjectAsset.class);
-        
-        IAssetSpecification asset = spec.getAsset(as.value());
-        if (asset == null) {
-            
-            throw new ApplicationRuntimeException(AnnotationMessages.unknownAsset(as.value(), location));
-        }
-        
-        String propertyName = AnnotationUtils.getPropertyName(method);
-        
-        _delegate.injectAsset(op, as.value(), propertyName, location);
-    }
-
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectComponent.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectComponent.java
deleted file mode 100644
index 63ac36e..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectComponent.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation for injecting a nested component. The component must be defined in the template or
- * specification; this is effectively a wrapper around
- * {@link org.apache.tapestry.IComponent#getComponent(String)}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface InjectComponent {
-
-    /**
-     * The value is the id of the component.
-     */
-    String value();
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectComponentAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectComponentAnnotationWorker.java
deleted file mode 100644
index 01c7f21..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectComponentAnnotationWorker.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.enhance.InjectComponentWorker;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Injects a reference to a compent.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.annotations.InjectComponent
- * @see org.apache.tapestry.enhance.InjectComponentWorker
- */
-public class InjectComponentAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-    final InjectComponentWorker _delegate;
-
-    InjectComponentAnnotationWorker(InjectComponentWorker delegate)
-    {
-        _delegate = delegate;
-    }
-
-    public InjectComponentAnnotationWorker()
-    {
-        this(new InjectComponentWorker());
-    }
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        InjectComponent ic = method.getAnnotation(InjectComponent.class);
-        String propertyName = AnnotationUtils.getPropertyName(method);
-
-        _delegate.injectComponent(op, ic.value(), propertyName, location);
-    }
-
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectMeta.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectMeta.java
deleted file mode 100644
index 23e8596..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectMeta.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Creates an {@link org.apache.tapestry.spec.InjectSpecification} for a &lt;meta&gt; data value,
- * and adds it to the {@link org.apache.tapestry.spec.IComponentSpecification}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface InjectMeta {
-
-    /**
-     * The meta key to inject. If no such value is defined, it is derived from the method name.
-     */
-
-    String value() default "";
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectMetaAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectMetaAnnotationWorker.java
deleted file mode 100644
index de095b9..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectMetaAnnotationWorker.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.InjectSpecification;
-import org.apache.tapestry.spec.InjectSpecificationImpl;
-
-/**
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class InjectMetaAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        String propertyName = AnnotationUtils.getPropertyName(method);
-
-        InjectMeta annotation = method.getAnnotation(InjectMeta.class);
-        
-        String keyName = annotation.value();
-
-        if (keyName.equals(""))
-            keyName = AnnotationUtils.convertMethodNameToKeyName(method.getName());
-
-        InjectSpecification is = new InjectSpecificationImpl();
-        is.setProperty(propertyName);
-        is.setType("meta");
-        is.setObject(keyName);
-        is.setLocation(location);
-        
-        spec.addInjectSpecification(is);
-    }
-
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectObject.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectObject.java
deleted file mode 100644
index 4dccd26..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectObject.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Method level annotation used to inject an object, equivalent to te &lt;inject&gt; element in a
- * specification.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface InjectObject {
-
-    /**
-     * The object to inject, as a HiveMind object reference.
-     */
-
-    String value();
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectObjectAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectObjectAnnotationWorker.java
deleted file mode 100644
index 6c0ba1a..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectObjectAnnotationWorker.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.enhance.InjectObjectWorker;
-import org.apache.tapestry.services.InjectedValueProvider;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Performs injection of objects, in much the same way as the &lt;inject&gt; element in a
- * specification.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.enhance.InjectObjectWorker
- * @see org.apache.tapestry.annotations.InjectObject
- */
-
-public class InjectObjectAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-    final InjectObjectWorker _delegate;
-
-    public InjectObjectAnnotationWorker()
-    {
-        this(new InjectObjectWorker());
-    }
-
-    InjectObjectAnnotationWorker(InjectObjectWorker delegate)
-    {
-        _delegate = delegate;
-    }
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        InjectObject io = method.getAnnotation(InjectObject.class);
-
-        String object = io.value();
-
-        String propertyName = AnnotationUtils.getPropertyName(method);
-
-        _delegate.injectObject(op, object, propertyName, location);
-    }
-
-    public void setProvider(InjectedValueProvider provider)
-    {
-        _delegate.setProvider(provider);
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectPage.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectPage.java
deleted file mode 100644
index bc802cf..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectPage.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Injects a page as a property of a page or component. Often used in conjunction with listener
- * methods.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface InjectPage {
-
-    /**
-     * The name of the page to inject.
-     */
-
-    String value();
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectPageAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectPageAnnotationWorker.java
deleted file mode 100644
index 5a51292..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectPageAnnotationWorker.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.InjectSpecification;
-import org.apache.tapestry.spec.InjectSpecificationImpl;
-
-/**
- * Uses the {@link org.apache.tapestry.annotations.InjectPage} annotation to add an
- * {@link org.apache.tapestry.spec.InjectSpecification} to the
- * {@link org.apache.tapestry.spec.IComponentSpecification}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class InjectPageAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        InjectPage injectPage = method.getAnnotation(InjectPage.class);
-
-        String propertyName = AnnotationUtils.getPropertyName(method);
-
-        InjectSpecification is = new InjectSpecificationImpl();
-
-        is.setProperty(propertyName);
-        is.setType("page");
-        is.setObject(injectPage.value());
-        is.setLocation(location);
-
-        spec.addInjectSpecification(is);
-    }
-
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectScript.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectScript.java
deleted file mode 100644
index 3adfb05..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectScript.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Injects a compiled {@link org.apache.tapestry.IScript}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface InjectScript {
-
-    /**
-     * The path, relative to the specification (if it exists), or the template (if it does not),j of
-     * the script file.
-     */
-
-    String value();
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectScriptAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectScriptAnnotationWorker.java
deleted file mode 100644
index c68d7a6..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectScriptAnnotationWorker.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.InjectSpecification;
-import org.apache.tapestry.spec.InjectSpecificationImpl;
-
-/**
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class InjectScriptAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        InjectScript annotation = method.getAnnotation(InjectScript.class);
-
-        String propertyName = AnnotationUtils.getPropertyName(method);
-
-        InjectSpecification is = new InjectSpecificationImpl();
-
-        is.setProperty(propertyName);
-        is.setType("script");
-        is.setObject(annotation.value());
-        is.setLocation(location);
-
-        spec.addInjectSpecification(is);
-    }
-
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectState.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectState.java
deleted file mode 100644
index 6cba0f9..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectState.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotation used to inject an Application State Object as a read/write property of the component.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface InjectState {
-
-    /**
-     * The id of the Application State Object to inject. If no such value is defined, it is derived from the method name.
-     */
-
-    String value() default "";
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectStateAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectStateAnnotationWorker.java
deleted file mode 100644
index 97c4a4f..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectStateAnnotationWorker.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.InjectSpecification;
-import org.apache.tapestry.spec.InjectSpecificationImpl;
-
-/**
- * Injects an Application State Object.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.annotations.InjectState
- * @see org.apache.tapestry.enhance.InjectStateWorker
- */
-public class InjectStateAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        InjectState is = method.getAnnotation(InjectState.class);
-        
-        String keyName = is.value();
-
-        if (keyName.equals(""))
-            keyName = AnnotationUtils.convertMethodNameToKeyName(method.getName());
-
-        String propertyName = AnnotationUtils.getPropertyName(method);
-
-        InjectSpecification inject = new InjectSpecificationImpl();
-
-        inject.setType("state");
-        inject.setProperty(propertyName);
-        inject.setObject(keyName);
-        inject.setLocation(location);
-
-        spec.addInjectSpecification(inject);
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectStateFlag.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectStateFlag.java
deleted file mode 100644
index 9804b22..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectStateFlag.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-import java.lang.annotation.Documented;

-import java.lang.annotation.ElementType;

-import java.lang.annotation.Retention;

-import java.lang.annotation.RetentionPolicy;

-import java.lang.annotation.Target;

-

-/**

- * 

- * @author Howard Lewis Ship

- */

-@Target(

-{ ElementType.METHOD })

-@Retention(RetentionPolicy.RUNTIME)

-@Documented

-public @interface InjectStateFlag {

-

-    /**

-     * The id of the Application State Object; the boolean accessor method to which the annotation

-     * is attached will return true when the ASO exists, false when it does not.

-     * If no such value is defined, it is derived from the method name.

-     */

-

-    String value() default "";

-}

diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectStateFlagAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectStateFlagAnnotationWorker.java
deleted file mode 100644
index 0a02398..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/InjectStateFlagAnnotationWorker.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-import java.lang.reflect.Method;

-

-import org.apache.hivemind.Location;

-import org.apache.tapestry.enhance.EnhancementOperation;

-import org.apache.tapestry.spec.IComponentSpecification;

-import org.apache.tapestry.spec.InjectSpecification;

-import org.apache.tapestry.spec.InjectSpecificationImpl;

-

-/**

- * 

- * @author Howard Lewis Ship

- */

-public class InjectStateFlagAnnotationWorker implements MethodAnnotationEnhancementWorker

-{

-

-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,

-            Method method, Location location)

-    {

-        InjectStateFlag isv = method.getAnnotation(InjectStateFlag.class);

-        

-        String keyName = isv.value();

-

-        if (keyName.equals(""))

-        {

-            keyName = AnnotationUtils.convertMethodNameToKeyName(method.getName());

-            if (keyName.endsWith("-exists")) // strip it

-            {

-                int length = keyName.length();

-                keyName = keyName.substring(0, length - 7);

-            }

-        }

-

-        String propertyName = AnnotationUtils.getPropertyName(method);

-

-        InjectSpecification inject = new InjectSpecificationImpl();

-

-        inject.setType("state-flag");

-        inject.setProperty(propertyName);

-        inject.setObject(keyName);

-        inject.setLocation(location);

-

-        spec.addInjectSpecification(inject);

-    }

-

-}

diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Lifecycle.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Lifecycle.java
deleted file mode 100644
index 42bb9bd..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Lifecycle.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import org.apache.tapestry.spec.BeanLifecycle;
-
-/**
- * Enum version of {@link org.apache.tapestry.spec.BeanLifecycle}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public enum Lifecycle {
-
-    // Preferred this enum as a member of the Bean interface, but Clover couldn't handle that.
-
-    NONE(BeanLifecycle.NONE), REQUEST(BeanLifecycle.REQUEST), PAGE(BeanLifecycle.PAGE), RENDER(
-            BeanLifecycle.RENDER);
-
-    private final BeanLifecycle _beanLifecycle;
-
-    Lifecycle(BeanLifecycle beanLifecycle)
-    {
-        _beanLifecycle = beanLifecycle;
-    }
-
-    public BeanLifecycle getBeanLifecycle()
-    {
-        return _beanLifecycle;
-    }
-
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Message.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Message.java
deleted file mode 100644
index 910a0ce..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Message.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * An annotation that may be attached to any method that returns a String. Acts as a wrapper around
- * {@link org.apache.hivemind.Messages}, converting any parameters into message arguments.
- * <p>
- * In many cases, the message key will be deduced from the method name (if not provided):
- * <ul>
- * <li>A prefix of "get" is stripped off, and the leading character converted to lower case
- * <li>Case changes are converted to dashes, i.e., "fooBar" becomes "foo-bar".
- * </ul>
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface Message {
-
-    /**
-     * The message key to use. If no such value is defined, it is derived from the method name.
-     */
-
-    String value() default "";
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/MessageAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/MessageAnnotationWorker.java
deleted file mode 100644
index 2480e00..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/MessageAnnotationWorker.java
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Builds a method that accesses component messages.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class MessageAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        if (!method.getReturnType().equals(String.class))
-            throw new ApplicationRuntimeException(AnnotationMessages.returnStringOnly(method
-                    .getReturnType()));
-
-        Message message = method.getAnnotation(Message.class);
-
-        String keyName = message.value();
-
-        if (keyName.equals(""))
-            keyName = AnnotationUtils.convertMethodNameToKeyName(method.getName());
-
-        BodyBuilder builder = new BodyBuilder();
-
-        builder.begin();
-
-        Class[] parameterTypes = method.getParameterTypes();
-        int paramCount = Tapestry.size(parameterTypes);
-
-        if (paramCount > 0)
-        {
-            builder.addln("java.lang.Object[] params = new java.lang.Object[{0}];", paramCount);
-            for (int i = 0; i < paramCount; i++)
-            {
-                builder.add("params[{0}] = ", i);
-
-                if (parameterTypes[i].isPrimitive())
-                    builder.add("($w) ");
-
-                // Parameter $0 is this, so $1 is the first real parameter.
-
-                builder.addln("${0};", i + 1);
-            }
-        }
-
-        builder.add("return getMessages().");
-
-        if (paramCount == 0)
-            builder.addln("getMessage(\"{0}\");", keyName);
-        else
-            builder.addln("format(\"{0}\", params);", keyName);
-
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(method), builder.toString(), location);
-
-        if (isGetter(method))
-            op.claimReadonlyProperty(AnnotationUtils.getPropertyName(method));
-    }
-
-    boolean isGetter(Method method)
-    {
-        // We already know the return type is String
-
-        return method.getName().startsWith("get") && method.getParameterTypes().length == 0;
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Meta.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Meta.java
deleted file mode 100644
index 9b899db..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Meta.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-import java.lang.annotation.Documented;

-import java.lang.annotation.ElementType;

-import java.lang.annotation.Inherited;

-import java.lang.annotation.Retention;

-import java.lang.annotation.RetentionPolicy;

-import java.lang.annotation.Target;

-

-/**

- * Allows meta-data information about the page or component to be specified.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Target(

-{ ElementType.TYPE })

-@Retention(RetentionPolicy.RUNTIME)

-@Documented

-@Inherited

-public @interface Meta {

-    /**

-     * Meta-data is specified as a series of key value pairs; each string is such a pair, with an

-     * equals sign seperating the two.

-     */

-    String[] value();

-}

diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/MetaAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/MetaAnnotationWorker.java
deleted file mode 100644
index e862aa8..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/MetaAnnotationWorker.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-import java.util.ArrayList;

-import java.util.Collections;

-import java.util.List;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.Location;

-import org.apache.tapestry.enhance.EnhancementOperation;

-import org.apache.tapestry.spec.IComponentSpecification;

-

-/**

- * Recognizes the {@link org.apache.tapestry.annotations.Meta} annotation, and converts it into

- * properties on the specification. It is desirable to have meta data in base classes be "merged"

- * with meta data from sub classes, with the sub classes overriding any conflicting elements from

- * the base class. What we do is work our way up the inheritance tree to java.lang.Object and work

- * with each Meta annotation we find.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class MetaAnnotationWorker implements ClassAnnotationEnhancementWorker

-{

-

-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,

-            Class baseClass, Location location)

-    {

-        List<Meta> metas = assembleMetas(baseClass);

-

-        for (Meta meta : metas)

-            applyPropertiesFromMeta(meta, spec, location);

-    }

-

-    private List<Meta> assembleMetas(Class baseClass)

-    {

-        Class searchClass = baseClass;

-        List<Meta> result = new ArrayList<Meta>();

-        Meta lastMeta = null;

-

-        while (true)

-        {

-            Meta meta = (Meta) searchClass.getAnnotation(Meta.class);

-

-            // When reach a class that doesn't define or inherit a @Meta, we're done

-            if (meta == null)

-                break;

-

-            // Cheap approach, based on annotation inheritance, for determining

-            // whether a meta is already in the result list

-

-            if (meta != lastMeta)

-                result.add(meta);

-

-            searchClass = searchClass.getSuperclass();

-        }

-

-        Collections.reverse(result);

-

-        return result;

-    }

-

-    private void applyPropertiesFromMeta(Meta meta, IComponentSpecification spec, Location location)

-    {

-        String[] pairs = meta.value();

-

-        for (String pair : pairs)

-        {

-            int equalx = pair.indexOf('=');

-

-            // The only big problem is that the location will be the location of the @Meta in

-            // the subclass, even if the @Meta with a problem is from a base class.

-

-            if (equalx < 0)

-                throw new ApplicationRuntimeException(AnnotationMessages.missingEqualsInMeta(pair),

-                        location, null);

-

-            String key = pair.substring(0, equalx);

-            String value = pair.substring(equalx + 1);

-

-            spec.setProperty(key, value);

-        }

-    }

-}

diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/MethodAnnotationEnhancementWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/MethodAnnotationEnhancementWorker.java
deleted file mode 100644
index 0513ab1..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/MethodAnnotationEnhancementWorker.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Defines workers that perform annotation enhancements at the method level.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface MethodAnnotationEnhancementWorker
-{
-    /**
-     * Performs a particular enhancement based on a registered annotation. Exception reporting is
-     * the responsibility of the caller.
-     * 
-     * @param op
-     *            the enhancement operaration
-     * @param spec
-     *            the specification of the component for which a class is being enhanced
-     * @param method
-     *            the method to which the annotation is attached. The annotation
-     *            may be obtained from the method.
-     * @param location TODO
-     */
-
-    void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location);
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Parameter.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Parameter.java
deleted file mode 100644
index 9674d8a..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Parameter.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Used to define a parameter for the component.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface Parameter {
-
-    /**
-     * If true, then the parameter is required, and must be bound (there is no guarantee that a
-     * non-null value will be bound however, so the component may have to perform additonal checks).
-     * The default value, false, means the parameter is optional.
-     */
-
-    boolean required() default false;
-
-    /**
-     * The default value for the binding, as a binding reference.
-     */
-
-    String defaultValue() default "";
-
-    /**
-     * If true (the default), then the binding will cache its value while the component is
-     * renderering. In some cases, it is desirable to force the binding to be re-evaluated every
-     * time the parameter property is accessed, in which case cache should be set to false.
-     */
-
-    boolean cache() default true;
-
-    /**
-     * An optional list of alternate names for the parameter. The parameter may be bound using its
-     * true name or any alias (but not both!), but use of aliases will generate deprecation
-     * warnings.
-     */
-
-    String aliases() default "";
-    
-    /**
-     * The name of the parameter.  If not specified, it will match the property name.  Note that this
-     * is backwards from the logic in the XML, where the parameter name is specified and the property name
-     * matches.
-     * 
-     */
-    
-    String name() default "";
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ParameterAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ParameterAnnotationWorker.java
deleted file mode 100644
index 55d33e6..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/ParameterAnnotationWorker.java
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-import org.apache.tapestry.spec.ParameterSpecification;
-
-/**
- * Generates a {@link org.apache.tapestry.spec.IParameterSpecification} from a
- * {@link org.apache.tapestry.annotations.Parameter} annotation and adds it to the
- * {@link org.apache.tapestry.spec.IComponentSpecification}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ParameterAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        if (IPage.class.isAssignableFrom(method.getDeclaringClass()))
-        {
-            throw new ApplicationRuntimeException(
-                    AnnotationMessages.invalidAnnotationInClass(Parameter.class, method.getDeclaringClass()));
-        }       
-        
-        Parameter parameter = method.getAnnotation(Parameter.class);
-
-        String propertyName = AnnotationUtils.getPropertyName(method);
-
-        boolean deprecated = method.isAnnotationPresent(Deprecated.class);
-
-        IParameterSpecification ps = new ParameterSpecification();
-
-        String parameterName = parameter.name();
-
-        if (HiveMind.isBlank(parameterName))
-            parameterName = propertyName;
-
-        Class propertyType = op.getPropertyType(propertyName);
-
-        ps.setAliases(parameter.aliases());
-        ps.setCache(parameter.cache());
-
-        if (HiveMind.isNonBlank(parameter.defaultValue()))
-            ps.setDefaultValue(parameter.defaultValue());
-
-        ps.setDeprecated(deprecated);
-        ps.setParameterName(parameterName);
-        ps.setPropertyName(propertyName);
-        ps.setRequired(parameter.required());
-        ps.setType(propertyType.getName());
-        ps.setLocation(location);
-
-        spec.addParameter(ps);
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Persist.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Persist.java
deleted file mode 100644
index e0f3cde..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/Persist.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Allows a property to be marked as persistent (and, optionally, provide control over how the
- * property is persisted).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-
-@Target(
-{ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface Persist {
-
-    /**
-     * The persistence strategy, defaulting to "session", as defined on the 
-     * org.apache.tapestry.default-property-persistence-strategy property (meaning, in the
-     * HttpSession, as a session attribute). Tapestry includes another strategy, "client",
-     * and additional strategies can be defined.
-     */
-    String value() default "";
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/PersistAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/PersistAnnotationWorker.java
deleted file mode 100644
index 51cdb57..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/PersistAnnotationWorker.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IPropertySpecification;
-import org.apache.tapestry.spec.PropertySpecification;
-
-/**
- * Allow a property to be marked as persistent, and (optionally) allows a strategy to be set. Works
- * by adding a new {@link org.apache.tapestry.spec.IPropertySpecification} to the
- * {@link org.apache.tapestry.spec.IComponentSpecification}.
- * <p>
- * The {@link org.apache.tapestry.annotations.Persist} annotation may <em>optionally</em> by
- * accompanied by a {@link org.apache.tapestry.annotations.InitialValue} annotation; this sets the
- * initial value, as a binding reference, used to initialize and re-initialize the property.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.annotations.Persist
- */
-public class PersistAnnotationWorker implements MethodAnnotationEnhancementWorker
-{
-	/**
-	 * Application property that gives the default property persistence strategy to use for properties annotated by @Persist
-	 */
-	public static final String DEFAULT_PROPERTY_PERSISTENCE_STRATEGY = "org.apache.tapestry.default-property-persistence-strategy";
-
-	private IPropertySource _propertySource;
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec,
-            Method method, Location location)
-    {
-        Persist p = method.getAnnotation(Persist.class);
-        InitialValue iv = method.getAnnotation(InitialValue.class);
-
-        String propertyName = AnnotationUtils.getPropertyName(method);
-	    String defaultStrategy = _propertySource.getPropertyValue(DEFAULT_PROPERTY_PERSISTENCE_STRATEGY);
-        String stategy = p.value().length() == 0 ? defaultStrategy : p.value();
-
-        IPropertySpecification pspec = new PropertySpecification();
-
-        pspec.setName(propertyName);
-        pspec.setPersistence(stategy);
-        pspec.setLocation(location);
-        pspec.setInitialValue(iv == null ? null : iv.value());
-
-        spec.addPropertySpecification(pspec);
-    }
-
-	public void setPropertySource(IPropertySource propertySource)
-	{
-		_propertySource = propertySource;
-	}
-}
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/SecondaryAnnotationWorker.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/SecondaryAnnotationWorker.java
deleted file mode 100644
index 8e0129f..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/SecondaryAnnotationWorker.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-import java.lang.reflect.Method;

-

-import org.apache.hivemind.Resource;

-import org.apache.tapestry.enhance.EnhancementOperation;

-import org.apache.tapestry.spec.IComponentSpecification;

-

-/**

- * A chain-of-command interface for secondary annotation workers; workers that must execute

- * <em>after</em> other workers.

- * 

- * @author Howard M. Lewis Ship

- */

-public interface SecondaryAnnotationWorker

-{

-    /**

-     * Sees if the particular worker can process the method (because it handles an annotation

-     * associated with the method).

-     * 

-     * @param method

-     *            to check

-     * @return true if the worker should be invoked, false otherwise

-     */

-    boolean canEnhance(Method method);

-

-    /**

-     * Invoked an <em>all</em> workers in the command chain, if <em>any</em> worker returns true

-     * from {@link #canEnhance(Method)}.

-     * 

-     * @param op

-     *            enhancement operation

-     * @param spec

-     *            specification for the component being enhanced

-     * @param method

-     *            the method

-     * @param classResource

-     *            a resource representing the class; combined with the method a

-     *            {@link org.apache.hivemind.Location} can be created

-     */

-    void peformEnhancement(EnhancementOperation op, IComponentSpecification spec,

-            Method method, Resource classResource);

-}

diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/package.html b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/package.html
deleted file mode 100644
index d7a1357..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/annotations/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Contains all of the annotation features (jdk >= 1.5) available in 
-tapestry. Such as component injected paramters/services/etc. 
-
-@author Howard Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/form/EnumPropertySelectionModel.java b/tapestry/tapestry-annotations/src/java/org/apache/tapestry/form/EnumPropertySelectionModel.java
deleted file mode 100644
index 19d27ec..0000000
--- a/tapestry/tapestry-annotations/src/java/org/apache/tapestry/form/EnumPropertySelectionModel.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.form;
-
-
-/**
- * Implementation of a property model that works off of native
- * java enum types.
- * 
- * <p>
- *  The enum label/values are all translated by calling Enum.toString() on your individual 
- *  enum types, so it may be a good idea to provide a toString() method in your Enums if the
- *  types aren't what you would prefer to display.
- * </p>
- */
-public class EnumPropertySelectionModel implements IPropertySelectionModel
-{
-    private Enum[] _set;
-    
-    public EnumPropertySelectionModel(Enum[] set)
-    {
-        _set = set;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public String getLabel(int index)
-    {
-        if (index == 0)
-            return "None";
-        
-        return _set[index - 1].toString();
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public Object getOption(int index)
-    {
-        if (index == 0)
-            return null;
-        
-        return _set[index - 1];
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int getOptionCount()
-    {
-        return _set.length + 1;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getValue(int index)
-    {
-        if (index == 0)
-            return "None";
-        
-        return _set[index - 1].toString();
-    }
-    
-    public boolean isDisabled(int index)
-    {
-        return false;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public Object translateValue(String value)
-    {
-        for (Enum e : _set) {
-            if (e.toString().equals(value))
-                return e;
-        }
-        
-        return null;
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/site/site.xml b/tapestry/tapestry-annotations/src/site/site.xml
deleted file mode 100644
index f05f740..0000000
--- a/tapestry/tapestry-annotations/src/site/site.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<project name="Tapestry">
-    <bannerLeft>
-        <name>Tapestry Web Application Framework</name>
-        <href>http://tapestry.apache.org/</href>
-        <src>images/tapestry_banner.gif</src>
-    </bannerLeft>
-    <bannerRight>
-        <name>Apache Software Foundation</name>
-        <href>http://www.apache.org</href>
-        <src>images/asf_logo_wide.gif</src>
-    </bannerRight>
-    
-    <skin>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>maven-skin</artifactId>
-        <version>1.1</version>
-    </skin>
-    
-    <publishDate format="dd MMM yyyy" />
-    
-    <body>
-        <links>
-            <item name="Tapestry" href="http://tapestry.apache.org/" />
-            <item name="Hivemind" href="http://jakarta.apache.org/hivemind/" />
-            <item name="Apache" href="http://www.apache.org/" />
-        </links>
-        
-        <head>
-            <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
-            <script type="text/javascript">_uacct = "UA-400821-1"; urchinTracker();</script>
-            <link rel="shortcut icon" href="http://tapestry.apache.org/tapestry4.1/favicon.ico" />
-        </head>
-        
-        <menu ref="parent" />
-        
-        <menu name="Documentation">
-            <item name="Overview" href="/index.html" />
-            <item name="Hivedoc" href="/hivedoc/index.html" />
-        </menu>
-        
-        ${reports} 
-    </body>
-    
-</project>
diff --git a/tapestry/tapestry-annotations/src/site/xdoc/index.xml b/tapestry/tapestry-annotations/src/site/xdoc/index.xml
deleted file mode 100644
index 2cebfbd..0000000
--- a/tapestry/tapestry-annotations/src/site/xdoc/index.xml
+++ /dev/null
@@ -1,906 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Tapestry Annotations</title>
-    </properties>
-    <body>
-
-
-        <section name="Tapestry Annotations">
-            <p>
-                This library does not contain components; instead it provides Tapestry specific
-                <em>annotations</em>
-                (annotations are a a
-                <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html">
-                    new feature in JDK 1.5
-                </a>
-                ). These annotations allow you to perform some operations inside Java code that
-                otherwise would be specified in the page or component specification. This is very
-                useful when using inheritance, because base classes can provide annotations that are
-                inherited by subclasses.
-            </p>
-
-            <p>The annotations are all in the package org.apache.tapestry.annotations.</p>
-
-            <p>
-                Remember that a single method should only have, at most, one of these annotations!
-                Having multiple annotations, or conflicts between method annotations and directives
-                in the specification, will result in runtime exceptions. In addition, annotations
-                don't provide the kind of line precise location data that the XML specifications or
-                the templates do (but most exceptions will clearly identify the class and method,
-                which should be sufficient).
-            </p>
-
-            <subsection name="Asset">
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/Asset.html">Asset</a>
-                    annotation is the equivalent of the
-                    <a href="../usersguide/spec.html#&lt;asset&gt; element">&lt;asset&gt;</a>
-                    element in a specification. The value attribute is the path to the asset
-                    (possibly prefixed to indicate the domain for the path):
-                </p>
-
-                <source xml:space="preserve">
-  @Asset("/style/global.css")
-  public abstract IAsset getGlobalStylesheet();
-</source>
-
-                <p>
-                    The asset will be available using the property name using the "asset:" binding
-                    prefix.
-                </p>
-
-
-            </subsection>
-
-
-            <subsection name="Bean">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/Bean.html">Bean</a>
-                    annotation is the equivalent of the
-                    <a href="../usersguide/spec.html#&lt;bean&gt; element">&lt;bean&gt;</a>
-                    element in a specification.
-                </p>
-
-                <p>
-                    The property type will be used as the Java class to instantiate for the bean;
-                    alternately, the value attribute may be specified (this is useful when, for
-                    example, the property type is an interface).
-                </p>
-
-                <p>The examples below both define a bean of type HashMap:</p>
-
-                <source xml:space="preserve">
-  @Bean
-  public abstract HashMap getHashMapBean();
-
-  @Bean(HashMap.class)
-  public abstract Map getMapBean();
-</source>
-
-                <p>
-                    A bean defined this way will be stored into the component's beans property,
-                    exactly as if specified using XML; its name will be the property name.
-                </p>
-
-                <p>
-                    An additional attribute, lifecycle, controls the bean's lifecycle. The default
-                    is
-                    <a href="apidocs/org/apache/tapestry/annotations/Lifecycle.html">Lifecycle</a>
-                    .REQUEST, and additional values are NONE, PAGE, and RENDER:
-                </p>
-
-                <source xml:space="preserve">
-  @Bean(lifecycle = Lifecycle.RENDER)
-  public abstract Map getRenderLifecycleBean();
-</source>
-
-                <p>
-                    Lastly, for
-                    <em>simple</em>
-                    configuration of the bean, there's the initializer attribute. This allows
-                    <em>lightweight initialization</em>
-                    , where the string is a series of name=value properties, seperated by commas
-                    (for boolean properties, the value is optional).
-                </p>
-
-                <source xml:space="preserve">
-  @Bean(initializer = "maxRetries=3")
-  public abstract LoginController getController();  
-</source>
-
-            </subsection>
-
-            <subsection name="Component">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/Component.html">Component</a>
-                    annotation is attached to an accessor method and allows a component type to be
-                    defined in place, as with the
-                    <a href="../usersguide/spec.html#&lt;component&gt; element">&lt;component&gt;</a>
-                    element.
-                </p>
-
-                <p>
-                    By default, the component type will match the return type
-                    and the component id will match the property name:
-                </p>
-                
-                <source xml:space="preserve">
-    @Component
-    public abstract TextField getEmail();  
-</source>
-
-                <p>When component type and return type differ, 
-                then the type attibute should be specified:</p>                
-
-                <source xml:space="preserve">
-    @Component(type = "contrib:Table")
-    public abstract Table getResultsTable();  
-</source>
-
-                <p>Additionally, when component id and property name differ, 
-                then the id attibute can be specified:</p>
-
-
-                <source xml:space="preserve">
-    @Component(id = "email")
-    public abstract TextField getEmailField();  
-</source>
-
-                <p>
-                    Component bindings are specified with an array of strings. The individual
-                    strings identify the parameter name and the binding reference:
-                </p>
-
-                <source xml:space="preserve">
-    @Component(type = "Conditional", bindings =
-    { "condition=message", "element=div" })
-    public abstract IComponent getIfMessage();  
-</source>
-
-                <p>
-                    Component copies can be created by specifying the copyOf attribute. It should
-                    contain the name of another defined component. The type and bindings of 
-                    that component will be copied to this component. The following code creates
-                    a copy of the previous component:
-                </p>
-
-                <source xml:space="preserve">
-    @Component(copyOf = "ifMessage")
-    public abstract IComponent getIfMessageCopy();  
-</source>
-
-            </subsection>
-
-            <subsection name="ComponentClass">
-
-
-                <p>
-
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/ComponentClass.html">
-                        ComponentClass
-                    </a>
-                    annotation is used to mark a Java class as a component, and allows several
-                    properties normally specified using the
-                    <a href="../usersguide/spec.html#&lt;component-specification&gt; element">
-                    &lt;component-specification&gt;</a> element.
-                </p>
-
-                <source xml:space="preserve">
-@ComponentClass
-public abstract class MyComponent extends BaseComponent
-{
-...
-</source>
-
-                <p>
-                    The defaults for allowBody and allowInformalParameters are true; components may
-                    override:
-                </p>
-
-                <source xml:space="preserve">
-@ComponentClass(allowBody = false, allowInformalParameters = false)
-{
-...
-</source>
-
-                <p>
-                    Note that simply having a @ComponentClass annotation will
-                    <em>override</em>
-                    those two properties.
-                </p>
-
-                <p>If a component has reserved parameters, they can be specified as well:</p>
-
-                <source xml:space="preserve">
-@ComponentClass(reservedParameters = "href,name")
-public abstract class LinkWriter extends BaseComponent
-{
-...
-</source>
-
-                <p>
-                    Finally, the presence of the @Deprecated annotation will mark the component as
-                    deprecated (and cause a warning to be output whenever the component is
-                    referenced):
-                </p>
-
-                <source xml:space="preserve">
-@ComponentClass @Deprecated
-public abstact class YeOldeComponent extends AbstractComponent
-{
-...
-</source>
-
-
-            </subsection>
-
-            <subsection name="EventListener">
-
-
-                <p>
-                    The
-                    <a
-                        href="../tapestry-annotations/apidocs/org/apache/tapestry/annotations/EventListener.html">
-                        EventListener
-                    </a>
-                    annotation is attached to
-                    <a href="../tapestry-framework/apidocs/org/apache/tapestry/IActionListener">
-                        listener
-                    </a>
-                    methods to dynamically bind and listen to client side browser events.
-                </p>
-
-                <p>
-                    This annotation is capable of a variety of tasks, but most of them are centered
-                    around the
-                    <a href="http://dojotoolkit.org">dojo</a>
-                    javascript toolkit event API for binding and listening to javascript events in
-                    an AOP fashion.
-                </p>
-
-                <p>
-                    As an example, this page form listener method will be called when the component
-                    with id "projectChoose" has it's javascript functional equivalent
-                    <code>selectOption</code>
-                    function called:
-                </p>
-
-                <source xml:space="preserve">
-@EventListener(events = "onValueChanged", targets = "projectChoose")
-public void projectSelected(IRequestCycle cycle)
-{
-  cycle.getResponseBuilder().updateComponent("projectDescription");
-  cycle.getResponseBuilder().updateComponent("feedbackBlock");
-}
-                </source>
-
-                <subsection name="Parameters">
-
-                    <table>
-
-                        <tr>
-                            <th>Name</th>
-                            <th>Type</th>
-                            <th>Required</th>
-                            <th>Default</th>
-                            <th>Description</th>
-                        </tr>
-                        <tr>
-                            <td>targets</td>
-                            <td>String[],String</td>
-                            <td>no</td>
-                            <td> </td>
-                            <td>
-                                Specifies the components/widgets to listen to events on, in the form of unique
-                                component ids. One of either elements OR targets must be supplied.  This is supposed to
-                                be the id as returned by <code>IComponent.getClientId()</code>.
-                            </td>
-                        </tr>
-                        <tr>
-                            <td>elements</td>
-                            <td>String[],String</td>
-                            <td>no</td>
-                            <td> </td>
-                            <td>
-                                Specifies the unique html element dom node ID's to listen to events on. One of
-                                either elements OR targets must be supplied.
-                            </td>
-                        </tr>
-                        <tr>
-                            <td>events</td>
-                            <td>String[],String</td>
-                            <td>yes</td>
-                            <td> </td>
-                            <td>
-                                Specifies which javascript "events" to listen for. Just as with the dojo api, these
-                                events can be simple things like <code>onclick</code> or <code>onsubmit</code>, but can
-                                also be bound to specific functions if they exist on the component/widget you are targeting.
-                                
-                                <br/><br />
-                                For example,  the Autocomplete component wraps a dojo ComboBox widget that has a function named
-                                <code>onValueChanged</code> that is called when an item in the list is selected.
-                            </td>
-                        </tr>
-                        <tr>
-                            <td>submitForm</td>
-                            <td>String</td>
-                            <td>no</td>
-                            <td> </td>
-                            <td>
-                                If specified, the form matching the passed in form ID will be submitted before calling your
-                                listener method.
-
-                                <span class="info">
-                                    <strong>Information:</strong>
-                                    <p>
-                                        In almost all instances you will <i>not</i> want to use this parameter as any component
-                                        target implementing IFormComponent will automatically submit the form containing it for you.  This
-                                        only needs to be used in the rare instance where you want to submit a different form.
-                                    </p>
-                                </span>
-                            </td>
-                        </tr>
-                        <tr>
-                            <td>validateForm</td>
-                            <td>boolean</td>
-                            <td>no</td>
-                            <td>false</td>
-                            <td>
-                                When targeting a component implementing IFormComponent, optionally enables/disables
-                                both client side validation <em>and</em> server side validation when the form is submitted. 
-                            </td>
-                        </tr>
-                        <tr>
-                            <td>async</td>
-                            <td>boolean</td>
-                            <td>no</td>
-                            <td>true</td>
-                            <td>
-                                When components implementing IFormComponent are targeted and will cause a form submission this parameter
-                                can additionally be used to cause the submission to happen with or without asynchronous (ajax) IO calls.
-                            </td>
-                        </tr>
-                        <tr>
-                            <td>autoSubmit</td>
-                            <td>boolean</td>
-                            <td>no</td>
-                            <td>true</td>
-                            <td>
-                                When components implementing IFormComponent are targeted they will normally automatically cause a form
-                                submission to happen so that the property they manage on your form is updated when your listener method
-                                is called - this parameter can be used to disable the automatic submission of the enclosing form.
-
-                                <span class="warn">
-                                    <strong>Warning:</strong>
-                                    <p>
-                                        Use at your own risk, this is no guarantee what kind of state your properties will be in when this method
-                                        is invoked.  If you aren't relying on form specific properties to do things everything should be fine - just be careful.
-                                    </p>
-                                </span>
-                            </td>
-                        </tr>
-                        <tr>
-                            <td>focus</td>
-                            <td>boolean</td>
-                            <td>no</td>
-                            <td>false</td>
-                            <td>
-                                When components implementing IFormComponent are targeted and will cause a form submission this parameter
-                                can additionally be used to turn on/off the normal client side form element focusing that normally happens in
-                                Tapestry forms to focus the most important / first field in error.  This can be annoying on AJAX IO calls and so is turned
-                                off by default.
-                            </td>
-                        </tr>
-                    </table>
-                </subsection>
-
-                <subsection name="Listener Parameters">
-                    Many people have asked about the possibility of specifying a list of parameters to pass in to the listener method like you would
-                    do with a <a href="../components/link/directlink.html">DirectLink</a> component.  We are aware of this and hope to get it implemented
-                    sometime in one of the upcoming Tapestry 4.X releases.
-                </subsection>
-
-            </subsection>
-
-            <subsection name="InitialValue">
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/InitialValue.html">
-                        InitialValue
-                    </a>
-                    annotation allows a default value to be specified for a property. The property
-                    may also be persistent (via the
-                    <a href="#Persist">@Persist</a>
-                    annotation).
-                </p>
-
-                <p>
-                    The value is a binding reference; the reference will be evaluated when the page
-                    is first loaded, and again when the page is detached and returned to the page
-                    pool. The default binding prefix is "ognl:".
-                </p>
-
-                <p>The annotation is attached to an accessor method:</p>
-
-                <source xml:space="preserve">
-  @InitialValue("request.serverName")
-  public abstract String getServerName();        
-      </source>
-
-
-                <p>
-                    In many cases, where the initial value is a constant, a better approach is to
-                    set the initial value from the component's finishLoad() method.
-                </p>
-
-
-                <source xml:space="preserve">
-  public abstract int getMaxAttempts();
-  
-  public abstract void setMaxAttempts(int maxAttempts);
-  
-  protected void finishLoad()
-  {
-    setMaxAttempts(5);
-  }        
-      </source>
-
-
-            </subsection>
-
-            <subsection name="InjectAsset">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/InjectAsset.html">
-                        InjectAsset
-                    </a>
-                    annotation allows assets defined in the page or component specification to be
-                    exposed as read-only properties. It is attached to an accessor method:
-                </p>
-
-                <source xml:space="preserve">
-  @InjectAsset("stylesheet")
-  public abstract IAsset getStylesheet();
-</source>
-
-                <p>
-                    This is equivalent to specifying the property attribute of the
-                    <a href="../usersguide/spec.html#&lt;asset&gt; element">&lt;asset&gt;</a>
-                    element.
-                </p>
-
-            </subsection>
-
-            <subsection name="InjectComponent">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/InjectComponent.html">
-                        InjectComponent
-                    </a>
-                    annotation allows nested components to be injected as read-only properties. It
-                    is attached to an accessor method:
-                </p>
-
-                <source xml:space="preserve">
-  @InjectComponent("inputUserName")
-  public abstract TextField getUserInput();
-</source>
-
-                <p>
-                    This is functionally the same as providing the property attribute of the
-                    <a href="../usersguide/spec.html#&lt;component&gt; element">&lt;component&gt;</a>
-                    element.
-                </p>
-
-            </subsection>
-
-            <subsection name="InjectMeta">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/InjectMeta.html">InjectMeta</a>
-                    annotation allows meta data from the specification (
-                    <a href="../usersguide/spec.html#&lt;meta&gt; element">&lt;meta&gt; elements</a> )
-                    to be exposed as properties.
-                </p>
-
-                <source xml:space="preserve">
-  @InjectMeta("page-title")
-  public abstract String getPageTitle();
-</source>
-
-                <p>
-                    The new property does not have to be type String; an automatic type conversion
-                    takes place.
-                </p>
-                
-                <p>
-                	The <a href="apidocs/org/apache/tapestry/annotations/InjectMeta.html">InjectMeta</a>
-                    annotation can also be used alone - the method name is converted into a property
-                    key using the rules described at the <a href="#Message">Message</a> annotation. 
-                    Here's an equivalent to the previous example.
-                </p>
-				<source xml:space="preserve">
-  @InjectMeta
-  public abstract String getPageTitle();
-</source>                
-
-            </subsection>
-
-            <subsection name="InjectObject">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/InjectObject.html">
-                        InjectObject
-                    </a>
-                    annotation allows HiveMind objects to be injected. It is attached to an accessor
-                    method:
-                </p>
-
-                <source xml:space="preserve">
-  @InjectObject("infrastructure:request")
-  public abstract WebRequest getRequest();
-</source>
-
-                <p>
-                    The end result is the same as using the
-                    <a href="../usersguide/spec.html#&lt;inject&gt; element">&lt;inject&gt;</a>
-                    element, with the default type of "object".
-                </p>
-
-            </subsection>
-
-            <subsection name="InjectPage">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/InjectPage.html">InjectPage</a>
-                    annotation allows a page to be injected into another page or component. It is
-                    attached to an accessor method:
-                </p>
-
-                <source xml:space="preserve">
-  @InjectPage("Details")
-  public abstract Details getDetailsPage();
-</source>
-
-                <p>Injecting other pages is most commonly used as part of a listener method.</p>
-
-            </subsection>
-
-            <subsection name="InjectScript">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/InjectScript.html">
-                        InjectScript
-                    </a>
-                    annotation allows JavaScript templates to be exposed as properties. The
-                    annotation's value is the path to the script (relative to the page or component
-                    specification, if it exists, or relative to the template otherwise).
-                </p>
-
-                <source xml:space="preserve">
-  @InjectScript("scripts/VerifyAccountId.script")
-  public abstract IScript getVerifyAccountIdScript();
-</source>
-
-            </subsection>
-
-            <subsection name="InjectState">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/InjectState.html">
-                        InjectState
-                    </a>
-                    annotation allows an Application State Object to be injected and a read/write
-                    property. It is attached to an accessor method:
-                </p>
-
-                <source xml:space="preserve">
-  @InjectState("visit")
-  public abstract MyAppVisit getVisit();
-</source>
-
-                <p>
-                    The end result is equivalent to using the
-                    <a href="../usersguide/spec.html#&lt;inject&gt; element">&lt;inject&gt;</a>
-                    element, with a type of "state".
-                </p>
-                
-                <p>
-                	The <a href="apidocs/org/apache/tapestry/annotations/InjectState.html">InjectState</a>
-                    annotation can also be used alone - the method name is converted into a 
-                    key using the rules described at the <a href="#Message">Message</a> annotation. 
-                    Here's an equivalent to the previous example.
-                </p>
-				<source xml:space="preserve">
-  @InjectState
-  public abstract MyAppVisit getVisit();
-</source>                  
-
-            </subsection>
-
-            <subsection name="InjectStateFlag">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/InjectStateFlag.html">
-                        InjectStateFlag
-                    </a>
-                    annotation implements a read-only boolean property that returns true if the
-                    identified application state object exists. This is useful for avoiding the
-                    accidental creation of the ASO, which helps avoid the unneccessary creation of
-                    the HttpSession.
-                </p>
-
-                <source xml:space="preserve">
-    @InjectStateFlag("visit")
-    public abstract boolean getVisitExists();
-  </source>
-
-                <p>
-                    The end result is equivalent to using the
-                    <a href="../usersguide/spec.html#&lt;inject&gt; element">&lt;inject&gt;</a>
-                    element, with a type of "state-flag".
-                </p>
-                
-                <p>
-                	The <a href="apidocs/org/apache/tapestry/annotations/InjectStateFlag.html">
-                        InjectStateFlag
-                    </a>
-                    annotation can also be used alone - the method name is converted into a 
-                    key using the rules described at the <a href="#Message">Message</a> annotation
-                    ( with the addition that any trailing "exists" is stripped ).
-                    Here's an equivalent to the previous example. 
-                    It also injects the flag for the visit ASO.
-                </p>
-				<source xml:space="preserve">
-  @InjectStateFlag
-  public abstract boolean getVisitExists();
-</source>                 
-
-            </subsection>
-
-            <subsection name="Message">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/Message.html">Message</a>
-                    annotation provides easy access to localized messages. It is attached to a
-                    method that returns a String, and takes any number of parameters. In its most
-                    basic form, it is used alone:
-                </p>
-
-                <source xml:space="preserve">
-    @Message
-    public abstract String getPageTitle();
-</source>
-
-                <p>
-                    As used here, the method name is converted into a message property key:
-                    <code>page-title</code>
-                    :
-                </p>
-
-                <ul>
-                    <li>The prefix "get" is stripped off (if present)</li>
-                    <li>The letter following "get" is converted to lower case</li>
-                    <li>
-                        Other capitalized letters are converted to lower case and preceded with a
-                        dash ("-")
-                    </li>
-                </ul>
-
-                <p>The end result is equivalent to:</p>
-
-                <source xml:space="preserve">
-  public String getPageTitle()
-  {
-    return getMessages().getMessage("page-title");
-  }
-</source>
-
-                <p>
-                    When these method-name to property key conversion rules don't yield the correct
-                    key, it may be specified explicitly:
-                </p>
-
-                <source xml:space="preserve">
-  @Message("get-a-life")
-  public abstract String getALife();
-</source>
-
-                <p>
-                    The method may take parameters as well; these parameter will be converted into
-                    message arguments, which can be referenced inside the message as {0}, {1}, etc.
-                </p>
-
-                <source xml:space="preserve">
-  @Message
-  public abstract String getLineTotal(BigDecimal total);
-</source>
-
-                <p>This is equivalent to:</p>
-
-                <source xml:space="preserve">
-  public String getLineTotal(BigDecimal total)
-  {
-    return getMessages().format("line-total", new Object[] { total });
-  }
-</source>
-
-                <p>
-                    Primitive types passed in as parameters are automatically converted to wrapper
-                    types.
-                </p>
-            </subsection>
-
-            <subsection name="Meta">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/Meta.html">Meta</a>
-                    annotation is used to define a meta data value on a page or component class, as
-                    with the
-                    <a href="../usersguide/spec.html#&lt;meta&gt; element">&lt;meta&gt;</a>
-                    element in an XML component or page specification.
-                </p>
-
-                <p>
-                    Meta data from base classes is merged into subclasses; when there's a name
-                    conflict, the subclass overrides the base class. This allows a base class to set
-                    a default that can be naturally overriden in a subclass.
-                </p>
-
-                <source xml:space="preserve">
-@Meta({ "requires-login=false", "show-ad-banner=true" })
-public abstract class AppBasePage extends BasePage
-{
-...
-</source>
-
-                <p>
-                    Subclasses of AppBasePage could provide a @Meta annotatioun that defines new
-                    meta data, or overrides either of these values.
-                </p>
-
-                <p>
-                    Often, you only want to define a single meta value; the compiler allows you to
-                    omit the curly braces for this case:
-                </p>
-
-                <source xml:space="preserve">
-@Meta("org.apache.tapestry.jwcid-attribute-name=id")
-public abstract class MyComponent extends BaseComponent
-{
-...
-</source>
-            </subsection>
-
-            <subsection name="Parameter">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/Parameter.html">Parameter</a>
-                    annotation defines a new property, as with
-                    <a href="../usersguide/spec.html#&lt;parameter&gt; element">&lt;parameter&gt;</a>
-                    element in an XML component specification.
-                </p>
-
-                <p>
-                    This most simple use of this annotation is to simply mark a property as an
-                    optional parameter:
-                </p>
-
-                <source xml:space="preserve">
-  @Parameter
-  public abstract void MyType getMyParameter();
-</source>
-
-                <p>
-                    The parameter name will generally match the property name (as determined from
-                    the method to which the annotation is attached). This can be overriden with the
-                    name attribute:
-                </p>
-
-                <source xml:space="preserve">
-  @Parameter(name = "page")
-  public abstract String getTargetPage();
-</source>
-
-                <p>
-                    Parameters may be marked as deprecated if the method is marked deprecated (using
-                    the java.lang.Deprecated annotation):
-                </p>
-
-                <source xml:space="preserve">
-  @Deprecated @Parameter
-  public abstract int getRows();
-</source>
-
-                <p>
-                    The annotation supports several additional attributes, consult its
-                    <a href="apidocs/org/apache/tapestry/annotations/Parameter.html">JavaDoc</a>
-                    for the full details.
-                </p>
-
-            </subsection>
-
-            <subsection name="Persist">
-
-
-                <p>
-                    The
-                    <a href="apidocs/org/apache/tapestry/annotations/Persist.html">Persist</a>
-                    annotation allows a property to be marked as persistent. Remember that any
-                    otherwise unclaimed abstract property will become a
-                    <em>transient</em>
-                    property automatically (in Tapestry 4.0), so Persist is only needed to mark a
-                    property as persistent.
-                </p>
-
-                <p>The value of the Persist annotation defaults to "session":</p>
-
-                <source xml:space="preserve">
-  @Persist
-  public abstract int getSessionPersistentProperty();
-  
-  @Persist("client")
-  public abstract double getClientPersistentProperty();
-</source>
-
-                <p>
-                    This annotation works exactly like a
-                    <a href="../usersguide/spec.html#&lt;property&gt; element">&lt;property&gt;</a>
-                    element, except that the initial-value attribute can't be specified. Use the
-                    <a href="#InitialValue">@InitialValue</a>
-                    annotation to set the property's initial value.
-                </p>
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedComponent.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedComponent.java
deleted file mode 100644
index 03183c5..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedComponent.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import org.apache.tapestry.BaseComponent;
-
-/**
- * Used by {@link TestParameterAnnotationWorker}.
- * 
- * @author Andreas Andreou
- * @since 4.1.1
- */
-public abstract class AnnotatedComponent extends BaseComponent
-{
-    @Parameter
-    public abstract String getSimpleParameter();
-
-    @Parameter(required = true)
-    public abstract String getRequiredParameter();
-
-    @Parameter(cache = false)
-    public abstract Object getNonCachedParameter();
-
-    @Parameter(aliases = "fred")
-    public abstract String getAliasedParameter();
-
-    @Parameter
-    @Deprecated
-    public abstract int getDeprecatedParameter();
-
-    @Parameter(name = "fred")
-    public abstract double getNamedParameter();
-
-    @Parameter(defaultValue = "myDefault")
-    public abstract String getDefaultValue();    
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedGenericPage.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedGenericPage.java
deleted file mode 100644
index 9adbe68..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedGenericPage.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.annotations;
-
-import org.apache.tapestry.html.BasePage;
-
-
-/**
- * Tests generic types.
- */
-public abstract class AnnotatedGenericPage<E extends Persistent> extends BasePage
-{
-
-    @Persist
-    public abstract E getValue();
-    
-    public abstract void setSecondValue(E value);
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedGenericPersistentPage.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedGenericPersistentPage.java
deleted file mode 100644
index 9f98d73..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedGenericPersistentPage.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.annotations;
-
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * A real implementation of {@link AnnotatedGenericPage}.
- */
-public abstract class AnnotatedGenericPersistentPage extends AnnotatedGenericPage<SimpleBean>
-{
-    
-    @Persist
-    public abstract Map getObject();
-    
-    @Persist
-    public abstract void setListValue(List value);
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPage.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPage.java
deleted file mode 100644
index 3b992c0..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPage.java
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.form.Checkbox;
-import org.apache.tapestry.form.TextField;
-import org.apache.tapestry.html.BasePage;
-
-import java.lang.annotation.Target;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Used by {@link org.apache.tapestry.annotations.AnnotationEnhancementWorkerTest}. Also a chance
- * to try each of the annotations out.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class AnnotatedPage extends BasePage
-{
-    @Asset("/style/global.css")
-    public abstract IAsset getGlobalStylesheet();
-
-    @InjectObject("barney")
-    public abstract Object getInjectedObject();
-
-    @Bean
-    public abstract HashMap getHashMapBean();
-
-    @Bean(HashMap.class)
-    public abstract Map getMapBean();
-
-    @Bean(initializer = "intValue=10")
-    public abstract Target getBeanWithInitializer();
-
-    @Bean(value = HashMap.class, lifecycle = Lifecycle.RENDER)
-    public abstract Map getRenderLifecycleBean();
-
-    @Persist
-    public abstract int getPersistentProperty();
-
-    @Persist("client")
-    public abstract String getClientPersistentProperty();
-
-    @Persist
-    @InitialValue("user.naturalName")
-    public abstract int getPersistentPropertyWithInitialValue();
-
-    @InjectAsset("stylesheet")
-    public abstract IAsset getStylesheetAsset();
-    
-    @InjectAsset("homageDeFred")
-    public abstract IAsset getUnknownAsset();
-    
-    @InjectComponent("fred")
-    public abstract TextField getFredField();
-
-    @InjectState("barneyASO")
-    public abstract Map getBarney();
-
-    @InjectStateFlag("barneyASO")
-    public abstract boolean getBarneyExists();
-    
-    @InjectState
-    public abstract Map getMyVisit();
-
-    @InjectStateFlag
-    public abstract boolean getMyVisitExists();    
-
-    @Parameter
-    public abstract String getSimpleParameter();
-
-    @InjectPage("SomePageName")
-    public abstract IPage getMyPage();
-    
-    @Component
-    public abstract TextField getUsernameField();
-
-    @Component(type = "TextField")
-    public abstract TextField getTextField();
-
-    @Component(type = "Checkbox", id = "email")
-    public abstract Checkbox getEmailField();
-
-    @Component(type = "TextField", inheritInformalParameters = true)
-    public abstract IComponent getInherit();
-
-    @Component(type = "Conditional", bindings =
-    { "condition=message", "element=div" })
-    public abstract IComponent getComponentWithBindings();
-
-    @Component(type = "TextField", bindings =
-    { "value = email", "displayName = message:email-label" })
-    public abstract IComponent getWhitespace();
-    
-    @Component(id = "anEmailCopy", copyOf = "email", type = "Checkbox")
-    public abstract IComponent getInvalidEmailCopy();
-    
-    @Component(id = "aComponentCopy", copyOf = "componentWithBindings")
-    public abstract IComponent getComponentWithBindingsCopy();
-
-    @Message
-    public abstract String noArgsMessage();
-
-    @Message("message-key")
-    public abstract String messageWithSpecificKey();
-
-    @Message
-    public abstract String messageWithParameters(String foo, Map bar);
-
-    @Message
-    public abstract String messageWithPrimitives(int foo, double bar);
-
-    @Message
-    public abstract void voidMessage();
-
-    @Message
-    public abstract String getLikeGetter();
-
-    @InjectMeta("fred")
-    public abstract String getMetaFred();
-    
-    @InjectMeta
-    public abstract String getPageTitle();    
-
-    @InjectScript("foo.script")
-    public abstract IScript getScript();
-    
-    @InitialValue("fred")
-    public abstract int getPropertyWithInitialValue();
-    
-    @EventListener(events = { "onClick" }, targets = { "email" }, 
-            elements = { "foo" })
-    public void eventListener() { }
-    
-    @EventListener(events = { "onClick" })
-    public void brokenTargetListener() { }
-    
-    @Component(type = "Form", id = "testForm")
-    public abstract IForm getForm();
-    
-    @EventListener(events = { "onClick" }, targets = { "email" }, submitForm = "testForm", focus=true)
-    public void formListener() { }
-    
-    @EventListener(events = { "onClick" }, targets = { "phone" }, submitForm = "testForm")
-    public void anotherFormListener() { }
-    
-    @EventListener(events = { "onClick" }, targets = { "phone" }, submitForm = "form")
-    public void yetAnotherFormListener() { }
-    
-    @EventListener(events = { "onClick" }, targets = { "email" }, submitForm = "notExisting")
-    public void brokenFormListener() { }
-    
-    @InitialValue("literal:5")
-    public abstract int getDefaultPageSize();
-    
-    @Persist
-    public abstract SimpleBean getBean();
-    
-    @Persist
-    public abstract SubSimpleBean getSubBean();
-
-    @Asset("images/test-asset.txt")
-    public abstract IAsset getTextAsset();
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPageSubclass.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPageSubclass.java
deleted file mode 100644
index 7e13334..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPageSubclass.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-/**
- * Subclass of {@link org.apache.tapestry.annotations.AnnotatedPage}, used to ensure that
- * annotations inhereted from base classes are honored.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class AnnotatedPageSubclass extends AnnotatedPage
-{
-
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotationEnhancementWorkerTest.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotationEnhancementWorkerTest.java
deleted file mode 100644
index 294e25d..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotationEnhancementWorkerTest.java
+++ /dev/null
@@ -1,326 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.DescribedLocation;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.AnnotationEnhancementWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class AnnotationEnhancementWorkerTest extends BaseAnnotationTestCase
-{
-    protected EnhancementOperation newOp(Class baseClass)
-    {
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getBaseClass()).andReturn(baseClass);
-
-        return op;
-    }
-
-    protected Map newMap(Class annotationClass, Object worker)
-    {
-        return Collections.singletonMap(annotationClass, worker);
-    }
-    
-    /**
-     * No method annotations registered.
-     */
-    public void test_No_Annotations()
-    {
-        EnhancementOperation op = newOp(AnnotatedPage.class);
-        IComponentSpecification spec = newSpec();
-
-        replay();
-
-        AnnotationEnhancementWorker worker = new AnnotationEnhancementWorker();
-        worker.setMethodWorkers(Collections.EMPTY_MAP);
-        worker.setSecondaryAnnotationWorkers(Collections.EMPTY_LIST);
-        
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void test_Annotation_Match()
-    {
-        ClassResolver resolver = new DefaultClassResolver();
-
-        EnhancementOperation op = newOp(AnnotatedPage.class);
-        IComponentSpecification spec = newSpec();
-
-        MethodAnnotationEnhancementWorker methodWorker = newMethodAnnotationEnhancementWorker();
-
-        Method m = findMethod(AnnotatedPage.class, "getInjectedObject");
-
-        Location location = newMethodLocation(AnnotatedPage.class, m, InjectObject.class);
-
-        methodWorker.performEnhancement(op, spec, m, location);
-
-        replay();
-
-        AnnotationEnhancementWorker worker = new AnnotationEnhancementWorker();
-        worker.setMethodWorkers(newMap(InjectObject.class, methodWorker));
-        worker.setClassResolver(resolver);
-        worker.setSecondaryAnnotationWorkers(Collections.EMPTY_LIST);
-        
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    protected MethodAnnotationEnhancementWorker newMethodAnnotationEnhancementWorker()
-    {
-        return newMock(MethodAnnotationEnhancementWorker.class);
-    }
-
-    private DescribedLocation newClassLocation(Class baseClass, Class annotationClass)
-    {
-        Resource classResource = newResource(baseClass);
-        Annotation annotation = baseClass.getAnnotation(annotationClass);
-
-        return new DescribedLocation(classResource, AnnotationMessages.classAnnotation(
-                annotation,
-                baseClass));
-    }
-
-    public void test_Annotation_With_Subclass()
-    {
-        ClassResolver resolver = new DefaultClassResolver();
-
-        EnhancementOperation op = newOp(AnnotatedPageSubclass.class);
-        IComponentSpecification spec = newSpec();
-
-        MethodAnnotationEnhancementWorker methodWorker = newMethodAnnotationEnhancementWorker();
-
-        Method m = findMethod(AnnotatedPageSubclass.class, "getInjectedObject");
-
-        Location location = newMethodLocation(AnnotatedPageSubclass.class, m, InjectObject.class);
-
-        methodWorker.performEnhancement(op, spec, m, location);
-
-        replay();
-
-        AnnotationEnhancementWorker worker = new AnnotationEnhancementWorker();
-        worker.setMethodWorkers(newMap(InjectObject.class, methodWorker));
-        worker.setClassResolver(resolver);
-        worker.setSecondaryAnnotationWorkers(Collections.EMPTY_LIST);
-
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void test_Annotation_Failure()
-    {
-        ClassResolver resolver = new DefaultClassResolver();
-
-        ErrorLog log = newErrorLog();
-        Throwable t = new RuntimeException("Woops!");
-
-        EnhancementOperation op = newOp(AnnotatedPage.class);
-        IComponentSpecification spec = newSpec();
-
-        MethodAnnotationEnhancementWorker methodWorker = newMethodAnnotationEnhancementWorker();
-
-        Method m = findMethod(AnnotatedPage.class, "getInjectedObject");
-
-        Location location = newMethodLocation(AnnotatedPage.class, m, InjectObject.class);
-
-        methodWorker.performEnhancement(op, spec, m, location);
-        expectLastCall().andThrow(t);
-
-        log.error("An error occured processing annotation "
-                + "@org.apache.tapestry.annotations.InjectObject(value=barney) of "
-                + "public abstract java.lang.Object org.apache.tapestry.annotations.AnnotatedPage.getInjectedObject(): Woops!",
-                null,
-                t);
-
-        replay();
-
-        AnnotationEnhancementWorker worker = new AnnotationEnhancementWorker();
-        worker.setMethodWorkers(newMap(InjectObject.class, methodWorker));
-        worker.setErrorLog(log);
-        worker.setClassResolver(resolver);
-        worker.setSecondaryAnnotationWorkers(Collections.EMPTY_LIST);
-
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void test_Class_Annotation()
-    {
-        ClassResolver resolver = new DefaultClassResolver();
-
-        EnhancementOperation op = newOp(DeprecatedBean.class);
-        IComponentSpecification spec = newSpec();
-
-        ClassAnnotationEnhancementWorker classWorker = newMock(ClassAnnotationEnhancementWorker.class);
-
-        DescribedLocation location = newClassLocation(DeprecatedBean.class, Deprecated.class);
-
-        classWorker.performEnhancement(op, spec, DeprecatedBean.class, location);
-
-        replay();
-
-        AnnotationEnhancementWorker worker = new AnnotationEnhancementWorker();
-        worker.setClassWorkers(newMap(Deprecated.class, classWorker));
-        worker.setClassResolver(resolver);
-        worker.setSecondaryAnnotationWorkers(Collections.EMPTY_LIST);
-        
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void test_Class_Annotation_Failure()
-    {
-        ClassResolver resolver = new DefaultClassResolver();
-
-        ErrorLog log = newErrorLog();
-        EnhancementOperation op = newOp(DeprecatedBean.class);
-        IComponentSpecification spec = newSpec();
-
-        ClassAnnotationEnhancementWorker classWorker = newMock(ClassAnnotationEnhancementWorker.class);
-
-        Throwable t = new RuntimeException("Simulated failure.");
-
-        DescribedLocation location = newClassLocation(DeprecatedBean.class, Deprecated.class);
-
-        classWorker.performEnhancement(op, spec, DeprecatedBean.class, location);
-        expectLastCall().andThrow(t);
-
-        log.error("An error occured processing annotation @java.lang.Deprecated() of "
-                + "class org.apache.tapestry.annotations.DeprecatedBean: Simulated failure.",
-                null,
-                t);
-
-        replay();
-
-        AnnotationEnhancementWorker worker = new AnnotationEnhancementWorker();
-        worker.setClassWorkers(newMap(Deprecated.class, classWorker));
-        worker.setErrorLog(log);
-        worker.setClassResolver(resolver);
-        worker.setSecondaryAnnotationWorkers(Collections.EMPTY_LIST);
-        
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void test_Class_Annotation_No_Match()
-    {
-        EnhancementOperation op = newOp(DeprecatedBean.class);
-        IComponentSpecification spec = newSpec();
-
-        replay();
-
-        AnnotationEnhancementWorker worker = new AnnotationEnhancementWorker();
-        worker.setClassWorkers(Collections.EMPTY_MAP);
-        worker.setSecondaryAnnotationWorkers(Collections.EMPTY_LIST);
-        
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void test_Secondary_EnhancementWorker()
-    {
-        SecondaryAnnotationWorker secondary = newSecondaryAnnotationWorker();
-        
-        List<SecondaryAnnotationWorker> secWorkers = new ArrayList<SecondaryAnnotationWorker>();
-        secWorkers.add(secondary);
-        
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = newSpec();
-        Method method = findMethod(AnnotatedPage.class, "getPropertyWithInitialValue");
-
-        Resource classResource = newResource(AnnotatedPage.class);
-
-        expect(secondary.canEnhance(method)).andReturn(true);
-
-        secondary.peformEnhancement(op, spec, method, classResource);
-
-        replay();
-        
-        AnnotationEnhancementWorker worker = new AnnotationEnhancementWorker();
-        worker.setSecondaryAnnotationWorkers(secWorkers);
-        worker.setMethodWorkers(Collections.EMPTY_MAP);
-        
-        worker.performMethodEnhancement(op, spec, method, classResource);
-
-        verify();
-    }
-
-    public void test_Secondary_EnhancementWorker_Failure()
-    {
-        SecondaryAnnotationWorker secondary = newSecondaryAnnotationWorker();
-        
-        List<SecondaryAnnotationWorker> secWorkers = new ArrayList<SecondaryAnnotationWorker>();
-        secWorkers.add(secondary);
-        
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = newSpec();
-        ErrorLog log = newErrorLog();
-
-        Method method = findMethod(AnnotatedPage.class, "getPropertyWithInitialValue");
-
-        Resource classResource = newResource(AnnotatedPage.class);
-
-        RuntimeException cause = new RuntimeException("Forced.");
-
-        expect(secondary.canEnhance(method)).andThrow(cause);
-        
-        log.error(AnnotationMessages.failureEnhancingMethod(method, cause), null, cause);
-        
-        replay();
-        
-        AnnotationEnhancementWorker worker = new AnnotationEnhancementWorker();
-        worker.setSecondaryAnnotationWorkers(secWorkers);
-        worker.setMethodWorkers(Collections.EMPTY_MAP);
-        worker.setErrorLog(log);
-        
-        worker.performMethodEnhancement(op, spec, method, classResource);
-
-        verify();
-    }
-
-    protected SecondaryAnnotationWorker newSecondaryAnnotationWorker()
-    {
-        return newMock(SecondaryAnnotationWorker.class);
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/BaseAnnotationTestCase.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/BaseAnnotationTestCase.java
deleted file mode 100644
index a8327ce..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/BaseAnnotationTestCase.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-
-public class BaseAnnotationTestCase extends BaseComponentTestCase
-{
-
-    protected Method findMethod(Class clazz, String name)
-    {
-        for (Method m : clazz.getMethods())
-        {
-            if (m.getName().equals(name))
-                return m;
-        }
-
-        throw new IllegalArgumentException("No method " + name + " in " + clazz);
-    }
-
-    protected IComponentSpecification newSpec()
-    {
-        return newMock(IComponentSpecification.class);
-    }
-
-    protected EnhancementOperation newOp()
-    {
-        return newMock(EnhancementOperation.class);
-    }
-
-    protected Resource newResource(Class clazz)
-    {
-        return new ClasspathResource(getClassResolver(), clazz.getName().replace('.', '/'));
-    }
-
-    protected ErrorLog newErrorLog()
-    {
-        return newMock(ErrorLog.class);
-    }
-
-    protected Location newMethodLocation(Class baseClass, Method m, Class annotationClass)
-    {
-        Resource classResource = newResource(baseClass);
-    
-        return AnnotationUtils.buildLocationForAnnotation(
-                m,
-                m.getAnnotation(annotationClass),
-                classResource);
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/BasicComponent.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/BasicComponent.java
deleted file mode 100644
index f2d34f0..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/BasicComponent.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-/**
- * Used by {@link org.apache.tapestry.annotations.TestComponentClassAnnotationWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@ComponentClass
-public class BasicComponent
-{
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/BasicComponentSubclass.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/BasicComponentSubclass.java
deleted file mode 100644
index 5c46ff2..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/BasicComponentSubclass.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-/**

- * Used by {@link org.apache.tapestry.annotations.ComponentClassAnnotationWorker}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class BasicComponentSubclass extends BasicComponent

-{

-

-}

diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/DeprecatedBean.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/DeprecatedBean.java
deleted file mode 100644
index ee4d196..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/DeprecatedBean.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-/**
- * Used by {@link org.apache.tapestry.annotations.AnnotationEnhancementWorkerTest} to check that
- * class annotation enhancements are recognized.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Deprecated
-public class DeprecatedBean
-{
-
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/DeprecatedComponent.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/DeprecatedComponent.java
deleted file mode 100644
index 59de4fc..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/DeprecatedComponent.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-/**
- * Used by {@link org.apache.tapestry.annotations.TestComponentClassAnnotationWorker}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-@ComponentClass
-@Deprecated
-public class DeprecatedComponent
-{
-
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/Entity.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/Entity.java
deleted file mode 100644
index 581f8e9..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/Entity.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.annotations;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Defines a basic annotation with a name matching that of most persistence frameworks.
- */
-@Target( { ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-public @interface Entity
-{
-
-    
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/FormalOnlyComponent.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/FormalOnlyComponent.java
deleted file mode 100644
index 78c42df..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/FormalOnlyComponent.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-/**
- * Used by {@link org.apache.tapestry.annotations.TestComponentClassAnnotationWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@ComponentClass(allowBody = false, allowInformalParameters = false)
-public class FormalOnlyComponent
-{
-
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/InitialValueAnnotationWorkerTest.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/InitialValueAnnotationWorkerTest.java
deleted file mode 100644
index b1bbaac..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/InitialValueAnnotationWorkerTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-import java.lang.reflect.Method;

-

-import org.apache.hivemind.Location;

-import org.apache.hivemind.Resource;

-import org.apache.tapestry.enhance.EnhancementOperation;

-import org.apache.tapestry.spec.ComponentSpecification;

-import org.apache.tapestry.spec.IComponentSpecification;

-import org.apache.tapestry.spec.IPropertySpecification;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.annotations.InitialValueAnnotationWorker}.

- * 

- * @author Howard M. Lewis Ship

- */

-@Test

-public class InitialValueAnnotationWorkerTest extends BaseAnnotationTestCase

-{

-    public void testCanEnhance()

-    {

-        InitialValueAnnotationWorker worker = new InitialValueAnnotationWorker();

-        

-        assertEquals(false, worker.canEnhance(findMethod(AnnotatedPage.class, "getMapBean")));

-        assertEquals(true, worker.canEnhance(findMethod(

-                AnnotatedPage.class,

-                "getPropertyWithInitialValue")));

-    }

-

-    public void testEnhanceNonMatch()

-    {

-        EnhancementOperation op = newOp();

-        IComponentSpecification spec = newSpec();

-        Method method = findMethod(AnnotatedPage.class, "getMapBean");

-        Resource resource = newResource(AnnotatedPage.class);

-

-        replay();

-

-        InitialValueAnnotationWorker worker = new InitialValueAnnotationWorker();

-

-        worker.peformEnhancement(op, spec, method, resource);

-

-        verify();

-    }

-

-    public void testEnhancePersistAnnotationPresent()

-    {

-        EnhancementOperation op = newOp();

-        IComponentSpecification spec = newSpec();

-        Method method = findMethod(AnnotatedPage.class, "getPersistentPropertyWithInitialValue");

-        Resource resource = newResource(AnnotatedPage.class);

-

-        replay();

-

-        InitialValueAnnotationWorker worker = new InitialValueAnnotationWorker();

-

-        worker.peformEnhancement(op, spec, method, resource);

-

-        verify();

-    }

-

-    public void testJustInitialValue()

-    {

-        EnhancementOperation op = newOp();

-        IComponentSpecification spec = new ComponentSpecification();

-        Method method = findMethod(AnnotatedPage.class, "getPropertyWithInitialValue");

-        Resource resource = newResource(AnnotatedPage.class);

-

-        replay();

-

-        InitialValueAnnotationWorker worker = new InitialValueAnnotationWorker();

-

-        worker.peformEnhancement(op, spec, method, resource);

-

-        verify();

-

-        IPropertySpecification ps = spec.getPropertySpecification("propertyWithInitialValue");

-

-        assertEquals("propertyWithInitialValue", ps.getName());

-        assertEquals(false, ps.isPersistent());

-        assertEquals("fred", ps.getInitialValue());

-

-        Location expectedLocation = newMethodLocation(

-                AnnotatedPage.class,

-                method,

-                InitialValue.class);

-

-        assertEquals(expectedLocation, ps.getLocation());

-    }

-}

diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java
deleted file mode 100644
index 22e14df..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-import org.apache.tapestry.AbstractComponent;
-
-/**
- * TargetValues "component" used to test the
- * {@link org.apache.tapestry.annotations.MessageAnnotationWorker}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public abstract class MessagesTarget extends AbstractComponent
-{
-    @Message
-    public abstract String noParams();
-
-    @Message
-    public abstract String objectParam(String bar);
-
-    @Message
-    public abstract String primitiveParam(int bar);
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MetaAnnotationWorkerTest.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MetaAnnotationWorkerTest.java
deleted file mode 100644
index ecdf124..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MetaAnnotationWorkerTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.Location;

-import org.apache.tapestry.enhance.EnhancementOperation;

-import org.apache.tapestry.spec.IComponentSpecification;

-import org.testng.annotations.Test;

-

-/**

- * Test case for {@link org.apache.tapestry.annotations.MetaAnnotationWorker}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class MetaAnnotationWorkerTest extends BaseAnnotationTestCase

-{

-

-    public void testMeta()

-    {

-        EnhancementOperation op = newOp();

-        IComponentSpecification spec = newSpec();

-        Location l = newLocation();

-

-        spec.setProperty("foo", "bar");

-        spec.setProperty("biff", "bazz");

-

-        replay();

-

-        new MetaAnnotationWorker().performEnhancement(op, spec, MetaPage.class, l);

-

-        verify();

-    }

-

-    public void testMetaInSubclass()

-    {

-        EnhancementOperation op = newOp();

-        IComponentSpecification spec = newSpec();

-        Location l = newLocation();

-

-        // From MetaPage

-        spec.setProperty("foo", "bar");

-        spec.setProperty("biff", "bazz");

-

-        // From MetaPageSubclass

-        spec.setProperty("in-subclass", "true");

-

-        replay();

-

-        new MetaAnnotationWorker().performEnhancement(op, spec, MetaPageSubclass.class, l);

-

-        verify();

-

-    }

-

-    public void testNoEqualsSign()

-    {

-        EnhancementOperation op = newOp();

-        IComponentSpecification spec = newSpec();

-        Location l = newLocation();

-

-        replay();

-

-        MetaAnnotationWorker worker = new MetaAnnotationWorker();

-

-        try

-        {

-            worker.performEnhancement(op, spec, MissingEqualsMetaPage.class, l);

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertEquals(

-                    "The meta value 'noequals' must include an equals sign to seperate the key and the value.",

-                    ex.getMessage());

-            assertSame(l, ex.getLocation());

-        }

-

-        verify();

-

-    }

-}

diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MetaPage.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MetaPage.java
deleted file mode 100644
index 05d0160..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MetaPage.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-import org.apache.tapestry.html.BasePage;

-

-/**

- * Used by {@link org.apache.tapestry.annotations.MetaAnnotationWorkerTest}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Meta(

-{ "foo=bar", "biff=bazz" })

-public abstract class MetaPage extends BasePage

-{

-

-}

diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MetaPageSubclass.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MetaPageSubclass.java
deleted file mode 100644
index f595ed3..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MetaPageSubclass.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-/**

- * Used by {@link org.apache.tapestry.annotations.MetaAnnotationWorkerTest}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Meta("in-subclass=true")

-public abstract class MetaPageSubclass extends MetaPage

-{

-

-}

diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MissingEqualsMetaPage.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MissingEqualsMetaPage.java
deleted file mode 100644
index dc879f4..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/MissingEqualsMetaPage.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.annotations;

-

-import org.apache.tapestry.html.BasePage;

-

-/**

- * Used by {@link org.apache.tapestry.annotations.MetaAnnotationWorkerTest}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Meta("noequals")

-public abstract class MissingEqualsMetaPage extends BasePage

-{

-

-}

diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/PageAnnotatedAsComponent.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/PageAnnotatedAsComponent.java
deleted file mode 100644
index ed910f8..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/PageAnnotatedAsComponent.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Used by {@link TestComponentClassAnnotationWorker}.
- * 
- * @author Andreas Andreou
- * @since 4.1.1
- */
-@ComponentClass
-public abstract class PageAnnotatedAsComponent extends BasePage
-{    
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/PersistAnnotationWorkerTest.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/PersistAnnotationWorkerTest.java
deleted file mode 100644
index 644bc94..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/PersistAnnotationWorkerTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IPropertySpecification;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.PersistAnnotationWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class PersistAnnotationWorkerTest extends AnnotationEnhancementWorkerTest
-{
-    public void testDefaultStrategy()
-    {
-        Location l = newLocation();
-
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-	    IPropertySource propertySource = trainPropertySource();
-
-	    replay();
-
-        Method m = findMethod(AnnotatedPage.class, "getPersistentProperty");
-
-        PersistAnnotationWorker worker = new PersistAnnotationWorker();
-	    worker.setPropertySource(propertySource);
-	    worker.performEnhancement(op, spec, m, l);
-
-        verify();
-
-        IPropertySpecification ps = spec.getPropertySpecification("persistentProperty");
-
-        assertEquals("session", ps.getPersistence());
-        assertEquals("persistentProperty", ps.getName());
-        assertSame(l, ps.getLocation());
-        assertNull(ps.getInitialValue());
-    }
-
-	public void testStrategySpecified()
-    {
-        Location l = newLocation();
-
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-	    IPropertySource propertySource = trainPropertySource();
-
-	    replay();
-
-        Method m = findMethod(AnnotatedPage.class, "getClientPersistentProperty");
-
-        PersistAnnotationWorker worker = new PersistAnnotationWorker();
-	    worker.setPropertySource(propertySource);
-	    worker.performEnhancement(op, spec, m, l);
-
-        verify();
-
-        IPropertySpecification ps = spec.getPropertySpecification("clientPersistentProperty");
-
-        assertEquals("client", ps.getPersistence());
-        assertEquals("clientPersistentProperty", ps.getName());
-        assertSame(l, ps.getLocation());
-        assertNull(ps.getInitialValue());
-    }
-
-    public void testWithInitialValue()
-    {
-        Location l = newLocation();
-
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-	    IPropertySource propertySource = trainPropertySource();
-
-	    replay();
-
-        Method m = findMethod(AnnotatedPage.class, "getPersistentPropertyWithInitialValue");
-
-        PersistAnnotationWorker worker = new PersistAnnotationWorker();
-	    worker.setPropertySource(propertySource);
-	    worker.performEnhancement(op, spec, m, l);
-
-        verify();
-
-        IPropertySpecification ps = spec
-                .getPropertySpecification("persistentPropertyWithInitialValue");
-
-        assertEquals("session", ps.getPersistence());
-        assertEquals("persistentPropertyWithInitialValue", ps.getName());
-        assertSame(l, ps.getLocation());
-        assertEquals("user.naturalName", ps.getInitialValue());
-    }
-
-	private IPropertySource trainPropertySource()
-	{
-		IPropertySource propertySource = newMock(IPropertySource.class);
-		expect(propertySource.getPropertyValue(PersistAnnotationWorker.DEFAULT_PROPERTY_PERSISTENCE_STRATEGY)).andReturn("session");
-		return propertySource;
-	}
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/Persistent.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/Persistent.java
deleted file mode 100644
index a6e5da7..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/Persistent.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.annotations;
-
-
-/**
- * Generic interface used to test generic type detection.
- */
-public interface Persistent
-{
-
-    boolean isValid();
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/ReservedParametersComponent.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/ReservedParametersComponent.java
deleted file mode 100644
index b10b4f7..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/ReservedParametersComponent.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-/**
- * Used by {@link org.apache.tapestry.annotations.TestComponentClassAnnotationWorker}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@ComponentClass(reservedParameters = "foo,bar,baz")
-public class ReservedParametersComponent
-{
-
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/SimpleBean.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/SimpleBean.java
deleted file mode 100644
index ecf524f..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/SimpleBean.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.annotations;
-
-
-/**
- * Used to test proxy ignore rules.
- */
-@Entity
-public class SimpleBean implements Persistent
-{
-    public SimpleBean()
-    {
-    }
-    
-    public boolean isValid()
-    {
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/SubSimpleBean.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/SubSimpleBean.java
deleted file mode 100644
index f5ca623..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/SubSimpleBean.java
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.annotations;
-
-
-/**
- * Test of annotation inheritance.
- */
-public class SubSimpleBean extends SimpleBean
-{
-
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java
deleted file mode 100644
index 8990907..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IComponent;
-
-import java.util.ArrayList;
-import java.util.Map;
-
-/**
- * Used by {@link org.apache.tapestry.annotations.TestAnnotationUtils}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class TargetValues {
-    public abstract String getStringValue();
-
-    public abstract void setIntValue(int value);
-
-    public abstract boolean isBooleanValue();
-
-    public abstract void setNoParameters();
-
-    public abstract String setNonVoidMethod(String value);
-
-    public abstract String getHasParameters(String value);
-
-    public abstract void isVoidGetter();
-
-    public abstract String notAGetter();
-
-    public abstract IComponent getBarney();
-
-    public abstract Map getMapBean();
-
-    public abstract ArrayList getArrayListBean();
-
-    public abstract IAsset getMyAsset();
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java
deleted file mode 100644
index 89322a7..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Method;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.AnnotationUtils}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestAnnotationUtils extends BaseAnnotationTestCase
-{
-    private String attemptGetPropertyName(Class clazz, String name)
-    {
-        Method m = findMethod(clazz, name);
-
-        return AnnotationUtils.getPropertyName(m);
-    }
-
-    public void testGetPropertyName()
-    {
-        assertEquals("stringValue", attemptGetPropertyName(TargetValues.class, "getStringValue"));
-        assertEquals("intValue", attemptGetPropertyName(TargetValues.class, "setIntValue"));
-        assertEquals("booleanValue", attemptGetPropertyName(TargetValues.class, "isBooleanValue"));
-    }
-
-    public void testGetPropertyNameNotAGetter()
-    {
-        try
-        {
-            attemptGetPropertyName(TargetValues.class, "notAGetter");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Annotated method public abstract java.lang.String org.apache.tapestry.annotations.TargetValues.notAGetter() "
-                            + "should be an accessor (no parameters), or a mutator (single parameter, returns void).",
-                    ex.getMessage());
-        }
-    }
-
-    public void testGetPropertyNameSetterNoParameters()
-    {
-        try
-        {
-            attemptGetPropertyName(TargetValues.class, "setNoParameters");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Annotated method public abstract void org.apache.tapestry.annotations.TargetValues.setNoParameters() is named like a mutator method,"
-                            + " but takes an incorrect number of parameters (it should have exactly one parameter).",
-                    ex.getMessage());
-        }
-    }
-
-    public void testNonVoidSetter()
-    {
-        try
-        {
-            attemptGetPropertyName(TargetValues.class, "setNonVoidMethod");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Annotated method public abstract java.lang.String org.apache.tapestry.annotations.TargetValues.setNonVoidMethod(java.lang.String) "
-                            + "is named like a mutator method, but does not return void.",
-                    ex.getMessage());
-        }
-    }
-
-    public void testGetterWithParameters()
-    {
-        try
-        {
-            attemptGetPropertyName(TargetValues.class, "getHasParameters");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Annotated method public abstract java.lang.String org.apache.tapestry.annotations.TargetValues.getHasParameters(java.lang.String) "
-                            + "is expected to be an accessor, and should have no parameters.",
-                    ex.getMessage());
-        }
-    }
-
-    public void testGetterReturnsVoid()
-    {
-        try
-        {
-            attemptGetPropertyName(TargetValues.class, "isVoidGetter");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Annotated method public abstract void org.apache.tapestry.annotations.TargetValues.isVoidGetter() "
-                            + "is named like an accessor method, but returns void.",
-                    ex.getMessage());
-        }
-    }
-    
-    public void testConvertMethodNameToKeyName()
-    {
-        assertEquals("foo-bar", AnnotationUtils.convertMethodNameToKeyName("fooBar"));
-        assertEquals("foo-bar", AnnotationUtils.convertMethodNameToKeyName("FooBar"));
-        assertEquals("foo-bar", AnnotationUtils.convertMethodNameToKeyName("getFooBar"));
-        assertEquals("foo", AnnotationUtils.convertMethodNameToKeyName("foo"));
-    }    
-
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAssetAnnotationWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAssetAnnotationWorker.java
deleted file mode 100644
index c65f1e2..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAssetAnnotationWorker.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IAssetSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.AssetAnnotationWorker}.
- * 
- */
-@Test
-public class TestAssetAnnotationWorker extends BaseAnnotationTestCase
-{
-    public void test_Success()
-    {
-        Location l = newLocation();
-        Resource r = newMock(Resource.class);
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-        spec.setSpecificationLocation(r);
-
-        replay();
-
-        Method m = findMethod(AnnotatedPage.class, "getGlobalStylesheet");
-
-        new AssetAnnotationWorker().performEnhancement(op, spec, m, l);
-
-        verify();
-
-        IAssetSpecification as = spec.getAsset("globalStylesheet");
-
-        assertEquals("/style/global.css", as.getPath());
-        assertEquals(as.getLocation(), l);
-        assertEquals("globalStylesheet", as.getPropertyName());
-    }
-
-    public void test_Class_Relative_Asset()
-    {
-        Location l = newLocation();
-        Resource r = newMock(Resource.class);
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-        spec.setSpecificationLocation(r);
-
-        replay();
-
-        Method m = findMethod(AnnotatedPage.class, "getTextAsset");
-
-        new AssetAnnotationWorker().performEnhancement(op, spec, m, l);
-
-        verify();
-
-        IAssetSpecification as = spec.getAsset("textAsset");
-
-        assertEquals("images/test-asset.txt", as.getPath());
-        assertEquals(as.getLocation(), l);
-        assertEquals("textAsset", as.getPropertyName());
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java
deleted file mode 100644
index 5593dd7..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.List;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.bean.LightweightBeanInitializer;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.BeanLifecycle;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IBeanSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.BeanAnnotationWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestBeanAnnotationWorker extends BaseAnnotationTestCase
-{
-    public void testBeanClassSpecified()
-    {
-        Location l = newLocation();
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-
-        Method m = findMethod(AnnotatedPage.class, "getMapBean");
-
-        replay();
-
-        new BeanAnnotationWorker().performEnhancement(op, spec, m, l);
-
-        verify();
-
-        IBeanSpecification bs = spec.getBeanSpecification("mapBean");
-
-        assertEquals("mapBean", bs.getPropertyName());
-        assertEquals(HashMap.class.getName(), bs.getClassName());
-        assertEquals(BeanLifecycle.REQUEST, bs.getLifecycle());
-        assertSame(l, bs.getLocation());
-        assertNull(bs.getInitializers());
-    }
-
-    private EnhancementOperation newOp(String propertyName, Class propertyType)
-    {
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-        
-        expect(op.getPropertyType(propertyName)).andReturn(propertyType);
-
-        return op;
-    }
-
-    public void testBeanClassNotSpecified()
-    {
-        Location l = newLocation();
-        EnhancementOperation op = newOp("hashMapBean", HashMap.class);
-        IComponentSpecification spec = new ComponentSpecification();
-
-        Method m = findMethod(AnnotatedPage.class, "getHashMapBean");
-
-        replay();
-
-        new BeanAnnotationWorker().performEnhancement(op, spec, m, l);
-
-        verify();
-
-        IBeanSpecification bs = spec.getBeanSpecification("hashMapBean");
-
-        assertEquals("hashMapBean", bs.getPropertyName());
-        assertEquals(HashMap.class.getName(), bs.getClassName());
-        assertEquals(BeanLifecycle.REQUEST, bs.getLifecycle());
-        assertSame(l, bs.getLocation());
-        assertNull(bs.getInitializers());
-    }
-
-    public void testInitializer()
-    {
-        EnhancementOperation op = newOp("beanWithInitializer", TargetValues.class);
-        IComponentSpecification spec = new ComponentSpecification();
-
-        Method m = findMethod(AnnotatedPage.class, "getBeanWithInitializer");
-
-        replay();
-
-        new BeanAnnotationWorker().performEnhancement(op, spec, m, null);
-
-        verify();
-
-        IBeanSpecification bs = spec.getBeanSpecification("beanWithInitializer");
-
-        List l = bs.getInitializers();
-        LightweightBeanInitializer lbi = (LightweightBeanInitializer) l.get(0);
-
-        assertEquals("intValue=10", lbi.getPropertyName());
-    }
-
-    public void testLifecycle()
-    {
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-
-        Method m = findMethod(AnnotatedPage.class, "getRenderLifecycleBean");
-
-        replay();
-
-        new BeanAnnotationWorker().performEnhancement(op, spec, m, null);
-
-        verify();
-
-        IBeanSpecification bs = spec.getBeanSpecification("renderLifecycleBean");
-
-        assertEquals(BeanLifecycle.RENDER, bs.getLifecycle());
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentAnnotationWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentAnnotationWorker.java
deleted file mode 100644
index 83192c2..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentAnnotationWorker.java
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.BindingType;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IBindingSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.ComponentAnnotationWorker}
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestComponentAnnotationWorker extends BaseAnnotationTestCase
-{
-    private IContainedComponent run(String id, String methodName, Location location)
-    {
-        IComponentSpecification spec = new ComponentSpecification();
-        
-        return run(spec, id, methodName, location);
-    }
-
-    private IContainedComponent run(IComponentSpecification spec, String id, String methodName, Location location)
-    {
-        Method method = findMethod(AnnotatedPage.class, methodName);
-
-        EnhancementOperation op = newOp();
-
-        replay();        
-
-        new ComponentAnnotationWorker().performEnhancement(op, spec, method, location);
-
-        verify();
-
-        return spec.getComponent(id);
-    }
-
-    public void test_Simple()
-    {
-        Location l = newLocation();
-
-        IContainedComponent cc = run("textField", "getTextField", l);
-
-        assertEquals("TextField", cc.getType());
-        assertEquals(false, cc.getInheritInformalParameters());
-        assertEquals(null, cc.getCopyOf());
-        assertSame(l, cc.getLocation());
-        assertEquals(true, cc.getBindingNames().isEmpty());
-        assertEquals("textField", cc.getPropertyName());
-    }
-    
-    public void test_Without_Type()
-    {
-        IContainedComponent cc = run("usernameField", "getUsernameField", null);
-        
-        assertEquals("TextField", cc.getType());
-    }
-
-    public void test_Explicit_Id()
-    {
-        IContainedComponent cc = run("email", "getEmailField", null);
-
-        assertEquals("emailField", cc.getPropertyName());
-    }
-
-    public void test_Inherit_Informal_Parameters()
-    {
-        IContainedComponent cc = run("inherit", "getInherit", null);
-
-        assertEquals(true, cc.getInheritInformalParameters());
-    }
-
-    public void test_With_Bindings()
-    {
-        Location l = newLocation();
-        IContainedComponent cc = run("componentWithBindings", "getComponentWithBindings", l);
-
-        IBindingSpecification bs1 = cc.getBinding("condition");
-        assertSame(l, bs1.getLocation());
-        assertEquals(BindingType.PREFIXED, bs1.getType());
-        assertEquals("message", bs1.getValue());
-
-        IBindingSpecification bs2 = cc.getBinding("element");
-        assertEquals("div", bs2.getValue());
-    }
-
-    public void test_Binding_Whitespace_Trimmed()
-    {
-        Location l = newLocation();
-
-        IContainedComponent cc = run("whitespace", "getWhitespace", l);
-
-        IBindingSpecification bs1 = cc.getBinding("value");
-        assertSame(l, bs1.getLocation());
-        assertEquals(BindingType.PREFIXED, bs1.getType());
-        assertEquals("email", bs1.getValue());
-
-        IBindingSpecification bs2 = cc.getBinding("displayName");
-        assertEquals("message:email-label", bs2.getValue());
-    }
-    
-    public void test_With_Type_And_CopyOf()
-    {
-        try
-        {
-            run("anEmailCopy", "getInvalidEmailCopy", null);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {           
-            assertExceptionSubstring(ex, "both type and copy-of");
-        }        
-    }      
-    
-    public void test_CopyOf()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = new ComponentSpecification();
-        run(spec, "componentWithBindings", "getComponentWithBindings", l);
-        IContainedComponent cc = run(spec, "aComponentCopy", "getComponentWithBindingsCopy", l);
-        
-        IBindingSpecification bs1 = cc.getBinding("condition");
-        assertSame(l, bs1.getLocation());
-        assertEquals(BindingType.PREFIXED, bs1.getType());
-        assertEquals("message", bs1.getValue());
-
-        IBindingSpecification bs2 = cc.getBinding("element");
-        assertEquals("div", bs2.getValue());
-    }     
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentClassAnnotationWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentClassAnnotationWorker.java
deleted file mode 100644
index 1ab8b1f..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentClassAnnotationWorker.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.ComponentClassAnnotationWorker}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestComponentClassAnnotationWorker extends BaseAnnotationTestCase
-{
-    private IComponentSpecification attempt(Class baseClass, Location location)
-    {
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-
-        replay();
-
-        new ComponentClassAnnotationWorker().performEnhancement(op, spec, baseClass, location);
-
-        verify();
-
-        return spec;
-    }
-
-    public void testBasic()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = attempt(BasicComponent.class, l);
-
-        assertEquals(true, spec.getAllowBody());
-        assertEquals(true, spec.getAllowInformalParameters());
-        assertEquals(false, spec.isReservedParameterName("foo"));
-        assertEquals(false, spec.isReservedParameterName("bar"));
-        assertEquals(false, spec.isDeprecated());
-        assertSame(l, spec.getLocation());
-    }
-
-    public void testSubclass()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = attempt(BasicComponentSubclass.class, l);
-
-        assertEquals(true, spec.getAllowBody());
-        assertEquals(true, spec.getAllowInformalParameters());
-        assertEquals(false, spec.isReservedParameterName("foo"));
-        assertEquals(false, spec.isReservedParameterName("bar"));
-        assertEquals(false, spec.isDeprecated());
-        assertSame(l, spec.getLocation());
-    }
-
-    public void testFormalOnly()
-    {
-        IComponentSpecification spec = attempt(FormalOnlyComponent.class, null);
-
-        assertEquals(false, spec.getAllowBody());
-        assertEquals(false, spec.getAllowInformalParameters());
-        assertEquals(false, spec.isDeprecated());
-    }
-
-    public void testDeprecated()
-    {
-        IComponentSpecification spec = attempt(DeprecatedComponent.class, null);
-
-        assertEquals(true, spec.isDeprecated());
-    }
-
-    public void testReservedParameters()
-    {
-        IComponentSpecification spec = attempt(ReservedParametersComponent.class, null);
-
-        assertEquals(true, spec.isReservedParameterName("foo"));
-        assertEquals(true, spec.isReservedParameterName("bar"));
-    }
-    
-    public void testComponentClassNotAllowed()
-    {
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-
-        replay();
-
-        try
-        {
-            new ComponentClassAnnotationWorker().performEnhancement(
-                    op, spec, PageAnnotatedAsComponent.class, null);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {            
-        }
-        
-        verify();
-    }    
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentHousekeepingWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentHousekeepingWorker.java
deleted file mode 100644
index 97ce3fe..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentHousekeepingWorker.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Collections;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.BindingSpecification;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.ContainedComponent;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.ComponentHousekeepingWorker}.
- * 
- * @author Andreas Andreou
- * @since 4.1.1
- */
-@Test
-public class TestComponentHousekeepingWorker extends BaseAnnotationTestCase
-{
-    public void test_No_Components()
-    {
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = newSpec();
-        expect(spec.getComponentIds()).andReturn(Collections.EMPTY_LIST);
-
-        replay();
-
-        new ComponentHousekeepingWorker().performEnhancement(op, spec);
-
-        verify();
-    }
-    
-    public void test_Unable_To_Copy()
-    {        
-        IComponentSpecification spec = new ComponentSpecification();
-
-        IContainedComponent ccOne = new ContainedComponent();
-        ccOne.setType("Insert");
-        spec.addComponent("time", ccOne);
-        
-        IContainedComponent ccTwo = new ContainedComponent();
-        ccTwo.setCopyOf("date");
-        spec.addComponent("invalid", ccTwo);
-
-        try 
-        {
-            new ComponentHousekeepingWorker().performEnhancement(null, spec);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertExceptionSubstring(ex, "Unable to copy");
-        }
-    }   
-    
-    public void test_CopyOf_Valid()
-    {        
-        IComponentSpecification spec = new ComponentSpecification();
-
-        IContainedComponent ccOne = new ContainedComponent();
-        ccOne.setType("Insert");
-        ccOne.setBinding("value", new BindingSpecification());
-        spec.addComponent("time", ccOne);
-        
-        
-        IContainedComponent ccTwo = new ContainedComponent();
-        ccTwo.setCopyOf("time");
-        spec.addComponent("valid", ccTwo);
-        assertNull( ccTwo.getBinding("value") );
-
-        new ComponentHousekeepingWorker().performEnhancement(null, spec);
-        
-        IContainedComponent result = spec.getComponent("valid");
-        assertEquals(result, ccTwo);
-        assertNotNull( result.getBinding("value") );
-    }     
-    
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentPropertyProxyWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentPropertyProxyWorker.java
deleted file mode 100644
index 7172c90..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestComponentPropertyProxyWorker.java
+++ /dev/null
@@ -1,264 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.annotations;
-
-import static org.easymock.EasyMock.*;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IPropertySpecification;
-import org.apache.tapestry.spec.PropertySpecification;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link ComponentPropertyProxyWorker}.
- */
-@Test(sequential = true)
-public class TestComponentPropertyProxyWorker extends BaseAnnotationTestCase
-{
-
-    IPropertySpecification addProperty(EnhancementOperation op, IComponentSpecification spec, Location l,
-            String propertyName) {
-        IPropertySpecification pspec = new PropertySpecification();
-
-        pspec.setName(propertyName);
-        pspec.setPersistence("session");
-        pspec.setLocation(l);
-
-        spec.addPropertySpecification(pspec);
-        
-        return pspec;
-    }
-    
-    
-    public void test_Generics_Excluded() {
-        Location l = newLocation();
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-        checkOrder(op, false);
-
-        IComponentSpecification spec = new ComponentSpecification();
-
-        expect(op.getBaseClass()).andReturn(AnnotatedGenericPage.class).anyTimes();
-
-        ComponentPropertyProxyWorker worker = new ComponentPropertyProxyWorker();
-        
-        addProperty(op, spec, l, "value");
-
-        List<String> exclude = new ArrayList<String>();
-        exclude.add("Entity");
-        worker.setExcludedPackages(exclude);
-        
-        replay();
-
-        worker.performEnhancement(op, spec);
-
-        verify();
-
-        IPropertySpecification prop = spec.getPropertySpecification("value");
-
-        assert prop != null;
-        assert prop.isPersistent();
-        assert prop.isProxyChecked();
-        assert !prop.canProxy();
-    }
-
-    public void test_Valid_Property() {
-        Location l = newLocation();
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-        checkOrder(op, false);
-
-        IComponentSpecification spec = new ComponentSpecification();
-
-        expect(op.getBaseClass()).andReturn(AnnotatedGenericPersistentPage.class).anyTimes();
-
-        ComponentPropertyProxyWorker worker = new ComponentPropertyProxyWorker();
-
-        addProperty(op, spec, l, "object");
-
-        List<String> exclude = new ArrayList<String>();
-        exclude.add("Entity");
-        worker.setExcludedPackages(exclude);
-
-        replay();
-
-        worker.performEnhancement(op, spec);
-
-        verify();
-
-        IPropertySpecification prop = spec.getPropertySpecification("object");
-
-        assert prop != null;
-        assert prop.isPersistent();
-        assert prop.isProxyChecked();
-        assert prop.canProxy();
-    }
-    
-    public void test_Type_Found()
-    {
-        ComponentPropertyProxyWorker worker = new ComponentPropertyProxyWorker();
-        List<String> exclude = new ArrayList<String>();
-        exclude.add("Entity");
-        worker.setExcludedPackages(exclude);
-        
-        IPropertySpecification prop = new PropertySpecification();
-        prop.setName("value");
-        prop.setPersistence("session");
-        
-        assertEquals(worker.extractPropertyType(AnnotatedGenericPersistentPage.class, "value", prop), Persistent.class);
-        
-        prop.setGeneric(false);
-        prop.setType(null);
-        prop.setName("secondValue");
-        
-        Class type = worker.extractPropertyType(AnnotatedGenericPersistentPage.class, "secondValue", prop);
-        
-        assert type != null;
-        assert prop.isGeneric();
-        
-        assertEquals(type, Persistent.class);
-    }
-    
-    public void test_Write_Property_Non_Generic() {
-        Location l = newLocation();
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-        checkOrder(op, false);
-
-        IComponentSpecification spec = new ComponentSpecification();
-
-        expect(op.getBaseClass()).andReturn(AnnotatedGenericPersistentPage.class).anyTimes();
-
-        ComponentPropertyProxyWorker worker = new ComponentPropertyProxyWorker();
-        
-        IPropertySpecification p = addProperty(op, spec, l, "listValue");
-
-        List<String> exclude = new ArrayList<String>();
-        exclude.add("Entity");
-        worker.setExcludedPackages(exclude);
-
-        replay();
-
-        worker.performEnhancement(op, spec);
-
-        verify();
-
-        IPropertySpecification prop = spec.getPropertySpecification("listValue");
-
-        assert prop != null;
-        assert prop.isPersistent();
-        assert prop.isProxyChecked();
-        assert prop.canProxy();
-        
-        assertEquals(p.getType(), "java.util.List");
-    }
-    
-    public void test_Write_Property_Generic() {
-        Location l = newLocation();
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-        checkOrder(op, false);
-
-        IComponentSpecification spec = new ComponentSpecification();
-
-        expect(op.getBaseClass()).andReturn(AnnotatedGenericPersistentPage.class).anyTimes();
-
-        ComponentPropertyProxyWorker worker = new ComponentPropertyProxyWorker();
-        
-        IPropertySpecification p = addProperty(op, spec, l, "secondValue");
-
-        List<String> exclude = new ArrayList<String>();
-        exclude.add("Entity");
-        worker.setExcludedPackages(exclude);
-
-        replay();
-
-        worker.performEnhancement(op, spec);
-
-        verify();
-
-        IPropertySpecification prop = spec.getPropertySpecification("secondValue");
-        
-        assert prop != null;
-        assert prop.isPersistent();
-        assert prop.isProxyChecked();
-        assert !prop.canProxy();
-        
-        assertEquals(p.getType(), Persistent.class.getName());
-    }
-    
-    
-    public void test_Excluded()
-    {
-        Location l = newLocation();
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-        
-        expect(op.getBaseClass()).andReturn(AnnotatedPage.class).anyTimes();
-        
-        addProperty(op, spec, l, "bean");
-        
-        ComponentPropertyProxyWorker worker = new ComponentPropertyProxyWorker();
-        
-        List exclude = new ArrayList();
-        exclude.add("Entity");
-        worker.setExcludedPackages(exclude);
-        
-        replay();
-        
-        worker.performEnhancement(op, spec);
-        
-        verify();
-        
-        IPropertySpecification prop = spec.getPropertySpecification("bean");
-        
-        assert prop != null;
-        assert prop.isPersistent();
-        assert prop.isProxyChecked();
-        assert !prop.canProxy();
-    }
-    
-    public void test_SubClass_Excluded()
-    {
-        Location l = newLocation();
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-        
-        expect(op.getBaseClass()).andReturn(AnnotatedPage.class).anyTimes();
-        
-        addProperty(op, spec, l, "subBean");
-        
-        ComponentPropertyProxyWorker worker = new ComponentPropertyProxyWorker();
-        
-        List exclude = new ArrayList();
-        exclude.add("Entity");
-        worker.setExcludedPackages(exclude);
-        
-        replay();
-        
-        worker.performEnhancement(op, spec);
-        
-        verify();
-        
-        IPropertySpecification prop = spec.getPropertySpecification("subBean");
-        
-        assert prop != null;
-        assert prop.isPersistent();
-        assert prop.isProxyChecked();
-        assert !prop.canProxy();
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java
deleted file mode 100644
index 56e08e6..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright May 20, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.annotations;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.internal.event.ComponentEventProperty;
-import org.apache.tapestry.internal.event.EventBoundListener;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Method;
-import java.util.List;
-
-
-/**
- * Tests functionality of {@link TestEventListenerAnnotationWorker}.
- * @author jkuhnert
- */
-@Test
-public class TestEventListenerAnnotationWorker extends BaseAnnotationTestCase
-{
-
-    public void test_Event_Connection()
-    {
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-        Resource resource = newResource(AnnotatedPage.class);
-                
-        EventListenerAnnotationWorker worker = new EventListenerAnnotationWorker();
-
-        replay();
-        
-        Method m = findMethod(AnnotatedPage.class, "eventListener");
-        
-        assertTrue(worker.canEnhance(m));
-        assertFalse(worker.canEnhance(findMethod(AnnotatedPage.class, "getPersistentProperty")));
-        worker.peformEnhancement(op, spec, m, resource);
-        
-        verify();
-                
-        ComponentEventProperty property = spec.getComponentEvents("email");
-        assertNotNull(property);
-        
-        List listeners = property.getEventListeners("onClick");
-        assertNotNull(listeners);
-        assertEquals(1, listeners.size());
-        
-        property = spec.getElementEvents("foo");
-        assertNotNull(property);
-        
-        listeners = property.getEventListeners("onClick");
-        assertNotNull(listeners);
-        assertEquals(1, listeners.size());
-        
-        assert !((EventBoundListener)listeners.get(0)).shouldFocusForm();
-        assert ((EventBoundListener)listeners.get(0)).isAutoSubmit();
-    }
-    
-    public void test_Form_Event_Connection()
-    {
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-        Resource resource = newResource(AnnotatedPage.class);
-
-        EventListenerAnnotationWorker worker = new EventListenerAnnotationWorker();
-
-        replay();
-        
-        Method m = findMethod(AnnotatedPage.class, "formListener");
-        
-        assertTrue(worker.canEnhance(m));
-        worker.peformEnhancement(op, spec, m, resource);
-        
-        verify();
-                
-        ComponentEventProperty property = spec.getComponentEvents("email");
-        assertNotNull(property);
-        
-        List listeners = property.getFormEventListeners("onClick");
-        assertNotNull(listeners);
-        assertEquals(1, listeners.size());
-        
-        EventBoundListener formListener = (EventBoundListener)listeners.get(0);
-        assertEquals("testForm", formListener.getFormId());
-        assertFalse(formListener.isValidateForm());
-        assert formListener.shouldFocusForm();
-        assert formListener.isAutoSubmit();
-    }
-    
-    public void test_Targets_Not_Found()
-    {
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = newSpec();
-        Resource resource = newResource(AnnotatedPage.class);
-        
-        EventListenerAnnotationWorker worker = new EventListenerAnnotationWorker();
-        
-        replay();
-        
-        Method m = findMethod(AnnotatedPage.class, "brokenTargetListener");
-        
-        assertTrue(worker.canEnhance(m));
-        
-        try {
-            worker.peformEnhancement(op, spec, m, resource);
-            unreachable();
-        } catch (ApplicationRuntimeException e) {
-            assertExceptionSubstring(e, "No targets found for");
-        }
-        
-        verify();
-    }
-    
-    public void test_Can_Enhance()
-    {
-        EventListenerAnnotationWorker worker = new EventListenerAnnotationWorker();
-        
-        replay();
-        
-        Method m = findMethod(AnnotatedPage.class, "getDefaultPageSize");
-        
-        assertFalse(worker.canEnhance(m));
-        
-        verify();
-    }
-    
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestInjectAssetAnnotationWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestInjectAssetAnnotationWorker.java
deleted file mode 100644
index 5cb0230..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestInjectAssetAnnotationWorker.java
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.isA;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.enhance.InjectAssetWorker;
-import org.apache.tapestry.spec.IAssetSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.InjectAssetAnnotationWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectAssetAnnotationWorker extends BaseAnnotationTestCase
-{
-    public void test_Default()
-    {
-        InjectAssetAnnotationWorker worker = new InjectAssetAnnotationWorker();
-
-        assertNotNull(worker._delegate);
-    }
-
-    public void test_Delegation()
-    {
-        Location l = newLocation();
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = newSpec();
-        InjectAssetWorker delegate = new InjectAssetWorker();
-        IAssetSpecification asset = newMock(IAssetSpecification.class);
-        
-        Method m = findMethod(AnnotatedPage.class, "getStylesheetAsset");
-        
-        expect(spec.getAsset("stylesheet")).andReturn(asset);
-        
-        expect(op.getPropertyType("stylesheetAsset")).andReturn(IAsset.class);
-        
-        op.claimReadonlyProperty("stylesheetAsset");
-        
-        expect(op.getAccessorMethodName("stylesheetAsset")).andReturn("getStylesheetAsset");
-        
-        op.addMethod(eq(Modifier.PUBLIC), isA(MethodSignature.class), 
-                eq("return getAsset(\"stylesheet\");"), eq(l));
-        
-        InjectAssetAnnotationWorker worker = new InjectAssetAnnotationWorker(delegate);
-        worker.setClassResolver(new DefaultClassResolver());
-        
-        replay();
-
-        worker.performEnhancement(op, spec, m, l);
-
-        verify();
-    }
-    
-    public void test_Unknown_Asset()
-    {
-        Location l = newLocation();
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = newSpec();
-        InjectAssetWorker delegate = new InjectAssetWorker();
-        
-        Method m = findMethod(AnnotatedPage.class, "getUnknownAsset");
-        
-        expect(spec.getAsset("homageDeFred")).andReturn(null);
-        
-        InjectAssetAnnotationWorker worker = new InjectAssetAnnotationWorker(delegate);
-        worker.setClassResolver(new DefaultClassResolver());
-        
-        replay();
-        
-        try
-        {
-            worker.performEnhancement(op, spec, m, l);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertTrue(ex.getMessage().startsWith("No asset has been mapped with a name of 'homageDeFred': "));
-        }
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestInjectComponentAnnotationWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestInjectComponentAnnotationWorker.java
deleted file mode 100644
index 9ffdfc4..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestInjectComponentAnnotationWorker.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.enhance.InjectComponentWorker;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.InjectComponentAnnotationWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectComponentAnnotationWorker extends BaseAnnotationTestCase
-{
-
-    public void testDefault()
-    {
-        InjectComponentAnnotationWorker worker = new InjectComponentAnnotationWorker();
-
-        assertNotNull(worker._delegate);
-    }
-
-    public void testDelegation()
-    {
-        Location l = newLocation();
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = newSpec();
-
-        InjectComponentWorker delegate = org.easymock.classextension.EasyMock.createMock(InjectComponentWorker.class);
-        
-        delegate.injectComponent(op, "fred", "fredField", l);
-        
-        replay();
-        org.easymock.classextension.EasyMock.replay(delegate);
-        
-        InjectComponentAnnotationWorker worker = new InjectComponentAnnotationWorker(delegate);
-
-        worker.performEnhancement(op, spec, findMethod(AnnotatedPage.class, "getFredField"), l);
-        
-        verify();
-        org.easymock.classextension.EasyMock.verify(delegate);
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestInjectObjectAnnotationWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestInjectObjectAnnotationWorker.java
deleted file mode 100644
index 391e2c7..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestInjectObjectAnnotationWorker.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.enhance.InjectObjectWorker;
-import org.apache.tapestry.services.InjectedValueProvider;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.InjectObjectAnnotationWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectObjectAnnotationWorker extends BaseAnnotationTestCase
-{
-    public void testDefault()
-    {
-        InjectObjectAnnotationWorker worker = new InjectObjectAnnotationWorker();
-
-        assertNotNull(worker._delegate);
-    }
-
-    public void testDelegation()
-    {
-        Location l = newLocation();
-
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = newSpec();
-
-        InjectObjectWorker delegate = org.easymock.classextension.EasyMock.createNiceMock(InjectObjectWorker.class);
-
-        InjectedValueProvider provider = newMock(InjectedValueProvider.class);
-
-        delegate.setProvider(provider);
-        
-        replay();
-        org.easymock.classextension.EasyMock.replay(delegate);
-        
-        InjectObjectAnnotationWorker worker = new InjectObjectAnnotationWorker(delegate);
-        worker.setProvider(provider);
-        
-        verify();
-        org.easymock.classextension.EasyMock.verify(delegate);
-        
-        Method m = findMethod(AnnotatedPage.class, "getInjectedObject");
-        
-        delegate.injectObject(op, "barney", "injectedObject", l);
-        
-        replay();
-        
-        worker.performEnhancement(op, spec, m, l);
-        
-        verify();
-        org.easymock.classextension.EasyMock.verify(delegate);
-    }
-
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestMessageAnnotationWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestMessageAnnotationWorker.java
deleted file mode 100644
index db47a57..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestMessageAnnotationWorker.java
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Messages;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.service.impl.ClassFactoryImpl;
-import org.apache.tapestry.enhance.EnhanceUtils;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.enhance.EnhancementOperationImpl;
-import org.apache.tapestry.services.ComponentConstructor;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import static org.easymock.EasyMock.aryEq;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-@Test
-public class TestMessageAnnotationWorker extends BaseAnnotationTestCase
-{
-    public void testNoArgsMessage()
-    {
-        attempt("noArgsMessage", "{\n  return getMessages().getMessage(\"no-args-message\");\n}\n");
-    }
-
-    public void testMessageWithSpecificKey()
-    {
-        attempt(
-                "messageWithSpecificKey",
-                "{\n  return getMessages().getMessage(\"message-key\");\n}\n");
-    }
-
-    public void testMessageWithParameters()
-    {
-        attempt("messageWithParameters", "{\n"
-                + "  java.lang.Object[] params = new java.lang.Object[2];\n"
-                + "  params[0] = $1;\n" + "  params[1] = $2;\n"
-                + "  return getMessages().format(\"message-with-parameters\", params);\n}\n");
-    }
-
-    public void testMessageWithPrimitiveParameters()
-    {
-        attempt("messageWithPrimitives", "{\n"
-                + "  java.lang.Object[] params = new java.lang.Object[2];\n"
-                + "  params[0] = ($w) $1;\n" + "  params[1] = ($w) $2;\n"
-                + "  return getMessages().format(\"message-with-primitives\", params);\n}\n");
-    }
-
-    public void testNotStringReturnType()
-    {
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = newSpec();
-
-        Method method = findMethod(AnnotatedPage.class, "voidMessage");
-
-        replay();
-
-        try
-        {
-            new MessageAnnotationWorker().performEnhancement(op, spec, method, null);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "The method's return type is void; this annotation is only allowed on methods that return java.lang.String.",
-                    ex.getMessage());
-        }
-
-        verify();
-
-    }
-
-    public void testSetterIsClaimed()
-    {
-        Location l = newLocation();
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = newSpec();
-
-        Method method = findMethod(AnnotatedPage.class, "getLikeGetter");
-
-        op.addMethod(
-                Modifier.PUBLIC,
-                new MethodSignature(method),
-                "{\n  return getMessages().getMessage(\"like-getter\");\n}\n",
-                l);
-        op.claimReadonlyProperty("likeGetter");
-
-        replay();
-
-        new MessageAnnotationWorker().performEnhancement(op, spec, method, l);
-
-        verify();
-    }
-
-    private void attempt(String methodName, String codeBlock)
-    {
-        Location l = newLocation();
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = newSpec();
-
-        Method method = findMethod(AnnotatedPage.class, methodName);
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(method), codeBlock, l);
-
-        replay();
-
-        new MessageAnnotationWorker().performEnhancement(op, spec, method, l);
-
-        verify();
-    }
-
-    private Object construct(Class baseClass, String methodName, Messages messages)
-    {
-        Location l = newLocation();
-
-        ComponentSpecification spec = new ComponentSpecification();
-        EnhancementOperationImpl op = new EnhancementOperationImpl(getClassResolver(), spec,
-                baseClass, new ClassFactoryImpl(), null);
-
-        op.addInjectedField("_messages", Messages.class, messages);
-
-        EnhanceUtils.createSimpleAccessor(op, "_messages", "messages", Messages.class, l);
-
-        Method method = findMethod(baseClass, methodName);
-
-        new MessageAnnotationWorker().performEnhancement(op, spec, method, l);
-
-        ComponentConstructor cc = op.getConstructor();
-
-        return cc.newInstance();
-    }
-
-    public void testNoParams()
-    {
-        Messages messages = newMock(Messages.class);
-        
-        expect(messages.getMessage("no-params")).andReturn("<no params>");
-
-        MessagesTarget mt = (MessagesTarget) construct(MessagesTarget.class, "noParams", messages);
-
-        replay();
-
-        assertEquals("<no params>", mt.noParams());
-
-        verify();
-    }
-
-    public void testObjectParam()
-    {
-        Messages messages = newMock(Messages.class);
-
-        Object[] params = new Object[]
-        { "PinkFloyd" };
-
-        expect(messages.format(eq("object-param"), aryEq(params))).andReturn("<object param>");
-        
-        MessagesTarget mt = (MessagesTarget) construct(
-                MessagesTarget.class,
-                "objectParam",
-                messages);
-
-        replay();
-
-        assertEquals("<object param>", mt.objectParam("PinkFloyd"));
-
-        verify();
-    }
-
-    public void testPrimitiveParam()
-    {
-        Messages messages = newMock(Messages.class);
-
-        Object[] params = new Object[]
-        { 451 };
-
-        expect(messages.format(eq("primitive-param"), aryEq(params))).andReturn("<primitive param>");
-        
-        MessagesTarget mt = (MessagesTarget) construct(
-                MessagesTarget.class,
-                "primitiveParam",
-                messages);
-
-        replay();
-
-        assertEquals("<primitive param>", mt.primitiveParam(451));
-
-        verify();
-
-    }
-
-    public void testInvalidBindings()
-    {
-        invalidBinding("no equals");
-        invalidBinding("= at start");
-        invalidBinding("equals at end=");
-    }
-
-    private void invalidBinding(String binding)
-    {
-        try
-        {
-            new ComponentAnnotationWorker().addBinding(null, binding, null);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(AnnotationMessages.bindingWrongFormat(binding), ex.getMessage());
-        }
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestParameterAnnotationWorker.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestParameterAnnotationWorker.java
deleted file mode 100644
index d7f1d6d..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestParameterAnnotationWorker.java
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.annotations.ParameterAnnotationWorker}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestParameterAnnotationWorker extends BaseAnnotationTestCase
-{
-    private IParameterSpecification attempt(String propertyName, Location location)
-    {
-        return attempt(propertyName, propertyName, location);
-    }
-
-    private IParameterSpecification attempt(String propertyName, String parameterName,
-            Location location)
-    {
-        Method m = findMethod(AnnotatedComponent.class, "get"
-                + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1));
-        
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getPropertyType(propertyName)).andReturn(m.getReturnType());
-        
-        IComponentSpecification spec = new ComponentSpecification();
-
-        replay();
-
-        new ParameterAnnotationWorker().performEnhancement(op, spec, m, location);
-
-        verify();
-
-        return spec.getParameter(parameterName);
-    }
-
-    public void testSimple()
-    {
-        Location l = newLocation();
-
-        IParameterSpecification ps = attempt("simpleParameter", l);
-
-        assertListEquals(new Object[] {}, ps.getAliasNames().toArray());
-        assertEquals(true, ps.getCache());
-        assertEquals(null, ps.getDefaultValue());
-        assertEquals(null, ps.getDescription());
-        assertSame(l, ps.getLocation());
-        assertEquals("simpleParameter", ps.getParameterName());
-        assertEquals("simpleParameter", ps.getPropertyName());
-        assertEquals("java.lang.String", ps.getType());
-    }
-
-    public void testRequired()
-    {
-        IParameterSpecification ps = attempt("requiredParameter", null);
-
-        assertEquals(true, ps.isRequired());
-    }
-
-    public void testCacheOff()
-    {
-        IParameterSpecification ps = attempt("nonCachedParameter", null);
-
-        assertEquals(false, ps.getCache());
-    }
-
-    public void testAliases()
-    {
-        IParameterSpecification ps = attempt("aliasedParameter", null);
-
-        assertListEquals(new String[]{ "fred" }, ps.getAliasNames().toArray());
-    }
-
-    public void testDeprecated()
-    {
-        IParameterSpecification ps = attempt("deprecatedParameter", null);
-        assertEquals(true, ps.isDeprecated());
-    }
-
-    public void testNamed()
-    {
-        IParameterSpecification ps = attempt("namedParameter", "fred", null);
-
-        assertEquals("fred", ps.getParameterName());
-        assertEquals("namedParameter", ps.getPropertyName());
-    }
-
-    public void testDefaultValue()
-    {
-        IParameterSpecification ps = attempt("defaultValue", null);
-
-        assertEquals("myDefault", ps.getDefaultValue());
-    }
-    
-    public void testParameterNotAllowed()
-    {
-        Method m = findMethod(AnnotatedPage.class, "getSimpleParameter");
-        
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        IComponentSpecification spec = new ComponentSpecification();
-
-        replay();
-
-        try
-        {
-            new ParameterAnnotationWorker().performEnhancement(op, spec, m, null);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {            
-        }
-
-        verify();        
-    }
-
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestSimpleAnnotationWorkers.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestSimpleAnnotationWorkers.java
deleted file mode 100644
index e188df9..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestSimpleAnnotationWorkers.java
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.annotations;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.InjectSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Test for the "simple" annotation workers, that collect basic information and update the component
- * specification.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestSimpleAnnotationWorkers extends BaseAnnotationTestCase
-{
-    public void test_Inject_Page()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = execute(new InjectPageAnnotationWorker(), "getMyPage", l);
-
-        InjectSpecification is = (InjectSpecification) spec.getInjectSpecifications().get(0);
-
-        assertEquals("myPage", is.getProperty());
-        assertEquals("page", is.getType());
-        assertEquals("SomePageName", is.getObject());
-        assertSame(l, is.getLocation());
-    }
-
-    public void test_Inject_Meta()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = execute(new InjectMetaAnnotationWorker(), "getMetaFred", l);
-
-        InjectSpecification is = (InjectSpecification) spec.getInjectSpecifications().get(0);
-
-        assertEquals("metaFred", is.getProperty());
-        assertEquals("meta", is.getType());
-        assertEquals("fred", is.getObject());
-        assertSame(l, is.getLocation());
-
-    }
-    
-    public void test_Inject_Meta_NoValue()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = execute(new InjectMetaAnnotationWorker(), "getPageTitle", l);
-
-        InjectSpecification is = (InjectSpecification) spec.getInjectSpecifications().get(0);
-
-        assertEquals("pageTitle", is.getProperty());
-        assertEquals("meta", is.getType());
-        assertEquals("page-title", is.getObject());
-        assertSame(l, is.getLocation());
-
-    }    
-
-    public void test_Inject_Script()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = execute(new InjectScriptAnnotationWorker(), "getScript", l);
-
-        InjectSpecification is = (InjectSpecification) spec.getInjectSpecifications().get(0);
-
-        assertEquals("script", is.getProperty());
-        assertEquals("script", is.getType());
-        assertEquals("foo.script", is.getObject());
-        assertSame(l, is.getLocation());
-    }
-
-    public void test_Inject_State()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = execute(new InjectStateAnnotationWorker(), "getBarney", l);
-
-        InjectSpecification is = (InjectSpecification) spec.getInjectSpecifications().get(0);
-
-        assertEquals("barney", is.getProperty());
-        assertEquals("state", is.getType());
-        assertEquals("barneyASO", is.getObject());
-        assertSame(l, is.getLocation());
-    }
-    
-    public void test_Inject_State_NoValue()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = execute(new InjectStateAnnotationWorker(), "getMyVisit", l);
-
-        InjectSpecification is = (InjectSpecification) spec.getInjectSpecifications().get(0);
-
-        assertEquals("myVisit", is.getProperty());
-        assertEquals("state", is.getType());
-        assertEquals("my-visit", is.getObject());
-        assertSame(l, is.getLocation());
-    }    
-
-    public void test_Inject_State_Flag()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = execute(
-                new InjectStateFlagAnnotationWorker(),
-                "getBarneyExists",
-                l);
-
-        InjectSpecification is = (InjectSpecification) spec.getInjectSpecifications().get(0);
-
-        assertEquals("barneyExists", is.getProperty());
-        assertEquals("state-flag", is.getType());
-        assertEquals("barneyASO", is.getObject());
-        assertSame(l, is.getLocation());
-    }
-    
-    public void test_Inject_State_Flag_NoValue()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = execute(
-                new InjectStateFlagAnnotationWorker(),
-                "getMyVisitExists",
-                l);
-
-        InjectSpecification is = (InjectSpecification) spec.getInjectSpecifications().get(0);
-
-        assertEquals("myVisitExists", is.getProperty());
-        assertEquals("state-flag", is.getType());
-        assertEquals("my-visit", is.getObject());
-        assertSame(l, is.getLocation());
-    }    
-
-    private IComponentSpecification execute(MethodAnnotationEnhancementWorker worker,
-            String methodName, Location location)
-    {
-        EnhancementOperation op = newOp();
-        IComponentSpecification spec = new ComponentSpecification();
-
-        Method method = findMethod(AnnotatedPage.class, methodName);
-
-        replay();
-
-        worker.performEnhancement(op, spec, method, location);
-
-        verify();
-
-        return spec;
-    }
-}
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/images/test-asset.txt b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/images/test-asset.txt
deleted file mode 100644
index 257cc56..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/annotations/images/test-asset.txt
+++ /dev/null
@@ -1 +0,0 @@
-foo
diff --git a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/form/TestEnumPropertySelectionModel.java b/tapestry/tapestry-annotations/src/test/org/apache/tapestry/form/TestEnumPropertySelectionModel.java
deleted file mode 100644
index 50d5b60..0000000
--- a/tapestry/tapestry-annotations/src/test/org/apache/tapestry/form/TestEnumPropertySelectionModel.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.form;
-
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionaliy of {@link EnumPropertySelectionModel}.
- * 
- */
-@Test
-public class TestEnumPropertySelectionModel
-{
-    enum AbstractFormat
-    {
-        FreePaperOnly("Free Paper Only"),
-        ScientificPosterOnly("Scientific Poster Only"),
-        DemonstrationPosterOnly("Demonstration Poster Only"),
-        FreePaperorScientificPoster("Free Paper or Scientific Poster"),
-        FreePaperorDemonstrationPoster("Free Paper or Demonstration Poster"),
-        InstructionalCourse("Instructional Course");
-        
-        private final String category;
-        
-        AbstractFormat(String category){
-            this.category = category;
-        }
-        
-        public String toString()
-        {
-            return this.category;
-        }
-    }
-    
-    public void test_Simple_Enum()
-    {
-        EnumPropertySelectionModel ep = new EnumPropertySelectionModel(AbstractFormat.values());
-        
-        assert "None".equals(ep.getLabel(0));
-        
-        assert AbstractFormat.FreePaperOnly.toString().equals(ep.getLabel(1));
-        
-        assert AbstractFormat.FreePaperorDemonstrationPoster.equals(ep.getOption(5));
-        
-        assert AbstractFormat.values().length + 1 == ep.getOptionCount();
-        
-        assert "None".equals(ep.getValue(0));
-        
-        assert ep.getOption(0) == null;
-        
-        assert AbstractFormat.ScientificPosterOnly.toString().equals(ep.getValue(2));
-        
-        assert AbstractFormat.FreePaperOnly == ep.translateValue(AbstractFormat.FreePaperOnly.toString());
-    }
-}
diff --git a/tapestry/tapestry-archetype/pom.xml b/tapestry/tapestry-archetype/pom.xml
deleted file mode 100644
index 2f10ab5..0000000
--- a/tapestry/tapestry-archetype/pom.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>tapestry-archetype</artifactId>
-    <packaging>maven-plugin</packaging>
-    <version>4.1.2</version>
-
-    <parent>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>tapestry-project</artifactId>
-        <version>4.1.2</version>
-    </parent>
-    
-    <name>Simple Tapestry Archetype</name>
-    <inceptionYear>2007</inceptionYear>
-
-    <contributors>
-        <contributor>
-            <name>Josh Long</name>
-            <url>http://www.joshlong.com</url>
-            <email>josh@joshlong.com</email>
-        </contributor>
-    </contributors>
-
-    <build>
-    </build>
-
-    <reporting>
-        <outputDirectory>../target/site/tapestry-archetype</outputDirectory>
-        <excludeDefaults>true</excludeDefaults>
-    </reporting>
-</project>
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/META-INF/archetype.xml b/tapestry/tapestry-archetype/src/main/resources/META-INF/archetype.xml
deleted file mode 100644
index dab1248..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/META-INF/archetype.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<archetype>
-    <!--
-     @author Josh Long 
-    -->
-    <id>tapestry-simple</id>
-    <resources>
-        <resource>src/main/webapp/WEB-INF/hivemodule.xml</resource>
-        <resource>src/main/webapp/WEB-INF/web.xml</resource>
-        <resource>src/main/webapp/WEB-INF/app.application</resource>
-        <resource>src/main/webapp/Home.html</resource>
-        <resource>src/main/webapp/WEB-INF/widgets/RoundedCorner.html</resource>
-        <resource>src/main/webapp/WEB-INF/applicationContext.xml</resource>
-        <resource>src/main/webapp/WEB-INF/Echo.html</resource>
-        <resource>src/test/java/PLACEHOLDER</resource>
-        <resource>src/test/resources/PLACEHOLDER</resource>
-    </resources>
-
-    <sources>
-        <source>src/main/java/services/RoundedCornerService.java</source>
-        <source>src/main/java/components/widgets/RoundedCorner.java</source>
-
-        <source>src/main/java/components/Echo.java</source>
-        <source>src/main/java/pages/Home.java</source>
-        <source>src/main/java/application/aso/GlobalASOFactory.java</source>
-        <source>src/main/java/application/aso/VisitASOFactory.java</source>
-        <source>src/main/java/application/Visit.java</source>
-        <source>src/main/java/application/Global.java</source>
-        <source>src/main/java/util/Utilities.java</source>
-    </sources>
-</archetype>
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/pom.xml b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/pom.xml
deleted file mode 100644
index b79716c..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/pom.xml
+++ /dev/null
@@ -1,268 +0,0 @@
-<project  xmlns="http://maven.apache.org/POM/4.0.0"
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>${groupId}</groupId>
-    <artifactId>${artifactId}</artifactId>
-    <version>${version}</version>
-    <packaging>war</packaging>
-    <name>${artifactId} Tapestry Application</name>
-    
-    <dependencies>
-        <!--
-        These are some useful dependencies, you may remove them at any time.
-        -->
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-            <version>2.3</version>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>1.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-            <version>3.1</version>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-beanutils</groupId>
-            <artifactId>commons-beanutils</artifactId>
-            <version>1.7.0</version>
-        </dependency>
-
-        <!--
-        ===============================================
-        Spring Framework
-        ===============================================
-        You should probably change this to something more relevant to your systems
-        -->
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>1.2.7</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring</artifactId>
-            <version>1.2.7</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-dao</artifactId>
-            <version>1.2.7</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.maven.wagon</groupId>
-            <artifactId>wagon-ftp</artifactId>
-            <version>1.0-alpha-5</version>
-        </dependency>
-
-        <!--
-        ===============================================
-        The following are required (for this archetype to be any fun!)
-        ===============================================
-        -->
-        <!--
-         NB: Spring integration is first-class, even if it's
-         not "directly" integrated into the framework!
-        -->
-        <dependency>
-            <groupId>com.javaforge.tapestry</groupId>
-            <artifactId>tapestry-spring</artifactId>
-            <version>0.1.2</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>tapestry</artifactId>
-                    <groupId>tapestry</groupId>
-                </exclusion>
-                <exclusion>
-                    <artifactId>tapestry-annotations</artifactId>
-                    <groupId>tapestry</groupId>
-                </exclusion>
-                <exclusion>
-                    <artifactId>tapestry-contrib</artifactId>
-                    <groupId>tapestry</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <!--
-           NB:  You don't really need this, but if you did, this is how you'd configure it.
-                This is useful when you're using the BeanForm component.
-                todo
-                Btw, the BeanForm should be installed as follows
-        -->
-        <dependency>
-            <groupId>com.javaforge.tapestry</groupId>
-            <artifactId>tapestry-prop</artifactId>
-            <version>0.1.1</version>
-            <exclusions>
-                <exclusion>
-                    <artifactId>tapestry</artifactId>
-                    <groupId>tapestry</groupId>
-                </exclusion>
-
-                <exclusion>
-                    <artifactId>tapestry-annotations</artifactId>
-                    <groupId>tapestry</groupId>
-                </exclusion>
-
-                <exclusion>
-                    <artifactId>tapestry-contrib</artifactId>
-                    <groupId>tapestry</groupId>
-                </exclusion>
-
-            </exclusions>
-        </dependency>
-
-
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-annotations</artifactId>
-            <version>4.1.2-SNAPSHOT</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-framework</artifactId>
-            <version>4.1.2-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-contrib</artifactId>
-            <version>4.1.2-SNAPSHOT</version>
-        </dependency>
-        <!-- A dependency on either JUnit or TestNG is required, or the surefire plugin (which runs the tests)
-             will fail, preventing Maven from packaging the WAR. Tapestry includes a large number
-             of testing facilities designed for use with TestNG (http://testng.org/), so it's recommended. -->
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>5.1</version>
-            <classifier>jdk15</classifier>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-    <build>
-        <!--
-        Un comment the following so that the produced deliverable matches
-        your artifact, instead of artifact + version.
-        -->
-        <!--<finalName>${artifactId}</finalName>-->
-        <resources>
-            <resource>
-                <directory>src/main/meta</directory>
-                <targetPath>/</targetPath>
-                <filtering>true</filtering>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-            </resource>
-        </resources>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>2.0</version>
-                <configuration>
-                    <!-- no default value -->
-                    <dependentWarExcludes>WEB-INF/web.xml</dependentWarExcludes>
-                </configuration>
-            </plugin>
-
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                    <optimize>true</optimize>
-                </configuration>
-
-            </plugin>
-
-            <!-- Run the application using "mvn jetty:run" -->
-
-            <plugin>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>maven-jetty6-plugin</artifactId>
-                <version>6.0.0beta17</version>
-                <configuration>
-
-                    <scanTargets>
-                        <scanTarget>src/main/resources/</scanTarget>
-                    </scanTargets>
-                    <!--
-                                        <webDefaultXml>src/main/resources/webdefault.xml</webDefaultXml>
-                    -->
-                    <systemProperties>
-                        <systemProperty>
-                            <name>net.sf.ehcache.disabled</name>
-                            <value>false</value>
-                        </systemProperty>
-                        <systemProperty>
-                            <name>org.apache.tapestry.disable-caching</name>
-                            <value>true</value>
-                        </systemProperty>
-                    </systemProperties>
-                    <scanIntervalSeconds>10</scanIntervalSeconds>
-                </configuration>
-            </plugin>
-
-        </plugins>
-    </build>
-
-    <repositories>
-        <repository>
-            <name>codehaus.org</name>
-            <id>Maven Snapshots 2</id>
-            <url>http://snapshots.repository.codehaus.org/</url>
-            <snapshots> <enabled>true</enabled></snapshots>
-            <releases>  <enabled>true</enabled></releases>
-        </repository>
-
-        <repository>
-            <id>apache.snapshots</id>
-            <url>http://people.apache.org/repo/m2-snapshot-repository</url>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-        </repository>
-
-        <repository>
-            <id>tapestry.javaforge</id>
-            <url>http://howardlewisship.com/repository</url>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-            <releases>
-                <enabled>true</enabled>
-            </releases> </repository>
-        <repository>
-            <id>dev.java.net</id>
-            <url>https://maven-repository.dev.java.net/nonav/repository/</url>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-            <releases>
-                <enabled>true</enabled>
-            </releases>  </repository>
-        <repository>
-            <id>Maven Snapshots</id>
-            <url>http://snapshots.maven.codehaus.org/maven2/</url>
-        </repository>
-    </repositories>
-
-</project>
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/Global.java b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/Global.java
deleted file mode 100644
index 1c8cee0..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/Global.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package ${packageName}.application;
-import java.io.Serializable;
-
-import java.io.Serializable;
-import org.springframework.beans.factory.InitializingBean;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import ${packageName}.util.Utilities;
-
-  /**
-     * You can "store" anything here you would
-     * store in the session, and
-     * only for things you'd persist
-     * for the whole application, per user.
-     *
-     * A good example: the working credentials of one user logged into a system.
-     *
-     * To Store something, simply add an accessor/mutator.
-     *
-     * <code>
-     *
-     * private User user;
-     * public User getUser(){ return this.user; }
-     * public void setUser (User usr ){ this.user=usr;}
-     *
-     * </code>
-     *
-    */
-public class Global implements Serializable
-{
-     private Utilities utilities ;
-
-    public Utilities getUtilities() {
-        return utilities;
-    }
-
-    public void setUtilities(Utilities utilities) {
-        this.utilities = utilities;
-    }
-
-
-
-
-}
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/Visit.java b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/Visit.java
deleted file mode 100644
index f93b87f..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/Visit.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package ${packageName}.application;
-
-import java.io.Serializable;
-import org.springframework.beans.factory.InitializingBean;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import ${packageName}.util.Utilities;
-
-  /**
-     * You can "store" anything here you would
-     * store in the session, and
-     * only for things you'd persist
-     * for the whole application, per user.
-     *
-     * A good example: the working credentials of one user logged into a system.
-     *
-     * To Store something, simply add an accessor/mutator.
-     *
-     * <code>
-     *
-     * private User user;
-     * public User getUser(){ return this.user; }
-     * public void setUser (User usr ){ this.user=usr;}
-     *
-     * </code>
-     *
-    */
-public class Visit implements Serializable
-{
-     private Utilities utilities ;
-
-    public Utilities getUtilities() {
-        return utilities;
-    }
-
-    public void setUtilities(Utilities utilities) {
-        this.utilities = utilities;
-    }
-
-
-
-
-}
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/aso/GlobalASOFactory.java b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/aso/GlobalASOFactory.java
deleted file mode 100644
index 9d51ed8..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/aso/GlobalASOFactory.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${packageName}.application.aso;
-import ${packageName}.util.* ;
-import ${packageName}.application.* ;
-import org.apache.tapestry.engine.state.StateObjectFactory;
-
-
-public class GlobalASOFactory implements StateObjectFactory
-{
-     private Utilities utilities ;
-
-    public Utilities getUtilities() {
-        return utilities;
-    }
-
-    public void setUtilities(Utilities utilities) {
-        this.utilities = utilities;
-    }
-
-    public Object createStateObject()
-    {
-       Global v = new Global() ;
-        v.setUtilities(getUtilities());
-        return v;
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/aso/VisitASOFactory.java b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/aso/VisitASOFactory.java
deleted file mode 100644
index 7bebfb7..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/application/aso/VisitASOFactory.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package ${packageName}.application.aso;
-import ${packageName}.util.* ;
-import ${packageName}.application.* ;
-import org.apache.tapestry.engine.state.StateObjectFactory;
-
-
-public class VisitASOFactory implements StateObjectFactory
-{
-     private Utilities utilities ;
-
-    public Utilities getUtilities() {
-        return utilities;
-    }
-
-    public void setUtilities(Utilities utilities) {
-        this.utilities = utilities;
-    }
-
-    public Object createStateObject()
-    {
-       Visit v = new Visit() ;
-        v.setUtilities(getUtilities());
-        return v;
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/components/Echo.java b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/components/Echo.java
deleted file mode 100644
index 8ce30ce..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/components/Echo.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package ${packageName}.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.annotations.InjectObject;
-import org.apache.tapestry.annotations.Parameter;
-
-/**
- * @author Joshua Long
- *
- */
-abstract public class Echo extends BaseComponent
-{
-    
-
-    @Parameter abstract public String getValue() ;
-    
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/components/widgets/RoundedCorner.java b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/components/widgets/RoundedCorner.java
deleted file mode 100644
index 96afdf0..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/components/widgets/RoundedCorner.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package ${packageName}.components.widgets;
-
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.BaseComponent;
-
-import org.apache.tapestry.annotations.InjectObject;
-import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * The rounded corner component provides a corner image, rendered with Java2D. Naturally, the inspiration was
- * the much vaunted google groups image generator URL. That URL is exemplary of the value of an engine service in Tapestry:
- * you parameterize it, and it generates useful output, even if the output itself is never going to be a destination for some user.
- * <p/>
- * It takes as it's parameters the background color, the foreground color, the desired
- * height and width, and the desired corner.
- * <p/>
- * Note that the component itself is really very simple. It just marshals the parameters
- * and converts them into useful input for our engine-service. The engine service does the
- * hard work of rendering the image using Java2D. All values have useful defaults, so getting it working can be as simple as
- * <p/>
- * <code>
- * <img src ="#" jwcid = "@widgets/RoundedCorner" corner = "SE"/>
- * </code>
- */
-abstract public class RoundedCorner extends BaseComponent {
-
-
-    @InjectObject("engine-service:RoundedCornerService")
-    abstract public IEngineService getRoundedCornersService();
-
-
-    public String getCornerImageURL() {
-        IEngineService service = getRoundedCornersService();
-
-        ILink link = service.getLink(false, getServiceParameters());
-
-        return link.getURL();
-    }
-
-    public Map<String, String> getServiceParameters() {
-        Map<String, String> ps = new HashMap<String, String>();
-        ps.put("h", getHeight());
-        ps.put("w", getWidth());
-        ps.put("fg", getForegroundColor());
-        ps.put("bg", getBackgroundColor());
-        ps.put("corner", getCorner());
-        return ps;
-    }
-
-    @Parameter(defaultValue = "literal:10")
-    abstract public String getHeight();
-
-    abstract public void setHeight(String height);
-
-    @Parameter(defaultValue = "literal:#FFFFFF")
-    abstract public String getBackgroundColor();
-
-    abstract public void setBackgroundColor(String backgroundColor);
-
-    @Parameter(defaultValue = "literal:#000000")
-    abstract public String getForegroundColor();
-
-    abstract public void setForegroundColor(String foregroundColor);
-
-    @Parameter(defaultValue = "literal:NE")
-    abstract public String getCorner();
-
-    abstract public void setCorner(String corner);
-
-    @Parameter(defaultValue = "literal:10")
-    abstract public String getWidth();
-
-    abstract public void setWidth(String width);
-}
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/pages/Home.java b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/pages/Home.java
deleted file mode 100644
index 4dbe0c8..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/pages/Home.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package ${packageName}.pages;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.services.ResponseBuilder;
-import java.util.Date ;
-
-/**
- * Start page of "${artifactId}".
- */
-abstract public class Home extends BasePage
-{
-
-    abstract public ResponseBuilder getResponseBuilder()  ;
-
-    /**
-     * Re-renders (via ajax) the Tapestry node containing the date and time.
-     */
-    public void refresh ()
-    {
-        getResponseBuilder().updateComponent("time");
-    }
-
-
-    /**
-     * a synthesized property returning the current time.
-     *
-     * @return the current data and time
-     */
-    public Date getCurrentTime()
-	{
-		return new Date();
-	}
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/services/RoundedCornerService.java b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/services/RoundedCornerService.java
deleted file mode 100644
index 555e4e6..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/services/RoundedCornerService.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package ${packageName}.services;
-
-
-import ${packageName}.util.Utilities;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.web.WebResponse;
-
-import javax.imageio.ImageIO;
-import java.awt.*;
-import java.awt.geom.RoundRectangle2D;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-public class RoundedCornerService implements IEngineService {
-
-    enum RoundedCorner {
-        NW, NE, SW, SE
-    }
-
-
-    /**
-     * This renders a rounded corner that has the specified size, dimensions, etc.
-     *
-     * @param bg
-     * @param fg
-     * @param width
-     * @param height
-     * @param corner
-     * @return
-     * @throws Throwable
-     */
-
-    private BufferedImage renderRoundedCorner(
-            String bg, String fg,
-            int width, int height, RoundedCorner corner
-    ) throws Throwable {
-
-        width = width * 2;
-        height = height * 2;
-        int visibleH = height / 2;
-        int visibleW = width / 2;
-
-        BufferedImage img = new BufferedImage(visibleW, visibleH, BufferedImage.TYPE_INT_RGB);
-
-
-        Graphics2D g2d = img.createGraphics();
-
-
-        int x = 0, y = 0;
-        switch (corner) {
-            case NW:
-                // everythings rendered this wa bey default
-                break;
-            case SW:
-                x = 0;
-                y = (visibleH * 3) * -1;
-                ;
-                break;
-
-
-            case NE:
-                x = (visibleW * 3) * -1;
-                y = 0;//visibleH * -1 ;
-
-                break;
-
-            case SE:
-                x = (visibleW * 3) * -1;
-                y = (visibleH * 3) * -1;
-
-                break;
-        }
-
-
-        RoundRectangle2D rect = new RoundRectangle2D.Float(x, y, width * 2, height * 2, width, height);
-
-        Color bgColor = Color.decode(bg);
-
-        Color fgColor = Color.decode(fg);
-        Rectangle r = new Rectangle(width, height);
-        g2d.setColor(bgColor);
-        g2d.fill(r);
-        g2d.setPaint(fgColor);
-        g2d.setBackground(bgColor);
-        g2d.setColor(fgColor);
-        g2d.fill(rect);
-
-
-        g2d.dispose();
-
-
-        return img;
-    }
-
-
-    public static String SERVICE_NAME = "RoundedCornerService";
-
-    public void service(IRequestCycle cycle) throws IOException {
-
-        // so you hit the service
-        // by the time were actually rendering stuff, we will always
-        // have a map of <String,String > that translates well.
-
-        String corner = cycle.getParameter("corner");
-        String wS = cycle.getParameter("w"),
-                hS = cycle.getParameter("h"),
-                fg = cycle.getParameter("fg"),
-                bg = cycle.getParameter("bg");
-
-        RoundedCorner crnr = RoundedCorner.valueOf(corner);
-
-        int h = Integer.parseInt(hS);
-        int w = Integer.parseInt(wS);
-
-
-        try {
-            OutputStream output = response.getOutputStream(new ContentType("image/jpeg"));
-
-
-            BufferedImage rc = renderRoundedCorner(bg, fg, w, h, crnr);
-
-            ImageIO.write(rc, "jpeg", output);
-
-        } catch (Throwable th) {
-            getUtilities().log(th);
-        }
-
-
-    }
-
-
-    public Utilities getUtilities() {
-        return utilities;
-    }
-
-    public void setUtilities(Utilities utilities) {
-        this.utilities = utilities;
-    }
-
-    private Utilities utilities;
-
-    public ILink getLink(boolean isPost, Object parameter) {
-        Map<String, Object> params = new HashMap<String, Object>();
-        params.put("corner", RoundedCorner.NE.toString());
-        params.put("bg", "#FFFFFF");
-        params.put("w", "8");
-        params.put("h", "8");
-        params.put("fg", "#000000");
-
-        if (null != parameter) {
-            // grab the overridden defaults from the params if they exist
-            Map<String, String> p = (Map<String, String>) parameter;
-
-            Set<String> keys = params.keySet();
-
-            for (String key : keys) {
-                if (p.containsKey(key)) {
-
-                    Object value = p.get(key);
-
-                    if (value != null)
-                        params.put(key, value);
-
-                }
-            }
-
-        }
-
-        return linkFactory.constructLink(this, false, params, true);
-    }
-
-
-    private LinkFactory linkFactory;
-    private WebResponse response;
-
-    public LinkFactory getLinkFactory() {
-        return linkFactory;
-    }
-
-    public void setLinkFactory(LinkFactory linkFactory) {
-        this.linkFactory = linkFactory;
-    }
-
-    public WebResponse getResponse() {
-        return response;
-    }
-
-    public void setResponse(WebResponse response) {
-        this.response = response;
-    }
-
-    public String getName() {
-        return SERVICE_NAME;
-    }
-
-}
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/util/Utilities.java b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/util/Utilities.java
deleted file mode 100644
index f0bb78c..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/java/util/Utilities.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package ${packageName}.util;
-
-import java.io.Serializable;
-import java.text.MessageFormat;
-
-
-import org.apache.commons.lang.exception.ExceptionUtils;
-
-import java.io.Serializable;
-import java.text.MessageFormat;
-
-/**
- * Useful object designed to help do things common to application development that might be useful.
- * <p/>
- * In this case: a standard mechanism to log. You might insert other helper methods here. If you can't reuse someone else's code,
- * it's at least worth factoring it out, right?
- */
-public class Utilities implements Serializable {
-    public void log(Throwable th) {
-        log(ExceptionUtils.getFullStackTrace(th));
-    }
-
-    public void log(String msg, Object... params) {
-        System.out.println(MessageFormat.format(msg, params));
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/resources/log4j.properties b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/resources/log4j.properties
deleted file mode 100644
index 8bc2135..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-log4j.rootCategory=WARN, A1
-
-# A1 is set to be a ConsoleAppender. 
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=[%p] %c{1} %m%n
-
-log4j.category.org.apache.tapestry.TapestryFilter=info
-log4j.category.org.apache.tapestry=error
-log4j.category.tapestry=error
-
-log4j.category.${packageName}=error
-log4j.category.app=error
-log4j.category.app.TimingFilter=info
-
-# Turning on debug mode for a page or component will show all of the code changes that occur when the
-# class is loaded.  Turning on debug mode for a page will enable verbose output about rendering
-# the page (and its components).
-# log4j.category.${packageName}.pages.Start=debug
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/Home.html b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/Home.html
deleted file mode 100644
index 0645fa0..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/Home.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!--
-A simple welcome page.
--->
-<html jwcid="$content$">
-<body jwcid="@Shell" title="literal:'${artifactId}' Start Page">
-<h1>view Start Page</h1>
-
-<p> This is the start page for this application, a good place to start your modifications.
-    Just to prove this is live: </p>
-
-<p>
-    <span jwcid="time@Any">
-        The current time is: <span jwcid="@Insert" value="ognl:currentTime"> 12/22/2002 blah </span>
-    </span>
-</p>
-
-<p>
-    Here's the Echo component working:
-    <span jwcid="@Echo" value="literal:Hello, world!">  bon-jovi</span>
-</p>
-
-<p>
-    <a jwcid="@PageLink" page="Home">refresh</a> |
-
-    <a  jwcid = "@DirectLink" async = "true" listener = "listener:refresh">
-    refresh via ajax
-    </a>
-
-
-</p>
-
-<p> Here's another example of a component which in turn leverages an engine-service:
-    <img src="#" alt="" jwcid="@widgets/RoundedCorner"/>
-</p>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/Echo.html b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/Echo.html
deleted file mode 100644
index 42bd2a0..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/Echo.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-
- This is perhaps the most useless component.
-
--->
-<span jwcid = "$content$">
-
-    <span  style = "font-size:smaller">this message brought to you by @Echo</span> <b> <span jwcid ="@Insert" value  = "ognl:value"> the message </span>  </b>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/app.application b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/app.application
deleted file mode 100644
index 7fa87b0..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/app.application
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE application PUBLIC
-        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-        "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
-
-<application name="app">
-    <meta key="org.apache.tapestry.page-class-packages" value="${packageName}.pages"/>
-    <meta key="org.apache.tapestry.component-class-packages" value="${packageName}.components"/>
-    <library id="contrib" specification-path="classpath:/org/apache/tapestry/contrib/Contrib.library"/>
-</application>
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/applicationContext.xml b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/applicationContext.xml
deleted file mode 100644
index 51e7b39..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/applicationContext.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans>
-
-    <!--
-     this object is a convenience object.
-     You could administer any kind of spring object here and know that it would
-     be properly introduced into your component classes with a simple
-     <code>
-        @InjectObject( "spring:beanName") public abstract BeanClass getBeanName();
-     </code>
-    -->
-    <bean lazy-init="true" id="utilities" class="${packageName}.util.Utilities">
-    </bean>
-</beans>
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/hivemodule.xml b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/hivemodule.xml
deleted file mode 100644
index 6090b38..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/hivemodule.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<module id="app" version="4.0.0" package="${packageName}">
-
-    <service-point id="globalFactory" interface="${packageName}.application.aso.GlobalFactory">
-        <invoke-factory>
-            <construct class="${packageName}.application.aso.GlobalFactory">
-                <set-object property="utilities" value="spring:utilities"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-    <!--
-    this creates the factory object that in turn creates the Application State Object
-    -->
-    <service-point id="visitFactory" interface="${packageName}.application.aso.VisitFactory">
-        <invoke-factory>
-            <construct class="${packageName}.application.aso.VisitFactory">
-                <set-object property="utilities" value="spring:utilities"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="tapestry.asset.UnprotectedAssets">
-        <unprotected-resource contains=".*js"/>
-    </contribution>
-
-    <contribution configuration-id="tapestry.state.ApplicationObjects">
-        <state-object name="global" scope="application">
-            <invoke-factory object="service:globalFactory"/>
-        </state-object>
-        <state-object name="visit" scope="session">
-            <invoke-factory object="service:visitFactory"/>
-        </state-object>
-
-        <!--
-
-        This form works equally well if you don't need to do anything besides
-        run the constructor to get your application state object working. 
-
-     <contribution configuration-id="tapestry.state.ApplicationObjects">
-      <state-object name="visit" scope="session">
-        <create-instance class="org.example.myapp.application.aso.VisitFactory"/>
-      </state-object>
-    </contribution>
-        -->
-
-
-    </contribution>
-
-    <contribution configuration-id="tapestry.url.ServiceEncoders">
-        <asset-encoder id="asset" path="/assets"/>
-    </contribution>
-
-    <!--
-      =======================================================
-      SERVICES
-      =======================================================
-      -->
-    <!-- this is a listing to tell tapestry which objects are services
-    -->
-    <contribution configuration-id="tapestry.services.ApplicationServices">
-        <service name="RoundedCornerService" object="service:RoundedCornerService"/>
-    </contribution>
-
-    <!-- This configures each one of those services in their own special ways.
-    -->
-    <service-point id="RoundedCornerService" interface="org.apache.tapestry.engine.IEngineService">
-        <invoke-factory>
-            <construct class="${packageName}.services.RoundedCornerService">
-                <set-object property="response" value="infrastructure:response"/>
-                <set-object property="linkFactory" value="infrastructure:linkFactory"/>
-                <set-object property="utilities" value="spring:utilities"/>
-
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-
-</module>
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index c545b79..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-        "http://java.sun.com/dtd/web-app_2_3.dtd">
-
-<web-app>
-    <display-name>${artifactId} view</display-name>
-
-    <context-param>
-        <param-name>contextConfigLocation</param-name>
-        <param-value>
-            /WEB-INF/applicationContext.xml
-        </param-value>
-    </context-param>
-    <filter>
-        <filter-name>redirect</filter-name>
-        <filter-class>org.apache.tapestry.RedirectFilter</filter-class>
-    </filter>
-    <filter-mapping>
-        <filter-name>redirect</filter-name>
-        <url-pattern>/</url-pattern>
-    </filter-mapping>
-    <listener>
-        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-    </listener>
-    <servlet>
-        <servlet-name>app</servlet-name>
-        <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-    <servlet-mapping>
-        <servlet-name>app</servlet-name>
-        <url-pattern>/app</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>app</servlet-name>
-        <url-pattern>*.html</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>app</servlet-name>
-        <url-pattern>*.external</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>app</servlet-name>
-        <url-pattern>*.direct</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>app</servlet-name>
-        <url-pattern>*.sdirect</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>app</servlet-name>
-        <url-pattern>/assets/*</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>app</servlet-name>
-        <url-pattern>/users/*</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>app</servlet-name>
-        <url-pattern>*.svc</url-pattern>
-    </servlet-mapping>
-    <welcome-file-list>
-        <welcome-file>Home.html</welcome-file>
-        <welcome-file>app</welcome-file>
-    </welcome-file-list>
-</web-app>
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/widgets/RoundedCorner.html b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/widgets/RoundedCorner.html
deleted file mode 100644
index 050abf1..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/widgets/RoundedCorner.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div jwcid="$content$">
-    <img src="ognl:cornerImageURL" jwcid="@Any"/>
-
-</div>  
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/test/java/PLACEHOLDER b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/test/java/PLACEHOLDER
deleted file mode 100644
index 62c163c..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/test/java/PLACEHOLDER
+++ /dev/null
@@ -1 +0,0 @@
-This placeholder exists to ensure the directory is created. It may be deleted when real files are placed under src/test/java.
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/test/resources/PLACEHOLDER b/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/test/resources/PLACEHOLDER
deleted file mode 100644
index 05ace36..0000000
--- a/tapestry/tapestry-archetype/src/main/resources/archetype-resources/src/test/resources/PLACEHOLDER
+++ /dev/null
@@ -1 +0,0 @@
-This placeholder exists to ensure the directory is created. It may be deleted when real files are placed under src/test/resources.
\ No newline at end of file
diff --git a/tapestry/tapestry-archetype/src/site/apt/about_resultant_project.apt b/tapestry/tapestry-archetype/src/site/apt/about_resultant_project.apt
deleted file mode 100644
index 4b82310..0000000
--- a/tapestry/tapestry-archetype/src/site/apt/about_resultant_project.apt
+++ /dev/null
@@ -1,175 +0,0 @@
- ----
- Using the Tapestry 4.1.2 Archetype
- ----
-
-About the Resultant Project
-
-
-  What you have in front of you is a simple Tapestry application with some simple examples of all the major players in a typical Tapestry application.
-
-* Pages
-
-  A page is the basic unit of work for a tapestry application. Its a screen, not an action. When you design your page, you think in the scope of a screen. Typically a page will encompass just an action, but it doesn't need to. An example: a user login sequence. You hit the page, it shows a login and a password field and a submit button. You hit submit, it performs validation, and returns with a congratulating message and your login information (perhaps it sends an email). Or, it may explain whats wrong with the input. Below the form are links to register or have an email sent to you. Clicking on them merely refreshes the page with a new form in place allowing you to register. Ditto with the forget password form. Naturally, you might do well to factor each one of these scenarios out into a different page, but you dont have to. They can all be in the scope of one page.
-
-  In a working Tapestry application, the main page is the page named <<<Home.html>>>. In the project, all pages are looked for in <<<${groupId}/${artifactId}/pages>>>, so in the project it will be <<<org.example.myapp.pages.Home>>>.
-  All pages have a corresponding html file. The html file is located at the root of the web context. In the project, this corresponds to the webapp folder. Thus, <<<webapp/Home.html>>> corresponds to <<<org.example.mapp.pages.Home>>>. You can correctly infer that a sub-package would be nested one directory in the webapp folder. Thus, <<<org.example.myapp.pages.users.UserHome>>> corresponds to <<<webapp/users/UserHome.html>>>.
-
-  At this point, you've gained over a Struts action or a CGI if only because it's simpler working with objects and listeners than URLs, but there's more.
-
- 
-** For More
-
-  * {{{http://tapestry.apache.org/tapestry4.1/quickstart/helloworld.html}Quick Start (good grounding on the basics) }}
-
-  * {{{http://tapestry.apache.org/tapestry4.1/usersguide/template.html} Information on Tapestry page templates }}
-
-  * {{{http://tapestry.apache.org/tapestry4.1/usersguide/events.html} Tapestry page classes and the events of the lifecycle }}
-  
-
-
-
-* Components
-
-  The real gains come from components. Components are the most fun. Even if you never leverage the framework's infrastructure to build your own components, you can leverage the components that already exist.
-  In the markup of your page, <<<<span jwcid="@Insert" value= "literal:Hello, world!">>>> creates an instance of the Insert component, for example. In our example project, we have a simple component, <<<Echo>>>, defined. The java class for these components is going to be under the ${groupId}/${artifactId}/components folder, or, in this case
-  <<<org.example.mapp.components.Echo>>>. The html for a component is found in the WEB-INF folder. Thus, <<<WEB-INF/Echo.html>>> corresponds to <<<org.example.mapp.components.Echo>>>. 
-
-  Using the resultant component is as simple as inserting the following in the markup of another component or page. The Echo component has one parameter (it's the only accessor on the object, and it's annotated with the <<<@Parameter>>> annotation. It has an accessor for <<<getValue()>>>, thus, the parameter is simply <<<value>>> in HTML. 
-
-+-----+
-<span jwcid = "@Echo" value= "This is to be echoed!"/>
-+-----+
-
-  Note: were the component defined in a subfolder (<<<webapp/subfolder/Echo.html>>>) and package (<<<org.example.myapp.components.subfolder.Echo>>>), then using it would change slightly to include the subfolder:
-
-+-----+
-<span jwcid = "@subfolder/Echo" value= "This is to be echoed!"/>
-+-----+
- 
-** For More
-
-  * {{{http://tapestry.apache.org/tapestry4.1/usersguide/components.html}The 360 on creating components}}. This is an invaluable resource, however you will want to <<also>> take away that, for a component class extending <<<BaseComponent>>>, you may have a corresponding .html file and that will be rendered instead. You don't  have  to use renderComponent for everything.
-
-
-
-
-* Engine Services
-
-  An engine service is Tapestry's window on a lower level http request/response cycle. You are a few steps above raw Servlets, in that you're working with Tapestry and Tapestry knows how to plug engine services in, whereas it doesn't have any particular connectin with a servlet. An engine service, put another way, is where you'd handle things that are either systemic to a lot of pages/components/the application, or you need to produce something Tapestry itself doesn't produce: a graph, or an image, for example. They are often created in conjunction with a component. For example, in the resultant project there is a component called widgets/RoundedCorner. Using it, you can specify 
-
-+-----+
-  <img src="#" corner = "SE" alt="" jwcid="@widgets/RoundedCorner" width = "12" />
-+-----+
-
-  and it'll in turn produce an image of a rounded corner to your specifications, using Java2D to draw the images dynamically. The component included is lacking  the polish of a feature-complete component (caching of images, for example.), but it demonstrates the fundamentals. The component takes parameters, the parameters are tunneled the to the engine service, and the engine service draws  the response using Java2D and gives the component a URL that it may use to render the resultant image (whcih it in turn uses as the src parameter of an img tag. This cooperation makes engine services your freind.
-
-** For More
-
-  * {{{http://opencomponentry.com:8080/workbench/app}The Tapestry Workbench Application}}:The tapestry workbench features a "Chart" example. The chart example uses jCharts, and is rendered as an image. This is a fine example of the cooperation between Tapestry and the component used for charting, and an engine service. The Tapestry source code (available from SVN, or download) typically has these "examples" included, and you may find the source for the workbench there.
-
-  * It can not be overstated: the Tapestry framework itself relies on engine services for the core components! The DirectLink uses an engine service to coordinate it's magic and invoke listeners and the @Image component uses the asset service to furnish context assets, for example.  
-
-
-
-* Application State Objects (ASO)
-
-  An application state object is useful for storing objects at different scopes broader than a single page or a request of a single page. They correspond to traditional session objects, and servlet context objects. You can get access to an application state object at any time by "injecting" it into your client code (your pages or components). If there already isn't an ASO of the type and scope you want, Tapestry creates it for you. For example, say that you want to log a person in, and then store that authenticated User object in session, in an object designed for keeping track of the currently logged in user. You would access an ASO, set the User object on it, and move on
-
-  In the example project, we have two application state objects, one called <<<Global>>>, and another called <<<Visit>>>. In our application, we've created these two application scope objects, but we also wanted them to have access to beans defined in our Spring context. We plugged in a custom application state factory. Everything is pretty usefully setup, but overridable. Our custom factory is responsible for dressing up the ASO before any client code gets to use it, which is perfect for passing Spring context objects. In this case, we configure the factory to have the beans provided, and we transfer these beans to the ASO inside the factory. The configuration between the two collaborating objects can be seen in <<<src/webapp/WEB-INF/hivemodule.xml>>>:
-
-+-------+
- ...
-<!--
- This creates the factory object that in turn
- creates the Application State Object
--->
-<service-point id="visitFactory" interface="org.example.myapp.application.aso.VisitFactory">
- <invoke-factory>
-  <construct class="org.example.myapp.application.aso.VisitFactory">
-   <set-object property="utilities" value="spring:utilities"/>
-  </construct>
- </invoke-factory>
-</service-point>
- ...
-+-------+
-
-  The element below is the registry of applicaton state objects. You may have as many application state objects as you'd like  defined. If you don't want to have Spring beans injected into the Application State object, then the configuration shown in comments in the configuration file apply.
-
-+-------+
-<contribution configuration-id="tapestry.state.ApplicationObjects">
- ...
- <state-object name="visit"  scope="session">
-  <invoke-factory object = "service:visitFactory"/>
- </state-object>
- ...
-</contribution>
-+-------+
-
-  From there, you  may use the ASO's any time you want in a component or page by telling Tapestry you want a reference to one.  Tapestry takes care of the rest. 
-
-+-------+
-      @InjectState("visit")  
-      public abstract Visit getVisit() ;
-
-      public void authenticate (IRequestCycle cycle )
-      { 
-	User usr=getVisit().getUser();
-	if( usr!=null  && usr.isAdministrator())
-	{ 
-	 // then do something meaningful  
-	}
-      }
-   
-+-------+
-
-  It's important to remember that Tapestry will create the object if it doesn't already exist, which sometimes means that a session will be created, even if you didn't intend for it be. Tapestry provides a meaningful way of determining whether the object exists without actually accessing (and thus triggering its creation) the ASO: the @InjectStateFlag annotation. The above may be rewritten more efficiently as:
-     
-+-------+
-      @InjectStateFlag( "visit") 
-      abstract public boolean isVisitCreated() ;
-
-      @InjectState( "visit")  
-      public abstract Visit getVisit() ;
-      
-      
-      public void authenticate (IRequestCycle cycle )
-      { 
-           if(isVisitCreated() )// that is to say, theres already an 
-				// object in place, so you don't have to worry 
-	   {	
-		User usr=getVisit().getUser();
-		if( usr!=null  && usr.isAdministrator())
-		{ 
-			// then do something meaningful  
-		}
-           }
-            
-      }
-+-------+
-
- 
-** For More
-
-  * {{{http://tapestry.apache.org/tapestry4.1/usersguide/state.html}The Tapestry User Guide regarding application state}}: all sorts of information is presented here. Skip to the  section discussing "Application State Objects"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tapestry/tapestry-archetype/src/site/apt/index.apt b/tapestry/tapestry-archetype/src/site/apt/index.apt
deleted file mode 100644
index 08466cc..0000000
--- a/tapestry/tapestry-archetype/src/site/apt/index.apt
+++ /dev/null
@@ -1,40 +0,0 @@
- ----
- Using the Tapestry 4.x Archetype
- ----
-
-Tapestry Archetype (For Tapestry 4)
-
-  An {{{http://maven.apache.org/plugins/maven-archetype-plugin/index.html}archetype}} is a Maven 2 form of a project template. You can create an empty shell of your project quickly.
-
-  What you should know: the latest and greatest Tapestry 5 is just around the corner. There's an excellent archetype for getting up and running with it
-  {{{http://tapestry.apache.org/tapestry5/tapestry-simple/}here}}. This archetype is inspired by that one.
-
-  This archetype creates a very simple application using Tapestry (the Dojo-enabled Tapestry versions.)
-
-  If you don't have Maven, you can get it {{{http://maven.apache.org}here}}. Install it and then invoke:
-  
-+---+
-mvn archetype:create -DarchetypeGroupId=org.apache.tapestry \
--DarchetypeArtifactId=tapestry-archetype \
--DarchetypeVersion=4.1.2-SNAPSHOT -DgroupId=org.example -DartifactId=myapp
-+---+
-
-  First, you must decide on your group id, artifact id, and version number. For example, let's choose <<org.example>> for our group id,
-  <<myapp>> for the artifactId, and <<1.0.0-SNAPSHOT>> for the version number.  We also need a root package name, which we'll create by combining the group id
-  and the artifact id.
-
-  <Again, the first time you do this, you'll see a large number of download messages.>
-
-  This should yeild a project in the directory in which you invoked the command that has all the fixings for experimenting with Tapestry. 
-
-  You may run the application by issuing <<<mvn jetty6:run>>>. Jetty will monitor your project directory and periodically reload the files (every 10 seconds, in this case).
-  We've also configured Tapestry to automatically reload the templates (typically, it caches the files. This setting won't affect the final .war you build, but is great for
-  development). Thus, you can modify any .script/.page/.jwc/.html file and expect an instantaneous result. If you modify and recompile a java class file, Jetty will reload
-  the context for you and you'll be up and running within 10 seconds.
-
-  You can now see your running application as {{{http://localhost:8080/myapp}http://localhost:8080/myapp}}.
-
-  You can hit Control-C to stop Jetty.
-
-  Maven also comes pre-packaged with plugins for getting up and running with your favorite IDE. Off the top of my head, I know that <<<mvn idea:idea>>> and
-  <<<mvn eclipse:eclipse>>> will do the <right thing> for you. You can open the project with your favorite editor, make your change and then reload!
diff --git a/tapestry/tapestry-archetype/src/site/apt/why.apt b/tapestry/tapestry-archetype/src/site/apt/why.apt
deleted file mode 100644
index a898d17..0000000
--- a/tapestry/tapestry-archetype/src/site/apt/why.apt
+++ /dev/null
@@ -1,15 +0,0 @@
- ----
- Why?
- ----
-
-What Will This Do For Me, Again?
-
-  You've aready read the gospel, you get it. You want to use a component framework and get up and running. Or, at least, you've heard enough to
-   want to give it a shot. Maybe there's something to this after all? Of course, you just want to try it out and build something. Tapestry's dead
-   simple with a little bit of experimentation, it feels like the framework you dreamed about. Nothing feels "cobbled" together. However, getting
-   an instance of it up and running and getting it to a point where everything is in its place is a different story! This is true of any sophisticated
-   web framework, but it's nonetheless an unacceptably high price to pay just to be able to experiment.
-
-  The application that this archetype creates isn't a full blown application, and you're free to modify/extend it as you see fit. The archetype comes
-  preloaded with examples of all the major "actors" in a Tapestry application  so you can actually see how a basic one works. Examine them, understand
-  how/why you might use certain pieces, and see them work in concert.
diff --git a/tapestry/tapestry-archetype/src/site/site.xml b/tapestry/tapestry-archetype/src/site/site.xml
deleted file mode 100644
index 71b90d5..0000000
--- a/tapestry/tapestry-archetype/src/site/site.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<project name="Apache Tapestry">
-    <bannerLeft>
-        <name>Tapestry</name>
-        <href>http://tapestry.apache.org/</href>
-        <src>images/tapestry_banner.gif</src>
-    </bannerLeft>
-    <bannerRight>
-        <name>Apache</name>
-        <href>http://www.apache.org</href>
-        <src>images/asf_logo_wide.gif</src>
-    </bannerRight>
-    <!-- <skin>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>maven-skin</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </skin>-->
-
-    <publishDate format="dd MMM yyyy"/>
-
-    <body>
-        <links>
-            <item name="Tapestry" href="http://tapestry.apache.org"/>
-            <item name="Apache" href="http://www.apache.org/"/>
-        </links>
-
-        <menu name="Usage">
-            
-            <item name="Introduction" href="index.html"/>
-            <item name="Why Use This Archetype" href="why.html"/>
-           <item name="About The Resultant Project" href="about_resultant_project.html"/>
-
-        </menu>
-        
-        ${reports}
-    </body>
-</project>
diff --git a/tapestry/tapestry-archetype/tapestry-archetype.iml b/tapestry/tapestry-archetype/tapestry-archetype.iml
deleted file mode 100644
index 22776f9..0000000
--- a/tapestry/tapestry-archetype/tapestry-archetype.iml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-<module relativePaths="false" type="JAVA_MODULE" version="4">
-  <!-- If it's a war project:
-  <component name="WebModuleProperties">
-    <containerElement type="module" name="${dep.artifactId}">
-      <attribute name="method" value="1" />
-      <attribute name="URI" value="/WEB-INF/classes" />
-    </containerElement>
-    <containerElement type="library" level="module" name="${dep.artifactId}">
-      <attribute name="method" value="1" />
-      <attribute name="URI" value="/WEB-INF/lib/${dep.systemPath.name}" />
-    </containerElement>
-    <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}/WEB-INF/web.xml" version="" />
-    <webroots>
-      <root url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}" relative="/" />
-    </webroots>
-  </component>
-  -->
-  <component name="ModuleRootManager" />
-  <component name="NewModuleRootManager" inherit-compiler-output="false">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <exclude-output />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntryProperties />
-  </component>
-</module>
-
diff --git a/tapestry/tapestry-checkstyle.xml b/tapestry/tapestry-checkstyle.xml
deleted file mode 100644
index 029fb26..0000000
--- a/tapestry/tapestry-checkstyle.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!--
-	This configuration file was written by the eclipse-cs plugin configuration editor
--->

-<!--
-Checkstyle-Configuration: tapestry
-Description:
-The core tapestry checkstyle configuration
--->

-<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">

-<module name="Checker">

-    <property name="severity" value="warning"/>

-    <module name="TreeWalker">

-        <module name="FileContentsHolder"/>

-        <module name="JavadocStyle"/>

-        <module name="ConstantName">

-            <property name="format" value="^[A-Z][A-Z0-9]|[a-z][a-z0-9]*(_[A-Z0-9]|[a-z0-9]+)*$"/>

-        </module>

-        <module name="LocalFinalVariableName"/>

-        <module name="LocalVariableName"/>

-        <module name="MemberName">

-            <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Normal naming, but allow either &quot;m_&quot; or &quot;_&quot; as a prefix."/>

-            <property name="format" value="^(m_|_)?[a-z][a-zA-Z0-9]*$"/>

-        </module>

-        <module name="MethodName"/>

-        <module name="PackageName">

-            <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>

-        </module>

-        <module name="ParameterName">

-            <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Either a normal name (w/o underscores) or an all uppercase acronym (rarely used)"/>

-            <property name="format" value="^([a-z][a-zA-Z0-9]*|[A-Z]+)$"/>

-        </module>

-        <module name="StaticVariableName">

-            <property name="format" value="^_?[a-z][a-zA-Z0-9]*$"/>

-        </module>

-        <module name="TypeName"/>

-        <module name="AvoidStarImport"/>

-        <module name="ImportOrder"/>

-        <module name="RedundantImport"/>

-        <module name="UnusedImports">

-            <property name="severity" value="ignore"/>

-        </module>

-        <module name="TabCharacter"/>

-        <module name="ModifierOrder"/>

-        <module name="RedundantModifier"/>

-        <module name="DefaultComesLast"/>

-        <module name="DeclarationOrder"/>

-        <module name="DoubleCheckedLocking">

-            <property name="severity" value="error"/>

-        </module>

-        <module name="EmptyStatement"/>

-        <module name="HiddenField"/>

-        <module name="JUnitTestCase"/>

-        <module name="MissingSwitchDefault">

-            <metadata name="com.atlassw.tools.eclipse.checkstyle.lastEnabledSeverity" value="error"/>

-            <property name="severity" value="ignore"/>

-        </module>

-        <module name="PackageDeclaration">

-            <property name="severity" value="error"/>

-        </module>

-        <module name="ParameterAssignment">

-            <property name="severity" value="info"/>

-        </module>

-        <module name="RedundantThrows"/>

-        <module name="SimplifyBooleanExpression">

-            <property name="severity" value="info"/>

-        </module>

-        <module name="SimplifyBooleanReturn">

-            <property name="severity" value="info"/>

-        </module>

-        <module name="StringLiteralEquality">

-            <property name="severity" value="error"/>

-        </module>

-        <module name="SuperClone">

-            <property name="severity" value="info"/>

-        </module>

-        <module name="SuperFinalize"/>

-        <module name="FinalClass"/>

-        <module name="HideUtilityClassConstructor"/>

-        <module name="InterfaceIsType"/>

-        <module name="MutableException"/>

-        <module name="ArrayTypeStyle"/>

-        <module name="UpperEll"/>

-        <module name="JavadocType">

-            <property name="excludeScope" value="private"/>

-            <property name="scope" value="public"/>

-        </module>

-        <module name="JavadocStyle"/>

-        <module name="WriteTag"/>

-    </module>

-    <module name="PackageHtml"/>

-    <module name="NewlineAtEndOfFile">

-        <property name="lineSeparator" value="lf"/>

-    </module>

-    <module name="SuppressionCommentFilter">

-        <metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="Enables ignoring checkstyle errors in sepecific blocks"/>

-    </module>

-</module>

diff --git a/tapestry/tapestry-contrib/pom.xml b/tapestry/tapestry-contrib/pom.xml
deleted file mode 100644
index bbcf71f..0000000
--- a/tapestry/tapestry-contrib/pom.xml
+++ /dev/null
@@ -1,193 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-contrib</artifactId>
-    <packaging>jar</packaging>
-    <version>4.1.3</version>
-    
-    <parent>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>tapestry-project</artifactId>
-        <version>4.1.3</version>
-    </parent>
-    <name>Contrib</name>
-    <inceptionYear>2006</inceptionYear>
-    
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-framework</artifactId>
-            <version>4.1.3</version>
-        </dependency>
-        <dependency>
-            <groupId>jboss</groupId>
-            <artifactId>jboss-j2ee</artifactId>
-            <version>4.0.2</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind-lib</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymockclassextension</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.9</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>5.1</version>
-            <classifier>jdk15</classifier>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-test</artifactId>
-        </dependency>
-    </dependencies>
-    
-    <build>
-        <sourceDirectory>src/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/descriptor/META-INF</directory>
-                <includes><include>**</include></includes>
-                <targetPath>META-INF</targetPath>
-            </resource>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*</include>
-                    <include>**/*.library</include>
-                    <include>**/*.page</include>
-                    <include>**/*.jwc</include>
-                </includes>
-                <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </resource>
-        </resources>
-        
-        <testSourceDirectory>src/test</testSourceDirectory>
-        <testResources>
-            <testResource>
-                <directory>src/test</directory>
-                <includes><include>**/*</include></includes>
-                 <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </testResource>
-        </testResources>
-        
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>2.1</version>
-                <configuration>
-                    <archive>
-                        <compress>true</compress>
-                        <index>true</index>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-source-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <version>1.1</version>
-                <inherited>true</inherited>
-                <executions>
-                    <execution>
-                        <phase>compile</phase>
-                        <configuration>
-                            <tasks>
-                                <ant antfile="../support/build.xml" inheritRefs="true">
-                                    <property name="target.dir" value="../target/site/tapestry-contrib" />
-                                    <target name="build"/>
-                                 </ant>
-                            </tasks>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>hivemind</groupId>
-                        <artifactId>hivemind</artifactId>
-                        <version>1.1.1</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>xerces</groupId>
-                        <artifactId>xercesImpl</artifactId>
-                        <version>2.6.2</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>commons-logging</groupId>
-                        <artifactId>commons-logging</artifactId>
-                        <version>1.0.4</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>log4j</groupId>
-                        <artifactId>log4j</artifactId>
-                        <version>1.2.13</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>oro</groupId>
-                        <artifactId>oro</artifactId>
-                        <version>2.0.8</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>ant</groupId>
-                        <artifactId>ant-xslp</artifactId>
-                        <version>1.6.5</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>ant</groupId>
-                        <artifactId>ant-trax</artifactId>
-                        <version>1.6.5</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-        </plugins>
-    </build>
-    
-    <reporting>
-        <outputDirectory>../target/site/tapestry-contrib</outputDirectory>
-        <excludeDefaults>true</excludeDefaults>
-    </reporting>
-
-</project>
diff --git a/tapestry/tapestry-contrib/src/descriptor/META-INF/hivemodule.xml b/tapestry/tapestry-contrib/src/descriptor/META-INF/hivemodule.xml
deleted file mode 100644
index f821da2..0000000
--- a/tapestry/tapestry-contrib/src/descriptor/META-INF/hivemodule.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.contrib" version="4.0.0">
-
-    Support for the components and pages of the Tapestry contributions library.
-
-
-    <service-point id="TableColumnModelSource" interface="org.apache.tapestry.contrib.table.components.TableColumnModelSource">
-
-        Generates table column models from a string description.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.contrib.table.components.TableColumnModelSourceImpl">
-                <set-service property="expressionEvaluator" service-id="tapestry.ognl.ExpressionEvaluator"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-
-    <service-point id="TableColumnSource" interface="org.apache.tapestry.contrib.table.model.IAdvancedTableColumnSource">
-
-        Generates a table column object given several parameters.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.contrib.table.components.DefaultTableColumnSource">
-                <set-service property="expressionEvaluator" service-id="tapestry.ognl.ExpressionEvaluator"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-
-    <contribution configuration-id="tapestry.services.ApplicationServices">
-        <service name="xtile" object="service:XTileService"/>
-    </contribution>
-
-    <service-point id="XTileService" interface="org.apache.tapestry.engine.IEngineService">
-        <invoke-factory>
-            <construct class="org.apache.tapestry.contrib.ajax.XTileService">
-                <set-object property="exceptionReporter" value="infrastructure:requestExceptionReporter"/>
-                <set-object property="response" value="infrastructure:response"/>
-                <set-object property="linkFactory" value="infrastructure:linkFactory"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="RoundedCornerService" interface="org.apache.tapestry.engine.IEngineService">
-        <invoke-factory>
-            <construct class="org.apache.tapestry.contrib.services.impl.RoundedCornerService"
-                    initialize-method="initialize">
-                <set-object property="exceptionReporter" value="infrastructure:requestExceptionReporter"/>
-                <set-object property="response" value="infrastructure:response"/>
-                <set-object property="linkFactory" value="infrastructure:linkFactory"/>
-                <set-object property="request" value="infrastructure:request" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="tapestry.services.ApplicationServices">
-        <service name="rounded" object="service:RoundedCornerService"/>
-    </contribution>
-
-</module>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/Contrib.library b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/Contrib.library
deleted file mode 100644
index 433c537..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/Contrib.library
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
-	
-<library-specification>
-
-  <meta key="org.apache.tapestry.component-class-packages" value="org.apache.tapestry.contrib.components"/>
-
-  <component-type type="InspectorButton" specification-path="inspector/InspectorButton.jwc"/>
-  <page name="Inspector" specification-path="inspector/Inspector.page"/>
-  <library id="inspector" specification-path="inspector/Inspector.library"/>
-  <component-type type="Choose" specification-path="components/Choose.jwc"/>
-  <component-type type="When" specification-path="components/When.jwc"/>
-  <component-type type="DumpObject" specification-path="components/DumpObject.jwc"/>
-  <component-type type="Otherwise" specification-path="components/Otherwise.jwc"/>
-  <component-type type="Palette" specification-path="palette/Palette.jwc"/>
-  <component-type type="MultiplePropertySelection" specification-path="form/MultiplePropertySelection.jwc"/>
-  <component-type type="DateField" specification-path="valid/DateField.jwc"/>
-  <component-type type="MaskEdit" specification-path="form/MaskEdit.jwc"/>
-  <component-type type="NumericField" specification-path="valid/NumericField.jwc"/>
-  <component-type type="ValidatingTextField" specification-path="valid/ValidatingTextField.jwc"/>
-  <component-type type="FormConditional" specification-path="form/FormConditional.jwc"/>
-  
-  <component-type type="Table" specification-path="table/components/Table.jwc"/>
-  <component-type type="TableColumns" specification-path="table/components/TableColumns.jwc"/>
-  <component-type type="TablePages" specification-path="table/components/TablePages.jwc"/>
-  <component-type type="TableRows" specification-path="table/components/TableRows.jwc"/>
-  <component-type type="TableValues" specification-path="table/components/TableValues.jwc"/>
-  <component-type type="TableView" specification-path="table/components/TableView.jwc"/>
-  <component-type type="FormTable" specification-path="table/components/FormTable.jwc"/>
-  <component-type type="TableFormRows" specification-path="table/components/TableFormRows.jwc"/>
-  <component-type type="TableFormPages" specification-path="table/components/TableFormPages.jwc"/>
-  <page name="SimpleTableColumnPage" specification-path="table/components/inserted/SimpleTableColumnPage.page"/>
-  <component-type type="SimpleTableColumnComponent" 
-    specification-path="table/components/inserted/SimpleTableColumnComponent.jwc"/>
-  <component-type type="SimpleTableColumnFormComponent" 
-    specification-path="table/components/inserted/SimpleTableColumnFormComponent.jwc"/>
-  <component-type type="ColumnSortLink" 
-    specification-path="table/components/inserted/SimpleTableColumnSortLink.jwc"/>
-  <component-type type="ColumnSortImage" 
-    specification-path="table/components/inserted/SimpleTableColumnSortImage.jwc"/>    
-    
-  <component-type type="Tree" specification-path="tree/components/Tree.jwc"/>
-  <component-type type="TreeDataView" specification-path="tree/components/TreeDataView.jwc"/>
-  <component-type type="TreeNodeView" specification-path="tree/components/TreeNodeView.jwc"/>
-  <component-type type="TreeView" specification-path="tree/components/TreeView.jwc"/>
-  <component-type type="TreeTableDataView" specification-path="tree/components/table/TreeTableDataView.jwc"/>
-  <component-type type="TreeTable" specification-path="tree/components/table/TreeTable.jwc"/>
-  <component-type type="TreeTableNodeViewDelegator" 
-    specification-path="tree/components/table/TreeTableNodeViewDelegator.jwc"/>
-  <page name="TreeNodeViewPage" specification-path="tree/components/TreeNodeViewPage.page"/>
-  <page name="TreeTableNodeViewPage" specification-path="tree/components/table/TreeTableNodeViewPage.page"/>
-  
-  <component-type type="CheckboxGroup" specification-path="form/checkboxes/CheckboxGroup.jwc"/>
-  <component-type type="ControlCheckbox" specification-path="form/checkboxes/ControlCheckbox.jwc"/>
-  <component-type type="ControlledCheckbox" specification-path="form/checkboxes/ControlledCheckbox.jwc"/>
-  <component-type type="XTile" specification-path="ajax/XTile.jwc"/>
-  <component-type type="Timeout" specification-path="ajax/Timeout.jwc"/>
-  <component-type type="AjaxStatus" specification-path="ajax/AjaxStatus.jwc"/>
-</library-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/AjaxStatus.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/AjaxStatus.java
deleted file mode 100644
index e783d20..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/AjaxStatus.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2007 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.contrib.ajax;

-

-import java.util.HashMap;

-import java.util.Map;

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.IScript;

-import org.apache.tapestry.PageRenderSupport;

-import org.apache.tapestry.TapestryUtils;

-import org.apache.tapestry.components.Any;

-

-/**

- * @since 4.1.2

- */

-public abstract class AjaxStatus extends Any

-{

-    public abstract IScript getScript();

-    

-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)

-    {

-        // render as if an Any component

-        super.renderComponent(writer, cycle);

-        // then add the script

-        if(!cycle.isRewinding()) {

-            PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, this);

-            Map symbols = new HashMap();

-            symbols.put("id", getClientId());

-            getScript().execute(this, cycle, pageRenderSupport, symbols);

-        }

-    }

-}

diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/AjaxStatus.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/AjaxStatus.jwc
deleted file mode 100644
index 65fe141..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/AjaxStatus.jwc
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2007 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE component-specification PUBLIC "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-    "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
-<component-specification class="org.apache.tapestry.contrib.ajax.AjaxStatus">
-    <description>
-        An extension of the Any component that defines an html node that will be shown 
-        when ajax requests are in progress, and hidden when those requests end.
-    </description>
-    
-    <parameter name="element" default-value="ognl:templateTagName" >
-        <description>
-        The element to emulate.
-        </description>
-    </parameter>    
-    
-    <inject property="script" type="script" object="AjaxStatus.script"/>    
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/AjaxStatus.script b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/AjaxStatus.script
deleted file mode 100644
index 8553dfe..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/AjaxStatus.script
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-
-<script>
-    <input-symbol key="id" required="yes" />
-    <body>
-        <unique>
-            dojo.require("tapestry.fx");
-        </unique>
-    </body>
-    <initialization>
-if(tapestry.fx) tapestry.fx.attachAjaxStatus("${id}");
-    </initialization>
-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/IXTile.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/IXTile.java
deleted file mode 100644
index 3b1ef35..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/IXTile.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ajax;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * @author mindbridge
- * @since 4.0
- */
-public interface IXTile
-{
-
-    void trigger(IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.html
deleted file mode 100644
index d3bd643..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<span jwcid="@If" condition="ognl:inSession">
-<span jwcid="script"/><span jwcid="@XTile" listener="ognl:listeners.renewSession" 
-	sendName="TimeoutRenewSession" receiveName="TimeoutSessionRenewed" disableCaching="true"/>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.java
deleted file mode 100644
index d7e42b2..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ajax;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-
-/**
- * @author mb
- * @since 4.0
- */
-public abstract class Timeout extends BaseComponent
-{
-
-    public abstract int getWarningTime();
-
-    public abstract int getAutoProlongTime();
-
-    public abstract String getWarningMessage();
-
-    public abstract String getExpirationMessage();
-
-    public abstract boolean getDisableWarning();
-
-    public abstract boolean getDisableAutoProlong();
-
-    public abstract String getExpirationFunction();
-
-    public abstract WebRequest getRequest();
-    
-    protected WebSession getSession()
-    {
-        return getRequest().getSession(true);
-    }
-    
-    protected int getSessionTime()
-    {
-        return getSession().getMaxInactiveInterval();
-    }
-    
-    public boolean isInSession()
-    {
-        return getRequest().getSession(false) != null;
-    }
-
-    public Map getScriptSymbols()
-    {
-        int nSessionTime = getSessionTime();
-        int nTimeToMessage = nSessionTime - getWarningTime();
-        if (nTimeToMessage < 0) nTimeToMessage = 0;
-        int nRemainingTime = nSessionTime - nTimeToMessage;
-        int nAutoProlongTime = nSessionTime - getAutoProlongTime();
-        
-        Map mapSymbols = new HashMap();
-        mapSymbols.put("confirmTimeout", new Integer(nTimeToMessage * 1000));
-        mapSymbols.put("expirationTimeout", new Integer(nRemainingTime * 1000));
-        mapSymbols.put("prolongSessionPeriod", new Integer(
-                nAutoProlongTime * 1000));
-        mapSymbols.put("confirmMessage", getWarningMessage());
-        mapSymbols.put("expirationMessage", getExpirationMessage());
-        mapSymbols.put("disableWarning", new Boolean(getDisableWarning()));
-        mapSymbols.put("disableAutoProlong", new Boolean(
-                getDisableAutoProlong()));
-        mapSymbols.put("expirationFunction", getExpirationFunction());
-        return mapSymbols;
-    }
-
-    public void renewSession(IRequestCycle cycle)
-    {
-        // calling this method via the XTile service will automatically renew
-        // the session
-        // System.out.println("Prolonging session...");
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.jwc
deleted file mode 100644
index 6dd67f6..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.jwc
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.ajax.Timeout"
-    allow-body="no" allow-informal-parameters="no">
-    
-    <description>
-        Displays a message to the user when a certain amount of time remains
-        to the expiration of the session.
-    </description>
-    
-    <parameter name="warningTime" default-value="300">
-        <description>
-            The number of seconds before session expiration when a warning message will appear.
-        </description>
-    </parameter>
-    
-    <parameter name="autoProlongTime" default-value="900">
-        <description>
-            The number of seconds before session expiration when the session 
-            will be automatically prolonged upon user activity.
-        </description>
-    </parameter>
-    
-    <parameter name="warningMessage" default-value="message:warning">
-        <description>
-            The warning message that will appear when the session is about to exipre.
-            Here {0} is replaced by the number of minutes that remain until expiration and 
-            {1} is replaced with the time when the expiration will occur.
-        </description>
-    </parameter>
-    
-    <parameter name="expirationMessage" default-value="'Your session has expired. Please log in again.'">
-        <description>
-            The message that will appear when the session exipres and
-            the user needs to log in again.
-        </description>
-    </parameter>
-
-    <parameter name="disableWarning" default-value="false">
-        <description>
-            Do not display a warning message after 'warningTime' seconds.
-        </description>
-    </parameter>
-
-    <parameter name="disableAutoProlong" default-value="false">
-        <description>
-            Disable the automatic prolonging of a session after 'autoProlongTime' seconds
-            upon user activity.
-        </description>
-    </parameter>
-    
-    <parameter name="expirationFunction" default-value="null">
-        <description>
-            The JavaScript function that will be invoked when the session expires.
-        </description>
-    </parameter>
-
-        
-    <component id="script" type="Script">
-        <binding name="script" value="literal:/org/apache/tapestry/contrib/ajax/Timeout.script"/>
-        <binding name="symbols" value="scriptSymbols"/>
-    </component>
-    
-    <inject object="service:tapestry.globals.WebRequest" property="request"/>
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.properties b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.properties
deleted file mode 100644
index d692386..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-warning=The connection was inactive for more than {0} minutes. Your session will expire at {1}.\\n Please click OK to continue your work or CANCEL to close the session.
-expiration=Your session has expired. Please log in again.
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.script b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.script
deleted file mode 100644
index 7e4e94c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/Timeout.script
+++ /dev/null
@@ -1,151 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-<script>
-	<input-symbol key="confirmTimeout" />
-	<input-symbol key="expirationTimeout" />
-	<input-symbol key="prolongSessionPeriod" />
-
-	<input-symbol key="confirmMessage" />
-	<input-symbol key="expirationMessage" />
-
-	<input-symbol key="disableWarning" />
-	<input-symbol key="disableAutoProlong" />
-	
-	<input-symbol key="expirationFunction" />
-
-	<body>
-    tapestry.TimeoutTimerConfirm=function(){};
-    tapestry.TimeoutProlongSessionTime=function(){};
-    tapestry.TimeoutExpirationTime=function(){};
-    
-    <if expression="!disableWarning">
-    tapestry.TimeoutConfirm=function()
-    {
-    	tapestry.TimeoutClearConfirmTimer();
-    
-    	var exp = new Date();
-    	exp.setTime(exp.getTime() + ${expirationTimeout});
-	    var hrs = exp.getHours();
-    	var min = exp.getMinutes();
-    	if (min &lt; 10)
-            mins = "0" + min;
-        else
-            mins = min;
-    
-    	var confirmMessage = "${confirmMessage}";
-    	confirmMessage = confirmMessage.replace("{0}", Math.round(${confirmTimeout}/60000));
-    	confirmMessage = confirmMessage.replace("{1}", hrs + ":" + mins);
-
-    	var val = confirm(confirmMessage);
-        if (!val) {
-		    <if expression="expirationFunction != null">
-		    ${expirationFunction}();
-		    </if>
-        	return;
-        }
-       
-        var current = new Date();
-        if (current.getTime() &gt; exp.getTime()) {
-            alert("${expirationMessage}");
-		    <if expression="expirationFunction != null">
-		    ${expirationFunction}();
-		    </if>
-        }
-        else {
-    		tapestry.TimeoutProlongSession();
-        }
-    }
-    </if>
-    tapestry.TimeoutProlongSession=function()
-    {
-	    tapestry.TimeoutUpdateProlongSessionTime();
-		TimeoutRenewSession();
-    }
-    
-    TimeoutSessionRenewed=function()
-    {
-    	tapestry.TimeoutClearConfirmTimer();
-    	tapestry.TimeoutInitConfirmTimer();
-    }
-    
-    tapestry.TimeoutClearConfirmTimer=function()
-    {
-    	window.clearTimeout(tapestry.TimeoutTimerConfirm);
-    }
-    
-    tapestry.TimeoutInitConfirmTimer=function()
-    {
-	    <if expression="!disableWarning">
-    	tapestry.TimeoutTimerConfirm = window.setTimeout("tapestry.TimeoutConfirm()", ${confirmTimeout});
-    	</if>
-
-    	tapestry.TimeoutExpirationTime = new Date();
-    	tapestry.TimeoutExpirationTime.setTime(tapestry.TimeoutExpirationTime.getTime() + ${confirmTimeout} + ${expirationTimeout});
-
-		tapestry.TimeoutUpdateProlongSessionTime();
-    }
-    
-    tapestry.TimeoutUpdateProlongSessionTime=function()
-    {
-    	tapestry.TimeoutProlongSessionTime = new Date();
-    	tapestry.TimeoutProlongSessionTime.setTime(tapestry.TimeoutProlongSessionTime.getTime() + ${prolongSessionPeriod});
-    }
-
-    <if expression="!disableAutoProlong">
-    tapestry.TimeoutInitChangeObserver=function()
-    {
-        dojo.event.connect(document.body, "onclick", tapestry, "TimeoutHandleOnClick");
-        dojo.event.connect(document.body, "onmousemove", tapestry, "TimeoutHandleOnMouseMove");
-        dojo.event.connect(document.body, "onkeydown", tapestry, "TimeoutHandleOnKeyPress");
-        dojo.event.connect(window, "onscroll", tapestry, "TimeoutHandleOnScroll");
-    }
-    
-    tapestry.TimeoutHandleOnClick=function() {
-    	tapestry.TimeoutRegisterUserAction();
-    }
-    
-    tapestry.TimeoutHandleOnMouseMove=function() {
-    	tapestry.TimeoutRegisterUserAction();
-    }
-    
-    tapestry.TimeoutHandleOnKeyPress=function() {
-    	tapestry.TimeoutRegisterUserAction();
-    }
-    
-    tapestry.TimeoutHandleOnScroll=function() {
-    	tapestry.TimeoutRegisterUserAction();
-    }
-    
-    tapestry.TimeoutRegisterUserAction=function()
-    {
-    	var now = new Date();
-    	if (now.getTime() &gt; tapestry.TimeoutProlongSessionTime.getTime() &amp;&amp;
-    		now.getTime() &lt; tapestry.TimeoutExpirationTime.getTime())
-    		tapestry.TimeoutProlongSession();
-        return true;
-    }
-    </if>
-    <if expression="!disableAutoProlong">
-    tapestry.TimeoutInitChangeObserver();
-    </if>
-    tapestry.TimeoutInitConfirmTimer();
-	</body>
-</script>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.html
deleted file mode 100644
index 4e652c7..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.html
+++ /dev/null
@@ -1 +0,0 @@
-<span jwcid="script"/>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.java
deleted file mode 100644
index 2b825d2..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ajax;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * @author mindbridge
- * @author Paul Green
- * @since 4.0
- */
-public abstract class XTile extends BaseComponent implements IXTile
-{
-    public abstract IActionListener getListener();
-
-    public abstract String getSendName();
-
-    public abstract String getReceiveName();
-
-    public abstract String getErrorName();
-
-    public abstract boolean getDisableCaching();
-
-    // Injected
-
-    public abstract IEngineService getService();
-
-    public void trigger(IRequestCycle cycle)
-    {
-        IActionListener listener = getListener();
-
-        if (listener == null)
-            listener = getContainer().getListeners().getImplicitListener(this);
-
-        listener.actionTriggered(this, cycle);
-    }
-
-    public Map getScriptSymbols()
-    {
-        ILink link = getService().getLink(false, this);
-
-        Map result = new HashMap();
-
-        result.put("sendFunctionName", getSendName());
-        result.put("receiveFunctionName", getReceiveName());
-        result.put("errorFunctionName", getErrorName());
-        result.put("disableCaching", getDisableCaching() ? "true" : null);
-        result.put("url", link.getURL());
-
-        return result;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.jwc
deleted file mode 100644
index 2828c91..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.jwc
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.ajax.XTile"
-    allow-body="no" allow-informal-parameters="no">
-    
-    <description>
-        A component providing the required JavaScript to pass some information to the server
-        and receive its response without reloading the page (Ajax)
-    </description>
-    
-    <parameter name="listener">
-        <description>
-            The listener that will be invoked when the Javascript function with the given name is invoked.
-            Any parameters passed to the send function will be available from cycle.getServiceParameters(). 
-            In addition, the listener can perform cycle.setServiceParameters() to pass an array of
-            strings to the JavaScript receive function. If the listener is not provided, Tapestry will
-	        attempt to find a listener with the capitalized id of the component, prefixed by "do". For
-	        example, jwcid="clear@XTile" would have a listener called doClear().
-        </description>
-    </parameter>
-    
-    <parameter name="sendName" required="yes">
-        <description>
-            The name of the JavaScript function that the script will define to allow the application
-            to send information to the server.
-        </description>
-    </parameter>
-    
-    <parameter name="receiveName" required="yes">
-        <description>
-            The name of the JavaScript function that the script will call to allow the application
-            to receive information from the server some time after the send function has been invoked.
-        </description>
-    </parameter>
-    
-    <parameter name="errorName" default-value="null">
-        <description>
-            The name of the JavaScript function that the script will call to indicate that
-            an error has occurred while sending the information to the server.
-        </description>
-    </parameter>
-    
-    <parameter name="disableCaching" default-value="false">
-        <description>
-            Some browsers cache repeated requests that have identical URLs.
-            Pass 'true' to this parameter to disable caching by making the URLs unique.
-        </description>
-    </parameter>
-    
-    <component id="script" type="Script">
-        <binding name="script" value="'/org/apache/tapestry/contrib/ajax/XTile.script'"/>
-        <binding name="symbols" value="scriptSymbols"/>
-    </component>
-
-    <inject property="service" object="engine-service:xtile"/>
-        
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.script b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.script
deleted file mode 100644
index 043172a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.script
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-<script>
-	<input-symbol key="url" class="java.lang.String"/>
-	<input-symbol key="sendFunctionName" class="java.lang.String"/>
-	<input-symbol key="receiveFunctionName" class="java.lang.String"/>
-	<input-symbol key="errorFunctionName" class="java.lang.String"/>
-	<input-symbol key="disableCaching" class="java.lang.String"/>
-
-
-	<body>
-	function ${sendFunctionName}() 
-	{
-		var requestObject = getRequest();
-		if (!requestObject) {
-			<if expression="errorFunctionName != null">
-			${errorFunctionName}();
-			</if>
-			return;
-		}
-		
-	    var url = "${url}";
-	    var arguments = ${sendFunctionName}.arguments;
-	    var argumentCount = arguments.length;
-	    for (i = 0; i &lt; argumentCount; i++) {
-	    	url = url + "&amp;sp=" + encodeURI(arguments[i]);
-	    }
-	    
-	    <if expression="disableCaching != null">
-	    url = url + "&amp;rand=" + Math.random();
-	    </if>
-	
-		requestObject.onreadystatechange = function() {
-  			if (requestObject.readyState == 4) {
-  				if (requestObject.status == 200) {
-  					var data = extractData(requestObject);
-  					${receiveFunctionName}(data);
-  				}
-  				<if expression="errorFunctionName != null">
-  				else
-  					${errorFunctionName}(requestObject);
-  				</if>
-			}
-		}
-		
-	    requestObject.open("GET", url, true);
-	    requestObject.send(null);
-	}
-	<unique>
-	<![CDATA[
-	function getRequest()
-	{
-		var xmlhttp=false;
-		/*@cc_on @*/
-		/*@if (@_jscript_version >= 5)
-		 try {
-		  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
-		 } catch (e) {
-		  try {
-		   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
-		  } catch (E) {
-		   xmlhttp = false;
-		  }
-		 }
-		@end @*/
-		if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
-		  xmlhttp = new XMLHttpRequest();
-		}
-		return xmlhttp;
-	}
-	
-	function extractData(response)
-	{
-		var xml = response.responseXML.documentElement;
-		var dataList = new Array();
-		if (xml) dataList = xml.getElementsByTagName('sp');
-		var dataLen = dataList.length;
-		var data = new Array();
-		for (i = 0; i < dataLen; i++) {
-			var child = dataList[i].firstChild;
-			if (child)
-				data[i] = child.data;
-			else
-				data[i] = "";
-		}
-		return data;
-	}
-	]]>
-	</unique>
-	</body>
-</script>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTileService.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTileService.java
deleted file mode 100644
index f915971..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/XTileService.java
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ajax;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.error.RequestExceptionReporter;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.web.WebResponse;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-
-/**
- * @author mindbridge
- * @author Paul Green
- * @since 4.0
- */
-public class XTileService implements IEngineService
-{
-    public static final String SERVICE_NAME = "xtile";
-
-    private RequestExceptionReporter _exceptionReporter;
-
-    private WebResponse _response;
-
-    private LinkFactory _linkFactory;
-
-    public String getName()
-    {
-        return SERVICE_NAME;
-    }
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        Defense.isAssignable(parameter, IComponent.class, "parameter");
-
-        IComponent component = (IComponent) parameter;
-
-        Map parameters = new HashMap();
-        parameters.put(ServiceConstants.PAGE, component.getPage().getPageName());
-        parameters.put(ServiceConstants.COMPONENT, component.getIdPath());
-
-        return _linkFactory.constructLink(this, false, parameters, false);
-    }
-
-    public void service(IRequestCycle cycle) throws IOException
-    {
-        String pageName = cycle.getParameter(ServiceConstants.PAGE);
-        String componentId = cycle.getParameter(ServiceConstants.COMPONENT);
-
-        IPage componentPage = cycle.getPage(pageName);
-        IComponent component = componentPage.getNestedComponent(componentId);
-
-        if (!(component instanceof IXTile))
-            throw new ApplicationRuntimeException("Incorrect component type: was "
-                    + component.getClass() + " but must be " + IXTile.class, component, null, null);
-
-        IXTile xtile = (IXTile) component;
-
-        String[] params = cycle.getParameters(ServiceConstants.PARAMETER);
-        cycle.setListenerParameters(params);
-
-        xtile.trigger(cycle);
-
-        // do not squeeze on output either
-        Object[] args = cycle.getListenerParameters();
-        String strArgs = generateOutputString(args);
-        if (strArgs != null)
-        {
-            OutputStream output = _response.getOutputStream(new ContentType("text/xml"));
-            output.write(strArgs.getBytes("utf-8"));
-        }
-    }
-
-    protected String generateOutputString(Object[] args)
-    {
-        try
-        {
-            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-            dbf.setValidating(false);
-            DocumentBuilder db = dbf.newDocumentBuilder();
-            Document doc = db.newDocument();
-
-            Node rootNode = doc.createElement("data");
-            doc.appendChild(rootNode);
-
-            if (args != null)
-            {
-                for (int i = 0; i < args.length; i++)
-                {
-                    Object value = args[i];
-
-                    Node spNode = doc.createElement("sp");
-                    rootNode.appendChild(spNode);
-
-                    Node valueNode = doc.createTextNode(value.toString());
-                    spNode.appendChild(valueNode);
-                }
-            }
-
-            TransformerFactory trf = TransformerFactory.newInstance();
-            Transformer tr = trf.newTransformer();
-            tr.setOutputProperty(OutputKeys.INDENT, "yes");
-
-            DOMSource domSrc = new DOMSource(doc);
-            StringWriter writer = new StringWriter();
-            StreamResult res = new StreamResult(writer);
-            tr.transform(domSrc, res);
-            writer.close();
-
-            return writer.toString();
-        }
-        catch (Exception e)
-        {
-            _exceptionReporter.reportRequestException("Cannot generate XML", e);
-            return null;
-        }
-    }
-
-    public void setExceptionReporter(RequestExceptionReporter exceptionReporter)
-    {
-        _exceptionReporter = exceptionReporter;
-    }
-
-    public void setResponse(WebResponse response)
-    {
-        _response = response;
-    }
-
-    public static void main(String[] args)
-    {
-        XTileService objService = new XTileService();
-        System.out.println(objService.generateOutputString(new Object[]
-        { "test > work", new Integer(20) }));
-    }
-
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/package.html
deleted file mode 100644
index 4e37685..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ajax/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Ajax related contributions, things like Timeout and XTile allow a lot of
-common ajax functionality to be easily used. 
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/Choose.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/Choose.java
deleted file mode 100644
index 37ab828..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/Choose.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.components;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.Conditional;
-
-/**
- * This component is a container for {@link When} or Otherwise components; it
- * provides the context for mutually exclusive conditional evaluation. [<a
- * href="../../../../../../ComponentReference/contrib.Choose.html">Component
- * Reference</a>]
- * 
- * @author David Solis
- */
-public abstract class Choose extends Conditional
-{
-
-    public void addBody(IRender element)
-    {
-        super.addBody(element);
-        if (element instanceof When) ((When) element).setChoose(this);
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        setConditionMet(false);
-        super.cleanupAfterRender(cycle);
-    }
-
-    protected boolean evaluateCondition()
-    {
-        return getCondition();
-    }
-
-    public boolean getInvert()
-    {
-        // This component doesn't require invert parameter.
-        return false;
-    }
-
-    public abstract boolean getCondition();
-
-    public abstract boolean isConditionMet();
-
-    public abstract void setConditionMet(boolean value);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/Choose.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/Choose.jwc
deleted file mode 100644
index 5ac9a17..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/Choose.jwc
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.components.Choose">
-
-  <description>
-  Provides the context for mutually exclusive conditional evaluation.
-  </description>
-
-  <parameter name="condition" type="boolean" direction="in" default-value="true">
-    <description>
-    The condition to evaluate.
-    </description>
-  </parameter>
-
-  <parameter name="element" type="java.lang.String" direction="in">
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-
-  <reserved-parameter name="invert"/>
-  
-  <property-specification name="conditionMet" type="boolean" initial-value="false"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/DumpObject.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/DumpObject.java
deleted file mode 100644
index bf2585d..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/DumpObject.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.contrib.components;

-

-import java.io.BufferedOutputStream;

-import java.io.CharArrayWriter;

-import java.io.ObjectOutputStream;

-

-import org.apache.tapestry.AbstractComponent;

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.util.io.BinaryDumpOutputStream;

-

-/**

- * Used to dump out an object's serialized representation in a mix of hex and ascii. The output is

- * formatted for a fixed width font, typically should be enclosed in &lt;pre&gt; tags.

- * 

- * @see org.apache.tapestry.util.io.BinaryDumpOutputStream

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-

-public abstract class DumpObject extends AbstractComponent

-{

-    // Parameters:

-

-    public abstract Object getObject();

-

-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)

-    {

-        if (cycle.isRewinding())

-            return;

-

-        String asText = convert(getObject());

-

-        writer.print(asText);

-    }

-

-    String convert(Object object)

-    {

-        try

-        {

-            CharArrayWriter writer = new CharArrayWriter();

-            BinaryDumpOutputStream bdos = new BinaryDumpOutputStream(writer);

-            ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(bdos));

-

-            oos.writeObject(object);

-

-            oos.close();

-

-            return writer.toString();

-        }

-        catch (Exception ex)

-        {

-            return ex.toString();

-        }

-    }

-}

diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/DumpObject.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/DumpObject.jwc
deleted file mode 100644
index e0c4c33..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/DumpObject.jwc
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE component-specification PUBLIC 

-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 

-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">

-

-<component-specification allow-body="no" allow-informal-parameters="yes">

-

-  <description>

-    Dumps out an object's serialized representation in a mix of hex and ascii.

-  </description> 

-  

-  <parameter name="object" required="true">

-    <description>

-      The object to be displayed as HTML.

-    </description>

-  </parameter>

- 

-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/Otherwise.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/Otherwise.jwc
deleted file mode 100644
index 9b4f215..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/Otherwise.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.components.When">
-  <description>
-  Otherwise is just a When component that always tries to render its body and/or emulate an element 
-  and its attributes (if element is specified) .
-  </description>
-  
-  <parameter name="element" type="java.lang.String" direction="in">
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-
-  <reserved-parameter name="condition"/>
-
-  <reserved-parameter name="invert"/>
-
-  <property-specification name="condition" type="boolean" initial-value="true"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/When.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/When.java
deleted file mode 100644
index 2e5278f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/When.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.components;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.components.Conditional;
-
-/**
- *  Represents an alternative whithin a {@link Choose} component. 
- *  The default alternative is described by the Otherwise component.
- *
- *  [<a href="../../../../../../ComponentReference/contrib.When.html">Component Reference</a>]
- *
- *  @author David Solis
- * 
- **/
-public abstract class When extends Conditional
-{
-    /** Parent of this component. */
-
-    private Choose _choose;
-
-    /**
-     *  Renders its wrapped components only if the condition is true and its parent {@link Choose}
-     *  allows it. In addition, if element is specified, can emulate that HTML element.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Choose choose = getChoose();
-
-        if (choose == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("When.must-be-contained-by-choose"),
-                this,
-                null,
-                null);
-
-        if (!choose.isConditionMet() && getCondition())
-        {
-            choose.setConditionMet(true);
-            super.renderComponent(writer, cycle);
-        }
-    }
-
-    protected boolean evaluateCondition()
-    {
-        return true;
-    }
-
-    public boolean getInvert()
-    {
-        // This component doesn't require invert parameter.
-        return false;
-    }
-
-    /**
-     *  @return Choose
-     */
-    public Choose getChoose()
-    {
-        return _choose;
-    }
-
-    /**
-     *  Sets the choose.
-     *  @param value The choose to set
-     */
-    public void setChoose(Choose value)
-    {
-        _choose = value;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/When.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/When.jwc
deleted file mode 100644
index f482ca6..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/When.jwc
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.components.When">
-  <description>
-  If this is the first When component to evaluate to true within Choose then emulates an element 
-  and its attributes (if element is specified) and/or includes a block of content.
-  </description>
-  
-  <parameter name="condition" type="boolean" direction="in">
-    <description>
-    The condition to evaluate.
-    </description>
-  </parameter>
-  
-  <parameter name="element" type="java.lang.String" direction="in">
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-
-  <reserved-parameter name="invert"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/package.html
deleted file mode 100644
index 764d229..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/components/package.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Contribution of foundational components.
-
-@author David Solis <a href="mailto:dsolis@apache.org">dsolis@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XCreateException.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XCreateException.java
deleted file mode 100644
index 876d568..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XCreateException.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ejb;
-
-import javax.ejb.CreateException;
-
-
-/**
- *  Extended version of {@link CreateException} that includes a root cause.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public class XCreateException extends CreateException
-{
-    private static final long serialVersionUID = 6807032467099102587L;
-    
-    private final Throwable _rootCause;
-
-    public XCreateException(String message)
-    {
-        super(message);
-        _rootCause = null;
-    }
-
-    public XCreateException(String message, Throwable rootCause)
-    {
-        super(message);
-
-        this._rootCause = rootCause;
-    }
-
-    public XCreateException(Throwable rootCause)
-    {
-        super(rootCause.getMessage());
-
-        this._rootCause = rootCause;
-    }
-
-    public Throwable getRootCause()
-    {
-        return _rootCause;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XEJBException.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XEJBException.java
deleted file mode 100644
index 4773e47..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XEJBException.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ejb;
-
-import javax.ejb.EJBException;
-
-/**
- *  Extended version of {@link EJBException} that includes a root cause.
- *  {@link EJBException} doesn't have quite the right constructor for this ...
- *  it has an equivalent to the rootCause property, (causedByException), but
- *  doesn't have a constructor that allows us to set a custom message.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public class XEJBException extends EJBException
-{
-    private static final long serialVersionUID = 3712108893575174833L;
-    
-    private final Throwable _rootCause;
-
-    public XEJBException(String message)
-    {
-        super(message);
-        _rootCause = null;
-    }
-
-    public XEJBException(String message, Throwable rootCause)
-    {
-        super(message);
-
-        this._rootCause = rootCause;
-    }
-
-    public XEJBException(Throwable rootCause)
-    {
-        super(rootCause.getMessage());
-
-        this._rootCause = rootCause;
-    }
-
-    public Throwable getRootCause()
-    {
-        return _rootCause;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XFinderException.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XFinderException.java
deleted file mode 100644
index f72b64b..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XFinderException.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ejb;
-
-import javax.ejb.FinderException;
-
-/**
- *  Extended version of {@link FinderException} that includes a root cause.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public class XFinderException extends FinderException
-{
-    private static final long serialVersionUID = -7761100160348957271L;
-    
-    private final Throwable _rootCause;
-
-    public XFinderException(String message)
-    {
-        super(message);
-        _rootCause = null;
-    }
-
-    public XFinderException(String message, Throwable rootCause)
-    {
-        super(message);
-
-        this._rootCause = rootCause;
-    }
-
-    public XFinderException(Throwable rootCause)
-    {
-        super(rootCause.getMessage());
-
-        this._rootCause = rootCause;
-    }
-
-    public Throwable getRootCause()
-    {
-        return _rootCause;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XRemoveException.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XRemoveException.java
deleted file mode 100644
index 684e91f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/XRemoveException.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ejb;
-
-import javax.ejb.RemoveException;
-
-/**
- *  Extended version of {@link RemoveException} that includes a root cause.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public class XRemoveException extends RemoveException
-{
-    private static final long serialVersionUID = -8940644648555335217L;
-    
-    private final Throwable _rootCause;
-
-    public XRemoveException(String message)
-    {
-        super(message);
-        _rootCause = null;
-    }
-
-    public XRemoveException(String message, Throwable rootCause)
-    {
-        super(message);
-
-        this._rootCause = rootCause;
-    }
-
-    public XRemoveException(Throwable rootCause)
-    {
-        super(rootCause.getMessage());
-
-        this._rootCause = rootCause;
-    }
-
-    public Throwable getRootCause()
-    {
-        return _rootCause;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/package.html
deleted file mode 100644
index a3abff1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/ejb/package.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Subclasses of the EJB exceptions that take an optional, additional, root cause Throwable
-to identify the underlying reason for the exception.  This is less necessary in JDK 1.4, which
-support root cause for all exceptions.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/CheckBoxMultiplePropertySelectionRenderer.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/CheckBoxMultiplePropertySelectionRenderer.java
deleted file mode 100644
index a9dc586..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/CheckBoxMultiplePropertySelectionRenderer.java
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- *  Implementation of {@link IMultiplePropertySelectionRenderer} that
- *  produces a table of checkbox (&lt;input type=checkbox&gt;) elements.
- *
- *  @author Sanjay Munjal
- *
- */
-
-public class CheckBoxMultiplePropertySelectionRenderer
-    implements IMultiplePropertySelectionRenderer
-{
-
-    /**
-     *  Writes the &lt;table&gt; element.
-     *
-     **/
-
-    public void beginRender(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        writer.begin("table");
-        writer.attribute("border", 0);
-        writer.attribute("cellpadding", 0);
-        writer.attribute("cellspacing", 2);
-    }
-
-    /**
-     *  Closes the &lt;table&gt; element.
-     *
-     **/
-
-    public void endRender(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        writer.end(); // <table>
-    }
-
-    /**
-     *  Writes a row of the table.  The table contains two cells; the first is the checkbox,
-     *  the second is the label for the checkbox.
-     *
-     **/
-
-    public void renderOption(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IPropertySelectionModel model,
-        Object option,
-        int index,
-        boolean selected)
-    {
-        writer.begin("tr");
-        writer.begin("td");
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "checkbox");
-        writer.attribute("name", component.getName());
-        String id = component.getName() + "." +model.getValue(index);
-        writer.attribute("id", id);
-        writer.attribute("value", model.getValue(index));
-
-        if (component.isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        if (selected)
-            writer.attribute("checked", "checked");
-
-        writer.end(); // <td>
-
-        writer.println();
-
-        writer.begin("td");
-        writer.begin("label");
-        writer.attribute("for", id);
-        writer.print(model.getLabel(index));
-        writer.end(); // <label>
-        writer.end(); // <td>
-        writer.end(); // <tr>
-
-        writer.println();
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/FormConditional.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/FormConditional.java
deleted file mode 100644
index 003ce27..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/FormConditional.java
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * A conditional element on a page which will render its wrapped elements zero
- * or one times. This component is a variant of
- * {@link org.apache.tapestry.components.Conditional}, but is designed for
- * operation in a form. The component parameters are stored in hidden fields
- * during rendering and are taken from those fields during the rewind, thus no
- * StaleLink exceptions occur. [ <a
- * href="../../../../../ComponentReference/contrib.FormConditional.html">Component
- * Reference </a>]
- * 
- * @author Mindbridge
- * @since 3.0
- */
-
-public abstract class FormConditional extends AbstractComponent implements
-        IFormComponent
-{
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = TapestryUtils.getForm(cycle, this);
-
-        boolean cycleRewinding = cycle.isRewinding();
-
-        // If the cycle is rewinding, but not this particular form,
-        // then do nothing (don't even render the body).
-
-        if (cycleRewinding && !form.isRewinding()) return;
-
-        String name = form.getElementId(this);
-
-        boolean condition = getCondition(cycle, form, name);
-
-        getListenerInvoker().invokeListener(getListener(), this, cycle);
-
-        // render the component body only if the condition is true
-        if (condition)
-        {
-            String element = getElement();
-
-            boolean render = !cycleRewinding && HiveMind.isNonBlank(element);
-
-            if (render)
-            {
-                writer.begin(element);
-                renderInformalParameters(writer, cycle);
-            }
-
-            renderBody(writer, cycle);
-
-            if (render) writer.end(element);
-        }
-    }
-
-    private boolean getCondition(IRequestCycle cycle, IForm form, String name)
-    {
-        boolean condition;
-
-        if (!cycle.isRewinding())
-        {
-            condition = getCondition();
-            writeValue(form, name, condition);
-        }
-        else
-        {
-            String submittedCondition = cycle.getParameter(name);
-            condition = convertValue(submittedCondition);
-        }
-
-        if (isParameterBound("conditionValue")) setConditionValue(condition);
-
-        return condition;
-    }
-
-    private void writeValue(IForm form, String name, boolean value)
-    {
-        String externalValue;
-
-        try
-        {
-            externalValue = getDataSqueezer().squeeze(
-                    value ? Boolean.TRUE : Boolean.FALSE);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(Tapestry.format(
-                    "FormConditional.unable-to-convert-value", Boolean
-                            .toString(value)), this, null, ex);
-        }
-
-        form.addHiddenValue(name, externalValue);
-    }
-
-    private boolean convertValue(String value)
-    {
-        try
-        {
-            Boolean b = (Boolean) getDataSqueezer().unsqueeze(value);
-            return b.booleanValue();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(Tapestry.format(
-                    "FormConditional.unable-to-convert-string", value), this,
-                    null, ex);
-        }
-    }
-
-    public abstract DataSqueezer getDataSqueezer();
-
-    // Part of the FormElement interface.
-
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    public abstract boolean getCondition();
-
-    public abstract void setConditionValue(boolean value);
-
-    public abstract String getElement();
-
-    public abstract IActionListener getListener();
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-
-    public abstract ListenerInvoker getListenerInvoker();
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/FormConditional.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/FormConditional.jwc
deleted file mode 100644
index fe66b0a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/FormConditional.jwc
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.form.FormConditional" deprecated="yes">
-    
-  <description>
-  Conditionally emulates an element and its attributes (if element is specified) and/or includes a block of content if a condition is met.
-  </description>
-  
-  <parameter name="condition" required="yes">
-    <description>
-    The condition to evaluate.
-    </description>
-  </parameter>
-  
-  <parameter name="element">
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-
-  <parameter name="listener"/>
-
-  <parameter name="conditionValue">
-    <description>
-    The value of the condition. During render this is obtained from
-    the condition parameter. During rewind it is the submitted condition.
-    </description>
-  </parameter>
-
-  <reserved-parameter name="invert"/>
-  
-  <inject property="dataSqueezer" object="service:tapestry.data.DataSqueezer"/>
-  <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/IMultiplePropertySelectionRenderer.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/IMultiplePropertySelectionRenderer.java
deleted file mode 100644
index 634ebfd..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/IMultiplePropertySelectionRenderer.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- *  Defines an object that works with a {@link MultiplePropertySelection} component
- *  to render the individual elements obtained from the {@link IPropertySelectionModel model}.
- *
- *  @author Sanjay Munjal
- *
- **/
-
-public interface IMultiplePropertySelectionRenderer
-{
-    /**
-     *  Begins the rendering of the {@link MultiplePropertySelection}.
-     *
-     **/
-
-    void beginRender(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle);
-
-    /**
-     *  Invoked for each element obtained from the {@link IPropertySelectionModel model}.
-     *
-     **/
-
-    void renderOption(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IPropertySelectionModel model,
-        Object option,
-        int index,
-        boolean selected);
-
-    /**
-     *  Ends the rendering of the {@link MultiplePropertySelection}.
-     *
-     **/
-
-    void endRender(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.html
deleted file mode 100644
index 9c43d3a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<input jwcid="maskEdit" type="text"/>
-<span jwcid="maskEditScript"/>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.java
deleted file mode 100644
index 08342e1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form;
-
-import org.apache.tapestry.BaseComponent;
-
-/**
- * Provides a mask edit HTML &lt;input type="text"&gt; form element.
- * <p>
- * Mask edit field validates the text the user enters against a mask that encodes the valid forms
- * the text can take. The mask can also format text that is displayed to the user.
- * <p>
- * <table border="1" cellpadding="2">
- * <tr>
- * <th>Mask character</th>
- * <th>Meaning in mask</th>
- * </tr>
- * <tr>
- * <td>&nbsp;l</td>
- * <td>&nbsp;Mixed case letter character [a..z, A..Z]</td>
- * </tr>
- * <tr>
- * <td>&nbsp;L</td>
- * <td>&nbsp;Upper case letter character [A..Z]</td>
- * </tr>
- * <tr>
- * <td>&nbsp;a</td>
- * <td>&nbsp;Mixed case alpha numeric character [a..z, A..Z, 0..1]</td>
- * </tr>
- * <tr>
- * <td>&nbsp;A</td>
- * <td>&nbsp;Upper case alpha numeric character [A..Z, 0..9]</td>
- * </tr>
- * <tr>
- * <td>&nbsp;#</td>
- * <td>&nbsp;Numeric character [0..9]</td>
- * </tr>
- * <tr>
- * <td>&nbsp;_</td>
- * <td>&nbsp;Reserved character for display, do not use.</td>
- * </tr>
- * <tr>
- * <td>&nbsp;others</td>
- * <td>&nbsp;Non editable character for display.</td>
- * </tr>
- * </table>
- * <p>
- * This component requires JavaScript to be enabled in the client browser.
- * <p>[ <a href="../../../../../ComponentReference/MaskEdit.html">Component Reference </a>]
- * 
- * @author Malcolm Edgar
- * @since 2.3
- */
-
-public abstract class MaskEdit extends BaseComponent
-{
-    public abstract String getMask();
-
-    public abstract void setMask(String mask);
-
-    public abstract String getValue();
-
-    public abstract void setValue(String value);
-
-    public abstract boolean isDisabled();
-
-    public abstract void setDisabled(boolean disabled);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.js b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.js
deleted file mode 100644
index bb9c190..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.js
+++ /dev/null
@@ -1,418 +0,0 @@
-/**

- *  JavaScript Mask Edit control

- *  Paul Geerts

- *  Oct 2002

- * 

- *  Note:  This probably only works for English

- *  Other languages have been deprecated and will be removed in the 

- *  next version of Speech (TM)

- **/

-

-var dontDoIt;  // hack for Moz because it won't cancel events properly

-var isTab;     // another Moz hack

-

-

-// Init the mask edit field by creating a lookalike DIV

-// and hiding the real one

-function initMask(field, mask) {

-

-	if (field.disabled) {

-	   return;

-	}

-	

-    var val = field.value;

-    

-    if (!val) {  // if there's no val, init it with empty mask

-        val = displayMask(mask);

-        field.value = displayMask(mask);

-    }

-    // create a div and add a bunch of spans

-    // and edits to it.

-    var div = document.createElement("div");

-   	div.style.backgroundColor = "white";

-    for (var i = 0 ; i < mask.length ; i++) {

-        var ds = document.createElement("SPAN");

-        var v = val.substr(i,1);

-        var m = mask.substr(i,1);

-        if (v==" ") {

-            v="&nbsp;";

-        }

-        ds.innerHTML = v;

-        ds.index = i;

-        ds.mask = m;

-        ds.div = div;

-        // if we can edit this char

-        // make a little tiny edit field

-        if (isEditChar(m)) {

-            var es = document.createElement("INPUT");

-            es.style.width = "1px";

-            es.style.border="0px";

-            es.index = i;

-            es.field = field;

-            es.mask = m;

-            es.display = ds;

-            ds.editField = es;

-            es.div = div;

-            div.appendChild(es);  // set up some events

-            if (navigator.appName == "Microsoft Internet Explorer") {

-                addEvent("keypress", es, changeBitIE);

-            } else {

-                addEvent("keypress", es, changeBitNS);

-            }

-            addEvent("keydown", es, specialKey); // keydown handles stuff like home, end etc

-            addEvent("click", ds, click);

-        } 

-

-        div.appendChild(ds);

-

-    }

-    

-    // the final edit field on the end

-    var es =document.createElement("INPUT");

-    es.style.width = "1px";

-    es.style.border="0px";

-    es.div = div;

-    div.appendChild(es);

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        addEvent("keypress", es, changeBitIE);

-    } else {

-        addEvent("keypress", es, changeBitNS);

-    }

-    addEvent("keydown", es, specialKey);

-

-    div.noWrap = true; // force single line display

-

-    formatDiv(div, field); // format the DIV to look like an edit box

-    field.style.display = 'none'; 

-    field.parentNode.insertBefore(div, field);

-    addEvent("click", div, divClick);

-}

-

-function formatDiv(div, field) {

-    // make it look like an IE edit

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        div.style.fontFamily="courier"; 

-        div.style.fontSize="10pt";      

-        div.style.width = field.offsetWidth;

-        div.style.height = field.offsetHeight;

-        if (navigator.appVersion.match(/6.0/)) { // IE 6 is different

-            div.style.border = "1px solid #7F9DB9";

-        } else {

-            div.style.borderLeft = "2px solid #606060";

-            div.style.borderTop = "2px solid #606060";

-            div.style.borderRight = "1px solid #aaaaaa";

-            div.style.borderBottom = "1px solid #aaaaaa";

-        }

-

-    } else {

-        // Mozilla edit look-a-like

-        div.style.fontFamily="courier";

-        div.style.fontSize="10pt";

-        div.style.border="2px inset #cccccc";

-        if (field.size) {

-            div.style.widh = 13 * field.size;

-        } else {

-            div.style.width = "130px";

-        }

-    }

-}

-

-

-function isEditChar(c) {  // is this char a meaningful mask char

-    switch (c) {

-        case "_":

-        case "#":

-        case "a":

-        case "A":

-        case "l":

-        case "L":

-            return true;

-        default:

-            return false;

-    }

-}

-

-function displayMaskChar(c) {  // display mask chars as _ 

-    if (isEditChar(c)) {       // otherwise just show normal char

-        return "_";

-    } else {

-        return c;

-    }

-}

-

-function displayMask(mask) {  // display entire mask using about subroutine

-    var d = "";

-    for (var i = 0 ; i < mask.length ; i++) {

-        d+=displayMaskChar(mask.substr(i,1));

-    }

-    return d;

-}

-

-function divClick(e) {     // when the main DIV is clicked, focus the end of the edit

-    var d = getEventObject(e);

-    if (d && d.lastChild) {

-        try {

-           d.lastChild.focus();

-        } catch (e) {

-           // nuffin

-        }

-    }

-}

-

-function specialKey(e) { // deal with special keys like backspace, delete etc

-    var s = getEventObject(e);

-    var code = e.keyCode;

-    dontDoIt = true;  // Moz needs these, as I can't seem to cancel events properly

-    isTab = false;    // Moz can't handle tabs well either

-    switch (code) {

-    case 8:   // backspace

-        var b = getPrevEdit(s);

-        if (b) {

-            b.display.innerHTML = displayMaskChar(b.mask);

-            var i = b.index;

-            b.field.value = b.field.value.substr(0, i) + 

-                displayMaskChar(b.mask) + b.field.value.substr(i+1, b.field.value.length - i);

-            b.focus();

-        }

-        cancelEvent(e);

-        return false;

-    case 46:  // delete

-        if (s.display) {

-            s.display.innerHTML = displayMaskChar(s.mask);

-            var i = s.index;

-            s.field.value = s.field.value.substr(0, i) + displayMaskChar(s.mask) + 

-                s.field.value.substr(i+1, s.field.value.length - i);

-        }

-        cancelEvent(e);

-        return false;

-        break;

-    case 37: // left

-        var p = getPrevEdit(s);

-        if (p) {

-            p.focus();

-        }

-        cancelEvent(e);

-        return false;

-    case 39: // right

-        var n = getNextEdit(s);

-        if (n) {

-            n.focus();

-        }

-        cancelEvent(e);

-        return false;

-    case 36: // home

-        s.div.firstChild.focus();

-        cancelEvent(e);

-        return false;

-    case 35: // end

-        s.div.lastChild.focus();

-        cancelEvent(e);

-        return false;

-    case 9: // tab

-        if (navigator.appName == "Microsoft Internet Explorer") {

-            if (!e.shiftKey) {

-                s.div.lastChild.focus();

-            } else {

-                s.div.firstChild.focus();

-            }

-            return;

-        } else {  // is mozilla/netscape

-            isTab = true;  // best i can do really

-        }

-        break;

-    }

-       

-    dontDoIt = false;

-}

-

-function moveForward(s) { // focus next edit

-    var b = getNextEdit(s);

-    if (b) {

-        b.focus();

-    }

-}

-

-function moveBackward(s) { // focus previous edit

-    var b = getPrevEdit(s);

-    if (b) {

-        b.focus();

-    }

-}

-

-function isInsertOK(code, s) {  // check if you're good to insert a char

-    var mchar = s.mask;

-    switch (mchar) {

-    case "_":

-        return true;

-        break;

-    case "#":

-        return checkDigit(code);

-        break;

-    case "a":

-        return checkAlphaNumeric(code);

-        break;

-    case "A":

-        return checkUpCaseAlphaNumeric(code);

-        break;

-    case "l":

-        return checkAlpha(code);

-        break;

-    case "L":

-        return checkUpCaseAlpha(code);

-        break;

-    }

-    return false;

-}

-

-// functions to check the key code, good ol ASCII

-// fairly straightforward

-

-function checkDigit(code) {

-    if ((code>=48) && (code<=57)) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-function checkAlpha(code) {

-    if (((code>=65) && (code<=90)) || ((code>=97) && (code<=122))) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-function checkUpCaseAlpha(code) {

-    if ((code>=65) && (code<=90)) {

-        return code;

-    } else if ((code>=97) && (code<=122)) {

-        return code - 32;

-    } else {

-        return null;

-    }

-}

-

-function checkAlphaNumeric(code) {

-    if (((code>=65) && (code<=90)) || ((code>=97) && (code<=122)) || ((code>=48) && (code<=57))) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-function checkUpCaseAlphaNumeric(code) {

-    if ((code>=65) && (code<=90)) {

-        return code;

-    } else if ((code>=97) && (code<=122)) {

-        return code - 32;

-    } else if ((code>=48) && (code<=57)) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-

-function changeBitNS(e) {  // handle key events in NS

-    var es = getEventObject(e);

-    if (!isTab) {

-        if (es.display) {

-            if (!dontDoIt) {

-                var code = e.charCode;

-                if (code = isInsertOK(code, es)) {

-                    var  c = String.fromCharCode(code);

-                    es.display.innerHTML = c

-                        var i = es.index;

-                    es.field.value = es.field.value.substr(0, i) + c + es.field.value.substr(i+1, es.field.value.length - i);

-                    moveForward(es);

-                }

-            }

-            es.value = "";

-            cancelEvent(e);

-        }        

-        return false;

-    }  

-}

-

-function changeBitIE(e) { // handle key events in IE

-    var es = getEventObject(e);

-    if (es.display) {

-        var code = e.keyCode;

-        if (code = isInsertOK(code, es)) {

-            var  c = String.fromCharCode(code);

-            es.display.innerHTML = c;

-            var i = es.index;

-            es.field.value = es.field.value.substr(0, i) + c + es.field.value.substr(i+1, es.field.value.length - i);

-            moveForward(es);

-            es.value = "";

-        }

-    }

-    cancelEvent(e);

-    return false;

-}

-

-function click(e) {  // clicking on a display span focuses the edit

-    var s = getEventObject(e);

-    s.editField.focus();

-    cancelEvent(e);

-    return false;

-}

-

-function getPrevEdit(s) {    // get previous input field 

-    var b = s.previousSibling;

-    while (b && (b.tagName!="INPUT")) {

-        b = b.previousSibling;

-    }

-    return b;

-}

-

-function getNextEdit(s) { // get previous next field 

-    var b = s.nextSibling;

-    while (b && (b.tagName!="INPUT")) {

-        b = b.nextSibling;

-    }

-    return b;

-}

-

-function cancelEvent(e) {   // kill event propagation

-    e.cancelBubble = true;

-    e.cancel = true;

-    if (navigator.appName != "Microsoft Internet Explorer") {

-        e.stopPropagation();  // doesn't seem to work for key events

-        e.preventDefault();

-    }

-}

-

-

-function getEventObject(e) {  // utility function to retrieve object from event

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        return e.srcElement;

-    } else {  // is mozilla/netscape

-        // need to crawl up the tree to get the first "real" element

-        // i.e. a tag, not raw text

-        var o = e.target;

-        while (!o.tagName) {

-            o = o.parentNode;

-        }

-        return o;

-    }

-}

-

-function addEvent(name, obj, funct) { // utility function to add event handlers

-

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.attachEvent("on"+name, funct);

-    } else {  // is mozilla/netscape

-        obj.addEventListener(name, funct, false);

-    }

-}

-

-function deleteEvent(name, obj, funct) { // utility function to delete event handlers

-

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.detachEvent("on"+name, funct);

-    } else {  // is mozilla/netscape

-        obj.removeEventListener(name, funct, false);

-    }

-}

diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.jwc
deleted file mode 100644
index af0c65f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.jwc
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.form.MaskEdit" allow-informal-parameters="no">
-
-  <parameter name="mask" required="yes" />
-  <parameter name="value" required="yes"/>
-  <parameter name="disabled"/>
-  
-  <component id="maskEdit" type="TextField">
-    <binding name="value" value="ognl:value"/>
-    <binding name="maxlength" value="ognl:mask.length()"/>
-    <binding name="size" value="ognl:mask.length()"/>        
-    <binding name="disabled" value="ognl:disabled"/>
-  </component>
-
-  <component id="maskEditScript" type="Script">
-    <binding name="maskEdit" value="ognl:components.maskEdit"/>
-    <binding name="maskValue" value="mask"/>
-    <binding name="script" value="literal:MaskEdit.script"/>
-  </component>
-  
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.script b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.script
deleted file mode 100644
index 02d84ca..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MaskEdit.script
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!-- 

-   Copyright 2004, 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC

-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"

-	"http://tapestry.apache.org/dtd/Script_3_0.dtd">

-  

-<script>

-

-<include-script resource-path="/org/apache/tapestry/contrib/form/MaskEdit.js"/>

-

-<input-symbol key="maskEdit" required="yes"/>

-<input-symbol key="maskValue" required="yes"/>

-

-<let key="formName">

-  ${maskEdit.form.name}

-</let>

-

-<let key="functionName">

-  ${maskEdit.name}_init

-</let>

-

-<body>

-tapestry.${functionName}=function() {

-  initMask(dojo.byId("${formName}").elements["${maskEdit.name}"], "${maskValue}");

-}

-</body>

-<initialization>

-  tapestry.${functionName}();

-</initialization>

-</script>

-

diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MultiplePropertySelection.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MultiplePropertySelection.java
deleted file mode 100644
index 919da3e..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MultiplePropertySelection.java
+++ /dev/null
@@ -1,213 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.AbstractFormComponent;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.ValidatableField;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * A component which uses &lt;input type=checkbox&gt; to set a property of some
- * object. Typically, the values for the object are defined using an
- * {@link java.lang.Enum}. A MultiplePropertySelection is
- * dependent on an {link IPropertySelectionModel} to provide the list of
- * possible values.
- * <p>
- * Often, this is used to select one or more
- * {@link java.lang.Enum} to assign to a property; the
- * {@link org.apache.tapestry.form.EnumPropertySelectionModel}class simplifies
- * this.
- * <p>
- * The {@link org.apache.tapestry.contrib.palette.Palette}component is more
- * powerful, but requires client-side JavaScript and is not fully cross-browser
- * compatible.
- * <p>
- * <table border=1>
- * <tr>
- * <td>Parameter</td>
- * <td>Type</td>
- * <td>Direction</td>
- * <td>Required</td>
- * <td>Default</td>
- * <td>Description</td>
- * </tr>
- * <tr>
- * <td>selectedList</td>
- * <td>java.util.List</td>
- * <td>in-out</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>The property to set. During rendering, this property is read, and sets
- * the default value of the options in the select. When the form is submitted,
- * list is cleared, then has each selected option added to it.</td>
- * </tr>
- * <tr>
- * <td>renderer</td>
- * <td>{@link IMultiplePropertySelectionRenderer}</td>
- * <td>in</td>
- * <td>no</td>
- * <td>shared instance of {@link CheckBoxMultiplePropertySelectionRenderer}</td>
- * <td>Defines the object used to render this component. The default renders a
- * table of checkboxes. </td>
- * </tr>
- * <tr>
- * <td>model</td>
- * <td>{@link IPropertySelectionModel}</td>
- * <td>in</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>The model provides a list of possible labels, and matches those labels
- * against possible values that can be assigned back to the property.</td>
- * </tr>
- * <tr>
- * <td>disabled</td>
- * <td>boolean</td>
- * <td>in</td>
- * <td>no</td>
- * <td>false</td>
- * <td>Controls whether the &lt;select&gt; is active or not. A disabled
- * PropertySelection does not update its value parameter.
- * <p>
- * Corresponds to the <code>disabled</code> HTML attribute.</td>
- * </tr>
- * </table>
- * <p>
- * Informal parameters are not allowed.
- * <p>
- * As of 4.0, this component can be validated.
- * 
- * @author Sanjay Munjal
- */
-
-public abstract class MultiplePropertySelection extends AbstractFormComponent
-        implements ValidatableField
-{
-
-    /**
-     * A shared instance of {@link CheckBoxMultiplePropertySelectionRenderer}.
-     */
-    public static final IMultiplePropertySelectionRenderer DEFAULT_CHECKBOX_RENDERER = new CheckBoxMultiplePropertySelectionRenderer();
-
-    public abstract Collection getSelectedList();
-
-    public abstract void setSelectedList(Collection selectedList);
-
-    protected void finishLoad()
-    {
-        setRenderer(DEFAULT_CHECKBOX_RENDERER);
-    }
-
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Collection selectedList = getSelectedList();
-
-        if (selectedList == null)
-            throw Tapestry.createRequiredParameterException(this,
-                    "selectedList");
-
-        IPropertySelectionModel model = getModel();
-
-        if (model == null)
-            throw Tapestry.createRequiredParameterException(this, "model");
-
-        IMultiplePropertySelectionRenderer renderer = getRenderer();
-
-        // Start rendering
-        renderer.beginRender(this, writer, cycle);
-
-        int count = model.getOptionCount();
-
-        for(int i = 0; i < count; i++)
-        {
-            Object option = model.getOption(i);
-
-            // Try to find the option in the list and if yes, then it is
-            // checked.
-            boolean optionSelected = selectedList.contains(option);
-
-            renderer.renderOption(this, writer, cycle, model, option, i,
-                    optionSelected);
-        }
-
-        // A PropertySelection doesn't allow a body, so no need to worry about
-        // wrapped components.
-        renderer.endRender(this, writer, cycle);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractRequirableField#rewindFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // get all the values
-        String[] optionValues = cycle.getParameters(getName());
-
-        IPropertySelectionModel model = getModel();
-
-        List selectedList = new ArrayList(getModel().getOptionCount());
-
-        // Nothing was selected
-        if (optionValues != null)
-        {
-            // Go through the array and translate and put back in the list
-            for(int i = 0; i < optionValues.length; i++)
-            {
-                // Translate the new value
-                Object selectedValue = model.translateValue(optionValues[i]);
-
-                // Add this element in the list back
-                selectedList.add(selectedValue);
-            }
-        }
-
-        try
-        {
-            getValidatableFieldSupport().validate(this, writer, cycle,
-                    selectedList);
-
-            setSelectedList(selectedList);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-
-    public abstract IPropertySelectionModel getModel();
-
-    public abstract IMultiplePropertySelectionRenderer getRenderer();
-
-    public abstract void setRenderer(IMultiplePropertySelectionRenderer renderer);
-
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MultiplePropertySelection.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MultiplePropertySelection.jwc
deleted file mode 100644
index 5282996..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/MultiplePropertySelection.jwc
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.form.MultiplePropertySelection" 
-	allow-body="no" allow-informal-parameters="no">
-	
-  <parameter name="model" required="yes"/>
-  	
-  <parameter name="selectedList" required="yes"/>
-  
-  <parameter name="disabled"/>
-  
-  <parameter name="renderer"/>
-
-  <parameter name="displayName"/>
-  <parameter name="validators"/>
-      	
-  <parameter name="id" property="idParameter" default-value="id"/>
-        	
-  <property name="name"/>
-  <property name="form"/>
-  
-  <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.html
deleted file mode 100644
index df959a6..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$">
-	<span jwcid="@RenderBody"/>
-    <span jwcid="script"/>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.java
deleted file mode 100644
index 1da6284..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form.checkboxes;
-
-import java.util.Collection;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
-
-/**
- * @author mb
- * @since 4.0
- */
-public abstract class CheckboxGroup extends BaseComponent
-{
-    public static final String CHECKBOX_GROUP_ATTRIBUTE = "org.apache.tapestry.contrib.form.CheckboxGroup";
-    
-    public abstract Collection getCheckboxNames();
-    public abstract String getFunctionName();
-    public abstract void setFunctionName(String functionName);    
-
-    public void registerControlledCheckbox(ControlledCheckbox checkbox)
-    {
-        String name = checkbox.getCheckboxName();
-        String form = checkbox.getForm().getName();
-        getCheckboxNames().add(form + "." + name);
-    }
-    
-    /**
-     * @see org.apache.tapestry.BaseComponent#renderComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object objOtherGroup = cycle.getAttribute(CHECKBOX_GROUP_ATTRIBUTE);
-        cycle.setAttribute(CHECKBOX_GROUP_ATTRIBUTE, this);
-        
-        initialize(cycle);
-        
-        super.renderComponent(writer, cycle);
-
-        // clear the registered checkbox names after rendering
-        // allows the component to be used in cycles
-        getCheckboxNames().clear();
-
-        cycle.setAttribute(CHECKBOX_GROUP_ATTRIBUTE, objOtherGroup);
-    }
-
-    private void initialize(IRequestCycle cycle)
-    {
-        String functionName = "setCheckboxGroup";
-
-        if (!cycle.isRewinding()) {
-            PageRenderSupport body = TapestryUtils.getPageRenderSupport(cycle, this);
-            if (body != null)
-                functionName = body.getUniqueString("setCheckboxGroup");
-        }
-        
-        setFunctionName(functionName);
-    }
-    
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.jwc
deleted file mode 100644
index 6461934..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.jwc
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification
-      PUBLIC "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-      "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.form.checkboxes.CheckboxGroup" allow-body="yes" allow-informal-parameters="no">
-    
-    <description>
-        A component defining a group of checkboxes that will be controlled together.
-        Typically the ControlCheckbox and ControlledCheckbox components are placed
-        in the body of this component.
-    </description>
-    
-    <component id="script" type="Script">
-        <binding name="script" value="'/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.script'"/>
-        <binding name="functionName" value="functionName"/>
-        <binding name="checkboxNames" value="checkboxNames"/>
-    </component>
-    
-    <property name="checkboxNames" initial-value="new java.util.ArrayList()"/>
-    <property name="functionName"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.script b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.script
deleted file mode 100644
index fb7a801..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.script
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-  
-<script>
-
-<input-symbol key="functionName" class="java.lang.String" required="yes"/>
-<input-symbol key="checkboxNames" class="java.util.Collection" required="yes"/>
-
-<body>
-function ${functionName}(value) {
-	<foreach key="checkboxName" expression="checkboxNames">
-		document.forms.${checkboxName}.checked=value;
-	</foreach>
-}
-</body>
-
-</script>
-
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlCheckbox.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlCheckbox.html
deleted file mode 100644
index 5df1f61..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlCheckbox.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$">
-	<input jwcid="any" type="checkbox" onclick="ognl:checkboxGroup.functionName + '(this.checked)'"/>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlCheckbox.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlCheckbox.java
deleted file mode 100644
index ab5a78d..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlCheckbox.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form.checkboxes;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * @author mb
- * @since 4.0
-*/
-public abstract class ControlCheckbox extends BaseComponent
-{
-    public abstract CheckboxGroup getGroup();
-    
-    public CheckboxGroup getCheckboxGroup()
-    {
-        CheckboxGroup group = getGroup();
-        if (group == null) {
-            IRequestCycle cycle = getPage().getRequestCycle();
-            group = (CheckboxGroup) cycle.getAttribute(CheckboxGroup.CHECKBOX_GROUP_ATTRIBUTE);
-        }
-        if (group == null)
-            throw new ApplicationRuntimeException("The component " + getExtendedId() + " must be wrapped by a CheckboxGroup or the 'group' parameter must be set.");
-
-        return group;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlCheckbox.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlCheckbox.jwc
deleted file mode 100644
index 5472da2..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlCheckbox.jwc
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification
-      PUBLIC "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-      "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.form.checkboxes.ControlCheckbox" allow-body="no" allow-informal-parameters="yes">
-    
-    <description>
-        Selecting or deselecting this checkbox will automatically select or deselect 
-        all controlled checkboxes in the checkbox group.
-    </description>
-    
-    <parameter name="group" default-value="null">
-        <description>
-            This is an optional parameter. If provided, it specifies the CheckboxGroup
-            this component belongs to. If it is not specified, then the component is a
-            a part of the CheckboxGroup that wraps it.
-            Please note that if this parameter is used, then the CheckboxGroup it refers to 
-            must either enclose the current component, or must be defined after it.
-        </description>
-    </parameter>
-    
-    <reserved-parameter name="type"/>
-    <reserved-parameter name="onclick"/>
-    
-    <component id="any" type="Any" inherit-informal-parameters="yes"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlledCheckbox.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlledCheckbox.html
deleted file mode 100644
index d694ad5..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlledCheckbox.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$">
-	<span jwcid="checkbox"/>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlledCheckbox.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlledCheckbox.java
deleted file mode 100644
index 143cf8f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlledCheckbox.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form.checkboxes;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.Checkbox;
-
-/**
- * @author mb
- * @since 4.0
- */
-public abstract class ControlledCheckbox extends BaseComponent
-{
-
-    public abstract CheckboxGroup getGroup();
-
-    public String getCheckboxName()
-    {
-        Checkbox checkbox = (Checkbox) getComponent("checkbox");
-        String name = checkbox.getName();
-        return name;
-    }
-
-    public IForm getForm()
-    {
-        Checkbox checkbox = (Checkbox) getComponent("checkbox");
-        IForm form = checkbox.getForm();
-        return form;
-    }
-
-    /**
-     * @see org.apache.tapestry.BaseComponent#renderComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        super.renderComponent(writer, cycle);
-
-        registerCheckbox();
-    }
-
-    protected void registerCheckbox()
-    {
-        getCheckboxGroup().registerControlledCheckbox(this);
-    }
-
-    public CheckboxGroup getCheckboxGroup()
-    {
-        CheckboxGroup group = getGroup();
-        if (group == null)
-        {
-            IRequestCycle cycle = getPage().getRequestCycle();
-            group = (CheckboxGroup) cycle
-                    .getAttribute(CheckboxGroup.CHECKBOX_GROUP_ATTRIBUTE);
-        }
-        if (group == null)
-            throw new ApplicationRuntimeException(
-                    "The component "
-                            + getExtendedId()
-                            + " must be wrapped by a CheckboxGroup or the 'group' parameter must be set.");
-
-        return group;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlledCheckbox.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlledCheckbox.jwc
deleted file mode 100644
index f8c98a4..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/ControlledCheckbox.jwc
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification
-      PUBLIC "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-      "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.form.checkboxes.ControlledCheckbox" allow-body="no" allow-informal-parameters="yes">
-
-    <description>
-        A checkbox whose state may be controlled by other checkboxes using JavaScript.
-        The checkbox rendered by this component may be automatically selected or deselected
-        by a ControlCheckbox within the same group.
-    </description>
-    
-    <parameter name="value" required="yes"/>
-    <parameter name="disabled" required="no"/>
-
-    <parameter name="group" default-value="null">
-        <description>
-            This is an optional parameter. If provided, it specifies the CheckboxGroup
-            this component belongs to. If it is not specified, then the component is a
-            a part of the CheckboxGroup that wraps it.
-            Please note that if this parameter is used, then the CheckboxGroup it refers to 
-            must either enclose the current component, or must be defined after it.
-        </description>
-    </parameter>
-        
-    <component id="checkbox" type="Checkbox" inherit-informal-parameters="yes">
-        <inherited-binding name="value" parameter-name="value"/>
-        <inherited-binding name="disabled" parameter-name="disabled"/>
-    </component>
-    
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/package.html
deleted file mode 100644
index 110b6bb..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/checkboxes/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Additional checkbox controls, like grouping and controlled selections.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/package.html
deleted file mode 100644
index 5e7d8d1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/form/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Form controls for things liked masked input editing on text fields
-and multi property selection semantics.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_HRp4.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_HRp4.gif
deleted file mode 100644
index 42ff5ec..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_HRp4.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_Hp3.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_Hp3.gif
deleted file mode 100644
index 5f2860d..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_Hp3.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_NBanner.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_NBanner.gif
deleted file mode 100644
index 0105a1b..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_NBanner.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_NRp2.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_NRp2.gif
deleted file mode 100644
index 8590996..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_Np1.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_Np1.gif
deleted file mode 100644
index 78ee58c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Engine_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.css b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.css
deleted file mode 100644
index f4a4ae9..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.css
+++ /dev/null
@@ -1,278 +0,0 @@
-H1  {
-	font-size: 12pt;
-	font-weight: bold;
-
-}
-
-H2  {}
-
-H3  {}
-
-
-A:Visited  {}
-
-A:Active  {}
-
-A:Hover  {}
-
-SPAN.error
-{
-		color: Red;
-		font-weight: bold;	
-}
-
-body,td,th {
-    font-family: "Trebuchet MS", Lucida Grande, Tahoma, Verdana, Arial, sans-serif;
-    font-size: 11pt;
-}
-
-A IMG
-{
-  border: none;
-}
-
-
-TABLE.inspector-data
-{
-  border: 1px solid black;
-}
-
-TABLE.inspector-data TR.odd TD  {
-	text-align : left;
-	color : Black;
-	background-color : Silver;
-}
-
-TABLE.inspector-data TR.heading TH
-{
-  border-bottom: 2px solid black;
-}
-
-TABLE.inspector-data TR.even TH
-{
-	text-align : right;
-	font-weight: bold;
-}
-
-TABLE.inspector-data TR.odd TH
-{
-	text-align: right;
-	color : Black;
-	background-color : Silver;
-	font-weight: bold;
-}
-
-TABLE.inspector-data TR.even TD  {
-	text-align : left;
-}
-
-/**
-TABLE.inspector-data,
-TABLE.selector
-{
-	font-size: 9pt;
-}
-*/
-
-TABLE.selector TD.page-link
-{
-	font-style: italic;
-}
-
-TABLE.selector TD
-{
-	verticle-align: center;
-}
-
-TABLE.inspector-data TR.heading TH,
-TABLE.template TH
-{
-	text-align: center;
-	background-color : "#330066";
-	font-weight: bold;
-}
-
-TABLE.template TD
-{
-	background-color: Silver;
-	font-size: smaller;
-}
-
-SPAN.message
-{
-	color : Silver;
-	font-size: larger;
-}
-
-SPAN.jwc-tag
-{
-	font-weight: bold;
-}
-
-SPAN.jwc-id, SPAN.localized-string
-{
-	font-style: italic;
-}
-
-
-
-TABLE.request-context-border  {
-	border-width : 1;
-	border-color : Black;
-	font-size: 9pt;
-}
-
-SPAN.request-context-object  {
-	font-weight : bold;
-	text-align : left;
-	font-size: 12pt;
-}
-
-TR.request-context-section TH  {
-	text-align : center;
-    background-color: silver;
-}
-
-TR.request-context-header TH  {
-	text-align : center;
-    background-color: silver;
-}
-
-TABLE.request-context-object TR.odd TD  {
-	text-align : left;
-	color : Black;
-	background-color : Silver;
-}
-
-TABLE.request-context-object TR.odd TH  {
-	color : Black;
-	background-color : Silver;
-	text-align : right;
-}
-
-TABLE.request-context-object TR.even TD  {
-	text-align : left;
-}
-
-TABLE.request-context-object TR.even TH  {
-	text-align : right;
-}
-
-TABLE.request-context-object  {
-	width : 100%;
-	font-size: 9pt;
-}
-
-TABLE.request-context-object TR  {
-	vertical-align : text-top;
-}
-
-TABLE.exception-display TR.even  {
-	top : auto;
-}
-
-TABLE.exception-displaY TD
-{
-	width: 100%;
-}
-
-TABLE.exception-display TR.even TH  {
-	text-align : right;
-	font-weight : bold;
-}
-
-TABLE.exception-display TR.odd TD  {
-	text-align : left;
-	background-color : Silver;
-}
-
-TABLE.exception-display TR.odd TH  {
-	text-align : right;
-	font-weight : bold;
-	background-color : Silver;	
-}
-
-TABLE.exception-display TR.even TD  {
-	text-align : left;
-}
-
-TABLE.exception-display TR.stack-trace  {
-	font-size : small;
-	font-family : sans-serif;
-	text-align : left;
-}
-
-UL 
-{
-	margin-top: 0px;
-	margin-bottom: 0px;
-	margin-left: 20px;
-}
-
-
-TABLE.requestDebug
-{
-	width: 700;
-  	border-color : Black;
-	border-style : solid;
-	border-width : thin;
-	border-top-width : 0px;
-	border-bottom-width : 2px;
-	border-right-width : 2px;
-	border-left-width : 0px;
-	background-color: #839cd1;
-	padding: 0;
-
-}
-
-TABLE.requestDebug TR.control
-{
-    font-weight: bold;
-    font-size: 9pt;
-	color : White;
-	background-color : black;
-}
-
-TABLE.requestDebug FORM
-{
-  margin: 0;
-}
-
-DIV.described-object-title
-{
-  font-size: large;
-  font-weight: bold;
-  color: white;
-  background-color: black;
-}
-
-TABLE.described-object  
-{
-  border: 1px solid black;
-  width: 100%;
-}
-
-
-TABLE.described-object TR.section TH
-{
-  color: white;
-  background-color: black;
-  text-align: center;
-}
-
-TABLE.described-object TR.odd
-{
-  background-color: silver;
-}
-
-TABLE.described-object TR.even
-{
-  background-color: white;
-}
-
-TABLE.described-object TH
-{
-  text-align: right;
-  width: 1px; // Will stretch to fit.
-}
-
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.html
deleted file mode 100644
index 065e4fd..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="@Shell" title="ognl:inspectorTitle" stylesheet="ognl:assets.stylesheet">
-<body jwcid="@Body">
-
-<span jwcid="@inspector:Selector">
-
-<span jwcid="@inspector:ViewTabs">
-
-<span jwcid="@RenderBlock" block="ognl:blockForView"/>
-
-</span>
-</span>
-
-<span jwcid="specificationBlock@Block">
-<span jwcid="@inspector:ShowSpecification"/>
-</span>
-
-<span jwcid="templateBlock@Block">
-<span jwcid="@inspector:ShowTemplate"/>
-</span>
-
-<span jwcid="propertiesBlock@Block">
-<span jwcid="@inspector:ShowProperties"/>
-</span>
-
-<span jwcid="engineBlock@Block">
-<span jwcid="@inspector:ShowEngine"/>
-</span>
-
-</body>
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.java
deleted file mode 100644
index bb93ff1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.java
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.Block;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  The Tapestry Inspector page.
- *
- *  @author Howard Lewis Ship
- **/
-
-public abstract class Inspector extends BasePage
-{
-    private Map _blocks = new HashMap();
-
-    protected void finishLoad()
-    {
-        _blocks.put(View.TEMPLATE, getComponent("templateBlock"));
-        _blocks.put(View.SPECIFICATION, getComponent("specificationBlock"));
-        _blocks.put(View.ENGINE, getComponent("engineBlock"));
-        _blocks.put(View.PROPERTIES, getComponent("propertiesBlock"));
-    }
-
-    public abstract String getView();
-
-    public abstract void setView(String value);
-
-    public abstract String getInspectedPageName();
-    
-    public abstract void setInspectedPageName(String value);
-
-    public abstract String getInspectedIdPath();
-
-    public abstract void setInspectedIdPath(String value);
-
-    /** 
-     *  Invoked to change the component being inspected within the current
-     *  page.
-     *
-     *  @since 1.0.6
-     **/
-
-    public void selectComponent(String idPath)
-    {
-        setInspectedIdPath(idPath);
-    }
-
-    /**
-     *  Method invoked by the {@link InspectorButton} component, 
-     *  to begin inspecting a page.
-     *
-     **/
-
-    public void inspect(String pageName, IRequestCycle cycle)
-    {
-        setInspectedPageName(pageName);
-        selectComponent((String) null);
-
-        cycle.activate(this);
-    }
-
-    /**
-     *  Listener for the component selection, which allows a particular component.  
-     *  
-     *  <p>The context is a single string,
-     *  the id path of the component to be selected (or null to inspect
-     *  the page itself).  This invokes
-     *  {@link #selectComponent(String)}.
-     *
-     **/
-
-    public void selectComponent(IRequestCycle cycle)
-    {
-        Object[] parameters = cycle.getListenerParameters();
-
-        String newIdPath;
-
-        // The up button may generate a null context.
-
-        if (parameters == null || parameters.length == 0)
-            newIdPath = null;
-        else
-            newIdPath = (String) parameters[0];
-
-        selectComponent(newIdPath);
-    }
-
-    /**
-     *  Returns the {@link IPage} currently inspected by the Inspector, as determined
-     *  from the inspectedPageName property.
-     *
-     **/
-
-    public IPage getInspectedPage()
-    {
-        return getRequestCycle().getPage(getInspectedPageName());
-    }
-
-    /**
-     *  Returns the {@link IComponent} current inspected; this is determined
-     *  from the inspectedPageName and inspectedIdPath properties.
-     *
-     **/
-
-    public IComponent getInspectedComponent()
-    {
-        return getInspectedPage().getNestedComponent(getInspectedIdPath());
-    }
-
-    public String getInspectorTitle()
-    {
-        return "Tapestry Inspector ";
-    }
-
-    /**
-     *  Returns the {@link Block} for the currently selected view.
-     *
-     **/
-
-    public Block getBlockForView()
-    {
-        return (Block) _blocks.get(getView());
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.library b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.library
deleted file mode 100644
index 4b79263..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.library
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
-<library-specification>	
-  
-  <!-- Turns out that libraries have to form a tree; since this library is included by Contrib, it can't include Contrib.  Instead,
-       we shadow a component from it. Sloppy and probably a bug. -->
-       
-  <component-type type="DumpObject" specification-path="/org/apache/tapestry/contrib/components/DumpObject.jwc"/>
-  
-  <meta key="org.apache.tapestry.component-class-packages" value="org.apache.tapestry.contrib.components"/>
-  
-
-</library-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.page b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.page
deleted file mode 100644
index a9e5c7d..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Inspector.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification class="org.apache.tapestry.contrib.inspector.Inspector">
-
-  <property name="view" persist="session" initial-value="ognl:@org.apache.tapestry.contrib.inspector.View@SPECIFICATION"/>
-  <property name="inspectedPageName" persist="session"/>
-  <property name="inspectedIdPath" persist="session"/>
-  
-  <asset name="stylesheet" path="Inspector.css"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/InspectorButton.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/InspectorButton.html
deleted file mode 100644
index 26514ea..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/InspectorButton.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-
-<div id="tapestryInspector" 
-  jwcid="ifNotDisabled"
-  alt="Display Inspector"
-  style="display:inline; float:right; border-color:black; border-width:2px; border-style:solid; padding:3px; background-color:#839cd1;">
-<a jwcid="link"><img jwcid="rollover" style="border:none;"/></a>
-</div>
-
-</span>
-
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/InspectorButton.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/InspectorButton.java
deleted file mode 100644
index c88ebc9..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/InspectorButton.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.Body;
-
-/**
- * Component that can be placed into application pages that will launch the inspector in a new
- * window. [ <a href="../../../../../../ComponentReference/InspectorButton.html">Component Reference
- * </a>]
- * <p>
- * Because the InspectorButton component is implemented using a
- * {@link org.apache.tapestry.html.Rollover}, the containing page must use a {@link Body} component
- * instead of a &lt;body&gt; tag.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class InspectorButton extends BaseComponent
-{
-    /**
-     * Gets the listener for the link component.
-     * 
-     * @since 1.0.5
-     */
-
-    public void trigger(IRequestCycle cycle)
-    {
-        String name = getNamespace().constructQualifiedName("Inspector");
-
-        Inspector inspector = (Inspector) cycle.getPage(name);
-
-        inspector.inspect(getPage().getPageName(), cycle);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/InspectorButton.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/InspectorButton.jwc
deleted file mode 100644
index f2b7471..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/InspectorButton.jwc
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.inspector.InspectorButton" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-
-    <description>
-<![CDATA[
-Includes the Inspector button on the page (which dynamically positions itself in the
-lower right corner).  Clicking the button raises the Tapestry Inspector in a pop-up
-window.
-]]>
-    </description>
-
-  <parameter name="disabled">
-    <description>
-      If true, then the InspectorButton will not be displayed (this saves the
-      trouble of wrapping the InspectorButton in a conditional, as 
-      it generally should only be displayed when developing an application,
-      not in deployment).
-    </description>
-  </parameter>
-
-  <component id="ifNotDisabled" type="If">
-    <binding name="condition" value="! disabled"/>
-  </component>
-  
-    <bean name="renderer" class="org.apache.tapestry.contrib.link.PopupLinkRenderer">
-      <set name="windowName" value="literal:TapestryInspector"/>
-      <set name="features">
-        'titlebar,resizable,scrollbars,width=700,height=600'
-      </set>
-    </bean>
-    
-    <component id="link" type="DirectLink">
-      <binding name="listener" value="listener:trigger"/>
-      <binding name="stateful" value="false"/>
-      <binding name="renderer" value="bean:renderer"/>
-    </component>
-
-    <component id="rollover" type="Rollover">
-    	<binding name="image" value="asset:logo"/>
-    	<binding name="mouseOver" value="asset:inspector"/>
-    </component>
-
-    <asset name="logo" path="tapestry-logo.gif"/>
-    <asset name="inspector" path="inspector-rollover.gif"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_HRp4.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_HRp4.gif
deleted file mode 100644
index e2fe821..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_HRp4.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_Hp3.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_Hp3.gif
deleted file mode 100644
index 8aa25cb..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_Hp3.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_NBanner.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_NBanner.gif
deleted file mode 100644
index 5fa7f5b..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_NBanner.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_NRp2.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_NRp2.gif
deleted file mode 100644
index 12b13a1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_Np1.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_Np1.gif
deleted file mode 100644
index 917436a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Properties_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Reset_NRp2.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Reset_NRp2.gif
deleted file mode 100644
index 371cba0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Reset_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Reset_Np1.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Reset_Np1.gif
deleted file mode 100644
index eb87bf4..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Reset_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Restart_NRp2.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Restart_NRp2.gif
deleted file mode 100644
index 8fed715..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Restart_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Restart_Np1.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Restart_Np1.gif
deleted file mode 100644
index dda92b0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Restart_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Selector.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Selector.html
deleted file mode 100644
index 24b4568..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Selector.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-<table class="selector">
-	<tr valign="middle">
-		<td>
-			<form jwcid="form">
-				<select jwcid="selectPage"/>
-			</form>
-		</td>
-		<td class="page-link">
-			<a jwcid="page">page</a>
-		</td>
-<span jwcid="e">
-		<td>&gt;&gt;</td>
-		<td>
-		<a jwcid="component"><span jwcid="insertId"/></a>
-		</td>
-</span>
-	</tr>
-</table>
-
-<span jwcid="renderBody"/>
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Selector.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Selector.java
deleted file mode 100644
index 6cc14f1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Selector.java
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-
-/**
- *  Component of the {@link Inspector} page used to select the page and "crumb trail"
- *  of the inspected component.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public abstract class Selector extends BaseComponent
-{
-    public abstract ISpecificationSource getSpecificationSource();
-    
-    /**
-     *  When the form is submitted,
-     *  the inspectedPageName of the {@link Inspector} page will be updated,
-     *  but we need to reset the inspectedIdPath as well.
-     *
-     **/
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        Inspector inspector = (Inspector) getPage();
-
-        inspector.selectComponent((String) null);
-    }
-
-    /**
-     *  Returns an {IPropertySelectionModel} used to select the name of the page
-     *  to inspect.  The page names are sorted.
-     *
-     **/
-
-    public IPropertySelectionModel getPageModel()
-    {
-        return new StringPropertySelectionModel(getPageNames());
-    }
-
-    /**
-     *  The crumb trail is all the components from the inspected component up to
-     *  (but not including) the page.
-     *
-     **/
-
-    public List getCrumbTrail()
-    {
-        List result = null;
-
-        Inspector inspector = (Inspector) getPage();
-        IComponent component = inspector.getInspectedComponent();
-        IComponent container = null;
-
-        while (true)
-        {
-            container = component.getContainer();
-            if (container == null)
-                break;
-
-            if (result == null)
-                result = new ArrayList();
-
-            result.add(component);
-
-            component = container;
-        }
-
-        if (result == null)
-            return null;
-
-        // Reverse the list, such that the inspected component is last, and the
-        // top-most container is first.
-
-        Collections.reverse(result);
-
-        return result;
-    }
-    
-    private String[] getPageNames()
-    {
-        Set names = new HashSet();
-        
-        ISpecificationSource source = getSpecificationSource();
-        
-        addPageNames(names, source.getFrameworkNamespace());
-        addPageNames(names, source.getApplicationNamespace());
-        
-        List l = new ArrayList(names);
-        Collections.sort(l);
-
-        return (String[]) l.toArray(new String[l.size()]);
-    }
-
-    private void addPageNames(Set names, INamespace namespace)
-    {
-        String idPrefix = namespace.getExtendedId();
-
-        List pageNames = namespace.getPageNames();
-        int count = pageNames.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            String name = (String) pageNames.get(i);
-
-            if (idPrefix == null)
-                names.add(name);
-            else
-                names.add(idPrefix + ":" + name);
-        }
-        
-        List ids = namespace.getChildIds();
-        count = ids.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            String id = (String) ids.get(i);
-
-            addPageNames(names, namespace.getChildNamespace(id));
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Selector.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Selector.jwc
deleted file mode 100644
index 4852fc5..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Selector.jwc
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.inspector.Selector">
-
-  <component id="form" type="Form">
-    <binding name="listener" value="listener:formSubmit"/>
-  </component>
-
-  <component id="selectPage" type="PropertySelection">
-    <binding name="value" value="page.inspectedPageName"/>
-    <binding name="model" value="pageModel"/>
-    <binding name="onchange" value="literal:tapestry.form.submit(this.form)"/>
-  </component>
-
-  <component id="page" type="DirectLink">
-    <binding name="listener" value="page.listeners.selectComponent"/>
-  </component>
-
-  <component id="e" type="For">
-    <binding name="source" value="crumbTrail"/>
-  </component>
-
-  <component id="component" type="DirectLink">
-    <binding name="parameters" value="components.e.value.idPath"/>
-    <binding name="listener" value="page.listeners.selectComponent"/>
-  </component>
-
-  <component id="insertId" type="Insert">
-    <binding name="value" value="components.e.value.id"/>
-  </component>
-
-  <component id="renderBody" type="RenderBody"/>
-  <inject object="infrastructure:specificationSource" property="specificationSource"/>
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowDescription.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowDescription.html
deleted file mode 100644
index 27d42b7..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowDescription.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-<span jwcid="ifDescription"><img jwcid="descriptionImage" alt="?"/></span>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowDescription.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowDescription.jwc
deleted file mode 100644
index 3b3673a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowDescription.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification allow-body="no" allow-informal-parameters="no">
-	
-	<parameter name="description" required="yes"/>
-	
-	<component id="ifDescription" type="If">
-	  <binding name="condition" value="description"/>
-	</component>
-	
-	<component id="descriptionImage" type="Image">
-	  <binding name="image" value="asset:info"/>
-	  <binding name="title" value="description"/>
-	</component>
-	
-	<asset name="info" path="info.gif"/>
-	
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.html
deleted file mode 100644
index 3e5c40a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-<table class="inspector-data">
-
-	<tr class="heading">
-		<th colspan="2">Engine/Application Properties</th>
-	</tr>
-	
-	<tr class="heading">
-		<th>Name</th> <th>Property</th>
-	</tr>
-	
-	<tr class="even">
-		<th>Tapestry Framework Version</th>
-		<td><span jwcid="insertFrameworkVersion"/></td>
-	</tr>
-	
-	<tr class="odd">
-		<th>Application Name</th>
-		<td><span jwcid="insertApplicationName"/></td>
-	</tr>
-	
-	<tr class="even">
-		<th>Locale</th>
-		<td><span jwcid="insertLocale"/></td>
-	</tr>
-
-</table>
-
-<div jwcid="@If" condition="ognl:! sessionAttributeNames.empty">
-  
-<h1>Session Data</h1>
-  
-<table class="inspector-data">
-  
-  <tr class="heading">
-    <th>Name</th> <th>Object</th>
-  </tr>
-  <tr jwcid="loop">
-    <td>
-      <span jwcid="@Insert" value="ognl:attributeName"/>
-    </td>
-    <td>
-      <pre><span jwcid="@DumpObject" object="ognl:session.getAttribute(attributeName)"/></pre>
-    </td>
-    
-  </tr>
-  
-</table>  
-  
-</div>
-
-<h1>Operations</h1>
-
-<table class="inspector-data">
-
-	<tr class="even">
-		<td><a jwcid="restart" target="_new"><img jwcid="restartButton"/></a>
-		</td>
-		<td>Restart the application (in a new window).
-		</td>
-	</tr>
-
-	<tr class="even">
-		<td><a jwcid="reset"><img jwcid="resetButton"/></a>
-		</td>
-		<td>
-		Reset the application, discarding all cached specifications, assets
-		and templates.
-		</td>
-	</tr>
-</table>
-
-
-<h1>Request Data</h1>
-
-<span jwcid="@RequestDisplay"/>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.java
deleted file mode 100644
index a6a52a8..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.fileupload.RequestContext;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-
-/**
- * Component of the {@link Inspector} page used to display the properties of the
- * {@link org.apache.tapestry.IEngine} as well as a serialized view of it. Also, the
- * {@link RequestContext} is dumped out.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class ShowEngine extends BaseComponent implements PageBeginRenderListener
-{
-    // Injected
-    public abstract WebRequest getRequest();
-
-    // Transient
-    public abstract void setSessionAttributeNames(List names);
-
-    // Transient
-    public abstract void setSession(WebSession session);
-
-    public void pageBeginRender(PageEvent event)
-    {
-        WebSession session = getRequest().getSession(false);
-
-        setSession(session);
-
-        setSessionAttributeNames(session == null ? Collections.EMPTY_LIST : session
-                .getAttributeNames());
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.jwc
deleted file mode 100644
index 2492e1c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.jwc
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.inspector.ShowEngine" allow-body="no" allow-informal-parameters="no">
-
-  <inject property="request" object="infrastructure:request"/>
-  <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/>
-  <property name="attributeName"/>
-  
-  <component id="insertFrameworkVersion" type="Insert">
-  	<binding name="value" value="@org.apache.tapestry.Tapestry@VERSION"/>
-  </component>
-  
-  <component id="insertApplicationName" type="Insert">
-    <binding name="value" value="page.engine.specification.name"/>
-  </component>
-  
-  <component id="insertLocale" type="Insert">
-    <binding name="value" value="page.engine.locale.displayName"/>
-  </component>
-  
-  <component id="restart" type="ServiceLink">
-    <binding name="service" value="@org.apache.tapestry.Tapestry@RESTART_SERVICE"/>
-  </component>
-  
-  <component id="restartButton" type="Rollover">
-    <binding name="image" value="asset:restart"/>
-    <binding name="mouseOver" value="asset:restartFocus"/>
-  </component>
-  
-  <component id="reset" type="ServiceLink">
-    <binding name="service" value="@org.apache.tapestry.Tapestry@RESET_SERVICE"/>
-  </component>
-  
-  <component id="resetButton" type="Rollover">
-    <binding name="image" value="asset:reset"/>
-    <binding name="mouseOver" value="asset:resetFocus"/>
-  </component>
-  
-  <asset name="reset" path="Reset_Np1.gif"/>
-  <asset name="resetFocus" path="Reset_NRp2.gif"/>
-  <asset name="restart" path="Restart_Np1.gif"/>
-  <asset name="restartFocus" path="Restart_NRp2.gif"/>
-  
-  <component id="loop" type="For">
-    <binding name="source" value="sessionAttributeNames"/>
-    <binding name="value" value="attributeName"/>
-    <binding name="element" value="literal:tr"/>
-    <binding name="class" value="beans.evenOdd.next"/>
-  </component>
-  
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowProperties.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowProperties.html
deleted file mode 100644
index 34afff1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowProperties.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-<span jwcid="ifNoProperties">
-<span class="message">Page contains no persistent properties.</span>
-</span>
-
-<span jwcid="ifHasProperties">
-<table class="inspector-data">
-	<tr class="heading">
-		<th>Component</th> <th>Property Name</th> <th>Value Class</th> <th>Value</th>
-	</tr>
-
-	<tr jwcid="e">
-		<td>
-			<a jwcid="selectComponent"><span jwcid="insertPath"/></a>
-		</td>
-		<td>
-			<span jwcid="insertPersistPropertyName"/>
-		</td>
-		<td>
-			<span jwcid="insertPersistValueClass"/>
-		</td>
-		<td>
-			<span jwcid="insertPersistValue"/>
-		</td>
-	</tr>
-
-</table>
-
-</span>
-</span>
-
-
-	
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowProperties.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowProperties.java
deleted file mode 100644
index 3dd4eab..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowProperties.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.hivemind.service.ClassFabUtils;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.record.PropertyChange;
-import org.apache.tapestry.record.PropertyPersistenceStrategySource;
-
-/**
- * Component of the {@link Inspector}page used to display the persisent properties of the page.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class ShowProperties extends BaseComponent implements PageBeginRenderListener
-{
-
-    public abstract void setProperties(List properties);
-
-    public abstract PropertyChange getChange();
-
-    /** Injected. */
-
-    public abstract PropertyPersistenceStrategySource getPropertySource();
-
-    public void pageBeginRender(PageEvent event)
-    {
-        Inspector inspector = (Inspector) getPage();
-
-        IPage inspectedPage = inspector.getInspectedPage();
-
-        String pageName = inspectedPage.getPageName();
-
-        PropertyPersistenceStrategySource source = getPropertySource();
-
-        Collection properties = source.getAllStoredChanges(pageName);
-
-        // TODO: sorting
-
-        setProperties(new ArrayList(properties));
-    }
-
-    /**
-     * Returns the name of the value's class, if the value is non-null.
-     */
-
-    public String getValueClassName()
-    {
-        Object value = getChange().getNewValue();
-
-        if (value == null)
-            return "<null>";
-
-        return ClassFabUtils.getJavaClassName(value.getClass());
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowProperties.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowProperties.jwc
deleted file mode 100644
index 808e04f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowProperties.jwc
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.inspector.ShowProperties">
-
-  <inject property="propertySource" object="service:tapestry.persist.PropertyPersistenceStrategySource"/>
-  
-  <bean name="persistPropertyClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  <bean name="propertyClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  
-  <component id="ifNoProperties" type="If">
-    <binding name="condition" value="properties.empty"/>
-  </component>
-  
-  <component id="ifHasProperties" type="If">
-    <binding name="condition" value="! properties.empty"/>
-  </component>
-  
-  <component id="e" type="For">
-    <binding name="source" value="properties"/>
-    <binding name="value" value="change"/>
-    <binding name="element" value="literal:tr"/>
-    <binding name="class" value="beans.persistPropertyClass.next"/>
-  </component>
-  
-  <component id="selectComponent" type="DirectLink">
-    <binding name="listener" value="page.listeners.selectComponent"/>
-    <binding name="parameters" value="change.componentPath"/>
-    <binding name="disabled" value="change.componentPath == null"/>
-  </component>
-  
-  <component id="insertPath" type="Insert">
-    <binding name="value" value="change.componentPath"/>
-  </component>
-  
-  <component id="insertPersistPropertyName" type="Insert">
-    <binding name="value" value="change.propertyName"/>
-  </component>
-  
-  <component id="insertPersistValueClass" type="Insert">
-    <binding name="value" value="valueClassName"/>
-  </component>
-  
-  <inject property="adapterFactory" object="service:tapestry.describe.RenderableAdapterFactory"/>
-    
-  <component id="insertPersistValue" type="Delegator">
-    <binding name="delegate" value="adapterFactory.getRenderableAdaptor(change.newValue)"/>
-  </component>  
-  
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowSpecification.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowSpecification.html
deleted file mode 100644
index ea4a91d..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowSpecification.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-<table>
-<tr valign=top>
-<td>
-
-<table class="inspector-data" width="100%">
-	<tr class="even">
-		<th>Specification Resource Location</th>
-		<td><span jwcid="@Insert" value="ognl:inspectedSpecification.specificationLocation"/>
-		<span jwcid="@ShowDescription" description="ognl:inspectedSpecification.description"/>
-		</td>
-	</tr>
-	
-	<tr class="odd">
-		<th>Java class</th>
-		<td><span jwcid="@Insert" value="ognl:inspectedComponent.getClass().getName()"/></td>
-	</tr>
-
-<span jwcid="@If" condition="ognl:! inspectedSpecification.pageSpecification">
-
-	<tr class="even">
-		<th>Allow informal parameters</th>
-		<td><span jwcid="@Insert" value="ognl:inspectedSpecification.allowInformalParameters"/></td>
-	</tr>
-
-	<tr class="odd">
-		<th>Allow body</th>
-		<td><span jwcid="@Insert" value="ognl:inspectedSpecification.allowBody"/></td>
-	</tr>
-	
-</span>
-	
-</table>
-
-<span jwcid="@If" condition="ognl:formalParameterNames">
-
-<table class="inspector-data" width="100%">
-	<tr class="heading">
-		<th colspan="4">Formal Parameters</th>
-	</tr>
-	<tr class="heading">
-		<th>Name</th> <th>Required</th> <th>Java type</th> <th>Binding</th>
-	</tr>
-
-	<tr jwcid="e_formal">
-		<td><span jwcid="@Insert" value="ognl:parameterName"/>
-		<span jwcid="@ShowDescription" description="ognl:parameterSpecification.description"/>
-		</td>
-		<td><span jwcid="@Insert" value="ognl:parameterSpecification.required"/></td>
-		<td><span jwcid="@Insert" value="ognl:parameterSpecification.type"/></td>
-		<td><span jwcid="@Describe" object="ognl:binding"/></td>
-	</tr>
-
-</table>
-</span>
-
-<span jwcid="@If" condition="ognl:informalParameterNames">
-
-<table class="inspector-data" width="100%">
-	<tr class="heading">
-		<th colspan="2">Informal Parameters</th>
-	</tr>
-	<tr class="heading">
-		<th>Name</th> <th>Binding</th>
-	</tr>
-
-	<tr jwcid="e_informal">
-		<td><span jwcid="@Insert" value="ognl:parameterName"/></td>
-		<td><span jwcid="@Describe" object="ognl:binding"/></td>
-	</tr>
-
-</table>
-</span>
-
-<span jwcid="@If" condition="ognl:assetNames">
-
-<table class="inspector-data"  width="100%">
-	<tr class="heading">
-		<th colspan="2">Assets</th>
-	</tr>
-	<tr class="heading">
-		<th>Name</th> <th>Asset</th>
-	</tr>
-
-	<tr jwcid="e_asset">
-		<td><span jwcid="@Insert" value="ognl:assetName"/></td>
-		<td><span jwcid="@Describe" object="ognl:asset"/></td>
-	</tr>
-
-
-</table>
-</span>
-
-<span jwcid="@If" condition="ognl:sortedPropertyNames">
-
-<table class="inspector-data" width="100%">
-	<tr class="heading">
-		<th colspan="2">Properties</th>
-	</tr>
-	<tr class="heading">
-		<th>Name</th> <th>Property</th>
-	</tr>
-
-	<tr jwcid="e_property">
-		<th><span jwcid="@Insert" value="ognl:propertyName"/></th>
-		<td><span jwcid="@Insert" value="ognl:propertyValue"/></td>
-	</tr>
-
-</table>
-</span>
-
-<span jwcid="@If" condition="ognl:beanNames">
-
-<table class="inspector-data" width="100%">
-	<tr class="heading">
-		<th colspan="3">Helper Beans</th>
-	</tr>
-	
-	<tr class="heading">
-		<th>Name</th> <th>Class</th> <th>Lifecycle</th>
-	</tr>
-	
-	<tr jwcid="e_bean">
-		<td><span jwcid="@Insert" value="ognl:beanName"/></td>
-		<td><span jwcid="@Insert" value="ognl:beanSpecification.className"/></td>
-		<td><span jwcid="@Insert" value="ognl:beanSpecification.lifecycle.name"/></td>
-	</tr>
-	
-</table>
-</span>
-
-</td>
-
-<td>
-<span jwcid="@If" condition="ognl:sortedComponents">
-
-<table border="0" class="inspector-data">
-
-	<tr class="heading">
-		<th colspan="2">Embedded Components</th>
-	</tr>
-	<tr class="heading">
-		<th>Id</th> <th>Type</th>
-	</tr>
-
-	<tr jwcid="e_components">
-		<td>
-			<a jwcid="selectComponent"><span jwcid="@Insert" value="ognl:currentComponent.id"/></a>
-		</td>
-		<td>
-			<span jwcid="@Insert" value="ognl:currentComponent.containedComponent.type"/>
-		</td>
-	</tr>
-
-</table>
-</span>
-
-</td>
-</tr>
-</table>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowSpecification.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowSpecification.java
deleted file mode 100644
index 8e62bea..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowSpecification.java
+++ /dev/null
@@ -1,334 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEndRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.spec.IBeanSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-
-/**
- * Component of the {@link Inspector} page used to display the specification, parameters and
- * bindings and assets of the inspected component.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class ShowSpecification extends BaseComponent implements PageBeginRenderListener,
-        PageEndRenderListener
-{
-    private IComponent _inspectedComponent;
-
-    private IComponentSpecification _inspectedSpecification;
-
-    private String _parameterName;
-
-    private String _assetName;
-
-    private List _sortedComponents;
-
-    private List _assetNames;
-
-    private List _formalParameterNames;
-
-    private List _informalParameterNames;
-
-    private List _sortedPropertyNames;
-
-    private String _propertyName;
-
-    private List _beanNames;
-
-    private String _beanName;
-
-    private IBeanSpecification _beanSpecification;
-
-    /**
-     * 
-     * @author hls
-     */
-    private static class ComponentComparitor implements Comparator
-    {
-        public int compare(Object left, Object right)
-        {
-            IComponent leftComponent;
-            String leftId;
-            IComponent rightComponent;
-            String rightId;
-
-            if (left == right)
-                return 0;
-
-            leftComponent = (IComponent) left;
-            rightComponent = (IComponent) right;
-
-            leftId = leftComponent.getId();
-            rightId = rightComponent.getId();
-
-            return leftId.compareTo(rightId);
-        }
-    }
-
-    /**
-     * Clears all cached information about the component and such after each render (including the
-     * rewind phase render used to process the tab view).
-     * 
-     * @since 1.0.5
-     */
-
-    public void pageEndRender(PageEvent event)
-    {
-        _inspectedComponent = null;
-        _inspectedSpecification = null;
-        _parameterName = null;
-        _assetName = null;
-        _sortedComponents = null;
-        _assetNames = null;
-        _formalParameterNames = null;
-        _informalParameterNames = null;
-        _sortedPropertyNames = null;
-        _propertyName = null;
-        _beanNames = null;
-        _beanName = null;
-        _beanSpecification = null;
-    }
-
-    /**
-     * Gets the inspected component and specification from the {@link Inspector} page.
-     * 
-     * @since 1.0.5
-     */
-
-    public void pageBeginRender(PageEvent event)
-    {
-        Inspector inspector = (Inspector) getPage();
-
-        _inspectedComponent = inspector.getInspectedComponent();
-        _inspectedSpecification = _inspectedComponent.getSpecification();
-    }
-
-    public IComponent getInspectedComponent()
-    {
-        return _inspectedComponent;
-    }
-
-    public IComponentSpecification getInspectedSpecification()
-    {
-        return _inspectedSpecification;
-    }
-
-    /**
-     * Returns a sorted list of formal parameter names.
-     */
-
-    public List getFormalParameterNames()
-    {
-        if (_formalParameterNames == null)
-            _formalParameterNames = sort(_inspectedSpecification.getParameterNames());
-
-        return _formalParameterNames;
-    }
-
-    /**
-     * Returns a sorted list of informal parameter names. This is the list of all bindings, with the
-     * list of parameter names removed, sorted.
-     */
-
-    public List getInformalParameterNames()
-    {
-        if (_informalParameterNames != null)
-            return _informalParameterNames;
-
-        Collection names = _inspectedComponent.getBindingNames();
-        if (names != null && names.size() > 0)
-        {
-            _informalParameterNames = new ArrayList(names);
-
-            // Remove the names of any formal parameters. This leaves
-            // just the names of informal parameters (informal parameters
-            // are any parameters/bindings that don't match a formal parameter
-            // name).
-
-            names = _inspectedSpecification.getParameterNames();
-            if (names != null)
-                _informalParameterNames.removeAll(names);
-
-            Collections.sort(_informalParameterNames);
-        }
-
-        return _informalParameterNames;
-    }
-
-    public String getParameterName()
-    {
-        return _parameterName;
-    }
-
-    public void setParameterName(String value)
-    {
-        _parameterName = value;
-    }
-
-    /**
-     * Returns the {@link org.apache.tapestry.spec.ParameterSpecification} corresponding to the
-     * value of the parameterName property.
-     */
-
-    public IParameterSpecification getParameterSpecification()
-    {
-        return _inspectedSpecification.getParameter(_parameterName);
-    }
-
-    /**
-     * Returns the {@link IBinding} corresponding to the value of the parameterName property.
-     */
-
-    public IBinding getBinding()
-    {
-        return _inspectedComponent.getBinding(_parameterName);
-    }
-
-    public void setAssetName(String value)
-    {
-        _assetName = value;
-    }
-
-    public String getAssetName()
-    {
-        return _assetName;
-    }
-
-    /**
-     * Returns the {@link IAsset} corresponding to the value of the assetName property.
-     */
-
-    public IAsset getAsset()
-    {
-        return (IAsset) _inspectedComponent.getAssets().get(_assetName);
-    }
-
-    /**
-     * Returns a sorted list of asset names, or null if the component contains no assets.
-     */
-
-    public List getAssetNames()
-    {
-        if (_assetNames == null)
-            _assetNames = sort(_inspectedComponent.getAssets().keySet());
-
-        return _assetNames;
-    }
-
-    public List getSortedComponents()
-    {
-        if (_sortedComponents != null)
-            return _sortedComponents;
-
-        Inspector inspector = (Inspector) getPage();
-        IComponent inspectedComponent = inspector.getInspectedComponent();
-
-        // Get a Map of the components and simply return null if there
-        // are none.
-
-        Map components = inspectedComponent.getComponents();
-
-        _sortedComponents = new ArrayList(components.values());
-
-        Collections.sort(_sortedComponents, new ComponentComparitor());
-
-        return _sortedComponents;
-    }
-
-    public abstract void setCurrentComponent(IComponent value);
-
-    public abstract IComponent getCurrentComponent();
-
-    /**
-     * Returns a list of the properties for the component (from its specification), or null if the
-     * component has no properties.
-     */
-
-    public List getSortedPropertyNames()
-    {
-        if (_sortedPropertyNames == null)
-            _sortedPropertyNames = sort(_inspectedSpecification.getPropertyNames());
-
-        return _sortedPropertyNames;
-    }
-
-    public void setPropertyName(String value)
-    {
-        _propertyName = value;
-    }
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    public String getPropertyValue()
-    {
-        return _inspectedSpecification.getProperty(_propertyName);
-    }
-
-    public List getBeanNames()
-    {
-        if (_beanNames == null)
-            _beanNames = sort(_inspectedSpecification.getBeanNames());
-
-        return _beanNames;
-    }
-
-    public void setBeanName(String value)
-    {
-        _beanName = value;
-        _beanSpecification = _inspectedSpecification.getBeanSpecification(_beanName);
-    }
-
-    public String getBeanName()
-    {
-        return _beanName;
-    }
-
-    public IBeanSpecification getBeanSpecification()
-    {
-        return _beanSpecification;
-    }
-
-    private List sort(Collection c)
-    {
-        if (c == null || c.size() == 0)
-            return null;
-
-        List result = new ArrayList(c);
-
-        Collections.sort(result);
-
-        return result;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowSpecification.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowSpecification.jwc
deleted file mode 100644
index f5b5395..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowSpecification.jwc
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd" > 
-  
-<component-specification class="org.apache.tapestry.contrib.inspector.ShowSpecification">
-
-  <bean name="formalClass" class="org.apache.tapestry.bean.EvenOdd"/>           
-  <bean name="informalClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  <bean name="assetClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  <bean name="propertyClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  <bean name="componentClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  <bean name="beanClass" class="org.apache.tapestry.bean.EvenOdd"/>
-        
-  <component id="e_formal" type="For">
-    <binding name="source" value="formalParameterNames"/>
-    <binding name="value" value="parameterName"/>
-  	<binding name="element" value="literal:tr"/>
-    <binding name="class" value="beans.formalClass.next"/>
-  </component>
-     
-  
-  <component id="e_informal" type="For"> 
-    <binding name="source" value="informalParameterNames"/>
-    <binding name="value" value="parameterName"/>
-  	<binding name="element" value="literal:tr"/>
-    <binding name="class" value="beans.informalClass.next"/>
-  </component>
-
-  <component id="e_asset" type="For">
-    <binding name="source" value="assetNames"/>
-    <binding name="value" value="assetName"/>
-  	<binding name="element" value="literal:tr"/>
-    <binding name="class" value="beans.assetClass.next"/>
-  </component>
-  
-  <component id="e_components" type="For">
-    <binding name="source" value="sortedComponents"/>
-    <binding name="value" value="currentComponent"/>
-    <binding name="element" value="literal:tr"/>
-    <binding name="class" value="beans.componentClass.next"/>
-  </component>
-
-  <component id="selectComponent" type="DirectLink">
-    <binding name="listener" value="page.listeners.selectComponent"/>
-    <binding name="parameters" value="currentComponent.idPath"/>
-  </component>
-
-  <component id="e_property" type="For">
-    <binding name="source" value="sortedPropertyNames"/>
-    <binding name="value" value="propertyName"/>
-  	<binding name="element" value="literal:tr"/>
-    <binding name="class" value="beans.propertyClass.next"/>
-  </component>
-      
-  <component id="e_bean" type="For">
-  	<binding name="source" value="beanNames"/>
-  	<binding name="value" value="beanName"/>
-  	<binding name="element" value="literal:tr"/>
-  	<binding name="class" value="beans.beanClass.next"/>
-  </component>
-  	
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowTemplate.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowTemplate.html
deleted file mode 100644
index c4fe07a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowTemplate.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="$content$">
-<span jwcid="ifNoTemplate">
-<span class="message">Component does not have a template.
-</span>
-</span>
-
-<span jwcid="ifTemplate">
-<table class="template">
-	<tr>
-		<td><span jwcid="insertTemplate"/></td>
-	</tr>
-</table>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowTemplate.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowTemplate.java
deleted file mode 100644
index 5e50a2e..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowTemplate.java
+++ /dev/null
@@ -1,322 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.DirectServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.parse.CloseToken;
-import org.apache.tapestry.parse.ComponentTemplate;
-import org.apache.tapestry.parse.LocalizationToken;
-import org.apache.tapestry.parse.OpenToken;
-import org.apache.tapestry.parse.TemplateToken;
-import org.apache.tapestry.parse.TextToken;
-import org.apache.tapestry.parse.TokenType;
-import org.apache.tapestry.services.TemplateSource;
-
-/**
- * Component of the {@link Inspector}page used to display the ids and types of all embedded
- * components.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class ShowTemplate extends BaseComponent implements IDirect
-{
-    /** @since 4.0 */
-    public abstract TemplateSource getTemplateSource();
-
-    /** @since 4.1 */
-    public abstract IEngineService getDirectService();
-    
-    public boolean getHasTemplate()
-    {
-        Inspector inspector;
-
-        inspector = (Inspector) getPage();
-
-        // Components that inherit from BaseComponent have templates,
-        // others do not.
-
-        return inspector.getInspectedComponent() instanceof BaseComponent;
-    }
-
-    public IRender getTemplateDelegate()
-    {
-        return new IRender()
-        {
-            public void render(IMarkupWriter writer, IRequestCycle cycle)
-            {
-                writeTemplate(writer, cycle);
-            }
-        };
-    }
-
-    /**
-     * Writes the HTML template for the component. When &lt;jwc&gt; tags are written, the id is made
-     * a link (that selects the named component). We use some magic to accomplish this, creating
-     * links as if we were a {@link DirectLink} component, and attributing those links to the
-     * captive {@link DirectLink} component embedded here.
-     */
-
-    private void writeTemplate(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IComponent inspectedComponent = getInspectedComponent();
-        ComponentTemplate template = null;
-
-        try
-        {
-            template = getTemplateSource().getTemplate(cycle, inspectedComponent);
-        }
-        catch (Exception ex)
-        {
-            return;
-        }
-
-        writer.begin("pre");
-
-        int count = template.getTokenCount();
-
-        for (int i = 0; i < count; i++)
-        {
-            TemplateToken token = template.getToken(i);
-            TokenType type = token.getType();
-
-            if (type == TokenType.TEXT)
-            {
-                write(writer, (TextToken) token);
-                continue;
-            }
-
-            if (type == TokenType.CLOSE)
-            {
-                write(writer, (CloseToken) token);
-
-                continue;
-            }
-
-            if (token.getType() == TokenType.LOCALIZATION)
-            {
-
-                write(writer, (LocalizationToken) token);
-                continue;
-            }
-
-            if (token.getType() == TokenType.OPEN)
-            {
-                boolean nextIsClose = (i + 1 < count)
-                        && (template.getToken(i + 1).getType() == TokenType.CLOSE);
-
-                write(writer, nextIsClose, (OpenToken) token);
-
-                if (nextIsClose)
-                    i++;
-
-                continue;
-            }
-
-            // That's all the types known at this time.
-        }
-
-        writer.end(); // <pre>
-    }
-
-    /** @since 3.0 * */
-
-    private IComponent getInspectedComponent()
-    {
-        Inspector page = (Inspector) getPage();
-
-        return page.getInspectedComponent();
-    }
-
-    /** @since 3.0 * */
-
-    private void write(IMarkupWriter writer, TextToken token)
-    {
-        // Print the section of the template ... print() will
-        // escape and invalid characters as HTML entities. Also,
-        // we show the full stretch of text, not the trimmed version.
-
-        writer.print(token.getTemplateDataAsString());
-    }
-
-    /** @since 3.0 * */
-
-    private void write(IMarkupWriter writer, CloseToken token)
-    {
-        writer.begin("span");
-        writer.attribute("class", "jwc-tag");
-
-        writer.print("</");
-        writer.print(token.getTag());
-        writer.print(">");
-
-        writer.end(); // <span>
-    }
-
-    /** @since 3.0 * */
-
-    private void write(IMarkupWriter writer, LocalizationToken token)
-    {
-        IComponent component = getInspectedComponent();
-
-        writer.begin("span");
-        writer.attribute("class", "jwc-tag");
-
-        writer.print("<span key=\"");
-        writer.print(token.getKey());
-        writer.print('"');
-
-        Map attributes = token.getAttributes();
-        if (attributes != null && !attributes.isEmpty())
-        {
-            Iterator it = attributes.entrySet().iterator();
-            while (it.hasNext())
-            {
-                Map.Entry entry = (Map.Entry) it.next();
-                String attributeName = (String) entry.getKey();
-                String attributeValue = (String) entry.getValue();
-
-                writer.print(' ');
-                writer.print(attributeName);
-                writer.print("=\"");
-                writer.print(attributeValue);
-                writer.print('"');
-
-            }
-        }
-
-        writer.print('>');
-        writer.begin("span");
-        writer.attribute("class", "localized-string");
-
-        writer.print(component.getMessages().getMessage(token.getKey()));
-        writer.end(); // <span>
-
-        writer.print("</span>");
-
-        writer.end(); // <span>
-    }
-
-    /** @since 3.0 * */
-
-    private void write(IMarkupWriter writer, boolean nextIsClose, OpenToken token)
-    {
-        IComponent component = getInspectedComponent();
-        IEngineService service = getDirectService();
-
-        // Each id references a component embedded in the inspected component.
-        // Get that component.
-
-        String id = token.getId();
-        IComponent embedded = component.getComponent(id);
-        Object[] serviceParameters = new Object[]
-        { embedded.getIdPath() };
-
-        // Build a URL to select that component, as if by the captive
-        // component itself (it's a Direct).
-
-        DirectServiceParameter dsp = new DirectServiceParameter(this, serviceParameters);
-        ILink link = service.getLink(false, dsp);
-
-        writer.begin("span");
-        writer.attribute("class", "jwc-tag");
-
-        writer.print("<");
-        writer.print(token.getTag());
-
-        writer.print(" jwcid=\"");
-
-        writer.begin("span");
-        writer.attribute("class", "jwc-id");
-
-        writer.begin("a");
-        writer.attribute("href", link.getURL());
-        writer.print(id);
-
-        writer.end(); // <a>
-        writer.end(); // <span>
-        writer.print('"');
-
-        Map attributes = token.getAttributesMap();
-
-        if (attributes != null)
-        {
-            Iterator ii = attributes.entrySet().iterator();
-
-            while (ii.hasNext())
-            {
-                Map.Entry e = (Map.Entry) ii.next();
-
-                String value = (String) e.getValue();
-
-                writer.print(' ');
-                writer.print(e.getKey().toString());
-                writer.print("=\"");
-                writer.print(value);
-                writer.print('"');
-            }
-        }
-
-        // Collapse an open & close down to a single tag.
-
-        if (nextIsClose)
-            writer.print('/');
-
-        writer.print('>');
-        writer.end(); // <span>
-    }
-
-    /**
-     * Invoked when a component id is clicked.
-     */
-
-    public void trigger(IRequestCycle cycle)
-    {
-        Inspector inspector = (Inspector) getPage();
-
-        String componentId = (String) cycle.getListenerParameters()[0];
-        inspector.selectComponent(componentId);
-
-        IComponent newComponent = inspector.getInspectedComponent();
-
-        // If the component is not a BaseComponent then it won't have
-        // a template, so switch to the specification view.
-
-        if (!(newComponent instanceof BaseComponent))
-            inspector.setView(View.SPECIFICATION);
-    }
-
-    /**
-     * Always returns true.
-     * 
-     * @since 2.3
-     */
-
-    public boolean isStateful()
-    {
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowTemplate.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowTemplate.jwc
deleted file mode 100644
index f65ae66..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowTemplate.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.inspector.ShowTemplate">
-  <component id="ifNoTemplate" type="If">
-    <binding name="condition" value="ognl:! hasTemplate"/>
-  </component>
-  
-  <component id="ifTemplate" type="If">
-    <binding name="condition" value="ognl:hasTemplate"/>
-  </component>
-  
-  <component id="insertTemplate" type="Delegator">
-    <binding name="delegate" value="ognl:templateDelegate"/>
-  </component>
-  
-  <inject property="templateSource" object="infrastructure:templateSource"/>
-  <inject property="directService" object="service:tapestry.services.Direct" />
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_HRp4.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_HRp4.gif
deleted file mode 100644
index 7b695d0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_HRp4.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_Hp3.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_Hp3.gif
deleted file mode 100644
index 33062cb..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_Hp3.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_NBanner.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_NBanner.gif
deleted file mode 100644
index 896f81b..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_NBanner.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_NRp2.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_NRp2.gif
deleted file mode 100644
index 6700d10..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_Np1.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_Np1.gif
deleted file mode 100644
index 5f8b7db..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Specification_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_HRp4.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_HRp4.gif
deleted file mode 100644
index 16e1792..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_HRp4.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_Hp3.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_Hp3.gif
deleted file mode 100644
index 2bc30ee..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_Hp3.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_NBanner.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_NBanner.gif
deleted file mode 100644
index e250138..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_NBanner.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_NRp2.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_NRp2.gif
deleted file mode 100644
index b7e2175..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_Np1.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_Np1.gif
deleted file mode 100644
index a83fb37..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/Template_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/View.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/View.java
deleted file mode 100644
index c47dcdc..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/View.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-/**
- * Identifies different views for the inspector.
- * 
- * @author Howard Lewis Ship
- */
-
-public class View
-{
-    /**
-     * View that displays the basic specification information, plus formal and informal parameters
-     * (and related bindings), and assets.
-     */
-
-    public static final String SPECIFICATION = "SPECIFICATION";
-
-    /**
-     * View that displays the HTML template for the component, if one exists.
-     */
-
-    public static final String TEMPLATE = "TEMPLATE";
-
-    /**
-     * View that shows the persistent properties of the page containing the inspected component.
-     */
-
-    public static final String PROPERTIES = "PROPERTIES";
-
-    /**
-     * View that shows information about the {@link org.apache.tapestry.IEngine}.
-     */
-
-    public static final String ENGINE = "ENGINE";
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ViewTabs.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ViewTabs.html
deleted file mode 100644
index 9e224d7..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ViewTabs.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-<table border="0" cellpadding="0" cellspacing="2">
-	<tr>
-		<td>
-<span jwcid="@For" source="ognl:views" value="ognl:view">
-			<a jwcid="select@DirectLink" listener="listener:selectTab" parameters="ognl:view"><img 
-				jwcid="@Rollover" image="ognl:viewImage" mouseOver="ognl:focusImage"
-				width="120" height="19"/></a>
-</span>
-		</td>
-	</tr>
-	<tr>
-		<td><img jwcid="@Image" image="ognl:bannerImage"/></td>
-	</tr>
-	<tr>
-		<td><span jwcid="@RenderBody"/></td>
-	</tr>
-</table>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ViewTabs.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ViewTabs.java
deleted file mode 100644
index da48eea..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ViewTabs.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-
-/**
- * Component of the {@link Inspector} page used to select the view.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class ViewTabs extends BaseComponent
-{
-    private static String[] _views =
-    { View.SPECIFICATION, View.TEMPLATE, View.PROPERTIES, View.ENGINE };
-
-    public String[] getViews()
-    {
-        return _views;
-    }
-
-    public abstract void setView(String value);
-
-    public abstract String getView();
-
-    private IAsset getImageForView(boolean focus)
-    {
-        Inspector inspector = (Inspector) getPage();
-
-        String view = getView();
-
-        boolean selected = view.equals(inspector.getView());
-
-        StringBuffer buffer = new StringBuffer(view);
-
-        if (selected)
-            buffer.append("_selected");
-
-        if (focus)
-            buffer.append("_focus");
-
-        String key = buffer.toString();
-        
-        return (IAsset) getAssets().get(key);
-    }
-
-    public IAsset getViewImage()
-    {
-        return getImageForView(false);
-    }
-
-    public IAsset getFocusImage()
-    {
-        return getImageForView(true);
-    }
-
-    public IAsset getBannerImage()
-    {
-        Inspector inspector = (Inspector) getPage();
-        String selectedView = inspector.getView();
-        
-        String key = selectedView + "_banner";
-        
-        return (IAsset) getAssets().get(key);
-    }
-
-    public void selectTab(String view)
-    {
-        Inspector inspector = (Inspector) getPage();
-        inspector.setView(view);
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ViewTabs.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ViewTabs.jwc
deleted file mode 100644
index 04a1f06..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ViewTabs.jwc
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.inspector.ViewTabs">
-    
-  <private-asset name="SPECIFICATION" resource-path="Specification_Np1.gif"/>
-  <private-asset name="SPECIFICATION_selected" resource-path="Specification_Hp3.gif"/>
-  <private-asset name="SPECIFICATION_focus" resource-path="Specification_NRp2.gif"/>
-  <private-asset name="SPECIFICATION_selected_focus" resource-path="Specification_HRp4.gif"/>
-  <private-asset name="SPECIFICATION_banner" resource-path="Specification_NBanner.gif"/>
-  <private-asset name="TEMPLATE" resource-path="Template_Np1.gif"/>
-  <private-asset name="TEMPLATE_selected" resource-path="Template_Hp3.gif"/>
-  <private-asset name="TEMPLATE_focus" resource-path="Template_NRp2.gif"/>
-  <private-asset name="TEMPLATE_selected_focus" resource-path="Template_HRp4.gif"/>
-  <private-asset name="TEMPLATE_banner" resource-path="Template_NBanner.gif"/>
-  <private-asset name="PROPERTIES" resource-path="Properties_Np1.gif"/>
-  <private-asset name="PROPERTIES_selected" resource-path="Properties_Hp3.gif"/>
-  <private-asset name="PROPERTIES_focus" resource-path="Properties_NRp2.gif"/>
-  <private-asset name="PROPERTIES_selected_focus" resource-path="Properties_HRp4.gif"/>
-  <private-asset name="PROPERTIES_banner" resource-path="Properties_NBanner.gif"/>
-  <private-asset name="ENGINE" resource-path="Engine_Np1.gif"/>
-  <private-asset name="ENGINE_selected" resource-path="Engine_Hp3.gif"/>
-  <private-asset name="ENGINE_focus" resource-path="Engine_NRp2.gif"/>
-  <private-asset name="ENGINE_selected_focus" resource-path="Engine_HRp4.gif"/>
-  <private-asset name="ENGINE_banner" resource-path="Engine_NBanner.gif"/>
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/info.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/info.gif
deleted file mode 100644
index be3d1d1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/info.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/inspector-rollover.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/inspector-rollover.gif
deleted file mode 100644
index df0d3ef..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/inspector-rollover.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/package.html
deleted file mode 100644
index 968eec0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/package.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Implementation of the Tapestry <em>Inspector</em>, a specialized page
-used to dynamically introspect the construction of an application while
-it runs.  The {@link org.apache.tapestry.contrib.inspector.InspectorButton} component
-creates an icon on the page that raises the Inspector in a seperate window.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/tapestry-logo.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/tapestry-logo.gif
deleted file mode 100644
index 82ad636..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/tapestry-logo.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/BooleanParameter.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/BooleanParameter.java
deleted file mode 100644
index afa1275..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/BooleanParameter.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  Wrapper around a boolean parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @since 2.3
- *
- */
-
-public final class BooleanParameter implements IParameter
-{
-    public static final BooleanParameter TRUE = new BooleanParameter(true);
-
-    public static final BooleanParameter FALSE = new BooleanParameter(false);
-    
-    private boolean _value;
-
-    private BooleanParameter(boolean value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setBoolean(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Boolean<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/DoubleParameter.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/DoubleParameter.java
deleted file mode 100644
index 04c6cdb..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/DoubleParameter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  A wrapper around a double parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @since 2.3
- * 
- **/
-
-public class DoubleParameter implements IParameter
-{
-    private double _value;
-
-    public DoubleParameter(double value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setDouble(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Double<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/FloatParameter.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/FloatParameter.java
deleted file mode 100644
index 652bb3c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/FloatParameter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  A wrapper around a float parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @since 2.3
- * 
- **/
-
-public class FloatParameter implements IParameter
-{
-    private float _value;
-
-    public FloatParameter(float value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setFloat(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Float<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/IParameter.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/IParameter.java
deleted file mode 100644
index 3ac7ed1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/IParameter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  Represents a parameter within a dynamically generated SQL statement.
- *
- *
- *  @author Howard Lewis Ship
- *  @since 2.3
- *  @see org.apache.tapestry.contrib.jdbc.ParameterizedStatement
- * 
- **/
-
-public interface IParameter
-{
-    /**
-     *  Invokes the appropriate setXXX() method on the 
-     *  {@link java.sql.PreparedStatement}.
-     * 
-     **/
-    
-    void set(PreparedStatement statement, int index)
-    throws SQLException;
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/IStatement.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/IStatement.java
deleted file mode 100644
index 89faed8..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/IStatement.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-/**
- *  A wrapper around {@link java.sql.Statement} or 
- *  {@link java.sql.PreparedStatement} which hides the differences
- *  between the two.  
- *
- *  @author Howard Lewis Ship
- *  @see org.apache.tapestry.contrib.jdbc.StatementAssembly#createStatement(Connection)
- * 
- **/
-
-public interface IStatement
-{
-    /**
-     * Returns the SQL associated with this statement.
-     *
-     **/
-
-    String getSQL();
-
-    /**
-     *  Returns the underlying {@link java.sql.Statement} 
-     *  (or {@link java.sql.PreparedStatement}).
-     *
-     **/
-
-    Statement getStatement();
-
-    /**
-     *  Closes the underlying statement, and nulls the reference to it.
-     *
-     **/
-
-    void close() throws SQLException;
-
-    /**
-     *  Executes the statement as a query, returning a {@link ResultSet}.
-     *
-     **/
-
-    ResultSet executeQuery() throws SQLException;
-
-    /**
-     *  Executes the statement as an update, returning the number of rows
-     *  affected.
-     *
-     **/
-
-    int executeUpdate() throws SQLException;
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/IntegerParameter.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/IntegerParameter.java
deleted file mode 100644
index 23548a2..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/IntegerParameter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  A wrapper around an integer parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @since 2.3
- * 
- **/
-
-public class IntegerParameter implements IParameter
-{
-    private int _value;
-
-    public IntegerParameter(int value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setInt(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Integer<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/LongParameter.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/LongParameter.java
deleted file mode 100644
index fa97ebc..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/LongParameter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  Wrapper around long parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @since 2.3
- * 
- **/
-
-public class LongParameter implements IParameter
-{
-    private long _value;
-
-    public LongParameter(long value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setLong(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Long<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/ObjectParameter.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/ObjectParameter.java
deleted file mode 100644
index b3f391a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/ObjectParameter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  An arbitrary object parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @since 2.3
- * 
- **/
-
-public class ObjectParameter implements IParameter
-{
-    private Object _value;
-
-    public ObjectParameter(Object value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setObject(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Object<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/ParameterizedStatement.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/ParameterizedStatement.java
deleted file mode 100644
index bd1bb57..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/ParameterizedStatement.java
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- *  A wrapper around {@link PreparedStatement}.
- *
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class ParameterizedStatement implements IStatement
-{
-    private static final Log LOG = LogFactory.getLog(ParameterizedStatement.class);
-
-    private String _sql;
-    private PreparedStatement _statement;
-    private IParameter[] _parameters;
-
-    /**
-     *  Create a new instance; the parameters list is copied.
-     * 
-     *  @param SQL the SQL to execute (see {@link Connection#prepareStatement(java.lang.String)})
-     *  @param connection the JDBC connection to use
-     *  @param parameters list of {@link IParameter}
-     * 
-     **/
-    
-    public ParameterizedStatement(String SQL, Connection connection, List parameters) throws SQLException
-    {
-        _sql = SQL;
-
-        _statement = connection.prepareStatement(SQL);
-
-        _parameters = (IParameter[]) parameters.toArray(new IParameter[parameters.size()]);
-
-        for (int i = 0; i < _parameters.length; i++)
-        {
-            // JDBC numbers things from 1, not 0.
-
-            _parameters[i].set(_statement, i + 1);
-        }
-    }
-
-    /**
-     * Returns the SQL associated with this statement.
-     *
-     **/
-
-    public String getSQL()
-    {
-        return _sql;
-    }
-
-    /**
-     *  Returns the underlying or {@link PreparedStatement}.
-     *
-     **/
-
-    public Statement getStatement()
-    {
-        return _statement;
-    }
-
-    /**
-     *  Closes the underlying statement, and nulls the reference to it.
-     *
-     **/
-
-    public void close() throws SQLException
-    {
-        _statement.close();
-
-        _statement = null;
-        _sql = null;
-    }
-
-    /**
-     *  Executes the statement as a query, returning a {@link ResultSet}.
-     *
-     **/
-
-    public ResultSet executeQuery() throws SQLException
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Executing query: " + this);
-
-        return _statement.executeQuery();
-    }
-
-    /**
-     *  Executes the statement as an update, returning the number of rows
-     *  affected.
-     *
-     **/
-
-    public int executeUpdate() throws SQLException
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Executing update: " + this);
-
-        return _statement.executeUpdate();
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("ParameterizedStatement@");
-        buffer.append(Integer.toHexString(hashCode()));
-        buffer.append("[SQL=\n<");
-        buffer.append(_sql);
-        buffer.append("\n>");
-
-        for (int i = 0; i < _parameters.length; i++)
-        {
-            IParameter parameter = _parameters[i];
-
-            buffer.append(" ?");
-            buffer.append(i + 1);
-            buffer.append('=');
-
-            buffer.append(parameter);
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/ShortParameter.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/ShortParameter.java
deleted file mode 100644
index 2e64a8e..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/ShortParameter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  A wrapper around a short parameter.  
- *
- *
- *  @author Howard Lewis Ship
- *  @since 2.3
- * 
- **/
-
-public class ShortParameter implements IParameter
-{
-    private short _value;
-
-    public ShortParameter(short value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setShort(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Short<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/SimpleStatement.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/SimpleStatement.java
deleted file mode 100644
index 832a665..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/SimpleStatement.java
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- *  A wrapper around {@link Statement}.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public class SimpleStatement implements IStatement
-{
-    private static final Log LOG = LogFactory.getLog(SimpleStatement.class);
-
-    private String _sql;
-    private Statement _statement;
-
-    public SimpleStatement(String SQL, Connection connection) throws SQLException
-    {
-        _sql = SQL;
-        _statement = connection.createStatement();
-    }
-
-    public SimpleStatement(String SQL, Connection connection, int resultSetType, int resultSetConcurrency)
-        throws SQLException
-    {
-        _sql = SQL;
-        _statement = connection.createStatement(resultSetType, resultSetConcurrency);
-    }
-
-    /**
-     * Returns the SQL associated with this statement.
-     *
-     **/
-
-    public String getSQL()
-    {
-        return _sql;
-    }
-
-    /**
-     *  Returns the underlying {@link Statement}.
-     *
-     **/
-
-    public Statement getStatement()
-    {
-        return _statement;
-    }
-
-    /**
-     *  Closes the underlying statement, and nulls the reference to it.
-     *
-     **/
-
-    public void close() throws SQLException
-    {
-        _statement.close();
-
-        _statement = null;
-        _sql = null;
-    }
-
-    /**
-     *  Executes the statement as a query, returning a {@link ResultSet}.
-     *
-     **/
-
-    public ResultSet executeQuery() throws SQLException
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Executing query: " + this);
-
-        return _statement.executeQuery(_sql);
-    }
-
-    /**
-     *  Executes the statement as an update, returning the number of rows
-     *  affected.
-     *
-     **/
-
-    public int executeUpdate() throws SQLException
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Executing update: " + this);
-
-        return _statement.executeUpdate(_sql);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer("SimpleStatement@");
-        buffer.append(Integer.toHexString(hashCode()));
-
-        buffer.append("[SQL=<\n");
-        buffer.append(_sql);
-        buffer.append("\n>]");
-
-        return buffer.toString();
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/StatementAssembly.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/StatementAssembly.java
deleted file mode 100644
index 4c579eb..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/StatementAssembly.java
+++ /dev/null
@@ -1,478 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-/**
- *  Class for creating and executing JDBC statements.  Allows statements to be assembled
- *  incrementally (like a {@link StringBuffer}), but also tracks parameters, shielding
- *  the developer from the differences between constructing and 
- *  using a JDBC 
- *  {@link java.sql.Statement} and 
- *  a JDBC {@link java.sql.PreparedStatement}.  This class is somewhat skewed towards
- *  Oracle, which works more efficiently with prepared staments than
- *  simple SQL.
- * 
- *  <p>In addition, implements {@link #toString()} in a useful way (you can see the
- *  SQL and parameters), which is invaluable when debugging.
- * 
- *  <p>{@link #addParameter(int)} (and all overloaded versions of it for scalar types)
- *  adds a "?" to the statement and records the parameter value.
- * 
- *  <p>{@link #addParameter(Integer)} (and all overloaded version of it for wrapper
- *  types) does the same ... unless the value is null, in which case "NULL" is
- *  inserted into the statement.
- * 
- *  <p>{@link #addParameterList(int[], String)} (and all overloaded versions of it)
- *  simply invokes the appropriate {@link #addParameter(int)}, adding the
- *  separator in between parameters.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public class StatementAssembly
-{
-    public static final String SEP = ", ";
-    
-    private static final String NULL = "NULL";   
-    
-    private StringBuffer _buffer = new StringBuffer();
-
-    /**
-     *  List of {@link IParameter}.
-     * 
-     **/
-
-    private List _parameters;
-
-    private int _lineLength;
-    private int _maxLineLength = 80;
-    private int _indent = 5;
-
-    /**
-     *  Default constructor; uses a maximum line length of 80 and an indent of 5.
-     *
-     **/
-
-    public StatementAssembly()
-    {
-    }
-
-    public StatementAssembly(int maxLineLength, int indent)
-    {
-        _maxLineLength = maxLineLength;
-        _indent = indent;
-    }
-
-    /**
-     *  Clears the assembly, preparing it for re-use.
-     * 
-     *  @since 1.0.7
-     * 
-     **/
-
-    public void clear()
-    {
-        _buffer.setLength(0);
-        _lineLength = 0;
-
-        if (_parameters != null)
-            _parameters.clear();
-    }
-
-    /**
-     *  Maximum length of a line.
-     *
-     **/
-
-    public int getMaxLineLength()
-    {
-        return _maxLineLength;
-    }
-
-    /**
-     *  Number of spaces to indent continuation lines by.
-     *
-     **/
-
-    public int getIndent()
-    {
-        return _indent;
-    }
-
-    /**
-     *  Adds text to the current line, unless that would make the line too long, in
-     *  which case a new line is started (and indented) before adding the text.
-     *
-     *  <p>Text is added as-is, with no concept of quoting.  To add arbitrary strings
-     *  (such as in a where clause), use {@link #addParameter(String)}.
-     *
-     *
-     **/
-
-    public void add(String text)
-    {
-        int textLength;
-
-        textLength = text.length();
-
-        if (_lineLength + textLength > _maxLineLength)
-        {
-            _buffer.append('\n');
-
-            for (int i = 0; i < _indent; i++)
-                _buffer.append(' ');
-
-            _lineLength = _indent;
-        }
-
-        _buffer.append(text);
-        _lineLength += textLength;
-    }
-    
-    public void add(short value)
-    {
-        add(Short.toString(value));
-    }
-    
-    public void add(int value)
-    {
-        add(Integer.toString(value));
-    }
-    
-    public void add(long value)
-    {
-        add(Long.toString(value));
-    }
-    
-    public void add(float value)
-    {
-        add(Float.toString(value));
-    }
-    
-    public void add(double value)
-    {
-        add(Double.toString(value));
-    }
-
-    /**
-     *  Adds a date value to a {@link StatementAssembly} converting
-     *  it to a {@link java.sql.Timestamp} first.
-     *
-     **/
-
-    public void addParameter(Date date)
-    {
-        if (date == null)
-        {
-            add("NULL");
-            return;
-        }
-
-        Calendar calendar = Calendar.getInstance();
-
-        calendar.setTime(date);
-        calendar.set(Calendar.MILLISECOND, 0);
-
-        Date adjusted = calendar.getTime();
-
-        Timestamp timestamp = new Timestamp(adjusted.getTime());
-
-        addParameter(timestamp);
-    }
-
-    /** 
-     *  Adds a separator (usually a comma and a space) to the current line, regardless
-     *  of line length.  This is purely aesthetic ... it just looks odd if a separator
-     *  gets wrapped to a new line by itself.
-     *
-     **/
-
-    public void addSep(String text)
-    {
-        _buffer.append(text);
-        _lineLength += text.length();
-    }
-
-    /**
-     *  Starts a new line, without indenting.
-     *
-     **/
-
-    public void newLine()
-    {
-        if (_buffer.length() != 0)
-            _buffer.append('\n');
-
-        _lineLength = 0;
-    }
-
-    /**
-     * Starts a new line, then adds the given text.
-     *
-     **/
-
-    public void newLine(String text)
-    {
-        if (_buffer.length() != 0)
-            _buffer.append('\n');
-
-        _buffer.append(text);
-
-        _lineLength = text.length();
-    }
-
-    public void addList(String[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            add(items[i]);
-        }
-    }
-
-    public void addParameterList(int[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameterList(Integer[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameterList(long[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameterList(Long[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameterList(String[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameterList(double[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameter(Object value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(new ObjectParameter(value));
-    }
-
-    public void addParameter(Timestamp timestamp)
-    {
-        if (timestamp == null)
-            add(NULL);
-        else
-            addParameter(new TimestampParameter(timestamp));
-    }
-
-    public void addParameter(String value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(new StringParameter(value));
-    }
-
-    public void addParameter(int value)
-    {
-        addParameter(new IntegerParameter(value));
-    }
-
-    public void addParameter(Integer value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.intValue());
-    }
-
-    public void addParameter(long value)
-    {
-        addParameter(new LongParameter(value));
-    }
-
-    public void addParameter(Long value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.longValue());
-    }
-
-    public void addParameter(float value)
-    {
-        addParameter(new FloatParameter(value));
-    }
-
-    public void addParameter(Float value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.floatValue());
-    }
-
-    public void addParameter(double value)
-    {
-        addParameter(new DoubleParameter(value));
-    }
-
-    public void addParameter(Double value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.doubleValue());
-    }
-
-    public void addParameter(short value)
-    {
-        addParameter(new ShortParameter(value));
-    }
-
-    public void addParameter(Short value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.shortValue());
-    }
-
-    public void addParameter(boolean value)
-    {
-        addParameter(value ? BooleanParameter.TRUE : BooleanParameter.FALSE);
-    }
-
-    public void addParameter(Boolean value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.booleanValue());
-    }
-
-    private void addParameter(IParameter parameter)
-    {
-        if (_parameters == null)
-            _parameters = new ArrayList();
-
-        _parameters.add(parameter);
-
-        add("?");
-    }
-
-    /**
-     *  Creates and returns an {@link IStatement} based on the SQL and parameters
-     *  acquired.
-     *
-     **/
-
-    public IStatement createStatement(Connection connection) throws SQLException
-    {
-        String sql = _buffer.toString();
-
-        if (_parameters == null || _parameters.isEmpty())
-            return new SimpleStatement(sql, connection);
-
-        return new ParameterizedStatement(sql, connection, _parameters);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("StatementAssembly@");
-
-        buffer.append(Integer.toHexString(hashCode()));
-        buffer.append("[SQL=\n<");
-        buffer.append(_buffer);
-        buffer.append("\n>");
-
-        if (_parameters != null)
-        {
-            int count = _parameters.size();
-            for (int i = 0; i < count; i++)
-            {
-                Object parameter = _parameters.get(i);
-
-                buffer.append(" ?");
-                buffer.append(i + 1);
-                buffer.append('=');
-
-                buffer.append(parameter);
-            }
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/StringParameter.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/StringParameter.java
deleted file mode 100644
index f8f0428..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/StringParameter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Types;
-
-/**
- *  Used with String parameters.
- *
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public class StringParameter implements IParameter
-{
-    private String _value;
-
-    public StringParameter(String value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        if (_value == null)
-            statement.setNull(index, Types.VARCHAR);
-        else
-            statement.setString(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("String<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/TimestampParameter.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/TimestampParameter.java
deleted file mode 100644
index 5954214..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/TimestampParameter.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.sql.Types;
-
-/**
- *  Used with Timestamp parameters.
- *
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public class TimestampParameter implements IParameter
-{
-    private Timestamp _timestamp;
-
-    public TimestampParameter(Timestamp timestamp)
-    {
-        _timestamp = timestamp;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        if (_timestamp == null)
-            statement.setNull(index, Types.TIMESTAMP);
-        else
-            statement.setTimestamp(index, _timestamp);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Timestamp<");
-        buffer.append(_timestamp);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/package.html
deleted file mode 100644
index fdf3ece..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/jdbc/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-
-
-<body>
-
-<p>A set of classes that assist with dynamically generating JDBC SQL queries.  Importantly,
-they help hide the difference between a {@link java.sql.Statement} and
-{@link java.sql.PreparedStatement} ... in fact, using a
-{@link org.apache.tapestry.contrib.jdbc.StatementAssembly} you don't know in advance which
-you'll get, which is very handy when generating truly dynamic SQL.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/AreaLinkRenderer.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/AreaLinkRenderer.java
deleted file mode 100644
index 3a5f123..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/AreaLinkRenderer.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.link;
-
-import org.apache.tapestry.link.DefaultLinkRenderer;
-import org.apache.tapestry.link.ILinkRenderer;
-
-/**
- * A subclass of {@link org.apache.tapestry.link.DefaultLinkRenderer} for the
- * HTML area element.
- * 
- * @author David Solis
- * @since 3.0
- */
-public class AreaLinkRenderer extends DefaultLinkRenderer
-{
-
-    /**
-     * A singleton for the area link.
-     */
-
-    public static final ILinkRenderer SHARED_INSTANCE = new AreaLinkRenderer();
-
-    public String getElement()
-    {
-        return "area";
-    }
-
-    public boolean getHasBody()
-    {
-        return false;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/ButtonLinkRenderer.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/ButtonLinkRenderer.java
deleted file mode 100644
index 72c6a13..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/ButtonLinkRenderer.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.link;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.link.ILinkRenderer;
-
-/**
- * An {@link ILinkRenderer} implementation that generates an HTML button.
- * This is particularly useful for implementing cancel buttons.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public class ButtonLinkRenderer implements ILinkRenderer
-{
-    public static final ILinkRenderer SHARED_INSTANCE = new ButtonLinkRenderer();
-
-    /**
-     * @see org.apache.tapestry.link.ILinkRenderer#renderLink(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle, org.apache.tapestry.components.ILinkComponent)
-     */
-    public void renderLink(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent component)
-    {
-        if (cycle.getAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME) != null)
-        {
-            String message = Tapestry.getMessage("AbstractLinkComponent.no-nesting");
-            throw new ApplicationRuntimeException(message, component, null, null);
-        }
-
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, component);
-
-        ILink link = component.getLink(cycle);
-
-        writer.begin("button");
-        writer.attribute("type", "button");
-
-        if (component.isDisabled())
-        {
-            writer.attribute("disabled", "disabled");
-        }
-
-        if (!cycle.isRewinding()) {
-            String url = link.getURL(component.getAnchor(), true);
-            String target = component.getTarget();
-            String onclick = (target == null) ? getScript(url) : getScript(url, target);
-
-            writer.attribute("onclick", onclick);
-        }
-        
-        component.renderAdditionalAttributes(writer, cycle);
-
-        IMarkupWriter wrappedWriter = writer.getNestedWriter();
-
-        component.renderBody(wrappedWriter, cycle);
-
-        wrappedWriter.close();
-
-        writer.end();
-
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-    }
-
-    /**
-     * Generates the onclick event handler that opens the specified url in the current window.
-     * @param url the url generated by this link
-     * @return a JavaScript onclick event handler
-     */
-    protected String getScript(String url)
-    {
-        return "window.location='" + url + "'";
-    }
-
-    /**
-     * Generates the onclick event handler that opens the specified url in the specified window or frame.
-     * @param url the url generated by this link
-     * @param target the name of the target window or frame
-     * @return a JavaScript onclick event handler
-     */
-    protected String getScript(String url, String target)
-    {
-        return "window.open('" + url + "','" + target + "')";
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/FormLinkRenderer.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/FormLinkRenderer.java
deleted file mode 100644
index c70f02b..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/FormLinkRenderer.java
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.link;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.link.DefaultLinkRenderer;
-import org.apache.tapestry.link.ILinkRenderer;
-
-/**
- * A link renderer that ensures that the generated link uses POST instead of GET
- * request and is therefore no longer limited in size.
- * <p>
- * Theoretically, browsers should support very long URLs, but in practice they
- * often start behaving strangely if the URLs are more than 256 characters. This
- * renderer uses JavaScript to generate forms containing the requested link
- * parameters and then "post" them when the link is selected. As a result, the
- * data is sent to the server using a POST request with a very short URL and
- * there is no longer a limitation in the size of the parameters.
- * <p>
- * In short, simply add the following parameter to your <code>DirectLink</code>,
- * <code>ExternalLink</code>, or other such link components:
- * 
- * <pre>
- * renderer = &quot;ognl: @org.apache.tapestry.contrib.link.FormLinkRenderer@RENDERER&quot;
- * </pre>
- * 
- * and they will automatically start using POST rather than GET requests. Their
- * parameters will no longer be limited in size.
- * @author mb
- * @since 4.0
- */
-public class FormLinkRenderer extends DefaultLinkRenderer
-{
-
-    /**
-     * A public singleton instance of the <code>FormLinkRenderer</code>.
-     * <p>
-     * Since the <code>FormLinkRenderer</code> is stateless, this instance can
-     * serve all links within your application without interference.
-     */
-    public static final ILinkRenderer RENDERER = new FormLinkRenderer();
-
-    public void renderLink(IMarkupWriter writer, IRequestCycle cycle,
-            ILinkComponent linkComponent)
-    {
-        IMarkupWriter wrappedWriter = null;
-
-        if (cycle.getAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(Tapestry
-                    .getMessage("AbstractLinkComponent.no-nesting"),
-                    linkComponent, null, null);
-
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME,
-                linkComponent);
-        
-        String formName = cycle.getUniqueId("LinkForm");
-        
-        boolean hasBody = getHasBody();
-
-        boolean disabled = linkComponent.isDisabled();
-
-        if (!disabled && !cycle.isRewinding())
-        {
-            ILink l = linkComponent.getLink(cycle);
-            String anchor = linkComponent.getAnchor();
-            
-            PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, linkComponent);
-            
-            String function = generateFormFunction(formName, l, anchor);
-            prs.addBodyScript(linkComponent, function);
-            
-            if (hasBody)
-                writer.begin(getElement());
-            else 
-                writer.beginEmpty(getElement());
-            
-            writer.attribute(getUrlAttribute(), "javascript: document."
-                    + formName + ".submit();");
-            
-            beforeBodyRender(writer, cycle, linkComponent);
-            
-            // Allow the wrapped components a chance to render.
-            // Along the way, they may interact with this component
-            // and cause the name variable to get set.
-
-            wrappedWriter = writer.getNestedWriter();
-        }
-        else wrappedWriter = writer;
-
-        if (hasBody) linkComponent.renderBody(wrappedWriter, cycle);
-
-        if (!disabled && !cycle.isRewinding())
-        {
-            afterBodyRender(writer, cycle, linkComponent);
-
-            linkComponent.renderAdditionalAttributes(writer, cycle);
-
-            if (hasBody)
-            {
-                wrappedWriter.close();
-
-                // Close the <element> tag
-
-                writer.end();
-            }
-            else writer.closeTag();
-        }
-
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-
-    }
-
-    private String generateFormFunction(String formName, ILink link,
-            String anchor)
-    {
-        String[] parameterNames = link.getParameterNames();
-
-        StringBuffer buf = new StringBuffer();
-        buf.append("function prepare" + formName + "() {\n");
-
-        buf.append("  var html = \"\";\n");
-        buf.append("  html += \"<div style='position: absolute'>\";\n");
-
-        String url = link.getURL(anchor, false);
-        buf.append("  html += \"<form name='" + formName
-                + "' method='post' action='" + url + "'>\";\n");
-
-        for(int i = 0; i < parameterNames.length; i++)
-        {
-            String parameter = parameterNames[i];
-            String[] values = link.getParameterValues(parameter);
-            if (values != null) {               
-                for (int j = 0; j < values.length; j++) {
-                    String value = values[j];
-                    buf.append("  html += \"<input type='hidden' name='" + parameter + "' value='" + value + "'/>\";\n");
-                }
-            }
-        }
-        buf.append("  html += \"<\" + \"/form>\";\n");
-        buf.append("  html += \"<\" + \"/div>\";\n");
-        buf.append("  document.write(html);\n");
-        buf.append("}\n");
-
-        buf.append("prepare" + formName + "();\n\n");
-
-        return buf.toString();
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/PopupLinkRenderer.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/PopupLinkRenderer.java
deleted file mode 100644
index b9f3c78..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/PopupLinkRenderer.java
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.link;
-
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.link.DefaultLinkRenderer;
-
-/**
- * This renderer emits javascript to launch the link in a window.
- * 
- * @author David Solis
- * @since 3.0.1
- */
-public class PopupLinkRenderer extends DefaultLinkRenderer
-{
-
-    private String _windowName;
-
-    private String _features;
-
-    public PopupLinkRenderer()
-    {
-    }
-
-    /**
-     * Initializes the name and features for javascript window.open function.
-     * 
-     * @param windowName
-     *            the window name
-     * @param features
-     *            the window features
-     */
-    public PopupLinkRenderer(String windowName, String features)
-    {
-        _windowName = windowName;
-        _features = features;
-    }
-
-    /**
-     * @see DefaultLinkRenderer#constructURL(org.apache.tapestry.components.ILinkComponent,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected String constructURL(ILinkComponent component, IRequestCycle cycle)
-    {
-        if (cycle.isRewinding()) {
-            return null;
-        }
-        
-        String anchor = component.getAnchor();
-        ILink link = component.getLink(cycle);
-
-        String url = link.getURL(anchor, true);
-
-        PageRenderSupport support = TapestryUtils.getPageRenderSupport(cycle, component);
-
-        String functionName = support.getUniqueString("popup_window");
-
-        BodyBuilder builder = new BodyBuilder();
-
-        builder.addln("{0}=function()", functionName);
-        builder.begin();
-        builder.add(
-                "var newWindow = window.open({0}, {1}, {2});",
-                TapestryUtils.enquote(url),
-                TapestryUtils.enquote(getWindowName()),
-                TapestryUtils.enquote(getFeatures()));
-        builder.add("newWindow.focus();");
-        builder.end();
-        builder.addln(";");
-
-        support.addBodyScript(component, builder.toString());
-
-        return "javascript:" + functionName + "();";
-    }
-
-    public String getWindowName()
-    {
-        return _windowName;
-    }
-
-    public void setWindowName(String windowName)
-    {
-        _windowName = windowName;
-    }
-
-    public String getFeatures()
-    {
-        return _features;
-    }
-
-    public void setFeatures(String features)
-    {
-        _features = features;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/RawURLLinkRenderer.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/RawURLLinkRenderer.java
deleted file mode 100644
index 3d6c057..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/RawURLLinkRenderer.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.link;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.link.ILinkRenderer;
-
-/**
- * An implementation of {@link ILinkRenderer} 
- * that only prints out the link's url, i.e. the value of the href 
- * attribute.
- * This renderer can be useful when combining javascript fragments
- * with {@link ILinkComponent}s. 
- * 
- * @author Andreas Andreou
- * @since 4.1.1
- */
-public class RawURLLinkRenderer implements ILinkRenderer
-{
-
-    /**
-     * A singleton for the raw-url linkRendered.
-     */
-
-    public static final ILinkRenderer SHARED_INSTANCE = new RawURLLinkRenderer();
-
-    /** 
-     * {@inheritDoc}
-     */
-    public void renderLink(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent linkComponent)
-    {
-        writer.print(linkComponent.getLink(cycle).getAbsoluteURL(), true);        
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/package.html
deleted file mode 100644
index 04ba9aa..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/link/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Additional components related to rendering html links. 
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/package.html
deleted file mode 100644
index 2c6f516..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Contributed components/utilities that perform additional functions not available
-in the core.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.html
deleted file mode 100644
index 2cbfcb0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="$content$">
-<table jwcid="@Any" element="table" class="ognl:tableClass">
-  <tr>
-  	<th class="available-header">
- <span jwcid="@RenderBlock" block="ognl:availableTitleBlock"/>
- <span jwcid="defaultAvailableTitleBlock@Block"><span key="title.available"/></span>
-</th>
-  	<td element="td" class="controls" rowspan="2">
-  	    <a jwcid="@Any" 
-  	    	element="a" 
-  	    	href="ognl:symbols.selectOnClickScript"><img jwcid="@Image"
-  	    		image="ognl:selectImage"
-  	    		name="ognl:symbols.selectImageName"
-  	    		alt="message:tooltip.select"/></a>
-
-    <a jwcid="@Any" element="a"
-    	href="ognl:symbols.deselectOnClickScript"><img jwcid="@Image"
-    		image="ognl:deselectImage"
-    		name="ognl:symbols.deselectImageName"
-    		alt="message:tooltip.deselect"/></a>
-    
-    <span jwcid="@If" condition="ognl:sortUser">
-
-    <a jwcid="@Any" element="a"
-    	href="ognl:symbols.upOnClickScript"><img jwcid="@Image" 
-    		image="ognl:upImage"
-    		name="ognl:symbols.upImageName"
-    		alt="message:tooltip.moveup"/></a>
-
-    <a jwcid="@Any" element="a"
-    	href="ognl:symbols.downOnClickScript"><img jwcid="@Image"
-    		image="ognl:downImage"
-    		name="ognl:symbols.downImageName"
-    		alt="message:tooltip.movedown"/></a>
-    </span>
-
-    </td>
-  	<th class="selected-header">
- <span jwcid="@RenderBlock" block="ognl:selectedTitleBlock"/>
- <span jwcid="defaultSelectedTitleBlock@Block"><span key="title.selected"/></span>
-    </th>
-  </tr>
-  <tr>
-    <td class="available-cell"><select jwcid="@Delegator" delegate="ognl:availableColumn"/></td>
-    <td class="selected-cell"><select jwcid="@Delegator" delegate="ognl:selectedColumn"/></td>
-  </tr>
-</table>
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.java
deleted file mode 100644
index b609e81..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.java
+++ /dev/null
@@ -1,544 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.palette;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.components.Block;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.ValidatableFieldExtension;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.form.validator.Required;
-import org.apache.tapestry.form.validator.Validator;
-import org.apache.tapestry.html.Body;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * A component used to make a number of selections from a list. The general look is a pair of
- * &lt;select&gt; elements. with a pair of buttons between them. The right element is a list of
- * values that can be selected. The buttons move values from the right column ("available") to the
- * left column ("selected").
- * <p>
- * This all takes a bit of JavaScript to accomplish (quite a bit), which means a {@link Body}
- * component must wrap the Palette. If JavaScript is not enabled in the client browser, then the
- * user will be unable to make (or change) any selections.
- * <p>
- * Cross-browser compatibility is not perfect. In some cases, the
- * {@link org.apache.tapestry.contrib.form.MultiplePropertySelection}component may be a better
- * choice.
- * <p>
- * <table border=1>
- * <tr>
- * <td>Parameter</td>
- * <td>Type</td>
- * <td>Direction</td>
- * <td>Required</td>
- * <td>Default</td>
- * <td>Description</td>
- * </tr>
- * <tr>
- * <td>selected</td>
- * <td>{@link List}</td>
- * <td>in</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>A List of selected values. Possible selections are defined by the model; this should be a
- * subset of the possible values. This may be null when the component is renderred. When the
- * containing form is submitted, this parameter is updated with a new List of selected objects.
- * <p>
- * The order may be set by the user, as well, depending on the sortMode parameter.</td>
- * </tr>
- * <tr>
- * <td>model</td>
- * <td>{@link IPropertySelectionModel}</td>
- * <td>in</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>Works, as with a {@link org.apache.tapestry.form.PropertySelection}component, to define the
- * possible values.</td>
- * </tr>
- * <tr>
- * <td>sort</td>
- * <td>string</td>
- * <td>in</td>
- * <td>no</td>
- * <td>{@link SortMode#NONE}</td>
- * <td>Controls automatic sorting of the options.</td>
- * </tr>
- * <tr>
- * <td>rows</td>
- * <td>int</td>
- * <td>in</td>
- * <td>no</td>
- * <td>10</td>
- * <td>The number of rows that should be visible in the Pallete's &lt;select&gt; elements.</td>
- * </tr>
- * <tr>
- * <td>tableClass</td>
- * <td>{@link String}</td>
- * <td>in</td>
- * <td>no</td>
- * <td>tapestry-palette</td>
- * <td>The CSS class for the table which surrounds the other elements of the Palette.</td>
- * </tr>
- * <tr>
- * <td>selectedTitleBlock</td>
- * <td>{@link Block}</td>
- * <td>in</td>
- * <td>no</td>
- * <td>"Selected"</td>
- * <td>If specified, allows a {@link Block}to be placed within the &lt;th&gt; reserved for the
- * title above the selected items &lt;select&gt; (on the right). This allows for images or other
- * components to be placed there. By default, the simple word <code>Selected</code> is used.</td>
- * </tr>
- * <tr>
- * <td>availableTitleBlock</td>
- * <td>{@link Block}</td>
- * <td>in</td>
- * <td>no</td>
- * <td>"Available"</td>
- * <td>As with selectedTitleBlock, but for the left column, of items which are available to be
- * selected. The default is the word <code>Available</code>.</td>
- * </tr>
- * <tr>
- * <td>selectImage <br>
- * selectDisabledImage <br>
- * deselectImage <br>
- * deselectDisabledImage <br>
- * upImage <br>
- * upDisabledImage <br>
- * downImage <br>
- * downDisabledImage</td>
- * <td>{@link IAsset}</td>
- * <td>in</td>
- * <td>no</td>
- * <td>&nbsp;</td>
- * <td>If any of these are specified then they override the default images provided with the
- * component. This allows the look and feel to be customized relatively easily.
- * <p>
- * The most common reason to replace the images is to deal with backgrounds. The default images are
- * anti-aliased against a white background. If a colored or patterned background is used, the
- * default images will have an ugly white fringe. Until all browsers have full support for PNG
- * (which has a true alpha channel), it is necessary to customize the images to match the
- * background.</td>
- * </tr>
- * </table>
- * <p>
- * A Palette requires some CSS entries to render correctly ... especially the middle column, which
- * contains the two or four buttons for moving selections between the two columns. The width and
- * alignment of this column must be set using CSS. Additionally, CSS is commonly used to give the
- * Palette columns a fixed width, and to dress up the titles. Here is an example of some CSS you can
- * use to format the palette component:
- * 
- * <pre>
- *                             TABLE.tapestry-palette TH
- *                             {
- *                               font-size: 9pt;
- *                               font-weight: bold;
- *                               color: white;
- *                               background-color: #330066;
- *                               text-align: center;
- *                             }
- *                            
- *                             TD.available-cell SELECT
- *                             {
- *                               font-weight: normal;
- *                               background-color: #FFFFFF;
- *                               width: 200px;
- *                             }
- *                             
- *                             TD.selected-cell SELECT
- *                             {
- *                               font-weight: normal;
- *                               background-color: #FFFFFF;
- *                               width: 200px;
- *                             }
- *                             
- *                             TABLE.tapestry-palette TD.controls
- *                             {
- *                               text-align: center;
- *                               vertical-align: middle;
- *                               width: 60px;
- *                             }
- * </pre>
- * 
- * <p>
- * As of 4.0, this component can be validated.
- * </p>
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Palette extends BaseComponent implements ValidatableFieldExtension
-{
-    private static final int MAP_SIZE = 7;
-
-    /**
-     * A set of symbols produced by the Palette script. This is used to provide proper names for
-     * some of the HTML elements (&lt;select&gt; and &lt;button&gt; elements, etc.).
-     */
-    private Map _symbols;
-
-    /** @since 3.0 * */
-    public abstract void setAvailableColumn(PaletteColumn column);
-
-    /** @since 3.0 * */
-    public abstract void setSelectedColumn(PaletteColumn column);
-
-    public abstract void setName(String name);
-
-    public abstract void setForm(IForm form);
-
-    /** @since 4.0 */
-    public abstract void setRequiredMessage(String message);
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // Next few lines of code is similar to AbstractFormComponent (which, alas, extends from
-        // AbstractComponent, not from BaseComponent).
-        IForm form = TapestryUtils.getForm(cycle, this);
-
-        setForm(form);
-
-        if (form.wasPrerendered(writer, this))
-            return;
-
-        IValidationDelegate delegate = form.getDelegate();
-        
-        delegate.setFormComponent(this);
-
-        form.getElementId(this);
-
-        if (form.isRewinding())
-        {
-            if (!isDisabled())
-            {
-                rewindFormComponent(writer, cycle);
-            }
-        }
-        else if (!cycle.isRewinding())
-        {
-            if (!isDisabled())
-                delegate.registerForFocus(this, ValidationConstants.NORMAL_FIELD);
-
-            renderFormComponent(writer, cycle);
-
-            if (delegate.isInError())
-                delegate.registerForFocus(this, ValidationConstants.ERROR_FIELD);
-        }
-
-        super.renderComponent(writer, cycle);
-    }
-
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        _symbols = new HashMap(MAP_SIZE);
-
-        runScript(cycle);
-
-        constructColumns();
-
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-    }
-
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String[] values = cycle.getParameters(getName());
-
-        int count = Tapestry.size(values);
-
-        List selected = new ArrayList(count);
-        IPropertySelectionModel model = getModel();
-
-        for (int i = 0; i < count; i++)
-        {
-            String value = values[i];
-            Object option = model.translateValue(value);
-
-            selected.add(option);
-        }
-
-        setSelected(selected);
-
-        try
-        {
-            getValidatableFieldSupport().validate(this, writer, cycle, selected);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public void overrideContributions(Validator validator, FormComponentContributorContext context,
-            IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // we know this has to be a Required validator
-        Required required = (Required)validator;
-        
-        JSONObject profile = context.getProfile();
-        
-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
-        }
-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
-        
-        required.accumulateProperty(cons, getClientId(), 
-                new JSONLiteral("[tapestry.form.validation.isPalleteSelected]"));
-        
-        required.accumulateProfileProperty(this, profile, 
-                ValidationConstants.CONSTRAINTS, required.buildMessage(context, this));
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean overrideValidator(Validator validator, IRequestCycle cycle)
-    {
-        if (Required.class.isAssignableFrom(validator.getClass()))
-            return true;
-        
-        return false;
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        _symbols = null;
-
-        setAvailableColumn(null);
-        setSelectedColumn(null);
-
-        super.cleanupAfterRender(cycle);
-    }
-
-    /**
-     * Executes the associated script, which generates all the JavaScript to support this Palette.
-     */
-    private void runScript(IRequestCycle cycle)
-    {
-        PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, this);
-
-        setImage(pageRenderSupport, cycle, "selectImage", getSelectImage());
-        setImage(pageRenderSupport, cycle, "selectDisabledImage", getSelectDisabledImage());
-        setImage(pageRenderSupport, cycle, "deselectImage", getDeselectImage());
-        setImage(pageRenderSupport, cycle, "deselectDisabledImage", getDeselectDisabledImage());
-
-        if (isSortUser())
-        {
-            setImage(pageRenderSupport, cycle, "upImage", getUpImage());
-            setImage(pageRenderSupport, cycle, "upDisabledImage", getUpDisabledImage());
-            setImage(pageRenderSupport, cycle, "downImage", getDownImage());
-            setImage(pageRenderSupport, cycle, "downDisabledImage", getDownDisabledImage());
-        }
-
-        _symbols.put("palette", this);
-
-        getScript().execute(this, cycle, pageRenderSupport, _symbols);
-    }
-
-    /**
-     * Extracts its asset URL, sets it up for preloading, and assigns the preload reference as a
-     * script symbol.
-     */
-    private void setImage(PageRenderSupport pageRenderSupport, IRequestCycle cycle,
-            String symbolName, IAsset asset)
-    {
-        String url = asset.buildURL();
-        String reference = pageRenderSupport.getPreloadedImageReference(this, url);
-
-        _symbols.put(symbolName, reference);
-    }
-
-    public Map getSymbols()
-    {
-        return _symbols;
-    }
-
-    /**
-     * Constructs a pair of {@link PaletteColumn}s: the available and selected options.
-     */
-    private void constructColumns()
-    {
-        // Build a Set around the list of selected items.
-
-        List selected = getSelected();
-
-        if (selected == null)
-            selected = Collections.EMPTY_LIST;
-
-        String sortMode = getSort();
-
-        boolean sortUser = sortMode.equals(SortMode.USER);
-
-        List selectedOptions = null;
-
-        if (sortUser)
-        {
-            int count = selected.size();
-            selectedOptions = new ArrayList(count);
-
-            for (int i = 0; i < count; i++)
-                selectedOptions.add(null);
-        }
-
-        PaletteColumn availableColumn = new PaletteColumn((String) _symbols.get("availableName"),
-                (String)_symbols.get("availableName"), getRows());
-        PaletteColumn selectedColumn = new PaletteColumn(getName(), getClientId(), getRows());
-
-        // Each value specified in the model will go into either the selected or available
-        // lists.
-
-        IPropertySelectionModel model = getModel();
-
-        int count = model.getOptionCount();
-
-        for (int i = 0; i < count; i++)
-        {
-            Object optionValue = model.getOption(i);
-
-            PaletteOption o = new PaletteOption(model.getValue(i), model.getLabel(i));
-
-            int index = selected.indexOf(optionValue);
-            boolean isSelected = index >= 0;
-
-            if (sortUser && isSelected)
-            {
-                selectedOptions.set(index, o);
-                continue;
-            }
-
-            PaletteColumn c = isSelected ? selectedColumn : availableColumn;
-
-            c.addOption(o);
-        }
-
-        if (sortUser)
-        {
-            Iterator i = selectedOptions.iterator();
-            while (i.hasNext())
-            {
-                PaletteOption o = (PaletteOption) i.next();
-                selectedColumn.addOption(o);
-            }
-        }
-
-        if (sortMode.equals(SortMode.VALUE))
-        {
-            availableColumn.sortByValue();
-            selectedColumn.sortByValue();
-        }
-        else if (sortMode.equals(SortMode.LABEL))
-        {
-            availableColumn.sortByLabel();
-            selectedColumn.sortByLabel();
-        }
-
-        setAvailableColumn(availableColumn);
-        setSelectedColumn(selectedColumn);
-    }
-
-    public boolean isSortUser()
-    {
-        return getSort().equals(SortMode.USER);
-    }
-
-    public abstract Block getAvailableTitleBlock();
-
-    public abstract IAsset getDeselectDisabledImage();
-
-    public abstract IAsset getDeselectImage();
-
-    public abstract IAsset getDownDisabledImage();
-
-    public abstract IAsset getDownImage();
-
-    public abstract IAsset getSelectDisabledImage();
-
-    public abstract IPropertySelectionModel getModel();
-
-    public abstract int getRows();
-
-    public abstract Block getSelectedTitleBlock();
-
-    public abstract IAsset getSelectImage();
-
-    public abstract String getSort();
-
-    public abstract IAsset getUpDisabledImage();
-
-    public abstract IAsset getUpImage();
-
-    /**
-     * Returns false. Palette components are never disabled.
-     * 
-     * @since 2.2
-     */
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    /** @since 2.2 * */
-
-    public abstract List getSelected();
-
-    /** @since 2.2 * */
-
-    public abstract void setSelected(List selected);
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-    public abstract IScript getScript();
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.jwc
deleted file mode 100644
index 11915f2..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.jwc
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.palette.Palette" 
-	allow-body="no" allow-informal-parameters="no">
-	
-  <description>
-  A complex component used to manage multiple selection of items from a list.
-  </description>
-  		  
-  <parameter name="selectedTitleBlock" 
-    default-value="component:defaultSelectedTitleBlock"/>
-    
-  <parameter name="availableTitleBlock" 
-    default-value="component:defaultAvailableTitleBlock"/>
-   	
-  <parameter name="model" 
-  	required="yes"/>
-  
-  <parameter name="selected"
-  	required="yes"/>
-  
-  <parameter name="sort"
-      default-value="@org.apache.tapestry.contrib.palette.SortMode@NONE"/>
-  
-  <parameter name="rows"
-    default-value="10"/>
-  
-  <parameter name="tableClass" 
-	default-value="literal:tapestry-palette"/> 
-  
-  <parameter name="selectImage" 
-    default-value="asset:Select"/>
-  
-  <parameter name="disabledImage"
-	default-value="asset:Disabled"/>
-  
-  <parameter name="deselectImage"
-	default-value="asset:Deselect"/>
-  
-  <parameter name="selectDisabledImage"
-	default-value="asset:SelectDisabled"/> 
-  
-  <parameter name="deselectDisabledImage"
- 	default-value="asset:DeselectDisabled"/>
-  
-  <parameter name="upImage" 
-  	default-value="asset:Up"/>
-  
-  <parameter name="upDisabledImage"
-  	default-value="asset:UpDisabled"/>
-  
-  <parameter name="downImage"
-    default-value="asset:Down"/>
-  
-  <parameter name="downDisabledImage"
-    default-value="asset:DownDisabled"/>    
-  
-  <parameter name="displayName"/>
-  <parameter name="id" />  
-  <parameter name="validators"/>
-
-  <asset name="Select" path="select_right.gif"/>
-  <asset name="SelectDisabled" path="select_right_off.gif"/>
-  <asset name="Deselect" path="deselect_left.gif"/>
-  <asset name="DeselectDisabled" path="deselect_left_off.gif"/>
-  <asset name="Up" path="move_up.gif"/>
-  <asset name="UpDisabled" path="move_up_off.gif"/>
-  <asset name="Down" path="move_down.gif"/>
-  <asset name="DownDisabled" path="move_down_off.gif"/>
-  
-  <inject property="script" type="script" object="Palette.script"/>
-  <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.properties b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.properties
deleted file mode 100644
index 01cfe2b..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-title.available=Available
-title.selected=Selected
-
-tooltip.select=Select
-tooltip.deselect=Deselect
-tooltip.moveup=Move Up
-tooltip.movedown=Move Down
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.script b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.script
deleted file mode 100644
index 3ca05ee..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/Palette.script
+++ /dev/null
@@ -1,361 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2004, 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC

-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"

-	"http://tapestry.apache.org/dtd/Script_3_0.dtd">

-<script>

-<!-- 

-

-input symbols:

-  palette - the Palette instance

-  selectImage - reference to the select image

-  selectDisabledImage - referece to the disabled select image  

-  deselectImage - reference to the deselect image

-  deselectDisabledImage - reference to the disbled deselect image

-  upImage - reference to the move up image

-  upDisabledImage - reference to the disabled move up image

-  downImage - reference to the move down image

-  downDisabledImage - reference to the disabled move down image

-

-Note: "reference" means the result of Body.getPreloadedImageReference().  The

-up and down images are only needed if user sorting is enabled.

-

-output symbols:

-  formSubmitFunctionName - name of a function to be executed when the form submits

-  availableName - the name of the available element

-  selectImageName - the name to use for the select image (inside the select link)

-  selectOnClickScript - the script to assign to the select link's onclick attribute

-  deselectOnClickScript - the script to assign to the deselect link's onclick attribute

-  deselectImageName - the name to use for the deselect image (inside the deselect link)

-  upImageName - the name of the up image (inside the up link)

-  downImageName the name of the move down image (inside the down link)

-  upOnClickScript - the script to assign to the up link's onclick attribute

-  downOnClickScript - the script to assign to the down link's onclick attribute

--->

-<include-script resource-path="/org/apache/tapestry/contrib/palette/PaletteFunctions.js"/>

-

-<input-symbol key="palette" required="yes"/>

-<input-symbol key="selectImage" required="yes"/>

-<input-symbol key="selectDisabledImage" required="yes"/>

-<input-symbol key="deselectImage" required="yes"/>

-<input-symbol key="deselectDisabledImage" required="yes"/>

-<input-symbol key="upImage" />

-<input-symbol key="upDisabledImage" />

-<input-symbol key="downImage" />

-<input-symbol key="downDisabledImage" />

-

-<set key="formName" expression="palette.form.name"/>

-<set key="name" expression="palette.clientId"/>

-<set key="sortLabel" expression="palette.sort == @org.apache.tapestry.contrib.palette.SortMode@LABEL"/>

-<set key="sortValue" expression="palette.sort == @org.apache.tapestry.contrib.palette.SortMode@VALUE"/>

-<set key="sortUser" expression="palette.sort == @org.apache.tapestry.contrib.palette.SortMode@USER"/>

-

-

-<!-- baseName - base name from which other names are generated -->

-

-<let key="baseName" unique="yes">

-  ${name}

-</let>

-

-<let key="buttons">

-  ${baseName}_buttons

-</let>

-

-<let key="selectDisabled">

-  ${buttons}.selectDisabled

-</let>

-

-<let key="deselectDisabled">

-  ${buttons}.deselectDisabled

-</let>

-

-<let key="upDisabled">

-  ${buttons}.upDisabled

-</let>

-

-<let key="downDisabled">

-  ${buttons}.downDisabled

-</let>

-

-<let key="availableName">

-  ${name}_avail

-</let>

-

-<let key="updateFunctionName">

-  tapestry.update_${baseName}

-</let>

-

-<let key="selectFunctionName">

-  tapestry.select_${baseName}

-</let>

-

-<let key="selectOnClickScript">

-  javascript:${selectFunctionName}();

-</let>

-

-<let key="deselectFunctionName">

-  tapestry.deselect_${baseName}

-</let>

-

-<let key="deselectOnClickScript">

-  javascript:${deselectFunctionName}();

-</let>

-

-<let key="formSubmitFunctionName">

-  onsubmit_${baseName}

-</let>

-

-<let key="selectImageName">

-  ${baseName}_selectImage

-</let>

-

-<let key="selectImagePath">

-  document.${selectImageName}

-</let>

-

-<let key="deselectImageName">

-  ${baseName}_deselectImage

-</let>

-

-<let key="deselectImagePath">

-  document.${deselectImageName}

-</let>

-

-<let key="formPath">

-  dojo.byId('${formName}')

-</let>

-

-<let key="selectedPath">

-  dojo.byId('${palette.clientId}')

-</let>

-

-<let key="selectedChangeFunctionName">

-  tapestry.onChange_${baseName}_selected

-</let>

-

-<let key="availablePath">

-  dojo.byId("${availableName}")

-</let>

-

-<let key="availableChangeFunctionName">

-  tapestry.onChange_${baseName}_available

-</let>

-

-

-<let key="upImageName">

-  ${baseName}_upimage

-</let>

-

-<let key="upImagePath">

-  document.${upImageName}

-</let>

-

-<let key="downImageName">

-  ${baseName}_downimage

-</let>

-

-<let key="downImagePath">

-  document.${downImageName}

-</let>

-

-<let key="moveUpFunctionName">

-  tapestry.moveup_${baseName}

-</let>

-

-<let key="upOnClickScript">

-  javascript:${moveUpFunctionName}();

-</let>

-

-<let key="moveDownFunctionName">

-  tapestry.movedown_${baseName}

-</let>

-

-<let key="downOnClickScript">

-  javascript:${moveDownFunctionName}();

-</let>

-

-<let key="submitListenerFunction">

-    ${baseName}FormSubmitted

-</let>

-<body>

-

-<!-- A variable that is used to track which of the buttons are enabled

-     or disabled. All of the buttons are disabled until the page finishes

-     loading, at which point the update function will determine which

-     can be used. -->

-     

-var ${buttons} = new Object();

-${selectDisabled} = true;

-${deselectDisabled} = true;

-<if expression="sortUser">

-${upDisabled} = true;

-${downDisabled} = true;

-</if>

-

-${updateFunctionName}=function() {

-  var disabled = ${availablePath}.selectedIndex &lt; 0;

-  

-  ${selectDisabled} = disabled;

- 

-  if (document.images) {

-    ${selectImagePath}.src =

-      disabled ? ${selectDisabledImage}

-               : ${selectImage};

-  }

-  

-  var selected = ${selectedPath};

-  var index = selected.selectedIndex;

-

-  disabled = index &lt; 0;

-  ${deselectDisabled} = disabled;

- 

-  if (document.images) {

-    ${deselectImagePath}.src =

-      disabled ? ${deselectDisabledImage}

-               : ${deselectImage};   

-  }

-<if expression="sortUser">

-  var upImage = ${upImagePath};

-  var downImage = ${downImagePath};

-  

-  ${upDisabled} = true;

-  ${downDisabled} = true;

-  

-  if (document.images) {

-    upImage.src = ${upDisabledImage};

-    downImage.src = ${downDisabledImage};

-  }

-  

-  <!-- If there's no selection in the "selected" column, then leave

-       both buttons disabled. -->

-       

-  if (disabled) { return; }

-  

-  <!-- Search for a second selected item -->

-  

-  for (var i = index + 1; i &lt; selected.options.length; i++) {

-    <!-- Found a second selected option, so leave buttons disabled. -->

-    if (selected.options[i].selected) { return; }

-  }

-  

-  ${upDisabled} = (index == 0);

-  ${downDisabled} = (index == selected.options.length - 1);  

-  

-  if (document.images) {

-    if (!${upDisabled}) {

-      upImage.src = ${upImage};

-    }

-    if (!${downDisabled}) {

-      downImage.src = ${downImage};

-    }

-  }

-</if>  

-}

-

-${selectFunctionName}=function() {

- if (${selectDisabled}) { return; }

-    

-  var source = ${availablePath};

-  var target = ${selectedPath};

-     

-  tapestry.palette.transferSelections(source,target);

-<if expression="sortLabel">

-  tapestry.palette.sortByLabel(target);

-</if>

-<if expression="sortValue">

-  tapestry.palette.sortByValue(target);

-</if>

-  ${updateFunctionName}();

-}

-

-${deselectFunctionName}=function(){

-  if (${deselectDisabled}) { return; }

-  

-  var source = ${selectedPath};

-  var target = ${availablePath};

-  

-  tapestry.palette.transferSelections(source,target);

-<if expression="sortLabel">

-  tapestry.palette.sortByLabel(target);

-</if>

-<if expression="sortValue">

-  tapestry.palette.sortByValue(target);

-</if>

-  ${updateFunctionName}();  

-}

-

-tapestry.${formSubmitFunctionName}=function(event){

-  tapestry.palette.clearSelections(${availablePath});

-  tapestry.palette.selectAll(${selectedPath});

-}

-<if expression="sortUser">

-${moveUpFunctionName}=function(){

-  if (${upDisabled}) { return; }

-    

-  var element = ${selectedPath};

-  var options = element.options;

-    

-  tapestry.palette.swapOptions(options, element.selectedIndex, element.selectedIndex - 1);

-  

-  ${updateFunctionName}();

-}

-

-${moveDownFunctionName}=function(){

-  if (${downDisabled}) { return; }

-    

-  var element = ${selectedPath};

-  var options = element.options;

-  

-  tapestry.palette.swapOptions(options, element.selectedIndex, element.selectedIndex + 1);

-  

-  ${updateFunctionName}();

-}

-</if>

-${selectedChangeFunctionName}=function(){

-  tapestry.palette.clearSelections(${availablePath});

-  ${updateFunctionName}();

-}

-

-${availableChangeFunctionName}=function(){

-  tapestry.palette.clearSelections(${selectedPath});

-  ${updateFunctionName}();

-}

-

-tapestry.${submitListenerFunction}=function(form){

-    form = dojo.byId(form);

-    if(!form){return;}

-    var id=form.getAttribute("id");

-    if ("${formName}" != id){return;}

-    tapestry.${formSubmitFunctionName}();

-}

-</body>

-

-<initialization>

-${selectedPath}.onchange = ${selectedChangeFunctionName};

-${selectedPath}.ondblclick = ${deselectFunctionName};

-${availablePath}.onchange = ${availableChangeFunctionName};

-${availablePath}.ondblclick = ${selectFunctionName};

-${updateFunctionName}();

-dojo.event.connect(dojo.byId("${formName}"), "onrefresh" , tapestry, "${formSubmitFunctionName}");

-dojo.event.connect(dojo.byId("${formName}"), "onsubmit" , tapestry, "${formSubmitFunctionName}");

-dojo.event.connect("before", tapestry.form, "submit", tapestry, "${submitListenerFunction}");

-dojo.event.connect("before", tapestry.form, "refresh", tapestry, "${submitListenerFunction}");

-dojo.event.connect("before", tapestry.form, "cancel", tapestry, "${submitListenerFunction}");

-dojo.event.connect("before", tapestry.form, "submitAsync", tapestry, "${submitListenerFunction}");

-</initialization>

-</script>

diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/PaletteColumn.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/PaletteColumn.java
deleted file mode 100644
index 4c760d3..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/PaletteColumn.java
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.palette;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * One of the two columns in a Palette component: the left column lists available options, the right
- * column lists the selected columns.
- * 
- * @author Howard Lewis Ship
- */
-public class PaletteColumn implements IRender
-{
-    private String _name;
-
-    private String _clientId;
-
-    private int _rows;
-
-    private List _options = new ArrayList();
-
-    /**
-     * 
-     * @author hls
-     */
-    private static class ValueComparator implements Comparator
-    {
-        public int compare(Object o1, Object o2)
-        {
-            PaletteOption option1 = (PaletteOption) o1;
-            PaletteOption option2 = (PaletteOption) o2;
-
-            return option1.getValue().compareTo(option2.getValue());
-        }
-    }
-
-    /**
-     * 
-     * @author hls
-     */
-    private static class LabelComparator implements Comparator
-    {
-        public int compare(Object o1, Object o2)
-        {
-            PaletteOption option1 = (PaletteOption) o1;
-            PaletteOption option2 = (PaletteOption) o2;
-
-            return option1.getLabel().compareTo(option2.getLabel());
-        }
-    }
-
-    /**
-     * @param name
-     *            the name of the column (the name attribute of the &lt;select&gt;)
-     * @param rows
-     *            the number of visible rows (the size attribute of the &lt;select&gt;)
-     */
-    public PaletteColumn(String name, String clientId, int rows)
-    {
-        _name = name;
-        _clientId = clientId;
-        _rows = rows;
-    }
-
-    public void addOption(PaletteOption option)
-    {
-        _options.add(option);
-    }
-
-    /**
-     * Sorts the options by value (the hidden value for the option that represents the object
-     * value). This should be invoked before rendering this PaletteColumn.
-     */
-    public void sortByValue()
-    {
-        Collections.sort(_options, new ValueComparator());
-    }
-
-    /**
-     * Sorts the options by the label visible to the user. This should be invoked before rendering
-     * this PaletteColumn.
-     */
-    public void sortByLabel()
-    {
-        Collections.sort(_options, new LabelComparator());
-    }
-
-    /**
-     * Renders the &lt;select&gt; and &lt;option&gt; tags for this column.
-     */
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.begin("select");
-        writer.attribute("multiple", "multiple");
-        writer.attribute("name", _name);
-
-        if (_clientId != null)
-            writer.attribute("id", _clientId);
-
-        writer.attribute("size", _rows);
-        writer.println();
-
-        int count = _options.size();
-        for (int i = 0; i < count; i++)
-        {
-            PaletteOption o = (PaletteOption) _options.get(i);
-
-            o.render(writer, cycle);
-        }
-
-        writer.end();
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/PaletteFunctions.js b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/PaletteFunctions.js
deleted file mode 100644
index b053a50..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/PaletteFunctions.js
+++ /dev/null
@@ -1,218 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-dojo.provide("tapestry.palette");

-

-tapestry.palette={

-	

-	clearSelections:function(element){

-		var options = element.options;

-		for (var i = 0; i < options.length; i++) {

-			options[i].selected = false;

-		}

-	},

-	

-	selectAll:function(element){

-		var options = element.options;

-  		for (var i = 0; i < options.length; i++) {

-    		options[i].selected = true;

-  		}

-	},

-	

-	sort:function(element,sorter){

-		var options = element.options;

-	  	

-	  	var list = [];

-	  	var index = 0;

-	  	var isNavigator = dojo.render.html.mozilla || !options.remove;

-	  	

-	  	while (options.length > 0){

-	  		var option = options[0];

-	        

-	        if (isNavigator){

-	      		// Can't transfer option in nn4, nn6

-	      		var copy = new Option(option.text, option.value);

-	      		copy.text = option.text;

-	      		copy.value = option.value;

-	      		copy.selected = options.selected;

-	      		

-	      		list[index++] = copy;

-	    	} else {

-	      		list[index++] = option;

-	    	}

-	    	

-	    	options[0] = null;

-	  	}

-	  	

-	  	list.sort(sorter);

-	  	

-	  	for (var i = 0; i < list.length; i++){

-	    	options[i] = list[i]; 

-	    }

-	},

-	

-	labelSorter:function(a, b){

-		var a_text = a.text;

-	  	var b_text = b.text;

-	  

-	  	if (a_text == b_text) {return 0;}

-	    

-	  	if (a_text < b.text) { return -1;}

-	  	

-	  	return 1;

-	},

-	

-	sortByLabel:function(element){

-		this.sort(element, this.labelSorter);

-	},

-	

-	valueSorter:function(a,b){

-		var a_value = a.value;

-  		var b_value = b.value;

-  

-  		if (a_value == b_value) { return 0; }

-    	

-  		if (a_value < b_value) { return -1; }

-    

-  		return 1;

-	},

-	

-	sortByValue:function(element){

-		this.sort(element, this.valueSorter);

-	},

-	

-	transferSelections:function(source, target){

-		var sourceOptions = source.options;

-  		var targetOptions = target.options;

-  

-  		var targetIndex = target.selectedIndex;

-  		var offset = 0;

-  

-  		this.clearSelections(target);

-  		

-  		for (var i=0; i < sourceOptions.length; i++){

-    		var option = sourceOptions[i];

-    		

-    		if (option.selected) {

-       			if (dojo.render.html.mozilla || !sourceOptions.remove){

-           			// Can't share options between selects in NN4

-           			var newOption = new Option(option.text, option.value, false, true);

-           			sourceOptions[i] = null;

-          			// Always added to end in NN4

-          			targetOptions[targetOptions.length] = newOption;

-       			} else {

-         			sourceOptions.remove(i);

-         			

-         			if (targetIndex < 0) {

-           				targetOptions.add(option);

-         			} else {

-           				targetOptions.add(option, targetIndex + offset++);

-         			}

-      			}

-      			

-      			i--;

-    		}

-  		}

-	},

-	

-	swapOptions:function(options, selectedIndex, targetIndex){

-		var option = options[selectedIndex];

-

-  		// It's very hard to reorder options in NN4

-  		if (dojo.render.html.mozilla || !options.remove){

-    		var swap = options[targetIndex];

-    

-    		var hold = swap.text;

-    		swap.text = option.text;

-    		option.text = hold;

-    

-    		hold = swap.value;

-    		swap.value = option.value;

-    		option.value = hold;

-    

-    		hold = swap.selected;

-    		swap.selected = option.selected;

-    		option.selected = hold;

-    

-    		// defaultSelected isn't relevant to the Palette

-    		return;

-  		}

-  		

-  		// Sensible browsers ...

-  		options.remove(selectedIndex);

-  		options.add(option, targetIndex);

-	}

-}

-

-function palette_clear_selections(element){ 

-	dojo.deprecated("palette_clear_selections",

-					"use tapestry.palette.clearSelections instead",

-					"4.1.1");

-	tapestry.palette.clearSelections(element);

-}

-

-function palette_select_all(element){

-	dojo.deprecated("palette_select_all",

-					"use tapestry.palette.selectAll instead",

-					"4.1.1");

-	tapestry.palette.selectAll(element);

-}

-

-function palette_sort(element, sorter){

-	dojo.deprecated("palette_sort",

-					"use tapestry.palette.sort instead",

-					"4.1.1");

-	tapestry.palette.sort(element, sorter);

-}

-

-function palette_label_sorter(a, b){

-	dojo.deprecated("palette_label_sorter",

-					"use tapestry.palette.labelSorter instead",

-					"4.1.1");

-	return tapestry.palette.labelSorter(a,b);

-}

-

-function palette_sort_by_label(element){

-	dojo.deprecated("palette_sort_by_label",

-					"use tapestry.palette.sortByLabel instead",

-					"4.1.1");

-	tapestry.palette.sortByLabel(element);

-}

-

-function palette_value_sorter(a, b){

-	dojo.deprecated("palette_value_sorter",

-					"use tapestry.palette.valueSorter instead",

-					"4.1.1");

-	return tapestry.palette.valueSorter(a,b);

-}

-

-function palette_sort_by_value(element){

-	dojo.deprecated("palette_sort_by_value",

-					"use tapestry.palette.sortByValue instead",

-					"4.1.1");

-	tapestry.palette.sortByValue(element);

-}

-  

-function palette_transfer_selections(source, target){

-	dojo.deprecated("palette_transfer_selections",

-					"use tapestry.palette.transferSelections instead",

-					"4.1.1");

-	tapestry.palette.transferSelections(source, target);

-}

-

-function palette_swap_options(options, selectedIndex, targetIndex){

-	dojo.deprecated("palette_swap_options",

-					"use tapestry.palette.swapOptions instead",

-					"4.1.1");

-	tapestry.palette.swapOptions(options, selectedIndex, targetIndex);

-}

diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/PaletteOption.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/PaletteOption.java
deleted file mode 100644
index 81d7cde..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/PaletteOption.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.palette;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Used to hold options editable by a Palette component, so that they may
- * be sorted into an appropriate order.
- *
- * @author Howard Lewis Ship
- */
-public class PaletteOption implements IRender
-{
-    private String _value;
-    private String _label;
-
-    public PaletteOption(String value, String label)
-    {
-        _value = value;
-        _label = label;
-    }
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.begin("option");
-        writer.attribute("value", _value);
-        writer.print(_label);
-        writer.end(); // <option>
-        writer.println();
-    }
-
-    public String getLabel()
-    {
-        return _label;
-    }
-
-    public String getValue()
-    {
-        return _value;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/SortMode.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/SortMode.java
deleted file mode 100644
index ba61d45..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/SortMode.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.palette;
-
-/**
- * Defines different sorting strategies for the {@link Palette} component.
- * 
- * @author Howard Lewis Ship
- */
-
-public class SortMode
-{
-    /**
-     * Sorting is not relevant and no sort controls should be visible.
-     */
-
-    public static final String NONE = "NONE";
-
-    /**
-     * Options should be sorted by their label.
-     */
-
-    public static final String LABEL = "LABEL";
-
-    /**
-     * Options should be sorted by thier value.
-     */
-
-    public static final String VALUE = "VALUE";
-
-    /**
-     * The user controls sort order; additional controls are added to allow the user to control the
-     * order of options in the selected list.
-     */
-
-    public static final String USER = "USER";
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/deselect_left.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/deselect_left.gif
deleted file mode 100644
index 2940e01..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/deselect_left.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/deselect_left_off.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/deselect_left_off.gif
deleted file mode 100644
index 84dc945..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/deselect_left_off.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_down.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_down.gif
deleted file mode 100644
index 8fb0088..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_down.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_down_off.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_down_off.gif
deleted file mode 100644
index 174baeb..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_down_off.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_up.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_up.gif
deleted file mode 100644
index 711c86a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_up.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_up_off.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_up_off.gif
deleted file mode 100644
index e23a43f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/move_up_off.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/package.html
deleted file mode 100644
index bed0ef5..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>A powerful component for handling the very common case of moving elements
-from two different multi selection input boxes. Client side scripting helps
-make the interactions more intuitive.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/select_right.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/select_right.gif
deleted file mode 100644
index 74e90c3..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/select_right.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/select_right_off.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/select_right_off.gif
deleted file mode 100644
index 452ce50..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/palette/select_right_off.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/services/impl/RoundedCornerGenerator.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/services/impl/RoundedCornerGenerator.java
deleted file mode 100644
index 7986253..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/services/impl/RoundedCornerGenerator.java
+++ /dev/null
@@ -1,444 +0,0 @@
-package org.apache.tapestry.contrib.services.impl;
-
-import org.apache.hivemind.util.Defense;
-
-import javax.imageio.ImageIO;
-import java.awt.*;
-import java.awt.geom.Arc2D;
-import java.awt.geom.Rectangle2D;
-import java.awt.geom.RoundRectangle2D;
-import java.awt.image.BufferedImage;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Class responsible for bulk of java2d manipulation work when used in the {@link RoundedCornerService}. 
- */
-public class RoundedCornerGenerator {
-
-    public static final String TOP_LEFT = "tl";
-    public static final String TOP_RIGHT = "tr";
-    public static final String BOTTOM_LEFT = "bl";
-    public static final String BOTTOM_RIGHT = "br";
-
-    public static final String LEFT = "left";
-    public static final String RIGHT = "right";
-    public static final String TOP = "top";
-    public static final String BOTTOM = "bottom";
-
-    // css2 color spec - http://www.w3.org/TR/REC-CSS2/syndata.html#color-units
-    private static final Map _cssSpecMap = new HashMap();
-
-    static {
-        _cssSpecMap.put("aqua", new Color(0,255,255));
-        _cssSpecMap.put("black", Color.black);
-        _cssSpecMap.put("blue", Color.blue);
-        _cssSpecMap.put("fuchsia", new Color(255,0,255));
-        _cssSpecMap.put("gray", Color.gray);
-        _cssSpecMap.put("green", Color.green);
-        _cssSpecMap.put("lime", new Color(0,255,0));
-        _cssSpecMap.put("maroon", new Color(128,0,0));
-        _cssSpecMap.put("navy", new Color(0,0,128));
-        _cssSpecMap.put("olive", new Color(128,128,0));
-        _cssSpecMap.put("purple", new Color(128,0,128));
-        _cssSpecMap.put("red", Color.red);
-        _cssSpecMap.put("silver", new Color(192,192,192));
-        _cssSpecMap.put("teal", new Color(0,128,128));
-        _cssSpecMap.put("white", Color.white);
-        _cssSpecMap.put("yellow", Color.yellow);
-
-        ImageIO.setUseCache(false);
-    }
-
-    private static Color SHADOW_COLOR = new Color(0x000000);
-
-    private static final float DEFAULT_OPACITY = 0.5f;
-
-    private static final float ANGLE_TOP_LEFT = 90f;
-    private static final float ANGLE_TOP_RIGHT = 0f;
-    private static final float ANGLE_BOTTOM_LEFT = 180f;
-    private static final float ANGLE_BOTTOM_RIGHT = 270f;
-
-    public BufferedImage buildCorner(String color, String backgroundColor, int width, int height,
-                                     String angle, int shadowWidth, float endOpacity)
-      throws Exception
-    {
-        width = width * 2;
-        height = height * 2;
-        float startAngle = getStartAngle(angle);
-        Color bgColor = backgroundColor == null ? null : decodeColor(backgroundColor);
-
-        if (shadowWidth <= 0) {
-
-            BufferedImage arc = drawArc(color, width, height, angle, false, -1);
-            BufferedImage ret = arc;
-
-            Arc2D.Float arcArea = new Arc2D.Float(0, 0, width, height, startAngle, 90, Arc2D.PIE);
-            if (bgColor != null) {
-
-                ret = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
-                Graphics2D g2 = (Graphics2D)ret.createGraphics();
-                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-                g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
-
-                g2.setColor(bgColor);
-                g2.fill(arcArea.getBounds2D());
-
-                g2.drawImage(arc, 0, 0, null);
-
-                g2.dispose();
-
-                ret = convertType(ret, BufferedImage.TYPE_INT_RGB);
-            }
-
-            return ret.getSubimage((int)arcArea.getBounds2D().getX(), (int)arcArea.getBounds2D().getY(),
-                                   (int)arcArea.getBounds2D().getWidth(), (int)arcArea.getBounds2D().getHeight());
-        }
-
-        BufferedImage mask = drawArc(color, width, height, angle, true, shadowWidth);
-        BufferedImage arc = drawArc(color, width, height, angle, false, shadowWidth);
-
-        float startX = 0;
-        float startY = 0;
-        int shadowSize = shadowWidth * 2;
-        float canvasWidth = width + (shadowSize * 2);
-        float canvasHeight = height + (shadowSize * 2);
-
-        if (startAngle == ANGLE_BOTTOM_LEFT) {
-
-            startY -= (shadowSize * 2);
-
-        } else if (startAngle == ANGLE_TOP_RIGHT) {
-
-            startX -= shadowSize * 2;
-
-        } else if (startAngle == ANGLE_BOTTOM_RIGHT) {
-
-            startX -= shadowSize * 2;
-            startY -= shadowSize * 2;
-        }
-
-        BufferedImage ret = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
-        Graphics2D g2 = (Graphics2D)ret.createGraphics();
-        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-
-        Arc2D.Float arcArea = new Arc2D.Float(startX, startY, canvasWidth, canvasHeight, startAngle, 90, Arc2D.PIE);
-
-        if (bgColor != null) {
-
-            g2.setColor(bgColor);
-            g2.fill(arcArea.getBounds2D());
-        }
-
-        BufferedImage shadow = drawArcShadow(mask, color, backgroundColor, width, height, angle, shadowWidth, endOpacity);
-
-        g2.setClip(arcArea);
-        g2.drawImage(shadow, 0, 0, null);
-
-        g2.setClip(null);
-        g2.drawImage(arc, 0, 0, null);
-
-        return convertType(ret, BufferedImage.TYPE_INT_RGB).getSubimage((int)arcArea.getBounds2D().getX(), (int)arcArea.getBounds2D().getY(),
-                                                                        (int)arcArea.getBounds2D().getWidth(), (int)arcArea.getBounds2D().getHeight());
-    }
-
-    static BufferedImage convertType(BufferedImage image, int type) {
-        BufferedImage result = new BufferedImage(image.getWidth(), image.getHeight(), type);
-        Graphics2D g = result.createGraphics();
-        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
-        g.drawRenderedImage(image, null);
-        g.dispose();
-        return result;
-    }
-
-    BufferedImage drawArc(String color, int width, int height, String angle, boolean masking, int shadowWidth)
-    {
-        Color arcColor = decodeColor(color);
-        float startAngle = getStartAngle(angle);
-
-        int canvasWidth = width;
-        int canvasHeight = height;
-        float startX = 0;
-        float startY = 0;
-        int shadowSize = 0;
-
-        if (shadowWidth > 0 && !masking) {
-
-            shadowSize = shadowWidth * 2;
-            canvasWidth += shadowSize * 2;
-            canvasHeight += shadowSize * 2;
-
-            if (startAngle == ANGLE_TOP_LEFT) {
-
-                startX += shadowSize;
-                startY += shadowSize;
-
-            } else if (startAngle == ANGLE_BOTTOM_LEFT) {
-
-                startX += shadowSize;
-                startY -= shadowSize;
-
-            } else if (startAngle == ANGLE_TOP_RIGHT) {
-
-                startX -= shadowSize;
-                startY += shadowSize;
-
-            } else if (startAngle == ANGLE_BOTTOM_RIGHT) {
-
-                startX -= shadowSize;
-                startY -= shadowSize;
-            }
-        }
-
-        BufferedImage img = new BufferedImage( canvasWidth, canvasHeight, BufferedImage.TYPE_INT_ARGB);
-        Graphics2D g2 = (Graphics2D) img.createGraphics();
-
-        float extent = 90;
-        if (masking) {
-
-            extent = 120;
-            startAngle -= 20;
-        }
-
-        Arc2D.Float fillArea = new Arc2D.Float(startX, startY, width, height, startAngle, extent, Arc2D.PIE);
-
-        // draw arc
-        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-        g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
-
-        g2.setColor(arcColor);
-        g2.setComposite(AlphaComposite.Src);
-        g2.fill(fillArea);
-
-        g2.dispose();
-
-        return img;
-    }
-
-    BufferedImage drawArcShadow(BufferedImage mask, String color, String backgroundColor, int width, int height,
-                                String angle, int shadowWidth, float endOpacity)
-    {
-        float startAngle = getStartAngle(angle);
-        int shadowSize = shadowWidth * 2;
-        int sampleY = 0;
-        int sampleX = 0;
-        int sampleWidth = width + shadowSize;
-        int sampleHeight = height + shadowSize;
-
-        if (startAngle == ANGLE_TOP_LEFT) {
-
-        } else if (startAngle == ANGLE_BOTTOM_LEFT) {
-
-            sampleWidth -= shadowSize;
-            sampleHeight = height;
-
-            sampleY += shadowSize;
-
-        } else if (startAngle == ANGLE_TOP_RIGHT) {
-
-            sampleWidth -= shadowSize;
-            sampleHeight -= shadowSize;
-
-            sampleX += shadowSize;
-        } else if (startAngle == ANGLE_BOTTOM_RIGHT) {
-
-            sampleWidth -= shadowSize;
-            sampleHeight -= shadowSize;
-
-            sampleX += shadowSize;
-            sampleY += shadowSize;
-        }
-
-        ShadowRenderer shadowRenderer = new ShadowRenderer(shadowWidth, endOpacity, SHADOW_COLOR);
-        BufferedImage dropShadow = shadowRenderer.createShadow(mask);
-
-        // draw shadow arc
-
-        BufferedImage img = new BufferedImage( (width * 4), (height * 4), BufferedImage.TYPE_INT_ARGB);
-        Graphics2D g2 = (Graphics2D) img.createGraphics();
-
-        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-        g2.setComposite(AlphaComposite.Src);
-        g2.drawImage(dropShadow, 0, 0, null);
-
-        g2.dispose();
-
-        return img.getSubimage(sampleX, sampleY, sampleWidth, sampleHeight);
-    }
-
-    public BufferedImage buildShadow(String color, String backgroundColor, int width, int height,
-                                     float arcWidth, float arcHeight,
-                                     int shadowWidth, float endOpacity)
-    {
-        Color fgColor = color == null ? Color.WHITE : decodeColor(color);
-        Color bgColor = backgroundColor == null ? null : decodeColor(backgroundColor);
-
-        BufferedImage mask = new BufferedImage(width, height,  BufferedImage.TYPE_INT_ARGB);
-        Graphics2D g2 = mask.createGraphics();
-
-        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-
-        RoundRectangle2D.Float fillArea = new RoundRectangle2D.Float(0, 0, width, height, arcHeight, arcWidth);
-        g2.setColor(fgColor);
-        g2.fill(fillArea);
-        g2.dispose();
-
-        // clip shadow
-
-        ShadowRenderer shadowRenderer = new ShadowRenderer(shadowWidth, endOpacity, SHADOW_COLOR);
-        BufferedImage dropShadow = shadowRenderer.createShadow(mask);
-
-        BufferedImage clipImg = new BufferedImage( width + (shadowWidth * 2), height + (shadowWidth * 2), BufferedImage.TYPE_INT_ARGB);
-        g2 = clipImg.createGraphics();
-
-        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-        g2.setComposite(AlphaComposite.Src);
-
-        RoundRectangle2D.Float clip = new RoundRectangle2D.Float(0, 0, width + (shadowWidth * 2), height + (shadowWidth * 2), arcHeight, arcWidth);
-        g2.setClip(clip);
-        g2.drawImage(dropShadow, 0, 0, null);
-        g2.dispose();
-
-        // draw everything
-
-        BufferedImage img = new BufferedImage( width + (shadowWidth * 2), height + (shadowWidth * 2), BufferedImage.TYPE_INT_ARGB);
-        g2 = img.createGraphics();
-        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-
-        if (bgColor != null)
-        {
-            fillArea = new RoundRectangle2D.Float(0, 0, width + (shadowWidth * 2), height + (shadowWidth * 2), arcHeight, arcWidth);
-            g2.setColor(bgColor);
-            g2.fill(fillArea.getBounds2D());
-        }
-
-        g2.drawImage(clipImg, 0, 0, null);
-
-        if (fgColor != null)
-        {
-            fillArea = new RoundRectangle2D.Float(0, 0, width, height, arcHeight, arcWidth);
-            g2.setColor(fgColor);
-            g2.fill(fillArea);
-        }
-
-        g2.dispose();
-
-        return convertType(img, BufferedImage.TYPE_INT_RGB);
-    }
-
-    public BufferedImage buildSideShadow(String side, int size, float opacity)
-      throws Exception
-    {
-        Defense.notNull(side, "side");
-
-        if (opacity <= 0)
-            opacity = DEFAULT_OPACITY;
-
-        int maskWidth = 0;
-        int maskHeight = 0;
-        int sampleY = 0;
-        int sampleX = 0;
-        int sampleWidth = 0;
-        int sampleHeight = 0;
-
-        if (LEFT.equals(side)) {
-
-            maskWidth = size * 4;
-            maskHeight = size * 4;
-            sampleY = maskHeight / 2;
-            sampleWidth = size * 2;
-            sampleHeight = 2;
-        } else if (RIGHT.equals(side)) {
-
-            maskWidth = size * 4;
-            maskHeight = size * 4;
-            sampleY = maskHeight / 2;
-            sampleX = maskWidth;
-            sampleWidth = size * 2;
-            sampleHeight = 2;
-        } else if (BOTTOM.equals(side)) {
-
-            maskWidth = size * 4;
-            maskHeight = size * 4;
-            sampleY = maskHeight;
-            sampleX = maskWidth / 2;
-            sampleWidth = 2;
-            sampleHeight = size * 2;
-        } else if (TOP.equals(side)) {
-
-            maskWidth = size * 4;
-            maskHeight = size * 4;
-            sampleY = 0;
-            sampleX = maskWidth / 2;
-            sampleWidth = 2;
-            sampleHeight = size * 2;
-        }
-
-        BufferedImage mask = new BufferedImage( maskWidth, maskHeight, BufferedImage.TYPE_INT_ARGB);
-        Graphics2D g2 = (Graphics2D) mask.createGraphics();
-
-        g2.setColor(Color.white);
-        g2.fillRect(0, 0, maskWidth, maskHeight);
-
-        g2.dispose();
-
-        ShadowRenderer shadowRenderer = new ShadowRenderer(size, opacity, SHADOW_COLOR);
-        BufferedImage dropShadow = shadowRenderer.createShadow(mask);
-
-        BufferedImage render = new BufferedImage(maskWidth * 2, maskHeight * 2, BufferedImage.TYPE_INT_ARGB);
-        g2 = (Graphics2D)render.createGraphics();
-
-        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-
-        Rectangle2D.Float clip = new Rectangle2D.Float(sampleX, sampleY, sampleWidth, sampleHeight);
-
-        g2.setColor(Color.white);
-        g2.fill(clip);
-
-        g2.drawImage(dropShadow, 0, 0, null);
-
-        g2.dispose();
-
-        return render.getSubimage(sampleX, sampleY, sampleWidth, sampleHeight);
-    }
-
-    /**
-     * Matches the incoming string against one of the constants defined; tl, tr, bl, br.
-     *
-     * @param code The code for the angle of the arc to generate, if no match is found the default is
-     *          {@link #TOP_RIGHT} - or 0 degrees.
-     * @return The pre-defined 90 degree angle starting degree point.
-     */
-    public float getStartAngle(String code)
-    {
-        if (TOP_LEFT.equalsIgnoreCase(code))
-            return ANGLE_TOP_LEFT;
-        if (TOP_RIGHT.equalsIgnoreCase(code))
-            return ANGLE_TOP_RIGHT;
-        if (BOTTOM_LEFT.equalsIgnoreCase(code))
-            return ANGLE_BOTTOM_LEFT;
-        if (BOTTOM_RIGHT.equalsIgnoreCase(code))
-            return ANGLE_BOTTOM_RIGHT;
-
-        return ANGLE_TOP_RIGHT;
-    }
-
-    /**
-     * Decodes the specified input color string into a compatible awt color object. Valid inputs
-     * are any in the css2 color spec or hex strings.
-     *
-     * @param color The color to match.
-     * @return The decoded color object, may be black if decoding fails.
-     */
-    public Color decodeColor(String color)
-    {
-        Color specColor = (Color) _cssSpecMap.get(color);
-        if (specColor != null)
-            return specColor;
-
-        String hexColor = color.startsWith("0x") ? color : "0x" + color;
-
-        return Color.decode(hexColor);
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/services/impl/RoundedCornerService.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/services/impl/RoundedCornerService.java
deleted file mode 100644
index 511c891..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/services/impl/RoundedCornerService.java
+++ /dev/null
@@ -1,272 +0,0 @@
-package org.apache.tapestry.contrib.services.impl;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.error.RequestExceptionReporter;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-import javax.imageio.ImageIO;
-import javax.servlet.http.HttpServletResponse;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Provides generated rounded corner images in a similar use / fashion as
- * outlined here: <a href="http://xach.livejournal.com/95656.html">google's own cornershop</a>.
- */
-public class RoundedCornerService implements IEngineService {
-
-    public static final String SERVICE_NAME = "rounded";
-
-    public static final String PARM_COLOR = "c";
-    public static final String PARM_BACKGROUND_COLOR = "bc";
-    public static final String PARM_WIDTH = "w";
-    public static final String PARM_HEIGHT = "h";
-    public static final String PARM_ANGLE = "a";
-
-    public static final String PARM_SHADOW_WIDTH ="sw";
-    public static final String PARM_SHADOW_OPACITY ="o";
-    public static final String PARM_SHADOW_SIDE = "s";
-
-    public static final String PARM_WHOLE_SHADOW = "shadow";
-    public static final String PARM_ARC_HEIGHT = "ah";
-    public static final String PARM_ARC_WIDTH = "aw";
-
-    private static final long MONTH_SECONDS = 60 * 60 * 24 * 30;
-
-    private static final long EXPIRES = System.currentTimeMillis() + 365 * 24 * 60 * 60 * 1000L;
-
-    private RequestExceptionReporter _exceptionReporter;
-
-    private LinkFactory _linkFactory;
-
-    private WebRequest _request;
-
-    private WebResponse _response;
-
-    private RoundedCornerGenerator _generator = new RoundedCornerGenerator();
-
-    // holds pre-built binaries for previously generated colors
-    private Map _imageCache = new HashMap();
-
-    private Log _log;
-
-    /** The ImageIO format name to encode images in that don't need alpha transparency */
-    private String _nonTransparentFormatName = "gif";
-
-    public void initialize()
-    {
-        String[] names = ImageIO.getWriterFormatNames();
-
-        boolean supportsGif = false;
-        
-        for (int i=0; i < names.length; i++)
-        {
-            if (names[i].toLowerCase().equals("gif"))
-            {
-                supportsGif = true;
-                break;
-            }
-        }
-
-        if (!supportsGif)
-        {
-            _nonTransparentFormatName = "jpeg";
-        }
-    }
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        Defense.notNull(parameter, "parameter");
-        Defense.isAssignable(parameter, Object[].class, "parameter");
-        
-        Object[] parms = (Object[]) parameter;
-        
-        Map parameters = new HashMap();
-        parameters.put(ServiceConstants.SERVICE, getName());
-        parameters.put(ServiceConstants.PARAMETER, parms);
-        
-        return _linkFactory.constructLink(this, post, parameters, false);
-    }
-
-    public void service(IRequestCycle cycle)
-            throws IOException
-    {
-        if (_request.getHeader("If-Modified-Since") != null)
-        {
-            _response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-            return;
-        }
-
-        String color = cycle.getParameter(PARM_COLOR);
-        String bgColor = cycle.getParameter(PARM_BACKGROUND_COLOR);
-        int width = getIntParam(cycle.getParameter(PARM_WIDTH));
-        int height = getIntParam(cycle.getParameter(PARM_HEIGHT));
-        String angle = cycle.getParameter(PARM_ANGLE);
-        
-        int shadowWidth = getIntParam(cycle.getParameter(PARM_SHADOW_WIDTH));
-        float shadowOpacity = getFloatParam(cycle.getParameter(PARM_SHADOW_OPACITY));
-        String side = cycle.getParameter(PARM_SHADOW_SIDE);
-
-        boolean wholeShadow = Boolean.valueOf(cycle.getParameter(PARM_WHOLE_SHADOW)).booleanValue();
-        float arcWidth = getFloatParam(cycle.getParameter(PARM_ARC_WIDTH));
-        float arcHeight = getFloatParam(cycle.getParameter(PARM_ARC_HEIGHT));
-
-        String hashKey = color + bgColor + width + height + angle + shadowWidth + shadowOpacity + side + wholeShadow;
-
-        ByteArrayOutputStream bo = null;
-        
-        try {
-            
-            String type = (bgColor != null) ? _nonTransparentFormatName : "png";
-
-            byte[] data = (byte[])_imageCache.get(hashKey);
-            if (data != null)
-            {
-                writeImageResponse(data, type);
-                return;
-            }
-
-            BufferedImage image = null;
-
-            if (wholeShadow)
-            {
-                image = _generator.buildShadow(color, bgColor, width, height, arcWidth, arcHeight, shadowWidth, shadowOpacity);
-            } else if (side != null)
-            {
-                image = _generator.buildSideShadow(side, shadowWidth, shadowOpacity);
-            } else
-            {
-                image = _generator.buildCorner(color, bgColor, width, height, angle, shadowWidth, shadowOpacity);
-            }
-
-            bo = new ByteArrayOutputStream();
-
-            boolean success = ImageIO.write(image, type, bo);
-
-            data = bo.toByteArray();
-
-            if (!success || data == null || data.length < 1)
-            {
-                _log.error("Image generated had zero length byte array or failed to convert from parameters of:\n"
-                           + "[color:" + color + ", bgColor:" + bgColor
-                           + ", width:" + width + ", height:" + height
-                           + ", angle:" + angle + ", shadowWidth:" + shadowWidth
-                           + ", shadowOpacity:" + shadowOpacity + ", side:" + side
-                           + ", wholeShadow: " + wholeShadow + ", arcWidth: " + arcWidth
-                           + ", arcHeight:" + arcHeight + "\n image: " + image);
-
-                _response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-                return;
-            }
-
-            _imageCache.put(hashKey, data);
-
-            writeImageResponse(data, type);
-            
-        } catch (IOException eof)
-        {
-            // ignored / expected exceptions happen when browser prematurely abandons connections - IE does this a lot
-        } catch (Throwable ex) {
-
-            ex.printStackTrace();
-            _exceptionReporter.reportRequestException("Error creating image.", ex);
-        } finally {
-            try {
-                if (bo != null) {
-                    bo.close();
-                }
-            } catch (Throwable t) {
-                // ignore
-            }
-
-        }
-    }
-
-    void writeImageResponse(byte[] data, String type)
-    throws Exception
-    {
-        OutputStream os = null;
-
-        try {
-            _response.setDateHeader("Expires", EXPIRES);
-            _response.setHeader("Cache-Control", "public, max-age=" + (MONTH_SECONDS * 3));
-            _response.setContentLength(data.length);
-
-            os = _response.getOutputStream(new ContentType("image/" + type));
-
-            os.write(data);
-
-        }  finally {
-            try {
-                if (os != null) {
-                    os.flush();
-                    os.close();
-                }
-            } catch (Throwable t) {
-                // ignore
-            }
-        }
-    }
-
-    private int getIntParam(String value)
-    {
-        if (value == null)
-            return -1;
-        
-        return Integer.valueOf(value).intValue();
-    }
-
-    private float getFloatParam(String value)
-    {
-        if (value == null)
-            return -1f;
-        
-        return Float.valueOf(value).floatValue();
-    }
-
-    public String getName()
-    {
-        return SERVICE_NAME;
-    }
-
-    /* Injected */
-    public void setExceptionReporter(RequestExceptionReporter exceptionReporter)
-    {
-        _exceptionReporter = exceptionReporter;
-    }
-
-    /* Injected */
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-
-    /* Injected */
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-
-    /* Injected */
-    public void setResponse(WebResponse response)
-    {
-        _response = response;
-    }
-
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/services/impl/ShadowRenderer.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/services/impl/ShadowRenderer.java
deleted file mode 100644
index 80c2b4f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/services/impl/ShadowRenderer.java
+++ /dev/null
@@ -1,357 +0,0 @@
-package org.apache.tapestry.contrib.services.impl;
-
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.awt.image.Raster;
-import java.awt.image.WritableRaster;
-
-/**
- *
- */
-public class ShadowRenderer {
-
-    // size of the shadow in pixels (defines the fuzziness)
-    private int size = 5;
-
-    // opacity of the shadow
-    private float opacity = 0.5f;
-    
-    // color of the shadow
-    private Color color = Color.BLACK;
-
-    /**
-     * <p>A shadow renderer needs three properties to generate shadows.
-     * These properties are:</p>
-     * <ul>
-     *   <li><i>size</i>: The size, in pixels, of the shadow. This property also
-     *   defines the fuzzyness.</li>
-     *   <li><i>opacity</i>: The opacity, between 0.0 and 1.0, of the shadow.</li>
-     *   <li><i>color</i>: The color of the shadow. Shadows are not meant to be
-     *   black only.</li>
-     * </ul>
-     * @param size the size of the shadow in pixels. Defines the fuzziness.
-     * @param opacity the opacity of the shadow.
-     * @param color the color of the shadow.
-     */
-    public ShadowRenderer(final int size, final float opacity, final Color color) {
-
-        setSize(size);
-        setOpacity(opacity);
-        setColor(color);
-    }
-
-    /**
-     * <p>Gets the color used by the renderer to generate shadows.</p>
-     * @return this renderer's shadow color
-     */
-    public Color getColor() {
-        return color;
-    }
-
-    /**
-     * <p>Sets the color used by the renderer to generate shadows.</p>
-     * <p>Consecutive calls to {@link #createShadow} will all use this color
-     * until it is set again.</p>
-     * <p>If the color provided is null, the previous color will be retained.</p>
-     * @param shadowColor the generated shadows color
-     */
-    public void setColor(final Color shadowColor) {
-        if (shadowColor != null) {
-            Color oldColor = this.color;
-            this.color = shadowColor;
-        }
-    }
-
-    /**
-     * <p>Gets the opacity used by the renderer to generate shadows.</p>
-     * <p>The opacity is comprised between 0.0f and 1.0f; 0.0f being fully
-     * transparent and 1.0f fully opaque.</p>
-     * @return this renderer's shadow opacity
-     */
-    public float getOpacity() {
-        return opacity;
-    }
-
-    /**
-     * <p>Sets the opacity used by the renderer to generate shadows.</p>
-     * <p>Consecutive calls to {@link #createShadow} will all use this opacity
-     * until it is set again.</p>
-     * <p>The opacity is comprised between 0.0f and 1.0f; 0.0f being fully
-     * transparent and 1.0f fully opaque. If you provide a value out of these
-     * boundaries, it will be restrained to the closest boundary.</p>
-     * @param shadowOpacity the generated shadows opacity
-     */
-    public void setOpacity(final float shadowOpacity) {
-        float oldOpacity = this.opacity;
-
-        if (shadowOpacity < 0.0) {
-            this.opacity = 0.0f;
-        } else if (shadowOpacity > 1.0f) {
-            this.opacity = 1.0f;
-        } else {
-            this.opacity = shadowOpacity;
-        }
-    }
-
-    /**
-     * <p>Gets the size in pixel used by the renderer to generate shadows.</p>
-     * @return this renderer's shadow size
-     */
-    public int getSize() {
-        return size;
-    }
-
-    /**
-     * <p>Sets the size, in pixels, used by the renderer to generate shadows.</p>
-     * <p>The size defines the blur radius applied to the shadow to create the
-     * fuzziness.</p>
-     * <p>There is virtually no limit to the size. The size cannot be negative.
-     * If you provide a negative value, the size will be 0 instead.</p>
-     * @param shadowSize the generated shadows size in pixels (fuzziness)
-     */
-    public void setSize(final int shadowSize) {
-        int oldSize = this.size;
-
-        if (shadowSize < 0) {
-            this.size = 0;
-        } else {
-            this.size = shadowSize;
-        }
-    }
-
-    /**
-     * <p>Generates the shadow for a given picture and the current properties
-     * of the renderer.</p>
-     * <p>The generated image dimensions are computed as following:</p>
-     * <pre>
-     * width  = imageWidth  + 2 * shadowSize
-     * height = imageHeight + 2 * shadowSize
-     * </pre>
-     * @param image the picture from which the shadow must be cast
-     * @return the picture containing the shadow of <code>image</code>
-     */
-    public BufferedImage createShadow(final BufferedImage image) {
-        
-        // Written by Sesbastien Petrucci
-        int shadowSize = size * 2;
-
-        int srcWidth = image.getWidth();
-        int srcHeight = image.getHeight();
-
-        int dstWidth = srcWidth + shadowSize;
-        int dstHeight = srcHeight + shadowSize;
-
-        int left = size;
-        int right = shadowSize - left;
-
-        int yStop = dstHeight - right;
-
-        int shadowRgb = color.getRGB() & 0x00FFFFFF;
-        int[] aHistory = new int[shadowSize];
-        int historyIdx;
-
-        int aSum;
-
-        BufferedImage dst = new BufferedImage(dstWidth, dstHeight,
-                                              BufferedImage.TYPE_INT_ARGB);
-
-        int[] dstBuffer = new int[dstWidth * dstHeight];
-        int[] srcBuffer = new int[srcWidth * srcHeight];
-
-        getPixels(image, 0, 0, srcWidth, srcHeight, srcBuffer);
-
-        int lastPixelOffset = right * dstWidth;
-        float hSumDivider = 1.0f / shadowSize;
-        float vSumDivider = opacity / shadowSize;
-
-        int[] hSumLookup = new int[256 * shadowSize];
-        for (int i = 0; i < hSumLookup.length; i++) {
-            hSumLookup[i] = (int) (i * hSumDivider);
-        }
-
-        int[] vSumLookup = new int[256 * shadowSize];
-        for (int i = 0; i < vSumLookup.length; i++) {
-            vSumLookup[i] = (int) (i * vSumDivider);
-        }
-
-        int srcOffset;
-
-        // horizontal pass : extract the alpha mask from the source picture and
-        // blur it into the destination picture
-        for (int srcY = 0, dstOffset = left * dstWidth; srcY < srcHeight; srcY++) {
-
-            // first pixels are empty
-            for (historyIdx = 0; historyIdx < shadowSize; ) {
-                aHistory[historyIdx++] = 0;
-            }
-
-            aSum = 0;
-            historyIdx = 0;
-            srcOffset = srcY * srcWidth;
-
-            // compute the blur average with pixels from the source image
-            for (int srcX = 0; srcX < srcWidth; srcX++) {
-
-                int a = hSumLookup[aSum];
-                dstBuffer[dstOffset++] = a << 24;   // store the alpha value only
-                                                    // the shadow color will be added in the next pass
-
-                aSum -= aHistory[historyIdx]; // substract the oldest pixel from the sum
-
-                // extract the new pixel ...
-                a = srcBuffer[srcOffset + srcX] >>> 24;
-                aHistory[historyIdx] = a;   // ... and store its value into history
-                aSum += a;                  // ... and add its value to the sum
-
-                if (++historyIdx >= shadowSize) {
-                    historyIdx -= shadowSize;
-                }
-            }
-
-            // blur the end of the row - no new pixels to grab
-            for (int i = 0; i < shadowSize; i++) {
-
-                int a = hSumLookup[aSum];
-                dstBuffer[dstOffset++] = a << 24;
-
-                // substract the oldest pixel from the sum ... and nothing new to add !
-                aSum -= aHistory[historyIdx];
-
-                if (++historyIdx >= shadowSize) {
-                    historyIdx -= shadowSize;
-                }
-            }
-        }
-
-        // vertical pass
-        for (int x = 0, bufferOffset = 0; x < dstWidth; x++, bufferOffset = x) {
-
-            aSum = 0;
-
-            // first pixels are empty
-            for (historyIdx = 0; historyIdx < left;) {
-                aHistory[historyIdx++] = 0;
-            }
-
-            // and then they come from the dstBuffer
-            for (int y = 0; y < right; y++, bufferOffset += dstWidth) {
-                int a = dstBuffer[bufferOffset] >>> 24;         // extract alpha
-                aHistory[historyIdx++] = a;                     // store into history
-                aSum += a;                                      // and add to sum
-            }
-
-            bufferOffset = x;
-            historyIdx = 0;
-
-            // compute the blur avera`ge with pixels from the previous pass
-            for (int y = 0; y < yStop; y++, bufferOffset += dstWidth) {
-
-                int a = vSumLookup[aSum];
-                dstBuffer[bufferOffset] = a << 24 | shadowRgb;  // store alpha value + shadow color
-
-                aSum -= aHistory[historyIdx];   // substract the oldest pixel from the sum
-
-                a = dstBuffer[bufferOffset + lastPixelOffset] >>> 24;   // extract the new pixel ...
-                aHistory[historyIdx] = a;                               // ... and store its value into history
-                aSum += a;                                              // ... and add its value to the sum
-
-                if (++historyIdx >= shadowSize) {
-                    historyIdx -= shadowSize;
-                }
-            }
-
-            // blur the end of the column - no pixels to grab anymore
-            for (int y = yStop; y < dstHeight; y++, bufferOffset += dstWidth) {
-
-                int a = vSumLookup[aSum];
-                dstBuffer[bufferOffset] = a << 24 | shadowRgb;
-
-                aSum -= aHistory[historyIdx];   // substract the oldest pixel from the sum
-
-                if (++historyIdx >= shadowSize) {
-                    historyIdx -= shadowSize;
-                }
-            }
-        }
-
-        setPixels(dst, 0, 0, dstWidth, dstHeight, dstBuffer);
-        return dst;
-    }
-
-    /**
-     * <p>Returns an array of pixels, stored as integers, from a
-     * <code>BufferedImage</code>. The pixels are grabbed from a rectangular
-     * area defined by a location and two dimensions. Calling this method on
-     * an image of type different from <code>BufferedImage.TYPE_INT_ARGB</code>
-     * and <code>BufferedImage.TYPE_INT_RGB</code> will unmanage the image.</p>
-     *
-     * @param img the source image
-     * @param x the x location at which to start grabbing pixels
-     * @param y the y location at which to start grabbing pixels
-     * @param w the width of the rectangle of pixels to grab
-     * @param h the height of the rectangle of pixels to grab
-     * @param pixels a pre-allocated array of pixels of size w*h; can be null
-     * @return <code>pixels</code> if non-null, a new array of integers
-     *   otherwise
-     * @throws IllegalArgumentException is <code>pixels</code> is non-null and
-     *   of length &lt; w*h
-     */
-    public static int[] getPixels(BufferedImage img,
-                                  int x, int y, int w, int h, int[] pixels) {
-        if (w == 0 || h == 0) {
-            return new int[0];
-        }
-
-        if (pixels == null) {
-            pixels = new int[w * h];
-        } else if (pixels.length < w * h) {
-            throw new IllegalArgumentException("pixels array must have a length" +
-                                               " >= w*h");
-        }
-
-        int imageType = img.getType();
-        if (imageType == BufferedImage.TYPE_INT_ARGB ||
-            imageType == BufferedImage.TYPE_INT_RGB) {
-            Raster raster = img.getRaster();
-            return (int[]) raster.getDataElements(x, y, w, h, pixels);
-        }
-
-        // Unmanages the image
-        return img.getRGB(x, y, w, h, pixels, 0, w);
-    }
-
-    /**
-     * <p>Writes a rectangular area of pixels in the destination
-     * <code>BufferedImage</code>. Calling this method on
-     * an image of type different from <code>BufferedImage.TYPE_INT_ARGB</code>
-     * and <code>BufferedImage.TYPE_INT_RGB</code> will unmanage the image.</p>
-     *
-     * @param img the destination image
-     * @param x the x location at which to start storing pixels
-     * @param y the y location at which to start storing pixels
-     * @param w the width of the rectangle of pixels to store
-     * @param h the height of the rectangle of pixels to store
-     * @param pixels an array of pixels, stored as integers
-     * @throws IllegalArgumentException is <code>pixels</code> is non-null and
-     *   of length &lt; w*h
-     */
-    public static void setPixels(BufferedImage img,
-                                 int x, int y, int w, int h, int[] pixels) {
-        if (pixels == null || w == 0 || h == 0) {
-            return;
-        } else if (pixels.length < w * h) {
-            throw new IllegalArgumentException("pixels array must have a length" +
-                                               " >= w*h");
-        }
-
-        int imageType = img.getType();
-        if (imageType == BufferedImage.TYPE_INT_ARGB ||
-            imageType == BufferedImage.TYPE_INT_RGB) {
-            WritableRaster raster = img.getRaster();
-            raster.setDataElements(x, y, w, h, pixels);
-        } else {
-            // Unmanages the image
-            img.setRGB(x, y, w, h, pixels, 0, w);
-        }
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/AbstractTableRowComponent.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/AbstractTableRowComponent.java
deleted file mode 100644
index e27c632..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/AbstractTableRowComponent.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableRowSource;
-
-/**
- * The base implementation for a component that is wrapped by 
- * the TableRows component. Provides a utility method for getting 
- * a pointer to TableRows. 
- * 
- * @author mindbridge
- */
-public abstract class AbstractTableRowComponent extends AbstractTableViewComponent
-{
-    public ITableRowSource getTableRowSource()
-    {
-        IRequestCycle objCycle = getPage().getRequestCycle();
-
-        Object objSourceObj = objCycle.getAttribute(ITableRowSource.TABLE_ROW_SOURCE_ATTRIBUTE);
-        ITableRowSource objSource = (ITableRowSource) objSourceObj;
-
-        if (objSource == null)
-            throw new ApplicationRuntimeException(
-                "The component "
-                    + getId()
-                    + " must be contained within an ITableRowSource component, such as TableRows",
-                this,
-                null,
-                null);
-
-        return objSource;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/AbstractTableViewComponent.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/AbstractTableViewComponent.java
deleted file mode 100644
index 731d319..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/AbstractTableViewComponent.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-
-/**
- * The base implementation for a component that is wrapped by 
- * the TableView component. Provides a utility method for getting 
- * a pointer to TableView. 
- * 
- * @author mindbridge
- */
-public abstract class AbstractTableViewComponent extends BaseComponent
-{
-    public ITableModelSource getTableModelSource()
-    {
-        IRequestCycle objCycle = getPage().getRequestCycle();
-
-        ITableModelSource objSource =
-            (ITableModelSource) objCycle.getAttribute(
-                ITableModelSource.TABLE_MODEL_SOURCE_ATTRIBUTE);
-
-        if (objSource == null)
-            throw new ApplicationRuntimeException(
-                "The component "
-                    + getId()
-                    + " must be contained within an ITableModelSource component, such as TableView",
-                this,
-                null,
-                null);
-
-        return objSource;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/DefaultTableColumnSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/DefaultTableColumnSource.java
deleted file mode 100644
index d17f181..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/DefaultTableColumnSource.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/*
- * Created on Jun 4, 2005
- */
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.contrib.table.model.IAdvancedTableColumn;
-import org.apache.tapestry.contrib.table.model.IAdvancedTableColumnSource;
-import org.apache.tapestry.contrib.table.model.ognl.ExpressionTableColumn;
-import org.apache.tapestry.services.ExpressionEvaluator;
-
-/**
- * 
- * @author mb
- */
-public class DefaultTableColumnSource implements IAdvancedTableColumnSource
-{
-
-    /** @since 4.0 */
-    private ExpressionEvaluator _expressionEvaluator;
-
-    /** @since 4.0 */
-    public void setExpressionEvaluator(ExpressionEvaluator expressionEvaluator)
-    {
-        _expressionEvaluator = expressionEvaluator;
-    }
-
-    public IAdvancedTableColumn generateTableColumn(String strName,
-            String strDisplayName, boolean bSortable, String strExpression)
-    {
-        return new ExpressionTableColumn(strName, strDisplayName,
-                strExpression, bSortable, _expressionEvaluator);
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/FormTable.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/FormTable.html
deleted file mode 100644
index 4af5ad3..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/FormTable.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-
-<span jwcid="tableView">
-	<span jwcid="condPages"><span jwcid="tablePages"/></span>
-	<table jwcid="tableElement">
-		<span jwcid="tableColumns"/>
-		<tr jwcid="tableRows"><td jwcid="tableValues"/></tr>
-	</table>
-</span>
-
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/FormTable.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/FormTable.java
deleted file mode 100644
index 8cdcec7..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/FormTable.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-
-/**
- * A modified version of the facade component in the Table family. 
- * FormTable allows you to present a sortable and pagable table 
- * within a form by using only this one component.
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.FormTable.html">Component Reference</a>]
- * 
- * @author mindbridge
- *
- */
-public abstract class FormTable extends Table implements ITableModelSource
-{
-    // parameters
-    public abstract Object getColumns();
-
-    /**
-     *  If the columns are defined via a String, make sure they use 
-     *  the form-specific column headers.
-     */
-    public Object getFormColumns()
-    {
-        Object objColumns = getColumns();
-        if (objColumns instanceof String)
-            objColumns = "*" + objColumns;
-        return objColumns;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/FormTable.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/FormTable.jwc
deleted file mode 100644
index e8b9ce9..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/FormTable.jwc
+++ /dev/null
@@ -1,219 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-    "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-    "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.FormTable" 
-	allow-body="yes" allow-informal-parameters="yes" deprecated="yes">
-
-    <description>
-        The main Table component that is implemented using the lower-level 
-        Table components such as TableView and TableRows.
-        The component does not render its body, which makes it a good place
-        to declare Blocks defining the column appearances.
-    </description>
-    
-    <parameter name="tableModel" property="tableModelValue">
-        <description>
-            The model describing the data to be presented by the Table component.
-            This parameter is optional, but either the 'tableModel' or both
-            'source' and 'columns' parameters must be provided.
-        </description>
-    </parameter>
-    
-    <parameter name="source">
-        <description>
-            The data to be displayed by the component. This parameter is available as
-            an alternative to 'tableModel' and must be used in combination with the
-            'columns' parameter. 
-            The parameter must be an array of values, a collection, an iterator, 
-            or an object implementing the IBasicTableModel interface.
-        </description>
-    </parameter>
-    
-    <parameter name="columns">
-        <description>
-            The table columns to be displayed. 
-            The parameter must be an array, a list, or an Iterator of ITableColumn objects,
-            an ITableColumnModel, or a String describing the columns (see documentation).
-        </description>
-    </parameter>
-    
-	<parameter name="pageSize">
-        <description>
-            The number of records displayed per page when source/columns are used.
-            The page size is 10 by default.
-        </description>
-    </parameter>
-  
-	<parameter name="initialPage">
-        <description>
-            The initial page to be displayed.
-            This is the first page by default.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortColumn">
-        <description>
-            The id of the column to initially sort the table by.
-            The column is set to null by default, i.e. there is no sorting.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortOrder">
-        <description>
-            The order of the initial sorting.
-            Set this parameter to 'false' to sort in an ascending order
-            and to 'true' to sort in a descending one.
-        </description>
-    </parameter>
-  
-    <parameter name="tableSessionStateManager">
-        <description>
-            The manager that controls what part of the table model will be stored in 
-            the session.
-        </description>
-    </parameter>
-    
-    <parameter name="tableSessionStoreManager">
-        <description>
-            The manager that controls where the session data will be stored.
-        </description>
-    </parameter>
-    
-    <parameter name="persist" default-value="literal:session"> 
-        <description>
-            Defines how the table state (paging and sorting) will be persisted
-            if no tableSessionStoreManager is defined.
-            The possible values are 'session' (the default), 'client', 'client:page', 
-            and 'client:app'.
-        </description>
-    </parameter>
-    
-    <parameter name="columnSettingsContainer" default-value="container">
-        <description>
-            The component where Block and messages are pulled from when using source/columns.
-        </description>
-    </parameter>
-
-    <parameter name="convertor" default-value="null">
-        <description>
-        An interface defining how the items iterated upon by this component 
-        will be stored in the form as Hidden values. This interface allows only 
-        the primary key of the items to be stored, rather than the whole item.
-        </description>
-    </parameter>
-
-	<parameter name="pagesDisplayed">
-        <description>
-            The maximum number of pages that will be displayed in the list of table pages.
-            By default, only seven of the pages around the current one are shown.
-        </description>
-    </parameter>
-  
-	<parameter name="column">
-        <description>
-            The column that is being rendered. This value is updated when both 
-            the column headers and column values are rendered.
-        </description>
-    </parameter>
-
-	<parameter name="row">
-        <description>
-            The row that is being rendered. This value is null when 
-            the column headers are rendered.
-        </description>
-    </parameter>
-
-	<parameter name="arrowUpAsset">
-        <description>
-            The image to use to describe a column sorted in an ascending order.
-        </description>
-    </parameter>
-
-	<parameter name="arrowDownAsset">
-        <description>
-            The image to use to describe a column sorted in a descending order.
-        </description>
-    </parameter>
-
-	<parameter name="pagesClass">
-        <description>The CSS class of the table pages</description>
-    </parameter>
-  
-	<parameter name="columnsClass">
-        <description>The CSS class of the table columns</description>
-    </parameter>
-  
-	<parameter name="rowsClass">
-        <description>The CSS class of the table rows</description>
-    </parameter>
-  
-	<parameter name="valuesClass">
-        <description>The CSS class of the table values</description>
-    </parameter>
-    
-
-	<component id="tableElement" type="Any" inherit-informal-parameters="yes">
-		<binding name="element">literal:table</binding>
-	</component>
-
-	<component id="condPages" type="If">
-		<binding name="condition" value="tableModel.pageCount > 1"/>
-	</component>
-
-	<component id="tableView" type="TableView">
-		<inherited-binding name="tableModel" parameter-name="tableModel"/>
-		<inherited-binding name="source" parameter-name="source"/>
-		<binding name="columns" value="ognl: formColumns"/>
-		<inherited-binding name="pageSize" parameter-name="pageSize"/>
-		<inherited-binding name="initialPage" parameter-name="initialPage"/>
-		<inherited-binding name="initialSortColumn" parameter-name="initialSortColumn"/>
-		<inherited-binding name="initialSortOrder" parameter-name="initialSortOrder"/>
-		<inherited-binding name="tableSessionStateManager" parameter-name="tableSessionStateManager"/>
-		<inherited-binding name="tableSessionStoreManager" parameter-name="tableSessionStoreManager"/>
-		<inherited-binding name="persist" parameter-name="persist"/>
-		<inherited-binding name="columnSettingsContainer" parameter-name="columnSettingsContainer"/>
-		<binding name="element">literal:div</binding>
-	</component>
-
-	<component id="tablePages" type="TableFormPages">
-		<inherited-binding name="pagesDisplayed" parameter-name="pagesDisplayed"/>
-		<inherited-binding name="class" parameter-name="pagesClass"/>
-	</component>
-
-	<component id="tableColumns" type="TableColumns">
-		<inherited-binding name="column" parameter-name="column"/>
-		<inherited-binding name="class" parameter-name="columnsClass"/>
-        <inherited-binding name="arrowUpAsset" parameter-name="arrowUpAsset"/>
-        <inherited-binding name="arrowDownAsset" parameter-name="arrowDownAsset"/>
-	</component>
-
-	<component id="tableRows" type="TableFormRows">
-		<inherited-binding name="row" parameter-name="row"/>
-		<inherited-binding name="class" parameter-name="rowsClass"/>
-		<inherited-binding name="convertor" parameter-name="convertor"/>
-	</component>
-
-	<component id="tableValues" type="TableValues">
-		<inherited-binding name="column" parameter-name="column"/>
-		<inherited-binding name="class" parameter-name="valuesClass"/>
-	</component>
-  
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/Table.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/Table.html
deleted file mode 100644
index 38740e7..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/Table.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-
-<span jwcid="tableView">
-	<span jwcid="condPages">
-		<span jwcid="ifNormalPages">
-	        <span jwcid="tablePages"/>
-        </span>
-        <span jwcid="elseFormPages">
-	        <span jwcid="tableFormPages"/>
-        </span>
-    </span>
-	<table jwcid="tableElement">
-		<tr><span jwcid="tableColumns"/></tr>
-		<tr jwcid="tableRows"><td jwcid="tableValues"/></tr>
-	</table>
-</span>
-
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/Table.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/Table.java
deleted file mode 100644
index 6216bdd..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/Table.java
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.contrib.table.model.ITableAction;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-
-/**
- * The facade component in the Table family. Table allows you to present a
- * sortable and pagable table simply and easily by using only this one
- * component. Please see the Component Reference for details on how to use this
- * component. [ <a
- * href="../../../../../../../ComponentReference/contrib.Table.html">Component
- * Reference </a>]
- * 
- * @author mindbridge
- */
-public abstract class Table extends BaseComponent implements ITableModelSource
-{
-
-    public abstract boolean getVolatile();
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModelSource#getTableModel()
-     */
-    public ITableModel getTableModel()
-    {
-        return getTableViewComponent().getTableModel();
-    }
-
-    /**
-     * Indicates that the table model has changed and it may need to saved. This
-     * method has to be invoked if modifications are made to the model.
-     * 
-     * @see org.apache.tapestry.contrib.table.model.ITableModelSource#fireObservedStateChange()
-     */
-    public void fireObservedStateChange()
-    {
-        getTableViewComponent().fireObservedStateChange();
-    }
-
-    /**
-     * Resets the state of the component and forces it to load a new TableModel
-     * from the tableModel binding the next time it renders.
-     */
-    public void reset()
-    {
-        getTableViewComponent().reset();
-    }
-
-    /**
-     * Returns the currently rendered table column. You can call this method to
-     * obtain the current column.
-     * 
-     * @return ITableColumn the current table column
-     */
-    public ITableColumn getTableColumn()
-    {
-        Object objCurrentRow = getTableRow();
-
-        // if the current row is null, then we are most likely rendering
-        // TableColumns
-        if (objCurrentRow == null)
-            return getTableColumnsComponent().getTableColumn();
-
-        return getTableValuesComponent().getTableColumn();
-    }
-
-    /**
-     * Returns the currently rendered table row or null if the rows are not
-     * rendered at the moment. You can call this method to obtain the current
-     * row.
-     * 
-     * @return Object the current table row
-     */
-    public Object getTableRow()
-    {
-        return getTableRowsComponent().getTableRow();
-    }
-
-    protected TableView getTableViewComponent()
-    {
-        return (TableView) getComponent("tableView");
-    }
-
-    protected TableColumns getTableColumnsComponent()
-    {
-        return (TableColumns) getComponent("tableColumns");
-    }
-
-    protected TableRows getTableRowsComponent()
-    {
-        return (TableRows) getComponent("tableRows");
-    }
-
-    protected TableValues getTableValuesComponent()
-    {
-        return (TableValues) getComponent("tableValues");
-    }
-
-    public boolean getShowNormalPages()
-    {
-        if (getVolatile()) return true;
-
-        IForm form = (IForm) getPage().getRequestCycle().getAttribute(
-                TapestryUtils.FORM_ATTRIBUTE);
-        return (form == null);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.tapestry.contrib.table.model.ITableModelSource#storeTableAction(org.apache.tapestry.contrib.table.model.ITableAction)
-     */
-    public void storeTableAction(ITableAction action)
-    {
-        getTableViewComponent().storeTableAction(action);
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/Table.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/Table.jwc
deleted file mode 100644
index 0b34555..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/Table.jwc
+++ /dev/null
@@ -1,292 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-    "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-    "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.Table" 
-	allow-body="yes" allow-informal-parameters="yes">
-
-    <description>
-        The main Table component that is implemented using the lower-level 
-        Table components such as TableView and TableRows.
-        The component does not render its body, which makes it a good place
-        to declare Blocks defining the column appearances.
-    </description>
-    
-    <parameter name="tableModel" property="tableModelValue">
-        <description>
-            The model describing the data to be presented by the Table component.
-            This parameter is optional, but either the 'tableModel' or both
-            'source' and 'columns' parameters must be provided.
-        </description>
-    </parameter>
-    
-    <parameter name="source">
-        <description>
-            The data to be displayed by the component. This parameter is available as
-            an alternative to 'tableModel' and must be used in combination with the
-            'columns' parameter. 
-            The parameter must be an array of values, a collection, an iterator, 
-            or an object implementing the IBasicTableModel interface.
-        </description>
-    </parameter>
-    
-    <parameter name="columns">
-        <description>
-            The table columns to be displayed. 
-            The parameter must be an array, a list, or an Iterator of ITableColumn objects,
-            an ITableColumnModel, or a String describing the columns (see documentation).
-        </description>
-    </parameter>
-    
-	<parameter name="pageSize">
-        <description>
-            The number of records displayed per page when source/columns are used.
-            The page size is 10 by default.
-        </description>
-    </parameter>
-  
-	<parameter name="initialPage">
-        <description>
-            The initial page to be displayed.
-            This is the first page by default.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortColumn">
-        <description>
-            The id of the column to initially sort the table by.
-            The column is set to null by default, i.e. there is no sorting.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortOrder">
-        <description>
-            The order of the initial sorting.
-            Set this parameter to 'false' to sort in an ascending order
-            and to 'true' to sort in a descending one.
-        </description>
-    </parameter>
-  
-    <parameter name="tableSessionStateManager">
-        <description>
-            The manager that controls what part of the table model will be stored in 
-            the session.
-        </description>
-    </parameter>
-    
-    <parameter name="tableSessionStoreManager">
-        <description>
-            The manager that controls where the session data will be stored.
-        </description>
-    </parameter>
-    
-    <parameter name="persist" default-value="literal:session"> 
-        <description>
-            Defines how the table state (paging and sorting) will be persisted
-            if no tableSessionStoreManager is defined.
-            The possible values are 'session' (the default), 'client', 'client:page', 
-            and 'client:app'.
-        </description>
-    </parameter>
-    
-    <parameter name="columnSettingsContainer" default-value="container">
-        <description>
-            The component where Block and messages are pulled from when using source/columns.
-        </description>
-    </parameter>
-
-	<parameter name="pagesDisplayed">
-        <description>
-            The maximum number of pages that will be displayed in the list of table pages.
-            By default, only seven of the pages around the current one are shown.
-        </description>
-    </parameter>
-  
-	<parameter name="column">
-        <description>
-            The column that is being rendered. This value is updated when both 
-            the column headers and column values are rendered.
-        </description>
-    </parameter>
-
-	<parameter name="row">
-        <description>
-            The row that is being rendered. This value is null when 
-            the column headers are rendered.
-        </description>
-    </parameter>
-
-	<parameter name="index" property="indexParameter">
-		<description>
-		    If provided, the parameter is updated with the index of the loop on each iteration.
-		</description>
-	</parameter>
-  
-	<parameter name="keyExpression">
-    	<description>
-		    Only active in a form. An OGNL expression that returns the primary key of the iterated value. 
-		    The primary keys are stored in hidden fields during rendering and are loaded from the form
-		    during a rewind to ensure that the iterations remain the same.
-		    This is a simpler, but a less efficient alternative of the 'converter' parameter.
-		    If needed, please use in conjuction with 'fullSource' to reference objects 
-		    not currently present in 'source'.
-		    Also, use the 'defaultValue' parameter to define the object to be returned if
-		    a value corresponding to a particular primary key cannot be found.
-		</description>
-	</parameter>
-    
-	<parameter name="fullSource" property="fullSourceParameter">
-		<description>
-		    Only active in a form and in combination with the 'keyExpression' parameter. 
-		    If an object corresponding to a primary key stored in the form cannot be
-		    found in the 'source' parameter, then the objects provided by this parameter 
-		    are searched for a match next. 
-		</description>
-	</parameter>
-  
-	<parameter name="defaultValue" default-value="null">
-		<description>
-		    Only active in a form. The value to be used when no match for a given primary key is found. 
-		</description>
-	</parameter>
-
-	<parameter name="converter" default-value="null">
-		<description>
-		    Only active in a form. Defines how the items iterated upon 
-		    will be stored in the form as hidden values and how the stored information will be 
-		    converted back to objects. 
-		    This interface allows only the primary key of the items to be stored, 
-		    rather than the whole item.
-		</description>
-	</parameter>
-  
-	<parameter name="primaryKeys">
-		<description>
-			Only active in a form. If provided, the parameter is automatically updated 
-		    before a rewind with the list of primary keys stored in the form. 
-		    The parameter is updated right before the iterations begin in a rewind and 
-		    could be used to preload the relevant objects in a provided 'converter'.
-		</description>
-	</parameter>
-    
-    <parameter name="volatile"> 
-        <description>
-			Only active in a form. Determines whether to avoid creating hidden fields within a form.
-			Using this parameter may make the form structure different during render and rewind, 
-			and cause exceptions as a result. Please use with caution.
-        </description>
-    </parameter>
-    
-	<parameter name="arrowUpAsset">
-        <description>
-            The image to use to describe a column sorted in an ascending order.
-        </description>
-    </parameter>
-
-	<parameter name="arrowDownAsset">
-        <description>
-            The image to use to describe a column sorted in a descending order.
-        </description>
-    </parameter>
-
-	<parameter name="pagesClass">
-        <description>The CSS class of the table pages</description>
-    </parameter>
-  
-	<parameter name="columnsClass">
-        <description>The CSS class of the table columns</description>
-    </parameter>
-  
-	<parameter name="rowsClass">
-        <description>The CSS class of the table rows</description>
-    </parameter>
-  
-	<parameter name="valuesClass">
-        <description>The CSS class of the table values</description>
-    </parameter>
-  
-	<component id="tableElement" type="Any" inherit-informal-parameters="yes">
-		<binding name="element">literal:table</binding>
-    </component>
-
-	<component id="condPages" type="If">
-		<binding name="condition" value="tableModel.pageCount > 1"/>
-        <binding name="renderTag" value="false" />
-    </component>
-
-	<component id="ifNormalPages" type="If">
-		<binding name="condition" value="showNormalPages"/>
-        <binding name="renderTag" value="false" />
-    </component>
-
-	<component id="elseFormPages" type="Else">
-        <binding name="renderTag" value="false" />
-    </component>
-
-    <component id="tableView" type="TableView">
-		<inherited-binding name="tableModel" parameter-name="tableModel"/>
-		<inherited-binding name="source" parameter-name="source"/>
-		<inherited-binding name="columns" parameter-name="columns"/>
-		<inherited-binding name="pageSize" parameter-name="pageSize"/>
-		<inherited-binding name="initialPage" parameter-name="initialPage"/>
-		<inherited-binding name="initialSortColumn" parameter-name="initialSortColumn"/>
-		<inherited-binding name="initialSortOrder" parameter-name="initialSortOrder"/>
-		<inherited-binding name="tableSessionStateManager" parameter-name="tableSessionStateManager"/>
-		<inherited-binding name="tableSessionStoreManager" parameter-name="tableSessionStoreManager"/>
-		<inherited-binding name="persist" parameter-name="persist"/>
-		<inherited-binding name="columnSettingsContainer" parameter-name="columnSettingsContainer"/>
-		<binding name="element">literal:div</binding>
-	</component>
-
-	<component id="tablePages" type="TablePages">
-		<inherited-binding name="pagesDisplayed" parameter-name="pagesDisplayed"/>
-		<inherited-binding name="class" parameter-name="pagesClass"/>
-	</component>
-
-	<component id="tableFormPages" type="TableFormPages">
-		<inherited-binding name="pagesDisplayed" parameter-name="pagesDisplayed"/>
-		<inherited-binding name="class" parameter-name="pagesClass"/>
-	</component>
-    
-	<component id="tableColumns" type="TableColumns">
-		<inherited-binding name="column" parameter-name="column"/>
-		<inherited-binding name="class" parameter-name="columnsClass"/>
-        <inherited-binding name="arrowUpAsset" parameter-name="arrowUpAsset"/>
-        <inherited-binding name="arrowDownAsset" parameter-name="arrowDownAsset"/>
-	</component>
-
-	<component id="tableRows" type="TableRows">
-		<inherited-binding name="row" parameter-name="row"/>
-		<inherited-binding name="index" parameter-name="index"/>
-		<inherited-binding name="keyExpression" parameter-name="keyExpression"/>
-		<inherited-binding name="fullSource" parameter-name="fullSource"/>
-		<inherited-binding name="defaultValue" parameter-name="defaultValue"/>
-		<inherited-binding name="converter" parameter-name="converter"/>
-		<inherited-binding name="primaryKeys" parameter-name="primaryKeys"/>
-		<inherited-binding name="volatile" parameter-name="volatile"/>
-		<inherited-binding name="class" parameter-name="rowsClass"/>
-	</component>
-
-	<component id="tableValues" type="TableValues">
-		<inherited-binding name="column" parameter-name="column"/>
-		<inherited-binding name="class" parameter-name="valuesClass"/>
-	</component>
-  
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableActionPageChange.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableActionPageChange.java
deleted file mode 100644
index dcdd1e8..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableActionPageChange.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-package org.apache.tapestry.contrib.table.components;

-

-import org.apache.tapestry.contrib.table.model.ITableAction;

-import org.apache.tapestry.contrib.table.model.ITableModel;

-

-

-/**

- * <p>A table action that changes the current table page</p>.

- *

- * @author teo

- */

-public class TableActionPageChange implements ITableAction

-{

-    private int _page;

-    

-    public TableActionPageChange(int page)

-    {

-        super();

-        _page = page;

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    public void executeTableAction(ITableModel objTableModel)

-    {

-        objTableModel.getPagingState().setCurrentPage(_page - 1);

-    }

-}

diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumnModelSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumnModelSource.java
deleted file mode 100644
index 6f72b90..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumnModelSource.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.contrib.table.model.IAdvancedTableColumnSource;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-
-/**
- * Service used to generate a
- * {@link org.apache.tapestry.contrib.table.model.ITableColumnModel}from a
- * string description.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface TableColumnModelSource
-{
-
-    /**
-     * Generate a table column model out of the description string provided.
-     * Entries in the description string are separated by commas. Each column
-     * entry is of the format name, name:expression, or
-     * name:displayName:expression. An entry prefixed with ! represents a
-     * non-sortable column. If the whole description string is prefixed with *,
-     * it represents columns to be included in a Form.
-     * 
-     * @param strDesc
-     *            the description of the column model to be generated
-     * @param objComponent
-     *            the component ordering the generation
-     * @param objColumnSettingsContainer
-     *            the component containing the column settings
-     * @return a table column model based on the provided parameters
-     */
-    ITableColumnModel generateTableColumnModel(
-            IAdvancedTableColumnSource objColumnSource, String strDesc,
-            IComponent objComponent, IComponent objColumnSettingsContainer);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumnModelSourceImpl.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumnModelSourceImpl.java
deleted file mode 100644
index 674cc34..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumnModelSourceImpl.java
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.contrib.table.model.IAdvancedTableColumn;
-import org.apache.tapestry.contrib.table.model.IAdvancedTableColumnSource;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
-import org.apache.tapestry.services.ExpressionEvaluator;
-
-/**
- * A placeholder for a static methods related to the Table component.
- * 
- * @since 3.0
- * @author Mindbridge
- */
-public class TableColumnModelSourceImpl implements TableColumnModelSource
-{
-
-    /** @since 4.0 */
-    private ExpressionEvaluator _expressionEvaluator;
-
-    /** @since 4.0 */
-
-    public void setExpressionEvaluator(ExpressionEvaluator expressionEvaluator)
-    {
-        _expressionEvaluator = expressionEvaluator;
-    }
-
-    /**
-     * Generate a table column model out of the description string provided.
-     * Entries in the description string are separated by commas. Each column
-     * entry is of the format name, name:expression, or
-     * name:displayName:expression. An entry prefixed with ! represents a
-     * non-sortable column. If the whole description string is prefixed with *,
-     * it represents columns to be included in a Form.
-     * 
-     * @param strDesc
-     *            the description of the column model to be generated
-     * @param objComponent
-     *            the component ordering the generation
-     * @param objColumnSettingsContainer
-     *            the component containing the column settings
-     * @return a table column model based on the provided parameters
-     */
-    public ITableColumnModel generateTableColumnModel(
-            IAdvancedTableColumnSource objColumnSource, String strDesc,
-            IComponent objComponent, IComponent objColumnSettingsContainer)
-    {
-        if (strDesc == null) return null;
-
-        List arrColumns = new ArrayList();
-
-        String desc = strDesc.trim();
-        boolean bFormColumns = false;
-        while(desc.startsWith("*"))
-        {
-            desc = desc.substring(1);
-            bFormColumns = true;
-        }
-
-        StringTokenizer objTokenizer = new StringTokenizer(desc, ",");
-        while(objTokenizer.hasMoreTokens())
-        {
-            String strToken = objTokenizer.nextToken().trim();
-
-            if (strToken.startsWith("="))
-            {
-                String strColumnExpression = strToken.substring(1);
-
-                Object objColumn = _expressionEvaluator.read(
-                        objColumnSettingsContainer, strColumnExpression);
-
-                if (!(objColumn instanceof ITableColumn))
-                    throw new ApplicationRuntimeException(TableMessages
-                            .notAColumn(objComponent, strColumnExpression));
-
-                arrColumns.add(objColumn);
-                continue;
-            }
-
-            boolean bSortable = true;
-            if (strToken.startsWith("!"))
-            {
-                strToken = strToken.substring(1);
-                bSortable = false;
-            }
-
-            StringTokenizer objColumnTokenizer = new StringTokenizer(strToken,
-                    ":");
-
-            String strName = "";
-            if (objColumnTokenizer.hasMoreTokens())
-                strName = objColumnTokenizer.nextToken();
-
-            String strExpression = strName;
-            if (objColumnTokenizer.hasMoreTokens())
-                strExpression = objColumnTokenizer.nextToken();
-
-            String strDisplayName = strName;
-            if (objColumnTokenizer.hasMoreTokens())
-            {
-                strDisplayName = strExpression;
-                strExpression = objColumnTokenizer.nextToken();
-            }
-
-            IAdvancedTableColumn objColumn = objColumnSource
-                    .generateTableColumn(strName, strDisplayName, bSortable,
-                            strExpression);
-            if (bFormColumns)
-                objColumn
-                        .setColumnRendererSource(SimpleTableColumn.FORM_COLUMN_RENDERER_SOURCE);
-            if (objColumnSettingsContainer != null)
-                objColumn.loadSettings(objColumnSettingsContainer);
-
-            arrColumns.add(objColumn);
-        }
-
-        return new SimpleTableColumnModel(arrColumns);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumns.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumns.html
deleted file mode 100644
index b0e00f7..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumns.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="$content$">
-
-<span jwcid="iterColumns">
-	<th jwcid="informal"><span jwcid="insertColumnRenderer"/></th>
-</span>
-
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumns.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumns.java
deleted file mode 100644
index e3440f4..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumns.java
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-
-/**
- * A low level Table component that renders the column headers in the table.
- * This component must be wrapped by
- * {@link org.apache.tapestry.contrib.table.components.TableView}.
- * <p>
- * The component iterates over all column objects in the
- * {@link org.apache.tapestry.contrib.table.model.ITableColumnModel}and renders
- * a header for each one of them using the renderer provided by the
- * getColumnRender() method in
- * {@link org.apache.tapestry.contrib.table.model.ITableColumn}. The headers
- * are wrapped in 'th' tags by default.
- * <p>
- * Please see the Component Reference for details on how to use this component. [
- * <a
- * href="../../../../../../../ComponentReference/contrib.TableColumns.html">Component
- * Reference </a>]
- * 
- * @author mindbridge
- */
-public abstract class TableColumns extends AbstractTableViewComponent
-{
-
-    public static final String TABLE_COLUMN_ARROW_UP_ATTRIBUTE = "org.apache.tapestry.contrib.table.components.TableColumns.arrowUp";
-
-    public static final String TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE = "org.apache.tapestry.contrib.table.components.TableColumns.arrowDown";
-
-    public static final String TABLE_COLUMN_CSS_CLASS_SUFFIX = "ColumnHeader";
-
-    // Transient
-    private ITableColumn m_objTableColumn = null;
-    
-    public abstract IAsset getArrowDownAsset();
-
-    public abstract IAsset getArrowUpAsset();
-
-    public abstract void setColumn(ITableColumn column);
-
-    /**
-     * Returns the currently rendered table column. You can call this method to
-     * obtain the current column.
-     * 
-     * @return ITableColumn the current table column
-     */
-    public ITableColumn getTableColumn()
-    {
-        return m_objTableColumn;
-    }
-
-    /**
-     * Sets the currently rendered table column. This method is for internal use
-     * only.
-     * 
-     * @param tableColumn
-     *            The current table column
-     */
-    public void setTableColumn(ITableColumn tableColumn)
-    {
-        m_objTableColumn = tableColumn;
-
-        if (isParameterBound("column")) setColumn(tableColumn);
-    }
-
-    /**
-     * Get the list of all table columns to be displayed.
-     * 
-     * @return an iterator of all table columns
-     */
-    public Iterator getTableColumnIterator()
-    {
-        ITableColumnModel objColumnModel = getTableModelSource()
-                .getTableModel().getColumnModel();
-        return objColumnModel.getColumns();
-    }
-
-    /**
-     * Returns the renderer to be used to generate the header of the current
-     * column.
-     * 
-     * @return the header renderer of the current column
-     */
-    public IRender getTableColumnRenderer()
-    {
-        return getTableColumn().getColumnRenderer(getPage().getRequestCycle(),
-                getTableModelSource());
-    }
-
-    public abstract String getColumnClassParameter();
-
-    /**
-     * Returns the CSS class of the generated table cell. It uses the class
-     * parameter if it has been bound, or the default value of "[column
-     * name]ColumnHeader" otherwise.
-     * 
-     * @return the CSS class of the cell
-     */
-    public String getColumnClass()
-    {
-        if (isParameterBound("class")) return getColumnClassParameter();
-
-        return getTableColumn().getColumnName() + TABLE_COLUMN_CSS_CLASS_SUFFIX;
-    }
-
-    /**
-     * @see org.apache.tapestry.BaseComponent#renderComponent(IMarkupWriter,
-     *      IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object oldValueUp = cycle.getAttribute(TABLE_COLUMN_ARROW_UP_ATTRIBUTE);
-        Object oldValueDown = cycle
-                .getAttribute(TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE);
-
-        try
-        {
-            cycle.setAttribute(TABLE_COLUMN_ARROW_UP_ATTRIBUTE,
-                    getArrowUpAsset());
-            cycle.setAttribute(TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE,
-                    getArrowDownAsset());
-
-            super.renderComponent(writer, cycle);
-        }
-        finally
-        {
-            cycle.setAttribute(TABLE_COLUMN_ARROW_UP_ATTRIBUTE, oldValueUp);
-            cycle.setAttribute(TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE, oldValueDown);
-
-            // set the current column to null when the component is not active
-            m_objTableColumn = null;
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumns.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumns.jwc
deleted file mode 100644
index 62b4459..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableColumns.jwc
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.TableColumns" 
-	allow-body="yes" allow-informal-parameters="yes">
-	
-	<description>
-        A low level Table component that renders the column headers in the table. 
-        This component must be wrapped by TableView. 
-	</description>
-  
-	<parameter name="column">
-        <description>The column currently being rendered [out]</description>
-    </parameter>
-
-	<parameter name="element" default-value="literal:th">
-        <description>The tag to use to wrap the column headers.</description>
-    </parameter>
-
-	<parameter name="arrowUpAsset">
-        <description>The image to use to describe a column sorted in an ascending order.</description>
-    </parameter>
-
-	<parameter name="arrowDownAsset">
-        <description>The image to use to describe a column sorted in a descending order.</description>
-    </parameter>
-
-    <parameter name="class" property="columnClassParameter">
-        <description>The CSS class of the table columns</description>
-    </parameter>
-    
-	<component id="iterColumns" type="For">
-		<binding name="source" value="ognl:tableColumnIterator"/>
-		<binding name="value" value="ognl:tableColumn"/>
-		<binding name="volatile" value="true"/>
-        <binding name="renderTag" value="false" />
-	</component>
-  
-	<component id="informal" type="Any" inherit-informal-parameters="yes">
-		<binding name="element" value="ognl:element"/>
-        <binding name="class" value="ognl:columnClass"/>
-	</component>
-  
-	<component id="insertColumnRenderer" type="Delegator">
-		<binding name="delegate" value="ognl:tableColumnRenderer"/>
-	</component>
-
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormPages.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormPages.html
deleted file mode 100644
index 90927f1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormPages.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="$content$">
-
-<span jwcid="informal">
-
-  <span jwcid="hiddenCurrentPage"/>
-  <span jwcid="hiddenPageCount"/>
-  <span jwcid="hiddenStartPage"/>
-  <span jwcid="hiddenStopPage"/>
-
-  <a jwcid="linkFirst">&lt;&lt;</a>  
-  <a jwcid="linkBack">&lt;</a> 
-
-  <span jwcid="iterPage">
-
-    <span jwcid="condCurrent">
-	    <b><span jwcid="insertCurrentPage"/></b>
-    </span>
-
-    <span jwcid="condOther">
-      <a jwcid="linkPage"><span jwcid="insertOtherPage"/></a>
-    </span>
-
-  </span>
-
-  <a jwcid="linkFwd">&gt;</a>
-  <a jwcid="linkLast">&gt;&gt;</a>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormPages.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormPages.java
deleted file mode 100644
index dfd258f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormPages.java
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-
-/**
- * A low level Table component that renders the pages in the table.
- * 
- * This component is a variant of {@link org.apache.tapestry.contrib.table.components.TablePages}, 
- * but is designed for operation in a form. The necessary page data is stored 
- * in hidden fields, so that no StaleLink exceptions occur during a rewind. 
- * The links also submit the form, which ensures that the data in the other 
- * form fields is preserved even when the page chages.
- *  
- * The component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableView}.
- * <p>
- * The component generates a list of pages in the Table centered around the 
- * current one and allows you to navigate to other pages.
- * <p> 
- * Please see the Component Reference for details on how to use this component. 
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.TableFormPages.html">Component Reference</a>]
- * 
- * @author mindbridge
- *
- */
-public abstract class TableFormPages extends TablePages 
-    implements PageDetachListener, PageBeginRenderListener
-{
-    private int m_nCurrentPage;
-    private int m_nPageCount;
-    private int m_nStartPage;
-    private int m_nStopPage;    
-
-    public TableFormPages()
-    {
-        initialize();
-    }
-
-    /**
-     * @see org.apache.tapestry.event.PageDetachListener#pageDetached(org.apache.tapestry.event.PageEvent)
-     */
-    public void pageDetached(PageEvent event)
-    {
-        initialize();
-    }
-    
-    /**
-     * @see org.apache.tapestry.event.PageBeginRenderListener#pageBeginRender(org.apache.tapestry.event.PageEvent)
-     */
-    public void pageBeginRender(PageEvent event)
-    {
-        // values set during rewind are removed
-        initialize();
-    }
-
-    /**
-     * Initialize the values and return the object to operation identical
-     * to that of the super class.
-     */
-    private void initialize()
-    {
-        m_nCurrentPage = -1;
-        m_nPageCount = -1;
-        m_nStartPage = -1;
-        m_nStopPage = -1;
-    }
-
-    // This would ideally be a delayed invocation -- called after the form rewind
-    public void changePage(IRequestCycle objCycle)
-    {
-        ITableModelSource objSource = getTableModelSource(); 
-        objSource.storeTableAction(new TableActionPageChange(getSelectedPage()));
-    }
-
-    // defined in the JWC file
-    public abstract int getSelectedPage();
-
-
-    /**
-     * @return the current page
-     */
-    public int getCurrentPage()
-    {
-        if (m_nCurrentPage < 0)
-            m_nCurrentPage = super.getCurrentPage();
-        return m_nCurrentPage;
-    }
-
-    /**
-     * @return number of all pages to display
-     */
-    public int getPageCount()
-    {
-        if (m_nPageCount < 0)
-            m_nPageCount = super.getPageCount();
-        return m_nPageCount;
-    }
-
-    /**
-     * @return the first page to display
-     */
-    public int getStartPage()
-    {
-        if (m_nStartPage < 0)
-            m_nStartPage = super.getStartPage();
-        return m_nStartPage;
-    }
-
-    /**
-     * @return the last page to display
-     */
-    public int getStopPage()
-    {
-        if (m_nStopPage < 0)
-            m_nStopPage = super.getStopPage();
-        return m_nStopPage;
-    }
-
-    /**
-     * @param i the current page
-     */
-    public void setCurrentPage(int i)
-    {
-        m_nCurrentPage = i;
-    }
-
-    /**
-     * @param i number of all pages to display
-     */
-    public void setPageCount(int i)
-    {
-        m_nPageCount = i;
-    }
-
-    /**
-     * @param i the first page to display
-     */
-    public void setStartPage(int i)
-    {
-        m_nStartPage = i;
-    }
-
-    /**
-     * @param i the last page to display
-     */
-    public void setStopPage(int i)
-    {
-        m_nStopPage = i;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormPages.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormPages.jwc
deleted file mode 100644
index 8f1cfe5..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormPages.jwc
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-        "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-        "http://tapestry.apache.org/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.table.components.TableFormPages"
-                         allow-body="no" allow-informal-parameters="yes">
-
-    <description>
-        A version of TablePages that is designed for operation in a form.
-        It is a low level Table component that renders the pages in the table.
-        This component must be wrapped by TableView.
-    </description>
-
-    <parameter name="pagesDisplayed"
-               type="int"
-               required="no"
-               direction="auto"
-               default-value="7">
-        <description>
-            Determines the maximum number of pages to be displayed in the page list
-            when the table has more than one page.
-        </description>
-    </parameter>
-
-    <component id="informal" type="Any" inherit-informal-parameters="yes"/>
-
-    <property-specification name="selectedPage" type="int"/>
-
-    <component id="hiddenCurrentPage" type="Hidden">
-        <binding name="value" expression="currentPage"/>
-    </component>
-
-    <component id="hiddenPageCount" type="Hidden">
-        <binding name="value" expression="pageCount"/>
-    </component>
-
-    <component id="hiddenStartPage" type="Hidden">
-        <binding name="value" expression="startPage"/>
-    </component>
-
-    <component id="hiddenStopPage" type="Hidden">
-        <binding name="value" expression="stopPage"/>
-    </component>
-
-    <component id="condCurrent" type="If">
-        <binding name="condition" expression="condCurrent"/>
-        <binding name="volatile" expression="true"/>
-        <binding name="renderTag" expression="false" />
-    </component>
-
-    <component id="condOther" type="Else">
-        <binding name="renderTag" expression="false" />
-    </component>
-
-    <component id="iterPage" type="For">
-        <binding name="source" expression="pageList"/>
-        <binding name="value" expression="displayPage"/>
-        <binding name="volatile" expression="true"/>
-        <binding name="renderTag" expression="false" />
-    </component>
-
-    <component id="insertCurrentPage" type="Insert">
-        <binding name="value" expression="displayPage"/>
-    </component>
-
-    <component id="insertOtherPage" type="Insert">
-        <binding name="value" expression="displayPage"/>
-    </component>
-
-    <component id="linkPage" type="LinkSubmit">
-        <binding name="listener" expression="listeners.changePage"/>
-        <binding name="tag" expression="displayPage"/>
-        <binding name="selected" expression="selectedPage"/>
-    </component>
-
-    <component id="linkFirst" type="LinkSubmit">
-        <binding name="listener" expression="listeners.changePage"/>
-        <binding name="tag" expression="1"/>
-        <binding name="selected" expression="selectedPage"/>
-        <binding name="disabled" expression="!condBack"/>
-    </component>
-
-    <component id="linkBack" type="LinkSubmit">
-        <binding name="listener" expression="listeners.changePage"/>
-        <binding name="tag" expression="currentPage - 1"/>
-        <binding name="selected" expression="selectedPage"/>
-        <binding name="disabled" expression="!condBack"/>
-    </component>
-
-    <component id="linkFwd" type="LinkSubmit">
-        <binding name="listener" expression="listeners.changePage"/>
-        <binding name="tag" expression="currentPage + 1"/>
-        <binding name="selected" expression="selectedPage"/>
-        <binding name="disabled" expression="!condFwd"/>
-    </component>
-
-    <component id="linkLast" type="LinkSubmit">
-        <binding name="listener" expression="listeners.changePage"/>
-        <binding name="tag" expression="pageCount"/>
-        <binding name="selected" expression="selectedPage"/>
-        <binding name="disabled" expression="!condFwd"/>
-    </component>
-
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormRows.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormRows.html
deleted file mode 100644
index f78bbd3..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormRows.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="$content$">
-
-<tr jwcid="iterRows">
-	<span jwcid="@RenderBody"/>
-</tr>
-
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormRows.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormRows.java
deleted file mode 100644
index 8198b2c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormRows.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.IPrimaryKeyConvertor;
-
-
-/**
- * A low level Table component that generates the rows of the current page in the table.
- * 
- * This component is a variant of {@link org.apache.tapestry.contrib.table.components.TablePages},
- * but is designed for operation in a form. The displayed rows are stored in 
- * hidden form fields, which are then read during a rewind. This ensures that
- * the form will rewind in exactly the same was as it was rendered even if the 
- * TableModel has changed and no StaleLink exceptions will occur. 
- * 
- * The component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableView}.
- * 
- * <p>
- * The component iterates over the rows of the current page in the table. 
- * The rows are wrapped in 'tr' tags by default. 
- * You can define columns manually within, or
- * you can use {@link org.apache.tapestry.contrib.table.components.TableValues} 
- * to generate the columns automatically.
- * <p> 
- * Please see the Component Reference for details on how to use this component. 
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.TableFormRows.html">Component Reference</a>]
- * 
- * @author mindbridge
- *
- */
-public abstract class TableFormRows extends TableRows
-{
-    public abstract IPrimaryKeyConvertor getConvertor();
-    public abstract IPrimaryKeyConvertor getConvertorCache();
-    public abstract void setConvertorCache(IPrimaryKeyConvertor convertor);
-    public abstract Map getConvertedValues();
-
-    /**
-     * Returns the PK convertor cached within the realm of the current request cycle.
-     *  
-     * @return the cached PK convertor
-     */
-    public IPrimaryKeyConvertor getCachedConvertor()
-    {
-        IPrimaryKeyConvertor objConvertor = getConvertorCache();
-        
-        if (objConvertor == null) {
-            objConvertor = getConvertor();
-            setConvertorCache(objConvertor);
-        }
-        
-        return objConvertor;
-    }
-
-    /**
-     * Get the list of all table rows to be displayed on this page, converted 
-     * using the PK.convertor.
-     * 
-     * @return an iterator of all converted table rows
-     */    
-    public Iterator getConvertedTableRowsIterator()
-    {
-        final Iterator objTableRowsIterator = getTableRowsIterator(); 
-        final IPrimaryKeyConvertor objConvertor = getCachedConvertor();
-        if (objConvertor == null)
-            return objTableRowsIterator;
-            
-        return new Iterator()
-        {
-            public boolean hasNext()
-            {
-                return objTableRowsIterator.hasNext();
-            }
-
-            public Object next()
-            {
-                Object objValue = objTableRowsIterator.next();
-                Object objPrimaryKey = objConvertor.getPrimaryKey(objValue);
-                Map mapConvertedValues = getConvertedValues(); 
-                mapConvertedValues.put(objPrimaryKey, objValue);
-                return objPrimaryKey;
-            }
-
-            public void remove()
-            {
-                objTableRowsIterator.remove();
-            }
-        };
-    }
-
-    /**
-     * Sets the current table row PK and invokes {@link #setTableRow(Object)} as a result.
-     * This method is for internal use only.
-     * 
-     * @param objConvertedTableRow The current converted table row (PK)
-     */
-    public void setConvertedTableRow(Object objConvertedTableRow)
-    {
-        Object objValue = objConvertedTableRow;
-
-        IPrimaryKeyConvertor objConvertor = getCachedConvertor();
-        if (objConvertor != null) {
-            IRequestCycle objCycle = getPage().getRequestCycle();
-            if (objCycle.isRewinding()) {
-                objValue = objConvertor.getValue(objConvertedTableRow);  
-            }
-            else {
-                Map mapConvertedValues = getConvertedValues(); 
-                objValue = mapConvertedValues.get(objConvertedTableRow);
-            }
-        }
-
-        setTableRow(objValue);
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormRows.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormRows.jwc
deleted file mode 100644
index 1a27740..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableFormRows.jwc
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.TableFormRows" 
-	allow-body="yes" allow-informal-parameters="yes" deprecated="yes">
-	
-	<description>
-        A version of the TableRows designed for operation in a form. 
-        This is a low level Table component that generates the rows of 
-        the current page in the table. Each row is stored as a hidden value 
-        in the form, which eliminates the chance of a stale link during rewinding. 
-        This component must be wrapped by TableView. 
-	</description>
-  
-	<parameter name="row">
-        <description>The value object of the row currently being rendered.</description>
-    </parameter>
-
-    <parameter name="convertor" default-value="null">
-        <description>
-        An interface defining how the items iterated upon by this component 
-        will be stored in the form as Hidden values. This interface allows only 
-        the primary key of the items to be stored, rather than the whole item.
-        </description>
-    </parameter>
-    
-	<parameter name="element" default-value='"tr"'>
-        <description>The tag to use to wrap the rows in, 'tr' by default.</description>
-    </parameter>
-
-	<component id="iterRows" type="ListEdit" inherit-informal-parameters="yes">
-		<binding name="source" value="convertedTableRowsIterator"/>
-		<binding name="value" value="convertedTableRow"/>
-        <inherited-binding name="element" parameter-name="element"/>
-	</component>
-
-    <property name="convertedValues" initial-value="new java.util.HashMap()"/>
-    <property name="convertorCache" initial-value="null"/>
-      
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableMessages.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableMessages.java
deleted file mode 100644
index 2e821a8..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableMessages.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.hivemind.service.ClassFabUtils;
-import org.apache.tapestry.IComponent;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class TableMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(TableMessages.class);
-
-    /* defeat instantiation */
-    private TableMessages() { }
-    
-    static String notAColumn(IComponent component, String expression)
-    {
-        return _formatter.format("not-a-column", component.getExtendedId(), expression);
-    }
-
-    static String invalidTableSource(IComponent component, Object sourceValue)
-    {
-        return _formatter.format("invalid-table-source", component.getExtendedId(), ClassFabUtils
-                .getJavaClassName(sourceValue.getClass()));
-    }
-
-    static String invalidTableColumns(IComponent component, Object columnSource)
-    {
-        return _formatter.format("invalid-table-column", component.getExtendedId(), ClassFabUtils
-                .getJavaClassName(columnSource.getClass()));
-    }
-
-    static String missingTableModel(IComponent component)
-    {
-        return _formatter.format("missing-table-model", component.getExtendedId());
-    }
-
-    static String columnsOnlyPlease(IComponent component)
-    {
-        return _formatter.format("columns-only-please", component.getExtendedId());
-    }
-
-    public static String invalidTableStateFormat(String value)
-    {
-        return _formatter.format("invalid-table-state-format", value);
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TablePages.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TablePages.html
deleted file mode 100644
index d7cba5b..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TablePages.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="$content$">
-
-<span jwcid="informal">
-
-	<a jwcid="linkFirst">&lt;&lt;</a>  
-	<a jwcid="linkBack">&lt;</a> 
-	
-	<span jwcid="iterPage">
-	
-		<span jwcid="condCurrent">
-			<b><span jwcid="insertCurrentPage"/></b>
-		</span>
-	
-		<span jwcid="condOther">
-			<a jwcid="linkPage"><span jwcid="insertOtherPage"/></a>
-		</span>
-	
-	</span>
-	
-	<a jwcid="linkFwd">&gt;</a>
-	<a jwcid="linkLast">&gt;&gt;</a>
-
-</span>
-
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TablePages.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TablePages.java
deleted file mode 100644
index b8518e8..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TablePages.java
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * A low level Table component that renders the pages in the table.
- * This component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableView}.
- * <p>
- * The component generates a list of pages in the Table centered around the 
- * current one and allows you to navigate to other pages.
- * <p> 
- * Please see the Component Reference for details on how to use this component. 
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.TablePages.html">Component Reference</a>]
- * 
- * @author mindbridge
- *
- */
-public abstract class TablePages extends AbstractTableViewComponent
-{
-    // Transient
-    private int m_nDisplayPage;
-    
-    // Bindings    
-    public abstract int getPagesDisplayed();
-
-    /**
-     * Returns the displayPage.
-     * @return int
-     */
-    public int getDisplayPage()
-    {
-        return m_nDisplayPage;
-    }
-
-    /**
-     * Sets the displayPage.
-     * @param displayPage The displayPage to set
-     */
-    public void setDisplayPage(int displayPage)
-    {
-        m_nDisplayPage = displayPage;
-    }
-
-    public int getCurrentPage()
-    {
-        return getTableModelSource().getTableModel().getPagingState().getCurrentPage() + 1;
-    }
-
-    public int getPageCount()
-    {
-        return getTableModelSource().getTableModel().getPageCount();
-    }
-
-    public boolean getCondBack()
-    {
-        return getCurrentPage() > 1;
-    }
-
-    public boolean getCondFwd()
-    {
-        return getCurrentPage() < getPageCount();
-    }
-
-    public boolean getCondCurrent()
-    {
-        return getDisplayPage() == getCurrentPage();
-    }
-
-    public int getStartPage()
-    {
-        int nCurrent = getCurrentPage();
-        int nPagesDisplayed = getPagesDisplayed();
-
-        int nRightMargin = nPagesDisplayed / 2;
-        int nStop = nCurrent + nRightMargin;
-        int nLastPage = getPageCount();
-
-        int nLeftAddon = 0;
-        if (nStop > nLastPage)
-            nLeftAddon = nStop - nLastPage;
-
-        int nLeftMargin = (nPagesDisplayed - 1) / 2 + nLeftAddon;
-        int nStart = nCurrent - nLeftMargin;
-        int nFirstPage = 1;
-        if (nStart < nFirstPage)
-            nStart = nFirstPage;
-        return nStart;
-    }
-
-    public int getStopPage()
-    {
-        int nCurrent = getCurrentPage();
-        int nPagesDisplayed = getPagesDisplayed();
-
-        int nLeftMargin = (nPagesDisplayed - 1) / 2;
-        int nStart = nCurrent - nLeftMargin;
-        int nFirstPage = 1;
-
-        int nRightAddon = 0;
-        if (nStart < nFirstPage)
-            nRightAddon = nFirstPage - nStart;
-
-        int nRightMargin = nPagesDisplayed / 2 + nRightAddon;
-        int nStop = nCurrent + nRightMargin;
-        int nLastPage = getPageCount();
-        if (nStop > nLastPage)
-            nStop = nLastPage;
-        return nStop;
-    }
-
-    public Integer[] getPageList()
-    {
-        int nStart = getStartPage();
-        int nStop = getStopPage();
-
-        Integer[] arrPages = new Integer[nStop - nStart + 1];
-        for (int i = nStart; i <= nStop; i++)
-            arrPages[i - nStart] = new Integer(i);
-
-        return arrPages;
-    }
-
-    public Object[] getFirstPageContext()
-    {
-        ComponentAddress objAddress = new ComponentAddress(getTableModelSource());
-        return new Object[] { objAddress, new Integer(1)};
-    }
-
-    public Object[] getLastPageContext()
-    {
-        ComponentAddress objAddress = new ComponentAddress(getTableModelSource());
-        return new Object[] { objAddress, new Integer(getPageCount())};
-    }
-
-    public Object[] getBackPageContext()
-    {
-        ComponentAddress objAddress = new ComponentAddress(getTableModelSource());
-        return new Object[] { objAddress, new Integer(getCurrentPage() - 1)};
-    }
-
-    public Object[] getFwdPageContext()
-    {
-        ComponentAddress objAddress = new ComponentAddress(getTableModelSource());
-        return new Object[] { objAddress, new Integer(getCurrentPage() + 1)};
-    }
-
-    public Object[] getDisplayPageContext()
-    {
-        ComponentAddress objAddress = new ComponentAddress(getTableModelSource());
-        return new Object[] { objAddress, new Integer(m_nDisplayPage)};
-    }
-
-    public void changePage(IRequestCycle objCycle)
-    {
-        Object[] arrParameters = objCycle.getListenerParameters();
-        if (arrParameters.length != 2
-            && !(arrParameters[0] instanceof ComponentAddress)
-            && !(arrParameters[1] instanceof Integer))
-        {
-            // error
-            return;
-        }
-
-        ComponentAddress objAddress = (ComponentAddress)arrParameters[0];
-        ITableModelSource objSource = (ITableModelSource)objAddress.findComponent(objCycle);
-        int page = ((Integer)arrParameters[1]).intValue();
-        
-        objSource.storeTableAction(new TableActionPageChange(page));
-    }
-
-    public void setCurrentPage(ITableModelSource objSource, int nPage)
-    {
-        objSource.getTableModel().getPagingState().setCurrentPage(nPage - 1);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TablePages.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TablePages.jwc
deleted file mode 100644
index 08981d0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TablePages.jwc
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-        "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-        "http://tapestry.apache.org/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.table.components.TablePages"
-                         allow-body="no" allow-informal-parameters="yes">
-
-    <description>
-        A low level Table component that renders the pages in the table.
-        This component must be wrapped by TableView.
-    </description>
-
-    <parameter name="pagesDisplayed"
-               type="int"
-               required="no"
-               direction="auto"
-               default-value="7">
-        <description>
-            Determines the maximum number of pages to be displayed in the page list
-            when the table has more than one page.
-        </description>
-    </parameter>
-
-    <component id="informal" type="Any" inherit-informal-parameters="yes"/>
-
-    <component id="condCurrent" type="If">
-        <binding name="condition" expression="condCurrent"/>
-        <binding name="renderTag" expression="false" />
-    </component>
-
-    <component id="condOther" type="Else">
-        <binding name="renderTag" expression="false" />
-    </component>
-
-    <component id="iterPage" type="For">
-        <binding name="source" expression="pageList"/>
-        <binding name="value" expression="displayPage"/>
-        <binding name="renderTag" expression="false" />
-    </component>
-
-    <component id="insertCurrentPage" type="Insert">
-        <binding name="value" expression="displayPage"/>
-    </component>
-
-    <component id="insertOtherPage" type="Insert">
-        <binding name="value" expression="displayPage"/>
-    </component>
-
-    <component id="linkPage" type="DirectLink">
-        <binding name="listener" expression="listeners.changePage"/>
-        <binding name="parameters" expression="displayPageContext"/>
-    </component>
-
-    <component id="linkFirst" type="DirectLink">
-        <binding name="listener" expression="listeners.changePage"/>
-        <binding name="parameters" expression="firstPageContext"/>
-        <binding name="disabled" expression="!condBack"/>
-    </component>
-
-    <component id="linkBack" type="DirectLink">
-        <binding name="listener" expression="listeners.changePage"/>
-        <binding name="parameters" expression="backPageContext"/>
-        <binding name="disabled" expression="!condBack"/>
-    </component>
-
-    <component id="linkFwd" type="DirectLink">
-        <binding name="listener" expression="listeners.changePage"/>
-        <binding name="parameters" expression="fwdPageContext"/>
-        <binding name="disabled" expression="!condFwd"/>
-    </component>
-
-    <component id="linkLast" type="DirectLink">
-        <binding name="listener" expression="listeners.changePage"/>
-        <binding name="parameters" expression="lastPageContext"/>
-        <binding name="disabled" expression="!condFwd"/>
-    </component>
-
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableRows.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableRows.html
deleted file mode 100644
index 7385784..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableRows.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-
-<span jwcid="iterRows">
-	<tr jwcid="informal">
-		<span jwcid="wrapped"/>
-	</tr>
-</span>
-
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableRows.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableRows.java
deleted file mode 100644
index bf0c9ed..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableRows.java
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.IFullTableModel;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableRowSource;
-
-/**
- * A low level Table component that generates the rows of the current page in
- * the table. This component must be wrapped by
- * {@link org.apache.tapestry.contrib.table.components.TableView}.
- * <p>
- * The component iterates over the rows of the current page in the table. The
- * rows are wrapped in 'tr' tags by default. You can define columns manually
- * within, or you can use
- * {@link org.apache.tapestry.contrib.table.components.TableValues} to generate
- * the columns automatically.
- * <p>
- * Please see the Component Reference for details on how to use this component. [<a
- * href="../../../../../../../ComponentReference/contrib.TableRows.html">Component
- * Reference</a>]
- * 
- * @author mindbridge
- */
-public abstract class TableRows extends AbstractTableViewComponent implements
-        ITableRowSource
-{
-
-    // Transient
-    private Object m_objTableRow = null;
-    private int m_nTableIndex;
-    
-    // Parameters
-    public abstract Object getFullSourceParameter();
-
-    /**
-     * Returns the currently rendered table row. You can call this method to
-     * obtain the current row.
-     * 
-     * @return Object the current table row
-     */
-    public Object getTableRow()
-    {
-        return m_objTableRow;
-    }
-
-    /**
-     * Sets the currently rendered table row. This method is for internal use
-     * only.
-     * 
-     * @param tableRow
-     *            The current table row
-     */
-    public void setTableRow(Object tableRow)
-    {
-        m_objTableRow = tableRow;
-
-        IBinding objRowBinding = getBinding("row");
-        if (objRowBinding != null) objRowBinding.setObject(tableRow);
-    }
-
-    /**
-     * Returns the index of the currently rendered table row. You can call this
-     * method to obtain the index of the current row.
-     * 
-     * @return int the current table index
-     */
-    public int getTableIndex()
-    {
-        return m_nTableIndex;
-    }
-
-    /**
-     * Sets the index of the currently rendered table row. This method is for
-     * internal use only.
-     * 
-     * @param tableIndex
-     *            The index of the current table row
-     */
-    public void setTableIndex(int tableIndex)
-    {
-        m_nTableIndex = tableIndex;
-
-        IBinding objIndexBinding = getBinding("index");
-        if (objIndexBinding != null)
-            objIndexBinding.setObject(new Integer(tableIndex));
-    }
-
-    /**
-     * Get the list of all table rows to be displayed on this page.
-     * 
-     * @return an iterator of all table rows
-     */
-    public Iterator getTableRowsIterator()
-    {
-        ITableModel objTableModel = getTableModelSource().getTableModel();
-        return objTableModel.getCurrentPageRows();
-    }
-
-    public Object getFullSource()
-    {
-        ITableModel objTableModel = getTableModelSource().getTableModel();
-        if (objTableModel instanceof IFullTableModel)
-            return ((IFullTableModel) objTableModel).getRows();
-        return getFullSourceParameter();
-    }
-
-    /**
-     * @see org.apache.tapestry.BaseComponent#renderComponent(IMarkupWriter,
-     *      IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object objOldValue = cycle
-                .getAttribute(ITableRowSource.TABLE_ROW_SOURCE_ATTRIBUTE);
-        cycle.setAttribute(ITableRowSource.TABLE_ROW_SOURCE_ATTRIBUTE, this);
-
-        super.renderComponent(writer, cycle);
-
-        cycle.setAttribute(ITableRowSource.TABLE_ROW_SOURCE_ATTRIBUTE,
-                objOldValue);
-
-        // set the current row to null when the component is not active
-        m_objTableRow = null;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableRows.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableRows.jwc
deleted file mode 100644
index 98b66f3..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableRows.jwc
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.TableRows" 
-	allow-body="yes" allow-informal-parameters="yes">
-	
-	<description>
-        A low level Table component that generates the rows of the current page in the table. 
-        This component must be wrapped by TableView. 
-	</description>
-  
-	<parameter name="row" property="rowParameter">
-        <description>The current row being rendered.</description>
-    </parameter>
-
-	<parameter name="index" property="indexParameter">
-		<description>
-		    If provided, the parameter is updated with the index of the loop on each iteration.
-		</description>
-	</parameter>
-  
-	<parameter name="element" default-value="'tr'">
-        <description>The tag to use to wrap the rows in, 'tr' by default.</description>
-    </parameter>
-
-	<parameter name="keyExpression">
-    	<description>
-		    Only active in a form. An OGNL expression that returns the primary key of the iterated value. 
-		    The primary keys are stored in hidden fields during rendering and are loaded from the form
-		    during a rewind to ensure that the iterations remain the same.
-		    This is a simpler, but a less efficient alternative of the 'converter' parameter.
-		    If needed, please use in conjuction with 'fullSource' to reference objects 
-		    not currently present in 'source'.
-		    Also, use the 'defaultValue' parameter to define the object to be returned if
-		    a value corresponding to a particular primary key cannot be found.
-		</description>
-	</parameter>
-    
-	<parameter name="fullSource" property="fullSourceParameter">
-		<description>
-		    Only active in a form and in combination with the 'keyExpression' parameter. 
-		    If an object corresponding to a primary key stored in the form cannot be
-		    found in the 'source' parameter, then the objects provided by this parameter 
-		    are searched for a match next. 
-		</description>
-	</parameter>
-  
-	<parameter name="defaultValue" default-value="null">
-		<description>
-		    Only active in a form. The value to be used when no match for a given primary key is found. 
-		</description>
-	</parameter>
-
-	<parameter name="converter" default-value="null">
-		<description>
-		    Only active in a form. Defines how the items iterated upon 
-		    will be stored in the form as hidden values and how the stored information will be 
-		    converted back to objects. 
-		    This interface allows only the primary key of the items to be stored, 
-		    rather than the whole item.
-		</description>
-	</parameter>
-  
-	<parameter name="primaryKeys">
-		<description>
-			Only active in a form. If provided, the parameter is automatically updated 
-		    before a rewind with the list of primary keys stored in the form. 
-		    The parameter is updated right before the iterations begin in a rewind and 
-		    could be used to preload the relevant objects in a provided 'converter'.
-		</description>
-	</parameter>
-    
-    <parameter name="volatile"> 
-        <description>
-			Only active in a form. Determines whether to avoid creating hidden fields within a form.
-			Using this parameter may make the form structure different during render and rewind, 
-			and cause exceptions as a result. Please use with caution.
-        </description>
-    </parameter>
-    
-	<component id="iterRows" type="For">
-		<binding name="source" value="tableRowsIterator"/>
-		<binding name="value" value="tableRow"/>
-		<binding name="index" value="tableIndex"/>
-		<binding name="fullSource" value="fullSource"/>
-        <binding name="renderTag" value="false" />
-		<inherited-binding name="keyExpression" parameter-name="keyExpression"/>
-		<inherited-binding name="defaultValue" parameter-name="defaultValue"/>
-		<inherited-binding name="converter" parameter-name="converter"/>
-		<inherited-binding name="primaryKeys" parameter-name="primaryKeys"/>
-		<inherited-binding name="volatile" parameter-name="volatile"/>
-	</component>
-  
-	<component id="informal" type="Any" inherit-informal-parameters="yes">
-		<inherited-binding name="element" parameter-name="element"/>
-	</component>
-  
-	<component id="wrapped" type="RenderBody"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableStrings.properties b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableStrings.properties
deleted file mode 100644
index eb9b25a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableStrings.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-missing-table-model=Either the 'tableModel' parameter or both 'source' and 'columns' parameters must be specified by component {0}
-columns-only-please=The 'columns' parameter of component {0} must contain a list of ITableColumn objects only
-not-a-column=The expression '{1}' in the 'columns' parameter of component {0} does not evaluate to an ITableColumn
-invalid-table-source=The source parameter of component {0} is of type {1}, but must be of type Object[], Collection, Iterator, or IBasicTableModel
-invalid-table-columns=The columns parameter of component {0} is of type {1}, but must be of type String, ITableColumnModel, ITableColumn[], List, or Iterator
-invalid-table-state-format=Invalid format of the table state: {0}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableValues.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableValues.html
deleted file mode 100644
index 4873a9b..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableValues.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-
-<span jwcid="iterColumns">
-	<td jwcid="informal"><span jwcid="insertValueRenderer"/></td>
-</span>
-
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableValues.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableValues.java
deleted file mode 100644
index 7e3857e..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableValues.java
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-
-/**
- * A low level Table component that generates the columns in the current row in the table. This
- * component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableRows}.
- * <p>
- * The component iterates over the columns in the table and automatically renders the column values
- * for the current table row. The columns are wrapped in 'td' tags by default. <br>
- * The column values are rendered using the renderer returned by the getValueRenderer() method in
- * {@link org.apache.tapestry.contrib.table.model.ITableColumn}.
- * <p>
- * Please see the Component Reference for details on how to use this component. [ <a
- * href="../../../../../../../ComponentReference/contrib.TableValues.html">Component Reference </a>]
- * 
- * @author mindbridge
- */
-public abstract class TableValues extends AbstractTableRowComponent
-{
-    public static final String TABLE_VALUE_CSS_CLASS_SUFFIX = "ColumnValue";
-
-    // Transient
-    private ITableColumn m_objTableColumn;
-
-    /**
-     * Get the list of all table columns to be displayed.
-     * 
-     * @return an iterator of all table columns
-     */
-    public Iterator getTableColumnIterator()
-    {
-        ITableColumnModel objColumnModel = getTableModelSource().getTableModel().getColumnModel();
-        return objColumnModel.getColumns();
-    }
-
-    /**
-     * Returns the currently rendered table column. You can call this method to obtain the current
-     * column.
-     * 
-     * @return ITableColumn the current table column
-     */
-    public ITableColumn getTableColumn()
-    {
-        return m_objTableColumn;
-    }
-
-    /**
-     * Sets the currently rendered table column. This method is for internal use only.
-     * 
-     * @param tableColumn
-     *            The current table column
-     */
-    public void setTableColumn(ITableColumn tableColumn)
-    {
-        m_objTableColumn = tableColumn;
-
-        if (isParameterBound("column"))
-            setColumnParameter(tableColumn);
-    }
-
-    /**
-     * Returns the renderer to be used to generate the appearance of the current column.
-     * 
-     * @return the value renderer of the current column
-     */
-    public IRender getTableValueRenderer()
-    {
-        Object objRow = getTableRowSource().getTableRow();
-        return getTableColumn().getValueRenderer(
-                getPage().getRequestCycle(),
-                getTableModelSource(),
-                objRow);
-    }
-
-    /**
-     * Returns the CSS class of the generated table cell. It uses the class parameter if it has been
-     * bound, or the default value of "[column name]ColumnValue" otherwise.
-     * 
-     * @return the CSS class of the cell
-     */
-    public String getValueClass()
-    {
-        IBinding classBinding = getBinding("class");
-        if (classBinding != null) 
-            return classBinding.getObject(String.class).toString();
-
-        return getTableColumn().getColumnName() + TABLE_VALUE_CSS_CLASS_SUFFIX;
-    }
-
-    /** @since 4.0 */
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        super.cleanupAfterRender(cycle);
-
-        m_objTableColumn = null;
-
-    }
-
-    /** @since 4.0 */
-
-    public abstract void setColumnParameter(ITableColumn column);
-
-    /** @since 4.0 */
-
-    public abstract String getCellClass();
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableValues.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableValues.jwc
deleted file mode 100644
index 1f0503b..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableValues.jwc
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.TableValues" 
-	allow-body="yes" allow-informal-parameters="yes">
-	
-	<description>
-        A low level Table component that generates the columns for the current row in the table. 
-        This component must be wrapped by TableRows. 
-	</description>
-  
-	<parameter name="column" 
-        property="columnParameter">
-        <description>The current column being rendered</description>
-    </parameter>
-
-	<parameter name="element" default-value="literal:td">
-        <description>The tag to use to wrap the values in, 'td' by default.</description>
-    </parameter>
-
-    <parameter name="class" property="cellClass">
-        <description>The CSS class of the table values</description>
-    </parameter>
-    
-	<component id="iterColumns" type="For">
-		<binding name="source" value="ognl:tableColumnIterator"/>
-		<binding name="value" value="ognl:tableColumn"/>
-		<binding name="volatile" value="true"/>
-        <binding name="renderTag" value="false" />
-	</component>
-  
-	<component id="informal" type="Any" inherit-informal-parameters="yes">
-		<binding name="element" value="ognl:element"/>
-        <binding name="class" value="ognl:valueClass"/>
-	</component>
-  
-	<component id="insertValueRenderer" type="Delegator">
-		<binding name="delegate" value="ognl:tableValueRenderer"/>
-	</component>
-  
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableView.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableView.html
deleted file mode 100644
index f1447ca..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableView.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-
-<table jwcid="table">
-	<span jwcid="renderBody"/>
-</table>
-
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableView.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableView.java
deleted file mode 100644
index 425aa79..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableView.java
+++ /dev/null
@@ -1,555 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.*;
-import org.apache.tapestry.contrib.table.model.common.BasicTableModelWrap;
-import org.apache.tapestry.contrib.table.model.simple.SimpleListTableDataModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * A low level Table component that wraps all other low level Table components.
- * This component carries the
- * {@link org.apache.tapestry.contrib.table.model.ITableModel}that is used by
- * the other Table components. Please see the documentation of
- * {@link org.apache.tapestry.contrib.table.model.ITableModel}if you need to
- * know more about how a table is represented.
- * <p>
- * This component also handles the saving of the state of the model using an
- * {@link org.apache.tapestry.contrib.table.model.ITableSessionStateManager}to
- * determine what part of the model is to be saved and an
- * {@link  org.apache.tapestry.contrib.table.model.ITableSessionStoreManager}to
- * determine how to save it.
- * <p>
- * Upon the beginning of a new request cycle when the table model is first
- * needed, the model is obtained using the following process:
- * <ul>
- * <li>The persistent state of the table is loaded. If the
- * tableSessionStoreManager binding has not been bound, the state is loaded from
- * a persistent property within the component (it is null at the beginning).
- * Otherwise the supplied
- * {@link  org.apache.tapestry.contrib.table.model.ITableSessionStoreManager}is
- * used to load the persistent state.
- * <li>The table model is recreated using the
- * {@link org.apache.tapestry.contrib.table.model.ITableSessionStateManager}that
- * could be supplied using the tableSessionStateManager binding (but has a
- * default value and is therefore not required).
- * <li>If the
- * {@link org.apache.tapestry.contrib.table.model.ITableSessionStateManager}returns
- * null, then a table model is taken from the tableModel binding. Thus, if the
- * {@link org.apache.tapestry.contrib.table.model.common.NullTableSessionStateManager}is
- * used, the table model would be taken from the tableModel binding every time.
- * </ul>
- * Just before the rendering phase the persistent state of the model is saved in
- * the session. This process occurs in reverse:
- * <ul>
- * <li>The persistent state of the model is taken via the
- * {@link org.apache.tapestry.contrib.table.model.ITableSessionStateManager}.
- * <li>If the tableSessionStoreManager binding has not been bound, the
- * persistent state is saved as a persistent page property. Otherwise the
- * supplied
- * {@link  org.apache.tapestry.contrib.table.model.ITableSessionStoreManager}is
- * used to save the persistent state. Use of the
- * {@link  org.apache.tapestry.contrib.table.model.ITableSessionStoreManager}is
- * usually necessary when tables with the same model have to be used across
- * multiple pages, and hence the state has to be saved in the Visit, rather than
- * in a persistent component property.
- * </ul>
- * <p>
- * <p>
- * Please see the Component Reference for details on how to use this component. [
- * <a
- * href="../../../../../../../ComponentReference/contrib.TableView.html">Component
- * Reference </a>]
- * 
- * @author mindbridge
- */
-public abstract class TableView extends BaseComponent implements
-        PageDetachListener, PageBeginRenderListener, ITableModelSource
-{
-
-    // Component properties
-    private ITableSessionStateManager m_objDefaultSessionStateManager = null;
-
-    private ITableColumnModel m_objColumnModel = null;
-
-    // Transient objects
-    private ITableModel m_objTableModel;
-
-    private ITableModel m_objCachedTableModelValue;
-
-    /**
-     * The component constructor. Invokes the component member initializations.
-     */
-    public TableView()
-    {
-        initialize();
-    }
-
-    /** @since 4.0 */
-    public abstract TableColumnModelSource getModelSource();
-
-    /** @since 4.0 */
-    public abstract IAdvancedTableColumnSource getColumnSource();
-
-    // enhanced parameter methods
-    public abstract ITableModel getTableModelValue();
-
-    public abstract Object getSource();
-
-    public abstract Object getColumns();
-
-    public abstract int getInitialPage();
-
-    public abstract String getInitialSortColumn();
-
-    public abstract boolean getInitialSortOrder();
-
-    public abstract ITableSessionStateManager getTableSessionStateManager();
-
-    public abstract ITableSessionStoreManager getTableSessionStoreManager();
-
-    public abstract IComponent getColumnSettingsContainer();
-
-    public abstract int getPageSize();
-
-    public abstract String getPersist();
-
-    // enhanced property methods
-    public abstract Serializable getSessionState();
-
-    public abstract void setSessionState(Serializable sessionState);
-
-    public abstract Serializable getClientState();
-
-    public abstract void setClientState(Serializable sessionState);
-
-    public abstract Serializable getClientAppState();
-
-    public abstract void setClientAppState(Serializable sessionState);
-
-    public abstract List getTableActions();
-
-    public abstract void setTableActions(List actions);
-
-    /**
-     * Invokes the component member initializations.
-     * 
-     * @see org.apache.tapestry.event.PageDetachListener#pageDetached(PageEvent)
-     */
-    public void pageDetached(PageEvent objEvent)
-    {
-        initialize();
-    }
-
-    /**
-     * Initialize the component member variables.
-     */
-    private void initialize()
-    {
-        m_objTableModel = null;
-        m_objCachedTableModelValue = null;
-    }
-
-    /**
-     * Resets the table by removing any stored table state. This means that the
-     * current column to sort on and the current page will be forgotten and all
-     * data will be reloaded.
-     */
-    public void reset()
-    {
-        initialize();
-        storeSessionState(null);
-    }
-
-    public ITableModel getCachedTableModelValue()
-    {
-        if (m_objCachedTableModelValue == null)
-            m_objCachedTableModelValue = getTableModelValue();
-        return m_objCachedTableModelValue;
-    }
-
-    /**
-     * Returns the tableModel.
-     * 
-     * @return ITableModel the table model used by the table components
-     */
-    public ITableModel getTableModel()
-    {
-        // if null, first try to recreate the model from the session state
-        if (m_objTableModel == null)
-        {
-            Serializable objState = loadSessionState();
-            ITableSessionStateManager objStateManager = getTableSessionStateManager();
-            m_objTableModel = objStateManager.recreateTableModel(objState);
-        }
-
-        // if the session state does not help, get the model from the binding
-        if (m_objTableModel == null)
-            m_objTableModel = getCachedTableModelValue();
-
-        // if the model from the binding is null, build a model from source and
-        // columns
-        if (m_objTableModel == null)
-            m_objTableModel = generateTableModel(null);
-
-        if (m_objTableModel == null)
-            throw new ApplicationRuntimeException(TableMessages.missingTableModel(this));
-
-        return m_objTableModel;
-    }
-
-    /**
-     * Generate a table model using the 'source' and 'columns' parameters.
-     * 
-     * @return the newly generated table model
-     */
-    protected ITableModel generateTableModel(SimpleTableState objState)
-    {
-        SimpleTableState usableObjState = objState;
-        // create a new table state if none is passed
-        if (usableObjState == null)
-        {
-            usableObjState = new SimpleTableState();
-            usableObjState.getSortingState().setSortColumn(getInitialSortColumn(),
-                    getInitialSortOrder());
-            usableObjState.getPagingState().setCurrentPage(getInitialPage());
-        }
-
-        // update the page size if set in the parameter
-        if (isParameterBound("pageSize"))
-            usableObjState.getPagingState().setPageSize(getPageSize());
-
-        // get the column model. if not possible, return null.
-        ITableColumnModel objColumnModel = getTableColumnModel();
-        if (objColumnModel == null) return null;
-
-        Object objSourceValue = getSource();
-        if (objSourceValue == null) return null;
-
-        // if the source parameter is of type {@link IBasicTableModel},
-        // create and return an appropriate wrapper
-        if (objSourceValue instanceof IBasicTableModel)
-            return new BasicTableModelWrap((IBasicTableModel) objSourceValue,
-                    objColumnModel, usableObjState);
-
-        // otherwise, the source parameter must contain the data to be displayed
-        ITableDataModel objDataModel = null;
-        if (objSourceValue instanceof Object[])
-            objDataModel = new SimpleListTableDataModel(
-                    (Object[]) objSourceValue);
-        else if (objSourceValue instanceof List)
-            objDataModel = new SimpleListTableDataModel((List) objSourceValue);
-        else if (objSourceValue instanceof Collection)
-            objDataModel = new SimpleListTableDataModel(
-                    (Collection) objSourceValue);
-        else if (objSourceValue instanceof Iterator)
-            objDataModel = new SimpleListTableDataModel(
-                    (Iterator) objSourceValue);
-
-        if (objDataModel == null)
-            throw new ApplicationRuntimeException(TableMessages
-                    .invalidTableSource(this, objSourceValue));
-
-        return new SimpleTableModel(objDataModel, objColumnModel, usableObjState);
-    }
-
-    /**
-     * Returns the table column model as specified by the 'columns' binding. If
-     * the value of the 'columns' binding is of a type different than
-     * ITableColumnModel, this method makes the appropriate conversion.
-     * 
-     * @return The table column model as specified by the 'columns' binding
-     */
-    protected ITableColumnModel getTableColumnModel()
-    {
-        Object objColumns = getColumns();
-
-        if (objColumns == null) return null;
-
-        if (objColumns instanceof ITableColumnModel) { return (ITableColumnModel) objColumns; }
-
-        if (objColumns instanceof Iterator)
-        {
-            // convert to List
-            Iterator objColumnsIterator = (Iterator) objColumns;
-            List arrColumnsList = new ArrayList();
-            addAll(arrColumnsList, objColumnsIterator);
-            objColumns = arrColumnsList;
-        }
-
-        if (objColumns instanceof List)
-        {
-            // validate that the list contains only ITableColumn instances
-            List arrColumnsList = (List) objColumns;
-            int nColumnsNumber = arrColumnsList.size();
-            for(int i = 0; i < nColumnsNumber; i++)
-            {
-                if (!(arrColumnsList.get(i) instanceof ITableColumn))
-                    throw new ApplicationRuntimeException(TableMessages
-                            .columnsOnlyPlease(this));
-            }
-            // objColumns = arrColumnsList.toArray(new
-            // ITableColumn[nColumnsNumber]);
-            return new SimpleTableColumnModel(arrColumnsList);
-        }
-
-        if (objColumns instanceof ITableColumn[]) { return new SimpleTableColumnModel(
-                (ITableColumn[]) objColumns); }
-
-        if (objColumns instanceof String)
-        {
-            String strColumns = (String) objColumns;
-            if (getBinding("columns").isInvariant())
-            {
-                // if the binding is invariant, create the columns only once
-                if (m_objColumnModel == null)
-                    m_objColumnModel = generateTableColumnModel(strColumns);
-                return m_objColumnModel;
-            }
-
-            // if the binding is not invariant, create them every time
-            return generateTableColumnModel(strColumns);
-        }
-
-        throw new ApplicationRuntimeException(TableMessages
-                .invalidTableColumns(this, objColumns));
-    }
-
-    private void addAll(List arrColumnsList, Iterator objColumnsIterator)
-    {
-        while(objColumnsIterator.hasNext())
-            arrColumnsList.add(objColumnsIterator.next());
-    }
-
-    /**
-     * Generate a table column model out of the description string provided.
-     * Entries in the description string are separated by commas. Each column
-     * entry is of the format name, name:expression, or
-     * name:displayName:expression. An entry prefixed with ! represents a
-     * non-sortable column. If the whole description string is prefixed with *,
-     * it represents columns to be included in a Form.
-     * 
-     * @param strDesc
-     *            the description of the column model to be generated
-     * @return a table column model based on the provided description
-     */
-    protected ITableColumnModel generateTableColumnModel(String strDesc)
-    {
-        IComponent objColumnSettingsContainer = getColumnSettingsContainer();
-        IAdvancedTableColumnSource objColumnSource = getColumnSource();
-
-        return getModelSource().generateTableColumnModel(objColumnSource,
-                strDesc, this, objColumnSettingsContainer);
-    }
-
-    /**
-     * The default session state manager to be used in case no such manager is
-     * provided by the corresponding parameter.
-     * 
-     * @return the default session state manager
-     */
-    public ITableSessionStateManager getDefaultTableSessionStateManager()
-    {
-        if (m_objDefaultSessionStateManager == null)
-            m_objDefaultSessionStateManager = new TableViewSessionStateManager(
-                    this);
-        return m_objDefaultSessionStateManager;
-    }
-
-    /**
-     * Invoked when there is a modification of the table state and it needs to
-     * be saved.
-     * 
-     * @see org.apache.tapestry.contrib.table.model.ITableModelSource#fireObservedStateChange()
-     */
-    public void fireObservedStateChange()
-    {
-        saveSessionState();
-    }
-
-    /**
-     * Ensures that the table state is saved before the render phase begins in
-     * case there are modifications for which {@link #fireObservedStateChange()}has
-     * not been invoked.
-     * 
-     * @see org.apache.tapestry.event.PageBeginRenderListener#pageBeginRender(org.apache.tapestry.event.PageEvent)
-     */
-    public void pageBeginRender(PageEvent event)
-    {
-        executeTableActions();
-
-        // 'suspenders': save the table model if it has been already loaded.
-        // this means that if a change has been made explicitly in a listener,
-        // it will be saved. this is the last place before committing the
-        // changes
-        // where a save can occur
-        if (m_objTableModel != null) saveSessionState();
-    }
-
-    /**
-     * Saves the table state using the SessionStateManager to determine what to
-     * save and the SessionStoreManager to determine where to save it.
-     */
-    protected void saveSessionState()
-    {
-        ITableModel objModel = getTableModel();
-        Serializable objState = getTableSessionStateManager().getSessionState(
-                objModel);
-        storeSessionState(objState);
-    }
-
-    /**
-     * Loads the table state using the SessionStoreManager.
-     * 
-     * @return the stored table state
-     */
-    protected Serializable loadSessionState()
-    {
-        ITableSessionStoreManager objManager = getTableSessionStoreManager();
-        if (objManager != null)
-            return objManager.loadState(getPage().getRequestCycle());
-        String strPersist = getPersist();
-        if (strPersist.equals("client") || strPersist.equals("client:page"))
-            return getClientState();
-        else if (strPersist.equals("client:app"))
-            return getClientAppState();
-        else return getSessionState();
-    }
-
-    /**
-     * Stores the table state using the SessionStoreManager.
-     * 
-     * @param objState
-     *            the table state to store
-     */
-    protected void storeSessionState(Serializable objState)
-    {
-        ITableSessionStoreManager objManager = getTableSessionStoreManager();
-        if (objManager != null)
-            objManager.saveState(getPage().getRequestCycle(), objState);
-        else
-        {
-            String strPersist = getPersist();
-            if (strPersist.equals("client") || strPersist.equals("client:page"))
-                setClientState(objState);
-            else if (strPersist.equals("client:app"))
-                setClientAppState(objState);
-            else setSessionState(objState);
-        }
-    }
-
-    /**
-     * Make sure that the values stored in the model are useable and correct.
-     * The changes made here are not saved.
-     */
-    protected void validateValues()
-    {
-        ITableModel objModel = getTableModel();
-
-        // make sure current page is within the allowed range
-        ITablePagingState objPagingState = objModel.getPagingState();
-        int nCurrentPage = objPagingState.getCurrentPage();
-        int nPageCount = objModel.getPageCount();
-        if (nCurrentPage >= nPageCount)
-        {
-            // the current page is greater than the page count. adjust.
-            nCurrentPage = nPageCount - 1;
-            objPagingState.setCurrentPage(nCurrentPage);
-        }
-        if (nCurrentPage < 0)
-        {
-            // the current page is before the first page. adjust.
-            nCurrentPage = 0;
-            objPagingState.setCurrentPage(nCurrentPage);
-        }
-    }
-
-    /**
-     * Stores a pointer to this component in the Request Cycle while rendering
-     * so that wrapped components have access to it.
-     * 
-     * @see org.apache.tapestry.BaseComponent#renderComponent(IMarkupWriter,
-     *      IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object objOldValue = cycle.getAttribute(ITableModelSource.TABLE_MODEL_SOURCE_ATTRIBUTE);
-        cycle.setAttribute(ITableModelSource.TABLE_MODEL_SOURCE_ATTRIBUTE, this);
-        
-        initialize();
-        validateValues();
-        
-        super.renderComponent(writer, cycle);
-        
-        cycle.setAttribute(ITableModelSource.TABLE_MODEL_SOURCE_ATTRIBUTE,
-                objOldValue);
-    }
-
-    /**
-     * Stores the provided table action.
-     */
-    public void storeTableAction(ITableAction action)
-    {
-        List actions = getTableActions();
-        if (actions == null)
-        {
-            actions = new ArrayList(5);
-            setTableActions(actions);
-        }
-
-        actions.add(action);
-    }
-
-    /**
-     * Executes the stored table actions.
-     */
-    public void executeTableActions()
-    {
-        List actions = getTableActions();
-        if (actions == null || actions.isEmpty()) return;
-
-        // save the actions and clear the list
-        List savedActions = new ArrayList(actions);
-        actions.clear();
-
-        ITableModel objTableModel = getTableModel();
-        for(Iterator it = savedActions.iterator(); it.hasNext();)
-        {
-            ITableAction action = (ITableAction) it.next();
-            action.executeTableAction(objTableModel);
-        }
-
-        // ensure that the changes are saved
-        fireObservedStateChange();
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableView.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableView.jwc
deleted file mode 100644
index 29797f1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableView.jwc
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-    "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-    "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.table.components.TableView" 
-    allow-body="yes" allow-informal-parameters="yes">
-    
-    <description>
-        The main lower-level Table component.
-        This component should wrap all other lower-level Table components such as 
-        TablePages and TableRows, as it provides the data they use.
-    </description>
-    
-    <parameter name="tableModel" property="tableModelValue">
-        <description>
-            The model describing the data to be presented by the table components.
-            This parameter is optional, but either the 'tableModel' or both
-            'source' and 'columns' parameters must be provided.
-        </description>
-    </parameter>
-    
-    <parameter name="source">
-        <description>
-            The data to be displayed by the component. This parameter is available as
-            an alternative to tableModel and must be used in combination with the
-            'columns' parameter. 
-            The parameter must be an array of values, a collection, an iterator, 
-            or an object implementing the IBasicTableModel interface.
-        </description>
-    </parameter>
-    
-    <parameter name="columns">
-        <description>
-            The table columns to be displayed. 
-            The parameter must be an array, a list, or an Iterator of ITableColumn objects,
-            an ITableColumnModel, or a String describing the columns (see documentation).
-        </description>
-    </parameter>
-    
-	<parameter name="pageSize">
-        <description>
-            The number of records displayed per page when source/columns are used.
-            The page size is 10 by default.
-        </description>
-    </parameter>
-  
-	<parameter name="initialPage" default-value="0">
-        <description>
-            The initial page to be displayed.
-            This is the first page by default.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortColumn">
-        <description>
-            The id of the column to initially sort the table by.
-            The column is set to null by default, i.e. there is no sorting.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortOrder">
-        <description>
-            The order of the initial sorting.
-            Set this parameter to 'false' to sort in an ascending order
-            and to 'true' to sort in a descending one.
-        </description>
-    </parameter>
-  
-    <parameter name="tableSessionStateManager" default-value="ognl:defaultTableSessionStateManager">
-        <description>
-            The manager defining what part of the table model will be stored in 
-            the session.
-        </description>
-    </parameter>
-    
-    <parameter name="tableSessionStoreManager">
-        <description>
-            The manager defining where the session data will be stored.
-        </description>
-    </parameter>
-    
-    <parameter name="persist" default-value="literal:session"> 
-        <description>
-            Defines how the table state (paging and sorting) will be persisted
-            if no tableSessionStoreManager is defined.
-            The possible values are 'session' (the default), 'client', 'client:page', 
-            and 'client:app'.
-        </description>
-    </parameter>
-    
-    <parameter name="element" default-value="literal:table"> 
-        <description>
-            The tag with which the component will be inserted in the generated content.
-        </description>
-    </parameter>
-    
-    <parameter name="columnSettingsContainer" default-value="container">
-        <description>
-            The component where Block and messages are pulled from when using source/columns.
-        </description>
-    </parameter>
-    
-    <property name="sessionState" persist="session"/>
-    <property name="clientState" persist="client:page"/>
-    <property name="clientAppState" persist="client:app"/>
-    
-    <component id="table" type="Any" inherit-informal-parameters="yes">
-        <binding name="element" value="ognl:element"/>
-        <binding name="id" value="ognl:clientId" />
-    </component>
-    
-    <component id="renderBody" type="RenderBody"/>
-    
-    <inject property="modelSource" object="service:tapestry.contrib.TableColumnModelSource"/>
-    <inject property="columnSource" object="service:tapestry.contrib.TableColumnSource"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableViewSessionStateManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableViewSessionStateManager.java
deleted file mode 100644
index 9f72c73..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/TableViewSessionStateManager.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-/**
- *  Acts like {@link org.apache.tapestry.contrib.table.model.common.FullTableSessionStateManager} 
- *  if the model is provided via the tableModel parameter; 
- *  saves only the model state otherwise. 
- * 
- *  @author mindbridge
- */
-public class TableViewSessionStateManager implements ITableSessionStateManager
-{
-    private TableView m_objView;
-
-    public TableViewSessionStateManager(TableView objView)
-    {
-        m_objView = objView;
-    }
-    
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#getSessionState(org.apache.tapestry.contrib.table.model.ITableModel)
-     */
-    public Serializable getSessionState(ITableModel objModel)
-    {
-        // if the model is provided using the 'tableModel' parameter, 
-        // emulate FullTableSessionStateManager and save everything
-        // (backward compatibility)
-        if (m_objView.getCachedTableModelValue() != null)
-            return (Serializable) objModel;
-            
-        // otherwise save only the state
-        return new SimpleTableState(objModel.getPagingState(), objModel.getSortingState());
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#recreateTableModel(java.io.Serializable)
-     */
-    public ITableModel recreateTableModel(Serializable objState)
-    {
-        // if the state implements ITableModel, return itself
-        // (backward compatibility)
-        if (objState instanceof ITableModel)
-            return (ITableModel) objState;
-            
-        // otherwise have the component re-generate the model using the provided state
-        return m_objView.generateTableModel((SimpleTableState) objState);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.html
deleted file mode 100644
index 4506201..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-
-<span jwcid="condSorted">
-	<table class="tableHeaderTable" >
-	<tr>
-	<td><a jwcid="linkColumn"><span jwcid="insertSortedColumn"/></a></td>
-	<span jwcid="condSort"><td>&nbsp;<span class="tableHeaderImage" jwcid="imageSort" /></td></span>
-	</tr>
-	</table>
-</span>
-
-<span jwcid="condNotSorted">
-	<span jwcid="insertNotSortedColumn"/>
-</span>
-
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.java
deleted file mode 100644
index c774a35..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.java
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components.inserted;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.components.TableColumns;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * A component that renders the default column header. If the current column is
- * sortable, it renders the header as a link. Clicking on the link causes the
- * table to be sorted on that column. Clicking on the link again causes the
- * sorting order to be reversed.
- * 
- * @author mindbridge
- */
-public abstract class SimpleTableColumnComponent extends BaseComponent
-        implements ITableRendererListener, PageDetachListener
-{
-
-    // transient
-    private ITableColumn m_objColumn;
-    private ITableModelSource m_objModelSource;
-
-    public SimpleTableColumnComponent()
-    {
-        init();
-    }
-
-    /**
-     * @see org.apache.tapestry.event.PageDetachListener#pageDetached(PageEvent)
-     */
-    public void pageDetached(PageEvent arg0)
-    {
-        init();
-    }
-
-    private void init()
-    {
-        m_objColumn = null;
-        m_objModelSource = null;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererListener#initializeRenderer(IRequestCycle,
-     *      ITableModelSource, ITableColumn, Object)
-     */
-    public void initializeRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, ITableColumn objColumn, Object objRow)
-    {
-        m_objModelSource = objSource;
-        m_objColumn = objColumn;
-    }
-
-    public ITableModel getTableModel()
-    {
-        return m_objModelSource.getTableModel();
-    }
-
-    public boolean getColumnSorted()
-    {
-        return m_objColumn.getSortable();
-    }
-
-    public String getDisplayName()
-    {
-        if (m_objColumn instanceof SimpleTableColumn)
-        {
-            SimpleTableColumn objSimpleColumn = (SimpleTableColumn) m_objColumn;
-            return objSimpleColumn.getDisplayName();
-        }
-        return m_objColumn.getColumnName();
-    }
-
-    public boolean getIsSorted()
-    {
-        ITableSortingState objSortingState = getTableModel().getSortingState();
-        String strSortColumn = objSortingState.getSortColumn();
-        return m_objColumn.getColumnName().equals(strSortColumn);
-    }
-
-    public IAsset getSortImage()
-    {
-        IAsset objImageAsset;
-
-        IRequestCycle objCycle = getPage().getRequestCycle();
-        ITableSortingState objSortingState = getTableModel().getSortingState();
-        if (objSortingState.getSortOrder() == ITableSortingState.SORT_ASCENDING)
-        {
-            objImageAsset = (IAsset) objCycle
-                    .getAttribute(TableColumns.TABLE_COLUMN_ARROW_UP_ATTRIBUTE);
-            if (objImageAsset == null) objImageAsset = getAsset("sortUp");
-        }
-        else
-        {
-            objImageAsset = (IAsset) objCycle
-                    .getAttribute(TableColumns.TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE);
-            if (objImageAsset == null) objImageAsset = getAsset("sortDown");
-        }
-
-        return objImageAsset;
-    }
-
-    public Object[] getColumnSelectedParameters()
-    {
-        return new Object[] { new ComponentAddress(m_objModelSource),
-                m_objColumn.getColumnName() };
-    }
-
-    public void columnSelected(IRequestCycle objCycle)
-    {
-        Object[] arrArgs = objCycle.getListenerParameters();
-        ComponentAddress objAddr = (ComponentAddress) arrArgs[0];
-        String strColumnName = (String) arrArgs[1];
-
-        ITableModelSource objSource = (ITableModelSource) objAddr
-                .findComponent(objCycle);
-        objSource.storeTableAction(new TableActionColumnSort(strColumnName));
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.jwc
deleted file mode 100644
index 160f11c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.jwc
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.inserted.SimpleTableColumnComponent" 
-	allow-informal-parameters="yes">
-	
-	<description>
-	</description>
-	
-	<component id="condSorted" type="If">
-		<binding name="condition" expression="columnSorted"/>
-        <binding name="renderTag" expression="false" />
-	</component>
-	
-	<component id="condNotSorted" type="Else">
-		<binding name="condition" expression="columnSorted"/>
-		<static-binding name="invert">true</static-binding>
-        <binding name="renderTag" expression="false" />
-	</component>
-	
-	<component id="insertSortedColumn" type="Insert">
-		<binding name="value" expression="displayName"/>
-	</component>
-	
-	<component id="insertNotSortedColumn" type="Insert">
-		<binding name="value" expression="displayName"/>
-	</component>
-	
-	<component id="linkColumn" type="DirectLink">
-		<binding name="listener" expression="listeners.columnSelected"/>
-		<binding name="parameters" expression="columnSelectedParameters"/>
-	</component>
-	
-	<component id="imageSort" type="Image">
-		<binding name="image" expression="sortImage"/>
-	</component>
-	
-	<component id="condSort" type="If">
-		<binding name="condition" expression="isSorted"/>
-        <binding name="renderTag" expression="false" />
-	</component>
-	
-    <private-asset name="sortDown" resource-path="arrow-down.gif"/>
-    <private-asset name="sortUp" resource-path="arrow-up.gif"/>
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.html
deleted file mode 100644
index 9b4701c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="$content$">
-
-<span jwcid="condSorted">
-	<table class="tableHeaderTable">
-	<tr>
-	<td><a jwcid="linkColumn"><span jwcid="insertSortedColumn"/></a></td>
-	<span jwcid="condSort"><td>&nbsp;<span class="tableHeaderImage" jwcid="imageSort" /></td></span>
-	</tr>
-	</table>
-</span>
-
-<span jwcid="condNotSorted">
-	<span jwcid="insertNotSortedColumn"/>
-</span>
-
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.java
deleted file mode 100644
index db5819c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components.inserted;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.components.TableColumns;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-
-/**
- * A component that renders the default column header in a form. If the current
- * column is sortable, it renders the header as a link. Clicking on the link
- * causes the table to be sorted on that column. Clicking on the link again
- * causes the sorting order to be reversed. This component renders links that
- * cause the form to be submitted. This ensures that the updated data in the
- * other form fields is preserved.
- * 
- * @author mindbridge
- */
-public abstract class SimpleTableColumnFormComponent extends BaseComponent
-        implements ITableRendererListener
-{
-
-    public abstract ITableColumn getTableColumn();
-
-    public abstract void setTableColumn(ITableColumn objColumn);
-
-    public abstract ITableModelSource getTableModelSource();
-
-    public abstract void setTableModelSource(ITableModelSource objSource);
-
-    public abstract String getSelectedColumnName();
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererListener#initializeRenderer(IRequestCycle,
-     *      ITableModelSource, ITableColumn, Object)
-     */
-    public void initializeRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, ITableColumn objColumn, Object objRow)
-    {
-        setTableModelSource(objSource);
-        setTableColumn(objColumn);
-    }
-
-    public ITableModel getTableModel()
-    {
-        return getTableModelSource().getTableModel();
-    }
-
-    public boolean getColumnSorted()
-    {
-        return getTableColumn().getSortable();
-    }
-
-    public String getDisplayName()
-    {
-        ITableColumn objColumn = getTableColumn();
-
-        if (objColumn instanceof SimpleTableColumn)
-        {
-            SimpleTableColumn objSimpleColumn = (SimpleTableColumn) objColumn;
-            return objSimpleColumn.getDisplayName();
-        }
-        return objColumn.getColumnName();
-    }
-
-    public boolean getIsSorted()
-    {
-        ITableSortingState objSortingState = getTableModel().getSortingState();
-        String strSortColumn = objSortingState.getSortColumn();
-        return getTableColumn().getColumnName().equals(strSortColumn);
-    }
-
-    public IAsset getSortImage()
-    {
-        IAsset objImageAsset;
-
-        IRequestCycle objCycle = getPage().getRequestCycle();
-        ITableSortingState objSortingState = getTableModel().getSortingState();
-        if (objSortingState.getSortOrder() == ITableSortingState.SORT_ASCENDING)
-        {
-            objImageAsset = (IAsset) objCycle
-                    .getAttribute(TableColumns.TABLE_COLUMN_ARROW_UP_ATTRIBUTE);
-            if (objImageAsset == null) objImageAsset = getAsset("sortUp");
-        }
-        else
-        {
-            objImageAsset = (IAsset) objCycle
-                    .getAttribute(TableColumns.TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE);
-            if (objImageAsset == null) objImageAsset = getAsset("sortDown");
-        }
-
-        return objImageAsset;
-    }
-
-    public void columnSelected(IRequestCycle objCycle)
-    {
-        String strColumnName = getSelectedColumnName();
-        ITableModelSource objSource = getTableModelSource();
-        objSource.storeTableAction(new TableActionColumnSort(strColumnName));
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.jwc
deleted file mode 100644
index b0929d9..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.jwc
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.inserted.SimpleTableColumnFormComponent" 
-	allow-informal-parameters="yes">
-	
-	<description>
-	</description>
-	
-	<property-specification name="tableModelSource" 
-		type="org.apache.tapestry.contrib.table.model.ITableModelSource"
-		initial-value="null"/>
-	
-	<property-specification name="tableColumn" 
-		type="org.apache.tapestry.contrib.table.model.ITableColumn"
-		initial-value="null"/>
-	
-	<property-specification name="selectedColumnName" type="java.lang.String"/>
-	
-	<component id="condSorted" type="If">
-		<binding name="condition" expression="columnSorted"/>
-        <binding name="renderTag" expression="false" />
-	</component>
-	
-	<component id="condNotSorted" type="Else">
-		<binding name="condition" expression="!columnSorted"/>
-        <binding name="renderTag" expression="false" />
-	</component>
-	
-	<component id="insertSortedColumn" type="Insert">
-		<binding name="value" expression="displayName"/>
-	</component>
-	
-	<component id="insertNotSortedColumn" type="Insert">
-		<binding name="value" expression="displayName"/>
-	</component>
-	
-	<component id="linkColumn" type="LinkSubmit">
-		<binding name="listener" expression="listeners.columnSelected"/>
-		<binding name="tag" expression="tableColumn.columnName"/>
-		<binding name="selected" expression="selectedColumnName"/>
-	</component>
-	
-	<component id="imageSort" type="Image">
-		<binding name="image" expression="sortImage"/>
-	</component>
-	
-	<component id="condSort" type="If">
-		<binding name="condition" expression="isSorted"/>
-        <binding name="renderTag" expression="false" />
-	</component>
-	
-    <private-asset name="sortDown" resource-path="arrow-down.gif"/>
-    <private-asset name="sortUp" resource-path="arrow-up.gif"/>
-    
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.html
deleted file mode 100644
index c066abe..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$">
-
-	<span jwcid="tableColumnComponent"/>
-	<span jwcid="tableColumnFormComponent"/>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.page b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.page
deleted file mode 100644
index 13fb177..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-	<component id="tableColumnComponent" type="SimpleTableColumnComponent"/>
-	<component id="tableColumnFormComponent" type="SimpleTableColumnFormComponent"/>
-
-</page-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortImage.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortImage.html
deleted file mode 100644
index 74d84d2..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortImage.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<html jwcid="$content$"><span jwcid="condSort"><img jwcid="imageSort" /></span></html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortImage.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortImage.java
deleted file mode 100644
index 165b2b1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortImage.java
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components.inserted;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.contrib.table.components.Table;
-import org.apache.tapestry.contrib.table.components.TableColumns;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-
-/**
- * A component that renders the proper sort image for the current column - to be 
- * used with contrib:Table when customizing a column's header.
- * 
- * @author Andreas Andreou
- */
-public abstract class SimpleTableColumnSortImage extends BaseComponent
-        implements PageDetachListener, ITableRendererListener
-{
-    // transient
-    private ITableModelSource m_objModelSource;
-    private ITableColumn m_objColumn;
-    
-    public SimpleTableColumnSortImage()
-    {
-        init();
-    }
-
-    public abstract Table getTable();
-    
-    /**
-     * @see org.apache.tapestry.event.PageDetachListener#pageDetached(PageEvent)
-     */
-    public void pageDetached(PageEvent arg0)
-    {
-        init();
-    }
-
-    private void init()
-    {
-        m_objModelSource = null;
-        m_objColumn = null;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererListener#initializeRenderer(IRequestCycle,
-     *      ITableModelSource, ITableColumn, Object)
-     */
-    public void initializeRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, ITableColumn objColumn, Object objRow)
-    {
-        m_objModelSource = objSource;
-        m_objColumn = objColumn;
-    }
-    
-     public void prepareForRender(IRequestCycle cycle)
-     {         
-         if (getTable()==null)
-            throw Tapestry.createRequiredParameterException(this, "table");
-         
-         m_objModelSource = getTable();
-         m_objColumn = getTable().getTableColumn();
-                  
-     }
-         
-
-    public ITableModel getTableModel()
-    {
-        return m_objModelSource.getTableModel();
-    }
-
-    public IAsset getSortImage()
-    {
-        IAsset objImageAsset;
-
-        IRequestCycle objCycle = getPage().getRequestCycle();
-        ITableSortingState objSortingState = getTableModel().getSortingState();
-        if (objSortingState.getSortOrder() == ITableSortingState.SORT_ASCENDING)
-        {
-            objImageAsset = (IAsset) objCycle
-                    .getAttribute(TableColumns.TABLE_COLUMN_ARROW_UP_ATTRIBUTE);
-            if (objImageAsset == null) objImageAsset = getAsset("sortUp");
-        }
-        else
-        {
-            objImageAsset = (IAsset) objCycle
-                    .getAttribute(TableColumns.TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE);
-            if (objImageAsset == null) objImageAsset = getAsset("sortDown");
-        }
-
-        return objImageAsset;
-    }
-    
-    public boolean getIsSorted()
-    {
-        ITableSortingState objSortingState = getTableModel().getSortingState();
-        String strSortColumn = objSortingState.getSortColumn();
-        return m_objColumn.getColumnName().equals(strSortColumn);
-    }    
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortImage.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortImage.jwc
deleted file mode 100644
index c16e37f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortImage.jwc
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.inserted.SimpleTableColumnSortImage">
-	
-    <description>
-        Component that displays the correct sort image for the current column.
-        No image is shown if the current column isn't the one sorted.
-    </description>
-    
-    <parameter name="table" required="true">
-        <description>The related table component</description>
-    </parameter>    
-
-    <component id="imageSort" type="Image" inherit-informal-parameters="true">
-        <binding name="image" value="sortImage"/>
-    </component>
-    
-    <component id="condSort" type="If">
-        <binding name="condition" value="isSorted"/>
-        <binding name="renderTag" value="false" />
-    </component>    
-	
-    <asset name="sortDown" path="arrow-down.gif"/>
-    <asset name="sortUp" path="arrow-up.gif"/>
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortLink.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortLink.html
deleted file mode 100644
index 233d9ec..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortLink.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<span jwcid="$content$"><a jwcid="linkColumn"><span jwcid="@RenderBody"/></a></span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortLink.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortLink.java
deleted file mode 100644
index 514d788..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortLink.java
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components.inserted;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.contrib.table.components.Table;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * A component that renders a sorting link - to be used with contrib:Table when 
- * customizing a column's header.
- * 
- * 
- * @author andyhot
- */
-public abstract class SimpleTableColumnSortLink extends BaseComponent
-        implements ITableRendererListener, PageDetachListener
-{
-    // transient
-    private ITableColumn m_objColumn;
-    private ITableModelSource m_objModelSource;
-
-    public SimpleTableColumnSortLink()
-    {
-        init();
-    }
-
-    public abstract Table getTable();
-    
-    /**
-     * @see org.apache.tapestry.event.PageDetachListener#pageDetached(PageEvent)
-     */
-    public void pageDetached(PageEvent arg0)
-    {
-        init();
-    }
-
-    private void init()
-    {
-        m_objColumn = null;
-        m_objModelSource = null;
-    }
-    
-     public void prepareForRender(IRequestCycle cycle)
-     {
-         if (getTable()==null)
-            throw Tapestry.createRequiredParameterException(this, "table");
-         m_objModelSource = getTable();
-         m_objColumn = getTable().getTableColumn();         
-     }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererListener#initializeRenderer(IRequestCycle,
-     *      ITableModelSource, ITableColumn, Object)
-     */
-    public void initializeRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, ITableColumn objColumn, Object objRow)
-    {
-        m_objModelSource = objSource;
-        m_objColumn = objColumn;
-    }
-
-    public Object[] getColumnSelectedParameters()
-    {
-        return new Object[] { new ComponentAddress(m_objModelSource),
-                m_objColumn.getColumnName() };
-    }
-
-    public void columnSelected(IRequestCycle objCycle)
-    {
-        Object[] arrArgs = objCycle.getListenerParameters();
-        ComponentAddress objAddr = (ComponentAddress) arrArgs[0];
-        String strColumnName = (String) arrArgs[1];
-
-        ITableModelSource objSource = (ITableModelSource) objAddr
-                .findComponent(objCycle);
-        objSource.storeTableAction(new TableActionColumnSort(strColumnName));
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortLink.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortLink.jwc
deleted file mode 100644
index 501276a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnSortLink.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.inserted.SimpleTableColumnSortLink">
-	
-	<description>
-            Renders a link that will cause the current column to sort.
-	</description>
-        
-        <parameter name="table" required="true">
-            <description>The related table component</description>
-        </parameter>
-	
-	<component id="linkColumn" type="DirectLink" inherit-informal-parameters="true">
-		<binding name="listener" value="listener:columnSelected"/>
-		<binding name="parameters" value="columnSelectedParameters"/>
-        </component>
-            
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/TableActionColumnSort.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/TableActionColumnSort.java
deleted file mode 100644
index 861a13c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/TableActionColumnSort.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-package org.apache.tapestry.contrib.table.components.inserted;

-

-import org.apache.tapestry.contrib.table.model.ITableAction;

-import org.apache.tapestry.contrib.table.model.ITableModel;

-import org.apache.tapestry.contrib.table.model.ITableSortingState;

-

-

-/**

- * <p>A table action that configures the table sorting to use a given column</p>.

- *

- * @author teo

- */

-public class TableActionColumnSort implements ITableAction

-{

-    private String m_strColumnName;

-    

-    public TableActionColumnSort(String name)

-    {

-        m_strColumnName = name;

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    public void executeTableAction(ITableModel objTableModel)

-    {

-        ITableSortingState objState = objTableModel.getSortingState();

-        if (m_strColumnName.equals(objState.getSortColumn()))

-            objState.setSortColumn(m_strColumnName, !objState.getSortOrder());

-        else objState.setSortColumn(m_strColumnName, ITableSortingState.SORT_ASCENDING);

-    }

-}

diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/arrow-down.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/arrow-down.gif
deleted file mode 100644
index d9339a6..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/arrow-down.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/arrow-up.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/arrow-up.gif
deleted file mode 100644
index b70a479..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/arrow-up.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/package.html
deleted file mode 100644
index 1643665..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/inserted/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Table components that are dynamically inserted.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/package.html
deleted file mode 100644
index 274abba..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/components/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Components that make up the core of the tapestry contrib's Table component. The individual
-components, like TableView/TableRows/etc are composed into larger groupings to make the table
-component.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/CTableDataModelEvent.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/CTableDataModelEvent.java
deleted file mode 100644
index d89ac26..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/CTableDataModelEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * @author mindbridge
- *
- */
-public class CTableDataModelEvent
-{
-    public CTableDataModelEvent() {
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IAdvancedTableColumn.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IAdvancedTableColumn.java
deleted file mode 100644
index 98e1083..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IAdvancedTableColumn.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import org.apache.tapestry.IComponent;
-
-/**
- * 
- * @author hls
- */
-public interface IAdvancedTableColumn extends ITableColumn
-{
-
-    ITableRendererSource getColumnRendererSource();
-
-    void setColumnRendererSource(ITableRendererSource columnRendererSource);
-
-    ITableRendererSource getValueRendererSource();
-
-    void setValueRendererSource(ITableRendererSource valueRendererSource);
-
-    void loadSettings(IComponent objSettingsContainer);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IAdvancedTableColumnSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IAdvancedTableColumnSource.java
deleted file mode 100644
index c177bf8..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IAdvancedTableColumnSource.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/*
- * Created on Jun 4, 2005
- */
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * 
- * @author mb
- */
-public interface IAdvancedTableColumnSource
-{
-
-    IAdvancedTableColumn generateTableColumn(String strName,
-            String strDisplayName, boolean bSortable, String strExpression);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IBasicTableModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IBasicTableModel.java
deleted file mode 100644
index ea0f1ed..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IBasicTableModel.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.util.Iterator;
-
-/**
- * A simplified version of the table model that concerns itself only with
- * providing the data on the current page. 
- * 
- * @author mindbridge
- * @since 3.0
- */
-public interface IBasicTableModel
-{
-    /**
-     *  Returns the number of all records.
-     *  @return the number of all rows
-     **/
-    int getRowCount();
-
-    /** 
-     *  Returns the rows on the current page.
-     *  @param nFirst the index of the first item to be dispayed
-     *  @param nPageSize the number of items to be displayed
-     *  @param objSortColumn the column to sort by or null if there is no sorting
-     *  @param bSortOrder determines the sorting order (ascending or descending)
-     **/
-    Iterator getCurrentPageRows(int nFirst, int nPageSize, ITableColumn objSortColumn, boolean bSortOrder);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IFullTableModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IFullTableModel.java
deleted file mode 100644
index 4537adc..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IFullTableModel.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.util.Iterator;
-
-/**
- * An extension of ITableModel that provides the ability to get the full
- * list of row objects, rather than just the displayed ones.
- * 
- * @author mb
- */
-public interface IFullTableModel extends ITableModel {
-    /**
-     * Iterates over all of the rows in the model.
-     * 
-     * @return Iterator the iterator for access to the data
-     */
-    Iterator getRows();
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IPrimaryKeyConvertor.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IPrimaryKeyConvertor.java
deleted file mode 100644
index de7eb59..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/IPrimaryKeyConvertor.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * An interface for converting an object to its primary key and back. 
- * Typically used to determine how to store a given object as a hidden 
- * value when rendering a form.
- * 
- * @author mb
- * @since 3.0
- */
-public interface IPrimaryKeyConvertor
-{
-    /**
-     * Gets the serializable primary key of the given value.
-     * 
-     * @param objValue the value for which a primary key needs to be extracted
-     * @return the serializable primary key of the value
-     */
-    Object getPrimaryKey(Object objValue);
-    
-    /**
-     * Gets the value corresponding the given primary key .
-     *  
-     * @param objPrimaryKey the primary key for which a value needs to be generated
-     * @return the generated value corresponding to the given primary key
-     */
-    Object getValue(Object objPrimaryKey); 
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableAction.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableAction.java
deleted file mode 100644
index 26796f9..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableAction.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2004, 2005, 2006 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.contrib.table.model;

-

-

-/**

- * <p>A Table action that needs to be executed at a later time. 

- * The action may be sorting a given column, or it may be selecting a given page</p>

- * <ul>

- * <li></li> 

- * </ul>

- *

- * @author teo

- * @since 4.1

- */

-public interface ITableAction

-{

-    /**

-     * Executes the desired action.

-     * 

-     * @param objTableModel the table model on which the action should be executed

-     */

-    void executeTableAction(ITableModel objTableModel);

-}

diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableColumn.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableColumn.java
deleted file mode 100644
index 7af51b3..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableColumn.java
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.util.Comparator;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The interface defining a table column. A column is responsible for presenting
- * a particular part of the data from the objects in the table. This is done via
- * the getValueRender() method. A column may be sortable, in which case it
- * defines the way in which the objects in the table must be sorted by providing
- * a Comparator.
- * 
- * @author mindbridge
- */
-public interface ITableColumn
-{
-
-    /**
-     * Method getColumnName provides the name of the column. The column name
-     * must be unique and is generally used for the identification of the
-     * column. It does not have to be the same as the display name via which the
-     * column is identified to the user (see the getColumnRender() method).
-     * 
-     * @return String the name of the column
-     */
-    String getColumnName();
-
-    /**
-     * Method getSortable declares whether the column allows sorting. If the
-     * column allows sorting, it must also return a valid Comparator via the
-     * getComparator() method.
-     * 
-     * @return boolean whether the column is sortable or not
-     */
-    boolean getSortable();
-
-    /**
-     * Method getComparator returns the Comparator to be used to sort the data
-     * in the table according to this column. The Comparator must accept two
-     * different rows, compare them according to this column, and return the
-     * appropriate value.
-     * 
-     * @return Comparator the Comparator used to sort the table data
-     */
-    Comparator getComparator();
-
-    /**
-     * Method getColumnRenderer provides a renderer that takes care of rendering
-     * the column in the table header. If the column is sortable, the renderer
-     * may provide a mechanism to sort the table in an ascending or descending
-     * manner.
-     * 
-     * @param objCycle
-     *            the current request cycle
-     * @param objSource
-     *            a component that can provide the table model (typically
-     *            TableView)
-     * @return IRender the renderer to present the column header
-     */
-    IRender getColumnRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource);
-
-    /**
-     * Method getValueRenderer provides a renderer for presenting the value of a
-     * particular row in the current column.
-     * 
-     * @param objCycle
-     *            the current request cycle
-     * @param objSource
-     *            a component that can provide the table model (typically
-     *            TableView)
-     * @param objRow
-     *            the row data
-     * @return IRender the renderer to present the value of the row in this
-     *         column
-     */
-    IRender getValueRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, Object objRow);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableColumnModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableColumnModel.java
deleted file mode 100644
index 73908d3..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableColumnModel.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.util.Iterator;
-
-/**
- * Defines a list model of ITableColumn objects.
- * 
- * @author mindbridge
- */
-public interface ITableColumnModel
-{
-
-    /**
-     * Method getColumnCount.
-     * 
-     * @return int the number of columns in the model
-     */
-    int getColumnCount();
-
-    /**
-     * Method getColumn.
-     * 
-     * @param strName
-     *            the name of the requested column
-     * @return ITableColumn the column with the given name. null if no such
-     *         column exists.
-     */
-    ITableColumn getColumn(String strName);
-
-    /**
-     * Method getColumns.
-     * 
-     * @return Iterator an iterator of all columns in the model
-     */
-    Iterator getColumns();
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableDataModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableDataModel.java
deleted file mode 100644
index e5b66a3..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableDataModel.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.util.Iterator;
-
-/**
- * A model of the table's data This model need not be used. Implementations may
- * choose to access data via an abstraction.
- * 
- * @author mindbridge
- */
-public interface ITableDataModel
-{
-
-    /**
-     * Method getRowCount.
-     * 
-     * @return int the number of rows in the model
-     */
-    int getRowCount();
-
-    /**
-     * Iterates over all of the rows in the model.
-     * 
-     * @return Iterator the iterator for access to the data
-     */
-    Iterator getRows();
-
-    /**
-     * Method addTableDataModelListener Adds a listener that is notified when
-     * the data in the model is changed.
-     * 
-     * @param objListener
-     *            the listener to add
-     */
-    void addTableDataModelListener(ITableDataModelListener objListener);
-
-    /**
-     * Method removeTableDataModelListener. Removes a listener that is notified
-     * when the data in the model is changed
-     * 
-     * @param objListener
-     *            the listener to remove
-     */
-    void removeTableDataModelListener(ITableDataModelListener objListener);
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableDataModelListener.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableDataModelListener.java
deleted file mode 100644
index fcf40a0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableDataModelListener.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * @author mindbridge
- *
- */
-public interface ITableDataModelListener
-{
-    void tableDataChanged(CTableDataModelEvent objEvent);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableModel.java
deleted file mode 100644
index 8d5caa2..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableModel.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.util.Iterator;
-
-/**
- * The main interface defining the abstraction containing the table data and
- * state.
- * 
- * @author mindbridge
- */
-public interface ITableModel
-{
-
-    /**
-     * Method getColumnModel.
-     * 
-     * @return ITableColumnModel the column model of the table
-     */
-    ITableColumnModel getColumnModel();
-
-    /**
-     * Method getSortingState.
-     * 
-     * @return ITableSortingState the sorting state of the table
-     */
-    ITableSortingState getSortingState();
-
-    /**
-     * Method getPagingState.
-     * 
-     * @return ITablePagingState the paging state of the table
-     */
-    ITablePagingState getPagingState();
-
-    /**
-     * Method getPageCount.
-     * 
-     * @return int the number of pages this table would have given the current
-     *         data and paging state
-     */
-    int getPageCount();
-
-    /**
-     * Method getCurrentPageRows.
-     * 
-     * @return Iterator the rows in the current table page given the current
-     *         data, sorting, and paging state
-     */
-    Iterator getCurrentPageRows();
-
-    /**
-     * Returns the total number of rows / values this model is managing.
-     *
-     * @return The total number of rows - if known.
-     */
-    int getRowCount();
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableModelSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableModelSource.java
deleted file mode 100644
index 2199b4e..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableModelSource.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import org.apache.tapestry.IComponent;
-
-/**
- * A Tapestry component that provides the current table model. This interface is
- * used for obtaining the table model source by components wrapped by it, as
- * well as by external renderers, such as those provided by the column
- * implementations
- * 
- * @author mindbridge
- */
-public interface ITableModelSource extends IComponent
-{
-
-    String TABLE_MODEL_SOURCE_ATTRIBUTE = "org.apache.tapestry.contrib.table.model.ITableModelSource";
-    
-    /**
-     * Returns the table model currently used.
-     * 
-     * @return ITableModel the current table model
-     */
-    ITableModel getTableModel();
-
-    /**
-     * Notifies the model source that the model state has changed, and that it
-     * should consider saving it.
-     * <p>
-     * This method was added to allow using the table within a Block when the
-     * pageBeginRender() listener of the implementation will not be called and
-     * automatic state storage will therefore be hard to implement.
-     */
-    void fireObservedStateChange();
-
-    /**
-     * Stores the provided table action.
-     *
-     * @param action
-     *          The action to store.
-     */
-    void storeTableAction(ITableAction action);
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITablePagingState.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITablePagingState.java
deleted file mode 100644
index dccdcf7..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITablePagingState.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * An interface defining the management of the table's paging state.
- * 
- * @author mindbridge
- */
-public interface ITablePagingState
-{
-
-    /**
-     * Method getPageSize provides the size of a page in a number of records.
-     * This value may be meaningless if the model uses a different method for
-     * pagination.
-     * 
-     * @return int the current page size
-     */
-    int getPageSize();
-
-    /**
-     * Method setPageSize updates the size of a page in a number of records.
-     * This value may be meaningless if the model uses a different method for
-     * pagination.
-     * 
-     * @param nPageSize
-     *            the new page size
-     */
-    void setPageSize(int nPageSize);
-
-    /**
-     * Gets the currently selected page. The page number is counted from 0.
-     * 
-     * @return int the current active page
-     */
-    int getCurrentPage();
-
-    /**
-     * Sets the newly selected page. The page number is counted from 0.
-     * 
-     * @param nPage
-     *            the new active page
-     */
-    void setCurrentPage(int nPage);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableRendererListener.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableRendererListener.java
deleted file mode 100644
index 6ab1045..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableRendererListener.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn
- * @author mindbridge
- * @since 2.3
- */
-public interface ITableRendererListener extends IComponent
-{
-
-    void initializeRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, ITableColumn objColumn, Object objRow);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableRendererSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableRendererSource.java
deleted file mode 100644
index b966343..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableRendererSource.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * This interface provides a renderer to present the data in a table column. It
- * is usually used by the
- * {@link org.apache.tapestry.contrib.table.model.ITableColumn} implementations
- * via aggregation.
- * 
- * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn
- * @author mindbridge
- * @since 2.3
- */
-public interface ITableRendererSource extends Serializable
-{
-
-    /**
-     * Returns a renderer to present the data of the row in the given column.
-     * <p>
-     * This method can also be used to return a renderer to present the heading
-     * of the column. In such a case the row passed would be null.
-     * 
-     * @see org.apache.tapestry.contrib.table.model.ITableColumn#getValueRenderer(IRequestCycle,
-     *      ITableModelSource, Object)
-     */
-    IRender getRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, ITableColumn objColumn, Object objRow);
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableRowSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableRowSource.java
deleted file mode 100644
index f6fc76a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableRowSource.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * A Tapestry component that provides the current row value. This interface is
- * used for obtaining the row source by components wrapped by the row source
- * 
- * @author mindbridge
- */
-public interface ITableRowSource
-{
-
-    String TABLE_ROW_SOURCE_ATTRIBUTE = "org.apache.tapestry.contrib.table.model.ITableRowSource";
-
-    /**
-     * Method getTableRow.
-     * 
-     * @return Object the current table row object
-     */
-    Object getTableRow();
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.java
deleted file mode 100644
index 5437ef1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.io.Serializable;
-
-/**
- * An interface responsible for determining <b>what</b> data would be stored in
- * the session between requests. It could be only the table state, it could be
- * entire table including the data, or it could be nothing at all. It is all
- * determined by the implemention of this interface.
- * 
- * @author mindbridge
- */
-public interface ITableSessionStateManager
-{
-
-    /**
-     * Method getSessionState extracts the "persistent" portion of the table
-     * model.
-     * 
-     * @param objModel
-     *            the table model to extract the session state from
-     * @return Object the session state to be saved between the requests
-     */
-    Serializable getSessionState(ITableModel objModel);
-
-    /**
-     * Method recreateTableModel recreates a table model from the saved session
-     * state.
-     * 
-     * @param objState
-     *            the saved session state
-     * @return ITableModel the recreated table model
-     */
-    ITableModel recreateTableModel(Serializable objState);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.java
deleted file mode 100644
index 2e0c86f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * An interface responsible for determining <b>where</b> the session state will
- * be saved between requests.
- * 
- * @author mindbridge
- */
-public interface ITableSessionStoreManager
-{
-
-    /**
-     * Method saveState saves the session state.
-     * 
-     * @param objCycle
-     *            the current request cycle
-     * @param objState
-     *            the session state to be saved
-     */
-    void saveState(IRequestCycle objCycle, Serializable objState);
-
-    /**
-     * Method loadState loads the session state.
-     * 
-     * @param objCycle
-     *            the current request cycle
-     * @return Object the loaded sessions state
-     */
-    Serializable loadState(IRequestCycle objCycle);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableSortingState.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableSortingState.java
deleted file mode 100644
index 7864eb3..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableSortingState.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * An interface defining the management of the table's sorting state.
- * 
- * @author mindbridge
- */
-public interface ITableSortingState
-{
-
-    boolean SORT_ASCENDING = false;
-    boolean SORT_DESCENDING = true;
-
-    /**
-     * Method getSortColumn defines the column that the table should be sorted
-     * upon.
-     * 
-     * @return String the name of the sorting column or null if the table is not
-     *         sorted
-     */
-    String getSortColumn();
-
-    /**
-     * Method getSortOrder defines the direction of the table sorting .
-     * 
-     * @return boolean the sorting order (see constants)
-     */
-    boolean getSortOrder();
-
-    /**
-     * Method setSortColumn updates the table sorting column and order.
-     * 
-     * @param strName
-     *            the name of the column to sort by
-     * @param bOrder
-     *            the sorting order (see constants)
-     */
-    void setSortColumn(String strName, boolean bOrder);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/AbstractTableColumn.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/AbstractTableColumn.java
deleted file mode 100644
index eec88db..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/AbstractTableColumn.java
+++ /dev/null
@@ -1,260 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.Block;
-import org.apache.tapestry.contrib.table.model.IAdvancedTableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.valid.RenderString;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * A base implementation of
- * {@link org.apache.tapestry.contrib.table.model.ITableColumn} that allows
- * renderers to be set via aggregation.
- *
- * @see org.apache.tapestry.contrib.table.model.ITableRendererSource
- * @author mindbridge
- * @since 2.3
- */
-public class AbstractTableColumn implements IAdvancedTableColumn, Serializable
-{
-    /**
-     * The suffix of the name of the Block that will be used as the column
-     * renderer for this column.
-     */
-    public static final String COLUMN_RENDERER_BLOCK_SUFFIX = "ColumnHeader";
-
-    /**
-     * The suffix of the name of the Block that will be used as the value
-     * renderer for this column.
-     */
-    public static final String VALUE_RENDERER_BLOCK_SUFFIX = "ColumnValue";
-
-    private static final long serialVersionUID = 1L;
-
-    private String m_strColumnName;
-    private boolean m_bSortable;
-    private Comparator m_objComparator;
-
-    private ITableRendererSource m_objColumnRendererSource;
-    private ITableRendererSource m_objValueRendererSource;
-
-    public AbstractTableColumn()
-    {
-        this("", false, null);
-    }
-
-    public AbstractTableColumn(String strColumnName, boolean bSortable,
-                               Comparator objComparator)
-    {
-        this(strColumnName, bSortable, objComparator, null, null);
-    }
-
-    public AbstractTableColumn(String strColumnName, boolean bSortable,
-                               Comparator objComparator,
-                               ITableRendererSource objColumnRendererSource,
-                               ITableRendererSource objValueRendererSource)
-    {
-        setColumnName(strColumnName);
-        setSortable(bSortable);
-        setComparator(objComparator);
-        setColumnRendererSource(objColumnRendererSource);
-        setValueRendererSource(objValueRendererSource);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableColumn#getColumnName()
-     */
-    public String getColumnName()
-    {
-        return m_strColumnName;
-    }
-
-    /**
-     * Sets the columnName.
-     *
-     * @param columnName
-     *            The columnName to set
-     */
-    public void setColumnName(String columnName)
-    {
-        if (columnName != null)
-            columnName = columnName.replace('.', '_');
-        
-        m_strColumnName = columnName;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableColumn#getSortable()
-     */
-    public boolean getSortable()
-    {
-        return m_bSortable;
-    }
-
-    /**
-     * Sets whether the column is sortable.
-     *
-     * @param sortable
-     *            The sortable flag to set
-     */
-    public void setSortable(boolean sortable)
-    {
-        m_bSortable = sortable;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableColumn#getComparator()
-     */
-    public Comparator getComparator()
-    {
-        return m_objComparator;
-    }
-
-    /**
-     * Sets the comparator.
-     *
-     * @param comparator
-     *            The comparator to set
-     */
-    public void setComparator(Comparator comparator)
-    {
-        m_objComparator = comparator;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableColumn#getColumnRenderer(IRequestCycle,
-     *      ITableModelSource)
-     */
-    public IRender getColumnRenderer(IRequestCycle objCycle,
-                                     ITableModelSource objSource)
-    {
-        ITableRendererSource objRendererSource = getColumnRendererSource();
-
-        if (objRendererSource == null)
-        {
-            // log error
-            return new RenderString("");
-        }
-
-        return objRendererSource.getRenderer(objCycle, objSource, this, null);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableColumn#getValueRenderer(IRequestCycle,
-     *      ITableModelSource, Object)
-     */
-    public IRender getValueRenderer(IRequestCycle objCycle,
-                                    ITableModelSource objSource, Object objRow)
-    {
-        ITableRendererSource objRendererSource = getValueRendererSource();
-
-        if (objRendererSource == null)
-        {
-            // log error
-            return new RenderString("");
-        }
-
-        return objRendererSource.getRenderer(objCycle, objSource, this, objRow);
-    }
-
-    /**
-     * Returns the columnRendererSource.
-     *
-     * @return ITableColumnRendererSource
-     */
-    public ITableRendererSource getColumnRendererSource()
-    {
-        return m_objColumnRendererSource;
-    }
-
-    /**
-     * Sets the columnRendererSource.
-     *
-     * @param columnRendererSource
-     *            The columnRendererSource to set
-     */
-    public void setColumnRendererSource(
-      ITableRendererSource columnRendererSource)
-    {
-        m_objColumnRendererSource = columnRendererSource;
-    }
-
-    /**
-     * Returns the valueRendererSource.
-     *
-     * @return the valueRendererSource of this column
-     */
-    public ITableRendererSource getValueRendererSource()
-    {
-        return m_objValueRendererSource;
-    }
-
-    /**
-     * Sets the valueRendererSource.
-     *
-     * @param valueRendererSource
-     *            The valueRendererSource to set
-     */
-    public void setValueRendererSource(ITableRendererSource valueRendererSource)
-    {
-        m_objValueRendererSource = valueRendererSource;
-    }
-
-    /**
-     * Use the column name to get the column and value renderer sources from the
-     * provided component. Use the column and value renderer sources for all
-     * columns if necessary.
-     *
-     * @param container
-     *            the component from which to get the settings
-     */
-    public void loadSettings(IComponent container)
-    {
-        IComponent objColumnRendererSource =
-          (IComponent) container.getComponents().get(getColumnName() + COLUMN_RENDERER_BLOCK_SUFFIX);
-
-        if (objColumnRendererSource == null)
-            objColumnRendererSource = (IComponent) container.getComponents().get(COLUMN_RENDERER_BLOCK_SUFFIX);
-
-        if (objColumnRendererSource != null
-            && objColumnRendererSource instanceof Block)
-        {
-            setColumnRendererSource(new BlockTableRendererSource((Block) objColumnRendererSource));
-        }
-
-        IComponent objValueRendererSource =
-          (IComponent) container.getComponents().get(getColumnName() + VALUE_RENDERER_BLOCK_SUFFIX);
-
-        if (objValueRendererSource == null)
-        {
-            objValueRendererSource = (IComponent) container.getComponents().get(VALUE_RENDERER_BLOCK_SUFFIX);
-        }
-
-        if (objValueRendererSource != null
-            && objValueRendererSource instanceof Block)
-        {
-            setValueRendererSource(new BlockTableRendererSource((Block) objValueRendererSource));
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/AbstractTableDataModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/AbstractTableDataModel.java
deleted file mode 100644
index 542c647..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/AbstractTableDataModel.java
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.tapestry.contrib.table.model.CTableDataModelEvent;
-import org.apache.tapestry.contrib.table.model.ITableDataModel;
-import org.apache.tapestry.contrib.table.model.ITableDataModelListener;
-
-/**
- * An implementation of the listener support in the ITableDataModel interface.
- * 
- * @author mindbridge
- */
-public abstract class AbstractTableDataModel implements ITableDataModel
-{
-
-    private List m_arrListeners;
-
-    public AbstractTableDataModel()
-    {
-        m_arrListeners = new ArrayList();
-    }
-
-    /**
-     * Method fireTableDataModelEvent. Fires a change event to all listeners.
-     * 
-     * @param objEvent
-     *            the event to pass to the listeners
-     */
-    protected void fireTableDataModelEvent(CTableDataModelEvent objEvent)
-    {
-        synchronized(m_arrListeners)
-        {
-            List arrEmptyReferences = null;
-
-            for(Iterator it = m_arrListeners.iterator(); it.hasNext();)
-            {
-                WeakReference objRef = (WeakReference) it.next();
-                ITableDataModelListener objListener = (ITableDataModelListener) objRef
-                        .get();
-                if (objListener != null)
-                    objListener.tableDataChanged(objEvent);
-                else
-                {
-                    if (arrEmptyReferences == null)
-                        arrEmptyReferences = new ArrayList();
-                    arrEmptyReferences.add(objRef);
-                }
-            }
-
-            if (arrEmptyReferences != null)
-                m_arrListeners.removeAll(arrEmptyReferences);
-        }
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableDataModel#addTableDataModelListener(ITableDataModelListener) .
-     */
-    public void addTableDataModelListener(ITableDataModelListener objListener)
-    {
-        synchronized(m_arrListeners)
-        {
-            m_arrListeners.add(new WeakReference(objListener));
-        }
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableDataModel#removeTableDataModelListener(ITableDataModelListener) .
-     */
-    public void removeTableDataModelListener(ITableDataModelListener objListener)
-    {
-        synchronized(m_arrListeners)
-        {
-            List arrEmptyReferences = null;
-
-            for(Iterator it = m_arrListeners.iterator(); it.hasNext();)
-            {
-                WeakReference objRef = (WeakReference) it.next();
-                ITableDataModelListener objStoredListener = (ITableDataModelListener) objRef
-                        .get();
-                if (objListener == objStoredListener
-                        || objStoredListener == null)
-                {
-                    if (arrEmptyReferences == null)
-                        arrEmptyReferences = new ArrayList();
-                    arrEmptyReferences.add(objRef);
-                }
-            }
-
-            if (arrEmptyReferences != null)
-                m_arrListeners.removeAll(arrEmptyReferences);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/AbstractTableModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/AbstractTableModel.java
deleted file mode 100644
index f83da3a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/AbstractTableModel.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITablePagingState;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-import java.io.Serializable;
-
-/**
- * A base table model that implements the handling of the model state.
- * Used by most standard ITableModel implementations.
- * 
- * @author mindbridge
- */
-public abstract class AbstractTableModel implements ITableModel, Serializable
-{
-    private SimpleTableState m_objTableState;
-
-    protected AbstractTableModel()
-    {
-        this(new SimpleTableState());
-    }
-
-    protected AbstractTableModel(SimpleTableState objTableState)
-    {
-        m_objTableState = objTableState;
-    }
-    
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModel#getPagingState()
-     */
-    public ITablePagingState getPagingState()
-    {
-        return getState().getPagingState();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModel#getSortingState()
-     */
-    public ITableSortingState getSortingState()
-    {
-        return getState().getSortingState();
-    }
-
-    /**
-     * Returns the tableState.
-     * @return SimpleTableState
-     */
-    public SimpleTableState getState()
-    {
-        return m_objTableState;
-    }
-    
-    public int getPageCount()
-    {
-        int nRowCount = getRowCount();
-        if (nRowCount == 0)
-            return 1;
-
-        int nPageSize = getPagingState().getPageSize();
-        if (nPageSize <= 0)
-            return 1;
-
-        return (nRowCount - 1) / nPageSize + 1;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/ArrayIterator.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/ArrayIterator.java
deleted file mode 100644
index 31dbe86..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/ArrayIterator.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * @author mindbridge
- */
-public class ArrayIterator implements Iterator
-{
-
-    private Object[] m_arrValues;
-    private int m_nFrom;
-    private int m_nTo;
-    private int m_nCurrent;
-
-    public ArrayIterator(Object[] arrValues)
-    {
-        this(arrValues, 0, arrValues.length);
-    }
-
-    public ArrayIterator(Object[] arrValues, int nFrom, int nTo)
-    {
-        m_arrValues = arrValues;
-        m_nFrom = nFrom;
-        m_nTo = nTo;
-
-        if (m_nFrom < 0) m_nFrom = 0;
-        if (m_nTo < m_nFrom) m_nTo = m_nFrom;
-        if (m_nTo > m_arrValues.length) m_nTo = m_arrValues.length;
-
-        m_nCurrent = m_nFrom;
-    }
-
-    /**
-     * @see java.util.Iterator#hasNext() .
-     */
-    public boolean hasNext()
-    {
-        return m_nCurrent < m_nTo;
-    }
-
-    /**
-     * @see java.util.Iterator#next() .
-     */
-    public Object next()
-    {
-        // System.out.println("index: " + m_nCurrent + " size: " +
-        // m_arrValues.length + " to: " + m_nTo);
-        if (!hasNext()) throw new NoSuchElementException();
-        return m_arrValues[m_nCurrent++];
-    }
-
-    /**
-     * @see java.util.Iterator#remove() .
-     */
-    public void remove()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/BasicTableModelWrap.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/BasicTableModelWrap.java
deleted file mode 100644
index e4fede8..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/BasicTableModelWrap.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import org.apache.tapestry.contrib.table.model.IBasicTableModel;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-import java.util.Iterator;
-
-/**
- * @author mindbridge
- */
-public class BasicTableModelWrap extends AbstractTableModel
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private IBasicTableModel m_objBasicTableModel;
-    private ITableColumnModel m_objTableColumnModel;
-
-    public BasicTableModelWrap(IBasicTableModel objBasicTableModel,
-            ITableColumnModel objColumnModel)
-    {
-        this(objBasicTableModel, objColumnModel, new SimpleTableState());
-    }
-
-    public BasicTableModelWrap(IBasicTableModel objBasicTableModel,
-            ITableColumnModel objColumnModel, SimpleTableState objState)
-    {
-        super(objState);
-        m_objBasicTableModel = objBasicTableModel;
-        m_objTableColumnModel = objColumnModel;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModel#getColumnModel()
-     */
-    public ITableColumnModel getColumnModel()
-    {
-        return m_objTableColumnModel;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.common.AbstractTableModel#getRowCount()
-     */
-    public int getRowCount()
-    {
-        return m_objBasicTableModel.getRowCount();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModel#getCurrentPageRows()
-     */
-    public Iterator getCurrentPageRows()
-    {
-        int nPageSize = getPagingState().getPageSize();
-        if (nPageSize <= 0) nPageSize = getRowCount();
-
-        int nCurrentPage = getPagingState().getCurrentPage();
-        int nFrom = nCurrentPage * nPageSize;
-
-        String strSortColumn = getSortingState().getSortColumn();
-        ITableColumn objSortColumn = getColumnModel().getColumn(strSortColumn);
-        boolean bSortOrder = getSortingState().getSortOrder();
-
-        return m_objBasicTableModel.getCurrentPageRows(nFrom, nPageSize,
-                objSortColumn, bSortOrder);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/BlockTableRendererSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/BlockTableRendererSource.java
deleted file mode 100644
index a57c599..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/BlockTableRendererSource.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.Block;
-import org.apache.tapestry.components.BlockRenderer;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author mindbridge
- * @since 2.3
- */
-public class BlockTableRendererSource implements ITableRendererSource
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private ComponentAddress m_objBlockAddress;
-    private ComponentAddress m_objListenerAddress;
-
-    public BlockTableRendererSource(Block objBlock)
-    {
-        this(new ComponentAddress(objBlock));
-    }
-
-    public BlockTableRendererSource(Block objBlock,
-            ITableRendererListener objListener)
-    {
-        this(new ComponentAddress(objBlock), new ComponentAddress(objListener));
-    }
-
-    public BlockTableRendererSource(ComponentAddress objBlockAddress)
-    {
-        this(objBlockAddress, null);
-    }
-
-    public BlockTableRendererSource(ComponentAddress objBlockAddress,
-            ComponentAddress objListenerAddress)
-    {
-        setBlockAddress(objBlockAddress);
-        setListenerAddress(objListenerAddress);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle,
-     *      ITableModelSource, ITableColumn, Object)
-     */
-    public IRender getRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, ITableColumn objColumn, Object objRow)
-    {
-        ComponentAddress objListenerAddress = getListenerAddress();
-        if (objListenerAddress != null)
-        {
-            ITableRendererListener objListener = (ITableRendererListener) objListenerAddress
-                    .findComponent(objCycle);
-            objListener.initializeRenderer(objCycle, objSource, objColumn,
-                    objRow);
-        }
-
-        Block objBlock = (Block) getBlockAddress().findComponent(objCycle);
-        return new BlockRenderer(objBlock);
-    }
-
-    /**
-     * Returns the blockAddress.
-     * 
-     * @return ComponentAddress
-     */
-    public ComponentAddress getBlockAddress()
-    {
-        return m_objBlockAddress;
-    }
-
-    /**
-     * Sets the blockAddress.
-     * 
-     * @param blockAddress
-     *            The blockAddress to set
-     */
-    public void setBlockAddress(ComponentAddress blockAddress)
-    {
-        m_objBlockAddress = blockAddress;
-    }
-
-    /**
-     * Returns the listenerAddress.
-     * 
-     * @return ComponentAddress
-     */
-    public ComponentAddress getListenerAddress()
-    {
-        return m_objListenerAddress;
-    }
-
-    /**
-     * Sets the listenerAddress.
-     * 
-     * @param listenerAddress
-     *            The listenerAddress to set
-     */
-    public void setListenerAddress(ComponentAddress listenerAddress)
-    {
-        m_objListenerAddress = listenerAddress;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/ComponentTableRendererSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/ComponentTableRendererSource.java
deleted file mode 100644
index 71d08c0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/ComponentTableRendererSource.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author mindbridge
- * @since 2.3
- */
-public class ComponentTableRendererSource implements ITableRendererSource
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private ComponentAddress m_objComponentAddress;
-
-    public ComponentTableRendererSource(ITableRendererListener objComponent)
-    {
-        this(new ComponentAddress(objComponent));
-    }
-
-    public ComponentTableRendererSource(ComponentAddress objComponentAddress)
-    {
-        setComponentAddress(objComponentAddress);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle,
-     *      ITableModelSource, ITableColumn, Object)
-     */
-    public IRender getRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, ITableColumn objColumn, Object objRow)
-    {
-        ITableRendererListener objComponent = (ITableRendererListener) getComponentAddress()
-                .findComponent(objCycle);
-
-        objComponent.initializeRenderer(objCycle, objSource, objColumn, objRow);
-
-        return objComponent;
-    }
-
-    /**
-     * Returns the listenerAddress.
-     * 
-     * @return ComponentAddress
-     */
-    public ComponentAddress getComponentAddress()
-    {
-        return m_objComponentAddress;
-    }
-
-    /**
-     * Sets the listenerAddress.
-     * 
-     * @param listenerAddress
-     *            The listenerAddress to set
-     */
-    public void setComponentAddress(ComponentAddress listenerAddress)
-    {
-        m_objComponentAddress = listenerAddress;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/FullTableSessionStateManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/FullTableSessionStateManager.java
deleted file mode 100644
index 4e739d6..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/FullTableSessionStateManager.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
-
-/**
- * A simple ITableSessionStateManager implementation that saves the entire table
- * model into the session.
- * 
- * @author mindbridge
- */
-public class FullTableSessionStateManager implements ITableSessionStateManager
-{
-
-    public static final FullTableSessionStateManager FULL_STATE_MANAGER = new FullTableSessionStateManager();
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#getSessionState(ITableModel)
-     */
-    public Serializable getSessionState(ITableModel objModel)
-    {
-        return (Serializable) objModel;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#recreateTableModel(Serializable)
-     */
-    public ITableModel recreateTableModel(Serializable objState)
-    {
-        return (ITableModel) objState;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/NullTableSessionStateManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/NullTableSessionStateManager.java
deleted file mode 100644
index 06a4b2d..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/NullTableSessionStateManager.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
-
-/**
- * A simple ITableSessionStateManager implementation that saves nothing at all
- * into the session.
- * 
- * @author mindbridge
- */
-public class NullTableSessionStateManager implements ITableSessionStateManager
-{
-
-    public static final NullTableSessionStateManager NULL_STATE_MANAGER = new NullTableSessionStateManager();
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#getSessionState(ITableModel)
-     */
-    public Serializable getSessionState(ITableModel objModel)
-    {
-        return null;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#recreateTableModel(Serializable)
-     */
-    public ITableModel recreateTableModel(Serializable objState)
-    {
-        return null;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/ReverseComparator.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/ReverseComparator.java
deleted file mode 100644
index 91be089..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/ReverseComparator.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.util.Comparator;
-
-/**
- * @author mindbridge
- */
-public class ReverseComparator implements Comparator
-{
-
-    private Comparator m_objComparator;
-
-    public ReverseComparator(Comparator objComparator)
-    {
-        m_objComparator = objComparator;
-    }
-
-    /**
-     * @see java.util.Comparator#compare(Object, Object)
-     */
-    public int compare(Object objValue1, Object objValue2)
-    {
-        return -m_objComparator.compare(objValue1, objValue2);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/package.html
deleted file mode 100644
index 0fcc66f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/common/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Common model classes used in table.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumn.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumn.java
deleted file mode 100644
index f41f3b2..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumn.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.ognl;
-
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-import org.apache.tapestry.services.ExpressionEvaluator;
-
-/**
- * @author mindbridge
- */
-public class ExpressionTableColumn extends SimpleTableColumn
-{
-
-    private static final long serialVersionUID = 1L;
-
-    /** @since 4.0 */
-
-    public ExpressionTableColumn(String strColumnName, String strExpression,
-            ExpressionEvaluator expressionEvaluator)
-    {
-        this(strColumnName, strExpression, false, expressionEvaluator);
-    }
-
-    public ExpressionTableColumn(String strColumnName, String strExpression,
-            boolean bSortable, ExpressionEvaluator expressionEvaluator)
-    {
-        this(strColumnName, strColumnName, strExpression, bSortable,
-                expressionEvaluator);
-    }
-
-    public ExpressionTableColumn(String strColumnName, String strDisplayName,
-            String strExpression, ExpressionEvaluator expressionEvaluator)
-    {
-        this(strColumnName, strDisplayName, strExpression, false,
-                expressionEvaluator);
-    }
-
-    public ExpressionTableColumn(String strColumnName, String strDisplayName,
-            String strExpression, boolean bSortable,
-            ExpressionEvaluator expressionEvaluator
-
-    )
-    {
-        super(strColumnName, strDisplayName, bSortable);
-
-        setEvaluator(new OgnlTableColumnEvaluator(strExpression,
-                expressionEvaluator));
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumnModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumnModel.java
deleted file mode 100644
index a9b9cb6..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumnModel.java
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.ognl;
-
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
-import org.apache.tapestry.services.ExpressionEvaluator;
-
-/**
- * @author mindbridge
- */
-public class ExpressionTableColumnModel extends SimpleTableColumnModel
-{
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Constructs a table column model containting OGNL expression columns. <br>
-     * The data for the columns is provided in the form of a string array, where
-     * the info of each column is stored in two consecutive fields in the array,
-     * hence its size must be even. The expected info is the following:
-     * <ul>
-     * <li>Column Name
-     * <li>OGNL expression
-     * </ul>
-     * 
-     * @param arrColumnInfo
-     *            The information to construct the columns from
-     * @param bSorted
-     *            Whether all columns are sorted or not
-     */
-    public ExpressionTableColumnModel(String[] arrColumnInfo, boolean bSorted,
-            ExpressionEvaluator expressionEvaluator)
-    {
-        this(convertToDetailedArray(arrColumnInfo, bSorted),
-                expressionEvaluator);
-    }
-
-    /**
-     * Constructs a table column model containting OGNL expression columns. <br>
-     * The data for the columns is provided in the form of a string array, where
-     * the info of each column is stored in four consecutive fields in the
-     * array, hence its size must be divisible by 4.<br>
-     * The expected info is the following:
-     * <ul>
-     * <li>Column Name
-     * <li>Display Name
-     * <li>OGNL expression
-     * <li>Sorting of the column. This is either a Boolean, or a String
-     * representation of a boolean.
-     * </ul>
-     * 
-     * @param arrColumnInfo
-     */
-    public ExpressionTableColumnModel(Object[] arrColumnInfo,
-            ExpressionEvaluator expressionEvaluator)
-    {
-        super(convertToColumns(arrColumnInfo, expressionEvaluator));
-    }
-
-    /**
-     * Method convertToDetailedArray.
-     * 
-     * @param arrColumnInfo
-     * @param bSorted
-     * @return Object[]
-     */
-    protected static Object[] convertToDetailedArray(String[] arrColumnInfo,
-            boolean bSorted)
-    {
-        int nColumns = arrColumnInfo.length / 2;
-        int nSize = nColumns * 4;
-        Object[] arrDetailedInfo = new Object[nSize];
-
-        for(int i = 0; i < nColumns; i++)
-        {
-            int nInputBaseIndex = 2 * i;
-            String strColumnName = arrColumnInfo[nInputBaseIndex];
-            String strExpression = arrColumnInfo[nInputBaseIndex + 1];
-
-            int nOutputBaseIndex = 4 * i;
-            arrDetailedInfo[nOutputBaseIndex] = strColumnName;
-            arrDetailedInfo[nOutputBaseIndex + 1] = strColumnName;
-            arrDetailedInfo[nOutputBaseIndex + 2] = strExpression;
-            arrDetailedInfo[nOutputBaseIndex + 3] = bSorted ? Boolean.TRUE
-                    : Boolean.FALSE;
-        }
-
-        return arrDetailedInfo;
-    }
-
-    /**
-     * Method convertToColumns.
-     * 
-     * @param arrDetailedInfo
-     * @return ITableColumn[]
-     */
-    protected static ITableColumn[] convertToColumns(Object[] arrDetailedInfo,
-            ExpressionEvaluator expressionEvaluator)
-    {
-        int nColumns = arrDetailedInfo.length / 4;
-        ITableColumn[] arrColumns = new ITableColumn[nColumns];
-
-        for(int i = 0; i < nColumns; i++)
-        {
-            Object objTempValue;
-            int nBaseIndex = 4 * i;
-
-            String strColumnName = "";
-            objTempValue = arrDetailedInfo[nBaseIndex];
-            if (objTempValue != null) strColumnName = objTempValue.toString();
-
-            String strDisplayName = "";
-            objTempValue = arrDetailedInfo[nBaseIndex + 1];
-            if (objTempValue != null) strDisplayName = objTempValue.toString();
-
-            String strExpression = "";
-            objTempValue = arrDetailedInfo[nBaseIndex + 2];
-            if (objTempValue != null) strExpression = objTempValue.toString();
-
-            boolean bSorted = false;
-            objTempValue = arrDetailedInfo[nBaseIndex + 3];
-            if (objTempValue != null)
-            {
-                if (objTempValue instanceof Boolean)
-                    bSorted = ((Boolean) objTempValue).booleanValue();
-                else bSorted = Boolean.valueOf(objTempValue.toString())
-                        .booleanValue();
-            }
-
-            arrColumns[i] = new ExpressionTableColumn(strColumnName,
-                    strDisplayName, strExpression, bSorted, expressionEvaluator);
-        }
-
-        return arrColumns;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/OgnlTableColumnEvaluator.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/OgnlTableColumnEvaluator.java
deleted file mode 100644
index e9a3a82..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/OgnlTableColumnEvaluator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.ognl;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.simple.ITableColumnEvaluator;
-import org.apache.tapestry.services.ExpressionEvaluator;
-
-/**
- * @author mindbridge
- */
-public class OgnlTableColumnEvaluator implements ITableColumnEvaluator
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private static final Log LOG = LogFactory.getLog(OgnlTableColumnEvaluator.class);
-    
-    /** @since 4.0 */
-
-    private ExpressionEvaluator _expressionEvaluator;
-
-    private String m_strExpression;
-
-    public OgnlTableColumnEvaluator(String strExpression,
-            ExpressionEvaluator expressionEvaluator)
-    {
-        m_strExpression = strExpression;
-        _expressionEvaluator = expressionEvaluator;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.simple.ITableColumnEvaluator#getColumnValue(ITableColumn,
-     *      Object)
-     */
-    public synchronized Object getColumnValue(ITableColumn objColumn,
-            Object objRow)
-    {
-        // If no expression is given, then this is a dummy column. Return
-        // something.
-        if (m_strExpression == null || m_strExpression.equals("")) return "";
-
-        try
-        {
-            return _expressionEvaluator.read(objRow, m_strExpression);
-        }
-        catch (Exception e)
-        {
-            LOG.error("Cannot use column expression '" + m_strExpression
-                    + "' in row", e);
-            return "";
-        }
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/package.html
deleted file mode 100644
index fc1a7ee..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ognl/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Utiltity model classes that are based on working with objects using
-OGNL syntax.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/package.html
deleted file mode 100644
index 88a6aae..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>All of the model interfaces defining the interactions for some of 
-the table component semantics.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/ColumnComparator.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/ColumnComparator.java
deleted file mode 100644
index dc84dfa..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/ColumnComparator.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.util.Comparator;
-
-/**
- * In order to provide more generic behaviour, ITableColumn has no "column
- * value" concept. The comparator it returns compares two table rows, rather
- * than values specific to the column.
- * <p>
- * SimpleTableColumn introduces the concept of "column value" and allows one to
- * extract that "column value" from the row using the getColumnValue() method.
- * In practice comparisons are also typically done between these values rather
- * than the full row objects.
- * <p>
- * This comparator extracts the column values from the rows passed and uses the
- * provided comparator to compare the values. It therefore allows a comparator
- * designed for comparing column values to be quickly wrapped and used as a
- * comparator comparing rows, which is what ITableColumn is expected to return.
- * <p>
- * Example:
- * <p>
- * objColumn.setComparator(new ColumnComparator(objColumn, objBeanComparator));
- * 
- * @author mindbridge
- */
-public class ColumnComparator implements Comparator
-{
-
-    private SimpleTableColumn m_objColumn;
-    private Comparator m_objComparator;
-
-    public ColumnComparator(SimpleTableColumn objColumn,
-            Comparator objComparator)
-    {
-        m_objColumn = objColumn;
-        m_objComparator = objComparator;
-    }
-
-    /**
-     * @see java.util.Comparator#compare(Object, Object)
-     */
-    public int compare(Object objRow1, Object objRow2)
-    {
-        Object objValue1 = m_objColumn.getColumnValue(objRow1);
-        Object objValue2 = m_objColumn.getColumnValue(objRow2);
-
-        return m_objComparator.compare(objValue1, objValue2);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/ITableColumnEvaluator.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/ITableColumnEvaluator.java
deleted file mode 100644
index a472cc5..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/ITableColumnEvaluator.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-
-/**
- * @author mindbridge
- *
- */
-public interface ITableColumnEvaluator extends Serializable
-{
-    Object getColumnValue(ITableColumn objColumn, Object objRow);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleListTableDataModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleListTableDataModel.java
deleted file mode 100644
index 14cae5a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleListTableDataModel.java
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.tapestry.contrib.table.model.CTableDataModelEvent;
-import org.apache.tapestry.contrib.table.model.common.AbstractTableDataModel;
-import org.apache.tapestry.contrib.table.model.common.ArrayIterator;
-
-/**
- * A minimal list implementation of the
- * {@link org.apache.tapestry.contrib.table.model.ITableDataModel} interface.
- * 
- * @author mindbridge
- */
-public class SimpleListTableDataModel extends AbstractTableDataModel implements
-        Serializable
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private List m_arrRows;
-
-    public SimpleListTableDataModel(Object[] arrRows)
-    {
-        this(Arrays.asList(arrRows));
-    }
-
-    public SimpleListTableDataModel(List arrRows)
-    {
-        m_arrRows = arrRows;
-    }
-
-    public SimpleListTableDataModel(Collection arrRows)
-    {
-        m_arrRows = new ArrayList(arrRows);
-    }
-
-    public SimpleListTableDataModel(Iterator objRows)
-    {
-        m_arrRows = new ArrayList();
-        addAll(m_arrRows, objRows);
-    }
-
-    private void addAll(List arrRows, Iterator objRows)
-    {
-        while(objRows.hasNext())
-            arrRows.add(objRows.next());
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableDataModel#getRowCount()
-     */
-    public int getRowCount()
-    {
-        return m_arrRows.size();
-    }
-
-    /**
-     * Returns the row element at the given position.
-     * 
-     * @param nRow
-     *            the index of the element to return
-     */
-    public Object getRow(int nRow)
-    {
-        if (nRow < 0 || nRow >= m_arrRows.size())
-        {
-            // error message
-            return null;
-        }
-        return m_arrRows.get(nRow);
-    }
-
-    /**
-     * Returns an Iterator with the elements from the given range.
-     * 
-     * @param nFrom
-     *            the start of the range (inclusive)
-     * @param nTo
-     *            the stop of the range (exclusive)
-     */
-    public Iterator getRows(int nFrom, int nTo)
-    {
-        return new ArrayIterator(m_arrRows.toArray(), nFrom, nTo);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableDataModel#getRows()
-     */
-    public Iterator getRows()
-    {
-        return m_arrRows.iterator();
-    }
-
-    /**
-     * Method addRow. Adds a row object to the model at its end
-     * 
-     * @param objRow
-     *            the row object to add
-     */
-    public void addRow(Object objRow)
-    {
-        m_arrRows.add(objRow);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-    public void addRows(Collection arrRows)
-    {
-        m_arrRows.addAll(arrRows);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-    /**
-     * Method removeRow. Removes a row object from the model
-     * 
-     * @param objRow
-     *            the row object to remove
-     */
-    public void removeRow(Object objRow)
-    {
-        m_arrRows.remove(objRow);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-    public void removeRows(Collection arrRows)
-    {
-        m_arrRows.removeAll(arrRows);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleSetTableDataModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleSetTableDataModel.java
deleted file mode 100644
index 0abab41..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleSetTableDataModel.java
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.apache.tapestry.contrib.table.model.CTableDataModelEvent;
-import org.apache.tapestry.contrib.table.model.common.AbstractTableDataModel;
-
-/**
- * A minimal set implementation of the
- * {@link org.apache.tapestry.contrib.table.model.ITableDataModel} interface.
- * 
- * @author mindbridge
- */
-public class SimpleSetTableDataModel extends AbstractTableDataModel implements
-        Serializable
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private Set m_setRows;
-
-    public SimpleSetTableDataModel(Set setRows)
-    {
-        m_setRows = setRows;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableDataModel#getRowCount()
-     */
-    public int getRowCount()
-    {
-        return m_setRows.size();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableDataModel#getRows()
-     */
-    public Iterator getRows()
-    {
-        return m_setRows.iterator();
-    }
-
-    /**
-     * Method addRow. Adds a row object to the model at its end
-     * 
-     * @param objRow
-     *            the row object to add
-     */
-    public void addRow(Object objRow)
-    {
-        if (m_setRows.contains(objRow)) return;
-        m_setRows.add(objRow);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-    public void addRows(Collection arrRows)
-    {
-        m_setRows.addAll(arrRows);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-    /**
-     * Method removeRow. Removes a row object from the model
-     * 
-     * @param objRow
-     *            the row object to remove
-     */
-    public void removeRow(Object objRow)
-    {
-        if (!m_setRows.contains(objRow)) return;
-        m_setRows.remove(objRow);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-    public void removeRows(Collection arrRows)
-    {
-        m_setRows.removeAll(arrRows);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumn.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumn.java
deleted file mode 100644
index c3f9d11..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumn.java
+++ /dev/null
@@ -1,278 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.contrib.table.model.common.AbstractTableColumn;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * A simple minimal implementation of the
- * {@link org.apache.tapestry.contrib.table.model.ITableColumn}interface that
- * provides all the basic services for displaying a column.
- * 
- * @author mindbridge
- */
-public class SimpleTableColumn extends AbstractTableColumn
-{
-    // TODO: Unify SimpleTableColumnRendererSource and
-    // SimpleTableColumnFormRendererSource
-    // and implement the configuration with HiveMind
-
-    public static final ITableRendererSource DEFAULT_COLUMN_RENDERER_SOURCE = new SimpleTableColumnRendererSource();
-
-    public static final ITableRendererSource FORM_COLUMN_RENDERER_SOURCE = new SimpleTableColumnFormRendererSource();
-
-    public static final ITableRendererSource DEFAULT_VALUE_RENDERER_SOURCE = new SimpleTableValueRendererSource();
-
-    private static final long serialVersionUID = 1L;
-    
-    private String m_strDisplayName;
-
-    private ITableColumnEvaluator m_objEvaluator;
-
-    /**
-     * Creates a SimpleTableColumn.
-     * 
-     * @param strColumnName
-     *            the identifying name and display name of the column
-     */
-    public SimpleTableColumn(String strColumnName)
-    {
-        this(strColumnName, strColumnName);
-    }
-
-    /**
-     * Creates a SimpleTableColumn.
-     * 
-     * @param strColumnName
-     *            the identifying name and display name of the column
-     * @param bSortable
-     *            whether the column is sortable
-     */
-    public SimpleTableColumn(String strColumnName, boolean bSortable)
-    {
-        this(strColumnName, strColumnName, bSortable);
-    }
-
-    /**
-     * Creates a SimpleTableColumn.
-     * 
-     * @param strColumnName
-     *            the identifying name and display name of the column
-     * @param bSortable
-     *            whether the column is sortable
-     * @param objEvaluator
-     *            the evaluator to extract the column value from the row
-     */
-    public SimpleTableColumn(String strColumnName,
-            ITableColumnEvaluator objEvaluator, boolean bSortable)
-    {
-        this(strColumnName, strColumnName, objEvaluator, bSortable);
-    }
-
-    /**
-     * Creates a SimpleTableColumn.
-     * 
-     * @param strColumnName
-     *            the identifying name of the column
-     * @param strDisplayName
-     *            the display name of the column
-     */
-    public SimpleTableColumn(String strColumnName, String strDisplayName)
-    {
-        this(strColumnName, strDisplayName, false);
-    }
-
-    /**
-     * Creates a SimpleTableColumn.
-     * 
-     * @param strColumnName
-     *            the identifying name of the column
-     * @param strDisplayName
-     *            the display name of the column
-     * @param bSortable
-     *            whether the column is sortable
-     */
-    public SimpleTableColumn(String strColumnName, String strDisplayName,
-            boolean bSortable)
-    {
-        this(strColumnName, strDisplayName, null, bSortable);
-    }
-
-    /**
-     * Creates a SimpleTableColumn.
-     * 
-     * @param strColumnName
-     *            the identifying name of the column
-     * @param strDisplayName
-     *            the display name of the column
-     * @param bSortable
-     *            whether the column is sortable
-     * @param objEvaluator
-     *            the evaluator to extract the column value from the row
-     */
-    public SimpleTableColumn(String strColumnName, String strDisplayName,
-            ITableColumnEvaluator objEvaluator, boolean bSortable)
-    {
-        super(strColumnName, bSortable, null);
-        setComparator(new DefaultTableComparator());
-        setDisplayName(strDisplayName);
-        setColumnRendererSource(DEFAULT_COLUMN_RENDERER_SOURCE);
-        setValueRendererSource(DEFAULT_VALUE_RENDERER_SOURCE);
-        setEvaluator(objEvaluator);
-    }
-
-    /**
-     * Returns the display name of the column that will be used in the table
-     * header. Override for internationalization.
-     * 
-     * @return String the display name of the column
-     */
-    public String getDisplayName()
-    {
-        return m_strDisplayName;
-    }
-
-    /**
-     * Sets the displayName.
-     * 
-     * @param displayName
-     *            The displayName to set
-     */
-    public void setDisplayName(String displayName)
-    {
-        if (displayName != null)
-            displayName = displayName.replace("_", ".");
-        
-        m_strDisplayName = displayName;
-    }
-
-    /**
-     * Returns the evaluator.
-     * 
-     * @return ITableColumnEvaluator
-     */
-    public ITableColumnEvaluator getEvaluator()
-    {
-        return m_objEvaluator;
-    }
-
-    /**
-     * Sets the evaluator.
-     * 
-     * @param evaluator
-     *            The evaluator to set
-     */
-    public void setEvaluator(ITableColumnEvaluator evaluator)
-    {
-        m_objEvaluator = evaluator;
-    }
-
-    /**
-     * Sets a comparator that compares the values of this column rather than the
-     * objects representing the full rows. <br>
-     * This method allows easier use of standard comparators for sorting the
-     * column. It simply wraps the provided comparator with a row-to-column
-     * convertor and invokes the setComparator() method.
-     * 
-     * @param comparator
-     *            The column value comparator
-     */
-    public void setColumnComparator(Comparator comparator)
-    {
-        setComparator(new ColumnComparator(this, comparator));
-    }
-
-    /**
-     * Extracts the value of the column from the row object.
-     * 
-     * @param objRow
-     *            the row object
-     * @return Object the column value
-     */
-    public Object getColumnValue(Object objRow)
-    {
-        ITableColumnEvaluator objEvaluator = getEvaluator();
-        if (objEvaluator != null)
-            return objEvaluator.getColumnValue(this, objRow);
-
-        // default fallback
-        return objRow.toString();
-    }
-
-    /**
-     * Use the column name to get the display name, as well as the column and
-     * value renderer sources from the provided component.
-     * 
-     * @param objSettingsContainer
-     *            the component from which to get the settings
-     */
-    public void loadSettings(IComponent objSettingsContainer)
-    {
-        String strDisplayName = objSettingsContainer.getMessages().getMessage(getDisplayName());
-
-        // Hack! the Messages inteface needs to restore the getMessage(key,
-        // default), or needs
-        // to add a containsKey(key) method. Looking for the '[' used with
-        // invalid/unknown keys.
-
-        if (!strDisplayName.startsWith("["))
-        {
-            setDisplayName(strDisplayName);
-        }
-
-        super.loadSettings(objSettingsContainer);
-    }
-
-    /**
-     * 
-     * @author mb
-     */
-    public class DefaultTableComparator implements Comparator, Serializable
-    {
-
-        private static final long serialVersionUID = 1L;
-
-        public int compare(Object objRow1, Object objRow2)
-        {
-            Object objValue1 = getColumnValue(objRow1);
-            Object objValue2 = getColumnValue(objRow2);
-
-            if (objValue1 == objValue2) return 0;
-
-            boolean bComparable1 = objValue1 instanceof Comparable;
-            boolean bComparable2 = objValue2 instanceof Comparable;
-
-            // non-comparable values are considered equal
-            if (!bComparable1 && !bComparable2)
-                return 0;
-
-            // non-comparable values (null included) are considered smaller
-            // than the comparable ones
-            if (!bComparable1)
-                return -1;
-
-            if (!bComparable2)
-                return 1;
-
-            return ((Comparable) objValue1).compareTo(objValue2);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnFormRendererSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnFormRendererSource.java
deleted file mode 100644
index 8afb5c6..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnFormRendererSource.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.contrib.table.model.common.ComponentTableRendererSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * This is a simple implementation of
- * {@link org.apache.tapestry.contrib.table.model.ITableRendererSource} that
- * returns a standard renderer of a column header.
- * <p>
- * This implementation requires that the column passed is of type
- * SimpleTableColumn
- * 
- * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn
- * @author mindbridge
- * @since 2.3
- */
-public class SimpleTableColumnFormRendererSource implements
-        ITableRendererSource
-{
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle,
-     *      ITableModelSource, ITableColumn, Object)
-     */
-    public IRender getRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, ITableColumn objColumn, Object objRow)
-    {
-        ComponentAddress objAddress = new ComponentAddress(objSource
-                .getNamespace(), "SimpleTableColumnPage",
-                "tableColumnFormComponent");
-        ComponentTableRendererSource objComponentRenderer = new ComponentTableRendererSource(
-                objAddress);
-
-        return objComponentRenderer.getRenderer(objCycle, objSource, objColumn,
-                objRow);
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnModel.java
deleted file mode 100644
index e3c1c5c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnModel.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.common.ArrayIterator;
-
-/**
- * A minimal implementation of the
- * {@link org.apache.tapestry.contrib.table.model.ITableColumnModel} interface
- * that stores columns as an array.
- * 
- * @author mindbridge
- */
-public class SimpleTableColumnModel implements ITableColumnModel, Serializable
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private ITableColumn[] m_arrColumns;
-    private Map m_mapColumns;
-
-    public SimpleTableColumnModel(ITableColumn[] arrColumns)
-    {
-        m_arrColumns = arrColumns;
-
-        m_mapColumns = new HashMap();
-        for(int i = 0; i < m_arrColumns.length; i++)
-            m_mapColumns.put(m_arrColumns[i].getColumnName(), m_arrColumns[i]);
-    }
-
-    public SimpleTableColumnModel(List arrColumns)
-    {
-        this((ITableColumn[]) arrColumns.toArray(new ITableColumn[arrColumns
-                .size()]));
-    }
-
-    public int getColumnCount()
-    {
-        return m_arrColumns.length;
-    }
-
-    public ITableColumn getColumn(int nColumn)
-    {
-        if (nColumn < 0 || nColumn >= m_arrColumns.length)
-        {
-            // error message
-            return null;
-        }
-        return m_arrColumns[nColumn];
-    }
-
-    public ITableColumn getColumn(String strColumn)
-    {
-        return (ITableColumn) m_mapColumns.get(strColumn);
-    }
-
-    public Iterator getColumns()
-    {
-        return new ArrayIterator(m_arrColumns);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnRendererSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnRendererSource.java
deleted file mode 100644
index f595bc3..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnRendererSource.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.contrib.table.model.common.ComponentTableRendererSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * This is a simple implementation of
- * {@link org.apache.tapestry.contrib.table.model.ITableRendererSource} that
- * returns a standard renderer of a column header.
- * <p>
- * This implementation requires that the column passed is of type
- * SimpleTableColumn
- * 
- * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn
- * @author mindbridge
- * @since 2.3
- */
-public class SimpleTableColumnRendererSource implements ITableRendererSource
-{
-
-    private static final long serialVersionUID = 1L;
-
-    public SimpleTableColumnRendererSource()
-    {
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle,
-     *      ITableModelSource, ITableColumn, Object)
-     */
-    public IRender getRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, ITableColumn objColumn, Object objRow)
-    {
-        ComponentAddress objAddress = new ComponentAddress(objSource
-                .getNamespace(), "SimpleTableColumnPage",
-                "tableColumnComponent");
-        ComponentTableRendererSource objComponentRenderer = new ComponentTableRendererSource(
-                objAddress);
-
-        return objComponentRenderer.getRenderer(objCycle, objSource, objColumn,
-                objRow);
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableModel.java
deleted file mode 100644
index 205cc95..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableModel.java
+++ /dev/null
@@ -1,190 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Iterator;
-
-import org.apache.tapestry.contrib.table.model.CTableDataModelEvent;
-import org.apache.tapestry.contrib.table.model.IFullTableModel;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.ITableDataModel;
-import org.apache.tapestry.contrib.table.model.ITableDataModelListener;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-import org.apache.tapestry.contrib.table.model.common.AbstractTableModel;
-import org.apache.tapestry.contrib.table.model.common.ArrayIterator;
-import org.apache.tapestry.contrib.table.model.common.ReverseComparator;
-
-/**
- * A simple generic table model implementation.
- * 
- * @author mindbridge
- */
-public class SimpleTableModel extends AbstractTableModel implements
-        IFullTableModel, ITableDataModelListener
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private ITableDataModel m_objDataModel = null;
-    private Object[] m_arrRows = null;
-    private ITableColumnModel m_objColumnModel = null;
-
-    private SimpleTableSortingState m_objLastSortingState;
-
-    public SimpleTableModel(Object[] arrData, ITableColumn[] arrColumns)
-    {
-        this(new SimpleListTableDataModel(arrData), new SimpleTableColumnModel(
-                arrColumns));
-    }
-
-    public SimpleTableModel(Object[] arrData, ITableColumnModel objColumnModel)
-    {
-        this(new SimpleListTableDataModel(arrData), objColumnModel);
-    }
-
-    public SimpleTableModel(ITableDataModel objDataModel,
-            ITableColumnModel objColumnModel)
-    {
-        this(objDataModel, objColumnModel, new SimpleTableState());
-    }
-
-    public SimpleTableModel(ITableDataModel objDataModel,
-            ITableColumnModel objColumnModel, SimpleTableState objState)
-    {
-        super(objState);
-
-        m_arrRows = null;
-        m_objColumnModel = objColumnModel;
-        m_objLastSortingState = new SimpleTableSortingState();
-
-        setDataModel(objDataModel);
-    }
-
-    public ITableColumnModel getColumnModel()
-    {
-        return m_objColumnModel;
-    }
-
-    public Iterator getCurrentPageRows()
-    {
-        sortRows();
-
-        int nPageSize = getPagingState().getPageSize();
-        if (nPageSize <= 0) return new ArrayIterator(m_arrRows);
-
-        int nCurrentPage = getPagingState().getCurrentPage();
-        int nFrom = nCurrentPage * nPageSize;
-        int nTo = (nCurrentPage + 1) * nPageSize;
-
-        return new ArrayIterator(m_arrRows, nFrom, nTo);
-    }
-
-    public int getRowCount()
-    {
-        updateRows();
-        return m_arrRows.length;
-    }
-
-    private void updateRows()
-    {
-        // If it is not null, then there is no need to extract the data
-        if (m_arrRows != null) return;
-
-        // Extract the data from the model
-        m_objLastSortingState = new SimpleTableSortingState();
-
-        int nRowCount = m_objDataModel.getRowCount();
-        Object[] arrRows = new Object[nRowCount];
-
-        int i = 0;
-        for(Iterator it = m_objDataModel.getRows(); it.hasNext();)
-            arrRows[i++] = it.next();
-
-        m_arrRows = arrRows;
-    }
-
-    protected void sortRows()
-    {
-        updateRows();
-
-        ITableSortingState objSortingState = getSortingState();
-
-        // see if there is sorting required
-        String strSortColumn = objSortingState.getSortColumn();
-        if (strSortColumn == null) return;
-
-        boolean bSortOrder = objSortingState.getSortOrder();
-
-        // See if the table is already sorted this way. If so, return.
-        if (strSortColumn.equals(m_objLastSortingState.getSortColumn())
-                && m_objLastSortingState.getSortOrder() == bSortOrder) return;
-
-        ITableColumn objColumn = getColumnModel().getColumn(strSortColumn);
-        if (objColumn == null || !objColumn.getSortable()) return;
-
-        Comparator objCmp = objColumn.getComparator();
-        if (objCmp == null) return;
-
-        // Okay, we have everything in place. Sort the rows.
-        if (bSortOrder == ITableSortingState.SORT_DESCENDING)
-            objCmp = new ReverseComparator(objCmp);
-
-        Arrays.sort(m_arrRows, objCmp);
-
-        m_objLastSortingState.setSortColumn(strSortColumn, bSortOrder);
-    }
-
-    public void tableDataChanged(CTableDataModelEvent objEvent)
-    {
-        m_arrRows = null;
-    }
-
-    /**
-     * Returns the dataModel.
-     * 
-     * @return ITableDataModel
-     */
-    public ITableDataModel getDataModel()
-    {
-        return m_objDataModel;
-    }
-
-    /**
-     * Sets the dataModel.
-     * 
-     * @param dataModel
-     *            The dataModel to set
-     */
-    public void setDataModel(ITableDataModel dataModel)
-    {
-        if (m_objDataModel != null)
-            m_objDataModel.removeTableDataModelListener(this);
-
-        m_objDataModel = dataModel;
-        m_objDataModel.addTableDataModelListener(this);
-
-        m_arrRows = null;
-    }
-
-    public Iterator getRows()
-    {
-        updateRows();
-        return new ArrayIterator(m_arrRows);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTablePagingState.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTablePagingState.java
deleted file mode 100644
index eb8074e..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTablePagingState.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITablePagingState;
-
-/**
- * A minimal implementation of
- * {@link org.apache.tapestry.contrib.table.model.ITablePagingState}.
- * 
- * @author mindbridge
- */
-public class SimpleTablePagingState implements ITablePagingState, Serializable
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private static final int DEFAULT_PAGE_SIZE = 10;
-
-    private int m_nPageSize;
-    private int m_nCurrentPage;
-
-    public SimpleTablePagingState()
-    {
-        this(DEFAULT_PAGE_SIZE, 0);
-    }
-
-    public SimpleTablePagingState(int nPageSize, int nCurrentPage)
-    {
-        m_nPageSize = nPageSize;
-        m_nCurrentPage = nCurrentPage;
-    }
-
-    /**
-     * Returns the pageSize.
-     * 
-     * @return int
-     */
-    public int getPageSize()
-    {
-        return m_nPageSize;
-    }
-
-    /**
-     * Sets the pageSize.
-     * 
-     * @param pageSize
-     *            The pageSize to set
-     */
-    public void setPageSize(int pageSize)
-    {
-        m_nPageSize = pageSize;
-    }
-
-    /**
-     * Returns the currentPage.
-     * 
-     * @return int
-     */
-    public int getCurrentPage()
-    {
-        return m_nCurrentPage;
-    }
-
-    /**
-     * Sets the currentPage.
-     * 
-     * @param currentPage
-     *            The currentPage to set
-     */
-    public void setCurrentPage(int currentPage)
-    {
-        m_nCurrentPage = currentPage;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableSessionStateManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableSessionStateManager.java
deleted file mode 100644
index ace042a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableSessionStateManager.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.ITableDataModel;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
-
-/**
- * A {@link org.apache.tapestry.contrib.table.model.ITableSessionStateManager}
- * implementation that saves only the paging and sorting state of the table
- * model into the session.
- * 
- * @author mindbridge
- */
-public class SimpleTableSessionStateManager implements
-        ITableSessionStateManager
-{
-
-    private ITableDataModel m_objDataModel;
-    private ITableColumnModel m_objColumnModel;
-
-    public SimpleTableSessionStateManager(ITableDataModel objDataModel,
-            ITableColumnModel objColumnModel)
-    {
-        m_objDataModel = objDataModel;
-        m_objColumnModel = objColumnModel;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#getSessionState(ITableModel)
-     */
-    public Serializable getSessionState(ITableModel objModel)
-    {
-        SimpleTableModel objSimpleModel = (SimpleTableModel) objModel;
-        return objSimpleModel.getState();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#recreateTableModel(Serializable)
-     */
-    public ITableModel recreateTableModel(Serializable objState)
-    {
-        if (objState == null) return null;
-        SimpleTableState objSimpleState = (SimpleTableState) objState;
-        return new SimpleTableModel(m_objDataModel, m_objColumnModel,
-                objSimpleState);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableSortingState.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableSortingState.java
deleted file mode 100644
index 238db21..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableSortingState.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-
-/**
- * A minimal implementation of
- * {@link org.apache.tapestry.contrib.table.model.ITableSortingState}.
- * 
- * @author mindbridge
- */
-public class SimpleTableSortingState implements ITableSortingState,
-        Serializable
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private String m_strSortColumn;
-    private boolean m_bSortOrder;
-
-    public SimpleTableSortingState()
-    {
-        this(null, ITableSortingState.SORT_ASCENDING);
-    }
-
-    public SimpleTableSortingState(String strSortColumn, boolean bSortOrder)
-    {
-        m_strSortColumn = strSortColumn;
-        m_bSortOrder = bSortOrder;
-    }
-
-    /**
-     * Returns the SortOrder.
-     * 
-     * @return boolean
-     */
-    public boolean getSortOrder()
-    {
-        return m_bSortOrder;
-    }
-
-    /**
-     * Returns the SortColumn.
-     * 
-     * @return int
-     */
-    public String getSortColumn()
-    {
-        return m_strSortColumn;
-    }
-
-    /**
-     * Sets the SortColumn.
-     * 
-     * @param strSortColumn
-     *            The SortColumn to set
-     */
-    public void setSortColumn(String strSortColumn, boolean bSortOrder)
-    {
-        m_strSortColumn = strSortColumn;
-        m_bSortOrder = bSortOrder;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableState.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableState.java
deleted file mode 100644
index 86214aa..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableState.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITablePagingState;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-
-/**
- * A container holding all of the table model states.
- * 
- * @author mindbridge
- */
-public class SimpleTableState implements Serializable
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private ITablePagingState m_objPagingState;
-    private ITableSortingState m_objSortingState;
-
-    public SimpleTableState()
-    {
-        this(new SimpleTablePagingState(), new SimpleTableSortingState());
-    }
-
-    public SimpleTableState(ITablePagingState objPagingState,
-            ITableSortingState objSortingState)
-    {
-        m_objPagingState = objPagingState;
-        m_objSortingState = objSortingState;
-    }
-
-    public SimpleTableState(int nPageSize, int nCurrentPage,
-            String strSortColumn, boolean bSortOrder)
-    {
-        this(new SimpleTablePagingState(nPageSize, nCurrentPage),
-                new SimpleTableSortingState(strSortColumn, bSortOrder));
-    }
-
-    /**
-     * Returns the pagingState.
-     * 
-     * @return ITablePagingState
-     */
-    public ITablePagingState getPagingState()
-    {
-        return m_objPagingState;
-    }
-
-    /**
-     * Returns the sortingState.
-     * 
-     * @return ITableSortingState
-     */
-    public ITableSortingState getSortingState()
-    {
-        return m_objSortingState;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableStateAdaptor.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableStateAdaptor.java
deleted file mode 100644
index ff04791..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableStateAdaptor.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/*
- * Created on Jul 6, 2005
- */
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.util.StringTokenizer;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.contrib.table.components.TableMessages;
-import org.apache.tapestry.services.DataSqueezer;
-import org.apache.tapestry.util.io.SqueezeAdaptor;
-
-/**
- * 
- * @author mb
- */
-public class SimpleTableStateAdaptor implements SqueezeAdaptor
-{
-
-    private static final String PREFIX = "t";
-
-    /**
-     * @see SqueezeAdaptor#getPrefix()
-     */
-    public String getPrefix()
-    {
-        return PREFIX;
-    }
-
-    /**
-     * @see SqueezeAdaptor#getDataClass()
-     */
-    public Class getDataClass()
-    {
-        return SimpleTableState.class;
-    }
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        SimpleTableState objState = (SimpleTableState) data;
-
-        StringBuffer buf = new StringBuffer();
-        buf.append(objState.getPagingState().getPageSize());
-        buf.append(":");
-        buf.append(objState.getPagingState().getCurrentPage());
-        buf.append(":");
-        String strSortColumn = objState.getSortingState().getSortColumn();
-        if (strSortColumn == null)
-            strSortColumn = "";
-        buf.append(strSortColumn);
-        buf.append(":");
-        buf.append(objState.getSortingState().getSortOrder() ? 'T' : 'F');
-
-        return buf.toString();
-    }
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        StringTokenizer strTok = new StringTokenizer(string, ":");
-        if (strTok.countTokens() != 4)
-            throw new ApplicationRuntimeException(TableMessages.invalidTableStateFormat(string));
-        int nPageSize = Integer.parseInt(strTok.nextToken());
-        int nCurrentPage = Integer.parseInt(strTok.nextToken());
-        String strSortColumn = strTok.nextToken();
-        if (strSortColumn.equals(""))
-            strSortColumn = null;
-        boolean bSortOrder = strTok.nextToken().equals("T");
-
-        return new SimpleTableState(nPageSize, nCurrentPage, strSortColumn, bSortOrder);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableValueRendererSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableValueRendererSource.java
deleted file mode 100644
index c1bd016..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/SimpleTableValueRendererSource.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.valid.RenderString;
-
-/**
- * This is a simple implementation of
- * {@link org.apache.tapestry.contrib.table.model.ITableRendererSource} that
- * returns a standard renderer of a column value. This implementation requires
- * that the column passed is of type SimpleTableColumn
- * 
- * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn
- * @author mindbridge
- * @since 2.3
- */
-public class SimpleTableValueRendererSource implements ITableRendererSource
-{
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * The representation of null values. This is geared towards HTML, but will
-     * work for some other *ML languages as well. In any case, changing the
-     * column's value renderer allows selecting fully custom rendering
-     * behaviour.
-     */
-    private static final String EMPTY_REPRESENTATION = "&nbsp;";
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle,
-     *      ITableModelSource, ITableColumn, Object)
-     */
-    public IRender getRenderer(IRequestCycle objCycle,
-            ITableModelSource objSource, ITableColumn objColumn, Object objRow)
-    {
-        SimpleTableColumn objSimpleColumn = (SimpleTableColumn) objColumn;
-
-        Object objValue = objSimpleColumn.getColumnValue(objRow);
-        if (objValue == null)
-            return new RenderString(EMPTY_REPRESENTATION, true);
-
-        return new RenderString(objValue.toString());
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/package.html
deleted file mode 100644
index 9ce4a27..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/simple/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Simple model classes for table.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/ISqlConnectionSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/ISqlConnectionSource.java
deleted file mode 100644
index a1b147d..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/ISqlConnectionSource.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-
-/**
- * @author mindbridge
- */
-public interface ISqlConnectionSource
-{
-
-    Connection obtainConnection()
-        throws SQLException;
-
-    void returnConnection(Connection objConnection);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/ISqlTableDataSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/ISqlTableDataSource.java
deleted file mode 100644
index 80dd425..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/ISqlTableDataSource.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-/**
- * @author mindbridge
- */
-public interface ISqlTableDataSource
-{
-
-    int getRowCount()
-        throws SQLException;
-
-    ResultSet getCurrentRows(SqlTableColumnModel objColumnModel,
-            SimpleTableState objState)
-        throws SQLException;
-
-    void closeResultSet(ResultSet objResultSet);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/ResultSetIterator.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/ResultSetIterator.java
deleted file mode 100644
index 47945e9..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/ResultSetIterator.java
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Iterator;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * @author mindbridge
- */
-public class ResultSetIterator implements Iterator
-{
-
-    private static final Log LOG = LogFactory.getLog(ResultSetIterator.class);
-
-    private ResultSet m_objResultSet;
-    private boolean m_bFetched;
-    private boolean m_bAvailable;
-
-    public ResultSetIterator(ResultSet objResultSet)
-    {
-        m_objResultSet = objResultSet;
-        m_bFetched = false;
-    }
-
-    /**
-     * @see java.util.Iterator#hasNext()
-     */
-    public synchronized boolean hasNext()
-    {
-        if (getResultSet() == null) return false;
-
-        if (!m_bFetched)
-        {
-            m_bFetched = true;
-
-            try
-            {
-                m_bAvailable = !getResultSet().isLast();
-            }
-            catch (SQLException e)
-            {
-                LOG.warn("SQLException while testing for end of the ResultSet",
-                        e);
-                m_bAvailable = false;
-            }
-
-            if (!m_bAvailable) notifyEnd();
-        }
-
-        return m_bAvailable;
-    }
-
-    /**
-     * @see java.util.Iterator#next()
-     */
-    public synchronized Object next()
-    {
-        ResultSet objResultSet = getResultSet();
-
-        try
-        {
-            if (!objResultSet.next()) return null;
-        }
-        catch (SQLException e)
-        {
-            LOG.warn("SQLException while iterating over the ResultSet", e);
-            return null;
-        }
-
-        m_bFetched = false;
-        return objResultSet;
-    }
-
-    /**
-     * @see java.util.Iterator#remove()
-     */
-    public void remove()
-    {
-        try
-        {
-            getResultSet().deleteRow();
-        }
-        catch (SQLException e)
-        {
-            LOG.error("Cannot delete record", e);
-        }
-    }
-
-    /**
-     * Returns the resultSet.
-     * 
-     * @return ResultSet
-     */
-    public ResultSet getResultSet()
-    {
-        return m_objResultSet;
-    }
-
-    protected void notifyEnd()
-    {
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SimpleSqlConnectionSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SimpleSqlConnectionSource.java
deleted file mode 100644
index 9609bce..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SimpleSqlConnectionSource.java
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * @author mindbridge
- */
-public class SimpleSqlConnectionSource implements ISqlConnectionSource
-{
-
-    private static final Log LOG = LogFactory
-            .getLog(SimpleSqlConnectionSource.class);
-
-    private String m_strUrl;
-
-    private String m_strUser;
-
-    private String m_strPwd;
-
-    public SimpleSqlConnectionSource(String strUrl)
-    {
-        this(strUrl, null, null);
-    }
-
-    public SimpleSqlConnectionSource(String strUrl, String strUser,
-            String strPwd)
-    {
-        m_strUrl = strUrl;
-        m_strUser = strUser;
-        m_strPwd = strPwd;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.sql.ISqlConnectionSource#obtainConnection()
-     */
-    public Connection obtainConnection()
-        throws SQLException
-    {
-        if (m_strUser == null) return DriverManager.getConnection(m_strUrl);
-
-        return DriverManager.getConnection(m_strUrl, m_strUser, m_strPwd);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.sql.ISqlConnectionSource#returnConnection(Connection)
-     */
-    public void returnConnection(Connection objConnection)
-    {
-        try
-        {
-            objConnection.close();
-        }
-        catch (SQLException e)
-        {
-            LOG.warn("Could not close connection", e);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SimpleSqlTableDataSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SimpleSqlTableDataSource.java
deleted file mode 100644
index 921c334..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SimpleSqlTableDataSource.java
+++ /dev/null
@@ -1,259 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.contrib.table.model.ITablePagingState;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-/**
- * @author mindbridge
- */
-public class SimpleSqlTableDataSource implements ISqlTableDataSource
-{
-
-    private static final Log LOG = LogFactory
-            .getLog(SimpleSqlTableDataSource.class);
-
-    private ISqlConnectionSource m_objConnSource;
-    private String m_strTableName;
-    private String m_strWhereClause;
-
-    public SimpleSqlTableDataSource(ISqlConnectionSource objConnSource,
-            String strTableName)
-    {
-        this(objConnSource, strTableName, null);
-    }
-
-    public SimpleSqlTableDataSource(ISqlConnectionSource objConnSource,
-            String strTableName, String strWhereClause)
-    {
-        setConnSource(objConnSource);
-        setTableName(strTableName);
-        setWhereClause(strWhereClause);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.sql.ISqlTableDataSource#getRowCount()
-     */
-    public int getRowCount()
-        throws SQLException
-    {
-        String strQuery = generateCountQuery();
-        LOG.trace("Invoking query to count rows: " + strQuery);
-
-        Connection objConn = getConnSource().obtainConnection();
-        try
-        {
-            Statement objStmt = objConn.createStatement();
-            try
-            {
-                ResultSet objRS = objStmt.executeQuery(strQuery);
-                objRS.next();
-                return objRS.getInt(1);
-            }
-            finally
-            {
-                objStmt.close();
-            }
-        }
-        finally
-        {
-            getConnSource().returnConnection(objConn);
-        }
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.sql.ISqlTableDataSource#getCurrentRows(SqlTableColumnModel,
-     *      SimpleTableState)
-     */
-    public ResultSet getCurrentRows(SqlTableColumnModel objColumnModel,
-            SimpleTableState objState)
-        throws SQLException
-    {
-        String strQuery = generateDataQuery(objColumnModel, objState);
-        LOG.trace("Invoking query to load current rows: " + strQuery);
-
-        Connection objConn = getConnSource().obtainConnection();
-        Statement objStmt = objConn.createStatement();
-        return objStmt.executeQuery(strQuery);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.sql.ISqlTableDataSource#closeResultSet(ResultSet)
-     */
-    public void closeResultSet(ResultSet objResultSet)
-    {
-        try
-        {
-            Statement objStmt = objResultSet.getStatement();
-            Connection objConn = objStmt.getConnection();
-            try
-            {
-                objResultSet.close();
-                objStmt.close();
-            }
-            catch (SQLException e)
-            {
-                // ignore
-            }
-            getConnSource().returnConnection(objConn);
-        }
-        catch (SQLException e)
-        {
-            LOG.warn("Error while closing the result set", e);
-        }
-    }
-
-    protected String quoteObjectName(String strObject)
-    {
-        return strObject;
-    }
-
-    /**
-     * Returns the tableName.
-     * 
-     * @return String
-     */
-    public String getTableName()
-    {
-        return m_strTableName;
-    }
-
-    /**
-     * Sets the tableName.
-     * 
-     * @param tableName
-     *            The tableName to set
-     */
-    public void setTableName(String tableName)
-    {
-        m_strTableName = tableName;
-    }
-
-    /**
-     * Returns the connSource.
-     * 
-     * @return ISqlConnectionSource
-     */
-    public ISqlConnectionSource getConnSource()
-    {
-        return m_objConnSource;
-    }
-
-    /**
-     * Sets the connSource.
-     * 
-     * @param connSource
-     *            The connSource to set
-     */
-    public void setConnSource(ISqlConnectionSource connSource)
-    {
-        m_objConnSource = connSource;
-    }
-
-    /**
-     * Returns the whereClause.
-     * 
-     * @return String
-     */
-    public String getWhereClause()
-    {
-        return m_strWhereClause;
-    }
-
-    /**
-     * Sets the whereClause.
-     * 
-     * @param whereClause
-     *            The whereClause to set
-     */
-    public void setWhereClause(String whereClause)
-    {
-        m_strWhereClause = whereClause;
-    }
-
-    protected String generateColumnList(SqlTableColumnModel objColumnModel)
-    {
-        // build the column selection
-        StringBuffer objColumnBuf = new StringBuffer();
-        for(int i = 0; i < objColumnModel.getColumnCount(); i++)
-        {
-            SqlTableColumn objColumn = objColumnModel.getSqlColumn(i);
-            if (i > 0) objColumnBuf.append(", ");
-            objColumnBuf.append(quoteObjectName(objColumn.getColumnName()));
-        }
-
-        return objColumnBuf.toString();
-    }
-
-    protected String generateWhereClause()
-    {
-        String strWhereClause = getWhereClause();
-        if (strWhereClause == null || strWhereClause.equals("")) return "";
-        return "WHERE " + strWhereClause + " ";
-    }
-
-    protected String generateOrderByClause(ITableSortingState objSortingState)
-    {
-        // build the sorting clause
-        StringBuffer objSortingBuf = new StringBuffer();
-        if (objSortingState.getSortColumn() != null)
-        {
-            objSortingBuf.append("ORDER BY ");
-            objSortingBuf.append(objSortingState.getSortColumn());
-            if (objSortingState.getSortOrder() == ITableSortingState.SORT_ASCENDING)
-                objSortingBuf.append(" ASC ");
-            else objSortingBuf.append(" DESC ");
-        }
-
-        return objSortingBuf.toString();
-    }
-
-    protected String generateLimitClause(ITablePagingState objPagingState)
-    {
-        int nPageSize = objPagingState.getPageSize();
-        int nStart = objPagingState.getCurrentPage() * nPageSize;
-        String strPagingBuf = "LIMIT " + nPageSize + " OFFSET " + nStart + " ";
-        return strPagingBuf;
-    }
-
-    protected String generateDataQuery(SqlTableColumnModel objColumnModel,
-            SimpleTableState objState)
-    {
-        String strQuery = "SELECT " + generateColumnList(objColumnModel)
-                + " FROM " + getTableName() + " " + generateWhereClause()
-                + generateOrderByClause(objState.getSortingState())
-                + generateLimitClause(objState.getPagingState());
-
-        return strQuery;
-    }
-
-    protected String generateCountQuery()
-    {
-        String strQuery = "SELECT COUNT(*) FROM " + getTableName() + " "
-                + generateWhereClause();
-
-        return strQuery;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SqlTableColumn.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SqlTableColumn.java
deleted file mode 100644
index 52d97e0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SqlTableColumn.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-
-/**
- * @author mindbridge
- */
-public class SqlTableColumn extends SimpleTableColumn
-{
-
-    private static final long serialVersionUID = 1L;
-    private static final Log LOG = LogFactory.getLog(SqlTableColumn.class);
-
-    /**
-     * Creates an SqlTableColumn.
-     * 
-     * @param strSqlField
-     *            the identifying name of the column and the SQL field it refers
-     *            to
-     * @param strDisplayName
-     *            the display name of the column
-     */
-    public SqlTableColumn(String strSqlField, String strDisplayName)
-    {
-        super(strSqlField, strDisplayName);
-    }
-
-    /**
-     * Creates an SqlTableColumn.
-     * 
-     * @param strSqlField
-     *            the identifying name of the column and the SQL field it refers
-     *            to
-     * @param strDisplayName
-     *            the display name of the column
-     * @param bSortable
-     *            whether the column is sortable
-     */
-    public SqlTableColumn(String strSqlField, String strDisplayName,
-            boolean bSortable)
-    {
-        super(strSqlField, strDisplayName, bSortable);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn#getColumnValue(Object)
-     */
-    public Object getColumnValue(Object objRow)
-    {
-        try
-        {
-            ResultSet objRS = (ResultSet) objRow;
-            String strColumnName = getColumnName();
-            Object objValue = objRS.getObject(strColumnName);
-            if (objValue == null) objValue = "";
-            return objValue;
-        }
-        catch (SQLException e)
-        {
-            LOG.error("Cannot get the value for column: " + getColumnName(), e);
-            return "";
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SqlTableColumnModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SqlTableColumnModel.java
deleted file mode 100644
index 204d8f4..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SqlTableColumnModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
-
-/**
- * @author mindbridge
- */
-public class SqlTableColumnModel extends SimpleTableColumnModel
-{
-
-    private static final long serialVersionUID = 1L;
-
-    public SqlTableColumnModel(SqlTableColumn[] arrColumns)
-    {
-        super(arrColumns);
-    }
-
-    public SqlTableColumn getSqlColumn(int nColumn)
-    {
-        return (SqlTableColumn) getColumn(nColumn);
-    }
-
-    public SqlTableColumn getSqlColumn(String strColumn)
-    {
-        return (SqlTableColumn) getColumn(strColumn);
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SqlTableModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SqlTableModel.java
deleted file mode 100644
index fbc8fd0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/SqlTableModel.java
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.common.AbstractTableModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Iterator;
-
-/**
- * An implementation of ITableModel that obtains its data through SQL queries.
- * This is a very efficient model, since it uses SQL to perform the data sorting
- * (through ORDER BY) and obtains only the data on the current page (through
- * LIMIT/OFFSET).
- * <p>
- * This object is typically created in the following manner:
- * 
- * <pre>
- * ISqlConnectionSource objConnSrc = new SimpleSqlConnectionSource(
- *         &quot;jdbc:postgresql://localhost/testdb&quot;, &quot;testdb&quot;, &quot;testdb&quot;);
- * 
- * ISqlTableDataSource objDataSrc = new SimpleSqlTableDataSource(objConnSrc,
- *         &quot;test_table&quot;);
- * 
- * SqlTableColumnModel objColumnModel = new SqlTableColumnModel(
- *         new SqlTableColumn[] {
- *                 new SqlTableColumn(&quot;language&quot;, &quot;Language&quot;, true),
- *                 new SqlTableColumn(&quot;country&quot;, &quot;Country&quot;, true),
- *                 new SqlTableColumn(&quot;variant&quot;, &quot;Variant&quot;, true),
- *                 new SqlTableColumn(&quot;intvalue&quot;, &quot;Integer&quot;, true),
- *                 new SqlTableColumn(&quot;floatvalue&quot;, &quot;Float&quot;, true) });
- * 
- * ITableModel objTableModel = new SqlTableModel(objDataSrc, objColumnModel);
- * 
- * return objTableModel;
- * </pre>
- * 
- * @author mindbridge
- */
-public class SqlTableModel extends AbstractTableModel
-{
-
-    private static final long serialVersionUID = 1L;
-    private static final Log LOG = LogFactory.getLog(SqlTableModel.class);
-
-    private ISqlTableDataSource m_objDataSource;
-    private SqlTableColumnModel m_objColumnModel;
-
-    {
-        try
-        {
-            Class.forName("org.hsqldb.jdbcDriver");
-        }
-        catch (Exception e)
-        {
-            System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
-            e.printStackTrace();
-        }
-    }
-
-    public SqlTableModel(ISqlTableDataSource objDataSource,
-            SqlTableColumnModel objColumnModel)
-    {
-        this(objDataSource, objColumnModel, new SimpleTableState());
-    }
-
-    public SqlTableModel(ISqlTableDataSource objDataSource,
-            SqlTableColumnModel objColumnModel, SimpleTableState objState)
-    {
-        super(objState);
-        m_objDataSource = objDataSource;
-        m_objColumnModel = objColumnModel;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModel#getColumnModel()
-     */
-    public ITableColumnModel getColumnModel()
-    {
-        return m_objColumnModel;
-    }
-
-    public SqlTableColumnModel getSqlColumnModel()
-    {
-        return m_objColumnModel;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModel#getCurrentPageRows()
-     */
-    public Iterator getCurrentPageRows()
-    {
-        try
-        {
-            ResultSet objResultSet = getSqlDataSource().getCurrentRows(getSqlColumnModel(), getState());
-
-            return new ResultSetIterator(objResultSet)
-            {
-
-                protected void notifyEnd()
-                {
-                    getSqlDataSource().closeResultSet(getResultSet());
-                }
-            };
-        }
-        catch (SQLException e)
-        {
-            LOG.error("Cannot get current page rows", e);
-            return new ResultSetIterator(null);
-        }
-    }
-
-    /**
-     * Returns the dataSource.
-     * 
-     * @return ISqlTableDataSource
-     */
-    public ISqlTableDataSource getSqlDataSource()
-    {
-        return m_objDataSource;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.common.AbstractTableModel#getRowCount()
-     */
-    public int getRowCount()
-    {
-        try
-        {
-            return m_objDataSource.getRowCount();
-        }
-        catch (SQLException e)
-        {
-            LOG.error("Cannot get row count", e);
-            return 1;
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/package.html
deleted file mode 100644
index 1c7e9e6..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/sql/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Model classes based on sql semantics.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/BottomLine.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/BottomLine.gif
deleted file mode 100644
index 9dd9c3b..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/BottomLine.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/BottomMinus.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/BottomMinus.gif
deleted file mode 100644
index f4cc0e5..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/BottomMinus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/BottomPlus.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/BottomPlus.gif
deleted file mode 100644
index 2499a75..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/BottomPlus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/INodeRenderFactory.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/INodeRenderFactory.java
deleted file mode 100644
index ee39604..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/INodeRenderFactory.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-
-/**
- * @author ceco
- */
-public interface INodeRenderFactory
-{
-
-    IRender getRenderByID(Object objUniqueKey,
-            ITreeModelSource objTreeModelSource, IRequestCycle objCycle);
-
-    IRender getRender(Object objValue, ITreeModelSource objTreeModelSource,
-            IRequestCycle objCycle);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/ITreeComponent.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/ITreeComponent.java
deleted file mode 100644
index 2c430d6..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/ITreeComponent.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author ceco
- */
-public interface ITreeComponent
-{
-
-    ComponentAddress getComponentPath();
-
-    ITreeModelSource getTreeModelSource();
-
-    ITreeRowSource getTreeRowSource();
-
-    void resetState();
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddleCrossLine.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddleCrossLine.gif
deleted file mode 100644
index 5880cc1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddleCrossLine.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddleLine.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddleLine.gif
deleted file mode 100644
index e9067b2..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddleLine.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddleMinus.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddleMinus.gif
deleted file mode 100644
index 516a81a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddleMinus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddlePlus.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddlePlus.gif
deleted file mode 100644
index f76b1a4..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/MiddlePlus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopLastMinus.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopLastMinus.gif
deleted file mode 100644
index 14f87e7..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopLastMinus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopLastPlus.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopLastPlus.gif
deleted file mode 100644
index 94bec72..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopLastPlus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopLine.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopLine.gif
deleted file mode 100644
index 56c8b15..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopLine.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopMinus.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopMinus.gif
deleted file mode 100644
index 06de866..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopMinus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopPlus.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopPlus.gif
deleted file mode 100644
index c47afd0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TopPlus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/Tree.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/Tree.html
deleted file mode 100644
index 863017b..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/Tree.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<span jwcid="$content$">
-	<span class="tree" jwcid="treeView">
-		<span jwcid="treeData">
-			<span jwcid="treeNodeValue"/>
-		</span>
-	</span>		
-</span>		
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/Tree.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/Tree.java
deleted file mode 100644
index cdcd7e8..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/Tree.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author ceco
- */
-public abstract class Tree extends BaseComponent implements ITreeComponent
-{
-
-    public Tree()
-    {
-        super();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#getComponentPath()
-     */
-    public ComponentAddress getComponentPath()
-    {
-        return new ComponentAddress(this);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#getTreeModelSource()
-     */
-    public ITreeModelSource getTreeModelSource()
-    {
-        TreeView objTreeView = (TreeView) getComponent("treeView");
-        return objTreeView;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#resetState()
-     */
-    public void resetState()
-    {
-        TreeView objTreeView = (TreeView) getComponent("treeView");
-        objTreeView.resetState();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#getTreeRowSource()
-     */
-    public ITreeRowSource getTreeRowSource()
-    {
-        TreeDataView objTreeDataView = (TreeDataView) getComponent("treeData");
-        return objTreeDataView;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/Tree.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/Tree.jwc
deleted file mode 100644
index 0d641af..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/Tree.jwc
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.tree.components.Tree"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <parameter name="sessionStateManager"
-        type="org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager"
-        direction="custom" required="no"/>
-
-    <parameter name="sessionStoreManager"
-        type="org.apache.tapestry.contrib.tree.model.ISessionStoreManager"
-        direction="custom" required="no"/>
-
-    <parameter name="treeModel"
-        type="org.apache.tapestry.contrib.tree.model.ITreeModel"
-        direction="custom" required="yes">
-    </parameter>
-
-    <parameter name="treeStateListener"
-        type="org.apache.tapestry.contrib.tree.model.ITreeStateListener"
-        direction="custom" required="no">
-    </parameter>
-
-    <parameter name="showNodeImages" type="boolean" required="no"
-               direction="custom"/>
-    
-    <parameter name="makeNodeDirect" type="boolean" required="no"
-               direction="custom"/>
-    
-    <parameter name="nodeRenderFactory"
-               type="org.apache.tapestry.contrib.tree.components.INodeRenderFactory"
-               required="no" direction="custom"/>
-               
-    <parameter name="showRootNode" type="boolean" required="no"
-               direction="custom"/>
-    
-    <component id="treeView" type="TreeView">
-        <inherited-binding name="sessionStateManager" parameter-name="sessionStateManager"/>
-        <inherited-binding name="sessionStoreManager" parameter-name="sessionStoreManager"/>
-        <inherited-binding name="treeModel" parameter-name="treeModel"/>
-        <inherited-binding name="treeStateListener" parameter-name="treeStateListener"/>
-    </component>
-
-    <component id="treeData" type="TreeDataView">
-        <binding name="treeView" expression='components.treeView'/>
-        <!--inherited-binding name="value" parameter-name="value"/-->
-        <inherited-binding name="showRootNode" parameter-name="showRootNode"/>
-    </component>
-
-    <component id="treeNodeValue" type="TreeNodeView">
-        <inherited-binding name="showNodeImages" parameter-name="showNodeImages"/>
-        <inherited-binding name="makeNodeDirect" parameter-name="makeNodeDirect"/>
-        <inherited-binding name="nodeRenderFactory" parameter-name="nodeRenderFactory"/>
-
-        <binding name="treeDataView" expression='components.treeData'/>
-    </component>
-
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeDataView.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeDataView.html
deleted file mode 100644
index 565da5f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeDataView.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$"><span jwcid="renderBody"/></span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeDataView.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeDataView.java
deleted file mode 100644
index 9306b97..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeDataView.java
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
-import org.apache.tapestry.contrib.tree.model.TreeRowObject;
-
-import java.util.Iterator;
-
-/**
- * @author tsveltin ?
- */
-public abstract class TreeDataView extends BaseComponent implements
-        ITreeRowSource {
-    private TreeRowObject m_objTreeRowObject = null;
-
-    private int m_nTreeDeep = -1;
-
-    public TreeDataView()
-    {
-        super();
-        initialize();
-    }
-
-    public void initialize()
-    {
-        m_objTreeRowObject = null;
-        m_nTreeDeep = -1;
-    }
-
-    public abstract TreeView getTreeView();
-
-    public void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // render data
-        Object objExistedTreeModelSource = cycle.getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
-        cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, this);
-
-        TreeView objView = getTreeView();
-        ITreeModel objTreeModel = objView.getTreeModel();
-        ITreeDataModel objTreeDataModel = objTreeModel.getTreeDataModel();
-
-        Object objRoot = objTreeDataModel.getRoot();
-        Object objRootUID = objTreeDataModel.getUniqueKey(objRoot, null);
-        
-        if (getShowRootNode()) {
-
-            walkTree(objRoot, objRootUID, 0, objTreeModel, writer, cycle,
-                     TreeRowObject.FIRST_LAST_ROW, new int[0], true);
-        } else {
-
-            boolean bFirst = true;
-
-            int nChildenCount = objTreeModel.getTreeDataModel().getChildCount(objRoot);
-            int nRowPossiotionType = nChildenCount == 1 ? TreeRowObject.FIRST_LAST_ROW : TreeRowObject.FIRST_ROW;
-
-            for (Iterator iter = objTreeModel.getTreeDataModel().getChildren(objRoot); iter.hasNext();)
-            {
-                Object objChild = iter.next();
-                Object objChildUID = objTreeModel.getTreeDataModel().getUniqueKey(objChild, objRoot);
-
-                boolean bChildLast = !iter.hasNext();
-                if (!bFirst) {
-
-                    if (bChildLast)
-                        nRowPossiotionType = TreeRowObject.LAST_ROW;
-                    else
-                        nRowPossiotionType = TreeRowObject.MIDDLE_ROW;
-                }
-
-                walkTree(objChild, objChildUID, 0, objTreeModel, writer, cycle,
-                         nRowPossiotionType, new int[0], bChildLast);
-
-                bFirst = false;
-            }
-        }
-
-        cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, objExistedTreeModelSource);
-    }
-
-    public void walkTree(Object objParent, Object objParentUID, int nDepth,
-                         ITreeModel objTreeModel, IMarkupWriter writer, IRequestCycle cycle,
-                         int nRowPossiotionType, int[] arrConnectImages, boolean bLast)
-    {
-        int rowPositionType = nRowPossiotionType;
-        m_nTreeDeep = nDepth;
-        int nNumberOfChildren = objTreeModel.getTreeDataModel().getChildCount(
-                objParent);
-        boolean bLeaf = (nNumberOfChildren == 0) ? true : false;
-        m_objTreeRowObject = new TreeRowObject(objParent, objParentUID, nDepth,
-                                               bLeaf, rowPositionType, arrConnectImages);
-
-        super.renderComponent(writer, cycle);
-
-        boolean bContain = objTreeModel.getTreeStateModel()
-                .isUniqueKeyExpanded(objParentUID);
-        if (bContain) {
-            int[] arrConnectImagesNew = new int[arrConnectImages.length + 1];
-            System.arraycopy(arrConnectImages, 0, arrConnectImagesNew, 0,
-                             arrConnectImages.length);
-            if (bLast)
-                arrConnectImagesNew[arrConnectImagesNew.length - 1] = TreeRowObject.EMPTY_CONN_IMG;
-            else arrConnectImagesNew[arrConnectImagesNew.length - 1] = TreeRowObject.LINE_CONN_IMG;
-
-            for (Iterator iter = objTreeModel.getTreeDataModel().getChildren(
-                    objParent); iter.hasNext();) {
-                Object objChild = iter.next();
-                Object objChildUID = objTreeModel.getTreeDataModel()
-                        .getUniqueKey(objChild, objParentUID);
-                boolean bChildLast = !iter.hasNext();
-                if (bChildLast)
-                    rowPositionType = TreeRowObject.LAST_ROW;
-                else rowPositionType = TreeRowObject.MIDDLE_ROW;
-                walkTree(objChild, objChildUID, nDepth + 1, objTreeModel,
-                         writer, cycle, rowPositionType, arrConnectImagesNew,
-                         bChildLast);
-            }
-        }
-    }
-
-    public int getTreeDeep()
-    {
-        return m_nTreeDeep;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeRowSource#getTreeRow()
-     */
-    public TreeRowObject getTreeRow()
-    {
-        return getTreeRowObject();
-    }
-
-    public TreeRowObject getTreeRowObject()
-    {
-        return m_objTreeRowObject;
-    }
-
-    public void setTreeRowObject(TreeRowObject object)
-    {
-        m_objTreeRowObject = object;
-    }
-
-    public abstract boolean getShowRootNode();
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeDataView.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeDataView.jwc
deleted file mode 100644
index 73a2d89..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeDataView.jwc
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.tree.components.TreeDataView"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <parameter name="treeView" required="yes"/>
-
-    <parameter name="value"/>
-    <parameter name="showRootNode" default-value="true"/>
-
-    <component id="renderBody" type="RenderBody"/>
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeView.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeView.html
deleted file mode 100644
index 3e541f5..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeView.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$">
-	    <span jwcid="class"><span jwcid="foreachConnectImage"><img jwcid="connectImage" valign="top"/></span><span jwcid="makeNodeDirect"><a jwcid="expandCollapsDirect"><span jwcid="showImages"><img jwcid="imageNode"/></span></a><a jwcid="nodeDirect"><span jwcid="insertValue"/></a></span><span jwcid="makeNodeNoDirect"><span jwcid="showImages2"><img jwcid="imageNode2"/></span><span jwcid="insertValue2"/></span></span>
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeView.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeView.java
deleted file mode 100644
index 7630b70..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeView.java
+++ /dev/null
@@ -1,630 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
-import org.apache.tapestry.contrib.tree.model.ITreeStateListener;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-import org.apache.tapestry.contrib.tree.model.TreeRowObject;
-import org.apache.tapestry.contrib.tree.model.TreeStateEvent;
-import org.apache.tapestry.contrib.tree.simple.SimpleNodeRenderFactory;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author tsveltin?
- */
-public abstract class TreeNodeView extends BaseComponent implements
-        PageDetachListener
-{
-
-    private static final Log LOG = LogFactory.getLog(TreeNodeView.class);
-
-    private Boolean m_objNodeState;
-
-    private Boolean m_objShowNodeImages;
-
-    private INodeRenderFactory m_objNodeRenderFactory;
-
-    private IAsset m_objOpenNodeImage;
-
-    private IAsset m_objCloseNodeImage;
-
-    private int m_currentForeachConnectImageValue = TreeRowObject.LINE_CONN_IMG;
-
-    /**
-     * Creates tree .
-     *
-     */
-    public TreeNodeView()
-    {
-        super();
-        initialize();
-    }
-    
-    public abstract INodeRenderFactory getNodeRenderFactoryParameter();
-
-    public abstract Boolean getShowNodeImages();
-    
-    private void initialize()
-    {
-        m_objNodeState = null;
-        m_objShowNodeImages = null;
-        m_objNodeRenderFactory = null;
-        m_currentForeachConnectImageValue = TreeRowObject.LINE_CONN_IMG;
-    }
-
-    public IRender getCurrentRenderer()
-    {
-        INodeRenderFactory objRenderFactory = getNodeRenderFactory();
-        ITreeRowSource objTreeRowSource = getTreeRowSource();
-        return objRenderFactory.getRender(objTreeRowSource.getTreeRow()
-                .getTreeNode(), getTreeModelSource(), getPage()
-                .getRequestCycle());
-    }
-
-    public Object[] getNodeContext()
-    {
-        ITreeModelSource objModelSource = getTreeModelSource();
-        ComponentAddress objModelSourceAddress = new ComponentAddress(
-                objModelSource);
-        ITreeRowSource objTreeRowSource = getTreeRowSource();
-        TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
-        Object objValueUID = objTreeRowObject.getTreeNodeUID();
-        if (LOG.isDebugEnabled())
-        {
-            LOG.debug("getNodeContext objValueUID = " + objValueUID);
-        }
-
-        return new Object[] { objValueUID, new Boolean(isNodeOpen()),
-                objModelSourceAddress };
-    }
-
-    /**
-     * Called when a node in the tree is clicked by the user. If the node is
-     * expanded, it will be collapsed, and vice-versa, that is, the tree state
-     * model is retrieved, and it is told to collapse or expand the node.
-     * 
-     * @param cycle
-     *            The Tapestry request cycle object.
-     */
-    public void nodeExpandCollaps(IRequestCycle cycle)
-    {
-        Object[] context = cycle.getListenerParameters();
-        Object objValueUID = null;
-        if (context != null && context.length > 0)
-        {
-            objValueUID = context[0];
-        }
-        ComponentAddress objModelSourceAddress = (ComponentAddress) context[2];
-        ITreeModelSource objTreeModelSource = (ITreeModelSource) objModelSourceAddress
-                .findComponent(cycle);
-        // ITreeModelSource objTreeModelSource = getTreeModelSource();
-        ITreeStateModel objStateModel = objTreeModelSource.getTreeModel()
-                .getTreeStateModel();
-        boolean bState = objStateModel.isUniqueKeyExpanded(objValueUID);
-
-        if (bState)
-        {
-            objStateModel.collapse(objValueUID);
-            fireNodeCollapsed(objValueUID, objTreeModelSource);
-        }
-        else
-        {
-            objStateModel.expandPath(objValueUID);
-            fireNodeExpanded(objValueUID, objTreeModelSource);
-        }
-    }
-
-    /**
-     * Called when a node in the tree is selected by the user. the tree state
-     * model is retrieved, and it is told to select the node.
-     * 
-     * @param cycle
-     *            The Tapestry request cycle object.
-     */
-    public void nodeSelect(IRequestCycle cycle)
-    {
-        Object[] context = cycle.getListenerParameters();
-        Object objValueUID = null;
-        if (context != null && context.length > 0)
-        {
-            objValueUID = context[0];
-        }
-        ComponentAddress objModelSourceAddress = (ComponentAddress) context[2];
-        ITreeModelSource objTreeModelSource = (ITreeModelSource) objModelSourceAddress
-                .findComponent(cycle);
-        // ITreeModelSource objTreeModelSource = getTreeModelSource();
-        ITreeStateModel objStateModel = objTreeModelSource.getTreeModel()
-                .getTreeStateModel();
-        Object objSelectedNodeInState = objStateModel.getSelectedNode();
-
-        if (objValueUID.equals(objSelectedNodeInState))
-        {
-            // do nothing, the selected node in UI is the same as the selected
-            // in
-            // state model. The user should use refresh of back button.
-            return;
-        }
-
-        objStateModel.setSelectedNode(objValueUID);
-        fireNodeSelected(objValueUID, objTreeModelSource);
-    }
-
-    private void fireNodeSelected(Object objValueUID,
-            ITreeModelSource objTreeModelSource)
-    {
-        deliverEvent(TreeStateEvent.SELECTED_NODE_CHANGED, objValueUID,
-                objTreeModelSource);
-    }
-
-    private void fireNodeCollapsed(Object objValueUID,
-            ITreeModelSource objTreeModelSource)
-    {
-        deliverEvent(TreeStateEvent.NODE_COLLAPSED, objValueUID,
-                objTreeModelSource);
-    }
-
-    private void fireNodeExpanded(Object objValueUID,
-            ITreeModelSource objTreeModelSource)
-    {
-        deliverEvent(TreeStateEvent.NODE_EXPANDED, objValueUID,
-                objTreeModelSource);
-    }
-
-    private void deliverEvent(int nEventUID, Object objValueUID,
-            ITreeModelSource objTreeModelSource)
-    {
-        ITreeStateListener objListener = objTreeModelSource
-                .getTreeStateListener();
-        if (objListener != null)
-        {
-            TreeStateEvent objEvent = new TreeStateEvent(nEventUID,
-                    objValueUID, objTreeModelSource.getTreeModel()
-                            .getTreeStateModel());
-            objListener.treeStateChanged(objEvent);
-        }
-
-    }
-
-    public void pageDetached(PageEvent arg0)
-    {
-        initialize();
-    }
-
-    public void finishLoad(IRequestCycle objCycle, IPageLoader arg0,
-            ComponentSpecification arg1)
-    {
-        super.finishLoad(objCycle, arg0, arg1);
-        getPage().addPageDetachListener(this);
-
-        m_objOpenNodeImage = getAsset("_openNodeImage");
-        m_objCloseNodeImage = getAsset("_closeNodeImage");
-    }
-
-    public boolean isNodeOpen()
-    {
-        if (m_objNodeState == null)
-        {
-            ITreeRowSource objTreeRowSource = getTreeRowSource();
-            TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
-            Object objValueUID = objTreeRowObject.getTreeNodeUID();
-            ITreeModelSource objTreeModelSource = getTreeModelSource();
-            ITreeStateModel objStateModel = objTreeModelSource.getTreeModel()
-                    .getTreeStateModel();
-            boolean bState = objStateModel.isUniqueKeyExpanded(objValueUID);
-            m_objNodeState = new Boolean(bState);
-        }
-        return m_objNodeState.booleanValue();
-    }
-
-    /**
-     * Returns the openNodeImage.
-     * 
-     * @return IAsset
-     */
-    public IAsset getNodeImage()
-    {
-        IAsset objResult = null;
-        ITreeRowSource objRowSource = getTreeRowSource();
-        boolean bLeaf = objRowSource.getTreeRow().getLeaf();
-        int nRowType = objRowSource.getTreeRow().getTreeRowPossiotionType();
-        if (!bLeaf)
-        {
-            if (isNodeOpen())
-            {
-                switch(nRowType)
-                {
-                case TreeRowObject.FIRST_LAST_ROW:
-                {
-                    objResult = getAsset("_topLastOpenNodeImage");
-                    break;
-                }
-
-                case TreeRowObject.FIRST_ROW:
-                {
-                    objResult = getAsset("_topOpenNodeImage");
-                    break;
-                }
-
-                case TreeRowObject.MIDDLE_ROW:
-                {
-                    objResult = getAsset("_middleOpenNodeImage");
-                    break;
-                }
-
-                case TreeRowObject.LAST_ROW:
-                {
-                    objResult = getAsset("_bottomOpenNodeImage");
-                    break;
-                }
-
-                default:
-                {
-                    objResult = getAsset("_openNodeImage");
-                    break;
-                }
-                }
-            }
-            else
-            {
-                switch(nRowType)
-                {
-                case TreeRowObject.FIRST_LAST_ROW:
-                {
-                    objResult = getAsset("_topLastCloseNodeImage");
-                    break;
-                }
-
-                case TreeRowObject.FIRST_ROW:
-                {
-                    objResult = getAsset("_topCloseNodeImage");
-                    break;
-                }
-
-                case TreeRowObject.MIDDLE_ROW:
-                {
-                    objResult = getAsset("_middleCloseNodeImage");
-                    break;
-                }
-
-                case TreeRowObject.LAST_ROW:
-                {
-                    objResult = getAsset("_bottomCloseNodeImage");
-                    break;
-                }
-
-                default:
-                {
-                    objResult = getAsset("_closeNodeImage");
-                    break;
-                }
-                }
-            }
-        }
-        else
-        {
-            switch(nRowType)
-            {
-            case TreeRowObject.FIRST_LAST_ROW:
-            {
-                objResult = getAsset("_topLineImage");
-                break;
-            }
-
-            case TreeRowObject.FIRST_ROW:
-            {
-                objResult = getAsset("_topLineImage");
-                break;
-            }
-
-            case TreeRowObject.MIDDLE_ROW:
-            {
-                objResult = getAsset("_middleCrossLineImage");
-                break;
-            }
-
-            case TreeRowObject.LAST_ROW:
-            {
-                objResult = getAsset("_bottomLineImage");
-                break;
-            }
-
-            default:
-            {
-                objResult = getAsset("_bottomLineImage");
-                break;
-            }
-            }
-
-        }
-        return objResult;
-    }
-
-    public IAsset getNodeImageOld()
-    {
-        if (isNodeOpen())
-        {
-            if (m_objOpenNodeImage == null)
-            {
-                m_objOpenNodeImage = getAsset("_openNodeImage");
-            }
-            return m_objOpenNodeImage;
-        }
-
-        if (m_objCloseNodeImage == null)
-        {
-            m_objCloseNodeImage = getAsset("_closeNodeImage");
-        }
-        return m_objCloseNodeImage;
-    }
-
-    /**
-     * Returns the closeNodeImage.
-     * 
-     * @return IAsset
-     */
-    public IAsset getCloseNodeImage()
-    {
-        return m_objCloseNodeImage;
-    }
-
-    /**
-     * Returns the openNodeImage.
-     * 
-     * @return IAsset
-     */
-    public IAsset getOpenNodeImage()
-    {
-        return m_objOpenNodeImage;
-    }
-
-    /**
-     * Sets the closeNodeImage.
-     * 
-     * @param closeNodeImage
-     *            The closeNodeImage to set
-     */
-    public void setCloseNodeImage(IAsset closeNodeImage)
-    {
-        m_objCloseNodeImage = closeNodeImage;
-    }
-
-    /**
-     * Sets the openNodeImage.
-     * 
-     * @param openNodeImage
-     *            The openNodeImage to set
-     */
-    public void setOpenNodeImage(IAsset openNodeImage)
-    {
-        m_objOpenNodeImage = openNodeImage;
-    }
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#renderComponent(IMarkupWriter,
-     *      IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter arg0, IRequestCycle arg1)
-    {
-        super.renderComponent(arg0, arg1);
-        m_objNodeState = null;
-    }
-
-    /**
-     * Returns the ShowNodeImages.
-     * 
-     * @return Boolean
-     */
-    public Boolean isShowNodeImages()
-    {
-        if (m_objShowNodeImages == null)
-        {
-            if (isParameterBound("nodeRenderFactory"))
-            {
-                m_objShowNodeImages = getShowNodeImages();
-            }
-            else
-            {
-                m_objShowNodeImages = Boolean.TRUE;
-            }
-
-        }
-        return m_objShowNodeImages;
-    }
-
-    public boolean getShowImages()
-    {
-        boolean bResult = isShowNodeImages().booleanValue();
-        return bResult;
-    }
-
-    public boolean getShowWithoutImages()
-    {
-        boolean bResult = !isShowNodeImages().booleanValue();
-        return bResult;
-    }
-
-    public String getOffsetStyle()
-    {
-        // return "width: " + getTreeDataView().getTreeDeep() * 15;
-        ITreeRowSource objTreeRowSource = getTreeRowSource();
-        TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
-        int nTreeRowDepth = 0;
-        if (objTreeRowObject != null)
-        {
-            nTreeRowDepth = objTreeRowObject.getTreeRowDepth();
-            if (nTreeRowDepth != 0) nTreeRowDepth = nTreeRowDepth - 1;
-        }
-        return "padding-left: " + nTreeRowDepth * 19 + "px";
-    }
-
-    public INodeRenderFactory getNodeRenderFactory()
-    {
-        if (m_objNodeRenderFactory == null)
-        {
-            if (isParameterBound("nodeRenderFactory"))
-                m_objNodeRenderFactory = getNodeRenderFactoryParameter();
-            else m_objNodeRenderFactory = new SimpleNodeRenderFactory();
-        }
-        return m_objNodeRenderFactory;
-    }
-
-    public abstract boolean getMakeNodeDirect();
-
-    public boolean getMakeNodeNoDirect()
-    {
-        return !getMakeNodeDirect();
-    }
-
-    public String getCleanSelectedID()
-    {
-        return getSelectedNodeID();
-    }
-
-    public String getSelectedID()
-    {
-        ITreeRowSource objTreeRowSource = getTreeRowSource();
-        ITreeModelSource objTreeModelSource = getTreeModelSource();
-        TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
-        Object objNodeValueUID = objTreeRowObject.getTreeNodeUID();
-        Object objSelectedNode = objTreeModelSource.getTreeModel()
-                .getTreeStateModel().getSelectedNode();
-        if (objNodeValueUID.equals(objSelectedNode)) { return getSelectedNodeID(); }
-        return "";
-    }
-
-    private String getSelectedNodeID()
-    {
-        // return getTreeDataView().getTreeView().getSelectedNodeID();
-        return "tree";
-    }
-
-    public String getNodeStyleClass()
-    {
-        ITreeRowSource objTreeRowSource = getTreeRowSource();
-        ITreeModelSource objTreeModelSource = getTreeModelSource();
-        TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
-        boolean bResult = false;
-        if (objTreeRowObject != null)
-        {
-            Object objNodeValueUID = objTreeRowObject.getTreeNodeUID();
-            Object objSelectedNode = objTreeModelSource.getTreeModel()
-                    .getTreeStateModel().getSelectedNode();
-            bResult = objNodeValueUID.equals(objSelectedNode);
-        }
-        if (bResult) { return "selectedNodeViewClass"; }
-
-        return "notSelectedNodeViewClass";
-    }
-
-    public ITreeRowSource getTreeRowSource()
-    {
-        ITreeRowSource objSource = (ITreeRowSource) getPage().getRequestCycle()
-                .getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
-        return objSource;
-    }
-
-    public ITreeModelSource getTreeModelSource()
-    {
-        ITreeModelSource objSource = (ITreeModelSource) getPage()
-                .getRequestCycle().getAttribute(
-                        ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE);
-        return objSource;
-    }
-
-    public boolean getShowConnectImage()
-    {
-        ITreeRowSource objRowSource = getTreeRowSource();
-        int nRowType = objRowSource.getTreeRow().getTreeRowPossiotionType();
-        if (TreeRowObject.MIDDLE_ROW == nRowType) return true;
-        return false;
-    }
-
-    public int[] getForeachConnectImageList()
-    {
-        ITreeRowSource objTreeRowSource = getTreeRowSource();
-        TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
-        return objTreeRowObject.getLineConnImages();
-    }
-
-    public boolean getDisableLink()
-    {
-        ITreeRowSource objRowSource = getTreeRowSource();
-        boolean bLeaf = objRowSource.getTreeRow().getLeaf();
-        return bLeaf;
-    }
-
-    /**
-     * Returns the openNodeImage.
-     * 
-     * @return IAsset nevalidno neshto
-     */
-    public IAsset getConnectImage()
-    {
-        IAsset objResult = null;
-        int nConnectImageType = getCurrentForeachConnectImageValue();
-        switch(nConnectImageType)
-        {
-        case TreeRowObject.EMPTY_CONN_IMG:
-        {
-            objResult = getAsset("_whiteSpaceImage");
-            break;
-        }
-
-        case TreeRowObject.LINE_CONN_IMG:
-        {
-            objResult = getAsset("_middleLineImage");
-            break;
-        }
-
-        default:
-        {
-            objResult = getAsset("_whiteSpaceImage");
-            break;
-        }
-        }
-        return objResult;
-    }
-
-    /**
-     * @return Returns the m_CurrentForeachConnectImageValue.
-     */
-    public int getCurrentForeachConnectImageValue()
-    {
-        return m_currentForeachConnectImageValue;
-    }
-
-    /**
-     * @param currentForeachConnectImageValue
-     *            The m_CurrentForeachConnectImageValue to set.
-     */
-    public void setCurrentForeachConnectImageValue(
-            int currentForeachConnectImageValue)
-    {
-        m_currentForeachConnectImageValue = currentForeachConnectImageValue;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeView.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeView.jwc
deleted file mode 100644
index c00b601..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeView.jwc
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification
-    class="org.apache.tapestry.contrib.tree.components.TreeNodeView"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <parameter name="showNodeImages" default-value="true"/>
-    <parameter name="makeNodeDirect" default-value="true"/>
-
-    <parameter name="nodeRenderFactory"
-                required="no"  property="nodeRenderFactoryParameter"/>
-
-    <reserved-parameter name="treedataview"/>
-    <reserved-parameter name="nodeviewdirect"/>
-
-    <component id="expandCollapsDirect" type="DirectLink">
-        <binding name="parameters" value="nodeContext"/>
-        <binding name="listener" value="listeners.nodeExpandCollaps"/>
-        <binding name="stateful" value="false"/>
-        <binding name="name" value="selectedID"/>
-        <binding name="anchor" value="cleanSelectedID"/>
-        <binding name="disabled" value="disableLink"/>
-    </component>
-
-    <component id="nodeDirect" type="DirectLink">
-        <binding name="parameters" value="nodeContext"/>
-        <binding name="listener" value="listeners.nodeSelect"/>
-        <binding name="stateful" value="false"/>
-        <binding name="name" value="selectedID"/>
-        <binding name="anchor" value="cleanSelectedID"/>
-    </component>
-    
-    <component id="showImages" type="If">
-        <binding name="condition" value="showImages"/>
-    </component>
-
-    <component id="showImages2" copy-of="showImages"/>
-
-    <component id="makeNodeDirect" type="If">
-        <binding name="condition" value="makeNodeDirect"/>
-    </component>
-
-    <component id="makeNodeNoDirect" type="If">
-        <binding name="condition" value="makeNodeNoDirect"/>
-    </component>
-
-    <component id="imageNode" type="Image">
-        <binding name="image" value="nodeImage"/>
-    </component>
-    <component id="imageNode2" copy-of="imageNode"/>
-
-    <component id="insertValue" type="Delegator">
-		<binding name="delegate" value="currentRenderer"/>
-    </component>
-    <component id="insertValue2" copy-of="insertValue"/>
-
-    <component id="class" type="Any">
-        <binding name="element" value="literal:div"/>
-        <binding name="class" value="nodeStyleClass"/>
-    </component>
-    
-    <asset name="_topCloseNodeImage" path="TopPlus.gif"/>
-    <asset name="_topOpenNodeImage" path="TopMinus.gif"/>
-    <asset name="_topLineImage" path="TopLine.gif"/>
-    
-    <asset name="_topLastOpenNodeImage" path="TopLastMinus.gif"/>
-    <asset name="_topLastCloseNodeImage" path="TopLastPlus.gif"/>
-    
-    <asset name="_middleCloseNodeImage" path="MiddlePlus.gif"/>
-    <asset name="_middleOpenNodeImage" path="MiddleMinus.gif"/>
-    <asset name="_middleCrossLineImage" path="MiddleCrossLine.gif"/>
-    <asset name="_middleLineImage" path="MiddleLine.gif"/>
-    
-    <asset name="_bottomCloseNodeImage" path="BottomPlus.gif"/>
-    <asset name="_bottomOpenNodeImage" path="BottomMinus.gif"/>
-    <asset name="_bottomLineImage" path="BottomLine.gif"/>
-    
-    <asset name="_whiteSpaceImage" path="WhiteSpace.gif"/>
-    
-    <component id="showConnectImage" type="If">
-        <binding name="condition" value="showConnectImage"/>
-    </component>
-    <component id="connectImage" type="Image">
-        <binding name="image" value="connectImage"/>
-    </component>
-    <component id="foreachConnectImage" type="For">
-        <binding name="source" value="foreachConnectImageList"/>
-        <binding name="value" value="currentForeachConnectImageValue"/>
-    </component>
-    
-    
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.html
deleted file mode 100644
index 6b11e7a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$">
-	<span jwcid="treeNodeView"/>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.page b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.page
deleted file mode 100644
index 8acd732..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-    <component id="treeNodeView" type="TreeNodeView">
-    </component>
-
-</page-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.html
deleted file mode 100644
index 831ec91..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="$content$">
-    <span jwcid="any">
-        <span jwcid="renderBody"/>
-    </span>
-</span>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.java
deleted file mode 100644
index 09ae554..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.java
+++ /dev/null
@@ -1,372 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.contrib.tree.model.ISessionStoreManager;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-import org.apache.tapestry.contrib.tree.model.ITreeStateListener;
-import org.apache.tapestry.contrib.tree.simple.FullTreeSessionStateManager;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- */
-public abstract class TreeView extends BaseComponent implements
-        PageDetachListener, PageBeginRenderListener, ITreeModelSource
-{
-
-    private static final Log LOG = LogFactory.getLog(TreeView.class);
-
-    private IBinding m_objSessionStoreManagerBinding;
-
-    private IBinding m_objTreeModelBinding;
-
-    private IBinding m_objSessionStateManagerBinding;
-
-    private ITreeModel m_objTreeModel;
-
-    private ITreeSessionStateManager m_objTreeSessionStateManager;
-
-    private ISessionStoreManager m_objSessionStoreManager;
-
-    private Object m_objTreeSessionState;
-
-    private ComponentAddress m_objComponentAddress;
-
-    public TreeView()
-    {
-        super();
-        initialize();
-    }
-
-    private void initialize()
-    {
-        m_objTreeModel = null;
-        m_objTreeSessionStateManager = null;
-        m_objSessionStoreManager = null;
-        m_objTreeSessionState = null;
-        m_objComponentAddress = null;
-    }
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#renderComponent(IMarkupWriter,
-     *      IRequestCycle)
-     */
-
-    /**
-     * @see org.apache.tapestry.event.PageDetachListener#pageDetached(PageEvent)
-     */
-    public void pageDetached(PageEvent arg0)
-    {
-        initialize();
-    }
-
-    /**
-     * @see org.apache.tapestry.event.PageRenderListener#pageBeginRender(PageEvent)
-     */
-    public void pageBeginRender(PageEvent arg0)
-    {
-        if (arg0.getRequestCycle().isRewinding()) { return; }
-        storeSesion();
-    }
-
-    /**
-     * Returns the treeModelBinding.
-     * 
-     * @return IBinding
-     */
-    public IBinding getTreeModelBinding()
-    {
-        return m_objTreeModelBinding;
-    }
-
-    /**
-     * Sets the treeModelBinding.
-     * 
-     * @param treeModelBinding
-     *            The treeModelBinding to set
-     */
-    public void setTreeModelBinding(IBinding treeModelBinding)
-    {
-        m_objTreeModelBinding = treeModelBinding;
-    }
-
-    /**
-     * Returns the SessionStoreManagerBinding.
-     * 
-     * @return IBinding
-     */
-    public IBinding getSessionStoreManagerBinding()
-    {
-        return m_objSessionStoreManagerBinding;
-    }
-
-    /**
-     * Returns the sessionStateManagerBinding.
-     * 
-     * @return IBinding
-     */
-    public IBinding getSessionStateManagerBinding()
-    {
-        return m_objSessionStateManagerBinding;
-    }
-
-    /**
-     * Sets the SessionStoreManagerBinding.
-     * 
-     * @param sessionStoreManagerBinding
-     *            The SessionStoreManagerBinding to set
-     */
-    public void setSessionStoreManagerBinding(
-            IBinding sessionStoreManagerBinding)
-    {
-        m_objSessionStoreManagerBinding = sessionStoreManagerBinding;
-    }
-
-    /**
-     * Sets the sessionStateManagerBinding.
-     * 
-     * @param sessionStateManagerBinding
-     *            The sessionStateManagerBinding to set
-     */
-    public void setSessionStateManagerBinding(
-            IBinding sessionStateManagerBinding)
-    {
-        m_objSessionStateManagerBinding = sessionStateManagerBinding;
-    }
-
-    private void extractTreeModel()
-    {
-        if (LOG.isDebugEnabled())
-        {
-            LOG.debug("TreeView.extractTreeModel()");
-        }
-
-        ISessionStoreManager objHolder = getSessionStoreManager();
-        ITreeSessionStateManager objSessionManager = getTreeSessionStateMgr();
-        Object objSessionState;
-        if (objHolder == null)
-        {
-            objSessionState = getTreeSessionState();
-        }
-        else
-        {
-            objSessionState = objHolder.getSessionState(this.getPage(),
-                    "treeSessionState");
-        }
-
-        if (objSessionState != null)
-        {
-            m_objTreeModel = objSessionManager.getModel(objSessionState);
-        }
-        else
-        {
-            if (LOG.isDebugEnabled())
-            {
-                LOG.debug("TreeView.extractTreeModel() from BINDING");
-            }
-
-            m_objTreeModel = (ITreeModel) getTreeModelBinding().getObject();
-        }
-
-    }
-
-    private void storeSesion()
-    {
-        if (LOG.isDebugEnabled())
-        {
-            LOG.debug("TreeView.storeSesion()");
-        }
-
-        ITreeSessionStateManager objSessionManager = getTreeSessionStateMgr();
-        Object objSessionState = objSessionManager
-                .getSessionState(getTreeModel());
-
-        store(objSessionState);
-    }
-
-    private void store(Object objSessionState)
-    {
-        ISessionStoreManager objHolder = getSessionStoreManager();
-
-        if (objHolder == null)
-        {
-            Tapestry.fireObservedChange(this, "treeSessionState",
-                    objSessionState);
-        }
-        else
-        {
-            // String strPath = "treeSessionState";
-            String strPath = getExtendedId();
-            if (LOG.isDebugEnabled())
-                LOG.debug("store(): setting state with: " + strPath);
-            objHolder.setSessionState(this.getPage(), strPath, objSessionState);
-        }
-    }
-
-    /**
-     * @see ITreeComponent#resetState()
-     */
-    public void resetState()
-    {
-        if (LOG.isDebugEnabled())
-        {
-            LOG.debug("TreeView.resetState()");
-        }
-        initialize();
-        store(null);
-    }
-
-    /**
-     * Returns the SessionStoreManager.
-     * 
-     * @return ISessionStoreManager
-     */
-    public ISessionStoreManager getSessionStoreManager()
-    {
-        if (m_objSessionStoreManager == null
-                && getSessionStoreManagerBinding() != null)
-        {
-            m_objSessionStoreManager = (ISessionStoreManager) getSessionStoreManagerBinding()
-                    .getObject();
-        }
-
-        return m_objSessionStoreManager;
-    }
-
-    /**
-     * Returns the wizardSessionStateMgr.
-     * 
-     * @return IWizardSessionStateManager
-     */
-    public ITreeSessionStateManager getTreeSessionStateMgr()
-    {
-        if (m_objTreeSessionStateManager == null)
-        {
-            IBinding objBinding = getSessionStateManagerBinding();
-            if (objBinding != null)
-            {
-                Object objManager = objBinding.getObject();
-                m_objTreeSessionStateManager = (ITreeSessionStateManager) objManager;
-            }
-            else
-            {
-                m_objTreeSessionStateManager = new FullTreeSessionStateManager();
-            }
-        }
-        return m_objTreeSessionStateManager;
-    }
-
-    public ComponentAddress getComponentPath()
-    {
-        if (m_objComponentAddress == null)
-        {
-            m_objComponentAddress = new ComponentAddress(this);
-        }
-        return m_objComponentAddress;
-    }
-
-    /**
-     * Returns the treeModel.
-     * 
-     * @return ITreeModel
-     */
-    public ITreeModel getTreeModel()
-    {
-        if (m_objTreeModel == null)
-        {
-            extractTreeModel();
-        }
-        return m_objTreeModel;
-    }
-
-    /**
-     * Sets the treeModel.
-     * 
-     * @param treeModel
-     *            The treeModel to set
-     */
-    public void setTreeModel(ITreeModel treeModel)
-    {
-        m_objTreeModel = treeModel;
-    }
-
-    /**
-     * Returns the treeSessionState.
-     * 
-     * @return Object
-     */
-    public Object getTreeSessionState()
-    {
-        return m_objTreeSessionState;
-    }
-
-    /**
-     * Sets the treeSessionState.
-     * 
-     * @param treeSessionState
-     *            The treeSessionState to set
-     */
-    public void setTreeSessionState(Object treeSessionState)
-    {
-        m_objTreeSessionState = treeSessionState;
-    }
-
-    public String getSelectedNodeStyleID()
-    {
-        return getId() + ":selected";
-    }
-
-    /**
-     * @see org.apache.tapestry.BaseComponent#renderComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter arg0, IRequestCycle arg1)
-    {
-        Object objExistedTreeModelSource = arg1
-                .getAttribute(ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE);
-        arg1.setAttribute(ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE, this);
-
-        super.renderComponent(arg0, arg1);
-        arg1.setAttribute(ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE,
-                objExistedTreeModelSource);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeModelSource#getTreeStateListener()
-     */
-    public ITreeStateListener getTreeStateListener()
-    {
-        ITreeStateListener objListener = null;
-        IBinding objBinding = getBinding("treeStateListener");
-        if (objBinding != null)
-        {
-            objListener = (ITreeStateListener) objBinding.getObject();
-        }
-        return objListener;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.jwc
deleted file mode 100644
index 341e493..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.jwc
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.tree.components.TreeView"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <parameter name="sessionStateManager"/>
-
-    <parameter name="sessionStoreManager"/>
-
-    <parameter name="treeModel" required="yes"/>
-
-    <parameter name="treeStateListener"/>
-
-    <component id="any" type="Any" inherit-informal-parameters="yes"/>
-
-    <component id="renderBody" type="RenderBody"/>
-    
-    <property name="treeSessionState" persist="session"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.script b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.script
deleted file mode 100644
index 05d054d..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/TreeView.script
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC "-//Howard Ship//Tapestry Script 1.1//EN"

-  "http://tapestry.sf.net/dtd/Script_1_1.dtd">

-

-<script>

- <body>

-	function select(){

-		var objNode = document.getElementById("<insert property-path="selectedNodeID"/>");

-		window.scrollTo(0, objNode.y);

-	}

-		

- </body>

-	<initialization>

-		select();

-	</initialization>

-</script>

diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/WhiteSpace.gif b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/WhiteSpace.gif
deleted file mode 100644
index 6a62ac8..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/WhiteSpace.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/package.html
deleted file mode 100644
index e218f71..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>The tapestry contributed tree component. Defines models and other 
-semantics common to the Table component.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTable.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTable.html
deleted file mode 100644
index 60f27d6..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTable.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<span jwcid="$content$">
-	<span class="tree" jwcid="treeView">
-		<span jwcid="treeTableDataView"/>
-	</span>		
-</span>		
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTable.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTable.java
deleted file mode 100644
index a3800b1..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTable.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components.table;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.contrib.tree.components.ITreeComponent;
-import org.apache.tapestry.contrib.tree.components.TreeView;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author ceco
- */
-public abstract class TreeTable extends BaseComponent implements ITreeComponent
-{
-
-    /**
-     * 
-     */
-    public TreeTable()
-    {
-        super();
-    }
-
-    public ITreeModelSource getTreeModelSource()
-    {
-        return (ITreeModelSource) getComponent("treeView");
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#resetState()
-     */
-    public void resetState()
-    {
-        TreeView objTreeView = (TreeView) getComponent("treeView");
-        objTreeView.resetState();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#getComponentPath()
-     */
-    public ComponentAddress getComponentPath()
-    {
-        return new ComponentAddress(this);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#getTreeRowSource()
-     */
-    public ITreeRowSource getTreeRowSource()
-    {
-        TreeTableDataView objTreeDataView = (TreeTableDataView) getComponent("treeTableDataView");
-        return objTreeDataView;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTable.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTable.jwc
deleted file mode 100644
index bd0ae29..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTable.jwc
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.tree.components.table.TreeTable"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <parameter name="sessionStateManager"
-        type="org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager"
-        direction="custom" required="no"/>
-
-    <parameter name="sessionStoreManager"
-        type="org.apache.tapestry.contrib.tree.model.ISessionStoreManager"
-        direction="custom" required="no"/>
-
-    <parameter name="treeModel"
-        type="org.apache.tapestry.contrib.tree.model.ITreeModel"
-        direction="custom" required="yes">
-    </parameter>
-
-    <parameter name="treeStateListener"
-        type="org.apache.tapestry.contrib.tree.model.ITreeStateListener"
-        direction="custom" required="no">
-    </parameter>
-
-	<parameter name="entriesPerTablePage" 
-		type="int" 
-		required="no"
-		direction="custom"/>
-
-    <parameter name="nodeViewComponentAddress"
-               type="org.apache.tapestry.util.ComponentAddress"
-               required="no" direction="custom"/>
-
-    <parameter name="tableColumns"
-               type="java.util.ArrayList"
-               required="no" direction="custom"/>
-
-    <parameter name="showRootNode" type="boolean" required="no"
-               direction="custom"/>
-    
-    <parameter name="nodeRenderFactory"
-               type="org.apache.tapestry.contrib.tree.components.INodeRenderFactory"
-               required="no" direction="custom"/>
-    
-    <component id="treeView" type="TreeView">
-        <inherited-binding name="sessionStateManager" parameter-name="sessionStateManager"/>
-        <inherited-binding name="sessionStoreManager" parameter-name="sessionStoreManager"/>
-        <inherited-binding name="treeModel" parameter-name="treeModel"/>
-        <inherited-binding name="treeStateListener" parameter-name="treeStateListener"/>
-    </component>
-
-    <component id="treeTableDataView" type="TreeTableDataView">
-        <binding name="treeView" expression='components.treeView'/>
-        <inherited-binding name="nodeViewComponentAddress" parameter-name="nodeViewComponentAddress"/>
-        <inherited-binding name="entriesPerTablePage" parameter-name="entriesPerTablePage"/>
-        <inherited-binding name="tableColumns" parameter-name="tableColumns"/>
-        <inherited-binding name="showRootNode" parameter-name="showRootNode"/>
-    </component>
-
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableColumn.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableColumn.java
deleted file mode 100644
index 6529f5e..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableColumn.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components.table;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author ceco
- */
-public class TreeTableColumn extends SimpleTableColumn
-{
-
-    private static final long serialVersionUID = -8046804468741132535L;
-
-    /**
-     * @param arg0
-     * @param arg1
-     */
-    public TreeTableColumn(String arg0, boolean arg1,
-            ComponentAddress objComponentAddress)
-    {
-        super(arg0, arg1);
-        setValueRendererSource(new TreeTableValueRenderSource(
-                objComponentAddress));
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn#getValueRenderer(org.apache.tapestry.IRequestCycle,
-     *      org.apache.tapestry.contrib.table.model.ITableModelSource,
-     *      java.lang.Object)
-     */
-    public IRender getValueRenderer(IRequestCycle arg0, ITableModelSource arg1,
-            Object arg2)
-    {
-        return super.getValueRenderer(arg0, arg1, arg2);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.html
deleted file mode 100644
index 5efd7af..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$">
-	<span jwcid="table"/>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.java
deleted file mode 100644
index 9351bcf..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.java
+++ /dev/null
@@ -1,288 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components.table;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
-import org.apache.tapestry.contrib.table.model.simple.SimpleListTableDataModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableSessionStateManager;
-import org.apache.tapestry.contrib.tree.model.*;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- */
-public abstract class TreeTableDataView extends BaseComponent implements
-        ITreeRowSource, PageDetachListener
-{
-
-    private int m_nTreeDeep = -1;
-
-    private TreeRowObject m_objTreeRowObject = null;
-
-    private ArrayList m_arrAllExpandedNodes = null;
-
-    public TreeTableDataView()
-    {
-        super();
-        initialize();
-    }
-
-    public void initialize()
-    {
-        m_nTreeDeep = -1;
-        // m_objTableModel = null;
-        m_objTreeRowObject = null;
-        m_arrAllExpandedNodes = null;
-    }
-
-    /**
-     * @see org.apache.tapestry.event.PageDetachListener#pageDetached(org.apache.tapestry.event.PageEvent)
-     */
-    public void pageDetached(PageEvent event)
-    {
-        initialize();
-    }
-
-    public abstract ITreeModelSource getTreeViewParameter();
-
-    public ITreeModelSource getTreeModelSource()
-    {
-        ITreeModelSource objSource = (ITreeModelSource) getPage()
-                .getRequestCycle().getAttribute(
-                        ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE);
-
-        return objSource == null ? getTreeViewParameter() : objSource;
-    }
-
-    public List generateNodeList()
-    {
-        if (m_arrAllExpandedNodes == null)
-        {
-            ArrayList arrAllExpandedNodes = new ArrayList();
-
-            // render data
-            ITreeModelSource objTreeModelSource = getTreeModelSource();
-            ITreeModel objTreeModel = objTreeModelSource.getTreeModel();
-            ITreeDataModel objTreeDataModel = objTreeModel.getTreeDataModel();
-
-            Object objRoot = objTreeDataModel.getRoot();
-            Object objRootUID = objTreeDataModel.getUniqueKey(objRoot, null);
-            
-            if (getShowRootNode())
-            {
-                walkTree(arrAllExpandedNodes, objRoot, objRootUID, 0,
-                        objTreeModel, TreeRowObject.FIRST_LAST_ROW, new int[0],
-                        true);
-            }
-            else
-            {
-                int nChildenCount = objTreeModel.getTreeDataModel()
-                        .getChildCount(objRoot);
-                int nRowPossiotionType = nChildenCount == 1 ? TreeRowObject.FIRST_LAST_ROW
-                        : TreeRowObject.FIRST_ROW;
-                boolean bFirst = true;
-                for(Iterator iter = objTreeModel.getTreeDataModel()
-                        .getChildren(objRoot); iter.hasNext();)
-                {
-                    Object objChild = iter.next();
-                    Object objChildUID = objTreeModel.getTreeDataModel()
-                            .getUniqueKey(objChild, objRoot);
-                    boolean bChildLast = !iter.hasNext();
-                    if (!bFirst)
-                    {
-                        if (bChildLast)
-                            nRowPossiotionType = TreeRowObject.LAST_ROW;
-                        else nRowPossiotionType = TreeRowObject.MIDDLE_ROW;
-                    }
-                    walkTree(arrAllExpandedNodes, objChild, objChildUID, 0,
-                            objTreeModel, nRowPossiotionType, new int[0],
-                            bChildLast);
-                    bFirst = false;
-                }
-            }
-
-            m_arrAllExpandedNodes = arrAllExpandedNodes;
-        }
-
-        return m_arrAllExpandedNodes;
-    }
-
-    public void walkTree(ArrayList arrAllExpandedNodes, Object objParent,
-            Object objParentUID, int nDepth, ITreeModel objTreeModel,
-            int nRowPossiotionType, int[] arrConnectImages, boolean bLast)
-    {
-        int rowPositionType = nRowPossiotionType;
-        m_nTreeDeep = nDepth;
-        int nNumberOfChildren = objTreeModel.getTreeDataModel().getChildCount(
-                objParent);
-        boolean bLeaf = (nNumberOfChildren == 0) ? true : false;
-        TreeRowObject objTreeRowObject = new TreeRowObject(objParent,
-                objParentUID, nDepth, bLeaf, rowPositionType,
-                arrConnectImages);
-        arrAllExpandedNodes.add(objTreeRowObject);
-
-        boolean bContain = objTreeModel.getTreeStateModel()
-                .isUniqueKeyExpanded(objParentUID);
-        if (bContain)
-        {
-            int[] arrConnectImagesNew = new int[arrConnectImages.length + 1];
-            System.arraycopy(arrConnectImages, 0, arrConnectImagesNew, 0,
-                    arrConnectImages.length);
-            if (bLast)
-                arrConnectImagesNew[arrConnectImagesNew.length - 1] = TreeRowObject.EMPTY_CONN_IMG;
-            else arrConnectImagesNew[arrConnectImagesNew.length - 1] = TreeRowObject.LINE_CONN_IMG;
-            Iterator colChildren = objTreeModel.getTreeDataModel().getChildren(
-                    objParent);
-            for(Iterator iter = colChildren; iter.hasNext();)
-            {
-                Object objChild = iter.next();
-                Object objChildUID = objTreeModel.getTreeDataModel()
-                        .getUniqueKey(objChild, objParentUID);
-                boolean bChildLast = !iter.hasNext();
-                if (bChildLast)
-                    rowPositionType = TreeRowObject.LAST_ROW;
-                else rowPositionType = TreeRowObject.MIDDLE_ROW;
-                walkTree(arrAllExpandedNodes, objChild, objChildUID,
-                        nDepth + 1, objTreeModel, rowPositionType,
-                        arrConnectImagesNew, bChildLast);
-            }
-        }
-    }
-
-    /**
-     * Returns the treeDeep.
-     * 
-     * @return int
-     */
-    public int getTreeDeep()
-    {
-        return m_nTreeDeep;
-    }
-
-    /*
-     * public ITableModel getTableModel() { if(m_objTableModel == null){
-     * m_objTableModel = createTableModel(); } return m_objTableModel; }
-     */
-    public ITableModel getTableModel()
-    {
-        return createTableModel();
-    }
-
-    private ITableModel createTableModel()
-    {
-        List arrAllNodes = generateNodeList();
-        Object[] arrAllExpandedNodes = new Object[arrAllNodes.size()];
-        arrAllNodes.toArray(arrAllExpandedNodes);
-
-        SimpleTableModel objTableModel = new SimpleTableModel(
-                arrAllExpandedNodes, getTableColunms());
-        objTableModel.getPagingState().setPageSize(getEntriesPerTablePage());
-
-        return objTableModel;
-    }
-
-    public ITableColumn[] getTableColunms()
-    {
-        ArrayList arrColumnsList = new ArrayList();
-        arrColumnsList.add(new TreeTableColumn("Name", false, null));
-
-        List arrTableColunms = getTableColumnsParameter();
-        if (arrTableColunms != null) arrColumnsList.addAll(arrTableColunms);
-
-        ITableColumn[] arrColumns = new ITableColumn[arrColumnsList.size()];
-        arrColumnsList.toArray(arrColumns);
-
-        return arrColumns;
-    }
-
-    public abstract List getTableColumnsParameter();
-
-    public abstract int getEntriesPerTablePage();
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeRowSource#getTreeRow()
-     */
-    public TreeRowObject getTreeRow()
-    {
-        return getTreeRowObject();
-    }
-
-    public ITableSessionStateManager getTableSessionStateManager()
-    {
-        SimpleListTableDataModel objDataModel = new SimpleListTableDataModel(
-                generateNodeList());
-        SimpleTableColumnModel objColumnModel = new SimpleTableColumnModel(
-                getTableColunms());
-        SimpleTableSessionStateManager objStateManager = new SimpleTableSessionStateManager(
-                objDataModel, objColumnModel);
-        return objStateManager;
-        // return NullTableSessionStateManager.NULL_STATE_MANAGER;
-    }
-
-    /**
-     * @see org.apache.tapestry.BaseComponent#renderComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object objExistedTreeModelSource = cycle
-                .getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
-        cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, this);
-
-        super.renderComponent(writer, cycle);
-
-        cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE,
-                objExistedTreeModelSource);
-    }
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#renderBody(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    public void renderBody(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object objExistedTreeModelSource = cycle
-                .getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
-        cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, this);
-
-        super.renderBody(writer, cycle);
-
-        cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE,
-                objExistedTreeModelSource);
-    }
-
-    public TreeRowObject getTreeRowObject()
-    {
-        return m_objTreeRowObject;
-    }
-
-    public void setTreeRowObject(TreeRowObject object)
-    {
-        m_objTreeRowObject = object;
-    }
-
-    public abstract boolean getShowRootNode();
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.jwc
deleted file mode 100644
index 94082ea..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<component-specification class="org.apache.tapestry.contrib.tree.components.table.TreeTableDataView" allow-body="yes"
-           allow-informal-parameters="yes">
-           <parameter name="treeView" required="no"/>
-           <parameter name="nodeViewComponentAddress" required="no"/>
-           <parameter name="nodeRenderFactory" required="no"/>
-           <parameter name="entriesPerTablePage" required="no"/>
-           <parameter name="showRootNode" required="no"/>
-           <parameter name="tableColumns" property="tableColumnsParameter" required="no"/>
-           <bean name="tableClass" class="org.apache.tapestry.bean.EvenOdd" lifecycle="request"/>
-           <component id="table" type="Table">
-                      <binding name="tableModel" value="tableModel"/>
-                      <binding name="tableSessionStateManager" value="tableSessionStateManager"/>
-                      <binding name="row" value="treeRowObject"/>
-                      <binding name="rowsClass" value="beans.tableClass.next"/>
-                      <binding name="class" value="literal:treetable"/>
-                      <binding name="cellspacing" value="literal:0"/>
-                      <binding name="cellpadding" value="literal:0"/>
-                      <binding name="width" value="literal:*"/>
-           </component>
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.html
deleted file mode 100644
index f868b5a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<span jwcid="$content$">
-	<span jwcid="treeNodeView"/>
-</span>		
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.java
deleted file mode 100644
index 5e631c0..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components.table;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-
-/**
- * @author ceco
- */
-public abstract class TreeTableNodeViewDelegator extends BaseComponent
-        implements ITableRendererListener
-{
-
-    /**
-     * 
-     */
-    public TreeTableNodeViewDelegator()
-    {
-        super();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererListener#initializeRenderer(org.apache.tapestry.IRequestCycle,
-     *      org.apache.tapestry.contrib.table.model.ITableModelSource,
-     *      org.apache.tapestry.contrib.table.model.ITableColumn,
-     *      java.lang.Object)
-     */
-    public void initializeRenderer(IRequestCycle arg0, ITableModelSource arg1,
-            ITableColumn arg2, Object arg3)
-    {
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.jwc
deleted file mode 100644
index b5522db..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.jwc
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.tree.components.table.TreeTableNodeViewDelegator"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <description>
-      Renders a TreeNodeView
-    </description>
-    
-     <component id="treeNodeView" type="TreeNodeView">
-    </component>
-
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.html
deleted file mode 100644
index e554dea..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$">
-	<span jwcid="treeTableNodeViewDelegator"/>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.page b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.page
deleted file mode 100644
index 7be2923..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-    <component id="treeTableNodeViewDelegator" type="TreeTableNodeViewDelegator">
-    </component>
-
-</page-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableValueRenderSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableValueRenderSource.java
deleted file mode 100644
index c0ecb42..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/TreeTableValueRenderSource.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components.table;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.contrib.table.model.common.ComponentTableRendererSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author ceco
- */
-public class TreeTableValueRenderSource implements ITableRendererSource
-{
-
-    private static final long serialVersionUID = 3237638859391458116L;
-
-    private ComponentTableRendererSource m_objComponentRenderer;
-    private ComponentAddress m_objComponentAddress = null;
-    
-    /* used to synchronize access */
-    private Object m_sync = new Object();
-    
-    public TreeTableValueRenderSource()
-    {
-        m_objComponentRenderer = null;
-    }
-    
-    public TreeTableValueRenderSource(ComponentAddress objComponentAddress)
-    {
-        m_objComponentAddress = objComponentAddress;
-    }
-    
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle,
-     *      ITableModelSource, ITableColumn, Object)
-     */
-    public IRender getRenderer(IRequestCycle objCycle, ITableModelSource objSource, ITableColumn objColumn,
-            Object objRow)
-    {
-        if (m_objComponentRenderer == null)
-        {
-            synchronized(m_sync)
-            {
-                ComponentAddress objAddress = m_objComponentAddress;
-                if (m_objComponentAddress == null)
-                    objAddress = new ComponentAddress("contrib:TreeTableNodeViewPage", "treeTableNodeViewDelegator");
-                m_objComponentRenderer = new ComponentTableRendererSource(objAddress);
-            }
-        }
-        
-        return m_objComponentRenderer.getRenderer(objCycle, objSource, objColumn, objRow);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/package.html
deleted file mode 100644
index a21fdc7..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/components/table/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Tree rendering components.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/IMutableTreeNode.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/IMutableTreeNode.java
deleted file mode 100644
index 410e511..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/IMutableTreeNode.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import java.util.Collection;
-
-/**
- * Defines the requirements for a tree node object that can change --
- * by adding or removing child nodes, or by changing the contents
- * of a user object stored in the node.
- *
- * @see javax.swing.tree.DefaultMutableTreeNode
- * @see javax.swing.JTree
- *
- * @author ceco
- */
-
-public interface IMutableTreeNode extends ITreeNode
-{
-    /**
-     * Adds collection of<code>children</code> to the receiver.
-     * <code>Child</code> will be messaged with <code>setParent</code>.
-     */
-    void insert(Collection colChildren);
-
-    /**
-     * Removes <code>node</code> from the receiver. <code>setParent</code>
-     * will be messaged on <code>node</code>.
-     */
-    void remove(IMutableTreeNode node);
-
-    /**
-     * Removes the receiver from its parent.
-     */
-    void removeFromParent();
-
-    /**
-     * Sets the parent of the receiver to <code>newParent</code>.
-     */
-    void setParent(IMutableTreeNode newParent);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ISessionStoreManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ISessionStoreManager.java
deleted file mode 100644
index 3da2a14..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ISessionStoreManager.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import org.apache.tapestry.IPage;
-
-/**
- * @author ceco
- */
-
-public interface ISessionStoreManager
-{
-
-    Object getSessionState(IPage objPage, String strSessionStateID);
-
-    Object setSessionState(IPage objPage, String strSessionStateID,
-            Object objSessionState);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeDataModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeDataModel.java
deleted file mode 100644
index 45f37ce..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeDataModel.java
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import java.util.Iterator;
-
-/**
- * The interface that defines a suitable data model for a
- * <code>TreeView component</code>.
- * 
- * @author ceco
- */
-public interface ITreeDataModel
-{
-
-    /**
-     * Returns the root node of the tree.
-     */
-    Object getRoot();
-
-    /**
-     * Returns the number of children of parent node.
-     * 
-     * @param objParent
-     *            is the parent object whose nr of children are sought
-     */
-    int getChildCount(Object objParent);
-
-    /**
-     * Get an iterator to the Collection of children belonging to the parent
-     * node object.
-     * 
-     * @param objParent
-     *            is the parent object whose children are requested
-     */
-    Iterator getChildren(Object objParent);
-
-    /**
-     * Get the actual node object based on some identifier (for example an UUID).
-     * 
-     * @param objUniqueKey
-     *            is the unique identifier of the node object being retrieved
-     * @return the instance of the node object identified by the key
-     */
-    Object getObject(Object objUniqueKey);
-
-    /**
-     * Get the unique identifier (UUID) of the node object with a certain parent
-     * node.
-     * 
-     * @param objTarget
-     *            is the Object whose identifier is required
-     * @param objParentUniqueKey
-     *            is the unique id of the parent of objTarget
-     * @return the unique identifier of objTarget
-     */
-    Object getUniqueKey(Object objTarget, Object objParentUniqueKey);
-
-    /**
-     * Get the unique identifier of the parent of an object.
-     * 
-     * @param objChildUniqueKey
-     *            is the identifier of the Object for which the parent
-     *            identifier is sought
-     * @return the identifier (possibly UUID) of the parent of objChildUniqueKey
-     */
-    Object getParentUniqueKey(Object objChildUniqueKey);
-
-    /**
-     * Check to see (on the basis of some node object identifier) whether the
-     * parent node is indeed the parent of the object.
-     * 
-     * @param objChildUniqueKey
-     *            is the identifier of the object whose parent is being checked
-     * @param objParentUniqueKey
-     *            is the identifier of the parent which is to be checked against
-     */
-    boolean isAncestorOf(Object objChildUniqueKey, Object objParentUniqueKey);
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeModel.java
deleted file mode 100644
index 47c6f07..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeModel.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-/**
- * @author ceco
- */
-public interface ITreeModel
-{
-
-    ITreeDataModel getTreeDataModel();
-
-    ITreeStateModel getTreeStateModel();
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeModelSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeModelSource.java
deleted file mode 100644
index a04c3d9..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeModelSource.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import org.apache.tapestry.IComponent;
-
-/**
- * @author ceco
- */
-public interface ITreeModelSource extends IComponent
-{
-
-    String TREE_MODEL_SOURCE_ATTRIBUTE = "org.apache.tapestry.contrib.tree.model.ITreeModelSource";
-
-    ITreeModel getTreeModel();
-
-    ITreeStateListener getTreeStateListener();
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeNode.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeNode.java
deleted file mode 100644
index bb520e8..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeNode.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import java.io.Serializable;
-import java.util.Collection;
-
-/**
- * @author ceco
- */
-
-public interface ITreeNode extends Serializable
-{
-    
-    /**
-     * Returns the <code>Collection</code> of children. 
-     */
-    Collection getChildren();
-
-    /**
-     * Returns the number of children <code>ITreeNode</code>s the receiver
-     * contains.
-     */
-    int getChildCount();
-
-    /**
-     * Returns the parent <code>ITreeNode</code> of the receiver.
-     */
-    ITreeNode getParent();
-
-    /**
-     * Returns the true if current node contains received children, otherwise return false.
-     */
-    boolean containsChild(ITreeNode node);
-
-    /**
-     * Returns true if the receiver allows children.
-     */
-    boolean getAllowsChildren();
-
-    /**
-     * Returns true if the receiver is a leaf.
-     */
-    boolean isLeaf();
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeNodeManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeNodeManager.java
deleted file mode 100644
index 3c25c10..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeNodeManager.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.contrib.tree.components.ITreeComponent;
-
-/**
- * @author ceco
- */
-public interface ITreeNodeManager
-{
-
-    IRender getRenderer(Object objUniqueKey, ITreeComponent objTreeComponent);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeRowSource.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeRowSource.java
deleted file mode 100644
index 320fb0a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeRowSource.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-/**
- * A Tapestry component that provides the current row value. This interface is
- * used for obtaining the row source by components wrapped by the row source
- * 
- * @author tsvetelin
- */
-public interface ITreeRowSource
-{
-
-    String TREE_ROW_SOURCE_ATTRIBUTE = "org.apache.tapestry.contrib.tree.model.ITreeRowSource";
-
-    /**
-     * Method getTreeRow.
-     * 
-     * @return Object the current tree row object.
-     */
-    TreeRowObject getTreeRow();
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeSessionStateManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeSessionStateManager.java
deleted file mode 100644
index d12c154..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeSessionStateManager.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-/**
- * @author ceco
- */
-public interface ITreeSessionStateManager
-{
-
-    Object getSessionState(ITreeModel objModel);
-
-    ITreeModel getModel(Object objSessionState);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeStateListener.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeStateListener.java
deleted file mode 100644
index 0da0b11..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeStateListener.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-/**
- * @author ceco
- */
-public interface ITreeStateListener
-{
-
-    void treeStateChanged(TreeStateEvent objEvent);
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeStateModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeStateModel.java
deleted file mode 100644
index 1e1094e..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/ITreeStateModel.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import java.util.Set;
-
-/**
- * @author ceco
- */
-
-public interface ITreeStateModel
-{
-
-    Set getExpandSelection();
-
-    /*
-     * Return the selected node unique key
-     */
-    Object getSelectedNode();
-
-    void setSelectedNode(Object objUniqueKey);
-
-    void expand(Object objUniqueKey);
-
-    void expandPath(Object objUniqueKey);
-
-    void collapse(Object objUniqueKey);
-
-    void collapsePath(Object objUniqueKey);
-
-    boolean isUniqueKeyExpanded(Object objUniqueKey);
-
-    void resetState();
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/TreeRowObject.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/TreeRowObject.java
deleted file mode 100644
index 446e2ba..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/TreeRowObject.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-/**
- * @author ceco
- */
-public class TreeRowObject
-{
-
-    public static final int FIRST_ROW = 1;
-    public static final int MIDDLE_ROW = 2;
-    public static final int LAST_ROW = 3;
-    public static final int FIRST_LAST_ROW = 4;
-
-    public static final int EMPTY_CONN_IMG = 1;
-    public static final int LINE_CONN_IMG = 2;
-
-    private Object m_objTreeNode = null;
-    private Object m_objTreeNodeUID = null;
-    private int m_nTreeRowDepth;
-    private boolean m_bLeaf = false;
-    private int m_nTreeRowPossiotionType = MIDDLE_ROW;
-    private int[] m_nLineConnImages;
-
-    public TreeRowObject(Object objTreeNode, Object objTreeNodeUID,
-            int nTreeRowDepth, boolean bLeaf, int nTreeRowPossiotionType,
-            int[] nLineConnImages)
-    {
-        super();
-        m_objTreeNode = objTreeNode;
-        m_objTreeNodeUID = objTreeNodeUID;
-        m_nTreeRowDepth = nTreeRowDepth;
-        m_bLeaf = bLeaf;
-        m_nTreeRowPossiotionType = nTreeRowPossiotionType;
-        m_nLineConnImages = nLineConnImages;
-    }
-
-    public Object getTreeNode()
-    {
-        return m_objTreeNode;
-    }
-
-    public Object getTreeNodeUID()
-    {
-        return m_objTreeNodeUID;
-    }
-
-    public int getTreeRowDepth()
-    {
-        return m_nTreeRowDepth;
-    }
-
-    /**
-     * @return Returns the leaf.
-     */
-    public boolean getLeaf()
-    {
-        return m_bLeaf;
-    }
-
-    /**
-     * @return Returns the treeRowPossiotionType.
-     */
-    public int getTreeRowPossiotionType()
-    {
-        return m_nTreeRowPossiotionType;
-    }
-
-    /**
-     * @return Returns the lineConnImages.
-     */
-    public int[] getLineConnImages()
-    {
-        return m_nLineConnImages;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/TreeStateEvent.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/TreeStateEvent.java
deleted file mode 100644
index 221e114..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/TreeStateEvent.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-/**
- * @author ceco
- */
-public class TreeStateEvent
-{
-
-    public static final int SELECTED_NODE_CHANGED = 1;
-    public static final int NODE_EXPANDED = 2;
-    public static final int NODE_COLLAPSED = 4;
-
-    private int m_nEventType;
-    private transient ITreeStateModel m_objTreeStateModel = null;
-    private transient Object m_objNodeUID = null;
-
-    /**
-     * Constructor for TreeStateEvent.
-     */
-    public TreeStateEvent(int nEventType, Object objNodeUID,
-            ITreeStateModel objTreeStateModel)
-    {
-        super();
-        m_nEventType = nEventType;
-        m_objNodeUID = objNodeUID;
-        m_objTreeStateModel = objTreeStateModel;
-    }
-
-    /**
-     * Returns the EventType.
-     * 
-     * @return int
-     */
-    public int getEventType()
-    {
-        return m_nEventType;
-    }
-
-    public boolean isEvent(int nEventType)
-    {
-        return (getEventType() & nEventType) > 0;
-    }
-
-    public Object getNodeUID()
-    {
-        return m_objNodeUID;
-    }
-
-    public ITreeStateModel getTreeStateModel()
-    {
-        return m_objTreeStateModel;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/package.html
deleted file mode 100644
index ab2adab..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/model/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Tree model classes/interfaces.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/FullTreeSessionStateManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/FullTreeSessionStateManager.java
deleted file mode 100644
index 69aa90d..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/FullTreeSessionStateManager.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-
-/**
- * @author ceco
- */
-public class FullTreeSessionStateManager implements ITreeSessionStateManager
-{
-
-    /**
-     * Constructor for FullTreeSessionStateManager.
-     */
-    public FullTreeSessionStateManager()
-    {
-        super();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getSessionState(ITreeModel)
-     */
-    public Object getSessionState(ITreeModel objModel)
-    {
-        return objModel;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getModel(Object)
-     */
-    public ITreeModel getModel(Object objSessionState)
-    {
-        return (ITreeModel) objSessionState;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/NullSessionStateManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/NullSessionStateManager.java
deleted file mode 100644
index 416dbdc..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/NullSessionStateManager.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-
-/**
- * @author ceco
- */
-public class NullSessionStateManager implements ITreeSessionStateManager
-{
-
-    /**
-     * Constructor for NullSessionStateManager.
-     */
-    public NullSessionStateManager()
-    {
-        super();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getSessionState(ITreeModel)
-     */
-    public Object getSessionState(ITreeModel objModel)
-    {
-        return null;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getModel(Object)
-     */
-    public ITreeModel getModel(Object objSessionState)
-    {
-        return null;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleNodeRenderFactory.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleNodeRenderFactory.java
deleted file mode 100644
index d3cde6a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleNodeRenderFactory.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.tree.components.INodeRenderFactory;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.valid.RenderString;
-
-/**
- * @author ceco
- */
-public class SimpleNodeRenderFactory implements INodeRenderFactory
-{
-
-    /**
-     * Constructor for SimpleNodeRenderFactory.
-     */
-    public SimpleNodeRenderFactory()
-    {
-        super();
-    }
-
-    /**
-     * @see INodeRenderFactory#getRender
-     */
-    public IRender getRenderByID(Object objUniqueKey,
-            ITreeModelSource objTreeModelSource, IRequestCycle cycle)
-    {
-        Object objValue = objTreeModelSource.getTreeModel().getTreeDataModel()
-                .getObject(objUniqueKey);
-        return getRender(objValue, objTreeModelSource, cycle);
-    }
-
-    /**
-     * @see INodeRenderFactory#getRender
-     */
-    public IRender getRender(Object objValue,
-            ITreeModelSource objTreeModelSource, IRequestCycle objCycle)
-    {
-        return new RenderString(objValue.toString());
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleSessionStateManager.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleSessionStateManager.java
deleted file mode 100644
index 9012780..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleSessionStateManager.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-
-/**
- * @author ceco
- */
-public class SimpleSessionStateManager implements ITreeSessionStateManager
-{
-
-    /**
-     * Constructor for SimpleSessionStateManager.
-     */
-    public SimpleSessionStateManager()
-    {
-        super();
-    }
-
-    /**
-     * @see ITreeSessionStateManager#getSessionState(ITreeModel)
-     */
-    public Object getSessionState(ITreeModel objModel)
-    {
-        return objModel;
-    }
-
-    /**
-     * @see ITreeSessionStateManager#getModel(Object)
-     */
-    public ITreeModel getModel(Object objSessionState)
-    {
-        return (ITreeModel) objSessionState;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleTreeDataModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleTreeDataModel.java
deleted file mode 100644
index ba0bef8..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleTreeDataModel.java
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import java.io.Serializable;
-import java.util.Iterator;
-
-import javax.swing.tree.TreePath;
-
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-/**
- * @author ceco
- */
-public class SimpleTreeDataModel implements ITreeDataModel, Serializable
-{
-
-    private static final long serialVersionUID = 9215832847660213349L;
-
-    protected ITreeNode m_objRootNode;
-
-    /**
-     * Constructor for SimpleTreeDataModel.
-     */
-    public SimpleTreeDataModel(ITreeNode objRootNode)
-    {
-        super();
-        m_objRootNode = objRootNode;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getRoot()
-     */
-    public Object getRoot()
-    {
-        return m_objRootNode;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getChildCount(Object)
-     */
-    public int getChildCount(Object objParent)
-    {
-        ITreeNode objParentNode = (ITreeNode) objParent;
-
-        return objParentNode.getChildCount();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getChildren(Object)
-     */
-    public Iterator getChildren(Object objParent)
-    {
-        ITreeNode objParentNode = (ITreeNode) objParent;
-        return objParentNode.getChildren().iterator();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getObject(Object)
-     */
-    public Object getObject(Object objUniqueKey)
-    {
-        if (objUniqueKey != null)
-        {
-            TreePath objPath = (TreePath) objUniqueKey;
-            return objPath.getLastPathComponent();
-        }
-        return null;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getUniqueKey(Object,
-     *      Object)
-     */
-    public Object getUniqueKey(Object objTarget, Object objParentUniqueKey)
-    {
-        TreePath objPath = (TreePath) objParentUniqueKey;
-        Object objTargetUID = null;
-        if (objPath != null)
-        {
-            objTargetUID = objPath.pathByAddingChild(objTarget);
-        }
-        else
-        {
-            objTargetUID = new TreePath(objTarget);
-        }
-        return objTargetUID;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#isAncestorOf(Object,
-     *      Object)
-     */
-    public boolean isAncestorOf(Object objTargetUniqueKey,
-            Object objParentUniqueKey)
-    {
-        TreePath objParentPath = (TreePath) objParentUniqueKey;
-        TreePath objTargetPath = (TreePath) objTargetUniqueKey;
-        boolean bResult = objParentPath.isDescendant(objTargetPath);
-        return bResult;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getParentUniqueKey
-     */
-    public Object getParentUniqueKey(Object objChildUniqueKey)
-    {
-        TreePath objChildPath = (TreePath) objChildUniqueKey;
-        TreePath objParentPath = objChildPath.getParentPath();
-        if (objParentPath == null) return null;
-        return objParentPath.getLastPathComponent();
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleTreeModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleTreeModel.java
deleted file mode 100644
index 412fe95..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleTreeModel.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-
-/**
- * @author ceco
- */
-public class SimpleTreeModel implements ITreeModel, Serializable
-{
-
-    private static final long serialVersionUID = -6445877820084989017L;
-
-    private ITreeDataModel m_objDataModel;
-    private ITreeStateModel m_objTreeStateModel;
-
-    /**
-     * Constructor for SimpleTreeModel.
-     */
-    public SimpleTreeModel(ITreeDataModel objDataModel)
-    {
-        this(objDataModel, new SimpleTreeStateModel());
-    }
-
-    public SimpleTreeModel(ITreeDataModel objDataModel,
-            ITreeStateModel objTreeStateModel)
-    {
-        super();
-        m_objDataModel = objDataModel;
-        m_objTreeStateModel = objTreeStateModel;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeModel#getTreeDataModel()
-     */
-    public ITreeDataModel getTreeDataModel()
-    {
-        return m_objDataModel;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeModel#getTreeStateModel()
-     */
-    public ITreeStateModel getTreeStateModel()
-    {
-        return m_objTreeStateModel;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleTreeStateModel.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleTreeStateModel.java
deleted file mode 100644
index 49c910c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/SimpleTreeStateModel.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-
-/**
- * @author ceco
- */
-public class SimpleTreeStateModel implements ITreeStateModel, Serializable
-{
-
-    private static final long serialVersionUID = 9206852255511734400L;
-
-    private Set m_setExpanded;
-    private Object m_objSelectedNodeUID = null;
-
-    /**
-     * Constructor for SimpleTreeStateModel.
-     */
-    public SimpleTreeStateModel()
-    {
-        super();
-        initialize();
-    }
-
-    private void initialize()
-    {
-        m_setExpanded = new HashSet();
-        m_objSelectedNodeUID = null;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#getExpandSelection()
-     */
-    public Set getExpandSelection()
-    {
-        return m_setExpanded;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#expand(Object)
-     */
-    public void expand(Object objUniqueKey)
-    {
-        m_setExpanded.add(objUniqueKey);
-        // setSelectedNode(objUniqueKey);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#expandPath(Object)
-     */
-    public void expandPath(Object objUniqueKey)
-    {
-        m_setExpanded.add(objUniqueKey);
-        // setSelectedNode(objUniqueKey);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#collapse(Object)
-     */
-    public void collapse(Object objUniqueKey)
-    {
-        m_setExpanded.remove(objUniqueKey);
-        // setSelectedNode(objUniqueKey);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#collapsePath(Object)
-     */
-    public void collapsePath(Object objUniqueKey)
-    {
-        m_setExpanded.remove(objUniqueKey);
-        // setSelectedNode(objUniqueKey);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#isUniqueKeyExpanded(Object)
-     */
-    public boolean isUniqueKeyExpanded(Object objUniqueKey)
-    {
-        return m_setExpanded.contains(objUniqueKey);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#getSelectedNode()
-     */
-    public Object getSelectedNode()
-    {
-        return m_objSelectedNodeUID;
-    }
-
-    public void setSelectedNode(Object objUniqueKey)
-    {
-        if (m_objSelectedNodeUID == null
-                || !m_objSelectedNodeUID.equals(objUniqueKey))
-            m_objSelectedNodeUID = objUniqueKey;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#resetState()
-     */
-    public void resetState()
-    {
-        initialize();
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/TreeNode.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/TreeNode.java
deleted file mode 100644
index f344e8a..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/TreeNode.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.apache.tapestry.contrib.tree.model.IMutableTreeNode;
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-/**
- * @author ceco
- */
-public class TreeNode implements IMutableTreeNode
-{
-
-    private static final long serialVersionUID = 677919478017303186L;
-
-    protected Set m_setChildren;
-    protected IMutableTreeNode m_objParentNode;
-
-    /**
-     * Constructor for TreeNode.
-     */
-    public TreeNode()
-    {
-        this(null);
-    }
-
-    public TreeNode(IMutableTreeNode parentNode)
-    {
-        super();
-        m_objParentNode = parentNode;
-        m_setChildren = new HashSet();
-    }
-
-    public int getChildCount()
-    {
-        return m_setChildren.size();
-    }
-
-    public ITreeNode getParent()
-    {
-        return m_objParentNode;
-    }
-
-    public boolean getAllowsChildren()
-    {
-        return true;
-    }
-
-    public boolean isLeaf()
-    {
-        return m_setChildren.size() == 0 ? true : false;
-    }
-
-    public Collection children()
-    {
-        return m_setChildren;
-    }
-
-    public void insert(IMutableTreeNode child)
-    {
-        child.setParent(this);
-        m_setChildren.add(child);
-    }
-
-    public void remove(IMutableTreeNode node)
-    {
-        m_setChildren.remove(node);
-    }
-
-    public void removeFromParent()
-    {
-        m_objParentNode.remove(this);
-        m_objParentNode = null;
-    }
-
-    public void setParent(IMutableTreeNode newParent)
-    {
-        m_objParentNode = newParent;
-    }
-
-    public void insert(Collection colChildren)
-    {
-        for(Iterator iter = colChildren.iterator(); iter.hasNext();)
-        {
-            IMutableTreeNode element = (IMutableTreeNode) iter.next();
-            element.setParent(this);
-            m_setChildren.add(element);
-        }
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
-     */
-    public boolean containsChild(ITreeNode node)
-    {
-        return m_setChildren.contains(node);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
-     */
-    public Collection getChildren()
-    {
-        return m_setChildren;
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/package.html
deleted file mode 100644
index 5cbd968..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/tree/simple/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Contrib: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Default set of model implementation classes for the Tree component.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/DateField.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/DateField.java
deleted file mode 100644
index a3c61df..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/DateField.java
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.valid;
-
-import java.text.DateFormat;
-import java.util.Date;
-
-import org.apache.tapestry.valid.DateValidator;
-import org.apache.tapestry.valid.IValidator;
-import org.apache.tapestry.valid.ValidField;
-
-/**
- * Backwards compatible version of the 1.0.7 DateField component. <table border=1>
- * <tr>
- * <td>Parameter</td>
- * <td>Type</td>
- * <td>Read / Write</td>
- * <td>Required</td>
- * <td>Default</td>
- * <td>Description</td>
- * </tr>
- * <tr>
- * <td>date</td>
- * <td>java.util.Date</td>
- * <td>R / W</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>The date property to edit.</td>
- * </tr>
- * <tr>
- * <td>required</td>
- * <td>boolean</td>
- * <td>R</td>
- * <td>no</td>
- * <td>no</td>
- * <td>If true, then a value must be entered.</td>
- * </tr>
- * <tr>
- * <td>minimum</td>
- * <td>java.util.Date</td>
- * <td>R</td>
- * <td>no</td>
- * <td>&nbsp;</td>
- * <td>If provided, the date entered must be equal to or later than the provided minimum date.
- * </td>
- * </tr>
- * <tr>
- * <td>maximum</td>
- * <td>java.util.Date</td>
- * <td>R</td>
- * <td>no</td>
- * <td>&nbsp;</td>
- * <td>If provided, the date entered must be less than or equal to the provided maximum date.</td>
- * </tr>
- * <tr>
- * <td>displayName</td>
- * <td>String</td>
- * <td>R</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>A textual name for the field that is used when formulating error messages.</td>
- * </tr>
- * <tr>
- * <td>format</td>
- * <td>{@link DateFormat}</td>
- * <td>R</td>
- * <td>no</td>
- * <td>Default format <code>MM/dd/yyyy</code></td>
- * <td>The format used to display and parse dates.</td>
- * </tr>
- * <tr>
- * <td>displayFormat</td>
- * <td>{@link String}</td>
- * <td>R</td>
- * <td>no</td>
- * <td><code>MM/DD/YYYY</code></td>
- * <td>The format string presented to the user if the date entered is in an incorrect format. e.g.
- * the format object throws a ParseException.</td>
- * </tr>
- * </table>
- * <p>
- * Informal parameters are allowed. A body is not allowed.
- * 
- * @author Howard Lewis Ship, Richard Lewis-Shell
- * @since 1.0.8
- * @see ValidField
- */
-
-public abstract class DateField extends ValidField
-{
-    public abstract Date getDate();
-
-    public abstract void setDate(Date date);
-
-    public abstract Date getMinimum();
-
-    public abstract Date getMaximum();
-
-    public abstract boolean isRequired();
-
-    public abstract DateFormat getFormat();
-
-    public abstract String getDisplayFormat();
-
-    /**
-     * Overrides {@link ValidField#getValidator()}to construct a validator on-the-fly.
-     */
-
-    public IValidator getValidator()
-    {
-        DateValidator validator = new DateValidator();
-
-        if (isParameterBound("minimum"))
-            validator.setMinimum(getMinimum());
-
-        if (isParameterBound("maximum"))
-            validator.setMaximum(getMaximum());
-
-        if (isParameterBound("required"))
-            validator.setRequired(isRequired());
-
-        if (isParameterBound("format"))
-            validator.setFormat(getFormat());
-
-        if (isParameterBound("displayFormat"))
-            validator.setDisplayFormat(getDisplayFormat());
-
-        return validator;
-    }
-
-    /**
-     * @see org.apache.tapestry.valid.ValidField#getValue()
-     */
-    public Object getValue()
-    {
-        return getDate();
-    }
-
-    /**
-     * @see org.apache.tapestry.valid.ValidField#setValue(java.lang.Object)
-     */
-    public void setValue(Object value)
-    {
-        setDate((Date) value);
-    }
-
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/DateField.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/DateField.jwc
deleted file mode 100644
index d2f1b2f..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/DateField.jwc
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.valid.DateField" deprecated="true">
-
-  <parameter name="disabled"/>
-  <parameter name="hidden"/>
-  <parameter name="displayWidth"/>
-  <parameter name="maximumLength"/>
-
-  <parameter name="date" required="yes" />
-  <parameter name="displayName" required="yes" />
-  <parameter name="maximum"/>
-  <parameter name="minimum" />
-  <parameter name="required" />
-  <parameter name="format" />
-  <parameter name="displayFormat"  />
-    
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="value"/>
-  <reserved-parameter name="size"/>
-  <reserved-parameter name="maxlength"/>
-
-</component-specification>
-
-
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/NumericField.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/NumericField.java
deleted file mode 100644
index a99ed35..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/NumericField.java
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.valid;
-
-import org.apache.tapestry.valid.IValidator;
-import org.apache.tapestry.valid.NumberValidator;
-import org.apache.tapestry.valid.ValidField;
-
-/**
- * Backwards compatible version of the 1.0.7 NumericField component. <table
- * border=1>
- * <tr>
- * <td>Parameter</td>
- * <td>Type</td>
- * <td>Read / Write</td>
- * <td>Required</td>
- * <td>Default</td>
- * <td>Description</td>
- * </tr>
- * <tr>
- * <td>value</td>
- * <td>{@link Number}</td>
- * <td>R / W</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>The value to be updated.
- * <p>
- * When the form is submitted, this parameter is only updated if the value is
- * valid.
- * <p>
- * When rendering, a null value will render as the empty string. A value of zero
- * will render normally.
- * <p>
- * When the form is submitted, the type of the binding is used to determine what
- * kind of object to convert the string to.</td>
- * </tr>
- * <tr>
- * <td>minimum</td>
- * <td>{@link Number}</td>
- * <td>R</td>
- * <td>no</td>
- * <td>&nbsp;</td>
- * <td>The minimum value accepted for the field.</td>
- * </tr>
- * <tr>
- * <td>maximum</td>
- * <td>{@link Number}</td>
- * <td>R</td>
- * <td>no</td>
- * <td>&nbsp;</td>
- * <td>The maximum value accepted for the field.</td>
- * </tr>
- * <tr>
- * <td>required</td>
- * <td>boolean</td>
- * <td>R</td>
- * <td>no</td>
- * <td>false</td>
- * <td>If true, then a non-null value must be provided. If the field is not
- * required, and a null (all whitespace) value is supplied in the field, then
- * the value parameter is <em>not</em> updated.</td>
- * </tr>
- * <tr>
- * <td>displayName</td>
- * <td>String</td>
- * <td>R</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>A textual name for the field that is used when formulating error
- * messages.</td>
- * </tr>
- * <tr>
- * <td>type</td>
- * <td>String</td>
- * <td>R</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>The class name used to convert the value entered. See
- * {@link NumberValidator#setValueType(String)}</td>
- * </tr>
- * </table>
- * <p>
- * May not contain a body. May have informal parameters.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- * @see ValidField
- */
-
-public abstract class NumericField extends ValidField
-{
-
-    public abstract Number getMinimum();
-
-    public abstract Number getMaximum();
-
-    public abstract boolean isRequired();
-
-    public abstract String getType();
-
-    /**
-     * Overrides {@link ValidField#getValidator()}to construct a validator on
-     * the fly.
-     */
-
-    public IValidator getValidator()
-    {
-        NumberValidator validator = new NumberValidator();
-
-        if (isParameterBound("minimum")) validator.setMinimum(getMinimum());
-
-        if (isParameterBound("maximum")) validator.setMaximum(getMaximum());
-
-        if (isParameterBound("required")) validator.setRequired(isRequired());
-
-        if (isParameterBound("type")) validator.setValueType(getType());
-
-        return validator;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/NumericField.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/NumericField.jwc
deleted file mode 100644
index c299efa..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/NumericField.jwc
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<component-specification class="org.apache.tapestry.contrib.valid.NumericField" deprecated="true">
-    <parameter name="disabled"/>
-    <parameter name="hidden"/>
-    <parameter name="displayWidth"/>
-    <parameter name="maximumLength"/>
-    <parameter name="value" required="yes"/>
-    <parameter name="displayName" required="yes"/>
-    <parameter name="maximum"/>
-    <parameter name="minimum"/>
-    <parameter name="required"/>
-    <parameter name="type" required="yes"/>
-    <reserved-parameter name="name"/>
-</component-specification>
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/ValidatingTextField.java b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/ValidatingTextField.java
deleted file mode 100644
index 2b7e9da..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/ValidatingTextField.java
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.valid;
-
-import org.apache.tapestry.valid.IValidator;
-import org.apache.tapestry.valid.StringValidator;
-import org.apache.tapestry.valid.ValidField;
-
-/**
- * Backwards compatible version of the 1.0.7 ValidatingTextField component.
- * <table border=1>
- * <tr>
- * <td>Parameter</td>
- * <td>Type</td>
- * <td>Read / Write</td>
- * <td>Required</td>
- * <td>Default</td>
- * <td>Description</td>
- * </tr>
- * <tr>
- * <td>text</td>
- * <td>java.lang.String</td>
- * <td>R / W</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>The text inside the text field.
- * <p>
- * When the form is submitted, the binding is only updated if the value is
- * valid.</td>
- * </tr>
- * <tr>
- * <td>minimumLength</td>
- * <td>int</td>
- * <td>R</td>
- * <td>no</td>
- * <td>0</td>
- * <td>The minimum length (number of characters read) for the field. The value
- * provided in the request is trimmed of leading and trailing whitespace.
- * <p>
- * If a field is not required and no value is given, then minimumLength is
- * ignored. Minimum length only applies if <em>some</em> non-null value is
- * given.</td>
- * </tr>
- * <tr>
- * <td>required</td>
- * <td>boolean</td>
- * <td>R</td>
- * <td>no</td>
- * <td>false</td>
- * <td>If true, then a non-null value must be provided. A value consisting only
- * of whitespace is considered null.</td>
- * </tr>
- * <tr>
- * <td>displayName</td>
- * <td>String</td>
- * <td>R</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>A textual name for the field that is used when formulating error
- * messages.</td>
- * </tr>
- * </table>
- * <p>
- * May not have a body. May have informal parameters.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- * @see org.apache.tapestry.valid.ValidField
- */
-
-public abstract class ValidatingTextField extends ValidField
-{
-
-    public abstract int getMinimumLength();
-
-    public abstract boolean isRequired();
-
-    public abstract String getText();
-
-    public abstract void setText(String value);
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.tapestry.valid.ValidField#getValue()
-     */
-    public Object getValue()
-    {
-        return getText();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.tapestry.valid.ValidField#setValue(java.lang.Object)
-     */
-    public void setValue(Object value)
-    {
-        setText((String) value);
-    }
-
-    /**
-     * Overrides {@link ValidField#getValidator()}to construct a validator on
-     * the fly.
-     */
-    public IValidator getValidator()
-    {
-        StringValidator validator = new StringValidator();
-
-        if (isParameterBound("required")) validator.setRequired(isRequired());
-
-        if (isParameterBound("minimumLength"))
-            validator.setMinimumLength(getMinimumLength());
-
-        return validator;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/ValidatingTextField.jwc b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/ValidatingTextField.jwc
deleted file mode 100644
index 2dfd01c..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/ValidatingTextField.jwc
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.valid.ValidatingTextField" allow-body="no" deprecated="true">
-
-  <parameter name="disabled"/>  
-  <parameter name="hidden"/>
-  <parameter name="displayWidth"/>
-  <parameter name="maximumLength"/>
-
-  <parameter name="text" required="yes"/>
-  <parameter name="displayName" required="yes"/>
-  <parameter name="minimumLength"/>
-  <parameter name="required"/>
- 
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="value"/>
-  
-</component-specification>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
diff --git a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/package.html b/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/package.html
deleted file mode 100644
index 7f240bd..0000000
--- a/tapestry/tapestry-contrib/src/java/org/apache/tapestry/contrib/valid/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<html>
-<head>
-</head>
-<body>
-
-Backwards compatible versions of Tapestry 1.0.7's validating text fields, 
-built as wrappers
-around the 1.0.8 versions.
-
-<p>All that is necessary to use these without changing existing Pages 
-(built against 1.0.7 or earlier)
-is to add aliases for these components to the 
-application specification.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-contrib/src/site/resources/images/checkboxgroup.png b/tapestry/tapestry-contrib/src/site/resources/images/checkboxgroup.png
deleted file mode 100644
index c2f4d8e..0000000
--- a/tapestry/tapestry-contrib/src/site/resources/images/checkboxgroup.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/site/resources/images/inspectorbutton.png b/tapestry/tapestry-contrib/src/site/resources/images/inspectorbutton.png
deleted file mode 100644
index a4576dc..0000000
--- a/tapestry/tapestry-contrib/src/site/resources/images/inspectorbutton.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/site/resources/images/palette.png b/tapestry/tapestry-contrib/src/site/resources/images/palette.png
deleted file mode 100644
index 446e6b9..0000000
--- a/tapestry/tapestry-contrib/src/site/resources/images/palette.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-contrib/src/site/site.xml b/tapestry/tapestry-contrib/src/site/site.xml
deleted file mode 100644
index 7a52acf..0000000
--- a/tapestry/tapestry-contrib/src/site/site.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<project name="Tapestry">
-    <bannerLeft>
-        <name>Tapestry Web Application Framework</name>
-        <href>http://tapestry.apache.org/</href>
-        <src>images/tapestry_banner.gif</src>
-    </bannerLeft>
-    <bannerRight>
-        <name>Apache Software Foundation</name>
-        <href>http://www.apache.org</href>
-        <src>images/asf_logo_wide.gif</src>
-    </bannerRight>
-    
-    <skin>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>maven-skin</artifactId>
-        <version>1.1</version>
-    </skin>
-    
-    <publishDate format="dd MMM yyyy" />
-    
-    <body>
-        <links>
-            <item name="Tapestry" href="http://tapestry.apache.org/" />
-            <item name="Hivemind" href="http://jakarta.apache.org/hivemind/" />
-            <item name="Apache" href="http://www.apache.org/" />
-        </links>
-        
-        <head>
-            <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script>
-            <script type="text/javascript">_uacct = "UA-400821-1"; urchinTracker();</script>
-            <link rel="shortcut icon" href="http://tapestry.apache.org/tapestry4.1/favicon.ico" />
-        </head>
-        
-        <menu ref="parent" />
-        
-        <menu name="Documentation">
-            
-            <item name="Overview" href="/index.html" />
-                
-            <item name="Components" href="/componentreference/index.html" collapse="false">
-                <item name="AjaxStatus" href="/componentreference/ajaxstatus.html" />
-                <item name="CheckboxGroup" href="/componentreference/checkboxgroup.html" />
-                <item name="ColumnSortImage" href="/componentreference/columnsortimage.html" />
-                <item name="ColumnSortLink" href="/componentreference/columnsortlink.html" />                
-                <item name="ControlCheckbox" href="/componentreference/controlcheckbox.html" />
-                <item name="ControlledCheckbox" href="/componentreference/controlledcheckbox.html" />
-                <item name="DumpObject" href="/componentreference/dumpobject.html" />
-                <item name="InspectorButton" href="/componentreference/inspectorbutton.html" />
-                <item name="MaskEdit" href="/componentreference/maskedit.html" />
-                <item name="MultiplePropertySelection" href="/componentreference/multiplepropertyselection.html" />
-                <item name="Palette" href="/componentreference/palette.html" />
-                <item name="SimpleTableColumnComponent" href="/componentreference/simpletablecolumncomponent.html" />
-                <item name="SimpleTableColumnFormComponent" href="/componentreference/simpletablecolumnformcomponent.html" />
-                <item name="Table" href="/componentreference/table.html" />
-                <item name="TableColumns" href="/componentreference/tablecolumns.html" />
-                <item name="TablePages" href="/componentreference/tablepages.html" />
-                <item name="TableRows" href="/componentreference/tablerows.html" />
-                <item name="TableValues" href="/componentreference/tablevalues.html" />
-                <item name="TableView" href="/componentreference/tableview.html" />
-                <item name="Timeout" href="/componentreference/timeout.html" />
-                <item name="XTile" href="/componentreference/xtile.html" />
-            </item>
-            
-            <item name="Hivedoc" href="/hivedoc/index.html" />
-            
-        </menu>
-        
-        ${reports} 
-    </body>
-    
-</project>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/ajaxstatus.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/ajaxstatus.xml
deleted file mode 100644
index 8006dc2..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/ajaxstatus.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2007 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>AjaxStatus</title>
-    </properties>
-    <body>
-
-        <section name="AjaxStatus">
-
-            <p>
-                An extension of the <a href="../../components/general/any.html">Any</a> component that
-                defines an html node that becomes visible when ajax requests are in progress, 
-                and gets hidden when those requests end.
-            </p>
-            
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>element</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td><em>From the HTML template</em></td>
-                        <td>The element to render.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Example">
-
-                <source xml:space="preserve"><![CDATA[
-<div jwcid="@contrib:AjaxStatus" style="display:none;color:white;background:red;position:absolute;top:0;right:0">
-Loading...
-</div>                    
-]]></source>
-                
-            </subsection>
-        </section>
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/checkboxgroup.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/checkboxgroup.xml
deleted file mode 100644
index 5737c44..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/checkboxgroup.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>CheckboxGroup</title>
-    </properties>
-    <body>
-
-        <section name="CheckboxGroup">
-
-            <p>
-                A component defining a group of checkboxes that will be controlled together.
-                Typically the ControlCheckbox and ControlledCheckbox components are placed in the
-                body of this component.
-            </p>
-            <img src="../images/checkboxgroup.png" alt="CheckboxGroup selection of table columns."/>
-            <p>
-                <strong>
-                    See also:
-                    <a href="controlcheckbox.html">ControlCheckbox</a>
-                    ,
-                    <a href="controlledcheckbox.html">ControlledCheckbox</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>No parameters defined.</td>
-                        <td></td>
-                        <td></td>
-                        <td></td>
-                        <td></td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-
-                <p>Template</p>
-                <source xml:space="preserve">	
-&lt;form jwcid="form"&gt;
-    &lt;span jwcid="checkboxGroup"&gt;
-    	&lt;input jwcid="controlCheckbox"/&gt;	
-    		&lt;input jwcid="controlledCheckbox1"/&gt;
-    		&lt;input jwcid="controlledCheckbox2"/&gt;
-    		&lt;input jwcid="controlledCheckbox3"/&gt;                        
-    &lt;/span&gt;    
-    ...
-&lt;/form&gt;    
-	</source>
-
-                <p>Specification</p>
-                <source xml:space="preserve">
-&lt;property name="state1" persist="session" initial-value="false"/&gt;
-&lt;property name="state2" persist="session" initial-value="false"/&gt;
-&lt;property name="state3" persist="session" initial-value="false"/&gt;        
-	
-   &lt;component id="checkboxGroup" type="contrib:CheckboxGroup"/&gt;    
-   &lt;component id="controlCheckbox" type="contrib:ControlCheckbox"/&gt;
-   
-&lt;component id="controlledCheckbox1" type="contrib:ControlledCheckbox"&gt;
-	&lt;binding name="value" value="state1"/&gt;
-&lt;/component&gt;   
-&lt;component id="controlledCheckbox2" type="contrib:ControlledCheckbox"&gt;
-	&lt;binding name="value" value="state2"/&gt;
-&lt;/component&gt; 
-&lt;component id="controlledCheckbox3" type="contrib:ControlledCheckbox"&gt;
-	&lt;binding name="value" value="state3"/&gt;
-&lt;/component&gt;  
-	</source>
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/columnsortimage.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/columnsortimage.xml
deleted file mode 100644
index b6acdb9..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/columnsortimage.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>ColumnSortImage</title>
-    </properties>
-    <body>
-
-        <section name="ColumnSortImage">
-
-            <p>
-                Displays the correct sort image for the current column.
-                No image is shown if that column is not the one sorted.
-            </p>
-            <p>
-                This component should only be used with <a href="table.html">contrib:Table</a>
-                and helps creating custom headers.
-            </p>
-
-            <subsection name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>table</td>
-                        <td>Table</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The table that will include this sort image.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Example
-            ">
-
-                <source xml:space="preserve"><![CDATA[
-<table jwcid="tab@contrib:Table" source="ognl:@java.util.Locale@getAvailableLocales()"
-    columns="Locale:toString(), Language, Country">
-    <tr jwcid="LanguageColumnHeader@Block">
-        <a jwcid="@contrib:ColumnSortLink" table="component:tab">
-            <img jwcid="@contrib:ColumnSortImage" table="component:tab"/> Language </a>
-    </tr>
-</table>                    
-]]></source>
-                
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/columnsortlink.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/columnsortlink.xml
deleted file mode 100644
index ca38d99..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/columnsortlink.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>ColumnSortLink</title>
-    </properties>
-    <body>
-
-        <section name="ColumnSortLink">
-
-            <p>
-                Displays a link that will cause the current column to sort.
-            </p>
-            <p>
-                This component should only be used with <a href="table.html">contrib:Table</a>
-                and helps creating custom headers.
-            </p>            
-
-            <subsection name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>table</td>
-                        <td>Table</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The table that will include this sort link.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Example
-            ">
-
-                <source xml:space="preserve"><![CDATA[
-<table jwcid="tab@contrib:Table" source="ognl:@java.util.Locale@getAvailableLocales()"
-    columns="Locale:toString(), Language, Country">
-    <tr jwcid="LanguageColumnHeader@Block">
-        <a jwcid="@contrib:ColumnSortLink" table="component:tab">
-            <img jwcid="@contrib:ColumnSortImage" table="component:tab"/> Language </a>
-    </tr>
-</table>                    
-]]></source>
-                
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/controlcheckbox.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/controlcheckbox.xml
deleted file mode 100644
index c94efa2..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/controlcheckbox.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>ControlCheckbox</title>
-    </properties>
-    <body>
-
-        <section name="ControlCheckbox">
-
-            <p>
-                Creates a checkbox that will automatically select or deselect all controlled
-                checkboxes in the checkbox group.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="checkboxgroup.html">CheckboxGroup</a>
-                    ,
-                    <a href="controlledcheckbox.html">ControlledCheckbox</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>group</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.html">
-                                CheckboxGroup
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If provided, it specifies the CheckboxGroup this component belongs to.
-                            If it is not specified, then the component is a a part of the
-                            CheckboxGroup that wraps it. Please note that if this parameter is used,
-                            then the CheckboxGroup it refers to must either enclose the current
-                            component, or must be defined after it.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>type, onclick</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-
-                <p>Template</p>
-                <source xml:space="preserve">	
-&lt;form jwcid="form"&gt;
-    &lt;span jwcid="checkboxGroup"&gt;
-    	&lt;input jwcid="controlCheckbox"/&gt;	
-    		&lt;input jwcid="controlledCheckbox1"/&gt;
-    		&lt;input jwcid="controlledCheckbox2"/&gt;
-    		&lt;input jwcid="controlledCheckbox3"/&gt;                        
-    &lt;/span&gt;    
-    ...
-&lt;/form&gt;    
-	</source>
-
-                <p>Specification</p>
-                <source xml:space="preserve">
-&lt;property name="state1" persist="session" initial-value="false"/&gt;
-&lt;property name="state2" persist="session" initial-value="false"/&gt;
-&lt;property name="state3" persist="session" initial-value="false"/&gt;        
-	
-   &lt;component id="checkboxGroup" type="contrib:CheckboxGroup"/&gt;    
-   &lt;component id="controlCheckbox" type="contrib:ControlCheckbox"/&gt;
-   
-&lt;component id="controlledCheckbox1" type="contrib:ControlledCheckbox"&gt;
-	&lt;binding name="value" value="state1"/&gt;
-&lt;/component&gt;   
-&lt;component id="controlledCheckbox2" type="contrib:ControlledCheckbox"&gt;
-	&lt;binding name="value" value="state2"/&gt;
-&lt;/component&gt; 
-&lt;component id="controlledCheckbox3" type="contrib:ControlledCheckbox"&gt;
-	&lt;binding name="value" value="state3"/&gt;
-&lt;/component&gt;  
-	</source>
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/controlledcheckbox.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/controlledcheckbox.xml
deleted file mode 100644
index cf4b239..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/controlledcheckbox.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>ControlledCheckbox</title>
-    </properties>
-    <body>
-
-        <section name="ControlledCheckbox">
-
-            <p>
-                A checkbox whose state may be controlled by other checkboxes using JavaScript. The
-                checkbox rendered by this component may be automatically selected or deselected by a
-                ControlCheckbox within the same group.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="checkboxgroup.html">CheckboxGroup</a>
-                    ,
-                    <a href="controlcheckbox.html">ControlCheckbox</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>boolean</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            Value editted by the component; read on render, updated on form submit.
-                            This sets the check attribute of the rendered element.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then the checkbox will render as disabled and any input from
-                            the checkbox will be ignored.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>group</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/form/checkboxes/CheckboxGroup.html">
-                                CheckboxGroup
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If provided, it specifies the CheckboxGroup this component belongs to.
-                            If it is not specified, then the component is a a part of the
-                            CheckboxGroup that wraps it. Please note that if this parameter is used,
-                            then the CheckboxGroup it refers to must either enclose the current
-                            component, or must be defined after it.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed / allowed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed / forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-
-                <p>Template</p>
-                <source xml:space="preserve">	
-&lt;form jwcid="form"&gt;
-    &lt;span jwcid="checkboxGroup"&gt;
-    	&lt;input jwcid="controlCheckbox"/&gt;	
-    		&lt;input jwcid="controlledCheckbox1"/&gt;
-    		&lt;input jwcid="controlledCheckbox2"/&gt;
-    		&lt;input jwcid="controlledCheckbox3"/&gt;                        
-    &lt;/span&gt;    
-    ...
-&lt;/form&gt;    
-	</source>
-
-                <p>Specification</p>
-                <source xml:space="preserve">
-&lt;property name="state1" persist="session" initial-value="false"/&gt;
-&lt;property name="state2" persist="session" initial-value="false"/&gt;
-&lt;property name="state3" persist="session" initial-value="false"/&gt;        
-	
-   &lt;component id="checkboxGroup" type="contrib:CheckboxGroup"/&gt;    
-   &lt;component id="controlCheckbox" type="contrib:ControlCheckbox"/&gt;
-   
-&lt;component id="controlledCheckbox1" type="contrib:ControlledCheckbox"&gt;
-	&lt;binding name="value" value="state1"/&gt;
-&lt;/component&gt;   
-&lt;component id="controlledCheckbox2" type="contrib:ControlledCheckbox"&gt;
-	&lt;binding name="value" value="state2"/&gt;
-&lt;/component&gt; 
-&lt;component id="controlledCheckbox3" type="contrib:ControlledCheckbox"&gt;
-	&lt;binding name="value" value="state3"/&gt;
-&lt;/component&gt;  
-	</source>
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/dumpobject.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/dumpobject.xml
deleted file mode 100644
index a1e423c..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/dumpobject.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>DumpObject</title>
-    </properties>
-    <body>
-
-        <section name="DumpObject">
-
-            <p>
-                Dumps out an object's serialized representation in a mix of hex and ascii. The
-                output is formatted for a fixed width font and should typically be enclosed in
-                <code>&lt;pre&gt;</code> tags.
-            </p>
-
-            <subsection name="Parameters">
-
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>object</td>
-                        <td>Object</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The object to be displayed as HTML.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-
-                <source xml:space="preserve">
-&lt;span jwcid="@contrib:DumpObject" object="ognl:new java.util.Date()"/&gt;
-	</source>
-                <p>and the output will be like this:</p>
-                <source xml:space="preserve">
-0000: aced0005 7372000e 6a617661 2e757469  |....sr..java.uti|
-0010: 6c2e4461 7465686a 81014b59 74190300  |l.Datehj..KYt...|
-0020: 00787077 08000001 0adac264 3d78      |.xpw.......d=x  |	
-	</source>
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/index.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/index.xml
deleted file mode 100644
index 17a9c36..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/index.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Tapestry Contrib Component Reference</title>
-    </properties>
-    <body>
-
-        <section name="Tapestry Contrib Component Reference">
-
-            <p>A collection of powerful add-on components for Tapestry.</p>
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/inspectorbutton.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/inspectorbutton.xml
deleted file mode 100644
index 96e4fa6..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/inspectorbutton.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>InspectorButton</title>
-    </properties>
-    <body>
-
-        <section name="InspectorButton">
-
-            <p>
-                Adds a link to a page that is used to raise the Tapestry Inspector in a new window.
-                <br />
-                The Tapestry Inspector enables you at runtime to examine composition of a Tapestry
-                application, inspect persistent page properties, clear HttpSessions and Tapestry
-                caches.
-                <br />
-                Pages incorporating a InspectorButton component must also include a Body component.
-            </p>
-            <img src="../images/inspectorbutton.png" alt="Embedded inspector button in page."/>
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../components/general/body.html">Body</a>
-                    ,
-                    <a href="../../components/general/exceptiondisplay.html">ExceptionDisplay</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, the button does not appear. This is the correct configuration
-                            for a deployed application.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-
-                <p>This example is a simple page with the InspectorButton.</p>
-                <p>
-                    <strong>Template</strong>
-                </p>
-                <source xml:space="preserve">
-&lt;html jwcid="@Shell" title="InspectorButton Example"&gt;
-&lt;head jwcid="$remove$"&gt;
- &lt;title&gt;InspectorButton Example&lt;/title&gt;
-&lt;/head&gt;
-&lt;body jwcid="@Body"&gt;
-&lt;h1&gt;Hello world&lt;/h1&gt;
-&lt;span jwcid="@contrib:InspectorButton"/&gt;
-&lt;/body&gt;
-&lt;/html&gt;</source>
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/maskedit.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/maskedit.xml
deleted file mode 100644
index 99589c5..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/maskedit.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>MaskEdit</title>
-    </properties>
-    <body>
-
-        <section name="MaskEdit">
-
-            <p>
-                Provides a mask edit HTML <code>&lt;input type="text"&gt;</code> form element.
-                <br />
-                Mask edit field validates the text the user enters against a mask that encodes the
-                valid forms the text can take. The mask can also format text that is displayed to
-                the user.
-            </p>
-            <table>
-                <tr>
-                    <th>Mask character</th>
-                    <th>Meaning in mask</th>
-                </tr>
-                <tr>
-                    <td>l</td>
-                    <td>Mixed case letter character [a..z, A..Z]</td>
-                </tr>
-                <tr>
-                    <td>L</td>
-                    <td>Upper case letter character [A..Z]</td>
-                </tr>
-                <tr>
-                    <td>a</td>
-                    <td>Mixed case alpha numeric character [a..z, A..Z, 0..1]</td>
-                </tr>
-                <tr>
-                    <td>A</td>
-                    <td>Upper case alpha numeric character [A..Z, 0..9]</td>
-                </tr>
-                <tr>
-                    <td>#</td>
-                    <td>Numeric character [0..9]</td>
-                </tr>
-                <tr>
-                    <td>_</td>
-                    <td>Reserved character for display, do not use.</td>
-                </tr>
-                <tr>
-                    <td>others</td>
-                    <td>Non editable character for display.</td>
-                </tr>
-            </table>
-            <p>This component requires JavaScript to be enabled in the client browser.</p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="../../components/form/form.html">Form</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>mask</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>See above.</td>
-                    </tr>
-                    <tr>
-                        <td>value</td>
-                        <td>string</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>The value to be editted, which is is usually a string.</td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            If true, then a disabled attribute will be rendered as part of the
-                            <code>&lt;input&gt;</code> tag, and the component will not update its value parameter
-                            when the form is submitted.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-            
-            
-            <subsection name="Example">
-                
-                <p>Example of a masked US phone number input field:</p>
-
-<source><![CDATA[
-
-<label for="phone" accessKey="p">Phone</label>
-<input jwcid="phone@contrib:MaskEdit" value="ognl:phoneInput" 
-    mask="literal:(###) ###-####" />
-
-]]></source>
-                
-            </subsection>
-            
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/multiplepropertyselection.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/multiplepropertyselection.xml
deleted file mode 100644
index 1065679..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/multiplepropertyselection.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>MultiplePropertySelection</title>
-    </properties>
-    <body>
-
-        <section name="MultiplePropertySelection">
-
-            <p>
-                A component which uses <code>&lt;input type=checkbox&gt;</code> to set a property of some object.
-                Typically, the values for the object are defined using an
-                org.apache.commons.lang.enum.Enum. A MultiplePropertySelection is dependent on an
-                <a
-                    href="../../apidocs/org/apache/tapestry/form/IPropertySelectionModel.html">
-                    IPropertySelectionModel
-                </a>
-                to provide the list of possible values.
-                <br />
-                The
-                <a href="palette.html">Palette</a>
-                component is more powerful, but requires client-side JavaScript and is not fully
-                cross-browser compatible.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="palette.html">Palette</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>selectedList</td>
-                        <td>java.util.Collection</td>
-                        <td>yes</td>
-                        <td> </td>
-                        <td>
-                            The property to set. During rendering, this property is read, and sets
-                            the default value of the options in the select. When the form is
-                            submitted, list is cleared, then has each selected option added to it.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>renderer</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/form/IMultiplePropertySelectionRenderer.html">
-                                IMultiplePropertySelectionRenderer
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>
-                            shared instance of
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/form/CheckBoxMultiplePropertySelectionRenderer.html">
-                                CheckBoxMultiplePropertySelectionRenderer
-                            </a>
-                        </td>
-                        <td>
-                            Defines the object used to render this component. The default renders a
-                            table of checkboxes.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>model</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/IPropertySelectionModel.html">
-                                IPropertySelectionModel
-                            </a>
-                        </td>
-                        <td>yes</td>
-                        <td> </td>
-                        <td>
-                            The model provides a list of possible labels, and matches those labels
-                            against possible values that can be assigned back to the property.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>disabled</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Controls whether the <code>&lt;select&gt;</code> is active or not. A disabled
-                            PropertySelection does not update its value parameter.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/palette.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/palette.xml
deleted file mode 100644
index 047d8d8..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/palette.xml
+++ /dev/null
@@ -1,290 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Palette</title>
-    </properties>
-    <body>
-
-        <section name="Palette">
-
-            <p>
-                A component used to make a number of selections from a list. The general look is a
-                pair of <code>&lt;select&gt;</code> elements. with a pair of buttons between them. The right
-                element is a list of values that can be selected. The buttons move values from the
-                right column ("available") to the left column ("selected").
-                <br />
-                This all takes a bit of JavaScript to accomplish (quite a bit), which means a
-                <a href="../../components/general/body.html">Body</a>
-                component must wrap the Palette. If JavaScript is not enabled in the client browser,
-                then the user will be unable to make (or change) any selections.
-                <br />
-                Cross-browser compatibility is not perfect. In some cases, the
-                <a href="multiplepropertyselection.html">MultiplePropertySelection</a>
-                component may be a better choice.
-            </p>
-            <img src="../images/palette.png" alt="Sample palette selection."/>
-            <p>
-                <strong>
-                    See also:
-                    <a href="multiplepropertyselection.html">MultiplePropertySelection</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>selected</td>
-                        <td>java.util.List</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            A List of selected values. Possible selections are defined by the model;
-                            this should be a subset of the possible values. This may be null when
-                            the component is renderred. When the containing form is submitted, this
-                            parameter is updated with a new List of selected objects.
-                            <br />
-                            The order may be set by the user, as well, depending on the sortMode
-                            parameter.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>model</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/IPropertySelectionModel.html">
-                                IPropertySelectionModel
-                            </a>
-                        </td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            Works, as with a
-                            <a href="../../components/form/propertyselection.html">PropertySelection</a>
-                            component, to define the possible values.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>sort</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/palette/SortMode.html">
-                                SortMode
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/palette/SortMode.html#NONE">
-                                SortMode.NONE
-                            </a>
-                        </td>
-                        <td>Controls automatic sorting of the options.</td>
-                    </tr>
-                    <tr>
-                        <td>id</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Sets the id for the rendered <code>&lt;select&gt;</code> element that displays the 
-                            selected items.
-                        </td>
-                    </tr>                    
-                    <tr>
-                        <td>displayName</td>
-                        <td>string</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The user-presentable name for the component, which will be used by a
-                            <a href="../../components/form/fieldlabel.html">FieldLabel</a>
-                            connected to the component.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>validators</td>
-                        <td>
-                            Array or collection of
-                            <a
-                                href="../../apidocs/org/apache/tapestry/form/validator/Validator.html">
-                                Validator
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The validators to apply to the component. Something along the lines of:
-                            <code>validators:required</code> .<br/><br/>
-                            
-                            <strong>See also:</strong> <a href="../../usersguide/validation.html">Validation</a>
-                        </td>
-                    </tr>                    
-                    <tr>
-                        <td>rows</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>10</td>
-                        <td>
-                            The number of rows that should be visible in the Pallete's
-                            <code>&lt;select&gt;</code> elements.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>tableClass</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>tapestry-palette</td>
-                        <td>
-                            The CSS class for the table which surrounds the other elements of the
-                            Palette.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>selectedTitleBlock</td>
-                        <td>
-                            <a href="../../components/general/block.html">Block</a>
-                        </td>
-                        <td>no</td>
-                        <td>"Selected"</td>
-                        <td>
-                            If specified, allows a Block to be placed within the <code>&lt;th&gt;</code> reserved
-                            for the title above the selected items <code>&lt;select&gt;</code> (on the right).
-                            This allows for images or other components to be placed there. By
-                            default, the simple word Selected is used.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>availableTitleBlock</td>
-                        <td>
-                            <a href="../../components/general/block.html">Block</a>
-                        </td>
-                        <td>no</td>
-                        <td>"Available"</td>
-                        <td>
-                            As with selectedTitleBlock, but for the left column, of items which are
-                            available to be selected. The default is the word Available.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>
-                            selectImage
-                            <br />
-                            selectDisabledImage
-                            <br />
-                            deselectImage
-                            <br />
-                            deselectDisabledImage
-                            <br />
-                            upImage
-                            <br />
-                            upDisabledImage
-                            <br />
-                            downImage
-                            <br />
-                            downDisabledImage
-                        </td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            If any of these are specified then they override the default images
-                            provided with the component. This allows the look and feel to be
-                            customized relatively easily.
-                            <br />
-                            The most common reason to replace the images is to deal with
-                            backgrounds. The default images are anti-aliased against a white
-                            background. If a colored or patterned background is used, the default
-                            images will have an ugly white fringe. Until all browsers have full
-                            support for PNG (which has a true alpha channel), it is necessary to
-                            customize the images to match the background.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-                <p>
-                    A Palette requires some CSS entries to render correctly, especially the middle
-                    column, which contains the two or four buttons for moving selections between the
-                    two columns. The width and alignment of this column must be set using CSS.
-                    Additionally, CSS is commonly used to give the Palette columns a fixed width,
-                    and to dress up the titles. Here is an example of some CSS you can use to format
-                    the palette component:
-                    <br />
-                </p>
-                <source xml:space="preserve">
-TABLE.tapestry-palette TH
- {
-   font-size: 9pt;
-   font-weight: bold;
-   color: white;
-   background-color: #330066;
-   text-align: center;
- }
-
- TD.available-cell SELECT
- {
-   font-weight: normal;
-   background-color: #FFFFFF;
-   width: 200px;
- }
-
- TD.selected-cell SELECT
- {
-   font-weight: normal;
-   background-color: #FFFFFF;
-   width: 200px;
- }
-
- TABLE.tapestry-palette TD.controls
- {
-   text-align: center;
-   vertical-align: middle;
-   width: 60px;
- }
-     </source>
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/simpletablecolumncomponent.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/simpletablecolumncomponent.xml
deleted file mode 100644
index 58c1dfd..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/simpletablecolumncomponent.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>SimpleTableColumnComponent</title>
-    </properties>
-    <body>
-
-        <section name="SimpleTableColumnComponent">
-
-            <p>A component that renders the default column header.</p>
-            <p>
-                If the current column is sortable, it renders the header as a link. Clicking on the
-                link causes the table to be sorted on that column. Clicking on the link again causes
-                the sorting order to be reversed.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="table.html">Table</a>
-                    ,
-                    <a href="tablebiew.html">TableView</a>
-                    ,
-                    <a href="tablepages.html">TablePages</a>
-                    ,
-                    <a href="tablerows.html">TableRows</a>
-                    ,
-                    <a href="tablevalues.html">TableValues</a>
-                    ,
-                    <a href="tablecolumns.html">TableColumns</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <p>
-                    <em>No parameters</em>
-                </p>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/simpletablecolumnformcomponent.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/simpletablecolumnformcomponent.xml
deleted file mode 100644
index ce3f8f3..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/simpletablecolumnformcomponent.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>SimpleTableColumnFormComponent</title>
-    </properties>
-    <body>
-
-        <section name="SimpleTableColumnFormComponent">
-
-            <p>A component that renders the default column header in a form.</p>
-
-            <p>
-                If the current column is sortable, it renders the header as a link. Clicking on the
-                link causes the table to be sorted on that column. Clicking on the link again causes
-                the sorting order to be reversed.
-            </p>
-
-            <p>
-                This component renders links that cause the form to be submitted. This ensures that
-                the updated data in the other form fields is preserved.
-            </p>
-
-            <span class="info">
-                <strong>Note:</strong>
-                <p>
-                The column header rendered by this component has two main css class definitions. The
-                embedded table html markup within each
-                <code>td</code>
-                element for a sorted column has the class
-                <code>tableHeaderImage</code>
-                . The image used to sort table columns has an embedded style class definition for
-                <code>tableHeaderImage</code>
-                that defines
-                <code>align:center</code>
-                .
-
-                <br />
-                You may override these definitions with your own css rules.
-                </p>
-            </span>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="table.html">Table</a>
-                    ,
-                    <a href="tableview.html">TableView</a>
-                    ,
-                    <a href="tablepages.html">TablePages</a>
-                    ,
-                    <a href="tablerows.html">TableRows</a>
-                    ,
-                    <a href="tablevalues.html">TableValues</a>
-                    ,
-                    <a href="tablecolumns.html">TableColumns</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <p>
-                    <em>No parameters</em>
-                </p>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/table.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/table.xml
deleted file mode 100644
index 06ad3e2..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/table.xml
+++ /dev/null
@@ -1,796 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Table</title>
-    </properties>
-    <body>
-
-        <section name="Table">
-
-            <p>
-                Provides a HTML <code>&lt;table&gt;</code> element. The Table component is a facade component in
-                the Table family. Table allows you to present a sortable and pagable table simply
-                and easily by using only this one component.
-            </p>
-            <p>
-                The Table component allows you to manipulate its appearance by allowing you to
-                define the 'class' attributes of its internal elements. If you want to change the
-                structure of the table, however, you can instead build your own using the lower
-                level components
-                <a href="tableview.html">TableView</a>
-                    ,
-                    <a href="tablepages.html">TablePages</a>
-                    ,
-                    <a href="tablerows.html">TableRows</a>
-                    ,
-                    <a href="tablevalues.html">TableValues</a>
-                    ,
-                    <a href="tablecolumns.html">TableColumns</a>
-                .
-            </p>
-            <p>
-                The Table component delegates the handling of the table model and related activities
-                to the
-                <a href="tableview.html">TableView</a>
-                , and more detailed information about the process can be found in the documentation
-                of that class.
-            </p>
-            <p>
-                <strong>Providing the data</strong>
-            </p>
-            <p>
-                There are many ways to provide the component with the data it has to render, but
-                here are the three major ones:
-            </p>
-            <ol>
-                <li>
-                    <p>
-                        The data is passed to the
-                        <code>source</code>
-                        parameter in the form of an array, a collection, or an iterator, and the
-                        table columns are defined using the
-                        <code>columns</code>
-                        parameter (see further for details). Both of these parameters will be
-                        evaluated at every request by default, so changes in the data or the table
-                        columns will be displayed immediately.
-                    </p>
-                    <p>The example below uses this method.</p>
-                    <p>
-                        This is the easiest and most straightforward approach. It has one
-                        performance limitation, however - if the table is sorting the data according
-                        to a given column, the sorting will be performed at every request. The next
-                        methods provide ways to resolve this possible performance issue.
-                    </p>
-                </li>
-                <li>
-                    <p>
-                        The data is passed to the
-                        <code>source</code>
-                        parameter via an object that implements the
-                        <a
-                            href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/IBasicTableModel.html">
-                            <code>IBasicTableModel</code>
-                        </a>
-                        interface. Through that interface you are given the sorting column (if any)
-                        and the numbers of the items that will be displayed on the current page. You
-                        then need to provide the component with the corresponding data.
-                    </p>
-                    <p>
-                        This method allows you to perform the sorting in the database and load only
-                        the data that will be displayed on the current page (e.g. by using the ORDER
-                        BY, LIMIT, and OFFSET clauses in SQL) and hence it could be far more
-                        efficient.
-                    </p>
-                </li>
-                <li>
-                    <p>
-                        All of the information (data, columns, state) is packaged in an
-                        <a
-                            href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableModel.html">
-                            <code>ITableModel</code>
-                        </a>
-                        and is passed to the
-                        <code>tableModel</code>
-                        parameter.
-                    </p>
-                    <p>
-                        This approach allows greatest flexibility, but is recommended only for
-                        advanced users of the Table components.
-                    </p>
-                </li>
-            </ol>
-
-            <p>
-                <strong>Defining the columns</strong>
-            </p>
-
-            <p>
-                If you define the table columns using the
-                <code>columns</code>
-                parameter, you can either provide a list of
-                <a
-                    href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableColumn.html">
-                    <code>ITableColumn</code>
-                </a>
-                objects, each defining a column in the table, or you can define the columns using a
-                string that describes each column.
-            </p>
-            <p>
-                Please see the example below as a demonstration of the use of the latter approach.
-            </p>
-            <p>The string describing the columns must be formatted in the following way:</p>
-            <ul>
-                <li>The column definitions in the string are separated by commas</li>
-
-                <li>
-                    Each column definition must be of one of the following types:
-                    <ul>
-                        <li>id</li>
-                        <li>id:expression</li>
-                        <li>id:description:expression</li>
-                    </ul>
-                    <br />
-                    Here the
-                    <strong>id</strong>
-                    defines the identification of the column, the
-                    <strong>expression</strong>
-                    is an OGNL expression that extracts the column value from the row object, and
-                    <strong>description</strong>
-                    is the title of the column if it is not defined otherwise.
-                    <p>
-                        Each column definition may be prefixed by the
-                        <strong>!</strong>
-                        character, which identifies the column as non-sortable.
-                    </p>
-                    <p>
-                        If defined, a Block with a name that starts with the column id and ends
-                        with
-                        <em>ColumnValue</em>
-                        will be used to render the column values. Similarly, a Block with a name
-                        that starts with the column id and ends with
-                        <em>ColumnHeader</em>
-                        will be used to render the column headers.
-                    </p>
-                    <p>
-                        Finally, the title of the column will be taken from translation strings of
-                        the component by using the column id as a key.
-                    </p>
-                    <p>
-                        Please see the
-                        <code>LocaleSelection</code>
-                        component for examples.
-                    </p>
-                </li>
-                <li>
-                    A column definition may also be of the type
-                    <ul>
-                        <li>=expression</li>
-                    </ul>
-                    <br />
-                    in which case it identifies an OGNL expression that returns an
-                    <a
-                        href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableColumn.html">
-                        <code>ITableColumn</code>
-                    </a>
-                    object defining the column.
-                </li>
-                <li>
-                    The full description string may be prefixed by the
-                    <strong>*</strong>
-                    character, which means that the table is to be rendered within a form, and the
-                    column headers must submit the form if they are clickable (i.e. if the column is
-                    sortable).
-                </li>
-            </ul>
-            <p>
-                Here is an example of the use of a description string to define columns:
-                <code>
-                    columns="locale:toString(), =currencyColumn,
-                    verbosity:Verbosity:currentRowVerbosity, !delete"
-                </code>
-            </p>
-            <p>
-                <strong>
-                    See also:
-                    <a href="tableview.html">TableView</a>
-                    ,
-                    <a href="tablepages.html">TablePages</a>
-                    ,
-                    <a href="tablerows.html">TableRows</a>
-                    ,
-                    <a href="tablevalues.html">TableValues</a>
-                    ,
-                    <a href="tablecolumns.html">TableColumns</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>source</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/docs/api/java/lang/Object.html">
-                                Object
-                            </a>
-                            []
-                            <br />
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/docs/api/java/util/Collection.html">
-                                Collection
-                            </a>
-                            <br />
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/docs/api/java/util/Iterator.html">
-                                Iterator
-                            </a>
-                            <br />
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/IBasicTableModel.html">
-                                <code>IBasicTableModel</code>
-                            </a>
-                        </td>
-                        <td rowspan="3">
-                            You must provide either both
-                            <code>source</code>
-                            and
-                            <code>columns</code>
-                            parameters or the
-                            <code>tableModel</code>
-                            parameter
-                        </td>
-                        <td> </td>
-                        <td>
-                            The data to be displayed by the component. This parameter must be used
-                            in combination with the
-                            <code>columns</code>
-                            parameter. The parameter must be an array of values, a collection, an
-                            iterator, or an object implementing the IBasicTableModel interface.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>columns</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/docs/api/java/lang/String.html">
-                                String
-                            </a>
-                            <br />
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableColumnModel.html">
-                                ITableColumnModel
-                            </a>
-                            <br />
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableColumn.html">
-                                ITableColumn[]
-                            </a>
-                            <br />
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/docs/api/java/util/List.html">
-                                List
-                            </a>
-                            <br />
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/docs/api/java/util/Iterator.html">
-                                Iterator
-                            </a>
-                        </td>
-                        <td></td>
-                        <td> </td>
-                        <td>
-                            The table columns to be displayed. The parameter must be an array, a
-                            list, or an Iterator of ITableColumn objects, an ITableColumnModel, or a
-                            String describing the columns (see documentation).
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>tableModel</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableModel.html">
-                                <code>ITableModel</code>
-                            </a>
-                        </td>
-                        <td></td>
-                        <td> </td>
-                        <td>
-                            The
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableModel.html">
-                                <code>ITableModel</code>
-                            </a>
-                            to be used to render the table. The model contains all of the
-                            information needed to render the table and gives greatest flexibility,
-                            but it may be harder to implement than simply using the
-                            <code>source</code>
-                            and
-                            <code>columns</code>
-                            parameters.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>keyExpression</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                        Only active in a form. An OGNL expression that returns the primary key of the iterated value. 
-            The primary keys are stored in hidden fields during rendering and are loaded from the form
-            during a rewind to ensure that the iterations remain the same.
-            This is a simpler, but a less efficient alternative of the 'converter' parameter.
-            If needed, please use in conjuction with 'fullSource' to reference objects 
-            not currently present in 'source'.
-            <br/><br/>
-            Also, use the 'defaultValue' parameter to define the object to be returned if
-            a value corresponding to a particular primary key cannot be found.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>fullSource</td>
-                        <td>Object/Collection</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                         Only active in a form and in combination with the 'keyExpression' parameter. 
-            If an object corresponding to a primary key stored in the form cannot be
-            found in the 'source' parameter, then the objects provided by this parameter 
-            are searched for a match next. 
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>defaultValue</td>
-                        <td></td>
-                        <td>no</td>
-                        <td>null</td>
-                        <td>
-                         Only active in a form. The value to be used when no match for a 
-                         given primary key is found. 
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>converter</td>
-                        <td></td>
-                        <td>no</td>
-                        <td>null</td>
-                        <td>
-                         Only active in a form. Defines how the items iterated upon 
-            will be stored in the form as hidden values and how the stored information will be 
-            converted back to objects. 
-            This interface allows only the primary key of the items to be stored, 
-            rather than the whole item.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>primaryKeys</td>
-                        <td></td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                         Only active in a form. If provided, the parameter is automatically updated 
-		    before a rewind with the list of primary keys stored in the form. 
-		    The parameter is updated right before the iterations begin in a rewind and 
-		    could be used to preload the relevant objects in a provided 'converter'.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>volatile</td>
-                        <td></td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                         Only active in a form. Determines whether to avoid creating hidden fields within a form.
-            Using this parameter may make the form structure different during render and rewind, 
-            and cause exceptions as a result. Please use with caution.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>persist</td>
-                        <td>String</td>
-                        <td></td>
-                        <td><code>literal:session</code></td>
-                        <td>
-                            Defines how the table state (paging and sorting) will be persisted
-                            if no tableSessionStoreManager is defined.
-                            <br/><br/>
-                            The possible values are <code>session</code> (the default), 
-                            <code>client</code>, <code>client:page</code>, 
-                            and <code>client:app</code>.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>tableSessionStateManager</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html">
-                                <code>ITableSessionStateManager</code>
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>
-                            A custom session state manager that reloads the data at each request if
-                            it is provided via the
-                            <code>source</code>
-                            and
-                            <code>columns</code>
-                            parameters or stores all of it in the session if it is provided via the
-                            <code>tableModel</code>
-                            parameter
-                        </td>
-                        <td>
-                            This is the session state manager that will control what part of the
-                            table model will be saved in the session state. It is then used to
-                            recreate the table model by using what was saved in the session.
-                            <p>
-                                You can use one of the stock implementations of
-                                <a
-                                    href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html">
-                                    <code>ITableSessionStateManager</code>
-                                </a>
-                                to determine the session state behaviour, or you can define your
-                                own.
-                            </p>
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>tableSessionStoreManager</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.html">
-                                <code>ITableSessionStoreManager</code>
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Determines how the session state (returned by the session state manager)
-                            will be saved in the session. If this parameter is null, then the state
-                            will be saved as a persistent property. If it is not null, then the
-                            methods of the interface will be used to save and load the state.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>columnSettingsContainer</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IComponent.html">
-                                <code>IComponent</code>
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>container</td>
-                        <td>
-                            The container used to look up Blocks and messages when the
-                            source/columns mode is being used.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>index</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>If provided, the parameter is updated with the 
-                            index of the loop on each iteration.</td>
-                    </tr>
-                    <tr>
-                        <td>row</td>
-                        <td>Object</td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>The value object of the current row being rendered.</td>
-                    </tr>
-                    <tr>
-                        <td>column</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableColumn.html">
-                                <code>ITableColumn</code>
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>The object representing the current column being rendered.</td>
-                    </tr>
-
-                    <tr>
-                        <td>pageSize</td>
-                        <td>
-                            <code>int</code>
-                        </td>
-                        <td>no</td>
-                        <td>10</td>
-                        <td>
-                            The number of records displayed per page.
-                            <p>
-                                This parameter is only used with the
-                                <code>source</code>
-                                and
-                                <code>columns</code>
-                                parameters.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>pagesDisplayed</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>7</td>
-                        <td>
-                            Determines the maximum number of pages to be displayed in the page list
-                            when the table has more than one page.
-                            <p>
-                                For example, if the table has 20 pages, and 10 is the current page,
-                                pages from 7 to 13 in the page list will be shown if this parameter
-                                has a value of 7.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>initialPage</td>
-                        <td>
-                            <code>int</code>
-                        </td>
-                        <td>no</td>
-                        <td>0</td>
-                        <td>
-                            The initial page to be displayed.
-                            <br/><br/>
-                            This is the first page by default.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>initialSortColumn</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/docs/api/java/lang/String.html">
-                                String
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>null</td>
-                        <td>
-                            The id of the column to initially sort the table by. A value of
-                            <code>null</code>
-                            indicates no sorting.
-                            <p>
-                                This parameter is only used with the
-                                <code>source</code>
-                                and
-                                <code>columns</code>
-                                parameters.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>initialSortOrder</td>
-                        <td>
-                            <code>boolean</code>
-                        </td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            The order of the initial sorting. Set this parameter to
-                            <code>false</code>
-                            to sort in an ascending order and to
-                            <code>true</code>
-                            to sort in a descending one.
-                            <p>
-                                This parameter is only used with the
-                                <code>source</code>
-                                and
-                                <code>columns</code>
-                                parameters.
-                            </p>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>arrowUpAsset</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                <code>IAsset</code>
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>The image to use to describe a column sorted in an ascending order.</td>
-                    </tr>
-
-                    <tr>
-                        <td>arrowDownAsset</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                <code>IAsset</code>
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>The image to use to describe a column sorted in a descending order.</td>
-                    </tr>
-
-                    <tr>
-                        <td>pagesClass</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/docs/api/java/lang/String.html">
-                                String
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>The CSS class of the table pages.</td>
-                    </tr>
-
-                    <tr>
-                        <td>columnsClass</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/docs/api/java/lang/String.html">
-                                String
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>The CSS class of the table columns.</td>
-                    </tr>
-
-                    <tr>
-                        <td>rowsClass</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/docs/api/java/lang/String.html">
-                                String
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>The CSS class of the table rows.</td>
-                    </tr>
-
-                    <tr>
-                        <td>valuesClass</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/docs/api/java/lang/String.html">
-                                String
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>The CSS class of the table values.</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-                <p>
-                    You can find examples in the Tutorial as part of the Workbench application under
-                    the "Table" tab.
-                </p>
-                <p>
-                    That page consists of two components -- the
-                    <code>LocaleList</code>
-                    component and the
-                    <code>LocaleSelection</code>
-                    component.
-                </p>
-                <p>
-                    The
-                    <code>LocaleList</code>
-                    component allows you to view all Locales in a table (similar to the example
-                    above), as well as to choose Locales from the table and add them to your
-                    "selection".
-                </p>
-                <p>
-                    The
-                    <code>LocaleSelection</code>
-                    component displays the selected Locales and provides additional information
-                    about them. It also allows Locales to be removed from the selection.
-                </p>
-                <p>
-                    Even though the two components utilizing the Table are placed on a single page,
-                    they can operate without any interference from each other with no effort at all
-                    on part of the developer -- each table can be sorted independently, for example.
-                    This is a good illustration of the power of Tapestry's component approach.
-                </p>
-
-            </subsection>
-            
-            <subsection name="Complicated Render">
-               <p>
-                This example shows how you can use the individual components that the Table component wraps to
-                provide more control over how the table is rendered.
-               </p>
-               
-               <subsection name="HTML Template">
-<source><![CDATA[
-
-<table jwcid="tableView@contrib:TableView" 
-	source="ognl:scores"
-columns="name:sampleName,score1:Score 1:getScoreDisplay(0),score2:Score 2:getScoreDisplay(1),score3:Score 3:getScoreDisplay(2)"
-	>
-    <tr>
-     <span jwcid="@contrib:TableColumns" />
-    </tr>
-   
-   <tr jwcid="tableRows@contrib:TableRows" class="ognl:beans.evenOdd.next">
-     <td align="left">
-      <span jwcid="@Insert" value="ognl:components.tableRows.tableRow.sampleName" />
-     </td>
-     <td align="right">
-       <span jwcid="@Insert" value="ognl:components.tableRows.tableRow.getScoreDisplay(0)" />
-     </td>
-     <td align="right">
-       <span jwcid="@Insert" value="ognl:components.tableRows.tableRow.getScoreDisplay(1)" />
-     </td>
-     <td align="right">
-       <span jwcid="@Insert" value="ognl:components.tableRows.tableRow.getScoreDisplay(2)" />
-     </td>
-   </tr>
-        
-  <tr>
-    <td colspan="4" class="tablePages">
-      <span jwcid="tablePages@contrib:TablePages"/>
-    </td>
-  </tr>
-</table>
-
-]]></source>
-               </subsection>
-               
-               <p>
-                As you can see from the example there really isn't very much you can't control on an individual basis.
-                Of particular note is the area doing table row rendering, the <code>components.tableRows.tableRow.getFoo</code>
-                reference shows how you can get access to each individual data item being iterated over.
-               </p>
-               
-            </subsection>
-            
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablecolumns.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablecolumns.xml
deleted file mode 100644
index 0e38ac0..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablecolumns.xml
+++ /dev/null
@@ -1,175 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>TableColumns</title>
-    </properties>
-    <body>
-
-        <section name="TableColumns">
-
-            <p>
-                A low level
-                <a href="table.html">Table</a>
-                component that renders the column headers in the table. This component must be
-                wrapped by
-                <a href="tableview.html">TableView</a>
-                .
-            </p>
-            <p>
-                The component iterates over all column objects in the
-                <a
-                    href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableColumnModel.html">
-                    ITableColumnModel
-                </a>
-                and renders a header for each one of them using the renderer provided by the
-                <code>getColumnRender()</code>
-                method in
-                <a
-                    href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableColumn.html">
-                    ITableColumn
-                </a>
-                . The headers are wrapped in 'th' tags by default.
-            </p>
-
-            <span class="info">
-                <strong>Note:</strong>
-                <p>
-                The table header rendered by this component has two main css class definitions. The
-                embedded table html markup within each
-                <code>th</code>
-                element has the class
-                <code>tableHeaderImage</code>
-                . The image used to sort table columns has an embedded style class definition for
-                <code>tableHeaderImage</code>
-                that defines
-                <code>align:center</code>
-                .
-                <br />
-                You may override these definitions with your own css rules.
-                </p>
-            </span>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="table.html">Table</a>
-                    ,
-                    <a href="tableview.html">TableView</a>
-                    ,
-                    <a href="tablepages.html">TablePages</a>
-                    ,
-                    <a href="tablerows.html">TableRows</a>
-                    ,
-                    <a href="tablevalues.html">TableValues</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>element</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>th</td>
-                        <td>The tag to use to wrap the column headers.</td>
-                    </tr>
-
-                    <tr>
-                        <td>column</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/table/model/ITableColumn.html">
-                                ITableColumn
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>The column currently being rendered [out]</td>
-                    </tr>
-
-                    <tr>
-                        <td>arrowUpAsset</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-
-                        <td>The image to use to describe a column sorted in an ascending order.</td>
-                    </tr>
-
-                    <tr>
-                        <td>arrowDownAsset</td>
-                        <td>
-                            <a href="../../apidocs/org/apache/tapestry/IAsset.html">
-                                IAsset
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-                        <td>The image to use to describe a column sorted in a descending order.</td>
-                    </tr>
-                    
-                    <tr>
-                        <td>class</td>
-                        <td>
-                        String
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-
-                        <td>The css class name to apply to each th element.</td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed,inherited</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablepages.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablepages.xml
deleted file mode 100644
index 9f2ff41..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablepages.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>TablePages</title>
-    </properties>
-    <body>
-
-        <section name="TablePages">
-
-            <p>
-                A low level
-                <a href="table.html">Table</a>
-                component that renders the pages in the table. This component must be wrapped by
-                <a href="tableview.html">TableView</a>
-                .
-            </p>
-            <p>
-                The component generates a list of pages in the
-                <a href="table.html">Table</a>
-                centered around the current one and allows you to navigate to other pages.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="table.html">Table</a>
-                    ,
-                    <a href="tableview.html">TableView</a>
-                    ,
-                    <a href="tablepages.html">TablePages</a>
-                    ,
-                    <a href="tablerows.html">TableRows</a>
-                    ,
-                    <a href="tablevalues.html">TableValues</a>
-                    ,
-                    <a href="tablecolumns.html">TableColumns</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>pagesDisplayed</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>7</td>
-                        <td>
-                            Determines the maximum number of pages to be displayed in the page list
-                            when the table has more than one page.
-                            <br />
-                            For example, if the table has 20 pages, and 10 is the current page,
-                            pages from 7 to 13 in the page list will be shown if this parameter has
-                            a value of 7.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablerows.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablerows.xml
deleted file mode 100644
index 1e0efdb..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablerows.xml
+++ /dev/null
@@ -1,214 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>TableRows</title>
-    </properties>
-    <body>
-
-        <section name="TableRows">
-            <p>
-                A low level
-                <a href="table.html">Table</a>
-                component that generates the rows of the current page in the table. This component
-                must be wrapped by
-                <a href="tableview.html">TableView</a>
-                .
-                <br />
-                The component iterates over the rows of the current page in the table. The rows are
-                wrapped in 'tr' tags by default. You can define columns manually within, or you can
-                use
-                <a href="tablevalues.html">TableValues</a>
-                to generate the columns automatically.
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="table.html">Table</a>
-                    ,
-                    <a href="tableview.html">TableView</a>
-                    ,
-                    <a href="tablepages.html">TablePages</a>
-                    ,
-                    <a href="tablerows.html">TableRows</a>
-                    ,
-                    <a href="tablevalues.html">TableValues</a>
-                    ,
-                    <a href="tablecolumns.html">TableColumns</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>row</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html">
-                                Object
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-
-                        <td>The value object of the current row being rendered.</td>
-                    </tr>
-                    <tr>
-                        <td>index</td>
-                        <td>
-                        Object
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>If provided, the parameter is updated with the index of the loop on each iteration.</td>
-                    </tr>
-                    <tr>
-                        <td>element</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html">
-                                String
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>tr</td>
-
-                        <td>The tag to use to wrap the rows in.</td>
-                    </tr>
-                    <tr>
-                        <td>keyExpression</td>
-                        <td>
-                        Object
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                        Only active in a form. An OGNL expression that returns the primary key of the iterated value. 
-            The primary keys are stored in hidden fields during rendering and are loaded from the form
-            during a rewind to ensure that the iterations remain the same.
-            This is a simpler, but a less efficient alternative of the 'converter' parameter.
-            If needed, please use in conjuction with 'fullSource' to reference objects 
-            not currently present in 'source'.
-            Also, use the 'defaultValue' parameter to define the object to be returned if
-            a value corresponding to a particular primary key cannot be found.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>fullSource</td>
-                        <td>
-                        Object/Collection
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                        Only active in a form and in combination with the 'keyExpression' parameter. 
-            If an object corresponding to a primary key stored in the form cannot be
-            found in the 'source' parameter, then the objects provided by this parameter 
-            are searched for a match next. 
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>defaultValue</td>
-                        <td>
-                        Object
-                        </td>
-                        <td>no</td>
-                        <td>null</td>
-                        <td>
-                        Only active in a form. The value to be used when 
-                        no match for a given primary key is found. 
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>converter</td>
-                        <td>
-                        Object
-                        </td>
-                        <td>no</td>
-                        <td>null</td>
-                        <td>
-                         Only active in a form. Defines how the items iterated upon 
-            will be stored in the form as hidden values and how the stored information will be 
-            converted back to objects. 
-            This interface allows only the primary key of the items to be stored, 
-            rather than the whole item.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>primaryKeys</td>
-                        <td>
-                        Object
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                         Only active in a form. If provided, the parameter is automatically updated 
-            before a rewind with the list of primary keys stored in the form. 
-            The parameter is updated right before the iterations begin in a rewind and 
-            could be used to preload the relevant objects in a provided 'converter'.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>volatile</td>
-                        <td>
-                        boolean
-                        </td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                         Only active in a form. Determines whether to avoid creating hidden fields within a form.
-			Using this parameter may make the form structure different during render and rewind, 
-			and cause exceptions as a result. Please use with caution.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablevalues.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablevalues.xml
deleted file mode 100644
index 9c5376f..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tablevalues.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>TableValues</title>
-    </properties>
-    <body>
-
-        <section name="TableValues">
-
-            <p>
-                A low level
-                <a href="table.html">Table</a>
-                component that generates the columns in the current row in the table. This component
-                must be wrapped by
-                <a href="tablerows.html">TableRows</a>
-                .
-                <br />
-                The component iterates over the columns in the table and automatically renders the
-                column values for the current table row. The columns are wrapped in 'td' tags by
-                default.
-                <br />
-                The column values are rendered using the renderer returned by the
-                <code>getValueRenderer()</code>
-                method in
-                <a
-                    href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableColumn.html">
-                    ITableColumn
-                </a>
-                .
-            </p>
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="table.html">Table</a>
-                    ,
-                    <a href="tableview.html">TableView</a>
-                    ,
-                    <a href="tablepages.html">TablePages</a>
-                    ,
-                    <a href="tablerows.html">TableRows</a>
-                    ,
-                    <a href="tablecolumns.html">TableColumns</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>column</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableColumn.html">
-                                ITableColumn
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td> </td>
-
-                        <td>The object representing the current column being rendered.</td>
-                    </tr>
-
-                    <tr>
-                        <td>element</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html">
-                                String
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>tr</td>
-
-                        <td>The tag to use to wrap the column values in.</td>
-                    </tr>
-                    <tr>
-                        <td>class</td>
-                        <td>
-                          String
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>The CSS class that will be applied to each table value <code>&lt;td&gt;</code></td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-            
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tableview.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tableview.xml
deleted file mode 100644
index 33ca848..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/tableview.xml
+++ /dev/null
@@ -1,488 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>TableView</title>
-    </properties>
-    <body>
-
-        <section name="TableView">
-
-            <p>
-                <strong>Providing the data</strong>
-            </p>
-
-            <p>
-                A low level
-                <a href="table.html">Table</a>
-                component that wraps all other low level
-                <a href="table.html">Table</a>
-                components. This component carries the
-                <a href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableModel.html">
-                    ITableModel
-                </a>
-                that is used by the other
-                <a href="table.html">Table</a>
-                components. The information that will be displayed can be provided either via the
-                source and columns parameters, or via the
-                <code>tableModel</code>
-                parameters.
-            </p>
-
-            <p>
-                There are many ways to provide the component with the data it has to render, but
-                here are the three major ones:
-            </p>
-
-            <ol>
-                <li>
-                    The data is passed to the source parameter in the form of an array, a
-                    collection, or an iterator, and the table columns are defined using the columns
-                    parameter (see further for details). Both of these parameters will be evaluated
-                    at every request by default, so changes in the data or the table columns will be
-                    displayed immediately.
-                    <br />
-                    <br />
-                    This is the easiest and most straightforward approach. It has one performance
-                    limitation, however - if the table is sorting the data according to a given
-                    column, the sorting will be performed at every request. The next methods provide
-                    ways to resolve this possible performance issue.
-                </li>
-
-                <li>
-                    The data is passed to the source parameter via an object that implements the
-                    IBasicTableModel interface. Through that interface you are given the sorting
-                    column (if any) and the numbers of the items that will be displayed on the
-                    current page. You then need to provide the component with the corresponding
-                    data.
-                    <br />
-                    <br />
-                    This method allows you to perform the sorting in the database and load only the
-                    data that will be displayed on the current page (e.g. by using the ORDER BY,
-                    LIMIT, and OFFSET clauses in SQL) and hence it could be far more efficient.
-                </li>
-
-                <li>
-                    All of the information (data, columns, state) is packaged in an
-                    <a
-                        href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableModel.html">
-                        ITableModel
-                    </a>
-                    and is passed to the
-                    <code>tableModel</code>
-                    parameter.
-                    <br />
-                    <br />
-                    This approach allows greatest flexibility, but is recommended only for advanced
-                    users of the Table components.
-                </li>
-            </ol>
-
-            <p>
-                <strong>Defining the columns</strong>
-            </p>
-
-            <p>
-                If you define the table columns using the
-                <code>columns</code>
-                parameter, you can either provide a list of
-                <a
-                    href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableColumn.html">
-                    <code>ITableColumn</code>
-                </a>
-                objects, each defining a column in the table, or you can define the columns using a
-                string that describes each column.
-            </p>
-            <p>The string describing the columns must be formatted in the following way:</p>
-            <ul>
-                <li>
-                    The column definitions in the string are separated by commas
-                    <br />
-                    <br />
-                </li>
-                <li>
-                    Each column definition must be of one of the following types:
-                    <ul>
-                        <li>id</li>
-                        <li>id:expression</li>
-                        <li>id:description:expression</li>
-                    </ul>
-                    <br />
-                    Here the
-                    <strong>id</strong>
-                    defines the identification of the column, the
-                    <strong>expression</strong>
-                    is an OGNL expression that extracts the column value from the row object, and
-                    <strong>description</strong>
-                    is the title of the column if it is not defined otherwise.
-                    <br />
-                    <br />
-                    Each column definition may be prefixed by the
-                    <strong>!</strong>
-                    character, which identifies the column as non-sortable.
-                    <br />
-                    <br />
-                    If defined, a Block with a name that is starts with the column id and ends with
-                    <em>ColumnValue</em>
-                    will be used to render the column values. Similarly, a Block with a name that
-                    starts with the column id and ends with
-                    <em>ColumnHeader</em>
-                    will be used to render the column headers.
-                    <br />
-                    <br />
-                    Finally, the title of the column will be taken from translation strings of the
-                    component by using the column id as a key.
-                    <br />
-                    <br />
-                    Please see the
-                    <code>LocaleSelection</code>
-                    component for examples.
-                    <br />
-                    <br />
-                </li>
-                <li>
-                    A column definition may also be of the type
-                    <br />
-                    <br />
-                    <ul>
-                        <li>=expression</li>
-                    </ul>
-                    <br />
-                    in which case it identifies an OGNL expression that returns an
-                    <a
-                        href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableColumn.html">
-                        <code>ITableColumn</code>
-                    </a>
-                    object defining the column.
-                    <br />
-                    <br />
-                </li>
-                <li>
-                    The full description string may be prefixed by the
-                    <strong>*</strong>
-                    character, which means that the table is to be rendered within a form, and the
-                    column headers must submit the form if they are clickable (i.e. if the column is
-                    sortable).
-                </li>
-            </ul>
-            <p>
-                Here is an example of the use of a description string to define columns:
-                <code>
-                    columns="locale:toString(), =currencyColumn,
-                    verbosity:Verbosity:currentRowVerbosity, !delete"
-                </code>
-            </p>
-
-
-            <p>
-                <strong>
-                    See also:
-                    <a href="table.html">Table</a>
-                    ,
-                    <a href="tableview.html">TableView</a>
-                    ,
-                    <a href="tablepages.html">TablePages</a>
-                    ,
-                    <a href="tablerows.html">TableRows</a>
-                    ,
-                    <a href="tablevalues.html">TableValues</a>
-                    ,
-                    <a href="tablecolumns.html">TableColumns</a>
-                </strong>
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr>
-                        <td>source</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html">
-                                Object
-                            </a>
-                            []
-                            <br />
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collection.html">
-                                Collection
-                            </a>
-                            <br />
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Iterator.html">
-                                Iterator
-                            </a>
-                            <br />
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/IBasicTableModel.html">
-                                IBasicTableModel
-                            </a>
-                        </td>
-                        <td rowspan="3">
-                            You must provide either both
-                            <code>source</code>
-                            and
-                            <code>columns</code>
-                            parameters or the
-                            <code>tableModel</code>
-                            parameter
-                        </td>
-                        <td> </td>
-
-                        <td>
-                            The data to be displayed by the component. This parameter must be used
-                            in combination with the columns parameter. The parameter must be an
-                            array of values, a collection, an iterator, or an object implementing
-                            the
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/IBasicTableModel.html">
-                                IBasicTableModel
-                            </a>
-                            interface.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>columns</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html">
-                                String
-                            </a>
-                            <br />
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableColumnModel.html">
-                                ITableColumnModel
-                            </a>
-                            <br />
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableColumnModel.html">
-                                ITableColumnModel
-                            </a>
-                            <br />
-                            <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html">
-                                List
-                            </a>
-                            <br />
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Iterator.html">
-                                Iterator
-                            </a>
-                        </td>
-                        <td></td>
-                        <td> </td>
-
-                        <td>
-                            The table columns to be displayed. The parameter must be an array, a
-                            list, or an Iterator of ITableColumn objects, an ITableColumnModel, or a
-                            String describing the columns (see documentation).
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>tableModel</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableModel.html">
-                                ITableModel
-                            </a>
-                        </td>
-                        <td></td>
-                        <td> </td>
-
-                        <td>
-                            The
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableModel.html">
-                                ITableModel
-                            </a>
-                            to be used to render the table. The model contains all of the
-                            information needed to render the table and gives greatest flexibility,
-                            but it may be harder to implement than simply using the source and
-                            columns parameters.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>persist</td>
-                        <td>String</td>
-                        <td></td>
-                        <td><code>literal:session</code></td>
-                        <td>
-                            Defines how the table state (paging and sorting) will be persisted
-                            if no tableSessionStoreManager is defined.
-                            <br/><br/>
-                            The possible values are <code>session</code> (the default), 
-                            <code>client</code>, <code>client:page</code>, 
-                            and <code>client:app</code>.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>tableSessionStateManager</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableSessionStateManager.html">
-                                ITableSessionStateManager
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>
-                            A custom session state manager that reloads the data at each request if
-                            it is provided via the source and columns parameters or stores all of it
-                            in the session if it is provided via the tableModel parameter
-                        </td>
-
-                        <td>
-                            This is the session state manager that will control what part of the
-                            table model will be saved in the session state. It is then used to
-                            recreate the table model by using what was saved in the session.
-                            <br />
-                            You can use one of the stock implementations of
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableSessionStateManager.html">
-                                ITableSessionStateManager
-                            </a>
-                            to determine the session state behaviour, or you can define your own.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>tableSessionStoreManager</td>
-                        <td>
-                            <a
-                                href="../../tapestry-contrib/apidocs/org/apache/tapestry/table/model/ITableSessionStoreManager.html">
-                                ITableSessionStoreManager
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            Determines how the session state (returned by the session state manager)
-                            will be saved in the session. If this parameter is null, then the state
-                            will be saved as a persistent property. If it is not null, then the
-                            methods of the interface will be used to save and load the state.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>pageSize</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>10</td>
-                        <td>
-                            The number of records displayed per page.
-                            <br />
-                            This parameter is only used with the source and columns parameters.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>initialSortColumn</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html">
-                                String
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The id of the column to initially sort the table by. A value of null
-                            indicates no sorting.
-                            <br />
-                            This parameter is only used with the source and columns parameters.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>initialSortOrder</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            The order of the initial sorting. Set this parameter to false to sort in
-                            an ascending order and to true to sort in a descending one.
-                            <br />
-                            This parameter is only used with the source and columns parameters.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>element</td>
-                        <td>
-                            <a
-                                href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html">
-                                String
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>table</td>
-                        <td>
-                            The tag that will be used to wrap the inner components. If no binding is
-                            given, the tag that will be generated is 'table'. If you would like to
-                            place the bounds of the table elsewhere, you can make the element 'span'
-                            or another neutral tag and manually define the table.
-                        </td>
-                    </tr>
-                    <tr>
-                        <td>columnSettingsContainer</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IComponent.html">
-                                <code>IComponent</code>
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td>container</td>
-                        <td>
-                            The container used to look up Blocks and messages when the
-                            source/columns mode is being used.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/timeout.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/timeout.xml
deleted file mode 100644
index dcd2f9b..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/timeout.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Timeout</title>
-    </properties>
-    <body>
-
-        <section name="Timeout">
-
-            <p>
-                Displays a message to the user when a certain amount of time remains to the
-                expiration of the session.
-            </p>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>warningTime</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>300</td>
-                        <td>
-                            The number of seconds before session expiration when a warning message
-                            will appear.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>autoProlongTime</td>
-                        <td>int</td>
-                        <td>no</td>
-                        <td>900</td>
-                        <td>
-                            The number of seconds before session expiration when the session will be
-                            automatically prolonged upon user activity.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>warningMessage</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>
-                            The connection was inactive for more than {0} minutes. Your session will
-                            expire at {1}.\\n Please click OK to continue your work or CANCEL to
-                            close the session.
-                        </td>
-                        <td>
-                            The warning message that will appear when the session is about to
-                            exipre. Here {0} is replaced by the number of minutes that remain until
-                            expiration and {1} is replaced with the time when the expiration will
-                            occur.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>expirationMessage</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td>Your session has expired. Please log in again.</td>
-                        <td>
-                            The message that will appear when the session exipres and the user needs
-                            to log in again.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>disableWarning</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>Do not display a warning message after 'warningTime' seconds.</td>
-                    </tr>
-
-                    <tr>
-                        <td>disableAutoProlong</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Disable the automatic prolonging of a session after 'autoProlongTime'
-                            seconds upon user activity.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>expirationFunction</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The JavaScript function that will be invoked when the session expires.
-                        </td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>forbidden</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-
-                <source xml:space="preserve">
-&lt;html&gt;
-  &lt;head&gt;
-    &lt;title&gt;Timeout Example&lt;/title&gt;
-  &lt;/head&gt;
-  &lt;body&gt;
-    &lt;span jwcid="@contrib:Timeout" warningTime="100"/&gt;
-  &lt;/body&gt;
-&lt;/html&gt;
-	</source>
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/xtile.xml b/tapestry/tapestry-contrib/src/site/xdoc/componentreference/xtile.xml
deleted file mode 100644
index 5598235..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/componentreference/xtile.xml
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005, 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>XTile</title>
-    </properties>
-    <body>
-
-        <section name="XTile">
-
-            <p>
-                A component providing the required JavaScript to pass some information to the server
-                and receive its response without reloading the page (Ajax)
-            </p>
-
-            <span class="warn">
-                <strong>Warning:</strong>
-                <p>
-                The
-                <a
-                    href="../../tapestry-contrib/apidocs/org/apache/tapestry/contrib/ajax/XTileService.html">
-                    XTileService
-                </a>
-                that this component uses does NOT activate any page - it simply calls the specified
-                listener. This means that <code>pageBeginRender()</code> methods will not get called and that
-                <code>cycle.getPage()</code> will return null.
-                </p>
-            </span>
-
-            <subsection name="Parameters">
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Type</th>
-                        <th>Required</th>
-                        <th>Default</th>
-                        <th>Description</th>
-                    </tr>
-
-                    <tr>
-                        <td>listener</td>
-                        <td>
-                            <a
-                                href="../../apidocs/org/apache/tapestry/IActionListener.html">
-                                IActionListener
-                            </a>
-                        </td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The listener that will be invoked when the Javascript function with the
-                            given name is invoked. Any parameters passed to the send function will
-                            be available from <code>cycle.getListenerParameters()</code>. In addition, the
-                            listener can perform <code>cycle.setListenerParameters()</code> to pass an array of
-                            strings to the JavaScript receive function. If this parameter is not provided,
-	                        Tapestry will attempt to find a listener with the capitalized id of the
-	                        component, prefixed by "do". For example, jwcid="clear@XTile" would expect
-	                        a listener called doClear().
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>sendName</td>
-                        <td>String</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The name of the JavaScript function that the script will define to allow
-                            the application to send information to the server.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>receiveName</td>
-                        <td>String</td>
-                        <td>yes</td>
-                        <td></td>
-                        <td>
-                            The name of the JavaScript function that the script will call to allow
-                            the application to receive information from the server some time after
-                            the send function has been invoked.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>errorName</td>
-                        <td>String</td>
-                        <td>no</td>
-                        <td></td>
-                        <td>
-                            The name of the JavaScript function that the script will call to
-                            indicate that an error has occurred while sending the information to the
-                            server.
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td>disableCaching</td>
-                        <td>boolean</td>
-                        <td>no</td>
-                        <td>false</td>
-                        <td>
-                            Some browsers cache repeated requests that have identical URLs. Pass
-                            'true' to this parameter to disable caching by making the URLs unique.
-                        </td>
-                    </tr>
-                </table>
-
-                <p>
-                    Body:
-                    <strong>removed</strong>
-                </p>
-
-                <p>
-                    Informal parameters:
-                    <strong>allowed</strong>
-                </p>
-
-                <p>
-                    Reserved parameters:
-                    <em>none</em>
-                </p>
-
-            </subsection>
-
-            <subsection name="Examples">
-
-                <p>
-                    The XTile example has portions implemented in the HTML and a listener method in
-                    the page class. They are broken down as follows:
-                </p>
-
-                <p>XTileExample.html</p>
-
-                <source xml:space="preserve">
-&lt;html&gt;
-  &lt;head&gt;
-    &lt;title&gt;XTile Example&lt;/title&gt;
-  &lt;/head&gt;
-  &lt;body&gt;
-    &lt;span jwcid="@contrib:XTile" listener="ognl:listeners.handleListRequest"
-        sendName="sendPrefix" receiveName="recvList"/&gt;
-    &lt;form action="Results.html" method="post"&gt;
-       &lt;input type="text" onkeyup="sendPrefix(this.value)"/&gt;
-       &lt;br/&gt;
-       &lt;textarea name="listing" rows="5"&gt;&lt;/textarea&gt;
-    &lt;/form&gt;
-    &lt;script&gt;
-      function recvList(arr) {
-      	document.f.listing.value = arr.join("\n");
-      }
-    &lt;/script&gt;
-
-  &lt;/body&gt;
-&lt;/html&gt;
-	</source>
-
-                <p>Then in your page class you just need to add the appropriate method.</p>
-
-                <p>XTileExample.java</p>
-                <source xml:space="preserve">
-    .
-    .
-    .
-    public void handleListRequest(IRequestCycle cycle) {
-      Object[] params = cycle.getListenerParameters();
-      if (params.length == 0) return;
-
-      String typed = params[0].toString();
-      String[] ret = findCompletions(typed);
-      cycle.setListenerParameters(ret);
-    }
-    .
-    .
-    .
-	</source>
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/site/xdoc/index.xml b/tapestry/tapestry-contrib/src/site/xdoc/index.xml
deleted file mode 100644
index 7c54669..0000000
--- a/tapestry/tapestry-contrib/src/site/xdoc/index.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Tapestry Contrib Library</title>
-    </properties>
-    <body>
-
-        <section name="Tapestry Contrib Library">
-
-            <p>A collection of powerful add-on components for Tapestry.</p>
-            <p>
-                This library started as a collection of components
-                <em>contrib</em>
-                uted by the community.
-            </p>
-
-            <p>
-                To make use of this library, you must include its JAR on the classpath (typically,
-                by copying it into WEB-INF/lib), and extend your application specification, and add
-                a &lt;library&gt; element:
-            </p>
-
-            <source xml:space="preserve">
- &lt;library id="contrib" specification-path="classpath:/org/apache/tapestry/contrib/Contrib.library"/&gt;
-</source>
-
-            <p>You may then reference the components of the framework using the prefix:</p>
-
-            <source xml:space="preserve">
-  &lt;table jwcid="@contrib:Table" ...&gt; ... 
-</source>
-
-            <p>
-                The prefix "contrib:" can be changed; if you don't like typing, make it "c:" ...
-                Tapestry doesn't care!
-            </p>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/components/Normal.txt b/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/components/Normal.txt
deleted file mode 100644
index e7cece9..0000000
--- a/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/components/Normal.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-0000: aced0005 74001361 20736572 69616c69  |....t..a seriali|

-0010: 7a656420 73747269 6e67               |zed string      |

diff --git a/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/components/TestDumpObject.java b/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/components/TestDumpObject.java
deleted file mode 100644
index 33316bb..0000000
--- a/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/components/TestDumpObject.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.contrib.components;

-

-import java.io.BufferedInputStream;

-import java.io.BufferedReader;

-import java.io.InputStream;

-import java.io.InputStreamReader;

-import java.io.LineNumberReader;

-import java.io.Reader;

-

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.test.Creator;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.contrib.components.DumpObject}

- * 

- * @author Howard Lewis Ship

- * @since 4.0

- */

-@Test

-public class TestDumpObject extends BaseComponentTestCase

-{

-    /**

-     * Reads the content of a file, and forms a string. Converts line-number endings in the file

-     * into the correct platform value (this should help the test run properly on both Windows and

-     * *nix).

-     */

-    private String contentsOf(String path) throws Exception

-    {

-        String sep = System.getProperty("line.separator");

-

-        InputStream is = getClass().getResourceAsStream(path);

-

-        is = new BufferedInputStream(is);

-

-        Reader ir = new InputStreamReader(is);

-

-        ir = new BufferedReader(ir);

-

-        LineNumberReader lnr = new LineNumberReader(ir);

-

-        StringBuffer buffer = new StringBuffer();

-

-        while (true)

-        {

-            String line = lnr.readLine();

-

-            if (line == null)

-                break;

-

-            buffer.append(line);

-            buffer.append(sep);

-        }

-

-        ir.close();

-

-        return buffer.toString();

-    }

-

-    public void testNotSerializable()

-    {

-        Creator creator = new Creator();

-        Object object = new Object();

-

-        DumpObject dumpObject = (DumpObject) creator.newInstance(DumpObject.class);

-

-        assertEquals("java.io.NotSerializableException: java.lang.Object", dumpObject

-                .convert(object));

-    }

-

-    public void testRewinding()

-    {

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle(true);

-

-        Creator creator = new Creator();

-        DumpObject dumpObject = (DumpObject) creator.newInstance(DumpObject.class);

-

-        replay();

-

-        dumpObject.renderComponent(writer, cycle);

-

-        verify();

-    }

-

-    public void testNormal() throws Exception

-    {

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle(false);

-

-        Creator creator = new Creator();

-        DumpObject dumpObject = (DumpObject) creator.newInstance(DumpObject.class, new Object[]

-        { "object", "a serialized string" });

-

-        String expected = contentsOf("Normal.txt");

-

-        writer.print(expected);

-

-        replay();

-

-        dumpObject.renderComponent(writer, cycle);

-

-        verify();

-    }

-}

diff --git a/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/palette/PaletteValidationTest.java b/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/palette/PaletteValidationTest.java
deleted file mode 100644
index 65ff02c..0000000
--- a/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/palette/PaletteValidationTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright Aug 6, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.contrib.palette;
-
-import static org.easymock.EasyMock.aryEq;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.ValidatableFieldExtension;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.form.validator.Required;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link Palette} and {@link ValidatableFieldExtension} 
- * contributions.
- * 
- * @author jkuhnert
- */
-@Test
-public class PaletteValidationTest extends BaseComponentTestCase
-{
-
-    public void test_Palette_Required()
-    {
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        IRequestCycle cycle = newCycle();
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        IMarkupWriter writer = newWriter();
-        
-        JSONObject profile = new JSONObject();
-        Required required = new Required("message=Field {0} is required.");
-        
-        Palette component = newInstance(Palette.class, 
-                new Object[] { 
-            "validatableFieldSupport", vfs, 
-            "clientId", "pal", "displayName", "Pally"});
-        
-        expect(context.getProfile()).andReturn(profile);
-        
-        expect(context.formatValidationMessage(eq(required.getMessage()), eq(ValidationStrings.REQUIRED_FIELD), 
-                aryEq(new Object[] { "Pally" }) )).andReturn("Pally is required.");
-        
-        replay();
-        
-        assert component.overrideValidator(required, cycle);
-        
-        component.overrideContributions(required, context, writer, cycle);
-        
-        verify();
-        
-        assert profile.has(ValidationConstants.CONSTRAINTS);
-        
-        Object literal = profile.getJSONObject(ValidationConstants.CONSTRAINTS).get(component.getClientId());
-        
-        assert literal != null;
-        
-        assertEquals(literal.toString(),"[[tapestry.form.validation.isPalleteSelected]]");
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/services/TestRoundedCornerService.java b/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/services/TestRoundedCornerService.java
deleted file mode 100644
index 8e25230..0000000
--- a/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/services/TestRoundedCornerService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.apache.tapestry.contrib.services;
-
-import org.apache.tapestry.TestBase;
-import org.apache.tapestry.contrib.services.impl.RoundedCornerGenerator;
-import org.testng.annotations.Test;
-
-import java.awt.image.BufferedImage;
-
-/**
- * Tests functionality of {@link org.apache.tapestry.contrib.services.impl.RoundedCornerService}.
- */
-@Test
-public class TestRoundedCornerService extends TestBase {
-
-
-    public void test_Build_Corner()
-    throws Exception
-    {
-        RoundedCornerGenerator generator = new RoundedCornerGenerator();
-
-        BufferedImage image = generator.buildCorner("FF7E00", null, 30, 30, "tr", -1, -1);
-        assert image.getWidth() == 30;
-        assert image.getHeight() == 30;
-    }
-}
diff --git a/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/services/TestRoundedUtil.java b/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/services/TestRoundedUtil.java
deleted file mode 100644
index ea22b79..0000000
--- a/tapestry/tapestry-contrib/src/test/org/apache/tapestry/contrib/services/TestRoundedUtil.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.apache.tapestry.contrib.services;
-
-import org.apache.tapestry.contrib.services.impl.RoundedCornerGenerator;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.image.BufferedImage;
-
-/**
- *
- */
-public class TestRoundedUtil extends JComponent {
-
-    private static final int WIDTH = 100;
-    private static final int HEIGHT = 100;
-
-    public TestRoundedUtil()
-    {
-    }
-
-    public Dimension getPreferredSize() {
-
-        return new Dimension(200, 200);
-    }
-
-    public Dimension getMinimumSize() {
-
-        return new Dimension(200,200);
-    }
-
-    protected void paintComponent(Graphics g) {
-
-        Graphics2D g2 = (Graphics2D)g;
-
-        RoundedCornerGenerator generator = new RoundedCornerGenerator();
-        BufferedImage image = null;
-
-        try {
-
-            image = generator.buildShadow("99ccff", "white", 100, 100, 20f, 20f, 6, 0.5f);
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            System.exit(-1);
-        }
-
-        //g2.setColor(Color.white);
-        //g2.fillRect(0, 0, 100, 100);
-
-        g2.drawImage(image, 0, 0, null);
-    }
-
-    /*
-    protected void paintComponent(Graphics g) {
-
-        Graphics2D g2 = (Graphics2D)g;
-
-        RoundedCornerGenerator generator = new RoundedCornerGenerator();
-        BufferedImage image = null;
-
-        try {
-            
-            image = generator.buildSideShadow("top", 8, 0.5f);
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            System.exit(-1);
-        }
-
-        g2.setColor(Color.white);
-        g2.fillRect(0, 0, 100, 100);
-        
-        g2.drawImage(image, 0, 0, null);
-    }
-    */
-
-    /*
-    protected void paintComponent(Graphics g) {
-
-        Graphics2D g2 = (Graphics2D)g;
-
-        RoundedCornerGenerator generator = new RoundedCornerGenerator();
-        BufferedImage image = null;
-
-        try {
-
-            image = generator.buildCorner("6188C7", "white", 6, 6, "tr", -1, -1);
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            System.exit(-1);
-        }
-
-        g2.drawImage(image, 0, 0, null);
-
-        
-    }*/
-
-    private static void createAndShowGUI() {
-        //Create and set up the window.
-        JFrame frame = new JFrame("Rounded Corner Viewer");
-        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
-        //Create and set up the content pane.
-        TestRoundedUtil id = new TestRoundedUtil();
-        frame.getContentPane().add(id, BorderLayout.CENTER);
-
-        //Display the window.
-        frame.pack();
-        frame.setVisible(true);
-    }
-
-    public static void main(String[] args) {
-        //Schedule a job for the event-dispatching thread:
-        //creating and showing this application's GUI.
-        javax.swing.SwingUtilities.invokeLater(new Runnable() {
-            public void run() {
-                createAndShowGUI();
-            }
-        });
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/pom.xml b/tapestry/tapestry-examples/TimeTracker/pom.xml
deleted file mode 100644
index ebdd47a..0000000
--- a/tapestry/tapestry-examples/TimeTracker/pom.xml
+++ /dev/null
@@ -1,151 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-TimeTracker</artifactId>
-    <packaging>war</packaging>
-    <version>4.1.3</version>
-    <!-- This should change to tapestry-project -->
-    <parent>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>tapestry-examples</artifactId>
-        <version>4.1.3</version>
-    </parent>
-    <name>Tapestry Time Tracker</name>
-    <inceptionYear>2006</inceptionYear>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-framework</artifactId>
-            <version>4.1.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-annotations</artifactId>
-            <version>4.1.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-contrib</artifactId>
-            <version>4.1.3</version>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind-lib</artifactId>
-        </dependency>
-        <!-- Really, a transitive dependency of hivemind. -->
-        <dependency>
-            <groupId>oro</groupId>
-            <artifactId>oro</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-fileupload</groupId>
-            <artifactId>commons-fileupload</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-beanutils</groupId>
-            <artifactId>commons-beanutils</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.14</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-dbcp</groupId>
-            <artifactId>commons-dbcp</artifactId>
-            <version>1.2.2</version>
-        </dependency>
-        <dependency>
-            <groupId>hsqldb</groupId>
-            <artifactId>hsqldb</artifactId>
-            <version>1.8.0.7</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <sourceDirectory>src/java</sourceDirectory>
-        <testSourceDirectory>src/test</testSourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <includes>
-                    <include>*.sql</include>
-                    <include>*.properties</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*.page</include>
-                    <include>**/*.jwc</include>
-                    <include>**/*.script</include>
-                    <include>**/*.library</include>
-                </includes>
-            </resource>
-        </resources>
-        
-        <plugins>
-            <plugin>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>maven-jetty-plugin</artifactId>
-                <version>6.1.3</version>
-                <configuration>
-                    <webAppSourceDirectory>src/context</webAppSourceDirectory>
-                    <webXml>src/context/WEB-INF/web.xml</webXml>
-                    <contextPath>/</contextPath>
-                    <webDefaultXml>src/config/webdefault.xml</webDefaultXml>
-                    <systemProperties>
-                        <systemProperty>
-                            <name>org.apache.tapestry.disable-caching</name>
-                            <value>true</value>
-                        </systemProperty>
-                    </systemProperties>
-                </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>commons-logging</groupId>
-                        <artifactId>commons-logging</artifactId>
-                        <version>1.0.4</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>log4j</groupId>
-                        <artifactId>log4j</artifactId>
-                        <version>1.2.13</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>2.0.2</version>
-                <configuration>
-                    <warSourceDirectory>${basedir}/src/context</warSourceDirectory>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/config/jetty.xml b/tapestry/tapestry-examples/TimeTracker/src/config/jetty.xml
deleted file mode 100644
index 5c08e10..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/config/jetty.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
-
-<Configure class="org.mortbay.jetty.webapp.WebAppContext" >
-    <Get name="sessionHandler">
-        <Get name="sessionManager">
-            <Set name="usingCookies" type="boolean">false</Set>
-        </Get>
-    </Get>
-</Configure>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/config/webdefault.xml b/tapestry/tapestry-examples/TimeTracker/src/config/webdefault.xml
deleted file mode 100644
index 116b9d0..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/config/webdefault.xml
+++ /dev/null
@@ -1,346 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!-- ===================================================================== -->
-<!-- This file contains the default descriptor for web applications.       -->
-<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-<!-- The intent of this descriptor is to include jetty specific or common  -->
-<!-- configuration for all webapps.   If a context has a webdefault.xml    -->
-<!-- descriptor, it is applied before the contexts own web.xml file        -->
-<!--                                                                       -->
-<!-- A context may be assigned a default descriptor by:                    -->
-<!--  + Calling WebApplicationContext.setDefaultsDescriptor                -->
-<!--  + Passed an arg to addWebApplications                                -->
-<!--                                                                       -->
-<!-- This file is used both as the resource within the jetty.jar (which is -->
-<!-- used as the default if no explicit defaults descriptor is set) and it -->
-<!-- is copied to the etc directory of the Jetty distro and explicitly     -->
-<!-- by the jetty.xml file.                                                -->
-<!--                                                                       -->
-<!-- ===================================================================== -->
-<web-app 
-   xmlns="http://java.sun.com/xml/ns/javaee" 
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
-   version="2.5"> 
-
-  <description>
-    Default web.xml file.  
-    This file is applied to a Web application before it's own WEB_INF/web.xml file
-  </description>
-
-
-  <!-- ==================================================================== -->
-  <!-- Context params to control Session Cookies                            -->
-  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-  <!-- UNCOMMENT TO ACTIVATE
-  <context-param>
-    <param-name>org.mortbay.jetty.servlet.SessionDomain</param-name>
-    <param-value>127.0.0.1</param-value>
-  </context-param>
-
-  <context-param>
-    <param-name>org.mortbay.jetty.servlet.SessionPath</param-name>
-    <param-value>/</param-value>
-  </context-param>
-
-  <context-param>
-    <param-name>org.mortbay.jetty.servlet.MaxAge</param-name>
-    <param-value>-1</param-value>
-  </context-param>
-  -->
-
-
-
-  <!-- ==================================================================== -->
-  <!-- The default servlet.                                                 -->
-  <!-- This servlet, normally mapped to /, provides the handling for static -->
-  <!-- content, OPTIONS and TRACE methods for the context.                  -->
-  <!-- The following initParameters are supported:                          -->
-  <!--                                                                      -->
-  <!--   acceptRanges     If true, range requests and responses are         -->
-  <!--                    supported                                         -->
-  <!--                                                                      -->
-  <!--   dirAllowed       If true, directory listings are returned if no    -->
-  <!--                    welcome file is found. Else 403 Forbidden.        -->
-  <!--                                                                      -->
-  <!--   redirectWelcome  If true, redirect welcome file requests           -->
-  <!--                    else use request dispatcher forwards              -->
-  <!--                                                                      -->
-  <!--   resoureBase      Can be set to replace the context resource base   -->
-  <!--                                                                      -->
-  <!--   relativeResourceBase                                               -->
-  <!--                    Set with a pathname relative to the base of the   -->
-  <!--                    servlet context root. Useful for only serving     -->
-  <!--                    static content from only specific subdirectories. -->
-  <!--                                                                      -->
-  <!--   useFileMappedBuffer                                                -->
-  <!--                    If set to true (the default), a  memory mapped    -->
-  <!--                    file buffer will be used to serve static content  -->
-  <!--                    when using an NIO connector. Setting this value   -->
-  <!--                    to false means that a direct buffer will be used  -->
-  <!--                    instead. If you are having trouble with Windows   -->
-  <!--                    file locking, set this to false.                  -->
-  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-  <servlet>
-    <servlet-name>default</servlet-name>
-    <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class>
-    <init-param>
-      <param-name>acceptRanges</param-name>
-      <param-value>true</param-value>
-    </init-param>
-    <init-param>
-      <param-name>dirAllowed</param-name>
-      <param-value>true</param-value>
-    </init-param>
-    <init-param>
-      <param-name>redirectWelcome</param-name>
-      <param-value>false</param-value>
-    </init-param>
-    <init-param>
-      <param-name>maxCacheSize</param-name>
-      <param-value>2000000</param-value>
-    </init-param>
-    <init-param>
-      <param-name>maxCachedFileSize</param-name>
-      <param-value>254000</param-value>
-    </init-param>
-    <init-param>
-      <param-name>maxCachedFiles</param-name>
-      <param-value>1000</param-value>
-    </init-param>
-    <init-param>
-      <param-name>useFileMappedBuffer</param-name>
-      <param-value>true</param-value>
-    </init-param>  
-    <load-on-startup>0</load-on-startup>
-  </servlet> 
-
-  <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
-  
-
-  <!-- ==================================================================== -->
-  <!-- JSP Servlet                                                          -->
-  <!-- This is the jasper JSP servlet from the jakarta project              -->
-  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-  <!-- The JSP page compiler and execution servlet, which is the mechanism  -->
-  <!-- used by Tomcat to support JSP pages.  Traditionally, this servlet    -->
-  <!-- is mapped to URL patterh "*.jsp".  This servlet supports the         -->
-  <!-- following initialization parameters (default values are in square    -->
-  <!-- brackets):                                                           -->
-  <!--                                                                      -->
-  <!--   checkInterval       If development is false and reloading is true, -->
-  <!--                       background compiles are enabled. checkInterval -->
-  <!--                       is the time in seconds between checks to see   -->
-  <!--                       if a JSP page needs to be recompiled. [300]    -->
-  <!--                                                                      -->
-  <!--   compiler            Which compiler Ant should use to compile JSP   -->
-  <!--                       pages.  See the Ant documenation for more      -->
-  <!--                       information. [javac]                           -->
-  <!--                                                                      -->
-  <!--   classdebuginfo      Should the class file be compiled with         -->
-  <!--                       debugging information?  [true]                 -->
-  <!--                                                                      -->
-  <!--   classpath           What class path should I use while compiling   -->
-  <!--                       generated servlets?  [Created dynamically      -->
-  <!--                       based on the current web application]          -->
-  <!--                                                                      -->
-  <!--   development         Is Jasper used in development mode (will check -->
-  <!--                       for JSP modification on every access)?  [true] -->
-  <!--                                                                      -->
-  <!--   enablePooling       Determines whether tag handler pooling is      -->
-  <!--                       enabled  [true]                                -->
-  <!--                                                                      -->
-  <!--   fork                Tell Ant to fork compiles of JSP pages so that -->
-  <!--                       a separate JVM is used for JSP page compiles   -->
-  <!--                       from the one Tomcat is running in. [true]      -->
-  <!--                                                                      -->
-  <!--   ieClassId           The class-id value to be sent to Internet      -->
-  <!--                       Explorer when using <jsp:plugin> tags.         -->
-  <!--                       [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93]   -->
-  <!--                                                                      -->
-  <!--   javaEncoding        Java file encoding to use for generating java  -->
-  <!--                       source files. [UTF8]                           -->
-  <!--                                                                      -->
-  <!--   keepgenerated       Should we keep the generated Java source code  -->
-  <!--                       for each page instead of deleting it? [true]   -->
-  <!--                                                                      -->
-  <!--   logVerbosityLevel   The level of detailed messages to be produced  -->
-  <!--                       by this servlet.  Increasing levels cause the  -->
-  <!--                       generation of more messages.  Valid values are -->
-  <!--                       FATAL, ERROR, WARNING, INFORMATION, and DEBUG. -->
-  <!--                       [WARNING]                                      -->
-  <!--                                                                      -->
-  <!--   mappedfile          Should we generate static content with one     -->
-  <!--                       print statement per input line, to ease        -->
-  <!--                       debugging?  [false]                            -->
-  <!--                                                                      -->
-  <!--                                                                      -->
-  <!--   reloading           Should Jasper check for modified JSPs?  [true] -->
-  <!--                                                                      -->
-  <!--   suppressSmap        Should the generation of SMAP info for JSR45   -->
-  <!--                       debugging be suppressed?  [false]              -->
-  <!--                                                                      -->
-  <!--   dumpSmap            Should the SMAP info for JSR45 debugging be    -->
-  <!--                       dumped to a file? [false]                      -->
-  <!--                       False if suppressSmap is true                  -->
-  <!--                                                                      -->
-  <!--   scratchdir          What scratch directory should we use when      -->
-  <!--                       compiling JSP pages?  [default work directory  -->
-  <!--                       for the current web application]               -->
-  <!--                                                                      -->
-  <!--   tagpoolMaxSize      The maximum tag handler pool size  [5]         -->
-  <!--                                                                      -->
-  <!--   xpoweredBy          Determines whether X-Powered-By response       -->
-  <!--                       header is added by generated servlet  [false]  -->
-  <!--                                                                      -->
-  <!-- If you wish to use Jikes to compile JSP pages:                       -->
-  <!--   Set the init parameter "compiler" to "jikes".  Define              -->
-  <!--   the property "-Dbuild.compiler.emacs=true" when starting Jetty     -->
-  <!--   to cause Jikes to emit error messages in a format compatible with  -->
-  <!--   Jasper.                                                            -->
-  <!--   If you get an error reporting that jikes can't use UTF8 encoding,  -->
-  <!--   try setting the init parameter "javaEncoding" to "ISO-8859-1".     -->
-  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-  <servlet id="jsp">
-    <servlet-name>jsp</servlet-name>
-    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
-    <init-param>
-        <param-name>logVerbosityLevel</param-name>
-        <param-value>DEBUG</param-value>
-    </init-param>
-    <init-param>
-        <param-name>fork</param-name>
-        <param-value>false</param-value>
-    </init-param>
-    <init-param>
-        <param-name>xpoweredBy</param-name>
-        <param-value>false</param-value>
-    </init-param>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-
-  <servlet-mapping> 
-    <servlet-name>jsp</servlet-name> 
-    <url-pattern>*.jsp</url-pattern> 
-    <url-pattern>*.jspf</url-pattern>
-    <url-pattern>*.jspx</url-pattern>
-    <url-pattern>*.xsp</url-pattern>
-    <url-pattern>*.JSP</url-pattern> 
-    <url-pattern>*.JSPF</url-pattern>
-    <url-pattern>*.JSPX</url-pattern>
-    <url-pattern>*.XSP</url-pattern>
-  </servlet-mapping>
-  <!-- ==================================================================== -->
-  <!-- Dynamic Servlet Invoker.                                             -->
-  <!-- This servlet invokes anonymous servlets that have not been defined   -->
-  <!-- in the web.xml or by other means. The first element of the pathInfo  -->
-  <!-- of a request passed to the envoker is treated as a servlet name for  -->
-  <!-- an existing servlet, or as a class name of a new servlet.            -->
-  <!-- This servlet is normally mapped to /servlet/*                        -->
-  <!-- This servlet support the following initParams:                       -->
-  <!--                                                                      -->
-  <!--  nonContextServlets       If false, the invoker can only load        -->
-  <!--                           servlets from the contexts classloader.    -->
-  <!--                           This is false by default and setting this  -->
-  <!--                           to true may have security implications.    -->
-  <!--                                                                      -->
-  <!--  verbose                  If true, log dynamic loads                 -->
-  <!--                                                                      -->
-  <!--  *                        All other parameters are copied to the     -->
-  <!--                           each dynamic servlet as init parameters    -->
-  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-  <!-- Uncomment for dynamic invocation
-  <servlet>
-    <servlet-name>invoker</servlet-name>
-    <servlet-class>org.mortbay.jetty.servlet.Invoker</servlet-class>
-    <init-param>
-      <param-name>verbose</param-name>
-      <param-value>false</param-value>
-    </init-param>
-    <init-param>
-      <param-name>nonContextServlets</param-name>
-      <param-value>false</param-value>
-    </init-param>
-    <init-param>
-      <param-name>dynamicParam</param-name>
-      <param-value>anyValue</param-value>
-    </init-param>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-
-  <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>
-  -->
-
-
-
-  <!-- ==================================================================== -->
-  <session-config>
-    <session-timeout>30</session-timeout>
-  </session-config>
-
-  <!-- ==================================================================== -->
-  <!-- Default MIME mappings                                                -->
-  <!-- The default MIME mappings are provided by the mime.properties        -->
-  <!-- resource in the org.mortbay.jetty.jar file.  Additional or modified  -->
-  <!-- mappings may be specified here                                       -->
-  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-  <!-- UNCOMMENT TO ACTIVATE
-  <mime-mapping>
-    <extension>mysuffix</extension>
-    <mime-type>mymime/type</mime-type>
-  </mime-mapping>
-  -->
-
-  <!-- ==================================================================== -->
-  <welcome-file-list>
-    <welcome-file>index.html</welcome-file>
-    <welcome-file>index.htm</welcome-file>
-  </welcome-file-list>
-
-  <!-- ==================================================================== -->
-  <locale-encoding-mapping-list>
-    <locale-encoding-mapping><locale>ar</locale><encoding>ISO-8859-6</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>be</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>bg</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>ca</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>cs</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>da</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>de</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>el</locale><encoding>ISO-8859-7</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>en</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>es</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>et</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>fi</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>fr</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>hr</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>hu</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>is</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>it</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>iw</locale><encoding>ISO-8859-8</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>ja</locale><encoding>Shift_JIS</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>ko</locale><encoding>EUC-KR</encoding></locale-encoding-mapping>     
-    <locale-encoding-mapping><locale>lt</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>lv</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>mk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>nl</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>no</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>pl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>pt</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>ro</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>ru</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>sh</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>sk</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>sl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>sq</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>sr</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>sv</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>tr</locale><encoding>ISO-8859-9</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>uk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>zh</locale><encoding>GB2312</encoding></locale-encoding-mapping>
-    <locale-encoding-mapping><locale>zh_TW</locale><encoding>Big5</encoding></locale-encoding-mapping>   
-  </locale-encoding-mapping-list>
-
-  
-  
-</web-app>
-
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/Home.html b/tapestry/tapestry-examples/TimeTracker/src/context/Home.html
deleted file mode 100644
index e4c8899..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/Home.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<html>
-<head><link rel="stylesheet" href="css/timetracker.css"/></head>
-<body jwcid="$content$">
-<span jwcid="@Border">
-
-<p>
-    This is the Tapestry TimeTracker application. It is a demonstration of some of the new
-    core features available in tapestry, as well as how a sample application might be built
-    using them.
-</p>
-
-<form jwcid="taskForm@Form" class="container" clientValidationEnabled="true" >
-    <h3><span jwcid="@Insert" value="message:new.task">Task Entry</span></h3>
-    <fieldset>
-        <table width="90%" class="form" cellpadding="2" cellspacing="0" >
-            <tr>
-                <td><label jwcid="@FieldLabel" field="component:projectChoose">Choose Project</label></td>
-                <td><label jwcid="@FieldLabel" field="component:descriptionField">Description</label></td>
-                <td><label>Duration</label></td>
-                <td>&nbsp;</td>
-            </tr>
-            <tr id="secondRow">
-                <td><div class="field required"><select jwcid="projectChoose" /></div></td>
-                <td><div class="field required"><input jwcid="descriptionField" /></div></td>
-                <td><div jwcid="duration@Any">18 minutes</div></td>
-                <td>&nbsp;</td>
-            </tr>
-
-            <tr>
-                <td><label jwcid="@FieldLabel" field="component:datePicker">Date Picker</label></td>
-                <td><label jwcid="@FieldLabel" field="component:startPicker">Start Picker</label></td>
-                <td><label jwcid="@FieldLabel" field="component:endPicker">End Picker</label></td>
-                <td>&nbsp;</td>
-            </tr>
-
-            <tr>
-                <td><div class="field required"><input jwcid="datePicker" /></div></td>
-                <td>
-                    <div class="field required">
-                        <input jwcid="startPicker" size="7" />
-                    </div>
-                </td>
-                <td>
-                    <div class="field required">
-                        <input jwcid="endPicker" size="7" />
-                    </div>
-                </td>
-                <td>
-                    <input jwcid="@Submit" value="message:button.add" class="submitButton"
-                           action="listener:addTask"
-                           async="true" updateComponents="taskForm" />
-                </td>
-            </tr>
-        </table>
-    </fieldset>
-</form>
-
-<a jwcid="@DirectLink" listener="listener:showDialog" updateComponents="testDialog">Show Dialog</a><br/>
-
-<div jwcid="testDialog@Dialog" hidden="ognl:dlHidden" class="dialog">
-    <p style="display:block;background:#ffffff;width:20em;">
-        This is content hidden in a Dialog.
-
-        <a href="#" onClick="dojo.widget.byId('testDialog').hide();return false">Close</a>
-    </p>
-
-    <div style="display:block;background:#ffffff;width:20em;">
-        <a jwcid="@DirectLink" listener="listener:showSubProject" updateComponents="subArea" >Show sub project</a>
-	
-	<span jwcid="subArea@Any">
-		<span jwcid="@If" condition="ognl:showSubProject" renderTag="false">
-			<form jwcid="@Form">
-                Another: <select jwcid="subProjectChoose@Autocompleter" model="ognl:projectModel" value="ognl:subProject" displayName="message:choose.project" />
-            </form>
-		</span>
-	</span>
-    </div>
-</div>
-
-<div jwcid="projectDescription@Any" >
-    <h2 jwcid="@If" condition="ognl:selectedProject" style="clear:left" >
-        <span jwcid="projName@InlineEditBox" minWidth="250" value="ognl:selectedProject.name" />
-    </h2>
-</div>
-
-</span>
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/LocaleList.html b/tapestry/tapestry-examples/TimeTracker/src/context/LocaleList.html
deleted file mode 100644
index f571491..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/LocaleList.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<span jwcid="@Border">
-
-<p>
-Simple <code>For</code> loop listing locales.
-</p>
-
-<style>
-
-    .localeList {
-        background: #2A78B0;
-        display:block !important;
-		float:left;
-        width:20%;
-        margin-bottom: 0px;
-        margin-right: 0px;
-        margin-top:0.6em;
-		margin-left:0.5em;
-    }
-    .localeList a { color: #fff;}
-    .localeList p { margin: 0 10px;}
-
-    .roundtop {
-        background: transparent url("rounded?c=2A78B0&bc=white&w=8&h=8&a=tr") no-repeat top right;
-    }
-    .selectedRoundtop {
-        background: url("rounded?c=efefef&bc=white&w=8&h=8&a=tr") no-repeat top right;
-    }
-
-    .roundbottom {
-        background: url("rounded?c=2A78B0&bc=white&w=8&h=8&a=br") no-repeat top right;
-    }
-    .selectedRoundbottom {
-        background: url("rounded?c=efefef&bc=white&w=8&h=8&a=br") no-repeat top right;
-    }
-
-    img.corner {
-        width: 8px;
-        height: 8px;
-        border: none;
-        display: block !important;
-    }
-
-    .selected { background: #efefef; }
-	.selected a { color: #000; }
-	
-	.detail {
-        display:block;
-        padding: 0 1.1em 2em;
-        background: url("rounded?c=99ccff&bc=white&w=600&h=50&shadow=true&ah=10&aw=10&sw=2&o=.5") left bottom no-repeat;
-    }
-
-    .status {
-		display:block;
-		clear:both;
-		width:80%;
-		height: 4em;
-		overflow:auto;
-		font-family: arial;
-		font-size:8pt;
-		padding: 0.4em;
-		border:1px dotted #D6AE33;
-        margin-top:1em;
-    }
-
-    .clear {
-        clear:both;
-        display:block;
-        float:left;
-        width:100%;
-        height: 20px;
-    }
-</style>
-
-<div jwcid="localeDetail@Any">
-    <p class="detail" jwcid="@If" condition="ognl:selected" >
-        <br/>
-            <strong>Country:</strong>
-            <span jwcid="@Insert" value="ognl:selected.displayCountry" mode="ognl:@org.apache.tapestry.components.InsertMode@BREAK" />
-            &nbsp;
-            <strong>Language:</strong>
-            <span jwcid="@Insert" value="ognl:selected.displayLanguage" mode="ognl:@org.apache.tapestry.components.InsertMode@BREAK" />
-            &nbsp;
-            <strong>Variant:</strong>
-            <span jwcid="@Insert" value="ognl:selected.displayVariant" mode="ognl:@org.apache.tapestry.components.InsertMode@BREAK" />
-    </p>
-</div>
-
-<div jwcid="status@Any" class="status" >
-    <span jwcid="@Insert" value="ognl:status" />
-</div>
-
-
-<div class="ognl:currentSelected ? 'selected localeList' : 'localeList'"
-     jwcid="localeList@For"
-     source="ognl:@org.apache.tapestry.timetracker.page.LocaleList@LOCALES" value="ognl:currLocale">
-
-    <div jwcid="@Locale" selected="ognl:currentSelected">
-        <p>
-            <a jwcid="localeLink@DirectLink" listener="listener:selectLocale" parameters="ognl:{currLocale.language, currLocale.country, currLocale.variant}"
-               updateComponents="localeDetail, localeList" stateful="false">
-                <span jwcid="@Insert" value="ognl:currLocale.toString()" />
-            </a>
-        </p>
-    </div>
-</div>
-
-<p class="clear" />
-<p class="clear" />
-
-</span>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/LocaleSuggest.html b/tapestry/tapestry-examples/TimeTracker/src/context/LocaleSuggest.html
deleted file mode 100644
index a28fc88..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/LocaleSuggest.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<span jwcid="@Border">
-
-<p>
-Autocompleting input suggestion fields using the <a href="http://script.aculo.us/">script.aculo.us</a> javascript library.
-</p>
-
-    <style type="text/css">
-        div.autocomplete {
-            position:absolute;
-            width:250px;
-            background-color:white;
-            border:1px solid #888;
-            margin:0px;
-            padding:0px;
-        }
-        div.autocomplete ul {
-            list-style-type:none;
-            margin:0px;
-            padding:0px;
-        }
-        div.autocomplete ul li.selected { background-color: #ffb;}
-        div.autocomplete ul li {
-            list-style-type:none;
-            display:block;
-            margin:0;
-            padding:4px 0 4px 4px;
-            cursor:pointer;
-        }
-        div.autocomplete ul li img { border:none; margin-right: 10px; vertical-align:middle;}
-    </style>
-
-    <form jwcid="@Form" class="container">
-        <h3>Locale suggestion</h3>
-        
-        <fieldset>
-             <table width="90%" class="form" cellpadding="2" cellspacing="0" >
-                 <tbody>
-                     <tr>
-                         <td><label jwcid="@FieldLabel" field="component:suggest" /></td>
-                         <td><input jwcid="suggest" size="34" /></td>
-                     </tr>
-                 </tbody>
-             </table>
-        </fieldset>
-    </form>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.html b/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.html
deleted file mode 100644
index 019aea1..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<html jwcid="@Shell" 
-	  title="message:window.title"
-	  browserLogLevel="DEBUG"
-	  consoleEnabled="true"
-	  debugEnabled="false" >
-<link jwcid="@Relation" href="favicon.ico" type="image/gif" rel="shortcut icon" />    
-<link jwcid="@Relation" href="css/timetracker.css" media="all" />
-<body jwcid="@Body">
-
-<div id="header" >
-    <span class="headertxt"><span jwcid="@Insert" value="message:header.display"/> </span>
-</div>
-
-<div id="navigation" >
-    <ul>
-        <li><a class="here" jwcid="@PageLink" page="Home">home</a></li>
-        <li><a jwcid="@PageLink" page="LocaleList">locale list</a></li>
-        <li><a jwcid="@PageLink" page="LocaleSuggest">suggest</a></li>
-    </ul>
-</div>
-
-<div id="content">
-<span jwcid="@RenderBody" />
-</div>
-</body>
-
-</html>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.jwc b/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.jwc
deleted file mode 100644
index 6caa590..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification allow-informal-parameters="no">
-
-    <inject property="conn" object="service:timetracker.db.HsqlConnection" />
-    
-</component-specification>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.properties b/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.properties
deleted file mode 100644
index f5cc106..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-window.title=Tapestry TimeTracker
-
-header.display=Tapestry TimeTracker
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Home.page b/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Home.page
deleted file mode 100644
index e4c767b..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/Home.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification class="org.apache.tapestry.timetracker.page.TaskEntryPage">
-
-   <property name="dlHidden" initial-value="true" />
-
-</page-specification>
-
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/createDatabase.sql b/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/createDatabase.sql
deleted file mode 100644
index c681939..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/createDatabase.sql
+++ /dev/null
@@ -1,20 +0,0 @@
-create table projects (
-	project_id		int				generated by default as IDENTITY not null,
-	name			varchar(40)		not null,
-	PRIMARY KEY (project_id),
-	UNIQUE (name)
-);
-
-insert into projects(name) values ('Code Zeitgeist');
-insert into projects(name) values ('Zooland Systems');
-insert into projects(name) values ('Weedasher Industries');
-
-create table tasks (
-	task_id			int				generated by default as IDENTITY not null,
-	project_id		int				not null,
-	start_dt		timestamp		not null,
-	end_dt			timestamp		not null,
-	descr_txt		varchar(200)	not null,
-	PRIMARY KEY (task_id),
-	FOREIGN KEY (project_id) references projects(project_id)
-);
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/hivemodule.xml b/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/hivemodule.xml
deleted file mode 100644
index 4a24aa1..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/hivemodule.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="timetracker" version="1.0.0" package="org.apache.tapestry.timetracker">
- 
-    <contribution configuration-id="tapestry.url.ServiceEncoders">
-        <asset-encoder id="asset" path="/assets" />
-        <extension-encoder id="extension" extension="svc" after="*"/>
-        <direct-service-encoder id="direct" stateless-extension="direct" stateful-extension="sdirect"/>
-        <page-service-encoder id="page" extension="html" service="page"/>
-        <path-encoder id="rounded" path="/rounded" service="rounded" />
-    </contribution>
-    
-    <sub-module descriptor="timetracker.db.xml" />
-    <sub-module descriptor="timetracker.dao.xml" />
-</module>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/log4j.properties b/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/log4j.properties
deleted file mode 100644
index 4d7598c..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/log4j.properties
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright 2006 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-log4j.rootLogger=DEBUG, A1
-
-# A1 is set to be a ConsoleAppender. 
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%c{1} [%p] %m%n
-
-log4j.logger.org.apache.hivemind=WARN
-log4j.logger.org.apache=INFO
-log4j.logger.hivemind=INFO
-log4j.logger.tapestry=INFO
-log4j.logger.timetracker=DEBUG
-log4j.logger.org.apache.tapestry=INFO
-
-log4j.logger.org.apache.tapestry.timetracker=DEBUG
-log4j.logger.org.apache.tapestry.form=DEBUG
-log4j.logger.org.apache.tapestry.form.FormSupportImpl=DEBUG
-
-#log4j.logger.org.apache.tapestry.services.impl.HiveMindExpressionCompiler=DEBUG
-#log4j.logger.tapestry.services.Asset=DEBUG
-#log4j.logger.tapestry.globals.ResponseBuilder=DEBUG
-#log4j.logger.org.apache.tapestry.services.impl.DojoAjaxResponseBuilder=DEBUG
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/timetracker.application b/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/timetracker.application
deleted file mode 100644
index 836964b..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/timetracker.application
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC
-        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<application name="Tapestry TimeTracker">
-
-    <meta key="org.apache.tapestry.namespace-properties-name" value="messages" />
-    <meta key="org.apache.tapestry.page-class-packages" value="org.apache.tapestry.timetracker.page"/>
-    <meta key="org.apache.tapestry.component-class-packages" value="org.apache.tapestry.timetracker.component"/>
-
-    <library id="contrib" specification-path="classpath:/org/apache/tapestry/contrib/Contrib.library"/>
-
-</application>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/timetracker.dao.xml b/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/timetracker.dao.xml
deleted file mode 100644
index 3ab80c6..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/timetracker.dao.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<module id="timetracker.dao" version="1.0.0"
-    package="org.apache.tapestry.timetracker.dao">
-    
-    <service-point id="ProjectDao" interface="ProjectDao" >
-        <invoke-factory service-id="hivemind.BuilderFactory">
-            <construct class="ProjectDao" autowire-services="false">
-                <set-service property="connection" service-id="timetracker.db.HsqlConnection" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-    
-    <service-point id="TaskDao" interface="TaskDao" >
-        <invoke-factory service-id="hivemind.BuilderFactory">
-            <construct class="TaskDao" autowire-services="false">
-                <set-service property="connection" service-id="timetracker.db.HsqlConnection" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-    
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/timetracker.db.xml b/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/timetracker.db.xml
deleted file mode 100644
index 13642bb..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/timetracker.db.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<module id="timetracker.db" version="1.0.0"
-    package="org.apache.tapestry.timetracker.jdbc">
-    
-    <contribution configuration-id="hivemind.SymbolSources">
-        <source name="SystemProps" before="*" 
-                class="org.apache.hivemind.impl.SystemPropertiesSymbolSource" />  
-    </contribution>
-    
-    <service-point id="HsqlConnProxyFactory"
-        interface="org.apache.hivemind.ServiceImplementationFactory"
-        parameters-occurs="none">
-        Core service implementation factory that constructs dynamic
-        proxies to dbcp connection pools
-        <invoke-factory service-id="hivemind.BuilderFactory">
-            <construct class="DataSourceProxyFactory" autowire-services="false">
-                <set-service property="dataSource" service-id="HsqlDataSource" />
-                <set-service property="installer" service-id="DatabaseInstaller" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-    
-    <service-point id="HsqlDataSource"
-        interface="org.apache.commons.dbcp.BasicDataSource"
-        parameters-occurs="none">
-        
-        Basic apache database pool service.
-        <invoke-factory service-id="hivemind.BuilderFactory">
-            <construct
-                class="org.apache.commons.dbcp.BasicDataSource">
-                <set property="driverClassName"
-                    value="org.hsqldb.jdbcDriver" />
-                <set property="url"
-                    value="jdbc:hsqldb:file:tapestry-timetrackerdb" />
-                <set property="initialSize" value="1" />
-                <set property="maxActive" value="2" />
-                <set property="maxWait" value="40000" />
-                <set property="username" value="sa" />
-                <set property="poolPreparedStatements" value="true" />
-                <set property="maxOpenPreparedStatements" value="20" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-    
-    <service-point id="HsqlConnection" interface="java.sql.Connection">
-        DB Connection for derby database
-        <invoke-factory service-id="HsqlConnProxyFactory" model="threaded" />
-    </service-point>
-   
-    <service-point id="DatabaseInstaller" interface="DatabaseInstaller">
-        Ensures the database has been created/initialised. 
-        <invoke-factory service-id="hivemind.BuilderFactory">
-            <construct class="DatabaseInstaller" autowire-services="true" >
-                <set-service property="globals" service-id="tapestry.globals.ApplicationGlobals" />
-                <set property="filePath" value="WEB-INF/createDatabase.sql" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-    
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/web.xml b/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/web.xml
deleted file mode 100644
index 5647eea..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/WEB-INF/web.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-        "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
-    <display-name>Tapestry Time Tracking example application</display-name>
-
-    <filter>
-        <filter-name>redirect</filter-name>
-        <filter-class>org.apache.tapestry.RedirectFilter</filter-class>
-    </filter>
-
-    <filter-mapping>
-        <filter-name>redirect</filter-name>
-        <url-pattern>/</url-pattern>
-    </filter-mapping>
-
-    <servlet>
-        <servlet-name>timetracker</servlet-name>
-        <servlet-class>org.apache.tapestry.timetracker.servlet.ConfigurationServlet</servlet-class>
-        <load-on-startup>0</load-on-startup>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>timetracker</servlet-name>
-        <url-pattern>/app</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>timetracker</servlet-name>
-        <url-pattern>*.page</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>timetracker</servlet-name>
-        <url-pattern>*.external</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>timetracker</servlet-name>
-        <url-pattern>*.direct</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>timetracker</servlet-name>
-        <url-pattern>*.sdirect</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>timetracker</servlet-name>
-        <url-pattern>*.svc</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>timetracker</servlet-name>
-        <url-pattern>/assets/*</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>timetracker</servlet-name>
-        <url-pattern>*.html</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>timetracker</servlet-name>
-        <url-pattern>/rounded</url-pattern>
-    </servlet-mapping>
-
-    <session-config>
-        <session-timeout>15</session-timeout>
-    </session-config>
-
-</web-app>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/css/forms.css b/tapestry/tapestry-examples/TimeTracker/src/context/css/forms.css
deleted file mode 100644
index 62cd250..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/css/forms.css
+++ /dev/null
@@ -1,118 +0,0 @@
-div.requiredClause {
-    width:auto;
-    float:right;
-    padding-left:2px;
-    border-left:3px solid #ff660a;
-    margin-top:1.5em;
-    font-size: 0.7em;
-    font-weight:bold;
-}
-
-form { clear:both; border:1px solid #d0d8e2; margin:0; margin-bottom:1.5em; }
-form.container { padding:2em 1.5em; }
-* html form.container { width:100%; }
-
-/* field wrappers */
-form div.field{ margin-right:1.5em; padding-left:5px; }
-* html form div.field { margin-right:0.5em; }
-
-/* use in conjunction with div.field: <div class="field required"></div> */
-form div.required{ border-left:3px solid #ff660a; padding-left:2px; }
-form label{ display:block; margin-top:1em; font-size:0.65em; }
-form .ex-container label{ margin-top:0.75em; }
-
-/* input elements */
-form div.dropdown,
-    form input.text,
-    form input.numeric,
-    form select,
-    form textarea { border: 1px solid #a2da87; padding: 0.15em; width:100%; }
-form div.dropdown{ padding:0; height:22px; background-color:#fff;}
-form textarea { font-family:sans-serif; font-size:0.8em; margin: 0.55em 0; }
-* html form textarea { width:auto; }
-* html form select{ width:90%; }
-
-form textarea:focus, form input:focus { background-color: #F1F6FC; }
-form input.numeric { text-align:right; }
-
-form p { font-size:0.75em; }
-form h2 { font: 1.2em Tahoma, Myriad, sans-serif; background: #eef0f7 top left repeat-y; color: #4a7db5; padding: 1em 0.35em; }
-form h3 { font: 0.8em Tahoma, Myriad, sans-serif; font-weight:bold; color: #296cb5; margin:1.5em -1em 0 -1em; border-bottom: 1px solid #d0d8e2; padding-bottom:0; }
-form h4 { font: 0.8em Tahoma, Myriad, sans-serif; font-weight:bold; margin:0; margin-top:1em; border-bottom: 1px solid #ddd; }
-
-.submitButton,.submitButton:focus,.alertButton {
-    width: auto;
-    border: none;
-    background-color: #699ED9;
-    color: #fff;
-    padding: 0.1em;
-    border-bottom: 1px solid #5885b6 !important;
-    border-right: 1px solid #5885b6 !important;
-    border-top: 1px solid #92b8e2 !important;
-    border-left: 1px solid #92b8e2 !important;
-    cursor: hand;
-    cursor: pointer;
-}
-
-.alertDialog {
-    margin-left:26%;
-    margin-right:26%;
-    border: 2px solid #ff660a;
-    padding: 1em;
-    background: #ffffff;
-    -moz-border-radius: 10px;
-}
-
-.alertContent .alertButton {
-    float:right;
-    position:relative;
-    bottom:1em;
-}
-
-.fieldMissing {
-    background: #bedef4;
-}
-
-.fieldInvalid {
-    background: #ffaf7e;
-    font-weight: bold;
-}
-
-.missingList, .invalidList {
-    padding-bottom: 0.6em;
-    padding-top: 0.2em;
-    padding-left:0.1em;
-    padding-right:0.2em;
-    margin: 0;
-    width: 26em;
-}
-
-.missingList {
-    border-top: 4px solid #bedef4;
-}
-
-.invalidList {
-    border-top: 4px solid #ffaf7e;
-}
-
-.missingList li, .invalidList li {
-    list-style:none;
-    font-style:italic;
-}
-
-.dropdownCombobox {
-    background: #ffffff;
-    border: 1px solid #545454;
-}
-
-.dropdownOption {
-    font-family: arial;
-    font-size: 0.8em;
-    padding: 0.1em 0 0.1em 0.2em;
-    cursor:pointer;
-}
-
-.optionHover {
-    background: cornflowerblue;
-    color: #ffffff;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/css/timetracker.css b/tapestry/tapestry-examples/TimeTracker/src/context/css/timetracker.css
deleted file mode 100644
index 115a2d7..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/css/timetracker.css
+++ /dev/null
@@ -1,101 +0,0 @@
-@import url("undohtml.css");  /* CSS to undo some default browser css that gets in the way more than it helps */
-@import url("forms.css");
-
-body {
-    width: auto;
-    margin-left: 3%;
-    background:#FFFFFF url(../images/body-bkg.png) repeat-x;
-    color:#000000;
-}
-
-body, td, th {
-    font-family: Lucida Grande, Tahoma, Verdana, Arial, sans-serif;
-    font-size: 11pt;
-    color: #292929;
-    margin-left: 3%;
-}
-
-h2 { font: 1.4em Tahoma, Myriad, sans-serif; font-weight:bold; color: #296cb5; padding-bottom:0; }
-h3 { font: 0.8em Tahoma, Myriad, sans-serif; font-weight:bold; color: #296cb5; padding-bottom:0; }
-
-p {
-    margin-bottom: 8px;   
-}
-
-.even {
-    background-color: #f0f0f0;
-}
-
-.odd {
-    background-color: #f9f9f9;
-}
-
-#header {
-    border-bottom: 2px solid #D6D6D6;
-    height: 5em;
-}
-
-.headertxt {
-    font-size: 26pt;
-    letter-spacing: 0.2em;
-    color: #2A78B0;
-    position:absolute;
-    display:block;
-}
-
-#navigation {
-    background: #215E8A;
-    display:block;
-    float:left;
-    clear:both;
-    width:100%;
-}
-
-#navigation ul li {
-    display: block;
-    float: left;
-    list-style: none;
-    margin-right: 15px;
-}
-
-#navigation ul li {
-    
-}
-
-#navigation ul li a {
-    text-decoration: none;
-    padding-right: 5px;
-    padding-left: 5px;
-    padding-top:6px;
-    padding-bottom: 3px;
-    display: block;
-    color: #D6D6D6;
-    font-weight: bold;
-}
-
-#navigation ul li a:hover {
-    background: #D6AE33;
-    color: #292929;
-}
-
-#navigation ul li a.here {
-    background: #2A78B0;
-}
-
-#content {
-    padding-top: 6px;
-    padding-left: 6px;
-    padding-right: 6px;
-    float:left;
-    clear:both;
-    width:95%;
-}
-
-.dialog, .dojoDialog {
-    margin-left: 9%;
-    margin-right: 9%;
-    display: block;
-    position: absolute;
-    padding: 0.2em;
-    background-color: #ffffff;
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/css/undohtml.css b/tapestry/tapestry-examples/TimeTracker/src/context/css/undohtml.css
deleted file mode 100644
index 1eb5d33..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/css/undohtml.css
+++ /dev/null
@@ -1,39 +0,0 @@
-/* undohtml.css */
-/* (CC) 2004 Tantek Celik. Some Rights Reserved.             */
-/*   http://creativecommons.org/licenses/by/2.0                   */
-/* This style sheet is licensed under a Creative Commons License. */
-
-/* Purpose: undo some of the default styling of common (X)HTML browsers */
-
-
-/* link underlines tend to make hypertext less readable, 
-   because underlines obscure the shapes of the lower halves of words */
-:link,:visited { text-decoration:none }
-
-/* no list-markers by default, since lists are used more often for semantics */
-ul,ol { list-style:none }
-
-/* avoid browser default inconsistent heading font-sizes */
-/* and pre/code too */
-h1,h2,h3,h4,h5,h6,pre,code { font-size:1em; }
-
-/* remove the inconsistent (among browsers) default ul,ol padding or margin  */
-/* the default spacing on headings does not match nor align with 
-   normal interline spacing at all, so let's get rid of it. */
-/* zero out the spacing around pre, form, body, html, p, blockquote as well */
-/* form elements are oddly inconsistent, and not quite CSS emulatable. */
-/*  nonetheless strip their margin and padding as well */
-ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,body,html,p,blockquote,fieldset,input
-{ margin:0; padding:0 }
-
-/* whoever thought blue linked image borders were a good idea? */
-a img,:link img,:visited img { border:none }
-
-/* de-italicize address */
-address { font-style:normal }
-
-body { margin:0; padding:0; }
-
-fieldset { border:0; }
-
-/* more varnish stripping as necessary... */
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/favicon.ico b/tapestry/tapestry-examples/TimeTracker/src/context/favicon.ico
deleted file mode 100644
index cd5e10c..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/images/body-bkg.png b/tapestry/tapestry-examples/TimeTracker/src/context/images/body-bkg.png
deleted file mode 100644
index be3d0d9..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/images/body-bkg.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/TimeTracker/src/context/images/dateIcon.gif b/tapestry/tapestry-examples/TimeTracker/src/context/images/dateIcon.gif
deleted file mode 100644
index 1f48a19..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/context/images/dateIcon.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/component/Locale.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/component/Locale.java
deleted file mode 100644
index d98d8c4..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/component/Locale.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.apache.tapestry.timetracker.component;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.ComponentClass;
-import org.apache.tapestry.annotations.Parameter;
-
-/**
- *
- */
-@ComponentClass
-public abstract class Locale extends AbstractComponent {
-
-    @Parameter(required = true)
-    public abstract boolean isSelected();
-
-    public void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean selected = isSelected();
-
-        renderRow(writer, "selectedRoundtop", "roundtop", "tl", selected);
-
-        super.renderBody(writer, cycle);
-
-        renderRow(writer, "selectedRoundbottom", "roundbottom", "bl", selected);
-    }
-
-    void renderRow(IMarkupWriter writer, String selectedCssClass, String cssClass, String anchor, boolean selected)
-    {
-        writer.begin("div");
-        writer.attribute("class", selected ? selectedCssClass :cssClass);
-
-        writer.beginEmpty("img");
-        writer.attribute("src", getRoundedUrl(anchor, selected));
-        writer.attribute("width", "8");
-        writer.attribute("height", "8");
-        writer.attribute("class", "corner");
-        writer.attribute("style", "display:none");
-
-        writer.end("div");
-    }
-
-    String getRoundedUrl(String anchor, boolean selected)
-    {
-        return "rounded?c=" +
-               (selected ? "efefef" : "2A78B0")
-               + "&bc=white&w=8&h=8&a=" + anchor;
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/BaseDao.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/BaseDao.java
deleted file mode 100644
index 143eb71..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/BaseDao.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.dao;
-
-import java.sql.Connection;
-
-
-/**
- * Provides standard base methods.
- *  
- * @author jkuhnert
- */
-public class BaseDao
-{
-    /** jdbc connection. */
-    protected Connection _conn;
-    
-    /** Default constructor. */
-    public BaseDao() { }
-    
-    /**
-     * Injected connection.
-     * @param conn
-     */
-    public void setConnection(Connection conn)
-    {
-        _conn = conn;
-    }
-    
-    /**
-     * 
-     * @return The local connection being used.
-     */
-    public Connection getConnection()
-    {
-        return _conn;
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/GenericDao.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/GenericDao.java
deleted file mode 100644
index d6f26f2..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/GenericDao.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.dao;
-
-import java.util.List;
-
-import org.apache.tapestry.timetracker.model.Persistent;
-
-
-/**
- *  Just a test.
- *  
- * @param <E>
- */
-public interface GenericDao<E extends Persistent>
-{
-    List<E> list();
-    
-    void update(E object);
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/ProjectDao.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/ProjectDao.java
deleted file mode 100644
index 7734707..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/ProjectDao.java
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.dao;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.timetracker.model.Project;
-
-/**
- * Manages db actions related to {@link Project} instances.
- * 
- * @author jkuhnert
- */
-public class ProjectDao extends BaseDao implements GenericDao<Project>
-{
-    
-    /**
-     * Default constructor.
-     */
-    public ProjectDao()
-    {
-        super();
-    }
-    
-    /**
-     * Creates a list of all projects.
-     * 
-     * @return All projects.
-     */
-    public List<Project> list()
-    {
-        List<Project> ret = new ArrayList();
-        PreparedStatement ps = null;
-        ResultSet rs = null;
-        
-        try {
-            ps = _conn.prepareStatement("select project_id, name from projects");
-            rs = ps.executeQuery();
-            
-            int x = 0;
-            while (rs.next()) {
-                x = 0;
-                Project pr = new Project();
-                
-                pr.setId(rs.getLong(++x));
-                pr.setName(rs.getString(++x));
-                
-                ret.add(pr);
-            }
-            
-            return ret;
-            
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        } finally {
-            try { if (rs != null) rs.close(); } catch (Exception e) { }
-            try { if (ps != null) ps.close(); } catch (Exception e) { }
-        }
-    }
-    
-    /**
-     * Updates the specified project.
-     * @param p The project to update.
-     */
-    public void update(Project p)
-    {
-        PreparedStatement ps = null;
-        
-        try {
-            
-            ps = _conn.prepareStatement("update projects set name = ? where project_id = ?");
-            
-            int x=0;
-            ps.setString(++x, p.getName());
-            ps.setLong(++x, p.getId());
-            
-            ps.executeUpdate();
-            
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        } finally {
-            try { if (ps != null) ps.close(); } catch (Exception e) { }
-        }
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/TaskDao.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/TaskDao.java
deleted file mode 100644
index c2116d4..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/TaskDao.java
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright Jun 11, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.dao;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.timetracker.model.Task;
-
-
-/**
- * Manages DB operations for {@link Task}s.
- * 
- */
-public class TaskDao extends BaseDao implements GenericDao<Task>
-{
-    
-    /**
-     * Creates a list of all tasks.
-     * 
-     * @return All projects.
-     */
-    public List<Task> list()
-    {
-        List<Task> ret = new ArrayList();
-        PreparedStatement ps = null;
-        ResultSet rs = null;
-        
-        try {
-            ps = _conn.prepareStatement("select task_id, project_id, start_dt, end_dt, descr_txt from tasks");
-            rs = ps.executeQuery();
-            
-            int x = 0;
-            while (rs.next()) {
-                x = 0;
-                
-                Task task = new Task();
-                
-                task.setId(rs.getLong(++x));
-                task.setProjectId(rs.getLong(++x));
-                task.setStartDate(rs.getTimestamp(++x));
-                task.setEndDate(rs.getTimestamp(++x));
-                
-                ret.add(task);
-            }
-            
-            return ret;
-            
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        } finally {
-            try { if (rs != null) rs.close(); } catch (Exception e) { }
-            try { if (ps != null) ps.close(); } catch (Exception e) { }
-        }
-    }
-    
-    public void update(Task task)
-    {
-        
-    }
-    
-    /**
-     * Adds a new task to the project.
-     * @param task 
-     *          The pre-populated task to add.
-     */
-    public void addTask(Task task)
-    {
-        PreparedStatement ps = null;
-        
-        try {
-            ps = _conn.prepareStatement("insert into tasks (project_id, start_dt, end_dt, "
-                    + "descr_txt) values (?, ?, ?, ?) ");
-            int x=0;
-            ps.setLong(++x, task.getProjectId());
-            ps.setTimestamp(++x, new java.sql.Timestamp(task.getStartDate().getTime()));
-            ps.setTimestamp(++x, new java.sql.Timestamp(task.getEndDate().getTime()));
-            ps.setString(++x, task.getDescription());
-            ps.execute();
-            
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        } finally {
-            try { if (ps != null) ps.close(); } catch (Exception e) { }
-        }
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/package.html b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/package.html
deleted file mode 100644
index d426f10..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry TimeTracker: Web Application Framework Demo</title>
-</head>
-<body>
-
-<p>
-Contains data access code.
-</p>
-
-@author Jesse Kuhnert <a href="mailto:jkuhnert@apache.org">jkuhnert@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/DataSourceProxyFactory.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/DataSourceProxyFactory.java
deleted file mode 100644
index c522a5c..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/DataSourceProxyFactory.java
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.jdbc;
-
-import java.lang.reflect.Proxy;
-import java.sql.Connection;
-
-import org.apache.commons.dbcp.BasicDataSource;
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.Discardable;
-import org.apache.hivemind.ServiceImplementationFactory;
-import org.apache.hivemind.ServiceImplementationFactoryParameters;
-import org.apache.hivemind.events.RegistryShutdownListener;
-
-
-/**
- * Wrapper around jdbc {@link BasicDataSource} pools for providing 
- * transaction aware connection pooling services to hivemind.
- *
- * @author jkuhnert
- */
-public class DataSourceProxyFactory implements ServiceImplementationFactory, RegistryShutdownListener
-{
-    /* logger */
-    protected Log _log;
-    
-    /* jdbc pool */
-    protected BasicDataSource _dataSource;
-    
-    private DatabaseInstaller _installer;
-    
-    /**
-     * {@inheritDoc}
-     */
-    public Object createCoreServiceImplementation(ServiceImplementationFactoryParameters parms)
-    {
-        if (_dataSource == null)
-            throw new IllegalStateException("No dataSource configured for factory.");
-        
-        _log = parms.getLog();
-        try {
-            Connection conn = _dataSource.getConnection();
-            
-            _installer.initialise(conn);
-            
-            return Proxy.newProxyInstance(this.getClass()
-                    .getClassLoader(), new Class[] { Connection.class,
-                Discardable.class }, new JdbcConnectionProxy(_log, conn));
-        } catch (Exception e) {
-            _log.fatal("Unable to create a new DB connection", e);
-            throw new RuntimeException(e);
-        }
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void registryDidShutdown()
-    {
-        try {
-            _dataSource.close();
-        } catch (Throwable t) {
-            _log.error("Error shutting down dataSource", t);
-        }
-    }
-    
-    /**
-     * Sets the data source.
-     * @param dataSource
-     */
-    public void setDataSource(BasicDataSource dataSource)
-    {
-        _dataSource = dataSource;
-    }
-    
-    /** Injected. */
-    public void setInstaller(DatabaseInstaller installer)
-    {
-        _installer = installer;
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/DatabaseInstaller.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/DatabaseInstaller.java
deleted file mode 100644
index 31059d2..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/DatabaseInstaller.java
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.jdbc;
-
-import java.io.File;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.services.ApplicationGlobals;
-
-
-/**
- * Checks the database instance running against for correct table
- * setup, if it can't find any of the required tables will install
- * them manually.
- *
- * @author jkuhnert
- */
-public class DatabaseInstaller
-{
-    /** File ISO format. */
-    public static final String ISO_FORMAT = "ISO8859_1";
-    
-    protected static Log _log = LogFactory.getLog(DatabaseInstaller.class);
-    
-    /** servlet context. */
-    protected ApplicationGlobals _globals;
-    
-    /** db installer file path. */
-    protected String _filePath;
-    
-    private boolean _initialised = false;
-    
-    /** default constructor. */
-    public DatabaseInstaller() { }
-    
-    /**
-     * Invoked to cause initialization of db checks.
-     */
-    public void initialise(Connection conn)
-    throws Exception
-    {
-        if (_initialised)
-            return;
-        
-        assert _filePath != null;
-        
-        if (!tablesExist(conn))
-            createDatabase(conn);
-        
-        _initialised = true;
-    }
-    
-    /**
-     * Checks for existance of database tables.
-     * @return True, if any row exists in a table called "projects".
-     * @throws SQLException on error
-     */
-    public boolean tablesExist(Connection conn)
-    throws SQLException
-    {
-        PreparedStatement ps = null;
-        ResultSet rs = null;
-        
-        try {
-            ps = conn.prepareStatement("select 'x' from INFORMATION_SCHEMA.SYSTEM_TABLES where TABLE_NAME = 'PROJECTS'");
-            rs = ps.executeQuery();
-            
-            return rs.next();
-            
-        } finally {
-            try { if (rs != null) rs.close(); } catch (Exception e) { }
-            try { if (ps != null) ps.close(); } catch (Exception e) { }
-        }
-    }
-    
-    /**
-     * Creates the database by reading in a sql creation file
-     * and running the contents found within on the connected 
-     * database. 
-     * @throws Exception If any io/db errors occur.
-     */
-    protected void createDatabase(Connection conn)
-    throws Exception
-    {
-        _log.debug("createDatabase() creating database tables..");
-        PreparedStatement ps = null;
-        try {
-            
-            ps = conn.prepareStatement(FileUtils.readFileToString(
-                    new File(_globals.getServletContext().getRealPath(_filePath)), ISO_FORMAT));
-            
-            ps.execute();
-            
-            conn.commit();
-        } catch (Throwable t) {
-            _log.error("Error creating database.", t);
-            try { if (conn != null) conn.rollback(); } catch (Exception e) { }
-            throw new RuntimeException(t);
-        } finally {
-            try { if (ps != null) ps.close(); } catch (Exception e) { }
-            
-        }
-    }
-    
-    /** Injected. */
-    public void setGlobals(ApplicationGlobals globals)
-    {
-        _globals = globals;
-    }
-    
-    /**
-     * Sets the createDatabase.sql file path.
-     * @param filePath
-     */
-    public void setFilePath(String filePath)
-    {
-        _filePath = filePath;
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/JdbcConnectionProxy.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/JdbcConnectionProxy.java
deleted file mode 100644
index eb1bccc..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/JdbcConnectionProxy.java
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.jdbc;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.sql.Connection;
-import java.sql.SQLException;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.Discardable;
-
-
-/**
- * Wraps {@link Connection} to provide hivemind threaded connection
- * services.
- *
- * @author jkuhnert
- */
-public class JdbcConnectionProxy implements InvocationHandler, Discardable
-{
-    
-    /* Logger */
-    protected Log _log;
-    /* connection */
-    protected Connection _conn;
-    /* Intercepts close method calls */
-    protected Method closeMethod;
-    
-    /**
-     * Creates a new proxy wrapping the provided {@link Connection}.
-     * @param log
-     * @param conn
-     * @throws SQLException
-     */
-    public JdbcConnectionProxy(Log log, Connection conn)
-    throws SQLException
-    {
-        _log = log;
-        _conn = conn;
-        
-        try {
-            closeMethod = this.getClass().getDeclaredMethod("threadDidDiscardService", (Class[])null);
-        } catch (Exception et) {
-            throw new RuntimeException(et);
-        }
-        
-        _conn.setAutoCommit(false);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public Object invoke(Object proxy, Method method, Object[] args)
-        throws Throwable
-    {
-        try {
-            if (method.getName().equals("threadDidDiscardService"))
-                return closeMethod.invoke(this, args);
-            else if (method.getName().equals("close")) {
-                _log.debug("Doing nice connection close.");
-                return closeMethod.invoke(this, args);
-            }
-            
-            return method.invoke(_conn, args);
-        } catch (IllegalAccessException e) {
-            _log.error(e);
-            throw e;
-        } catch (InvocationTargetException e) {
-            _log.error("Error ocurred in invoker, rolling back any pending db transaction.", e);
-            try { if (_conn != null) _conn.rollback(); } catch (Exception et) { }
-            closeMethod.invoke(this, new Object[0]);
-            throw e.getTargetException();
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void threadDidDiscardService()
-    {
-        try {
-            if (!_conn.isClosed()) {
-                if (!_conn.getAutoCommit())
-                    _conn.commit();
-            }
-        } catch (SQLException e) {
-            _log.error("SQL error cleaning up connection, rolling back transaction(if any).", e);
-            try { if (_conn != null) _conn.rollback(); } catch (Exception et) { }
-        } finally {
-            try { if (_conn != null) _conn.close(); } catch (Exception e) { }
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/package.html b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/package.html
deleted file mode 100644
index 1eff61e..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/jdbc/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry TimeTracker: Web Application Framework Demo</title>
-</head>
-<body>
-
-<p>
-Contains jdbc hivemind services.
-</p>
-
-@author Jesse Kuhnert <a href="mailto:jkuhnert@apache.org">jkuhnert@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/Persistent.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/Persistent.java
deleted file mode 100644
index 198659b..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/Persistent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.model;
-
-import java.io.Serializable;
-
-
-/**
- * 
- */
-public interface Persistent extends Serializable
-{
-    long getId();
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/Project.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/Project.java
deleted file mode 100644
index f7bb7bc..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/Project.java
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.model;
-
-import java.io.Serializable;
-
-
-/**
- * Represents a project for which time will be tracked.
- */
-public class Project implements Serializable, Persistent
-{
-    /** generated serial id. */
-    private static final long serialVersionUID = 9198547617843380606L;
-    protected long _id;
-    protected String _name;
-    
-    /** Default constructor. */
-    public Project() { }
-    
-    /**
-     * Creates a new project with default values.
-     * @param id
-     * @param name
-     */
-    public Project(long id, String name)
-    {
-        _id = id;
-        _name = name;
-    }
-    
-    /**
-     * @return Returns the id.
-     */
-    public long getId()
-    {
-        return _id;
-    }
-    
-    /**
-     * @param id The id to set.
-     */
-    public void setId(long id)
-    {
-        _id = id;
-    }
-    
-    /**
-     * @return Returns the name.
-     */
-    public String getName()
-    {
-        return _name;
-    }
-    
-    /**
-     * @param name The name to set.
-     */
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode()
-    {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + (int) (_id ^ (_id >>> 32));
-        result = prime * result + ((_name == null) ? 0 : _name.hashCode());
-        return result;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj)
-    {
-        if (this == obj) return true;
-        if (obj == null) return false;
-        if (getClass() != obj.getClass()) return false;
-        final Project other = (Project) obj;
-        if (_id != other._id) return false;
-        if (_name == null) {
-            if (other._name != null) return false;
-        } else if (!_name.equals(other._name)) return false;
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/Task.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/Task.java
deleted file mode 100644
index 5bd7ac7..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/Task.java
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright Jun 11, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.model;
-
-import java.io.Serializable;
-import java.util.Date;
-
-
-/**
- * A time entry task for a {@link Project}.
- * 
- * @author jkuhnert
- */
-public class Task implements Serializable, Persistent
-{
-    /** generated. */
-    private static final long serialVersionUID = 7257377128183799387L;
-    
-    protected long _id;
-    protected long _projectId;
-    protected Date _startDate;
-    protected Date _endDate;
-    protected String _description;
-    
-    public Task() { }
-    
-    /**
-     * @return the description
-     */
-    public String getDescription()
-    {
-        return _description;
-    }
-    
-    /**
-     * @param description the description to set
-     */
-    public void setDescription(String description)
-    {
-        _description = description;
-    }
-    
-    /**
-     * @return the endDate
-     */
-    public Date getEndDate()
-    {
-        return _endDate;
-    }
-
-    /**
-     * @param endDate the endDate to set
-     */
-    public void setEndDate(Date endDate)
-    {
-        _endDate = endDate;
-    }
-
-    /**
-     * @return the id
-     */
-    public long getId()
-    {
-        return _id;
-    }
-
-    
-    /**
-     * @param id the id to set
-     */
-    public void setId(long id)
-    {
-        _id = id;
-    }
-
-    /**
-     * @return the projectId
-     */
-    public long getProjectId()
-    {
-        return _projectId;
-    }
-
-    /**
-     * @param projectId the projectId to set
-     */
-    public void setProjectId(long projectId)
-    {
-        _projectId = projectId;
-    }
-
-    /**
-     * @return the startDate
-     */
-    public Date getStartDate()
-    {
-        return _startDate;
-    }
-
-    /**
-     * @param startDate the startDate to set
-     */
-    public void setStartDate(Date startDate)
-    {
-        _startDate = startDate;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode()
-    {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((_description == null) ? 0 : _description.hashCode());
-        result = prime * result + ((_endDate == null) ? 0 : _endDate.hashCode());
-        result = prime * result + (int) (_id ^ (_id >>> 32));
-        result = prime * result + (int) (_projectId ^ (_projectId >>> 32));
-        result = prime * result + ((_startDate == null) ? 0 : _startDate.hashCode());
-        return result;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj)
-    {
-        if (this == obj) return true;
-        if (obj == null) return false;
-        if (getClass() != obj.getClass()) return false;
-        final Task other = (Task) obj;
-        if (_description == null) {
-            if (other._description != null) return false;
-        } else if (!_description.equals(other._description)) return false;
-        if (_endDate == null) {
-            if (other._endDate != null) return false;
-        } else if (!_endDate.equals(other._endDate)) return false;
-        if (_id != other._id) return false;
-        if (_projectId != other._projectId) return false;
-        if (_startDate == null) {
-            if (other._startDate != null) return false;
-        } else if (!_startDate.equals(other._startDate)) return false;
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/package.html b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/package.html
deleted file mode 100644
index 80ab5f2..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/model/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry TimeTracker: Web Application Framework Demo</title>
-</head>
-<body>
-
-<p>
-Contains data model.
-</p>
-
-@author Jesse Kuhnert <a href="mailto:jkuhnert@apache.org">jkuhnert@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleList.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleList.java
deleted file mode 100644
index f488017..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleList.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.page;
-
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.services.ResponseBuilder;
-
-import java.util.Locale;
-
-
-/**
- * Simple locale listing example.
- *
- */
-public abstract class LocaleList extends BasePage
-{
-
-    public static Locale[] LOCALES = Locale.getAvailableLocales();
-
-    public abstract Locale getStoredCurrent();
-    public abstract void setStoredCurrent(Locale locale);
-
-    public abstract int getCurrentHash();
-    public abstract void setCurrentHash(int hash);
-
-    public Locale getCurrLocale()
-    {
-        return getStoredCurrent();
-    }
-
-    public void setCurrLocale(Locale locale)
-    {
-        setStoredCurrent(locale);
-        setCurrentHash(locale.hashCode());
-    }
-    
-    public abstract void setSelected(Locale locale);
-    public abstract Locale getSelected();
-
-    public abstract void setSelectedHash(int hash);
-    public abstract int getSelectedHash();
-
-    public abstract void setStatus(String status);
-    
-    public abstract ResponseBuilder getBuilder();
-    
-    public void selectLocale(BrowserEvent event, String language, String country, String variant)
-    {
-        setSelected(new Locale(language, country, variant));
-        setSelectedHash(getSelected().hashCode());
-        
-        setStatus(event.toString());
-        getBuilder().updateComponent("status");
-    }
-
-    public boolean isCurrentSelected()
-    {
-        return getSelected() != null && getCurrentHash() == getSelectedHash();
-    }
-
-    public String getRoundedUrl(String anchor)
-    {
-        return "rounded?c=" +
-               (isCurrentSelected() ? "efefef" : "2A78B0")
-               + "&bc=white&w=8&h=8&a=" + anchor;
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleListItemRenderer.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleListItemRenderer.java
deleted file mode 100644
index a836a9b..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleListItemRenderer.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.apache.tapestry.timetracker.page;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.scriptaculous.ListItemRenderer;
-
-import java.util.Iterator;
-import java.util.Locale;
-
-/**
- * Sample implementation of a html suggest response.
- */
-public class LocaleListItemRenderer implements ListItemRenderer {
-
-    /**
-     * {@inheritDoc}
-     */
-    public void renderList(IMarkupWriter writer, IRequestCycle cycle, Iterator values)
-    {
-        if (cycle.isRewinding())
-            return;
-
-        //Write values out as simple strings
-        writer.begin("ul");
-
-        while (values.hasNext()) {
-            
-            Locale value = (Locale)values.next();
-            if (value == null)
-                continue;
-
-            writer.begin("li");
-
-            writer.beginEmpty("img");
-            writer.attribute("src", "http://setiathome.free.fr/images/flags/" + value.getCountry().toLowerCase() + ".gif");
-            writer.print(value.getDisplayCountry());
-            
-            writer.end("li");
-        }
-
-        writer.end();
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleSuggest.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleSuggest.java
deleted file mode 100644
index 6b77778..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleSuggest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.apache.tapestry.timetracker.page;
-
-import org.apache.tapestry.annotations.Component;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.scriptaculous.ListItemRenderer;
-import org.apache.tapestry.scriptaculous.Suggest;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Demonstration of using the {@link org.apache.tapestry.scriptaculous.Suggest} component.
- */
-public abstract class LocaleSuggest extends BasePage {
-
-    static ListItemRenderer ITEM_RENDERER = new LocaleListItemRenderer();
-
-    @Component(bindings = {"value=inputLocale",
-            "displayName=literal:Locale",
-            "listSource=localeList",
-            "listener=listener:suggestLocale",
-            "listItemRenderer=itemRenderer"})
-    public abstract Suggest getSuggest();
-
-    public abstract String getInputLocale();
-
-    public ListItemRenderer getItemRenderer()
-    {
-        return ITEM_RENDERER;
-    }
-
-    public abstract String getFilterString();
-    public abstract void setFilterString(String filter);
-    
-    public List getLocaleList()
-    {
-        String filter = getFilterString();
-        Locale[] locales = Locale.getAvailableLocales();
-
-        if (filter == null || filter.length() < 1)
-        {
-            return Arrays.asList(locales);
-        }
-
-        filter = filter.toUpperCase();
-
-        List<Locale> ret = new ArrayList<Locale>();
-        List temp = new ArrayList();
-
-        for (Locale locale : locales)
-        {
-            if (locale.getDisplayCountry().toUpperCase().indexOf(filter) > -1
-                    && !temp.contains(locale.getDisplayCountry()))
-            {
-                ret.add(locale);
-                temp.add(locale.getDisplayCountry());
-            }
-        }
-
-        return ret;
-    }
-    
-    public void suggestLocale(String filter)
-    {
-        setFilterString(filter);
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
deleted file mode 100644
index 713b07c..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.page;
-
-import org.apache.log4j.Logger;
-import org.apache.tapestry.annotations.*;
-import org.apache.tapestry.dojo.form.*;
-import org.apache.tapestry.dojo.html.Dialog;
-import org.apache.tapestry.form.TextField;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.timetracker.dao.GenericDao;
-import org.apache.tapestry.timetracker.dao.TaskDao;
-import org.apache.tapestry.timetracker.model.Persistent;
-import org.apache.tapestry.timetracker.model.Project;
-import org.apache.tapestry.timetracker.model.Task;
-
-import java.util.Date;
-
-
-/**
- * Manages entering tasks.
- *
- * @author jkuhnert
- */
-public abstract class TaskEntryPage<E extends Persistent> extends BasePage
-{   
-    private static final Logger _log = Logger.getLogger(TaskEntryPage.class);
-    
-    @Component(id = "projectChoose", bindings = { "model=projectModel", "value=selectedProject",
-            "displayName=message:choose.project",
-            "validators=validators:required"})
-    public abstract Autocompleter getProjectChoose();
-    
-    @InjectObject("service:timetracker.dao.ProjectDao")
-    public abstract GenericDao<E> getProjectDao();
-    
-    @Persist
-    public abstract E getSelectedProject();
-    public abstract void setSelectedProject(E val);
-    
-    public abstract void setSubProject(E value);
-    public abstract E getSubProject();
-    
-    @Persist
-    public abstract void setShowSubProject(boolean show);
-    public abstract boolean getShowSubProject();
-    
-    public abstract Project getCurrentProject();
-    
-    @Component(bindings = {"value=date", 
-            "displayName=message:task.start.date"})
-    public abstract DropdownDatePicker getDatePicker();
-    public abstract Date getDate();
-    
-    @Component(bindings = {"value=startTime", "displayName=message:task.start.time",
-            "validators=validators:required"})
-    public abstract GTimePicker getStartPicker();
-    public abstract Date getStartTime();
-    
-    @Component(bindings = {"value=endTime", "displayName=message:task.end.time",
-            "validators=validators:required,differ=startPicker"})
-    public abstract GTimePicker getEndPicker();
-    public abstract Date getEndTime();
-    
-    @Component(bindings = { "value=description", 
-            "displayName=message:task.description",
-            "validators=validators:required,maxLength=20"})
-    public abstract TextField getDescriptionField();
-    public abstract String getDescription();
-    
-    @InjectObject("service:timetracker.dao.TaskDao")
-    public abstract TaskDao getTaskDao();
-    
-    public abstract ResponseBuilder getBuilder();
-
-    @InjectComponent("testDialog")
-    public abstract Dialog getTestDialog();
-
-    /**
-     * Selection model for projects.
-     * 
-     * @return The project model.
-     */
-    public IAutocompleteModel getProjectModel()
-    {
-        return new DefaultAutocompleteModel(getProjectDao().list(), "id", "name");
-    }
-    
-    /**
-     * Invoked when an item is selected from the project
-     * selection list.
-     */
-    @EventListener(events = "onValueChanged", targets = "projectChoose")
-    public void projectSelected()
-    {
-        getBuilder().updateComponent("projectDescription");        
-    }
-
-    public void showDialog()
-    {
-        getTestDialog().show();
-    }
-
-    /**
-     * Invoked by form to add a new task.
-     */
-    public void addTask()
-    {
-        Task task = new Task();
-        task.setProjectId(getSelectedProject().getId());
-        task.setDescription(getDescription());
-        
-        _log.debug("addTask date: " + getDate()
-                + "\n startTime: " + getStartTime()
-                + "\n endTime: " + getEndTime());
-        
-        task.setStartDate(getStartTime());
-        task.setEndDate(getEndTime());
-        
-        getTaskDao().addTask(task);
-    }
-
-    @EventListener(events = "onSave", targets="projName")
-    public void onNameUpdate()
-    {        
-        if (getSelectedProject() != null)
-        {
-            getProjectDao().update(getSelectedProject());
-            
-            getBuilder().updateComponent("projectChoose");
-            setSelectedProject(getSelectedProject());
-        }
-    }
-
-    public void showSubProject()
-    {
-        setShowSubProject(true);
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/package.html b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/package.html
deleted file mode 100644
index e859da3..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry TimeTracker: Web Application Framework Demo</title>
-</head>
-<body>
-
-<p>
-Contains tapestry pages.
-</p>
-
-@author Jesse Kuhnert <a href="mailto:jkuhnert@apache.org">jkuhnert@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/servlet/ConfigurationServlet.java b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/servlet/ConfigurationServlet.java
deleted file mode 100644
index 7b02e4e..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/servlet/ConfigurationServlet.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright Apr 21, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.timetracker.servlet;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.apache.log4j.PropertyConfigurator;
-import org.apache.tapestry.ApplicationServlet;
-
-/**
- * Used to configure logging.
- * 
- * @author jkuhnert
- */
-public class ConfigurationServlet extends ApplicationServlet implements ServletContextListener {
-    
-    /**
-     * generated.
-     */
-    private static final long serialVersionUID = -5959967554036278600L;
-
-    /**
-     * @see javax.servlet.GenericServlet#init()
-     */
-    public void init() {
-        try {
-            // Use basic logging configuration until Log4j is properly configured
-            PropertyConfigurator.configure(getServletContext().getRealPath("/")
-                    + "/WEB-INF/log4j.properties");
-            super.init();
-        } catch (Throwable t) {
-            t.printStackTrace();
-        }
-    }
-
-    /**
-     * @see javax.servlet.Servlet#destroy()
-     */
-    public void destroy()
-    {
-        super.destroy();
-        org.apache.log4j.LogManager.shutdown();
-    }
-
-    /**
-     * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
-     */
-    public void contextDestroyed(ServletContextEvent arg0)
-    {
-        org.apache.log4j.LogManager.shutdown();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public void contextInitialized(ServletContextEvent arg0)
-    {
-    }
-}
diff --git a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/servlet/package.html b/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/servlet/package.html
deleted file mode 100644
index 7312a00..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/servlet/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry TimeTracker: Web Application Framework Demo</title>
-</head>
-<body>
-
-<p>
-Contains servlet code.
-</p>
-
-@author Jesse Kuhnert <a href="mailto:jkuhnert@apache.org">jkuhnert@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/TimeTracker/src/main/resources/createDatabase.sql b/tapestry/tapestry-examples/TimeTracker/src/main/resources/createDatabase.sql
deleted file mode 100644
index c681939..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/main/resources/createDatabase.sql
+++ /dev/null
@@ -1,20 +0,0 @@
-create table projects (
-	project_id		int				generated by default as IDENTITY not null,
-	name			varchar(40)		not null,
-	PRIMARY KEY (project_id),
-	UNIQUE (name)
-);
-
-insert into projects(name) values ('Code Zeitgeist');
-insert into projects(name) values ('Zooland Systems');
-insert into projects(name) values ('Weedasher Industries');
-
-create table tasks (
-	task_id			int				generated by default as IDENTITY not null,
-	project_id		int				not null,
-	start_dt		timestamp		not null,
-	end_dt			timestamp		not null,
-	descr_txt		varchar(200)	not null,
-	PRIMARY KEY (task_id),
-	FOREIGN KEY (project_id) references projects(project_id)
-);
diff --git a/tapestry/tapestry-examples/TimeTracker/src/main/resources/messages.properties b/tapestry/tapestry-examples/TimeTracker/src/main/resources/messages.properties
deleted file mode 100644
index 17e6684..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/main/resources/messages.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-new.task=Task Entry
-
-choose.project=Project
-button.add=add
-
-task.start.date=Date
-task.start.time=Start
-task.end.time=End
-task.duration=Duration
-task.description=Description
-
-feedback=Feedback
diff --git a/tapestry/tapestry-examples/TimeTracker/src/site/site.xml b/tapestry/tapestry-examples/TimeTracker/src/site/site.xml
deleted file mode 100644
index 57ecf91..0000000
--- a/tapestry/tapestry-examples/TimeTracker/src/site/site.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<project name="Tapestry">
-    <bannerLeft>
-        <name>Tapestry Web Application Framework</name>
-        <href>http://tapestry.apache.org/</href>
-        <src>images/tapestry_banner.gif</src>
-    </bannerLeft>
-    <bannerRight>
-        <name>Apache Software Foundation</name>
-        <href>http://www.apache.org</href>
-        <src>images/asf_logo_wide.gif</src>
-    </bannerRight>
-    
-    <skin>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>maven-skin</artifactId>
-        <version>1.1</version>
-    </skin>
-    
-    <publishDate format="dd MMM yyyy" />
-    
-    <body>
-        <links>
-            <item name="Tapestry" href="http://tapestry.apache.org/" />
-            <item name="Hivemind" href="http://jakarta.apache.org/hivemind/" />
-            <item name="Apache" href="http://www.apache.org/" />
-        </links>
-        
-        <head>
-            <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
-            <script type="text/javascript">_uacct = "UA-400821-1"; urchinTracker();</script>
-            <link rel="shortcut icon" href="http://tapestry.apache.org/tapestry4.1/favicon.ico" />
-        </head>
-        
-        <menu ref="parent" />
-        
-        ${reports} 
-    </body>
-    
-</project>
diff --git a/tapestry/tapestry-examples/Vlib/.cvsignore b/tapestry/tapestry-examples/Vlib/.cvsignore
deleted file mode 100644
index 5590792..0000000
--- a/tapestry/tapestry-examples/Vlib/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-classes

-private

diff --git a/tapestry/tapestry-examples/Vlib/pom.xml b/tapestry/tapestry-examples/Vlib/pom.xml
deleted file mode 100644
index 8530a64..0000000
--- a/tapestry/tapestry-examples/Vlib/pom.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-Vlib</artifactId>
-    <packaging>jar</packaging>
-    <version>4.1.2-SNAPSHOT</version>
-    <!-- This should change to tapestry-project -->
-    <parent>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>tapestry-examples</artifactId>
-        <version>4.1.2-SNAPSHOT</version>
-    </parent>
-    <name>Tapestry Virtual Library</name>
-    <inceptionYear>2006</inceptionYear>
-    
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-framework</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-annotations</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>jboss</groupId>
-            <artifactId>jboss-j2ee</artifactId>
-            <version>4.0.2</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-VlibBeans</artifactId>
-            <version>4.1.2-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind-lib</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymockclassextension</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.9</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-    
-    <build>
-        <sourceDirectory>src/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-                <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </resource>
-        </resources>
-        
-        <testSourceDirectory>src/test</testSourceDirectory>
-        <testResources>
-            <testResource>
-                <directory>src/test</directory>
-                <includes><include>**/*</include></includes>
-                 <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </testResource>
-        </testResources>
-    </build>
-</project>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/conf/jetty.xml b/tapestry/tapestry-examples/Vlib/src/conf/jetty.xml
deleted file mode 100644
index a1a300b..0000000
--- a/tapestry/tapestry-examples/Vlib/src/conf/jetty.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE Configure PUBLIC
-	"-//Mort Bay Consulting//DTD Configure 1.2//EN"
-	"http://jetty.mortbay.org/configure_1_2.dtd">
-
-<Configure class="org.mortbay.jetty.Server">
-
-  <Call name="addListener">
-    <Arg>
-      <New class="org.mortbay.http.SocketListener">
-        <Set name="Port">8080</Set>
-        <Set name="MinThreads">1</Set>
-        <Set name="MaxThreads">10</Set>
-        <Set name="MaxIdleTimeMs">50000</Set>
-      </New>
-    </Arg>
-  </Call>
-  	
-  <Call name="addWebApplication">
-    <Arg>/vlib</Arg>
-    <Arg>context</Arg>
-    <Set name="DefaultsDescriptor">../../config/webdefault.xml</Set>
-  </Call>
-  
-  <Call name="addContext">
-    <Arg>/</Arg>   
-    <Set name="realmName">Jetty Demo Realm</Set>
-   
-    <Call name="addServlet">
-      <Arg>Admin</Arg>
-      <Arg>/</Arg>
-      <Arg>org.mortbay.servlet.AdminServlet</Arg>
-    </Call>
-    
-    <Call name="setAttribute">
-      <Arg>org.mortbay.http.HttpServer</Arg>
-      <Arg><Call name="getHttpServer"/></Arg>
-    </Call>
-  </Call>    
-</Configure>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/ApplicationUnavailable.html b/tapestry/tapestry-examples/Vlib/src/context/ApplicationUnavailable.html
deleted file mode 100644
index 1502c2e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/ApplicationUnavailable.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<html>
-<head>
-<title>Virtual Library: Search for Books</title>
-<link rel="stylesheet" type="text/css" href="scripts/style_virtlib_pcIE55.css"/>
-</head>
-<span jwcid="$content$">
-	
-<span jwcid="@Shell" title="Virtual Library: Application Unavailable" 
-	stylesheets="ognl:{ assets.stylesheet, assets.exception_stylesheet }">
-<body jwcid="@Body" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
-	
-<table border="0" cellpadding="0" cellspacing="0" width="691" height="110">
-  <tr>
-    <td rowspan="1" colspan="3" width="691" height="58"><img src="images/title/title_1x1.png" width="691" height="58" border="0"/></td>
-  </tr>
-  <tr>
-    <td rowspan="1" colspan="1" width="91" height="40"><img src="images/title/title_2x1.png" width="91" height="40" border="0"/></td>
-    <td rowspan="1" colspan="1" width="345" height="40"><img src="images/title/blank.png" width="345" height="40" border="0"/></td>
-    <td rowspan="1" colspan="1" width="255" height="40"><img src="images/title/title_2x3.png" width="255" height="40" border="0"/></td>
-  </tr>
-  <tr>
-    <td rowspan="1" colspan="3" width="691" height="12"><img src="images/title/title_3x1.png" width="691" height="12" border="0"/></td>
-  </tr>
-</table>
-
-<table style="{ padding-left: 4px }">
-	
-<tr>
-	<td>
-<span jwcid="@ShowError"/>
-
-<p>The Virtual Library application is temporarily unavailable due to
-system errors.  You may attempt to 
-<a jwcid="@ServiceLink" service="restart" href="#">restart the application</a>.
-</p>
-
-<span jwcid="@If" condition="ognl:global.debugEnabled">
-
-<span jwcid="@ExceptionDisplay" exceptions="ognl:exceptions"/>
-<span jwcid="@RequestDisplay"/>
-<span jwcid="@contrib:InspectorButton"/>
-</span>
-
-</td>
-</tr>
-</table>
-
-</body>
-</span>
-</span>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/BookMatches.html b/tapestry/tapestry-examples/Vlib/src/context/BookMatches.html
deleted file mode 100644
index 46d6d65..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/BookMatches.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border" title="Matching Books" browser="component:browser">
-
-<table class="data">
-  <tr>
-    <th><span jwcid="sortTitle">Title</span></th>
-    <th><span jwcid="sortAuthor">Author</span></th>
-    <th><span jwcid="sortPublisher">Publisher</span></th>
-    <th><span jwcid="sortOwner">Owner</span></th>
-    <th><span jwcid="sortBorrower">Borrowed&nbsp;By</span></th>
-    <th>Borrow</th>
-  </tr>
-    <tr jwcid="browser@Browser" query="ognl:bookQuery" value="ognl:currentMatch" listener="listener:requery">
-      <td><a href="#" jwcid="link@BookLink" book="ognl:currentMatch">Swing Second Edition</a>
-      </td>
-      <td><span jwcid="@Insert" value="ognl:currentMatch.author">Robinson and Vorobiev</span>
-      </td>
-      <td><span jwcid="@Insert" value="ognl:currentMatch.publisherName">Manning</span>
-      </td>
-      <td><a jwcid="ownerLink" href="#">Jim Moran</a>
-      </td>
-      <td><a jwcid="holderLink" href="#">Howard Lewis Ship</a>
-      </td>
-      <td class="icon"><a jwcid="borrow@Borrow" book="ognl:currentMatch" href="#"><img src="images/checkout.png" alt="Borrow" border="0" vspace="2"></a>
-      </td>
-    </tr>
-</table>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/BorrowedBooks.html b/tapestry/tapestry-examples/Vlib/src/context/BorrowedBooks.html
deleted file mode 100644
index 9e06b91..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/BorrowedBooks.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border" browser="ognl:components.browser">
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowMessage"/>
-
-<span jwcid="@If" condition="ognl:components.browser.resultCount == 0">
-	
-<span jwcid="@Information">
-	You have no borrowed books.
-</span>
-	
-</span>
-
-<span jwcid="@If" condition="ognl:components.browser.resultCount != 0">
-
-<table class="data">
-  <tr>
-    <th><span jwcid="sortTitle">Title</span></th>
-    <th><span jwcid="sortAuthor">Author</span></th>
-    <th><span jwcid="sortPublisher">Publisher</span></th>
-    <th><span jwcid="sortOwner">Owner</span></th>
-    <th>Return</th>
-  </tr>
-  <tr jwcid="browser@Browser" query="ognl:borrowedQuery" value="ognl:currentBook" listener="listener:requery">
-    <td><a jwcid="book@BookLink" book="ognl:currentBook" href="#" class="clsDataBlue">DocBook:The Definitive Guide</a>
-    </td>
-    <td><span jwcid="@Insert" value="ognl:currentBook.author">Walsh &#38; Muellner</span>
-    </td>
-    <td><span jwcid="@Insert" value="ognl:currentBook.publisherName">O'Reilly</span>
-    </td>
-    <td><a jwcid="owner@PersonLink" name="ognl:currentBook.ownerName" id="ognl:currentBook.ownerId" href="#">Jim Moran</a>
-    </td>
-    <td class="icon"><a jwcid="link@DirectLink" parameters="ognl:currentBook.id" listener="listener:returnBook" href="#"><img jwcid="returnRollover" src="images/return.png" alt="Return" width="25" height="26" border="0"/></a>
-    </td>
-  </tr>
-</table>
-</span>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/ConfirmBookDelete.html b/tapestry/tapestry-examples/Vlib/src/context/ConfirmBookDelete.html
deleted file mode 100644
index f080f14..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/ConfirmBookDelete.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border">
-	
-<span jwcid="@Question">
-Really delete book 
-	"<span jwcid="@Insert" value="ognl:bookTitle">Greyhounds</span>"?	
-</span>
-	
-<p>
-Deleting a book occurs immediately and is irrevocable.	
-</p>
-
-	
-<a jwcid="confirm" href="#"><img jwcid="confirmRollover" src="images/delete-confirm.png" height="38" width="89" border="0" alt="Delete"/></a>
-&nbsp;&nbsp;
-<a jwcid="@PageLink" page="MyLibrary"><img jwcid="cancelRollover" src="images/delete-cancel.png" height="38" width="89" border="0" alt="Cancel"/></a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/EditBook.html b/tapestry/tapestry-examples/Vlib/src/context/EditBook.html
deleted file mode 100644
index bebf756..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/EditBook.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border">
-	
-	<p>
-	Make your changes to the book using the form below. Fields marked with
-	<span class="required-field">*</span> are required.
-</p>
-
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError" delegate="ognl:validationDelegate"/>
-
-<form jwcid="form">
-  <table class="form">
-    <tr>
-      <th><span jwcid="@FieldLabel" field="component:inputTitle">Title</span></th>
-      <td><span class="required-field">*</span></td>
-      <td width="420"><input jwcid="inputTitle" type="text" size="50" maxlength="100"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="component:inputAuthor">Author</span></th>
-      	
-          <td><span class="required-field">*</span></td>
-      <td><input jwcid="inputAuthor" type="text" size="30" maxlength="60"/>
-      </td>
-    </tr>
-    <tr>
-      <th>ISBN</th>
-      <td></td>
-      <td><input jwcid="isbn@TextField" type="text" value="ognl:attributes.ISBN" size="20" maxlength="20"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="component:inputPublisherName">Publisher</span></th>
-      <td><span class="required-field">*</span></td>
-      <td><select jwcid="inputPublisher"/>
-<input jwcid="inputPublisherName" type="text" size="20" maxlength="40"/>
-      </td>
-    </tr>
-    <tr>
-      <td colspan="2">
-      </td>
-      <td>Note: If the Publisher is not listed, leave the option blank and type the name of the publisher in the field to the right.
-      	<span jwcid="@Script" script="Publisher.script" select="component:inputPublisher" field="component:inputPublisherName"/>
-      </td>
-    </tr>
-    <tr>
-      <th>Description</th>
-      <td></td>
-      <td><textarea jwcid="description@TextArea" value="ognl:attributes.description" cols="35" rows="8"></textarea>
-      </td>
-    </tr>
-    <tr>
-      <th>Borrowed By</th>
-      <td><span class="required-field">*</span></td>
-      <td><select jwcid="holder@PropertySelection" value="ognl:attributes.holderId" model="ognl:modelSource.personModel"/>
-      </td>
-    </tr>
-    <tr>
-      <th>Hidden</th>
-      <td></td>
-      <td><input jwcid="hidden@Checkbox" selected="ognl:attributes.hidden" type="checkbox"/>Check to prevent this book from appearing in searches.
-      </td>
-    </tr>
-    <tr>
-      <th>Lendable</th>
-      <td></td>
-      <td><input jwcid="lendable@Checkbox" selected="ognl:attributes.lendable" type="checkbox"/>Leave checked to allow this book to be borrowed by others.
-      </td>
-    </tr>
-    <tr>
-      <td colspan="2">
-      </td>
-      <td><input type="image" src="images/update.png" height="20" width="52" border="0" alt="Update"/>
-      </td>
-    </tr>
-  </table>
-</form>
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/EditProfile.html b/tapestry/tapestry-examples/Vlib/src/context/EditProfile.html
deleted file mode 100644
index cd645a9..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/EditProfile.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<html jwcid="$content$">
-  <body jwcid="border@Border">
-    <p> Update your registration information using the form below. Fields marked with <span class="required-field"
-      >*</span> are required.</p>
-    <span jwcid="@ShowError"/>
-    <span jwcid="@ShowValidationError" delegate="ognl:validationDelegate"/>
-    <form jwcid="form">
-      <table class="form">
-        <tr>
-          <th>First Name</th>
-          <td/>
-          <td width="390">
-            <input jwcid="firstName@TextField" value="ognl:attributes.firstName" size="30" maxlength="30" type="text"/>
-          </td>
-        </tr>
-        <tr>
-          <th>
-            <span jwcid="@FieldLabel" field="component:lastName">Last Name</span>
-          </th>
-          <td>
-            <span class="required-field">*</span>
-          </td>
-          <td>
-            <input jwcid="lastName" size="30" maxlength="30" type="text"/>
-          </td>
-        </tr>
-        <tr>
-          <th>
-            <span jwcid="@FieldLabel" field="component:email">E-mail</span>
-          </th>
-          <td>
-            <span class="required-field">*</span>
-          </td>
-          <td>
-            <input jwcid="email" type="text" size="30" maxlength="60"/>
-          </td>
-        </tr>
-        <tr>
-          <th>
-            <span jwcid="@FieldLabel" field="component:password1">Password</span>
-          </th>
-          <td/>
-          <td>
-            <input jwcid="password1" type="password" size="20" maxlength="20"/>
-          </td>
-        </tr>
-        <tr>
-          <th>
-            <span jwcid="@FieldLabel" field="component:password2">Password (again)</span>
-          </th>
-          <td/>
-          <td>
-            <input jwcid="password2" type="password" size="20" maxlength="20"/>
-          </td>
-        </tr>
-        <tr>
-          <td colspan="2"/>
-          <td>
-            <input type="image" src="images/update.png" height="20" width="52" border="0" alt="Update"/>
-          </td>
-        </tr>
-      </table>
-    </form>
-  </body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/GiveAwayBooks.html b/tapestry/tapestry-examples/Vlib/src/context/GiveAwayBooks.html
deleted file mode 100644
index 2651fdf..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/GiveAwayBooks.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border">
-
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError"/>
-
-This page is used to transfer ownership of one or more books to
-another user.
- 
-<form jwcid="form">
-
-<select jwcid="selectBooks"/>
-
-<span jwcid="availableTitleBlock@Block">
-Books you currently own.	
-</span>
-
-<span jwcid="selectedTitleBlock@Block">
-Books to transfer to <select jwcid="selectTarget"/>
-</span>
-
-<br clear="left"/>
-
-<input type="image" src="images/transfer.png" width="56" height="20" alt="Transfer"/>
-
-</form>
-	
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/Home.html b/tapestry/tapestry-examples/Vlib/src/context/Home.html
deleted file mode 100644
index 20f1836..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/Home.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border">
-
-<p>
-Use this form to locate books stored in the Virtual Library.
-When you find a book you want,
-<a href="#" jwcid="@PageLink" page="Login">login</a> and borrow it &#151; just don't forget to
-give it back eventually!
-	</p>	
-	
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowMessage"/>
-
-<form jwcid="form@Form" success="listener:search" stateful="ognl:false">
-  <table class="form">
-    <tr>
-      <th>Title</th>
-      <td><input type="text" jwcid="title@TextField" value="ognl:title" size="30" maxlength="100"/>
-      </td>
-    </tr>
-    <tr>
-      <th>Author</th>
-      <td><input type="text" jwcid="author@TextField" value="ognl:author" size="30" maxlength="100"/>
-      </td>
-    </tr>
-    <tr>
-    	<th>Book Owner</th>	
-    	<td><select jwcid="owner@PropertySelection" value="ognl:ownerId" model="ognl:modelSource.optionalPersonModel"/></td>
-    </tr>
-    <tr>
-      <th>Publisher</th>
-      <td><select jwcid="publisher@PropertySelection" value="ognl:publisherId" model="ognl:modelSource.publisherModel"/>
-		</td>
-	</tr>
-	<tr>
-		<td></td>
-		<td>
-	<input type="image" src="images/search.png" width="46" height="20" border="0" alt="Search"/>
-      </td>
-    </tr>
-  </table>
-</form>
-
-</body>
-
-
-
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/Login.html b/tapestry/tapestry-examples/Vlib/src/context/Login.html
deleted file mode 100644
index 4f46c7d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/Login.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border">
-<span jwcid="@ShowError"/><span jwcid="@ShowValidationError"/>
-<form jwcid="form">
-  <table class="form">
-    <tr>
-      <th><span jwcid="@FieldLabel" field="component:email">Email Address</span>
-      </th>
-      <td><input jwcid="email" type="text" name="email" size="30" maxlength="60"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="component:password">Password</span>
-      </th>
-      <td valign="bottom"><input jwcid="password" type="text" name="password" size="10" maxlength="20"/>
-	   </td>
-	</tr>
-	<tr>
-		<td></td>
-	  	<td>
-	  	<input type="image" src="images/login.png" width="35" height="20" border="0" alt="Login"/>
-	  	</td>
-    </tr>
-  </table>
-</form>
-<p>Not registered yet?  <a href="#" jwcid="register">Register now</a>.</p>
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/MyLibrary.html b/tapestry/tapestry-examples/Vlib/src/context/MyLibrary.html
deleted file mode 100644
index c3a81e5..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/MyLibrary.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<html jwcid="$content$">
-  <body jwcid="border@Border" browser="component:browser">
-    <span jwcid="@ShowError"/>
-    <span jwcid="@ShowMessage"/>
-    <span jwcid="@If" condition="ognl:components.browser.resultCount == 0">
-      <span jwcid="@Information"> You have not yet entered any of your books.<p>Use the<a href="#" jwcid="@PageLink"
-            page="NewBook">Add New Book</a> link to add books you own to the Virtual Library database, so that they may
-          be borrowed by others.</p>
-      </span>
-    </span>
-    <span jwcid="@If" condition="ognl:components.browser.resultCount != 0">
-      <table class="data">
-        <tr>
-          <th>
-            <span jwcid="sortTitle">Title</span>
-          </th>
-          <th>
-            <span jwcid="sortAuthor">Author</span>
-          </th>
-          <th>
-            <span jwcid="sortPublisher">Publisher</span>
-          </th>
-          <th>
-            <span jwcid="sortBorrower">Borrowed By</span>
-          </th>
-          <th>Edit/Delete</th>
-        </tr>
-        <tr jwcid="browser@Browser" query="ognl:ownedQuery" value="ognl:currentBook" listener="listener:requery">
-          <td>
-            <span jwcid="@Insert" value="ognl:currentBook.title">DocBook:The Definitive Guide</span>
-          </td>
-          <td>
-            <span jwcid="@Insert" value="ognl:currentBook.author">Walsh &#38; Muellner</span>
-          </td>
-          <td>
-            <span jwcid="@Insert" value="ognl:currentBook.publisherName">O'Reilly</span>
-          </td>
-          <td>
-            <a jwcid="holderLink" href="#">Jim Moran</a>
-          </td>
-          <td class="icon"><a jwcid="edit">
-              <img jwcid="editRollover" src="images/edit.png" width="25" height="25" alt="Edit" border="0"/>
-            </a>&nbsp;<a jwcid="delete">
-              <img jwcid="deleteRollover" src="images/delete.png" width="25" height="25" alt="Delete" border="0"/>
-            </a>
-          </td>
-        </tr>
-      </table>
-    </span>
-  </body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/NewBook.html b/tapestry/tapestry-examples/Vlib/src/context/NewBook.html
deleted file mode 100644
index 8e34fec..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/NewBook.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="@Border">
-
-<form jwcid="@Form" listener="listener:addBook" delegate="ognl:validationDelegate">
-	
-<p>
-	Enter information about the book into the form below. Fields marked with
-	<span class="required-field">*</span> are required.
-</p>
-
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError"/>
-
-  <table class="form">
-    <tr>
-      <th width="80" height="30"><span jwcid="@FieldLabel" field="component:title">Title</span></th>
-      <td><span class="required-field">*</span></td>
-      <td width="420"><input jwcid="title" type="text" size="50" maxlength="100"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="component:author">Author</span>
-      	 <td><span class="required-field">*</span></td>
-      </th>
-      <td><input jwcid="author" type="text" size="30" maxlength="60"/>
-      </td>
-    </tr>
-    <tr>
-      <th>ISBN</th>
-      <td></td>
-      <td><input jwcid="inputISBN@TextField" value="ognl:attributes.ISBN" type="text" maxlength="20" size="20"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="component:publisherName">Publisher</span></th>
-       <td><span class="required-field">*</span></td>
-      <td><select jwcid="publisher@PropertySelection" value="ognl:attributes.publisherId" 
-      model="ognl:modelSource.publisherModel"/>
-<input jwcid="publisherName" type="text" size="20" maxlength="40"/>
-      </td>
-    </tr>
-    <tr>
-      <td colspan="2"></td>
-      <td>
-	Note: If the Publisher is not listed, leave the option blank and type the name of the publisher in the field to the right.
-      </td>
-    </tr>
-    <tr>
-      <th>Description</th>
-      <td></td>
-      <td><textarea jwcid="description@TextArea" value="ognl:attributes.description" cols="35" rows="8"></textarea>
-      </td>
-    </tr>
-    <tr>
-      <th>Hidden</th>
-      <td></td>
-      <td><input jwcid="hidden@Checkbox" value="ognl:attributes.hidden" type="checkbox"/>Check to prevent this book from appearing in searches.
-      </td>
-    </tr>
-    <tr>
-      <th>Lendable</th>
-      <td></td>
-      <td><input jwcid="lendable@Checkbox" value="ognl:attributes.lendable" type="checkbox"/>Leave checked to allow this book to be borrowed by others.
-      </td>
-    </tr>
-    <tr>
-      <td colspan="2">
-      </td>
-      <td><input type="image" src="images/add.png" height="20" width="28" border="0"/>
-      </td>
-    </tr>
-  </table>
-<span jwcid="@Script" script="Publisher.script" select="component:publisher" field="component:publisherName"/>
-</form>
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/Register.html b/tapestry/tapestry-examples/Vlib/src/context/Register.html
deleted file mode 100644
index 9b11291..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/Register.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="@Border">
-
-<form jwcid="form">
-	
-<p>
-	Please enter your registration information here; this will allow you to access the Virtual Library.
-	Your e-mail address is used as your login id.  Fields marked with
-	<span class="required-field">*</span> are required.
-</p>
-
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError"/>
-
-  <table class="form">
-    <tr>
-      <th>First Name</th>
-      <td></td>
-      <td><input jwcid="firstName@TextField" value="ognl:firstName" type="text" size="30" maxlength="30"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="component:lastName">Last Name</span>
-      </th>
-      <td><span class="required-field">*</span></td>
-      <td><input jwcid="lastName" type="text" size="30" maxlength="30"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="component:email">E-mail</span>      </th>
-      <td><span class="required-field">*</span></td>
-      <td><input jwcid="email" type="text" size="30" maxlength="60"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="component:password1">Password</span>      </th>
-      <td><span class="required-field">*</span></td>
-      <td><input jwcid="password1" type="password" size="20" maxlength="20"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="component:password2">Password (again)</span>      </th>
-      <td><span class="required-field">*</span></td>
-      <td><input jwcid="password2" type="password" size="20" maxlength="20"/>
-      </td>
-    </tr>
-   	<tr>
-   		<td colspan="2"></td>
-   	<td>
-      		<input type="image" src="images/register.png" width="56" height="20" border="0" alt="Register"/>
-      </td>
-    </tr>
-  </table>
-</form>
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/ViewBook.html b/tapestry/tapestry-examples/Vlib/src/context/ViewBook.html
deleted file mode 100644
index 7a4fa6c..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/ViewBook.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border" subtitle="ognl:book.title">
-<table class="form">
-  <tr>
-    <th>Title</th>
-    <td><span jwcid="@Insert" value="ognl:book.title">HTML: The Definitive Guide</span>
-    </td>
-  </tr>
-  <tr>
-    <th>Author</th>
-    <td><span jwcid="@Insert" value="ognl:book.author">Musicano &#38; Kennedy</span>
-    </td>
-  </tr>
-  <tr>
-    <th>Publisher</th>
-    <td><span jwcid="@Insert" value="ognl:book.publisherName">O'Reilly</span>
-    </td>
-  </tr>
-  <tr>
-    <th>ISBN</th>
-    <td><span jwcid="@Insert" value="ognl:book.ISBN">1-56592-492-4</span>
-    </td>
-  </tr>
-  <tr>
-    <th>Owner</th>
-    <td><a jwcid="ownerLink" href="#">Howard Lewis Ship</a>
-    </td>
-  </tr>
-  <tr>
-    <th>Date Added</th>
-    <td><span jwcid="@Insert" value="ognl:book.dateAdded" format="ognl:dateFormat">Dec 24 1966</span>
-    </td>
-  </tr>
-<span jwcid="@If" condition="ognl:@org.apache.hivemind.HiveMind@isNonBlank(book.description)">
-  <tr>
-    <th>Description</th>
-    <td><span jwcid="@InsertText" value="ognl:book.description">
-	A bit of light reading ideal for curling up with by the fire on a cold 
-	winters night while sipping hot, sweet tea and nibbiling a freaki'n crumpet.
-	</span>
-    </td>
-  </tr>
-</span>
-<span jwcid="@If" condition="book.ownerPrimaryKey != book.holderPrimaryKey">
-  <tr>
-    <th>Held By</th>
-    <td><a jwcid="holderLink" href="#">Howard Lewis Ship</a>
-    </td>
-  </tr>
-</span>
-						
-<span jwcid="@If" condition="ognl:!book.lendable">
-  <tr>
-    <td>
-    </td>
-    <td>The book may not be lent out.
-    </td>
-  </tr>
-</span>
-  <tr>
-    <th>Borrow</th>
-    <td><a jwcid="borrow@Borrow" book="ognl:book" href="#">Borrow</a>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/ViewPerson.html b/tapestry/tapestry-examples/Vlib/src/context/ViewPerson.html
deleted file mode 100644
index 0ba903f..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/ViewPerson.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border" subtitle="ognl:person.naturalName" browser="component:browser">
-	
-<table class="form">
-  <tr>
-    <th>User</th>
-    <td><span jwcid="@Insert" value="ognl:person.naturalName">Jim Moran</span></td>
-  </tr>
-  <tr>
-    <th>E-Mail</th>
-    <td><a jwcid="mailLink" href="#"><span jwcid="@Insert" value="ognl:person.email">foo@bar.com</span></a></td>
-  </tr>
-</table>
-
-
-<span jwcid="@If" condition="ognl:components.browser.resultCount  == 0">
-
-<span jwcid="@Information">
-<span jwcid="@Insert" value="ognl:person.naturalName">Jim Moran</span>
-has no books available for lending.
-</span>
-</span>
-
-<span jwcid="@If" condition="ognl:components.browser.resultCount != 0">
-
-						 
-<table class="data">
-  <tr>
-    <th><span jwcid="sortTitle">Title</span></th>
-    <th><span jwcid="sortAuthor">Author</span></th>
-    <th><span jwcid="sortPublisher">Publisher</span></th>
-    <th><span jwcid="sortBorrower">Borrowed&nbsp;By</span></th>
-    <th>Borrow</th>
-  </tr>
-  <tr jwcid="browser@Browser" query="ognl:query" value="ognl:currentMatch" listener="listener:requery">
-    <td><a href="#" jwcid="book@BookLink" book="ognl:currentMatch">DocBook:The Definitive Guide</a>
-    </td>
-    <td><span jwcid="@Insert" value="ognl:currentMatch.author">Walsh &#38; Muellner</span>
-    </td>
-    <td><span jwcid="@Insert" value="ognl:currentMatch.publisherName">O'Reilly</span>
-    </td>
-    <td><a jwcid="holderLink" href="#">Jim Moran</a>
-    </td>
-    <td class="icon"><a jwcid="borrow@Borrow" book="ognl:currentMatch" href="#"><img src="images/checkout.png" width="25" height="26" border="0"/></a>
-    </td>
-  </tr>
-</table>
-
-
-</span>
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ApplicationUnavailable.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ApplicationUnavailable.page
deleted file mode 100644
index 26c6aef..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ApplicationUnavailable.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<page-specification>
-  <asset name="stylesheet" path="css/vlib.css"/>
-  <asset name="exception_stylesheet" path="classpath:/org/apache/tapestry/pages/Exception.css"/>
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookLink.html b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookLink.html
deleted file mode 100644
index 30f3e02..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookLink.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<span jwcid="$content$">
-<a href="#" jwcid="link"><span jwcid="@Insert" value="ognl:book.title"/></a>
-<span jwcid="@If" condition="ognl:newlyAdded"><img src="images/new.png" width="27" height="12" border="0" alt="New"/></span>
-</span>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookLink.jwc b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookLink.jwc
deleted file mode 100644
index 80f2f9f..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookLink.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification allow-body="no" allow-informal-parameters="no">
-  
-  <component id="link" type="ExternalLink">
-    <binding name="page" value="literal:ViewBook"/>
-    <binding name="parameters" value="book.id"/>
-  </component>
-   
-</component-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookMatches.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookMatches.page
deleted file mode 100644
index 05039d6..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookMatches.page
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification>
-  
-  <property name="currentMatch"/>
-      
-  <component id="sortTitle" type="ColumnSorter">
-    <binding name="selected" value="sortColumn"/>
-    <binding name="sortColumn">
-      @org.apache.tapestry.vlib.ejb.SortColumn@TITLE
-    </binding> 
-    <binding name="descending" value="descending"/>
-    <binding name="listener" value="listener:requery"/>
-  </component> 
-  
-  <component id="sortAuthor" copy-of="sortTitle">
-    <binding name="sortColumn">
-      @org.apache.tapestry.vlib.ejb.SortColumn@AUTHOR
-    </binding>
-  </component>
-  
-  <component id="sortPublisher" copy-of="sortTitle">
-    <binding name="sortColumn">
-    	@org.apache.tapestry.vlib.ejb.SortColumn@PUBLISHER
-    </binding>	
-  </component>
-  
-  <component id="sortOwner" copy-of="sortTitle">
-    <binding name="sortColumn">
-    	@org.apache.tapestry.vlib.ejb.SortColumn@OWNER
-    </binding>
-  </component>
- 
-  <component id="sortBorrower" copy-of="sortTitle">
-    <binding name="sortColumn">
-    	@org.apache.tapestry.vlib.ejb.SortColumn@HOLDER
-    </binding>
-  </component>
-  
-  <component id="ownerLink" type="PersonLink">
-    <binding name="id" value="currentMatch.ownerId"/>
-    <binding name="name" value="currentMatch.ownerName"/>
-  </component>
-  
-  <component id="holderLink" type="PersonLink">
-    <binding name="id" value="currentMatch.holderId"/>
-    <binding name="name" value="currentMatch.holderName"/>
-    <binding name="omit" value="! currentMatch.borrowed"/>
-  </component>
-
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookMatches.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookMatches.properties
deleted file mode 100644
index 96d8730..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BookMatches.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-no-matches=No books match your search criteria.
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Border.html b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Border.html
deleted file mode 100644
index 5f7b6c3..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Border.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<span jwcid="$content$">
-<html jwcid="@Shell" title="ognl:windowTitle" stylesheet="asset:stylesheet">
-<body jwcid="@Body" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
-<table border="0" cellpadding="0" cellspacing="0" width="691" height="110">
-  <tr>
-    <td rowspan="1" colspan="3" width="691" height="58"><img src="/vlib/images/title/title_1x1.png" width="691" height="58" border="0"/></td>
-  </tr>
-  <tr>
-    <td rowspan="1" colspan="1" width="91" height="40"><img src="/vlib/images/title/title_2x1.png" width="91" height="40" border="0"/></td>
-    <td rowspan="1" colspan="1" width="345" height="40"><img jwcid="@Image" image="ognl:titleImage" src="title/title_2x2.png" width="345" height="40" border="0"/></td>
-    <td rowspan="1" colspan="1" width="255" height="40"><img src="/vlib/images/title/title_2x3.png" width="255" height="40" border="0"/></td>
-  </tr>
-  <tr>
-    <td rowspan="1" colspan="3" width="691" height="12"><img src="/vlib/images/title/title_3x1.png" width="691" height="12" border="0"/></td>
-  </tr>
-</table>
-<table border="0">
-  <tr valign="top">
-    <td>
-    <table border="0" cellpadding="0" cellspacing="0" width="178">
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="29"><a href="#" jwcid="search"><img jwcid="searchRollover" src="/vlib/images/nav/nav_1x1.png" width="178" height="29" border="0" alt="Search"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="22"><a href="#" jwcid="myLibrary"><img jwcid="myLibraryRollover" src="/vlib/images/nav/nav_2x1.png" width="178" height="22" border="0" alt="My Library"/></a></td>
-      </tr>
-<span jwcid="@If" condition="ognl:loggedIn">
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="18"><a href="#" jwcid="borrowedBooks"><img jwcid="borrowedBooksRollover" src="/vlib/images/nav/nav_3x1.png" width="178" height="18" border="0" alt="Borrowed Books"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="20"><a href="#" jwcid="newBook"><img jwcid="newBookRollover" src="/vlib/images/nav/nav_4x1.png" width="178" height="20" border="0" alt="Add New Book"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="22"><a href="#" jwcid="editProfile"><img jwcid="editProfileRollover" src="/vlib/images/nav/nav_5x1_editprofile.png" width="178" height="22" border="0" alt="Edit Profile"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="22"><a href="#" jwcid="giveAway"><img jwcid="giveAwayRollover" src="/vlib/images/nav/nav_5x1.png" width="178" height="22" border="0" alt="Give Away Books"/></a></td>
-      </tr>
-</span>
-
-<span jwcid="@If" condition="ognl:admin">
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="19"><img src="/vlib/images/nav/nav_6x1.png" width="178" height="19" border="0" alt="Admin"/></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="20"><a href="#" jwcid="editUsers"><img jwcid="editUsersRollover" src="/vlib/images/nav/nav_7x1.png" width="178" height="20" border="0" alt="Edit Users"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="20"><a href="#" jwcid="editPublishers"><img jwcid="editPublishersRollover" src="/vlib/images/nav/nav_8x1.png" width="178" height="20" border="0" alt="Edit Publishers"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="21"><a href="#" jwcid="transferBooks"><img jwcid="transferBooksRollover" src="/vlib/images/nav/nav_9x1.png" width="178" height="21" border="0" alt="Transfer Books"/></a></td>
-      </tr>
-</span>
-	
-<span jwcid="@If" condition="ognl:loggedIn">
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="29"><a href="#" jwcid="logout"><img jwcid="logoutRollover" src="/vlib/images/nav/nav_10x1.png" width="178" height="29" border="0" alt="Logout"/></a></td>
-      </tr>
-</span>
-
-<span jwcid="@If" condition="ognl:!loggedIn">
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="29"><a href="#" jwcid="login"><img jwcid="loginRollover" src="/vlib/images/nav/nav_10x1.png" width="178" height="29" border="0" alt="Login"/></a></td>
-      </tr>
-</span>
-    </table>
-<span jwcid="@If" condition="ognl:browser != null and browser.resultCount != 0">
-<br clear="left"/>
-    <table border="0" cellpadding="0" cellspacing="0" width="178">
-      <tr>
-        <td rowspan="1" colspan="9" width="178" height="8"><img src="/vlib/images/browser/browser_1x1.png" width="178" height="8" border="0"/></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="7" height="60"><img src="/vlib/images/browser/browser_2x1.png" width="7" height="60" border="0"/></td>
-        <td valign="top" class="browser-summary" rowspan="1" colspan="7" width="162" height="60"><span jwcid="@Insert" value="ognl:browser.resultCount">67</span> books
-<br/>
-Showing
-<br/>
-<span jwcid="@Insert" value="ognl:browser.range">1 - 10</span></td>
-        <td rowspan="1" colspan="1" width="9" height="60"><img src="/vlib/images/browser/browser_2x3.png" width="9" height="60" border="0"/></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="2" width="25" height="33"><img src="/vlib/images/browser/browser_4x1.png" width="25" height="33" border="0"/></td>
-        <td rowspan="1" colspan="1" width="35" height="33"><a href="#" jwcid="first"><img jwcid="firstRollover" src="/vlib/images/browser/browser_4x2.png" width="35" height="33" border="0" alt="First"/></a></td>
-        <td rowspan="1" colspan="1" width="22" height="33"><a href="#" jwcid="previous"><img jwcid="previousRollover" src="/vlib/images/browser/browser_4x3.png" width="22" height="33" border="0" alt="Previous"/></a></td>
-        <td rowspan="1" colspan="1" width="12" height="33"><img src="/vlib/images/browser/browser_4x4.png" width="12" height="33" border="0"/></td>
-        <td rowspan="1" colspan="1" width="24" height="33"><a href="#" jwcid="next"><img jwcid="nextRollover" src="/vlib/images/browser/browser_4x5.png" width="24" height="33" border="0" alt="Next"/></a></td>
-        <td rowspan="1" colspan="1" width="35" height="33"><a href="#" jwcid="last"><img jwcid="lastRollover" src="/vlib/images/browser/browser_4x6.png" width="35" height="33" border="0" alt="Last"/></a></td>
-        <td rowspan="1" colspan="2" width="25" height="33"><img src="/vlib/images/browser/browser_4x7.png" width="25" height="33" border="0"/></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="9" width="178" height="26"><img src="/vlib/images/browser/browser_5x1.png" width="178" height="26" border="0"/></td>
-      </tr>
-      <tr>
-        <td width="7" height="1"><img name="blank" src="/vlib/images/spacer.png" width="7" height="1" border="0"/></td>
-        <td width="18" height="1"><img name="blank" src="/vlib/images/spacer.png" width="18" height="1" border="0"/></td>
-        <td width="35" height="1"><img name="blank" src="/vlib/images/spacer.png" width="35" height="1" border="0"/></td>
-        <td width="22" height="1"><img name="blank" src="/vlib/images/spacer.png" width="22" height="1" border="0"/></td>
-        <td width="12" height="1"><img name="blank" src="/vlib/images/spacer.png" width="12" height="1" border="0"/></td>
-        <td width="24" height="1"><img name="blank" src="/vlib/images/spacer.png" width="24" height="1" border="0"/></td>
-        <td width="35" height="1"><img name="blank" src="/vlib/images/spacer.png" width="35" height="1" border="0"/></td>
-        <td width="16" height="1"><img name="blank" src="/vlib/images/spacer.png" width="16" height="1" border="0"/></td>
-        <td width="9" height="1"><img name="blank" src="/vlib/images/spacer.png" width="9" height="1" border="0"/></td>
-      </tr> 
-    </table>
-</span></td>
-    <td><span jwcid="@RenderBody">
-	
-	Body content goes here.
-	
-</span></td>
-  </tr>
-</table>
-<span jwcid="ib@contrib:InspectorButton" disabled="ognl:global.debugEnabled"/>
-</body>
-</html>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Border.jwc b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Border.jwc
deleted file mode 100644
index 2734e23..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Border.jwc
+++ /dev/null
@@ -1,271 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification allow-informal-parameters="no">
-          
-  <component id="search" type="PageLink">
-    <binding name="page" value="literal:Home"/>	
-  </component>
-  
-  <component id="searchRollover" type="Rollover">
-    <binding name="image" value="searchImage"/>
-    <binding name="mouseOver" value="searchRolloverImage"/>	
-  </component>
-       
-  <component id="myLibrary" type="DirectLink">
-    <binding name="listener" value="listener:viewMyLibrary"/>	
-    <binding name="stateful" value="false"/>
-  </component>    
-  
-  <component id="myLibraryRollover" type="Rollover">
-    <binding name="image" value="myLibraryImage"/>
-    <binding name="mouseOver" value="myLibraryRolloverImage"/>
-  </component>
-  
-  <component id="borrowedBooks" type="DirectLink">
-  	<binding name="listener" value="listener:viewBorrowedBooks"/>	
-    <binding name="stateful" value="false"/>  	
-  </component>
-  
-  <component id="borrowedBooksRollover" type="Rollover">
-    <binding name="image" value="borrowedBooksImage"/>
-    <binding name="mouseOver" value="borrowedBooksRolloverImage"/>	
-  </component>
-  
-  <component id="newBook" type="PageLink">
-    <binding name="page" value="literal:NewBook"/>	
-  </component>
-  
-  <component id="newBookRollover" type="Rollover">
-    <binding name="image" value="newBookImage"/>
-    <binding name="mouseOver" value="newBookRolloverImage"/>
-  </component>
-  
-  <component id="editProfile" type="DirectLink">
-  	<binding name="listener" value="listener:editProfile"/>	
-    <binding name="stateful" value="false"/>
-  </component>
-  
-  <component id="editProfileRollover" type="Rollover">
-    <binding name="image" value="editProfileImage"/>
-    <binding name="mouseOver" value="editProfileRolloverImage"/>	
-  </component>
-  
-  <component id="giveAway" type="PageLink">
-	<binding name="page" value="literal:GiveAwayBooks"/>	
-  </component>
-   
-  <component id="giveAwayRollover" type="Rollover">
-    <binding name="image" value="giveAwayImage"/>
-    <binding name="mouseOver" value="giveAwayRolloverImage"/>	
-  </component>  
-   
-  <component id="editUsers" type="PageLink">
-    <binding name="page" value="literal:admin/EditUsers"/>
-  </component>
-  
-  <component id="editUsersRollover" type="Rollover">
-    <binding name="image" value="editUsersImage"/>
-    <binding name="mouseOver" value="editUsersRolloverImage"/>
-  </component>
-  
-  <component id="editPublishers" type="PageLink">
-    <binding name="page" value="literal:admin/EditPublishers"/>	
-  </component>
-  
-  <component id="editPublishersRollover" type="Rollover">
-    <binding name="image" value="editPublishersImage"/>
-    <binding name="mouseOver" value="editPublishersRolloverImage"/>	
-  </component>
-  
-  <component id="transferBooks" type="PageLink">
-    <binding name="page" value="literal:admin/TransferBooksSelect"/>	
-  </component>
-  
-  <component id="transferBooksRollover" type="Rollover">
-    <binding name="image" value="transferBooksImage"/>
-    <binding name="mouseOver" value="transferBooksRolloverImage"/>
-  </component>
-   
-  <component id="logout" type="DirectLink">
-    <binding name="listener" value="listener:logout"/>
-    <binding name="stateful" value="false"/>
-  </component>
-  
-  <!-- Since there is no "Logout" page, the images for the Logout
-  	   link are invariant. -->
-  	   
-  <component id="logoutRollover" type="Rollover">
-    <binding name="image" value="asset:logout"/>
-    <binding name="mouseOver" value="asset:logout_h"/>	
-  </component>
-  
-  <component id="login" type="DirectLink">
-    <binding name="listener" value="listener:login"/>
-    <binding name="stateful" value="false"/>
-  </component>
-  
-  <component id="loginRollover" type="Rollover">
-    <binding name="image" value="loginImage"/>
-    <binding name="mouseOver" value="loginRolloverImage"/>	
-  </component>
-   
-  <component id="first" type="DirectLink">
-    <binding name="listener" value="listener:selectBrowserPage"/>
-    <binding name="parameters" value="1"/>
-    <binding name="disabled" value="browser.disableBack"/>	
-  </component>
-  
-  <component id="firstRollover" type="Rollover">
-    <binding name="image" value="asset:first"/>
-    <binding name="mouseOver" value="asset:first_h"/>
-    <binding name="disabled" value="asset:first_d"/>	
-  </component>
-  
-  <component id="previous" type="DirectLink">
-    <binding name="listener" value="listener:selectBrowserPage"/>
-    <binding name="parameters">
-      @@max(browser.currentPage - 1, 1)	
-    </binding>	
-    <binding name="disabled" value="browser.disableBack"/>
-  </component>
-  
-  <component id="previousRollover" type="Rollover">
-    <binding name="image" value="asset:previous"/>
-    <binding name="mouseOver" value="asset:previous_h"/>
-    <binding name="disabled" value="asset:previous_d"/>
-  </component>
-  
-  <component id="next" type="DirectLink">
-    <binding name="listener" value="listener:selectBrowserPage"/>
-    <binding name="parameters">
-    @@min(browser.currentPage + 1, browser.pageCount)	
-    </binding>	
-    <binding name="disabled" value="browser.disableNext"/>
-  </component>
-  
-  <component id="nextRollover" type="Rollover">
-    <binding name="image" value="asset:next"/>
-    <binding name="mouseOver" value="asset:next_h"/>
-    <binding name="disabled" value="asset:next_d"/>	
-  </component>
-  
-  <component id="last" type="DirectLink">
-    <binding name="listener" value="listener:selectBrowserPage"/>
-    <binding name="parameters" value="browser.pageCount"/>
-    <binding name="disabled" value="browser.disableNext"/>	
-  </component>
-  
-  <component id="lastRollover" type="Rollover">
-    <binding name="image" value="asset:last"/>
-    <binding name="mouseOver" value="asset:last_h"/>
-    <binding name="disabled" value="asset:last_d"/>	
-  </component>
-   
-  <asset name="stylesheet" path="css/vlib.css"/>
-
-  <asset name="title_BookMatches" path="images/title/BookMatches.png"/>
-  <asset name="title_BorrowedBooks" path="images/title/BorrowedBooks.png"/>
-  <asset name="title_ConfirmBookDelete" path="images/title/DeleteBook.png"/> 
-  <asset name="title_EditBook" path="images/title/EditBook.png"/>
-  <asset name="title_EditProfile" path="images/title/EditProfile.png"/>
-  <asset name="title_EditPublishers" path="images/title/EditPublishers.png"/>
-  <asset name="title_EditUsers" path="images/title/EditUsers.png"/>
-  <asset name="title_GiveAwayBooks" path="images/title/GiveAwayBooks.png"/>
-  <asset name="title_Home" path="images/title/Search.png"/>
-  <asset name="title_Login" path="images/title/Login.png"/>
-  <asset name="title_MyLibrary" path="images/title/MyLibrary.png"/>
-  <asset name="title_NewBook" path="images/title/AddNewBook.png"/>
-  <asset name="title_Register" path="images/title/Register.png"/>
-  <asset name="title_TransferBooks" path="images/title/TransferBooks.png"/>
-  <asset name="title_ViewBook" path="images/title/ViewBook.png"/>
-  <asset name="title_ViewPerson" path="images/title/ViewPerson.png"/>
-  
-  <asset name="search" path="images/nav/nav_1x1.png"/>
-  <asset name="search_h" path="images/nav-h/nav_1x1.png"/>
-  <asset name="search_s" path="images/nav-selected/nav_1x1.png"/>
-  <asset name="search_h_s" path="images/nav-selected-h/nav_1x1.png"/>
-  
-  <asset name="mylibrary" path="images/nav/nav_2x1.png"/>
-  <asset name="mylibrary_h" path="images/nav-h/nav_2x1.png"/>
-  <asset name="mylibrary_s" path="images/nav-selected/nav_2x1.png"/>
-  <asset name="mylibrary_h_s" path="images/nav-selected-h/nav_2x1.png"/>
-  
-  <asset name="borrowedbooks" path="images/nav/nav_3x1.png"/>
-  <asset name="borrowedbooks_h" path="images/nav-h/nav_3x1.png"/>
-  <asset name="borrowedbooks_s" path="images/nav-selected/nav_3x1.png"/>
-  <asset name="borrowedbooks_h_s" path="images/nav-selected-h/nav_3x1.png"/>
-  
-  <asset name="newbook" path="images/nav/nav_4x1.png"/>
-  <asset name="newbook_h" path="images/nav-h/nav_4x1.png"/>
-  <asset name="newbook_s" path="images/nav-selected/nav_4x1.png"/>
-  <asset name="newbook_h_s" path="images/nav-selected-h/nav_4x1.png"/>
-  
-  <asset name="editprofile" path="images/nav/nav_5x1_editprofile.png"/>
-  <asset name="editprofile_h" path="images/nav-h/nav_5x1_editprofile.png"/>
-  <asset name="editprofile_s" path="images/nav-selected/nav_5x1_editprofile.png"/>
-  <asset name="editprofile_h_s" path="images/nav-selected-h/nav_5x1_editprofile.png"/>
-  
-  <asset name="giveaway" path="images/nav/nav_5x1.png"/>
-  <asset name="giveaway_h" path="images/nav-h/nav_5x1.png"/>
-  <asset name="giveaway_s" path="images/nav-selected/nav_5x1.png"/>
-  <asset name="giveaway_h_s" path="images/nav-selected-h/nav_5x1.png"/>
-  
-  <asset name="editusers" path="images/nav/nav_7x1.png"/>
-  <asset name="editusers_h" path="images/nav-h/nav_7x1.png"/>
-  <asset name="editusers_s" path="images/nav-selected/nav_7x1.png"/>
-  <asset name="editusers_h_s" path="images/nav-selected-h/nav_7x1.png"/>  
-  
-  <asset name="editpublishers" path="images/nav/nav_8x1.png"/>
-  <asset name="editpublishers_h" path="images/nav-h/nav_8x1.png"/>
-  <asset name="editpublishers_s" path="images/nav-selected/nav_8x1.png"/>
-  <asset name="editpublishers_h_s" path="images/nav-selected-h/nav_8x1.png"/>  
-  
-  <asset name="transferbooks" path="images/nav/nav_9x1.png"/>
-  <asset name="transferbooks_h" path="images/nav-h/nav_9x1.png"/>
-  <asset name="transferbooks_s" path="images/nav-selected/nav_9x1.png"/>
-  <asset name="transferbooks_h_s" path="images/nav-selected-h/nav_9x1.png"/>  
-  
-  <asset name="login" path="images/nav/nav_10x1_login.png"/>
-  <asset name="login_h" path="images/nav-h/nav_10x1_login.png"/>
-  <asset name="login_s" path="images/nav-selected/nav_10x1_login.png"/>
-  <asset name="login_h_s" path="images/nav-selected-h/nav_10x1_login.png"/>
-  
-  <asset name="logout" path="images/nav/nav_10x1.png"/>
-  <asset name="logout_h" path="images/nav-h/nav_10x1.png"/>
-  
-  <asset name="first" path="images/browser/browser_4x2.png"/>
-  <asset name="first_h" path="images/browser_h/browser_4x2.png"/>
-  <asset name="first_d" path="images/browser_d/browser_4x2.png"/>
-  
-  <asset name="previous" path="images/browser/browser_4x3.png"/>
-  <asset name="previous_h" path="images/browser_h/browser_4x3.png"/>
-  <asset name="previous_d" path="images/browser_d/browser_4x3.png"/>
-  
-  <asset name="next" path="images/browser/browser_4x5.png"/>
-  <asset name="next_h" path="images/browser_h/browser_4x5.png"/>
-  <asset name="next_d" path="images/browser_d/browser_4x5.png"/>
-  
-  <asset name="last" path="images/browser/browser_4x6.png"/>
-  <asset name="last_h" path="images/browser_h/browser_4x6.png"/>
-  <asset name="last_d" path="images/browser_d/browser_4x6.png"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Border.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Border.properties
deleted file mode 100644
index 1c463b2..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Border.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-goodbye=You have been logged out.  Click the Login or My Library link to log back in.
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Borrow.html b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Borrow.html
deleted file mode 100644
index 7c9adae..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Borrow.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<span jwcid="$content$">
-<a jwcid="link"><img jwcid="rollover" src="images/icon_borrow.gif" width="25" height="26" alt="Borrow" border="0"/></a>
-</span>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Borrow.jwc b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Borrow.jwc
deleted file mode 100644
index 0946b06..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Borrow.jwc
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<component-specification allow-body="no" allow-informal-parameters="no">
-  <component id="link" type="DirectLink">
-    <binding name="parameters" value="book.id"/>
-    <binding name="listener" value="listener:borrow"/>
-    <binding name="disabled" value="linkDisabled"/>
-  </component>
-  <component id="rollover" type="Rollover">
-    <binding name="image" value="asset:enabled"/>
-    <binding name="disabled" value="asset:disabled"/>
-    <binding name="mouseOver" value="asset:mouseOver"/>
-  </component>
-  <asset name="enabled" path="images/checkout.png"/>
-  <asset name="mouseOver" path="images/checkout_h.png"/>
-  <asset name="disabled" path="images/spacer.png"/>
-</component-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Borrow.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Borrow.properties
deleted file mode 100644
index ca60945..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Borrow.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-borrowed-book=Borrowed: {0}
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BorrowedBooks.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BorrowedBooks.page
deleted file mode 100644
index 58a185f..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BorrowedBooks.page
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<page-specification>
-  <property name="currentBook"/>
-  <component id="sortTitle" type="ColumnSorter">
-    <binding name="selected" value="sortColumn"/>
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@TITLE"/>
-    <binding name="descending" value="descending"/>
-    <binding name="listener" value="listener:requery"/>
-  </component>
-  <component id="sortAuthor" copy-of="sortTitle">
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@AUTHOR"/>
-  </component>
-  <component id="sortPublisher" copy-of="sortTitle">
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@PUBLISHER"/>
-  </component>
-  <component id="sortOwner" copy-of="sortTitle">
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@OWNER"/>
-  </component>
-  <component id="returnRollover" type="Rollover">
-    <binding name="image" value="asset:return"/>
-    <binding name="focus" value="asset:return_h"/>
-  </component>
-  <asset name="return" path="images/return.png"/>
-  <asset name="return_h" path="images/return_h.png"/>
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BorrowedBooks.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BorrowedBooks.properties
deleted file mode 100644
index b635447..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/BorrowedBooks.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-returned-book=Returned book ''{0}''.
-unable-to-return-book=Unable to return book: {0}
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ColumnSorter.html b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ColumnSorter.html
deleted file mode 100644
index 5f309c4..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ColumnSorter.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<span jwcid="$content$">
-<a jwcid="link"><span jwcid="@RenderBody"/></a>
-<span jwcid="@If" condition="ognl:sortColumn == selected">
-<a jwcid="iconLink"><img jwcid="rollover" width="17" height="16" alt="Re-sort Column"/></a>
-</span>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ColumnSorter.jwc b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ColumnSorter.jwc
deleted file mode 100644
index bea78bc..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ColumnSorter.jwc
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<component-specification allow-body="yes" allow-informal-parameters="no">
-  <component id="link" type="DirectLink">
-    <binding name="listener" value="listener:handleClick"/>
-  </component>
-  <component id="iconLink" copy-of="link"/>
-  <component id="rollover" type="Rollover">
-    <binding name="image"> descending ? assets.down : assets.up </binding>
-    <binding name="mouseOver"> descending ? assets.down_h : assets.up_h </binding>
-  </component>
-  <asset name="up" path="images/sort-up.png"/>
-  <asset name="up_h" path="images/sort-up_h.png"/>
-  <asset name="down" path="images/sort-down.png"/>
-  <asset name="down_h" path="images/sort-down_h.png"/>
-</component-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ConfirmBookDelete.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ConfirmBookDelete.page
deleted file mode 100644
index ed78afa..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ConfirmBookDelete.page
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<page-specification>
-  
-  <component id="confirm" type="DirectLink">
-    <binding name="listener" value="listener:deleteBook"/>
-    <binding name="parameters" value="bookId"/>
-  </component>
-  
-  <component id="confirmRollover" type="Rollover">
-    <binding name="image" value="asset:confirm"/>
-    <binding name="mouseOver" value="asset:confirm_h"/>	
-  </component>
-  
-  <component id="cancelRollover" type="Rollover">
-    <binding name="image" value="asset:cancel"/>
-    <binding name="focus" value="asset:cancel_h"/>	
-  </component>
-  
-  <asset name="confirm" path="images/delete-confirm.png"/>
-  <asset name="confirm_h" path="images/delete-confirm_h.png"/>
-  <asset name="cancel" path="images/delete-cancel.png"/>
-  <asset name="cancel_h" path="images/delete-cancel_h.png"/>
-  
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ConfirmBookDelete.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ConfirmBookDelete.properties
deleted file mode 100644
index f165dbf..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ConfirmBookDelete.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-book-deleted=Deleted book ''{0}''.
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditBook.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditBook.page
deleted file mode 100644
index a21e302..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditBook.page
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<page-specification>
-	
-   <component id="form" type="Form">
-    <binding name="success" value="listener:formSubmit"/>
-    <binding name="delegate" value="validationDelegate"/>
-    <binding name="clientValidationEnabled" value="true"/>
-  </component>
-  
-  <component id="inputTitle" type="TextField">
-    <binding name="value" value="attributes.title"/>
-    <binding name="displayName" value="message:title-label"/>
-    <binding name="validators" value="validators:required"/>
-  </component>
- 
-  <component id="inputAuthor" type="TextField">
-    <binding name="value" value="attributes.author"/>
-    <binding name="displayName" value="message:author-label"/>
-    <binding name="validators" value="validators:required"/>
-  </component>
-  
-  <component id="inputPublisher" type="PropertySelection">
-    <binding name="value" value="attributes.publisherId"/>
-    <binding name="model" value="modelSource.publisherModel"/>
-  </component>
-  
-  <component id="inputPublisherName" type="TextField">
-    <binding name="value" value="publisherName"/>
-    <binding name="displayName" value="message:publisher-label"/>
-  </component>
-
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditBook.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditBook.properties
deleted file mode 100644
index f154bd0..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditBook.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-need-publisher-name=You must provide a publisher name if the publisher option is left empty.
-leave-publisher-name-empty=You may not enter a publisher name if you select a publisher from the list.
-updated-book=Updated book ''{0}''.
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditProfile.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditProfile.page
deleted file mode 100644
index ca53c68..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditProfile.page
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification>
- 
-  <component id="form" type="Form">
-    <binding name="success" value="listener:updateProfile"/>
-    <binding name="delegate" value="validationDelegate"/>
-    <binding name="clientValidationEnabled" value="true"/>
-  </component>
- 
-  <component id="lastName" type="TextField">
-    <binding name="value" value="attributes.lastName"/>
-    <binding name="displayName" value="message:last-name-label"/>   
-    <binding name="validators" value="validators:required"/>
-  </component>
-
-  <component id="email" type="TextField">
-    <binding name="value" value="attributes.email"/>
-    <binding name="displayName" value="message:email-label"/>
-    <binding name="validators" value="validators:required,email"/>
-  </component>
-
-  <component id="password1" type="TextField">
-    <binding name="value" value="password1"/>
-    <binding name="displayName" value="message:password1-label"/>
-    <binding name="hidden" value="true"/>
-  </component>
-
-  <component id="password2" type="TextField">
-    <binding name="value" value="password2"/>
-    <binding name="displayName" value="message:password2-label"/>
-      <binding name="hidden" value="true"/>
-  </component>
-  
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditProfile.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditProfile.properties
deleted file mode 100644
index c314ca2..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/EditProfile.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-enter-password-twice=Enter the new password, then re-enter it to confirm.
-password-must-match=Enter the same password in both fields.
-last-name-label=Last Name
-email-label=E-Mail
-password1-label=Password
-password2-label=Password (again)
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/GiveAwayBooks.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/GiveAwayBooks.page
deleted file mode 100644
index e459d6b..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/GiveAwayBooks.page
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<page-specification>
-  <component id="form" type="Form">
-    <binding name="success" value="listener:formSubmit"/>
-    <binding name="clientValidationEnabled" value="true"/>
-  </component>
-  <component id="selectBooks" type="contrib:Palette">
-    <binding name="sort" value="@org.apache.tapestry.contrib.palette.SortMode@LABEL"/>
-    <binding name="model" value="booksModel"/>
-    <binding name="selected" value="selectedBooks"/>
-    <binding name="selectedTitleBlock" value="component:selectedTitleBlock"/>
-    <binding name="availableTitleBlock" value="component:availableTitleBlock"/>
-    <binding name="validators" value="validators:required"/>
-    <binding name="displayName" value="message:books-label"/>
-  </component>
-  <component id="selectTarget" type="PropertySelection">
-    <binding name="value" value="targetUserId"/>
-    <binding name="model" value="personModel"/>
-  </component>
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/GiveAwayBooks.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/GiveAwayBooks.properties
deleted file mode 100644
index 45a93a6..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/GiveAwayBooks.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-select-at-least-one-book=You must select at least one book to transfer to {0}.
-update-failure=Unable to transfer book(s).
-read-books-failure=Unable to retrieve list of books.
-transfered-books=Transfered {0} book(s) to {1}.
-no-books-to-transfer=You own no books that you could give away.
-books-label=Books To Transfer
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Information.html b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Information.html
deleted file mode 100644
index ba1613c..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Information.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<span jwcid="$content$">
-
-<div class="message">
-	<table>
-		<tr> <td>
-    <img src="/vlib/images/info-icon.png" width="50" height="50" alt="Info" border="0" vspace="10"/>
-    	</td>
-	<td>
-    <span class="message">
-    	<span jwcid="@RenderBody">
-    	Info Message
-    	</span>
-    </span>
-</td>
-</tr>
-</table>
-
-</div>
-
-
-</span>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Information.jwc b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Information.jwc
deleted file mode 100644
index 198a5b2..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Information.jwc
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<component-specification allow-body="yes" allow-informal-parameters="no"/>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Login.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Login.page
deleted file mode 100644
index 0844a38..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Login.page
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<page-specification>
-  <component id="form" type="Form">
-    <binding name="success" value="listener:attemptLogin"/>
-    <binding name="stateful" value="false"/>
-    <binding name="clientValidationEnabled" value="true"/>
-  </component>
-  <component id="email" type="TextField">
-    <binding name="displayName" value="message:email-label"/>
-    <binding name="value" value="email"/>
-    <binding name="validators" value="validators:required"/>
-  </component>
-  <component id="password" type="TextField">
-    <binding name="value" value="password"/>
-    <binding name="validators" value="validators:required"/>
-    <binding name="displayName" value="message:password-label"/>
-    <binding name="hidden" value="true"/>
-  </component>
-  <component id="register" type="PageLink">
-    <binding name="page" value="literal:Register"/>
-  </component>
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Login.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Login.properties
deleted file mode 100644
index c4a6d92..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Login.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-email-label=Email Address

-password-label=Password

diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/MyLibrary.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/MyLibrary.page
deleted file mode 100644
index 6b1c3ec..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/MyLibrary.page
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification>
-
-  <property name="currentBook"/>
-  
-  <component id="sortTitle" type="ColumnSorter">
-    <binding name="selected" value="sortColumn"/>
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@TITLE"/>
-    <binding name="descending" value="descending"/>
-    <binding name="listener" value="listener:requery"/>
-  </component>   
-    
-  <component id="sortAuthor" copy-of="sortTitle">
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@AUTHOR"/>
-  </component>
-  
-  <component id="sortPublisher" copy-of="sortTitle">
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@PUBLISHER"/>	
-  </component>
-  
-  <component id="sortBorrower" copy-of="sortTitle">
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@HOLDER"/>
-  </component>
-  
-  <component id="holderLink" type="PersonLink">
-    <binding name="id" value="currentBook.holderId"/>
-    <binding name="name" value="currentBook.holderName"/>
-    <binding name="omit" value="! currentBook.borrowed"/>
-  </component>
-
-  <component id="edit" type="DirectLink">
-    <binding name="listener" value="listener:editBook"/>
-    <binding name="parameters" value="currentBook.id"/>
-  </component>
-
-  <component id="editRollover" type="Rollover">
-    <binding name="image" value="asset:edit"/>
-    <binding name="mouseOver" value="asset:edit_h"/>	
-  </component>
-
-  <component id="delete" type="DirectLink">
-    <binding name="listener" value="listeners.deleteBook"/>
-    <binding name="parameters" value="currentBook.id"/>
-  </component>
-  
-  <component id="deleteRollover" type="Rollover">
-    <binding name="image" value="asset:delete"/>
-    <binding name="mouseOver" value="asset:delete_h"/>	
-  </component>
-  
-  <asset name="edit" path="images/edit.png"/>
-  <asset name="edit_h" path="images/edit_h.png"/>
-  <asset name="delete" path="images/delete.png"/>
-  <asset name="delete_h" path="images/delete_h.png"/>
- 
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/MyLibrary.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/MyLibrary.properties
deleted file mode 100644
index e57a508..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/MyLibrary.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-returned-book=Returned book ''{0}''
-unable-to-return-book=Unable to return book: {0}
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/NewBook.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/NewBook.page
deleted file mode 100644
index 49fe47a..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/NewBook.page
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification>
-     
-  <component id="form" type="Form">
-    <binding name="listener" value="listener:addBook"/>
-    <binding name="clientValidationEnabled" value="true"/>
-  </component>    
-  
-  <component id="title" type="TextField">
-    <binding name="value" value="attributes.title"/>
-    <binding name="displayName" value="message:title-label"/>
-    <binding name="validators" value="validators:required"/>
-  </component>
-  
-  <component id="author" type="TextField">
-    <binding name="value" value="attributes.author"/>
-    <binding name="validators" value="validators:required"/>
-    <binding name="displayName" value="message:author-title"/>
-  </component>
-
-  
-  <component id="publisherName" type="TextField">
-    <binding name="value" value="publisherName"/>
-    <binding name="displayName" value="message:publisher-label"/>
-  </component>
-    
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/NewBook.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/NewBook.properties
deleted file mode 100644
index 65dcfea..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/NewBook.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-need-publisher-name=You must provide a publisher name if the publisher option is left empty.
-leave-publisher-name-empty=You may not enter a publisher name if you select a publisher from the list.
-added-book=Added ''{0}''.
-
-title-label=Title
-author-title=Author
-publisher-label=Publisher
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/PersonLink.html b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/PersonLink.html
deleted file mode 100644
index 77cb128..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/PersonLink.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<span jwcid="$content$">
-
-    <span jwcid="@If" condition="ognl:omit">
-        &nbsp;
-    </span>
-    
-<span jwcid="@Else">
-<a jwcid="link"><span jwcid="@Insert" value="ognl:name">Joe User</span></a>
-</span>
-
-
-
-</span>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/PersonLink.jwc b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/PersonLink.jwc
deleted file mode 100644
index dd5798a..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/PersonLink.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<component-specification allow-body="no" allow-informal-parameters="no">
-  <parameter name="name" required="yes"/>
-  <parameter name="id" required="yes" property="personId"/>
-  <parameter name="omit"/>
-  <component id="link" type="ExternalLink">
-    <binding name="page" value="literal:ViewPerson"/>
-    <binding name="parameters" value="personId"/>
-  </component>
-</component-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Publisher.script b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Publisher.script
deleted file mode 100644
index 2aa8753..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Publisher.script
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-
-<script>
-<!-- 
-
-input symbols:
-
-  select: The PropertySelection component
-  field: The matching TextField component
-  
-Both are assumed to be in the same form.
-
--->
-
-<input-symbol key="select" class="org.apache.tapestry.form.PropertySelection" required="yes"/>
-<input-symbol key="field" class="org.apache.tapestry.form.IFormComponent" required="yes"/>
-
-<let key="formObject">
-	document.${select.form.name}
-</let>
-
-<let key="selectObject">
-	${formObject}.${select.name}
-</let>
-
-<let key="fieldObject">
-	${formObject}.${field.name}
-</let>
-
-<let key="functionName" unique="yes">
-	onChange_${select.name}
-</let>
-
-<body>
-
-function ${functionName}()
-{
-  var select = ${selectObject};
-  var field = ${fieldObject};
-	
-	// Index 0 is the null value option, meaning enable the text field
-	
-  if (select.selectedIndex == 0)
-  {
-    field.disabled = false;
-    field.focus();
-    field.select();
-  }
-  else
-  {
-	// disabled only works with IE, not NN
-    field.disabled = true;
-    field.blur();
-    field.value = "";
-  }
-}
-
-</body>
-
-<initialization>
-<!-- Navigator is not documented to respond to the onChange event, but this works,
-	 so my documentation must be wrong. -->
-	 
-${selectObject}.onchange = ${functionName};
-
-<!-- Disable the text field unless the select is set for index 0 (the null value). -->
-
-if (${selectObject}.selectedIndex != 0)
-  ${fieldObject}.disabled = true;
-
-</initialization>
-
-</script>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Question.html b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Question.html
deleted file mode 100644
index edf2f7b..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Question.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<span jwcid="$content$">
-
-<div class="message">
-	<table>
-		<tr> <td>
-    <img src="images/question-icon.png" width="50" height="50" alt="Question" border="0" vspace="10"/>
-    	</td>
-	<td>
-    <span class="message">
-    	<span jwcid="@RenderBody">The Question</span>
-    </span>
-</td>
-</tr>
-</table>
-
-</div>
-
-
-</span>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Question.jwc b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Question.jwc
deleted file mode 100644
index 737f1d1..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Question.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification 
-	allow-body="yes" 
-	allow-informal-parameters="no">
-  
-</component-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Register.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Register.page
deleted file mode 100644
index f2849e4..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Register.page
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification>
-
-  <component id="form" type="Form">
-    <binding name="delegate" value="validationDelegate"/>
-    <binding name="listener" value="listener:attemptRegister"/>
-    <binding name="clientValidationEnabled" value="true"/>
-  </component>
-  
-  <component id="lastName" type="TextField">
-    <binding name="value" value="lastName"/>
-    <binding name="displayName" value="message:last-name-label"/>
-    <binding name="validators" value="validators:required"/>
-  </component>
-  
-  <component id="email" type="TextField">
-    <binding name="value" value="email"/>
-    <binding name="validators" value="validators:required"/>
-    <binding name="displayName" value="message:email-label"/>
-  </component>
-  
-  <component id="password1" type="TextField">
-    <binding name="value" value="password1"/>
-    <binding name="displayName" value="message:password-label"/>
-    <binding name="validators" value="validators:required"/>
-    <binding name="hidden" value="true"/>
-  </component>
-  
-  <component id="password2" type="TextField">
-    <binding name="value" value="password2"/>
-    <binding name="displayName" value="message:password2-label"/>
-    <binding name="validators" value="validators:required"/>
-    <binding name="hidden" value="true"/>
-  </component>  
-
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Register.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Register.properties
deleted file mode 100644
index dc025a5..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/Register.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-password-must-match=Enter the same password in both fields.
-last-name-label=Last Name
-email-label=E-Mail
-password-label=Password
-password2-label=Password (again)
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowError.html b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowError.html
deleted file mode 100644
index 47911d6..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowError.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<span jwcid="$content$">
-	<span jwcid="@If" condition="ognl:page.error" volatile="true">
-		<div class="error">
-			<table>
-				<tr>
-					<td>
-						<img src="/vlib/images/error-icon.png" width="50" height="50" alt="Error" border="0" vspace="10"
-							align="absmiddle"/>
-					</td>
-					<td>
-						<span class="error" jwcid="@Insert" value="ognl:page.error">Error Message</span>
-					</td>
-				</tr>
-			</table>
-		</div>
-	</span>
-</span>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowError.jwc b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowError.jwc
deleted file mode 100644
index 4d1ec07..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowError.jwc
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification allow-informal-parameters="no" allow-body="no"/>
-
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowMessage.html b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowMessage.html
deleted file mode 100644
index 355ea35..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowMessage.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<span jwcid="$content$">
-
-<span jwcid="@If" condition="ognl:page.message" volatile="true">
-
-<span jwcid="@Information">
-    <span class="message" jwcid="@Insert" value="ognl:page.message">Info Message</span>
-</span>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowMessage.jwc b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowMessage.jwc
deleted file mode 100644
index 3b58ac0..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowMessage.jwc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification allow-informal-parameters="no" allow-body="no"/>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowValidationError.html b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowValidationError.html
deleted file mode 100644
index 7360cd8..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowValidationError.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<span jwcid="$content$">
-	<span jwcid="@If" condition="ognl:delegate.hasErrors" volatile="true">
-		<div class="error">
-			<table>
-				<tr>
-					<td>
-						<img src="/vlib/images/error-icon.png" width="50" height="50"
-							alt="Error" border="0" vspace="10"/>
-					</td>
-					<td>
-						<span class="error">
-						<span jwcid="@Delegator"
-							delegate="ognl:delegate.firstError">Error Message</span>
-						</span>
-					</td>
-				</tr>
-			</table>
-		</div>
-	</span>
-</span>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowValidationError.jwc b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowValidationError.jwc
deleted file mode 100644
index b81b29b..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ShowValidationError.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification allow-informal-parameters="false" allow-body="false">
-
-  <parameter name="delegate" default-value="page.validationDelegate"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ViewBook.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ViewBook.page
deleted file mode 100644
index fb7b395..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ViewBook.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<page-specification>
-  <component id="ownerLink" type="PersonLink">
-    <binding name="id" value="book.ownerId"/>
-    <binding name="name" value="book.ownerName"/>
-  </component>
-  <component id="holderLink" type="PersonLink">
-    <binding name="id" value="book.holderId"/>
-    <binding name="name" value="book.holderName"/>
-  </component>
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ViewPerson.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ViewPerson.page
deleted file mode 100644
index 059f530..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/ViewPerson.page
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<page-specification>
-  <property name="currentMatch"/>
-  <component id="sortTitle" type="ColumnSorter">
-    <binding name="selected" value="sortColumn"/>
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@TITLE"/>
-    <binding name="descending" value="descending"/>
-    <binding name="listener" value="listeners.requery"/>
-  </component>
-  <component id="sortAuthor" copy-of="sortTitle">
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@AUTHOR"/>
-  </component>
-  <component id="sortPublisher" copy-of="sortTitle">
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@PUBLISHER"/>
-  </component>
-  <component id="sortBorrower" copy-of="sortTitle">
-    <binding name="sortColumn" value="@org.apache.tapestry.vlib.ejb.SortColumn@HOLDER"/>
-  </component>
-  <component id="holderLink" type="PersonLink">
-    <binding name="id" value="currentMatch.holderId"/>
-    <binding name="name" value="currentMatch.holderName"/>
-    <binding name="omit" value="! currentMatch.borrowed"/>
-  </component>
-  <component id="mailLink" type="Any">
-    <binding name="href"> "mailto:" + person.email </binding>
-  </component>
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditPublishers.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditPublishers.page
deleted file mode 100644
index 87b62ab..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditPublishers.page
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification>
- 
-  <component id="form" type="Form">
-    <binding name="success" value="listener:processForm"/>
-    <binding name="clientValidationEnabled" value="true"/>
-    <binding name="delegate" value="validationDelegate"/>
-  </component>
- 
-  <component id="loop" type="For">
-  	<binding name="source" value="converter.values"/>
-  	<binding name="value" value="publisher"/>
-  	<binding name="element" value="literal:tr"/>
-    <binding name="converter" value="converter"/>
-  </component>
-  
-  <component id="name" type="TextField">
-    <binding name="value" value="publisher.name"/>
-    <binding name="validators" value="validators:required"/>
-    <binding name="displayName" value="message:publisher-name-label"/>
-  </component>
-  
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditPublishers.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditPublishers.properties
deleted file mode 100644
index 1e346ab..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditPublishers.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-out-of-date=The data submitted in the form is out of date.  Please try again.
-read-failure=Unable to read the list of publishers.
-update-failure=Unable to update publishers.
-publisher-name-label=Publisher Name
-publishers-updated=Updated publishers.
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditUsers.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditUsers.page
deleted file mode 100644
index fd5167e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditUsers.page
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<page-specification>
-  
-  <component id="form" type="Form">
-    <binding name="success" value="listener:updateUsers"/>
-    <binding name="delegate" value="validationDelegate"/>
-    <binding name="clientValidationEnabled" value="true"/>
-  </component>
-    
-  <component id="loop" type="For">
-  	<binding name="source" value="userConverter.values"/>
-  	<binding name="value" value="user"/>
-  	<binding name="converter" value="userConverter"/>
-  	<binding name="element" value="literal:tr"/>
-  </component>
-  
-  <component id="password" type="TextField">
-    <binding name="value" value="password"/>
-    <binding name="displayName" value="message:new-password-label"/>	
-  </component>
-
-</page-specification>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditUsers.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditUsers.properties
deleted file mode 100644
index 806dd8f..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/EditUsers.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-users-updated=Users updated.
-update-failure=Unable to update users.
-read-failure=Unable to read users.
-out-of-date=The data submitted in the form is out of date.  Please try again.
-need-password=You must enter the new password for users who are having their password changed.
-new-password-label=New Password
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksSelect.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksSelect.page
deleted file mode 100644
index d9c8483..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksSelect.page
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification>
-
-  <component id="form" type="Form">
-    <binding name="success" value="listener:formSubmit"/>
-    <binding name="clientValidationEnabled" value="true"/>
-  </component>
-  
-  <component id="from" type="PropertySelection">
-    <binding name="value" value="fromUserId"/>
-    <binding name="model" value="modelSource.personModel"/>
-    <binding name="displayName" value="message:from-label"/>
-    <binding name="validators" value="validators:required"/>
-  </component>
-  
-  
-  <component id="to" type="PropertySelection">
-    <binding name="value" value="toUserId"/>
-    <binding name="model" value="modelSource.personModel"/>
-    <binding name="displayName" value="message:to-label"/>
-    <binding name="validators" value="validators:required"/>
-  </component>  
-  
-</page-specification>
-
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksSelect.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksSelect.properties
deleted file mode 100644
index 05adb68..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksSelect.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-select-different-users=Select two different users.
-from-label=From User
-to-label=To User
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksTransfer.page b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksTransfer.page
deleted file mode 100644
index 2f78744..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksTransfer.page
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification>
-
-  <component id="form" type="Form">
-    <binding name="success" value="listener:formSubmit"/>
-    <binding name="clientValidationEnabled" value="true"/>
-    <binding name="delegate" value="validationDelegate"/>
-  </component>
-
-  <component id="selectBooks" type="contrib:Palette">
-    <binding name="model" value="userBookModel"/>
-    <binding name="sort" value="@org.apache.tapestry.contrib.palette.SortMode@LABEL"/>
-    <binding name="selected" value="selectedBooks"/>
-    <binding name="selectedTitleBlock" value="component:selectedTitle"/>
-    <binding name="availableTitleBlock" value="component:availableTitle"/>
-    <binding name="displayName" value="message:select-label"/>
-    <binding name="validators" value="validators:required"/>
-  </component>
-  
-</page-specification>
-
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksTransfer.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksTransfer.properties
deleted file mode 100644
index 0b37965..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/admin/TransferBooksTransfer.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-user-has-no-books=User {0} owns no books to transfer.
-no-books-selected=You must select at least one book to transfer.
-transfered-books=Transfered {0} books from {1} to {2}.
-select-label=Books
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/hivemodule.xml b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/hivemodule.xml
deleted file mode 100644
index f2e57ed..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/hivemodule.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<module id="vlib" version="4.0.0" package="org.apache.tapestry.vlib.services">

-    

-    <contribution configuration-id="tapestry.url.ServiceEncoders">

-        <direct-service-encoder id="direct" stateless-extension="direct" stateful-extension="sdirect"/>

-        <page-service-encoder id="page" extension="page" service="page"/>

-        <encoder id="viewbook" before="external" object="instance:ViewPageEncoder,pageName=ViewBook,url=/book"/>

-        <encoder id="viewperson" before="external" object="instance:ViewPageEncoder,pageName=ViewPerson,url=/person"/>

-        <page-service-encoder id="external" extension="external" service="external"/>    

-        <asset-encoder id="asset" path="/assets"/>

-        <extension-encoder id="ext" extension="svc" after="*"/>

-    </contribution>

-     

-    <service-point id="Operations" interface="org.apache.tapestry.vlib.ejb.IOperations">

-        

-        EJB for the majority of operations needed by the presentation tier.

-        
-        <invoke-factory service-id="hivemind.lib.EJBProxyFactory">
-            <construct home-interface="org.apache.tapestry.vlib.ejb.IOperationsHome" 

-                jndi-name="vlib/Operations"/> 
-        </invoke-factory>
-    </service-point>

-    

-    <service-point id="RemoteTemplate">
-        Used to process and recover from remote exceptions while

-        executing a block of code.

-        

-        <invoke-factory>
-            <construct class="RemoteTemplateImpl">
-                <set-object property="coordinator" value="service:hivemind.lib.RemoteExceptionCoordinator"/>

-                <set-object property="operations" value="service:Operations"/>            

-            </construct>
-        </invoke-factory>

-    </service-point>

-    

-    <service-point id="ErrorPresenter">
-        

-        Activates the Home or MyLibrary page to report an error.

-

-        <invoke-factory>
-            <construct class="ErrorPresenterImpl">
-                <set-object property="stateManager" value="infrastructure:applicationStateManager"/>
-            </construct>
-        </invoke-factory>        

-        <create-instance class="ErrorPresenterImpl"/>

-        
-    </service-point>

-    

-    <service-point id="BookQuerySource">
-        

-        Handles JNDI lookup and retry logic for obtaining

-        an IBookQuery EJB.

-        

-        <invoke-factory>
-            <construct class="BookQuerySourceImpl">
-                <set-object property="nameLookup" value="service:hivemind.lib.NameLookup"/>

-                <set-object property="remoteTemplate" value="service:RemoteTemplate"/>

-                <event-listener service-id="hivemind.lib.RemoteExceptionCoordinator"/>
-            </construct>
-        </invoke-factory>

-                
-    </service-point>

-    

-    <service-point id="ModelSource">
-        

-        Source for common property selection models.

-        

-        <invoke-factory model="threaded">
-            <construct class="ModelSourceImpl">
-                <set-object property="operations" value="service:Operations"/>

-                <set-object property="remoteTemplate" value="service:RemoteTemplate"/>

-                <set-object property="coordinator" value="service:hivemind.lib.RemoteExceptionCoordinator"/>
-            </construct>
-        </invoke-factory>

-        
-    </service-point>

-    

-    <service-point id="ApplicationLifecycle">
-        

-        Controls lifecycle operations; specifically logging out.

-        

-        <invoke-factory model="threaded">
-            <construct class="ApplicationLifecycleImpl">
-                <set-object property="stateManager" value="infrastructure:applicationStateManager"/>
-            </construct>
-        </invoke-factory>        
-    </service-point>

-    

-    <service-point id="DiscardSessionFilter" interface="org.apache.tapestry.services.WebRequestServicerFilter">
-        

-        Filter used to optionally discard the session at the end of a request (typically after a logout).

-        

-        <invoke-factory>
-            <construct class="DiscardSessionFilter">
-                <set-object property="applicationLifecycle" value="service:ApplicationLifecycle"/>
-            </construct>
-        </invoke-factory>

-        
-    </service-point>

-    

-    <contribution configuration-id="tapestry.request.WebRequestServicerPipeline">
-        <filter name="discard-session" object="service:DiscardSessionFilter"/>
-    </contribution>

-    

-    <contribution configuration-id="hivemind.ApplicationDefaults">

-        <!-- Talk to the local JBoss JNDI -->

-        <default symbol="java.naming.factory.initial" value="org.jnp.interfaces.NamingContextFactory"/>

-        <default symbol="java.naming.factory.url.pkgs" value="org.jboss.naming:org.jnp.interfaces"/>

-        <default symbol="java.naming.provider.url" value="localhost:1099"/>

-    </contribution>

-    

-    <contribution configuration-id="tapestry.InfrastructureOverrides"> 

-        <property name="exceptionPageName" value="ApplicationUnavailable" />        

-    </contribution>

-    

-    <!-- Override the default implementation with one specific to the Virtual Library -->

-    

-    <implementation service-id="tapestry.error.StaleSessionExceptionPresenter">       

-        <invoke-factory>            

-            <construct class="VlibStaleSessionPresenter" >

-                <set-object property="responseRenderer" value="infrastructure:responseRenderer" />

-            </construct>            

-        </invoke-factory>
-    </implementation>

-     

-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/vlib.application b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/vlib.application
deleted file mode 100644
index 1eeecd7..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/vlib.application
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<application name="Virtual Library">
-   
-  <meta key="org.apache.tapestry.visit-class" value="org.apache.tapestry.vlib.Visit"/>
-  <meta key="org.apache.tapestry.global-class" value="org.apache.tapestry.vlib.Global"/>
-  
-  <meta key="org.apache.tapestry.page-class-packages" value="org.apache.tapestry.vlib.pages"/>
-  <meta key="org.apache.tapestry.component-class-packages" value="org.apache.tapestry.vlib.components"/>
-  
-  <library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
-  	
-</application>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/vlib.properties b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/vlib.properties
deleted file mode 100644
index 31082d9..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/vlib.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-title-label=Title

-author-label=Author

-publisher-label=Publisher

diff --git a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/web.xml b/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/web.xml
deleted file mode 100644
index a162b9e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/WEB-INF/web.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE web-app PUBLIC 
-  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-  "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
-  <display-name>Tapestry Virtual Library Demo</display-name>
-  <!--  distributable/ -->
-  <filter>
-    <filter-name>redirect</filter-name>
-    <filter-class>org.apache.tapestry.RedirectFilter</filter-class>
-  </filter>
-  <filter-mapping>
-    <filter-name>redirect</filter-name>
-    <url-pattern>/</url-pattern>
-  </filter-mapping>
-  <servlet>
-    <servlet-name>vlib</servlet-name>
-    <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>vlib</servlet-name>
-    <url-pattern>/app</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>vlib</servlet-name>
-    <url-pattern>*.page</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>vlib</servlet-name>
-    <url-pattern>*.external</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>vlib</servlet-name>
-    <url-pattern>*.direct</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>vlib</servlet-name>
-    <url-pattern>*.sdirect</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>vlib</servlet-name>
-    <url-pattern>*.svc</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>vlib</servlet-name>
-    <url-pattern>/assets/*</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>vlib</servlet-name>
-    <url-pattern>/book/*</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>vlib</servlet-name>
-    <url-pattern>/person/*</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>15</session-timeout>
-  </session-config>
-</web-app>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/admin/EditPublishers.html b/tapestry/tapestry-examples/Vlib/src/context/admin/EditPublishers.html
deleted file mode 100644
index 8b4232c..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/admin/EditPublishers.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border">
-<span jwcid="@ShowMessage"/>
-<span jwcid="@ShowValidationError" delegate="ognl:validationDelegate"/>
-<form jwcid="form">
-  <p>This page allows you to rename and delete publishers.
-  </p>
-  <table class="data">
-    <tr>
-      <th>Publisher</th>
-      <th>Delete</th>
-    </tr>
-    <tr jwcid="loop">
-      <td class="control"><input jwcid="name" size="40" maxlength="40"/>
-      </td>
-      <td class="checkbox"><input type="checkbox" jwcid="delete@Checkbox" value="ognl:converter.deleted"/>
-      </td>
-    </tr>
-    <tr>
-    <td class="control"><input type="image" src="../images/update.png" width="52" height="20" alt="Update"/>
-    </td>	
-    </tr>
-  </table>
-</form>
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/admin/EditUsers.html b/tapestry/tapestry-examples/Vlib/src/context/admin/EditUsers.html
deleted file mode 100644
index 413ac40..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/admin/EditUsers.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!DOCTYPE html
-[
-  <!ENTITY nbsp ''>
-]>
-<html jwcid="$content$">
-  <body jwcid="border@Border">
-    <p>This page is used to edit the roster of users on the system.</p>
-    <ul>
-      <li>Admin: If checked, the user is an administrator.</li>
-      <li>Locked Out: If checked, the user will not be allowed to login.</li>
-      <li>Change Password: If checked, the a new password will be assigned to the user.</li>
-      <li>Delete: If checked, the user will be irrevocably removed from the Virtual Library database. Any books owned by
-        the user will be transferred to the current user.</li>
-    </ul>
-    <span jwcid="@ShowMessage"/>
-    <span jwcid="@ShowValidationError" delegate="ognl:validationDelegate"/>
-    <form jwcid="form">
-      <table width="100%" class="data">
-        <tr>
-          <th>User / E-Mail </th>
-          <th>Admin </th>
-          <th>Locked&nbsp;Out </th>
-          <th>Change&nbsp;Password </th>
-          <th>Delete </th>
-        </tr>
-        <tr jwcid="loop">
-          <td>
-            <span jwcid="@Insert" value="ognl:user.naturalName">Joe User</span>
-            <br/>
-            <span jwcid="@Insert" value="ognl:user.email">foo@bar.com</span>
-          </td>
-          <td class="checkbox">
-            <input type="checkbox" jwcid="admin@Checkbox" value="ognl:user.admin"/>
-          </td>
-          <td class="checkbox">
-            <input type="checkbox" jwcid="lockedOut@Checkbox" value="ognl:user.lockedOut"/>
-          </td>
-          <td class="checkbox">
-            <input type="checkbox" jwcid="resetPassword@Checkbox" value="ognl:userConverter.resetPassword"/>
-          </td>
-          <td class="checkbox">
-            <input type="checkbox" jwcid="delete@Checkbox" value="ognl:userConverter.deleted"/>
-          </td>
-        </tr>
-      </table>
-      <table class="form">
-        <tr>
-          <th>
-            <span jwcid="@FieldLabel" field="component:password"/>
-          </th>
-          <td>
-            <input type="text" jwcid="password" size="20" maxlength="20"/>
-          </td>
-        </tr>
-        <tr>
-          <td/>
-          <td>
-            <input type="image" src="../images/update.png" width="52" height="20" alt="Update"/>
-          </td>
-        </tr>
-      </table>
-    </form>
-  </body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/admin/TransferBooksSelect.html b/tapestry/tapestry-examples/Vlib/src/context/admin/TransferBooksSelect.html
deleted file mode 100644
index 049da2f..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/admin/TransferBooksSelect.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border">
-	
-<p>This form allows you to transfer ownership of books from one user to another.  It consists of a two-part
-	wizard.</p>
-	
-<p>
-<img src="../images/step1.png" width="47" height="48" align="left" border="0" hspace="4" alt="Step 1"/>
-<span class="directions">
-Select the two users to transfer books between.
-</span>	
-</p>
-	
-<br clear="left"/>
-
-<span jwcid="@ShowMessage"/>
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError"/>
-
-<form jwcid="form">
-  <table class="form">
-    <tr>
-      <th>Move from:
-      </th>
-      <td>
-        <select jwcid="from"/>
-      </td>
-    </tr>
-    <tr>
-      <th>Move to:
-      </th>
-      <td>
-        <select jwcid="to"/>
-      </td>
-    </tr>
-    <tr>
-      <td>
-      </td>
-      <td><input type="image" src="../images/continue.png" alt="Continue" height="20" width="58" border="0"/>
-      </td>
-    </tr>
-  </table>
-</form>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/admin/TransferBooksTransfer.html b/tapestry/tapestry-examples/Vlib/src/context/admin/TransferBooksTransfer.html
deleted file mode 100644
index 7690837..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/admin/TransferBooksTransfer.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<html jwcid="$content$">
-<body jwcid="border@Border">
-	
-<p>This form allows you to transfer ownership of books from one user to another.  It consists of a two-part
-	wizard.</p>
-	
-<p>
-<img src="../images/step2.png" width="47" height="48" align="left" border="0" hspace="4" alt="Step 2"/>
-<span class="directions">
-Select the books to transfer from
-<span jwcid="@Insert" value="ognl:fromUser.naturalName">Suzy Source</span>
-to
-<span jwcid="@Insert" value="ognl:toUser.naturalName">Terry Target</span>.
-</span>	
-</p>
-	
-<br clear="left"/>
-
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError"/>
-    
-<form jwcid="form">
-
-<select jwcid="selectBooks"/>
-
-<span jwcid="availableTitle@Block">
-Books owned by 
-<span jwcid="@Insert" value="ognl:fromUser.naturalName">Suzy Source</span>
-</span>
-
-<span jwcid="selectedTitle@Block">
-Books to transfer to
-<span jwcid="@Insert" value="ognl:toUser.naturalName">Terry Target</span>
-</span>
-
-<br/>
-
-<input type="image" src="../images/transfer.png" width="56" height="20" border="0" alt="Transfer"/>&nbsp;
-<a href="#" jwcid="@PageLink" page="admin/TransferBooksSelect"><img src="../images/cancel.png" height="20" width="51" border="0" alt="Cancel"/></a>
-
-
-</form>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/context/css/vlib.css b/tapestry/tapestry-examples/Vlib/src/context/css/vlib.css
deleted file mode 100644
index c29cf9e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/css/vlib.css
+++ /dev/null
@@ -1,140 +0,0 @@
-BODY, TABLE, TD, P  {
-	font-family : Trebuchet MS, verdana, arial, helvetica, sans-serif;
-}
-
-IMG
-{
-    border: none;
-}
-
-DIV.error  {
-	font-weight : bold;
-	color : Red;
-	border-color : Red;
-	border-style : solid;
-	padding : 4px;
-	width : 500px;
-	text-align : left;
-	border-width : 2px;
-}
-
-SPAN.invalid-field {
-  color: Red;
-}
-
-INPUT.error {
-  color: White;
-  background-color: Red;
-  font-weight: Bold;
-}
-
-DIV.message  {
-	font-weight : bold;
-	color : Blue;
-	border-width : 1;
-	border-color : Blue;
-	border-style : solid;
-	padding : 4px;
-	width : 500px;
-}
-
-SPAN.message  {
-	font-weight : bold;
-	color : Blue;
-}
-
-SPAN.error  {
-	font-weight : bold;
-	color : Red;
-}
-
-SPAN.directions {
-  font-wieght: bold;
-  color: Blue;
-}
-
-TABLE.form TH
-{
-  text-align: right;
-  font-weight: bold;
-  padding-right: 8px;
-}
-
-
-
-
-TABLE.form TD, TABLE.form TH {
-  border-width: 1px;
-  border-color: #c0c0c0;
-  border-style: none; // Change to solid to debug form layout
-}
-
-SPAN.required-field
-{
-  font-weight: bold;
-  color: Blue;
-}
-
-TABLE.data TD {
-  border-width: 1px;
-  border-color: #c0c0c0;
-  border-style: solid;
-}
-
-TABLE.data TD.icon, TABLE.data TD.checkbox
-{
-  text-align: center;
-}
-
-TABLE.data TD.control
-{
-  border-style: none;
-}
-
-TABLE.data TH
-{
-  font-weight: bold;
-  text-align: center;
-  background-color: Blue;
-  color: White;
-}
-
-TABLE.data TH A
-{
-	color: white;
-}
-
-TABLE.data TH A:hover
-{
-  color: #e6ae19;
-}
-
-
-TABLE.tapestry-palette TH
-{
-  color: white;
-  background-color: Blue;
-  text-align: center;
-  width: 200px;
-  font-size: smaller;
-}
-
-TABLE.tapestry-palette SELECT
-{
-  width: 200px;
-}
-
-TABLE.tapestry-palette TD.controls
-{
-   text-align: center;
-   vertical-align: middle;
-   width: 60px;
-}
-
-TD.browser-summary {
-  text-align: center;
-  background-color: blue;
-  color: white;
-  font-size: 14px;
-  font-weight: bold;
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/.cvsignore b/tapestry/tapestry-examples/Vlib/src/context/images/.cvsignore
deleted file mode 100644
index cdf09e9..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.jbf
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/add.png b/tapestry/tapestry-examples/Vlib/src/context/images/add.png
deleted file mode 100644
index fb25f25..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/add.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_1x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_1x1.png
deleted file mode 100644
index da66bb4..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_1x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_2x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_2x1.png
deleted file mode 100644
index c9fd878..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_2x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_2x3.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_2x3.png
deleted file mode 100644
index 9002065..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_2x3.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_3x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_3x1.png
deleted file mode 100644
index 7c89e9d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_3x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x1.png
deleted file mode 100644
index 0f1cd4c..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x2.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x2.png
deleted file mode 100644
index a8bd63d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x2.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x3.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x3.png
deleted file mode 100644
index e978c22..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x3.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x4.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x4.png
deleted file mode 100644
index 3982e5f..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x4.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x5.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x5.png
deleted file mode 100644
index b40b3b3..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x5.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x6.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x6.png
deleted file mode 100644
index 893a071..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x6.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x7.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x7.png
deleted file mode 100644
index 0a60ec7..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_4x7.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_5x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_5x1.png
deleted file mode 100644
index 89a4a6c..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser/browser_5x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x2.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x2.png
deleted file mode 100644
index a9b76d7..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x2.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x3.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x3.png
deleted file mode 100644
index be6fb1a..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x3.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x5.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x5.png
deleted file mode 100644
index 51ce02e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x5.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x6.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x6.png
deleted file mode 100644
index 2d60d26..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_d/browser_4x6.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x2.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x2.png
deleted file mode 100644
index a8bd63d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x2.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x3.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x3.png
deleted file mode 100644
index e978c22..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x3.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x5.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x5.png
deleted file mode 100644
index b40b3b3..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x5.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x6.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x6.png
deleted file mode 100644
index 893a071..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_e/browser_4x6.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x2.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x2.png
deleted file mode 100644
index d7d6c46..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x2.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x3.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x3.png
deleted file mode 100644
index d0f0419..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x3.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x5.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x5.png
deleted file mode 100644
index 44f4da2..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x5.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x6.png b/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x6.png
deleted file mode 100644
index f84e67e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/browser_h/browser_4x6.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/cancel.png b/tapestry/tapestry-examples/Vlib/src/context/images/cancel.png
deleted file mode 100644
index bbbc5bd..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/cancel.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/checkout.png b/tapestry/tapestry-examples/Vlib/src/context/images/checkout.png
deleted file mode 100644
index 0027fc5..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/checkout.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/checkout_h.png b/tapestry/tapestry-examples/Vlib/src/context/images/checkout_h.png
deleted file mode 100644
index 5373e9e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/checkout_h.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/continue.png b/tapestry/tapestry-examples/Vlib/src/context/images/continue.png
deleted file mode 100644
index a6be497..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/continue.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/delete-cancel.png b/tapestry/tapestry-examples/Vlib/src/context/images/delete-cancel.png
deleted file mode 100644
index ee75313..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/delete-cancel.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/delete-cancel_h.png b/tapestry/tapestry-examples/Vlib/src/context/images/delete-cancel_h.png
deleted file mode 100644
index 703ef2f..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/delete-cancel_h.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/delete-confirm.png b/tapestry/tapestry-examples/Vlib/src/context/images/delete-confirm.png
deleted file mode 100644
index 5d39c49..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/delete-confirm.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/delete-confirm_h.png b/tapestry/tapestry-examples/Vlib/src/context/images/delete-confirm_h.png
deleted file mode 100644
index ed620e0..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/delete-confirm_h.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/delete.png b/tapestry/tapestry-examples/Vlib/src/context/images/delete.png
deleted file mode 100644
index 3403220..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/delete.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/delete_h.png b/tapestry/tapestry-examples/Vlib/src/context/images/delete_h.png
deleted file mode 100644
index 9a1e22d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/delete_h.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/edit.png b/tapestry/tapestry-examples/Vlib/src/context/images/edit.png
deleted file mode 100644
index fedd0cf..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/edit.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/edit_h.png b/tapestry/tapestry-examples/Vlib/src/context/images/edit_h.png
deleted file mode 100644
index a3ff752..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/edit_h.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/error-icon.png b/tapestry/tapestry-examples/Vlib/src/context/images/error-icon.png
deleted file mode 100644
index 401ea31..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/error-icon.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/info-icon.png b/tapestry/tapestry-examples/Vlib/src/context/images/info-icon.png
deleted file mode 100644
index 8751ac9..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/info-icon.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/login.png b/tapestry/tapestry-examples/Vlib/src/context/images/login.png
deleted file mode 100644
index f8d88d1..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/login.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_10x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_10x1.png
deleted file mode 100644
index 40ec645..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_10x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_10x1_login.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_10x1_login.png
deleted file mode 100644
index 02ed162..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_10x1_login.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_1x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_1x1.png
deleted file mode 100644
index f4ddca1..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_1x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_2x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_2x1.png
deleted file mode 100644
index 27d2c83..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_2x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_3x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_3x1.png
deleted file mode 100644
index 2f79926..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_3x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_4x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_4x1.png
deleted file mode 100644
index 1539952..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_4x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_5x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_5x1.png
deleted file mode 100644
index f30b093..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_5x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_5x1_editprofile.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_5x1_editprofile.png
deleted file mode 100644
index 85ba4d7..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_5x1_editprofile.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_7x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_7x1.png
deleted file mode 100644
index 9e7d568..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_7x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_8x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_8x1.png
deleted file mode 100644
index ea021a6..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_8x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_9x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_9x1.png
deleted file mode 100644
index 21cdbc7..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-h/nav_9x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_10x1_login.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_10x1_login.png
deleted file mode 100644
index 4cf5138..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_10x1_login.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_1x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_1x1.png
deleted file mode 100644
index c618b38..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_1x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_2x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_2x1.png
deleted file mode 100644
index 9fe4b0e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_2x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_3x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_3x1.png
deleted file mode 100644
index 510c8ce..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_3x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_4x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_4x1.png
deleted file mode 100644
index 67e931b..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_4x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_5x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_5x1.png
deleted file mode 100644
index bc700ed..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_5x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_5x1_editprofile.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_5x1_editprofile.png
deleted file mode 100644
index 0f19fb6..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_5x1_editprofile.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_7x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_7x1.png
deleted file mode 100644
index 5a6c9fe..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_7x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_8x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_8x1.png
deleted file mode 100644
index 2babeac..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_8x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_9x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_9x1.png
deleted file mode 100644
index 90a3d07..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected-h/nav_9x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_10x1_login.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_10x1_login.png
deleted file mode 100644
index d9ac5a3..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_10x1_login.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_1x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_1x1.png
deleted file mode 100644
index b9e4b22..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_1x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_2x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_2x1.png
deleted file mode 100644
index d363f31..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_2x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_3x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_3x1.png
deleted file mode 100644
index 23eb04d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_3x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_4x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_4x1.png
deleted file mode 100644
index 6336d82..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_4x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_5x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_5x1.png
deleted file mode 100644
index f6c47b4..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_5x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_5x1_editprofile.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_5x1_editprofile.png
deleted file mode 100644
index e6f813d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_5x1_editprofile.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_7x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_7x1.png
deleted file mode 100644
index dec930f..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_7x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_8x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_8x1.png
deleted file mode 100644
index c03a1c9..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_8x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_9x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_9x1.png
deleted file mode 100644
index 32e3fc4..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav-selected/nav_9x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_10x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_10x1.png
deleted file mode 100644
index be65286..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_10x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_10x1_login.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_10x1_login.png
deleted file mode 100644
index 0da9d26..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_10x1_login.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_1x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_1x1.png
deleted file mode 100644
index 0efc990..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_1x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_2x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_2x1.png
deleted file mode 100644
index aa15f24..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_2x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_3x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_3x1.png
deleted file mode 100644
index a3b9cb2..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_3x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_4x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_4x1.png
deleted file mode 100644
index 3028a91..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_4x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_5x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_5x1.png
deleted file mode 100644
index 6dacb81..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_5x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_5x1_editprofile.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_5x1_editprofile.png
deleted file mode 100644
index eae5154..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_5x1_editprofile.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_6x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_6x1.png
deleted file mode 100644
index a17c24d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_6x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_7x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_7x1.png
deleted file mode 100644
index b674783..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_7x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_8x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_8x1.png
deleted file mode 100644
index 89288e3..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_8x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_9x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_9x1.png
deleted file mode 100644
index 041a71b..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/nav/nav_9x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/new.png b/tapestry/tapestry-examples/Vlib/src/context/images/new.png
deleted file mode 100644
index 04e0f4d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/new.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/question-icon.png b/tapestry/tapestry-examples/Vlib/src/context/images/question-icon.png
deleted file mode 100644
index 47f8994..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/question-icon.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/register.png b/tapestry/tapestry-examples/Vlib/src/context/images/register.png
deleted file mode 100644
index f125c15..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/register.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/return.png b/tapestry/tapestry-examples/Vlib/src/context/images/return.png
deleted file mode 100644
index b39a19e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/return.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/return_h.png b/tapestry/tapestry-examples/Vlib/src/context/images/return_h.png
deleted file mode 100644
index 7aace19..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/return_h.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/search.png b/tapestry/tapestry-examples/Vlib/src/context/images/search.png
deleted file mode 100644
index 7017290..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/search.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/sort-down.png b/tapestry/tapestry-examples/Vlib/src/context/images/sort-down.png
deleted file mode 100644
index 24edefd..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/sort-down.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/sort-down_h.png b/tapestry/tapestry-examples/Vlib/src/context/images/sort-down_h.png
deleted file mode 100644
index 961d109..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/sort-down_h.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/sort-up.png b/tapestry/tapestry-examples/Vlib/src/context/images/sort-up.png
deleted file mode 100644
index 202b8a8..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/sort-up.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/sort-up_h.png b/tapestry/tapestry-examples/Vlib/src/context/images/sort-up_h.png
deleted file mode 100644
index 81e25ba..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/sort-up_h.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/spacer.png b/tapestry/tapestry-examples/Vlib/src/context/images/spacer.png
deleted file mode 100644
index b58f8a1..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/spacer.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/step1.png b/tapestry/tapestry-examples/Vlib/src/context/images/step1.png
deleted file mode 100644
index c51cae7..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/step1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/step2.png b/tapestry/tapestry-examples/Vlib/src/context/images/step2.png
deleted file mode 100644
index 749b394..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/step2.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/AddNewBook.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/AddNewBook.png
deleted file mode 100644
index 76fcf4d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/AddNewBook.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/BookMatches.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/BookMatches.png
deleted file mode 100644
index 08bdbb3..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/BookMatches.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/BorrowedBooks.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/BorrowedBooks.png
deleted file mode 100644
index 4207dd3..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/BorrowedBooks.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/DeleteBook.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/DeleteBook.png
deleted file mode 100644
index 102f4fa..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/DeleteBook.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/EditBook.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/EditBook.png
deleted file mode 100644
index c06c1c0..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/EditBook.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/EditProfile.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/EditProfile.png
deleted file mode 100644
index 3f345af..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/EditProfile.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/EditPublishers.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/EditPublishers.png
deleted file mode 100644
index 57e6d3e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/EditPublishers.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/EditUsers.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/EditUsers.png
deleted file mode 100644
index 1d0bc17..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/EditUsers.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/GiveAwayBooks.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/GiveAwayBooks.png
deleted file mode 100644
index 1ec2494..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/GiveAwayBooks.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/Login.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/Login.png
deleted file mode 100644
index f68460b..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/Login.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/MyLibrary.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/MyLibrary.png
deleted file mode 100644
index 751ad45..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/MyLibrary.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/Register.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/Register.png
deleted file mode 100644
index 1d82def..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/Register.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/Search.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/Search.png
deleted file mode 100644
index d8a1957..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/Search.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/TransferBooks.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/TransferBooks.png
deleted file mode 100644
index 70df52f..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/TransferBooks.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/ViewBook.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/ViewBook.png
deleted file mode 100644
index 7c3ea31..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/ViewBook.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/ViewPerson.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/ViewPerson.png
deleted file mode 100644
index af943f4..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/ViewPerson.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/blank.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/blank.png
deleted file mode 100644
index 6199e23..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/blank.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/title_1x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/title_1x1.png
deleted file mode 100644
index 885b929..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/title_1x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/title_2x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/title_2x1.png
deleted file mode 100644
index c5b4637..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/title_2x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/title_2x3.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/title_2x3.png
deleted file mode 100644
index e97e51d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/title_2x3.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/title/title_3x1.png b/tapestry/tapestry-examples/Vlib/src/context/images/title/title_3x1.png
deleted file mode 100644
index 0285430..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/title/title_3x1.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/transfer.png b/tapestry/tapestry-examples/Vlib/src/context/images/transfer.png
deleted file mode 100644
index 8d777d4..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/transfer.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/context/images/update.png b/tapestry/tapestry-examples/Vlib/src/context/images/update.png
deleted file mode 100644
index 5153e10..0000000
--- a/tapestry/tapestry-examples/Vlib/src/context/images/update.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Vlib/src/ear-conf/META-INF/application.xml b/tapestry/tapestry-examples/Vlib/src/ear-conf/META-INF/application.xml
deleted file mode 100644
index 5aa2267..0000000
--- a/tapestry/tapestry-examples/Vlib/src/ear-conf/META-INF/application.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Sun Microsystems, Inc.//DTD J2EE Application 1.2//EN" 
-  "http://java.sun.com/j2ee/dtds/application_1_2.dtd">
-<application>
-	<display-name>Virtual Library Application</display-name>
-	<module>
-		<ejb>vlibbeans.jar</ejb>
-	</module>
-	<module>
-		<web>
-			<web-uri>vlib.war</web-uri>
-			<context-root>/vlib</context-root>
-		</web>
-	</module>
-</application>
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/ActivateCallback.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/ActivateCallback.java
deleted file mode 100644
index fc67b80..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/ActivateCallback.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.callback.ICallback;
-
-/**
- * Callback implementation for pages which implement the {@link org.apache.tapestry.vlib.IActivate}
- * interface.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class ActivateCallback implements ICallback
-{
-    private static final long serialVersionUID = 931074851273839081L;
-    
-    private String _pageName;
-
-    public ActivateCallback(IActivate page)
-    {
-        this(page.getPageName());
-    }
-
-    public ActivateCallback(String pageName)
-    {
-        _pageName = pageName;
-    }
-
-    public void performCallback(IRequestCycle cycle)
-    {
-        IActivate page = (IActivate) cycle.getPage(_pageName);
-
-        page.validate(cycle);
-        page.activate();
-    }
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/ActivatePage.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/ActivatePage.java
deleted file mode 100644
index 43d4567..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/ActivatePage.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageValidateListener;
-import org.apache.tapestry.vlib.pages.Login;
-
-/**
- * Subclass of {@link org.apache.tapestry.vlib.VlibPage} that implements
- * {@link org.apache.tapestry.vlib.IActivate}. Overrides {@link #pageValidate(PageEvent)}. All
- * subclasses are assumed to require non-anonymous access (regardless of the anonymous-access meta
- * data property).
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class ActivatePage extends VlibPage implements IActivate, PageValidateListener
-{
-    public void pageValidate(PageEvent event)
-    {
-        if (isUserLoggedIn())
-            return;
-
-        Login login = getLogin();
-
-        login.setCallback(new ActivateCallback(this));
-
-        throw new PageRedirectException(login);
-    }
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/EntitySelectionModel.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/EntitySelectionModel.java
deleted file mode 100644
index 19f102a..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/EntitySelectionModel.java
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- * This class is used as a property selection model to select a primary key. We
- * assume that the primary keys are integers, which makes it easy to translate
- * between the various representations.
- *
- * @author Howard Lewis Ship
- */
-
-public class EntitySelectionModel implements IPropertySelectionModel {
-
-    /**
-     * @author hls
-     */
-    private static class Entry {
-
-        Integer primaryKey;
-
-        String label;
-
-        Entry(Integer pkey, String lbl)
-        {
-            this.primaryKey = pkey;
-            this.label = lbl;
-        }
-
-    }
-
-    private static final int LIST_SIZE = 20;
-
-    private List entries = new ArrayList(LIST_SIZE);
-
-    public void add(Integer key, String label)
-    {
-        Entry entry;
-
-        entry = new Entry(key, label);
-        entries.add(entry);
-    }
-
-    public int getOptionCount()
-    {
-        return entries.size();
-    }
-
-    private Entry get(int index)
-    {
-        return (Entry) entries.get(index);
-    }
-
-    public Object getOption(int index)
-    {
-        return get(index).primaryKey;
-    }
-
-    public String getLabel(int index)
-    {
-        return get(index).label;
-    }
-
-    public boolean isDisabled(int index)
-    {
-        return false;
-    }
-
-    public String getValue(int index)
-    {
-        Integer primaryKey;
-
-        primaryKey = get(index).primaryKey;
-
-        if (primaryKey == null) return "";
-
-        return primaryKey.toString();
-    }
-
-    public Object translateValue(String value)
-    {
-        if (value.equals("")) return null;
-
-        try {
-            return new Integer(value);
-        }
-        catch (NumberFormatException e) {
-            throw new ApplicationRuntimeException("Could not convert '" + value
-                                                  + "' to an Integer.", e);
-        }
-    }
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java
deleted file mode 100644
index 242c8f2..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib;

-

-/**

- * Allows the application to access the debug flag.

- * 

- * @author Howard M. Lewis Ship

- */

-public class Global

-{

-    private static final boolean DEBUG_ENABLED = Boolean

-            .getBoolean("org.apache.tapestry.vlib.debug-enabled");

-

-    public boolean isDebugEnabled()

-    {

-        return DEBUG_ENABLED;

-    }

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/IActivate.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/IActivate.java
deleted file mode 100644
index 85aee6a..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/IActivate.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.IPage;
-
-/**
- * Interface used for pages that may be activated by the Border component.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public interface IActivate extends IPage
-{
-    void activate();
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/IErrorProperty.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/IErrorProperty.java
deleted file mode 100644
index cf6d05c..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/IErrorProperty.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.IPage;
-
-/**
- * Marks pages that have an error property (of type String).
- * 
- * @see VirtualLibraryDelegate
- * @author Howard Lewis Ship
- */
-
-public interface IErrorProperty extends IPage
-{
-
-    String getError();
-
-    void setError(String value);
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/IMessageProperty.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/IMessageProperty.java
deleted file mode 100644
index c414b23..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/IMessageProperty.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.IPage;
-
-/**
- * String message property, for many pages that can display an informational message.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public interface IMessageProperty extends IPage
-{
-    String getMessage();
-
-    void setMessage(String message);
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/OperationsUser.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/OperationsUser.java
deleted file mode 100644
index c8ed7e5..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/OperationsUser.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib;

-

-import org.apache.tapestry.annotations.InjectObject;

-import org.apache.tapestry.vlib.ejb.IOperations;

-import org.apache.tapestry.vlib.services.BookQuerySource;

-import org.apache.tapestry.vlib.services.ErrorPresenter;

-import org.apache.tapestry.vlib.services.RemoteTemplate;

-

-/**

- * Interface for pages and components that need to use the

- * {@link org.apache.tapestry.vlib.ejb.IOperations} EJB. Acts as a mixin, using annotations to

- * inject supporting properties into the page or component.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public interface OperationsUser

-{

-    @InjectObject("service:vlib.Operations")

-    IOperations getOperations();

-

-    @InjectObject("service:vlib.RemoteTemplate")

-    RemoteTemplate getRemoteTemplate();

-

-    @InjectObject("service:vlib.ErrorPresenter")

-    ErrorPresenter getErrorPresenter();

-

-    @InjectObject("service:vlib.BookQuerySource")

-    BookQuerySource getBookQuerySource();

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/VirtualLibraryDelegate.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/VirtualLibraryDelegate.java
deleted file mode 100644
index 16b0796..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/VirtualLibraryDelegate.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.valid.IValidator;
-import org.apache.tapestry.valid.ValidationDelegate;
-
-/**
- * Implementation of {@link org.apache.tapestry.valid.IValidationDelegate} which
- * uses the correct CSS class when rendering errors.
- * 
- * @author Howard Lewis Ship
- */
-
-public class VirtualLibraryDelegate extends ValidationDelegate
-{
-
-    private static final long serialVersionUID = -1295233610266112824L;
-
-    public void writeLabelPrefix(IFormComponent component,
-            IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (isInError(component))
-        {
-            writer.begin("span");
-            writer.attribute("class", "invalid-field");
-        }
-    }
-
-    public void writeLabelSuffix(IFormComponent component,
-            IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (isInError(component)) writer.end();
-    }
-
-    public void writeAttributes(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator)
-    {
-        if (isInError()) writer.attribute("class", "error");
-    }
-
-    public void writeSuffix(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator)
-    {
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/Visit.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/Visit.java
deleted file mode 100644
index 1e9a5df..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/Visit.java
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import java.io.Serializable;
-import java.sql.Timestamp;
-
-import org.apache.tapestry.vlib.ejb.Person;
-
-/**
- * The visit object for the {@link VirtualLibraryEngine}. Primarily, this is
- * used to access the home interfaces and EJB instances, and to identify who the
- * logged in user is.
- * 
- * @author Howard Lewis Ship
- */
-
-public class Visit implements Serializable
-{
-
-    private static final long serialVersionUID = 8589862098677603655L;
-
-    /**
-     * Used to identify the logged in user.
-     */
-
-    private Person _user;
-
-    /**
-     * Returns the time the user last accessed the database, which may be null
-     * if the user hasn't logged in yet.
-     */
-
-    public Timestamp getLastAccess()
-    {
-        return _user == null ? null : _user.getLastAccess();
-    }
-
-    /**
-     * Gets the logged-in user, or null if the user is not logged in.
-     */
-
-    public Person getUser()
-    {
-        return _user;
-    }
-
-    /**
-     * Returns the id of the logged in user, or null if the user is not logged
-     * in.
-     */
-
-    public Integer getUserId()
-    {
-        return _user == null ? null : _user.getId();
-    }
-
-    /**
-     * Changes the logged in user. This is only invoked from the
-     * {@link org.apache.tapestry.vlib.pages.Login} page.
-     */
-
-    public void setUser(Person user)
-    {
-        _user = user;
-    }
-
-    /**
-     * Returns true if the user is logged in.
-     */
-
-    public boolean isUserLoggedIn()
-    {
-        return _user != null;
-    }
-
-    /**
-     * Returns true if the user has not been identified (has not logged in).
-     */
-
-    public boolean isUserLoggedOut()
-    {
-        return _user == null;
-    }
-
-    public boolean isLoggedInUser(Integer id)
-    {
-        if (_user == null) return false;
-
-        return _user.getId().equals(id);
-    }
-
-    /**
-     * Invoked by pages after they perform an operation that changes the backend
-     * database in such a way that cached data is no longer valid.
-     */
-
-    public void clearCache()
-    {
-        _user = null;
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/VlibPage.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/VlibPage.java
deleted file mode 100644
index e71a58d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/VlibPage.java
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib;

-

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.PageRedirectException;

-import org.apache.tapestry.annotations.Bean;

-import org.apache.tapestry.annotations.InjectMeta;

-import org.apache.tapestry.annotations.InjectObject;

-import org.apache.tapestry.annotations.InjectPage;

-import org.apache.tapestry.annotations.InjectState;

-import org.apache.tapestry.annotations.InjectStateFlag;

-import org.apache.tapestry.annotations.Meta;

-import org.apache.tapestry.callback.PageCallback;

-import org.apache.tapestry.event.PageEvent;

-import org.apache.tapestry.event.PageValidateListener;

-import org.apache.tapestry.form.IFormComponent;

-import org.apache.tapestry.html.BasePage;

-import org.apache.tapestry.valid.IValidationDelegate;

-import org.apache.tapestry.vlib.pages.Login;

-import org.apache.tapestry.vlib.services.ModelSource;

-

-/**

- * Base page used for pages that should be protected by the {@link Login} page.

- * If the user is not logged in, they are redirected to the Login page first.

- * Also, implements an error property and a validationDelegate.

- * <p>

- * Meta properties (overridden in some subclasses)

- * <dl>

- * <dt>anonymous-access=false</dt>

- * <dd>If true, the page may be accessed without the user being logged in.</dd>

- * <dt>admin-page=false</dt>

- * <dd>If true, the user must be logged in as an administrator to access this

- * page.</dd>

- * </dl>

- * 

- * @author Howard Lewis Ship

- */

-

-@Meta( { "anonymous-access=false", "admin-page=false" })

-public abstract class VlibPage extends BasePage implements IErrorProperty,

-        IMessageProperty, PageValidateListener, OperationsUser

-{

-

-    @Bean(VirtualLibraryDelegate.class)

-    public abstract IValidationDelegate getValidationDelegate();

-

-    @InjectState("visit")

-    public abstract Visit getVisitState();

-

-    @InjectStateFlag("visit")

-    public abstract boolean getVisitStateExists();

-

-    @InjectPage("Login")

-    public abstract Login getLogin();

-

-    @InjectMeta("anonymous-access")

-    public abstract boolean getAllowAnonymousAccess();

-

-    @InjectMeta("admin-page")

-    public abstract boolean isAdminPage();

-

-    @InjectObject("service:vlib.ModelSource")

-    public abstract ModelSource getModelSource();

-

-    protected void setErrorField(String componentId, String message)

-    {

-        IFormComponent component = (IFormComponent) getComponent(componentId);

-

-        IValidationDelegate delegate = getValidationDelegate();

-

-        delegate.setFormComponent(component);

-        delegate.record(message, null);

-    }

-

-    /**

-     * Returns true if the delegate indicates an error, or the error property is

-     * not null.

-     */

-

-    protected boolean isInError()

-    {

-        return getError() != null || getValidationDelegate().getHasErrors();

-    }

-

-    /**

-     * Checks if the user is logged in. If not, they are sent to the

-     * {@link Login} page before coming back to whatever this page is.

-     */

-

-    public void pageValidate(PageEvent event)

-    {

-        if (isAdminPage()) ensureUserIsLoggedInAsAdmin();

-

-        if (!getAllowAnonymousAccess()) ensureUserIsLoggedIn();

-    }

-

-    private void ensureUserIsLoggedIn()

-    {

-        if (isUserLoggedIn()) return;

-

-        // User not logged in ... redirect through the Login page.

-

-        Login login = getLogin();

-

-        login.setCallback(new PageCallback(this));

-

-        throw new PageRedirectException(login);

-    }

-

-    /**

-     * Returns true if the {@link Visit} exists, and the user is logged in as

-     * well.

-     * 

-     * @return true if logged in

-     */

-    protected final boolean isUserLoggedIn()

-    {

-        return getVisitStateExists() && getVisitState().isUserLoggedIn();

-    }

-

-    protected void ensureUserIsLoggedInAsAdmin()

-    {

-        if (!isUserLoggedIn())

-        {

-            Login login = getLogin();

-

-            login.setCallback(new PageCallback(this));

-

-            throw new PageRedirectException(login);

-        }

-

-        IRequestCycle cycle = getRequestCycle();

-

-        if (!getVisitState().getUser().isAdmin())

-        {

-            getErrorPresenter().presentError(

-                    "That function is restricted to administrators.", cycle);

-

-            throw new PageRedirectException(cycle.getPage());

-        }

-    }

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/BookLink.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/BookLink.java
deleted file mode 100644
index a3fb31a..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/BookLink.java
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.components;
-
-import java.sql.Timestamp;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.annotations.InjectState;
-import org.apache.tapestry.annotations.InjectStateFlag;
-import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.ejb.Book;
-
-/**
- * Creates a link to the {@link org.apache.tapestry.vlib.pages.ViewBook} page using the external
- * service. <table border=1>
- * <tr>
- * <th>Parameter</th>
- * <th>Type</th>
- * <th>Direction</th>
- * <th>Required</th>
- * <th>Default</th>
- * <th>Description</th>
- * </tr>
- * <tr>
- * <td>book</td>
- * <td>{@link Book}</td>
- * <td>in</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>The {@link Book} to create a link to.</td>
- * </tr>
- * </table>
- * <p>
- * Informal parameters are allowed.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class BookLink extends BaseComponent
-{
-    /**
-     * One week, in milliseconds (1/1000 second). Books that have been added in the last week are
-     * marked new, until the user logs in, at which point, its books added since the user last
-     * logged in.
-     */
-
-    private static final long ONE_WEEK_MILLIS = 1000L * 60L * 60L * 24L * 7L;
-
-    @Parameter(required = true)
-    public abstract Book getBook();
-
-    @InjectState("visit")
-    public abstract Visit getVisitState();
-
-    @InjectStateFlag("visit")
-    public abstract boolean getVisitExists();
-
-    public boolean isNewlyAdded()
-    {
-        Timestamp lastAccess = null;
-
-        if (getVisitExists())
-            lastAccess = getVisitState().getLastAccess();
-
-        Book book = getBook();
-
-        Timestamp dateAdded = book.getDateAdded();
-
-        // Some old records may not contain a value for dateAdded
-
-        if (dateAdded == null)
-            return false;
-
-        // If don't know the last access time (because the user
-        // hasn't logged in yet), then show anything newer
-        // than a week.
-
-        if (lastAccess == null)
-        {
-            long now = System.currentTimeMillis();
-
-            return (now - dateAdded.getTime()) <= ONE_WEEK_MILLIS;
-        }
-
-        // Return true if lastAccess is earlier than date added.
-
-        return lastAccess.compareTo(dateAdded) <= 0;
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/Border.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/Border.java
deleted file mode 100644
index df43a8b..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/Border.java
+++ /dev/null
@@ -1,374 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.components;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.annotations.InjectObject;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.InjectState;
-import org.apache.tapestry.annotations.InjectStateFlag;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.callback.ICallback;
-import org.apache.tapestry.callback.PageCallback;
-import org.apache.tapestry.vlib.Global;
-import org.apache.tapestry.vlib.IActivate;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.pages.Home;
-import org.apache.tapestry.vlib.pages.Login;
-import org.apache.tapestry.vlib.services.ApplicationLifecycle;
-
-/**
- * The standard Border component, which provides the title of the page, the link to
- * {@link org.apache.tapestry.vlib.pages.MyLibrary}, the
- * {@link org.apache.tapestry.vlib.pages.Login} page and the Logout page.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Border extends BaseComponent
-{
-    public static final String WINDOW_TITLE = "Tapestry Virtual Library";
-
-    // Determined by finishLoad(), static threafter.
-
-    private String _pageType;
-
-    private IAsset _titleImage;
-
-    private IAsset _searchImage;
-
-    private IAsset _searchRolloverImage;
-
-    private IAsset _myLibraryImage;
-
-    private IAsset _myLibraryRolloverImage;
-
-    private IAsset _borrowedBooksImage;
-
-    private IAsset _borrowedBooksRolloverImage;
-
-    private IAsset _loginImage;
-
-    private IAsset _loginRolloverImage;
-
-    private IAsset _newBookImage;
-
-    private IAsset _newBookRolloverImage;
-
-    private IAsset _editProfileImage;
-
-    private IAsset _editProfileRolloverImage;
-
-    private IAsset _giveAwayImage;
-
-    private IAsset _giveAwayRolloverImage;
-
-    private IAsset _editUsersImage;
-
-    private IAsset _editUsersRolloverImage;
-
-    private IAsset _editPublishersImage;
-
-    private IAsset _editPublishersRolloverImage;
-
-    private IAsset _transferBooksImage;
-
-    private IAsset _transferBooksRolloverImage;
-
-    @Parameter
-    public abstract String getSubtitle();
-
-    @Parameter
-    public abstract Browser getBrowser();
-
-    @InjectState("visit")
-    public abstract Visit getVisit();
-
-    @InjectStateFlag("visit")
-    public abstract boolean getVisitExists();
-
-    @InjectPage("Login")
-    public abstract Login getLogin();
-
-    @InjectPage("Home")
-    public abstract Home getHome();
-
-    @InjectState("global")
-    public abstract Global getGlobal();
-
-    @InjectObject("service:vlib.ApplicationLifecycle")
-    public abstract ApplicationLifecycle getApplicationLifecycle();
-
-    @Message
-    public abstract String goodbye();
-
-    public void finishLoad()
-    {
-        IPage page = getPage();
-
-        String pageName = page.getPageName();
-
-        _pageType = page.getSpecification().getProperty("page-type");
-
-        if (_pageType == null)
-            _pageType = pageName;
-
-        _titleImage = getAsset("title_" + pageName);
-
-        if (_titleImage == null)
-            _titleImage = getAsset("title_" + _pageType);
-
-        if (_titleImage == null)
-            throw new ApplicationRuntimeException("Cannot find title image for " + pageName
-                    + " or " + _pageType + ".", this, null, null);
-
-        // Based on the type, select the images to use on this instance of Border
-        // in this particular page.
-
-        _searchImage = selectImage("Search", "search");
-        _searchRolloverImage = selectImage("Search", "search_h");
-
-        _myLibraryImage = selectImage("MyLibrary", "mylibrary");
-        _myLibraryRolloverImage = selectImage("MyLibrary", "mylibrary_h");
-
-        _borrowedBooksImage = selectImage("BorrowedBooks", "borrowedbooks");
-        _borrowedBooksRolloverImage = selectImage("BorrowedBooks", "borrowedbooks_h");
-
-        _newBookImage = selectImage("NewBook", "newbook");
-        _newBookRolloverImage = selectImage("NewBook", "newbook_h");
-
-        _editProfileImage = selectImage("EditProfile", "editprofile");
-        _editProfileRolloverImage = selectImage("EditProfile", "editprofile_h");
-
-        _giveAwayImage = selectImage("GiveAwayBooks", "giveaway");
-        _giveAwayRolloverImage = selectImage("GiveAwayBooks", "giveaway_h");
-
-        _editUsersImage = selectImage("EditUsers", "editusers");
-        _editUsersRolloverImage = selectImage("EditUsers", "editusers_h");
-
-        _editPublishersImage = selectImage("EditPublishers", "editpublishers");
-        _editPublishersRolloverImage = selectImage("EditPublishers", "editpublishers_h");
-
-        _transferBooksImage = selectImage("TransferBooks", "transferbooks");
-        _transferBooksRolloverImage = selectImage("TransferBooks", "transferbooks_h");
-
-        _loginImage = selectImage("Login", "login");
-        _loginRolloverImage = selectImage("Login", "login_h");
-    }
-
-    private IAsset selectImage(String type, String baseName)
-    {
-        String key = _pageType.equals(type) ? baseName + "_s" : baseName;
-
-        return getAsset(key);
-    }
-
-    public String getWindowTitle()
-    {
-        String subtitle = getSubtitle();
-
-        if (subtitle == null)
-            return WINDOW_TITLE;
-
-        return WINDOW_TITLE + ": " + subtitle;
-    }
-
-    public boolean isLoggedIn()
-    {
-        return getVisitExists() && getVisit().isUserLoggedIn();
-    }
-
-    public boolean isAdmin()
-    {
-        return isLoggedIn() && getVisit().getUser().isAdmin();
-    }
-
-    public void editProfile()
-    {
-        activate("EditProfile");
-    }
-
-    public void viewBorrowedBooks()
-    {
-        activate("BorrowedBooks");
-    }
-
-    public void viewMyLibrary()
-    {
-        activate("MyLibrary");
-    }
-
-    private void activate(String pageName)
-    {
-        IRequestCycle cycle = getPage().getRequestCycle();
-
-        IActivate page = (IActivate) cycle.getPage(pageName);
-
-        page.validate(cycle);
-
-        page.activate();
-    }
-
-    public IPage login()
-    {
-        if (isLoggedIn())
-            return null;
-
-        ICallback callback = new PageCallback(getPage().getPageName());
-
-        Login login = getLogin();
-
-        login.setCallback(callback);
-
-        return login;
-    }
-
-    public IPage logout()
-    {
-        getApplicationLifecycle().logout();
-
-        Home home = getHome();
-        home.setMessage(goodbye());
-
-        return home;
-    }
-
-    public void selectBrowserPage(int page)
-    {
-        Browser browser = getBrowser();
-
-        if (browser == null)
-            throw Tapestry.createRequiredParameterException(this, "browser");
-
-        browser.jump(page);
-    }
-
-    public IAsset getBorrowedBooksImage()
-    {
-        return _borrowedBooksImage;
-    }
-
-    public IAsset getBorrowedBooksRolloverImage()
-    {
-        return _borrowedBooksRolloverImage;
-    }
-
-    public IAsset getTitleImage()
-    {
-        return _titleImage;
-    }
-
-    public IAsset getSearchImage()
-    {
-        return _searchImage;
-    }
-
-    public IAsset getSearchRolloverImage()
-    {
-        return _searchRolloverImage;
-    }
-
-    public IAsset getMyLibraryImage()
-    {
-        return _myLibraryImage;
-    }
-
-    public IAsset getMyLibraryRolloverImage()
-    {
-        return _myLibraryRolloverImage;
-    }
-
-    public IAsset getLoginImage()
-    {
-        return _loginImage;
-    }
-
-    public IAsset getLoginRolloverImage()
-    {
-        return _loginRolloverImage;
-    }
-
-    public String getPageType()
-    {
-        return _pageType;
-    }
-
-    public IAsset getNewBookImage()
-    {
-        return _newBookImage;
-    }
-
-    public IAsset getNewBookRolloverImage()
-    {
-        return _newBookRolloverImage;
-    }
-
-    public IAsset getEditProfileImage()
-    {
-        return _editProfileImage;
-    }
-
-    public IAsset getEditProfileRolloverImage()
-    {
-        return _editProfileRolloverImage;
-    }
-
-    public IAsset getGiveAwayImage()
-    {
-        return _giveAwayImage;
-    }
-
-    public IAsset getGiveAwayRolloverImage()
-    {
-        return _giveAwayRolloverImage;
-    }
-
-    public IAsset getEditPublishersImage()
-    {
-        return _editPublishersImage;
-    }
-
-    public IAsset getEditPublishersRolloverImage()
-    {
-        return _editPublishersRolloverImage;
-    }
-
-    public IAsset getEditUsersImage()
-    {
-        return _editUsersImage;
-    }
-
-    public IAsset getEditUsersRolloverImage()
-    {
-        return _editUsersRolloverImage;
-    }
-
-    public IAsset getTransferBooksImage()
-    {
-        return _transferBooksImage;
-    }
-
-    public IAsset getTransferBooksRolloverImage()
-    {
-        return _transferBooksRolloverImage;
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/Borrow.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/Borrow.java
deleted file mode 100644
index d588bc4..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/Borrow.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.components;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.FinderException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.InjectState;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.vlib.OperationsUser;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.BorrowException;
-import org.apache.tapestry.vlib.pages.Home;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Implements the Borrow link that appears on many pages. <table border=1>
- * <tr>
- * <th>Parameter</th>
- * <th>Type</th>
- * <th>Read / Write </th>
- * <th>Required</th>
- * <th>Default</th>
- * <th>Description</th>
- * </tr>
- * <tr>
- * <td>book</td>
- * <td>{@link Book}</td>
- * <td>R</td>
- * <td>yes</td>
- * <td>&nbsp;</td>
- * <td>The book to create a link to. </td>
- * </tr>
- * </table>
- * <p>
- * Informal parameters are not allowed. A body is not allowed.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Borrow extends BaseComponent implements OperationsUser
-{
-    @Parameter(required = true)
-    public abstract Book getBook();
-
-    @InjectState("visit")
-    public abstract Visit getVisit();
-
-    @InjectPage("Home")
-    public abstract Home getHome();
-
-    @Message
-    public abstract String borrowedBook(String title);
-
-    public boolean isLinkDisabled()
-    {
-        Visit visit = getVisit();
-
-        if (!visit.isUserLoggedIn())
-            return true;
-
-        // If the user is logged in, they can borrow it if they are
-        // not already holding it and aren't the owner.
-
-        Book book = getBook();
-
-        // If the book is not lendable, then disable the link.
-
-        if (!book.isLendable())
-            return true;
-
-        // Otherwise, disabled the link if already holding it.
-
-        return visit.isLoggedInUser(book.getHolderId());
-    }
-
-    public IPage borrow(final IRequestCycle cycle, final Integer bookId)
-    {
-        final Visit visit = getVisit();
-
-        RemoteCallback<Book> callback = new RemoteCallback()
-        {
-            public Book doRemote() throws RemoteException
-            {
-                try
-                {
-                    return getOperations().borrowBook(bookId, visit.getUserId());
-                }
-                catch (BorrowException ex)
-                {
-                    getErrorPresenter().presentError(ex.getMessage(), cycle);
-
-                    return null;
-                }
-                catch (FinderException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-            }
-        };
-
-        Book book = getRemoteTemplate().execute(callback, "Error borrowing book.");
-
-        if (book == null)
-            return null;
-
-        Home home = getHome();
-
-        home.setMessage(borrowedBook(book.getTitle()));
-
-        return home;
-    }
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/Browser.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/Browser.java
deleted file mode 100644
index add3acf..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/Browser.java
+++ /dev/null
@@ -1,233 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.components;
-
-import java.rmi.RemoteException;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.annotations.ComponentClass;
-import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.vlib.OperationsUser;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Implements a paging browser for the results of a {@link IBookQuery}. Renders its body multiple
- * times, once for each book provided by the query.
- * 
- * @author Howard Lewis Ship
- */
-@ComponentClass(allowInformalParameters = true, allowBody = true)
-public abstract class Browser extends AbstractComponent implements PageBeginRenderListener,
-        OperationsUser
-{
-    /**
-     * Default for the page size; the number of results viewed on each page.
-     */
-
-    public static final int DEFAULT_PAGE_SIZE = 15;
-
-    /**
-     * The maximum number of items to display on a page.
-     */
-
-    private int _pageSize = DEFAULT_PAGE_SIZE;
-
-    @Parameter(required = true)
-    public abstract IBookQuery getQuery();
-
-    @Persist
-    public abstract int getResultCount();
-
-    public abstract void setResultCount(int resultCount);
-
-    @Persist
-    public abstract int getCurrentPage();
-
-    public abstract void setCurrentPage(int currentPage);
-
-    public abstract void setElement(String element);
-
-    @Parameter
-    public abstract String getElement();
-
-    @Parameter(required = true)
-    public abstract void setValue(Object value);
-
-    @Parameter(required = true)
-    public abstract IActionListener getListener();
-
-    @Persist
-    public abstract Object[] getPageResults();
-
-    public abstract void setPageResults(Object[] pageResults);
-
-    /**
-     * Invoked by the container when the query (otherwise accessed via the query parameter) changes.
-     * Re-caches the number of results and sets the current page back to 1.
-     */
-
-    public void initializeForResultCount(int resultCount)
-    {
-        setResultCount(resultCount);
-        setCurrentPage(1);
-        setPageCount(computePageCount());
-    }
-
-    @Persist
-    public abstract int getPageCount();
-
-    public abstract void setPageCount(int pageCount);
-
-    private int computePageCount()
-    {
-        // For 0 ... pageSize elements, its just one page.
-
-        int resultCount = getResultCount();
-
-        if (resultCount <= _pageSize)
-            return 1;
-
-        // We need the number of results divided by the results per page.
-
-        int result = resultCount / _pageSize;
-
-        // If there's any left-over, then we need an additional page.
-
-        if (resultCount % _pageSize > 0)
-            result++;
-
-        return result;
-    }
-
-    /**
-     * Invoked to change the displayed page number.
-     * 
-     * @param page
-     *            page to display, numbered from one. The currentPage property will be updated. The
-     *            value is constrained to fit in the valid range of pages for the component.
-     */
-
-    public void jump(int page)
-    {
-        if (page < 2)
-        {
-            setCurrentPage(1);
-            return;
-        }
-
-        int pageCount = getPageCount();
-        if (page > getPageCount())
-        {
-            setCurrentPage(pageCount);
-            return;
-        }
-
-        setCurrentPage(page);
-    }
-
-    public boolean getDisableBack()
-    {
-        return getCurrentPage() <= 1;
-    }
-
-    public boolean getDisableNext()
-    {
-        return getCurrentPage() >= getPageCount();
-    }
-
-    public String getRange()
-    {
-        int currentPage = getCurrentPage();
-        int resultCount = getResultCount();
-
-        int low = (currentPage - 1) * _pageSize + 1;
-        int high = Math.min(currentPage * _pageSize, resultCount);
-
-        return low + " - " + high;
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object[] books = getPageResults();
-        int count = Tapestry.size(books);
-        String element = getElement();
-
-        for (int i = 0; i < count; i++)
-        {
-            setValue(books[i]);
-
-            if (element != null)
-            {
-                writer.begin(element);
-                renderInformalParameters(writer, cycle);
-            }
-
-            renderBody(writer, cycle);
-
-            if (element != null)
-                writer.end();
-        }
-    }
-
-    protected void finishLoad()
-    {
-        setElement("tr");
-    }
-
-    public void pageBeginRender(final PageEvent event)
-    {
-        int resultCount = getResultCount();
-        int currentPage = getCurrentPage();
-
-        final int low = (currentPage - 1) * _pageSize;
-        final int high = Math.min(currentPage * _pageSize, resultCount) - 1;
-
-        if (low > high)
-            return;
-
-        RemoteCallback<Book[]> callback = new RemoteCallback()
-        {
-            public Book[] doRemote() throws RemoteException
-            {
-                try
-                {
-                    return getQuery().get(low, high - low + 1);
-                }
-                catch (RemoteException ex)
-                {
-                    getListener().actionTriggered(Browser.this, event.getRequestCycle());
-
-                    throw ex;
-                }
-            }
-        };
-
-        Book[] pageResults = getRemoteTemplate().execute(
-                callback,
-                "Error retrieving query results.");
-
-        setPageResults(pageResults);
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/ColumnSorter.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/ColumnSorter.java
deleted file mode 100644
index 48e3919..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/ColumnSorter.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.vlib.ejb.SortColumn;
-
-/**
- * Comopnent for allowing a column to be sorted.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class ColumnSorter extends BaseComponent
-{
-    @Parameter(required = true)
-    public abstract SortColumn getSortColumn();
-
-    @Parameter(required = true)
-    public abstract SortColumn getSelected();
-
-    public abstract void setSelected(SortColumn selected);
-
-    @Parameter(required = true)
-    public abstract boolean isDescending();
-
-    public abstract void setDescending(boolean descending);
-
-    @Parameter(required = true)
-    public abstract IActionListener getListener();
-
-    public void handleClick(IRequestCycle cycle)
-    {
-        SortColumn selected = getSelected();
-        SortColumn sortColumn = getSortColumn();
-
-        if (selected != sortColumn)
-        {
-            setSelected(sortColumn);
-            setDescending(false);
-        }
-        else
-        {
-            boolean current = isDescending();
-            setDescending(!current);
-        }
-
-        IActionListener listener = getListener();
-        if (listener == null)
-            throw Tapestry.createRequiredParameterException(this, "listener");
-
-        listener.actionTriggered(this, cycle);
-    }
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/package.html b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/package.html
deleted file mode 100644
index 5c51ab2..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/components/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Model
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/package.html b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/package.html
deleted file mode 100644
index 9ecb858..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Utility
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ApplicationUnavailable.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ApplicationUnavailable.java
deleted file mode 100644
index 770cbb7..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ApplicationUnavailable.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import org.apache.tapestry.pages.Exception;
-import org.apache.tapestry.vlib.IErrorProperty;
-
-/**
- * A customized exception page; in non-debug mode, it omits displays the main exception display.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public abstract class ApplicationUnavailable extends Exception implements IErrorProperty
-{
-    @Override
-    public void setException(Throwable value)
-    {
-        super.setException(value);
-
-        String message = value.getMessage();
-
-        if (message == null)
-            message = value.getClass().getName();
-
-        setError(message);
-    }
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java
deleted file mode 100644
index abb02df..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.InjectComponent;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.vlib.OperationsUser;
-import org.apache.tapestry.vlib.components.Browser;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.MasterQueryParameters;
-import org.apache.tapestry.vlib.ejb.SortColumn;
-import org.apache.tapestry.vlib.ejb.SortOrdering;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Runs queries and displays matches.
- * 
- * @author Howard Lewis Ship
- */
-
-@Meta("page-type=Search")
-public abstract class BookMatches extends BasePage implements OperationsUser
-{
-    @InjectComponent("browser")
-    public abstract Browser getBrowser();
-
-    @Persist
-    public abstract IBookQuery getBookQuery();
-
-    public abstract void setBookQuery(IBookQuery bookQuery);
-
-    @Persist
-    public abstract SortColumn getSortColumn();
-
-    public abstract void setSortColumn(SortColumn column);
-
-    @Persist
-    public abstract boolean isDescending();
-
-    @Persist
-    public abstract MasterQueryParameters getQueryParameters();
-
-    public abstract void setQueryParameters(MasterQueryParameters queryParameters);
-
-    @Message
-    public abstract String noMatches();
-
-    public void finishLoad()
-    {
-        setSortColumn(SortColumn.TITLE);
-    }
-
-    @InjectPage("Home")
-    public abstract Home getHome();
-
-    /**
-     * Invoked by the {@link Home} page to perform a query.
-     */
-
-    public void performQuery(MasterQueryParameters parameters)
-    {
-        setQueryParameters(parameters);
-
-        int count = executeQuery();
-
-        if (count == 0)
-        {
-            Home page = getHome();
-            page.setMessage(noMatches());
-            return;
-        }
-
-        getBrowser().initializeForResultCount(count);
-        getRequestCycle().activate(this);
-    }
-
-    public void requery(IRequestCycle cycle)
-    {
-        int count = executeQuery();
-
-        Browser browser = getBrowser();
-
-        if (count != browser.getResultCount())
-            browser.initializeForResultCount(count);
-    }
-
-    private int executeQuery()
-    {
-        final MasterQueryParameters parameters = getQueryParameters();
-
-        final SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
-
-        RemoteCallback<Integer> callback = new RemoteCallback()
-        {
-            public Integer doRemote() throws RemoteException
-            {
-                IBookQuery query = getBookQuery();
-
-                if (query == null)
-                {
-                    query = getBookQuerySource().newQuery();
-                    setBookQuery(query);
-                }
-
-                try
-                {
-                    return query.masterQuery(parameters, ordering);
-                }
-                catch (RemoteException ex)
-                {
-                    setBookQuery(null);
-                    throw ex;
-                }
-            }
-        };
-
-        return getRemoteTemplate().execute(callback, "Error processing query.");
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BorrowedBooks.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BorrowedBooks.java
deleted file mode 100644
index 45d2b2e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BorrowedBooks.java
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.FinderException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.InjectComponent;
-import org.apache.tapestry.annotations.InjectState;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.vlib.ActivatePage;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.components.Browser;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.SortColumn;
-import org.apache.tapestry.vlib.ejb.SortOrdering;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Shows a list of books the user has borrowed.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class BorrowedBooks extends ActivatePage
-{
-    @InjectComponent("browser")
-    public abstract Browser getBrowser();
-
-    @Persist
-    public abstract IBookQuery getBorrowedQuery();
-
-    public abstract void setBorrowedQuery(IBookQuery value);
-
-    @Persist
-    public abstract SortColumn getSortColumn();
-
-    public abstract void setSortColumn(SortColumn column);
-
-    @Persist
-    public abstract boolean isDescending();
-
-    @Message
-    public abstract String returnedBook(String title);
-
-    @Message
-    public abstract String unableToReturnBook(String message);
-
-    @InjectState("visit")
-    public abstract Visit getVisitState();
-
-    public void finishLoad()
-    {
-        setSortColumn(SortColumn.TITLE);
-    }
-
-    public void activate()
-    {
-        runQuery();
-
-        getRequestCycle().activate(this);
-    }
-
-    /**
-     * Invoked as listener method after the sortColumn or descending properties are changed.
-     * 
-     * @param cycle
-     * @since 3.0
-     */
-
-    public void requery(IRequestCycle cycle)
-    {
-        runQuery();
-    }
-
-    private void runQuery()
-    {
-        Visit visit = getVisitState();
-        final Integer userPK = visit.getUserId();
-        final SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
-
-        RemoteCallback<Integer> callback = new RemoteCallback()
-        {
-            public Integer doRemote() throws RemoteException
-            {
-                IBookQuery query = getBorrowedQuery();
-
-                if (query == null)
-                {
-                    query = getBookQuerySource().newQuery();
-                    setBorrowedQuery(query);
-                }
-
-                try
-                {
-                    return query.borrowerQuery(userPK, ordering);
-                }
-                catch (RemoteException ex)
-                {
-                    setBorrowedQuery(null);
-                    throw ex;
-                }
-            }
-        };
-
-        int count = getRemoteTemplate().execute(
-                callback,
-                "Remote exception finding borrowed books.");
-
-        Browser browser = getBrowser();
-
-        if (count != browser.getResultCount())
-            browser.initializeForResultCount(count);
-    }
-
-    /**
-     * Listener used to return a book.
-     */
-
-    public void returnBook(Integer bookPK)
-    {
-        try
-        {
-            Book book = getOperations().returnBook(bookPK);
-
-            setMessage(returnedBook(book.getTitle()));
-
-            runQuery();
-        }
-        catch (FinderException ex)
-        {
-            setError(unableToReturnBook(ex.getMessage()));
-            return;
-        }
-        catch (RemoteException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ConfirmBookDelete.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ConfirmBookDelete.java
deleted file mode 100644
index 2fcd8bc..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ConfirmBookDelete.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.RemoveException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.vlib.OperationsUser;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Presents a confirmation page before deleting a book. If the user selects "yes", the book is
- * deleted; otherwise the user is returned to the {@link MyLibrary} page.
- * 
- * @author Howard Lewis Ship
- */
-
-@Meta("page-type=MyLibrary")
-public abstract class ConfirmBookDelete extends BasePage implements OperationsUser
-{
-    public abstract void setBookId(Integer bookId);
-
-    public abstract void setBookTitle(String title);
-
-    @InjectPage("MyLibrary")
-    public abstract MyLibrary getMyLibrary();
-
-    @Message
-    public abstract String bookDeleted(String title);
-
-    /**
-     * Invoked (by {@link MyLibrary}) to select a book to be deleted. This method sets the
-     * temporary page properties (bookPrimaryKey and bookTitle) and invoked
-     * {@link IRequestCycle#setPage(IPage)}.
-     */
-
-    public void selectBook(Integer bookId)
-    {
-        setBookId(bookId);
-
-        Book book = getRemoteTemplate().getBook(bookId);
-
-        setBookTitle(book.getTitle());
-
-        getRequestCycle().activate(this);
-    }
-
-    /**
-     * Hooked up to the yes component, this actually deletes the book.
-     */
-
-    public void deleteBook(final Integer bookId)
-    {
-        RemoteCallback<Book> callback = new RemoteCallback()
-        {
-            public Book doRemote() throws RemoteException
-            {
-                try
-                {
-                    return getOperations().deleteBook(bookId);
-                }
-                catch (RemoveException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-            }
-        };
-
-        Book book = getRemoteTemplate().execute(callback, "Error deleting book #" + bookId + ".");
-
-        MyLibrary myLibrary = getMyLibrary();
-
-        myLibrary.setMessage(bookDeleted(book.getTitle()));
-
-        myLibrary.activate();
-    }
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/EditBook.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/EditBook.java
deleted file mode 100644
index f77f959..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/EditBook.java
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.FinderException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.vlib.VlibPage;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Edits the properties of at book.
- * 
- * @author Howard Lewis Ship
- */
-
-@Meta("page-type=MyLibrary")
-public abstract class EditBook extends VlibPage implements
-        PageBeginRenderListener
-{
-
-    public abstract Map getAttributes();
-
-    public abstract void setAttributes(Map attributes);
-
-    public abstract String getPublisherName();
-
-    @Persist("client")
-    public abstract Integer getBookId();
-
-    public abstract void setBookId(Integer bookId);
-
-    /**
-     * Invoked (from {@link MyLibrary}) to begin editting a book. Gets the
-     * attributes from the {@link org.apache.tapestry.vlib.ejb.IBook} and
-     * updates the request cycle to render this page,
-     */
-
-    public void beginEdit(final Integer bookId)
-    {
-        setBookId(bookId);
-
-        RemoteCallback<Map> callback = new RemoteCallback()
-        {
-
-            public Map doRemote()
-                throws RemoteException
-            {
-                try
-                {
-                    return getOperations().getBookAttributes(bookId);
-
-                }
-                catch (FinderException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-            }
-        };
-
-        Map attributes = getRemoteTemplate().execute(callback,
-                "Error setting up page for book #" + bookId + ".");
-
-        setAttributes(attributes);
-
-        getRequestCycle().activate(this);
-    }
-
-    @Message
-    public abstract String needPublisherName();
-
-    @Message
-    public abstract String leavePublisherNameEmpty();
-
-    @Message
-    public abstract String updatedBook(Object title);
-
-    /**
-     * Used to update the book when the form is submitted.
-     */
-
-    public IPage formSubmit(IRequestCycle cycle)
-    {
-        final Map attributes = getAttributes();
-
-        final Integer publisherId = (Integer) attributes.get("publisherId");
-        final String publisherName = getPublisherName();
-
-        if (publisherId == null && HiveMind.isBlank(publisherName))
-        {
-            setErrorField("inputPublisherName", needPublisherName());
-            return null;
-        }
-
-        if (publisherId != null && HiveMind.isNonBlank(publisherName))
-        {
-            setErrorField("inputPublisherName", leavePublisherNameEmpty());
-            return null;
-        }
-
-        // Check for an error from a validation field
-
-        if (isInError()) return null;
-
-        final Integer bookId = getBookId();
-
-        RemoteCallback callback = new RemoteCallback()
-        {
-
-            public Object doRemote()
-                throws RemoteException
-            {
-
-                try
-                {
-                    IOperations operations = getOperations();
-
-                    if (publisherId != null)
-                        operations.updateBook(bookId, attributes);
-                    else
-                    {
-                        operations
-                                .updateBook(bookId, attributes, publisherName);
-                    }
-
-                    return null;
-                }
-                catch (FinderException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-                catch (CreateException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-
-            }
-
-        };
-
-        getRemoteTemplate().execute(callback,
-                "Error updating book #" + bookId + ".");
-
-        getModelSource().clear();
-
-        MyLibrary page = (MyLibrary) cycle.getPage("MyLibrary");
-
-        page.setMessage(updatedBook(attributes.get("title")));
-
-        return page;
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        if (getAttributes() == null) setAttributes(new HashMap());
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/EditProfile.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/EditProfile.java
deleted file mode 100644
index 62b51ab..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/EditProfile.java
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.ejb.FinderException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.InjectComponent;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.InjectState;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.vlib.ActivatePage;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Edit's a user's profile: names, email and password.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class EditProfile extends ActivatePage implements
-        PageBeginRenderListener
-{
-
-    public abstract String getPassword1();
-
-    public abstract void setPassword1(String value);
-
-    public abstract String getPassword2();
-
-    public abstract void setPassword2(String value);
-
-    public abstract Map getAttributes();
-
-    public abstract void setAttributes(Map attributes);
-
-    @InjectState("visit")
-    public abstract Visit getVisitState();
-
-    @InjectComponent("password1")
-    public abstract IFormComponent getPassword1Field();
-
-    @InjectComponent("password2")
-    public abstract IFormComponent getPassword2Field();
-
-    @Message
-    public abstract String enterPasswordTwice();
-
-    @Message
-    public abstract String passwordMustMatch();
-
-    @InjectPage("MyLibrary")
-    public abstract MyLibrary getMyLibrary();
-
-    /**
-     * Invoked (from {@link MyLibrary}) to begin editting the user's profile.
-     * We get the entity attributes from the
-     * {@link org.apache.tapestry.vlib.ejb.IPerson}, and store them in the
-     * attributes page property, ready to provide default values to the
-     * {@link org.apache.tapestry.valid.ValidField} components.
-     */
-
-    public void activate()
-    {
-        Visit visit = getVisitState();
-
-        final Integer userId = visit.getUserId();
-
-        RemoteCallback<Map> callback = new RemoteCallback()
-        {
-
-            public Map doRemote()
-                throws RemoteException
-            {
-                try
-                {
-                    return getOperations().getPersonAttributes(userId);
-                }
-                catch (FinderException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-            }
-        };
-
-        Map attributes = getRemoteTemplate().execute(callback,
-                "Error reading user information.");
-
-        attributes.remove("password");
-        setAttributes(attributes);
-
-        getRequestCycle().activate(this);
-    }
-
-    public void updateProfile(IRequestCycle cycle)
-    {
-        String password1 = getPassword1();
-        String password2 = getPassword2();
-
-        setPassword1(null);
-        setPassword2(null);
-
-        IValidationDelegate delegate = getValidationDelegate();
-
-        delegate.setFormComponent(getPassword1Field());
-        delegate.recordFieldInputValue(null);
-
-        delegate.setFormComponent(getPassword2Field());
-        delegate.recordFieldInputValue(null);
-
-        if (delegate.getHasErrors()) return;
-
-        final Map attributes = getAttributes();
-
-        if (HiveMind.isBlank(password1) != HiveMind.isBlank(password2))
-        {
-            delegate.record(getPassword1Field(), enterPasswordTwice());
-
-            return;
-        }
-
-        if (HiveMind.isNonBlank(password1))
-        {
-            if (!password1.equals(password2))
-            {
-                delegate.record(getPassword1Field(), passwordMustMatch());
-                return;
-            }
-
-            attributes.put("password", password1);
-        }
-
-        Visit visit = getVisitState();
-        final Integer userId = visit.getUserId();
-
-        RemoteCallback callback = new RemoteCallback()
-        {
-
-            public Object doRemote()
-                throws RemoteException
-            {
-                try
-                {
-                    getOperations().updatePerson(userId, attributes);
-
-                    return null;
-                }
-                catch (FinderException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-            }
-        };
-
-        getRemoteTemplate()
-                .execute(callback, "Error updating user attributes.");
-
-        getModelSource().clear();
-
-        getMyLibrary().activate();
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        if (getAttributes() == null) setAttributes(new HashMap());
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/GiveAwayBooks.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/GiveAwayBooks.java
deleted file mode 100644
index 1680c1b..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/GiveAwayBooks.java
+++ /dev/null
@@ -1,208 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-import java.util.List;
-
-import javax.ejb.FinderException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.vlib.EntitySelectionModel;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.VlibPage;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.Person;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Used to manage giving away of books to other users.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class GiveAwayBooks extends VlibPage implements PageBeginRenderListener
-{
-    public abstract IPropertySelectionModel getBooksModel();
-
-    public abstract void setBooksModel(IPropertySelectionModel booksModel);
-
-    public abstract IPropertySelectionModel getPersonModel();
-
-    public abstract void setPersonModel(IPropertySelectionModel personModel);
-
-    public abstract List getSelectedBooks();
-
-    public abstract Integer getTargetUserId();
-
-    @Message
-    public abstract String updateFailure();
-
-    @Message
-    public abstract String selectAtLeastOneBook(String targetName);
-
-    @Message
-    public abstract String transferedBooks(int count, String targetName);
-
-    @Message
-    public abstract String readBooksFailure();
-
-    @InjectPage("MyLibrary")
-    public abstract MyLibrary getMyLibrary();
-
-    public void formSubmit()
-    {
-        final Integer targetUserId = getTargetUserId();
-
-        Person target = getRemoteTemplate().getPerson(targetUserId);
-
-        List selectedBooks = getSelectedBooks();
-
-        int count = Tapestry.size(selectedBooks);
-
-        if (count == 0)
-        {
-            setError(selectAtLeastOneBook(target.getNaturalName()));
-            return;
-        }
-
-        final Integer[] bookIds = (Integer[]) selectedBooks.toArray(new Integer[count]);
-
-        RemoteCallback callback = new RemoteCallback()
-        {
-            public Object doRemote() throws RemoteException
-            {
-                try
-                {
-                    getOperations().transferBooks(targetUserId, bookIds);
-                    return null;
-                }
-                catch (FinderException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-            }
-        };
-
-        getRemoteTemplate().execute(callback, updateFailure());
-
-        MyLibrary myLibrary = getMyLibrary();
-
-        myLibrary.setMessage(transferedBooks(count, target.getNaturalName()));
-
-        myLibrary.activate();
-    }
-
-    private IPropertySelectionModel buildPersonModel()
-    {
-        Visit visit = getVisitState();
-        Integer userPK = visit.getUserId();
-
-        Person[] persons = getRemoteTemplate().getPersons();
-
-        EntitySelectionModel result = new EntitySelectionModel();
-
-        for (int i = 0; i < persons.length; i++)
-        {
-
-            Person p = persons[i];
-            Integer pk = p.getId();
-
-            // Skip the current user
-
-            if (pk.equals(userPK))
-                continue;
-
-            result.add(pk, p.getNaturalName());
-        }
-
-        return result;
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        IPropertySelectionModel model = getBooksModel();
-
-        if (model == null)
-        {
-            model = buildBooksModel();
-            setBooksModel(model);
-        }
-
-        model = getPersonModel();
-        if (model == null)
-        {
-            model = buildPersonModel();
-            setPersonModel(model);
-        }
-    }
-
-    private IPropertySelectionModel buildBooksModel()
-    {
-        Visit visit = getVisitState();
-        final Integer userPK = visit.getUserId();
-
-        RemoteCallback<Book[]> callback = new RemoteCallback()
-        {
-            public Book[] doRemote() throws RemoteException
-            {
-                IBookQuery query = getBookQuerySource().newQuery();
-
-                int count = query.ownerQuery(userPK, null);
-
-                return count == 0 ? null : query.get(0, count);
-            }
-        };
-
-        Book[] books = getRemoteTemplate().execute(callback, readBooksFailure());
-
-        EntitySelectionModel result = new EntitySelectionModel();
-
-        if (books != null)
-            for (int i = 0; i < books.length; i++)
-                result.add(books[i].getId(), books[i].getTitle());
-
-        return result;
-
-    }
-
-    public void pageValidate(PageEvent event)
-    {
-        super.pageValidate(event);
-
-        IPropertySelectionModel model = buildBooksModel();
-
-        if (model.getOptionCount() == 0)
-        {
-            MyLibrary page = getMyLibrary();
-
-            page.activate();
-
-            throw new PageRedirectException(page);
-        }
-
-        setBooksModel(model);
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/Home.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/Home.java
deleted file mode 100644
index 7dc1a5d..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/Home.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.vlib.VlibPage;
-import org.apache.tapestry.vlib.ejb.MasterQueryParameters;
-
-/**
- * The home page for the application, it's primary purpose is to provide a book
- * search form.
- * 
- * @author Howard Lewis Ship
- */
-
-@Meta( { "page-type=Search", "anonymous-access=true" })
-public abstract class Home extends VlibPage
-{
-
-    public abstract String getTitle();
-
-    public abstract String getAuthor();
-
-    public abstract Integer getPublisherId();
-
-    public abstract Integer getOwnerId();
-
-    @InjectPage("BookMatches")
-    public abstract BookMatches getBookMatches();
-
-    /**
-     * Listener method, invokes
-     * {@link BookMatches#performQuery(MasterQueryParameters)}.
-     */
-
-    public void search()
-    {
-        BookMatches matches = getBookMatches();
-
-        MasterQueryParameters parameters = new MasterQueryParameters(
-                getTitle(), getAuthor(), getOwnerId(), getPublisherId());
-
-        matches.performQuery(parameters);
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/Login.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/Login.java
deleted file mode 100644
index 7dc526e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/Login.java
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.Bean;
-import org.apache.tapestry.annotations.InjectComponent;
-import org.apache.tapestry.annotations.InjectObject;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.callback.ICallback;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.services.CookieSource;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.vlib.VirtualLibraryDelegate;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.VlibPage;
-import org.apache.tapestry.vlib.ejb.LoginException;
-import org.apache.tapestry.vlib.ejb.Person;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Allows the user to login, by providing email address and password. After
- * succesfully logging in, a cookie is placed on the client browser that
- * provides the default email address for future logins (the cookie persists for
- * a week).
- * 
- * @author Howard Lewis Ship
- */
-
-@Meta("anonymous-access=true")
-public abstract class Login extends VlibPage implements PageBeginRenderListener
-{
-
-    /**
-     * The name of a cookie to store on the user's machine that will identify
-     * them next time they log in.
-     */
-
-    private static final String COOKIE_NAME = "org.apache.tapestry.vlib.Login.email";
-
-    private static final int COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
-
-    @Bean(VirtualLibraryDelegate.class)
-    public abstract IValidationDelegate getValidationDelegate();
-
-    public abstract void setEmail(String value);
-
-    public abstract String getEmail();
-
-    public abstract String getPassword();
-
-    public abstract void setPassword(String password);
-
-    @InjectObject("infrastructure:cookieSource")
-    public abstract CookieSource getCookieSource();
-
-    @Persist("client:app")
-    public abstract ICallback getCallback();
-
-    public abstract void setCallback(ICallback value);
-
-    @InjectComponent("email")
-    public abstract IFormComponent getEmailField();
-
-    @InjectComponent("password")
-    public abstract IFormComponent getPasswordField();
-
-    @InjectPage("MyLibrary")
-    public abstract MyLibrary getMyLibrary();
-
-    /**
-     * Attempts to login.
-     * <p>
-     * If the user name is not known, or the password is invalid, then an error
-     * message is displayed.
-     */
-
-    public void attemptLogin(IRequestCycle cycle)
-    {
-        final String password = getPassword();
-
-        // Do a little extra work to clear out the password.
-
-        setPassword(null);
-        IValidationDelegate delegate = getValidationDelegate();
-
-        delegate.setFormComponent(getPasswordField());
-        delegate.recordFieldInputValue(null);
-
-        // An error, from a validation field, may already have occured.
-
-        if (delegate.getHasErrors()) return;
-
-        RemoteCallback callback = new RemoteCallback()
-        {
-
-            public Object doRemote()
-                throws RemoteException
-            {
-
-                try
-                {
-                    Person person = getOperations().login(getEmail(), password);
-
-                    loginUser(person);
-
-                    return null;
-                }
-                catch (LoginException ex)
-                {
-                    IFormComponent field = ex.isPasswordError() ? getPasswordField()
-                            : getEmailField();
-
-                    getValidationDelegate().record(field, ex.getMessage());
-
-                    return null;
-                }
-
-            }
-        };
-
-        getRemoteTemplate().execute(callback, "Error validating user.");
-
-    }
-
-    /**
-     * Sets up the {@link Person} as the logged in user, creates a cookie for
-     * thier email address (for subsequent logins), and redirects to the
-     * appropriate page ({@link MyLibrary}, or a specified page).
-     */
-
-    public void loginUser(Person person)
-    {
-        IRequestCycle cycle = getRequestCycle();
-
-        String email = person.getEmail();
-
-        // Get the visit object; this will likely force the
-        // creation of the visit object and an HttpSession.
-
-        Visit visit = getVisitState();
-        visit.setUser(person);
-
-        // After logging in, go to the Home page, unless otherwise
-        // specified.
-
-        ICallback callback = getCallback();
-
-        if (callback == null)
-            getMyLibrary().activate();
-        else callback.performCallback(cycle);
-
-        getCookieSource().writeCookieValue(COOKIE_NAME, email, COOKIE_MAX_AGE);
-
-        cycle.forgetPage(getPageName());
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        if (getEmail() == null) getCookieSource().readCookieValue(COOKIE_NAME);
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/MyLibrary.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/MyLibrary.java
deleted file mode 100644
index 398a339..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/MyLibrary.java
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.InjectComponent;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.vlib.ActivatePage;
-import org.apache.tapestry.vlib.components.Browser;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.SortColumn;
-import org.apache.tapestry.vlib.ejb.SortOrdering;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Shows a list of the user's books, allowing books to be editted or even
- * deleted.
- * <p>
- * Note that, unlike elsewhere, book titles do not link to the {@link ViewBook}
- * page. It seems to me there would be a conflict between that behavior and the
- * edit behavior; making the book titles not be links removes the ambiguity over
- * what happens when the book title is clicked (view vs. edit).
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class MyLibrary extends ActivatePage
-{
-
-    @Persist
-    public abstract IBookQuery getOwnedQuery();
-
-    public abstract void setOwnedQuery(IBookQuery value);
-
-    @Persist
-    public abstract SortColumn getSortColumn();
-
-    public abstract void setSortColumn(SortColumn column);
-
-    @Persist
-    public abstract boolean isDescending();
-
-    @InjectComponent("browser")
-    public abstract Browser getBrowser();
-
-    @InjectPage("EditBook")
-    public abstract EditBook getEditBook();
-
-    @InjectPage("ConfirmBookDelete")
-    public abstract ConfirmBookDelete getConfirmBookDelete();
-
-    public void finishLoad()
-    {
-        setSortColumn(SortColumn.TITLE);
-    }
-
-    public void activate()
-    {
-        runQuery();
-
-        getRequestCycle().activate(this);
-    }
-
-    public void requery(IRequestCycle cycle)
-    {
-        runQuery();
-    }
-
-    private void runQuery()
-    {
-        final Integer userId = getVisitState().getUserId();
-        final SortOrdering ordering = new SortOrdering(getSortColumn(),
-                isDescending());
-
-        RemoteCallback<Integer> callback = new RemoteCallback()
-        {
-
-            public Integer doRemote()
-                throws RemoteException
-            {
-                IBookQuery query = getOwnedQuery();
-
-                if (query == null)
-                {
-                    query = getBookQuerySource().newQuery();
-                    setOwnedQuery(query);
-                }
-
-                try
-                {
-                    return query.ownerQuery(userId, ordering);
-                }
-                catch (RemoteException ex)
-                {
-                    setOwnedQuery(null);
-                    throw ex;
-                }
-            }
-        };
-
-        int count = getRemoteTemplate().execute(callback,
-                "Error accessing owned books.");
-
-        Browser browser = getBrowser();
-
-        if (count != browser.getResultCount())
-            browser.initializeForResultCount(count);
-    }
-
-    /**
-     * Listener invoked to allow a user to edit a book.
-     */
-
-    public void editBook(Integer bookId)
-    {
-        getEditBook().beginEdit(bookId);
-    }
-
-    /**
-     * Listener invoked to allow a user to delete a book.
-     */
-
-    public void deleteBook(Integer bookId)
-    {
-        getConfirmBookDelete().selectBook(bookId);
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java
deleted file mode 100644
index 687ecf4..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.annotations.InjectComponent;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.VlibPage;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Collects information for a new book.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class NewBook extends VlibPage implements
-        PageBeginRenderListener
-{
-
-    public abstract Map getAttributes();
-
-    public abstract void setAttributes(Map attributes);
-
-    public abstract String getPublisherName();
-
-    @Message
-    public abstract String needPublisherName();
-
-    @Message
-    public abstract String leavePublisherNameEmpty();
-
-    @Message
-    public abstract String addedBook(Object title);
-
-    @InjectComponent("publisherName")
-    public abstract IFormComponent getPublisherNameField();
-
-    @InjectPage("MyLibrary")
-    public abstract MyLibrary getMyLibrary();
-
-    public void addBook()
-    {
-        IValidationDelegate delegate = getValidationDelegate();
-
-        final Map attributes = getAttributes();
-
-        final Integer publisherId = (Integer) attributes.get("publisherId");
-        final String publisherName = getPublisherName();
-
-        if (publisherId == null && HiveMind.isBlank(publisherName))
-        {
-            delegate.record(getPublisherNameField(), needPublisherName());
-            return;
-        }
-
-        if (publisherId != null && HiveMind.isNonBlank(publisherName))
-        {
-            delegate.record(getPublisherNameField(), leavePublisherNameEmpty());
-            return;
-        }
-
-        if (isInError()) return;
-
-        Visit visit = getVisitState();
-
-        Integer userId = visit.getUserId();
-
-        attributes.put("ownerId", userId);
-        attributes.put("holderId", userId);
-
-        RemoteCallback<Boolean> callback = new RemoteCallback()
-        {
-
-            public Boolean doRemote()
-                throws RemoteException
-            {
-                IOperations operations = getOperations();
-
-                try
-                {
-                    if (publisherId != null)
-                    {
-                        operations.addBook(attributes);
-
-                        return false;
-                    }
-
-                    operations.addBook(attributes, publisherName);
-
-                    return true;
-                }
-                catch (CreateException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-            }
-        };
-
-        boolean clearCache = getRemoteTemplate().execute(callback,
-                "Error adding new book.");
-
-        if (clearCache) getModelSource().clear();
-
-        // Success. First, update the message property of the return page.
-
-        MyLibrary myLibrary = getMyLibrary();
-
-        myLibrary.setMessage(addedBook(attributes.get("title")));
-
-        myLibrary.activate();
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        if (getAttributes() == null)
-        {
-            Map attributes = new HashMap();
-
-            // Setup defaults for the new book.
-
-            attributes.put("lendable", true);
-
-            setAttributes(attributes);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/Register.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/Register.java
deleted file mode 100644
index 02c7cfe..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/Register.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.annotations.Bean;
-import org.apache.tapestry.annotations.InjectComponent;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.vlib.VirtualLibraryDelegate;
-import org.apache.tapestry.vlib.VlibPage;
-import org.apache.tapestry.vlib.ejb.Person;
-import org.apache.tapestry.vlib.ejb.RegistrationException;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Invoked from the {@link Login} page, to allow a user to register into the
- * system on-the-fly.
- * 
- * @author Howard Lewis Ship
- */
-
-@Meta( { "page-type=Login", "anonymous-access=true" })
-public abstract class Register extends VlibPage
-{
-
-    public abstract String getFirstName();
-
-    public abstract String getLastName();
-
-    public abstract String getEmail();
-
-    public abstract String getPassword1();
-
-    public abstract String getPassword2();
-
-    public abstract void setPassword1(String value);
-
-    public abstract void setPassword2(String value);
-
-    @Bean(VirtualLibraryDelegate.class)
-    public abstract IValidationDelegate getValidationDelegate();
-
-    @InjectComponent("password1")
-    public abstract IFormComponent getPassword1Field();
-
-    @InjectComponent("password2")
-    public abstract IFormComponent getPassword2Field();
-
-    @Message
-    public abstract String passwordMustMatch();
-
-    private void clear(IFormComponent field)
-    {
-        IValidationDelegate delegate = getValidationDelegate();
-
-        delegate.setFormComponent(field);
-        delegate.recordFieldInputValue(null);
-    }
-
-    public void attemptRegister()
-    {
-        IValidationDelegate delegate = getValidationDelegate();
-
-        final String password1 = getPassword1();
-        String password2 = getPassword2();
-
-        setPassword1(null);
-        setPassword2(null);
-
-        clear(getPassword1Field());
-        clear(getPassword1Field());
-
-        if (delegate.getHasErrors()) return;
-
-        // Note: we know password1 and password2 are not null
-        // because they are required fields.
-
-        if (!password1.equals(password2))
-        {
-            delegate.record(getPassword1Field(), passwordMustMatch());
-            return;
-        }
-
-        RemoteCallback callback = new RemoteCallback()
-        {
-
-            public Object doRemote()
-                throws RemoteException
-            {
-                try
-                {
-                    Person user = getOperations().registerNewUser(
-                            getFirstName(), getLastName(), getEmail(),
-                            password1);
-
-                    getLogin().loginUser(user);
-
-                    return null;
-                }
-                catch (RegistrationException ex)
-                {
-                    setError(ex.getMessage());
-                    return null;
-                }
-                catch (CreateException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-            }
-        };
-
-        getRemoteTemplate().execute(callback, "Error registering new user.");
-    }
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ViewBook.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ViewBook.java
deleted file mode 100644
index 374f949..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ViewBook.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.text.DateFormat;
-
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.vlib.VlibPage;
-import org.apache.tapestry.vlib.ejb.Book;
-
-/**
- * Shows the details of a book, and allows the user to borrow it.
- * 
- * @author Howard Lewis Ship
- */
-@Meta( { "page-type=Search", "anonymous-access=true" })
-public abstract class ViewBook extends VlibPage implements IExternalPage,
-        PageBeginRenderListener
-
-{
-
-    private DateFormat _dateFormat;
-
-    @Persist
-    public abstract Integer getBookId();
-
-    public abstract void setBookId(Integer bookId);
-
-    public abstract Book getBook();
-
-    public abstract void setBook(Book value);
-
-    public void activateExternalPage(Object[] parameters, IRequestCycle cycle)
-    {
-        Integer bookId = (Integer) parameters[0];
-
-        setBookId(bookId);
-    }
-
-    private void readBook()
-    {
-        // This doesn't handle invalid book id as nicely as the 3.0 code did,
-        // but I'm
-        // getting a bit lazy!
-
-        Book book = getRemoteTemplate().getBook(getBookId());
-
-        setBook(book);
-    }
-
-    public DateFormat getDateFormat()
-    {
-        if (_dateFormat == null)
-            _dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,
-                    DateFormat.SHORT, getLocale());
-
-        return _dateFormat;
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        if (getBook() == null) readBook();
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ViewPerson.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ViewPerson.java
deleted file mode 100644
index 0c124dd..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ViewPerson.java
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.InjectComponent;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.vlib.VlibPage;
-import org.apache.tapestry.vlib.components.Browser;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.Person;
-import org.apache.tapestry.vlib.ejb.SortColumn;
-import org.apache.tapestry.vlib.ejb.SortOrdering;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Displays the book inventory list for a single
- * {@link org.apache.tapestry.vlib.ejb.IPerson}, showing what books are owned
- * by the person, who has them borrowed, etc. If the user is logged in, then
- * books can be borrowed from this page as well.
- * 
- * @author Howard Lewis Ship
- */
-@Meta( { "page-type=Search", "anonymous-access=true" })
-public abstract class ViewPerson extends VlibPage implements IExternalPage,
-        PageBeginRenderListener
-{
-
-    public abstract Integer getPersonId();
-
-    @Persist
-    public abstract void setPersonId(Integer personId);
-
-    public abstract void setPerson(Person value);
-
-    public abstract Person getPerson();
-
-    @Persist
-    public abstract IBookQuery getQuery();
-
-    public abstract void setQuery(IBookQuery value);
-
-    @Persist
-    public abstract SortColumn getSortColumn();
-
-    public abstract void setSortColumn(SortColumn sortColumn);
-
-    @Persist
-    public abstract boolean isDescending();
-
-    @InjectComponent("browser")
-    public abstract Browser getBrowser();
-
-    public void finishLoad()
-    {
-        setSortColumn(SortColumn.TITLE);
-    }
-
-    /**
-     * Invoked by the external service to being viewing the identified person.
-     */
-
-    public void activateExternalPage(Object[] parameters, IRequestCycle cycle)
-    {
-        Integer personId = (Integer) parameters[0];
-
-        setPersonId(personId);
-
-        // Force the query to be re-run when the person changes.
-
-        int count = runQuery();
-
-        getBrowser().initializeForResultCount(count);
-    }
-
-    public void requery(IRequestCycle cycle)
-    {
-        int count = runQuery();
-
-        if (getBrowser().getResultCount() != count)
-            getBrowser().setResultCount(count);
-    }
-
-    private int runQuery()
-    {
-        final Integer personId = getPersonId();
-        final SortOrdering ordering = new SortOrdering(getSortColumn(),
-                isDescending());
-
-        RemoteCallback<Integer> callback = new RemoteCallback()
-        {
-
-            public Integer doRemote()
-                throws RemoteException
-            {
-                IBookQuery query = getQuery();
-
-                if (query == null)
-                {
-                    query = getBookQuerySource().newQuery();
-                    setQuery(query);
-                }
-
-                try
-                {
-                    return query.ownerQuery(personId, ordering);
-                }
-                catch (RemoteException ex)
-                {
-                    setQuery(null);
-                    throw ex;
-                }
-            }
-        };
-
-        return getRemoteTemplate().execute(callback,
-                "Error executing owner query.");
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        Person person = getPerson();
-
-        if (person == null)
-        {
-            person = getRemoteTemplate().getPerson(getPersonId());
-
-            setPerson(person);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java
deleted file mode 100644
index 4b68148..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java
+++ /dev/null
@@ -1,190 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages.admin;
-
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.ejb.FinderException;
-import javax.ejb.RemoveException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.util.DefaultPrimaryKeyConverter;
-import org.apache.tapestry.vlib.VlibPage;
-import org.apache.tapestry.vlib.ejb.Publisher;
-import org.apache.tapestry.vlib.pages.MyLibrary;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Allows editting of the publishers in the database, including deleting
- * publishers (which can be dangerous if any books are linked to the publisher).
- * 
- * @author Howard Lewis Ship
- */
-@Meta( { "page-type=EditPublishers", "admin-page=true" })
-public abstract class EditPublishers extends VlibPage implements
-        PageBeginRenderListener, PageDetachListener
-{
-
-    private DefaultPrimaryKeyConverter _converter;
-    
-    public abstract Publisher getPublisher();
-
-    @Message
-    public abstract String outOfDate();
-
-    @Message
-    public abstract String updateFailure();
-
-    @Message
-    public abstract String publishersUpdated();
-
-    @InjectPage("MyLibrary")
-    public abstract MyLibrary getMyLibrary();
-
-    public DefaultPrimaryKeyConverter getConverter()
-    {
-        if (_converter == null) _converter = new DefaultPrimaryKeyConverter()
-        {
-
-            // Here's why we DON'T use @Bean ...
-
-            @Override
-            protected Object provideMissingValue(Object key)
-            {
-                getValidationDelegate().record(null, outOfDate());
-                throw new PageRedirectException(EditPublishers.this);
-            }
-
-        };
-
-        return _converter;
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        readPublishers();
-    }
-
-    public void pageDetached(PageEvent event)
-    {
-        _converter = null;
-    }
-
-    /**
-     * Reads all publishers from the database, building the list of publisher
-     * ids, and the map from id to Publisher. Also, sets the deletedPublisherIds
-     * property to an empty set.
-     */
-
-    private void readPublishers()
-    {
-        RemoteCallback<Publisher[]> callback = new RemoteCallback()
-        {
-
-            public Publisher[] doRemote()
-                throws RemoteException
-            {
-                return getOperations().getPublishers();
-            }
-        };
-
-        Publisher[] publishers = getRemoteTemplate().execute(callback,
-                "Could not read publishers.");
-
-        DefaultPrimaryKeyConverter converter = getConverter();
-
-        converter.clear();
-
-        for(Publisher publisher : publishers)
-        {
-            converter.add(publisher.getId(), publisher);
-        }
-    }
-
-    protected Publisher[] extractUpdatedPublishers()
-    {
-        List publishers = getConverter().getValues();
-
-        return (Publisher[]) publishers.toArray(new Publisher[0]);
-    }
-
-    protected Integer[] extractDeletedKeys()
-    {
-        Set deletedValues = getConverter().getDeletedValues();
-        List keys = new ArrayList(deletedValues.size());
-
-        Iterator i = deletedValues.iterator();
-        while(i.hasNext())
-        {
-            Publisher p = (Publisher) i.next();
-            keys.add(p.getId());
-        }
-
-        return (Integer[]) keys.toArray(new Integer[0]);
-    }
-
-    public void processForm(IRequestCycle cycle)
-    {
-        final Publisher[] updated = extractUpdatedPublishers();
-        final Integer[] deletedKeys = extractDeletedKeys();
-
-        RemoteCallback callback = new RemoteCallback()
-        {
-
-            public Object doRemote()
-                throws RemoteException
-            {
-
-                try
-                {
-                    getOperations().updatePublishers(updated, deletedKeys);
-                }
-                catch (FinderException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-                catch (RemoveException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-
-                return null;
-            }
-        };
-
-        getRemoteTemplate().execute(callback, updateFailure());
-
-        getModelSource().clear();
-
-        MyLibrary page = getMyLibrary();
-
-        page.setMessage(publishersUpdated());
-
-        page.activate();
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditUsers.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditUsers.java
deleted file mode 100644
index c79d2bc..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditUsers.java
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages.admin;
-
-import java.rmi.RemoteException;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.ejb.FinderException;
-import javax.ejb.RemoveException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.annotations.InjectComponent;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.util.DefaultPrimaryKeyConverter;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.VlibPage;
-import org.apache.tapestry.vlib.ejb.Person;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Allows editting of the users. Simple flags about the user can be changed;
- * additionally, the user can have their password reset (to a random value,
- * which is mailed to them), or the user can be out-right deleted.
- * 
- * @author Howard Lewis Ship
- */
-@Meta( { "page-type=EditUsers", "admin-page=true" })
-public abstract class EditUsers extends VlibPage implements
-        PageBeginRenderListener, PageDetachListener
-{
-    private UserConverter _userConverter;
-    
-    public abstract String getPassword();
-
-    public abstract void setPassword(String password);
-
-    public abstract void setUser(Person person);
-
-    public abstract Person getUser();
-
-    @Message
-    public abstract String outOfDate();
-
-    @Message
-    public abstract String readFailure();
-
-    @Message
-    public abstract String needPassword();
-
-    @Message
-    public abstract String updateFailure();
-
-    @Message
-    public abstract String usersUpdated();
-
-    @InjectComponent("password")
-    public abstract IFormComponent getPasswordField();
-
-    /**
-     * 
-     * @author hls
-     */
-    public class UserConverter extends DefaultPrimaryKeyConverter
-    {
-
-        private Set _resetPasswordValues;
-
-        public void clear()
-        {
-            _resetPasswordValues = null;
-            super.clear();
-        }
-
-        public void setResetPassword(boolean resetPassword)
-        {
-            _resetPasswordValues = updateValueSetForLastValue(
-                    _resetPasswordValues, resetPassword);
-        }
-
-        public boolean isResetPassword()
-        {
-            return checkValueSetForLastValue(_resetPasswordValues);
-        }
-
-        public Set getResetPasswordValues()
-        {
-            return createUnmodifiableSet(_resetPasswordValues);
-        }
-    }
-
-    public UserConverter getUserConverter()
-    {
-        if (_userConverter == null) _userConverter = new UserConverter();
-
-        return _userConverter;
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        readUsers();
-    }
-
-    public void pageDetached(PageEvent event)
-    {
-        _userConverter = null;
-    }
-
-    private void readUsers()
-    {
-        Visit visit = getVisitState();
-
-        Integer userId = visit.getUserId();
-
-        RemoteCallback<Person[]> callback = new RemoteCallback()
-        {
-
-            public Person[] doRemote()
-                throws RemoteException
-            {
-                return getOperations().getPersons();
-            }
-        };
-
-        Person[] users = getRemoteTemplate().execute(callback, readFailure());
-
-        UserConverter converter = getUserConverter();
-
-        converter.clear();
-
-        for(int i = 0; i < users.length; i++)
-        {
-            Integer id = users[i].getId();
-
-            // Skip the current user; you aren't allowed to edit yourself
-
-            if (id.equals(userId)) continue;
-
-            converter.add(id, users[i]);
-        }
-    }
-
-    /**
-     * Invoked when the form is submitted.
-     */
-
-    public void updateUsers()
-    {
-        Visit visit = getVisitState();
-
-        UserConverter converter = getUserConverter();
-
-        final Person[] updates = (Person[]) converter.getValues().toArray(
-                new Person[0]);
-        final Integer[] deletedIds = extractIds(converter.getDeletedValues());
-        final Integer[] resetPasswordIds = extractIds(converter
-                .getResetPasswordValues());
-
-        final String password = getPassword();
-        setPassword(null);
-
-        if (HiveMind.isBlank(password) && resetPasswordIds.length > 0)
-        {
-            getValidationDelegate().record(getPasswordField(), needPassword());
-            return;
-        }
-
-        final Integer adminId = visit.getUserId();
-
-        RemoteCallback callback = new RemoteCallback()
-        {
-
-            public Object doRemote()
-                throws RemoteException
-            {
-                try
-                {
-                    getOperations().updatePersons(updates, resetPasswordIds,
-                            password, deletedIds, adminId);
-                }
-                catch (RemoveException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-                catch (FinderException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-
-                return null;
-            }
-
-        };
-
-        getRemoteTemplate().execute(callback, updateFailure());
-
-        setMessage(usersUpdated());
-    }
-
-    private Integer[] extractIds(Set valueSet)
-    {
-        int count = valueSet.size();
-
-        Integer[] result = new Integer[count];
-
-        Iterator i = valueSet.iterator();
-        int index = 0;
-
-        while(i.hasNext())
-        {
-            Person person = (Person) i.next();
-
-            result[index++] = person.getId();
-        }
-
-        return result;
-    }
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/TransferBooksSelect.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/TransferBooksSelect.java
deleted file mode 100644
index 3ebff28..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/TransferBooksSelect.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages.admin;
-
-import org.apache.tapestry.annotations.Bean;
-import org.apache.tapestry.annotations.InjectComponent;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.vlib.VirtualLibraryDelegate;
-import org.apache.tapestry.vlib.VlibPage;
-
-/**
- * First page in Transfer Books wizard; allows the two users to be selected.
- * 
- * @author Howard Lewis Ship
- */
-@Meta( { "page-type=TransferBooks", "admin-page=true" })
-public abstract class TransferBooksSelect extends VlibPage
-{
-
-    public abstract Integer getFromUserId();
-
-    public abstract Integer getToUserId();
-
-    @Message
-    public abstract String selectDifferentUsers();
-
-    @InjectComponent("to")
-    public abstract IFormComponent getToField();
-
-    @Bean(VirtualLibraryDelegate.class)
-    public abstract IValidationDelegate getValidationDelegate();
-
-    @InjectPage("admin/TransferBooksTransfer")
-    public abstract TransferBooksTransfer getNextPage();
-
-    public void formSubmit()
-    {
-        Integer fromUserId = getFromUserId();
-        Integer toUserId = getToUserId();
-
-        if (fromUserId.equals(toUserId))
-        {
-            getValidationDelegate()
-                    .record(getToField(), selectDifferentUsers());
-            return;
-        }
-
-        TransferBooksTransfer next = getNextPage();
-
-        next.activate(fromUserId, toUserId);
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/TransferBooksTransfer.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/TransferBooksTransfer.java
deleted file mode 100644
index 94b5296..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/TransferBooksTransfer.java
+++ /dev/null
@@ -1,201 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages.admin;
-
-import java.rmi.RemoteException;
-import java.util.List;
-
-import javax.ejb.FinderException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.annotations.Bean;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.annotations.Meta;
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.vlib.EntitySelectionModel;
-import org.apache.tapestry.vlib.VirtualLibraryDelegate;
-import org.apache.tapestry.vlib.VlibPage;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.Person;
-import org.apache.tapestry.vlib.services.RemoteCallback;
-
-/**
- * Second page in Transfer Books wizard; allows the books owned by the from user to be selected and
- * transfered to the target user.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-@Meta(
-{ "page-type=TransferBooks", "admin-page=true" })
-public abstract class TransferBooksTransfer extends VlibPage implements PageBeginRenderListener
-{
-    public abstract Person getFromUser();
-
-    public abstract void setFromUser(Person fromUser);
-
-    @Persist("client")
-    public abstract Integer getFromUserId();
-
-    public abstract void setFromUserId(Integer fromUserId);
-
-    @Persist("client")
-    public abstract Integer getToUserId();
-
-    public abstract void setToUserId(Integer toUserId);
-
-    public abstract Person getToUser();
-
-    public abstract void setToUser(Person toUser);
-
-    public abstract List getSelectedBooks();
-
-    public abstract IPropertySelectionModel getUserBookModel();
-
-    public abstract void setUserBookModel(IPropertySelectionModel userBookModel);
-
-    @Bean(VirtualLibraryDelegate.class)
-    public abstract IValidationDelegate getValidationDelegate();
-
-    @Message
-    public abstract String userHasNoBooks(String userName);
-
-    @InjectPage("admin/TransferBooksSelect")
-    public abstract TransferBooksSelect getSelectPage();
-
-    @Message
-    public abstract String transferedBooks(int count, String fromName, String toName);
-
-    public void activate(Integer fromUserId, Integer toUserId)
-    {
-        Person fromUser = getRemoteTemplate().getPerson(fromUserId);
-
-        IPropertySelectionModel model = buildUserBookModel(fromUser);
-
-        if (model.getOptionCount() == 0)
-        {
-            TransferBooksSelect page = getSelectPage();
-            page.setError(userHasNoBooks(fromUser.getNaturalName()));
-            return;
-        }
-
-        setFromUserId(fromUserId);
-        setFromUser(fromUser);
-
-        setToUserId(toUserId);
-
-        setUserBookModel(model);
-
-        getRequestCycle().activate(this);
-    }
-
-    /**
-     * Only properties toUserPK and fromUserPK are persistent. We need to refresh the fromUser,
-     * toUser and userBookModel properties at the start of each request cycle.
-     */
-
-    public void pageBeginRender(PageEvent event)
-    {
-        Person fromUser = getFromUser();
-
-        if (fromUser == null)
-        {
-            fromUser = getRemoteTemplate().getPerson(getFromUserId());
-            setFromUser(fromUser);
-        }
-
-        if (getUserBookModel() == null)
-            setUserBookModel(buildUserBookModel(fromUser));
-
-        Person toUser = getToUser();
-        if (toUser == null)
-        {
-            toUser = getRemoteTemplate().getPerson(getToUserId());
-            setToUser(toUser);
-        }
-    }
-
-    public IPage formSubmit()
-    {
-        List selectedBooks = getSelectedBooks();
-
-        final Integer[] keys = (Integer[]) selectedBooks.toArray(new Integer[0]);
-        final Person toUser = getToUser();
-
-        RemoteCallback callback = new RemoteCallback()
-        {
-            public Object doRemote() throws RemoteException
-            {
-                try
-                {
-                    getOperations().transferBooks(toUser.getId(), keys);
-                }
-                catch (FinderException ex)
-                {
-                    throw new ApplicationRuntimeException(ex);
-                }
-
-                return null;
-            }
-        };
-
-        getRemoteTemplate().execute(callback, "Unable to transfer ownership of books.");
-
-        Person fromUser = getFromUser();
-
-        TransferBooksSelect selectPage = getSelectPage();
-
-        selectPage.setMessage(transferedBooks(keys.length, fromUser.getNaturalName(), toUser
-                .getNaturalName()));
-
-        return selectPage;
-    }
-
-    private IPropertySelectionModel buildUserBookModel(final Person user)
-    {
-        RemoteCallback<Book[]> callback = new RemoteCallback()
-        {
-            public Book[] doRemote() throws RemoteException
-            {
-                IBookQuery query = getBookQuerySource().newQuery();
-
-                int count = query.ownerQuery(user.getId(), null);
-
-                return count > 0 ? query.get(0, count) : null;
-            }
-        };
-
-        Book[] books = getRemoteTemplate().execute(
-                callback,
-                "Unable to retrieve books owned by " + user.getNaturalName() + ".");
-
-        EntitySelectionModel model = new EntitySelectionModel();
-
-        if (books != null)
-            for (int i = 0; i < books.length; i++)
-                model.add(books[i].getId(), books[i].getTitle());
-
-        return model;
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/package.html b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/package.html
deleted file mode 100644
index 7cfd94c..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Pages
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/package.html b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/package.html
deleted file mode 100644
index 7cfd94c..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/pages/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Pages
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycle.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycle.java
deleted file mode 100644
index bdf656c..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycle.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-/**

- * Threaded (i.e. per-request) service that stores lifecycle operations and actions; used to control

- * logout behavior.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public interface ApplicationLifecycle

-{

-    /**

-     * Logs the user out of the systems; sets a flag that causes the session to be discarded at the

-     * end of the request.

-     */

-    void logout();

-

-    /**

-     * If true, then the session (if it exists) should be discarded at the end of the request.

-     */

-    boolean getDiscardSession();

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycleImpl.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycleImpl.java
deleted file mode 100644
index a1e5deb..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ApplicationLifecycleImpl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import org.apache.tapestry.engine.state.ApplicationStateManager;

-import org.apache.tapestry.vlib.Visit;

-

-/**

- * Implementation of service vlib.ApplicationLifecycle. Uses the threaded model.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class ApplicationLifecycleImpl implements ApplicationLifecycle

-{

-    private boolean _discardSession;

-

-    private ApplicationStateManager _stateManager;

-

-    public void setStateManager(ApplicationStateManager stateManager)

-    {

-        _stateManager = stateManager;

-    }

-

-    public void logout()

-    {

-        _discardSession = true;

-

-        if (_stateManager.exists("visit"))

-        {

-            Visit visit = (Visit) _stateManager.get("visit");

-            visit.setUser(null);

-        }

-    }

-

-    public boolean getDiscardSession()

-    {

-        return _discardSession;

-    }

-

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySource.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySource.java
deleted file mode 100644
index c2e8791..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySource.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import org.apache.tapestry.vlib.ejb.IBookQuery;

-

-/**

- * Handles remote lookup to obtain a new instance of the

- * {@link org.apache.tapestry.vlib.ejb.IBookQuery} stateful session EJB.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- * @see org.apache.tapestry.vlib.ejb.IBookQueryHome

- */

-public interface BookQuerySource

-{

-    /**

-     * Returns a new instance of a book query, ready to perform various query operations.

-     * 

-     * @return book query instance

-     */

-    IBookQuery newQuery();

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySourceImpl.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySourceImpl.java
deleted file mode 100644
index 196324b..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySourceImpl.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import java.rmi.RemoteException;

-

-import javax.ejb.CreateException;

-

-import org.apache.hivemind.lib.NameLookup;

-import org.apache.hivemind.lib.RemoteExceptionEvent;

-import org.apache.hivemind.lib.RemoteExceptionListener;

-import org.apache.tapestry.vlib.ejb.IBookQuery;

-import org.apache.tapestry.vlib.ejb.IBookQueryHome;

-

-/**

- * 

- * @author hls

- */

-public class BookQuerySourceImpl implements BookQuerySource, RemoteExceptionListener

-{

-    private NameLookup _nameLookup;

-

-    private IBookQueryHome _home;

-

-    private RemoteTemplate _remoteTemplate;

-

-    public synchronized IBookQuery newQuery()

-    {

-        RemoteCallback<IBookQuery> callback = new RemoteCallback()

-        {

-            public IBookQuery doRemote() throws RemoteException

-            {

-                try

-                {

-                    return getHome().create();

-                }

-                catch (CreateException ex)

-                {

-                    throw new RemoteException(ex.getMessage(), ex);

-                }

-            }

-

-        };

-

-        return _remoteTemplate.execute(callback, "Creating new book query.");

-    }

-

-    private IBookQueryHome getHome()

-    {

-        if (_home == null)

-            _home = (IBookQueryHome) _nameLookup.lookup("vlib/BookQuery", IBookQueryHome.class);

-

-        return _home;

-    }

-

-    public void remoteExceptionDidOccur(RemoteExceptionEvent event)

-    {

-        _home = null;

-    }

-

-    public void setNameLookup(NameLookup nameLookup)

-    {

-        _nameLookup = nameLookup;

-    }

-

-    public void setRemoteTemplate(RemoteTemplate remoteTemplate)

-    {

-        _remoteTemplate = remoteTemplate;

-    }

-

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/DiscardSessionFilter.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/DiscardSessionFilter.java
deleted file mode 100644
index a8cec28..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/DiscardSessionFilter.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import java.io.IOException;

-

-import org.apache.tapestry.services.WebRequestServicer;

-import org.apache.tapestry.services.WebRequestServicerFilter;

-import org.apache.tapestry.web.WebRequest;

-import org.apache.tapestry.web.WebResponse;

-import org.apache.tapestry.web.WebSession;

-

-/**

- * Filter, injected into the tapestry.request.WebRequestServicerPipeline configuration, that

- * optionally discards the session at the end of the request (after a logout, typically).

- * 

- * @author Howard M. Lewis Ship

- * @see org.apache.tapestry.vlib.services.ApplicationLifecycle#getDiscardSession()

- * @since 4.0

- */

-public class DiscardSessionFilter implements WebRequestServicerFilter

-{

-    private ApplicationLifecycle _applicationLifecycle;

-

-    public void service(WebRequest request, WebResponse response, WebRequestServicer servicer)

-            throws IOException

-    {

-        try

-        {

-            servicer.service(request, response);

-        }

-        finally

-        {

-            if (_applicationLifecycle.getDiscardSession())

-                discardSession(request);

-        }

-    }

-

-    private void discardSession(WebRequest request)

-    {

-        WebSession session = request.getSession(false);

-

-        if (session != null)

-            try

-            {

-                session.invalidate();

-            }

-            catch (IllegalStateException ex)

-            {

-                // Ignore.

-            }

-    }

-

-    public void setApplicationLifecycle(ApplicationLifecycle applicationLifecycle)

-    {

-        _applicationLifecycle = applicationLifecycle;

-    }

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ErrorPresenter.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ErrorPresenter.java
deleted file mode 100644
index d563543..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ErrorPresenter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import org.apache.tapestry.IRequestCycle;

-

-/**

- * Contains logic used to present an error to the user; smart about which page to move to.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public interface ErrorPresenter

-{

-    void presentError(String message, IRequestCycle cycle);

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ErrorPresenterImpl.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ErrorPresenterImpl.java
deleted file mode 100644
index d516b1e..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ErrorPresenterImpl.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.engine.state.ApplicationStateManager;

-import org.apache.tapestry.vlib.IErrorProperty;

-import org.apache.tapestry.vlib.Visit;

-

-/**

- * Implementation of {@link org.apache.tapestry.vlib.services.ErrorPresenter}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class ErrorPresenterImpl implements ErrorPresenter

-{

-    private ApplicationStateManager _stateManager;

-

-    public void setStateManager(ApplicationStateManager stateManager)

-    {

-        _stateManager = stateManager;

-    }

-

-    public void presentError(String message, IRequestCycle cycle)

-    {

-        String pageName = isLoggedIn() ? "MyLibrary" : "Home";

-

-        IErrorProperty page = (IErrorProperty) cycle.getPage(pageName);

-

-        page.setError(message);

-

-        cycle.activate(page);

-    }

-

-    private boolean isLoggedIn()

-    {

-        if (_stateManager.exists("visit"))

-        {

-            Visit visit = (Visit) _stateManager.get("visit");

-

-            return visit.isUserLoggedIn();

-        }

-

-        return false;

-    }

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSource.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSource.java
deleted file mode 100644
index 2568f70..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSource.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import org.apache.tapestry.form.IPropertySelectionModel;

-

-/**

- * Source for some common Virtual Library property selection models.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public interface ModelSource

-{

-    /**

-     * Returns a model of the known Publishers, in alphabetical order.

-     * 

-     * @see org.apache.tapestry.vlib.ejb.IOperations#getPublishers()

-     */

-    IPropertySelectionModel getPublisherModel();

-

-    /**

-     * Returns a model of the known Users, in ascending alphbetical order (by last name).

-     * 

-     * @see org.apache.tapestry.vlib.ejb.IOperations#getPersons()

-     */

-

-    IPropertySelectionModel getPersonModel();

-

-    /**

-     * Returns a model of the known users, prefixed with an empty label option (used when selecting

-     * a person is optional).

-     */

-

-    IPropertySelectionModel getOptionalPersonModel();

-

-    /**

-     * Clears all cached information; this is invoked after a change to the underlying person or

-     * publisher data, or after any kind of exception accessing the backend.

-     */

-

-    void clear();

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSourceImpl.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSourceImpl.java
deleted file mode 100644
index 87aa513..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ModelSourceImpl.java
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import java.rmi.RemoteException;

-

-import org.apache.hivemind.lib.RemoteExceptionCoordinator;

-import org.apache.hivemind.lib.RemoteExceptionEvent;

-import org.apache.hivemind.lib.RemoteExceptionListener;

-import org.apache.hivemind.service.ThreadCleanupListener;

-import org.apache.tapestry.Tapestry;

-import org.apache.tapestry.form.IPropertySelectionModel;

-import org.apache.tapestry.vlib.EntitySelectionModel;

-import org.apache.tapestry.vlib.ejb.IOperations;

-import org.apache.tapestry.vlib.ejb.Person;

-import org.apache.tapestry.vlib.ejb.Publisher;

-

-/**

- * Implementation of {@link org.apache.tapestry.vlib.services.ModelSource}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class ModelSourceImpl implements ModelSource, RemoteExceptionListener, ThreadCleanupListener

-{

-    private IPropertySelectionModel _publisherModel;

-

-    private IPropertySelectionModel _personModel;

-

-    private IPropertySelectionModel _optionalPersonModel;

-

-    private IOperations _operations;

-

-    private RemoteTemplate _remoteTemplate;

-

-    private RemoteExceptionCoordinator _coordinator;

-

-    public void initializeService()

-    {

-        _coordinator.addRemoteExceptionListener(this);

-    }

-

-    public void threadDidCleanup()

-    {

-        _coordinator.removeRemoteExceptionListener(this);

-    }

-

-    public synchronized IPropertySelectionModel getPublisherModel()

-    {

-        if (_publisherModel == null)

-            _publisherModel = buildPublisherModel();

-

-        return _publisherModel;

-    }

-

-    public synchronized IPropertySelectionModel getPersonModel()

-    {

-        if (_personModel == null)

-            buildPersonModels();

-

-        return _personModel;

-    }

-

-    public synchronized IPropertySelectionModel getOptionalPersonModel()

-    {

-        if (_optionalPersonModel == null)

-            buildPersonModels();

-

-        return _optionalPersonModel;

-    }

-

-    public synchronized void clear()

-    {

-        _publisherModel = null;

-        _personModel = null;

-        _optionalPersonModel = null;

-    }

-

-    public void remoteExceptionDidOccur(RemoteExceptionEvent event)

-    {

-        clear();

-    }

-

-    private IPropertySelectionModel buildPublisherModel()

-    {

-        RemoteCallback<Publisher[]> callback = new RemoteCallback()

-        {

-            public Publisher[] doRemote() throws RemoteException

-            {

-                return _operations.getPublishers();

-            }

-        };

-

-        Publisher[] publishers = _remoteTemplate.execute(callback, "Error reading publishers.");

-

-        int count = Tapestry.size(publishers);

-

-        EntitySelectionModel model = new EntitySelectionModel();

-

-        model.add(null, "");

-

-        for (int i = 0; i < count; i++)

-            model.add(publishers[i].getId(), publishers[i].getName());

-

-        return model;

-    }

-

-    private void buildPersonModels()

-    {

-        Person[] persons = _remoteTemplate.getPersons();

-

-        int count = Tapestry.size(persons);

-

-        EntitySelectionModel requiredModel = new EntitySelectionModel();

-        EntitySelectionModel optionalModel = new EntitySelectionModel();

-

-        optionalModel.add(null, "");

-

-        for (int i = 0; i < count; i++)

-        {

-            Integer id = persons[i].getId();

-            String naturalName = persons[i].getNaturalName();

-

-            requiredModel.add(id, naturalName);

-            optionalModel.add(id, naturalName);

-        }

-

-        _personModel = requiredModel;

-        _optionalPersonModel = optionalModel;

-    }

-

-    public void setOperations(IOperations operations)

-    {

-        _operations = operations;

-    }

-

-    public void setRemoteTemplate(RemoteTemplate remoteTemplate)

-    {

-        _remoteTemplate = remoteTemplate;

-    }

-

-    public void setCoordinator(RemoteExceptionCoordinator coordinator)

-    {

-        _coordinator = coordinator;

-    }

-

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/RemoteCallback.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/RemoteCallback.java
deleted file mode 100644
index e6392f9..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/RemoteCallback.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import java.rmi.RemoteException;

-

-/**

- * Callback interface used when performing.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- * @param <T> the callback

- */

-public interface RemoteCallback<T>

-{

-    /**

-     * Invoked by {@link RemoteTemplate}.

-     * 

-     * @return

-     * @throws RemoteException

-     */

-    T doRemote() throws RemoteException;

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/RemoteTemplate.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/RemoteTemplate.java
deleted file mode 100644
index 3c4ca8c..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/RemoteTemplate.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import org.apache.tapestry.vlib.ejb.Book;

-import org.apache.tapestry.vlib.ejb.Person;

-

-/**

- * Used to execute a {@link org.apache.tapestry.vlib.services.RemoteCallback}. In addition,

- * provides a few very common operations.

- * 

- * @author Howard M. Lewis Ship

- */

-public interface RemoteTemplate

-{

-    /**

-     * Executes the callback within a retry loop; consumes any RemoteExceptions.

-     * 

-     * @param callback

-     *            the callback to execute

-     * @param errorMessage

-     *            used when the callback fails

-     * @return the return value of the callback

-     */

-    <T> T execute(RemoteCallback<T> callback, String errorMessage);

-

-    /**

-     * Reads a person, which is expected to exist.

-     * 

-     * @param personId

-     *            unique id for the person

-     * @return the Person

-     * @throws org.apache.hivemind.ApplicationRuntimeException

-     *             if the person does not exist, or if there are any other errors

-     */

-    Person getPerson(Integer personId);

-

-    /**

-     * Returns all persons, sorted by last name, then by first name.

-     */

-

-    Person[] getPersons();

-

-    /**

-     * Reads a book, which must exist.

-     * 

-     * @param bookId

-     *            unique id for the book

-     * @return the book

-     * @throws org.apache.hivemind.ApplicationRuntimeException

-     *             if the book does not exist, or if there are any other errors

-     */

-

-    Book getBook(Integer bookId);

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/RemoteTemplateImpl.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/RemoteTemplateImpl.java
deleted file mode 100644
index b8faea3..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/RemoteTemplateImpl.java
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import java.rmi.RemoteException;

-

-import javax.ejb.FinderException;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.lib.RemoteExceptionCoordinator;

-import org.apache.tapestry.vlib.ejb.Book;

-import org.apache.tapestry.vlib.ejb.IOperations;

-import org.apache.tapestry.vlib.ejb.Person;

-

-/**

- * Handles remote exceptions and retries.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class RemoteTemplateImpl implements RemoteTemplate

-{

-    private static final int MAX_ATTEMPTS = 2;

-

-    private RemoteExceptionCoordinator _coordinator;

-

-    private IOperations _operations;

-

-    public <T> T execute(RemoteCallback<T> callback, String errorMessage)

-    {

-        int attempt = 1;

-

-        while (true)

-        {

-            try

-            {

-                return callback.doRemote();

-            }

-            catch (RemoteException ex)

-            {

-                _coordinator.fireRemoteExceptionDidOccur(callback, ex);

-

-                if (attempt++ < MAX_ATTEMPTS)

-                    continue;

-

-                throw new ApplicationRuntimeException(errorMessage, ex);

-            }

-

-        }

-    }

-

-    public Person getPerson(final Integer personId)

-    {

-        RemoteCallback<Person> callback = new RemoteCallback()

-        {

-            public Person doRemote() throws RemoteException

-            {

-                try

-                {

-                    return _operations.getPerson(personId);

-                }

-                catch (FinderException ex)

-                {

-                    throw new ApplicationRuntimeException(ex);

-                }

-            }

-        };

-

-        return execute(callback, "Unable to read Person #" + personId + ".");

-    }

-

-    public Person[] getPersons()

-    {

-        RemoteCallback<Person[]> callback = new RemoteCallback()

-        {

-            public Person[] doRemote() throws RemoteException

-            {

-                return _operations.getPersons();

-            }

-        };

-

-        return execute(callback, "Error reading application users.");

-    }

-

-    public Book getBook(final Integer bookId)

-    {

-        RemoteCallback<Book> callback = new RemoteCallback()

-        {

-            public Book doRemote() throws RemoteException

-            {

-                try

-                {

-                    return _operations.getBook(bookId);

-                }

-                catch (FinderException ex)

-                {

-                    throw new ApplicationRuntimeException(ex);

-                }

-            }

-        };

-

-        return execute(callback, "Unable to read Book #" + bookId + ".");

-    }

-

-    public void setCoordinator(RemoteExceptionCoordinator coordinator)

-    {

-        _coordinator = coordinator;

-    }

-

-    public void setOperations(IOperations operations)

-    {

-        _operations = operations;

-    }

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ViewPageEncoder.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ViewPageEncoder.java
deleted file mode 100644
index d28921c..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/ViewPageEncoder.java
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import org.apache.tapestry.Tapestry;

-import org.apache.tapestry.TapestryUtils;

-import org.apache.tapestry.engine.ServiceEncoder;

-import org.apache.tapestry.engine.ServiceEncoding;

-import org.apache.tapestry.services.ServiceConstants;

-

-/**

- * Specialized encdoder for the {@link org.apache.tapestry.vlib.pages.ViewBook} and

- * {@link org.apache.tapestry.vlib.pages.ViewPerson} pages.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class ViewPageEncoder implements ServiceEncoder

-{

-    private String _pageName;

-

-    private String _url;

-

-    public void encode(ServiceEncoding encoding)

-    {

-        if (!isExternalService(encoding))

-            return;

-

-        String pageName = encoding.getParameterValue(ServiceConstants.PAGE);

-

-        if (!pageName.equals(_pageName))

-            return;

-

-        StringBuilder builder = new StringBuilder(_url);

-

-        String[] params = encoding.getParameterValues(ServiceConstants.PARAMETER);

-

-        // params will not be null; in fact, pretty sure it will consist

-        // of just one element (an integer).

-

-        for (String param : params)

-        {

-            builder.append("/");

-            builder.append(param);

-        }

-

-        encoding.setServletPath(builder.toString());

-

-        encoding.setParameterValue(ServiceConstants.SERVICE, null);

-        encoding.setParameterValue(ServiceConstants.PAGE, null);

-        encoding.setParameterValue(ServiceConstants.PARAMETER, null);

-    }

-

-    private boolean isExternalService(ServiceEncoding encoding)

-    {

-        String service = encoding.getParameterValue(ServiceConstants.SERVICE);

-

-        return service.equals(Tapestry.EXTERNAL_SERVICE);

-    }

-

-    public void decode(ServiceEncoding encoding)

-    {

-        String servletPath = encoding.getServletPath();

-

-        if (!servletPath.equals(_url))

-            return;

-

-        // Skip the URL and the slash, end up with a "/" seperated series of

-        // strings.

-

-        String pathInfo = encoding.getPathInfo();

-

-        // Skip the leading slash, then split the rest at each slash

-

-        String[] params = TapestryUtils.split(pathInfo.substring(1), '/');

-

-        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.EXTERNAL_SERVICE);

-        encoding.setParameterValue(ServiceConstants.PAGE, _pageName);

-        encoding.setParameterValues(ServiceConstants.PARAMETER, params);

-    }

-

-    public void setPageName(String pageName)

-    {

-        _pageName = pageName;

-    }

-

-    public void setUrl(String url)

-    {

-        _url = url;

-    }

-

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/VlibStaleSessionPresenter.java b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/VlibStaleSessionPresenter.java
deleted file mode 100644
index 73c6b0f..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/VlibStaleSessionPresenter.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import java.io.IOException;

-

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.StaleSessionException;

-import org.apache.tapestry.error.StaleSessionExceptionPresenter;

-import org.apache.tapestry.services.ResponseRenderer;

-import org.apache.tapestry.vlib.IMessageProperty;

-

-/**

- * Implementation of {@link org.apache.tapestry.error.StaleSessionExceptionPresenter} that returns

- * the user to the home page and displays an error message there.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class VlibStaleSessionPresenter implements StaleSessionExceptionPresenter

-{

-    private ResponseRenderer _responseRenderer;

-

-    public void presentStaleSessionException(IRequestCycle cycle, StaleSessionException cause)

-            throws IOException

-    {

-        IMessageProperty home = (IMessageProperty) cycle.getPage("Home");

-

-        home.setMessage("You have been logged out due to inactivity.");

-

-        cycle.activate(home);

-

-        _responseRenderer.renderResponse(cycle);

-    }

-

-    public void setResponseRenderer(ResponseRenderer responseRenderer)

-    {

-        _responseRenderer = responseRenderer;

-    }

-

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/package.html b/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/package.html
deleted file mode 100644
index c0a30b1..0000000
--- a/tapestry/tapestry-examples/Vlib/src/java/org/apache/tapestry/vlib/services/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Server
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Vlib/src/test/README.txt b/tapestry/tapestry-examples/Vlib/src/test/README.txt
deleted file mode 100644
index 2328423..0000000
--- a/tapestry/tapestry-examples/Vlib/src/test/README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Placeholder to keep this directory in existence.
-
-HiveBuild scripts require a src/test directory (a bug to be fixed).
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/DiscardSessionFilterTest.java b/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/DiscardSessionFilterTest.java
deleted file mode 100644
index 0b326e5..0000000
--- a/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/DiscardSessionFilterTest.java
+++ /dev/null
@@ -1,202 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-

-import java.io.IOException;

-

-import org.apache.hivemind.test.HiveMindTestCase;

-import org.apache.tapestry.services.WebRequestServicer;

-import org.apache.tapestry.web.WebRequest;

-import org.apache.tapestry.web.WebResponse;

-import org.apache.tapestry.web.WebSession;

-

-import static org.easymock.EasyMock.expect;

-

-/**

- * Tests for {@link org.apache.tapestry.vlib.services.DiscardSessionFilter}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class DiscardSessionFilterTest extends HiveMindTestCase

-{

-    public void testNormal() throws Exception

-    {

-        WebRequest request = newRequest();

-        WebResponse response = newResponse();

-        WebRequestServicer servicer = newServicer();

-        ApplicationLifecycle lifecycle = newLifecycle();

-

-        servicer.service(request, response);

-

-        trainGetDiscardSession(lifecycle, false);

-

-        replayControls();

-

-        DiscardSessionFilter filter = new DiscardSessionFilter();

-

-        filter.setApplicationLifecycle(lifecycle);

-

-        filter.service(request, response, servicer);

-

-        verifyControls();

-    }

-

-    public void testDiscard() throws Exception

-    {

-        WebRequest request = newRequest();

-        WebResponse response = newResponse();

-        WebRequestServicer servicer = newServicer();

-        ApplicationLifecycle lifecycle = newLifecycle();

-        WebSession session = newSession();

-

-        servicer.service(request, response);

-

-        trainGetDiscardSession(lifecycle, true);

-

-        trainGetSession(request, session);

-

-        session.invalidate();

-

-        replayControls();

-

-        DiscardSessionFilter filter = new DiscardSessionFilter();

-

-        filter.setApplicationLifecycle(lifecycle);

-

-        filter.service(request, response, servicer);

-

-        verifyControls();

-    }

-

-    public void testDiscardNoSession() throws Exception

-    {

-        WebRequest request = newRequest();

-        WebResponse response = newResponse();

-        WebRequestServicer servicer = newServicer();

-        ApplicationLifecycle lifecycle = newLifecycle();

-

-        servicer.service(request, response);

-

-        trainGetDiscardSession(lifecycle, true);

-

-        trainGetSession(request, null);

-

-        replayControls();

-

-        DiscardSessionFilter filter = new DiscardSessionFilter();

-

-        filter.setApplicationLifecycle(lifecycle);

-

-        filter.service(request, response, servicer);

-

-        verifyControls();

-    }

-

-    public void testDiscardSessionIllegalState() throws Exception

-    {

-        WebRequest request = newRequest();

-        WebResponse response = newResponse();

-        WebRequestServicer servicer = newServicer();

-        ApplicationLifecycle lifecycle = newLifecycle();

-        WebSession session = newSession();

-

-        servicer.service(request, response);

-

-        trainGetDiscardSession(lifecycle, true);

-

-        trainGetSession(request, session);

-

-        session.invalidate();

-        setThrowable(session, new IllegalStateException());

-

-        replayControls();

-

-        DiscardSessionFilter filter = new DiscardSessionFilter();

-

-        filter.setApplicationLifecycle(lifecycle);

-

-        filter.service(request, response, servicer);

-

-        verifyControls();

-    }

-

-    public void testDiscardCheckAfterException() throws Exception

-    {

-        WebRequest request = newRequest();

-        WebResponse response = newResponse();

-        WebRequestServicer servicer = newServicer();

-        ApplicationLifecycle lifecycle = newLifecycle();

-

-        servicer.service(request, response);

-        setThrowable(servicer, new IOException());

-

-        trainGetDiscardSession(lifecycle, false);

-

-        replayControls();

-

-        DiscardSessionFilter filter = new DiscardSessionFilter();

-

-        filter.setApplicationLifecycle(lifecycle);

-

-        try

-        {

-            filter.service(request, response, servicer);

-            unreachable();

-        }

-        catch (IOException ex)

-        {

-            // Expected.

-        }

-

-        verifyControls();

-    }

-

-    private ApplicationLifecycle newLifecycle()

-    {

-        return (ApplicationLifecycle) newMock(ApplicationLifecycle.class);

-    }

-

-    private WebRequestServicer newServicer()

-    {

-        return (WebRequestServicer) newMock(WebRequestServicer.class);

-    }

-

-    private WebResponse newResponse()

-    {

-        return (WebResponse) newMock(WebResponse.class);

-    }

-

-    private WebRequest newRequest()

-    {

-        return (WebRequest) newMock(WebRequest.class);

-    }

-

-    private WebSession newSession()

-    {

-        return (WebSession) newMock(WebSession.class);

-    }

-

-    private void trainGetSession(WebRequest request, WebSession session)

-    {

-        expect(request.getSession(false)).andReturn(session);

-    }

-

-    private void trainGetDiscardSession(ApplicationLifecycle lifecycle, boolean discard)

-    {

-        expect(lifecycle.getDiscardSession()).andReturn(discard);

-    }

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/ErrorPresenterTest.java b/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/ErrorPresenterTest.java
deleted file mode 100644
index a53229f..0000000
--- a/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/ErrorPresenterTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import static org.easymock.EasyMock.*;

-import org.apache.hivemind.test.HiveMindTestCase;

-import org.apache.tapestry.IPage;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.engine.state.ApplicationStateManager;

-import org.apache.tapestry.vlib.IErrorProperty;

-import org.apache.tapestry.vlib.Visit;

-

-/**

- * Tests for {@link org.apache.tapestry.vlib.services.ErrorPresenterImpl}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class ErrorPresenterTest extends HiveMindTestCase

-{

-

-    protected ErrorPresenter newErrorPresenter(ApplicationStateManager manager)

-    {

-        ErrorPresenterImpl result = new ErrorPresenterImpl();

-        result.setStateManager(manager);

-

-        return result;

-    }

-

-    protected void trainGetPage(IRequestCycle cycle, String pageName, IPage page)

-    {

-        expect(cycle.getPage(pageName)).andReturn(page);

-    }

-

-    protected Visit newVisit()

-    {

-        return (Visit) newMock(Visit.class);

-    }

-

-    public void testNoVisit()

-    {

-        IRequestCycle cycle = newCycle();

-        IErrorProperty page = newPage();

-        ApplicationStateManager manager = newApplicationStateManager();

-

-        expect(manager.exists("visit")).andReturn(false);

-

-        trainGetPage(cycle, "Home", page);

-

-        page.setError("An error.");

-

-        cycle.activate(page);

-

-        replayControls();

-

-        newErrorPresenter(manager).presentError("An error.", cycle);

-

-        verifyControls();

-    }

-

-    public void testLoggedOff()

-    {

-        IRequestCycle cycle = newCycle();

-        IErrorProperty page = newPage();

-        ApplicationStateManager manager = newApplicationStateManager();

-        Visit visit = newVisit();

-

-        expect(manager.exists("visit")).andReturn(true);

-

-        expect(manager.get("visit")).andReturn(visit);

-

-        expect(visit.isUserLoggedIn()).andReturn(false);

-

-        trainGetPage(cycle, "Home", page);

-

-        page.setError("An error.");

-

-        cycle.activate(page);

-

-        replayControls();

-

-        newErrorPresenter(manager).presentError("An error.", cycle);

-

-        verifyControls();

-    }

-

-    private ApplicationStateManager newApplicationStateManager()

-    {

-        return (ApplicationStateManager) newMock(ApplicationStateManager.class);

-    }

-

-    private IErrorProperty newPage()

-    {

-        return (IErrorProperty) newMock(IErrorProperty.class);

-    }

-

-    private IRequestCycle newCycle()

-    {

-        return (IRequestCycle) newMock(IRequestCycle.class);

-    }

-

-    public void testLoggedIn()

-    {

-        IRequestCycle cycle = newCycle();

-        IErrorProperty page = newPage();

-        ApplicationStateManager manager = newApplicationStateManager();

-        Visit visit = newVisit();

-

-        expect(manager.exists("visit")).andReturn(true);

-

-        expect(manager.get("visit")).andReturn(visit);

-

-        expect(visit.isUserLoggedIn()).andReturn(true);

-

-        trainGetPage(cycle, "MyLibrary", page);

-

-        page.setError("An error.");

-

-        cycle.activate(page);

-

-        replayControls();

-

-        newErrorPresenter(manager).presentError("An error.", cycle);

-

-        verifyControls();

-    }

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/RemoteTemplateTest.java b/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/RemoteTemplateTest.java
deleted file mode 100644
index 595d966..0000000
--- a/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/RemoteTemplateTest.java
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import static org.easymock.EasyMock.expect;

-

-import java.rmi.RemoteException;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.lib.RemoteExceptionCoordinator;

-import org.apache.hivemind.test.HiveMindTestCase;

-import org.apache.tapestry.vlib.ejb.Book;

-import org.apache.tapestry.vlib.ejb.IOperations;

-import org.apache.tapestry.vlib.ejb.Person;

-

-/**

- * Tests for {@link org.apache.tapestry.vlib.services.RemoteTemplateImpl}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class RemoteTemplateTest extends HiveMindTestCase

-{

-    public void testSuccess()

-    {

-        RemoteTemplate rt = new RemoteTemplateImpl();

-        RemoteCallback callback = new RemoteCallback()

-        {

-            public Object doRemote() throws RemoteException

-            {

-                return "flintstone";

-            }

-        };

-

-        Object actual = rt.execute(callback, "my error message");

-

-        assertEquals("flintstone", actual);

-    }

-

-    public void testSuccessAfterRetry() throws Exception

-    {

-        RemoteCallback callback = newCallback();

-        RemoteExceptionCoordinator coordinator = newCoordinator();

-

-        Throwable t = new RemoteException();

-

-        trainDoRemote(callback, t);

-

-        coordinator.fireRemoteExceptionDidOccur(callback, t);

-

-        expect(callback.doRemote()).andReturn("rubble");

-

-        replayControls();

-

-        RemoteTemplateImpl rt = new RemoteTemplateImpl();

-

-        rt.setCoordinator(coordinator);

-

-        assertEquals("rubble", rt.execute(callback, "my error message"));

-

-        verifyControls();

-    }

-

-    public void testFailure() throws Exception

-    {

-        RemoteCallback callback = newCallback();

-        RemoteExceptionCoordinator coordinator = newCoordinator();

-

-        Throwable t1 = new RemoteException();

-        Throwable t2 = new RemoteException();

-

-        trainDoRemote(callback, t1);

-

-        coordinator.fireRemoteExceptionDidOccur(callback, t1);

-

-        trainDoRemote(callback, t2);

-

-        coordinator.fireRemoteExceptionDidOccur(callback, t2);

-

-        replayControls();

-

-        RemoteTemplateImpl rt = new RemoteTemplateImpl();

-

-        rt.setCoordinator(coordinator);

-

-        try

-        {

-            rt.execute(callback, "error message");

-            unreachable();

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertEquals("error message", ex.getMessage());

-            assertSame(t2, ex.getRootCause());

-        }

-

-        verifyControls();

-    }

-

-    public void testGetPerson() throws Exception

-    {

-        Integer personId = new Integer(33);

-

-        IOperations operations = newOperations();

-        Person person = new Person(new Object[Person.NUM_COLUMNS]);

-

-        expect(operations.getPerson(personId)).andReturn(person);

-

-        replayControls();

-

-        RemoteTemplateImpl template = new RemoteTemplateImpl();

-        template.setOperations(operations);

-

-        assertSame(person, template.getPerson(personId));

-

-        verifyControls();

-    }

-

-    public void testGetPersons() throws Exception

-    {

-        IOperations operations = newOperations();

-        Person[] persons = new Person[0];

-

-        expect(operations.getPersons()).andReturn(persons);

-

-        replayControls();

-

-        RemoteTemplateImpl template = new RemoteTemplateImpl();

-        template.setOperations(operations);

-

-        assertSame(persons, template.getPersons());

-

-        verifyControls();

-    }

-

-    public void testGetBook() throws Exception

-    {

-        Integer bookId = new Integer(33);

-

-        IOperations operations = newOperations();

-        Book book = new Book(new Object[Book.NUM_COLUMNS]);

-

-        expect(operations.getBook(bookId)).andReturn(book);

-

-        replayControls();

-

-        RemoteTemplateImpl template = new RemoteTemplateImpl();

-        template.setOperations(operations);

-

-        assertSame(book, template.getBook(bookId));

-

-        verifyControls();

-    }

-

-    private IOperations newOperations()

-    {

-        return (IOperations) newMock(IOperations.class);

-    }

-

-    private void trainDoRemote(RemoteCallback callback, Throwable t) throws RemoteException

-    {

-        expect(callback.doRemote()).andThrow(t);

-    }

-

-    private RemoteExceptionCoordinator newCoordinator()

-    {

-        return (RemoteExceptionCoordinator) newMock(RemoteExceptionCoordinator.class);

-    }

-

-    private RemoteCallback newCallback()

-    {

-        return (RemoteCallback) newMock(RemoteCallback.class);

-    }

-

-}

diff --git a/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/ViewPageEncoderTest.java b/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/ViewPageEncoderTest.java
deleted file mode 100644
index e9ef868..0000000
--- a/tapestry/tapestry-examples/Vlib/src/test/org/apache/tapestry/vlib/services/ViewPageEncoderTest.java
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.vlib.services;

-

-import static org.easymock.EasyMock.aryEq;

-import static org.easymock.EasyMock.eq;

-import static org.easymock.EasyMock.expect;

-

-import org.apache.hivemind.test.HiveMindTestCase;

-import org.apache.tapestry.Tapestry;

-import org.apache.tapestry.engine.ServiceEncoding;

-import org.apache.tapestry.services.ServiceConstants;

-

-/**

- * Tests for {@link org.apache.tapestry.vlib.services.ViewPageEncoder}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class ViewPageEncoderTest extends HiveMindTestCase

-{

-    private ViewPageEncoder _encoder;

-

-    {

-        _encoder = new ViewPageEncoder();

-        _encoder.setPageName("ViewBook");

-        _encoder.setUrl("/book");

-    }

-

-    public void testEncodeWrongService()

-    {

-        ServiceEncoding encoding = newEncoding();

-

-        trainGetParameterValue(encoding, ServiceConstants.SERVICE, "wrong");

-

-        replayControls();

-

-        _encoder.encode(encoding);

-

-        verifyControls();

-    }

-

-    public void testEncodeWrongPage()

-    {

-        ServiceEncoding encoding = newEncoding();

-

-        trainGetParameterValue(encoding, ServiceConstants.SERVICE, Tapestry.EXTERNAL_SERVICE);

-        trainGetParameterValue(encoding, ServiceConstants.PAGE, "Foo");

-

-        replayControls();

-

-        _encoder.encode(encoding);

-

-        verifyControls();

-    }

-

-    public void testEncodeMatch()

-    {

-        ServiceEncoding encoding = newEncoding();

-

-        trainGetParameterValue(encoding, ServiceConstants.SERVICE, Tapestry.EXTERNAL_SERVICE);

-        trainGetParameterValue(encoding, ServiceConstants.PAGE, "ViewBook");

-        trainGetParameterValues(encoding, ServiceConstants.PARAMETER, new String[]

-        { "1234" });

-

-        encoding.setServletPath("/book/1234");

-        encoding.setParameterValue(ServiceConstants.SERVICE, null);

-        encoding.setParameterValue(ServiceConstants.PAGE, null);

-        encoding.setParameterValue(ServiceConstants.PARAMETER, null);

-

-        replayControls();

-

-        _encoder.encode(encoding);

-

-        verifyControls();

-    }

-

-    public void testDecodeWrongURL()

-    {

-        ServiceEncoding encoding = newEncoding();

-

-        trainGetServletPath(encoding, "/Home.html");

-

-        replayControls();

-

-        _encoder.decode(encoding);

-

-        verifyControls();

-    }

-

-    public void testDecodeMatch()

-    {

-        ServiceEncoding encoding = newEncoding();

-

-        trainGetServletPath(encoding, "/book");

-        trainGetPathInfo(encoding, "/2001");

-

-        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.EXTERNAL_SERVICE);

-        encoding.setParameterValue(ServiceConstants.PAGE, "ViewBook");

-        encoding.setParameterValues(eq(ServiceConstants.PARAMETER), aryEq(new String[]

-        { "2001" }));

-        

-        replayControls();

-

-        _encoder.decode(encoding);

-

-        verifyControls();

-    }

-

-    protected void trainGetPathInfo(ServiceEncoding encoding, String pathInfo)

-    {

-        expect(encoding.getPathInfo()).andReturn(pathInfo);

-    }

-

-    private void trainGetServletPath(ServiceEncoding encoding, String servletPath)

-    {

-        expect(encoding.getServletPath()).andReturn(servletPath);

-    }

-

-    private void trainGetParameterValues(ServiceEncoding encoding, String name, String[] values)

-    {

-        expect(encoding.getParameterValues(name)).andReturn(values);

-    }

-

-    private ServiceEncoding newEncoding()

-    {

-        return (ServiceEncoding) newMock(ServiceEncoding.class);

-    }

-

-    private void trainGetParameterValue(ServiceEncoding encoding, String name, String value)

-    {

-        expect(encoding.getParameterValue(name)).andReturn(value);

-    }

-}

diff --git a/tapestry/tapestry-examples/Vlib/upgrade-notes.txt b/tapestry/tapestry-examples/Vlib/upgrade-notes.txt
deleted file mode 100644
index 593dfcc..0000000
--- a/tapestry/tapestry-examples/Vlib/upgrade-notes.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-Changed SortColumn from (common-lang) Enum to JDK 1.5 enum.
-
-VlibLibraryEngine
-
-activateExceptionPage()
-	- Changed signature (ResponseOutputStream no longer exists)
-	
-handleStaleSessionException()
-	- Changed signature (ResponseOutputStream no longer exists)
-
-
-Border.java
-
-	getBrowserBinding()
-		- No longer exists (no binding properties, just connected parameter properties)
-	selectBrowserPage() (listener method)
-		- removed IRequestCycle parameter (no longer needed)
-		- added page parameter
-	
-Login.java
-	- Changed interface from PageRenderListener to PageBeginRenderListener
-	loginUser()
-		- IEngine.getServletPath() has been removed, as has RequestContext.addCookie()
-		- Replaced with calls to infrastructure:cookieSource [TAPESTRY-438]
-		- Replace IEngine.forgetPage() with IRequestCycle.forgetPage()
-	pageBeginRender()
-		- Replaced with calls to infrastructure:cookieSource (to read the user's email)
-	
-application.xml
-	Can't deploy vlib.war as "/" due to conflict with built-in JBoss default app, 
-	deployed as "/vlib" (for the moment)
-	
-Publisher.script
-	org.apache.tapestry.form.AbstractTextField no longer exists, replaced with
-	org.apache.tapestry.form.IFormComponent
-	
-EditBook.html
-	Inline inputPublisher conflicted with <component> in EditBook.page and was removed
-	Converted Form to specified component
-	Converted ValidFields to TextFields
-	Removed the Hidden for the bookId property
-	
-EditBook.page
-	Updated to 4.0 DTD
-	Removed <property-specification>s
-	Made displayName attributes reference global messages keys
-	
-EditBook.java
-	Change return type of formSubmit() to IPage
-	Used @Message annotation
-	Made the bookId property persist on the client
-		
-
-	
-vlib.css
-	Added IMG {border:none;} because Tapestry Image/Rollover/etc. components 
-	no longer render border="0" automatically.
-	
-web.xml/hivemodule.xml
-	Added boilerplate friendly URL support
-	
-	
-vlib.application
-	Set up org.apache.tapestry.vlib.pages as the default page package
-	
-vlib.properties
-	Created to hold common strings
-	
-Protected.java
-	Made getValidationDelegate() and abstract property, with @Bean
-	Uses @InjectState and @InjectPage inside pageValidate()
-	
-MyLibrary.html
-	Used If not Conditional
-	
-MyLibrary.java
-	Use @Persist for sortColumn descending, ownedQuery properties
-	Set default for sortColumn in finishLoad()
-	Use @InjectComponent for browser property
-	
-ConfirmBookDelete.java
-	@Meta for page-type
-	
-EditBook.html
-	Made use of proper binding prefixes
-	
-Border
-	Moved parameters to Border.java using @Parameter
-	Converted @Conditional to @If
-	Converted XML to 4.0 DTD
-	Made use of binding prefixes
-	
-BookMatches
-	Standard changes
-	
-BorrowedBooks
-	Standard changes
-	
-		
-	
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/VlibBeans/.cvsignore b/tapestry/tapestry-examples/VlibBeans/.cvsignore
deleted file mode 100644
index d366d2e..0000000
--- a/tapestry/tapestry-examples/VlibBeans/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-classes
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/VlibBeans/pom.xml b/tapestry/tapestry-examples/VlibBeans/pom.xml
deleted file mode 100644
index 08de928..0000000
--- a/tapestry/tapestry-examples/VlibBeans/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-VlibBeans</artifactId>
-    <packaging>jar</packaging>
-    <version>4.1.2-SNAPSHOT</version>
-    <!-- This should change to tapestry-project -->
-    <parent>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>tapestry-examples</artifactId>
-        <version>4.1.2-SNAPSHOT</version>
-    </parent>
-    <name>Tapestry Virtual Library (Beans)</name>
-    <inceptionYear>2006</inceptionYear>
-    
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-framework</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-annotations</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-contrib</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>jboss</groupId>
-            <artifactId>jboss-j2ee</artifactId>
-            <version>4.0.2</version>
-        </dependency>          
-    </dependencies>
-    
-    <build>
-        <sourceDirectory>src/java</sourceDirectory>
-    </build>
-</project>
diff --git a/tapestry/tapestry-examples/VlibBeans/src/descriptor/META-INF/ejb-jar.xml b/tapestry/tapestry-examples/VlibBeans/src/descriptor/META-INF/ejb-jar.xml
deleted file mode 100644
index c31c2dd..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/descriptor/META-INF/ejb-jar.xml
+++ /dev/null
@@ -1,290 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" 
- "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
-<ejb-jar>
-  <enterprise-beans>
-    <session>
-      <display-name>KeyAllocator</display-name>
-      <ejb-name>KeyAllocator</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IKeyAllocatorHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IKeyAllocator</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.KeyAllocatorBean</ejb-class>
-      <session-type>Stateless</session-type>
-      <transaction-type>Container</transaction-type>
-      <env-entry>
-        <description>The number of keys to allocate in one database transaction</description>
-        <env-entry-name>blockSize</env-entry-name>
-        <env-entry-type>java.lang.Integer</env-entry-type>
-        <env-entry-value>50</env-entry-value>
-      </env-entry>
-      <resource-ref>
-        <description>DataSource connected to the vlib database.</description>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-      </resource-ref>
-    </session>
-    <session>
-      <display-name>BookQuery</display-name>
-      <ejb-name>BookQuery</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IBookQueryHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IBookQuery</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.BookQueryBean</ejb-class>
-      <session-type>Stateful</session-type>
-      <transaction-type>Container</transaction-type>
-      <resource-ref>
-        <description>DataSource connected to the vlib database.</description>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-      </resource-ref>
-    </session>
-    <session>
-      <ejb-name>Operations</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IOperationsHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IOperations</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.OperationsBean</ejb-class>
-      <session-type>Stateless</session-type>
-      <transaction-type>Container</transaction-type>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Book</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IBookHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IBook</remote>
-      </ejb-ref>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Person</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IPersonHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IPerson</remote>
-      </ejb-ref>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Publisher</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IPublisherHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IPublisher</remote>
-      </ejb-ref>
-      <resource-ref>
-        <description>DataSource connected to the vlib database.</description>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-      </resource-ref>
-    </session>
-    <entity>
-      <display-name>Person</display-name>
-      <ejb-name>Person</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IPersonHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IPerson</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.PersonBean</ejb-class>
-      <persistence-type>Container</persistence-type>
-      <prim-key-class>java.lang.Integer</prim-key-class>
-      <reentrant>False</reentrant>
-      <abstract-schema-name>Person</abstract-schema-name>
-      <cmp-field>
-        <description>email address; must be unique, used as login identifier</description>
-        <field-name>email</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>secret password</description>
-        <field-name>password</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>first (individual) name</description>
-        <field-name>firstName</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>primary key</description>
-        <field-name>personId</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>last (family) name</description>
-        <field-name>lastName</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>If true, the user has been locked out of the system (for misconduct, or excessive invalid
-          passwords).</description>
-        <field-name>lockedOut</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>If true, the user is an administrator, who has priviledged access to adminstrate books and users.</description>
-        <field-name>admin</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>The time of last access to the system by the user; this is set when the user logs in.</description>
-        <field-name>lastAccess</field-name>
-      </cmp-field>
-      <primkey-field>personId</primkey-field>
-      <query>
-        <query-method>
-          <method-name>findByEmail</method-name>
-          <method-params>
-            <method-param>java.lang.String</method-param>
-          </method-params>
-        </query-method>
-        <ejb-ql>
-          <![CDATA[
-			select object(p)
-			from Person p
-			where p.email = ?1
-]]>
-        </ejb-ql>
-      </query>
-      <ejb-ref>
-        <description/>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IKeyAllocatorHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IKeyAllocator</remote>
-      </ejb-ref>
-    </entity>
-    <entity>
-      <display-name>Book</display-name>
-      <ejb-name>Book</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IBookHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IBook</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.BookBean</ejb-class>
-      <persistence-type>Container</persistence-type>
-      <prim-key-class>java.lang.Integer</prim-key-class>
-      <reentrant>False</reentrant>
-      <abstract-schema-name>Book</abstract-schema-name>
-      <cmp-field>
-        <description>Long description of book.</description>
-        <field-name>description</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Relationship to Publisher entity.</description>
-        <field-name>publisherId</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Relationship to Person entity (holder of book).</description>
-        <field-name>holderId</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>ISBN of book.</description>
-        <field-name>ISBN</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Primary key.</description>
-        <field-name>bookId</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Relationship to Person entity (owner of book).</description>
-        <field-name>ownerId</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Title of book.</description>
-        <field-name>title</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Name of book author</description>
-        <field-name>author</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>If true, the book is not visible except to the owner.</description>
-        <field-name>hidden</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>If true (the default), the book may be lent out.</description>
-        <field-name>lendable</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>The time at which the book was initially added to the database.</description>
-        <field-name>dateAdded</field-name>
-      </cmp-field>
-      <primkey-field>bookId</primkey-field>
-      <ejb-ref>
-        <description/>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IKeyAllocatorHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IKeyAllocator</remote>
-      </ejb-ref>
-    </entity>
-    <entity>
-      <display-name>Publisher</display-name>
-      <ejb-name>Publisher</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IPublisherHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IPublisher</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.PublisherBean</ejb-class>
-      <persistence-type>Container</persistence-type>
-      <prim-key-class>java.lang.Integer</prim-key-class>
-      <reentrant>False</reentrant>
-      <abstract-schema-name>Publisher</abstract-schema-name>
-      <cmp-field>
-        <field-name>name</field-name>
-      </cmp-field>
-      <cmp-field>
-        <field-name>publisherId</field-name>
-      </cmp-field>
-      <primkey-field>publisherId</primkey-field>
-      <query>
-        <query-method>
-          <method-name>findByName</method-name>
-          <method-params>
-            <method-param>java.lang.String</method-param>
-          </method-params>
-        </query-method>
-        <ejb-ql>
-          <![CDATA[
-			select object(p)
-			from Publisher p
-			where p.name = ?1
-]]>
-        </ejb-ql>
-      </query>
-      <ejb-ref>
-        <description/>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IKeyAllocatorHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IKeyAllocator</remote>
-      </ejb-ref>
-    </entity>
-  </enterprise-beans>
-  <assembly-descriptor>
-    <container-transaction>
-      <method>
-        <ejb-name>KeyAllocator</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <method>
-        <ejb-name>Person</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <method>
-        <ejb-name>Book</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <method>
-        <ejb-name>Publisher</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <method>
-        <ejb-name>BookQuery</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <method>
-        <ejb-name>Operations</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-  </assembly-descriptor>
-</ejb-jar>
diff --git a/tapestry/tapestry-examples/VlibBeans/src/descriptor/META-INF/jboss.xml b/tapestry/tapestry-examples/VlibBeans/src/descriptor/META-INF/jboss.xml
deleted file mode 100644
index dfe001b..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/descriptor/META-INF/jboss.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<jboss>
-  <secure>true</secure>
-  <resource-managers>
-    <resource-manager res-class="org.jboss.ejb.deployment.JDBCResource">
-      <res-name>jdbc/dataSource</res-name>
-      <res-jndi-name>java:/DefaultDS</res-jndi-name>
-    </resource-manager>
-    
-  </resource-managers>
-  <enterprise-beans>
-    <session>
-      <ejb-name>BookQuery</ejb-name>
-      <jndi-name>vlib/BookQuery</jndi-name>
-      <resource-ref>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <resource-name>jdbc/dataSource</resource-name>
-      </resource-ref>
-    </session>
-    <session>
-      <ejb-name>Operations</ejb-name>
-      <jndi-name>vlib/Operations</jndi-name>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Book</ejb-ref-name>
-        <jndi-name>vlib/Book</jndi-name>
-      </ejb-ref>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Person</ejb-ref-name>
-        <jndi-name>vlib/Person</jndi-name>
-      </ejb-ref>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Publisher</ejb-ref-name>
-        <jndi-name>vlib/Publisher</jndi-name>
-      </ejb-ref>
-      <resource-ref>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <resource-name>jdbc/dataSource</resource-name>
-      </resource-ref>
-    </session>
-    <session>
-      <ejb-name>KeyAllocator</ejb-name>
-      <jndi-name>vlib/KeyAllocator</jndi-name>
-      <resource-ref>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <resource-name>jdbc/dataSource</resource-name>
-      </resource-ref>
-    </session>
-    
-    
-    <entity>
-      <ejb-name>Book</ejb-name>
-      <jndi-name>vlib/Book</jndi-name>
-      <ejb-ref>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <jndi-name>vlib/KeyAllocator</jndi-name>
-      </ejb-ref>
-    </entity>
-    <entity>
-      <ejb-name>Publisher</ejb-name>
-      <jndi-name>vlib/Publisher</jndi-name>
-      <ejb-ref>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <jndi-name>vlib/KeyAllocator</jndi-name>
-      </ejb-ref>
-    </entity>
-    <entity>
-      <ejb-name>Person</ejb-name>
-      <jndi-name>vlib/Person</jndi-name>
-      <ejb-ref>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <jndi-name>vlib/KeyAllocator</jndi-name>
-      </ejb-ref>
-    </entity>
-   
-    
-  </enterprise-beans>
-</jboss>
diff --git a/tapestry/tapestry-examples/VlibBeans/src/descriptor/META-INF/jbosscmp-jdbc.xml b/tapestry/tapestry-examples/VlibBeans/src/descriptor/META-INF/jbosscmp-jdbc.xml
deleted file mode 100644
index 3fcfebe..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/descriptor/META-INF/jbosscmp-jdbc.xml
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-  <!DOCTYPE jbosscmp-jdbc PUBLIC
-      "-//JBoss//DTD JBOSSCMP-JDBC 3.0//EN"
-      "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_0.dtd">
-<jbosscmp-jdbc>
-  <defaults>
-    <datasource>java:/DefaultDS</datasource>
-    <datasource-mapping>Hypersonic SQL</datasource-mapping>
-  </defaults>
-  <enterprise-beans>
-    <entity>
-      <ejb-name>Book</ejb-name>
-      <table-name>BOOK</table-name>
-      <cmp-field>
-        <field-name>author</field-name>
-        <column-name>AUTHOR</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(100)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>holderId</field-name>
-        <column-name>HOLDER_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>publisherId</field-name>
-        <column-name>PUBLISHER_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>ownerId</field-name>
-        <column-name>OWNER_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>title</field-name>
-        <column-name>TITLE</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(100)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>description</field-name>
-        <column-name>DESCRIPTION</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(2000)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>ISBN</field-name>
-        <column-name>ISBN</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(20)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>bookId</field-name>
-        <column-name>BOOK_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>hidden</field-name>
-        <column-name>HIDDEN</column-name>
-        <jdbc-type>BIT</jdbc-type>
-        <sql-type>BIT</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>lendable</field-name>
-        <column-name>LENDABLE</column-name>
-        <jdbc-type>BIT</jdbc-type>
-        <sql-type>BIT</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>dateAdded</field-name>
-        <column-name>DATE_ADDED</column-name>
-        <jdbc-type>TIMESTAMP</jdbc-type>
-        <sql-type>TIMESTAMP</sql-type>
-      </cmp-field>
-    </entity>
-    <entity>
-      <ejb-name>Person</ejb-name>
-      <table-name>PERSON</table-name>
-      <cmp-field>
-        <field-name>email</field-name>
-        <column-name>EMAIL</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(60)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>firstName</field-name>
-        <column-name>FIRST_NAME</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(30)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>password</field-name>
-        <column-name>PASSWD</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(20)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>personId</field-name>
-        <column-name>PERSON_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>lastName</field-name>
-        <column-name>LAST_NAME</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(30)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>lockedOut</field-name>
-        <column-name>LOCKED_OUT</column-name>
-        <jdbc-type>BIT</jdbc-type>
-        <sql-type>BIT</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>admin</field-name>
-        <column-name>ADMIN</column-name>
-        <jdbc-type>BIT</jdbc-type>
-        <sql-type>BIT</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>lastAccess</field-name>
-        <column-name>LAST_ACCESS</column-name>
-        <jdbc-type>TIMESTAMP</jdbc-type>
-        <sql-type>TIMESTAMP</sql-type>
-      </cmp-field>
-    </entity>
-    <entity>
-      <ejb-name>Publisher</ejb-name>
-      <table-name>PUBLISHER</table-name>
-      <cmp-field>
-        <field-name>publisherId</field-name>
-        <column-name>PUBLISHER_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>name</field-name>
-        <column-name>NAME</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(40)</sql-type>
-      </cmp-field>
-    </entity>
-  </enterprise-beans>
-</jbosscmp-jdbc>
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/Book.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/Book.java
deleted file mode 100644
index 5a261e4..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/Book.java
+++ /dev/null
@@ -1,203 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.io.Serializable;
-import java.sql.Timestamp;
-
-/**
- * Represents a single result row from a {@link IBookQuery}. In effect, this is a light-wieght,
- * serializable, read-only version of an {@link IBook} bean, plus it contains the owner and holder
- * name (which means we don't have to go find the correct {@link IPerson} to dig out the name).
- * <p>
- * This is provided for efficient access when doing various queries.
- * 
- * @author Howard Lewis Ship
- */
-
-public class Book implements Serializable
-{
-    /**
-     * Column index for the Book's primary key.
-     */
-
-    public static final int ID_COLUMN = 0;
-
-    /**
-     * Column index for the book title.
-     */
-
-    public static final int TITLE_COLUMN = 1;
-
-    public static final int DESCRIPTION_COLUMN = 2;
-
-    public static final int ISBN_COLUMN = 3;
-
-    public static final int OWNER_ID_COLUMN = 4;
-
-    /**
-     * Column index for a presentable version of the holder's name.
-     * 
-     * @see IPerson#getNaturalName()
-     */
-
-    public static final int OWNER_NAME_COLUMN = 5;
-
-    public static final int HOLDER_ID_COLUMN = 6;
-
-    public static final int HOLDER_NAME_COLUMN = 7;
-
-    public static final int PUBLISHER_ID_COLUMN = 8;
-
-    public static final int PUBLISHER_NAME_COLUMN = 9;
-
-    public static final int AUTHOR_COLUMN = 10;
-
-    public static final int HIDDEN_COLUMN = 11;
-
-    public static final int LENDABLE_COLUMN = 12;
-
-    public static final int DATE_ADDED_COLUMN = 13;
-
-    /**
-     * Number of columns in the result.
-     */
-
-    public static final int NUM_COLUMNS = 14;
-
-    private static final long serialVersionUID = -3423550323411938995L;
-
-    private Object[] _columns;
-
-    /**
-     * Constructs a new BookQueryResult, making an internal copy of the columns passed.
-     */
-
-    public Book(Object[] columns)
-    {
-        if (columns == null)
-            throw new IllegalArgumentException("Must provide a non-null columns.");
-
-        if (columns.length != NUM_COLUMNS)
-            throw new IllegalArgumentException("Wrong number of columns for a Book.");
-
-        this._columns = new Object[NUM_COLUMNS];
-        System.arraycopy(columns, 0, this._columns, 0, NUM_COLUMNS);
-    }
-
-    private Object get(int index)
-    {
-        return _columns[index];
-    }
-
-    public Integer getId()
-    {
-        return (Integer) get(ID_COLUMN);
-    }
-
-    public String getTitle()
-    {
-        return (String) get(TITLE_COLUMN);
-    }
-
-    public String getDescription()
-    {
-        return (String) get(DESCRIPTION_COLUMN);
-    }
-
-    public String getISBN()
-    {
-        return (String) get(ISBN_COLUMN);
-    }
-
-    public Integer getOwnerId()
-    {
-        return (Integer) get(OWNER_ID_COLUMN);
-    }
-
-    public String getOwnerName()
-    {
-        return (String) get(OWNER_NAME_COLUMN);
-    }
-
-    public Integer getHolderId()
-    {
-        return (Integer) get(HOLDER_ID_COLUMN);
-    }
-
-    public String getHolderName()
-    {
-        return (String) get(HOLDER_NAME_COLUMN);
-    }
-
-    public Integer getPublisherId()
-    {
-        return (Integer) get(PUBLISHER_ID_COLUMN);
-    }
-
-    public String getPublisherName()
-    {
-        return (String) get(PUBLISHER_NAME_COLUMN);
-    }
-
-    public String getAuthor()
-    {
-        return (String) get(AUTHOR_COLUMN);
-    }
-
-    public Timestamp getDateAdded()
-    {
-        return (Timestamp) get(DATE_ADDED_COLUMN);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer("Book[");
-        buffer.append(get(ID_COLUMN));
-        buffer.append(' ');
-        buffer.append(get(TITLE_COLUMN));
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /**
-     * Returns true if the book is borrowed; that is, if its holder doesn't match its owner.
-     */
-
-    public boolean isBorrowed()
-    {
-        return !get(HOLDER_ID_COLUMN).equals(get(OWNER_ID_COLUMN));
-    }
-
-    public boolean isHidden()
-    {
-        return getBit(HIDDEN_COLUMN);
-    }
-
-    public boolean isLendable()
-    {
-        return getBit(LENDABLE_COLUMN);
-    }
-
-    private boolean getBit(int column)
-    {
-        Boolean b = (Boolean) get(column);
-
-        return b.booleanValue();
-    }
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/BorrowException.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/BorrowException.java
deleted file mode 100644
index b1b7692..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/BorrowException.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-/**
- * Throws when a book may not be borrowed.
- * 
- * @see IOperations#borrowBook(Integer,Integer)
- * @author Howard Lewis Ship
- */
-
-public class BorrowException extends Exception
-{
-    private static final long serialVersionUID = 7761447010967099141L;
-
-    public BorrowException(String message)
-    {
-        super(message);
-    }
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBook.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBook.java
deleted file mode 100644
index 5d3d7fd..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBook.java
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.sql.Timestamp;
-
-/**
- * Remote interface for the Book entity bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IBook extends IEntityBean
-{
-
-    void setAuthor(String value)
-        throws RemoteException;
-
-    String getAuthor()
-        throws RemoteException;
-
-    void setTitle(String value)
-        throws RemoteException;
-
-    String getTitle()
-        throws RemoteException;
-
-    void setDescription(String value)
-        throws RemoteException;
-
-    String getDescription()
-        throws RemoteException;
-
-    void setISBN(String value)
-        throws RemoteException;
-
-    String getISBN()
-        throws RemoteException;
-
-    void setOwnerId(Integer value)
-        throws RemoteException;
-
-    Integer getOwnerId()
-        throws RemoteException;
-
-    void setHolderId(Integer value)
-        throws RemoteException;
-
-    Integer getHolderId()
-        throws RemoteException;
-
-    void setPublisherId(Integer value)
-        throws RemoteException;
-
-    Integer getPublisherId()
-        throws RemoteException;
-
-    boolean getHidden()
-        throws RemoteException;
-
-    void setHidden(boolean value)
-        throws RemoteException;
-
-    boolean getLendable()
-        throws RemoteException;
-
-    void setLendable(boolean value)
-        throws RemoteException;
-
-    Timestamp getDateAdded()
-        throws RemoteException;
-
-    void setDateAdded(Timestamp value)
-        throws RemoteException;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBookHome.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBookHome.java
deleted file mode 100644
index b58c2c3..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBookHome.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-import javax.ejb.FinderException;
-
-/**
- * Home interface for the {@link IBook} entity bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IBookHome extends EJBHome
-{
-
-    IBook create(Map attributes)
-        throws CreateException, RemoteException;
-
-    IBook findByPrimaryKey(Integer key)
-        throws FinderException, RemoteException;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBookQuery.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBookQuery.java
deleted file mode 100644
index 3708340..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBookQuery.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.EJBObject;
-
-/**
- * Remote interface for the BookQuery stateless session bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IBookQuery extends EJBObject
-{
-
-    /**
-     * Returns the total number of results rows in the query.
-     */
-
-    int getResultCount()
-        throws RemoteException;
-
-    /**
-     * Returns a selected subset of the results.
-     */
-
-    Book[] get(int offset, int length)
-        throws RemoteException;
-
-    /**
-     * Performs a query of books with the matching title and (optionally)
-     * publisher.
-     * 
-     * @param parameters
-     *            defines subset of books to return.
-     * @param sortOrdering
-     *            order of items in result set.
-     */
-
-    int masterQuery(MasterQueryParameters parameters,
-            SortOrdering sortOrdering)
-        throws RemoteException;
-
-    /**
-     * Queries on books owned by a given person.
-     */
-
-    int ownerQuery(Integer ownerPK, SortOrdering sortOrdering)
-        throws RemoteException;
-
-    /**
-     * Queries on books held by a given person.
-     */
-
-    int holderQuery(Integer holderPK, SortOrdering sortOrdering)
-        throws RemoteException;
-
-    /**
-     * Queries the list of books held by the borrower but not owned by the
-     * borrower.
-     */
-
-    int borrowerQuery(Integer borrowerPK, SortOrdering sortOrdering)
-        throws RemoteException;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBookQueryHome.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBookQueryHome.java
deleted file mode 100644
index 4c01272..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IBookQueryHome.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-
-/**
- * Home interface for the {@link IBookQuery} session bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IBookQueryHome extends EJBHome
-{
-
-    IBookQuery create()
-        throws CreateException, RemoteException;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IEntityBean.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IEntityBean.java
deleted file mode 100644
index 6583cee..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IEntityBean.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.util.Map;
-
-import javax.ejb.EJBObject;
-
-/**
- * Defines the remove interface for an entity which can download and upload a
- * subset of its properties as a {@link Map}.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IEntityBean extends EJBObject
-{
-
-    /**
-     * Returns the simple attributes of the entity as a Map.
-     */
-
-    Map getEntityAttributes()
-        throws RemoteException;
-
-    /**
-     * Updates some or all of the properties of the entity.
-     */
-
-    void updateEntityAttributes(Map data)
-        throws RemoteException;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IKeyAllocator.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IKeyAllocator.java
deleted file mode 100644
index c397953..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IKeyAllocator.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.EJBObject;
-
-/**
- * Remote interface to the KeyAllocator stateless session bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IKeyAllocator extends EJBObject
-{
-
-    /**
-     * Allocates a new key, possibling reserving it from the database. The value
-     * returned is guarenteed to not have been previously returned by any
-     * instance.
-     */
-
-    Integer allocateKey()
-        throws RemoteException;
-
-    /**
-     * Allocates several keys, as if invoking {@link #allocateKey} multiple
-     * times. No guarentees are made that the values are sequential or in any
-     * order, just that they are unique.
-     */
-
-    Integer[] allocateKeys(int count)
-        throws RemoteException;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IKeyAllocatorHome.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IKeyAllocatorHome.java
deleted file mode 100644
index 9b46feb..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IKeyAllocatorHome.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-
-/**
- * Home interface to the {@link IKeyAllocator} stateless session bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IKeyAllocatorHome extends EJBHome
-{
-
-    IKeyAllocator create()
-        throws CreateException, RemoteException;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IOperations.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IOperations.java
deleted file mode 100644
index 5e164e7..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IOperations.java
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBObject;
-import javax.ejb.FinderException;
-import javax.ejb.RemoveException;
-
-/**
- * Remote interface to the Operations stateless session bean. A repository for
- * simple operations such as adding a new book or borrowing an existing book.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IOperations extends EJBObject
-{
-
-    /**
-     * Locates the book and the borrower, then sets the holder of the book to
-     * the borrower and increments the lend count on the book.
-     */
-
-    Book borrowBook(Integer bookdId, Integer borrowerId)
-        throws BorrowException, FinderException, RemoteException;
-
-    /**
-     * Adds a book which will be owned and held by the specified owner.
-     * <p>
-     * Returns the primary key of the newly created book.
-     */
-
-    Integer addBook(Map attributes)
-        throws CreateException, RemoteException;
-
-    /**
-     * Adds a book, which will be owned and help by the specified owner.
-     * <p>
-     * The publisherName may either be the name of a known publisher, or a new
-     * name. A new {@link IPublisher} will be created as necessary.
-     * <p>
-     * Returns the primary key of the newly created book.
-     */
-
-    Integer addBook(Map attributes, String publisherName)
-        throws CreateException, RemoteException;
-
-    /**
-     * Updates a book to an existing publisher.
-     */
-
-    void updateBook(Integer bookId, Map attributes)
-        throws FinderException, RemoteException;
-
-    /**
-     * Updates a book for a unknown publisher.
-     */
-
-    void updateBook(Integer bookId, Map attributes, String publisherName)
-        throws CreateException, FinderException, RemoteException;
-
-    /**
-     * Updates a Person. Returns the attributes of the update person.
-     */
-
-    void updatePerson(Integer personId, Map attributes)
-        throws FinderException, RemoteException;
-
-    /**
-     * Retrieves the light-weight version of all {@link IPublisher} beans,
-     * sorted by name.
-     */
-
-    Publisher[] getPublishers()
-        throws RemoteException;
-
-    /**
-     * Retrieves the light-weight version of all the {@link IPerson} beans,
-     * sorted by last name, then by first name.
-     */
-
-    Person[] getPersons()
-        throws RemoteException;
-
-    /**
-     * Retrieves a single {@link Person} by its primary key.
-     * 
-     * @throws FinderException
-     *             if the Person does not exist.
-     */
-
-    Person getPerson(Integer personId)
-        throws FinderException, RemoteException;
-
-    /**
-     * Attempts to login the user in.
-     * 
-     * @return the user
-     * @throws LoginException
-     *             if the email address is invalid, the password is invalid, or
-     *             the user may not log in for other reasons.
-     */
-
-    Person login(String email, String password)
-        throws LoginException, RemoteException;
-
-    /**
-     * Retrieves the attributes of a {@link IPerson} as a {@link Map}.
-     */
-
-    Map getPersonAttributes(Integer personId)
-        throws FinderException, RemoteException;
-
-    /**
-     * Retrieves a single {@link Book} by its primary key. Returns the book's
-     * attributes as a {@link Map}.
-     * 
-     * @throws FinderException
-     *             if the Book does not exist.
-     */
-
-    Book getBook(Integer bookId)
-        throws FinderException, RemoteException;
-
-    /**
-     * Retrieves the attributes of a {@link IBook} as a {@link Map}.
-     */
-
-    Map getBookAttributes(Integer bookId)
-        throws FinderException, RemoteException;
-
-    /**
-     * Attempts to register a new user, first checking that the e-mail and names
-     * are unique. Returns the primary key of the new {@link IPerson}.
-     */
-
-    Person registerNewUser(String firstName, String lastName,
-            String email, String password)
-        throws RegistrationException, CreateException, RemoteException;
-
-    /**
-     * Returns a book to its owner.
-     * 
-     * @throws FinderException
-     *             if the book is not known.
-     */
-
-    Book returnBook(Integer bookId)
-        throws RemoteException, FinderException;
-
-    /**
-     * Deletes a Book.
-     * 
-     * @return the Book as it was before being deleted.
-     */
-
-    Book deleteBook(Integer bookId)
-        throws RemoveException, RemoteException;
-
-    /**
-     * Transfers a number of books to a new owner.
-     */
-
-    void transferBooks(Integer newOwnerId, Integer[] bookIds)
-        throws FinderException, RemoteException;
-
-    /**
-     * Updates the list of Publishers in the database.
-     * 
-     * @param updated
-     *            an array of {@link Publisher} used to update existing
-     *            publishers (used to change their names). May be null or empty.
-     * @param deleted
-     *            an array of {@link Integer}, the primary key of any publisher
-     *            to be deleted. No check is made that existing books aren't
-     *            tied to this Publisher. May be null or empty.
-     */
-
-    void updatePublishers(Publisher[] updated, Integer[] deleted)
-        throws FinderException, RemoveException, RemoteException;
-
-    /**
-     * Updates a list of Persons. Main functionality is to allow an
-     * administrator to edit the following attributes of a Person:
-     * <ul>
-     * <li>admin
-     * <li>lockedOut
-     * </ul>
-     * <p>
-     * Explicitly, names and email addresses may not be changed.
-     * <p>
-     * In addition, users may be deleted entirely, or may have their password
-     * reset.
-     * 
-     * @param updated
-     *            a list of persons to update. May be null or empty.
-     * @param resetPassword
-     *            a list of primary keys; corresponding Persons will have thier
-     *            password reset. May be null or empty.
-     * @param newPassword
-     *            the password to be set for each user in resetPassword
-     * @param deleted
-     *            a list of persons to delete. Books owned by any of these
-     *            persons are transfered to the administrator. May be null or
-     *            empty.
-     * @param adminId
-     *            the administrator performing the operation; books may be
-     *            transferred to this person.
-     */
-
-    void updatePersons(Person[] updated, Integer[] resetPassword,
-            String newPassword, Integer[] deleted, Integer adminId)
-        throws FinderException, RemoveException, RemoteException;
-
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IOperationsHome.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IOperationsHome.java
deleted file mode 100644
index 90de3c5..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IOperationsHome.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-
-/**
- * Home interface to the {@link IOperations} stateless session bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IOperationsHome extends EJBHome
-{
-
-    IOperations create()
-        throws CreateException, RemoteException;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPerson.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPerson.java
deleted file mode 100644
index 11cff1a..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPerson.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.sql.Timestamp;
-
-/**
- * Remote interface for the Person entity bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IPerson extends IEntityBean
-{
-
-    void setLastName(String value)
-        throws RemoteException;
-
-    String getLastName()
-        throws RemoteException;
-
-    void setFirstName(String value)
-        throws RemoteException;
-
-    String getFirstName()
-        throws RemoteException;
-
-    void setPassword(String value)
-        throws RemoteException;
-
-    String getPassword()
-        throws RemoteException;
-
-    void setEmail(String value)
-        throws RemoteException;
-
-    String getEmail()
-        throws RemoteException;
-
-    boolean getAdmin()
-        throws RemoteException;
-
-    void setAdmin(boolean value)
-        throws RemoteException;
-
-    boolean getLockedOut()
-        throws RemoteException;
-
-    void setLockedOut(boolean value)
-        throws RemoteException;
-
-    void setLastAccess(Timestamp value)
-        throws RemoteException;
-
-    Timestamp getLastAccess()
-        throws RemoteException;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPersonHome.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPersonHome.java
deleted file mode 100644
index a10542e..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPersonHome.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-import javax.ejb.FinderException;
-
-/**
- * Home interface for the {@link IPerson} entity bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IPersonHome extends EJBHome
-{
-
-    IPerson create(Map attributes)
-        throws CreateException, RemoteException;
-
-    IPerson findByPrimaryKey(Integer key)
-        throws FinderException, RemoteException;
-
-    /**
-     * Finds by exact match on email (which is how users are identified for
-     * login purposes). Note: need to figure out how to do a caseless search
-     * instead.
-     */
-
-    IPerson findByEmail(String email)
-        throws FinderException, RemoteException;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPublisher.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPublisher.java
deleted file mode 100644
index a2f8c3d..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPublisher.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-/**
- * Remote interface for the Publisher entity bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IPublisher extends IEntityBean
-{
-
-    void setName(String value)
-        throws RemoteException;
-
-    String getName()
-        throws RemoteException;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPublisherHome.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPublisherHome.java
deleted file mode 100644
index ed2fccd..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/IPublisherHome.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-import javax.ejb.FinderException;
-
-/**
- * Home interface for the {@link IPublisher} entity bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IPublisherHome extends EJBHome
-{
-
-    IPublisher create(String name)
-        throws CreateException, RemoteException;
-
-    IPublisher findByPrimaryKey(Integer key)
-        throws FinderException, RemoteException;
-
-    /**
-     * Finds Publisher with exact match on name.
-     */
-
-    IPublisher findByName(String name)
-        throws FinderException, RemoteException;
-
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/LoginException.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/LoginException.java
deleted file mode 100644
index 0070c52..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/LoginException.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-/**
- * Exception thrown on a login failure.
- * 
- * @author Howard Lewis Ship
- */
-
-public class LoginException extends Exception
-{
-
-    private static final long serialVersionUID = -1472279052871024178L;
-
-    private final boolean _passwordError;
-
-    public LoginException(String message, boolean passwordError)
-    {
-        super(message);
-
-        _passwordError = passwordError;
-    }
-
-    /**
-     * Returns true if the error is related to the password. Otherwise, the
-     * error is related to the email address (either not found, or the user has
-     * been invalidated or otherwise locked out).
-     */
-
-    public boolean isPasswordError()
-    {
-        return _passwordError;
-    }
-
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/MasterQueryParameters.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/MasterQueryParameters.java
deleted file mode 100644
index 3934f9b..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/MasterQueryParameters.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.io.Serializable;
-
-import org.apache.hivemind.util.ToStringBuilder;
-
-/**
- * Bundles up the parameters for the
- * {@link org.apache.tapestry.vlib.ejb.IBookQuery#masterQuery(MasterQueryParameters, SortOrdering)}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class MasterQueryParameters implements Serializable
-{
-    private static final long serialVersionUID = 557672936915184047L;
-
-    private String _title;
-
-    private String _author;
-
-    private Integer _ownerId;
-
-    private Integer _publisherId;
-
-    public MasterQueryParameters(String title, String author, Integer ownerId, Integer publisherId)
-    {
-        _title = title;
-        _author = author;
-        _ownerId = ownerId;
-        _publisherId = publisherId;
-    }
-
-    /**
-     * Returns a substring to match (caselessly) against {@link IBook#getAuthor()}.
-     */
-
-    public String getAuthor()
-    {
-        return _author;
-    }
-
-    /**
-     * Returns a publisher Id to match, or null for no publisher constraint.
-     */
-
-    public Integer getPublisherId()
-    {
-        return _publisherId;
-    }
-
-    /**
-     * Returns a substring to match caselessly against the book title.
-     */
-
-    public String getTitle()
-    {
-        return _title;
-    }
-
-    public Integer getOwnerId()
-    {
-        return _ownerId;
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-        builder.append("title", _title);
-        builder.append("author", _author);
-        builder.append("ownerId", _ownerId);
-        builder.append("publisherId", _publisherId);
-
-        return builder.toString();
-    }
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/Person.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/Person.java
deleted file mode 100644
index bb9a079..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/Person.java
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.io.Serializable;
-import java.sql.Timestamp;
-
-/**
- * A light-weight version of the {@link IPerson} bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public class Person implements Serializable
-{
-    public static final int ID_COLUMN = 0;
-
-    public static final int FIRST_NAME_COLUMN = 1;
-
-    public static final int LAST_NAME_COLUMN = 2;
-
-    public static final int EMAIL_COLUMN = 3;
-
-    public static final int LOCKED_OUT_COLUMN = 4;
-
-    public static final int ADMIN_COLUMN = 5;
-
-    public static final int LAST_ACCESS_COLUMN = 6;
-
-    public static final int NUM_COLUMNS = 7;
-
-    private static final long serialVersionUID = 37148852625594728L;
-
-    private Object[] _columns;
-
-    public Person(Object[] columns)
-    {
-        if (columns == null)
-            throw new IllegalArgumentException("Must provide a non-null columns.");
-
-        if (columns.length != NUM_COLUMNS)
-            throw new IllegalArgumentException("Wrong number of columns for a Person.");
-
-        this._columns = new Object[NUM_COLUMNS];
-        System.arraycopy(columns, 0, this._columns, 0, NUM_COLUMNS);
-    }
-
-    public Integer getId()
-    {
-        return (Integer) _columns[ID_COLUMN];
-    }
-
-    public String getFirstName()
-    {
-        return (String) _columns[FIRST_NAME_COLUMN];
-    }
-
-    public String getLastName()
-    {
-        return (String) _columns[LAST_NAME_COLUMN];
-    }
-
-    public String getEmail()
-    {
-        return (String) _columns[EMAIL_COLUMN];
-    }
-
-    public String getNaturalName()
-    {
-        if (_columns[FIRST_NAME_COLUMN] == null)
-            return (String) _columns[LAST_NAME_COLUMN];
-
-        return (String) _columns[FIRST_NAME_COLUMN] + " " + (String) _columns[LAST_NAME_COLUMN];
-    }
-
-    public Timestamp getLastAccess()
-    {
-        return (Timestamp) _columns[LAST_ACCESS_COLUMN];
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer("Person[");
-
-        if (_columns[FIRST_NAME_COLUMN] != null)
-        {
-            buffer.append((String) _columns[FIRST_NAME_COLUMN]);
-            buffer.append(' ');
-        }
-
-        buffer.append((String) _columns[LAST_NAME_COLUMN]);
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    public boolean isAdmin()
-    {
-        return getBit(ADMIN_COLUMN);
-    }
-
-    public void setAdmin(boolean value)
-    {
-        setBit(ADMIN_COLUMN, value);
-    }
-
-    public boolean isLockedOut()
-    {
-        return getBit(LOCKED_OUT_COLUMN);
-    }
-
-    public void setLockedOut(boolean value)
-    {
-        setBit(LOCKED_OUT_COLUMN, value);
-    }
-
-    private void setBit(int column, boolean value)
-    {
-        _columns[column] = value ? Boolean.TRUE : Boolean.FALSE;
-    }
-
-    private boolean getBit(int column)
-    {
-        Boolean b = (Boolean) _columns[column];
-
-        return b.booleanValue();
-    }
-
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/Publisher.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/Publisher.java
deleted file mode 100644
index c72a8ec..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/Publisher.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.io.Serializable;
-
-/**
- * A light-weight, read-only version of the {@link IPublisher} bean.
- * 
- * @author Howard Lewis Ship
- */
-
-public class Publisher implements Serializable
-{
-
-    private static final long serialVersionUID = -2843992788128325821L;
-
-    private Integer _id;
-
-    private String _name;
-
-    public Publisher(Integer id, String name)
-    {
-        _id = id;
-        _name = name;
-    }
-
-    public Integer getId()
-    {
-        return _id;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    /**
-     * Name is a writable property of this bean, to support the applications'
-     * EditPublisher's page.
-     * 
-     * @see IOperations#updatePublishers(Publisher[],Integer[])
-     */
-
-    public void setName(String value)
-    {
-        _name = value;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer("Publisher[");
-        buffer.append(_id);
-        buffer.append(' ');
-        buffer.append(_name);
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/RegistrationException.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/RegistrationException.java
deleted file mode 100644
index 39245dd..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/RegistrationException.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-/**
- * Exception thrown by
- * {@link IOperations#registerNewUser(String, String, String, String)} if the
- * registration is not allowed (usually, because of a duplicate email or name).
- * 
- * @author Howard Lewis Ship
- */
-
-public class RegistrationException extends Exception
-{
-
-    private static final long serialVersionUID = 1359775792320102947L;
-
-    private final Throwable _rootCause;
-
-    public RegistrationException(Throwable rootCause)
-    {
-        super(rootCause.getMessage());
-
-        _rootCause = rootCause;
-    }
-
-    public RegistrationException(String message, Throwable rootCause)
-    {
-        super(message);
-
-        _rootCause = rootCause;
-    }
-
-    public RegistrationException(String message)
-    {
-        super(message);
-        
-        _rootCause = null;
-    }
-
-    public Throwable getRootCause()
-    {
-        return _rootCause;
-    }
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/SortColumn.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/SortColumn.java
deleted file mode 100644
index 08d2f6d..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/SortColumn.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-/**
- * Represents the different columns which may be sorted.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public enum SortColumn {
-
-    /**
-     * Sort by book title.
-     */
-
-    TITLE,
-
-    /**
-     * Sort by author name.
-     */
-
-    AUTHOR,
-
-    /**
-     * Sort by publisher name.
-     */
-
-    PUBLISHER,
-
-    /**
-     * Sort by holder name (last name, then first). Not applicable to all queries.
-     */
-
-    HOLDER,
-
-    /**
-     * Sort by book owner (last name, then first). Not applicable to all queries.
-     */
-
-    OWNER;
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/SortOrdering.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/SortOrdering.java
deleted file mode 100644
index 7080575..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/SortOrdering.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.io.Serializable;
-
-import org.apache.hivemind.util.ToStringBuilder;
-
-/**
- * Used with {@link org.apache.tapestry.vlib.ejb.IBookQuery} to represent the order in which columns
- * are sorted in the result set. SortOrdering is immutable.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class SortOrdering implements Serializable
-{
-    private static final long serialVersionUID = -1621923918904975133L;
-
-    private SortColumn _column;
-
-    private boolean _descending;
-
-    public SortOrdering(SortColumn column)
-    {
-        this(column, false);
-    }
-
-    public SortOrdering(SortColumn column, boolean descending)
-    {
-        _column = column;
-        _descending = descending;
-    }
-
-    public boolean isDescending()
-    {
-        return _descending;
-    }
-
-    public SortColumn getColumn()
-    {
-        return _column;
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-        builder.append("column", _column);
-        builder.append("descending", _descending);
-
-        return builder.toString();
-    }
-
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/AbstractEntityBean.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/AbstractEntityBean.java
deleted file mode 100644
index 65de414..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/AbstractEntityBean.java
+++ /dev/null
@@ -1,275 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.rmi.RemoteException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.EntityBean;
-import javax.ejb.EntityContext;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.rmi.PortableRemoteObject;
-
-import ognl.Ognl;
-import ognl.OgnlException;
-
-import org.apache.tapestry.contrib.ejb.XEJBException;
-import org.apache.tapestry.vlib.ejb.IKeyAllocator;
-import org.apache.tapestry.vlib.ejb.IKeyAllocatorHome;
-
-/**
- * Provides basic support for the entity context, empty or minimal implementations of the required
- * methods, and some utilties.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class AbstractEntityBean implements EntityBean
-{
-    /**
-     * The EntityContext provided by the application server.
-     */
-
-    private EntityContext _context;
-
-    private transient String[] _attributePropertyNames;
-
-    private transient IKeyAllocatorHome _keyAllocatorHome;
-
-    /**
-     * The environment naming context, which is configured for this bean in the deployment
-     * descriptor.
-     */
-
-    private transient Context _environment;
-
-    public void setEntityContext(EntityContext context)
-    {
-        _context = context;
-    }
-
-    public void unsetEntityContext()
-    {
-        _context = null;
-    }
-
-    /**
-     * Gets a named object from the bean's environment naming context.
-     */
-
-    protected Object getEnvironmentObject(String name, Class objectClass) throws RemoteException,
-            NamingException
-    {
-        Object result = null;
-
-        if (_environment == null)
-        {
-            Context initial = new InitialContext();
-            _environment = (Context) initial.lookup("java:comp/env");
-        }
-
-        Object raw = _environment.lookup(name);
-
-        try
-        {
-            result = PortableRemoteObject.narrow(raw, objectClass);
-        }
-        catch (ClassCastException ex)
-        {
-            throw new RemoteException("Could not narrow " + raw + " (" + name + ") to class "
-                    + objectClass + ".");
-        }
-
-        return result;
-    }
-
-    /**
-     * Empty implementation; subclasses may override.
-     */
-
-    public void ejbActivate() throws RemoteException
-    {
-        // does nothing
-    }
-
-    /**
-     * Empty implementation; subclasses may override.
-     */
-
-    public void ejbPassivate() throws RemoteException
-    {
-        // does nothing
-    }
-
-    /**
-     * Empty implementation; subclasses may override.
-     */
-
-    public void ejbRemove() throws RemoteException
-    {
-        // does nothing
-    }
-
-    /**
-     * Does nothing.
-     */
-
-    public void ejbLoad() throws RemoteException
-    {
-    }
-
-    /**
-     * Does nothing.
-     */
-
-    public void ejbStore() throws RemoteException
-    {
-    }
-
-    /**
-     * Uses the KeyAllocator session bean to allocate a necessary key.
-     */
-
-    protected Integer allocateKey() throws RemoteException
-    {
-        IKeyAllocator allocator;
-
-        if (_keyAllocatorHome == null)
-        {
-            try
-            {
-                Context initial = new InitialContext();
-                Context environment = (Context) initial.lookup("java:comp/env");
-
-                Object raw = environment.lookup("ejb/KeyAllocator");
-                _keyAllocatorHome = (IKeyAllocatorHome) PortableRemoteObject.narrow(
-                        raw,
-                        IKeyAllocatorHome.class);
-            }
-            catch (NamingException ex)
-            {
-                throw new XEJBException("Unable to locate IKeyAllocatorHome.", ex);
-            }
-        }
-
-        // Get a reference to *some* KeyAllocator bean ... it may be fresh,
-        // or one reused from a pool.
-
-        try
-        {
-            allocator = _keyAllocatorHome.create();
-        }
-        catch (CreateException ex)
-        {
-            throw new RemoteException("Unable to create a KeyAllocator from " + _keyAllocatorHome
-                    + ".", ex);
-        }
-
-        // Finally, invoke the method that gets a key.
-
-        return allocator.allocateKey();
-    }
-
-    /**
-     * Implemented in subclasses to provide a list of property names to be included in the entity
-     * attributes map.
-     */
-
-    protected abstract String[] getAttributePropertyNames();
-
-    /**
-     * Returns a {@link Map} of the properties of the bean. This Map is returned to the client,
-     * where it can be modified and then used to update the entity bean in a single method
-     * <p>
-     * The properties included in the Map are defined by the {@link #getAttributePropertyNames()}
-     * method, which is implemented by concrete subclasses.
-     */
-
-    public Map getEntityAttributes()
-    {
-        Map result = new HashMap();
-
-        if (_attributePropertyNames == null)
-            _attributePropertyNames = getAttributePropertyNames();
-
-        for (int i = 0; i < _attributePropertyNames.length; i++)
-        {
-            String key = _attributePropertyNames[i];
-
-            try
-            {
-                Object value = Ognl.getValue(key, this);
-
-                result.put(key, value);
-            }
-            catch (OgnlException ex)
-            {
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Updates the bean with property changes from the update {@link Map}. Only the keys defined by
-     * {@link #getAttributePropertyNames()} will be accessed (keys and values that are not in that
-     * list are ignored).
-     * <p>
-     * The corresponding bean property will only be updated if the key is present ... this means
-     * that the update may contain just the <em>changed</em> keys. Remember that a Map may store
-     * null values.
-     */
-
-    public void updateEntityAttributes(Map update)
-    {
-        if (_attributePropertyNames == null)
-            _attributePropertyNames = getAttributePropertyNames();
-
-        for (int i = 0; i < _attributePropertyNames.length; i++)
-        {
-            String key = _attributePropertyNames[i];
-
-            if (update.containsKey(key))
-            {
-                Object value = update.get(key);
-
-                try
-                {
-                    Ognl.setValue(key, this, value);
-                }
-                catch (OgnlException ex)
-                {
-                }
-
-            }
-
-        }
-
-    }
-
-    protected void setContext(EntityContext context)
-    {
-        _context = context;
-    }
-
-    protected EntityContext geEntityContext()
-    {
-        return _context;
-    }
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/BookBean.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/BookBean.java
deleted file mode 100644
index ed2ec91..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/BookBean.java
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.rmi.RemoteException;
-import java.sql.Timestamp;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-
-/**
- * Implementation of the Book entity.
- * <p>
- * We're using container managed persistance.
- * 
- * @see org.apache.tapestry.vlib.ejb.IBook
- * @see org.apache.tapestry.vlib.ejb.IBookHome
- * @author Howard Lewis Ship
- */
-
-public abstract class BookBean extends AbstractEntityBean
-{
-    protected String[] getAttributePropertyNames()
-    {
-        return new String[]
-        { "title", "description", "ISBN", "holderId", "ownerId", "publisherId", "author", "hidden",
-                "lendable", "dateAdded" };
-    }
-
-    public abstract void setBookId(Integer value);
-
-    public abstract Integer getBookId();
-
-    public abstract String getAuthor();
-
-    public abstract void setAuthor(String value);
-
-    public abstract String getDescription();
-
-    public abstract void setDescription(String value);
-
-    public abstract String getISBN();
-
-    public abstract void setISBN(String value);
-
-    public abstract String getTitle();
-
-    public abstract void setTitle(String value);
-
-    public abstract Integer getHolderId();
-
-    public abstract void setHolderId(Integer value);
-
-    public abstract Integer getOwnerId() throws RemoteException;
-
-    public abstract void setOwnerId(Integer value);
-
-    public abstract void setPublisherId(Integer value);
-
-    public abstract Integer getPublisherId();
-
-    public abstract boolean getHidden();
-
-    public abstract void setHidden(boolean value);
-
-    public abstract boolean getLendable();
-
-    public abstract void setLendable(boolean value);
-
-    public abstract Timestamp getDateAdded();
-
-    public abstract void setDateAdded(Timestamp value);
-
-    // Create methods
-
-    @SuppressWarnings("unused")
-    public Integer ejbCreate(Map attributes) throws CreateException, RemoteException
-    {
-        setLendable(true);
-
-        updateEntityAttributes(attributes);
-
-        setBookId(allocateKey());
-
-        return null;
-    }
-
-    public void ejbPostCreate(Map attributes)
-    {
-        // No post create work needed but the method must be implemented
-    }
-
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/BookQueryBean.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/BookQueryBean.java
deleted file mode 100644
index d7c865c..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/BookQueryBean.java
+++ /dev/null
@@ -1,359 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.contrib.ejb.XEJBException;
-import org.apache.tapestry.contrib.jdbc.IStatement;
-import org.apache.tapestry.contrib.jdbc.StatementAssembly;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.MasterQueryParameters;
-import org.apache.tapestry.vlib.ejb.SortOrdering;
-
-/**
- * Implementation of a stateful session bean used to query the
- * {@link org.apache.tapestry.vlib.ejb.IBook} entity and cache the results. It can then download the
- * results, in chunks, to the client ... this is used to support clients that which to display the
- * results a page at a time (with random access to the pages of results).
- * <p>
- * To avoid a lot of duplicate code for things like finding the JDBC {@link Connection} and querying
- * the IBook entity, we subclass from {@link OperationsBean}.
- * 
- * @see org.apache.tapestry.vlib.ejb.IBookQuery
- * @see org.apache.tapestry.vlib.ejb.IBookQueryHome
- * @author Howard Lewis Ship
- */
-
-public class BookQueryBean extends OperationsBean
-{
-    private static final long serialVersionUID = 8782046868254488388L;
-    
-    /**
-     * Stores the results from the most recent query.
-     */
-
-    private Book[] _results;
-
-    /**
-     * Releases any results.
-     */
-
-    public void ejbRemove()
-    {
-        _results = null;
-    }
-
-    // Business methods
-
-    /**
-     * Returns the number of results from the most recent query.
-     */
-
-    public int getResultCount()
-    {
-        if (_results == null)
-            return 0;
-
-        return _results.length;
-    }
-
-    /**
-     * Gets a subset of the results from the query.
-     */
-
-    public Book[] get(int offset, int length)
-    {
-        Book[] result;
-
-        if (offset < 0)
-            return null;
-
-        int finalLength = Math.min(length, _results.length - offset);
-
-        if (finalLength < 0)
-            return null;
-
-        // Create a new array and copy the requested
-        // results into it.
-
-        result = new Book[finalLength];
-        System.arraycopy(_results, offset, result, 0, finalLength);
-
-        return result;
-    }
-
-    /**
-     * The master query is for querying by some mixture of title, author and publisher.
-     */
-
-    public int masterQuery(MasterQueryParameters parameters, SortOrdering sortOrdering)
-    {
-        IStatement statement = null;
-        Connection connection = null;
-
-        // Forget any current results.
-
-        _results = null;
-
-        try
-        {
-            connection = getConnection();
-
-            try
-            {
-                statement = buildMasterQuery(connection, parameters, sortOrdering);
-            }
-            catch (SQLException ex)
-            {
-                throw new XEJBException("Unable to create query statement.", ex);
-            }
-
-            processQuery(statement);
-
-        }
-        finally
-        {
-            close(connection, statement, null);
-        }
-
-        return getResultCount();
-    }
-
-    /**
-     * Queries on books owned by a given person, sorted by title.
-     */
-
-    public int ownerQuery(Integer ownerId, SortOrdering sortOrdering)
-    {
-        IStatement statement = null;
-        Connection connection = null;
-
-        // Forget any current results.
-
-        _results = null;
-
-        try
-        {
-            connection = getConnection();
-
-            try
-            {
-                statement = buildPersonQuery(connection, "owner.PERSON_ID", ownerId, sortOrdering);
-            }
-            catch (SQLException ex)
-            {
-                throw new XEJBException("Unable to create query statement.", ex);
-            }
-
-            processQuery(statement);
-
-        }
-        finally
-        {
-            close(connection, statement, null);
-        }
-
-        return getResultCount();
-    }
-
-    /**
-     * Queries on books held (borrowed) by a given person, sorted by title.
-     */
-
-    public int holderQuery(Integer holderId, SortOrdering sortOrdering)
-    {
-        IStatement statement = null;
-        Connection connection = null;
-
-        // Forget any current results.
-
-        _results = null;
-
-        try
-        {
-            connection = getConnection();
-
-            try
-            {
-                statement = buildPersonQuery(connection, "holder.PERSON_ID", holderId, sortOrdering);
-            }
-            catch (SQLException ex)
-            {
-                throw new XEJBException("Unable to create query statement.", ex);
-            }
-
-            processQuery(statement);
-
-        }
-        finally
-        {
-            close(connection, statement, null);
-        }
-
-        return getResultCount();
-    }
-
-    public int borrowerQuery(Integer borrowerId, SortOrdering sortOrdering)
-    {
-        IStatement statement = null;
-        Connection connection = null;
-
-        // Forget any current results.
-
-        _results = null;
-
-        try
-        {
-            connection = getConnection();
-
-            try
-            {
-                statement = buildBorrowerQuery(connection, borrowerId, sortOrdering);
-            }
-            catch (SQLException ex)
-            {
-                throw new XEJBException("Unable to create query statement.", ex);
-            }
-
-            processQuery(statement);
-
-        }
-        finally
-        {
-            close(connection, statement, null);
-        }
-
-        return getResultCount();
-    }
-
-    private void processQuery(IStatement statement)
-    {
-        ResultSet set = null;
-
-        try
-        {
-            set = statement.executeQuery();
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException("Unable to execute query.", ex);
-        }
-
-        try
-        {
-            processQueryResults(set);
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException("Unable to process query results.", ex);
-        }
-        finally
-        {
-            close(null, null, set);
-        }
-    }
-
-    private void processQueryResults(ResultSet set) throws SQLException
-    {
-        List list = new ArrayList();
-        Object[] columns = new Object[Book.NUM_COLUMNS];
-
-        while (set.next())
-        {
-            Book book = convertRowToBook(set, columns);
-
-            list.add(book);
-        }
-
-        _results = new Book[list.size()];
-        _results = (Book[]) list.toArray(_results);
-    }
-
-    private IStatement buildMasterQuery(Connection connection, MasterQueryParameters parameters,
-            SortOrdering ordering) throws SQLException
-    {
-        String title = parameters.getTitle();
-        String author = parameters.getAuthor();
-        Integer publisherId = parameters.getPublisherId();
-        Integer ownerId = parameters.getOwnerId();
-
-        StatementAssembly assembly = buildBaseBookQuery();
-
-        addSubstringSearch(assembly, "book.TITLE", title);
-        addSubstringSearch(assembly, "book.AUTHOR", author);
-
-        // Hide books that are not visible to the master query.
-
-        assembly.addSep(" AND ");
-        assembly.add("book.HIDDEN = 0");
-
-        if (publisherId != null)
-        {
-            assembly.addSep(" AND ");
-            assembly.add("book.PUBLISHER_ID = ");
-            assembly.addParameter(publisherId);
-        }
-
-        if (ownerId != null)
-        {
-            assembly.addSep(" AND ");
-            assembly.add("book.OWNER_ID = ");
-            assembly.addParameter(ownerId);
-        }
-
-        addSortOrdering(assembly, ordering);
-
-        return assembly.createStatement(connection);
-    }
-
-    private IStatement buildPersonQuery(Connection connection, String personColumn,
-            Integer personId, SortOrdering sortOrdering) throws SQLException
-    {
-        StatementAssembly assembly = buildBaseBookQuery();
-
-        assembly.addSep(" AND ");
-        assembly.add(personColumn);
-        assembly.add(" = ");
-        assembly.addParameter(personId);
-
-        addSortOrdering(assembly, sortOrdering);
-
-        return assembly.createStatement(connection);
-    }
-
-    private IStatement buildBorrowerQuery(Connection connection, Integer borrowerId,
-            SortOrdering sortOrdering) throws SQLException
-    {
-        StatementAssembly assembly = buildBaseBookQuery();
-
-        // Get books held by the borrower but not owned by the borrower.
-
-        assembly.addSep(" AND ");
-        assembly.add("book.HOLDER_ID = ");
-        assembly.addParameter(borrowerId);
-        assembly.addSep(" AND ");
-        assembly.add("book.HOLDER_ID <> book.OWNER_ID");
-
-        addSortOrdering(assembly, sortOrdering);
-
-        return assembly.createStatement(connection);
-    }
-
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/KeyAllocatorBean.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/KeyAllocatorBean.java
deleted file mode 100644
index adef2da..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/KeyAllocatorBean.java
+++ /dev/null
@@ -1,304 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.LinkedList;
-
-import javax.ejb.SessionBean;
-import javax.ejb.SessionContext;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.sql.DataSource;
-
-import org.apache.tapestry.contrib.ejb.XEJBException;
-
-/**
- * Implementation of the {@link org.apache.tapestry.vlib.ejb.IKeyAllocator}
- * stateless session bean.
- * <p>
- * We're cheating a little; they KeyAllocator does have state, it just doesn't
- * get persisted ever. Since the operation on it is atomic ("gimme a key") it
- * doesn't need to have conversational state with its clients.
- * <p>
- * The KeyAllocator records in the database the "next key to allocate". When it
- * needs a key, it allocates a block of keys (by advancing the next key by a
- * some number).
- * <p>
- * If the KeyAllocator instance is purged from the pool, then some number of
- * keys that it has allocated will be lost. Big deal.
- * 
- * @author Howard Lewis Ship
- */
-
-public class KeyAllocatorBean implements SessionBean
-{
-
-    private static final long serialVersionUID = -6783018767284081244L;
-
-    private static final String PROPERTY_NAME = "next-key";
-
-    /**
-     * List of Integer instances; these are keys acquired from the database.
-     */
-
-    private LinkedList keys;
-
-    /**
-     * Number of keys to allocate from the database at a time. Set from the ENC
-     * property "blockSize".
-     */
-
-    private int blockSize = 0;
-
-    /**
-     * Data source, retrieved from the ENC property "jdbc/dataSource".
-     */
-
-    private DataSource dataSource;
-
-    /**
-     * Activates the bean. Gets the block size and DataSource from the
-     * environment.
-     */
-
-    public void ejbCreate()
-    {
-        Context initial;
-        Context environment;
-        Integer blockSizeProperty;
-
-        try
-        {
-            initial = new InitialContext();
-            environment = (Context) initial.lookup("java:comp/env");
-        }
-        catch (NamingException ex)
-        {
-            throw new XEJBException("Could not lookup environment.", ex);
-        }
-
-        try
-        {
-            blockSizeProperty = (Integer) environment.lookup("blockSize");
-        }
-        catch (NamingException ex)
-        {
-            throw new XEJBException("Could not lookup blockSize property.", ex);
-        }
-
-        blockSize = blockSizeProperty.intValue();
-
-        try
-        {
-            dataSource = (DataSource) environment.lookup("jdbc/dataSource");
-        }
-        catch (NamingException ex)
-        {
-            throw new XEJBException("Could not lookup data source.", ex);
-        }
-
-        if (keys == null) keys = new LinkedList();
-    }
-
-    /**
-     * Does nothing, not invoked in stateless session beans.
-     */
-
-    public void ejbPassivate()
-    {
-    }
-
-    public void setSessionContext(SessionContext value)
-    {
-    }
-
-    /**
-     * Does nothing, not invoked in stateless session beans.
-     */
-
-    public void ejbActivate()
-    {
-    }
-
-    /**
-     * Does nothing. This is invoked when the bean moves from the method ready
-     * pool to the "does not exist" state. The EJB container will lost its
-     * reference to the bean, and the garbage collector will take it (including
-     * any keys it has cached from the database).
-     */
-
-    public void ejbRemove()
-    {
-        // Does nothing.
-    }
-
-    /**
-     * Allocates a single key, going to the database only if it has no keys in
-     * its internal cache.
-     */
-
-    public Integer allocateKey()
-    {
-        if (keys.isEmpty()) allocateBlock(1);
-
-        return (Integer) keys.removeFirst();
-    }
-
-    /**
-     * Allocates a block of keys, going to the database if there are
-     * insufficient keys in its internal cache.
-     */
-
-    public Integer[] allocateKeys(int count)
-    {
-        Integer[] result;
-        int i;
-
-        if (keys.size() < count) allocateBlock(count);
-
-        result = new Integer[count];
-
-        for(i = 0; i < count; i++)
-        {
-            result[i] = (Integer) keys.removeFirst();
-        }
-
-        return result;
-    }
-
-    /**
-     * Allocates a block of keys from the database. Allocates count keys, or the
-     * configured block size, whichever is greater.
-     * <p>
-     * It is assumed that this operation takes place within a transaction.
-     */
-
-    protected void allocateBlock(int count)
-    {
-        Connection connection = null;
-        PreparedStatement statement = null;
-        ResultSet set = null;
-        int nextKey;
-        int allocationCount;
-        int i;
-
-        allocationCount = Math.max(count, blockSize);
-
-        try
-        {
-            connection = getConnection();
-
-            statement = connection
-                    .prepareStatement("select PROP_VALUE from PROP where NAME = ?");
-            statement.setString(1, PROPERTY_NAME);
-
-            set = statement.executeQuery();
-
-            // Advance to the first row.
-
-            set.next();
-
-            nextKey = set.getInt(1);
-
-            set.close();
-            set = null;
-
-            statement.close();
-            statement = null;
-
-            // Now, take those keys and advance nextKey
-
-            for(i = 0; i < allocationCount; i++)
-                keys.add(new Integer(nextKey++));
-
-            // Update nextKey back to the database.
-
-            statement = connection.prepareStatement("update PROP\n"
-                    + "set PROP_VALUE = ?\n" + "where NAME = ?");
-            statement.setInt(1, nextKey);
-            statement.setString(2, PROPERTY_NAME);
-
-            statement.executeUpdate();
-        }
-        catch (SQLException ex)
-        {
-            ex.printStackTrace();
-
-            throw new XEJBException(
-                    "Unable to allocate keys from the database.", ex);
-        }
-        finally
-        {
-            if (set != null)
-            {
-                try
-                {
-                    set.close();
-                }
-                catch (SQLException ex)
-                {
-                }
-            }
-
-            if (statement != null)
-            {
-                try
-                {
-                    statement.close();
-                }
-                catch (SQLException ex)
-                {
-                }
-            }
-
-            if (connection != null)
-            {
-                try
-                {
-                    connection.close();
-                }
-                catch (SQLException ex)
-                {
-                }
-            }
-        }
-
-    }
-
-    /**
-     * Gets a database connection from the pool.
-     * 
-     * @throws EJBException
-     *             if a {@link SQLException} is thrown.
-     */
-
-    protected Connection getConnection()
-    {
-        try
-        {
-            return dataSource.getConnection();
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException(
-                    "Unable to get database connection from pool.", ex);
-        }
-    }
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/OperationsBean.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/OperationsBean.java
deleted file mode 100644
index a005f9a..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/OperationsBean.java
+++ /dev/null
@@ -1,1162 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.rmi.RemoteException;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.FinderException;
-import javax.ejb.RemoveException;
-import javax.ejb.SessionBean;
-import javax.ejb.SessionContext;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.rmi.PortableRemoteObject;
-import javax.sql.DataSource;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.contrib.ejb.XCreateException;
-import org.apache.tapestry.contrib.ejb.XEJBException;
-import org.apache.tapestry.contrib.ejb.XRemoveException;
-import org.apache.tapestry.contrib.jdbc.IStatement;
-import org.apache.tapestry.contrib.jdbc.StatementAssembly;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.BorrowException;
-import org.apache.tapestry.vlib.ejb.IBook;
-import org.apache.tapestry.vlib.ejb.IBookHome;
-import org.apache.tapestry.vlib.ejb.IPerson;
-import org.apache.tapestry.vlib.ejb.IPersonHome;
-import org.apache.tapestry.vlib.ejb.IPublisher;
-import org.apache.tapestry.vlib.ejb.IPublisherHome;
-import org.apache.tapestry.vlib.ejb.LoginException;
-import org.apache.tapestry.vlib.ejb.Person;
-import org.apache.tapestry.vlib.ejb.Publisher;
-import org.apache.tapestry.vlib.ejb.RegistrationException;
-import org.apache.tapestry.vlib.ejb.SortColumn;
-import org.apache.tapestry.vlib.ejb.SortOrdering;
-
-/**
- * Implementation of the {@link org.apache.tapestry.vlib.ejb.IOperations}
- * stateless session bean.
- * <p>
- * Implenents a number of stateless operations for the front end.
- * 
- * @author Howard Lewis Ship
- */
-
-public class OperationsBean implements SessionBean
-{
-
-    private static final long serialVersionUID = -3942706099570269035L;
-
-    /**
-     * All queries must use this exact set of select columns, so that
-     * {@link #convertRow(ResultSet, Object[])} can build the correct
-     * {@link Book} from each row.
-     */
-
-    private static final String[] BOOK_SELECT_COLUMNS = { "book.BOOK_ID",
-            "book.TITLE", "book.DESCRIPTION", "book.ISBN", "owner.PERSON_ID",
-            "owner.FIRST_NAME", "owner.LAST_NAME", "holder.PERSON_ID",
-            "holder.FIRST_NAME", "holder.LAST_NAME", "publisher.PUBLISHER_ID",
-            "publisher.NAME", "book.AUTHOR", "book.HIDDEN", "book.LENDABLE",
-            "book.DATE_ADDED" };
-
-    private static final String[] BOOK_ALIAS_COLUMNS = { "BOOK book",
-            "PERSON owner", "PERSON holder", "PUBLISHER publisher" };
-
-    private static final String[] BOOK_JOINS = {
-            "book.OWNER_ID = owner.PERSON_ID",
-            "book.HOLDER_ID = holder.PERSON_ID",
-            "book.PUBLISHER_ID = publisher.PUBLISHER_ID" };
-
-    private static final Map BOOK_SORT_ASCENDING = new HashMap();
-
-    private static final Map BOOK_SORT_DESCENDING = new HashMap();
-
-    static
-    {
-        BOOK_SORT_ASCENDING.put(SortColumn.TITLE, "book.TITLE");
-        BOOK_SORT_ASCENDING.put(SortColumn.HOLDER,
-                "holder.LAST_NAME, holder.FIRST_NAME");
-        BOOK_SORT_ASCENDING.put(SortColumn.OWNER,
-                "owner.FIRST_NAME, owner.LAST_NAME");
-        BOOK_SORT_ASCENDING.put(SortColumn.PUBLISHER, "publisher.NAME");
-        BOOK_SORT_ASCENDING.put(SortColumn.AUTHOR, "book.AUTHOR");
-
-        BOOK_SORT_DESCENDING.put(SortColumn.TITLE, "book.TITLE DESC");
-        BOOK_SORT_DESCENDING.put(SortColumn.HOLDER,
-                "holder.LAST_NAME DESC, holder.FIRST_NAME DESC");
-        BOOK_SORT_DESCENDING.put(SortColumn.OWNER,
-                "owner.FIRST_NAME DESC, owner.LAST_NAME DESC");
-        BOOK_SORT_DESCENDING.put(SortColumn.PUBLISHER, "publisher.NAME DESC");
-        BOOK_SORT_DESCENDING.put(SortColumn.AUTHOR, "book.AUTHOR DESC");
-    }
-    
-    private transient Context _environment;
-
-    private transient IBookHome _bookHome;
-
-    private transient IPersonHome _personHome;
-
-    private transient IPublisherHome _publisherHome;
-
-    /**
-     * Data source, retrieved from the ENC property "jdbc/dataSource".
-     */
-
-    private transient DataSource _dataSource;
-
-    /**
-     * Sets up the bean. Locates the {@link DataSource} for the bean as
-     * <code>jdbc/dataSource</code> within the ENC; this data source is later
-     * used by {@link #getConnection()}.
-     */
-
-    public void ejbCreate()
-    {
-        Context initial;
-
-        try
-        {
-            initial = new InitialContext();
-            _environment = (Context) initial.lookup("java:comp/env");
-        }
-        catch (NamingException e)
-        {
-            throw new XEJBException("Could not lookup environment.", e);
-        }
-
-        try
-        {
-            _dataSource = (DataSource) _environment.lookup("jdbc/dataSource");
-        }
-        catch (NamingException e)
-        {
-            e.printStackTrace();
-            throw new XEJBException("Could not lookup data source.", e);
-        }
-    }
-
-    public void ejbRemove()
-    {
-    }
-
-    /**
-     * Does nothing, not invoked in stateless session beans.
-     */
-
-    public void ejbPassivate()
-    {
-    }
-
-    public void setSessionContext(SessionContext value)
-    {
-    }
-
-    /**
-     * Does nothing, not invoked in stateless session beans.
-     */
-
-    public void ejbActivate()
-    {
-    }
-
-    /**
-     * Finds the book and borrower (by thier primary keys) and updates the book.
-     * <p>
-     * The {@link Book} value object is returned.
-     */
-
-    public Book borrowBook(Integer bookId, Integer borrowerId)
-        throws FinderException, RemoteException, BorrowException
-    {
-        IBookHome bookHome = getBookHome();
-        IPersonHome personHome = getPersonHome();
-
-        IBook book = bookHome.findByPrimaryKey(bookId);
-
-        if (!book.getLendable())
-            throw new BorrowException("Book may not be borrowed.");
-
-        // Verify that the borrower exists.
-
-        personHome.findByPrimaryKey(borrowerId);
-
-        // TBD: Check that borrower has authenticated
-
-        // findByPrimaryKey() throws an exception if the EJB doesn't exist,
-        // so we're safe.
-
-        personHome.findByPrimaryKey(book.getOwnerId());
-
-        // Here's the real work; just setting the holder of the book
-        // to be the borrower.
-
-        book.setHolderId(borrowerId);
-
-        return getBook(bookId);
-    }
-
-    /**
-     * Adds a new book, verifying that the publisher and holder actually exist.
-     */
-
-    public Integer addBook(Map attributes)
-        throws CreateException, RemoteException
-    {
-        IBookHome home = getBookHome();
-
-        attributes.put("dateAdded", new Timestamp(System.currentTimeMillis()));
-
-        IBook book = home.create(attributes);
-
-        return (Integer) book.getPrimaryKey();
-    }
-
-    /**
-     * Adds a book, which will be owned and held by the specified owner.
-     * <p>
-     * The publisherName may either be the name of a known publisher, or a new
-     * name. A new {@link IPublisher} will be created as necessary.
-     * <p>
-     * Returns the newly created book, as a {@link Map} of attributes.
-     */
-
-    public Integer addBook(Map attributes, String publisherName)
-        throws CreateException, RemoteException
-    {
-        IPublisher publisher = null;
-        IPublisherHome publisherHome = getPublisherHome();
-
-        // Find or create the publisher.
-
-        try
-        {
-            publisher = publisherHome.findByName(publisherName);
-        }
-        catch (FinderException e)
-        {
-            // Ignore, means that no publisher with the given name already
-            // exists.
-        }
-
-        if (publisher == null) publisher = publisherHome.create(publisherName);
-
-        attributes.put("publisherId", publisher.getPrimaryKey());
-
-        return addBook(attributes);
-    }
-
-    /**
-     * Updates a book.
-     * <p>
-     * Returns the updated book.
-     * 
-     * @param bookId
-     *            The primary key of the book to update.
-     */
-
-    public void updateBook(Integer bookId, Map attributes)
-        throws FinderException, RemoteException
-    {
-        IBookHome bookHome = getBookHome();
-
-        IBook book = bookHome.findByPrimaryKey(bookId);
-
-        book.updateEntityAttributes(attributes);
-    }
-
-    /**
-     * Updates a book, adding a new Publisher at the same time.
-     * 
-     * @param bookPK
-     *            The primary key of the book to update.
-     * @param attributes
-     *            attributes to change
-     * @param publisherName
-     *            The name of the new publisher.
-     * @throws FinderException
-     *             if the book, holder or publisher can not be located.
-     * @throws CreateException
-     *             if the {@link IPublisher} can not be created.
-     */
-
-    public void updateBook(Integer bookId, Map attributes, String publisherName)
-        throws CreateException, FinderException, RemoteException
-    {
-        IPublisher publisher = null;
-
-        IPublisherHome publisherHome = getPublisherHome();
-
-        try
-        {
-            publisher = publisherHome.findByName(publisherName);
-        }
-        catch (FinderException e)
-        {
-            // Ignore, means we need to create the Publisher
-        }
-
-        if (publisher == null) publisher = publisherHome.create(publisherName);
-
-        // Don't duplicate all that other code!
-
-        attributes.put("publisherId", publisher.getPrimaryKey());
-
-        updateBook(bookId, attributes);
-    }
-
-    public void updatePerson(Integer personId, Map attributes)
-        throws FinderException, RemoteException
-    {
-        IPersonHome home = getPersonHome();
-
-        IPerson person = home.findByPrimaryKey(personId);
-
-        person.updateEntityAttributes(attributes);
-    }
-
-    public Publisher[] getPublishers()
-    {
-        Connection connection = null;
-        IStatement statement = null;
-        ResultSet set = null;
-
-        List list = new ArrayList();
-
-        try
-        {
-            connection = getConnection();
-
-            StatementAssembly assembly = new StatementAssembly();
-
-            assembly.newLine("SELECT PUBLISHER_ID, NAME");
-            assembly.newLine("FROM PUBLISHER");
-            assembly.newLine("ORDER BY NAME");
-
-            statement = assembly.createStatement(connection);
-
-            set = statement.executeQuery();
-
-            while(set.next())
-            {
-                Integer primaryKey = (Integer) set.getObject(1);
-                String name = set.getString(2);
-
-                list.add(new Publisher(primaryKey, name));
-            }
-        }
-        catch (SQLException ex)
-        {
-            ex.printStackTrace();
-            throw new XEJBException("Could not fetch all Publishers.", ex);
-        }
-        finally
-        {
-            close(connection, statement, set);
-        }
-
-        // Convert from List to Publisher[]
-
-        return (Publisher[]) list.toArray(new Publisher[list.size()]);
-    }
-
-    /**
-     * Fetchs all {@link IPerson} beans in the database and converts them to
-     * {@link Person} objects. Returns the {@link Person}s sorted by last name,
-     * then first.
-     */
-
-    public Person[] getPersons()
-    {
-        Connection connection = null;
-        IStatement statement = null;
-        ResultSet set = null;
-
-        List list = new ArrayList();
-
-        try
-        {
-            connection = getConnection();
-
-            StatementAssembly assembly = buildBasePersonQuery();
-            assembly.newLine("ORDER BY LAST_NAME, FIRST_NAME");
-
-            statement = assembly.createStatement(connection);
-
-            set = statement.executeQuery();
-
-            Object[] columns = new Object[Person.NUM_COLUMNS];
-
-            while(set.next())
-            {
-                list.add(convertRowToPerson(set, columns));
-            }
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException("Could not fetch all Persons.", ex);
-        }
-        finally
-        {
-            close(connection, statement, set);
-        }
-
-        return (Person[]) list.toArray(new Person[list.size()]);
-    }
-
-    /**
-     * Gets the {@link Person} for primary key.
-     * 
-     * @throws FinderException
-     *             if the Person does not exist.
-     */
-
-    public Person getPerson(Integer personId)
-        throws FinderException
-    {
-        Connection connection = null;
-        IStatement statement = null;
-        ResultSet set = null;
-
-        Person result = null;
-
-        try
-        {
-            connection = getConnection();
-
-            StatementAssembly assembly = buildBasePersonQuery();
-            assembly.newLine("WHERE ");
-            assembly.add("PERSON_ID = ");
-            assembly.addParameter(personId);
-            assembly.newLine("ORDER BY LAST_NAME, FIRST_NAME");
-
-            statement = assembly.createStatement(connection);
-
-            set = statement.executeQuery();
-
-            if (!set.next())
-                throw new FinderException("Person #" + personId
-                        + " does not exist.");
-
-            Object[] columns = new Object[Person.NUM_COLUMNS];
-            result = convertRowToPerson(set, columns);
-
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException("Unable to perform database query.", ex);
-        }
-        finally
-        {
-            close(connection, statement, set);
-        }
-
-        return result;
-    }
-
-    public Person login(String email, String password)
-        throws RemoteException, LoginException
-    {
-        IPersonHome home = getPersonHome();
-        IPerson person = null;
-        Person result = null;
-
-        try
-        {
-            person = home.findByEmail(email);
-        }
-        catch (FinderException ex)
-        {
-            throw new LoginException("Unknown e-mail address.", false);
-        }
-
-        if (!person.getPassword().equals(password))
-            throw new LoginException("Invalid password.", true);
-
-        try
-        {
-            result = getPerson((Integer) person.getPrimaryKey());
-        }
-        catch (FinderException ex)
-        {
-            throw new LoginException("Could not read person.", false);
-        }
-
-        if (result.isLockedOut())
-            throw new LoginException(
-                    "You have been locked out of the Virtual Library.", false);
-
-        // Set the last access time for any subsequent login.
-
-        person.setLastAccess(new Timestamp(System.currentTimeMillis()));
-
-        return result;
-    }
-
-    public Map getPersonAttributes(Integer personId)
-        throws FinderException, RemoteException
-    {
-        IPersonHome home = getPersonHome();
-
-        IPerson person = home.findByPrimaryKey(personId);
-
-        return person.getEntityAttributes();
-    }
-
-    /**
-     * Retrieves a single {@link Book} by its primary key.
-     * 
-     * @throws FinderException
-     *             if the Book does not exist.
-     */
-
-    public Book getBook(Integer bookId)
-        throws FinderException
-    {
-        Connection connection = null;
-        IStatement statement = null;
-        ResultSet set = null;
-
-        Book result = null;
-
-        try
-        {
-            connection = getConnection();
-
-            StatementAssembly assembly = buildBaseBookQuery();
-            assembly.addSep(" AND ");
-            assembly.add("book.BOOK_ID = ");
-            assembly.addParameter(bookId);
-
-            statement = assembly.createStatement(connection);
-
-            set = statement.executeQuery();
-
-            if (!set.next())
-                throw new FinderException("Book " + bookId + " does not exist.");
-
-            Object[] columns = new Object[Book.NUM_COLUMNS];
-            result = convertRowToBook(set, columns);
-
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException("Unable to perform database query.", ex);
-        }
-        finally
-        {
-            close(connection, statement, set);
-        }
-
-        return result;
-    }
-
-    public Map getBookAttributes(Integer bookId)
-        throws FinderException, RemoteException
-    {
-        IBookHome home = getBookHome();
-
-        IBook book = home.findByPrimaryKey(bookId);
-
-        return book.getEntityAttributes();
-    }
-
-    /**
-     * Attempts to register a new user, first checking that the e-mail and names
-     * are unique. Returns the primary key of the new {@link IPerson}.
-     */
-
-    public Person registerNewUser(String firstName, String lastName,
-            String email, String password)
-        throws RegistrationException, CreateException, RemoteException
-    {
-        IPersonHome home;
-
-        if (password == null || password.trim().length() == 0)
-            throw new RegistrationException("Must specify a password.");
-
-        validateUniquePerson(firstName, lastName, email);
-
-        home = getPersonHome();
-
-        Map attributes = new HashMap();
-
-        attributes.put("lastName", lastName.trim());
-        attributes.put("firstName", firstName.trim());
-        attributes.put("email", email.trim());
-        attributes.put("password", password.trim());
-        attributes.put("lastAccess", new Timestamp(System.currentTimeMillis()));
-
-        IPerson person = home.create(attributes);
-
-        Integer personId = (Integer) person.getPrimaryKey();
-
-        try
-        {
-            return getPerson(personId);
-        }
-        catch (FinderException ex)
-        {
-            throw new XCreateException("Unable to find newly created Person.",
-                    ex);
-        }
-    }
-
-    public Book deleteBook(Integer bookId)
-        throws RemoveException, RemoteException
-    {
-        IBookHome home = getBookHome();
-        Book result = null;
-
-        try
-        {
-            result = getBook(bookId);
-        }
-        catch (FinderException ex)
-        {
-            throw new XRemoveException(ex);
-        }
-
-        home.remove(bookId);
-
-        return result;
-
-    }
-
-    /**
-     * Transfers a number of books to a new owner.
-     */
-
-    public void transferBooks(Integer newOwnerId, Integer[] bookIds)
-        throws FinderException, RemoteException
-    {
-        if (bookIds == null)
-            throw new RemoteException(
-                    "Must supply non-null list of books to transfer.");
-
-        if (newOwnerId == null)
-            throw new RemoteException("Must provide an owner for the books.");
-
-        // Verify that the new owner exists.
-
-        IPersonHome personHome = getPersonHome();
-        personHome.findByPrimaryKey(newOwnerId);
-
-        // Direct SQL would be more efficient, but this'll probably do.
-
-        IBookHome home = getBookHome();
-
-        for(int i = 0; i < bookIds.length; i++)
-        {
-            IBook book = home.findByPrimaryKey(bookIds[i]);
-
-            book.setOwnerId(newOwnerId);
-        }
-    }
-
-    public void updatePublishers(Publisher[] updated, Integer[] deleted)
-        throws FinderException, RemoveException, RemoteException
-    {
-        IPublisherHome home = getPublisherHome();
-
-        if (updated != null)
-        {
-            for(int i = 0; i < updated.length; i++)
-            {
-                IPublisher publisher = home
-                        .findByPrimaryKey(updated[i].getId());
-                publisher.setName(updated[i].getName());
-            }
-        }
-
-        if (deleted != null)
-        {
-            for(int i = 0; i < deleted.length; i++)
-            {
-                home.remove(deleted[i]);
-            }
-        }
-    }
-
-    public void updatePersons(Person[] updated, Integer[] resetPassword,
-            String newPassword, Integer[] deleted, Integer adminId)
-        throws FinderException, RemoveException, RemoteException
-    {
-        IPersonHome home = getPersonHome();
-
-        int count = Tapestry.size(updated);
-
-        for(int i = 0; i < count; i++)
-        {
-            Person u = updated[i];
-            IPerson person = home.findByPrimaryKey(u.getId());
-
-            person.setAdmin(u.isAdmin());
-            person.setLockedOut(u.isLockedOut());
-        }
-
-        count = Tapestry.size(resetPassword);
-
-        for(int i = 0; i < count; i++)
-        {
-            IPerson person = home.findByPrimaryKey(resetPassword[i]);
-
-            person.setPassword(newPassword);
-        }
-
-        count = Tapestry.size(deleted);
-
-        if (count > 0)
-        {
-            returnBooksFromDeletedPersons(deleted);
-            moveBooksFromDeletedPersons(deleted, adminId);
-        }
-
-        for(int i = 0; i < count; i++)
-            home.remove(deleted[i]);
-    }
-
-    /**
-     * Invoked to update all books owned by people about to be deleted, to
-     * reassign the books holder back to the owner.
-     */
-
-    private void returnBooksFromDeletedPersons(Integer[] deletedPersonIds)
-        throws RemoveException
-    {
-        StatementAssembly assembly = new StatementAssembly();
-
-        assembly.add("UPDATE BOOK");
-        assembly.newLine("SET HOLDER_ID = OWNER_ID");
-        assembly.newLine("WHERE HOLDER_ID IN (");
-        assembly.addParameterList(deletedPersonIds, ", ");
-        assembly.add(")");
-
-        executeUpdate(assembly);
-    }
-
-    /**
-     * Invoked to execute a bulk update that moves books to the new admin.
-     */
-
-    private void moveBooksFromDeletedPersons(Integer[] deletedPersonIds,
-            Integer adminId)
-        throws RemoveException
-    {
-        StatementAssembly assembly = new StatementAssembly();
-
-        assembly.add("UPDATE BOOK");
-        assembly.newLine("SET OWNER_ID = ");
-        assembly.addParameter(adminId);
-        assembly.newLine("WHERE OWNER_ID IN (");
-        assembly.addParameterList(deletedPersonIds, ", ");
-        assembly.add(")");
-
-        executeUpdate(assembly);
-
-    }
-
-    private void executeUpdate(StatementAssembly assembly)
-        throws XRemoveException
-    {
-        Connection connection = null;
-        IStatement statement = null;
-
-        try
-        {
-            connection = getConnection();
-
-            statement = assembly.createStatement(connection);
-
-            statement.executeUpdate();
-
-            statement.close();
-            statement = null;
-
-            connection.close();
-            connection = null;
-        }
-        catch (SQLException ex)
-        {
-            throw new XRemoveException("Unable to execute " + assembly + ": "
-                    + ex.getMessage(), ex);
-        }
-        finally
-        {
-            close(connection, statement, null);
-        }
-    }
-
-    /**
-     * Translates the next row from the result set into a {@link Book}.
-     * <p>
-     * This works with queries generated by {@link #buildBaseBookQuery()}.
-     */
-
-    protected Book convertRowToBook(ResultSet set, Object[] columns)
-        throws SQLException
-    {
-        int column = 1;
-
-        columns[Book.ID_COLUMN] = set.getObject(column++);
-        columns[Book.TITLE_COLUMN] = set.getString(column++);
-        columns[Book.DESCRIPTION_COLUMN] = set.getString(column++);
-        columns[Book.ISBN_COLUMN] = set.getString(column++);
-        columns[Book.OWNER_ID_COLUMN] = set.getObject(column++);
-        columns[Book.OWNER_NAME_COLUMN] = buildName(set.getString(column++),
-                set.getString(column++));
-        columns[Book.HOLDER_ID_COLUMN] = set.getObject(column++);
-        columns[Book.HOLDER_NAME_COLUMN] = buildName(set.getString(column++),
-                set.getString(column++));
-        columns[Book.PUBLISHER_ID_COLUMN] = set.getObject(column++);
-        columns[Book.PUBLISHER_NAME_COLUMN] = set.getString(column++);
-        columns[Book.AUTHOR_COLUMN] = set.getString(column++);
-        columns[Book.HIDDEN_COLUMN] = getBoolean(set, column++);
-        columns[Book.LENDABLE_COLUMN] = getBoolean(set, column++);
-        columns[Book.DATE_ADDED_COLUMN] = set.getTimestamp(column++);
-
-        return new Book(columns);
-    }
-
-    private String buildName(String firstName, String lastName)
-    {
-        if (firstName == null) return lastName;
-
-        return firstName + " " + lastName;
-    }
-
-    protected StatementAssembly buildBaseBookQuery()
-    {
-        StatementAssembly result = new StatementAssembly();
-
-        result.newLine("SELECT ");
-        result.addList(BOOK_SELECT_COLUMNS, ", ");
-
-        result.newLine("FROM ");
-        result.addList(BOOK_ALIAS_COLUMNS, ", ");
-
-        result.newLine("WHERE ");
-        result.addList(BOOK_JOINS, " AND ");
-
-        return result;
-    }
-
-    /**
-     * Adds a sort ordering clause to the statement. If ordering is null, orders
-     * by book title.
-     * 
-     * @param assembly
-     *            to update
-     * @param ordering
-     *            defines the column to sort on, and the order (ascending or
-     *            descending)
-     * @since 3.0
-     */
-
-    protected void addSortOrdering(StatementAssembly assembly,
-            SortOrdering ordering)
-    {
-        if (ordering == null)
-        {
-            assembly.newLine("ORDER BY book.TITLE");
-            return;
-        }
-
-        Map sorts = ordering.isDescending() ? BOOK_SORT_DESCENDING
-                : BOOK_SORT_ASCENDING;
-
-        String term = (String) sorts.get(ordering.getColumn());
-
-        assembly.newLine("ORDER BY ");
-        assembly.add(term);
-    }
-
-    protected void addSubstringSearch(StatementAssembly assembly,
-            String column, String value)
-    {
-        if (value == null) return;
-
-        String trimmed = value.trim();
-        if (trimmed.length() == 0) return;
-
-        // Here's the McKoi dependency: LOWER() is a database-specific
-        // SQL function.
-
-        assembly.addSep(" AND LOWER(");
-        assembly.add(column);
-        assembly.add(") LIKE");
-        assembly.addParameter("%" + trimmed.toLowerCase() + "%");
-    }
-
-    /**
-     * Closes the resultSet (if not null), then the statement (if not null),
-     * then the Connection (if not null). Exceptions are written to System.out.
-     */
-
-    protected void close(Connection connection, IStatement statement,
-            ResultSet resultSet)
-    {
-        if (resultSet != null)
-        {
-            try
-            {
-                resultSet.close();
-            }
-            catch (SQLException ex)
-            {
-                System.out.println("Exception closing result set.");
-                ex.printStackTrace();
-            }
-        }
-
-        if (statement != null)
-        {
-            try
-            {
-                statement.close();
-            }
-            catch (SQLException ex)
-            {
-                System.out.println("Exception closing statement.");
-                ex.printStackTrace();
-            }
-        }
-
-        if (connection != null)
-        {
-            try
-            {
-                connection.close();
-            }
-            catch (SQLException ex)
-            {
-                System.out.println("Exception closing connection.");
-                ex.printStackTrace();
-            }
-        }
-    }
-
-    private IPersonHome getPersonHome()
-    {
-        if (_personHome == null)
-        {
-            try
-            {
-                Object raw = _environment.lookup("ejb/Person");
-
-                _personHome = (IPersonHome) PortableRemoteObject.narrow(raw,
-                        IPersonHome.class);
-            }
-            catch (NamingException ex)
-            {
-                throw new XEJBException(
-                        "Could not lookup Person home interface.", ex);
-            }
-
-        }
-
-        return _personHome;
-    }
-
-    private IPublisherHome getPublisherHome()
-    {
-        if (_publisherHome == null)
-        {
-            try
-            {
-                Object raw = _environment.lookup("ejb/Publisher");
-
-                _publisherHome = (IPublisherHome) PortableRemoteObject.narrow(
-                        raw, IPublisherHome.class);
-            }
-            catch (NamingException e)
-            {
-                throw new XEJBException(
-                        "Could not lookup Publisher home interface.", e);
-            }
-
-        }
-
-        return _publisherHome;
-    }
-
-    private IBookHome getBookHome()
-    {
-        if (_bookHome == null)
-        {
-            try
-            {
-                Object raw = _environment.lookup("ejb/Book");
-
-                _bookHome = (IBookHome) PortableRemoteObject.narrow(raw,
-                        IBookHome.class);
-            }
-            catch (NamingException e)
-            {
-                throw new XEJBException(
-                        "Could not lookup Book home interface.", e);
-            }
-
-        }
-
-        return _bookHome;
-    }
-
-    /**
-     * Gets a new connection from the data source.
-     */
-
-    protected Connection getConnection()
-    {
-        try
-        {
-            return _dataSource.getConnection();
-        }
-        catch (SQLException e)
-        {
-            throw new XEJBException(
-                    "Unable to get database connection from pool.", e);
-        }
-    }
-
-    protected StatementAssembly buildBasePersonQuery()
-    {
-        StatementAssembly result;
-
-        result = new StatementAssembly();
-
-        result.newLine("SELECT PERSON_ID, FIRST_NAME, LAST_NAME, EMAIL, ");
-        result.newLine("   LOCKED_OUT, ADMIN, LAST_ACCESS");
-        result.newLine("FROM PERSON");
-
-        return result;
-    }
-
-    /**
-     * Translates the next row from the result set into a {@link Person}.
-     * <p>
-     * This works with queries generated by {@link #buildBasePersonQuery()}.
-     */
-
-    protected Person convertRowToPerson(ResultSet set, Object[] columns)
-        throws SQLException
-    {
-        int column = 1;
-
-        columns[Person.ID_COLUMN] = set.getObject(column++);
-        columns[Person.FIRST_NAME_COLUMN] = set.getString(column++);
-        columns[Person.LAST_NAME_COLUMN] = set.getString(column++);
-        columns[Person.EMAIL_COLUMN] = set.getString(column++);
-        columns[Person.LOCKED_OUT_COLUMN] = getBoolean(set, column++);
-        columns[Person.ADMIN_COLUMN] = getBoolean(set, column++);
-        columns[Person.LAST_ACCESS_COLUMN] = set.getTimestamp(column++);
-
-        return new Person(columns);
-    }
-
-    private Boolean getBoolean(ResultSet set, int index)
-        throws SQLException
-    {
-        return set.getBoolean(index) ? Boolean.TRUE : Boolean.FALSE;
-    }
-
-    private void validateUniquePerson(String firstName, String lastName,
-            String email)
-        throws RegistrationException
-    {
-        Connection connection = null;
-        IStatement statement = null;
-        ResultSet set = null;
-
-        String trimmedEmail = email.trim().toLowerCase();
-        String trimmedLastName = lastName.trim().toLowerCase();
-        String trimmedFirstName = firstName.trim().toLowerCase();
-
-        try
-        {
-            connection = getConnection();
-
-            StatementAssembly assembly = new StatementAssembly();
-            assembly.newLine("SELECT PERSON_ID");
-            assembly.newLine("FROM PERSON");
-            assembly.newLine("WHERE ");
-
-            assembly.add("LOWER(EMAIL) = ");
-            assembly.addParameter(trimmedEmail);
-
-            statement = assembly.createStatement(connection);
-            set = statement.executeQuery();
-
-            if (set.next())
-                throw new RegistrationException(
-                        "Email address is already in use by another user.");
-
-            close(null, statement, set);
-
-            assembly = new StatementAssembly();
-            assembly.newLine("SELECT PERSON_ID");
-            assembly.newLine("FROM PERSON");
-            assembly.newLine("WHERE ");
-
-            assembly.add("LOWER(FIRST_NAME) = ");
-            assembly.addParameter(trimmedFirstName);
-            assembly.addSep(" AND ");
-            assembly.add("LOWER(LAST_NAME) = ");
-            assembly.addParameter(trimmedLastName);
-
-            statement = assembly.createStatement(connection);
-            set = statement.executeQuery();
-
-            if (set.next())
-                throw new RegistrationException(
-                        "Name provided is already in use by another user.");
-
-        }
-        catch (SQLException e)
-        {
-            throw new RegistrationException("Could not access database: "
-                    + e.getMessage(), e);
-        }
-        finally
-        {
-            close(connection, statement, set);
-        }
-    }
-
-    public Book returnBook(Integer bookId)
-        throws RemoteException, FinderException
-    {
-        IBookHome bookHome = getBookHome();
-        IBook book = bookHome.findByPrimaryKey(bookId);
-
-        Integer ownerPK = book.getOwnerId();
-
-        book.setHolderId(ownerPK);
-
-        return getBook(bookId);
-    }
-
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/PersonBean.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/PersonBean.java
deleted file mode 100644
index a2e931f..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/PersonBean.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.rmi.RemoteException;
-import java.sql.Timestamp;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-
-/**
- * Implementation of the Person entity.
- * <p>
- * We're using container managed persistance.
- * 
- * @see org.apache.tapestry.vlib.ejb.IPerson
- * @see org.apache.tapestry.vlib.ejb.IPersonHome
- * @author Howard Lewis Ship
- */
-
-public abstract class PersonBean extends AbstractEntityBean
-{
-
-    protected String[] getAttributePropertyNames()
-    {
-        return new String[] { "firstName", "lastName", "email", "password",
-                "lockedOut", "admin", "lastAccess" };
-    }
-
-    public abstract void setPersonId(Integer value);
-
-    public abstract Integer getPersonId();
-
-    public abstract void setEmail(String value);
-
-    public abstract String getEmail();
-
-    public abstract void setFirstName(String value);
-
-    public abstract String getFirstName();
-
-    public abstract void setLastName(String value);
-
-    public abstract String getLastName();
-
-    public abstract void setPassword(String value);
-
-    public abstract String getPassword();
-
-    public abstract void setLockedOut(boolean value);
-
-    public abstract boolean getLockedOut();
-
-    public abstract void setAdmin(boolean value);
-
-    public abstract boolean getAdmin();
-
-    public abstract void setLastAccess(Timestamp value);
-
-    public abstract Timestamp getLastAccess();
-
-    @SuppressWarnings("unused")
-    public Integer ejbCreate(Map attributes)
-        throws CreateException, RemoteException
-    {
-        updateEntityAttributes(attributes);
-
-        setPersonId(allocateKey());
-
-        return null;
-    }
-
-    public void ejbPostCreate(Map attributes)
-    {
-        // Do nothing
-    }
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/PublisherBean.java b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/PublisherBean.java
deleted file mode 100644
index a134d2f..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/PublisherBean.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-
-/**
- * Implementation of the Publisher entity.
- * <p>
- * We're using container managed persistance.
- * 
- * @see org.apache.tapestry.vlib.ejb.IPublisher
- * @see org.apache.tapestry.vlib.ejb.IPublisherHome
- * @author Howard Lewis Ship
- */
-
-public abstract class PublisherBean extends AbstractEntityBean
-{
-
-    public abstract void setPublisherId(Integer value);
-
-    public abstract Integer getPublisherId();
-
-    public abstract String getName();
-
-    public abstract void setName(String value);
-
-    protected String[] getAttributePropertyNames()
-    {
-        return new String[] { "name" };
-    }
-
-    @SuppressWarnings("unused")
-    public Integer ejbCreate(String name)
-        throws CreateException, RemoteException
-    {
-        setPublisherId(allocateKey());
-        setName(name);
-
-        return null;
-    }
-
-    public void ejbPostCreate(String name)
-    {
-        // Do nothing
-    }
-}
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/package.html b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/package.html
deleted file mode 100644
index 7a63c3b..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/impl/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-EJB Beans
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/package.html b/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/package.html
deleted file mode 100644
index ce416d0..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/java/org/apache/tapestry/vlib/ejb/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-EJB logic
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/VlibBeans/src/test/README.txt b/tapestry/tapestry-examples/VlibBeans/src/test/README.txt
deleted file mode 100644
index 2328423..0000000
--- a/tapestry/tapestry-examples/VlibBeans/src/test/README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Placeholder to keep this directory in existence.
-
-HiveBuild scripts require a src/test directory (a bug to be fixed).
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/pom.xml b/tapestry/tapestry-examples/Workbench/pom.xml
deleted file mode 100644
index 2ac9427..0000000
--- a/tapestry/tapestry-examples/Workbench/pom.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-Workbench</artifactId>
-    <packaging>war</packaging>
-    <version>4.1.3</version>
-
-    <!-- This should change to tapestry-project -->
-    <parent>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>tapestry-examples</artifactId>
-        <version>4.1.3</version>
-    </parent>
-
-    <name>Tapestry Workbench</name>
-    <inceptionYear>2006</inceptionYear>
-
-    <dependencies>
-        <dependency>
-            <groupId>jcharts</groupId>
-            <artifactId>jcharts</artifactId>
-            <version>0.6.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-annotations</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-contrib</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-framework</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.13</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>2.4</version>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <sourceDirectory>src/java</sourceDirectory>
-        <testSourceDirectory>src/test</testSourceDirectory>
-
-        <resources>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*.gif</include>
-                    <include>**/*.png</include>
-                    <include>**/*.jwc</include>
-                    <include>**/*.page</include>
-                    <include>**/*.html</include>
-                    <include>**/*.properties</include>
-                </includes>
-            </resource>
-        </resources>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>2.0.2</version>
-                <configuration>
-                    <source>1.5</source>
-                    <target>1.5</target>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>maven-jetty-plugin</artifactId>
-                <version>6.1.3</version>
-                <configuration>
-                    <webAppSourceDirectory>${basedir}/src/context</webAppSourceDirectory>
-                    <contextPath>/</contextPath>
-                    <systemProperties>
-                        <systemProperty>
-                            <name>org.apache.tapestry.disable-caching</name>
-                            <value>true</value>
-                        </systemProperty>
-                    </systemProperties>
-                </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>commons-logging</groupId>
-                        <artifactId>commons-logging</artifactId>
-                        <version>1.0.4</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>log4j</groupId>
-                        <artifactId>log4j</artifactId>
-                        <version>1.2.13</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-war-plugin</artifactId>
-                <version>2.0.2</version>
-                <configuration>
-                    <warSourceDirectory>${basedir}/src/context</warSourceDirectory>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/tapestry/tapestry-examples/Workbench/src/config/jetty6.xml b/tapestry/tapestry-examples/Workbench/src/config/jetty6.xml
deleted file mode 100644
index d052c25..0000000
--- a/tapestry/tapestry-examples/Workbench/src/config/jetty6.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure 1.2//EN"
-	"http://jetty.mortbay.org/configure.dtd">
-<Configure class="org.mortbay.jetty.Server">
-    
-    <Set name="ThreadPool">
-      <New class="org.mortbay.thread.BoundedThreadPool">
-        <Set name="minThreads">10</Set>
-        <Set name="maxThreads">100</Set>
-      </New>
-    </Set>
-    
-    <Set name="connectors">
-      <Array type="org.mortbay.jetty.Connector">
-      
-        <Item>
-          <New class="org.mortbay.jetty.bio.SocketConnector">
-            <Set name="port">8080</Set>
-            <Set name="maxIdleTime">50000</Set>
-          </New>
-        </Item>
-      
-      <!--
-        <Item>
-          <New class="org.mortbay.jetty.nio.SelectChannelConnector">
-            <Set name="port">8080</Set>
-            <Set name="maxIdleTime">50000</Set>
-            <Set name="Acceptors">10</Set>
-          </New>
-        </Item>
-         -->
-      </Array>
-    </Set>
-    
-   <Set name="handlers">
-      <Array type="org.mortbay.jetty.Handler">
-
-        <!-- ======================================================= -->
-        <!-- Configure a test web application with web.xml           -->
-        <!-- ======================================================= -->
-        <Item>
-          <New id="workbench"  class="org.mortbay.jetty.webapp.WebAppContext">
-            <Set name="contextPath">/</Set>
-            <Set name="resourceBase">src/context</Set>
-            <Set name="VirtualHosts"><Array type="java.lang.String"></Array></Set>
-            <Get name="SessionHandler">
-              <Set name="SessionManager"><New class="org.mortbay.jetty.servlet.HashSessionManager"/></Set>
-            </Get>
-          </New>
-        </Item>
-       </Array>
-    </Set>
-   
-   <Set name="stopAtShutdown">true</Set>
-   <Call name="start"/>
-</Configure>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/Chart.html b/tapestry/tapestry-examples/Workbench/src/context/Chart.html
deleted file mode 100644
index 4a83de9..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/Chart.html
+++ /dev/null
@@ -1,43 +0,0 @@
-
-<span jwcid="@Border">
-
-<h2>Custom Chart Service</h2>
-
-<p>This page demonstrates using a form to drive the dynamic generation of a
-chart (courtesy of <a href="http://jcharts.sourceforge.net/">jCharts</a>).
-Enter names and values in the form and see them in the pie chart at the bottom.
-</p>
-
-<span jwcid="showError"/>
-
-<form jwcid="form">
-
-<table class="form">
-	<tr class="column-header">
-		<th>Category</th>
-		<th>Value</th>
-	</tr>
-	
-	<tr jwcid="plotValues">
-		<td><input jwcid="inputName" size="40" maxlength="40"/></td>
-		<td><input jwcid="inputValue" size="20" maxlength="20"/></td>
-		<td><input jwcid="inputMarked"/></td>
-	</tr>
-
-	<tr>
-		<td colspan="2">
-			<input jwcid="add"/>
-			<input type="submit" value="Update">
-		</td>
-		<td>
-		<input jwcid="delete"/>
-		</td>
-	</tr>
-
-</table>
-
-</form>
-
-<img jwcid="@Image" image="ognl:chartImageAsset" />
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/Dates.html b/tapestry/tapestry-examples/Workbench/src/context/Dates.html
deleted file mode 100644
index 2e26970..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/Dates.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<span jwcid="@Border">
-
-<h2>Date Pickers</h2>
-
-<p>
-    This page is used to demonstrate the DatePicker component. Once submitted the date values input will be displayed below
-    via an XHR request.
-</p>
-
-    <form jwcid="valid@Form">
-        <input jwcid="inputEnabled"/> Enable Client Side Validation
-    </form>
-
-<span jwcid="showError"/>
-
-<form jwcid="dateForm@Form" delegate="bean:delegate"
-      clientValidationEnabled="ognl:clientValidationEnabled"
-      async="true" updateComponents="dateDisplay" >
-    <table >
-        <tbody>
-            <tr>
-                <td colspan="2" >
-                    <input type="checkbox" jwcid="@Checkbox" value="ognl:includeWeek"
-                           onclick="javascript:this.form.submit();"/>
-                    Include weeks in DatePicker UI.
-                </td>
-            </tr>
-            <tr >
-                <td  align="right"><span jwcid="@FieldLabel" field="component:startDate"/>:</td>
-                <td ><input jwcid="startDate@DatePicker" includeWeek="ognl:includeWeek" value="ognl:startDate"
-                            displayName="Start Date" validators="ognl:{beans.required,beans.maxDate}"
-                            translator="translator:date,lenient=false,pattern=dd MMM yyyy" /></td>
-            </tr>
-            <tr>
-                <td  align="right"><span jwcid="@FieldLabel" field="component:endDate"/>:</td>
-                <td ><input jwcid="endDate@DatePicker" includeWeek="ognl:includeWeek" value="ognl:endDate"
-                            displayName="End Date" validators="ognl:{beans.required,beans.minDate}"/></td>
-            </tr>
-
-            <tr>
-                <td></td>
-                <td align="right"><input jwcid="@Submit" value="Submit" /> </td>
-            </tr>
-        </tbody>
-    </table>
-</form>
-<br/>
-<div jwcid="dateDisplay@Any">
-    <u>Submitted Dates</u><br/>
-    <table valign="middle">
-        <tr>
-            <th>Start date:</th>
-            <td> <span jwcid="@Insert" value="ognl:startDate"/></td>
-        </tr>
-        <tr>
-            <th>End date:</th>
-            <td>
-                <span jwcid="@Insert" value="ognl:endDate"/>
-            </td></tr>
-    </table>
-</div>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/ExceptionTab.html b/tapestry/tapestry-examples/Workbench/src/context/ExceptionTab.html
deleted file mode 100644
index 6a54ca9..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/ExceptionTab.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<span jwcid="@Border">
-
-<h2>Line precise error reporting - Exception Pages</h2>
-
-<p>Tapestry has sophisticated exception reporting for when things go wrong in development.
-Exception reporting is very smart, using reflection to work backwards through
-the chain of exceptions, displaying JavaBeans properties of each exception and
-a stack trace of the <em>deepest</em> exception.
-
-<p>In addition, a wealth of detail about the servlet, application, request, servlet context and JVM is displayed.
-The goal is to save developers debugging time by producing a complete report
-when exceptions do occur.
-
-<p>
-The look and feel of the exception reporting page can be customized by applications.
-
-<p>
-Click <a jwcid="link">this link</a> for 
-a demonstration.  The specification of the target page
-has deliberate errors.
-
-
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/Fields.html b/tapestry/tapestry-examples/Workbench/src/context/Fields.html
deleted file mode 100644
index 2584688..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/Fields.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<span jwcid="@Border">
-
-<h2>Fields / Form validation</h2>
-
-Tapestry includes a number of form-related components.  Tapestry components are
-responsible for reading properties when a page is rendered, to supply default values,
-and writing properties when the form is submitted; it is never necesssary to write
-code to directly read HTTP parameters.
-
-<p>
-<form jwcid="valid@Form" focus="false">
-<input jwcid="inputEnabled"/> <em>Enable Client Side Validation</em>
-</form>
-
-<p>Input field components can perform validations on the client-side, triggered
-by the user submitting the form.  The checkbox above enables or disables
-this feature.  Input is always rechecked on the server-side (in case the client
-doesn't support JavaScript).
-
-<span jwcid="showError"/>
-
-<form jwcid="@Form" success="listener:doSubmit" delegate="bean:delegate" 
-      clientValidationEnabled="ognl:clientValidationEnabled" >
-
-<table class="form">
-	<tr>
-		<th><label jwcid="@FieldLabel" accesskey="d" field="component:inputDate"/></th>
-		<td><input jwcid="inputDate"/></td>
-	</tr>
-  <tr>
-  	<th><label jwcid="@FieldLabel" accesskey="i" field="component:inputInt"/></th>
-  	<td><input jwcid="inputInt"/></td>
-  </tr>
-  <tr>
-  	<th><label jwcid="@FieldLabel" field="component:inputDouble"/></th>
-  	<td><input jwcid="inputDouble"/></td>
-  </tr>
-  <tr>
-  	<th><label jwcid="@FieldLabel" accesskey="b" field="component:inputBigDecimal"/></th>
-  	<td><input jwcid="inputBigDecimal"/></td>
-  </tr>
-  <tr>
- 	<th><label jwcid="@FieldLabel" accesskey="l" field="component:inputLong"/></th>
- 	<td><input jwcid="inputLong"/></td>
-  </tr>
-
-  <tr>
-  	<th><label jwcid="@FieldLabel" accesskey="s" field="component:inputString"/></th>
-  	<td><input jwcid="inputString"/></td>
-  </tr>
-
-  <tr>
-  	<th><label jwcid="@FieldLabel" accesskey="e" field="component:inputEmail"/></th>
-  	<td><input jwcid="inputEmail"/></td>
-  </tr>
-  
-  <tr>
-    <th><label jwcid="@FieldLabel" accessKey="z" field="component:zipCode"/></th>
-    <td><input jwcid="zipCode" /></td>
-  </tr>
-  
-  <tr>
-    <th><label for="phone" accessKey="p">Phone</label></th>
-    <td><input jwcid="phone" /></td>
-  </tr>
-  <tr>
-      <th><label jwcid="@FieldLabel" accessKey="a" field="component:ipaddress" /></th>
-      <td><input jwcid="ipaddress" /></td>
-  </tr>
-
-  <tr>
-  	<th><label jwcid="@FieldLabel" accesskey="a" field="component:textArea"/></th>
-  	<td><input jwcid="textArea" cols="33" rows="4" /></td>
-  </tr>
-
-  <tr>
-      <th><label jwcid="@FieldLabel" field="component:choose" /></th>
-      <td>
-          <div jwcid="choose@RadioGroup" selected="ognl:visit.choice" displayName="Choose" validators="validators:required" >
-           <input jwcid="@Radio" value="literal:2" />&nbsp;Yes&nbsp;
-           <input jwcid="@Radio" value="literal:4" />&nbsp;No
-          </div>
-      </td>
-  </tr>
-
-  <tr>
-  	<td> </td>
-  	<td><input jwcid="continue@ImageSubmit" image="asset:continue"/></td>
-  </tr>
-
-  <tr>
-      	<td></td>
-  		<td>
-      	Or, use a LinkSubmit component:   
-      	<a jwcid="continueLink@LinkSubmit" listener="listener:doByLink">Continue</a>
-        </td>
-  </tr>
-  
-</table>
-
-</form>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/FieldsResults.html b/tapestry/tapestry-examples/Workbench/src/context/FieldsResults.html
deleted file mode 100644
index 11434c6..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/FieldsResults.html
+++ /dev/null
@@ -1,68 +0,0 @@
-
-<span jwcid="@Border">
-
-<h2>Field Results</h2>
-
-<span jwcid="@If" condition="ognl:byLink">
-<b>You clicked the link on the previous form.</b>
-</span>
-
-<table>
-	<tr>
-		<th>Date Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.dateValue"/></td>
-	</tr>
-
-	<tr>
-		<th>Integer Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.intValue"/></td>
-	</tr>
-
-	<tr>
-		<th>Double Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.doubleValue"/></td>
-	</tr>
-
-	<tr>
-		<th>Big Decimal Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.bigDecimalValue"/></td>
-	</tr>
-
-	<tr>
-		<th>Long Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.longValue"/></td>
-	</tr>
-
-	<tr>
-		<th>String Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.stringValue"/></td>
-	</tr>
-
-	<tr>
-		<th>Email Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.emailValue"/></td>
-	</tr>
-	
-  <tr>
-    <th>Zip Code</th>
-    <td><span jwcid="@Insert" value="ognl:visit.zipCode"/></td>
-  </tr>
-  	
-  	<tr>
-		<th>Phone Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.phone"/></td>
-	</tr>
-  	
-	<tr>
-		<th>Text Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.textValue"/></td>
-	</tr>
-  
-</table>
-
-<p>
-
-<a jwcid="@PageLink" page="Fields"><img jwcid="backRollover" alt="[Back]"/></a>
-</p>
-
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/FileSystemTableTree.html b/tapestry/tapestry-examples/Workbench/src/context/FileSystemTableTree.html
deleted file mode 100644
index 30d03ce..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/FileSystemTableTree.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="@Border">
-<!-- to remove the fixed width=700px from workbench.css file for Tree Tab the TABLE.content has been added here-->
-<style>
-TABLE.content
-{
-	background-color: #ffffcc;
-  	border-color : Black;
-	border-style : solid;
-	border-width : thin;
-	border-top-width : 0px;
-	border-bottom-width : 2px;
-	border-right-width : 2px;
-	border-left-width : 0px;
-	font-size : smaller;
-	clear: all;
-	width: auto;
-}
-
-.notSelectedNodeViewClass img, .selectedNodeViewClass img{
-	vertical-align : bottom; align:absmiddle;
-}
-.selectedNodeViewClass .fsNodeValue {
-	FONT-SIZE: 12px; COLOR: white; BACKGROUND-COLOR: #3163ce; 
-}
-.selectedNodeViewClass A:link {
-	FONT-SIZE: 12px; TEXT-DECORATION: none
-}
-.selectedNodeViewClass A:visited {
-	FONT-SIZE: 12px; TEXT-DECORATION: none
-}
-.selectedNodeViewClass A:active {
-	FONT-SIZE: 12px; TEXT-DECORATION: none
-}
-.selectedNodeViewClass A:hover {
-	FONT-SIZE: 12px; COLOR: white; TEXT-DECORATION: underline;
-}
-.notSelectedNodeViewClass .fsNodeValue {
-	FONT-SIZE: 12px; COLOR: black;
-}
-.notSelectedNodeViewClass A:link {
-	FONT-SIZE: 12px; TEXT-DECORATION: none; COLOR: black;
-}
-.notSelectedNodeViewClass A:visited {
-	FONT-SIZE: 12px; TEXT-DECORATION: none; COLOR: black;
-}
-.notSelectedNodeViewClass A:active {
-	FONT-SIZE: 12px; TEXT-DECORATION: none; COLOR: black;
-}
-.notSelectedNodeViewClass A:hover {
-	FONT-SIZE: 12px; TEXT-DECORATION: underline; COLOR: black;
-}
-.odd { background-color: #cccccc; }
-
-</style>
-    <h1>File System TreeTable Example</h1>
-    <address><a href="mailto:tsvetelin.saykov@rushmore-digital.com">developed by Tsvetelin</a></address>
-    <hr>
-    	<table border="1" width="100%">
-    		<tr>
-    			<td valign="top"><span jwcid="tree"/></td>
-    			<td valign="top"><span jwcid="directoryTableView"/></td>
-    		</tr>
-    	</table>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/FileSystemTree.html b/tapestry/tapestry-examples/Workbench/src/context/FileSystemTree.html
deleted file mode 100644
index 64ae55b..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/FileSystemTree.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="@Border">
-<!-- to remove the fixed width=700px from workbench.css file for Tree Tab the TABLE.content has been added here-->
-<style>
-TABLE.content
-{
-	background-color: #ffffcc;
-  	border-color : Black;
-	border-style : solid;
-	border-width : thin;
-	border-top-width : 0px;
-	border-bottom-width : 2px;
-	border-right-width : 2px;
-	border-left-width : 0px;
-	font-size : smaller;
-	clear: all;
-	width: auto;
-}
-
-.notSelectedNodeViewClass img, .selectedNodeViewClass img{
-	vertical-align : bottom; align:absmiddle;
-}
-.selectedNodeViewClass .fsNodeValue {
-	FONT-SIZE: 12px; COLOR: white; BACKGROUND-COLOR: #3163ce; vertical-align : bottom; 
-}
-.selectedNodeViewClass A:link {
-	FONT-SIZE: 12px; TEXT-DECORATION: none
-}
-.selectedNodeViewClass A:visited {
-	FONT-SIZE: 12px; TEXT-DECORATION: none
-}
-.selectedNodeViewClass A:active {
-	FONT-SIZE: 12px; TEXT-DECORATION: none
-}
-.selectedNodeViewClass A:hover {
-	FONT-SIZE: 12px; COLOR: white; TEXT-DECORATION: underline; vertical-align : bottom;
-}
-.notSelectedNodeViewClass .fsNodeValue {
-	FONT-SIZE: 12px; COLOR: black; vertical-align : bottom;
-}
-.notSelectedNodeViewClass A:link {
-	FONT-SIZE: 12px; TEXT-DECORATION: none
-}
-.notSelectedNodeViewClass A:visited {
-	FONT-SIZE: 12px; TEXT-DECORATION: none
-}
-.notSelectedNodeViewClass A:active {
-	FONT-SIZE: 12px; TEXT-DECORATION: none
-}
-.notSelectedNodeViewClass A:hover {
-	FONT-SIZE: 12px; TEXT-DECORATION: underline; COLOR: black;  vertical-align : bottom;
-}
-</style>
-    <h1>File System Tree Example</h1>
-    <address><a href="mailto:tsvetelin.saykov@rushmore-digital.com">developed by Tsvetelin</a></address>
-    <hr>    
-    	<table border="1" width="100%">
-    		<tr>
-    			<td valign="top" width="*"><span class="tree" jwcid="treeView">
-						<span jwcid="treeData">
-							<span jwcid="treeNodeView"/>
-						</span>
-					</span>		
-				</td>
-				<td valign="top" height="100%"><span jwcid="directoryTableView"/></td>
-    		</tr>
-    	</table>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/Home.html b/tapestry/tapestry-examples/Workbench/src/context/Home.html
deleted file mode 100644
index 5404c46..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/Home.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<span jwcid="@Border">
-
-<h2>Tapestry Workbench</h2>
-
-<p>This is the Tapestry Workbench.  It is a testing ground for Tapestry.
-Each tab above links to a new page, or set of pages, that demonstrate Tapestry components and
-features.</p>
-
-<p>The check box control below is used to enable or disable the display of request information.  This is
-a detailed description of incoming request and session data, the same as provided by
-the Tapestry Inspector.  This is very useful when trying to understand or debug a form component.</p>
-
-<p>The Tapestry icon in the lower right corner raises the Tapestry Inspector in a new window.
-The Inspector is a mini-application used
-to explore a running Tapestry application.</p>
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/Palette.html b/tapestry/tapestry-examples/Workbench/src/context/Palette.html
deleted file mode 100644
index 90ccebe..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/Palette.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<span jwcid="@Border">
-
-<h2>Palette Selection Boxes</h2>
-
-<p>The Palette component is used to collect multiple selections, items are selected
-in the left column (available) and moved to the right column (selected).  The component
-can be configured to keep the items sorted by their visible label, their
-hidden value, or manually sorted.  Items are moved between columns using the buttons,
-or by double clicking.</p>
-
-<form jwcid="valid@Form">
-<input jwcid="inputEnabled"/> Enable Client Side Validation
-</form>
-
-<span jwcid="@form/ShowError" delegate="bean:delegate"/>
-
-<form jwcid="form">
-
-<table class="form">
-	<tr>
-		<th>Sort Mode:</th>
-		<td><input jwcid="inputColorSort"/></td>
-	</tr>
-	<tr>
-		<th><span jwcid="@FieldLabel" field="component:inputColor"/>:</th>
-		<td><input jwcid="inputColor"/></td>
-	</tr>
-	<tr>
-		<td></td>
-		<td><input jwcid="update"/>
-			<a jwcid="continue"><image jwcid="continueRollover" /></a>
-            </td>
-	</tr>
-</table>
-
-</form>
-
-<p>
-Obviously, there's a whole lot of JavaScript running on the client side.  However, there
-are no arbitrary limits; you can have as many Palettes in a form as you want, or have multiple
-forms and multiple Palettes.  Tapestry uses a sophisticated method of generating custom JavaScript
-from a template.</p>
-  
-<p>You can also customize the images used for the buttons and the titles above the
-two selection columns.</p>
-
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/PaletteResults.html b/tapestry/tapestry-examples/Workbench/src/context/PaletteResults.html
deleted file mode 100644
index e099519..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/PaletteResults.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<span jwcid="@Border">
-
-<p>Here are your selections.  If the Palette was set for manual sorting, then the order
-is significant.
-
-<ul>
-<li jwcid="loop"><span jwcid="@Insert" value="ognl:components.loop.value"/></li>
-</ul>
-
-<span jwcid="@If" condition="ognl:! selectedColors">
-<p>You made no selections.
-</span>
-
-<p>
-<a jwcid="@PageLink" page="Palette"><img jwcid="backRollover" alt="[Back]"/></a>
-
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/Redirect.html b/tapestry/tapestry-examples/Workbench/src/context/Redirect.html
deleted file mode 100644
index f880c7a..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/Redirect.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<span jwcid="@Border">
-
-<h2>Easy Redirects</h2>
-
-    <p>This page demonstrates that Tapestry can interoperate with traditional web applications. A listener method may
-        redirect to either an internal resource within the same web application, or to an external URL.</p>
-    <p> Examples:</p>
-    <ul>
-        <li><a href="#" jwcid="@DirectLink" listener="listener:redirectInternal">Forward to internal resource</a>
-            (redirect-target.html)</li>
-        <li><a href="#" jwcid="@DirectLink" listener="listener:redirectExternal">Redirect to external URL</a>
-            (http://jakarta.apache.org/tapestry)</li>
-    </ul>
-    <p> The code for both these cases is very simple:</p>
-    <pre>
-public void redirectInternal()
-  throws RequestCycleException
-{
-	throw new RedirectException("redirect-target.html");
-}
-
-public void redirectExternal()
-  throws RequestCycleException
-{
-	throw new RedirectException("http://tapestry.apache.org/");
-}
-	</pre>
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/Table.html b/tapestry/tapestry-examples/Workbench/src/context/Table.html
deleted file mode 100644
index 8e245cb..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/Table.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<span jwcid="@Border">
-
-<h2>Tablular data / Grid</h2>
-
-<p>
-The Table component is a facade component in the Table family. Table allows you to present a sortable 
-and pagable table simply and easily by using only this one component.
-</p>
-
-	<span jwcid="localeList"/>
-
-	<span jwcid="localeSelection"/>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/TreeHome.html b/tapestry/tapestry-examples/Workbench/src/context/TreeHome.html
deleted file mode 100644
index 1405833..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/TreeHome.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="@Border">
-
-<h2>Contrib Tree Component Examples</h2>
-
-<p>
-There are 2 major components in the tree package.
-</p>
-
-<p>The first one is called just a Tree. This components render the node views and divided the rows by inserting the HTML tag BR.
-</p>
-
-<p><a href="FileSystemTree.page">Here</a> you can test the simple file system demo - file explorer.
-</p>
-<p>The second one is called TreeTable. It use Contrib:Table to render the rows with expanded tree nodes. 
-You could pass additional table columns to the TreeTable as parameters.
-</p>
-
-<p>
-<a href="FileSystemTableTree.page">Here</a> you can test the simple file system demo - file explorer.
-</p>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/Upload.html b/tapestry/tapestry-examples/Workbench/src/context/Upload.html
deleted file mode 100644
index 30324a5..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/Upload.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<span jwcid="$content$">
-
-<span jwcid="@Border">
-
-<h2>File Uploads</h2>
-
-<p>The Upload component is used as a form element and allows files to be uploaded to Tapestry.  It can
-be freely mixed with other components in a form.</p>
-
-<p>The following form allows you to upload a file and see a hexadecimal dump of it.</p>
-
-<form jwcid="valid@Form">
-<input jwcid="inputEnabled"/> Enable Client Side Validation
-</form>
-
-<span jwcid="@form/ShowError" delegate="bean:delegate"/>
-
-<form jwcid="@Form" success="listener:doSubmit" delegate="bean:delegate" clientValidationEnabled="ognl:clientValidationEnabled">
-  
-<table class="form">
-	<tr>
-		<th><span jwcid="@FieldLabel" field="component:inputFile"/>:</th>
-		<td><input jwcid="inputFile@Upload" file="ognl:file" size="30"
-					displayName="File" validators="validators:required"/></td>
-	</tr>
-	<tr>
-		<th>Options:</th>
-		<td>
-			<table class="form">
-				<tr>
-					<th><input jwcid="@Checkbox" value="ognl:showAscii"/></th>
-					<td>Display ASCII</td>
-				</tr>
-				<tr>
-					<th><select jwcid="inputWidth"/></th>
-					<td>bytes per line</td>
-				</tr>
-			</table>
-    </td>
-	</tr>
-	
-	<tr>
-		<td></td>
-		<td><input jwcid="@ImageSubmit" image="asset:continue"/></td>
-	</tr>
-	
-</table>
-</form>
-
-</span>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/UploadResults.html b/tapestry/tapestry-examples/Workbench/src/context/UploadResults.html
deleted file mode 100644
index 79d14e4..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/UploadResults.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<span jwcid="@Border">
-
-<table border=0>
-	<tr><th>Upload Path:</th>
-		<td><span jwcid="@Insert" value="ognl:file.filePath">File path</span></td>
-	</tr>
-	<tr><th>Upload File:</th>
-		<td><span jwcid="@Insert" value="ognl:file.fileName">File name</span></td>
-	</tr>
-	<tr><th>Content Type:</th>
-		<td><span jwcid="@Insert" value="ognl:file.contentType">text/plain</span></td>
-	</tr>	
-	<tr>
-		<th>Size:</th>	
-		<td><span jwcid="@Insert" value="ognl:file.size">1000</span> (bytes)
-			
-		<span jwcid="@If" condition="ognl:file.inMemory">(in memory)</span>	
-		</td>
-	</tr>
-</table>
-
-<p>
-<pre><span jwcid="@Insert" value="ognl:fileDump"/></pre>
-
-<p>
-<a jwcid="@PageLink" page="Upload"><img jwcid="backRollover" alt="[Back]"/></a>
-
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border.html b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border.html
deleted file mode 100644
index 073786a..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<html jwcid="@Shell" stylesheet="asset:stylesheet" 
-	title="message:window.title" browserLogLevel="DEBUG" consoleEnabled="true" debugEnabled="false">
-<body jwcid="@Body">
-
-
-<table class="content" border="0" cellpadding="0" cellspacing="0" style="width:92%;">
-<tr>
-<td width="82%">
-<div class="page">
-<span jwcid="@RenderBody">Page content goes here.</span>
-</div>
-</td>
-<td align="left" valign="top" style="padding-top:2em">
- <ul class="navbar">
-	<li jwcid="@For" source="ognl:pageTabNames" value="ognl:pageName" class="ognl:isActivePage() ? 'here' : ''">
-		<a jwcid="pageLink"><span jwcid="@Insert" value="ognl:pageTitle">Page Title</span></a>
-	</li>
-</ul>
-</td>
-</tr>
-</table>
-
-
-<form jwcid="@Form" focus="false" style="float:left">
-      
-<table class="requestDebug" cellspacing="0">
-  <tr class="control">
-    <td>
-
-        <input type="checkbox" jwcid="inputRequestDebug"/>
-        <span key="prompt.display-request-debug">Display Request Debug Information</span>
-  
-    </td>
-    
-    <td align="right">
-    <input type="checkbox" jwcid="inputDisableInspector"/> Disable Inspector
-    </td>
-    
-  </tr>
-  <tr class="data">
-    <td colspan="2">
-      <span jwcid="@If" condition="ognl:visit.requestDebug">
-        <span jwcid="@RequestDisplay"/>
-      </span>
-    </td>
-  </tr>
-</table>
-
-</form>
-    
-<span jwcid="@contrib:InspectorButton" disabled="ognl:visit.disableInspector"/>
-
-<span jwcid="@contrib:Timeout" autoProlongTime="600" disableWarning="true"/>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border.jwc b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border.jwc
deleted file mode 100644
index 27931c5..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification allow-informal-parameters="no">
-
-  <component id="pageLink" type="DirectLink">
-    <binding name="listener" value="listener:selectPage"/>
-    <binding name="parameters" value="pageName"/>
-    <binding name="stateful" value="false"/>
-  </component>
-
-  <component id="inputRequestDebug" type="Checkbox">
-    <binding name="value" value="visit.requestDebug"/>
-    <binding name="onclick" value="literal:tapestry.form.submit(this.form)"/>
-  </component>
-
-  <component id="inputDisableInspector" type="Checkbox">
-    <binding name="value" value="visit.disableInspector"/>
-    <binding name="onclick" value="literal:tapestry.form.submit(this.form)"/>
-  </component>
-
-  <asset name="inactiveLeft" path="images/tab-inactive-left.gif"/>
-  <asset name="inactiveMid" path="images/tab-inactive-mid.gif"/>
-  <asset name="inactiveRight" path="images/tab-inactive-right.gif"/>
-
-  <asset name="stylesheet" path="css/workbench.css"/>  
-
-</component-specification>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border.properties b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border.properties
deleted file mode 100644
index 853a7b9..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-Home=Home
-localization/Localization=L10N
-Fields=Fields
-Palette=Palette
-Upload=Upload
-Chart=Chart
-Redirect=Redirect
-ExceptionTab=Exception
-Dates=Dates
-Table=Table
-TreeHome=Tree
-
-# Order of tabs across the top, space separated
-# These are the page names.
-
-tab-order=Home localization/Localization Fields Dates Chart Palette Upload Redirect ExceptionTab Table TreeHome
-
-window.title=Tapestry Component Workbench
-prompt.display-request-debug=Display Request Debug Information
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border_de.properties b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border_de.properties
deleted file mode 100644
index 9c11acc..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border_de.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-Home=Haupt
-Fields=Felder
-Palette=Anwählungen
-Upload=Antriebskraft
-Chart=Diagramm
-Redirect=Umadressieren
-ExceptionTab=Ausnahme
-
-window.title=Tapisserie Bestandteil Werktisch
-prompt.display-request-debug=Anzeige Antrag Prüfen Informationen Aus
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border_fr.properties b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border_fr.properties
deleted file mode 100644
index dc1819d..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border_fr.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-Home=Maison
-Fields=Zones
-Palette=Sélections
-Redirect=Réorientent
-Chart=Diagramme
-Upload=Téléchargement
-
-window.title=Établi De Composant De Tapisserie
-prompt.display-request-debug=La Demande D'Affichage Corrigent L'Information
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border_it.properties b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border_it.properties
deleted file mode 100644
index aa222b1..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Border_it.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-Home=Domestico
-Fields=Campi
-Palette=Selezioni
-Chart=Tabella
-Redirect=Riorientano
-ExceptionTab=Eccezione
-
-window.title=Banco da lavoro Del Componente Della Tappezzeria
-prompt.display-request-debug=La Richiesta Dell'Esposizione Mette a punto Le Informazioni
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Chart.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Chart.page
deleted file mode 100644
index fd928ff..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Chart.page
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification class="org.apache.tapestry.workbench.chart.ChartPage">
-
-  <property name="plotValues" persist="session"/>
-  
-  <bean name="delegate" property="delegate"
-        class="org.apache.tapestry.workbench.WorkbenchValidationDelegate"/>
-
-  <component id="showError" type="form/ShowError">
-     <binding name="delegate" value="bean:delegate"/>
-  </component>
-
-  <component id="form" type="Form">
-    <binding name="delegate" value="bean:delegate"/>
-  </component>
-
-  <component id="plotValues" type="For">
-    <binding name="source" value="plotValues"/>
-    <binding name="value" value="plotValue"/>
-    <binding name="element" value="literal:tr"/>
-  </component>
-
-  <component id="inputName" type="ValidField">
-  	<binding name="displayName" value="literal:Name"/>
-  	<binding name="value" value="plotValue.name"/>
-  	<binding name="validator" value="validator:string,required,clientScriptingEnabled"/>
-  </component>
-
-  <component id="inputValue" type="ValidField">	
-  	<binding name="displayName" value="literal:Value"/>
-  	<binding name="value" value="plotValue.value"/>
-  	<binding name="validator" value="validator:int,required,clientScriptingEnabled,minimum=0"/>
-  </component>
-  
-  <component id="inputMarked" type="Checkbox">
-    <binding name="value" value="markedForDeletion"/>
-  </component>
-  
-  <component id="add" type="Submit">
-  	<binding name="listener" value="listener:add"/>
-  	<binding name="label" value="literal:Update and Add"/>
-  </component>
-  
-  <component id="delete" type="Submit">	
-  	<binding name="listener" value="listener:delete"/>
-  	<binding name="label" value="literal:Delete Selected"/>
-  </component>
-    
-  <inject object="service:workbench.Chart" property="chartService"/>
-</page-specification>
-
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Dates.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Dates.page
deleted file mode 100644
index df52d62..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Dates.page
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification class="org.apache.tapestry.workbench.Dates" >
-	
-  <bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate" property="delegate"/>
-  
-  <property name="clientValidationEnabled" persist="client" initial-value="true"/>
-  <property name="includeWeek" persist="client"/>
-  <property name="startDate" persist="client"/>
-  <property name="endDate" persist="client"/>
-
-  <bean name="required" class="org.apache.tapestry.form.validator.Required"></bean>
-  <bean name="maxDate" class="org.apache.tapestry.form.validator.MaxDate">
-    <set name="maxDate" value="new java.util.Date()"></set>
-  </bean>
-  <bean name="minDate" class="org.apache.tapestry.form.validator.MinDate">
-    <set name="minDate" value="new java.util.Date()"></set>
-  </bean>
-  
-  <component id="inputEnabled" type="Checkbox">
-    <binding name="value" value="clientValidationEnabled"/> 
-    <binding name="onchange" value="literal:tapestry.form.submit(this.form);"/>
-  </component>
-  
-  <component id="showError" type="form/ShowError">
-     <binding name="delegate" value="bean:delegate"/>
-  </component>
-
-</page-specification>
-
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/DirectoryTableView.html b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/DirectoryTableView.html
deleted file mode 100644
index 3ee3337..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/DirectoryTableView.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<span jwcid="$content$">
-<table height="100%" width="100%">
-	<tr>
-		<td valign="top" height="*" width="100%">Table View Of Folder : <span jwcid="@Insert" value="ognl:selectedNodeName"/></td>
-	</tr>
-	<tr>
-		<td valign="top" height="100%" width="100%"><span jwcid="table"/></td>
-	</tr>
-</span>		
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/DirectoryTableView.jwc b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/DirectoryTableView.jwc
deleted file mode 100644
index df0f687..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/DirectoryTableView.jwc
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.workbench.tree.examples.DirectoryTableView"
-    allow-body="yes" allow-informal-parameters="yes">
-    
-	<component id="table" type="contrib:Table">
-		<binding name="tableModel" value="tableModel"/>
-		<!--binding name="tableSessionStateManager" expression="tableSessionStateManager"/-->
-	</component>
-
-
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/ErrorFest.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/ErrorFest.page
deleted file mode 100644
index 1152cf4..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/ErrorFest.page
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.workbench.fields.Fields">
-
-    <inject type="state" property="visit" object="session-data" />
-
-	<component id="border" type="Border"/>
-	<component id="showError" type="form/ShowError">
-		<binding name="delegate" expression="beans.delegate"/>
-	</component>
-	<component id="form" type="Form">
-		<binding name="listener" expression="listeners.formSubmit"/>
-		<binding name="delegate" expression="beans.delegate"/>
-	</component>
-	<component id="dateLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputDate"/>
-	</component>
-	<component id="inputDate" type="ValidField">
-		<binding name="validator" expression="beans.dateValidator"/>
-		<binding name="value" expression="visit.dateValue"/>
-		<static-binding name="displayName">Date Field</static-binding>
-	</component>
-	<component id="intLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputInt"/>
-	</component>
-	<component id="inputInt" type="ValidField">
-		<binding name="validator" expression="beans.intValidator"/>
-		<binding name="value" expression="visit.intValue"/>
-		<static-binding name="displayName">Integer Field</static-binding>
-	</component>
-	<component id="doubleLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputDouble"/>
-	</component>
-	<component id="inputDouble" type="ValidField">
-		<binding name="validator" expression="beans.doubleValidator"/>
-		<binding name="value" expression="visit.doubleValue"/>
-		<static-binding name="displayName">Double Field</static-binding>
-	</component>
-	<component id="bigDecimalLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputBigDecimal"/>
-	</component>
-	<component id="inputBigDecimal" type="ValidField">
-		<binding name="value" expression="visit.bigDecimalValue"/>
-		<binding name="validator" expression="beans.bigDecimalValidator"/>
-		<static-binding name="displayName">Big Decimal Field</static-binding>
-	</component>
-	<component id="longLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputLong"/>
-	</component>
-	<component id="inputLong" type="ValidField">
-		<binding name="value" expression="visit.longValue"/>
-		<binding name="validator" expression="beans.longValidator"/>
-		<static-binding name="displayName">Long Field</static-binding>
-	</component>
-	<component id="stringLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputString"/>
-	</component>
-	<component id="inputString" type="ValidField">
-		<binding name="value" expression="visit.stringValue"/>
-		<binding name="validator" expression="beans.stringValidator"/>
-		<static-binding name="displayName">String Field</static-binding>
-	</component>
-	<component id="continue" type="ImageSubmit">
-		<binding name="image" propertypath="assets.continue"/>
-	</component>
-	<context-asset name="continue" path="/images/workbench/Continue.gif"/>
-</page-specification>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Fields.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Fields.page
deleted file mode 100644
index 225a994..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Fields.page
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification class="org.apache.tapestry.workbench.fields.Fields">
-
-    <property name="clientValidationEnabled" persist="client" initial-value="true"/>
-
-    <property name="mask" initial-value="literal:(###) ###-####" />
-
-    <bean name="required" class="org.apache.tapestry.form.validator.Required"/>
-    <bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate" />
-
-    <bean name="dateValidator" lifecycle="render" class="org.apache.tapestry.form.validator.MinDate">
-        <set name="minDate" value="new java.util.Date()"/>
-    </bean>
-
-    <component id="inputEnabled" type="Checkbox">
-        <binding name="value" value="clientValidationEnabled"/>
-        <binding name="onClick" value="literal:tapestry.form.submit(this.form)"/>
-    </component>
-
-    <component id="showError" type="form/ShowError">
-        <binding name="delegate" value="bean:delegate"/>
-    </component>
-
-    <component id="inputDate" type="TextField">
-        <binding name="value" value="visit.dateValue"/>
-        <binding name="translator" value="translator:date,pattern=MM-dd-yyyy,lenient=false"/>
-        <binding name="validators" value="{ beans.required, beans.dateValidator }"/>
-        <binding name="displayName" value="literal:Date Field"/>
-    </component>
-
-
-    <component id="inputInt" type="TextField">
-        <binding name="value" value="visit.intValue"/>
-        <binding name="translator" value="translator:number,pattern=#"/>
-        <binding name="displayName" value="literal:Integer Field"/>
-        <binding name="validators" value="validators:required,min=5,max=20"/>
-    </component>
-
-    <component id="inputDouble" type="TextField">
-        <binding name="value" value="visit.doubleValue"/>
-        <binding name="translator" value="translator:number,pattern=#.#"/>
-        <binding name="validators" value="validators:required,min=3.14,max=4627.5"/>
-        <binding name="displayName" value="literal:Double Field"/>
-    </component>
-
-    <component id="inputBigDecimal" type="TextField">
-        <binding name="value" value="visit.bigDecimalValue"/>
-        <binding name="translator" value="translator:number,pattern=#.#"/>
-        <binding name="validators" value="validators:required,min=2,max=100.123456234563456734563456356734567456784567456784567845675678456785678"/>
-        <binding name="displayName" value="literal:Big Decimal Field"/>
-    </component>
-
-    <component id="inputLong" type="TextField">
-        <binding name="value" value="visit.longValue"/>
-        <binding name="translator" value="translator:number,pattern=#"/>
-        <binding name="validators" value="validators:required,min=6,max=21"/>
-        <binding name="displayName" value="literal:Long Field"/>
-    </component>
-
-    <component id="inputString" type="TextField">
-        <binding name="value" value="visit.stringValue"/>
-        <binding name="validators" value="validators:required,minLength=3"/>
-        <binding name="displayName" value="literal:String Field"/>
-    </component>
-
-    <component id="inputEmail" type="TextField">
-        <binding name="value" value="visit.emailValue"/>
-        <binding name="validators" value="validators:required,email"/>
-        <binding name="displayName" value="literal:Email Field"/>
-    </component>
-
-    <bean name="zipValidator" class="org.apache.tapestry.form.validator.Pattern">
-        <set name="pattern" value="message:zip-code-pattern"/>
-        <set name="message" value="message:zip-code-message"/>
-    </bean>
-
-    <component id="zipCode" type="TextField">
-        <binding name="value" value="visit.zipCode"/>
-        <binding name="validators" value="validators:required,$zipValidator"/>
-        <binding name="displayName" value="message:zip-code-label"/>
-    </component>
-
-    <component id="phone" type="contrib:MaskEdit">
-        <binding name="value" value="visit.phone"/>
-        <binding name="mask" value="literal:(###) ###-####"/>
-    </component>
-
-    <component id="ipaddress" type="TextField">
-        <binding name="value" value="visit.ipaddress"/>
-        <binding name="displayName" value="literal:IP Address"/>
-        <binding name="validators" value="validators:required"/>
-        <binding name="mask" value="literal:###.###.###.###"/>
-    </component>
-
-    <component id="textArea" type="TextArea">
-        <binding name="value" value="visit.textValue" />
-        <binding name="validators" value="validators:required,minLength=20"/>
-        <binding name="displayName" value="literal:Text Area"/>
-    </component>
-    
-</page-specification>
-
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Fields.properties b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Fields.properties
deleted file mode 100644
index ed7493a..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Fields.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-zip-code-label=Zip Code

-zip-code-pattern=^\\d{5}(-\\d{4})?$

-zip-code-message=Zip codes are either five or nine digits; 02134 or 90125-1234.

diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/FieldsResults.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/FieldsResults.page
deleted file mode 100644
index a2cdedf..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/FieldsResults.page
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification class="org.apache.tapestry.workbench.fields.FieldsResults">
-   
-  <component id="backRollover" type="Rollover">
-    <binding name="image" value="asset:back"/>
-    <binding name="mouseOver" value="asset:backFocus"/>
-  </component>
-
-  <asset name="back" path="images/Back.gif"/>
-  <asset name="backFocus" path="images/Back-focus.gif"/>
-
-</page-specification>
-
-
-
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/FileSystemTableTree.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/FileSystemTableTree.page
deleted file mode 100644
index 251f222..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/FileSystemTableTree.page
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-
-<page-specification class="org.apache.tapestry.workbench.tree.examples.FileSystemTreeTable">
-
-
-    <component id="body" type="Body"/>
-
-    <component id="currentTime" type="Insert">
-        <binding name="value" value="currentTime"/>
-    </component>
-
-    <component id="shell" type="Shell">
-        <binding name="stylesheet" value="asset:stylesheet"/>
-        <binding name="title" value="literal:Home"/>
-    </component>
-
-    <component id="tree" type="contrib:TreeTable">
-        <binding name="nodeRenderFactory" value="renderFactory"/>
-        <binding name="sessionStateManager" value="sessionStateManager"/>
-        <binding name="treeModel" value="treeModel"/>
-        <binding name="entriesPerTablePage" value="40"/>
-        <binding name="tableColunms" value="tableColumns"/>
-        <binding name="treeStateListener" value="treeStateListener"/>
-        <!--binding name="showRootNode" value="@java.lang.Boolean@FALSE"/-->
-    </component>
-
-    <component id="directoryTableView" type="DirectoryTableView">
-        <binding name="selectedFolderSource" value="selectedFolderSource"/>
-    </component>
-    
-   <inject property="treeRootDir" object="app-property:TreeRootDir"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/FileSystemTree.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/FileSystemTree.page
deleted file mode 100644
index 0d7c6da..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/FileSystemTree.page
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-
-<page-specification class="org.apache.tapestry.workbench.tree.examples.FileSystemTree">
-
-    <component id="currentTime" type="Insert">
-        <binding name="value" value="currentTime"/>
-    </component>
-
-    <component id="shell" type="Shell">
-        <binding name="stylesheet" value="asset:stylesheet"/>
-        <binding name="title" value="literal:Home"/>
-    </component>
-
-    <component id="treeData" type="contrib:TreeDataView">
-        <binding name="treeView" value="components.treeView"/>
-        <binding name="value" value="value"/>
-        <!--binding name="showRootNode" value="@java.lang.Boolean@FALSE"/-->
-    </component>
-
-    <component id="treeNodeView" type="contrib:TreeNodeView">
-        <binding name="makeNodeDirect" value="true"/>
-        <binding name="nodeRenderFactory" value="renderFactory"/>
-        <binding name="treeDataView" value="components.treeData"/>
-    </component>
-
-    <component id="treeView" type="contrib:TreeView">
-        <binding name="sessionStateManager" value="sessionStateManager"/>
-        <binding name="treeModel" value="treeModel"/>
-        <binding name="treeStateListener" value="treeStateListener"/>
-    </component>
-
-    <component id="directoryTableView" type="DirectoryTableView">
-        <binding name="selectedFolderSource" value="selectedFolderSource"/>
-    </component>
-
-    <!--component id="showInspector" type="contrib:InspectorButton"/-->
-    
-    <inject property="treeRootDir" object="app-property:TreeRootDir"/>
-    
-</page-specification>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleList.html b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleList.html
deleted file mode 100644
index 8bebeb7..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleList.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<span jwcid="$content$">
-
-<form jwcid="form">
-
-    <span jwcid="checkboxGroup">
-
-	<!-- This component could be implemented using the FormTable component
-		 in the following way:
-		 
-	     <table jwcid="@contrib:FormTable" width="100%"
-    		source="ognl:@java.util.Locale@getAvailableLocales()"
-    		columns="!checkbox, Locale:toString(), Language:displayLanguage, Country:displayCountry, 
-            	Variant:displayVariant, ISO Language:ISO3Language, ISO Country:ISO3Country"
-	    	row="ognl:currentLocale"
-     		rowsClass="ognl:beans.rowClass.next"/>
-    	 <span jwcid="checkboxColumnHeader@Block"></span>
-	     <span jwcid="checkboxColumnValue@Block"><span jwcid="checkbox"/></span>
-		 
-		 Instead, in this example we use a custom layout for the table (usually done 
-	     for greater flexibility), rather than the standard one provided 
-	     by the FormTable component. We use the lower level Table components instead 
-	     and lay them out in our own way. -->
-
-	<table jwcid="tableView" width="100%" class="list">
-		<tr>
-            <td class="tablePages" colspan="7">
-        		<span class="tablePagesLinks" jwcid="tablePages@contrib:TableFormPages"/>
-            </td>
-        </tr>
-		
-		<tr>
-			<td><span jwcid="controlCheckbox"/></td>
-			<td jwcid="tableColumns"/>
-        </tr>
-		
-		<tr jwcid="tableFormRows">
-			<td><span jwcid="checkbox"/></td>
-			<td jwcid="tableValues" align="center"/>
-        </tr>
-	</table>
-    
-    </span>
-    
-    <br/>
-	<span jwcid="submitButton" value="Select locales"/>
-	
-	
-</form>
-
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleList.jwc b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleList.jwc
deleted file mode 100644
index c05b265..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleList.jwc
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.workbench.table.LocaleList" 
-	allow-body="no" allow-informal-parameters="yes">
-
-    <bean name="rowClass" class="org.apache.tapestry.bean.EvenOdd"/>
-
-    
-	<!--property name="currentLocale"/-->
-	
-	<property name="selectedLocales" persist="session" initial-value="new java.util.HashSet()"/>
-
-	<component id="form" type="Form">
-		<!--binding name="listener" value="listeners.formSubmit"/-->
-	</component>
-
-    <component id="checkboxGroup" type="contrib:CheckboxGroup"/>
-    
-    <component id="controlCheckbox" type="contrib:ControlCheckbox"/>
-    
-	<component id="checkbox" type="contrib:ControlledCheckbox">
-		<binding name="value" value="checkboxSelected"/>
-	</component>
-
-	<component id="submitButton" type="Submit">
-		<binding name="listener" value="listener:selectLocales"/>
-	</component>
-
-	<component id="tableView" type="contrib:TableView">
-        <binding name="source" value="@java.util.Locale@getAvailableLocales()"/>
-        <binding name="columns">literal: 
-            * locale:toString(), language:displayLanguage, country:displayCountry, 
-            variant:displayVariant, isoLanguage:ISO3Language, isoCountry:ISO3Country
-        </binding>
-	</component>
-
-	<component id="tableColumns" type="contrib:TableColumns"/>
-
-	<component id="tableFormRows" type="contrib:TableRows">
-		<binding name="row" value="currentLocale"/>
-		<binding name="keyExpression" value="literal:toString()"/>
-		<binding name="class" value="beans.rowClass.next"/>
-	</component>
-
-	<component id="tableValues" type="contrib:TableValues"/>
-
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleList.properties b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleList.properties
deleted file mode 100644
index 0922d12..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleList.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-locale=Locale
-language=Language
-country=Country
-variant=Variant
-isoLanguage=ISO Language
-isoCountry=ISO Country
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleSelection.html b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleSelection.html
deleted file mode 100644
index 2c6ea16..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleSelection.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<span jwcid="$content$">
-
-<style type="text/css">
-	.tableRowsClass { text-align: center }
-</style>
-
-
-<span jwcid="condTable">
-	<hr />
-	<!-- This is the simplest way to insert a table - a single line in the template.
-    	 Unlike the LocaleList component, the rendering of the table itself is left 
-    	 to the Table component -->
-    	 
-	<table jwcid="table" width="100%"/>
-</span>
-
-
-<!-- This is a block defining how the verbosity column should look like -->
-<span jwcid="verbosityColumnValue@Block">
-	<table class="list">
-		<tr>
-			<td jwcid="verbosity"></td>
-			<td></td>
-		</tr>
-	</table>
-</span>
-
-
-<!-- This is a block defining how the remove column should look like -->
-<span jwcid="deleteColumnValue@Block">
-	<a jwcid="directDelete">remove</a>
-</span>
-
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleSelection.jwc b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleSelection.jwc
deleted file mode 100644
index f67a4fb..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleSelection.jwc
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.workbench.table.LocaleSelection"
-	allow-body="no" allow-informal-parameters="yes">
-	
-  <component id="condTable" type="If">
-		<binding name="condition" value="localeSet.size gt 0"/>
-	</component>
-	
-    <!-- Define the Table component that will be used. 
-         This example demonstrates various techniques for configuring the component. -->
-    <component id="table" type="contrib:Table">
-        
-        <!-- The source of the data for the table will be the localeSet property
-             defined further down in this file -->
-        <binding name="source" value="localeSet"/>
-        
-        <!-- The columns of the table -->
-        <binding name="columns"> 
-            literal:
-            
-            <!-- The first column is the representation of the locale returned when invoking toString() on it.
-                 Its name will be displayed according to the translation value
-                 of this component with key 'locale' (see LocaleSelection.properties) -->
-            locale:toString(),
-            
-            <!-- The next two columns are returned by the Java code as ITableColumn objects -->
-            =currencyColumn, 
-            =dateFormatColumn,
-            
-            <!-- The next column is named 'verbosity' and thus will use the 
-                 verbosityValueRenderer block in this component to render the row values. 
-                 If no translation key 'verbosity' is found, the column will be displayed as 'Verbosity' -->
-            verbosity:Verbosity:@org.apache.tapestry.workbench.table.VerbosityRating@calculateVerbosity(#this),
-            
-            <!-- The last column is named 'delete' and is not sortable. Please see the 
-                 deleteValueRenderer block for the definition of how it should look --> 
-            !delete
-        </binding>
-
-        <!-- The row object (locale) that is currently being rendered 
-             will be stored in the currentLocale property (defined further down) -->
-        <binding name="row" value="currentLocale"/>
-        
-        <!-- Each rendered row will be given the CSS class of 'tableRowsClass' -->
-		<binding name="rowsClass" value="literal:tableRowsClass"/>
-        
-	</component>
-	
-    <component id="directDelete" type="DirectLink">
-		<binding name="listener" value="listener:deleteLocale"/>
-		<binding name="parameters" value="deleteLocaleContext"/>
-	</component>
-	
-    <component id="verbosity" type="Any">
-		<binding name="element" value="literal:td"/>
-		<binding name="style">ognl:  
-            "background-color:#A2E283;border:1px solid #88BD6D; width:"
-			+ (currentLocaleVerbosity / 2) + "px"
-		</binding>
-	</component>
-    
-    <property name="localeSet" persist="session"  initial-value="new java.util.HashSet()"/>
-
-    <property name="currentLocale"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleSelection.properties b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleSelection.properties
deleted file mode 100644
index 01981e3..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/LocaleSelection.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-locale=Locale
-verbosity=Verbosity
-delete=
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Palette.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Palette.page
deleted file mode 100644
index 54b53fe..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Palette.page
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification class="org.apache.tapestry.workbench.palette.Palette">
-
-    <property name="clientValidationEnabled" persist="client" initial-value="true"/>
-
-    <bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate" property="delegate"/>
-
-    <component id="form" type="Form">
-        <binding name="delegate" value="bean:delegate"/>
-        <binding name="clientValidationEnabled" value="clientValidationEnabled"/>
-        <binding name="refresh" value="listener:doRefresh"/>
-        <binding name="success" value="listener:doAdvance"/>
-    </component>
-
-    <component id="inputEnabled" type="Checkbox">
-        <binding name="value" value="clientValidationEnabled"/>
-        <binding name="onchange" value="literal:tapestry.form.submit(this.form);"/>
-    </component>
-
-    <component id="inputColorSort" type="PropertySelection">
-        <binding name="value" value="sort"/>
-        <binding name="model" value="literal:None=NONE,Label=LABEL,Value=VALUE,Manual=USER"/>
-        <binding name="onchange">
-            literal:tapestry.form.refresh(this.form);
-        </binding>
-    </component>
-
-    <component id="inputColor" type="contrib:Palette">
-        <binding name="model" value="colorModel"/>
-        <binding name="selected" value="selectedColors"/>
-        <binding name="sort" value="sort"/>
-        <binding name="tableClass" value="literal:palette"/>
-        <binding name="displayName" value="literal:Colors"/>
-        <binding name="validators" value="validators:required"/>
-    </component>
-
-    <component id="update" type="ImageSubmit">
-        <binding name="image" value="asset:update"/>
-    </component>
-
-    <component id="continue" type="LinkSubmit" />
-
-    <component id="continueRollover" type="Rollover">
-        <binding name="image" value="asset:continue" />
-        <binding name="mouseOver" value="asset:continueFocus" />
-    </component>
-
-    <asset name="continue" path="images/Continue.gif"/>
-    <asset name="continueFocus" path="images/Continue-focus.gif"/>
-    <asset name="update" path="images/Update.gif"/>
-
-</page-specification>
-
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/PaletteResults.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/PaletteResults.page
deleted file mode 100644
index 7ee1a4d..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/PaletteResults.page
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification class="org.apache.tapestry.workbench.palette.PaletteResults">
-  
-  <component id="loop" type="For">
-  	<binding name="element" value="literal:li"/>
-  	<binding name="source" value="selectedColors"/>
-  </component>
-     
-  <component id="backRollover" type="Rollover">
-    <binding name="image" value="asset:back"/>
-    <binding name="mouseOver" value="asset:backFocus"/>
-  </component>
-  
-  <asset name="back" path="images/Back.gif"/>
-  <asset name="backFocus" path="images/Back-focus.gif"/>
-  
-</page-specification>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Table.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Table.page
deleted file mode 100644
index 4ae5d74..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Table.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification>
-  
-  <component id="localeList" type="LocaleList">
-  	<binding name="localeSelectionListener" value="component:localeSelection"/>
-  </component>
-  
-  <component id="localeSelection" type="LocaleSelection"/>
-  
-</page-specification>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Upload.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Upload.page
deleted file mode 100644
index 12a6849..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/Upload.page
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<page-specification class="org.apache.tapestry.workbench.upload.Upload">
-
-  <bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate" property="delegate"/>
-  
-  <property name="clientValidationEnabled" persist="client" initial-value="true"/>
-  <property name="showAscii" persist="session"/>
-  <property name="bytesPerLine" persist="session"/>
-  
-  <component id="inputEnabled" type="Checkbox">
-    <binding name="value" value="clientValidationEnabled"/> 
-    <binding name="onchange" value="literal:tapestry.form.submit(this.form)"/>
-  </component>
-  
-  <component id="inputWidth" type="PropertySelection">
-  	<binding name="value" value="bytesPerLine"/>
-  	<binding name="model" value="bytesPerLineModel"/>
-  </component>
-   
-  <asset name="continue" path="images/Continue.gif"/>
-
-</page-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/UploadResults.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/UploadResults.page
deleted file mode 100644
index 67ba400..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/UploadResults.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification class="org.apache.tapestry.workbench.upload.UploadResults">
-  
-  <component id="backRollover" type="Rollover">
-    <binding name="image" value="asset:back"/>
-    <binding name="mouseOver" value="asset:backFocus"/>
-  </component>
-  
-  <asset name="back" path="images/Back.gif"/>
-  <asset name="backFocus" path="images/Back-focus.gif"/>
-  
-</page-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/form/ShowError.html b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/form/ShowError.html
deleted file mode 100644
index eec9e60..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/form/ShowError.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<table class="inputerror">
-    <tr valign="top">
-        <td><img src="images/Warning.gif" alt="Warning" width="42" height="42" /></td>
-        <td class="message">
-            <span jwcid="@RenderBody" />
-        </td>
-    </tr>
-</table>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/hivemodule.xml b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/hivemodule.xml
deleted file mode 100644
index b797e44..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/hivemodule.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="workbench" version="1.0.0" package="org.apache.tapestry.workbench">
-  
-  <contribution configuration-id="tapestry.state.ApplicationObjects" >
-    <state-object name="session-data" scope="session" >
-        <create-instance class="org.apache.tapestry.workbench.Visit" />
-    </state-object>
-  </contribution>
-  
-  <contribution configuration-id="tapestry.services.ApplicationServices">
-    <service name="home" object="service:Home"/>
-    <service name="chart" object="service:Chart"/>
-  </contribution>
-  
-  <contribution configuration-id="tapestry.url.ServiceEncoders">
-    <direct-service-encoder id="direct" stateless-extension="direct" stateful-extension="sdirect"/>
-    <page-service-encoder id="page" extension="page" service="page"/>
-    <page-service-encoder id="external" extension="external" service="external"/>    
-    <asset-encoder id="asset" path="/assets"/>
-    <extension-encoder id="ext" extension="svc" after="*"/>
-  </contribution>
-  
-  <service-point id="Chart" interface="org.apache.tapestry.engine.IEngineService">
-    <invoke-factory>
-      <construct class="chart.ChartService">
-        <set-object property="exceptionReporter" value="infrastructure:requestExceptionReporter"/>
-        <set-service property="response" service-id="tapestry.globals.HttpServletResponse"/>
-        <set-object property="linkFactory" value="infrastructure:linkFactory"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <service-point id="Home" interface="org.apache.tapestry.engine.IEngineService">
-    <invoke-factory>
-      <construct class="WorkbenchHomeService">
-        <set-object property="responseRenderer" value="infrastructure:responseRenderer"/>
-        <set-object property="linkFactory" value="infrastructure:linkFactory"/>
-        <set-object property="pageName" value="app-property:org.apache.tapestry.home-page"/>        
-      </construct>
-    </invoke-factory>
-  </service-point>  
-  
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/localization/Change.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/localization/Change.page
deleted file mode 100644
index c29c46c..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/localization/Change.page
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification class="org.apache.tapestry.workbench.localization.LocalizationChange">
-
-  <component id="insertLocaleName" type="Insert">
-    <binding name="value" value="localeName"/>
-  </component>
-  
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-  <component id="back" type="PageLink">
-    <binding name="page" value="literal:localization/Localization"/>
-  </component>
-  
-  <component id="chooseAgainImage" type="Rollover">
-    <binding name="image" value="asset:back"/>
-    <binding name="mouseOver" value="asset:backFocus"/>
-  </component>
-  
-  <asset name="back" path="images/Back.gif"/>
-  <asset name="backFocus" path="images/Back-focus.gif"/>
-  
-</page-specification>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/localization/Localization.page b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/localization/Localization.page
deleted file mode 100644
index 1fc1442..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/localization/Localization.page
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<page-specification class="org.apache.tapestry.workbench.localization.Localization">
-
-  <component id="form" type="Form">
-    <binding name="listener" value="listener:formSubmit"/>
-    <binding name="stateful" value="false"/>
-  </component>
-  
-  <component id="inputLocale" type="PropertySelection">
-    <binding name="value" value="page.engine.locale"/>
-    <binding name="model" value="localeModel"/>
-  </component>
-
-  <component id="changeButton" type="ImageSubmit">
-    <binding name="image" value="asset:changeButton"/>
-    <binding name="action" value="listener:formSubmit" />
-  </component>
-  
-  <asset name="changeButton" path="images/Change.gif"/>
-  
-</page-specification>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/log4j.properties b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/log4j.properties
deleted file mode 100644
index 846a969..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/log4j.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright 2006 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-log4j.rootLogger=DEBUG, A1
-
-# A1 is set to be a ConsoleAppender. 
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%c{1} [%p] %m%n
-
-log4j.logger.org.apache.hivemind=WARN
-log4j.logger.org.apache=INFO
-log4j.logger.hivemind=INFO
-log4j.logger.tapestry=INFO
-log4j.logger.timetracker=DEBUG
-log4j.logger.org.apache.tapestry=INFO
-
-#log4j.logger.org.apache.tapestry.services.impl.HiveMindExpressionCompiler=DEBUG
-#log4j.logger.tapestry.services.Asset=DEBUG
-#log4j.logger.tapestry.globals.ResponseBuilder=DEBUG
-#log4j.logger.org.apache.tapestry.services.impl.DojoAjaxResponseBuilder=DEBUG
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/web.xml b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/web.xml
deleted file mode 100644
index 9f8ceac..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/web.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-        "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
-    <display-name>Tapestry Workbench Example</display-name>
-
-    <filter>
-        <filter-name>redirect</filter-name>
-        <filter-class>org.apache.tapestry.RedirectFilter</filter-class>
-    </filter>
-
-    <filter-mapping>
-        <filter-name>redirect</filter-name>
-        <url-pattern>/</url-pattern>
-    </filter-mapping>
-
-    <servlet>
-        <servlet-name>workbench</servlet-name>
-        <servlet-class>org.apache.tapestry.workbench.ConfigurationServlet</servlet-class>
-        <load-on-startup>0</load-on-startup>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>workbench</servlet-name>
-        <url-pattern>/app</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>workbench</servlet-name>
-        <url-pattern>*.page</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>workbench</servlet-name>
-        <url-pattern>*.external</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>workbench</servlet-name>
-        <url-pattern>*.direct</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>workbench</servlet-name>
-        <url-pattern>*.sdirect</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>workbench</servlet-name>
-        <url-pattern>*.svc</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>workbench</servlet-name>
-        <url-pattern>/assets/*</url-pattern>
-    </servlet-mapping>
-
-    <session-config>
-        <session-timeout>15</session-timeout>
-    </session-config>
-
-</web-app>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/workbench.application b/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/workbench.application
deleted file mode 100644
index 8083ae7..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/WEB-INF/workbench.application
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<application name="Tapestry Component Workbench">
-  
-  <meta key="org.apache.tapestry.template-encoding" value="ISO-8859-1"/>
-  <meta key="org.apache.tapestry.page-class-packages" value="org.apache.tapestry.workbench"/>
-  <meta key="org.apache.tapestry.component-class-packages" value="org.apache.tapestry.workbench.components"/>
-  <meta key="TreeRootDir" value="." />
-  
-  <extension name="org.apache.tapestry.request-decoder" class="org.apache.tapestry.workbench.RequestDecoder"/>
-  
-  <library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
-  
-</application>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/css/exception.css b/tapestry/tapestry-examples/Workbench/src/context/css/exception.css
deleted file mode 100644
index 7652cc7..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/css/exception.css
+++ /dev/null
@@ -1,32 +0,0 @@
-.exceptionDialog {
-    overflow: auto;
-    display: block;
-    margin-left: 5%;
-    margin-right: 5%;
-    height: 500px;
-    background-color: white;
-    border-left: 2px solid #E07000;
-    border-right: 2px solid #E07000;
-    border-bottom: 2px solid #E07000;
-    -moz-border-radius-bottomright: 10px;
-    -moz-border-radius-bottomleft: 10px;
-}
-
-.exceptionCloseLink {
-    display: block;
-    margin-left: 5%;
-    margin-right: 5%;
-    background-color: ThreeDFace;
-    padding-top: 3px;
-    padding-left: 5px;
-    padding-bottom: 3px;
-    font-weight: bold;
-    color: #000000;
-    cursor: pointer;
-    cursor: hand;
-    border-left: 2px solid #E07000;
-    border-right: 2px solid #E07000;
-    border-top: 2px solid #E07000;
-    -moz-border-radius-topright: 10px;
-    -moz-border-radius-topleft: 10px;
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/context/css/undohtml.css b/tapestry/tapestry-examples/Workbench/src/context/css/undohtml.css
deleted file mode 100644
index 1eb5d33..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/css/undohtml.css
+++ /dev/null
@@ -1,39 +0,0 @@
-/* undohtml.css */
-/* (CC) 2004 Tantek Celik. Some Rights Reserved.             */
-/*   http://creativecommons.org/licenses/by/2.0                   */
-/* This style sheet is licensed under a Creative Commons License. */
-
-/* Purpose: undo some of the default styling of common (X)HTML browsers */
-
-
-/* link underlines tend to make hypertext less readable, 
-   because underlines obscure the shapes of the lower halves of words */
-:link,:visited { text-decoration:none }
-
-/* no list-markers by default, since lists are used more often for semantics */
-ul,ol { list-style:none }
-
-/* avoid browser default inconsistent heading font-sizes */
-/* and pre/code too */
-h1,h2,h3,h4,h5,h6,pre,code { font-size:1em; }
-
-/* remove the inconsistent (among browsers) default ul,ol padding or margin  */
-/* the default spacing on headings does not match nor align with 
-   normal interline spacing at all, so let's get rid of it. */
-/* zero out the spacing around pre, form, body, html, p, blockquote as well */
-/* form elements are oddly inconsistent, and not quite CSS emulatable. */
-/*  nonetheless strip their margin and padding as well */
-ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,body,html,p,blockquote,fieldset,input
-{ margin:0; padding:0 }
-
-/* whoever thought blue linked image borders were a good idea? */
-a img,:link img,:visited img { border:none }
-
-/* de-italicize address */
-address { font-style:normal }
-
-body { margin:0; padding:0; }
-
-fieldset { border:0; }
-
-/* more varnish stripping as necessary... */
diff --git a/tapestry/tapestry-examples/Workbench/src/context/css/workbench.css b/tapestry/tapestry-examples/Workbench/src/context/css/workbench.css
deleted file mode 100644
index 880f09b..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/css/workbench.css
+++ /dev/null
@@ -1,284 +0,0 @@
-@import url("undohtml.css");  /* CSS to undo some default browser css that gets in the way more than it helps */
-@import url("exception.css");
-
-h2,h1 { margin-bottom:0.85em; }
-
-SPAN.label-error {
-    color: Red;
-}
-
-label.error {
-    color: red;
-    font-style: oblique;
-}
-
-.field-error {
-    color: White;
-    background-color: Red;
-}
-
-TABLE.inputerror TD.message {
-    font-weight: bold;
-    font-size: smaller;
-}
-
-.content {
-    display:block;
-    margin-left:4%;
-    margin-right:4%;
-    margin-bottom: 2.5em;
-    padding:0;
-    clear:right;
-}
-
-.page {
-    background-color: #fff;
-    min-height:500px;
-    padding:1.2em 1em 0.2em 1em;
-    -moz-border-radius: 0.65em;
-    border-top:1px solid #587ECC;
-    border-bottom:1px solid #587ECC;
-    border-left:1px solid #587ECC;
-}
-
-table.list tr td {
-    padding:0.2em 0.2em 0.2em 0.2em;
-    margin: 0px;
-}
-
-table.tabs td {
-    padding: 0px;
-}
-
-body {
-    font-family: Arial, Lucida Grande, Verdana, Tahoma, sans-serif;
-    font-size: 10pt;
-    line-height: 1.09em;
-    background-color: #CCCCCC;
-    width:100%;
-    height:100%;
-    padding-top:3%;
-    color: #292929;
-}
-
-p { margin-bottom: 1.2em; width:94%;}
-
-.even {
-    background-color: #f0f0f0;
-}
-
-.odd {
-    background-color: #f9f9f9;
-}
-
-.navbar {
-    border:none;
-    padding:0;
-    margin:0;
-    list-style:none;
-}
-
-.navbar li {
-    width:80%;
-    padding:.3em 3em 0.3em 1.4em;
-    background: #F2F2F2;
-}
-
-.navbar li.here {
-    background-color: #fff;
-}
-
-.navbar li.here { 
-    border-top: 1px solid #587ECC;
-    border-bottom: 1px solid #587ECC;
-    border-right: 1px solid #587ECC;
-}
-
-.navbar li a:hover {
-    text-decoration: underline;
-}
-
-.navbar li.here a {
-    color: #000;
-}
-
-.navbar li a {
-    text-decoration: none;
-    font-size: 0.9em;
-    font-weight: bold;
-    color: #3e4d6b;
-}
-
-TABLE.requestDebug {
-    width: 700;
-    border-color: Black;
-    border-style: solid;
-    border-width: thin;
-    border-top-width: 0px;
-    border-bottom-width: 2px;
-    border-right-width: 2px;
-    border-left-width: 0px;
-    background-color: #839cd1;
-    padding: 0;
-}
-
-TABLE.requestDebug TR.control {
-    font-weight: bold;
-    font-size: 9pt;
-    color: White;
-    background-color: #330066;
-}
-
-TABLE.requestDebug FORM {
-    margin: 0;
-}
-
-DIV.described-object-title {
-    font-size: large;
-    font-weight: bold;
-    color: white;
-    background-color: black;
-}
-
-TABLE.described-object {
-    border: 1px solid black;
-    width: 100%;
-}
-
-TABLE.described-object TR.section TH {
-    color: white;
-    background-color: black;
-    text-align: center;
-}
-
-TABLE.described-object TR.odd {
-    background-color: silver;
-}
-
-TABLE.described-object TR.even {
-    background-color: #839cd1;
-}
-
-TABLE.described-object TH {
-    text-align: right;
-    width: 1px;
-    //
-    Will
-    stretch
-    to
-    fit.
-}
-
-TABLE.form TR {
-    vertical-align: top;
-}
-
-TABLE.form TH {
-    font-weight: bold;
-    text-align: right;
-}
-
-TABLE.form TR.column-header TH {
-    font-weight: bold;
-    text-align: center;
-}
-
-TABLE.palette TH {
-    font-size: 9pt;
-    font-weight: bold;
-    color: white;
-    background-color: #330066;
-    text-align: center;
-}
-
-TABLE.palette SELECT {
-    font-weight: bold;
-    background-color: #839cd1;
-    width: 200px;
-}
-
-TABLE.palette TD.controls {
-    text-align: center;
-    vertical-align: middle;
-    width: 60px;
-}
-
-TABLE.form {
-    font-size: 9pt;
-}
-
-
-pre {
-    font-size: 0.82em;
-    background: #efefef;
-    padding-top:0.4em;
-    padding-bottom:0.4em;
-}
-
-ul {
-}
-
-IMG {
-    border: none;
-}
-
-.submitButton,.submitButton:focus,.alertButton {
-	width: auto;
-	border: none;
-	background-color: #699ED9;
-	color: #fff;
-	padding: 0.1em;
-	border-bottom: 1px solid #5885b6 !important;
-	border-right: 1px solid #5885b6 !important;
-	border-top: 1px solid #92b8e2 !important;
-	border-left: 1px solid #92b8e2 !important;
-	cursor: hand;
-	cursor: pointer;
-}
-
-.alertDialog {
-    margin-left:26%;
-    margin-right:26%;
-    border: 2px solid #ff660a;
-    padding: 1em;
-    background: #ffffff;
-    -moz-border-radius: 10px;
-}
-
-.alertContent .alertButton {
-    float:right;
-    position:relative;
-    bottom:1em;
-}
-
-.fieldMissing {
-    background: #bedef4;
-}
-
-.fieldInvalid {
-    background: #ffaf7e;
-    font-weight: bold;
-}
-
-.missingList, .invalidList {
-    padding-bottom: 0.6em;
-    padding-top: 0.2em;
-    padding-left:0.1em;
-    padding-right:0.2em;
-    margin: 0;
-}
-
-.missingList {
-    width: 26em;
-    border-top: 4px solid #bedef4;
-}
-
-.invalidList {
-    width: 26em;
-    border-top: 4px solid #ffaf7e;
-}
-
-.missingList li, .invalidList li {
-    list-style:none;
-    font-style:italic;
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus.gif
deleted file mode 100644
index 4eef063..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus_de.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus_de.gif
deleted file mode 100644
index a4b59d8..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus_de.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus_fr.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus_fr.gif
deleted file mode 100644
index 37e098f..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus_fr.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus_it.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus_it.gif
deleted file mode 100644
index a129197..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Back-focus_it.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Back.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Back.gif
deleted file mode 100644
index 19dcd53..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Back.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Back_de.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Back_de.gif
deleted file mode 100644
index 6d8258a..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Back_de.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Back_fr.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Back_fr.gif
deleted file mode 100644
index f166a6f..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Back_fr.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Back_it.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Back_it.gif
deleted file mode 100644
index f0b746f..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Back_it.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Change.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Change.gif
deleted file mode 100644
index 62ec7b1..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Change.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Change_de.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Change_de.gif
deleted file mode 100644
index 2326fdb..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Change_de.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Change_fr.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Change_fr.gif
deleted file mode 100644
index 522b3ef..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Change_fr.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Change_it.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Change_it.gif
deleted file mode 100644
index 32716cc..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Change_it.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Continue-focus.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Continue-focus.gif
deleted file mode 100644
index 5c1541f..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Continue-focus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Continue.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Continue.gif
deleted file mode 100644
index 83f7f71..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Continue.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Update.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Update.gif
deleted file mode 100644
index 5a48ca7..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Update.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Warning-small.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Warning-small.gif
deleted file mode 100644
index 06b2eb3..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Warning-small.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/Warning.gif b/tapestry/tapestry-examples/Workbench/src/context/images/Warning.gif
deleted file mode 100644
index 8435f98..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/Warning.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/minus.gif b/tapestry/tapestry-examples/Workbench/src/context/images/minus.gif
deleted file mode 100644
index 9c0ef5f..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/minus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/nodeimage.gif b/tapestry/tapestry-examples/Workbench/src/context/images/nodeimage.gif
deleted file mode 100644
index 06b2eb3..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/nodeimage.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/plus.gif b/tapestry/tapestry-examples/Workbench/src/context/images/plus.gif
deleted file mode 100644
index 07364bf..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/plus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/tab-active-left.gif b/tapestry/tapestry-examples/Workbench/src/context/images/tab-active-left.gif
deleted file mode 100644
index 04ea77f..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/tab-active-left.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/tab-active-mid.gif b/tapestry/tapestry-examples/Workbench/src/context/images/tab-active-mid.gif
deleted file mode 100644
index 754739e..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/tab-active-mid.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/tab-active-right.gif b/tapestry/tapestry-examples/Workbench/src/context/images/tab-active-right.gif
deleted file mode 100644
index 8623a81..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/tab-active-right.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/tab-inactive-left.gif b/tapestry/tapestry-examples/Workbench/src/context/images/tab-inactive-left.gif
deleted file mode 100644
index 21f94a4..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/tab-inactive-left.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/tab-inactive-mid.gif b/tapestry/tapestry-examples/Workbench/src/context/images/tab-inactive-mid.gif
deleted file mode 100644
index 3d86c62..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/tab-inactive-mid.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/images/tab-inactive-right.gif b/tapestry/tapestry-examples/Workbench/src/context/images/tab-inactive-right.gif
deleted file mode 100644
index e25d610..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/images/tab-inactive-right.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/context/localization/Change.html b/tapestry/tapestry-examples/Workbench/src/context/localization/Change.html
deleted file mode 100644
index 4e12366..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/localization/Change.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<span jwcid="@Border">
-
-Congratulations, you've changed the locale to <span jwcid="insertLocaleName"/>.
-
-<p><a jwcid="back"><img jwcid="chooseAgainImage"/></a>
-
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/localization/Change_de.html b/tapestry/tapestry-examples/Workbench/src/context/localization/Change_de.html
deleted file mode 100644
index 1700e07..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/localization/Change_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<span jwcid="@Border">
-
-
-Gl&#252;ckw&#252;nsche, haben Sie ge&#228;ndert das locale zu <span jwcid="insertLocaleName"/>.
-
-<p><a jwcid="back"><img jwcid="chooseAgainImage"/></a>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/localization/Change_fr.html b/tapestry/tapestry-examples/Workbench/src/context/localization/Change_fr.html
deleted file mode 100644
index ddb48e2..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/localization/Change_fr.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<span jwcid="@Border">
-
-Des f&#233;licitations, vous avez chang&#233; le locale en <span jwcid="insertLocaleName"/>.
-
-<p><a jwcid="back"><img jwcid="chooseAgainImage"/></a>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/localization/Change_it.html b/tapestry/tapestry-examples/Workbench/src/context/localization/Change_it.html
deleted file mode 100644
index f12bf0c..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/localization/Change_it.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<span jwcid="@Border">
-
-Congratulazioni, avete cambiato il locale a <span jwcid="insertLocaleName"/>.
-
-<p><a jwcid="back"><img jwcid="chooseAgainImage"/></a>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/localization/Localization.html b/tapestry/tapestry-examples/Workbench/src/context/localization/Localization.html
deleted file mode 100644
index 6f80b52..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/localization/Localization.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<span jwcid="$content$">
-<span jwcid="@Border">
-
-<h2>Localization / i10n</h2>
-
-<p>
-This page allows the locale to be changed.  Localization is used to select
-the HTML template used by the page (and any components on the page).  Likewise,
-assets, such as the change button, may also be localized and automatically
-selected.
-
-<p>
-Translation by 
-<a href="http://world.altavista.com">Babelfish</a> (and it's probably quite funny if you speak the
-language).
-
-<p>
-Select a new locale:
-
-<form jwcid="form">
-	<input jwcid="inputLocale"/>
-	<input jwcid="changeButton"/>
-</form>
-</span>
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/localization/Localization_de.html b/tapestry/tapestry-examples/Workbench/src/context/localization/Localization_de.html
deleted file mode 100644
index 425aa6f..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/localization/Localization_de.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<span jwcid="@Border">
-
-Diese Seite erlaubt, da&szlig; das locale ge&auml;ndert wird. 
-Lokalisation wird verwendet, um die HTML Schablone vorzuw&auml;hlen, die 
-durch die Seite benutzt wird (und irgendwelche Bestandteile auf der Seite). Ebenso k&ouml;nnen Werte, wie 
-die &Auml;nderung Taste, auch beschr&auml;nkt werden und automatisch vorgew&auml;hlt werden. 
-
-<p>&Uuml;bersetzung durch 
-<a href="http://world.altavista.com">Babelfish</a>
-(und sie ist vermutlich ziemlich lustig, wenn Sie die Sprache sprechen). 
-
-<p>W&#228;hlen Sie ein neues locale aus:
-
-<form jwcid="form">
-	<input jwcid="inputLocale"/>
-	<input jwcid="changeButton"/>
-</form>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/localization/Localization_fr.html b/tapestry/tapestry-examples/Workbench/src/context/localization/Localization_fr.html
deleted file mode 100644
index 46bc106..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/localization/Localization_fr.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<span jwcid="@Border">
-
-Cette page permet au locale d'&eacute;tre chang&eacute;.
-La localisation est employ&eacute;e pour choisir le calibre de HTML employ&eacute; par la page 
-(et tous composants &agrave; la page). De m&ecirc;me, des capitaux, tels que le bouton de changement, 
-peuvent &eacute;galement &ecirc;tre localis&eacute;s et automatiquement choisis. 
-
-<p>Traduction par 
-<a href="http://world.altavista.com">Babelfish</a> 
-(et elle est probablement tout &agrave; fait dr&ocirc;le si vous parlez la langue).
-
-<p>Choisissez un nouveau locale: 
-
-<form jwcid="form">
-	<input jwcid="inputLocale"/>
-	<input jwcid="changeButton"/>
-</form>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/context/localization/Localization_it.html b/tapestry/tapestry-examples/Workbench/src/context/localization/Localization_it.html
deleted file mode 100644
index f1fd770..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/localization/Localization_it.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<span jwcid="@Border">
-
-Questa pagina permette che il locale sia cambiato. 
-La localizzazione &egrave; usata per selezionare la mascherina del HTML usata dalla pagina 
-(e da qualsiasi componenti alla pagina). 
-
-Inoltre, i beni, quale il tasto del cambiamento, possono anche essere localizzati 
-ed essere selezionati automaticamente. 
-
-<p>Traduzione da 
-<a href="http://world.altavista.com">Babelfish</a>
-(e da esso &egrave; probabilmente abbastanza divertente se parlate la lingua). 
-
-<p>Selezioni un nuovo locale: 
-
-<form jwcid="form">
-	<input jwcid="inputLocale"/>
-	<input jwcid="changeButton"/>
-</form>
-
-</span>
diff --git a/tapestry/tapestry-examples/Workbench/src/context/redirect-target.html b/tapestry/tapestry-examples/Workbench/src/context/redirect-target.html
deleted file mode 100644
index dc72c84..0000000
--- a/tapestry/tapestry-examples/Workbench/src/context/redirect-target.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<html>
-<head>
-<title>Redirect Target</title>
-<link rel="stylesheet" type="text/css" href="css/workbench.css">
-</head>
-<body>
-
-<!-- This is where the tabs would go.  Alas, used private assets for
-     the tabs. -->
-     
-<table class="tabs" cellspacing=0 border=0>
-<tr height="20">
-<td>&nbsp;</td>
-</tr>
-</table>
-
-<table class="content">
-<tr>
-<td>
-
-This is a static page, forwarded to from a Tapestry listener method.
-
-<p>
-Note that internal resources are <em>forwarded to</em>, not
-<em>redirected to</em>.  Tapestry uses 
-<code>RequestDispatcher.forward(ServletRequest, ServletResponse)</code>
-for internal resources (this is the same way an ordinary servlet would
-forward to a JSP to render a response).
-
-<p>
-You may <a href="app">return to the Workbench</a>.
-
-</td>
-</tr>
-</table>
-
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/images/ActiveBlank.psp b/tapestry/tapestry-examples/Workbench/src/images/ActiveBlank.psp
deleted file mode 100644
index f677e9f..0000000
--- a/tapestry/tapestry-examples/Workbench/src/images/ActiveBlank.psp
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/images/Back.psp b/tapestry/tapestry-examples/Workbench/src/images/Back.psp
deleted file mode 100644
index fd47f92..0000000
--- a/tapestry/tapestry-examples/Workbench/src/images/Back.psp
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/images/BlankFlat.psp b/tapestry/tapestry-examples/Workbench/src/images/BlankFlat.psp
deleted file mode 100644
index 9d8dbf4..0000000
--- a/tapestry/tapestry-examples/Workbench/src/images/BlankFlat.psp
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/images/Change.psp b/tapestry/tapestry-examples/Workbench/src/images/Change.psp
deleted file mode 100644
index 6d955a1..0000000
--- a/tapestry/tapestry-examples/Workbench/src/images/Change.psp
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/images/InactiveBlank.psp b/tapestry/tapestry-examples/Workbench/src/images/InactiveBlank.psp
deleted file mode 100644
index 51ba801..0000000
--- a/tapestry/tapestry-examples/Workbench/src/images/InactiveBlank.psp
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/ConfigurationServlet.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/ConfigurationServlet.java
deleted file mode 100644
index 010005a..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/ConfigurationServlet.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright Apr 21, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.workbench;
-
-import org.apache.log4j.PropertyConfigurator;
-import org.apache.tapestry.ApplicationServlet;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-/**
- * Used to configure logging.
- *
- * @author jkuhnert
- */
-public class ConfigurationServlet extends ApplicationServlet implements ServletContextListener {
-
-    /**
-     * generated.
-     */
-    private static final long serialVersionUID = -5959967554036278600L;
-
-    /**
-     * @see javax.servlet.GenericServlet#init()
-     */
-    public void init() {
-        try {
-            // Use basic logging configuration until Log4j is properly configured
-            PropertyConfigurator.configure(getServletContext().getRealPath("/") + "/WEB-INF/log4j.properties");
-            super.init();
-        } catch (Throwable t) {
-            t.printStackTrace();
-        }
-    }
-
-    /**
-     * @see javax.servlet.Servlet#destroy()
-     */
-    public void destroy()
-    {
-        super.destroy();
-        org.apache.log4j.LogManager.shutdown();
-    }
-
-    /**
-     * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
-     */
-    public void contextDestroyed(ServletContextEvent arg0)
-    {
-        org.apache.log4j.LogManager.shutdown();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void contextInitialized(ServletContextEvent arg0)
-    {
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Dates.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Dates.java
deleted file mode 100644
index 7df662c..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Dates.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.workbench;
-
-import org.apache.tapestry.annotations.EventListener;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-import java.util.Date;
-
-
-/**
- * Sample page.
- */
-public abstract class Dates extends BasePage
-{
-    public abstract ResponseBuilder getBuilder();
-    
-    public abstract void setEndDate(Date date);
-    
-    public abstract Date getStartDate();
-    
-    public abstract IValidationDelegate getDelegate();
-
-    @EventListener(targets = "startDate", events = {"onchange"}, submitForm = "dateForm", focus = false)
-    public void startChanged()
-    {
-        if (getStartDate() == null)
-            return;
-        
-        getDelegate().clearErrors();
-        
-        setEndDate(new Date(getStartDate().getTime() + (1000 * 60 * 60 * 24 * 2)));
-        getBuilder().updateComponent("endDate");
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/ExceptionTab.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/ExceptionTab.java
deleted file mode 100644
index 616970d..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/ExceptionTab.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.workbench;

-

-import org.apache.tapestry.IComponent;

-import org.apache.tapestry.annotations.Bean;

-import org.apache.tapestry.annotations.Component;

-import org.apache.tapestry.contrib.link.PopupLinkRenderer;

-import org.apache.tapestry.html.BasePage;

-import org.apache.tapestry.link.ILinkRenderer;

-

-/**

- * Page used to raise a popup window containing the ErrorFest page, which has errors.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public abstract class ExceptionTab extends BasePage

-{

-    @Bean(PopupLinkRenderer.class)

-    public abstract ILinkRenderer getLinkRenderer();

-

-    @Component(type = "PageLink", bindings =

-    { "page=literal:ErrorFest", "renderer=bean:linkRenderer" })

-    public abstract IComponent getLink();

-}

diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Redirect.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Redirect.java
deleted file mode 100644
index 79bf68e..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Redirect.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench;
-
-import org.apache.tapestry.RedirectException;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * PageLink to demonstrate redirect from a listener method.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Redirect extends BasePage
-{
-
-    public void redirectInternal()
-    {
-        throw new RedirectException("redirect-target.html");
-    }
-
-    public void redirectExternal()
-    {
-        throw new RedirectException("http://tapestry.apache.org");
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/RequestDecoder.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/RequestDecoder.java
deleted file mode 100644
index 6762381..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/RequestDecoder.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.request.DecodedRequest;
-import org.apache.tapestry.request.IRequestDecoder;
-
-/**
- * A useless request decoder (does the same as the default), used to test that a
- * user-supplied extension is actually used.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class RequestDecoder implements IRequestDecoder
-{
-
-    private static final Log LOG = LogFactory.getLog(RequestDecoder.class);
-
-    public RequestDecoder()
-    {
-        LOG.debug("<init>");
-    }
-
-    public DecodedRequest decodeRequest(HttpServletRequest request)
-    {
-        if (LOG.isDebugEnabled()) LOG.debug("Decoding: " + request);
-
-        DecodedRequest result = new DecodedRequest();
-
-        result.setRequestURI(request.getRequestURI());
-        result.setScheme(request.getScheme());
-        result.setServerName(request.getServerName());
-        result.setServerPort(request.getServerPort());
-
-        return result;
-
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java
deleted file mode 100644
index d33c7c5..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/Visit.java
+++ /dev/null
@@ -1,219 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * @author Howard Lewis Ship
- * @since 1.0.7
- */
-
-public class Visit implements Serializable
-{
-
-    private static final long serialVersionUID = -8506455811411321232L;
-
-    /**
-     * The name of the page for which the corresponding tab should be visibly
-     * active.
-     */
-
-    private String _activeTabName = "Home";
-
-    /**
-     * If true, then a detailed report about the request is appended to the
-     * bottom of each page.
-     */
-
-    private boolean _requestDebug;
-
-    private boolean _disableInspector;
-
-    /**
-     * Used by the Fields demo page.
-     */
-
-    private Integer _intValue;
-    private Double _doubleValue;
-    private BigDecimal _bigDecimalValue;
-    private Long _longValue;
-    private Date _dateValue;
-    private String _stringValue;
-    private String _emailValue;
-    private String _textValue;
-    private String _zipCode;
-    private String _phone;
-    private String _ipAddress;
-    private int _choice;
-
-    /**
-     * @return the phone
-     */
-    public String getPhone()
-    {
-        return _phone;
-    }
-
-    /**
-     * @param phone the phone to set
-     */
-    public void setPhone(String phone)
-    {
-        _phone = phone;
-    }
-
-    public String getActiveTabName()
-    {
-        return _activeTabName;
-    }
-
-    public void setActiveTabName(String value)
-    {
-        _activeTabName = value;
-    }
-
-    public void setRequestDebug(boolean value)
-    {
-        _requestDebug = value;
-    }
-
-    public boolean getRequestDebug()
-    {
-        return _requestDebug;
-    }
-
-    public void setIntValue(Integer value)
-    {
-        _intValue = value;
-    }
-
-    public Integer getIntValue()
-    {
-        return _intValue;
-    }
-
-    public BigDecimal getBigDecimalValue()
-    {
-        return _bigDecimalValue;
-    }
-
-    public void setBigDecimalValue(BigDecimal value)
-    {
-        _bigDecimalValue = value;
-    }
-
-    public Double getDoubleValue()
-    {
-        return _doubleValue;
-    }
-
-    public void setDoubleValue(Double value)
-    {
-        _doubleValue = value;
-    }
-
-    public Long getLongValue()
-    {
-        return _longValue;
-    }
-
-    public void setLongValue(Long value)
-    {
-        _longValue = value;
-    }
-
-    public Date getDateValue()
-    {
-        return _dateValue;
-    }
-
-    public void setDateValue(Date value)
-    {
-        _dateValue = value;
-    }
-
-    public String getStringValue()
-    {
-        return _stringValue;
-    }
-
-    public void setStringValue(String value)
-    {
-        _stringValue = value;
-    }
-
-    public String getEmailValue()
-    {
-        return _emailValue;
-    }
-
-    public void setEmailValue(String value)
-    {
-        _emailValue = value;
-    }
-
-    public boolean getDisableInspector()
-    {
-        return _disableInspector;
-    }
-
-    public void setDisableInspector(boolean disableInspector)
-    {
-        _disableInspector = disableInspector;
-    }
-
-    public String getTextValue()
-    {
-        return _textValue;
-    }
-
-    public void setTextValue(String value)
-    {
-        _textValue = value;
-    }
-
-    public String getZipCode()
-    {
-        return _zipCode;
-    }
-
-    public void setZipCode(String zipCode)
-    {
-        _zipCode = zipCode;
-    }
-
-    public String getIpaddress()
-    {
-        return _ipAddress;
-    }
-
-    public void setIpaddress(String address)
-    {
-        _ipAddress = address;
-    }
-
-    public int getChoice()
-    {
-        return _choice;
-    }
-
-    public void setChoice(int choice)
-    {
-        _choice = choice;
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/WorkbenchHomeService.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/WorkbenchHomeService.java
deleted file mode 100644
index a8cf575..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/WorkbenchHomeService.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.HomeService;
-
-/**
- * Special version of the home service used to reset the visit tab when re-entering the Tapestry
- * application from a static HTML page.
- * 
- * @author Howard Lewis Ship
- * @see Redirect
- */
-
-public class WorkbenchHomeService extends HomeService
-{
-    public void service(IRequestCycle cycle) throws IOException
-    {
-        //TODO: Make this work again
-        //Visit visit = (Visit) cycle.getEngine().getVisit();
-        
-       // if (visit != null)
-         //   visit.setActiveTabName("Home");
-        
-        super.service(cycle);
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/WorkbenchValidationDelegate.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/WorkbenchValidationDelegate.java
deleted file mode 100644
index 425f5d2..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/WorkbenchValidationDelegate.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.valid.IValidator;
-import org.apache.tapestry.valid.ValidationDelegate;
-
-/**
- * @author Howard Lewis Ship
- * @since 1.0.6
- */
-
-public class WorkbenchValidationDelegate extends ValidationDelegate
-{
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartAsset.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartAsset.java
deleted file mode 100644
index 68cdcc4..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartAsset.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.chart;
-
-import java.io.InputStream;
-import java.util.Locale;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.asset.AbstractAsset;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * An asset used with the {@link ChartService}.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.10
- */
-
-public class ChartAsset extends AbstractAsset
-{
-    private IEngineService _chartService;
-
-    private IComponent _chartProvider;
-
-    public ChartAsset(IRequestCycle cycle, IComponent chartProvider, IEngineService chartService)
-    {
-        super(null, null);
-        
-        _chartService = chartService;
-        _chartProvider = chartProvider;
-    }
-
-    public String buildURL()
-    {
-        ILink l = _chartService.getLink(false, _chartProvider);
-
-        return l.getURL();
-    }
-
-    public InputStream getResourceAsStream()
-    {
-        return null;
-    }
-
-    public InputStream getResourceAsStream(IRequestCycle cycle, Locale locale)
-    {
-        return null;
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartPage.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartPage.java
deleted file mode 100644
index 20ee1a7..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartPage.java
+++ /dev/null
@@ -1,218 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.chart;
-
-import java.awt.Paint;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.jCharts.Chart;
-import org.jCharts.chartData.ChartDataException;
-import org.jCharts.chartData.PieChartDataSet;
-import org.jCharts.nonAxisChart.PieChart2D;
-import org.jCharts.properties.ChartProperties;
-import org.jCharts.properties.LegendAreaProperties;
-import org.jCharts.properties.LegendProperties;
-import org.jCharts.properties.PieChart2DProperties;
-import org.jCharts.test.TestDataGenerator;
-
-/**
- * Demonstrates more complex form handling (including loops and dynamic addition/deletion of rows)
- * as well as dynamic image generation using JCharts.
- * 
- * @author Howard Lewis Ship, Luis Neves
- * @since 1.0.10
- */
-
-public abstract class ChartPage extends BasePage implements IChartProvider, PageBeginRenderListener
-{
-    public abstract IValidationDelegate getDelegate();
-
-    /**
-     * Injected.
-     */
-    public abstract IEngineService getChartService();
-    
-    /**
-     * Invokes {@link #getPlotValues()}, which ensures that (on the very first request cycle), the
-     * persistent values property is set <em>before</em> the page recorder is locked.
-     */
-
-    public void pageBeginRender(PageEvent event)
-    {
-        if (getPlotValues() == null)
-        {
-            List plotValues = new ArrayList();
-
-            plotValues.add(new PlotValue("Fred", 10));
-            plotValues.add(new PlotValue("Barney", 15));
-            plotValues.add(new PlotValue("Dino", 7));
-
-            setPlotValues(plotValues);
-        }
-    }
-
-    public abstract List getPlotValues();
-
-    public abstract void setPlotValues(List plotValues);
-
-    public abstract PlotValue getPlotValue();
-
-    public abstract List getRemoveValues();
-
-    public abstract void setRemoveValues(List removeValues);
-
-    /**
-     * Invoked during the render; always returns false.
-     */
-
-    public boolean isMarkedForDeletion()
-    {
-        return false;
-    }
-
-    /**
-     * Invoked by the deleted checkbox (for each plotValue). If true, the the current plotValue is
-     * added to the list of plotValues to remove (though the actual removing is done inside
-     * {@link #delete()}, after the loop.
-     */
-
-    public void setMarkedForDeletion(boolean value)
-    {
-        if (value)
-        {
-            List removeValues = getRemoveValues();
-
-            if (removeValues == null)
-            {
-                removeValues = new ArrayList();
-                setRemoveValues(removeValues);
-            }
-
-            removeValues.add(getPlotValue());
-
-            // Deleting things screws up the validation delegate.
-            // That's because the errors are associated with the form name
-            // (not the component id), and deleting elements causes
-            // all the names to shift.
-
-            getDelegate().clear();
-        }
-    }
-
-    /**
-     * Listener method for the add button, adds an additional (blank) plot value.
-     */
-
-    public void add()
-    {
-        if (getDelegate().getHasErrors())
-            return;
-
-        List plotValues = getPlotValues();
-
-        plotValues.add(new PlotValue());
-
-        setPlotValues(plotValues);
-    }
-
-    /**
-     * Listener method for the remove button, removes any checked plot values.
-     * 
-     * @see #setMarkedForDeletion(boolean)
-     */
-
-    public void delete()
-    {
-        if (getDelegate().getHasErrors())
-            return;
-
-        List removeValues = getRemoveValues();
-
-        if (removeValues != null)
-        {
-            List plotValues = getPlotValues();
-
-            plotValues.removeAll(removeValues);
-
-            setPlotValues(plotValues);
-        }
-    }
-
-    public IAsset getChartImageAsset()
-    {
-        return new ChartAsset(getRequestCycle(), this, getChartService());
-    }
-
-    /**
-     * This method is invoked by the service (in a seperate request cycle from all the form handling
-     * stuff). The {@link #getChartImageAsset()}method provides an {@link IAsset}that is handled
-     * by the {@link ChartService}, and the asset encodes the identity of this page.
-     */
-
-    public Chart getChart()
-    {
-        LegendProperties legendProperties = new LegendProperties();
-        legendProperties.setNumColumns(2);
-        legendProperties.setPlacement(LegendAreaProperties.RIGHT);
-        ChartProperties chartProperties = new ChartProperties();
-        // chartProperties.setBackgroundPaint(Color.decode("#ffffcc"));
-
-        Chart result = new PieChart2D(getData(), legendProperties, chartProperties, 400, 350);
-
-        return result;
-    }
-
-    private PieChartDataSet getData()
-    {
-        List plotValues = getPlotValues();
-        int count = plotValues.size();
-        double[] data = new double[count];
-        String[] labels = new String[count];
-        PieChart2DProperties properties = new PieChart2DProperties();
-
-        for (int i = 0; i < count; i++)
-        {
-            PlotValue pv = (PlotValue) plotValues.get(i);
-
-            String name = pv.getName();
-
-            if (HiveMind.isBlank(name))
-                name = "<New>";
-
-            data[i] = new Double(pv.getValue()).doubleValue();
-            labels[i] = new String(name);
-        }
-
-        Paint[] paints = TestDataGenerator.getRandomPaints(count);
-
-        try
-        {
-            return new PieChartDataSet("Pie Chart", data, labels, paints, properties);
-        }
-        catch (ChartDataException e)
-        {
-            return null;
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java
deleted file mode 100644
index f01d32c..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.chart;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.error.RequestExceptionReporter;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ServiceConstants;
-import org.jCharts.Chart;
-import org.jCharts.encoders.JPEGEncoder13;
-
-/**
- * ServiceLink that works with a {@link Chart}to dynamically render a chart as a JPEG. This is a
- * very limited implementation; a full version would include features such as setting the size of
- * the image, and more flexibility in defining where the {@link Chart}instance is obtained from.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.10
- */
-
-public class ChartService implements IEngineService
-{
-    public static final String SERVICE_NAME = "chart";
-
-    /** @since 4.0 */
-    private RequestExceptionReporter _exceptionReporter;
-
-    /** @since 4.0 */
-    private LinkFactory _linkFactory;
-
-    /** @since 4.0 */
-    private HttpServletResponse _response;
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        Defense.isAssignable(parameter, IComponent.class, "parameter");
-
-        IComponent component = (IComponent) parameter;
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.SERVICE, getName());
-        parameters.put(ServiceConstants.PAGE, component.getPage().getPageName());
-        parameters.put(ServiceConstants.COMPONENT, component.getIdPath());
-
-        return _linkFactory.constructLink(this, false, parameters, true);
-    }
-
-    public void service(IRequestCycle cycle) throws IOException
-    {
-        String pageName = cycle.getParameter(ServiceConstants.PAGE);
-        String componentId = cycle.getParameter(ServiceConstants.COMPONENT);
-
-        IPage page = cycle.getPage(pageName);
-        IComponent component = page.getNestedComponent(componentId);
-
-        try
-        {
-            IChartProvider provider = (IChartProvider) component;
-            
-            Chart chart = provider.getChart();
-            
-            JPEGEncoder13.encode(chart, 1.0f, _response);
-        }
-        catch (ClassCastException ex)
-        {
-            _exceptionReporter.reportRequestException("Component " + component.getExtendedId()
-                    + " does not implement IChartProvider.", ex);
-
-            return;
-        }
-        catch (Throwable ex)
-        {
-            _exceptionReporter.reportRequestException("Error creating JPEG stream.", ex);
-
-            return;
-        }
-
-        return;
-    }
-
-    public String getName()
-    {
-        return SERVICE_NAME;
-    }
-
-    /** @since 4.0 */
-    public void setExceptionReporter(RequestExceptionReporter exceptionReporter)
-    {
-        _exceptionReporter = exceptionReporter;
-    }
-
-    /** @since 4.0 */
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-
-    /** @since 4.0 */
-    public void setResponse(HttpServletResponse response)
-    {
-        _response = response;
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/IChartProvider.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/IChartProvider.java
deleted file mode 100644
index 89bb1d4..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/IChartProvider.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.chart;
-
-import org.jCharts.Chart;
-
-/**
- * An object which can provide a {@link Chart}(to the {@link ChartService}).
- * 
- * @author Howard Lewis Ship
- * @since 1.0.10
- */
-
-public interface IChartProvider
-{
-
-    Chart getChart();
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/PlotValue.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/PlotValue.java
deleted file mode 100644
index 36f35cb..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/PlotValue.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.chart;
-
-import java.io.Serializable;
-
-/**
- * An single point of data in the plot.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.10
- */
-
-public class PlotValue implements Serializable
-{
-    private static final long serialVersionUID = 4847193821463693432L;
-
-    private String _name;
-
-    private int _value;
-
-    public PlotValue()
-    {
-    }
-
-    public PlotValue(String name, int value)
-    {
-        this._name = name;
-        this._value = value;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public void setName(String name)
-    {
-        this._name = name;
-    }
-
-    public int getValue()
-    {
-        return _value;
-    }
-
-    public void setValue(int value)
-    {
-        this._value = value;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("PlotValue@");
-        buffer.append(Integer.toHexString(hashCode()));
-        buffer.append('[');
-        buffer.append(_name);
-        buffer.append(' ');
-        buffer.append(_value);
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/package.html b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/package.html
deleted file mode 100644
index 5004775..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/chart/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Charting related classes.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/Border.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/Border.java
deleted file mode 100644
index b7f41fb..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/Border.java
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.annotations.Asset;
-import org.apache.tapestry.annotations.InjectAsset;
-import org.apache.tapestry.annotations.InjectState;
-import org.apache.tapestry.annotations.Message;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.workbench.Visit;
-
-/**
- * Common navigational border for the Workbench tutorial.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.7
- */
-
-public abstract class Border extends BaseComponent implements PageBeginRenderListener
-{
-
-    /**
-     * Array of page names, read from the Strings file; this is the same regardless of localization,
-     * so it is static (shared by all).
-     */
-
-    private static String[] _tabOrder;
-
-    @InjectState("session-data")
-    public abstract Visit getVisit();
-
-    @Message
-    public abstract String getTabOrder();
-    
-    public void pageBeginRender(PageEvent event)
-    {
-        Visit visit = getVisit();
-
-        setActivePageName(visit.getActiveTabName());
-        
-        if (_tabOrder == null)
-            _tabOrder = TapestryUtils.split(getTabOrder(), ' ');
-    }
-
-    /**
-     * Returns the logical names of the pages accessible via the navigation bar, in appopriate
-     * order.
-     */
-
-    public String[] getPageTabNames()
-    {
-        return _tabOrder;
-    }
-
-    public abstract void setPageName(String value);
-
-    public abstract String getPageName();
-
-    public abstract void setActivePageName(String activePageName);
-
-    public abstract String getActivePageName();
-
-    public boolean isActivePage()
-    {
-        return getPageName().equals(getActivePageName());
-    }
-
-    public String getPageTitle()
-    {
-        // Need to check for synchronization issues, but I think
-        // ResourceBundle is safe.
-
-        return getMessages().getMessage(getPageName());
-    }
-
-    // Arbitrary mix of @Asset and @InjectAsset just to
-    // test the annotations.
-
-    @Asset("images/tab-active-left.gif")
-    public abstract IAsset getActiveLeft();
-
-    @InjectAsset("inactiveLeft")
-    public abstract IAsset getInactiveLeft();
-
-    @Asset("images/tab-active-mid.gif")
-    public abstract IAsset getActiveMid();
-
-    @InjectAsset("inactiveMid")
-    public abstract IAsset getInactiveMid();
-
-    @Asset("images/tab-active-right.gif")
-    public abstract IAsset getActiveRight();
-
-    @InjectAsset("inactiveRight")
-    public abstract IAsset getInactiveRight();
-    
-    public IAsset getLeftTabAsset()
-    {
-        return isActivePage() ? getActiveLeft() : getInactiveLeft();
-    }
-
-    public IAsset getMidTabAsset()
-    {
-        return isActivePage() ? getActiveMid() : getInactiveMid();
-    }
-
-    public IAsset getRightTabAsset()
-    {
-        return isActivePage() ? getActiveRight() : getInactiveRight();
-    }
-
-    public void selectPage(IRequestCycle cycle, String newPageName)
-    {
-        Visit visit = getVisit();
-
-        visit.setActiveTabName(newPageName);
-
-        cycle.activate(newPageName);
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.java
deleted file mode 100644
index 6c98193..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.components.form;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.ComponentClass;
-import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-import java.util.List;
-
-/**
- * This would normally be done entirely <em>without</em> using code. Trying to demonstrate that
- * you can create components without a .jwc file by matching the component type against a class name
- * (in the proper package, as defined in the application specification).
- * 
- * @author Howard Lewis Ship
- */
-@ComponentClass(allowBody = false, allowInformalParameters = false)
-public abstract class ShowError extends BaseComponent {
-
-    @Parameter(required = true)
-    public abstract IValidationDelegate getDelegate();
-
-    @Override
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.isRewinding())
-            return;
-
-        IValidationDelegate delegate = getDelegate();
-
-        if (!delegate.getHasErrors())
-            return;
-        
-        super.renderComponent(writer, cycle);
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public void renderBody(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IValidationDelegate delegate = getDelegate();
-
-        List<IRender> errorRenders = delegate.getErrorRenderers();
-
-        errorRenders.get(0).render(writer, cycle);
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.properties b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.properties
deleted file mode 100644
index bebe631..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/form/ShowError.properties
+++ /dev/null
@@ -1 +0,0 @@
-Value=Something {0}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/package.html b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/package.html
deleted file mode 100644
index f69573a..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/components/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Components.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/dateIcon.gif b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/dateIcon.gif
deleted file mode 100644
index 1f48a19..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/dateIcon.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/Fields.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/Fields.java
deleted file mode 100644
index 326c153..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/Fields.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.fields;
-
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.annotations.Asset;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.InjectState;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.workbench.Visit;
-
-import java.math.BigDecimal;
-
-/**
- * @author Howard Lewis Ship
- * @since 1.0.7
- */
-
-public abstract class Fields extends BasePage
-{
-
-    public static final int INT_MIN = 5;
-
-    public static final int INT_MAX = 20;
-
-    public static final double DOUBLE_MIN = 3.14;
-
-    public static final double DOUBLE_MAX = 27.5;
-    
-    public static final BigDecimal DECIMAL_MIN = new BigDecimal("2");
-    
-    public static final BigDecimal DECIMAL_MAX = new BigDecimal("100.123456234563456734563456356734567456784567456784567845675678456785678");
-    
-    public static final long LONG_MIN = 6;
-
-    public static final long LONG_MAX = 21;
-
-    public static final int STRING_MIN_LENGTH = 3;
-
-    @InjectPage("FieldsResults")
-    public abstract FieldsResults getResultsPage();
-
-    public IPage doSubmit()
-    {
-        return getResultsPage();
-    }
-    
-    public void doByLink()
-    {
-        getResultsPage().setByLink(true);
-    }
-    
-    @InjectState("session-data")
-    public abstract Visit getVisit();
-
-    @Asset("images/Continue.gif")
-    public abstract IAsset getContinue();
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/FieldsResults.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/FieldsResults.java
deleted file mode 100644
index 985bb34..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/FieldsResults.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.workbench.fields;

-

-import org.apache.tapestry.annotations.InjectState;

-import org.apache.tapestry.html.BasePage;

-import org.apache.tapestry.workbench.Visit;

-

-/**

- * @author Howard Lewis Ship

- * @since 4.0

- */

-public abstract class FieldsResults extends BasePage

-{

-    /**

-     * Flag indicating whether the form was submitted via a link.

-     */

-

-    public abstract void setByLink(boolean byLink);

-    

-    @InjectState("session-data")

-    public abstract Visit getVisit();

-}

diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/images/Continue.gif b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/images/Continue.gif
deleted file mode 100644
index 83f7f71..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/images/Continue.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/package.html b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/package.html
deleted file mode 100644
index bd00035..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Form data
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/LocaleModel.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/LocaleModel.java
deleted file mode 100644
index 601de58..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/LocaleModel.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.localization;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- * @author Howard Lewis Ship
- */
-
-public class LocaleModel implements IPropertySelectionModel
-{
-    private Locale _locale;
-
-    private List _locales = new ArrayList();
-
-    public LocaleModel(Locale locale)
-    {
-        _locale = locale;
-    }
-
-    public void add(Locale locale)
-    {
-        _locales.add(locale);
-    }
-
-    private Locale get(int index)
-    {
-        return (Locale) _locales.get(index);
-    }
-
-    public String getLabel(int index)
-    {
-        return get(index).getDisplayName(_locale);
-    }
-
-    public int getOptionCount()
-    {
-        return _locales.size();
-    }
-
-    public Object getOption(int index)
-    {
-        return _locales.get(index);
-    }
-
-    /**
-     * Returns the String version of the integer index.
-     */
-
-    public String getValue(int index)
-    {
-        return Integer.toString(index);
-    }
-
-    public boolean isDisabled(int index)
-    {
-        return false;
-    }
-    
-    public Object translateValue(String value)
-    {
-        int index = Integer.parseInt(value);
-
-        return _locales.get(index);
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/Localization.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/Localization.java
deleted file mode 100644
index 7c1d959..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/Localization.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.localization;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.html.BasePage;
-
-import java.util.Locale;
-
-/**
- * @author Howard Lewis Ship
- * @since 1.0.7
- */
-
-public abstract class Localization extends BasePage
-{
-
-    private IPropertySelectionModel localeModel;
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        cycle.activate("localization/Change");
-    }
-
-    public IPropertySelectionModel getLocaleModel()
-    {
-        if (localeModel == null) localeModel = buildLocaleModel();
-
-        return localeModel;
-    }
-
-    private IPropertySelectionModel buildLocaleModel()
-    {
-        LocaleModel model = new LocaleModel(getLocale());
-
-        model.add(Locale.ENGLISH);
-        model.add(Locale.FRENCH);
-        model.add(Locale.GERMAN);
-        model.add(Locale.ITALIAN);
-
-        return model;
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/LocalizationChange.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/LocalizationChange.java
deleted file mode 100644
index f6d73c3..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/LocalizationChange.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.localization;
-
-import java.util.Locale;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * @author Howard Lewis Ship
- */
-
-public abstract class LocalizationChange extends BasePage
-{
-
-    private String localeName;
-
-    public String getLocaleName()
-    {
-        if (localeName == null)
-        {
-            Locale locale = getLocale();
-
-            localeName = locale.getDisplayName(locale);
-        }
-
-        return localeName;
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/package.html b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/package.html
deleted file mode 100644
index d9be28f..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/localization/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Localization
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/package.html b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/package.html
deleted file mode 100644
index 87ee931..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Core utilities.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/Palette.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/Palette.java
deleted file mode 100644
index 5162675..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/Palette.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.palette;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.contrib.palette.SortMode;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-import java.util.List;
-
-/**
- * @author Howard Lewis Ship
- */
-
-public abstract class Palette extends BasePage
-{
-    private IPropertySelectionModel colorModel;
-
-    private String[] colors = { "Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet" };
-    
-    public abstract List getSelectedColors();
-
-    @Persist("client:app")
-    public abstract String getSort();
-
-    public abstract void setSort(String sort);
-
-    public abstract IValidationDelegate getDelegate();
-
-    @InjectPage("PaletteResults")
-    public abstract PaletteResults getResultsPage();
-
-    protected void finishLoad()
-    {
-        setSort(SortMode.USER);
-    }
-
-    public void doRefresh()
-    {
-        getDelegate().clearErrors();
-    }
-
-    public IPage doAdvance()
-    {
-        // Since Palette and palette.Results come from
-        // a library now, we need to make sure
-        // the namespace id is part of the name.
-
-        PaletteResults results = getResultsPage();
-
-        results.setSelectedColors(getSelectedColors());
-
-        return results;
-    }
-
-    public IPropertySelectionModel getColorModel()
-    {
-        if (colorModel == null)
-            colorModel = new StringPropertySelectionModel(colors);
-
-        return colorModel;
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/PaletteResults.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/PaletteResults.java
deleted file mode 100644
index 49ef08a..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/PaletteResults.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.palette;
-
-import org.apache.tapestry.html.BasePage;
-
-import java.util.List;
-
-/**
- * @author Howard Lewis Ship
- * @since 1.0.7
- */
-
-public abstract class PaletteResults extends BasePage
-{
-
-    public abstract void setSelectedColors(List value);
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/SortModeStrings.properties b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/SortModeStrings.properties
deleted file mode 100644
index c5a9196..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/SortModeStrings.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-NONE=None
-LABEL=Label
-VALUE=Value
-USER=Manual
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/package.html b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/package.html
deleted file mode 100644
index 9fda442..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/palette/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Palette
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/ILocaleSelectionListener.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/ILocaleSelectionListener.java
deleted file mode 100644
index c9f84ad..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/ILocaleSelectionListener.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.table;
-
-import java.util.Locale;
-
-/**
- * @author mindbridge
- *
- */
-public interface ILocaleSelectionListener
-{
-    void localesSelected(Locale[] arrLocales);
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/LocaleList.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/LocaleList.java
deleted file mode 100644
index 5cdf9ba..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/LocaleList.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.table;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.contrib.table.model.IPrimaryKeyConvertor;
-
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-/**
- * @author mindbridge
- */
-public abstract class LocaleList extends BaseComponent
-{
-
-    // immutable values
-    private IPrimaryKeyConvertor m_objLocaleConvertor;
-
-    public LocaleList()
-    {
-        // define an IPrimaryKeyConvertor that represents
-        // a Locale object as a String and converts it back
-        m_objLocaleConvertor = new IPrimaryKeyConvertor()
-        {
-
-            public Object getPrimaryKey(Object objValue)
-            {
-                Locale objLocale = (Locale) objValue;
-                return objLocale.toString();
-            }
-
-            public Object getValue(Object objPrimaryKey)
-            {
-                StringTokenizer objTokenizer = new StringTokenizer(
-                        (String) objPrimaryKey, "_");
-
-                String strLanguage = "";
-                if (objTokenizer.hasMoreTokens())
-                    strLanguage = objTokenizer.nextToken();
-
-                String strCountry = "";
-                if (objTokenizer.hasMoreTokens())
-                    strCountry = objTokenizer.nextToken();
-
-                String strVariant = "";
-                if (objTokenizer.hasMoreTokens())
-                    strVariant = objTokenizer.nextToken();
-
-                return new Locale(strLanguage, strCountry, strVariant);
-            }
-        };
-    }
-
-    @Parameter(required = true)
-    public abstract ILocaleSelectionListener getLocaleSelectionListener();
-
-    public IPrimaryKeyConvertor getLocaleConvertor()
-    {
-        return m_objLocaleConvertor;
-    }
-
-    public boolean getCheckboxSelected()
-    {
-        return getSelectedLocales().contains(getCurrentLocale());
-    }
-
-    public void setCheckboxSelected(boolean bSelected)
-    {
-        Locale objLocale = getCurrentLocale();
-        Set setSelectedLocales = getSelectedLocales();
-
-        if (bSelected)
-            setSelectedLocales.add(objLocale);
-        else setSelectedLocales.remove(objLocale);
-
-        // persist value
-        setSelectedLocales(setSelectedLocales);
-    }
-
-    public void selectLocales(IRequestCycle objCycle)
-    {
-        Set setSelectedLocales = getSelectedLocales();
-        Locale[] arrLocales = new Locale[setSelectedLocales.size()];
-        setSelectedLocales.toArray(arrLocales);
-
-        ILocaleSelectionListener objListener = getLocaleSelectionListener();
-
-        objListener.localesSelected(arrLocales);
-
-        // clear selection
-        setSelectedLocales(new HashSet());
-    }
-
-    public abstract Locale getCurrentLocale();
-
-    public abstract Set getSelectedLocales();
-
-    public abstract void setSelectedLocales(Set set);
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/LocaleSelection.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/LocaleSelection.java
deleted file mode 100644
index 2ce1846..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/LocaleSelection.java
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.table;
-
-import java.text.DateFormat;
-import java.text.DecimalFormatSymbols;
-import java.util.Date;
-import java.util.Locale;
-import java.util.Set;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.simple.ITableColumnEvaluator;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-
-/**
- * @author mindbridge
- */
-public abstract class LocaleSelection extends BaseComponent implements
-        ILocaleSelectionListener
-{
-
-    // properties
-    public abstract Locale getCurrentLocale();
-
-    public abstract Set getLocaleSet();
-
-    public abstract void setLocaleSet(Set objLocaleSet);
-
-    /**
-     * @see org.apache.tapestry.workbench.table.ILocaleSelectionListener#localesSelected(Locale[])
-     */
-    public void localesSelected(Locale[] arrLocales)
-    {
-        Set objLocaleSet = getLocaleSet();
-        addAll(objLocaleSet, arrLocales);
-        // ensure that the framework knows about the change and the set is
-        // persisted
-        setLocaleSet(objLocaleSet);
-    }
-
-    private void addAll(Set objLocaleSet, Locale[] arrLocales)
-    {
-        for(int i = 0; i < arrLocales.length; i++)
-            objLocaleSet.add(arrLocales[i]);
-    }
-
-    public ITableColumn getCurrencyColumn()
-    {
-        // The column value is extracted in a custom evaluator class
-        return new SimpleTableColumn("Currency", new CurrencyEvaluator(), true);
-    }
-
-    public ITableColumn getDateFormatColumn()
-    {
-        // The entire column is defined using a custom column class
-        return new DateFormatColumn(new Date());
-    }
-
-    /**
-     * Returns the verbosity of the current locale. This is used by the Block
-     * rendering the 'Verbosity' column
-     * 
-     * @return int the current locale verbosity
-     */
-    public int getCurrentLocaleVerbosity()
-    {
-        int nVerbosity = VerbosityRating.calculateVerbosity(getCurrentLocale());
-        return nVerbosity;
-    }
-
-    /**
-     * Generates the context that will be passed to the deleteLocale() listener
-     * if a "remove" link is selected.
-     * <p>
-     * This is used by the Block rendering the 'Remove' column.
-     * 
-     * @return String[] the context for the deleteLocale() listener
-     */
-    public String[] getDeleteLocaleContext()
-    {
-        Locale objLocale = getCurrentLocale();
-        return new String[] { objLocale.getLanguage(), objLocale.getCountry(),
-                objLocale.getVariant() };
-    }
-
-    /**
-     * A listener invoked when a "remove" link is selected. It removes from the
-     * data model the locale corresponding to the link.
-     * <p>
-     * 
-     * @param objCycle
-     *            the request cycle
-     */
-    public void deleteLocale(IRequestCycle objCycle)
-    {
-        Object[] arrParams = objCycle.getListenerParameters();
-        Locale objLocale = new Locale(arrParams[0].toString(), arrParams[1]
-                .toString(), arrParams[2].toString());
-        getLocaleSet().remove(objLocale);
-    }
-
-    /**
-     * A class defining the logic for getting the currency symbol from a locale.
-     */
-    private static class CurrencyEvaluator implements ITableColumnEvaluator
-    {
-
-        private static final long serialVersionUID = 1L;
-
-        /**
-         * @see org.apache.tapestry.contrib.table.model.simple.ITableColumnEvaluator#getColumnValue(ITableColumn,
-         *      Object)
-         */
-        public Object getColumnValue(ITableColumn objColumn, Object objRow)
-        {
-            Locale objLocale = (Locale) objRow;
-            String strCountry = objLocale.getCountry();
-            if (strCountry == null || strCountry.equals("")) return "";
-
-            DecimalFormatSymbols objSymbols = new DecimalFormatSymbols(
-                    objLocale);
-            return objSymbols.getCurrencySymbol();
-        }
-    }
-
-    /**
-     * A class defining a column for displaying the date format.
-     */
-    private static class DateFormatColumn extends SimpleTableColumn
-    {
-
-        private static final long serialVersionUID = 1L;
-
-        private Date m_objDate;
-
-        public DateFormatColumn(Date objDate)
-        {
-            super("Date Format", true);
-            m_objDate = objDate;
-        }
-
-        public Object getColumnValue(Object objRow)
-        {
-            Locale objLocale = (Locale) objRow;
-            DateFormat objFormat = DateFormat.getDateTimeInstance(
-                    DateFormat.LONG, DateFormat.LONG, objLocale);
-            return objFormat.format(m_objDate);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/VerbosityRating.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/VerbosityRating.java
deleted file mode 100644
index 935cd97..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/VerbosityRating.java
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.table;
-
-import java.io.Serializable;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.Locale;
-
-/**
- * @author mindbridge
- */
-public final class VerbosityRating implements Serializable
-{
-
-    private static final long serialVersionUID = 1L;
-
-    /* defeat instantiation */
-    private VerbosityRating() { }
-    
-    /**
-     * Method calculateVerbosity. Please note that this method is relatively
-     * slow It should not be used often, unless for fun :)
-     * 
-     * @param objLocale
-     * @return int
-     */
-    public static int calculateVerbosity(Locale objLocale)
-    {
-        int nWeekDayVerbosity = calculateWeekDayVerbosity(objLocale);
-        int nMonthVerbosity = calculateMonthVerbosity(objLocale);
-        return nWeekDayVerbosity + nMonthVerbosity;
-    }
-
-    public static int calculateWeekDayVerbosity(Locale objLocale)
-    {
-        SimpleDateFormat objWeekDay = new SimpleDateFormat("EEEE", objLocale);
-
-        GregorianCalendar objCalendar = new GregorianCalendar();
-        objCalendar.set(Calendar.YEAR, 2000);
-        objCalendar.set(Calendar.MONTH, 0);
-        objCalendar.set(Calendar.DATE, 1);
-
-        int nCount = 0;
-        for(int i = 0; i < 7; i++)
-        {
-            String strWeekDay = objWeekDay.format(objCalendar.getTime());
-            nCount += strWeekDay.length();
-            objCalendar.add(Calendar.DATE, 1);
-        }
-
-        return nCount;
-    }
-
-    public static int calculateMonthVerbosity(Locale objLocale)
-    {
-        SimpleDateFormat objMonth = new SimpleDateFormat("MMMM", objLocale);
-
-        GregorianCalendar objCalendar = new GregorianCalendar();
-        objCalendar.set(Calendar.YEAR, 2000);
-        objCalendar.set(Calendar.MONTH, 0);
-        objCalendar.set(Calendar.DATE, 1);
-
-        int nCount = 0;
-        for(int i = 0; i < 12; i++)
-        {
-            String strMonth = objMonth.format(objCalendar.getTime());
-            nCount += strMonth.length();
-            objCalendar.add(Calendar.MONTH, 1);
-        }
-
-        return nCount;
-    }
-
-    public static void main(String[] arrArgs)
-    {
-        int nMax = 0;
-        int nMin = 1000;
-
-        System.out.println("Starting");
-
-        Locale[] arrLocales = Locale.getAvailableLocales();
-        for(int i = 0; i < arrLocales.length; i++)
-        {
-            Locale objLocale = arrLocales[i];
-            int nRating = calculateVerbosity(objLocale);
-            if (nRating > nMax) nMax = nRating;
-            if (nRating < nMin) nMin = nRating;
-        }
-
-        System.out.println("Min: " + nMin);
-        System.out.println("Max: " + nMax);
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/package.html b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/package.html
deleted file mode 100644
index d9be28f..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/table/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Localization
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/DirectoryTableView.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/DirectoryTableView.java
deleted file mode 100644
index 5dfdb05..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/DirectoryTableView.java
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.contrib.table.components.Table;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableModel;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.SFObject;
-
-/**
- * @author ceco
- */
-public abstract class DirectoryTableView extends BaseComponent implements
-        PageDetachListener
-{
-
-    private ITableModel m_objTableModel = null;
-
-    private ITableColumn[] m_arrColumns = null;
-
-    private ISelectedFolderSource m_objSelectedFolderSource = null;
-
-    /**
-     * 
-     */
-    public DirectoryTableView()
-    {
-        super();
-        initialize();
-    }
-
-    private void initialize()
-    {
-        m_objTableModel = null;
-        m_objSelectedFolderSource = null;
-    }
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#finishLoad()
-     */
-    protected void finishLoad()
-    {
-        super.finishLoad();
-        getPage().addPageDetachListener(this);
-    }
-
-    /**
-     * @see org.apache.tapestry.event.PageDetachListener#pageDetached(org.apache.tapestry.event.PageEvent)
-     */
-    public void pageDetached(PageEvent arg0)
-    {
-        initialize();
-    }
-
-    public ITableModel getTableModel()
-    {
-        if (m_objTableModel == null)
-        {
-            ISelectedFolderSource objSelectedFolderSource = getSelectedFolderSource();
-            Collection colChildrens = objSelectedFolderSource
-                    .getSelectedFolderChildren();
-
-            m_objTableModel = new SimpleTableModel(colChildrens.toArray(),
-                    getColumns());
-        }
-        return m_objTableModel;
-    }
-
-    public ITableColumn[] getColumns()
-    {
-        if (m_arrColumns == null)
-        {
-            ArrayList arrColumnsList = new ArrayList();
-            arrColumnsList.add(new SimpleTableColumn("Name", true)
-            {
-
-                private static final long serialVersionUID = -5394217017984056107L;
-
-                public Object getColumnValue(Object objValue)
-                {
-                    SFObject objSFObject = (SFObject) objValue;
-                    return objSFObject.getName();
-                }
-            });
-
-            arrColumnsList.add(new SimpleTableColumn("Date", true)
-            {
-
-                private static final long serialVersionUID = -3258043732869364037L;
-
-                public Object getColumnValue(Object objValue)
-                {
-                    SFObject objSFObject = (SFObject) objValue;
-                    return objSFObject.getDate();
-                }
-            });
-
-            m_arrColumns = new SimpleTableColumn[arrColumnsList.size()];
-            arrColumnsList.toArray(m_arrColumns);
-        }
-        return m_arrColumns;
-    }
-
-    public ISelectedFolderSource getSelectedFolderSource()
-    {
-        if (m_objSelectedFolderSource == null)
-        {
-            IBinding objBinding = getBinding("selectedFolderSource");
-            m_objSelectedFolderSource = (ISelectedFolderSource) objBinding
-                    .getObject();
-        }
-        return m_objSelectedFolderSource;
-    }
-
-    public void resetState()
-    {
-        initialize();
-        Table objTable = (Table) getComponent("table");
-        objTable.reset();
-    }
-
-    public String getSelectedNodeName()
-    {
-        return getSelectedFolderSource().getSelectedNodeName();
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/FileSystemTree.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/FileSystemTree.java
deleted file mode 100644
index a65265d..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/FileSystemTree.java
+++ /dev/null
@@ -1,218 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Date;
-
-import org.apache.tapestry.annotations.InjectObject;
-import org.apache.tapestry.contrib.tree.components.INodeRenderFactory;
-import org.apache.tapestry.contrib.tree.components.TreeView;
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-import org.apache.tapestry.contrib.tree.model.ITreeStateListener;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-import org.apache.tapestry.contrib.tree.model.TreeStateEvent;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeModel;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystem;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystemDataModel;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystemStateManager;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FolderObject;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.NodeRenderFactory;
-
-/**
- * 
- * @author ceco
- */
-public abstract class FileSystemTree extends BasePage implements
-        ISelectedFolderSource, ITreeStateListener, PageDetachListener
-{
-
-    private ITreeSessionStateManager m_objTreeSessionStateManager = null;
-
-    private ITreeDataModel m_objDataModel;
-
-    private ITreeModel m_objModel;
-
-    private Object m_objValue;
-
-    @InjectObject("engine-service:asset")
-    public abstract IEngineService getAssetService();
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-    public abstract String getTreeRootDir();
-
-    public void pageDetached(PageEvent event)
-    {
-        m_objDataModel = null;
-        m_objValue = null;
-        m_objTreeSessionStateManager = null;
-    }
-
-    public void initTableModel()
-    {
-        ITreeNode objParent;
-
-        String strRootDir = getTreeRootDir();
-
-        System.out.println("strRootDir = " + strRootDir);
-
-        if (strRootDir == null || "".equals(strRootDir))
-        {
-            objParent = new FileSystem(getAssetService());
-        }
-        else
-        {
-            FolderObject objFolder = new FolderObject(null,
-                    new File(strRootDir), true, getAssetService());
-            objFolder.reload();
-            objParent = objFolder;
-        }
-
-        m_objDataModel = new FileSystemDataModel(objParent);
-        m_objModel = new SimpleTreeModel(m_objDataModel);
-    }
-
-    public Date getCurrentTime()
-    {
-        return new Date();
-    }
-
-    public ITreeModel getTreeModel()
-    {
-        if (m_objDataModel == null)
-        {
-            initTableModel();
-        }
-        return m_objModel;
-    }
-
-    /**
-     * Returns the value.
-     * 
-     * @return Object
-     */
-    public Object getValue()
-    {
-        return m_objValue;
-    }
-
-    /**
-     * Sets the value.
-     * 
-     * @param value
-     *            The value to set
-     */
-    public void setValue(Object value)
-    {
-        m_objValue = value;
-    }
-
-    public INodeRenderFactory getRenderFactory()
-    {
-        return new NodeRenderFactory();
-    }
-
-    public ITreeSessionStateManager getSessionStateManager()
-    {
-        // IPage objPage =
-        // getRequestCycle().getPage("contrib:TreeNodeViewPage");
-        // System.out.println("TreeNodeViewPage NamespaceId :
-        // "+objPage.getNamespace().getNamespaceId());
-
-        if (m_objTreeSessionStateManager == null)
-        {
-            String strRootDir = getTreeRootDir();
-            // System.out.println("strRootDir = " + strRootDir);
-
-            m_objTreeSessionStateManager = new FileSystemStateManager(
-                    strRootDir, getAssetService());
-        }
-        return m_objTreeSessionStateManager;
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.tree.examples.ISelectedFolderSource#getSelectedFolderChildren()
-     */
-    public Collection getSelectedFolderChildren()
-    {
-        TreeView objTreeView = (TreeView) getComponent("treeView");
-        ITreeStateModel objTreeStateModel = objTreeView.getTreeModel()
-                .getTreeStateModel();
-        Object objSelectedNodeUID = objTreeStateModel.getSelectedNode();
-        ITreeNode objSelectedNode = null;
-        if (objSelectedNodeUID != null)
-            objSelectedNode = (ITreeNode) getTreeModel().getTreeDataModel()
-                    .getObject(objSelectedNodeUID);
-        else
-        {
-            objSelectedNode = (ITreeNode) getTreeModel().getTreeDataModel()
-                    .getRoot();
-        }
-        return objSelectedNode.getChildren();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeStateListener#treeStateChanged(org.apache.tapestry.contrib.tree.model.TreeStateEvent)
-     */
-    public void treeStateChanged(TreeStateEvent objEvent)
-    {
-        DirectoryTableView objDirectoryTableView = (DirectoryTableView) getComponent("directoryTableView");
-        objDirectoryTableView.resetState();
-    }
-
-    public ITreeStateListener getTreeStateListener()
-    {
-        return this;
-    }
-
-    public ISelectedFolderSource getSelectedFolderSource()
-    {
-        return this;
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.tree.examples.ISelectedFolderSource#getSelectedNodeName()
-     */
-    public String getSelectedNodeName()
-    {
-        TreeView objTreeView = (TreeView) getComponent("treeView");
-        ITreeStateModel objTreeStateModel = objTreeView.getTreeModel()
-                .getTreeStateModel();
-        Object objSelectedNodeUID = objTreeStateModel.getSelectedNode();
-        ITreeNode objSelectedNode = null;
-        if (objSelectedNodeUID != null)
-            objSelectedNode = (ITreeNode) getTreeModel().getTreeDataModel()
-                    .getObject(objSelectedNodeUID);
-        else
-        {
-            objSelectedNode = (ITreeNode) getTreeModel().getTreeDataModel()
-                    .getRoot();
-        }
-        return objSelectedNode.toString();
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/FileSystemTreeTable.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/FileSystemTreeTable.java
deleted file mode 100644
index d863cb6..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/FileSystemTreeTable.java
+++ /dev/null
@@ -1,247 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-
-import org.apache.tapestry.annotations.InjectObject;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-import org.apache.tapestry.contrib.tree.components.INodeRenderFactory;
-import org.apache.tapestry.contrib.tree.components.table.TreeTable;
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-import org.apache.tapestry.contrib.tree.model.ITreeStateListener;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-import org.apache.tapestry.contrib.tree.model.TreeRowObject;
-import org.apache.tapestry.contrib.tree.model.TreeStateEvent;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeModel;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystem;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystemDataModel;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystemStateManager;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FolderObject;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.NodeRenderFactory;
-
-/**
- * 
- * @author ceco
- */
-public abstract class FileSystemTreeTable extends BasePage implements
-        ISelectedFolderSource, ITreeStateListener, PageDetachListener
-{
-
-    private ITreeSessionStateManager m_objTreeSessionStateManager = null;
-
-    private ITreeDataModel m_objDataModel;
-
-    private ITreeModel m_objModel;
-
-    private Object m_objValue;
-
-    private ArrayList m_arrTableColumns = null;
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-
-    public abstract String getTreeRootDir();
-
-    @InjectObject("engine-service:asset")
-    public abstract IEngineService getAssetService();
-
-    public void pageDetached(PageEvent event)
-    {
-        m_objDataModel = null;
-        m_objValue = null;
-        m_objTreeSessionStateManager = null;
-    }
-
-    public void initTableModel()
-    {
-        ITreeNode objParent;
-        String strRootDir = getTreeRootDir();
-
-        System.out.println("strRootDir = " + strRootDir);
-
-        if (strRootDir == null || "".equals(strRootDir))
-        {
-            objParent = new FileSystem(getAssetService());
-        }
-        else
-        {
-            FolderObject objFolder = new FolderObject(null,
-                    new File(strRootDir), true, getAssetService());
-            objFolder.reload();
-            objParent = objFolder;
-        }
-
-        m_objDataModel = new FileSystemDataModel(objParent);
-        m_objModel = new SimpleTreeModel(m_objDataModel);
-    }
-
-    public Date getCurrentTime()
-    {
-        return new Date();
-    }
-
-    public ITreeModel getTreeModel()
-    {
-        if (m_objDataModel == null)
-        {
-            initTableModel();
-        }
-        return m_objModel;
-    }
-
-    /**
-     * Returns the value.
-     * 
-     * @return Object
-     */
-    public Object getValue()
-    {
-        return m_objValue;
-    }
-
-    /**
-     * Sets the value.
-     * 
-     * @param value
-     *            The value to set
-     */
-    public void setValue(Object value)
-    {
-        m_objValue = value;
-    }
-
-    public INodeRenderFactory getRenderFactory()
-    {
-        return new NodeRenderFactory();
-    }
-
-    public ITreeSessionStateManager getSessionStateManager()
-    {
-        if (m_objTreeSessionStateManager == null)
-        {
-            String strRootDir = getTreeRootDir();
-            m_objTreeSessionStateManager = new FileSystemStateManager(
-                    strRootDir, getAssetService());
-        }
-        return m_objTreeSessionStateManager;
-    }
-
-    /**
-     * @return Columns for tree.
-     */
-    public ArrayList getTableColumns()
-    {
-        if (m_arrTableColumns == null)
-        {
-            m_arrTableColumns = new ArrayList();
-            m_arrTableColumns.add(new SimpleTableColumn("Date", true)
-            {
-
-                private static final long serialVersionUID = -8211004113105081255L;
-
-                public Object getColumnValue(Object objValue)
-                {
-                    TreeRowObject objRowObject = (TreeRowObject) objValue;
-                    // SFObject objSFObject =
-                    // (SFObject)objRowObject.getTreeNode();
-                    IFileSystemTreeNode objFileSystemTreeNode = (IFileSystemTreeNode) objRowObject
-                            .getTreeNode();
-                    return objFileSystemTreeNode.getDate();
-                }
-            });
-        }
-        return m_arrTableColumns;
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.tree.examples.ISelectedFolderSource#getSelectedFolderChildren() .
-     */
-    public Collection getSelectedFolderChildren()
-    {
-        TreeTable objTreeTable = (TreeTable) getComponent("tree");
-        ITreeModelSource objTreeModelSource = objTreeTable.getTreeModelSource();
-        ITreeStateModel objTreeStateModel = objTreeModelSource.getTreeModel()
-                .getTreeStateModel();
-        Object objSelectedNodeUID = objTreeStateModel.getSelectedNode();
-        ITreeNode objSelectedNode = null;
-        if (objSelectedNodeUID != null)
-            objSelectedNode = (ITreeNode) getTreeModel().getTreeDataModel()
-                    .getObject(objSelectedNodeUID);
-        else
-        {
-            objSelectedNode = (ITreeNode) getTreeModel().getTreeDataModel()
-                    .getRoot();
-        }
-        return objSelectedNode.getChildren();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeStateListener#treeStateChanged(org.apache.tapestry.contrib.tree.model.TreeStateEvent)
-     */
-    public void treeStateChanged(TreeStateEvent objEvent)
-    {
-        DirectoryTableView objDirectoryTableView = (DirectoryTableView) getComponent("directoryTableView");
-        objDirectoryTableView.resetState();
-    }
-
-    public ITreeStateListener getTreeStateListener()
-    {
-        return this;
-    }
-
-    public ISelectedFolderSource getSelectedFolderSource()
-    {
-        return this;
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.tree.examples.ISelectedFolderSource#getSelectedNodeName()
-     */
-    public String getSelectedNodeName()
-    {
-        TreeTable objTreeTable = (TreeTable) getComponent("tree");
-        ITreeModelSource objTreeModelSource = objTreeTable.getTreeModelSource();
-        ITreeStateModel objTreeStateModel = objTreeModelSource.getTreeModel()
-                .getTreeStateModel();
-        Object objSelectedNodeUID = objTreeStateModel.getSelectedNode();
-        ITreeNode objSelectedNode = null;
-        if (objSelectedNodeUID != null)
-            objSelectedNode = (ITreeNode) getTreeModel().getTreeDataModel()
-                    .getObject(objSelectedNodeUID);
-        else
-        {
-            objSelectedNode = (ITreeNode) getTreeModel().getTreeDataModel()
-                    .getRoot();
-        }
-        return objSelectedNode.toString();
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/ISelectedFolderSource.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/ISelectedFolderSource.java
deleted file mode 100644
index d1e9fb5..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/ISelectedFolderSource.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.util.Collection;
-
-/**
- * All right reserved. Copyright (c) by Rushmore Digital Ltd. Created on Sep 4,
- * 2003
- * 
- * @author ceco
- */
-public interface ISelectedFolderSource
-{
-
-    Collection getSelectedFolderChildren();
-
-    String getSelectedNodeName();
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/SessionVisit.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/SessionVisit.java
deleted file mode 100644
index b773e16..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/SessionVisit.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.io.Serializable;
-
-/**
- * 
- * @author 
- */
-public class SessionVisit implements Serializable
-{
-
-    private static final long serialVersionUID = 4805064665115445945L;
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/SimpleTree.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/SimpleTree.java
deleted file mode 100644
index cae0020..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/SimpleTree.java
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.util.Date;
-
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeDataModel;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeModel;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Simple example page.
- * 
- * @version $Revision$
- */
-public abstract class SimpleTree extends BasePage
-{
-    private ITreeDataModel treeDataModel;
-
-    private ITreeModel treeModel;
-
-    private Object _value;
-
-    public SimpleTree()
-    {
-    }
-
-    public void detach()
-    {
-        super.detach();
-        treeDataModel = null;
-        _value = null;
-    }
-
-    public void init()
-    {
-        TestTreeNode objParent = new TestTreeNode("Parent");
-
-        TestTreeNode objChild1 = new TestTreeNode("Child1");
-        TestTreeNode objChild2 = new TestTreeNode("Child2");
-        TestTreeNode objChild3 = new TestTreeNode("Child3");
-
-        objParent.insert(objChild3);
-        objParent.insert(objChild2);
-        objParent.insert(objChild1);
-
-        TestTreeNode objChild31 = new TestTreeNode("Child31");
-        TestTreeNode objChild32 = new TestTreeNode("Child32");
-
-        objChild3.insert(objChild32);
-        objChild3.insert(objChild31);
-
-        treeDataModel = new SimpleTreeDataModel(objParent);
-        treeModel = new SimpleTreeModel(treeDataModel);
-    }
-
-    public Date getCurrentTime()
-    {
-        return new Date();
-    }
-
-    public ITreeModel getTreeModel()
-    {
-        if (treeModel == null)
-        {
-            init();
-        }
-        return treeModel;
-    }
-
-    /**
-     * Returns the value.
-     * 
-     * @return Object
-     */
-    public Object getValue()
-    {
-        return _value;
-    }
-
-    /**
-     * Sets the value.
-     * 
-     * @param value
-     *            The value to set
-     */
-    public void setValue(Object value)
-    {
-        this._value = value;
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/TestTreeNode.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/TestTreeNode.java
deleted file mode 100644
index 060af4e..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/TestTreeNode.java
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import org.apache.tapestry.contrib.tree.model.IMutableTreeNode;
-import org.apache.tapestry.contrib.tree.simple.TreeNode;
-
-/**
- * @author ceco
- */
-public class TestTreeNode extends TreeNode
-{
-
-    private static final long serialVersionUID = -2513375115143901815L;
-
-    private String m_strValue;
-
-    /**
-     * Constructor for TestTreeNode.
-     */
-    public TestTreeNode(String strValue)
-    {
-        this(null, strValue);
-    }
-
-    /**
-     * Constructor for TestTreeNode.
-     * 
-     * @param parentNode
-     */
-    public TestTreeNode(IMutableTreeNode parentNode, String strValue)
-    {
-        super(parentNode);
-        m_strValue = strValue;
-    }
-
-    public String toString()
-    {
-        return m_strValue;
-    }
-
-    public int hashCode()
-    {
-        return m_strValue.hashCode();
-    }
-
-    public boolean equals(Object objTarget)
-    {
-        if (objTarget == this) return true;
-        if (!(objTarget instanceof TestTreeNode)) return false;
-
-        TestTreeNode objTargetNode = (TestTreeNode) objTarget;
-        return this.getValue().equals(objTargetNode.getValue());
-    }
-
-    /**
-     * Returns the value.
-     * 
-     * @return String
-     */
-    public String getValue()
-    {
-        return m_strValue;
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/AssetsHolder.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/AssetsHolder.java
deleted file mode 100644
index 4bcfed5..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/AssetsHolder.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.asset.PrivateAsset;
-import org.apache.tapestry.engine.IEngineService;
-
-/**
- * @author ceco
- */
-public class AssetsHolder
-{
-    private final IEngineService _assetService;
-
-    private final String m_strOpenAssetsURL;
-
-    private final String m_strCloseAssetsURL;
-
-    private PrivateAsset m_objOpenAsset = null;
-
-    private PrivateAsset m_objCloseAsset = null;
-
-    /**
-     * Constructor for AssetsHolder.
-     */
-    public AssetsHolder(IEngineService assetService, String strOpenAssetsURL,
-            String strCloseAssetsURL)
-    {
-        Defense.notNull(assetService, "assetService");
-
-        _assetService = assetService;
-
-        m_strOpenAssetsURL = strOpenAssetsURL;
-        m_strCloseAssetsURL = strCloseAssetsURL;
-    }
-
-    public PrivateAsset getAssetForOpenNode()
-    {
-        if (m_objOpenAsset == null)
-        {
-            // m_objOpenAsset = new PrivateAsset(m_strOpenAssetsURL);
-            m_objOpenAsset = new PrivateAsset(new ClasspathResource(new DefaultClassResolver(),
-                    m_strOpenAssetsURL), _assetService, null);
-        }
-        return m_objOpenAsset;
-    }
-
-    public PrivateAsset getAssetForCloseNode()
-    {
-        if (m_objCloseAsset == null)
-        {
-            // m_objCloseAsset = new PrivateAsset(m_strCloseAssetsURL);
-            m_objCloseAsset = new PrivateAsset(new ClasspathResource(new DefaultClassResolver(),
-                    m_strCloseAssetsURL), _assetService, null);
-        }
-        return m_objCloseAsset;
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/Drive.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/Drive.java
deleted file mode 100644
index 71e780c..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/Drive.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.engine.IEngineService;
-
-/**
- * 
- * @author unknown
- */
-public class Drive extends FolderObject
-{
-    /**
-     * 
-     */
-    private static final long serialVersionUID = -4098885307563692077L;
-
-    private String m_strType;
-
-    private String m_strLabel;
-
-    private long m_lSize;
-
-    private final IEngineService _assetService;
-
-    public Drive(ITreeNode objParent, File objFile, IEngineService assetService)
-    {
-        super(objParent, objFile, false, assetService);
-
-        _assetService = assetService;
-    }
-
-    public long getSize()
-    {
-        return m_lSize;
-    }
-
-    public String getType()
-    {
-        return m_strType;
-    }
-
-    public String getLabel()
-    {
-        return m_strLabel;
-    }
-
-    public AssetsHolder getAssets()
-    {
-        if (m_objAssetsHolder == null)
-        {
-            m_objAssetsHolder = new AssetsHolder(_assetService,
-                    "/org/apache/tapestry/workbench/tree/examples/fsmodel/harddrive.gif",
-                    "/org/apache/tapestry/workbench/tree/examples/fsmodel/harddrive.gif");
-        }
-        return m_objAssetsHolder;
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileObject.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileObject.java
deleted file mode 100644
index adfb1ba..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileObject.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.engine.IEngineService;
-
-/**
- * 
- * @author unknown
- */
-public class FileObject extends SFObject
-{
-    /**
-     * 
-     */
-    private static final long serialVersionUID = -4552981105079058185L;
-
-    private long m_lSize;
-
-    private final IEngineService _assetService;
-
-    public FileObject(ITreeNode objParent, File objFile, IEngineService assetService)
-    {
-        super(objParent, objFile);
-        _assetService = assetService;
-        init();
-    }
-
-    protected void init()
-    {
-        super.init();
-        m_lSize = m_objFile.length();
-    }
-
-    public long getSize()
-    {
-        return m_lSize;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
-     */
-    public boolean containsChild(ITreeNode node)
-    {
-        return false;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getAllowsChildren()
-     */
-    public boolean getAllowsChildren()
-    {
-        return false;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildCount()
-     */
-    public int getChildCount()
-    {
-        return 0;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
-     */
-    public Collection getChildren()
-    {
-        return new ArrayList();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#isLeaf()
-     */
-    public boolean isLeaf()
-    {
-        return true;
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode#getAssets()
-     */
-    public AssetsHolder getAssets()
-    {
-        if (m_objAssetsHolder == null)
-        {
-            final String a = "/org/apache/tapestry/workbench/tree/examples/fsmodel/file.gif";
-            m_objAssetsHolder = new AssetsHolder(_assetService, a, a);
-        }
-        return m_objAssetsHolder;
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystem.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystem.java
deleted file mode 100644
index d01c465..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystem.java
+++ /dev/null
@@ -1,201 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Vector;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.engine.IEngineService;
-
-/**
- * 
- */
-public class FileSystem implements IFileSystemTreeNode
-{
-
-    /**
-     * 
-     */
-    private static final long serialVersionUID = -3895257178984217762L;
-
-    private transient AssetsHolder m_objAssetsHolder = null;
-
-    /**
-     * @associates <{Drive}>
-     * @supplierCardinality 0..*
-     */
-    private Vector m_vDrives;
-
-    private final IEngineService _assetService;
-
-    public FileSystem(IEngineService assetService)
-    {
-        _assetService = assetService;
-    }
-
-    private void initDrives()
-    {
-        m_vDrives = new Vector();
-        File[] arrFile = File.listRoots();
-
-        if (arrFile != null)
-            for (int i = 0; i < arrFile.length; i++)
-            {
-                File objFile = arrFile[i];
-                boolean bFloppy = objFile.getAbsolutePath().startsWith("A:")
-                        || objFile.getAbsolutePath().startsWith("B:");
-                if (!bFloppy)
-                    m_vDrives.addElement(new Drive(this, objFile, _assetService));
-            }
-    }
-
-    public Vector getDrives()
-    {
-        if (m_vDrives == null)
-        {
-            initDrives();
-        }
-        return m_vDrives;
-    }
-
-    public int getChildNumber(Object objChild)
-    {
-        for (int i = 0; i < m_vDrives.size(); i++)
-        {
-            Object objChildDrive = m_vDrives.elementAt(i);
-            if (objChildDrive.equals(objChild))
-            {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
-     */
-    public boolean containsChild(ITreeNode node)
-    {
-        return true;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getAllowsChildren()
-     */
-    public boolean getAllowsChildren()
-    {
-        return true;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildCount()
-     */
-    public int getChildCount()
-    {
-        return getDrives().size();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
-     */
-    public Collection getChildren()
-    {
-        return getDrives();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getParent()
-     */
-    public ITreeNode getParent()
-    {
-        return null;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#isLeaf()
-     */
-    public boolean isLeaf()
-    {
-        return false;
-    }
-
-    /**
-     * @see java.lang.Object#toString()
-     */
-    public String toString()
-    {
-        return getName();
-    }
-
-    public String getName()
-    {
-        return "FileSystem";
-    }
-
-    /**
-     * @see java.lang.Object#equals(Object)
-     */
-    public boolean equals(Object arg0)
-    {
-        if (!(arg0 instanceof FileSystem))
-            return false;
-        FileSystem objFileSystem = (FileSystem) arg0;
-        if (getName().equals(objFileSystem.getName()))
-            return true;
-        return false;
-    }
-
-    /**
-     * @see java.lang.Object#hashCode()
-     */
-    public int hashCode()
-    {
-        return getName().hashCode();
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode#getAbsolutePath()
-     */
-    public String getAbsolutePath()
-    {
-        return "";
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode#getAssets()
-     */
-    public AssetsHolder getAssets()
-    {
-        if (m_objAssetsHolder == null)
-        {
-            m_objAssetsHolder = new AssetsHolder(_assetService,
-                    "/org/apache/tapestry/workbench/tree/examples/fsmodel/computer.gif",
-                    "/org/apache/tapestry/workbench/tree/examples/fsmodel/computer.gif");
-        }
-        return m_objAssetsHolder;
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode#getDate()
-     */
-    public Date getDate()
-    {
-        return null;
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemDataModel.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemDataModel.java
deleted file mode 100644
index a91757a..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemDataModel.java
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.Serializable;
-import java.util.Iterator;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeDataModel;
-
-/**
- * @author ceco
- */
-public class FileSystemDataModel extends SimpleTreeDataModel implements
-        Serializable
-{
-
-    private static final long serialVersionUID = 2384273235598992452L;
-
-    /**
-     * Constructor for FileSystemDataModel.
-     * 
-     * @param objRootNode
-     */
-    public FileSystemDataModel(ITreeNode objRootNode)
-    {
-        super(objRootNode);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getObject(Object)
-     */
-    public Object getObject(Object objUniqueKey)
-    {
-        return findNode(objUniqueKey, (IFileSystemTreeNode) getRoot());
-    }
-
-    private IFileSystemTreeNode findNode(Object objUniqueKey,
-            IFileSystemTreeNode objParentNode)
-    {
-        String strUniqueKey = (String) objUniqueKey;
-        String strParentUniqueKey = objParentNode.getAbsolutePath();
-
-        if (strUniqueKey.equals(strParentUniqueKey)) { return objParentNode; }
-
-        IFileSystemTreeNode obj = null;
-
-        if (strUniqueKey.startsWith(strParentUniqueKey))
-        {
-            for(Iterator iter = objParentNode.getChildren().iterator(); iter
-                    .hasNext();)
-            {
-                IFileSystemTreeNode element = (IFileSystemTreeNode) iter.next();
-                obj = findNode(objUniqueKey, element);
-                if (obj != null)
-                {
-                    break;
-                }
-            }
-        }
-
-        return obj;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getUniqueKey(Object,
-     *      Object)
-     */
-    public Object getUniqueKey(Object objTarget, Object objParentUniqueKey)
-    {
-        IFileSystemTreeNode objNode = (IFileSystemTreeNode) objTarget;
-        return objNode.getAbsolutePath();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#isAncestorOf(Object,
-     *      Object)
-     */
-    public boolean isAncestorOf(Object objChildUniqueKey,
-            Object objParentUniqueKey)
-    {
-        String strChildAbsolutePath = (String) objChildUniqueKey;
-        String strParentAbsolutePath = (String) objParentUniqueKey;
-
-        if ("".equals(strParentAbsolutePath)) { return true; }
-
-        return strChildAbsolutePath.lastIndexOf(strParentAbsolutePath) > -1;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getParentUniqueKey(Object)
-     */
-    public Object getParentUniqueKey(Object objChildUniqueKey)
-    {
-        IFileSystemTreeNode objNode = (IFileSystemTreeNode) getObject(objChildUniqueKey);
-        return objNode.getParent();
-    }
-
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemStateManager.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemStateManager.java
deleted file mode 100644
index 1cdc234..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemStateManager.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeModel;
-import org.apache.tapestry.engine.IEngineService;
-
-/**
- * @author ceco
- */
-public class FileSystemStateManager implements ITreeSessionStateManager
-{
-    private String m_strRootDir;
-
-    private final IEngineService _assetService;
-
-    /**
-     * Constructor for FileSystemStateManager.
-     */
-    public FileSystemStateManager(String strRootDir, IEngineService assetService)
-    {
-        super();
-        m_strRootDir = strRootDir;
-        _assetService = assetService;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getSessionState(ITreeModel)
-     */
-    public Object getSessionState(ITreeModel objModel)
-    {
-        return objModel.getTreeStateModel();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getModel(Object)
-     */
-    public ITreeModel getModel(Object objSessionState)
-    {
-        ITreeStateModel objStateModel = (ITreeStateModel) objSessionState;
-
-        ITreeNode objParent;
-
-        if (m_strRootDir == null || "".equals(m_strRootDir))
-        {
-            objParent = new FileSystem(_assetService);
-        }
-        else
-        {
-            FolderObject objFolder = new FolderObject(null, new File(m_strRootDir), true, _assetService);
-            objFolder.reload();
-            objParent = objFolder;
-        }
-
-        ITreeDataModel objDataModel = new FileSystemDataModel(objParent);
-        ITreeModel objModel = new SimpleTreeModel(objDataModel, objStateModel);
-
-        return objModel;
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FolderObject.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FolderObject.java
deleted file mode 100644
index 76391d9..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/FolderObject.java
+++ /dev/null
@@ -1,180 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Vector;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.engine.IEngineService;
-
-/**
- * 
- * @author unknown
- */
-public class FolderObject extends SFObject
-{
-
-    /**
-     * serialVersionUID.
-     */
-    private static final long serialVersionUID = 1889745019885512018L;
-
-    private static final String openImage = "/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeOpen.gif";
-
-    private static final String closedImage = "/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeClosed.gif";
-    
-    /**
-     * @associates <{File}>
-     * @supplierCardinality 0..*
-     */
-    private Vector m_vFiles = null;
-
-    /**
-     * @associates <{FolderObject}>
-     * @supplierCardinality 0..*
-     */
-    private Vector m_vFolders = null;
-
-    private boolean m_bShared;
-
-    private final IEngineService _assetService;
-
-    public FolderObject(ITreeNode objParent, File objFile, boolean bInvokeInit,
-            IEngineService assetService)
-    {
-        super(objParent, objFile);
-
-        _assetService = assetService;
-
-        if (bInvokeInit)
-            init();
-    }
-
-    public void reload()
-    {
-        m_vFolders = new Vector();
-        m_vFiles = new Vector();
-
-        File[] arrFiles = getFile().listFiles();
-
-        if (arrFiles == null)
-        {
-            return;
-        }
-
-        for (int i = 0; i < arrFiles.length; i++)
-        {
-            if (arrFiles[i].isDirectory())
-            {
-                m_vFolders.addElement(new FolderObject(this, arrFiles[i], true, _assetService));
-            }
-            else
-            {
-                m_vFiles.addElement(new FileObject(this, arrFiles[i], _assetService));
-            }
-        }
-    }
-
-    public boolean isShared()
-    {
-        return m_bShared;
-    }
-
-    public Vector getFolders()
-    {
-        if (m_vFolders == null)
-        {
-            reload();
-        }
-        return m_vFolders;
-    }
-
-    public Vector getFiles()
-    {
-        if (m_vFiles == null)
-        {
-            reload();
-        }
-        return m_vFiles;
-    }
-
-    public int getChildNumber(Object objChild)
-    {
-        for (int i = 0; i < m_vFolders.size(); i++)
-        {
-            Object objChildFolder = m_vFolders.elementAt(i);
-            if (objChildFolder.equals(objChild))
-            {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
-     */
-    public boolean containsChild(ITreeNode node)
-    {
-        return true;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getAllowsChildren()
-     */
-    public boolean getAllowsChildren()
-    {
-        return true;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildCount()
-     */
-    public int getChildCount()
-    {
-        return getFolders().size() + getFiles().size();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
-     */
-    public Collection getChildren()
-    {
-        ArrayList arrChildrens = new ArrayList();
-        arrChildrens.addAll(getFolders());
-        arrChildrens.addAll(getFiles());
-        return arrChildrens;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#isLeaf()
-     */
-    public boolean isLeaf()
-    {
-        return false;
-    }
-
-    public AssetsHolder getAssets()
-    {
-        if (m_objAssetsHolder == null)
-        {
-            m_objAssetsHolder = new AssetsHolder(_assetService, openImage, closedImage);
-        }
-        return m_objAssetsHolder;
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/IFileSystemTreeNode.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/IFileSystemTreeNode.java
deleted file mode 100644
index 488e148..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/IFileSystemTreeNode.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.util.Date;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-/**
- * @author ceco
- */
-public interface IFileSystemTreeNode extends ITreeNode {
-    String getAbsolutePath();
-    AssetsHolder getAssets();
-    Date getDate();
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/NodeRenderFactory.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/NodeRenderFactory.java
deleted file mode 100644
index dc37a86..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/NodeRenderFactory.java
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.asset.PrivateAsset;
-import org.apache.tapestry.contrib.tree.components.INodeRenderFactory;
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-
-/**
- * @author ceco
- */
-public class NodeRenderFactory implements INodeRenderFactory
-{
-
-    /**
-     * Constructor for NodeRenderFactory.
-     */
-    public NodeRenderFactory()
-    {
-        super();
-    }
-
-    public IRender getRenderByID(Object objUniqueKey,
-            ITreeModelSource objTreeModelSource, IRequestCycle objCycle)
-    {
-        Object objValue = objTreeModelSource.getTreeModel().getTreeDataModel()
-                .getObject(objUniqueKey);
-        return getRender(objValue, objTreeModelSource, objCycle);
-    }
-
-    public IRender getRender(Object objValue,
-            ITreeModelSource objTreeModelSource, IRequestCycle objCycle)
-    {
-        return new CFileSystemRender(objValue, objTreeModelSource);
-    }
-
-    /**
-     * 
-     * @author unknown
-     */
-    public class CFileSystemRender implements IRender
-    {
-
-        private Object m_objNode;
-        private ITreeModelSource m_objTreeModelSource;
-
-        public CFileSystemRender(Object objNode,
-                ITreeModelSource objTreeModelSource)
-        {
-            super();
-            m_objNode = objNode;
-            m_objTreeModelSource = objTreeModelSource;
-        }
-
-        public boolean isOpen()
-        {
-            ITreeDataModel objDataModel = m_objTreeModelSource.getTreeModel()
-                    .getTreeDataModel();
-            ITreeStateModel objStateModel = m_objTreeModelSource.getTreeModel()
-                    .getTreeStateModel();
-            Object objUniqueKey = objDataModel.getUniqueKey(m_objNode, null);
-            return objStateModel.isUniqueKeyExpanded(objUniqueKey);
-        }
-
-        public boolean isSelected()
-        {
-            ITreeDataModel objDataModel = m_objTreeModelSource.getTreeModel()
-                    .getTreeDataModel();
-            ITreeStateModel objStateModel = m_objTreeModelSource.getTreeModel()
-                    .getTreeStateModel();
-            Object objUniqueKey = objDataModel.getUniqueKey(m_objNode, null);
-            return objUniqueKey.equals(objStateModel.getSelectedNode());
-        }
-
-        public void render(IMarkupWriter objWriter, IRequestCycle objCycle)
-        {
-            PrivateAsset objAsset = getAsset();
-            objWriter.begin("img");
-            objWriter.attribute("border", "0");
-            objWriter.attribute("src", objAsset.buildURL());
-            objWriter.attribute("valign", "middle");
-            objWriter.end();
-            objWriter.print(" ");
-            objWriter.begin("span");
-            String strClassName = "fsNodeValue";
-            objWriter.attribute("class", strClassName);
-            objWriter.closeTag();
-            objWriter.print(getNode().toString().trim());
-            objWriter.end();
-        }
-
-        public IFileSystemTreeNode getNode()
-        {
-            return (IFileSystemTreeNode) m_objNode;
-        }
-
-        private PrivateAsset getAsset()
-        {
-            PrivateAsset objAsset;
-
-            if (!isOpen())
-            {
-                objAsset = getNode().getAssets().getAssetForCloseNode();
-            }
-            else
-            {
-                objAsset = getNode().getAssets().getAssetForOpenNode();
-            }
-
-            return objAsset;
-        }
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/SFObject.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/SFObject.java
deleted file mode 100644
index 2d5ca37..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/SFObject.java
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Date;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-/**
- * 
- * @author unknown
- */
-public abstract class SFObject implements IFileSystemTreeNode
-{
-
-    protected File m_objFile;
-    protected ITreeNode m_objParent;
-
-    protected transient AssetsHolder m_objAssetsHolder = null;
-
-    private Date m_objDate;
-
-    public SFObject(ITreeNode objParent, File objFile)
-    {
-        m_objParent = objParent;
-        m_objFile = objFile;
-        // init();
-    }
-
-    protected void init()
-    {
-        if (m_objFile.isFile() || m_objFile.isDirectory())
-            m_objDate = new Date(m_objFile.lastModified());
-    }
-
-    public String getName()
-    {
-        if (m_objFile.getName().equals("")) { return m_objFile.toString(); }
-        return m_objFile.getName();
-    }
-
-    public Date getDate()
-    {
-        return m_objDate;
-    }
-
-    public Object getAttributes()
-    {
-        return null;
-    }
-
-    protected File getFile()
-    {
-        return m_objFile;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getParent()
-     */
-    public ITreeNode getParent()
-    {
-        return m_objParent;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
-     */
-    public boolean containsChild(ITreeNode node)
-    {
-        return false;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getAllowsChildren()
-     */
-    public boolean getAllowsChildren()
-    {
-        return false;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildCount()
-     */
-    public int getChildCount()
-    {
-        return 0;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
-     */
-    public Collection getChildren()
-    {
-        return null;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#isLeaf()
-     */
-    public boolean isLeaf()
-    {
-        return false;
-    }
-
-    /**
-     * @see java.lang.Object#equals(Object)
-     */
-    public boolean equals(Object arg0)
-    {
-        if (!(arg0 instanceof SFObject)) { return false; }
-        SFObject objSF = (SFObject) arg0;
-        if (getFile().equals(objSF.getFile())) { return true; }
-        return false;
-    }
-
-    /**
-     * @see java.lang.Object#hashCode()
-     */
-    public int hashCode()
-    {
-        return m_objFile.hashCode();
-    }
-
-    /**
-     * @see java.lang.Object#toString()
-     */
-    public String toString()
-    {
-        return getName();
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode#getAbsolutePath()
-     */
-    public String getAbsolutePath()
-    {
-        return getFile().getAbsolutePath();
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeClosed.gif b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeClosed.gif
deleted file mode 100644
index 6d00bc2..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeClosed.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeOpen.gif b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeOpen.gif
deleted file mode 100644
index def2e5e..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeOpen.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/computer.gif b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/computer.gif
deleted file mode 100644
index 893f9d0..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/computer.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/file.gif b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/file.gif
deleted file mode 100644
index f38828d..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/file.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/harddrive.gif b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/harddrive.gif
deleted file mode 100644
index c4b316b..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/harddrive.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/package.html b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/package.html
deleted file mode 100644
index d9d5558..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/fsmodel/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Components
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/package.html b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/package.html
deleted file mode 100644
index dac6c8a..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/tree/examples/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Sample model
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java
deleted file mode 100644
index 3597185..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/upload/Upload.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.upload;
-
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.request.IUploadFile;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-/**
- * Contains a form, including an {@link org.apache.tapestry.form.Upload}component.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Upload extends BasePage
-{
-    private static final String[] bytesPerLineOptions = new String[]
-    { "8", "16", "24", "32", "40", "48" };
-
-    private IPropertySelectionModel bplModel;
-
-    public abstract IUploadFile getFile();
-
-    public abstract boolean isShowAscii();
-
-    public abstract String getBytesPerLine();
-
-    public abstract IValidationDelegate getDelegate();
-    
-    @InjectPage("UploadResults")
-    public abstract UploadResults getUploadResults();
-
-    public void doSubmit()
-    {
-        IUploadFile file = getFile();
-
-        UploadResults results = getUploadResults();
-
-        results.activate(file, isShowAscii(), Integer.parseInt(getBytesPerLine()));
-    }
-
-    public IPropertySelectionModel getBytesPerLineModel()
-    {
-        if (bplModel == null)
-            bplModel = new StringPropertySelectionModel(bytesPerLineOptions);
-
-        return bplModel;
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/upload/UploadResults.java b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/upload/UploadResults.java
deleted file mode 100644
index 4f95ae6..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/upload/UploadResults.java
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.upload;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.io.Writer;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.request.IUploadFile;
-import org.apache.tapestry.util.io.BinaryDumpOutputStream;
-
-/**
- * Displays the uploaded file as a hexadecimal dump.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class UploadResults extends BasePage
-{
-
-    public abstract void setFile(IUploadFile file);
-
-    public abstract void setFileDump(String fileDump);
-
-    public void activate(IUploadFile file, boolean showAscii, int bytesPerLine)
-    {
-        setFile(file);
-
-        StringWriter writer = null;
-        BinaryDumpOutputStream out = null;
-        InputStream in = null;
-
-        try
-        {
-            in = file.getStream();
-
-            writer = new StringWriter();
-            out = new BinaryDumpOutputStream(writer);
-
-            out.setShowAscii(showAscii);
-            out.setBytesPerLine(bytesPerLine);
-
-            byte[] buffer = new byte[1000];
-
-            while(true)
-            {
-                int length = in.read(buffer);
-
-                if (length < 0) break;
-
-                out.write(buffer, 0, length);
-            }
-
-            in.close();
-            in = null;
-
-            out.close();
-            out = null;
-
-            setFileDump(writer.getBuffer().toString());
-
-            writer.close();
-            writer = null;
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException("Unable to display file.",
-                    this, null, ex);
-        }
-        finally
-        {
-            close(in);
-            close(out);
-            close(writer);
-        }
-
-        getRequestCycle().activate(this);
-    }
-
-    private void close(InputStream stream)
-    {
-        if (stream != null)
-        {
-            try
-            {
-                stream.close();
-            }
-            catch (IOException ex)
-            {
-            }
-        }
-    }
-
-    private void close(OutputStream stream)
-    {
-        if (stream != null)
-        {
-            try
-            {
-                stream.close();
-            }
-            catch (IOException ex)
-            {
-            }
-        }
-    }
-
-    private void close(Writer writer)
-    {
-        if (writer != null)
-        {
-            try
-            {
-                writer.close();
-            }
-            catch (IOException ex)
-            {
-            }
-        }
-    }
-}
diff --git a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/upload/package.html b/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/upload/package.html
deleted file mode 100644
index 21bbd40..0000000
--- a/tapestry/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/upload/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Upload examples
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-examples/Workbench/src/site/site.xml b/tapestry/tapestry-examples/Workbench/src/site/site.xml
deleted file mode 100644
index 57ecf91..0000000
--- a/tapestry/tapestry-examples/Workbench/src/site/site.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<project name="Tapestry">
-    <bannerLeft>
-        <name>Tapestry Web Application Framework</name>
-        <href>http://tapestry.apache.org/</href>
-        <src>images/tapestry_banner.gif</src>
-    </bannerLeft>
-    <bannerRight>
-        <name>Apache Software Foundation</name>
-        <href>http://www.apache.org</href>
-        <src>images/asf_logo_wide.gif</src>
-    </bannerRight>
-    
-    <skin>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>maven-skin</artifactId>
-        <version>1.1</version>
-    </skin>
-    
-    <publishDate format="dd MMM yyyy" />
-    
-    <body>
-        <links>
-            <item name="Tapestry" href="http://tapestry.apache.org/" />
-            <item name="Hivemind" href="http://jakarta.apache.org/hivemind/" />
-            <item name="Apache" href="http://www.apache.org/" />
-        </links>
-        
-        <head>
-            <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
-            <script type="text/javascript">_uacct = "UA-400821-1"; urchinTracker();</script>
-            <link rel="shortcut icon" href="http://tapestry.apache.org/tapestry4.1/favicon.ico" />
-        </head>
-        
-        <menu ref="parent" />
-        
-        ${reports} 
-    </body>
-    
-</project>
diff --git a/tapestry/tapestry-examples/Workbench/src/test/README.txt b/tapestry/tapestry-examples/Workbench/src/test/README.txt
deleted file mode 100644
index c3b6e9f..0000000
--- a/tapestry/tapestry-examples/Workbench/src/test/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-A placeholder.  The HiveBuild macros currently expect there to be a src/test even if the module contains no tests.
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/pom.xml b/tapestry/tapestry-examples/pom.xml
deleted file mode 100644
index 9f8549b..0000000
--- a/tapestry/tapestry-examples/pom.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-examples</artifactId>
-    <packaging>pom</packaging>
-    <version>4.1.3</version>
-    <!-- This should change to tapestry-project -->
-    <parent>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>tapestry-project</artifactId>
-        <version>4.1.3</version>
-    </parent>
-    <name>Examples</name>
-    <inceptionYear>2006</inceptionYear>
-
-    <modules>
-        <module>TimeTracker</module>
-        <module>Workbench</module>
-    </modules>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.apache.tapestry</groupId>
-                <artifactId>tapestry-framework</artifactId>
-                <version>4.1.3</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.tapestry</groupId>
-                <artifactId>tapestry-annotations</artifactId>
-                <version>4.1.3</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.tapestry</groupId>
-                <artifactId>tapestry-contrib</artifactId>
-                <version>4.1.3</version>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-    <build>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>2.0.2</version>
-                    <inherited>true</inherited>
-                    <configuration>
-                        <source>1.5</source>
-                        <target>1.5</target>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-    <reporting>
-        <outputDirectory>../target/site/tapestry-examples</outputDirectory>
-    </reporting>
-</project>
diff --git a/tapestry/tapestry-examples/src/site/site.xml b/tapestry/tapestry-examples/src/site/site.xml
deleted file mode 100644
index 57ecf91..0000000
--- a/tapestry/tapestry-examples/src/site/site.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<project name="Tapestry">
-    <bannerLeft>
-        <name>Tapestry Web Application Framework</name>
-        <href>http://tapestry.apache.org/</href>
-        <src>images/tapestry_banner.gif</src>
-    </bannerLeft>
-    <bannerRight>
-        <name>Apache Software Foundation</name>
-        <href>http://www.apache.org</href>
-        <src>images/asf_logo_wide.gif</src>
-    </bannerRight>
-    
-    <skin>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>maven-skin</artifactId>
-        <version>1.1</version>
-    </skin>
-    
-    <publishDate format="dd MMM yyyy" />
-    
-    <body>
-        <links>
-            <item name="Tapestry" href="http://tapestry.apache.org/" />
-            <item name="Hivemind" href="http://jakarta.apache.org/hivemind/" />
-            <item name="Apache" href="http://www.apache.org/" />
-        </links>
-        
-        <head>
-            <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
-            <script type="text/javascript">_uacct = "UA-400821-1"; urchinTracker();</script>
-            <link rel="shortcut icon" href="http://tapestry.apache.org/tapestry4.1/favicon.ico" />
-        </head>
-        
-        <menu ref="parent" />
-        
-        ${reports} 
-    </body>
-    
-</project>
diff --git a/tapestry/tapestry-examples/wap/.cvsignore b/tapestry/tapestry-examples/wap/.cvsignore
deleted file mode 100644
index d366d2e..0000000
--- a/tapestry/tapestry-examples/wap/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-classes
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/animate/Home.page b/tapestry/tapestry-examples/wap/context/WEB-INF/animate/Home.page
deleted file mode 100644
index 9270a49..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/animate/Home.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-    <context-asset name="first" path="images/img1.wbmp"/>
-    <context-asset name="second" path="images/img2.wbmp"/>
-    <context-asset name="third" path="images/img3.wbmp"/>
-    <context-asset name="fourth" path="images/img4.wbmp"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/animate/animate.application b/tapestry/tapestry-examples/wap/context/WEB-INF/animate/animate.application
deleted file mode 100644
index e0b5646..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/animate/animate.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application name="Animate Wap Example" engine-class="org.apache.tapestry.wml.WMLEngine">
-
-    <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-    <library id="wml" specification-path="/org/apache/tapestry/wml/WML.library"/>
-
-</application>
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/hello/Hello.page b/tapestry/tapestry-examples/wap/context/WEB-INF/hello/Hello.page
deleted file mode 100644
index 0c70169..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/hello/Hello.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wap.hello.Hello">
-    <property-specification name="username" type="java.lang.String" persistent="no" initial-value="null"/>
-</page-specification>
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/hello/Home.page b/tapestry/tapestry-examples/wap/context/WEB-INF/hello/Home.page
deleted file mode 100644
index be9a4e0..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/hello/Home.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wap.hello.Home">
-    <property-specification name="username" type="java.lang.String" persistent="yes" initial-value="null"/>
-</page-specification>
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/hello/hello.application b/tapestry/tapestry-examples/wap/context/WEB-INF/hello/hello.application
deleted file mode 100644
index 761830c..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/hello/hello.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application name="Hello World Wap Example" engine-class="org.apache.tapestry.wml.WMLEngine">
-
-    <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-    <library id="wml" specification-path="/org/apache/tapestry/wml/WML.library"/>
-
-</application>
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/Home.page b/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/Home.page
deleted file mode 100644
index ccac6e9..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/Home.page
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wap.quiz.Home">
-
-    <component id="username" type="wml:Postfield">
-        <binding name="value" expression="username"/>
-        <binding name="name" expression="components.userInput.name"/>
-    </component>
-
-    <component id="level" type="wml:SelectionField">
-        <binding name="value" expression="level"/>
-        <binding name="model" expression="components.selectLevel.model"/>
-        <binding name="name" expression="components.selectLevel.name"/>
-    </component>
-
-    <component id="userInput" type="wml:Input">
-        <static-binding name="name">username</static-binding>
-        <binding name="value" expression="username"/>
-    </component>
-
-    <component id="selectLevel" type="wml:PropertySelection">
-        <static-binding name="name">level</static-binding>
-        <binding name="model" expression="@org.apache.tapestry.wap.quiz.Home@LEVEL_MODEL"/>
-    </component>
-
-    <component id="go" type="wml:Go">
-        <binding name="stateful" expression="false"/>
-        <binding name="listener" expression="listeners.start"/>
-    </component>
-
-    <context-asset name="logo" path="images/logo.wbmp"/>
-
-    <property-specification name="username" type="java.lang.String" persistent="yes"/>
-    <property-specification name="level" type="java.lang.String" persistent="yes" initial-value='"easy"'/>
-
-</page-specification>
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/Quiz.page b/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/Quiz.page
deleted file mode 100644
index 6e8c70b..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/Quiz.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wap.quiz.Quiz">
-
-    <property-specification name="question" type="java.util.Map" persistent="yes" initial-value="null"/>
-
-    <property-specification name="choice" type="int" persistent="no"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/Scores.page b/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/Scores.page
deleted file mode 100644
index 835fac8..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/Scores.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wap.quiz.Scores">
-
-    <property-specification name="newHighscore" type="boolean" persistent="no" initial-value="false"/>
-    <property-specification name="highscores" type="java.util.List" persistent="no" initial-value="null"/>
-    <property-specification name="highscore" type="java.util.Map" persistent="no"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/easyquestions.txt b/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/easyquestions.txt
deleted file mode 100644
index d4dde1e..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/easyquestions.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Spiders can regrow missing legs.;1;true;false
-Elk can't swim.;2;true;false
-African elephants are bigger than Indian.;2;false;true
-Tigers are the biggest cat in the world.;1;true;false
-Where do penguins mainly live?;2;The Arctic;The Antarctic
-Baboons travel mostly alone.;2;true;false
-Moles live in trees.;2;true;false
-Bats use a kind of sonar to find food.;1;true;false
-Some snakes have ear lobes.;2;true;false
-A dolphin sleeps only with half a brain at a time.;1;true;false
-Stingray is a kind of bee.;2;true;false
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/hardquestions.txt b/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/hardquestions.txt
deleted file mode 100644
index 1bb971a..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/hardquestions.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-How many months does an elephant's pregnancy last?;3;9;13;22;25
-How many teeth can a shark grow in a lifetime?;4;24;240;2400;24000
-How many species of fish are there?;1;20000;50000;200000
-What was the biggest dinosaur?;3;Compsognathus;Mussaurus;Brachiosaurus
-What's a baby elephant called?;3;A cup;A fawn;A calf
-What is the Okapi's only natural enemy?;2;Lion;Leopard;Wolf
-Where does the platypus live?;2;Austria;Australia;Brazil
-What is a tuatara?;1;Reptile;Mammal;Bird;Fish
-In the wild, where do flamingos get their red colour?;2;Red algae;Blue-green algae;Waterlilies
-What's a baby beaver called?;1;A kit;A pup;A bijou
-
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/mediumquestions.txt b/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/mediumquestions.txt
deleted file mode 100644
index bfd7496..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/mediumquestions.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Beaver's teeth grow continuously.;1;true;false
-How many Amur Tigers live in the wild?;2;100;200;1000
-How many polar bears are there worldwide?;3;1500;11000;28000
-What's a young lion called?;1;A cub;A calf;A fawn
-How many different breeds of dogs are there?;3;40;120;140
-Both male and female reindeer have antlers.;1;true;false
-Penguins fall over when they watch flying aeroplanes.;2;true;false
-What does a herbivore eat?;2;Meat;Plants;Fish
-Where do tigers live?;3;South America;Africa;Asia
-The noise a sea lion makes sounds like:;2;Lion's roar;Dog's bark;Cat's miaow
-
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/quiz.application b/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/quiz.application
deleted file mode 100644
index 64160ac..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/quiz/quiz.application
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application name="Quiz Wap Example" engine-class="org.apache.tapestry.wml.WMLEngine">
-
-    <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-    <property name="org.apache.tapestry.global-class" value="org.apache.tapestry.wap.quiz.Global"/>
-
-    <property name="org.apache.tapestry.visit-class" value="org.apache.tapestry.wap.quiz.Visit"/>
-
-    <library id="wml" specification-path="/org/apache/tapestry/wml/WML.library"/>
-
-</application>
diff --git a/tapestry/tapestry-examples/wap/context/WEB-INF/web.xml b/tapestry/tapestry-examples/wap/context/WEB-INF/web.xml
deleted file mode 100644
index 06b0d1f..0000000
--- a/tapestry/tapestry-examples/wap/context/WEB-INF/web.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
- "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
-<web-app>
-  
-	<display-name>Tapestry WAP Examples</display-name>
-	 
-	<servlet>
-		<servlet-name>hello</servlet-name>
-        <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-	</servlet>
-
-     <servlet>
-        <servlet-name>animate</servlet-name>
-        <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-    </servlet>
-
-     <servlet>
-        <servlet-name>quiz</servlet-name>
-        <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-        <init-param>
-            <param-name>easyquestionsfile</param-name>
-            <param-value>easyquestions.txt</param-value>
-        </init-param>
-         <init-param>
-            <param-name>mediumquestiosfile</param-name>
-            <param-value>mediumquestions.txt</param-value>
-        </init-param>
-        <init-param>
-            <param-name>hardquestionsfile</param-name>
-            <param-value>hardquestions.txt</param-value>
-        </init-param>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>hello</servlet-name>
-        <url-pattern>/hello/app</url-pattern>
-   </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>animate</servlet-name>
-        <url-pattern>/animate/app</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>quiz</servlet-name>
-        <url-pattern>/quiz/app</url-pattern>
-    </servlet-mapping>
-
-    <mime-mapping>
-        <extension>wml</extension>
-        <mime-type>text/vnd.wap.wml</mime-type>
-    </mime-mapping>
-
-    <mime-mapping>
-        <extension>wmls</extension>
-        <mime-type>text/vnd.wap.wmlscript</mime-type>
-    </mime-mapping>
-
-    <mime-mapping>
-        <extension>wbmp</extension>
-        <mime-type>image/vnd.wap.wbmp</mime-type>
-    </mime-mapping>
-
-	<welcome-file-list>
-        <welcome-file>index.wml</welcome-file>
-	</welcome-file-list>
-</web-app>
diff --git a/tapestry/tapestry-examples/wap/context/animate/Home.wml b/tapestry/tapestry-examples/wap/context/animate/Home.wml
deleted file mode 100644
index 6f9de93..0000000
--- a/tapestry/tapestry-examples/wap/context/animate/Home.wml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-
-    <template>
-        <do type="accept" label="Back">
-            <go href="../index.wml"></go>
-        </do>
-    </template>
-
-    <card id="img1" ontimer="#img2" title="">
-        <timer value="5"/>
-        <p align="center">
-            <img jwcid="@wml:Image" image="ognl:assets.first" alt="img1" align="middle"/>
-        </p>
-    </card>
-
-    <card id="img2" ontimer="#img3" title="">
-        <timer value="5"/>
-        <p align="center">
-            <br/>
-            <img jwcid="@wml:Image" image="ognl:assets.second" alt="img2" align="middle"/>
-        </p>
-    </card>
-
-    <card id="img3" ontimer="#img4" title="">
-        <timer value="5"/>
-
-        <p align="center">
-            <br/>
-            <img jwcid="@wml:Image" image="ognl:assets.third" alt="img3" align="middle"/>
-
-        </p>
-    </card>
-
-    <card id="img4" ontimer="#tapestry" title="">
-        <timer value="5"/>
-
-        <p align="center">
-            <br/>
-            <img jwcid="@wml:Image" image="ognl:assets.fourth" alt="img4" align="middle"/>
-
-
-        </p>
-    </card>
-
-    <card id="tapestry" ontimer="#img1" title="Tapestry Mobile">
-        <timer value="5"/>
-
-        <p align="center">
-            <br/>
-            Tapestry
-        </p>
-    </card>
-
-</wml>
-
diff --git a/tapestry/tapestry-examples/wap/context/animate/images/img1.wbmp b/tapestry/tapestry-examples/wap/context/animate/images/img1.wbmp
deleted file mode 100644
index a1f252a..0000000
--- a/tapestry/tapestry-examples/wap/context/animate/images/img1.wbmp
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/wap/context/animate/images/img2.wbmp b/tapestry/tapestry-examples/wap/context/animate/images/img2.wbmp
deleted file mode 100644
index 7f0b19f..0000000
--- a/tapestry/tapestry-examples/wap/context/animate/images/img2.wbmp
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/wap/context/animate/images/img3.wbmp b/tapestry/tapestry-examples/wap/context/animate/images/img3.wbmp
deleted file mode 100644
index ae1a608..0000000
--- a/tapestry/tapestry-examples/wap/context/animate/images/img3.wbmp
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/wap/context/animate/images/img4.wbmp b/tapestry/tapestry-examples/wap/context/animate/images/img4.wbmp
deleted file mode 100644
index 7f0b19f..0000000
--- a/tapestry/tapestry-examples/wap/context/animate/images/img4.wbmp
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/wap/context/hello/Hello.wml b/tapestry/tapestry-examples/wap/context/hello/Hello.wml
deleted file mode 100644
index b1dd8bc..0000000
--- a/tapestry/tapestry-examples/wap/context/hello/Hello.wml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-    <template>
-        <do type="accept" label="Index">
-            <go href="../index.wml" />
-        </do>
-    </template>
-
-	<card id="Welcome" title="Welcome">
-		<p>
-            Hello <b jwcid="@Insert" value="ognl:username">John Doe</b>
-	    </p>
-	</card>
-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/wap/context/hello/Home.wml b/tapestry/tapestry-examples/wap/context/hello/Home.wml
deleted file mode 100644
index da7d61a..0000000
--- a/tapestry/tapestry-examples/wap/context/hello/Home.wml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-    <template>
-        <do type="prev" label="Back">
-            <prev/>
-        </do>
-    </template>
-
-    <card id="Hello" title="Hello">
-        <onevent type="onenterforward">
-            <refresh>
-                <setvar jwcid="@wml:Setvar" name="username" value="ognl:username"/>
-            </refresh>
-        </onevent>
-        <p>
-            What is your name?
-            <input jwcid="userInput@wml:Input" name="username" value="ognl:username"/>
-        </p>
-        <do type="accept" label="Accept">
-            <go jwcid="go@wml:Go" stateful="ognl:false" listener="listener:submit">
-                <postfield jwcid="username@wml:Postfield" name="ognl:components.userInput.name" value="ognl:username"/>
-            </go>
-        </do>
-    </card>
-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-examples/wap/context/index.wml b/tapestry/tapestry-examples/wap/context/index.wml
deleted file mode 100644
index 0423d23..0000000
--- a/tapestry/tapestry-examples/wap/context/index.wml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<!-- $Id$ -->
-<wml>
-    <card id="main" title="Tapestry Wap Examples">
-        <p>
-            <b>
-                <a href="hello/app">Hello World</a>
-            </b>
-            <br/>
-            <b>
-                <a href="animate/app">Animate</a>
-            </b>
-            <br/>
-            <b>
-                <a href="quiz/app">Quiz</a>
-            </b>
-        </p>
-    </card>
-</wml>
diff --git a/tapestry/tapestry-examples/wap/context/quiz/Home.wml b/tapestry/tapestry-examples/wap/context/quiz/Home.wml
deleted file mode 100644
index 12af76e..0000000
--- a/tapestry/tapestry-examples/wap/context/quiz/Home.wml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-
-<!-- Animal Quiz game home page. -->
-
-<wml>
-
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-    <!-- Provides a way back using the prev element -->
-    <template>
-        <do type="prev">
-            <prev/>
-        </do>
-    </template>
-
-    <!-- First card shows the zoo logo -->
-    <card id="card0" title="Animal QUIZ" ontimer="#card1" newcontext="true">
-        <timer name="t" value="20"/>
-        <p align="center">
-            <br/>
-            <img jwcid="@wml:Image" image="ognl:assets.logo" alt="WMLZoo"/>
-            <br/>
-            <strong>Animal QUIZ</strong>
-            <br/>
-        </p>
-    </card>
-
-    <!-- Second card asks the user name and difficulty level. Start the game! -->
-    <card id="card1" title="Animal QUIZ" newcontext="true">
-        <p>Welcome!
-            <br/>
-            Your name:
-            <input jwcid="userInput" name="username" title="Your name" value=""/>
-        </p>
-        <p>
-            Difficulty:
-            <b jwcid="selectLevel"/>
-        </p>
-        <p>
-            <do type="help" label="Instructions">
-                <go href="#help"/>
-            </do>
-            <do type="options" label="Zoo home">
-                <go jwcid="@ServiceLink" service="ognl:@org.apache.tapestry.Tapestry@HOME_SERVICE" renderer="ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE" href=""/>
-            </do>
-        </p>
-        <p>
-           <anchor title="Start">Start
-                <go jwcid="go">
-                    <postfield jwcid="username" name="username" value="username"/>
-                    <postfield jwcid="level" name="level" value="level"/>
-                </go>
-            </anchor>
-            <br/>
-            <anchor title="Instructions">Instructions
-                <go href="#help"/>
-            </anchor>
-        </p>
-    </card>
-
-    <!-- Instructions -->
-
-    <card id="help" title="Instructions">
-        <p>The quiz will test your knowledge about the world of animals. There are
-            "easy", "medium" and "hard" questions. For each correct
-            answer to an easy question you receive one point, a medium question two points, and a hard
-            question three points. The questions will become more difficult as you go along.
-            You can also select the starting difficulty level.
-            After the first wrong answer the game will end. Good luck!</p>
-    </card>
-
-</wml>
diff --git a/tapestry/tapestry-examples/wap/context/quiz/Quiz.wml b/tapestry/tapestry-examples/wap/context/quiz/Quiz.wml
deleted file mode 100644
index acd959a..0000000
--- a/tapestry/tapestry-examples/wap/context/quiz/Quiz.wml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-
-<wml>
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-    <!-- This card displays a question and gives a list of alternative answers -->
-    <card id="main" jwcid="@wml:Card" title='ognl:(questionNumber + 1) + "/" + visit.numberOfQuestions + ", " + visit.level'>
-        <onevent type="onenterforward">
-            <refresh>
-                <setvar jwcid="@wml:Setvar" name="choice" value='ognl:"God".equals(visit.username) ? question.answer : 0'/>
-            </refresh>
-        </onevent>
-        <p> <p jwcid="@Insert" value="ognl:question.question"/>
-            <select jwcid="selection@wml:PropertySelection" name="choice" model="ognl:choiceModel"/>
-            <br/>
-            <anchor title="Ok">Ok
-                <go jwcid="go@wml:Go" listener="listener:process" href="">
-                    <postfield jwcid="choice@wml:Postfield" name="ognl:components.selection.name" value="ognl:choice"/>
-                </go>
-            </anchor>
-            <br/>
-            Your points: <p jwcid="@Insert" value="ognl:visit.points"/>
-            <br/>
-            <do type="prev" label="Start again">
-                <go jwcid="@ServiceLink" service="ognl:@org.apache.tapestry.Tapestry@HOME_SERVICE" renderer="ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE" href=""/>
-            </do>
-        </p>
-    </card>
-</wml>
-
diff --git a/tapestry/tapestry-examples/wap/context/quiz/Scores.wml b/tapestry/tapestry-examples/wap/context/quiz/Scores.wml
deleted file mode 100644
index e964611..0000000
--- a/tapestry/tapestry-examples/wap/context/quiz/Scores.wml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-
-<wml>
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-	<!-- High scores are printed into a card -->
-	<card id="main" title="Scores">
-        <p>
-            Points: <p jwcid="@Insert" value="ognl:visit.points"/>
-            <p jwcid="@If" condition="ognl:newHighscore">
-                <p jwcid="@Insert" value="New highscore!"/>
-            </p>
-            <br/>
-            Top <p jwcid="@Insert" value="ognl:highscores.size"/>:<br/>
-            <p jwcid="@Foreach" source="ognl:highscores" value="ognl:highscore">
-                <p jwcid="@Insert" value='ognl:highscore.name + "->" + highscore.score'/><br/>
-            </p>
-        </p>
-        <do type="prev" label="Start again">
-            <go jwcid="@ServiceLink" service="ognl:@org.apache.tapestry.Tapestry@HOME_SERVICE" renderer="ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE" href=""/>
-        </do>
-	</card>
-
-</wml>
-
diff --git a/tapestry/tapestry-examples/wap/context/quiz/images/logo.wbmp b/tapestry/tapestry-examples/wap/context/quiz/images/logo.wbmp
deleted file mode 100644
index bde9575..0000000
--- a/tapestry/tapestry-examples/wap/context/quiz/images/logo.wbmp
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-examples/wap/jetty.xml b/tapestry/tapestry-examples/wap/jetty.xml
deleted file mode 100644
index 8f86697..0000000
--- a/tapestry/tapestry-examples/wap/jetty.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"  encoding="ISO-8859-1"?> 
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE Configure PUBLIC
-	"-//Mort Bay Consulting//DTD Configure 1.2//EN"
-	"http://jetty.mortbay.org/configure_1_2.dtd">
-
-<Configure class="org.mortbay.jetty.Server">
-
-  <Call name="addListener">
-    <Arg>
-      <New class="org.mortbay.http.SocketListener">
-        <Set name="Port">8080</Set>
-        <Set name="MinThreads">1</Set>
-        <Set name="MaxThreads">10</Set>
-        <Set name="MaxIdleTimeMs">50000</Set>
-      </New>
-    </Arg>
-  </Call>
-
-  
-  <Call name="addWebApplication">
-    <Arg>/wap</Arg>
-    <Arg>context</Arg>
-    <Set name="DefaultsDescriptor">../../config/webdefault.xml</Set>
-  </Call>
-  
-  <Call name="addContext">
-    <Arg>/</Arg>   
-    <Set name="realmName">Jetty Demo Realm</Set>
-   
-    <Call name="addServlet">
-      <Arg>Admin</Arg>
-      <Arg>/</Arg>
-      <Arg>org.mortbay.servlet.AdminServlet</Arg>
-    </Call>
-    
-    <Call name="setAttribute">
-      <Arg>org.mortbay.http.HttpServer</Arg>
-      <Arg><Call name="getHttpServer"/></Arg>
-    </Call>
-  </Call>    
-</Configure>
diff --git a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/hello/Hello.java b/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/hello/Hello.java
deleted file mode 100644
index 54988ec..0000000
--- a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/hello/Hello.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.hello;
-
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public abstract class Hello extends Deck
-{
-    public abstract String getUsername();
-    public abstract void setUsername(String username);
-
-}
diff --git a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/hello/Home.java b/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/hello/Home.java
deleted file mode 100644
index f705938..0000000
--- a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/hello/Home.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.hello;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public abstract class Home extends Deck {
-		
-	public void submit(IRequestCycle cycle)
-	{
-        Hello helloDeck = (Hello) cycle.getPage("Hello");
-        helloDeck.setUsername(getUsername());
-		cycle.activate(helloDeck);
-	}
-	
-	public abstract String getUsername();
-	public abstract void setUsername(String username);
-}
diff --git a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Global.java b/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Global.java
deleted file mode 100644
index 7cadb88..0000000
--- a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Global.java
+++ /dev/null
@@ -1,277 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.quiz;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Serializable;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.ApplicationServlet;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.resource.ContextResource;
-import org.apache.tapestry.util.StringSplitter;
-
-/**
- *  Global object for the Quiz application.
- *  This class has the following responsabilities:
- *  <ul>
- *  <li>Read questions from the specified files</li>
- *  <li>Provide questions by index</li>
- *  <li>Keep high scores in memory</li>
- *  </ul>
- *
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public class Global implements Serializable
-{
-    private boolean init = false;
-
-    private int points[];
-    private String names[];
-
-    private static final List easyQuestions = new ArrayList();
-    private static final List mediumQuestions = new ArrayList();
-    private static final List hardQuestions = new ArrayList();
-
-    public static final int EASY_QUESTIONS = 1;
-    public static final int MEDIUM_QUESTIONS = 2;
-    public static final int HARD_QUESTIONS = 3;
-
-    public static final String EASY_LEVEL = "easy";
-    public static final String MEDIUM_LEVEL = "medium";
-    public static final String HARD_LEVEL = "hard";
-
-    public static final String QUESTION_KEY = "question";
-    public static final String ANSWER_KEY = "answer";
-    public static final String CHOICES_KEY = "choices";
-
-    public List getHighscores()
-    {
-        List result = new ArrayList();
-        for (int i = 0; i < 9; i++)
-        {
-            String name = names[i];
-            if (!"nobody".equals(name))
-            {
-                Map map = new HashMap();
-                map.put("name", name);
-                map.put("score", new Integer(points[i]));
-                result.add(map);
-            }
-        }
-        return result;
-    }
-
-    /**
-     *  Checks if score is high scores
-     **/
-    public boolean isHighscore(int score)
-    {
-        return (score >= points[9]);
-    }
-
-    /**
-     *  Checks if score is a new high score
-     **/
-    public boolean isNewHighscore(int score)
-    {
-        return (score > points[9]);
-    }
-
-    /**
-     *  Adds score/name to the highscore table,
-     *  returns position in highscore table or -1 if no highscore
-     **/
-    public int addHighscore(int score, String name)
-    {
-        int i = -1;
-        if (isNewHighscore(score))
-        {
-            for (i = 0; i <= 9; i++)
-            {
-                if (score > points[i])
-                    break;
-            }
-            for (int j = 9; j >= i + 1; j--)
-            {
-                points[j] = points[j - 1];
-                names[j] = names[j - 1];
-            }
-            points[i] = score;
-            names[i] = name;
-        }
-        return i;
-    }
-
-    /**
-     * "getQuestionSet" method returns a number representing the right difficulty setting.
-     *
-     * @param level an <code>String</code> value
-     * @return an <code>int</code> value
-     */
-    public int getQuestionSet(String level)
-    {
-        if (HARD_LEVEL.equals(level))
-            return HARD_QUESTIONS;
-        if (MEDIUM_LEVEL.equals(level))
-            return MEDIUM_QUESTIONS;
-        return EASY_QUESTIONS;
-    }
-
-    /**
-     * "getQuestion" method returns a String that contains the question, the alternatives and the correct answer.
-     *
-     * @param questionToBeAsked an <code>int</code> value
-     * @param questionSet an <code>int</code> value
-     * @return a <code>String</code> value
-     */
-    public Map getQuestion(int questionToBeAsked, int questionSet)
-    {
-        String line;
-        List list;
-
-        switch (questionSet)
-        {
-            case EASY_QUESTIONS :
-                list = easyQuestions;
-                break;
-            case MEDIUM_QUESTIONS :
-                list = mediumQuestions;
-                break;
-            default :
-                list = hardQuestions;
-                break;
-        }
-        line = (String) list.get(questionToBeAsked);
-        StringSplitter splitter = new StringSplitter(';');
-        String[] result = splitter.splitToArray(line);
-        HashMap map = new HashMap();
-        map.put(QUESTION_KEY, result[0]);
-        int answer = Integer.parseInt(result[1]) - 1;
-        map.put(ANSWER_KEY, new Integer(answer));
-        int length = result.length - 2;
-        String[] choices = new String[length];
-        System.arraycopy(result, 2, choices, 0, length);
-        map.put(CHOICES_KEY, choices);
-        return map;
-    }
-
-    /**
-     * "getNumberOfQuestions" method returns the number of questions (Strings) in the questions table that is used.
-     *
-     * @param questionSet an <code>int</code> value
-     * @return an <code>int</code> value
-     */
-    public int getNumberOfQuestions(int questionSet)
-    {
-        switch (questionSet)
-        {
-            case EASY_QUESTIONS :
-                return easyQuestions.size();
-            case MEDIUM_QUESTIONS :
-                return mediumQuestions.size();
-            default :
-                return hardQuestions.size();
-        }
-    }
-
-    public void initialize(IRequestCycle cycle)
-    {
-        if (!init)
-        {
-            RequestContext requestContext = cycle.getRequestContext();
-            ApplicationServlet servlet = requestContext.getServlet();
-            ServletContext context = servlet.getServletContext();
-            IPropertySource propertySource = cycle.getEngine().getPropertySource();
-
-            Resource webInfLocation = new ContextResource(context, "/WEB-INF/");
-
-            Resource webInfAppLocation =
-                webInfLocation.getRelativeResource(servlet.getServletName() + "/");
-
-            readQuestions(
-                easyQuestions,
-                webInfAppLocation,
-                propertySource.getPropertyValue("easyquestionsfile"));
-            readQuestions(
-                mediumQuestions,
-                webInfAppLocation,
-                propertySource.getPropertyValue("mediumquestiosfile"));
-            readQuestions(
-                hardQuestions,
-                webInfAppLocation,
-                propertySource.getPropertyValue("hardquestionsfile"));
-            points = new int[10];
-            names = new String[10];
-            for (int i = 0; i <= 9; i++)
-            {
-                points[i] = 0;
-                names[i] = "nobody";
-            }
-            init = true;
-        }
-    }
-
-    /**
-     * This method reads the questions from the appropriate file to the appropriate Vector.
-     *
-     * @param questions a <code>Vector</code> value
-     * @param questionsFile a <code>String</code> value
-     * @exception java.io.IOException if an error occurs
-     */
-    private void readQuestions(List questions, String questionsFile) throws IOException
-    {
-        BufferedReader reader = null;
-        String line;
-        reader = new BufferedReader(new FileReader(questionsFile));
-        while ((line = reader.readLine()) != null)
-        {
-            if (line.trim().equals(""))
-                break;
-            questions.add(line);
-        }
-    }
-
-    private void readQuestions(List questions, Resource folder, String filename)
-    {
-        Resource resource = folder.getRelativeResource(filename);
-
-        URL url = resource.getResourceURL();
-
-        try
-        {
-            readQuestions(questions, url.getFile());
-        }
-        catch (IOException e)
-        {
-            e.printStackTrace(System.err);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Home.java b/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Home.java
deleted file mode 100644
index fe8f7c6..0000000
--- a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Home.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.quiz;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  Home deck for the Quiz application.
- *
- *  Quiz application is a game that is run on a server that people can connect to using a WAP phone.
- *  The game is highly customizable. You can add your own questions to simple text files without
- *  any knowledge of programming.
- *
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public abstract class Home extends Deck
-{
-
-	public static final IPropertySelectionModel LEVEL_MODEL = new StringPropertySelectionModel
-            (new String[] { Global.EASY_LEVEL, Global.MEDIUM_LEVEL, Global.HARD_LEVEL });
-	
-	public void start(IRequestCycle cycle)
-	{
-        Global global = (Global) getGlobal();
-        global.initialize(cycle);
-        Visit visit = (Visit) getVisit();
-        String level = getLevel();
-        int questionSet = global.getQuestionSet(level);
-        String username = getUsername();
-        if (username == null || "".equals(username))
-            username = "newcomer";
-        visit.initialize(username, level, questionSet, global.getNumberOfQuestions(questionSet));
-        Quiz quizDeck = (Quiz) cycle.getPage("Quiz");
-        quizDeck.setQuestionNumber(0);
-        quizDeck.fetch();
-        cycle.activate(quizDeck);
-	}
-	
-	public abstract String getUsername();
-	public abstract void setUsername(String username);
-	
-	public abstract String getLevel();
-	public abstract void setLevel(String level);
-}
diff --git a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Quiz.java b/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Quiz.java
deleted file mode 100644
index 0fff768..0000000
--- a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Quiz.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.quiz;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.wml.Deck;
-
-import java.util.Map;
-
-/**
- *  Quiz deck for the Quiz application.
- *
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public abstract class Quiz extends Deck
-{
-    int questionNumber;
-
-    public void fetch()
-    {
-        Visit visit = (Visit) getVisit();
-        Global global = (Global) getGlobal();
-        Map question = global.getQuestion(getQuestionNumber(), visit.getQuestionSet());
-        setQuestion(question);
-    }
-
-    public IPropertySelectionModel getChoiceModel()
-    {
-        return new StringPropertySelectionModel((String[])getQuestion().get(Global.CHOICES_KEY));
-    }
-
-    public void process(IRequestCycle cycle)
-    {
-        Visit visit = (Visit) getVisit();
-        int rightAnswer = ((Integer)getQuestion().get(Global.ANSWER_KEY)).intValue();
-        if (getChoice() == rightAnswer)
-        {
-            int points = visit.getPoints();
-            points += visit.getQuestionSet();
-            visit.setPoints(points);
-        }
-        int questionNumber = getQuestionNumber() + 1;
-        if (questionNumber < visit.getNumberOfQuestions())
-        {
-            setQuestionNumber(questionNumber);
-            fetch();
-        }
-        else
-        {
-            Scores scoresDeck = (Scores)cycle.getPage("Scores");
-            Global global = (Global) getGlobal();
-            boolean isNewHighscore = global.addHighscore(visit.getPoints(), visit.getUsername()) != -1;
-            scoresDeck.setNewHighscore(isNewHighscore);
-            scoresDeck.setHighscores(global.getHighscores());
-            cycle.activate(scoresDeck);
-        }
-    }
-
-    protected void initialize()
-    {
-        questionNumber = 0;
-    }
-
-    public int getQuestionNumber()
-    {
-        return questionNumber;
-    }
-
-    public void setQuestionNumber(int questionNumber)
-    {
-        this.questionNumber = questionNumber;
-        fireObservedChange("questionNumber", questionNumber);
-    }
-
-    public abstract Map getQuestion();
-    public abstract void setQuestion(Map question);
-
-    public abstract int getChoice();
-
-
-}
diff --git a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Scores.java b/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Scores.java
deleted file mode 100644
index 8dc0d5e..0000000
--- a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Scores.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.quiz;
-
-import org.apache.tapestry.wml.Deck;
-
-import java.util.List;
-
-/**
- *  Scores deck for the Quiz application.
- *
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public abstract class Scores extends Deck
-{
-
-    public abstract List getHighscores();
-    public abstract void setHighscores(List value);
-
-    public abstract boolean isNewHighscore();
-    public abstract void setNewHighscore(boolean value);
-}
diff --git a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Visit.java b/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Visit.java
deleted file mode 100644
index d3ea79f..0000000
--- a/tapestry/tapestry-examples/wap/src/org/apache/tapestry/wap/quiz/Visit.java
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.quiz;
-
-import java.io.Serializable;
-
-/**
- *  Visit object for the Quiz application.
- *
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public class Visit implements Serializable
-{
-    private String username;
-    private String level;
-    private int points;
-    private int questionSet;
-    private int numberOfQuestions;
-
-    public void initialize(String username, String level, int questionSet, int numberOfQuestions)
-    {
-        this.username = username;
-        this.level = level;
-        this.questionSet = questionSet;
-        this.numberOfQuestions = numberOfQuestions;
-        points = 0;
-    }
-
-    public int getNumberOfQuestions()
-    {
-        return numberOfQuestions;
-    }
-
-    public void setNumberOfQuestions(int numberOfQuestions)
-    {
-        this.numberOfQuestions = numberOfQuestions;
-    }
-
-    public int getQuestionSet()
-    {
-        return questionSet;
-    }
-
-    public void setQuestionSet(int questionSet)
-    {
-        this.questionSet = questionSet;
-    }
-
-    public void incPoints()
-    {
-        points++;
-    }
-
-    public int getPoints()
-    {
-        return points;
-    }
-
-    public void setPoints(int points)
-    {
-        this.points = points;
-    }
-
-    public String getLevel()
-    {
-        return level;
-    }
-
-    public void setLevel(String level)
-    {
-        this.level = level;
-    }
-
-	public String getUsername()
-    {
-		return username;
-	}
-
-	public void setUsername(String user)
-    {
-		this.username = user;
-	}
-
-}
diff --git a/tapestry/tapestry-framework/pom.xml b/tapestry/tapestry-framework/pom.xml
deleted file mode 100644
index a899aa1..0000000
--- a/tapestry/tapestry-framework/pom.xml
+++ /dev/null
@@ -1,298 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-framework</artifactId>
-    <packaging>jar</packaging>
-    <version>4.1.3</version>
-    <!-- This should change to tapestry-project -->
-    <parent>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>tapestry-project</artifactId>
-        <version>4.1.3</version>
-    </parent>
-    <name>Tapestry Core Library - ${version}</name>
-    <inceptionYear>2006</inceptionYear>
-
-    <dependencies>
-        <dependency>
-            <groupId>jboss</groupId>
-            <artifactId>javassist</artifactId>
-            <!-- Override parent pom -->
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind-lib</artifactId>
-        </dependency>
-        <!-- Really, a transitive dependency of hivemind. -->
-        <dependency>
-            <groupId>oro</groupId>
-            <artifactId>oro</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-        </dependency>
-        <!-- Override parent pom: needed at compile time. -->
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymockclassextension</artifactId>
-        </dependency>
-        <!-- Override parent pom: needed at compile time. -->
-        <dependency>
-            <groupId>commons-codec</groupId>
-            <artifactId>commons-codec</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>ognl</groupId>
-            <artifactId>ognl</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-fileupload</groupId>
-            <artifactId>commons-fileupload</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-io</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-beanutils</groupId>
-            <artifactId>commons-beanutils</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-lang</groupId>
-            <artifactId>commons-lang</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-pool</groupId>
-            <artifactId>commons-pool</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>5.1</version>
-            <classifier>jdk15</classifier>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>junit</groupId>
-                    <artifactId>junit</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>jdom</groupId>
-            <artifactId>jdom</artifactId>
-            <version>1.0</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.8</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-test</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>tapestry</groupId>
-                    <artifactId>tapestry</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
-        <dependency>
-            <groupId>org.openqa.selenium.client-drivers</groupId>
-            <artifactId>selenium-java-client-driver</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.openqa.selenium.server</groupId>
-            <artifactId>selenium-server</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>backport-util-concurrent</groupId>
-            <artifactId>backport-util-concurrent</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <sourceDirectory>src/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/descriptor/META-INF</directory>
-                <includes>
-                    <include>**</include>
-                </includes>
-                <targetPath>META-INF</targetPath>
-            </resource>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-                <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </resource>
-            <resource>
-                <directory>src/js/dojo-0.4.3/</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-                <targetPath>dojo-0.4.3</targetPath>
-            </resource>
-            <resource>
-                <directory>src/js/scriptaculous-1.7.1/</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-                <targetPath>scriptaculous-1.7.1</targetPath>
-            </resource>
-            <resource>
-                <directory>src/js/tapestry</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-                <targetPath>tapestry</targetPath>
-            </resource>
-        </resources>
-
-        <testSourceDirectory>src/test</testSourceDirectory>
-        <testResources>
-            <testResource>
-                <directory>src/test</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-                <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </testResource>
-            <testResource>
-                <directory>src/conf</directory>
-                <includes>
-                    <include>log4j.properties</include>
-                </includes>
-            </testResource>
-        </testResources>
-
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>2.1</version>
-                <configuration>
-                    <archive>
-                        <compress>true</compress>
-                        <index>true</index>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-source-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <version>1.1</version>
-                <inherited>true</inherited>
-                <executions>
-                    <execution>
-                        <phase>site</phase>
-                        <configuration>
-                            <tasks>
-                                <ant antfile="../support/build.xml" inheritRefs="true">
-                                    <property name="target.dir" value="../target/site/tapestry-framework" />
-                                    <target name="build" />
-                                </ant>
-                            </tasks>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>hivemind</groupId>
-                        <artifactId>hivemind</artifactId>
-                        <version>1.1.1</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>xerces</groupId>
-                        <artifactId>xercesImpl</artifactId>
-                        <version>2.6.2</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>commons-logging</groupId>
-                        <artifactId>commons-logging</artifactId>
-                        <version>1.0.4</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>log4j</groupId>
-                        <artifactId>log4j</artifactId>
-                        <version>1.2.13</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>oro</groupId>
-                        <artifactId>oro</artifactId>
-                        <version>2.0.8</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>ant</groupId>
-                        <artifactId>ant-xslp</artifactId>
-                        <version>1.6.5</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>ant</groupId>
-                        <artifactId>ant-trax</artifactId>
-                        <version>1.6.5</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>clirr-maven-plugin</artifactId>
-                <configuration>
-                    <comparisonVersion>4.1.1</comparisonVersion>
-                    <minSeverity>info</minSeverity>
-                    <textOutputFile>${project.build.directory}/clirr.txt</textOutputFile>
-                    <excludes>
-                        <exclude>**/internal/**</exclude>
-                        <exclude>**/spi/**</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-
-        </plugins>
-    </build>
-
-    <reporting>
-        <outputDirectory>../target/site/tapestry-framework</outputDirectory>
-    </reporting>
-    
-</project>
diff --git a/tapestry/tapestry-framework/src/conf/log4j.properties b/tapestry/tapestry-framework/src/conf/log4j.properties
deleted file mode 100644
index e22fb54..0000000
--- a/tapestry/tapestry-framework/src/conf/log4j.properties
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-log4j.rootCategory=WARN, A1
-
-# A1 is set to be a ConsoleAppender. 
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%c{1} [%p] %m%n
-
-log4j.category.org.apache.hivemind=ERROR
-log4j.category.hivemind=ERROR
diff --git a/tapestry/tapestry-framework/src/conf/testng.xml b/tapestry/tapestry-framework/src/conf/testng.xml
deleted file mode 100644
index dc8ce4a..0000000
--- a/tapestry/tapestry-framework/src/conf/testng.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
-
-<suite name="Tapestry Core Framework" verbose="3"  parallel="true" thread-count="4">
-
-    <test name="Threaded Services" parallel="true">
-        <groups>
-            <run>
-                <include name="threaded" />
-            </run>
-        </groups>
-        
-        <packages>
-            <package name="org.apache.tapestry.services.impl.*" />
-        </packages>
-    </test>
-
-</suite>
-
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/hivemodule.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/hivemodule.xml
deleted file mode 100644
index 2f721ad..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/hivemodule.xml
+++ /dev/null
@@ -1,301 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry" version="4.0.0" package="org.apache.tapestry.services">
-
-    The master module for the Apache Tapestry web application framework.
-
-    <dependency module-id="hivemind" version="1.1.0"/>
-    <dependency module-id="hivemind.lib" version="1.1.0"/>
-
-    <implementation service-id="hivemind.ClassFactory" >
-
-        Wrapper around Javassist used to dynamically create classes such as service interceptors.
-
-        <create-instance class="org.apache.tapestry.enhance.ClassFactoryImpl" model="primitive" />
-
-    </implementation>
-
-    <service-point id="ClassFactory" interface="org.apache.hivemind.service.ClassFactory" parameters-occurs="none">
-
-        Wrapper around Javassist used to dynamically create classes such as service interceptors.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.enhance.ClassFactoryImpl">
-                <event-listener service-id="tapestry.ResetEventHub" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <sub-module descriptor="tapestry.init.xml"/>
-    <sub-module descriptor="tapestry.globals.xml"/>
-    <sub-module descriptor="tapestry.props.xml"/>
-    <sub-module descriptor="tapestry.request.xml"/>
-    <sub-module descriptor="tapestry.parse.xml"/>
-    <sub-module descriptor="tapestry.enhance.xml"/>
-    <sub-module descriptor="tapestry.page.xml"/>
-    <sub-module descriptor="tapestry.data.xml"/>
-    <sub-module descriptor="tapestry.script.xml"/>
-    <sub-module descriptor="tapestry.bindings.xml"/>
-    <sub-module descriptor="tapestry.services.xml"/>
-    <sub-module descriptor="tapestry.ognl.xml"/>
-    <sub-module descriptor="tapestry.coerce.xml"/>
-    <sub-module descriptor="tapestry.url.xml"/>
-    <sub-module descriptor="tapestry.asset.xml"/>
-    <sub-module descriptor="tapestry.persist.xml"/>
-    <sub-module descriptor="tapestry.state.xml"/>
-    <sub-module descriptor="tapestry.multipart.xml"/>
-    <sub-module descriptor="tapestry.describe.xml"/>
-    <sub-module descriptor="tapestry.markup.xml"/>
-    <sub-module descriptor="tapestry.error.xml"/>
-    <sub-module descriptor="tapestry.valid.xml"/>
-    <sub-module descriptor="tapestry.listener.xml"/>
-    <sub-module descriptor="tapestry.form.xml"/>
-    <sub-module descriptor="tapestry.l10n.xml"/>
-    <sub-module descriptor="tapestry.event.xml"/>
-    <sub-module descriptor="tapestry.render.xml"/>
-
-
-    <service-point id="ClasspathResourceFactory">
-
-        Constructs new instances of ClasspathResource.
-
-        <invoke-factory>
-            <construct class="impl.ClasspathResourceFactoryImpl"/>
-        </invoke-factory>
-    </service-point>
-
-    <schema id="Infrastructure">
-
-        Defines contributions to the Infrastructure and
-        InfrastructureOverride configuration points.
-
-        <element name="property">
-
-            Defines an object to plug into a property of Infrastructure.
-
-            <attribute name="name" required="true">
-                The name of the Infrastructure property.
-            </attribute>
-
-            <attribute name="mode">
-                The mode this contribution applies to. The Infrastructure
-                is initalized to a particular mode.  Contributions
-                that specify a mode override contribution that don't specify a mode,
-                but are ignored if the contribution mode doesn't match the
-                Infrastructure mode.
-            </attribute>
-
-            <attribute name="object"  translator="deferred-object">
-                The object to be contributed into the Infrastructure property.
-            </attribute>
-
-            <attribute name="value">
-                A literal value for the property.  Either value or object should be provided.
-            </attribute>
-
-            <conversion class="impl.InfrastructureContribution">
-                <map attribute="name" property="property"/>
-                <map attribute="object" property="deferredObject"/>
-            </conversion>
-
-        </element>
-
-    </schema>
-
-    <configuration-point id="Infrastructure" schema-id="Infrastructure">
-
-        The "factory" set of contributions into the configuration.  These
-        contributions are overridden by
-        the InfrastructureOverrides configuration point.
-
-    </configuration-point>
-
-    <configuration-point id="InfrastructureOverrides" schema-id="Infrastructure">
-
-        Provides a way for applications to easily override Infrastructure properties.
-
-    </configuration-point>
-
-    <service-point id="Infrastructure">
-
-        A kind of "clearing house" of other services. The Infrastructure is provided to the
-        IEngine instance via the InvokeEngineTerminator service (using an HttpServletRequest
-        attribute).  The engine can then get the other services it depends upon.
-        The infrastructure: object provider allows access to the properties
-        of this service.  The Infrastructure and InfrastructureOverrides
-        configuration points define which services are mapped to which
-        Infrastructure properties.
-
-        <invoke-factory>
-            <construct class="impl.InfrastructureImpl">
-                <set-service property="threadLocale" service-id="hivemind.ThreadLocale"/>
-                <set-configuration property="normalContributions" configuration-id="Infrastructure"/>
-                <set-configuration property="overrideContributions" configuration-id="InfrastructureOverrides"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <contribution configuration-id="Infrastructure">
-        <property name="componentMessagesSource" object="service:ComponentMessagesSource"/>
-        <property name="resetEventHub" object="service:ResetEventHub"/>
-        <property name="objectPool" object="service:GlobalObjectPool"/>
-        <property name="classFinder" object="service:ClassFinder"/>
-    </contribution>
-
-    <service-point id="ExtensionLookupFactory" interface="org.apache.hivemind.ServiceImplementationFactory">
-
-        A service factory that, in fact, attempts to obtain service implementations
-        as application extensions.  Failing that, a default implementation is
-        constructed.
-
-        <parameters-schema>
-
-            <element name="lookup">
-
-                <attribute name="extension-name" required="true"/>
-                <attribute name="default" translator="object"/>
-
-                <conversion class="impl.ExtensionLookupParameter"/>
-
-            </element>
-
-        </parameters-schema>
-
-        <invoke-factory>
-            <construct class="impl.ExtensionLookupFactory">
-                <set-object property="specification" value="infrastructure:applicationSpecification"/>
-                <set-service property="defaultBuilder" service-id="hivemind.lib.DefaultImplementationBuilder"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-
-    <service-point id="ResetEventHub">
-
-        Coordinator for services that have cached information that should be cleared out (this happens
-        constantly in development, much more rarely in production).
-
-        <create-instance class="impl.ResetEventHubImpl"/>
-    </service-point>
-
-    <service-point id="GlobalObjectPool" interface="ObjectPool">
-
-        A general purpose object pool used throughout the application. Care should be
-        taken to ensure that keys are sufficiently unique.  This service will likely
-        be removed soon; replaced with a number of more individual object pools
-        (as necessary).
-
-        <invoke-factory>
-            <construct class="impl.ObjectPoolImpl">
-                <event-listener service-id="ResetEventHub"/>
-                <event-listener service-id="tapestry.describe.ReportStatusHub"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-
-    <service-point id="ComponentMessagesSource">
-
-        Used to provide components (including pages) with access to their own localized messages.
-
-        <invoke-factory>
-            <construct class="impl.ComponentMessagesSourceImpl">
-                <event-listener service-id="ResetEventHub"/>
-                <set-object property="componentPropertySource" value="infrastructure:componentPropertySource"/>
-                <set-service property="componentResourceResolver" service-id="tapestry.page.ComponentResourceResolver" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InfrastructureObjectProvider" interface="org.apache.hivemind.service.ObjectProvider">
-
-        ObjectProvider mapped to prefix "infrastructure:", the locator is the name of a property of the
-        Infratructure service.
-
-        <invoke-factory>
-            <construct class="impl.InfrastructureObjectProvider">
-                <set-service property="infrastructure" service-id="Infrastructure"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-
-    <contribution configuration-id="hivemind.ObjectProviders">
-        <provider prefix="infrastructure" service-id="InfrastructureObjectProvider"/>
-    </contribution>
-
-    <service-point id="DeferredObjectTranslator" interface="org.apache.hivemind.schema.Translator" visibility="private">
-
-        Translator that encapsulates the ObjectTranslator, returning DeferredObjects. This is to prevent
-        premature or unnecessary object creation by the ObjectTranslator.
-
-        <invoke-factory>
-            <construct class="impl.DeferredObjectTranslator">
-                <set-service property="objectTranslator" service-id="ObjectTranslator"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="hivemind.Translators">
-        <translator name="deferred-object" service-id="DeferredObjectTranslator"/>
-    </contribution>
-
-    <service-point id="ObjectTranslator" interface="org.apache.hivemind.schema.Translator" visibility="private">
-
-        Translator that works with ObjectProviders to find or create objects.  This is a duplicate
-        of the HiveMind service (which is also private).
-
-        <invoke-factory>
-            <construct
-                    class="org.apache.hivemind.service.impl.ObjectTranslator">
-                <set-configuration configuration-id="hivemind.ObjectProviders" property="contributions"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="InjectedValueProviderFactory" interface="org.apache.hivemind.ServiceImplementationFactory"
-                   visibility="private" parameters-occurs="none">
-
-        Special service factory for the InjectedValueProvider service.
-
-        <invoke-factory>
-            <construct class="impl.InjectedValueProviderFactory">
-                <set-service property="objectTranslator" service-id="ObjectTranslator"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="InjectedValueProvider" interface="InjectedValueProvider">
-        <invoke-factory service-id="InjectedValueProviderFactory"/>
-    </service-point>
-
-    <service-point id="ClassFinder">
-
-        Searches for classes within a list of packages.
-
-        <invoke-factory>
-            <construct class="impl.ClassFinderImpl"/>
-        </invoke-factory>
-
-    </service-point>
-
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.asset.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.asset.xml
deleted file mode 100644
index 81cfed5..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.asset.xml
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.asset" version="4.0.0" package="org.apache.tapestry.asset">
-
-    Factories for creating IAsset instances.
-
-    <configuration-point id="AssetFactories">
-
-        Maps asset path prefixes to AssetFactory implementations.
-
-        <schema>
-            <element name="factory">
-                <attribute name="prefix" required="true" unique="true">
-                    The prefix to map.
-                </attribute>
-                <attribute name="object" required="true" translator="object">
-                    The asset factory for the prefix.
-                </attribute>
-
-                <conversion class="AssetFactoryContribution">
-                    <map attribute="object" property="factory"/>
-                </conversion>
-            </element>
-        </schema>
-    </configuration-point>
-
-    <contribution configuration-id="AssetFactories">
-
-        <factory prefix="context" object="service:ContextAssetFactory"/>
-        <factory prefix="classpath" object="service:ClasspathAssetFactory"/>
-
-    </contribution>
-
-    <service-point id="DefaultAssetFactory" interface="AssetFactory">
-
-        AssetFactory used when the prefix on the path is not known.
-
-        <create-instance class="DefaultAssetFactory"/>
-
-    </service-point>
-
-    <service-point id="ContextAssetFactory" interface="AssetFactory">
-
-        AssetFactory used when the prefix is "context:" or the base
-        resource is a ContextResource.
-
-        <invoke-factory>
-            <construct class="ContextAssetFactory">
-                <set-object property="contextPath" value="infrastructure:contextPath"/>
-                <set-service property="webContext" service-id="tapestry.globals.WebContext"/>
-                <set-object property="localizer" value="infrastructure:resourceLocalizer"/>
-                <set-object property="requestCycle" value="infrastructure:requestCycle" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="ClasspathAssetFactory" interface="AssetFactory">
-
-        AssetFactory used when the prefix is "classpath:" or the
-        base resource is a ClasspathResource.
-
-        <invoke-factory>
-            <construct class="ClasspathAssetFactory">
-                <set-object property="assetService" value="engine-service:asset"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <configuration-point id="AssetFactoryStrategies" schema-id="hivemind.lib.StrategyRegistry"/>
-
-    <contribution configuration-id="AssetFactoryStrategies">
-        <strategy class="org.apache.hivemind.util.ContextResource" object="service:ContextAssetFactory"/>
-
-        <strategy class="org.apache.tapestry.web.WebContextResource" object="service:ContextAssetFactory"/>
-
-        <strategy class="org.apache.hivemind.util.ClasspathResource" object="service:ClasspathAssetFactory"/>
-
-        <strategy class="ExternalResource" object="service:DefaultAssetFactory"/>
-    </contribution>
-
-    <service-point id="LookupAssetFactory" interface="AssetFactory">
-
-        AssetFactory that delegates to another implementation based on
-        the type of resource.  Used when the asset path does not contain
-        a prefix.
-
-        <invoke-factory service-id="hivemind.lib.StrategyFactory">
-            <construct configuration-id="AssetFactoryStrategies"/>
-        </invoke-factory>
-    </service-point>
-
-
-    <service-point id="AssetSource">
-
-        The master factory for assets, which identifies the correct
-        AssetFactory based on the prefix of the asset path (if any).
-
-        <invoke-factory>
-            <construct class="AssetSourceImpl">
-                <set-configuration property="contributions" configuration-id="AssetFactories"/>
-                <set-service property="lookupAssetFactory" service-id="LookupAssetFactory"/>
-                <set-service property="defaultAssetFactory" service-id="DefaultAssetFactory"/>
-                <set-service property="contextAssetFactory" service-id="ContextAssetFactory" />
-                <set-service property="classpathAssetFactory" service-id="ClasspathAssetFactory" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-
-    <service-point id="ResourceDigestSource">
-
-        Reads and caches Digest digests of files exposed by the AssetService.
-
-        <invoke-factory>
-            <construct class="ResourceDigestSourceImpl">
-                <event-listener service-id="tapestry.ResetEventHub"/>
-                <event-listener service-id="tapestry.describe.ReportStatusHub"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="tapestry.Infrastructure">
-        <property name="assetFactory" object="service:LookupAssetFactory"/>
-    </contribution>
-
-    <configuration-point id="UnprotectedAssets">
-
-        Maps asset path regexp patterns to assets that won't be required
-        to have md5sum digests, making them visible and accessible to unauthenticated
-        url requests. Care should be taken contributing here. Most things should remain
-        protected, like .class files, database configuration files, etc.
-
-        This configuration is mainly intended to help some resources that require being
-        able to dynamically load content on the browser client-side. One such resource
-        is the http://dojotoolkit.org javascript library, which loads javascript/css/other
-        resources dynamically via XmlHttpRequests for resources that haven't been previously
-        digested.
-
-        <schema>
-            <element name="unprotected-resource">
-                <attribute name="contains" required="true" unique="true">
-                    The regexp pattern to match against.
-                </attribute>
-
-                <rules>
-                    <push-attribute attribute="contains"/>
-                    <invoke-parent method="addElement"/>
-                </rules>
-            </element>
-        </schema>
-    </configuration-point>
-
-    <contribution configuration-id="UnprotectedAssets">
-        List of unprotected asset regexps for ResourceMatcher service.
-
-        <unprotected-resource contains="^/tapestry/" />
-        <unprotected-resource contains="^/org/apache/tapestry/.*.css" />
-        <unprotected-resource contains="^/org/apache/tapestry/.*.gif" />
-        <unprotected-resource contains="^/org/apache/tapestry/.*.png" />
-        <unprotected-resource contains="^/org/apache/tapestry/.*.jpg" />
-        <unprotected-resource contains="^/org/apache/tapestry/.*.js" />
-        <unprotected-resource contains="^/org/apache/tapestry/.*.htm" />
-        <unprotected-resource contains="^/org/apache/tapestry/.*.html" />
-
-        <unprotected-resource contains="^/dojo.*/" />
-        <unprotected-resource contains="^/scriptaculous.*/" />
-    </contribution>
-
-    <service-point id="UnprotectedResourceMatcher" interface="ResourceMatcher" >
-
-        Uses the UnprotectedAssets configuration point to dynamically determine
-        which assets managed by the AssetService should be protected. The default
-        is to protect all resources.
-
-        <invoke-factory>
-            <construct class="ResourceMatcherImpl">
-                <event-listener service-id="tapestry.ResetEventHub"/>
-                <set-configuration configuration-id="UnprotectedAssets" property="contributions" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.bindings.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.bindings.xml
deleted file mode 100644
index d54cef4..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.bindings.xml
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.bindings" version="4.0.0" package="org.apache.tapestry.binding">
-
-    Services for creating instance of IBinding.
-
-    <service-point id="OGNLBindingFactory" interface="BindingFactory">
-
-        Creates bindings where the path is a OGNL expression.
-
-        <invoke-factory>
-            <construct class="OGNLBindingFactory">
-                <set-service property="expressionEvaluator" service-id="tapestry.ognl.ExpressionEvaluator"/>
-                <set-service property="expressionCache" service-id="tapestry.ognl.ExpressionCache"/>
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="MessageBindingFactory" interface="BindingFactory">
-
-        Creates bindings where the path is a localized message key for the component.
-
-        <invoke-factory>
-            <construct class="MessageBindingFactory">
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="LiteralBindingFactory" interface="BindingFactory">
-
-        Creates bindings where the path is the literal (aka static) value.
-
-        <invoke-factory>
-            <construct class="LiteralBindingFactory">
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-
-    <service-point id="AssetBindingFactory" interface="BindingFactory">
-
-        Creates bindings where the path is the name of an asset of the component.
-
-        <invoke-factory>
-            <construct class="AssetBindingFactory">
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="BeanBindingFactory" interface="BindingFactory">
-
-        Creates bindings where the path is the name of a managed bean defined by the component.
-
-        <invoke-factory>
-            <construct class="BeanBindingFactory">
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="ListenerBindingFactory" interface="BindingFactory">
-
-        Binding factory where the path is the name of a component listener method.
-
-        <invoke-factory>
-            <construct class="ListenerBindingFactory">
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="ComponentBindingFactory" interface="BindingFactory">
-
-        Binding factory where the path is the id of a nested component.
-
-        <invoke-factory>
-            <construct class="ComponentBindingFactory">
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="StateBindingFactory" interface="BindingFactory">
-
-        Creates bindings where the path is the name of an asset of the component.
-
-        <invoke-factory>
-            <construct class="StateBindingFactory">
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-                <set-object property="applicationStateManager" value="infrastructure:applicationStateManager"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="HiveMindBindingFactory" interface="BindingFactory">
-
-        Creates bindings where the path is a HiveMind object reference.
-
-        <invoke-factory>
-            <construct class="HiveMindBindingFactory">
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-                <set-service property="injectedValueProvider" service-id="tapestry.InjectedValueProvider"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="ClientIdBindingFactory" interface="BindingFactory">
-
-        Binding factory where the path is the id of a nested component. Its clientId is returned.
-
-        <invoke-factory>
-            <construct class="ClientIdBindingFactory">
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="ClientIdListBindingFactory" interface="BindingFactory">
-
-        Binding factory where the path is a comma separated list of component ids which will be translated into the equivalent
-        of "return Arrays.asList(new String[] {component.getComponent('stringid').getClientId(), component.getComponent('stringid2').getClientId()});"
-        from a path like "stringid,stringid2".
-
-        <invoke-factory>
-            <construct class="ClientIdListBindingFactory">
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="MetaBindingFactory" interface="BindingFactory">
-
-        Utility binding for searching for a meta property value using org.apache.tapestry.services.ComponentPropertySource for meta key/value pairs.
-
-        <invoke-factory>
-            <construct class="MetaBindingFactory">
-                <set-object property="propertySource" value="service:tapestry.props.ComponentPropertySource"/>
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <configuration-point id="BindingFactories">
-
-        Used to map binding prefixes to binding factories.
-
-        <schema>
-            <element name="binding">
-
-                <attribute name="prefix" unique="true" required="true">
-                    The unique prefix for this factory.
-                </attribute>
-
-                <attribute name="service-id" required="true" translator="service">
-                    The service associated with the given prefix.
-                </attribute>
-
-                <conversion class="org.apache.tapestry.services.impl.BindingPrefixContribution">
-                    <map attribute="service-id" property="factory"/>
-                </conversion>
-
-            </element>
-        </schema>
-    </configuration-point>
-
-    <contribution configuration-id="BindingFactories">
-        <binding prefix="ognl" service-id="OGNLBindingFactory"/>
-        <binding prefix="message" service-id="MessageBindingFactory"/>
-        <binding prefix="literal" service-id="LiteralBindingFactory"/>
-        <binding prefix="asset" service-id="AssetBindingFactory"/>
-        <binding prefix="bean" service-id="BeanBindingFactory"/>
-        <binding prefix="listener" service-id="ListenerBindingFactory"/>
-        <binding prefix="component" service-id="ComponentBindingFactory"/>
-        <binding prefix="state" service-id="StateBindingFactory"/>
-        <binding prefix="hivemind" service-id="HiveMindBindingFactory"/>
-        <binding prefix="clientId" service-id="ClientIdBindingFactory"/>
-        <binding prefix="meta" service-id="MetaBindingFactory" />
-    </contribution>
-
-    <configuration-point id="PropertyNameBindingFactories">
-
-        Used to map specific component property names with a binding - but only in the case
-        where a prefix hasn't been specified.  Currently this is used to help bind
-        updateComponents="foo,bar" parameters.
-
-        <schema>
-            <element name="binding" key-attribute="propertyName">
-
-                <attribute name="propertyName" required="true" unique="true" >
-                    The component property name which should cause a binding match for this binding - but only if
-                    no specific prefix (such as ognl:) has been specified.
-                </attribute>
-
-                <attribute name="service-id" required="true" translator="service" >
-                    The service associated with the given propertyName.
-                </attribute>
-
-                <rules>
-                    <push-attribute attribute="service-id"/>
-                    <invoke-parent method="addElement"/>
-                </rules>
-            </element>
-        </schema>
-    </configuration-point>
-
-    <contribution configuration-id="PropertyNameBindingFactories">
-        <binding propertyName="updateComponents" service-id="ClientIdListBindingFactory" />
-    </contribution>
-
-    <service-point id="BindingSource">
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.BindingSourceImpl">
-                <set-configuration property="contributions" configuration-id="BindingFactories" />
-                <set-configuration property="propertyContributions" configuration-id="PropertyNameBindingFactories" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.coerce.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.coerce.xml
deleted file mode 100644
index 4e321a4..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.coerce.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.coerce" version="4.0.0" package="org.apache.tapestry.coerce">
-  
-  Module used to coerce data types from one type to another. This is used primarily to convert strings
-  into other types (numbers, booleans, etc.) or to convert various types into booleans (to be used
-  as conditions).
-  
-  <schema id="Converters">
-    
-    Schema used to define converters for a specific type.
-    
-    <element name="converter">
-      <attribute name="class" translator="class" unique="true" required="true">
-        The name of the class to register a type converter for.
-      </attribute>
-      
-      <attribute name="object" translator="object" required="true">
-        The object, which implements TypeConverter, to be registered for the class.
-      </attribute>
-      
-      <conversion class="TypeConverterContribution">
-        <map attribute="class" property="subjectClass"/>
-        <map attribute="object" property="converter"/>
-      </conversion>
-      
-    </element>
-    
-    
-  </schema>
-  
-  <configuration-point id="BooleanConverters" schema-id="Converters"/>
-    
-  <contribution configuration-id="BooleanConverters">
-    <converter class="java.lang.Object" object="instance:ObjectToBooleanConverter"/>
-    <converter class="java.lang.Number" object="instance:NumberToBooleanConverter"/>
-    <converter class="java.lang.String" object="instance:StringToBooleanConverter"/>
-    <converter class="java.util.Collection" object="instance:CollectionToBooleanConverter"/>
-    <converter class="java.util.Map" object="instance:MapToBooleanConverter"/>
-  </contribution>
-  
-  <service-point id="BooleanConverter" interface="TypeConverter">
-    <invoke-factory>
-      <construct class="TypeConverterWrapper">
-        <set-configuration property="contributions" configuration-id="BooleanConverters"/>
-        <set-object property="nullConverter" value="instance:NullToBooleanConverter"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <configuration-point id="IteratorConverters" schema-id="Converters"/>
-  
-  <contribution configuration-id="IteratorConverters">
-    <converter class="java.lang.Object" object="instance:ObjectToIteratorConverter"/>
-    <converter class="java.util.Collection" object="instance:CollectionToIteratorConverter"/>
-    <converter class="java.lang.Object[]" object="instance:ObjectArrayToIteratorConverter"/>
-    <converter class="int[]" object="instance:IntArrayToIteratorConverter"/>
-    <converter class="char[]" object="instance:CharArrayToIteratorConverter"/>
-    <converter class="boolean[]" object="instance:BooleanArrayToIteratorConverter"/>    
-  </contribution>
-  
-  <service-point id="IteratorConverter" interface="TypeConverter">
-    <invoke-factory>
-      <construct class="TypeConverterWrapper">
-        <set-configuration property="contributions" configuration-id="IteratorConverters"/>
-        <set-object property="nullConverter" value="instance:NullToIteratorConverter"/>
-      </construct>
-    </invoke-factory>
-  </service-point>  
-  
-  <configuration-point id="ListConverters" schema-id="Converters"/>
-  
-  <contribution configuration-id="ListConverters">
-    <converter class="java.lang.Object" object="instance:ObjectToListConverter"/>
-    <converter class="java.util.Collection" object="instance:CollectionToListConverter"/>
-    <converter class="java.util.Iterator" object="instance:IteratorToListConverter"/>
-    <converter class="java.lang.Object[]" object="instance:ObjectArrayToListConverter"/>
-    <converter class="int[]" object="instance:IntArrayToListConverter"/>
-    <converter class="char[]" object="instance:CharArrayToListConverter"/>
-    <converter class="boolean[]" object="instance:BooleanArrayToListConverter"/> 
-    <converter class="java.lang.String" object="instance:StringToListConverter" />
-  </contribution>
-  
-  <service-point id="ListConverter" interface="TypeConverter">
-    <invoke-factory>
-      <construct class="TypeConverterWrapper">
-        <set-configuration property="contributions" configuration-id="ListConverters"/>
-        <set-object property="nullConverter" value="instance:NullToListConverter"/>
-      </construct>
-    </invoke-factory>
-  </service-point>  
-  
-  <configuration-point id="TypeConverters" schema-id="Converters">
-    
-    Defines converters used by the ValueConverter service; the class identifies the 
-    class to convert to, and the converter is responsible for converting arbitrary objects
-    to instances of that class.
-    
-  </configuration-point>
-  
-  <configuration-point id="PropertySelectionModelConverters" schema-id="Converters"/>
-  
-  <contribution configuration-id="PropertySelectionModelConverters">
-    <converter class="java.lang.String" object="instance:StringToPropertySelectionModelConverter"/>
-  </contribution>
-    
-  <service-point id="PropertySelectionModelConverter" interface="TypeConverter">
-    <invoke-factory>
-      <construct class="TypeConverterWrapper">
-        <set-configuration property="contributions" configuration-id="PropertySelectionModelConverters"/>
-      </construct>
-    </invoke-factory>   
-  </service-point>
-    
-  <contribution configuration-id="TypeConverters">
-    <converter class="java.lang.Boolean" object="service:BooleanConverter"/>
-    <converter class="java.util.Iterator" object="service:IteratorConverter"/>
-    <converter class="java.util.List" object="service:ListConverter"/>
-    <converter class="java.lang.String" object="instance:ObjectToStringConverter"/>
-    <converter class="org.apache.tapestry.form.IPropertySelectionModel" object="service:PropertySelectionModelConverter"/>
-  </contribution>  
-  
-  <service-point id="ValueConverter" interface="ValueConverter">
-    
-    Used, especially by bindings, to convert arbitrary objects into instances of a particular type.
-    Delegates out to various TypeConverter services defined in the TypeConverters configuration point.
-    
-    <invoke-factory>
-      <construct class="ValueConverterImpl">
-        <set-configuration property="contributions" configuration-id="TypeConverters"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="valueConverter" object="service:ValueConverter"/>
-  </contribution>
-  
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.data.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.data.xml
deleted file mode 100644
index 7b338c8..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.data.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.data" version="4.0.0" package="org.apache.tapestry.util.io">
-  
-  Module used to define the DataSqueezer service and related.
-  
-  <service-point id="DataSqueezer" interface="org.apache.tapestry.services.DataSqueezer">
-    
-    Converts back and forth between primitive and object types and encoded strings.
-    <invoke-factory service-id="hivemind.lib.PipelineFactory">
-      <create-pipeline filter-interface="org.apache.tapestry.services.DataSqueezerFilter"
-                       configuration-id="DataSqueezerFilters"
-                       terminator="service:DataSqueezerTerminator" />    
-    </invoke-factory>
-    
-    
-  </service-point>
-  
-  <configuration-point id="DataSqueezerFilters" schema-id="hivemind.lib.Pipeline">
-  Allows you to plug in your own custom data squeezers in front of the default Tapestry
-  data squeezer.
-  </configuration-point>
-  
-  <contribution configuration-id="DataSqueezerFilters">
-        <filter name="NullDataSqueezerFilter" before="*" object="instance:org.apache.tapestry.data.NullDataSqueezerFilter" />
-  </contribution>
-  
-  <service-point id="DataSqueezerTerminator" 
-                 visibility="private" 
-                 interface="org.apache.tapestry.services.DataSqueezer">
-    <invoke-factory>
-      <construct class="DataSqueezerImpl">
-        <set-configuration property="squeezeAdaptors"
-                           configuration-id="SqueezeAdaptors"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <configuration-point id="SqueezeAdaptors" occurs="1..n">
-    
-    Defines the available set of adaptors.  Each adaptor provides its own
-    prefix (via its getPrefix() method), so all that's needed is 
-    the set of objects.
-    
-    <schema>
-      <element name="adaptor">
-        <attribute name="object" required="true" translator="object"/>
-        <rules>
-          <push-attribute attribute="object"/>
-          <invoke-parent method="addElement"/>
-        </rules>
-      </element>
-    </schema>
-  </configuration-point>
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="dataSqueezer" object="service:DataSqueezer"/>
-  </contribution>
-
-  <service-point id="SerializableAdaptor" interface="SqueezeAdaptor">
-    
-    Converts an object down to a compressed byte stream, and then to a MIME-like string representation.
-    
-    <invoke-factory>
-      <construct class="SerializableAdaptor" class-resolver-property="resolver"/>
-    </invoke-factory>
-  </service-point>
-  
-
-  <contribution configuration-id="SqueezeAdaptors">
-    <adaptor object="instance:BooleanAdaptor"/>
-    <adaptor object="instance:ByteAdaptor"/>
-    <adaptor object="instance:CharacterAdaptor"/>
-    <adaptor object="instance:ComponentAddressAdaptor"/>
-    <adaptor object="instance:DoubleAdaptor"/>
-    <adaptor object="instance:FloatAdaptor"/>
-    <adaptor object="instance:IntegerAdaptor"/>
-    <adaptor object="instance:LongAdaptor"/>
-    <adaptor object="service:SerializableAdaptor"/>
-    <adaptor object="instance:ShortAdaptor"/>
-    <adaptor object="instance:StringAdaptor"/>
-  </contribution>
-
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.describe.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.describe.xml
deleted file mode 100644
index 4be87d4..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.describe.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.describe" version="4.0.0" package="org.apache.tapestry.describe">
-	
-	Services and adaptors for "describing" various objects into an HTML representation.
-	
-	<configuration-point id="DescribableStrategies" schema-id="hivemind.lib.StrategyRegistry">
-		
-		Maps classes to DescribableStrategy instances.
-		
-	</configuration-point>
-	
-	<contribution configuration-id="DescribableStrategies">
-		<strategy class="Describable" object="instance:NativeStrategy"/>
-		<strategy class="java.lang.Object" object="instance:DefaultStrategy"/>
-		<strategy class="javax.servlet.http.HttpServletRequest" object="instance:HttpServletRequestStrategy"/>
-		<strategy class="javax.servlet.http.Cookie" object="instance:CookieStrategy"/>
-		<strategy class="javax.servlet.http.HttpSession" object="instance:HttpSessionStrategy"/>
-		<strategy class="javax.servlet.ServletContext" object="instance:ServletContextStrategy"/>
-		<strategy class="javax.servlet.Servlet" object="instance:ServletStrategy"/>
-	</contribution>
-	
-	<service-point id="DescribableStrategy">
-		Strategy registry facade for DescribableStrategy.
-		
-		<invoke-factory service-id="hivemind.lib.StrategyFactory">
-			<construct configuration-id="DescribableStrategies"/>
-		</invoke-factory>
-	</service-point>
-	
-	<service-point id="RootDescriptionReceiverFactory">
-		
-		Creates a RootDescriptionReceiver instances around a markup
-		writer and the DescribableStategy service.
-		
-		<invoke-factory>
-			<construct class="RootDescriptionReceiverFactoryImpl">
-				<set-service property="strategy" service-id="DescribableStrategy"/>
-			</construct>
-		</invoke-factory>
-	</service-point>
-	
-	<service-point id="HTMLDescriber">
-		
-		Describes an object in an HTML format.
-		
-		<invoke-factory>
-			<construct class="HTMLDescriberImpl">
-				<set-object property="receiverFactory" value="infrastructure:rootDescriptionReceiverFactory"/>
-			</construct>
-		</invoke-factory>
-	</service-point>
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-     <property name="HTMLDescriber" object="service:HTMLDescriber"/>
-     <property name="rootDescriptionReceiverFactory" object="service:RootDescriptionReceiverFactory"/>
-  </contribution>  
-	
-	
-	<service-point id="ReportStatusHub">
-
-		Event hub used to get different service implementations to produce an HTML-based report
-		of their internal state.
-
-		<invoke-factory>
-			<construct class="ReportStatusHubImpl">
-				<set-object property="receiverFactory" value="infrastructure:rootDescriptionReceiverFactory"/>
-			</construct>
-		</invoke-factory>
-	</service-point>
-	
-	<service-point id="DefaultRenderStrategy" interface="RenderStrategy">
-		
-		Default adapter for objects that uses the HTMLDescriber service to do
-		the work.
-		
-		<invoke-factory>
-			<construct class="DefaultRenderStrategy">
-				<set-object property="describer" value="infrastructure:HTMLDescriber"/>
-			</construct>
-		</invoke-factory>
-	</service-point>
-	
-	<configuration-point id="RenderStrategies" schema-id="hivemind.lib.StrategyRegistry">
-		
-		Maps classes to RenderStrategy objects.
-		
-	</configuration-point>
-	
-	<contribution configuration-id="RenderStrategies">
-		<strategy class="java.lang.Object" object="service:DefaultRenderStrategy"/>
-		<strategy class="org.apache.hivemind.Location" object="instance:LocationRenderStrategy"/>
-		<strategy class="org.apache.hivemind.service.impl.ClassFabImpl" object="instance:PreformattedRenderStrategy"/>
-		<strategy class="java.lang.Object[]" object="service:ObjectArrayRenderStrategy"/>
-	</contribution>
-	
-	<service-point id="ObjectArrayRenderStrategy" interface="RenderStrategy">
-		Renders an array of objects as an unordered list.
-	
-		<invoke-factory>
-			<construct class="ObjectArrayRenderStrategy">
-				<set-service property="renderStrategy" service-id="RenderStrategy"/>
-			</construct>
-		</invoke-factory>	
-		
-	</service-point>
-	
-	<service-point id="RenderStrategy">
-		
-		Strategy service based on the RenderStrategies configuration point, which
-    allows arbitrary objects to be rendered as HTML.
-		
-		<invoke-factory service-id="hivemind.lib.StrategyFactory">
-			<construct configuration-id="RenderStrategies"/>
-		</invoke-factory>
-	</service-point>
-	
-	<service-point id="RenderableAdapterFactory">
-		
-		Provider renderable (IRender) adapters for arbitrary objects.
-		
-		<invoke-factory>
-			<construct class="RenderableAdapterFactoryImpl">
-				<set-service property="strategy" service-id="RenderStrategy"/>
-			</construct>
-		</invoke-factory>
-	</service-point>
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.enhance.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.enhance.xml
deleted file mode 100644
index 27f93ef..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.enhance.xml
+++ /dev/null
@@ -1,448 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<module id="tapestry.enhance" version="4.0.0" package="org.apache.tapestry.enhance">
-
-    Services and configurations related to component and page class enhancement.
-
-    <service-point id="ComponentConstructorFactory"
-        interface="org.apache.tapestry.services.ComponentConstructorFactory">
-
-        Performs enhancements on a component class as directed by the component's specification and the enhancement
-        workers contributed to the tapestry.enhance.EnhancementWorkers configuration point.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.ComponentConstructorFactoryImpl">
-                <set-service property="classFactory" service-id="tapestry.ClassFactory" />
-                <event-listener service-id="tapestry.ResetEventHub" />
-                <event-listener service-id="tapestry.describe.ReportStatusHub" />
-                <set-service property="validator" service-id="EnhancedClassValidator" />
-                <set-service property="chain" service-id="EnhancementWorkerChain" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="EnhancementWorkerChain" interface="EnhancementWorker">
-
-        The chain of enhancement workers built from the EnhancementWorkers configuration.
-
-        <invoke-factory service-id="hivemind.lib.ChainFactory">
-            <construct configuration-id="EnhancementWorkers" />
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="EnhancedClassValidator">
-
-        Validates that an enhanced class does implement all abstract methods inherited from super-classes.
-
-        <invoke-factory>
-            <construct class="EnhancedClassValidatorImpl">
-                <set-configuration property="classInspectors" configuration-id="ClassInspectors" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <configuration-point id="ClassInspectors">
-
-        Definition of contributing to the class inspectors config point used by EnhancedClassValidator.
-
-        <schema>
-            <element name="inspector">
-                <attribute name="object" translator="object">
-                    An object that implements the ClassInspector interface.
-                </attribute>
-                <rules>
-                    <push-attribute attribute="object" />
-                    <invoke-parent method="addElement" />
-                </rules>
-            </element>
-        </schema>
-    </configuration-point>
-
-    <contribution configuration-id="ClassInspectors" if="not (class java.lang.annotation.Annotation)">
-        <inspector object="service:ClassInspector" />
-    </contribution>
-    
-    <contribution configuration-id="ClassInspectors" if="class java.lang.annotation.Annotation">
-        <inspector object="service:GenericsClassInspector" />
-    </contribution>
-    
-    <service-point id="ClassInspector" interface="ClassInspector">
-    
-        <invoke-factory>
-            <construct class="ClassInspectorImpl" />
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="GenericsClassInspector" interface="ClassInspector">
-    
-        <invoke-factory>
-            <construct class="GenericsClassInspectorImpl" />
-        </invoke-factory>
-    </service-point>
-
-    <configuration-point id="EnhancementWorkers" schema-id="hivemind.lib.ChainContribution">
-
-        Provides the logic for component class enhancements.
-
-    </configuration-point>
-
-    <service-point id="AutowireWorkerFactory" interface="org.apache.hivemind.ServiceImplementationFactory"
-        parameters-occurs="none">
-        Constructs AutowireWorker.
-        <invoke-factory>
-            <construct class="org.apache.tapestry.enhance.AutowireWorkerFactory" />
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="AutowireWorker" interface="org.apache.tapestry.enhance.EnhancementWorker">
-        Automatically injects HiveMind service objects into read-only properties if exactly one HiveMind service point
-        is compatible with the property type.
-        <invoke-factory service-id="AutowireWorkerFactory" />
-    </service-point>
-
-    <contribution configuration-id="EnhancementWorkers">
-
-        <!-- These can actually run in any order, as long as abstract-property runs later. -->
-
-        <command id="inject-messages" object="service:InjectMessagesWorker" before="abstract-property" />
-        <command id="inject-specification" object="service:InjectSpecificationWorker" before="abstract-property" />
-        <command id="inject-event-invoker" object="service:InjectEventInvokerWorker" before="abstract-property" />
-        <command id="inject-render-worker" object="service:InjectRenderWorker" before="abstract-property" />
-        <command id="specified-property" object="service:SpecifiedPropertyWorker" before="abstract-property" />
-        <command id="parameter" object="service:ParameterPropertyWorker" before="abstract-property" />
-        <command id="dispatch-inject" object="service:DispatchToInjectWorker" before="abstract-property" />
-        <command id="inject-component" object="service:InjectComponentWorker" before="abstract-property" />
-        <command id="inject-bean" object="service:InjectBeanWorker" before="abstract-property" />
-        <command id="inject-asset" object="service:InjectAssetWorker" before="abstract-property" />
-        <command id="inject-autowire" object="service:AutowireWorker" before="tapestry.enhance.abstract-property"
-            after="tapestry.enhance.inject-messages,tapestry.enhance.inject-specification,tapestry.enhance.specified-property,tapestry.enhance.parameter,tapestry.enhance.dispatch-inject,tapestry.enhance.inject-component,tapestry.enhance.inject-bean,tapestry.enhance.inject-asset" />
-
-        <command id="clientid-property" object="service:ClientIdPropertyWorker" />
-
-        <!-- After all the previous workers have had their chance, we "fill in" any unclaimed properties
-            as transient page properties. -->
-
-        <command id="abstract-property" object="service:AbstractPropertyWorker" />
-
-        <!-- These need to come last,  since the previous commands (including abstract-property)
-            may have added interfaces to the class. -->
-
-        <command id="page-detach-listener" object="service:InjectPageDetachListenerWorker" after="abstract-property" />
-        <command id="page-attach-listener" object="service:InjectPageAttachListenerWorker" after="abstract-property" />
-        <command id="page-validate-listener" object="service:InjectPageValidateListenerWorker"
-            after="abstract-property" />
-        <command id="page-begin-render-listener" object="service:InjectPageBeginRenderListenerWorker"
-            after="abstract-property" />
-        <command id="page-end-render-listener" object="service:InjectPageEndRenderListenerWorker"
-            after="abstract-property" />
-
-    </contribution>
-
-    <configuration-point id="InjectWorkers">
-
-        Maps injection types to InjectEnhancementWorker objects.
-
-        <schema>
-            <element name="worker" key-attribute="type">
-                <attribute name="type">
-                    The type of injection performed by this object. Matches against the type attribute of the component
-                    specification's &lt;inject&gt; element.
-                </attribute>
-                <attribute name="object" required="true" translator="object">
-                    The object implementing the InjectEnhancementWorker interface.
-                </attribute>
-                <rules>
-                    <push-attribute attribute="object" />
-                    <invoke-parent method="addElement" />
-                </rules>
-            </element>
-        </schema>
-
-    </configuration-point>
-
-    <contribution configuration-id="InjectWorkers">
-        <worker type="object" object="service:InjectObjectWorker" />
-        <worker type="state" object="service:InjectStateWorker" />
-        <worker type="state-flag" object="service:InjectStateFlagWorker" />
-        <worker type="meta" object="service:InjectMetaWorker" />
-        <worker type="script" object="service:InjectScriptWorker" />
-        <worker type="page" object="instance:InjectPageWorker" />
-    </contribution>
-
-    <service-point id="DispatchToInjectWorker" interface="EnhancementWorker">
-
-        Dispatches to the correct InjectEnhancementWorker, based on the injection type.
-
-        <invoke-factory>
-            <construct class="DispatchToInjectWorker">
-                <set-object property="injectWorkers" value="configuration:InjectWorkers" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectMessagesWorker" interface="EnhancementWorker">
-
-        Injects the messages property into all components.
-
-        <invoke-factory>
-            <construct class="InjectMessagesWorker">
-                <set-object property="componentMessagesSource" value="infrastructure:componentMessagesSource" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectSpecificationWorker" interface="EnhancementWorker">
-
-        Injects the specification property into all components.
-
-        <invoke-factory>
-            <construct class="InjectSpecificationWorker" />
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectEventInvokerWorker" interface="EnhancementWorker">
-
-        Injects the eventInvoker property into all components.
-
-        <invoke-factory>
-            <construct class="InjectEventInvokerWorker">
-                <set-service property="componentEventInvoker" service-id="tapestry.event.EventInvoker" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectRenderWorker" interface="EnhancementWorker">
-
-        Injects the ComponentRenderWorker property into all components.
-
-        <invoke-factory>
-            <construct class="InjectRenderWorker">
-                <set-service property="renderWorker" service-id="tapestry.render.ComponentRenderChain" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="SpecifiedPropertyWorker" interface="EnhancementWorker">
-
-        Finds specified properties (from the specification) and constructs the corresponding properties in the enhanced
-        class.
-
-        <invoke-factory>
-            <construct class="SpecifiedPropertyWorker">
-                <set-service property="bindingSource" service-id="tapestry.bindings.BindingSource" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="ParameterPropertyWorker" interface="EnhancementWorker">
-
-        Adds properties for connected parameters to the enhanced class.
-
-        <invoke-factory>
-            <construct class="ParameterPropertyWorker" />
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectObjectWorker" interface="InjectEnhancementWorker">
-
-        Injects objects obtained from HiveMind into properties of the enhanced class.
-
-        <invoke-factory>
-            <construct class="InjectObjectWorker">
-                <set-service property="provider" service-id="tapestry.InjectedValueProvider" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectStateWorker" interface="InjectEnhancementWorker">
-
-        Injects properties that reference application state objects.
-
-        <invoke-factory>
-            <construct class="InjectStateWorker">
-                <set-service property="applicationStateManager" service-id="tapestry.state.ApplicationStateManager" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectStateFlagWorker" interface="InjectEnhancementWorker">
-
-        Injects boolean properties that indicate if a particular application state object exists or not.
-
-        <invoke-factory>
-            <construct class="InjectStateFlagWorker">
-                <set-service property="applicationStateManager" service-id="tapestry.state.ApplicationStateManager" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectMetaWorker" interface="InjectEnhancementWorker">
-
-        Injects meta data from the component's specification (or elsewhere) and handles type conversion.
-
-        <invoke-factory>
-            <construct class="InjectMetaWorker">
-                <set-object property="valueConverter" value="infrastructure:valueConverter" />
-                <set-object property="source" value="infrastructure:componentPropertySource" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectScriptWorker" interface="InjectEnhancementWorker">
-
-        Injects an IScript (a parsed script template, ready to be executed). The injected object is the relative path to
-        the script template file.
-
-
-        <invoke-factory>
-            <construct class="InjectScriptWorker">
-                <set-object property="source" value="infrastructure:scriptSource" />
-                <set-service property="assetSource" service-id="tapestry.asset.AssetSource"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="InjectComponentWorker" interface="EnhancementWorker">
-
-        Injects contained components as properties of the containing component.
-
-        <invoke-factory>
-            <construct class="InjectComponentWorker" />
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectBeanWorker" interface="EnhancementWorker">
-
-        Injects managed beans as properties of the containing component.
-
-        <invoke-factory>
-            <construct class="InjectBeanWorker" />
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectAssetWorker" interface="EnhancementWorker">
-
-        Injects assets as properties of the containing component.
-
-        <invoke-factory>
-            <construct class="InjectAssetWorker" />
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="ClientIdPropertyWorker" interface="EnhancementWorker">
-
-        Enhances the IComponent.getClientId() abstract getter to properly provide client id's depending on the context
-        called in. Does the same thing as AbstractPropertyWorker + the logic described.
-
-        <invoke-factory>
-            <construct class="ClientIdPropertyWorker" />
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="AbstractPropertyWorker" interface="EnhancementWorker">
-
-        Finds otherwise unclaimed abstract properties and converts them into concrete properties, as if they were
-        defined in the specification.
-
-        <invoke-factory>
-            <construct class="AbstractPropertyWorker" />
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="InjectPageDetachListenerWorker" interface="EnhancementWorker">
-
-        Registers components as PageDetachListeners, if they implement the interface.
-
-        <invoke-factory>
-            <construct class="InjectListenerRegistrationWorker">
-                <set-object property="listenerInterface" value="class:org.apache.tapestry.event.PageDetachListener" />
-                <set property="registerMethodName" value="addPageDetachListener" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-
-    <service-point id="InjectPageAttachListenerWorker" interface="EnhancementWorker">
-
-        Registers components as PageAttachListeners, if they implement the interface.
-
-        <invoke-factory>
-            <construct class="InjectListenerRegistrationWorker">
-                <set-object property="listenerInterface" value="class:org.apache.tapestry.event.PageAttachListener" />
-                <set property="registerMethodName" value="addPageAttachListener" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectPageEndRenderListenerWorker" interface="EnhancementWorker">
-
-        Registers components as PageEndRenderListeners, if they implement the interface.
-
-        <invoke-factory>
-            <construct class="InjectListenerRegistrationWorker">
-                <set-object property="listenerInterface" value="class:org.apache.tapestry.event.PageEndRenderListener" />
-                <set property="registerMethodName" value="addPageEndRenderListener" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-
-    <service-point id="InjectPageBeginRenderListenerWorker" interface="EnhancementWorker">
-
-        Registers components as PageBeginRenderListeners, if they implement the interface.
-
-        <invoke-factory>
-            <construct class="InjectListenerRegistrationWorker">
-                <set-object property="listenerInterface"
-                    value="class:org.apache.tapestry.event.PageBeginRenderListener" />
-                <set property="registerMethodName" value="addPageBeginRenderListener" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="InjectPageValidateListenerWorker" interface="EnhancementWorker">
-
-        Registers components as PageValidateListeners, if they implement the interface.
-
-        <invoke-factory>
-            <construct class="InjectListenerRegistrationWorker">
-                <set-object property="listenerInterface" value="class:org.apache.tapestry.event.PageValidateListener" />
-                <set property="registerMethodName" value="addPageValidateListener" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.error.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.error.xml
deleted file mode 100644
index a37be5e..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.error.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.error" version="4.0.0" package="org.apache.tapestry.error">
-  
-  Handling of common runtime errors.
-  
-  <service-point id="ExceptionPresenter">
-    
-    Handler for uncaught exceptions inside the main request
-    processing code path; the default implementation
-    displays the exception page to report the
-    exception.
-    
-    <invoke-factory>
-      <construct class="ExceptionPresenterImpl">
-        <set-object property="exceptionPageName" 
-                       value="infrastructure:exceptionPageName"/>
-        <set-object property="requestExceptionReporter"
-                       value="infrastructure:requestExceptionReporter"/>
-        <set-object property="responseRenderer"
-                      value="infrastructure:responseRenderer"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <service-point id="WMLExceptionPresenter" interface="ExceptionPresenter">
-    
-    Handler for uncaught exceptions inside the main request
-    processing code path for WML application; the default implementation
-    displays the exception page to report the
-    exception but verbose reports (to the console) the root exception as well.
-    
-    <invoke-factory>
-      <construct class="ExceptionPresenterImpl">
-        <set property="verbose" value="true"/>
-        <set-object property="exceptionPageName" 
-                       value="infrastructure:exceptionPageName"/>
-        <set-object property="requestExceptionReporter"
-                       value="infrastructure:requestExceptionReporter"/>
-        <set-object property="responseRenderer"
-                      value="infrastructure:responseRenderer"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>  
-  
-  <service-point id="StaleSessionExceptionPresenter">
-    
-    Handler for StaleSessionExceptions, which indicate that
-    the session has expired between the time a link or form
-    was rendered, and the time it was triggered in a new request.
-    
-    <invoke-factory>
-      <construct class="StaleSessionExceptionPresenterImpl">
-        <set-object property="pageName" 
-                       value="infrastructure:staleSessionPageName"/>
-        <set-object property="responseRenderer"
-                      value="infrastructure:responseRenderer"/>
-      </construct>
-    </invoke-factory>    
-  </service-point>
-  
-  <service-point id="StaleLinkExceptionPresenter">
-    
-    Handler for StaleSessionExceptions, which indicate that
-    the session has expired between the time a link or form
-    was rendered, and the time it was triggered in a new request.
-    
-    <invoke-factory>
-      <construct class="StaleLinkExceptionPresenterImpl">
-        <set-object property="pageName" 
-                       value="infrastructure:staleLinkPageName"/>
-        <set-object property="responseRenderer"
-                      value="infrastructure:responseRenderer"/>
-      </construct>
-    </invoke-factory>    
-  </service-point>  
-  
-  
-  
-  <service-point id="RequestExceptionReporter" interface="RequestExceptionReporter">
-    
-    Reports request errors to the console (when reporting using the Exception page fails, or is
-    inappropriate).
-    
-    <invoke-factory>
-      <construct class="RequestExceptionReporterImpl">
-        <set-object property="request" value="infrastructure:request"/>
-      </construct>
-    </invoke-factory>
-  </service-point>  
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="exceptionPageName" value="Exception"/>
-    <property name="exceptionPageName" mode="wml" value="WMLException"/>
-    
-    <property name="staleSessionPageName" value="StaleSession"/>
-    <property name="staleSessionPageName" mode="wml" value="WMLStaleSession"/>
-    
-    <property name="staleLinkPageName" value="StaleLink"/>
-    <property name="staleLinkPageName" mode="wml" value="WMLStaleLink"/>
-    
-    <property name="requestExceptionReporter" object="service:RequestExceptionReporter"/>    
-    <property name="exceptionPresenter" object="service:ExceptionPresenter"/>
-    <property name="exceptionPresenter" mode="wml" object="service:WMLExceptionPresenter"/>
-    
-    <property name="staleSessionExceptionPresenter" object="service:StaleSessionExceptionPresenter"/>
-    <property name="staleLinkExceptionPresenter" object="service:StaleLinkExceptionPresenter"/>
-  </contribution>  
-  
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.event.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.event.xml
deleted file mode 100644
index 2f56809..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.event.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.event" version="4.1.0" >
-  
-  Mappings from client side events to IActionListener instances.
-  
-  <service-point id="EventInvoker" interface="org.apache.tapestry.internal.event.IComponentEventInvoker">
-    
-    Manages invoking / connecting events between components and browser.
-    
-    <invoke-factory>
-      <construct class="org.apache.tapestry.internal.event.impl.ComponentEventInvoker">
-        <event-listener service-id="tapestry.ResetEventHub"/>
-        <set-object property="invoker" value="infrastructure:listenerInvoker" />
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="tapestry.services.FactoryServices">
-        <service name="directevent" object="service:tapestry.event.DirectEvent" />
-  </contribution>
-  
-  <service-point id="DirectEvent" interface="org.apache.tapestry.engine.IEngineService">
-        <invoke-factory>
-            <construct class="org.apache.tapestry.engine.DirectEventService">
-                <set-object property="responseRenderer" value="infrastructure:responseRenderer" />
-                <set-object property="request" value="infrastructure:request" />
-                <set-object property="linkFactory" value="infrastructure:linkFactory" />
-                <set-object property="requestCycle" value="infrastructure:requestCycle" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-  
-</module>
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.form.translator.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.form.translator.xml
deleted file mode 100644
index 0c64983..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.form.translator.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.form.translator" version="4.0.0" package="org.apache.tapestry.form.translator">
-
-    Support for input field translators.
-
-
-    <configuration-point id="Translators" schema-id="hivemind.lib.BeanFactoryContribution">
-
-        Defines the available translators that can be used to validate user input on fields.
-
-    </configuration-point>
-
-    <contribution configuration-id="Translators">
-        <bean name="date" class="DateTranslator"/>
-        <bean name="number" class="NumberTranslator"/>
-        <bean name="string" class="StringTranslator"/>
-        <bean name="bigdecimal" class="BigDecimalTranslator" />
-    </contribution>
-
-    <service-point id="TranslatorBeanFactory" interface="org.apache.hivemind.lib.BeanFactory">
-        <invoke-factory service-id="hivemind.lib.BeanFactoryBuilder">
-            <factory vend-class="Translator" configuration-id="Translators"/>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="TranslatorBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
-
-        Factory for the "translator:" binding prefix.
-
-        <invoke-factory>
-            <construct class="TranslatorBindingFactory">
-                <set-service property="translatorBeanFactory" service-id="TranslatorBeanFactory"/>
-                <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <contribution configuration-id="tapestry.bindings.BindingFactories">
-        <binding prefix="translator" service-id="TranslatorBindingFactory"/>
-    </contribution>
-
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.form.validator.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.form.validator.xml
deleted file mode 100644
index 598f873..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.form.validator.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.form.validator" version="4.0.0" package="org.apache.tapestry.form.validator">
-  
-  Support for input field validators.
-  
-  <configuration-point id="Validators">
-    
-    <schema>
-      <element name="validator" key-attribute="name">
-        <attribute name="name"/>
-        <attribute name="configurable" translator="boolean,default=true">
-          If true (the default), then the validator should have a property with the same name
-          which must be configured.
-        </attribute>
-        <attribute name="class" translator="class" required="true">
-          The class which implements the Validator interface, and has a public no-arguments
-          constructor.
-        </attribute>
-        <conversion class="ValidatorContribution">
-          <map attribute="class" property="validatorClass"/>
-        </conversion>
-      </element>
-    </schema>
-    
-  </configuration-point>
-  
-  <contribution configuration-id="Validators">
-    <validator name="email" configurable="false" class="Email"/>
-    <validator name="required" configurable="false" class="Required"/>
-    <validator name="max" class="Max"/>
-    <validator name="maxDate" class="MaxDate"/>
-    <validator name="maxLength" class="MaxLength"/>
-    <validator name="min" class="Min"/>
-    <validator name="minDate" class="MinDate"/>
-    <validator name="minLength" class="MinLength"/>
-    <validator name="pattern" class="Pattern"/>
-    <validator name="match" class="Identity"/>
-    <validator name="differ" class="Identity"/>    
-  </contribution>
-  
-  <service-point id="ValidatorFactory">
-    
-    <invoke-factory>
-      <construct class="ValidatorFactoryImpl">
-        <set-configuration property="validators" configuration-id="Validators"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-    
-  <service-point id="ValidatorsBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
-    
-    Factory for the "translator:" binding prefix.
-    
-    <invoke-factory>
-      <construct class="ValidatorsBindingFactory">
-        <set-service property="validatorFactory" service-id="ValidatorFactory"/>
-        <set-object property="valueConverter" value="infrastructure:valueConverter"/>  
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="tapestry.bindings.BindingFactories">
-    <binding prefix="validators" service-id="ValidatorsBindingFactory"/>
-  </contribution>    
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.form.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.form.xml
deleted file mode 100644
index 898852e..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.form.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.form" version="4.0.0" package="org.apache.tapestry.form">
-  
-  <sub-module descriptor="tapestry.form.translator.xml"/>
-  <sub-module descriptor="tapestry.form.validator.xml"/>
-  
-  Support for form components.
-
-  <service-point id="TranslatedFieldSupport" interface="org.apache.tapestry.form.TranslatedFieldSupport">
-    <invoke-factory>
-      <construct class="TranslatedFieldSupportImpl">
-        <set-service property="threadLocale" service-id="hivemind.ThreadLocale"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-
-  <service-point id="ValidatableFieldSupport" interface="org.apache.tapestry.form.ValidatableFieldSupport">
-    <invoke-factory>
-      <construct class="ValidatableFieldSupportImpl">
-        <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-        <set-service property="threadLocale" service-id="hivemind.ThreadLocale"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <service-point id="FormSupportFactory">
-      <create-instance class="FormSupportFactoryImpl"/>
-  </service-point>
-  
-  <service-point id="GoFormSupportFactory" interface="FormSupportFactory">
-      <create-instance class="org.apache.tapestry.wml.GoFormSupportFactory"/>
-  </service-point>  
-  
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.globals.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.globals.xml
deleted file mode 100644
index 246138b..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.globals.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.globals" version="4.0.0" package="org.apache.tapestry.services">
-  
-  Contains global information about the application and (inside threaded
-  services) about the current request. In addition, services based
-  on this global information are provided.
-  
-  <service-point id="ApplicationGlobals">
-    <create-instance class="impl.ApplicationGlobalsImpl"/>
-  </service-point>
- 
-  
-  <service-point id="RequestGlobals">
-    Stores the request and response for the current thread.
-    
-    <create-instance class="impl.RequestGlobalsImpl" model="threaded"/>
-  </service-point>
-  
-  <service-point id="IRequestCycle" interface="org.apache.tapestry.IRequestCycle">
-   
-    The request cycle for the current request.
-    
-    <invoke-factory service-id="hivemind.lib.ServicePropertyFactory">
-      <construct service-id="RequestGlobals" property="requestCycle"/>
-    </invoke-factory> 
-  </service-point>
-  
-  <service-point id="ResponseBuilder" interface="org.apache.tapestry.services.ResponseBuilder" >
-        The response builder for the current request.
-    
-    <invoke-factory service-id="hivemind.lib.ServicePropertyFactory">
-        <construct service-id="RequestGlobals" property="responseBuilder"/>
-    </invoke-factory> 
-    
-  </service-point>
-  
-  <service-point id="HttpServletRequest" interface="javax.servlet.http.HttpServletRequest">
-    
-    Exposes the current thread's HttpServletRequest as a service. The request is actually
-    stored in the RequestGlobals service.
-    
-    <invoke-factory service-id="hivemind.lib.ServicePropertyFactory">
-      <construct service-id="RequestGlobals" property="request"/>
-    </invoke-factory>
-  </service-point>  
-  
-  <service-point id="WebRequest" interface="org.apache.tapestry.web.WebRequest">
-    
-    Exposes the current thread's WebRequest as a service.  The request is actually
-    stored in the RequestGlobals service.
-    
-    
-    <invoke-factory service-id="hivemind.lib.ServicePropertyFactory">
-      <construct service-id="RequestGlobals" property="webRequest"/>
-    </invoke-factory>
-  </service-point>
-  
-  <service-point id="HttpServletResponse" interface="javax.servlet.http.HttpServletResponse">
-    
-    Exposes the current thread's HttpServletResponse as a service. The response is actually
-    stored in the RequestGlobals service.
-    
-    <invoke-factory service-id="hivemind.lib.ServicePropertyFactory">
-      <construct service-id="RequestGlobals" property="response"/>
-    </invoke-factory>
-  </service-point>   
-  
-  <service-point id="WebResponse" interface="org.apache.tapestry.web.WebResponse">
-    
-    Exposes the current thread's WebResponse as a service.  The response is actually
-    stored in the RequestGlobals service.
-    
-    
-    <invoke-factory service-id="hivemind.lib.ServicePropertyFactory">
-      <construct service-id="RequestGlobals" property="webResponse"/>
-    </invoke-factory>
-  </service-point>  
-  
-  <service-point id="WebContext" interface="org.apache.tapestry.web.WebContext">
-    
-    Exposes the global WebContext (a wrapper around the Servlet or Portlet context)
-    as a service.
-    
-    <invoke-factory service-id="hivemind.lib.ServicePropertyFactory">
-      <construct service-id="ApplicationGlobals" property="webContext"/>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <service-point id="ServletContext" interface="javax.servlet.ServletContext">
-    
-    Exposes the global ServletContext s a service.
-    
-    <invoke-factory service-id="hivemind.lib.ServicePropertyFactory">
-      <construct service-id="ApplicationGlobals" property="servletContext"/>
-    </invoke-factory>
-    
-  </service-point>  
-  
- <service-point id="SetupServletApplicationGlobals" interface="ApplicationInitializer">
-  
-  Contributed into the tapestry.init.ApplicationInitializers configuration point
-  to install the servlet-specific framework services and configurations into the
-  tapestry.globals.ApplicationGlobals service.
-  
-  <invoke-factory>
-    <construct class="impl.SetupServletApplicationGlobals">
-      <set-service property="globals" service-id="ApplicationGlobals"/>
-      <set-configuration property="factoryServices" configuration-id="tapestry.services.FactoryServices"/>
-      <set-service property="infrastructure" service-id="tapestry.Infrastructure"/>
-    </construct>
-  </invoke-factory>
- </service-point>
- 
- <contribution configuration-id="tapestry.init.ApplicationInitializers">
-  <command id="SetupServletApplicationGlobals" object="service:SetupServletApplicationGlobals"
-    after="tapestry.init.ApplicationSpecificationInitializer"/>
- </contribution>  
- 
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="applicationSpecification" object="service-property:ApplicationGlobals:specification"/>
-    <property name="request" object="service:WebRequest"/>
-    <property name="response" object="service:WebResponse"/>
-    <property name="applicationId" object="service-property:ApplicationGlobals:activatorName"/>
-    <property name="context" object="service:WebContext"/>
-    <property name="requestCycle" object="service:IRequestCycle"/>
-    <property name="responseBuilder" object="service:ResponseBuilder" />
-  </contribution> 
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.init.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.init.xml
deleted file mode 100644
index 5431a2b..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.init.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.init" version="4.0.0" package="org.apache.tapestry.services">
-
-  Contains all the application initialization logic.  
-  
-  <service-point id="MasterInitializer" interface="ApplicationInitializer">
-    
-    Master startup for the application; invokes an ordered series of other ApplicationInitializer instances contributed to
-    the ApplicationInitializers configuration point.
-    
-    <invoke-factory service-id="hivemind.lib.ChainFactory">
-      <construct configuration-id="ApplicationInitializers"/>
-    </invoke-factory>
-  </service-point>
-
-  <configuration-point id="ApplicationInitializers" schema-id="hivemind.lib.ChainContribution">
-  
-    An orderable list of ApplicationInitializer services.
-
-  </configuration-point>
-
-  <service-point id="ApplicationSpecificationInitializer" interface="ApplicationInitializer">
-    
-    Locates and parses the application specification and informs the ApplicationGlobals service about it.
-    
-    <invoke-factory>
-      <construct class="impl.ApplicationSpecificationInitializer">
-        <set-service property="classpathResourceFactory" service-id="tapestry.ClasspathResourceFactory"/>
-        <set-service property="globals" service-id="tapestry.globals.ApplicationGlobals"/>
-        <set-service property="parser" service-id="tapestry.parse.SpecificationParser"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <service-point id="WebContextInitializer" interface="ApplicationInitializer">
-    
-    Creates and stores the WebContext (wrapper around the ServletContext)
-    into ApplicationGlobals.
-    
-    <invoke-factory>
-      <construct class="impl.WebContextInitializer">
-        <set-service property="globals" service-id="tapestry.globals.ApplicationGlobals"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="ApplicationInitializers">
-    <command id="WebContextInitializer" object="service:WebContextInitializer" before="*"/>
-    <command id="ApplicationSpecificationInitializer" object="service:ApplicationSpecificationInitializer"/>
-  </contribution>
-  
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.l10n.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.l10n.xml
deleted file mode 100644
index ee6f954..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.l10n.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<module id="tapestry.l10n" version="4.0.0" package="org.apache.tapestry.l10n">

-    

-  Extensible support for localization of resources.

-  

-    <configuration-point id="ResourceLocalizers" schema-id="hivemind.lib.ChainContribution">
-        

-        Defines the commands, each implementing ResourceLocalizer, that define how to localize

-        a Resource.

-        
-    </configuration-point>    

-    

-    <contribution configuration-id="ResourceLocalizers">
-        

-        <command id="default" after="*" object="instance:DefaultResourceLocalizer"/>

-        
-    </contribution>

-    

-    <service-point id="ResourceLocalizer">
-        

-        Service for localizing resources, based on the ResourceLocalizers configuration

-        point.

-        

-        <invoke-factory service-id="hivemind.lib.ChainFactory">
-            <construct configuration-id="ResourceLocalizers"/>
-        </invoke-factory>

-                
-    </service-point>

-    

-    

-    <contribution configuration-id="tapestry.Infrastructure">
-        <property name="resourceLocalizer" object="service:ResourceLocalizer"/>
-    </contribution>

-</module>

-    
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.listener.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.listener.xml
deleted file mode 100644
index e24c9b3..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.listener.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.listener" version="4.0.0" package="org.apache.tapestry.listener">
-  
-  Mappings from listener methods to IActionListener instances.
-  
-  <service-point id="ListenerMapSource" interface="ListenerMapSource">
-    
-    A source for listener maps, which map a listener 
-    method name to the invocation of a public instance method with
-    the same name.
-    
-    <invoke-factory>
-      <construct class="ListenerMapSourceImpl">
-        <event-listener service-id="tapestry.ResetEventHub"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>  
-  
-  <configuration-point id="ListenerInvoker" schema-id="hivemind.lib.Pipeline">
-    
-    Defines filters that may be applied whenever a listener object is invoked.
-    Listener objects are typically, but not always, wrappers around listener methods.
-    
-  </configuration-point>
-  
-  <service-point id="ListenerInvoker">
-    
-    Service used to invoke listener objects. The final service may include
-    filters contributed to the InvokeListener configuration point.
-    
-    <invoke-factory service-id="hivemind.lib.PipelineFactory">
-      <create-pipeline 
-        filter-interface="ListenerInvokerFilter" 
-        configuration-id="ListenerInvoker" 
-        terminator="instance:ListenerInvokerTerminator"/>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="listenerMapSource" object="service:ListenerMapSource"/>
-    <property name="listenerInvoker" object="service:ListenerInvoker"/>
-  </contribution>  
-</module>
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.markup.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.markup.xml
deleted file mode 100644
index ee00a63..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.markup.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.markup" version="4.0.0" package="org.apache.tapestry.markup">
-  
-  Support for markup writers and filters.
-  
-  <configuration-point id="MarkupFilters">
-    
-    Defines mapping between content types and markup filters; the filters
-    are then used when constructing markup writers.
-    
-    <schema>
-      <element name="content" key-attribute="type">
-        <attribute name="type">
-          The content type to define a filter for, such as "text/html". Should
-          use all lower-case.
-        </attribute>
-        <attribute name="filter" translator="object" required="true">
-          The filter object, which must implement the MarkupFilter interface.
-        </attribute>
-        
-        <rules>
-          
-          <!-- We always use this configuration as a Map, so pushing and adding
-               is sufficient.  A Map can be generated because we specify a 
-               key attribute. -->
-          <push-attribute attribute="filter"/>
-          <invoke-parent method="addElement"/>
-        </rules>
-      </element>
-    </schema>
-    
-  </configuration-point>
-  
-  <contribution configuration-id="MarkupFilters">
-    <content type="text/html" filter="instance:AsciiMarkupFilter"/>
-    <content type="text/html;charset=utf-8" filter="instance:UTFMarkupFilter"/>
-    <content type="text/plain" filter="instance:AsciiMarkupFilter"/>
-    <content type="text/xml;charset=utf-8" filter="instance:UTFMarkupFilter"/>
-    <content type="text/xml" filter="instance:XmlMarkupFilter"/>
-    <content type="text/vnd.wap.wml" filter="instance:org.apache.tapestry.wml.WMLMarkupFilter"/>
-  </contribution>
-  
-  <service-point id="MarkupWriterSource">
-    
-    Source for markup writer instances, used when rendering page-oriented
-    responses to the client.
-    
-    <invoke-factory>
-      <construct class="MarkupWriterSourceImpl">
-        <set-configuration property="contributions" configuration-id="MarkupFilters"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="markupWriterSource" object="service:MarkupWriterSource"/>    
-  </contribution>
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.multipart.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.multipart.xml
deleted file mode 100644
index 51c5d87..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.multipart.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.multipart" version="4.0.0" package="org.apache.tapestry.multipart">
-  
-  Support for multipart/form-data encoded requests used for file uploads.
-  
-  <service-point id="ServletMultipartDecoder">
-    
-    Service responsible for parsing and decoding multipart form submissions. 
-    
-    <create-instance class="MultipartDecoderImpl" model="threaded"/>
-    
-  </service-point>
-  
-  <service-point id="ServletMultipartDecoderFilter" interface="org.apache.tapestry.services.ServletRequestServicerFilter">
-    
-    Identifies upload requests and passes them to the MultipartDecoder service
-    for decoding.
-    
-    <invoke-factory>
-      <construct class="MultipartDecoderFilter">
-        <set-service property="decoder" service-id="ServletMultipartDecoder"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="tapestry.request.ServletRequestServicerPipeline">
-    <filter name="ServletMultipartDecoderFilter" 
-      object="service:ServletMultipartDecoderFilter" 
-      after="tapestry.request.SetupRequestEncoding"/>
-  </contribution>
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="multipartDecoder" object="service:ServletMultipartDecoder"/>
-  </contribution>
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.ognl.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.ognl.xml
deleted file mode 100644
index fd6ac67..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.ognl.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.ognl" version="4.0.0" package="org.apache.tapestry.services">
-
-  Wrappers around the Object Graph Navigation Library.
-  
-  <!-- Currently, a single TypeConverter is allowed, specified as an app extension.  Need to augment that with
-       a configuration point to specify as many as necessary. -->
-
-  <service-point id="ExpressionEvaluator" interface="ExpressionEvaluator">
-    <invoke-factory>
-      <construct class="impl.ExpressionEvaluatorImpl">
-        <set-service property="classFactory" service-id="tapestry.ClassFactory" />
-        <set-object property="applicationSpecification" value="infrastructure:applicationSpecification"/>
-        <set-configuration property="contributions" configuration-id="PropertyAccessors"/>
-        <set-configuration property="nullHandlerContributions" configuration-id="NullHandlers"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-
-  <service-point id="ExpressionCache" interface="ExpressionCache">
-    <invoke-factory>
-      <construct class="impl.ExpressionCacheImpl" initialize-method="initializeService">
-        <event-listener service-id="tapestry.ResetEventHub"/>
-        <event-listener service-id="tapestry.describe.ReportStatusHub"/>
-        <set-service property="evaluator" service-id="ExpressionEvaluator"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <configuration-point id="NullHandlers">
-    
-    Defines handler objects mapped to particular classes. OGNL NullHandler objects
-    allow specifying how nulls are handled within OGNL expressions on a class-by-class
-    basis.
-    
-    <schema>
-      
-      <element name="null-handler">
-        
-        <attribute name="class" required="true" translator="class">
-          The class for which the null handler will be used.
-        </attribute>
-        
-        <attribute name="object" required="true" translator="object">
-          An object implementing the OGNL NullHandler interface.
-        </attribute>
-        
-        <conversion class="impl.NullHandlerContribution">
-          <map attribute="class" property="subjectClass"/>
-          <map attribute="object" property="handler"/>
-        </conversion>
-      </element>
-      
-    </schema>
-  </configuration-point>  
-  
-  <configuration-point id="PropertyAccessors">
-    
-    Defines accessor objects mapped to particular classes. OGNL property accessors
-    allow for additional properties to be applied to objects beyond those
-    provided by standard JavaBeans naming conventions.
-    
-    <schema>
-      
-      <element name="accessor">
-        
-        <attribute name="class" required="true" translator="class">
-          The class for which the accessor will be used.
-        </attribute>
-        
-        <attribute name="object" required="true" translator="object">
-          An object implementing the OGNL PropertyAccessor interface.
-        </attribute>
-        
-        <conversion class="impl.PropertyAccessorContribution">
-          <map attribute="class" property="subjectClass"/>
-          <map attribute="object" property="accessor"/>
-        </conversion>
-      </element>
-      
-    </schema>
-  </configuration-point>
-  
-  <contribution configuration-id="PropertyAccessors">
-    
-    <accessor class="org.apache.tapestry.IBeanProvider" object="instance:org.apache.tapestry.bean.BeanProviderPropertyAccessor"/>
-    <accessor class="org.apache.tapestry.listener.ListenerMap" object="instance:org.apache.tapestry.listener.ListenerMapPropertyAccessor"/>
-  </contribution>
-  
-</module>
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.page.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.page.xml
deleted file mode 100644
index d0ddf90..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.page.xml
+++ /dev/null
@@ -1,255 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.page" version="4.0.0" package="org.apache.tapestry.pageload">
-
-    Module for services related to page loading and pooling.
-
-    <service-point id="PageSource" interface="org.apache.tapestry.engine.IPageSource">
-
-        <invoke-factory>
-            <construct class="PageSource" initialize-method="initializeService">
-                <set-service property="pageSpecificationResolver" service-id="PageSpecificationResolver"/>
-                <set-service property="loader" service-id="PageLoader"/>
-                <set-service property="propertySource" service-id="tapestry.props.ApplicationPropertySource" />
-                <event-listener service-id="tapestry.ResetEventHub"/>
-                <event-listener service-id="tapestry.describe.ReportStatusHub"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <contribution configuration-id="hivemind.FactoryDefaults">
-        <default symbol="org.apache.tapestry.page-pool-min-idle" value="1" />
-        <default symbol="org.apache.tapestry.page-pool-max-active" value="-1" />
-        <default symbol="org.apache.tapestry.page-pool-max-idle" value="-1" />
-        <default symbol="org.apache.tapestry.page-pool-evict-thread-sleep-minutes" value="4" />
-        <default symbol="org.apache.tapestry.page-pool-evict-idle-page-minutes" value="40" />
-    </contribution>
-
-    <service-point id="PageLoader" interface="org.apache.tapestry.engine.IPageLoader">
-
-        <invoke-factory model="pooled">
-            <construct class="PageLoader">
-                <set-service property="componentConstructorFactory" service-id="tapestry.enhance.ComponentConstructorFactory"/>
-                <set-service property="componentResolver" service-id="ComponentSpecificationResolver"/>
-                <set-service property="bindingSource" service-id="tapestry.bindings.BindingSource"/>
-                <set-service property="componentTemplateLoader" service-id="ComponentTemplateLoader"/>
-                <set-service property="establishDefaultParameterValuesVisitor" service-id="EstablishDefaultParameterValuesVisitor"/>
-                <set-service property="assetSource" service-id="tapestry.asset.AssetSource"/>
-                <set-service property="pageClassProvider" service-id="PageClassProvider"/>
-                <set-service property="componentClassProvider" service-id="ComponentClassProvider"/>
-                <set-object property="componentPropertySource" value="infrastructure:componentPropertySource"/>
-                <set-service property="threadLocale" service-id="hivemind.ThreadLocale"/>
-                <set-service property="eventConnectionVisitor" service-id="EventConnectionVisitor" />
-                <set-service property="componentTypeVisitor" service-id="ComponentTypeVisitor" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="EstablishDefaultParameterValuesVisitor" interface="IComponentVisitor">
-
-        Visits all the components of a page, locates unbound parameters, and plugs in a default value (if available)
-        for each. Used by the PageLoader.
-
-        <invoke-factory>
-            <construct class="EstablishDefaultParameterValuesVisitor">
-                <set-service property="bindingSource" service-id="tapestry.bindings.BindingSource"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="EventConnectionVisitor" interface="IComponentVisitor">
-
-        Visits all the components of a page and wires up their @EventListener connections to the actual components
-        targeted once a valid instance of the page is available to resolve them against.
-
-        <invoke-factory model="pooled">
-            <construct class="EventConnectionVisitor">
-                <set-service property="eventInvoker" service-id="tapestry.event.EventInvoker"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="ComponentTypeVisitor" interface="IComponentVisitor">
-
-        Visits all components in the tree and inspects them for IWidget / or IForm instances
-        so that the appropriate javascript libraries are included automatically.
-
-        <invoke-factory model="pooled">
-            <construct class="ComponentTypeVisitor" />
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="PageSpecificationResolver" interface="org.apache.tapestry.resolver.PageSpecificationResolver">
-
-        <invoke-factory model="threaded">
-            <construct class="org.apache.tapestry.resolver.PageSpecificationResolverImpl">
-                <set-object property="specificationSource" value="infrastructure:specificationSource"/>
-                <set-object property="componentPropertySource" value="infrastructure:componentPropertySource"/>
-                <set-service property="delegate" service-id="SpecificationResolverDelegate"/>
-                <set-object property="applicationId" value="infrastructure:applicationId"/>
-                <set-object property="contextRoot" value="infrastructure:contextRoot"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="SpecificationResolverDelegate" interface="org.apache.tapestry.resolver.ISpecificationResolverDelegate">
-
-        <invoke-factory service-id="tapestry.ExtensionLookupFactory">
-            <lookup extension-name="org.apache.tapestry.specification-resolver-delegate"/>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="ComponentSpecificationResolver" interface="org.apache.tapestry.resolver.ComponentSpecificationResolver">
-
-        Locates the specification for a component or page.
-
-        <invoke-factory model="threaded">
-            <construct class="org.apache.tapestry.resolver.ComponentSpecificationResolverImpl">
-                <set-object property="specificationSource" value="infrastructure:specificationSource"/>
-                <set-service property="delegate" service-id="SpecificationResolverDelegate"/>
-                <set-object property="applicationId" value="infrastructure:applicationId"/>
-                <set-object property="contextRoot" value="infrastructure:contextRoot"/>
-                <set-object property="classFinder" value="infrastructure:classFinder"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="ComponentTemplateLoader" interface="org.apache.tapestry.services.ComponentTemplateLoader">
-
-        Locates and loads the template for a component (or page).
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.ComponentTemplateLoaderImpl">
-                <set-object property="templateSource" value="infrastructure:templateSource"/>
-                <set-service property="pageLoader" service-id="PageLoader"/>
-                <set-service property="bindingSource" service-id="tapestry.bindings.BindingSource"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="ComponentResourceResolver" interface="org.apache.tapestry.resolver.IComponentResourceResolver">
-
-        Locates and loads resource relative to a component / page.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.resolver.ComponentResourceResolverImpl">
-                <set-object property="contextRoot" value="infrastructure:contextRoot"/>
-                <set-object property="applicationId" value="infrastructure:applicationId"/>
-                <set-service property="contextAssetFactory" service-id="tapestry.asset.ContextAssetFactory" />
-                <set-service property="classpathAssetFactory" service-id="tapestry.asset.ClasspathAssetFactory" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <configuration-point id="PageClassProviderChain" schema-id="hivemind.lib.ChainContribution">
-
-        Chain of objects implementing ComponentClassProvider that are used to locate  the page class
-        for a particular page.
-
-    </configuration-point>
-
-    <service-point id="PageClassProvider" interface="ComponentClassProvider">
-
-        Chain built around thePgaeClassProviderChain configuration point, used to determine
-        the class to instantiate for a particular page (within a namespace).
-
-        <invoke-factory service-id="hivemind.lib.ChainFactory">
-            <construct configuration-id="PageClassProviderChain"/>
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="PageClassProviderChain">
-        <command id="specification" before="*" object="instance:SpecificationComponentClassProvider"/>
-        <command id="namespace-class-search" object="service:NamespaceClassSearchPageClassProvider"/>
-        <command id="namespace-default" object="instance:NamespaceDefaultPageClassProvider" after="namespace-class-search"/>
-        <command id="global-default" object="service:GlobalDefaultPageClassProvider" after="*"/>
-    </contribution>
-
-    <service-point id="NamespaceClassSearchPageClassProvider" interface="ComponentClassProvider">
-
-        Searches for a class with a name matching the page name in the default package
-        (and in packages defined by the namespace's org.apache.tapestry.page-class-packages meta property).
-
-        <invoke-factory>
-            <construct class="NamespaceClassSearchComponentClassProvider">
-                <set property="packagesName" value="org.apache.tapestry.page-class-packages"/>
-                <set-object property="classFinder" value="infrastructure:classFinder"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="GlobalDefaultPageClassProvider" interface="ComponentClassProvider">
-
-        Final command in the chain; returns a fixed value based on a global property.
-
-        <invoke-factory>
-            <construct class="GlobalDefaultComponentClassProvider">
-                <set-object property="componentClassName" value="global-property:org.apache.tapestry.default-page-class"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <configuration-point id="ComponentClassProviderChain" schema-id="hivemind.lib.ChainContribution">
-
-        Chain of objects implement ComponentClassProvider that are used to locate the
-        component class for a particular component.
-    </configuration-point>
-
-    <service-point id="ComponentClassProvider">
-
-        Chain built around ComponentClassProviderChain configuration point, used to
-        determine the class to instantiate for a particular component (within a namespace).
-
-        <invoke-factory service-id="hivemind.lib.ChainFactory">
-            <construct configuration-id="ComponentClassProviderChain"/>
-        </invoke-factory>
-
-    </service-point>
-
-    <contribution configuration-id="ComponentClassProviderChain">
-        <command id="specification" before="*" object="instance:SpecificationComponentClassProvider"/>
-        <command id="namespace-class-search" object="service:NamespaceClassSearchComponentClassProvider"/>
-        <command id="global-default" object="instance:GlobalDefaultComponentClassProvider,componentClassName=org.apache.tapestry.BaseComponent" after="*"/>
-    </contribution>
-
-    <service-point id="NamespaceClassSearchComponentClassProvider" interface="ComponentClassProvider">
-
-        Searches for a class with a name matching the component type in the default package
-        (and in packages defined by the namespace's org.apache.tapestry.component-class-packages meta property).
-
-        <invoke-factory>
-            <construct class="NamespaceClassSearchComponentClassProvider">
-                <set property="packagesName" value="org.apache.tapestry.component-class-packages"/>
-                <set-object property="classFinder" value="infrastructure:classFinder"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <contribution configuration-id="tapestry.Infrastructure">
-        <property name="pageSource" object="service:PageSource"/>
-    </contribution>
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.parse.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.parse.xml
deleted file mode 100644
index f73ce5e..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.parse.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.parse" version="4.0.0" package="org.apache.tapestry.parse">
-
-    Template and specification parsers.
-
-    <service-point id="SpecificationParser" interface="ISpecificationParser">
-
-        The parser for all types of specifications (page, component, library and application).
-
-        <!-- This one is constructed a little wierdly, to help maintain compatibility with Spindle. -->
-
-        <invoke-factory model="pooled">
-            <construct class="SpecificationParser" autowire-services="false">
-                <error-handler/>
-                <log/>
-                <class-resolver/>
-                <object> instance:org.apache.tapestry.spec.SpecFactory </object>
-
-                <!-- Can't use infrastructure:valueConverter, because SpecificationParser will be created earlier than
-               tapestry.Infrastructure -->
-
-                <set-service property="valueConverter" service-id="tapestry.coerce.ValueConverter"/>
-                <set-service property="bindingSource" service-id="tapestry.bindings.BindingSource"/>
-            </construct>
-        </invoke-factory>
-
-        <interceptor service-id="hivemind.LoggingInterceptor"/>
-    </service-point>
-
-    <service-point id="SpecificationSource" interface="org.apache.tapestry.engine.ISpecificationSource">
-
-        Used to obtain specifications for pages, components and libraries.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.SpecificationSourceImpl">
-                <set-service property="parser" service-id="SpecificationParser"/>
-                <set-object property="specification" value="infrastructure:applicationSpecification"/>
-                <set-object property="assetSource" value="service:tapestry.asset.AssetSource"/>
-                <event-listener service-id="tapestry.ResetEventHub"/>
-                <event-listener service-id="tapestry.describe.ReportStatusHub"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="TemplateParser" interface="ITemplateParser">
-
-        Parses a template into a series of tokens that are used to construct a component's body.
-
-        <invoke-factory model="threaded">
-            <construct class="TemplateParser">
-                <set-object property="factory" value="instance:TemplateTokenFactory"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="TemplateSource" interface="org.apache.tapestry.services.TemplateSource">
-
-        A smart cache for localized templates for pages and components.  Retrieves a template on
-        first reference, and returns it on subsequent references.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.TemplateSourceImpl">
-                <set-service property="parser" service-id="TemplateParser"/>
-                <set-service property="delegate" service-id="TemplateSourceDelegate"/>
-                <set-object property="contextRoot" value="infrastructure:contextRoot"/>
-                <set-service property="componentSpecificationResolver" service-id="tapestry.page.ComponentSpecificationResolver"/>
-                <set-object property="componentPropertySource"  value="infrastructure:componentPropertySource"/>
-                <set-object property="localizer" value="infrastructure:resourceLocalizer"/>
-                <set-service property="componentResourceResolver" service-id="tapestry.page.ComponentResourceResolver" />
-                <event-listener service-id="tapestry.ResetEventHub"/>
-                <event-listener service-id="tapestry.describe.ReportStatusHub"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="TemplateSourceDelegate" interface="org.apache.tapestry.engine.ITemplateSourceDelegate">
-
-        Delegate for TemplateSource that knows how to find templates in unusual places.
-
-        <invoke-factory service-id="tapestry.ExtensionLookupFactory">
-            <lookup extension-name="org.apache.tapestry.template-source-delegate"/>
-        </invoke-factory>
-
-    </service-point>
-
-    <contribution configuration-id="tapestry.Infrastructure">
-        <property name="templateSource" object="service:TemplateSource"/>
-        <property name="specificationSource" object="service:SpecificationSource"/>
-    </contribution>
-
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.persist.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.persist.xml
deleted file mode 100644
index f652d51..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.persist.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.persist" version="4.0.0" package="org.apache.tapestry.record">
-
-  Services for managing page property persistence.
-  
-  <configuration-point id="PersistenceStrategy">
-    
-    Defines the different strategies for persisting page properties between requests.
-    The names match against the persist attribute of the property element.
-    
-    <schema>
-      <element name="strategy">
-        <attribute name="name" required="true" unique="true">
-          A unique name for the strategy.
-        </attribute>
-        <attribute name="object" required="true" translator="object">
-          The object implementing PropertyPersistenceStrategy.
-        </attribute>
-        <conversion class="PropertyPersistenceStrategyContribution">
-          <map attribute="object" property="strategy"/>
-        </conversion>
-      </element>
-    </schema>
-    
-  </configuration-point>
-
-  
-  <service-point id="SessionPropertyPersistenceStrategy" interface="PropertyPersistenceStrategy">
-    
-    The standard persistence strategy, mapped to the name "session". Simply stores each property as
-    a session attribute.
-    
-    <invoke-factory>
-      <construct class="SessionPropertyPersistenceStrategy">
-        <set-object property="request" value="infrastructure:request"/>
-        <set-object property="applicationId" value="infrastructure:applicationId"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-
-  <service-point id="AppClientPropertyPersistenceScope" interface="ClientPropertyPersistenceScope">
-    
-    Stores client persistent properties in all cases.
-    
-    <create-instance class="AppClientPropertyPersistenceScope"/>
-    
-  </service-point>
-    
-  <service-point id="PageClientPropertyPersistenceScope" interface="ClientPropertyPersistenceScope">
-    
-    Stores client persistent properties only if the page remains the same.
-    When a new page is activated and rendered, the values for other pages
-    are discarded.
-    
-    <invoke-factory>
-      <construct class="PageClientPropertyPersistenceScope">
-        <set-object property="requestCycle" value="infrastructure:requestCycle"/>
-      </construct>
-    </invoke-factory> 
-  </service-point>
-    
-  <service-point id="PageClientPropertyPersistenceStrategy" interface="PropertyPersistenceStrategy">
-    
-    Stores persistent properties on the client, as either hidden form fields, or as
-    query parameters. Persistent data for each page is stored in a seperate query parameter.
-    The service stores client-specific state internally, and so it must use the threaded service model.
-    
-    <invoke-factory model="threaded">
-      <construct class="ClientPropertyPersistenceStrategy">
-        <set-object property="request" value="infrastructure:request"/>
-        <set-object property="scope" value="service:PageClientPropertyPersistenceScope"/>
-        <set-object property="encoder" value="service:PersistentPropertyDataEncoder"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <service-point id="PersistentPropertyDataEncoder">
-    
-    Responsible for encoding and decoding client persistent properties into MIME streams.
-    
-    <invoke-factory>
-      <construct class="PersistentPropertyDataEncoderImpl"/>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <service-point id="AppClientPropertyPersistenceStrategy" interface="PropertyPersistenceStrategy">
-    
-    Stores persistent properties on the client, as either hidden form fields, or as
-    query parameters. Persistent data for each page is stored in a seperate query parameter.
-    The service stores client-specific state internally, and so it must use the threaded service model.
-    
-    <invoke-factory model="threaded">
-      <construct class="ClientPropertyPersistenceStrategy">
-        <set-object property="request" value="infrastructure:request"/>
-        <set-object property="scope" value="service:AppClientPropertyPersistenceScope"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <service-point id="PropertyPersistenceStrategySource" interface="PropertyPersistenceStrategySource">
-    
-    Used by other services to locate persistence strategies and run certain operations across all strategies.
-    
-    <invoke-factory>
-      <construct class="PropertyPersistenceStrategySourceImpl">
-        <set-configuration property="contributions" configuration-id="PersistenceStrategy"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-
-  <contribution configuration-id="PersistenceStrategy">
-    <strategy name="session" object="service:SessionPropertyPersistenceStrategy"/>
-    <strategy name="client" object="service:PageClientPropertyPersistenceStrategy"/>
-    <strategy name="client:page" object="service:PageClientPropertyPersistenceStrategy"/>
-    <strategy name="client:app" object="service:AppClientPropertyPersistenceStrategy"/>
-  </contribution>
-  
-</module>
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.props.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.props.xml
deleted file mode 100644
index acf0c60..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.props.xml
+++ /dev/null
@@ -1,210 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.props" version="4.0.0" package="org.apache.tapestry.engine">
-
-    Defines services for locating configuration data that may be stored in the web application
-    deployment descriptor, the application specification, or elsewhere.
-
-
-    <configuration-point id="GlobalPropertySources" schema-id="hivemind.lib.ChainContribution">
-
-        Specifies a sequence of property sources used to resolve global application configuration data, which may
-        be in web.xml (servlet init parameters or servlet
-        context init parameters), or provided as HiveMind substitution symbol.
-
-    </configuration-point>
-
-    <service-point id="GlobalPropertySource" interface="IPropertySource">
-
-        Service point for obtaining configuration data resolved using GlobalPropertySources
-        configuration point.
-
-        <invoke-factory service-id="hivemind.lib.ChainFactory">
-            <construct configuration-id="GlobalPropertySources"/>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="WebActivatorPropertySource" interface="IPropertySource">
-
-        Searches for properties in the web activator's (i.e. HttpServlet's) configuration.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.InitializationParameterHolderPropertySource">
-                <set-object property="holder" value="service-property:tapestry.globals.ApplicationGlobals:activator"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="WebContextPropertySource" interface="IPropertySource">
-
-        Searches the WebContext (i.e., ServletContext) for properties.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.InitializationParameterHolderPropertySource">
-                <set-service property="holder" service-id="tapestry.globals.WebContext"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="SymbolSourcesPropertySource" interface="IPropertySource">
-
-        Bridges into HiveMind's symbol sources to resolve configuration properties.
-
-        <!-- This is tricky, we need to use a custom builder factory. -->
-
-        <invoke-factory service-id="SymbolSourcesPropertySourceFactory"/>
-
-    </service-point>
-
-    <service-point id="SymbolSourcesPropertySourceFactory" interface="org.apache.hivemind.ServiceImplementationFactory"
-                   parameters-occurs="none" visibility="private">
-
-        A special-purpose ServiceImplementationFactory used just to create the SymbolSourcesPropertySource service.
-
-        <create-instance class="org.apache.tapestry.services.impl.SymbolSourcesPropertySourceFactory"/>
-    </service-point>
-
-    <contribution configuration-id="GlobalPropertySources">
-        <command id="activator" object="service:WebActivatorPropertySource"/>
-        <command id="context" object="service:WebContextPropertySource" after="activator"/>
-        <command id="symbols" object="service:SymbolSourcesPropertySource" after="context"/>
-    </contribution>
-
-
-    <service-point id="ComponentPropertySource" interface="org.apache.tapestry.services.ComponentPropertySource">
-
-        Provides access to component meta-data, with a search path that  includes the component's namespace,
-        and the GlobalPropertySource.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.ComponentPropertySourceImpl">
-                <set-service property="chainBuilder" service-id="hivemind.lib.ChainBuilder"/>
-                <set-service property="globalProperties" service-id="GlobalPropertySource"/>
-                <event-listener service-id="tapestry.ResetEventHub"/>
-            </construct>
-
-        </invoke-factory>
-    </service-point>
-
-    <configuration-point id="ApplicationPropertySources" schema-id="hivemind.lib.ChainContribution">
-
-        Property sources used by the application, which includes a search of the
-        application specification, a delegate of the application specification, the servlet and
-        servlet context, and JVM System Properties.
-
-    </configuration-point>
-
-    <service-point id="ApplicationPropertySource" interface="IPropertySource">
-
-        Service point for obtaining configuration data resolved using ApplicationPropertySources
-        configuration point.
-
-        <invoke-factory service-id="hivemind.lib.ChainFactory">
-            <construct configuration-id="ApplicationPropertySources"/>
-        </invoke-factory>
-
-    </service-point>
-
-    <contribution configuration-id="ApplicationPropertySources">
-        <command id="app-spec" object="service:ApplicationSpecificationPropertySource"/>
-        <command id="activator" object="service:WebActivatorPropertySource" after="app-spec"/>
-        <command id="context" object="service:WebContextPropertySource" after="activator"/>
-        <command id="delegate" object="service:DelegatePropertySource" after="context"/>
-        <command id="symbols" object="service:SymbolSourcesPropertySource" after="delegate"/>
-    </contribution>
-
-    <service-point id="ApplicationSpecificationPropertySource" interface="IPropertySource">
-
-        Obtains property values from application specification meta-data.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.util.PropertyHolderPropertySource">
-                <object>infrastructure:applicationSpecification</object>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="DelegatePropertySource" interface="IPropertySource">
-
-        Property source provided as an application extension: org.apache.tapestry.property-source.
-
-        <invoke-factory service-id="tapestry.ExtensionLookupFactory">
-            <lookup extension-name="org.apache.tapestry.property-source"/>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="GlobalPropertyObjectProvider" interface="org.apache.hivemind.service.ObjectProvider">
-
-        An object provider based on obtaining global properties from the GlobalPropertySource
-        service.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.PropertyObjectProvider">
-                <set-service property="source" service-id="GlobalPropertySource"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="ApplicationPropertyObjectProvider" interface="org.apache.hivemind.service.ObjectProvider">
-
-        An object provider based on obtained properties from the ApplicationPropertySource service.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.PropertyObjectProvider">
-                <set-service property="source" service-id="ApplicationPropertySource"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <contribution configuration-id="hivemind.ObjectProviders">
-        <provider prefix="global-property" service-id="GlobalPropertyObjectProvider"/>
-        <provider prefix="app-property" service-id="ApplicationPropertyObjectProvider"/>
-    </contribution>
-
-    <contribution configuration-id="hivemind.FactoryDefaults">
-        <default symbol="org.apache.tapestry.engine-class" value="org.apache.tapestry.engine.BaseEngine"/>
-        <default symbol="org.apache.tapestry.visit-class" value="java.util.HashMap"/>
-        <default symbol="org.apache.tapestry.output-encoding" value="UTF-8"/>
-        <default symbol="org.apache.tapestry.enhance.disable-abstract-method-validation" value="false"/>
-        <default symbol="org.apache.tapestry.default-page-class" value="org.apache.tapestry.html.BasePage"/>
-        <default symbol="org.apache.tapestry.template-extension" value="html"/>
-        <default symbol="org.apache.tapestry.jwcid-attribute-name" value="jwcid"/>
-        <default symbol="org.apache.tapestry.default-binding-prefix" value="ognl"/>
-        <default symbol="org.apache.tapestry.renderTags" value="true" />
-	    <default symbol="org.apache.tapestry.default-property-persistence-strategy" value="session"/>
-    </contribution>
-
-    <!-- This may need to be converted into an IPropertySource and injected into the ApplicationPropertySources
-   chain. -->
-
-    <contribution configuration-id="hivemind.SymbolSources">
-        <source name="SystemProperties" before="hivemind.ApplicationDefaults" class="org.apache.hivemind.impl.SystemPropertiesSymbolSource"/>
-    </contribution>
-
-    <contribution configuration-id="tapestry.Infrastructure">
-        <property name="applicationPropertySource" object="service:ApplicationPropertySource"/>
-        <property name="globalPropertySource" object="service:GlobalPropertySource"/>
-        <property name="componentPropertySource" object="service:ComponentPropertySource"/>
-    </contribution>
-
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.render.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.render.xml
deleted file mode 100644
index 3bfa81b..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.render.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.render" version="4.1.0" >
-  
-  Various rendering services.
-  
-  <service-point id="ComponentRenderChain" interface="org.apache.tapestry.services.ComponentRenderWorker">
-    
-    The chain of enhancement workers that render after each individual
-    component renders. Configured from ComponentRenderWorkers configuration point.
-    
-    <invoke-factory service-id="hivemind.lib.ChainFactory">
-      <construct configuration-id="ComponentRenderWorkers"/>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <configuration-point id="ComponentRenderWorkers" schema-id="hivemind.lib.ChainContribution">
-    
-    Provides the logic for component class render contributions.
-    
-  </configuration-point>
-  
-  <service-point id="ComponentEventConnectionWorker" interface="org.apache.tapestry.services.ComponentRenderWorker">
-    
-    Wires javascript events to components, adds javascript contributions to 
-    render.
-    
-    <invoke-factory model="pooled">
-      <construct class="org.apache.tapestry.services.impl.ComponentEventConnectionWorker">
-        <set-service property="eventInvoker" service-id="tapestry.event.EventInvoker"/>
-        <set-service property="eventEngine" service-id="tapestry.event.DirectEvent"/>
-        <set property="componentScript" value="/org/apache/tapestry/ComponentEvent.script" />
-        <set property="widgetScript" value="/org/apache/tapestry/dojo/html/WidgetEvent.script" />
-        <set property="elementScript" value="/org/apache/tapestry/html/ElementEvent.script" />
-        <set-service property="scriptSource" service-id="tapestry.script.ScriptSource"/>
-      </construct>
-    </invoke-factory>
-  
-  </service-point>
-  
-  <contribution configuration-id="ComponentRenderWorkers">
-    <command id="component-event-connection" object="service:ComponentEventConnectionWorker" />
-  </contribution>
-  
-</module>
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.request.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.request.xml
deleted file mode 100644
index a6ff8d8..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.request.xml
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.request" version="4.0.0" package="org.apache.tapestry.services">
-
-    Services and configurations for the Tapestry request processing pipeline.
-    It is expected that the IEngine interface will eventually "dissolve" into
-    a collection of loosely bound services.
-
-    <service-point id="EnginePool" interface="ObjectPool">
-
-        Contains engine instances, keyed on locale, ready for use in the current request.
-
-        <invoke-factory>
-            <construct class="impl.ObjectPoolImpl">
-                <event-listener service-id="tapestry.ResetEventHub"/>
-                <event-listener service-id="tapestry.describe.ReportStatusHub"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="RequestLocaleManager">
-
-        Encapsulates the logic for extracting the locale for the current request.
-
-        <invoke-factory model="pooled">
-            <construct class="impl.RequestLocaleManagerImpl">
-                <set-service property="request" service-id="tapestry.globals.WebRequest"/>
-                <set-object property="cookieSource" value="infrastructure:cookieSource"/>
-                <set-service property="threadLocale" service-id="hivemind.ThreadLocale"/>
-                <set-object property="acceptedLocales" value="app-property:org.apache.tapestry.accepted-locales"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="hivemind.FactoryDefaults">
-        <default symbol="org.apache.tapestry.accepted-locales" value=""/>
-        <!-- One week, in seconds -->
-        <default symbol="org.apache.tapestry.default-cookie-max-age" value="604800"/>
-    </contribution>
-
-    <service-point id="CookieSource">
-
-        Allows access to incoming HTTP cookie values for the active (per-thread) request.
-
-        <invoke-factory>
-            <construct class="impl.CookieSourceImpl">
-                <set-service property="request" service-id="tapestry.globals.HttpServletRequest"/>
-                <set-service property="response" service-id="tapestry.globals.HttpServletResponse"/>
-                <set property="defaultMaxAge" value="${org.apache.tapestry.default-cookie-max-age}"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="EngineManager">
-        Obtains an IEngine implementation for the current request, either from a pool of
-        such engine instance, from a factory, or from the HttpSession.
-
-        <invoke-factory>
-            <construct class="impl.EngineManagerImpl">
-                <set-service property="enginePool" service-id="EnginePool"/>
-                <set-service property="engineFactory" service-id="EngineFactory"/>
-                <set-service property="localeManager" service-id="RequestLocaleManager"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="EngineFactory">
-
-        Responsible for creating new instances of IEngine as needed.
-
-        <invoke-factory>
-            <construct class="impl.EngineFactoryImpl">
-                <set-object property="applicationSpecification" value="infrastructure:applicationSpecification"/>
-                <set-object property="defaultEngineClassName" value="global-property:org.apache.tapestry.engine-class"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <configuration-point id="ServletRequestServicerPipeline" schema-id="hivemind.lib.Pipeline">
-
-        A pipeline for processing an incoming servlet request.
-
-    </configuration-point>
-
-    <service-point id="ServletRequestServicer">
-
-        A pipeline for handling each request.
-
-        <invoke-factory service-id="hivemind.lib.PipelineFactory">
-            <create-pipeline filter-interface="ServletRequestServicerFilter" configuration-id="ServletRequestServicerPipeline"/>
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="ServletRequestServicerPipeline">
-        <filter name="DecodedRequestInjector" object="service:DecodedRequestInjector"/>
-        <filter name="SetupRequestEncoding" object="service:SetupRequestEncoding"/>
-        <terminator object="service:WebRequestServicerPipelineBridge"/>
-    </contribution>
-
-    <service-point id="WebRequestServicerPipelineBridge" interface="ServletRequestServicer">
-        <invoke-factory>
-            <construct class="impl.WebRequestServicerPipelineBridge">
-                <set-service property="webRequestServicer" service-id="WebRequestServicer"/>
-                <set-service property="requestGlobals" service-id="tapestry.globals.RequestGlobals"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <configuration-point id="WebRequestServicerPipeline" schema-id="hivemind.lib.Pipeline">
-
-        A pipeline, invoked by the ServletRequestPipeline, that will process the request
-        using the generic WebRequest and WebResponse objects.
-
-    </configuration-point>
-
-    <service-point id="WebRequestServicer">
-
-        A secondary pipeline for handling each requests wrapped in the WebRequest abstraction
-        layer.
-
-        <invoke-factory service-id="hivemind.lib.PipelineFactory">
-            <create-pipeline filter-interface="WebRequestServicerFilter" configuration-id="WebRequestServicerPipeline"/>
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="WebRequestServicerPipeline">
-        <terminator object="service:InvokeEngineTerminator"/>
-    </contribution>
-
-    <service-point id="InvokeEngineTerminator" interface="WebRequestServicer">
-
-        Terminator service for the WebRequestServicerPipeline. This locates an IEngine instance that
-        can take control of the remainder of the request.
-
-        <invoke-factory>
-            <construct class="impl.InvokeEngineTerminator">
-                <set-service property="engineManager" service-id="EngineManager"/>
-                <set-service property="infrastructure" service-id="tapestry.Infrastructure"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="DecodedRequestInjector" interface="ServletRequestServicerFilter">
-
-        Filter contributed into the ServletRequestServicerPipeline whose responsibility is
-        to provide a modified HttpServletRequest that reflects the results of
-        an IRequestDecoder (provided as the org.apache.tapestry.request-decoder
-        application extension).  If the extension exists, then a different HttpServletRequest
-        is substituted.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.request.DecodedRequestInjector">
-                <set-object property="applicationSpecification" value="infrastructure:applicationSpecification"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="ResponseRenderer">
-        Renders the active page as the response.
-
-        <invoke-factory>
-            <construct class="impl.ResponseRendererImpl" />
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="tapestry.Infrastructure">
-        <property name="responseRenderer" object="service:ResponseRenderer"/>
-        <property name="requestCycleFactory" object="service:RequestCycleFactory"/>
-        <property name="cookieSource" object="service:CookieSource"/>
-    </contribution>
-
-    <service-point id="AbsoluteURLBuilder">
-
-        Uses HttpServletRequest information to build complete URLs, suitable for use when
-        sending client-side redirects.
-
-        <invoke-factory>
-            <construct class="impl.AbsoluteURLBuilderImpl">
-                <set-object property="request" value="infrastructure:request"/>
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="RequestCycleFactory">
-
-        Creates new IRequestCycle instances.
-
-        <invoke-factory>
-            <construct class="impl.RequestCycleFactoryImpl">
-                <set-object property="encoders"
-                            value="service-property:tapestry.url.LinkFactory:serviceEncoders"/>
-                <set-service property="strategySource" service-id="tapestry.persist.PropertyPersistenceStrategySource"/>
-                <set-service property="infrastructure" service-id="tapestry.Infrastructure"/>
-                <set-service property="absoluteURLBuilder" service-id="AbsoluteURLBuilder"/>
-                <set-service property="requestGlobals" service-id="tapestry.globals.RequestGlobals"/>
-                <set-service property="responseDelegateFactory" service-id="tapestry.services.ResponseDelegateFactory" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="SetupRequestEncoding" interface="ServletRequestServicerFilter">
-
-        Sets the output encoding for the request.
-
-        <invoke-factory>
-            <construct class="impl.SetupRequestEncoding">
-                <set-object property="outputEncoding"	value="app-property:org.apache.tapestry.output-encoding"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="DisableCachingFilter" interface="WebRequestServicerFilter">
-
-        Uses the ResetEventHub  to reset any cached data at the end of the request.
-        Only used during development, not in production.
-
-        <invoke-factory>
-            <construct class="impl.DisableCachingFilter">
-                <set-object property="resetEventHub" value="infrastructure:resetEventHub"/>
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="WebRequestServicerPipeline" if="property org.apache.tapestry.disable-caching">
-        <filter name="DisableCachingFilter" object="service:DisableCachingFilter"/>
-    </contribution>
-
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.script.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.script.xml
deleted file mode 100644
index aeb4b16..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.script.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.script" version="4.0.0" package="org.apache.tapestry.engine">
-  
-  Module focused on client-side Javascript templates.
-  
-  <service-point id="ScriptSource" interface="IScriptSource">
-    
-    <invoke-factory>
-      <construct class="DefaultScriptSource">
-        <set-service property="expressionEvaluator" service-id="tapestry.ognl.ExpressionEvaluator"/>
-        <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-        <event-listener service-id="tapestry.ResetEventHub"/>
-        <event-listener service-id="tapestry.describe.ReportStatusHub"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="scriptSource" object="service:ScriptSource"/>    
-  </contribution>
-
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.services.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.services.xml
deleted file mode 100644
index e07fbd5..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.services.xml
+++ /dev/null
@@ -1,285 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<module id="tapestry.services" version="4.0.0" package="org.apache.tapestry.engine">
-
-    Contains the Tapestry engine services, and the configuration points for creating new ones (or
-    overriding the factory defaults).
-
-    <schema id="EngineServices">
-
-        <element name="service" key-attribute="name">
-            <attribute name="name">
-                The name of the service; the service itself must provide the same name from its
-                getName() method.
-            </attribute>
-            <attribute name="object" translator="object" required="true">
-
-                Engine services are typically, but not definitively, HiveMind services (they can be
-                simple objects as well).
-
-            </attribute>
-
-            <conversion class="org.apache.tapestry.services.impl.EngineServiceContribution">
-                <map attribute="object" property="service" />
-            </conversion>
-
-        </element>
-
-    </schema>
-
-    <configuration-point id="FactoryServices" schema-id="EngineServices">
-
-        Configuration point for the factory default services. Each contributed service must have a
-        unique name.
-
-    </configuration-point>
-
-    <contribution configuration-id="FactoryServices">
-        <service name="home" object="service:Home" />
-        <service name="direct" object="service:Direct" />
-        <service name="page" object="service:Page" />
-        <service name="reset" object="service:Reset" />
-        <service name="restart" object="service:Restart" />
-        <service name="asset" object="service:Asset" />
-        <service name="external" object="service:External" />
-    </contribution>
-
-    <service-point id="External" interface="IEngineService">
-        <invoke-factory>
-            <construct class="ExternalService">
-                <set-object property="responseRenderer" value="infrastructure:responseRenderer" />
-                <set-object property="linkFactory" value="infrastructure:linkFactory" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="Asset" interface="IEngineService">
-        <invoke-factory>
-            <construct class="org.apache.tapestry.asset.AssetService">
-                <set-object property="exceptionReporter"
-                    value="infrastructure:requestExceptionReporter" />
-                <set-object property="linkFactory" value="infrastructure:linkFactory" />
-                <set-service property="context" service-id="tapestry.globals.WebContext" />
-                <set-object property="response" value="service:tapestry.globals.WebResponse" />
-                <set-service property="digestSource" service-id="tapestry.asset.ResourceDigestSource" />
-                <set-service property="unprotectedMatcher" service-id="tapestry.asset.UnprotectedResourceMatcher" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="Restart" interface="IEngineService">
-        <invoke-factory>
-            <construct class="RestartService">
-                <set-service property="request" service-id="tapestry.globals.HttpServletRequest" />
-                <set-service property="response" service-id="tapestry.globals.HttpServletResponse" />
-                <set-object property="servletPath"
-                    value="app-property:org.apache.tapestry.servlet-path" />
-                <set-object property="linkFactory" value="infrastructure:linkFactory" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="Home" interface="IEngineService">
-        <invoke-factory>
-            <construct class="HomeService">
-                <set-object property="responseRenderer" value="infrastructure:responseRenderer" />
-                <set-object property="linkFactory" value="infrastructure:linkFactory" />
-                <set-object property="pageName" value="app-property:org.apache.tapestry.home-page" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="Direct" interface="IEngineService">
-        <invoke-factory>
-            <construct class="DirectService">
-                <set-object property="responseRenderer" value="infrastructure:responseRenderer" />
-                <set-object property="request" value="infrastructure:request" />
-                <set-object property="linkFactory" value="infrastructure:linkFactory" />
-                <set-object property="requestCycle" value="infrastructure:requestCycle" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="Page" interface="IEngineService">
-        <invoke-factory>
-            <construct class="PageService">
-                <set-object property="responseRenderer" value="infrastructure:responseRenderer" />
-                <set-object property="linkFactory" value="infrastructure:linkFactory" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="Reset" interface="IEngineService">
-        <invoke-factory>
-            <construct class="ResetService">
-                <set-object property="responseRenderer" value="infrastructure:responseRenderer" />
-                <set-service property="resetEventHub" service-id="tapestry.ResetEventHub" />
-                <set property="enabled" value="${org.apache.tapestry.enable-reset-service}" />
-                <set-object property="linkFactory" value="infrastructure:linkFactory" />
-                <set-object property="requestCycle" value="infrastructure:requestCycle" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="hivemind.FactoryDefaults">
-        <default symbol="org.apache.tapestry.enable-reset-service" value="false" />
-        <default symbol="org.apache.tapestry.home-page" value="Home" />
-    </contribution>
-
-    <configuration-point id="ApplicationServices" schema-id="EngineServices">
-
-        Configuration point for application services. Each contributed service must have a unique
-        name, but services contributed here will override services provided in the FactoryServices
-        configuration point.
-
-    </configuration-point>
-
-    <service-point id="ServiceMap" interface="org.apache.tapestry.services.ServiceMap">
-
-        Used to locate an engine service by name.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.ServiceMapImpl">
-                <set-object property="factoryServices"
-                    value="service-property:tapestry.globals.ApplicationGlobals:factoryServices" />
-                <set-configuration property="applicationServices"
-                    configuration-id="ApplicationServices" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <service-point id="EngineServiceObjectProvider"
-        interface="org.apache.hivemind.service.ObjectProvider">
-
-        Implementation of the "engine-service:" object provider prefix.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.EngineServiceObjectProvider">
-                <set-service property="serviceMap" service-id="ServiceMap" />
-            </construct>
-        </invoke-factory>
-
-    </service-point>
-
-    <contribution configuration-id="hivemind.ObjectProviders">
-        <provider prefix="engine-service" service-id="EngineServiceObjectProvider" />
-    </contribution>
-
-    <contribution configuration-id="tapestry.Infrastructure">
-        <property name="serviceMap" object="service:ServiceMap" />
-    </contribution>
-
-    <service-point id="ResponseDelegateFactory" interface="org.apache.tapestry.services.ResponseDelegateFactory">
-        Delegates choosing an appropriate response to the configured response builder contributions.
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.ResponseDelegateFactoryImpl">
-                <set-configuration property="responseContributors"
-                    configuration-id="ResponseContributors" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-    
-    <configuration-point id="ResponseContributors" occurs="1..n">
-        Defines the available set of ComponentInvokerFactory services, where there should be a one
-        to one relationship between a particular type of ajax request and the invoker that handles
-        the response. More types of handlers may be created, like service invocation handlers..
-        <schema>
-            <element name="invoker">
-                <attribute name="object" required="true" translator="object" />
-                <rules>
-                    <push-attribute attribute="object" />
-                    <invoke-parent method="addElement" />
-                </rules>
-            </element>
-        </schema>
-    </configuration-point>
-    
-    <service-point id="JSONResponseContributor" interface="org.apache.tapestry.services.ResponseContributor">
-        Defines the factory service that is responsible for determining if a particular request is
-        one that should recieve a JSON response.
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.JSONResponseContributorImpl" >
-                <set-service property="localeManager" service-id="tapestry.request.RequestLocaleManager"/>
-                <set-object property="markupWriterSource"  value="infrastructure:markupWriterSource"/>
-                <set-object property="webResponse" value="infrastructure:response"/>
-                <set-object property="webRequest" value="infrastructure:request"/>
-                <set-object property="assetFactory" value="infrastructure:assetFactory" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-    
-    <service-point id="DojoAjaxResponseContributor" interface="org.apache.tapestry.services.ResponseContributor">
-        Defines the factory service that is responsible for determining if a particular request is
-        one that should recieve dojo ajax responses.
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.DojoAjaxResponseContributorImpl" >
-                <set-service property="localeManager" service-id="tapestry.request.RequestLocaleManager"/>
-                <set-object property="markupWriterSource"  value="infrastructure:markupWriterSource"/>
-                <set-object property="webResponse" value="infrastructure:response"/>
-                <set-object property="webRequest" value="infrastructure:request"/>
-                <set-object property="exceptionPageName" value="infrastructure:exceptionPageName"/>
-                <set-object property="staleSessionPageName" value="infrastructure:staleSessionPageName" />
-                <set-object property="staleLinkPageName" value="infrastructure:staleLinkPageName" />
-                <set-object property="assetFactory" value="infrastructure:assetFactory" />
-                <set-service property="pageService" service-id="tapestry.services.Page" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-    
-    <service-point id="DefaultResponseContributor" interface="org.apache.tapestry.services.ResponseContributor">
-        Defines the factory service that is responsible for determining if a particular request is
-        one that should recieve a normal Html response. This will probably be the one chosen in
-        the majority of cases.
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.DefaultResponseContributorImpl" >
-                <set-service property="localeManager" service-id="tapestry.request.RequestLocaleManager"/>
-                <set-object property="markupWriterSource"  value="infrastructure:markupWriterSource"/>
-                <set-object property="webResponse" value="infrastructure:response"/>
-                <set-object property="assetFactory" value="infrastructure:assetFactory" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <service-point id="PrototypeResponseContributor" interface="org.apache.tapestry.services.ResponseContributor">
-
-        Contributor responsible for sniffing out and building an appropriate ResponseBuilder object for handling
-        prototype javascript XHR requests.
-
-        <invoke-factory>
-            <construct class="org.apache.tapestry.services.impl.PrototypeResponseContributorImpl" >
-                <set-service property="localeManager" service-id="tapestry.request.RequestLocaleManager"/>
-                <set-object property="markupWriterSource"  value="infrastructure:markupWriterSource"/>
-                <set-object property="webResponse" value="infrastructure:response"/>
-                <set-object property="webRequest" value="infrastructure:request"/>
-                <set-object property="assetFactory" value="infrastructure:assetFactory" />
-            </construct>
-        </invoke-factory>
-    </service-point>
-
-    <contribution configuration-id="ResponseContributors">
-        Order of addition is very important here, contributors may claim a particular response as
-        belonging to a certain protocol, so no guarantees are made as to the
-        friendlyness/compatibility between various implementations.
-        <invoker object="service:JSONResponseContributor" />
-        <invoker object="service:DojoAjaxResponseContributor" />
-        <invoker object="service:PrototypeResponseContributor" />
-        <invoker object="service:DefaultResponseContributor" />
-    </contribution>
-
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.state.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.state.xml
deleted file mode 100644
index c281eb2..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.state.xml
+++ /dev/null
@@ -1,210 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.state" version="4.0.0" package="org.apache.tapestry.engine.state">
-  
-  Management of application state objects.
-  
-  
-  <schema id="StateObjectContribution">
-    
-    Schema used with the ApplicationObjects (and FactoryObjects)
-    configuration points,  used to declare
-    application-wide state objects.
-    
-    <element name="state-object" key-attribute="name">
-      An object that stores application wide state, referenced
-      by a unique name.
-      
-      <attribute name="name">
-        The unique name by which the state object is accessed.
-      </attribute>
-      
-      <attribute name="scope" required="true">
-        The scope of the attribute, which controls its lifecycle
-        and how it is persisted between requests.  Matches
-        a contribution to the
-        StateObjectPersistenceManagers configuration point.
-      </attribute>
-      
-      <rules>
-        <create-object class="StateObjectContribution"/>
-        <read-attribute attribute="name" property="name"/>
-        <read-attribute attribute="scope" property="scope"/>
-        <invoke-parent method="addElement"/>
-      </rules>
-      
-      <element name="create-instance">
-        Defines a simple factory for the state object, by instantiating
-        an instance of a class.
-        
-        <attribute name="class" translator="class" required="true">
-          The fully qualified name of the class to instantiate.
-        </attribute>
-        
-        <conversion class="InstantiateClassStateObjectFactory"
-          parent-method="setFactory">
-          <map attribute="class" property="objectClass"/>
-        </conversion>
-      </element>
-      
-      <element name="invoke-factory">
-        
-        Defines a reference to a state object factory
-        (an object implementing StateObjectFactory).
-        
-        <attribute name="object" translator="object" required="true">
-          The factory object that  will create the state object as needed.
-        </attribute>
-        
-        <rules>
-          <push-attribute attribute="object"/>
-          <invoke-parent method="setFactory"/>
-        </rules>
-        
-      </element>
-    </element>
-  </schema>
-  
-  <configuration-point id="FactoryObjects" schema-id="StateObjectContribution">
-    
-    Contains factory default definitions of application state objects.
-    These definitions can be overriden by
-    contributing to the ApplicationObjects configuration point.
-    
-  </configuration-point>
-  
-  <contribution configuration-id="FactoryObjects">
-    <state-object name="global" scope="application">
-      <invoke-factory object="service:DefaultGlobalFactory"/>
-    </state-object>
-    
-    <state-object name="visit" scope="session">
-      <invoke-factory object="service:DefaultVisitFactory"/>
-    </state-object>
-  </contribution>
-  
-  <service-point id="DefaultGlobalFactory" interface="StateObjectFactory">
-    
-    <invoke-factory>
-      <construct class="DefaultGlobalStateObjectFactory">
-        <set-object property="className" value="app-property:org.apache.tapestry.global-class"/>
-      </construct>
-    </invoke-factory>
-            
-    Constructs the global state object, based on the org.apache.tapestry.global-class
-    configuration property, or a synchronized HashMap if not specified.
-    
-  </service-point>
-  
-  <service-point id="DefaultVisitFactory" interface="StateObjectFactory">
-    
-    Constructs the visit state object, based on the org.apache.tapestry.visit-class
-    configuration property.
-    
-    <invoke-factory>
-      <construct class="NamedClassStateObjectFactory">
-        <set-object property="className" value="app-property:org.apache.tapestry.visit-class"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <configuration-point id="ApplicationObjects" schema-id="StateObjectContribution">
-    
-    Defines application state objects available to the application.
-    Definitions here override definitions with the same name
-    in the FactoryObjects configuration point.
-    
-  </configuration-point>
-  
-  <configuration-point id="StateObjectPersistenceManagers">
-    
-    Defines different ways of persisting application
-    state objects between requests; this is the 'scope'
-    of a state object.
-    
-    <schema>
-      <element name="manager" key-attribute="scope">
-        Defines a manager, which is referenced by its scope name.
-        
-        <attribute name="scope">
-          The name of the manager.
-        </attribute>
-        
-        <attribute name="object" translator="object" required="true">
-          The static object persistence manager, an object implementing the StateObjectPersistenceManager interface.
-        </attribute> 
-        
-        <rules>
-          <push-attribute attribute="object"/>
-          <invoke-parent method="addElement"/>
-        </rules>
-        
-      </element>
-    </schema>
-    
-  </configuration-point>
-  
-  <contribution configuration-id="StateObjectPersistenceManagers">
-    <manager scope="application" object="instance:ApplicationScopeManager"/>
-    <manager scope="session" object="service:SessionScopeManager"/>
-  </contribution>
-  
-  <service-point id="SessionScopeManager" interface="StateObjectPersistenceManager">
-    Manages application state objects in the session.
-    
-    <invoke-factory>
-      <construct class="SessionScopeManager">
-        <set-object property="request" value="infrastructure:request"/>
-        <set-object property="applicationId" value="infrastructure:applicationId"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <service-point id="StateObjectManagerRegistry"
-    interface="StateObjectManagerRegistry">
-  
-    Service that organizes the information from the
-    FactoryObjects, ApplicationObjects and StateObjectPersistenceManagers configuration
-    points into a set of StateObjectManagers.
-    
-    <invoke-factory>
-      <construct class="SOMRegistryImpl">
-        <set-configuration property="factoryContributions"
-          configuration-id="FactoryObjects"/>
-        <set-configuration property="applicationContributions"
-            configuration-id="ApplicationObjects"/>
-        <set-configuration property="persistenceManagers"
-          configuration-id="StateObjectPersistenceManagers"/>
-      </construct>
-    </invoke-factory>  
-    
-  </service-point>
-  
-  <service-point id="ApplicationStateManager">
-    
-    <invoke-factory model="pooled">
-      <construct class="ApplicationStateManagerImpl">
-        <set-service property="registry" service-id="StateObjectManagerRegistry"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="applicationStateManager" object="service:ApplicationStateManager"/>    
-  </contribution>
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.url.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.url.xml
deleted file mode 100644
index 2a17fb1..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.url.xml
+++ /dev/null
@@ -1,251 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.url" version="4.0.0" package="org.apache.tapestry.services">
-
-  Control over constructing and recognizing URLs for Tapestry engine services.
-  
-  <service-point id="LinkFactory" interface="LinkFactory">
-    
-    A source of ILinks for engine services.
-    
-    <invoke-factory>
-      <construct class="impl.LinkFactoryImpl">
-        <set-object property="dataSqueezer" value="infrastructure:dataSqueezer"/>
-        <set-configuration property="contributions" configuration-id="ServiceEncoders"/>
-        <set-object property="servletPath" value="app-property:org.apache.tapestry.servlet-path"/>
-		<set-object property="request" value="infrastructure:request"/>
-        <set-object property="requestCycle" value="infrastructure:requestCycle"/>
-        <set-service property="persistenceStrategySource" service-id="tapestry.persist.PropertyPersistenceStrategySource"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="hivemind.FactoryDefaults">
-    <default symbol="org.apache.tapestry.servlet-path" value="/app"/>
-  </contribution>
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="linkFactory" object="service:LinkFactory"/>
-  </contribution>  
-
-  <configuration-point id="ServiceEncoders">
-    
-    Defines a number of encoders that can encode and decode service requests.
-    
-    <schema>
-      
-      <element name="encoder">
-        
-        A flexible encoder provided as an object.
-        
-        <attribute name="id" required="true" unique="true">
-          Unique id for this encoder, used when ordering encoder order.
-        </attribute>
-        <attribute name="before">
-          List of ids of encoders that must follow this encoder.
-        </attribute>
-        <attribute name="after">
-          List of ids of encoders that must precede this encoder.
-        </attribute>
-        <attribute name="object" required="true" translator="object">
-          The object that implements the ServiceEncoder interface.
-        </attribute>
-        
-        <conversion class="impl.ServiceEncoderContribution">
-          <map attribute="object" property="encoder"/>
-        </conversion>
-      </element>
-      
-      <element name="direct-service-encoder">
-        
-        An encoder specialized for the direct service; it encodes the page name
-        and the component id into the servlet path, and uses one of two
-        extensions to indicate whether the link is stateful or stateless.
-        
-        <attribute name="id" required="true" unique="true">
-          Unique id for this encoder, used when ordering encoder order.
-        </attribute>
-        <attribute name="before">
-          List of ids of encoders that must come before this encoder.
-        </attribute>
-        <attribute name="after">
-          List of ids of encoders that must follow this encoder.
-        </attribute>
-        <attribute name="stateless-extension" required="true">
-          The path extension to use for stateless links.
-        </attribute>
-        <attribute name="stateful-extension" required="true">
-          The path extension to use for stateful links.
-        </attribute>
-        
-        <rules>
-          <create-object class="impl.ServiceEncoderContribution"/>
-          <read-attribute attribute="id" property="id"/>
-          <read-attribute attribute="before" property="before"/>
-          <read-attribute attribute="after" property="after"/>
-          <invoke-parent method="addElement"/>
-          
-          <create-object class="org.apache.tapestry.engine.encoders.DirectServiceEncoder"/>
-          <read-attribute attribute="stateless-extension" property="statelessExtension"/>
-          <read-attribute attribute="stateful-extension" property="statefulExtension"/>
-          <invoke-parent method="setEncoder"/>          
-        </rules>        
-      </element>
-      
-      <element name="page-service-encoder">
-        
-        An encoder that identifies the service as a pathname extension, and encodes the page as the
-        servlet path.
-        
-        <attribute name="id" required="true" unique="true">
-          Unique id for this encoder, used when ordering encoder order.
-        </attribute>
-        <attribute name="before">
-          List of ids of encoders that must come before this encoder.
-        </attribute>
-        <attribute name="after">
-          List of ids of encoders that must follow this encoder.
-        </attribute>
-        <attribute name="extension" required="true">
-          The extension used to represent the service, i.e., "html".
-        </attribute>
-        <attribute name="service" required="true">
-          The name of the service mapped to the extension, i.e., "page".
-        </attribute>
-        
-        <rules>
-          <create-object class="impl.ServiceEncoderContribution"/>
-          <read-attribute attribute="id" property="id"/>
-          <read-attribute attribute="before" property="before"/>
-          <read-attribute attribute="after" property="after"/>
-          <invoke-parent method="addElement"/>
-          
-          <create-object class="org.apache.tapestry.engine.encoders.PageServiceEncoder"/>
-          <read-attribute attribute="extension" property="extension"/>
-          <read-attribute attribute="service" property="serviceName"/>
-          <invoke-parent method="setEncoder"/>          
-        </rules>
-        
-      </element>
-      
-      <element name="extension-encoder">
-        
-        An encoder that encodes just the service id, as /service.extension.
-        
-        <attribute name="id" required="true" unique="true">
-          Unique id for this encoder, used when ordering encoder order.
-        </attribute>
-        <attribute name="before">
-          List of ids of encoders that must come before this encoder.
-        </attribute>
-        <attribute name="after">
-          List of ids of encoders that must follow this encoder.
-        </attribute>
-        <attribute name="extension" required="true">
-          The extension used, such as "svc".
-        </attribute>
-        
-        <rules>
-          <create-object class="impl.ServiceEncoderContribution"/>
-          <read-attribute attribute="id" property="id"/>
-          <read-attribute attribute="before" property="before"/>
-          <read-attribute attribute="after" property="after"/>
-          <invoke-parent method="addElement"/>
-          
-          <create-object class="org.apache.tapestry.engine.encoders.ServiceExtensionEncoder"/>
-          <read-attribute attribute="extension" property="extension"/>
-          <invoke-parent method="setEncoder"/>          
-        </rules>
-        
-      </element>      
-      
-      <element name="asset-encoder">
-        
-        <attribute name="id" required="true" unique="true">
-          Unique id for this encoder, used when ordering encoder order.
-        </attribute>
-        <attribute name="before">
-          List of ids of encoders that must come before this encoder.
-        </attribute>
-        <attribute name="after">
-          List of ids of encoders that must follow this encoder.
-        </attribute>
-        <attribute name="path" required="true">
-          The path to map to the asset service, typically "/assets/".
-        </attribute>        
-        
-        <rules>
-          <create-object class="impl.ServiceEncoderContribution"/>
-          <read-attribute attribute="id" property="id"/>
-          <read-attribute attribute="before" property="before"/>
-          <read-attribute attribute="after" property="after"/>
-          <invoke-parent method="addElement"/>
-          
-          <create-object class="org.apache.tapestry.engine.encoders.AssetEncoder"/>
-          <read-attribute attribute="path" property="path"/>
-          <invoke-parent method="setEncoder"/>          
-        </rules>        
-        
-      </element>
-
-      <element name="path-encoder">
-
-          An encoder the encodes just the service name as a path such as "/service" .
-        <attribute name="id" required="true" unique="true">
-          Unique id for this encoder, used when ordering encoder order.
-        </attribute>
-        <attribute name="before">
-          List of ids of encoders that must come before this encoder.
-        </attribute>
-        <attribute name="after">
-          List of ids of encoders that must follow this encoder.
-        </attribute>
-        <attribute name="path" required="true">
-          The path to map to the service, typically "/service".
-        </attribute>
-        <attribute name="service" required="true">
-            The service name that can be used to find the right service to handle the path.
-        </attribute>
-        <rules>
-          <create-object class="impl.ServiceEncoderContribution"/>
-          <read-attribute attribute="id" property="id"/>
-          <read-attribute attribute="before" property="before"/>
-          <read-attribute attribute="after" property="after"/>
-          <invoke-parent method="addElement"/>
-
-          <create-object class="org.apache.tapestry.engine.encoders.PathEncoder"/>
-          <read-attribute attribute="path" property="path"/>
-          <read-attribute attribute="service" property="service" />
-          <invoke-parent method="setEncoder"/>
-        </rules>
-
-      </element>
-
-    </schema>
-    
-  </configuration-point>
-  
-  <service-point id="BaseTagWriter" interface="org.apache.tapestry.IRender">
-    
-    Used by the Shell component to write the &lt;base&gt; tag.
-    
-    <create-instance class="impl.BaseTagWriter"/>
-    
-  </service-point>
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.valid.xml b/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.valid.xml
deleted file mode 100644
index 92b5cf3..0000000
--- a/tapestry/tapestry-framework/src/descriptor/META-INF/tapestry.valid.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.valid" version="4.0.0" package="org.apache.tapestry.valid">
-  
-  Support for input validation subsystem (centered around
-  the ValidField component).
-  
-  <configuration-point id="Validators" schema-id="hivemind.lib.BeanFactoryContribution"/>
-  
-  <contribution configuration-id="Validators">
-    <bean name="string" class="StringValidator"/>
-    <bean name="date" class="DateValidator"/>
-    <bean name="email" class="EmailValidator"/>
-    <bean name="url" class="UrlValidator"/>
-    <bean name="int" class="IntValidator"/>
-  </contribution>
-  
-  <service-point id="ValidatorBeanFactory" interface="org.apache.hivemind.lib.BeanFactory">
-    <invoke-factory service-id="hivemind.lib.BeanFactoryBuilder">
-      <factory vend-class="IValidator" configuration-id="Validators"/>
-    </invoke-factory>
-  </service-point>
-  
-  <service-point id="ValidatorBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
-    
-    Creates bindings that provide access to validators defined
-    by the tapestry.valid.Validators configuration point.
-    
-    <invoke-factory>
-      <construct class="ValidatorBindingFactory">
-        <set-service property="validatorBeanFactory" service-id="ValidatorBeanFactory"/>
-        <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-        <set-service property="scriptSource" service-id="tapestry.script.ScriptSource" />
-      </construct>
-    </invoke-factory>
-  </service-point>  
-  
-  <contribution configuration-id="tapestry.bindings.BindingFactories">
-    <binding prefix="validator" service-id="ValidatorBindingFactory"/>
-  </contribution>
-  
-  
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
deleted file mode 100644
index 7f6e286..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
+++ /dev/null
@@ -1,939 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Messages;
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.bean.BeanProvider;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.internal.Component;
-import org.apache.tapestry.internal.event.IComponentEventInvoker;
-import org.apache.tapestry.listener.ListenerMap;
-import org.apache.tapestry.services.ComponentRenderWorker;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-
-import java.util.*;
-
-/**
- * Abstract base class implementing the {@link IComponent}interface.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class AbstractComponent extends BaseLocatable implements IDirectEvent, Component {
-    
-    private static final int MAP_SIZE = 5;
-    
-    private static final int BODY_INIT_SIZE = 5;
-
-    /**
-     * Used in place of JDK 1.3's Collections.EMPTY_MAP (which is not available in JDK 1.2).
-     */
-
-    private static final Map EMPTY_MAP = Collections.unmodifiableMap(new HashMap(1));
-    
-    /**
-     * The page that contains the component, possibly itself (if the component is in fact, a page).
-     */
-
-    private IPage _page;
-
-    /**
-     * The component which contains the component. This will only be null if the component is
-     * actually a page.
-     */
-
-    private IComponent _container;
-
-    /**
-     * The simple id of this component.
-     */
-
-    private String _id;
-    
-    /**
-     * The fully qualified id of this component. This is calculated the first time it is needed,
-     * then cached for later.
-     */
-    private String _idPath;
-
-    /**
-     * The html tag name that was used to reference the component.
-     */
-    private String _templateTagName;
-    
-    /**
-     * A {@link Map}of all bindings (for which there isn't a corresponding JavaBeans property); the
-     * keys are the names of formal and informal parameters.
-     */
-
-    private Map _bindings;
-
-    private Map _components;
-
-    private INamespace _namespace;
-
-    /**
-     * The number of {@link IRender}objects in the body of this component.
-     */
-
-    protected int _bodyCount = 0;
-
-    /**
-     * An aray of elements in the body of this component.
-     */
-
-    protected IRender[] _body;
-
-    /**
-     * The components' asset map.
-     */
-
-    private Map _assets;
-
-    /**
-     * A mapping that allows public instance methods to be dressed up as {@link IActionListener}
-     * listener objects.
-     * 
-     * @since 1.0.2
-     */
-
-    private ListenerMap _listeners;
-
-    /**
-     * A bean provider; these are lazily created as needed.
-     * 
-     * @since 1.0.4
-     */
-
-    private IBeanProvider _beans;
-
-    /**
-     * Returns true if the component is currently rendering.
-     * 
-     * @see #prepareForRender(IRequestCycle)
-     * @see #cleanupAfterRender(IRequestCycle)
-     * @since 4.0
-     */
-
-    private boolean _rendering;
-
-    /**
-     * @since 4.0
-     */
-
-    private boolean _active;
-
-    /** @since 4.0 */
-
-    private IContainedComponent _containedComponent;
-
-    private boolean _hasEvents;
-    
-    public void addAsset(String name, IAsset asset)
-    {
-        Defense.notNull(name, "name");
-        Defense.notNull(asset, "asset");
-
-        checkActiveLock();
-
-        if (_assets == null)
-            _assets = new HashMap(MAP_SIZE);
-
-        _assets.put(name, asset);
-    }
-
-    public void addComponent(IComponent component)
-    {
-        Defense.notNull(component, "component");
-
-        checkActiveLock();
-
-        if (_components == null)
-            _components = new HashMap(MAP_SIZE);
-        
-        _components.put(component.getId(), component);
-    }
-
-    /**
-     * Adds an element (which may be static text or a component) as a body element of this
-     * component. Such elements are rendered by {@link #renderBody(IMarkupWriter, IRequestCycle)}.
-     * 
-     * @since 2.2
-     */
-
-    public void addBody(IRender element)
-    {
-        Defense.notNull(element, "element");
-        
-        // Should check the specification to see if this component
-        // allows body. Curently, this is checked by the component
-        // in render(), which is silly.
-
-        if (_body == null)
-        {
-            _body = new IRender[BODY_INIT_SIZE];
-            _body[0] = element;
-
-            _bodyCount = 1;
-            return;
-        }
-
-        // No more room? Make the array bigger.
-
-        if (_bodyCount == _body.length)
-        {
-            IRender[] newWrapped;
-
-            newWrapped = new IRender[_body.length * 2];
-
-            System.arraycopy(_body, 0, newWrapped, 0, _bodyCount);
-
-            _body = newWrapped;
-        }
-
-        _body[_bodyCount++] = element;
-    }
-
-    
-    public IRender[] getContainedRenderers()
-    {
-        return _body;
-    }
-
-    public IRender[] getInnerRenderers()
-    {
-        return null;
-    }
-
-    public boolean hasEvents()
-    {
-        return _hasEvents;
-    }
-
-    public void setHasEvents(boolean hasEvents)
-    {
-        _hasEvents = hasEvents;
-    }
-
-    /**
-     * Invokes {@link #finishLoad()}. Subclasses may overide as needed, but must invoke this
-     * implementation. {@link BaseComponent} loads its HTML template.
-     */
-
-    public void finishLoad(IRequestCycle cycle, IPageLoader loader, IComponentSpecification specification)
-    {
-        finishLoad();
-    }
-
-    /**
-     * Converts informal parameters into additional attributes on the curently open tag.
-     * <p>
-     * Invoked from subclasses to allow additional attributes to be specified within a tag (this
-     * works best when there is a one-to-one corespondence between an {@link IComponent}and a HTML
-     * element.
-     * <p>
-     * Iterates through the bindings for this component. Filters out bindings for formal parameters.
-     * <p>
-     * For each acceptible key, the value is extracted using {@link IBinding#getObject()}. If the
-     * value is null, no attribute is written.
-     * <p>
-     * If the value is an instance of {@link IAsset}, then {@link IAsset#buildURL()}
-     * is invoked to convert the asset to a URL.
-     * <p>
-     * Finally, {@link IMarkupWriter#attribute(String,String)}is invoked with the value (or the
-     * URL).
-     * <p>
-     * The most common use for informal parameters is to support the HTML class attribute (for use
-     * with cascading style sheets) and to specify JavaScript event handlers.
-     * <p>
-     * Components are only required to generate attributes on the result phase; this can be skipped
-     * during the rewind phase.
-     */
-
-    protected void renderInformalParameters(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String attribute;
-
-        if (_bindings == null)
-            return;
-
-        Iterator i = _bindings.entrySet().iterator();
-
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-            String name = (String) entry.getKey();
-
-            if (isFormalParameter(name))
-                continue;
-
-            IBinding binding = (IBinding) entry.getValue();
-
-            Object value = binding.getObject();
-            if (value == null)
-                continue;
-
-            if (value instanceof IAsset)
-            {
-                IAsset asset = (IAsset) value;
-
-                // Get the URL of the asset and insert that.
-
-                attribute = asset.buildURL();
-            }
-            else
-                attribute = value.toString();
-            
-            writer.attribute(name, attribute);
-        }
-    }
-    
-    /**
-     * Renders the (unique) id attribute for this component. 
-     * 
-     * @param writer
-     *          The writer to render attribute in.
-     * @param cycle
-     *          The current request.
-     */
-    protected void renderIdAttribute(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String id = getClientId();
-        
-        if (id != null)
-            writer.attribute("id", id);
-    }
-    
-    /** @since 4.0 */
-    private boolean isFormalParameter(String name)
-    {
-        Defense.notNull(name, "name");
-        
-        return getSpecification().getParameter(name) != null;
-    }
-    
-    /**
-     * Returns the named binding, or null if it doesn't exist.
-     * <p>
-     * In Tapestry 3.0, it was possible to force a binding to be stored in a component property by
-     * defining a concrete or abstract property named "nameBinding" of type {@link IBinding}. This
-     * has been removed in release 4.0 and bindings are always stored inside a Map of the component.
-     * 
-     * @see #setBinding(String,IBinding)
-     */
-
-    public IBinding getBinding(String name)
-    {
-        Defense.notNull(name, "name");
-
-        if (_bindings == null)
-            return null;
-
-        return (IBinding) _bindings.get(name);
-    }
-
-    /**
-     * Returns true if the specified parameter is bound.
-     * 
-     * @since 4.0
-     */
-
-    public boolean isParameterBound(String parameterName)
-    {
-        Defense.notNull(parameterName, "parameterName");
-
-        return _bindings != null && _bindings.containsKey(parameterName);
-    }
-
-    public IComponent getComponent(String id)
-    {
-        Defense.notNull(id, "id");
-
-        IComponent result = null;
-
-        if (_components != null)
-            result = (IComponent) _components.get(id);
-
-        if (result == null)
-            throw new ApplicationRuntimeException(Tapestry.format("no-such-component", this, id),
-                    this, null, null);
-
-        return result;
-    }
-
-    public IComponent getContainer()
-    {
-        return _container;
-    }
-
-    public void setContainer(IComponent value)
-    {
-        checkActiveLock();
-
-        if (_container != null)
-            throw new ApplicationRuntimeException(Tapestry
-                    .getMessage("AbstractComponent.attempt-to-change-container"));
-
-        _container = value;
-    }
-
-    /**
-     * Returns the name of the page, a slash, and this component's id path. Pages are different,
-     * they override this method to simply return their page name.
-     * 
-     * @see #getIdPath()
-     */
-
-    public String getExtendedId()
-    {
-        if (_page == null)
-            return null;
-        
-        return _page.getPageName() + "/" + getIdPath();
-    }
-
-    /** @since 4.1 */
-    
-    public String getSpecifiedId()
-    {
-        String id = getBoundId();
-        
-        if (id != null)
-            return id;
-        
-        return getId();
-    }
-    
-    public String getId()
-    {
-        return _id;
-    }
-
-    public void setId(String value)
-    {
-        if (_id != null)
-            throw new ApplicationRuntimeException(Tapestry
-                    .getMessage("AbstractComponent.attempt-to-change-component-id"));
-
-        _id = value;
-    }
-    
-    public String getIdPath()
-    {
-        if (_idPath != null)
-            return _idPath;
-        
-        String containerIdPath;
-        
-        if (_container == null)
-            throw new NullPointerException(Tapestry.format("AbstractComponent.null-container", this));
-        
-        containerIdPath = _container.getIdPath();
-        
-        if (containerIdPath == null)
-            _idPath = _id;
-        else
-            _idPath = containerIdPath + "." + _id;
-
-        return _idPath;
-    }
-    
-    /**
-     * {@inheritDoc}
-     * @since 4.1
-     */
-    public abstract String getClientId();
-    
-    public abstract void setClientId(String id);
-    
-    /**
-     * {@inheritDoc}
-     */
-    public String peekClientId()
-    {
-        if (getPage() == null)
-            return null;
-        
-        String id = getSpecifiedId();
-        if (id == null)
-            return null;
-        
-        return getPage().getRequestCycle().peekUniqueId(TapestryUtils.convertTapestryIdToNMToken(id));
-    }
-    
-    protected void generateClientId()
-    {
-        String id = getSpecifiedId();
-        
-        if (id != null && getPage() != null && getPage().getRequestCycle() != null)
-             setClientId(getPage().getRequestCycle().getUniqueId(TapestryUtils.convertTapestryIdToNMToken(id)));
-    }
-    
-    protected String getBoundId()
-    {
-        if (_bindings == null)
-            return null;
-        
-        IBinding id = (IBinding)_bindings.get("id");
-        
-        if (id == null || id.getObject() == null)
-            return null;
-        
-        return id.getObject().toString();
-    }
-    
-    public String getTemplateTagName()
-    {
-        return _templateTagName;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public void setTemplateTagName(String tag)
-    {
-        if (_templateTagName != null)
-            throw new ApplicationRuntimeException(Tapestry.getMessage("AbstractComponent.attempt-to-change-template-tag"));
-        
-        _templateTagName = tag;
-    }
-
-    public IPage getPage()
-    {
-        return _page;
-    }
-
-    public void setPage(IPage value)
-    {
-        if (_page != null)
-            throw new ApplicationRuntimeException(Tapestry.getMessage("AbstractComponent.attempt-to-change-page"));
-
-        _page = value;
-    }
-
-    /**
-     * Renders all elements wrapped by the receiver.
-     */
-
-    public void renderBody(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        for (int i = 0; i < _bodyCount; i++)
-            cycle.getResponseBuilder().render(writer, _body[i], cycle);
-    }
-
-    /**
-     * Adds the binding with the given name, replacing any existing binding with that name.
-     * <p>
-     * 
-     * @see #getBinding(String)
-     */
-
-    public void setBinding(String name, IBinding binding)
-    {
-        Defense.notNull(name, "name");
-        Defense.notNull(binding, "binding");
-
-        if (_bindings == null)
-            _bindings = new HashMap(MAP_SIZE);
-
-        _bindings.put(name, binding);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-        
-        buffer = new StringBuffer(super.toString());
-
-        buffer.append('[');
-
-        buffer.append(getExtendedId());
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /**
-     * Returns an unmodifiable {@link Map}of components, keyed on component id. Never returns null,
-     * but may return an empty map. The returned map is immutable.
-     */
-
-    public Map getComponents()
-    {
-        if (_components == null)
-            return EMPTY_MAP;
-
-        return _components;
-
-    }
-
-    public Map getAssets()
-    {
-        if (_assets == null)
-            return EMPTY_MAP;
-
-        return _assets;
-    }
-
-    public IAsset getAsset(String name)
-    {
-        if (_assets == null)
-            return null;
-
-        return (IAsset) _assets.get(name);
-    }
-
-    public Collection getBindingNames()
-    {
-        // If no conainer, i.e. a page, then no bindings.
-
-        if (_container == null)
-            return null;
-
-        HashSet result = new HashSet();
-
-        // All the informal bindings go into the bindings Map.
-
-        if (_bindings != null)
-            result.addAll(_bindings.keySet());
-
-        // Now, iterate over the formal parameters and add the formal parameters
-        // that have a binding.
-
-        List names = getSpecification().getParameterNames();
-
-        int count = names.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            String name = (String) names.get(i);
-
-            if (result.contains(name))
-                continue;
-
-            if (getBinding(name) != null)
-                result.add(name);
-        }
-
-        return result;
-    }
-
-    /**
-     * Returns an unmodifiable {@link Map}of all bindings for this component.
-     * 
-     * @since 1.0.5
-     */
-
-    public Map getBindings()
-    {
-        if (_bindings == null)
-            return EMPTY_MAP;
-
-        return _bindings;
-    }
-
-    /**
-     * Returns a {@link ListenerMap}&nbsp;for the component. A ListenerMap contains a number of
-     * synthetic read-only properties that implement the {@link IActionListener}interface, but in
-     * fact, cause public instance methods to be invoked.
-     * 
-     * @since 1.0.2
-     */
-
-    public ListenerMap getListeners()
-    {
-        // This is what's called a violation of the Law of Demeter!
-        // This should probably be converted over to some kind of injection, as with
-        // getMessages(), etc.
-
-        if (_listeners == null)
-            _listeners = getPage().getEngine().getInfrastructure().getListenerMapSource().getListenerMapForObject(this);
-
-        return _listeners;
-    }
-
-    /**
-     * Returns the {@link IBeanProvider}for this component. This is lazily created the first time
-     * it is needed.
-     * 
-     * @since 1.0.4
-     */
-
-    public IBeanProvider getBeans()
-    {
-        if (_beans == null)
-            _beans = new BeanProvider(this);
-
-        return _beans;
-    }
-
-    /**
-     * Invoked, as a convienience, from
-     * {@link #finishLoad(IRequestCycle, IPageLoader, IComponentSpecification)}. This implemenation
-     * does nothing. Subclasses may override without invoking this implementation.
-     * 
-     * @since 1.0.5
-     */
-
-    protected void finishLoad()
-    {
-    }
-
-    /**
-     * The main method used to render the component. Invokes
-     * {@link #prepareForRender(IRequestCycle)}, then
-     * {@link #renderComponent(IMarkupWriter, IRequestCycle)}.
-     * {@link #cleanupAfterRender(IRequestCycle)}is invoked in a <code>finally</code> block.
-     * <p>
-     * Subclasses should not override this method; instead they will implement
-     * {@link #renderComponent(IMarkupWriter, IRequestCycle)}.
-     * 
-     * @since 2.0.3
-     */
-
-    public final void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        try
-        {
-            _rendering = true;
-            
-            cycle.renderStackPush(this);
-            
-            generateClientId();
-            
-            prepareForRender(cycle);
-            
-            renderComponent(writer, cycle);
-        }
-        finally
-        {
-            _rendering = false;
-            
-            cleanupAfterRender(cycle);
-            
-            cycle.renderStackPop();
-        }
-    }
-
-    /**
-     * Invoked by {@link #render(IMarkupWriter, IRequestCycle)}to prepare the component to render.
-     * This implementation sets JavaBeans properties from matching bound parameters. The default
-     * implementation of this method is empty.
-     * 
-     * @since 2.0.3
-     */
-
-    protected void prepareForRender(IRequestCycle cycle)
-    {
-    }
-
-    /**
-     * Invoked by {@link #render(IMarkupWriter, IRequestCycle)}to actually render the component
-     * (with any parameter values already set). This is the method that subclasses must implement.
-     * 
-     * @since 2.0.3
-     */
-
-    protected abstract void renderComponent(IMarkupWriter writer, IRequestCycle cycle);
-    
-    /**
-     * Invoked by {@link #render(IMarkupWriter, IRequestCycle)}after the component renders.
-     * 
-     * @since 2.0.3
-     */
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        getRenderWorker().renderComponent(cycle, this);
-    }
-
-    public INamespace getNamespace()
-    {
-        return _namespace;
-    }
-
-    public void setNamespace(INamespace namespace)
-    {
-        _namespace = namespace;
-    }
-
-    /**
-     * Returns the body of the component, the element (which may be static HTML or components) that
-     * the component immediately wraps. May return null. Do not modify the returned array. The array
-     * may be padded with nulls.
-     * 
-     * @since 2.3
-     * @see #getBodyCount()
-     */
-
-    public IRender[] getBody()
-    {
-        return _body;
-    }
-
-    /**
-     * Returns the active number of elements in the the body, which may be zero.
-     * 
-     * @since 2.3
-     * @see #getBody()
-     */
-
-    public int getBodyCount()
-    {
-        return _bodyCount;
-    }
-
-    /**
-     * Empty implementation of
-     * {@link org.apache.tapestry.event.PageRenderListener#pageEndRender(PageEvent)}. This allows
-     * classes to implement {@link org.apache.tapestry.event.PageRenderListener}and only implement
-     * the {@link org.apache.tapestry.event.PageRenderListener#pageBeginRender(PageEvent)}method.
-     * 
-     * @since 3.0
-     */
-
-    public void pageEndRender(PageEvent event)
-    {
-    }
-
-    /**
-     * @since 4.0
-     */
-
-    public final boolean isRendering()
-    {
-        return _rendering;
-    }
-
-    /**
-     * Returns true if the component has been transitioned into its active state by invoking
-     * {@link #enterActiveState()}.
-     * 
-     * @since 4.0
-     */
-
-    protected final boolean isInActiveState()
-    {
-        return _active;
-    }
-
-    /** @since 4.0 */
-    public final void enterActiveState()
-    {
-        _active = true;
-    }
-
-    /** @since 4.0 */
-
-    protected final void checkActiveLock()
-    {
-        if (_active)
-            throw new UnsupportedOperationException(TapestryMessages.componentIsLocked(this));
-    }
-
-    public Messages getMessages()
-    {
-        throw new IllegalStateException(TapestryMessages.providedByEnhancement("getMessages"));
-    }
-
-    public IComponentSpecification getSpecification()
-    {
-        throw new IllegalStateException(TapestryMessages.providedByEnhancement("getSpecification"));
-    }
-
-    /** @since 4.0 */
-    public final IContainedComponent getContainedComponent()
-    {
-        return _containedComponent;
-    }
-
-    /** @since 4.0 */
-    public final void setContainedComponent(IContainedComponent containedComponent)
-    {
-        Defense.notNull(containedComponent, "containedComponent");
-
-        if (_containedComponent != null)
-            throw new ApplicationRuntimeException(TapestryMessages
-                    .attemptToChangeContainedComponent(this));
-
-        _containedComponent = containedComponent;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public IComponentEventInvoker getEventInvoker()
-    {
-        throw new IllegalStateException(TapestryMessages.providedByEnhancement("getEventInvoker"));
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void triggerEvent(IRequestCycle cycle, BrowserEvent event)
-    {
-        getEventInvoker().invokeListeners(this, cycle, event);
-    }
-    
-    public ComponentRenderWorker getRenderWorker()
-    {
-        throw new IllegalStateException(TapestryMessages.providedByEnhancement("getRenderWorker"));
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isStateful()
-    {
-        return false;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public int hashCode()
-    {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((getClientId() == null) ? 0 : getClientId().hashCode());
-        result = prime * result + ((_id == null) ? 0 : _id.hashCode());
-        return result;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public boolean equals(Object obj)
-    {
-        if (this == obj) return true;
-        if (obj == null) return false;
-        if (getClass() != obj.getClass()) return false;
-        final AbstractComponent other = (AbstractComponent) obj;
-        if (getClientId() == null) {
-            if (other.getClientId() != null) return false;
-        } else if (!getClientId().equals(other.getClientId())) return false;
-        if (_id == null) {
-            if (other._id != null) return false;
-        } else if (!_id.equals(other._id)) return false;
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/AbstractPage.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/AbstractPage.java
deleted file mode 100644
index f9b7ca7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/AbstractPage.java
+++ /dev/null
@@ -1,551 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.event.*;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.util.StringSplitter;
-
-import javax.swing.event.EventListenerList;
-import java.util.EventListener;
-import java.util.Locale;
-
-/**
- * Abstract base class implementing the {@link IPage}interface.
- * 
- * @author Howard Lewis Ship, David Solis
- * @since 0.2.9
- */
-
-public abstract class AbstractPage extends BaseComponent implements IPage
-{
-    private static final Log LOG = LogFactory.getLog(AbstractPage.class);
-
-    /**
-     * Object to be notified when a observered property changes. Observered properties are the ones
-     * that will be persisted between request cycles. Unobserved properties are reconstructed.
-     */
-
-    private ChangeObserver _changeObserver;
-    
-    /**
-     * The {@link IEngine}the page is currently attached to.
-     */
-
-    private IEngine _engine;
-
-    /**
-     * The qualified name of the page, which may be prefixed by the namespace.
-     * 
-     * @since 2.3
-     */
-
-    private String _pageName;
-
-    /**
-     * Set when the page is attached to the engine.
-     */
-
-    private IRequestCycle _requestCycle;
-
-    /**
-     * The locale of the page, initially determined from the {@link IEngine engine}.
-     */
-
-    private Locale _locale;
-
-    /**
-     * A list of listeners for the page.
-     * 
-     * @see PageBeginRenderListener
-     * @see PageEndRenderListener
-     * @see PageDetachListener
-     * @since 1.0.5
-     */
-
-    private EventListenerList _listenerList;
-
-    /**
-     * The output encoding to be used when rendering this page. This value is cached from the
-     * engine.
-     * 
-     * @since 3.0
-     */
-    private String _outputEncoding;
-
-    /**
-     * Used to dynamically include script content automatically for form specific includes.
-     * @since 4.1.2
-     */
-    private boolean _hasForms;
-
-    /**
-     * Dynamically causes widget dojo layer to be included if set to true.
-     * @since 4.1.2.
-     */
-    private boolean _hasWidgets;
-
-    /**
-     * Standard constructor. Does nothing.
-     * 
-     * @since 2.2
-     */
-
-    public AbstractPage()
-    {
-    }
-
-    /**
-     * Prepares the page to be returned to the pool.
-     * <ul>
-     * <li>Clears the changeObserved property
-     * <li>Invokes {@link PageDetachListener#pageDetached(PageEvent)}on all listeners
-     * <li>Clears the engine and requestCycle properties
-     * </ul>
-     * <p>
-     * Subclasses may override this method, but must invoke this implementation (usually, last).
-     * 
-     * @see PageDetachListener
-     */
-
-    public void detach()
-    {
-        Tapestry.addMethodInvocation(Tapestry.ABSTRACTPAGE_DETACH_METHOD_ID);
-
-        // Do this first,so that any changes to persistent properties do not
-        // cause errors.
-
-        _changeObserver = null;
-
-        firePageDetached();
-
-        _engine = null;
-        _requestCycle = null;
-    }
-
-    public IEngine getEngine()
-    {
-        return _engine;
-    }
-
-    public ChangeObserver getChangeObserver()
-    {
-        return _changeObserver;
-    }
-
-    /**
-     * Returns the name of the page.
-     */
-
-    public String getExtendedId()
-    {
-        return _pageName;
-    }
-
-    /**
-     * Pages always return null for idPath.
-     */
-
-    public String getIdPath()
-    {
-        return null;
-    }
-
-    /**
-     * Returns the locale for the page, which may be null if the locale is not known (null
-     * corresponds to the "default locale").
-     */
-
-    public Locale getLocale()
-    {
-        return _locale;
-    }
-
-    public void setLocale(Locale value)
-    {
-        if (_locale != null)
-            throw new ApplicationRuntimeException(Tapestry
-                    .getMessage("AbstractPage.attempt-to-change-locale"));
-
-        _locale = value;
-    }
-
-    public IComponent getNestedComponent(String path)
-    {
-        StringSplitter splitter;
-        IComponent current;
-        String[] elements;
-        int i;
-
-        if (path == null)
-            return this;
-
-        splitter = new StringSplitter('.');
-        current = this;
-
-        elements = splitter.splitToArray(path);
-        for (i = 0; i < elements.length; i++)
-        {
-            current = current.getComponent(elements[i]);
-        }
-
-        return current;
-
-    }
-
-    /**
-     * Called by the {@link IEngine engine} to attach the page to itself. Does <em>not</em> change
-     * the locale, but since a page is selected from the
-     * {@link org.apache.tapestry.engine.IPageSource} pool based on its locale matching the engine's
-     * locale, they should match anyway.
-     */
-
-    public void attach(IEngine engine, IRequestCycle cycle)
-    {
-        if (_engine != null)
-            LOG.error(this + " attach(" + engine + "), but engine = " + _engine);
-
-        _engine = engine;
-        _requestCycle = cycle;
-    }
-
-    /**
-     * Renders the page.
-     * <ul>
-     * <li>Invokes {@link PageBeginRenderListener#pageBeginRender(PageEvent)}
-     * <li>Invokes {@link #beginPageRender()}
-     * <li>Invokes {@link IRequestCycle#commitPageChanges()}(if not rewinding)
-     * <li>Invokes {@link #render(IMarkupWriter, IRequestCycle)}
-     * <li>Invokes {@link PageEndRenderListener#pageEndRender(PageEvent)}(this occurs even if a
-     * previous step throws an exception)
-     * </ul>
-     */
-
-    public void renderPage(ResponseBuilder builder, IRequestCycle cycle)
-    {
-        try
-        {
-            firePageBeginRender();
-            
-            if (!cycle.isRewinding())
-                cycle.commitPageChanges();
-            
-            builder.render(cycle.isRewinding() ? NullWriter.getSharedInstance() : null, this, cycle);
-        }
-        finally
-        {
-            firePageEndRender();
-        }
-    }
-
-    public void setChangeObserver(ChangeObserver value)
-    {
-        _changeObserver = value;
-    }
-
-    /** @since 3.0 * */
-
-    public void setPageName(String pageName)
-    {
-        if (_pageName != null)
-            throw new ApplicationRuntimeException(Tapestry
-                    .getMessage("AbstractPage.attempt-to-change-name"));
-
-        _pageName = pageName;
-    }
-
-    /**
-     * By default, pages are not protected and this method does nothing.
-     */
-
-    public void validate(IRequestCycle cycle)
-    {
-        Tapestry.addMethodInvocation(Tapestry.ABSTRACTPAGE_VALIDATE_METHOD_ID);
-
-        firePageValidate();
-    }
-
-    public IRequestCycle getRequestCycle()
-    {
-        return _requestCycle;
-    }
-
-    public void addPageDetachListener(PageDetachListener listener)
-    {
-        addListener(PageDetachListener.class, listener);
-    }
-
-    private void addListener(Class listenerClass, EventListener listener)
-    {
-        if (_listenerList == null)
-            _listenerList = new EventListenerList();
-
-        _listenerList.add(listenerClass, listener);
-    }
-
-    /**
-     * @since 2.1-beta-2
-     */
-
-    private void removeListener(Class listenerClass, EventListener listener)
-    {
-        if (_listenerList != null)
-            _listenerList.remove(listenerClass, listener);
-    }
-
-    /** @since 4.0 */
-    public void addPageBeginRenderListener(PageBeginRenderListener listener)
-    {
-        addListener(PageBeginRenderListener.class, listener);
-    }
-
-    /** @since 4.0 */
-    public void addPageEndRenderListener(PageEndRenderListener listener)
-    {
-        addListener(PageEndRenderListener.class, listener);
-    }
-
-    /** @since 4.0 */
-    public void removePageBeginRenderListener(PageBeginRenderListener listener)
-    {
-        removeListener(PageBeginRenderListener.class, listener);
-    }
-
-    /** @since 4.0 */
-    public void removePageEndRenderListener(PageEndRenderListener listener)
-    {
-        removeListener(PageEndRenderListener.class, listener);
-    }
-
-    /**
-     * @since 4.0
-     */
-
-    public void firePageAttached()
-    {
-        if (_listenerList == null)
-            return;
-
-        PageEvent event = null;
-        Object[] listeners = _listenerList.getListenerList();
-
-        for(int i = listeners.length-2; i >= 0; i -= 2) 
-        {
-            if (listeners[i] == PageAttachListener.class)
-            {
-                PageAttachListener l = (PageAttachListener) listeners[i + 1];
-
-                if (event == null)
-                    event = new PageEvent(this, _requestCycle);
-
-                l.pageAttached(event);
-            }
-        }
-    }
-
-    /**
-     * @since 1.0.5
-     */
-
-    protected void firePageDetached()
-    {
-        if (_listenerList == null)
-            return;
-
-        PageEvent event = null;
-        Object[] listeners = _listenerList.getListenerList();
-
-        for (int i = 0; i < listeners.length; i += 2)
-        {
-            if (listeners[i] == PageDetachListener.class)
-            {
-                PageDetachListener l = (PageDetachListener) listeners[i + 1];
-
-                if (event == null)
-                    event = new PageEvent(this, _requestCycle);
-
-                l.pageDetached(event);
-            }
-        }
-    }
-
-    /**
-     * @since 1.0.5
-     */
-
-    protected void firePageBeginRender()
-    {
-        if (_listenerList == null)
-            return;
-
-        PageEvent event = null;
-        Object[] listeners = _listenerList.getListenerList();
-
-        for(int i = listeners.length-2; i >= 0; i -= 2) 
-        {
-            if (listeners[i] == PageBeginRenderListener.class) 
-            {
-                PageBeginRenderListener l = (PageBeginRenderListener)listeners[i + 1];
-
-                if (event == null)
-                    event = new PageEvent(this, _requestCycle);
-
-                l.pageBeginRender(event);
-            }
-        }
-    }
-
-    /**
-     * @since 1.0.5
-     */
-
-    protected void firePageEndRender()
-    {
-        if (_listenerList == null)
-            return;
-
-        PageEvent event = null;
-        Object[] listeners = _listenerList.getListenerList();
-
-        for (int i = 0; i < listeners.length; i += 2)
-        {
-            if (listeners[i] == PageEndRenderListener.class)
-            {
-                PageEndRenderListener l = (PageEndRenderListener) listeners[i + 1];
-
-                if (event == null)
-                    event = new PageEvent(this, _requestCycle);
-
-                l.pageEndRender(event);
-            }
-        }
-    }
-
-    /**
-     * @since 2.1-beta-2
-     */
-
-    public void removePageDetachListener(PageDetachListener listener)
-    {
-        removeListener(PageDetachListener.class, listener);
-    }
-
-    /** @since 2.2 * */
-
-    public void beginPageRender()
-    {
-        firePageBeginRender();
-    }
-
-    /** @since 2.2 * */
-
-    public void endPageRender()
-    {
-        firePageEndRender();
-    }
-    
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-    }
-    
-    /** @since 3.0 * */
-
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-    public void addPageValidateListener(PageValidateListener listener)
-    {
-        addListener(PageValidateListener.class, listener);
-    }
-
-    public void removePageValidateListener(PageValidateListener listener)
-    {
-        removeListener(PageValidateListener.class, listener);
-    }
-
-    /** @since 4.0 */
-    public void addPageAttachListener(PageAttachListener listener)
-    {
-        addListener(PageAttachListener.class, listener);
-    }
-
-    /** @since 4.0 */
-    public void removePageAttachListener(PageAttachListener listener)
-    {
-        removeListener(PageAttachListener.class, listener);
-    }
-
-    protected void firePageValidate()
-    {
-        if (_listenerList == null)
-            return;
-        
-        PageEvent event = null;
-        Object[] listeners = _listenerList.getListenerList();
-        
-        for (int i = 0; i < listeners.length; i += 2)
-        {
-            if (listeners[i] == PageValidateListener.class)
-            {
-                PageValidateListener l = (PageValidateListener) listeners[i + 1];
-
-                if (event == null)
-                    event = new PageEvent(this, _requestCycle);
-
-                l.pageValidate(event);
-            }
-        }
-    }
-
-    /**
-     * Returns the output encoding to be used when rendering this page. This value is usually cached
-     * from the Engine.
-     * 
-     * @since 3.0
-     */
-    protected String getOutputEncoding()
-    {
-        if (_outputEncoding == null)
-            _outputEncoding = getEngine().getOutputEncoding();
-
-        return _outputEncoding;
-    }
-
-    public boolean hasFormComponents()
-    {
-        return _hasForms;
-    }
-
-    public void setHasFormComponents(boolean value)
-    {
-        _hasForms = value;
-    }
-
-    public boolean hasWidgets()
-    {
-        return _hasWidgets;
-    }
-
-    public void setHasWidgets(boolean value)
-    {
-        _hasWidgets = value;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/ApplicationServlet.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/ApplicationServlet.java
deleted file mode 100644
index e9a7b0b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/ApplicationServlet.java
+++ /dev/null
@@ -1,328 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.ErrorHandler;
-import org.apache.hivemind.Registry;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.impl.RegistryBuilder;
-import org.apache.hivemind.impl.StrictErrorHandler;
-import org.apache.hivemind.impl.XmlModuleDescriptorProvider;
-import org.apache.hivemind.util.ContextResource;
-import org.apache.tapestry.services.ApplicationInitializer;
-import org.apache.tapestry.services.ServletRequestServicer;
-import org.apache.tapestry.util.exception.ExceptionAnalyzer;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.Locale;
-
-/**
- * Links a servlet container with a Tapestry application. The servlet init parameter
- * <code>org.apache.tapestry.application-specification</code> should be set to the complete
- * resource path (within the classpath) to the application specification, i.e.,
- * <code>/com/foo/bar/MyApp.application</code>. As of release 4.0, this servlet will also create
- * a HiveMind Registry and manage it.
- *
- * @author Howard Lewis Ship
- * @see org.apache.tapestry.services.ApplicationInitializer
- * @see org.apache.tapestry.services.ServletRequestServicer
- */
-
-public class ApplicationServlet extends HttpServlet
-{
-    private static final long serialVersionUID = -8046042689991538059L;
-
-    /**
-     * Prefix used to store the HiveMind Registry into the ServletContext. This string is suffixed
-     * with the servlet name (in case multiple Tapestry applications are executing within a single
-     * web application).
-     *
-     * @since 4.0
-     */
-
-    private static final String REGISTRY_KEY_PREFIX = "org.apache.tapestry.Registry:";
-
-    private static final Log LOG = LogFactory.getLog(ApplicationServlet.class);
-
-    /**
-     * @since 2.3
-     */
-
-    private ClassResolver _resolver;
-
-    /**
-     * The key used to store the registry into the ServletContext.
-     *
-     * @since 4.0
-     */
-
-    private String _registryKey;
-
-    /**
-     * @since 4.0
-     */
-
-    private Registry _registry;
-
-    /**
-     * @since 4.0
-     */
-    private ServletRequestServicer _requestServicer;
-
-    /**
-     * Invokes {@link #doService(HttpServletRequest, HttpServletResponse)}.
-     *
-     * @since 1.0.6
-     */
-
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,
-            ServletException
-    {
-        doService(request, response);
-    }
-
-    /**
-     * Handles the GET and POST requests. Performs the following:
-     *
-     * <ul>
-     *  <li>
-     *  Invokes {@link org.apache.hivemind.Registry#setupThread()}
-     * </li>
-     * <li>
-     *  Invokes {@link ServletRequestServicer#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)}.
-     * </li>
-     * </ul>
-     */
-
-    protected void doService(HttpServletRequest request, HttpServletResponse response)
-            throws IOException, ServletException
-    {
-        try
-        {
-            _registry.setupThread();
-
-            _requestServicer.service(request, response);
-        }
-        catch (ServletException ex)
-        {
-            log("ServletException", ex);
-
-            show(ex);
-
-            // Rethrow it.
-
-            throw ex;
-        }
-        catch (IOException ex)
-        {
-            log("IOException", ex);
-
-            show(ex);
-
-            // Rethrow it.
-
-            throw ex;
-        }
-        finally
-        {
-            _registry.cleanupThread();
-        }
-    }
-
-    protected void show(Exception ex)
-    {
-        System.err.println("\n\n**********************************************************\n\n");
-
-        new ExceptionAnalyzer().reportException(ex, System.err);
-
-        System.err.println("\n**********************************************************\n");
-
-    }
-
-    /**
-     * Invokes {@link #doService(HttpServletRequest, HttpServletResponse)}.
-     */
-
-    public void doPost(HttpServletRequest request, HttpServletResponse response)
-            throws IOException, ServletException
-    {
-        doService(request, response);
-    }
-
-    /**
-     * Reads the application specification when the servlet is first initialized. All
-     * {@link IEngine engine instances}will have access to the specification via the servlet.
-     *
-     * @see #constructRegistry(ServletConfig)
-     * @see #createClassResolver()
-     */
-
-    public void init(ServletConfig config) throws ServletException
-    {
-        String name = config.getServletName();
-
-        _registryKey = REGISTRY_KEY_PREFIX + name;
-
-        long startTime = System.currentTimeMillis();
-        long elapsedToRegistry = 0;
-
-        super.init(config);
-
-        _resolver = createClassResolver();
-
-        try
-        {
-            _registry = constructRegistry(config);
-
-            elapsedToRegistry = System.currentTimeMillis() - startTime;
-
-            initializeApplication();
-
-            config.getServletContext().setAttribute(_registryKey, _registry);
-        }
-        catch (Exception ex)
-        {
-            show(ex);
-
-            throw new ServletException(TapestryMessages.servletInitFailure(ex), ex);
-        }
-
-        long elapsedOverall = System.currentTimeMillis() - startTime;
-
-        LOG.info(TapestryMessages.servletInit(name, elapsedToRegistry, elapsedOverall));
-    }
-
-    /**
-     * Invoked from {@link #init(ServletConfig)}to create a resource resolver for the servlet
-     * (which will utlimately be shared and used through the application).
-     * <p>
-     * This implementation constructs a {@link DefaultClassResolver}, subclasses may provide a
-     * different implementation.
-     *
-     * @see DefaultClassResolver
-     * @since 2.3
-     */
-
-    protected ClassResolver createClassResolver()
-    {
-        return new DefaultClassResolver();
-    }
-
-    /**
-     * Invoked from {@link #init(ServletConfig)}to construct the Registry to be used by the
-     * application.
-     * <p>
-     * This looks in the standard places (on the classpath), but also in the WEB-INF/name and
-     * WEB-INF folders (where name is the name of the servlet).
-     *
-     * @since 4.0
-     */
-    protected Registry constructRegistry(ServletConfig config)
-    {
-        ErrorHandler errorHandler = constructErrorHandler(config);
-
-        RegistryBuilder builder = new RegistryBuilder(errorHandler);
-
-        builder.addModuleDescriptorProvider(new XmlModuleDescriptorProvider(_resolver));
-
-        String name = config.getServletName();
-        ServletContext context = config.getServletContext();
-
-        addModuleIfExists(builder, context, "/WEB-INF/" + name + "/hivemodule.xml");
-        addModuleIfExists(builder, context, "/WEB-INF/hivemodule.xml");
-
-        return builder.constructRegistry(Locale.getDefault());
-    }
-
-    /**
-     * Invoked by {@link #constructRegistry(ServletConfig)} to create and return an
-     * {@link ErrorHandler} instance to be used when constructing the Registry (and then to handle
-     * any runtime exceptions). This implementation returns a new instance of
-     * {@link org.apache.hivemind.impl.StrictErrorHandler}.
-     *
-     * @since 4.0
-     */
-    protected ErrorHandler constructErrorHandler(ServletConfig config)
-    {
-        return new StrictErrorHandler();
-    }
-
-    /**
-     * Looks for a file in the servlet context; if it exists, it is expected to be a HiveMind module
-     * descriptor, and is added to the builder.
-     *
-     * @since 4.0
-     */
-
-    protected void addModuleIfExists(RegistryBuilder builder, ServletContext context, String path)
-    {
-        Resource r = new ContextResource(context, path);
-
-        if (r.getResourceURL() == null)
-            return;
-
-        builder.addModuleDescriptorProvider(new XmlModuleDescriptorProvider(_resolver, r));
-    }
-
-    /**
-     * Invoked from {@link #init(ServletConfig)}, after the registry has been constructed, to
-     * bootstrap the application via the <code>tapestry.MasterApplicationInitializer</code>
-     * service.
-     *
-     * @since 4.0
-     */
-    protected void initializeApplication()
-    {
-        ApplicationInitializer ai = (ApplicationInitializer) _registry.getService(
-                "tapestry.init.MasterInitializer",
-                ApplicationInitializer.class);
-
-        ai.initialize(this);
-
-        _registry.cleanupThread();
-
-        _requestServicer = (ServletRequestServicer) _registry.getService(
-                "tapestry.request.ServletRequestServicer",
-                ServletRequestServicer.class);
-    }
-
-    /**
-     * Shuts down the registry (if it exists).
-     *
-     * @since 4.0
-     */
-    public void destroy()
-    {
-        getServletContext().removeAttribute(_registryKey);
-
-        if (_registry != null)
-        {
-            _registry.shutdown();
-            _registry = null;
-        }
-
-        super.destroy();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/BaseComponent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/BaseComponent.java
deleted file mode 100644
index 9d345e6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/BaseComponent.java
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Base implementation for most components that use an HTML template.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class BaseComponent extends AbstractComponent implements ITemplateComponent
-{
-    private static final Log LOG = LogFactory.getLog(BaseComponent.class);
-
-    private static final int OUTER_INIT_SIZE = 5;
-
-    private IRender[] _outer;
-
-    private int _outerCount = 0;
-
-    /**
-     * Adds an element as an outer element for the receiver. Outer elements are elements that should
-     * be directly rendered by the receiver's <code>render()</code> method. That is, they are
-     * top-level elements on the HTML template.
-     */
-
-    public void addOuter(IRender element)
-    {
-        if (_outer == null)
-        {
-            _outer = new IRender[OUTER_INIT_SIZE];
-            _outer[0] = element;
-
-            _outerCount = 1;
-            return;
-        }
-
-        // No more room? Make the array bigger.
-
-        if (_outerCount == _outer.length)
-        {
-            IRender[] newOuter;
-
-            newOuter = new IRender[_outer.length * 2];
-
-            System.arraycopy(_outer, 0, newOuter, 0, _outerCount);
-
-            _outer = newOuter;
-        }
-
-        _outer[_outerCount++] = element;
-    }
-
-    public IRender[] getContainedRenderers()
-    {
-        return _outer;
-    }
-    
-    public IRender[] getInnerRenderers()
-    {
-        return _body;
-    }
-
-    /**
-     * Reads the receiver's template and figures out which elements wrap which other elements.
-     *
-     * @param cycle
-     *          The current request.
-     * @param loader
-     *          The service responsible for loading / resolving a page spec.
-     */
-
-    private void readTemplate(IRequestCycle cycle, IPageLoader loader)
-    {
-        loader.loadTemplateForComponent(cycle, this);
-    }
-
-    /**
-     * Renders the top level components contained by the receiver.
-     * 
-     * @since 2.0.3
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Begin render " + getExtendedId());
-        
-        for (int i = 0; i < _outerCount; i++)
-            cycle.getResponseBuilder().render(writer, _outer[i], cycle);
-        
-        if (LOG.isDebugEnabled())
-            LOG.debug("End render " + getExtendedId());
-    }
-
-    /**
-     * Loads the template for the component, then invokes
-     * {@link AbstractComponent#finishLoad(IRequestCycle, IPageLoader, IComponentSpecification)}.
-     * Subclasses must invoke this method first, before adding any additional behavior, though its
-     * usually simpler to override {@link #finishLoad()}instead.
-     */
-
-    public void finishLoad(IRequestCycle cycle, IPageLoader loader, IComponentSpecification specification)
-    {
-        readTemplate(cycle, loader);
-
-        super.finishLoad(cycle, loader, specification);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/BaseSessionStoreOptimized.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/BaseSessionStoreOptimized.java
deleted file mode 100644
index 20a1141..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/BaseSessionStoreOptimized.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry;

-

-import java.io.Serializable;

-

-import javax.servlet.http.HttpSessionBindingEvent;

-import javax.servlet.http.HttpSessionBindingListener;

-

-/**

- * Base implementation of {@link org.apache.tapestry.SessionStoreOptimized}. Subclasses should

- * invoke {@link #markSessionStoreNeeded()} any time internal state changed.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class BaseSessionStoreOptimized implements SessionStoreOptimized, Serializable,

-        HttpSessionBindingListener

-{

-    private static final long serialVersionUID = -2786704444616789831L;

-

-    private transient boolean _dirty;

-

-    /**

-     * Clears the dirty flag.

-     */

-    public void valueBound(HttpSessionBindingEvent event)

-    {

-        _dirty = false;

-    }

-

-    /**

-     * Does nothing.

-     */

-    public void valueUnbound(HttpSessionBindingEvent event)

-    {

-    }

-

-    /**

-     * Sets the dirty flag.

-     */

-    protected void markSessionStoreNeeded()

-    {

-        _dirty = true;

-    }

-

-    /**

-     * Returns the dirty flag.

-     */

-    public boolean isStoreToSessionNeeded()

-    {

-        return _dirty;

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/BindingException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/BindingException.java
deleted file mode 100644
index b5b699a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/BindingException.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-
-/**
- *  A general exception describing an {@link IBinding}
- *  and an {@link IComponent}.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public class BindingException extends ApplicationRuntimeException
-{
-    private static final long serialVersionUID = 1336659143140967861L;
-    
-    private final transient IBinding _binding;
-
-    public BindingException(String message, IBinding binding)
-    {
-        this(message, binding, null);
-    }
-
-    public BindingException(String message, IBinding binding, Throwable rootCause)
-    {
-        this(message, null, null, binding, rootCause);
-    }
-
-
-    public BindingException(
-        String message,
-        Object component,
-        Location location,
-        IBinding binding,
-        Throwable rootCause)
-    {
-        super(
-            message,
-            component,
-            HiveMind.findLocation(new Object[] { location, binding, component }),
-            rootCause);
-
-        _binding = binding;
-    }
-
-    public IBinding getBinding()
-    {
-        return _binding;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script
deleted file mode 100644
index 16e80f6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<script>
-<input-symbol key="component" required="yes" />
-<input-symbol key="clientId" required="yes" />
-<input-symbol key="url" />
-<input-symbol key="events" />
-<input-symbol key="formEvents" />
-    <body>
-        <unique>
-        dojo.require("tapestry.event");
-        </unique>
-    </body>
-    <initialization>
-        <if expression="events">
-            <foreach expression="events" key="event">
-                tapestry.cleanConnect(dojo.byId("${clientId}"), "${event[0]}", "event${event[1]}");
-                tapestry.event${event[1]}=function( event ){
-                    
-                    var content={beventname:"${event[0]}", bcomponentid:"${component.id}"};
-                   
-                    tapestry.event.buildEventProperties( event, content, arguments);                    
-                    if (!content["beventtarget.id"]) {
-                    	content["beventtarget.id"]="${clientId}";
-                    }                                 
-                    
-                    tapestry.bind("${url}", content);
-                };
-                dojo.event.connect(dojo.byId("${clientId}"), "${event[0]}", tapestry, "event${event[1]}");
-            </foreach>
-        </if>
-        <if expression="formEvents">
-            <foreach expression="formEvents" key="formEvent">
-                tapestry.cleanConnect(dojo.byId("${clientId}"), 
-                                     "${formEvent[0]}", "formEvent${formEvent[4]}");
-                tapestry.formEvent${formEvent[4]}=function(e){
-                    var content={beventname:"${formEvent[0]}", bcomponentid:"${component.id}"};
-                    tapestry.event.buildEventProperties(e, content, arguments);
-                    if (!content["beventtarget.id"]){
-                    	content["beventtarget.id"]="${clientId}";
-                    }
-                    <foreach expression="formEvent[1]" key="formName">
-                   var validateState=tapestry.form.forms["${formName}"].validateForm;
-                   var validateForm=${formEvent[3]};
-                   tapestry.form.setFormValidating("${formName}", validateForm);
-                   
-                    <if expression="formEvent[2]">
-                    tapestry.form.submitAsync("${formName}", content);
-                    </if>
-                    <if-not expression="formEvent[2]">
-                    tapestry.form.submit("${formName}");
-                    </if-not>
-                    
-                    tapestry.form.setFormValidating("${formName}", validateState);
-                    </foreach>
-                };
-                dojo.event.connect(dojo.byId("${clientId}"), "${formEvent[0]}",
-                                   tapestry, "formEvent${formEvent[4]}");
-            </foreach>
-        </if>
-    </initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/ConfigurationDefaults.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/ConfigurationDefaults.properties
deleted file mode 100644
index 56a6c01..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/ConfigurationDefaults.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-org.apache.tapestry.default-script-language=jython
-org.apache.tapestry.visit-class=java.util.HashMap
-org.apache.tapestry.output-encoding=UTF-8
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/Constants.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/Constants.java
deleted file mode 100644
index ab84164..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/Constants.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- * Constant values used inside Tapestry.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public final class Constants
-{
-
-    /**
-     * Key used to store and locate an
-     * {@link org.apache.tapestry.services.Infrastructure} service instance as a
-     * request attribute.
-     */
-    public static final String INFRASTRUCTURE_KEY = "org.apache.tapestry.Infrastructure";
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/FormBehavior.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/FormBehavior.java
deleted file mode 100644
index d2401aa..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/FormBehavior.java
+++ /dev/null
@@ -1,258 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.form.FormEventType;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.valid.ValidationConstants;
-
-/**
- * Common interface extended by {@link org.apache.tapestry.IForm}&nbsp;and
- * {@link org.apache.tapestry.form.FormSupport}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface FormBehavior
-{
-    /**
-     * Adds an additional event handler. The type determines when the handler will be invoked,
-     * {@link FormEventType#SUBMIT}is most typical.
-     *
-     * @param type
-     *          Type of event to add.
-     * @param functionName
-     *          Name of the javascript function being added.
-     * 
-     * @deprecated Wiring of form event handlers is now managed on the client side. This method may
-     *             be removed in Tapestry 4.1.2.
-     */
-    void addEventHandler(FormEventType type, String functionName);
-
-    /**
-     * Adds a hidden field value to be stored in the form. This ensures that all of the &lt;input
-     * type="hidden"&gt; (or equivalent) are grouped together, which ensures that the output HTML is
-     * valid (ie. doesn't have &lt;input&gt; improperly nested with &lt;tr&gt;, etc.).
-     * <p>
-     * It is acceptible to add multiple hidden fields with the same name. They will be written in
-     * the order they are received.
-     *
-     * @param name
-     *          The name of the hidden input.
-     * @param value
-     *          The value to store in the hidden field.
-     */
-
-    void addHiddenValue(String name, String value);
-
-    /**
-     * Adds a hidden field value to be stored in the form. This ensures that all of the &lt;input
-     * type="hidden"&gt; (or equivalent) are grouped together, which ensures that the output HTML is
-     * valid (ie. doesn't have &lt;input&gt; improperly nested with &lt;tr&gt;, etc.).
-     * <p>
-     * It is acceptible to add multiple hidden fields with the same name. They will be written in
-     * the order they are received.
-     *
-     * @param name
-     *          The name of the hidden input.
-     * @param id
-     *          The id of the hidden input - should almost always be the same as the name.
-     * @param value
-     *          The value to store in the hidden field.
-     * @since 3.0
-     */
-
-    void addHiddenValue(String name, String id, String value);
-
-    /**
-     * Constructs a unique identifier (within the Form). The identifier consists of the component's
-     * id, with an index number added to ensure uniqueness.
-     * <p>
-     * Simply invokes {@link #getElementId(IFormComponent, String)}with the component's id.
-     * <p>
-     *
-     * <p>Note: yes, some confusion on naming here. This is the form element id, which should be (for
-     * Tapestry purposes) unique within the rendered form. The {@link IFormComponent#getClientId()}
-     * is different, and should be unique within the rendered page.
-     * </p>
-     *
-     * @param component
-     *          The component to get the unique id of.
-     * @return The unique id for this component, to be used in rendering name="id" type elements.
-     *
-     */
-
-    String getElementId(IFormComponent component);
-
-    /**
-     * Constructs a unique identifier from the base id. If possible, the id is used as-is.
-     * Otherwise, a unique identifier is appended to the id.
-     * <p>
-     * This method is provided simply so that some components (
-     * {@link org.apache.tapestry.form.ImageSubmit}) have more specific control over their names.
-     * <p>
-     * Invokes {@link IFormComponent#setName(String)}with the result, as well as returning it.
-     *
-     * @param component
-     *          The component to generate an element id for.
-     * @param baseId
-     *          The basic id of the component.
-     * @return The form specific unique identifier for the given element.  May be the same as the baseId
-     *          if this is the first render of that specific component.
-     * @throws StaleLinkException
-     *             if, when the form itself is rewinding, the element id allocated does not match
-     *             the expected id (as allocated when the form rendered). This indicates that the
-     *             state of the application has changed between the time the form renderred and the
-     *             time it was submitted.
-     */
-
-    String getElementId(IFormComponent component, String baseId);
-    
-    /**
-     * Used internally to "peek" at what the next generated client id will be for the 
-     * given component when it renders. Similar to the logic found in {@link IRequestCycle#peekUniqueId(String)}.
-     *
-     * @param component
-     *          The component to determine the next client id for.
-     * 
-     * @return The next possible client ID for the component.
-     */
-    String peekClientId(IFormComponent component);
-    
-    /**
-     * Returns true if the form is rewinding (meaning, the form was the subject of the request
-     * cycle).
-     *
-     * @return True if the form is rewinding, false otherwise.
-     */
-
-    boolean isRewinding();
-
-    /**
-     * May be invoked by a component to force the encoding type of the form to a particular value.
-     *
-     * @param encodingType
-     *          The encoding type to set.
-     * @see org.apache.tapestry.form.Upload
-     * @throws ApplicationRuntimeException
-     *             if the current encoding type is not null and doesn't match the provided encoding
-     *             type
-     */
-
-    void setEncodingType(String encodingType);
-
-    /**
-     * Pre-renders the specified field, buffering the result for later use by
-     * {@link #wasPrerendered(IMarkupWriter, IComponent)}. Typically, it is a
-     * {@link org.apache.tapestry.valid.FieldLabel}&nbsp;component that pre-renders an associated
-     * field. This little dance is necessary to properly support field labels inside loops, and to
-     * handle the portlet action/render request cycle.
-     * 
-     * @param writer
-     *            the markup writer (from which a nested markup writer is obtained)
-     * @param field
-     *            the field to pre-render. The field is responsible for invoking
-     *            {@link #wasPrerendered(IMarkupWriter, IComponent)}.
-     * @param location
-     *            an optional location (of the FieldLabel component) used when reporting errors.
-     */
-    void prerenderField(IMarkupWriter writer, IComponent field, Location location);
-
-    /**
-     * Invoked by a form control component (a field) that may have been pre-rendered. If the field
-     * was pre-rendered, then the buffered output is printed into the writer and true is returned.
-     * Otherwise, false is returned.
-     *
-     * @param writer
-     *          The markup writer to render with. (may be ignored during dynamic requests)
-     * @param field
-     *          The component to check for pre-rendering.
-     * 
-     * @return true if the field was pre-rendered and should do nothing during its render phase,
-     *         false if the field should continue as normal.
-     */
-    boolean wasPrerendered(IMarkupWriter writer, IComponent field);
-
-    /**
-     * Invoked to check if a particular component has been pre-rendered.
-     *
-     * @param field
-     *          The component to check for pre-rendering. (Such as is done by {@link org.apache.tapestry.valid.FieldLabel}.
-     * 
-     * @return True if the component was pre-rendered, false otherwise.
-     */
-    boolean wasPrerendered(IComponent field);
-
-    /**
-     * Adds a deferred runnable, an object to be executed either before the &lt;/form&gt; tag is
-     * rendered (when rendering), or before the form's listener is invoked (when rewinding).
-     * Runnables are executed in the order in which they are added.
-     * 
-     * @param runnable
-     *            the object to execute (which may not be null)
-     */
-
-    void addDeferredRunnable(Runnable runnable);
-
-    /**
-     * Registers a field for automatic focus. The goal is for the first field that is in error to
-     * get focus; failing that, the first required field; failing that, any field.
-     * 
-     * @param field
-     *            the field requesting focus
-     * @param priority
-     *            a priority level used to determine whether the registered field becomes the focus
-     *            field. Constants for this purpose are defined in {@link ValidationConstants}.
-     * @since 4.0
-     */
-
-    void registerForFocus(IFormComponent field, int priority);
-
-    /**
-     * The javascript object profile being built by this context to validate/translate
-     * form values.
-     * @return {@link JSONObject} profile.
-     */
-    JSONObject getProfile();
-    
-    /**
-     * Sets a flag denoting whether or not an {@link IFormComponent} field has been
-     * updated according to the logic defined in 
-     * {@link org.apache.tapestry.services.ResponseBuilder#updateComponent(String)}.
-     * 
-     * <p>
-     * Currently this flag is used during ajax/json responses so that cooperating 
-     * {@link ResponseBuilder}s can be worked with to ensure form state is properly
-     * updated on the client. Specifically, that the hidden form input fields and 
-     * any associated validation profiles are updated.
-     * </p>
-     * 
-     * @param value 
-     *          The value to set.
-     */
-    void setFormFieldUpdating(boolean value);
-    
-    /**
-     * Checks to see if a form field has been updated. 
-     * 
-     * @see #setFormFieldUpdating(boolean)
-     * @return True if any form field was updated.
-     */
-    boolean isFormFieldUpdating();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/Framework.library b/tapestry/tapestry-framework/src/java/org/apache/tapestry/Framework.library
deleted file mode 100644
index fb2eb8c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/Framework.library
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<!--
- 
-   This is a kind of "boostrap" library; when an unadorned page name or alias (a name or
-   alias without a namespace prefix) cannot be located in the appropriate application or
-   library specification, the framework specification is checked.  This allows
-   the application or library to override framework's versions of a component.
-   
--->
-
-<library-specification>
-
-    <component-type type="Any" specification-path="components/Any.jwc"/>
-    <component-type type="Autocompleter" specification-path="dojo/form/Autocompleter.jwc"/>
-    <component-type type="Block" specification-path="components/Block.jwc"/>
-    <component-type type="Body" specification-path="html/Body.jwc"/>
-    <component-type type="Button" specification-path="form/Button.jwc"/>
-    <component-type type="Checkbox" specification-path="form/Checkbox.jwc"/>
-    <component-type type="Conditional" specification-path="components/Conditional.jwc"/>
-    <component-type type="DatePicker" specification-path="form/DatePicker.jwc"/>
-    <component-type type="Delegator" specification-path="components/Delegator.jwc"/>
-	<component-type type="Describe" specification-path="html/Describe.jwc"/>
-    <component-type type="Dialog" specification-path="dojo/html/Dialog.jwc"/>
-    <component-type type="DirectLink" specification-path="link/DirectLink.jwc"/>
-    <component-type type="DropdownDatePicker" specification-path="dojo/form/DropdownDatePicker.jwc"/>
-    <component-type type="DropdownTimePicker" specification-path="dojo/form/DropdownTimePicker.jwc"/>
-    <component-type type="Else" specification-path="components/Else.jwc"/>
-    <component-type type="ExceptionDisplay" specification-path="html/ExceptionDisplay.jwc"/>
-    <component-type type="ExternalLink" specification-path="link/ExternalLink.jwc"/>
-    <component-type type="FieldLabel" specification-path="valid/FieldLabel.jwc"/>
-    <component-type type="Frame" specification-path="html/Frame.jwc"/>
-    <component-type type="For" specification-path="components/For.jwc"/>
-    <component-type type="Form" specification-path="form/Form.jwc"/>
-    <component-type type="GenericLink" specification-path="link/GenericLink.jwc"/>
-    <component-type type="GTimePicker" specification-path="dojo/form/GTimePicker.jwc"/>
-    <component-type type="Hidden" specification-path="form/Hidden.jwc"/>
-    <component-type type="If" specification-path="components/If.jwc"/>
-    <component-type type="Image" specification-path="html/Image.jwc"/>
-    <component-type type="ImageSubmit" specification-path="form/ImageSubmit.jwc"/>
-    <component-type type="InlineEditBox" specification-path="dojo/html/InlineEditBox.jwc" />
-	<component-type type="Insert" specification-path="components/Insert.jwc"/>
-    <component-type type="InsertText" specification-path="html/InsertText.jwc"/>
-    <component-type type="InvokeListener" specification-path="components/InvokeListener.jwc"/>
-    <component-type type="LinkSubmit" specification-path="form/LinkSubmit.jwc"/>
-    <component-type type="ListEdit" specification-path="form/ListEdit.jwc"/>
-    <component-type type="Option" specification-path="form/Option.jwc"/>
-    <component-type type="PageLink" specification-path="link/PageLink.jwc"/>
-    <component-type type="PropertySelection" specification-path="form/PropertySelection.jwc"/>
-    <component-type type="Radio" specification-path="form/Radio.jwc"/>
-    <component-type type="RadioGroup" specification-path="form/RadioGroup.jwc"/>
-    <component-type type="Relation" specification-path="html/Relation.jwc"/>
-    <component-type type="RenderBlock" specification-path="components/RenderBlock.jwc"/>
-    <component-type type="RenderBody" specification-path="components/RenderBody.jwc"/>
-    <component-type type="RequestDisplay" specification-path="html/RequestDisplay.jwc"/>
-    <component-type type="Rollover" specification-path="html/Rollover.jwc"/>
-    <component-type type="Select" specification-path="form/Select.jwc"/>
-    <component-type type="ServiceLink" specification-path="link/ServiceLink.jwc"/>
-    <component-type type="Script" specification-path="html/Script.jwc"/>
-    <component-type type="ScriptIncludes" specification-path="dojo/html/ScriptIncludes.jwc"/>
-    <component-type type="Shell" specification-path="html/Shell.jwc"/>
-	<component-type type="Style" specification-path="html/Style.jwc"/>
-    <component-type type="Submit" specification-path="form/Submit.jwc"/>
-    <component-type type="Suggest" specification-path="scriptaculous/Suggest.jwc" />
-    <component-type type="TextArea" specification-path="form/TextArea.jwc"/>
-    <component-type type="TextField" specification-path="form/TextField.jwc"/>
-    <component-type type="Upload" specification-path="form/Upload.jwc"/>
-    <component-type type="ValidField" specification-path="valid/ValidField.jwc"/>
-
-    <page name="StaleLink" specification-path="pages/StaleLink.page"/>
-    <page name="StaleSession" specification-path="pages/StaleSession.page"/>
-    <page name="Exception" specification-path="pages/Exception.page"/>
-   
-    <page name="WMLException" specification-path="wml/pages/WMLException.page"/>
-    <page name="WMLStaleLink" specification-path="wml/pages/WMLStaleLink.page"/>
-    <page name="WMLStaleSession" specification-path="wml/pages/WMLStaleSession.page"/>
-	
-</library-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IActionListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IActionListener.java
deleted file mode 100644
index 4012e03..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IActionListener.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  Defines a listener to an {@link IDirect} component, which is way to
- *  get behavior when the component's URL is triggered (or the form
- *  containing the component is submitted).  Certain form elements 
- *  ({@link org.apache.tapestry.form.Hidden})
- *  also make use of this interface.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IActionListener
-{
-
-    /**
-     *  Method invoked by the component (an {@link org.apache.tapestry.link.DirectLink} or 
-     *  {@link org.apache.tapestry.form.Form}, when its URL is triggered.
-     *
-     *  @param component The component which was "triggered".
-     *  @param cycle The request cycle in which the component was triggered.
-     *
-     **/
-
-    void actionTriggered(IComponent component, IRequestCycle cycle);
-
-    /**
-     * The actual method name that this listener represents.
-     *
-     * @return The method name this listener is bound to.
-     */
-    String getMethodName();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IAsset.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IAsset.java
deleted file mode 100644
index 148c0d1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IAsset.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.io.InputStream;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.Resource;
-
-/**
- * Representation of a asset (GIF, JPEG, etc.) that may be owned by a {@link IComponent}.
- * <p>
- * Assets may be completely external (i.e., on some other web site), contained by the
- * {@link javax.servlet.ServletContext}, or stored somewhere in the classpath.
- * <p>
- * In the latter two cases, the resource may be localized.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IAsset extends Locatable
-{
-    /**
-     * Returns a URL for the asset, ready to be inserted into the output HTML. If the asset can be
-     * localized, the localized version (matching the {@link java.util.Locale}of the current
-     * {@link IPage page}) is returned.
-     * 
-     * @throws ApplicationRuntimeException
-     *             if the asset does not exist.
-     */
-
-    String buildURL();
-
-    /**
-     * Accesses the localized version of the resource (if possible) and returns it as an input
-     * stream. A version of the resource localized to the current {@link IPage page}is returned.
-     * 
-     * @throws ApplicationRuntimeException
-     *             if the asset does not exist, or can't be read.
-     */
-
-    InputStream getResourceAsStream();
-
-    /**
-     * Returns the underlying location of the asset.
-     */
-
-    Resource getResourceLocation();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IBeanProvider.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IBeanProvider.java
deleted file mode 100644
index 3b5ff58..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IBeanProvider.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.util.Collection;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-
-/**
- * An object that provides a component with access to helper beans. Helper beans
- * are JavaBeans associated with a page or component that are used to extend the
- * functionality of the component via aggregation.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.4
- */
-
-public interface IBeanProvider
-{
-
-    /**
-     * Returns the JavaBean with the specified name. The bean is created as
-     * needed.
-     * 
-     * @throws ApplicationRuntimeException
-     *             if no such bean is available.
-     */
-
-    Object getBean(String name);
-
-    /**
-     * Returns the {@link IComponent} (which may be a
-     * {@link org.apache.tapestry.IPage}) for which this bean provider is
-     * providing beans.
-     * 
-     * @since 1.0.5
-     */
-
-    IComponent getComponent();
-
-    /**
-     * Returns a collection of the names of any beans which may be provided.
-     * 
-     * @since 1.0.6
-     * @see org.apache.tapestry.spec.IComponentSpecification#getBeanNames()
-     */
-
-    Collection getBeanNames();
-
-    /**
-     * Returns true if the provider can provide the named bean.
-     * 
-     * @since 2.2
-     */
-
-    boolean canProvideBean(String name);
-
-    /**
-     * Returns a resource resolver.
-     * 
-     * @since 1.0.8
-     */
-
-    ClassResolver getClassResolver();
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IBinding.java
deleted file mode 100644
index c2bc2ef..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IBinding.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.Locatable;
-
-/**
- * A binding is the mechanism used to provide values for parameters of specific {@link IComponent}
- * instances. The component doesn't care where the required value comes from, it simply requires
- * that a value be provided when needed.
- * <p>
- * Bindings are set inside the containing component's specification or template. Bindings may be
- * invariant or dynamic (though that is irrelevant to the component). Components may also use a
- * binding to write a value back through a property to some other object (typically, another
- * component).
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IBinding extends Locatable
-{
-    /**
-     * Returns the value of this binding. This is the essential method.
-     */
-
-    Object getObject();
-
-    /**
-     * Returns the value for the binding after performing some basic checks.
-     * <p>
-     * Note: In release 4.0, the parameterName parameter was removed.
-     * 
-     * @param type
-     *            if not null, the value must be assignable to the specific class
-     * @throws BindingException
-     *             if the value is not assignable to the specified type
-     * @since 0.2.9
-     */
-
-    Object getObject(Class type);
-
-    /**
-     * Returns true if the value is invariant (not changing; the same value returned each time).
-     * Static and message bindings are always invariant, and
-     * {@link org.apache.tapestry.binding.ExpressionBinding}s may be marked invariant (as an
-     * optimization).
-     * 
-     * @since 2.0.3
-     */
-
-    boolean isInvariant();
-
-    /**
-     * Updates the value of the binding, if possible.
-     * 
-     * @exception BindingException
-     *                If the binding is read only.
-     */
-
-    void setObject(Object value);
-
-    /**
-     * Returns a description of how the binding is used; this description
-     * is localized and incorporated into some exception messages.
-     * 
-     * @since 4.0
-     */
-    
-    String getDescription();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IComponent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IComponent.java
deleted file mode 100644
index b0d1d65..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IComponent.java
+++ /dev/null
@@ -1,415 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.LocationHolder;
-import org.apache.hivemind.Messages;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.internal.event.IComponentEventInvoker;
-import org.apache.tapestry.listener.ListenerMap;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * Defines an object which may be used to provide dynamic content on a Tapestry web page.
- * <p>
- * Components are created dynamically from thier class names (part of the
- * {@link IComponentSpecification}).
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IComponent extends IRender, LocationHolder
-{
-
-    /**
-     * Adds an asset to the component. This is invoked from the page loader.
-     *
-     * @param name
-     *          The lookup name the asset will be bound to and referenacable as.
-     * @param asset
-     *          The asset to add.
-     */
-
-    void addAsset(String name, IAsset asset);
-
-    /**
-     * Adds a component to a container. Should only be called during the page loading process, which
-     * is responsible for doing all the necessary work of managing component state.
-     *
-     * @param component
-     *          The component to add.
-     * @see IPageLoader
-     */
-
-    void addComponent(IComponent component);
-
-    /**
-     * Adds a new renderable element to the receiver's body. The element may be either another
-     * component, or static HTML. Such elements come from inside the receiver's tag within its
-     * container's template, and represent static text and other components.
-     * <p>
-     * The method {@link #renderBody(IMarkupWriter, IRequestCycle)}is used to render these
-     * elements.
-     * 
-     * @since 2.2
-     */
-
-    void addBody(IRender element);
-    
-    /**
-     * Returns the asset map for the component, which may be empty but will not be null.
-     * <p>
-     * The return value is unmodifiable.
-     */
-
-    Map getAssets();
-
-    /**
-     * Returns the named asset, or null if not found.
-     */
-
-    IAsset getAsset(String name);
-
-    /**
-     * Returns the binding with the given name or null if not found.
-     * <p>
-     * Bindings are added to a component using {@link #setBinding(String,IBinding)}.
-     */
-
-    IBinding getBinding(String name);
-
-    /**
-     * Returns a {@link Collection}of the names of all bindings (which includes bindings for both
-     * formal and informal parameters).
-     * <p>
-     * The return value is unmodifiable. It will be null for a {@link IPage page}, or may simply be
-     * empty for a component with no bindings.
-     */
-
-    Collection getBindingNames();
-
-    /**
-     * Returns a {@link Map}of the {@link IBinding bindings}for this component; this includes
-     * informal parameters as well as formal bindings.
-     * 
-     * @since 1.0.5
-     */
-
-    Map getBindings();
-
-    /**
-     * Retrieves an contained component by its id. Contained components have unique ids within their
-     * container.
-     * 
-     * @exception ApplicationRuntimeException
-     *                runtime exception thrown if the named component does not exist.
-     */
-
-    IComponent getComponent(String id);
-
-    /**
-     * Returns the component which embeds the receiver. All components are contained within other
-     * components, with the exception of the root page component.
-     * <p>
-     * A page returns null.
-     */
-
-    IComponent getContainer();
-
-    /**
-     * Sets the container of the component. This is write-once, an attempt to change it later will
-     * throw an {@link ApplicationRuntimeException}.
-     */
-
-    void setContainer(IComponent value);
-
-    /**
-     * Returns a string identifying the name of the page and the id path of the reciever within the
-     * page (seperated by a slash). Note that this extended id is indetned primarily for identifying
-     * the component to the user (since slashes are legal characters within page names). Pages
-     * simply return their name.
-     * 
-     * @see #getIdPath()
-     */
-
-    String getExtendedId();
-
-    /**
-     * Returns the simple id of the component, as defined in its specification.
-     * <p>
-     * An id will be unique within the component which contains this component.
-     * <p>
-     * A {@link IPage page}will always return null.
-     */
-
-    String getId();
-
-    /**
-     * Sets the id of the component. This is write-once, an attempt to change it later will throw an
-     * {@link ApplicationRuntimeException}.
-     */
-
-    void setId(String value);
-    
-    /**
-     * Returns either the normal {@link #getId()} value OR the value of any binding 
-     * named <code>id</code> - if one exists. Higher precedence is given to bound id values.
-     * 
-     * @return The bound or normal component id, or null if neither exists.
-     */
-    
-    String getSpecifiedId();
-    
-    /**
-     * Returns the qualified id of the component. This represents a path from the {@link IPage page}
-     * to this component, showing how components contain each other.
-     * <p>
-     * A {@link IPage page}will always return null. A component contained on a page returns its
-     * simple id. Other components return their container's id path followed by a period and their
-     * own name.
-     * 
-     * @see #getId()
-     */
-
-    String getIdPath();
-
-    /**
-     * Returns the component's client-side element id. This has traditionally been an 
-     * {@link IFormComponent} only binding but now applies to all components. The method
-     * should check to see if any id parameter/property has been set already and use that
-     * above all others, falling back to {@link #getId()} if nothing else is found.
-     * 
-     * @return the id, or null if the component doesn't support a client id.
-     * @since 4.1
-     */
-    String getClientId();
-    
-    /**
-     * Sets the client ID. It is <strong>strongly</strong> discouraged for you to try
-     * setting this unless you understand the ramifications of how the rest of the system
-     * relies on this functioning.
-     * 
-     * @param id The client id to set.
-     */
-    void setClientId(String id);
-    
-    /**
-     * Used internally to "peek" at what the next generated client id will be for this 
-     * component when it renders. Similar to the logic found in {@link IRequestCycle#peekUniqueId(String)}.
-     * 
-     * @return The next possible client ID for this component.
-     */
-    String peekClientId();
-    
-    /**
-     * Though most component implementations ignore the specific html tag used 
-     * to reference a component, this value may be used for those components that
-     * do wish to use the same tag that was provided when rendering a component. 
-     * 
-     * <p>Example:<br/>
-     * <pre>
-     *  &lt;fieldset jwcid=&quot;@If&quot; condition=&quot;true&quot; &gt;
-     *      &lt;input type=&quot;text&quot; /&gt;
-     *  &lt;/fieldset&gt;
-     * </pre>
-     * </p>
-     * 
-     * <p>
-     *  In the example above, the value of the template tag would be "fieldset" for 
-     *  the If component.
-     * </p>
-     * 
-     * @return The html element tag name originally specified when referencing 
-     *         the component.
-     * @since 4.1
-     */
-    String getTemplateTagName();
-    
-    /**
-     * Sets the template tag name used to reference this component.
-     * 
-     * <p>
-     *  Set by the component template loader automatically, people shouldn't 
-     *  normally have any reason to try setting this.
-     * </p>
-     * 
-     * @param tag The tag name to set.
-     */
-    void setTemplateTagName(String tag);
-    
-    /**
-     * Returns the page which ultimately contains the receiver. A page will return itself.
-     */
-
-    IPage getPage();
-
-    /**
-     * Sets the page which ultimiately contains the component. This is write-once, an attempt to
-     * change it later will throw an {@link ApplicationRuntimeException}.
-     */
-
-    void setPage(IPage value);
-
-    /**
-     * Returns the specification which defines the component.
-     */
-
-    IComponentSpecification getSpecification();
-
-    /**
-     * Invoked to make the receiver render its body (the elements and components its tag wraps
-     * around, on its container's template). This method is public so that the
-     * {@link org.apache.tapestry.components.RenderBody}component may operate.
-     * 
-     * @since 2.2
-     */
-
-    void renderBody(IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     * Adds a binding to a container. Should only be called during the page loading process (which
-     * is responsible for eror checking).
-     * 
-     * @see IPageLoader
-     */
-
-    void setBinding(String name, IBinding binding);
-
-    /**
-     * Returns the contained components as an unmodifiable {@link Map}. This allows peer components
-     * to work together without directly involving their container ... the classic example is to
-     * have an {@link org.apache.tapestry.components.Insert}work with an enclosing
-     * {@link org.apache.tapestry.components.ForBean}.
-     * <p>
-     * This is late addition to Tapestry, because it also opens the door to abuse, since it is quite
-     * possible to break the "black box" aspect of a component by interacting directly with
-     * components it embeds. This creates ugly interelationships between components that should be
-     * seperated.
-     * 
-     * @return A Map of components keyed on component id. May return an empty map, but won't return
-     *         null.
-     */
-
-    Map getComponents();
-
-    /**
-     * Allows a component to finish any setup after it has been constructed.
-     * <p>
-     * The exact timing is not specified, but any components contained by the receiving component
-     * will also have been constructed before this method is invoked.
-     * 
-     * @since 0.2.12
-     */
-
-    void finishLoad(IRequestCycle cycle, IPageLoader loader, IComponentSpecification specification);
-
-    /**
-     * Returns component strings for the component. Starting in release 4.0, this method is
-     * unimplemented (and is automatically injected into each component implementation).
-     * 
-     * @since 3.0
-     */
-
-    Messages getMessages();
-
-    /**
-     * Returns the {@link INamespace}in which the component was defined (as an alias).
-     * 
-     * @since 2.2
-     */
-
-    INamespace getNamespace();
-
-    /**
-     * Sets the {@link INamespace}for the component. The namespace should only be set once.
-     * 
-     * @since 2.2
-     */
-
-    void setNamespace(INamespace namespace);
-
-    /**
-     * Returns true if the component is currently rendering.
-     * 
-     * @since 4.0
-     */
-
-    boolean isRendering();
-
-    /**
-     * Invoked after {@link #finishLoad(IRequestCycle, IPageLoader, IComponentSpecification)}to
-     * switch the component from its initial construction state into its active state. The
-     * difference concerns parameters, whose defaults values may be set from inside
-     * {@link #finishLoad(IRequestCycle, IPageLoader, IComponentSpecification)}.
-     * 
-     * @since 4.0
-     */
-
-    void enterActiveState();
-
-    /**
-     * Returns a {@link IBeanProvider} from which managed beans can be obtained.
-     * 
-     * @since 4.0
-     */
-
-    IBeanProvider getBeans();
-
-    /**
-     * Returns a {@link ListenerMap} for the component. The map contains a number of synthetic
-     * read-only properties that implement the {@link IActionListener} interface, but in fact, cause
-     * public instance methods to be invoked (via reflection).
-     * 
-     * @since 4.0
-     */
-
-    ListenerMap getListeners();
-
-    /**
-     * Returns the {@link org.apache.tapestry.spec.IContainedComponent}. This will be null for
-     * pages. This property is set when a component is constructed, and links the component instance
-     * to the reference in the containing page or component's template or specification. This is
-     * useful to allow a component to know its type or the meta-data associated with the component.
-     * 
-     * @return the contained component, or null for a page.
-     * @since 4.0
-     */
-
-    IContainedComponent getContainedComponent();
-
-    /**
-     * Sets the {@link #getContainedComponent()} property; this may only be done once.
-     * 
-     * @param containedComponent
-     *            may not be null
-     * @since 4.0
-     */
-    void setContainedComponent(IContainedComponent containedComponent);
-    
-    /**
-     * Returns the event connection manager services that handles creating/accepting
-     * browser events associated with various properties of components.
-     * 
-     * @return eventInvoker, may not be null
-     * @since 4.1
-     */
-    IComponentEventInvoker getEventInvoker();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IDirect.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IDirect.java
deleted file mode 100644
index d7ae71e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IDirect.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-
-/**
- *  Interface that defines classes that may be messaged by the direct
- *  service.
- */
-public interface IDirect extends IComponent, IDynamicInvoker
-{
-    /**
-     *  Invoked by the direct service to have the component perform
-     *  the appropriate action.  The {@link org.apache.tapestry.link.DirectLink} component will
-     *  notify its listener.
-     *
-     * @param cycle
-     *          The current request.
-     */
-    void trigger(IRequestCycle cycle);
-
-    /**
-     *  Invoked by the direct service to query the component as to
-     *  whether it is stateful.  If stateful and no 
-     *  {@link javax.servlet.http.HttpSession} is active, then a
-     *  {@link org.apache.tapestry.StaleSessionException} is
-     *  thrown by the service.
-     *
-     * @return Whether or not invocation should include state information and validate
-     *          that a valid session exists when triggered.
-     * @since 2.3
-     */
-    boolean isStateful();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IDirectEvent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IDirectEvent.java
deleted file mode 100644
index f5814f4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IDirectEvent.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright May 20, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry;
-
-import org.apache.tapestry.event.BrowserEvent;
-
-/**
- * Interface that defines classes that may be invoked directly by
- * the event service. 
- * 
- * @author jkuhnert
- */
-public interface IDirectEvent extends IComponent
-{
-
-    /**
-     *  Invoked by the event service to have the component peform
-     *  the appropriate action. 
-     **/
-    
-    void triggerEvent(IRequestCycle cycle, BrowserEvent event);
-
-    /**
-     *  Invoked by the event service to query the component as to
-     *  whether it is stateful.  If stateful and no 
-     *  {@link javax.servlet.http.HttpSession} is active, then a
-     *  {@link org.apache.tapestry.StaleSessionException} is
-     *  thrown by the service.
-     * 
-     **/
-
-    boolean isStateful();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IDynamicInvoker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IDynamicInvoker.java
deleted file mode 100644
index 92e4ce6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IDynamicInvoker.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright Aug 27, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry;
-
-import java.util.List;
-
-import org.apache.tapestry.components.Any;
-import org.apache.tapestry.link.DirectLink;
-
-
-/**
- * Represents "something" that can cause dynamic XHR/JSON requests to be executed
- * as a result of whatever actions the thing that it is attached to normally 
- * does.
- * 
- * <p>
- * This interface is more commonly implemented by components like {@link DirectLink} or
- * {@Form} to decorate existing functionality.
- * </p>
- * 
- * @author jkuhnert
- */
-public interface IDynamicInvoker
-{
-    
-    /**
-     * If set, will be used to update/refresh portions of a response during XHR requests.
-     * 
-     * <p>
-     *  For instance, if you have a page listing projects and you wanted to update an 
-     *  {@link Any} components contents whenever one of the project links was clicked 
-     *  you would use a {@link DirectLink} with the parameters:
-     * </p>
-     * 
-     * <pre>
-     *      updateComponents="{'projectDetails'}"
-     *      async="true"
-     * </pre>
-     * 
-     * @return The list of components to update, if any.
-     */
-    List getUpdateComponents();
-    
-    /**
-     * Used to specify whether or not the result of this invocation should be returned asynchronously
-     * or use normal browser page reload semantics. 
-     * 
-     * <p>
-     *  Async being true means responses will be encoded as XML using XmlHttpRequests. If you would like
-     *  your request/response to be in another format - like JSON - you must also specify the additional 
-     *  parameter {@link #isJson()}.  Without setting the {@link #getUpdateComponents()} parameter
-     * this parameter is pretty useless.
-     * </p>
-     * 
-     * @see #isJson()
-     * @return True if invocation should be processed asynchronously.
-     */
-    boolean isAsync();
-    
-    /**
-     * Used to specify that the return invocation of the response created should be in the
-     * {@linkplain "http://json.org"} format. Without setting the {@link #getUpdateComponents} parameter
-     * this parameter is pretty useless.
-     * 
-     * @see {@link org.apache.tapestry.IJSONRender}
-     * @return True if response should be encoded using JSON semantics.
-     */
-    boolean isJson();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IEngine.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IEngine.java
deleted file mode 100644
index 84c298c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IEngine.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.util.Locale;
-
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.services.WebRequestServicer;
-
-/**
- * Defines the core, session-persistant object used to run a Tapestry application for a single
- * client (each client will have its own instance of the engine).
- * <p>
- * The engine exists to provide core services to the pages and components that make up the
- * application. The engine is a delegate to the {@link ApplicationServlet}.
- * <p>
- * Starting in release 4.0, the engine is kept around only for compatibility (with release 3.0).
- * It's functions have been moved over into a collection of HiveMind services (or are in the process
- * of doing so).
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IEngine extends WebRequestServicer
-{
-    /**
-     * Returns the locale for the engine. This locale is used when selecting templates and assets.
-     */
-
-    Locale getLocale();
-
-    /**
-     * Changes the engine's locale. Any subsequently loaded pages will be in the new locale (though
-     * pages already loaded stay in the old locale). Generally, you should render a new page after
-     * changing the locale, to show that the locale has changed.
-     */
-
-    void setLocale(Locale value);
-
-    /**
-     * Returns the encoding to be used to generate the responses and accept the requests.
-     * 
-     * @since 3.0
-     */
-
-    String getOutputEncoding();
-
-    /**
-     * Returns the {@link org.apache.tapestry.services.Infrastructure}&nbsp;object, a central
-     * registry of key HiveMind services used by Tapestry.
-     * 
-     * @since 4.0
-     */
-
-    Infrastructure getInfrastructure();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IExternalPage.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IExternalPage.java
deleted file mode 100644
index 5b974e2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IExternalPage.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- * Defines a page which may be referenced externally via a URL using the
- * {@link org.apache.tapestry.engine.ExternalService}. External pages may be bookmarked via their
- * URL for latter display. See the {@link org.apache.tapestry.link.ExternalLink} for details on how
- * to invoke <tt>IExternalPage</tt>s.
- * 
- * @see org.apache.tapestry.callback.ExternalCallback
- * @see org.apache.tapestry.engine.ExternalService
- * @author Howard Lewis Ship
- * @author Malcolm Edgar
- * @since 2.2
- */
-
-public interface IExternalPage extends IPage
-{
-    /**
-     * Initialize the external page with the given array of parameters and request cycle.
-     * <p>
-     * This method is invoked after {@link IPage#validate(IRequestCycle)}.
-     * 
-     * @param parameters
-     *            the array of listener parameters
-     * @param cycle
-     *            current request cycle
-     */
-
-    void activateExternalPage(Object[] parameters, IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IForm.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IForm.java
deleted file mode 100644
index 020e14c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IForm.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.tapestry.valid.IValidationDelegate;
-
-/**
- * A generic way to access a component which defines an HTML form (or, perhaps, other similar
- * constructs, such as a WML {@link org.apache.tapestry.wml.Go}). This interface exists so that the
- * {@link IRequestCycle}can invoke the {@link #rewind(IMarkupWriter, IRequestCycle)}method (which
- * is used to deal with a Form that uses the direct service). In release 1.0.5, more responsibility
- * for forms was moved here.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.2
- */
-
-public interface IForm extends IComponent, FormBehavior, IDirect
-{
-    /**
-     * Invoked by the {@link IRequestCycle}to allow a form that uses the direct service, to respond
-     * to the form submission.
-     */
-
-    void rewind(IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     * Returns the name of the form. The name is determined as the form component begins to render,
-     * but is not reset (as a convienience for building client-side JavaScript event handlers). The
-     * Form (and Go) components render this name as both the name and the id attribute (so it can be
-     * used like
-     * {@link org.apache.tapestry.form.IFormComponent#getClientId() a field's clientId property}.
-     * 
-     * @since 1.0.5
-     */
-
-    String getName();
-
-    /**
-     * Returns the validation delegate for the form. Returns null if the form does not have a
-     * delegate.
-     * 
-     * @since 1.0.8
-     */
-
-    IValidationDelegate getDelegate();
-
-    /**
-     * Indicates whether or not client-side validation will be generated during render.
-     * 
-     * @return true, if client-side validation is enabled, false otherwise
-     * @since 4.0
-     */
-    boolean isClientValidationEnabled();
-
-    /**
-     * Returns true if the form should support automatic field focus (that is, adding JavaScript to
-     * position the cursor into the first field of the form, automatically). This requires that the
-     * Form component be enclosed by a {@link org.apache.tapestry.html.Body} component. When a
-     * single page contains multiple Forms, only the first Form that renders will get field focus;
-     * by setting the Form's focus parameter to false, it is possible to control which Form gets
-     * focus.
-     * 
-     * @since 4.0
-     */
-
-    boolean getFocus();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IJSONRender.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IJSONRender.java
deleted file mode 100644
index 9a7692e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IJSONRender.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright Mar 18, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry;
-
-import org.apache.tapestry.json.IJSONWriter;
-
-
-/**
- * Defines a component/page/class that is capable of rendering json
- * responses via {@link IJSONWriter} writers.
- * 
- * @author jkuhnert
- */
-public interface IJSONRender
-{
-
-    /**
-     * Renders a JSON object response back to the client. It should be assumed that
-     * if this method is called on a component it or one of the components it contains
-     * has been requested explicitly for rendering.
-     * 
-     * @param writer
-     *          The json object writer used to write valid JSON responses.
-     * @param cycle
-     *          Contextual request object.
-     */
-    void renderComponent(IJSONWriter writer, IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IMarkupWriter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IMarkupWriter.java
deleted file mode 100644
index 19b4d74..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IMarkupWriter.java
+++ /dev/null
@@ -1,321 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.tapestry.markup.Attribute;
-
-/**
- * Defines an object that can write markup (XML, HTML, XHTML) style output. A
- * <code>IMarkupWriter</code> handles translation from unicode to the markup language (escaping
- * characters such as '&lt;' and '&gt;' to their entity equivalents, '&amp;lt;' and '&amp;gt;') as
- * well as assisting with nested elements, closing tags, etc.
- * 
- * @author Howard Ship, David Solis
- */
-
-public interface IMarkupWriter
-{
-    /**
-     * Writes an integer attribute into the currently open tag.
-     * 
-     * @throws IllegalStateException
-     *             if there is no open tag.
-     */
-
-    void attribute(String name, int value);
-
-    /**
-     * Writes a boolean attribute into the currently open tag.
-     * 
-     * @throws IllegalStateException
-     *             if there is no open tag.
-     * @since 3.0
-     */
-
-    void attribute(String name, boolean value);
-
-    /**
-     * Writes an attribute into the most recently opened tag. This must be called after
-     * {@link #begin(String)}and before any other kind of writing (which closes the tag).
-     * <p>
-     * The value may be null.
-     * 
-     * @throws IllegalStateException
-     *             if there is no open tag.
-     */
-
-    void attribute(String name, String value);
-
-    /**
-     * Similar to {@link #attribute(String, String)}but no escaping of invalid elements is done for
-     * the value.
-     * 
-     * @throws IllegalStateException
-     *             if there is no open tag.
-     * @since 3.0
-     */
-
-    void attributeRaw(String name, String value);
-    
-    /**
-     * Appends an integer attribute to the current attribute with a matching 
-     * <code>name</code> key, if one exists. 
-     * 
-     * @throws IllegalStateException
-     *             if there is no open tag.
-     */
-
-    void appendAttribute(String name, int value);
-
-    /**
-     * Appends a boolean attribute into the currently open tag.
-     * 
-     * @throws IllegalStateException
-     *             if there is no open tag.
-     * @since 3.0
-     */
-
-    void appendAttribute(String name, boolean value);
-
-    /**
-     * Appends an attribute into the most recently opened tag. This must be called after
-     * {@link #begin(String)} and before any other kind of writing (which closes the tag).
-     * <p>
-     * The value may be null.
-     * 
-     * @throws IllegalStateException
-     *             if there is no open tag.
-     */
-
-    void appendAttribute(String name, String value);
-
-    /**
-     * Similar to {@link #attribute(String, String)} but no escaping of invalid elements is done for
-     * the value.
-     * 
-     * @throws IllegalStateException
-     *             if there is no open tag.
-     * @since 3.0
-     */
-
-    void appendAttributeRaw(String name, String value);
-    
-    /**
-     * Checks if the current tag has an attribute keyed off of <code>name</code>.
-     * 
-     * @param name
-     *          The name of the attribute to check for existance of.
-     * @return 
-     *          True if the attribute exists, false otherwise.
-     * @throws IllegalStateException
-     *             If there is no open tag.
-     */
-    boolean hasAttribute(String name);
-    
-    /**
-     * Gets the attribute matching <code>name</code> from the current open
-     * tag, if it exists.
-     * 
-     * @param name
-     *          The attribute to get the value of by name.
-     * @return 
-     *          The attribute value, or null if it doesn't exist.
-     * @throws IllegalStateException
-     *             If there is no open tag.
-     */
-    Attribute getAttribute(String name);
-    
-    /**
-     * Removes the attribute specified with a matching <code>name</code> if 
-     * one exists.
-     * 
-     * @param name
-     *          The attribute to remove.
-     * @return
-     *          The removed attribute, null if one didn't exist.
-     * @throws IllegalStateException
-     *             If there is no open tag.
-     */
-    Attribute removeAttribute(String name);
-    
-    /**
-     * Removes all current attributes on the open tag, if any.
-     * 
-     * @throws IllegalStateException
-     *             If there is no open tag.
-     */
-    void clearAttributes();
-    
-    /**
-     * Closes any existing tag then starts a new element. The new element is pushed onto the active
-     * element stack.
-     */
-
-    void begin(String name);
-
-    /**
-     * Starts an element that will not later be matched with an <code>end()</code> call. This is
-     * useful for elements that do not need closing tags.
-     */
-
-    void beginEmpty(String name);
-
-    /**
-     * Invokes checkError() on the <code>PrintWriter</code> used to format output.
-     */
-
-    boolean checkError();
-
-    /**
-     * Closes this <code>IMarkupWriter</code>. Close tags are written for any active elements.
-     * The <code>PrintWriter</code> is then sent <code>close()</code>. A nested writer will
-     * commit its buffer to its containing writer.
-     */
-
-    void close();
-
-    /**
-     * Closes the most recently opened element by writing the '&gt;' that ends it. Once this is
-     * invoked, the <code>attribute()</code> methods may not be used until a new element is opened
-     * with {@link #begin(String)}or or {@link #beginEmpty(String)}.
-     */
-
-    void closeTag();
-
-    /**
-     * Writes an XML/HTML comment. Any open tag is first closed. The method takes care of providing
-     * the <code>&lt;!--</code> and <code>--&gt;</code>, and provides a blank line after the
-     * close of the comment.
-     * <p>
-     * <em>Most</em> characters are valid inside a comment, so no check of the contents is made
-     * (much like {@link #printRaw(String)}.
-     */
-
-    void comment(String value);
-
-    /**
-     * Ends the element most recently started by {@link #begin(String)}. The name of the tag is
-     * popped off of the active element stack and used to form an HTML close tag.
-     */
-
-    void end();
-
-    /**
-     * Ends the most recently started element with the given name. This will also end any other
-     * intermediate elements. This is very useful for easily ending a table or even an entire page.
-     */
-
-    void end(String name);
-
-    /**
-     * Forwards <code>flush()</code> to this <code>IMarkupWriter</code>'s
-     * <code>PrintWriter</code>.
-     */
-
-    void flush();
-
-    /**
-     * Returns a nested writer, one that accumulates its changes in a buffer. When the nested writer
-     * is closed, it writes its buffer of markup into its containing <code>IMarkupWriter</code>
-     * using {@link #printRaw(String)}.
-     */
-
-    NestedMarkupWriter getNestedWriter();
-
-    /**
-     * Version of {@link #print(char[], int, int, boolean)}&nbsp;that assumes filter is
-     * <em>enabled</em>.
-     */
-
-    void print(char[] data, int offset, int length);
-
-    /**
-     * The primary <code>print()</code> method, used by most other methods.
-     * <p>
-     * Prints the character array, first closing any open tag. Problematic characters ('&lt;',
-     * '&gt;' and '&amp;') are converted to appropriate entities.
-     * <p>
-     * Does <em>nothing</em> if <code>data</code> is null.
-     * <p>
-     * Closes any open tag.
-     * 
-     * @param data
-     *            contains the characters to print, or null to not print anything
-     * @param offset
-     *            offset into the array to start printing from
-     * @param length
-     *            number of characters to print
-     * @param raw
-     *            if true, filtering is disabled
-     * @since 4.0
-     */
-
-    void print(char[] data, int offset, int length, boolean raw);
-
-    /**
-     * Prints a single character, or its equivalent entity.
-     * <p>
-     * Closes any open tag.
-     */
-
-    void print(char value);
-
-    /**
-     * Prints an integer.
-     * <p>
-     * Closes any open tag.
-     */
-
-    void print(int value);
-
-    /**
-     * As with {@link #print(char[], int, int, boolean)}, but the data to print is defined by the
-     * String. Assumes filtering is <em>enabled</em>.
-     */
-
-    void print(String value);
-
-    /**
-     * As with {@link #print(char[], int, int, boolean)}, but the data to print is defined by the
-     * String.
-     */
-
-    void print(String value, boolean raw);
-
-    /**
-     * Closes the open tag (if any), then prints a line seperator to the output stream.
-     */
-
-    void println();
-
-    /**
-     * Version of {@link #print(char[], int, int, boolean)}that assumes filter is <em>enabled</em>.
-     */
-
-    void printRaw(char[] buffer, int offset, int length);
-
-    /**
-     * As with {@link #print(char[], int, int, boolean)}, but the data to print is defined by the
-     * String. Assumes filtering is <em>disabled</em>.
-     */
-
-    void printRaw(String value);
-
-    /**
-     * Returns the type of content generated by this response writer, as a MIME type.
-     */
-
-    String getContentType();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/INamespace.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/INamespace.java
deleted file mode 100644
index 92bf642..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/INamespace.java
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-
-/**
- * Organizes different libraries of Tapestry pages, components and services into "frameworks", used
- * to disambiguate names.
- * <p>
- * Tapestry release 3.0 includes dynamic discovery of pages and components; an application or
- * library may contain a page or component that won't be "known" until the name is resolved (because
- * it involves searching for a particular named file).
- * <p>
- * A namespace implements {@link org.apache.tapestry.engine.IPropertySource}, exposing the
- * properties provided in the namespace's specification.
- * 
- * @see org.apache.tapestry.resolver.PageSpecificationResolver
- * @see org.apache.tapestry.resolver.ComponentSpecificationResolver
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public interface INamespace extends Locatable, IPropertySource
-{
-    /**
-     * Reserved name of a the implicit Framework library.
-     */
-
-    String FRAMEWORK_NAMESPACE = "framework";
-
-    /**
-     * Reserved name for the implicit (root) application namespace. Use of this prefix allows page
-     * or component defined in the application to be referenced from a library. Is this a good
-     * thing? In rare cases, yes. Is it subject to severe abuse? Yes.
-     * 
-     * @since 4.0
-     */
-
-    String APPLICATION_NAMESPACE = "application";
-
-    /**
-     * Character used to seperate the namespace prefix from the page name or component type.
-     * 
-     * @since 2.3
-     */
-
-    char SEPARATOR = ':';
-
-    /**
-     * Returns an identifier for the namespace. Identifiers are simple names (they start with a
-     * letter, and may contain letters, numbers, underscores and dashes). An identifier must be
-     * unique among a namespaces siblings.
-     * <p>
-     * The application namespace has a null id; the framework namespace has an id of "framework".
-     */
-
-    String getId();
-
-    /**
-     * Returns the extended id for this namespace, which is a dot-seperated sequence of ids.
-     */
-
-    String getExtendedId();
-
-    /**
-     * Returns a version of the extended id appropriate for error messages. This is the based on
-     * {@link #getExtendedId()}, unless this is the application or framework namespace, in which
-     * case special strings are returned.
-     * 
-     * @since 3.0
-     */
-
-    String getNamespaceId();
-
-    /**
-     * Returns the parent namespace; the namespace which contains this namespace.
-     * <p>
-     * The application and framework namespaces return null as the parent.
-     */
-
-    INamespace getParentNamespace();
-
-    /**
-     * Returns a namespace contained by this namespace.
-     * 
-     * @param id
-     *            either a simple name (of a directly contained namespace), or a dot-separated name
-     *            sequence
-     * @return the child namespace
-     * @throws ApplicationRuntimeException
-     *             if no such namespace exist.
-     */
-
-    INamespace getChildNamespace(String id);
-
-    /**
-     * Returns a sorted, immutable list of the ids of the immediate children of this namespace. May
-     * return the empty list, but won't return null.
-     */
-
-    List getChildIds();
-
-    /**
-     * Returns the page specification of the named page (defined within the namespace).
-     * 
-     * @param name
-     *            the name of the page
-     * @return the specification
-     * @throws ApplicationRuntimeException
-     *             if the page specification doesn't exist or can't be loaded
-     */
-
-    IComponentSpecification getPageSpecification(String name);
-
-    /**
-     * Returns true if this namespace contains the specified page name.
-     */
-
-    boolean containsPage(String name);
-
-    /**
-     * Returns a sorted list of page names. May return an empty list, but won't return null. The
-     * return list is immutable.
-     */
-
-    List getPageNames();
-
-    /**
-     * Returns the path for the named component (within the namespace).
-     * 
-     * @param type
-     *            the component type
-     * @return the specification for the component
-     * @throws ApplicationRuntimeException
-     *             if the specification doesn't exist or can't be loaded
-     */
-
-    IComponentSpecification getComponentSpecification(String type);
-
-    /**
-     * Returns true if the namespace contains the indicated component type.
-     * 
-     * @param type
-     *            a simple component type (no namespace prefix is allowed)
-     */
-
-    boolean containsComponentType(String type);
-
-    /**
-     * Returns the {@link org.apache.tapestry.spec.LibrarySpecification}from which this namespace
-     * was created.
-     */
-
-    ILibrarySpecification getSpecification();
-
-    /**
-     * Constructs a qualified name for the given simple page name by applying the correct prefix (if
-     * any).
-     * 
-     * @since 2.3
-     */
-
-    String constructQualifiedName(String pageName);
-
-    /**
-     * Returns the location of the resource from which the specification for this namespace was
-     * read.
-     */
-
-    Resource getSpecificationLocation();
-
-    /**
-     * Returns true if the namespace is the special application namespace (which has special search
-     * rules for handling undeclared pages and components).
-     * 
-     * @since 3.0
-     */
-
-    boolean isApplicationNamespace();
-
-    /**
-     * Used to specify additional pages beyond those that came from the namespace's specification.
-     * This is used when pages in the application namespace are dynamically discovered.
-     * 
-     * @since 3.0
-     */
-
-    void installPageSpecification(String pageName, IComponentSpecification specification);
-
-    /**
-     * Used to specify additional components beyond those that came from the namespace's
-     * specification. This is used when components in the application namespace are dynamically
-     * discovered.
-     * 
-     * @since 3.0
-     */
-
-    void installComponentSpecification(String type, IComponentSpecification specification);
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IPage.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IPage.java
deleted file mode 100644
index d060226..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IPage.java
+++ /dev/null
@@ -1,282 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.event.*;
-import org.apache.tapestry.record.PropertyChangeObserver;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.util.ContentType;
-
-import java.util.Locale;
-
-/**
- * A root level component responsible for generating an entire a page within the application.
- * <p>
- * Pages are created dynamically from their class names (part of the
- * {@link org.apache.tapestry.spec.IComponentSpecification}).
- * 
- * @see org.apache.tapestry.engine.IPageSource
- * @see org.apache.tapestry.engine.IPageLoader
- * @author Howard Lewis Ship
- */
-
-public interface IPage extends IComponent
-{
-    /**
-     * Invoked on a page when it is no longer needed by the engine, just before is is returned to
-     * the pool. The page is expected to null the engine, visit and changeObserver properties.
-     * <p>
-     * Classes should also reset any properties to default values (as if the instance was freshly
-     * instantiated).
-     * 
-     * @see org.apache.tapestry.engine.IPageSource#releasePage(IPage)
-     */
-
-    void detach();
-
-    /**
-     * Returns the {@link IEngine}that the page is currently attached to.
-     */
-
-    IEngine getEngine();
-
-    /**
-     * Returns the object (effectively, an {@link org.apache.tapestry.engine.IPageRecorder}) that
-     * is notified of any changes to persistant properties of the page.
-     */
-
-    ChangeObserver getChangeObserver();
-    
-    /**
-     * Returns the injected property change service responsible for monitoring changes to 
-     * individual object properties being persisted.
-     * 
-     * @return The injected property change service.
-     */
-    PropertyChangeObserver getPropertyChangeObserver();
-    
-    /**
-     * Returns the <code>Locale</code> of the page. The locale may be used to determine what
-     * template is used by the page and the components contained by the page.
-     */
-
-    Locale getLocale();
-
-    /**
-     * Updates the page's locale. This is write-once, a subsequent attempt will throw an
-     * {@link ApplicationRuntimeException}.
-     */
-
-    void setLocale(Locale value);
-
-    /**
-     * Returns the fully qualified name of the page, including its namespace prefix, if any.
-     * 
-     * @since 2.3
-     */
-
-    String getPageName();
-
-    /**
-     * Sets the name of the page.
-     * 
-     * @param pageName
-     *            fully qualified page name (including namespace prefix, if any)
-     * @since 3.0
-     */
-
-    void setPageName(String pageName);
-
-    /**
-     * Returns a particular component from within the page. The path is a dotted name sequence
-     * identifying the component. It may be null in which case the page returns itself.
-     * 
-     * @exception ApplicationRuntimeException
-     *                runtime exception thrown if the path does not identify a component.
-     */
-
-    IComponent getNestedComponent(String path);
-
-    /**
-     * Attaches the page to the {@link IEngine engine}. This method is used when a pooled page is
-     * claimed for use with a particular engine; it will stay attached to the engine until the end
-     * of the current request cycle, then be returned to the pool.
-     * <p>
-     * This method will notify any {@link PageAttachListener}s.
-     * <p>
-     * This method is rarely overriden; to initialize page properties before a render, implement the
-     * {@link PageBeginRenderListener}interface.
-     */
-
-    void attach(IEngine engine, IRequestCycle cycle);
-
-    /**
-     * Used to explicitly fire {@link PageAttachListener}s for this page. This is used when a page
-     * is first loaded; The page loader attaches the newly created page <em>instance</em> before
-     * the rest of the page and components is loaded. In order to have meaningful event
-     * notifications when a page is first loaded (rather than pulled from the pool), it is necessary
-     * to fire page attach listeners at the end of the load.
-     * 
-     * @since 4.0
-     */
-
-    void firePageAttached();
-
-    /**
-     * Invoked to render the entire page. This should only be invoked by
-     * {@link IRequestCycle#renderPage(ResponseBuilder builder)}.
-     * <p>
-     * The page performs a render using the following steps:
-     * <ul>
-     * <li>Invokes
-     * {@link PageBeginRenderListener#pageBeginRender(org.apache.tapestry.event.PageEvent)}
-     * <li>Invokes {@link #beginPageRender()}
-     * <li>Invokes {@link IRequestCycle#commitPageChanges()}(if not rewinding)
-     * <li>Invokes {@link #render(IMarkupWriter, IRequestCycle)}
-     * <li>Invokes {@link PageEndRenderListener#pageEndRender(org.apache.tapestry.event.PageEvent)}
-     * (this occurs even if a previous step throws an exception).
-     * </ul>
-     */
-
-    void renderPage(ResponseBuilder builder, IRequestCycle cycle);
-
-    /**
-     * Invoked before a partial render of the page occurs (this happens when rewinding a
-     * {@link org.apache.tapestry.form.Form}within the page). The page is expected to fire
-     * appopriate events.
-     * 
-     * @since 2.2
-     */
-
-    void beginPageRender();
-
-    /**
-     * Invoked after a partial render of the page occurs (this happens when rewinding a
-     * {@link org.apache.tapestry.form.Form}within the page). The page is expected to fire
-     * appropriate events.
-     * 
-     * @since 2.2
-     */
-
-    void endPageRender();
-
-    void setChangeObserver(ChangeObserver value);
-
-    /**
-     * Method invoked by the page, action and direct services to validate that the user is allowed
-     * to visit the page.
-     * <p>
-     * Most web applications have a concept of 'logging in' and pages that an anonymous (not logged
-     * in) user should not be able to visit directly. This method acts as the first line of defense
-     * against a malicous user hacking URLs.
-     * <p>
-     * Pages that should be protected will typically throw a {@linkPageRedirectException}, to
-     * redirect the user to an appropriate part of the system (such as, a login page).
-     * <p>
-     * Since 3.0, it is easiest to not override this method, but to implement the
-     * {@link PageValidateListener} interface instead.
-     */
-
-    void validate(IRequestCycle cycle);
-
-    /**
-     * Invoked to obtain the content type to be used for the response. The implementation of this
-     * method is the primary difference between an HTML page and an XML/WML/etc. page.
-     */
-
-    ContentType getResponseContentType();
-
-    /**
-     * Returns the current {@link IRequestCycle}. This is set when the page is loaded (or obtained
-     * from the pool) and attached to the {@link IEngine engine}.
-     */
-
-    IRequestCycle getRequestCycle();
-
-    /**
-     * Whether or not this page contains {@link IForm} instances.
-     *
-     * @return True if page contains forms, false otherwise.
-     */
-    boolean hasFormComponents();
-
-    /**
-     * Sets whether or not page has forms.
-     *
-     * @param value Indicator of containing forms.
-     */
-    void setHasFormComponents(boolean value);
-
-    /**
-     * Whether or not this page contains {@link org.apache.tapestry.dojo.IWidget} instances.
-     *
-     * @return True if page contains widgets, false otherwise.
-     */
-    boolean hasWidgets();
-
-    /**
-     * Sets whether or not page has widgets.
-     *
-     * @param value Indicator of containing widgets.
-     */
-    void setHasWidgets(boolean value);
-
-    /** @since 4.0 */
-    void addPageBeginRenderListener(PageBeginRenderListener listener);
-
-    /** @since 4.0 */
-    void removePageBeginRenderListener(PageBeginRenderListener listener);
-
-    /** @since 4.0 */
-
-    void addPageEndRenderListener(PageEndRenderListener listener);
-
-    /** @since 4.0 */
-
-    void removePageEndRenderListener(PageEndRenderListener listener);
-
-    /**
-     * @since 1.0.5
-     */
-
-    void addPageDetachListener(PageDetachListener listener);
-
-    /**
-     * @since 2.1
-     */
-
-    void removePageDetachListener(PageDetachListener listener);
-
-    /**
-     * @since 3.0
-     */
-
-    void addPageValidateListener(PageValidateListener listener);
-
-    /**
-     * @since 3.0
-     */
-
-    void removePageValidateListener(PageValidateListener listener);
-
-    /** @since 4.0 */
-
-    void addPageAttachListener(PageAttachListener listener);
-
-    /** @since 4.0 */
-
-    void removePageAttachListener(PageAttachListener listener);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IRender.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IRender.java
deleted file mode 100644
index e3ae96b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IRender.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  An element that may be asked to render itself to an
- *  {@link IMarkupWriter} using a {@link IRequestCycle}.
- *
- *  <p>This primarily includes {@link IComponent} and {@link IPage},
- *  but also extends to other things, such as objects responsible for
- *  rendering static markup text.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IRender
-{
-    /**
-     *  The principal rendering/rewinding method.  This will cause
-     *  the receiving component to render its top level elements (HTML
-     *  text and components).
-     *
-     *  <p>Renderring and rewinding are the exact same process.  The
-     *  same code that renders must be able to restore state by going
-     *  through the exact same operations (even though the output is
-     *  discarded).
-     *
-     **/
-
-    void render(IMarkupWriter writer, IRequestCycle cycle);
-    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IRequestCycle.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IRequestCycle.java
deleted file mode 100644
index da4efc1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IRequestCycle.java
+++ /dev/null
@@ -1,431 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.services.ResponseBuilder;
-
-import java.util.Iterator;
-
-/**
- * Controller object that manages a single request cycle. A request cycle is one 'hit' on the web
- * server. In the case of a Tapestry application, this will involve:
- * <ul>
- * <li>Responding to the URL by finding an {@link IEngineService}object
- * <li>Determining the result page
- * <li>Renderring the result page
- * <li>Releasing any resources
- * </ul>
- * <p>
- * Mixed in with this is:
- * <ul>
- * <li>Exception handling
- * <li>Loading of pages and templates from resources
- * <li>Tracking changes to page properties, and restoring pages to prior states
- * <li>Pooling of page objects
- * </ul>
- * 
- * <p>
- * A request cycle is broken up into two phases. The <em>rewind</em> phase is optional, as it tied
- * to {@link org.apache.tapestry.form.Form}
- * components. In the rewind phase, a previous page render is redone (discarding output) until a
- * specific component of the page is reached. This rewinding ensures that the page is restored to
- * the exact state it had when the URL for the request cycle was generated, taking into account the
- * dynamic nature of the page ({@link org.apache.tapestry.components.ForBean},
- * {@link org.apache.tapestry.components.Conditional}, etc.). Once this component is reached, it
- * can notify its {@link IActionListener}. The listener has the ability to update the state of any
- * pages and select a new result page.
- * </p>
- * 
- * <p>
- * Following the rewind phase is the <em>render</em> phase. During the render phase, a page is
- * actually rendered and output sent to the client web browser.
- * </p>
- * @author Howard Lewis Ship
- */
-
-public interface IRequestCycle
-{
-    /**
-     * Invoked after the request cycle is no longer needed, to release any resources it may have.
-     * This includes releasing any loaded pages back to the page source.
-     */
-
-    void cleanup();
-
-    /**
-     * Passes the String through
-     * {@link javax.servlet.http.HttpServletResponse#encodeURL(java.lang.String)}, which ensures
-     * that the session id is encoded in the URL (if necessary).
-     *
-     * @param URL The url to encode.
-     * @return The encoded form of the url.
-     */
-
-    String encodeURL(String URL);
-
-    /**
-     * Returns the engine which is processing this request cycle.
-     *
-     * @return The engine.
-     */
-
-    IEngine getEngine();
-
-    /**
-     * Retrieves a previously stored attribute, returning null if not found. Attributes allow
-     * components to locate each other; primarily they allow a wrapped component to locate a
-     * component which wraps it. Attributes are cleared at the end of the render (or rewind).
-     *
-     * @param name The name of the attribute to retrieve.
-     * @return The matching attribute with the specified name, or null if none found.
-     */
-
-    Object getAttribute(String name);
-
-    /**
-     * Identifies the active page, the page which will ultimately render the response.
-     *
-     * @return The active page.
-     */
-
-    IPage getPage();
-
-    /**
-     * Returns the page with the given name. If the page has been previously loaded in the current
-     * request cycle, that page is returned. Otherwise, the engine's page loader is used to load the
-     * page.
-     *
-     * @param name The page to get a reference to.
-     * @return The page instance.
-     * 
-     * @throws PageNotFoundException
-     *             if the page does not exist.
-     *             
-     * @see org.apache.tapestry.engine.IPageSource#getPage(IRequestCycle, String)
-     */
-
-    IPage getPage(String name);
-
-    /**
-     * Returns true if the context is being used to rewind a prior state of the page. This is only
-     * true when there is a target action id.
-     *
-     * @return True if rewinding a form, false otherwise.
-     */
-
-    boolean isRewinding();
-
-    /**
-     * Checks to see if the current action id matches the target action id. Returns true only if
-     * they match. Returns false if there is no target action id (that is, during page rendering).
-     * <p>
-     * If theres a match on action id, then the component is compared against the target component.
-     * If there's a mismatch then a {@link StaleLinkException}is thrown.
-     *
-     * @param component The component to check.
-     * @return True if the specified component has been rewound.
-     */
-
-    boolean isRewound(IComponent component);
-
-    /**
-     * Sets the {@link ResponseBuilder} to use for this response, don't 
-     * try setting this unless you're very sure you know what you are doing as
-     * this isn't the only way that it is used. (ie replacing this builder won't 
-     * necessarily override another builder being used already)
-     * 
-     * @param builder The response builder that may be used by components
-     * to help with delegate/sub component rendering.
-     */
-    void setResponseBuilder(ResponseBuilder builder);
-    
-    /**
-     * Entry point for getting the response builder used to build
-     * this response.
-     * @return The response builder used for this response.
-     */
-    ResponseBuilder getResponseBuilder();
-    
-    /**
-     * Tests if the render component chain is empty, meaning no components have
-     * been loaded onto the stack yet.
-     * 
-     * @return True, if the current stack is empty.
-     */
-    boolean renderStackEmpty();
-    
-    /**
-     * Looks at the object at the top of the render stack without removing 
-     * the {@link IRender} from the stack.
-     * 
-     * @return The last (parent) item added to the current render stack.
-     */
-    IRender renderStackPeek();
-    
-    /**
-     * Removes the {@link IRender} at the top of the stack, if any.
-     * 
-     * @return The removed {@link IRender}, if any.
-     */
-    IRender renderStackPop();
-    
-    /**
-     * Pushes the specified render onto the current render stack.
-     * 
-     * @param render The {@link IRender} object being pushed.
-     * @return The added {@link IRender}.
-     */
-    IRender renderStackPush(IRender render);
-    
-    /**
-     * Returns the 1-based position where an object is on this stack. If the object 
-     * o occurs as an item in this stack, this method returns the distance from the 
-     * top of the stack of the occurrence nearest the top of the stack; the topmost 
-     * item on the stack is considered to be at distance 1. The equals method is used 
-     * to compare o to the items in this stack.
-     * 
-     * @param render The {@link IRender} being searched for.
-     * 
-     * @return the 1-based position from the top of the stack where the object is 
-     *          located; the return value -1  indicates that the object is not on the stack.
-     */
-    int renderStackSearch(IRender render);
-    
-    /**
-     * Creates a traversable iterator for moving through the stack.
-     * 
-     * @return An iterator over the current stack.
-     */
-    Iterator renderStackIterator();
-    
-    /**
-     * Removes a previously stored attribute, if one with the given name exists.
-     *
-     * @param name The key name of the attribute to remove.
-     */
-
-    void removeAttribute(String name);
-
-    /**
-     * Renders the given page. Applications should always use this method to render the page, rather
-     * than directly invoking {@link IPage#render(IMarkupWriter, IRequestCycle)}since the request
-     * cycle must perform some setup before rendering.
-     *
-     * @param builder Renders the currently active page using the specified builder.
-     */
-
-    void renderPage(ResponseBuilder builder);
-
-    /**
-     * Allows a temporary object to be stored in the request cycle, which allows otherwise unrelated
-     * objects to communicate. This is similar to <code>HttpServletRequest.setAttribute()</code>,
-     * except that values can be changed and removed as well.
-     * <p>
-     * This is used by components to locate each other. A component, such as
-     * {@link org.apache.tapestry.html.Body}, will write itself under a well-known name into the
-     * request cycle, and components it wraps can locate it by that name.
-     * <p>
-     * Attributes are cleared at the end of each render or rewind phase.
-     *
-     * @param name Key name of the attribute to store.
-     * @param value Value of the attribute.
-     */
-
-    void setAttribute(String name, Object value);
-
-    /**
-     * Invoked just before rendering the response page to get all
-     * {@link org.apache.tapestry.engine.IPageRecorder page recorders}touched in this request cycle
-     * to commit their changes (save them to persistant storage).
-     * 
-     * @see org.apache.tapestry.engine.IPageRecorder#commit()
-     */
-
-    void commitPageChanges();
-
-    /**
-     * Returns the service which initiated this request cycle.
-     *
-     * @return The service associated with current request.
-     * @since 1.0.1
-     */
-
-    IEngineService getService();
-
-    /**
-     * Used by {@link IForm forms}to perform a <em>partial</em> rewind so as to respond to the
-     * form submission (using the direct service).
-     *
-     * @param form The form to rewind.
-     * 
-     * @since 1.0.2
-     */
-
-    void rewindForm(IForm form);
-
-    /**
-     * Sets client side form focus off globally for all forms in this request cycle.
-     */
-    void disableFocus();
-    
-    /**
-     * Check for global focus being disabled.
-     * @return True if focus is disabled, false otherwise.
-     */
-    boolean isFocusDisabled();
-    
-    /**
-     * Invoked by a {@link IEngineService service}&nbsp;to store an array of application-specific
-     * parameters. These can later be retrieved (typically, by an application-specific listener
-     * method) by invoking {@link #getListenerParameters()}.
-     *
-     * @param parameters The parameters to set which will be available as method parameters
-     *                  to any listeners invoked in this request.
-     * @see org.apache.tapestry.engine.DirectService
-     * @since 4.0
-     */
-    void setListenerParameters(Object[] parameters);
-
-    /**
-     * Returns parameters previously stored by {@link #setListenerParameters(Object[])}.
-     *
-     * @return The current set of bound listener parameters for the current service.
-     * @since 4.0
-     */
-
-    Object[] getListenerParameters();
-
-    /**
-     * A convienience for invoking {@link #activate(IPage)}. Invokes {@link #getPage(String)}to
-     * get an instance of the named page.
-     *
-     * @param name The name of the page to activate.
-     * @since 3.0
-     */
-
-    void activate(String name);
-
-    /**
-     * Sets the active page for the request. The active page is the page which will ultimately
-     * render the response. The activate page is typically set by the {@link IEngineService service}.
-     * Frequently, the active page is changed (from a listener method) to choose an alternate page
-     * to render the response).
-     * <p>
-     * {@link IPage#validate(IRequestCycle)}is invoked on the page to be activated.
-     * {@link PageRedirectException}is caught and the page specified in the exception will be the
-     * active page instead (that is, a page may "pass the baton" to another page using the
-     * exception). The new page is also validated. This continues until a page does not throw
-     * {@link PageRedirectException}.
-     * <p>
-     * Validation loops can occur, where page A redirects to page B and then page B redirects back
-     * to page A (possibly with intermediate steps). This is detected and results in an
-     * {@link ApplicationRuntimeException}.
-     *
-     * @param page The page to activate.
-     *
-     * @since 3.0
-     */
-    void activate(IPage page);
-    
-    /**
-     * Returns a query parameter value, or null if not provided in the request. If multiple values
-     * are provided, returns the first value.
-     *
-     * @param name The name of the request parameter to retrieve.
-     * @return The value matching the specified parameter name, or null if none found.
-     * @since 4.0
-     */
-    String getParameter(String name);
-
-    /**
-     * Returns all query parameter values for the given name. Returns null if no values were
-     * provided.
-     *
-     * @param name The name of the parameters to retrieve.
-     * @return The matching multi value array for the specified name, or null if none found.
-     * @since 4.0
-     */
-    String[] getParameters(String name);
-
-    /**
-     * Converts a partial URL into an absolute URL. Prefixes the provided URL with servlet context
-     * path (if any), then expands it to a full URL by prepending with the scheme, server and port
-     * (determined from the current {@link org.apache.tapestry.web.WebRequest request}.
-     *
-     * @param partialURL The url to modify into an absolute url.
-     * @return The converted absolute url representation of the specified partialURL.
-     * @since 4.0
-     */
-
-    String getAbsoluteURL(String partialURL);
-
-    /**
-     * Forgets any stored changes to the specified page. If the page has already been loaded (and
-     * rolled back) then the loaded page instance is not affected; if the page is only loaded
-     * subsequently, the page instance will not see any persisted property changes.
-     *
-     * @param name The name of the page instance to throw all persistent properties away for.
-     * @since 4.0
-     */
-
-    void forgetPage(String name);
-
-    /**
-     * Returns the central {@link org.apache.tapestry.services.Infrastructure}&nbsp;object used to
-     * manage the processing of the request.
-     *
-     * @return The {@link Infrastructure} object associated with this request.
-     * @since 4.0
-     */
-
-    Infrastructure getInfrastructure();
-
-    /**
-     * Returns the provided string, possibly modified (with an appended suffix) to make it unique.
-     * 
-     * @param baseId
-     *            the base id from which to generate the unique string.
-     * @return baseId, or baseId with a suffix appended (if the method has been previously invoked
-     *         with the same baseId).
-     */
-
-    String getUniqueId(String baseId);
-    
-    /**
-     * Returns what <i>will</i> be the next unique id generated based on the given input, but doesn't
-     * store the result.
-     * 
-     * @param baseId
-     *            the base id from which to generate the unique string.
-     * @return baseId, or baseId with a suffix appended (if the method has been previously invoked
-     *         with the same baseId).
-     */
-
-    String peekUniqueId(String baseId);
-    
-    /**
-     * Sends a redirect to the client web browser. This is currently a convinience for constructing
-     * and throwing a {@link RedirectException}, but may change in a later release.
-     *
-     * @param URL The url to send a client redirect for.
-     * @since 4.0
-     * @throws RedirectException
-     */
-
-    void sendRedirect(String URL);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IScript.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IScript.java
deleted file mode 100644
index cc21a20..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IScript.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.util.Map;
-
-import org.apache.hivemind.Resource;
-
-/**
- *  An object that can convert a set of symbols into a collection of JavaScript statements.
- *
- *  <p>IScript implementation must be threadsafe.
- *
- *  @author Howard Lewis Ship
- *  @since 1.0.2
- * 
- **/
-
-public interface IScript
-{
-    /**
-     *  Returns the location from which the script was loaded.
-     *
-     **/
-
-    Resource getScriptResource();
-
-    /**
-     * Executes the script, which will read and modify the symbols {@link Map}.  The
-     * script works with the {@link IScriptProcessor} to get the generated JavaScript
-     * included on the page.
-     * 
-     * @param cycle the current request cycle
-     * @param processor an object that processes the results of the script, typically
-     * an instance of {@link org.apache.tapestry.html.Body}
-     * @param symbols Map of input symbols; execution of the script may modify the map,
-     * creating new output symbols
-     * 
-     * @see TapestryUtils#getPageRenderSupport(IRequestCycle, IComponent)
-     * @deprecated To be removed in Tapestry 4.2. 
-     *              Use the new {@link #execute(IComponent, IRequestCycle, IScriptProcessor, Map)} method instead.
-     */
-
-    void execute(IRequestCycle cycle, IScriptProcessor processor, Map symbols);
-    
-    /**
-     * Executes the script, which will read and modify the symbols {@link Map}.  The
-     * script works with the {@link IScriptProcessor} to get the generated JavaScript
-     * included on the page.
-     * 
-     * @param target The component this script is being executed by/for
-     * @param cycle the current request cycle
-     * @param processor an object that processes the results of the script, typically
-     * an instance of {@link org.apache.tapestry.html.Body}
-     * @param symbols Map of input symbols; execution of the script may modify the map,
-     * creating new output symbols
-     * 
-     * @see TapestryUtils#getPageRenderSupport(IRequestCycle, IComponent)
-     *
-     */
-
-    void execute(IComponent target, IRequestCycle cycle, IScriptProcessor processor, Map symbols);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IScriptProcessor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/IScriptProcessor.java
deleted file mode 100644
index f99b247..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/IScriptProcessor.java
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.Resource;
-
-/**
- * Defines methods needed by a {@link org.apache.tapestry.IScript}to execute.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- * @see org.apache.tapestry.html.Body
- */
-
-public interface IScriptProcessor
-{
-    /**
-     * Adds scripting code to the main body. During the render, multiple scripts may render multiple
-     * bodies; all are concatinated together to form a single block. The
-     * {@link org.apache.tapestry.html.Body}&nbsp;component will write the body script contents
-     * just inside the <code>&lt;body&gt;</code> tag.
-     * 
-     * @deprecated To be removed sometime after 4.1.
-     * @see {@link #addBodyScript(IComponent, String)}
-     */
-
-    void addBodyScript(String script);
-
-    /**
-     * Adds scripting code to the main body. During the render, multiple scripts may render multiple
-     * bodies; all are concatinated together to form a single block. The
-     * {@link org.apache.tapestry.html.Body}&nbsp;component will write the body script contents
-     * just inside the <code>&lt;body&gt;</code> tag.
-     * 
-     * @param target
-     *          The component this script is being added for.
-     * @param script
-     *          The script to add to the body response.
-     */
-    void addBodyScript(IComponent target, String script);
-    
-    /**
-     * Adds initialization script. Initialization script is executed once, when the containing page
-     * loads. Initialization script content is written only after all HTML content that could be
-     * referenced from the script (in effect, just before the <code>&lt/body&gt;</code> tag).
-     * 
-     * @deprecated To be removed sometime after 4.1.
-     * @see {@link #addInitializationScript(IComponent, String)}
-     */
-    void addInitializationScript(String script);
-
-    /**
-     * Adds initialization script. Initialization script is executed once, when the containing page
-     * loads. Initialization script content is written only after all HTML content that could be
-     * referenced from the script (in effect, just before the <code>&lt/body&gt;</code> tag).
-     * 
-     * @param target
-     *          The component the script is being added for.
-     * @param script
-     *          The script to add.
-     */
-    void addInitializationScript(IComponent target, String script);
-
-    /**
-     * Works in the same way as {@link #addInitializationScript(IComponent, String)} - except this
-     * method causes the script being added to appear <em>after</em> all of the script content written out
-     * from the normal initialization script processing happens.  This is useful if you have some initialization
-     * script logic that absolutely must happen at the very end of the rest of things.
-     *
-     * @see {@link #addInitializationScript(IComponent, String)}.
-     * 
-     * @param target
-     *          The component the script is being added for.
-     * @param script
-     *          The script to add.
-     */
-    void addScriptAfterInitialization(IComponent target, String script);
-
-    /**
-     * Adds an external script. The processor is expected to ensure that external scripts are only
-     * loaded a single time per page.
-     * 
-     * @deprecated To be removed sometime after 4.1
-     * @see {@link #addExternalScript(IComponent, Resource)}
-     */
-
-    void addExternalScript(Resource resource);
-
-    /**
-     * Adds an external script. The processor is expected to ensure that external scripts are only
-     * loaded a single time per page. The target will be checked to filter the scripts
-     * added for those types of responses that require them.
-     * 
-     * @param target
-     *          The component the script is being added for.
-     * @param resource
-     *          The external script to add.
-     */
-    void addExternalScript(IComponent target, Resource resource);
-    
-    /**
-     * Determines if the specified component should have its javascript 
-     * body added to the response.
-     * 
-     * @param target
-     *          The component to allow/disallow body script content from.
-     * @return True if the component script should be allowed.
-     */
-    boolean isBodyScriptAllowed(IComponent target);
-    
-    /**
-     * Determines if the specified component should have its javascript 
-     * initialization added to the response.
-     * 
-     * @param target
-     *          The component to allow/disallow initialization script content from.
-     * @return True if the component script should be allowed.
-     */
-    boolean isInitializationScriptAllowed(IComponent target);
-    
-    /**
-     * Determines if the specified component should have its javascript 
-     * external resource scripts added to the response.
-     * 
-     * @param target
-     *          The component to check for inclusion/exclusion.
-     * @return True if external scripts from this component should be added to
-     *          the response.
-     */
-    boolean isExternalScriptAllowed(IComponent target);
-    
-    /**
-     * Ensures that the given string is unique. The string is either returned unchanged, or a suffix
-     * is appended to ensure uniqueness.
-     */
-
-    String getUniqueString(String baseValue);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/ITemplateComponent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/ITemplateComponent.java
deleted file mode 100644
index cfe559f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/ITemplateComponent.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- * Extra interface implemented by {@link org.apache.tapestry.BaseComponent} and inherited by
- * {@link org.apache.tapestry.html.BasePage}, used to allow them to add contents from their
- * templates.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ITemplateComponent extends IComponent
-{
-    /**
-     * Adds an "outer" renderable object.
-     */
-    void addOuter(IRender render);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/NestedMarkupWriter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/NestedMarkupWriter.java
deleted file mode 100644
index 7e2fc80..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/NestedMarkupWriter.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- * A writer that is created by, and nested within, another markup writer. This is used by many
- * components that need to render their bodies to fully determine how to write the markup before
- * their bodies; the markup is stored inside the nested markup writer until needed.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.IMarkupWriter#getNestedWriter()
- */
-public interface NestedMarkupWriter extends IMarkupWriter
-{
-    /**
-     * Returns any makrup so far accumulated by the nested markup writer. When the nested markup
-     * writer is closed, it invokes {@link org.apache.tapestry.IMarkupWriter#printRaw(String)},
-     * with this content, on its parent markup writer.
-     * <p>
-     * Getting the buffer will <em>close</em> the writer.
-     */
-
-    String getBuffer();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/PageNotFoundException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/PageNotFoundException.java
deleted file mode 100644
index 2f65d91..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/PageNotFoundException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-
-/**
- * Subclass of {@link org.apache.hivemind.ApplicationRuntimeException}&nbsp;thrown when a requested
- * page does not exist.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PageNotFoundException extends ApplicationRuntimeException
-{
-    private static final long serialVersionUID = -9123254357382597407L;
-    
-    private final String _pageName;
-
-    public PageNotFoundException(String message)
-    {
-        this(null, message);
-    }
-    
-    public PageNotFoundException(String pageName, String message)
-    {
-        super(message);
-        _pageName = pageName;
-    }
-    
-    /**
-     * @since 4.1.1
-     */
-    public String getPageName()
-    {
-        return _pageName;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/PageRedirectException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/PageRedirectException.java
deleted file mode 100644
index 4ed8202..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/PageRedirectException.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-
-/**
- *  Exception thrown by a {@link IComponent component} or {@link org.apache.tapestry.engine.IEngineService}
- *  that wishes to force the application to a particular page.  This is often used
- *  to protect a sensitive page until the user is authenticated.
- *
- *  @author Howard Lewis Ship
- **/
-
-public class PageRedirectException extends ApplicationRuntimeException
-{
-    private static final long serialVersionUID = -7693744317997065965L;
-    
-    private final String _targetPageName;
-
-    public PageRedirectException(String targetPageName)
-    {
-        this(targetPageName, null, null, targetPageName);
-    }
-
-    public PageRedirectException(IPage page)
-    {
-        this(page.getPageName());
-    }
-
-    public PageRedirectException(
-        String message,
-        Object component,
-        Throwable rootCause,
-        String targetPageName)
-    {
-        super(message, component, null, rootCause);
-
-        _targetPageName = targetPageName;
-    }
-
-    public String getTargetPageName()
-    {
-        return _targetPageName;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/PageRenderSupport.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/PageRenderSupport.java
deleted file mode 100644
index 246c5dd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/PageRenderSupport.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- * Extends {@link org.apache.tapestry.IScriptProcessor}&nbsp;with a handful of additional methods
- * needed when rendering a page response.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.html.Body
- * @see org.apache.tapestry.TapestryUtils#getPageRenderSupport(IRequestCycle, IComponent)
- */
-public interface PageRenderSupport extends IScriptProcessor
-{
-    /**
-     * Sets up the given URL to preload, and returns a reference to the loaded image, in the form of
-     * a snippet of JavaScript expression that can be inserted into some larger block of JavaScript
-     * as a function parameter, or as a property assignment. A typical return value might be
-     * <code>tapestry_preload[7].src</code>.
-     *
-     * @param url
-     *          The url to the resource to be preloaded.
-     * @return Reference to preload image url.
-     * @deprecated To be removed in 4.2, use {@link #getPreloadedImageReference(IComponent, String)} 
-     *              or {@link #getPreloadedImageReference(IComponent, IAsset)} instead.
-     */
-
-    String getPreloadedImageReference(String url);
-    
-    /**
-     * Operates in the same way that {@link #getPreloadedImageReference(IComponent, String)} does, except 
-     * the source is the actual {@link IAsset} of an image to preload. 
-     * 
-     * @param target
-     *          The component the asset is being loaded for.
-     * @param source
-     *          The asset image to preload.
-     * @return The url representing the image that can be safely retrieved by the browser to see it.
-     */
-    String getPreloadedImageReference(IComponent target, IAsset source);
-    
-    /**
-     * Sets up the given URL to preload, and returns a reference to the loaded image, in the form of
-     * a snippet of JavaScript expression that can be inserted into some larger block of JavaScript
-     * as a function parameter, or as a property assignment. A typical return value might be
-     * <code>tapestry_preload[7].src</code>.
-     * 
-     * @param target
-     *          The component url being loaded for.
-     * @param url
-     *          The asset URL to preload.
-     * @return Reference to preload image url.
-     */
-    
-    String getPreloadedImageReference(IComponent target, String url);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/RedirectException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/RedirectException.java
deleted file mode 100644
index eb7f220..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/RedirectException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-
-/**
- * Exception thrown to force a redirection to an arbitrary location. This is
- * used when, after processing a request (such as a form submission or a link
- * being clicked), it is desirable to go to some arbitrary new location.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.6
- */
-
-public class RedirectException extends ApplicationRuntimeException
-{
-
-    private static final long serialVersionUID = -9215837473156146010L;
-
-    private final String _redirectLocation;
-
-    public RedirectException(String redirectLocation)
-    {
-        this(null, redirectLocation);
-    }
-
-    /**
-     * @param message
-     *            A message describing why the redirection is taking place.
-     * @param redirectLocation
-     *            The location to redirect to, may be a relative path (relative
-     *            to the {@link javax.servlet.ServletContext}).
-     * @see javax.servlet.http.HttpServletResponse#sendRedirect(String)
-     * @see javax.servlet.http.HttpServletResponse#encodeRedirectURL(String)
-     */
-
-    public RedirectException(String message, String redirectLocation)
-    {
-        super(message);
-
-        _redirectLocation = redirectLocation;
-    }
-
-    public String getRedirectLocation()
-    {
-        return _redirectLocation;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/RedirectFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/RedirectFilter.java
deleted file mode 100644
index 1195f87..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/RedirectFilter.java
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.io.IOException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.HiveMind;
-
-/**
- * Filter used to redirect a root context URL (i.e., "/context" or "/context/" to the Tapestry
- * application servlet (typically, "/context/app"). This servlet is mapped to "/" and must have a
- * &lt;init-parameter&;gt; <code>redirect-path</code> that is the application servlet's path
- * (i.e., "/app"). If no value is specified, then "/app" is used. The path is always relative to the
- * servlet context, and should always begin with a leading slash.
- * <p>
- * Filters are only available in Servlet API 2.3 and above.
- * <p>
- * Servlet API 2.4 is expected to allow a servlets in the welcome list (equivalent to index.html or
- * index.jsp), at which point this filter should no longer be necessary.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class RedirectFilter implements Filter
-{
-    public static final String REDIRECT_PATH_PARAM = "redirect-path";
-    
-    private static final Log LOG = LogFactory.getLog(RedirectFilter.class);
-
-    private String _redirectPath;
-
-    public void init(FilterConfig config) throws ServletException
-    {
-        _redirectPath = config.getInitParameter(REDIRECT_PATH_PARAM);
-
-        if (HiveMind.isBlank(_redirectPath))
-            _redirectPath = "/app";
-
-        if (LOG.isDebugEnabled())
-            LOG.debug(Tapestry.format("RedirectServlet.redirect-path", _redirectPath));
-    }
-
-    public void destroy()
-    {
-
-    }
-
-    /**
-     * This filter intercepts the so-called "default" servlet, whose job is to provide access to
-     * standard resources packaged within the web application context. This code is interested in
-     * only the very root, redirecting to the appropriate Tapestry application servlet. Other values
-     * are passed through unchanged.
-     */
-    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-            throws IOException, ServletException
-    {
-        HttpServletRequest hrequest = (HttpServletRequest) request;
-        HttpServletResponse hresponse = (HttpServletResponse) response;
-
-        String servletPath = hrequest.getServletPath();
-        String pathInfo = hrequest.getPathInfo();
-
-        // Been experimenting with different servlet containers. In Jetty 4.2.8 and Tomcat 4.1,
-        // resources have a non-null servletPath. If JBossWeb 3.0.6, the servletPath is
-        // null and the pathInfo indicates the relative location of the resource.
-
-        if ((HiveMind.isBlank(servletPath) || servletPath.equals("/"))
-                && (HiveMind.isBlank(pathInfo) || pathInfo.equals("/")))
-        {
-            String path = hrequest.getContextPath() + _redirectPath;
-
-            if (LOG.isDebugEnabled())
-                LOG.debug(Tapestry.format("RedirectServlet.redirecting", path));
-
-            hresponse.sendRedirect(path);
-            return;
-        }
-
-        chain.doFilter(request, response);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/RenderRewoundException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/RenderRewoundException.java
deleted file mode 100644
index dd8dac7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/RenderRewoundException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-
-/**
- * A special subclass of {@link ApplicationRuntimeException} that can be thrown
- * when a component has determined that the state of the page has been rewound.
- * 
- * @author Howard Lewis Ship
- */
-
-public class RenderRewoundException extends ApplicationRuntimeException
-{
-
-    private static final long serialVersionUID = -4212602864703507206L;
-
-    public RenderRewoundException(Object component)
-    {
-        super(null, component, null, null);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/SessionStoreOptimized.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/SessionStoreOptimized.java
deleted file mode 100644
index 58af993..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/SessionStoreOptimized.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry;

-

-/**

- * <em>Optional</em> interface implemented by Application State Objects. This interface allows

- * Tapestry to optimize the storage of the objects into the

- * {@link org.apache.tapestry.web.WebSession session}, only storing the objects when they require

- * storage due to a change in internal state.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public interface SessionStoreOptimized

-{

-    /**

-     * Queried by the {@link org.apache.tapestry.engine.state.StateObjectManager} to see if the

-     * object actually needs to be stored. Objects that implement this interface should store an

-     * internal flag. The flag should be set when any change to the object's internal state occurs.

-     * The flag should be cleared when the object is stored into the session (typically, by

-     * implementing {@link javax.servlet.http.HttpSessionBindingListener}.

-     * 

-     * @return true if the object needs to be stored back into the session, false if the internal

-     *         state of the object is unchanged

-     */

-    boolean isStoreToSessionNeeded();

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/StaleLinkException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/StaleLinkException.java
deleted file mode 100644
index 55adea8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/StaleLinkException.java
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-
-/**
- * Exception thrown by an {@link org.apache.tapestry.engine.IEngineService} when
- * it discovers that the an action link was for an out-of-date version of the
- * page.
- * <p>
- * The application should redirect to the StaleLink page.
- * 
- * @author Howard Lewis Ship
- */
-
-public class StaleLinkException extends ApplicationRuntimeException
-{
-
-    private static final long serialVersionUID = -1266992401198999606L;
-
-    private final transient IPage _page;
-    private final String _pageName;
-    private final String _targetIdPath;
-    private final String _targetActionId;
-
-    public StaleLinkException()
-    {
-        super(null, null, null, null);
-        
-        _targetIdPath = null;
-        _page = null;
-        _pageName = null;
-        _targetActionId = null;
-    }
-
-    /**
-     * Constructor used when the action id is found, but the target id path did
-     * not match the actual id path.
-     */
-
-    public StaleLinkException(IComponent component, String targetActionId,
-            String targetIdPath)
-    {
-        super(Tapestry.format("StaleLinkException.action-mismatch",
-                new String[] { targetActionId, component.getIdPath(),
-                        targetIdPath }), component, null, null);
-
-        _page = component.getPage();
-        _pageName = _page.getPageName();
-
-        _targetActionId = targetActionId;
-        _targetIdPath = targetIdPath;
-    }
-
-    /**
-     * Constructor used when the target action id is not found.
-     */
-
-    public StaleLinkException(IPage page, String targetActionId,
-            String targetIdPath)
-    {
-        this(Tapestry.format("StaleLinkException.component-mismatch",
-                targetActionId, targetIdPath), page);
-    }
-
-    public StaleLinkException(String message, IComponent component)
-    {
-        super(message, component, null, null);
-        
-        _targetIdPath = null;
-        _page = null;
-        _pageName = null;
-        _targetActionId = null;
-    }
-
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-    /**
-     * Returns the page referenced by the service URL, if known, or null
-     * otherwise.
-     */
-
-    public IPage getPage()
-    {
-        return _page;
-    }
-
-    public String getTargetActionId()
-    {
-        return _targetActionId;
-    }
-
-    public String getTargetIdPath()
-    {
-        return _targetIdPath;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/StaleSessionException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/StaleSessionException.java
deleted file mode 100644
index 5fe4a01..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/StaleSessionException.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-
-/**
- * Exception thrown by an {@link org.apache.tapestry.engine.IEngineService} when
- * it discovers that the {@link javax.servlet.http.HttpSession} has timed out
- * (and been replaced by a new, empty one).
- * <p>
- * The application should redirect to the stale-session page.
- * 
- * @author Howard Lewis Ship
- */
-
-public class StaleSessionException extends ApplicationRuntimeException
-{
-
-    private static final long serialVersionUID = 6733303549871198597L;
-
-    private final transient IPage _page;
-    private final String _pageName;
-
-    public StaleSessionException()
-    {
-        this(null, null);
-    }
-
-    public StaleSessionException(String message, IPage page)
-    {
-        super(message, page, null, null);
-        _page = page;
-
-        if (page != null) _pageName = page.getPageName();
-        else _pageName = null;
-    }
-
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-    /**
-     * Returns the page referenced by the service URL, if known, or null
-     * otherwise.
-     */
-
-    public IPage getPage()
-    {
-        return _page;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/Tapestry.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/Tapestry.java
deleted file mode 100644
index edba192..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/Tapestry.java
+++ /dev/null
@@ -1,679 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.event.ChangeObserver;
-import org.apache.tapestry.event.ObservedChangeEvent;
-import org.apache.tapestry.multipart.IMultipartDecoder;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.StringSplitter;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.MessageFormat;
-import java.util.*;
-
-/**
- * A placeholder for a number of (static) methods that don't belong elsewhere, as well as a global
- * location for static constants.
- *
- * @since 1.0.1
- * @author Howard Lewis Ship
- */
-
-public final class Tapestry
-{
-    /**
-     * The name ("direct") of a service that allows stateless behavior for an {@link
-     * org.apache.tapestry.link.DirectLink} component.
-     * <p>
-     * This service rolls back the state of the page but doesn't rewind the the dynamic state of the
-     * page the was the action service does, which is more efficient but less powerful.
-     * <p>
-     * An array of String parameters may be included with the service URL; these will be made
-     * available to the {@link org.apache.tapestry.link.DirectLink} component's listener.
-     */
-
-    public static final String DIRECT_SERVICE = "direct";
-
-    /**
-     * Almost identical to the direct service, except specifically for handling
-     * browser level events.
-     *
-     * @since 4.1
-     */
-
-    public static final String DIRECT_EVENT_SERVICE = "directevent";
-
-    /**
-     * The name ("external") of a service that a allows {@link IExternalPage} to be selected.
-     * Associated with a {@link org.apache.tapestry.link.ExternalLink} component.
-     * <p>
-     * This service enables {@link IExternalPage}s to be accessed via a URL. External pages may be
-     * booked marked using their URL for future reference.
-     * <p>
-     * An array of Object parameters may be included with the service URL; these will be passed to
-     * the {@link IExternalPage#activateExternalPage(Object[], IRequestCycle)} method.
-     */
-
-    public static final String EXTERNAL_SERVICE = "external";
-
-    /**
-     * The name ("page") of a service that allows a new page to be selected. Associated with a
-     * {@link org.apache.tapestry.link.PageLink} component.
-     * <p>
-     * The service requires a single parameter: the name of the target page.
-     */
-
-    public static final String PAGE_SERVICE = "page";
-
-    /**
-     * The name ("home") of a service that jumps to the home page. A stand-in for when no service is
-     * provided, which is typically the entrypoint to the application.
-     */
-
-    public static final String HOME_SERVICE = "home";
-
-    /**
-     * The name ("restart") of a service that invalidates the session and restarts the application.
-     * Typically used just to recover from an exception.
-     */
-
-    public static final String RESTART_SERVICE = "restart";
-
-    /**
-     * The name ("asset") of a service used to access internal assets.
-     */
-
-    public static final String ASSET_SERVICE = "asset";
-
-    /**
-     * The name ("reset") of a service used to clear cached template and specification data and
-     * remove all pooled pages. This is only used when debugging as a quick way to clear the out
-     * cached data, to allow updated versions of specifications and templates to be loaded (without
-     * stopping and restarting the servlet container).
-     * <p>
-     * This service is only available if the Java system property
-     * <code>org.apache.tapestry.enable-reset-service</code> is set to <code>true</code>.
-     */
-
-    public static final String RESET_SERVICE = "reset";
-
-    /**
-     * Property name used to get the extension used for templates. This may be set in the page or
-     * component specification, or in the page (or component's) immediate container (library or
-     * application specification). Unlike most properties, value isn't inherited all the way up the
-     * chain. The default template extension is "html".
-     *
-     * @since 3.0
-     */
-
-    public static final String TEMPLATE_EXTENSION_PROPERTY = "org.apache.tapestry.template-extension";
-
-    /**
-     * The name of an {@link org.apache.tapestry.IRequestCycle} attribute in which the currently
-     * rendering {@link org.apache.tapestry.components.ILinkComponent} is stored. Link components do
-     * not nest.
-     */
-
-    public static final String LINK_COMPONENT_ATTRIBUTE_NAME = "org.apache.tapestry.active-link-component";
-
-    /**
-     * Suffix appended to a parameter name to form the name of a property that stores the binding
-     * for the parameter.
-     *
-     * @since 3.0
-     */
-
-    public static final String PARAMETER_PROPERTY_NAME_SUFFIX = "Binding";
-
-    /**
-     * Key used to obtain an extension from the application specification. The extension, if it
-     * exists, implements {@link org.apache.tapestry.request.IRequestDecoder}.
-     *
-     * @since 2.2
-     */
-
-    public static final String REQUEST_DECODER_EXTENSION_NAME = "org.apache.tapestry.request-decoder";
-
-    /**
-     * Name of optional application extension for the multipart decoder used by the application. The
-     * extension must implement {@link org.apache.tapestry.multipart.IMultipartDecoder} (and is
-     * generally a configured instance of
-     * {@link IMultipartDecoder}).
-     *
-     * @since 3.0
-     */
-
-    public static final String MULTIPART_DECODER_EXTENSION_NAME = "org.apache.tapestry.multipart-decoder";
-
-    /**
-     * Method id used to check that {@link IPage#validate(IRequestCycle)} is invoked.
-     *
-     * @see #checkMethodInvocation(Object, String, Object)
-     * @since 3.0
-     */
-
-    public static final String ABSTRACTPAGE_VALIDATE_METHOD_ID = "AbstractPage.validate()";
-
-    /**
-     * Method id used to check that {@link IPage#detach()} is invoked.
-     *
-     * @see #checkMethodInvocation(Object, String, Object)
-     * @since 3.0
-     */
-
-    public static final String ABSTRACTPAGE_DETACH_METHOD_ID = "AbstractPage.detach()";
-
-    /**
-     * Regular expression defining a simple property name. Used by several different parsers. Simple
-     * property names match Java variable names; a leading letter (or underscore), followed by
-     * letters, numbers and underscores.
-     *
-     * @since 3.0
-     */
-
-    public static final String SIMPLE_PROPERTY_NAME_PATTERN = "^_?[a-zA-Z]\\w*$";
-
-    /**
-     * Class name of an {@link ognl.TypeConverter}implementing class to use as a type converter for
-     * {@link org.apache.tapestry.binding.ExpressionBinding}.
-     */
-    public static final String OGNL_TYPE_CONVERTER = "org.apache.tapestry.ognl-type-converter";
-
-    /**
-     * The version of the framework; this is updated for major releases.
-     */
-
-    public static final String VERSION = readVersion();
-
-    private static final String UNKNOWN_VERSION = "Unknown";
-
-    /**
-     * Contains strings loaded from TapestryStrings.properties.
-     *
-     * @since 1.0.8
-     */
-
-    private static ResourceBundle _strings;
-
-    /**
-     * A {@link Map}that links Locale names (as in {@link Locale#toString()}to {@link Locale}
-     * instances. This prevents needless duplication of Locales.
-     */
-
-    private static final Map _localeMap = new HashMap();
-
-    static
-    {
-        Locale[] locales = Locale.getAvailableLocales();
-        for (int i = 0; i < locales.length; i++)
-        {
-            _localeMap.put(locales[i].toString(), locales[i]);
-        }
-    }
-
-    /**
-     * Used for tracking if a particular super-class method has been invoked.
-     */
-
-    private static final ThreadLocal _invokedMethodIds = new ThreadLocal();
-
-
-    /**
-     * Prevent instantiation.
-     */
-
-    private Tapestry()
-    {
-    }
-
-    /**
-     * Copys all informal {@link IBinding bindings}from a source component to the destination
-     * component. Informal bindings are bindings for informal parameters. This will overwrite
-     * parameters (formal or informal) in the destination component if there is a naming conflict.
-     */
-
-    public static void copyInformalBindings(IComponent source, IComponent destination)
-    {
-        Collection names = source.getBindingNames();
-
-        if (names == null)
-            return;
-
-        IComponentSpecification specification = source.getSpecification();
-        Iterator i = names.iterator();
-
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-
-            // If not a formal parameter, then copy it over.
-
-            if (specification.getParameter(name) == null)
-            {
-                IBinding binding = source.getBinding(name);
-
-                destination.setBinding(name, binding);
-            }
-        }
-    }
-
-    /**
-     * Gets the {@link Locale}for the given string, which is the result of
-     * {@link Locale#toString()}. If no such locale is already registered, a new instance is
-     * created, registered and returned.
-     */
-
-    public static Locale getLocale(String s)
-    {
-        Locale result = null;
-
-        synchronized (_localeMap)
-        {
-            result = (Locale) _localeMap.get(s);
-        }
-
-        if (result == null)
-        {
-            StringSplitter splitter = new StringSplitter('_');
-            String[] terms = splitter.splitToArray(s);
-
-            switch (terms.length)
-            {
-                case 1:
-
-                    result = new Locale(terms[0], "");
-                    break;
-
-                case 2:
-
-                    result = new Locale(terms[0], terms[1]);
-                    break;
-
-                case 3:
-
-                    result = new Locale(terms[0], terms[1], terms[2]);
-                    break;
-
-                default:
-
-                    throw new IllegalArgumentException("Unable to convert '" + s + "' to a Locale.");
-            }
-
-            synchronized (_localeMap)
-            {
-                _localeMap.put(s, result);
-            }
-
-        }
-
-        return result;
-
-    }
-
-    /**
-     * Closes the stream (if not null), ignoring any {@link IOException}thrown.
-     *
-     * @since 1.0.2
-     */
-
-    public static void close(InputStream stream)
-    {
-        if (stream != null)
-        {
-            try
-            {
-                stream.close();
-            }
-            catch (IOException ex)
-            {
-                // Ignore.
-            }
-        }
-    }
-
-    /**
-     * Gets a string from the TapestryStrings resource bundle. The string in the bundle is treated
-     * as a pattern for {@link MessageFormat#format(java.lang.String, java.lang.Object[])}.
-     *
-     * @since 1.0.8
-     */
-
-    public static String format(String key, Object[] args)
-    {
-        if (_strings == null)
-            _strings = ResourceBundle.getBundle("org.apache.tapestry.TapestryStrings");
-
-        String pattern = _strings.getString(key);
-
-        if (args == null)
-            return pattern;
-
-        return MessageFormat.format(pattern, args);
-    }
-
-    /**
-     * Convienience method for invoking {@link #format(String, Object[])}.
-     *
-     * @since 3.0
-     */
-
-    public static String getMessage(String key)
-    {
-        return format(key, null);
-    }
-
-    /**
-     * Convienience method for invoking {@link #format(String, Object[])}.
-     *
-     * @since 3.0
-     */
-
-    public static String format(String key, Object arg)
-    {
-        return format(key, new Object[]
-          { arg });
-    }
-
-    /**
-     * Convienience method for invoking {@link #format(String, Object[])}.
-     *
-     * @since 3.0
-     */
-
-    public static String format(String key, Object arg1, Object arg2)
-    {
-        return format(key, new Object[]
-          { arg1, arg2 });
-    }
-
-    /**
-     * Convienience method for invoking {@link #format(String, Object[])}.
-     *
-     * @since 3.0
-     */
-
-    public static String format(String key, Object arg1, Object arg2, Object arg3)
-    {
-        return format(key, new Object[]
-          { arg1, arg2, arg3 });
-    }
-
-    /**
-     * Invoked when the class is initialized to read the current version file.
-     */
-
-    private static String readVersion()
-    {
-        Properties props = new Properties();
-
-        try
-        {
-            InputStream in = Tapestry.class.getResourceAsStream("version.properties");
-
-            if (in == null)
-                return UNKNOWN_VERSION;
-
-            props.load(in);
-
-            in.close();
-
-            return props.getProperty("project.version", UNKNOWN_VERSION);
-        }
-        catch (IOException ex)
-        {
-            return UNKNOWN_VERSION;
-        }
-
-    }
-
-    /**
-     * Returns the size of a collection, or zero if the collection is null.
-     *
-     * @since 2.2
-     */
-
-    public static int size(Collection c)
-    {
-        if (c == null)
-            return 0;
-
-        return c.size();
-    }
-
-    /**
-     * Returns the length of the array, or 0 if the array is null.
-     *
-     * @since 2.2
-     */
-
-    public static int size(Object[] array)
-    {
-        if (array == null)
-            return 0;
-
-        return array.length;
-    }
-
-    /**
-     * Returns true if the Map is null or empty.
-     *
-     * @since 3.0
-     */
-
-    public static boolean isEmpty(Map map)
-    {
-        return map == null || map.isEmpty();
-    }
-
-    /**
-     * Returns true if the Collection is null or empty.
-     *
-     * @since 3.0
-     */
-
-    public static boolean isEmpty(Collection c)
-    {
-        return c == null || c.isEmpty();
-    }
-
-    /**
-     * Converts a {@link Map} to an even-sized array of key/value pairs. This may be useful when
-     * using a Map as service parameters (with {@link org.apache.tapestry.link.DirectLink}.
-     * Assuming the keys and values are simple objects (String, Boolean, Integer, etc.), then the
-     * representation as an array will encode more efficiently (via
-     * {@link org.apache.tapestry.util.io.DataSqueezerImpl} than serializing the Map and its
-     * contents.
-     *
-     * @return the array of keys and values, or null if the input Map is null or empty
-     * @since 2.2
-     */
-
-    public static Object[] convertMapToArray(Map map)
-    {
-        if (isEmpty(map))
-            return null;
-
-        Set entries = map.entrySet();
-
-        Object[] result = new Object[2 * entries.size()];
-        int x = 0;
-
-        Iterator i = entries.iterator();
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            result[x++] = entry.getKey();
-            result[x++] = entry.getValue();
-        }
-
-        return result;
-    }
-
-    /**
-     * Converts an even-sized array of objects back into a {@link Map}.
-     *
-     * @see #convertMapToArray(Map)
-     * @return a Map, or null if the array is null or empty
-     * @since 2.2
-     */
-
-    public static Map convertArrayToMap(Object[] array)
-    {
-        if (array == null || array.length == 0)
-            return null;
-
-        if (array.length % 2 != 0)
-            throw new IllegalArgumentException(getMessage("Tapestry.even-sized-array"));
-
-        Map result = new HashMap();
-
-        int x = 0;
-        while (x < array.length)
-        {
-            Object key = array[x++];
-            Object value = array[x++];
-
-            result.put(key, value);
-        }
-
-        return result;
-    }
-
-    /**
-     * Creates an exception indicating the binding value is null.
-     *
-     * @since 3.0
-     */
-
-    public static BindingException createNullBindingException(IBinding binding)
-    {
-        return new BindingException(getMessage("null-value-for-binding"), binding);
-    }
-
-    /** @since 3.0 * */
-
-    public static ApplicationRuntimeException createNoSuchComponentException(IComponent component,
-                                                                             String id, Location location)
-    {
-        return new ApplicationRuntimeException(format("no-such-component", component.getExtendedId(), id),
-                                               component, location, null);
-    }
-
-    /** @since 3.0 * */
-
-    public static BindingException createRequiredParameterException(IComponent component,
-                                                                    String parameterName)
-    {
-        return new BindingException(format("required-parameter", parameterName, component.getExtendedId()),
-                                    component, null, component.getBinding(parameterName), null);
-    }
-
-    /** @since 3.0 * */
-
-    public static ApplicationRuntimeException createRenderOnlyPropertyException(
-      IComponent component, String propertyName)
-    {
-        return new ApplicationRuntimeException(format("render-only-property",
-                                                      propertyName,
-                                                      component.getExtendedId()), component, null, null);
-    }
-
-    /**
-     * Clears the list of method invocations.
-     *
-     * @see #checkMethodInvocation(Object, String, Object)
-     * @since 3.0
-     */
-
-    public static void clearMethodInvocations()
-    {
-        _invokedMethodIds.set(null);
-    }
-
-    /**
-     * Adds a method invocation to the list of invocations. This is done in a super-class
-     * implementations.
-     *
-     * @see #checkMethodInvocation(Object, String, Object)
-     * @since 3.0
-     */
-
-    public static void addMethodInvocation(Object methodId)
-    {
-        List methodIds = (List) _invokedMethodIds.get();
-
-        if (methodIds == null)
-        {
-            methodIds = new ArrayList();
-            _invokedMethodIds.set(methodIds);
-        }
-
-        methodIds.add(methodId);
-    }
-
-    /**
-     * Checks to see if a particular method has been invoked. The method is identified by a methodId
-     * (usually a String). The methodName and object are used to create an error message.
-     * <p>
-     * The caller should invoke {@link #clearMethodInvocations()}, then invoke a method on the
-     * object. The super-class implementation should invoke {@link #addMethodInvocation(Object)} to
-     * indicate that it was, in fact, invoked. The caller then invokes this method to validate that
-     * the super-class implementation was invoked.
-     * <p>
-     * The list of method invocations is stored in a {@link ThreadLocal} variable.
-     *
-     * @since 3.0
-     */
-
-    public static void checkMethodInvocation(Object methodId, String methodName, Object object)
-    {
-        List methodIds = (List) _invokedMethodIds.get();
-
-        if (methodIds != null && methodIds.contains(methodId))
-            return;
-
-        throw new ApplicationRuntimeException(Tapestry.format("Tapestry.missing-method-invocation",
-                                                              object.getClass().getName(),
-                                                              methodName));
-    }
-
-    /**
-     * Method used by pages and components to send notifications about property changes.
-     *
-     * @param component
-     *            the component containing the property
-     * @param propertyName
-     *            the name of the property which changed
-     * @param newValue
-     *            the new value for the property
-     * @since 3.0
-     */
-    public static void fireObservedChange(IComponent component, String propertyName, Object newValue)
-    {
-        ChangeObserver observer = component.getPage().getChangeObserver();
-
-        if (observer == null)
-            return;
-
-        ObservedChangeEvent event = new ObservedChangeEvent(component, propertyName, newValue);
-
-        observer.observeChange(event);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryConstants.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryConstants.java
deleted file mode 100644
index 61c8d95..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryConstants.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class TapestryConstants
-{
-    /**
-     * Name of the cookie written to the client web browser to identify the locale.
-     */
-
-    public static final String LOCALE_COOKIE_NAME = "org.apache.tapestry.locale";
-
-    /**
-     * Name of the meta data property used as a default for page class names.
-     */
-
-    public static final String PAGE_CLASS_NAME = "org.apache.tapestry.default-page-class";
-
-    /**
-     * Name of meta-data property used to determine the default binding prefix. The meta default for
-     * this is "ognl".
-     */
-
-    public static final String DEFAULT_BINDING_PREFIX_NAME = "org.apache.tapestry.default-binding-prefix";
-
-    private TapestryConstants()
-    {
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryMessages.java
deleted file mode 100644
index caf465c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryMessages.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * @author Howard Lewis Ship
- * @since 4.0
- */
-final class TapestryMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(TapestryMessages.class,
-            "TapestryStrings2");
-
-    /* defeat instantiation */
-    private TapestryMessages() { }
-    
-    static String servletInitFailure(Throwable cause)
-    {
-        return _formatter.format("servlet-init-failure", cause);
-    }
-
-    static String componentIsLocked(IComponent component)
-    {
-        return _formatter.format("component-is-locked", component.getExtendedId());
-    }
-
-    static String servletInit(String name, long elapsedToRegistry, long elapsedOverall)
-    {
-        return _formatter.format("servlet-init", name, new Long(elapsedToRegistry), new Long(
-                elapsedOverall));
-    }
-
-    static String nonUniqueAttribute(Object newInstance, String key, Object existingInstance)
-    {
-        return _formatter.format("non-unique-attribute", newInstance, key, existingInstance);
-    }
-
-    static String noPageRenderSupport(IComponent component)
-    {
-        return _formatter.format("no-page-render-support", component.getExtendedId());
-    }
-
-    static String noForm(IComponent component)
-    {
-        return _formatter.format("no-form", component.getExtendedId());
-    }
-
-    static String providedByEnhancement(String methodName)
-    {
-        return _formatter.format("provided-by-enhancement", methodName);
-    }
-
-    static String attemptToChangeContainedComponent(IComponent component)
-    {
-        return _formatter
-                .format("attempt-to-change-contained-component", component.getExtendedId());
-    }
-
-    static String attemptToChangeEventInvoker(IComponent component)
-    {
-        return _formatter
-                .format("attempt-to-change-event-invoker", component.getExtendedId());
-    }
-    
-    static String componentWrongType(IComponent component, Class expectedType)
-    {
-        return _formatter.format("component-wrong-type", component.getExtendedId(), expectedType
-                .getName());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryStrings.properties
deleted file mode 100644
index 8b77ccb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryStrings.properties
+++ /dev/null
@@ -1,310 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-service-no-parameters=Service {0} requires no service parameters.
-service-single-parameter=Service {0} requires exactly one service parameter.
-service-single-context-parameter=Service {0} requires exactly one context parameter.
-service-requires-parameters=Service {0} requires at least one service parameter.
-service-incorrect-parameter-count=Service {0} requires exactly {1} service parameters.
-missing-resource=Could not locate resource {0}.
-invalid-field-name=Invalid field name: {0}.
-unable-to-resolve-class=Unable to resolve class {0}.
-field-not-defined=Field {0} does not exist.
-illegal-field-access=Cannot access field {0}.
-field-is-instance=Field {0} is an instance variable, not a class variable.
-deprecated-component-param=Parameter ''{1}'' of component {0} is deprecated, use parameter ''{2}'' instead.
-must-be-wrapped-by-form={1} components must be enclosed by a Form component.
-invalid-null-parameter=Parameter ''{0}'' may not be null.
-null-value-for-binding=Binding value is null.
-no-such-component=Component {0} does not contain a component {1}.
-required-parameter=Value for parameter ''{0}'' in component {1} is null, and a non-null value is required.
-render-only-property=Property ''{0}'' of {1} may only be accessed while the component is rendering.
-unsupported-property=Property ''{1}'' is not supported by {0}.
-must-be-contained-by-body={0} components must be contained by a Body component.
-illegal-encoding=The encoding ''{0}'' is not recognized.
-
-# org.apache.tapestry
-
-AbstractComponent.attempt-to-change-container=Attempt to change existing container.
-AbstractComponent.attempt-to-change-component-id=Attempt to change existing component id.
-AbstractComponent.null-container={0} container is null.
-AbstractComponent.attempt-to-change-page=Attempt to change existing containing page.
-AbstractComponent.attempt-to-change-spec=Attempt to change existing component specification.
-AbstractComponent.attempt-to-change-template-tag=Attempt to change existing templateTagName.
-
-AbstractPage.attempt-to-change-locale=Attempt to change existing locale for a page.
-AbstractPage.attempt-to-change-name=Attempt to change existing name for a page.
-
-AbstractMarkupWriter.missing-constructor-parameters=Incomplete parameters to AbstractMarkupWriter constructor.
-
-ApplicationServlet.could-not-locate-engine=Could not locate an engine to service this request.
-ApplicationServlet.engine-stateful-without-session=Engine {0} is stateful even though there is no HttpSession.  Discarding the engine. 
-
-BaseComponent.unbalance-open-tags=Not all tags closed in template.
-
-RedirectServlet.redirect-path=Redirecting to servlet at path {0}.
-RedirectServlet.redirecting=Redirecting servlet context URL to {0}.
-
-ResponseOutputStream.content-type-not-set=Content type of response never set.
-
-StaleLinkException.action-mismatch=Action id {0} matched component {1}, not {2}.
-StaleLinkException.component-mismatch=Action id {0} does not match component {1}.
-
-Tapestry.even-sized-array=An even-sized array of keys and values is required.
-Tapestry.missing-method-invocation=Class {0} overrides method ''{1}'' but does not invoke the super-class implementation.
-
-# org.apache.tapestry.asset
-
-AssetExternalizer.externalize-failure=Could not externalize asset {0} to {1}.
-
-ExternalAsset.resource-missing=Could not access external asset {0}.
-
-# org.apache.tapestry.bean
-
-AbstractBeanInitializer.unable-to-set-property=Unable to set property ''{0}'' of {1} to {2}.
-
-# org.apache.tapestry.binding
-
-AbstractBinding.wrong-type=Parameter {0} ({1}) is an instance of {2}, which does not inherit from {3}.
-AbstractBinding.wrong-interface=Parameter {0} ({1}) is an instance of {2}, which does not implement interface {3}.
-
-ExpressionBinding.unable-to-resolve-expression=Unable to resolve expression ''{0}'' for {1}.
-ExpressionBinding.unable-to-update-expression=Unable to update expression ''{0}'' for {1} to {2}.
-
-ListenerBinding.invalid-access=Inappropriate invocation of {0} on instance of ListenerBinding.
-ListenerBinding.bsf-exception=Unable to execute listener script "{0}": {1}
-ListenerBinding.unable-to-undeclare-bean=Unable to undeclare bean ''{0}'' after executing "{0}".
-
-
-# org.apache.tapestry.component
-
-Insert.unable-to-format=Unable to format object {0}.
-
-# org.apache.tapestry.param
-
-ParameterManager.property-not-read-write=Property {1} of component {0} is not read-write.
-ParameterManager.java-type-not-specified=No Java type was specified for parameter {0} of component {1}.
-ParameterManager.type-mismatch=Parameter {0} of component {1} is declared as {2}, but the property is {3}.
-ParameterManager.static-initialization-failure=Unable to set property {0} of component {1} from {2}.
-ParameterManager.incompatible-direction-and-binding=Parameter {0} of component {1} is direction {2} which is incompatible with {3}.
-
-# org.apache.tapestry.engine
-
-AbstractEngine.unable-to-begin-request=Tapestry unable to begin processing request.
-AbstractEngine.unable-to-cleanup-page=Unable to cleanup page {0}.
-AbstractEngine.unable-to-create-cleanup-context=Unable to create an instance of RequestContext to process end-of-session page cleanups.
-AbstractEngine.exception-during-cache-clear=Exception while clearing caches after request.
-
-ActionService.context-parameters=Service action requires either three or four service contect parameters.
-ActionService.action-component-wrong-type=Component {0} does not implement the IAction interface.
-
-DefaultScriptSource.unable-to-parse-script=Unable to parse script {0}.
-
-EngineServiceLink.unknown-parameter-name=Unknown parameter name ''{0}''.
-
-Namespace.application-namespace=application namespace
-Namespace.framework-namespace=framework namespace
-Namespace.nested-namespace=namespace ''{0}''
-Namespace.library-id-not-found=Library ''{0}'' not found in {1}.
-
-RequestCycle.invalid-null-name=Parameter name may not be null in RequestCycle.getPage(String).
-RequestCycle.form-rewind-failure=Failure to rewind form {0}.
-
-ResourceResolver.unable-to-load-class=Could not load class {0} from {1}: {2}
-
-TagSupportService.service-only=The tagsupport service does not support tag generation.
-TagSupportService.null-attribute=Request attribute ''{0}'' is required by the tagsupport service, but the value is null.
-TagSupportService.attribute-not-string=Request attribute ''{0}'' is an instance of {1}, not a string.
-TagSupportService.attribute-not-array=Request attribute ''{0}'' is an instance of {0}, not an object array.
-BaseEngine.recorder-has-uncommited-changes=Could not forget changes to page {0} because the page's recorder has uncommitted changes.
-BaseEngine.duplicate-page-recorder=Could not create a second page recorder for page {0}.
-
-# org.apache.tapestry.event
-
-ObservedChangeEvent.null-property-name=Must specify a non-null propertyName when creating ObservedChangeEvent for {0}.
-ObservedChangeEvent.must-be-serializable=Must specify a serializable object as the new value of property when creating an ObservedChangeEvent.
-
-# org.apache.tapestry.form
-
-ListEdit.unable-to-convert-value=Unable to convert {0} to an external string in ListEdit component.
-ListEdit.unable-to-convert-string=Unable to convert {0} back into an object in ListEdit component.
-
-For.unable-to-convert-value=Unable to convert {0} to an external string in For component.
-For.unable-to-convert-string=Unable to convert {0} back into an object in For component.
-
-If.invalid-condition-type=Unable to convert {0} back into a boolean in If component.
-If.unable-to-convert-value=Unable to convert {0} to an external string in If component.
-If.unable-to-convert-string=Unable to convert {0} back into an object in If component.
-
-FormConditional.unable-to-convert-value=Unable to convert {0} to an external string in FormConditional component.
-FormConditional.unable-to-convert-string=Unable to convert {0} back into an object in FormConditional component.
-
-Option.must-be-contained-by-select=Option component must be contained within a Select.
-
-Radio.must-be-contained-by-group=Radio component must be contained within a RadioGroup.
-
-RadioGroup.may-not-nest=RadioGroup components may not be nested.
-
-Select.may-not-nest=Select components may not be nested.
-
-LinkSubmit.may-not-nest=LinkSubmit components may not be nested.
-
-# org.apache.tapestry.html
-
-Body.may-not-nest=Body components may not be nested.
-Body.include-classpath-script-only=Unable to include external script {0}: only classpath resources are supported.
-
-Rollover.must-be-contained-by-body=Rollover components must be contained within a Body component.
-Rollover.must-be-contained-by-link=Rollover components must be contained within an ILinkComponent.
-
-Script.must-be-contained-by-body=Script components must be contained within a Body component.
-
-# org.apache.tapestry.contrib.inspector
-
-ShowEngine.could-not-serialize=Could not serialize the application engine.
-
-InspectorButton.must-be-contained-by-body=InspectorButton component must be contained within a Body component.
-
-# org.apache.tapestry.jsp
-
-URLRetriever.unable-to-find-dispatcher=Unable to find request dispatcher for servlet at ''{0}''.
-URLRetriever.io-exception=I/O exception messaging servlet {0}: {1}
-URLRetriever.servlet-exception=Servlet exception messaging servlet {0}: {1}
-
-AbstractLinkTag.io-exception=I/O exception writing output: {1}
-
-AbstractTapestryTag.unable-to-evaluate-expression=Unable to evaluate OGNL expression ''{0}'': {1}
-
-# org.apache.tapestry.link
-
-GestureLink.missing-service=No engine service name {0}.
-
-AbstractLinkComponent.no-nesting=ILinkComponents may not be nested.
-AbstractLinkComponent.events-need-body=A link component with multiple functions for a single event type must be contained within a Body.
-
-# org.apache.tapestry.multipart
-
-UploadPart.unable-to-open-content-file=Unable to open uploaded file ''{0}''.
-UploadPart.write-failure=Error writing uploaded content to {0}: {1}
-
-DefaultMultipartDecoder.unable-to-decode=Unable to decode request: {0}
-DefaultMultipartDecoder.encoding-not-set=No encoding has been set for this request.
-
-# org.apache.tapestry.pageload
-
-PageLoader.unable-to-load-specification=Unable to load component specification.
-
-# org.apache.tapestry.parse
-
-TextToken.error-trimming={0}: Failure trimming leading and trailing whitespace.
-
-ValidatePublicIdRule.no-public-id=Document {0} does not define a public id.
-
-TextToken.range-error={0}: out of range for template length {1}.
-TemplateToken.may-not-render={0} tokens may not render.
-
-# org.apache.tapestry.record
-
-PageRecorder.change-after-lock=Page recorder for page {0} is locked after a commit(), but received a change to property {1} of component {2}.
-PageRecorder.unable-to-persist=Unable to persist property {0} of component {1} as {2}.
-PageRecorder.null-property-name=A change event for component {0} failed to specify the name of the updated property.
-PageRecorder.unable-to-rollback=Unable to set property {0} of component {1} to {2}: {3}
-
-# org.apache.tapestry.script
-
-ScriptParser.unknown-public-id=Script uses unknown public identifier {0}.
-ScriptParser.invalid-key=''{0}'' is not a valid key.  Symbol keys must be valid Java identifiers.
-ScriptParser.unable-to-resolve-class=''{0}'' is not a resolvable class name.
-
-InputSymbolToken.required=Script symbol ''{0}'' is required, but not specified.
-InputSymbolToken.wrong-type=Script symbol ''{0}'' is {1}, not {2}.
-
-# org.apache.tapestry.spec
-
-LibrarySpecification.duplicate-child-namespace-id=A child namespace with id ''{0}'' already exists.
-LibrarySpecification.duplicate-page-name=A page named ''{0}'' already exists in this namespace.
-LibrarySpecification.duplicate-component-alias=A component alias ''{0}'' already exists in this namespace.
-LibrarySpecification.duplicate-extension-name=An extension named ''{0}'' already exists in this namespace.
-LibrarySpecification.no-such-extension=No extension named ''{0}'' exists in this namespace.
-LibrarySpecification.extension-does-not-implement-interface=Extension ''{0}'' (class {1}) does not implement interface {2}.
-LibrarySpecification.extension-not-a-subclass=Extension ''{0}'' (class {1}) does not inherit from class {2}.
-
-ExtensionSpecification.duplicate-property={0}: already contains property configuration for ''{1}''.
-ExtensionSpecification.bad-class=Unable to locate class {0}.
-
-Direction.IN=in
-Direction.FORM=form
-Direction.CUSTOM=custom
-Direction.AUTO=auto
-
-# org.apache.tapestry.util
-
-JanitorThread.interval-locked=The interval for this janitor thread is locked.
-JanitorThread.illegal-interval=The interval for a janitor thread may not be less than 1 millisecond.
-
-MultiKey.null-keys=Must pass in non-empty array of keys.
-MultiKey.first-element-may-not-be-null=First element of keys may not be null.
-MultiKey.no-keys=No keys for this MultiKey.
-
-# org.apache.tapestry.util.io
-
-DataSqueezer.short-prefix=The adaptor prefix must contain at least one character.
-DataSqueezer.null-class=The dataClass may not be null.
-DataSqueezer.null-adaptor=The adaptor may not be null.
-DataSqueezer.prefix-out-of-range=DataSqueezer prefix must be in the range ''!'' to ''z''.
-DataSqueezer.adaptor-prefix-taken=An adaptor for prefix ''{0}'' is already registered.
-
-SerializableAdaptor.class-not-found=Class {0} not found.
-SerializableAdaptor.unable-to-convert=Cannot convert {0} into a modified Base64 character.
-SerializableAdaptor.unable-to-interpret-char=Cannot interpret ''{0}'' as a modified Base64 character.
-
-ComponentAddressAdaptor.no-separator=Invalid ComponentAddress encoding -- separator not present
-
-# org.apache.tapestry.util.prop
-
-PropertyFinder.unable-to-introspect-class=Unable to instrospect properties of class {0}.
-
-OgnlUtils.unable-to-update-expression=Unable to update expression ''{0}'' of {1} to {2}.
-OgnlUtils.unable-to-read-expression=Unable to read expression ''{0}'' of {1}.
-OgnlUtils.unable-to-parse-expression=Unable to parse expression ''{0}''.
-
-# org.apache.tapestry.util.xml
-
-AbstractDocumentParser.unable-to-parse=Unable to parse {0}: {1}
-AbstractDocumentParser.unable-to-read=Error reading {0}: {1}
-AbstractDocumentParser.unable-to-construct-builder=Unable to construct DocumentBuilder: {0}
-AbstractDocumentParser.invalid-identifier={0} is not a valid identifier (in element {1}).
-
-RuleDrivenParser.no-rule-for-element=No rule is defined for parsing element ''{0}''.
-RuleDrivenParser.resource-missing=Unable to find resource {0}.
-RuleDrivenParser.unable-to-open-resource=Unable to open resource {0}.
-RuleDrivenParser.parse-error=Unable to parse {0}: {1}
-
-# org.apache.tapestry.valid
-
-ValidField.must-be-contained-by-body=A ValidField using client-side validation must be enclosed by a Body component.
-
-NumberValidator.unknown-type=Unknown value type {0}.
-NumberValidator.no-adaptor-for-field=Unable to provide validation for field {0} (value type {1}).
-
-PatternValidator.pattern-match-error=Unable to match pattern {0} for field {1}.
-
-# org.apache.tapestry.wml
-
-Card.cards-may-not-nest=Cards may not be nested.
-Postfield.must-be-contained-by-go=This postfield must be contained within a Go.
-
-# org.apache.tapestry.contrib.components
-
-When.must-be-contained-by-choose=When component must be contained within a Choose.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryStrings2.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryStrings2.properties
deleted file mode 100644
index 59f6e30..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryStrings2.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-servlet-init=Initialized application servlet ''{0}'': {1} millis to create HiveMind Registry, {2} millis overall.
-servlet-init-failure=Unable to initialize application servlet: {0}
-no-accessor=Component {0} does not have accessor methods for property {1}.
-component-is-locked=Component {0} is active and its configuration state may not be changed.
-non-unique-attribute=Unable to store {0} into request cycle as attribute ''{1}'' because existing object {2} has already been stored. This usually indicates that components are improperly nested.
-no-page-render-support=Component {0} requires rendering support, but no PageRenderSupport object has been stored into the request cycle. This object is typically provided by a Body component. You should add a Body component to your template.
-provided-by-enhancement=Method {0}() is not implemented. An implementation of this method should be provided via runtime class enhancement.
-no-form=Component {0} must be enclosed by a form, but no Form component has been stored into the request cycle.
-attempt-to-change-contained-component=Attempt to change containedComponent property of component {0}, which is not allowed.
-attempt-to-change-event-invoker=Attempt to change eventInvoker property of component {0}, which is not allowed.
-component-wrong-type=Component {0} is not assignable to type {1}.
-
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryUtils.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryUtils.java
deleted file mode 100644
index 053278e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/TapestryUtils.java
+++ /dev/null
@@ -1,341 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Constants and static methods.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class TapestryUtils
-{
-    public static final String PAGE_RENDER_SUPPORT_ATTRIBUTE = "org.apache.tapestry.PageRenderSupport";
-
-    public static final String FORM_ATTRIBUTE = "org.apache.tapestry.Form";
-
-    public static final String FIELD_PRERENDER = "org.apache.tapestry.form.Prerender";
-
-    private static final char QUOTE = '\'';
-
-    private static final char BACKSLASH = '\\';
-
-    private static final String EMPTY_QUOTES = "''";
-
-    /* defeat instantiation */
-    private TapestryUtils() { }
-
-    /**
-     * Stores an attribute into the request cycle, verifying that no object with that key is already
-     * present.
-     *
-     * @param cycle
-     *            the cycle to store the attribute into
-     * @param key
-     *            the key to store the attribute as
-     * @param object
-     *            the attribute value to store
-     * @throws IllegalStateException
-     *             if a non-null value has been stored into the cycle with the provided key.
-     */
-
-    public static void storeUniqueAttribute(IRequestCycle cycle, String key, Object object)
-    {
-        Defense.notNull(cycle, "cycle");
-        Defense.notNull(key, "key");
-        Defense.notNull(object, "object");
-
-        Object existing = cycle.getAttribute(key);
-        if (existing != null)
-            throw new IllegalStateException(TapestryMessages.nonUniqueAttribute(
-              object,
-              key,
-              existing));
-
-        cycle.setAttribute(key, object);
-    }
-
-    /**
-     * Stores the support object using {@link #storeUniqueAttribute(IRequestCycle, String, Object)}.
-     */
-
-    public static void storePageRenderSupport(IRequestCycle cycle, PageRenderSupport support)
-    {
-        storeUniqueAttribute(cycle, PAGE_RENDER_SUPPORT_ATTRIBUTE, support);
-    }
-
-    /**
-     * Store the IForm instance using {@link #storeUniqueAttribute(IRequestCycle, String, Object)}.
-     */
-
-    public static void storeForm(IRequestCycle cycle, IForm form)
-    {
-        storeUniqueAttribute(cycle, FORM_ATTRIBUTE, form);
-    }
-
-    /**
-     * Stores the {@link IComponent} into the cycle by FormSupport before doing a field
-     * prerender.
-     * @param cycle
-     * @param component
-     */
-    public static void storePrerender(IRequestCycle cycle, IComponent component)
-    {
-        storeUniqueAttribute(cycle, FIELD_PRERENDER, component);
-    }
-
-    /**
-     * Gets the previously stored {@link org.apache.tapestry.PageRenderSupport}&nbsp;object.
-     *
-     * @param cycle
-     *            the request cycle storing the support object
-     * @param component
-     *            the component which requires the support (used to report exceptions)
-     * @throws ApplicationRuntimeException
-     *             if no support object has been stored
-     */
-
-    public static PageRenderSupport getPageRenderSupport(IRequestCycle cycle, IComponent component)
-    {
-        Defense.notNull(component, "component");
-
-        PageRenderSupport result = getOptionalPageRenderSupport(cycle);
-        if (result == null)
-            throw new ApplicationRuntimeException(TapestryMessages.noPageRenderSupport(component),
-                                                  component.getLocation(), null);
-
-        return result;
-    }
-
-    /**
-     * Gets the previously stored {@link IForm} object.
-     *
-     * @param cycle
-     *            the request cycle storing the support object
-     * @param component
-     *            the component which requires the form (used to report exceptions)
-     * @throws ApplicationRuntimeException
-     *             if no form object has been stored
-     */
-    public static IForm getForm(IRequestCycle cycle, IComponent component)
-    {
-        Defense.notNull(cycle, "cycle");
-        Defense.notNull(component, "component");
-
-        IForm result = (IForm) cycle.getAttribute(FORM_ATTRIBUTE);
-
-        if (result == null)
-            throw new ApplicationRuntimeException(TapestryMessages.noForm(component), component.getLocation(), null);
-
-        return result;
-    }
-
-    public static void removePageRenderSupport(IRequestCycle cycle)
-    {
-        cycle.removeAttribute(PAGE_RENDER_SUPPORT_ATTRIBUTE);
-    }
-
-    public static void removeForm(IRequestCycle cycle)
-    {
-        cycle.removeAttribute(FORM_ATTRIBUTE);
-    }
-
-    public static void removePrerender(IRequestCycle cycle)
-    {
-        cycle.removeAttribute(FIELD_PRERENDER);
-    }
-
-    /**
-     * Returns the {@link PageRenderSupport}&nbsp;object if previously stored, or null otherwise.
-     * This is used in the rare case that a component wishes to adjust its behavior based on whether
-     * the page render support services are available (typically, adjust for whether enclosed by a
-     * Body component, or not).
-     */
-
-    public static PageRenderSupport getOptionalPageRenderSupport(IRequestCycle cycle)
-    {
-        return (PageRenderSupport) cycle.getAttribute(PAGE_RENDER_SUPPORT_ATTRIBUTE);
-    }
-
-    /**
-     * Splits a string using the default delimiter of ','.
-     */
-
-    public static String[] split(String input)
-    {
-        return split(input, ',');
-    }
-
-    /**
-     * Splits a single string into an array of strings, using a specific delimiter character.
-     */
-
-    public static String[] split(String input, char delimiter)
-    {
-        if (HiveMind.isBlank(input))
-            return new String[0];
-
-        List strings = new ArrayList();
-
-        char[] buffer = input.toCharArray();
-
-        int start = 0;
-        int length = 0;
-
-        for (int i = 0; i < buffer.length; i++)
-        {
-            if (buffer[i] != delimiter)
-            {
-                length++;
-                continue;
-            }
-
-            // Consecutive delimiters will result in a sequence
-            // of empty strings.
-
-            String token = new String(buffer, start, length);
-            strings.add(token.trim());
-
-            start = i + 1;
-            length = 0;
-        }
-
-        // If the string contains no delimiters, then
-        // wrap it an an array and return it.
-
-        if (start == 0 && length == buffer.length)
-        {
-            return new String[] { input };
-        }
-
-        // The final token.
-        String token = new String(buffer, start, length);
-        strings.add(token.trim());
-
-        return (String[]) strings.toArray(new String[strings.size()]);
-    }
-
-    /**
-     * Capitalize the first letter of the input if at least 1 character.
-     */
-
-    public static String capitalize(String input)
-    {
-        if (input == null || input.length() < 1)
-            return input;
-
-        return input.substring(0, 1).toUpperCase() + input.substring(1);
-    }
-
-    /**
-     * Enquotes a string within single quotes, ready for insertion as part of a block of JavaScript.
-     * Single quotes and backslashes within the input string are properly escaped.
-     */
-
-    public static String enquote(String input)
-    {
-        if (input == null)
-            return EMPTY_QUOTES;
-
-        char[] chars = input.toCharArray();
-
-        // Add room for the two quotes and a couple of escaped characters
-
-        StringBuffer buffer = new StringBuffer(chars.length + 5);
-
-        buffer.append(QUOTE);
-
-        for (int i = 0; i < chars.length; i++)
-        {
-            char ch = chars[i];
-
-            if (ch == QUOTE || ch == BACKSLASH)
-                buffer.append(BACKSLASH);
-
-            buffer.append(ch);
-        }
-
-        buffer.append(QUOTE);
-
-        return buffer.toString();
-    }
-
-    /**
-     * A Tapestry component id is a little more liberal than an XML NMTOKEN. NMTOKEN must be
-     * [A-Za-z][A-Za-z0-9:_.-]*, but a component id might include a leading dollar sign (for an
-     * anonymous component with a fabricated id).
-     */
-
-    public static String convertTapestryIdToNMToken(String baseId)
-    {
-        String result = baseId.replace('$', '_');
-
-        while (result.startsWith("_"))
-            result = result.substring(1);
-
-        return result;
-    }
-
-    /**
-     * Converts a clientId into a client-side DOM reference; i.e.
-     * <code>document.getElementById('<i>id</i>')</code>.
-     */
-
-    public static String buildClientElementReference(String clientId)
-    {
-        Defense.notNull(clientId, "clientId");
-
-        return "document.getElementById('" + clientId + "')";
-    }
-
-    /**
-     * Used by some generated code; obtains a component and ensures it is of the correct type.
-     */
-
-    public static IComponent getComponent(IComponent container, String componentId,
-                                          Class expectedType, Location location)
-    {
-        Defense.notNull(container, "container");
-        Defense.notNull(componentId, "componentId");
-        Defense.notNull(expectedType, "expectedType");
-        // Don't always have a location
-
-        IComponent component = null;
-
-        try
-        {
-            component = container.getComponent(componentId);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), location, ex);
-        }
-
-        if (!expectedType.isAssignableFrom(component.getClass()))
-            throw new ApplicationRuntimeException(TapestryMessages.componentWrongType(
-              component,
-              expectedType), location, null);
-
-        return component;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AbstractAsset.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AbstractAsset.java
deleted file mode 100644
index 4a7d5b7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AbstractAsset.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ToStringBuilder;
-import org.apache.tapestry.IAsset;
-
-/**
- *  Base class for {@link org.apache.tapestry.IAsset} implementations.  Provides
- *  the location property.
- *
- *  @author Howard Lewis Ship
- *  @since 3.0
- *
- **/
-
-public abstract class AbstractAsset implements IAsset
-{
-    private Resource _resourceLocation;
-    private Location _location;
-
-    protected AbstractAsset(Resource resourceLocation, Location location)
-    {
-        _resourceLocation = resourceLocation;
-        _location = location;
-    }
-
-    public Location getLocation()
-    {
-        return _location;
-    }
-    
-    public Resource getResourceLocation()
-    {
-        return _resourceLocation;
-    }
-    
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("resourceLocation", _resourceLocation);
-        builder.append("location", _location);
-
-        return builder.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetComparator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetComparator.java
deleted file mode 100644
index 1eabdd6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetComparator.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright Apr 15, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.asset;
-
-import java.util.Comparator;
-
-
-/**
- * Used to guarantee that whenever present, the PATH key entry 
- * of an asset service link is always appended last in that path
- * string. This is required for certain relative url operations. (ie dojo baseRelativePath)
- * 
- * @author jkuhnert
- */
-public class AssetComparator implements Comparator
-{
-
-    /** 
-     * {@inheritDoc}
-     */
-    public int compare(Object o1, Object o2)
-    {
-        if (!String.class.isInstance(o1) || !String.class.isInstance(o2))
-            return 1;
-        
-        String key1 = (String)o1;
-        String key2 = (String)o2;
-        
-        if (key1.toUpperCase().equals("PATH") && !key2.toUpperCase().equals("PATH"))
-            return 1;
-        else if (key2.toUpperCase().equals("PATH") && !key1.toUpperCase().equals("PATH"))
-            return -1;
-        else return key1.compareToIgnoreCase(key2);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetFactory.java
deleted file mode 100644
index a898683..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetFactory.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.util.Locale;
-
-/**
- * A service which creates an asset. In some cases, the asset is selected based on the Resource
- * (typically of the component or page specification).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface AssetFactory
-{
-
-    /**
-     * Invoked to check if the factory instance can find a matching asset using the appropriate
-     * strategy specific to its implementation.
-     *
-     * @param spec The optional component specification to check the path against.
-     * @param baseResource The resource that the path may be relative to.
-     * @param path The asset path, relative to baseResource. 
-     * @param locale Optional parameter when a localized version is desired. (may be null)
-     * @return True if the requested asset can be found, false otherwise.
-     */
-    boolean assetExists(IComponentSpecification spec, Resource baseResource, String path, Locale locale);
-
-    /**
-     * Creates a new asset relative to an existing asset.
-     *
-     * @param spec The optional component specification to check the path against.
-     * 
-     * @param baseResource
-     *            the base resource from which an asset path may be calculated. Each type of asset
-     *            is linked to a particular implemenation of {@link Resource}, and generates a
-     *            corresponding implementation of {@link org.apache.tapestry.IAsset}.
-     * @param path
-     *            the path relative to the resource (if no leading slash), or an absolute path
-     *            within the domain of the asset type (i.e, within the classpath, or within the web
-     *            application).
-     * @param locale
-     *            the desired locale of the asset; the closest match will be used.
-     * @param location
-     *            the location to be associated with the returned asset, or null to not attempt to
-     *            localize the asset
-     * 
-     * @return The created asset.
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if no matching asset may be found.
-     */
-    IAsset createAsset(Resource baseResource, IComponentSpecification spec, String path, Locale locale, Location location);
-
-    /**
-     * Creates a new asset relative to the root of the domain defined by the type of asset.
-     * 
-     * @param path
-     *            the absolute path for the resource
-     * @param locale
-     *            the locale to localize the asset to, or null for no localization
-     * @param location
-     *            the location used to report any errors
-     * @return an {@link IAsset}
-     */
-    IAsset createAbsoluteAsset(String path, Locale locale, Location location);
-
-    /**
-     * Creates a new asset based on a known resource.
-     *
-     * @param resource
-     *          The resource the asset will represent.
-     * @param location
-     *          Location of the resource. (used for error reporting mostly)
-     *
-     * @return The created asset.
-     */
-
-    IAsset createAsset(Resource resource, Location location);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetFactoryContribution.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetFactoryContribution.java
deleted file mode 100644
index 2206650..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetFactoryContribution.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- * Contribution to the <code>tapestry.asset.AssetFactories</code> configuration point.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class AssetFactoryContribution extends BaseLocatable
-{
-    private String _prefix;
-
-    private AssetFactory _factory;
-
-    public AssetFactory getFactory()
-    {
-        return _factory;
-    }
-
-    public void setFactory(AssetFactory factory)
-    {
-        _factory = factory;
-    }
-
-    public String getPrefix()
-    {
-        return _prefix;
-    }
-
-    public void setPrefix(String prefix)
-    {
-        _prefix = prefix;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetMessages.java
deleted file mode 100644
index 9da0106..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetMessages.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import java.io.IOException;
-
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class AssetMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(AssetMessages.class);
-
-    /* defeat insantiation */
-    private AssetMessages() { }
-    
-    static String missingAsset(String path, Resource resource)
-    {
-        return _formatter.format("missing-asset", path, resource);
-    }
-
-    static String noSuchResource(String resourcePath)
-    {
-        return _formatter.format("no-such-resource", resourcePath);
-    }
-
-    static String unableToReadResource(String resourcePath, IOException cause)
-    {
-        return _formatter.format("unable-to-read-resource", resourcePath, cause);
-    }
-
-    static String md5Mismatch(String path)
-    {
-        return _formatter.format("md5-mismatch", path);
-    }
-
-    static String exceptionReportTitle(String path)
-    {
-        return _formatter.format("exception-report-title", path);
-    }
-
-    static String missingClasspathResource(String path)
-    {
-        return _formatter.format("missing-classpath-resource", path);
-    }
-
-    static String missingContextResource(String path)
-    {
-        return _formatter.format("missing-context-resource", path);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java
deleted file mode 100644
index 57bc735..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java
+++ /dev/null
@@ -1,490 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.error.RequestExceptionReporter;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.util.io.GzipUtil;
-import org.apache.tapestry.web.WebContext;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.zip.GZIPOutputStream;
-
-/**
- * A service for building URLs to and accessing {@link org.apache.tapestry.IAsset}s. Most of the
- * work is deferred to the {@link org.apache.tapestry.IAsset}instance.
- * <p>
- * The retrieval part is directly linked to {@link PrivateAsset}. The service responds to a URL
- * that encodes the path of a resource within the classpath. The {@link #service(IRequestCycle)}
- * method reads the resource and streams it out.
- * <p>
- * TBD: Security issues. Should only be able to retrieve a resource that was previously registerred
- * in some way ... otherwise, hackers will be able to suck out the .class files of the application!
- * 
- * @author Howard Lewis Ship
- */
-
-public class AssetService implements IEngineService
-{
-    /**
-     * Query parameter that stores the path to the resource (with a leading slash).
-     * 
-     * @since 4.0
-     */
-
-    public static final String PATH = "path";
-
-    /**
-     * Query parameter that stores the digest for the file; this is used to authenticate that the
-     * client is allowed to access the file.
-     * 
-     * @since 4.0
-     */
-
-    public static final String DIGEST = "digest";
-
-    /**
-     * Defaults MIME types, by extension, used when the servlet container doesn't provide MIME
-     * types. ServletExec Debugger, for example, fails to provide these.
-     */
-
-    private static final Map _mimeTypes;
-
-    static
-    {
-        _mimeTypes = new HashMap(17);
-        _mimeTypes.put("css", "text/css");
-        _mimeTypes.put("gif", "image/gif");
-        _mimeTypes.put("jpg", "image/jpeg");
-        _mimeTypes.put("jpeg", "image/jpeg");
-        _mimeTypes.put("png", "image/png");
-        _mimeTypes.put("htm", "text/html");
-        _mimeTypes.put("html", "text/html");
-    }
-    
-    /** Represents a month of time in seconds. */
-    static final long MONTH_SECONDS = 60 * 60 * 24 * 30;
-    
-    private Log _log;
-    
-    /** @since 4.0 */
-    private ClassResolver _classResolver;
-
-    /** @since 4.0 */
-    private LinkFactory _linkFactory;
-
-    /** @since 4.0 */
-    private WebContext _context;
-
-    /** @since 4.0 */
-
-    private WebRequest _request;
-
-    /** @since 4.0 */
-    private WebResponse _response;
-
-    /** @since 4.0 */
-    private ResourceDigestSource _digestSource;
-
-    /** @since 4.1 */
-    private ResourceMatcher _unprotectedMatcher;
-    
-    /**
-     * Startup time for this service; used to set the Last-Modified response header.
-     * 
-     * @since 4.0
-     */
-
-    private final long _startupTime = System.currentTimeMillis();
-
-    /**
-     * Time vended assets expire. Since a change in asset content is a change in asset URI, we want
-     * them to not expire ... but a year will do.
-     */
-
-    final long _expireTime = _startupTime + 365 * 24 * 60 * 60 * 1000L;
-
-    /** @since 4.0 */
-
-    private RequestExceptionReporter _exceptionReporter;
-
-    /**
-     * Cache of static content resources.
-     */
-    private final Map _cache = new HashMap();
-    
-    /**
-     * Builds a {@link ILink}for a {@link PrivateAsset}.
-     * <p>
-     * A single parameter is expected, the resource path of the asset (which is expected to start
-     * with a leading slash).
-     */
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        Defense.isAssignable(parameter, String.class, "parameter");
-
-        String path = (String) parameter;
-        String digest = null;
-        
-        if(!_unprotectedMatcher.containsResource(path))
-            digest = _digestSource.getDigestForResource(path);
-        
-        Map parameters = new TreeMap(new AssetComparator());
-        
-        parameters.put(ServiceConstants.SERVICE, getName());
-        parameters.put(PATH, path);
-        
-        if (digest != null)
-            parameters.put(DIGEST, digest);
-        
-        // Service is stateless, which is the exception to the rule.
-        
-        return _linkFactory.constructLink(this, post, parameters, false);
-    }
-
-    public String getName()
-    {
-        return Tapestry.ASSET_SERVICE;
-    }
-
-    private String getMimeType(String path)
-    {
-        String result = _context.getMimeType(path);
-        
-        if (result == null)
-        {
-            int dotx = path.lastIndexOf('.');
-            if (dotx > -1)
-            {
-                String key = path.substring(dotx + 1).toLowerCase();
-                result = (String) _mimeTypes.get(key);
-            }
-            
-            if (result == null)
-                result = "text/plain";
-        }
-
-        return result;
-    }
-    
-    /**
-     * Retrieves a resource from the classpath and returns it to the client in a binary output
-     * stream.
-     */
-
-    public void service(IRequestCycle cycle)
-            throws IOException
-    {
-        String path = cycle.getParameter(PATH);
-        String md5Digest = cycle.getParameter(DIGEST);
-        boolean checkDigest = !_unprotectedMatcher.containsResource(path);
-        
-        URLConnection resourceConnection;
-        
-        try
-        {
-            if (checkDigest && !_digestSource.getDigestForResource(path).equals(md5Digest))
-            {
-                _response.sendError(HttpServletResponse.SC_FORBIDDEN, AssetMessages.md5Mismatch(path));
-                return;
-            }
-            
-            // If they were vended an asset in the past then it must be up-to date.
-            // Asset URIs change if the underlying file is modified. (unless unprotected)
-            
-            if (checkDigest && _request.getHeader("If-Modified-Since") != null)
-            {
-                _response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-                return;
-            }
-            
-            URL resourceURL = _classResolver.getResource(translatePath(path));
-            
-            if (resourceURL == null)
-            {
-                _response.setStatus(HttpServletResponse.SC_NOT_FOUND);
-                _log.warn(AssetMessages.noSuchResource(path));
-                return;
-            }
-            
-            resourceConnection = resourceURL.openConnection();
-            
-            // check caching for unprotected resources
-            
-            if (!checkDigest && cachedResource(resourceConnection))
-                return;
-            
-            writeAssetContent(cycle, path, resourceConnection);
-        }
-        catch (IOException eof)
-        {
-            // ignored / expected exceptions happen when browser prematurely abandons connections - IE does this a lot
-        }
-        catch (Throwable ex)
-        {
-            _exceptionReporter.reportRequestException(AssetMessages.exceptionReportTitle(path), ex);
-        }
-    }
-
-    /**
-     * Utility that helps to resolve css file relative resources included
-     * in a css temlpate via "url('../images/foo.gif')" or fix paths containing 
-     * relative resource ".." style notation.
-     * 
-     * @param path The incoming path to check for relativity.
-     * @return The path unchanged if not containing a css relative path, otherwise
-     *          returns the path without the css filename in it so the resource is resolvable
-     *          directly from the path.
-     */
-    String translatePath(String path)
-    {
-        if (path == null) 
-            return null;
-        
-        String ret = FilenameUtils.normalize(path);
-        ret = FilenameUtils.separatorsToUnix(ret);
-        
-        return ret;
-    }
-    
-    /**
-     * Checks if the resource contained within the specified URL 
-     * has a modified time greater than the request header value
-     * of <code>If-Modified-Since</code>. If it doesn't then the 
-     * response status is set to {@link HttpServletResponse#SC_NOT_MODIFIED}.
-     * 
-     * @param resourceURL Resource being checked
-     * @return True if resource should be cached and response header was set.
-     * @since 4.1
-     */
-    
-    boolean cachedResource(URLConnection resourceURL)
-    {
-        // even if it doesn't exist in header the value will be -1, 
-        // which means we need to write out the contents of the resource
-
-        long modifiedSince = _request.getDateHeader("If-Modified-Since");
-
-        if (modifiedSince <= 0)
-            return false;
-        
-        if (_log.isDebugEnabled())
-            _log.debug("cachedResource(" + resourceURL.getURL() + ") modified-since header is: " + modifiedSince);
-        
-        if (resourceURL.getLastModified() > modifiedSince)
-            return false;
-        
-        _response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-        
-        return true;
-    }
-
-    /**
-     * Writes the asset specified by <code>resourceConnection</code> out to the response stream.
-     *
-     * @param cycle
-     *          The current request.
-     * @param resourcePath
-     *          The path of the resource.
-     * @param resourceConnection
-     *          A connection for the resource.
-     * @throws IOException On error.
-     */
-
-    private void writeAssetContent(IRequestCycle cycle, String resourcePath, URLConnection resourceConnection)
-            throws IOException
-    {
-        // Getting the content type and length is very dependant
-        // on support from the application server (represented
-        // here by the servletContext).
-        
-        String contentType = getMimeType(resourcePath);
-
-        long lastModified = resourceConnection.getLastModified();
-        if (lastModified <= 0)
-            lastModified = _startupTime;
-        
-        _response.setDateHeader("Last-Modified", lastModified);
-        
-        // write out expiration/cache info
-
-        _response.setDateHeader("Expires", _expireTime);
-        _response.setHeader("Cache-Control", "public, max-age=" + (MONTH_SECONDS * 3));
-        
-        // Set the content type. If the servlet container doesn't
-        // provide it, try and guess it by the extension.
-        
-        if (contentType == null || contentType.length() == 0)
-            contentType = getMimeType(resourcePath);
-        
-        byte[] data = getAssetData(cycle, resourcePath, resourceConnection, contentType);
-
-        // See ETag definition  - http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.19
-        
-        _response.setHeader("ETag", "W/\"" + data.length + "-" + lastModified + "\"");
-
-        // force image(or other) caching when detected, esp helps with ie related things
-        // see http://mir.aculo.us/2005/08/28/internet-explorer-and-ajax-image-caching-woes
-        
-        _response.setContentLength(data.length);
-        
-        OutputStream output = _response.getOutputStream(new ContentType(contentType));
-        
-        output.write(data);
-    }
-    
-    byte[] getAssetData(IRequestCycle cycle, String resourcePath,
-            URLConnection resourceConnection, String contentType) 
-    throws IOException
-    {
-        InputStream input = null;
-
-        try {
-            
-            CachedAsset cache;
-            byte[] data = null;
-            
-            // check cache first
-            
-            if (_cache.get(resourcePath) != null)
-            {    
-                cache = (CachedAsset)_cache.get(resourcePath);
-                
-                if (cache.getLastModified() < resourceConnection.getLastModified())
-                    cache.clear(resourceConnection.getLastModified());
-                
-                data = cache.getData();
-            } else
-            {    
-                cache = new CachedAsset(resourcePath, resourceConnection.getLastModified(), null, null);
-                
-                _cache.put(resourcePath, cache);
-            }
-            
-            if (data == null)
-            {
-                input = resourceConnection.getInputStream();
-                data = IOUtils.toByteArray(input);
-
-                cache.setData(data);
-            }
-            
-            // compress javascript responses when possible
-            
-            if (GzipUtil.shouldCompressContentType(contentType) && GzipUtil.isGzipCapable(_request))
-            {    
-                if (cache.getGzipData() == null)
-                {    
-                    ByteArrayOutputStream bo = new ByteArrayOutputStream();
-                    GZIPOutputStream gzip = new GZIPOutputStream(bo);
-                    
-                    gzip.write(data);
-                    gzip.close();
-                    
-                    data = bo.toByteArray();
-                    cache.setGzipData(data);
-                } else
-                    data = cache.getGzipData();
-                
-                _response.setHeader("Content-Encoding", "gzip");
-            }
-            
-            return data;
-            
-        } finally {
-            
-            if (input != null) {
-                IOUtils.closeQuietly(input);
-            }
-        }
-    }
-    
-    /** @since 4.0 */
-
-    public void setExceptionReporter(RequestExceptionReporter exceptionReporter)
-    {
-        _exceptionReporter = exceptionReporter;
-    }
-
-    /** @since 4.0 */
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-
-    /** @since 4.0 */
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-
-    /** @since 4.0 */
-    public void setContext(WebContext context)
-    {
-        _context = context;
-    }
-
-    /** @since 4.0 */
-    public void setResponse(WebResponse response)
-    {
-        _response = response;
-    }
-
-    /** @since 4.0 */
-    public void setDigestSource(ResourceDigestSource md5Source)
-    {
-        _digestSource = md5Source;
-    }
-
-    /** @since 4.0 */
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-    
-    /** @since 4.1 */
-    public void setUnprotectedMatcher(ResourceMatcher matcher)
-    {
-        _unprotectedMatcher = matcher;
-    }
-    
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetSource.java
deleted file mode 100644
index b7e24fa..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetSource.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.util.Locale;
-
-/**
- * Used to create an {@link org.apache.tapestry.IAsset} instance for a particular asset path. The
- * path may have a prefix that indicates its type, or it may be relative to some existing resource.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface AssetSource
-{
-    /**
-     * Finds an asset relative to some existing resource (typically, a page, component or library
-     * specification).
-     * 
-     * @param base
-     *            The base resource used for resolving the asset
-     * @param path
-     *            the path relative to the base resource; alternately, the path may include a prefix
-     *            that defines a domain (such as "classpath:" or "context:") in which case the base
-     *            resource is ignored and the resource resolved within that domain
-     * @param locale
-     *            used to find a localized version of the asset, may be null to indicate no
-     *            localization
-     * @param location
-     *            used to report errors (such as missing resources)
-     *            
-     * @return the asset, possibly localized
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the asset does not exist
-     */
-    IAsset findAsset(Resource base, String path, Locale locale, Location location);
-
-    /**
-     * Finds an asset relative to the specified <code>base</code> resources OR {@link IComponentSpecification} passed in.
-     *
-     * @param base
-     *            The base resource used for resolving the asset
-     * @param spec
-     *            The specification the resource may be relative to if not found relative to base.
-     * @param path
-     *            the path relative to the base resource; alternately, the path may include a prefix
-     *            that defines a domain (such as "classpath:" or "context:") in which case the base
-     *            resource is ignored and the resource resolved within that domain
-     * @param locale
-     *            used to find a localized version of the asset, may be null to indicate no
-     *            localization
-     * @param location
-     *            used to report errors (such as missing resources)
-     *
-     * @return the asset, possibly localized
-     */
-    IAsset findAsset(Resource base, IComponentSpecification spec, String path, Locale locale, Location location);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetSourceImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetSourceImpl.java
deleted file mode 100644
index 4792cf0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetSourceImpl.java
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.util.*;
-
-/**
- * Implementation of the {@link org.apache.tapestry.asset.AssetSource} service interface.
- * 
- */
-public class AssetSourceImpl implements AssetSource
-{
-    private Map _assetFactoryByPrefix = new HashMap();
-
-    private List _contributions;
-
-    private AssetFactory _defaultAssetFactory;
-
-    private AssetFactory _lookupAssetFactory;
-
-    private AssetFactory _classpathAssetFactory;
-
-    private AssetFactory _contextAssetFactory;
-
-    public void initializeService()
-    {
-        Iterator i = _contributions.iterator();
-        while (i.hasNext())
-        {
-            AssetFactoryContribution c = (AssetFactoryContribution) i.next();
-
-            _assetFactoryByPrefix.put(c.getPrefix(), c.getFactory());
-        }
-    }
-
-    public IAsset findAsset(Resource base, String path, Locale locale, Location location)
-    {
-        return findAsset(base, null, path, locale, location);
-    }
-
-    public IAsset findAsset(Resource base, IComponentSpecification spec, String path, Locale locale, Location location)
-    {
-        Defense.notNull(path, "path");
-        Defense.notNull(location, "location");
-
-        int colonx = path.indexOf(':');
-        
-        String prefix = colonx > -1 ? path.substring(0, colonx) : null;
-        String truePath = colonx > -1 ? path.substring(colonx + 1) : path;
-
-        AssetFactory factory = null;
-
-        if (prefix != null) {
-
-            factory = (AssetFactory) _assetFactoryByPrefix.get(prefix);
-        }
-
-        // now we have to search
-        
-        if (factory == null && prefix == null) {
-            
-            factory = findAssetFactory(spec, base, truePath, locale);
-        }
-        
-        // Unknown prefix is expected to happen when an external asset (using an established
-        // prefix such as http:) is referenced.
-
-        if (factory == null)
-        {
-            factory = _defaultAssetFactory;
-
-            // Path is the full path, including the prefix (which is really the scheme
-            // of the URL).
-
-            truePath = path;
-        }
-        
-        if (truePath.startsWith("/"))
-            return factory.createAbsoluteAsset(truePath, locale, location);
-
-        // This can happen when a 3.0 DTD is read in
-
-        return factory.createAsset(base, spec, truePath, locale, location);
-    }
-
-    AssetFactory findAssetFactory(IComponentSpecification spec, Resource baseResource, String path, Locale locale)
-    {
-        // need to check these two core factories in order first
-
-        if (_classpathAssetFactory.assetExists(spec, baseResource, path, locale))
-            return _classpathAssetFactory;
-
-        if (_contextAssetFactory.assetExists(spec, baseResource, path, locale))
-            return _contextAssetFactory;
-        
-        for (int i=0; i < _contributions.size(); i++) {
-
-            AssetFactoryContribution c = (AssetFactoryContribution)_contributions.get(i);
-
-            if (c.getFactory().assetExists(spec, baseResource, path, locale))
-                return c.getFactory();
-        }
-
-        return null;
-    }
-
-    /**
-     * Factory used when the path has no prefix, and the type of asset must be inferred from the
-     * type of resource.
-     */
-
-    public void setLookupAssetFactory(AssetFactory lookupAssetFactory)
-    {
-        _lookupAssetFactory = lookupAssetFactory;
-    }
-
-    /**
-     * List of {@link org.apache.tapestry.asset.AssetFactoryContribution}.
-     */
-
-    public void setContributions(List contributions)
-    {
-        _contributions = contributions;
-    }
-
-    /**
-     * Factory used when an unrecognized prefix (typically, an arbitrary URL's scheme) is provided.
-     */
-
-    public void setDefaultAssetFactory(AssetFactory defaultAssetFactory)
-    {
-        _defaultAssetFactory = defaultAssetFactory;
-    }
-
-    public void setClasspathAssetFactory(AssetFactory classpathAssetFactory)
-    {
-        _classpathAssetFactory = classpathAssetFactory;
-    }
-
-    public void setContextAssetFactory(AssetFactory contextAssetFactory)
-    {
-        _contextAssetFactory = contextAssetFactory;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetStrings.properties
deleted file mode 100644
index 03c7f2e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/AssetStrings.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-missing-classpath-resource=Missing classpath resource ''{0}''.
-missing-context-resource=Missing context resource ''{0}''.
-missing-asset=Unable to locate resource ''{0}'' relative to {1}.
-no-such-resource=Classpath resource ''{0}'' does not exist.
-unable-to-read-resource=Unable to read classpath resource ''{0}'': {1}
-exception-report-title=Failure to export classpath resource {0}.
-md5-mismatch=The MD5 digest provided in the request does not match the actual value for classpath resource ''{0}''.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/CachedAsset.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/CachedAsset.java
deleted file mode 100644
index 3b0a855..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/CachedAsset.java
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.asset;
-
-
-/**
- * Wrapper around cached asset resource.
- * 
- * @author jkuhnert
- */
-public class CachedAsset
-{
-    
-    /**
-     * The raw data for this resource.
-     */
-    private byte[] _data;
-    
-    /**
-     * The gzipped version of the raw data.
-     */
-    private byte[] _gzipData;
-    
-    /**
-     * Path to the resource.
-     */
-    private String _path;
-    
-    /**
-     * The last known modification time of the data this cached object
-     * represents. Is used to invalidate cache entries.
-     */
-    private long _lastModified;
-    
-    /**
-     * Creates a new cachable asset entry. 
-     * 
-     * @param path
-     *          The path string of the resource.
-     * @param lastModified
-     *          The last known modification time of the data this cached object
-     *          represents. Is used to invalidate cache entries.
-     * @param data
-     *          The data representation to cache.
-     * @param gzipData
-     *          The optional gzip'ed data.
-     */
-    public CachedAsset(String path, long lastModified, byte[] data, byte[] gzipData)
-    {
-        _path = path;
-        _lastModified = lastModified;
-        _data = data;
-        _gzipData = gzipData;
-    }
-    
-    /**
-     * @return Returns the data.
-     */
-    public byte[] getData()
-    {
-        return _data;
-    }
-    
-    /**
-     * @param data The data to set.
-     */
-    public void setData(byte[] data)
-    {
-        _data = data;
-    }
-
-    
-    /**
-     * @return Returns the gzipData.
-     */
-    public byte[] getGzipData()
-    {
-        return _gzipData;
-    }
-
-    
-    /**
-     * @param gzipData The gzipData to set.
-     */
-    public void setGzipData(byte[] gzipData)
-    {
-        _gzipData = gzipData;
-    }
-
-    
-    /**
-     * @return Returns the path.
-     */
-    public String getPath()
-    {
-        return _path;
-    }
-    
-    /**
-     * @return Returns the lastModified.
-     */
-    public long getLastModified()
-    {
-        return _lastModified;
-    }
-    
-    /**
-     * Clears the currently cached data and resets the last modified time.
-     * 
-     * @param lastModified The lastModified to set.
-     */
-    public void clear(long lastModified)
-    {
-        _lastModified = lastModified;
-        _data = null;
-        _gzipData = null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int hashCode()
-    {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((_path == null) ? 0 : _path.hashCode());
-        return result;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean equals(Object obj)
-    {
-        if (this == obj) return true;
-        if (obj == null) return false;
-        if (getClass() != obj.getClass()) return false;
-        final CachedAsset other = (CachedAsset) obj;
-        if (_path == null) {
-            if (other._path != null) return false;
-        } else if (!_path.equals(other._path)) return false;
-        return true;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public String toString()
-    {
-        String ret = "CachedAsset [path: " + _path;
-        
-        if (_data != null)
-            ret += ", data size(bytes): " + _data.length;
-        if (_gzipData != null)
-            ret += ", gzip data size(bytes): " + _gzipData.length;
-        
-        ret += ", lastModified(ms): " + _lastModified + "]";
-        
-        return ret;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ClasspathAssetFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ClasspathAssetFactory.java
deleted file mode 100644
index c482025..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ClasspathAssetFactory.java
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.l10n.ResourceLocalizer;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.util.Locale;
-
-/**
- * Creates instances of {@link org.apache.tapestry.asset.PrivateAsset}, which are the holders of
- * classpath: resources.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ClasspathAssetFactory implements AssetFactory
-{
-    private ClassResolver _classResolver;
-
-    private IEngineService _assetService;
-
-    private ResourceLocalizer _localizer;
-
-    private Resource _rootClassPath;
-
-    public boolean assetExists(IComponentSpecification spec, Resource baseResource, String path, Locale locale)
-    {
-        Resource assetResource = null;
-        if (path.startsWith("/")) {
-
-            if (_rootClassPath == null) {
-                _rootClassPath = new ClasspathResource(_classResolver, "");
-            }
-
-            assetResource = _rootClassPath.getRelativeResource(path);
-        } else {
-            
-            assetResource = baseResource.getRelativeResource(path);
-        }
-
-        Resource localized = _localizer.findLocalization(assetResource, locale);
-
-        return localized != null;
-    }
-
-    public IAsset createAsset(Resource baseResource, IComponentSpecification spec, String path, Locale locale, Location location)
-    {
-        Resource asset = baseResource.getRelativeResource(path);
-        Resource localized = _localizer.findLocalization(asset, locale);
-
-        if (localized == null)
-            throw new ApplicationRuntimeException(AssetMessages.missingAsset(path, baseResource), location, null);
-
-        return createAsset(localized, location);
-    }
-
-    public IAsset createAbsoluteAsset(String path, Locale locale, Location location)
-    {
-        Resource base = new ClasspathResource(_classResolver, path);
-        Resource localized = _localizer.findLocalization(base, locale);
-
-        if (localized == null)
-            throw new ApplicationRuntimeException(AssetMessages.missingClasspathResource(path), location, null);
-
-        return createAsset(localized, location);
-    }
-
-    public IAsset createAsset(Resource resource, Location location)
-    {
-        return new PrivateAsset(resource, _assetService, location);
-    }
-
-    public void setAssetService(IEngineService assetService)
-    {
-        _assetService = assetService;
-    }
-
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-
-    public void setLocalizer(ResourceLocalizer localizer)
-    {
-        _localizer = localizer;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ContextAsset.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ContextAsset.java
deleted file mode 100644
index 87ff4ae..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ContextAsset.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * An asset whose path is relative to the {@link javax.servlet.ServletContext} containing the
- * application.
- *
- * @author Howard Lewis Ship
- */
-
-public class ContextAsset extends AbstractAsset implements IAsset
-{
-    private String _contextPath;
-
-    private String _resolvedURL;
-
-    private IRequestCycle _requestCycle;
-
-    public ContextAsset(String contextPath, Resource resource, Location location, IRequestCycle cycle)
-    {
-        super(resource, location);
-
-        Defense.notNull(contextPath, "contextPath");
-
-        _contextPath = contextPath;
-
-        _requestCycle = cycle;
-    }
-
-    /**
-     * Generates a URL for the client to retrieve the asset. The context path is prepended to the
-     * asset path, which means that assets deployed inside web applications will still work (if
-     * things are configured properly).
-     */
-
-    public String buildURL()
-    {
-        if (_resolvedURL == null)
-            _resolvedURL = _contextPath + getResourceLocation().getPath();
-
-        return _resolvedURL;
-    }
-
-    public InputStream getResourceAsStream()
-    {
-        try
-        {
-            URL url = getResourceLocation().getResourceURL();
-
-            return url.openStream();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(Tapestry.format(
-              "ContextAsset.resource-missing",
-              getResourceLocation()), ex);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ContextAssetFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ContextAssetFactory.java
deleted file mode 100644
index 450da8b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ContextAssetFactory.java
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.l10n.ResourceLocalizer;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.web.WebContext;
-import org.apache.tapestry.web.WebContextResource;
-
-import java.util.Locale;
-
-/**
- * All "context:" prefixed asset paths are interpreted relative to the web context (the web
- * application's root folder).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ContextAssetFactory implements AssetFactory
-{
-    private String _contextPath;
-
-    private WebContext _webContext;
-
-    private ResourceLocalizer _localizer;
-
-    private IRequestCycle _requestCycle;
-
-    public void setWebContext(WebContext webContext)
-    {
-        _webContext = webContext;
-    }
-
-    public boolean assetExists(IComponentSpecification spec, Resource baseResource, String path, Locale locale)
-    {
-        return findAsset(spec, baseResource, path, locale) != null;
-    }
-
-    Resource findAsset(IComponentSpecification spec, Resource baseResource, String path, Locale locale)
-    {
-        Resource assetResource = baseResource.getRelativeResource("/").getRelativeResource(path);
-        Resource localized = _localizer.findLocalization(assetResource, locale);
-
-        if (localized == null) {
-
-            assetResource = baseResource.getRelativeResource(path);
-            localized = _localizer.findLocalization(assetResource, locale);
-        }
-
-        if (localized == null && spec != null && spec.getLocation().getResource() != null) {
-            // try relative to specification
-
-            assetResource = spec.getLocation().getResource().getRelativeResource("/").getRelativeResource(path);
-            
-            localized = _localizer.findLocalization(assetResource, locale);
-        }
-
-        if (localized == null || localized.getResourceURL() == null) {
-            
-            // try relative to context root
-
-            // paths must begin with "/" for context resolution
-            
-            if (path != null && !path.startsWith("/"))
-                path = "/" + path;
-            
-            Resource base = new WebContextResource(_webContext, path);
-            localized = _localizer.findLocalization(base, locale);
-        }
-
-        return localized;
-    }
-
-    public IAsset createAsset(Resource baseResource, IComponentSpecification spec, String path, Locale locale, Location location)
-    {
-        Resource localized = findAsset(spec, baseResource, path, locale);
-        
-        // We always create a new asset relative to an existing resource; the type of resource
-        // will jive with the type of asset returned. Path may start with a leading slash, which
-        // yields an absolute, not relative, path to the resource.
-
-        if ( (localized == null || localized.getResourceURL() == null)
-             && path.startsWith("/")) {
-
-            return createAbsoluteAsset(path, locale, location);
-        }
-        
-        if (localized == null)
-            throw new ApplicationRuntimeException(AssetMessages.missingAsset(path, baseResource), location, null);
-
-        return createAsset(localized, location);
-    }
-
-    public IAsset createAbsoluteAsset(String path, Locale locale, Location location)
-    {
-        Resource base = new WebContextResource(_webContext, path);
-        Resource localized = _localizer.findLocalization(base, locale);
-
-        if (localized == null)
-            throw new ApplicationRuntimeException(AssetMessages.missingContextResource(path), location, null);
-
-        return createAsset(localized, location);
-    }
-
-    public IAsset createAsset(Resource resource, Location location)
-    {
-        return new ContextAsset(_contextPath, resource, location, _requestCycle);
-    }
-
-    public void setContextPath(String contextPath)
-    {
-        _contextPath = contextPath;
-    }
-    
-    public void setLocalizer(ResourceLocalizer localizer)
-    {
-        _localizer = localizer;
-    }
-
-    public void setRequestCycle(IRequestCycle cycle)
-    {
-        _requestCycle = cycle;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/DefaultAssetFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/DefaultAssetFactory.java
deleted file mode 100644
index 73db987..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/DefaultAssetFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Locale;
-
-/**
- * Default asset factory used when the asset path contains a prefix that is not recognized. It is
- * assumed that the prefix is, in fact, the scheme of an external URL.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DefaultAssetFactory implements AssetFactory
-{
-
-    public boolean assetExists(IComponentSpecification spec, Resource baseResource, String path, Locale locale)
-    {
-        try {
-            URL url = new URL(path);
-
-            URLConnection conn = url.openConnection();
-
-            return true;
-        } catch (Throwable t) {
-
-            return false;
-        }
-    }
-
-    public IAsset createAsset(Resource baseResource, IComponentSpecification spec, String path, Locale locale, Location location)
-    {
-        return new ExternalAsset(path, location);
-    }
-
-    public IAsset createAsset(Resource resource, Location location)
-    {
-        return new ExternalAsset(resource.getPath(), location);
-    }
-
-    public IAsset createAbsoluteAsset(String path, Locale locale, Location location)
-    {
-        return new ExternalAsset(path, location);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ExternalAsset.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ExternalAsset.java
deleted file mode 100644
index d206a33..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ExternalAsset.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import java.io.InputStream;
-import java.net.URL;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A reference to an external URL.  {@link ExternalAsset}s are not
- *  localizable.
- *
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class ExternalAsset extends AbstractAsset
-{
-    private String _url;
-
-    public ExternalAsset(String URL, Location location)
-    {
-        super(null, location);
-
-        _url = URL;
-    }
-
-    /**
-     *  Simply returns the URL of the external asset.
-     *
-     **/
-
-    public String buildURL()
-    {
-        return _url;
-    }
-
-    public InputStream getResourceAsStream()
-    {
-        URL url;
-
-        try
-        {
-            url = new URL(_url);
-
-            return url.openStream();
-        }
-        catch (Exception ex)
-        {
-            // MalrformedURLException or IOException
-
-            throw new ApplicationRuntimeException(Tapestry.format("ExternalAsset.resource-missing", _url), ex);
-        }
-
-    }
-
-    public String toString()
-    {
-        return "ExternalAsset[" + _url + "]";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ExternalResource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ExternalResource.java
deleted file mode 100644
index 795eea0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ExternalResource.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.AbstractResource;
-
-import java.net.URL;
-import java.util.Locale;
-
-/**
- * Corresponds to the {@link org.apache.tapestry.asset.ExternalAsset}.
- * 
- */
-public class ExternalResource extends AbstractResource
-{
-    public ExternalResource(String path, Locale locale)
-    {
-        super(path, locale);
-    }
-
-    protected Resource newResource(String path)
-    {
-        return new ExternalResource(path, getLocale());
-    }
-
-    public URL getResourceURL()
-    {
-        throw new UnsupportedOperationException("getResourceURL()");
-    }
-
-    public Resource getLocalization(Locale locale)
-    {
-        return this;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/PrivateAsset.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/PrivateAsset.java
deleted file mode 100644
index 085a8fa..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/PrivateAsset.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * An implementation of {@link org.apache.tapestry.IAsset} for localizable assets within the JVM's
- * classpath.
- * <p>
- * The localization code here is largely cut-and-paste from {@link ContextAsset}.
- * 
- * @author Howard Ship
- */
-
-public class PrivateAsset extends AbstractAsset
-{
-    private IEngineService _assetService;
-
-    /**
-     * @deprecated To be removed (someday). Use
-     *             {@link #PrivateAsset(Resource, IEngineService, Location)}&nbsp;instead.
-     */
-    public PrivateAsset(Resource resourceLocation, Location location)
-    {
-        this(resourceLocation, null, location);
-    }
-
-    public PrivateAsset(Resource resourceLocation, IEngineService assetService,
-            Location location)
-    {
-        super(resourceLocation, location);
-
-        Defense.notNull(assetService, "assetService");
-
-        _assetService = assetService;
-    }
-
-    /**
-     * Gets the localized version of the resource. Build the URL for the resource. If possible, the
-     * application's {@link ExternalAsset}is located, to copy the resource to a directory
-     * visible to the web server.
-     */
-
-    public String buildURL()
-    {
-        String path = getResourceLocation().getPath();
-
-        ILink link = _assetService.getLink(false, path);
-        
-        return link.getURL();
-    }
-
-    public InputStream getResourceAsStream()
-    {
-        Resource location = getResourceLocation();
-
-        try
-        {
-            URL url = location.getResourceURL();
-
-            return url.openStream();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(AssetMessages.noSuchResource(location.getPath()));
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceDigestSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceDigestSource.java
deleted file mode 100644
index fc10399..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceDigestSource.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-
-/**
- * Calculates the digest value, as a string, for a particular classpath resource. This is primarily
- * used by the {@link org.apache.tapestry.asset.AssetService}to authenticate requests (you are not
- * allowed access to a resource unless you can provide the correct digest value).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ResourceDigestSource
-{
-    /**
-     * Calculates the DIGEST checksum for a classpath resource. Because this is expensive, the value
-     * may be cached.
-     * 
-     * @param resourcePath
-     *            the classpath resource, which should start with a leading slash.
-     * @return A string representation of the digest for the provided resource path.
-     * @throws ApplicationRuntimeException
-     *             if the resource does not exist, or there is an error calculating the checksum.
-     */
-
-    String getDigestForResource(String resourcePath);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceDigestSourceImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceDigestSourceImpl.java
deleted file mode 100644
index 9b2b4df..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceDigestSourceImpl.java
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.security.MessageDigest;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.commons.codec.binary.Hex;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.util.IOUtils;
-import org.apache.tapestry.event.ReportStatusEvent;
-import org.apache.tapestry.event.ReportStatusListener;
-import org.apache.tapestry.event.ResetEventListener;
-
-/**
- * Implementation of {@link org.apache.tapestry.asset.ResourceDigestSource}&nbsp;that calculates an
- * DIGEST checksum digest and converts it to a string of hex digits.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ResourceDigestSourceImpl implements ResourceDigestSource, ResetEventListener,
-        ReportStatusListener
-{
-    private static final int BUFFER_SIZE = 5000;
-
-    private String _serviceId;
-
-    private ClassResolver _classResolver;
-
-    /**
-     * Map keyed on resource path of DIGEST checksum (as a string).
-     */
-
-    private final Map _cache = new HashMap();
-
-    public synchronized String getDigestForResource(String resourcePath)
-    {
-        if (resourcePath == null) return null;
-        
-        String result = (String) _cache.get(resourcePath);
-
-        if (result == null)
-        {
-            result = computeMD5(resourcePath);
-            _cache.put(resourcePath, result);
-        }
-
-        return result;
-    }
-
-    public synchronized void resetEventDidOccur()
-    {
-        _cache.clear();
-    }
-
-    public synchronized void reportStatus(ReportStatusEvent event)
-    {
-        event.title(_serviceId);
-        event.property("resource count", _cache.size());
-
-        Iterator i = _cache.entrySet().iterator();
-
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            event.property(entry.getKey().toString(), entry.getValue());
-        }
-    }
-
-    private String computeMD5(String resourcePath)
-    {
-        URL url = _classResolver.getResource(resourcePath);
-
-        if (url == null)
-            throw new ApplicationRuntimeException(AssetMessages.noSuchResource(resourcePath));
-
-        InputStream stream = null;
-
-        try
-        {
-            MessageDigest digest = MessageDigest.getInstance("MD5");
-
-            stream = new BufferedInputStream(url.openStream());
-
-            digestStream(digest, stream);
-
-            stream.close();
-            stream = null;
-
-            byte[] bytes = digest.digest();
-            char[] encoded = Hex.encodeHex(bytes);
-
-            return new String(encoded);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(AssetMessages.unableToReadResource(
-                    resourcePath,
-                    ex));
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-        finally
-        {
-            IOUtils.close(stream);
-        }
-    }
-
-    private void digestStream(MessageDigest digest, InputStream stream) throws IOException
-    {
-        byte[] buffer = new byte[BUFFER_SIZE];
-
-        while (true)
-        {
-            int length = stream.read(buffer);
-
-            if (length < 0)
-                return;
-
-            digest.update(buffer, 0, length);
-        }
-    }
-
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-
-    public void setServiceId(String serviceId)
-    {
-        _serviceId = serviceId;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceMatcher.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceMatcher.java
deleted file mode 100644
index 4c5ff44..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceMatcher.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IAsset;
-
-/**
- * Responsible for determining if the path string of a {@link Resource} -
- * typically involving {@link IAsset} resources being examined by the 
- * {@link AssetService} - match the configured resource match strings
- * of this service.
- *
- * <p/>Currently used by {@link AssetService} to enable having unprotected 
- * resources based off of regexp patterns. 
- *
- * @author jkuhnert
- */
-public interface ResourceMatcher {
-
-    /**
-     * Checks for the existance of a resource pattern that matches the incoming
-     * path string.
-     * @param path The path to a resource
-     * @return True if the path is matched against one of the patterns configured
-     *         for this matcher, false otherwise.
-     */
-    
-    boolean containsResource(String path);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceMatcherImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceMatcherImpl.java
deleted file mode 100644
index ac9fe56..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/ResourceMatcherImpl.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.asset;
-
-import java.util.List;
-
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.util.RegexpMatcher;
-
-
-/**
- * Implementation of {@link ResourceMatcher}.
- * 
- */
-public class ResourceMatcherImpl implements ResetEventListener, ResourceMatcher {
-    
-    /** regexp matcher engine. */
-    protected RegexpMatcher _matcher;
-    /** Resource match configuration regexp strings. */
-    protected List _contributions;
-    
-    /** no args constructor. */
-    public ResourceMatcherImpl() { }
-    
-    /**
-     * Invoked by hivemind by default to initialize
-     * service.
-     */
-    public void initializeService() 
-    {
-        _matcher = new RegexpMatcher();
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public synchronized void resetEventDidOccur()
-    {
-        _matcher.clear();
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public boolean containsResource(String path)
-    {
-        if (_contributions == null || _contributions.size() < 1 || path == null)
-            return false;
-        
-        for (int i = 0; i < _contributions.size(); i++) {
-            String pattern = (String)_contributions.get(i);
-            
-            if (_matcher.contains(pattern, path))
-                return true;
-        }
-        
-        return false;
-    }
-    
-    /**
-     * The set of contributed regexp strings that will positively
-     * match incoming path strings for this matcher.
-     * @param contributions
-     */
-    public void setContributions(List contributions)
-    {
-        this._contributions = contributions;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/package.html
deleted file mode 100644
index cae2902..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/asset/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Implementations of {@link org.apache.tapestry.IAsset}, as well as
-the {@link org.apache.tapestry.asset.ExternalResource}, used to handle private assets.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/AbstractBeanInitializer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/AbstractBeanInitializer.java
deleted file mode 100644
index c50dc99..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/AbstractBeanInitializer.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.Tapestry;
-
-/**
- * Base class for initializing a property of a JavaBean.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.5
- */
-
-public abstract class AbstractBeanInitializer extends BaseLocatable implements IBeanInitializer
-{
-    protected String _propertyName;
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    /** @since 3.0 * */
-
-    public void setPropertyName(String propertyName)
-    {
-        _propertyName = propertyName;
-    }
-
-    protected void setBeanProperty(Object bean, Object value)
-    {
-        try
-        {
-            PropertyUtils.write(bean, _propertyName, value);
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            String message = Tapestry.format(
-                    "AbstractBeanInitializer.unable-to-set-property",
-                    _propertyName,
-                    bean,
-                    value);
-
-            throw new ApplicationRuntimeException(message, getLocation(), ex);
-        }
-
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanMessages.java
deleted file mode 100644
index 32d8e0b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanMessages.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.IComponent;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class BeanMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(BeanMessages.class);
-
-    /* defeat instantiation */
-    private BeanMessages() { }
-    
-    static String propertyInitializerName(String propertyName)
-    {
-        return _formatter.format("property-initializer-name", propertyName);
-    }
-
-    static String beanNotDefined(IComponent component, String name)
-    {
-        return _formatter.format("bean-not-defined", component.getExtendedId(), name);
-    }
-
-    static String instantiationError(String name, IComponent component, Class beanClass,
-            Throwable cause)
-    {
-        return _formatter.format("instantiation-error", new Object[]
-        { name, component.getExtendedId(), beanClass.getName(), cause });
-    }
-
-    static String initializationError(IComponent component, String beanName, String propertyName,
-            Throwable cause)
-    {
-        return _formatter.format("initialization-error", new Object[]
-        { propertyName, beanName, component.getExtendedId(), cause });
-    }
-
-    static String missingBeanClass(IComponent component, String beanName, String className,
-            String packageList)
-    {
-        return _formatter.format("missing-bean-class", new Object[]
-        { beanName, component.getExtendedId(), className, packageList });
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanProvider.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanProvider.java
deleted file mode 100644
index 6836095..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanProvider.java
+++ /dev/null
@@ -1,324 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.tapestry.IBeanProvider;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEndRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.services.ClassFinder;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.spec.BeanLifecycle;
-import org.apache.tapestry.spec.IBeanSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Basic implementation of the {@link IBeanProvider} interface.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.4
- */
-
-public class BeanProvider implements IBeanProvider, PageDetachListener, PageEndRenderListener
-{
-    private static final Log LOG = LogFactory.getLog(BeanProvider.class);
-
-    /**
-     * Indicates whether this instance has been registered with its page as a PageDetachListener.
-     * Registration only occurs the first time a bean with lifecycle REQUEST is instantiated.
-     */
-
-    private boolean _registeredForDetach = false;
-
-    /**
-     * Indicates whether this instance has been registered as a render listener with the page.
-     */
-
-    private boolean _registeredForRender = false;
-
-    /**
-     * The component for which beans are being created and tracked.
-     */
-
-    private final IComponent _component;
-
-    /**
-     * Used for instantiating classes.
-     */
-
-    private final ClassResolver _resolver;
-
-    /**
-     * Used for resolving partial class names.
-     */
-
-    private final ClassFinder _classFinder;
-
-    private final String _packageList;
-
-    /**
-     * Map of beans, keyed on name.
-     */
-
-    private Map _beans;
-
-    /**
-     * Set of bean names provided by this provider.
-     * 
-     * @since 2.2
-     */
-
-    private Set _beanNames;
-
-    public BeanProvider(IComponent component)
-    {
-        _component = component;
-
-        Infrastructure infrastructure = component.getPage().getRequestCycle().getInfrastructure();
-
-        _resolver = infrastructure.getClassResolver();
-
-        INamespace namespace = component.getNamespace();
-        _packageList = namespace.getPropertyValue("org.apache.tapestry.bean-class-packages");
-
-        _classFinder = infrastructure.getClassFinder();
-    }
-
-    /** @since 1.0.6 * */
-
-    public Collection getBeanNames()
-    {
-        if (_beanNames == null)
-        {
-            Collection c = _component.getSpecification().getBeanNames();
-
-            if (c == null || c.isEmpty())
-                _beanNames = Collections.EMPTY_SET;
-            else
-                _beanNames = Collections.unmodifiableSet(new HashSet(c));
-        }
-
-        return _beanNames;
-    }
-
-    /**
-     * @since 1.0.5
-     */
-
-    public IComponent getComponent()
-    {
-        return _component;
-    }
-
-    public Object getBean(String name)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("getBean(" + name + ")");
-
-        Object bean = null;
-
-        if (_beans != null)
-            bean = _beans.get(name);
-
-        if (bean != null)
-            return bean;
-
-        IBeanSpecification spec = _component.getSpecification().getBeanSpecification(name);
-
-        if (spec == null)
-            throw new ApplicationRuntimeException(BeanMessages.beanNotDefined(_component, name));
-
-        bean = instantiateBean(name, spec);
-
-        BeanLifecycle lifecycle = spec.getLifecycle();
-
-        if (lifecycle == BeanLifecycle.NONE)
-            return bean;
-
-        if (_beans == null)
-            _beans = new HashMap();
-
-        _beans.put(name, bean);
-
-        // The first time in a request that a REQUEST lifecycle bean is created,
-        // register with the page to be notified at the end of the
-        // request cycle.
-
-        if (lifecycle == BeanLifecycle.REQUEST && !_registeredForDetach)
-        {
-            _component.getPage().addPageDetachListener(this);
-            _registeredForDetach = true;
-        }
-
-        if (lifecycle == BeanLifecycle.RENDER && !_registeredForRender)
-        {
-            _component.getPage().addPageEndRenderListener(this);
-            _registeredForRender = true;
-        }
-
-        // No need to register if a PAGE lifecycle bean; those can stick around
-        // forever.
-
-        return bean;
-    }
-
-    Object instantiateBean(String beanName, IBeanSpecification spec)
-    {
-        String className = spec.getClassName();
-        Object bean = null;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Instantiating instance of " + className);
-
-        Class beanClass = _classFinder.findClass(_packageList, className);
-
-        if (beanClass == null)
-            throw new ApplicationRuntimeException(BeanMessages.missingBeanClass(
-                    _component,
-                    beanName,
-                    className,
-                    _packageList), _component, spec.getLocation(), null);
-
-        // Do it the hard way!
-
-        try
-        {
-            bean = beanClass.newInstance();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(BeanMessages.instantiationError(
-                    beanName,
-                    _component,
-                    beanClass,
-                    ex), _component, spec.getLocation(), ex);
-        }
-
-        // OK, have the bean, have to initialize it.
-
-        List initializers = spec.getInitializers();
-
-        if (initializers == null)
-            return bean;
-
-        Iterator i = initializers.iterator();
-        while (i.hasNext())
-        {
-            IBeanInitializer iz = (IBeanInitializer) i.next();
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Initializing property " + iz.getPropertyName());
-
-            try
-            {
-                iz.setBeanProperty(this, bean);
-            }
-            catch (Exception ex)
-            {
-                throw new ApplicationRuntimeException(BeanMessages.initializationError(
-                        _component,
-                        beanName,
-                        iz.getPropertyName(),
-                        ex), bean, iz.getLocation(), ex);
-
-            }
-        }
-
-        return bean;
-    }
-
-    /**
-     * Removes all beans with the REQUEST lifecycle. Beans with the PAGE lifecycle stick around, and
-     * beans with no lifecycle were never stored in the first place.
-     */
-
-    public void pageDetached(PageEvent event)
-    {
-        removeBeans(BeanLifecycle.REQUEST);
-    }
-
-    /**
-     * Removes any beans with the specified lifecycle.
-     * 
-     * @since 2.2
-     */
-
-    private void removeBeans(BeanLifecycle lifecycle)
-    {
-        if (_beans == null)
-            return;
-
-        IComponentSpecification spec = null;
-
-        Iterator i = _beans.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry e = (Map.Entry) i.next();
-            String name = (String) e.getKey();
-
-            if (spec == null)
-                spec = _component.getSpecification();
-
-            IBeanSpecification s = spec.getBeanSpecification(name);
-
-            if (s.getLifecycle() == lifecycle)
-            {
-                Object bean = e.getValue();
-
-                if (LOG.isDebugEnabled())
-                    LOG.debug("Removing " + lifecycle.getName() + " bean " + name + ": " + bean);
-
-                i.remove();
-            }
-        }
-    }
-
-    /** @since 1.0.8 * */
-
-    public ClassResolver getClassResolver()
-    {
-        return _resolver;
-    }
-
-    /** @since 2.2 * */
-
-    public void pageEndRender(PageEvent event)
-    {
-        removeBeans(BeanLifecycle.RENDER);
-    }
-
-    /** @since 2.2 * */
-
-    public boolean canProvideBean(String name)
-    {
-        return getBeanNames().contains(name);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanProviderPropertyAccessor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanProviderPropertyAccessor.java
deleted file mode 100644
index b9704af..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanProviderPropertyAccessor.java
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import java.util.Map;
-
-import ognl.ObjectPropertyAccessor;
-import ognl.OgnlContext;
-import ognl.OgnlException;
-import ognl.OgnlRuntime;
-import ognl.PropertyAccessor;
-import ognl.enhance.ExpressionCompiler;
-import ognl.enhance.UnsupportedCompilationException;
-
-import org.apache.tapestry.IBeanProvider;
-
-/**
- *  Adapts a {@link org.apache.tapestry.IBeanProvider} to
- *  <a href="http://www.ognl.org">OGNL</a> by exposing the named
- *  beans provided by the provider as read-only properties of
- *  the provider.
- * 
- *  <p>This is registered by {@link org.apache.tapestry.AbstractComponent}.
- *
- *  @author Howard Lewis Ship
- *  @since 2.2
- *
- **/
-
-public class BeanProviderPropertyAccessor extends ObjectPropertyAccessor implements PropertyAccessor
-{
-    /**
-     *  Checks to see if the name matches the name of a bean inside
-     *  the provider and returns that bean if so.
-     *  Otherwise, invokes the super implementation.
-     * 
-     **/
-    
-    public Object getProperty(Map context, Object target, Object name) throws OgnlException
-    {
-        IBeanProvider provider = (IBeanProvider)target;
-        String beanName = (String)name;
-        
-        if (provider.canProvideBean(beanName))
-            return provider.getBean(beanName);
-        
-        return super.getProperty(context, target, name);
-    }
-
-    /**
-     *  Returns true if the name matches a bean provided by the provider.
-     *  Otherwise invokes the super implementation.
-     * 
-     **/
-    
-    public boolean hasGetProperty(Map context, Object target, Object oname) throws OgnlException
-    {
-        IBeanProvider provider = (IBeanProvider)target;
-        String beanName = ((String)oname).replaceAll("\"", "");
-
-        if (provider.canProvideBean(beanName))
-            return true;
-            
-        return super.hasGetProperty(context, target, oname);
-    }
-    
-    public Class getPropertyClass(OgnlContext context, Object target, Object name)
-    {
-        IBeanProvider provider = (IBeanProvider)target;
-        String beanName = ((String)name).replaceAll("\"", "");
-        
-        if (provider.canProvideBean(beanName))
-            return provider.getBean(beanName).getClass();
-        
-        return super.getPropertyClass(context, target, name);
-    }
-    
-    public String getSourceAccessor(OgnlContext context, Object target, Object name)
-    {
-        IBeanProvider provider = (IBeanProvider)target;
-        String beanName = ((String)name).replaceAll("\"", "");
-        
-        if (provider.canProvideBean(beanName)) {
-            
-            Class type = OgnlRuntime.getCompiler().getInterfaceClass(provider.getBean(beanName).getClass());
-            
-            ExpressionCompiler.addCastString(context, "((" + type.getName() + ")");
-            
-            context.setCurrentAccessor(IBeanProvider.class);
-            context.setCurrentType(type);
-            
-            return ".getBean(" + name + "))";
-        }
-        
-        return super.getSourceAccessor(context, target, name);
-    }
-    
-    public String getSourceSetter(OgnlContext context, Object target, Object name)
-    {
-        throw new UnsupportedCompilationException("Can't set beans on IBeanProvider.");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanStrings.properties
deleted file mode 100644
index 0322f37..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BeanStrings.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-property-initializer-name=initializer of property {0}
-bean-not-defined=Component {0} does not define a bean name {1}.
-instantiation-error=Unable to instantiate bean ''{0}'' (for component {1}) as class {2}: {3}
-initialization-error=Error initializing property {0} of bean ''{1}'' (of component {2}): {3}
-missing-bean-class=Unable to instantiate bean ''{0}'' of component {1}: Unable to find class {2} within package list ''{3}''.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BindingBeanInitializer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BindingBeanInitializer.java
deleted file mode 100644
index 5a5ab15..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/BindingBeanInitializer.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IBeanProvider;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.BindingConstants;
-import org.apache.tapestry.binding.BindingSource;
-
-/**
- * An {@link org.apache.tapestry.bean.IBeanInitializer} implementation that uses an
- * {@link org.apache.tapestry.IBinding} to obtain the value which will be assigned to the bean
- * property.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class BindingBeanInitializer extends AbstractBeanInitializer
-{
-    private BindingSource _bindingSource;
-
-    private String _bindingReference;
-
-    /** @since 4.0 */
-    public BindingBeanInitializer(BindingSource source)
-    {
-        Defense.notNull(source, "source");
-
-        _bindingSource = source;
-    }
-
-    /**
-     * @since 4.0
-     */
-    public void setBindingReference(String bindingReference)
-    {
-        _bindingReference = bindingReference;
-    }
-
-    /** @since 4.0 */
-    public String getBindingReference()
-    {
-        return _bindingReference;
-    }
-
-    public void setBeanProperty(IBeanProvider provider, Object bean)
-    {
-        IComponent component = provider.getComponent();
-
-        String description = BeanMessages.propertyInitializerName(_propertyName);
-
-        IBinding binding = _bindingSource.createBinding(
-                component,
-                description,
-                _bindingReference,
-                BindingConstants.OGNL_PREFIX,
-                getLocation());
-
-        Class propertyType = PropertyUtils.getPropertyType(bean, _propertyName);
-
-        Object bindingValue = binding.getObject(propertyType);
-
-        setBeanProperty(bean, bindingValue);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/Default.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/Default.java
deleted file mode 100644
index 56a3fd8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/Default.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.tapestry.IBinding;
-
-/**
- *  A helper bean to assist with providing defaults for unspecified
- *  parameters.    It is initalized
- *  with an {@link IBinding} and a default value.  It's value property
- *  is either the value of the binding, but if the binding is null,
- *  or the binding returns null, the default value is returned.
- *
- *  @author Howard Lewis Ship
- *  @since 1.0.5
- * 
- **/
-
-public class Default
-{
-    private IBinding binding;
-    private Object defaultValue;
-
-    public void resetForPool()
-    {
-        binding = null;
-        defaultValue = null;
-    }
-
-    public void setBinding(IBinding value)
-    {
-        binding = value;
-    }
-
-    public IBinding getBinding()
-    {
-        return binding;
-    }
-
-    public void setDefaultValue(Object value)
-    {
-        defaultValue = value;
-    }
-
-    public Object getDefaultValue()
-    {
-        return defaultValue;
-    }
-
-    /**
-     *  Returns the value of the binding.  However, if the binding is null, or the binding
-     *  returns null, then the defaultValue is returned instead.
-     *
-     **/
-
-    public Object getValue()
-    {
-        if (binding == null)
-            return defaultValue;
-
-        Object value = binding.getObject();
-
-        if (value == null)
-            return defaultValue;
-
-        return value;
-    }
-    
-    /** @since 3.0 **/
-    
-    public void discardFromPool()
-    {
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/EvenOdd.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/EvenOdd.java
deleted file mode 100644
index eea9bd3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/EvenOdd.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-/**
- * Used to emit a stream of alterating string values: "even", "odd", etc. This
- * is often used in the Inspector pages to make the class of a &lt;tr&gt;
- * alternate for presentation reasons.
- * 
- * @author Howard Lewis Ship
- */
-
-public class EvenOdd
-{
-
-    private boolean even = true;
-
-    /**
-     * Returns "even" or "odd". Whatever it returns on one invocation, it will
-     * return the opposite on the next. By default, the first value returned is
-     * "even".
-     */
-
-    public String getNext()
-    {
-        String result = even ? "even" : "odd";
-
-        even = !even;
-
-        return result;
-    }
-
-    public boolean isEven()
-    {
-        return even;
-    }
-
-    /**
-     * Overrides the even flag.
-     */
-
-    public void setEven(boolean value)
-    {
-        even = value;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/IBeanInitializer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/IBeanInitializer.java
deleted file mode 100644
index 5b3c379..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/IBeanInitializer.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.hivemind.LocationHolder;
-import org.apache.tapestry.IBeanProvider;
-
-/**
- *  Interface for a set of classes used to initialize helper beans.
- *
- *  @author Howard Ship
- *  @since 1.0.5
- * 
- **/
-
-public interface IBeanInitializer extends LocationHolder
-{
-    /**
-     *  Invoked by the {@link IBeanProvider} to initialize
-     *  a property of the bean.
-     *
-     **/
-
-    void setBeanProperty(IBeanProvider provider, Object bean);
-
-    /**
-     *  Returns the name of the property this initializer
-     *  will set.
-     *
-     **/
-
-    String getPropertyName();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/LightweightBeanInitializer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/LightweightBeanInitializer.java
deleted file mode 100644
index 03924e2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/LightweightBeanInitializer.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IBeanProvider;
-
-/**
- * Performs "lightweight" initialization of a bean; this is based on a term (and code) from
- * HiveMind, where the settings for a bean's properties are expressed as a single string.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class LightweightBeanInitializer extends BaseLocatable implements IBeanInitializer
-{
-    private final String _initializer;
-
-    public LightweightBeanInitializer(String initializer)
-    {
-        Defense.notNull(initializer, "initializer");
-
-        _initializer = initializer;
-    }
-
-    public void setBeanProperty(IBeanProvider provider, Object bean)
-    {
-        try
-        {
-            PropertyUtils.configureProperties(bean, _initializer);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), getLocation(), ex);
-        }
-    }
-
-    /**
-     * Returns the initializer itself, rather than any single property name.
-     */
-    public String getPropertyName()
-    {
-        return _initializer;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/package.html
deleted file mode 100644
index 28397b8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/bean/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Contains useful helper beans, an implementation of
-the {@link org.apache.tapestry.IBeanProvider} interface, and 
-several interfaces and classes related to initializing helper beans.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AbstractBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AbstractBinding.java
deleted file mode 100644
index 526a091..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AbstractBinding.java
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * Base class for {@link IBinding}implementations.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class AbstractBinding implements IBinding
-{
-    /** @since 4.0 */
-
-    protected final String _description;
-
-    /** @since 4.0 */
-
-    private final ValueConverter _valueConverter;
-
-    /** @since 3.0 */
-
-    private final Location _location;
-
-    /** @since 3.0 */
-
-    protected AbstractBinding(String description, ValueConverter valueConverter, Location location)
-    {
-        Defense.notNull(description, "description");
-        Defense.notNull(valueConverter, "valueConverter");
-
-        _description = description;
-        _valueConverter = valueConverter;
-        _location = location;
-    }
-
-    public Location getLocation()
-    {
-        return _location;
-    }
-
-    /**
-     * Overridden in subclasses that are not invariant.
-     */
-
-    public void setObject(Object value)
-    {
-        throw createReadOnlyBindingException(this);
-    }
-
-    /**
-     * Default implementation: returns true.
-     * 
-     * @since 2.0.3
-     */
-
-    public boolean isInvariant()
-    {
-        return true;
-    }
-
-    public Object getObject(Class type)
-    {
-        Defense.notNull(type, "type");
-
-        Object raw = getObject();
-
-        try
-        {
-            return _valueConverter.coerceValue(raw, type);
-        }
-        catch (Exception ex)
-        {
-            String message = BindingMessages.convertObjectError(this, ex);
-
-            throw new BindingException(message, getComponent(), _location, this, ex);
-        }
-    }
-
-    /**
-     * Returns the component to which this binding is connected; this is currently only used when
-     * building certain exceptions. This implementation returns null.
-     *
-     * @return The {@link org.apache.tapestry.IComponent} object this binding is set against.
-     * @since 4.0
-     */
-
-    public Object getComponent()
-    {
-        return null;
-    }
-
-    /** @since 3.0 */
-
-    protected BindingException createReadOnlyBindingException(IBinding binding)
-    {
-        return new BindingException(BindingMessages.readOnlyBinding(binding), binding);
-    }
-
-    /** @since 4.0 */
-
-    public String getDescription()
-    {
-        return _description;
-    }
-
-    /**
-     * Gets the converter used to coerce binding values in to their target types.
-     *
-     * @return The {@link ValueConverter} being used by this binding.
-     */
-    public ValueConverter getValueConverter()
-    {
-        return _valueConverter;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer();
-        buffer.append(getClass().getName());
-        buffer.append("@");
-        buffer.append(Integer.toHexString(hashCode()));
-        buffer.append("[");
-        buffer.append(_description);
-
-        extendDescription(buffer);
-
-        buffer.append(", location=");
-        buffer.append(_location);
-        buffer.append("]");
-
-        return buffer.toString();
-    }
-
-    /**
-     * Does nothing, subclasses may override to add additional information.
-     */
-    protected void extendDescription(StringBuffer buffer)
-    {
-
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AbstractBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AbstractBindingFactory.java
deleted file mode 100644
index 409fc56..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AbstractBindingFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * Base class for {@link org.apache.tapestry.binding.BindingFactory}s. Manages a
- * {@link #getValueConverter() valueConverter property}, as all binding instances will need such a
- * value injected.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class AbstractBindingFactory implements BindingFactory
-{
-    private ValueConverter _valueConverter;
-
-    public ValueConverter getValueConverter()
-    {
-        return _valueConverter;
-    }
-
-    public void setValueConverter(ValueConverter valueConverter)
-    {
-        _valueConverter = valueConverter;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AssetBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AssetBinding.java
deleted file mode 100644
index 7e9169b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AssetBinding.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * A binding that is connected to an asset provided by a component.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class AssetBinding extends AbstractBinding
-{
-    private final IComponent _component;
-
-    public AssetBinding(String description, ValueConverter valueConverter, Location location,
-            IComponent component, String assetName)
-    {
-        super(assetName, valueConverter, location);
-
-        Defense.notNull(component, "component");
-        Defense.notNull(assetName, "assetName");
-
-        _component = component;
-    }
-
-    public Object getObject()
-    {
-        IAsset result = _component.getAsset(_description);
-
-        if (result == null)
-            throw new BindingException(BindingMessages.missingAsset(_component, _description),
-                    _component, getLocation(), this, null);
-
-        return result;
-    }
-
-    public Object getComponent()
-    {
-        return _component;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AssetBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AssetBindingFactory.java
deleted file mode 100644
index 53dd69c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/AssetBindingFactory.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-
-/**
- * Factory for instances of {@link org.apache.tapestry.binding.AssetBinding}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class AssetBindingFactory extends AbstractBindingFactory
-{
-    public IBinding createBinding(IComponent root, String description, String expression,
-            Location location)
-    {
-        return new AssetBinding(description, getValueConverter(), location, root, expression);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BeanBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BeanBinding.java
deleted file mode 100644
index 5873d7a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BeanBinding.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * Binding whose value is a named bean provided by a component.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class BeanBinding extends AbstractBinding
-{
-    private final IComponent _component;
-
-    private final String _beanName;
-
-    public BeanBinding(String description, ValueConverter valueConverter, Location location,
-            IComponent component, String beanName)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(component, "component");
-        Defense.notNull(beanName, "beanName");
-
-        _component = component;
-        _beanName = beanName;
-    }
-
-    /**
-     * Beans obtained via the binding should *not* be cached by the component because beans may be
-     * discarded inside the {@link org.apache.tapestry.bean.BeanProvider} based on the life cycle of
-     * the bean.  The BeanProvider caches beans as well.
-     */
-
-    public boolean isInvariant()
-    {
-        return false;
-    }
-
-    public Object getComponent()
-    {
-        return _component;
-    }
-
-    public Object getObject()
-    {
-        return _component.getBeans().getBean(_beanName);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BeanBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BeanBindingFactory.java
deleted file mode 100644
index 8930777..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BeanBindingFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class BeanBindingFactory extends AbstractBindingFactory
-{
-
-    public IBinding createBinding(IComponent root, String description, String expression,
-            Location location)
-    {
-        return new BeanBinding(description, getValueConverter(), location, root, expression);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingConstants.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingConstants.java
deleted file mode 100644
index bc9f0b6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingConstants.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-/**
- * Constant values related to bindings.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class BindingConstants
-{
-    /**
-     * Prefix used when the value should be interpreted as an OGNL expression.
-     */
-
-    public static final String OGNL_PREFIX = "ognl";
-
-    /**
-     * Prefix used when the value should be interpeted as a key for a localized message (of the
-     * component's message catalog).
-     */
-    public static final String MESSAGE_PREFIX = "message";
-    
-    /**
-     * Prefix used to ensure that the value is interpreted as a literal
-     * string.
-     * 
-     */
-    
-    public static final String LITERAL_PREFIX = "literal";
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingFactory.java
deleted file mode 100644
index 6aae680..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-
-/**
- * Creates a new instance of {@link org.apache.tapestry.IBinding}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface BindingFactory
-{
-    /**
-     * Creates a new binding instance.
-     * 
-     * @param root
-     *            the component that is the source of properties or messages (or etc.). When the
-     *            path is "evaluated", the root component provides a context.
-     * @param bindingDescription
-     *            The {@link IBinding#getDescription() description} of the binding.
-     * @param expression
-     *            The expression used to get (or update) a value. The interpretation of this
-     *            expression is determined by the type of {@link IBinding} created by this factory.
-     *            In some cases, it is simple the name of an object contained by the root component.
-     *            For the common "ognl:" binding prefix, it is an OGNL expression to be evaluated on
-     *            the root object.
-     * @param location
-     *            The location of the binding, used to report any errors related to the binding, or
-     *            to the component parameter the binding is bound to.
-     *
-     * @return A {@link IBinding} instance for the specific expression given. 
-     */
-    IBinding createBinding(IComponent root, String bindingDescription, String expression,
-            Location location);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingMessages.java
deleted file mode 100644
index 81644e4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingMessages.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class BindingMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(BindingMessages.class);
-
-    /* defeat insantiation */
-    private BindingMessages() { }
-    
-    static String convertObjectError(IBinding binding, Throwable cause)
-    {
-        return _formatter.format("convert-object-error", binding.getDescription(), cause);
-    }
-
-    static String readOnlyBinding(IBinding binding)
-    {
-        return _formatter.format("read-only-binding", binding.getDescription(), binding);
-    }
-
-    static String missingAsset(IComponent component, String assetName)
-    {
-        return _formatter.format("missing-asset", component.getExtendedId(), assetName);
-    }
-
-    static String listenerMethodFailure(IComponent component, String methodName, Throwable cause)
-    {
-        return _formatter.format(
-                "listener-method-failure",
-                methodName,
-                component.getExtendedId(),
-                cause);
-    }
-
-    public static String unknownComponent(IComponent component, String id)
-    {
-        return _formatter.format("unknown-component", id, component);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingSource.java
deleted file mode 100644
index f207f1f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingSource.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.IParameterSpecification;
-
-/**
- * Used to convert a binding string (from a template or a specification) into an instance of
- * {@link IBinding}.
- * 
- * @since 4.0
- */
-public interface BindingSource
-{
-    /**
-     * Creates a new binding. The locator is used to identify the <em>type</em> of binding to
-     * create as well as configure the binding instance. The locator is either a literal value
-     * (resulting in a {@link org.apache.tapestry.binding.LiteralBinding literal binding}) or
-     * consists of prefix and a path, i.e., <code>ognl:myProperty</code>.
-     * <p>
-     * When a prefix exists and is identified, it is used to select the correct
-     * {@link BindingFactory}, and the remainder of the path (i.e., <code>myProperty</code>)
-     * is passed to the factory.  An unrecognized prefix is treated as a literal value
-     * (it is often "javascript:" or "http:", etc.).
-     * 
-     * @param component
-     *          The component for which the binding is created; the component is used
-     *          as a kind of context for certain types of bindings (for example, the root object when
-     *          evaluating OGNL expressions).
-     * @param description
-                {@link IBinding#getDescription() description} for the new binding
-     * @param reference
-     *          The binding reference used to create the binding, possibly including a prefix to define the type.
-     *          If the reference does not include a prefix, then  the defaultBindingType is used as the prefix
-     * @param defaultBindingType
-     *          Binding type to use when no prefix is provided in the reference
-     *          or doesn't match a known binding factory.
-     * @param location
-     *          Location used to report errors in the binding.
-     *
-     * @return A binding instance.
-     */
-    IBinding createBinding(IComponent component, String description, String reference,
-            String defaultBindingType, Location location);
-
-    /**
-     * Just like {@link #createBinding(org.apache.tapestry.IComponent, String, String, String, org.apache.hivemind.Location)} - except
-     * this version takes an additional parameter of type {@link IParameterSpecification} for those bindings that have a matching
-     * parameter.
-     * 
-     * @param component
-     *          The component for which the binding is created; the component is used
-     *          as a kind of context for certain types of bindings (for example, the root object when
-     *          evaluating OGNL expressions).
-     * @param parameter
-     *          Optional argument of the parameter this binding is being bound for - may be null.
-     * @param description
-                {@link IBinding#getDescription() description} for the new binding
-     * @param reference
-     *          The binding reference used to create the binding, possibly including a prefix to define the type.
-     *          If the reference does not include a prefix, then  the defaultBindingType is used as the prefix
-     * @param defaultBindingType
-     *          Binding type to use when no prefix is provided in the reference
-     *          or doesn't match a known binding factory.
-     * @param location
-     *          Location used to report errors in the binding.
-     *
-     * @return A binding instance.
-     */
-    IBinding createBinding(IComponent component, IParameterSpecification parameter, String description, String reference,
-            String defaultBindingType, Location location);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingStrings.properties
deleted file mode 100644
index daa8c8a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/BindingStrings.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-convert-object-error=Error converting value for {0}: {1}
-read-only-binding=Binding with value {0} ({1}) may not be updated.
-missing-asset=Component {0} does not contain an asset named ''{1}''.
-listener-method-failure=Exception invoking listener method {0} of component {1}: {2}
-unknown-component=Component with id {0} not found in container component {1}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdBinding.java
deleted file mode 100644
index 4978579..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdBinding.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * An implementation of Tapestry {@link IBinding} that simplifies 
- * access to a component's clientId.<br/>
- * You can use this binding in order to safely find out the 
- * client-side id that was (or will be) generated for a given 
- * component.
- * 
- * <p/>
- * Here's an example of how to get the client id of a Tapestry component:
- * <code>
- * &lt;span jwcid="@Any" dojoType="myDojoComponent" contentId="clientId:content" /&gt;
- * </code>
- * <p/>
- * The previous code can also be written using the ognl binding:
- * <code>
- * &lt;span jwcid="@Any" dojoType="myDojoComponent" contentId="ognl:components.content.clientId" /&gt;
- * </code>
- * but the clientId binding is more compact and performs much faster.
- */
-public class ClientIdBinding extends AbstractBinding
-{
-    private final IComponent _component;
-
-    private final String _componentId;
-
-    public ClientIdBinding(String description, ValueConverter valueConverter, Location location,
-            IComponent component, String componentId)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(component, "component");
-        Defense.notNull(componentId, "componentId");
-
-        _component = component;
-        _componentId = componentId;
-    }
-
-    public Object getObject()
-    {
-        try
-        {
-            return _component.getComponent(_componentId).getClientId();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), getLocation(), ex);
-        }
-    }
-
-    public Object getComponent()
-    {
-        return _component;
-    }
-        
-    public boolean isInvariant()
-    {
-        // clientId can change even for the same component, so ...
-        return false;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdBindingFactory.java
deleted file mode 100644
index 4d19247..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdBindingFactory.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-
-/**
- * Factory for {@link org.apache.tapestry.binding.ClientIdBinding}instances, which are mapped to
- * the "clientId:" prefix.
- */
-public class ClientIdBindingFactory extends AbstractBindingFactory
-{
-    public IBinding createBinding(IComponent root, String description, String expression,
-            Location location)
-    {
-        return new ClientIdBinding(description, getValueConverter(), location, root, expression);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdListBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdListBinding.java
deleted file mode 100644
index ece62dd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdListBinding.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Binding that is specifcially used to bind against components of type {@link org.apache.tapestry.IDynamicInvoker}
- * and only for the parameter name "updateComponents".
- *
- * <p>
- *  Will take a parameter specification of <code>updateComponents="componentA, componentB"</code> and turn it
- * into the equivalent of a {@link List} containing the result of invoking {@link org.apache.tapestry.IComponent#getClientId()} on
- * each component specified.
- * </p>
- */
-public class ClientIdListBinding extends AbstractBinding {
-
-    private final IComponent _target;
-
-    private final String[] _componentIds;
-    private IComponent[] _targets;
-
-    public ClientIdListBinding(String description, ValueConverter valueConverter,
-                               Location location, IComponent component, String[] componentIds)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(component, "component");
-        Defense.notNull(componentIds, "componentIds");
-
-        _target = component;
-        _componentIds = componentIds;
-        _targets = new IComponent[_componentIds.length];
-    }
-
-    public Object getObject()
-    {
-        try
-        {
-            List clientIds = new ArrayList(_componentIds.length);
-
-            for (int i=0; i < _componentIds.length; i++)
-            {
-                if (_targets[i] == null)
-                {
-                    if (_target.getComponents().containsKey(_componentIds[i]))
-                    {
-                        _targets[i] = _target.getComponent(_componentIds[i]);
-                    } else if (_target.getPage() != null) {
-
-                        _targets[i] = _target.getPage().getComponent(_componentIds[i]);
-                    }
-                    
-                    // if not found we're in trouble
-
-                    if (_targets[i] == null)
-                        throw new ApplicationRuntimeException(BindingMessages.unknownComponent(_target, _componentIds[i]), getLocation(), null);
-                }
-                
-                clientIds.add(_targets[i].getClientId());
-            }
-
-            return clientIds;
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), getLocation(), ex);
-        }
-    }
-
-    public Object getComponent()
-    {
-        return _target;
-    }
-
-    public boolean isInvariant()
-    {
-        return false;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdListBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdListBindingFactory.java
deleted file mode 100644
index 2d000f4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ClientIdListBindingFactory.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-
-import java.util.List;
-
-/**
- * Converts string values to String arrays and hands them off to a {@link ClientIdListBinding} instance.
- */
-public class ClientIdListBindingFactory extends AbstractBindingFactory {
-
-    public IBinding createBinding(IComponent root, String bindingDescription, String expression, Location location)
-    {
-        // convert to String array first
-        List ids = (List) getValueConverter().coerceValue(expression, List.class);
-        String[] clientIds = (String[]) ids.toArray(new String[ids.size()]);
-
-        return new ClientIdListBinding(bindingDescription, getValueConverter(), location, root, clientIds);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ComponentBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ComponentBinding.java
deleted file mode 100644
index 847ce0e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ComponentBinding.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * A binding where the path is the id of a child component.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ComponentBinding extends AbstractBinding
-{
-    private final IComponent _component;
-
-    private final String _componentId;
-
-    public ComponentBinding(String description, ValueConverter valueConverter, Location location,
-            IComponent component, String componentId)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(component, "component");
-        Defense.notNull(componentId, "componentId");
-
-        _component = component;
-        _componentId = componentId;
-    }
-
-    public Object getObject()
-    {
-        try
-        {
-            return _component.getComponent(_componentId);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), getLocation(), ex);
-        }
-    }
-
-    public Object getComponent()
-    {
-        return _component;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ComponentBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ComponentBindingFactory.java
deleted file mode 100644
index 656d863..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ComponentBindingFactory.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-
-/**
- * Factory for {@link org.apache.tapestry.binding.ComponentBinding}instances, which are mapped to
- * the "component:" prefix.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ComponentBindingFactory extends AbstractBindingFactory
-{
-    public IBinding createBinding(IComponent root, String description, String expression,
-            Location location)
-    {
-        return new ComponentBinding(description, getValueConverter(), location, root, expression);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ExpressionBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ExpressionBinding.java
deleted file mode 100644
index 6f7ea23..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ExpressionBinding.java
+++ /dev/null
@@ -1,260 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import ognl.Node;
-import ognl.enhance.ExpressionAccessor;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.ExpressionCache;
-import org.apache.tapestry.services.ExpressionEvaluator;
-
-/**
- * Implements a dynamic binding, based on evaluating an expression using an expression language.
- * Tapestry's default expression language is the <a href="http://www.ognl.org/">Object Graph
- * Navigation Language </a>.
- *
- * @see org.apache.tapestry.services.ExpressionEvaluator
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class ExpressionBinding extends AbstractBinding
-{
-    /**
-     * The root object against which the nested property name is evaluated.
-     */
-
-    private final IComponent _root;
-
-    /**
-     * If true, then the binding is invariant.
-     */
-
-    private boolean _invariant = false;
-
-    /**
-     * Parsed OGNL expression.
-     */
-
-    private Node _parsedExpression;
-
-    /**
-     * Compiled OGNL expression.
-     */
-
-    private ExpressionAccessor _accessor;
-
-    /**
-     * Flag set to true once the binding has initialized.
-     */
-
-    private boolean _initialized;
-
-    /**
-     * @since 4.0
-     */
-
-    private ExpressionEvaluator _evaluator;
-
-    /** @since 4.0 */
-
-    private ExpressionCache _cache;
-
-    /**
-     * Used to detect previous failed attempts at writing values when compiling expressions so
-     * that as many expressions as possible can be fully compiled into their java byte form when
-     * all objects in the expression are available.
-     */
-    private boolean _writeFailed;
-
-    /**
-     * Creates a {@link ExpressionBinding} from the root object and an OGNL expression.
-     *
-     * @param description
-     *          Used by superclass constructor - {@link AbstractBinding#AbstractBinding(String, org.apache.tapestry.coerce.ValueConverter, org.apache.hivemind.Location)}.
-     * @param location
-     *          Used by superclass constructor - {@link AbstractBinding#AbstractBinding(String, org.apache.tapestry.coerce.ValueConverter, org.apache.hivemind.Location)}.
-     * @param valueConverter
-     *          Used by superclass constructor - {@link AbstractBinding#AbstractBinding(String, org.apache.tapestry.coerce.ValueConverter, org.apache.hivemind.Location)}.
-     * @param root
-     *          The object this binding should be resolved against.
-     * @param expression
-     *          The string expression.
-     * @param evaluator
-     *          Evaluator used to parse and run the expression.
-     * @param cache
-     *          Expression cache which does efficient caching of parsed expressions.
-     */
-    public ExpressionBinding(String description, Location location, ValueConverter valueConverter,
-                             IComponent root, String expression, ExpressionEvaluator evaluator,
-                             ExpressionCache cache)
-    {
-        super(expression, valueConverter, location);
-
-        _root = root;
-        _evaluator = evaluator;
-        _cache = cache;
-    }
-
-    /**
-     * Gets the value of the property path, with the assistance of the {@link ExpressionEvaluator}.
-     *
-     * @throws BindingException
-     *             if an exception is thrown accessing the property.
-     */
-
-    public Object getObject()
-    {
-        initialize();
-
-        return resolveExpression();
-    }
-
-    private Object resolveExpression()
-    {
-        try
-        {
-            if (_accessor == null && !_writeFailed)
-            {
-                _parsedExpression = (Node)_cache.getCompiledExpression(_root, _description);
-                _accessor = _parsedExpression.getAccessor();
-            }
-
-            if (_accessor != null)
-                return _evaluator.read(_root, _accessor);
-
-            return _evaluator.readCompiled(_root, _parsedExpression);
-        }
-        catch (Throwable t)
-        {
-            throw new BindingException(t.getMessage(), this, t);
-        }
-    }
-
-    /**
-     * Returns true if the binding is expected to always return the same value.
-     */
-
-    public boolean isInvariant()
-    {
-        initialize();
-
-        return _invariant;
-    }
-
-    /**
-     * Sets up the helper object, but also optimizes the property path and determines if the binding
-     * is invarant.
-     */
-
-    private void initialize()
-    {
-        if (_initialized)
-            return;
-
-        _initialized = true;
-
-        try
-        {
-            _parsedExpression = (Node)_cache.getCompiledExpression(_description);
-            _invariant = _evaluator.isConstant(_description);
-        }
-        catch (Exception ex)
-        {
-            throw new BindingException(ex.getMessage(), this, ex);
-        }
-    }
-
-    /**
-     * Updates the property for the binding to the given value.
-     *
-     * @throws BindingException
-     *             if the property can't be updated (typically due to an security problem, or a
-     *             missing mutator method).
-     */
-
-    public void setObject(Object value)
-    {
-        initialize();
-
-        if (_invariant)
-            throw createReadOnlyBindingException(this);
-
-        try
-        {
-            if (_accessor == null)
-            {
-                _evaluator.writeCompiled(_root, _parsedExpression, value);
-
-                if (!_writeFailed)
-                {    
-                    // re-parse expression as compilation may be possible now that it potentially has a value
-                    try {
-                        _parsedExpression = (Node)_cache.getCompiledExpression(_root, _description);
-
-                        _accessor = _parsedExpression.getAccessor();
-                    } catch (Throwable t) {
-
-                        // ignore re-read failures as they aren't supposed to be happening now anyways
-                        // and a more user friendly version will be available if someone actually calls
-                        // getObject
-
-                        // if writing fails then we're probably screwed...so don't do it again
-                        if (value != null)
-                            _writeFailed = true;
-                    }
-                }
-            } else
-                _evaluator.write(_root, _accessor, value);
-        }
-        catch (Throwable ex)
-        {
-            throw new BindingException(ex.getMessage(), this, ex);
-        }
-    }
-
-    /**
-     * Returns the a String representing the property path. This includes the
-     * {@link IComponent#getExtendedId() extended id}of the root component and the property path
-     * ... once the binding is used, these may change due to optimization of the property path.
-     */
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer();
-
-        buffer.append("ExpressionBinding[");
-        buffer.append(_root.getExtendedId());
-
-        if (_description != null)
-        {
-            buffer.append(' ');
-            buffer.append(_description);
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /** @since 4.0 */
-    public Object getComponent()
-    {
-        return _root;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/HiveMindBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/HiveMindBinding.java
deleted file mode 100644
index 0194fa6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/HiveMindBinding.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.InjectedValueProvider;
-
-/**
- * A binding that accesses a HiveMind object. This is similar to injecting a HiveMind object as a
- * property and referencing that property.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class HiveMindBinding extends AbstractBinding
-{
-    private String _objectReference;
-
-    private InjectedValueProvider _provider;
-
-    public HiveMindBinding(String description, ValueConverter valueConverter, Location location,
-            String objectReference, InjectedValueProvider provider)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(objectReference, "objectReference");
-        Defense.notNull(provider, "provider");
-
-        _objectReference = objectReference;
-        _provider = provider;
-    }
-
-    public Object getObject()
-    {
-        return _provider.obtainValue(_objectReference, getLocation());
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/HiveMindBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/HiveMindBindingFactory.java
deleted file mode 100644
index a4aa9a1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/HiveMindBindingFactory.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.services.InjectedValueProvider;
-
-/**
- * Constructs instances of {@link HiveMindBinding}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class HiveMindBindingFactory extends AbstractBindingFactory
-{
-    private InjectedValueProvider _injectedValueProvider;
-
-    public IBinding createBinding(IComponent root, String bindingDescription, String expression,
-            Location location)
-    {
-        return new HiveMindBinding(bindingDescription, getValueConverter(), location, expression,
-                _injectedValueProvider);
-    }
-
-    public void setInjectedValueProvider(InjectedValueProvider provider)
-    {
-        _injectedValueProvider = provider;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerBindingFactory.java
deleted file mode 100644
index 65eaf6b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerBindingFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.binding;

-

-import org.apache.hivemind.Location;

-import org.apache.tapestry.IBinding;

-import org.apache.tapestry.IComponent;

-

-/**

- * Factory of {@link org.apache.tapestry.binding.ListenerMethodBinding}, mapped to the "listener:"

- * prefix.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class ListenerBindingFactory extends AbstractBindingFactory

-{

-

-    public IBinding createBinding(IComponent root, String description, String expression,

-            Location location)

-    {

-        return new ListenerMethodBinding(description, getValueConverter(), location, root,

-                expression);

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerMethodBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerMethodBinding.java
deleted file mode 100644
index f611b1a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerMethodBinding.java
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ListenerMethodBinding extends AbstractBinding implements IActionListener
-{
-    private final IComponent _component;
-
-    private final String _methodName;
-
-    // We have to defer obtaining the listener until after the page is loaded, because it is
-    // (currently) reliant on the page's engine property to gain access to the
-    // ListenerMapSource. I'd prefer it if this was a final field, resolved by the constructor,
-    // but that will involve injecting the ListenerMapSource into AbstractComponent.
-
-    private IActionListener _listener;
-
-    public ListenerMethodBinding(String description, ValueConverter valueConverter, Location location,
-                                 IComponent component, String methodName)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(component, "component");
-        Defense.notNull(methodName, "methodName");
-
-        _component = component;
-        _methodName = methodName;
-    }
-
-    public Object getComponent()
-    {
-        return _component;
-    }
-
-    /**
-     * Returns this binding object; the binding object delegates to the actual listener. This allows
-     * us to intercept errors and report the location of the binding.
-     */
-    public Object getObject()
-    {
-        return this;
-    }
-
-    public String getMethodName()
-    {
-        return _methodName;
-    }
-
-    public void actionTriggered(IComponent component, IRequestCycle cycle)
-    {
-        try
-        {
-            if (_listener == null)
-                _listener = _component.getListeners().getListener(_methodName);
-
-            _listener.actionTriggered(component, cycle);
-        }
-        catch (PageRedirectException ex)
-        {
-            throw ex;
-        }
-        catch (RedirectException ex)
-        {
-            throw ex;
-        }
-        catch (RenderRewoundException ex)
-        {
-            throw ex;
-        }
-        catch (RuntimeException ex)
-        {
-            throw new BindingException(BindingMessages.listenerMethodFailure(
-              _component,
-              _methodName,
-              ex), _component, getLocation(), this, ex);
-        }
-    }
-
-    protected void extendDescription(StringBuffer buffer)
-    {
-        buffer.append(", component=");
-        buffer.append(_component.getExtendedId());
-        buffer.append(", methodName=");
-        buffer.append(_methodName);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/LiteralBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/LiteralBinding.java
deleted file mode 100644
index 3ece45c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/LiteralBinding.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * Stores a static (invariant) string as the value.
- * 
- * <p>
- * Note: renamed from StaticBinding to LiteralBinding in release 4.0.
- * 
- * @author Howard Lewis Ship
- */
-
-public class LiteralBinding extends AbstractBinding
-{
-    public LiteralBinding(String description, ValueConverter valueConverter,
-                          Location location, String value)
-    {
-        super(value, valueConverter, location);
-    }
-
-    public Object getObject()
-    {
-        return _description;
-    }
-
-    public String toString()
-    {
-        return "StaticBinding[" + _description + "]";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/LiteralBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/LiteralBindingFactory.java
deleted file mode 100644
index f878bde..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/LiteralBindingFactory.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-
-/**
- * Implementation of {@link org.apache.tapestry.binding.BindingFactory}that constructs
- * {@link org.apache.tapestry.binding.LiteralBinding}instances.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class LiteralBindingFactory extends AbstractBindingFactory
-{
-
-    public IBinding createBinding(IComponent root, String description, String expression,
-            Location location)
-    {
-        return new LiteralBinding(description, getValueConverter(), location, expression);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MessageBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MessageBinding.java
deleted file mode 100644
index c9b7c4b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MessageBinding.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * A binding that connects directly to a localized string for a component.
- * <p>
- * Note: Renamed from StringBinding to MessageBinding in release 4.0.
- * 
- * @see IComponent#getMessages()
- * @author Howard Lewis Ship
- * @since 2.0.4
- */
-
-public class MessageBinding extends AbstractBinding
-{
-    private final IComponent _component;
-
-    protected MessageBinding(String description, ValueConverter valueConverter, Location location,
-            IComponent component, String key)
-    {
-        super(key, valueConverter, location);
-
-        Defense.notNull(component, "component");
-        Defense.notNull(key, "key");
-
-        _component = component;
-    }
-
-    public Object getComponent()
-    {
-        return _component;
-    }
-
-    public String getKey()
-    {
-        return _description;
-    }
-
-    /**
-     * Accesses the specified localized string. Never returns null.
-     */
-
-    public Object getObject()
-    {
-        return _component.getMessages().getMessage(_description);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("MessageBinding");
-        buffer.append('[');
-        buffer.append(_component.getExtendedId());
-        buffer.append(' ');
-        buffer.append(_description);
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MessageBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MessageBindingFactory.java
deleted file mode 100644
index 9fb9732..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MessageBindingFactory.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-
-/**
- * Constructs instances of {@link org.apache.tapestry.binding.MessageBinding}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class MessageBindingFactory extends AbstractBindingFactory
-{
-    public IBinding createBinding(IComponent root, String description, String expression,
-            Location location)
-    {
-        return new MessageBinding(description, getValueConverter(), location, root, expression);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MetaBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MetaBinding.java
deleted file mode 100644
index a4d813f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MetaBinding.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.ComponentPropertySource;
-
-
-/**
- * Simple implementation that allows injection / lookup of meta properties.
- */
-public class MetaBinding extends AbstractBinding
-{
-    private final IComponent _component;
-
-    private final String _key;
-
-    private final ComponentPropertySource _propertySource;
-    
-    public MetaBinding(String description, ValueConverter valueConverter, Location location, IComponent component, 
-            ComponentPropertySource propertySource, String key)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(component, "component");
-        Defense.notNull(propertySource, "propertySource");
-        Defense.notNull(key, "key");
-        
-        _component = component;
-        _key = key;
-        _propertySource = propertySource;
-    }
-
-    public Object getObject()
-    {
-        try
-        {
-            return _propertySource.getComponentProperty(_component, _key);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), getLocation(), ex);
-        }
-    }
-    
-    public Object getComponent()
-    {
-        return _component;
-    }
-    
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("MetaBinding");
-        buffer.append('[');
-        buffer.append(_component.getExtendedId());
-        buffer.append(' ');
-        buffer.append(_key);
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MetaBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MetaBindingFactory.java
deleted file mode 100644
index c5ff620..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/MetaBindingFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.services.ComponentPropertySource;
-
-
-/**
- * Implementation that handles meta configured properties.
- */
-public class MetaBindingFactory extends AbstractBindingFactory
-{
-
-    ComponentPropertySource _propertySource;
-    
-    /**
-     * {@inheritDoc}
-     */
-    public IBinding createBinding(IComponent root, String bindingDescription, String expression, Location location)
-    {
-        
-        return new MetaBinding(bindingDescription, getValueConverter(), location, root, _propertySource, expression);
-    }
-
-    /** Injected. */
-    public void setPropertySource(ComponentPropertySource source)
-    {
-        _propertySource = source;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/OGNLBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/OGNLBindingFactory.java
deleted file mode 100644
index c3df1bf..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/OGNLBindingFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.services.ExpressionCache;
-import org.apache.tapestry.services.ExpressionEvaluator;
-
-/**
- * Implementation of {@link org.apache.tapestry.binding.BindingFactory}that creates
- * {@link org.apache.tapestry.binding.ExpressionBinding}instances.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class OGNLBindingFactory extends AbstractBindingFactory
-{
-    private ExpressionEvaluator _expressionEvaluator;
-
-    private ExpressionCache _expressionCache;
-
-    public IBinding createBinding(IComponent root, String description, String expression, Location location)
-    {
-        return new ExpressionBinding(description, location, getValueConverter(), root, expression,
-                _expressionEvaluator, _expressionCache);
-    }
-
-    public void setExpressionCache(ExpressionCache expressionCache)
-    {
-        _expressionCache = expressionCache;
-    }
-
-    public void setExpressionEvaluator(ExpressionEvaluator expressionEvaluator)
-    {
-        _expressionEvaluator = expressionEvaluator;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/StateBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/StateBinding.java
deleted file mode 100644
index 3158a57..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/StateBinding.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.engine.state.ApplicationStateManager;
-
-/**
- * Binding used to efficiently query whether an application state object (visit, global and friends)
- * exists without actually creating it (or creating a session).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class StateBinding extends AbstractBinding
-{
-    private final ApplicationStateManager _applicationStateManager;
-
-    private final String _objectName;
-
-    public StateBinding(String description, ValueConverter valueConverter, Location location,
-            ApplicationStateManager applicationStateManager, String objectName)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(applicationStateManager, "applicationStateManager");
-        Defense.notNull(objectName, "objectName");
-
-        _applicationStateManager = applicationStateManager;
-        _objectName = objectName;
-    }
-
-    /**
-     * Returns false; these ASO objects can be created at any time.
-     */
-    public boolean isInvariant()
-    {
-        return false;
-    }
-
-    public Object getObject()
-    {
-        try
-        {
-            boolean exists = _applicationStateManager.exists(_objectName);
-
-            return exists ? Boolean.TRUE : Boolean.FALSE;
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), getLocation(), ex);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/StateBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/StateBindingFactory.java
deleted file mode 100644
index c1cc214..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/StateBindingFactory.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.engine.state.ApplicationStateManager;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class StateBindingFactory extends AbstractBindingFactory
-{
-    private ApplicationStateManager _applicationStateManager;
-
-    public void setApplicationStateManager(ApplicationStateManager applicationStateManager)
-    {
-        _applicationStateManager = applicationStateManager;
-    }
-
-    public IBinding createBinding(IComponent root, String bindingDescription, String expression,
-            Location location)
-    {
-        return new StateBinding(bindingDescription, getValueConverter(), location,
-                _applicationStateManager, expression);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/package.html
deleted file mode 100644
index 1cdfe67..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/binding/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Implementations of {@link org.apache.tapestry.IBinding}.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/CallbackMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/CallbackMessages.java
deleted file mode 100644
index f5fca84..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/CallbackMessages.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.IComponent;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class CallbackMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(CallbackMessages.class);
-
-    /* defeat instantiation */
-    private CallbackMessages() { }
-    
-    static String pageNotExternal(String pageName)
-    {
-        return _formatter.format("page-not-external", pageName);
-    }
-
-    static String componentNotDirect(IComponent component)
-    {
-        return _formatter.format("component-not-direct", component.getExtendedId());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/CallbackStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/CallbackStrings.properties
deleted file mode 100644
index fffc869..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/CallbackStrings.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-page-not-external=Page {0} does not implement the IExternalPage interface, and may not be used with the external service.
-
-component-not-direct=Component {0} does not implement the IDirect interface.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/DirectCallback.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/DirectCallback.java
deleted file mode 100644
index 62728e5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/DirectCallback.java
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Simple callback for re-invoking a {@link IDirect}&nbsp;trigger.
- * 
- * @author Howard Lewis Ship
- * @since 0.2.9
- */
-
-public class DirectCallback implements ICallback
-{
-    /**
-     * @since 2.0.4
-     */
-
-    private static final long serialVersionUID = -8888847655917503471L;
-
-    private String _pageName;
-
-    private String _componentIdPath;
-
-    private Object[] _parameters;
-
-    /**
-     * Creates a new DirectCallback for the component. The parameters (which may be null) is
-     * retained, not copied.
-     */
-
-    public DirectCallback(IDirect component, Object[] parameters)
-    {
-        Defense.notNull(component, "component");
-
-        _pageName = component.getPage().getPageName();
-        _componentIdPath = component.getIdPath();
-        _parameters = parameters;
-    }
-    
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("DirectCallback[");
-
-        buffer.append(_pageName);
-        buffer.append('/');
-        buffer.append(_componentIdPath);
-
-        if (_parameters != null)
-        {
-            for (int i = 0; i < _parameters.length; i++)
-            {
-                buffer.append(i == 0 ? " " : ", ");
-                buffer.append(_parameters[i]);
-            }
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-
-    }
-
-    /**
-     * Locates the {@link IDirect}component that was previously identified (and whose page and id
-     * path were stored). Invokes {@link IRequestCycle#setListenerParameters(Object[]) (Object[])} to
-     * restore the service parameters, then invokes {@link IDirect#trigger(IRequestCycle)}on the
-     * component.
-     */
-
-    public void performCallback(IRequestCycle cycle)
-    {
-        IPage page = cycle.getPage(_pageName);
-        IComponent component = page.getNestedComponent(_componentIdPath);
-        IDirect direct = null;
-
-        try
-        {
-            direct = (IDirect) component;
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(CallbackMessages.componentNotDirect(component),
-                    component, null, ex);
-        }
-
-        cycle.setListenerParameters(_parameters);
-        direct.trigger(cycle);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/ExternalCallback.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/ExternalCallback.java
deleted file mode 100644
index 969c297..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/ExternalCallback.java
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * A callback for returning to an {@link org.apache.tapestry.IExternalPage}.
- * <p>
- * Example usage of <tt>ExternalCallback</tt>:
- * <p>
- * The External page ensure a user is authenticated in the
- * {@link org.apache.tapestry.IPage#validate(IRequestCycle)} method. If the user is not
- * authenticated, they are redirected to the Login page, after setting a callback in the Login page.
- * <p>
- * The Login page <tt>formSubmit()</tt> {@link org.apache.tapestry.IActionListener} authenticates
- * the user and then invokes {@link ICallback#performCallback(IRequestCycle)} to the External page.
- * 
- * <pre>
- *             public class External extends BasePage implements IExternalPage {
- *            
- *                 private Integer _itemId;
- *           
- *                 public void validate(IRequestCycle cycle) throws RequestCycleException {            
- *                     Visit visit = (Visit) getVisit();
- *                 
- *                     if (!visit.isAuthenticated()) {
- *                         Login login = (Login) cycle.getPage(&quot;Login&quot;);
- *           
- *                         login.setCallback
- *                             (new ExternalCallback(this, cycle.getServiceParameters()));
- *                         
- *                         throw new PageRedirectException(login);
- *                     }            
- *                 }
- *            
- *                 public void activateExternalPage(Object[] params, IRequestCycle cycle)
- *                         throws RequestCycleException {            
- *                     _itemId = (Integer) params[0];
- *                 }
- *             }
- *           
- *             public Login extends BasePage {
- *            
- *                 private ICallback _callback;
- *           
- *                 public void setCallback(ICallback _callback) {
- *                     _callback = callback;
- *                 }
- *           
- *                 public void formSubmit(IRequestCycle cycle) {
- *                     // Authentication code
- *                     ..
- *              
- *                     Visit visit = (Visit) getVisit();
- *           
- *                     visit.setAuthenticated(true);
- *             
- *                     if (_callback != null) {
- *                         _callback.performCallback(cycle);
- *                     }
- *                 }
- *             }    
- * </pre>
- * 
- * @see org.apache.tapestry.IExternalPage
- * @see org.apache.tapestry.engine.ExternalService
- * @author Malcolm Edgar
- * @since 2.3
- */
-
-public class ExternalCallback implements ICallback
-{
-    private static final long serialVersionUID = -6783421589702643930L;
-
-    private String _pageName;
-
-    private Object[] _parameters;
-
-    /**
-     * Creates a new ExternalCallback for the named <tt>IExternalPage</tt>. The parameters (which
-     * may be null) is retained, not copied.
-     */
-
-    public ExternalCallback(String pageName, Object[] parameters)
-    {
-        Defense.notNull(pageName, "pageName");
-
-        _pageName = pageName;
-        _parameters = parameters;
-    }
-
-    /**
-     * Creates a new ExternalCallback for the page. The parameters (which may be null) is retained,
-     * not copied.
-     */
-
-    public ExternalCallback(IExternalPage page, Object[] parameters)
-    {
-        Defense.notNull(page, "page");
-
-        _pageName = page.getPageName();
-        _parameters = parameters;
-    }
-
-    /**
-     * Invokes {@link IRequestCycle#activate(org.apache.tapestry.IPage)} to select the previously identified
-     * <tt>IExternalPage</tt> as the response page and activates the page by invoking
-     * <tt>activateExternalPage()</tt> with the callback parameters and request cycle.
-     */
-
-    public void performCallback(IRequestCycle cycle)
-    {
-        Defense.notNull(cycle, "cycle");
-
-        try
-        {
-            IExternalPage page = (IExternalPage) cycle.getPage(_pageName);
-            
-            cycle.activate(page);
-            
-            page.activateExternalPage(_parameters, cycle);
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(CallbackMessages.pageNotExternal(_pageName), ex);
-        }
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("ExternalCallback[");
-
-        buffer.append(_pageName);
-
-        if (_parameters != null)
-        {
-            for (int i = 0; i < _parameters.length; i++)
-            {
-                if (i == 0)
-                    buffer.append('/');
-                else
-                    buffer.append(", ");
-
-                buffer.append(_parameters[i]);
-            }
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/ICallback.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/ICallback.java
deleted file mode 100644
index 61b1948..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/ICallback.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Defines a callback, an object which is used to invoke or reinvoke a method
- *  on an object or component in a later request cycle.  This is used to
- *  allow certain operations (say, submitting an order) to defer to other processes
- *  (say, logging in and/or registerring).
- *
- *  <p>Callbacks must be {@link Serializable}, to ensure that they can be stored
- *  between request cycles.
- *
- *  @author Howard Lewis Ship
- *  @since 0.2.9
- *
- **/
-
-public interface ICallback extends Serializable
-{
-    /**
-     *  Performs the call back.  Typical implementation will locate a particular
-     *  page or component and invoke a method upon it, or 
-     *  invoke a method on the {@link IRequestCycle cycle}.
-     *
-     **/
-
-    void performCallback(IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/PageCallback.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/PageCallback.java
deleted file mode 100644
index 0e9dcb0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/PageCallback.java
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Simple callback for returning to a page.
- * <p>
- * Example usage of <tt>PageCallback</tt>:
- * <p>
- * The Home page ensure a user is authenticated in the
- * {@link org.apache.tapestry.IPage#validate(IRequestCycle)} method. If the user is not
- * authenticated, they are redirected to the Login page, after setting a callback in the Login page.
- * <p>
- * The Login page <tt>formSubmit()</tt> {@link org.apache.tapestry.IActionListener} authenticates
- * the user and then invokes {@link ICallback#performCallback(IRequestCycle)} to the Home page.
- * 
- * <pre>
- * 
- *  
- *    public class Home extends BasePage {
- *   
- *        public void validate(IRequestCycle cycle) {            
- *            Visit visit = (Visit) getVisit();
- *        
- *            if (!visit.isAuthenticated()) {
- *                Login login = (Login) cycle.getPage(&quot;Login&quot;);
- *  
- *                login.setCallback(new PageCallback(this));
- *                
- *                throw new PageRedirectException(login);
- *            }            
- *        }
- *    }
- *  
- *    public Login extends BasePage {
- *   
- *        private ICallback _callback;
- *  
- *        public void setCallback(ICallback _callback) {
- *            _callback = callback;
- *        }
- *  
- *        public void formSubmit(IRequestCycle cycle) {
- *            // Authentication code
- *            ..
- *     
- *            Visit visit = (Visit) getVisit();
- *  
- *            visit.setAuthenticated(true);
- *    
- *            if (_callback != null) {
- *                _callback.performCallback(cycle);
- *            }
- *        }
- *    }    
- *    
- *  
- * </pre>
- * 
- * @author Howard Lewis Ship
- * @since 0.2.9
- */
-
-public class PageCallback implements ICallback
-{
-    /**
-     * @since 2.0.4
-     */
-
-    private static final long serialVersionUID = -3286806776105690068L;
-
-    private String _pageName;
-
-    public PageCallback(String pageName)
-    {
-        Defense.notNull(pageName, "pageName");
-        _pageName = pageName;
-    }
-
-    public PageCallback(IPage page)
-    {
-        Defense.notNull(page, "page");
-
-        _pageName = page.getPageName();
-    }
-
-    public String toString()
-    {
-        return "PageCallback[" + _pageName + "]";
-    }
-
-    /**
-     * Invokes {@link IRequestCycle#activate(String)} to select the previously identified page as
-     * the response page.
-     */
-
-    public void performCallback(IRequestCycle cycle)
-    {
-        Defense.notNull(cycle, "cycle");
-
-        cycle.activate(_pageName);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/package.html
deleted file mode 100644
index 1b42288..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/callback/package.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Provides implementations of callbacks, objects that encapsulate a server request that is deferred,
-typically to allow a user to login or otherwise authenticate before proceeding with
-some other activity.
-
-<p>In practice, an implementation of {@link org.apache.tapestry.IPage#validate(IRequestCycle)} or
-{@link org.apache.tapestry.IActionListener} will create a callback, and assign it as a
-persistent page property of an application-specific login page.  After the login completes, it 
-can use the callback to return the user to the functionality that was deferred.
-
-<p>Another example use would be to collect billing and shipping information as part of
-an e-commerce site's checkout wizard.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/BooleanArrayToIteratorConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/BooleanArrayToIteratorConverter.java
deleted file mode 100644
index 073c016..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/BooleanArrayToIteratorConverter.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Converts primitive arrays of booleans to a Iterator (of a List of ) Boolean.
- * 
- * @author Laurent ETIEMBLE, Howard M. Lewis Ship
- * @since 4.0
- */
-public final class BooleanArrayToIteratorConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        boolean[] booleans = (boolean[]) value;
-
-        List list = new ArrayList(booleans.length);
-
-        for (int i = 0; i < booleans.length; i++)
-        {
-            boolean b = booleans[i];
-
-            list.add(b ? Boolean.TRUE : Boolean.FALSE);
-        }
-
-        return list.iterator();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/BooleanArrayToListConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/BooleanArrayToListConverter.java
deleted file mode 100644
index 5446630..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/BooleanArrayToListConverter.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Converts primitive arrays of booleans to a Iterator (of a List of ) Boolean.
- * 
- * @author Laurent ETIEMBLE, Howard M. Lewis Ship
- * @since 4.0
- */
-public final class BooleanArrayToListConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        boolean[] booleans = (boolean[]) value;
-
-        List list = new ArrayList(booleans.length);
-
-        for (int i = 0; i < booleans.length; i++)
-        {
-            boolean b = booleans[i];
-
-            list.add(b ? Boolean.TRUE : Boolean.FALSE);
-        }
-
-        return list;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CharArrayToIteratorConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CharArrayToIteratorConverter.java
deleted file mode 100644
index 7f1850f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CharArrayToIteratorConverter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Laurent ETIEMBLE, Howard M. Lewis Ship
- * @since 4.0
- */
-public final class CharArrayToIteratorConverter implements TypeConverter
-{
-    public Object convertValue(Object value)
-    {
-        char[] characters = (char[]) value;
-
-        List list = new ArrayList(characters.length);
-
-        for (int i = 0; i < characters.length; i++)
-        {
-            list.add(new Character(characters[i]));
-        }
-
-        return list.iterator();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CharArrayToListConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CharArrayToListConverter.java
deleted file mode 100644
index d9cec25..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CharArrayToListConverter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Laurent ETIEMBLE, Howard M. Lewis Ship
- * @since 4.0
- */
-public final class CharArrayToListConverter implements TypeConverter
-{
-    public Object convertValue(Object value)
-    {
-        char[] characters = (char[]) value;
-
-        List list = new ArrayList(characters.length);
-
-        for (int i = 0; i < characters.length; i++)
-        {
-            list.add(new Character(characters[i]));
-        }
-
-        return list;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CoerceMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CoerceMessages.java
deleted file mode 100644
index c4a4f34..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CoerceMessages.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.hivemind.service.ClassFabUtils;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class CoerceMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(CoerceMessages.class);
-
-    /* defeat instantiation */
-    private CoerceMessages() { }
-    
-    static String noConverter(Class desiredType)
-    {
-        return _formatter.format("no-converter", ClassFabUtils.getJavaClassName(desiredType));
-    }
-    
-    static String noConverter(Class fromType, Class desiredType)
-    {
-        return _formatter.format("no-converter-from", ClassFabUtils.getJavaClassName(desiredType),
-                ClassFabUtils.getJavaClassName(fromType));
-    }
-    
-    static String stringToNumberConversionError(String value, Class targetClass, Throwable cause)
-    {
-        return _formatter.format(
-                "string-to-number-conversion-error",
-                value,
-                targetClass.getName(),
-                cause);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CoerceStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CoerceStrings.properties
deleted file mode 100644
index 1931706..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CoerceStrings.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-no-converter=No type converter for type {0} is available.
-no-converter-from=Unable to convert from type {1} to {0}. No type converter for {1} is available.
-string-to-number-conversion-error=Unable to convert ''{0}'' to an instance of {1}: {2}
-
-
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CollectionToBooleanConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CollectionToBooleanConverter.java
deleted file mode 100644
index d40dc73..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CollectionToBooleanConverter.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Collection;
-
-/**
- * Converts from {@link java.util.Collection}to Boolean; a non-empty collection is true.
- * 
- * @author Howard M. Lewis Ship
- */
-public final class CollectionToBooleanConverter implements TypeConverter
-{
-    public Object convertValue(Object value)
-    {
-        Collection c = (Collection) value;
-
-        return c.isEmpty() ? Boolean.FALSE : Boolean.TRUE;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CollectionToIteratorConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CollectionToIteratorConverter.java
deleted file mode 100644
index 6296a4b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CollectionToIteratorConverter.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Collection;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class CollectionToIteratorConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        Collection c = (Collection) value;
-
-        return c.iterator();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CollectionToListConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CollectionToListConverter.java
deleted file mode 100644
index 901e16f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/CollectionToListConverter.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class CollectionToListConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        Collection c = (Collection) value;
-        return new ArrayList(c);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/IntArrayToIteratorConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/IntArrayToIteratorConverter.java
deleted file mode 100644
index 2769bac..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/IntArrayToIteratorConverter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Laurent ETIEMBLE, Howard M. Lewis Ship
- * @since 4.0
- */
-public final class IntArrayToIteratorConverter implements TypeConverter
-{
-    public Object convertValue(Object value)
-    {
-        int[] values = (int[]) value;
-
-        List list = new ArrayList(values.length);
-
-        for (int i = 0; i < values.length; i++)
-        {
-            list.add(new Integer(values[i]));
-        }
-
-        return list.iterator();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/IntArrayToListConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/IntArrayToListConverter.java
deleted file mode 100644
index 95a123d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/IntArrayToListConverter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Laurent ETIEMBLE, Howard M. Lewis Ship
- * @since 4.0
- */
-public final class IntArrayToListConverter implements TypeConverter
-{
-    public Object convertValue(Object value)
-    {
-        int[] values = (int[]) value;
-
-        List list = new ArrayList(values.length);
-
-        for (int i = 0; i < values.length; i++)
-        {
-            list.add(new Integer(values[i]));
-        }
-
-        return list;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/IteratorToListConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/IteratorToListConverter.java
deleted file mode 100644
index 4b00ae9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/IteratorToListConverter.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * @author Mindbridge
- * @since 4.0
- */
-public final class IteratorToListConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        Iterator it = (Iterator) value;
-        List list = new ArrayList();
-        while (it.hasNext())
-            list.add(it.next());
-        return list;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/MapToBooleanConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/MapToBooleanConverter.java
deleted file mode 100644
index e0db762..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/MapToBooleanConverter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Map;
-
-/**
- * Converts a Map to a Boolean; a non-empty Map is true.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class MapToBooleanConverter implements TypeConverter
-{
-    public Object convertValue(Object value)
-    {
-        Map map = (Map) value;
-
-        return map.isEmpty() ? Boolean.FALSE : Boolean.TRUE;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NullToBooleanConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NullToBooleanConverter.java
deleted file mode 100644
index cbf7f75..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NullToBooleanConverter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-/**
- * Converter from null to Boolean; always false.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public  final class NullToBooleanConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        return Boolean.FALSE;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NullToIteratorConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NullToIteratorConverter.java
deleted file mode 100644
index f231ca9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NullToIteratorConverter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Collections;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class NullToIteratorConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        return Collections.EMPTY_LIST.iterator();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NullToListConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NullToListConverter.java
deleted file mode 100644
index e7ad8ba..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NullToListConverter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Collections;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class NullToListConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        return Collections.EMPTY_LIST;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NumberToBooleanConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NumberToBooleanConverter.java
deleted file mode 100644
index 07c673f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/NumberToBooleanConverter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-/**
- * Converts an arbitrary number to a boolean; uses the long value of the number and evaluates to
- * true unless the value is zero.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class NumberToBooleanConverter implements TypeConverter
-{
-    public Object convertValue(Object value)
-    {
-        Number n = (Number) value;
-
-        return n.longValue() == 0 ? Boolean.FALSE : Boolean.TRUE;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectArrayToIteratorConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectArrayToIteratorConverter.java
deleted file mode 100644
index dfc0434..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectArrayToIteratorConverter.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ObjectArrayToIteratorConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        Object[] a = (Object[]) value;
-
-        List l = Arrays.asList(a);
-
-        return l.iterator();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectArrayToListConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectArrayToListConverter.java
deleted file mode 100644
index a1c6c5d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectArrayToListConverter.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class ObjectArrayToListConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        Object[] a = (Object[]) value;
-
-        List l = Arrays.asList(a);
-
-        return l;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToBooleanConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToBooleanConverter.java
deleted file mode 100644
index f24702c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToBooleanConverter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-/** 
- * Converts from Object to Boolean. Any non-null object (that doesn't match another converter)
- * is considered true. 
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class ObjectToBooleanConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        return Boolean.TRUE;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToIteratorConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToIteratorConverter.java
deleted file mode 100644
index e931755..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToIteratorConverter.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Collections;
-
-/** 
- * Converts a lone object into an Iterator over a list of the one object.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class ObjectToIteratorConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        return Collections.singletonList(value).iterator();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToListConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToListConverter.java
deleted file mode 100644
index 3f79d35..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToListConverter.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Collections;
-
-/** 
- * Converts a lone object into an Iterator over a list of the one object.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class ObjectToListConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        return Collections.singletonList(value);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToStringConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToStringConverter.java
deleted file mode 100644
index 5635bba..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ObjectToStringConverter.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class ObjectToStringConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        return value == null ? null : value.toString();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringConvertedPropertySelectionModel.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringConvertedPropertySelectionModel.java
deleted file mode 100644
index a7d5940..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringConvertedPropertySelectionModel.java
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.coerce;

-

-import java.util.ArrayList;

-import java.util.List;

-

-import org.apache.hivemind.util.Defense;

-import org.apache.tapestry.form.IPropertySelectionModel;

-

-/**

- * {@link org.apache.tapestry.form.IPropertySelectionModel} created from a comma-seperated string by

- * {@link org.apache.tapestry.coerce.StringToPropertySelectionModelConverter}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public final class StringConvertedPropertySelectionModel implements IPropertySelectionModel

-{

-    /**

-     * Entry.

-     * @author Howard Lewis Ship

-     */

-    private static class Entry

-    {

-        String _label;

-

-        String _value;

-

-        Entry(String term)

-        {

-            Defense.notNull(term, "term");

-

-            int equalx = term.indexOf('=');

-

-            if (equalx < 0)

-            {

-                _label = term.trim();

-                _value = _label;

-            }

-            else

-            {

-                _label = term.substring(0, equalx).trim();

-                _value = term.substring(equalx + 1).trim();

-            }

-        }

-    }

-

-    private final List _entries;

-

-    public StringConvertedPropertySelectionModel(String[] terms)

-    {

-        Defense.notNull(terms, "terms");

-

-        _entries = new ArrayList(terms.length);

-

-        for (int i = 0; i < terms.length; i++)

-        {

-            _entries.add(new Entry(terms[i]));

-        }

-    }

-

-    public int getOptionCount()

-    {

-        return _entries.size();

-    }

-

-    private Entry getEntry(int index)

-    {

-        return (Entry) _entries.get(index);

-    }

-

-    public Object getOption(int index)

-    {

-        return getValue(index);

-    }

-

-    public String getLabel(int index)

-    {

-        return getEntry(index)._label;

-    }

-

-    public String getValue(int index)

-    {

-        return getEntry(index)._value;

-    }

-

-    public boolean isDisabled(int index)

-    {

-        return false;

-    }

-    

-    public Object translateValue(String value)

-    {

-        // Values are the same on the client and the server, so no translation needed.

-        return value;

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringToBooleanConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringToBooleanConverter.java
deleted file mode 100644
index e188b27..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringToBooleanConverter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import org.apache.hivemind.HiveMind;
-
-/**
- * Converts a String to a Boolean. Strings that do contain non-whitespace are considered true. As a
- * special case, the string "false" evaluates to false (this allow boolean component parameters to
- * be bound to "false" instead of "ognl:false" and still operate as expected).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class StringToBooleanConverter implements TypeConverter
-{
-
-    public Object convertValue(Object value)
-    {
-        String s = (String) value;
-
-        boolean b = HiveMind.isNonBlank(s) && !s.equals("false");
-
-        // JDK 1.4 has a Boolean.valueOf(), but we're trying for 1.3 compatibility
-
-        return b ? Boolean.TRUE : Boolean.FALSE;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringToListConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringToListConverter.java
deleted file mode 100644
index e28c7a9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringToListConverter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright Oct 1, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.coerce;
-
-import org.apache.tapestry.TapestryUtils;
-
-import java.util.Arrays;
-import java.util.Collection;
-
-
-/**
- * Converts String values into {@link Collection} instances. String values can 
- * be a single "string" or multiple strings delimited by a "," comma.
- */
-public final class StringToListConverter implements TypeConverter
-{
-    /** 
-     * {@inheritDoc}
-     */
-    public Object convertValue(Object value)
-    {
-        String input = (String)value;
-        
-        String[] values = TapestryUtils.split(input);
-        
-        return Arrays.asList(values);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringToPropertySelectionModelConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringToPropertySelectionModelConverter.java
deleted file mode 100644
index 7bf462b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/StringToPropertySelectionModelConverter.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.coerce;

-

-import org.apache.tapestry.TapestryUtils;

-

-/**

- * Converts a string to a {@link org.apache.tapestry.form.IPropertySelectionModel}. The string is

- * broken apart at commas into terms. Each term consists of a label (displayed to the user) and a

- * value (used as a client-side value and as the server-side property) seperated by an equals sign;

- * if the equals sign is omitted, then the value is the same as the label.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public final class StringToPropertySelectionModelConverter implements TypeConverter

-{

-    public Object convertValue(Object value)

-    {

-        String input = (String) value;

-

-        String[] terms = TapestryUtils.split(input);

-

-        return new StringConvertedPropertySelectionModel(terms);

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/TypeConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/TypeConverter.java
deleted file mode 100644
index 5214de0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/TypeConverter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-/** 
- * Converts a value to a specific (implicit) type.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface TypeConverter
-{
-    /**
-     * Converts the value.
-     * 
-     * @param value the value to be converted (which may be null)
-     * @return the value converted to a specific type; different implementations of TypeConverter
-     * will return different types.
-     * @throws org.apache.hivemind.ApplicationRuntimeException if the value can not be converted
-     */
-    Object convertValue(Object value);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/TypeConverterContribution.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/TypeConverterContribution.java
deleted file mode 100644
index 572abe6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/TypeConverterContribution.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-/**
- * Contribution to different {@link org.apache.tapestry.coerce.TypeConverter}service's
- * configuration points.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class TypeConverterContribution
-{
-    private TypeConverter _converter;
-
-    private Class _subjectClass;
-
-    public TypeConverter getConverter()
-    {
-        return _converter;
-    }
-
-    public Class getSubjectClass()
-    {
-        return _subjectClass;
-    }
-
-    public void setConverter(TypeConverter converter)
-    {
-        _converter = converter;
-    }
-
-    public void setSubjectClass(Class subjectClass)
-    {
-        _subjectClass = subjectClass;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/TypeConverterWrapper.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/TypeConverterWrapper.java
deleted file mode 100644
index 4f22fdf..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/TypeConverterWrapper.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.hivemind.lib.util.StrategyRegistry;
-import org.apache.hivemind.lib.util.StrategyRegistryImpl;
-
-/**
- * A service implementation that works around an
- * {@link org.apache.hivemind.lib.util.StrategyRegistry}. The registry is contructed from a
- * configuration that follows the <code>tapestry.coerce.Converters</code> schema (a List of
- * {@link org.apache.tapestry.coerce.TypeConverterContribution}plus an additional converter for
- * nulls.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class TypeConverterWrapper implements TypeConverter
-{
-    private StrategyRegistry _registry = new StrategyRegistryImpl();
-
-    private List _contributions;
-
-    private TypeConverter _nullConverter;
-
-    public void initializeService()
-    {
-        Iterator i = _contributions.iterator();
-
-        while (i.hasNext())
-        {
-            TypeConverterContribution c = (TypeConverterContribution) i.next();
-
-            _registry.register(c.getSubjectClass(), c.getConverter());
-        }
-    }
-
-    public Object convertValue(Object value)
-    {
-        if (value == null)
-        {
-            if (_nullConverter == null)
-                return null;
-
-            return _nullConverter.convertValue(null);
-        }
-
-        TypeConverter delegate = (TypeConverter) _registry.getStrategy(value.getClass());
-
-        return delegate.convertValue(value);
-    }
-
-    /**
-     * Sets the List of {@link org.apache.tapestry.coerce.TypeConverterContribution}s.
-     */
-
-    public void setContributions(List contributions)
-    {
-        _contributions = contributions;
-    }
-
-    /**
-     * Sets the converter used to convert null.
-     */
-
-    public void setNullConverter(TypeConverter nullConverter)
-    {
-        _nullConverter = nullConverter;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ValueConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ValueConverter.java
deleted file mode 100644
index b24d781..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ValueConverter.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-/**
- * Converts a value (possibly null) to an alternate data type; typically from String to boolean or a
- * number type.
- * <p>
- * Typically, a ValueConverter will select a particular
- * {@link org.apache.tapestry.coerce.TypeConverter}to perform the conversion. The
- * {@link org.apache.tapestry.coerce.ValueConverterImpl}implementation also makes use of built-in
- * {@link java.beans.PropertyEditor}s.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ValueConverter
-{
-    /**
-     * Performs a conversion of a value to a particular type.
-     * 
-     * @param value
-     *            The value to be converted (may be null)
-     * @param desiredType
-     *            the type that will be converted to
-     * @returns the value converted to the indicated type. May return the input value if it is
-     *          already assignable to the desiredType.
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the value can not be converted
-     */
-    Object coerceValue(Object value, Class desiredType);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ValueConverterImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ValueConverterImpl.java
deleted file mode 100644
index 64d9a6e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/ValueConverterImpl.java
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.ConstructorUtils;
-import org.apache.hivemind.util.Defense;
-
-import java.beans.PropertyEditor;
-import java.beans.PropertyEditorManager;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Implementation of {@link org.apache.tapestry.coerce.ValueConverter}. Selects an appropriate type
- * converter and delegates to it.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ValueConverterImpl implements ValueConverter
-{
-    /** List of {@link org.apache.tapestry.coerce.TypeConverterContribution}. */
-
-    public List _contributions;
-    
-    private Map _converterMap = new HashMap();
-
-    private Map _primitiveToWrapper = new HashMap();
-
-    private Map _wrapperToPrimitive = new HashMap();
-
-    {
-        store(boolean.class, Boolean.class);
-        store(byte.class, Byte.class);
-        store(short.class, Short.class);
-        store(char.class, Character.class);
-        store(int.class, Integer.class);
-        store(long.class, Long.class);
-        store(float.class, Float.class);
-        store(double.class, Double.class);
-    }
-
-    private void store(Class primitive, Class wrapper)
-    {
-        _primitiveToWrapper.put(primitive, wrapper);
-
-        _wrapperToPrimitive.put(wrapper, primitive);
-    }
-
-    public void initializeService()
-    {
-        Iterator i = _contributions.iterator();
-        while (i.hasNext())
-        {
-            TypeConverterContribution c = (TypeConverterContribution) i.next();
-
-            _converterMap.put(c.getSubjectClass(), c.getConverter());
-        }
-    }
-
-    public Object coerceValue(Object value, Class desiredType)
-    {
-        Defense.notNull(desiredType, "desiredType");
-
-        Class effectiveType = convertType(desiredType);
-
-        // Already the correct type? Go no further!
-
-        if (value != null && effectiveType.isAssignableFrom(value.getClass()))
-            return value;
-        
-        Object result = convertNumberToNumber(value, effectiveType);
-
-        if (result != null)
-            return result;
-
-        result = convertUsingPropertyEditor(value, effectiveType);
-
-        if (result != null)
-            return result;
-
-        TypeConverter converter = (TypeConverter) _converterMap.get(effectiveType);
-
-        // null value and no converter for the given type? Just return null.
-
-        if (value == null && converter == null)
-            return null;
-
-        if (converter == null)
-            throw new ApplicationRuntimeException(CoerceMessages.noConverter(value.getClass(), effectiveType));
-
-        return converter.convertValue(value);
-    }
-
-    /**
-     * Attempts to use {@link java.beans.PropertyEditor}to perform a conversion from a string to a
-     * numeric type. Returns null if no property editor can be found.
-     * 
-     * @param value
-     *            The value to convert
-     * @param targetType
-     *            The type to convert to (must be a wrapper type, not a primitive type)
-     */
-
-    private Number convertUsingPropertyEditor(Object value, Class targetType)
-    {
-        // Convert from wrapper type back to primitive type, because
-        // PropertyEditorManager expects primitive types not
-        // wrapper types.
-
-        if (value == null || value.getClass() != String.class
-                || !Number.class.isAssignableFrom(targetType))
-            return null;
-
-        Class primitiveType = (Class) _wrapperToPrimitive.get(targetType);
-
-        // Note a primitive type.
-
-        if (primitiveType == null)
-            return null;
-
-        // Looks like a conversion from String to Number, let's see.
-
-        PropertyEditor editor = PropertyEditorManager.findEditor(primitiveType);
-
-        // This should not happen, since we've filtered down to just the
-        // primitive types that do have property editors.
-
-        if (editor == null)
-            return null;
-
-        String text = (String) value;
-
-        try
-        {
-            editor.setAsText(text);
-
-            return (Number) editor.getValue();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(CoerceMessages.stringToNumberConversionError(
-                    text,
-                    targetType,
-                    ex), ex);
-        }
-
-    }
-
-    private Number convertNumberToNumber(Object value, Class targetType)
-    {
-        if (value == null || !Number.class.isAssignableFrom(value.getClass())
-                || !Number.class.isAssignableFrom(targetType))
-            return null;
-
-        String valueAsString = value.toString();
-
-        return (Number) ConstructorUtils.invokeConstructor(targetType, new Object[] { valueAsString });
-    }
-
-    private Class convertType(Class possiblePrimitiveType)
-    {
-        Class wrapperType = (Class) _primitiveToWrapper.get(possiblePrimitiveType);
-
-        return wrapperType == null ? possiblePrimitiveType : wrapperType;
-    }
-
-    public void setContributions(List contributions)
-    {
-        _contributions = contributions;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/package.html
deleted file mode 100644
index 639f71b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/coerce/package.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Object conversion classes that deal with serializing / deserializing different
-types of data.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Any.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Any.java
deleted file mode 100644
index cbcb1a2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Any.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * A component that can substitute for any HTML element. [<a
- * href="../../../../../ComponentReference/Any.html">Component Reference</a>]
- */
-
-public abstract class Any extends AbstractComponent
-{
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String element = isParameterBound("element") ? getElement() : getTemplateTagName();
-
-        boolean rewinding = cycle.isRewinding();
-
-        if (!rewinding)
-        {
-            writer.begin(element);
-
-            renderInformalParameters(writer, cycle);
-
-            if (getId() != null && !isParameterBound("id"))
-                renderIdAttribute(writer, cycle);
-        }
-
-        renderBody(writer, cycle);
-
-        if (!rewinding)
-        {
-            writer.end();
-        }
-    }
-
-    public abstract String getElement();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Any.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Any.jwc
deleted file mode 100644
index 1f1a564..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Any.jwc
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<component-specification class="org.apache.tapestry.components.Any">
-
-  <description>
-  Dynamically emulates any element, including attributes (provided as
-  informal parameters).
-  </description>
-  
-  <parameter name="element" >
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Block.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Block.java
deleted file mode 100644
index 37a0077..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Block.java
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Prevents its contents from being rendered until triggered by an {@link RenderBlock} component. [<a
- * href="../../../../../ComponentReference/Block.html">Component Reference</a>]
- * <p>
- * Block and {@link RenderBlock} are used to build a certain class of complicated component that
- * can't be assembled using the normal wrapping containment. Such a super component would have two
- * or more sections that need to be supplied by the containing page (or component).
- * <p>
- * Using Blocks, the blocks can be provided as parameters to the super component.
- * <p>
- * The invoker property gives the components inside the block access to the component (typically an
- * {@link RenderBlock}) that rendered the block. More often, the {@link #getParameter(String)}
- * method is used to get parameters <em>of the invoking component</em>.
- * 
- * @author Howard Lewis Ship
- * @since 0.2.9
- */
-
-public abstract class Block extends AbstractComponent
-{
-    private IComponent _invoker;
-
-    /**
-     * Provides access to the invoking component's parameters.
-     * 
-     * @since 4.0
-     */
-
-    public Object getParameter(String name)
-    {
-        return _invoker.getBinding(name).getObject();
-    }
-
-    public void renderForComponent(IMarkupWriter writer, IRequestCycle cycle, IComponent invoker)
-    {
-        Defense.notNull(invoker, "invoker");
-
-        IComponent oldInvoker = _invoker;
-
-        try
-        {
-            _invoker = invoker;
-            renderBody(writer, cycle);
-        }
-        finally
-        {
-            _invoker = oldInvoker;
-
-        }
-    }
-
-    /**
-     * Does nothing; the idea of a Block is to defer the rendering of the body of the block until an
-     * {@link RenderBlock} forces it out.
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // Nothing!
-    }
-
-    /**
-     * Returns the object which invoked this Block's
-     * {@link #renderForComponent(IMarkupWriter, IRequestCycle, IComponent)} method. This is often
-     * used to access the informal parameters of a {@link RenderBlock} component.
-     * 
-     * @since 4.0
-     */
-    public IComponent getInvoker()
-    {
-        return _invoker;
-    }
-
-    /**
-     * Used for testing only.
-     * 
-     * @since 4.0
-     */
-
-    void setInvoker(IComponent invoker)
-    {
-        _invoker = invoker;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Block.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Block.jwc
deleted file mode 100644
index da04c75..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Block.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.components.Block" allow-informal-parameters="no">
-	<description>
-	A block of dynamic content.  Blocks don't render until a RenderBlock component
-	triggers them.
-	</description>
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/BlockRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/BlockRenderer.java
deleted file mode 100644
index b5d85e1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/BlockRenderer.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * An implementation of IRender that renders a Block component.
- * <p>
- * The BlockRenderer allows the contents of a {@link Block} to be rendered via
- * {@link IRender}. It can be used in cases when an {@link IRender} object is
- * required as an argument or a binding to render a part of a Component. To
- * provide a complicated view, it could be defined in a {@link Block} and then
- * returned encapsulated in a BlockRenderer.
- * <p>
- * It is important to note that a special care has to be taken if the
- * BlockRenderer is used within an inner class of a component or a page. In such
- * a case the instance of the component that created the inner class may not be
- * the currently active instance in the RequestCycle when the BlockRenderer is
- * required. Thus, calling getComponent("blockName") to get the block component
- * may return a Block component that is not initialized for this RequestCycle.
- * <p>
- * To avoid similar problems, the ComponentAddress class could be used in
- * conjunction with BlockRenderer. Here is a quick example of how BlockRenderer
- * could be used with ComponentAddress:
- * <p>
- * <code>
- * <br>// Create a component address for the current component
- * <br>final ComponentAddress address = new ComponentAddress(this);
- * <br>return new SomeClass() {
- * <br>&nbsp;&nbsp;IRender getRenderer(IRequestCycle cycle) {
- * <br>&nbsp;&nbsp;&nbsp;&nbsp;MyComponent component = (MyComponent) address.findComponent(cycle);
- * <br>&nbsp;&nbsp;&nbsp;&nbsp;// initialize variables in the component that will be used by the block here
- * <br>&nbsp;&nbsp;&nbsp;&nbsp;return new BlockRenderer(component.getComponent("block"));
- * <br>&nbsp;&nbsp;}
- * <br>}
- * </code>
- * 
- * @author mindbridge
- * @since 2.2
- */
-public class BlockRenderer implements IRender
-{
-
-    private Block m_objBlock;
-
-    /**
-     * Creates a new BlockRenderer that will render the content of the argument.
-     * 
-     * @param objBlock
-     *            the Block to be rendered
-     */
-    public BlockRenderer(Block objBlock)
-    {
-        m_objBlock = objBlock;
-    }
-    
-    /**
-     * @see org.apache.tapestry.IRender#render(IMarkupWriter, IRequestCycle)
-     */
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        m_objBlock.renderBody(writer, cycle);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ComponentMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ComponentMessages.java
deleted file mode 100644
index 92784e3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ComponentMessages.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.IComponent;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class ComponentMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(ComponentMessages.class);
-
-    /* defeat instantiation */
-    private ComponentMessages() { }
-    
-    static String unableToFormat(IComponent component, Object value, Throwable cause)
-    {
-        return _formatter.format("unable-to-format", component.getExtendedId(), value, cause);
-    }
-
-    static String anyElementNotDefined()
-    {
-        return _formatter.getMessage("any-element-not-defined");
-    }
-    
-    static String textConversionError(Throwable cause)
-    {
-        return _formatter.format("text-conversion-error", cause);
-    }
-    
-    static String keySqueezeError(IComponent component, Object value, Throwable cause)
-    {
-        return _formatter.format("squeeze-primary-key-error", component.getExtendedId(), value, cause);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ComponentStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ComponentStrings.properties
deleted file mode 100644
index 4b247cc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ComponentStrings.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-unable-to-format={0} unable to format value ''{1}'': {2}
-any-element-not-defined=The Any component is not used in a template and the 'element' property is not bound.
-text-conversion-error=Error converting text to lines (for Insert component): {0}
-squeeze-primary-key-error={0} error squeezing primary key value ''{1}'': {2} 
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Conditional.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Conditional.java
deleted file mode 100644
index 1808a42..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Conditional.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * A conditional element on a page which will render its wrapped elements zero or one times. [ <a
- * href="../../../../../ComponentReference/Conditional.html">Component Reference </a>]
- * 
- * @author Howard Lewis Ship, David Solis
- */
-
-public abstract class Conditional extends AbstractComponent
-{
-    /**
-     * Renders its wrapped components only if the condition is true (technically, if condition
-     * matches invert). Additionally, if element is specified, can emulate that HTML element if
-     * condition is met
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (evaluateCondition())
-        {
-            String element = getElement();
-
-            boolean render = !cycle.isRewinding() && HiveMind.isNonBlank(element);
-
-            if (render)
-            {
-                writer.begin(element);
-                renderInformalParameters(writer, cycle);
-            }
-
-            renderBody(writer, cycle);
-
-            if (render)
-                writer.end(element);
-        }
-    }
-
-    protected boolean evaluateCondition()
-    {
-        return getCondition() != getInvert();
-    }
-
-    public abstract boolean getCondition();
-
-    public abstract boolean getInvert();
-
-    public abstract String getElement();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Conditional.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Conditional.jwc
deleted file mode 100644
index 030c5e8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Conditional.jwc
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.components.Conditional" deprecated="yes">
-  <description>
-  Conditionally emulates an element and its attributes (if element is specified) and/or includes a block of content if a condition is met.
-  </description>
-  
-  <parameter name="condition" required="yes">
-    <description>
-    The condition to evaluate.
-    </description>
-  </parameter>
-  
-  <parameter name="invert">
-    <description>
-    If true, inverts the condition, so that a false condition causes the 
-    content to be included.  If false (the default), then the condition
-    is evaluated normally.
-    </description>
-  </parameter>
-
-  <parameter name="element">
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Delegator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Delegator.java
deleted file mode 100644
index a798c4d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Delegator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * A component which delegates it's behavior to another object. [<a
- * href="../../../../../ComponentReference/Delegator.html">Component Reference</a>]
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Delegator extends AbstractComponent
-{
-
-    /**
-     * Gets its delegate and invokes
-     * {@link IRender#render(IMarkupWriter, IRequestCycle)} on it.
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IRender delegate = getDelegate();
-        
-        if (delegate != null) delegate.render(writer, cycle);
-    }
-
-    public abstract IRender getDelegate();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Delegator.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Delegator.jwc
deleted file mode 100644
index 899ba50..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Delegator.jwc
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.components.Delegator"
-    allow-body="no" 
-	allow-informal-parameters="no">
-
-  <description>
-  Delegates rendering to an object that implements the IRender interface.
-  </description>
-
-  <parameter name="delegate" required="true">
-    <description>
-    The object which will perform the render.
-    </description>
-  </parameter>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Else.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Else.jwc
deleted file mode 100644
index 8966a6a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Else.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.components.ElseBean" allow-body="yes" allow-informal-parameters="yes">
-  
-  <description>
-  Conditionally emulates an element and its attributes and/or includes a block of content 
-  if the condition of the previous If component evaluates to false.
-  </description>
-  
-  <parameter name="renderTag" default-value="ognl:defaultRenderTags" />
-  
-  <parameter name="element" deprecated="yes" >
-  	<description>
-  	The element to emulate. Usage deprecated, please use the renderTag parameter to control
-    whether or not to render the tag.
-  	</description>
-  </parameter>
-  
-  <inject property="defaultRenderTags" object="app-property:org.apache.tapestry.renderTags" />
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ElseBean.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ElseBean.java
deleted file mode 100644
index 0d4a6f3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ElseBean.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * @author mb
- */
-public abstract class ElseBean extends AbstractComponent 
-{
-    public abstract String getElement();
-    
-    public abstract boolean getRenderTag();
-    
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object conditionObject = cycle.getAttribute(IfBean.IF_VALUE_ATTRIBUTE);
-
-        if (conditionObject instanceof Boolean && !((Boolean) conditionObject).booleanValue()) 
-        {
-            String element = HiveMind.isNonBlank(getElement()) ? getElement() : getTemplateTagName();
-            
-            boolean render = !cycle.isRewinding() && (getRenderTag() || HiveMind.isNonBlank(getElement()));
-            
-            if (render)
-            {
-                writer.begin(element);
-                renderInformalParameters(writer, cycle);
-            }
-
-            renderBody(writer, cycle);
-            
-            if (render)
-                writer.end(element);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/For.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/For.jwc
deleted file mode 100644
index 1646985..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/For.jwc
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.components.ForBean" allow-body="yes" allow-informal-parameters="yes">
-    
-  <description>
-  Loops over a collection of source values.  May also emulate an element (like an Any
-  component). If this component is placed in a Form, it will automatically store
-  the collection in Hidden fields so that the structure of the page is preserved
-  during a rewind even if the values in the source change.
-  </description>
-	
-  <parameter name="source" required="yes">
-    <description>
-    The source of values, a Java collection or array.
-    </description>
-  </parameter>
-  
-  <parameter name="value" property="valueParameter">
-    <description>
-    If provided, the parameter is updated with the current value on each iteration.
-    </description>
-  </parameter>
-  
-  <parameter name="index" property="indexParameter">
-    <description>
-    If provided, the parameter is updated with the index of the loop on each iteration.
-    </description>
-  </parameter>
-  
-  <parameter name="renderTag" default-value="ognl:defaultRenderTags" />
-  
-  <parameter name="element">
-    <description>
-    If provided, the component wraps its content with the requested element.
-    Informal parameters become attributes of that element.
-    </description>
-  </parameter>
-  
-  <parameter name="keyExpression">
-    <description>
-    Only active in a form. An OGNL expression that returns the primary key of the iterated value. 
-    The primary keys are stored in hidden fields during rendering and are loaded from the form
-    during a rewind to ensure that the iterations remain the same.
-    This is a simpler, but a less efficient alternative of the 'converter' parameter.
-    If needed, please use in conjuction with 'fullSource' to reference objects 
-    not currently present in 'source'.
-    Also, use the 'defaultValue' parameter to define the object to be returned if
-    a value corresponding to a particular primary key cannot be found.
-    </description>
-  </parameter>
-    
-  <parameter name="fullSource">
-    <description>
-    Only active in a form and in combination with the 'keyExpression' parameter. 
-    If an object corresponding to a primary key stored in the form cannot be
-    found in the 'source' parameter, then the objects provided by this parameter 
-    are searched for a match next. 
-    </description>
-  </parameter>
-  
-  <parameter name="defaultValue" default-value="null">
-    <description>
-    Only active in a form. The value to be used when no match for a given primary key is found. 
-    </description>
-  </parameter>
-
-  <parameter name="converter" default-value="null">
-    <description>
-    Only active in a form. Defines how the items iterated upon 
-    will be stored in the form as hidden values and how the stored information will be 
-    converted back to objects. 
-    This interface allows only the primary key of the items to be stored, 
-    rather than the whole item.
-    </description>
-  </parameter>
-  
-  <parameter name="primaryKeys">
-    <description>
-    Only active in a form. If provided, the parameter is automatically updated 
-    before a rewind with the list of primary keys stored in the form. 
-    The parameter is updated right before the iterations begin in a rewind and 
-    could be used to preload the relevant objects in the provided 'converter'.
-    </description>
-  </parameter>
-  
-  <parameter name="match" default-value="true">
-    <description>
-    Only active in a form. This parameter allows the matching of the string
-    representation of the values stored in the hidden fields with that 
-    of the values in 'source'. It guarantees that the values iterated upon are 
-    physically identical to the ones provided. 
-    The method is sometimes slower than simple unsqueezing, but it eliminates a number 
-    of potential pitfalls. Please disable with caution.
-    </description>
-  </parameter>
-  
-  <parameter name="volatile" default-value="false">
-    <description>
-    Only active in a form. Determines whether to avoid creating hidden fields within a form.
-    Using this parameter may make the form structure different during render and rewind, 
-    and cause exceptions as a result. Please use with caution.
-    </description>
-  </parameter>
-  
-  <inject property="defaultRenderTags" object="app-property:org.apache.tapestry.renderTags" />
-  <inject property="dataSqueezer" object="service:tapestry.data.DataSqueezer"/>
-  <inject property="valueConverter" object="service:tapestry.coerce.ValueConverter"/>
-  <inject property="expressionEvaluator" object="service:tapestry.ognl.ExpressionEvaluator"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java
deleted file mode 100644
index d6fbefd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ForBean.java
+++ /dev/null
@@ -1,773 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.form.AbstractFormComponent;
-import org.apache.tapestry.markup.NestedMarkupWriterImpl;
-import org.apache.tapestry.services.ComponentRenderWorker;
-import org.apache.tapestry.services.DataSqueezer;
-import org.apache.tapestry.services.ExpressionEvaluator;
-import org.apache.tapestry.services.ResponseBuilder;
-
-/**
- * @author mb
- * @since 4.0
- * @see org.apache.tapestry.components.IPrimaryKeyConverter
- * @see org.apache.tapestry.util.DefaultPrimaryKeyConverter
- */
-public abstract class ForBean extends AbstractFormComponent
-{
-    // constants
-    
-    /**
-     * Prefix on the hidden value stored into the field to indicate the the actual value is stored
-     * (this is used when there is no primary key converter). The remainder of the string is a
-     * {@link DataSqueezer squeezed} representation of the value.
-     */
-    private static final char DESC_VALUE = 'V';
-
-    /**
-     * Prefix on the hidden value stored into the field that indicates the primary key of the
-     * iterated value is stored; the remainder of the string is a {@link DataSqueezer squeezed}
-     * representation of the primary key. The {@link IPrimaryKeyConverter converter} is used to
-     * obtain the value from this key.
-     */
-    private static final char DESC_PRIMARY_KEY = 'P';
-
-    private final RepSource _completeRepSource = new CompleteRepSource();
-
-    private final RepSource _keyExpressionRepSource = new KeyExpressionRepSource();
-
-    // intermediate members
-    private Object _value;
-
-    private int _index;
-
-    private boolean _rendering;
-    
-    private boolean _hasNext = false;
-    
-    // parameters
-    public abstract boolean getRenderTag();
-    
-    public abstract String getElement();
-    
-    public abstract String getKeyExpression();
-
-    public abstract IPrimaryKeyConverter getConverter();
-
-    public abstract Object getDefaultValue();
-
-    public abstract boolean getMatch();
-
-    public abstract boolean getVolatile();
-
-    // injects
-    public abstract DataSqueezer getDataSqueezer();
-
-    public abstract ValueConverter getValueConverter();
-
-    public abstract ExpressionEvaluator getExpressionEvaluator();
-    
-    public abstract ComponentRenderWorker getRenderWorker();
-    
-    public abstract ResponseBuilder getResponseBuilder();
-    
-    public boolean hasNext()
-    {
-        return _hasNext;
-    }
-    
-    /**
-     * Gets the source binding and iterates through its values. For each, it updates the value
-     * binding and render's its wrapped elements.
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // form may be null if component is not located in a form
-        IForm form = (IForm) cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE);
-        
-        // If the cycle is rewinding, but not this particular form,
-        // then do nothing (don't even render the body).
-        
-        boolean cycleRewinding = cycle.isRewinding();
-        if (cycleRewinding && form != null && !form.isRewinding())
-            return;
-        
-        setForm(form);
-        
-        // Get the data to be iterated upon. Store in form if needed.
-        
-        Iterator dataSource = getData(cycle, form);
-
-        // Do not iterate if dataSource is null.
-        // The dataSource was either not convertable to Iterator, or was empty.
-        
-        if (dataSource == null)
-            return;
-        
-        if (!cycleRewinding && form != null && !NullWriter.class.isInstance(writer))
-            form.setFormFieldUpdating(true);
-        
-        String element = HiveMind.isNonBlank(getElement()) ? getElement() : getTemplateTagName();
-        
-        boolean render = !cycleRewinding && HiveMind.isNonBlank(element) && getRenderTag();
-        
-        IMarkupWriter loopWriter = writer;
-        
-        // Perform the iterations
-        try
-        {
-            _index = 0;
-            _rendering = true;
-            
-            while (dataSource.hasNext())
-            {
-                _hasNext = true;
-                
-                // Get current value
-                _value = dataSource.next();
-                
-                // Update output component parameters
-                updateOutputParameters();
-                
-                // Render component
-                // swap out writers if necessary
-                
-                if (getResponseBuilder().isDynamic()
-                        && getResponseBuilder().contains(this) 
-                        && !NestedMarkupWriterImpl.class.isInstance(writer)) {
-                    
-                    loopWriter = getResponseBuilder().getWriter(getClientId(), ResponseBuilder.ELEMENT_TYPE);
-                }
-                
-                if (render) {
-                    
-                    loopWriter.begin(element);
-                    
-                    renderInformalParameters(loopWriter, cycle);
-                    renderIdAttribute(loopWriter, cycle);
-                }
-                
-                renderBody(loopWriter, cycle);
-                
-                if (render) {
-                    
-                    loopWriter.end(element);
-                }
-                
-                _index++;
-                
-                _hasNext = dataSource.hasNext();
-                
-                // TODO: Fragile / messy
-                // Cause unique client id to be generated as well as event connection
-                // works or other after render workers. (basically reproduce what happens
-                // inside of AbstractComponent.render() . Perhaps this means it's time for
-                // refactoring of this logic, like deferring rendering to an actual component
-                // that can have its proper render() method invoked multiple times.
-                
-                getRenderWorker().renderComponent(cycle, this);
-                generateClientId();
-                
-                // set loopWriter back to original as the client ids/ etc change on each loop
-                
-                loopWriter = writer;
-            }
-        }
-        finally
-        {
-            _rendering = false;
-            _value = null;
-        }
-    }
-    
-    /**
-     * Overriden so that RenderWorker doesn't get run as we've been invoking
-     * it manually already.
-     */
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-    }
-    
-    protected void generateClientId()
-    {
-        String id = getSpecifiedId();
-        
-        if (id != null && getPage() != null && getPage().getRequestCycle() != null)
-             setClientId(getPage().getRequestCycle().getUniqueId(TapestryUtils.convertTapestryIdToNMToken(id)));
-    }
-    
-    /**
-     * Returns the most recent value extracted from the source parameter.
-     *
-     */
-
-    public final Object getValue()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "value");
-
-        return _value;
-    }
-
-    /**
-     * The index number, within the {@link #getStoredData(IRequestCycle, String) }, of the the current value.
-     * 
-     */
-
-    public int getIndex()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "index");
-
-        return _index;
-    }
-
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    /**
-     * Updates the index and value output parameters if bound.
-     */
-    protected void updateOutputParameters()
-    {
-        IBinding indexBinding = getBinding("index");
-        if (indexBinding != null)
-            indexBinding.setObject(new Integer(_index));
-
-        IBinding valueBinding = getBinding("value");
-        if (valueBinding != null)
-            valueBinding.setObject(_value);
-    }
-
-    /**
-     * Updates the primaryKeys parameter if bound.
-     */
-    protected void updatePrimaryKeysParameter(String[] stringReps)
-    {
-        IBinding primaryKeysBinding = getBinding("primaryKeys");
-        if (primaryKeysBinding == null)
-            return;
-
-        DataSqueezer squeezer = getDataSqueezer();
-
-        int repsCount = stringReps.length;
-        List primaryKeys = new ArrayList(repsCount);
-        for (int i = 0; i < stringReps.length; i++)
-        {
-            String rep = stringReps[i];
-            if (rep.length() == 0 || rep.charAt(0) != DESC_PRIMARY_KEY)
-                continue;
-            Object primaryKey = squeezer.unsqueeze(rep.substring(1));
-            primaryKeys.add(primaryKey);
-        }
-
-        primaryKeysBinding.setObject(primaryKeys);
-    }
-
-    // Do nothing in those methods, but make the JVM happy
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    /**
-     * Returns a list with the values to be iterated upon. The list is obtained in different ways: -
-     * If the component is not located in a form or 'volatile' is set to true, then the simply the
-     * values passed to 'source' are returned (same as Foreach) - If the component is in a form, and
-     * the form is rewinding, the values stored in the form are returned -- rewind is then always
-     * the same as render. - If the component is in a form, and the form is being rendered, the
-     * values are stored in the form as Hidden fields.
-     * 
-     * @param cycle
-     *            The current request cycle
-     * @param form
-     *            The form within which the component is located (if any)
-     * @return An iterator with the values to be cycled upon
-     */
-    private Iterator getData(IRequestCycle cycle, IForm form)
-    {
-        if (form == null || getVolatile())
-            return evaluateSourceIterator();
-        
-        String name = form.getElementId(this);
-        
-        if (cycle.isRewinding())
-            return getStoredData(cycle, name);
-        
-        return storeSourceData(form, name);
-    }
-
-    /**
-     * Returns a list of the values stored as Hidden fields in the form. A conversion is performed
-     * if the primary key of the value is stored.
-     * 
-     * @param cycle
-     *            The current request cycle
-     * @param name
-     *            The name of the HTTP parameter whether the values
-     * @return an iterator with the values stored in the provided Hidden fields
-     */
-    protected Iterator getStoredData(IRequestCycle cycle, String name)
-    {
-        String[] stringReps = cycle.getParameters(name);
-        if (stringReps == null)
-            return null;
-
-        updatePrimaryKeysParameter(stringReps);
-
-        return new ReadSourceDataIterator(stringReps);
-    }
-
-    /**
-     * Pulls data from successive strings (posted by client-side hidden fields); each string
-     * representation may be either a value or a primary key.
-     */
-    private class ReadSourceDataIterator implements Iterator
-    {
-        private final Iterator _sourceIterator = evaluateSourceIterator();
-
-        private final Iterator _fullSourceIterator = evaluateFullSourceIterator();
-
-        private final String[] _stringReps;
-
-        private int _index = 0;
-
-        private final Map _repToValueMap = new HashMap();
-
-        ReadSourceDataIterator(String[] stringReps)
-        {
-            _stringReps = stringReps;
-        }
-
-        public boolean hasNext()
-        {
-            return _index < _stringReps.length;
-        }
-
-        public Object next()
-        {
-            String rep = _stringReps[_index++];
-
-            return getValueFromStringRep(_sourceIterator, _fullSourceIterator, _repToValueMap, rep);
-        }
-
-        public void remove()
-        {
-            throw new UnsupportedOperationException("remove()");
-        }
-
-    }
-
-    /**
-     * Stores the provided data in the form and then returns the data as an iterator. If the primary
-     * key of the value can be determined, then that primary key is saved instead.
-     * 
-     * @param form
-     *            The form where the data will be stored
-     * @param name
-     *            The name under which the data will be stored
-     * @return an iterator with the bound values stored in the form
-     */
-    protected Iterator storeSourceData(IForm form, String name)
-    {
-        return new StoreSourceDataIterator(form, name, evaluateSourceIterator());
-    }
-
-    /**
-     * Iterates over a set of values, using {@link ForBean#getStringRepFromValue(Object)} to obtain
-     * the correct client-side string representation, and working with the form to store each
-     * successive value into the form.
-     */
-    private class StoreSourceDataIterator implements Iterator
-    {
-        private final IForm _form;
-
-        private final String _name;
-
-        private final Iterator _delegate;
-
-        StoreSourceDataIterator(IForm form, String name, Iterator delegate)
-        {
-            _form = form;
-            _name = name;
-            _delegate = delegate;
-        }
-
-        public boolean hasNext()
-        {
-            return _delegate.hasNext();
-        }
-
-        public Object next()
-        {
-            Object value = _delegate.next();
-
-            
-            
-            String rep = getStringRepFromValue(value);
-
-            _form.addHiddenValue(_name, rep);
-
-            return value;
-        }
-
-        public void remove()
-        {
-            throw new UnsupportedOperationException("remove()");
-        }
-    }
-
-    /**
-     * Returns the string representation of the value. The first letter of the string representation
-     * shows whether a value or a primary key is being described.
-     * 
-     * @param value
-     * @return The string representation of the given value.
-     */
-    protected String getStringRepFromValue(Object value)
-    {
-        String rep;
-        
-        DataSqueezer squeezer = getDataSqueezer();
-        
-        // try to extract the primary key from the value
-        
-        Object pk = getPrimaryKeyFromValue(value);
-        
-        try {
-
-            if (pk != null) {
-
-                // Primary key was extracted successfully.
-                rep = DESC_PRIMARY_KEY + squeezer.squeeze(pk);
-            } else {
-
-                // primary key could not be extracted. squeeze value.
-                rep = DESC_VALUE + squeezer.squeeze(value);
-            }
-            
-        } catch (Exception e) {
-            throw new ApplicationRuntimeException(ComponentMessages.keySqueezeError(this, value, e), this, getLocation(), e);
-        }
-        
-        return rep;
-    }
-
-    /**
-     * Returns the primary key of the given value. Uses the 'keyExpression' or the 'converter' (if
-     * either is provided).
-     * 
-     * @param value
-     *            The value from which the primary key should be extracted
-     * @return The primary key of the value, or null if such cannot be extracted.
-     */
-    protected Object getPrimaryKeyFromValue(Object value)
-    {
-        if (value == null)
-            return null;
-        
-        Object primaryKey = getKeyExpressionFromValue(value);
-        
-        if (primaryKey == null)
-            primaryKey = getConverterFromValue(value);
-
-        return primaryKey;
-    }
-
-    /**
-     * Uses the 'keyExpression' parameter to determine the primary key of the given value.
-     * 
-     * @param value
-     *            The value from which the primary key should be extracted
-     * @return The primary key of the value as defined by 'keyExpression', or null if such cannot be
-     *         extracted.
-     */
-    protected Object getKeyExpressionFromValue(Object value)
-    {
-        String keyExpression = getKeyExpression();
-        if (keyExpression == null)
-            return null;
-
-        Object primaryKey = getExpressionEvaluator().read(value, keyExpression);
-        return primaryKey;
-    }
-
-    /**
-     * Uses the 'converter' parameter to determine the primary key of the given value.
-     * 
-     * @param value
-     *            The value from which the primary key should be extracted
-     * @return The primary key of the value as provided by the converter, or null if such cannot be
-     *         extracted.
-     */
-    protected Object getConverterFromValue(Object value)
-    {
-        IPrimaryKeyConverter converter = getConverter();
-        if (converter == null)
-            return null;
-
-        Object primaryKey = converter.getPrimaryKey(value);
-        
-        return primaryKey;
-    }
-
-    /**
-     * Determines the value that corresponds to the given string representation. If the 'match'
-     * parameter is true, attempt to find a value in 'source' or 'fullSource' that generates the
-     * same string representation. Otherwise, create a new value from the string representation.
-     * 
-     * @param rep
-     *            the string representation for which a value should be returned
-     * @return the value that corresponds to the provided string representation
-     */
-    protected Object getValueFromStringRep(Iterator sourceIterator, Iterator fullSourceIterator,
-            Map repToValueMap, String rep)
-    {
-        Object value = null;
-        DataSqueezer squeezer = getDataSqueezer();
-
-        // Check if the string rep is empty. If so, just return the default value.
-        if (rep == null || rep.length() == 0)
-            return getDefaultValue();
-        
-        // If required, find a value with an equivalent string representation and return it
-        boolean match = getMatch();
-        if (match)
-        {
-            value = findValueWithStringRep( sourceIterator, fullSourceIterator, repToValueMap,
-                    rep, _completeRepSource);
-            
-            if (value != null)
-                return value;
-        }
-
-        // Matching of the string representation was not successful or was disabled.
-        // Use the standard approaches to obtain the value from the rep.
-        
-        char desc = rep.charAt(0);
-        String squeezed = rep.substring(1);
-        switch (desc)
-        {
-            case DESC_VALUE:
-                // If the string rep is just the value itself, unsqueeze it
-                value = squeezer.unsqueeze(squeezed);
-                break;
-                
-            case DESC_PRIMARY_KEY:
-                // Perform keyExpression match if not already attempted
-                if (!match && getKeyExpression() != null)
-                    value = findValueWithStringRep(
-                            sourceIterator,
-                            fullSourceIterator,
-                            repToValueMap,
-                            rep,
-                            _keyExpressionRepSource);
-
-                // If 'converter' is defined, try to perform conversion from primary key to value
-                if (value == null)
-                {
-                    IPrimaryKeyConverter converter = getConverter();
-                    if (converter != null)
-                    {
-                        Object pk = squeezer.unsqueeze(squeezed);
-                        value = converter.getValue(pk);
-                    }
-                }
-                break;
-        }
-
-        if (value == null)
-            value = getDefaultValue();
-
-        return value;
-    }
-
-    /**
-     * Attempt to find a value in 'source' or 'fullSource' that generates the provided string
-     * representation. Use the RepSource interface to determine what the string representation of a
-     * particular value is.
-     * 
-     * @param rep
-     *            the string representation for which a value should be returned
-     * @param repSource
-     *            an interface providing the string representation of a given value
-     * @return the value in 'source' or 'fullSource' that corresponds to the provided string
-     *         representation
-     */
-    protected Object findValueWithStringRep(Iterator sourceIterator, Iterator fullSourceIterator,
-            Map repToValueMap, String rep, RepSource repSource)
-    {
-        Object value = repToValueMap.get(rep);
-        if (value != null)
-            return value;
-
-        value = findValueWithStringRepInIterator(sourceIterator, repToValueMap, rep, repSource);
-        if (value != null)
-            return value;
-        
-        value = findValueWithStringRepInIterator(fullSourceIterator, repToValueMap, rep, repSource);
-        return value;
-    }
-
-    /**
-     * Attempt to find a value in the provided collection that generates the required string
-     * representation. Use the RepSource interface to determine what the string representation of a
-     * particular value is.
-     * 
-     * @param rep
-     *            the string representation for which a value should be returned
-     * @param repSource
-     *            an interface providing the string representation of a given value
-     * @param it
-     *            the iterator of the collection in which a value should be searched
-     * @return the value in the provided collection that corresponds to the required string
-     *         representation
-     */
-    protected Object findValueWithStringRepInIterator(Iterator it, Map repToValueMap, String rep,
-            RepSource repSource)
-    {
-        while (it.hasNext())
-        {
-            Object sourceValue = it.next();
-            if (sourceValue == null)
-                continue;
-            
-            String sourceRep = repSource.getStringRep(sourceValue);
-            repToValueMap.put(sourceRep, sourceValue);
-            
-            if (rep.equals(sourceRep))
-                return sourceValue;
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns a new iterator of the values in 'source'.
-     * 
-     * @return the 'source' iterator
-     */
-    protected Iterator evaluateSourceIterator()
-    {
-        Iterator it = null;
-        Object source = null;
-
-        IBinding sourceBinding = getBinding("source");
-        if (sourceBinding != null)
-            source = sourceBinding.getObject();
-        
-        if (source != null)
-            it = (Iterator) getValueConverter().coerceValue(source, Iterator.class);
-        
-        if (it == null)
-            it = Collections.EMPTY_LIST.iterator();
-
-        return it;
-    }
-
-    /**
-     * Returns a new iterator of the values in 'fullSource'.
-     * 
-     * @return the 'fullSource' iterator
-     */
-    protected Iterator evaluateFullSourceIterator()
-    {
-        Iterator it = null;
-        Object fullSource = null;
-
-        IBinding fullSourceBinding = getBinding("fullSource");
-        if (fullSourceBinding != null)
-            fullSource = fullSourceBinding.getObject();
-
-        if (fullSource != null)
-            it = (Iterator) getValueConverter().coerceValue(fullSource, Iterator.class);
-
-        if (it == null)
-            it = Collections.EMPTY_LIST.iterator();
-
-        return it;
-    }
-
-    /**
-     * An interface that provides the string representation of a given value.
-     */
-    protected interface RepSource
-    {
-        String getStringRep(Object value);
-    }
-
-    /**
-     * An implementation of RepSource that provides the string representation of the given value
-     * using all methods.
-     */
-    protected class CompleteRepSource implements RepSource
-    {
-        public String getStringRep(Object value)
-        {
-            return getStringRepFromValue(value);
-        }
-    }
-
-    /**
-     * An implementation of RepSource that provides the string representation of the given value
-     * using just the 'keyExpression' parameter.
-     */
-    protected class KeyExpressionRepSource implements RepSource
-    {
-        public String getStringRep(Object value)
-        {
-            Object pk = getKeyExpressionFromValue(value);
-            return DESC_PRIMARY_KEY + getDataSqueezer().squeeze(pk);
-        }
-    }
-
-    /**
-     * For component can not take focus.
-     */
-    protected boolean getCanTakeFocus()
-    {
-        return false;
-    }
-
-    public String getDisplayName()
-    {
-        return null;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ILinkComponent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ILinkComponent.java
deleted file mode 100644
index 7fac84a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/ILinkComponent.java
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * A component that renders an HTML &lt;a&gt; element. It exposes some
- * properties to the components it wraps. This is basically to facilitate the
- * {@link org.apache.tapestry.html.Rollover} component.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface ILinkComponent extends IComponent
-{
-
-    /**
-     * Returns the desired scheme (i.e., "http" or "https") for the link, or
-     * null to not output a specific scheme (in which case the URL will fall
-     * under the incoming request's scheme).
-     *
-     * @return The scheme portion of the url to be generated. 
-     * @since 4.0
-     */
-
-    String getScheme();
-
-    /**
-     * Returns the desired port (i.e., "80" or "443") for the link, or null to
-     * not output a specific port (in which case the URL will fall under the
-     * incoming request's port).
-     *
-     * @return The http port to use.
-     * @since 4.1
-     */
-
-    Integer getPort();
-
-    /**
-     * Returns whether this service link component is enabled or disabled.
-     *
-     * @return True if disabled, false otherwise.
-     * @since 0.2.9
-     */
-
-    boolean isDisabled();
-
-    /**
-     * Returns the anchor defined for this link, or null for no anchor.
-     *
-     * @return The <code>#anchorid</code> portion of the url to be generated - if any.
-     * @since 3.0
-     */
-
-    String getAnchor();
-
-    /**
-     * Returns the name of the target window or frame for this link, or null if
-     * current window or frame is to be used.
-     *
-     * @return The <code>target="_this"</code> portion of the link to be generated - if any.
-     * @since 4.0
-     */
-    String getTarget();
-
-    /**
-     * Adds a new event handler. When the event occurs, the JavaScript function
-     * specified is executed. Multiple functions can be specified, in which case
-     * all of them are executed.
-     * <p>
-     * This was created for use by {@link org.apache.tapestry.html.Rollover} to
-     * set mouse over and mouse out handlers on the {@link ILinkComponent} that
-     * wraps it, but can be used for many other things as well.
-     *
-     * @param type
-     *          The type of event to add.
-     * @param functionName
-     *          The name of the client side javascript function to generate.
-     *
-     * @since 0.2.9
-     * @deprecated To be removed in Tapestry 4.1.4. 
-     */
-
-    void addEventHandler(LinkEventType type, String functionName);
-
-    /**
-     * Invoked by the {@link org.apache.tapestry.link.ILinkRenderer} (if the
-     * link is not disabled) to provide a
-     * {@link org.apache.tapestry.engine.EngineServiceLink} that the renderer
-     * can convert into a URL.
-     *
-     * @param cycle
-     *          The current request.
-     * @return A {@link ILink} instance representing the link information for this component.
-     */
-
-    ILink getLink(IRequestCycle cycle);
-
-    /**
-     * Invoked (by the {@link org.apache.tapestry.link.ILinkRenderer}) to make
-     * the link render any additional attributes. These are informal parameters,
-     * plus any attributes related to events. This is only invoked for
-     * non-disabled links.
-     *
-     * @param writer
-     *          Markup writer to write content to.
-     * @param cycle
-     *          The current request.
-     * @since 3.0
-     */
-
-    void renderAdditionalAttributes(IMarkupWriter writer, IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/IPrimaryKeyConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/IPrimaryKeyConverter.java
deleted file mode 100644
index dd83739..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/IPrimaryKeyConverter.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-/**
- * An interface for converting an objects to their primary keys and back.
- * Typically used to determine how to store a given object as a hidden value
- * when rendering a form.
- * <p>
- * This interface is used by the
- * {@link org.apache.tapestry.components.ForBean For component}. When a primary
- * key converter is available, it is used during the render, and as part of the
- * rewind phase that processes the form submission.
- * <p>
- * During rendering, {@link #getPrimaryKey(Object)} is invoked for each value.
- * This method is invoked just before the For's body is rendered. The resulting
- * primary key is written into the client as a hidden form field.
- * <p>
- * Likewise, during rewind, {@link #getValue(Object)} is invoked for each key,
- * to get back the same (or equivalent) object. Again, the method is invoked
- * just before the For's body is rendered.
- * <p>
- * The {@link org.apache.tapestry.util.DefaultPrimaryKeyConverter} uses this
- * relationship between a For component and its primary key converter to track
- * what the current value being rendered or rewound is.
- * 
- * @author mb
- * @since 4.0
- */
-public interface IPrimaryKeyConverter
-{
-
-    /**
-     * Returns the primary key of the given value.
-     * 
-     * @param objValue
-     *            the value for which a primary key needs to be extracted
-     * @return the primary key of the value
-     */
-    Object getPrimaryKey(Object value);
-
-    /**
-     * Returns the value corresponding the given primary key.
-     * 
-     * @param objPrimaryKey
-     *            the primary key for which a value needs to be generated
-     * @return the generated value corresponding to the given primary key
-     */
-    Object getValue(Object primaryKey);
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/If.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/If.jwc
deleted file mode 100644
index 880c038..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/If.jwc
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.components.IfBean" allow-body="yes" allow-informal-parameters="yes">
-    
-  <description>
-  Conditionally emulates an element and its attributes and/or includes a block of content 
-  if a condition is met.
-  </description>
-  
-  <parameter name="condition" required="yes">
-    <description>
-    The condition to evaluate.
-    </description>
-  </parameter>
-  
-  <parameter name="conditionValue">
-    <description>
-    The value of the condition. During render this is obtained from
-    the condition parameter. During rewind it is the submitted condition.
-    </description>
-  </parameter>
-
-  <parameter name="listener"/>
-  
-  <parameter name="renderTag" default-value="ognl:defaultRenderTags" />
-  
-  <parameter name="element" deprecated="yes" >
-  	<description>
-  	The element to emulate. Usage deprecated, please use the renderTag parameter to control
-    whether or not to render the tag.
-  	</description>
-  </parameter>
-  
-  <parameter name="volatile" default-value="false">
-    <description>
-    Only active in a form. Determines whether to avoid creating hidden fields within a form.
-    Using this parameter may make the form structure different during render and rewind, 
-    and cause exceptions as a result. Please use with caution.
-    </description>
-  </parameter>
-  
-  <property name="name"/>
-  <property name="form"/>
-
-  <inject property="defaultRenderTags" object="app-property:org.apache.tapestry.renderTags" />
-  <inject property="dataSqueezer" object="service:tapestry.data.DataSqueezer"/>
-  <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/IfBean.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/IfBean.java
deleted file mode 100644
index 2545602..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/IfBean.java
+++ /dev/null
@@ -1,232 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.form.AbstractFormComponent;
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * @author mb
- */
-public abstract class IfBean extends AbstractFormComponent
-{
-    public static final Log _log = LogFactory.getLog(IfBean.class);
-    
-    public static final String IF_VALUE_ATTRIBUTE = "org.mb.tapestry.base.IfValue";
-    
-    private boolean _rendering = false;
-
-    private boolean _conditionValue;
-    
-    public abstract IBinding getConditionValueBinding();
-
-    public abstract boolean getCondition();
-
-    public abstract boolean getVolatile();
-
-    public abstract String getElement();
-    
-    public abstract boolean getRenderTag();
-    
-    public abstract IActionListener getListener();
-    
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean cycleRewinding = cycle.isRewinding();
-        
-        // form may be null if component is not located in a form
-        IForm form = (IForm)cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE);
-        
-        // If the cycle is rewinding, but not this particular form,
-        // then do nothing (don't even render the body).
-        
-        if (cycleRewinding && form != null && !form.isRewinding())
-            return;
-        
-        // get the condition. work with a hidden field if necessary
-        
-        _conditionValue = evaluateCondition(cycle, form, cycleRewinding);
-        _rendering = true;
-        
-        if (!cycleRewinding && form != null && !NullWriter.class.isInstance(writer))
-            form.setFormFieldUpdating(true);
-        
-        try
-        {
-            // call listener
-            IActionListener listener = getListener();
-            if (listener != null)
-                listener.actionTriggered(this, cycle);
-            
-            // now render if condition is true
-            if (_conditionValue)
-            {
-                String element = HiveMind.isNonBlank(getElement()) ? getElement() : getTemplateTagName();
-                
-                boolean render = !cycleRewinding && (getRenderTag() || HiveMind.isNonBlank(getElement()));
-                
-                if (render)
-                {
-                    writer.begin(element);
-
-                    renderInformalParameters(writer, cycle);
-                    renderIdAttribute(writer, cycle);
-                }
-
-                renderBody(writer, cycle);
-
-                if (render)
-                    writer.end(element);
-            }
-        }
-        finally
-        {
-            _rendering = false;
-        }
-
-        cycle.setAttribute(IF_VALUE_ATTRIBUTE, new Boolean(_conditionValue));
-    }
-
-    /**
-     * Overriden from {@link AbstractFormComponent} to handle cases where
-     * we're not being wrapped by a {@link IForm} component.
-     *
-     * <p>This is basically a copy of the same method implemented in {@link AbstractComponent}.</p> 
-     */
-    protected void generateClientId()
-    {
-        String id = getSpecifiedId();
-
-        if (id != null && getPage() != null && getPage().getRequestCycle() != null)
-             setClientId(getPage().getRequestCycle().getUniqueId(TapestryUtils.convertTapestryIdToNMToken(id)));
-    }
-
-    protected boolean evaluateCondition(IRequestCycle cycle, IForm form, boolean cycleRewinding)
-    {
-        boolean condition;
-
-        if (form == null || getVolatile())
-        {
-            condition = getCondition();
-        }
-        else
-        {
-            // we are in a form and we care -- load/store the condition in a hidden field
-            
-            String name = form.getElementId(this);
-            
-            if (!cycleRewinding)
-            {
-                condition = getCondition();
-                writeValue(form, name, condition);
-            }
-            else
-            {
-                condition = readValue(cycle, name);
-            }
-        }
-        
-        // write condition value if parameter is bound
-        
-        IBinding conditionValueBinding = getConditionValueBinding();
-        
-        if (conditionValueBinding != null)
-            conditionValueBinding.setObject(new Boolean(condition));
-
-        return condition;
-    }
-    
-    private void writeValue(IForm form, String name, boolean value)
-    {
-        String externalValue;
-
-        Object booleanValue = new Boolean(value);
-        try
-        {
-            externalValue = getDataSqueezer().squeeze(booleanValue);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(Tapestry.format("If.unable-to-convert-value",booleanValue), this, null, ex);
-        }
-
-        form.addHiddenValue(name, externalValue);
-    }
-
-    private boolean readValue(IRequestCycle cycle, String name)
-    {
-        String submittedValue = cycle.getParameter(name);
-        
-        _log.debug("readValue() with : " + name + " [" + submittedValue + "]");
-        
-        try
-        {
-            Object valueObject = getDataSqueezer().unsqueeze(submittedValue);
-            if (!(valueObject instanceof Boolean))
-                throw new ApplicationRuntimeException(Tapestry.format("If.invalid-condition-type", submittedValue));
-
-            return ((Boolean) valueObject).booleanValue();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(Tapestry.format(
-                    "If.unable-to-convert-string",
-                    submittedValue), this, null, ex);
-        }
-    }
-
-    public abstract DataSqueezer getDataSqueezer();
-
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    /**
-     * Returns the value of the condition.
-     * 
-     * @return the condition value
-     */
-    public boolean getConditionValue()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "conditionValue");
-
-        return _conditionValue;
-    }
-
-    // Do nothing in those methods, but make the JVM happy
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    /**
-     * For component can not take focus.
-     */
-    protected boolean getCanTakeFocus()
-    {
-        return false;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Insert.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Insert.java
deleted file mode 100644
index e890e95..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Insert.java
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.io.StringReader;
-import java.text.Format;
-
-/**
- * Used to insert some text (from a parameter) into the HTML. [ <a
- * href="../../../../../ComponentReference/Insert.html">Component Reference
- * </a>]
- *
- * @author Howard Lewis Ship
- */
-
-public abstract class Insert extends AbstractComponent
-{
-
-    /**
-     * Prints its value parameter, possibly formatted by its format parameter.
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.isRewinding())
-            return;
-
-        Object value = getValue();
-
-        if (value == null)
-            return;
-
-        String insert = null;
-
-        Format format = getFormat();
-
-        if (format == null)
-        {
-            insert = value.toString();
-        }
-        else
-        {
-            try
-            {
-                insert = format.format(value);
-            }
-            catch (Exception ex)
-            {
-                throw new ApplicationRuntimeException(ComponentMessages
-                        .unableToFormat(this, value, ex), this, getBinding(
-                        "format").getLocation(), ex);
-            }
-        }
-
-        boolean render = getRenderTag() || isParameterBound("class");
-
-        if (render)
-        {
-            writer.begin(getTemplateTagName());
-
-            renderInformalParameters(writer, cycle);
-
-            if (getId() != null && !isParameterBound("id"))
-                renderIdAttribute(writer, cycle);
-        }
-
-        printText(writer, cycle, insert);
-
-        if (render)
-            writer.end();
-    }
-
-    protected void printText(IMarkupWriter writer, IRequestCycle cycle, String value)
-    {
-        if (getMode() == null)
-        {
-            writer.print(value, getRaw());
-            return;
-        }
-
-        StringReader reader = null;
-        LineNumberReader lineReader = null;
-        InsertMode mode = getMode();
-        boolean raw = getRaw();
-
-        try {
-            reader = new StringReader(value);
-            lineReader = new LineNumberReader(reader);
-
-            int lineNumber = 0;
-
-            while(true)
-            {
-                String line = lineReader.readLine();
-
-                // Exit loop at end of file.
-
-                if (line == null)
-                    break;
-
-                mode.writeLine(lineNumber, line, writer, raw);
-
-                lineNumber++;
-            }
-
-        } catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(ComponentMessages.textConversionError(ex), this, null, ex);
-        } finally
-        {
-            IOUtils.closeQuietly(lineReader);
-            IOUtils.closeQuietly(reader);
-        }
-    }
-
-    public abstract Object getValue();
-
-    public abstract Format getFormat();
-
-    public abstract boolean getRaw();
-
-    public abstract boolean getRenderTag();
-
-    public abstract InsertMode getMode();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Insert.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Insert.jwc
deleted file mode 100644
index 4c17ea8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/Insert.jwc
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.components.Insert" allow-body="no">
-  
-  <description>
-  Emits a value into the response page.
-  </description>
-  
-  <parameter name="value" required="yes">
-  	<description>
-  	The value to be emitted.  Non-strings are converted to strings.
-  	</description>
-  </parameter>
-  
-  <parameter name="format">
-  	<description>
-  	A Format object used to convert the value to a string.
-  	</description>
-  </parameter>
-  
-  <parameter name="raw">
-  	<description>
-  	If false (the default), then HTML characters in the value are escaped.  If
-  	true, then value is emitted exactly as is.
-  	</description>
-  </parameter>
-  
-  <parameter name="renderTag" default-value="false">
-    <description>If true, causes the tag used to define the insert to be used, as well as any informal 
-    parameters bound.</description>
-  </parameter>
-  
-  <parameter name="mode">
-    <description>
-    Determines which mode to use: breaks after each line, or wrap each line
-    as a paragraph.
-    </description>
-  </parameter>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/InsertMode.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/InsertMode.java
deleted file mode 100644
index 3c65a31..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/InsertMode.java
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- * Defines a number of ways to format multi-line text for proper renderring.
- * 
- * <p>
- * Implementation taken from the now deprecated InsertTextMode class.
- * </p>
- * 
- * @author jkuhnert
- */
-public abstract class InsertMode
-{
-    /**
-     * Mode where each line (after the first) is preceded by a &lt;br&gt; tag.
-     */
-
-    public static final InsertMode BREAK = new BreakMode();
-
-    /**
-     * Mode where each line is wrapped with a &lt;p&gt; element.
-     */
-
-    public static final InsertMode PARAGRAPH = new ParagraphMode();
-    
-    protected final String _name;
-    
-    /**
-     * Creates a new instance with a name.
-     * 
-     * @param name Textual description of the mode.
-     */
-    protected InsertMode(String name)
-    {
-        _name = name;
-    }
-    
-    public String toString()
-    {
-        return "InsertMode[" + _name + "]";
-    }
-
-    /**
-     * Invoked by the {@link Insert} component to write the next line.
-     * 
-     * @param lineNumber
-     *            the line number of the line, starting with 0 for the first
-     *            line.
-     * @param line
-     *            the String for the current line.
-     * @param writer
-     *            the {@link IMarkupWriter} to send output to.
-     * @param raw
-     *            if true, then the output should be unfiltered
-     */
-
-    public abstract void writeLine(int lineNumber, String line, IMarkupWriter writer, boolean raw);
-    
-    /**
-     * 
-     * @author hls
-     */
-    private static final class BreakMode extends InsertMode
-    {
-        private BreakMode()
-        {
-            super("BREAK");
-        }
-
-        public void writeLine(int lineNumber, String line,
-                IMarkupWriter writer, boolean raw)
-        {
-            if (lineNumber > 0) 
-                writer.beginEmpty("br");
-
-            writer.print(line, raw);
-        }
-    }
-
-    /**
-     * 
-     * @author hls
-     */
-    private static final class ParagraphMode extends InsertMode
-    {
-
-        private ParagraphMode()
-        {
-            super("PARAGRAPH");
-        }
-        
-        public void writeLine(int lineNumber, String line,
-                IMarkupWriter writer, boolean raw)
-        {
-            writer.begin("p");
-
-            writer.print(line, raw);
-
-            writer.end();
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/InvokeListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/InvokeListener.java
deleted file mode 100644
index 76de969..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/InvokeListener.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.link.DirectLink;
-import org.apache.tapestry.listener.ListenerInvoker;
-
-/**
- * Invokes a listener method, passing listener parameters. This is used when a
- * page or component needs some setup logic that can be best accomplished in
- * Java code. If the listener parameter is not bound, attempt to locate an
- * implicit listener named by the capitalized component id, prefixed by "do".
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class InvokeListener extends AbstractComponent
-{
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object[] parameters = DirectLink
-                .constructServiceParameters(getParameters());
-
-        try
-        {
-            cycle.setListenerParameters(parameters);
-
-	        IActionListener listener = getListener();
-
-	        if (listener == null)
-	            listener = getContainer().getListeners().getImplicitListener(this);
-
-            getListenerInvoker().invokeListener(listener, this, cycle);
-        }
-        finally
-        {
-            cycle.setListenerParameters(null);
-        }
-    }
-
-    /** Parameter. */
-    public abstract IActionListener getListener();
-
-    /** Parameter. */
-    public abstract Object getParameters();
-
-    /** Injected. */
-    public abstract ListenerInvoker getListenerInvoker();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/InvokeListener.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/InvokeListener.jwc
deleted file mode 100644
index a4acc7f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/InvokeListener.jwc
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.components.InvokeListener" 
-    allow-informal-parameters="no"
-    allow-body="no">
-  
-  <description>
-  Invokes a listener, with parameters, during the page render.
-  </description>
-
-  <parameter name="listener">
-	  <description>
-		  The listener to be invoked. If none is provided, Tapestry will attempt
-		  to find a listener with the capitalized id of the component, prefixed
-		  by "do". For example, jwcid="clear@InvokeListener" would have a
-		  listener called doClear().
-	  </description>
-  </parameter>
-  	
-  <parameter name="parameters">
-    <description>
-    An object, or list of objects, provided as method parameters
-    to the listener method.
-    </description>
-  </parameter>
-  
-   <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>
-     
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/LinkEventType.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/LinkEventType.java
deleted file mode 100644
index 4458175..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/LinkEventType.java
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-/**
- * Different types of JavaScript events that an {@link ILinkComponent} can provide handlers for.
- * 
- * @author Howard Lewis Ship
- * @since 0.2.9
- */
-
-public class LinkEventType
-{
-    /**
-     * Type for <code>onMouseOver</code>. This may also be called "focus".
-     */
-
-    public static final LinkEventType MOUSE_OVER = new LinkEventType("MOUSE_OVER", "onMouseOver");
-
-    /**
-     * Type for <code>onMouseOut</code>. This may also be called "blur".
-     */
-
-    public static final LinkEventType MOUSE_OUT = new LinkEventType("MOUSE_OUT", "onMouseOut");
-
-    /**
-     * Type for <code>onClick</code>.
-     * 
-     * @since 1.0.1
-     */
-
-    public static final LinkEventType CLICK = new LinkEventType("CLICK", "onClick");
-
-    /**
-     * Type for <code>onDblClick</code>.
-     * 
-     * @since 1.0.1
-     */
-
-    public static final LinkEventType DOUBLE_CLICK = new LinkEventType("DOUBLE_CLICK", "onDblClick");
-
-    /**
-     * Type for <code>onMouseDown</code>.
-     * 
-     * @since 1.0.1.
-     */
-
-    public static final LinkEventType MOUSE_DOWN = new LinkEventType("MOUSE_DOWN", "onMouseDown");
-
-    /**
-     * Type for <code>onMouseUp</code>.
-     * 
-     * @since 1.0.1
-     */
-
-    public static final LinkEventType MOUSE_UP = new LinkEventType("MOUSE_UP", "onMouseUp");
-
-    private final String _name;
-
-    private final String _attributeName;
-    
-    /**
-     * Constructs a new type of event. The name should match the static final variable (i.e.,
-     * MOUSE_OVER) and the attributeName is the name of the HTML attribute to be managed (i.e.,
-     * "onMouseOver").
-     * <p>
-     * This method is protected so that subclasses can be created to provide additional managed
-     * event types.
-     */
-
-    protected LinkEventType(String name, String attributeName)
-    {
-
-        _name = name;
-        _attributeName = attributeName;
-    }
-
-    /**
-     * Returns the name of the HTML attribute corresponding to this type.
-     */
-
-    public String getAttributeName()
-    {
-        return _attributeName;
-    }
-
-    public String toString()
-    {
-        return "LinkEventType[" + _name + "]";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBlock.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBlock.java
deleted file mode 100644
index cc26af4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBlock.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Renders the text and components wrapped by a {@link Block}component. [ <a
- * href="../../../../../ComponentReference/RenderBlock.html">Component Reference
- * </a>]
- * <p>
- * It is possible for an RenderBlock to obtain a Block from a page
- * <em>other than</em> the render page. This works, even when the Block
- * contains links, forms and form components. The action and direct services
- * will create URLs that properly address this situation.
- * <p>
- * However, because the rendering page can't know ahead of time about these
- * foreign Blocks, {@link org.apache.tapestry.event.PageBeginRenderListener} and
- * {@link org.apache.tapestry.event.PageEndRenderListener} methods (for
- * components and objects of the foreign page) via RenderBlock will <em>not</em>
- * be executed. This specifically affects the methods of the
- * {@link org.apache.tapestry.event.PageBeginRenderListener} and
- * {@link org.apache.tapestry.event.PageEndRenderListener} interfaces.
- * <p>
- * Before rendering its {@link Block}, RenderBlock will set itself as the
- * Block's inserter, and will reset the inserter after the {@link Block}is
- * rendered. This gives the components contained in the {@link Block}access to
- * its inserted environment via the RenderBlock. In particular this allows the
- * contained components to access the informal parameters of the RenderBlock
- * which effectively allows parameters to be passed to the components contained
- * in a Block.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class RenderBlock extends AbstractComponent
-{
-
-    /**
-     * If block is not null, then
-     * {@link Block#renderForComponent(IMarkupWriter, IRequestCycle, IComponent)}
-     * is invoked.
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Block block = getBlock();
-
-        if (block == null) return;
-
-        block.renderForComponent(writer, cycle, this);
-    }
-
-    public abstract Block getBlock();
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBlock.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBlock.jwc
deleted file mode 100644
index acf25be..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBlock.jwc
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.components.RenderBlock" 
-	allow-body="no" 
-	allow-informal-parameters="yes">
-	
-	<description>
-    Renders the body of a Block component, which may be selected dynamically.
-    The Block may be on the same page as the RenderBlock or on another page entirely. 
-	</description>
-
-  <parameter name="block" required="yes"/>
-  	
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBody.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBody.java
deleted file mode 100644
index d2ff2d1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBody.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.internal.Component;
-
-/**
- * Renders the text and components wrapped by a component. [<a
- * href="../../../../../ComponentReference/RenderBody.html">Component Reference</a>]
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class RenderBody extends AbstractComponent
-{
-
-    /**
-     * Finds this <code>RenderBody</code>'s container, and invokes
-     * {@link IComponent#renderBody(IMarkupWriter, IRequestCycle)} on it.
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IComponent container = getContainer();
-
-        container.renderBody(writer, cycle);
-    }
-
-    public IRender[] getContainedRenderers()
-    {
-        Component container = (Component) getContainer();
-
-        return container.getInnerRenderers();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBody.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBody.jwc
deleted file mode 100644
index c688ffa..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/RenderBody.jwc
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification 
-	class="org.apache.tapestry.components.RenderBody" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-	
-	<description>
-    Renders the body (static HTML and components) wrapped by the container of the
-    RenderBody component. Components which have HTML templates and can wrap other
-    elements should include exactly one RenderBody component in their template.
-	</description>
-	
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/package.html
deleted file mode 100644
index 3b6edfb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/components/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Basic, fundamental components used to construct more complex components, or pages.  
-These components are independant of any particular markup language.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/data/AbstractDataSqueezerFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/data/AbstractDataSqueezerFilter.java
deleted file mode 100644
index 4abb9a6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/data/AbstractDataSqueezerFilter.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright May 31, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.data;
-
-import org.apache.tapestry.services.DataSqueezer;
-import org.apache.tapestry.services.DataSqueezerFilter;
-
-
-/**
- * A useful superclass for data squeezer filters.  Subclasses only have
- * to implement the single object versions of the squeeze/unsqueeze methods.
- * 
- * @author jcarman
- */
-public abstract class AbstractDataSqueezerFilter implements DataSqueezerFilter
-{
-
-    /**
-     * Merely calls squeeze(Object,DataSqueezer) on each object in 
-     * the array. 
-     */
-    public String[] squeeze( Object[] objects, DataSqueezer next )
-    {
-        final String[] squeezed = new String[objects.length];
-        
-        for( int i = 0; i < squeezed.length; i++ ) {
-            
-            squeezed[i] = squeeze( objects[i], next );
-        }
-        
-        return squeezed;
-    }
-
-    /**
-     * Merely calls unsqueeze(String,DataSqueezer) on each object in
-     * the array. 
-     */
-    public Object[] unsqueeze( String[] strings, DataSqueezer next )
-    {
-        final Object[] unsqueezed = new Object[strings.length];
-        
-        for( int i = 0; i < unsqueezed.length; i++ ) {
-            
-            unsqueezed[i] = unsqueeze( strings[i], next );
-        }
-        
-        return unsqueezed;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/data/NullDataSqueezerFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/data/NullDataSqueezerFilter.java
deleted file mode 100644
index 479cf56..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/data/NullDataSqueezerFilter.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright May 31, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.data;
-
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Handles null data assumedly?
- * 
- * @author jcarman
- */
-public class NullDataSqueezerFilter extends AbstractDataSqueezerFilter
-{
-    private static final String NULL_STRING = "X";
-    
-    public String squeeze(Object data, DataSqueezer dataSqueezer)
-    {
-        if (data == null)
-            return NULL_STRING;
-        
-        return dataSqueezer.squeeze(data);
-    }
-
-    public Object unsqueeze(String string, DataSqueezer dataSqueezer)
-    {
-        if (NULL_STRING.equals(string))
-            return null;
-        
-        return dataSqueezer.unsqueeze(string);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/data/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/data/package.html
deleted file mode 100644
index 1fc7f88..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/data/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Data Squeezer filters.
-</p>
-
-@author James Carman
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/CookieStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/CookieStrategy.java
deleted file mode 100644
index d707112..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/CookieStrategy.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import javax.servlet.http.Cookie;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class CookieStrategy implements DescribableStrategy
-{
-
-    public void describeObject(Object object, DescriptionReceiver receiver)
-    {
-        Cookie cookie = (Cookie) object;
-
-        // All other cookie information besides name and value
-        // is null/default when the cookie is obtained from the
-        // HttpServletRequest. The values are set when writing
-        // a new cookie to the client.
-
-        receiver.title(cookie.getName() + "=" + cookie.getValue());
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DefaultRenderStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DefaultRenderStrategy.java
deleted file mode 100644
index f692c34..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DefaultRenderStrategy.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Default implementation that delegates to the
- * {@link org.apache.tapestry.describe.HTMLDescriber} service.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DefaultRenderStrategy implements RenderStrategy
-{
-
-    private HTMLDescriber _describer;
-
-    /**
-     * Invokes {@link HTMLDescriber#describeObject(Object, IMarkupWriter)}.
-     */
-    public void renderObject(Object object, IMarkupWriter writer,
-            IRequestCycle cycle)
-    {
-        _describer.describeObject(object, writer);
-    }
-
-    public void setDescriber(HTMLDescriber describer)
-    {
-        _describer = describer;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DefaultStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DefaultStrategy.java
deleted file mode 100644
index 6120ec5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DefaultStrategy.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-/**
- * Catch-all implementation (for java.lang.Object) that does nothing.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DefaultStrategy implements DescribableStrategy
-{
-
-    public void describeObject(Object object, DescriptionReceiver receiver)
-    {
-        // Does nothing, which results in the object's toString().
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/Describable.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/Describable.java
deleted file mode 100644
index 21820f0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/Describable.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-/**
- * An object that can describe its properties to a
- * {@link org.apache.tapestry.describe.DescriptionReceiver}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface Describable
-{
-
-    /**
-     * Invoked to have the receiver describe itself (largely in terms of
-     * properties and values). If the caller does not invoke any methods on the
-     * receiver, then the a default description of the caller will be used
-     * (based on <code>toString()</code>.
-     */
-    void describeTo(DescriptionReceiver receiver);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescribableStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescribableStrategy.java
deleted file mode 100644
index 40d1e38..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescribableStrategy.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-/**
- * Strategy class allowing objects that don't implement
- * {@link org.apache.tapestry.describe.Describable} to be described.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface DescribableStrategy
-{
-
-    void describeObject(Object object, DescriptionReceiver receiver);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescribeMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescribeMessages.java
deleted file mode 100644
index 1f9e5ea..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescribeMessages.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class DescribeMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(DescribeMessages.class);
-
-    /* defeat instantiation */
-    private DescribeMessages() { }
-    
-    static String mustSetTitleBeforeSection()
-    {
-        return _formatter.getMessage("must-set-title-before-section");
-    }
-
-    static String setTitleOnce()
-    {
-        return _formatter.getMessage("set-title-once");
-    }
-
-    static String mustSetTitleBeforeProperty()
-    {
-        return _formatter.getMessage("must-set-title-before-property");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescribeStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescribeStrings.properties
deleted file mode 100644
index 5d1e60d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescribeStrings.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-must-set-title-before-section=The object's title must be specified before starting a section.
-set-title-once=The object's title may be specified only once.
-must-set-title-before-property=The object's title must be specified before emitting a property.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescriptionReceiver.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescriptionReceiver.java
deleted file mode 100644
index 869f8be..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/DescriptionReceiver.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import java.util.Collection;
-
-/**
- * An object that is provided with a description of another object. The receiver
- * will format this information.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface DescriptionReceiver
-{
-
-    /**
-     * Invoke to describe another object instead of the current object.
-     */
-
-    void describeAlternate(Object alternate);
-
-    /**
-     * Provides a title for the object; usually the object's class name.
-     * 
-     * @throws IllegalStateException
-     *             if called more than once (for the same object)
-     */
-    void title(String title);
-
-    /**
-     * Starts a new sub-section within the description. A description may have
-     * any number of sections (but sections do not nest). A second title is only
-     * emitted when the firstproperty within the section is emitted.
-     * 
-     * @throws IllegalStateException
-     *             if called before invoking {@link #title(String)}.
-     */
-    void section(String section);
-
-    /**
-     * Emits a key/value pair, describing a property of the object. The value
-     * will itself be described. This method is overridden for scalar property
-     * types.
-     * 
-     * @throws IllegalStateException
-     *             if called before invoking {@link #title(String)}
-     */
-    void property(String key, Object value);
-
-    void property(String key, boolean value);
-
-    void property(String key, byte value);
-
-    void property(String key, short value);
-
-    void property(String key, int value);
-
-    void property(String key, long value);
-
-    void property(String key, float value);
-
-    void property(String key, double value);
-
-    void property(String key, char value);
-
-    /**
-     * Emits a list of values for the key. Each value will be described. Emits
-     * nothing if the array is null.
-     */
-    void array(String key, Object[] values);
-
-    /**
-     * As with {@link #array(String, Object[])}, but the values are in a
-     * collection (which may be null, to emit nothing).
-     */
-
-    void collection(String key, Collection values);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriber.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriber.java
deleted file mode 100644
index ea46930..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriber.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- * Service used to describe an object to a markup writer as HTML (typically, as a &lt;table&gt;).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface HTMLDescriber
-{
-    void describeObject(Object object, IMarkupWriter writer);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriberImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriberImpl.java
deleted file mode 100644
index 9737603..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriberImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class HTMLDescriberImpl implements HTMLDescriber
-{
-
-    private RootDescriptionReceiverFactory _receiverFactory;
-
-    public void describeObject(Object object, IMarkupWriter writer)
-    {
-        RootDescriptionReciever dr = _receiverFactory
-                .newRootDescriptionReceiver(writer);
-
-        dr.describe(object);
-    }
-
-    public void setReceiverFactory(
-            RootDescriptionReceiverFactory receiverFactory)
-    {
-        _receiverFactory = receiverFactory;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriptionReceiver.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriptionReceiver.java
deleted file mode 100644
index 1d935d3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriptionReceiver.java
+++ /dev/null
@@ -1,371 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- * Implementation of {@link org.apache.tapestry.describe.DescriptionReceiver}
- * that produces HTML output using a {@link org.apache.tapestry.IMarkupWriter}.
- * <p>
- * TODO: Make {@link #describeAlternate(Object)} exclusive with the other
- * methods {@link #title(String)}, {@link #property(String, Object)}, etc.
- * </p>
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class HTMLDescriptionReceiver implements RootDescriptionReciever
-{
-
-    // Emitted for null values.
-
-    static final String NULL_VALUE = "<NULL>";
-
-    private final IMarkupWriter _writer;
-
-    private boolean _emitDefault = true;
-
-    private String _title;
-
-    private String _section;
-
-    private DescribableStrategy _strategy;
-
-    private HTMLDescriptionReceiverStyles _styles;
-
-    private boolean _even = true;
-
-    public HTMLDescriptionReceiver(IMarkupWriter writer,
-            DescribableStrategy adapter)
-    {
-        this(writer, adapter, new HTMLDescriptionReceiverStyles());
-    }
-
-    public HTMLDescriptionReceiver(IMarkupWriter writer,
-            DescribableStrategy strategy, HTMLDescriptionReceiverStyles styles)
-    {
-        Defense.notNull(writer, "writer");
-        Defense.notNull(strategy, "strategy");
-        Defense.notNull(styles, "styles");
-
-        _writer = writer;
-        _strategy = strategy;
-        _styles = styles;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.tapestry.describe.RootDescriptionReciever#describe(java.lang.Object)
-     */
-    public void describe(Object object)
-    {
-        if (object == null)
-        {
-            _writer.print(NULL_VALUE);
-            return;
-        }
-
-        _strategy.describeObject(object, this);
-
-        finishUp(object);
-    }
-
-    public void describeAlternate(Object alternate)
-    {
-        _strategy.describeObject(alternate, this);
-    }
-
-    public void finishUp()
-    {
-        // When false, a <table> was started, which must be closed.
-
-        if (!_emitDefault) _writer.end("table");
-
-        _writer.println();
-
-        _emitDefault = true;
-        _title = null;
-        _section = null;
-        _even = true;
-    }
-
-    void finishUp(Object object)
-    {
-        if (_emitDefault)
-        {
-            String value = _title != null ? _title : object.toString();
-
-            _writer.print(value);
-        }
-
-        finishUp();
-    }
-
-    public void title(String title)
-    {
-        Defense.notNull(title, "title");
-
-        if (_title != null)
-            throw new IllegalStateException(DescribeMessages.setTitleOnce());
-
-        _title = title;
-    }
-
-    public void section(String section)
-    {
-        Defense.notNull(section, "section");
-
-        if (_title == null)
-            throw new IllegalStateException(DescribeMessages
-                    .mustSetTitleBeforeSection());
-
-        _section = section;
-    }
-
-    private void assertTitleSet()
-    {
-        if (_title == null)
-            throw new IllegalStateException(DescribeMessages
-                    .mustSetTitleBeforeProperty());
-    }
-
-    /**
-     * Invoked to ensure that the section portion has been output, before any
-     * properties within the section are output.
-     */
-
-    private void emitSection()
-    {
-        if (_emitDefault)
-        {
-            _emitDefault = false;
-
-            _writer.begin("div");
-            _writer.attribute("class", _styles.getHeaderClass());
-            _writer.print(_title);
-            _writer.end();
-            _writer.println();
-
-            _writer.begin("table");
-            _writer.attribute("class", _styles.getTableClass());
-            _writer.println();
-
-            _even = true;
-        }
-
-        if (_section != null)
-        {
-            _writer.begin("tr");
-            _writer.attribute("class", _styles.getSubheaderClass());
-            _writer.begin("th");
-            _writer.attribute("colspan", 2);
-            _writer.print(_section);
-            _writer.end("tr");
-            _writer.println();
-
-            _section = null;
-
-            _even = true;
-        }
-
-    }
-
-    private void pair(String key, String value)
-    {
-        assertTitleSet();
-        emitSection();
-
-        _writer.begin("tr");
-        writeRowClass();
-
-        _writer.begin("th");
-        _writer.print(key);
-        _writer.end();
-        _writer.begin("td");
-        _writer.print(value);
-        _writer.end("tr");
-        _writer.println();
-
-    }
-
-    private void writeRowClass()
-    {
-        _writer.attribute("class", _even ? "even" : "odd");
-        _even = !_even;
-    }
-
-    public void property(String key, Object value)
-    {
-        Defense.notNull(key, "key");
-
-        assertTitleSet();
-        emitSection();
-
-        _writer.begin("tr");
-        writeRowClass();
-
-        _writer.begin("th");
-        _writer.print(key);
-        _writer.end();
-        _writer.begin("td");
-
-        describeNested(value);
-
-        _writer.end("tr");
-        _writer.println();
-    }
-
-    private void describeNested(Object value)
-    {
-        if (value == null)
-        {
-            _writer.print(NULL_VALUE);
-            return;
-        }
-
-        new HTMLDescriptionReceiver(_writer, _strategy, _styles).describe(value);
-    }
-
-    public void property(String key, boolean value)
-    {
-        Defense.notNull(key, "key");
-
-        // toString is JDK 1.4 and above, so we'll provide our own.
-
-        pair(key, value ? "true" : "false");
-    }
-
-    public void property(String key, byte value)
-    {
-        Defense.notNull(key, "key");
-
-        pair(key, Byte.toString(value));
-    }
-
-    public void property(String key, short value)
-    {
-        Defense.notNull(key, "key");
-
-        pair(key, Short.toString(value));
-    }
-
-    public void property(String key, int value)
-    {
-        Defense.notNull(key, "key");
-
-        pair(key, Integer.toString(value));
-    }
-
-    public void property(String key, long value)
-    {
-        Defense.notNull(key, "key");
-
-        pair(key, Long.toString(value));
-    }
-
-    public void property(String key, float value)
-    {
-        Defense.notNull(key, "key");
-
-        pair(key, Float.toString(value));
-    }
-
-    public void property(String key, double value)
-    {
-        Defense.notNull(key, "key");
-
-        pair(key, Double.toString(value));
-    }
-
-    public void property(String key, char value)
-    {
-        Defense.notNull(key, "key");
-
-        pair(key, Character.toString(value));
-    }
-
-    public void array(String key, Object[] values)
-    {
-        Defense.notNull(key, "key");
-
-        assertTitleSet();
-
-        if (values == null || values.length == 0) return;
-
-        emitSection();
-        
-        for(int i = 0; i < values.length; i++)
-        {
-            _writer.begin("tr");
-            writeRowClass();
-
-            _writer.begin("th");
-
-            if (i == 0) _writer.print(key);
-
-            _writer.end();
-
-            _writer.begin("td");
-
-            describeNested(values[i]);
-
-            _writer.end("tr");
-            _writer.println();
-        }
-
-    }
-
-    public void collection(String key, Collection values)
-    {
-        Defense.notNull(key, "key");
-        
-        assertTitleSet();
-        
-        if (values == null || values.isEmpty()) return;
-        
-        emitSection();
-        
-        Iterator i = new ArrayList(values).iterator();
-        boolean first = true;
-        
-        while(i.hasNext())
-        {
-            _writer.begin("tr");
-            writeRowClass();
-            
-            _writer.begin("th");
-
-            if (first) 
-                _writer.print(key);
-            
-            _writer.end();
-            _writer.begin("td");
-            
-            describeNested(i.next());
-            
-            _writer.end("tr");
-            _writer.println();
-            
-            first = false;
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriptionReceiverStyles.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriptionReceiverStyles.java
deleted file mode 100644
index e18ccb1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HTMLDescriptionReceiverStyles.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-/**
- * Holds the style information used by
- * {@link org.apache.tapestry.describe.HTMLDescriptionReceiver}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class HTMLDescriptionReceiverStyles
-{
-
-    private String _tableClass = "described-object";
-
-    private String _headerClass = "described-object-title";
-
-    private String _subheaderClass = "section";
-
-    public String getHeaderClass()
-    {
-        return _headerClass;
-    }
-
-    public void setHeaderClass(String headerClass)
-    {
-        _headerClass = headerClass;
-    }
-
-    public String getSubheaderClass()
-    {
-        return _subheaderClass;
-    }
-
-    public void setSubheaderClass(String subheaderClass)
-    {
-        _subheaderClass = subheaderClass;
-    }
-
-    public String getTableClass()
-    {
-        return _tableClass;
-    }
-
-    public void setTableClass(String tableClass)
-    {
-        _tableClass = tableClass;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HttpServletRequestStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HttpServletRequestStrategy.java
deleted file mode 100644
index a29eb93..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HttpServletRequestStrategy.java
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.tapestry.web.WebUtils;
-
-/**
- * Strategy for describing an {@link javax.servlet.http.HttpServletRequest}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class HttpServletRequestStrategy implements DescribableStrategy
-{
-
-    public void describeObject(Object object, DescriptionReceiver receiver)
-    {
-        HttpServletRequest request = (HttpServletRequest) object;
-
-        receiver.title("HttpServletRequest");
-        receiver.property("authType", request.getAuthType());
-        receiver.property("characterEncoding", request.getCharacterEncoding());
-        receiver.property("contentLength", request.getContentLength());
-        receiver.property("contextPath", request.getContextPath());
-        receiver.property("contentType", request.getContentType());
-        receiver.array("cookies", request.getCookies());
-        receiver.property("locale", request.getLocale());
-        receiver.property("method", request.getMethod());
-        receiver.property("pathInfo", request.getPathInfo());
-        receiver.property("pathTranslated", request.getPathTranslated());
-        receiver.property("protocol", request.getProtocol());
-        receiver.property("queryString", request.getQueryString());
-        receiver.property("requestURI", request.getRequestURI());
-        receiver.property("scheme", request.getScheme());
-        receiver.property("secure", request.isSecure());
-        receiver.property("serverName", request.getServerName());
-        receiver.property("serverPort", request.getServerPort());
-        receiver.property("servletPath", request.getServletPath());
-        receiver.property("userPrincipal", request.getUserPrincipal());
-
-        receiver.section("Parameters");
-
-        List keys = WebUtils.toSortedList(request.getParameterNames());
-        Iterator i = keys.iterator();
-        while(i.hasNext())
-        {
-            String key = (String) i.next();
-            String[] values = request.getParameterValues(key);
-
-            receiver.array(key, values);
-        }
-
-        receiver.section("Headers");
-        keys = WebUtils.toSortedList(request.getHeaderNames());
-        i = keys.iterator();
-        while(i.hasNext())
-        {
-            String key = (String) i.next();
-            String value = request.getHeader(key);
-
-            receiver.property(key, value);
-        }
-
-        receiver.section("Attributes");
-        keys = WebUtils.toSortedList(request.getAttributeNames());
-        i = keys.iterator();
-        while(i.hasNext())
-        {
-            String key = (String) i.next();
-            Object value = request.getAttribute(key);
-
-            receiver.property(key, value);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HttpSessionStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HttpSessionStrategy.java
deleted file mode 100644
index 2563813..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/HttpSessionStrategy.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import java.util.Date;
-import java.util.Iterator;
-
-import javax.servlet.http.HttpSession;
-
-import org.apache.tapestry.web.WebUtils;
-
-/**
- * Describes an {@link javax.servlet.http.HttpSession}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class HttpSessionStrategy implements DescribableStrategy
-{
-
-    public void describeObject(Object object, DescriptionReceiver receiver)
-    {
-        HttpSession session = (HttpSession) object;
-
-        receiver.title("HttpSession");
-
-        receiver.property("creationTime", new Date(session.getCreationTime()));
-        receiver.property("id", session.getId());
-        receiver.property("lastAccessedTime", new Date(session
-                .getLastAccessedTime()));
-        receiver.property("maxInactiveInterval", session
-                .getMaxInactiveInterval());
-        receiver.property("new", session.isNew());
-
-        receiver.section("Attributes");
-        Iterator i = WebUtils.toSortedList(session.getAttributeNames())
-                .iterator();
-        while(i.hasNext())
-        {
-            String key = (String) i.next();
-            receiver.property(key, session.getAttribute(key));
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/LocationRenderStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/LocationRenderStrategy.java
deleted file mode 100644
index cba172e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/LocationRenderStrategy.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.LineNumberReader;
-import java.io.Reader;
-import java.net.URL;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Adapter for displaying {@link org.apache.hivemind.Location}&nbsp;objects as
- * HTML. This may include showing the content of the
- * {@link org.apache.hivemind.Resource}, with the line indicated in the
- * Location highlighted.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class LocationRenderStrategy implements RenderStrategy
-{
-
-    /**
-     * Lines before and after the actual location to display.
-     */
-    private static final int RANGE = 5;
-
-    public void renderObject(Object object, IMarkupWriter writer,
-            IRequestCycle cycle)
-    {
-        Location l = (Location) object;
-
-        // Always print out the location as a string.
-
-        writer.print(l.toString());
-
-        int lineNumber = l.getLineNumber();
-
-        if (lineNumber < 1) return;
-
-        URL url = l.getResource().getResourceURL();
-
-        if (url == null) return;
-
-        writeResourceContent(writer, url, lineNumber);
-    }
-
-    private void writeResourceContent(IMarkupWriter writer, URL url,
-            int lineNumber)
-    {
-        LineNumberReader reader = null;
-
-        try
-        {
-            reader = new LineNumberReader(new BufferedReader(
-                    new InputStreamReader(url.openStream())));
-
-            writer.beginEmpty("br");
-            writer.begin("table");
-            writer.attribute("class", "location-content");
-
-            while(true)
-            {
-                String line = reader.readLine();
-
-                if (line == null) break;
-
-                int currentLine = reader.getLineNumber();
-
-                if (currentLine > lineNumber + RANGE) break;
-
-                if (currentLine < lineNumber - RANGE) continue;
-
-                writer.begin("tr");
-
-                if (currentLine == lineNumber)
-                    writer.attribute("class", "target-line");
-
-                writer.begin("td");
-                writer.attribute("class", "line-number");
-                writer.print(currentLine);
-                writer.end();
-
-                writer.begin("td");
-                writer.print(line);
-                writer.end("tr");
-                writer.println();
-            }
-
-            reader.close();
-            reader = null;
-        }
-        catch (Exception ex)
-        {
-            // Ignore it.
-        }
-        finally
-        {
-            writer.end("table");
-            close(reader);
-        }
-    }
-
-    private void close(Reader reader)
-    {
-        try
-        {
-            if (reader != null) reader.close();
-        }
-        catch (IOException ex)
-        {
-            // Ignore
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/NativeStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/NativeStrategy.java
deleted file mode 100644
index 022e86b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/NativeStrategy.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-/**
- * Implementation for objects that natively implement
- * {@link org.apache.tapestry.describe.Describable}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class NativeStrategy implements DescribableStrategy
-{
-
-    public void describeObject(Object object, DescriptionReceiver receiver)
-    {
-        Describable d = (Describable) object;
-
-        d.describeTo(receiver);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ObjectArrayRenderStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ObjectArrayRenderStrategy.java
deleted file mode 100644
index dfbba47..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ObjectArrayRenderStrategy.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.describe;

-

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-

-/**

- * Renders an object array as an unordered list; each element is recursively rendered.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class ObjectArrayRenderStrategy implements RenderStrategy

-{

-    private RenderStrategy _renderStrategy;

-

-    public void renderObject(Object object, IMarkupWriter writer, IRequestCycle cycle)

-    {

-        Object[] array = (Object[]) object;

-

-        if (array.length == 0)

-        {

-            writer.begin("em");

-            writer.print("empty list");

-            writer.end();

-            return;

-        }

-

-        writer.begin("ul");

-

-        for (int i = 0; i < array.length; i++)

-        {

-            writer.begin("li");

-

-            Object item = array[i];

-

-            if (item == null)

-            {

-                writer.begin("em");

-                writer.print("<NULL>");

-                writer.end();

-            }

-            else

-                _renderStrategy.renderObject(item, writer, cycle);

-

-            writer.end();

-

-        }

-

-        writer.end();

-    }

-

-    public void setRenderStrategy(RenderStrategy renderStrategy)

-    {

-        _renderStrategy = renderStrategy;

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/PreformattedRenderStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/PreformattedRenderStrategy.java
deleted file mode 100644
index a4404e2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/PreformattedRenderStrategy.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.describe;

-

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-

-/**

- * Render stategy for objects whose toString() produces a good deal of text, where that text is

- * easier to read if preformmatted (using the HTML &lt;pre&gt; element).

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class PreformattedRenderStrategy implements RenderStrategy

-{

-    public void renderObject(Object object, IMarkupWriter writer, IRequestCycle cycle)

-    {

-        writer.begin("pre");

-        writer.print(object.toString());

-        writer.end();

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderBridge.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderBridge.java
deleted file mode 100644
index 73032c5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderBridge.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Implements {@link IRender}&nbsp;for a particular object by delegating to a
- * {@link org.apache.tapestry.describe.RenderStrategy}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class RenderBridge implements IRender
-{
-
-    private Object _object;
-
-    private RenderStrategy _strategy;
-
-    public RenderBridge(Object object, RenderStrategy strategy)
-    {
-        Defense.notNull(strategy, "strategy");
-
-        _object = object;
-        _strategy = strategy;
-    }
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        _strategy.renderObject(_object, writer, cycle);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderStrategy.java
deleted file mode 100644
index 5bfbd7e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderStrategy.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * A strategy interface for rendering an object (even if it doesn't implement
- * {@link org.apache.tapestry.IRender}).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface RenderStrategy
-{
-
-    void renderObject(Object object, IMarkupWriter writer,
-            IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderableAdapterFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderableAdapterFactory.java
deleted file mode 100644
index 31421bd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderableAdapterFactory.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import org.apache.tapestry.IRender;
-
-/**
- * A source of light-weight objects that can render a particular object. This is
- * a more pure implementation of the GoF Adapter pattern, based on wrapping a
- * {@link org.apache.tapestry.describe.RenderStrategy}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface RenderableAdapterFactory
-{
-
-    /**
-     * Returns an object that can render the input object. Simple
-     * implementations will just just output a string; complex implementations
-     * may output complex markup.
-     */
-    IRender getRenderableAdaptor(Object object);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderableAdapterFactoryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderableAdapterFactoryImpl.java
deleted file mode 100644
index c0c6f03..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RenderableAdapterFactoryImpl.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import org.apache.tapestry.IRender;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class RenderableAdapterFactoryImpl implements RenderableAdapterFactory
-{
-
-    private RenderStrategy _strategy;
-
-    /**
-     * Returns a new instance of {@link RenderBridge}.
-     */
-    public IRender getRenderableAdaptor(Object object)
-    {
-        return new RenderBridge(object, _strategy);
-    }
-
-    public void setStrategy(RenderStrategy adapter)
-    {
-        _strategy = adapter;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ReportStatusHub.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ReportStatusHub.java
deleted file mode 100644
index 31c554b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ReportStatusHub.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.describe;

-

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.event.ReportStatusListener;

-

-/**

- * Service for collecting together status information across the framework;

- * service implementations implement the

- * {@link org.apache.tapestry.event.ReportStatusListener} interface and register

- * themselves as listeners here. When desired, the

- * {@link #fireReportStatus(IMarkupWriter)} event will invoke the listener

- * method on each registered object.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public interface ReportStatusHub

-{

-

-    /**

-     * Adds the listener; listeners will be invoked in the order in which they

-     * are added. <strong>Note: only service implementation that are singletons

-     * should be report status listeners. Threaded or pooled implementations

-     * should not be added; or should be careful to add and remove themselves

-     * from the hub directly.</strong>

-     * 

-     * @param listener

-     */

-    void addReportStatusListener(ReportStatusListener listener);

-

-    void removeReportStatusListener(ReportStatusListener listener);

-

-    /**

-     * Generates an HTML status report by invoking

-     * {@link ReportStatusListener#reportStatus(org.apache.tapestry.event.ReportStatusEvent)} on each

-     * registered listener.

-     * 

-     * @param writer

-     *            a markup writer to send the report to.

-     */

-    void fireReportStatus(IMarkupWriter writer);

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ReportStatusHubImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ReportStatusHubImpl.java
deleted file mode 100644
index 0a58745..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ReportStatusHubImpl.java
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.describe;

-

-import java.util.ArrayList;

-import java.util.Iterator;

-import java.util.List;

-

-import org.apache.hivemind.util.Defense;

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.event.ReportStatusEvent;

-import org.apache.tapestry.event.ReportStatusListener;

-

-/**

- * Implementation of the tapestry.describe.ReportStatusHub service.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class ReportStatusHubImpl implements ReportStatusHub

-{

-    private List _listeners = new ArrayList();

-

-    private RootDescriptionReceiverFactory _receiverFactory;

-

-    public synchronized void addReportStatusListener(ReportStatusListener listener)

-    {

-        Defense.notNull(listener, "listener");

-

-        _listeners.add(listener);

-    }

-

-    public synchronized void removeReportStatusListener(ReportStatusListener listener)

-    {

-        Defense.notNull(listener, "listener");

-

-        _listeners.remove(listener);

-    }

-

-    public synchronized void fireReportStatus(IMarkupWriter writer)

-    {

-        if (_listeners.isEmpty())

-            return;

-

-        RootDescriptionReciever receiver = _receiverFactory.newRootDescriptionReceiver(writer);

-

-        ReportStatusEvent event = new ReportStatusEvent(this, receiver);

-

-        Iterator i = _listeners.iterator();

-

-        while (i.hasNext())

-        {

-            ReportStatusListener listener = (ReportStatusListener) i.next();

-

-            listener.reportStatus(event);

-

-            receiver.finishUp();

-        }

-    }

-

-    public void setReceiverFactory(RootDescriptionReceiverFactory receiverFactory)

-    {

-        _receiverFactory = receiverFactory;

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RootDescriptionReceiverFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RootDescriptionReceiverFactory.java
deleted file mode 100644
index 9d4628a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RootDescriptionReceiverFactory.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.describe;

-

-import org.apache.tapestry.IMarkupWriter;

-

-/**

- * Creates a new instance of

- * {@link org.apache.tapestry.describe.HTMLDescriptionReceiver} around a

- * provided {@link org.apache.tapestry.IMarkupWriter}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public interface RootDescriptionReceiverFactory

-{

-

-    RootDescriptionReciever newRootDescriptionReceiver(

-            IMarkupWriter writer);

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RootDescriptionReceiverFactoryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RootDescriptionReceiverFactoryImpl.java
deleted file mode 100644
index cba837c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RootDescriptionReceiverFactoryImpl.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.describe;

-

-import org.apache.tapestry.IMarkupWriter;

-

-/**

- * Implementation of service tapestry.describe.RootDescriptionReceiverFactory; this represents a

- * central location to configure each created description receiver with the correct

- * {@link org.apache.tapestry.describe.DescribableStrategy} and set of

- * {@link org.apache.tapestry.describe.HTMLDescriptionReceiverStyles}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class RootDescriptionReceiverFactoryImpl implements RootDescriptionReceiverFactory

-{

-    private DescribableStrategy _strategy;

-

-    private HTMLDescriptionReceiverStyles _styles = new HTMLDescriptionReceiverStyles();

-

-    public RootDescriptionReciever newRootDescriptionReceiver(IMarkupWriter writer)

-    {

-        return new HTMLDescriptionReceiver(writer, _strategy, _styles);

-    }

-

-    public void setStrategy(DescribableStrategy strategy)

-    {

-        _strategy = strategy;

-    }

-

-    public void setTableClass(String tableClass)

-    {

-        _styles.setTableClass(tableClass);

-    }

-

-    public void setHeaderClass(String headerClass)

-    {

-        _styles.setHeaderClass(headerClass);

-    }

-

-    public void setSubheaderClass(String subheaderClass)

-    {

-        _styles.setSubheaderClass(subheaderClass);

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RootDescriptionReciever.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RootDescriptionReciever.java
deleted file mode 100644
index 5eb8fd6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/RootDescriptionReciever.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.describe;

-

-/**

- * Extended version of {@link org.apache.tapestry.describe.DescriptionReceiver}

- * that adds the ability to describe the root object, and to finish the

- * description of an object (allowing the same receiver to be used to describe

- * several objects).

- * 

- * @author Howard M. Lewis Ship

- */

-public interface RootDescriptionReciever extends DescriptionReceiver

-{

-

-    /**

-     * Describes the object, using a {@link DescribableStrategy}, or just the

-     * object's toString() if there is no strategy for the object. Automatically

-     * invokes {@link #finishUp()} when done.

-     * 

-     * @param object

-     *            to be described, which may be null

-     */

-    void describe(Object object);

-

-    /**

-     * Invoked after one object has been fully described. Ends a &lt;table&gt;,

-     * if one has been started, and resets the receiver to begin a new object.

-     */

-    void finishUp();

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ServletContextStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ServletContextStrategy.java
deleted file mode 100644
index 91180a5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ServletContextStrategy.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import java.util.Iterator;
-
-import javax.servlet.ServletContext;
-
-import org.apache.tapestry.web.WebUtils;
-
-/**
- * Describes a {@link javax.servlet.ServletContext}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ServletContextStrategy implements DescribableStrategy
-{
-
-    public void describeObject(Object object, DescriptionReceiver receiver)
-    {
-        ServletContext context = (ServletContext) object;
-
-        receiver.title("ServletContext");
-
-        receiver.property("serverInfo", context.getServerInfo());
-        receiver.property("version", context.getMajorVersion() + "."
-                + context.getMinorVersion());
-
-        receiver.section("Attributes");
-
-        Iterator i = WebUtils.toSortedList(context.getAttributeNames())
-                .iterator();
-        while(i.hasNext())
-        {
-            String key = (String) i.next();
-
-            receiver.property(key, context.getAttribute(key));
-        }
-
-        receiver.section("Initialization Parameters");
-        i = WebUtils.toSortedList(context.getInitParameterNames()).iterator();
-        while(i.hasNext())
-        {
-            String key = (String) i.next();
-
-            receiver.property(key, context.getInitParameter(key));
-        }
-
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ServletStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ServletStrategy.java
deleted file mode 100644
index 97c7e2c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/ServletStrategy.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import java.util.Iterator;
-
-import javax.servlet.Servlet;
-import javax.servlet.ServletConfig;
-
-import org.apache.tapestry.web.WebUtils;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ServletStrategy implements DescribableStrategy
-{
-
-    public void describeObject(Object object, DescriptionReceiver receiver)
-    {
-        Servlet servlet = (Servlet) object;
-        ServletConfig config = servlet.getServletConfig();
-
-        receiver.title("HttpServlet");
-        receiver.property("servletInfo", servlet.getServletInfo());
-        receiver.property("servletName", config.getServletName());
-
-        receiver.section("Initialization Parameters");
-
-        Iterator i = WebUtils.toSortedList(config.getInitParameterNames())
-                .iterator();
-        while(i.hasNext())
-        {
-            String key = (String) i.next();
-
-            receiver.property(key, config.getInitParameter(key));
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/package.html
deleted file mode 100644
index a882fb0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/describe/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Services related to describing objects and graphs of objects; primarily used by the
-    {@link org.apache.tapestry.pages.Exception} page.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/AbstractWidget.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/AbstractWidget.java
deleted file mode 100644
index 3e9fd69..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/AbstractWidget.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-
-/**
- * The base widget class for all dojo related widget components.
- *
- * @author jkuhnert
- */
-public abstract class AbstractWidget extends AbstractComponent implements IWidget
-{
-    
-    public abstract void setDestroy(boolean destroy);
-    
-    /**
-     * Determined dynamically at runtime during rendering, informs widget implementations
-     * if they should destroy their client side widget equivalents or leave them in tact.
-     * 
-     * @return True if the widget should be destroyed on this render, false otherwise.
-     */
-    public abstract boolean getDestroy();
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if(!cycle.isRewinding()) {
-
-            if (!cycle.getResponseBuilder().isDynamic() 
-                    || cycle.getResponseBuilder().explicitlyContains(this)) {
-                
-                setDestroy(false);
-            } else {
-                
-                setDestroy(true);
-            }
-        }
-        
-        renderWidget(writer, cycle);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/AjaxShellDelegate.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/AjaxShellDelegate.java
deleted file mode 100644
index 872fc88..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/AjaxShellDelegate.java
+++ /dev/null
@@ -1,375 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
-import org.apache.tapestry.html.Shell;
-import org.apache.tapestry.json.JSONObject;
-
-import java.util.Locale;
-
-/**
- * The default rendering delegate responseible for include the dojo sources in
- * to the {@link Shell} component.
- */
-public class AjaxShellDelegate implements IRender {
-
-    /** Client side debug log level. */
-    public static final String BROWSER_LOG_DEBUG="DEBUG";
-    /** Client side info log level. */
-    public static final String BROWSER_LOG_INFO="INFO";
-    /** Client side warning log level. */
-    public static final String BROWSER_LOG_WARNING="WARNING";
-    /** Client side error log level. */
-    public static final String BROWSER_LOG_ERROR="ERROR";
-    /** Client side critical log level. */
-    public static final String BROWSER_LOG_CRITICAL="CRITICAL";
-
-    private static final String SYSTEM_NEWLINE= (String)java.security.AccessController.doPrivileged(
-      new sun.security.action.GetPropertyAction("line.separator"));
-
-    private IAsset _dojoSource;
-
-    private IAsset _dojoFormSource;
-
-    private IAsset _dojoWidgetSource;
-
-    private IAsset _dojoPath;
-
-    private IAsset _tapestrySource;
-
-    private IAsset _tapestryPath;
-
-    private boolean _parseWidgets;
-
-    private String _browserLogLevel = BROWSER_LOG_WARNING;
-
-    private boolean _debug;
-
-    private String _debugContainerId;
-
-    private boolean _consoleEnabled;
-
-    private boolean _preventBackButtonFix;
-
-    private boolean _debugAtAllCosts;
-
-    /** Default list of pre-bundled dojo supported locales */
-    protected String[] SUPPORTED_LOCALES = { "en-us", "de-de", "de", "en-gb",
-                                             "es-es", "es", "fr-fr", "fr", "zh-cn",
-                                             "zh-tw", "zh" , "it-it", "it", "ja-jp",
-                                             "ja", "ko-kr", "ko", "pt-br", "pt", "en", "xx"};
-
-    /**
-     * {@inheritDoc}
-     */
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // first configure dojo, has to happen before package include
-
-        JSONObject dojoConfig = new JSONObject();
-
-        // Debugging configuration , debugAtAlCosts causes the individual 
-        // .js files to included in the document head so that javascript errors
-        // are able to resolve to the context of the file instead of just "dojo.js"
-
-        if (_debug)
-        {
-            dojoConfig.put("isDebug", _debug);
-        }
-
-        if (_debugAtAllCosts)
-            dojoConfig.put("debugAtAllCosts", _debugAtAllCosts);
-        if (_debugContainerId != null)
-            dojoConfig.put("debugContainerId", _debugContainerId);
-
-        IPage page = cycle.getPage();
-
-        // The key to resolving everything out of the asset service
-
-        dojoConfig.put("baseRelativePath", _dojoPath.buildURL());
-
-        if (page.hasFormComponents())
-        {
-            dojoConfig.put("preventBackButtonFix", _preventBackButtonFix);
-        }
-        dojoConfig.put("parseWidgets", _parseWidgets);
-
-        // Supports setting up locale in dojo environment to match the requested page locale.
-        // (for things that use these settings, like DropdownDatePicker / date parsing / etc..
-
-        Locale locale = cycle.getPage().getLocale();
-
-        String localeStr = locale.getLanguage().toLowerCase()
-                           + ((locale.getCountry() != null && locale.getCountry().trim().length() > 0)
-                              ? "-" + locale.getCountry().toLowerCase()
-                              : "");
-
-        if (isLocaleSupported(localeStr))
-        {
-            dojoConfig.put("locale", localeStr);
-        }
-
-        // Write the required script includes and dojo.requires
-
-        StringBuffer str = new StringBuffer("<script type=\"text/javascript\">");
-        str.append("djConfig = ").append(dojoConfig.toString())
-          .append(" </script>")
-          .append(SYSTEM_NEWLINE).append(SYSTEM_NEWLINE);
-
-        // include the core dojo.js package
-
-        str.append("<script type=\"text/javascript\" src=\"")
-          .append(_dojoSource.buildURL()).append("\"></script>");
-
-        if (page.hasFormComponents())
-        {
-            str.append("<script type=\"text/javascript\" src=\"")
-              .append(_dojoFormSource.buildURL()).append("\"></script>");
-        }
-
-        if (page.hasWidgets())
-        {
-            str.append("<script type=\"text/javascript\" src=\"")
-              .append(_dojoWidgetSource.buildURL()).append("\"></script>");
-        }
-
-        // configure basic dojo properties , logging includes
-
-        if (_debug)
-        {
-            String logRequire = _consoleEnabled ? "dojo.require(\"dojo.debug.console\");" + SYSTEM_NEWLINE
-                                : "dojo.require(\"dojo.logging.Logger\");" + SYSTEM_NEWLINE;
-
-            str.append(SYSTEM_NEWLINE).append("<script type=\"text/javascript\">").append(SYSTEM_NEWLINE);
-            str.append(logRequire)
-              .append("dojo.log.setLevel(dojo.log.getLevel(\"").append(_browserLogLevel)
-              .append("\"));").append(SYSTEM_NEWLINE)
-              .append("</script>");
-        }
-
-        // module path registration to tapestry javascript sources
-
-        String tapestryUrl = _tapestryPath.buildURL();
-        if (tapestryUrl.endsWith("/"))
-        {
-            tapestryUrl = tapestryUrl.substring(0, tapestryUrl.length() - 1);
-        }
-
-        str.append(SYSTEM_NEWLINE).append("<script type=\"text/javascript\">").append(SYSTEM_NEWLINE)
-          .append("dojo.registerModulePath(\"tapestry\", \"")
-          .append(tapestryUrl).append("\");").append(SYSTEM_NEWLINE);
-        str.append("</script>").append(SYSTEM_NEWLINE);
-
-        // include core tapestry.js package
-
-        str.append("<script type=\"text/javascript\" src=\"")
-          .append(_tapestrySource.buildURL()).append("\"></script>");
-
-        // namespace registration
-
-        str.append(SYSTEM_NEWLINE).append("<script type=\"text/javascript\">").append(SYSTEM_NEWLINE);
-        str.append("dojo.require(\"tapestry.namespace\");").append(SYSTEM_NEWLINE)
-          .append("tapestry.requestEncoding='")
-          .append(cycle.getEngine().getOutputEncoding()).append("';")
-          .append(SYSTEM_NEWLINE).append("</script>");
-
-        writer.printRaw(str.toString());
-        writer.println();
-    }
-
-    /**
-     * Checks if the provided locale string matches one of the predefined {@link #SUPPORTED_LOCALES}
-     * in the dojo javascript library.
-     *
-     * @param locale
-     *          The Dojo formatted locale string to check.
-     *
-     * @return True if locale is supported and ok to define in dojoConfig - false otherwise.
-     */
-    protected boolean isLocaleSupported(String locale)
-    {
-        if (locale == null)
-            return false;
-
-        for (int i=0; i < SUPPORTED_LOCALES.length; i++)
-        {
-            if (locale.equals(SUPPORTED_LOCALES[i]))
-                return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Sets the dojo logging level. Similar to log4j style
-     * log levels. 
-     * @param level The string constant for the level, valid values
-     *              are:
-     *              <p>
-     *              <ul>
-     *              <li>{@link #BROWSER_LOG_DEBUG}</li>
-     *              <li>{@link #BROWSER_LOG_INFO}</li>
-     *              <li>{@link #BROWSER_LOG_WARNING}</li>
-     *              <li>{@link #BROWSER_LOG_ERROR}</li>
-     *              <li>{@link #BROWSER_LOG_CRITICAL}</li>
-     *              </ul>
-     *              </p>
-     */
-    public void setLogLevel(String level)
-    {
-        Defense.notNull("level", level);
-
-        _browserLogLevel = level;
-    }
-
-    /**
-     * Allows for turning browser debugging on/off.
-     *
-     * @param debug If false, no logging output will be written.
-     */
-    public void setDebug(boolean debug)
-    {
-        _debug = debug;
-    }
-
-    /**
-     * Turns off deep context level javascript debugging mode for dojo. This means
-     * that exceptions/debug statements will show you line numbers from the actual 
-     * javascript file that generated them instead of the normal default which is 
-     * usually bootstrap.js .
-     *
-     * <p>The default value is false if not set.</p>
-     *
-     * <p>
-     *  People should be wary of turning this on as it may cause problems
-     *  under certain conditions, and you definitely don't ever want this 
-     *  on in production. 
-     * </p>
-     *
-     * @param value If true deep debugging will be turned on.
-     */
-    public void setDebugAtAllCosts(boolean value)
-    {
-        _debugAtAllCosts = value;
-    }
-
-    /**
-     * Sets the html element node id of the element you would like all browser
-     * debug content to go to.
-     *
-     * @param debugContainerId the debugContainerId to set
-     */
-    public void setDebugContainerId(String debugContainerId)
-    {
-        _debugContainerId = debugContainerId;
-    }
-
-    /**
-     * Enables/disables the dojo.debug.console functionality which should redirect
-     * most logging messages to your browsers javascript console. (if it supports 
-     * one).
-     *
-     * <p>
-     *  The debug console is disabled by default. Currently known supported 
-     *  browsers are FireFox(having FireBug extension helps a great deal)/Opera/Safari.
-     * </p>
-     *
-     * @param enabled Whether or not the enable debug console.
-     */
-    public void setConsoleEnabled(boolean enabled)
-    {
-        _consoleEnabled = enabled;
-    }
-
-    /**
-     * Sets the dojo preventBackButtonFix djConfig configuration. This should
-     * typically be avoided but is provided for flexibility.
-     *
-     * @param prevent
-     *          Whether or not to prevent back button fix.
-     */
-    public void setPreventBackButtonFix(boolean prevent)
-    {
-        _preventBackButtonFix = prevent;
-    }
-
-    /**
-     * Tells dojo whether or not to parse widgets by traversing the entire 
-     * dom node of your document. It is highly reccomended that you keep this
-     * at its default value of false.
-     *
-     * @param parseWidgets the parseWidgets to set
-     */
-    public void setParseWidgets(boolean parseWidgets)
-    {
-        _parseWidgets = parseWidgets;
-    }
-
-    /**
-     * Sets a valid path to the base dojo javascript installation
-     * directory.
-     *
-     * @param dojoSource
-     *          Path to dojo source directory core "dojo.js" file.
-     */
-    public void setDojoSource(IAsset dojoSource)
-    {
-        _dojoSource = dojoSource;
-    }
-
-    public void setDojoFormSource(IAsset formSource)
-    {
-        _dojoFormSource = formSource;
-    }
-
-    public void setDojoWidgetSource(IAsset widgetSource)
-    {
-        _dojoWidgetSource = widgetSource;
-    }
-
-    /**
-     * Sets the dojo baseRelativePath value.
-     *
-     * @param dojoPath
-     *          The base path to dojo directory.
-     */
-    public void setDojoPath(IAsset dojoPath)
-    {
-        _dojoPath = dojoPath;
-    }
-
-    /**
-     * Sets a valid base path to resolve tapestry core.js.
-     *
-     * @param tapestrySource
-     *          Main tapestry core.js file.
-     */
-    public void setTapestrySource(IAsset tapestrySource)
-    {
-        _tapestrySource = tapestrySource;
-    }
-
-    /**
-     * Sets the path to the tapestry javascript modules. (Needed for dojo to resolve the 
-     * path to tapestry javascript, esp when overriding the default bundled dojo.)
-     *
-     * @param tapestryPath The path to tapestry.
-     */
-    public void setTapestryPath(IAsset tapestryPath)
-    {
-        _tapestryPath = tapestryPath;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/DojoMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/DojoMessages.java
deleted file mode 100644
index 913d939..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/DojoMessages.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright May 16, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.dojo;
-
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * @author andyhot
- * @since 4.1
- */
-public final class DojoMessages
-{
-    protected static final MessageFormatter _formatter = new MessageFormatter(DojoMessages.class);
-    
-    /* defeat instantiation */
-    private DojoMessages() { }
-    
-    public static String mustUseValidJsonInParameter(String parameterName)
-    {
-        return _formatter.format("must-use-valid-json-in-parameter", parameterName);
-    }
-    
-    public static String invalidEncoding(String url)
-    {
-        return _formatter.format("invalid-encoding", url);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/DojoStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/DojoStrings.properties
deleted file mode 100644
index 0087f3e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/DojoStrings.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2006 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-must-use-valid-json-in-parameter=Parameter {0} does not have valid JSON syntax.
-invalid-encoding=Invalid encoding found trying to encode asset url string {0}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/DojoUtils.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/DojoUtils.java
deleted file mode 100644
index 1cc5ca2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/DojoUtils.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright May 16, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo;
-
-import java.text.ParseException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.json.JSONObject;
-
-/**
- * @author andyhot
- * @since 4.1
- */
-public final class DojoUtils
-{
-    /* defeat insantiation */
-    private DojoUtils() { }
-    
-    /**
-     * Converts a parameter of an {@link IComponent} to an instance of {@link JSONObject}.
-     * 
-     * @param component
-     * @param parameterName
-     * @return The parameter parsed into a json structure.
-     */
-    public static JSONObject parseJSONParameter(IComponent component, String parameterName)
-    {
-        IBinding binding = component.getBinding(parameterName);
-        if (binding == null || binding.getObject() == null)
-            return new JSONObject();
-        
-        try
-        {
-            return new JSONObject((String) binding.getObject(String.class));
-        }
-        catch (ParseException ex)
-        {
-            throw new ApplicationRuntimeException( DojoMessages.mustUseValidJsonInParameter(parameterName), 
-                    binding.getLocation() , ex);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/IWidget.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/IWidget.java
deleted file mode 100644
index 17d20b7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/IWidget.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright Apr 21, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo;
-
-import org.apache.tapestry.IDirectEvent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-
-/**
- * Represents a tapestry component that delegates part of its
- * functionality / UI to a corresponding browser <a href="http://dojotoolkit.org">dojo</a>
- * widget instance.
- * 
- * @author jkuhnert
- */
-public interface IWidget extends IDirectEvent
-{
-    /**
-     * Similar to the semantics involved with normal <code>AbstractComponent.renderComponent</code>
-     * method writing component state to the output stream.
-     * 
-     * @param writer
-     *          The markup writer used to write any output.
-     * @param cycle
-     *          The corresponding request.
-     */
-    void renderWidget(IMarkupWriter writer, IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java
deleted file mode 100644
index dde80f3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright May 4, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.AbstractFormComponent;
-
-
-/**
- * Represents a dojo widget that manages an html form input
- * field.
- * 
- * @author jkuhnert
- * @since 4.1
- */
-public abstract class AbstractFormWidget extends AbstractFormComponent implements IFormWidget
-{
-    
-    public abstract void setDestroy(boolean destroy);
-    
-    /**
-     * Determined dynamically at runtime during rendering, informs widget implementations
-     * if they should destroy their client side widget equivalents or leave them in tact.
-     * 
-     * @return True if the widget should be destroyed on this render, false otherwise.
-     */
-    public abstract boolean getDestroy();
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void renderWidget(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        renderComponent(writer, cycle);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if(!cycle.isRewinding()) {
-
-            if (!cycle.getResponseBuilder().isDynamic()
-                    || cycle.getResponseBuilder().explicitlyContains(this)) {
-
-                setDestroy(false);
-            } else {
-
-                setDestroy(true);
-            }
-        }
-        
-        renderFormWidget(writer, cycle);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        rewindFormWidget(writer, cycle);
-    }
-    
-    /**
-     * Called when rendering a form widget. 
-     * 
-     * @param writer
-     *          The markup writer to render with.
-     * @param cycle
-     *          The cycle associated with request.
-     */
-    protected abstract void renderFormWidget(IMarkupWriter writer, IRequestCycle cycle);
-    
-    /**
-     * Called during form submission to retrieve submitted input values. 
-     * Components should do any validation/retrieval of values in this method. 
-     * 
-     * @param writer
-     *          The passed in {@link IMarkupWriter} will be a {@link org.apache.tapestry.engine.NullWriter}, making
-     *          any content written ignored. 
-     * @param cycle
-     *           Typically used to retrieve submitted value via <code>cycle.getParameter(getName())</code>.
-     */
-    protected abstract void rewindFormWidget(IMarkupWriter writer, IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java
deleted file mode 100644
index d6cda13..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java
+++ /dev/null
@@ -1,285 +0,0 @@
-// Copyright May 4, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.form;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.DirectServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.form.ValidatableField;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.json.IJSONWriter;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.services.DataSqueezer;
-import org.apache.tapestry.valid.ValidatorException;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * An html field similar to a <code>select</code> input field that 
- * is wrapped by a dojo ComboBox widget.
- * 
- * This component uses the {@link IAutocompleteModel} to retrieve and match against
- * selected values.
- * 
- * @author jkuhnert
- */
-public abstract class Autocompleter extends AbstractFormWidget implements ValidatableField, IJSONRender, IDirect
-{
-    // mode, can be remote or local (local being from html rendered option elements)
-    private static final String MODE_REMOTE = "remote";
-    private static final String MODE_LOCAL = "local";    
-    
-    /**
-     * 
-     * {@inheritDoc}
-     */
-    protected void renderFormWidget(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IAutocompleteModel model = getModel();
-        if (model == null)
-            throw Tapestry.createRequiredParameterException(this, "model");
-        
-        Object value = getValue();
-        Object key = value != null && !"".equals(value.toString()) ? model.getPrimaryKey(value) : null;
-        
-        renderDelegatePrefix(writer, cycle);
-        
-        writer.begin("select");
-        writer.attribute("name", getName());
-        writer.attribute("autocomplete", "off"); // turn off native html autocomplete
-        
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-        
-        renderIdAttribute(writer, cycle);
-        
-        renderDelegateAttributes(writer, cycle);
-        
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-        
-        // Apply informal attributes.
-        renderInformalParameters(writer, cycle);
-        
-        writer.print(" ");
-        
-        if (isLocal()) 
-        {
-            List list = model.getValues("");
-            for (int i=0; i<list.size(); i++) 
-            {
-                Object optionKey = model.getPrimaryKey(list.get(i));
-
-                writer.begin("option");
-                writer.attribute("value", getDataSqueezer().squeeze(optionKey));
-
-                if (optionKey!=null && optionKey.equals(key))
-                    writer.attribute("selected", "selected");
-                
-                writer.print(model.getLabelFor(list.get(i)));
-                writer.end();
-            }
-        }
-        
-        writer.end();
-        renderDelegateSuffix(writer, cycle);
-        
-        Map parms = new HashMap();
-        parms.put("id", getClientId());
-        
-        JSONObject json = new JSONObject();
-        if (!isLocal())
-        {
-            ILink link = getDirectService().getLink(true, new DirectServiceParameter(this));
-            json.put("dataUrl", link.getURL() + "&filter=%{searchString}");
-        }
-        
-        json.put("mode", isLocal() ? MODE_LOCAL : MODE_REMOTE);
-        json.put("widgetId", getName());
-        json.put("name", getName());
-        json.put("searchDelay", getSearchDelay());
-        json.put("fadeTime", getFadeTime());
-        json.put("maxListLength", getMaxListLength());
-        json.put("forceValidOption", isForceValidOption());
-        json.put("disabled", isDisabled());
-        
-        json.put("value", key != null ? getDataSqueezer().squeeze(key) : "");
-        json.put("label", value != null ? model.getLabelFor(value) : "");
-        
-        parms.put("props", json.toString());
-        parms.put("form", getForm().getName());
-        parms.put("widget", this);
-        
-        PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, this);
-        getScript().execute(this, cycle, prs, parms);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void renderComponent(IJSONWriter writer, IRequestCycle cycle)
-    {
-        IAutocompleteModel model = getModel();
-        
-        if (model == null)
-            throw Tapestry.createRequiredParameterException(this, "model");
-        
-        List filteredValues = model.getValues(getFilter());
-        
-        if (filteredValues == null)
-            return;
-        
-        Object key = null;
-        String label = null;
-        
-        JSONObject json = writer.object();
-        
-        for (int i=0; i < filteredValues.size(); i++) {
-            Object value = filteredValues.get(i);
-            
-            key = model.getPrimaryKey(value);
-            label = model.getLabelFor(value);
-            
-            json.put(getDataSqueezer().squeeze(key), label );
-        }
-        
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormWidget(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-        
-        Object object = null;
-        
-        try
-        {
-            if (value != null && value.length() > 0)
-                object = getModel().getValue(getDataSqueezer().unsqueeze(value));
-            
-            getValidatableFieldSupport().validate(this, writer, cycle, object);
-            
-            setValue(object);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isStateful()
-    {
-        return true;
-    }
-    
-    /**
-     * Triggerd by using filterOnChange logic.
-     * 
-     * {@inheritDoc}
-     */
-    public void trigger(IRequestCycle cycle)
-    {
-        setFilter(cycle.getParameter("filter"));
-    }
-    
-    public abstract IAutocompleteModel getModel();
-    
-    /** How long to wait(in ms) before searching after input is received. */
-    public abstract int getSearchDelay();
-    
-    /** The duration(in ms) of the fade effect of list going away. */
-    public abstract int getFadeTime();
-    
-    /** The maximum number of items displayed in select list before the scrollbar is activated. */
-    public abstract int getMaxListLength();
-    
-    /** Forces select to only allow valid option strings. */
-    public abstract boolean isForceValidOption();
-    
-    /** Forces select to work in local mode (no xhr). */
-    public abstract boolean isLocal();    
-    
-    /** @since 2.2 * */
-    public abstract Object getValue();
-
-    /** @since 2.2 * */
-    public abstract void setValue(Object value);
-    
-    /** @since 4.1 */
-    public abstract void setFilter(String value);
-    
-    /** @since 4.1 */
-    public abstract String getFilter();
-    
-    /** Injected. */
-    public abstract DataSqueezer getDataSqueezer();
-    
-    /**
-     * Injected.
-     */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-    /**
-     * Injected.
-     */
-    public abstract IEngineService getDirectService();
-    
-    /**
-     * Injected.
-     */
-    public abstract IScript getScript();
-    
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public List getUpdateComponents()
-    {
-        List comps = new ArrayList();
-        comps.add(getClientId());
-        
-        return comps;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isAsync()
-    {
-        return true;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isJson()
-    {
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.jwc
deleted file mode 100644
index 5676e2e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.jwc
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.dojo.form.Autocompleter" 
-	allow-body="no" 
-	allow-informal-parameters="yes">
-  
-  <description>
-  Creates an HTML select to choose a single property from a list of options.
-  </description>
-
-  <parameter name="value" required="yes"/>
-  
-  <parameter name="model" required="yes"/>
-  	
-  <parameter name="disabled"/>
-  
-  <parameter name="searchDelay" default-value="100" />
-  
-  <parameter name="fadeTime" default-value="200" />
-  
-  <parameter name="maxListLength" default-value="8" />
-  
-  <parameter name="forceValidOption" default-value="true" />
-  
-  <parameter name="local">
-    <description>Makes the autocompleter work in local mode.
-        All values provided by the model are rendered as options in the 
-        html and are used for autocomplete.
-    </description>
-  </parameter>
-  
-  <parameter name="displayName"/>
-  <parameter name="validators"/>
-  
-  <parameter name="id" property="idParameter" default-value="id"/>
-  
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="autocomplete"/>
-  
-  <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-  <inject property="dataSqueezer" object="service:tapestry.data.DataSqueezer"/>
-  <inject property="directService" object="service:tapestry.services.Direct"/>
-  <inject property="script" type="script" object="Autocompleter.script"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script
deleted file mode 100644
index 30445d2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<script>
-<input-symbol key="id" required="yes" />
-<input-symbol key="props" required="yes" />
-<input-symbol key="form" required="yes" />
-<input-symbol key="widget" required="yes" />
-<let key="completer" unique="yes">
-${id}
-</let>
-    <body>
-        <unique>
-            dojo.require("dojo.widget.Manager");
-            dojo.require("dojo.widget.Select");
-            dojo.require("tapestry.widget.Widget");
-        </unique>
-    </body>
-    <initialization>
-        var ${completer}=${props};
-        tapestry.widget.synchronizeWidgetState("${id}", "Select", ${completer}, ${widget.destroy});
-        if (!dj_undef("label", ${completer}) &amp;&amp; !dj_undef("value", ${completer})){
-            var selw=dojo.widget.byId("${id}");
-            selw.setValue(${completer}["value"]);
-            selw.setLabel(${completer}["label"]);
-        }
-    </initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DefaultAutocompleteModel.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DefaultAutocompleteModel.java
deleted file mode 100644
index a15b9a6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DefaultAutocompleteModel.java
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright Jul 30, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.form;
-
-import org.apache.commons.beanutils.PropertyUtils;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * Default simple implementation of {@link IAutocompleteModel}. This class relies
- * on the java beans specification to resolve key fields of an incoming 
- * {@link List}. 
- * 
- * <p>
- *  If you had an object type of <code>User</code>, with the primary/unique id of 
- *  each <code>User</code> object stored as a member with a name of <code>id</code> 
- *  you would pass something like this into the model(don't forget that javabeans syntax
- *  requires a corresponding getId() for members):
- * </p>
- * 
- * <pre>
- *  IAutocompleteModel model = new DefaultAutocompleteModel(List users, "id", "name");
- * </pre>
- * 
- * @see "http://jakarta.apache.org/commons/beanutils/commons-beanutils-1.6.1/docs/api/org/apache/commons/beanutils/PropertyUtils.html"
- * @author jkuhnert
- */
-public class DefaultAutocompleteModel implements IAutocompleteModel
-{
-
-    private List _values;
-    
-    private String _keyExpression;
-    
-    private String _labelExpression;
-    
-    /**
-     * Create a new model using java beans syntax to access the key/label
-     * for the list using the specified bean expressions.
-     * 
-     * @param values 
-     *          The list of values to manage.
-     * @param keyField 
-     *          The java beans expression for getting the primary key of each object
-     *          in the list. {@link #getPrimaryKey(Object)}.
-     * @param labelField
-     *          The java beans expression for getting the label of each object
-     *          in the list. {@link #getLabelFor(Object)}.
-     */
-    public DefaultAutocompleteModel(List values, String keyField, String labelField) 
-    {
-        Defense.notNull(values, "Value list can't be null.");
-        Defense.notNull(keyField, "Model keyField java beans expression can't be null.");
-        Defense.notNull(labelField, "Model labelField java beans expression can't be null.");
-        
-        _values = values;
-        _keyExpression = keyField;
-        _labelExpression = labelField;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public List getValues(String match)
-    {
-        List ret = new ArrayList();
-        
-        if (match == null)
-            return ret;
-        
-        String filter = match.trim().toLowerCase();
-        
-        for (int i = 0; i < _values.size(); i++)
-        {    
-            Object value = _values.get(i);
-            String label = getLabelFor(value);
-            
-            if (label.toLowerCase().indexOf(filter) > -1)
-                ret.add(value);
-        }
-        
-        return ret;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public String getLabelFor(Object value)
-    {
-        try
-        {
-            return PropertyUtils.getProperty(value, _labelExpression).toString();
-        } catch (Exception e)
-        {
-            throw new ApplicationRuntimeException(e);
-        }
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Object getPrimaryKey(Object value)
-    {
-        try
-        {
-            return PropertyUtils.getProperty(value, _keyExpression);   
-        } catch (Exception e)
-        {
-            throw new ApplicationRuntimeException(e);
-        }
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public Object getValue(Object primaryKey)
-    {
-        for (int i = 0; i < _values.size(); i++)
-        {    
-            Object value = _values.get(i);
-            
-            if (getPrimaryKey(value).toString().equals(primaryKey.toString()))
-                return value;
-        }
-        
-        return null;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java
deleted file mode 100644
index 34fb916..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright Jun 10, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.form.TranslatedField;
-import org.apache.tapestry.form.TranslatedFieldSupport;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.form.translator.DateTranslator;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidatorException;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Implementation of the dojo DropdownDatePicker widget as a tapestry
- * component. Wraps a form input field with a date picker icon next to it
- * that when clicked on reveals a calendar to choose date values from. 
- * 
- * @author jkuhnert
- */
-public abstract class DropdownDatePicker extends AbstractFormWidget implements TranslatedField
-{
-    
-    /** parameter. */
-    public abstract Object getValue();
-    
-    public abstract void setValue(Object value);
-    
-    public abstract boolean isDisabled();
-    
-    /** Alt html text for the date icon, what is displayed when mouse hovers over icon. */
-    public abstract String getIconAlt();
-
-    public abstract int getDisplayWeeks();
-
-    public abstract boolean isAdjustWeeks();
-
-    public abstract Object getStartDate();
-
-    public abstract Object getEndDate();
-
-    public abstract int getWeekStartsOn();
-
-    public abstract boolean isStaticDisplay();
-    
-    /**
-     * {@inheritDoc}
-     */
-    protected void renderFormWidget(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // dojo dates are in POSIX style formats so we format the value manually
-        DateTranslator translator = (DateTranslator) getTranslator();
-        
-        renderDelegatePrefix(writer, cycle);
-        
-        // the html output doesn't matter very much as dojo
-        // will create an inline input field for us anyways, but we do need
-        // a node to reference
-        writer.begin("div");
-        renderIdAttribute(writer, cycle);
-        
-        renderDelegateAttributes(writer, cycle);
-        
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-        
-        renderInformalParameters(writer, cycle);
-        
-        writer.print(" ");
-        
-        writer.end();
-        renderDelegateSuffix(writer, cycle);
-        
-        // now create widget parms
-        JSONObject json = new JSONObject();
-        json.put("inputId", getClientId());
-        json.put("inputName", getName());
-        json.put("iconAlt", getIconAlt());
-        json.put("displayFormat", translator.getPattern(getPage().getLocale()));
-        json.put("saveFormat", translator.getPattern(getPage().getLocale()));
-        
-        if (getValue() != null) {
-            json.put("value", translator.formatRfc3339(getValue()));
-        }
-        
-        json.put("disabled", isDisabled());
-        if (getDisplayWeeks() > 0)
-            json.put("displayWeeks", getDisplayWeeks());
-        if (isAdjustWeeks())
-            json.put("adjustWeeks", isAdjustWeeks());
-        if (getStartDate() != null)
-            json.put("startDate", translator.formatRfc3339(getStartDate()));
-        if (getEndDate() != null)
-            json.put("endDate", translator.formatRfc3339(getEndDate()));
-        if (getWeekStartsOn() > -1)
-            json.put("weekStartsOn", getWeekStartsOn());
-        if (isStaticDisplay())
-            json.put("staticDisplay", isStaticDisplay());
-
-        Map parms = new HashMap();
-        parms.put("clientId", getClientId());
-        parms.put("props", json.toString());
-        parms.put("widget", this);
-        
-        getScript().execute(this, cycle, TapestryUtils.getPageRenderSupport(cycle, this), parms);
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormWidget(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-        
-        try
-        {
-            Object translated = getTranslatedFieldSupport().parse(this, value);
-            
-            getValidatableFieldSupport().validate(this, writer, cycle, translated);
-            
-            setValue(translated);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-    
-    /** Injected. */
-    public abstract IScript getScript();
-    
-    /** Injected. */
-    public abstract TranslatedFieldSupport getTranslatedFieldSupport();
-    
-    /** Injected. */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.jwc
deleted file mode 100644
index 722e533..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.jwc
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2006 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.dojo.form.DropdownDatePicker" allow-body="no">
-
-    <parameter name="value" required="yes"/>
-    <parameter name="disabled"/>
-    <parameter name="iconAlt" default-value="literal:Select a Date" />
-    <parameter name="displayWeeks" >
-        <description>
-            Number of weeks to display, default is 6.
-        </description>
-    </parameter>
-    <parameter name="adjustWeeks" >
-        <description>
-            If true, weekly size of calendar changes to accomodate the month. If false (the default), 42 day format is used.
-        </description>
-    </parameter>
-    <parameter name="startDate" >
-        <description>
-            First available date in the calendar set. If specified then no date earlier than startDate will be selectable.
-        </description>
-    </parameter>
-    <parameter name="endDate" >
-        <description>
-            Last available date in the calendar set. If specified then no date later than endDate will be selectable.
-        </description>
-    </parameter>
-    <parameter name="weekStartsOn">
-        <description>
-            Adjusts the first day of the week 0==Sunday..6==Saturday.
-        </description>
-    </parameter>
-    <parameter name="staticDisplay">
-        <description>
-            Disables all incremental controls, must pick a date in the current display. Default is false.
-        </description>
-    </parameter>
-
-    <parameter name="displayName"/>
-    <parameter name="translator" default-value="translator:date,pattern=dd MMM yyyy"/>
-    <parameter name="validators"/>
-    <parameter name="id" property="idParameter" default-value="id"/>
-
-    <inject property="script" type="script" object="DropdownDatePicker.script"/>
-    <inject property="translatedFieldSupport" object="service:tapestry.form.TranslatedFieldSupport"/>
-    <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script
deleted file mode 100644
index 0e4121d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<script>
-<input-symbol key="clientId" required="yes" />
-<input-symbol key="props" required="yes" />
-<input-symbol key="widget" required="yes" />
-    <body>
-        <unique>
-            dojo.require("dojo.widget.*");
-            dojo.require("tapestry.widget.Widget");
-        </unique>
-    </body>
-    <initialization>
-        tapestry.widget.synchronizeWidgetState("${clientId}", "DropdownDatePicker", ${props}, ${widget.destroy});
-    </initialization>
-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java
deleted file mode 100644
index 055116d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright Jun 10, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.form.TranslatedField;
-import org.apache.tapestry.form.TranslatedFieldSupport;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.form.translator.DateTranslator;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidatorException;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Implementation of the dojo DropdownTimePicker widget as a tapestry
- * component. Wraps a form input field with a date picker icon next to it
- * that when clicked on reveals a pane to choose time values from. 
- */
-public abstract class DropdownTimePicker extends AbstractFormWidget implements TranslatedField
-{
-    
-    /** parameter. */
-    public abstract Object getValue();
-    
-    public abstract void setValue(Object value);
-    
-    public abstract boolean isDisabled();
-    
-    /** Alt html text for the date icon, what is displayed when mouse hovers over icon. */
-    public abstract String getIconAlt();
-    
-    /**
-     * {@inheritDoc}
-     */
-    protected void renderFormWidget(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // dojo dates are in POSIX style formats so we format the value manually
-        DateTranslator translator = (DateTranslator) getTranslator();
-        
-        renderDelegatePrefix(writer, cycle);
-        
-        // the html output doesn't matter very much as dojo
-        // will create an inline input field for us anyways, but we do need
-        // a node to reference
-        writer.begin("div");
-        renderIdAttribute(writer, cycle);
-        
-        renderDelegateAttributes(writer, cycle);
-        
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-        
-        renderInformalParameters(writer, cycle);
-        
-        writer.print(" ");
-        
-        writer.end();
-        renderDelegateSuffix(writer, cycle);
-        
-        // now create widget parms
-        JSONObject json = new JSONObject();
-        json.put("inputId", getClientId());
-        json.put("inputName", getName());
-        json.put("iconAlt", getIconAlt());
-        json.put("displayFormat", translator.getPattern(getPage().getLocale()));
-        json.put("saveFormat", translator.getPattern(getPage().getLocale()));
-        
-        if (getValue() != null) {
-            json.put("value", translator.formatRfc3339(getValue()));
-        }
-        
-        json.put("disabled", isDisabled());
-        
-        Map parms = new HashMap();
-        parms.put("clientId", getClientId());
-        parms.put("props", json.toString());
-        parms.put("widget", this);
-        
-        getScript().execute(this, cycle, TapestryUtils.getPageRenderSupport(cycle, this), parms);
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormWidget(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-        
-        try
-        {
-            Object translated = getTranslatedFieldSupport().parse(this, value);
-            
-            getValidatableFieldSupport().validate(this, writer, cycle, translated);
-            
-            setValue(translated);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-    
-    /** Injected. */
-    public abstract IScript getScript();
-    
-    /** Injected. */
-    public abstract TranslatedFieldSupport getTranslatedFieldSupport();
-    
-    /** Injected. */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.jwc
deleted file mode 100644
index 2a65be3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2006 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.dojo.form.DropdownTimePicker" allow-body="no">
-  
-  <parameter name="value" required="yes"/>
-  <parameter name="disabled"/>
-  <parameter name="iconAlt" default-value="literal:Select a Time" />
-  
-  <parameter name="displayName"/>
-  <parameter name="translator" default-value="translator:date,pattern=hh:mm a"/>
-  <parameter name="validators"/>
-  <parameter name="id" property="idParameter" default-value="id"/>
-  
-  <inject property="script" type="script" object="DropdownTimePicker.script"/>
-  <inject property="translatedFieldSupport" object="service:tapestry.form.TranslatedFieldSupport"/>
-  <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script
deleted file mode 100644
index f342e14..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<script>
-<input-symbol key="clientId" required="yes" />
-<input-symbol key="props" required="yes" />
-<input-symbol key="widget" required="yes" />
-    <body>
-        <unique>
-            dojo.require("dojo.widget.Manager");
-            dojo.require("tapestry.widget.Widget");
-            dojo.require("dojo.widget.DropdownTimePicker");
-        </unique>
-    </body>
-    <initialization>
-        tapestry.widget.synchronizeWidgetState("${clientId}", "dropdowntimepicker", ${props}, ${widget.destroy});
-    </initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/GTimePicker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/GTimePicker.java
deleted file mode 100644
index 9fe25ae..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/GTimePicker.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package org.apache.tapestry.dojo.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.form.TranslatedField;
-import org.apache.tapestry.form.TranslatedFieldSupport;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidatorException;
-
-import java.util.*;
-
-/**
- * Implementation of an html form input field that has a dynamic drop down selection list of
- * time segments displayed in the {@link org.apache.tapestry.IPage}'s {@link java.util.Locale}.
- */
-public abstract class GTimePicker  extends AbstractFormWidget implements TranslatedField
-{
-    /**
-     * For a full day - broken up in to half hour segments.
-     */
-    static final int TIME_SEGMENT_LENGTH = 48;
-
-    /**
-     * Core value used to place input in to.
-     * @return The current bound value, may be null.
-     */
-    public abstract Object getValue();
-
-    public abstract void setValue(Object value);
-
-    public abstract boolean isDisabled();
-
-    /**
-     * {@inheritDoc}
-     */
-    protected void renderFormWidget(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = getTranslatedFieldSupport().format(this, getValue());
-
-        renderDelegatePrefix(writer, cycle);
-
-        writer.beginEmpty("input");
-
-        writer.attribute("type", "text");
-        
-        writer.attribute("autocomplete", "off");
-
-        writer.attribute("name", getName());
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        if (value != null)
-            writer.attribute("value", value);
-
-        renderIdAttribute(writer, cycle);
-
-        renderDelegateAttributes(writer, cycle);
-
-        getTranslatedFieldSupport().renderContributions(this, writer, cycle);
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-
-        renderDelegateSuffix(writer, cycle);
-
-        // Build up options value list
-
-        Locale locale = getPage().getLocale();
-        
-        GregorianCalendar cal = (GregorianCalendar) GregorianCalendar.getInstance(getPage().getLocale());
-        cal.set(Calendar.HOUR, 0);
-        cal.set(Calendar.AM_PM, Calendar.AM);
-
-        StringBuffer optStr = new StringBuffer("[");
-
-        int selectedIndex = -1;
-        
-        for(int i=0, hour=0; i < TIME_SEGMENT_LENGTH; i++)
-        {
-            if (i != 0)
-            {
-                optStr.append(",");
-            }
-            
-            if (i == 24)
-            {
-                hour = 0;
-                cal.set(Calendar.AM_PM, Calendar.PM);
-            }
-            
-            cal.set(Calendar.HOUR,  hour);
-            cal.set(Calendar.MINUTE, (i % 2 > 0) ? 30 : 0);
-
-            String option = getTranslator().format(this, locale, cal.getTime());
-
-            optStr.append("\"").append(option).append("\"");
-            
-            if (selectedIndex < 0 && value != null && value.equals(option))
-            {
-                selectedIndex = i;
-            }
-
-            if (i % 2 > 0)
-            {
-                hour++;
-            }
-        }
-
-        optStr.append("]");
-        
-        // now create widget parms
-
-        JSONObject json = new JSONObject();
-        json.put("inputNodeId", getClientId());
-        json.put("optionValues", new JSONLiteral(optStr.toString()));
-
-        if (selectedIndex > -1)
-        {
-            json.put("selectedIndex", selectedIndex);
-        }
-
-        Map parms = new HashMap();
-        parms.put("clientId", getClientId());
-        parms.put("props", json.toString());
-        parms.put("widget", this);
-
-        getScript().execute(this, cycle, TapestryUtils.getPageRenderSupport(cycle, this), parms);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormWidget(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-
-        try
-        {
-            Object translated = getTranslatedFieldSupport().parse(this, value);
-
-            getValidatableFieldSupport().validate(this, writer, cycle, translated);
-
-            setValue(translated);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-
-    /** Injected. */
-    public abstract IScript getScript();
-
-    /** Injected. */
-    public abstract TranslatedFieldSupport getTranslatedFieldSupport();
-
-    /** Injected. */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/GTimePicker.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/GTimePicker.jwc
deleted file mode 100644
index 67c4172..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/GTimePicker.jwc
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2006 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.dojo.form.GTimePicker" allow-body="no">
-
-  <parameter name="value" required="yes"/>
-  <parameter name="disabled"/>
-
-  <parameter name="displayName"/>
-  <parameter name="translator" default-value="translator:date,pattern=h:mm a"/>
-  <parameter name="validators" />
-    
-  <inject property="script" type="script" object="GTimePicker.script"/>
-  <inject property="translatedFieldSupport" object="service:tapestry.form.TranslatedFieldSupport"/>
-  <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/GTimePicker.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/GTimePicker.script
deleted file mode 100644
index b4d8707..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/GTimePicker.script
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<script>
-<input-symbol key="clientId" required="yes" />
-<input-symbol key="props" required="yes" />
-<input-symbol key="widget" required="yes" />
-    <body>
-        <unique>
-            dojo.require("dojo.widget.Manager");
-            dojo.require("tapestry.widget.Widget");
-        </unique>
-    </body>
-    <initialization>
-        tapestry.widget.synchronizeWidgetState("${clientId}", "tapestry:timepicker", ${props}, ${widget.destroy});
-    </initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/IAutocompleteModel.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/IAutocompleteModel.java
deleted file mode 100644
index 03f3261..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/IAutocompleteModel.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright Jul 30, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.form;
-
-import java.util.List;
-
-import org.apache.tapestry.components.IPrimaryKeyConverter;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-
-/**
- * Defines the interface used by the {@link Autocompleter} component to filter
- * and match values from a potentially large data set. 
- * 
- * <p>
- *  The roots of this model come from the {@link IPropertySelectionModel} interface, adding
- *  additional logic for filtering where the normal semantics of {@link IPropertySelectionModel} 
- *  would be prohibitively expensive.
- * </p>
- * 
- * @author jkuhnert
- */
-public interface IAutocompleteModel extends IPrimaryKeyConverter
-{
-
-    /**
-     * For the given value, provide a user friendly label that will
-     * be presented in a drop down selection list in the browser ui.
-     * 
-     * @param value
-     *          The object to retrieve a label for.
-     * @return
-     *          The label to use for the given value.
-     */
-    String getLabelFor(Object value);
-    
-    /**
-     * Expected to return a list of all possible values, filtering out values that
-     * match the specified String in the <strong>label</strong> representation of the value.
-     * 
-     * @param filter 
-     *          The string to use to filter the values based on the label representation of objects.
-     * 
-     * @return A filtered list of values. Expected to be in the full object form such that
-     *      {@link IPrimaryKeyConverter#getPrimaryKey(Object)} can be called on each returned value.
-     */
-    List getValues(String filter);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/IFormWidget.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/IFormWidget.java
deleted file mode 100644
index 947e23c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/IFormWidget.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright May 4, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.form;
-
-import org.apache.tapestry.dojo.IWidget;
-
-
-/**
- * Represents an html input field managed by a dojo widget.
- * 
- * @author jkuhnert
- */
-public interface IFormWidget extends IWidget
-{
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/package.html
deleted file mode 100644
index 694c5b0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/form/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Form related components that are wrapped by dojo widgets.
-</p>
-
-@author Jesse Kuhnert <a href="mailto:jkuhnert@apache.org">jkuhnert@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/Dialog.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/Dialog.java
deleted file mode 100644
index f6d6ee4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/Dialog.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright Oct 16, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.html;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.dojo.AbstractWidget;
-import org.apache.tapestry.json.JSONObject;
-
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * Implementation of dojo Dialog widget.
- * 
- */
-public abstract class Dialog extends AbstractWidget
-{
-    public abstract boolean isHidden();
-    public abstract void setHidden(boolean hidden);
-    
-    public abstract String getBackgroundColor();
-    
-    public abstract float getOpacity();
-    
-    public abstract boolean getFollowScroll();
-    
-    public abstract boolean getCloseOnBackgroundClick();
-    
-    public abstract int getBlockDuration();
-    
-    public abstract int getLifeTime();
-    
-    public abstract String getToggle();
-    
-    public abstract int getToggleDuration();
-    
-    public void show()
-    {
-        setHidden(false);
-    }
-
-    public void hide()
-    {
-        setHidden(true);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void renderWidget(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (!cycle.isRewinding())
-        {
-            writer.begin(getTemplateTagName()); // use element specified
-            renderIdAttribute(writer, cycle); // render id="" client id
-            renderInformalParameters(writer, cycle);
-        }
-        
-        renderBody(writer, cycle);
-        
-        if (!cycle.isRewinding())
-            writer.end();
-        
-        if (!cycle.isRewinding())
-        {
-            JSONObject json = new JSONObject();
-            json.put("bgColor", getBackgroundColor());
-            json.put("bgOpacity", getOpacity());
-            json.put("followScroll", getFollowScroll());
-            json.put("closeOnBackgroundClick", getCloseOnBackgroundClick());
-            json.put("blockDuration", getBlockDuration());
-            json.put("lifeTime", getLifeTime());
-            json.put("toggle", getToggle());
-            json.put("toggleDuration", getToggleDuration());
-
-            Map parms = new HashMap();
-            parms.put("component", this);
-            parms.put("props", json.toString());
-            
-            getScript().execute(this, cycle, TapestryUtils.getPageRenderSupport(cycle, this), parms);
-        }
-    }
-        
-    /** injected. */
-    public abstract IScript getScript();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/Dialog.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/Dialog.jwc
deleted file mode 100644
index e23117d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/Dialog.jwc
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005, 2006 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.dojo.html.Dialog"
-                         allow-body="yes" allow-informal-parameters="yes">
-
-    <description>
-        Creates a modal Dialog.
-    </description>
-
-    <parameter name="hidden" default-value="ognl:true" />
-
-    <parameter name="backgroundColor" default-value="literal:black" />
-
-    <parameter name="opacity" default-value="0.4" />
-        
-    <parameter name="followScroll" default-value="true" />
-    
-    <parameter name="closeOnBackgroundClick" default-value="false" />
-
-    <parameter name="blockDuration" default-value="0" />
-    
-    <parameter name="lifeTime" default-value="0" />
-            
-    <parameter name="toggle" default-value="literal:fade" />
-            
-    <parameter name="toggleDuration" default-value="150" />
-    
-    <inject property="script" type="script" object="Dialog.script"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/Dialog.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/Dialog.script
deleted file mode 100644
index 5ed222e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/Dialog.script
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC
-        "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-        "http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<!-- 
-   Copyright 2004, 2005, 2006 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<script>
-    <input-symbol key="component" required="yes" />
-    <input-symbol key="props" required="yes" />
-    
-    <let key="widget" unique="yes">
-        dialog
-    </let>
-
-    <body>
-        <unique>
-            dojo.require("tapestry.widget.Widget");
-        </unique>
-    </body>
-    
-    <initialization>
-        tapestry.widget.synchronizeWidgetState("${component.clientId}", "Dialog", ${props}, ${component.destroy});
-        <if expression="component.hidden">
-            dojo.widget.byId("${component.clientId}").hide();
-        </if>
-        <if-not expression="component.hidden">
-            dojo.widget.byId("${component.clientId}").show();
-        </if-not>
-    </initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/InlineEditBox.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/InlineEditBox.java
deleted file mode 100644
index 1691b90..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/InlineEditBox.java
+++ /dev/null
@@ -1,190 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-package org.apache.tapestry.dojo.html;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.tapestry.*;

-import org.apache.tapestry.dojo.AbstractWidget;

-import org.apache.tapestry.engine.DirectServiceParameter;

-import org.apache.tapestry.engine.IEngineService;

-import org.apache.tapestry.json.JSONObject;

-import org.apache.tapestry.link.DirectLink;

-import org.apache.tapestry.listener.ListenerInvoker;

-

-import java.util.Collections;

-import java.util.HashMap;

-import java.util.List;

-import java.util.Map;

-

-

-/**

- * Wraps a dojo InlineEditBox widget. 

- * 

- * <p>

- * Manages a single string value that when hovered over can be edited "inline" in the document

- * wherever it is referenced. Supports various modes of operation (ie disable/enabled), as well as 

- * textarea or single line style edits.

- * </p>

- *

- *

- * <p>

- * Some of the commonly used widget functions to listen to are:<br/>

- * <ul>

- *  <li><b>onSave - </b>When the save button is clicked. Default function listened to when updating

- *  server side managed value.

- *  </li>

- *  <li><b>onUndo - </b>When cancel button is clicked.</li>

- *  <li><b>onMouseOver - </b>Mouse moved over editable region.</li>

- *  <li><b>onMouseOut - </b>Mouse moved away from editable region.</li>

- * </ul>

- * </p>

- * 

- */

-public abstract class InlineEditBox extends AbstractWidget implements IDirect

-{

-    /** 

-     * Default single line editing text mode. Use as one of two possible

-     * parameters to the <code>mode</code> parameter.

-     */

-    public static final String TEXT_MODE = "text";

-    

-    /** 

-     * Multi line editing text mode. Use as one of two possible

-     * parameters to the <code>mode</code> parameter.

-     */

-    public static final String TEXT_AREA_MODE = "textarea";

-    

-    public abstract String getValue();

-    public abstract void setValue(String value);

-    

-    public abstract String getMode();

-    

-    public abstract int getMinWidth();

-    

-    public abstract int getMinHeight();

-    

-    public abstract boolean getDoFade();

-    

-    public abstract boolean isDisabled();

-

-    public abstract IActionListener getListener();

-

-    public abstract Object getParameters();

-

-    public abstract void setStateful(boolean value);

-

-    /**

-     * {@inheritDoc}

-     */

-    public void renderWidget(IMarkupWriter writer, IRequestCycle cycle)

-    {

-        if (!cycle.isRewinding())

-        {    

-            writer.begin(getTemplateTagName()); // use whatever template tag they specified

-            renderInformalParameters(writer, cycle);

-            renderIdAttribute(writer, cycle);

-        }

-        

-        renderBody(writer, cycle);

-        

-        if (!cycle.isRewinding())

-        {    

-            writer.end();

-        }

-        

-        if(getMode() == null || (!TEXT_MODE.equals(getMode()) && !TEXT_AREA_MODE.equals(getMode())))

-            throw new ApplicationRuntimeException(WidgetMessages.invalidTextMode(getMode()));

-        

-        if (cycle.isRewinding())

-            return;

-        

-        JSONObject prop = new JSONObject();

-        prop.put("widgetId", getClientId());

-        prop.put("value", getValue());

-        prop.put("mode", getMode());

-        prop.put("minWidth", getMinWidth());

-        prop.put("minHeight", getMinHeight());

-        prop.put("doFade", getDoFade());

-        

-        Map parms = new HashMap();

-        parms.put("component", this);

-        parms.put("props", prop.toString());

-        

-        PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, this);

-        getScript().execute(this, cycle, prs, parms);

-    }

-    

-    /**

-     * Callback url used by client side widget to update server component.

-     *

-     * @return The url string to be used by the client side js function to notify

-     *          this component that an update has been made.

-     */

-    public String getUpdateUrl()

-    {

-        Object[] parameters = DirectLink.constructServiceParameters(getParameters());

-

-        DirectServiceParameter dsp = new DirectServiceParameter(this, parameters);

-        

-        return getEngine().getLink(isStateful(), dsp).getURL();

-    }

-    

-    /**

-     * {@inheritDoc}

-     */

-    public List getUpdateComponents()

-    {

-        return Collections.EMPTY_LIST;

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    public boolean isAsync()

-    {

-        return true;

-    }

-

-    /**

-     * {@inheritDoc}

-     */

-    public boolean isJson()

-    {

-        return false;

-    }

-    

-    /**

-     * {@inheritDoc}

-     */

-    public void trigger(IRequestCycle cycle)

-    {

-        String newValue = cycle.getParameter(getClientId());

-        

-        setValue(newValue);

-

-        if (getListener() != null)

-        {

-            getListenerInvoker().invokeListener(getListener(), this, cycle);

-        }

-    }

-    

-    /** Injected. */

-    public abstract IEngineService getEngine();

-    

-    /** Injected. */

-    public abstract IScript getScript();

-

-    /** Injected. */

-    public abstract ListenerInvoker getListenerInvoker();

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/InlineEditBox.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/InlineEditBox.jwc
deleted file mode 100644
index fa31feb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/InlineEditBox.jwc
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!-- 

-   Copyright 2004, 2005, 2006 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE component-specification PUBLIC

-        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"

-        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">

-

-<component-specification class="org.apache.tapestry.dojo.html.InlineEditBox"

-                         allow-body="yes" allow-informal-parameters="yes">

-

-    <description>

-        Creates an inline editable textbox/textarea.

-    </description>

-

-    <parameter name="value" required="yes" />

-

-    <parameter name="listener" />

-

-    <parameter name="parameters">

-        <description>

-            An object, or list of objects, encoded into the URL as listener

-            parameters (and made available to the ulimate listener object or method).

-        </description>

-    </parameter>

-

-    <parameter name="stateful" default-value="true"/>

-

-    <parameter name="mode" default-value="literal:text" />

-

-    <parameter name="minWidth" default-value="100" />

-

-    <parameter name="minHeight" default-value="200" />

-

-    <parameter name="doFade" default-value="false" />

-

-    <parameter name="disabled" default-value="false" />

-

-    <inject property="engine" object="service:tapestry.services.Direct"/>

-

-    <inject property="script" type="script" object="InlineEditBox.script"/>

-

-    <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>

-

-</component-specification>

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/InlineEditBox.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/InlineEditBox.script
deleted file mode 100644
index 711c9de..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/InlineEditBox.script
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>

-<!DOCTYPE script PUBLIC

-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"

-  "http://tapestry.apache.org/dtd/Script_3_0.dtd">

-<!-- 

-   Copyright 2004, 2005, 2006 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-<script>

-

-<input-symbol key="component" required="yes" />

-<input-symbol key="props" required="yes" />

-<let key="box" unique="yes">

-inlineBox

-</let>

-    <body>

-    <unique>

-    dojo.require("tapestry.widget.Widget");

-    </unique>

-    </body>

-    <initialization>

-    tapestry.widget.synchronizeWidgetState("${component.clientId}", "InlineEditBox", ${props}, ${component.destroy});

-    

-    var ${box}=dojo.widget.byId("${component.clientId}");

-    <if-not expression="component.disabled">

-        ${box}.enable();

-    </if-not><if expression="component.disabled">

-        ${box}.disable();

-    </if>

-    dojo.event.connectOnce(${box}.form, "onsubmit", function(e){dojo.event.browser.stopEvent(e);}); 

-    dojo.event.connectOnce(${box}, "onSave", function(newValue, oldValue){

-    	tapestry.bind("${component.updateUrl}", {"${component.clientId}":newValue}, true);

-    });

-    </initialization>

-</script>

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/ScriptIncludes.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/ScriptIncludes.java
deleted file mode 100644
index a9834d8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/ScriptIncludes.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.html;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.Shell;
-
-
-/**
- * This component that can be used <em>instead of</em> the {@link Shell}, mainly for 
- * situations where you either don't use the {@link Shell} component or can't because
- * you are writing portlets.
- *
- * @author jkuhnert
- */
-public abstract class ScriptIncludes extends AbstractComponent
-{
-    public abstract IRender getAjaxDelegate();
-    
-    public abstract IRender getDelegate();
-    
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.isRewinding())
-            return;
-        
-        IRender delegate = getDelegate();
-        
-        if (delegate != null)
-            delegate.render(writer, cycle);
-        
-        IRender ajaxDelegate = getAjaxDelegate();
-        
-        if (ajaxDelegate != null)
-            ajaxDelegate.render(writer, cycle);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/ScriptIncludes.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/ScriptIncludes.jwc
deleted file mode 100644
index dcbeb69..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/ScriptIncludes.jwc
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2006 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.dojo.html.ScriptIncludes" 
-        allow-informal-parameters="no" allow-body="no">
-
-    <description>
-        Provides the necessary script include html elements to properly include the global dojo / tapestry 
-        javascript package libraries.
-    </description>
-
-    <parameter name="delegate">
-        <description>
-            If specified, the delegate is rendered before the close of the &lt;head&gt; tag
-            (typically used to provide &lt;meta&gt; tags).
-        </description>
-    </parameter>
-
-    <parameter name="ajaxDelegate" default-value="bean:coreAjaxDelegate">
-        <description>
-            If specified, allows for the default ajaxDelegate that renders the dojo script includes
-            to be overriden.
-        </description>
-    </parameter>
-
-    <parameter name="browserLogLevel" default-value="literal:WARNING">
-        <description>
-            Sets the default browser based log level. Default value is INFO. Uses the dojo.logging
-            API.
-        </description>
-    </parameter>
-
-    <parameter name="debugEnabled" default-value="false">
-        <description>Allows turning browser debug logging statements on/off.</description>
-    </parameter>
-    
-    <parameter name="debugAtAllCosts" default-value="false" />
-    
-    <parameter name="debugContainerId">
-        <description>
-            Sets the html element node id of the element you would like all browser debug content to
-            go to, if you have logging turned on.
-        </description>
-    </parameter>
-    
-    <parameter name="consoleEnabled" default-value="false" />
-    
-    <parameter name="preventBackButtonFix" default-value="false" />
-    
-    <parameter name="parseWidgets" default-value="false">
-        <description>
-            Tells dojo whether or not to parse widgets by traversing the entire dom node of your
-            document. It is highly reccomended that you keep this at its default value of false.
-        </description>
-    </parameter>
-
-    <parameter name="tapestrySource" default-value="asset:defaultTapestrySource">
-        <description>
-            If specified, allows for the default tapestry source included to be overriden.
-        </description>
-    </parameter>
-    
-    <parameter name="tapestryPath" default-value="asset:defaultTapestryPath">
-        <description>
-            Sets the tapestry path, needed for dojo to properly detect and find tapestry js modules
-            when overriding the default dojo bundled with tapestry.
-        </description>
-    </parameter>
-    
-    <parameter name="dojoSource" default-value="asset:defaultDojoSource">
-        <description>
-            If specified, allows for the default dojo source included to be overriden.
-        </description>
-    </parameter>
-
-    <parameter name="dojoFormSource" default-value="asset:defaultDojoFormSource">
-        <description>
-            If specified, allows for the default dojo source included to be overriden.
-        </description>
-    </parameter>
-
-    <parameter name="dojoWidgetSource" default-value="asset:defaultDojoWidgetSource">
-        <description>
-            If specified, allows for the default dojo source included to be overriden.
-        </description>
-    </parameter>
-
-    <parameter name="dojoPath" default-value="asset:defaultDojoPath">
-        <description>
-            Specifies the default path to the root dojo folder, not the dojo.js file itself. This is
-            used by the djConfig.baseRelativePath javascript configuration variable in dojo.
-        </description>
-    </parameter>
-
-    <bean name="coreAjaxDelegate" class="org.apache.tapestry.dojo.AjaxShellDelegate">
-        <set name="dojoSource" value="dojoSource" />
-        <set name="dojoFormSource" value="dojoFormSource" />
-        <set name="dojoWidgetSource" value="dojoWidgetSource" />
-        <set name="dojoPath" value="dojoPath" />
-        <set name="tapestrySource" value="tapestrySource" />
-        <set name="tapestryPath" value="tapestryPath" />
-        <set name="logLevel" value="browserLogLevel" />
-        <set name="debug" value="debugEnabled" />
-        <set name="debugAtAllCosts" value="debugAtAllCosts" />
-        <set name="debugContainerId" value="debugContainerId" />
-        <set name="consoleEnabled" value="consoleEnabled" />
-        <set name="preventBackButtonFix" value="preventBackButtonFix" />
-        <set name="parseWidgets" value="parseWidgets" />
-    </bean>
-
-    <asset name="defaultDojoSource" path="classpath:/dojo-0.4.3/dojo.js" />
-    <asset name="defaultDojoFormSource" path="classpath:/dojo-0.4.3/dojo2.js" />
-    <asset name="defaultDojoWidgetSource" path="classpath:/dojo-0.4.3/dojo3.js" />
-    <asset name="defaultDojoPath" path="classpath:/dojo-0.4.3/" />
-    <asset name="defaultTapestrySource" path="classpath:/tapestry/core.js" />
-    <asset name="defaultTapestryPath" path="classpath:/tapestry/" />
-    
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script
deleted file mode 100644
index 64b8cfe..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<script>
-<input-symbol key="component" required="yes" />
-<input-symbol key="clientId" required="yes" />
-<input-symbol key="url" />
-<input-symbol key="events" />
-<input-symbol key="formEvents" />
-    <body>
-        <unique>
-        dojo.require("tapestry.event");
-        </unique>
-    </body>
-    <initialization>
-        <if expression="events">
-            <foreach expression="events" key="event">
-                tapestry.cleanConnect(dojo.widget.byId("${clientId}"), "${event[0]}", "event${event[1]}");
-                tapestry.event${event[1]}=function(e){
-                    var content={beventname:"${event[0]}", bcomponentid:"${component.id}"};
-                    tapestry.event.buildEventProperties(e, content, arguments);
-                    if (!content["beventtarget.id"]) content["beventtarget.id"]="${clientId}";
-                    tapestry.bind("${url}", content);
-                };
-                dojo.event.connect(dojo.widget.byId("${clientId}"), "${event[0]}", tapestry, "event${event[1]}");
-            </foreach>
-        </if>
-        <if expression="formEvents">
-            <foreach expression="formEvents" key="formEvent">
-                tapestry.cleanConnect(dojo.widget.byId("${clientId}"), 
-                                     "${formEvent[0]}", "formEvent${formEvent[4]}");
-                tapestry.formEvent${formEvent[4]}=function(e){
-                    var content={beventname:"${formEvent[0]}", bcomponentid:"${component.id}"};
-                    tapestry.event.buildEventProperties(e, content, arguments);
-                    if (!content["beventtarget.id"]) content["beventtarget.id"]="${clientId}";
-
-                  <foreach expression="formEvent[1]" key="formName">
-                   var validateState=tapestry.form.forms["${formName}"].validateForm;
-                   var validateForm=${formEvent[3]};
-                   tapestry.form.setFormValidating("${formName}", validateForm);
-                   
-                    <if expression="formEvent[2]">
-                    tapestry.form.submitAsync("${formName}", content);
-                    </if>
-                    <if-not expression="formEvent[2]">
-                    tapestry.form.submit("${formName}");
-                    </if-not>
-                    
-                    tapestry.form.setFormValidating("${formName}", validateState);
-                    </foreach>
-                };
-                dojo.event.connect(dojo.widget.byId("${clientId}"), "${formEvent[0]}",
-                                   tapestry, "formEvent${formEvent[4]}");
-            </foreach>
-        </if>
-    </initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetMessages.java
deleted file mode 100644
index bdb9fca..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetMessages.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-package org.apache.tapestry.dojo.html;

-

-import org.apache.hivemind.impl.MessageFormatter;

-

-

-/**

- * Provides error message formatting functions for the dojo html 

- * widget component package.

- */

-public final class WidgetMessages

-{

-    protected static final MessageFormatter _formatter = new MessageFormatter(WidgetMessages.class);

-    

-    /* defeat instantiation */

-    private WidgetMessages() { }

-    

-    public static String invalidTextMode(String value)

-    {

-        return _formatter.format("invalid-text-mode", value);

-    }

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetMessages.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetMessages.properties
deleted file mode 100644
index 5221e21..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetMessages.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2006 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-invalid-text-mode=Text mode specified invalid: {0}. Valid mode options are "text" or "textarea".

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/package.html
deleted file mode 100644
index 9df418d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/html/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Html related components that are wrapped by dojo widgets.
-</p>
-
-@author Andreas Andreou <a href="mailto:andyhot@apache.org">andyhot@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/package.html
deleted file mode 100644
index 98a7561..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/dojo/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p/>Classes/utilities making up some of the core ajax functionality for tapestry.
-
-@author Jesse Kuhnert <a href="mailto:jkuhnert@apache.org">jkuhnert@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/AbstractEngine.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/AbstractEngine.java
deleted file mode 100644
index 0a30980..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/AbstractEngine.java
+++ /dev/null
@@ -1,515 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.ToStringBuilder;
-import org.apache.tapestry.*;
-import org.apache.tapestry.listener.ListenerMap;
-import org.apache.tapestry.services.ComponentMessagesSource;
-import org.apache.tapestry.services.DataSqueezer;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.services.TemplateSource;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Basis for building real Tapestry applications. Immediate subclasses provide different strategies
- * for managing page state and other resources between request cycles.
- * <p>
- * Note: much of this description is <em>in transition</em> as part of Tapestry 4.0. All ad-hoc
- * singletons and such are being replaced with HiveMind services.
- * <p>
- * Uses a shared instance of {@link TemplateSource},{@link ISpecificationSource},
- * {@link IScriptSource}and {@link ComponentMessagesSource}stored as attributes of the
- * {@link ServletContext}(they will be shared by all sessions).
- * <p>
- * An engine is designed to be very lightweight. Particularily, it should <b>never </b> hold
- * references to any {@link IPage}or {@link org.apache.tapestry.IComponent}objects. The entire
- * system is based upon being able to quickly rebuild the state of any page(s).
- * <p>
- * Where possible, instance variables should be transient.
- * <p>
- * In practice, a subclass (usually {@link BaseEngine}) is used without subclassing. Instead, a
- * visit object is specified. To facilitate this, the application specification may include a
- * property, <code>org.apache.tapestry.visit-class</code> which is the class name to instantiate
- * when a visit object is first needed. 
- * <p>
- * Some of the classes' behavior is controlled by JVM system properties (typically only used during
- * development): <table border=1>
- * <tr>
- * <th>Property</th>
- * <th>Description</th>
- * </tr>
- * <tr>
- * <td>org.apache.tapestry.enable-reset-service</td>
- * <td>If true, enabled an additional service, reset, that allow page, specification and template
- * caches to be cleared on demand.</td>
- * </tr>
- * <tr>
- * <td>org.apache.tapestry.disable-caching</td>
- * <td>If true, then the page, specification, template and script caches will be cleared after each
- * request. This slows things down, but ensures that the latest versions of such files are used.
- * Care should be taken that the source directories for the files preceeds any versions of the files
- * available in JARs or WARs.</td>
- * </tr>
- * </table>
- *
- * @author Howard Lewis Ship
- */
-
-public abstract class AbstractEngine implements IEngine
-{
-    /**
-     * The name of the application specification property used to specify the class of the visit
-     * object.
-     */
-
-    public static final String VISIT_CLASS_PROPERTY_NAME = "org.apache.tapestry.visit-class";
-
-    private static final Log LOG = LogFactory.getLog(AbstractEngine.class);
-
-    /**
-     * The link to the world of HiveMind services.
-     *
-     * @since 4.0
-     */
-    private Infrastructure _infrastructure;
-
-    private ListenerMap _listeners;
-
-    /**
-     * The curent locale for the engine, which may be changed at any time.
-     */
-
-    private Locale _locale;
-
-    /**
-     * @see org.apache.tapestry.error.ExceptionPresenter
-     */
-
-    protected void activateExceptionPage(IRequestCycle cycle, Throwable cause)
-    {
-        _infrastructure.getExceptionPresenter().presentException(cycle, cause);
-    }
-
-    /**
-     * Writes a detailed report of the exception to <code>System.err</code>.
-     *
-     * @see org.apache.tapestry.error.RequestExceptionReporter
-     */
-
-    public void reportException(String reportTitle, Throwable ex)
-    {
-        _infrastructure.getRequestExceptionReporter().reportRequestException(reportTitle, ex);
-    }
-
-    /**
-     * Invoked at the end of the request cycle to release any resources specific to the request
-     * cycle. This implementation does nothing and may be overriden freely.
-     */
-
-    protected void cleanupAfterRequest(IRequestCycle cycle)
-    {
-
-    }
-
-    /**
-     * Returns the locale for the engine. This is initially set by the {@link ApplicationServlet}
-     * but may be updated by the application.
-     */
-
-    public Locale getLocale()
-    {
-        return _locale;
-    }
-
-    /**
-     * Returns a service with the given name.
-     *
-     * @see Infrastructure#getServiceMap()
-     * @see org.apache.tapestry.services.ServiceMap
-     */
-
-    public IEngineService getService(String name)
-    {
-        return _infrastructure.getServiceMap().getService(name);
-    }
-
-    /** @see Infrastructure#getApplicationSpecification() */
-
-    public IApplicationSpecification getSpecification()
-    {
-        return _infrastructure.getApplicationSpecification();
-    }
-
-    /** @see Infrastructure#getSpecificationSource() */
-
-    public ISpecificationSource getSpecificationSource()
-    {
-        return _infrastructure.getSpecificationSource();
-    }
-
-    /**
-     * Invoked, typically, when an exception occurs while servicing the request. This method resets
-     * the output, sets the new page and renders it.
-     */
-
-    protected void redirect(String pageName, IRequestCycle cycle,
-                            ApplicationRuntimeException exception)
-      throws IOException
-    {
-        IPage page = cycle.getPage(pageName);
-
-        cycle.activate(page);
-
-        renderResponse(cycle);
-    }
-
-    /**
-     * Delegates to
-     * {@link org.apache.tapestry.services.ResponseRenderer#renderResponse(IRequestCycle)}.
-     */
-
-    public void renderResponse(IRequestCycle cycle)
-      throws IOException
-    {
-        _infrastructure.getResponseRenderer().renderResponse(cycle);
-    }
-
-    /**
-     * Delegate method for the servlet. Services the request.
-     */
-
-    public void service(WebRequest request, WebResponse response)
-      throws IOException
-    {
-        IRequestCycle cycle = null;
-        IEngineService service = null;
-
-        if (_infrastructure == null)
-            _infrastructure = (Infrastructure) request.getAttribute(Constants.INFRASTRUCTURE_KEY);
-
-        // Create the request cycle; if this fails, there's not much that can be done ... everything
-        // else in Tapestry relies on the RequestCycle.
-
-        try
-        {
-            cycle = _infrastructure.getRequestCycleFactory().newRequestCycle(this);
-        }
-        catch (RuntimeException ex)
-        {
-            throw ex;
-        }
-        catch (Exception ex)
-        {
-            throw new IOException(ex.getMessage());
-        }
-
-        try
-        {
-            try
-            {
-                service = cycle.getService();
-
-                // Let the service handle the rest of the request.
-
-                service.service(cycle);
-            }
-            catch (PageRedirectException ex)
-            {
-                handlePageRedirectException(cycle, ex);
-            }
-            catch (RedirectException ex)
-            {
-                handleRedirectException(cycle, ex);
-            }
-            catch (StaleLinkException ex)
-            {
-                handleStaleLinkException(cycle, ex);
-            }
-            catch (StaleSessionException ex)
-            {
-                handleStaleSessionException(cycle, ex);
-            }
-        }
-        catch (Exception ex)
-        {
-            // Attempt to switch to the exception page. However, this may itself
-            // fail for a number of reasons, in which case an ApplicationRuntimeException is
-            // thrown.
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Uncaught exception", ex);
-
-            activateExceptionPage(cycle, ex);
-        }
-        finally
-        {
-            try
-            {
-                cycle.cleanup();
-                _infrastructure.getApplicationStateManager().flush();
-            }
-            catch (Exception ex)
-            {
-                reportException(EngineMessages.exceptionDuringCleanup(ex), ex);
-            }
-        }
-    }
-
-    /**
-     * Handles {@link PageRedirectException} which involves executing
-     * {@link IRequestCycle#activate(IPage)} on the target page (of the exception), until either a
-     * loop is found, or a page succesfully activates.
-     * <p>
-     * This should generally not be overriden in subclasses.
-     *
-     * @since 3.0
-     */
-
-    protected void handlePageRedirectException(IRequestCycle cycle, PageRedirectException exception)
-      throws IOException
-    {
-        List pageNames = new ArrayList();
-
-        String pageName = exception.getTargetPageName();
-
-        while (true)
-        {
-            if (pageNames.contains(pageName))
-            {
-                pageNames.add(pageName);
-
-                throw new ApplicationRuntimeException(EngineMessages.validateCycle(pageNames));
-            }
-
-            // Record that this page has been a target.
-
-            pageNames.add(pageName);
-
-            try
-            {
-                // Attempt to activate the new page.
-
-                cycle.activate(pageName);
-
-                break;
-            }
-            catch (PageRedirectException secondRedirectException)
-            {
-                pageName = secondRedirectException.getTargetPageName();
-            }
-        }
-
-        renderResponse(cycle);
-    }
-
-    /**
-     * Invoked by {@link #service(WebRequest, WebResponse)} if a {@link StaleLinkException} is
-     * thrown by the {@link IEngineService service}. This implementation sets the message property
-     * of the StaleLink page to the message provided in the exception, then invokes
-     * {@link #redirect(String, IRequestCycle, ApplicationRuntimeException)} to render the StaleLink
-     * page.
-     * <p>
-     * Subclasses may overide this method (without invoking this implementation). A better practice
-     * is to contribute an alternative implementation of
-     * {@link org.apache.tapestry.error.StaleLinkExceptionPresenter} to the
-     * tapestry.InfrastructureOverrides configuration point.
-     * <p>
-     * A common practice is to present an error message on the application's Home page. Alternately,
-     * the application may provide its own version of the StaleLink page, overriding the framework's
-     * implementation (probably a good idea, because the default page hints at "application errors"
-     * and isn't localized). The overriding StaleLink implementation must implement a message
-     * property of type String.
-     *
-     * @since 0.2.10
-     */
-
-    protected void handleStaleLinkException(IRequestCycle cycle, StaleLinkException exception)
-      throws IOException
-    {
-        _infrastructure.getStaleLinkExceptionPresenter().presentStaleLinkException(cycle, exception);
-    }
-
-    /**
-     * Invoked by {@link #service(WebRequest, WebResponse)} if a {@link StaleSessionException} is
-     * thrown by the {@link IEngineService service}. This implementation uses the
-     * {@link org.apache.tapestry.error.StaleSessionExceptionPresenter} to render the StaleSession
-     * page.
-     * <p>
-     * Subclasses may overide this method (without invoking this implementation), but it is better
-     * to override the tapestry.error.StaleSessionExceptionReporter service instead (or contribute a
-     * replacement to the tapestry.InfrastructureOverrides configuration point).
-     *
-     * @since 0.2.10
-     */
-
-    protected void handleStaleSessionException(IRequestCycle cycle, StaleSessionException exception)
-      throws IOException
-    {
-        _infrastructure.getStaleSessionExceptionPresenter().presentStaleSessionException(cycle, exception);
-    }
-
-    /**
-     * Changes the locale for the engine.
-     */
-
-    public void setLocale(Locale value)
-    {
-        Defense.notNull(value, "locale");
-
-        _locale = value;
-
-        // The locale may be set before the engine is initialized with the Infrastructure.
-
-        if (_infrastructure != null)
-            _infrastructure.setLocale(value);
-    }
-
-    /**
-     * @see Infrastructure#getClassResolver()
-     */
-
-    public ClassResolver getClassResolver()
-    {
-        return _infrastructure.getClassResolver();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("locale", _locale);
-
-        return builder.toString();
-    }
-
-    /**
-     * Gets the visit object from the
-     * {@link org.apache.tapestry.engine.state.ApplicationStateManager}, creating it if it does not
-     * already exist.
-     * <p>
-     * As of Tapestry 4.0, this will always create the visit object, possibly creating a new session
-     * in the process.
-     */
-
-    public Object getVisit()
-    {
-        return _infrastructure.getApplicationStateManager().get("visit");
-    }
-
-    public void setVisit(Object visit)
-    {
-        _infrastructure.getApplicationStateManager().store("visit", visit);
-    }
-
-    /**
-     * Gets the visit object from the
-     * {@link org.apache.tapestry.engine.state.ApplicationStateManager}, which will create it as
-     * necessary.
-     */
-
-    public Object getVisit(IRequestCycle cycle)
-    {
-        return getVisit();
-    }
-
-    public boolean getHasVisit()
-    {
-        return _infrastructure.getApplicationStateManager().exists("visit");
-    }
-
-    public IScriptSource getScriptSource()
-    {
-        return _infrastructure.getScriptSource();
-    }
-
-    /**
-     * Allows subclasses to include listener methods easily.
-     *
-     * @since 1.0.2
-     */
-
-    public ListenerMap getListeners()
-    {
-        if (_listeners == null)
-            _listeners = _infrastructure.getListenerMapSource().getListenerMapForObject(this);
-
-        return _listeners;
-    }
-
-    /**
-     * Invoked when a {@link RedirectException} is thrown during the processing of a request.
-     *
-     * @throws ApplicationRuntimeException
-     *             if an {@link IOException},{@link ServletException}is thrown by the redirect,
-     *             or if no {@link javax.servlet.RequestDispatcher} can be found for local resource.
-     * @since 2.2
-     */
-
-    protected void handleRedirectException(IRequestCycle cycle, RedirectException redirectException)
-    {
-        String location = redirectException.getRedirectLocation();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Redirecting to: " + location);
-
-        _infrastructure.getRequest().forward(location);
-    }
-
-    /**
-     * @see Infrastructure#getDataSqueezer()
-     */
-
-    public DataSqueezer getDataSqueezer()
-    {
-        return _infrastructure.getDataSqueezer();
-    }
-
-    /** @since 2.3 */
-
-    public IPropertySource getPropertySource()
-    {
-        return _infrastructure.getApplicationPropertySource();
-    }
-
-    /** @since 4.0 */
-    public Infrastructure getInfrastructure()
-    {
-        return _infrastructure;
-    }
-
-    public String getOutputEncoding()
-    {
-        return _infrastructure.getOutputEncoding();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/BaseEngine.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/BaseEngine.java
deleted file mode 100644
index 1845311..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/BaseEngine.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.Collection;
-import java.util.Collections;
-
-/**
- * Concrete implementation of {@link org.apache.tapestry.IEngine} used for ordinary applications.
- * All page state information is maintained in the {@link javax.servlet.http.HttpSession}.
- * 
- * @author Howard Lewis Ship
- */
-
-public class BaseEngine extends AbstractEngine
-{
-    /**
-     * Returns an unmodifiable {@link Collection} of the page names for which {@link IPageRecorder}
-     * instances exist. Note: Starting in 4.0, this method is deprecated and returns an empty list.
-     * 
-     * @deprecated
-     */
-
-    public Collection getActivePageNames()
-    {
-        return Collections.EMPTY_LIST;
-
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DefaultScriptSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DefaultScriptSource.java
deleted file mode 100644
index d7a8f9d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DefaultScriptSource.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.event.ReportStatusEvent;
-import org.apache.tapestry.event.ReportStatusListener;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.script.ScriptParser;
-import org.apache.tapestry.services.ExpressionEvaluator;
-import org.apache.tapestry.util.xml.DocumentParseException;
-
-import java.util.Map;
-
-/**
- * Provides basic access to scripts available on the classpath. Scripts are cached in memory once
- * parsed.
- *
- * @author Howard Lewis Ship
- * @since 1.0.2
- */
-
-public class DefaultScriptSource implements IScriptSource, ResetEventListener, ReportStatusListener
-{
-    private String _serviceId;
-
-    private ClassResolver _classResolver;
-
-    /** @since 4.0 */
-    private ExpressionEvaluator _expressionEvaluator;
-
-    /** @since 4.0 */
-    private ValueConverter _valueConverter;
-
-    private Map _cache = new ConcurrentHashMap();
-
-    public void resetEventDidOccur()
-    {
-        _cache.clear();
-    }
-
-    public void reportStatus(ReportStatusEvent event)
-    {
-        event.title(_serviceId);
-        event.property("parsed script count", _cache.size());
-        event.collection("parsed scripts", _cache.keySet());
-    }
-
-    public IScript getScript(Resource resource)
-    {
-        IScript result = (IScript) _cache.get(resource);
-
-        if (result != null)
-            return result;
-
-        result = parse(resource);
-
-        _cache.put(resource, result);
-
-        return result;
-    }
-
-    private IScript parse(Resource resource)
-    {
-        ScriptParser parser = new ScriptParser(_classResolver, _expressionEvaluator, _valueConverter);
-        try
-        {
-            return parser.parse(resource);
-        }
-        catch (DocumentParseException ex)
-        {
-            throw new ApplicationRuntimeException(Tapestry.format("DefaultScriptSource.unable-to-parse-script",
-                                                                  resource), ex);
-        }
-    }
-
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-
-    /** @since 4.0 */
-    public void setExpressionEvaluator(ExpressionEvaluator expressionEvaluator)
-    {
-        _expressionEvaluator = expressionEvaluator;
-    }
-
-    /** @since 4.0 */
-    public void setValueConverter(ValueConverter valueConverter)
-    {
-        _valueConverter = valueConverter;
-    }
-
-    public void setServiceId(String serviceId)
-    {
-        _serviceId = serviceId;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectEventService.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectEventService.java
deleted file mode 100644
index 37b05a9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectEventService.java
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IDirectEvent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleSessionException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-
-/**
- * Implementation of the direct event service, which encodes the page and component id in the service
- * context, and passes application-defined parameters as well.
- * 
- * @author jkuhnert
- * @since 4.1
- */
-
-public class DirectEventService implements IEngineService
-{   
-    /** @since 4.0 */
-    private ResponseRenderer _responseRenderer;
-
-    /** @since 4.0 */
-    private LinkFactory _linkFactory;
-
-    /** @since 4.0 */
-    private WebRequest _request;
-
-    /** @since 4.0 */
-    private IRequestCycle _requestCycle;
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        Defense.isAssignable(parameter, DirectEventServiceParameter.class, "parameter");
-
-        DirectEventServiceParameter dsp = (DirectEventServiceParameter) parameter;
-
-        IComponent component = dsp.getDirect();
-
-        // New since 1.0.1, we use the component to determine
-        // the page, not the cycle. Through the use of tricky
-        // things such as Block/InsertBlock, it is possible
-        // that a component from a page different than
-        // the response page will render.
-        // In 1.0.6, we start to record *both* the render page
-        // and the component page (if different).
-
-        IPage activePage = _requestCycle.getPage();
-        IPage componentPage = component.getPage();
-        
-        Map parameters = new HashMap();
-        
-        boolean stateful = _request.getSession(false) != null;
-        
-        parameters.put(ServiceConstants.PAGE, activePage.getPageName());
-        parameters.put(ServiceConstants.COMPONENT, component.getIdPath());
-        parameters.put(ServiceConstants.CONTAINER, componentPage == activePage ? null
-                : componentPage.getPageName());
-        parameters.put(ServiceConstants.SESSION, stateful ? "T" : null);
-        if (dsp.getUpdateParts() != null && dsp.getUpdateParts().length > 0)
-            parameters.put(ServiceConstants.UPDATE_PARTS, dsp.getUpdateParts());
-        if (dsp.isJSON())
-            parameters.put("json", String.valueOf(dsp.isJSON()));
-        parameters.put(ServiceConstants.PARAMETER, dsp.getServiceParameters());
-        
-        return _linkFactory.constructLink(this, post, parameters, true);
-    }
-
-    public void service(IRequestCycle cycle) throws IOException
-    {
-        String componentId = cycle.getParameter(ServiceConstants.COMPONENT);
-        String componentPageName = cycle.getParameter(ServiceConstants.CONTAINER);
-        String activePageName = cycle.getParameter(ServiceConstants.PAGE);
-        boolean activeSession = cycle.getParameter(ServiceConstants.SESSION) != null;
-        
-        IPage page = cycle.getPage(activePageName);
-
-        cycle.activate(page);
-
-        IPage componentPage = componentPageName == null ? page : cycle.getPage(componentPageName);
-
-        IComponent component = componentPage.getNestedComponent(componentId);
-
-        IDirectEvent direct = null;
-
-        try
-        {
-            direct = (IDirectEvent) component;
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(EngineMessages.wrongComponentType(
-                    component,
-                    IDirectEvent.class), component, null, ex);
-        }
-
-        // Check for a StaleSession only when the session was stateful when
-        // the link was created.
-
-        if (activeSession && direct.isStateful())
-        {
-            WebSession session = _request.getSession(false);
-
-            if (session == null || session.isNew())
-                throw new StaleSessionException(EngineMessages.requestStateSession(direct),
-                        componentPage);
-        }
-        
-        Object[] parameters = _linkFactory.extractListenerParameters(cycle);
-        
-        triggerComponent(cycle, direct, parameters);
-        
-        // Render the response. This will be the active page
-        // unless the direct component (or its delegate) changes it.
-        
-        _responseRenderer.renderResponse(cycle);
-    }
-
-    /** @since 4.0 */
-
-    protected void triggerComponent(IRequestCycle cycle, IDirectEvent direct, Object[] parameters)
-    {
-        if (!BrowserEvent.hasBrowserEvent(cycle))
-            throw new ApplicationRuntimeException(EngineMessages.noBrowserEvent());
-        
-        BrowserEvent event = new BrowserEvent(cycle);
-        
-        Object[] parms = new Object[parameters.length + 1];
-        System.arraycopy(parameters, 0, parms, 0, parameters.length);
-        parms[parms.length - 1] = event;
-        
-        cycle.setListenerParameters(parms);
-        
-        direct.triggerEvent(cycle, event);
-    }
-
-    public String getName()
-    {
-        return Tapestry.DIRECT_EVENT_SERVICE;
-    }
-
-    /** @since 4.0 */
-    public void setResponseRenderer(ResponseRenderer responseRenderer)
-    {
-        _responseRenderer = responseRenderer;
-    }
-
-    /** @since 4.0 */
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-
-    /** @since 4.0 */
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-
-    /** @since 4.0 */
-    public void setRequestCycle(IRequestCycle requestCycle)
-    {
-        _requestCycle = requestCycle;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectEventServiceParameter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectEventServiceParameter.java
deleted file mode 100644
index 9a53722..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectEventServiceParameter.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IDirectEvent;
-
-/**
- * Parameter object used by {@link org.apache.tapestry.engine.DirectEventService}.
- * 
- * @author jkuhnert
- * @since 4.1
- */
-public class DirectEventServiceParameter
-{
-    protected IDirectEvent _direct;
-
-    protected Object[] _serviceParameters;
-
-    protected String[] _updateParts;
-    
-    protected boolean _json;
-    
-    public DirectEventServiceParameter(IDirectEvent direct)
-    {
-        this(direct, null, null, false);
-    }
-
-    public DirectEventServiceParameter(IDirectEvent direct, Object[] serviceParameters)
-    {
-        this(direct, serviceParameters, null, false);
-    }
-    
-    /**
-     * Creates a new direct service parameter map. 
-     * 
-     * @param direct The object implementing the direct triggerable interface
-     * @param serviceParameters The parameters for the triggered object
-     * @param updateParts The parts expected to be updated on any returned response
-     * triggerd by this direct call.
-     */
-    public DirectEventServiceParameter(IDirectEvent direct, Object[] serviceParameters,
-            String[] updateParts, boolean json)
-    {
-        Defense.notNull(direct, "direct");
-        
-        _direct = direct;
-        _serviceParameters = serviceParameters;
-        _updateParts = updateParts;
-        _json = json;
-    }
-
-    public IDirectEvent getDirect()
-    {
-        return _direct;
-    }
-
-    public Object[] getServiceParameters()
-    {
-        return _serviceParameters;
-    }
-    
-    public String[] getUpdateParts()
-    {
-        return _updateParts;
-    }
-    
-    public boolean isJSON()
-    {
-        return _json;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectService.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectService.java
deleted file mode 100644
index 74726ed..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectService.java
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Implementation of the direct service, which encodes the page and component id in the service
- * context, and passes application-defined parameters as well.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.9
- */
-
-public class DirectService implements IEngineService
-{
-    /** @since 4.0 */
-    protected ResponseRenderer _responseRenderer;
-
-    /** @since 4.0 */
-    protected LinkFactory _linkFactory;
-
-    /** @since 4.0 */
-    protected WebRequest _request;
-
-    /** @since 4.0 */
-    private IRequestCycle _requestCycle;
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        Defense.isAssignable(parameter, DirectServiceParameter.class, "parameter");
-
-        DirectServiceParameter dsp = (DirectServiceParameter) parameter;
-
-        IComponent component = dsp.getDirect();
-        IDirect direct = dsp.getDirect();
-
-        // New since 1.0.1, we use the component to determine
-        // the page, not the cycle. Through the use of tricky
-        // things such as Block/InsertBlock, it is possible
-        // that a component from a page different than
-        // the response page will render.
-        // In 1.0.6, we start to record *both* the render page
-        // and the component page (if different).
-
-        IPage activePage = _requestCycle.getPage();
-        IPage componentPage = component.getPage();
-        
-        Map parameters = new HashMap();
-
-        boolean stateful = _request.getSession(false) != null;
-        
-        parameters.put(ServiceConstants.PAGE, activePage.getPageName());
-        parameters.put(ServiceConstants.COMPONENT, component.getIdPath());
-        parameters.put(ServiceConstants.CONTAINER, componentPage == activePage ? null
-                : componentPage.getPageName());
-        parameters.put(ServiceConstants.SESSION, stateful ? "T" : null);
-        
-        // handle dynamic XHR/JSON parameters
-        if (dsp.isAsync() || dsp.isJson()) {
-            
-            if (dsp.getUpdateParts() != null && dsp.getUpdateParts().length > 0)
-                parameters.put(ServiceConstants.UPDATE_PARTS, dsp.getUpdateParts());
-            
-            if (dsp.isJson())
-                parameters.put("json", String.valueOf(dsp.isJson()));
-            
-            // don't need to put isAsync parameter in as that is handled via http headers
-        }
-        
-        parameters.put(ServiceConstants.PARAMETER, dsp.getServiceParameters());
-        
-        return _linkFactory.constructLink(this, post, parameters, direct.isStateful());
-    }
-
-    public void service(IRequestCycle cycle) throws IOException
-    {
-        String componentId = cycle.getParameter(ServiceConstants.COMPONENT);
-        String componentPageName = cycle.getParameter(ServiceConstants.CONTAINER);
-        String activePageName = cycle.getParameter(ServiceConstants.PAGE);
-        boolean activeSession = cycle.getParameter(ServiceConstants.SESSION) != null;
-        
-        IPage page = cycle.getPage(activePageName);
-
-        cycle.activate(page);
-
-        IPage componentPage = componentPageName == null ? page : cycle.getPage(componentPageName);
-
-        IComponent component = componentPage.getNestedComponent(componentId);
-
-        IDirect direct = null;
-
-        try
-        {
-            direct = (IDirect) component;
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(EngineMessages.wrongComponentType(
-                    component,
-                    IDirect.class), component, null, ex);
-        }
-
-        // Check for a StaleSession only when the session was stateful when
-        // the link was created.
-
-        if (activeSession && direct.isStateful())
-        {
-            WebSession session = _request.getSession(false);
-
-            if (session == null || session.isNew())
-                throw new StaleSessionException(EngineMessages.requestStateSession(direct),
-                        componentPage);
-        }
-
-        Object[] parameters = _linkFactory.extractListenerParameters(cycle);
-
-        triggerComponent(cycle, direct, parameters);
-
-        // Render the response. This will be the active page
-        // unless the direct component (or its delegate) changes it.
-
-        _responseRenderer.renderResponse(cycle);
-    }
-
-    /** @since 4.0 */
-
-    protected void triggerComponent(IRequestCycle cycle, IDirect direct, Object[] parameters)
-    {
-        if (BrowserEvent.hasBrowserEvent(cycle))
-        {    
-            BrowserEvent event = new BrowserEvent(cycle);
-            
-            Object[] parms = new Object[parameters.length + 1];
-            System.arraycopy(parameters, 0, parms, 0, parameters.length);
-            parms[parms.length - 1] = event;
-            
-            cycle.setListenerParameters(parms);
-        } else
-            cycle.setListenerParameters(parameters);
-        
-        direct.trigger(cycle);
-    }
-
-    public String getName()
-    {
-        return Tapestry.DIRECT_SERVICE;
-    }
-
-    /** @since 4.0 */
-    public void setResponseRenderer(ResponseRenderer responseRenderer)
-    {
-        _responseRenderer = responseRenderer;
-    }
-
-    /** @since 4.0 */
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-
-    /** @since 4.0 */
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-
-    /** @since 4.0 */
-    public void setRequestCycle(IRequestCycle requestCycle)
-    {
-        _requestCycle = requestCycle;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectServiceParameter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectServiceParameter.java
deleted file mode 100644
index 893252e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/DirectServiceParameter.java
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IDynamicInvoker;
-
-import java.util.Collection;
-
-/**
- * Parameter object used by {@link org.apache.tapestry.engine.DirectService}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DirectServiceParameter
-{
-    private IDirect _direct;
-
-    private Object[] _serviceParameters;
-
-    private String[] _updateParts;
-    
-    private boolean _json;
-    
-    private boolean _async;
-    
-    public DirectServiceParameter(IDirect direct)
-    {
-        this(direct, null);
-    }
-    
-    public DirectServiceParameter(IDirect direct, Object[] serviceParameters)
-    {
-        this(direct, serviceParameters, null);
-    }
-    
-    public DirectServiceParameter(IDirect direct, Object[] serviceParameters, IDynamicInvoker invoker)
-    {
-        Defense.notNull(direct, "direct");
-        
-        _direct = direct;
-        _serviceParameters = serviceParameters;
-        
-        if (invoker == null) {
-            
-            Collection comps = direct.getUpdateComponents();
-            if (comps == null)
-                _updateParts = new String[0];
-            else
-                _updateParts = (String[])comps.toArray(new String[comps.size()]);
-            
-            _json = direct.isJson();
-            _async = direct.isAsync();
-        } else {
-            
-            Collection comps = invoker.getUpdateComponents();
-            if (comps == null)
-                _updateParts = new String[0];
-            else
-                _updateParts = (String[])comps.toArray(new String[comps.size()]);
-            
-            _json = invoker.isJson();
-            _async = invoker.isAsync();
-        }
-        
-        // if they gave only an updateComponents param make it async by default
-        
-        if (!_json && !_async && _updateParts.length > 0)
-            _async = true;
-    }
-    
-    public IDirect getDirect()
-    {
-        return _direct;
-    }
-
-    public Object[] getServiceParameters()
-    {
-        return _serviceParameters;
-    }
-
-    public String[] getUpdateParts()
-    {
-        return _updateParts;
-    }
-    
-    public boolean isJson()
-    {
-        return _json;
-    }
-    
-    public boolean isAsync()
-    {
-        return _async;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineMessages.java
deleted file mode 100644
index e74f4d5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineMessages.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.List;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class EngineMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(EngineMessages.class);
-
-    /* defeat instantiation */
-    private EngineMessages() { }
-    
-    public static String serviceNoParameter(IEngineService service)
-    {
-        return _formatter.format("service-no-parameter", service.getName());
-    }
-
-    public static String wrongComponentType(IComponent component, Class expectedType)
-    {
-        return _formatter.format("wrong-component-type", component.getExtendedId(), expectedType
-                .getName());
-    }
-
-    public static String requestStateSession(IComponent component)
-    {
-        return _formatter.format("request-stale-session", component.getExtendedId());
-    }
-
-    public static String pageNotCompatible(IPage page, Class expectedType)
-    {
-        return _formatter.format("page-not-compatible", page.getPageName(), expectedType.getName());
-    }
-
-    public static String noBrowserEvent()
-    {
-        return _formatter.format("missing-browser-event", new Object[]{});
-    }
-    
-    static String exceptionDuringCleanup(Throwable cause)
-    {
-        return _formatter.format("exception-during-cleanup", cause);
-    }
-
-    static String validateCycle(List pageNames)
-    {
-        StringBuffer buffer = new StringBuffer();
-        int count = pageNames.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            if (i > 0)
-                buffer.append("; ");
-
-            buffer.append(pageNames.get(i));
-        }
-
-        return _formatter.format("validate-cycle", buffer);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineServiceLink.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineServiceLink.java
deleted file mode 100644
index 9d76802..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineServiceLink.java
+++ /dev/null
@@ -1,256 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.commons.codec.net.URLCodec;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.QueryParameterMap;
-import org.apache.tapestry.web.WebRequest;
-
-import java.io.UnsupportedEncodingException;
-
-/**
- * A EngineServiceLink represents a possible action within the client web browser; either clicking a
- * link or submitting a form, which is constructed primarily from the servlet path, with some
- * additional query parameters. A full URL for the EngineServiceLink can be generated, or the query
- * parameters for the EngineServiceLink can be extracted (separately from the servlet path). The
- * latter case is used when submitting constructing {@link org.apache.tapestry.form.Form forms}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class EngineServiceLink implements ILink
-{
-    private static final int DEFAULT_HTTP_PORT = 80;
-    
-    private static final int DEFAULT_HTTPS_PORT = 443;
-
-    private final String _servletPath;
-
-    private final URLCodec _codec;
-
-    private IRequestCycle _cycle;
-    
-    private boolean _stateful;
-    
-    private String _encoding;
-
-    /** @since 4.0 */
-    private final QueryParameterMap _parameters;
-
-    /** @since 4.0 */
-
-    private final WebRequest _request;
-    
-    /**
-     * Creates a new EngineServiceLink.
-     * 
-     * @param servletPath
-     *            The path used to invoke the Tapestry servlet.
-     * @param codec
-     *            A codec for converting strings into URL-safe formats.
-     * @param encoding
-     *            The output encoding for the request.
-     * @param parameters
-     *            The query parameters to be encoded into the url. Keys are strings, values are
-     *            null, string or array of string. The map is retained, not copied.
-     * @param stateful
-     *            if true, the service which generated the EngineServiceLink is stateful and expects
-     *            that the final URL will be passed through {@link IRequestCycle#encodeURL(String)}.
-     */
-    
-    public EngineServiceLink(String servletPath, String encoding,
-            URLCodec codec, WebRequest request, QueryParameterMap parameters, boolean stateful)
-    {
-        Defense.notNull(servletPath, "servletPath");
-        Defense.notNull(encoding, "encoding");
-        Defense.notNull(codec, "codec");
-        Defense.notNull(request, "request");
-        Defense.notNull(parameters, "parameters");
-        
-        _servletPath = servletPath;
-        _encoding = encoding;
-        _codec = codec;
-        _request = request;
-        _stateful = stateful;
-        _parameters = parameters;
-    }
-    
-    /**
-     * Creates a new EngineServiceLink. Primarily used in portlet applications with the
-     * additional {@link IRequestCycle} parameter being used to encode asset urls.
-     * 
-     * @param cycle
-     *            The {@link IRequestCycle}&nbsp; the EngineServiceLink is to be created for.
-     * @param servletPath
-     *            The path used to invoke the Tapestry servlet.
-     * @param codec
-     *            A codec for converting strings into URL-safe formats.
-     * @param encoding
-     *            The output encoding for the request.
-     * @param parameters
-     *            The query parameters to be encoded into the url. Keys are strings, values are
-     *            null, string or array of string. The map is retained, not copied.
-     * @param stateful
-     *            if true, the service which generated the EngineServiceLink is stateful and expects
-     *            that the final URL will be passed through {@link IRequestCycle#encodeURL(String)}.
-     */
-
-    public EngineServiceLink(IRequestCycle cycle, String servletPath, String encoding,
-            URLCodec codec, WebRequest request, QueryParameterMap parameters, boolean stateful)
-    {
-        Defense.notNull(cycle, "cycle");
-        Defense.notNull(servletPath, "servletPath");
-        Defense.notNull(encoding, "encoding");
-        Defense.notNull(codec, "codec");
-        Defense.notNull(request, "request");
-        Defense.notNull(parameters, "parameters");
-        
-        _cycle = cycle;
-        _servletPath = servletPath;
-        _encoding = encoding;
-        _codec = codec;
-        _request = request;
-        _stateful = stateful;
-        _parameters = parameters;
-    }
-
-    public String getURL()
-    {
-        return getURL(null, true);
-    }
-
-    public String getURL(String anchor, boolean includeParameters)
-    {
-        return constructURL(new StringBuffer(), anchor, includeParameters);
-    }
-
-    public String getAbsoluteURL()
-    {
-        return getAbsoluteURL(null, null, 0, null, true);
-    }
-
-    public String getURL(String scheme, String server, int port, String anchor,
-            boolean includeParameters)
-    {
-        boolean useAbsolute = EngineUtils.needAbsoluteURL(scheme, server, port, _request);
-
-        return useAbsolute ? getAbsoluteURL(scheme, server, port, anchor, includeParameters)
-                : getURL(anchor, includeParameters);
-    }
-
-    public String getAbsoluteURL(String scheme, String server, int port, String anchor,
-            boolean includeParameters)
-    {
-        StringBuffer buffer = new StringBuffer();
-        
-        int nport = port == 0 ? _request.getServerPort() : port;
-        String nscheme = scheme == null ? _request.getScheme() : scheme;
-        
-        buffer.append(nscheme);
-        buffer.append("://");
-        
-        buffer.append(server == null ? _request.getServerName() : server);
-        
-        if (!(nscheme.equals("http") && nport == DEFAULT_HTTP_PORT) && !(nscheme.equals("https") && nport == DEFAULT_HTTPS_PORT))
-        {
-            buffer.append(':');
-            buffer.append(nport);
-        }
-        
-        // Add the servlet path and the rest of the URL & query parameters.
-        // The servlet path starts with a leading slash.
-
-        return constructURL(buffer, anchor, includeParameters);
-    }
-
-    private String constructURL(StringBuffer buffer, String anchor, boolean includeParameters)
-    {
-        buffer.append(_servletPath);
-
-        if (includeParameters)
-            addParameters(buffer);
-
-        if (anchor != null)
-        {
-            buffer.append('#');
-            buffer.append(anchor);
-        }
-        
-        String result = buffer.toString();
-        
-        // TODO: This is somewhat questionable right now, was added in to support TAPESTRY-802
-        if (_cycle != null && _stateful)
-        {    
-            result = _cycle.encodeURL(result);
-        }
-        
-        return result;
-    }
-
-    private void addParameters(StringBuffer buffer)
-    {
-        String[] names = getParameterNames();
-
-        String sep = "?";
-
-        for (int i = 0; i < names.length; i++)
-        {
-            String name = names[i];
-            String[] values = getParameterValues(name);
-
-            if (values == null)
-                continue;
-
-            for (int j = 0; j < values.length; j++)
-            {
-                buffer.append(sep);
-                buffer.append(name);
-                buffer.append("=");
-                buffer.append(encode(values[j]));
-
-                sep = "&";
-            }
-
-        }
-    }
-
-    private String encode(String value)
-    {
-        try
-        {
-            return _codec.encode(value, _encoding);
-        }
-        catch (UnsupportedEncodingException ex)
-        {
-            throw new ApplicationRuntimeException(Tapestry.format("illegal-encoding", _encoding),
-                    ex);
-        }
-    }
-
-    public String[] getParameterNames()
-    {
-        return _parameters.getParameterNames();
-    }
-
-    public String[] getParameterValues(String name)
-    {
-        return _parameters.getParameterValues(name);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineStrings.properties
deleted file mode 100644
index 3174589..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineStrings.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-service-no-parameter=The {0} service does not require a parameter object.
-
-wrong-component-type=Component {0} does not implement the {1} interface.
-
-request-stale-session=Component {0} is stateful, but the HttpSession has expired (or has not yet been created).
-
-page-not-compatible=Page {0} does not implement the {1} interface.
-
-exception-during-cleanup=Exception during post-request cleanup: {0}
-
-validate-cycle=A validate cycle during page activation was detected: {0}.
-
-missing-browser-event=A direct event call was made but no browser event was found in the request.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineUtils.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineUtils.java
deleted file mode 100644
index 7ca0bc4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/EngineUtils.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.engine;

-

-import org.apache.tapestry.web.WebRequest;

-

-/**

- * Utilities needed by engine services and etc.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public final class EngineUtils

-{

-

-    /* defeat instantiation */

-    private EngineUtils() { }

-    

-    /**

-     * Invoked by to see if an absolute URL is needed (because a specific scheme, server or port

-     * was indicated that does not match the incoming request).

-     * 

-     * @param scheme

-     *            the desired URL scheme, or null

-     * @param server

-     *            the desired URL server name, or null

-     * @param port

-     *            the desired URL port, or 0

-     * @param request

-     *            the request to check against

-     * @return true if absolute URL is needed, false otherwise

-     */

-    public static boolean needAbsoluteURL(String scheme, String server, int port, WebRequest request)

-    {

-        if (scheme != null && !scheme.equals(request.getScheme())) return true;

-

-        if (server != null && !server.equals(request.getServerName()))

-            return true;

-

-        if (port != 0 && port != request.getServerPort()) return true;

-

-        return false;

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ExternalService.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ExternalService.java
deleted file mode 100644
index dbf7d70..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ExternalService.java
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * The external service enables external applications to reference Tapestry pages via a URL. Pages
- * which can be referenced by the external service must implement the {@link IExternalPage}
- * interface. The external service enables the bookmarking of pages.
- *
- * <p>
- * You can try and second guess the URL format used by Tapestry. The default URL format for the
- * external service is: <blockquote>
- * <tt>http://localhost/app?service=external/<i>[Page Name]</i>&amp;sp=[Param 0]&amp;sp=[Param 1]...</tt>
- * </blockquote> For example to view the "ViewCustomer" page the service parameters 5056 (customer
- * ID) and 309 (company ID) the external service URL would be: <blockquote>
- * <tt>http://localhost/myapp?service=external&amp;context=<b>ViewCustomer</b>&amp;sp=<b>5056</b>&amp;sp=<b>302</b></tt>
- * </blockquote> In this example external service will get a "ViewCustomer" page and invoke the
- * {@link IExternalPage#activateExternalPage(Object[], IRequestCycle)}method with the parameters:
- * Object[] { new Integer(5056), new Integer(302) }.
- * <p>
- * Note service parameters (sp) need to be prefixed by valid
- * {@link org.apache.tapestry.util.io.DataSqueezerImpl}adaptor char. These adaptor chars are
- * automatically provided in URL's created by the <tt>buildGesture()</tt> method. However if you
- * hand coded an external service URL you will need to ensure valid prefix chars are present.
- * <p>
- * <table border="1" cellpadding="2">
- * <tr>
- * <th>Prefix char(s)</th>
- * <th>Mapped Java Type</th>
- * </tr>
- * <tr>
- * <td>&nbsp;TF</td>
- * <td>&nbsp;boolean</td>
- * </tr>
- * <tr>
- * <td>&nbsp;b</td>
- * <td>&nbsp;byte</td>
- * </tr>
- * <tr>
- * <td>&nbsp;c</td>
- * <td>&nbsp;char</td>
- * </tr>
- * <tr>
- * <td>&nbsp;d</td>
- * <td>&nbsp;double</td>
- * </tr>
- * <tr>
- * <td>&nbsp;-0123456789</td>
- * <td>&nbsp;integer</td>
- * </tr>
- * <tr>
- * <td>&nbsp;l</td>
- * <td>&nbsp;long</td>
- * </tr>
- * <tr>
- * <td>&nbsp;S</td>
- * <td>&nbsp;String</td>
- * </tr>
- * <tr>
- * <td>&nbsp;s</td>
- * <td>&nbsp;short</td>
- * </tr>
- * <tr>
- * <td>&nbsp;other chars</td>
- * <td>&nbsp; <tt>String</tt> without truncation of first char</td>
- * </tr>
- * </table>
- * <p>
- * <p>
- * A good rule of thumb is to keep the information encoded in the URL short and simple, and restrict
- * it to just Strings and Integers. Integers can be encoded as-is. Prefixing all Strings with the
- * letter 'S' will ensure that they are decoded properly. Again, this is only relevant if an
- * {@link org.apache.tapestry.IExternalPage}is being referenced from static HTML or JSP and the URL
- * must be assembled in user code ... when the URL is generated by Tapestry, it is automatically
- * created with the correct prefixes and encodings (as with any other service).
- * 
- * @see org.apache.tapestry.IExternalPage
- * @author Howard Lewis Ship
- * @author Malcolm Edgar
- * @since 2.2
- */
-
-public class ExternalService implements IEngineService
-{
-    /** @since 4.0 */
-
-    private ResponseRenderer _responseRenderer;
-
-    /** @since 4.0 */
-    private LinkFactory _linkFactory;
-
-    /**
-     * {@inheritDoc}
-     * 
-     * @return The URL for the service. The URL will always be encoded when it is returned.
-     */
-    public ILink getLink(boolean post, Object parameter)
-    {
-        Defense.isAssignable(parameter, ExternalServiceParameter.class, "parameter");
-
-        ExternalServiceParameter esp = (ExternalServiceParameter) parameter;
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.PAGE, esp.getPageName());
-        parameters.put(ServiceConstants.PARAMETER, esp.getServiceParameters());
-
-        return _linkFactory.constructLink(this, post, parameters, true);
-    }
-
-    public void service(IRequestCycle cycle) throws IOException
-    {
-        String pageName = cycle.getParameter(ServiceConstants.PAGE);
-        IPage rawPage = cycle.getPage(pageName);
-
-        IExternalPage page = null;
-
-        try
-        {
-            page = (IExternalPage) rawPage;
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(EngineMessages.pageNotCompatible(
-                    rawPage,
-                    IExternalPage.class), rawPage, null, ex);
-        }
-        
-        Object[] parameters = _linkFactory.extractListenerParameters(cycle);
-        
-        cycle.setListenerParameters(parameters);
-        
-        cycle.activate(page);
-        
-        page.activateExternalPage(parameters, cycle);
-        
-        _responseRenderer.renderResponse(cycle);
-    }
-
-    public String getName()
-    {
-        return Tapestry.EXTERNAL_SERVICE;
-    }
-
-    /** @since 4.0 */
-
-    public void setResponseRenderer(ResponseRenderer responseRenderer)
-    {
-        _responseRenderer = responseRenderer;
-    }
-
-    /** @since 4.0 */
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ExternalServiceParameter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ExternalServiceParameter.java
deleted file mode 100644
index b19d91d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ExternalServiceParameter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.util.Defense;
-
-/**
- * Parameter for the {@link org.apache.tapestry.engine.ExternalService}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ExternalServiceParameter
-{
-
-    private String _pageName;
-
-    private Object[] _serviceParameters;
-
-    public ExternalServiceParameter(String pageName)
-    {
-        this(pageName, null);
-    }
-
-    public ExternalServiceParameter(String pageName, Object[] serviceParameters)
-    {
-        Defense.notNull(pageName, "pageName");
-
-        _pageName = pageName;
-        _serviceParameters = serviceParameters;
-    }
-
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-    public Object[] getServiceParameters()
-    {
-        return _serviceParameters;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/HomeService.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/HomeService.java
deleted file mode 100644
index f866143..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/HomeService.java
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * An implementation of the home service that renders the Home page. This is the
- * most likely candidate for overriding ... for example, to select the page to
- * render based on known information about the user (stored as a cookie).
- * 
- * @author Howard Lewis Ship
- * @since 1.0.9
- */
-
-public class HomeService implements IEngineService
-{
-
-    /** @since 4.0 */
-    private ResponseRenderer _responseRenderer;
-
-    /** @since 4.0 */
-
-    private LinkFactory _linkFactory;
-
-    /** @since 4.0 */
-
-    private String _pageName;
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        if (parameter != null)
-            throw new IllegalArgumentException(EngineMessages
-                    .serviceNoParameter(this));
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.SERVICE, getName());
-
-        return _linkFactory.constructLink(this, post, parameters, true);
-    }
-
-    public void service(IRequestCycle cycle)
-        throws IOException
-    {
-        cycle.activate(_pageName);
-
-        _responseRenderer.renderResponse(cycle);
-    }
-
-    public String getName()
-    {
-        return Tapestry.HOME_SERVICE;
-    }
-
-    /** @since 4.0 */
-    public void setResponseRenderer(ResponseRenderer responseRenderer)
-    {
-        _responseRenderer = responseRenderer;
-    }
-
-    /** @since 4.0 */
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-
-    /** @since 4.0 */
-    public void setPageName(String pageName)
-    {
-        _pageName = pageName;
-    }
-
-    /** @since 4.0 */
-    public String getPageName()
-    {
-        return _pageName;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IEngineService.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IEngineService.java
deleted file mode 100644
index da1fe88..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IEngineService.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * A service, provided by the {@link org.apache.tapestry.IEngine}, for its pages and/or components.
- * Services are responsible for constructing {@link EngineServiceLink}s (an encoding of URLs) to
- * represent dynamic application behavior, and for parsing those URLs when a subsequent request
- * involves them.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IEngineService
-{
-    /**
-     * Builds a URL for a service. This is performed during the rendering phase of one request cycle
-     * and builds URLs that will invoke activity in a subsequent request cycle.
-     * <p>
-     * <b>This method changed incompatibly between release 3.0 and release 4.0. </b>
-     * </p>
-     * @param post
-     *            if true, then the link will be used for a post (not a get, i.e., for a HTML form);
-     *            this may affect what information is encoded into the link
-     * @param parameter
-     *            An object that provide any additional information needed by the service. Each
-     *            service implementation will expect that an object of the proper type be passed in.
-     *            In some cases, a simple String will do; in others, a specific object (possibly
-     *            implementing an interface) will be required.
-     * 
-     * @return The URL for the service. The URL will have to be encoded via
-     *         {@link javax.servlet.http.HttpServletResponse#encodeURL(java.lang.String)}.
-     */
-
-    ILink getLink(boolean post, Object parameter);
-
-    /**
-     * Perform the service, interpreting the URL (from the
-     * {@link javax.servlet.http.HttpServletRequest}) responding appropriately, and rendering a
-     * result page.
-     * 
-     * @param cycle
-     *            the incoming request
-     */
-
-    void service(IRequestCycle cycle) throws IOException;
-
-    /**
-     * Returns the name of the service.
-     * 
-     * @since 1.0.1
-     */
-
-    String getName();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ILink.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ILink.java
deleted file mode 100644
index 79acc41..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ILink.java
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-/**
- * Define a link that may be generated as part of a page render. The vast majority of links are tied
- * to {@link IEngineService services}and are, in fact, callbacks. A small number, such as those
- * generated by {@link org.apache.tapestry.link.GenericLink} component, are to arbitrary locations.
- * In addition, ILink differentiates between the path portion of the link, and any query parameters
- * encoded into a link, primarily to benefit {@link org.apache.tapestry.form.Form}, which needs to
- * encode the query parameters as hidden form fields.
- * <p>
- * In addition, an ILink is responsible for passing constructed URLs through
- * {@link org.apache.tapestry.IRequestCycle#encodeURL(String)} as needed.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public interface ILink
-{
-    /**
-     * Returns the relative URL as a String. A relative URL may include a leading slash, but omits
-     * the scheme, host and port portions of a full URL.
-     * 
-     * @return the relative URL, with no anchor, but including query parameters.
-     */
-
-    String getURL();
-
-    /**
-     * Returns the relative URL as a String. This is used for most links.
-     * 
-     * @param anchor
-     *            if not null, appended to the URL
-     * @param includeParameters
-     *            if true, parameters are included
-     */
-
-    String getURL(String anchor, boolean includeParameters);
-
-    /**
-     * Returns the absolute URL as a String, using default scheme, server and port, including
-     * parameters, and no anchor.
-     */
-
-    String getAbsoluteURL();
-
-    /**
-     * Returns the absolute URL as a String.
-     * 
-     * @param scheme
-     *            if not null, overrides the default scheme.
-     * @param server
-     *            if not null, overrides the default server
-     * @param port
-     *            if non-zero, overrides the default port
-     * @param anchor
-     *            if not null, appended to the URL
-     * @param includeParameters
-     *            if true, parameters are included
-     */
-
-    String getAbsoluteURL(String scheme, String server, int port, String anchor,
-            boolean includeParameters);
-
-    /**
-     * Returns the URL as either a local or absoluate URL, depending on whether any of the
-     * parameters are both non-null and mismatched against the incoming request.
-     * 
-     * @param scheme
-     *            if not null, overrides the default scheme.
-     * @param server
-     *            if not null, overrides the default server
-     * @param port
-     *            if non-zero, overrides the default port
-     * @param anchor
-     *            if not null, appended to the URL
-     * @param includeParameters
-     *            if true, parameters are included
-     * @see #getURL(String, boolean)
-     * @see #getAbsoluteURL(String, String, int, String, boolean)
-     * @since 4.0
-     */
-
-    String getURL(String scheme, String server, int port, String anchor,
-            boolean includeParameters);
-
-    /**
-     * Returns an array of parameters names (in no alphabetical order).
-     * 
-     * @see #getParameterValues(String)
-     */
-
-    String[] getParameterNames();
-
-    /**
-     * Returns the values for the named parameter. Will return null if no value is defined for
-     * the parameter.
-     */
-
-    String[] getParameterValues(String name);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPageLoader.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPageLoader.java
deleted file mode 100644
index 24e0bf0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPageLoader.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.ITemplateComponent;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Interface exposed to components as they are loaded by the page loader.
- * 
- * @see IComponent#finishLoad(IRequestCycle, IPageLoader,
- *      org.apache.tapestry.spec.IComponentSpecification)
- * @author Howard Lewis Ship
- */
-
-public interface IPageLoader
-{
-
-    /**
-     * Invoked to create an implicit component (one which is defined in the
-     * containing component's template, rather that in the containing
-     * component's specification).
-     * 
-     * @see org.apache.tapestry.services.impl.ComponentTemplateLoaderImpl
-     * @since 3.0
-     */
-
-    IComponent createImplicitComponent(IRequestCycle cycle,
-            IComponent container, String componentId, String componentType,
-            Location location);
-
-    /**
-     * Invoked by the {@link IPageSource}to load a specific page. This method
-     * is not reentrant. The page is immediately attached to the
-     * {@link IEngine engine}.
-     * 
-     * @param name
-     *            the simple (unqualified) name of the page to load
-     * @param namespace
-     *            from which the page is to be loaded (used when resolving
-     *            components embedded by the page)
-     * @param cycle
-     *            the request cycle the page is initially loaded for (this is
-     *            used to define the locale of the new page, and provide access
-     *            to the corect specification source, etc.).
-     * @param specification
-     *            the specification for the page
-     */
-
-    IPage loadPage(String name, INamespace namespace,
-            IRequestCycle cycle, IComponentSpecification specification);
-
-    /**
-     * Invoked by a component (from within its
-     * {@link IComponent#finishLoad(IRequestCycle, IPageLoader, IComponentSpecification)}method)
-     * to load the template for the component. This will result in new
-     * components being created, and the "outers" of the component being
-     * updated.
-     * 
-     * @see ITemplateComponent
-     * @since 4.0
-     */
-    void loadTemplateForComponent(IRequestCycle cycle,
-            ITemplateComponent component);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPageRecorder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPageRecorder.java
deleted file mode 100644
index 46e2efd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPageRecorder.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.event.ChangeObserver;
-
-/**
- * Defines an object that can observe changes to properties of a page and its components, store the
- * state of the page between request cycles, and restore a page's state on a subsequent request
- * cycle.
- * <p>
- * Concrete implementations of this can store the changes in memory, as client-side cookies, in a
- * flat file, or in a database.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IPageRecorder extends ChangeObserver
-{
-    /**
-     * Persists all changes that have been accumulated. If the recorder saves change incrementally,
-     * this should ensure that all changes have been persisted.
-     * <p>
-     * After commiting, a page recorder automatically locks itself.
-     */
-
-    void commit();
-    
-    /**
-     * Rolls back the page to the currently persisted state.
-     * <p>
-     * A page recorder can only rollback changes to properties which have changed at some point.
-     * This can cause some minor problems, addressed by
-     * {@link org.apache.tapestry.event.PageDetachListener#pageDetached(org.apache.tapestry.event.PageEvent)}.
-     */
-
-    void rollback(IPage page);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPageSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPageSource.java
deleted file mode 100644
index a45115e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPageSource.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Abstracts the process of loading pages from thier specifications as well as pooling of pages once
- * loaded.
- * <p>
- * If the required page is not available, a page source may use an instance of {@link IPageLoader}
- * to actually load the page (and all of its nested components).
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IPageSource
-{
-    /**
-     * Gets a given page for the engine. This may involve using a previously loaded page from a pool
-     * of available pages, or the page may be loaded as needed.
-     * 
-     * @param cycle
-     *            the current request cycle
-     * @param pageName
-     *            the name of the page. May be qualified with a library id prefix, which may even be
-     *            nested. Unqualified names are searched for extensively in the application
-     *            namespace, and then in the framework namespace.
-     * @return The loaded page.
-     * 
-     * @throws org.apache.tapestry.PageNotFoundException
-     *             if pageName can't be resolved to a page specification (from which a page instance
-     *             can be generated).
-     * @see org.apache.tapestry.resolver.PageSpecificationResolver#resolve(IRequestCycle, String)
-     */
-
-    IPage getPage(IRequestCycle cycle, String pageName);
-
-    /**
-     * Invoked after the engine is done with the page (typically, after the response to the client
-     * has been sent). The page is returned to the pool for later reuse.
-     *
-     * @param page The page to release.
-     */
-    void releasePage(IPage page);
-
-    /**
-     * Gets the class resolver used to load all pages / page components.
-     *
-     * @return {@link ClassResolver} instance used to load classes. 
-     */
-
-    ClassResolver getClassResolver();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPropertySource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPropertySource.java
deleted file mode 100644
index c82d8a9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IPropertySource.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-/**
- * A source for configuration properties.
- * 
- * @author Howard Lewis Ship
- * @since 2.3
- */
-
-public interface IPropertySource
-{
-
-    /**
-     * Returns the value for a given property, or null if the source does not
-     * provide a value for the named property. Implementations of
-     * IPropertySource may use delegation to resolve the value (that is, if one
-     * property source returns null, it may forward the request to another
-     * source).
-     *
-     * @param propertyName
-     *          Name of the property to get.
-     * 
-     * @return Value of property or null if none found.
-     */
-
-    String getPropertyValue(String propertyName);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IScriptSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IScriptSource.java
deleted file mode 100644
index 5991c28..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/IScriptSource.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IScript;
-
-/**
- * Provides access to an {@link IScript}.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.2
- */
-
-public interface IScriptSource
-{
-
-    /**
-     * Retrieves the script identified by the location from the source's cache,
-     * reading and parsing the script if necessary.
-     */
-
-    IScript getScript(Resource resource);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ISpecificationSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ISpecificationSource.java
deleted file mode 100644
index 2e5958b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ISpecificationSource.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-
-/**
- * Defines access to component specifications.
- * 
- * @see IComponentSpecification
- * @author Howard Lewis Ship
- */
-
-public interface ISpecificationSource
-{
-
-    /**
-     * Retrieves a component specification, parsing it as necessary.
-     * 
-     * @param specificationLocation
-     *            the location where the specification may be read from.
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the specification doesn't exist, is unreadable or invalid.
-     * @since 2.2
-     */
-
-    IComponentSpecification getComponentSpecification(
-            Resource specificationLocation);
-
-    /**
-     * Retrieves a page specification, parsing it as necessary.
-     * 
-     * @param specificationLocation
-     *            the location where the specification may be read from.
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the specification doesn't exist, is unreadable or invalid.
-     * @since 2.2
-     */
-
-    IComponentSpecification getPageSpecification(
-            Resource specificationLocation);
-
-    /**
-     * Returns a {@link org.apache.tapestry.spec.LibrarySpecification} with the
-     * given path.
-     * 
-     * @param specificationLocation
-     *            the resource path of the specification to return
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the specification cannot be read
-     * @since 2.2
-     */
-
-    ILibrarySpecification getLibrarySpecification(
-            Resource specificationLocation);
-
-    /**
-     * Returns the {@link INamespace} for the application.
-     * 
-     * @since 2.2
-     */
-
-    INamespace getApplicationNamespace();
-
-    /**
-     * Returns the {@link INamespace} for the framework itself.
-     * 
-     * @since 2.2
-     */
-
-    INamespace getFrameworkNamespace();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ITemplateSourceDelegate.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ITemplateSourceDelegate.java
deleted file mode 100644
index fd2aaad..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ITemplateSourceDelegate.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.parse.ComponentTemplate;
-
-/**
- *  Acts as a delegate to the {@link org.apache.tapestry.services.TemplateSource}, 
- *  providing access to page and component templates after the normal search mechanisms have failed.
- * 
- *  <p>
- *  The delegate must be threadsafe.
- *
- *  @author Howard Lewis Ship
- *  @since 3.0
- *  @see org.apache.tapestry.services.impl.TemplateSourceImpl
- * 
- **/
-
-public interface ITemplateSourceDelegate
-{
-    /**
-     *  Invoked by the {@link ITemplateSourceDelegate} when a template can't be found
-     *  by normal means (i.e., in the normal locations).  This method
-     *  should find the template.  The result may be null.  The delegate
-     *  is responsible for caching the result.
-     * 
-     *  @param cycle for access to Tapestry and Servlet API objects
-     *  @param component component (or page) for which a template is needed
-     *  @param locale the desired locale for the template
-     * 
-     **/
-
-    ComponentTemplate findTemplate(IRequestCycle cycle, IComponent component, Locale locale);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/Namespace.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/Namespace.java
deleted file mode 100644
index 2344cf2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/Namespace.java
+++ /dev/null
@@ -1,376 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.NamespaceResources;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-
-import java.util.*;
-
-/**
- * Implementation of {@link org.apache.tapestry.INamespace} that works with a
- * {@link org.apache.tapestry.services.NamespaceResources} to obtain page and
- * component specifications as needed.
- *
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class Namespace implements INamespace
-{
-
-    private final ILibrarySpecification _specification;
-
-    private final String _id;
-
-    private String _extendedId;
-
-    private final INamespace _parent;
-
-    private final boolean _frameworkNamespace;
-
-    private final boolean _applicationNamespace;
-
-    /** @since 4.0 */
-
-    private final NamespaceResources _resources;
-
-    /**
-     * Map of {@link org.apache.tapestry.spec.ComponentSpecification}keyed on
-     * page name. The map is synchronized because different threads may try to
-     * update it simultaneously (due to dynamic page discovery in the
-     * application namespace).
-     */
-
-    private final Map _pages = new ConcurrentHashMap();
-
-    /**
-     * Map of {@link org.apache.tapestry.spec.ComponentSpecification}keyed on
-     * component alias.
-     */
-
-    private final Map _components = new ConcurrentHashMap();
-
-    /**
-     * Map, keyed on id, of {@link INamespace}.
-     */
-
-    private final Map _children = new ConcurrentHashMap();
-
-    public Namespace(String id, INamespace parent, ILibrarySpecification specification,
-                     NamespaceResources resources)
-    {
-        _id = id;
-        _parent = parent;
-        _specification = specification;
-        _resources = resources;
-
-        _applicationNamespace = (_id == null);
-        _frameworkNamespace = FRAMEWORK_NAMESPACE.equals(_id);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Namespace@");
-        buffer.append(Integer.toHexString(hashCode()));
-        buffer.append('[');
-
-        if (_applicationNamespace)
-            buffer.append("<application>");
-        else
-            buffer.append(getExtendedId());
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    public String getId()
-    {
-        return _id;
-    }
-
-    public String getExtendedId()
-    {
-        if (_applicationNamespace)
-            return null;
-
-        if (_extendedId == null)
-            _extendedId = buildExtendedId();
-
-        return _extendedId;
-    }
-
-    public INamespace getParentNamespace()
-    {
-        return _parent;
-    }
-
-    public INamespace getChildNamespace(String id)
-    {
-        String firstId = id;
-        String nextIds = null;
-
-        // Split the id into first and next if it is a dot separated sequence
-        int index = id.indexOf('.');
-        if (index >= 0)
-        {
-            firstId = id.substring(0, index);
-            nextIds = id.substring(index + 1);
-        }
-
-        // Get the first namespace
-        INamespace result = (INamespace) _children.get(firstId);
-
-        if (result == null)
-        {
-            result = createNamespace(firstId);
-
-            _children.put(firstId, result);
-        }
-
-        // If the id is a dot separated sequence, recurse to find
-        // the needed namespace
-        if (result != null && nextIds != null)
-            result = result.getChildNamespace(nextIds);
-
-        return result;
-    }
-
-    public List getChildIds()
-    {
-        return _specification.getLibraryIds();
-    }
-
-    public IComponentSpecification getPageSpecification(String name)
-    {
-        IComponentSpecification result = (IComponentSpecification) _pages.get(name);
-
-        if (result == null)
-        {
-            result = locatePageSpecification(name);
-
-            _pages.put(name, result);
-        }
-
-        return result;
-    }
-
-    public List getPageNames()
-    {
-        Set names = new HashSet();
-
-        names.addAll(_pages.keySet());
-        names.addAll(_specification.getPageNames());
-
-        List result = new ArrayList(names);
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    public IComponentSpecification getComponentSpecification(String alias)
-    {
-        IComponentSpecification result = (IComponentSpecification) _components.get(alias);
-
-        if (result == null)
-        {
-            result = locateComponentSpecification(alias);
-            _components.put(alias, result);
-        }
-
-        return result;
-    }
-
-    public ILibrarySpecification getSpecification()
-    {
-        return _specification;
-    }
-
-    private String buildExtendedId()
-    {
-        if (_parent == null)
-            return _id;
-
-        String parentId = _parent.getExtendedId();
-
-        // If immediate child of application namespace
-
-        if (parentId == null)
-            return _id;
-
-        return parentId + "." + _id;
-    }
-
-    /**
-     * Returns a string identifying the namespace, for use in error messages.
-     * I.e., "Application namespace" or "namespace 'foo'".
-     */
-
-    public String getNamespaceId()
-    {
-        if (_frameworkNamespace)
-            return Tapestry.getMessage("Namespace.framework-namespace");
-
-        if (_applicationNamespace)
-            return Tapestry.getMessage("Namespace.application-namespace");
-
-        return Tapestry.format("Namespace.nested-namespace", getExtendedId());
-    }
-
-    /**
-     * Gets the specification from the specification source.
-     *
-     * @throws ApplicationRuntimeException
-     *             if the named page is not defined.
-     */
-
-    private IComponentSpecification locatePageSpecification(String name)
-    {
-        String path = _specification.getPageSpecificationPath(name);
-
-        if (path == null)
-            throw new ApplicationRuntimeException(Tapestry.format("Namespace.no-such-page", name, getNamespaceId()));
-
-        // We don't record line-precise data about <page> elements
-        // so use the location for the specification as a whole (at least
-        // identifying
-        // the right file)
-
-        return _resources.getPageSpecification(getSpecificationLocation(), path, getLocation());
-    }
-
-    private IComponentSpecification locateComponentSpecification(String type)
-    {
-        String path = _specification.getComponentSpecificationPath(type);
-
-        if (path == null)
-            throw new ApplicationRuntimeException(Tapestry.format("Namespace.no-such-alias", type, getNamespaceId()));
-
-        // We don't record line-precise data about <component-type> elements
-        // so use the location for the specification as a whole (at least
-        // identifying
-        // the right file)
-
-        return _resources.getComponentSpecification(getSpecificationLocation(), path, getLocation());
-    }
-
-    private INamespace createNamespace(String id)
-    {
-        String path = _specification.getLibrarySpecificationPath(id);
-
-        if (path == null)
-            throw new ApplicationRuntimeException(Tapestry.format("Namespace.library-id-not-found", id, getNamespaceId()));
-
-        // We don't record line-precise data about <library> elements
-        // so use the location for the specification as a whole (at least
-        // identifying
-        // the right file)
-
-        ILibrarySpecification ls =
-          _resources.findChildLibrarySpecification(getSpecificationLocation(), path, getLocation());
-
-        return new Namespace(id, this, ls, _resources);
-    }
-
-    public boolean containsPage(String name)
-    {
-        return _pages.containsKey(name) || (_specification.getPageSpecificationPath(name) != null);
-    }
-
-    /** @since 2.3 * */
-
-    public String constructQualifiedName(String pageName)
-    {
-        String prefix = getExtendedId();
-
-        if (prefix == null)
-            return pageName;
-
-        return prefix + SEPARATOR + pageName;
-    }
-
-    /** @since 3.0 * */
-
-    public Resource getSpecificationLocation()
-    {
-        return _specification.getSpecificationLocation();
-    }
-
-    /** @since 3.0 * */
-
-    public boolean isApplicationNamespace()
-    {
-        return _applicationNamespace;
-    }
-
-    /** @since 3.0 * */
-
-    public void installPageSpecification(String pageName, IComponentSpecification specification)
-    {
-        _pages.put(pageName, specification);
-    }
-
-    /** @since 3.0 * */
-
-    public void installComponentSpecification(String type, IComponentSpecification specification)
-    {
-        _components.put(type, specification);
-    }
-
-    /** @since 3.0 * */
-
-    public boolean containsComponentType(String type)
-    {
-        return _components.containsKey(type) || (_specification.getComponentSpecificationPath(type) != null);
-    }
-
-    /** @since 3.0 * */
-
-    public Location getLocation()
-    {
-        if (_specification == null)
-            return null;
-
-        return _specification.getLocation();
-    }
-
-    /**
-     * Returns property values defined in the namespace's library specification.
-     *
-     * @return the property, or null if not provided in the specification.
-     * @since 4.0
-     */
-
-    public String getPropertyValue(String propertyName)
-    {
-        String ret = _specification.getProperty(propertyName);
-
-        if (ret == null && _parent != null)
-        {
-            return _parent.getPropertyValue(propertyName);
-        }
-
-        return ret;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/NullWriter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/NullWriter.java
deleted file mode 100644
index 42177f8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/NullWriter.java
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.NestedMarkupWriter;
-import org.apache.tapestry.markup.Attribute;
-
-/**
- * A {@link IMarkupWriter}that does absolutely <em>nothing</em>; this is used during the rewind
- * phase of the request cycle when output is discarded anyway.
- * 
- * @author Howard Lewis Ship, David Solis
- * @since 0.2.9
- */
-
-public class NullWriter implements NestedMarkupWriter
-{
-    private static IMarkupWriter shared;
-
-    public static IMarkupWriter getSharedInstance()
-    {
-        if (shared == null)
-            shared = new NullWriter();
-
-        return shared;
-    }
-
-    public String getBuffer()
-    {
-        return null;
-    }
-
-    public void printRaw(char[] buffer, int offset, int length)
-    {
-    }
-
-    public void printRaw(String value)
-    {
-    }
-
-    public void println()
-    {
-    }
-
-    public void print(char[] data, int offset, int length)
-    {
-    }
-
-    public void print(char value)
-    {
-    }
-
-    public void print(int value)
-    {
-    }
-
-    public void print(String value)
-    {
-    }
-
-    /**
-     * Returns <code>this</code>: since a NullWriter doesn't actually do anything, one is as good
-     * as another!.
-     */
-
-    public NestedMarkupWriter getNestedWriter()
-    {
-        return this;
-    }
-
-    public String getContentType()
-    {
-        return null;
-    }
-
-    public void flush()
-    {
-    }
-
-    public void end()
-    {
-    }
-
-    public void end(String name)
-    {
-    }
-
-    public void comment(String value)
-    {
-    }
-
-    public void closeTag()
-    {
-    }
-
-    public void close()
-    {
-    }
-
-    /**
-     * Always returns false.
-     */
-
-    public boolean checkError()
-    {
-        return false;
-    }
-
-    public void beginEmpty(String name)
-    {
-    }
-
-    public void begin(String name)
-    {
-    }
-
-    public void attribute(String name, int value)
-    {
-    }
-
-    public void attribute(String name, String value)
-    {
-    }
-    
-    public void attribute(String name, boolean value)
-    {
-    }
-    
-    public void attributeRaw(String name, String value)
-    {
-    }
-    
-    public void attribute(String value)
-    {
-    }
-    
-    public void appendAttribute(String name, boolean value)
-    {
-    }
-    
-    public void appendAttribute(String name, int value)
-    {
-    }
-    
-    public void appendAttribute(String name, String value)
-    {
-    }
-    
-    public void appendAttributeRaw(String name, String value)
-    {
-    }
-    
-    public Attribute getAttribute(String name)
-    {
-        return null;
-    }
-    
-    public boolean hasAttribute(String name)
-    {
-        return false;
-    }
-    
-    public Attribute removeAttribute(String name)
-    {
-        return null;
-    }
-    
-    public void clearAttributes()
-    {
-    }
-    
-    public void print(char[] data, int offset, int length, boolean raw)
-    {
-    }
-
-    public void print(String value, boolean raw)
-    {
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/PageService.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/PageService.java
deleted file mode 100644
index 95901a8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/PageService.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * Basic server for creating a link to another page in the application.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.9
- */
-
-public class PageService implements IEngineService
-{
-    /** @since 4.0 */
-    private ResponseRenderer _responseRenderer;
-
-    /** @since 4.0 */
-    private LinkFactory _linkFactory;
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        Defense.isAssignable(parameter, String.class, "parameter");
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.PAGE, parameter);
-
-        return _linkFactory.constructLink(this, post, parameters, true);
-
-    }
-
-    public void service(IRequestCycle cycle) throws IOException
-    {
-        String pageName = cycle.getParameter(ServiceConstants.PAGE);
-
-        // At one time, the page service required a session, but that is no longer necessary.
-        // Users can now bookmark pages within a Tapestry application. Pages
-        // can implement validate() and throw a PageRedirectException if they don't
-        // want to be accessed this way. For example, most applications have a concept
-        // of a "login" and have a few pages that don't require the user to be logged in,
-        // and other pages that do. The protected pages should redirect to a login page.
-
-        cycle.activate(pageName);
-
-        _responseRenderer.renderResponse(cycle);
-    }
-
-    public String getName()
-    {
-        return Tapestry.PAGE_SERVICE;
-    }
-
-    /** @since 4.0 */
-    public void setResponseRenderer(ResponseRenderer responseRenderer)
-    {
-        _responseRenderer = responseRenderer;
-    }
-
-    /** @since 4.0 */
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java
deleted file mode 100644
index 15a7aef..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycle.java
+++ /dev/null
@@ -1,662 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.commons.fileupload.RequestContext;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.impl.ErrorLogImpl;
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.ToStringBuilder;
-import org.apache.tapestry.*;
-import org.apache.tapestry.record.PageRecorderImpl;
-import org.apache.tapestry.record.PropertyPersistenceStrategySource;
-import org.apache.tapestry.services.AbsoluteURLBuilder;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.util.IdAllocator;
-import org.apache.tapestry.util.QueryParameterMap;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Stack;
-
-/**
- * Provides the logic for processing a single request cycle. Provides access to the
- * {@link IEngine engine} and the {@link RequestContext}.
- * 
- * @author Howard Lewis Ship
- */
-
-public class RequestCycle implements IRequestCycle
-{
-    private static final Log LOG = LogFactory.getLog(RequestCycle.class);
-    
-    protected ResponseBuilder _responseBuilder;
-    
-    private IPage _page;
-
-    private IEngine _engine;
-
-    private String _serviceName;
-
-    /** @since 4.0 */
-
-    private PropertyPersistenceStrategySource _strategySource;
-
-    /** @since 4.0 */
-
-    private IPageSource _pageSource;
-
-    /** @since 4.0 */
-
-    private Infrastructure _infrastructure;
-
-    /**
-     * Contains parameters extracted from the request context, plus any decoded by any
-     * {@link ServiceEncoder}s.
-     * 
-     * @since 4.0
-     */
-
-    private QueryParameterMap _parameters;
-
-    /** @since 4.0 */
-
-    private AbsoluteURLBuilder _absoluteURLBuilder;
-
-    /**
-     * A mapping of pages loaded during the current request cycle. Key is the page name, value is
-     * the {@link IPage}instance.
-     */
-
-    private Map _loadedPages;
-
-    /**
-     * A mapping of page recorders for the current request cycle. Key is the page name, value is the
-     * {@link IPageRecorder}instance.
-     */
-
-    private Map _pageRecorders;
-
-    private boolean _rewinding = false;
-
-    private Map _attributes = new HashMap();
-
-    private int _targetActionId;
-
-    private IComponent _targetComponent;
-
-    /** @since 2.0.3 * */
-
-    private Object[] _listenerParameters;
-
-    /** @since 4.0 */
-
-    private ErrorLog _log;
-
-    /** @since 4.0 */
-
-    private IdAllocator _idAllocator = new IdAllocator();
-
-    private Stack _renderStack = new Stack();
-    
-    private boolean _focusDisabled = false;
-    
-    /**
-     * Standard constructor used to render a response page.
-     * 
-     * @param engine
-     *            the current request's engine
-     * @param parameters
-     *            query parameters (possibly the result of {@link ServiceEncoder}s decoding path
-     *            information)
-     * @param serviceName
-     *            the name of engine service
-     * @param environment
-     *            additional invariant services and objects needed by each RequestCycle instance
-     */
-
-    public RequestCycle(IEngine engine, QueryParameterMap parameters, String serviceName,
-            RequestCycleEnvironment environment)
-    {
-        // Variant from instance to instance
-
-        _engine = engine;
-        _parameters = parameters;
-        _serviceName = serviceName;
-
-        // Invariant from instance to instance
-
-        _infrastructure = environment.getInfrastructure();
-        _pageSource = _infrastructure.getPageSource();
-        _strategySource = environment.getStrategySource();
-        _absoluteURLBuilder = environment.getAbsoluteURLBuilder();
-        _log = new ErrorLogImpl(environment.getErrorHandler(), LOG);
-    }
-    
-    /**
-     * Alternate constructor used <strong>only for testing purposes</strong>.
-     * 
-     * @since 4.0
-     */
-    public RequestCycle()
-    {
-    }
-
-    /**
-     * Called at the end of the request cycle (i.e., after all responses have been sent back to the
-     * client), to release all pages loaded during the request cycle.
-     */
-
-    public void cleanup()
-    {
-        if (_loadedPages == null)
-            return;
-
-        Iterator i = _loadedPages.values().iterator();
-
-        while (i.hasNext())
-        {
-            IPage page = (IPage) i.next();
-
-            _pageSource.releasePage(page);
-        }
-
-        _loadedPages = null;
-        _pageRecorders = null;
-        _renderStack.clear();
-    }
-
-    public IEngineService getService()
-    {
-        return _infrastructure.getServiceMap().getService(_serviceName);
-    }
-
-    public String encodeURL(String URL)
-    {
-        return _infrastructure.getResponse().encodeURL(URL);
-    }
-
-    public IEngine getEngine()
-    {
-        return _engine;
-    }
-
-    public Object getAttribute(String name)
-    {
-        return _attributes.get(name);
-    }
-
-    public IPage getPage()
-    {
-        return _page;
-    }
-
-    /**
-     * Gets the page from the engines's {@link IPageSource}.
-     */
-
-    public IPage getPage(String name)
-    {
-        Defense.notNull(name, "name");
-
-        IPage result = null;
-
-        if (_loadedPages != null)
-            result = (IPage) _loadedPages.get(name);
-
-        if (result == null)
-        {
-            result = loadPage(name);
-
-            if (_loadedPages == null)
-                _loadedPages = new HashMap();
-
-            _loadedPages.put(name, result);
-        }
-
-        return result;
-    }
-
-    private IPage loadPage(String name)
-    {
-        IPage result = _pageSource.getPage(this, name);
-
-        // Get the recorder that will eventually observe and record
-        // changes to persistent properties of the page.
-
-        IPageRecorder recorder = getPageRecorder(name);
-
-        // Have it rollback the page to the prior state. Note that
-        // the page has a null observer at this time (which keeps
-        // these changes from being sent to the page recorder).
-
-        recorder.rollback(result);
-
-        // Now, have the page use the recorder for any future
-        // property changes.
-
-        result.setChangeObserver(recorder);
-
-        // fire off pageAttached now that properties have been restored
-
-        result.firePageAttached();
-
-        return result;
-    }
-
-    /**
-     * Returns the page recorder for the named page. Starting with Tapestry 4.0, page recorders are
-     * shortlived objects managed exclusively by the request cycle.
-     */
-
-    protected IPageRecorder getPageRecorder(String name)
-    {
-        if (_pageRecorders == null)
-            _pageRecorders = new HashMap();
-
-        IPageRecorder result = (IPageRecorder) _pageRecorders.get(name);
-
-        if (result == null)
-        {
-            result = new PageRecorderImpl(name, _strategySource, _log);
-            _pageRecorders.put(name, result);
-        }
-
-        return result;
-    }
-    
-    public void setResponseBuilder(ResponseBuilder builder)
-    {
-        // TODO: What scenerio requires setting the builder after the fact?
-        //if (_responseBuilder != null)
-          //  throw new IllegalArgumentException("A ResponseBuilder has already been set on this response.");
-        
-        _responseBuilder = builder;
-    }
-    
-    public ResponseBuilder getResponseBuilder()
-    {
-        return _responseBuilder;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean renderStackEmpty()
-    {
-        return _renderStack.isEmpty();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public IRender renderStackPeek()
-    {
-        if (_renderStack.size() < 1)
-            return null;
-        
-        return (IRender)_renderStack.peek();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public IRender renderStackPop()
-    {
-        if (_renderStack.size() == 0)
-            return null;
-        
-        return (IRender)_renderStack.pop();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public IRender renderStackPush(IRender render)
-    {
-        if (_renderStack.size() > 0 && _renderStack.peek() == render)
-            return render;
-        
-        return (IRender)_renderStack.push(render);
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public int renderStackSearch(IRender render)
-    {
-        return _renderStack.search(render);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public Iterator renderStackIterator()
-    {
-        return _renderStack.iterator();
-    }
-    
-    public boolean isRewinding()
-    {
-        return _rewinding;
-    }
-
-    public boolean isRewound(IComponent component)
-    {
-        // If not rewinding ...
-
-        if (!_rewinding)
-            return false;
-
-        // OK, we're there, is the page is good order?
-
-        if (component == _targetComponent)
-            return true;
-
-        // Woops. Mismatch.
-
-        throw new StaleLinkException(component, Integer.toHexString(_targetActionId), _targetComponent.getExtendedId());
-    }
-
-    public void removeAttribute(String name)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Removing attribute " + name);
-
-        _attributes.remove(name);
-    }
-
-    /**
-     * Renders the page by invoking {@link IPage#renderPage(ResponseBuilder, IRequestCycle)}. This
-     * clears all attributes.
-     */
-
-    public void renderPage(ResponseBuilder builder)
-    {
-        _rewinding = false;
-
-        try
-        {
-            _page.renderPage(builder, this);
-            
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            // Nothing much to add here.
-
-            throw ex;
-        }
-        catch (Throwable ex)
-        {
-            // But wrap other exceptions in a RequestCycleException ... this
-            // will ensure that some of the context is available.
-
-            throw new ApplicationRuntimeException(ex.getMessage(), _page, null, ex);
-        }
-        finally
-        {
-            reset();
-        }
-
-    }
-
-    /**
-     * Resets all internal state after a render or a rewind.
-     */
-
-    private void reset()
-    {
-        _attributes.clear();
-        _idAllocator.clear();
-    }
-
-    /**
-     * Rewinds an individual form by invoking {@link IForm#rewind(IMarkupWriter, IRequestCycle)}.
-     * <p>
-     * The process is expected to end with a {@link RenderRewoundException}. If the entire page is
-     * renderred without this exception being thrown, it means that the target action id was not
-     * valid, and a {@link ApplicationRuntimeException}&nbsp;is thrown.
-     * <p>
-     * This clears all attributes.
-     * 
-     * @since 1.0.2
-     */
-
-    public void rewindForm(IForm form)
-    {
-        IPage page = form.getPage();
-        _rewinding = true;
-        
-        _targetComponent = form;
-
-        try
-        {
-            page.beginPageRender();
-
-            form.rewind(NullWriter.getSharedInstance(), this);
-
-            // Shouldn't get this far, because the form should
-            // throw the RenderRewoundException.
-
-            throw new StaleLinkException(Tapestry.format("RequestCycle.form-rewind-failure", form.getExtendedId()), form);
-        }
-        catch (RenderRewoundException ex)
-        {
-            // This is acceptible and expected.
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            // RequestCycleExceptions don't need to be wrapped.
-            throw ex;
-        }
-        catch (Throwable ex)
-        {
-            // But wrap other exceptions in a ApplicationRuntimeException ... this
-            // will ensure that some of the context is available.
-
-            throw new ApplicationRuntimeException(ex.getMessage(), page, null, ex);
-        }
-        finally
-        {
-            page.endPageRender();
-
-            reset();
-            _rewinding = false;
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void disableFocus()
-    {
-        _focusDisabled = true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isFocusDisabled()
-    {
-        return _focusDisabled;
-    }
-
-    public void setAttribute(String name, Object value)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Set attribute " + name + " to " + value);
-
-        _attributes.put(name, value);
-    }
-
-    /**
-     * Invokes {@link IPageRecorder#commit()} on each page recorder loaded during the request cycle
-     * (even recorders marked for discard).
-     */
-
-    public void commitPageChanges()
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Committing page changes");
-
-        if (_pageRecorders == null || _pageRecorders.isEmpty())
-            return;
-
-        Iterator i = _pageRecorders.values().iterator();
-
-        while (i.hasNext())
-        {
-            IPageRecorder recorder = (IPageRecorder) i.next();
-
-            recorder.commit();
-        }
-    }
-
-    /**
-     * As of 4.0, just a synonym for {@link #forgetPage(String)}.
-     * 
-     * @since 2.0.2
-     */
-
-    public void discardPage(String name)
-    {
-        forgetPage(name);
-    }
-
-    /** @since 4.0 */
-    public Object[] getListenerParameters()
-    {
-        return _listenerParameters;
-    }
-
-    /** @since 4.0 */
-    public void setListenerParameters(Object[] parameters)
-    {
-        _listenerParameters = parameters;
-    }
-
-    /** @since 3.0 * */
-
-    public void activate(String name)
-    {
-        IPage page = getPage(name);
-
-        activate(page);
-    }
-    
-    /** @since 3.0 */
-
-    public void activate(IPage page)
-    {
-        Defense.notNull(page, "page");
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Activating page " + page);
-        
-        Tapestry.clearMethodInvocations();
-        
-        page.validate(this);
-        
-        Tapestry.checkMethodInvocation(Tapestry.ABSTRACTPAGE_VALIDATE_METHOD_ID, "validate()", page);
-
-        _page = page;
-    }
-    
-    /** @since 4.0 */
-    public String getParameter(String name)
-    {
-        return _parameters.getParameterValue(name);
-    }
-
-    /** @since 4.0 */
-    public String[] getParameters(String name)
-    {
-        return _parameters.getParameterValues(name);
-    }
-
-    /**
-     * @since 3.0
-     */
-    public String toString()
-    {
-        ToStringBuilder b = new ToStringBuilder(this);
-
-        b.append("rewinding", _rewinding);
-
-        b.append("serviceName", _serviceName);
-
-        b.append("serviceParameters", _listenerParameters);
-
-        if (_loadedPages != null)
-            b.append("loadedPages", _loadedPages.keySet());
-
-        b.append("attributes", _attributes);
-        b.append("targetActionId", _targetActionId);
-        b.append("targetComponent", _targetComponent);
-
-        return b.toString();
-    }
-
-    /** @since 4.0 */
-
-    public String getAbsoluteURL(String partialURL)
-    {
-        String contextPath = _infrastructure.getRequest().getContextPath();
-
-        return _absoluteURLBuilder.constructURL(contextPath + partialURL);
-    }
-
-    /** @since 4.0 */
-
-    public void forgetPage(String pageName)
-    {
-        Defense.notNull(pageName, "pageName");
-
-        _strategySource.discardAllStoredChanged(pageName);
-    }
-
-    /** @since 4.0 */
-
-    public Infrastructure getInfrastructure()
-    {
-        return _infrastructure;
-    }
-
-    /** @since 4.0 */
-
-    public String getUniqueId(String baseId)
-    {
-        return _idAllocator.allocateId(baseId);
-    }
-    
-    /** @since 4.1 */
-    
-    public String peekUniqueId(String baseId)
-    {
-        return _idAllocator.peekNextId(baseId);
-    }
-    
-    /** @since 4.0 */
-    public void sendRedirect(String URL)
-    {
-        throw new RedirectException(URL);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycleEnvironment.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycleEnvironment.java
deleted file mode 100644
index f2fb4e4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/RequestCycleEnvironment.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.ErrorHandler;
-import org.apache.tapestry.record.PropertyPersistenceStrategySource;
-import org.apache.tapestry.services.AbsoluteURLBuilder;
-import org.apache.tapestry.services.Infrastructure;
-
-/**
- * An object that contains all the invariant parameters to the
- * 
- * {@link RequestCycle#RequestCycle(org.apache.tapestry.IEngine, org.apache.tapestry.util.QueryParameterMap, String, RequestCycleEnvironment)}
- * constructor.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class RequestCycleEnvironment
-{
-    private final Infrastructure _infrastructure;
-
-    private final PropertyPersistenceStrategySource _strategySource;
-
-    private final AbsoluteURLBuilder _absoluteURLBuilder;
-
-    private final ErrorHandler _errorHandler;
-
-    public RequestCycleEnvironment(ErrorHandler errorHandler, Infrastructure infrastructure,
-            PropertyPersistenceStrategySource strategySource, AbsoluteURLBuilder absoluteURLBuilder)
-    {
-        _errorHandler = errorHandler;
-        _infrastructure = infrastructure;
-        _strategySource = strategySource;
-        _absoluteURLBuilder = absoluteURLBuilder;
-    }
-
-    public AbsoluteURLBuilder getAbsoluteURLBuilder()
-    {
-        return _absoluteURLBuilder;
-    }
-
-    public ErrorHandler getErrorHandler()
-    {
-        return _errorHandler;
-    }
-
-    public Infrastructure getInfrastructure()
-    {
-        return _infrastructure;
-    }
-
-    public PropertyPersistenceStrategySource getStrategySource()
-    {
-        return _strategySource;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ResetService.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ResetService.java
deleted file mode 100644
index ca74bc7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ResetService.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResetEventHub;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * ServiceLink used to discard all cached data (templates, specifications, et
- * cetera). This is primarily used during development. It could be a weakness of
- * a Tapestry application, making it susceptible to denial of service attacks,
- * which is why it is disabled by default. The link generated by the
- * ResetService redisplays the current page after discarding all data.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.9
- */
-
-public class ResetService implements IEngineService
-{
-
-    /** @since 4.0 */
-
-    private ResponseRenderer _responseRenderer;
-
-    /** @since 4.0 */
-
-    private ResetEventHub _resetEventHub;
-
-    /** @since 4.0 */
-    private boolean _enabled;
-
-    /** @since 4.0 */
-
-    private LinkFactory _linkFactory;
-
-    /** @since 4.0 */
-    private IRequestCycle _requestCycle;
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        if (parameter != null)
-            throw new IllegalArgumentException(EngineMessages
-                    .serviceNoParameter(this));
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.PAGE, _requestCycle.getPage()
-                .getPageName());
-
-        return _linkFactory.constructLink(this, post, parameters, true);
-    }
-
-    public String getName()
-    {
-        return Tapestry.RESET_SERVICE;
-    }
-
-    public void service(IRequestCycle cycle)
-        throws IOException
-    {
-        String pageName = cycle.getParameter(ServiceConstants.PAGE);
-
-        if (_enabled) _resetEventHub.fireResetEvent();
-
-        cycle.activate(pageName);
-
-        // Render the same page (that contained the reset link).
-
-        _responseRenderer.renderResponse(cycle);
-    }
-
-    /** @since 4.0 */
-    public void setResponseRenderer(ResponseRenderer responseRenderer)
-    {
-        _responseRenderer = responseRenderer;
-    }
-
-    /** @since 4.0 */
-
-    public void setResetEventHub(ResetEventHub resetEventHub)
-    {
-        _resetEventHub = resetEventHub;
-    }
-
-    /** @since 4.0 */
-
-    public void setEnabled(boolean enabled)
-    {
-        _enabled = enabled;
-    }
-
-    /** @since 4.0 */
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-
-    /** @since 4.0 */
-    public void setRequestCycle(IRequestCycle requestCycle)
-    {
-        _requestCycle = requestCycle;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/RestartService.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/RestartService.java
deleted file mode 100644
index 7de7019..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/RestartService.java
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.LinkFactory;
-
-/**
- * Restarts the Tapestry application. This is normally reserved for dealing with
- * catastrophic failures of the application. Discards the
- * {@link javax.servlet.http.HttpSession}, if any, and redirects to the
- * Tapestry application servlet URL (invoking the {@link HomeService}).
- * 
- * @author Howard Lewis Ship
- * @since 1.0.9
- */
-
-public class RestartService implements IEngineService
-{
-
-    /** @since 4.0 */
-    private Log _log;
-
-    /** @since 4.0 */
-    private HttpServletRequest _request;
-
-    /** @since 4.0 */
-    private HttpServletResponse _response;
-
-    /** @since 4.0 */
-    private LinkFactory _linkFactory;
-
-    /** @since 4.0 */
-    private String _servletPath;
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        if (parameter != null)
-            throw new IllegalArgumentException(EngineMessages
-                    .serviceNoParameter(this));
-
-        Map parameters = new HashMap();
-
-        return _linkFactory.constructLink(this, post, parameters, true);
-    }
-
-    public void service(IRequestCycle cycle)
-        throws IOException
-    {
-        HttpSession session = _request.getSession(false);
-
-        if (session != null)
-        {
-            try
-            {
-                session.invalidate();
-            }
-            catch (IllegalStateException ex)
-            {
-                _log.warn("Exception thrown invalidating HttpSession.", ex);
-
-                // Otherwise, ignore it.
-            }
-        }
-
-        String url = cycle.getAbsoluteURL(_servletPath);
-
-        _response.sendRedirect(url);
-    }
-
-    public String getName()
-    {
-        return Tapestry.RESTART_SERVICE;
-    }
-
-    /** @since 4.0 */
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-
-    /** @since 4.0 */
-    public void setRequest(HttpServletRequest request)
-    {
-        _request = request;
-    }
-
-    /** @since 4.0 */
-    public void setResponse(HttpServletResponse response)
-    {
-        _response = response;
-    }
-
-    /** @since 4.0 */
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-
-    /** @since 4.0 */
-    public void setServletPath(String servletPath)
-    {
-        _servletPath = servletPath;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncoder.java
deleted file mode 100644
index 37c6b8f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncoder.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-/**
- * Encapsulates the logic for encoding and decoding service requests.
- * 
- * @since 4.0
- */
-public interface ServiceEncoder
-{
-
-    /**
-     * Invoked by the {@link org.apache.tapestry.services.LinkFactory}&nbsp;to
-     * encode the request. Encoding is the process of modifying the encoding
-     * object to represent the same data in a different format; the canoncial
-     * example is to replace the
-     * {@link org.apache.tapestry.services.ServiceConstants#PAGE}and
-     * {@link org.apache.tapestry.services.ServiceConstants#SERVICE}query
-     * parameters with a servlet path (i.e., "/Home.html", if the ".html"
-     * extension is mapped to the page service).
-     * <p>
-     * The {@link org.apache.tapestry.services.LinkFactory}&nbsp;iterates over
-     * a collection of encoders, stopping once the ServiceRequestEncoding is
-     * modified in any way.
-     */
-
-    void encode(ServiceEncoding encoding);
-
-    /**
-     * Invoked to decode a request. The encoder is responsible for recognizing a
-     * request it may have encoded, and for restoring any query parameters is
-     * may have removed.
-     */
-
-    void decode(ServiceEncoding encoding);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncoding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncoding.java
deleted file mode 100644
index 285c3c2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncoding.java
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-/**
- * Contains the information needed to encode a request for a service; the
- * servlet path plus and query parameters. The service encoding is passed to
- * each {@link org.apache.tapestry.engine.ServiceEncoder}&nbsp;, which is
- * allowed to modify the encoding (typically, by changing the servlet path and
- * settting query parameters to null). From this modified encoding, an
- * {@link org.apache.tapestry.engine.ILink}can be constructed.
- * <p>
- * Additionally, when a request is dispatched by Tapestry, an SRE is also
- * created and passed to each {@link org.apache.tapestry.engine.ServiceEncoder}&nbsp;for
- * decoding. Here, the query parameters that may have been nulled out by the
- * encoding are restored.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.services.ServiceConstants
- */
-public interface ServiceEncoding
-{
-
-    /**
-     * Returns the value for the named parameter. If multiple values are stored
-     * for the query parameter, only the first is returned.
-     * 
-     * @parameter name the name of the query parameter to access
-     * @return the value, or null if no such query parameter exists
-     */
-
-    String getParameterValue(String name);
-
-    /**
-     * Returns the value for the named parameter.
-     * 
-     * @parameter name the name of the query parameter to access
-     * @return the values, or null if no such query parameter exists
-     */
-    String[] getParameterValues(String name);
-
-    /**
-     * Updates the servlet path for the encoding. In some cases, this is a
-     * combination of the servlet and additional path info.
-     */
-
-    void setServletPath(String servletPath);
-
-    /**
-     * Sets the value for the named query parameter to the provided string.
-     * 
-     * @param name
-     *            the name of the parameter to set.
-     * @param value
-     *            the new value, which may be null.
-     */
-    void setParameterValue(String name, String value);
-
-    /**
-     * Sets the values for a named query parameter.
-     */
-
-    void setParameterValues(String name, String[] values);
-
-    /**
-     * Returns the servlet path for the request. This is the portion of the URL
-     * recognized as the servlet. When the URL pattern (in web.xml) ends in a
-     * "*" (such as "/book/*"), this method will return the matched servlet
-     * portion ("/book/") and {#link #getPathInfo} will return the rest of the
-     * URL.
-     */
-
-    String getServletPath();
-
-    /**
-     * Returns the portion of the URL after the servlet itself.
-     * 
-     * @return pathInfo if path info was supplied in the request, or null
-     *         otherwise.
-     */
-    String getPathInfo();
-
-    /**
-     * Returns an array of parameter names. The names are returned in
-     * alphabetically sorted order. This list includes all parameter names, even
-     * those for which the stored value is null.
-     */
-
-    String[] getParameterNames();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncodingImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncodingImpl.java
deleted file mode 100644
index 6fc9eee..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/ServiceEncodingImpl.java
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.util.QueryParameterMap;
-
-/**
- * Implementation of {@link org.apache.tapestry.engine.ServiceEncoding}, which adds the ability to
- * determine when the encoding has been modified.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ServiceEncodingImpl implements ServiceEncoding
-{
-    protected String _servletPath;
-
-    protected String _pathInfo;
-
-    /**
-     * Map of query parameter values; key is string name, value is either a string, an array of
-     * strings, or null. Could have done this with subclassing rather than delegation.
-     */
-
-    protected final QueryParameterMap _parameters;
-
-    protected boolean _modified;
-
-    /**
-     * Creates a new instance with a new map of parameters.
-     */
-
-    public ServiceEncodingImpl(String servletPath)
-    {
-        this(servletPath, null, new QueryParameterMap());
-    }
-
-    public ServiceEncodingImpl(String servletPath, QueryParameterMap parametersMap)
-    {
-        this(servletPath, null, parametersMap);
-    }
-
-    public ServiceEncodingImpl(String servletPath, String pathInfo, QueryParameterMap parameters)
-    {
-        Defense.notNull(servletPath, "servletPath");
-        Defense.notNull(parameters, "parameters");
-
-        _servletPath = servletPath;
-        _pathInfo = pathInfo;
-        _parameters = parameters;
-    }
-    
-    public boolean isModified()
-    {
-        return _modified;
-    }
-
-    public void resetModified()
-    {
-        _modified = false;
-    }
-
-    public String getParameterValue(String name)
-    {
-        return _parameters.getParameterValue(name);
-    }
-
-    public String[] getParameterValues(String name)
-    {
-        return _parameters.getParameterValues(name);
-    }
-
-    public void setServletPath(String servletPath)
-    {
-        Defense.notNull(servletPath, "servletPath");
-
-        _servletPath = servletPath;
-        _modified = true;
-    }
-
-    public void setParameterValue(String name, String value)
-    {
-        _parameters.setParameterValue(name, value);
-
-        _modified = true;
-    }
-
-    public void setParameterValues(String name, String[] values)
-    {
-        _parameters.setParameterValues(name, values);
-
-        _modified = true;
-    }
-
-    public String getServletPath()
-    {
-        return _servletPath;
-    }
-
-    public String[] getParameterNames()
-    {
-        return _parameters.getParameterNames();
-    }
-
-    public String getPathInfo()
-    {
-        return _pathInfo;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java
deleted file mode 100644
index 43428cf..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.encoders;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.asset.AssetService;
-import org.apache.tapestry.engine.ServiceEncoder;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * Encoder for the {@link org.apache.tapestry.asset.AssetService}&nbsp;that uses servlet path info
- * to store the resource digest and the path to the resource.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class AssetEncoder implements ServiceEncoder
-{
-    public static final String DIGEST_STATIC = "static";
-    
-    private static final String PATH_SEPARATOR = "/";
-    
-    private String _path;
-    
-    public void setPath(String path)
-    {
-        _path = path;
-    }
-    
-    public void encode(ServiceEncoding encoding)
-    {
-        if (!encoding.getParameterValue(ServiceConstants.SERVICE).equals(Tapestry.ASSET_SERVICE))
-            return;
-        
-        String path = encoding.getParameterValue(AssetService.PATH);
-        String digest = encoding.getParameterValue(AssetService.DIGEST);
-        
-        // fix broken path if doesn't start with / 
-         
-        if (!path.startsWith(PATH_SEPARATOR))
-            path = PATH_SEPARATOR + path;
-        
-        // _path ends with a slash, path starts with one.
-        
-        String fullPath = _path + ((digest != null) ? "/" + digest : "/" + DIGEST_STATIC) + path;
-        
-        encoding.setServletPath(fullPath);
-        encoding.setParameterValue(AssetService.PATH, null);
-        encoding.setParameterValue(AssetService.DIGEST, null);
-        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-    }
-
-    public void decode(ServiceEncoding encoding)
-    {
-        if (!encoding.getServletPath().equals(_path))
-            return;
-        
-        String pathInfo = encoding.getPathInfo();
-        
-        // The lead character is a slash, so find the next slash (the divider between the
-        // digest and the path).
-        int slashx = pathInfo.indexOf('/', 1);
-        
-        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
-        encoding.setParameterValue(AssetService.DIGEST, pathInfo.substring(1, slashx));
-        encoding.setParameterValue(AssetService.PATH, pathInfo.substring(slashx));
-    }
-    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/DirectServiceEncoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/DirectServiceEncoder.java
deleted file mode 100644
index d81906b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/DirectServiceEncoder.java
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.encoders;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.ServiceEncoder;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * A specialized encoder for the
- * {@link org.apache.tapestry.engine.DirectService direct service} &nbsp;that
- * encodes the page name and component id path into the servlet path, and
- * encodes the stateful flag by choosing one of two extensions.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DirectServiceEncoder implements ServiceEncoder
-{
-
-    private String _statelessExtension;
-
-    private String _statefulExtension;
-
-    public void encode(ServiceEncoding encoding)
-    {
-        String service = encoding.getParameterValue(ServiceConstants.SERVICE);
-        if (!service.equals(Tapestry.DIRECT_SERVICE)) return;
-
-        String pageName = encoding.getParameterValue(ServiceConstants.PAGE);
-
-        // Only handle pages in the application namespace (not from a library).
-
-        if (pageName.indexOf(INamespace.SEPARATOR) >= 0) return;
-
-        String stateful = encoding.getParameterValue(ServiceConstants.SESSION);
-        String componentIdPath = encoding
-                .getParameterValue(ServiceConstants.COMPONENT);
-
-        StringBuffer buffer = new StringBuffer("/");
-        buffer.append(pageName);
-
-        buffer.append(",");
-        buffer.append(componentIdPath);
-
-        buffer.append(".");
-        buffer.append(stateful != null ? _statefulExtension
-                : _statelessExtension);
-
-        encoding.setServletPath(buffer.toString());
-
-        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-        encoding.setParameterValue(ServiceConstants.PAGE, null);
-        encoding.setParameterValue(ServiceConstants.SESSION, null);
-        encoding.setParameterValue(ServiceConstants.COMPONENT, null);
-    }
-
-    public void decode(ServiceEncoding encoding)
-    {
-        String servletPath = encoding.getServletPath();
-
-        int dotx = servletPath.lastIndexOf('.');
-        if (dotx < 0) return;
-
-        String extension = servletPath.substring(dotx + 1);
-
-        if (!(extension.equals(_statefulExtension) || extension
-                .equals(_statelessExtension))) return;
-
-        int commax = servletPath.lastIndexOf(',');
-
-        String pageName = servletPath.substring(1, commax);
-        String componentIdPath = servletPath.substring(commax + 1, dotx);
-
-        encoding.setParameterValue(ServiceConstants.SERVICE,
-                Tapestry.DIRECT_SERVICE);
-        encoding.setParameterValue(ServiceConstants.PAGE, pageName);
-        encoding.setParameterValue(ServiceConstants.SESSION, extension
-                .equals(_statefulExtension) ? "T" : null);
-        encoding.setParameterValue(ServiceConstants.COMPONENT, componentIdPath);
-    }
-
-    public void setStatefulExtension(String statefulExtension)
-    {
-        _statefulExtension = statefulExtension;
-    }
-
-    public void setStatelessExtension(String statelessExtension)
-    {
-        _statelessExtension = statelessExtension;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/PageServiceEncoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/PageServiceEncoder.java
deleted file mode 100644
index 4c5af3d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/PageServiceEncoder.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.encoders;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.engine.ServiceEncoder;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * The canonical implementation of
- * {@link org.apache.tapestry.engine.ServiceEncoder}, it encodes page name and
- * a service name. The page name becomes the servlet path, prefixed with "/" and
- * suffixed with a dot and a particular extension. In this way,
- * "/app?service=page&amp;page=Home" becomes simply "Home.html". This is most
- * suitable for the "page" and "external" services.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PageServiceEncoder implements ServiceEncoder
-{
-
-    private String _extension;
-
-    private String _serviceName;
-
-    public void encode(ServiceEncoding encoding)
-    {
-        String service = encoding.getParameterValue(ServiceConstants.SERVICE);
-
-        if (!service.equals(_serviceName)) return;
-
-        String pageName = encoding.getParameterValue(ServiceConstants.PAGE);
-
-        // Only handle pages in the application namespace (not from a library).
-
-        if (pageName.indexOf(INamespace.SEPARATOR) >= 0) return;
-
-        StringBuffer buffer = new StringBuffer("/");
-        buffer.append(pageName);
-        buffer.append('.');
-        buffer.append(_extension);
-
-        encoding.setServletPath(buffer.toString());
-
-        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-        encoding.setParameterValue(ServiceConstants.PAGE, null);
-    }
-
-    public void decode(ServiceEncoding encoding)
-    {
-        String servletPath = encoding.getServletPath();
-
-        int dotx = servletPath.lastIndexOf('.');
-        if (dotx < 0) return;
-
-        String extension = servletPath.substring(dotx + 1);
-
-        if (!extension.equals(_extension)) return;
-
-        // Skip the slash and the dot.
-
-        String page = servletPath.substring(1, dotx);
-
-        encoding.setParameterValue(ServiceConstants.SERVICE, _serviceName);
-        encoding.setParameterValue(ServiceConstants.PAGE, page);
-    }
-
-    public void setExtension(String extension)
-    {
-        _extension = extension;
-    }
-
-    public void setServiceName(String serviceName)
-    {
-        _serviceName = serviceName;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/PathEncoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/PathEncoder.java
deleted file mode 100644
index 692e313..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/PathEncoder.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.apache.tapestry.engine.encoders;
-
-import org.apache.tapestry.engine.ServiceEncoder;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * Encoder for mapping service names as simple paths such as "/service" . 
- */
-public class PathEncoder implements ServiceEncoder {
-
-    private String _path;
-
-    private String _service;
-
-    public void setPath(String path)
-    {
-        _path = path;
-    }
-
-    public void setService(String service)
-    {
-        _service = service;
-    }
-
-    public void encode(ServiceEncoding encoding)
-    {
-        if (!encoding.getParameterValue(ServiceConstants.SERVICE).equals(_service))
-            return;
-           
-        encoding.setServletPath(_path);
-        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-    }
-
-    public void decode(ServiceEncoding encoding)
-    {
-        if (!encoding.getServletPath().equals(_path))
-            return;
-        
-        encoding.setParameterValue(ServiceConstants.SERVICE, _service);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/ServiceExtensionEncoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/ServiceExtensionEncoder.java
deleted file mode 100644
index 846cfa8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/ServiceExtensionEncoder.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.encoders;
-
-import org.apache.tapestry.engine.ServiceEncoder;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * Encodes the service name, typical output is "/page.svc" where "page" is a
- * service name. This is useful for the home and restart services, for example.
- * This encoder should be prioritized very low so that it doesn't prevent other
- * encoders from doing their work.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ServiceExtensionEncoder implements ServiceEncoder
-{
-
-    private String _extension;
-
-    public void setExtension(String extension)
-    {
-        _extension = extension;
-    }
-
-    public void encode(ServiceEncoding encoding)
-    {
-        String service = encoding.getParameterValue(ServiceConstants.SERVICE);
-
-        // Can assume this is never null.
-
-        encoding.setServletPath("/" + service + "." + _extension);
-        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-    }
-
-    public void decode(ServiceEncoding encoding)
-    {
-        String servletPath = encoding.getServletPath();
-
-        int dotx = servletPath.lastIndexOf('.');
-
-        String extension = servletPath.substring(dotx + 1);
-
-        if (!extension.equals(_extension)) return;
-
-        // The first character should be a slash, then the service name, then
-        // the dot.
-
-        String service = servletPath.substring(1, dotx);
-
-        encoding.setParameterValue(ServiceConstants.SERVICE, service);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/package.html
deleted file mode 100644
index 923e431..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Various service url encoding classes for things like Assets / page links / etc.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-</p>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/package.html
deleted file mode 100644
index 9272018..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/package.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Implementations of the {@link org.apache.tapestry.IEngine} interface, including
-the standard implementation:
-{@link org.apache.tapestry.engine.BaseEngine}.  Also located here are
-default implementations of all the basic support objects, including
-{@link org.apache.tapestry.engine.RequestCycle} 
-(which implements {@link org.apache.tapestry.IRequestCycle}).
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/ApplicationScopeManager.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/ApplicationScopeManager.java
deleted file mode 100644
index c135d61..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/ApplicationScopeManager.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * The application scope is for objects that are global to all users and all sessions.
- * Traditionally, that's stored in the servlet context, but there's no advantage to doing that over
- * just using a Map.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ApplicationScopeManager implements StateObjectPersistenceManager
-{
-    private Map _objects = new HashMap();
-
-    public synchronized boolean exists(String objectName)
-    {
-        return false;
-    }
-
-    public synchronized Object get(String objectName, StateObjectFactory factory)
-    {
-        Object result = _objects.get(objectName);
-
-        if (result == null)
-        {
-            result = factory.createStateObject();
-            _objects.put(objectName, result);
-        }
-
-        return result;
-    }
-
-    public synchronized void store(String objectName, Object stateObject)
-    {
-        _objects.put(objectName, stateObject);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/ApplicationStateManager.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/ApplicationStateManager.java
deleted file mode 100644
index 849653e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/ApplicationStateManager.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ApplicationStateManager
-{
-    /**
-     * Checks to see if the named object exists.
-     * 
-     * @param objectName
-     *            the name of the application state object
-     * @return True if the object with the specified name exists, false otherwise.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *          If no such object is declared
-     */
-    boolean exists(String objectName);
-
-    /**
-     * Gets the named application state object, creating it if necessary.
-     * 
-     * @param objectName
-     *            the name of the application state object
-     * @return the object
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if no such object is declared
-     */
-    Object get(String objectName);
-    
-    /**
-     * Stores a new state object, replacing the old one. The
-     * new object may be null.
-     * 
-     * @param objectName the name of the object to store
-     * @param stateObject the new object, possibly null
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if no such object is declared
-     */
-    
-    void store(String objectName, Object stateObject);
-
-    /**
-     * Asks each {@link StateObjectManager} to store each object obtained.
-     */
-
-    void flush();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/ApplicationStateManagerImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/ApplicationStateManagerImpl.java
deleted file mode 100644
index d5c0ea9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/ApplicationStateManagerImpl.java
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.hivemind.PoolManageable;
-
-/**
- * This implementation expects to be pooled.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ApplicationStateManagerImpl implements ApplicationStateManager, PoolManageable
-{
-
-    /**
-     * Keyed on application static object name, value is the current state object.
-     */
-
-    private Map _stateObjects = new HashMap();
-
-    private StateObjectManagerRegistry _registry;
-
-    public void activateService()
-    {
-    }
-
-    public void passivateService()
-    {
-        _stateObjects.clear();
-    }
-
-    public boolean exists(String objectName)
-    {
-        return _stateObjects.containsKey(objectName) || _registry.get(objectName).exists();
-    }
-
-    public Object get(String objectName)
-    {
-        Object result = _stateObjects.get(objectName);
-
-        if (result == null)
-        {
-            result = _registry.get(objectName).get();
-
-            _stateObjects.put(objectName, result);
-        }
-
-        return result;
-    }
-
-    public void store(String objectName, Object stateObject)
-    {
-        _registry.get(objectName).store(stateObject);
-
-        _stateObjects.put(objectName, stateObject);
-    }
-
-    public void flush()
-    {
-        Iterator i = _stateObjects.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry e = (Map.Entry) i.next();
-
-            String objectName = (String) e.getKey();
-            Object stateObject = e.getValue();
-
-            // Slight bending of law-of-demeter
-
-            _registry.get(objectName).store(stateObject);
-        }
-    }
-
-    public void setRegistry(StateObjectManagerRegistry registry)
-    {
-        _registry = registry;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/DefaultGlobalStateObjectFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/DefaultGlobalStateObjectFactory.java
deleted file mode 100644
index 5d7b301..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/DefaultGlobalStateObjectFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import java.util.Collections;
-import java.util.HashMap;
-
-import org.apache.hivemind.HiveMind;
-
-/**
- * The default factory for the (default) global application state object. Creates and returns a
- * synchronized HashMap, if no class name is specified. This duplicates behavior from Tapestry 3.0.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DefaultGlobalStateObjectFactory extends NamedClassStateObjectFactory implements
-        StateObjectFactory
-{
-
-    public Object createStateObject()
-    {
-        if (HiveMind.isBlank(getClassName()))
-            return Collections.synchronizedMap(new HashMap());
-
-        return super.createStateObject();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/InstantiateClassStateObjectFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/InstantiateClassStateObjectFactory.java
deleted file mode 100644
index 040f143..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/InstantiateClassStateObjectFactory.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- * Simple state object factory that instantiates an instance of a class.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InstantiateClassStateObjectFactory extends BaseLocatable implements
-        StateObjectFactory
-{
-
-    private Class _objectClass;
-
-    public Object createStateObject()
-    {
-        try
-        {
-            return _objectClass.newInstance();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(StateMessages
-                    .unableToInstantiateObject(_objectClass, ex),
-                    getLocation(), ex);
-        }
-    }
-
-    public void setObjectClass(Class objectClass)
-    {
-        _objectClass = objectClass;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/NamedClassStateObjectFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/NamedClassStateObjectFactory.java
deleted file mode 100644
index f0693c4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/NamedClassStateObjectFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- * Used to instantiate the a state object from a configurable class name.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class NamedClassStateObjectFactory extends BaseLocatable implements
-        StateObjectFactory
-{
-
-    private ClassResolver _classResolver;
-
-    private String _className;
-
-    public Object createStateObject()
-    {
-        try
-        {
-            Class c = _classResolver.findClass(_className);
-
-            return c.newInstance();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(StateMessages
-                    .unableToInstantiateObject(_className, ex), getLocation(),
-                    ex);
-        }
-    }
-
-    public void setClassName(String className)
-    {
-        _className = className;
-    }
-
-    public String getClassName()
-    {
-        return _className;
-    }
-
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/SOMRegistryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/SOMRegistryImpl.java
deleted file mode 100644
index f650803..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/SOMRegistryImpl.java
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class SOMRegistryImpl implements StateObjectManagerRegistry
-{
-
-    private ErrorLog _errorLog;
-
-    private Map _factoryContributions;
-
-    private Map _applicationContributions;
-
-    private Map _persistenceManagers;
-
-    private Map _objectManagers = new HashMap();
-
-    public void initializeService()
-    {
-        Map contributions = new HashMap();
-        contributions.putAll(_factoryContributions);
-        // Overwrite any duplicates with the application contributions
-        contributions.putAll(_applicationContributions);
-
-        Iterator i = contributions.values().iterator();
-        while(i.hasNext())
-        {
-            StateObjectContribution c = (StateObjectContribution) i.next();
-
-            String objectName = c.getName();
-            String scope = c.getScope();
-
-            StateObjectPersistenceManager pm = (StateObjectPersistenceManager) _persistenceManagers
-                    .get(scope);
-
-            if (pm == null)
-            {
-                _errorLog.error(StateMessages.unknownScope(objectName, scope),
-                        c.getLocation(), null);
-                continue;
-            }
-
-            StateObjectManager manager = new StateObjectManagerImpl(objectName,
-                    c.getFactory(), pm);
-
-            _objectManagers.put(objectName, manager);
-
-        }
-    }
-
-    public StateObjectManager get(String objectName)
-    {
-        StateObjectManager manager = (StateObjectManager) _objectManagers
-                .get(objectName);
-
-        if (manager == null)
-            throw new ApplicationRuntimeException(StateMessages
-                    .unknownStateObjectName(objectName));
-
-        return manager;
-    }
-
-    public void setApplicationContributions(Map applicationContributions)
-    {
-        _applicationContributions = applicationContributions;
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-
-    public void setFactoryContributions(Map factoryContributions)
-    {
-        _factoryContributions = factoryContributions;
-    }
-
-    public void setPersistenceManagers(Map persistenceManagers)
-    {
-        _persistenceManagers = persistenceManagers;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/SessionScopeManager.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/SessionScopeManager.java
deleted file mode 100644
index 26cd2f3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/SessionScopeManager.java
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import org.apache.tapestry.SessionStoreOptimized;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-
-/**
- * Manager for the 'session' scope; state objects are stored as HttpSession
- * attributes. The HttpSession is created as necessary.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class SessionScopeManager implements StateObjectPersistenceManager
-{
-
-    private WebRequest _request;
-
-    private String _applicationId;
-
-    private String buildKey(String objectName)
-    {
-        // For Portlets, the application id is going to be somewhat redundant,
-        // since
-        // the Portlet API keeps portlets seperate anyway.
-
-        return "state:" + _applicationId + ":" + objectName;
-    }
-
-    /**
-     * Returns the session for the current request, creating it if necessary.
-     */
-
-    private WebSession getSession()
-    {
-        return _request.getSession(true);
-    }
-
-    public boolean exists(String objectName)
-    {
-        WebSession session = _request.getSession(false);
-
-        if (session == null) return false;
-
-        return session.getAttribute(buildKey(objectName)) != null;
-    }
-
-    public Object get(String objectName, StateObjectFactory factory)
-    {
-        String key = buildKey(objectName);
-        WebSession session = getSession();
-
-        Object result = session.getAttribute(key);
-        if (result == null)
-        {
-            result = factory.createStateObject();
-            session.setAttribute(key, result);
-        }
-
-        return result;
-    }
-
-    public void store(String objectName, Object stateObject)
-    {
-        if (stateObject instanceof SessionStoreOptimized)
-        {
-            SessionStoreOptimized optimized = (SessionStoreOptimized) stateObject;
-
-            if (!optimized.isStoreToSessionNeeded())
-                return;
-        }
-
-        String key = buildKey(objectName);
-
-        WebSession session = getSession();
-
-        session.setAttribute(key, stateObject);
-    }
-
-    public void setApplicationId(String applicationName)
-    {
-        _applicationId = applicationName;
-    }
-
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateMessages.java
deleted file mode 100644
index c1b8a29..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateMessages.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class StateMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(StateMessages.class);
-
-    /* defeat instantiation */
-    private StateMessages() { }
-    
-    static String unknownStateObjectName(String objectName)
-    {
-        return _formatter.format("unknown-state-object-name", objectName);
-    }
-
-    static String unableToInstantiateObject(Class objectClass, Throwable cause)
-    {
-        return _formatter.format("unable-to-instantiate-object", objectClass, cause);
-    }
-
-    static String unableToInstantiateObject(String className, Throwable cause)
-    {
-        return _formatter.format("unable-to-instantiate-object", className, cause);
-    }
-
-    static String unknownScope(String objectName, String scope)
-    {
-        return _formatter.format("unknown-scope", objectName, scope);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectContribution.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectContribution.java
deleted file mode 100644
index 95d7fdf..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectContribution.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- * Contribution to the tapestry.state.ApplicationObjects or
- * tapestry.state.FactoryObjects configuration points.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class StateObjectContribution extends BaseLocatable
-{
-
-    private String _name;
-
-    private String _scope;
-
-    private StateObjectFactory _factory;
-
-    public StateObjectFactory getFactory()
-    {
-        return _factory;
-    }
-
-    public void setFactory(StateObjectFactory factory)
-    {
-        _factory = factory;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    public String getScope()
-    {
-        return _scope;
-    }
-
-    public void setScope(String scope)
-    {
-        _scope = scope;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectFactory.java
deleted file mode 100644
index 7bdfcdb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectFactory.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-/**
- * A factory of application state objects.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface StateObjectFactory
-{
-
-    Object createStateObject();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectManager.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectManager.java
deleted file mode 100644
index 0e27467..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectManager.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-/**
- * Interface for an object that manages a single application state object.
- * Represents the named intersection of a
- * {@link org.apache.tapestry.engine.state.StateObjectPersistenceManager}for
- * storing the state object between request cycles, and a
- * {@link org.apache.tapestry.engine.state.StateObjectFactory}to create the
- * object in the first place.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface StateObjectManager
-{
-
-    /**
-     * Returns true if the application state object exists (i.e., a value has
-     * been stored).
-     */
-    boolean exists();
-
-    /**
-     * Gets or creates the application state object.
-     */
-
-    Object get();
-
-    /**
-     * Stores (if necessary) the object back into persistent storage. This is
-     * not application to all storage scopes.
-     * 
-     * @param stateObject
-     *            the application state object previously obtained from
-     *            {@link #get()}.
-     */
-
-    void store(Object stateObject);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectManagerImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectManagerImpl.java
deleted file mode 100644
index 0557a4c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectManagerImpl.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import org.apache.hivemind.util.Defense;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class StateObjectManagerImpl implements StateObjectManager
-{
-
-    private StateObjectPersistenceManager _persistenceManager;
-
-    private StateObjectFactory _factory;
-
-    private String _name;
-
-    public StateObjectManagerImpl(String name, StateObjectFactory factory,
-            StateObjectPersistenceManager persistenceManager)
-    {
-        Defense.notNull(name, "name");
-        Defense.notNull(factory, "factory");
-        Defense.notNull(persistenceManager, "persistenceManager");
-
-        _name = name;
-        _factory = factory;
-        _persistenceManager = persistenceManager;
-    }
-
-    public boolean exists()
-    {
-        return _persistenceManager.exists(_name);
-    }
-
-    public Object get()
-    {
-        return _persistenceManager.get(_name, _factory);
-    }
-
-    public void store(Object stateObject)
-    {
-        _persistenceManager.store(_name, stateObject);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectManagerRegistry.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectManagerRegistry.java
deleted file mode 100644
index a7afcda..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectManagerRegistry.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface StateObjectManagerRegistry
-{
-
-    /**
-     * Returns the named {@link StateObjectManager}.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if no such SOPM is defined.
-     */
-    StateObjectManager get(String objectName);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectPersistenceManager.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectPersistenceManager.java
deleted file mode 100644
index 754aad4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateObjectPersistenceManager.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-/**
- * Interface for the nuts and bolts of getting and storing application state
- * objects. These are intended to be stateless, and manage a number of state
- * objects, mapping objectNames to internal storage in some way.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface StateObjectPersistenceManager
-{
-
-    boolean exists(String objectName);
-
-    Object get(String objectName, StateObjectFactory factory);
-
-    void store(String objectName, Object stateObject);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateStrings.properties
deleted file mode 100644
index 63f4ce7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/StateStrings.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-unknown-state-object-name=''{0}'' is not a declared application state object.
-unable-to-instantiate-object=Unable to instantiate an instance of {0}: {1}
-unknown-scope=Application object ''{0}'' references uknown scope ''{1}'' and has been ignored.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/package.html
deleted file mode 100644
index 2c5964a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/engine/state/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-Management of application state objects (what, in Tapestry 3.0, were the Visit and Global objects).
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractFab.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractFab.java
deleted file mode 100644
index 827c161..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractFab.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import javassist.CtClass;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Common code for {@link org.apache.hivemind.service.impl.ClassFabImpl} and
- * {@link org.apache.hivemind.service.impl.InterfaceFabImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 1.1
- */
-public class AbstractFab
-{
-
-    private final CtClass _ctClass;
-
-    private final CtClassSource _source;
-
-    /**
-     * Map from Class to CtClass.
-     * 
-     * @since 1.1
-     */
-    private Map _ctClassCache = new HashMap();
-    
-    public AbstractFab(CtClassSource source, CtClass ctClass)
-    {
-        _ctClass = ctClass;
-        _source = source;
-    }
-
-    public void addInterface(Class interfaceClass)
-    {
-        CtClass ctInterfaceClass = _source.getCtClass(interfaceClass);
-
-        _ctClass.addInterface(ctInterfaceClass);
-    }
-
-    protected CtClass[] convertClasses(Class[] inputClasses)
-    {
-        if (inputClasses == null || inputClasses.length == 0)
-            return null;
-
-        int count = inputClasses.length;
-        CtClass[] result = new CtClass[count];
-
-        for (int i = 0; i < count; i++)
-        {
-            CtClass ctClass = convertClass(inputClasses[i]);
-
-            result[i] = ctClass;
-        }
-
-        return result;
-    }
-
-    /**
-     * @since 1.1
-     */
-    protected CtClass convertClass(Class inputClass)
-    {
-        CtClass result = (CtClass) _ctClassCache.get(inputClass);
-
-        if (result == null)
-        {
-            result = _source.getCtClass(inputClass);
-            _ctClassCache.put(inputClass, result);
-        }
-
-        return result;
-    }
-
-    public Class createClass()
-    {
-        return _source.createClass(_ctClass);
-    }
-
-    public Class createClass(boolean detach)
-    {
-        return _source.createClass(_ctClass, detach);
-    }
-    
-    protected CtClass getCtClass()
-    {
-        return _ctClass;
-    }
-
-    protected CtClassSource getSource()
-    {
-        return _source;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractPropertyWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractPropertyWorker.java
deleted file mode 100644
index 4d991f3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractPropertyWorker.java
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.util.Iterator;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * No, this class isn't abstract ... this worker locates abstract properties in the base component
- * class and provides a concrete implementation for them in the enhanced class.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class AbstractPropertyWorker implements EnhancementWorker
-{
-    private ErrorLog _errorLog;
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
-    {
-        Location location = spec.getLocation();
-
-        Iterator i = op.findUnclaimedAbstractProperties().iterator();
-
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-
-            try
-            {
-                createProperty(op, name, location);
-            }
-            catch (Exception ex)
-            {
-                _errorLog.error(
-                        EnhanceMessages.errorAddingProperty(name, op.getBaseClass(), ex),
-                        location,
-                        ex);
-            }
-        }
-    }
-
-    private void createProperty(EnhancementOperation op, String name, Location location)
-    {
-        // This won't be null because its always for existing properties.
-
-        Class propertyType = op.getPropertyType(name);
-
-        String fieldName = "_$" + name;
-        String defaultFieldName = fieldName + "$defaultValue";
-
-        op.addField(fieldName, propertyType);
-        op.addField(defaultFieldName, propertyType);
-
-        EnhanceUtils.createSimpleAccessor(op, fieldName, name, propertyType, location);
-        EnhanceUtils.createSimpleMutator(op, fieldName, name, propertyType, location);
-
-        // Copy the real attribute into the default attribute inside finish load
-        // (allowing a default value to be set inside finishLoad()).
-
-        op.extendMethodImplementation(
-                IComponent.class,
-                EnhanceUtils.FINISH_LOAD_SIGNATURE,
-                defaultFieldName + " = " + fieldName + ";");
-
-        // On page detach, restore the attribute to its default value.
-
-        op.extendMethodImplementation(
-                PageDetachListener.class,
-                EnhanceUtils.PAGE_DETACHED_SIGNATURE,
-                fieldName + " = " + defaultFieldName + ";");
-
-        // This is not all that necessary, but is proper.
-
-        op.claimProperty(name);
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AutowireWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AutowireWorker.java
deleted file mode 100755
index 390cbb4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AutowireWorker.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-package org.apache.tapestry.enhance;

-

-import org.apache.commons.logging.Log;

-import org.apache.hivemind.Location;

-import org.apache.hivemind.internal.Module;

-import org.apache.tapestry.spec.IComponentSpecification;

-

-import java.util.Iterator;

-import java.util.List;

-

-/**

- * An enhancement worker which automatically injects HiveMind services

- * into pages/components if exactly one service point exists which is

- * compatible with the read-only property's type.

- * 

- */

-public class AutowireWorker implements EnhancementWorker

-{

-    private final Log _log;

-

-    private final Module _module;

-

-    public AutowireWorker( Module module, Log log)

-    {

-        _module = module;

-        _log = log;

-    }

-

-    public void performEnhancement( EnhancementOperation op, IComponentSpecification spec )

-    {

-        final List propertyNames = op.findUnclaimedAbstractProperties();

-

-        for( Iterator i = propertyNames.iterator(); i.hasNext(); ) {

-            

-            String propertyName = ( String ) i.next();

-            

-            Class propertyType = op.getPropertyType( propertyName );

-            if( propertyType == null )

-                propertyType = Object.class;

-            

-            if (!op.canClaimAsReadOnlyProperty(propertyName))

-                continue;

-

-            if( _module.containsService( propertyType )) {

-                

-                final Object serviceProxy = _module.getService( propertyType );

-                final Location location = spec.getLocation();

-                

-                _log.debug( EnhanceMessages.autowiring( propertyName, spec, serviceProxy ) );

-                

-                final String fieldName = op.addInjectedField( "_$" + propertyName, propertyType, serviceProxy );

-                

-                EnhanceUtils.createSimpleAccessor( op, fieldName, propertyName, propertyType, location );

-                op.claimReadonlyProperty( propertyName );

-            }

-

-        }

-    }

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AutowireWorkerFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AutowireWorkerFactory.java
deleted file mode 100755
index 0405e11..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/AutowireWorkerFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-package org.apache.tapestry.enhance;

-

-import org.apache.hivemind.ServiceImplementationFactory;

-import org.apache.hivemind.ServiceImplementationFactoryParameters;

-

-/**

- * Constructs {@link AutowireWorker}s.  This is necessary because the

- * {@link AutowireWorker} must have its HiveMind module injected into it.

- * 

- * @author James Carman

- * @version 1.0

- */

-public class AutowireWorkerFactory implements ServiceImplementationFactory

-{

-    public Object createCoreServiceImplementation(

-            ServiceImplementationFactoryParameters params )

-    {

-        return new AutowireWorker( params.getInvokingModule(), params.getLog() );

-    }

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassFabImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassFabImpl.java
deleted file mode 100644
index ef90a79..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassFabImpl.java
+++ /dev/null
@@ -1,312 +0,0 @@
-// Copyright 2007 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-import javassist.CtConstructor;
-import javassist.CtField;
-import javassist.CtMethod;
-import javassist.NotFoundException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.service.ClassFab;
-import org.apache.hivemind.service.MethodFab;
-import org.apache.hivemind.service.MethodSignature;
-
-/**
- * Implementation replacement for hivemind {@link ClassFab} utiltity to get around some javassist
- * incompatibilties found with the latest 3.4 version of javassist.
- * 
- * @author jkuhnert
- */
-public class ClassFabImpl extends AbstractFab implements ClassFab
-{
-    /**
-     * Stores information about a constructor; used by toString().
-     * 
-     * @since 1.1
-     */
-
-    private class AddedConstructor
-    {
-        private Class[] _parameterTypes;
-
-        private Class[] _exceptionTypes;
-
-        private String _body;
-
-        AddedConstructor(Class[] parameterTypes, Class[] exceptionTypes, String body)
-        {
-            _parameterTypes = parameterTypes;
-            _exceptionTypes = exceptionTypes;
-            _body = body;
-        }
-
-        public String toString()
-        {
-            StringBuffer buffer = new StringBuffer();
-
-            buffer.append("public ");
-            buffer.append(getCtClass().getName());
-
-            buffer.append("(");
-
-            int count = size(_parameterTypes);
-            for(int i = 0; i < count; i++) {
-                if (i > 0) buffer.append(", ");
-
-                buffer.append(_parameterTypes[i].getName());
-
-                buffer.append(" $");
-                buffer.append(i + 1);
-            }
-
-            buffer.append(")");
-
-            count = size(_exceptionTypes);
-            for(int i = 0; i < count; i++) {
-                if (i == 0)
-                    buffer.append("\n  throws ");
-                else buffer.append(", ");
-
-                buffer.append(_exceptionTypes[i].getName());
-            }
-
-            buffer.append("\n");
-            buffer.append(_body);
-
-            buffer.append("\n");
-
-            return buffer.toString();
-        }
-
-        private int size(Object[] array)
-        {
-            return array == null ? 0 : array.length;
-        }
-    }
-
-    /**
-     * Map of {@link MethodFab}keyed on {@link MethodSignature}.
-     */
-    private Map _methods = new HashMap();
-
-    /**
-     * List of {@link AddedConstructor}.
-     * 
-     * @since 1.1
-     */
-
-    private List _constructors = new ArrayList();
-
-    public ClassFabImpl(CtClassSource source, CtClass ctClass)
-    {
-        super(source, ctClass);
-    }
-
-    /**
-     * Returns a representation of the fabricated class, including inheritance, fields,
-     * constructors, methods and method bodies.
-     * 
-     * @since 1.1
-     */
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("ClassFab[\n");
-
-        try {
-            buildClassAndInheritance(buffer);
-
-            buildFields(buffer);
-
-            buildConstructors(buffer);
-
-            buildMethods(buffer);
-
-        } catch (Exception ex) {
-            buffer.append(" *** ");
-            buffer.append(ex);
-        }
-
-        buffer.append("\n]");
-
-        return buffer.toString();
-    }
-
-    /** @since 1.1 */
-    private void buildMethods(StringBuffer buffer)
-    {
-        Iterator i = _methods.values().iterator();
-        while(i.hasNext()) {
-
-            MethodFab mf = (MethodFab) i.next();
-
-            buffer.append("\n");
-            buffer.append(mf);
-            buffer.append("\n");
-        }
-    }
-
-    /** @since 1.1 */
-    private void buildConstructors(StringBuffer buffer)
-    {
-        Iterator i = _constructors.iterator();
-
-        while(i.hasNext()) {
-            buffer.append("\n");
-            buffer.append(i.next());
-        }
-    }
-
-    /** @since 1.1 */
-    private void buildFields(StringBuffer buffer)
-        throws NotFoundException
-    {
-        CtField[] fields = getCtClass().getDeclaredFields();
-
-        for(int i = 0; i < fields.length; i++) {
-            buffer.append("\n");
-            buffer.append(modifiers(fields[i].getModifiers()));
-            buffer.append(" ");
-            buffer.append(fields[i].getType().getName());
-            buffer.append(" ");
-            buffer.append(fields[i].getName());
-            buffer.append(";\n");
-        }
-    }
-
-    /** @since 1.1 */
-    private void buildClassAndInheritance(StringBuffer buffer)
-        throws NotFoundException
-    {
-        buffer.append(modifiers(getCtClass().getModifiers()));
-        buffer.append(" class ");
-        buffer.append(getCtClass().getName());
-        buffer.append(" extends ");
-        buffer.append(getCtClass().getSuperclass().getName());
-        buffer.append("\n");
-
-        CtClass[] interfaces = getCtClass().getInterfaces();
-
-        if (interfaces.length > 0) {
-            buffer.append("  implements ");
-
-            for(int i = 0; i < interfaces.length; i++) {
-                if (i > 0) buffer.append(", ");
-
-                buffer.append(interfaces[i].getName());
-            }
-
-            buffer.append("\n");
-        }
-    }
-
-    private String modifiers(int modifiers)
-    {
-        return Modifier.toString(modifiers);
-    }
-
-    /**
-     * Returns the name of the class fabricated by this instance.
-     */
-    String getName()
-    {
-        return getCtClass().getName();
-    }
-
-    public void addField(String name, Class type)
-    {
-        CtClass ctType = convertClass(type);
-
-        try {
-            CtField field = new CtField(ctType, name, getCtClass());
-            field.setModifiers(Modifier.PRIVATE);
-
-            getCtClass().addField(field);
-        } catch (CannotCompileException ex) {
-            throw new ApplicationRuntimeException(EnhanceMessages.unableToAddField(name, getCtClass(), ex), ex);
-        }
-    }
-
-    public boolean containsMethod(MethodSignature ms)
-    {
-        return _methods.get(ms) != null;
-    }
-
-    public MethodFab addMethod(int modifiers, MethodSignature ms, String body)
-    {
-        if (_methods.get(ms) != null)
-            throw new ApplicationRuntimeException(EnhanceMessages.duplicateMethodInClass(ms, this));
-        
-        if (body.indexOf("isWrapperFor") > 0 || body.indexOf("unwrap") > 0)
-            return new MethodFabImpl(null, ms, null, "{ throw new UnsupportedOperationException(\"Method not implemented\"); }");
-        
-        CtClass ctReturnType = convertClass(ms.getReturnType());
-
-        CtClass[] ctParameters = convertClasses(ms.getParameterTypes());
-        CtClass[] ctExceptions = convertClasses(ms.getExceptionTypes());
-        
-        CtMethod method = new CtMethod(ctReturnType, ms.getName(), ctParameters, getCtClass());
-        
-        try {
-            method.setModifiers(modifiers);
-            method.setBody(body);
-            method.setExceptionTypes(ctExceptions);
-            
-            getCtClass().addMethod(method);
-        } catch (Exception ex) {
-            
-            throw new ApplicationRuntimeException(EnhanceMessages.unableToAddMethod(ms, getCtClass(), ex), ex);
-        }
-
-        // Return a MethodFab so the caller can add catches.
-
-        MethodFab result = new MethodFabImpl(getSource(), ms, method, body);
-
-        _methods.put(ms, result);
-
-        return result;
-    }
-    
-    public MethodFab getMethodFab(MethodSignature ms)
-    {
-        return (MethodFab) _methods.get(ms);
-    }
-
-    public void addConstructor(Class[] parameterTypes, Class[] exceptions, String body)
-    {
-        CtClass[] ctParameters = convertClasses(parameterTypes);
-        CtClass[] ctExceptions = convertClasses(exceptions);
-
-        try {
-            CtConstructor constructor = new CtConstructor(ctParameters, getCtClass());
-            constructor.setExceptionTypes(ctExceptions);
-            constructor.setBody(body);
-
-            getCtClass().addConstructor(constructor);
-
-            _constructors.add(new AddedConstructor(parameterTypes, exceptions, body));
-        } catch (Exception ex) {
-            throw new ApplicationRuntimeException(EnhanceMessages.unableToAddConstructor(getCtClass(), ex), ex);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassFactoryClassLoader.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassFactoryClassLoader.java
deleted file mode 100644
index f3be266..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassFactoryClassLoader.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * ClassLoader used to properly instantiate newly created classes.
- * 
- * @author Howard Lewis Ship / Essl Christian
- * @see org.apache.hivemind.service.impl.CtClassSource
- */
-class ClassFactoryClassLoader extends ClassLoader
-{
-    private List _loaders = new ArrayList();
-
-    /**
-     * Adds a delegate class loader to the list of delegate class loaders.
-     */
-    public synchronized void addDelegateLoader(ClassLoader loader)
-    {
-        _loaders.add(loader);
-    }
-
-    /**
-     * Searches each of the delegate class loaders for the given class.
-     */
-    protected synchronized Class findClass(String name) throws ClassNotFoundException
-    {
-        ClassNotFoundException cnfex = null;
-        
-        try
-        {
-            return super.findClass(name);
-        }
-        catch (ClassNotFoundException ex)
-        {
-            cnfex = ex;
-        }
-
-        int count = _loaders.size();
-        for (int i = 0; i < count; i++)
-        {
-            ClassLoader l = (ClassLoader) _loaders.get(i);
-
-            try
-            {
-                return l.loadClass(name);
-            }
-            catch (ClassNotFoundException ex)
-            {
-                //
-            }
-        }
-        
-        // Not found .. throw the first exception
-
-        throw cnfex;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassFactoryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassFactoryImpl.java
deleted file mode 100644
index a6d2a4c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassFactoryImpl.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import javassist.CtClass;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.service.ClassFab;
-import org.apache.hivemind.service.ClassFactory;
-import org.apache.hivemind.service.InterfaceFab;
-import org.apache.tapestry.event.ResetEventListener;
-
-/**
- * Implementation of the hivemind core {@link ClassFactory} service to get around some incompatibilities 
- * the current 1.1.1 implementation of hivemind has with the latest (3.4) version of javassist. 
- */
-public class ClassFactoryImpl implements ClassFactory, ResetEventListener {
-    
-    static final int EXPIRED_CLASS_COUNT = 120;
-    
-    /**
-     * ClassPool shared by all modules (all CtClassSource instances).
-     */
-    private HiveMindClassPool _pool = new HiveMindClassPool();
-
-    private CtClassSource _classSource = new CtClassSource(_pool);
-
-    int _classCounter = 0;
-
-    public ClassFab newClass(String name, Class superClass)
-    {
-        try
-        {
-            checkPoolExpiration();
-            
-            CtClass ctNewClass = _classSource.newClass(name, superClass);
-            
-            return new ClassFabImpl(_classSource, ctNewClass);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(EnhanceMessages.unableToCreateClass(name, superClass, ex), ex);
-        }
-    }
-
-    /** @since 1.1 */
-
-    public InterfaceFab newInterface(String name)
-    {
-        try
-        {
-            checkPoolExpiration();
-            
-            CtClass ctNewClass = _classSource.newInterface(name);
-
-            return new InterfaceFabImpl(_classSource, ctNewClass);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(EnhanceMessages.unableToCreateInterface(name, ex), ex);
-        }
-
-    }
-
-    public void resetEventDidOccur()
-    {
-        if (_classCounter >= EXPIRED_CLASS_COUNT)
-        {
-            _classCounter = 0;
-
-            _pool = new HiveMindClassPool();
-            _classSource.setPool(_pool);
-        }
-    }
-
-    void checkPoolExpiration()
-    {
-        _classCounter++;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassInspector.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassInspector.java
deleted file mode 100644
index 3078094..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassInspector.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Method;
-
-
-/**
- * Service that provides a common interface to other lower level reflection services
- * to provide a common set of functionality for reflection when using a 1.4 or >= 1.5 jre.
- */
-public interface ClassInspector
-{
-
-    /**
-     * Gets a compatible method signature for the specific generic {@link Method} object.
-     * 
-     * @param implementing
-     *          The class implmeneting the specific method.
-     * @param m
-     *      The method object to generate a signature for.
-     * @return A signature for the method.
-     */
-    MethodSignature getMethodSignature(Class implementing, Method m);
-    
-    /**
-     * Gets the first available method for the specified property. It may be a write or read method, but
-     * read will be preferred to write. 
-     * 
-     * @param type
-     *          The base class to introspect for the property accessor.
-     * @param propertyName
-     *          The name of the javabeans style property to look for. (ie "value" would be "getValue" )
-     *          
-     * @return A compatible method signature, or null if none could be found.
-     */
-    MethodSignature getPropertyAccessor(Class type, String propertyName);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassInspectorImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassInspectorImpl.java
deleted file mode 100644
index 198b8af..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClassInspectorImpl.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import java.beans.BeanInfo;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-
-
-/**
- * Implemenation of {@link ClassInspector} that is compatible with 
- * 1.4 jres.
- */
-public class ClassInspectorImpl implements ClassInspector
-{
-
-    /**
-     * {@inheritDoc}
-     */
-    public MethodSignature getMethodSignature(Class implementing, Method m)
-    {
-        return new MethodSignatureImpl(m);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public MethodSignature getPropertyAccessor(Class type, String propertyName)
-    {
-        try {
-            BeanInfo info = Introspector.getBeanInfo(type);
-            PropertyDescriptor[] props = info.getPropertyDescriptors();
-            
-            for (int i=0; i < props.length; i++) {
-                
-                if (!propertyName.equals(props[i].getName())) {
-                    continue;
-                }
-                
-                return new MethodSignatureImpl(props[i].getReadMethod() != null ? props[i].getReadMethod() : props[i].getWriteMethod());
-            } 
-            
-        } catch (Throwable t) {
-            
-            throw new ApplicationRuntimeException("Error reading property " + propertyName + " from base class : " + type, t);
-        }
-        
-        return null;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClientIdPropertyWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClientIdPropertyWorker.java
deleted file mode 100644
index 2cc9009..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ClientIdPropertyWorker.java
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.lang.reflect.Modifier;
-import java.util.Iterator;
-
-
-/**
- * Enhances the {@link org.apache.tapestry.IComponent#getClientId()} property.
- */
-public class ClientIdPropertyWorker implements EnhancementWorker
-{
-    private static final String PROPERTY_NAME = "clientId";
-    
-    private ErrorLog _errorLog;
-    
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
-    {
-        Location location = spec.getLocation();
-        
-        Iterator i = op.findUnclaimedAbstractProperties().iterator();
-
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-            
-            if (name.equals(PROPERTY_NAME)) {
-                
-                try
-                {
-                    createProperty(op, name, location);
-                }
-                catch (Exception ex)
-                {
-                    _errorLog.error(
-                            EnhanceMessages.errorAddingProperty(name, op.getBaseClass(), ex),
-                            location,
-                            ex);
-                }
-                
-                break;
-            }
-        }
-    }
-
-    private void createProperty(EnhancementOperation op, String name, Location location)
-    {
-        // This won't be null because its always for existing properties.
-
-        Class propertyType = op.getPropertyType(name);
-
-        String fieldName = "_$" + name;
-        String defaultFieldName = fieldName + "$defaultValue";
-
-        op.addField(fieldName, propertyType);
-        op.addField(defaultFieldName, propertyType);
-        
-        String methodName = op.getAccessorMethodName(name);
-        
-        // Build special getter logic 
-        // if the client id is null "peek" at the next possible unique id
-        
-        StringBuffer str = new StringBuffer();
-        
-        str.append(" if(").append(fieldName).append(" == null){")
-        .append(" if (getPage() == null) { return null; }")
-        .append(" String tempId = getSpecifiedId();")
-        .append(" if (tempId == null) { return null; }")
-        .append(" return getPage().getRequestCycle().peekUniqueId(org.apache.tapestry.TapestryUtils#convertTapestryIdToNMToken(tempId));")
-        .append("} else { ");
-        
-        // else return the existing clientId
-        
-        str.append("return ").append(fieldName).append(";");
-        str.append("}");
-        
-        op.addMethod(
-                Modifier.PUBLIC,
-                new MethodSignature(propertyType, methodName, null, null),
-                str.toString(),
-                location);
-        
-        EnhanceUtils.createSimpleMutator(op, fieldName, name, propertyType, location);
-        
-        // Copy the real attribute into the default attribute inside finish load
-        // (allowing a default value to be set inside finishLoad()).
-
-        op.extendMethodImplementation(
-                IComponent.class,
-                EnhanceUtils.FINISH_LOAD_SIGNATURE,
-                defaultFieldName + " = " + fieldName + ";");
-
-        // On page detach, restore the attribute to its default value.
-
-        op.extendMethodImplementation(
-                PageDetachListener.class,
-                EnhanceUtils.PAGE_DETACHED_SIGNATURE,
-                fieldName + " = " + defaultFieldName + ";");
-
-        // This is not all that necessary, but is proper.
-
-        op.claimProperty(name);
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ComponentConstructorImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ComponentConstructorImpl.java
deleted file mode 100644
index e934027..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ComponentConstructorImpl.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Constructor;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.services.ComponentConstructor;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ComponentConstructorImpl implements ComponentConstructor
-{
-    private Location _location;
-
-    private Constructor _constructor;
-
-    private Object[] _parameters;
-
-    private String _classFabString;
-
-    /**
-     * News instance of this class.
-     * 
-     * @param constructor
-     *            the constructor method to invoke
-     * @param parameters
-     *            the parameters to pass to the constructor. These are retained, not copied.
-     * @param classFabString
-     *            a string representing the generated class information, used for exception
-     *            reporting
-     * @param location
-     *            the location, used for exception reporting
-     */
-
-    public ComponentConstructorImpl(Constructor constructor, Object[] parameters,
-            String classFabString, Location location)
-    {
-        Defense.notNull(constructor, "constructor");
-        _constructor = constructor;
-        _parameters = parameters;
-        _classFabString = classFabString;
-        _location = location;
-    }
-
-    public Class getComponentClass()
-    {
-        return _constructor.getDeclaringClass();
-    }
-
-    public Object newInstance()
-    {
-        try
-        {
-            Object result = _constructor.newInstance(_parameters);
-
-            // Unlikely to generate an error if we can get through it once, so it's
-            // safe to release the big classFabString
-
-            _classFabString = null;
-
-            return result;
-        }
-        catch (Throwable ex)
-        {
-            throw new ApplicationRuntimeException(EnhanceMessages.instantiationFailure(
-                    _constructor,
-                    _parameters,
-                    _classFabString,
-                    ex), null, _location, ex);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/CtClassSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/CtClassSource.java
deleted file mode 100644
index d597479..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/CtClassSource.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import javassist.CtClass;
-import javassist.NotFoundException;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.service.ClassFabUtils;
-
-/**
- * Wrapper around Javassist's {@link javassist.ClassPool} and our own
- * {@link org.apache.hivemind.service.impl.ClassFactoryClassLoader} that manages the creation of new
- * instance of {@link javassist.CtClass} and converts finished CtClass's into instantiable Classes.
- * 
- * @author Howard Lewis Ship
- */
-public class CtClassSource
-{
-    private HiveMindClassPool _pool;
-    
-    public CtClassSource(HiveMindClassPool pool)
-    {
-        _pool = pool;
-    }
-
-    public CtClass getCtClass(Class searchClass)
-    {
-        ClassLoader loader = searchClass.getClassLoader();
-
-        // Add the class loader for the searchClass to the class pool and
-        // delegating class loader if needed.
-
-        _pool.appendClassLoader(loader);
-
-        String name = ClassFabUtils.getJavaClassName(searchClass);
-
-        try
-        {
-            return _pool.get(name);
-        }
-        catch (NotFoundException ex)
-        {
-            throw new ApplicationRuntimeException(EnhanceMessages.unableToLookupClass(name, ex), ex);
-        }
-    }
-
-    public CtClass newClass(String name, Class superClass)
-    {
-        CtClass ctSuperClass = getCtClass(superClass);
-
-        return _pool.makeClass(name, ctSuperClass);
-    }
-
-    /**
-     * Creates a new, empty interace, with the given name.
-     * 
-     * @since 1.1
-     */
-
-    public CtClass newInterface(String name)
-    {
-        return _pool.makeInterface(name);
-    }
-
-    public Class createClass(CtClass ctClass)
-    {
-        return createClass(ctClass, false);
-    }
-    
-    public Class createClass(CtClass ctClass, boolean detach)
-    {
-        try
-        {
-            return _pool.toClass(ctClass, detach);
-        }
-        catch (Throwable ex)
-        {
-            throw new ApplicationRuntimeException(EnhanceMessages.unableToWriteClass(ctClass, ex), ex);
-        }
-    }
-    
-    public void setPool(HiveMindClassPool pool)
-    {
-        _pool = pool;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/DeferredScript.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/DeferredScript.java
deleted file mode 100644
index 41407df..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/DeferredScript.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.tapestry.IScript;
-
-/**
- * A wrapper around {@link org.apache.tapestry.engine.IScriptSource} that will
- * obtain an {@link org.apache.tapestry.IScript} instance as needed.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface DeferredScript
-{
-
-    IScript getScript();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/DeferredScriptImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/DeferredScriptImpl.java
deleted file mode 100644
index 1bf3965..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/DeferredScriptImpl.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.engine.IScriptSource;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DeferredScriptImpl implements DeferredScript, Locatable
-{
-    final Resource _scriptResource;
-
-    final IScriptSource _scriptSource;
-
-    final Location _location;
-
-    public DeferredScriptImpl(Resource resource, IScriptSource source, Location location)
-    {
-        Defense.notNull(resource, "resource");
-        Defense.notNull(source, "source");
-
-        _scriptResource = resource;
-        _scriptSource = source;
-        _location = location;
-    }
-
-    public IScript getScript()
-    {
-        // No real reason to cache the script here, because a) they are rarely used
-        // and b) the IScriptSource caches.
-
-        try
-        {
-            return _scriptSource.getScript(_scriptResource);
-        }
-        catch (Exception ex)
-        {
-            // Decorate the thrown exception with the correct location.
-
-            throw new ApplicationRuntimeException(ex.getMessage(), _location, ex);
-        }
-    }
-
-    public Location getLocation()
-    {
-        return _location;
-    }
-
-    public String toString()
-    {
-        return "DeferredScriptImpl[" + _scriptResource + "]";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/DispatchToInjectWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/DispatchToInjectWorker.java
deleted file mode 100644
index 7535e0f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/DispatchToInjectWorker.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.InjectSpecification;
-
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Iterates over the {@link org.apache.tapestry.spec.InjectSpecification}s and locates and
- * delegates to a {@link org.apache.tapestry.enhance.InjectEnhancementWorker} for each one.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DispatchToInjectWorker implements EnhancementWorker
-{
-    private ErrorLog _errorLog;
-
-    private Map _injectWorkers;
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
-    {
-        Iterator i = spec.getInjectSpecifications().iterator();
-
-        while (i.hasNext())
-        {
-            InjectSpecification is = (InjectSpecification) i.next();
-
-            invokeWorker(op, is);
-        }
-    }
-
-    private void invokeWorker(EnhancementOperation op, InjectSpecification spec)
-    {
-        try
-        {
-            InjectEnhancementWorker worker = (InjectEnhancementWorker) _injectWorkers.get(spec.getType());
-
-            if (worker == null)
-            {
-                _errorLog.error(EnhanceMessages.unknownInjectType(spec.getProperty(), spec.getType()), spec.getLocation(), null);
-                return;
-            }
-
-            worker.performEnhancement(op, spec);
-        }
-        catch (Exception ex)
-        {
-            _errorLog.error(EnhanceMessages.errorAddingProperty(spec.getProperty(), op.getBaseClass(), ex),
-                            spec.getLocation(), ex);
-        }
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-
-    public void setInjectWorkers(Map injectWorkers)
-    {
-        _injectWorkers = injectWorkers;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhanceMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhanceMessages.java
deleted file mode 100644
index b6b534b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhanceMessages.java
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-
-import javassist.CtClass;
-import javassist.CtMethod;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.hivemind.service.ClassFabUtils;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Messages for this package.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-final class EnhanceMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(EnhanceMessages.class);
-
-    /* defeat instantiation */
-    private EnhanceMessages() { }
-    
-    static String noImplForAbstractMethod(Method method, Class declareClass, Class baseClass,
-            Class enhancedClass)
-    {
-        return _formatter.format("no-impl-for-abstract-method", new Object[]
-        { method, declareClass.getName(), baseClass.getName(), enhancedClass.getName() });
-    }
-
-    static String unimplementedInterfaceMethod(Method method, Class baseClass, Class enhancedClass)
-    {
-        return _formatter.format(
-                "unimplemented-interface-method",
-                method,
-                baseClass.getName(),
-                enhancedClass.getName());
-    }
-
-    static String unabelToIntrospectClass(Class targetClass, Throwable cause)
-    {
-        return _formatter.format("unable-to-introspect-class", targetClass.getName(), cause);
-    }
-
-    static String propertyTypeMismatch(Class componentClass, String propertyName,
-            Class actualPropertyType, Class expectedPropertyType)
-    {
-        return _formatter.format("property-type-mismatch", new Object[]
-        { componentClass.getName(), propertyName,
-                ClassFabUtils.getJavaClassName(actualPropertyType),
-                ClassFabUtils.getJavaClassName(expectedPropertyType) });
-    }
-
-    static String errorAddingProperty(String propertyName, Class componentClass, Throwable cause)
-    {
-        return _formatter.format(
-                "error-adding-property",
-                propertyName,
-                componentClass.getName(),
-                cause);
-    }
-
-    static String claimedProperty(String propertyName)
-    {
-        return _formatter.format("claimed-property", propertyName);
-    }
-
-    static String instantiationFailure(Constructor c, Object[] parameters, String classFab,
-            Throwable cause)
-    {
-        int count = Tapestry.size(parameters);
-        StringBuffer buffer = new StringBuffer("[");
-        for (int i = 0; i < count; i++)
-        {
-            if (i > 0)
-                buffer.append(", ");
-            buffer.append(parameters[i]);
-        }
-
-        buffer.append("]");
-
-        return _formatter.format("instantiation-failure", new Object[]
-        { c.getDeclaringClass().getName(), c, buffer.toString(), classFab, cause });
-    }
-
-    static String locatedValueIsNull(String objectReference)
-    {
-        return _formatter.format("located-value-is-null", objectReference);
-    }
-
-    static String incompatibleInjectType(String locator, Object value, Class propertyType)
-    {
-        return _formatter.format("incompatible-inject-type", locator, value, ClassFabUtils
-                .getJavaClassName(propertyType));
-    }
-
-    static String initialValueForProperty(String propertyName)
-    {
-        return _formatter.format("initial-value-for-property", propertyName);
-    }
-
-    static String unknownInjectType(String propertyName, String injectType)
-    {
-        return _formatter.format("unknown-inject-type", propertyName, injectType);
-    }
-
-    static String wrongTypeForProperty(String propertyName, Class propertyType, Class requiredType)
-    {
-        return _formatter.format("wrong-type-for-property", propertyName, ClassFabUtils
-                .getJavaClassName(propertyType), ClassFabUtils.getJavaClassName(requiredType));
-    }
-
-    static String wrongTypeForPageInjection(String propertyName, Class propertyType)
-    {
-        return _formatter.format("wrong-type-for-page-injection", propertyName, ClassFabUtils
-                .getJavaClassName(propertyType));
-    }
-
-    static String incompatiblePropertyType(String propertyName, Class propertyType,
-            Class expectedType)
-    {
-        return _formatter.format("incompatible-property-type", propertyName, ClassFabUtils
-                .getJavaClassName(propertyType), ClassFabUtils.getJavaClassName(expectedType));
-    }
-
-    static String classEnhancementFailure(Class baseClass, Throwable cause)
-    {
-        return _formatter.format("class-enhancement-failure", ClassFabUtils
-                .getJavaClassName(baseClass), cause);
-    }
-
-    static String methodConflict(MethodSignature sig, Location existing)
-    {
-        return _formatter.format("method-conflict", sig, existing);
-    }
-
-    static String readonlyProperty(String propertyName, Method writeMethod)
-    {
-        return _formatter.format("readonly-property", propertyName, writeMethod);
-    }
-
-    static String mustBeBoolean(String propertyName)
-    {
-        return _formatter.format("must-be-boolean", propertyName);
-    }
-    
-    static String autowiring( String propertyName, IComponentSpecification spec, Object proxy )
-    {
-        return _formatter.format( "autowiring", propertyName, spec.getDescription(), proxy );
-    }
-    
-    static String unableToCreateClass(String name, Class superClass, Throwable cause)
-    {
-        return _formatter.format("unable-to-create-class", name, superClass.getName(), cause);
-    }
-    
-    static String unableToCreateInterface(String name, Exception cause)
-    {
-        return _formatter.format("unable-to-create-interface", name, cause);
-    }
-    
-    static String unableToAddField(String fieldName, CtClass ctClass, Throwable cause)
-    {
-        return _formatter.format("unable-to-add-field", fieldName, ctClass.getName(), cause);
-    }
-    
-    static String unableToLookupClass(String name, Throwable cause)
-    {
-        return _formatter.format("unable-to-lookup", name, cause);
-    }
-    
-    static String unableToWriteClass(CtClass ctClass, Throwable cause)
-    {
-        return _formatter.format("unable-to-write-class", ctClass.getName(), cause);
-    }
-    
-    static String duplicateMethodInClass(MethodSignature ms, ClassFabImpl cf)
-    {
-        return _formatter.format("duplicate-method-in-class", ms, cf.getName());
-    }
-    
-    static String unableToAddMethod(MethodSignature methodSignature, CtClass ctClass,
-            Throwable cause)
-    {
-        return _formatter.format("unable-to-add-method", methodSignature, ctClass.getName(), cause);
-    }
-    
-    static String unableToAddConstructor(CtClass ctClass, Throwable cause)
-    {
-        return _formatter.format("unable-to-add-constructor", ctClass.getName(), cause);
-    }
-    
-    static String unableToAddCatch(Class exceptionClass, CtMethod method, Throwable cause)
-    {
-        return _formatter.format("unable-to-add-catch", exceptionClass.getName(), method
-                .getDeclaringClass().getName(), cause);
-    }
-    
-    static String unableToExtendMethod(MethodSignature ms, String className, Throwable cause)
-    {
-        return _formatter.format("unable-to-extend-method", ms, className, cause);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhanceStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhanceStrings.properties
deleted file mode 100644
index e60f5c5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhanceStrings.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-no-impl-for-abstract-method=Method ''{0}'' (declared in class {1}) has no implementation in class {2} (or enhanced subclass {3}).
-unimplemented-interface-method=Method ''{0}'' has no implementation in class {1} (or enhanced subclass {2}).
-property-type-mismatch=Unable to enhance class {0} because it contains property {1} of type {2}, not the expected type {3}.
-unable-to-introspect-class=Unable to introspect properties of class {0}: {1}
-error-adding-property=Error adding property {0} to class {1}: {2}
-claimed-property=Property {0} has already been claimed by a different enhancement worker.
-instantiation-failure=Unable to instantiate instance of class {0} using constructor {1}, parameters {2} and enhancements {3}: {4}
-
-located-value-is-null=Value obtained using locator ''{0}'' is null.
-incompatible-inject-type=The value obtained using locator ''{0}'' ({1}) is not compatible with the existing property (of type {2}).
-initial-value-for-property=initial value for property {0}
-unknown-inject-type=Unable to create injected property {0}: injection type ''{1}'' is not defined.
-wrong-type-for-property=Property {0} is type {1}, which is not compatible with {2}.
-wrong-type-for-page-injection=Property {0} is type {1}, which is not compatible with injection. The property type should be Object, IPage, or a specific page class.
-incompatible-property-type=Property {0} is type {1}, which is not compatible with the expected type, {2}.
-class-enhancement-failure=Failure enhancing class {0}: {1}
-method-conflict=A new implementation of method ''{0}'' conflicts with an existing implementation (at {1}).
-readonly-property=Property {0} should be read-only; remove method {1}.
-must-be-boolean=Property {0} must be type boolean for this type of injection.
-autowiring=Autowiring property {0} for component {1} to {2}.
-
-unable-to-create-class=Unable to create class {0} as subclass of {1}: {2}
-unable-to-create-interface=Unable to create interface {0}: {1}
-unable-to-add-field=Unable to add field {0} to class {1}: {2}
-unable-to-add-method=Unable to add method {0} to class {1}: {2}
-unable-to-add-constructor=Unable to add constructor to class {0}: {1}
-duplicate-method-in-class=Attempt to redefine method {0} of class {1}.
-unable-to-add-catch=Unable to add catch block for exception {0} to class {1}: {2}
-unable-to-extend-method=Unable to extend method {0} of class {1}: {2}
-unable-to-lookup=Unable to lookup {0}: {1}
-unable-to-write-class=Unable to create class {0}: {1}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhanceUtils.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhanceUtils.java
deleted file mode 100644
index de31a27..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhanceUtils.java
+++ /dev/null
@@ -1,366 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.ClassFabUtils;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Convienience methods needed by various parts of the enhancement subsystem.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class EnhanceUtils
-{
-    public static final MethodSignature FINISH_LOAD_SIGNATURE = new MethodSignature(void.class,
-            "finishLoad", new Class[]
-            { IRequestCycle.class, IPageLoader.class, IComponentSpecification.class }, null);
-
-    public static final MethodSignature PAGE_DETACHED_SIGNATURE = new MethodSignature(void.class,
-            "pageDetached", new Class[]
-            { PageEvent.class }, null);
-
-    public static final MethodSignature CLEANUP_AFTER_RENDER_SIGNATURE = new MethodSignature(
-            void.class, "cleanupAfterRender", new Class[]
-            { IRequestCycle.class }, null);
-    
-    /**
-     * Used to unwrap primitive types inside the accessor method. In each case, the binding is in a
-     * variable named "binding", and {0} will be the actual type of the property. The Map is keyed
-     * on the primtive type.
-     */
-
-    private static Map _unwrappers = new HashMap();
-
-    static
-    {
-        _unwrappers.put(boolean.class, "toBoolean");
-        _unwrappers.put(byte.class, "toByte");
-        _unwrappers.put(char.class, "toChar");
-        _unwrappers.put(short.class, "toShort");
-        _unwrappers.put(int.class, "toInt");
-        _unwrappers.put(long.class, "toLong");
-        _unwrappers.put(float.class, "toFloat");
-        _unwrappers.put(double.class, "toDouble");
-    }
-    
-    /* defeat instantiation */
-    private EnhanceUtils() { }
-    
-    public static String createMutatorMethodName(String propertyName)
-    {
-        return "set" + upcase(propertyName);
-    }
-
-    public static String createAccessorMethodName(String propertyName)
-    {
-        return "get" + upcase(propertyName);
-    }
-
-    private static String upcase(String name)
-    {
-        return name.substring(0, 1).toUpperCase() + name.substring(1);
-    }
-
-    public static void createSimpleAccessor(EnhancementOperation op, String fieldName,
-            String propertyName, Class propertyType, Location location)
-    {
-        String methodName = op.getAccessorMethodName(propertyName);
-        
-        op.addMethod( Modifier.PUBLIC, new MethodSignature(propertyType, methodName, null, null),
-                "return " + fieldName + ";", location);
-    }
-
-    public static void createSimpleMutator(EnhancementOperation op, String fieldName,
-            String propertyName, Class propertyType, Location location)
-    {
-        String methodName = createMutatorMethodName(propertyName);
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, methodName, 
-                new Class[] { propertyType }, null), fieldName + " = $1;", location);
-    }
-
-    /**
-     * Returns the correct class for a property to be enhanced into a class. If a type name is
-     * non-null, then it is converted to a Class. If the class being enhanced defines a property,
-     * then the type must be an exact match (this is largely a holdover from Tapestry 3.0, where the
-     * type had to be provided in the specification). If the type name is null, then the value
-     * returned is the type of the existing property (if such a property exists), or
-     * java.lang.Object is no property exists.
-     * 
-     * @param op
-     *            the enhancement operation, which provides most of this logic
-     * @param propertyName
-     *            the name of the property (the property may or may not exist)
-     * @param definedTypeName
-     *            the type indicated for the property, may be null to make the return value match
-     *            the type of an existing property.
-     */
-
-    public static Class extractPropertyType(EnhancementOperation op, String propertyName, String definedTypeName)
-    {
-        return extractPropertyType(op, propertyName, definedTypeName, false);
-    }
-    
-    /**
-     * Does the same thing as {@link #extractPropertyType(EnhancementOperation, String, String)}, with the added
-     * knowledge of knowing whether or not the type is generic and thus skips over type validation operations
-     * as generic type checking can't be safely done in this jre 1.4 compatible section of the codebase.
-     * 
-     * @param op
-     *            the enhancement operation, which provides most of this logic
-     * @param propertyName
-     *            the name of the property (the property may or may not exist)
-     * @param definedTypeName
-     *            the type indicated for the property, may be null to make the return value match
-     *            the type of an existing property.
-     * @param isGeneric 
-     *          Whether or not the type was previously discoverd and found to be generic, if true 
-     *          type validation is skipped.
-     */
-    
-    public static Class extractPropertyType(EnhancementOperation op, String propertyName, 
-            String definedTypeName, boolean isGeneric)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(propertyName, "propertyName");
-        
-        if (definedTypeName != null)
-        {
-            Class propertyType = op.convertTypeName(definedTypeName);
-            
-            if (!isGeneric)
-                op.validateProperty(propertyName, propertyType);
-            
-            return propertyType;
-        }
-        
-        Class propertyType = op.getPropertyType(propertyName);
-
-        return propertyType == null ? Object.class : propertyType;
-    }
-
-    // The following methods are actually invoked from fabricated methods in
-    // enhanced classes.
-
-    public static boolean toBoolean(IBinding binding)
-    {
-        Boolean wrapped = (Boolean) binding.getObject(Boolean.class);
-
-        return wrapped == null ? false : wrapped.booleanValue();
-    }
-
-    public static byte toByte(IBinding binding)
-    {
-        Byte wrapped = (Byte) binding.getObject(Byte.class);
-
-        return wrapped == null ? 0 : wrapped.byteValue();
-    }
-
-    public static char toChar(IBinding binding)
-    {
-        Character wrapped = (Character) binding.getObject(Character.class);
-
-        return wrapped == null ? 0 : wrapped.charValue();
-    }
-
-    public static short toShort(IBinding binding)
-    {
-        Short wrapped = (Short) binding.getObject(Short.class);
-
-        return wrapped == null ? 0 : wrapped.shortValue();
-    }
-
-    public static int toInt(IBinding binding)
-    {
-        Integer wrapped = (Integer) binding.getObject(Integer.class);
-
-        return wrapped == null ? 0 : wrapped.intValue();
-    }
-
-    public static long toLong(IBinding binding)
-    {
-        Long wrapped = (Long) binding.getObject(Long.class);
-
-        return wrapped == null ? 0 : wrapped.longValue();
-    }
-
-    public static float toFloat(IBinding binding)
-    {
-        Float wrapped = (Float) binding.getObject(Float.class);
-
-        return wrapped == null ? 0.0f : wrapped.floatValue();
-    }
-
-    public static double toDouble(IBinding binding)
-    {
-        Double wrapped = (Double) binding.getObject(Double.class);
-
-        return wrapped == null ? 0.0d : wrapped.doubleValue();
-    }
-
-    /**
-     * Returns the name of the static method, within EnhanceUtils, used to unwrap a binding to a
-     * primitive type. Returns null if the type is not a primitve.
-     */
-
-    public static String getUnwrapperMethodName(Class type)
-    {
-        Defense.notNull(type, "type");
-
-        return (String) _unwrappers.get(type);
-    }
-
-    /**
-     * Builds a Javassist expression for unwrapping a binding's value to a type (either primitive or
-     * a class type).
-     * 
-     * @param op
-     *            the enhancement operation
-     * @param bindingName
-     *            the name of the field (or an expression) that will evaluate to the binding from
-     *            which a value will be extracted.
-     * @param valueType
-     *            the type of value to be extracted from the binding.
-     */
-
-    public static String createUnwrapExpression(EnhancementOperation op, String bindingName, Class valueType)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(bindingName, "bindingName");
-        Defense.notNull(valueType, "valueType");
-
-        StringBuffer buffer = new StringBuffer();
-
-        String unwrapper = getUnwrapperMethodName(valueType);
-
-        if (unwrapper == null)
-        {
-            String propertyTypeRef = op.getClassReference(valueType);
-
-            buffer.append("(");
-            buffer.append(ClassFabUtils.getJavaClassName(valueType));
-            buffer.append(") ");
-            buffer.append(bindingName);
-            buffer.append(".getObject(");
-            buffer.append(propertyTypeRef);
-            buffer.append(")");
-        }
-        else
-        {
-            buffer.append(EnhanceUtils.class.getName());
-            buffer.append(".");
-            buffer.append(unwrapper);
-            buffer.append("(");
-            buffer.append(bindingName);
-            buffer.append(")");
-        }
-
-        return buffer.toString();
-    }
-    
-    /**
-     * Verifies that a property type can be assigned a particular type of value.
-     * 
-     * @param op
-     *            the enhancement operation
-     * @param propertyName
-     *            the name of the property to check
-     * @param requiredType
-     *            the type of value that will be assigned to the property
-     * @return the property type, or java.lang.Object if the class does not define the property
-     */
-    public static Class verifyPropertyType(EnhancementOperation op, String propertyName,
-            Class requiredType)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(propertyName, "propertyName");
-        Defense.notNull(requiredType, "requiredType");
-
-        Class propertyType = op.getPropertyType(propertyName);
-
-        // When the property type is not defined, it will end up being
-        if (propertyType == null)
-            return Object.class;
-
-        // Make sure that an object of the required type is assignable
-        // to the property type.
-
-        if (!propertyType.isAssignableFrom(requiredType))
-            throw new ApplicationRuntimeException(EnhanceMessages.wrongTypeForProperty(
-                    propertyName,
-                    propertyType,
-                    requiredType));
-
-        return propertyType;
-    }
-    
-    /**
-     * Determines whether or not the specified class type is elligable for proxying. This generally
-     * means it needs a default constructor, can't be final / primitive / array. 
-     * 
-     * @param type 
-     *          The class to check for proxying elligibility.
-     * @return True if the type can be proxied, false otherwise.
-     */
-    public static boolean canProxyPropertyType(Class type)
-    {
-        // if it's already enhanced it must be by someone else
-        
-        if (type.isInterface())
-            return true;
-        
-        if (!hasEmptyConstructor(type))
-            return false;
-        
-        if (type.isArray() || type.isPrimitive() || Modifier.isFinal(type.getModifiers()) || Object.class == type)
-            return false;
-        
-        return true;
-    }
-    
-    /**
-     * Checks if the specified class type has an empty constructor.
-     * 
-     * @param type
-     *          The class to check, can't be null.
-     *          
-     * @return True if a no args constructor exists.
-     */
-    public static boolean hasEmptyConstructor(Class type)
-    {
-        Defense.notNull(type, "type");
-        
-        try {
-            
-            return type.getConstructor(null) != null;
-        } catch (Throwable t) {
-            return false;
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancedClassValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancedClassValidator.java
deleted file mode 100644
index e15536c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancedClassValidator.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * @author Howard M. Lewis Ship
- */
-public interface EnhancedClassValidator
-{
-
-    void validate(Class baseClass, Class enhancedClass, IComponentSpecification specification);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancedClassValidatorImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancedClassValidatorImpl.java
deleted file mode 100644
index 19eed10..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancedClassValidatorImpl.java
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Validates that an enhanced class is correct; checks that all inherited
- * abstract methods are, in fact, implemented in the class.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class EnhancedClassValidatorImpl implements EnhancedClassValidator
-{
-
-    private ErrorLog _errorLog;
-
-    private ClassInspector _inspector;
-    
-    public void validate(Class baseClass, Class enhancedClass, IComponentSpecification specification)
-    {
-        // Set of MethodSignatures for methods that have a non-abstract
-        // implementation
-        // The Set is built working from the deepest subclass up to (and
-        // including) java.lang.Object
-
-        Set implementedMethods = new HashSet();
-        // Key is MethodSignature, value is Method
-        // Tracks which methods come from interfaces
-        Map interfaceMethods = new HashMap();
-
-        Location location = specification.getLocation();
-
-        Class current = enhancedClass;
-
-        while(true)
-        {
-            addInterfaceMethods(current, interfaceMethods);
-
-            // Inside Eclipse, for abstract classes, getDeclaredMethods() does
-            // NOT report methods
-            // inherited from interfaces. For Sun JDK and abstract classes,
-            // getDeclaredMethods()
-            // DOES report interface methods
-            // (as if they were declared by the class itself). This code is
-            // needlessly complex so
-            // that the checks work in both
-            // situations. Basically, I think Eclipse is right and Sun JDK is
-            // wrong and we're using
-            // the interfaceMethods map as a filter to ignore methods that Sun
-            // JDK is attributing
-            // to the class.
-
-            Method[] methods = current.getDeclaredMethods();
-
-            for(int i = 0; i < methods.length; i++)
-            {
-                Method m = methods[i];
-
-                MethodSignature s = _inspector.getMethodSignature(current, m);
-
-                boolean isAbstract = Modifier.isAbstract(m.getModifiers());
-                
-                if (isAbstract)
-                {
-                    if (interfaceMethods.containsKey(s)) 
-                        continue;
-
-                    // If a superclass defines an abstract method that a
-                    // subclass implements, then
-                    // all's OK.
-
-                    if (implementedMethods.contains(s)) 
-                        continue;
-                    
-                    _errorLog.error(EnhanceMessages.noImplForAbstractMethod(m, current, baseClass, enhancedClass), location, null);
-                }
-
-                implementedMethods.add(s);
-            }
-
-            current = current.getSuperclass();
-
-            // No need to check Object.class; it is concrete and doesn't
-            // implement any interfaces,
-            // or provide any methods
-            // that might be declared in an interface.
-
-            if (current == null || current == Object.class) 
-                break;
-        }
-
-        Iterator i = interfaceMethods.entrySet().iterator();
-        while(i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            MethodSignature sig = (MethodSignature) entry.getKey();
-
-            if (implementedMethods.contains(sig)) 
-                continue;
-
-            Method method = (Method) entry.getValue();
-
-            _errorLog.error(EnhanceMessages.unimplementedInterfaceMethod(method, baseClass, enhancedClass), location, null);
-        }
-
-    }
-
-    private void addInterfaceMethods(Class current, Map interfaceMethods)
-    {
-        Class[] interfaces = current.getInterfaces();
-
-        for(int i = 0; i < interfaces.length; i++)
-            addMethodsFromInterface(interfaces[i], interfaceMethods);
-    }
-
-    private void addMethodsFromInterface(Class interfaceClass, Map interfaceMethods)
-    {
-        Method[] methods = interfaceClass.getMethods();
-
-        for(int i = 0; i < methods.length; i++)
-        {
-            MethodSignature sig = _inspector.getMethodSignature(interfaceClass, methods[i]);
-            
-            if (interfaceMethods.containsKey(sig)) 
-                continue;
-            
-            interfaceMethods.put(sig, methods[i]);
-        }
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-    
-    public void setClassInspector(ClassInspector inspector)
-    {
-        _inspector = inspector;
-    }
-    
-    public void setClassInspectors(List inspectors)
-    {
-        _inspector = (ClassInspector)inspectors.get(0);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancementOperation.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancementOperation.java
deleted file mode 100644
index 97450d4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancementOperation.java
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.util.List;
-
-/**
- * A process object representing enhancements to a component class. The
- * operation is passed to {@link org.apache.tapestry.enhance.EnhancementWorker}objects
- * that perform enhancements.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface EnhancementOperation
-{
-
-    /**
-     * Claims a property. Most enhancements are concerned with adding
-     * properties. Some enhancement workers exist to fill in defaults, and they
-     * need to know what properties have already been spoken for by eariler
-     * enhancement works.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the property was previously claimed
-     */
-
-    void claimProperty(String propertyName);
-
-    /**
-     * Claims a property as read-only. This will check to see if the property
-     * has an abstract setter method.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the property was previously claimed, or if the property
-     *             includes an accessor method.
-     */
-
-    void claimReadonlyProperty(String propertyName);
-    
-    /**
-     * Checks to see if the specified property can be claimed as read only. 
-     * 
-     * @param propertyName
-     *          The property to check.
-     * 
-     * @return True, if no setter method has been created for the specified property and
-     *          the property hasn't been claimed by someone else.
-     */
-    boolean canClaimAsReadOnlyProperty(String propertyName);
-    
-    /**
-     * Returns a list of the names of existing properties that are not claimed
-     * and which have abstract accessor methods.
-     */
-
-    List findUnclaimedAbstractProperties();
-
-    /**
-     * Adds a field to the enhanced class; the field will be private and use the
-     * provided name and type.
-     */
-
-    void addField(String name, Class type);
-
-    /**
-     * Adds a field containing an initial value, which is injected into the
-     * class via its fabricated constructor. This method may be called multiple
-     * times with the same value and will return the same variable name (an
-     * identity map is kept internally).
-     * 
-     * @param fieldName
-     *            The default name for the field, used if a new field (and
-     *            contructor argument) is being created. Only used if a field
-     *            for the value doesn't exist.
-     * @param fieldType
-     *            The type of the field to be created.
-     * @param value
-     *            the value to be referenced, which may not be null
-     * @return the name of the field containing the value. This may or may not
-     *         match fieldName. The provided fieldName may be modified to
-     *         prevent naming conflicts.
-     */
-
-    String addInjectedField(String fieldName, Class fieldType, Object value);
-
-    /**
-     * Converts a type name (an object class name, a primtive name, or an array)
-     * into the corresponding Class object.
-     */
-
-    Class convertTypeName(String type);
-
-    /**
-     * Confirms that the named property either doesn't exist (in the component
-     * base class), or that the type of the property exactly matches the
-     * indicated type.
-     */
-
-    void validateProperty(String name, Class expectedType);
-
-    /**
-     * Returns the name of the accessor method for the given property (if it
-     * exists in the component base class), or fabricates a new name if it does
-     * not.
-     *
-     * @param propertyName
-     *          The property to get an accessor method name of.
-     *
-     * @return The existing/future name of an appropriate accessor method for the property.
-     */
-
-    String getAccessorMethodName(String propertyName);
-
-    /**
-     * Adds a method to the enhanced class.
-     * 
-     * @param modifier
-     *            as defined by {@link java.lang.reflect.Modifier}, typically
-     *            {@link java.lang.reflect.Modifier#PUBLIC}
-     * @param sig
-     *            the method signature (defining name, return type, etc.)
-     * @param methodBody
-     *            a Javassist code snippet for the method body
-     * @param location
-     *            a location used to identify "why" the method was added; the
-     *            location may later be used to describe conflicts. May not be
-     *            null.
-     */
-    void addMethod(int modifier, MethodSignature sig, String methodBody, Location location);
-
-    /**
-     * Returns the base component class, as defined in the specification (or
-     * defaulted). An enhaced subclass of the component class will usually be
-     * created.
-     *
-     * @return The class this enhancement operation is operating on.
-     */
-    Class getBaseClass();
-
-    /**
-     * Returns a reference to a particular class. This will, effectively, by the
-     * name of a private field.
-     *
-     * @param clazz The class to get a string equivalent reference of.
-     *
-     * @return The enhancement (javassist) compatiable string version of the specified class.
-     */
-
-    String getClassReference(Class clazz);
-
-    /**
-     * Returns the type of an existing property of the base component class. If
-     * the property does not exist, then returns null.
-     *
-     * @param name
-     *          The property name.
-     * 
-     * @return The property type, or null if it doesn't exist.
-     */
-
-    Class getPropertyType(String name);
-
-    /**
-     * Allows for a kind of distributed construction of a particular method,
-     * within a particular interface. Code can be appended to the method's
-     * implementation throughout the course of the enhancement operation. When
-     * the enhanced class is finialized, the method is added with whatever
-     * contents are in its body. If the base class implements the method, then
-     * the method body will include an initial call to that implementation.
-     * <p>
-     * At this time, this works best for void methods (since there isn't an easy
-     * way to ensure code would be inserted before a final return statement).
-     * 
-     * @param interfaceClass
-     *            the interface containing the method. If the base class does
-     *            not implement the interface, then the enhanced class will have
-     *            the interface added.
-     * @param methodSignature
-     *            the signature of the method to be added.
-     * @param code
-     *            the Javassist markup to be added to the body of the method.
-     */
-    void extendMethodImplementation(Class interfaceClass, MethodSignature methodSignature, String code);
-
-    /**
-     * Returns true if the class implements the specified interface. Checks the
-     * base class (as identified in the specification), but <em>also</em>
-     * accounts for any additional interfaces that may be added by
-     * {@link #extendMethodImplementation(Class, MethodSignature, String)}.
-     *
-     * @param interfaceClass
-     *          The class to check if the base class implements.
-     *
-     * @return Whether or not the specified interface is implemented by the base class
-     *          being enhanced.
-     */
-
-    boolean implementsInterface(Class interfaceClass);
-
-    /**
-     * The specification defined for the component class being enhanced.
-     *
-     * @return The specification for the component being enhanced.
-     */
-    IComponentSpecification getSpecification();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancementOperationImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancementOperationImpl.java
deleted file mode 100644
index 440281b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancementOperationImpl.java
+++ /dev/null
@@ -1,674 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.ClassFab;
-import org.apache.hivemind.service.ClassFactory;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.ToStringBuilder;
-import org.apache.tapestry.services.ComponentConstructor;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.IdAllocator;
-import org.apache.tapestry.util.ObjectIdentityMap;
-
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.*;
-
-/**
- * Implementation of {@link org.apache.tapestry.enhance.EnhancementOperation}that
- * knows how to collect class changes from enhancements. The method
- * {@link #getConstructor()} finalizes the enhancement into a
- * {@link org.apache.tapestry.services.ComponentConstructor}.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class EnhancementOperationImpl implements EnhancementOperation
-{
-    static int _uid = 0;
-
-    private ClassResolver _resolver;
-
-    private IComponentSpecification _specification;
-
-    private Class _baseClass;
-
-    private ClassFab _classFab;
-
-    private final Set _claimedProperties = new HashSet();
-
-    private final JavaClassMapping _javaClassMapping = new JavaClassMapping();
-
-    private final List _constructorTypes = new ArrayList();
-
-    private final List _constructorArguments = new ArrayList();
-
-    private final ObjectIdentityMap _finalFields = new ObjectIdentityMap();
-
-    /**
-     * Set of interfaces added to the enhanced class.
-     */
-
-    private Set _addedInterfaces = new HashSet();
-
-    /**
-     * Map of {@link BodyBuilder}, keyed on {@link MethodSignature}.
-     */
-
-    private Map _incompleteMethods = new HashMap();
-
-    /**
-     * Map of property names to {@link PropertyDescriptor}.
-     */
-
-    private Map _properties = new HashMap();
-
-    /**
-     * Used to incrementally assemble the constructor for the enhanced class.
-     */
-
-    private BodyBuilder _constructorBuilder;
-
-    /**
-     * Makes sure that names created by
-     * {@link #addInjectedField(String, Class, Object)} have unique names.
-     */
-
-    private final IdAllocator _idAllocator = new IdAllocator();
-
-    /**
-     * Map keyed on MethodSignature, value is Location. Used to track which
-     * methods have been created, based on which location data (identified
-     * conflicts).
-     */
-
-    private final Map _methods = new HashMap();
-
-    // May be null
-
-    private final Log _log;
-
-    /**
-     * Alternate package private constructor used by the test suite, to bypass
-     * the defense checks above.
-     */
-
-    EnhancementOperationImpl()
-    {
-        _log = null;
-    }
-
-    public EnhancementOperationImpl(ClassResolver classResolver,
-                                    IComponentSpecification specification, Class baseClass,
-                                    ClassFactory classFactory, Log log)
-    {
-        Defense.notNull(classResolver, "classResolver");
-        Defense.notNull(specification, "specification");
-        Defense.notNull(baseClass, "baseClass");
-        Defense.notNull(classFactory, "classFactory");
-
-        _resolver = classResolver;
-        _specification = specification;
-        _baseClass = baseClass;
-
-        introspectBaseClass();
-
-        String name = newClassName();
-
-        _classFab = classFactory.newClass(name, _baseClass);
-        _log = log;
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("baseClass", _baseClass.getName());
-        builder.append("claimedProperties", _claimedProperties);
-        builder.append("classFab", _classFab);
-
-        return builder.toString();
-    }
-
-    /**
-     * We want to find the properties of the class, but in many cases, the class
-     * is abstract. Some JDK's (Sun) will include public methods from interfaces
-     * implemented by the class in the public declared methods for the class
-     * (which is used by the Introspector). Eclipse's built-in compiler does not
-     * appear to (this may have to do with compiler options I've been unable to
-     * track down). The solution is to augment the information provided directly
-     * by the Introspector with additional information compiled by Introspecting
-     * the interfaces directly or indirectly implemented by the class.
-     */
-    private void introspectBaseClass()
-    {
-        try
-        {
-            synchronized(HiveMind.INTROSPECTOR_MUTEX)
-            {
-                addPropertiesDeclaredInBaseClass();
-            }
-        }
-        catch (IntrospectionException ex)
-        {
-            throw new ApplicationRuntimeException(EnhanceMessages.unabelToIntrospectClass(_baseClass, ex), ex);
-        }
-
-    }
-
-    private void addPropertiesDeclaredInBaseClass()
-      throws IntrospectionException
-    {
-        Class introspectClass = _baseClass;
-
-        addPropertiesDeclaredInClass(introspectClass);
-
-        List interfaceQueue = new ArrayList();
-
-        while(introspectClass != null)
-        {
-            addInterfacesToQueue(introspectClass, interfaceQueue);
-
-            introspectClass = introspectClass.getSuperclass();
-        }
-
-        while(!interfaceQueue.isEmpty())
-        {
-            Class interfaceClass = (Class) interfaceQueue.remove(0);
-
-            addPropertiesDeclaredInClass(interfaceClass);
-
-            addInterfacesToQueue(interfaceClass, interfaceQueue);
-        }
-    }
-
-    private void addInterfacesToQueue(Class introspectClass, List interfaceQueue)
-    {
-        Class[] interfaces = introspectClass.getInterfaces();
-
-        for(int i = 0; i < interfaces.length; i++)
-            interfaceQueue.add(interfaces[i]);
-    }
-
-    private void addPropertiesDeclaredInClass(Class introspectClass)
-      throws IntrospectionException
-    {
-
-        BeanInfo bi = Introspector.getBeanInfo(introspectClass);
-
-        PropertyDescriptor[] pds = bi.getPropertyDescriptors();
-
-        for(int i = 0; i < pds.length; i++)
-        {
-            PropertyDescriptor pd = pds[i];
-
-            String name = pd.getName();
-
-            if (!_properties.containsKey(name))
-                _properties.put(name, pd);
-        }
-    }
-
-    public void claimProperty(String propertyName)
-    {
-        Defense.notNull(propertyName, "propertyName");
-
-        if (_claimedProperties.contains(propertyName))
-            throw new ApplicationRuntimeException(EnhanceMessages.claimedProperty(propertyName));
-
-        _claimedProperties.add(propertyName);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean canClaimAsReadOnlyProperty(String propertyName)
-    {
-        if(_claimedProperties.contains(propertyName))
-            return false;
-
-        PropertyDescriptor pd = getPropertyDescriptor(propertyName);
-
-        if (pd == null)
-            return false;
-
-        return pd.getWriteMethod() == null ? true : false;
-    }
-
-    public void claimReadonlyProperty(String propertyName)
-    {
-        claimProperty(propertyName);
-
-        PropertyDescriptor pd = getPropertyDescriptor(propertyName);
-
-        if (pd != null && pd.getWriteMethod() != null)
-            throw new ApplicationRuntimeException(EnhanceMessages.readonlyProperty(propertyName, pd.getWriteMethod()));
-    }
-
-    public void addField(String name, Class type)
-    {
-        _classFab.addField(name, type);
-    }
-
-    public String addInjectedField(String fieldName, Class fieldType, Object value)
-    {
-        Defense.notNull(fieldName, "fieldName");
-        Defense.notNull(fieldType, "fieldType");
-        Defense.notNull(value, "value");
-
-        String existing = (String) _finalFields.get(value);
-
-        // See if this object has been previously added.
-
-        if (existing != null)
-            return existing;
-
-        // TODO: Should be ensure that the name is unique?
-
-        // Make sure that the field has a unique name (at least, among anything
-        // added
-        // via addFinalField().
-
-        String uniqueName = _idAllocator.allocateId(fieldName);
-
-        // ClassFab doesn't have an option for saying the field should be final,
-        // just private.
-        // Doesn't make a huge difference.
-
-        _classFab.addField(uniqueName, fieldType);
-
-        int parameterIndex = addConstructorParameter(fieldType, value);
-
-        constructorBuilder().addln("{0} = ${1};", uniqueName, Integer.toString(parameterIndex));
-
-        // Remember the mapping from the value to the field name.
-
-        _finalFields.put(value, uniqueName);
-
-        return uniqueName;
-    }
-
-    public Class convertTypeName(String type)
-    {
-        Defense.notNull(type, "type");
-
-        Class result = _javaClassMapping.getType(type);
-
-        if (result == null)
-        {
-            result = _resolver.findClass(type);
-
-            _javaClassMapping.recordType(type, result);
-        }
-
-        return result;
-    }
-
-    public Class getPropertyType(String name)
-    {
-        Defense.notNull(name, "name");
-
-        PropertyDescriptor pd = getPropertyDescriptor(name);
-
-        return pd == null ? null : pd.getPropertyType();
-    }
-
-    public void validateProperty(String name, Class expectedType)
-    {
-        Defense.notNull(name, "name");
-        Defense.notNull(expectedType, "expectedType");
-
-        PropertyDescriptor pd = getPropertyDescriptor(name);
-
-        if (pd == null)
-            return;
-
-        Class propertyType = pd.getPropertyType();
-
-        if (propertyType.equals(expectedType))
-            return;
-
-        throw new ApplicationRuntimeException(EnhanceMessages.propertyTypeMismatch(_baseClass, name, propertyType, expectedType));
-    }
-
-    PropertyDescriptor getPropertyDescriptor(String name)
-    {
-        return (PropertyDescriptor) _properties.get(name);
-    }
-
-    public String getAccessorMethodName(String propertyName)
-    {
-        Defense.notNull(propertyName, "propertyName");
-
-        PropertyDescriptor pd = getPropertyDescriptor(propertyName);
-
-        if (pd != null && pd.getReadMethod() != null)
-            return pd.getReadMethod().getName();
-
-        return EnhanceUtils.createAccessorMethodName(propertyName);
-    }
-
-    public void addMethod(int modifier, MethodSignature sig, String methodBody, Location location)
-    {
-        Defense.notNull(sig, "sig");
-        Defense.notNull(methodBody, "methodBody");
-        Defense.notNull(location, "location");
-
-        Location existing = (Location) _methods.get(sig);
-        if (existing != null)
-            throw new ApplicationRuntimeException(EnhanceMessages.methodConflict(sig, existing), location, null);
-
-        _methods.put(sig, location);
-
-        _classFab.addMethod(modifier, sig, methodBody);
-    }
-
-    public Class getBaseClass()
-    {
-        return _baseClass;
-    }
-
-    public String getClassReference(Class clazz)
-    {
-        Defense.notNull(clazz, "clazz");
-
-        String result = (String) _finalFields.get(clazz);
-
-        if (result == null)
-            result = addClassReference(clazz);
-
-        return result;
-    }
-
-    private String addClassReference(Class clazz)
-    {
-        StringBuffer buffer = new StringBuffer("_class$");
-
-        Class c = clazz;
-
-        while(c.isArray())
-        {
-            buffer.append("array$");
-            c = c.getComponentType();
-        }
-
-        buffer.append(c.getName().replace('.', '$'));
-
-        String fieldName = buffer.toString();
-
-        return addInjectedField(fieldName, Class.class, clazz);
-    }
-
-    /**
-     * Adds a new constructor parameter, returning the new count. This is
-     * convienient, because the first element added is accessed as $1, etc.
-     */
-
-    private int addConstructorParameter(Class type, Object value)
-    {
-        _constructorTypes.add(type);
-        _constructorArguments.add(value);
-
-        return _constructorArguments.size();
-    }
-
-    private BodyBuilder constructorBuilder()
-    {
-        if (_constructorBuilder == null)
-        {
-            _constructorBuilder = new BodyBuilder();
-            _constructorBuilder.begin();
-        }
-
-        return _constructorBuilder;
-    }
-
-    /**
-     * Returns an object that can be used to construct instances of the enhanced
-     * component subclass. This should only be called once.
-     */
-
-    public ComponentConstructor getConstructor()
-    {
-        try
-        {
-            finalizeEnhancedClass();
-
-            Constructor c = findConstructor();
-
-            Object[] params = _constructorArguments.toArray();
-
-            return new ComponentConstructorImpl(c, params, _classFab.toString(), _specification.getLocation());
-        }
-        catch (Throwable t)
-        {
-            throw new ApplicationRuntimeException(EnhanceMessages.classEnhancementFailure(_baseClass, t), _classFab, null, t);
-        }
-    }
-
-    void finalizeEnhancedClass()
-    {
-        finalizeIncompleteMethods();
-
-        if (_constructorBuilder != null)
-        {
-            _constructorBuilder.end();
-
-            Class[] types = (Class[]) _constructorTypes.toArray(new Class[_constructorTypes.size()]);
-
-            _classFab.addConstructor(types, null, _constructorBuilder.toString());
-        }
-
-        if (_log != null && _log.isDebugEnabled())
-            _log.debug("Creating class:\n\n" + _classFab);
-    }
-
-    private void finalizeIncompleteMethods()
-    {
-        Iterator i = _incompleteMethods.entrySet().iterator();
-        while(i.hasNext())
-        {
-            Map.Entry e = (Map.Entry) i.next();
-            MethodSignature sig = (MethodSignature) e.getKey();
-            BodyBuilder builder = (BodyBuilder) e.getValue();
-
-            // Each BodyBuilder is created and given a begin(), this is
-            // the matching end()
-
-            builder.end();
-
-            _classFab.addMethod(Modifier.PUBLIC, sig, builder.toString());
-        }
-    }
-
-    private Constructor findConstructor()
-    {
-        Class componentClass = _classFab.createClass();
-
-        // The fabricated base class always has exactly one constructor
-
-        return componentClass.getConstructors()[0];
-    }
-
-    private String newClassName()
-    {
-        String baseName = _baseClass.getName();
-        int dotx = baseName.lastIndexOf('.');
-
-        return "$" + baseName.substring(dotx + 1) + "_" + _uid++;
-    }
-
-    public void extendMethodImplementation(Class interfaceClass, MethodSignature methodSignature, String code)
-    {
-        addInterfaceIfNeeded(interfaceClass);
-
-        BodyBuilder builder = (BodyBuilder) _incompleteMethods.get(methodSignature);
-
-        if (builder == null)
-        {
-            builder = createIncompleteMethod(methodSignature);
-
-            _incompleteMethods.put(methodSignature, builder);
-        }
-
-        builder.addln(code);
-    }
-
-    private void addInterfaceIfNeeded(Class interfaceClass)
-    {
-        if (implementsInterface(interfaceClass))
-            return;
-
-        _classFab.addInterface(interfaceClass);
-        _addedInterfaces.add(interfaceClass);
-    }
-
-    public boolean implementsInterface(Class interfaceClass)
-    {
-        if (interfaceClass.isAssignableFrom(_baseClass))
-            return true;
-
-        Iterator i = _addedInterfaces.iterator();
-        while(i.hasNext())
-        {
-            Class addedInterface = (Class) i.next();
-
-            if (interfaceClass.isAssignableFrom(addedInterface))
-                return true;
-        }
-
-        return false;
-    }
-
-    private BodyBuilder createIncompleteMethod(MethodSignature sig)
-    {
-        BodyBuilder result = new BodyBuilder();
-
-        // Matched inside finalizeIncompleteMethods()
-
-        result.begin();
-
-        if (existingImplementation(sig))
-            result.addln("super.{0}($$);", sig.getName());
-
-        return result;
-    }
-
-    /**
-     * Returns true if the base class implements the provided method as either a
-     * public or a protected method.
-     */
-
-    private boolean existingImplementation(MethodSignature sig)
-    {
-        Method m = findMethod(sig);
-
-        return m != null && !Modifier.isAbstract(m.getModifiers());
-    }
-
-    /**
-     * Finds a public or protected method in the base class.
-     */
-    private Method findMethod(MethodSignature sig)
-    {
-        // Finding a public method is easy:
-
-        try
-        {
-            return _baseClass.getMethod(sig.getName(), sig.getParameterTypes());
-
-        }
-        catch (NoSuchMethodException ex)
-        {
-            // Good; no super-implementation to invoke.
-        }
-
-        Class c = _baseClass;
-
-        while(c != Object.class)
-        {
-            try
-            {
-                return c.getDeclaredMethod(sig.getName(), sig
-                  .getParameterTypes());
-            }
-            catch (NoSuchMethodException ex)
-            {
-                // Ok, continue loop up to next base class.
-            }
-
-            c = c.getSuperclass();
-        }
-
-        return null;
-    }
-
-    public List findUnclaimedAbstractProperties()
-    {
-        List result = new ArrayList();
-
-        Iterator i = _properties.values().iterator();
-
-        while(i.hasNext())
-        {
-            PropertyDescriptor pd = (PropertyDescriptor) i.next();
-
-            String name = pd.getName();
-
-            if (_claimedProperties.contains(name))
-                continue;
-
-            if (isAbstractProperty(pd))
-                result.add(name);
-        }
-
-        return result;
-    }
-
-    /**
-     * A property is abstract if either its read method or it write method is
-     * abstract. We could do some additional checking to ensure that both are
-     * abstract if either is. Note that in many cases, there will only be one
-     * accessor (a reader or a writer).
-     */
-    private boolean isAbstractProperty(PropertyDescriptor pd)
-    {
-        return isExistingAbstractMethod(pd.getReadMethod())
-               || isExistingAbstractMethod(pd.getWriteMethod());
-    }
-
-    private boolean isExistingAbstractMethod(Method m)
-    {
-        return m != null && Modifier.isAbstract(m.getModifiers());
-    }
-
-    public IComponentSpecification getSpecification()
-    {
-        return _specification;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancementWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancementWorker.java
deleted file mode 100644
index eb2cb28..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/EnhancementWorker.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * A worker that is employed by the
- * {@link org.apache.tapestry.services.ComponentConstructorFactory} to perform
- * some enhancement.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface EnhancementWorker
-{
-
-    void performEnhancement(EnhancementOperation op,
-            IComponentSpecification spec);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/GenericsClassInspectorImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/GenericsClassInspectorImpl.java
deleted file mode 100644
index 90001ef..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/GenericsClassInspectorImpl.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-
-import java.beans.Introspector;
-import java.lang.reflect.Method;
-
-
-/**
- * Implementation of {@link ClassInspector} that can properly handle
- * jre 1.5 generic types.
- */
-public class GenericsClassInspectorImpl implements ClassInspector
-{
-
-    /**
-     * {@inheritDoc}
-     */
-    public MethodSignature getMethodSignature(Class implementing, Method m)
-    {
-        return new GenericsMethodSignatureImpl(implementing, m);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public MethodSignature getPropertyAccessor(Class type, String propertyName)
-    {
-        try {
-            Method[] props = type.getMethods();
-            Method match = null;
-            
-            for (int i=0; i < props.length; i++) {
-
-                String propName = getPropertyName(props[i]);
-
-                if (!propertyName.equals(propName)) {
-                    continue;
-                }
-
-                // store for later retrieval if necessary
-                if (match == null)
-                    match = props[i];
-                
-                // try to find read methods before resorting to write
-                if (props[i].getReturnType() == void.class) {
-                    continue;
-                }
-
-                return new GenericsMethodSignatureImpl(type, props[i]);
-            } 
-
-            if (match != null)
-                return new GenericsMethodSignatureImpl(type, match);
-
-        } catch (Throwable t) {
-            
-            throw new ApplicationRuntimeException("Error reading property " + propertyName + " from base class : " + type, t);
-        }
-        
-        return null;
-    }
-
-    static String getPropertyName(Method m)
-    {
-        String name = m.getName();
-
-        if (name.startsWith("get"))
-            name = name.substring(3);
-        else if (name.startsWith("set"))
-            name = name.substring(3);
-        else if (name.startsWith("is"))
-            name = name.substring(2);
-
-        return Introspector.decapitalize(name);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/GenericsMethodSignatureImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/GenericsMethodSignatureImpl.java
deleted file mode 100644
index 8036220..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/GenericsMethodSignatureImpl.java
+++ /dev/null
@@ -1,133 +0,0 @@
-//Copyright 2004, 2005 The Apache Software Foundation
-
-//Licensed under the Apache License, Version 2.0 (the "License");
-//you may not use this file except in compliance with the License.
-//You may obtain a copy of the License at
-
-//http://www.apache.org/licenses/LICENSE-2.0
-
-//Unless required by applicable law or agreed to in writing, software
-//distributed under the License is distributed on an "AS IS" BASIS,
-//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//See the License for the specific language governing permissions and
-//limitations under the License.
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-
-
-/**
- * Implementation of {@link MethodSignature} that supports jdk 1.5 generic typing support.
- * 
- */
-public class GenericsMethodSignatureImpl extends MethodSignatureImpl implements MethodSignature
-{
-    boolean _isGeneric;
-    
-    public GenericsMethodSignatureImpl(Class type, Method m)
-    {
-        super(findReturnType(type, m), m.getName(), findParameterTypes(type, m), m.getExceptionTypes());
-        
-        _isGeneric = type.getGenericSuperclass() != null && ParameterizedType.class.isInstance(type.getGenericSuperclass());
-    }
-
-    public boolean isGeneric()
-    {
-        return _isGeneric;
-    }
-    
-    static Class findReturnType(Class type, Method m)
-    {
-        Type ret = m.getGenericReturnType();
-
-        if (TypeVariable.class.isInstance(ret) 
-                && type.getGenericSuperclass() != null
-                && ParameterizedType.class.isInstance(type.getGenericSuperclass())) {
-
-            TypeVariable tvar = (TypeVariable)ret;
-            ParameterizedType param = (ParameterizedType)type.getGenericSuperclass();
-
-            Class resolvedType = resolveType(param, tvar);
-            if (resolvedType != null)
-                return resolvedType;
-            
-        }
-
-        return m.getReturnType();
-    }
-
-    static Class resolveType(ParameterizedType param, TypeVariable var)
-    {
-        if (param.getActualTypeArguments().length < 1)
-            return null;
-
-        for (int i=0; i < var.getBounds().length; i++) {
-
-            Type t = var.getBounds()[i];
-            Class resolvedType = null;
-            if (ParameterizedType.class.isInstance(t)) {
-
-                ParameterizedType pparam = (ParameterizedType)t;
-                for (int e=0; e < pparam.getActualTypeArguments().length; e++) {
-                    if (!TypeVariable.class.isInstance(pparam.getActualTypeArguments()[e]))
-                        continue;
-                    
-                    resolvedType = resolveType(pparam, (TypeVariable)pparam.getActualTypeArguments()[e]);
-                }
-            } else {
-
-                resolvedType = findType(param.getActualTypeArguments(), (Class)t);
-            }
-            
-            if (resolvedType != null)
-                return resolvedType;
-        }
-
-        return null;
-    }
-
-    static Class findType(Type[] types, Class type)
-    {
-        for (int i = 0; i < types.length; i++) {
-            
-            if (Class.class.isInstance(types[i]) && type.isAssignableFrom((Class)types[i]))
-                return (Class)types[i];
-        }
-
-        return null;
-    }
-
-    static Class[] findParameterTypes(Class type, Method m)
-    {
-        if (type.getGenericSuperclass() == null
-                || !ParameterizedType.class.isInstance(type.getGenericSuperclass()))
-            return m.getParameterTypes();
-
-        ParameterizedType param = (ParameterizedType)type.getGenericSuperclass();
-        Type[] genTypes = m.getGenericParameterTypes();
-        Class[] types = new Class[genTypes.length];
-
-        typeSearch:
-            for (int i=0; i < genTypes.length; i++) {
-
-                if (TypeVariable.class.isInstance(genTypes[i])) {
-
-                    Class resolved = resolveType(param, (TypeVariable)genTypes[i]);
-                    
-                    if (resolved != null) {
-                        types[i] = resolved;
-                        continue;
-                    }
-                }
-
-                types[i] = m.getParameterTypes()[i];
-            }
-
-        return types;
-    }
-
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/HiveMindClassPool.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/HiveMindClassPool.java
deleted file mode 100644
index cbfc73e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/HiveMindClassPool.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2007 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import javassist.CannotCompileException;
-import javassist.ClassPath;
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.LoaderClassPath;
-
-/**
- * Used to ensure that {@link javassist.ClassPool#appendClassPath(javassist.ClassPath)} is invoked
- * with a synchronized lock. Additionally, wraps around a shared
- * {@link org.apache.hivemind.service.impl.ClassFactoryClassLoader}.
- * 
- * @author Howard Lewis Ship
- */
-public class HiveMindClassPool extends ClassPool
-{
-    private ClassFactoryClassLoader _loader = new ClassFactoryClassLoader();
-    
-    /**
-     * Used to identify which class loaders have already been integrated into the pool.
-     */
-    private Set _loaders = new HashSet();
-
-    public HiveMindClassPool()
-    {
-        super(null);
-
-        appendClassLoader(Thread.currentThread().getContextClassLoader());
-    }
-
-    /**
-     * Convienience method for adding to the ClassPath for a particular class loader.
-     */
-    public synchronized void appendClassLoader(ClassLoader loader)
-    {
-        if (loader == null || loader == _loader || _loaders.contains(loader))
-            return;
-
-        _loader.addDelegateLoader(loader);
-        
-        ClassPath path = new LoaderClassPath(loader);
-
-        appendClassPath(path);
-
-        _loaders.add(loader);
-    }
-
-    /**
-     * Invoked to convert an fabricated class into a real class. The new classes' class loader will
-     * be the delegating ClassFactoryClassLoader, which has visibility to all class loaders for all
-     * modules.
-     * 
-     * @since 1.1
-     */
-    public Class toClass(CtClass ctClass) throws CannotCompileException
-    {
-        return toClass(ctClass, false);
-    }
-    
-    public Class toClass(CtClass ctClass, boolean detach) throws CannotCompileException
-    {
-        Class clazz = ctClass.toClass(_loader, getClass().getProtectionDomain());
-        
-        if (detach)
-            ctClass.detach();
-        
-        return clazz;
-    }
-    
-    public Set getLoaders()
-    {
-        return _loaders;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InitialValueBindingCreator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InitialValueBindingCreator.java
deleted file mode 100644
index 07e4ebb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InitialValueBindingCreator.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.BindingConstants;
-import org.apache.tapestry.binding.BindingSource;
-
-/**
- * Encapsulates information needed to construct an initial value binding for a
- * specified property (with an initial value).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InitialValueBindingCreator
-{
-    private BindingSource _bindingSource;
-
-    private String _description;
-
-    private String _initialValue;
-
-    private Location _location;
-
-    public InitialValueBindingCreator(BindingSource bindingSource,
-            String description, String initialValue, Location location)
-    {
-        _bindingSource = bindingSource;
-        _description = description;
-        _initialValue = initialValue;
-        _location = location;
-    }
-    
-    /**
-     * This method is just implemented for testing purposes.
-     */
-
-    public boolean equals(Object obj)
-    {
-        InitialValueBindingCreator c = (InitialValueBindingCreator) obj;
-
-        return _bindingSource == c._bindingSource
-                && _description.equals(c._description)
-                && _initialValue.equals(c._initialValue)
-                && _location.equals(c._location);
-    }
-
-    public IBinding createBinding(IComponent component)
-    {
-        return _bindingSource.createBinding(component, _description, _initialValue, BindingConstants.OGNL_PREFIX, _location);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectAssetWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectAssetWorker.java
deleted file mode 100644
index 6bf917a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectAssetWorker.java
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Modifier;
-import java.util.Iterator;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.spec.IAssetSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Injects assets as component properties.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectAssetWorker implements EnhancementWorker
-{
-
-    private ErrorLog _errorLog;
-
-    public void performEnhancement(EnhancementOperation op,
-            IComponentSpecification spec)
-    {
-        Iterator i = spec.getAssetNames().iterator();
-        while(i.hasNext())
-        {
-            String name = (String) i.next();
-
-            IAssetSpecification as = spec.getAsset(name);
-
-            String propertyName = as.getPropertyName();
-
-            if (propertyName != null)
-            {
-                try
-                {
-                    injectAsset(op, name, propertyName, as.getLocation());
-                }
-                catch (Exception ex)
-                {
-                    _errorLog.error(EnhanceMessages.errorAddingProperty(
-                            propertyName, op.getBaseClass(), ex), as
-                            .getLocation(), ex);
-                }
-            }
-        }
-    }
-
-    public void injectAsset(EnhancementOperation op, String assetName,
-            String propertyName, Location location)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(assetName, "assetName");
-        Defense.notNull(propertyName, "propertyName");
-
-        Class propertyType = EnhanceUtils.extractPropertyType(op, propertyName,
-                null);
-
-        op.claimReadonlyProperty(propertyName);
-
-        if (!propertyType.isAssignableFrom(IAsset.class))
-            throw new ApplicationRuntimeException(EnhanceMessages
-                    .incompatiblePropertyType(propertyName, propertyType,
-                            IAsset.class));
-
-        String methodName = op.getAccessorMethodName(propertyName);
-
-        MethodSignature sig = new MethodSignature(propertyType, methodName,
-                null, null);
-
-        String code = "return getAsset(\"" + assetName + "\");";
-
-        op.addMethod(Modifier.PUBLIC, sig, code, location);
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectBeanWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectBeanWorker.java
deleted file mode 100644
index bc7030f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectBeanWorker.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Modifier;
-import java.util.Iterator;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.ClassFabUtils;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.spec.IBeanSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Injects a property that will dynamically access a managed bean.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectBeanWorker implements EnhancementWorker
-{
-
-    private ErrorLog _errorLog;
-
-    public void performEnhancement(EnhancementOperation op,
-            IComponentSpecification spec)
-    {
-        Iterator i = spec.getBeanNames().iterator();
-
-        while(i.hasNext())
-        {
-            String name = (String) i.next();
-
-            IBeanSpecification bs = spec.getBeanSpecification(name);
-
-            String propertyName = bs.getPropertyName();
-            if (propertyName != null)
-            {
-                try
-                {
-                    injectBean(op, name, propertyName, bs.getLocation());
-                }
-                catch (Exception ex)
-                {
-                    _errorLog.error(EnhanceMessages.errorAddingProperty(
-                            propertyName, op.getBaseClass(), ex), bs
-                            .getLocation(), ex);
-                }
-            }
-        }
-    }
-
-    public void injectBean(EnhancementOperation op, String beanName,
-            String propertyName, Location location)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(beanName, "beanName");
-        Defense.notNull(propertyName, "propertyName");
-
-        op.claimReadonlyProperty(propertyName);
-
-        Class propertyType = EnhanceUtils.extractPropertyType(op, propertyName,
-                null);
-
-        String methodName = op.getAccessorMethodName(propertyName);
-
-        MethodSignature sig = new MethodSignature(propertyType, methodName,
-                null, null);
-
-        // i.e.
-        // return (foo.bar.Baz) getBeans().getBean("baz");
-
-        op.addMethod(Modifier.PUBLIC, sig, "return ("
-                + ClassFabUtils.getJavaClassName(propertyType)
-                + ") getBeans().getBean(\"" + beanName + "\");", location);
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectComponentWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectComponentWorker.java
deleted file mode 100644
index 2d3d5a2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectComponentWorker.java
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.util.Iterator;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.ClassFabUtils;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-
-/**
- * Injects components for which the property attribute of the &lt;component&gt;
- * element was specified. This makes it easier to reference a particular
- * component from Java code.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectComponentWorker implements EnhancementWorker
-{
-
-    private ErrorLog _errorLog;
-
-    public void performEnhancement(EnhancementOperation op,
-            IComponentSpecification spec)
-    {
-        Iterator i = spec.getComponentIds().iterator();
-
-        while(i.hasNext())
-        {
-            String id = (String) i.next();
-
-            IContainedComponent cc = spec.getComponent(id);
-
-            String propertyName = cc.getPropertyName();
-
-            if (propertyName != null)
-            {
-                try
-                {
-                    injectComponent(op, id, propertyName, cc.getLocation());
-                }
-                catch (Exception ex)
-                {
-                    _errorLog.error(EnhanceMessages.errorAddingProperty(
-                            propertyName, op.getBaseClass(), ex), cc
-                            .getLocation(), ex);
-                }
-            }
-        }
-    }
-
-    public void injectComponent(EnhancementOperation op, String componentId,
-            String propertyName, Location location)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(componentId, "componentId");
-        Defense.notNull(propertyName, "propertyName");
-
-        Class propertyType = EnhanceUtils.extractPropertyType(op, propertyName,
-                null);
-
-        op.claimReadonlyProperty(propertyName);
-
-        String fieldName = "_$" + propertyName;
-        String classField = op.getClassReference(propertyType);
-        String locationField = op.addInjectedField(fieldName + "$location",
-                Location.class, location);
-
-        op.addField(fieldName, propertyType);
-
-        EnhanceUtils.createSimpleAccessor(op, fieldName, propertyName,
-                propertyType, location);
-
-        // I.e. _$fred = (IComponent) TapestryUtils.getComponent(this, "fred",
-        // IComponent.class,
-        // location)
-
-        BodyBuilder builder = new BodyBuilder();
-
-        builder.add("{0} = ({1}) ", fieldName, ClassFabUtils
-                .getJavaClassName(propertyType));
-        builder.add("{0}#getComponent(this, ", TapestryUtils.class.getName());
-        builder.addQuoted(componentId);
-        builder.add(", {0}, {1});", classField, locationField);
-
-        op.extendMethodImplementation(IComponent.class,
-                EnhanceUtils.FINISH_LOAD_SIGNATURE, builder.toString());
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectEnhancementWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectEnhancementWorker.java
deleted file mode 100644
index 8fbb34c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectEnhancementWorker.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.tapestry.spec.InjectSpecification;
-
-/**
- * A kind of enhancement worker dedicated to injection, based on the
- * &lt;inject&gt; element of the specification. There are different types of
- * injection which match up to different implementations of this interface
- * (i.e., the Strategy pattern).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.spec.InjectSpecification
- * @see org.apache.tapestry.enhance.DispatchToInjectWorker
- */
-public interface InjectEnhancementWorker
-{
-
-    /**
-     * Perform the enhancement defined by the
-     * {@link org.apache.tapestry.spec.InjectSpecification}. Thrown runtime
-     * exceptions are caught and reported by the invoker.
-     *
-     * @param op
-     *          Current enhancement context.
-     * @param spec
-*              The injection specificiation configuration.
-     */
-    void performEnhancement(EnhancementOperation op, InjectSpecification spec);
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectEventInvokerWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectEventInvokerWorker.java
deleted file mode 100644
index 2e68b10..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectEventInvokerWorker.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.internal.event.IComponentEventInvoker;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Injects the component's event invoker as the
- * {@link org.apache.tapestry.IComponent#getEventInvoker() eventInvoker}property.
- * 
- * @author jkuhnert
- * @since 4.1
- */
-public class InjectEventInvokerWorker implements EnhancementWorker
-{
-
-    public static final String PROPERTY_NAME = "eventInvoker";
-
-    private ErrorLog _errorLog;
-
-    private IComponentEventInvoker _invoker;
-    
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
-    {
-        try
-        {
-            injectEventInvoker(op, spec);
-        }
-        catch (Exception ex)
-        {
-            _errorLog.error(EnhanceMessages.errorAddingProperty(
-                    PROPERTY_NAME, op.getBaseClass(), ex), spec
-                    .getLocation(), ex);
-        }
-    }
-
-    public void injectEventInvoker(EnhancementOperation op, IComponentSpecification spec)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(spec, "spec");
-        
-        op.claimReadonlyProperty(PROPERTY_NAME);
-        
-        String fieldName = op.addInjectedField("_$"
-                + PROPERTY_NAME, IComponentEventInvoker.class,
-                _invoker);
-        
-        EnhanceUtils.createSimpleAccessor(op, fieldName,
-                PROPERTY_NAME, IComponentEventInvoker.class,
-                spec.getLocation());
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-    
-    public void setComponentEventInvoker(IComponentEventInvoker invoker)
-    {
-        _invoker = invoker;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectListenerRegistrationWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectListenerRegistrationWorker.java
deleted file mode 100644
index c79877d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectListenerRegistrationWorker.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Checks to see if the component implements a specific interface, and adds code
- * to the component's finishLoad() method to register (with the page) for such
- * notifications.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectListenerRegistrationWorker implements EnhancementWorker
-{
-
-    private Class _listenerInterface;
-
-    private String _registerMethodName;
-
-    public void performEnhancement(EnhancementOperation op,
-            IComponentSpecification spec)
-    {
-
-        if (op.implementsInterface(_listenerInterface))
-        {
-            op.extendMethodImplementation(IComponent.class,
-                    EnhanceUtils.FINISH_LOAD_SIGNATURE, "getPage()."
-                            + _registerMethodName + "(this);");
-        }
-    }
-
-    public void setListenerInterface(Class listenerInterface)
-    {
-        _listenerInterface = listenerInterface;
-    }
-
-    public void setRegisterMethodName(String registerMethodName)
-    {
-        _registerMethodName = registerMethodName;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectMessagesWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectMessagesWorker.java
deleted file mode 100644
index 92c4827..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectMessagesWorker.java
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Modifier;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Messages;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.services.ComponentMessagesSource;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Injects the read-only {@link org.apache.tapestry.IComponent#getMessages() messages}property into
- * all components.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectMessagesWorker implements EnhancementWorker
-{
-    final String _messagesProperty = "messages";
-
-    final MethodSignature _methodSignature = new MethodSignature(Messages.class, "getMessages",
-            null, null);
-
-    private ErrorLog _errorLog;
-
-    private ComponentMessagesSource _componentMessagesSource;
-    
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
-    {
-        Location location = spec.getLocation();
-
-        try
-        {
-            injectMessages(op, location);
-        }
-        catch (Exception ex)
-        {
-            _errorLog.error(EnhanceMessages.errorAddingProperty(_messagesProperty, op
-                    .getBaseClass(), ex), location, ex);
-        }
-    }
-
-    public void injectMessages(EnhancementOperation op, Location location)
-    {
-        Defense.notNull(op, "op");
-
-        op.claimReadonlyProperty(_messagesProperty);
-
-        String sourceField = op.addInjectedField(
-                "_$componentMessagesSource",
-                ComponentMessagesSource.class,
-                _componentMessagesSource);
-
-        op.addField("_$messages", Messages.class);
-
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("if (_$messages == null)");
-        builder.addln("  _$messages = {0}.getMessages(this);", sourceField);
-        builder.addln("return _$messages;");
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, _methodSignature, builder.toString(), location);
-    }
-
-    public void setComponentMessagesSource(ComponentMessagesSource componentMessagesSource)
-    {
-        _componentMessagesSource = componentMessagesSource;
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectMetaWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectMetaWorker.java
deleted file mode 100644
index f2f1375..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectMetaWorker.java
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.ClassFabUtils;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.ComponentPropertySource;
-import org.apache.tapestry.spec.InjectSpecification;
-
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Injects meta data obtained via {@link org.apache.tapestry.services.ComponentPropertySource}
- * (meaning that meta-data is searched for in the component's specification, then it's namespace
- * (library or application specification), then the global application properties.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectMetaWorker implements InjectEnhancementWorker
-{
-    static final String SOURCE_NAME = "_$componentPropertySource";
-
-    private ComponentPropertySource _source;
-
-    private ValueConverter _valueConverter;
-
-    private Map _primitiveParser = new HashMap();
-    {
-        _primitiveParser.put(short.class, "java.lang.Short.parseShort");
-        _primitiveParser.put(int.class, "java.lang.Integer.parseInt");
-        _primitiveParser.put(long.class, "java.lang.Long.parseLong");
-        _primitiveParser.put(double.class, "java.lang.Double.parseDouble");
-        _primitiveParser.put(float.class, "java.lang.Float.parseFloat");
-    }
-
-    public void performEnhancement(EnhancementOperation op, InjectSpecification spec)
-    {
-        String propertyName = spec.getProperty();
-        String metaKey = spec.getObject();
-
-        injectMetaValue(op, propertyName, metaKey, spec.getLocation());
-    }
-
-    public void injectMetaValue(EnhancementOperation op, String propertyName, String metaKey,
-                                Location location)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(propertyName, "propertyName");
-        Defense.notNull(metaKey, "metaKey");
-
-        Class propertyType = op.getPropertyType(propertyName);
-
-        // Default to object if not specified
-
-        if (propertyType == null) {
-
-            propertyType = Object.class;
-        }
-
-        op.claimReadonlyProperty(propertyName);
-
-        String sourceName = op.addInjectedField(SOURCE_NAME, ComponentPropertySource.class, _source);
-
-        MethodSignature sig = new MethodSignature(propertyType, op.getAccessorMethodName(propertyName), null, null);
-
-        String parser = (String) _primitiveParser.get(propertyType);
-
-        if (parser != null)
-        {
-            addPrimitive(op, metaKey, propertyName, sig, sourceName, parser, location);
-            return;
-        } else if (propertyType == boolean.class)
-        {
-            addBoolean(op, metaKey, propertyName, sig, sourceName, location);
-            return;
-        }
-
-        if (propertyType == char.class)
-        {
-            addCharacterPrimitive(op, metaKey, propertyName, sig, sourceName, location);
-            return;
-        }
-
-        addObject(op, metaKey, propertyName, propertyType, sig, sourceName, location);
-    }
-
-    private void addPrimitive(EnhancementOperation op, String metaKey, String propertyName,
-                              MethodSignature sig, String sourceName, String parser, Location location)
-    {
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");",
-                      sourceName,
-                      metaKey);
-        builder.addln("return {0}(meta);", parser);
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
-    }
-
-    private void addBoolean(EnhancementOperation op, String metaKey, String propertyName,
-                            MethodSignature sig, String sourceName, Location location)
-    {
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln(
-          "java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");",
-          sourceName,
-          metaKey);
-        builder.addln("return java.lang.Boolean.valueOf(meta).booleanValue();");
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
-    }
-
-    private void addCharacterPrimitive(EnhancementOperation op, String metaKey,
-                                       String propertyName, MethodSignature sig, String sourceName, Location location)
-    {
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln(
-          "java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");",
-          sourceName,
-          metaKey);
-        builder.addln("return meta.charAt(0);");
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
-    }
-
-    private void addObject(EnhancementOperation op, String metaKey, String propertyName,
-                           Class propertyType, MethodSignature sig, String sourceName, Location location)
-    {
-        String valueConverterName = op.addInjectedField("_$valueConverter", ValueConverter.class, _valueConverter);
-
-        String classRef = op.getClassReference(propertyType);
-
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");",
-                      sourceName,
-                      metaKey);
-        builder.addln("return ({0}) {1}.coerceValue(meta, {2});", ClassFabUtils
-          .getJavaClassName(propertyType), valueConverterName, classRef);
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
-    }
-
-    public void setSource(ComponentPropertySource source)
-    {
-        _source = source;
-    }
-
-    public void setValueConverter(ValueConverter valueConverter)
-    {
-        _valueConverter = valueConverter;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectObjectWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectObjectWorker.java
deleted file mode 100644
index cb3afaa..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectObjectWorker.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.services.InjectedValueProvider;
-import org.apache.tapestry.spec.InjectSpecification;
-
-import java.lang.reflect.Modifier;
-
-/**
- * Implementation for injection type "object" (the default). Adds read-only
- * properties to the enhanced class that contain objects injected from HiveMind.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectObjectWorker implements InjectEnhancementWorker
-{
-
-    private InjectedValueProvider _provider;
-
-    public void performEnhancement(EnhancementOperation op, InjectSpecification is)
-    {
-        String name = is.getProperty();
-        String objectReference = is.getObject();
-        Location location = is.getLocation();
-
-        injectObject(op, objectReference, name, location);
-    }
-
-    public void injectObject(EnhancementOperation op, String objectReference,
-                             String propertyName, Location location)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(propertyName, "propertyName");
-        Defense.notNull(objectReference, "objectReference");
-
-        Class propertyType = op.getPropertyType(propertyName);
-        if (propertyType == null)
-            propertyType = Object.class;
-
-        op.claimReadonlyProperty(propertyName);
-
-        Object injectedValue = _provider.obtainValue(objectReference, location);
-
-        if (injectedValue == null)
-            throw new ApplicationRuntimeException(EnhanceMessages
-              .locatedValueIsNull(objectReference), location, null);
-
-        if (!propertyType.isInstance(injectedValue))
-            throw new ApplicationRuntimeException(EnhanceMessages.incompatibleInjectType(objectReference, injectedValue, propertyType),
-                                                  location, null);
-
-        String fieldName = op.addInjectedField("_$" + propertyName,
-                                               propertyType, injectedValue);
-
-        String methodName = EnhanceUtils.createAccessorMethodName(propertyName);
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(propertyType,
-                                                          methodName, null, null), "return " + fieldName + ";", location);
-    }
-
-    public void setProvider(InjectedValueProvider provider)
-    {
-        _provider = provider;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectPageWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectPageWorker.java
deleted file mode 100644
index 264e6ed..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectPageWorker.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.spec.InjectSpecification;
-
-import java.lang.reflect.Modifier;
-
-/**
- * Injects code to access a named page within the application.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class InjectPageWorker implements InjectEnhancementWorker
-{
-    public void performEnhancement(EnhancementOperation op, InjectSpecification spec)
-    {
-        performEnhancement(op, spec.getObject(), spec.getProperty(), spec.getLocation());
-    }
-
-    public void performEnhancement(EnhancementOperation op, String pageName, String propertyName,
-            Location location)
-    {
-        Class propertyType = op.getPropertyType(propertyName);
-
-        if (propertyType == null)
-            propertyType = Object.class;
-        else if (propertyType.isPrimitive())
-            throw new ApplicationRuntimeException(EnhanceMessages.wrongTypeForPageInjection(
-                    propertyName,
-                    propertyType), null, location, null);
-
-        op.claimReadonlyProperty(propertyName);
-
-        MethodSignature sig = new MethodSignature(propertyType, op
-                .getAccessorMethodName(propertyName), null, null);
-
-        BodyBuilder builder = new BodyBuilder();
-
-        builder.add("return ");
-
-        // If the property type is not IPage or a superclass of IPage then a cast
-        // is needed.
-
-        if (!propertyType.isAssignableFrom(IPage.class))
-            builder.add("({0})", propertyType.getName());
-
-        builder.add("getPage().getRequestCycle().getPage(\"{0}\");", pageName);
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectRenderWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectRenderWorker.java
deleted file mode 100644
index 35b795b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectRenderWorker.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.services.ComponentRenderWorker;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Injects the component's render worker chain as the
- * {@link org.apache.tapestry.IComponent renderWorker}property.
- * 
- * @author jkuhnert
- * @since 4.1
- */
-public class InjectRenderWorker implements EnhancementWorker
-{
-
-    public static final String PROPERTY_NAME = "renderWorker";
-    
-    private ErrorLog _errorLog;
-    
-    private ComponentRenderWorker _renderWorker;
-    
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
-    {
-        try
-        {
-            injectRenderWorker(op, spec);
-        }
-        catch (Exception ex)
-        {
-            _errorLog.error(EnhanceMessages.errorAddingProperty(PROPERTY_NAME, op.getBaseClass(), ex), 
-                    spec.getLocation(), ex);
-        }
-    }
-    
-    public void injectRenderWorker(EnhancementOperation op, IComponentSpecification spec)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(spec, "spec");
-        
-        op.claimReadonlyProperty(PROPERTY_NAME);
-        
-        String fieldName = op.addInjectedField("_$" + PROPERTY_NAME, ComponentRenderWorker.class, _renderWorker);
-        
-        EnhanceUtils.createSimpleAccessor(op, fieldName,
-                PROPERTY_NAME, ComponentRenderWorker.class,
-                spec.getLocation());
-    }
-    
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-    
-    public void setRenderWorker(ComponentRenderWorker worker)
-    {
-        _renderWorker = worker;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectScriptWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectScriptWorker.java
deleted file mode 100644
index 93a8847..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectScriptWorker.java
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.asset.AssetSource;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.spec.InjectSpecification;
-
-import java.lang.reflect.Modifier;
-
-/**
- * Injects {@link org.apache.tapestry.IScript} instances directly into pages or components.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectScriptWorker implements InjectEnhancementWorker
-{
-    private IScriptSource _source;
-
-    private AssetSource _assetSource;
-
-    public void performEnhancement(EnhancementOperation op, InjectSpecification spec)
-    {
-        String propertyName = spec.getProperty();
-        String scriptName = spec.getObject();
-        Location location = spec.getLocation();
-
-        injectScript(op, propertyName, scriptName, location);
-    }
-
-    /**
-     * Injects a script reference.
-     *
-     * @param op
-     *            the enhancement operation
-     * @param propertyName
-     *            the name of the property to inject
-     * @param scriptName
-     *            the name of the script (relative to the location)
-     * @param location
-     *            the location of the specification; primarily used as the base location for finding
-     *            the script.
-     */
-
-    public void injectScript(EnhancementOperation op, String propertyName,
-                             String scriptName, Location location)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(propertyName, "propertyName");
-        Defense.notNull(scriptName, "scriptName");
-        Defense.notNull(location, "location");
-
-        op.claimReadonlyProperty(propertyName);
-
-        Class propertyType = EnhanceUtils.verifyPropertyType(op, propertyName, IScript.class);
-
-        // PropertyType will likely be either java.lang.Object or IScript
-
-        String methodName = op.getAccessorMethodName(propertyName);
-
-        Resource resource = location.getResource().getRelativeResource(scriptName);
-
-        // if can't find resource
-
-        if (resource.getResourceURL() == null)
-        {
-            IAsset scriptAsset = _assetSource.findAsset(location.getResource(), op.getSpecification(),
-                                                        scriptName, null, location);
-
-            if (scriptAsset != null)
-            {
-                resource = scriptAsset.getResourceLocation();
-            }
-        }
-
-        DeferredScript script = new DeferredScriptImpl(resource, _source, location);
-
-        String fieldName = op.addInjectedField("_$script", DeferredScript.class, script);
-
-        MethodSignature sig = new MethodSignature(propertyType, methodName, null, null);
-
-        op.addMethod(Modifier.PUBLIC, sig, "return " + fieldName + ".getScript();", location);
-    }
-
-    public void setSource(IScriptSource source)
-    {
-        _source = source;
-    }
-
-    public void setAssetSource(AssetSource assetSource)
-    {
-        _assetSource = assetSource;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectSpecificationWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectSpecificationWorker.java
deleted file mode 100644
index 9aa9dad..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectSpecificationWorker.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Injects the component's specification as the
- * {@link org.apache.tapestry.IComponent#getSpecification() specification}property.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectSpecificationWorker implements EnhancementWorker
-{
-
-    public static final String SPECIFICATION_PROPERTY_NAME = "specification";
-
-    private ErrorLog _errorLog;
-
-    public void performEnhancement(EnhancementOperation op,
-            IComponentSpecification spec)
-    {
-        try
-        {
-            injectSpecification(op, spec);
-        }
-        catch (Exception ex)
-        {
-            _errorLog.error(EnhanceMessages.errorAddingProperty(
-                    SPECIFICATION_PROPERTY_NAME, op.getBaseClass(), ex), spec
-                    .getLocation(), ex);
-        }
-    }
-
-    public void injectSpecification(EnhancementOperation op,
-            IComponentSpecification spec)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(spec, "spec");
-        
-        op.claimReadonlyProperty(SPECIFICATION_PROPERTY_NAME);
-        
-        String fieldName = op.addInjectedField("_$"
-                + SPECIFICATION_PROPERTY_NAME, IComponentSpecification.class,
-                spec);
-
-        EnhanceUtils.createSimpleAccessor(op, fieldName,
-                SPECIFICATION_PROPERTY_NAME, IComponentSpecification.class,
-                spec.getLocation());
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectStateFlagWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectStateFlagWorker.java
deleted file mode 100644
index f4cdb5b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectStateFlagWorker.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.enhance;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.Location;

-import org.apache.hivemind.service.BodyBuilder;

-import org.apache.hivemind.service.MethodSignature;

-import org.apache.hivemind.util.Defense;

-import org.apache.tapestry.engine.state.ApplicationStateManager;

-import org.apache.tapestry.spec.InjectSpecification;

-

-import java.lang.reflect.Modifier;

-

-/**

- * Injects a boolean property that indicates if a particular application state object already

- * exists. This is useful in situations where you are trying to prevent the creation of the ASO (and

- * thus, prevent the creation of the HttpSession).

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class InjectStateFlagWorker implements InjectEnhancementWorker

-{

-    private ApplicationStateManager _applicationStateManager;

-

-    public void performEnhancement(EnhancementOperation op, InjectSpecification spec)

-    {

-        injectStateFlag(op, spec.getObject(), spec.getProperty(), spec.getLocation());

-    }

-

-    void injectStateFlag(EnhancementOperation op, String objectName, String propertyName,

-            Location location)

-    {

-        Defense.notNull(op, "op");

-        Defense.notNull(objectName, "objectName");

-        Defense.notNull(propertyName, "propertyName");

-

-        Class propertyType = op.getPropertyType(propertyName);

-

-        // null means no property at all; it's just in the XML

-        // which is ok. Otherwise, make sure it is exactly boolean.

-

-        if (propertyType != null && propertyType != boolean.class)

-            throw new ApplicationRuntimeException(EnhanceMessages.mustBeBoolean(propertyName),

-                    location, null);

-

-        op.claimReadonlyProperty(propertyName);

-

-        String managerField = op.addInjectedField(

-                "_$applicationStateManager",

-                ApplicationStateManager.class,

-                _applicationStateManager);

-

-        BodyBuilder builder = new BodyBuilder();

-        builder.begin();

-        builder.add("return {0}.exists(", managerField);

-        builder.addQuoted(objectName);

-        builder.addln(");");

-        builder.end();

-

-        String methodName = op.getAccessorMethodName(propertyName);

-

-        MethodSignature sig = new MethodSignature(boolean.class, methodName, null, null);

-

-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);

-    }

-

-    public void setApplicationStateManager(ApplicationStateManager applicationStateManager)

-    {

-        _applicationStateManager = applicationStateManager;

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectStateWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectStateWorker.java
deleted file mode 100644
index a475077..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InjectStateWorker.java
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.ClassFabUtils;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.engine.state.ApplicationStateManager;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.spec.InjectSpecification;
-
-import java.lang.reflect.Modifier;
-
-/**
- * Worker for injecting application state objects as properties of the
- * component. These properties are read/write and must be "live" (changes are
- * propogated back into the
- * {@link org.apache.tapestry.engine.state.ApplicationStateManager}).
- *
- * They should also cache in a local variable for efficiency, and clear out that
- * variable at the end of the request.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectStateWorker implements InjectEnhancementWorker
-{
-
-    private ApplicationStateManager _applicationStateManager;
-
-    public void performEnhancement(EnhancementOperation op,
-                                   InjectSpecification spec)
-    {
-        injectState(op, spec.getObject(), spec.getProperty(), spec.getLocation());
-    }
-
-    void injectState(EnhancementOperation op, String objectName,
-            String propertyName, Location location)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(objectName, "objectName");
-        Defense.notNull(propertyName, "propertyName");
-
-        Class propertyType = EnhanceUtils.extractPropertyType(op, propertyName, null);
-        String fieldName = "_$" + propertyName;
-
-        // State properties are read/write
-
-        op.claimProperty(propertyName);
-
-        op.addField(fieldName, propertyType);
-
-        String managerField = op.addInjectedField("_$applicationStateManager", ApplicationStateManager.class, _applicationStateManager);
-
-        BodyBuilder builder = new BodyBuilder();
-
-        // Accessor
-
-        builder.begin();
-        builder.addln("if ({0} == null)", fieldName);
-        builder.addln("  {0} = ({1}) {2}.get(\"{3}\");", new Object[] {
-                fieldName, ClassFabUtils.getJavaClassName(propertyType),
-                managerField, objectName });
-        builder.addln("return {0};", fieldName);
-        builder.end();
-
-        String methodName = op.getAccessorMethodName(propertyName);
-
-        MethodSignature sig = new MethodSignature(propertyType, methodName,
-                null, null);
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
-
-        // Mutator
-
-        builder.clear();
-        builder.begin();
-        builder.addln("{0}.store(\"{1}\", $1);", managerField, objectName);
-        builder.addln("{0} = $1;", fieldName);
-        builder.end();
-
-        sig = new MethodSignature(void.class, EnhanceUtils
-                .createMutatorMethodName(propertyName),
-                new Class[] { propertyType }, null);
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
-
-        // Extend pageDetached() to clean out the cached field value.
-
-        op.extendMethodImplementation(PageDetachListener.class,
-                EnhanceUtils.PAGE_DETACHED_SIGNATURE, fieldName + " = null;");
-    }
-
-    public void setApplicationStateManager(ApplicationStateManager applicationStateManager)
-    {
-        _applicationStateManager = applicationStateManager;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InterfaceFabImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InterfaceFabImpl.java
deleted file mode 100644
index 9c184b0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/InterfaceFabImpl.java
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import javassist.CtClass;
-import javassist.CtMethod;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.service.InterfaceFab;
-import org.apache.hivemind.service.MethodSignature;
-
-/**
- * @author Howard M. Lewis Ship
- */
-public class InterfaceFabImpl extends AbstractFab implements InterfaceFab
-{
-    private List _methods = new ArrayList();
-
-    public InterfaceFabImpl(CtClassSource source, CtClass ctClass)
-    {
-        super(source, ctClass);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("InterfaceFabImpl[\npublic interface ");
-
-        CtClass ctClass = getCtClass();
-
-        buffer.append(ctClass.getName());
-
-        try
-        {
-            CtClass[] interfaces = ctClass.getInterfaces();
-
-            for (int i = 0; i < interfaces.length; i++)
-            {
-                buffer.append(i == 0 ? " extends " : ", ");
-                buffer.append(interfaces[i].getName());
-            }
-
-        }
-        catch (Exception ex)
-        {
-            buffer.append("<Exception: " + ex + ">");
-        }
-
-        Iterator i = _methods.iterator();
-
-        while (i.hasNext())
-        {
-            MethodSignature sig = (MethodSignature) i.next();
-
-            buffer.append("\n\npublic ");
-            buffer.append(sig);
-            buffer.append(";");
-        }
-
-        buffer.append("\n]");
-
-        return buffer.toString();
-    }
-
-    public void addMethod(MethodSignature ms)
-    {
-        CtClass ctReturnType = convertClass(ms.getReturnType());
-        CtClass[] ctParameters = convertClasses(ms.getParameterTypes());
-        CtClass[] ctExceptions = convertClasses(ms.getExceptionTypes());
-
-        CtMethod method = new CtMethod(ctReturnType, ms.getName(), ctParameters, getCtClass());
-
-        try
-        {
-            method.setModifiers(Modifier.PUBLIC | Modifier.ABSTRACT);
-            method.setExceptionTypes(ctExceptions);
-
-            getCtClass().addMethod(method);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(EnhanceMessages.unableToAddMethod(
-                    ms,
-                    getCtClass(),
-                    ex), ex);
-        }
-
-        _methods.add(ms);
-    }
-
-    public Class createInterface()
-    {
-        return createClass();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/JavaClassMapping.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/JavaClassMapping.java
deleted file mode 100644
index 248521b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/JavaClassMapping.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- *  @author Mindbridge
- *  @since 3.0
- */
-public class JavaClassMapping
-{
-
-    /**
-     *  Map of type (as Class), keyed on type name. 
-     * 
-     */
-
-    private Map _typeMap = new HashMap();
-
-    {
-        recordType("boolean", boolean.class);
-        recordType("boolean[]", boolean[].class);
-
-        recordType("short", short.class);
-        recordType("short[]", short[].class);
-
-        recordType("int", int.class);
-        recordType("int[]", int[].class);
-
-        recordType("long", long.class);
-        recordType("long[]", long[].class);
-
-        recordType("float", float.class);
-        recordType("float[]", float[].class);
-
-        recordType("double", double.class);
-        recordType("double[]", double[].class);
-
-        recordType("char", char.class);
-        recordType("char[]", char[].class);
-
-        recordType("byte", byte.class);
-        recordType("byte[]", byte[].class);
-
-        recordType("java.lang.Object", Object.class);
-        recordType("java.lang.Object[]", Object[].class);
-
-        recordType("java.lang.String", String.class);
-        recordType("java.lang.String[]", String[].class);
-    }
-
-    public void recordType(String name, Class type)
-    {
-        _typeMap.put(name, type);
-    }
-
-    public Class getType(String name)
-    {
-        return (Class) _typeMap.get(name);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/MethodFabImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/MethodFabImpl.java
deleted file mode 100644
index e43a883..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/MethodFabImpl.java
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Modifier;
-
-import javassist.CtClass;
-import javassist.CtMethod;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.service.MethodFab;
-import org.apache.hivemind.service.MethodSignature;
-
-/**
- * Implementation of hivemind {@link MethodFab} utiltity.
- */
-public class MethodFabImpl implements MethodFab
-{
-    private CtClassSource _source;
-
-    private MethodSignature _signature;
-
-    private CtMethod _method;
-
-    private StringBuffer _descriptionBody = new StringBuffer();
-
-    public MethodFabImpl(CtClassSource source, MethodSignature signature, CtMethod method,
-            String body)
-    {
-        _source = source;
-        _signature = signature;
-        _method = method;
-
-        _descriptionBody.append(body);
-    }
-
-    /**
-     * Returns a a text representation of the method, parameters and method body.
-     */
-    public String toString()
-    {
-        if (_method == null)
-            return "";
-        
-        StringBuffer buffer = new StringBuffer();
-
-        try
-        {
-            buffer.append(Modifier.toString(_method.getModifiers()));
-
-            buffer.append(" ");
-            buffer.append(_method.getReturnType().getName());
-
-            buffer.append(" ");
-            buffer.append(_method.getName());
-            buffer.append("(");
-
-            CtClass[] params = _method.getParameterTypes();
-
-            for (int i = 0; i < params.length; i++)
-            {
-                if (i > 0)
-                    buffer.append(", ");
-
-                buffer.append(params[i].getName());
-
-                buffer.append(" $");
-                buffer.append(i + 1);
-            }
-            buffer.append(")");
-
-            CtClass[] exceptions = _method.getExceptionTypes();
-
-            for (int i = 0; i < exceptions.length; i++)
-            {
-                if (i == 0)
-                    buffer.append("\n  throws ");
-                else
-                    buffer.append(", ");
-
-                buffer.append(exceptions[i].getName());
-            }
-
-            buffer.append("\n");
-            buffer.append(_descriptionBody);
-        }
-        catch (Exception ex)
-        {
-            buffer.append(" *** ");
-            buffer.append(ex);
-        }
-
-        return buffer.toString();
-    }
-
-    public void addCatch(Class exceptionClass, String catchBody)
-    {
-        if (_method == null)
-            return;
-        
-        CtClass ctException = _source.getCtClass(exceptionClass);
-
-        try
-        {
-            _method.addCatch(catchBody, ctException);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(EnhanceMessages.unableToAddCatch(
-                    exceptionClass,
-                    _method,
-                    ex), ex);
-        }
-
-        _descriptionBody.append("\ncatch(");
-        _descriptionBody.append(exceptionClass.getName());
-        _descriptionBody.append(" $e)\n");
-        _descriptionBody.append(catchBody);
-    }
-
-    public void extend(String body, boolean asFinally)
-    {
-        if (_method == null)
-            return;
-        
-        try
-        {
-            _method.insertAfter(body, asFinally);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(EnhanceMessages.unableToExtendMethod(
-                    _signature,
-                    _method.getDeclaringClass().getName(),
-                    ex), ex);
-        }
-
-        _descriptionBody.append("\n");
-
-        if (asFinally)
-            _descriptionBody.append("finally\n");
-
-        _descriptionBody.append(body);
-    }
-
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/MethodSignature.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/MethodSignature.java
deleted file mode 100644
index 55c81af..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/MethodSignature.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-
-/**
- * A representation of a {@link java.lang.reflect.Method}, identifying the name, return type,
- * parameter types and exception types. Actual Method objects are tied to a particular class, and
- * don't compare well with other otherwise identical Methods from other classes or interface;
- * MethodSignatures are distinct from classes and compare well.
- * <p>
- * Because the intended purpose is to compare methods from interfaces (which are always public and
- * abstract) we don't bother to actually track the modifiers. In addition, at this time,
- * MethodSignature <em>does not distinguish between instance and static
- * methods</em>.
- */
-public interface MethodSignature
-{
-    /**
-     * Returns the exceptions for this method. Caution: do not modify the returned array. May return
-     * null.
-     */
-    Class[] getExceptionTypes();
-    
-    /**
-     * The name of the method.
-     * @return method name
-     */
-    String getName();
-    
-    /**
-     * Returns the parameter types for this method. May return null. Caution: do not modify the
-     * returned array.
-     */
-    Class[] getParameterTypes();
-    
-    /**
-     * Method return type.
-     * 
-     * @return The return type of the method.
-     */
-    Class getReturnType();
-    
-    /**
-     * Returns a string consisting of the name of the method and its parameter values. This is
-     * similar to {@link #toString()}, but omits the return type and information about thrown
-     * exceptions. A unique id is used by  MethodIterator to identify overlapping methods
-     * (methods with the same name but different thrown exceptions).
-     * 
-     */
-    String getUniqueId();
-    
-    /**
-     * Returns true if this signature has the same return type, name and parameters types as the
-     * method signature passed in, and this signatures exceptions "trump" (are the same as, or
-     * super-implementations of, all exceptions thrown by the other method signature).
-     * 
-     */
-
-    boolean isOverridingSignatureOf(MethodSignature ms);
-    
-    /**
-     * If the method definition has generic parameters or return types it
-     * is expected that this will return true.
-     * 
-     * @return True if this is a generics based method, false otherwise.
-     */
-    boolean isGeneric();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/MethodSignatureImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/MethodSignatureImpl.java
deleted file mode 100644
index 809a0cd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/MethodSignatureImpl.java
+++ /dev/null
@@ -1,255 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.service.ClassFabUtils;
-
-import java.lang.reflect.Method;
-
-
-/**
- * JDK 1.4 based version of {@link MethodSignature}. 
- */
-public class MethodSignatureImpl implements MethodSignature
-{
-    protected int _hashCode = -1;
-
-    protected Class _returnType;
-
-    protected String _name;
-
-    protected Class[] _parameterTypes;
-
-    protected Class[] _exceptionTypes;
-
-    public MethodSignatureImpl(Class returnType, String name, 
-            Class[] parameterTypes, Class[] exceptionTypes)
-    {
-        _returnType = returnType;
-        _name = name;
-        _parameterTypes = parameterTypes;
-        _exceptionTypes = exceptionTypes;
-    }
-    
-    public MethodSignatureImpl(Method m)
-    {
-        this(m.getReturnType(), m.getName(), m.getParameterTypes(), m.getExceptionTypes());
-    }
-    
-    public Class[] getExceptionTypes()
-    {
-        return _exceptionTypes;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-    
-    public Class[] getParameterTypes()
-    {
-        return _parameterTypes;
-    }
-
-    public Class getReturnType()
-    {
-        return _returnType;
-    }
-
-    public int hashCode()
-    {
-        if (_hashCode == -1)
-        {
-            _hashCode = _returnType.hashCode();
-
-            _hashCode = 31 * _hashCode + _name.hashCode();
-
-            int count = count(_parameterTypes);
-
-            for (int i = 0; i < count; i++)
-                _hashCode = 31 * _hashCode + _parameterTypes[i].hashCode();
-
-            count = count(_exceptionTypes);
-
-            for (int i = 0; i < count; i++)
-                _hashCode = 31 * _hashCode + _exceptionTypes[i].hashCode();
-        }
-
-        return _hashCode;
-    }
-
-    protected static int count(Object[] array)
-    {
-        return array == null ? 0 : array.length;
-    }
-
-    /**
-     * Returns true if the other object is an instance of MethodSignature with identical values for
-     * return type, name, parameter types and exception types.
-     */
-    public boolean equals(Object o)
-    {
-        if (o == null || !(o instanceof MethodSignatureImpl))
-            return false;
-
-        MethodSignatureImpl ms = (MethodSignatureImpl) o;
-
-        if (_returnType != ms._returnType)
-            return false;
-        
-        if (!_name.equals(ms._name))
-            return false;
-
-        if (mismatch(_parameterTypes, ms._parameterTypes))
-            return false;
-
-        return !mismatch(_exceptionTypes, ms._exceptionTypes);
-    }
-
-    protected boolean mismatch(Class[] a1, Class[] a2)
-    {
-        int a1Count = count(a1);
-        int a2Count = count(a2);
-
-        if (a1Count != a2Count)
-            return true;
-
-        // Hm. What if order is important (for exceptions)? We're really saying here that they
-        // were derived from the name Method.
-
-        for (int i = 0; i < a1Count; i++)
-        {
-            if (!a1[i].isAssignableFrom(a2[i]))
-                return true;
-        }
-
-        return false;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer();
-
-        buffer.append(ClassFabUtils.getJavaClassName(_returnType));
-        buffer.append(" ");
-        buffer.append(_name);
-        buffer.append("(");
-
-        for (int i = 0; i < count(_parameterTypes); i++)
-        {
-            if (i > 0)
-                buffer.append(", ");
-
-            buffer.append(ClassFabUtils.getJavaClassName(_parameterTypes[i]));
-        }
-
-        buffer.append(")");
-
-        for (int i = 0; i < count(_exceptionTypes); i++)
-        {
-            if (i == 0)
-                buffer.append(" throws ");
-            else
-                buffer.append(", ");
-
-            buffer.append(_exceptionTypes[i].getName());
-        }
-
-        return buffer.toString();
-    }
-
-    public String getUniqueId()
-    {
-        StringBuffer buffer = new StringBuffer(_name);
-        buffer.append("(");
-
-        for (int i = 0; i < count(_parameterTypes); i++)
-        {
-            if (i > 0)
-                buffer.append(",");
-
-            buffer.append(ClassFabUtils.getJavaClassName(_parameterTypes[i]));
-        }
-
-        buffer.append(")");
-
-        return buffer.toString();
-    }
-    
-    public boolean isGeneric()
-    {
-        return false;
-    }
-    
-    public boolean isOverridingSignatureOf(MethodSignature ms)
-    {
-        if (!(ms instanceof MethodSignatureImpl))
-            return false;
-        
-        MethodSignatureImpl sig = (MethodSignatureImpl)ms;
-
-        if (!sig._returnType.isAssignableFrom(_returnType))
-            return false;
-
-        if (!_name.equals(sig._name))
-            return false;
-
-        if (mismatch(_parameterTypes, sig._parameterTypes))
-            return false;
-
-        return exceptionsEncompass(sig._exceptionTypes);
-    }
-
-    /**
-     * The nuts and bolts of checking that another method signature's exceptions are a subset of
-     * this signature's.
-     */
-
-    protected boolean exceptionsEncompass(Class[] otherExceptions)
-    {
-        int ourCount = count(_exceptionTypes);
-        int otherCount = count(otherExceptions);
-
-        // If we have no exceptions, then ours encompass theirs only if they
-        // have no exceptions, either.
-
-        if (ourCount == 0)
-            return otherCount == 0;
-
-        boolean[] matched = new boolean[otherCount];
-        int unmatched = otherCount;
-
-        for (int i = 0; i < ourCount && unmatched > 0; i++)
-        {
-            for (int j = 0; j < otherCount; j++)
-            {
-                // Ignore exceptions that have already been matched
-                
-                if (matched[j])
-                    continue;
-
-                // When one of our exceptions is a super-class of one of their exceptions,
-                // then their exceptions is matched.
-                
-                if (_exceptionTypes[i].isAssignableFrom(otherExceptions[j]))
-                {
-                    matched[j] = true;
-                    unmatched--;
-                }
-            }
-        }
-
-        return unmatched == 0;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ParameterPropertyWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ParameterPropertyWorker.java
deleted file mode 100644
index 3186331..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/ParameterPropertyWorker.java
+++ /dev/null
@@ -1,295 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.ClassFabUtils;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-
-import java.lang.reflect.Modifier;
-import java.util.Iterator;
-
-/**
- * Responsible for creating properties for connected parameters.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ParameterPropertyWorker implements EnhancementWorker
-{
-
-    private ErrorLog _errorLog;
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
-    {
-        Iterator i = spec.getParameterNames().iterator();
-        while(i.hasNext())
-        {
-            String name = (String) i.next();
-
-            IParameterSpecification ps = spec.getParameter(name);
-
-            try
-            {
-                performEnhancement(op, name, ps);
-            }
-            catch (RuntimeException ex)
-            {
-                _errorLog.error(EnhanceMessages.errorAddingProperty(ps.getPropertyName(), op.getBaseClass(), ex),
-                                ps.getLocation(), ex);
-            }
-        }
-    }
-
-    /**
-     * Performs the enhancement for a single parameter; this is about to change
-     * radically in release 4.0 but for the moment we're emulating 3.0 behavior.
-     *
-     * @param op
-     *          Enhancement operation service.
-     * @param parameterName
-     *          Name of the parameter being enhanced.
-     * @param ps
-     *          Specification of parameter.
-     */
-
-    private void performEnhancement(EnhancementOperation op, String parameterName, IParameterSpecification ps)
-    {
-        // If the parameter name doesn't match, its because this is an alias
-        // for a true parameter; we ignore aliases.
-
-        if (!parameterName.equals(ps.getParameterName()))
-            return;
-
-        String propertyName = ps.getPropertyName();
-        String specifiedType = ps.getType();
-        boolean cache = ps.getCache();
-
-        addParameter(op, parameterName, propertyName, specifiedType, cache, ps.getLocation());
-    }
-
-    /**
-     * Adds a parameter as a (very smart) property.
-     *
-     * @param op
-     *            the enhancement operation
-     * @param parameterName
-     *            the name of the parameter (used to access the binding)
-     * @param propertyName
-     *            the name of the property to create (usually, but not always,
-     *            matches the parameterName)
-     * @param specifiedType
-     *            the type declared in the DTD (only 3.0 DTD supports this), may
-     *            be null (always null for 4.0 DTD)
-     * @param cache
-     *            if true, then the value should be cached while the component
-     *            renders; false (a much less common case) means that every
-     *            access will work through binding object.
-     * @param location
-     *            Used for reporting line-precise errors in binding resolution / setting / etc..
-     */
-
-    public void addParameter(EnhancementOperation op, String parameterName,
-                             String propertyName, String specifiedType, boolean cache,
-                             Location location)
-    {
-        Defense.notNull(op, "op");
-        Defense.notNull(parameterName, "parameterName");
-        Defense.notNull(propertyName, "propertyName");
-
-        Class propertyType = EnhanceUtils.extractPropertyType(op, propertyName, specifiedType);
-
-        // 3.0 would allow connected parameter properties to be fully
-        // implemented
-        // in the component class. This is not supported in 4.0 and an existing
-        // property will be overwritten in the subclass.
-
-        op.claimProperty(propertyName);
-
-        // 3.0 used to support a property for the binding itself. That's
-        // no longer the case.
-
-        String fieldName = "_$" + propertyName;
-        String defaultFieldName = fieldName + "$Default";
-        String cachedFieldName = fieldName + "$Cached";
-
-        op.addField(fieldName, propertyType);
-        op.addField(defaultFieldName, propertyType);
-        op.addField(cachedFieldName, boolean.class);
-
-        String bindingFieldName = buildBindingAccessor(op, fieldName, parameterName, location);
-
-        buildAccessor(op, propertyName, propertyType, fieldName,
-                      defaultFieldName, cachedFieldName, bindingFieldName,
-                      cache, location);
-
-        buildMutator(op, parameterName, propertyName, propertyType, fieldName,
-                     defaultFieldName, cachedFieldName, bindingFieldName, location);
-
-        extendCleanupAfterRender(op, bindingFieldName, fieldName, defaultFieldName, cachedFieldName);
-    }
-
-    String buildBindingAccessor(EnhancementOperation op, String fieldName, String parameterName, Location location)
-    {
-        BodyBuilder body = new BodyBuilder();
-        body.begin();
-        
-        String bindingFieldName = fieldName + "$Binding";
-        String bindingCheckedName = bindingFieldName + "Checked";
-
-        op.addField(bindingFieldName, IBinding.class);
-        op.addField(bindingCheckedName, Boolean.TYPE);
-
-        body.addln("if (!{0})", bindingCheckedName);
-        body.begin();
-        body.addln("{0} = getBinding(\"{1}\");", bindingFieldName, parameterName);
-        body.addln("{0} = true;", bindingCheckedName);
-        body.end();
-
-        body.addln("return {0};", bindingFieldName);
-
-        body.end();
-
-        String methodName = EnhanceUtils.createAccessorMethodName(bindingFieldName);
-
-        op.addMethod(Modifier.PUBLIC,
-                     new MethodSignature(IBinding.class, methodName, new Class[0], null),
-                     body.toString(), location);
-
-        return methodName + "()";
-    }
-
-    void extendCleanupAfterRender(EnhancementOperation op, String bindingFieldName,
-                                  String fieldName, String defaultFieldName, String cachedFieldName)
-    {
-        BodyBuilder cleanupBody = new BodyBuilder();
-
-        // Cached is only set when the field is updated in the accessor or
-        // mutator.
-        // After rendering, we want to clear the cached value and cached flag
-        // unless the binding is invariant, in which case it can stick around
-        // for some future render.
-
-        cleanupBody.addln("if ({0} && ! {1}.isInvariant())", cachedFieldName, bindingFieldName);
-        cleanupBody.begin();
-        cleanupBody.addln("{0} = false;", cachedFieldName);
-        cleanupBody.addln("{0} = {1};", fieldName, defaultFieldName);
-        cleanupBody.end();
-
-        op.extendMethodImplementation(IComponent.class,
-                                      EnhanceUtils.CLEANUP_AFTER_RENDER_SIGNATURE, cleanupBody.toString());
-    }
-
-    private void buildMutator(EnhancementOperation op, String parameterName,
-                              String propertyName, Class propertyType, String fieldName,
-                              String defaultFieldName, String cachedFieldName,
-                              String bindingFieldName, Location location)
-    {
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-
-        // The mutator method may be invoked from finishLoad(), in which
-        // case it changes the default value for the parameter property, if the
-        // parameter
-        // is not bound.
-
-        builder.addln("if (! isInActiveState())");
-        builder.begin();
-        builder.addln("{0} = $1;", defaultFieldName);
-        builder.addln("return;");
-        builder.end();
-
-        // In the normal state, we update the binding first - and it's an error
-        // if the parameter is not bound.
-
-        builder.addln("if ({0} == null)", bindingFieldName);
-        builder.addln("  throw new {0}(\"Parameter ''{1}'' is not bound and can not be updated.\");",
-                      ApplicationRuntimeException.class.getName(), parameterName);
-
-        // Always updated the binding first (which may fail with an exception).
-
-        builder.addln("{0}.setObject(($w) $1);", bindingFieldName);
-
-        // While rendering, we store the updated value for fast
-        // access again (while the component is still rendering).
-        // The property value will be reset to default by cleanupAfterRender().
-
-        builder.addln("if (isRendering())");
-        builder.begin();
-        builder.addln("{0} = $1;", fieldName);
-        builder.addln("{0} = true;", cachedFieldName);
-        builder.end();
-
-        builder.end();
-
-        String mutatorMethodName = EnhanceUtils.createMutatorMethodName(propertyName);
-
-        op.addMethod(Modifier.PUBLIC,
-                     new MethodSignature(void.class, mutatorMethodName, new Class[] { propertyType }, null),
-                     builder.toString(), location);
-    }
-
-    // Package private for testing
-
-    void buildAccessor(EnhancementOperation op, String propertyName, Class propertyType,
-                       String fieldName, String defaultFieldName, String cachedFieldName,
-                       String bindingFieldName, boolean cache, Location location)
-    {
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-
-        builder.addln("if ({0}) return {1};", cachedFieldName, fieldName);
-        builder.addln("if ({0} == null) return {1};", bindingFieldName, defaultFieldName);
-
-        String javaTypeName = ClassFabUtils.getJavaClassName(propertyType);
-
-        builder.addln("{0} result = {1};", javaTypeName, EnhanceUtils.createUnwrapExpression(op, bindingFieldName, propertyType));
-
-        // Values read via the binding are cached during the render of
-        // the component (if the parameter defines cache to be true, which
-        // is the default), or any time the binding is invariant
-        // (such as most bindings besides ExpressionBinding.
-
-        String expression = cache ? "isRendering() || {0}.isInvariant()" : "{0}.isInvariant()";
-
-        builder.addln("if (" + expression + ")", bindingFieldName);
-        builder.begin();
-        builder.addln("{0} = result;", fieldName);
-        builder.addln("{0} = true;", cachedFieldName);
-        builder.end();
-
-        builder.addln("return result;");
-
-        builder.end();
-
-        String accessorMethodName = op.getAccessorMethodName(propertyName);
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(propertyType,
-                                                          accessorMethodName, null, null), builder.toString(), location);
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/SpecifiedPropertyWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/SpecifiedPropertyWorker.java
deleted file mode 100644
index c1583cb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/SpecifiedPropertyWorker.java
+++ /dev/null
@@ -1,198 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.BindingSource;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IPropertySpecification;
-
-import java.lang.reflect.Modifier;
-import java.util.Iterator;
-
-/**
- * Responsible for adding properties to a class corresponding to specified
- * properties in the component's specification - which may come from .jwc / .page specifications
- * or annotated abstract methods.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class SpecifiedPropertyWorker implements EnhancementWorker
-{
-    private ErrorLog _errorLog;
-
-    private BindingSource _bindingSource;
-    
-    /**
-     * Iterates over the specified properties, creating an enhanced property for
-     * each (a field, an accessor, a mutator). Persistent properties will invoke
-     * {@link org.apache.tapestry.Tapestry#fireObservedChange(IComponent, String, Object)}in
-     * thier mutator.
-     */
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
-    {
-        Iterator i = spec.getPropertySpecificationNames().iterator();
-
-        while(i.hasNext())
-        {
-            String name = (String) i.next();
-            IPropertySpecification ps = spec.getPropertySpecification(name);
-            
-            try
-            {
-                performEnhancement(op, ps);
-            }
-            catch (RuntimeException ex)
-            {
-                _errorLog.error(EnhanceMessages.errorAddingProperty(name, op
-                        .getBaseClass(), ex), ps.getLocation(), ex);
-            }
-        }
-    }
-
-    private void performEnhancement(EnhancementOperation op,
-            IPropertySpecification ps)
-    {
-        Defense.notNull(ps, "ps");
-
-        String propertyName = ps.getName();
-        String specifiedType = ps.getType();
-        boolean persistent = ps.isPersistent();
-        String initialValue = ps.getInitialValue();
-        Location location = ps.getLocation();
-        
-        addProperty(op, propertyName, specifiedType, persistent, initialValue, location, ps);
-    }
-
-    public void addProperty(EnhancementOperation op, String propertyName, String specifiedType, 
-            boolean persistent, String initialValue, Location location, IPropertySpecification ps)
-    {
-        Class propertyType = EnhanceUtils.extractPropertyType(op, propertyName, specifiedType, ps.isGeneric());
-
-        op.claimProperty(propertyName);
-
-        String field = "_$" + propertyName;
-
-        op.addField(field, propertyType);
-
-        // Release 3.0 would squack a bit about overriding non-abstract methods
-        // if they exist. 4.0 is less picky ... it blindly adds new methods,
-        // possibly
-        // overwriting methods in the base component class.
-        
-        EnhanceUtils.createSimpleAccessor(op, field, propertyName, propertyType, location);
-                
-        addMutator(op, propertyName, propertyType, field, persistent, location);
-        
-        if (initialValue == null)
-            addReinitializer(op, propertyType, field);
-        else 
-            addInitialValue(op, propertyName, propertyType, field, initialValue, persistent, location);
-    }
-
-    private void addReinitializer(EnhancementOperation op, Class propertyType, String fieldName)
-    {
-        String defaultFieldName = fieldName + "$default";
-        
-        op.addField(defaultFieldName, propertyType);
-        
-        // On finishLoad(), store the current value into the default field.
-
-        op.extendMethodImplementation(IComponent.class, EnhanceUtils.FINISH_LOAD_SIGNATURE, 
-                defaultFieldName + " = " + fieldName + ";");
-
-        // On pageDetach(), restore the attribute to its default value.
-        
-        op.extendMethodImplementation(PageDetachListener.class,
-                EnhanceUtils.PAGE_DETACHED_SIGNATURE, fieldName + " = " + defaultFieldName + ";");
-    }
-
-    private void addInitialValue(EnhancementOperation op, String propertyName, Class propertyType, 
-            String fieldName, String initialValue, boolean persistent, Location location)
-    {
-        String description = EnhanceMessages.initialValueForProperty(propertyName);
-
-        InitialValueBindingCreator creator = 
-            new InitialValueBindingCreator(_bindingSource, description, initialValue, location);
-        
-        String creatorField = op.addInjectedField(fieldName + "$initialValueBindingCreator", InitialValueBindingCreator.class, creator);
-
-        String bindingField = fieldName + "$initialValueBinding";
-        op.addField(bindingField, IBinding.class);
-
-        BodyBuilder builder = new BodyBuilder();
-        
-        builder.addln("{0} = {1}.createBinding(this);", bindingField, creatorField);
-
-        op.extendMethodImplementation(IComponent.class, EnhanceUtils.FINISH_LOAD_SIGNATURE, builder.toString());
-
-        builder.clear();
-        
-        builder.addln("{0} = {1};", fieldName, EnhanceUtils.createUnwrapExpression(op, bindingField, propertyType));
-        
-        String code = builder.toString();
-        
-        // In finishLoad() and pageDetach(), de-reference the binding to get the
-        // value
-        // for the property.
-
-        op.extendMethodImplementation(IComponent.class, EnhanceUtils.FINISH_LOAD_SIGNATURE, code);
-        
-        op.extendMethodImplementation(PageDetachListener.class, EnhanceUtils.PAGE_DETACHED_SIGNATURE, code);
-    }
-
-    private void addMutator(EnhancementOperation op, String propertyName,
-            Class propertyType, String fieldName, boolean persistent, Location location)
-    {
-        String methodName = EnhanceUtils.createMutatorMethodName(propertyName);
-
-        BodyBuilder body = new BodyBuilder();
-
-        body.begin();
-        
-        if (persistent) {
-            
-            body.add("org.apache.tapestry.Tapestry#fireObservedChange(this, ");
-            body.addQuoted(propertyName);
-            body.addln(", ($w) $1);");
-        }
-
-        body.addln(fieldName + " = $1;");
-        body.end();
-        
-        MethodSignature sig = new MethodSignature(void.class, methodName, new Class[] { propertyType }, null);
-
-        op.addMethod(Modifier.PUBLIC, sig, body.toString(), location);
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-
-    public void setBindingSource(BindingSource bindingSource)
-    {
-        _bindingSource = bindingSource;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/package.html
deleted file mode 100644
index 4aa7ba0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/enhance/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-Classes used for performing dynamic bytecode enhancement of component and page classes.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ErrorMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ErrorMessages.java
deleted file mode 100644
index b817772..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ErrorMessages.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class ErrorMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(ErrorMessages.class);
-
-    /* defeat instantiation */
-    private ErrorMessages() { }
-    
-    public static String unableToProcessClientRequest(Throwable cause)
-    {
-        return _formatter.format("unable-to-process-client-request", cause);
-    }
-
-    static String unableToPresentExceptionPage(Throwable cause)
-    {
-        return _formatter.format("unable-to-present-exception-page", cause);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ErrorStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ErrorStrings.properties
deleted file mode 100644
index 17271d0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ErrorStrings.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-unable-to-process-client-request=Unable to process client request: {0}
-unable-to-present-exception-page=Unable to present exception page: {0}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ExceptionPresenter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ExceptionPresenter.java
deleted file mode 100644
index 352b6e5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ExceptionPresenter.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Invoked by the {@link org.apache.tapestry.IEngine} if there's an uncaught
- * exception (checked or runtime) processing a request. The ExceptionPresenter
- * is responsible for presenting a exception message (or description) to the
- * user. The default implementation activates the "Exception" page, but it is
- * common to override this to do something application specific (typically,
- * return to the Home page and display an error message there). This service
- * also provides a good hook for creating a server-side log of exceptions.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see RequestExceptionReporter
- */
-public interface ExceptionPresenter
-{
-
-    /**
-     * Report the exception and provide some response to the user in lieu of the
-     * expected result page.
-     * 
-     * @param cycle
-     *            the current request cycle
-     * @param cause
-     *            the exception that was caught
-     */
-
-    void presentException(IRequestCycle cycle, Throwable cause);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ExceptionPresenterImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ExceptionPresenterImpl.java
deleted file mode 100644
index 8c0f14f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/ExceptionPresenterImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.ResponseRenderer;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ExceptionPresenterImpl implements ExceptionPresenter
-{
-
-    private RequestExceptionReporter _requestExceptionReporter;
-
-    private ResponseRenderer _responseRenderer;
-
-    private String _exceptionPageName;
-
-    private boolean _verbose;
-
-    public void presentException(IRequestCycle cycle, Throwable cause)
-    {
-        try
-        {
-            IPage exceptionPage = cycle.getPage(_exceptionPageName);
-            
-            PropertyUtils.write(exceptionPage, "exception", cause);
-            
-            cycle.activate(exceptionPage);
-
-            _responseRenderer.renderResponse(cycle);
-        }
-        catch (Throwable ex)
-        {
-            // Worst case scenario. The exception page itself is broken, leaving
-            // us with no option but to write the cause to the output.
-
-            _requestExceptionReporter.reportRequestException(ErrorMessages
-                    .unableToProcessClientRequest(cause), cause);
-
-            // Also, write the exception thrown when redendering the exception
-            // page, so that can get fixed as well.
-
-            _requestExceptionReporter.reportRequestException(ErrorMessages
-                    .unableToPresentExceptionPage(ex), ex);
-
-            // And throw the exception.
-
-            throw new ApplicationRuntimeException(ex.getMessage(), ex);
-        }
-
-        if (_verbose)
-            _requestExceptionReporter.reportRequestException(ErrorMessages
-                    .unableToProcessClientRequest(cause), cause);
-    }
-
-    public void setExceptionPageName(String exceptionPageName)
-    {
-        _exceptionPageName = exceptionPageName;
-    }
-
-    public void setRequestExceptionReporter(
-            RequestExceptionReporter requestExceptionReporter)
-    {
-        _requestExceptionReporter = requestExceptionReporter;
-    }
-
-    public void setResponseRenderer(ResponseRenderer responseRenderer)
-    {
-        _responseRenderer = responseRenderer;
-    }
-
-    public boolean isVerbose()
-    {
-        return _verbose;
-    }
-
-    public void setVerbose(boolean verbose)
-    {
-        _verbose = verbose;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/RequestExceptionReporter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/RequestExceptionReporter.java
deleted file mode 100644
index 3af751e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/RequestExceptionReporter.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-/**
- * Service responsible for producing console output when there is an error
- * processing the request (and the normal Exception page can not be displayed).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.error.ExceptionPresenter
- */
-public interface RequestExceptionReporter
-{
-
-    void reportRequestException(String message, Throwable cause);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/RequestExceptionReporterImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/RequestExceptionReporterImpl.java
deleted file mode 100644
index 469d26f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/RequestExceptionReporterImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-import org.apache.commons.logging.Log;
-import org.apache.tapestry.util.exception.ExceptionAnalyzer;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class RequestExceptionReporterImpl implements RequestExceptionReporter
-{
-
-    private Log _log;
-
-    private WebRequest _request;
-
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-
-    public void reportRequestException(String message, Throwable cause)
-    {
-        _log.warn(message, cause);
-
-        System.err
-                .println("\n\n**********************************************************\n\n");
-
-        System.err.println(message);
-
-        System.err.println("\n");
-
-        WebSession session = _request.getSession(false);
-
-        if (session != null)
-            System.err.println("      Session id    : " + session.getId());
-
-        System.err.println("\nExceptions:\n");
-
-        new ExceptionAnalyzer().reportException(cause, System.err);
-
-        System.err
-                .println("\n**********************************************************\n");
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenter.java
deleted file mode 100644
index ada5faa..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenter.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleLinkException;
-
-/**
- * Service interface for informing the user about a
- * {@link org.apache.tapestry.StaleLinkException}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface StaleLinkExceptionPresenter
-{
-
-    /**
-     * Reports the stale link exception.
-     * 
-     * @param cycle
-     *            the current request cycle
-     * @param cause
-     *            the exception that was caught
-     */
-    void presentStaleLinkException(IRequestCycle cycle, StaleLinkException cause)
-        throws IOException;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenterImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenterImpl.java
deleted file mode 100644
index 83cc420..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleLinkExceptionPresenterImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-import java.io.IOException;
-
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleLinkException;
-import org.apache.tapestry.services.ResponseRenderer;
-
-/**
- * Implementation of
- * {@link org.apache.tapestry.error.StaleLinkExceptionPresenter} that uses a
- * page to present the exception. The page must implement a property named
- * "message" of type String and should present that message to the user.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class StaleLinkExceptionPresenterImpl implements StaleLinkExceptionPresenter
-{
-    private ResponseRenderer _responseRenderer;
-    
-    private String _pageName;
-    
-    public void presentStaleLinkException(IRequestCycle cycle, StaleLinkException cause)
-        throws IOException
-    {
-        IPage exceptionPage = cycle.getPage(_pageName);
-        
-        PropertyUtils.write(exceptionPage, "message", cause.getMessage());
-
-        cycle.activate(exceptionPage);
-
-        _responseRenderer.renderResponse(cycle);
-    }
-
-    public void setPageName(String pageName)
-    {
-        _pageName = pageName;
-    }
-
-    public void setResponseRenderer(ResponseRenderer responseRenderer)
-    {
-        _responseRenderer = responseRenderer;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenter.java
deleted file mode 100644
index 4791592..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleSessionException;
-
-/**
- * Interface for a service used to report stale session exceptions.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface StaleSessionExceptionPresenter
-{
-
-    /**
-     * Reports the stale session exception.
-     * 
-     * @param cycle
-     *            the current request cycle
-     * @param cause
-     *            the exception that was caught
-     */
-    void presentStaleSessionException(IRequestCycle cycle, StaleSessionException cause)
-        throws IOException;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenterImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenterImpl.java
deleted file mode 100644
index 515ad07..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/StaleSessionExceptionPresenterImpl.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleSessionException;
-import org.apache.tapestry.services.ResponseRenderer;
-
-/**
- * Used to activate a particular page to report the
- * {@link org.apache.tapestry.StaleSessionException}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class StaleSessionExceptionPresenterImpl implements StaleSessionExceptionPresenter
-{
-    private ResponseRenderer _responseRenderer;
-
-    private String _pageName;
-
-    public void presentStaleSessionException(IRequestCycle cycle, StaleSessionException cause)
-            throws IOException
-    {
-        IPage exceptionPage = cycle.getPage(_pageName);
-
-        cycle.activate(exceptionPage);
-
-        _responseRenderer.renderResponse(cycle);
-    }
-
-    public void setPageName(String pageName)
-    {
-        _pageName = pageName;
-    }
-
-    public void setResponseRenderer(ResponseRenderer responseRenderer)
-    {
-        _responseRenderer = responseRenderer;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/package.html
deleted file mode 100644
index 332bc00..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/error/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-Defines various services / utilies for error reporting.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/BrowserEvent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/BrowserEvent.java
deleted file mode 100644
index e568fb2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/BrowserEvent.java
+++ /dev/null
@@ -1,320 +0,0 @@
-// Copyright May 20, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.event;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.json.JSONArray;
-
-import java.text.ParseException;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * Represents a client side generated browser event.
- */
-public class BrowserEvent
-{
-    public static final String NAME="beventname";
-    public static final String TYPE="beventtype";
-    public static final String KEYS="beventkeys";
-    public static final String CHAR_CODE="beventcharCode";
-    public static final String PAGE_X="beventpageX";
-    public static final String PAGE_Y="beventpageY";
-    public static final String LAYER_X="beventlayerX";
-    public static final String LAYER_Y="beventlayerY";
-
-    public static final String TARGET="beventtarget";
-    public static final String TARGET_ATTR_ID="id";
-    public static final String COMPONENT_ID = "bcomponentid";
-
-    public static final String METHOD_ARGUMENTS="methodArguments";
-
-    private String _name;
-    private String _type;
-    private String[] _keys;
-    private String _charCode;
-    private String _pageX;
-    private String _pageY;
-    private String _layerX;
-    private String _layerY;
-    private EventTarget _target;
-    private String _componentId;
-    
-    private String _methodArguments;
-    private JSONArray _methodArgumentsArray;
-
-    /**
-     * Creates a new browser event that will extract its own
-     * parameters.
-     *
-     * @param cycle
-     *          The request cycle to extract parameters from.
-     */
-    public BrowserEvent(IRequestCycle cycle)
-    {
-        Defense.notNull(cycle, "cycle");
-
-        _name = cycle.getParameter(NAME);
-        _type = cycle.getParameter(TYPE);
-        _keys = cycle.getParameters(KEYS);
-        _charCode = cycle.getParameter(CHAR_CODE);
-        _pageX = cycle.getParameter(PAGE_X);
-        _pageY = cycle.getParameter(PAGE_Y);
-        _layerX = cycle.getParameter(LAYER_X);
-        _layerY = cycle.getParameter(LAYER_Y);
-        _componentId = cycle.getParameter(COMPONENT_ID);
-
-        Map props = new HashMap();
-        _target = new EventTarget(props);
-
-        String targetId = cycle.getParameter(TARGET + "." + TARGET_ATTR_ID);
-        if (targetId != null)
-        {
-            props.put(TARGET_ATTR_ID, targetId);
-        }
-
-        _methodArguments = cycle.getParameter(METHOD_ARGUMENTS);
-    }
-
-    /**
-     * Creates a new browser event with the specified
-     * name/target properties.
-     *
-     * @param name The name of the event, ie "onClick", "onBlur", etc..
-     * @param target The target of the client side event.
-     */
-    public BrowserEvent(String name, EventTarget target)
-    {
-        this(name, null, target);
-    }
-
-    /**
-     * Creates a new browser event with the specified
-     * name/target properties.
-     *
-     * @param name The name of the event, ie "onClick", "onBlur", etc..
-     * @param componentId Component targeted.
-     * @param target The target of the client side event.
-     */
-    public BrowserEvent(String name, String componentId, EventTarget target)
-    {
-        _name = name;
-        _target = target;
-        _componentId = componentId;
-    }
-
-    /**
-     * The name of the event that was generated. 
-     *
-     * <p>
-     * Examples would be <code>onClick,onSelect,onLoad,etc...</code>.
-     * </p>
-     * @return The event name.
-     */
-    public String getName()
-    {
-        return _name;
-    }
-
-    /**
-     * Returns the target of the client side event.
-     *
-     * @return The target representation of the client side object event originally bound for.
-     */
-    public EventTarget getTarget()
-    {
-        return _target;
-    }
-
-    /**
-     * Only when the event targeted a {@link org.apache.tapestry.IComponent} - will return the originating
-     * components id as returned from {@link org.apache.tapestry.IComponent#getId()}.  <em>Not</em> present
-     * on element events.
-     *
-     * @return The originating component id that generated the event.
-     */
-    public String getComponentId()
-    {
-        return _componentId;
-    }
-    
-    /**
-     * @return the charCode
-     */
-    public String getCharCode()
-    {
-        return _charCode;
-    }
-
-    /**
-     * @return the keys
-     */
-    public String[] getKeys()
-    {
-        return _keys;
-    }
-
-    /**
-     * @return the layerX
-     */
-    public String getLayerX()
-    {
-        return _layerX;
-    }
-
-    /**
-     * @return the layerY
-     */
-    public String getLayerY()
-    {
-        return _layerY;
-    }
-
-    /**
-     * @return the pageX
-     */
-    public String getPageX()
-    {
-        return _pageX;
-    }
-
-    /**
-     * @return the pageY
-     */
-    public String getPageY()
-    {
-        return _pageY;
-    }
-
-    /**
-     * @return the type
-     */
-    public String getType()
-    {
-        return _type;
-    }
-
-
-    /**
-     * @return the method arguments of an intercepted method-call, if any. If none
-     *         are available, return an empty JSONArray, never null.
-     *
-     * @throws ApplicationRuntimeException when the JSON-String could not be
-     *         parsed.
-     */
-    public JSONArray getMethodArguments()
-    {
-        if ( _methodArgumentsArray == null)
-        {
-            try
-            {
-                _methodArgumentsArray = _methodArguments != null
-                                        ? new JSONArray( _methodArguments )
-                                        : new JSONArray();
-            }
-            catch (ParseException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-        }
-        
-        return _methodArgumentsArray;
-    }
-
-    /**
-     * Utility method to check if the current request contains
-     * a browser event.
-     *
-     * @param cycle
-     *          The associated request.
-     * @return True if the request contains browser event data.
-     */
-    public static boolean hasBrowserEvent(IRequestCycle cycle)
-    {
-        Defense.notNull(cycle, "cycle");
-
-        return cycle.getParameter(NAME) != null;
-    }
-
-    public String toString()
-    {
-        return "BrowserEvent[" +
-               "_name='" + _name + '\'' +
-               '\n' +
-               ", _type='" + _type + '\'' +
-               '\n' +
-               ", _keys=" + (_keys == null ? null : Arrays.asList(_keys)) +
-               '\n' +
-               ", _charCode='" + _charCode + '\'' +
-               '\n' +
-               ", _pageX='" + _pageX + '\'' +
-               '\n' +
-               ", _pageY='" + _pageY + '\'' +
-               '\n' +
-               ", _layerX='" + _layerX + '\'' +
-               '\n' +
-               ", _layerY='" + _layerY + '\'' +
-               '\n' +
-               ", _target=" + _target +
-               '\n' +
-               ", _methodArguments='" + _methodArguments + '\'' +
-               '\n' +
-               ", _methodArgumentsArray=" + _methodArgumentsArray +
-               '\n' +
-               ']';
-    }
-
-    public boolean equals(Object o)
-    {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        BrowserEvent event = (BrowserEvent) o;
-
-        if (_charCode != null ? !_charCode.equals(event._charCode) : event._charCode != null) return false;
-        if (!Arrays.equals(_keys, event._keys)) return false;
-        if (_layerX != null ? !_layerX.equals(event._layerX) : event._layerX != null) return false;
-        if (_layerY != null ? !_layerY.equals(event._layerY) : event._layerY != null) return false;
-        if (_methodArguments != null ? !_methodArguments.equals(event._methodArguments) : event._methodArguments != null) return false;
-        if (_methodArgumentsArray != null ? !_methodArgumentsArray.equals(event._methodArgumentsArray) : event._methodArgumentsArray != null) return false;
-        if (_name != null ? !_name.equals(event._name) : event._name != null) return false;
-        if (_pageX != null ? !_pageX.equals(event._pageX) : event._pageX != null) return false;
-        if (_pageY != null ? !_pageY.equals(event._pageY) : event._pageY != null) return false;
-        if (_target != null ? !_target.equals(event._target) : event._target != null) return false;
-        if (_type != null ? !_type.equals(event._type) : event._type != null) return false;
-
-        return true;
-    }
-
-    public int hashCode()
-    {
-        int result;
-        result = (_name != null ? _name.hashCode() : 0);
-        result = 31 * result + (_type != null ? _type.hashCode() : 0);
-        result = 31 * result + (_keys != null ? Arrays.hashCode(_keys) : 0);
-        result = 31 * result + (_charCode != null ? _charCode.hashCode() : 0);
-        result = 31 * result + (_pageX != null ? _pageX.hashCode() : 0);
-        result = 31 * result + (_pageY != null ? _pageY.hashCode() : 0);
-        result = 31 * result + (_layerX != null ? _layerX.hashCode() : 0);
-        result = 31 * result + (_layerY != null ? _layerY.hashCode() : 0);
-        result = 31 * result + (_target != null ? _target.hashCode() : 0);
-        result = 31 * result + (_methodArguments != null ? _methodArguments.hashCode() : 0);
-        result = 31 * result + (_methodArgumentsArray != null ? _methodArgumentsArray.hashCode() : 0);
-        return result;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ChangeObserver.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ChangeObserver.java
deleted file mode 100644
index bdb6690..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ChangeObserver.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-/**
- * May observe changes in an object's properties.  This is a "weak" variation
- * on JavaBean's style bound properties.  It is used when there will be at most
- * a single listener on property changes, and that the listener is not interested
- * in the old value.
- *
- * @author Howard Lewis Ship
- * 
- **/
-
-public interface ChangeObserver
-{
-    /**
-     *  Sent when the observed object changes a property.  The event identifies
-     *  the object, the property and the new value.
-     *
-     **/
-
-    void observeChange(ObservedChangeEvent event);
-    
-    /**
-     * Checks if the current state changes have already been committed.
-     * 
-     * @return True if state changes are locked, false otherwise.
-     */
-    boolean isLocked();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/EventTarget.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/EventTarget.java
deleted file mode 100644
index a7d00b2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/EventTarget.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright May 21, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.event;
-
-import java.util.Map;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-
-
-/**
- * Represents a browser generated event "target". Most browser events will
- * have an event.target property, which is what this represents.
- * 
- * @author jkuhnert
- */
-public class EventTarget
-{
-    private final Map _properties;
-    
-    /**
-     * Creates a new target with an immutable set
-     * of properties.
-     * 
-     * @param properties The properties of the target.
-     */
-    public EventTarget(Map properties)
-    {
-        _properties = properties;
-    }
-    
-    /**
-     * Gets a target object property. (Could be things like "id" 
-     * for html dom nodes, etc..)
-     * @param key The key of the property.
-     * @return The property value, or null if it doesn't exist.
-     */
-    public Object get(String key)
-    {
-        return _properties.get(key);
-    }
-    
-    public String toString()
-    {
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-        .append("properties", _properties)
-        .toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ObservedChangeEvent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ObservedChangeEvent.java
deleted file mode 100644
index 78ee4a7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ObservedChangeEvent.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventObject;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-
-/**
- * Event which describes a change to a particular {@link IComponent}.
- * 
- * @author Howard Ship
- */
-
-public class ObservedChangeEvent extends EventObject
-{
-
-    private static final long serialVersionUID = -7693394232554811975L;
-
-    private IComponent _component;
-
-    private String _propertyName;
-
-    private Object _newValue;
-
-    /**
-     * Creates the event. The new value must be null, or be a serializable
-     * object. (It is declared as Object as a concession to the Java 2
-     * collections framework, where the implementations are serializable but the
-     * interfaces (Map, List, etc.) don't extend Serializable ... so we wait
-     * until runtime to check).
-     * 
-     * @param component
-     *            The component (not necessarily a page) whose property changed.
-     * @param propertyName
-     *            the name of the property which was changed.
-     * @param newValue
-     *            The new value of the property.
-     * @throws IllegalArgumentException
-     *             if propertyName is null, or if the new value is not
-     *             serializable
-     */
-
-    public ObservedChangeEvent(IComponent component, String propertyName, Object newValue)
-    {
-        super(component);
-
-        Defense.notNull(propertyName, "propertyName");
-
-        _component = component;
-        _propertyName = propertyName;
-        _newValue = newValue;
-    }
-
-    public IComponent getComponent()
-    {
-        return _component;
-    }
-
-    public Object getNewValue()
-    {
-        return _newValue;
-    }
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageAttachListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageAttachListener.java
deleted file mode 100644
index 7160d5f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageAttachListener.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventListener;
-
-/**
- * Listener interface notified when a page is attached to the current request. Notifications occur
- * after persistent page properties have been restored, but before the page is activated (if it is
- * activated). This allows the properties of the page to be updated to reflect the current user
- * session.
- * 
- * @see org.apache.tapestry.event.PageDetachListener
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface PageAttachListener extends EventListener
-{
-    void pageAttached(PageEvent event);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageBeginRenderListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageBeginRenderListener.java
deleted file mode 100644
index a8f2995..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageBeginRenderListener.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventListener;
-
-/**
- * Event listener for determining when a page is about to start rendering.
- * Rendering includes the replay of a form to handle form submissions.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface PageBeginRenderListener extends EventListener
-{
-
-    /**
-     * Invoked before just before the page renders a response. This provides
-     * listeners with a last chance to initialize themselves for the render.
-     * This initialization can include modifying peristent page properties.
-     */
-
-    void pageBeginRender(PageEvent event);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageDetachListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageDetachListener.java
deleted file mode 100644
index b2271d1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageDetachListener.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventListener;
-
-/**
- * An interface for objects that want to know when the end of the request cycle occurs, so that any
- * resources that should be limited to just one request cycle can be released.
- * 
- * @see org.apache.tapestry.event.PageAttachListener
- * @author Howard Lewis Ship
- * @since 1.0.5
- */
-
-public interface PageDetachListener extends EventListener
-{
-    /**
-     * Invoked by the page from its {@link org.apache.tapestry.IPage#detach()}method.
-     */
-
-    void pageDetached(PageEvent event);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageEndRenderListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageEndRenderListener.java
deleted file mode 100644
index e83dd8e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageEndRenderListener.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventListener;
-
-/**
- * Counterpart to {@link org.apache.tapestry.event.PageBeginRenderListener}, for the (typically
- * less-interesting) end of page render event.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface PageEndRenderListener extends EventListener
-{
-    /**
-     * Invoked after a successful render of the page. Allows objects to release any resources they
-     * needed during the the render.
-     * 
-     * @see org.apache.tapestry.AbstractComponent#pageEndRender(PageEvent)
-     */
-
-    void pageEndRender(PageEvent event);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageEvent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageEvent.java
deleted file mode 100644
index e2e5a5a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageEvent.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventObject;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Encapsulates information related to the page listener interfaces.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.5
- */
-
-public class PageEvent extends EventObject
-{
-
-    private static final long serialVersionUID = -6167989946862112436L;
-
-    private transient IPage _page;
-    private transient IRequestCycle _requestCycle;
-
-    /**
-     * Constructs a new instance of the event. The
-     * {@link EventObject#getSource()} of the event will be the {@link IPage}.
-     */
-
-    public PageEvent(IPage page, IRequestCycle cycle)
-    {
-        super(page);
-
-        this._page = page;
-        this._requestCycle = cycle;
-    }
-
-    public IPage getPage()
-    {
-        return _page;
-    }
-
-    public IRequestCycle getRequestCycle()
-    {
-        return _requestCycle;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageRenderListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageRenderListener.java
deleted file mode 100644
index b036224..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageRenderListener.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-/**
- * An object that listens to page events. The
- * {@link org.apache.tapestry.IPage page}generates events before and after
- * rendering a response. These events also occur before and after a form
- * rewinds.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.5
- * @deprecated To be removed in 4.1. Use
- *             {@link org.apache.tapestry.event.PageBeginRenderListener} and/or
- *             {@link org.apache.tapestry.event.PageEndRenderListener}.
- */
-
-public interface PageRenderListener extends PageBeginRenderListener,
-        PageEndRenderListener
-{
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageValidateListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageValidateListener.java
deleted file mode 100644
index 8439c4e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/PageValidateListener.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventListener;
-
-/**
- * An interface for objects that want to take part in the validation of the
- * page.
- * 
- * @author Mindbridge
- * @since 3.0
- */
-
-public interface PageValidateListener extends EventListener
-{
-
-    /**
-     * Invoked by the page from its
-     * {@link org.apache.tapestry.IPage#validate(org.apache.tapestry.IRequestCycle)}
-     * method.
-     * <p>
-     * May throw a {@link org.apache.tapestry.PageRedirectException}, to
-     * redirect the user to an appropriate part of the system (such as, a login
-     * page).
-     */
-
-    void pageValidate(PageEvent event);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ReportStatusEvent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ReportStatusEvent.java
deleted file mode 100644
index 857d415..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ReportStatusEvent.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.event;

-

-import java.util.Collection;

-import java.util.EventObject;

-

-import org.apache.hivemind.util.Defense;

-import org.apache.tapestry.describe.DescriptionReceiver;

-

-/**

- * Event object used by {@link org.apache.tapestry.event.ReportStatusListener};

- * the event implements {@link org.apache.tapestry.describe.DescriptionReceiver};

- * classes (typically, HiveMind service implementations) that implement the

- * listener interface will "describe" themselves to the event.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class ReportStatusEvent extends EventObject implements

-        DescriptionReceiver

-{

-

-    /**

-     * serialVersionUID.

-     */

-    private static final long serialVersionUID = 7546818328708861783L;

-    

-    private final DescriptionReceiver _receiver;

-

-    public ReportStatusEvent(Object source, DescriptionReceiver receiver)

-    {

-        super(source);

-

-        Defense.notNull(receiver, "receiver");

-

-        _receiver = receiver;

-    }

-

-    public void array(String key, Object[] values)

-    {

-        _receiver.array(key, values);

-    }

-

-    public void collection(String key, Collection values)

-    {

-        _receiver.collection(key, values);

-    }

-

-    public void describeAlternate(Object alternate)

-    {

-        _receiver.describeAlternate(alternate);

-    }

-

-    public void property(String key, boolean value)

-    {

-        _receiver.property(key, value);

-    }

-

-    public void property(String key, byte value)

-    {

-        _receiver.property(key, value);

-    }

-

-    public void property(String key, char value)

-    {

-        _receiver.property(key, value);

-    }

-

-    public void property(String key, double value)

-    {

-        _receiver.property(key, value);

-    }

-

-    public void property(String key, float value)

-    {

-        _receiver.property(key, value);

-    }

-

-    public void property(String key, int value)

-    {

-        _receiver.property(key, value);

-    }

-

-    public void property(String key, long value)

-    {

-        _receiver.property(key, value);

-    }

-

-    public void property(String key, Object value)

-    {

-        _receiver.property(key, value);

-    }

-

-    public void property(String key, short value)

-    {

-        _receiver.property(key, value);

-    }

-

-    public void section(String section)

-    {

-        _receiver.section(section);

-    }

-

-    public void title(String title)

-    {

-        _receiver.title(title);

-    }

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ReportStatusListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ReportStatusListener.java
deleted file mode 100644
index 4b3a9a2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ReportStatusListener.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.event;

-

-import java.util.EventListener;

-

-/**

- * Implemented by (typically) a HiveMind service implementation, and registerred with the

- * {@link org.apache.tapestry.describe.ReportStatusHub} so that the service can report its status

- * (in terms of properties and values).

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public interface ReportStatusListener extends EventListener

-{

-    void reportStatus(ReportStatusEvent event);

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ResetEventListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ResetEventListener.java
deleted file mode 100644
index d768604..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/ResetEventListener.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventListener;
-
-/**
- * Listener interface for objects interested in a Tapestry reset event. Reset
- * events occur when cached data should be released (this may happend as often
- * as every request in a development configuration).
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ResetEventListener extends EventListener
-{
-    void resetEventDidOccur();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/package.html
deleted file mode 100644
index 53f286b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/event/package.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-Defines events and listener interfaces for Tapestry.
-
-<p>
-{@link org.apache.tapestry.event.ChangeObserver}
-and
-{@link org.apache.tapestry.event.ObservedChangeEvent}
-are used to communicate changes in persistent properties
-from pages and components to page recorders.
-
-<p>
-The remaining interfaces
-{@link org.apache.tapestry.event.PageDetachListener} and
-{@link org.apache.tapestry.event.PageRenderListener} allow
-objects to know about key lifecycle events regarding
-a page.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
deleted file mode 100644
index 338df27..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
+++ /dev/null
@@ -1,203 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidationConstants;
-
-/**
- * A base class for building components that correspond to HTML form elements. All such components
- * must be wrapped (directly or indirectly) by a {@link Form} component.
- *
- * @author Howard Lewis Ship
- * @author Paul Ferraro
- * @since 1.0.3
- */
-public abstract class AbstractFormComponent extends AbstractComponent implements IFormComponent
-{
-
-    public abstract IForm getForm();
-
-    public abstract void setForm(IForm form);
-
-    public abstract String getName();
-
-    public abstract void setName(String name);
-
-    /**
-     * Returns true if the corresponding field, on the client side, can accept user focus (i.e.,
-     * implements the focus() method). Most components can take focus (if not disabled), but a few ({@link Hidden})
-     * override this method to always return false.
-     */
-
-    protected boolean getCanTakeFocus()
-    {
-        return !isDisabled();
-    }
-
-    /**
-     * Should be connected to a parameter named "id" (annotations would be helpful here!). For
-     * components w/o such a parameter, this will simply return null.
-     */
-
-    public abstract String getIdParameter();
-
-    /**
-     * Invoked by {@link AbstractComponent#render(IMarkupWriter, IRequestCycle)} to actually 
-     * render the component (with any parameter values already set). 
-     * This implementation checks the rewinding state of the {@link IForm} that contains the
-     * component and forwards processing to either 
-     * {@link #renderFormComponent(IMarkupWriter, IRequestCycle)} or 
-     * {@link #rewindFormComponent(IMarkupWriter, IRequestCycle)}. 
-     * Those two are the methods that subclasses should implement. 
-     *
-     * @see org.apache.tapestry.AbstractComponent#renderComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = TapestryUtils.getForm(cycle, this);
-
-        setForm(form);
-
-        if (form.wasPrerendered(writer, this))
-            return;
-
-        IValidationDelegate delegate = form.getDelegate();
-
-        delegate.setFormComponent(this);
-
-        setName(form);
-
-        if (form.isRewinding())
-        {
-            if (!isDisabled())
-            {
-                rewindFormComponent(writer, cycle);
-            }
-
-            // This is for the benefit of the couple of components (LinkSubmit) that allow a body.
-            // The body should render when the component rewinds.
-
-            if (getRenderBodyOnRewind())
-                renderBody(writer, cycle);
-        }
-        else if (!cycle.isRewinding())
-        {
-            if (!NullWriter.class.isInstance(writer))
-                form.setFormFieldUpdating(true);
-
-            renderFormComponent(writer, cycle);
-
-            if (getCanTakeFocus() && !isDisabled())
-            {
-                delegate.registerForFocus(this,
-                                          delegate.isInError()
-                                          ? ValidationConstants.ERROR_FIELD
-                                          : ValidationConstants.NORMAL_FIELD);
-            }
-
-        }
-    }
-
-    /**
-     * A small number of components should always render their body on rewind (even if the component
-     * is itself disabled) and should override this method to return true. Components that
-     * explicitly render their body inside
-     * {@link #rewindFormComponent(IMarkupWriter, IRequestCycle)} should leave this method returning
-     * false. Remember that if the component is {@link IFormComponent#isDisabled() disabled} then
-     * {@link #rewindFormComponent(IMarkupWriter, IRequestCycle)} won't be invoked.
-     *
-     * @return false; override this method to change.
-     */
-    protected boolean getRenderBodyOnRewind()
-    {
-        return false;
-    }
-
-    protected void renderDelegatePrefix(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        getForm().getDelegate().writePrefix(writer, cycle, this, null);
-    }
-
-    protected void renderDelegateAttributes(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        getForm().getDelegate().writeAttributes(writer, cycle, this, null);
-    }
-
-    protected void renderDelegateSuffix(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        getForm().getDelegate().writeSuffix(writer, cycle, this, null);
-    }
-
-    protected void setName(IForm form)
-    {
-        setName(form.getElementId(this));
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected void generateClientId()
-    {
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String peekClientId()
-    {
-        if (getPage() == null)
-            return null;
-
-        IForm form = (IForm) getPage().getRequestCycle().getAttribute(TapestryUtils.FORM_ATTRIBUTE);
-        if (form == null)
-            return null;
-
-        return form.peekClientId(this);
-    }
-
-    /**
-     * Returns false. Subclasses that might be required must override this method. Typically, this
-     * involves checking against the component's validators.
-     *
-     * @since 4.0
-     */
-    public boolean isRequired()
-    {
-        return false;
-    }
-
-    /**
-     * Invoked from {@link #renderComponent(IMarkupWriter, IRequestCycle)} 
-     * to render the component. 
-     *
-     * @param writer
-     * @param cycle
-     */
-    protected abstract void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     * Invoked from {@link #renderComponent(IMarkupWriter, IRequestCycle)} to rewind the 
-     * component. If the component is {@link IFormComponent#isDisabled() disabled} 
-     * this will not be invoked. 
-     *
-     * @param writer
-     * @param cycle
-     */
-    protected abstract void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java
deleted file mode 100644
index 7488182..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.json.JSONObject;
-
-/**
- * Abstract {@link FormComponentContributor} implementation that adds an optional static javscript
- * method reference to the page.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public abstract class AbstractFormComponentContributor implements FormComponentContributor
-{
-    private String _script = defaultScript();
-
-    public AbstractFormComponentContributor()
-    {
-    }
-
-    // Needed until HIVEMIND-134 fix is available
-    public AbstractFormComponentContributor(String initializer)
-    {
-        PropertyUtils.configureProperties(this, initializer);
-    }
-
-    /**
-     * Defines the default JavaScript file used by this contributor. Overriden by most subclasses
-     * that use JavaScript.
-     */
-    public String defaultScript()
-    {
-        return null;
-    }
-
-    public String getScript()
-    {
-        return _script;
-    }
-
-    public void setScript(String script)
-    {
-        _script = script;
-    }
-
-    /**
-     * @see org.apache.tapestry.form.FormComponentContributor#renderContribution(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle, FormComponentContributorContext,
-     *      org.apache.tapestry.form.IFormComponent)
-     */
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-        if (_script != null)
-            context.includeClasspathScript(_script);
-    }
-    
-    /**
-     * Utility used to append onto an existing property represented as an
-     * object array. 
-     * @param profile
-     * @param key
-     * @param value
-     */
-    public void accumulateProperty(JSONObject profile, String key, Object value)
-    {
-        profile.accumulate(key, value);
-    }
-    
-    /**
-     * Utility method to store a field specific profile property which can later
-     * be used by client side validation. 
-     * 
-     * @param field
-     *          The field to store the property for, will key off of {@link IFormComponent#getClientId()}.
-     * @param profile
-     *          The profile for the form.
-     * @param key
-     *          The property key to store.
-     * @param property
-     *          The property to store.
-     */
-    public void accumulateProfileProperty(IFormComponent field, JSONObject profile, 
-            String key, Object property)
-    {
-        if (!profile.has(field.getClientId())) 
-            profile.put(field.getClientId(), new JSONObject());
-        
-        JSONObject fieldProps = profile.getJSONObject(field.getClientId());
-        
-        accumulateProperty(fieldProps, key, property);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java
deleted file mode 100644
index 19e97b9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.DirectServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.util.ScriptUtils;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Superclass for components submitting their form.
- * 
- * @author Richard Lewis-Shell
- * @since 4.0
- */
-
-abstract class AbstractSubmit extends AbstractFormComponent implements IDynamicInvoker
-{   
-    /**
-     * Determine if this submit component was clicked.
-     * 
-     * @param cycle
-     *          The current request.
-     * @param name
-     *          The name of this form element.
-     * @return true if this submit was clicked
-     */
-    protected abstract boolean isClicked(IRequestCycle cycle, String name);
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (isClicked(cycle, getName()))
-            handleClick(cycle, getForm());
-    }
-
-    void handleClick(final IRequestCycle cycle, IForm form)
-    {
-        if (isParameterBound("selected"))
-            setSelected(getTag());
-
-        final IActionListener listener = getListener();
-        final IActionListener action = getAction();
-
-        if (listener == null && action == null)
-            return;
-
-        final ListenerInvoker listenerInvoker = getListenerInvoker();
-
-        Object parameters = getParameters();
-        if (parameters != null)
-        {
-            if (parameters instanceof Collection)
-            {
-                cycle.setListenerParameters(((Collection) parameters).toArray());
-            }
-            else
-            {
-                cycle.setListenerParameters(new Object[] { parameters });
-            }
-        }
-        
-        // Invoke 'listener' now, but defer 'action' for later
-        if (listener != null)
-            listenerInvoker.invokeListener(listener, AbstractSubmit.this, cycle);
-        
-        if (action != null)
-        {
-            Runnable notify = new Runnable()
-            {
-                public void run()
-                {
-                    listenerInvoker.invokeListener(action, AbstractSubmit.this, cycle);
-                }
-            };
-
-            form.addDeferredRunnable(notify);
-        }
-    }
-
-    /**
-     * Manages rendering of important submit client side bindings, like invoking the right submit
-     * type or any of the optional {@link IDynamicInvoker} parameters.
-     * 
-     * @param writer
-     *          The writer to use to write content.
-     * @param cycle
-     *          The current request cycle.
-     */
-    protected void renderSubmitBindings(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (isDisabled())
-            return;
-        
-        String type = getSubmitType();
-        
-        Defense.notNull(type, "submitType");
-        
-        List update = getUpdateComponents();
-        boolean isAsync = isAsync() || update != null && update.size() > 0;
-
-        if (!isAsync && type.equals(FormConstants.SUBMIT_NORMAL))
-            return;
-        
-        JSONObject json = null;
-
-        // build async URL to form if async
-
-        if (isAsync)
-        {
-            IForm form = getForm();
-            
-            json = new JSONObject();
-            json.put("async", Boolean.TRUE);
-            json.put("json", isJson());
-            
-            DirectServiceParameter dsp = new DirectServiceParameter(form, null, this);
-            json.put("url", getDirectService().getLink(true, dsp).getURL());
-        }
-
-        // only if not async - otherwise we have to stop the client side event to prevent normal form submission
-        // within the submitbindings client side generated function
-        
-        if (!isAsync && !isParameterBound("onClick") && !isParameterBound("onclick"))
-        {
-            StringBuffer str = new StringBuffer();
-
-            str.append("tapestry.form.").append(type);
-            str.append("('").append(getForm().getClientId()).append("',");
-            str.append("'").append(getName()).append("'");
-
-            if (json != null)
-                str.append(",").append(json.toString());
-
-            str.append(")");
-            
-            writer.attribute("onClick", str.toString());
-            return;
-        }
-
-        Map parms = new HashMap();
-        parms.put("submit", this);
-        parms.put("key", ScriptUtils.functionHash(type + this.hashCode()));
-        parms.put("type", type);
-
-        if (json != null)
-            parms.put("parms", json.toString());
-        
-        PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, this);
-        getSubmitScript().execute(this, cycle, prs, parms);
-    }
-
-
-    /** parameter. */
-    public abstract IActionListener getListener();
-    
-    /** parameter. */
-    public abstract IActionListener getAction();
-
-    /** parameter. */
-    public abstract Object getTag();
-
-    /** parameter. */
-    public abstract void setSelected(Object tag);
-
-    /** parameter. */
-    public abstract boolean getDefer();
-
-    /** parameter. */
-    public abstract Object getParameters();
-
-    /** The type of submission, normal/cancel/refresh. */
-    public abstract String getSubmitType();
-    
-    /**
-     * {@inheritDoc}
-     */
-    public abstract List getUpdateComponents();
-    
-    /**
-     * {@inheritDoc}
-     */
-    public abstract boolean isAsync();
-    
-    /**
-     * {@inheritDoc}
-     */
-    public abstract boolean isJson();
-
-
-
-    /** Injected. */
-    public abstract IEngineService getDirectService();
-    
-    /** Injected. */
-    public abstract ListenerInvoker getListenerInvoker();
-    
-    /** Injected. */
-    public abstract IScript getSubmitScript();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/BeanPropertySelectionModel.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/BeanPropertySelectionModel.java
deleted file mode 100644
index 5b7a5cc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/BeanPropertySelectionModel.java
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.form;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.commons.beanutils.BeanUtils;
-
-/**
- * This class is a property selection model for an object list. This is used in PropertySelection,
- * MultiplePropertySelection or Palette tapestry components. For example, to use for a Hospital
- * class, and have the labels be the hospital names. <code>
- * List&lt;Hospital&gt; list = ...;
- * return new BeanPropertySelectionModel(hospitals, "name");
- * </code>
- * This will use getName() on the Hospital object, as its display.
- * 
- * @author Gabriel Handford
- */
-public class BeanPropertySelectionModel implements IPropertySelectionModel, Serializable
-{
-
-    /** Comment for <code>serialVersionUID</code>. */
-    private static final long serialVersionUID = 3763091973006766644L;
-    private List _list;
-    private String _labelField;
-
-    /**
-     * Build an empty property selection model.
-     */
-    public BeanPropertySelectionModel()
-    {
-        this(Arrays.asList(new Object[0]), null);
-    }
-
-    /**
-     * Build a bean property selection model.
-     * 
-     * @param list
-     *            The list
-     * @param labelField
-     *            The label field
-     */
-    public BeanPropertySelectionModel(List list, String labelField)
-    {
-        _list = list;
-        _labelField = labelField;
-    }
-
-    /**
-     * Build a bean property selection model.
-     * 
-     * @param c
-     *            Collection
-     * @param labelField
-     *            The label field
-     */
-    public BeanPropertySelectionModel(Collection c, String labelField)
-    {
-        _list = new ArrayList(c);
-        _labelField = labelField;
-    }
-
-    /**
-     * Get the number of options.
-     * 
-     * @return option count
-     */
-    public int getOptionCount()
-    {
-        return _list.size();
-    }
-
-    /**
-     * Get the option at index.
-     * 
-     * @param index
-     *            Index
-     * @return object Object at index
-     */
-    public Object getOption(int index)
-    {
-        return _list.get(index);
-    }
-
-    /**
-     * Get the label at index.
-     * 
-     * @param index
-     *            Index
-     * @return label Label at index
-     */
-    public String getLabel(int index)
-    {
-        Object obj = _list.get(index);
-        try {
-
-            return BeanUtils.getProperty(obj, _labelField);
-        } catch (Exception e) {
-            throw new RuntimeException("Error getting property", e);
-        }
-    }
-
-    /**
-     * Get the value at index.
-     * 
-     * @param index
-     *            Index
-     * @return value Value at index
-     */
-    public String getValue(int index)
-    {
-        return String.valueOf(index);
-    }
-
-    public boolean isDisabled(int index)
-    {
-        return false;
-    }
-    
-    /**
-     * Translate value to object.
-     * 
-     * @param value
-     *            Value
-     * @return object Object from value
-     */
-    public Object translateValue(String value)
-    {
-        return getOption(Integer.parseInt(value));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Button.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Button.java
deleted file mode 100644
index 6892f76..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Button.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Implements a component that manages an HTML &lt;button&gt; form element. [ <a
- * href="../../../../../ComponentReference/Button.html">Component Reference </a>]
- * <p>
- * This component is useful for attaching JavaScript onclick event handlers.
- * 
- * @author Howard Lewis Ship
- * @author Paul Geerts
- * @author Malcolm Edgar
- * @author Paul Ferraro
- */
-public abstract class Button extends AbstractFormComponent
-{
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.begin("button");
-        writer.attribute("type", "button");
-        writer.attribute("name", getName());
-
-        if (isDisabled())
-        {
-            writer.attribute("disabled", "disabled");
-        }
-
-        renderIdAttribute(writer, cycle);
-
-        renderInformalParameters(writer, cycle);
-
-        String label = getLabel();
-
-        if (label != null)
-            writer.print(label);
-        else
-            renderBody(writer, cycle);
-
-        writer.end();
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // Do nothing
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.IFormComponent#getDisplayName()
-     */
-    public String getDisplayName()
-    {
-        return null;
-    }
-
-    /**
-     * @see org.apache.tapestry.form.IFormComponent#isDisabled()
-     */
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    public abstract String getLabel();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Button.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Button.jwc
deleted file mode 100644
index 937f3d4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Button.jwc
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.form.Button">
-
-  <description>
-  Creates a labeled button within a form.
-  </description>
-
-  <parameter name="label" deprecated="true"/>
-  <parameter name="disabled"/>
-  <parameter name="id" property="idParameter" default-value="id"/>
-  		  
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="type"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Checkbox.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Checkbox.java
deleted file mode 100644
index abeb018..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Checkbox.java
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Implements a component that manages an HTML &lt;input type=checkbox&gt; form element. [ <a
- * href="../../../../../ComponentReference/Checkbox.html">Component Reference </a>]
- * <p>
- * As of 4.0, this component can be validated.
- * 
- * @author Howard Lewis Ship
- * @author Paul Ferraro
- */
-public abstract class Checkbox extends AbstractFormComponent implements ValidatableField
-{
-    /**
-     * @see org.apache.tapestry.form.validator.AbstractRequirableField#renderRequirableFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        renderDelegatePrefix(writer, cycle);
-        
-        writer.beginEmpty("input");
-        writer.attribute("type", "checkbox");
-
-        writer.attribute("name", getName());
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-        
-        // write out submitted input for case of validation errors
-        
-        IValidationDelegate delegate = getForm().getDelegate();
-        boolean checked = getValue();
-        if (delegate != null && delegate.isInError()) {
-            
-            checked = Boolean.valueOf(delegate.getFieldInputValue()).booleanValue();
-        }
-        
-        if (checked) {
-            writer.attribute("checked", "checked");
-        }
-        
-        renderIdAttribute(writer, cycle);
-
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-        
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-        
-        renderDelegateSuffix(writer, cycle);
-    }
-
-    /**
-     * In traditional HTML, many checkboxes would have the same name but different values. Under
-     * Tapestry, it makes more sense to have different names and a fixed value. For a checkbox, we
-     * only care about whether the name appears as a request parameter.
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-        
-        try
-        {
-            // This is atypical validation - since this component does not explicitly bind to an object
-            
-            getValidatableFieldSupport().validate(this, writer, cycle, value);
-            
-            setValue(value != null);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-            getForm().getDelegate().recordFieldInputValue(Boolean.valueOf(value).toString());
-        }
-    }
-
-    public abstract boolean getValue();
-
-    public abstract void setValue(boolean selected);
-
-    /**
-     * Injected.
-     */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Checkbox.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Checkbox.jwc
deleted file mode 100644
index 56ab5cc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Checkbox.jwc
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.form.Checkbox" allow-body="no">
-
-  <description>
-  Implements a checkbox within a Form.
-  </description>
-
-  <!-- 'selected' aliased and deprecated in 4.0 -->
- 
-  <parameter name="value" required="yes" aliases="selected">
-    <description>
-    The property read and updated by the Checkbox.
-    </description>
-  </parameter>
-  
-  <parameter name="disabled">
-    <description>
-    If true, then the checkbox will be disabled and any input from the checkbox
-    will be ignored.
-    </description>
-  </parameter>
-  
-  <parameter name="validators"/>
-
-  <parameter name="displayName">
-    <description>
-      The name of the field, which may be used by a FieldLabel.
-    </description>
-  </parameter>
-  
-  <parameter name="id" property="idParameter" default-value="id"/>
-  		  
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="checked"/>
-  <reserved-parameter name="name"/>
-
-  <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.java
deleted file mode 100644
index a1d0e3d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.java
+++ /dev/null
@@ -1,276 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.text.DateFormatSymbols;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.form.translator.DateTranslator;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Provides a Form <tt>java.util.Date</tt> field component for selecting dates. [ <a
- * href="../../../../../ComponentReference/DatePicker.html">Component Reference </a>] As of 4.0,
- * DatePicker can indicate that it is required, use a custom translator (e.g. for java.sql.Date),
- * and perform validation on the submitted date.
- * <p>
- * As of 4.0, this component can be configurably translated and validated.
- * 
- * @author Paul Geerts
- * @author Malcolm Edgar
- * @author Paul Ferraro
- * @since 2.2
- */
-
-public abstract class DatePicker extends AbstractFormComponent implements TranslatedField
-{
-    private static final String SYM_NAME = "name";
-
-    private static final String SYM_FORMNAME = "formName";
-
-    private static final String SYM_MONTHNAMES = "monthNames";
-
-    private static final String SYM_SHORT_MONTHNAMES = "shortMonthNames";
-
-    private static final String SYM_WEEKDAYNAMES = "weekDayNames";
-
-    private static final String SYM_SHORT_WEEKDAYNAMES = "shortWeekDayNames";
-
-    private static final String SYM_FIRSTDAYINWEEK = "firstDayInWeek";
-
-    private static final String SYM_MINDAYSINFIRSTWEEK = "minimalDaysInFirstWeek";
-
-    private static final String SYM_FORMAT = "format";
-
-    private static final String SYM_INCL_WEEK = "includeWeek";
-
-    private static final String SYM_CLEAR_BUTTON_LABEL = "clearButtonLabel";
-
-    private static final String SYM_VALUE = "value";
-
-    private static final String SYM_BUTTONONCLICKHANDLER = "buttonOnclickHandler";
-    
-    public abstract Date getValue();
-
-    public abstract void setValue(Date value);
-
-    public abstract boolean isDisabled();
-
-    public abstract boolean getIncludeWeek();
-
-    public abstract IAsset getIcon();
-    
-    public abstract String getImageClass();
-    
-    /** 
-     * @since 4.1.1
-     */    
-    public abstract String getTitle();
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-    public abstract IScript getScript();
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, this);
-
-        boolean disabled = isDisabled();
-        DateTranslator translator = (DateTranslator) getTranslator();
-        Locale locale = getPage().getLocale();
-        SimpleDateFormat format = translator.getDateFormat(locale);
-
-        DateFormatSymbols dfs = format.getDateFormatSymbols();
-        Calendar cal = Calendar.getInstance(locale);
-
-        String name = getName();
-        
-        String title = getTitle();
-        if (title == null)
-            title = format.toLocalizedPattern();
-
-        String value = getTranslatedFieldSupport().format(this, getValue());
-
-        Map symbols = new HashMap();
-
-        symbols.put(SYM_NAME, name);
-        symbols.put(SYM_FORMAT, format.toPattern());
-        symbols.put(SYM_INCL_WEEK, getIncludeWeek() ? Boolean.TRUE : Boolean.FALSE);
-
-        symbols.put(SYM_MONTHNAMES, makeStringList(dfs.getMonths(), 0, 12));
-        symbols.put(SYM_SHORT_MONTHNAMES, makeStringList(dfs.getShortMonths(), 0, 12));
-        symbols.put(SYM_WEEKDAYNAMES, makeStringList(dfs.getWeekdays(), 1, 8));
-        symbols.put(SYM_SHORT_WEEKDAYNAMES, makeStringList(dfs.getShortWeekdays(), 1, 8));
-        symbols.put(SYM_FIRSTDAYINWEEK, new Integer(cal.getFirstDayOfWeek() - 1));
-        symbols.put(SYM_MINDAYSINFIRSTWEEK, new Integer(cal.getMinimalDaysInFirstWeek()));
-        symbols.put(SYM_CLEAR_BUTTON_LABEL, getMessages().getMessage("clear"));
-        symbols.put(SYM_FORMNAME, getForm().getName());
-        symbols.put(SYM_VALUE, getValue());
-        
-        getScript().execute(this, cycle, pageRenderSupport, symbols);
-        
-        renderDelegatePrefix(writer, cycle);
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "text");
-        writer.attribute("name", name);
-        writer.attribute("value", value);
-        writer.attribute("title", title);
-
-        if (disabled)
-            writer.attribute("disabled", "disabled");
-
-        renderIdAttribute(writer, cycle);
-
-        renderDelegateAttributes(writer, cycle);
-
-        getTranslatedFieldSupport().renderContributions(this, writer, cycle);
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-
-        renderInformalParameters(writer, cycle);
-
-        writer.printRaw("&nbsp;");
-
-        if (!disabled)
-        {
-            writer.begin("a");
-            writer.attribute("href", (String) symbols.get(SYM_BUTTONONCLICKHANDLER));
-        }
-
-        IAsset icon = getIcon();
-
-        writer.beginEmpty("img");
-        writer.attribute("src", icon.buildURL());
-        writer.attribute("alt", getMessages().getMessage("alt"));
-        writer.attribute("border", 0);
-        writer.attribute("class", getImageClass());
-        
-        if (!disabled)
-            writer.end();
-
-        renderDelegateSuffix(writer, cycle);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-
-        try
-        {
-            Date date = (Date) getTranslatedFieldSupport().parse(this, value);
-
-            getValidatableFieldSupport().validate(this, writer, cycle, date);
-
-            setValue(date);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-
-    /**
-     * Create a list of quoted strings. The list is suitable for initializing a JavaScript array.
-     */
-    private String makeStringList(String[] a, int offset, int length)
-    {
-        StringBuffer b = new StringBuffer();
-        for (int i = offset; i < length; i++)
-        {
-            // JavaScript is sensitive to some UNICODE characters. So for
-            // the sake of simplicity, we just escape everything
-            b.append('"');
-            char[] ch = a[i].toCharArray();
-            for (int j = 0; j < ch.length; j++)
-            {
-                if (ch[j] < 128)
-                {
-                    b.append(ch[j]);
-                }
-                else
-                {
-                    b.append(escape(ch[j]));
-                }
-            }
-
-            b.append('"');
-            if (i < length - 1)
-            {
-                b.append(", ");
-            }
-        }
-        return b.toString();
-
-    }
-
-    /**
-     * Create an escaped Unicode character.
-     * 
-     * @param c
-     * @return The unicode character in escaped string form
-     */
-    private static String escape(char c)
-    {
-        char unescapedChar = c;
-        StringBuffer b = new StringBuffer();
-        for (int i = 0; i < 4; i++)
-        {
-            b.append(Integer.toHexString(unescapedChar & 0x000F).toUpperCase());
-            unescapedChar >>>= 4;
-        }
-        b.append("u\\");
-        return b.reverse().toString();
-    }
-
-    /**
-     * Injected.
-     */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-    /**
-     * Injected.
-     */
-    public abstract TranslatedFieldSupport getTranslatedFieldSupport();
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.js b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.js
deleted file mode 100644
index 8c6f2df..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.js
+++ /dev/null
@@ -1,1024 +0,0 @@
-//

-// calendar -- a javascript date picker designed for easy localization.

-//

-//

-//

-// Author: Per Norrman (pernorrman@telia.com)

-// 

-// Based on Tapestry 2.3-beta1 Datepicker by Paul Geerts

-// 

-// Thanks to:

-//     Vladimir [vyc@quorus-ms.ru] for fixing the IE6 zIndex problem.

-//

-// The normal setup would be to have one text field for displaying the 

-// selected date, and one button to show/hide the date picker control.

-// This is  the recommended javascript code:

-// 

-//	<script language="javascript">

-//		var cal;

-//

-//		function init() {

-//			cal = new Calendar();

-//			cal.setIncludeWeek(true);

-//			cal.setFormat("yyyy-MM-dd");

-//			cal.setMonthNames(.....);

-//			cal.setShortMonthNames(....);

-//			cal.create();

-//			

-//			document.form.button1.onclick = function() {

-//				cal.toggle(document.form.button1);

-//			}

-//			cal.onchange = function() {

-//				document.form.textfield1.value  = cal.formatDate();

-//			}

-//		}

-//	</script>

-//

-// The init function is invoked when the body is loaded.

-//

-//

-

-function Calendar(date) {

-	if (arguments.length == 0) {

-		this._currentDate = new Date();

-		this._selectedDate = null;

-	}

-	else {

-		this._currentDate = new Date(date);

-		this._selectedDate = new Date(date);

-	}

-

-	// Accumulated days per month, for normal and for leap years.

-	// Used in week number calculations.	

-    Calendar.NUM_DAYS = [0,31,59,90,120,151,181,212,243,273,304,334];

-    

-    Calendar.LEAP_NUM_DAYS = [0,31,60,91,121,152,182,213,244,274,305,335];

-    

-

-	this._bw = new bw_check();

-	this._showing = false;	

-	this._includeWeek = false;

-	this._hideOnSelect = true;

-	this._alwaysVisible = false;

-	

-	this._dateSlot = new Array(42);

-	this._weekSlot = new Array(6);

-	

-	this._firstDayOfWeek = 1;

-	this._minimalDaysInFirstWeek = 4;

-	

-	this._monthNames = [	

-		"January",		"February",		"March",	"April",

-		"May",			"June",			"July",		"August",

-		"September",	"October",		"November",	"December"

-	];

-	

-	this._shortMonthNames = [ 

-		"jan", "feb", "mar", "apr", "may", "jun", 

-		"jul", "aug", "sep", "oct", "nov", "dec"

-	];

-	

-	// Week days start with Sunday=0, ... Saturday=6

-	this._weekDayNames = [

-		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" 

-	];

-	

-	this._shortWeekDayNames = 

-		["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ];

-	

-	this._defaultFormat = "yyyy-MM-dd";

-	

-	this._format = this._defaultFormat; 

-

-	this._calDiv = null;

-	

-	this._clearButtonLabel = "Clear";

-	

-}

-

-/**

- *	CREATE the Calendar DOM element

- */

-Calendar.prototype.create = function() {

-	var div;

-	var table;

-	var tbody;

-	var tr;

-	var td;

-	var dp = this;

-	

-	// Create the top-level div element

-	this._calDiv = document.createElement("div");

-	this._calDiv.className = "calendar";

-	this._calDiv.style.position = "absolute";

-	this._calDiv.style.display = "none";

-	this._calDiv.style.border = "1px solid WindowText";

-	this._calDiv.style.textAlign = "center";

-	this._calDiv.style.background = "Window";

-	this._calDiv.style.zIndex = "400";

-	

-	

-	// header div

-	div = document.createElement("div");

-	div.className = "calendarHeader";

-	div.style.background = "ActiveCaption";

-	div.style.padding = "3px";

-	div.style.borderBottom = "1px solid WindowText";

-	this._calDiv.appendChild(div);

-	

-	table = document.createElement("table");

-	table.style.cellSpacing = 0;

-	div.appendChild(table);

-	

-	tbody = document.createElement("tbody");

-	table.appendChild(tbody);

-	

-	tr = document.createElement("tr");

-	tbody.appendChild(tr);

-	

-	// Previous Month Button

-	td = document.createElement("td");

-	this._previousMonth = document.createElement("button");

-	this._previousMonth.className = "prevMonthButton"

-	this._previousMonth.appendChild(document.createTextNode("<<"));

-	//this._previousMonth.appendChild(document.createTextNode(String.fromCharCode(9668)));

-	td.appendChild(this._previousMonth);

-	tr.appendChild(td);

-	

-	

-	

-	//

-	// Create the month drop down 

-	//

-	td = document.createElement("td");

-	td.className = "labelContainer";

-	tr.appendChild(td);

-	this._monthSelect = document.createElement("select");

-    for (var i = 0 ; i < this._monthNames.length ; i++) {

-        var opt = document.createElement("option");

-        opt.innerHTML = this._monthNames[i];

-        opt.value = i;

-        if (i == this._currentDate.getMonth()) {

-            opt.selected = true;

-        }

-        this._monthSelect.appendChild(opt);

-    }

-	td.appendChild(this._monthSelect);

-	

-

-	// 

-	// Create the year drop down

-	//

-	td = document.createElement("td");

-	td.className = "labelContainer";

-	tr.appendChild(td);

-	this._yearSelect = document.createElement("select");

-	for(var i=1920; i < 2050; ++i) {

-		var opt = document.createElement("option");

-		opt.innerHTML = i;

-		opt.value = i;

-		if (i == this._currentDate.getFullYear()) {

-			opt.selected = false;

-		}

-		this._yearSelect.appendChild(opt);

-	}

-	td.appendChild(this._yearSelect);

-	

-	

-	td = document.createElement("td");

-	this._nextMonth = document.createElement("button");

-	this._nextMonth.appendChild(document.createTextNode(">>"));

-	//this._nextMonth.appendChild(document.createTextNode(String.fromCharCode(9654)));

-	this._nextMonth.className = "nextMonthButton";

-	td.appendChild(this._nextMonth);

-	tr.appendChild(td);

-	

-	// Calendar body

-	div = document.createElement("div");

-	div.className = "calendarBody";

-	this._calDiv.appendChild(div);

-	this._table = div;

-	

-	// Create the inside of calendar body	

-	

-	var text;

-	table = document.createElement("table");

-	//table.style.width="100%";

-	table.className = "grid";

-	table.style.font 	 	= "small-caption";

-	table.style.fontWeight 	= "normal";

-	table.style.textAalign	= "center";

-	table.style.color		= "WindowText";

-	table.style.cursor		= "default";

-	table.cellPadding		= "3";

-	table.cellSpacing		= "0";

-	

-    div.appendChild(table);

-	var thead = document.createElement("thead");

-	table.appendChild(thead);

-	tr = document.createElement("tr");

-	thead.appendChild(tr);

-	

-	// weekdays header

-	if (this._includeWeek) {

-		td = document.createElement("th");

-		text = document.createTextNode("w");

-		td.appendChild(text);

-		td.className = "weekNumberHead";

-		td.style.textAlign = "left";

-		tr.appendChild(td);

-	}

-	for(i=0; i < 7; ++i) {

-		td = document.createElement("th");

-		text = document.createTextNode(this._shortWeekDayNames[(i+this._firstDayOfWeek)%7]);

-		td.appendChild(text);

-		td.className = "weekDayHead";

-		td.style.fontWeight = "bold";

-		td.style.borderBottom = "1px solid WindowText";

-		tr.appendChild(td);

-	}

-	

-	// Date grid

-	tbody = document.createElement("tbody");

-	table.appendChild(tbody);

-	

-	for(week=0; week<6; ++week) {

-		tr = document.createElement("tr");

-		tbody.appendChild(tr);

-

-		if (this._includeWeek) {

-			td = document.createElement("td");

-			td.className = "weekNumber";

-			td.style.fontWeight = "normal";

-			td.style.borderRight = "1px solid WindowText";

-			td.style.textAlign = "left";

-			text = document.createTextNode(String.fromCharCode(160));

-			td.appendChild(text);

-            //setCursor(td);

-            td.align="center";

-			tr.appendChild(td);

-			var tmp = new Object();

-			tmp.tag = "WEEK";

-			tmp.value = -1;

-			tmp.data = text;

-			this._weekSlot[week] = tmp;

-		}

-

-		for(day=0; day<7; ++day) {

-			td = document.createElement("td");

-			text = document.createTextNode(String.fromCharCode(160));

-			td.appendChild(text);

-            setCursor(td);

-            td.align="center";

-            td.style.fontWeight="normal";

-            

-			tr.appendChild(td);

-			var tmp = new Object();

-			tmp.tag = "DATE";

-			tmp.value = -1;

-			tmp.data = text;

-			this._dateSlot[(week*7)+day] = tmp;

-			

-		}

-	}

-	

-	// Calendar Footer

-	div = document.createElement("div");

-	div.className = "calendarFooter";

-	this._calDiv.appendChild(div);

-	

-	table = document.createElement("table");

-	//table.style.width="100%";

-	table.className = "footerTable";

-	table.cellSpacing = 0;

-	div.appendChild(table);

-	

-	tbody = document.createElement("tbody");

-	table.appendChild(tbody);

-	

-	tr = document.createElement("tr");

-	tbody.appendChild(tr);

-

-	//

-	// The TODAY button	

-	//

-	td = document.createElement("td");

-	this._todayButton = document.createElement("button");

-	var today = new Date();

-	var buttonText = today.getDate() + " " + this._monthNames[today.getMonth()] + ", " + today.getFullYear();

-	this._todayButton.appendChild(document.createTextNode(buttonText));

-	td.appendChild(this._todayButton);

-	tr.appendChild(td);

-	

-	//

-	// The CLEAR button

-	//

-	td = document.createElement("td");

-	this._clearButton = document.createElement("button");

-	var today = new Date();

-	this._clearButton.appendChild(document.createTextNode(this._clearButtonLabel));

-	td.appendChild(this._clearButton);

-	tr.appendChild(td);

-	

-	

-	this._update();

-	this._updateHeader();

-	

-

-

-	// IE55+ extension		

-	this._previousMonth.hideFocus = true;

-	this._nextMonth.hideFocus = true;

-	this._todayButton.hideFocus = true;

-	// end IE55+ extension

-	

-	// hook up events

-	// buttons

-	this._previousMonth.onclick = function () {

-		dp.prevMonth();

-	};

-

-	this._nextMonth.onclick = function () {

-		dp.nextMonth();

-	};

-

-	this._todayButton.onclick = function () {

-		dp.setSelectedDate(new Date());

-		dp.hide();

-	};

-

-	this._clearButton.onclick = function () {

-		dp.clearSelectedDate();

-		dp.hide();

-	};

-	

-

-	this._calDiv.onselectstart = function () {

-		return false;

-	};

-	

-	this._table.onclick = function (e) {

-		// find event

-		if (e == null) e = document.parentWindow.event;

-		

-		// find td

-		var el = e.target != null ? e.target : e.srcElement;

-		while (el.nodeType != 1)

-			el = el.parentNode;

-		while (el != null && el.tagName && el.tagName.toLowerCase() != "td")

-			el = el.parentNode;

-		

-		// if no td found, return

-		if (el == null || el.tagName == null || el.tagName.toLowerCase() != "td")

-			return;

-		

-		var d = new Date(dp._currentDate);

-		var n = Number(el.firstChild.data);

-		if (isNaN(n) || n <= 0 || n == null)

-			return;

-		

-		if (el.className == "weekNumber")

-			return;

-			

-		d.setDate(n);

-		dp.setSelectedDate(d);

-

-		if (!dp._alwaysVisible && dp._hideOnSelect) {

-			dp.hide();

-		}

-		

-	};

-	

-	

-	this._calDiv.onkeydown = function (e) {

-		if (e == null) e = document.parentWindow.event;

-		var kc = e.keyCode != null ? e.keyCode : e.charCode;

-

-		if(kc == 13) {

-			var d = new Date(dp._currentDate).valueOf();

-			dp.setSelectedDate(d);

-

-			if (!dp._alwaysVisible && dp._hideOnSelect) {

-				dp.hide();

-			}

-			return false;

-		}

-			

-		

-		if (kc < 37 || kc > 40) return true;

-		

-		var d = new Date(dp._currentDate).valueOf();

-		if (kc == 37) // left

-			d -= 24 * 60 * 60 * 1000;

-		else if (kc == 39) // right

-			d += 24 * 60 * 60 * 1000;

-		else if (kc == 38) // up

-			d -= 7 * 24 * 60 * 60 * 1000;

-		else if (kc == 40) // down

-			d += 7 * 24 * 60 * 60 * 1000;

-

-		dp.setCurrentDate(new Date(d));

-		return false;

-	}

-	

-	// ie6 extension

-	this._calDiv.onmousewheel = function (e) {

-		if (e == null) e = document.parentWindow.event;

-		var n = - e.wheelDelta / 120;

-		var d = new Date(dp._currentDate);

-		var m = d.getMonth() + n;

-		d.setMonth(m);

-		

-		

-		dp.setCurrentDate(d);

-		

-		return false;

-	}

-

-	this._monthSelect.onchange = function(e) {

-		if (e == null) e = document.parentWindow.event;

-		e = getEventObject(e);

-		dp.setMonth(e.value);

-	}

-

-	this._monthSelect.onclick = function(e) {

-		if (e == null) e = document.parentWindow.event;

-		e = getEventObject(e);

-		e.cancelBubble = true;

-	}

-	

-	this._yearSelect.onchange = function(e) {

-		if (e == null) e = document.parentWindow.event;

-		e = getEventObject(e);

-		dp.setYear(e.value);

-	}

-

-

-	document.body.appendChild(this._calDiv);

-	

-	

-	return this._calDiv;

-}

-

-Calendar.prototype._update = function() {

-

-

-	// Calculate the number of days in the month for the selected date

-	var date = this._currentDate;

-	var today = toISODate(new Date());

-	

-	

-	var selected = "";

-	if (this._selectedDate != null) {

-		selected = toISODate(this._selectedDate);

-	}

-	var current = toISODate(this._currentDate);

-	var d1 = new Date(date.getFullYear(), date.getMonth(), 1);

-	var d2 = new Date(date.getFullYear(), date.getMonth()+1, 1);

-	var monthLength = Math.round((d2 - d1) / (24 * 60 * 60 * 1000));

-	

-	// Find out the weekDay index for the first of this month

-	var firstIndex = (d1.getDay() - this._firstDayOfWeek) % 7 ;

-    if (firstIndex < 0) {

-    	firstIndex += 7;

-    }

-	

-	var index = 0;

-	while (index < firstIndex) {

-		this._dateSlot[index].value = -1;

-		this._dateSlot[index].data.data = String.fromCharCode(160);

-		this._dateSlot[index].data.parentNode.className = "";

-		this._dateSlot[index].data.parentNode.style.fontWeight = "normal";

-		this._dateSlot[index].data.parentNode.style.border= "none";

-		index++;

-	}

-        

-    for (i = 1; i <= monthLength; i++, index++) {

-		this._dateSlot[index].value = i;

-		this._dateSlot[index].data.data = i;

-		this._dateSlot[index].data.parentNode.className = "";

-		this._dateSlot[index].data.parentNode.style.fontWeight = "normal";

-		this._dateSlot[index].data.parentNode.style.border= "none";

-		if (toISODate(d1) == today) {

-			this._dateSlot[index].data.parentNode.className = "today";

-			this._dateSlot[index].data.parentNode.style.fontWeight = "bold";

-		}

-		if (toISODate(d1) == current) {

-			this._dateSlot[index].data.parentNode.className += " current";

-			this._dateSlot[index].data.parentNode.style.border= "1px dotted WindowText";

-		}

-		if (toISODate(d1) == selected) {

-			this._dateSlot[index].data.parentNode.className += " selected";

-			this._dateSlot[index].data.parentNode.style.border= "1px solid WindowText";

-		}

-		d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate()+1);

-	}

-	

-	var lastDateIndex = index;

-        

-    while(index < 42) {

-		this._dateSlot[index].value = -1;

-		this._dateSlot[index].data.data = String.fromCharCode(160);

-		this._dateSlot[index].data.parentNode.className = "";

-		this._dateSlot[index].data.parentNode.style.fontWeight = "normal";

-		this._dateSlot[index].data.parentNode.style.border= "none";

-		++index;

-	}

-	

-	// Week numbers

-	if (this._includeWeek) {

-		d1 = new Date(date.getFullYear(), date.getMonth(), 1);

-		for (i=0; i < 6; ++i) {

-			if (i == 5 && lastDateIndex < 36) {

-				this._weekSlot[i].data.data = String.fromCharCode(160);

-				this._weekSlot[i].data.parentNode.style.borderRight = "none";

-			} else {

-				week = weekNumber(this, d1);

-				this._weekSlot[i].data.data = week;

-				this._weekSlot[i].data.parentNode.style.borderRight = "1px solid WindowText";

-			}

-			d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate()+7);

-		}

-	}

-}

-

-Calendar.prototype.show = function(element) {

-	if(!this._showing) {

-		var p = getPoint(element);

-		this._calDiv.style.display = "block";

-		this._calDiv.style.top = (p.y + element.offsetHeight + 1) + "px";

-		this._calDiv.style.left = p.x + "px";

-		this._showing = true;

-		

-		/* -------- */

-	   	if( this._bw.ie6 )

-	   	{

-	     	dw = this._calDiv.offsetWidth;

-	     	dh = this._calDiv.offsetHeight;

-	     	var els = document.getElementsByTagName("body");

-	     	var body = els[0];

-	     	if( !body ) return;

-	 

-	    	//paste iframe under the modal

-		     var underDiv = this._calDiv.cloneNode(false); 

-		     underDiv.style.zIndex="390";

-		     underDiv.style.margin = "0px";

-		     underDiv.style.padding = "0px";

-		     underDiv.style.display = "block";

-		     underDiv.style.width = dw;

-		     underDiv.style.height = dh;

-		     underDiv.style.border = "1px solid WindowText";

-		     underDiv.innerHTML = "<iframe width=\"100%\" height=\"100%\" src='javascript:false' frameborder=\"0\"></iframe>";

-		     body.appendChild(underDiv);

-		     this._underDiv = underDiv;

-	   }

-		/* -------- */

-

-        if (this._calDiv.focus)

-          this._calDiv.focus();

-		

-	}

-};

-

-Calendar.prototype.hide = function() {   

-	if(this._showing) {

-		this._calDiv.style.display = "none";

-		this._showing = false;

-		if( this._bw.ie6 ) {

-		    if( this._underDiv ) this._underDiv.removeNode(true);

-		}

-	}

-}

-

-Calendar.prototype.toggle = function(element) {

-	if(this._showing) {

-		this.hide(); 

-	} else {

-		this.show(element);

-	}

-}

-

-

-

-Calendar.prototype.onchange = function() {};

-

-

-Calendar.prototype.setCurrentDate = function(date) {

-	if (date == null) {

-		return;

-	}

-

-	// if string or number create a Date object

-	if (typeof date == "string" || typeof date == "number") {

-		date = new Date(date);

-	}

-	

-	

-	// do not update if not really changed

-	if (this._currentDate.getDate() != date.getDate() ||

-		this._currentDate.getMonth() != date.getMonth() || 

-		this._currentDate.getFullYear() != date.getFullYear()) {

-		

-		this._currentDate = new Date(date);

-	

-		this._updateHeader();

-		this._update();

-		

-	}

-	

-}

-

-Calendar.prototype.setSelectedDate = function(date) {

-	this._selectedDate = new Date(date);

-	this.setCurrentDate(this._selectedDate);

-	if (typeof this.onchange == "function") {

-		this.onchange();

-	}

-}

-

-Calendar.prototype.clearSelectedDate = function() {

-	this._selectedDate = null;

-	if (typeof this.onchange == "function") {

-		this.onchange();

-	}

-}

-

-Calendar.prototype.getElement = function() {

-	return this._calDiv;

-}

-

-Calendar.prototype.setIncludeWeek = function(v) {

-	if (this._calDiv == null) {

-		this._includeWeek = v;

-	}

-}

-

-Calendar.prototype.setClearButtonLabel = function(v) {

-  this._clearButtonLabel = v;

-}

-

-Calendar.prototype.getSelectedDate = function () {

-	if (this._selectedDate == null) {

-		return null;

-	} else {

-		return new Date(this._selectedDate);

-	}

-}

-

-Calendar.prototype.initialize = function(monthNames, shortMonthNames, weekDayNames, shortWeekDayNames, format,

-  firstDayOfWeek, includeWeek, minimalDaysInFirstWeek, clearButtonLabel)

-{

-  this.setMonthNames(monthNames);

-  this.setShortMonthNames(shortMonthNames);

-  this.setWeekDayNames(weekDayNames);

-  this.setShortWeekDayNames(shortWeekDayNames);

-  this.setFormat(format);

-  this.setFirstDayOfWeek(firstDayOfWeek);

-  this.setIncludeWeek(includeWeek);

-  this.setMinimalDaysInFirstWeek(minimalDaysInFirstWeek);

-  this.setClearButtonLabel(clearButtonLabel);

-  

-  this.create();

-}

-

-

-Calendar.prototype._updateHeader = function () {

-

-	// 

-	var options = this._monthSelect.options;

-	var m = this._currentDate.getMonth();

-	for(var i=0; i < options.length; ++i) {

-		options[i].selected = false;

-		if (options[i].value == m) {

-			options[i].selected = true;

-		}

-	}

-	

-	options = this._yearSelect.options;

-	var year = this._currentDate.getFullYear();

-	for(var i=0; i < options.length; ++i) {

-		options[i].selected = false;

-		if (options[i].value == year) {

-			options[i].selected = true;

-		}

-	}

-	

-}

-

-Calendar.prototype.setYear = function(year) {

-	var d = new Date(this._currentDate);

-	d.setFullYear(year);

-	this.setCurrentDate(d);

-}

-

-Calendar.prototype.setMonth = function (month) {

-	var d = new Date(this._currentDate);

-	d.setMonth(month);

-	this.setCurrentDate(d);

-}

-

-Calendar.prototype.nextMonth = function () {

-	this.setMonth(this._currentDate.getMonth()+1);

-}

-

-Calendar.prototype.prevMonth = function () {

-	this.setMonth(this._currentDate.getMonth()-1);

-}

-

-Calendar.prototype.setFirstDayOfWeek = function (nFirstWeekDay) {

-	this._firstDayOfWeek = nFirstWeekDay;

-}

-

-Calendar.prototype.getFirstDayOfWeek = function () {

-	return this._firstDayOfWeek;

-}

-

-Calendar.prototype.setMinimalDaysInFirstWeek = function(n) {

-	this._minimalDaysInFirstWeek = n;

-}

-

-

-Calendar.prototype.getMinimalDaysInFirstWeek = function () {

-	return this._minimalDaysInFirstWeek;

-}

-

-Calendar.prototype.setMonthNames = function(a) {

-	// sanity test

-	this._monthNames = a;

-}

-

-Calendar.prototype.setShortMonthNames = function(a) {

-	// sanity test

-	this._shortMonthNames = a;

-}

-

-Calendar.prototype.setWeekDayNames = function(a) {

-	// sanity test

-	this._weekDayNames = a;

-}

-

-Calendar.prototype.setShortWeekDayNames = function(a) {

-	// sanity test

-	this._shortWeekDayNames = a;

-}

-

-Calendar.prototype.getFormat = function() {

-	return this._format;

-}

-	

-Calendar.prototype.setFormat = function(f) {

-	this._format = f;

-}

-

-Calendar.prototype.formatDate = function() {  

-	if (this._selectedDate == null) {

-		return "";

-	}

-	

-    var bits = new Array();

-    // work out what each bit should be

-    var date = this._selectedDate;

-    bits['d'] = date.getDate();

-    bits['dd'] = pad(date.getDate(),2);

-    bits['ddd'] = this._shortWeekDayNames[date.getDay()];

-    bits['dddd'] = this._weekDayNames[date.getDay()];

-

-    bits['M'] = date.getMonth()+1;

-    bits['MM'] = pad(date.getMonth()+1,2);

-    bits['MMM'] = this._shortMonthNames[date.getMonth()];

-    bits['MMMM'] = this._monthNames[date.getMonth()];

-    

-    var yearStr = "" + date.getFullYear();

-    yearStr = (yearStr.length == 2) ? '19' + yearStr: yearStr;

-    bits['yyyy'] = yearStr;

-    bits['yy'] = bits['yyyy'].toString().substr(2,2);

-

-    bits['s'] = date.getSeconds();
-    bits['ss'] = pad(date.getSeconds(),2);
-    
-    bits['m'] = date.getMinutes();
-    bits['mm'] = pad(date.getMinutes(),2);
-    
-    bits['H'] = date.getHours();
-    bits['HH'] = pad(date.getHours(),2); 

-

-    // do some funky regexs to replace the format string

-    // with the real values

-    var frm = new String(this._format);

-    // TAPESTRY-669: Have to be very explicit about keys, to keep functions added

-    // to Array (by the Prototype library, if its around) from getting mixed in.

-    var keys = new Array('d','dd','ddd','dddd','M','MM','MMM','MMMM','yyyy','yy', 's', 'ss', 'm',

-        'mm', 'H', 'HH');

-    for (var i = 0; i < keys.length; i++) {

-       frm = eval("frm.replace(/\\b" + keys[i] + "\\b/,\"" + bits[keys[i]] + "\");");      

-    }     

-

-    return frm;

-}

-	

-                                                                                                       

-function isLeapYear(year) {

-	return ((year%4 == 0) && ((year%100 != 0) || (year%400 == 0)));

-}

-

-function yearLength(year) {

-	if (isLeapYear(year))

-		return 366;

-	else

-		return 365;

-}

-

-function dayOfYear(date) {

-	var a = Calendar.NUM_DAYS;

-	if (isLeapYear(date.getFullYear())) {

-		a = Calendar.LEAP_NUM_DAYS;

-	}

-	var month = date.getMonth();

-	

-	return a[month] + date.getDate();

-}

-

-// ---------------------------------------------

-// Week number stuff

-// ---------------------------------------------

-

-function weekNumber(cal, date) {

-

-	var dow = date.getDay();

-	var doy = dayOfYear(date);

-	var year = date.getFullYear();

-

-	// Compute the week of the year.  Valid week numbers run from 1 to 52

-	// or 53, depending on the year, the first day of the week, and the

-	// minimal days in the first week.  Days at the start of the year may

-	// fall into the last week of the previous year; days at the end of

-	// the year may fall into the first week of the next year.

-	var relDow = (dow + 7 - cal.getFirstDayOfWeek()) % 7; // 0..6

-	var relDowJan1 = (dow - doy + 701 - cal.getFirstDayOfWeek()) % 7; // 0..6

-	var week = Math.floor((doy - 1 + relDowJan1) / 7); // 0..53

-	if ((7 - relDowJan1) >= cal.getMinimalDaysInFirstWeek()) {

-		++week;

-	}

-

-	if (doy > 359) { // Fast check which eliminates most cases

-		// Check to see if we are in the last week; if so, we need

-		// to handle the case in which we are the first week of the

-		// next year.

-		var lastDoy = yearLength(year);

-		var lastRelDow = (relDow + lastDoy - doy) % 7;

-		if (lastRelDow < 0) {

-			lastRelDow += 7;

-		}

-		if (((6 - lastRelDow) >= cal.getMinimalDaysInFirstWeek())

-			&& ((doy + 7 - relDow) > lastDoy)) {

-			week = 1;

-		}

-	} else if (week == 0) {

-		// We are the last week of the previous year.

-		var prevDoy = doy + yearLength(year - 1);

-		week = weekOfPeriod(cal, prevDoy, dow);

-	}

-

-	return week;

-}

-

-function weekOfPeriod(cal, dayOfPeriod, dayOfWeek) {

-	// Determine the day of the week of the first day of the period

-	// in question (either a year or a month).  Zero represents the

-	// first day of the week on this calendar.

-	var periodStartDayOfWeek =

-		(dayOfWeek - cal.getFirstDayOfWeek() - dayOfPeriod + 1) % 7;

-	if (periodStartDayOfWeek < 0) {

-		periodStartDayOfWeek += 7;

-	}

-

-	// Compute the week number.  Initially, ignore the first week, which

-	// may be fractional (or may not be).  We add periodStartDayOfWeek in

-	// order to fill out the first week, if it is fractional.

-	var weekNo = Math.floor((dayOfPeriod + periodStartDayOfWeek - 1) / 7);

-

-	// If the first week is long enough, then count it.  If

-	// the minimal days in the first week is one, or if the period start

-	// is zero, we always increment weekNo.

-	if ((7 - periodStartDayOfWeek) >= cal.getMinimalDaysInFirstWeek()) {

-		++weekNo;

-	}

-

-	return weekNo;

-}

-

-

-

-

-function getEventObject(e) {  // utility function to retrieve object from event

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        return e.srcElement;

-    } else {  // is mozilla/netscape

-        // need to crawl up the tree to get the first "real" element

-        // i.e. a tag, not raw text

-        var o = e.target;

-        while (!o.tagName) {

-            o = o.parentNode;

-        }

-        return o;

-    }

-}

-

-function addEvent(name, obj, funct) { // utility function to add event handlers

-

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.attachEvent("on"+name, funct);

-    } else {  // is mozilla/netscape

-        obj.addEventListener(name, funct, false);

-    }

-}

-

-

-function deleteEvent(name, obj, funct) { // utility function to delete event handlers

-

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.detachEvent("on"+name, funct);

-    } else {  // is mozilla/netscape

-        obj.removeEventListener(name, funct, false);

-    }

-}

-

-function setCursor(obj) {

-   if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.style.cursor = "hand";

-    } else {  // is mozilla/netscape

-        obj.style.cursor = "pointer";

-    }

-}

-

-function Point(iX, iY)

-{

-   this.x = iX;

-   this.y = iY;

-}

-

-

-function getPoint(aTag)

-{

-   var oTmp = aTag;  

-   var point = new Point(0,0);

-  

-   do 

-   {

-      point.x += oTmp.offsetLeft;

-      point.y += oTmp.offsetTop;

-      oTmp = oTmp.offsetParent;

-   } 

-   while (oTmp.tagName != "BODY" && oTmp.tagName != "HTML");

-

-   return point;

-}

-

-function toISODate(date) {

-	var s = date.getFullYear();

-	var m = date.getMonth() + 1;

-	if (m < 10) {

-		m = "0" + m;

-	}

-	var day = date.getDate();

-	if (day < 10) {

-		day = "0" + day;

-	}

-	return String(s) + String(m) + String(day);

-	

-}

-

-function pad(number,X) {   // utility function to pad a number to a given width

-	X = (!X ? 2 : X);

-	number = ""+number;

-	while (number.length < X) {

-	    number = "0" + number;

-	}

-	return number;

-}

-

-function bw_check()

-{

-    var is_major = parseInt( navigator.appVersion );

-    this.nver = is_major;

-    this.ver = navigator.appVersion;

-    this.agent = navigator.userAgent;

-    this.dom = document.getElementById ? 1 : 0;

-    this.opera = window.opera ? 1 : 0;

-    this.ie5 = ( this.ver.indexOf( "MSIE 5" ) > -1 && this.dom && !this.opera ) ? 1 : 0;

-    this.ie6 = ( this.ver.indexOf( "MSIE 6" ) > -1 && this.dom && !this.opera ) ? 1 : 0;

-    this.ie4 = ( document.all && !this.dom && !this.opera ) ? 1 : 0;

-    this.ie = this.ie4 || this.ie5 || this.ie6;

-    this.mac = this.agent.indexOf( "Mac" ) > -1;

-    this.ns6 = ( this.dom && parseInt( this.ver ) >= 5 ) ? 1 : 0;

-    this.ie3 = ( this.ver.indexOf( "MSIE" ) && ( is_major < 4 ) );

-    this.hotjava = ( this.agent.toLowerCase().indexOf( 'hotjava' ) != -1 ) ? 1 : 0;

-    this.ns4 = ( document.layers && !this.dom && !this.hotjava ) ? 1 : 0;

-    this.bw = ( this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera );

-    this.ver3 = ( this.hotjava || this.ie3 );

-    this.opera7 = ( ( this.agent.toLowerCase().indexOf( 'opera 7' ) > -1 ) || ( this.agent.toLowerCase().indexOf( 'opera/7' ) > -1 ) );

-    this.operaOld = this.opera && !this.opera7;

-    return this;

-};

-

-

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.jwc
deleted file mode 100644
index 468b565..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.jwc
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.form.DatePicker" allow-body="no">
-  
-  <description>
-    Provides a form Date field component for selecting dates.
-    DatePicker presents a drop down monthly calendar for users to select dates from.
-  </description>
- 
-  <parameter name="value" required="yes"/>
-  <parameter name="disabled"/>
-  <parameter name="includeWeek"/>
-  <parameter name="icon" default-value="asset:defaultIcon"/>
-  
-  <parameter name="displayName"/>
-  <parameter name="translator" default-value="translator:date,pattern=dd MMM yyyy"/>
-  <parameter name="validators"/>
-  <parameter name="id" property="idParameter" default-value="id"/>
-  <parameter name="title"/>
-  <parameter name="imageClass" default-value="literal:datePickerImg" />
-  
-  <asset name="defaultIcon" path="DatePickerIcon.png"/>
-  
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="type"/>  
-       
-  <inject property="script" type="script" object="DatePicker.script"/>
-  <inject property="translatedFieldSupport" object="service:tapestry.form.TranslatedFieldSupport"/>
-  <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.properties
deleted file mode 100644
index 4e59ab2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-clear=Clear

-alt=Click on icon to choose a date/time value.

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.script
deleted file mode 100644
index 9a7658a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePicker.script
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://tapestry.apache.org/dtd/Script_3_0.dtd">
-  
-<script>
-
-<include-script resource-path="DatePicker.js"/>
-
-<input-symbol key="name"  class="java.lang.String" required="yes"/>
-<input-symbol key="formName" class="java.lang.String" required="yes"/>
-<input-symbol key="monthNames"  required="yes"/>
-<input-symbol key="shortMonthNames" required="yes"/>
-<input-symbol key="weekDayNames" required="yes"/>
-<input-symbol key="shortWeekDayNames"  required="yes"/>
-<input-symbol key="firstDayInWeek" required="yes"/>
-<input-symbol key="minimalDaysInFirstWeek" required="yes"/>
-<input-symbol key="format" required="yes"/>
-<input-symbol key="includeWeek" required="yes"/>
-<input-symbol key="clearButtonLabel" required="yes"/>
-<input-symbol key="value" required="no"/>
-
-<let key="calendarObject" unique="yes">
-	calendar_${name}	
-</let>
-
-<let key="buttonOnclickHandler">
-  javascript:${calendarObject}.toggle(dojo.byId("${name}"));	
-</let>
-
-<body>
-var ${calendarObject};
-</body>
-
-<initialization>	
-<if expression="value == null">
-${calendarObject} = new Calendar();
-</if>
-<if expression="value != null">
-${calendarObject} = new Calendar(${value.time});
-</if>	
-${calendarObject}.initialize([${monthNames}],
-  [${shortMonthNames}],
-  [${weekDayNames}],
-  [${shortWeekDayNames}],
-  "${format}", ${firstDayInWeek}, ${includeWeek}, ${minimalDaysInFirstWeek}, "${clearButtonLabel}");
-${calendarObject}.onchange = function() {
-  var field = dojo.byId("${formName}").${name};
-  var value = ${calendarObject}.formatDate();
-	if (field.value != value) {
-    field.value = value;
-    if (field.onchange) { field.onchange();}
-  }
-}
-</initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePickerIcon.png b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePickerIcon.png
deleted file mode 100644
index 0b9a96e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DatePickerIcon.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DefaultOptionRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DefaultOptionRenderer.java
deleted file mode 100644
index 222db85..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/DefaultOptionRenderer.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-
-/**
- * The default implementation of {@link IOptionRenderer} which is used by 
- * the {@link PropertySelection} component if no other renderer is specified
- * in the component parameters.
- */
-public class DefaultOptionRenderer implements IOptionRenderer
-{
-
-    /**
-     * Default instance used by {@link PropertySelection} if no custom renderer is 
-     * specified.
-     */
-    
-    public static final IOptionRenderer DEFAULT_INSTANCE = new DefaultOptionRenderer();
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void renderOptions(IMarkupWriter writer, IRequestCycle cycle, IPropertySelectionModel model, Object selected)
-    {
-        int count = model.getOptionCount();
-        boolean foundSelected = false;
-        
-        for (int i = 0; i < count; i++)
-        {
-            Object option = model.getOption(i);
-            
-            writer.begin("option");
-            writer.attribute("value", model.getValue(i));
-
-            if (!foundSelected && isEqual(option, selected))
-            {
-                writer.attribute("selected", "selected");
-                
-                foundSelected = true;
-            }
-            
-            if (model.isDisabled(i))
-                writer.attribute("disabled", "true");
-            
-            writer.print(model.getLabel(i));
-
-            writer.end();
-
-            writer.println();
-        }
-    }
-    
-    protected boolean isEqual(Object left, Object right)
-    {
-        // Both null, or same object, then are equal
-
-        if (left == right)
-            return true;
-        
-        // If one is null, the other isn't, then not equal.
-        
-        if (left == null || right == null)
-            return false;
-        
-        // Both non-null; use standard comparison.
-        
-        return left.equals(right);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Form.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Form.java
deleted file mode 100644
index 7059696..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Form.java
+++ /dev/null
@@ -1,414 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.DirectServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.web.WebResponse;
-
-/**
- * Component which contains form element components. A Form will wrap other components and 
- * static HTML, including form components such as {@link TextArea}, {@link TextField}, 
- * {@link Checkbox}, etc. [ <a href="../../../../../ComponentReference/Form.html">Component Reference </a>]
- * 
- * <p>
- * When a form is submitted, it continues through the rewind cycle until <em>after</em> all of its
- * wrapped elements have renderred. As the form component render (in the rewind cycle), they will be
- * updating properties of the containing page and notifying thier listeners. Again: each form
- * component is responsible not only for rendering HTML (to present the form), but for handling it's
- * share of the form submission.
- * </p>
- * 
- * <p>
- * Only after all that is done will the Form notify its listener.
- * </p>
- * 
- * <p>
- * Release 4.0 adds two new listeners, {@link #getCancel()} and {@link #getRefresh()} and
- * corresponding client-side behavior to force a form to refresh (update, bypassing input field
- * validation) or cancel (update immediately).
- * </p>
- * 
- * @author Howard Lewis Ship, David Solis
- */
-
-public abstract class Form extends AbstractComponent implements IForm
-{
-    private String _name;
-
-    private FormSupport _formSupport;
-    
-    /**
-     * Renders informal parameters.
-     * @author hls
-     */
-    private class RenderInformalParameters implements IRender
-    {
-        public void render(IMarkupWriter writer, IRequestCycle cycle)
-        {
-            renderInformalParameters(writer, cycle);
-        }
-    }
-
-    private IRender _renderInformalParameters;
-
-    /**
-     * Indicates to any wrapped form components that they should respond to the form submission.
-     * 
-     * @throws ApplicationRuntimeException
-     *             if not rendering.
-     */
-
-    public boolean isRewinding()
-    {
-        if (!isRendering())
-            throw Tapestry.createRenderOnlyPropertyException(this, "rewinding");
-
-        return _formSupport.isRewinding();
-    }
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-
-    public abstract IEngineService getDirectService();
-
-    /**
-     * Returns true if the stateful parameter is bound to a true value. If stateful is not bound,
-     * also returns the default, true.
-     * 
-     * @since 1.0.1
-     */
-
-    public boolean getRequiresSession()
-    {
-        return isStateful();
-    }
-
-    /**
-     * Constructs a unique identifier (within the Form). The identifier consists of the component's
-     * id, with an index number added to ensure uniqueness.
-     * <p>
-     * Simply invokes
-     * {@link #getElementId(org.apache.tapestry.form.IFormComponent, java.lang.String)}with the
-     * component's id.
-     * 
-     * @since 1.0.2
-     */
-
-    public String getElementId(IFormComponent component)
-    {
-        return _formSupport.getElementId(component, component.getSpecifiedId());
-    }
-
-    /**
-     * Constructs a unique identifier from the base id. If possible, the id is used as-is.
-     * Otherwise, a unique identifier is appended to the id.
-     * <p>
-     * This method is provided simply so that some components ({@link ImageSubmit}) have more
-     * specific control over their names.
-     * 
-     * @since 1.0.3
-     */
-
-    public String getElementId(IFormComponent component, String baseId)
-    {
-        return _formSupport.getElementId(component, baseId);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public String peekClientId(IFormComponent component)
-    {
-        return _formSupport.peekClientId(component);
-    }
-    
-    /**
-     * Returns the name generated for the form. This is used to faciliate components that write
-     * JavaScript and need to access the form or its contents.
-     * <p>
-     * This value is generated when the form renders, and is not cleared. If the Form is inside a
-     * {@link org.apache.tapestry.components.ForBean}, this will be the most recently generated
-     * name for the Form.
-     * <p>
-     * This property is exposed so that sophisticated applications can write JavaScript handlers for
-     * the form and components within the form.
-     * 
-     * @see AbstractFormComponent#getName()
-     */
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    /** @since 3.0 * */
-
-    protected void prepareForRender(IRequestCycle cycle)
-    {
-        super.prepareForRender(cycle);
-
-        TapestryUtils.storeForm(cycle, this);
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        super.cleanupAfterRender(cycle);
-        
-        _formSupport = null;
-        
-        TapestryUtils.removeForm(cycle);
-
-        IValidationDelegate delegate = getDelegate();
-
-        if (delegate != null)
-            delegate.setFormComponent(null);
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        _formSupport = newFormSupport(writer, cycle);
-        
-        if (isRewinding())
-        {
-            String submitType = _formSupport.rewind();
-
-            IActionListener listener = findListener(submitType);
-
-            getListenerInvoker().invokeListener(listener, this, cycle);
-
-            // Abort the rewind render.
-
-            throw new RenderRewoundException(this);
-        }
-        
-        // Note: not safe to invoke getNamespace() in Portlet world
-        // except during a RenderRequest.
-        
-        _name = getClientId() + getResponse().getNamespace();
-        
-        if (_renderInformalParameters == null)
-            _renderInformalParameters = new RenderInformalParameters();
-        
-        ILink link = getLink(cycle);
-        
-        _formSupport.render(getMethod(), _renderInformalParameters, link, getScheme(), getPort());
-    }
-    
-    IActionListener findListener(String mode)
-    {
-        IActionListener result = null;
-
-        if (mode.equals(FormConstants.SUBMIT_CANCEL))
-            result = getCancel();
-        else if (mode.equals(FormConstants.SUBMIT_REFRESH))
-            result = getRefresh();
-        else if (!getDelegate().getHasErrors())
-            result = getSuccess();
-
-        // If not success, cancel or refresh, or the corresponding listener
-        // is itself null, then use the default listener
-        // (which may be null as well!).
-
-        if (result == null)
-            result = getListener();
-
-        return result;
-    }
-    
-    /**
-     * Returns a new instance of {@link FormSupportImpl}.
-     */
-
-    protected FormSupport newFormSupport(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        return getFormSupportFactory().createFormSupport(writer, cycle, this);
-    }
-
-    /**
-     * Adds an additional event handler.
-     * 
-     * @since 1.0.2
-     */
-
-    public void addEventHandler(FormEventType type, String functionName)
-    {
-        _formSupport.addEventHandler(type, functionName);
-    }
-
-    /**
-     * Simply invokes {@link #render(IMarkupWriter, IRequestCycle)}.
-     * 
-     * @since 1.0.2
-     */
-
-    public void rewind(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        cycle.getResponseBuilder().render(writer, this, cycle);
-    }
-    
-    /**
-     * Method invoked by the direct service.
-     * 
-     * @since 1.0.2
-     */
-
-    public void trigger(IRequestCycle cycle)
-    {
-        cycle.rewindForm(this);
-    }
-    
-    /**
-     * Builds the EngineServiceLink for the form.
-     * 
-     * @since 1.0.3
-     */
-
-    private ILink getLink(IRequestCycle cycle)
-    {
-        Object parameter = new DirectServiceParameter(this);
-        
-        return getDirectService().getLink(true, parameter);
-    }
-
-    /** Injected. */
-    public abstract WebResponse getResponse();
-
-    /**
-     * delegate parameter, which has a default (starting in release 4.0).
-     */
-
-    public abstract IValidationDelegate getDelegate();
-
-    /** listener parameter, may be null. */
-    public abstract IActionListener getListener();
-
-    /** success parameter, may be null. */
-    public abstract IActionListener getSuccess();
-
-    /** cancel parameter, may be null. */
-    public abstract IActionListener getCancel();
-
-    /** refresh parameter, may be null. */
-    public abstract IActionListener getRefresh();
-
-    /** method parameter. */
-    public abstract String getMethod();
-
-    /** stateful parameter. */
-    public abstract boolean isStateful();
-
-    /** scheme parameter, may be null. */
-    public abstract String getScheme();
-    
-    /** port , may be null. */
-    public abstract Integer getPort();
-
-    public void setEncodingType(String encodingType)
-    {
-        _formSupport.setEncodingType(encodingType);
-    }
-
-    /** @since 3.0 */
-
-    public void addHiddenValue(String name, String value)
-    {
-        _formSupport.addHiddenValue(name, value);
-    }
-
-    /** @since 3.0 */
-
-    public void addHiddenValue(String name, String id, String value)
-    {
-        _formSupport.addHiddenValue(name, id, value);
-    }
-
-    public void prerenderField(IMarkupWriter writer, IComponent field, Location location)
-    {
-        _formSupport.prerenderField(writer, field, location);
-    }
-
-    public boolean wasPrerendered(IMarkupWriter writer, IComponent field)
-    {
-        return _formSupport.wasPrerendered(writer, field);
-    }
-
-    public boolean wasPrerendered(IComponent field)
-    {
-        return _formSupport.wasPrerendered(field);
-    }
-
-    /** @since 4.0 */
-
-    public void addDeferredRunnable(Runnable runnable)
-    {
-        _formSupport.addDeferredRunnable(runnable);
-    }
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-
-    public abstract ListenerInvoker getListenerInvoker();
-
-    public void registerForFocus(IFormComponent field, int priority)
-    {
-        _formSupport.registerForFocus(field, priority);
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public JSONObject getProfile()
-    {
-        return _formSupport.getProfile();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isFormFieldUpdating()
-    {
-        return _formSupport.isFormFieldUpdating();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public void setFormFieldUpdating(boolean value)
-    {
-        _formSupport.setFormFieldUpdating(value);
-    }
-    
-    /**
-     * Injected.
-     * 
-     * @since 4.1.1
-     */
-
-    public abstract FormSupportFactory getFormSupportFactory();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Form.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Form.jwc
deleted file mode 100644
index 7686968..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Form.jwc
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.form.Form">
-
-    <!-- Note: remember to keep Go.jwc synchronized with any changes here! -->
-
-    <description>Used to implement an HTML form.</description>
-
-    <bean name="defaultDelegate" class="org.apache.tapestry.valid.ValidationDelegate" />
-
-    <parameter name="method" default-value="literal:post">
-        <description>
-            The method used by the form when it is submitted, defaults to "post".
-        </description>
-    </parameter>
-
-    <parameter name="success">
-        <description>
-            Object invoked when the form is submitted normally (not a cancel or a refresh) and the
-            validation delegate contains no errors.
-        </description>
-    </parameter>
-
-    <parameter name="cancel">
-        <description>
-            Object invoked when the form is cancelled (a special type of form submission). The
-            cancel listener (if any) overrides the standard listener. Other properties will not be
-            affected by the rewind.
-        </description>
-    </parameter>
-
-    <parameter name="refresh">
-        <description>
-            Object invoked when the form is refreshed (a special type of form submission). The
-            refresh listener (if any) overrides the standard listener. Other properties managed by
-            enclosed components will be updated.
-        </description>
-    </parameter>
-
-    <parameter name="listener">
-        <description>Default listener used when no other listener is invoked.</description>
-    </parameter>
-
-    <parameter name="stateful" default-value="true">
-        <description>
-            If true (the default), then an active session is required when the form is submitted, if
-            there was an active session when the form was rendered.
-        </description>
-    </parameter>
-
-    <parameter name="delegate" default-value="bean:defaultDelegate">
-        <description>
-            Specifies the delegate to be used by fields to track input errors. If not specified, the
-            Form provides a default instance of org.apache.tapestry.valid.ValidationDelegate.
-        </description>
-    </parameter>
-
-    <parameter name="clientValidationEnabled">
-        <description>
-            If true then client-side validation will be generated upon render for any required or
-            validating fields.
-        </description>
-    </parameter>
-
-    <parameter name="focus" default-value="true">
-        <description>
-            If true (the default), then the form will attempt to get field focus on the first field
-            in error (or first required field, or just first field) within the form. Set to false to
-            allow a different Form on the same page to claim field focus.
-        </description>
-    </parameter>
-
-    <parameter name="scheme">
-        <description>
-            Forces the link to be generated as an absolute URL with the given scheme (unless the
-            scheme matches the scheme for the current request).
-        </description>
-    </parameter>
-
-    <parameter name="port">
-        <description>
-            Forces the link to be generated as an absolute URL with the given port (unless the port
-            matches the port for the current request).
-        </description>
-    </parameter>
-
-    <parameter name="updateComponents" />
-
-    <parameter name="json" default-value="false" />
-
-    <parameter name="async" default-value="false" />
-
-    <reserved-parameter name="action" />
-    <reserved-parameter name="name" />
-    <reserved-parameter name="onsubmit" />
-    <reserved-parameter name="onreset" />
-    <reserved-parameter name="enctype" />
-    <reserved-parameter name="id" />
-
-    <asset name="clientValidationScript" path="classpath:/dojo-0.4.3/dojo3.js" />
-
-    <inject property="directService" object="engine-service:direct" />
-    <inject property="response" object="infrastructure:response" />
-    <inject property="listenerInvoker" object="infrastructure:listenerInvoker" />
-    <inject property="formSupportFactory" object="service:tapestry.form.FormSupportFactory"/>
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormComponentContributor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormComponentContributor.java
deleted file mode 100644
index ab86161..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormComponentContributor.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Interface for objects that contribute client-side events back to a form.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public interface FormComponentContributor
-{
-    /**
-     * Invoked by a form component after it finishes rendering its tag (but before the tag is
-     * closed) to allow this object to contribute to the component's rendering process. Typically
-     * used by Validators and Translators to add javascript methods to the form's submit event
-     * handler.
-     * 
-     * @param writer
-     *            allows contributor to write additional attributes into the component's tag
-     * @param cycle
-     *            for accessing request information
-     * @param context
-     *            utilities for genering messages and client-side validation
-     * @param field
-     *            the field for which contributions are being rendered
-     */
-    void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormComponentContributorContext.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormComponentContributorContext.java
deleted file mode 100644
index 70ccf31..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormComponentContributorContext.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.FormBehavior;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.util.RegexpMatcher;
-import org.apache.tapestry.valid.ValidationConstants;
-
-/**
- * Object that provides support to objects that implement
- * {@link org.apache.tapestry.form.FormComponentContributor}. For the moment, at least, this is all
- * about client-side JavaScript generation.
- * <p>
- * TODO: Having support for regular expressions might be useful (and would allow a single
- * {@link RegexpMatcher to be shared}).
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface FormComponentContributorContext extends ValidationMessages
-{
-    /**
-     * Includes the indicated script; the path is a path on the classpath.
-     */
-
-    void includeClasspathScript(String path);
-
-    /**
-     * Adds initialization to register a submit handler on the client side. A submit handler is a
-     * JavaScript method that accepts a single parameter, a (JavaScript) FormSubmitEvent.
-     * 
-     * @param submitListener
-     *            either the name of a submit listener ("myListener"), or an inline implementation
-     *            of a listener function ("function(event) { ... } ").
-     * @deprecated To be removed in 4.2 with no replacement. The new preferred way to do this is by using simple
-     * <code>dojo.event.connect("formName", "event", object, "functionName)</code> style connections.
-     */
-
-    void addSubmitHandler(String handler);
-    
-    /**
-     * Adds initialization javascript code that will be executed on page/content/etc load.
-     * @param target 
-     *          The component the script is being added for.
-     * @param script
-     *          The javascript code to execute.
-     */
-    void addInitializationScript(IComponent target, String script);
-    
-    /**
-     * Registers a field for automatic focus. The goal is for the first field that is in error to
-     * get focus; failing that, the first required field; failing that, any field.
-     * 
-     * @param priority
-     *            a priority level used to determine whether the registered field becomes the focus
-     *            field. Constants for this purpose are defined in {@link ValidationConstants}.
-     * @see org.apache.tapestry.FormBehavior#registerForFocus(IFormComponent, int)
-     */
-
-     void registerForFocus(int priority);
-     
-     /**
-      * The javascript object profile being built by this context to validate/translate
-      * form values. This is really just a delegate to {@link FormBehavior}.
-      * @return {@link JSONObject} profile.
-      */
-     JSONObject getProfile();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormComponentContributorContextImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormComponentContributorContextImpl.java
deleted file mode 100644
index 9eb95ff..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormComponentContributorContextImpl.java
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.util.Locale;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.json.JSONObject;
-
-/**
- * Implementation of {@link org.apache.tapestry.form.FormComponentContributorContext}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class FormComponentContributorContextImpl extends ValidationMessagesImpl implements
-        FormComponentContributorContext
-{
-    private final ClassResolver _resolver;
-
-    private final PageRenderSupport _pageRenderSupport;
-
-    private final IFormComponent _field;
-
-    private final IForm _form;
-
-    private final String _formId;
-    
-    /**
-     * Used only for testing.
-     */
-
-    FormComponentContributorContextImpl(IFormComponent field)
-    {
-        super(field, Locale.ENGLISH);
-
-        _field = field;
-        _resolver = null;
-        _formId = null;
-        _pageRenderSupport = null;
-        _form = null;
-    }
-
-    public FormComponentContributorContextImpl(Locale locale, IRequestCycle cycle,
-            IFormComponent field)
-    {
-        super(field, locale);
-
-        _field = field;
-        _form = field.getForm();
-        _formId = _form.getName();
-
-        _resolver = cycle.getInfrastructure().getClassResolver();
-
-        _pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, field);
-    }
-
-    public void includeClasspathScript(String path)
-    {
-        Resource resource = new ClasspathResource(_resolver, path);
-        
-        _pageRenderSupport.addExternalScript(_form, resource);
-    }
-    
-    public void addSubmitHandler(String submitListener)
-    {
-        _pageRenderSupport.addInitializationScript(_form, "Tapestry.onsubmit('" + _formId + "', "
-                + submitListener + ");");
-    }
-    
-    public void addInitializationScript(IComponent target, String script)
-    {
-        _pageRenderSupport.addInitializationScript(_form, script);
-    }
-    
-    public void registerForFocus(int priority)
-    {
-        _form.registerForFocus(_field, priority);
-    }
-
-    public JSONObject getProfile()
-    {
-        return _form.getProfile();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormConstants.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormConstants.java
deleted file mode 100644
index 3a26f06..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormConstants.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-/**
- * Constants used by the Form component.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class FormConstants
-{
-    /**
-     * Normal submit of the form, typically by the user clicking a submit control.
-     */
-
-    public static final String SUBMIT_NORMAL = "submit";
-
-    /**
-     * Indicates that the form was cancelled. A form is cancelled on the client side when the
-     * JavaScript function document.<em>form-name</em>.events.cancel() is invoked.
-     */
-
-    public static final String SUBMIT_CANCEL = "cancel";
-
-    /**
-     * Indicates that the form was submitted to force a refresh. Most client-side submit listeners
-     * will have been skipped (particularily, those related to validaton). A form is submitted for
-     * refresh on the client side when the JavaScript function document.<em>form-name</em>.events.refresh()
-     * is invoked.
-     */
-    public static final String SUBMIT_REFRESH = "refresh";
-
-    /**
-     * Query parameter reserved to identify the name of the component that triggered the form
-     * submit. This is primarily used by the {@link org.apache.tapestry.form.LinkSubmit} component.
-     */
-    public static final String SUBMIT_NAME_PARAMETER = "submitname";
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormEventType.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormEventType.java
deleted file mode 100644
index ce2a869..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormEventType.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-/**
- * Lists different types of JavaScript events that can be associated with a {@link Form} via
- * {@link Form#addEventHandler(FormEventType, String)}.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.2
- * @deprecated Managing of form events is now done on the client side; this class may be removed in
- *             a future release of Tapestry.
- */
-
-public final class FormEventType
-{
-    /**
-     * Form event triggered when the form is submitted. Allows an event handler to perform any final
-     * changes before the results are posted to the server.
-     * <p>
-     * The JavaScript method should return <code>true</code> or <code>false</code>. If there
-     * are multiple event handlers for the form they will be combined using the binary and operator (<code>&amp;&amp;</code>).
-     */
-
-    public static final FormEventType SUBMIT = new FormEventType("SUBMIT", "onsubmit");
-
-    /**
-     * Form event triggered when the form is reset; this allows an event handler to deal with any
-     * special cases related to resetting.
-     */
-
-    public static final FormEventType RESET = new FormEventType("RESET", "onreset");
-
-    private final String _name;
-
-    private final String _addHandlerFunctionName;
-
-    private FormEventType(String name, String addHandlerFunctionName)
-    {
-        _name = name;
-        _addHandlerFunctionName = addHandlerFunctionName;
-    }
-
-    public String toString()
-    {
-        return "FormEventType[" + _name + "]";
-    }
-
-    /**
-     * Returns the name of the function, on the Tapestry object (see Form.js), which should be
-     * invoked. The first parameter will be the id of the form, the second will be the handler
-     * itself.
-     */
-
-    public String getAddHandlerFunctionName()
-    {
-        return _addHandlerFunctionName;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormMessages.java
deleted file mode 100644
index 4505fce..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormMessages.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.IComponent;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class FormMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(FormMessages.class);
-
-    /* defeat instantiation */
-    private FormMessages() { }
-    
-    static String formTooManyIds(IComponent form, int actualCount, IComponent component)
-    {
-        return _formatter.format(
-                "form-too-many-ids",
-                form.getExtendedId(),
-                new Integer(actualCount),
-                component.getExtendedId());
-    }
-
-    static String formIdMismatch(IComponent form, int mismatchIndex, String expectedId,
-            String actualId, IComponent component)
-    {
-        return _formatter.format("form-id-mismatch", new Object[]
-        { form.getExtendedId(), new Integer(mismatchIndex + 1), expectedId, actualId,
-                component.getExtendedId() });
-    }
-
-    static String formTooFewIds(IComponent form, int remainingCount, String nextExpectedId)
-    {
-        return _formatter.format("form-too-few-ids", form.getExtendedId(), new Integer(
-                remainingCount), nextExpectedId);
-    }
-
-    static String encodingTypeContention(IComponent form, String establishedEncodingType,
-            String newEncodingType)
-    {
-        return _formatter.format(
-                "encoding-type-contention",
-                form.getExtendedId(),
-                establishedEncodingType,
-                newEncodingType);
-    }
-
-    static String fieldAlreadyPrerendered(IComponent field)
-    {
-        return _formatter.format("field-already-prerendered", field);
-    }
-
-    static String linkSubmitMayNotNest(IComponent inner, IComponent outer)
-    {
-        return _formatter.format("link-submit-may-not-nest", inner.getExtendedId(), outer
-                .getExtendedId(), HiveMind.getLocationString(outer));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormStrings.properties
deleted file mode 100644
index bd278d0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormStrings.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-form-too-many-ids=Rewind of form {0} expected only {1} form elements, but an additional id was requested by component {2}.
-form-id-mismatch=Rewind of form {0} expected allocated id #{1} to be ''{2}'', but was ''{3}'' (requested by component {4}).
-form-too-few-ids=Rewind of form {0} expected {1} more form elements, starting with id ''{2}''.
-encoding-type-contention=Components within form {0} have requested conflicting encoding types ''{1}'' and ''{2}''.
-field-already-prerendered=Field {0} has already been pre-rendered. This exception may indicate that a FieldLabel rendered, but the corresponding field did not.
-link-submit-may-not-nest=LinkSubmit {0} may not be enclosed by another LinkSubmit ({1}, at {2}).
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupport.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupport.java
deleted file mode 100644
index b8242d5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupport.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.FormBehavior;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * Interface for a utility object that encapsulates the majority of the
- * {@link org.apache.tapestry.form.Form}'s behavior.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface FormSupport extends FormBehavior
-{
-
-    /**
-     * Invoked when the form is rendering. This should only be invoked by the {@link Form}
-     * component.
-     * 
-     * @param method
-     *            the HTTP method ("get" or "post")
-     * @param informalParametersRenderer
-     *            object that will render informal parameters
-     * @param link
-     *            The link to which the form will submit (encapsulating the URL and the query
-     *            parameters)
-     * @param scheme
-     *            the desired scheme for the generated URL, typically "http" or "https". If
-     *            non-null, and the scheme does not match the current request's scheme, then an
-     *            absolute URL with the specified scheme will be generated, rather than a URI.
-     * @param port
-     *            the desired port for the generated URL, typically "80", "443". If
-     *            non-null, and the port does not match the current request's port, then an
-     *            absolute URL with the specified port will be generated, rather than a URI.
-     */
-    void render(String method, IRender informalParametersRenderer, ILink link, String scheme, Integer port);
-
-    /**
-     * Invoked to rewind the form, which renders the body of the form, allowing form element
-     * components to pull data from the request and update page properties. This should only be
-     * invoked by the {@link Form} component.
-     * 
-     * @return a code indicating why the form was submitted: {@link FormConstants#SUBMIT_NORMAL},
-     *         {@link FormConstants#SUBMIT_CANCEL} or {@link FormConstants#SUBMIT_REFRESH}.
-     */
-    String rewind();
-    
-    /**
-     * Gets a reference to the previously stored {@link IForm}.
-     * @return The form this object is managing/supporting.
-     * @since 4.1
-     */
-    IForm getForm();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportFactory.java
deleted file mode 100644
index 9e18c92..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportFactory.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Interface for factories that can generate {@link FormSupport} 
- * objects.
- *
- * @since 4.1.1
- */
-public interface FormSupportFactory 
-{
-    
-    /**
-     * Invoked every time an {@link IForm} is rendering in order to obtain a 
-     * {@link FormSupport} instance to support and manage the process.
-     * <p/>
-     */ 
-    FormSupport createFormSupport(IMarkupWriter writer, IRequestCycle cycle, IForm form);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportFactoryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportFactoryImpl.java
deleted file mode 100644
index 172a4e9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportFactoryImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The standard implementation of {@link FormSupportFactory}. It generates 
- * {@link FormSupportImpl} instances.
- *
- * @since 4.1.1
- */
-public class FormSupportFactoryImpl implements FormSupportFactory
-{
-    public FormSupport createFormSupport(IMarkupWriter writer, IRequestCycle cycle, IForm form) 
-    {
-        return new FormSupportImpl(writer, cycle, form);
-    }    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java
deleted file mode 100644
index add7ff3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/FormSupportImpl.java
+++ /dev/null
@@ -1,863 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.IdAllocator;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-import java.util.*;
-
-/**
- * Encapsulates most of the behavior of a Form component.
- *
- */
-public class FormSupportImpl implements FormSupport
-{
-    /**
-     * Name of query parameter storing the ids alloocated while rendering the form, as a comma
-     * seperated list. This information is used when the form is submitted, to ensure that the
-     * rewind allocates the exact same sequence of ids.
-     */
-
-    public static final String FORM_IDS = "formids";
-
-    /**
-     * Names of additional ids that were pre-reserved, as a comma-sepereated list. These are names
-     * beyond that standard set. Certain engine services include extra parameter values that must be
-     * accounted for, and page properties may be encoded as additional query parameters.
-     */
-
-    public static final String RESERVED_FORM_IDS = "reservedids";
-
-    /**
-     * Indicates why the form was submitted: whether for normal ("submit"), refresh, or because the
-     * form was canceled.
-     */
-
-    public static final String SUBMIT_MODE = "submitmode";
-
-    /**
-     * Attribute set to true when a field has been focused; used to prevent conflicting JavaScript
-     * for field focusing from being emitted.
-     */
-
-    public static final String FIELD_FOCUS_ATTRIBUTE = "org.apache.tapestry.field-focused";
-
-    private static final Set _standardReservedIds;
-
-    static
-    {
-        Set set = new HashSet();
-
-        set.addAll(Arrays.asList(ServiceConstants.RESERVED_IDS));
-        set.add(FORM_IDS);
-        set.add(RESERVED_FORM_IDS);
-        set.add(SUBMIT_MODE);
-        set.add(FormConstants.SUBMIT_NAME_PARAMETER);
-
-        _standardReservedIds = Collections.unmodifiableSet(set);
-    }
-
-    private static final Set _submitModes;
-
-    static
-    {
-        Set set = new HashSet();
-        set.add(FormConstants.SUBMIT_CANCEL);
-        set.add(FormConstants.SUBMIT_NORMAL);
-        set.add(FormConstants.SUBMIT_REFRESH);
-
-        _submitModes = Collections.unmodifiableSet(set);
-    }
-
-    protected final IRequestCycle _cycle;
-
-    protected final IdAllocator _elementIdAllocator = new IdAllocator();
-
-    /**
-     * Used when rewinding the form to figure to match allocated ids (allocated during the rewind)
-     * against expected ids (allocated in the previous request cycle, when the form was rendered).
-     */
-
-    private int _allocatedIdIndex;
-
-    /**
-     * The list of allocated ids for form elements within this form. This list is constructed when a
-     * form renders, and is validated against when the form is rewound.
-     */
-
-    private final List _allocatedIds = new ArrayList();
-
-    private String _encodingType;
-
-    private final List _deferredRunnables = new ArrayList();
-
-    /**
-     * Map keyed on extended component id, value is the pre-rendered markup for that component.
-     */
-
-    private final Map _prerenderMap = new HashMap();
-
-    /**
-     * {@link Map}, keyed on {@link FormEventType}. Values are either a String (the function name
-     * of a single event handler), or a List of Strings (a sequence of event handler function
-     * names).
-     */
-
-    private Map _events;
-
-    private final IForm _form;
-
-    private final List _hiddenValues = new ArrayList();
-
-    private final boolean _rewinding;
-
-    private final IMarkupWriter _writer;
-
-    private final IValidationDelegate _delegate;
-
-    private final PageRenderSupport _pageRenderSupport;
-
-    /**
-     * Client side validation is built up using a json object syntax structure
-     */
-    private final JSONObject _profile;
-
-    /**
-     * Used to detect whether or not a form component has been updated and will require form sync on ajax requests
-     */
-    private boolean _fieldUpdating;
-
-    public FormSupportImpl(IMarkupWriter writer, IRequestCycle cycle, IForm form)
-    {
-        Defense.notNull(writer, "writer");
-        Defense.notNull(cycle, "cycle");
-        Defense.notNull(form, "form");
-
-        _writer = writer;
-        _cycle = cycle;
-        _form = form;
-        _delegate = form.getDelegate();
-
-        _rewinding = cycle.isRewound(form);
-        _allocatedIdIndex = 0;
-
-        _pageRenderSupport = TapestryUtils.getOptionalPageRenderSupport(cycle);
-        _profile = new JSONObject();
-    }
-
-    /**
-     * Alternate constructor used for testing only.
-     *
-     * @param cycle
-     *          The current cycle.
-     */
-    FormSupportImpl(IRequestCycle cycle)
-    {
-        _cycle = cycle;
-        _form = null;
-        _rewinding = false;
-        _writer = null;
-        _delegate = null;
-        _pageRenderSupport = null;
-        _profile = null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public IForm getForm()
-    {
-        return _form;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addEventHandler(FormEventType type, String functionName)
-    {
-        if (_events == null)
-            _events = new HashMap();
-
-        List functionList = (List) _events.get(type);
-
-        // The value can either be a String, or a List of String. Since
-        // it is rare for there to be more than one event handling function,
-        // we start with just a String.
-
-        if (functionList == null)
-        {
-            functionList = new ArrayList();
-
-            _events.put(type, functionList);
-        }
-
-        functionList.add(functionName);
-    }
-
-    /**
-     * Adds hidden fields for parameters provided by the {@link ILink}. These parameters define the
-     * information needed to dispatch the request, plus state information. The names of these
-     * parameters must be reserved so that conflicts don't occur that could disrupt the request
-     * processing. For example, if the id 'page' is not reserved, then a conflict could occur with a
-     * component whose id is 'page'. A certain number of ids are always reserved, and we find any
-     * additional ids beyond that set.
-     */
-
-    private void addHiddenFieldsForLinkParameters(ILink link)
-    {
-        String[] names = link.getParameterNames();
-        int count = Tapestry.size(names);
-
-        StringBuffer extraIds = new StringBuffer();
-        String sep = "";
-        boolean hasExtra = false;
-
-        // All the reserved ids, which are essential for
-        // dispatching the request, are automatically reserved.
-        // Thus, if you have a component with an id of 'service', its element id
-        // will likely be 'service$0'.
-
-        preallocateReservedIds();
-
-        for (int i = 0; i < count; i++)
-        {
-            String name = names[i];
-
-            // Reserve the name.
-
-            if (!_standardReservedIds.contains(name))
-            {
-                _elementIdAllocator.allocateId(name);
-
-                extraIds.append(sep);
-                extraIds.append(name);
-
-                sep = ",";
-                hasExtra = true;
-            }
-
-            addHiddenFieldsForLinkParameter(link, name);
-        }
-
-        if (hasExtra)
-            addHiddenValue(RESERVED_FORM_IDS, extraIds.toString());
-    }
-
-    public void addHiddenValue(String name, String value)
-    {
-        _hiddenValues.add(new HiddenFieldData(name, value));
-    }
-
-    public void addHiddenValue(String name, String id, String value)
-    {
-        _hiddenValues.add(new HiddenFieldData(name, id, value));
-    }
-
-    /**
-     * Converts the allocateIds property into a string, a comma-separated list of ids. This is
-     * included as a hidden field in the form and is used to identify discrepencies when the form is
-     * submitted.
-     */
-
-    private String buildAllocatedIdList()
-    {
-        StringBuffer buffer = new StringBuffer();
-        int count = _allocatedIds.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            if (i > 0)
-                buffer.append(',');
-
-            buffer.append(_allocatedIds.get(i));
-        }
-
-        return buffer.toString();
-    }
-
-    private void emitEventHandlers(String formId)
-    {
-        if (_events == null || _events.isEmpty())
-            return;
-
-        StringBuffer buffer = new StringBuffer();
-
-        Iterator i = _events.entrySet().iterator();
-
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-            FormEventType type = (FormEventType) entry.getKey();
-            Object value = entry.getValue();
-
-            buffer.append("Tapestry.");
-            buffer.append(type.getAddHandlerFunctionName());
-            buffer.append("('");
-            buffer.append(formId);
-            buffer.append("', function (event)\n{");
-
-            List l = (List) value;
-            int count = l.size();
-
-            for (int j = 0; j < count; j++)
-            {
-                String functionName = (String) l.get(j);
-
-                if (j > 0)
-                {
-                    buffer.append(";");
-                }
-
-                buffer.append("\n  ");
-                buffer.append(functionName);
-
-                // It's supposed to be function names, but some of Paul's validation code
-                // adds inline code to be executed instead.
-
-                if (!functionName.endsWith(")"))
-                {
-                    buffer.append("()");
-                }
-            }
-
-            buffer.append(";\n});\n");
-        }
-
-        // TODO: If PRS is null ...
-
-        _pageRenderSupport.addInitializationScript(_form, buffer.toString());
-    }
-
-    /**
-     * Constructs a unique identifier (within the Form). The identifier consists of the component's
-     * id, with an index number added to ensure uniqueness.
-     * <p>
-     * Simply invokes
-     * {@link #getElementId(org.apache.tapestry.form.IFormComponent, java.lang.String)}with the
-     * component's id.
-     */
-
-    public String getElementId(IFormComponent component)
-    {
-        return getElementId(component, component.getSpecifiedId());
-    }
-
-    /**
-     * Constructs a unique identifier (within the Form). The identifier consists of the component's
-     * id, with an index number added to ensure uniqueness.
-     * <p>
-     * Simply invokes
-     * {@link #getElementId(org.apache.tapestry.form.IFormComponent, java.lang.String)}with the
-     * component's id.
-     */
-
-    public String getElementId(IFormComponent component, String baseId)
-    {
-        // $ is not a valid character in an XML/XHTML id, so convert it to an underscore.
-
-        String filteredId = TapestryUtils.convertTapestryIdToNMToken(baseId);
-
-        String result = _elementIdAllocator.allocateId(filteredId);
-
-        if (_rewinding)
-        {
-            if (_allocatedIdIndex >= _allocatedIds.size())
-            {
-                throw new StaleLinkException(FormMessages.formTooManyIds(_form, _allocatedIds.size(),
-                                                                         component), component);
-            }
-
-            String expected = (String) _allocatedIds.get(_allocatedIdIndex);
-
-            if (!result.equals(expected))
-                throw new StaleLinkException(FormMessages.formIdMismatch(
-                  _form,
-                  _allocatedIdIndex,
-                  expected,
-                  result,
-                  component), component);
-        }
-        else
-        {
-            _allocatedIds.add(result);
-        }
-
-        _allocatedIdIndex++;
-
-        component.setName(result);
-        component.setClientId(result);
-
-        return result;
-    }
-
-    public String peekClientId(IFormComponent comp)
-    {
-        String id = comp.getSpecifiedId();
-        if (id == null)
-            return null;
-
-        if (wasPrerendered(comp))
-            return comp.getClientId();
-
-        return _elementIdAllocator.peekNextId(id);
-    }
-
-    public boolean isRewinding()
-    {
-        return _rewinding;
-    }
-
-    private void preallocateReservedIds()
-    {
-        for (int i = 0; i < ServiceConstants.RESERVED_IDS.length; i++)
-            _elementIdAllocator.allocateId(ServiceConstants.RESERVED_IDS[i]);
-    }
-
-    /**
-     * Invoked when rewinding a form to re-initialize the _allocatedIds and _elementIdAllocator.
-     * Converts a string passed as a parameter (and containing a comma separated list of ids) back
-     * into the allocateIds property. In addition, return the state of the ID allocater back to
-     * where it was at the start of the render.
-     *
-     * @see #buildAllocatedIdList()
-     * @since 3.0
-     */
-
-    private void reinitializeIdAllocatorForRewind()
-    {
-        String allocatedFormIds = _cycle.getParameter(FORM_IDS);
-
-        String[] ids = TapestryUtils.split(allocatedFormIds);
-
-        for (int i = 0; i < ids.length; i++)
-            _allocatedIds.add(ids[i]);
-
-        // Now, reconstruct the initial state of the
-        // id allocator.
-
-        preallocateReservedIds();
-
-        String extraReservedIds = _cycle.getParameter(RESERVED_FORM_IDS);
-
-        ids = TapestryUtils.split(extraReservedIds);
-
-        for (int i = 0; i < ids.length; i++)
-            _elementIdAllocator.allocateId(ids[i]);
-    }
-
-    int convertSeedToId(String input)
-    {
-        int index = input.lastIndexOf("_");
-
-        if (index < 0)
-            throw new ApplicationRuntimeException("Unable to convert seedId of " + input + " to integer.");
-
-        return Integer.parseInt(input.substring(index, input.length()));
-    }
-
-    public void render(String method, IRender informalParametersRenderer, ILink link, String scheme, Integer port)
-    {
-        String formId = _form.getName();
-
-        emitEventManagerInitialization(formId);
-
-        // Convert the link's query parameters into a series of
-        // hidden field values (that will be rendered later).
-
-        addHiddenFieldsForLinkParameters(link);
-
-        // Create a hidden field to store the submission mode, in case
-        // client-side JavaScript forces an update.
-
-        addHiddenValue(SUBMIT_MODE, null);
-
-        // And another for the name of the component that
-        // triggered the submit.
-
-        addHiddenValue(FormConstants.SUBMIT_NAME_PARAMETER, null);
-
-        IMarkupWriter nested = _writer.getNestedWriter();
-
-        _form.renderBody(nested, _cycle);
-
-        runDeferredRunnables();
-
-        int portI = (port == null) ? 0 : port.intValue();
-
-        writeTag(_writer, method, link.getURL(scheme, null, portI, null, false));
-
-        // For XHTML compatibility
-
-        _writer.attribute("id", formId);
-
-        if (_encodingType != null)
-            _writer.attribute("enctype", _encodingType);
-
-        // Write out event handlers collected during the rendering.
-
-        emitEventHandlers(formId);
-
-        informalParametersRenderer.render(_writer, _cycle);
-
-        // Finish the <form> tag
-
-        _writer.println();
-
-        writeHiddenFields();
-
-        // Close the nested writer, inserting its contents.
-
-        nested.close();
-
-        // Close the <form> tag.
-
-        _writer.end();
-
-        String fieldId = _delegate.getFocusField();
-
-        if (_pageRenderSupport == null)
-            return;
-
-        // If the form doesn't support focus, or the focus has already been set by a different form,
-        // then do nothing.
-
-        if (!_cycle.isFocusDisabled() && fieldId != null && _form.getFocus()
-            && _cycle.getAttribute(FIELD_FOCUS_ATTRIBUTE) == null)
-        {
-            _pageRenderSupport.addInitializationScript(_form, "dojo.require(\"tapestry.form\");");
-
-            // needs to happen last to avoid dialog issues in ie - TAPESTRY-1705
-            _pageRenderSupport.addScriptAfterInitialization(_form, "tapestry.form.focusField('" + fieldId + "');");
-
-            _cycle.setAttribute(FIELD_FOCUS_ATTRIBUTE, Boolean.TRUE);
-        }
-
-        // register the validation profile with client side form manager
-
-        if (_form.isClientValidationEnabled())
-        {
-            IPage page = _form.getPage();
-
-            // only include dojo widget layer if it's not already been included
-
-            if (!page.hasWidgets())
-            {
-                IAsset clientScript = _form.getAsset("clientValidationScript");
-
-                if (clientScript != null)
-                {
-                    _pageRenderSupport.addExternalScript(_form, clientScript.getResourceLocation());
-                }
-            }
-
-            _pageRenderSupport.addInitializationScript(_form, "dojo.require(\"tapestry.form\");tapestry.form.clearProfiles('"
-                                                              + formId + "'); tapestry.form.registerProfile('" + formId + "',"
-                                                              + _profile.toString() + ");");
-        }
-    }
-
-    /**
-     * Pre-renders the form, setting up some client-side form support. Returns the name of the
-     * client-side form event manager variable.
-     *
-     * @param formId
-     *          The client id of the form.
-     */
-    protected void emitEventManagerInitialization(String formId)
-    {
-        if (_pageRenderSupport == null)
-            return;
-
-        StringBuffer str = new StringBuffer("dojo.require(\"tapestry.form\");");
-        str.append("tapestry.form.registerForm(\"").append(formId).append("\"");
-
-        if (_form.isAsync())
-        {
-            str.append(", true");
-
-            if (_form.isJson())
-            {
-                str.append(", true");
-            }
-        }
-
-        str.append(");");
-
-        _pageRenderSupport.addInitializationScript(_form, str.toString());
-    }
-
-    public String rewind()
-    {
-        _form.getDelegate().clear();
-
-        String mode = _cycle.getParameter(SUBMIT_MODE);
-
-        // On a cancel, don't bother rendering the body or anything else at all.
-
-        if (FormConstants.SUBMIT_CANCEL.equals(mode))
-            return mode;
-
-        reinitializeIdAllocatorForRewind();
-
-        _form.renderBody(_writer, _cycle);
-
-        // New, handles cases where an eventlistener
-        // causes a form submission.
-
-        BrowserEvent event = new BrowserEvent(_cycle);
-
-        _form.getEventInvoker().invokeFormListeners(this, _cycle, event);
-
-        int expected = _allocatedIds.size();
-
-        // The other case, _allocatedIdIndex > expected, is
-        // checked for inside getElementId(). Remember that
-        // _allocatedIdIndex is incremented after allocating.
-
-        if (_allocatedIdIndex < expected)
-        {
-            String nextExpectedId = (String) _allocatedIds.get(_allocatedIdIndex);
-
-            throw new StaleLinkException(FormMessages.formTooFewIds(_form, expected - _allocatedIdIndex, nextExpectedId), _form);
-        }
-
-        runDeferredRunnables();
-
-        if (_submitModes.contains(mode))
-        {
-            // clear errors during refresh
-
-            if (FormConstants.SUBMIT_REFRESH.equals(mode))
-            {
-                _form.getDelegate().clearErrors();
-            }
-
-            return mode;
-        }
-
-        // Either something wacky on the client side, or a client without
-        // javascript enabled.
-
-        return FormConstants.SUBMIT_NORMAL;
-    }
-
-    private void runDeferredRunnables()
-    {
-        Iterator i = _deferredRunnables.iterator();
-        while (i.hasNext())
-        {
-            Runnable r = (Runnable) i.next();
-
-            r.run();
-        }
-    }
-
-    public void setEncodingType(String encodingType)
-    {
-
-        if (_encodingType != null && !_encodingType.equals(encodingType))
-            throw new ApplicationRuntimeException(FormMessages.encodingTypeContention(
-              _form,
-              _encodingType,
-              encodingType), _form, null, null);
-
-        _encodingType = encodingType;
-    }
-
-    /**
-     * Overwridden by {@link org.apache.tapestry.wml.GoFormSupportImpl} (WML).
-     */
-    protected void writeHiddenField(IMarkupWriter writer, String name, String id, String value)
-    {
-        writer.beginEmpty("input");
-        writer.attribute("type", "hidden");
-        writer.attribute("name", name);
-
-        if (HiveMind.isNonBlank(id))
-            writer.attribute("id", id);
-
-        writer.attribute("value", value == null ? "" : value);
-        writer.println();
-    }
-
-    /**
-     * Writes out all hidden values previously added by
-     * {@link #addHiddenValue(String, String, String)}. Writes a &lt;div&gt; tag around
-     * {@link #writeHiddenFieldList(IMarkupWriter)}. Overriden by
-     * {@link org.apache.tapestry.wml.GoFormSupportImpl}.
-     */
-
-    protected void writeHiddenFields()
-    {
-        IMarkupWriter writer = getHiddenFieldWriter();
-
-        writer.begin("div");
-        writer.attribute("style", "display:none;");
-        writer.attribute("id", _form.getName() + "hidden");
-
-        writeHiddenFieldList(writer);
-
-        writer.end();
-    }
-
-    /**
-     * Writes out all hidden values previously added by
-     * {@link #addHiddenValue(String, String, String)}, plus the allocated id list.
-     */
-
-    protected void writeHiddenFieldList(IMarkupWriter writer)
-    {
-        writeHiddenField(writer, FORM_IDS, null, buildAllocatedIdList());
-
-        Iterator i = _hiddenValues.iterator();
-        while (i.hasNext())
-        {
-            HiddenFieldData data = (HiddenFieldData) i.next();
-
-            writeHiddenField(writer, data.getName(), data.getId(), data.getValue());
-        }
-    }
-
-    /**
-     * Determines if a hidden field change has occurred, which would require
-     * that we write hidden form fields using the {@link ResponseBuilder} 
-     * writer.
-     *
-     * @return The default {@link IMarkupWriter} if not doing a managed ajax/json
-     *          response, else whatever is returned from {@link ResponseBuilder}.
-     */
-    protected IMarkupWriter getHiddenFieldWriter()
-    {
-        if (_cycle.getResponseBuilder().contains(_form)
-            || (!_fieldUpdating || !_cycle.getResponseBuilder().isDynamic()) )
-            return _writer;
-
-        return _cycle.getResponseBuilder().getWriter(_form.getName() + "hidden",
-                                                     ResponseBuilder.ELEMENT_TYPE);
-    }
-
-    private void addHiddenFieldsForLinkParameter(ILink link, String parameterName)
-    {
-        String[] values = link.getParameterValues(parameterName);
-
-        // In some cases, there are no values, but a space is "reserved" for the provided name.
-
-        if (values == null)
-            return;
-
-        for (int i = 0; i < values.length; i++)
-            addHiddenValue(parameterName, values[i]);
-    }
-
-    protected void writeTag(IMarkupWriter writer, String method, String url)
-    {
-        writer.begin("form");
-        writer.attribute("method", method);
-        writer.attribute("action", url);
-    }
-
-    public void prerenderField(IMarkupWriter writer, IComponent field, Location location)
-    {
-        Defense.notNull(writer, "writer");
-        Defense.notNull(field, "field");
-
-        String key = field.getExtendedId();
-
-        if (_prerenderMap.containsKey(key))
-            throw new ApplicationRuntimeException(FormMessages.fieldAlreadyPrerendered(field),
-                                                  field, location, null);
-
-        NestedMarkupWriter nested = writer.getNestedWriter();
-
-        TapestryUtils.storePrerender(_cycle, field);
-
-        _cycle.getResponseBuilder().render(nested, field, _cycle);
-
-        TapestryUtils.removePrerender(_cycle);
-
-        _prerenderMap.put(key, nested.getBuffer());
-    }
-
-    public boolean wasPrerendered(IMarkupWriter writer, IComponent field)
-    {
-        String key = field.getExtendedId();
-
-        // During a rewind, if the form is pre-rendered, the buffer will be null,
-        // so do the check based on the key, not a non-null value.
-
-        if (!_prerenderMap.containsKey(key))
-            return false;
-
-        String buffer = (String) _prerenderMap.get(key);
-
-        writer.printRaw(buffer);
-
-        _prerenderMap.remove(key);
-
-        return true;
-    }
-
-    public boolean wasPrerendered(IComponent field)
-    {
-        return _prerenderMap.containsKey(field.getExtendedId());
-    }
-
-    public void addDeferredRunnable(Runnable runnable)
-    {
-        Defense.notNull(runnable, "runnable");
-
-        _deferredRunnables.add(runnable);
-    }
-
-    public void registerForFocus(IFormComponent field, int priority)
-    {
-        _delegate.registerForFocus(field, priority);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public JSONObject getProfile()
-    {
-        return _profile;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isFormFieldUpdating()
-    {
-        return _fieldUpdating;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void setFormFieldUpdating(boolean value)
-    {
-        _fieldUpdating = value;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Hidden.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Hidden.java
deleted file mode 100644
index ce42dbd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Hidden.java
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Implements a hidden field within a {@link Form}. [ <a
- * href="../../../../../ComponentReference/Hidden.html">Component Reference </a>]
- * 
- * @author Howard Lewis Ship
- * @author Paul Ferraro
- */
-public abstract class Hidden extends AbstractFormComponent
-{
-    /**
-     * Returns false.
-     */
-
-    protected boolean getCanTakeFocus()
-    {
-        return false;
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm();
-        String externalValue = null;
-
-        if (getEncode())
-        {
-            Object value = getValue();
-
-            try
-            {
-                externalValue = getDataSqueezer().squeeze(value);
-            }
-            catch (Exception e)
-            {
-                throw new ApplicationRuntimeException(e.getMessage(), this, null, e);
-            }
-        }
-        else
-            externalValue = (String) getBinding("value").getObject(String.class);
-        
-        form.addHiddenValue(getName(), getClientId(), externalValue);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String parameter = cycle.getParameter(getName());
-
-        Object value = parameter;
-
-        if (getEncode())
-        {
-            try
-            {
-                value = getDataSqueezer().unsqueeze(parameter);
-            }
-            catch (Exception ex)
-            {
-                throw new ApplicationRuntimeException(ex.getMessage(), this, null, ex);
-            }
-        }
-
-        // A listener is not always necessary ... it's easy to code
-        // the synchronization as a side-effect of the accessor method.
-
-        setValue(value);
-
-        getListenerInvoker().invokeListener(getListener(), this, cycle);
-    }
-
-    /** @since 2.2 * */
-    public abstract DataSqueezer getDataSqueezer();
-
-    public abstract Object getValue();
-
-    public abstract void setValue(Object value);
-
-    public abstract IActionListener getListener();
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-
-    public abstract ListenerInvoker getListenerInvoker();
-
-    /**
-     * Returns false. Hidden components are never disabled.
-     * 
-     * @since 2.2
-     */
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    /**
-     * Returns true if the compent encodes object values using a
-     * {@link org.apache.tapestry.util.io.DataSqueezerImpl}, false if values are always Strings.
-     * 
-     * @since 2.2
-     */
-    public abstract boolean getEncode();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Hidden.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Hidden.jwc
deleted file mode 100644
index f5bd7dd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Hidden.jwc
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.form.Hidden" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-
-  <description>
-  Stores a value in a hidden field of the form.
-  </description>
-  
-  <parameter name="value" required="yes">
-    <description>
-    Value to save in the form.
-    </description>
-  </parameter>
-  
-  <parameter name="listener">
-    <description>
-    Listener notified after the value is restored.
-    </description>
-  </parameter>
-  
-  <parameter name="id" >
-    <description>
-    ID parameter of HTML hidden object.
-    </description>
-  </parameter>
-
-  <parameter name="encode" default-value="true"/>
-  
-  <inject property="dataSqueezer" object="infrastructure:dataSqueezer"/>
-  <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>
-   
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/HiddenFieldData.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/HiddenFieldData.java
deleted file mode 100644
index 086073d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/HiddenFieldData.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-/**
- * Representation of hidden form field data, which is collected by the Form component as it renders
- * (and renders its body).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class HiddenFieldData
-{
-    private String _name;
-
-    private String _value;
-
-    private String _id;
-
-    public HiddenFieldData(String name, String value)
-    {
-        this(name, null, value);
-    }
-
-    public HiddenFieldData(String name, String id, String value)
-    {
-        _name = name;
-        _id = id;
-        _value = value;
-    }
-
-    public String getId()
-    {
-        return _id;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public String getValue()
-    {
-        return _value;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IFormComponent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IFormComponent.java
deleted file mode 100644
index a740ba1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IFormComponent.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-
-/**
- * A common interface implemented by all form components (components that create interactive
- * elements in the rendered page).
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IFormComponent extends IComponent
-{
-    /**
-     * Returns the {@link org.apache.tapestry.IForm} which contains the component, or null if the
-     * component is not contained by a form, or if the containing Form is not currently rendering.
-     */
-
-    IForm getForm();
-
-    /**
-     * Returns the name of the component, which is automatically generated during renderring.
-     * <p>
-     * This value is set inside the component's render method and is <em>not</em> cleared. If the
-     * component is inside a {@link org.apache.tapestry.components.ForBean}, the value returned is
-     * the most recent name generated for the component.
-     * <p>
-     * This property is made available to facilitate writing JavaScript that allows components (in
-     * the client web browser) to interact.
-     * <p>
-     * In practice, a {@link org.apache.tapestry.html.Script} component works with the
-     * {@link org.apache.tapestry.html.Body} component to get the JavaScript code inserted and
-     * referenced.
-     */
-
-    String getName();
-
-    /**
-     * Invoked by {@link IForm#getElementId(IFormComponent)} when a name is created for a form
-     * component.
-     * 
-     * @since 3.0
-     * @see org.apache.tapestry.FormBehavior#getElementId(IFormComponent)
-     */
-
-    void setName(String name);
-
-    /**
-     * May be implemented to return a user-presentable, localized name for the component, which is
-     * used in labels or error messages. Most components simply return null.
-     * 
-     * @since 1.0.9
-     */
-
-    String getDisplayName();
-
-    /**
-     * Returns true if the component is disabled. This is important when the containing form is
-     * submitted, since disabled parameters do not update their bindings.
-     * 
-     * @since 2.2
-     */
-
-    boolean isDisabled();
-
-    /**
-     * Returns the component's client-side element id. Typically, this is specified using an id
-     * parameter on the component and is passed through
-     * {@link org.apache.tapestry.IRequestCycle#getUniqueId(String)} to ensure that it is unique.
-     * The component is expected to write an id attribute (if it has a non null id). As with
-     * {@link #getName()}, if a component renders more than once (such as inside a loop) then on
-     * each render it will have a different clientId.
-     * 
-     * <p>
-     * <b>Note:</b>Though semantically this method should result in the roughly the same results,
-     * the method used to create unique client ID's on form components is <i>not</i> the same as that
-     * defined in {@link IComponent}. 
-     * </p>
-     * 
-     * @return the id, or null if the component doesn't support an id.
-     * @since 4.0
-     */
-
-    String getClientId();
-
-    /**
-     * Returns true if the field is required. This will (typically) involve consulting the
-     * component's validators.
-     * 
-     * @since 4.0
-     */
-
-    boolean isRequired();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IOptionRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IOptionRenderer.java
deleted file mode 100644
index 70596a6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IOptionRenderer.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-
-/**
- * Interface used by {@link PropertySelection} to render each option.
- */
-public interface IOptionRenderer
-{
-
-    /**
-     * Called after the initial <code>&lt;select&gt;</code> tag has been rendered. It is expected that implementations
-     * will then do whatever is necessary to render each option available in the model and defer writing the end 
-     * <code>&lt;/select&gt;</code> to the calling component.
-     * 
-     * @param writer
-     *          The markup writer to use.
-     * @param cycle
-     *          The associated cycle.
-     * @param model
-     *          Model containing values / labels / etc..
-     * @param selected
-     *          The currently selected object value, if any. Will be null if no value is currently selected.
-     */
-    void renderOptions(IMarkupWriter writer, IRequestCycle cycle, IPropertySelectionModel model, Object selected);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IPropertySelectionModel.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IPropertySelectionModel.java
deleted file mode 100644
index 8581f8f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IPropertySelectionModel.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-/**
- * Used by a {@link PropertySelection} to provide labels for options.
- * <p>
- * The component requires three different representations of each option:
- * <ul>
- * <li>The option value, the server-side Java object that will eventually be assigned to a property
- * <li>The label, a string which is incorprated into the HTML to identify the option to the user
- * <li>The value, a client-side string which is used to represent the option as the value of the
- * &lt;option&gt; or &lt;input type=radio&gt; generated by the {@link PropertySelection}.
- * </ul>
- * <p>
- * The option is usually a string, a primitive value, or some kind of business object. The label is
- * often a property of the option object (for example, for a list of customers, it could be the
- * customer name).
- * <p>
- * It should be easy to convert between the value and the option. It may simply be an index into an
- * array. For business objects, it is often the primary key of the object, expressed as a String.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IPropertySelectionModel
-{
-    /**
-     * Returns the number of possible options.
-     */
-
-    int getOptionCount();
-
-    /**
-     * Returns one possible option that will be assigned to the server-side property.
-     */
-
-    Object getOption(int index);
-
-    /**
-     * Returns the label for an option. It is the responsibility of the adaptor to make this value
-     * localized.
-     */
-
-    String getLabel(int index);
-
-    /**
-     * Returns a String used to represent the option in the HTML (as the value of an &lt;option&gt;
-     * or &lt;input type=radio&gt;. This value is not visible to the user, and is often an index
-     * into an array.
-     */
-
-    String getValue(int index);
-
-    /**
-     * Used to help rendering of options that should be marked with the html <code>disabled</code>
-     * attribute.
-     * 
-     * @param index The option to check.
-     * @return True if the option shouldn't be selectable, false otherwise.
-     */
-    boolean isDisabled(int index);
-    
-    /**
-     * Returns the option corresponding to a value. This is used when interpreting submitted form
-     * parameters.
-     */
-
-    Object translateValue(String value);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IPropertySelectionRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IPropertySelectionRenderer.java
deleted file mode 100644
index 4418cbd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/IPropertySelectionRenderer.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Defines an object that works with a {@link PropertySelection} component to
- * render the individual elements obtained from the
- * {@link IPropertySelectionModel model}.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IPropertySelectionRenderer
-{
-
-    /**
-     * Begins the rendering of the {@link PropertySelection}.
-     */
-
-    void beginRender(PropertySelection component, IMarkupWriter writer,
-            IRequestCycle cycle);
-
-    /**
-     * Invoked for each element obtained from the
-     * {@link IPropertySelectionModel model}.
-     */
-
-    void renderOption(PropertySelection component, IMarkupWriter writer,
-            IRequestCycle cycle, IPropertySelectionModel model, Object option,
-            int index, boolean selected);
-
-    /**
-     * Ends the rendering of the {@link PropertySelection}.
-     */
-
-    void endRender(PropertySelection component, IMarkupWriter writer,
-            IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ImageSubmit.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ImageSubmit.java
deleted file mode 100644
index 97be9a2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ImageSubmit.java
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.awt.Point;
-
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- * Used to create an image button inside a {@link Form}. Although it is occasionally useful to know
- * the {@link Point}on the image that was clicked (i.e., use the image as a kind of image map,
- * which was the original intent of the HTML element), it is more commonly used to provide a graphic
- * image for the user to click, rather than the rather plain &lt;input type=submit&gt;. [ <a
- * href="../../../../../ComponentReference/ImageSubmit.html">Component Reference </a>]
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class ImageSubmit extends Submit
-{
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#setName(org.apache.tapestry.IForm)
-     */
-    protected void setName(IForm form)
-    {
-        String nameOverride = getNameOverride();
-
-        setName((nameOverride == null) ? form.getElementId(this) : form.getElementId(this, nameOverride));
-    }
-
-    protected boolean isClicked(IRequestCycle cycle, String name)
-    {
-        String parameterName = name + ".x";
-        
-        // the name.x parameter is not set for asynchronous submits
-        String value = cycle.getParameter(FormConstants.SUBMIT_NAME_PARAMETER);
-
-        return (cycle.getParameter(parameterName) != null) || name.equals(value);
-    }
-    
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean disabled = isDisabled();
-        IAsset disabledImage = getDisabledImage();
-
-        IAsset finalImage = (disabled && disabledImage != null) ? disabledImage : getImage();
-
-        String imageURL = finalImage.buildURL();
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "image");
-        writer.attribute("name", getName());
-        
-        if (disabled)
-            writer.attribute("disabled", "disabled");        
-        
-        writer.attribute("src", imageURL);
-
-        renderIdAttribute(writer, cycle);
-
-        renderInformalParameters(writer, cycle);
-        
-        renderSubmitBindings(writer, cycle);
-        
-        writer.closeTag();
-    }
-
-    void handleClick(IRequestCycle cycle, IForm form)
-    {
-        // The point parameter is not really used, unless the
-        // ImageButton is used for its original purpose (as a kind
-        // of image map). In modern usage, we only care about
-        // whether the user clicked on the image (and thus submitted
-        // the form), not where in the image the user actually clicked.
-
-        if (isParameterBound("point"))
-        {
-            int x = Integer.parseInt(cycle.getParameter(getName() + ".x"));
-            int y = Integer.parseInt(cycle.getParameter(getName() + ".y"));
-
-            setPoint(new Point(x, y));
-        }
-
-        super.handleClick(cycle, form);
-    }
-
-    /** parameter. */
-    public abstract IAsset getDisabledImage();
-
-    /** parameter. */
-    public abstract IAsset getImage();
-
-    /** parameter. */
-    public abstract String getNameOverride();
-
-    /** parameter. */
-    public abstract void setPoint(Point point);
-
-    protected void prepareForRender(IRequestCycle cycle)
-    {
-        super.prepareForRender(cycle);
-
-        if (getImage() == null)
-            throw Tapestry.createRequiredParameterException(this, "image");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ImageSubmit.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ImageSubmit.jwc
deleted file mode 100644
index d490476..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ImageSubmit.jwc
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.ImageSubmit" allow-body="no">
-
-  <description>
-  Creates a clickable image within a form.
-  </description>
-
-  <parameter name="image" required="yes">
-  	<description>
-  	Image used for the button.
-  	</description>
-  </parameter>
-  	
-  <parameter name="name" property="nameOverride"/>
-  	
-  <parameter name="disabledImage">
-  	<description>
-  	Image used for the button, if disabled.
-  	</description>
-  </parameter>
-  	
-  <parameter name="disabled"/>
-  	
-  <parameter name="point"/>
-  
-  <parameter name="selected">
-  	<description>
-  	Property updated when the button is clicked.
-  	</description>
-  </parameter>
-  
-  <parameter name="tag">
-  	<description>
-  	Value used when updating the selected parameter.
-  	</description>
-  </parameter>
-  
-  <parameter name="listener">
-  	<description>
-  	Notified when the button is clicked.
-  	</description>
-  </parameter>
-  
-  <parameter name="action" >
-      <description>
-          A listener that is notified if this component is triggered
-          just before the form's listener, after all components 
-          enclosed by the Form have had a chance to update their properties.
-      </description>
-  </parameter>
-
-  <parameter name="parameters">
-    <description>
-      An object, or list of objects, gathered when the button is triggered and 
-      made available as listener parameters in the request cycle, making
-      the parameters available to a deferred listener.
-    </description>
-  </parameter>
-  
-  <parameter name="submitType" default-value="literal:submit" >
-    <description>
-        The type of submission this component should cause. Valid values are 
-        submit, cancel, and refresh. 
-    </description>
-  </parameter>
-  
-  <parameter name="updateComponents" />
-  
-  <parameter name="json" default-value="false" />
-  
-  <parameter name="async" default-value="false" />
-  
-  <parameter name="id" property="idParameter" default-value="id"/>
-  
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="src"/>
-  <reserved-parameter name="border"/>
-
-  <inject property="directService" object="engine-service:direct" />
-  <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>
-  <inject property="submitScript" type="script" object="SubmitBindings.script"/>
-  
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/LabeledPropertySelectionModel.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/LabeledPropertySelectionModel.java
deleted file mode 100644
index c9638e4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/LabeledPropertySelectionModel.java
+++ /dev/null
@@ -1,293 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-/**
- * Decorates an underlying {@link IPropertySelectionModel}adding an initial property. The label,
- * option, and value of the initial property are configurable.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public class LabeledPropertySelectionModel implements IPropertySelectionModel
-{
-    /**
-     * Empty model implementation. Avoids NullPointerExceptions when default constructor is used.
-     */
-    private static final IPropertySelectionModel EMPTY_MODEL = new IPropertySelectionModel()
-    {
-        /**
-         * @see org.apache.tapestry.form.IPropertySelectionModel#getOptionCount()
-         */
-        public int getOptionCount()
-        {
-            return 0;
-        }
-
-        /**
-         * @see org.apache.tapestry.form.IPropertySelectionModel#getOption(int)
-         */
-        public Object getOption(int index)
-        {
-            return null;
-        }
-
-        /**
-         * @see org.apache.tapestry.form.IPropertySelectionModel#getLabel(int)
-         */
-        public String getLabel(int index)
-        {
-            return null;
-        }
-
-        /**
-         * @see org.apache.tapestry.form.IPropertySelectionModel#getValue(int)
-         */
-        public String getValue(int index)
-        {
-            return null;
-        }
-
-        public boolean isDisabled(int index)
-        {
-            return false;
-        }
-        
-        /**
-         * @see org.apache.tapestry.form.IPropertySelectionModel#translateValue(java.lang.String)
-         */
-        public Object translateValue(String value)
-        {
-            return null;
-        }
-    };
-    
-    private IPropertySelectionModel _model;
-
-    private String _label = "";
-
-    private Object _option = null;
-
-    private String _value = "";
-    
-    /**
-     * Constructs a new LabeledPropertySelectionModel using an empty model and default label,
-     * option, and value. Default constructor is made available so that this model may be specified
-     * as a component helper bean.
-     */
-    public LabeledPropertySelectionModel()
-    {
-        this(EMPTY_MODEL);
-    }
-
-    /**
-     * Constructs a new LabeledPropertySelectionModel using the specified model and default label,
-     * option, and value.
-     * 
-     * @param model
-     *            the underlying model to decorate
-     */
-    public LabeledPropertySelectionModel(IPropertySelectionModel model)
-    {
-        _model = model;
-    }
-
-    /**
-     * Constructs a new LabeledPropertySelectionModel using the specified model and label, and
-     * default option and value.
-     * 
-     * @param model
-     *            the underlying model to decorate
-     * @param label
-     *            the label of the initial property
-     */
-    public LabeledPropertySelectionModel(IPropertySelectionModel model, String label)
-    {
-        this(model);
-
-        _label = label;
-    }
-
-    /**
-     * Constructs a new LabeledPropertySelectionModel using the specified model, label, and option;
-     * and default value.
-     * 
-     * @param model
-     *            the underlying model to decorate
-     * @param label
-     *            the label of the initial property
-     * @param option
-     *            the option value of the initial property
-     */
-    public LabeledPropertySelectionModel(IPropertySelectionModel model, String label, Object option)
-    {
-        this(model, label);
-
-        _option = option;
-    }
-
-    /**
-     * Constructs a new LabeledPropertySelectionModel using the specified model, label, option, and
-     * value.
-     * 
-     * @param model
-     *            the underlying model to decorate
-     * @param label
-     *            the label of the initial property
-     * @param option
-     *            the option value of the initial property
-     * @param value
-     *            the value of the initial property
-     */
-    public LabeledPropertySelectionModel(IPropertySelectionModel model, String label,
-            Object option, String value)
-    {
-        this(model, label, option);
-
-        _value = value;
-    }
-
-    /**
-     * Returns the underlying IPropertySelectionModel.
-     * 
-     * @return the underlying IPropertySelectionModel
-     */
-    public IPropertySelectionModel getModel()
-    {
-        return _model;
-    }
-
-    /**
-     * Sets the underlying IPropertySelectionModel.
-     * 
-     * @param model
-     *            the IPropertySelectionModel to set
-     */
-    public void setModel(IPropertySelectionModel model)
-    {
-        _model = model;
-    }
-
-    /**
-     * @see org.apache.tapestry.form.IPropertySelectionModel#getOptionCount()
-     */
-    public int getOptionCount()
-    {
-        return _model.getOptionCount() + 1;
-    }
-
-    /**
-     * @see org.apache.tapestry.form.IPropertySelectionModel#getOption(int)
-     */
-    public Object getOption(int index)
-    {
-        return (index == 0) ? _option : _model.getOption(index - 1);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.IPropertySelectionModel#getLabel(int)
-     */
-    public String getLabel(int index)
-    {
-        return (index == 0) ? _label : _model.getLabel(index - 1);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.IPropertySelectionModel#getValue(int)
-     */
-    public String getValue(int index)
-    {
-        return (index == 0) ? _value : _model.getValue(index - 1);
-    }
-
-    public boolean isDisabled(int index)
-    {
-        return false;
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.IPropertySelectionModel#translateValue(java.lang.String)
-     */
-    public Object translateValue(String value)
-    {
-        if (value == null)
-            return null;
-        
-        return value.equals(_value) ? _option : _model.translateValue(value);
-    }
-
-    /**
-     * Returns the label of the initial IPropertySelectionModel option.
-     * 
-     * @return a IPropertySelectionModel option label
-     */
-    public String getLabel()
-    {
-        return _label;
-    }
-
-    /**
-     * Sets the label of the initial IPropertySelectionModel option.
-     * 
-     * @param label
-     *            a IPropertySelectionModel option label
-     */
-    public void setLabel(String label)
-    {
-        _label = label;
-    }
-
-    /**
-     * Returns the value of the initial IPropertySelectionModel option.
-     * 
-     * @return a IPropertySelectionModel option value
-     */
-    public String getValue()
-    {
-        return _value;
-    }
-
-    /**
-     * Sets the value of the initial IPropertySelectionModel option.
-     * 
-     * @param value
-     *            a IPropertySelectionModel option value
-     */
-    public void setValue(String value)
-    {
-        _value = value;
-    }
-
-    /**
-     * Returns the initial option.
-     * 
-     * @return a PropertySelectionModel option
-     */
-    public Object getOption()
-    {
-        return _option;
-    }
-
-    /**
-     * Sets the initial IPropertySelectionModel option.
-     * 
-     * @param option
-     *            a IPropertySelectionModel option
-     */
-    public void setOption(Object option)
-    {
-        _option = option;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.java
deleted file mode 100644
index 08e17c4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.java
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.DirectServiceParameter;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-
-import java.util.List;
-
-/**
- * Implements a component that submits its enclosing form via a JavaScript link. [ <a
- * href="../../../../../ComponentReference/LinkSubmit.html">Component Reference </a>]
- *
- * @author Richard Lewis-Shell
- */
-
-public abstract class LinkSubmit extends AbstractSubmit
-{
-
-    /**
-     * The name of an {@link org.apache.tapestry.IRequestCycle} attribute in which the current
-     * submit link is stored. LinkSubmits do not nest.
-     */
-
-    public static final String ATTRIBUTE_NAME = "org.apache.tapestry.form.LinkSubmit";
-    
-    /**
-     * Checks the submit name ({@link FormConstants#SUBMIT_NAME_PARAMETER}) to see if it matches
-     * this LinkSubmit's assigned element name.
-     */
-    protected boolean isClicked(IRequestCycle cycle, String name)
-    {
-        String value = cycle.getParameter(FormConstants.SUBMIT_NAME_PARAMETER);
-
-        return name.equals(value);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean disabled = isDisabled();
-
-        IForm form = getForm();
-        String type = getSubmitType();
-
-        Defense.notNull(type, "submitType");
-
-        List update = getUpdateComponents();
-        boolean isAsync = isAsync() || update != null && update.size() > 0;
-
-        if (!disabled)
-        {
-            writer.begin("a");
-
-            String js = "tapestry.form." + type + "('" + form.getClientId() + "', '" + getName() + "'";
-            
-            if (isAsync)
-            {
-                JSONObject json = new JSONObject();
-                json.put(new JSONLiteral("async"), Boolean.TRUE);
-                json.put(new JSONLiteral("json"), isJson());
-
-                DirectServiceParameter dsp = new DirectServiceParameter(form, null, this);
-                json.put(new JSONLiteral("url"), new JSONLiteral("this.href"));
-
-                writer.attribute("href", getDirectService().getLink(true, dsp).getURL());
-                writer.attribute("onClick", js + "," + json.toString() + "); return false;");                        
-            }
-            else
-            {
-                writer.attribute("href", "javascript:" + js + ");");
-            }
-
-            renderIdAttribute(writer, cycle);
-            renderInformalParameters(writer, cycle);
-        }
-
-        renderBody(writer, cycle);
-
-        if (!disabled)
-            writer.end();
-    }
-
-    
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#prepareForRender(org.apache.tapestry.IRequestCycle)
-     */
-    protected void prepareForRender(IRequestCycle cycle)
-    {
-        IComponent outer = (IComponent) cycle.getAttribute(ATTRIBUTE_NAME);
-
-        if (outer != null)
-            throw new ApplicationRuntimeException(FormMessages.linkSubmitMayNotNest(this, outer),
-                                                  this, getLocation(), null);
-
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-    }
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#cleanupAfterRender(org.apache.tapestry.IRequestCycle)
-     */
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        cycle.removeAttribute(ATTRIBUTE_NAME);
-    }
-
-    /**
-     * Links can not take focus, ever.
-     */
-    protected boolean getCanTakeFocus()
-    {
-        return false;
-    }
-
-    /**
-     * Returns true; the LinkSubmit's body should render during a rewind, even if the component is
-     * itself disabled.
-     */
-    protected boolean getRenderBodyOnRewind()
-    {
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.jwc
deleted file mode 100644
index caf7a5d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.jwc
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.form.LinkSubmit" allow-body="yes">
-
-  <description>
-  Creates a hyperlink that submits its enclosing form using JavaScript.
-  </description>
-
-  <parameter name="disabled"/>
-  <parameter name="selected"/>
-  <parameter name="tag"/>
-      
-  <parameter name="listener">
-      <description>
-          A listener that is notified if this component is triggered.
-      </description>
-  </parameter>
-  
-  <parameter name="action" >
-      <description>
-          A listener that is notified if this component is triggered
-          just before the form's listener, after all components 
-          enclosed by the Form have had a chance to update their properties.
-      </description>
-  </parameter>
-  
-  <parameter name="parameters">
-    <description>
-    An object, or list of objects, gathered when the link is triggered and 
-    made available as listener parameters in the request cycle, making
-    the parameters available to a deferred listener.
-    </description>
-  </parameter>
-
-  <parameter name="submitType" default-value="literal:submit" >
-    <description>
-        The type of submission this component should cause. Valid values are 
-        submit, cancel, and refresh. 
-    </description>
-  </parameter>
-  
-  <parameter name="updateComponents" />
-  <parameter name="json" default-value="false" />
-  <parameter name="async" default-value="false" />
-  
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="href"/>
-
-  <inject property="directService" object="engine-service:direct" />
-  <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>
-  
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ListEdit.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ListEdit.java
deleted file mode 100644
index 734bee6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ListEdit.java
+++ /dev/null
@@ -1,199 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.util.Iterator;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * A specialized component used to edit a list of items within a form; it is similar to a
- * {@link org.apache.tapestry.components.ForBean} but leverages hidden inputs within the
- * &lt;form&gt; to store the items in the list. [ <a
- * href="../../../../../ComponentReference/ListEdit.html">Component Reference </a>]
- * 
- * @author Howard Lewis Ship
- * @since 1.0.2
- */
-
-public abstract class ListEdit extends AbstractFormComponent
-{
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        this.render(writer, cycle, getSource());
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String[] values = cycle.getParameters(getName());
-
-        this.render(writer, cycle, (Iterator) getValueConverter().coerceValue(
-                values,
-                Iterator.class));
-    }
-
-    protected void render(IMarkupWriter writer, IRequestCycle cycle, Iterator i)
-    {
-        // If the source (when rendering), or the submitted values (on submit)
-        // are null, then skip the remainder (nothing to update, nothing to
-        // render).
-
-        if (i == null)
-            return;
-
-        int index = 0;
-
-        String element = getElement();
-
-        boolean indexBound = isParameterBound("index");
-
-        while (i.hasNext())
-        {
-            Object value = null;
-
-            if (indexBound)
-                setIndex(index++);
-
-            if (cycle.isRewinding())
-                value = convertValue((String) i.next());
-            else
-            {
-                value = i.next();
-                writeValue(getForm(), getName(), value);
-            }
-
-            setValue(value);
-
-            getListenerInvoker().invokeListener(getListener(), this, cycle);
-
-            if (element != null)
-            {
-                writer.begin(element);
-                renderInformalParameters(writer, cycle);
-            }
-
-            renderBody(writer, cycle);
-
-            if (element != null)
-                writer.end();
-        }
-    }
-
-    private void writeValue(IForm form, String name, Object value)
-    {
-        String externalValue;
-
-        try
-        {
-            externalValue = getDataSqueezer().squeeze(value);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(Tapestry.format(
-                    "ListEdit.unable-to-convert-value",
-                    value), this, null, ex);
-        }
-
-        form.addHiddenValue(name, externalValue);
-    }
-
-    private Object convertValue(String value)
-    {
-        try
-        {
-            return getDataSqueezer().unsqueeze(value);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(Tapestry.format(
-                    "ListEdit.unable-to-convert-string",
-                    value), this, null, ex);
-        }
-    }
-
-    public abstract String getElement();
-
-    /** @since 2.2 * */
-
-    public abstract IActionListener getListener();
-
-    /** @since 3.0 * */
-
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    /** @since 4.0 */
-
-    public abstract Iterator getSource();
-
-    /** @since 4.0 */
-
-    public abstract void setValue(Object value);
-
-    /** @since 4.0 */
-
-    public abstract void setIndex(int index);
-
-    /** @since 4.0 */
-
-    public abstract DataSqueezer getDataSqueezer();
-
-    /** @since 4.0 */
-
-    public abstract ValueConverter getValueConverter();
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-
-    public abstract ListenerInvoker getListenerInvoker();
-
-    /**
-     * Returns false; ListEdit components can't take focus.
-     * 
-     * @since 4.0
-     */
-    protected boolean getCanTakeFocus()
-    {
-        return false;
-    }
-    
-    public String getDisplayName()
-    {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ListEdit.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ListEdit.jwc
deleted file mode 100644
index 623b3c0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ListEdit.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification allow-body="yes" allow-informal-parameters="yes"
-	class="org.apache.tapestry.form.ListEdit">
-	
-  <description>
-  A looping component, like Foreach, which works well in a form
-  because it stores each element as a hidden field.
-  </description>
-	
-  <parameter name="source" required="yes"/>
-  
-  <parameter name="listener"/>
-  
-  <parameter name="value" required="yes"/>
-  
-  <parameter name="index"/>
-  
-  <parameter name="element"/>
-  
-  <inject property="dataSqueezer" object="infrastructure:dataSqueezer"/>
-  <inject property="valueConverter" object="service:tapestry.coerce.ValueConverter"/>
-  <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>
-  
-</component-specification>
-
-
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ListEditMap.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ListEditMap.java
deleted file mode 100644
index 5ab4b43..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ListEditMap.java
+++ /dev/null
@@ -1,292 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- * A utility class often used with the {@link org.apache.tapestry.form.ListEdit} component. A
- * ListEditMap is loaded with data objects before the ListEdit renders, and again before the
- * ListEdit rewinds. This streamlines the synchronization of the form against data on the server. It
- * is most useful when the set of objects is of a manageable size (say, no more than a few hundred
- * objects).
- * <p>
- * The map stores a list of keys, and relates each key to a value. It also tracks a deleted flag for
- * each key.
- * <p>
- * Usage: <br>
- * The page or component should implement {@link org.apache.tapestry.event.PageBeginRenderListener}
- * and implement
- * {@link org.apache.tapestry.event.PageBeginRenderListener#pageBeginRender(org.apache.tapestry.event.PageEvent)}
- * to initialize the map.
- * <p>
- * The external data (from which keys and values are obtained) is queried, and each key/value pair
- * is {@link #add(Object, Object) added} to the map, in the order that items should be presented.
- * <p>
- * The {@link org.apache.tapestry.form.ListEdit}'s source parameter should be bound to the map's
- * {@link #getKeys() keys} property. The value parameter should be bound to the map's
- * {@link #setKey(Object) key} property.
- * <p>
- * The {@link org.apache.tapestry.form.ListEdit}'s listener parameter should be bound to a listener
- * method to synchronize a property of the component from the map. <code>
- *  public void synchronize()
- *  {
- *     ListEditMap map = ...;
- *     <i>Type</i> object = (<i>Type</i>)map.getValue();
- * 
- *     if (object == null)
- *       ...
- * 
- *     set<i>Property</i>(object);
- *  }
- *  </code>
- * <p>
- * You may also connect a {@link org.apache.tapestry.form.Checkbox}'s selected parameter to the
- * map's {@link #isDeleted() deleted} property.
- * <p>
- * You may track inclusion in other sets by subclassing ListEditMap and implementing new boolean
- * properties. The accessor method should be a call to {@link #checkSet(Set)} and the mutator method
- * should be a call to {@link #updateSet(Set, boolean)}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class ListEditMap
-{
-    private Map _map = new HashMap();
-
-    private List _keys = new ArrayList();
-
-    private Set _deletedKeys;
-
-    private Object _currentKey;
-
-    /**
-     * Records the key and value into this map. The keys may be obtained, in the order in which they
-     * are added, using {@link #getKeys()}. This also sets the current key (so that you may invoke
-     * {@link #setDeleted(boolean)}, for example).
-     */
-
-    public void add(Object key, Object value)
-    {
-        _currentKey = key;
-
-        _keys.add(_currentKey);
-        _map.put(_currentKey, value);
-    }
-
-    /**
-     * Returns a List of keys, in the order that keys were added to the map (using
-     * {@link #add(Object, Object)}. The caller must not modify the List.
-     */
-
-    public List getKeys()
-    {
-        return _keys;
-    }
-
-    /**
-     * Sets the key for the map. This defines the key used with the other methods:
-     * {@link #getValue()}, {@link #isDeleted()}, {@link #setDeleted(boolean)}.
-     */
-
-    public void setKey(Object key)
-    {
-        _currentKey = key;
-    }
-
-    /**
-     * Returns the current key within the map.
-     */
-
-    public Object getKey()
-    {
-        return _currentKey;
-    }
-
-    /**
-     * Returns the value for the key (set using {@link #setKey(Object)}). May return null if no
-     * such key has been added (this can occur if a data object is deleted between the time a form
-     * is rendered and the time a form is submitted).
-     */
-
-    public Object getValue()
-    {
-        return _map.get(_currentKey);
-    }
-
-    /**
-     * Returns true if the {@link #setKey(Object) current key} is in the set of deleted keys.
-     */
-
-    public boolean isDeleted()
-    {
-        return checkSet(_deletedKeys);
-    }
-
-    /**
-     * Returns true if the set contains the {@link #getKey() current key}. Returns false is the set
-     * is null, or doesn't contain the current key.
-     */
-
-    protected boolean checkSet(Set set)
-    {
-        if (set == null)
-            return false;
-
-        return set.contains(_currentKey);
-    }
-
-    /**
-     * Adds or removes the {@link #setKey(Object) current key} from the set of deleted keys.
-     */
-
-    public void setDeleted(boolean value)
-    {
-        _deletedKeys = updateSet(_deletedKeys, value);
-    }
-
-    /**
-     * Updates the set, adding or removing the {@link #getKey() current key} from it. Returns the
-     * set passed in. If the value is true and the set is null, an new instance of {@link HashSet}
-     * is created and returned.
-     */
-
-    protected Set updateSet(Set set, boolean value)
-    {
-        Set updatedSet = set;
-        if (value)
-        {
-            if (updatedSet == null)
-                updatedSet = new HashSet();
-
-            updatedSet.add(_currentKey);
-        }
-        else
-        {
-            if (updatedSet != null)
-                updatedSet.remove(_currentKey);
-        }
-
-        return updatedSet;
-    }
-
-    /**
-     * Returns the deleted keys in an unspecified order. Returns a List, which may be empty if no
-     * keys have been deleted.
-     */
-
-    public List getDeletedKeys()
-    {
-        return convertSetToList(_deletedKeys);
-    }
-
-    /**
-     * Removes keys and values that are in the set of deleted keys, then clears the set of deleted
-     * keys. After invoking this method, {@link #getValues()} and {@link #getAllValues()} will
-     * return equivalent lists and {@link #getKeys()} will no longer show any of the deleted keys.
-     * Note that this method <em>does not</em> change the current key. Subclasses that track
-     * additional key sets may want to override this method to remove deleted keys from those key
-     * sets.
-     */
-
-    public void purgeDeletedKeys()
-    {
-        if (_deletedKeys == null)
-            return;
-
-        _map.keySet().removeAll(_deletedKeys);
-        _keys.removeAll(_deletedKeys);
-
-        _deletedKeys = null;
-    }
-
-    /**
-     * Invoked to convert a set into a List.
-     * 
-     * @param set
-     *            a set (which may be empty or null)
-     * @return a list (possibly empty) of the items in the set
-     */
-
-    protected List convertSetToList(Set set)
-    {
-        if (Tapestry.isEmpty(set))
-            return Collections.EMPTY_LIST;
-
-        return new ArrayList(set);
-    }
-
-    /**
-     * Returns all the values stored in the map, in the order in which values were added to the map
-     * using {@link #add(Object, Object)}.
-     */
-
-    public List getAllValues()
-    {
-        int count = _keys.size();
-        List result = new ArrayList(count);
-
-        for (int i = 0; i < count; i++)
-        {
-            Object key = _keys.get(i);
-            Object value = _map.get(key);
-
-            result.add(value);
-        }
-
-        return result;
-    }
-
-    /**
-     * Returns all the values stored in the map, excluding those whose id has been marked deleted,
-     * in the order in which values were added to the map using {@link #add(Object, Object)}.
-     */
-
-    public List getValues()
-    {
-        int deletedCount = Tapestry.size(_deletedKeys);
-
-        if (deletedCount == 0)
-            return getAllValues();
-
-        int count = _keys.size();
-
-        List result = new ArrayList(count - deletedCount);
-
-        for (int i = 0; i < count; i++)
-        {
-            Object key = _keys.get(i);
-
-            if (_deletedKeys.contains(key))
-                continue;
-
-            Object value = _map.get(key);
-            result.add(value);
-        }
-
-        return result;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MaskEdit.js b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MaskEdit.js
deleted file mode 100644
index bb9c190..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MaskEdit.js
+++ /dev/null
@@ -1,418 +0,0 @@
-/**

- *  JavaScript Mask Edit control

- *  Paul Geerts

- *  Oct 2002

- * 

- *  Note:  This probably only works for English

- *  Other languages have been deprecated and will be removed in the 

- *  next version of Speech (TM)

- **/

-

-var dontDoIt;  // hack for Moz because it won't cancel events properly

-var isTab;     // another Moz hack

-

-

-// Init the mask edit field by creating a lookalike DIV

-// and hiding the real one

-function initMask(field, mask) {

-

-	if (field.disabled) {

-	   return;

-	}

-	

-    var val = field.value;

-    

-    if (!val) {  // if there's no val, init it with empty mask

-        val = displayMask(mask);

-        field.value = displayMask(mask);

-    }

-    // create a div and add a bunch of spans

-    // and edits to it.

-    var div = document.createElement("div");

-   	div.style.backgroundColor = "white";

-    for (var i = 0 ; i < mask.length ; i++) {

-        var ds = document.createElement("SPAN");

-        var v = val.substr(i,1);

-        var m = mask.substr(i,1);

-        if (v==" ") {

-            v="&nbsp;";

-        }

-        ds.innerHTML = v;

-        ds.index = i;

-        ds.mask = m;

-        ds.div = div;

-        // if we can edit this char

-        // make a little tiny edit field

-        if (isEditChar(m)) {

-            var es = document.createElement("INPUT");

-            es.style.width = "1px";

-            es.style.border="0px";

-            es.index = i;

-            es.field = field;

-            es.mask = m;

-            es.display = ds;

-            ds.editField = es;

-            es.div = div;

-            div.appendChild(es);  // set up some events

-            if (navigator.appName == "Microsoft Internet Explorer") {

-                addEvent("keypress", es, changeBitIE);

-            } else {

-                addEvent("keypress", es, changeBitNS);

-            }

-            addEvent("keydown", es, specialKey); // keydown handles stuff like home, end etc

-            addEvent("click", ds, click);

-        } 

-

-        div.appendChild(ds);

-

-    }

-    

-    // the final edit field on the end

-    var es =document.createElement("INPUT");

-    es.style.width = "1px";

-    es.style.border="0px";

-    es.div = div;

-    div.appendChild(es);

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        addEvent("keypress", es, changeBitIE);

-    } else {

-        addEvent("keypress", es, changeBitNS);

-    }

-    addEvent("keydown", es, specialKey);

-

-    div.noWrap = true; // force single line display

-

-    formatDiv(div, field); // format the DIV to look like an edit box

-    field.style.display = 'none'; 

-    field.parentNode.insertBefore(div, field);

-    addEvent("click", div, divClick);

-}

-

-function formatDiv(div, field) {

-    // make it look like an IE edit

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        div.style.fontFamily="courier"; 

-        div.style.fontSize="10pt";      

-        div.style.width = field.offsetWidth;

-        div.style.height = field.offsetHeight;

-        if (navigator.appVersion.match(/6.0/)) { // IE 6 is different

-            div.style.border = "1px solid #7F9DB9";

-        } else {

-            div.style.borderLeft = "2px solid #606060";

-            div.style.borderTop = "2px solid #606060";

-            div.style.borderRight = "1px solid #aaaaaa";

-            div.style.borderBottom = "1px solid #aaaaaa";

-        }

-

-    } else {

-        // Mozilla edit look-a-like

-        div.style.fontFamily="courier";

-        div.style.fontSize="10pt";

-        div.style.border="2px inset #cccccc";

-        if (field.size) {

-            div.style.widh = 13 * field.size;

-        } else {

-            div.style.width = "130px";

-        }

-    }

-}

-

-

-function isEditChar(c) {  // is this char a meaningful mask char

-    switch (c) {

-        case "_":

-        case "#":

-        case "a":

-        case "A":

-        case "l":

-        case "L":

-            return true;

-        default:

-            return false;

-    }

-}

-

-function displayMaskChar(c) {  // display mask chars as _ 

-    if (isEditChar(c)) {       // otherwise just show normal char

-        return "_";

-    } else {

-        return c;

-    }

-}

-

-function displayMask(mask) {  // display entire mask using about subroutine

-    var d = "";

-    for (var i = 0 ; i < mask.length ; i++) {

-        d+=displayMaskChar(mask.substr(i,1));

-    }

-    return d;

-}

-

-function divClick(e) {     // when the main DIV is clicked, focus the end of the edit

-    var d = getEventObject(e);

-    if (d && d.lastChild) {

-        try {

-           d.lastChild.focus();

-        } catch (e) {

-           // nuffin

-        }

-    }

-}

-

-function specialKey(e) { // deal with special keys like backspace, delete etc

-    var s = getEventObject(e);

-    var code = e.keyCode;

-    dontDoIt = true;  // Moz needs these, as I can't seem to cancel events properly

-    isTab = false;    // Moz can't handle tabs well either

-    switch (code) {

-    case 8:   // backspace

-        var b = getPrevEdit(s);

-        if (b) {

-            b.display.innerHTML = displayMaskChar(b.mask);

-            var i = b.index;

-            b.field.value = b.field.value.substr(0, i) + 

-                displayMaskChar(b.mask) + b.field.value.substr(i+1, b.field.value.length - i);

-            b.focus();

-        }

-        cancelEvent(e);

-        return false;

-    case 46:  // delete

-        if (s.display) {

-            s.display.innerHTML = displayMaskChar(s.mask);

-            var i = s.index;

-            s.field.value = s.field.value.substr(0, i) + displayMaskChar(s.mask) + 

-                s.field.value.substr(i+1, s.field.value.length - i);

-        }

-        cancelEvent(e);

-        return false;

-        break;

-    case 37: // left

-        var p = getPrevEdit(s);

-        if (p) {

-            p.focus();

-        }

-        cancelEvent(e);

-        return false;

-    case 39: // right

-        var n = getNextEdit(s);

-        if (n) {

-            n.focus();

-        }

-        cancelEvent(e);

-        return false;

-    case 36: // home

-        s.div.firstChild.focus();

-        cancelEvent(e);

-        return false;

-    case 35: // end

-        s.div.lastChild.focus();

-        cancelEvent(e);

-        return false;

-    case 9: // tab

-        if (navigator.appName == "Microsoft Internet Explorer") {

-            if (!e.shiftKey) {

-                s.div.lastChild.focus();

-            } else {

-                s.div.firstChild.focus();

-            }

-            return;

-        } else {  // is mozilla/netscape

-            isTab = true;  // best i can do really

-        }

-        break;

-    }

-       

-    dontDoIt = false;

-}

-

-function moveForward(s) { // focus next edit

-    var b = getNextEdit(s);

-    if (b) {

-        b.focus();

-    }

-}

-

-function moveBackward(s) { // focus previous edit

-    var b = getPrevEdit(s);

-    if (b) {

-        b.focus();

-    }

-}

-

-function isInsertOK(code, s) {  // check if you're good to insert a char

-    var mchar = s.mask;

-    switch (mchar) {

-    case "_":

-        return true;

-        break;

-    case "#":

-        return checkDigit(code);

-        break;

-    case "a":

-        return checkAlphaNumeric(code);

-        break;

-    case "A":

-        return checkUpCaseAlphaNumeric(code);

-        break;

-    case "l":

-        return checkAlpha(code);

-        break;

-    case "L":

-        return checkUpCaseAlpha(code);

-        break;

-    }

-    return false;

-}

-

-// functions to check the key code, good ol ASCII

-// fairly straightforward

-

-function checkDigit(code) {

-    if ((code>=48) && (code<=57)) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-function checkAlpha(code) {

-    if (((code>=65) && (code<=90)) || ((code>=97) && (code<=122))) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-function checkUpCaseAlpha(code) {

-    if ((code>=65) && (code<=90)) {

-        return code;

-    } else if ((code>=97) && (code<=122)) {

-        return code - 32;

-    } else {

-        return null;

-    }

-}

-

-function checkAlphaNumeric(code) {

-    if (((code>=65) && (code<=90)) || ((code>=97) && (code<=122)) || ((code>=48) && (code<=57))) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-function checkUpCaseAlphaNumeric(code) {

-    if ((code>=65) && (code<=90)) {

-        return code;

-    } else if ((code>=97) && (code<=122)) {

-        return code - 32;

-    } else if ((code>=48) && (code<=57)) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-

-function changeBitNS(e) {  // handle key events in NS

-    var es = getEventObject(e);

-    if (!isTab) {

-        if (es.display) {

-            if (!dontDoIt) {

-                var code = e.charCode;

-                if (code = isInsertOK(code, es)) {

-                    var  c = String.fromCharCode(code);

-                    es.display.innerHTML = c

-                        var i = es.index;

-                    es.field.value = es.field.value.substr(0, i) + c + es.field.value.substr(i+1, es.field.value.length - i);

-                    moveForward(es);

-                }

-            }

-            es.value = "";

-            cancelEvent(e);

-        }        

-        return false;

-    }  

-}

-

-function changeBitIE(e) { // handle key events in IE

-    var es = getEventObject(e);

-    if (es.display) {

-        var code = e.keyCode;

-        if (code = isInsertOK(code, es)) {

-            var  c = String.fromCharCode(code);

-            es.display.innerHTML = c;

-            var i = es.index;

-            es.field.value = es.field.value.substr(0, i) + c + es.field.value.substr(i+1, es.field.value.length - i);

-            moveForward(es);

-            es.value = "";

-        }

-    }

-    cancelEvent(e);

-    return false;

-}

-

-function click(e) {  // clicking on a display span focuses the edit

-    var s = getEventObject(e);

-    s.editField.focus();

-    cancelEvent(e);

-    return false;

-}

-

-function getPrevEdit(s) {    // get previous input field 

-    var b = s.previousSibling;

-    while (b && (b.tagName!="INPUT")) {

-        b = b.previousSibling;

-    }

-    return b;

-}

-

-function getNextEdit(s) { // get previous next field 

-    var b = s.nextSibling;

-    while (b && (b.tagName!="INPUT")) {

-        b = b.nextSibling;

-    }

-    return b;

-}

-

-function cancelEvent(e) {   // kill event propagation

-    e.cancelBubble = true;

-    e.cancel = true;

-    if (navigator.appName != "Microsoft Internet Explorer") {

-        e.stopPropagation();  // doesn't seem to work for key events

-        e.preventDefault();

-    }

-}

-

-

-function getEventObject(e) {  // utility function to retrieve object from event

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        return e.srcElement;

-    } else {  // is mozilla/netscape

-        // need to crawl up the tree to get the first "real" element

-        // i.e. a tag, not raw text

-        var o = e.target;

-        while (!o.tagName) {

-            o = o.parentNode;

-        }

-        return o;

-    }

-}

-

-function addEvent(name, obj, funct) { // utility function to add event handlers

-

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.attachEvent("on"+name, funct);

-    } else {  // is mozilla/netscape

-        obj.addEventListener(name, funct, false);

-    }

-}

-

-function deleteEvent(name, obj, funct) { // utility function to delete event handlers

-

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.detachEvent("on"+name, funct);

-    } else {  // is mozilla/netscape

-        obj.removeEventListener(name, funct, false);

-    }

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MaskEdit.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MaskEdit.script
deleted file mode 100644
index bdff568..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MaskEdit.script
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!-- 

-   Copyright 2004, 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC

-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"

-	"http://tapestry.apache.org/dtd/Script_3_0.dtd">

-  

-<script>

-

-<include-script resource-path="/org/apache/tapestry/form/MaskEdit.js"/>

-

-<input-symbol key="field" required="yes"/>

-

-<let key="formName">

-  ${field.form.name}

-</let>

-

-<let key="functionName">

-  ${field.name}_init

-</let>

-

-<body>

-tapestry.${functionName}=function() {

-  initMask(dojo.byId("${formName}").elements["${field.name}"], "${field.mask}");

-}

-</body>

-<initialization>

-  tapestry.${functionName}();

-</initialization>

-</script>

-

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MultipleFormSupport.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MultipleFormSupport.java
deleted file mode 100644
index c6eff5a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MultipleFormSupport.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * A {@link FormSupport} implementation that can work when a form is
- * included multiple times in a given page ( due to it being in a loop
- * or in a component that's included many times in the page).
- * <p/>
- * This is achieved by prefixing the ids of all form elements with the 
- * form's id.
- *
- * @since 4.1.1
- */
-public class MultipleFormSupport extends FormSupportImpl
-{   
-    /** 
-     * The prefix to use for the form elements. On render, this is the
-     * clientId of the form. On rewind, it's computed from the posted data.
-     */
-    private String _prefix;
-    
-    public MultipleFormSupport(IMarkupWriter writer, IRequestCycle cycle, IForm form)
-    {
-        super(writer, cycle, form);
-        _prefix = form.getClientId() + ":";
-    }
-    
-    /**
-     * Constructs a unique identifier (within the page). The identifier consists of the component's
-     * id, with an index number added to ensure uniqueness.
-     */
-
-    public String getElementId(IFormComponent component, String baseId)
-    {
-        return super.getElementId(component, _prefix + baseId);
-    }
-    
-    public String peekClientId(IFormComponent comp)
-    {
-        String id = comp.getSpecifiedId();
-        if (id == null)
-            return null;
-        
-        return peekClientId(comp, id);
-    }    
-    
-    protected String peekClientId(IFormComponent comp, String baseId)
-    {        
-        return _elementIdAllocator.peekNextId(_prefix + baseId);
-    } 
-    
-    public String rewind()
-    {
-        findIdPrefix();
-        return super.rewind();
-    }
-    
-    private void findIdPrefix()
-    {
-        String allocatedFormIds = _cycle.getParameter(FORM_IDS);
-        if (allocatedFormIds==null)
-            return;
-        int pos = allocatedFormIds.indexOf(':');
-        if (pos>=0)
-            _prefix = allocatedFormIds.substring(0, pos + 1);
-    }    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MultipleFormSupportFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MultipleFormSupportFactory.java
deleted file mode 100644
index d0545a9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/MultipleFormSupportFactory.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Factory class for creating form support to be used with multiple forms.
- *
- * @since 4.1.1
- */
-public class MultipleFormSupportFactory implements FormSupportFactory
-{    
-    public MultipleFormSupportFactory()
-    {
-    }
-
-    public FormSupport createFormSupport(IMarkupWriter writer, IRequestCycle cycle, IForm form)
-    {
-        return new MultipleFormSupport(writer, cycle, form);
-    }
-    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Option.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Option.java
deleted file mode 100644
index 1fb3014..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Option.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- * A component that renders an HTML &lt;option&gt; form element. Such a component must be wrapped
- * (possibly indirectly) inside a {@link Select}component. [ <a
- * href="../../../../../ComponentReference/Option.html">Component Reference </a>]
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Option extends AbstractComponent
-{
-    /**
-     * Renders the &lt;option&gt; element, or responds when the form containing the element is
-     * submitted (by checking {@link Form#isRewinding()}.
-     * <p>
-     * If the <code>label</code> property is set, it is inserted inside the &lt;option&gt;
-     * element.
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Select select = Select.get(cycle);
-        if (select == null)
-            throw new ApplicationRuntimeException(Tapestry
-                    .getMessage("Option.must-be-contained-by-select"), this, null, null);
-
-        // It isn't enough to know whether the cycle in general is rewinding, need to know
-        // specifically if the form which contains this component is rewinding.
-
-        boolean rewinding = select.isRewinding();
-
-        String value = select.getNextOptionId();
-
-        if (rewinding)
-        {
-            if (!select.isDisabled())
-                setSelected(select.isSelected(value));
-
-            renderBody(writer, cycle);
-        }
-        else
-        {
-            writer.begin("option");
-
-            writer.attribute("value", value);
-
-            if (isSelected())
-                writer.attribute("selected", "selected");
-
-            renderInformalParameters(writer, cycle);
-
-            String label = getLabel();
-
-            if (label != null)
-                writer.print(label);
-
-            renderBody(writer, cycle);
-
-            writer.end();
-        }
-
-    }
-
-    public abstract String getLabel();
-
-    public abstract boolean isSelected();
-
-    public abstract void setSelected(boolean selected);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Option.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Option.jwc
deleted file mode 100644
index 385ee3a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Option.jwc
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.form.Option" allow-body="yes">
-
-  <description>
-  A single option within a Select.
-  </description>
-  
-  <parameter name="selected" required="yes"/>  
-  <parameter name="label"/>
-  
-  <reserved-parameter name="value"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/PropertySelection.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/PropertySelection.java
deleted file mode 100644
index ba27290..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/PropertySelection.java
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * A component used to render a drop-down list of options that the user may select. [ <a
- * href="../../../../../ComponentReference/PropertySelection.html">Component Reference </a>]
- * <p>
- * Earlier versions of PropertySelection (through release 2.2) were more flexible, they included a
- * <b>renderer </b> property that controlled how the selection was rendered. Ultimately, this proved
- * of little value and this portion of functionality was deprecated in 2.3 and will be removed in
- * 2.3.
- * <p>
- * Typically, the values available to be selected are defined using an
- * {@link java.lang.Enum}. A PropertySelection is dependent on an
- * {@link IPropertySelectionModel} to provide the list of possible values.
- * <p>
- * Often, this is used to select a particular {@link java.lang.Enum} to assign to
- * a property; the {@link org.apache.tapestry.form.EnumPropertySelectionModel} class simplifies this.
- * <p>
- * Often, a drop-down list will contain an initial option that serves both as a label and to represent 
- * that nothing is selected. This can behavior can easily be achieved by decorating an existing 
- * {@link IPropertySelectionModel} with a {@link LabeledPropertySelectionModel}.
- * <p>
- * 
- */
-public abstract class PropertySelection extends AbstractFormComponent implements ValidatableField
-{   
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        renderDelegatePrefix(writer, cycle);
-        
-        writer.begin("select");
-        writer.attribute("name", getName());
-        
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-        
-        renderIdAttribute(writer, cycle);
-        
-        renderDelegateAttributes(writer, cycle);
-        
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-        
-        // Apply informal attributes.
-        renderInformalParameters(writer, cycle);
-        
-        writer.println();
-        
-        IPropertySelectionModel model = getModel();
-        
-        if (model == null)
-            throw Tapestry.createRequiredParameterException(this, "model");
-        
-        getOptionRenderer().renderOptions(writer, cycle, model, getValue());
-        
-        writer.end(); // <select>
-
-        renderDelegateSuffix(writer, cycle);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-        
-        Object object = getModel().translateValue(value);
-        
-        try
-        {
-            getValidatableFieldSupport().validate(this, writer, cycle, object);
-            
-            setValue(object);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-    
-    public abstract IPropertySelectionModel getModel();
-    
-    /** @since 2.2 * */
-    public abstract Object getValue();
-
-    /** @since 2.2 * */
-    public abstract void setValue(Object value);
-    
-    /** Responsible for rendering individual options. */
-    public abstract IOptionRenderer getOptionRenderer();
-    
-    /**
-     * Injected.
-     */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-    
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/PropertySelection.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/PropertySelection.jwc
deleted file mode 100644
index a84e39e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/PropertySelection.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.form.PropertySelection"
-                         allow-body="no"
-                         allow-informal-parameters="yes">
-
-    <description>
-        Creates an HTML select to choose a single property from a list of options.
-    </description>
-
-    <parameter name="value" required="yes"/>
-
-    <parameter name="model" required="yes"/>
-
-    <parameter name="disabled"/>
-
-    <parameter name="displayName"/>
-
-    <parameter name="validators" />
-
-    <parameter name="optionRenderer" default-value="ognl:@org.apache.tapestry.form.DefaultOptionRenderer@DEFAULT_INSTANCE" cache="no" />
-
-    <reserved-parameter name="name"/>
-
-    <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Radio.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Radio.java
deleted file mode 100644
index 4560993..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Radio.java
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Implements a component that manages an HTML &lt;input type=radio&gt; form element.
- *  Such a component must be wrapped (possibly indirectly)
- *  inside a {@link RadioGroup} component.
- *
- *  [<a href="../../../../../ComponentReference/Radio.html">Component Reference</a>]
- *
- * 
- *  <p>{@link Radio} and {@link RadioGroup} are generally not used (except
- *  for very special cases).  Instead, a {@link PropertySelection} component is used.
- *
- *
- *  @author Howard Lewis Ship
- * 
- **/
-
-public abstract class Radio extends AbstractComponent
-{
-    /**
-     *  Renders the form element, or responds when the form containing the element
-     *  is submitted (by checking {@link Form#isRewinding()}.
-     *
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-
-        RadioGroup group = RadioGroup.get(cycle);
-        
-        if (group == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Radio.must-be-contained-by-group"),
-                this,
-                null,
-                null);
-
-        // The group determines rewinding from the form.
-
-        boolean rewinding = group.isRewinding();
-
-        int option = group.getNextOptionId();
-
-        if (rewinding)
-        {
-            // If not disabled and this is the selected button within the radio group,
-            // then update set the selection from the group to the value for this
-            // radio button.  This will update the selected parameter of the RadioGroup.
-
-            if (!isDisabled() && !group.isDisabled() && group.isSelected(option))
-                group.updateSelection(getValue());
-            
-            return;
-        }
-        
-        setClientId(group.getName()+option);
-        
-        writer.beginEmpty("input");
-        
-        writer.attribute("type", "radio");
-        
-        writer.attribute("name", group.getName());
-        
-        renderIdAttribute(writer, cycle);
-        
-        // As the group if the value for this Radio matches the selection
-        // for the group as a whole; if so this is the default radio and is checked.
-        
-        if (group.isSelection(getValue()))
-            writer.attribute("checked", "checked");
-
-        if (isDisabled() || group.isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        // The value for the Radio matches the option number (provided by the RadioGroup).
-        // When the form is submitted, the RadioGroup will know which option was,
-        // in fact, selected by the user.
-
-        writer.attribute("value", option);
-
-        renderInformalParameters(writer, cycle);
-
-    }
-
-    public abstract boolean isDisabled();
-
-    public abstract Object getValue();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Radio.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Radio.jwc
deleted file mode 100644
index d28e4ab..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Radio.jwc
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.Radio" allow-body="no">
-
-  <description>
-  A single possible selection within a RadioGroup.
-  </description>
-  
-  <parameter name="value"/>
-  
-  <parameter name="disabled"/>
-  
-  <reserved-parameter name="checked"/>
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="name"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/RadioGroup.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/RadioGroup.java
deleted file mode 100644
index 4eefb92..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/RadioGroup.java
+++ /dev/null
@@ -1,219 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * A special type of form component that is used to contain {@link Radio}components. The Radio and
- * {@link Radio}group components work together to update a property of some other object, much like
- * a more flexible version of a {@link PropertySelection}. [ <a
- * href="../../../../../ComponentReference/RadioGroup.html">Component Reference </a>]
- * <p>
- * As of 4.0, this component can be validated.
- * 
- * @author Howard Lewis Ship
- * @author Paul Ferraro
- */
-public abstract class RadioGroup extends AbstractFormComponent implements ValidatableField
-{
-    /**
-     * A <code>RadioGroup</code> places itself into the {@link IRequestCycle}as an attribute, so
-     * that its wrapped {@link Radio}components can identify thier state.
-     */
-
-    private static final String ATTRIBUTE_NAME = "org.apache.tapestry.active.RadioGroup";
-    
-    // Cached copy of the value from the selectedBinding
-    private Object _selection;
-
-    // The value from the HTTP request indicating which
-    // Radio was selected by the user.
-    private int _selectedOption;
-
-    private boolean _rewinding;
-
-    private boolean _rendering;
-
-    private int _nextOptionId;
-
-    public static RadioGroup get(IRequestCycle cycle)
-    {
-        return (RadioGroup) cycle.getAttribute(ATTRIBUTE_NAME);
-    }
-
-    public int getNextOptionId()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "nextOptionId");
-
-        return _nextOptionId++;
-    }
-
-    public boolean isRewinding()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "rewinding");
-
-        return _rewinding;
-    }
-
-    /**
-     * Returns true if the value is equal to the current selection for the group. This is invoked by
-     * a {@link Radio}during rendering to determine if it should be marked 'checked'.
-     */
-
-    public boolean isSelection(Object value)
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "selection");
-
-        if (_selection == value)
-            return true;
-
-        if (_selection == null || value == null)
-            return false;
-
-        return _selection.equals(value);
-    }
-
-    /**
-     * Invoked by the {@link Radio}which is selected to update the property bound to the selected
-     * parameter.
-     */
-
-    public void updateSelection(Object value)
-    {
-        getBinding("selected").setObject(value);
-
-        _selection = value;
-    }
-
-    /**
-     * Used by {@link Radio}components when rewinding to see if their value was submitted.
-     */
-
-    public boolean isSelected(int option)
-    {
-        return _selectedOption == option;
-    }
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#prepareForRender(org.apache.tapestry.IRequestCycle)
-     */
-    protected void prepareForRender(IRequestCycle cycle)
-    {
-        if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(Tapestry.getMessage("RadioGroup.may-not-nest"),
-                    this, null, null);
-        
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-        
-        _rendering = true;
-        _nextOptionId = 0;
-    }
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#cleanupAfterRender(org.apache.tapestry.IRequestCycle)
-     */
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        _rendering = false;
-        _selection = null;
-
-        cycle.removeAttribute(ATTRIBUTE_NAME);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractRequirableField#renderFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        _rewinding = false;
-        
-        // For rendering, the Radio components need to know what the current
-        // selection is, so that the correct one can mark itself 'checked'.
-        _selection = getBinding("selected").getObject();
-        
-        renderDelegatePrefix(writer, cycle);
-        
-        writer.begin(getTemplateTagName());
-        
-        renderInformalParameters(writer, cycle);
-        
-        renderDelegateAttributes(writer, cycle);
-        
-        renderBody(writer, cycle);
-        
-        writer.end();
-        
-        renderDelegateSuffix(writer, cycle);
-        
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-
-        if (value == null)
-            _selectedOption = -1;
-        else
-            _selectedOption = Integer.parseInt(value);
-
-        _rewinding = true;
-        
-        renderBody(writer, cycle);
-        
-        try
-        {
-            getValidatableFieldSupport().validate(this, writer, cycle, _selection);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-
-    /**
-     * Injected.
-     */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-
-    /**
-     * This component can not take focus.
-     */
-    protected boolean getCanTakeFocus()
-    {
-        return false;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/RadioGroup.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/RadioGroup.jwc
deleted file mode 100644
index b05337c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/RadioGroup.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.RadioGroup" allow-informal-parameters="yes">
-
-  <description>
-  Groups together a number of Radio components.
-  </description>
-  
-  <parameter name="selected" required="yes"/>
-  
-  <parameter name="disabled"/>
-  
-  <parameter name="displayName"/>
-  <parameter name="validators"/>
-  
-  <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/RadioPropertySelectionRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/RadioPropertySelectionRenderer.java
deleted file mode 100644
index a1b8823..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/RadioPropertySelectionRenderer.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Implementation of {@link IPropertySelectionRenderer} that
- *  produces a table of radio (&lt;input type=radio&gt;) elements.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public class RadioPropertySelectionRenderer implements IPropertySelectionRenderer
-{
-
-    /**
-     *  Writes the &lt;table&gt; element.
-     *
-     **/
-
-    public void beginRender(PropertySelection component, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.begin("table");
-        writer.attribute("border", 0);
-        writer.attribute("cellpadding", 0);
-        writer.attribute("cellspacing", 2);
-    }
-
-    /**
-     *  Closes the &lt;table&gt; element.
-     *
-     **/
-
-    public void endRender(PropertySelection component, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.end(); // <table>
-    }
-
-    /**
-     *  Writes a row of the table.  The table contains two cells; the first is the radio
-     *  button, the second is the label for the radio button.
-     *
-     **/
-
-    public void renderOption(
-        PropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IPropertySelectionModel model,
-        Object option,
-        int index,
-        boolean selected)
-    {
-        writer.begin("tr");
-        writer.begin("td");
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "radio");
-        writer.attribute("name", component.getName());
-        writer.attribute("value", model.getValue(index));
-
-        if (component.isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        if (selected)
-            writer.attribute("checked", "checked");
-
-        writer.end(); // <td>
-
-        writer.println();
-
-        writer.begin("td");
-        writer.print(model.getLabel(index));
-        writer.end(); // <td>
-        writer.end(); // <tr>
-
-        writer.println();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Select.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Select.java
deleted file mode 100644
index 18edc0f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Select.java
+++ /dev/null
@@ -1,195 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Implements a component that manages an HTML &lt;select&gt; form element. The most common
- * situation, using a &lt;select&gt; to set a specific property of some object, is best handled
- * using a {@link PropertySelection}component. [ <a
- * href="../../../../../ComponentReference/Select.html">Component Reference </a>]
- * <p>
- * Otherwise, this component is very similar to {@link RadioGroup}. 
- * <p>
- * As of 4.0, this component can be validated.
- * 
- * @author Howard Lewis Ship
- * @author Paul Ferraro
- */
-public abstract class Select extends AbstractFormComponent implements ValidatableField
-{
-    
-    /**
-     * Used by the <code>Select</code> to record itself as a {@link IRequestCycle}attribute, so
-     * that the {@link Option}components it wraps can have access to it.
-     */
-
-    private static final String ATTRIBUTE_NAME = "org.apache.tapestry.active.Select";
-    
-    private boolean _rewinding;
-
-    private boolean _rendering;
-
-    private Set _selections;
-
-    private int _nextOptionId;
-
-    public static Select get(IRequestCycle cycle)
-    {
-        return (Select) cycle.getAttribute(ATTRIBUTE_NAME);
-    }
-
-    public abstract boolean isMultiple();
-
-    public boolean isRewinding()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "rewinding");
-
-        return _rewinding;
-    }
-
-    public String getNextOptionId()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "nextOptionId");
-
-        // Return it as a hex value.
-
-        return Integer.toString(_nextOptionId++);
-    }
-
-    public boolean isSelected(String value)
-    {
-        if (_selections == null)
-            return false;
-
-        return _selections.contains(value);
-    }
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#prepareForRender(org.apache.tapestry.IRequestCycle)
-     */
-    protected void prepareForRender(IRequestCycle cycle)
-    {
-        if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(Tapestry.getMessage("Select.may-not-nest"), this,
-                    null, null);
-
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-
-        _rendering = true;
-        _nextOptionId = 0;      
-    }
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#cleanupAfterRender(org.apache.tapestry.IRequestCycle)
-     */
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        _rendering = false;
-        _selections = null;        
-        
-        cycle.removeAttribute(ATTRIBUTE_NAME);           
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        _rewinding = false;
-
-        renderDelegatePrefix(writer, cycle);
-
-        writer.begin("select");
-
-        writer.attribute("name", getName());
-
-        if (isMultiple())
-            writer.attribute("multiple", "multiple");
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        renderIdAttribute(writer, cycle);
-
-        renderDelegateAttributes(writer, cycle);
-
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-        
-        renderInformalParameters(writer, cycle);
-
-        renderBody(writer, cycle);
-
-        writer.end();
-
-        renderDelegateSuffix(writer, cycle);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        _selections = null;
-        _rewinding = true;
-
-        String[] parameters = cycle.getParameters(getName());
-
-        try
-        {
-            if (parameters != null)
-            {
-                int length = parameters.length;
-    
-                _selections = new HashSet((length > 30) ? 101 : 7);
-    
-                for (int i = 0; i < length; i++)
-                    _selections.add(parameters[i]);
-            }
-    
-            renderBody(writer, cycle);
-            
-            // This is atypical validation - since this component does not explicitly bind to an object
-            getValidatableFieldSupport().validate(this, writer, cycle, parameters);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-
-    /**
-     * Injected.
-     */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Select.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Select.jwc
deleted file mode 100644
index fc0208a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Select.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.form.Select">
-
-  <description>
-  Creates an HTML select populated with a number of options.
-  </description>
-
-  <parameter name="multiple"/>
-  <parameter name="disabled"/>
-
-  <parameter name="displayName"/>
-  <parameter name="validators"/>
-  
-  <parameter name="id" property="idParameter" default-value="ognl:id"/>
-  
-  <reserved-parameter name="name"/>
-
-  <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/SelectPropertySelectionRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/SelectPropertySelectionRenderer.java
deleted file mode 100644
index dac6e39..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/SelectPropertySelectionRenderer.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Implementation of {@link IPropertySelectionRenderer} that produces a
- * &lt;select&gt; element (containing &lt;option&gt; elements).
- * 
- * @author Howard Lewis Ship
- */
-
-public class SelectPropertySelectionRenderer implements IPropertySelectionRenderer
-{
-
-    /**
-     * Writes the &lt;select&gt; element. If the {@link PropertySelection} is
-     * {@link PropertySelection#isDisabled() disabled} then a
-     * <code>disabled</code> attribute is written into the tag (though
-     * Navigator 4 will ignore this).
-     */
-
-    public void beginRender(PropertySelection component, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.begin("select");
-        writer.attribute("name", component.getName());
-
-        if (component.isDisabled()) 
-            writer.attribute("disabled", "disabled");
-
-        writer.println();
-    }
-
-    /**
-     * Closes the &lt;select&gt; element.
-     */
-
-    public void endRender(PropertySelection component, IMarkupWriter writer,
-            IRequestCycle cycle)
-    {
-        writer.end(); // <select>
-    }
-
-    /**
-     * Writes an &lt;option&gt; element.
-     */
-
-    public void renderOption(PropertySelection component, IMarkupWriter writer,
-            IRequestCycle cycle, IPropertySelectionModel model, Object option,
-            int index, boolean selected)
-    {
-        writer.beginEmpty("option");
-        writer.attribute("value", model.getValue(index));
-
-        if (selected) writer.attribute("selected", "selected");
-
-        writer.print(model.getLabel(index));
-
-        writer.end();
-
-        writer.println();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/StringPropertySelectionModel.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/StringPropertySelectionModel.java
deleted file mode 100644
index 86b8f22..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/StringPropertySelectionModel.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-/**
- * Implementation of {@link IPropertySelectionModel} that allows one String from
- * an array of Strings to be selected as the property.
- * <p>
- * Uses a simple index number as the value (used to represent the selected
- * String). This assumes that the possible values for the Strings will remain
- * constant between request cycles.
- * 
- * @author Howard Lewis Ship
- */
-
-public class StringPropertySelectionModel implements IPropertySelectionModel
-{
-
-    private String[] _options;
-
-    private boolean[] _disabled;
-    
-    /**
-     * Standard constructor. The options are retained (not copied).
-     */
-    public StringPropertySelectionModel(String[] options)
-    {
-        this._options = options;
-    }
-    
-    /**
-     * Standard constructor. The options are retained (not copied).
-     */
-
-    public StringPropertySelectionModel(String[] options, boolean[] disabled)
-    {
-        this(options);
-        _disabled = disabled;
-    }
-
-    public int getOptionCount()
-    {
-        return _options.length;
-    }
-
-    public Object getOption(int index)
-    {
-        return _options[index];
-    }
-
-    /**
-     * Labels match options.
-     */
-
-    public String getLabel(int index)
-    {
-        return _options[index];
-    }
-
-    /**
-     * Values are indexes into the array of options.
-     */
-
-    public String getValue(int index)
-    {
-        return Integer.toString(index);
-    }
-
-    public boolean isDisabled(int index)
-    {
-        return _disabled != null && _disabled[index];
-    }
-    
-    public Object translateValue(String value)
-    {
-        if (value == null)
-            return null;
-        
-        int index;
-
-        index = Integer.parseInt(value);
-        
-        if (index < 0 || index >= _options.length)
-            return null;
-        
-        return _options[index];
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Submit.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Submit.java
deleted file mode 100644
index 851373b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Submit.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Implements a component that manages an HTML &lt;input type=submit&gt; form element. [ <a
- * href="../../../../../ComponentReference/Submit.html">Component Reference </a>]
- * <p>
- * This component is generally only used when the form has multiple submit buttons, and it is
- * important for the application to know which one was pressed. You may also want to use
- * {@link ImageSubmit}which accomplishes much the same thing, but uses a graphic image instead.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Submit extends AbstractSubmit
-{
-    protected boolean isClicked(IRequestCycle cycle, String name)
-    {
-        // How to know which Submit button was actually
-        // clicked? When submitted, it produces a request parameter
-        // with its name and value (the value serves double duty as both
-        // the label on the button, and the parameter value).
-
-        // If the value isn't there, then this button wasn't
-        // selected.
-        
-        return cycle.getParameter(name) != null;
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.beginEmpty("input");
-        writer.attribute("type", "submit");
-        writer.attribute("name", getName());
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        String label = getLabel();
-
-        if (label != null)
-            writer.attribute("value", label);
-
-        renderIdAttribute(writer, cycle);
-
-        renderInformalParameters(writer, cycle);
-        
-        renderSubmitBindings(writer, cycle);
-        
-        writer.closeTag();
-    }
-
-    /** parameter. */
-    public abstract String getLabel();
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Submit.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Submit.jwc
deleted file mode 100644
index e63d130..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Submit.jwc
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.Submit" allow-body="no">
-
-  <description>
-  Creates a labeled submit button within a form.
-  </description>
-
-  <parameter name="label" deprecated="true">
-    <description>
-      Deprecated in 4.0.  An alternate way to specify the value attribute,
-      which is the label used on the button in the browser (as well as the
-      value supplied in the query parameter on form submit).
-    </description>
-  </parameter>
-  
-  <parameter name="disabled">
-      <description>
-          If true, then the component is disabled, which will be reflected in the
-          output submit element. Additionally, the component will not respond
-          during the form submission.
-      </description>
-  </parameter>
-  
-  <parameter name="selected">
-      <description>
-          If bound, then this parameter will be updated with the value of the
-          tag parameter, if the Submit is triggered.
-       </description>
-  </parameter>
-  
-  <parameter name="tag">
-      <description>
-          A tag value used to identify this Submit as the triggered component.
-      </description>
-  </parameter>
-  
-  <parameter name="listener">
-      <description>
-          A listener that is notified if this component is triggered.
-      </description>
-  </parameter>
-  
-  <parameter name="action">
-      <description>
-          A listener that is notified if this component is triggered
-          just before the form's listener, after all components 
-          enclosed by the Form have had a chance to update their properties.
-      </description>
-  </parameter>
-  
-  <parameter name="parameters">
-    <description>
-    An object, or list of objects, gathered when the button is triggered and 
-    made available as listener parameters in the request cycle, making
-    the parameters available to a deferred listener.
-    </description>
-  </parameter>
-  
-  <parameter name="submitType" default-value="literal:submit" >
-    <description>
-        The type of submission this component should cause. Valid values are 
-        submit, cancel, and refresh. 
-    </description>
-  </parameter>
-  
-  <parameter name="updateComponents" />
-  <parameter name="json" default-value="false" />
-  <parameter name="async" default-value="false" />
-  <parameter name="id" property="idParameter" default-value="id"/>
-  
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="defer"/>
-
-  <inject property="directService" object="engine-service:direct" />
-  <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>
-  
-  <inject property="submitScript" type="script" object="SubmitBindings.script"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/SubmitBindings.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/SubmitBindings.script
deleted file mode 100644
index 1f686f9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/SubmitBindings.script
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<script>
-<input-symbol key="submit" required="yes" />
-<input-symbol key="type" />
-<input-symbol key="key" required="yes" />
-<input-symbol key="parms" />
-    <body>
-        <unique>
-            dojo.require("dojo.event.common");
-            dojo.require("tapestry.form");
-        </unique>
-    </body>
-    <initialization>
-        tapestry.cleanConnect(dojo.byId("${submit.clientId}"), "onclick", "event${key}");
-        tapestry.event${key}=function(e){
-            dojo.event.browser.stopEvent(e);
-            <if expression="parms != null">
-                <if expression="type != null">
-                    tapestry.form.${type}("${submit.form.clientId}", "${submit.name}", ${parms});
-                </if>
-                <if-not expression="type != null">
-                    tapestry.form.submit("${submit.form.clientId}", "${submit.name}", ${parms});
-                </if-not>
-            </if>
-            <if-not expression="parms != null">
-                <if expression="type != null">
-                    tapestry.form.${type}("${submit.form.clientId}", "${submit.name}");
-                </if>
-                <if-not expression="type != null">
-                    tapestry.form.submit("${submit.form.clientId}", "${submit.name}");
-                </if-not>
-            </if-not>
-        };
-        dojo.event.connect(dojo.byId("${submit.clientId}"), "onclick", tapestry, "event${key}");
-    </initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextArea.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextArea.java
deleted file mode 100644
index b80cbe7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextArea.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Implements a component that manages an HTML &lt;textarea&gt; form element. [<a
- * href="../../../../../ComponentReference/TextArea.html">Component Reference</a>]
- * <p>
- * As of 4.0, this component can be configurably translated and validated.
- *
- * @author Howard Lewis Ship
- * @author Paul Ferraro
- */
-public abstract class TextArea extends AbstractFormComponent implements TranslatedField {
-
-    public abstract Object getValue();
-
-    public abstract void setValue(Object value);
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = getTranslatedFieldSupport().format(this, getValue());
-
-        renderDelegatePrefix(writer, cycle);
-
-        writer.begin("textarea");
-
-        writer.attribute("name", getName());
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        renderIdAttribute(writer, cycle);
-
-        renderDelegateAttributes(writer, cycle);
-
-        getTranslatedFieldSupport().renderContributions(this, writer, cycle);
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-
-        renderInformalParameters(writer, cycle);
-
-        if (value != null)
-            writer.print(value);
-
-        writer.end();
-
-        renderDelegateSuffix(writer, cycle);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-
-        try
-        {
-            String text = (String) getTranslatedFieldSupport().parse(this, value);
-
-            getValidatableFieldSupport().validate(this, writer, cycle, text);
-
-            setValue(text);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-
-    /**
-     * Injected.
-     */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-    /**
-     * Injected.
-     */
-    public abstract TranslatedFieldSupport getTranslatedFieldSupport();
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextArea.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextArea.jwc
deleted file mode 100644
index facb477..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextArea.jwc
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.TextArea" allow-body="no">
-
-  <description>
-  A multi-line text area.
-  </description>
-    
-  <parameter name="value" required="yes">
-      <description>
-          The multi-line string to be read and updated.
-      </description>
-  </parameter>
-  
-  <parameter name="disabled">
-      <description>
-      If true, then the disabled attribute will be written on render, and the
-      TextArea will not update its value parameter when the form is submitted.
-      </description>
-  </parameter>
-  
-  <parameter name="displayName">
-      <description>
-          The name of the field, which may be used by a FieldLabel.
-      </description>
-  </parameter>
-
-  <parameter name="translator" default-value="translator:string"/>
-  <parameter name="validators"/>
-  <parameter name="id" property="idParameter" default-value="id"/>
-  		
-  <reserved-parameter name="name"/>
-
-  <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-  <inject property="translatedFieldSupport" object="service:tapestry.form.TranslatedFieldSupport"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextField.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextField.java
deleted file mode 100644
index e7be6ea..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextField.java
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.valid.ValidatorException;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Implements a component that manages an HTML &lt;input type=text&gt; or
- * &lt;input type=password&gt; form element. [ <a
- * href="../../../../../ComponentReference/TextField.html">Component Reference
- * </a>]
- * <p>
- * As of 4.0, this component can be configurably translated and validated.
- * 
- * @author Howard Lewis Ship
- * @author Paul Ferraro
- */
-public abstract class TextField extends AbstractFormComponent implements TranslatedField
-{
-
-    public abstract boolean isHidden();
-
-    public abstract Object getValue();
-
-    public abstract void setValue(Object value);
-
-    public abstract String getMask();
-    
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = getTranslatedFieldSupport().format(this, getValue());
-        
-        renderDelegatePrefix(writer, cycle);
-
-        writer.beginEmpty("input");
-
-        writer.attribute("type", isHidden() ? "password" : "text");
-
-        writer.attribute("name", getName());
-
-        if (isDisabled()) 
-            writer.attribute("disabled", "disabled");
-
-        if (value != null) 
-            writer.attribute("value", value);
-
-        renderIdAttribute(writer, cycle);
-
-        renderDelegateAttributes(writer, cycle);
-
-        getTranslatedFieldSupport().renderContributions(this, writer, cycle);
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-
-        renderInformalParameters(writer, cycle);
-        
-        writer.closeTag();
-
-        renderDelegateSuffix(writer, cycle);
-
-        if (isParameterBound("mask") && !isDisabled()) {
-
-            PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, this);
-
-            Map symbols = new HashMap();
-            symbols.put("field", this);
-            
-            getMaskScript().execute(this, cycle, pageRenderSupport, symbols);
-        }
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-
-        try
-        {
-            Object object = getTranslatedFieldSupport().parse(this, value);
-
-            getValidatableFieldSupport().validate(this, writer, cycle, object);
-
-            setValue(object);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-
-    /**
-     * Injected.
-     *
-     * @return The Validation service.
-     */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-    /**
-     * Injected.
-     *
-     * @return The translator service.
-     */
-    public abstract TranslatedFieldSupport getTranslatedFieldSupport();
-
-    /**
-     * Injected mask editing script.
-     * @return The local mask script template.
-     */
-    public abstract IScript getMaskScript();
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextField.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextField.jwc
deleted file mode 100644
index ed08c06..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TextField.jwc
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.form.TextField" allow-body="no">
-
-    <description>
-        A text input field.
-    </description>
-
-    <parameter name="value" required="yes">
-        <description>
-            The text string to be read and updated.
-        </description>
-    </parameter>
-
-    <parameter name="disabled">
-        <description>
-            If true, then the disabled attribute will be written on render, and the
-            TextField will not update its value parameter when the form is submitted.
-        </description>
-    </parameter>
-
-    <parameter name="displayName">
-        <description>
-            The name of the field, which may be used by a FieldLabel.
-        </description>
-    </parameter>
-
-    <parameter name="hidden">
-        <description>
-            If true, then the TextField will render itself as a password field (that hides the
-            content entered by the user).
-        </description>
-    </parameter>
-
-    <parameter name="translator" default-value="translator:string"/>
-    <parameter name="validators"/>
-    <parameter name="id" property="idParameter" default-value="id"/>
-
-    <parameter name="mask" >
-        <description>
-            The optional regexp mask to apply to the textfield when input is being changed to
-            force a certain type of input.
-        </description>
-    </parameter>
-
-    <reserved-parameter name="name"/>
-    <reserved-parameter name="type"/>
-    <reserved-parameter name="value"/>
-
-    <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-    <inject property="translatedFieldSupport" object="service:tapestry.form.TranslatedFieldSupport"/>
-    <inject property="maskScript" type="script" object="MaskEdit.script"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TranslatedField.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TranslatedField.java
deleted file mode 100644
index 9578165..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TranslatedField.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.form.translator.Translator;
-
-/**
- * Represents an input field that can be translated.
- *
- * @see {@link TranslatedFieldSupport}. 
- */
-public interface TranslatedField extends ValidatableField
-{
-
-    Translator getTranslator();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TranslatedFieldSupport.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TranslatedFieldSupport.java
deleted file mode 100644
index f6ba8c6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TranslatedFieldSupport.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * 
- */
-public interface TranslatedFieldSupport
-{
-
-    /**
-     * Formats the field translation.
-     *
-     * @param field
-     *          The field the value is being formatted for.
-     * @param object
-     *          The object value to be formatted.
-     *
-     * @return The formatted string value of the given object.
-     */
-    String format(TranslatedField field, Object object);
-
-    /**
-     * Parses the field value.
-     * @param field
-     *          The field to parse the value from.
-     * @param text
-     *          The input text.
-     *
-     * @return The parsed field value in its translated object form.
-     * @throws ValidatorException On validation error.
-     */
-    Object parse(TranslatedField field, String text)
-        throws ValidatorException;
-
-    /**
-     * Renders client side / misc contributions when the field is being rendered.
-     *
-     * @param field
-     *          The field being rendered.
-     * @param writer
-     *          The markup writer to use.
-     * @param cycle
-     *          The current request.
-     */
-    void renderContributions(TranslatedField field, IMarkupWriter writer, IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TranslatedFieldSupportImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TranslatedFieldSupportImpl.java
deleted file mode 100644
index ffdf52b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/TranslatedFieldSupportImpl.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.service.ThreadLocale;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * 
- * @author unknown
- */
-public class TranslatedFieldSupportImpl implements TranslatedFieldSupport
-{
-    private ThreadLocale _threadLocale;
-
-    /**
-     * @return Returns the threadLocale.
-     */
-    public ThreadLocale getThreadLocale()
-    {
-        return _threadLocale;
-    }
-
-    /**
-     * @param threadLocale
-     *            The threadLocale to set.
-     */
-    public void setThreadLocale(ThreadLocale threadLocale)
-    {
-        _threadLocale = threadLocale;
-    }
-
-    public String format(TranslatedField field, Object object)
-    {
-        IValidationDelegate delegate = field.getForm().getDelegate();
-
-        return delegate.isInError() ? delegate.getFieldInputValue() : field.getTranslator().format(
-                field,
-                _threadLocale.getLocale(),
-                object);
-    }
-
-    public Object parse(TranslatedField field, String text) throws ValidatorException
-    {
-        IValidationDelegate delegate = field.getForm().getDelegate();
-
-        delegate.recordFieldInputValue(text);
-
-        ValidationMessages messages = new ValidationMessagesImpl(field, _threadLocale.getLocale());
-
-        return field.getTranslator().parse(field, messages, text);
-    }
-
-    public void renderContributions(TranslatedField field, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (field.getForm().isClientValidationEnabled())
-        {
-            FormComponentContributorContext context = new FormComponentContributorContextImpl(
-                    _threadLocale.getLocale(), cycle, field);
-
-            field.getTranslator().renderContribution(writer, cycle, context, field);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Upload.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Upload.java
deleted file mode 100644
index 886fb40..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Upload.java
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.multipart.MultipartDecoder;
-import org.apache.tapestry.request.IUploadFile;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Form element used to upload files. [ <a
- * href="../../../../../ComponentReference/Upload.html">Component Reference
- * </a>]
- * <p>
- * As of 4.0, this component can be validated.
- * 
- * @author Howard Lewis Ship
- * @author Paul Ferraro
- * @since 1.0.8
- */
-
-public abstract class Upload extends AbstractFormComponent implements ValidatableField
-{
-    public abstract void setFile(IUploadFile file);
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // Force the form to use the correct encoding type for file uploads.
-        IForm form = getForm();
-        
-        form.setEncodingType("multipart/form-data");
-
-        renderDelegatePrefix(writer, cycle);
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "file");
-        writer.attribute("name", getName());
-
-        if (isDisabled())
-        {
-            writer.attribute("disabled", "disabled");
-        }
-
-        renderIdAttribute(writer, cycle);
-
-        renderDelegateAttributes(writer, cycle);
-
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-
-        renderDelegateSuffix(writer, cycle);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IUploadFile file = getDecoder().getFileUpload(getName());
-        
-        if (file != null && HiveMind.isBlank(file.getFileName()))
-        {
-            file = null;
-        }
-        
-        try
-        {
-            getValidatableFieldSupport().validate(this, writer, cycle, file);
-            
-            setFile(file);
-        }
-        catch (ValidatorException e)
-        {
-            getForm().getDelegate().record(e);
-        }
-    }
-    
-    /**
-     * Injected.
-     */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-    /**
-     * Injected.
-     */
-    public abstract MultipartDecoder getDecoder();
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#isRequired()
-     */
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Upload.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Upload.jwc
deleted file mode 100644
index 28a2ebc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/Upload.jwc
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-	
-<component-specification class="org.apache.tapestry.form.Upload" allow-body="no">
-
-  <description>
-  Allows a file to be uploaded as part of a form.
-  </description>
-
-  <parameter name="file" required="yes">
-  	<description>
-  	Parameter updated with the information (filename and content) of the file
-  	when the form is submitted.
-  	</description>
-  </parameter>
-
-  <parameter name="disabled"/>
-
-  <parameter name="displayName"/>
-  <parameter name="validators"/>
-  <parameter name="id" property="idParameter" default-value="id"/>
-
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="name"/>
-  
-  <inject property="decoder" object="infrastructure:multipartDecoder"/>
-  <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableField.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableField.java
deleted file mode 100644
index 4c065a4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableField.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-
-/**
- * Implemented by form components that can need to be translated and validated. During render the
- * translator is used to translated the value to a string. During rewind, the submitted value is
- * translated back into an object by the translator and then validated.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public interface ValidatableField extends IFormComponent
-{
-    /**
-     * Coerced into an Iterator of Validators.
-     */
-    Object getValidators();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableFieldExtension.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableFieldExtension.java
deleted file mode 100644
index adc5d71..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableFieldExtension.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright Aug 6, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.validator.Validator;
-
-
-/**
- * Marker interface for components that would like to override the default
- * logic used to render validation contributions made for client side form
- * validation.
- * 
- * @author jkuhnert
- */
-public interface ValidatableFieldExtension extends ValidatableField
-{
-
-    /**Called during render of the specified component. Renders any contributions from validators.
-     * Check to see if this field would like to override the default
-     * contributions made by the specified {@link Validator} with it's own
-     * contributions.
-     * 
-     * @param validator The validator to check if component wants to override. 
-     * @param cycle The current request cycle.
-     * 
-     * @return True if this field wants to override default, false otherwise.
-     */
-    boolean overrideValidator(Validator validator, IRequestCycle cycle);
-    
-    /**
-     * Very similar to the method signature used by {@link ValidatableFieldSupport#renderContributions(ValidatableField, IMarkupWriter, IRequestCycle)}, 
-     * with the additional parameter being the {@link Validator} that this component has chosen to override.
-     * 
-     * <p>
-     * This method will only be called if {@link #overrideValidator(Validator, IRequestCycle)} returns true
-     * for the specified {@link Validator}.
-     * </p>
-     * 
-     * @param validator The original {@link Validator} that component opted to override.
-     * @param context The context object used by validation contributors.
-     * @param writer The markup writer to send content to. (if any is needed)
-     * @param cycle The current request cycle.
-     */
-    void overrideContributions(Validator validator, FormComponentContributorContext context, 
-            IMarkupWriter writer, IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableFieldSupport.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableFieldSupport.java
deleted file mode 100644
index d2ea93e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableFieldSupport.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.validator.Required;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Implements the logic used by {@link Required}s for required field checking on rewind and
- * generating client-side logic during render.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public interface ValidatableFieldSupport
-{
-    /**
-     * Called during render of the specified component. Renders any contributions from validators.
-     */
-    void renderContributions(ValidatableField field, IMarkupWriter writer,
-            IRequestCycle cycle);
-
-    /**
-     * Called during rewind of the specified component. Specified value is validated using the 
-     * component's validators.
-     * 
-     * @throws ValidatorException if validation fails
-     */
-    void validate(ValidatableField component, IMarkupWriter writer, IRequestCycle cycle, Object value) throws ValidatorException;
-
-    /**
-     * Returns true if this component is required. This usually entails a search of the component's
-     * validators.
-     */
-    boolean isRequired(ValidatableField field);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableFieldSupportImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableFieldSupportImpl.java
deleted file mode 100644
index 4fe834b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidatableFieldSupportImpl.java
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.util.Iterator;
-
-import org.apache.hivemind.service.ThreadLocale;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.form.validator.Validator;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Default {@link ValidatableFieldSupport} implementation. This implementation generates calls to a
- * static javascript function during render if client-side validation is enabled.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public class ValidatableFieldSupportImpl implements ValidatableFieldSupport
-{
-    private ValueConverter _converter;
-
-    private ThreadLocale _threadLocale;
-
-    public void setValueConverter(ValueConverter converter)
-    {
-        _converter = converter;
-    }
-
-    public void setThreadLocale(ThreadLocale threadLocale)
-    {
-        _threadLocale = threadLocale;
-    }
-
-    protected Iterator getValidatorsIterator(ValidatableField component)
-    {
-        return (Iterator) _converter.coerceValue(component.getValidators(), Iterator.class);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.ValidatableFieldSupport#renderContributions(ValidatableField, IMarkupWriter, IRequestCycle)
-     */
-    public void renderContributions(ValidatableField component, IMarkupWriter writer,
-            IRequestCycle cycle)
-    {
-        ValidatableFieldExtension extension = null;
-        if (ValidatableFieldExtension.class.isInstance(component))
-            extension = (ValidatableFieldExtension)component;
-        
-        if (component.getForm().isClientValidationEnabled())
-        {
-            FormComponentContributorContext context = new FormComponentContributorContextImpl(
-                    _threadLocale.getLocale(), cycle, component);
-
-            Iterator validators = getValidatorsIterator(component);
-
-            while (validators.hasNext())
-            {
-                Validator validator = (Validator) validators.next();
-                
-                if (extension != null && extension.overrideValidator(validator, cycle))
-                    extension.overrideContributions(validator, context, writer, cycle);
-                else
-                    validator.renderContribution(writer, cycle, context, component);
-            }
-        }
-    }
-
-    /**
-     * @see org.apache.tapestry.form.ValidatableFieldSupport#validate(org.apache.tapestry.form.ValidatableField, org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle, java.lang.Object)
-     */
-    public void validate(ValidatableField component, IMarkupWriter writer, IRequestCycle cycle, Object object) throws ValidatorException
-    {
-        boolean isNonNull = (object != null);
-
-        Iterator validators = getValidatorsIterator(component);
-
-        ValidationMessages messages = new ValidationMessagesImpl(component, _threadLocale.getLocale());
-
-        while (validators.hasNext())
-        {
-            Validator validator = (Validator) validators.next();
-
-            if (isNonNull || validator.getAcceptsNull())
-                validator.validate(component, messages, object);
-        }
-    }
-
-    public boolean isRequired(ValidatableField field)
-    {
-        Iterator i = getValidatorsIterator(field);
-
-        while (i.hasNext())
-        {
-            Validator validator = (Validator) i.next();
-
-            if (validator.isRequired())
-                return true;
-        }
-
-        return false;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidationMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidationMessages.java
deleted file mode 100644
index 0e6f9a0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidationMessages.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.util.Locale;
-
-/**
- * Support interface used to provide access to validation messages. Typically used by
- * {@link org.apache.tapestry.form.validator.Validator}s.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ValidationMessages
-{
-    /**
-     * Formats a validation message. Automatically chooses the correct localization.
-     * 
-     * @param messageOverride
-     *            a supplied override to the default message format taken from the
-     *            ValidationStrings.properties message catalog.
-     * @param messageKey
-     *            used to look up the message format when messageOverride is blank (null or empty)
-     * @param arguments
-     *            array of arguments formatted with the message format
-     */
-
-    String formatValidationMessage(String messageOverride, String messageKey,
-            Object[] arguments);
-
-    /**
-     * Returns the locale for which messages are generated.
-     */
-
-    Locale getLocale();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidationMessagesImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidationMessagesImpl.java
deleted file mode 100644
index bd47510..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/ValidationMessagesImpl.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.text.MessageFormat;
-import java.util.Locale;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.valid.ValidationStrings;
-
-/**
- * Wrapper around
- * {@link org.apache.tapestry.valid.ValidationStrings#getMessagePattern(String, Locale)} and
- * {@link java.text.MessageFormat#format(java.lang.String, java.lang.Object[])}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ValidationMessagesImpl implements ValidationMessages
-{
-    private final IFormComponent _field;
-
-    private final Locale _locale;
-
-    public ValidationMessagesImpl(IFormComponent field, Locale locale)
-    {
-        Defense.notNull(field, "field");
-        Defense.notNull(locale, "locale");
-
-        _field = field;
-        _locale = locale;
-    }
-
-    public String formatValidationMessage(String messageOverride, String messageKey,
-            Object[] arguments)
-    {
-        String message = extractLocalizedMessage(messageOverride, messageKey);
-
-        return MessageFormat.format(message, arguments);
-    }
-
-    private String extractLocalizedMessage(String messageOverride, String messageKey)
-    {
-        if (messageOverride == null)
-            return ValidationStrings.getMessagePattern(messageKey, _locale);
-
-        if (messageOverride.startsWith("%"))
-        {
-            String key = messageOverride.substring(1);
-
-            return _field.getContainer().getMessages().getMessage(key);
-        }
-
-        // Otherwise, a literal string
-
-        return messageOverride;
-    }
-
-    public Locale getLocale()
-    {
-        return _locale;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/package.html
deleted file mode 100644
index 3388ed5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/package.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Components for implementing basic HTML Forms.  Most
-components are straight forward 1:1 mappings between Tapestry components and a
-corresponding HTML element. {@link org.apache.tapestry.form.PropertySelection} is more complicated,
-as it manages way more of the process of implementing a &lt;select&gt; and its &lt;option&gt;s.
-
-<p>Package {@link org.apache.tapestry.valid} contains more complex components that not only collect
-input, but validate it as well.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java
deleted file mode 100644
index 980d4de..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.AbstractFormComponentContributor;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidatorException;
-
-import java.util.Locale;
-
-/**
- * Abstract {@link Translator} implementation that provides default behavior for trimming, null
- * object, and empty text handling.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public abstract class AbstractTranslator extends AbstractFormComponentContributor implements
-        Translator
-{
-    private boolean _trim;
-
-    private String _message;
-
-    public AbstractTranslator()
-    {
-    }
-
-    // Needed until HIVEMIND-134 fix is available
-    public AbstractTranslator(String initializer)
-    {
-        super(initializer);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.translator.Translator#format(org.apache.tapestry.form.IFormComponent,
-     *      Locale, java.lang.Object)
-     */
-    public String format(IFormComponent field, Locale locale, Object object)
-    {
-        if (object == null)
-            return "";
-
-        return formatObject(field, locale, object);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.translator.Translator#parse(org.apache.tapestry.form.IFormComponent,
-     *      ValidationMessages, java.lang.String)
-     */
-    public Object parse(IFormComponent field, ValidationMessages messages, String text)
-            throws ValidatorException
-    {
-        String value = text == null ? null : (_trim ? text.trim() : text);
-
-        return HiveMind.isBlank(value) ? getValueForEmptyInput() : parseText(field, messages, value);
-    }
-
-    protected abstract String formatObject(IFormComponent field, Locale locale, Object object);
-
-    protected abstract Object parseText(IFormComponent field, ValidationMessages messages, String text) 
-    throws ValidatorException;
-
-    /**
-     * The value to be used when the value supplied in the request is blank (null or empty). The
-     * default value is null, but some subclasses may override.
-     * 
-     * @see #parse(IFormComponent, ValidationMessages, String)
-     * @return null, subclasses may override
-     */
-    protected Object getValueForEmptyInput()
-    {
-        return null;
-    }
-
-    protected String buildMessage(ValidationMessages messages, IFormComponent field, String key)
-    {
-        String label = field.getDisplayName();
-        
-        Object[] parameters = getMessageParameters(messages.getLocale(), label);
-        
-        return messages.formatValidationMessage(_message, key, parameters);
-    }
-
-    protected Object[] getMessageParameters(Locale locale, String label)
-    {
-        return new Object[] { label };
-    }
-
-    /**
-     * @see org.apache.tapestry.form.FormComponentContributor#renderContribution(IMarkupWriter, IRequestCycle, FormComponentContributorContext, IFormComponent)
-     */
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-        super.renderContribution(writer, cycle, context, field);
-        
-        if (_trim) {
-            JSONObject profile = context.getProfile();
-            
-            accumulateProperty(profile, ValidationConstants.TRIM, field.getClientId());
-        }
-    }
-
-    public boolean isTrim()
-
-    {
-        return _trim;
-    }
-
-    public void setTrim(boolean trim)
-    {
-        _trim = trim;
-    }
-
-    public String getMessage()
-    {
-        return _message;
-    }
-
-    public void setMessage(String message)
-    {
-        _message = message;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/BigDecimalTranslator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/BigDecimalTranslator.java
deleted file mode 100644
index 8d2958c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/BigDecimalTranslator.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.apache.tapestry.form.translator;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-
-import java.math.BigDecimal;
-import java.util.Locale;
-
-/**
- * Translator for {@link java.math.BigDecimal} objects. 
- */
-public class BigDecimalTranslator extends AbstractTranslator {
-
-    public BigDecimalTranslator()
-    {
-    }
-
-    // Needed until HIVEMIND-134 fix is available
-    public BigDecimalTranslator(String initializer)
-    {
-        super(initializer);
-    }
-
-    protected String formatObject(IFormComponent field, Locale locale, Object object)
-    {
-        if (!BigDecimal.class.isInstance(object))
-            throw new ApplicationRuntimeException("BigDecimalTranslator translates values of type BigDecimal, not: " + object.getClass());
-        
-        return object.toString();
-    }
-
-    protected Object parseText(IFormComponent field, ValidationMessages messages, String text)
-            throws ValidatorException
-    {
-        try {
-            
-            return new BigDecimal(text);
-        }
-        catch (NumberFormatException e) {
-            throw new ValidatorException(buildMessage(messages, field, ValidationStrings.INVALID_NUMBER), ValidationConstraint.NUMBER_FORMAT);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java
deleted file mode 100644
index 68f95cb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-
-import java.text.DateFormatSymbols;
-import java.text.Format;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-
-/**
- * A {@link java.text.SimpleDateFormat}-based {@link Translator} implementation.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public class DateTranslator extends FormatTranslator
-{
-    private boolean _lenient=true;
-
-    protected SimpleDateFormat _rfc339Format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
-    
-    public DateTranslator()
-    {
-    }
-    
-    // Needed until HIVEMIND-134 fix is available
-    public DateTranslator(String initializer)
-    {
-        PropertyUtils.configureProperties(this, initializer);
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.translator.FormatTranslator#defaultPattern()
-     */
-    protected String defaultPattern()
-    {
-        return "MM/dd/yyyy";
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.translator.FormatTranslator#getFormat(java.util.Locale)
-     */
-    protected Format getFormat(Locale locale)
-    {
-        return getDateFormat(locale);
-    }
-
-    /**
-     * Get the RFC339 equivalent for the given object.
-     *
-     * @param input The object to be formatted.
-     * 
-     * @return A string value compliant with rfc339 internet time.
-     */
-    public String formatRfc3339(Object input)
-    {
-        return _rfc339Format.format(input);
-    }
-
-    public SimpleDateFormat getDateFormat(Locale locale)
-    {
-        SimpleDateFormat ret = new SimpleDateFormat(getPattern(), new DateFormatSymbols(locale));
-        ret.setLenient(_lenient);
-        
-        return ret;
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.translator.FormatTranslator#getMessageKey()
-     */
-    protected String getMessageKey()
-    {
-        return ValidationStrings.INVALID_DATE;
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale,
-     *      java.lang.String)
-     */
-    protected Object[] getMessageParameters(Locale locale, String label)
-    {
-        String pattern = getDateFormat(locale).toLocalizedPattern().toUpperCase(locale);
-        
-        return new Object[] { label, pattern };
-    }
-    
-    /**
-     * 
-     * {@inheritDoc}
-     */
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-        super.renderContribution(writer, cycle, context, field);
-        
-        String message = buildMessage(context, field, getMessageKey());
-        
-        JSONObject profile = context.getProfile();
-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
-        }
-        
-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
-        
-        context.addInitializationScript(field, "dojo.require(\"tapestry.form.datetime\");");
-        
-        accumulateProperty(cons, field.getClientId(), 
-                new JSONLiteral("[tapestry.form.datetime.isValidDate,{"
-                        + "datePattern:" 
-                        + JSONObject.quote(getPattern())
-                        + (isLenient() ? "" : ",strict:true")
-                        + "}]"));
-        
-        accumulateProfileProperty(field, profile, ValidationConstants.CONSTRAINTS, message);
-    }
-    
-    /**
-     * @see org.apache.tapestry.form.translator.FormatTranslator#getConstraint()
-     */
-    protected ValidationConstraint getConstraint()
-    {
-        return ValidationConstraint.DATE_FORMAT;
-    }
-    
-    public void setLenient(boolean value)
-    {
-        _lenient = value;
-    }
-    
-    public boolean isLenient()
-    {
-        return _lenient;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java
deleted file mode 100644
index 70627d0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidatorException;
-
-import java.text.Format;
-import java.text.ParseException;
-import java.util.Locale;
-
-/**
- * Abstract {@link Translator} implementation for {@link java.text.Format}-based translators.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public abstract class FormatTranslator extends AbstractTranslator
-{
-    private String _pattern;
-
-    public FormatTranslator()
-    {
-        _pattern = defaultPattern();
-    }
-
-    //TODO: Needed until HIVEMIND-134 fix is available
-    public FormatTranslator(String initializer)
-    {
-        PropertyUtils.configureProperties(this, initializer);
-        
-        if (HiveMind.isBlank(_pattern))
-        {
-            _pattern = defaultPattern();
-        }
-    }
-    
-    protected abstract String defaultPattern();
-
-    /**
-     * @see org.apache.tapestry.form.translator.AbstractTranslator#formatObject(org.apache.tapestry.form.IFormComponent,
-     *      Locale, java.lang.Object)
-     */
-    protected String formatObject(IFormComponent field, Locale locale, Object object)
-    {
-        // Get a new format each time, because (a) have to account for locale and (b) formatters are
-        // not thread safe.
-
-        Format format = getFormat(locale);
-
-        return format.format(object);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.translator.AbstractTranslator#parseText(org.apache.tapestry.form.IFormComponent,
-     *      ValidationMessages, java.lang.String)
-     */
-    protected Object parseText(IFormComponent field, ValidationMessages messages, String text)
-            throws ValidatorException
-    {
-        Format format = getFormat(messages.getLocale());
-        
-        try
-        {
-            return format.parseObject(text);
-        }
-        catch (ParseException ex)
-        {
-            throw new ValidatorException(buildMessage(messages, field, getMessageKey()),
-                    getConstraint());
-        }
-    }
-
-    protected abstract ValidationConstraint getConstraint();
-
-    protected abstract Format getFormat(Locale locale);
-
-    protected abstract String getMessageKey();
-
-    public String getPattern()
-    {
-        return _pattern;
-    }
-
-    public void setPattern(String pattern)
-    {
-        _pattern = pattern;
-    }
-
-    /**
-     * Gets the pattern encapsulated by this translator, subclasses may optionally use the
-     * passed in {@link Locale} to return patterns specific to that locale.
-     * 
-     * @param locale The locale to use to format the pattern, if applicable.
-     * @return The pattern used to format/parse objects.
-     */
-    public String getPattern(Locale locale)
-    {
-        return _pattern;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
deleted file mode 100644
index a935823..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
+++ /dev/null
@@ -1,180 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.text.Format;
-import java.util.Locale;
-
-/**
- * A {@link java.text.DecimalFormat}-based {@link Translator} implementation.
- *
- * @author Paul Ferraro
- * @since 4.0
- */
-public class NumberTranslator extends FormatTranslator
-{
-    private boolean _omitZero = false;
-
-    public NumberTranslator()
-    {
-    }
-
-    //TODO: Needed until HIVEMIND-134 fix is available
-    public NumberTranslator(String initializer)
-    {
-        PropertyUtils.configureProperties(this, initializer);
-    }
-
-    protected String formatObject(IFormComponent field, Locale locale, Object object)
-    {
-        Number number = (Number) object;
-
-        if (_omitZero)
-        {
-            if (number.doubleValue() == 0)
-                return "";
-        }
-
-        return super.formatObject(field, locale, object);
-    }
-
-    protected Object getValueForEmptyInput()
-    {
-        return _omitZero ? null : new Double(0);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.translator.FormatTranslator#defaultPattern()
-     */
-    protected String defaultPattern()
-    {
-        return "#";
-    }
-
-    /**
-     * @see org.apache.tapestry.form.translator.FormatTranslator#getFormat(java.util.Locale)
-     */
-    protected Format getFormat(Locale locale)
-    {
-        return getDecimalFormat(locale);
-    }
-
-    public DecimalFormat getDecimalFormat(Locale locale)
-    {
-        return new DecimalFormat(getPattern(), new DecimalFormatSymbols(locale));
-    }
-
-    /**
-     * @see org.apache.tapestry.form.translator.FormatTranslator#getMessageKey()
-     */
-    protected String getMessageKey()
-    {
-        return ValidationStrings.INVALID_NUMBER;
-    }
-
-    /**
-     * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale,
-     *      java.lang.String)
-     */
-    protected Object[] getMessageParameters(Locale locale, String label)
-    {
-        String pattern = getDecimalFormat(locale).toLocalizedPattern();
-
-        return new Object[] { label, pattern };
-    }
-
-    /**
-     * @see org.apache.tapestry.form.FormComponentContributor#renderContribution(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle, FormComponentContributorContext,
-     *      org.apache.tapestry.form.IFormComponent)
-     */
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-                                   FormComponentContributorContext context, IFormComponent field)
-    {
-        super.renderContribution(writer, cycle, context, field);
-
-        String message = buildMessage(context, field, getMessageKey());
-
-        JSONObject profile = context.getProfile();
-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
-        }
-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
-
-        context.addInitializationScript(field, "dojo.require(\"dojo.i18n.number\");");
-
-        DecimalFormat format = getDecimalFormat(context.getLocale());
-
-        String grouping = "";
-        if (format.isGroupingUsed()) {
-
-            grouping += ",separator:" + JSONObject.quote(format.getDecimalFormatSymbols().getGroupingSeparator());
-            grouping += ",groupSize:" + format.getGroupingSize();
-        } else {
-
-            grouping += ",separator:\"\"";
-        }
-
-        cons.accumulate(field.getClientId(),
-                        new JSONLiteral("[dojo.i18n.number.isReal,null,{"
-                                        + "places:" + format.getMaximumFractionDigits() + ","
-                                        + "decimal:"
-                                        + JSONObject.quote(format.getDecimalFormatSymbols().getDecimalSeparator())
-                                        + grouping
-                                        + "}]"));
-
-        accumulateProfileProperty(field, profile, ValidationConstants.CONSTRAINTS, message);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.translator.FormatTranslator#getConstraint()
-     */
-    protected ValidationConstraint getConstraint()
-    {
-        return ValidationConstraint.NUMBER_FORMAT;
-    }
-
-    /**
-     * If true (which is the default for the property), then values that are 0 are rendered to an
-     * empty string, not "0" or "0.00". This is useful in most cases where the field is optional; it
-     * allows the field to render blank when no value is present.
-     *
-     * @param omitZero
-     *          Whether or not to omit zero.
-     */
-
-    public void setOmitZero(boolean omitZero)
-    {
-        _omitZero = omitZero;
-    }
-
-    public boolean isOmitZero()
-    {
-        return _omitZero;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/StringTranslator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/StringTranslator.java
deleted file mode 100644
index b34bc7d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/StringTranslator.java
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import java.util.Locale;
-
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-
-/**
- * A trivial {@link Translator} implementation. By default, empty text submissions are interpretted
- * as null.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public class StringTranslator extends AbstractTranslator
-{
-
-    private String _empty = null;
-
-    public StringTranslator()
-    {
-    }
-
-    // Needed until HIVEMIND-134 fix is available
-
-    public StringTranslator(String initializer)
-    {
-        PropertyUtils.configureProperties(this, initializer);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.translator.AbstractTranslator#parseText(org.apache.tapestry.form.IFormComponent,
-     *      ValidationMessages, java.lang.String)
-     */
-    protected Object parseText(IFormComponent field, ValidationMessages messages, String text)
-    {
-        return text;
-    }
-
-    /**
-     * @see org.apache.tapestry.form.translator.AbstractTranslator#formatObject(org.apache.tapestry.form.IFormComponent,
-     *      Locale, java.lang.Object)
-     */
-    protected String formatObject(IFormComponent field, Locale locale, Object object)
-    {
-        return object.toString();
-    }
-
-    public Object getValueForEmptyInput()
-    {
-        return _empty;
-    }
-
-    public void setEmpty(String empty)
-    {
-        _empty = empty;
-    }
-
-    public String getEmpty()
-    {
-        return _empty;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/Translator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/Translator.java
deleted file mode 100644
index 33ff6b8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/Translator.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import java.util.Locale;
-
-import org.apache.tapestry.form.FormComponentContributor;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidatableField;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Interface used by {@link ValidatableField}s to both format an object as text and translate
- * submitted text into an appropriate object for a given field.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public interface Translator extends FormComponentContributor
-{
-    /**
-     * Invoked during rendering to format an object (which may be null) into a text value (which
-     * should not be null) appropriate for the specified field.
-     * @param locale TODO
-     */
-    String format(IFormComponent field, Locale locale, Object object);
-
-    /**
-     * Invoked during rewind to parse a submitted input value into an object suitable for the
-     * specified component.
-     * @param messages TODO
-     * 
-     * @return the parsed object
-     * @throws ValidatorException
-     *             if the specified text could not be parsed into an object.
-     */
-    Object parse(IFormComponent field, ValidationMessages messages, String value) throws ValidatorException;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/TranslatorBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/TranslatorBinding.java
deleted file mode 100644
index 1e88318..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/TranslatorBinding.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.binding.AbstractBinding;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * Implementation of {@link org.apache.tapestry.IBinding} that wraps around a
- * {@link org.apache.tapestry.form.translator.Translator}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class TranslatorBinding extends AbstractBinding
-{
-    private final Translator _translator;
-
-    public TranslatorBinding(String description, ValueConverter valueConverter, Location location,
-            Translator translator)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(translator, "translator");
-
-        _translator = translator;
-    }
-
-    /**
-     * Returns the translator.
-     */
-
-    public Object getObject()
-    {
-        return _translator;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/TranslatorBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/TranslatorBindingFactory.java
deleted file mode 100644
index 723f424..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/TranslatorBindingFactory.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.lib.BeanFactory;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.AbstractBindingFactory;
-
-/**
- * Uses the tapestry.form.translator.TranslatorBeanFactory service to obtain configured
- * {@link org.apache.tapestry.form.translator.Translator} instances that are then wrapped as
- * {@link org.apache.tapestry.form.translator.TranslatorBinding}s.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class TranslatorBindingFactory extends AbstractBindingFactory
-{
-    private BeanFactory _translatorBeanFactory;
-
-    public IBinding createBinding(IComponent root, String bindingDescription, String expression,
-            Location location)
-    {
-        try
-        {
-            Translator translator = (Translator) _translatorBeanFactory.get(expression);
-
-            return new TranslatorBinding(bindingDescription, getValueConverter(), location,
-                    translator);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), location, ex);
-        }
-    }
-
-    public void setTranslatorBeanFactory(BeanFactory translatorBeanFactory)
-    {
-        _translatorBeanFactory = translatorBeanFactory;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/package.html
deleted file mode 100644
index df7cf29..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/translator/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-Defines translator bindings used primarily in form component input translations.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java
deleted file mode 100644
index 7ad49b6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/AbstractValidatorWrapper.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.form.validator;

-

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.form.FormComponentContributorContext;

-import org.apache.tapestry.form.IFormComponent;

-import org.apache.tapestry.form.ValidationMessages;

-import org.apache.tapestry.valid.ValidatorException;

-

-/**

- * Abstract implementation of {@link org.apache.tapestry.form.validator.Validator} that delegates to

- * some other object.

- * 

- * @author Howard Lewis Ship

- * @since 4.0

- */

-public abstract class AbstractValidatorWrapper implements Validator

-{

-    protected abstract Validator getDelegate();

-

-    public void validate(IFormComponent field, ValidationMessages messages, Object object)

-            throws ValidatorException

-    {

-        getDelegate().validate(field, messages, object);

-    }

-

-    public boolean getAcceptsNull()

-    {

-        return getDelegate().getAcceptsNull();

-    }

-

-    public boolean isRequired()

-    {

-        return getDelegate().isRequired();

-    }

-

-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,

-            FormComponentContributorContext context, IFormComponent field)

-    {

-        getDelegate().renderContribution(writer, cycle, context, field);

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/BaseValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/BaseValidator.java
deleted file mode 100644
index db5210a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/BaseValidator.java
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.TranslatedField;
-import org.apache.tapestry.form.translator.Translator;
-import org.apache.tapestry.json.JSONObject;
-
-/**
- * Abstract implementation of {@link org.apache.tapestry.form.validator.Validator}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-public abstract class BaseValidator implements Validator
-{
-    private String _message;
-
-    public BaseValidator()
-    {
-    }
-
-    public BaseValidator(String initializer)
-    {
-        PropertyUtils.configureProperties(this, initializer);
-    }
-    
-    public String getMessage()
-    {
-        return _message;
-    }
-
-    public void setMessage(String message)
-    {
-        _message = message;
-    }
-
-    /**
-     * Returns false.
-     */
-
-    public boolean getAcceptsNull()
-    {
-        return false;
-    }
-
-    /**
-     * Does nothing.
-     */
-
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-    }
-
-    /**
-     * Returns false. Subclasses may override.
-     */
-
-    public boolean isRequired()
-    {
-        return false;
-    }
-    
-    /**
-     * Utility method to store a field specific profile property which can later
-     * be used by client side validation. 
-     * 
-     * @param field
-     *          The field to store the property for, will key off of {@link IFormComponent#getClientId()}.
-     * @param profile
-     *          The profile for the form.
-     * @param key
-     *          The property key to store.
-     * @param property
-     *          The property to store.
-     */
-    public void accumulateProfileProperty(IFormComponent field, JSONObject profile, 
-            String key, Object property)
-    {
-        if (!profile.has(field.getClientId())) 
-            profile.put(field.getClientId(), new JSONObject());
-        
-        JSONObject fieldProps = profile.getJSONObject(field.getClientId());
-        
-        accumulateProperty(fieldProps, key, property);
-    }
-    
-    /**
-     * Utility used to append onto an existing property represented as an
-     * object array. 
-     * @param profile
-     * @param key
-     * @param value
-     */
-    public void accumulateProperty(JSONObject profile, String key, Object value)
-    {
-        profile.accumulate(key, value);
-    }
-    
-    /**
-     * Used to grab the corresponding {@link Translator} for 
-     * the field, if one exists.
-     * @param field
-     * @return The translator, or null if the required translator type 
-     *          doesn't exist.
-     */
-    public Translator getFieldTranslator(IFormComponent field, Class clazz)
-    {
-        if (TranslatedField.class.isAssignableFrom(field.getClass())) {
-            Translator trans = ((TranslatedField)field).getTranslator();
-            if (clazz.isInstance(trans)) {
-                return trans;
-            }
-        }
-        
-        return null;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java
deleted file mode 100644
index 0c53e71..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/BeanValidatorWrapper.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.form.validator;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.util.Defense;

-import org.apache.tapestry.IComponent;

-

-/**

- * Implementation of {@link org.apache.tapestry.form.validator.Validator} that delegates to a

- * managed bean obtained from a component.

- * 

- * @author Howard Lewis Ship

- * @since 4.0

- */

-public class BeanValidatorWrapper extends AbstractValidatorWrapper

-{

-    private final IComponent _component;

-

-    private final String _name;

-

-    public BeanValidatorWrapper(IComponent component, String name)

-    {

-        Defense.notNull(component, "component");

-        Defense.notNull(name, "name");

-

-        _component = component;

-        _name = name;

-    }

-

-    protected Validator getDelegate()

-    {

-        Object bean = _component.getBeans().getBean(_name);

-

-        if (bean instanceof Validator)

-            return (Validator) bean;

-

-        throw new ApplicationRuntimeException(ValidatorMessages.beanNotValidator(_name), bean,

-                null, null);

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Email.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Email.java
deleted file mode 100644
index 0b4318b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Email.java
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.util.RegexpMatcher;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Validates that the user input, a string, is an email address (by checking it against a regular
- * expression).
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class Email extends BaseValidator
-{
-    public static final String PATTERN = "^[A-Za-z0-9]+([-_\\.]*[A-Za-z0-9]+)*@[A-Za-z0-9]+([-_\\.]*[A-Za-z0-9]+)*(\\.[_A-Za-z]{2,6})$";
-    
-    // TODO: Possible thread safety issue if the validator
-    // is shared across threads, because the matcher
-    // will be too.
-    
-    private RegexpMatcher _matcher = new RegexpMatcher();
-    
-    public Email()
-    {
-    }
-    
-    public Email(String initializer)
-    {
-        super(initializer);
-    }
-    
-    public void validate(IFormComponent field, ValidationMessages messages, Object object)
-            throws ValidatorException
-    {
-        String input = (String) object;
-
-        if (!_matcher.matches(PATTERN, input))
-            throw new ValidatorException(buildMessage(messages, field),
-                    ValidationConstraint.EMAIL_FORMAT);
-    }
-
-    private String buildMessage(ValidationMessages messages, IFormComponent field)
-    {
-        return messages.formatValidationMessage(
-                getMessage(),
-                ValidationStrings.INVALID_EMAIL,
-                new Object[]
-                { field.getDisplayName() });
-    }
-    
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-        context.addInitializationScript(field, "dojo.require(\"dojo.validate.web\");");
-        
-        JSONObject profile = context.getProfile();
-        
-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
-        }
-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
-        
-        accumulateProperty(cons, field.getClientId(),
-                new JSONLiteral("[dojo.validate.isEmailAddress,false,true]"));
-        
-        accumulateProfileProperty(field, profile, 
-                ValidationConstants.CONSTRAINTS, buildMessage(context, field));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Identity.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Identity.java
deleted file mode 100644
index 8cccd15..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Identity.java
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2007 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.form.validator;

-

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.form.FormComponentContributorContext;

-import org.apache.tapestry.form.IFormComponent;

-import org.apache.tapestry.form.ValidationMessages;

-import org.apache.tapestry.json.JSONLiteral;

-import org.apache.tapestry.json.JSONObject;

-import org.apache.tapestry.valid.ValidationConstants;

-import org.apache.tapestry.valid.ValidationConstraint;

-import org.apache.tapestry.valid.ValidationStrings;

-import org.apache.tapestry.valid.ValidatorException;

-

-/**

- * Validates that the input value is the same as the value of another field.

- * This validator can also work in 'differ' mode.

- * <p/>

- * Apply this validator to the second field in question and define the name

- * of the component against which to compare the current value.

- *

- * @since 4.1.2

- */

-public class Identity extends BaseValidator {

-

-    private String _fieldName;

-    private int _matchType;

-

-    private static final int DIFFER = 0;

-    private static final int MATCH = 1;

-

-    public Identity()

-    {

-        super();

-    }

-

-    public Identity(String initializer)

-    {

-        super(initializer);

-    }

-

-    public String toString(IFormComponent field, Object value)

-    {

-        if (value == null)

-            return null;

-

-        return value.toString();

-    }

-

-    public void validate(IFormComponent field, ValidationMessages messages, Object object)

-            throws ValidatorException

-    {

-        IFormComponent referent = (IFormComponent) field.getContainer().getComponent(_fieldName);

-        Object referentValue = referent.getBinding("value").getObject();

-

-        //TODO: if component is null treat _fieldName as an ognl expression

-        boolean notEq = notEqual(referentValue, object);

-

-        if (_matchType == MATCH ? notEq : !notEq)

-            throw new ValidatorException(buildIdentityMessage(messages, field, referent),

-                    ValidationConstraint.CONSISTENCY);

-    }

-

-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,

-                                   FormComponentContributorContext context, IFormComponent field)

-    {

-        if (field.isDisabled())

-            return;

-

-        IFormComponent referent = (IFormComponent) field.getContainer().getComponent(_fieldName);

-

-        JSONObject profile = context.getProfile();

-

-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {

-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());

-        }

-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);

-

-        String func = (_matchType == MATCH) ?

-                "tapestry.form.validation.isEqual" :

-                "tapestry.form.validation.isNotEqual";

-

-        accumulateProperty(cons, field.getClientId(),

-                new JSONLiteral("[" + func + ",\""

-                                + referent.getClientId() + "\"]"));

-        // could define and use a new ValidationConstants.CONFIRM here to apply to

-        // the profile, but it doesn't support differ.

-        accumulateProfileProperty(field, profile,

-                ValidationConstants.CONSTRAINTS, buildIdentityMessage(context, field, referent));

-    }

-

-    public String getMatch()

-    {

-        return _fieldName;

-    }

-

-    public void setMatch(String field)

-    {

-        _fieldName = field;

-        _matchType = MATCH;

-

-    }

-

-    public String getDiffer()

-    {

-        return _fieldName;

-    }

-

-    public void setDiffer(String field)

-    {

-        _fieldName = field;

-        _matchType = DIFFER;

-    }

-    

-    protected String buildIdentityMessage(ValidationMessages messages, IFormComponent field, IFormComponent referent)

-    {

-        Object[] parameters = new Object[]{

-                field.getDisplayName(), new Integer(_matchType), referent.getDisplayName()

-        };

-        

-        return messages.formatValidationMessage(getMessage(),

-                ValidationStrings.INVALID_FIELD_EQUALITY, parameters);

-    }

-

-    private boolean notEqual(Object o1, Object o2)

-    {

-        if (o1 == null && o2 == null)

-            return false;

-        if (o1 == null || o2 == null)

-            return true;

-        

-        return !o1.equals(o2);

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Max.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Max.java
deleted file mode 100644
index 41da87d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Max.java
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.form.translator.NumberTranslator;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.util.Locale;
-
-/**
- * Validates that the input value is not larger than a particular maximum value.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class Max extends BaseValidator
-{
-    private double _max;
-
-    public Max()
-    {
-    }
-
-    public Max(String initializer)
-    {
-        super(initializer);
-    }
-    
-    /**
-     * Does comparison based on the {@link Number#doubleValue()}.
-     */
-
-    public void validate(IFormComponent field, ValidationMessages messages, Object object)
-            throws ValidatorException
-    {
-        Number value = (Number) object;
-
-        if (value.doubleValue() > _max)
-            throw new ValidatorException(buildMessage(messages, field),
-                    ValidationConstraint.TOO_LARGE);
-    }
-
-    private String getStringValue(Locale locale, IFormComponent field)
-    {
-        String ret = null;
-        NumberTranslator translator = (NumberTranslator)super.getFieldTranslator(field, NumberTranslator.class);
-
-        if (translator != null)
-            ret = translator.format(field, locale, new Double(_max));
-        else
-            ret = String.valueOf(_max);
-
-        return ret;
-    }
-
-    private String buildMessage(ValidationMessages messages, IFormComponent field)
-    {
-        return messages.formatValidationMessage(
-                getMessage(),
-                ValidationStrings.VALUE_TOO_LARGE,
-                new Object[]
-                        { field.getDisplayName(), getStringValue(messages.getLocale(), field) });
-    }
-
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-        JSONObject profile = context.getProfile();
-        
-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
-        }
-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
-
-        context.addInitializationScript(field, "dojo.require(\"dojo.i18n.number\");");
-
-        String maxString = getStringValue(context.getLocale(), field);
-        String grouping = "";
-
-        DecimalFormatSymbols symbols = null;
-        NumberTranslator translator = (NumberTranslator)super.getFieldTranslator(field, NumberTranslator.class);
-
-        if (translator != null) {
-            DecimalFormat format = translator.getDecimalFormat(context.getLocale());
-
-            if (format.isGroupingUsed()) {
-
-                grouping += ",separator:" + JSONObject.quote(format.getDecimalFormatSymbols().getGroupingSeparator());
-                grouping += ",groupSize:" + format.getGroupingSize();
-            } else {
-
-                grouping += ",separator:\"\"";
-            }
-
-            symbols = format.getDecimalFormatSymbols();
-        } else {
-
-            symbols = new DecimalFormatSymbols(context.getLocale());
-        }
-
-        accumulateProperty(cons, field.getClientId(),
-                           new JSONLiteral("[tapestry.form.validation.lessThanOrEqual,"
-                                           + JSONObject.quote(maxString)
-                                           + ",{"
-                                           + "decimal:" + JSONObject.quote(symbols.getDecimalSeparator())
-                                           + grouping
-                                           + "}]"));
-        
-        accumulateProfileProperty(field, profile, ValidationConstants.CONSTRAINTS, buildMessage(context, field));
-    }
-
-    public void setMax(double max)
-    {
-        _max = max;
-    }
-
-    public double getMax()
-    {
-        return _max;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MaxDate.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MaxDate.java
deleted file mode 100644
index 74ff402..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MaxDate.java
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import java.util.Date;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.form.translator.DateTranslator;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Validates that the object, a Date, is not after a set maximum.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class MaxDate extends BaseValidator
-{
-    private Date _maxDate;
-
-    public MaxDate()
-    {
-    }
-
-    public MaxDate(String initializer)
-    {
-        super(initializer);
-    }
-
-    public void validate(IFormComponent field, ValidationMessages messages, Object object)
-            throws ValidatorException
-    {
-        Date date = (Date) object;
-        DateTranslator translator = (DateTranslator) getFieldTranslator(field, DateTranslator.class);
-        
-        if (date.after(_maxDate))
-            throw new ValidatorException(buildMessage(messages, field, translator),
-                    ValidationConstraint.TOO_LARGE);
-        
-    }
-    
-    private String buildMessage(ValidationMessages messages, IFormComponent field, 
-            DateTranslator translator)
-    {
-        return messages.formatValidationMessage(
-                getMessage(),
-                ValidationStrings.DATE_TOO_LATE,
-                new Object[]
-                { field.getDisplayName(), 
-                    (translator != null) ? 
-                            translator.format(field, messages.getLocale(), _maxDate)
-                            : _maxDate.toString()});
-    }
-    
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-        // TODO: This is a little hacky, but validators need to be able to cooperate
-        // with translators during client side validation as well
-        DateTranslator translator = (DateTranslator) getFieldTranslator(field, DateTranslator.class);
-        if (translator == null)
-            return;
-        
-        JSONObject profile = context.getProfile();
-        
-        context.addInitializationScript(field, "dojo.require(\"tapestry.form.datetime\");");
-        
-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
-        }
-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
-        
-        accumulateProperty(cons, field.getClientId(), 
-                new JSONLiteral("[tapestry.form.datetime.isValidDate,{"
-                        + "max:" 
-                        + JSONObject.quote(translator.format(field, context.getLocale(), _maxDate))
-                        + ","
-                        + "datePattern:" 
-                        + JSONObject.quote(translator.getPattern())
-                        + (translator.isLenient() ? "" : ",strict:true")
-                        + "}]"));
-        
-        accumulateProfileProperty(field, profile, 
-                ValidationConstants.CONSTRAINTS, buildMessage(context, field, translator));
-    }
-    
-    public void setMaxDate(Date minDate)
-    {
-        _maxDate = minDate;
-    }
-
-    public Date getMaxDate()
-    {
-        return _maxDate;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MaxLength.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MaxLength.java
deleted file mode 100644
index 04902bc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MaxLength.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Validator that ensures a string value does not exceed a maximum length.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class MaxLength extends BaseValidator
-{
-    private int _maxLength;
-
-    public MaxLength()
-    {
-
-    }
-
-    public MaxLength(String initializer)
-    {
-        super(initializer);
-    }
-
-    public void setMaxLength(int maxLength)
-    {
-        _maxLength = maxLength;
-    }
-
-    public int getMaxLength()
-    {
-        return _maxLength;
-    }
-    
-    public void validate(IFormComponent field, ValidationMessages messages, Object object)
-            throws ValidatorException
-    {
-        String string = (String) object;
-
-        if (string.length() > _maxLength)
-            throw new ValidatorException(buildMessage(messages, field),
-                    ValidationConstraint.MAXIMUM_WIDTH);
-    }
-
-    protected String buildMessage(ValidationMessages messages, IFormComponent field)
-    {
-        return messages.formatValidationMessage(
-                getMessage(),
-                ValidationStrings.VALUE_TOO_LONG,
-                new Object[]
-                { new Integer(_maxLength), field.getDisplayName() });
-    }
-
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-        JSONObject profile = context.getProfile();
-        
-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
-        }
-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
-        
-        accumulateProperty(cons, field.getClientId(), 
-                new JSONLiteral("[dojo.validate.isText,{"
-                        + "maxlength:" + _maxLength + "}]"));
-        
-        accumulateProfileProperty(field, profile, 
-                ValidationConstants.CONSTRAINTS, buildMessage(context, field));
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Min.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Min.java
deleted file mode 100644
index 737b2fb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Min.java
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.form.translator.NumberTranslator;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.util.Locale;
-
-/**
- * Expects the object to be a number, and checks that the value not smaller than a specified value.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class Min extends BaseValidator
-{
-    private double _min;
-
-    public Min()
-    {
-    }
-
-    public Min(String initializer)
-    {
-        super(initializer);
-    }
-
-    /**
-     * Does comparison based on the {@link Number#doubleValue()}.
-     */
-
-    public void validate(IFormComponent field, ValidationMessages messages, Object object)
-            throws ValidatorException
-    {
-        Number value = (Number) object;
-
-        if (_min > value.doubleValue())
-            throw new ValidatorException(buildMessage(messages, field), ValidationConstraint.TOO_SMALL);
-    }
-
-    private String getStringValue(Locale locale, IFormComponent field)
-    {
-        String ret = null;
-        NumberTranslator translator = (NumberTranslator)super.getFieldTranslator(field, NumberTranslator.class);
-
-        if (translator != null)
-            ret = translator.format(field, locale, new Double(_min));
-        else
-            ret = String.valueOf(_min);
-
-        return ret;
-    }
-
-    private String buildMessage(ValidationMessages messages, IFormComponent field)
-    {
-        return messages.formatValidationMessage(
-                getMessage(),
-                ValidationStrings.VALUE_TOO_SMALL,
-                new Object[] {
-                        field.getDisplayName(), getStringValue(messages.getLocale(), field)
-                });
-    }
-
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-                                   FormComponentContributorContext context, IFormComponent field)
-    {
-        JSONObject profile = context.getProfile();
-
-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
-        }
-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
-
-        context.addInitializationScript(field, "dojo.require(\"dojo.i18n.number\");");
-
-        String minString = getStringValue(context.getLocale(), field);
-        String grouping = "";
-
-        DecimalFormatSymbols symbols = null;
-        NumberTranslator translator = (NumberTranslator)super.getFieldTranslator(field, NumberTranslator.class);
-
-        if (translator != null) {
-            DecimalFormat format = translator.getDecimalFormat(context.getLocale());
-
-            if (format.isGroupingUsed()) {
-
-                grouping += ",separator:" + JSONObject.quote(format.getDecimalFormatSymbols().getGroupingSeparator());
-                grouping += ",groupSize:" + format.getGroupingSize();
-            } else {
-
-                grouping += ",separator:\"\"";
-            }
-            
-            symbols = format.getDecimalFormatSymbols();
-        } else {
-
-            symbols = new DecimalFormatSymbols(context.getLocale());
-        }
-
-        accumulateProperty(cons, field.getClientId(),
-                           new JSONLiteral("[tapestry.form.validation.greaterThanOrEqual,"
-                                           + JSONObject.quote(minString)
-                                           + ",{"
-                                           + "decimal:" + JSONObject.quote(symbols.getDecimalSeparator())
-                                           + grouping
-                                           + "}]"));
-
-        accumulateProfileProperty(field, profile, ValidationConstants.CONSTRAINTS, buildMessage(context, field));
-    }
-
-    public void setMin(double min)
-    {
-        _min = min;
-    }
-
-    public double getMin()
-    {
-        return _min;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MinDate.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MinDate.java
deleted file mode 100644
index 10407e3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MinDate.java
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import java.util.Date;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.form.translator.DateTranslator;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Expects the value to be a {@link Date}, and constrains the date to follow a particular date.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-
-public class MinDate extends BaseValidator
-{
-    private Date _minDate;
-
-    public MinDate()
-    {
-    }
-
-    public MinDate(String initializer)
-    {
-        super(initializer);
-    }
-    
-    public void setMinDate(Date minDate)
-    {
-        _minDate = minDate;
-    }
-    
-    public Date getMinDate()
-    {
-        return _minDate;
-    }
-    
-    public void validate(IFormComponent field, ValidationMessages messages, Object object)
-    throws ValidatorException
-    {
-        Date date = (Date) object;
-        DateTranslator translator = (DateTranslator) getFieldTranslator(field, DateTranslator.class);
-        
-        if (date.before(_minDate))
-            throw new ValidatorException(buildMessage(messages, field, translator), ValidationConstraint.TOO_SMALL);
-
-    }
-    
-    private String buildMessage(ValidationMessages messages, IFormComponent field, 
-            DateTranslator translator)
-    {
-        return messages.formatValidationMessage(
-                getMessage(),
-                ValidationStrings.DATE_TOO_EARLY,
-                new Object[] { field.getDisplayName(), 
-                    (translator != null) ? 
-                            translator.format(field, messages.getLocale(), _minDate) : _minDate.toString()});
-    }
-    
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-        // TODO: This is a little hacky, but validators need to be able to cooperate
-        // with translators during client side validation as well
-        DateTranslator translator = (DateTranslator) getFieldTranslator(field, DateTranslator.class);
-        if (translator == null)
-            return;
-        
-        JSONObject profile = context.getProfile();
-        
-        context.addInitializationScript(field, "dojo.require(\"tapestry.form.datetime\");");
-        
-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
-        }
-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
-        
-        accumulateProperty(cons, field.getClientId(), 
-                new JSONLiteral("[tapestry.form.datetime.isValidDate,{"
-                        + "min:" 
-                        + JSONObject.quote(translator.format(field, context.getLocale(), _minDate))
-                        + ","
-                        + "datePattern:" 
-                        + JSONObject.quote(translator.getPattern())
-                        + (translator.isLenient() ? "" : ",strict:true")
-                        + "}]"));
-        
-        accumulateProfileProperty(field, profile, 
-                ValidationConstants.CONSTRAINTS, buildMessage(context, field, translator));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MinLength.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MinLength.java
deleted file mode 100644
index f27a640..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/MinLength.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Validates that the value, a string, is of a minimum length.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class MinLength extends BaseValidator
-{
-    private int _minLength;
-
-    public MinLength()
-    {
-    }
-
-    public MinLength(String initializer)
-    {
-        super(initializer);
-    }
-
-    public void setMinLength(int minLength)
-    {
-        _minLength = minLength;
-    }
-
-    public int getMinLength()
-    {
-        return _minLength;
-    }
-
-    public void validate(IFormComponent field, ValidationMessages messages, Object object)
-            throws ValidatorException
-    {
-        String string = (String) object;
-
-        if (string.length() < _minLength)
-            throw new ValidatorException(buildMessage(messages, field),
-                    ValidationConstraint.MINIMUM_WIDTH);
-    }
-
-    protected String buildMessage(ValidationMessages messages, IFormComponent field)
-    {
-        return messages.formatValidationMessage(
-                getMessage(),
-                ValidationStrings.VALUE_TOO_SHORT,
-                new Object[]
-                { new Integer(_minLength), field.getDisplayName() });
-    }
-
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-        JSONObject profile = context.getProfile();
-        
-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
-        }
-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
-        
-        accumulateProperty(cons, field.getClientId(), 
-                new JSONLiteral("[dojo.validate.isText,{"
-                        + "minlength:" + _minLength + "}]"));
-        
-        accumulateProfileProperty(field, profile, 
-                ValidationConstants.CONSTRAINTS, buildMessage(context, field));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Pattern.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Pattern.java
deleted file mode 100644
index 3f763be..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Pattern.java
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONLiteral;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.util.RegexpMatcher;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Validates a user input string against a regular expression pattern.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.util.RegexpMatcher
- */
-public class Pattern extends BaseValidator
-{
-    // It is expectd that each Pattern instance will be used by a single component instance,
-    // and therefore be restricted to a single thread.
-    
-    private RegexpMatcher _matcher = new RegexpMatcher();
-
-    private String _pattern;
-
-    public Pattern()
-    {
-    }
-
-    public Pattern(String initializer)
-    {
-        super(initializer);
-    }
-
-    public void validate(IFormComponent field, ValidationMessages messages, Object object)
-            throws ValidatorException
-    {
-        String input = (String) object;
-
-        if (!_matcher.matches(_pattern, input))
-            throw new ValidatorException(buildMessage(messages, field),
-                    ValidationConstraint.PATTERN_MISMATCH);
-    }
-
-    private String buildMessage(ValidationMessages messages, IFormComponent field)
-    {
-        return messages.formatValidationMessage(
-                getMessage(),
-                ValidationStrings.PATTERN_MISMATCH,
-                new Object[]
-                {field.getDisplayName(), _pattern });
-    }
-    
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-        String pattern = _matcher.getEscapedPatternString(_pattern);
-        
-        JSONObject profile = context.getProfile();
-        
-        if (!profile.has(ValidationConstants.CONSTRAINTS)) {
-            profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
-        }
-        JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
-        
-        accumulateProperty(cons, field.getClientId(), 
-                new JSONLiteral("[tapestry.form.validation.isValidPattern,\""
-                        + pattern + "\"]"));
-        
-        accumulateProfileProperty(field, profile, 
-                ValidationConstants.CONSTRAINTS, buildMessage(context, field));
-    }
-
-    public void setPattern(String pattern)
-    {
-        _pattern = pattern;
-    }
-
-    public String getPattern()
-    {
-        return _pattern;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Required.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Required.java
deleted file mode 100644
index 97ad9c2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Required.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import java.util.Collection;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.multipart.UploadPart;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * {@link org.apache.tapestry.form.validator.Validator} that ensures a value was supplied.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class Required extends BaseValidator
-{
-    public Required()
-    {
-    }
-
-    public Required(String initializer)
-    {
-        super(initializer);
-    }
-
-    public boolean getAcceptsNull()
-    {
-        return true;
-    }
-
-    public void validate(IFormComponent field, ValidationMessages messages, Object object)
-            throws ValidatorException
-    {
-        if (field.isDisabled())
-            return;
-        
-        if ((object == null)
-                || (String.class.isInstance(object) && (((String) object).length() == 0))
-                || (Collection.class.isInstance(object) && ((Collection) object).isEmpty())
-                || (UploadPart.class.isInstance(object) && ((UploadPart) object).getSize() < 1))
-        {
-            String message = buildMessage(messages, field);
-            throw new ValidatorException(message, ValidationConstraint.REQUIRED);
-        }
-    }
-    
-    public String buildMessage(ValidationMessages messages, IFormComponent field)
-    {
-        return messages.formatValidationMessage(
-                getMessage(),
-                ValidationStrings.REQUIRED_FIELD,
-                new Object[]
-                { field.getDisplayName() });
-    }
-    
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-        if(field.isDisabled())
-            return;
-        
-        context.registerForFocus(ValidationConstants.REQUIRED_FIELD);
-        
-        JSONObject profile = context.getProfile();
-        
-        accumulateProperty(profile, ValidationConstants.REQUIRED, field.getClientId());
-        
-        accumulateProfileProperty(field, profile, 
-                ValidationConstants.REQUIRED, buildMessage(context, field));
-    }
-
-    /**
-     * Returns true, that's what Required means!
-     */
-    public boolean isRequired()
-    {
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidationStrings_ja.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidationStrings_ja.properties
deleted file mode 100644
index df98631..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidationStrings_ja.properties
+++ /dev/null
@@ -1,49 +0,0 @@
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)

-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-date-too-early = {0} \u306F {1}\u3088\u308A\u5F8C\u306E\u65E5\u4ED8\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059..

-

-date-too-late = {0}\u306F{1}\u3088\u308A\u524D\u306E\u65E5\u4ED8\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059. 

-

-disallowed-protocol = \u8A31\u53EF\u3055\u308C\u3066\u3044\u306A\u3044\u30D7\u30ED\u30C8\u30B3\u30EB - \u30D7\u30ED\u30C8\u30B3\u30EB\u306F{0}\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059.

-

-field-is-required = {0}\u306B\u5024\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044.

-

-### 4.0 ###

-field-too-long = {1}\u306B{0}\u6587\u5B57\u4EE5\u4E0B\u306E\u6587\u5B57\u5217\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044.

-

-field-too-short = {1}\u306B{0}\u6587\u5B57\u4EE5\u4E0B\u306E\u6587\u5B57\u5217\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044.

-

-invalid-date-format = \u306F{0}\u4E0D\u6B63\u306A\u65E5\u4ED8\u5F62\u5F0F\u3067\u3059.\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u306F{1}\u3067\u3059.

-

-invalid-email-format = {0}\u306F\u4E0D\u6B63\u306A\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3067\u3059. \u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306E\u5F62\u5F0F\u306Fuser@hostname\u3067\u3059.

-

-invalid-format = {0}\u306F\u8B58\u5225\u3055\u308C\u306A\u3044\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3067\u3059.

-

-invalid-int-format = {0}\u306F\u6574\u6570\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044..

-

-invalid-numeric-format = {0}\u306F\u6570\u5B57\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044.

-

-invalid-url-format = \u4E0D\u6B63\u306AURL\u3067\u3059.

-

-number-range = {0} must be between {1} and {2}.

-

-number-too-large = {0}\u306F\u5927\u304D\u3059\u304E\u307E\u3059\u3002{1}\u4EE5\u4E0B\u306E\u5024\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044.

-

-number-too-small = {0}\u306F\u5C0F\u3055\u3059\u304E\u307E\u3059\u3002{1}\u4EE5\u4E0A\u306E\u5024\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044.

-

-pattern-not-matched = {0}\u306F\u8981\u6C42\u3055\u308C\u308B\u30D1\u30BF\u30FC\u30F3{1}\u306B\u30DE\u30C3\u30C1\u3057\u307E\u305B\u3093.

-

-regex-mismatch = {0}\u306F\u4E0D\u6B63\u3067\u3059\u3002

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Validator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Validator.java
deleted file mode 100644
index b811956..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/Validator.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.tapestry.form.FormComponentContributor;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * An object that can be "attached" to a {@link org.apache.tapestry.form.IFormComponent} to perform
- * server-side validation ({@link #validate(IFormComponent, ValidationMessages, Object)}) as well
- * as generate cleint-side validation (in the form of JavaScript submit listeners).
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public interface Validator extends FormComponentContributor
-{
-    /**
-     * Invoked to validate input for the field. A
-     * {@link org.apache.tapestry.form.translator.Translator} will have already converted the
-     * submitted user input string into an object.
-     * 
-     * @param field
-     *            the form element component being validated, often used to determine the
-     *            {@link IFormComponent#getDisplayName() user presentable name} for the field, used
-     *            in error messages.
-     * @param messages
-     *            access to the pre-defined validation messages, in the appropriate locale
-     * @param object
-     *            the client-side representation of the field's data. May be null if the client did
-     *            not provide a value for the field (most Validators should check for null and
-     *            perform no check if null).
-     * @throws ValidatorException
-     *             if the object violates the constraint represented by this Validator.
-     */
-
-    void validate(IFormComponent field, ValidationMessages messages, Object object)
-            throws ValidatorException;
-
-    /**
-     * Returns true if this validator accepts null as the object parameter to validate(). When the
-     * object is null, validators that can't accept null are skipped. It is rare for a validator to
-     * return true.
-     */
-
-    boolean getAcceptsNull();
-
-    /**
-     * Returns true if this field is required. Returns false otherwise.
-     */
-
-    boolean isRequired();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorContribution.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorContribution.java
deleted file mode 100644
index a6df6ce..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorContribution.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-/**
- * Contains information contributed to the tapestry.form.validator.Validators configuration point.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ValidatorContribution
-{
-    private boolean _configurable = true;
-
-    private String _name;
-
-    private Class _validatorClass;
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public Class getValidatorClass()
-    {
-        return _validatorClass;
-    }
-
-    public boolean isConfigurable()
-    {
-        return _configurable;
-    }
-
-    public void setConfigurable(boolean configurable)
-    {
-        _configurable = configurable;
-    }
-
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    public void setValidatorClass(Class validatorClass)
-    {
-        _validatorClass = validatorClass;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorFactory.java
deleted file mode 100644
index 762a777..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorFactory.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import java.util.List;
-
-import org.apache.tapestry.IComponent;
-
-/**
- * Constructs {@link org.apache.tapestry.form.validator.Validator} instances from a specification. A
- * specification is a comma-seperated list of entries. Each entry is in one of the following forms:
- * <ul>
- * <li><em>name</em>
- * <li><em>name</em>=<em>value</em>
- * <li><em>name[<em>message</em>]</em>
- * <li><em>name</em>=<em>value</em>[<em>message</em>]
- * <li>$<em>name</em>
- * </ul>
- * <p>
- * Most validator classes are <em>configurable</em>: they have a property that matches their
- * name. For example, {@link org.apache.tapestry.form.validator.MinDate} (which is named "minDate"
- * has a <code>minDate</code> property. A few validators are not configurable ("required" =>
- * {@link org.apache.tapestry.form.validator.Required}, for example).
- * <p>
- * Validators are expected to have a public no-args constructor. They are also expected to have a
- * <code>message</code> property which is set from the value in brackets.
- * The message is either a literal string, or may be prefixed with a '%' character, to indicate
- * a localized key, resolved using the component's message catalog.
- * <p>
- * When the name is prefixed with a dollary sign, it indicates a reference to a <em>bean</em>
- * with the given name.
- * <p>
- * A full validator specification might be:
- * <code>required,email[%email-format],minLength=20[Email addresses must be at least 20 characters long.]</code>
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ValidatorFactory
-{
-    /**
-     * Constructs a new (immutable) List of {@link Validator}, or returns a previously constructed
-     * List.
-     * 
-     * @param component
-     *            the component for which the list is being created
-     * @param specification
-     *            a string identifying which validators and their configuration
-     * @return List of {@link Validator} (possibly empty)
-     */
-    List constructValidatorList(IComponent component, String specification);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java
deleted file mode 100644
index 54373ef..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorFactoryImpl.java
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.util.RegexpMatch;
-import org.apache.tapestry.util.RegexpMatcher;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Implementation of the tapestry.form.validator.ValidatorFactory service, which builds and caches
- * validators and lists of validators from a "magic" string specification.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ValidatorFactoryImpl implements ValidatorFactory
-{
-    private static final String PATTERN = "^\\s*(\\$?\\w+)\\s*(=\\s*(((?!,|\\[).)*))?";
-
-    /**
-     * Injected map of validator names to ValidatorContribution.
-     */
-
-    private Map _validators;
-
-    public List constructValidatorList(IComponent component, String specification)
-    {
-        Defense.notNull(component, "component");
-
-        if (HiveMind.isBlank(specification))
-            return Collections.EMPTY_LIST;
-
-        List result = new ArrayList();
-        String chopped = specification;
-
-        RegexpMatcher matcher = new RegexpMatcher();
-
-        while (true)
-        {
-            if (chopped.length() == 0)
-                break;
-
-            if (!result.isEmpty())
-            {
-                if (chopped.charAt(0) != ',')
-                    throw new ApplicationRuntimeException(ValidatorMessages
-                            .badSpecification(specification));
-
-                chopped = chopped.substring(1);
-            }
-
-            RegexpMatch[] matches = matcher.getMatches(PATTERN, chopped);
-
-            if (matches.length != 1)
-                throw new ApplicationRuntimeException(ValidatorMessages.badSpecification(specification));
-
-            RegexpMatch match = matches[0];
-
-            String name = match.getGroup(1);
-            String value = match.getGroup(3);
-            String message = null;
-
-            int length = match.getMatchLength();
-
-            if (chopped.length() > length)
-            {
-                char lastChar = chopped.charAt(length);
-                if (lastChar == ',')
-                    length--;
-                else if (lastChar == '[')
-                {
-                    int messageClose = chopped.indexOf(']', length);
-                    message = chopped.substring(length + 1, messageClose);
-                    length = messageClose;
-                }
-            }
-
-            Validator validator = buildValidator(component, name, value, message);
-
-            result.add(validator);
-
-            if (length >= chopped.length())
-                break;
-
-            chopped = chopped.substring(length + 1);
-
-        }
-
-        return Collections.unmodifiableList(result);
-    }
-
-    private Validator buildValidator(IComponent component, String name, String value, String message)
-    {
-        if (name.startsWith("$"))
-            return extractValidatorBean(component, name, value, message);
-
-        ValidatorContribution vc = (ValidatorContribution) _validators.get(name);
-
-        if (vc == null)
-            throw new ApplicationRuntimeException(ValidatorMessages.unknownValidator(name));
-
-        if (value == null && vc.isConfigurable())
-            throw new ApplicationRuntimeException(ValidatorMessages.needsConfiguration("name"));
-
-        if (value != null && !vc.isConfigurable())
-            throw new ApplicationRuntimeException(ValidatorMessages.notConfigurable(name, value));
-
-        try
-        {
-            Object result = vc.getValidatorClass().newInstance();
-
-            if (vc.isConfigurable())
-                PropertyUtils.smartWrite(result, name, value);
-
-            if (message != null)
-                PropertyUtils.write(result, "message", message);
-
-            return (Validator) result;
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ValidatorMessages.errorInitializingValidator(
-                    name,
-                    vc.getValidatorClass(),
-                    ex), ex);
-        }
-    }
-
-    private Validator extractValidatorBean(IComponent component, String validatorName,
-            String value, String message)
-    {
-        String beanName = validatorName.substring(1);
-
-        if (HiveMind.isNonBlank(value) || HiveMind.isNonBlank(message))
-            throw new ApplicationRuntimeException(ValidatorMessages
-                    .noValueOrMessageForBean(beanName));
-
-        return new BeanValidatorWrapper(component, beanName);
-    }
-
-    public void setValidators(Map validators)
-    {
-        _validators = validators;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorMessages.java
deleted file mode 100644
index cba08b4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorMessages.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * @author Howard Lewis Ship
- * @since 4.0
- */
-final class ValidatorMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(ValidatorMessages.class);
-
-    /* defeat instantiation */
-    private ValidatorMessages() { }
-    
-    static String unknownValidator(String name)
-    {
-        return _formatter.format("unknown-validator", name);
-    }
-
-    static String needsConfiguration(String name)
-    {
-        return _formatter.format("needs-configuration", name);
-    }
-
-    public static String notConfigurable(String name, String value)
-    {
-        return _formatter.format("not-configurable", name, value);
-    }
-
-    public static String errorInitializingValidator(String name, Class validatorClass,
-            Throwable cause)
-    {
-        return _formatter.format(
-                "error-initializing-validator",
-                name,
-                validatorClass.getName(),
-                cause);
-    }
-
-    public static String badSpecification(String specification)
-    {
-        return _formatter.format("bad-specification", specification);
-    }
-
-    public static String noValueOrMessageForBean(String name)
-    {
-        return _formatter.format("no-value-or-message-for-bean", name);
-    }
-
-    public static String beanNotValidator(String name)
-    {
-        return _formatter.format("bean-not-validator", name, Validator.class.getName());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorStrings.properties
deleted file mode 100644
index 59e630d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorStrings.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-unknown-validator=No validator named ''{0}'' has been defined.
-needs-configuration=Validator ''{0}'' must be configured in order to be used. The value is configured by changing ''{0}'' to ''{0}=value''.
-not-configurable=Validator ''{0}'' is not configurable, ''{0}={1}'' should be changed to just ''{0}''.
-error-initializing-validator=Error initializing validator ''{0}'' (class {1}): {2}
-bad-specification=Unable to parse ''{0}'' into a list of validators.
-no-value-or-message-for-bean=Validator ''{0}'' is a reference to a managed bean of the component, and may not have a value or a message override specified.
-bean-not-validator=Bean ''{0}'' does not implement the {1} interface.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorsBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorsBinding.java
deleted file mode 100644
index 2f046cb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorsBinding.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import java.util.List;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.binding.AbstractBinding;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * Binding used to hold a list of {@link org.apache.tapestry.form.validator.Validator}s.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ValidatorsBinding extends AbstractBinding
-{
-    private final List _validators;
-
-    public ValidatorsBinding(String description, ValueConverter valueConverter, Location location,
-            List validators)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(validators, "validator");
-
-        _validators = validators;
-    }
-
-    public Object getObject()
-    {
-        return _validators;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorsBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorsBindingFactory.java
deleted file mode 100644
index 1f0f4eb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/ValidatorsBindingFactory.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.AbstractBindingFactory;
-
-/**
- * 
- * @author unknown
- */
-public class ValidatorsBindingFactory extends AbstractBindingFactory
-{
-    private ValidatorFactory _validatorFactory;
-
-    public void setValidatorFactory(ValidatorFactory validatorFactory)
-    {
-        _validatorFactory = validatorFactory;
-    }
-
-    public IBinding createBinding(IComponent root, String bindingDescription, String expression,
-            Location location)
-    {
-        try
-        {
-            List validators = _validatorFactory.constructValidatorList(root, expression);
-
-            return new ValidatorsBinding(bindingDescription, getValueConverter(), location,
-                    validators);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), null, location, ex);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/package.html
deleted file mode 100644
index edbd200..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/form/validator/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Form validation infrastructure.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/BasePage.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/BasePage.java
deleted file mode 100644
index d3d83a7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/BasePage.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.AbstractPage;
-import org.apache.tapestry.util.ContentType;
-
-/**
- * Base class for HTML pages. Most pages should be able to simply subclass this, adding new
- * properties and methods. An unlikely exception would be a page that was not based on a template.
- * <p>
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class BasePage extends AbstractPage
-{
-    /**
-     * @return "text/html"
-     */
-
-    public ContentType getResponseContentType()
-    {
-        return new ContentType("text/html");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Body.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Body.java
deleted file mode 100644
index 3b80ea5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Body.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.ResponseBuilder;
-
-/**
- * The body of a Tapestry page. This is used since it allows components on the page access to an
- * initialization script (that is written the start, just inside the &lt;body&gt; tag). This is
- * currently used by {@link Rollover}and {@link Script}components. [ <a
- * href="../../../../../ComponentReference/Body.html">Component Reference </a>]
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Body extends AbstractComponent
-{
-    
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IMarkupWriter nested = writer.getNestedWriter();
-
-        renderBody(nested, cycle);
-        
-        getRenderWorker().renderBody(cycle, this);
-        
-        // This is a little tricky, if we didn't call this manually
-        // now the page would never be able to have any javascript related
-        // render workers actually work because the javascript output would
-        // essentially be non writable
-        
-        getRenderWorker().renderComponent(cycle, getPage());
-        
-        // Start the body tag.
-        writer.println();
-        writer.begin(getElement());
-        
-        renderInformalParameters(writer, cycle);
-        
-        renderIdAttribute(writer, cycle);
-        
-        writer.println();
-        
-        // Write the page's scripting. This is included scripts
-        // and dynamic JavaScript.
-        
-        getBuilder().writeBodyScript(writer, cycle);
-        
-        // Close the nested writer, which dumps its buffered content
-        // into its parent.
-        
-        nested.close();
-        
-        // Any initialization should go at the very end of the document
-        // just before the close body tag. Older version of Tapestry
-        // would create a window.onload event handler, but this is better
-        // (it doesn't have to wait for external images to load).
-        
-        getBuilder().writeInitializationScript(writer);
-        
-        writer.end(); // <body>
-    }
-
-    /**
-     * Parameter.
-     */
-    public abstract String getElement();
-    
-    public abstract ResponseBuilder getBuilder();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Body.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Body.jwc
deleted file mode 100644
index 0290bba..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Body.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.html.Body">
-
-  <description>
-  Takes the place of the normal HTML &lt;body&gt; element, providing various
-  forms of support to all components it wraps.
-  </description>
-
-  <parameter name="element" default-value="literal:body">
-  	<description>
-  	Name of element to use, defaults to "body".
-  	</description>
-  </parameter>
-  
-  <inject property="responseBuilder" object="infrastructure:responseBuilder" />
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Describe.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Describe.java
deleted file mode 100644
index 0bba70c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Describe.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.describe.HTMLDescriber;
-
-/**
- * Component that makes use of
- * {@link org.apache.tapestry.describe.HTMLDescriber}to produce HTML output
- * that describes an object.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class Describe extends AbstractComponent
-{
-
-    /**
-     * Parameter object: the object to be described.
-     */
-    public abstract Object getObject();
-
-    /**
-     * Injected service.
-     */
-    public abstract HTMLDescriber getDescriber();
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.isRewinding()) return;
-
-        getDescriber().describeObject(getObject(), writer);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Describe.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Describe.jwc
deleted file mode 100644
index 440945d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Describe.jwc
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-		
-<component-specification class="org.apache.tapestry.html.Describe" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-  
-  <description>
-   Describes an object; breaks apart the object into properties that are formatted
-      as HTML.
-       </description>
-  
-  <parameter name="object" required="true">
-      <description>
-          The object to be described.
-      </description>
-  </parameter>
-  
-  <inject property="describer" object="infrastructure:HTMLDescriber"/>
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script
deleted file mode 100644
index 34c8a5e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<script>
-<input-symbol key="target" required="yes" />
-<input-symbol key="url" />
-<input-symbol key="events" />
-<input-symbol key="formEvents" />
-    <body>
-        <unique>
-        dojo.require("tapestry.event");
-        </unique>
-    </body>
-    <initialization>
-        <if expression="events">
-            <foreach expression="events" key="event">
-                tapestry.cleanConnect(dojo.byId("${target}"), "${event[0]}", "event${event[1]}");
-                tapestry.event${event[1]}=function(e){
-                    var content={beventname:"${event[0]}"};
-                    tapestry.event.buildEventProperties(e, content, arguments);
-                    if (!content["beventtarget.id"]) content["beventtarget.id"]="${target}";
-                    tapestry.bind("${url}", content);
-                };
-                dojo.event.connect(dojo.byId("${target}"), "${event[0]}", tapestry, "event${event[1]}");
-            </foreach>
-        </if>
-        <if expression="formEvents">
-            <foreach expression="formEvents" key="formEvent">
-                 tapestry.cleanConnect(dojo.byId("${target}"), 
-                                     "${formEvent[0]}", "formEvent${formEvent[4]}");
-                tapestry.formEvent${formEvent[4]}=function(e){
-                    var content={beventname:"${formEvent[0]}"};
-                    tapestry.event.buildEventProperties(e, content, arguments);
-                    if (!content["beventtarget.id"]) content["beventtarget.id"]="${target}";
-                    
-                    <foreach expression="formEvent[1]" key="formName">
-                   var validateState=tapestry.form.forms["${formName}"].validateForm;
-                   var validateForm=${formEvent[3]};
-                   tapestry.form.setFormValidating("${formName}", validateForm);
-                   
-                    <if expression="formEvent[2]">
-                    tapestry.form.submitAsync("${formName}", content);
-                    </if>
-                    <if-not expression="formEvent[2]">
-                    tapestry.form.submit("${formName}");
-                    </if-not>
-                    
-                    tapestry.form.setFormValidating("${formName}", validateState);
-                    </foreach>
-                };
-                dojo.event.connect(dojo.byId("${target}"), "${formEvent[0]}",
-                                   tapestry, "formEvent${formEvent[4]}");
-            </foreach>
-        </if>
-    </initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ExceptionDisplay.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ExceptionDisplay.html
deleted file mode 100644
index a936c12..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ExceptionDisplay.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<html>
-<link rel="stylesheet" type="text/css" href="../pages/Exception.css">
-
-<body>
-
-<span jwcid="$content$">
-<span jwcid="eException">
-	<a jwcid="@Any" href="" class="ognl:(index == (exceptions.length - 1)) ? 'toggle toggleSelected' : 'toggle'" 
-	   onClick="ognl:'return toggleDisplay(\'excdisplay'+index+'\', this)'">[&nbsp;+/-&nbsp;] Exception:</a>
-	   <span jwcid="@Insert" value="ognl:exception.message">A message describing the exception.</span>
-	
-	<table jwcid="@Any" id="ognl:'excdisplay' + index" class="exception-display toggleContent">
-		<tr class="exception-name">
-			<td colspan="2"><span jwcid="insertClass">some.exception.Class</span></td>
-		</tr>
-		
-		<tr class="exception-message">
-			<td colspan="2"><span jwcid="insertMessage">A message describing the exception.</span></td>
-		</tr>
-		
-		<tr jwcid="eProperty">
-			<th><span jwcid="insertPropertyName">Property Name</span>:</th>
-			<td><span jwcid="insertPropertyValue">Property Value</span></td>
-		</tr>
-
-		<tr jwcid="$remove$" class="odd">
-			<th>Property Name 2:</th>
-			<td>Property Value 2</td>
-		</tr>
-
-		<tr jwcid="$remove$" class="even">
-			<th>Property Name 3:</th>
-			<td>Property Value 3</td>
-		</tr>
-
-		<tr jwcid="$remove$" class="odd">
-			<th>Property Name 4:</th>
-			<td>Property Value 4</td>
-		</tr>		
-		
-		<tr jwcid="ifNotLast"> <td colspan="2"> &nbsp; </td> </tr>
-
-<span jwcid="ifLast" renderTag="false">
-		<tr class="stack-trace-label">
-			<td colspan="2">Stack Trace:</td>
-		</tr>
-
-		<tr class="stack-trace">
-			<td colspan="2">
-				<ul>
-					<li jwcid="eStack"><span jwcid="insertStackTrace">foo.bar.baz(Line:xyz)</span>
-					</li>
-					<li jwcid="$remove$">foo.bar.baz(Line:xyz)</li>
-					<li jwcid="$remove$">foo.bar.baz(Line:xyz)</li>
-					<li jwcid="$remove$">foo.bar.baz(Line:xyz)</li>					
-					<li jwcid="$remove$">foo.bar.baz(Line:xyz)</li>
-				</ul>
-			</td>
-		</tr>
-</span> <!-- ifLast -->
-	</table>
-	
-</span> <!-- e-exception -->
-
-</span> <!-- $content$ -->
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ExceptionDisplay.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ExceptionDisplay.java
deleted file mode 100644
index 4a6c82e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ExceptionDisplay.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.bean.EvenOdd;
-import org.apache.tapestry.util.exception.ExceptionDescription;
-
-/**
- * Component used to display an already formatted exception. [ <a
- * href="../../../../../ComponentReference/ExceptionDisplay.html">Component
- * Reference </a>]
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class ExceptionDisplay extends BaseComponent
-{
-    private ExceptionDescription _exception;
-
-    private EvenOdd _evenOdd;
-
-    public abstract int getIndex();
-
-    public abstract int getCount();
-
-    public abstract void setCount(int count);
-
-    public abstract ExceptionDescription[] getExceptions();
-    
-    /**
-     * Each time the current exception is set, as a side effect, the evenOdd
-     * helper bean is reset to even.
-     */
-
-    public void setException(ExceptionDescription value)
-    {
-        _exception = value;
-
-        _evenOdd.setEven(true);
-    }
-
-    public ExceptionDescription getException()
-    {
-        return _exception;
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        ExceptionDescription[] exceptions = getExceptions();
-
-        setCount(exceptions.length);
-
-        try
-        {
-            _evenOdd = (EvenOdd) getBeans().getBean("evenOdd");
-
-            super.renderComponent(writer, cycle);
-        }
-        finally
-        {
-            _exception = null;
-            _evenOdd = null;
-        }
-    }
-
-    public boolean isLast()
-    {
-        return getIndex() == (getCount() - 1);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ExceptionDisplay.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ExceptionDisplay.jwc
deleted file mode 100644
index 1d046a5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/ExceptionDisplay.jwc
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-		
-<component-specification class="org.apache.tapestry.html.ExceptionDisplay" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-  
-  <description>
-  Used to present a detail exception description.
-  </description>
-  
-  <parameter name="exceptions" required="yes">
-    <description>
-    An array of ExceptionDescription objects.
-    </description>
-  </parameter>
-  
-  <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/>
-  
-  <!-- Store the current ExceptionProperty -->
-    
-  <property name="property"/>
-  
-  <!-- Store the current stack trace line -->
-  
-  <property name="trace"/>
-  
-  <inject property="adapterFactory" object="service:tapestry.describe.RenderableAdapterFactory"/>
-  
-  <component id="eException" type="For">
-    <binding name="source" value="exceptions"/>
-    <binding name="value" value="exception"/>
-    <binding name="index" value="index"/>
-  </component>
-  
-  <component id="insertClass" type="Insert">
-    <binding name="value" value="exception.exceptionClassName"/>
-  </component>
-  
-  <component id="insertMessage" type="Insert">
-    <binding name="value" value="exception.message"/>
-  </component>
-  
-  <component id="eProperty" type="For">
-  	<binding name="element" value="literal:tr"/>
-  	<binding name="class" value="beans.evenOdd.next"/>
-    <binding name="source" value="exception.properties"/>
-    <binding name="value" value="property"/>
-  </component>
-  
-  <component id="insertPropertyName" type="Insert">
-    <binding name="value" value="property.name"/>
-  </component>
-  
-  <component id="insertPropertyValue" type="Delegator">
-    <binding name="delegate" value="adapterFactory.getRenderableAdaptor(property.value)"/>
-  </component>
-  
-  <component id="ifLast" type="If">
-    <binding name="condition" value="last"/>
-  </component>
-  
-  <component id="ifNotLast" type="If">
-    <binding name="condition" value="! last"/>
-  </component>
-  
-  <component id="eStack" type="For">
-    <binding name="element" value="literal:li"/>
-    <binding name="source" value="exception.stackTrace"/>
-    <binding name="value" value="trace"/>
-  </component>
-  
-  <component id="insertStackTrace" type="Insert">
-    <binding name="value" value="trace"/>
-  </component>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Frame.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Frame.java
deleted file mode 100644
index cc22786..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Frame.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * Implements a &lt;frame&gt; within a &lt;frameset&gt;. [ <a
- * href="../../../../../ComponentReference/Frame.html">Component Reference </a>]
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Frame extends AbstractComponent
-{
-
-    /**
-     * Injected engine service.
-     * 
-     * @since 4.0
-     */
-    public abstract IEngineService getPageService();
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IEngineService pageService = getPageService();
-        ILink link = pageService.getLink(false, getTargetPage());
-
-        writer.beginEmpty("frame");
-        writer.attribute("src", link.getURL());
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-    }
-
-    public abstract String getTargetPage();
-
-    public abstract void setTargetPage(String targetPage);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Frame.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Frame.jwc
deleted file mode 100644
index 900f017..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Frame.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.Frame"
-    allow-body="no"
-    allow-informal-parameters="yes">
-
-  <description>
-  Identifies a page as the contents of a frame within a frameset.
-  </description>
-
-  <parameter name="page" property="targetPage" required="yes">
-    <description>
-	The page to display in the frame.
-    </description>
-  </parameter>
-  
-  <reserved-parameter name="src"/>
-  
-  <inject property="pageService" object="engine-service:page"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/HTMLMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/HTMLMessages.java
deleted file mode 100644
index 177f0fb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/HTMLMessages.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.IBinding;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class HTMLMessages
-{
-
-    private static final MessageFormatter _formatter = new MessageFormatter(
-            HTMLMessages.class);
-
-    /* defeats instantiation */
-    private HTMLMessages() { }
-    
-    static String textConversionError(Throwable cause)
-    {
-        return _formatter.format("text-conversion-error", cause);
-    }
-
-    static String multiAssetParameterError(IBinding asset, IBinding scriptPath)
-    {
-        return _formatter.format("script-multiscript-error", new Object[] {
-                asset, scriptPath });
-    }
-
-    static String noScriptPathError()
-    {
-        return _formatter.getMessage("script-required-path-error");
-    }
-
-    static String shellComponentRequired()
-    {
-        return _formatter.getMessage("shell-component-required");
-    }
-
-    static String stringOrIAssetExpected()
-    {
-        return _formatter.getMessage("string-iasset-expected");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/HTMLStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/HTMLStrings.properties
deleted file mode 100644
index 0589241..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/HTMLStrings.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-text-conversion-error=Error converting text to lines (for InsertText component): {0}
-script-multiscript-error=Script component has both script IAsset parameter({0}) AND String IAsset parameter({1}) set, \
-only one of the two parameters is allowed. 
-script-required-path-error=Either the scriptAsset or the scriptPath parameter must be supplied, neither parameter \
-was set.
-shell-component-required=Relation must be contained by a Shell component.
-string-iasset-expected=Parameter href must be not null and either a String or an IAsset.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Image.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Image.java
deleted file mode 100644
index b71bb3b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Image.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- * Used to insert an image. To create a rollover image, use the {@link Rollover}
- * class, which integrates a link with the image assets used with the button. [<a
- * href="../../../../../ComponentReference/Image.html">Component Reference</a>]
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Image extends AbstractComponent
-{
-
-    /**
-     * Renders the &lt;img&gt; element.
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // Doesn't contain a body so no need to do anything on rewind (assumes
-        // no
-        // sideffects to accessor methods via bindings).
-
-        if (cycle.isRewinding()) return;
-
-        IAsset imageAsset = getImage();
-
-        if (imageAsset == null)
-            throw Tapestry.createRequiredParameterException(this, "image");
-
-        String imageURL = imageAsset.buildURL();
-
-        writer.beginEmpty("img");
-
-        writer.attribute("src", imageURL);
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-    }
-
-    public abstract IAsset getImage();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Image.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Image.jwc
deleted file mode 100644
index e2963ed..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Image.jwc
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.html.Image" allow-body="no">
-
-  <description>
-  Displays an image, deriving the source URL for the image from an asset.
-  </description>
-
-  <parameter name="image" required="yes">
-    <description>
-    The asset to display.
-    </description>
-  </parameter>
-  
-  <reserved-parameter name="src"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/InsertText.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/InsertText.java
deleted file mode 100644
index 78e0ffd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/InsertText.java
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.io.Reader;
-import java.io.StringReader;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Inserts formatted text (possibly collected using a
- * {@link org.apache.tapestry.form.TextArea} component. [<a
- * href="../../../../../ComponentReference/InsertText.html">Component Reference</a>]
- * <p>
- * To maintain the line breaks provided originally, this component will break
- * the input into individual lines and insert additional HTML to make each line
- * seperate.
- * <p>
- * This can be down more simply, using the &lt;pre&gt; HTML element, but that
- * usually renders the text in a non-proportional font.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class InsertText extends AbstractComponent
-{
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.isRewinding()) return;
-
-        String value = getValue();
-
-        if (value == null) return;
-
-        StringReader reader = null;
-        LineNumberReader lineReader = null;
-        InsertTextMode mode = getMode();
-        boolean raw = getRaw();
-
-        try
-        {
-            reader = new StringReader(value);
-
-            lineReader = new LineNumberReader(reader);
-
-            int lineNumber = 0;
-
-            while(true)
-            {
-                String line = lineReader.readLine();
-
-                // Exit loop at end of file.
-
-                if (line == null) 
-                    break;
-
-                mode.writeLine(lineNumber, line, writer, raw);
-                
-                lineNumber++;
-            }
-
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(HTMLMessages
-                    .textConversionError(ex), this, null, ex);
-        }
-        finally
-        {
-            close(lineReader);
-            close(reader);
-        }
-
-    }
-
-    private void close(Reader reader)
-    {
-        if (reader == null) return;
-
-        try
-        {
-            reader.close();
-        }
-        catch (IOException e)
-        {
-        }
-    }
-
-    /** Parameter. */
-    public abstract InsertTextMode getMode();
-
-    public abstract void setMode(InsertTextMode mode);
-
-    /** Parameter. */
-
-    public abstract String getValue();
-
-    /** Parameter. */
-
-    public abstract boolean getRaw();
-
-    /**
-     * Sets the mode parameter property to its default,
-     * {@link InsertTextMode#BREAK}.
-     * 
-     * @since 3.0
-     */
-    protected void finishLoad()
-    {
-        setMode(InsertTextMode.BREAK);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/InsertText.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/InsertText.jwc
deleted file mode 100644
index bc41e44..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/InsertText.jwc
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.InsertText" 
-    allow-body="no" 
-    allow-informal-parameters="no" deprecated="yes">
-
-  <description>
-  Inserts line-oriented text into the response HTML, inserting additional
-  markup to delimit lines.
-  </description>
-  
-  <parameter name="value" required="yes">
-    <description>
-  	The text to insert.
-    </description>
-  </parameter>
-
-  <parameter name="mode">
-    <description>
-    Determines which mode to use: breaks after each line, or wrap each line
-    as a paragraph.  The default is breaks.
-    </description>
-  </parameter>
-  
-  <parameter name="raw">
-      <description>
-          If false (the default), then the rendered text is filtered. If true,
-          then the text is not filtered (appropriate when the value
-          parameter contains markup).
-      </description>
-   </parameter>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/InsertTextMode.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/InsertTextMode.java
deleted file mode 100644
index 4f39ea1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/InsertTextMode.java
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- * Defines a number of ways to format multi-line text for proper renderring.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class InsertTextMode
-{
-
-    /**
-     * Mode where each line (after the first) is preceded by a &lt;br&gt; tag.
-     */
-
-    public static final InsertTextMode BREAK = new BreakMode();
-
-    /**
-     * Mode where each line is wrapped with a &lt;p&gt; element.
-     */
-
-    public static final InsertTextMode PARAGRAPH = new ParagraphMode();
-
-    private final String _name;
-
-    protected InsertTextMode(String name)
-    {
-        _name = name;
-    }
-
-    public String toString()
-    {
-        return "InsertTextMode[" + _name + "]";
-    }
-
-    /**
-     * Invoked by the {@link InsertText} component to write the next line.
-     * 
-     * @param lineNumber
-     *            the line number of the line, starting with 0 for the first
-     *            line.
-     * @param line
-     *            the String for the current line.
-     * @param writer
-     *            the {@link IMarkupWriter} to send output to.
-     * @param raw
-     *            if true, then the output should be unfiltered
-     */
-
-    public abstract void writeLine(int lineNumber, String line,
-            IMarkupWriter writer, boolean raw);
-
-    /**
-     * 
-     * @author hls
-     */
-    private static final class BreakMode extends InsertTextMode
-    {
-
-        private BreakMode()
-        {
-            super("BREAK");
-        }
-
-        public void writeLine(int lineNumber, String line,
-                IMarkupWriter writer, boolean raw)
-        {
-            if (lineNumber > 0) writer.beginEmpty("br");
-
-            writer.print(line, raw);
-        }
-    }
-
-    /**
-     * 
-     * @author hls
-     */
-    private static final class ParagraphMode extends InsertTextMode
-    {
-
-        private ParagraphMode()
-        {
-            super("PARAGRAPH");
-        }
-
-        public void writeLine(int lineNumber, String line,
-                IMarkupWriter writer, boolean raw)
-        {
-            writer.begin("p");
-
-            writer.print(line, raw);
-
-            writer.end();
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Relation.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Relation.java
deleted file mode 100644
index 30161d1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Relation.java
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright Aug 2, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.html;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.util.ContentType;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-/**
- * Works with the {@link Shell} component to define and append a 
- * relationship between documents (typically a stylesheet) to 
- * the HTML response. 
- *
- * @author Andreas Andreou
- * @since 4.1.1
- */
-public abstract class Relation extends AbstractComponent
-{
-    /**
-     * {@inheritDoc}
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (!cycle.isRewinding())
-        {
-            Shell shell = Shell.get(cycle);
-
-            if (shell == null)
-                throw new ApplicationRuntimeException(
-                        HTMLMessages.shellComponentRequired(),
-                        this.getLocation(), null);
-
-            if (getUseBody() && getHref() == null)
-            {
-                renderStyleTag(shell, writer, cycle);
-            }
-            else
-            {
-                renderLinkTag(shell, writer, cycle);
-            }
-        }
-    }
-
-    protected void renderLinkTag(Shell shell, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object href = getHref();
-        boolean ok = (href instanceof String) || (href instanceof IAsset);
-        if (!ok)
-            throw new ApplicationRuntimeException(HTMLMessages.stringOrIAssetExpected(), getLocation(), null);
-
-        String url;
-        if (href instanceof String)
-        {
-            url = (String) href;
-        }
-        else
-        {
-            url = ((IAsset)href).buildURL();
-        }
-
-        RelationBean bean = new RelationBean();
-        bean.setHref(url);
-        bean.setMedia(getMedia());
-        bean.setRel(getRel());
-        bean.setRev(getRev());
-        bean.setTitle(getTitle());
-        bean.setType(getType());
-        shell.addRelation(bean);
-    }
-
-    protected void renderStyleTag(Shell shell, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (getBody() == null) //nothing to include
-        {
-            return;
-        }
-
-        StringWriter sWriter = new StringWriter();
-        IMarkupWriter nested = getMarkupWriterSource().newMarkupWriter(new PrintWriter(sWriter),
-                                                                       new ContentType(writer.getContentType()));
-
-        nested.begin("style");
-        nested.attribute("type", "text/css");
-
-        if (getMedia()!=null)
-            nested.attribute("media", getMedia());
-        if (getTitle()!=null)
-            nested.attribute("title", getTitle());
-
-        renderBody(nested, cycle);
-        nested.close();
-
-        shell.includeAdditionalContent(sWriter.toString());
-    }
-
-    public abstract boolean getUseBody();
-
-    public abstract Object getHref();
-
-    public abstract String getRel();
-
-    public abstract String getRev();
-
-    public abstract String getType();
-
-    public abstract String getTitle();
-
-    public abstract String getMedia();
-
-    /* injected */
-    public abstract MarkupWriterSource getMarkupWriterSource();
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Relation.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Relation.jwc
deleted file mode 100644
index 2f1cb71..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Relation.jwc
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.Relation" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-
-  <description>
-    Creates a relationship between two documents (typically the current html
-    document and an external stylesheet). 
-  </description>
-
-  <parameter name="href" required="yes">
-    <description>
-    The target URL of the related resource. Can either be a String or an IAsset.
-    </description>
-  </parameter> 
-  
-  <parameter name="rel"
-      		 default-value="literal:stylesheet">
-    <description>
-	Defines the relationship between the current document and the targeted document.
-    </description>
-  </parameter>
-  
-  <parameter name="rev">
-    <description>
-    Defines the relationship between the targeted document and the current document.
-    </description>
-  </parameter>     
-  
-  <parameter name="type"
-      		 default-value="literal:text/css">
-    <description>
-    Specifies the MIME type of the target URL.
-    </description>
-  </parameter> 
-  
-  <parameter name="title">
-    <description>
-    Title of the relation.
-    </description>
-  </parameter>     
-  
-  <parameter name="media">
-    <description>
-    Specifies on which device the document will be displayed.
-    </description>
-  </parameter>
-  
-  <property name="useBody" initial-value="ognl:false"/>
-  
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RelationBean.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RelationBean.java
deleted file mode 100644
index 55c4b4e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RelationBean.java
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright Aug 2, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.html;
-
-/**
- * Defines a relationship between two documents.
- * 
- * @author Andreas Andreou
- * @since 4.1.1 
- */
-public class RelationBean
-{
-    /** The target URL of the resource. */
-    private String _href;
-    /** Specifies on what device the document will be displayed. */
-    private String _media;
-    /** Defines the relationship between the current document and the targeted document. */
-    private String _rel;
-    /** Defines the relationship between the targeted document and the current document. */
-    private String _rev;
-    /** Specifies the MIME type of the target URL. */
-    private String _type;
-    /** Title of the relation. */
-    private String _title;
-    
-    public RelationBean()
-    {        
-    }
-    
-    public String getHref()
-    {
-        return _href;
-    }
-    
-    public void setHref(String href)
-    {
-        _href = href;
-    }
-    
-    public String getMedia()
-    {
-        return _media;
-    }
-    
-    public void setMedia(String media)
-    {
-        _media = media;
-    }
-    
-    public String getRel()
-    {
-        return _rel;
-    }
-    
-    public void setRel(String rel)
-    {
-        _rel = rel;
-    }
-    
-    public String getRev()
-    {
-        return _rev;
-    }
-    
-    public void setRev(String rev)
-    {
-        _rev = rev;
-    }
-    
-    public String getType()
-    {
-        return _type;
-    }
-    
-    public void setType(String type)
-    {
-        _type = type;
-    }
-    
-    public String getTitle()
-    {
-        return _title;
-    }
-    
-    public void setTitle(String title)
-    {
-        _title = title;
-    }
-
-    public int hashCode()
-    {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((_href == null) ? 0 : _href.hashCode());
-        result = prime * result + ((_media == null) ? 0 : _media.hashCode());
-        result = prime * result + ((_rel == null) ? 0 : _rel.hashCode());
-        result = prime * result + ((_rev == null) ? 0 : _rev.hashCode());
-        result = prime * result + ((_title == null) ? 0 : _title.hashCode());
-        result = prime * result + ((_type == null) ? 0 : _type.hashCode());
-        return result;
-    }
-
-    public boolean equals(Object obj)
-    {
-        if (this == obj) return true;
-        if (obj == null) return false;
-        if (getClass() != obj.getClass()) return false;
-        final RelationBean other = (RelationBean) obj;
-        if (_href == null) {
-            if (other._href != null) return false;
-        } else if (!_href.equals(other._href)) return false;
-        if (_media == null) {
-            if (other._media != null) return false;
-        } else if (!_media.equals(other._media)) return false;
-        if (_rel == null) {
-            if (other._rel != null) return false;
-        } else if (!_rel.equals(other._rel)) return false;
-        if (_rev == null) {
-            if (other._rev != null) return false;
-        } else if (!_rev.equals(other._rev)) return false;
-        if (_title == null) {
-            if (other._title != null) return false;
-        } else if (!_title.equals(other._title)) return false;
-        if (_type == null) {
-            if (other._type != null) return false;
-        } else if (!_type.equals(other._type)) return false;
-        return true;
-    }  
-    
-    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RequestDisplay.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RequestDisplay.html
deleted file mode 100644
index 8f526e5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RequestDisplay.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<span jwcid="$content$">
-<a href="" class="toggle" 
-	onClick="return toggleDisplay('requestDisplay')">[&nbsp;+/-&nbsp;] Request</a>
-<div id="requestDisplay" class="toggleContent">
-<span jwcid="@Describe" object="ognl:request"/>
-</div>
-
-<span jwcid="@If" condition="ognl:request.getSession(false) != null">
-<a href="" class="toggle" 
-	onClick="return toggleDisplay('sessionDisplay')">[&nbsp;+/-&nbsp;] Session</a>
-<div id="sessionDisplay" class="toggleContent">
-<span jwcid="@Describe" object="ognl:request.getSession(false)"/>
-</div>
-</span>
-
-<a href="" class="toggle" 
-	onClick="return toggleDisplay('contextDisplay')">[&nbsp;+/-&nbsp;] Context</a>
-<div id="contextDisplay" class="toggleContent">
-<span jwcid="@Describe" object="ognl:activator"/>
-<span jwcid="@Describe" object="ognl:context"/>
-</div>
-
-<a href="" class="toggle" 
-	onClick="return toggleDisplay('statusDisplay')">[&nbsp;+/-&nbsp;] Status</a>
-<div id="statusDisplay" class="toggleContent">
-<span jwcid="@Delegator" delegate="ognl:reportStatusRenderer"/>
-</div>
-
-<a href="" class="toggle" 
-	onClick="return toggleDisplay('sysPropDisplay')">[&nbsp;+/-&nbsp;] System Properties</a>
-<div id="sysPropDisplay" class="toggleContent">
-<span jwcid="@Delegator" delegate="ognl:systemPropertiesRenderer"/> 
-</div>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RequestDisplay.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RequestDisplay.java
deleted file mode 100644
index 59217bb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RequestDisplay.java
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.describe.ReportStatusHub;
-import org.apache.tapestry.web.WebUtils;
-
-/**
- * Supports the {@link org.apache.tapestry.pages.Exception}&nbsp;page by
- * displaying the request, session, servlet context and servlet object for the
- * current request.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class RequestDisplay extends BaseComponent
-{
-
-    private boolean _even;
-
-    // Injected
-
-    public abstract ReportStatusHub getReportStatusHub();
-
-    public void renderSystemProperties(IMarkupWriter writer)
-    {
-        _even = true;
-
-        Properties p = System.getProperties();
-
-        String pathSeparator = p.getProperty("path.separator");
-
-        writer.begin("div");
-        writer.attribute("class", "described-object-title");
-        writer.print("JVM System Properties");
-        writer.end();
-        writer.println();
-
-        writer.begin("table");
-        writer.attribute("class", "described-object");
-
-        Iterator i = WebUtils.toSortedList(p.keys()).iterator();
-
-        while(i.hasNext())
-        {
-            String key = (String) i.next();
-            String value = p.getProperty(key);
-
-            renderKeyAndValue(writer, key, value, pathSeparator);
-        }
-
-        writer.end();
-    }
-
-    private void renderKeyAndValue(IMarkupWriter writer, String key,
-            String value, String pathSeparator)
-    {
-        String[] values = split(key, value, pathSeparator);
-
-        for(int i = 0; i < values.length; i++)
-        {
-            writer.begin("tr");
-
-            writer.attribute("class", _even ? "even" : "odd");
-
-            _even = !_even;
-
-            writer.begin("th");
-
-            if (i == 0) writer.print(key);
-
-            writer.end();
-            writer.begin("td");
-            writer.print(values[i]);
-            writer.end("tr");
-            writer.println();
-        }
-    }
-
-    private String[] split(String key, String value, String pathSeparator)
-    {
-        if (!key.endsWith(".path")) return new String[] { value };
-
-        StringTokenizer tokenizer = new StringTokenizer(value, pathSeparator);
-        List values = Collections.list(tokenizer);
-
-        return (String[]) values.toArray(new String[values.size()]);
-    }
-
-    public IRender getSystemPropertiesRenderer()
-    {
-        return new IRender()
-        {
-
-            public void render(IMarkupWriter writer, IRequestCycle cycle)
-            {
-                renderSystemProperties(writer);
-            }
-        };
-    }
-
-    public IRender getReportStatusRenderer()
-    {
-        return new IRender()
-        {
-
-            public void render(IMarkupWriter writer, IRequestCycle cycle)
-            {
-                getReportStatusHub().fireReportStatus(writer);
-            }
-        };
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RequestDisplay.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RequestDisplay.jwc
deleted file mode 100644
index 65d7453..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/RequestDisplay.jwc
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-		
-<component-specification class="org.apache.tapestry.html.RequestDisplay" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-  
-  <description>
-  Displays an HTML representation of the request, session, context and servlet.
-  </description>
-  
-  <inject property="request" object="service:tapestry.globals.WebRequest"/>
-  <inject property="context" object="service:tapestry.globals.WebContext"/>
-  <inject property="activator" object="service-property:tapestry.globals.ApplicationGlobals:activator"/>  
-  <inject property="reportStatusHub" object="service:tapestry.describe.ReportStatusHub"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.java
deleted file mode 100644
index eced93b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.java
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.*;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.LinkSubmit;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Combines a link component (such as
- * {@link org.apache.tapestry.link.DirectLink}) with an &lt;img&gt; and
- * JavaScript code to create a rollover effect that works with both Netscape
- * Navigator and Internet Explorer. [ <a
- * href="../../../../../ComponentReference/Rollover.html">Component Reference
- * </a>]
- *
- * @author Howard Lewis Ship
- */
-
-public abstract class Rollover extends AbstractComponent
-{
-
-    /**
-     * Converts an {@link IAsset}binding into a usable URL. Returns null if the
-     * binding does not exist or the binding's value is null.
-     *
-     * @param asset
-     *          The asset to generate a url for.
-     * @return The url to the asset resource, or null if it couldn't be generated.
-     */
-
-    protected String getAssetURL(IAsset asset)
-    {
-        if (asset == null)
-            return null;
-
-        return asset.buildURL();
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // No body, so we skip it all if not rewinding
-        // (assumes no side effects on accessors).
-
-        if (cycle.isRewinding())
-            return;
-
-        String imageURL = null;
-        String mouseOverURL = null;
-        String mouseOutURL = null;
-        boolean dynamic = false;
-        String imageId;
-        boolean linkDisabled = false;
-
-        PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, this);
-
-        Object serviceLink = cycle.getAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-        if (serviceLink == null)
-        {
-            serviceLink = cycle.getAttribute(LinkSubmit.ATTRIBUTE_NAME);
-
-            if (serviceLink != null)
-                linkDisabled = ((IFormComponent) serviceLink).isDisabled();
-        } else
-        {
-            linkDisabled = ((ILinkComponent) serviceLink).isDisabled();
-        }
-
-        if (serviceLink == null)
-            throw new ApplicationRuntimeException(Tapestry.getMessage("Rollover.must-be-contained-by-link"), this, null, null);
-
-        if (linkDisabled)
-        {
-            imageURL = getAssetURL(getDisabled());
-
-            if (imageURL == null)
-                imageURL = getAssetURL(getImage());
-        }
-        else
-        {
-            imageURL = getAssetURL(getImage());
-            mouseOverURL = getAssetURL(getMouseOver());
-            mouseOutURL = getAssetURL(getMouseOut());
-
-            dynamic = (mouseOverURL != null) || (mouseOutURL != null);
-        }
-
-        if (imageURL == null)
-            throw Tapestry.createRequiredParameterException(this, "image");
-
-        writer.beginEmpty("img");
-
-        writer.attribute("src", imageURL);
-
-        if (dynamic)
-        {
-            if (mouseOverURL == null)
-                mouseOverURL = imageURL;
-
-            if (mouseOutURL == null)
-                mouseOutURL = imageURL;
-
-            imageId = writeScript(cycle, pageRenderSupport, serviceLink, mouseOverURL, mouseOutURL);
-
-            writer.attribute("id", imageId);
-        }
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-
-    }
-
-    // Injected
-
-    public abstract IScript getScript();
-
-    private String writeScript(IRequestCycle cycle, PageRenderSupport pageRenderSupport,
-                               Object link, String mouseOverImageURL, String mouseOutImageURL)
-    {
-        String imageId = pageRenderSupport.getUniqueString(getId());
-
-        String preloadedMouseOverImageURL = pageRenderSupport.getPreloadedImageReference(this, mouseOverImageURL);
-        String preloadedMouseOutImageURL = pageRenderSupport.getPreloadedImageReference(this, mouseOutImageURL);
-
-        Map symbols = new HashMap();
-
-        symbols.put("link", link);
-        symbols.put("imageId", imageId);
-        symbols.put("mouseOverImageURL", preloadedMouseOverImageURL);
-        symbols.put("mouseOutImageURL", preloadedMouseOutImageURL);
-
-        getScript().execute(this, cycle, pageRenderSupport, symbols);
-
-        return imageId;
-    }
-
-    public abstract IAsset getMouseOut();
-
-    public abstract IAsset getDisabled();
-
-    public abstract IAsset getMouseOver();
-
-    public abstract IAsset getImage();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.jwc
deleted file mode 100644
index 78bcb5b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.jwc
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.Rollover" allow-body="no">
-
-  <description>
-  A complex image component which must be wrapped by a link component.  Rollovers
-  can reflect the enabled status of the link, and display rollover effects.
-  </description>
-
-  <parameter name="image" required="yes">
-    <description>
-    The normal or default image to display, used as a default image for
-    the other parameters.
-    </description>
-  </parameter>
-  
-  <parameter name="mouseOver" aliases="focus">
-    <description>
-    If specified, provides an image displayed when the cursor is moved
-    over the link.
-    </description>
-  </parameter>
-  
-  <parameter name="mouseOut" aliases="blur">
-    <description>
-    If specified, provides an image displayed when the cursor is moved
-    off of the link.
-    </description>
-  </parameter>
-  
-  <parameter name="disabled">
-    <description>
-    If specified, provides an image displayed when the surrounding
-    link is disabled.
-    </description>
-  </parameter>
-  
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="src"/>
-  
-  <inject property="script" type="script" object="Rollover.script"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.script
deleted file mode 100644
index 62d3c67..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Rollover.script
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<script>
-<!-- 
-
-input symbols:
-
-uniqueId - uniqueId used to build names
-mouseOverImageURL - URL for focus (mouse over)
-mouseOutImageURL - URL for blur image (mouse out)
-
-output symbols:
-
-imageName - name for the image (i.e. name attribute of <img> element)
-onMouseOverName - name of mouse over function
-onMouseOutName - name of mouse out function
-
--->
-
-<input-symbol key="imageId" class="java.lang.String" required="yes"/>
-<input-symbol key="mouseOverImageURL" class="java.lang.String" required="yes"/>
-<input-symbol key="mouseOutImageURL" class="java.lang.String" required="yes"/>
-<input-symbol key="link" />
-
-<let key="onMouseOverName">
-  mouseOver_${imageId}
-</let>
-<let key="onMouseOutName">
-  mouseOut_${imageId}
-</let>
-
-<let key="attribute">
-  dojo.byId('${imageId}').src
-</let>
-<body>
-tapestry.${onMouseOverName}=function(){
-  if (document.images){
-    ${attribute} = ${mouseOverImageURL};
-  }
-}
-
-tapestry.${onMouseOutName}=function(){
-  if (document.images) {
-    ${attribute} = ${mouseOutImageURL};
-  }
-}
-</body>
-<initialization>
-dojo.event.connect(dojo.byId("${link.clientId}"), "onmouseover", tapestry, "${onMouseOverName}");
-dojo.event.connect(dojo.byId("${link.clientId}"), "onmouseout", tapestry, "${onMouseOutName}");
-</initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Script.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Script.java
deleted file mode 100644
index fe51a9d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Script.java
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
-import org.apache.tapestry.asset.AssetSource;
-import org.apache.tapestry.engine.IScriptSource;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Works with the {@link Body}component to add a script (and perhaps some
- * initialization) to the HTML response. [ <a
- * href="../../../../../ComponentReference/Script.html">Component Reference
- * </a>]
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Script extends AbstractComponent
-{
-    /**
-     * A Map of input and output symbols visible to the body of the Script.
-     * 
-     * @since 2.2
-     */
-
-    private Map _symbols;
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-
-    public abstract IScriptSource getScriptSource();
-    
-    /**
-     * Constructs the symbols {@link Map}. This starts with the contents of the
-     * symbols parameter (if specified) to which is added any informal
-     * parameters. If both a symbols parameter and informal parameters are
-     * bound, then a copy of the symbols parameter's value is made (that is, the
-     * {@link Map}provided by the symbols parameter is read, but not modified).
-     */
-
-    private Map getInputSymbols()
-    {
-        Map result = new HashMap();
-
-        Map baseSymbols = getBaseSymbols();
-
-        if (baseSymbols != null) result.putAll(baseSymbols);
-
-        // Now, iterate through all the binding names (which includes both
-        // formal and informal parmeters). Skip the formal ones and
-        // access the informal ones.
-
-        Iterator i = getBindingNames().iterator();
-        while(i.hasNext())
-        {
-            String bindingName = (String) i.next();
-
-            // Skip formal parameters
-
-            if (getSpecification().getParameter(bindingName) != null) continue;
-
-            IBinding binding = getBinding(bindingName);
-
-            Object value = binding.getObject();
-
-            result.put(bindingName, value);
-        }
-
-        return result;
-    }
-
-    /**
-     * Gets the {@link IScript}for the correct script.
-     */
-
-    private IScript getParsedScript()
-    {
-        IAsset scriptAsset = getScriptAsset();
-        String scriptPath = getScriptPath();
-
-        // only one of the two is allowed
-        if (scriptAsset != null && scriptPath != null)
-            throw new ApplicationRuntimeException(HTMLMessages.multiAssetParameterError(getBinding("scriptAsset"),
-                            getBinding("script")));
-
-        if (scriptPath == null && scriptAsset == null)
-            throw new ApplicationRuntimeException(HTMLMessages.noScriptPathError());
-
-        IScriptSource source = getScriptSource();
-        
-        if (scriptPath != null)
-        {
-            // If the script path is relative, it should be relative to the
-            // Script component's
-            // container (i.e., relative to a page in the application).
-
-            Resource rootLocation = getContainer().getSpecification().getSpecificationLocation();
-
-            scriptAsset = getAssetSource().findAsset(rootLocation, getContainer().getSpecification(), scriptPath, getPage().getLocale(), getScriptLocation());
-        }
-
-        Defense.notNull(scriptAsset, "script");
-
-        try
-        {
-            return source.getScript(scriptAsset.getResourceLocation());
-        }
-        catch (RuntimeException ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), this, getScriptLocation(), ex);
-        }
-
-    }
-
-    Location getScriptLocation()
-    {
-        Location location = null;
-
-        if (getBinding("script")!=null)
-            location = getBinding("script").getLocation();
-        else if (getBinding("scriptAsset")!=null)
-            location = getBinding("scriptAsset").getLocation();
-
-        return location;
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (!cycle.isRewinding())
-        {
-            PageRenderSupport pageRenderSupport = TapestryUtils
-                    .getPageRenderSupport(cycle, this);
-            
-            _symbols = getInputSymbols();
-            
-            getParsedScript().execute(this, cycle, pageRenderSupport, _symbols);
-        }
-
-        // Render the body of the Script;
-        renderBody(writer, cycle);
-    }
-
-    public abstract String getScriptPath();
-
-    public abstract IAsset getScriptAsset();
-
-    // injected
-    public abstract AssetSource getAssetSource();
-
-    // Parameter
-
-    public abstract Map getBaseSymbols();
-
-    /**
-     * Returns the complete set of symbols (input and output) from the script
-     * execution. This is visible to the body of the Script, but is cleared
-     * after the Script finishes rendering.
-     * 
-     * @since 2.2
-     */
-
-    public Map getSymbols()
-    {
-        return _symbols;
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        _symbols = null;
-
-        super.cleanupAfterRender(cycle);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Script.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Script.jwc
deleted file mode 100644
index 0640da3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Script.jwc
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.html.Script" allow-body="yes">
-
-  <description>
-  Constructs dynamic JavaScript which is added to the page.
-  </description>
-  
-  <parameter name="script" property="scriptPath" >
-    <description>
-    The resource path of the script to execute.
-    </description>
-  </parameter>
-
-  <parameter name="scriptAsset" property="scriptAsset" >
-  	<description>
-      IAsset reference to script.
-    </description>
-  </parameter>
-
-  <parameter name="symbols"	property="baseSymbols">
-    <description>
-    Provides a base set of symbols to which, in a copy, are added
-    any informal parameters.
-    </description>
-  </parameter>
-
-  <inject property="scriptSource" object="infrastructure:scriptSource"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Shell.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Shell.java
deleted file mode 100644
index a3a1509..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Shell.java
+++ /dev/null
@@ -1,356 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-// 
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.*;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.spec.IApplicationSpecification;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Component for creating a standard 'shell' for a page, which comprises the &lt;html&gt; and
- * &lt;head&gt; portions of the page. [ <a
- * href="../../../../../ComponentReference/Shell.html">Component Reference </a>]
- * <p>
- * Specifically does <em>not</em> provide a &lt;body&gt; tag, that is usually accomplished using a
- * {@link Body}&nbsp; component.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Shell extends AbstractComponent
-{
-    public static final String SHELL_ATTRIBUTE = "org.apache.tapestry.html.Shell";
-    
-    private static final String GENERATOR_CONTENT = "Tapestry Application Framework, version " + Tapestry.VERSION;
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        TapestryUtils.storeUniqueAttribute(cycle, SHELL_ATTRIBUTE, this);
-        
-        long startTime = System.currentTimeMillis();
-        boolean rewinding = cycle.isRewinding();
-        boolean dynamic = getBuilder().isDynamic();
-
-        if (!rewinding && !dynamic)
-        {
-            writeDocType(writer, cycle);
-
-            IPage page = getPage();
-
-            if (!isDisableTapestryMeta()) {
-
-                writer.comment("Application: " + getApplicationSpecification().getName());
-
-                writer.comment("Page: " + page.getPageName());
-                writer.comment("Generated: " + new Date());
-            }
-
-            writer.begin("html");
-            writer.println();
-            writer.begin("head");
-            writer.println();
-
-            if (!isDisableTapestryMeta())
-                writeMetaTag(writer, "name", "generator", GENERATOR_CONTENT);
-
-            if (isDisableCaching())
-                writeMetaTag(writer, "http-equiv", "content", "no-cache");
-
-            if (getRenderContentType())
-                writeMetaTag(writer, "http-equiv", "Content-Type", writer.getContentType());
-
-            writeRefresh(writer, cycle);
-
-            if (getRenderBaseTag())
-                getBaseTagWriter().render(writer, cycle);
-
-            writer.begin("title");
-
-            writer.print(getTitle(), getRaw());
-            writer.end(); // title
-            writer.println();
-
-            IRender delegate = getDelegate();
-
-            if (delegate != null)
-                delegate.render(writer, cycle);
-
-            IRender ajaxDelegate = getAjaxDelegate();
-
-            if (ajaxDelegate != null)
-                ajaxDelegate.render(writer, cycle);
-            
-            IAsset stylesheet = getStylesheet();
-
-            if (stylesheet != null)
-                writeStylesheetLink(writer, stylesheet);
-
-            Iterator i = (Iterator) getValueConverter().coerceValue(getStylesheets(), Iterator.class);
-
-            while (i.hasNext())
-            {
-                stylesheet = (IAsset) i.next();
-
-                writeStylesheetLink(writer, stylesheet);
-            }
-        }
-
-        // Render the body, the actual page content
-
-        IMarkupWriter nested = !dynamic ? writer.getNestedWriter() : writer;
-
-        renderBody(nested, cycle);
-
-        if (!rewinding)
-        {
-            List relations = getRelations();
-            if (relations != null)
-                writeRelations(writer, relations); 
-            
-            StringBuffer additionalContent = getContentBuffer();
-            if (additionalContent != null)
-                writer.printRaw(additionalContent.toString());
-            
-            writer.end(); // head
-        }
-        
-        if (!dynamic)
-            nested.close();
-        
-        if (!rewinding && !dynamic)
-        {
-            writer.end(); // html
-            writer.println();
-
-            if (!isDisableTapestryMeta()) {
-                
-                long endTime = System.currentTimeMillis();
-
-                writer.comment("Render time: ~ " + (endTime - startTime) + " ms");     
-            }
-        }
-
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        super.cleanupAfterRender(cycle);
-
-        cycle.removeAttribute(SHELL_ATTRIBUTE);
-    }    
-    
-    private void writeDocType(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // This is the real code
-        String doctype = getDoctype();
-        if (HiveMind.isNonBlank(doctype))
-        {
-            writer.printRaw("<!DOCTYPE " + doctype + ">");
-            writer.println();
-        }
-    }
-
-    private void writeStylesheetLink(IMarkupWriter writer, IAsset stylesheet)
-    {
-        writer.beginEmpty("link");
-        writer.attribute("rel", "stylesheet");
-        writer.attribute("type", "text/css");
-        writer.attribute("href", stylesheet.buildURL());
-        writer.println();
-    }
-    
-    private void writeRefresh(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        int refresh = getRefresh();
-
-        if (refresh <= 0)
-            return;
-
-        // Here comes the tricky part ... have to assemble a complete URL
-        // for the current page.
-
-        IEngineService pageService = getPageService();
-        String pageName = getPage().getPageName();
-
-        ILink link = pageService.getLink(false, pageName);
-
-        StringBuffer buffer = new StringBuffer();
-        buffer.append(refresh);
-        buffer.append("; URL=");
-        buffer.append(StringUtils.replace(link.getAbsoluteURL(), "&amp;", "&"));
-
-        writeMetaTag(writer, "http-equiv", "Refresh", buffer.toString());
-    }
-    
-    private void writeMetaTag(IMarkupWriter writer, String key, String value, String content)
-    {
-        writer.beginEmpty("meta");
-        writer.attribute(key, value);
-        writer.attribute("content", content);
-        writer.println();
-    }
-    
-    private void writeRelations(IMarkupWriter writer, List relations)
-    {
-        Iterator i = relations.iterator();
-        while (i.hasNext())
-        {
-            RelationBean relationBean = (RelationBean) i.next();
-            if (relationBean != null)
-                writeRelation(writer, relationBean);
-        }
-    }
-    
-    private void writeRelation(IMarkupWriter writer, RelationBean relationBean)
-    {
-            writer.beginEmpty("link");
-            writeAttributeIfNotNull(writer, "rel", relationBean.getRel());
-            writeAttributeIfNotNull(writer, "rev", relationBean.getRev());            
-            writeAttributeIfNotNull(writer, "type", relationBean.getType());
-            writeAttributeIfNotNull(writer, "media", relationBean.getMedia());
-            writeAttributeIfNotNull(writer, "title", relationBean.getTitle());
-            writeAttributeIfNotNull(writer, "href", relationBean.getHref());
-            writer.println();
-    }    
-    
-    private void writeAttributeIfNotNull(IMarkupWriter writer, String name, String value)
-    {
-        if (value != null)
-            writer.attribute(name, value);
-    }
-    
-    /**
-     * Retrieves the {@link Shell} that was stored into the request
-     * cycle. This allows components wrapped by the {@link Shell} to
-     * locate it and access the services it provides.
-     * 
-     * @since 4.1.1
-     */
-    public static Shell get(IRequestCycle cycle)
-    {
-        return (Shell) cycle.getAttribute(SHELL_ATTRIBUTE);
-    }    
-    
-    /**
-     * Adds a relation (stylesheets, favicon, e.t.c.) to the page.
-     *
-     * @since 4.1.1
-     */
-    public void addRelation(RelationBean relation)
-    {
-        List relations = getRelations();
-        if (relations == null)
-            relations = new ArrayList();
-        
-        if (!relations.contains(relation))
-            relations.add(relation);
-        
-        setRelations(relations);             
-    }
-
-    /**
-     * Include additional content in the header of a page.
-     * 
-     * @param content 
-     *
-     * @since 4.1.1
-     */
-    public void includeAdditionalContent(String content)
-    {
-        if (HiveMind.isBlank(content))
-            return;
-        
-        StringBuffer buffer = getContentBuffer();
-        
-        if (buffer == null)
-            buffer = new StringBuffer();
-        
-        buffer.append(content);
-        
-        setContentBuffer(buffer);
-    }
-    
-    public abstract boolean isDisableCaching();
-    
-    public abstract IRender getAjaxDelegate();
-    
-    public abstract IRender getDelegate();
-    
-    public abstract int getRefresh();
-
-    public abstract IAsset getStylesheet();
-
-    public abstract Object getStylesheets();
-
-    public abstract String getTitle();
-
-    public abstract String getDoctype();
-
-    public abstract boolean getRenderContentType();
-
-    public abstract boolean isDisableTapestryMeta();
-
-    public abstract ResponseBuilder getBuilder();
-
-    /** @since 4.0 */
-    public abstract ValueConverter getValueConverter();
-
-    /** @since 4.0 */
-
-    public abstract IEngineService getPageService();
-
-    /** @since 4.0 */
-
-    public abstract IApplicationSpecification getApplicationSpecification();
-
-    /** @since 4.0 */
-
-    public abstract IRender getBaseTagWriter();
-    
-    /** @since 4.0.1 */
-    
-    public abstract boolean getRenderBaseTag();
-    
-    /** @since 4.0.3 */
-    
-    public abstract boolean getRaw();
-    
-    /** @since 4.1.1 */
-    
-    public abstract List getRelations();
-    
-    /** @since 4.1.1 */
-    
-    public abstract void setRelations(List relations);
-    
-    /** @since 4.1.1 */
-    
-    public abstract StringBuffer getContentBuffer();
-    
-    /** @since 4.1.1 */
-    
-    public abstract void setContentBuffer(StringBuffer buffer);    
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Shell.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Shell.jwc
deleted file mode 100644
index de6c41d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Shell.jwc
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.html.Shell" allow-informal-parameters="no">
-
-    <description>
-        Provides the outer tags in an HTML page: &lt;html&gt;, &lt;head&gt; and &lt;title&gt;.
-    </description>
-
-    <parameter name="title" required="yes">
-        <description>The title for the page.</description>
-    </parameter>
-
-    <parameter name="raw" default-value="false">
-        <description>
-            If false (the default), then HTML characters in the title are escaped. If true, then
-            value is emitted exactly as is.
-        </description>
-    </parameter>
-
-    <parameter name="stylesheet">
-        <description>If specified, provides an external stylesheet for the page.</description>
-    </parameter>
-
-    <parameter name="stylesheets">
-        <description>Array or collection of stylesheet assets.</description>
-    </parameter>
-
-    <parameter name="doctype"
-        default-value='literal:HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"'>
-        <description>
-            Used to specify the full definition of the DOCTYPE element in the response page, for
-            example 'math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd"'
-
-            The default value is for the HTML 4.01 Transitional DTD.
-
-            The list of currently valid DOCTYPE settings can be found here:
-            http://www.w3.org/QA/2002/04/valid-dtd-list.html
-
-            If the parameter is null or empty, no DOCTYPE tag will be rendered
-        </description>
-    </parameter>
-
-    <parameter name="renderContentType" default-value="true">
-        <description>
-            Determines whether to render an http-equiv element with the Content Type of this
-            response.
-        </description>
-    </parameter>
-
-    <parameter name="disableTapestryMeta" default-value="false" >
-        <description>
-            When set to true, disables rendering of hidden comment meta content normally
-            written out which includes the Tapestry version being used as well as total rendering time 
-            that each response takes. This should be used by people not wanting to make their use or version
-            of any particular framework a widely known item.
-        </description>
-    </parameter>
-
-    <parameter name="refresh">
-        <description>
-            If specified, the page will refresh itself after the specified delay (in seconds).
-        </description>
-    </parameter>
-
-    <parameter name="delegate">
-        <description>
-            If specified, the delegate is rendered before the close of the &lt;head&gt; tag
-            (typically used to provide &lt;meta&gt; tags).
-        </description>
-    </parameter>
-
-    <parameter name="renderBaseTag" default-value="false">
-        <description>
-            Specifies whether or not to render the html basetag element in the document head.
-        </description>
-    </parameter>
-
-    <parameter name="disableCaching" default-value="false">
-        <description>
-            If set, causes a META tag to be written with a value of no-cache to prevent browser
-            caching of whichever page is rendered.
-        </description>
-    </parameter>
-
-    <parameter name="ajaxDelegate" default-value="bean:coreAjaxDelegate">
-        <description>
-            If specified, allows for the default ajaxDelegate that renders the dojo script includes
-            to be overriden.
-        </description>
-    </parameter>
-
-    <parameter name="browserLogLevel" default-value="literal:WARNING">
-        <description>
-            Sets the default browser based log level. Default value is INFO. Uses the dojo.logging
-            API.
-        </description>
-    </parameter>
-
-    <parameter name="debugEnabled" default-value="false">
-        <description>Allows turning browser debug logging statements on/off.</description>
-    </parameter>
-    
-    <parameter name="debugAtAllCosts" default-value="false" />
-    
-    <parameter name="debugContainerId">
-        <description>
-            Sets the html element node id of the element you would like all browser debug content to
-            go to, if you have logging turned on.
-        </description>
-    </parameter>
-    
-    <parameter name="consoleEnabled" default-value="false" />
-    
-    <parameter name="preventBackButtonFix" default-value="false" />
-    
-    <parameter name="parseWidgets" default-value="false">
-        <description>
-            Tells dojo whether or not to parse widgets by traversing the entire dom node of your
-            document. It is highly reccomended that you keep this at its default value of false.
-        </description>
-    </parameter>
-
-    <parameter name="tapestrySource" default-value="asset:defaultTapestrySource">
-        <description>
-            If specified, allows for the default tapestry source included to be overriden.
-        </description>
-    </parameter>
-
-    <parameter name="tapestryPath" default-value="asset:defaultTapestryPath">
-        <description>
-            Sets the tapestry path, needed for dojo to properly detect and find tapestry js modules
-            when overriding the default dojo bundled with tapestry.
-        </description>
-    </parameter>
-
-    <parameter name="dojoSource" default-value="asset:defaultDojoSource">
-        <description>
-            If specified, allows for the default dojo source included to be overriden.
-        </description>
-    </parameter>
-
-    <parameter name="dojoFormSource" default-value="asset:defaultDojoFormSource">
-        <description>
-            If specified, allows for the default dojo source included to be overriden.
-        </description>
-    </parameter>
-
-    <parameter name="dojoWidgetSource" default-value="asset:defaultDojoWidgetSource">
-        <description>
-            If specified, allows for the default dojo source included to be overriden.
-        </description>
-    </parameter>
-
-    <parameter name="dojoPath" default-value="asset:defaultDojoPath">
-        <description>
-            Specifies the default path to the root dojo folder, not the dojo.js file itself. This is
-            used by the djConfig.baseRelativePath javascript configuration variable in dojo.
-        </description>
-    </parameter>
-
-    <inject property="valueConverter" object="service:tapestry.coerce.ValueConverter" />
-    <inject property="pageService" object="engine-service:page" />
-    <inject property="applicationSpecification" object="infrastructure:applicationSpecification" />
-    <inject property="baseTagWriter" object="service:tapestry.url.BaseTagWriter" />
-
-    <bean name="coreAjaxDelegate" class="org.apache.tapestry.dojo.AjaxShellDelegate">
-        <set name="dojoSource" value="dojoSource" />
-        <set name="dojoFormSource" value="dojoFormSource" />
-        <set name="dojoWidgetSource" value="dojoWidgetSource" />
-        <set name="dojoPath" value="dojoPath" />
-        <set name="tapestrySource" value="tapestrySource" />
-        <set name="tapestryPath" value="tapestryPath" />
-        <set name="logLevel" value="browserLogLevel" />
-        <set name="debug" value="debugEnabled" />
-        <set name="debugAtAllCosts" value="debugAtAllCosts" />
-        <set name="debugContainerId" value="debugContainerId" />
-        <set name="consoleEnabled" value="consoleEnabled" />
-        <set name="preventBackButtonFix" value="preventBackButtonFix" />
-        <set name="parseWidgets" value="parseWidgets" />
-    </bean>
-
-    <asset name="defaultDojoSource" path="classpath:/dojo-0.4.3/dojo.js" />
-    <asset name="defaultDojoFormSource" path="classpath:/dojo-0.4.3/dojo2.js" />
-    <asset name="defaultDojoWidgetSource" path="classpath:/dojo-0.4.3/dojo3.js" />
-    
-    <asset name="defaultDojoPath" path="classpath:/dojo-0.4.3/" />
-    <asset name="defaultTapestrySource" path="classpath:/tapestry/core.js" />
-    <asset name="defaultTapestryPath" path="classpath:/tapestry/" />
-    
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Style.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Style.java
deleted file mode 100644
index 3df3ecc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Style.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright Aug 2, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.html;
-
-/**
- * Works with the {@link Shell} component to define and append either inline 
- * styles or stylesheet documents to the HTML response. 
- * 
- * @author Andreas Andreou
- * @since 4.1.1
- */
-public abstract class Style extends Relation
-{
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Style.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Style.jwc
deleted file mode 100644
index 3305182..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/Style.jwc
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.Style" 
-	allow-body="yes" 
-	allow-informal-parameters="no">
-
-  <description>
-    Declares a stylesheet to be included in the current page. 
-  </description>
-
-  <parameter name="href">
-    <description>
-    The target URL of the stylesheet. Can either be a String or an IAsset.
-    </description>
-  </parameter> 
-  
-  <parameter name="rel"
-      		 default-value="literal:stylesheet">
-    <description>
-	By default this is 'stylesheet' but you can also use 'alternate stylesheet'.
-    </description>
-  </parameter>    
-  
-  <parameter name="title">
-    <description>
-    Title of the stylesheet.
-    </description>
-  </parameter>     
-  
-  <parameter name="media">
-    <description>
-    Specifies on which device this stylesheet will apply.
-    </description>
-  </parameter>
-  
-  <property name="type" initial-value="literal:text/css"/>
-  <property name="useBody" initial-value="ognl:true"/>
-  
-  <inject property="markupWriterSource" object="service:tapestry.markup.MarkupWriterSource"/>
-  
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/package.html
deleted file mode 100644
index 017540a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/html/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Components specific to the creation of HTML pages, including sophisticated
-DHTML JavaScript effects.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/Component.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/Component.java
deleted file mode 100644
index 5bc2f39..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/Component.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.apache.tapestry.internal;
-
-import org.apache.tapestry.IRender;
-
-/**
- * Represents the <em>internal</em> component api exposed for use by core framework code only.
- *
- * <p>
- * Use at your own risk as everything in this API is subject to change without notice from release to
- * release.
- * </p>
- */
-public interface Component {
-
-    /**
-     * Returns the list of of {@link IRender} elements contained by this component. Ie whatever
-     * has been added via {@link org.apache.tapestry.IComponent#addBody(IRender)}.
-     *
-     * @return The values, if any. Null otherwise.
-     */
-    IRender[] getContainedRenderers();
-
-    /**
-     * In some rare cases a component has both outer and inner renderers - such as with {@link org.apache.tapestry.BaseComponent}. This
-     * value should return the normal inner renderers most components do in those instances while the other
-     * {@link #getContainedRenderers()} should return the outer renderers.
-     * 
-     * @return The inner renderers if this component supports more than one type, null otherwise.
-     */
-    IRender[] getInnerRenderers();
-
-    /**
-     * Checks if this component has been targeted / connected to for client side
-     * event listening via @EventListener.
-     *
-     * @return True if anything has targeted this component, false otherwise.
-     */
-    boolean hasEvents();
-
-    /**
-     * Sets whether or not this component has events.
-     *
-     * @param hasEvents Whether or not this component has connected events.
-     */
-    void setHasEvents(boolean hasEvents);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java
deleted file mode 100644
index caa3a22..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java
+++ /dev/null
@@ -1,343 +0,0 @@
-// Copyright May 20, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.internal.event;
-
-import org.apache.tapestry.event.BrowserEvent;
-
-import java.util.*;
-
-
-/**
- * Represents a configured listener/event(s) binding for a 
- * a component and the events that may be optionally listened
- * for on the client browser.
- */
-public class ComponentEventProperty implements Cloneable
-{
-    private Map _eventMap = new HashMap();
-    private Map _formEventMap = new HashMap();
-    
-    private String _componentId;
-
-    /**
-     * Creates a new component event property mapped to the specified component id.
-     *
-     * @param componentId
-     *          The component which is the target of all mappings in this property.
-     */
-    public ComponentEventProperty(String componentId)
-    {
-        _componentId = componentId;
-    }
-
-    /**
-     * Used in cloning only currently.
-     *
-     * @param componentId
-     *          The component this property is bound to.
-     * @param events
-     *          The list of event mappings.
-     * @param formEvents
-     *          The list of form event mappings.
-     */
-    public ComponentEventProperty(String componentId, Map events, Map formEvents)
-    {
-        _componentId = componentId;
-        _eventMap = events;
-        _formEventMap = formEvents;
-    }
-
-    /**
-     * Adds a listener bound to the specified client side
-     * events.
-     * @param events
-     * @param methodName
-     * @param async
-     */
-    public void addListener(String[] events, String methodName,
-            String formId, boolean validateForm, boolean async, boolean focus)
-    {
-        addListener(events, methodName, formId, validateForm, async, focus, false);
-    }
-
-    /**
-     * Adds a listener bound to the specified client side
-     * events.
-     * 
-     * @param events The javascript events to bind to.
-     * @param methodName The method to invoke when triggered.
-     * @param formId Optional form to bind event to.
-     * @param validateForm Whether or not form client side validation should be performed.
-     * @param async  Whether or not the request should be asynchronous.
-     * @param focus Whether or not the form should recieve focus events. (if any forms are involved)
-     * @param autoSubmit Whether or not {@link org.apache.tapestry.form.IFormComponent}s should have their forms autowired for submission.
-     */
-    public void addListener(String[] events, String methodName, 
-            String formId, boolean validateForm, boolean async, boolean focus, boolean autoSubmit)
-    {
-        for (int i=0; i < events.length; i++) {
-            if (formId != null && formId.length() > 0)
-                addFormEventListener(events[i], methodName, formId, validateForm, async, focus);
-            else
-                addEventListener(events[i], methodName, autoSubmit);
-        }
-    }
-    
-    /**
-     * Adds a form listener to the specified client side event.
-     * @param event
-     * @param methodName
-     * @param formId 
-     * @param validateForm
-     */
-    public void addFormEventListener(String event, String methodName,
-            String formId, boolean validateForm, boolean async, boolean focus)
-    {
-        EventBoundListener listener = new EventBoundListener(methodName, formId, validateForm, _componentId, async, focus);
-        
-        List listeners = getFormEventListeners(event);
-        if (!listeners.contains(listener))
-            listeners.add(listener);
-    }
-    
-    /**
-     * Adds a listener to the specified client side event.
-     * @param event
-     * @param methodName
-     */
-    public void addEventListener(String event, String methodName, boolean autoSubmit)
-    {
-        EventBoundListener listener = new EventBoundListener(methodName, _componentId);
-        
-        List listeners = getEventListeners(event);
-        if (!listeners.contains(listener))
-            listeners.add(listener);
-    }
-
-    public void connectAutoSubmitEvents(String formIdPath)
-    {
-        Iterator it = getEvents().iterator();
-        List removeKeys = new ArrayList();
-        
-        while (it.hasNext()) {
-            String key = (String)it.next();
-
-            List listeners = (List) _eventMap.get(key);
-            Iterator lit = listeners.iterator();
-            while (lit.hasNext()) {
-                
-                EventBoundListener listener = (EventBoundListener) lit.next();
-
-                listener.setFormId(formIdPath);
-                lit.remove();
-                
-                List formListeners = getFormEventListeners(key);
-                if (!formListeners.contains(listener))
-                    formListeners.add(listener);
-            }
-            
-            // remove mapping if empty
-            
-            if (listeners.size() == 0) {
-                removeKeys.add(key);
-            }
-        }
-
-        for (int i=0; i < removeKeys.size(); i++) {
-            
-            _eventMap.remove(removeKeys.get(i));
-        }
-
-        it = getFormEvents().iterator();
-        
-        while (it.hasNext())
-        {
-            String key = (String) it.next();
-            List listeners = (List) _formEventMap.get(key);
-            Iterator lit = listeners.iterator();
-
-            while(lit.hasNext())
-            {
-                EventBoundListener listener = (EventBoundListener) lit.next();
-                listener.setFormId(formIdPath);
-            }
-        }
-    }
-
-    /**
-     * Replaces all instances of the existing component id mapped for this property with the new
-     * {@link org.apache.tapestry.IComponent#getIdPath()} version.
-     *
-     * @param idPath The component id path.
-     */
-    public void rewireComponentId(String idPath)
-    {
-        _componentId = idPath;
-
-        Iterator it = getEvents().iterator();
-        while (it.hasNext())
-        {
-            String key = (String) it.next();
-
-            List listeners = (List)_eventMap.get(key);
-
-            for (int i=0; i < listeners.size(); i++) {
-
-                EventBoundListener listener = (EventBoundListener) listeners.get(i);
-                listener.setComponentId(idPath);
-            }
-        }
-
-        it = getFormEvents().iterator();
-        while (it.hasNext())
-        {
-            String key = (String) it.next();
-
-            List listeners = (List)_formEventMap.get(key);
-
-            for (int i=0; i < listeners.size(); i++) {
-
-                EventBoundListener listener = (EventBoundListener) listeners.get(i);
-                listener.setComponentId(idPath);
-            }
-        }
-    }
-
-    /**
-     * @return the componentId
-     */
-    public String getComponentId()
-    {
-        return _componentId;
-    }
-
-    /**
-     * Gets the current list of listeners for a specific event,
-     * creates a new instance if one doesn't exist already.
-     * 
-     * @param event
-     * 
-     * @return The current set of listeners bound to the specified event.
-     */
-    public List getEventListeners(String event)
-    {
-        List listeners = (List)_eventMap.get(event);
-        if (listeners == null) {
-            listeners = new ArrayList();
-            _eventMap.put(event, listeners);
-        }
-        
-        return listeners;
-    }
-    
-    /**
-     * Gets the current list of listeners for a specific event,
-     * creates a new instance if one doesn't exist already.
-     * 
-     * @param event
-     * 
-     * @return The current set of listeners that will submit a form bound to the
-     *          specified event.
-     */
-    public List getFormEventListeners(String event)
-    {
-        List listeners = (List)_formEventMap.get(event);
-        if (listeners == null) {
-            listeners = new ArrayList();
-            _formEventMap.put(event, listeners);
-        }
-        
-        return listeners;
-    }
-    
-    /**
-     * The set of all non form based events.
-     * @return The unique set of events.
-     */
-    public Set getEvents()
-    {
-        return _eventMap.keySet();
-    }
-    
-    /**
-     * The set of all form based listener events.
-     * 
-     * @return All mapped form event keys.
-     */
-    public Set getFormEvents()
-    {
-        return _formEventMap.keySet();
-    }
-    
-    /**
-     * Creates a list of listeners bound to a particular form
-     * and client side browser event. 
-     * 
-     * @param formId
-     *          The form to find listeners for.
-     * @param event
-     *          The browser event that generated the request.
-     * @param append 
-     *          The optional list to add the listeners to.
-     * @return The list of listeners to invoke for the form and event passed in,
-     *          will be empty if none found.
-     */
-    public List getFormEventListeners(String formId, BrowserEvent event, List append)
-    {   
-        List ret = (append == null) ? new ArrayList() : append;
-        
-        List listeners = (List)_formEventMap.get(event.getName());
-        if (listeners == null) 
-            return ret;
-        
-        for (int i=0; i < listeners.size(); i++) {
-            EventBoundListener listener = (EventBoundListener)listeners.get(i);
-            if (listener.getFormId().equals(formId))
-                ret.add(listener);
-        }
-        
-        return ret;
-    }
-
-    void cloneEvents(Map source, Map target)
-            throws CloneNotSupportedException
-    {
-        Iterator it = source.keySet().iterator();
-        while (it.hasNext())
-        {
-            String event = (String) it.next();
-            List listeners = (List)source.get(event);
-
-            List newListeners = new ArrayList();
-            for (int i=0; i < listeners.size(); i++) {
-                EventBoundListener listener = (EventBoundListener) listeners.get(i);
-                newListeners.add(listener.clone());
-            }
-
-            target.put(event, newListeners);
-        }
-    }
-
-    public Object clone()
-    throws CloneNotSupportedException
-    {
-        Map events = new HashMap();
-        Map formEvents = new HashMap();
-
-        cloneEvents(_eventMap, events);
-        cloneEvents(_formEventMap, formEvents);
-
-        return new ComponentEventProperty(_componentId, events, formEvents);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java
deleted file mode 100644
index 7da7fd3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java
+++ /dev/null
@@ -1,194 +0,0 @@
-// Copyright Jun 2, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.internal.event;
-
-
-/**
- * Provides a mapping for listener methods that are bound to events, used
- * internally by {@link ComponentEventProperty}.
- */
-public class EventBoundListener implements Cloneable
-{
-    // the method name to invoke
-    private String _methodName;
-    // if not null the form to submit before invoking listener
-    private String _formId;
-    // if _formId set whether or not to validate form when submitted
-    private boolean _validateForm;
-    // The targeted component to listen to events on
-    private String _componentId;
-    
-    // If targeting a form, whether or not to submit it asynchronously
-    private boolean _async;
-    // Whether or not to focus the form
-    private boolean _focus;
-    // If this is an autoSubmit form bound event, ie we need to discover the formId dynamically
-    private boolean _autoSubmit;
-    
-    /**
-     * Creates a new listener binding. 
-     * @param methodName
-     *          The method to invoke.
-     */
-    public EventBoundListener(String methodName, String componentId)
-    {
-        this(methodName, componentId, true);
-    }
-
-    /**
-     * Creates a new listener binding.
-     * @param methodName
-     *          The method to invoke.
-     */
-    public EventBoundListener(String methodName, String componentId, boolean autoSubmit)
-    {
-        this(methodName, null, false, componentId, true, false, autoSubmit);
-    }
-
-    /**
-     * Creates a new listener binding. 
-     * @param methodName
-     *          The method to invoke.
-     * @param formId
-     *          If not null the form to submit before invoking listener
-     * @param validateForm
-     *          If formId is set, whether or not to validate form when submitting.
-     */
-    public EventBoundListener(String methodName, String formId, 
-            boolean validateForm, String componentId, boolean async, boolean focus, boolean autoSubmit)
-    {
-        _methodName = methodName;
-        _formId = formId;
-        _validateForm = validateForm;
-        _componentId = componentId;
-        _async = async;
-        _focus = focus;
-        _autoSubmit = autoSubmit;
-    }
-
-    /**
-     * Creates a new listener binding.
-     * @param methodName
-     *          The method to invoke.
-     * @param formId
-     *          If not null the form to submit before invoking listener
-     * @param validateForm
-     *          If formId is set, whether or not to validate form when submitting.
-     */
-    public EventBoundListener(String methodName, String formId,
-            boolean validateForm, String componentId, boolean async, boolean focus)
-    {
-        this(methodName, formId, validateForm, componentId, async, focus, true);
-    }
-    
-    /**
-     * @return the formId
-     */
-    public String getFormId()
-    {
-        return _formId;
-    }
-
-    public void setFormId(String id)
-    {
-        _formId = id;
-    }
-
-    /**
-     * @return the methodName
-     */
-    public String getMethodName()
-    {
-        return _methodName;
-    }
-    
-    /**
-     * @return the componentId
-     */
-    public String getComponentId()
-    {
-        return _componentId;
-    }
-
-    public void setComponentId(String id)
-    {
-        _componentId = id;
-    }
-
-    /**
-     * @return the validateForm
-     */
-    public boolean isValidateForm()
-    {
-        return _validateForm;
-    }
-    
-    /**
-     * Whether or not listener should submit form
-     * asynchronously.
-     * 
-     * @return True if listener is asynchronous.
-     */
-    public boolean isAsync()
-    {
-        return _async;
-    }
-    
-    public boolean shouldFocusForm()
-    {
-        return _focus;
-    }
-
-    public boolean isAutoSubmit()
-    {
-        return _autoSubmit;
-    }
-
-    public Object clone()
-    throws CloneNotSupportedException
-    {
-        return super.clone();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int hashCode()
-    {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((_componentId == null) ? 0 : _componentId.hashCode());
-        result = prime * result + ((_methodName == null) ? 0 : _methodName.hashCode());
-        result = prime * result + ((_formId == null) ? 0 : _formId.hashCode());
-        return result;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean equals(Object obj)
-    {
-        if (this == obj) return true;
-        if (obj == null) return false;
-        if (getClass() != obj.getClass()) return false;
-        final EventBoundListener other = (EventBoundListener) obj;
-        if (_componentId == null) {
-            if (other._componentId != null) return false;
-        } else if (!_componentId.equals(other._componentId)) return false;
-        if (_methodName == null) {
-            if (other._methodName != null) return false;
-        } else if (!_methodName.equals(other._methodName)) return false;
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java
deleted file mode 100644
index 2c0284b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.internal.event;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.form.FormSupport;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.util.List;
-
-
-/**
- * Managed and handles invoking listener methods for components 
- * in response to requested event listener invocations.
- *
- * @author jkuhnert
- */
-public interface IComponentEventInvoker extends ResetEventListener
-{
-    /**
-     * Adds a listener mapping for events related to the specified 
-     * component.
-     * 
-     * @param componentId 
-     *          The component to map a listener with. 
-     * @param listener 
-     *          The listener.
-     */
-    void addEventListener(String componentId, IComponentSpecification listener);
-    
-    /**
-     * Returns a list of all known listeners for the specified component.
-     * 
-     * @param componentId 
-     *          The component id to find listeners for.
-     * @return The bound listeners, or null if none exist.
-     */
-    List getEventListeners(String componentId);
-
-    /**
-     * Gets all bound property event listeners for the specified componentIdPath.
-     *
-     * @param componentIdPath
-     *          The unique id path of the component, as returned from {@link org.apache.tapestry.IComponent#getIdPath()}.
-     *
-     * @return The aggregated array of all event properties bound to the specified component, empty if none exist.
-     */
-    ComponentEventProperty[] getEventPropertyListeners(String componentIdPath);
-
-    /**
-     * Adds a mapping for an event listener that should be triggered when the specified
-     * form component with id of <code>formId</code> is submitted. This will later
-     * be used when the form is submitted to find event listeners bound to fire when 
-     * a particular form is submitted. 
-     * 
-     * @param formId 
-     *          The form the event listener is bound to. This is the submitForm parameter
-     *          of the EventListener annotation/spec driving an event occurrence to submit a particular form. It doesn't
-     *          mean that the actual event target was the form . 
-     * @param listener 
-     *          The listener that has form bound event listeners.
-     */
-    void addFormEventListener(String formId, IComponentSpecification listener);
-
-    /**
-     * Gets a list of form bound event listeners previously bound via {@link #addFormEventListener(String, IComponentSpecification)}.
-     * 
-     * @param formId 
-     *          The form to get mapped listeners for.
-     * @return The list of form event listeners of type {@link IComponentSpecification}, 
-     *          if any exist. Null if none exist.
-     */
-    List getFormEventListeners(String formId);
-    
-    /**
-     * Causes the configured listeners for the passed component to
-     * be invoked.
-     * 
-     * @param component
-     *          The component that recieved the invocations.
-     * @param cycle
-     *          The associated request.
-     * @param event
-     *          The event that started it all.
-     */
-    void invokeListeners(IComponent component, final IRequestCycle cycle, final BrowserEvent event);
-    
-    /**
-     * Causes the configured listeners for the passed {@link FormSupport}'s {@link IForm} to
-     * be invoked, if mapped to this request/event.
-     * 
-     * @param formSupport
-     *          The form support object being rendered.
-     * @param cycle
-     *          The associated request.
-     * @param event
-     *          The event that started it all.
-     */
-    void invokeFormListeners(FormSupport formSupport, final IRequestCycle cycle, final BrowserEvent event);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java
deleted file mode 100644
index b392c6f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java
+++ /dev/null
@@ -1,347 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.internal.event.impl;
-
-import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.form.FormSupport;
-import org.apache.tapestry.internal.event.ComponentEventProperty;
-import org.apache.tapestry.internal.event.EventBoundListener;
-import org.apache.tapestry.internal.event.IComponentEventInvoker;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IEventListener;
-
-import java.util.*;
-
-
-/**
- * Implementation of {@link IComponentEventInvoker}.
- */
-public class ComponentEventInvoker implements IComponentEventInvoker, ResetEventListener
-{
-    static final ComponentEventProperty[] EMPTY_PROPERTIES = new ComponentEventProperty[0];
-
-    // Mapped component id path -> List of IEventListeners
-    private Map _components = new ConcurrentHashMap();
-    // Mapped form id path -> List of IEventListeners
-    private Map _formComponents = new ConcurrentHashMap();
-    // Used to invoke actual listener methods
-    private ListenerInvoker _invoker;
-
-    // Cached set of ComponentEventProperty[] arrays mapped to specific components
-    private Map _propertyCache = new ConcurrentHashMap();
-
-    /**
-     * {@inheritDoc}
-     */
-    public void invokeListeners(IComponent component, IRequestCycle cycle, BrowserEvent event)
-    {
-        Defense.notNull(component, "component");
-        Defense.notNull(cycle, "cycle");
-        Defense.notNull(event, "event");
-
-        invokeComponentListeners(component, cycle, event);
-
-        invokeElementListeners(component, cycle, event);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void invokeFormListeners(FormSupport formSupport, final IRequestCycle cycle, final BrowserEvent event)
-    {
-        Defense.notNull(formSupport, "formSupport");
-        Defense.notNull(cycle, "cycle");
-        Defense.notNull(event, "event");
-
-        IForm form = formSupport.getForm();
-        String formIdPath = form.getExtendedId();
-
-        String targetId = (String)event.getTarget().get("id");
-        String componentId = event.getComponentId();
-
-        if (targetId == null || componentId == null)
-            return;
-
-        List comps = getFormEventListeners(formIdPath);
-        if (comps == null)
-            return;
-
-        boolean disableFocus = false;
-
-        for (int i=0; i < comps.size(); i++)
-        {
-            IComponentSpecification spec = (IComponentSpecification)comps.get(i);
-            EventBoundListener[] listeners = spec.getFormEvents(formIdPath, event);
-
-            IComponent target = null;
-            if (spec.isPageSpecification())
-            {
-                target = form.getPage();
-            } else {
-                target = findComponent(form.getPage().getComponents().values(), spec);
-            }
-
-            for (int e=0; e < listeners.length; e++)
-            {
-                // ensure ~only~ the method that targeted this event gets called!
-
-                if (!listeners[e].getComponentId().endsWith(componentId))
-                    continue;
-
-                // clear validation errors but not input if async validation is
-                // disabled
-
-                if (!listeners[e].isValidateForm())
-                {
-                    form.getDelegate().clearErrors();
-                }
-
-                // handle disabling focus
-                if (!disableFocus && !listeners[e].shouldFocusForm())
-                    disableFocus = true;
-
-                // defer execution until after form is done rewinding
-
-                form.addDeferredRunnable(
-                  new FormRunnable(target.getListeners().getListener(listeners[e].getMethodName()),
-                                   target,
-                                   cycle));
-            }
-        }
-
-        // Form uses cycle attributes to test whether or not to focus .
-        // The attribute existing at all is enough to bypass focusing.
-        
-        if (disableFocus)
-        {
-            cycle.disableFocus();
-        }
-    }
-
-    void invokeComponentListeners(IComponent component, IRequestCycle cycle, BrowserEvent event)
-    {
-        String idPath = component.getExtendedId();
-        List listeners = getEventListeners(idPath);
-        if (listeners == null)
-            return;
-
-        for (int i = 0; i < listeners.size(); i++)
-        {
-            IComponentSpecification listener = (IComponentSpecification)listeners.get(i);
-
-            IComponent target;
-            ComponentEventProperty props;
-
-            if (listener.isPageSpecification())
-            {
-                target = component.getPage();
-                props = listener.getComponentEvents(idPath);
-            } else
-            {
-                target = findComponent(component.getPage().getComponents().values(), listener);
-                props = target.getSpecification().getComponentEvents(idPath);
-            }
-            
-            if (props == null)
-                continue;
-
-            List clisteners = props.getEventListeners(event.getName());
-            for (int e=0; e < clisteners.size(); e++)
-            {
-                EventBoundListener eventListener = (EventBoundListener)clisteners.get(e);
-
-                _invoker.invokeListener(target.getListeners().getListener(eventListener.getMethodName()), target, cycle);
-            }
-
-        }
-    }
-
-    void invokeElementListeners(IComponent component, IRequestCycle cycle, BrowserEvent event)
-    {
-        String targetId = (String)event.getTarget().get("id");
-        if (targetId == null)
-            return;
-
-        ComponentEventProperty prop = component.getSpecification().getElementEvents(targetId);
-        if (prop == null)
-            return;
-
-        List listeners = prop.getEventListeners(event.getName());
-
-        for (int i=0; i < listeners.size(); i++)
-        {
-            EventBoundListener listener = (EventBoundListener)listeners.get(i);
-
-            _invoker.invokeListener(component.getListeners().getListener(listener.getMethodName()), component, cycle);
-        }
-    }
-
-    IComponent findComponent(Collection comps, IComponentSpecification spec)
-    {
-        IComponent ret = null;
-
-        Iterator it = comps.iterator();
-
-        while (it.hasNext())
-        {
-            IComponent comp = (IComponent)it.next();
-
-            if (comp.getSpecification().equals(spec))
-            {
-                ret = comp;
-                break;
-            }
-
-            ret = findComponent(comp.getComponents().values(), spec);
-            if (ret != null)
-                break;
-        }
-
-        return ret;
-    }
-
-    /** Local runnable for deferred form connections. */
-    class FormRunnable implements Runnable {
-
-        private IActionListener _listener;
-        private IComponent _component;
-        private IRequestCycle _cycle;
-
-        public FormRunnable(IActionListener listener, IComponent comp, IRequestCycle cycle)
-        {
-            _listener = listener;
-            _component = comp;
-            _cycle = cycle;
-        }
-
-        public void run()
-        {
-            _invoker.invokeListener(_listener, _component, _cycle);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addEventListener(String componentId, IComponentSpecification listener)
-    {
-        List listeners = (List)_components.get(componentId);
-
-        if (listeners == null)
-        {
-            listeners = new ArrayList();
-            _components.put(componentId, listeners);
-        }
-
-        if (!listeners.contains(listener))
-        {
-            listeners.add(listener);
-        }
-
-        _propertyCache.remove(componentId);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public List getEventListeners(String componentId)
-    {
-        if (componentId == null)
-            return null;
-
-        return (List)_components.get(componentId);
-    }
-
-    public ComponentEventProperty[] getEventPropertyListeners(String componentIdPath)
-    {
-        if (componentIdPath == null)
-            return EMPTY_PROPERTIES;
-
-        ComponentEventProperty[] ret = (ComponentEventProperty[])_propertyCache.get(componentIdPath);
-        if (ret != null)
-            return ret;
-
-        List listeners = getEventListeners(componentIdPath);
-        if (listeners == null || listeners.size() < 1)
-            return EMPTY_PROPERTIES;
-
-        List props = new ArrayList();
-        for (int i=0; i < listeners.size(); i++)
-        {
-            IEventListener listener = (IEventListener)listeners.get(i);
-
-            props.add(listener.getComponentEvents(componentIdPath));
-        }
-
-        ret = (ComponentEventProperty[])props.toArray(new ComponentEventProperty[props.size()]);
-
-        _propertyCache.put(componentIdPath, ret);
-
-        return ret;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addFormEventListener(String formId, IComponentSpecification listener)
-    {
-        List listeners = (List)_formComponents.get(formId);
-
-        if (listeners == null)
-        {
-            listeners = new ArrayList();
-            _formComponents.put(formId, listeners);
-        }
-
-        if (!listeners.contains(listener))
-        {
-            listeners.add(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public List getFormEventListeners(String formId)
-    {
-        if (formId == null)
-            return null;
-
-        return (List)_formComponents.get(formId);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void resetEventDidOccur()
-    {
-        _components.clear();
-        _formComponents.clear();
-        _propertyCache.clear();
-    }
-
-    /** Injected. */
-    public void setInvoker(ListenerInvoker invoker)
-    {
-        _invoker = invoker;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/package.html
deleted file mode 100644
index 513c98d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/package.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Event related internal classes only. Use at your own risk as they may be changed/removed
-at any point.
-</p>
-
-@author Jesse Kuhnert <a href="mailto:jkuhnert@apache.org">jkuhnert@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/package.html
deleted file mode 100644
index 513c98d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/event/package.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Event related internal classes only. Use at your own risk as they may be changed/removed
-at any point.
-</p>
-
-@author Jesse Kuhnert <a href="mailto:jkuhnert@apache.org">jkuhnert@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/pageload/PageKey.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/pageload/PageKey.java
deleted file mode 100644
index 455ba81..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/internal/pageload/PageKey.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.apache.tapestry.internal.pageload;
-
-import java.io.Serializable;
-import java.util.Locale;
-
-/**
- * Alterantive implementation of {@link org.apache.tapestry.util.MultiKey} that is specifically
- * intended to be used to store and retrieve pages from a pool.
- *
- */
-public class PageKey implements Serializable {
-
-    String _pageName;
-    Locale _locale;
-
-    /**
-     * Constructs a new instance for the specified page / locale.
-     * @param pageName
-     *          The page.
-     * @param locale
-     *          Locale of the page.
-     */
-    public PageKey(String pageName, Locale locale)
-    {
-        _pageName = pageName;
-        _locale = locale;
-    }
-
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-    public String toString()
-    {
-        return "PageKey[" +
-               "_pageName='" + _pageName + '\'' +
-               '\n' +
-               ", _locale=" + _locale +
-               '\n' +
-               ']';
-    }
-
-    public boolean equals(Object o)
-    {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        PageKey pageKey = (PageKey) o;
-
-        if (_locale != null ? !_locale.equals(pageKey._locale) : pageKey._locale != null) return false;
-        if (_pageName != null ? !_pageName.equals(pageKey._pageName) : pageKey._pageName != null) return false;
-
-        return true;
-    }
-
-    public int hashCode()
-    {
-        int result;
-        result = (_pageName != null ? _pageName.hashCode() : 0);
-        result = 31 * result + (_locale != null ? _locale.hashCode() : 0);
-        return result;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/CDL.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/CDL.java
deleted file mode 100644
index 421a729..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/CDL.java
+++ /dev/null
@@ -1,309 +0,0 @@
-package org.apache.tapestry.json;
-
-/*
- Copyright (c) 2002 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-import java.text.ParseException;
-
-/**
- * This provides static methods to convert comma delimited text into a
- * JSONArray, and to covert a JSONArray into comma delimited text. Comma
- * delimited text is a very popular format for data interchange. It is
- * understood by most database, spreadsheet, and organizer programs.
- * <p>
- * Each row of text represents a row in a table or a data record. Each row ends
- * with a NEWLINE character. Each row contains one or more values. Values are
- * separated by commas. A value can contain any character except for comma,
- * unless is is wrapped in single quotes or double quotes.
- * <p>
- * The first row usually contains the names of the columns.
- * <p>
- * A comma delimited list can be converted into a JSONArray of JSONObjects. The
- * names for the elements in the JSONObjects can be taken from the names in the
- * first row.
- */
-public final class CDL
-{
-
-    /* defeat instantiation */
-    private CDL()
-    {
-    }
-    
-    /**
-     * Get the next value. The value can be wrapped in quotes. The value can be
-     * empty.
-     * 
-     * @param x
-     *            A JSONTokener of the source text.
-     * @return The value string, or null if empty.
-     * @throws java.text.ParseException
-     *             if the quoted string is badly formed.
-     */
-    private static String getValue(JSONTokener x)
-        throws java.text.ParseException
-    {
-        char c;
-        do
-        {
-            c = x.next();
-        } while(c <= ' ' && c != 0);
-        switch(c)
-        {
-        case 0:
-            return null;
-        case '"':
-        case '\'':
-            return x.nextString(c);
-        case ',':
-            x.back();
-            return "";
-        default:
-            x.back();
-            return x.nextTo(',');
-        }
-    }
-
-    /**
-     * Produce a JSONArray of strings from a row of comma delimited values.
-     * 
-     * @param x
-     *            A JSONTokener of the source text.
-     * @return A JSONArray of strings.
-     * @throws ParseException
-     */
-    public static JSONArray rowToJSONArray(JSONTokener x)
-        throws ParseException
-    {
-        JSONArray ja = new JSONArray();
-        while(true)
-        {
-            String value = getValue(x);
-            if (value == null) { return null; }
-            ja.put(value);
-            while(true)
-            {
-                char c = x.next();
-                if (c == ',')
-                {
-                    break;
-                }
-                if (c != ' ')
-                {
-                    if (c == '\n' || c == '\r' || c == 0) { return ja; }
-                    throw x.syntaxError("Bad character '" + c + "' (" + (int) c
-                            + ").");
-                }
-            }
-        }
-    }
-
-    /**
-     * Produce a JSONObject from a row of comma delimited text, using a parallel
-     * JSONArray of strings to provides the names of the elements.
-     * 
-     * @param names
-     *            A JSONArray of names. This is commonly obtained from the first
-     *            row of a comma delimited text file using the rowToJSONArray
-     *            method.
-     * @param x
-     *            A JSONTokener of the source text.
-     * @return A JSONObject combining the names and values.
-     * @throws ParseException
-     */
-    public static JSONObject rowToJSONObject(JSONArray names, JSONTokener x)
-        throws ParseException
-    {
-        JSONArray ja = rowToJSONArray(x);
-        return ja != null ? ja.toJSONObject(names) : null;
-    }
-
-    /**
-     * Produce a JSONArray of JSONObjects from a comma delimited text string,
-     * using the first row as a source of names.
-     * 
-     * @param string
-     *            The comma delimited text.
-     * @return A JSONArray of JSONObjects.
-     * @throws ParseException
-     */
-    public static JSONArray toJSONArray(String string)
-        throws ParseException
-    {
-        return toJSONArray(new JSONTokener(string));
-    }
-
-    /**
-     * Produce a JSONArray of JSONObjects from a comma delimited text string,
-     * using the first row as a source of names.
-     * 
-     * @param x
-     *            The JSONTokener containing the comma delimited text.
-     * @return A JSONArray of JSONObjects.
-     * @throws ParseException
-     */
-    public static JSONArray toJSONArray(JSONTokener x)
-        throws ParseException
-    {
-        return toJSONArray(rowToJSONArray(x), x);
-    }
-
-    /**
-     * Produce a JSONArray of JSONObjects from a comma delimited text string
-     * using a supplied JSONArray as the source of element names.
-     * 
-     * @param names
-     *            A JSONArray of strings.
-     * @param string
-     *            The comma delimited text.
-     * @return A JSONArray of JSONObjects.
-     * @throws ParseException
-     */
-    public static JSONArray toJSONArray(JSONArray names, String string)
-        throws ParseException
-    {
-        return toJSONArray(names, new JSONTokener(string));
-    }
-
-    /**
-     * Produce a JSONArray of JSONObjects from a comma delimited text string
-     * using a supplied JSONArray as the source of element names.
-     * 
-     * @param names
-     *            A JSONArray of strings.
-     * @param x
-     *            A JSONTokener of the source text.
-     * @return A JSONArray of JSONObjects.
-     * @throws java.text.ParseException
-     */
-    public static JSONArray toJSONArray(JSONArray names, JSONTokener x)
-        throws java.text.ParseException
-    {
-        if (names == null || names.length() == 0) { return null; }
-        JSONArray ja = new JSONArray();
-        while(true)
-        {
-            JSONObject jo = rowToJSONObject(names, x);
-            if (jo == null)
-            {
-                break;
-            }
-            ja.put(jo);
-        }
-        if (ja.length() == 0) { return null; }
-        return ja;
-    }
-
-    /**
-     * Produce a comma delimited text row from a JSONArray. Values containing
-     * the comma character will be quoted.
-     * 
-     * @param ja
-     *            A JSONArray of strings.
-     * @return A string ending in NEWLINE.
-     */
-    public static String rowToString(JSONArray ja)
-    {
-        StringBuffer sb = new StringBuffer();
-        for(int i = 0; i < ja.length(); i += 1)
-        {
-            if (i > 0)
-            {
-                sb.append(',');
-            }
-            Object o = ja.opt(i);
-            if (o != null)
-            {
-                String s = o.toString();
-                if (s.indexOf(',') >= 0)
-                {
-                    if (s.indexOf('"') >= 0)
-                    {
-                        sb.append('\'');
-                        sb.append(s);
-                        sb.append('\'');
-                    }
-                    else
-                    {
-                        sb.append('"');
-                        sb.append(s);
-                        sb.append('"');
-                    }
-                }
-                else
-                {
-                    sb.append(s);
-                }
-            }
-        }
-        sb.append('\n');
-        return sb.toString();
-
-    }
-
-    /**
-     * Produce a comma delimited text from a JSONArray of JSONObjects. The first
-     * row will be a list of names obtained by inspecting the first JSONObject.
-     * 
-     * @param ja
-     *            A JSONArray of JSONObjects.
-     * @return A comma delimited text.
-     */
-    public static String toString(JSONArray ja)
-    {
-        JSONObject jo = ja.optJSONObject(0);
-        if (jo != null)
-        {
-            JSONArray names = jo.names();
-            if (names != null) { return rowToString(names)
-                    + toString(names, ja); }
-        }
-        return null;
-    }
-
-    /**
-     * Produce a comma delimited text from a JSONArray of JSONObjects using a
-     * provided list of names. The list of names is not included in the output.
-     * 
-     * @param names
-     *            A JSONArray of strings.
-     * @param ja
-     *            A JSONArray of JSONObjects.
-     * @return A comma delimited text.
-     */
-    public static String toString(JSONArray names, JSONArray ja)
-    {
-        if (names == null || names.length() == 0) { return null; }
-        StringBuffer sb = new StringBuffer();
-        for(int i = 0; i < ja.length(); i += 1)
-        {
-            JSONObject jo = ja.optJSONObject(i);
-            if (jo != null)
-            {
-                sb.append(rowToString(jo.toJSONArray(names)));
-            }
-        }
-        return sb.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/Cookie.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/Cookie.java
deleted file mode 100644
index 86e8b2f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/Cookie.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.apache.tapestry.json;
-
-/*
- Copyright (c) 2002 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-import java.text.ParseException;
-
-/**
- * Convert a web browser cookie specification to a JSONObject and back. JSON and
- * Cookies are both notations for name/value pairs.
- * 
- * @author JSON.org
- * @version 0.1
- */
-public final class Cookie
-{
-
-    /* defeat instantiation */
-    private Cookie()
-    {
-    }
-
-    /**
-     * Produce a copy of a string in which the characters '+', '%', '=', ';' and
-     * control characters are replaced with "%hh". This is a gentle form of URL
-     * encoding, attempting to cause as little distortion to the string as
-     * possible. The characters '=' and ';' are meta characters in cookies. By
-     * convention, they are escaped using the URL-encoding. This is only a
-     * convention, not a standard. Often, cookies are expected to have encoded
-     * values. We encode '=' and ';' because we must. We encode '%' and '+'
-     * because they are meta characters in URL encoding.
-     * 
-     * @param string
-     *            The source string.
-     * @return The escaped result.
-     */
-    public static String escape(String string)
-    {
-        char c;
-        String s = string.trim();
-        StringBuffer sb = new StringBuffer();
-        int len = s.length();
-        for(int i = 0; i < len; i += 1)
-        {
-            c = s.charAt(i);
-            if (c < ' ' || c == '+' || c == '%' || c == '=' || c == ';')
-            {
-                sb.append('%');
-                sb.append(Character.forDigit((char) ((c >>> 4) & 0x0f), 16));
-                sb.append(Character.forDigit((char) (c & 0x0f), 16));
-            }
-            else
-            {
-                sb.append(c);
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Convert a cookie specification string into a JSONObject. The string will
-     * contain a name value pair separated by '='. The name and the value will
-     * be unescaped, possibly converting '+' and '%' sequences. The cookie
-     * properties may follow, separated by ';', also represented as name=value
-     * (except the secure property, which does not have a value). The name will
-     * be stored under the key "name", and the value will be stored under the
-     * key "value". This method does not do checking or validation of the
-     * parameters. It only converts the cookie string into a JSONObject.
-     * 
-     * @param string
-     *            The cookie specification string.
-     * @return A JSONObject containing "name", "value", and possibly other
-     *         members.
-     * @throws ParseException
-     */
-    public static JSONObject toJSONObject(String string)
-        throws ParseException
-    {
-        String n;
-        JSONObject o = new JSONObject();
-        Object v;
-        JSONTokener x = new JSONTokener(string);
-        o.put("name", x.nextTo('='));
-        x.next('=');
-        o.put("value", x.nextTo(';'));
-        x.next();
-        while(x.more())
-        {
-            n = JSONTokener.unescape(x.nextTo("=;"));
-            if (x.next() != '=')
-            {
-                if (n.equals("secure"))
-                {
-                    v = Boolean.TRUE;
-                }
-                else
-                {
-                    throw x.syntaxError("Missing '=' in cookie parameter.");
-                }
-            }
-            else
-            {
-                v = JSONTokener.unescape(x.nextTo(';'));
-                x.next();
-            }
-            o.put(n, v);
-        }
-        return o;
-    }
-
-    /**
-     * Convert a JSONObject into a cookie specification string. The JSONObject
-     * must contain "name" and "value" members. If the JSONObject contains
-     * "expires", "domain", "path", or "secure" members, they will be appended
-     * to the cookie specification string. All other members are ignored.
-     * 
-     * @param o
-     *            A JSONObject
-     * @return A cookie specification string
-     */
-    public static String toString(JSONObject o)
-    {
-        StringBuffer sb = new StringBuffer();
-
-        sb.append(escape(o.getString("name")));
-        sb.append("=");
-        sb.append(escape(o.getString("value")));
-        if (o.has("expires"))
-        {
-            sb.append(";expires=");
-            sb.append(o.getString("expires"));
-        }
-        if (o.has("domain"))
-        {
-            sb.append(";domain=");
-            sb.append(escape(o.getString("domain")));
-        }
-        if (o.has("path"))
-        {
-            sb.append(";path=");
-            sb.append(escape(o.getString("path")));
-        }
-        if (o.optBoolean("secure"))
-        {
-            sb.append(";secure");
-        }
-        return sb.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/CookieList.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/CookieList.java
deleted file mode 100644
index 802fd34..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/CookieList.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.apache.tapestry.json;
-
-/*
- Copyright (c) 2002 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-import java.text.ParseException;
-import java.util.Iterator;
-
-/**
- * Convert a web browser cookie list string to a JSONObject and back.
- * 
- * @author JSON.org
- * @version 0.1
- */
-public final class CookieList
-{
-
-    /* defeat instantiation */
-    private CookieList() { }
-    
-    /**
-     * Convert a cookie list into a JSONObject. A cookie list is a sequence of
-     * name/value pairs. The names are separated from the values by '='. The
-     * pairs are separated by ';'. The names and the values will be unescaped,
-     * possibly converting '+' and '%' sequences. To add a cookie to a cooklist,
-     * cookielistJSONObject.put(cookieJSONObject.getString("name"),
-     * cookieJSONObject.getString("value"));
-     * 
-     * @param string
-     *            A cookie list string
-     * @return A JSONObject
-     * @throws ParseException
-     */
-    public static JSONObject toJSONObject(String string)
-        throws ParseException
-    {
-        JSONObject o = new JSONObject();
-        JSONTokener x = new JSONTokener(string);
-        while(x.more())
-        {
-            String name = JSONTokener.unescape(x.nextTo('='));
-            x.next('=');
-            o.put(name, JSONTokener.unescape(x.nextTo(';')));
-            x.next();
-        }
-        return o;
-    }
-
-    /**
-     * Convert a JSONObject into a cookie list. A cookie list is a sequence of
-     * name/value pairs. The names are separated from the values by '='. The
-     * pairs are separated by ';'. The characters '%', '+', '=', and ';' in the
-     * names and values are replaced by "%hh".
-     * 
-     * @param o
-     *            A JSONObject
-     * @return A cookie list string
-     */
-    public static String toString(JSONObject o)
-    {
-        boolean b = false;
-        Iterator keys = o.keys();
-        String s;
-        StringBuffer sb = new StringBuffer();
-        while(keys.hasNext())
-        {
-            s = keys.next().toString();
-            if (!o.isNull(s))
-            {
-                if (b)
-                {
-                    sb.append(';');
-                }
-                sb.append(Cookie.escape(s));
-                sb.append("=");
-                sb.append(Cookie.escape(o.getString(s)));
-                b = true;
-            }
-        }
-        return sb.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/HTTP.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/HTTP.java
deleted file mode 100644
index 9a10624..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/HTTP.java
+++ /dev/null
@@ -1,214 +0,0 @@
-package org.apache.tapestry.json;
-
-/*
- Copyright (c) 2002 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-import java.text.ParseException;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * Convert an HTTP header to a JSONObject and back.
- * 
- * @author JSON.org
- * @version 0.1
- */
-public final class HTTP
-{
-
-    /** Carriage return/line feed. */
-    public static final String CRLF = "\r\n";
-
-    /* defeat instantiation */
-    private HTTP()
-    {
-    }
-
-    /**
-     * Convert an HTTP header string into a JSONObject. It can be a request
-     * header or a response header. A request header will contain
-     * 
-     * <pre>
-     * {
-     *     Method: &quot;POST&quot; (for example),
-     *     &quot;Request-URI&quot;: &quot;/&quot; (for example),
-     *     &quot;HTTP-Version&quot;: &quot;HTTP/1.1&quot; (for example)
-     *  }
-     * </pre>
-     * 
-     * A response header will contain
-     * 
-     * <pre>
-     * {
-     *     &quot;HTTP-Version&quot;: &quot;HTTP/1.1&quot; (for example),
-     *     &quot;Status-Code&quot;: &quot;200&quot; (for example),
-     *     &quot;Reason-Phrase&quot;: &quot;OK&quot; (for example)
-     *  }
-     * </pre>
-     * 
-     * In addition, the other parameters in the header will be captured, using
-     * the HTTP field names as JSON names, so that
-     * 
-     * <pre>
-     *     Date: Sun, 26 May 2002 18:06:04 GMT
-     *     Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&amp;b=2&amp;f=s
-     *     Cache-Control: no-cache
-     * </pre>
-     * 
-     * become
-     * 
-     * <pre>
-     * {...
-     *     Date: &quot;Sun, 26 May 2002 18:06:04 GMT&quot;,
-     *     Cookie: &quot;Q=q2=PPEAsg--; B=677gi6ouf29bn&amp;b=2&amp;f=s&quot;,
-     *     &quot;Cache-Control&quot;: &quot;no-cache&quot;,
-     *  ...}
-     * </pre>
-     * 
-     * It does no further checking or conversion. It does not parse dates. It
-     * does not do '%' transforms on URLs.
-     * 
-     * @param string
-     *            An HTTP header string.
-     * @return A JSONObject containing the elements and attributes of the XML
-     *         string.
-     * @throws ParseException
-     */
-    public static JSONObject toJSONObject(String string)
-        throws ParseException
-    {
-        JSONObject o = new JSONObject();
-        HTTPTokener x = new HTTPTokener(string);
-        String t;
-
-        t = x.nextToken();
-        if (t.toUpperCase().startsWith("HTTP"))
-        {
-
-            // Response
-
-            o.put("HTTP-Version", t);
-            o.put("Status-Code", x.nextToken());
-            o.put("Reason-Phrase", x.nextTo('\0'));
-            x.next();
-
-        }
-        else
-        {
-
-            // Request
-
-            o.put("Method", t);
-            o.put("Request-URI", x.nextToken());
-            o.put("HTTP-Version", x.nextToken());
-        }
-
-        // Fields
-
-        while(x.more())
-        {
-            String name = x.nextTo(':');
-            x.next(':');
-            o.put(name, x.nextTo('\0'));
-            x.next();
-        }
-        return o;
-    }
-
-    /**
-     * Convert a JSONObject into an HTTP header. A request header must contain
-     * 
-     * <pre>
-     * {
-     *     Method: &quot;POST&quot; (for example),
-     *     &quot;Request-URI&quot;: &quot;/&quot; (for example),
-     *     &quot;HTTP-Version&quot;: &quot;HTTP/1.1&quot; (for example)
-     *  }
-     * </pre>
-     * 
-     * A response header must contain
-     * 
-     * <pre>
-     * {
-     *     &quot;HTTP-Version&quot;: &quot;HTTP/1.1&quot; (for example),
-     *     &quot;Status-Code&quot;: &quot;200&quot; (for example),
-     *     &quot;Reason-Phrase&quot;: &quot;OK&quot; (for example)
-     *  }
-     * </pre>
-     * 
-     * Any other members of the JSONObject will be output as HTTP fields. The
-     * result will end with two CRLF pairs.
-     * 
-     * @param o
-     *            A JSONObject
-     * @return An HTTP header string.
-     * @throws NoSuchElementException
-     *             if the object does not contain enough information.
-     */
-    public static String toString(JSONObject o)
-    {
-        Iterator keys = o.keys();
-        String s;
-        StringBuffer sb = new StringBuffer();
-        if (o.has("Status-Code") && o.has("Reason-Phrase"))
-        {
-            sb.append(o.getString("HTTP-Version"));
-            sb.append(' ');
-            sb.append(o.getString("Status-Code"));
-            sb.append(' ');
-            sb.append(o.getString("Reason-Phrase"));
-        }
-        else if (o.has("Method") && o.has("Request-URI"))
-        {
-            sb.append(o.getString("Method"));
-            sb.append(' ');
-            sb.append('"');
-            sb.append(o.getString("Request-URI"));
-            sb.append('"');
-            sb.append(' ');
-            sb.append(o.getString("HTTP-Version"));
-        }
-        else
-        {
-            throw new NoSuchElementException(
-                    "Not enough material for an HTTP header.");
-        }
-        sb.append(CRLF);
-        while(keys.hasNext())
-        {
-            s = keys.next().toString();
-            if (!s.equals("HTTP-Version") && !s.equals("Status-Code")
-                    && !s.equals("Reason-Phrase") && !s.equals("Method")
-                    && !s.equals("Request-URI") && !o.isNull(s))
-            {
-                sb.append(s);
-                sb.append(": ");
-                sb.append(o.getString(s));
-                sb.append(CRLF);
-            }
-        }
-        sb.append(CRLF);
-        return sb.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/HTTPTokener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/HTTPTokener.java
deleted file mode 100644
index 6a2681c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/HTTPTokener.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.apache.tapestry.json;
-
-/*
-Copyright (c) 2002 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-import java.text.ParseException;
-
-/**
- * The HTTPTokener extends the JSONTokener to provide additional methods
- * for the parsing of HTTP headers.
- * @author JSON.org
- * @version 0.1
- */
-public class HTTPTokener extends JSONTokener {
-
-    /**
-     * Construct an XMLTokener from a string.
-     * @param s A source string.
-     */
-    public HTTPTokener(String s) {
-        super(s);
-    }
-
-
-    /**
-     * Get the next token or string. This is used in parsing HTTP headers.
-     * @throws ParseException
-     * @return A String.
-     */
-    public String nextToken() throws ParseException {
-        char c;
-        char q;
-        StringBuffer sb = new StringBuffer();
-        do {
-            c = next();
-        } while (Character.isWhitespace(c));
-        if (c == '"' || c == '\'') {
-            q = c;
-            while (true) {
-                c = next();
-                if (c < ' ') {
-                    throw syntaxError("Unterminated string.");
-                }
-                if (c == q) {
-                    return sb.toString();
-                }
-                sb.append(c);
-            }
-        } 
-        while (true) {
-            if (c == 0 || Character.isWhitespace(c)) {
-                return sb.toString();
-            }
-            sb.append(c);
-            c = next();
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/IJSONWriter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/IJSONWriter.java
deleted file mode 100644
index 8ab00a0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/IJSONWriter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.json;
-
-
-/**
- * JavaScript Object Notation writer which manages two core object response 
- * types, {@link JSONObject} or {@link JSONArray}. It is up to the components
- * participating in a particular response to decide how to cooperate and build
- * a JSON structure that their client side will accept.
- * 
- * @see "http://www.json.org/"
- * @author JSON.org, jkuhnert
- */
-public interface IJSONWriter
-{   
-    /**
-     * Provides access to the core outer {@link JSONObject} being 
-     * rendered to a response. The object may not necessarily be instantiated
-     * until requested, for instances where a response should be a pure array
-     * or other.
-     * 
-     * @return The {@link JSONObject} being delegated to.
-     */
-    JSONObject object();
-    
-    /**
-     * Provides access to the core outer {@link JSONArray} being 
-     * rendered to a response. The object may not necessarily be instantiated
-     * until requested.
-     * 
-     * @return The {@link JSONArray} being delegated to.
-     */
-    JSONArray array();
-    
-    /**
-     * Causes any un-ended blocks to be closed, as well as 
-     * any reasources associated with writer to be flushed/written.
-     */
-    void close();
-    
-    /**
-     * Forwards <code>flush()</code> to this <code>IMarkupWriter</code>'s
-     * <code>PrintWriter</code>.
-     */
-    void flush();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONArray.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONArray.java
deleted file mode 100644
index 30a790d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONArray.java
+++ /dev/null
@@ -1,799 +0,0 @@
-package org.apache.tapestry.json;
-
-/*
- Copyright (c) 2002 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.NoSuchElementException;
-
-/**
- * A JSONArray is an ordered sequence of values. Its external form is a string
- * wrapped in square brackets with commas between the values. The internal form
- * is an object having get() and opt() methods for accessing the values by
- * index, and put() methods for adding or replacing values. The values can be
- * any of these types: Boolean, JSONArray, JSONObject, Number, String, or the
- * JSONObject.NULL object.
- * <p>
- * The constructor can convert a JSON external form string into an internal form
- * Java object. The toString() method creates an external form string.
- * <p>
- * A get() method returns a value if one can be found, and throws an exception
- * if one cannot be found. An opt() method returns a default value instead of
- * throwing an exception, and so is useful for obtaining optional values.
- * <p>
- * The generic get() and opt() methods return an object which you can cast or
- * query for type. There are also typed get() and opt() methods that do typing
- * checking and type coersion for you.
- * <p>
- * The texts produced by the toString() methods are very strict. The
- * constructors are more forgiving in the texts they will accept.
- * <ul>
- * <li>An extra <code>,</code>&nbsp;<small>(comma)</small> may appear just
- * before the closing bracket.</li>
- * <li>The null value will be inserted when there is <code>,</code>&nbsp;<small>(comma)</small>
- * elision.</li>
- * <li>Strings may be quoted with <code>'</code>&nbsp;<small>(single quote)</small>.</li>
- * <li>Strings do not need to be quoted at all if they do not begin with a
- * quote or single quote, and if they do not contain leading or trailing spaces,
- * and if they do not contain any of these characters:
- * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers and
- * if they are not the reserved words <code>true</code>, <code>false</code>,
- * or <code>null</code>.</li>
- * <li>Values can be followed by <code>;</code> as well as by <code>,</code></li>
- * <li>Numbers may have the <code>0-</code> <small>(octal)</small> or
- * <code>0x-</code> <small>(hex)</small> prefix.</li>
- * <li>Line comments can begin with <code>#</code></li>
- * </ul>
- * 
- * @author JSON.org
- * @version 1
- */
-public class JSONArray
-{
-
-    /**
-     * The getArrayList where the JSONArray's properties are kept.
-     */
-    private ArrayList myArrayList;
-
-    /**
-     * Construct an empty JSONArray.
-     */
-    public JSONArray()
-    {
-        this.myArrayList = new ArrayList();
-    }
-
-    /**
-     * Construct a JSONArray from a JSONTokener.
-     * 
-     * @param x
-     *            A JSONTokener
-     * @exception ParseException
-     *                A JSONArray must start with '['
-     * @exception ParseException
-     *                Expected a ',' or ']'
-     */
-    public JSONArray(JSONTokener x)
-        throws ParseException
-    {
-        this();
-        if (x.nextClean() != '[') { throw x
-                .syntaxError("A JSONArray must start with '['"); }
-        if (x.nextClean() == ']') { return; }
-        x.back();
-        while(true)
-        {
-            if (x.nextClean() == ',')
-            {
-                x.back();
-                this.myArrayList.add(null);
-            }
-            else
-            {
-                x.back();
-                this.myArrayList.add(x.nextValue());
-            }
-            switch(x.nextClean())
-            {
-            case ';':
-            case ',':
-                if (x.nextClean() == ']') { return; }
-                x.back();
-                break;
-            case ']':
-                return;
-            default:
-                throw x.syntaxError("Expected a ',' or ']'");
-            }
-        }
-    }
-
-    /**
-     * Construct a JSONArray from a source string.
-     * 
-     * @param string
-     *            A string that begins with <code>[</code>&nbsp;<small>(left
-     *            bracket)</small> and ends with <code>]</code>&nbsp;<small>(right
-     *            bracket)</small>.
-     * @exception ParseException
-     *                The string must conform to JSON syntax.
-     */
-    public JSONArray(String string)
-        throws ParseException
-    {
-        this(new JSONTokener(string));
-    }
-
-    /**
-     * Construct a JSONArray from a Collection.
-     * 
-     * @param collection
-     *            A Collection.
-     */
-    public JSONArray(Collection collection)
-    {
-        this.myArrayList = new ArrayList(collection);
-    }
-
-    /**
-     * Get the object value associated with an index.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return An object value.
-     * @exception NoSuchElementException
-     */
-    public Object get(int index)
-    {
-        Object o = opt(index);
-        if (o == null) { throw new NoSuchElementException("JSONArray[" + index
-                + "] not found."); }
-        return o;
-    }
-
-    /**
-     * Get the ArrayList which is holding the elements of the JSONArray.
-     * 
-     * @return The ArrayList.
-     */
-    ArrayList getArrayList()
-    {
-        return this.myArrayList;
-    }
-
-    /**
-     * Get the boolean value associated with an index. The string values "true"
-     * and "false" are converted to boolean.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return The truth.
-     * @exception NoSuchElementException
-     *                if the index is not found
-     * @exception ClassCastException
-     */
-    public boolean getBoolean(int index)
-    {
-        Object o = get(index);
-        if (o.equals(Boolean.FALSE)
-                || (o instanceof String && ((String) o)
-                        .equalsIgnoreCase("false")))
-        {
-            return false;
-        }
-        else if (o.equals(Boolean.TRUE)
-                || (o instanceof String && ((String) o)
-                        .equalsIgnoreCase("true"))) { return true; }
-        throw new ClassCastException("JSONArray[" + index + "] not a Boolean.");
-    }
-
-    /**
-     * Get the double value associated with an index.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return The value.
-     * @exception NoSuchElementException
-     *                if the key is not found
-     * @exception NumberFormatException
-     *                if the value cannot be converted to a number.
-     */
-    public double getDouble(int index)
-    {
-        Object o = get(index);
-        if (o instanceof Number) { return ((Number) o).doubleValue(); }
-        if (o instanceof String) { return new Double((String) o).doubleValue(); }
-        throw new NumberFormatException("JSONObject[" + index
-                + "] is not a number.");
-    }
-
-    /**
-     * Get the int value associated with an index.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return The value.
-     * @exception NoSuchElementException
-     *                if the key is not found
-     * @exception NumberFormatException
-     *                if the value cannot be converted to a number.
-     */
-    public int getInt(int index)
-    {
-        Object o = get(index);
-        return o instanceof Number ? ((Number) o).intValue()
-                : (int) getDouble(index);
-    }
-
-    /**
-     * Get the JSONArray associated with an index.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return A JSONArray value.
-     * @exception NoSuchElementException
-     *                if the index is not found or if the value is not a
-     *                JSONArray
-     */
-    public JSONArray getJSONArray(int index)
-    {
-        Object o = get(index);
-        if (o instanceof JSONArray) { return (JSONArray) o; }
-        throw new NoSuchElementException("JSONArray[" + index
-                + "] is not a JSONArray.");
-    }
-
-    /**
-     * Get the JSONObject associated with an index.
-     * 
-     * @param index
-     *            subscript
-     * @return A JSONObject value.
-     * @exception NoSuchElementException
-     *                if the index is not found or if the value is not a
-     *                JSONObject
-     */
-    public JSONObject getJSONObject(int index)
-    {
-        Object o = get(index);
-        if (o instanceof JSONObject) { return (JSONObject) o; }
-        throw new NoSuchElementException("JSONArray[" + index
-                + "] is not a JSONObject.");
-    }
-
-    /**
-     * Get the string associated with an index.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return A string value.
-     * @exception NoSuchElementException
-     */
-    public String getString(int index)
-    {
-        return get(index).toString();
-    }
-
-    /**
-     * Determine if the value is null.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return true if the value at the index is null, or if there is no value.
-     */
-    public boolean isNull(int index)
-    {
-        Object o = opt(index);
-        return o == null || o.equals(null);
-    }
-
-    /**
-     * Make a string from the contents of this JSONArray. The separator string
-     * is inserted between each element. Warning: This method assumes that the
-     * data structure is acyclical.
-     * 
-     * @param separator
-     *            A string that will be inserted between the elements.
-     * @return a string.
-     */
-    public String join(String separator)
-    {
-        int len = length();
-        StringBuffer sb = new StringBuffer();
-        for(int i = 0; i < len; i += 1)
-        {
-            if (i > 0)
-            {
-                sb.append(separator);
-            }
-            sb.append(JSONObject.valueToString(this.myArrayList.get(i)));
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Get the length of the JSONArray.
-     * 
-     * @return The length (or size).
-     */
-    public int length()
-    {
-        return this.myArrayList.size();
-    }
-
-    /**
-     * Get the optional object value associated with an index.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return An object value, or null if there is no object at that index.
-     */
-    public Object opt(int index)
-    {
-        return index < 0 || index >= length() ? null : this.myArrayList
-                .get(index);
-    }
-
-    /**
-     * Get the optional boolean value associated with an index. It returns false
-     * if there is no value at that index, or if the value is not Boolean.TRUE
-     * or the String "true".
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return The truth.
-     */
-    public boolean optBoolean(int index)
-    {
-        return optBoolean(index, false);
-    }
-
-    /**
-     * Get the optional boolean value associated with an index. It returns the
-     * defaultValue if there is no value at that index or if it is not a Boolean
-     * or the String "true" or "false" (case insensitive).
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @param defaultValue
-     *            A boolean default.
-     * @return The truth.
-     */
-    public boolean optBoolean(int index, boolean defaultValue)
-    {
-        Object o = opt(index);
-        if (o != null)
-        {
-            if (o.equals(Boolean.FALSE)
-                    || (o instanceof String && ((String) o)
-                            .equalsIgnoreCase("false")))
-            {
-                return false;
-            }
-            else if (o.equals(Boolean.TRUE)
-                    || (o instanceof String && ((String) o)
-                            .equalsIgnoreCase("true"))) { return true; }
-        }
-        return defaultValue;
-    }
-
-    /**
-     * Get the optional double value associated with an index. NaN is returned
-     * if the index is not found, or if the value is not a number and cannot be
-     * converted to a number.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return The value.
-     */
-    public double optDouble(int index)
-    {
-        return optDouble(index, Double.NaN);
-    }
-
-    /**
-     * Get the optional double value associated with an index. The defaultValue
-     * is returned if the index is not found, or if the value is not a number
-     * and cannot be converted to a number.
-     * 
-     * @param index
-     *            subscript
-     * @param defaultValue
-     *            The default value.
-     * @return The value.
-     */
-    public double optDouble(int index, double defaultValue)
-    {
-        Object o = opt(index);
-        if (o != null)
-        {
-            if (o instanceof Number) { return ((Number) o).doubleValue(); }
-            try
-            {
-                return new Double((String) o).doubleValue();
-            }
-            catch (Exception e)
-            {
-                return defaultValue;
-            }
-        }
-        return defaultValue;
-    }
-
-    /**
-     * Get the optional int value associated with an index. Zero is returned if
-     * the index is not found, or if the value is not a number and cannot be
-     * converted to a number.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return The value.
-     */
-    public int optInt(int index)
-    {
-        return optInt(index, 0);
-    }
-
-    /**
-     * Get the optional int value associated with an index. The defaultValue is
-     * returned if the index is not found, or if the value is not a number and
-     * cannot be converted to a number.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @param defaultValue
-     *            The default value.
-     * @return The value.
-     */
-    public int optInt(int index, int defaultValue)
-    {
-        Object o = opt(index);
-        if (o != null)
-        {
-            if (o instanceof Number) { return ((Number) o).intValue(); }
-            try
-            {
-                return Integer.parseInt((String) o);
-            }
-            catch (Exception e)
-            {
-                return defaultValue;
-            }
-        }
-        return defaultValue;
-    }
-
-    /**
-     * Get the optional JSONArray associated with an index.
-     * 
-     * @param index
-     *            subscript
-     * @return A JSONArray value, or null if the index has no value, or if the
-     *         value is not a JSONArray.
-     */
-    public JSONArray optJSONArray(int index)
-    {
-        Object o = opt(index);
-        return o instanceof JSONArray ? (JSONArray) o : null;
-    }
-
-    /**
-     * Get the optional JSONObject associated with an index. Null is returned if
-     * the key is not found, or null if the index has no value, or if the value
-     * is not a JSONObject.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return A JSONObject value.
-     */
-    public JSONObject optJSONObject(int index)
-    {
-        Object o = opt(index);
-        return o instanceof JSONObject ? (JSONObject) o : null;
-    }
-
-    /**
-     * Get the optional string value associated with an index. It returns an
-     * empty string if there is no value at that index. If the value is not a
-     * string and is not null, then it is coverted to a string.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @return A String value.
-     */
-    public String optString(int index)
-    {
-        return optString(index, "");
-    }
-
-    /**
-     * Get the optional string associated with an index. The defaultValue is
-     * returned if the key is not found.
-     * 
-     * @param index
-     *            The index must be between 0 and length() - 1.
-     * @param defaultValue
-     *            The default value.
-     * @return A String value.
-     */
-    public String optString(int index, String defaultValue)
-    {
-        Object o = opt(index);
-        return o != null ? o.toString() : defaultValue;
-    }
-
-    /**
-     * Append a boolean value.
-     * 
-     * @param value
-     *            A boolean value.
-     * @return this.
-     */
-    public JSONArray put(boolean value)
-    {
-        put(Boolean.valueOf(value));
-        return this;
-    }
-
-    /**
-     * Append a double value.
-     * 
-     * @param value
-     *            A double value.
-     * @return this.
-     */
-    public JSONArray put(double value)
-    {
-        put(new Double(value));
-        return this;
-    }
-
-    /**
-     * Append an int value.
-     * 
-     * @param value
-     *            An int value.
-     * @return this.
-     */
-    public JSONArray put(int value)
-    {
-        put(new Integer(value));
-        return this;
-    }
-
-    /**
-     * Append an object value.
-     * 
-     * @param value
-     *            An object value. The value should be a Boolean, Double,
-     *            Integer, JSONArray, JSObject, or String, or the
-     *            JSONObject.NULL object.
-     * @return this.
-     */
-    public JSONArray put(Object value)
-    {
-        this.myArrayList.add(value);
-        return this;
-    }
-
-    /**
-     * Put or replace a boolean value in the JSONArray.
-     * 
-     * @param index
-     *            subscript The subscript. If the index is greater than the
-     *            length of the JSONArray, then null elements will be added as
-     *            necessary to pad it out.
-     * @param value
-     *            A boolean value.
-     * @return this.
-     * @exception NoSuchElementException
-     *                The index must not be negative.
-     */
-    public JSONArray put(int index, boolean value)
-    {
-        put(index, Boolean.valueOf(value));
-        return this;
-    }
-
-    /**
-     * Put or replace a double value.
-     * 
-     * @param index
-     *            subscript The subscript. If the index is greater than the
-     *            length of the JSONArray, then null elements will be added as
-     *            necessary to pad it out.
-     * @param value
-     *            A double value.
-     * @return this.
-     * @exception NoSuchElementException
-     *                The index must not be negative.
-     */
-    public JSONArray put(int index, double value)
-    {
-        put(index, new Double(value));
-        return this;
-    }
-
-    /**
-     * Put or replace an int value.
-     * 
-     * @param index
-     *            subscript The subscript. If the index is greater than the
-     *            length of the JSONArray, then null elements will be added as
-     *            necessary to pad it out.
-     * @param value
-     *            An int value.
-     * @return this.
-     * @exception NoSuchElementException
-     *                The index must not be negative.
-     */
-    public JSONArray put(int index, int value)
-    {
-        put(index, new Integer(value));
-        return this;
-    }
-
-    /**
-     * Put or replace an object value in the JSONArray.
-     * 
-     * @param index
-     *            The subscript. If the index is greater than the length of the
-     *            JSONArray, then null elements will be added as necessary to
-     *            pad it out.
-     * @param value
-     *            An object value.
-     * @return this.
-     * @exception NoSuchElementException
-     *                The index must not be negative.
-     * @exception NullPointerException
-     *                The index must not be null.
-     */
-    public JSONArray put(int index, Object value)
-    {
-        if (index < 0)
-        {
-            throw new NoSuchElementException("JSONArray[" + index
-                    + "] not found.");
-        }
-        else if (value == null)
-        {
-            throw new NullPointerException();
-        }
-        else if (index < length())
-        {
-            this.myArrayList.set(index, value);
-        }
-        else
-        {
-            while(index != length())
-            {
-                put(null);
-            }
-            put(value);
-        }
-        return this;
-    }
-
-    /**
-     * Produce a JSONObject by combining a JSONArray of names with the values of
-     * this JSONArray.
-     * 
-     * @param names
-     *            A JSONArray containing a list of key strings. These will be
-     *            paired with the values.
-     * @return A JSONObject, or null if there are no names or if this JSONArray
-     *         has no values.
-     */
-    public JSONObject toJSONObject(JSONArray names)
-    {
-        if (names == null || names.length() == 0 || length() == 0) { return null; }
-        JSONObject jo = new JSONObject();
-        for(int i = 0; i < names.length(); i += 1)
-        {
-            jo.put(names.getString(i), this.opt(i));
-        }
-        return jo;
-    }
-
-    /**
-     * Make an JSON external form string of this JSONArray. For compactness, no
-     * unnecessary whitespace is added. Warning: This method assumes that the
-     * data structure is acyclical.
-     * 
-     * @return a printable, displayable, transmittable representation of the
-     *         array.
-     */
-    public String toString()
-    {
-        return '[' + join(",") + ']';
-    }
-
-    /**
-     * Make a prettyprinted JSON string of this JSONArray. Warning: This method
-     * assumes that the data structure is non-cyclical.
-     * 
-     * @param indentFactor
-     *            The number of spaces to add to each level of indentation.
-     * @return a printable, displayable, transmittable representation of the
-     *         object, beginning with <code>[</code>&nbsp;<small>(left
-     *         bracket)</small> and ending with <code>]</code>&nbsp;<small>(right
-     *         bracket)</small>.
-     */
-    public String toString(int indentFactor)
-    {
-        return toString(indentFactor, 0);
-    }
-
-    /**
-     * Make a prettyprinted string of this JSONArray. Warning: This method
-     * assumes that the data structure is non-cyclical.
-     * 
-     * @param indentFactor
-     *            The number of spaces to add to each level of indentation.
-     * @param indent
-     *            The indention of the top level.
-     * @return a printable, displayable, transmittable representation of the
-     *         array.
-     */
-    String toString(int indentFactor, int indent)
-    {
-        int len = length();
-        if (len == 0) { return "[]"; }
-        int i;
-        StringBuffer sb = new StringBuffer("[");
-        if (len == 1)
-        {
-            sb.append(JSONObject.valueToString(this.myArrayList.get(0),
-                    indentFactor, indent));
-        }
-        else
-        {
-            int newindent = indent + indentFactor;
-            sb.append('\n');
-            for(i = 0; i < len; i += 1)
-            {
-                if (i > 0)
-                {
-                    sb.append(",\n");
-                }
-                for(int j = 0; j < newindent; j += 1)
-                {
-                    sb.append(' ');
-                }
-                sb.append(JSONObject.valueToString(this.myArrayList.get(i),
-                        indentFactor, newindent));
-            }
-            sb.append('\n');
-            for(i = 0; i < indent; i += 1)
-            {
-                sb.append(' ');
-            }
-        }
-        sb.append(']');
-        return sb.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONLiteral.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONLiteral.java
deleted file mode 100644
index 3e8864f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONLiteral.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright Jun 25, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.json;
-
-
-/**
- * Represents a JSON literal string, useful for scenerios where you
- * want to store a key/value pair but don't want the value to be quoted.
- * 
- * @author jkuhnert
- */
-public class JSONLiteral
-{
-    private String _value;
-    
-    public JSONLiteral(String value)
-    {
-        _value = value;
-    }
-    
-    public String toString()
-    {
-        return _value;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONObject.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONObject.java
deleted file mode 100644
index c16fe13..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONObject.java
+++ /dev/null
@@ -1,796 +0,0 @@
-package org.apache.tapestry.json;
-
-/*
- Copyright (c) 2002 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-import java.text.ParseException;
-import java.util.*;
-
-/**
- * A JSONObject is an unordered collection of name/value pairs. Its external
- * form is a string wrapped in curly braces with colons between the names and
- * values, and commas between the values and names. The internal form is an
- * object having get() and opt() methods for accessing the values by name, and
- * put() methods for adding or replacing values by name. The values can be any
- * of these types: Boolean, JSONArray, JSONObject, Number, String, or the
- * JSONObject.NULL object.
- * <p>
- * The constructor can convert an external form string into an internal form
- * Java object. The toString() method creates an external form string.
- * <p>
- * A get() method returns a value if one can be found, and throws an exception
- * if one cannot be found. An opt() method returns a default value instead of
- * throwing an exception, and so is useful for obtaining optional values.
- * <p>
- * The generic get() and opt() methods return an object, which you can cast or
- * query for type. There are also typed get() and opt() methods that do type
- * checking and type coersion for you.
- * <p>
- * The texts produced by the toString() methods are very strict. The
- * constructors are more forgiving in the texts they will accept:
- * <ul>
- * <li>An extra <code>,</code>&nbsp;<small>(comma)</small> may appear just
- * before the closing brace.</li>
- * <li>Strings may be quoted with <code>'</code>&nbsp;<small>(single quote)</small>.</li>
- * <li>Strings do not need to be quoted at all if they do not begin with a
- * quote or single quote, and if they do not contain leading or trailing spaces,
- * and if they do not contain any of these characters:
- * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers and
- * if they are not the reserved words <code>true</code>, <code>false</code>,
- * or <code>null</code>.</li>
- * <li>Keys can be followed by <code>=</code> or <code>=></code> as well as
- * by <code>:</code></li>
- * <li>Values can be followed by <code>;</code> as well as by <code>,</code></li>
- * <li>Numbers may have the <code>0-</code> <small>(octal)</small> or
- * <code>0x-</code> <small>(hex)</small> prefix.</li>
- * <li>Line comments can begin with <code>#</code></li>
- * </ul>
- * 
- * @author JSON.org
- * @version 1
- */
-public class JSONObject
-{
-
-    /**
-     * It is sometimes more convenient and less ambiguous to have a NULL object
-     * than to use Java's null value. JSONObject.NULL.equals(null) returns true.
-     * JSONObject.NULL.toString() returns "null".
-     */
-    public static final Object NULL = new Null();
-
-    /**
-     * JSONObject.NULL is equivalent to the value that JavaScript calls null,
-     * whilst Java's null is equivalent to the value that JavaScript calls
-     * undefined.
-     */
-    private static final class Null
-    {
-
-        /**
-         * There is only intended to be a single instance of the NULL object, so
-         * the clone method returns itself.
-         * CHECKSTYLE:OFF
-         * @return NULL.
-         */
-        protected Object clone()
-        {
-            return this;
-        }
-
-        /**
-         * A Null object is equal to the null value and to itself.
-         * 
-         * @param object
-         *            An object to test for nullness.
-         * @return true if the object parameter is the JSONObject.NULL object or
-         *         null.
-         */
-        public boolean equals(Object object)
-        {
-            return object == null || object == this;
-        }
-
-        /**
-         * Get the "null" string value.
-         * 
-         * @return The string "null".
-         */
-        public String toString()
-        {
-            return "null";
-        }
-    }
-
-    /**
-     * The hash map where the JSONObject's properties are kept.
-     */
-    private HashMap myHashMap;
-
-    /**
-     * Construct an empty JSONObject.
-     */
-    public JSONObject()
-    {
-        this.myHashMap = new LinkedHashMap();
-    }
-
-    /**
-     * Construct a JSONObject from a subset of another JSONObject. An array of
-     * strings is used to identify the keys that should be copied. Missing keys
-     * are ignored.
-     * 
-     * @param jo
-     *            A JSONObject.
-     * @param sa
-     *            An array of strings.
-     */
-    public JSONObject(JSONObject jo, String[] sa)
-    {
-        this();
-        for(int i = 0; i < sa.length; i += 1)
-        {
-            putOpt(sa[i], jo.opt(sa[i]));
-        }
-    }
-
-    /**
-     * Construct a JSONObject from a JSONTokener.
-     * 
-     * @param x
-     *            A JSONTokener object containing the source string.
-     * @throws ParseException
-     *             if there is a syntax error in the source string.
-     */
-    public JSONObject(JSONTokener x)
-        throws ParseException
-    {
-        this();
-        char c;
-        String key;
-
-        if (x.nextClean() != '{') { throw x
-                .syntaxError("A JSONObject must begin with '{'"); }
-        while(true)
-        {
-            c = x.nextClean();
-            switch(c)
-            {
-            case 0:
-                throw x.syntaxError("A JSONObject must end with '}'");
-            case '}':
-                return;
-            default:
-                x.back();
-                key = x.nextValue().toString();
-            }
-
-            /*
-             * The key is followed by ':'. We will also tolerate '=' or '=>'.
-             */
-
-            c = x.nextClean();
-            if (c == '=')
-            {
-                if (x.next() != '>')
-                {
-                    x.back();
-                }
-            }
-            else if (c != ':') { throw x
-                    .syntaxError("Expected a ':' after a key"); }
-            this.myHashMap.put(key, x.nextValue());
-
-            /*
-             * Pairs are separated by ','. We will also tolerate ';'.
-             */
-
-            switch(x.nextClean())
-            {
-            case ';':
-            case ',':
-                if (x.nextClean() == '}') { return; }
-                x.back();
-                break;
-            case '}':
-                return;
-            default:
-                throw x.syntaxError("Expected a ',' or '}'");
-            }
-        }
-    }
-
-    /**
-     * Construct a JSONObject from a Map.
-     * 
-     * @param map
-     *            A map object that can be used to initialize the contents of
-     *            the JSONObject.
-     */
-    public JSONObject(Map map)
-    {
-        this.myHashMap = new HashMap(map);
-    }
-
-    /**
-     * Construct a JSONObject from a string. This is the most commonly used
-     * JSONObject constructor.
-     * 
-     * @param string
-     *            A string beginning with <code>{</code>&nbsp;<small>(left
-     *            brace)</small> and ending with <code>}</code>&nbsp;<small>(right
-     *            brace)</small>.
-     * @exception ParseException
-     *                The string must be properly formatted.
-     */
-    public JSONObject(String string)
-        throws ParseException
-    {
-        this(new JSONTokener(string));
-    }
-
-    public JSONObject accumulate(String key, Object value)
-    {
-        JSONArray a;
-        Object o = opt(key);
-        if (o == null)
-        {
-            a = new JSONArray();
-            a.put(value);
-            put(key, a);
-        }
-        else if (o instanceof JSONArray)
-        {
-            a = (JSONArray) o;
-            a.put(value);
-        }
-        
-        return this;
-    }
-
-    public Object get(String key)
-    {
-        Object o = opt(key);
-        if (o == null) { throw new NoSuchElementException("JSONObject["
-                + quote(key) + "] not found."); }
-        return o;
-    }
-
-    public boolean getBoolean(String key)
-    {
-        Object o = get(key);
-        if (o.equals(Boolean.FALSE)
-                || (o instanceof String && ((String) o)
-                        .equalsIgnoreCase("false")))
-        {
-            return false;
-        }
-        else if (o.equals(Boolean.TRUE)
-                || (o instanceof String && ((String) o)
-                        .equalsIgnoreCase("true"))) { return true; }
-        throw new ClassCastException("JSONObject[" + quote(key)
-                + "] is not a Boolean.");
-    }
-
-    public double getDouble(String key)
-    {
-        Object o = get(key);
-        if (o instanceof Number) { return ((Number) o).doubleValue(); }
-        if (o instanceof String) { return new Double((String) o).doubleValue(); }
-        throw new NumberFormatException("JSONObject[" + quote(key)
-                + "] is not a number.");
-    }
-
-    /**
-     * Get the Map the holds that contents of the JSONObject.
-     * 
-     * @return The getHashMap.
-     */
-    Map getMap()
-    {
-        return this.myHashMap;
-    }
-
-    public int getInt(String key)
-    {
-        Object o = get(key);
-        return o instanceof Number ? ((Number) o).intValue()
-                : (int) getDouble(key);
-    }
-
-    public JSONArray getJSONArray(String key)
-    {
-        Object o = get(key);
-        if (o instanceof JSONArray) { return (JSONArray) o; }
-        throw new NoSuchElementException("JSONObject[" + quote(key)
-                + "] is not a JSONArray.");
-    }
-
-    public JSONObject getJSONObject(String key)
-    {
-        Object o = get(key);
-        if (o instanceof JSONObject) { return (JSONObject) o; }
-        throw new NoSuchElementException("JSONObject[" + quote(key)
-                + "] is not a JSONObject.");
-    }
-
-    public String getString(String key)
-    {
-        return get(key).toString();
-    }
-
-    public boolean has(String key)
-    {
-        return this.myHashMap.containsKey(key);
-    }
-
-    public boolean isNull(String key)
-    {
-        return JSONObject.NULL.equals(opt(key));
-    }
-
-    public Iterator keys()
-    {
-        return this.myHashMap.keySet().iterator();
-    }
-
-    public int length()
-    {
-        return this.myHashMap.size();
-    }
-
-    public JSONArray names()
-    {
-        JSONArray ja = new JSONArray();
-        Iterator keys = keys();
-        while(keys.hasNext())
-        {
-            ja.put(keys.next());
-        }
-        return ja.length() == 0 ? null : ja;
-    }
-
-    /**
-     * Produce a string from a number.
-     * 
-     * @param n A Number
-     * @return A String.
-     * @exception ArithmeticException
-     *                JSON can only serialize finite numbers.
-     */
-    public static String numberToString(Number n)
-    {
-        if ((n instanceof Float && (((Float) n).isInfinite() || ((Float) n).isNaN()))
-                || (n instanceof Double && (((Double) n).isInfinite() || ((Double) n).isNaN()))) { 
-            throw new ArithmeticException("JSON can only serialize finite numbers."); 
-        }
-        
-        // Shave off trailing zeros and decimal point, if possible.
-        
-        String s = n.toString();
-        if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0)
-        {
-            while(s.endsWith("0"))
-            {
-                s = s.substring(0, s.length() - 1);
-            }
-            if (s.endsWith("."))
-            {
-                s = s.substring(0, s.length() - 1);
-            }
-        }
-        return s;
-    }
-
-    public Object opt(String key)
-    {
-        if (key == null) { throw new NullPointerException("Null key"); }
-        return this.myHashMap.get(key);
-    }
-
-    public boolean optBoolean(String key)
-    {
-        return optBoolean(key, false);
-    }
-
-    public boolean optBoolean(String key, boolean defaultValue)
-    {
-        Object o = opt(key);
-        if (o != null)
-        {
-            if (o.equals(Boolean.FALSE)
-                    || (o instanceof String && ((String) o)
-                            .equalsIgnoreCase("false")))
-            {
-                return false;
-            }
-            else if (o.equals(Boolean.TRUE)
-                    || (o instanceof String && ((String) o)
-                            .equalsIgnoreCase("true"))) { return true; }
-        }
-        return defaultValue;
-    }
-
-    public double optDouble(String key)
-    {
-        return optDouble(key, Double.NaN);
-    }
-
-    public double optDouble(String key, double defaultValue)
-    {
-        Object o = opt(key);
-        if (o != null)
-        {
-            if (o instanceof Number) { return ((Number) o).doubleValue(); }
-            try
-            {
-                return new Double((String) o).doubleValue();
-            }
-            catch (Exception e)
-            {
-                return defaultValue;
-            }
-        }
-        return defaultValue;
-    }
-
-    public int optInt(String key)
-    {
-        return optInt(key, 0);
-    }
-
-    public int optInt(String key, int defaultValue)
-    {
-        Object o = opt(key);
-        if (o != null)
-        {
-            if (o instanceof Number) { return ((Number) o).intValue(); }
-            try
-            {
-                return Integer.parseInt((String) o);
-            }
-            catch (Exception e)
-            {
-                return defaultValue;
-            }
-        }
-        return defaultValue;
-    }
-
-    public JSONArray optJSONArray(String key)
-    {
-        Object o = opt(key);
-        return o instanceof JSONArray ? (JSONArray) o : null;
-    }
-
-    public JSONObject optJSONObject(String key)
-    {
-        Object o = opt(key);
-        return o instanceof JSONObject ? (JSONObject) o : null;
-    }
-
-    public String optString(String key)
-    {
-        return optString(key, "");
-    }
-
-    public String optString(String key, String defaultValue)
-    {
-        Object o = opt(key);
-        return o != null ? o.toString() : defaultValue;
-    }
-
-    public JSONObject put(Object key, boolean value)
-    {
-        put(key, Boolean.valueOf(value));
-        return this;
-    }
-
-    public JSONObject put(Object key, double value)
-    {
-        put(key, new Double(value));
-        return this;
-    }
-
-    public JSONObject put(Object key, long value)
-    {
-        put(key, new Long(value));
-        return this;
-    }
-    
-    public JSONObject put(Object key, int value)
-    {
-        put(key, new Integer(value));
-        return this;
-    }
-    
-    public JSONObject put(Object key, Object value)
-    {
-        if (key == null)
-            throw new NullPointerException("Null key.");
-        
-        if (value != null)
-        {
-            this.myHashMap.put(key, value);
-        }
-        else
-        {
-            remove(key.toString());
-        }
-        
-        return this;
-    }
-    
-    public JSONObject putOpt(String key, Object value)
-    {
-        if (value != null)
-        {
-            put(key, value);
-        }
-        return this;
-    }
-
-    /**
-     * @see #quote(String) .
-     * @param value
-     * 
-     * @return The character quoted.
-     */
-    public static String quote(char value)
-    {
-        return quote(new String(new char[]{value}));
-    }
-    
-    /**
-     * Produce a string in double quotes with backslash sequences in all the
-     * right places.
-     * 
-     * @param string
-     *            A String
-     * @return A String correctly formatted for insertion in a JSON message.
-     */
-    public static String quote(String string)
-    {
-        if (string == null || string.length() == 0) { return "\"\""; }
-
-        char b;
-        char c = 0;
-        int i;
-        int len = string.length();
-        StringBuffer sb = new StringBuffer(len + 4);
-        String t;
-
-        sb.append('"');
-        for(i = 0; i < len; i += 1)
-        {
-            b = c;
-            c = string.charAt(i);
-            switch(c)
-            {
-            case '\\':
-            case '"':
-                sb.append('\\');
-                sb.append(c);
-                break;
-            case '/':
-                if (b == '<')
-                {
-                    sb.append('\\');
-                }
-                sb.append(c);
-                break;
-            case '\b':
-                sb.append("\\b");
-                break;
-            case '\t':
-                sb.append("\\t");
-                break;
-            case '\n':
-                sb.append("\\n");
-                break;
-            case '\f':
-                sb.append("\\f");
-                break;
-            case '\r':
-                sb.append("\\r");
-                break;
-            default:
-                if (c < ' ')
-                {
-                    t = "000" + Integer.toHexString(c);
-                    sb.append("\\u" + t.substring(t.length() - 4));
-                }
-                else
-                {
-                    sb.append(c);
-                }
-            }
-        }
-        sb.append('"');
-        return sb.toString();
-    }
-
-    public Object remove(String key)
-    {
-        return this.myHashMap.remove(key);
-    }
-
-    public JSONArray toJSONArray(JSONArray names)
-    {
-        if (names == null || names.length() == 0) { return null; }
-        JSONArray ja = new JSONArray();
-        for(int i = 0; i < names.length(); i += 1)
-        {
-            ja.put(this.opt(names.getString(i)));
-        }
-        return ja;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String toString()
-    {
-        Iterator keys = keys();
-        StringBuffer sb = new StringBuffer("{");
-
-        while(keys.hasNext())
-        {
-            if (sb.length() > 1)
-            {
-                sb.append(',');
-            }
-            Object o = keys.next();
-            sb.append(valueToString(o));
-            sb.append(':');
-            sb.append(valueToString(this.myHashMap.get(o)));
-        }
-        sb.append('}');
-        return sb.toString();
-    }
-    
-    public String toString(int indentFactor)
-    {
-        return toString(indentFactor, 0);
-    }
-
-    /**
-     * Make a prettyprinted JSON string of this JSONObject.
-     * <p>
-     * Warning: This method assumes that the data structure is acyclical.
-     * 
-     * @param indentFactor
-     *            The number of spaces to add to each level of indentation.
-     * @param indent
-     *            The indentation of the top level.
-     * @return a printable, displayable, transmittable representation of the
-     *         object, beginning with <code>{</code>&nbsp;<small>(left
-     *         brace)</small> and ending with <code>}</code>&nbsp;<small>(right
-     *         brace)</small>.
-     */
-    String toString(int indentFactor, int indent)
-    {
-        int i;
-        int n = length();
-        if (n == 0) { return "{}"; }
-        Iterator keys = keys();
-        StringBuffer sb = new StringBuffer("{");
-        int newindent = indent + indentFactor;
-        Object o;
-        if (n == 1)
-        {
-            o = keys.next();
-            sb.append(quote(o.toString()));
-            sb.append(": ");
-            sb
-                    .append(valueToString(this.myHashMap.get(o), indentFactor,
-                            indent));
-        }
-        else
-        {
-            while(keys.hasNext())
-            {
-                o = keys.next();
-                if (sb.length() > 1)
-                {
-                    sb.append(",\n");
-                }
-                else
-                {
-                    sb.append('\n');
-                }
-                for(i = 0; i < newindent; i += 1)
-                {
-                    sb.append(' ');
-                }
-                sb.append(quote(o.toString()));
-                sb.append(": ");
-                sb.append(valueToString(this.myHashMap.get(o), indentFactor,
-                        newindent));
-            }
-            if (sb.length() > 1)
-            {
-                sb.append('\n');
-                for(i = 0; i < indent; i += 1)
-                {
-                    sb.append(' ');
-                }
-            }
-        }
-        sb.append('}');
-        return sb.toString();
-    }
-
-    /**
-     * Make JSON string of an object value.
-     * <p>
-     * Warning: This method assumes that the data structure is acyclical.
-     * 
-     * @param value
-     *            The value to be serialized.
-     * @return a printable, displayable, transmittable representation of the
-     *         object, beginning with <code>{</code>&nbsp;<small>(left
-     *         brace)</small> and ending with <code>}</code>&nbsp;<small>(right
-     *         brace)</small>.
-     */
-    static String valueToString(Object value)
-    {
-        if (value == null || value.equals(null)) { return "null"; }
-        if (value instanceof Number) { return numberToString((Number) value); }
-        if (value instanceof Boolean || value instanceof JSONObject
-                || value instanceof JSONArray
-                || value instanceof JSONLiteral) { return value.toString(); }
-        return quote(value.toString());
-    }
-
-    /**
-     * Make a prettyprinted JSON string of an object value.
-     * <p>
-     * Warning: This method assumes that the data structure is acyclical.
-     * 
-     * @param value
-     *            The value to be serialized.
-     * @param indentFactor
-     *            The number of spaces to add to each level of indentation.
-     * @param indent
-     *            The indentation of the top level.
-     * @return a printable, displayable, transmittable representation of the
-     *         object, beginning with <code>{</code>&nbsp;<small>(left
-     *         brace)</small> and ending with <code>}</code>&nbsp;<small>(right
-     *         brace)</small>.
-     */
-    static String valueToString(Object value, int indentFactor, int indent)
-    {
-        if (value == null || value.equals(null)) { return "null"; }
-        if (value instanceof Number) { return numberToString((Number) value); }
-        if (value instanceof Boolean) { return value.toString(); }
-        if (value instanceof JSONObject) { return (((JSONObject) value)
-                .toString(indentFactor, indent)); }
-        if (value instanceof JSONArray) { return (((JSONArray) value).toString(
-                indentFactor, indent)); }
-        if (JSONLiteral.class.isAssignableFrom(value.getClass()))
-            return value.toString();
-        return quote(value.toString());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONTokener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONTokener.java
deleted file mode 100644
index 09821fa..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/JSONTokener.java
+++ /dev/null
@@ -1,542 +0,0 @@
-package org.apache.tapestry.json;
-
-/*
- Copyright (c) 2002 JSON.org
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- The Software shall be used for Good, not Evil.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- */
-
-import java.text.ParseException;
-
-/**
- * A JSONTokener takes a source string and extracts characters and tokens from
- * it. It is used by the JSONObject and JSONArray constructors to parse JSON
- * source strings.
- * 
- * <p/>The toString() method has been modified from its original form to provide
- * easier to understand exception reporting.
- * 
- * @author JSON.org, jkuhnert 
- * @version 1
- */
-public class JSONTokener
-{
-
-    /**
-     * The index of the next character.
-     */
-    private int myIndex;
-
-    /**
-     * The source string being tokenized.
-     */
-    private String mySource;
-
-    /**
-     * Construct a JSONTokener from a string.
-     * 
-     * @param s
-     *            A source string.
-     */
-    public JSONTokener(String s)
-    {
-        this.myIndex = 0;
-        this.mySource = s;
-    }
-
-    /**
-     * Back up one character. This provides a sort of lookahead capability, so
-     * that you can test for a digit or letter before attempting to parse the
-     * next number or identifier.
-     */
-    public void back()
-    {
-        if (this.myIndex > 0)
-        {
-            this.myIndex -= 1;
-        }
-    }
-
-    /**
-     * Get the hex value of a character (base16).
-     * 
-     * @param c
-     *            A character between '0' and '9' or between 'A' and 'F' or
-     *            between 'a' and 'f'.
-     * @return An int between 0 and 15, or -1 if c was not a hex digit.
-     */
-    public static int dehexchar(char c)
-    {
-        if (c >= '0' && c <= '9') { return c - '0'; }
-        if (c >= 'A' && c <= 'F') { return c + 10 - 'A'; }
-        if (c >= 'a' && c <= 'f') { return c + 10 - 'a'; }
-        return -1;
-    }
-
-    /**
-     * Determine if the source string still contains characters that next() can
-     * consume.
-     * 
-     * @return true if not yet at the end of the source.
-     */
-    public boolean more()
-    {
-        return this.myIndex < this.mySource.length();
-    }
-
-    /**
-     * Get the next character in the source string.
-     * 
-     * @return The next character, or 0 if past the end of the source string.
-     */
-    public char next()
-    {
-        if (more())
-        {
-            char c = this.mySource.charAt(this.myIndex);
-            this.myIndex += 1;
-            return c;
-        }
-        return 0;
-    }
-
-    /**
-     * Consume the next character, and check that it matches a specified
-     * character.
-     * 
-     * @param c
-     *            The character to match.
-     * @return The character.
-     * @throws ParseException
-     *             if the character does not match.
-     */
-    public char next(char c)
-        throws ParseException
-    {
-        char n = next();
-        if (n != c) { throw syntaxError("Expected '" + c + "' and instead saw '" + n + "'."); }
-        return n;
-    }
-
-    /**
-     * Get the next n characters.
-     * 
-     * @param n
-     *            The number of characters to take.
-     * @return A string of n characters.
-     * @exception ParseException
-     *                Substring bounds error if there are not n characters
-     *                remaining in the source string.
-     */
-    public String next(int n)
-        throws ParseException
-    {
-        int i = this.myIndex;
-        int j = i + n;
-        if (j >= this.mySource.length()) { throw syntaxError("Substring bounds error"); }
-        this.myIndex += n;
-        return this.mySource.substring(i, j);
-    }
-
-    /**
-     * Get the next char in the string, skipping whitespace and comments
-     * (slashslash, slashstar, and hash).
-     * 
-     * @throws ParseException
-     * @return A character, or 0 if there are no more characters.
-     */
-    public char nextClean()
-        throws java.text.ParseException
-    {
-        while(true)
-        {
-            char c = next();
-            if (c == '/')
-            {
-                switch(next())
-                {
-                case '/':
-                    do
-                    {
-                        c = next();
-                    } while(c != '\n' && c != '\r' && c != 0);
-                    break;
-                case '*':
-                    while(true)
-                    {
-                        c = next();
-                        if (c == 0) { throw syntaxError("Unclosed comment."); }
-                        if (c == '*')
-                        {
-                            if (next() == '/')
-                            {
-                                break;
-                            }
-                            back();
-                        }
-                    }
-                    break;
-                default:
-                    back();
-                    return '/';
-                }
-            }
-            else if (c == '#')
-            {
-                do
-                {
-                    c = next();
-                } while(c != '\n' && c != '\r' && c != 0);
-            }
-            else if (c == 0 || c > ' ') { return c; }
-        }
-    }
-
-    /**
-     * Return the characters up to the next close quote character. Backslash
-     * processing is done. The formal JSON format does not allow strings in
-     * single quotes, but an implementation is allowed to accept them.
-     * 
-     * @param quote
-     *            The quoting character, either <code>"</code>&nbsp;<small>(double
-     *            quote)</small> or <code>'</code>&nbsp;<small>(single
-     *            quote)</small>.
-     * @return A String.
-     * @exception ParseException
-     *                Unterminated string.
-     */
-    public String nextString(char quote)
-        throws ParseException
-    {
-        char c;
-        StringBuffer sb = new StringBuffer();
-        while(true)
-        {
-            c = next();
-            switch(c)
-            {
-            case 0:
-            case '\n':
-            case '\r':
-                throw syntaxError("Unterminated string");
-            case '\\':
-                c = next();
-                switch(c)
-                {
-                case 'b':
-                    sb.append('\b');
-                    break;
-                case 't':
-                    sb.append('\t');
-                    break;
-                case 'n':
-                    sb.append('\n');
-                    break;
-                case 'f':
-                    sb.append('\f');
-                    break;
-                case 'r':
-                    sb.append('\r');
-                    break;
-                case 'u':
-                    sb.append((char) Integer.parseInt(next(4), 16));
-                    break;
-                case 'x':
-                    sb.append((char) Integer.parseInt(next(2), 16));
-                    break;
-                default:
-                    sb.append(c);
-                }
-                break;
-            default:
-                if (c == quote) { return sb.toString(); }
-                sb.append(c);
-            }
-        }
-    }
-
-    /**
-     * Get the text up but not including the specified character or the end of
-     * line, whichever comes first.
-     * 
-     * @param d
-     *            A delimiter character.
-     * @return A string.
-     */
-    public String nextTo(char d)
-    {
-        StringBuffer sb = new StringBuffer();
-        while(true)
-        {
-            char c = next();
-            if (c == d || c == 0 || c == '\n' || c == '\r')
-            {
-                if (c != 0)
-                {
-                    back();
-                }
-                return sb.toString().trim();
-            }
-            sb.append(c);
-        }
-    }
-
-    /**
-     * Get the text up but not including one of the specified delimeter
-     * characters or the end of line, whichever comes first.
-     * 
-     * @param delimiters
-     *            A set of delimiter characters.
-     * @return A string, trimmed.
-     */
-    public String nextTo(String delimiters)
-    {
-        char c;
-        StringBuffer sb = new StringBuffer();
-        while(true)
-        {
-            c = next();
-            if (delimiters.indexOf(c) >= 0 || c == 0 || c == '\n' || c == '\r')
-            {
-                if (c != 0)
-                {
-                    back();
-                }
-                return sb.toString().trim();
-            }
-            sb.append(c);
-        }
-    }
-
-    /**
-     * Get the next value. The value can be a Boolean, Double, Integer,
-     * JSONArray, JSONObject, or String, or the JSONObject.NULL object.
-     * 
-     * @exception ParseException
-     *                The source does not conform to JSON syntax.
-     * @return An object.
-     */
-    public Object nextValue()
-        throws ParseException
-    {
-        char c = nextClean();
-        String s;
-
-        switch(c)
-        {
-        case '"':
-        case '\'':
-            return nextString(c);
-        case '{':
-            back();
-            return new JSONObject(this);
-        case '[':
-            back();
-            return new JSONArray(this);
-        }
-
-        /*
-         * Handle unquoted text. This could be the values true, false, or null,
-         * or it can be a number. An implementation (such as this one) is
-         * allowed to also accept non-standard forms. Accumulate characters
-         * until we reach the end of the text or a formatting character.
-         */
-
-        StringBuffer sb = new StringBuffer();
-        char b = c;
-        while(c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0)
-        {
-            sb.append(c);
-            c = next();
-        }
-        back();
-
-        /*
-         * If it is true, false, or null, return the proper value.
-         */
-
-        s = sb.toString().trim();
-        if (s.equals("")) { throw syntaxError("Missing value."); }
-        if (s.equalsIgnoreCase("true")) { return Boolean.TRUE; }
-        if (s.equalsIgnoreCase("false")) { return Boolean.FALSE; }
-        if (s.equalsIgnoreCase("null")) { return JSONObject.NULL; }
-
-        /*
-         * If it might be a number, try converting it. We support the 0- and 0x-
-         * conventions. If a number cannot be produced, then the value will just
-         * be a string. Note that the 0-, 0x-, plus, and implied string
-         * conventions are non-standard. A JSON parser is free to accept
-         * non-JSON forms as long as it accepts all correct JSON forms.
-         */
-
-        if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+')
-        {
-            if (b == '0')
-            {
-                if (s.length() > 2 && (s.charAt(1) == 'x' || s.charAt(1) == 'X'))
-                {
-                    try
-                    {
-                        return new Integer(Integer.parseInt(s.substring(2), 16));
-                    }
-                    catch (Exception e)
-                    {
-                        /* Ignore the error */
-                    }
-                }
-                else
-                {
-                    try
-                    {
-                        return new Integer(Integer.parseInt(s, 8));
-                    }
-                    catch (Exception e)
-                    {
-                        /* Ignore the error */
-                    }
-                }
-            }
-            try
-            {
-                return new Integer(s);
-            }
-            catch (Exception e)
-            {
-                /* Ignore the error */
-            }
-            try
-            {
-                return new Double(s);
-            }
-            catch (Exception e)
-            {
-                /* Ignore the error */
-            }
-        }
-        return s;
-    }
-
-    /**
-     * Skip characters until the next character is the requested character. If
-     * the requested character is not found, no characters are skipped.
-     * 
-     * @param to
-     *            A character to skip to.
-     * @return The requested character, or zero if the requested character is
-     *         not found.
-     */
-    public char skipTo(char to)
-    {
-        char c;
-        int index = this.myIndex;
-        do
-        {
-            c = next();
-            if (c == 0)
-            {
-                this.myIndex = index;
-                return c;
-            }
-        } while(c != to);
-        back();
-        return c;
-    }
-
-    /**
-     * Skip characters until past the requested string. If it is not found, we
-     * are left at the end of the source.
-     * 
-     * @param to
-     *            A string to skip past.
-     */
-    public void skipPast(String to)
-    {
-        this.myIndex = this.mySource.indexOf(to, this.myIndex);
-        if (this.myIndex < 0)
-        {
-            this.myIndex = this.mySource.length();
-        }
-        else
-        {
-            this.myIndex += to.length();
-        }
-    }
-
-    /**
-     * Make a ParseException to signal a syntax error.
-     * 
-     * @param message
-     *            The error message.
-     * @return A ParseException object, suitable for throwing
-     */
-    public ParseException syntaxError(String message)
-    {
-        return new ParseException(message + toString(), this.myIndex);
-    }
-
-    /**
-     * Make a printable string of this JSONTokener.
-     * 
-     * @return " at character [this.myIndex] of [this.mySource]"
-     */
-    public String toString()
-    {
-        String before = this.mySource.substring(0, this.myIndex);
-        String after = this.mySource.substring(this.myIndex);
-        
-        return " at character " + this.myIndex + " of " + before + ">>missing value<<" + after;
-    }
-
-    /**
-     * Convert <code>%</code><i>hh</i> sequences to single characters, and
-     * convert plus to space.
-     * 
-     * @param s
-     *            A string that may contain <code>+</code>&nbsp;<small>(plus)</small>
-     *            and <code>%</code><i>hh</i> sequences.
-     * @return The unescaped string.
-     */
-    public static String unescape(String s)
-    {
-        int len = s.length();
-        StringBuffer b = new StringBuffer();
-        for(int i = 0; i < len; ++i)
-        {
-            char c = s.charAt(i);
-            if (c == '+')
-            {
-                c = ' ';
-            }
-            else if (c == '%' && i + 2 < len)
-            {
-                int d = dehexchar(s.charAt(i + 1));
-                int e = dehexchar(s.charAt(i + 2));
-                if (d >= 0 && e >= 0)
-                {
-                    c = (char) (d * 16 + e);
-                    i += 2;
-                }
-            }
-            b.append(c);
-        }
-        return b.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/XML.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/XML.java
deleted file mode 100644
index 59a12bf..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/XML.java
+++ /dev/null
@@ -1,388 +0,0 @@
-package org.apache.tapestry.json;
-
-/*
-Copyright (c) 2002 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-import java.text.ParseException;
-import java.util.Iterator;
-
-
-/**
- * This provides static methods to convert an XML text into a JSONObject,
- * and to covert a JSONObject into an XML text.
- * @author JSON.org
- * @version 0.1
- */
-public final class XML {
-    
-    /** The Character '&'. */
-    public static final Character AMP   = new Character('&');
-
-    /** The Character '''. */
-    public static final Character APOS  = new Character('\'');
-
-    /** The Character '!'. */
-    public static final Character BANG  = new Character('!');
-
-    /** The Character '='. */
-    public static final Character EQ    = new Character('=');
-
-    /** The Character '>'. */
-    public static final Character GT    = new Character('>');
-
-    /** The Character '<'. */
-    public static final Character LT    = new Character('<');
-
-    /** The Character '?'. */
-    public static final Character QUEST = new Character('?');
-
-    /** The Character '"'. */
-    public static final Character QUOT  = new Character('"');
-
-    /** The Character '/'. */
-    public static final Character SLASH = new Character('/');
-
-    /* defeat instantiation */
-    private XML() { }
-    
-    /**
-     * Replace special characters with XML escapes. :
-     * <pre>
-     * &amp; is replaced by &amp;amp;
-     * &lt; is replaced by &amp;lt;
-     * &gt; is replaced by &amp;gt;
-     * &quot; is replaced by &amp;quot;
-     * </pre>
-     * @param string The string to be escaped.
-     * @return The escaped string.
-     */
-    public static String escape(String string) {
-        return string
-            .replaceAll("&", "&amp;")
-            .replaceAll("<", "&lt;")
-            .replaceAll(">", "&gt;")
-            .replaceAll("\"", "&quot;");
-    }
-
-    /**
-     * Scan the content following the named tag, attaching it to the context.
-     * @param x       The XMLTokener containing the source string.
-     * @param context The JSONObject that will include the new material.
-     * @param name    The tag name.
-     * @return true if the close tag is processed.
-     * @throws ParseException
-     */
-    private static boolean parse(XMLTokener x, JSONObject context,
-                                 String name) throws ParseException {
-        char       c;
-        int        i;
-        String     n;
-        JSONObject o;
-        String     s;
-        Object     t;
-
-// Test for and skip past these forms:
-//      <!-- ... -->
-//      <!   ...   >
-//      <![  ... ]]>
-//      <?   ...  ?>
-// Report errors for these forms:
-//      <>
-//      <=
-//      <<
-
-        t = x.nextToken();
-
-// <!
-
-        if (t == BANG) {
-            c = x.next();
-            if (c == '-') {
-                if (x.next() == '-') {
-                    x.skipPast("-->");
-                    return false;
-                }
-                x.back();
-            } else if (c == '[') {
-                x.skipPast("]]>");
-                return false;
-            }
-            i = 1;
-            do {
-                t = x.nextMeta();
-                if (t == null) {
-                    throw x.syntaxError("Missing '>' after '<!'.");
-                } else if (t == LT) {
-                    i += 1;
-                } else if (t == GT) {
-                    i -= 1;
-                }
-            } while (i > 0);
-            return false;
-        } else if (t == QUEST) {
-
-// <?
-
-            x.skipPast("?>");
-            return false;
-        } else if (t == SLASH) {
-
-// Close tag </
-
-            if (name == null || !x.nextToken().equals(name)) {
-                throw x.syntaxError("Mismatched close tag");
-            }
-            if (x.nextToken() != GT) {
-                throw x.syntaxError("Misshaped close tag");
-            }
-            return true;
-
-        } else if (t instanceof Character) {
-            throw x.syntaxError("Misshaped tag");
-
-// Open tag <
-
-        } else {
-            n = (String)t;
-            t = null;
-            o = new JSONObject();
-            while (true) {
-                if (t == null) {
-                    t = x.nextToken();
-                }
-
-// attribute = value
-
-                if (t instanceof String) {
-                    s = (String)t;
-                    t = x.nextToken();
-                    if (t == EQ) {
-                        t = x.nextToken();
-                        if (!(t instanceof String)) {
-                            throw x.syntaxError("Missing value");
-                        }
-                        o.accumulate(s, t);
-                        t = null;
-                    } else {
-                        o.accumulate(s, Boolean.TRUE);
-                    }
-
-// Empty tag <.../>
-
-                } else if (t == SLASH) {
-                    if (x.nextToken() != GT) {
-                        throw x.syntaxError("Misshaped tag");
-                    }
-                    if (o.length() == 0) {
-                        context.accumulate(n, Boolean.TRUE);
-                    } else {
-                        context.accumulate(n, o);
-                    }
-                    return false;
-
-// Content, between <...> and </...>
-
-                } else if (t == GT) {
-                    while (true) {
-                        t = x.nextContent();
-                        if (t == null) {
-                            if (name != null) {
-                                throw x.syntaxError("Unclosed tag " + name);
-                            }
-                            return false;
-                        } else if (t instanceof String) {
-                            s = (String)t;
-                            if (s.length() > 0) {
-                                o.accumulate("content", s);
-                            }
-
-// Nested element
-
-                        } else if (t == LT) {
-                            if (parse(x, o, n)) {
-                                if (o.length() == 0) {
-                                    context.accumulate(n, Boolean.TRUE);
-                                } else if (o.length() == 1 &&
-                                           o.opt("content") != null) {
-                                    context.accumulate(n, o.opt("content"));
-                                } else {
-                                    context.accumulate(n, o);
-                                }
-                                return false;
-                            }
-                        }
-                    }
-                } else {
-                    throw x.syntaxError("Misshaped tag");
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Convert a well-formed (but not necessarily valid) XML string into a
-     * JSONObject. Some information may be lost in this transformation
-     * because JSON is a data format and XML is a document format. XML uses
-     * elements, attributes, and content text, while JSON uses unordered
-     * collections of name/value pairs and arrays of values. JSON does not
-     * does not like to distinguish between elements and attributes.
-     * Sequences of similar elements are represented as JSONArrays. Content
-     * text may be placed in a "content" member. Comments, prologs, DTDs, and
-     * <code>&lt;[ [ ]]></code> are ignored.
-     * @param string The source string.
-     * @return A JSONObject containing the structured data from the XML string.
-     * @throws ParseException
-     */
-    public static JSONObject toJSONObject(String string) throws ParseException {
-        JSONObject o = new JSONObject();
-        XMLTokener x = new XMLTokener(string);
-        while (x.more()) {
-            x.skipPast("<");
-            parse(x, o, null);
-        }
-        return o;
-    }
-
-
-    /**
-     * Convert a JSONObject into a well-formed XML string.
-     * @param o A JSONObject.
-     * @return A string.
-     */
-    public static String toString(Object o) {
-        return toString(o, null);
-    }
-
-
-    /**
-     * Convert a JSONObject into a well-formed XML string.
-     * @param o A JSONObject.
-     * @param tagName The optional name of the enclosing tag.
-     * @return A string.
-     */
-    public static String toString(Object o, String tagName) {
-        StringBuffer a = null; // attributes, inside the <...>
-        StringBuffer b = new StringBuffer(); // body, between <...> and </...>
-        int          i;
-        JSONArray    ja;
-        JSONObject   jo;
-        String       k;
-        Iterator     keys;
-        int          len;
-        String       s;
-        Object       v;
-        if (o instanceof JSONObject) {
-
-// Emit <tagName
-
-            if (tagName != null) {
-                a = new StringBuffer();
-                a.append('<');
-                a.append(tagName);
-            }
-
-// Loop thru the keys. Some keys will produce attribute material, others
-// body material.
-
-            jo = (JSONObject)o;
-            keys = jo.keys();
-            while (keys.hasNext()) {
-                k = keys.next().toString();
-                v = jo.get(k);
-                if (v instanceof String) {
-                    s = (String)v;
-                } else {
-                    s = null;
-                }
-
-// Emit a new tag <k... in body
-
-                if (tagName == null || v instanceof JSONObject ||
-                        (s != null && !k.equals("content") && (s.length() > 60 ||
-                        (s.indexOf('"') >= 0 && s.indexOf('\'') >= 0)))) {
-                    b.append(toString(v, k));
-
-// Emit content in body
-
-                } else if (k.equals("content")) {
-                    b.append(escape(v.toString()));
-
-// Emit an array of similar keys in body
-
-                } else if (v instanceof JSONArray) {
-                    ja = (JSONArray)v;
-                    len = ja.length();
-                    for (i = 0; i < len; i += 1) {
-                        b.append(toString(ja.get(i), k));
-                    }
-
-// Emit an attribute
-
-                } else {
-                    a.append(' ');
-                    a.append(k);
-                    a.append('=');
-                    a.append(toString(v));
-                }
-            }
-            if (tagName != null) {
-
-// Close an empty element
-
-                if (b.length() == 0) {
-                    a.append("/>");
-                } else {
-
-// Close the start tag and emit the body and the close tag
-
-                    a.append('>');
-                    a.append(b);
-                    a.append("</");
-                    a.append(tagName);
-                    a.append('>');
-                }
-                return a.toString();
-            }
-            return b.toString();
-
-// XML does not have good support for arrays. If an array appears in a place
-// where XML is lacking, synthesize an <array> element.
-
-        } else if (o instanceof JSONArray) {
-            ja = (JSONArray)o;
-            len = ja.length();
-            for (i = 0; i < len; ++i) {
-                b.append(toString(
-                    ja.opt(i), (tagName == null) ? "array" : tagName));
-            }
-            return b.toString();
-        } else {
-            s = (o == null) ? "null" : escape(o.toString());
-            return (tagName == null) ?
-                "\"" + s + "\"" :
-                "<" + tagName + ">" + s + "</" + tagName + ">";
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/XMLTokener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/XMLTokener.java
deleted file mode 100644
index 1798937..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/XMLTokener.java
+++ /dev/null
@@ -1,266 +0,0 @@
-package org.apache.tapestry.json;
-
-/*
-Copyright (c) 2002 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-import java.text.ParseException;
-
-/**
- * The XMLTokener extends the JSONTokener to provide additional methods
- * for the parsing of XML texts.
- * @author JSON.org
- * @version 0.1
- */
-public class XMLTokener extends JSONTokener {
-
-
-   /** The table of entity values. It initially contains Character values for
-    * amp, apos, gt, lt, quot.
-    */
-   public static final java.util.HashMap entity;
-
-   static {
-       entity = new java.util.HashMap(8);
-       entity.put("amp",  XML.AMP);
-       entity.put("apos", XML.APOS);
-       entity.put("gt",   XML.GT);
-       entity.put("lt",   XML.LT);
-       entity.put("quot", XML.QUOT);
-   }
-
-    /**
-     * Construct an XMLTokener from a string.
-     * @param s A source string.
-     */
-    public XMLTokener(String s) {
-        super(s);
-    }
-
-
-    /**
-     * Get the next XML outer token, trimming whitespace. There are two kinds
-     * of tokens: the '<' character which begins a markup tag, and the content
-     * text between markup tags.
-     *
-     * @return  A string, or a '<' Character, or null if there is no more
-     * source text.
-     * @throws ParseException
-     */
-    public Object nextContent() throws ParseException {
-        char         c;
-        StringBuffer sb;
-        do {
-            c = next();
-        } while (Character.isWhitespace(c));
-        if (c == 0) {
-            return null;
-        }
-        if (c == '<') {
-            return XML.LT;
-        }
-        sb = new StringBuffer();
-        while (true) {
-            if (c == '<' || c == 0) {
-                back();
-                return sb.toString().trim();
-            }
-            if (c == '&') {
-                sb.append(nextEntity(c));
-            } else {
-                sb.append(c);
-            }
-            c = next();
-        }
-    }
-
-
-    /**
-     * Return the next entity. These entities are translated to Characters:
-     *     &amp;  &apos;  &gt;  &lt;  &quot;
-     * @param a An ampersand character.
-     * @return  A Character or an entity String if the entity is not recognized.
-     * @throws ParseException Missing ';' in XML entity
-     */
-    public Object nextEntity(char a) throws ParseException {
-        StringBuffer sb = new StringBuffer();
-        while (true) {
-            char c = next();
-            if (Character.isLetter(c)) {
-                sb.append(Character.toLowerCase(c));
-            } else if (c == ';') {
-                break;
-            } else {
-                throw syntaxError("Missing ';' in XML entity: &" + sb);
-            }
-        }
-        String s = sb.toString();
-        Object e = entity.get(s);
-        return e != null ? e : a + s + ";";
-    }
-
-
-    /**
-     * Returns the next XML meta token. This is used for skipping over <!...>
-     * and <?...?> structures.
-     * @return Syntax characters (< > / = ! ?) are returned as Character, and
-     * strings and names are returned as Boolean. We don't care what the
-     * values actually are.
-     * @throws ParseException
-     */
-    public Object nextMeta() throws ParseException {
-        char c;
-        char q;
-        do {
-            c = next();
-        } while (Character.isWhitespace(c));
-        switch (c) {
-        case 0:
-            throw syntaxError("Misshaped meta tag.");
-        case '<':
-            return XML.LT;
-        case '>':
-            return XML.GT;
-        case '/':
-            return XML.SLASH;
-        case '=':
-            return XML.EQ;
-        case '!':
-            return XML.BANG;
-        case '?':
-            return XML.QUEST;
-        case '"':
-        case '\'':
-            q = c;
-            while (true) {
-                c = next();
-                if (c == 0) {
-                    throw syntaxError("Unterminated string.");
-                }
-                if (c == q) {
-                    return Boolean.TRUE;
-                }
-            }
-        default:
-            while (true) {
-                c = next();
-                if (Character.isWhitespace(c)) {
-                    return Boolean.TRUE;
-                }
-                switch (c) {
-                case 0:
-                case '<':
-                case '>':
-                case '/':
-                case '=':
-                case '!':
-                case '?':
-                case '"':
-                case '\'':
-                    back();
-                    return Boolean.TRUE;
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Get the next XML Token. These tokens are found inside of angle
-     * brackets. It may be one of these characters: / > = ! ? or it may be a
-     * string wrapped in single quotes or double quotes, or it may be a name.
-     * @return a String or a Character.
-     * @throws ParseException
-     */
-    public Object nextToken() throws ParseException {
-        char c;
-        char q;
-        StringBuffer sb;
-        do {
-            c = next();
-        } while (Character.isWhitespace(c));
-        switch (c) {
-        case 0:
-            throw syntaxError("Misshaped element.");
-        case '<':
-            throw syntaxError("Misplaced '<'.");
-        case '>':
-            return XML.GT;
-        case '/':
-            return XML.SLASH;
-        case '=':
-            return XML.EQ;
-        case '!':
-            return XML.BANG;
-        case '?':
-            return XML.QUEST;
-
-// Quoted string
-
-        case '"':
-        case '\'':
-            q = c;
-            sb = new StringBuffer();
-            while (true) {
-                c = next();
-                if (c == 0) {
-                    throw syntaxError("Unterminated string.");
-                }
-                if (c == q) {
-                    return sb.toString();
-                }
-                if (c == '&') {
-                    sb.append(nextEntity(c));
-                } else {
-                    sb.append(c);
-                }
-            }
-        default:
-
-// Name
-
-            sb = new StringBuffer();
-            while (true) {
-                sb.append(c);
-                c = next();
-                if (Character.isWhitespace(c)) {
-                    return sb.toString();
-                }
-                switch (c) {
-                case 0:
-                case '>':
-                case '/':
-                case '=':
-                case '!':
-                case '?':
-                    back();
-                    return sb.toString();
-                case '<':
-                case '"':
-                case '\'':
-                    throw syntaxError("Bad character in a name.");
-                }
-            }
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/package.html
deleted file mode 100644
index b09e6f5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/json/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Javascript Object Notation library.
-</p>
-
-@author Jesse Kuhnert <a href="mailto:jkuhnert@apache.org">jkuhnert@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/l10n/DefaultResourceLocalizer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/l10n/DefaultResourceLocalizer.java
deleted file mode 100644
index 262abb5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/l10n/DefaultResourceLocalizer.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.l10n;

-

-import org.apache.hivemind.Resource;

-

-import java.util.Locale;

-

-/**

- * Default implementation of {@link org.apache.tapestry.l10n.ResourceLocalizer} that leverages the

- * localization rules built into

- * {@link org.apache.hivemind.Resource#getLocalization(java.util.Locale)}.

- * 

- */

-public class DefaultResourceLocalizer implements ResourceLocalizer

-{

-    /**

-     * Invokes {@link Resource#getLocalization(java.util.Locale)}.

-     */

-    public Resource findLocalization(Resource rootResource, Locale locale)

-    {

-        return rootResource.getLocalization(locale);

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/l10n/ResourceLocalizer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/l10n/ResourceLocalizer.java
deleted file mode 100644
index f5da41a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/l10n/ResourceLocalizer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.l10n;

-

-import java.util.Locale;

-

-import org.apache.hivemind.Resource;

-

-/**

- * An interface that defines how to localize a particular resource. A default implementation will

- * use {@link org.apache.hivemind.Resource#getLocalization(java.util.Locale)}, but this interface

- * (and associated chain of command configuration point) allows for alternative approaches to

- * localizing a resource.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public interface ResourceLocalizer

-{

-    /**

-     * Finds and returns a localization of a root resource for the indicated locale.

-     * 

-     * @param rootResource

-     *            the base resource for which a localization is needed

-     * @param locale

-     *            the locale to find a localization for

-     * @return the localized version of the resource, or null if not found

-     */

-    Resource findLocalization(Resource rootResource, Locale locale);

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/l10n/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/l10n/package.html
deleted file mode 100644
index 246c884..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/l10n/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-l10n related localization.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/AbsoluteLinkRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/AbsoluteLinkRenderer.java
deleted file mode 100644
index 76b999e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/AbsoluteLinkRenderer.java
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * Renders a link using an absolute URL, not simply a URI (as with
- * {@link org.apache.tapestry.link.DefaultLinkRenderer}. In addition, the scheme, server and port
- * may be changed (this may be appropriate when switching between secure and insecure portions of an
- * application).
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class AbsoluteLinkRenderer extends DefaultLinkRenderer
-{
-    private String _scheme;
-
-    private String _serverName;
-
-    private int _port;
-
-    public int getPort()
-    {
-        return _port;
-    }
-
-    public String getScheme()
-    {
-        return _scheme;
-    }
-
-    public String getServerName()
-    {
-        return _serverName;
-    }
-
-    /**
-     * Used to override the port in the final URL, if specified. If not specified, the port provided
-     * by the {@link javax.servlet.ServletRequest#getServerPort() request} is used (typically, the
-     * value 80).
-     */
-
-    public void setPort(int port)
-    {
-        _port = port;
-    }
-
-    /**
-     * Used to override the scheme in the final URL, if specified. If not specified, the scheme
-     * provided by the {@link javax.servlet.ServletRequest#getScheme() request} is used (typically,
-     * <code>http</code>).
-     */
-
-    public void setScheme(String scheme)
-    {
-        _scheme = scheme;
-    }
-
-    /**
-     * Used to override the server name in the final URL, if specified. If not specified, the port
-     * provided by the {@link javax.servlet.ServletRequest#getServerName() request} is used.
-     */
-
-    public void setServerName(String serverName)
-    {
-        _serverName = serverName;
-    }
-
-    protected String constructURL(ILinkComponent component, IRequestCycle cycle)
-    {
-        ILink link = component.getLink(cycle);
-
-        return link.getAbsoluteURL(_scheme, _serverName, _port, component.getAnchor(), true);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/AbstractLinkComponent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/AbstractLinkComponent.java
deleted file mode 100644
index d5b10c3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/AbstractLinkComponent.java
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.components.LinkEventType;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * Base class for implementations of {@link ILinkComponent}. Includes a disabled attribute (that
- * should be bound to a disabled parameter), an anchor attribute, and a renderer attribute (that
- * should be bound to a renderer parameter). A default, shared instance of
- * {@link org.apache.tapestry.link.DefaultLinkRenderer} is used when no specific renderer is
- * provided.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class AbstractLinkComponent extends AbstractComponent implements ILinkComponent
-{
-    private Map _eventHandlers;
-    
-    public abstract boolean isDisabled();
-    
-    /**
-     * Adds an event handler (typically, from a wrapped component such as a
-     * {@link org.apache.tapestry.html.Rollover}).
-     */
-
-    public void addEventHandler(LinkEventType eventType, String functionName)
-    {
-        Object currentValue;
-
-        if (_eventHandlers == null)
-            _eventHandlers = new HashMap();
-
-        currentValue = _eventHandlers.get(eventType);
-
-        // The first value is added as a String
-
-        if (currentValue == null)
-        {
-            _eventHandlers.put(eventType, functionName);
-            return;
-        }
-
-        // When adding the second value, convert to a List
-
-        if (currentValue instanceof String)
-        {
-            List list = new ArrayList();
-            list.add(currentValue);
-            list.add(functionName);
-
-            _eventHandlers.put(eventType, list);
-            return;
-        }
-
-        // For the third and up, add the new function to the List
-
-        List list = (List) currentValue;
-        list.add(functionName);
-    }
-
-    /**
-     * Renders the link by delegating to an instance of {@link ILinkRenderer}.
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        getRenderer().renderLink(writer, cycle, this);
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        super.cleanupAfterRender(cycle);
-        
-        _eventHandlers = null;
-    }
-
-    protected void writeEventHandlers(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String name = null;
-
-        if (_eventHandlers == null)
-            return;
-        
-        PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, this);
-        
-        Iterator i = _eventHandlers.entrySet().iterator();
-        
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-            LinkEventType type = (LinkEventType) entry.getKey();
-
-            name = writeEventHandler(
-                    writer,
-                    pageRenderSupport,
-                    name,
-                    type.getAttributeName(),
-                    entry.getValue());
-        }
-
-    }
-
-    protected String writeEventHandler(IMarkupWriter writer, PageRenderSupport pageRenderSupport,
-            String name, String attributeName, Object value)
-    {
-        String wrapperFunctionName;
-
-        if (value instanceof String)
-        {
-            wrapperFunctionName = (String) value;
-        }
-        else
-        {
-            String finalName = name == null ? pageRenderSupport.getUniqueString("Link") : name;
-
-            wrapperFunctionName = attributeName + "_" + finalName;
-
-            StringBuffer buffer = new StringBuffer();
-            
-            buffer.append("function ");
-            buffer.append(wrapperFunctionName);
-            buffer.append(" ()\n{\n");
-
-            Iterator i = ((List) value).iterator();
-            while (i.hasNext())
-            {
-                String functionName = (String) i.next();
-                buffer.append("  ");
-                buffer.append(functionName);
-                buffer.append("();\n");
-            }
-
-            buffer.append("}\n\n");
-
-            pageRenderSupport.addBodyScript(this, buffer.toString());
-        }
-
-        writer.attribute(attributeName, "javascript:" + wrapperFunctionName + "();");
-
-        return name;
-    }
-
-    /** @since 3.0 * */
-
-    public abstract ILinkRenderer getRenderer();
-
-    public abstract void setRenderer(ILinkRenderer renderer);
-
-    public void renderAdditionalAttributes(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        renderIdAttribute(writer, cycle);
-        
-        writeEventHandlers(writer, cycle);
-        
-        // Generate additional attributes from informal parameters.
-        
-        renderInformalParameters(writer, cycle);
-    }
-    
-    public abstract String getAnchor();
-
-    public ILink getLink(IRequestCycle cycle)
-    {
-        return null;
-    }
-
-    /**
-     * Sets the renderer parameter property to its default value
-     * {@link DefaultLinkRenderer#SHARED_INSTANCE}.
-     * 
-     * @since 3.0
-     */
-    protected void finishLoad()
-    {
-        setRenderer(DefaultLinkRenderer.SHARED_INSTANCE);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DefaultLinkRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DefaultLinkRenderer.java
deleted file mode 100644
index 73db3fb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DefaultLinkRenderer.java
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.*;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.util.ScriptUtils;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Default implementation of {@link org.apache.tapestry.link.ILinkRenderer},
- * which does nothing special. Can be used as a base class to provide additional
- * handling.
- * 
- * @since 3.0
- */
-
-public class DefaultLinkRenderer implements ILinkRenderer
-{
-
-    /**
-     * A shared instance used as a default for any link that doesn't explicitly
-     * override.
-     */
-
-    public static final ILinkRenderer SHARED_INSTANCE = new DefaultLinkRenderer();
-
-    public void renderLink(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent linkComponent)
-    {
-        IMarkupWriter wrappedWriter = null;
-        
-        if (cycle.getAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(LinkMessages.noNesting(), linkComponent, null, null);
-        
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, linkComponent);
-        
-        boolean hasBody = getHasBody();
-
-        boolean disabled = linkComponent.isDisabled() || cycle.isRewinding();
-
-        if (!disabled)
-        {
-            if (hasBody)
-                writer.begin(getElement());
-            else 
-                writer.beginEmpty(getElement());
-            
-            linkComponent.renderAdditionalAttributes(writer, cycle);
-            
-            writer.attribute(getUrlAttribute(), constructURL(linkComponent, cycle));
-            
-            String target = linkComponent.getTarget();
-            
-            if (HiveMind.isNonBlank(target))
-                writer.attribute(getTargetAttribute(), target);
-            
-            if (DirectLink.class.isInstance(linkComponent)) {
-                DirectLink direct = (DirectLink)linkComponent;
-                
-                renderAsyncParams(writer, cycle, direct);
-            }
-            
-            beforeBodyRender(writer, cycle, linkComponent);
-            
-            // Allow the wrapped components a chance to render.
-            // Along the way, they may interact with this component
-            // and cause the name variable to get set.
-            
-            wrappedWriter = writer.getNestedWriter();
-        } else 
-            wrappedWriter = writer;
-        
-        if (hasBody) 
-            linkComponent.renderBody(wrappedWriter, cycle);
-        
-        if (!disabled) {
-            
-            afterBodyRender(writer, cycle, linkComponent);
-                        
-            if (hasBody) {
-                wrappedWriter.close();
-                
-                // Close the <element> tag
-                
-                writer.end();
-            } else 
-                writer.closeTag();
-        }
-        
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-    }
-
-    /**
-     * Converts the EngineServiceLink into a URI or URL. This implementation
-     * gets the scheme and anchor from the component (both of which may be
-     * null), and invokes
-     * {@link ILink#getURL(String, String, int, String, boolean)}.
-     */
-
-    protected String constructURL(ILinkComponent component, IRequestCycle cycle)
-    {
-        ILink link = component.getLink(cycle);
-        
-        String scheme = component.getScheme();
-        Integer port = component.getPort();
-        int portI = (port == null) ? 0 : port.intValue();
-        String anchor = component.getAnchor();
-        
-        return link.getURL(scheme, null, portI, anchor, true);
-    }
-
-    /**
-     * Invoked after the href attribute has been written but before the body of
-     * the link is rendered (but only if the link is not disabled).
-     * <p>
-     * This implementation does nothing.
-     * </p>
-     *
-     * @param writer
-     *          Markup writer.
-     * @param cycle
-     *          Current request cycle.
-     * @param link
-     *          The link component being rendered.
-     */
-
-    protected void beforeBodyRender(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent link)
-    {
-    }
-
-    /**
-     * Invoked after the body of the link is rendered, but before
-     * {@link ILinkComponent#renderAdditionalAttributes(IMarkupWriter, IRequestCycle)}is
-     * invoked (but only if the link is not disabled).
-     * 
-     * <p>
-     * This implementation does nothing.
-     * </p>
-     * @param writer
-     *          Markup writer.
-     * @param cycle
-     *          Current request cycle.
-     * @param link
-     *          The link component being rendered.
-     */
-
-    protected void afterBodyRender(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent link)
-    {
-    }
-
-    /**
-     * For {@link DirectLink} components only, manages writing out event handlers for link
-     * if any of the dynamic (async/json/etc) parameters are set on the component.
-     * 
-     * <p>
-     *  Will try to write the logic into the <code>onClick</code> attribute of the link 
-     *  if not bound, otherwise it will render it using the {@link DirectLink#getScript()} script.
-     * </p>
-     * 
-     * @param writer
-     *          The writer to render attributes into.
-     * @param cycle
-     *          The current request cycle.
-     * @param link
-     *          The component link being rendered for.
-     */
-    protected void renderAsyncParams(IMarkupWriter writer, IRequestCycle cycle, DirectLink link)
-    {
-        List comps = link.getUpdateComponents();
-        
-        if (!link.isAsync() && !link.isJson() 
-                && (comps == null
-                || comps.size() <= 0))
-            return;
-        
-        if (!link.isParameterBound("onclick") && !link.isParameterBound("onClick")) {
-            writer.attribute("onclick", 
-                    "return tapestry.linkOnClick(this.href,'" + link.getClientId() + "', " + link.isJson() + ")");
-            return;
-        }
-        
-        PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, link);
-        
-        if (prs == null)
-            return;
-        
-        Map parms = new HashMap();
-        
-        parms.put("component", link);
-        parms.put("json", Boolean.valueOf(link.isJson()));
-        parms.put("key", ScriptUtils.functionHash("onclick" + link.hashCode()));
-        
-        // execute script template
-        
-        link.getScript().execute(link, cycle, prs, parms);
-    }
-    
-    /** @since 3.0 * */
-
-    protected String getElement()
-    {
-        return "a";
-    }
-
-    protected String getUrlAttribute()
-    {
-        return "href";
-    }
-
-    protected String getTargetAttribute()
-    {
-        return "target";
-    }
-
-    protected boolean getHasBody()
-    {
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java
deleted file mode 100644
index 049564d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import java.util.List;
-
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.engine.DirectServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.listener.ListenerInvoker;
-
-/**
- * A component for creating a link using the direct service; used for actions that are not dependant
- * on dynamic page state. [ <a href="../../../../../ComponentReference/DirectLink.html">Component
- * Reference </a>]
- * 
- */
-
-public abstract class DirectLink extends AbstractLinkComponent implements IDirect
-{
-    public abstract IActionListener getListener();
-
-    /**
-     * Returns true if the stateful parameter is bound to a true value. If stateful is not bound,
-     * also returns the default, true.
-     */
-    
-    public abstract boolean isStateful();
-    
-    public ILink getLink(IRequestCycle cycle)
-    {
-        Object[] serviceParameters = constructServiceParameters(getParameters());
-        
-        DirectServiceParameter dsp = new DirectServiceParameter(this, serviceParameters);
-        
-        return getEngine().getLink(isStateful(), dsp);
-    }
-    
-    /**
-     * Converts a service parameters value to an array of objects. This is used by the
-     * {@link DirectLink},{@link ServiceLink}and {@link ExternalLink}components.
-     * 
-     * @param parameterValue
-     *            the input value which may be
-     *            <ul>
-     *              <li>null (returns null)
-     *              <li>An array of Object (returns the array)
-     *              <li>A {@link List}(returns an array of the values in the List})
-     *              <li>A single object (returns the object as a single-element array)
-     *            </ul>
-     * @return An array representation of the input object.
-     * @since 2.2
-     */
-
-    public static Object[] constructServiceParameters(Object parameterValue)
-    {
-        if (parameterValue == null)
-            return null;
-
-        if (parameterValue instanceof Object[])
-            return (Object[]) parameterValue;
-
-        if (parameterValue instanceof List)
-        {
-            List list = (List) parameterValue;
-
-            return list.toArray();
-        }
-
-        return new Object[] { parameterValue };
-    }
-
-    /**
-     * Invoked by the direct service to trigger the application-specific action by notifying the
-     * {@link IActionListener listener}. If the listener parameter is not bound, attempt to locate
-     * an implicit listener named by the capitalized component id, prefixed by "do".
-     * 
-     * @throws org.apache.tapestry.StaleSessionException
-     *             if the component is stateful, and the session is new.
-     */
-
-    public void trigger(IRequestCycle cycle)
-    {
-        IActionListener listener = getListener();
-
-        if (listener == null)
-	        listener = getContainer().getListeners().getImplicitListener(this);
-
-        getListenerInvoker().invokeListener(listener, this, cycle);
-    }
-
-    /** @since 2.2 * */
-
-    public abstract Object getParameters();
-
-    /**
-     * Injected.
-     * 
-     * @since 4.0
-     */
-
-    public abstract ListenerInvoker getListenerInvoker();
-    
-    /**
-     * Injected.
-     * 
-     * @since 4.1
-     */
-    public abstract IEngineService getEngine();
-    
-    /**
-     * Injected.
-     * @return The script to process asynchronous connection hookups.
-     */
-    public abstract IScript getScript();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.jwc
deleted file mode 100644
index f29037a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.jwc
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.link.DirectLink">
-
-  <description>
-  Creates a non-contextual link.  Non-persistent state can be stored within the link
-  using the parameters, which will be encoded into the URL and provided to the eventual
-  listener.
-  </description>
-
-  <parameter name="listener">
-	  <description>
-		  The listener to be called when the link is clicked. If none is provided,
-		  Tapestry will attempt to find a listener with the capitalized id of the
-		  component, prefixed by "do". For example, jwcid="clear@DirectLink" would
-		  have a listener called doClear().
-	  </description>
-  </parameter>
-  	
-  <parameter name="parameters">
-    <description>
-    An object, or list of objects, encoded into the URL
-    as listener parameters (and made available to the ulimate listener object
-        or method).
-    </description>
-  </parameter>
-  
-  <parameter name="stateful" default-value="true"/>
-  
-  <parameter name="disabled"/>
-  	  	
-  <parameter name="anchor"/>
-  	
-  <parameter name="target"/>
-  	
-  <parameter name="renderer"/>
-  
-  <reserved-parameter name="href"/>
-  
-  <parameter name="scheme">
-    <description>
-    Forces the link to be generated as an absolute URL with the given scheme
-    (unless the scheme matches the scheme for the current request).
-    </description>
-  </parameter>  
-    
-  <parameter name="port">
-    <description>
-      Forces the link to be generated as an absolute URL with the given port
-      (unless the port matches the port for the current request).
-    </description>
-  </parameter>  
-  
-  <parameter name="updateComponents" />
-  
-  <parameter name="json" default-value="false" />
-  
-  <parameter name="async" default-value="false" />
-  
-  <inject property="script" type="script" object="DirectLink.script"/>
-  
-  <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/>
-  <inject object="service:tapestry.services.Direct" property="engine"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.script
deleted file mode 100644
index a164ac0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.script
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-  "http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<script>
-<input-symbol key="component" required="yes" />
-<input-symbol key="json" required="yes" />
-<input-symbol key="key" required="yes" />
-    <body>
-    <unique>
-    dojo.require("tapestry.event");
-    </unique>
-    </body>
-    <initialization>
-        tapestry.cleanConnect(dojo.byId("${component.clientId}"), 
-                              "onclick", "event${key}");
-        tapestry.event${key}=function(e){
-            dojo.event.browser.stopEvent(e);
-            
-            var content={beventname:"onClick", bcomponentid:"${component.id}"};
-            tapestry.event.buildEventProperties(e, content);
-            if (!content["beventtarget.id"]) {content["beventtarget.id"]="${component.clientId}"};
-            
-            var url=null;
-            if (e["currentTarget"] &amp;&amp; e.currentTarget.getAttribute("href")) {
-                url=e.currentTarget.getAttribute("href");
-            } else if (e["target"] &amp;&amp; e.target.getAttribute("href")) {
-                url=e.target.getAttribute("href");
-            } else if (e["relatedTarget"] &amp;&amp; e.relatedTarget.getAttribute("href")) {
-                url=e.relatedTarget.getAttribute("href");
-            } else {
-                dojo.raise("Error, link target not found or invalid. Couldn't determine href url. " + e);
-                return;
-            }
-            
-            tapestry.bind(url, content, ${json});
-        };
-        dojo.event.connect(dojo.byId("${component.clientId}"), "onclick", tapestry, "event${key}");
-    </initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ExternalLink.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ExternalLink.java
deleted file mode 100644
index d7a4086..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ExternalLink.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ExternalServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * A component for creating a link to {@link org.apache.tapestry.IExternalPage}using
- * the {@link org.apache.tapestry.engine.ExternalService}. [ <a
- * href="../../../../../ComponentReference/ExternalLink.html">Component
- * Reference </a>]
- * 
- * @see org.apache.tapestry.IExternalPage
- * @see org.apache.tapestry.engine.ExternalService
- * @author Malcolm Edgar
- */
-
-public abstract class ExternalLink extends AbstractLinkComponent
-{
-
-    public abstract IEngineService getExternalService();
-
-    public ILink getLink(IRequestCycle cycle)
-    {
-        Object[] serviceParameters = DirectLink
-                .constructServiceParameters(getParameters());
-
-        ExternalServiceParameter esp = new ExternalServiceParameter(
-                getTargetPage(), serviceParameters);
-
-        return getExternalService().getLink(false, esp);
-    }
-
-    public abstract Object getParameters();
-
-    public abstract String getTargetPage();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ExternalLink.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ExternalLink.jwc
deleted file mode 100644
index caf2d1a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ExternalLink.jwc
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.link.ExternalLink">
-
-  <description>Creates link using the external service, which can pass service parameters to the targeted page.</description>
-
-  <parameter name="page" 
-  	required="yes" 
-  	property="targetPage"/>
-
-  <parameter name="parameters">
-    <description>
-    An object, or list of objects, encoded into the URL
-    as service parameters.
-    </description>
-  </parameter>
-  
-  <parameter name="disabled"/>
-  	  	
-  <parameter name="anchor"/>
-  	
-  <parameter name="target"/>
-  	
-  <parameter name="renderer"/>
-  
-  <parameter name="scheme">
-    <description>
-      Forces the link to be generated as an absolute URL with the given scheme
-      (unless the scheme matches the scheme for the current request).
-    </description>
-  </parameter>  
-  	
-  <parameter name="port">
-    <description>
-      Forces the link to be generated as an absolute URL with the given port
-      (unless the port matches the port for the current request).
-    </description>
-  </parameter>  
-  
-  <reserved-parameter name="href"/>
-  
-  <inject property="externalService" object="engine-service:external"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/GenericLink.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/GenericLink.java
deleted file mode 100644
index 4627dc3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/GenericLink.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * An implementation of {@link org.apache.tapestry.components.ILinkComponent}
- * that allows the exact HREF to be specified, usually used for client side
- * scripting. [<a
- * href="../../../../../ComponentReference/GenericLink.html">Component Reference</a>]
- * 
- * @author Howard Lewis Ship
- * @since 2.0.2
- */
-
-public abstract class GenericLink extends AbstractLinkComponent
-{
-
-    public abstract String getHref();
-
-    public ILink getLink(IRequestCycle cycle)
-    {
-        return new StaticLink(getHref());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/GenericLink.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/GenericLink.jwc
deleted file mode 100644
index 696fbf1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/GenericLink.jwc
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-  
-<component-specification class="org.apache.tapestry.link.GenericLink">
-
-  <description>
-  Creates a link to an application specified URL.
-  </description>
-  
-  <parameter name="href" required="yes"/>
-
-  <parameter name="disabled"/>
-  	  	
-  <parameter name="anchor"/>
-  	
-  <parameter name="target"/>
-  	
-  <parameter name="renderer"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ILinkRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ILinkRenderer.java
deleted file mode 100644
index cf46566..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ILinkRenderer.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.ILinkComponent;
-
-/**
- *  Used by various instances of {@link org.apache.tapestry.components.ILinkComponent} to
- *  actually renderer a link.  Implementations of the interface can manipulate
- *  some of the details of how the link is written.
- * 
- *  <p>
- *  A link rendered may be used in many threads, and must be threadsafe.
- *
- *  @author Howard Lewis Ship
- *  @since 3.0
- * 
- **/
-
-public interface ILinkRenderer
-{
-    /**
-     *  Renders the link, taking into account whether the link is
-     *  {@link org.apache.tapestry.components.ILinkComponent#isDisabled() disabled}.
-     *  This is complicated by the fact that the rendering of the body must be done
-     *  within a nested writer, since the Link component will not render its tag
-     *  until after its body renders (to allow for any wrapped components that need
-     *  to write event handlers for the link).
-     * 
-     *  <p>
-     *  The renderer is expected to call back into the link component to handle
-     *  any informal parameters, and to handle events output.
-     * 
-     * 
-     **/
-
-    void renderLink(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent linkComponent);
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/LinkMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/LinkMessages.java
deleted file mode 100644
index 014da78..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/LinkMessages.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.link;

-

-import org.apache.hivemind.impl.MessageFormatter;

-

-/**

- * Generates error messages related to link components.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public final class LinkMessages

-{

-

-    private static final MessageFormatter _formatter = new MessageFormatter(

-            LinkMessages.class);

-

-    /* defeat instantiation */

-    private LinkMessages() { }

-    

-    public static String noNesting()

-    {

-        return _formatter.getMessage("no-nesting");

-    }

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/LinkStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/LinkStrings.properties
deleted file mode 100644
index b12be54..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/LinkStrings.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-no-nesting=Components that generate hyperlinks may not be nested.

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/PageLink.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/PageLink.java
deleted file mode 100644
index 384c20e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/PageLink.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * A component for creating a navigation link to another page, using the page
- * service. [ <a
- * href="../../../../../ComponentReference/PageLink.html">Component Reference
- * </a>]
- * 
- * @author Howard Ship
- */
-
-public abstract class PageLink extends AbstractLinkComponent
-{
-
-    public abstract IEngineService getPageService();
-
-    public ILink getLink(IRequestCycle cycle)
-    {
-        String parameter = null;
-        INamespace namespace = getTargetNamespace();
-        String targetPage = getTargetPage();
-
-        if (namespace == null)
-            parameter = targetPage;
-        else parameter = namespace.constructQualifiedName(targetPage);
-
-        return getPageService().getLink(false, parameter);
-    }
-
-    public abstract String getTargetPage();
-
-    /** @since 2.2 * */
-
-    public abstract INamespace getTargetNamespace();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/PageLink.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/PageLink.jwc
deleted file mode 100644
index de9b4cf..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/PageLink.jwc
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.link.PageLink">
-
-  <description>
-  Creates a link to another page within the application.
-  </description>
-  
-  <parameter name="page" 
-  	required="yes" 
-  	property="targetPage"/>
-  
-  <parameter name="namespace"  
-  	required="no" 
-  	property="targetNamespace"/>
-  	  	
-  <parameter name="disabled"/>
-  	  	
-  <parameter name="anchor"/>
-  	
-  <parameter name="target"/>
-  	
-  <parameter name="renderer"/>
-  
-  <reserved-parameter name="href"/>
-  
-  <parameter name="scheme">
-    <description>
-      Forces the link to be generated as an absolute URL with the given scheme
-      (unless the scheme matches the scheme for the current request).
-    </description>
-  </parameter>  
-  
-  <parameter name="port">
-    <description>
-      Forces the link to be generated as an absolute URL with the given port
-      (unless the port matches the port for the current request).
-    </description>
-  </parameter>  
-  
-  <inject property="pageService" object="engine-service:page"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ServiceLink.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ServiceLink.java
deleted file mode 100644
index ec30ac8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ServiceLink.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.services.ServiceMap;
-
-/**
- *  A component for creating a link for an arbitrary {@link org.apache.tapestry.engine.IEngineService
- *  engine service}.  A ServiceLink component can emulate a {@link PageLink} or {@link DirectLink} component, 
- *  but is most often used in conjunction with an application-specific service.  
- *
- *  [<a href="../../../../../ComponentReference/ServiceLink.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public abstract class ServiceLink extends AbstractLinkComponent
-{
-    public ILink getLink(IRequestCycle cycle)
-    {
-        Object[] parameters = DirectLink.constructServiceParameters(getParameters());
-        
-        return getServiceMap().getService(getService()).getLink(false, parameters);
-    }
-
-    public abstract String getService();
-
-    /**
-     * Injected.
-     * @since 4.1
-     */
-    public abstract ServiceMap getServiceMap();
-    
-    public abstract Object getParameters();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ServiceLink.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ServiceLink.jwc
deleted file mode 100644
index 3b0bcb4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/ServiceLink.jwc
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.link.ServiceLink">
-
-  <description>
-  Creates a link using an arbitrary engine service.
-  </description>
-  
-  <parameter name="service" required="yes"/>
-  
-  <parameter name="parameters">
-    <description>
-    A object or string, or array of objects and strings, encoded into the URL
-    as service parameters.
-    </description>
-  </parameter>
-
-  <parameter name="disabled"/>
-  	  	
-  <parameter name="anchor"/>
-  	
-  <parameter name="target"/>
-  	
-  <parameter name="renderer"/>
-
-  <reserved-parameter name="href"/>
-  
-  <parameter name="scheme">
-    <description>
-      Forces the link to be generated as an absolute URL with the given scheme
-      (unless the scheme matches the scheme for the current request).
-    </description>
-  </parameter>   
-  
-  <parameter name="port">
-    <description>
-      Forces the link to be generated as an absolute URL with the given port
-      (unless the port matches the port for the current request).
-    </description>
-  </parameter>  
-  
-  <inject object="service:tapestry.services.ServiceMap" property="serviceMap"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/StaticLink.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/StaticLink.java
deleted file mode 100644
index 7e8c4fc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/StaticLink.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.engine.ILink;
-
-/**
- * Used by {@link org.apache.tapestry.link.GenericLink} to represent an external, static URL.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-public class StaticLink implements ILink
-{
-    private String _url;
-
-    public StaticLink(String url)
-    {
-        _url = url;
-    }
-
-    public String getURL()
-    {
-        return _url;
-    }
-
-    public String getURL(String anchor, boolean includeParameters)
-    {
-        if (anchor == null)
-            return _url;
-
-        return _url + "#" + anchor;
-    }
-
-    public String getAbsoluteURL()
-    {
-        return _url;
-    }
-
-    /**
-     * Ignores its parameter and return {@link #getURL(String, boolean)}.
-     */
-    public String getAbsoluteURL(String scheme, String server, int port, String anchor,
-            boolean includeParameters)
-    {
-        return getURL(anchor, false);
-    }
-
-    /**
-     * Ignores its parameter and return {@link #getURL(String, boolean)}.
-     */
-    public String getURL(String scheme, String server, int port, String anchor,
-            boolean includeParameters)
-    {
-        return getURL(anchor, false);
-    }
-
-    public String[] getParameterNames()
-    {
-        return null;
-    }
-
-    public String[] getParameterValues(String name)
-    {
-        throw new IllegalArgumentException();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/package.html
deleted file mode 100644
index db2ed95..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/link/package.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Components for creating links on the page that trigger application behavior
-when clicked.  These links are compatible with HTML and WML (they
-use the basic &lt;a&gt; element).
-
-<p>Each component is related to a different 
-{@link org.apache.tapestry.engine.IEngineService}, except for {@link org.apache.tapestry.link.ServiceLink}
-which is parameterized to use any of the available services ... which is useful with
-applications that define their own services.
-
-<p>Link components have a second function, to provide event handling support to the 
-components they wrap.  This is how a {@link org.apache.tapestry.html.Rollover} component manages
-to include DHTML and JavaScript that preloads the images and changes the displayed image as the
-mouse enters and exits the "hot" area defined by the link.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvoker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvoker.java
deleted file mode 100644
index 1ef165b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvoker.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Pipeline service interface for the tapestry.listener.ListenerInvoker pipeline service.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.listener.ListenerInvokerFilter
- */
-public interface ListenerInvoker
-{
-    /**
-     * Part of the pipeline for invoking the given listener object. This may be supplemented by
-     * various filters.
-     * 
-     * @param listener
-     *            to be invoked, may be null if no listener is found (a convienience for all the
-     *            places where listeners are optional)
-     * @param source
-     *            the component generating the listener "event", to be passed to the listener. Not
-     *            generally used, but may not be null.
-     * @param cycle
-     *            the current request cycle, to be passed to the listener.
-     */
-
-    void invokeListener(IActionListener listener, IComponent source, IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerFilter.java
deleted file mode 100644
index 935212f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerFilter.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Filter interface used with
- * {@link org.apache.tapestry.listener.ListenerInvoker}. Implementations of
- * this filter interface may be plugged into the listener method invocation
- * pipeline. Typical applications involve handling transactions.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ListenerInvokerFilter
-{
-
-    /**
-     * Invoked when a particular listener is being called.
-     *
-     * @param listener The listener reference being invoked.
-     * @param source The component the listener is being invoked on.
-     * @param cycle The associated request.
-     * @param delegate The delegate responsible for actually invoking the method.
-     */
-    void invokeListener(IActionListener listener, IComponent source, IRequestCycle cycle, ListenerInvoker delegate);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerTerminator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerTerminator.java
deleted file mode 100644
index 5b696c7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerTerminator.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Terminator implementation for the tapestry.listener.InvokeListener pipeline;
- * this is what finally turns around and invokes
- * {@link org.apache.tapestry.IActionListener#actionTriggered(IComponent, IRequestCycle)}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ListenerInvokerTerminator implements ListenerInvoker
-{
-
-    /**
-     * @param listener
-     *            to be invoked, may be null if no listener is found (a
-     *            convienience for all the places where listeners are optional)
-     * @param source
-     *            the component generating the listener "event", to be passed to
-     *            the listener. Not generally used, but may not be null.
-     * @param cycle
-     *            the current request cycle, to be passed to the listener.
-     */
-    public void invokeListener(IActionListener listener, IComponent source,
-            IRequestCycle cycle)
-    {
-        Defense.notNull(source, "source");
-        Defense.notNull(cycle, "cycle");
-
-        if (listener != null)
-            listener.actionTriggered(source, cycle);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMap.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMap.java
deleted file mode 100644
index 4127c43..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMap.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import java.util.Collection;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-
-/**
- * @author Howard M. Lewis Ship
- */
-public interface ListenerMap
-{
-
-    /**
-     * Gets a listener for the given name (which is both a property name and a
-     * method name). The listener is created as needed, but is also cached for
-     * later use. The returned object implements the
-     * {@link org.apache.tapestry.IActionListener}.
-     * 
-     * @param name
-     *            the name of the method to invoke (the most appropriate method
-     *            will be selected if there are multiple overloadings of the
-     *            same method name)
-     * @returns an object implementing {@link IActionListener}.
-     * @throws ApplicationRuntimeException
-     *             if the listener can not be created.
-     */
-    IActionListener getListener(String name);
-
-	/**
-	 * Gets a listener on the given component generated from the capitalized
-	 * component id, prefixed by "do". For example, jwcid="clear@DirectLink"
-	 * would have a listener called doClear().
-	 *
-	 * @param component
-	 *          the component whose id is used to make up the name of the
-	 *          expected listener
-	 * @returns an object implementing {@link IActionListener}.
-	 * @throws ApplicationRuntimeException
-	 *          if the listener can not be found on the component
-	 */
-	IActionListener getImplicitListener(IComponent component);
-
-    /**
-     * Returns an unmodifiable collection of the names of the listeners
-     * implemented by the target class.
-     * 
-     * @since 1.0.6
-     */
-    Collection getListenerNames();
-
-    /**
-     * Returns true if this ListenerMapImpl can provide a listener with the
-     * given name.
-     * 
-     * @since 2.2
-     */
-    boolean canProvideListener(String name);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapImpl.java
deleted file mode 100644
index bc60eb6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapImpl.java
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.TapestryUtils;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ListenerMapImpl implements ListenerMap
-{
-
-    private final Object _target;
-
-    /**
-     * Keyed on String method name, value is
-     * {@link org.apache.tapestry.listener.ListenerMethodInvoker}.
-     */
-
-    private final Map _invokers;
-
-    private final Map _listeners = new HashMap();
-
-    public ListenerMapImpl(Object target, Map invokers)
-    {
-        Defense.notNull(target, "target");
-        Defense.notNull(invokers, "invokers");
-
-        _target = target;
-        _invokers = invokers;
-    }
-
-    public boolean canProvideListener(String name)
-    {
-        return _invokers.containsKey(name);
-    }
-
-    public synchronized IActionListener getListener(String name)
-    {
-        IActionListener result = (IActionListener) _listeners.get(name);
-
-        if (result == null)
-        {
-            result = createListener(name);
-            _listeners.put(name, result);
-        }
-
-        return result;
-    }
-
-	public IActionListener getImplicitListener(IComponent component)
-	{
-		IActionListener listener;
-		String generatedName = "do" + TapestryUtils.capitalize(component.getId());
-		try
-		{
-			listener = getListener(generatedName);
-		}
-		catch (ApplicationRuntimeException e)
-		{
-			throw new ApplicationRuntimeException(ListenerMessages.noImplicitListenerMethodFound(generatedName, component), component, null, e);
-		}
-
-		return listener;
-	}
-
-	private IActionListener createListener(String name)
-    {
-        ListenerMethodInvoker invoker = (ListenerMethodInvoker) _invokers.get(name);
-
-        if (invoker == null)
-            throw new ApplicationRuntimeException(ListenerMessages.objectMissingMethod(_target, name),
-                                                  _target, null, null);
-
-        return new SyntheticListener(_target, invoker);
-    }
-
-    public Collection getListenerNames()
-    {
-        return Collections.unmodifiableCollection(_invokers.keySet());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapPropertyAccessor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapPropertyAccessor.java
deleted file mode 100644
index cd0ef49..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapPropertyAccessor.java
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import java.util.Map;
-
-import ognl.ObjectPropertyAccessor;
-import ognl.OgnlContext;
-import ognl.OgnlException;
-import ognl.OgnlRuntime;
-import ognl.PropertyAccessor;
-import ognl.enhance.ExpressionCompiler;
-import ognl.enhance.UnsupportedCompilationException;
-
-/**
- * Exposes {@link org.apache.tapestry.IActionListener}&nbsp;listeners provided
- * by the {@link org.apache.tapestry.listener.ListenerMap}&nbsp;as read-only
- * properties of the map.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class ListenerMapPropertyAccessor extends ObjectPropertyAccessor implements PropertyAccessor
-{
-
-    /**
-     * Checks to see if the ListenerMapImpl provides the named listener,
-     * returning the listener if it does. Otherwise, invokes the super
-     * implementation.
-     */
-
-    public Object getProperty(Map context, Object target, Object name)
-        throws OgnlException
-    {
-        ListenerMap map = (ListenerMap) target;
-        String listenerName = (String) name;
-
-        if (map.canProvideListener(listenerName))
-            return map.getListener(listenerName);
-
-        return super.getProperty(context, target, name);
-    }
-
-    /**
-     * Returns true if the ListenerMap contains the named listener, otherwise
-     * invokes super-implementation.
-     */
-
-    public boolean hasGetProperty(Map context, Object target, Object oname)
-        throws OgnlException
-    {
-        ListenerMap map = (ListenerMap) target;
-        String listenerName = (String) oname;
-
-        if (map.canProvideListener(listenerName)) return true;
-
-        return super.hasGetProperty(context, target, oname);
-    }
-    
-    public Class getPropertyClass(OgnlContext context, Object target, Object name)
-    {
-        ListenerMap map = (ListenerMap) target;
-        String listenerName = (String) name;
-        
-        if (map.canProvideListener(listenerName))
-            return map.getListener(listenerName).getClass();
-        
-        return super.getPropertyClass(context, target, name);
-    }
-    
-    public String getSourceAccessor(OgnlContext context, Object target, Object name)
-    {
-        ListenerMap map = (ListenerMap) target;
-        String listenerName = ((String)name).replaceAll("\"", "");
-        
-        if (map.canProvideListener(listenerName)) {
-            
-            Class type = OgnlRuntime.getCompiler().getInterfaceClass(map.getListener(listenerName).getClass());
-            
-            ExpressionCompiler.addCastString(context, "((" + type.getName() + ")");
-            
-            context.setCurrentAccessor(ListenerMap.class);
-            context.setCurrentType(type);
-            
-            return ".getListener(" + name + "))";
-        }
-        
-        return super.getSourceAccessor(context, target, name);
-    }
-    
-    public String getSourceSetter(OgnlContext context, Object target, Object name)
-    {
-        throw new UnsupportedCompilationException("Can't set listeners on ListenerMap.");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapSource.java
deleted file mode 100644
index 902d995..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapSource.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-/**
- * A service which provides access to
- * {@link org.apache.tapestry.listener.ListenerMap} &nbsp;objects.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ListenerMapSource
-{
-
-    /**
-     * Constructs a listener map for the provided object, which must not be
-     * null.
-     * 
-     * @param object
-     *            the object to provide a map for
-     * @return a ListenerMap configured for the object
-     */
-
-    ListenerMap getListenerMapForObject(Object object);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapSourceImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapSourceImpl.java
deleted file mode 100644
index 9925185..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMapSourceImpl.java
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.event.ResetEventListener;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.*;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ListenerMapSourceImpl implements ListenerMapSource, ResetEventListener
-{
-
-    /**
-     * Sorts {@link Method}s into descending order by parameter count.
-     */
-
-    private static class ParameterCountComparator implements Comparator
-    {
-
-        public int compare(Object o1, Object o2)
-        {
-            Method m1 = (Method) o1;
-            Method m2 = (Method) o2;
-
-            return m2.getParameterTypes().length
-                    - m1.getParameterTypes().length;
-        }
-
-    }
-
-    /**
-     * Keyed on Class, value is a Map. The inner Map is an invoker map ... keyed
-     * on listener method name, value is
-     * {@link org.apache.tapestry.listener.ListenerMethodInvoker}.
-     */
-
-    private final Map _classToInvokerMap = new HashMap();
-
-    public ListenerMap getListenerMapForObject(Object object)
-    {
-        Defense.notNull(object, "object");
-
-        Class objectClass = object.getClass();
-
-        Map invokerMap = findInvokerMap(objectClass);
-
-        return new ListenerMapImpl(object, invokerMap);
-    }
-
-    public synchronized void resetEventDidOccur()
-    {
-        _classToInvokerMap.clear();
-    }
-
-    private synchronized Map findInvokerMap(Class targetClass)
-    {
-        Map result = (Map) _classToInvokerMap.get(targetClass);
-
-        if (result == null)
-        {
-            result = buildInvokerMapForClass(targetClass);
-            _classToInvokerMap.put(targetClass, result);
-        }
-
-        return result;
-    }
-
-    private Map buildInvokerMapForClass(Class targetClass)
-    {
-        // map, keyed on method name, value is List of Method
-        // only methods that return void, return String, or return
-        // something assignable to IPage are kept.
-
-        Map map = new HashMap();
-
-        Method[] methods = targetClass.getMethods();
-
-        // Sort all the arrays, just once, and the methods will be
-        // added to the individual lists in the correct order
-        // (descending by parameter count).
-
-        Arrays.sort(methods, new ParameterCountComparator());
-
-        for(int i = 0; i < methods.length; i++)
-        {
-            Method m = methods[i];
-
-            if (!isAcceptibleListenerMethodReturnType(m)) continue;
-
-            if (Modifier.isStatic(m.getModifiers())) continue;
-
-            String name = m.getName();
-
-            addMethodToMappedList(map, m, name);
-        }
-
-        return convertMethodListMapToInvokerMap(map);
-    }
-
-    boolean isAcceptibleListenerMethodReturnType(Method m)
-    {
-        Class returnType = m.getReturnType();
-
-        if (returnType == void.class || returnType == String.class)
-            return true;
-
-        return IPage.class.isAssignableFrom(returnType)
-                || ILink.class.isAssignableFrom(returnType);
-    }
-
-    private Map convertMethodListMapToInvokerMap(Map map)
-    {
-        Map result = new HashMap();
-
-        Iterator i = map.entrySet().iterator();
-        while(i.hasNext())
-        {
-            Map.Entry e = (Map.Entry) i.next();
-
-            String name = (String) e.getKey();
-            List methodList = (List) e.getValue();
-
-            Method[] methods = convertMethodListToArray(methodList);
-
-            ListenerMethodInvoker invoker = createListenerMethodInvoker(name,
-                    methods);
-
-            result.put(name, invoker);
-        }
-
-        return result;
-    }
-
-    /**
-     * This implementation returns a new {@link ListenerMethodInvoker}.
-     * Subclasses can override to provide their own implementation.
-     */
-
-    protected ListenerMethodInvoker createListenerMethodInvoker(String name,
-            Method[] methods)
-    {
-        return new ListenerMethodInvokerImpl(name, methods);
-    }
-
-    private Method[] convertMethodListToArray(List methodList)
-    {
-        int size = methodList.size();
-        Method[] result = new Method[size];
-
-        return (Method[]) methodList.toArray(result);
-    }
-
-    private void addMethodToMappedList(Map map, Method m, String name)
-    {
-        List l = (List) map.get(name);
-
-        if (l == null)
-        {
-            l = new ArrayList();
-            map.put(name, l);
-        }
-
-        l.add(m);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMessages.java
deleted file mode 100644
index 9a51ef5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMessages.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import java.lang.reflect.Method;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.Tapestry;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class ListenerMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(ListenerMessages.class);
-
-    /* defeat instantiation */
-    private ListenerMessages() { }
-    
-    static String objectMissingMethod(Object target, String name)
-    {
-        return _formatter.format("object-missing-method", target, name);
-    }
-
-    static String unableToInvokeMethod(Method method, Object target, Throwable ex)
-    {
-        return _formatter.format("unable-to-invoke-method", method.getName(), target, ex);
-    }
-
-    static String listenerMethodFailure(Method m, Object target, Throwable cause)
-    {
-        return _formatter.format("listener-method-failure", m, target, cause);
-    }
-
-    static String noListenerMethodFound(String name, Object[] serviceParameters, Object target)
-    {
-        return _formatter.format("no-listener-method-found", name, new Integer(Tapestry
-                .size(serviceParameters)), target);
-    }
-
-	static String noImplicitListenerMethodFound(String name, Object target)
-	{
-		return _formatter.format("no-implicit-listener-method-found", name, target);
-	}
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvoker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvoker.java
deleted file mode 100644
index cc52747..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvoker.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * An object, used by a {@link org.apache.tapestry.listener.ListenerMap}, to
- * match requests (possibly with service parameters) to methods (possibly with
- * arguments). Given a request, a (possibly null or empty) array of service
- * parameters, and a target object (and its set of public void methods), the
- * mapping will search for the mostly likely mapping. In order:
- * <ul>
- * <li>public void method(params) (where the method takes the same number of
- * parameters as there are service parameters)
- * <li>public void method(IRequestCycle, params)
- * <li>public void method()
- * <li>public void method(IRequestCycle)
- * </ul>
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ListenerMethodInvoker
-{
-
-    /**
-     * Called to invoke the bound listener method.
-     *
-     * @param target The object to call the listener method on.
-     * @param cycle The associated request.
-     */
-    void invokeListenerMethod(Object target, IRequestCycle cycle);
-    
-    /**
-     * The actual method name that this listener represents.
-     *
-     * @return The method name this listener is bound to.
-     */
-    String getMethodName();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvokerImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvokerImpl.java
deleted file mode 100644
index b5f2144..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvokerImpl.java
+++ /dev/null
@@ -1,291 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.event.BrowserEvent;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Logic for mapping a listener method name to an actual method invocation; this
- * may require a little searching to find the correct version of the method,
- * based on the number of parameters to the method (there's a lot of flexibility
- * in terms of what methods may be considered a listener method).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ListenerMethodInvokerImpl implements ListenerMethodInvoker
-{
-
-    /**
-     * Used as default byte value in null method parameters for native types
-     */
-    private static final byte DEFAULT_BYTE = -1;
-
-    /**
-     * Used as default short value in null method parameters for native types
-     */
-    private static final short DEFAULT_SHORT = -1;
-    
-    /**
-     * Methods with a name appropriate for this class, sorted into descending
-     * order by number of parameters.
-     */
-
-    private final Method[] _methods;
-
-    /**
-     * The listener method name, used in some error messages.
-     */
-
-    private final String _name;
-
-    public ListenerMethodInvokerImpl(String name, Method[] methods)
-    {
-        Defense.notNull(name, "name");
-        Defense.notNull(methods, "methods");
-
-        _name = name;
-        _methods = methods;
-    }
-
-    public void invokeListenerMethod(Object target, IRequestCycle cycle)
-    {
-        Object[] listenerParameters = cycle.getListenerParameters();
-        
-        if (listenerParameters == null)
-            listenerParameters = new Object[0];
-        
-        if (searchAndInvoke(target, cycle, listenerParameters))
-            return;
-        
-        throw new ApplicationRuntimeException(ListenerMessages.noListenerMethodFound(_name, listenerParameters, target),
-                target, null, null);
-    }
-    
-    private boolean searchAndInvoke(Object target, IRequestCycle cycle, Object[] listenerParameters)
-    {
-        BrowserEvent event = null;
-        if (listenerParameters.length > 0 
-                && BrowserEvent.class.isInstance(listenerParameters[listenerParameters.length - 1]))
-            event = (BrowserEvent)listenerParameters[listenerParameters.length - 1];
-        
-        List invokeParms = new ArrayList();
-
-        Method possibleMethod = null;
-
-        methods:
-            for (int i = 0; i < _methods.length; i++, invokeParms.clear()) {
-                
-                if (!_methods[i].getName().equals(_name))
-                   continue;
-                
-                Class[] parms = _methods[i].getParameterTypes();
-                
-                // impossible to call this
-                
-                if (parms.length > (listenerParameters.length + 1) ) {
-                    
-                    if (possibleMethod == null)
-                        possibleMethod = _methods[i];
-                    else if (parms.length < possibleMethod.getParameterTypes().length)
-                        possibleMethod = _methods[i];
-                    
-                    continue;
-                }
-                
-                int listenerIndex = 0;
-                for (int p = 0; p < parms.length && listenerIndex < (listenerParameters.length + 1); p++) {
-                    
-                    // special case for BrowserEvent
-                    if (BrowserEvent.class.isAssignableFrom(parms[p])) {
-                        if (event == null)
-                            continue methods;
-                        
-                        if (!invokeParms.contains(event))
-                            invokeParms.add(event);
-                        
-                        continue;
-                    }
-                    
-                    // special case for request cycle
-                    if (IRequestCycle.class.isAssignableFrom(parms[p])) {
-                        invokeParms.add(cycle);
-                        continue;
-                    }
-                    
-                    if (event != null && listenerIndex < (listenerParameters.length + 1)
-                            || listenerIndex < listenerParameters.length) {
-                        invokeParms.add(listenerParameters[listenerIndex]);
-                        listenerIndex++;
-                    }
-                }
-                
-                if (invokeParms.size() != parms.length) {
-
-                    // set possible method just in case
-                    
-                    if (possibleMethod == null)
-                        possibleMethod = _methods[i];
-                    else if (parms.length < possibleMethod.getParameterTypes().length)
-                        possibleMethod = _methods[i];
-
-                    continue;
-                }
-                
-                invokeListenerMethod(_methods[i], target, cycle, invokeParms.toArray(new Object[invokeParms.size()]));
-                
-                return true;
-            }
-
-        // if we didn't have enough parameters but still found a matching method name go ahead
-        // and do your best to fill in the parameters and invoke it
-
-        if (possibleMethod != null) {
-
-            Class[] parms = possibleMethod.getParameterTypes();
-            Object[] args = new Object[parms.length];
-            
-            for (int p=0; p < parms.length; p++) {
-
-                // setup primitive defaults
-                
-                if (parms[p].isPrimitive()) {
-
-                    if (parms[p] == Boolean.TYPE) {
-
-                        args[p] = Boolean.FALSE;
-                    } else if (parms[p] == Byte.TYPE) {
-
-                        args[p] = new Byte(DEFAULT_BYTE);
-                    } else if (parms[p] == Short.TYPE) {
-
-                        args[p] = new Short(DEFAULT_SHORT);
-                    } else if (parms[p] == Integer.TYPE) {
-
-                        args[p] = new Integer(-1);
-                    } else if (parms[p] == Long.TYPE) {
-
-                        args[p] = new Long(-1);
-                    } else if (parms[p] == Float.TYPE) {
-
-                        args[p] = new Float(-1);
-                    } else if (parms[p] == Double.TYPE) {
-
-                        args[p] = new Double(-1);
-                    }
-                }
-
-                if (IRequestCycle.class.isAssignableFrom(parms[p])) {
-                    args[p] = cycle;
-                }
-            }
-            
-            invokeListenerMethod(possibleMethod, target, cycle, args);
-            
-            return true;
-        }
-
-        return false;
-    }
-
-    private void invokeListenerMethod(Method listenerMethod, Object target,
-            IRequestCycle cycle, Object[] parameters)
-    {
-        
-        Object methodResult = null;
-        
-        try
-        {
-            methodResult = invokeTargetMethod(target, listenerMethod, parameters);
-        }
-        catch (InvocationTargetException ex)
-        {
-            Throwable targetException = ex.getTargetException();
-            
-            if (targetException instanceof ApplicationRuntimeException)
-                throw (ApplicationRuntimeException) targetException;
-
-            throw new ApplicationRuntimeException(ListenerMessages.listenerMethodFailure(listenerMethod, target,
-                            targetException), target, null, targetException);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ListenerMessages.listenerMethodFailure(listenerMethod, target, ex), target,
-                    null, ex);
-
-        }
-        
-        // void methods return null
-        
-        if (methodResult == null) return;
-        
-        // The method scanner, inside ListenerMapSourceImpl,
-        // ensures that only methods that return void, String,
-        // or assignable to ILink or IPage are considered.
-
-        if (methodResult instanceof String)
-        {
-            cycle.activate((String) methodResult);
-            return;
-        }
-        
-        if (methodResult instanceof ILink)
-        {
-            ILink link = (ILink) methodResult;
-
-            String url = link.getAbsoluteURL();
-
-            cycle.sendRedirect(url);
-            return;
-        }
-
-        cycle.activate((IPage) methodResult);
-    }
-    
-    /**
-     * Provided as a hook so that subclasses can perform any additional work
-     * before or after invoking the listener method.
-     */
-
-    protected Object invokeTargetMethod(Object target, Method listenerMethod,
-            Object[] parameters)
-        throws IllegalAccessException, InvocationTargetException
-    {
-        return listenerMethod.invoke(target, parameters);
-    }
-
-
-    public String getMethodName()
-    {
-        return _name;
-    }
-
-    public String toString()
-    {
-        return "ListenerMethodInvokerImpl[" +
-               "_name='" + _name + '\'' +
-               ']';
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerStrings.properties
deleted file mode 100644
index 98877e6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerStrings.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-object-missing-method=Object {0} does not implement a listener method named ''{1}''.
-unable-to-invoke-method=Unable to invoke method {0} on {1}: {2}
-listener-method-failure=Failure invoking listener method ''{0}'' on {1}: {2}
-no-listener-method-found=No listener method named ''{0}'' suitable for {1,choice,0#no listener parameters|1#one listener parameter|1<{1,number} listener parameters} found in {2}.
-no-implicit-listener-method-found=No implicit listener method named ''{0}'' found in {1}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/SyntheticListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/SyntheticListener.java
deleted file mode 100644
index 377f555..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/SyntheticListener.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Adapter class that combines a target object (typically, a component) with a
- * {@link org.apache.tapestry.listener.ListenerMethodInvoker}. This is the
- * bridge from listener method names to listener method invocations.
- * <p>
- * TODO: It would really be nice if we could get the location of the listener
- * binding into thrown exceptions. As implemented, as best, it will be the
- * location of the &lt;page-specification&gt; (or &lt;component&gt;) of the page
- * (or component) containing the listener method.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class SyntheticListener implements IActionListener
-{
-    private final Object _target;
-
-    private final ListenerMethodInvoker _invoker;
-
-    public SyntheticListener(Object target, ListenerMethodInvoker invoker)
-    {
-        Defense.notNull(target, "target");
-        Defense.notNull(invoker, "invoker");
-
-        _target = target;
-        _invoker = invoker;
-    }
-
-    public void actionTriggered(IComponent component, IRequestCycle cycle)
-    {
-        _invoker.invokeListenerMethod(_target, cycle);
-    }
-    
-    public String getMethodName()
-    {
-        return _invoker.getMethodName();
-    }
-
-    public String toString()
-    {
-        return "SyntheticListener[methodName = " + _invoker.getMethodName() + "]";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/package.html
deleted file mode 100644
index 9b10c07..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/listener/package.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<body>
-
-<p>Support classes that allows an object
-to expose listener <em>methods</em> instead of listener <em>properties</em>.
-
-<p>
-Normally, a listener property must be an object that implement
-{@link org.apache.tapestry.IActionListener}.  This can be cumbersome, in practice, as it
-typically involves creating an anonymous inner class.
-
-<p>
-Using this mechanism, classes can instead implement listener <em>methods</em>.
-A listener method takes the form:
-
-<pre>
-public void <em>method-name</em>({@link org.apache.tapestry.IRequestCycle} cycle) 
-throws {@link org.apache.tapestry.ApplicationRuntimeException}</code>
-</pre>
-
-<p>The <code>throws</code> clause is optional, but may not throw any 
-additional exceptions.
-
-<p>Tapestry will create an appropriate listener object that will invoke the
-corresponding method.
-
-<p>The methods can be accessed using the property path "<code>listeners.<em>method-name</em></code>"
-
-@see org.apache.tapestry.listener.ListenerMap
-@see org.apache.tapestry.AbstractComponent#getListeners()
-@see org.apache.tapestry.engine.AbstractEngine#getListeners()
-@since 1.0.2
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/AbstractMarkupFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/AbstractMarkupFilter.java
deleted file mode 100644
index 1a2132c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/AbstractMarkupFilter.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.markup;
-
-import java.io.PrintWriter;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.util.text.ICharacterTranslator;
-
-/**
- * Base class for implementation based on a
- * {@link org.apache.tapestry.util.text.ICharacterTranslator}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class AbstractMarkupFilter implements MarkupFilter
-{
-    private final ICharacterTranslator _translator;
-
-    protected AbstractMarkupFilter(ICharacterTranslator translator)
-    {
-        Defense.notNull(translator, "translator");
-
-        _translator = translator;
-    }
-
-    public void print(PrintWriter writer, char[] data, int offset, int length, boolean escapeQuotes)
-    {
-        MarkupFilterUtils.print(writer, data, offset, length, escapeQuotes, _translator);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/AsciiMarkupFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/AsciiMarkupFilter.java
deleted file mode 100644
index 813f302..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/AsciiMarkupFilter.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.markup;
-
-import org.apache.tapestry.util.text.MarkupCharacterTranslator;
-
-/**
- * Wrapper around {@link org.apache.tapestry.util.text.MarkupCharacterTranslator}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class AsciiMarkupFilter extends AbstractMarkupFilter
-{
-    public AsciiMarkupFilter()
-    {
-        // Encode characters that are out of ascii range
-
-        super(new MarkupCharacterTranslator(true));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/Attribute.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/Attribute.java
deleted file mode 100644
index 4949981..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/Attribute.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.markup;
-
-import org.apache.tapestry.IMarkupWriter;
-
-
-/**
- * Represents a DOM style attribute that is used by {@link IMarkupWriter} to 
- * manage rendering attributes.
- * 
- * @author jkuhnert
- */
-public interface Attribute
-{
-    /**
-     * Retrieves the current value for the attribute.
-     * 
-     * @return The current value for the attribute.
-     */
-    Object getValue();
-    
-    /**
-     * Whether or not this attribute should be written out in raw form 
-     * as specified by {@link IMarkupWriter#attribute(String, boolean)} .
-     * 
-     * @return True if content will be written in raw form, false otherwise.
-     */
-    boolean isRaw();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/DefaultAttribute.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/DefaultAttribute.java
deleted file mode 100644
index 3aab498..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/DefaultAttribute.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.markup;
-
-import java.io.PrintWriter;
-
-
-/**
- * Used to hold markup attribute data for writing in a specific format.
- * 
- * @author jkuhnert
- */
-public class DefaultAttribute implements Attribute
-{
-    protected String _value;
-    protected boolean _raw;
-    
-    public DefaultAttribute(String value, boolean raw)
-    {
-        _value = value;
-        _raw = raw;
-    }
-    
-    public Object getValue()
-    {
-        return _value;
-    }
-    
-    void append(Object value)
-    {
-        if (value == null)
-            return;
-        
-        _value += " " + value;
-    }
-    
-    void setRaw(boolean raw)
-    {
-        _raw = raw;
-    }
-    
-    public boolean isRaw()
-    {
-        return _raw;
-    }
-    
-    void print(String name, PrintWriter writer, MarkupFilter filter)
-    {
-        writer.print(' ');
-        writer.print(name);
-        writer.print("=\"");
-
-        if (_raw && _value != null) {
-            
-            writer.write(_value);
-            
-        } else if (_value != null) {
-            
-            char[] data = _value.toCharArray();
-            filter.print(writer, data, 0, data.length, true);
-        }
-        
-        writer.print('"');
-    }
-    
-    public String toString()
-    {
-        return _value;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/JSONWriterImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/JSONWriterImpl.java
deleted file mode 100644
index 4e9903f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/JSONWriterImpl.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.markup;
-
-import java.io.PrintWriter;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.json.IJSONWriter;
-import org.apache.tapestry.json.JSONArray;
-import org.apache.tapestry.json.JSONObject;
-
-/**
- * Implementation of {@link IJSONWriter}.
- * 
- * @author jkuhnert
- */
-public class JSONWriterImpl implements IJSONWriter
-{   
-    /** Outputstream writer. */
-    protected PrintWriter _writer;
-    
-    /**
-     * Delegate object that handles object json renders.
-     */
-    private JSONObject _json;
-    
-    /**
-     * Delegate array object that handles object array json renders.
-     */
-    private JSONArray _array;
-    
-    /**
-     * Creates a new instance that will write all content to 
-     * the specified {@link PrintWriter}.
-     * 
-     * @param writer The outputstream to write to.
-     */
-    public JSONWriterImpl(PrintWriter writer)
-    {
-        Defense.notNull(writer, "writer");
-        
-        _writer = writer;
-    }
-
-    /**
-     * 
-     * {@inheritDoc}
-     */
-    public void close()
-    {
-        if (_json == null && _array == null)
-            _json = new JSONObject();
-        
-        if (_json != null) {
-            
-            _writer.write(_json.toString());
-        }
-        
-        if (_array != null) {
-            
-            _writer.write(_array.toString());
-        }
-        
-        _writer.flush();
-        _writer.close();
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public JSONObject object()
-    {
-        if (_json == null)
-            _json = new JSONObject();
-        
-        return _json;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public JSONArray array()
-    {
-        if (_array == null)
-            _array = new JSONArray();
-        
-        return _array;
-    }
-    
-    public void flush()
-    {
-        _writer.flush();
-    }
-    
-    /**
-     * The outputstream being used to write this 
-     * instance's content.
-     * 
-     * @return  The writer being written to.
-     */
-    protected PrintWriter getWriter()
-    {
-        return _writer;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupFilter.java
deleted file mode 100644
index 4af431b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupFilter.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.markup;
-
-import java.io.PrintWriter;
-
-/**
- * Filter used with {@link org.apache.tapestry.markup.MarkupWriterImpl}to determine how to convert
- * the output into a format compatible with the content type. Typically, this means translating
- * certain characters into escape codes (for example, in HTML, convert '&lt;' to '&amp;lt;'.
- * <p>
- * Implementations should be stateless and thread safe.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface MarkupFilter
-{
-    /**
-     * Print the value to the writer, escaping characters as necessary.
-     * 
-     * @param writer
-     *            the write to which converted content should be output
-     * @param data
-     *            a character array containing the characters to be output
-     * @param offset
-     *            the offset within the array to begin output
-     * @param length
-     *            the number of characters to output
-     * @param escapeQuotes
-     *            if true, the value is being rendered as an attribute value and double quotes
-     *            within the value should be escaped. If false, then then double quotes may pass
-     *            through unchanged.
-     */
-
-    void print(PrintWriter writer, char[] data, int offset, int length, boolean escapeQuotes);
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupFilterUtils.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupFilterUtils.java
deleted file mode 100644
index bff6374..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupFilterUtils.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.markup;
-
-import java.io.PrintWriter;
-
-import org.apache.tapestry.util.text.ICharacterTranslator;
-
-/**
- * For the meantime, implemenatations of {@link org.apache.tapestry.markup.MarkupFilter}&nbsp;are
- * wrappers around {@link org.apache.tapestry.util.text.ICharacterTranslator}. This class provides
- * handy methods for doing the grunt work.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class MarkupFilterUtils
-{
-    /* defeat instantiation */
-    private MarkupFilterUtils() { }
-    
-    public static void print(PrintWriter writer, char[] data, int offset, int length,
-            boolean escapeQuotes, ICharacterTranslator translator)
-    {
-        StringBuffer buffer = new StringBuffer(length);
-
-        for (int i = 0; i < length; i++)
-        {
-            char ch = data[offset + i];
-
-            if (ch == '"' && !escapeQuotes)
-            {
-                buffer.append(ch);
-                continue;
-            }
-
-            String translated = translator.translate(ch);
-
-            if (translated == null)
-            {
-                buffer.append(ch);
-                continue;
-            }
-
-            buffer.append(translated);
-        }
-
-        // We'll have to see if building up a buffer and then printing it in one go is the
-        // most efficient route. It's hard to predict what will give the best performance,
-        // but there's almost certainly a buffered writer between this code and the
-        // character set encoder.
-
-        writer.print(buffer.toString());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupMessages.java
deleted file mode 100644
index 1732887..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupMessages.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.markup;
-
-import java.util.List;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.util.ContentType;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class MarkupMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(MarkupMessages.class,
-            "MarkupStrings");
-
-    /* defeat insantiation */
-    private MarkupMessages() { }
-    
-    static String tagNotOpen()
-    {
-        return _formatter.getMessage("tag-not-open");
-    }
-
-    static String elementNotOnStack(String name, List activeElementStack)
-    {
-        StringBuffer buffer = new StringBuffer();
-
-        int count = activeElementStack.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            if (i > 0)
-                buffer.append(", ");
-
-            buffer.append(activeElementStack.get(i));
-        }
-
-        return _formatter.format("element-not-on-stack", name, buffer.toString());
-    }
-
-    static String endWithEmptyStack()
-    {
-        return _formatter.getMessage("end-with-empty-stack");
-    }
-
-    static String noFilterMatch(ContentType contentType)
-    {
-        return _formatter.format("no-filter-match", contentType);
-    }
-
-    static String closeOnce()
-    {
-        return _formatter.getMessage("close-once");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupStrings.properties
deleted file mode 100644
index 712ffe2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupStrings.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-tag-not-open=A tag must be open before attributes may be set in an IMarkupWriter.
-element-not-on-stack=Can not close to element ''{0}'', because no such element is on the active elements stack ({1}).
-end-with-empty-stack=Can not end most recent element because the stack of active elements is empty.
-no-filter-match=No markup filter could be found for content type ''{0}''; a default filter has been used.
-close-once=A markup writer may only be closed once.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupWriterImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupWriterImpl.java
deleted file mode 100644
index 499bc44..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupWriterImpl.java
+++ /dev/null
@@ -1,453 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.markup;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.NestedMarkupWriter;
-
-import java.io.PrintWriter;
-import java.util.*;
-
-/**
- * Completely revised (for 4.0) implementation of {@link org.apache.tapestry.IMarkupWriter}. No
- * longer does internal buffering (since the servlet/portlet APIs support that natively) and wraps
- * around a {@link java.io.PrintWriter}&nbsp;(rather than an {@link java.io.OutputStream}).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class MarkupWriterImpl implements IMarkupWriter
-{
-    /**
-     * The underlying {@link PrintWriter}that output is sent to.
-     */
-
-    private PrintWriter _writer;
-
-    /**
-     * Filter used to "escape" characters that need any kind of special encoding for the output
-     * content type.
-     */
-
-    private MarkupFilter _filter;
-
-    /**
-     * Indicates whether a tag is open or not. A tag is opened by {@link #begin(String)}or
-     * {@link #beginEmpty(String)}. It stays open while calls to the <code>attribute()</code>
-     * methods are made. It is closed (the '&gt;' is written) when any other method is invoked.
-     */
-
-    private boolean _openTag = false;
-
-    /**
-     * Indicates that the tag was opened with {@link #beginEmpty(String)}, which affects how the
-     * tag is closed (a slash is added to indicate the lack of a body). This is compatible with
-     * HTML, but reflects an XML/XHTML leaning.
-     */
-
-    private boolean _emptyTag = false;
-    
-    private String _contentType;
-    
-    /**
-     * A Stack of Strings used to track the active tag elements. Elements are active until the
-     * corresponding close tag is written. The {@link #push(String)}method adds elements to the
-     * stack, {@link #pop()}removes them.
-     */
-
-    private List _activeElementStack;
-    
-    /**
-     *  Attributes are stored in a map until an open tag is closed. The linked hashmap ensures that
-     *  ordering remains constant.
-     */
-    
-    private final Map _attrMap = new LinkedHashMap();
-    
-    public MarkupWriterImpl(String contentType, PrintWriter writer, MarkupFilter filter)
-    {
-        Defense.notNull(contentType, "contentType");
-        Defense.notNull(writer, "writer");
-        Defense.notNull(filter, "filter");
-
-        _contentType = contentType;
-        _writer = writer;
-        _filter = filter;
-    }
-
-    public void attribute(String name, int value)
-    {
-        checkTagOpen();
-        
-        _attrMap.put(name, new DefaultAttribute(String.valueOf(value), false));
-    }
-
-    public void attribute(String name, boolean value)
-    {
-        checkTagOpen();
-        
-        _attrMap.put(name, new DefaultAttribute(String.valueOf(value), false));
-    }
-
-    public void attribute(String name, String value)
-    {
-        attribute(name, value, false);
-    }
-
-    public void attribute(String name, String value, boolean raw)
-    {
-        checkTagOpen();
-        
-        _attrMap.put(name, new DefaultAttribute(value, raw));
-    }
-    
-    public void appendAttribute(String name, boolean value)
-    {
-        checkTagOpen();
-        
-        appendAttribute(name, String.valueOf(value));
-    }
-    
-    public void appendAttribute(String name, int value)
-    {
-        checkTagOpen();
-        
-        appendAttribute(name, String.valueOf(value));
-    }
-    
-    public void appendAttribute(String name, String value)
-    {
-        checkTagOpen();
-        
-        DefaultAttribute attr = (DefaultAttribute)_attrMap.get(name);
-        
-        if (attr == null) {
-            attr = new DefaultAttribute(value, false);
-            _attrMap.put(name, attr);
-            return;
-        }
-        
-        attr.append(value);
-    }
-
-    public void appendAttributeRaw(String name, String value)
-    {
-        checkTagOpen();
-        
-        DefaultAttribute attr = (DefaultAttribute)_attrMap.get(name);
-        
-        if (attr == null) {
-            attr = new DefaultAttribute(value, true);
-            
-            _attrMap.put(name, attr);
-            return;
-        }
-        
-        attr.setRaw(true);
-        attr.append(value);
-    }
-
-    public Attribute getAttribute(String name)
-    {
-        checkTagOpen();
-        
-        return (Attribute)_attrMap.get(name);
-    }
-    
-    public boolean hasAttribute(String name)
-    {
-        checkTagOpen();
-        
-        return _attrMap.containsKey(name);
-    }
-    
-    public void clearAttributes()
-    {
-        checkTagOpen();
-        
-        _attrMap.clear();
-    }
-    
-    public Attribute removeAttribute(String name)
-    {
-        checkTagOpen();
-        
-        return (Attribute)_attrMap.remove(name);
-    }
-    
-    /**
-     * Prints the value, if non-null. May pass it through the filter, unless raw is true.
-     */
-
-    private void maybePrintFiltered(char[] data, int offset, int length, boolean raw, boolean isAttribute)
-    {
-        if (data == null || length <= 0)
-            return;
-
-        if (raw)
-        {
-            _writer.write(data, offset, length);
-            return;
-        }
-
-        _filter.print(_writer, data, offset, length, isAttribute);
-    }
-
-    public void attributeRaw(String name, String value)
-    {
-        attribute(name, value, true);
-    }
-
-    public void begin(String name)
-    {
-        if (_openTag)
-            closeTag();
-
-        push(name);
-
-        _writer.print('<');
-        _writer.print(name);
-
-        _openTag = true;
-        _emptyTag = false;
-    }
-
-    public void beginEmpty(String name)
-    {
-        if (_openTag)
-            closeTag();
-
-        _writer.print('<');
-        _writer.print(name);
-
-        _openTag = true;
-        _emptyTag = true;
-    }
-
-    public boolean checkError()
-    {
-        return _writer.checkError();
-    }
-
-    public void close()
-    {
-        if (_openTag)
-            closeTag();
-
-        // Close any active elements.
-
-        while (!stackEmpty())
-        {
-            _writer.print("</");
-            _writer.print(pop());
-            _writer.print('>');
-        }
-
-        _writer.close();
-
-        _writer = null;
-        _filter = null;
-        _activeElementStack = null;
-    }
-
-    public void closeTag()
-    {
-        flushAttributes();
-        
-        if (_emptyTag)
-            _writer.print(" /");
-
-        _writer.print('>');
-
-        _openTag = false;
-        _emptyTag = false;
-    }
-    
-    /**
-     * Causes any pending attributes on the current open tag
-     * to be written out to the writer.
-     */
-    void flushAttributes()
-    {
-        if (_attrMap.size() > 0) {
-            
-            Iterator it = _attrMap.keySet().iterator();
-            while (it.hasNext()) {
-                
-                String key = (String)it.next();
-                DefaultAttribute attr = (DefaultAttribute)_attrMap.get(key);
-                
-                attr.print(key, _writer, _filter);
-            }
-            
-            _attrMap.clear();
-        }
-        
-    }
-    
-    public void comment(String value)
-    {
-        if (_openTag)
-            closeTag();
-
-        _writer.print("<!-- ");
-        _writer.print(value);
-        _writer.println(" -->");
-    }
-
-    public void end()
-    {
-        if (_openTag)
-            closeTag();
-
-        if (stackEmpty())
-            throw new ApplicationRuntimeException(MarkupMessages.endWithEmptyStack());
-
-        _writer.print("</");
-        _writer.print(pop());
-        _writer.print('>');
-    }
-
-    public void end(String name)
-    {
-        if (_openTag)
-            closeTag();
-
-        if (_activeElementStack == null || !_activeElementStack.contains(name))
-            throw new ApplicationRuntimeException(MarkupMessages.elementNotOnStack(
-                    name,
-                    _activeElementStack));
-
-        while (true)
-        {
-            String tagName = pop();
-
-            _writer.print("</");
-            _writer.print(tagName);
-            _writer.print('>');
-
-            if (tagName.equals(name))
-                break;
-        }
-    }
-
-    public void flush()
-    {
-        _writer.flush();
-    }
-
-    public NestedMarkupWriter getNestedWriter()
-    {
-        return new NestedMarkupWriterImpl(this, _filter);
-    }
-
-    public void print(char[] data, int offset, int length)
-    {
-        print(data, offset, length, false);
-    }
-
-    public void printRaw(char[] buffer, int offset, int length)
-    {
-        print(buffer, offset, length, true);
-    }
-
-    public void print(char[] buffer, int offset, int length, boolean raw)
-    {
-        if (_openTag)
-            closeTag();
-
-        maybePrintFiltered(buffer, offset, length, raw, false);
-    }
-
-    public void print(String value)
-    {
-        print(value, false);
-    }
-
-    public void printRaw(String value)
-    {
-        print(value, true);
-    }
-
-    public void print(String value, boolean raw)
-    {
-        if (value == null || value.length() == 0)
-        {
-            print(null, 0, 0, raw);
-            return;
-        }
-
-        char[] buffer = value.toCharArray();
-
-        print(buffer, 0, buffer.length, raw);
-    }
-
-    public void print(char value)
-    {
-        char[] data = new char[]
-        { value };
-
-        print(data, 0, 1);
-    }
-
-    public void print(int value)
-    {
-        if (_openTag)
-            closeTag();
-
-        _writer.print(value);
-    }
-
-    public void println()
-    {
-        if (_openTag)
-            closeTag();
-
-        _writer.println();
-    }
-
-    public String getContentType()
-    {
-        return _contentType;
-    }
-
-    private void checkTagOpen()
-    {
-        if (!_openTag)
-            throw new IllegalStateException(MarkupMessages.tagNotOpen());
-    }
-
-    private void push(String name)
-    {
-        if (_activeElementStack == null)
-            _activeElementStack = new ArrayList();
-
-        _activeElementStack.add(name);
-    }
-
-    private String pop()
-    {
-        int lastIndex = _activeElementStack.size() - 1;
-
-        return (String) _activeElementStack.remove(lastIndex);
-    }
-
-    private boolean stackEmpty()
-    {
-        return _activeElementStack == null || _activeElementStack.isEmpty();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupWriterSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupWriterSource.java
deleted file mode 100644
index 891a96b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupWriterSource.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.markup;
-
-import java.io.PrintWriter;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.json.IJSONWriter;
-import org.apache.tapestry.util.ContentType;
-
-/**
- * Service interface for <code>tapestry.markup.MarkupWriterSource</code> service. A factory
- * service that creates new instances of {@link org.apache.tapestry.IMarkupWriter}, configured for
- * different content types;
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface MarkupWriterSource
-{
-    /**
-     * Creates and returns a new instance of {@link org.apache.tapestry.IMarkupWriter}. The content
-     * type is used to find the proper implemenation. Any additional content type data (after a ';')
-     * is ignored.
-     * 
-     * @param writer
-     *            The {@link PrintWriter}&nbsp;to which the markup writer should send output.
-     * @param contentType
-     *            Used to locate the correct markup writer implementation (used to select a
-     *            {@link MarkupFilter}.
-     * @return The configured markup writer instance.
-     */
-
-    IMarkupWriter newMarkupWriter(PrintWriter writer, ContentType contentType);
-    
-    /**
-     * Creates and returns a new instance of {@link IJSONWriter}. The content type is used
-     * to find the proper implementation. Any additional content type data (after a ';')
-     * is ignored.
-     * 
-     * @param writer
-     *          The {@link PrintWriter}&nbsp;to which the markup writer should send output.
-     * @param contentType
-     *          Used to locate the correct markup writer implementation (used to select a
-     *          {@link MarkupFilter}.
-     * @return The configured json writer instance.
-     */
-    IJSONWriter newJSONWriter(PrintWriter writer, ContentType contentType);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupWriterSourceImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupWriterSourceImpl.java
deleted file mode 100644
index 14561d8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/MarkupWriterSourceImpl.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.markup;
-
-import java.io.PrintWriter;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.json.IJSONWriter;
-import org.apache.tapestry.util.ContentType;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class MarkupWriterSourceImpl implements MarkupWriterSource
-{
-    private Log _log;
-
-    private MarkupFilter _defaultFilter = new AsciiMarkupFilter();
-
-    private Map _contributions;
-
-    public void setContributions(Map contributions)
-    {
-        _contributions = contributions;
-    }
-
-    public IMarkupWriter newMarkupWriter(PrintWriter writer, ContentType contentType)
-    {
-        Defense.notNull(writer, "writer");
-        Defense.notNull(contentType, "contentType");
-
-        MarkupFilter filter = findFilter(contentType);
-
-        return new MarkupWriterImpl(contentType.toString(), writer, filter);
-    }
-    
-    public IJSONWriter newJSONWriter(PrintWriter writer, ContentType contentType)
-    {
-        Defense.notNull(writer, "writer");
-        Defense.notNull(contentType, "contentType");
-        
-        //TODO: Use the content type to add a filter
-        //MarkupFilter filter = findFilter(contentType);
-        
-        return new JSONWriterImpl(writer);
-    }
-    
-    private MarkupFilter findFilter(ContentType contentType)
-    {
-        // Look for an exact match (caseless).
-
-        String key = contentType.toString().toLowerCase();
-
-        MarkupFilter result = (MarkupFilter) _contributions.get(key);
-
-        if (result == null)
-            result = (MarkupFilter) _contributions.get(contentType.getMimeType());
-
-        if (result == null)
-        {
-            _log.error(MarkupMessages.noFilterMatch(contentType));
-
-            result = _defaultFilter;
-        }
-
-        return result;
-    }
-
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/NestedMarkupWriterImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/NestedMarkupWriterImpl.java
deleted file mode 100644
index f89425e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/NestedMarkupWriterImpl.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.markup;
-
-import java.io.CharArrayWriter;
-import java.io.PrintWriter;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.NestedMarkupWriter;
-
-/**
- * Nested implementation of {@link org.apache.tapestry.IMarkupWriter}. Accumulates content in a
- * {@link java.io.CharArrayWriter}, and prints the buffered content (raw) on {@link #close()}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.IMarkupWriter#getNestedWriter()
- */
-public class NestedMarkupWriterImpl extends MarkupWriterImpl implements NestedMarkupWriter
-{
-    private final IMarkupWriter _parent;
-
-    private final CharArrayWriter _charArrayWriter;
-
-    private boolean _closed;
-
-    public NestedMarkupWriterImpl(IMarkupWriter parent, MarkupFilter filter)
-    {
-        // Need to do this awkward double constructor because we want
-        // to create an object and pass it to the parent constructor.
-        // Java language rules get in the way here.
-
-        this(parent, new CharArrayWriter(), filter);
-    }
-
-    private NestedMarkupWriterImpl(IMarkupWriter parent, CharArrayWriter writer, MarkupFilter filter)
-    {
-        super(parent.getContentType(), new PrintWriter(writer), filter);
-
-        _parent = parent;
-        _charArrayWriter = writer;
-    }
-    
-    public String getBuffer()
-    {
-        if (_closed)
-            throw new IllegalStateException(MarkupMessages.closeOnce());
-
-        _closed = true;
-
-        super.close();
-
-        return _charArrayWriter.toString();
-    }
-
-    /**
-     * Closes the internal {@link CharArrayWriter}, then captures its content and invokes
-     * {@link org.apache.tapestry.IMarkupWriter#printRaw(String)}&nbsp;on the parent markup writer
-     * (the writer that created this writer).
-     */
-
-    public void close()
-    {
-        String content = getBuffer();
-
-        _parent.printRaw(content);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/UTFMarkupFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/UTFMarkupFilter.java
deleted file mode 100644
index fe1eb6d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/UTFMarkupFilter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.markup;
-
-import org.apache.tapestry.util.text.MarkupCharacterTranslator;
-
-/**
- * Implementation for UTF markups, where out-of-range ascii characters don't have to be encoded
- * (they can pass right through).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class UTFMarkupFilter extends AbstractMarkupFilter
-{
-    public UTFMarkupFilter()
-    {
-        // No special encoding necessary.
-
-        super(new MarkupCharacterTranslator(false));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/XmlMarkupFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/XmlMarkupFilter.java
deleted file mode 100644
index c2ab43c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/XmlMarkupFilter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright Aug 4, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.markup;
-
-import org.apache.tapestry.util.text.ICharacterTranslator;
-import org.apache.tapestry.util.text.XmlCharacterTranslator;
-
-
-/**
- * MarkupFilter for Xml content.
- * 
- * @author lquijano
- */
-public class XmlMarkupFilter extends AbstractMarkupFilter
-{
-
-    private static ICharacterTranslator _translator = new XmlCharacterTranslator();
-    
-    public XmlMarkupFilter()
-    {
-        super(_translator);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/package.html
deleted file mode 100644
index 10212e6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/markup/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-    Implementations of {@link org.apache.tapestry.IMarkupWriter}.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/AbstractMultipartDecoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/AbstractMultipartDecoder.java
deleted file mode 100644
index 6e6cb3b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/AbstractMultipartDecoder.java
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.multipart;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.request.IUploadFile;
-
-import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Raphael Jean
- */
-public abstract class AbstractMultipartDecoder
-{
-
-    protected int _maxSize = 10000000;
-
-    protected int _thresholdSize = 1024;
-
-    protected String _repositoryPath = System.getProperty("java.io.tmpdir");
-
-    protected String _encoding;
-    
-    /**
-     * Map of UploadPart (which implements IUploadFile), keyed on parameter
-     * name.
-     */
-    protected Map _uploadParts = new HashMap();
-
-    /**
-     * Map of ValuePart, keyed on parameter name.
-     */
-    private Map _valueParts = new HashMap();
-
-    public IUploadFile getFileUpload(String parameterName)
-    {
-        return (IUploadFile) _uploadParts.get(parameterName);
-    }
-
-    public void cleanup()
-    {
-        Iterator i = _uploadParts.values().iterator();
-
-        while(i.hasNext())
-        {
-            UploadPart part = (UploadPart) i.next();
-
-            part.cleanup();
-        }
-    }
-
-    protected Map buildParameterMap()
-    {
-        Map result = new HashMap();
-
-        Iterator i = _valueParts.entrySet().iterator();
-        while(i.hasNext())
-        {
-            Map.Entry e = (Map.Entry) i.next();
-
-            String name = (String) e.getKey();
-            ValuePart part = (ValuePart) e.getValue();
-
-            result.put(name, part.getValues());
-        }
-
-        return result;
-    }
-
-    protected void processFileItems(List parts)
-    {
-        if (parts == null) return;
-
-        Iterator i = parts.iterator();
-
-        while(i.hasNext())
-        {
-            FileItem item = (FileItem) i.next();
-
-            processFileItem(item);
-        }
-    }
-
-    private void processFileItem(FileItem item)
-    {
-        if (item.isFormField())
-        {
-            processFormFieldItem(item);
-            return;
-        }
-
-        processUploadFileItem(item);
-    }
-
-    private void processUploadFileItem(FileItem item)
-    {
-        String name = item.getFieldName();
-
-        UploadPart part = new UploadPart(item);
-
-        _uploadParts.put(name, part);
-    }
-
-    void processFormFieldItem(FileItem item)
-    {
-        String name = item.getFieldName();
-
-        String value = extractFileItemValue(item);
-
-        ValuePart part = (ValuePart) _valueParts.get(name);
-
-        if (part == null)
-            _valueParts.put(name, new ValuePart(value));
-        else 
-            part.add(value);
-    }
-
-    private String extractFileItemValue(FileItem item)
-    {
-        try
-        {
-            return (_encoding == null) ? item.getString() : item.getString(_encoding);
-        }
-        catch (UnsupportedEncodingException ex)
-        {
-            throw new ApplicationRuntimeException(MultipartMessages
-                    .unsupportedEncoding(_encoding, ex), ex);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/IMultipartDecoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/IMultipartDecoder.java
deleted file mode 100644
index 166bca1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/IMultipartDecoder.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.tapestry.request.IUploadFile;
-
-/**
- * Defines how a multipart HTTP request can be broken into individual elements
- * (including file uploads).
- * <p>
- * Multipart decoder implementations must be threadsafe.
- * 
- * @author Howard Lewis Ship
- * @since 2.3
- */
-
-public interface IMultipartDecoder
-{
-
-    /**
-     * Decodes the incoming request, identifying all the parts (values and
-     * uploaded files) contained within.
-     */
-
-    void decode(HttpServletRequest request);
-
-    /**
-     * Invoked to release any resources needed by tghe decoder. In some cases,
-     * large incoming parts are written to temporary files; this method ensures
-     * those temporary files are deleted.
-     */
-
-    void cleanup(HttpServletRequest request);
-
-    /**
-     * Returns the single value (or first value) for the parameter with the
-     * specified name. Returns null if no such parameter was in the request.
-     */
-
-    String getString(HttpServletRequest request, String name);
-
-    /**
-     * Returns an array of values (possibly a single element array). Returns
-     * null if no such parameter was in the request.
-     */
-
-    String[] getStrings(HttpServletRequest request, String name);
-
-    /**
-     * Returns the uploaded file with the specified parameter name, or null if
-     * no such parameter was in the request.
-     */
-
-    IUploadFile getUploadFile(HttpServletRequest request, String name);
-
-    /**
-     * Returns the names of all parameters whose type is string (not file
-     * upload).
-     * 
-     * @since 4.0
-     */
-    String[] getStringParameterNames(HttpServletRequest request);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartDecoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartDecoder.java
deleted file mode 100644
index 2e28fc9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import org.apache.tapestry.request.IUploadFile;
-
-/**
- * Responsible for detecting and processing file upload requests, using Jakarta
- * Commons FileUpload. Implementations of this service typically use the
- * threaded service lifecycle model.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface MultipartDecoder
-{
-
-    /**
-     * Gets a file upload with the given name, or returns null if no such file
-     * upload was in the request.
-     */
-
-    IUploadFile getFileUpload(String parameterName);
-
-    /**
-     * Cleans up any temporary resources created during the request processing.
-     * This typically includes temporary files used to contain uploaded file
-     * content.
-     */
-
-    void cleanup();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartDecoderFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartDecoderFilter.java
deleted file mode 100644
index 787d789..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartDecoderFilter.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.tapestry.services.ServletRequestServicer;
-import org.apache.tapestry.services.ServletRequestServicerFilter;
-
-/**
- * Checks to see if the request is a file upload and, if so, uses the
- * {@link org.apache.tapestry.multipart.MultipartDecoder}&nbsp;to obtain form parameters.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class MultipartDecoderFilter implements ServletRequestServicerFilter
-{
-    private ServletMultipartDecoder _decoder;
-    
-    public void service(HttpServletRequest request, HttpServletResponse response,
-            ServletRequestServicer servicer) throws IOException, ServletException
-    {
-        String contentType = request.getContentType();
-
-        // contentType is occasionally null in testing. The browser tacks on additional
-        // information onto the contentType to indicate where the boundaries are in
-        // the stream.
-
-        boolean encoded = contentType != null && contentType.startsWith("multipart/form-data");
-
-        try
-        {
-            HttpServletRequest newRequest = encoded ? _decoder.decode(request) : request;
-
-            servicer.service(newRequest, response);
-        }
-        finally
-        {
-            if (encoded)
-                _decoder.cleanup();
-        }
-    }
-
-    public void setDecoder(ServletMultipartDecoder decoder)
-    {
-        _decoder = decoder;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartDecoderImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartDecoderImpl.java
deleted file mode 100644
index 9b18aca..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartDecoderImpl.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import org.apache.commons.fileupload.FileItemFactory;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.apache.hivemind.ApplicationRuntimeException;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.File;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Implementation of {@link org.apache.tapestry.multipart.MultipartDecoder} that
- * is based on <a href="http://jakarta.apache.org/commons/fileupload/">Jakarta
- * FileUpload </a>.
- * 
- * @author Howard M. Lewis Ship
- * @author Joe Panico
- * @since 4.0
- */
-public class MultipartDecoderImpl extends AbstractMultipartDecoder implements ServletMultipartDecoder
-{
-
-    /* maximum size of file allowed to be uploaded */
-    protected long _maxSize = 10000000;
-
-    public HttpServletRequest decode(HttpServletRequest request)
-    {
-        _encoding = request.getCharacterEncoding();
-        
-        ServletFileUpload upload = createFileUpload();
-        
-        try
-        {
-            List fileItems = upload.parseRequest(request);
-            
-            processFileItems(fileItems);
-        }
-        catch (FileUploadException ex)
-        {
-            throw new ApplicationRuntimeException(MultipartMessages.unableToDecode(ex), ex);
-        }
-        
-        Map parameterMap = buildParameterMap();
-        
-        return new UploadFormParametersWrapper(request, parameterMap);
-    }
-
-    private ServletFileUpload createFileUpload()
-    {
-        FileItemFactory factory = new DiskFileItemFactory(_thresholdSize, new File(_repositoryPath));
-        ServletFileUpload upload = new ServletFileUpload(factory);
-        
-        // set maximum file upload size
-
-        upload.setSizeMax(_maxSize);
-        
-        if (_encoding != null)
-            upload.setHeaderEncoding(_encoding);
-
-        return upload;
-    }
-
-    /**
-     * Sets the maximum size that an uploaded file will be allowed to have.
-     * 
-     * @param maxSize
-     *            The maximum size, in bytes.
-     */
-    public void setMaxSize(long maxSize)
-    {
-        _maxSize = maxSize;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartMessages.java
deleted file mode 100644
index f4b20b9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartMessages.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import java.io.File;
-
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class MultipartMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(MultipartMessages.class);
-
-    /* defeat instantiation */
-    private MultipartMessages() { }
-    
-    public static String unableToDecode(Throwable cause)
-    {
-        return _formatter.format("unable-to-decode", cause);
-    }
-
-    static String unsupportedEncoding(String encoding, Throwable cause)
-    {
-        return _formatter.format("unsupported-encoding", encoding, cause);
-    }
-
-    static String unableToOpenContentFile(UploadPart part, Throwable cause)
-    {
-        return _formatter.format("unable-to-open-content-file", part.getFilePath(), cause);
-    }
-
-    static String writeFailure(File file, Throwable cause)
-    {
-        return _formatter.format("write-failure", file, cause);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartStrings.properties
deleted file mode 100644
index d2b9ac1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/MultipartStrings.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-unable-to-decode=Unable to decode multipart encoded request: {0}
-unsupported-encoding=Unsupported character encoding ''{0}'' when decoding multipart encoded request: {1}
-write-failure=Unable to write uploaded file content to {0}: {1}
-unable-to-open-content-file=Unable to open uploaded file ''{0}'': {1}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/ServletMultipartDecoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/ServletMultipartDecoder.java
deleted file mode 100644
index c562e86..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/ServletMultipartDecoder.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.multipart;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * @author Raphael Jean
- */
-public interface ServletMultipartDecoder extends MultipartDecoder
-{
-
-    /**
-     * Decodes the request, returning a new
-     * {@link javax.servlet.http.HttpServletRequest} implementation that will
-     * allow access to the form fields submitted in the request (but omits
-     * uploaded files.
-     * @param request The incoming servlet request
-     */
-
-    HttpServletRequest decode(HttpServletRequest request);
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/UploadFormParametersWrapper.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/UploadFormParametersWrapper.java
deleted file mode 100644
index 41efc3d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/UploadFormParametersWrapper.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import org.apache.hivemind.util.Defense;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Map;
-
-/**
- * {@link javax.servlet.http.HttpServletRequest}&nbsp; wrapper that provides
- * access to the form field values uploaded in a multipart request.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class UploadFormParametersWrapper extends HttpServletRequestWrapper
-{
-
-    /**
-     * Map of {@link ValuePart}&nbsp;keyed on parameter name.
-     */
-    private Map _parameterMap;
-
-    /**
-     * @param parameterMap
-     *            a map whose keys are parameter names and whose values are
-     *            arrays of Strings.
-     */
-    public UploadFormParametersWrapper(HttpServletRequest request, Map parameterMap)
-    {
-        super(request);
-
-        Defense.notNull(parameterMap, "parameterMap");
-
-        // add Parameter from the URL, typically added by JavaScript-URL-manipulation
-
-        if (request.getParameterMap() != null)
-        {
-            parameterMap.putAll(request.getParameterMap());
-        }
-        
-        _parameterMap = Collections.unmodifiableMap(parameterMap );
-    }
-
-    public String getParameter(String name)
-    {
-        String[] values = getParameterValues(name);
-
-        return (values == null || values.length == 0) ? null : values[0];
-    }
-
-    public Map getParameterMap()
-    {
-        return _parameterMap;
-    }
-
-    public Enumeration getParameterNames()
-    {
-        return Collections.enumeration(_parameterMap.keySet());
-    }
-
-    public String[] getParameterValues(String name)
-    {
-        return (String[]) _parameterMap.get(name);
-    }
-
-    public String toString()
-    {
-        return "<UploadFormPartWrapper for " + getRequest() + ">";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/UploadPart.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/UploadPart.java
deleted file mode 100644
index d723c98..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/UploadPart.java
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.IUploadFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Portion of a multi-part request representing an uploaded file.
- * 
- * @author Joe Panico
- * @since 2.0.1
- */
-public class UploadPart extends Object implements IUploadFile
-{
-
-    private FileItem _fileItem;
-
-    public UploadPart(FileItem fileItem)
-    {
-        Defense.notNull(fileItem, "fileItem");
-
-        _fileItem = fileItem;
-    }
-
-    public String getContentType()
-    {
-        return _fileItem.getContentType();
-    }
-
-    /**
-     * Leverages {@link File}to convert the full file path and extract the
-     * name.
-     */
-    public String getFileName()
-    {
-        return FilenameUtils.getName(getFilePath());
-    }
-
-    /**
-     * @since 2.0.4
-     */
-
-    public String getFilePath()
-    {
-        return _fileItem.getName();
-    }
-
-    public InputStream getStream()
-    {
-        try
-        {
-            return _fileItem.getInputStream();
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(MultipartMessages
-                    .unableToOpenContentFile(this, ex), ex);
-        }
-    }
-
-    /**
-     * Deletes the external content file, if one exists.
-     */
-
-    public void cleanup()
-    {
-        _fileItem.delete();
-    }
-
-    /**
-     * Writes the uploaded content to a file. This should be invoked at most
-     * once (perhaps we should add a check for this). This will often be a
-     * simple file rename.
-     * 
-     * @since 3.0
-     */
-    public void write(File file)
-    {
-        try
-        {
-            _fileItem.write(file);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(Tapestry.format(
-                    "UploadPart.write-failure", file, ex.getMessage()), ex);
-        }
-    }
-
-    /**
-     * @since 3.0
-     */
-    public long getSize()
-    {
-        return _fileItem.getSize();
-    }
-
-    /**
-     * @since 3.0
-     */
-    public boolean isInMemory()
-    {
-        return _fileItem.isInMemory();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/ValuePart.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/ValuePart.java
deleted file mode 100644
index ebd6eee..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/ValuePart.java
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A portion of a multipart request that stores a value, or values, for a
- * parameter.
- * 
- * @author Howard Lewis Ship
- * @since 2.0.1
- */
-
-public class ValuePart
-{
-
-    private int _count;
-
-    // Stores either String or List of String
-    private Object _value;
-
-    public ValuePart(String value)
-    {
-        _count = 1;
-        _value = value;
-    }
-
-    public int getCount()
-    {
-        return _count;
-    }
-
-    /**
-     * Returns the value, or the first value (if multi-valued).
-     */
-
-    public String getValue()
-    {
-        if (_count == 1) return (String) _value;
-
-        List l = (List) _value;
-
-        return (String) l.get(0);
-    }
-
-    /**
-     * Returns the values as an array of strings. If there is only one value, it
-     * is returned wrapped as a single element array.
-     */
-
-    public String[] getValues()
-    {
-        if (_count == 1) return new String[] { (String) _value };
-
-        List l = (List) _value;
-
-        return (String[]) l.toArray(new String[_count]);
-    }
-
-    public void add(String newValue)
-    {
-        if (_count == 1)
-        {
-            List l = new ArrayList();
-            l.add(_value);
-            l.add(newValue);
-
-            _value = l;
-            _count++;
-            return;
-        }
-
-        List l = (List) _value;
-        l.add(newValue);
-        _count++;
-    }
-
-    /**
-     * Does nothing.
-     */
-
-    public void cleanup()
-    {
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/package.html
deleted file mode 100644
index 421ec71..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/multipart/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Deals with multipart form data. (Uploads)
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/package.html
deleted file mode 100644
index 3b8db73..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/package.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<b>Tapestry</b> is a comprehensive web application framework, written in Java.
-
-<p>Tapestry is not an application server.
-It is designed to be used inside an application server.
-
-<p>Tapestry is not an application.
-Tapestry is a framework for creating web applications.
-
-<p>Tapestry is not a way of using JavaServer Pages.
-Tapestry is an <i>alternative to</i> using JavaServer Pages.
-
-<p>Tapestry is not a scripting environment.
-Tapestry uses a component object model, not simple scripting,
-to create highly dynamic, interactive web pages.
-
-<p>Tapestry is based on the Java Servlet API version 2.2.
-
-<p>Tapestry uses a sophisticated component model to divide a web application into
-a hierarchy of {@link org.apache.tapestry.IComponent components}.
-Each component has specific responsibilities for rendering web pages
-(that is, generating a portion of an HTML page) and responding to HTML queries
-(such as clicking on a link, or submitting a form).
-
-<p>The Tapestry framework takes on virtually all of the responsibilities
-for managing application flow and server-side client state.  
-This allows developers to concentrate on the business and presentation aspects of the application.
-
-<hr>
-
-<p>Visit Tapestry's home page at
-<a href="http://jakarta.apache.org/tapestry">http://jakarta.apache.org/tapestry</a>
-for more details on licensing.
-
-@author Howard Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentClassProvider.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentClassProvider.java
deleted file mode 100644
index 43cd47f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentClassProvider.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-/**
- * Determines the name of a page class based on information inside a
- * {@link org.apache.tapestry.pageload.ComponentClassProviderContext}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ComponentClassProvider
-{
-    /**
-     * Return the component class name, or null if this provider can't resolve it.
-     */
-
-    String provideComponentClassName(ComponentClassProviderContext context);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentClassProviderContext.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentClassProviderContext.java
deleted file mode 100644
index f00ad99..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentClassProviderContext.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Contains information needed when trying to determine the name of a page or component class.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ComponentClassProviderContext
-{
-    private INamespace _namespace;
-
-    private String _name;
-
-    private IComponentSpecification _specification;
-
-    public ComponentClassProviderContext(String pageName, IComponentSpecification pageSpecification, INamespace namespace)
-    {
-        Defense.notNull(pageName, "pageName");
-        Defense.notNull(pageSpecification, "pageSpecification");
-        Defense.notNull(namespace, "namespace");
-
-        _name = pageName;
-        _specification = pageSpecification;
-        _namespace = namespace;
-    }
-
-    /**
-     * Returns the simple, unqualifed name of the page, or the type of the component. There will not
-     * be a namespace prefix, but there may be one or more folders (i.e., "admin/Menu").
-     */
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    /**
-     * Returns the namespace containing the page.
-     */
-
-    public INamespace getNamespace()
-    {
-        return _namespace;
-    }
-
-    /**
-     * Returns the specification defining the page.
-     */
-    public IComponentSpecification getSpecification()
-    {
-        return _specification;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentTreeWalker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentTreeWalker.java
deleted file mode 100644
index 8cf3768..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentTreeWalker.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Walks through the tree of components and invokes the visitors on each of 
- *  of the components in the tree.
- * 
- *  @author mindbridge
- *  @since 3.0
- */
-public class ComponentTreeWalker
-{
-    private IComponentVisitor[] _visitors;
-    
-    public ComponentTreeWalker(IComponentVisitor[] visitors)
-    {
-        _visitors = visitors;
-    }
-
-    public void walkComponentTree(IComponent component)
-    {
-        // Invoke visitors
-        for (int i = 0; i < _visitors.length; i++)
-        {
-            IComponentVisitor visitor = _visitors[i];
-            visitor.visitComponent(component);
-        }
-
-        // Recurse into the embedded components
-        Collection components = component.getComponents().values();
-
-        if (Tapestry.size(components) == 0)
-            return;
-
-        for (Iterator it = components.iterator(); it.hasNext();)
-        {
-            IComponent embedded = (IComponent) it.next();
-            walkComponentTree(embedded);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentTypeVisitor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentTypeVisitor.java
deleted file mode 100644
index 26f7157..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/ComponentTypeVisitor.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.apache.tapestry.pageload;
-
-import org.apache.hivemind.PoolManageable;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.dojo.IWidget;
-
-/**
- * Looks for components of type {@link org.apache.tapestry.IForm} and {@link org.apache.tapestry.dojo.IWidget} so
- * that the appropriate javascript includes can be made on an as needed basis by {@link org.apache.tapestry.dojo.AjaxShellDelegate}.
- */
-public class ComponentTypeVisitor implements IComponentVisitor, PoolManageable {
-
-    IPage _page;
-
-    public void visitComponent(IComponent component)
-    {
-        if (IPage.class.isInstance(component)) {
-
-            _page = (IPage) component;
-            return;
-        }
-
-        if (IForm.class.isInstance(component) && _page != null) {
-
-            _page.setHasFormComponents(true);
-        }
-
-        if (IWidget.class.isInstance(component) && _page != null) {
-
-            _page.setHasWidgets(true);
-        }
-    }
-
-    public void activateService()
-    {
-        _page = null;
-    }
-
-    public void passivateService()
-    {
-        _page = null;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/EstablishDefaultParameterValuesVisitor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/EstablishDefaultParameterValuesVisitor.java
deleted file mode 100644
index 8967dfa..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/EstablishDefaultParameterValuesVisitor.java
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.BindingConstants;
-import org.apache.tapestry.binding.BindingSource;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-
-import java.util.Iterator;
-
-/**
- * For all parameters in the examined component that have default values, but
- * are not bound, automatically add an ExpressionBinding with the default value.
- * 
- * @author mindbridge
- * @since 3.0
- */
-public class EstablishDefaultParameterValuesVisitor implements IComponentVisitor
-{
-
-    /** @since 4.0 */
-    private BindingSource _bindingSource;
-
-    /**
-     * @see org.apache.tapestry.pageload.IComponentVisitor#visitComponent(org.apache.tapestry.IComponent)
-     */
-    public void visitComponent(IComponent component)
-    {
-        IComponentSpecification spec = component.getSpecification();
-
-        Iterator i = spec.getParameterNames().iterator();
-
-        while(i.hasNext())
-        {
-            String name = (String) i.next();
-            IParameterSpecification parameterSpec = spec.getParameter(name);
-
-            // Skip aliases
-
-            if (!name.equals(parameterSpec.getParameterName())) continue;
-
-            String defaultValue = parameterSpec.getDefaultValue();
-            if (defaultValue == null) continue;
-
-            // the parameter has a default value, so it must not be required
-            if (parameterSpec.isRequired())
-                throw new ApplicationRuntimeException(PageloadMessages
-                        .parameterMustHaveNoDefaultValue(component, name),
-                        component, parameterSpec.getLocation(), null);
-
-            // if there is no binding for this parameter, bind it to the default
-            // value.
-            // In 3.0, default-value was always an OGNL expression, but now its
-            // a binding reference.
-
-            if (component.getBinding(name) == null)
-            {
-                String description = PageloadMessages
-                        .defaultParameterName(name);
-
-                IBinding binding = _bindingSource.createBinding(component,
-                        description, defaultValue,
-                        BindingConstants.OGNL_PREFIX, parameterSpec
-                                .getLocation());
-
-                component.setBinding(name, binding);
-            }
-        }
-    }
-
-    /** @since 4.0 */
-
-    public void setBindingSource(BindingSource bindingSource)
-    {
-        _bindingSource = bindingSource;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java
deleted file mode 100644
index 16a5fb9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/EventConnectionVisitor.java
+++ /dev/null
@@ -1,250 +0,0 @@
-package org.apache.tapestry.pageload;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.PoolManageable;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.internal.Component;
-import org.apache.tapestry.internal.event.ComponentEventProperty;
-import org.apache.tapestry.internal.event.EventBoundListener;
-import org.apache.tapestry.internal.event.IComponentEventInvoker;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.util.*;
-
-/**
- * Handles connecting up components and forms targeted with the EventListener annotation.
- */
-public class EventConnectionVisitor implements IComponentVisitor, PoolManageable {
-
-    IComponentEventInvoker _invoker;
-
-    IPage _currentPage = null;
-    List _forms = new ArrayList();
-
-    public void visitComponent(IComponent component)
-    {
-        checkComponentPage(component);
-
-        Map events = component.getSpecification().getComponentEvents();
-        Set keySet = events.keySet();
-        String[] compIds = (String[]) keySet.toArray(new String[keySet.size()]);
-        
-        for (int i=0; i < compIds.length; i++)
-        {
-            String compId = compIds[i];
-            ComponentEventProperty property = (ComponentEventProperty) events.get(compId);
-
-            // find the targeted component
-
-            IComponent comp = findComponent(compId, component.getPage());
-
-            if (comp == null)
-                continue;
-
-            if (Component.class.isInstance(comp))
-                ((Component)comp).setHasEvents(true);
-            
-            // wire up with idPath
-
-            String idPath = comp.getExtendedId();
-            
-            component.getSpecification().rewireComponentId(compId, idPath);
-            
-            _invoker.addEventListener(idPath, component.getSpecification());
-            wireFormEvents(comp, component.getSpecification());
-        }
-        
-        // find form element targets for re-mapping with proper idpath && IEventInvoker connection
-
-        events = component.getSpecification().getElementEvents();
-        Iterator it = events.keySet().iterator();
-
-        // for efficiency later in ComponentEventConnectionWorker
-
-        if (events.size() > 0 && Component.class.isInstance(component)) {
-            ((Component)component).setHasEvents(true);
-        }
-
-        while (it.hasNext())
-        {
-            String elementId = (String) it.next();
-            ComponentEventProperty property = (ComponentEventProperty) events.get(elementId);
-
-            Iterator bindingIt  = property.getFormEvents().iterator();
-            while (bindingIt.hasNext())
-            {
-                String key = (String) bindingIt.next();
-                List listeners = property.getFormEventListeners(key);
-
-                for (int i=0; i < listeners.size(); i++) {
-                    
-                    EventBoundListener listener = (EventBoundListener) listeners.get(i);
-                    wireElementFormEvents(listener, component, component.getSpecification());
-                }
-            }
-        }
-    }
-
-    void wireElementFormEvents(EventBoundListener listener, IComponent component, IComponentSpecification spec)
-    {
-        if (listener.getFormId() == null)
-            return;
-
-        if (_forms.size() < 1)
-            discoverPageForms(component.getPage());
-
-        IForm form = null;
-        for (int i=0; i < _forms.size(); i++)
-        {
-            IForm f = (IForm) _forms.get(i);
-            if (listener.getFormId().equals(f.getExtendedId()) || listener.getFormId().equals(f.getId()))
-            {
-                form = f;
-                break;
-            }
-        }
-
-        // couldn't find the form they specified
-
-        if (form == null)
-            throw new ApplicationRuntimeException(PageloadMessages.componentNotFound(listener.getFormId()),
-                                                  component, component.getLocation(), null);
-
-        String idPath = form.getExtendedId();
-        
-        listener.setFormId(idPath);
-        _invoker.addFormEventListener(idPath, spec);
-    }
-
-    void wireFormEvents(IComponent component, IComponentSpecification listener)
-    {
-        if (!IFormComponent.class.isInstance(component))
-            return;
-
-        IFormComponent fcomp = (IFormComponent) component;
-
-        if (_forms.size() < 1)
-            discoverPageForms(fcomp.getPage());
-
-        IForm form = findComponentForm(fcomp);
-        if (form == null)
-            return;
-
-        listener.connectAutoSubmitEvents(component, form);
-        _invoker.addFormEventListener(form.getExtendedId(), listener);
-    }
-
-    IComponent findComponent(String id, IComponent target)
-    {
-        Map components = target.getComponents();
-        if (components == null)
-            return null;
-        
-        IComponent comp = (IComponent) components.get(id);
-        if (comp != null)
-            return comp;
-
-        Iterator children = components.values().iterator();
-
-        while (children.hasNext())
-        {
-            IComponent child = (IComponent) children.next();
-
-            comp = findComponent(id, child);
-            if (comp != null)
-                return comp;
-        }
-
-        return null;
-    }
-
-    void discoverPageForms(IComponent parent)
-    {
-        if (IForm.class.isInstance(parent))
-            _forms.add(parent);
-
-        Iterator it = parent.getComponents().values().iterator();
-        while (it.hasNext())
-        {
-            IComponent comp = (IComponent)it.next();
-
-            discoverPageForms(comp);
-        }
-    }
-
-    IForm findComponentForm(IFormComponent child)
-    {
-        for (int i = 0; i < _forms.size(); i++) {
-
-            IForm form = (IForm) _forms.get(i);
-
-            IComponent match = findContainedComponent(child.getExtendedId(), (Component)form);
-            if (match != null)
-                return form;
-        }
-
-        return null;
-    }
-
-    IComponent findContainedComponent(String idPath, Component container)
-    {
-        IComponent comp = (IComponent) container;
-
-        if (idPath.equals(comp.getExtendedId()))
-            return comp;
-
-        IRender[] children = container.getContainedRenderers();
-        if (children == null)
-            return null;
-
-        for (int i=0; i < children.length; i++) {
-
-            if (children[i] == null)
-                return null;
-
-            if (!Component.class.isInstance(children[i]))
-                continue;
-
-            IComponent found = findContainedComponent(idPath, (Component)children[i]);
-            if (found != null)
-                return found;
-        }
-        
-        return null;
-    }
-
-    void checkComponentPage(IComponent component)
-    {
-        if (_currentPage == null) {
-
-            _currentPage = component.getPage();
-            _forms.clear();
-        } else if (component.getPage() != _currentPage) {
-
-            _currentPage = component.getPage();
-            _forms.clear();
-        }
-    }
-
-    public void activateService()
-    {
-        _currentPage = null;
-        _forms.clear();
-    }
-
-    public void passivateService()
-    {
-        _currentPage = null;
-        _forms.clear();
-    }
-
-    // injected
-    public void setEventInvoker(IComponentEventInvoker invoker)
-    {
-        _invoker = invoker;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/GlobalDefaultComponentClassProvider.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/GlobalDefaultComponentClassProvider.java
deleted file mode 100644
index ee553e3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/GlobalDefaultComponentClassProvider.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-/**
- * The final command in the tapestry.page.PageClassProviderChain configuration,
- * returns a fixed value for page class name.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class GlobalDefaultComponentClassProvider implements ComponentClassProvider
-{
-
-    private String _componentClassName;
-
-    public void setComponentClassName(String componentClassName)
-    {
-        _componentClassName = componentClassName;
-    }
-
-    public String provideComponentClassName(ComponentClassProviderContext context)
-    {
-        return _componentClassName;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/IComponentVisitor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/IComponentVisitor.java
deleted file mode 100644
index bb3a069..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/IComponentVisitor.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.tapestry.IComponent;
-
-/**
- *  An interface defining an entity that is interested in examining a particular component .
- * 
- *  @author mindbridge
- *  @since 3.0
- */
-public interface IComponentVisitor
-{
-    void visitComponent(IComponent component);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/IQueuedInheritedBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/IQueuedInheritedBinding.java
deleted file mode 100644
index 2ede2ba..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/IQueuedInheritedBinding.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-/**
- * Part of the scheme to defer connection of bindings until after all components
- * (including implicit components loaded from templates, and component contained
- * within those, etc.) are loaded.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-interface IQueuedInheritedBinding
-{
-
-    void connect();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/NamespaceClassSearchComponentClassProvider.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/NamespaceClassSearchComponentClassProvider.java
deleted file mode 100644
index 44efdb2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/NamespaceClassSearchComponentClassProvider.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.services.ClassFinder;
-
-/**
- * Searches for a class with a name matching the page name. Searches in the
- * default Java package, and possibly additional packages defined as meta-data
- * within the namespace.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class NamespaceClassSearchComponentClassProvider implements ComponentClassProvider
-{
-
-    /**
-     * Property, defined as meta data of the containing namespace, that defines
-     * a comma-seperated list of packages to search for page or component
-     * classes within.
-     */
-    private String _packagesName;
-
-    private ClassFinder _classFinder;
-
-    public String provideComponentClassName(ComponentClassProviderContext context)
-    {
-        INamespace namespace = context.getNamespace();
-        String packages = namespace.getPropertyValue(_packagesName);
-
-        String componentClassName = context.getName().replace('/', '.');
-
-        Class clazz = _classFinder.findClass(packages, componentClassName);
-
-        return clazz == null ? null : clazz.getName();
-    }
-
-    public void setPackagesName(String packagesName)
-    {
-        _packagesName = packagesName;
-    }
-
-    public void setClassFinder(ClassFinder classFinder)
-    {
-        _classFinder = classFinder;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/NamespaceDefaultPageClassProvider.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/NamespaceDefaultPageClassProvider.java
deleted file mode 100644
index 573aebf..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/NamespaceDefaultPageClassProvider.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.tapestry.TapestryConstants;
-
-/**
- * Returns the namespace property for the
- * {@link org.apache.tapestry.TapestryConstants#PAGE_CLASS_NAME} key.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class NamespaceDefaultPageClassProvider implements
-        ComponentClassProvider
-{
-
-    public String provideComponentClassName(
-            ComponentClassProviderContext context)
-    {
-        // This may be null, if the namespace fails to define this meta data
-        // value.
-
-        return context.getNamespace().getPropertyValue(
-                TapestryConstants.PAGE_CLASS_NAME);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageLoader.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageLoader.java
deleted file mode 100644
index 5160510..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageLoader.java
+++ /dev/null
@@ -1,780 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.ThreadLocale;
-import org.apache.tapestry.*;
-import org.apache.tapestry.asset.AssetSource;
-import org.apache.tapestry.binding.BindingSource;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.resolver.ComponentSpecificationResolver;
-import org.apache.tapestry.services.ComponentConstructor;
-import org.apache.tapestry.services.ComponentConstructorFactory;
-import org.apache.tapestry.services.ComponentPropertySource;
-import org.apache.tapestry.services.ComponentTemplateLoader;
-import org.apache.tapestry.spec.*;
-
-import java.util.*;
-
-/**
- * Implementation of tapestry.page.PageLoader. Runs the process of building the
- * component hierarchy for an entire page.
- * <p>
- * This implementation is not threadsafe, therefore the pooled service model
- * must be used.
- * </p>
- *
- * @author Howard Lewis Ship
- */
-
-public class PageLoader implements IPageLoader {
-
-    private Log _log;
-
-    /** @since 4.0 */
-
-    private ComponentSpecificationResolver _componentResolver;
-
-    /** @since 4.0 */
-
-    private BindingSource _bindingSource;
-
-    /** @since 4.0 */
-
-    private ComponentTemplateLoader _componentTemplateLoader;
-
-    private List _inheritedBindingQueue = new ArrayList();
-
-    /** @since 4.0 */
-    private IComponentVisitor _establishDefaultParameterValuesVisitor;
-
-    private ComponentTreeWalker _establishDefaultParameterValuesWalker;
-
-    private ComponentTreeWalker _verifyRequiredParametersWalker;
-
-    private IComponentVisitor _eventConnectionVisitor;
-
-    private ComponentTreeWalker _eventConnectionWalker;
-
-    private IComponentVisitor _componentTypeVisitor;
-
-    /** @since 4.0 */
-
-    private ComponentConstructorFactory _componentConstructorFactory;
-
-    /** @since 4.0 */
-
-    private AssetSource _assetSource;
-
-    /**
-     * Used to find the correct Java component class for a page.
-     *
-     * @since 4.0
-     */
-
-    private ComponentClassProvider _pageClassProvider;
-
-    /**
-     * Used to find the correct Java component class for a component (a similar
-     * process to resolving a page, but with slightly differen steps and
-     * defaults).
-     *
-     * @since 4.0
-     */
-
-    private ComponentClassProvider _componentClassProvider;
-
-    /**
-     * Used to resolve meta-data properties related to a component.
-     *
-     * @since 4.0
-     */
-
-    private ComponentPropertySource _componentPropertySource;
-
-    /**
-     * Tracks the current locale into which pages are loaded.
-     *
-     * @since 4.0
-     */
-
-    private ThreadLocale _threadLocale;
-
-    /**
-     * The locale of the application, which is also the locale of the page being
-     * loaded.
-     */
-
-    private Locale _locale;
-
-    /**
-     * Number of components instantiated, excluding the page itself.
-     */
-
-    private int _count;
-
-    /**
-     * The recursion depth. A page with no components is zero. A component on a
-     * page is one.
-     */
-
-    private int _depth;
-
-    /**
-     * The maximum depth reached while building the page.
-     */
-
-    private int _maxDepth;
-
-    /** @since 4.0 */
-
-    private ClassResolver _classResolver;
-
-    /**
-     * As each component is constructed it is placed on to the component stack,  when construction is finished it is pushed
-     * back off the stack.  This helps in detecting component nesting and properly reporting errors.
-     */
-    private Stack _componentStack = new Stack();
-
-    public void initializeService()
-    {
-
-        // Create the mechanisms for walking the component tree when it is
-        // complete
-        IComponentVisitor verifyRequiredParametersVisitor = new VerifyRequiredParametersVisitor();
-
-        _verifyRequiredParametersWalker =
-          new ComponentTreeWalker( new IComponentVisitor[] { verifyRequiredParametersVisitor });
-
-        _establishDefaultParameterValuesWalker =
-          new ComponentTreeWalker( new IComponentVisitor[] { _establishDefaultParameterValuesVisitor });
-
-        _eventConnectionWalker =
-          new ComponentTreeWalker( new IComponentVisitor[] { _eventConnectionVisitor, _componentTypeVisitor });
-    }
-
-    /**
-     * Binds properties of the component as defined by the container's
-     * specification.
-     * <p>
-     * This implementation is very simple, we will need a lot more sanity
-     * checking and eror checking in the final version.
-     *
-     * @param container
-     *            The containing component. For a dynamic binding ({@link org.apache.tapestry.binding.ExpressionBinding})
-     *            the property name is evaluated with the container as the root.
-     * @param component
-     *            The contained component being bound.
-     * @param contained
-     *            The contained component specification (from the container's
-     *            {@link IComponentSpecification}).
-     * @param defaultBindingPrefix
-     *            The default binding prefix to be used with the component.
-     */
-
-    void bind(IComponent container, IComponent component,
-              IContainedComponent contained, String defaultBindingPrefix)
-    {
-        IComponentSpecification spec = component.getSpecification();
-        boolean formalOnly = !spec.getAllowInformalParameters();
-
-        if (contained.getInheritInformalParameters())
-        {
-            if (formalOnly)
-                throw new ApplicationRuntimeException(PageloadMessages.inheritInformalInvalidComponentFormalOnly(component),
-                                                      component, contained.getLocation(), null);
-
-            IComponentSpecification containerSpec = container.getSpecification();
-
-            if (!containerSpec.getAllowInformalParameters())
-                throw new ApplicationRuntimeException(PageloadMessages.inheritInformalInvalidContainerFormalOnly(container, component),
-                                                      component, contained.getLocation(), null);
-
-            IQueuedInheritedBinding queued = new QueuedInheritInformalBindings(component);
-            _inheritedBindingQueue.add(queued);
-        }
-
-        Iterator i = contained.getBindingNames().iterator();
-
-        while(i.hasNext())
-        {
-            String name = (String) i.next();
-
-            IParameterSpecification pspec = spec.getParameter(name);
-
-            boolean isFormal = pspec != null;
-
-            String parameterName = isFormal ? pspec.getParameterName() : name;
-
-            IBindingSpecification bspec = contained.getBinding(name);
-
-            // If not allowing informal parameters, check that each binding
-            // matches
-            // a formal parameter.
-
-            if (formalOnly && !isFormal)
-                throw new ApplicationRuntimeException(PageloadMessages.formalParametersOnly(component, name),
-                                                      component, bspec.getLocation(), null);
-
-            // If an informal parameter that conflicts with a reserved name,
-            // then skip it.
-
-            if (!isFormal && spec.isReservedParameterName(name))
-                continue;
-
-            if (isFormal)
-            {
-                if (!name.equals(parameterName))
-                {
-                    _log.warn(PageloadMessages.usedParameterAlias(contained, name, parameterName, bspec.getLocation()));
-                }
-                else if (pspec.isDeprecated())
-                    _log.warn(PageloadMessages.deprecatedParameter(name, bspec.getLocation(), contained.getType()));
-            }
-
-            // The type determines how to interpret the value:
-            // As a simple static String
-            // As a nested property name (relative to the component)
-            // As the name of a binding inherited from the containing component.
-            // As the name of a public field
-            // As a script for a listener
-
-            BindingType type = bspec.getType();
-
-            // For inherited bindings, defer until later. This gives components
-            // a chance to setup bindings from static values and expressions in
-            // the template. The order of operations is tricky, template
-            // bindings
-            // come later. Note that this is a hold over from the Tapestry 3.0
-            // DTD
-            // and will some day no longer be supported.
-
-            if (type == BindingType.INHERITED)
-            {
-                QueuedInheritedBinding queued = new QueuedInheritedBinding(component, bspec.getValue(), parameterName);
-                _inheritedBindingQueue.add(queued);
-                continue;
-            }
-
-            String description = PageloadMessages.parameterName(name);
-
-            IBinding binding = convert(container, description, pspec, defaultBindingPrefix, bspec);
-
-            addBindingToComponent(component, parameterName, binding);
-        }
-    }
-
-    /**
-     * Adds a binding to the component, checking to see if there's a name
-     * conflict (an existing binding for the same parameter ... possibly because
-     * parameter names can be aliased).
-     *
-     * @param component
-     *            to which the binding should be added
-     * @param parameterName
-     *            the name of the parameter to bind, which should be a true
-     *            name, not an alias
-     * @param binding
-     *            the binding to add
-     * @throws ApplicationRuntimeException
-     *             if a binding already exists
-     * @since 4.0
-     */
-
-    static void addBindingToComponent(IComponent component, String parameterName, IBinding binding)
-    {
-        IBinding existing = component.getBinding(parameterName);
-
-        if (existing != null)
-            throw new ApplicationRuntimeException(PageloadMessages.duplicateParameter(parameterName, existing),
-                                                  component, binding.getLocation(), null);
-
-        component.setBinding(parameterName, binding);
-    }
-
-    private IBinding convert(IComponent container, String description, IParameterSpecification param,
-                             String defaultBindingType, IBindingSpecification spec)
-    {
-        Location location = spec.getLocation();
-        String bindingReference = spec.getValue();
-
-        return _bindingSource.createBinding(container, param, description,
-                                            bindingReference, defaultBindingType, location);
-    }
-
-    /**
-     * Sets up a component. This involves:
-     * <ul>
-     * <li>Instantiating any contained components.
-     * <li>Add the contained components to the container.
-     * <li>Setting up bindings between container and containees.
-     * <li>Construct the containees recursively.
-     * <li>Invoking
-     * {@link IComponent#finishLoad(IRequestCycle, IPageLoader, IComponentSpecification)}
-     * </ul>
-     *
-     * @param cycle
-     *            the request cycle for which the page is being (initially)
-     *            constructed
-     * @param page
-     *            The page on which the container exists.
-     * @param container
-     *            The component to be set up.
-     * @param containerSpec
-     *            The specification for the container.
-     * @param namespace
-     *            The namespace of the container
-     */
-
-    private void constructComponent(IRequestCycle cycle, IPage page,
-                                    IComponent container, IComponentSpecification containerSpec,
-                                    INamespace namespace)
-    {
-        _depth++;
-        if (_depth > _maxDepth)
-            _maxDepth = _depth;
-
-        beginConstructComponent(container, containerSpec);
-
-        String defaultBindingPrefix = _componentPropertySource.getComponentProperty(container, TapestryConstants.DEFAULT_BINDING_PREFIX_NAME);
-
-        List ids = new ArrayList(containerSpec.getComponentIds());
-        int count = ids.size();
-
-        try
-        {
-            for(int i = 0; i < count; i++)
-            {
-                String id = (String) ids.get(i);
-
-                // Get the sub-component specification from the
-                // container's specification.
-
-                IContainedComponent contained = containerSpec.getComponent(id);
-
-                String type = contained.getType();
-                Location location = contained.getLocation();
-
-                _componentResolver.resolve(cycle, namespace, type, location);
-
-                IComponentSpecification componentSpecification = _componentResolver.getSpecification();
-                INamespace componentNamespace = _componentResolver.getNamespace();
-
-                // Instantiate the contained component.
-
-                IComponent component = instantiateComponent(page, container,
-                                                            id, componentSpecification, _componentResolver.getType(), componentNamespace, contained);
-
-                // Add it, by name, to the container.
-
-                container.addComponent(component);
-
-                // Set up any bindings in the IContainedComponent specification
-
-                bind(container, component, contained, defaultBindingPrefix);
-
-                // Now construct the component recusively; it gets its chance
-                // to create its subcomponents and set their bindings.
-
-                constructComponent(cycle, page, component, componentSpecification, componentNamespace);
-            }
-
-            addAssets(container, containerSpec);
-
-            // Finish the load of the component; most components (which
-            // subclass BaseComponent) load their templates here.
-            // Properties with initial values will be set here (or the
-            // initial value will be recorded for later use in pageDetach().
-            // That may cause yet more components to be created, and more
-            // bindings to be set, so we defer some checking until later.
-
-            container.finishLoad(cycle, this, containerSpec);
-
-            // Have the component switch over to its active state.
-
-            container.enterActiveState();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            throw ex;
-        }
-        catch (RuntimeException ex)
-        {
-            throw new ApplicationRuntimeException(PageloadMessages.unableToInstantiateComponent(container, ex),
-                                                  container, null, ex);
-        } finally {
-
-            endConstructComponent(container);
-        }
-
-        _depth--;
-    }
-
-    /**
-     * Checks the component stack to ensure that the specified component hasn't been improperly nested
-     * and referenced recursively within itself.
-     *
-     * @param component
-     *          The component to add to the current component stack and check for recursion.
-     * @param specification
-     *          The specification of the specified component.
-     */
-    void beginConstructComponent(IComponent component, IComponentSpecification specification)
-    {
-        // check recursion
-
-        int position = _componentStack.search(component);
-        if (position > -1)
-        {
-            Location location = specification.getLocation();
-
-            // try to get the more precise container position location that was referenced
-            // in the template to properly report the precise position of the recursive reference
-
-            IContainedComponent container = component.getContainedComponent();
-            if (container != null)
-                location = container.getLocation();
-
-            throw new ApplicationRuntimeException(PageloadMessages.recursiveComponent(component), location, null);
-        }
-
-        _componentStack.push(component);
-    }
-
-    /**
-     * Pops the current component off the stack.
-     *
-     * @param component
-     *          The component that has just been constructed.
-     */
-    void endConstructComponent(IComponent component)
-    {
-        _componentStack.pop();
-    }
-
-    /**
-     * Invoked to create an implicit component (one which is defined in the
-     * containing component's template, rather that in the containing
-     * component's specification).
-     *
-     * @see org.apache.tapestry.services.impl.ComponentTemplateLoaderImpl
-     * @since 3.0
-     */
-
-    public IComponent createImplicitComponent(IRequestCycle cycle,
-                                              IComponent container, String componentId, String componentType,
-                                              Location location)
-    {
-        IPage page = container.getPage();
-
-        _componentResolver.resolve(cycle, container.getNamespace(), componentType, location);
-
-        INamespace componentNamespace = _componentResolver.getNamespace();
-        IComponentSpecification spec = _componentResolver.getSpecification();
-
-        IContainedComponent contained = new ContainedComponent();
-        contained.setLocation(location);
-        contained.setType(componentType);
-
-        IComponent result = instantiateComponent(page, container, componentId,
-                                                 spec, _componentResolver.getType(), componentNamespace,
-                                                 contained);
-
-        container.addComponent(result);
-
-        // Recusively build the component.
-
-        constructComponent(cycle, page, result, spec, componentNamespace);
-
-        return result;
-    }
-
-    /**
-     * Instantiates a component from its specification. We instantiate the
-     * component object, then set its specification, page, container and id.
-     *
-     * @param page
-     *          The page component is to be attached to.
-     * @param container
-     *          The containing component.
-     * @param id
-     *          The components unique id
-     * @param spec
-     *          The specification for the component
-     * @param type
-     *          The type (ie Any / For / DirectLink)
-     * @param namespace
-     *          Which namespace / library
-     * @param containedComponent
-     *          Possible contained component.
-     *
-     * @return The instantiated component instance.
-     *
-     * @see org.apache.tapestry.AbstractComponent
-     */
-
-    private IComponent instantiateComponent(IPage page, IComponent container,
-                                            String id, IComponentSpecification spec, String type,
-                                            INamespace namespace, IContainedComponent containedComponent)
-    {
-        ComponentClassProviderContext context = new ComponentClassProviderContext(type, spec, namespace);
-
-        String className = _componentClassProvider.provideComponentClassName(context);
-
-        if (HiveMind.isBlank(className))
-            className = BaseComponent.class.getName();
-        else
-        {
-            Class componentClass = _classResolver.findClass(className);
-
-            if (!IComponent.class.isAssignableFrom(componentClass))
-                throw new ApplicationRuntimeException(PageloadMessages.classNotComponent(componentClass),
-                                                      container, spec.getLocation(), null);
-
-            if (IPage.class.isAssignableFrom(componentClass))
-                throw new ApplicationRuntimeException(PageloadMessages.pageNotAllowed(id),
-                                                      container, spec.getLocation(), null);
-        }
-
-        ComponentConstructor cc = _componentConstructorFactory.getComponentConstructor(spec, className);
-
-        IComponent result = (IComponent) cc.newInstance();
-
-        result.setNamespace(namespace);
-        result.setPage(page);
-        result.setContainer(container);
-        result.setId(id);
-        result.setContainedComponent(containedComponent);
-        result.setLocation(containedComponent.getLocation());
-
-        _count++;
-
-        return result;
-    }
-
-    /**
-     * Instantitates a page from its specification.
-     *
-     * @param name
-     *            the unqualified, simple, name for the page
-     * @param namespace
-     *            the namespace containing the page's specification
-     * @param spec
-     *            the page's specification We instantiate the page object, then
-     *            set its specification, names and locale.
-     *
-     * @return The instantiated page instance.
-     *
-     * @see org.apache.tapestry.IEngine
-     * @see org.apache.tapestry.event.ChangeObserver
-     */
-
-    private IPage instantiatePage(String name, INamespace namespace, IComponentSpecification spec)
-    {
-        Location location = spec.getLocation();
-        ComponentClassProviderContext context = new ComponentClassProviderContext(name, spec, namespace);
-
-        String className = _pageClassProvider.provideComponentClassName(context);
-
-        Class pageClass = _classResolver.findClass(className);
-
-        if (!IPage.class.isAssignableFrom(pageClass))
-            throw new ApplicationRuntimeException(PageloadMessages.classNotPage(pageClass), location, null);
-
-        String pageName = namespace.constructQualifiedName(name);
-
-        ComponentConstructor cc = _componentConstructorFactory.getComponentConstructor(spec, className);
-
-        IPage result = (IPage) cc.newInstance();
-
-        result.setNamespace(namespace);
-        result.setPageName(pageName);
-        result.setPage(result);
-        result.setLocale(_locale);
-        result.setLocation(location);
-
-        return result;
-    }
-
-    public IPage loadPage(String name, INamespace namespace,
-                          IRequestCycle cycle, IComponentSpecification specification)
-    {
-        IPage page = null;
-
-        _count = 0;
-        _depth = 0;
-        _maxDepth = 0;
-        _componentStack.clear();
-
-        _locale = _threadLocale.getLocale();
-
-        try
-        {
-            page = instantiatePage(name, namespace, specification);
-
-            // The page is now attached to the engine and request cycle; some
-            // code
-            // inside the page's finishLoad() method may require this.
-            // TAPESTRY-763
-
-            page.attach(cycle.getEngine(), cycle);
-
-            constructComponent(cycle, page, page, specification, namespace);
-
-            // Walk through the complete component tree to set up the default
-            // parameter values.
-
-            _establishDefaultParameterValuesWalker.walkComponentTree(page);
-
-            establishInheritedBindings();
-
-            // Walk through the complete component tree to ensure that required
-            // parameters are bound
-
-            _verifyRequiredParametersWalker.walkComponentTree(page);
-
-            // connect @EventListener style client side events
-
-            _eventConnectionWalker.walkComponentTree(page);
-        }
-        finally
-        {
-            _locale = null;
-            _inheritedBindingQueue.clear();
-        }
-
-        if (_log.isDebugEnabled())
-            _log.debug("Loaded page " + page + " with " + _count + " components (maximum depth " + _maxDepth + ")");
-
-        return page;
-    }
-
-    /** @since 4.0 */
-
-    public void loadTemplateForComponent(IRequestCycle cycle, ITemplateComponent component)
-    {
-        _componentTemplateLoader.loadTemplate(cycle, component);
-    }
-
-    private void establishInheritedBindings()
-    {
-        _log.debug("Establishing inherited bindings");
-
-        int count = _inheritedBindingQueue.size();
-
-        for(int i = 0; i < count; i++)
-        {
-            IQueuedInheritedBinding queued = (IQueuedInheritedBinding) _inheritedBindingQueue.get(i);
-
-            queued.connect();
-        }
-    }
-
-    private void addAssets(IComponent component, IComponentSpecification specification)
-    {
-        List names = specification.getAssetNames();
-
-        if (names.isEmpty()) return;
-
-        Iterator i = names.iterator();
-
-        while(i.hasNext())
-        {
-            String name = (String) i.next();
-
-            IAssetSpecification assetSpec = specification.getAsset(name);
-
-            IAsset asset = _assetSource.findAsset(assetSpec.getLocation().getResource(), specification,
-                                                  assetSpec.getPath(), _locale, assetSpec.getLocation());
-
-            component.addAsset(name, asset);
-        }
-    }
-
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-
-    public void setComponentResolver(ComponentSpecificationResolver resolver)
-    {
-        _componentResolver = resolver;
-    }
-
-    public void setBindingSource(BindingSource bindingSource)
-    {
-        _bindingSource = bindingSource;
-    }
-
-    public void setComponentTemplateLoader(ComponentTemplateLoader componentTemplateLoader)
-    {
-        _componentTemplateLoader = componentTemplateLoader;
-    }
-
-    public void setEstablishDefaultParameterValuesVisitor(IComponentVisitor establishDefaultParameterValuesVisitor)
-    {
-        _establishDefaultParameterValuesVisitor = establishDefaultParameterValuesVisitor;
-    }
-
-    public void setEventConnectionVisitor(IComponentVisitor eventConnectionVisitor)
-    {
-        _eventConnectionVisitor = eventConnectionVisitor;
-    }
-
-    public void setComponentTypeVisitor(IComponentVisitor visitor)
-    {
-        _componentTypeVisitor = visitor;
-    }
-
-    public void setComponentConstructorFactory(ComponentConstructorFactory componentConstructorFactory)
-    {
-        _componentConstructorFactory = componentConstructorFactory;
-    }
-
-    public void setAssetSource(AssetSource assetSource)
-    {
-        _assetSource = assetSource;
-    }
-
-    public void setPageClassProvider(ComponentClassProvider pageClassProvider)
-    {
-        _pageClassProvider = pageClassProvider;
-    }
-
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-
-    public void setComponentClassProvider(ComponentClassProvider componentClassProvider)
-    {
-        _componentClassProvider = componentClassProvider;
-    }
-
-    public void setThreadLocale(ThreadLocale threadLocale)
-    {
-        _threadLocale = threadLocale;
-    }
-
-    public void setComponentPropertySource(ComponentPropertySource componentPropertySource)
-    {
-        _componentPropertySource = componentPropertySource;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageSource.java
deleted file mode 100644
index 7bf38a1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageSource.java
+++ /dev/null
@@ -1,275 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.commons.pool.BaseKeyedPoolableObjectFactory;
-import org.apache.commons.pool.impl.GenericKeyedObjectPool;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.events.RegistryShutdownListener;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.engine.IPageSource;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.event.ReportStatusEvent;
-import org.apache.tapestry.event.ReportStatusListener;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.internal.pageload.PageKey;
-import org.apache.tapestry.resolver.PageSpecificationResolver;
-import org.apache.tapestry.util.MultiKey;
-
-/**
- * A source for pages for a particular application. Each application should have its own
- * <code>PageSource</code>, storing it into the {@link javax.servlet.ServletContext}using a
- * unique key (usually built from the application name).
- * <p>
- * The <code>PageSource</code> acts as a pool for {@link IPage}instances. Pages are retrieved
- * from the pool using {@link #getPage(IRequestCycle, String)}and are later returned to
- * the pool using {@link #releasePage(IPage)}.
- * <p>
- * TBD: Pooled pages stay forever. Need a strategy for cleaning up the pool, tracking which pages
- * have been in the pool the longest, etc.
- *
- * @author Howard Lewis Ship
- */
-
-public class PageSource extends BaseKeyedPoolableObjectFactory implements IPageSource, ResetEventListener, ReportStatusListener, RegistryShutdownListener {
-    
-    /** set by container. */
-    private ClassResolver _classResolver;
-
-    /** @since 4.0 */
-    private PageSpecificationResolver _pageSpecificationResolver;
-
-    /** @since 4.0 */
-
-    private IPageLoader _loader;
-
-    private IPropertySource _propertySource;
-
-    private String _serviceId;
-
-    /**
-     * Thread safe reference to current request.
-     */
-    private IRequestCycle _cycle;
-
-    static final long MINUTE = 1000 * 60;
-    
-    /**
-     * The pool of {@link IPage}s. The key is a {@link MultiKey}, built from the page name and the
-     * page locale.
-     */
-    GenericKeyedObjectPool _pool;
-
-    public void initializeService()
-    {
-        _pool = new GenericKeyedObjectPool(this);
-
-        _pool.setMaxActive(Integer.parseInt(_propertySource.getPropertyValue("org.apache.tapestry.page-pool-max-active")));
-        _pool.setMaxIdle(Integer.parseInt(_propertySource.getPropertyValue("org.apache.tapestry.page-pool-max-idle")));
-
-        _pool.setMinIdle(Integer.parseInt(_propertySource.getPropertyValue("org.apache.tapestry.page-pool-min-idle")));
-        
-        _pool.setMinEvictableIdleTimeMillis(MINUTE * Long.parseLong(_propertySource.getPropertyValue("org.apache.tapestry.page-pool-evict-idle-page-minutes")));
-        _pool.setTimeBetweenEvictionRunsMillis(MINUTE * Long.parseLong(_propertySource.getPropertyValue("org.apache.tapestry.page-pool-evict-thread-sleep-minutes")));
-        
-        _pool.setTestWhileIdle(false);
-        _pool.setTestOnBorrow(false);
-        _pool.setTestOnReturn(false);
-    }
-
-    public void registryDidShutdown()
-    {
-        try
-        {
-            _pool.close();
-        } catch (Exception e) {
-            // ignore
-        }
-    }
-
-    public ClassResolver getClassResolver()
-    {
-        return _classResolver;
-    }
-
-    /**
-     * Builds a key for a named page in the application's current locale.
-     *
-     * @param engine
-     *          The current engine servicing this request.
-     * @param pageName
-     *          The name of the page to build key for.
-     *
-     * @return The unique key for ths specified page and current {@link java.util.Locale}. 
-     */
-
-    protected PageKey buildKey(IEngine engine, String pageName)
-    {
-        return new PageKey(pageName, engine.getLocale());
-    }
-
-    /**
-     * Builds a key from an existing page, using the page's name and locale. This is used when
-     * storing a page into the pool.
-     *
-     * @param page
-     *          The page to build the key for.
-     *
-     * @return The unique key for the specified page instance.
-     */
-
-    protected PageKey buildKey(IPage page)
-    {
-        return new PageKey(page.getPageName(), page.getLocale());
-    }
-
-    public Object makeObject(Object key)
-      throws Exception
-    {
-        PageKey pageKey = (PageKey) key;
-
-        _pageSpecificationResolver.resolve(_cycle, pageKey.getPageName());
-
-        // The loader is responsible for invoking attach(),
-        // and for firing events to PageAttachListeners
-
-        return _loader.loadPage(_pageSpecificationResolver.getSimplePageName(),
-                                _pageSpecificationResolver.getNamespace(),
-                                _cycle,
-                                _pageSpecificationResolver.getSpecification());
-    }
-
-    /**
-     * Gets the page from a pool, or otherwise loads the page. This operation is threadsafe.
-     */
-
-    public IPage getPage(IRequestCycle cycle, String pageName)
-    {
-
-        IEngine engine = cycle.getEngine();
-        Object key = buildKey(engine, pageName);
-
-        IPage result;
-
-        // lock our page specific key lock first
-        // This is only a temporary measure until a more robust
-        // page pool implementation can be created.
-
-        try
-        {
-            result = (IPage) _pool.borrowObject(key);
-            
-        } catch (Exception ex)
-        {
-            if (RuntimeException.class.isInstance(ex))
-                throw (RuntimeException)ex;
-            else
-                throw new ApplicationRuntimeException(PageloadMessages.errorPagePoolGet(key), ex);
-        }
-
-
-        if (result.getEngine() == null)
-        {
-            // This call will also fire events to any PageAttachListeners
-            
-            result.attach(engine, cycle);
-        }
-
-        return result;
-    }
-
-    /**
-     * Returns the page to the appropriate pool. Invokes {@link IPage#detach()}.
-     */
-
-    public void releasePage(IPage page)
-    {
-        Tapestry.clearMethodInvocations();
-
-        page.detach();
-
-        Tapestry.checkMethodInvocation(Tapestry.ABSTRACTPAGE_DETACH_METHOD_ID, "detach()", page);
-
-        PageKey key = buildKey(page);
-
-        try
-        {
-            _pool.returnObject(key, page);
-
-        } catch (Exception ex)
-        {
-            if (RuntimeException.class.isInstance(ex))
-                throw (RuntimeException)ex;
-            else
-                throw new ApplicationRuntimeException(PageloadMessages.errorPagePoolGet(key), ex);
-        }        
-    }
-
-    public void resetEventDidOccur()
-    {
-        _pool.clear();
-    }
-
-    public void reportStatus(ReportStatusEvent event)
-    {
-        event.title(_serviceId);
-
-        event.section("Page Pool");
-
-        event.property("active", _pool.getNumActive());
-        event.property("idle", _pool.getNumIdle());
-    }
-
-    public void setServiceId(String serviceId)
-    {
-        _serviceId = serviceId;
-    }
-
-    public void setRequestCycle(IRequestCycle cycle)
-    {
-        _cycle = cycle;
-    }
-
-    /** @since 4.0 */
-
-    public void setClassResolver(ClassResolver resolver)
-    {
-        _classResolver = resolver;
-    }
-
-    /** @since 4.0 */
-
-    public void setPageSpecificationResolver(PageSpecificationResolver resolver)
-    {
-        _pageSpecificationResolver = resolver;
-    }
-
-    /** @since 4.0 */
-
-    public void setLoader(IPageLoader loader)
-    {
-        _loader = loader;
-    }
-
-    public void setPropertySource(IPropertySource propertySource)
-    {
-        _propertySource = propertySource;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageloadMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageloadMessages.java
deleted file mode 100644
index 8eff034..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageloadMessages.java
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.IContainedComponent;
-
-/**
- * Messages for the pageload package.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-final class PageloadMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(PageloadMessages.class);
-
-    /* defeat instantiation */
-    private PageloadMessages()
-    {
-    }
-
-    static String parameterMustHaveNoDefaultValue(IComponent component,
-            String name)
-    {
-        return _formatter.format("parameter-must-have-no-default-value",
-                component.getExtendedId(), name);
-    }
-
-    static String unableToInitializeProperty(String propertyName,
-            IComponent component, Throwable cause)
-    {
-        return _formatter.format("unable-to-initialize-property", propertyName,
-                component, cause);
-    }
-
-    static String requiredParameterNotBound(String name, IComponent component)
-    {
-        return _formatter.format("required-parameter-not-bound", name,
-                component.getExtendedId());
-    }
-
-    static String inheritInformalInvalidComponentFormalOnly(IComponent component)
-    {
-        return _formatter.format(
-                "inherit-informal-invalid-component-formal-only", component
-                        .getExtendedId());
-    }
-
-    static String inheritInformalInvalidContainerFormalOnly(
-            IComponent container, IComponent component)
-    {
-        return _formatter.format(
-                "inherit-informal-invalid-container-formal-only", container
-                        .getExtendedId(), component.getExtendedId());
-    }
-
-    static String formalParametersOnly(IComponent component,
-            String parameterName)
-    {
-        return _formatter.format("formal-parameters-only", component
-                .getExtendedId(), parameterName);
-    }
-
-    static String unableToInstantiateComponent(IComponent container,
-            Throwable cause)
-    {
-        return _formatter.format("unable-to-instantiate-component", container
-                .getExtendedId(), cause);
-    }
-
-    static String classNotComponent(Class componentClass)
-    {
-        return _formatter.format("class-not-component", componentClass
-                .getName());
-    }
-
-    static String unableToInstantiate(String className, Throwable cause)
-    {
-        return _formatter.format("unable-to-instantiate", className, cause);
-    }
-
-    static String pageNotAllowed(String componentId)
-    {
-        return _formatter.format("page-not-allowed", componentId);
-    }
-
-    static String classNotPage(Class componentClass)
-    {
-        return _formatter.format("class-not-page", componentClass.getName());
-    }
-
-    static String defaultParameterName(String name)
-    {
-        return _formatter.format("default-parameter-name", name);
-    }
-
-    static String initializerName(String propertyName)
-    {
-        return _formatter.format("initializer-name", propertyName);
-    }
-
-    static String parameterName(String name)
-    {
-        return _formatter.format("parameter-name", name);
-    }
-
-    static String duplicateParameter(String parameterName, IBinding binding)
-    {
-        return _formatter.format("duplicate-parameter", parameterName, HiveMind
-                .getLocationString(binding));
-    }
-
-    public static String usedParameterAlias(IContainedComponent contained,
-            String name, String parameterName, Location bindingLocation)
-    {
-        return _formatter.format("used-parameter-alias", new Object[] {
-                HiveMind.getLocationString(bindingLocation),
-                contained.getType(), name, parameterName });
-    }
-
-    public static String deprecatedParameter(String parameterName,
-            Location location, String componentType)
-    {
-        return _formatter.format("deprecated-parameter", parameterName,
-                HiveMind.getLocationString(location), componentType);
-    }
-
-    public static String componentNotFound(String id)
-    {
-        return _formatter.format("component-not-found", id);
-    }
-
-    public static String recursiveComponent(IComponent component)
-    {
-        return _formatter.format("recursive-component", component);
-    }
-
-    public static String errorPagePoolGet(Object key)
-    {
-        return _formatter.format("error-page-pool-borrow", key);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageloadStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageloadStrings.properties
deleted file mode 100644
index 66ce79d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/PageloadStrings.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-parameter-must-have-no-default-value=Parameter {1} of component {0} is required and must not have a default value.
-unable-to-initialize-property=Unable to initialize property {0} of {1}: {2}
-required-parameter-not-bound=Required parameter {0} of component {1} is not bound.
-inherit-informal-invalid-component-formal-only=Component {0} allows only formal parameters, but has inherit-informal-parameters set.
-inherit-informal-invalid-container-formal-only=Component {0} allows only formal parameters, but it contains component {1} that has inherit-informal-parameters set.
-formal-parameters-only=Component {0} allows only formal parameters, binding {1} is not allowed.
-unable-to-instantiate-component=Unable to instantiate component {0}: {1}
-class-not-component=Class {0} does not implement the IComponent interface.
-unable-to-instantiate=Unable to instantiate an instance of class {0}: {1}
-page-not-allowed=Component {0} may not implement the IPage interface.
-class-not-page=Class {0} does not implement the IPage interface.
-parameter-name=parameter {0}
-default-parameter-name=parameter {0} default value
-initializer-name=initializer for property {0}
-duplicate-parameter=A binding for parameter {0} conflicts with a previous binding (at {1}).
-used-parameter-alias=Parameter {2} (for component {1}, at {0}) was bound; this parameter has been deprecated, bind parameter {3} instead.
-deprecated-parameter=Parameter {0} (at {1}) has been deprecated, and may be removed in a future release. Consult the documentation for component {2} to determine an appropriate replacement.
-component-not-found=No component found in tree for EventListener binding with a matching component id of {0}.
-recursive-component=Component {0} has recursive reference to itself. This is most likely caused by referencing the same component in your html template.
-error-page-pool-borrow=There was an error borrowing the page with key {0} from the page pool.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/QueuedInheritInformalBindings.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/QueuedInheritInformalBindings.java
deleted file mode 100644
index 2426715..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/QueuedInheritInformalBindings.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Used to defer connection of inherited informal bindings.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-class QueuedInheritInformalBindings implements IQueuedInheritedBinding
-{
-
-    private IComponent _component;
-
-    QueuedInheritInformalBindings(IComponent component)
-    {
-        _component = component;
-    }
-
-    public void connect()
-    {
-
-        IComponent container = _component.getContainer();
-
-        for(Iterator it = container.getBindingNames().iterator(); it.hasNext();)
-        {
-            String bindingName = (String) it.next();
-            connectInformalBinding(container, _component, bindingName);
-        }
-    }
-
-    private void connectInformalBinding(IComponent container,
-            IComponent component, String bindingName)
-    {
-        IComponentSpecification componentSpec = component.getSpecification();
-        IComponentSpecification containerSpec = container.getSpecification();
-
-        // check if binding already exists in the component
-        if (component.getBinding(bindingName) != null) return;
-
-        // check if parameter is informal for the component
-        if (componentSpec.getParameter(bindingName) != null
-                || componentSpec.isReservedParameterName(bindingName)) return;
-
-        // check if parameter is informal for the container
-        if (containerSpec.getParameter(bindingName) != null
-                || containerSpec.isReservedParameterName(bindingName)) return;
-
-        // if everything passes, establish binding
-        IBinding binding = container.getBinding(bindingName);
-        component.setBinding(bindingName, binding);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/QueuedInheritedBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/QueuedInheritedBinding.java
deleted file mode 100644
index b591e48..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/QueuedInheritedBinding.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-
-/**
- * Handles connecting an inherited binding. These will be going away soon (if
- * not in release 4.0 itself).
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-class QueuedInheritedBinding implements IQueuedInheritedBinding
-{
-
-    private IComponent _component;
-
-    private String _containerParameterName;
-
-    private String _parameterName;
-
-    QueuedInheritedBinding(IComponent component, String containerParameterName,
-            String parameterName)
-    {
-        _component = component;
-        _containerParameterName = containerParameterName;
-        _parameterName = parameterName;
-    }
-
-    public void connect()
-    {
-        IBinding binding = _component.getContainer().getBinding(
-                _containerParameterName);
-
-        if (binding == null) return;
-
-        // In many cases, a default parameter binding will have been set on the
-        // child component
-        // parameter, which
-        // gets overwritten by this inherited binding. There's still a lot of
-        // ambiquity concerning
-        // binding
-        // an alias this way.
-
-        _component.setBinding(_parameterName, binding);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/SpecificationComponentClassProvider.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/SpecificationComponentClassProvider.java
deleted file mode 100644
index bf6d5d8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/SpecificationComponentClassProvider.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-/**
- * Implementation of {@link org.apache.tapestry.pageload.ComponentClassProvider}
- * that returns the value from the specification.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class SpecificationComponentClassProvider implements
-        ComponentClassProvider
-{
-
-    public String provideComponentClassName(
-            ComponentClassProviderContext context)
-    {
-        // May return null when the spec doesn't indicate the class name.
-
-        return context.getSpecification().getComponentClassName();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/VerifyRequiredParametersVisitor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/VerifyRequiredParametersVisitor.java
deleted file mode 100644
index 591d4dd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/VerifyRequiredParametersVisitor.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import java.util.Iterator;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-
-/**
- * Verify whether all required parameters in the examined component are bound, and if they are not,
- * throw an exception.
- * 
- * @author mindbridge
- * @since 3.0
- */
-public class VerifyRequiredParametersVisitor implements IComponentVisitor
-{
-    /**
-     * @see org.apache.tapestry.pageload.IComponentVisitor#visitComponent(org.apache.tapestry.IComponent)
-     */
-    public void visitComponent(IComponent component)
-    {
-        IComponentSpecification spec = component.getSpecification();
-
-        Iterator i = spec.getRequiredParameters().iterator();
-
-        while (i.hasNext())
-        {
-            IParameterSpecification parameterSpec = (IParameterSpecification) i.next();
-
-            String name = parameterSpec.getParameterName();
-
-            if (component.getBinding(name) == null)
-                throw new ApplicationRuntimeException(PageloadMessages.requiredParameterNotBound(
-                        name,
-                        component), component, component.getLocation(), null);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/package.html
deleted file mode 100644
index 94bca05..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pageload/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Classes used when loading pages (and thier heirarchies of components) from thier
-specifications, as well as organizaing thier templates.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception-Dynamic.css b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception-Dynamic.css
deleted file mode 100644
index 7652cc7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception-Dynamic.css
+++ /dev/null
@@ -1,32 +0,0 @@
-.exceptionDialog {
-    overflow: auto;
-    display: block;
-    margin-left: 5%;
-    margin-right: 5%;
-    height: 500px;
-    background-color: white;
-    border-left: 2px solid #E07000;
-    border-right: 2px solid #E07000;
-    border-bottom: 2px solid #E07000;
-    -moz-border-radius-bottomright: 10px;
-    -moz-border-radius-bottomleft: 10px;
-}
-
-.exceptionCloseLink {
-    display: block;
-    margin-left: 5%;
-    margin-right: 5%;
-    background-color: ThreeDFace;
-    padding-top: 3px;
-    padding-left: 5px;
-    padding-bottom: 3px;
-    font-weight: bold;
-    color: #000000;
-    cursor: pointer;
-    cursor: hand;
-    border-left: 2px solid #E07000;
-    border-right: 2px solid #E07000;
-    border-top: 2px solid #E07000;
-    -moz-border-radius-topright: 10px;
-    -moz-border-radius-topleft: 10px;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.css b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.css
deleted file mode 100644
index e57056f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.css
+++ /dev/null
@@ -1,194 +0,0 @@
-P  {}
-
-H1  {}
-
-H2  {}
-
-H3  {}
-
-A  {}
-
-A:Visited  {}
-
-A:Active  {}
-
-A:Hover  {}
-
-BODY  {
-    margin:0;
-    padding:0;
-}
-
-body, td, th {
-    font-family: Lucida Grande, Tahoma, Verdana, Arial, sans-serif;
-    font-size: 11pt;
-    color: #292929;
-}
-
-h2 { font: 1.4em Tahoma, Myriad, sans-serif; font-weight:bold; color: #296cb5; padding-bottom:0; }
-h3 { font: 0.8em Tahoma, Myriad, sans-serif; font-weight:bold; color: #296cb5; padding-bottom:0; }
-
-TABLE.exception-display TR.even  {
-	top : auto;
-}
-
-TABLE.exception-display TR.odd  {
-	top : auto;
-	background-color : #C0C0FF;
-}
-
-TABLE.exception-display TH  {
-	text-align : right;
-	font-weight : bold;
-}
-
-TABLE.exception-display TD  {
-	text-align : left;
-	width : 100%;	
-}
-
-TABLE.exception-display TR.stack-trace  {
-	font-size : small;
-	font-family : sans-serif;
-	text-align : left;
-}
-
-SPAN.exception-header  {
-	font-size : large;
-	font-weight : bold;
-	color : Red;
-}
-
-SPAN.exception-top {
-    display:block;
-    background: #efefef;
-    border-bottom: 2px solid #215E8A;
-    padding:0.4em;
-}
-
-SPAN.exception-message {
-	font-weight: bold;
-}
-
-UL  {
-	margin-top : 0;
-	margin-bottom : 0;
-	margin-left : 20px;
-}
-
-TABLE.exception-display TR.exception-name TD  {
-	font-size : larger;
-	font-weight : bold;
-	text-align : center;
-	background-color : Blue;
-	color : White;
-}
-
-TABLE.exception-display  {
-	width : 100%;
-	margin:0;
-	padding:0;
-}
-
-TABLE.exception-display TR.exception-message TD  {
-	border-width : 1px;
-	border-color : Black;
-	border-style : solid;
-	padding : 2px;
-	text-align : left;
-	font-style : italic;
-}
-
-TABLE.exception-display TR.strack-trace-label TD  {
-	margin : 2px;
-	border-width : 1px;
-	border-color : Black;
-	border-style : solid;
-	text-align : center;
-}
-
-TABLE.location-content
-{
-  border: 1px solid black;
-}
-
-TABLE.location-content TR.target-line TD
-{
-  background-color: yellow;
-}
-
-TABLE.location-content TR
-{
-  padding: 0;
-  margin: 0;
-}
-
-TABLE.location-content TD.line-number
-{
-  width: 1px; // Minimum; will expand to fit line numbers.
-  align: right;
-  border-right: 1px dotted grey;
-}
-
-TABLE.location-content TD
-{
-  font: terminal;
-  padding: 0;
-  margin: 0;
-}
-
-DIV.described-object-title
-{
-  font-size: large;
-  font-weight: bold;
-  color: white;
-  background-color: blue;
-}
-
-TABLE.described-object
-{
-  border: 1px solid black;
-  width: 100%;
-  margin-bottom: 15px;
-}
-
-TABLE.described-object TR.section TH
-{
-  color: white;
-  background-color: blue;
-  text-align: center;
-}
-
-TABLE.described-object TH
-{
-  text-align: right;
-  width: 1px; // Will stretch to fit.
-}
-
-TABLE.described-object TR.even
-{
-  background-color: white;
-}
-
-TABLE.described-object TR.odd
-{
-  background-color: #C0C0FF;
-}
-
-a.toggle {
-    text-decoration:none;
-    color: #292929;
-    font-weight:bold;
-    display:block;
-    clear:left;
-    border-bottom: 2px solid #ffffff;
-    margin-top: 0.3em;
-}
-
-a.toggle:hover {
-    background:#EDCC5F;
-}
-
-a.toggleSelected {
-    background:#EDCC5F;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.html
deleted file mode 100644
index 36d7d08..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="$content$">
-<html jwcid="@Shell" title="Exception" stylesheet="asset:stylesheet" 
-	  disableCaching="true" doctype="ognl:''">
-<body>
-
-<span jwcid="@If" condition="ognl:dynamic" renderTag="false">
-    <style jwcid="@Style" href="asset:dynamicStylesheet"/>
-</span>
-
-<span class="exception-top">
-<span class="exception-header">
-An exception has occurred.
-</span>
-
-<p>You may continue by <b><a jwcid="restart">restarting</a></b> the session.</p>
-</span>
-
-<span jwcid="@ExceptionDisplay" exceptions="ognl:exceptions"/>
-
-<span jwcid="@RequestDisplay"/>
-
-<script type="text/javascript">
-dojo.require("dojo.html.style");
-
-var blockCount=0;
-
-function toggleLink(link){
-	if(!link){return;}
-	if(dojo.html.hasClass(link, "toggleSelected")){
-		dojo.html.removeClass(link, "toggleSelected");
-		return;
-	} else {
-		dojo.html.addClass(link, "toggleSelected");
-		return;
-	}
-}
-
-function toggleDisplay(id, link){
-	dojo.html.toggleShowing(dojo.byId(id));
-	toggleLink(link);
-	return false;
-}
-
-(function(){
-	var elms=dojo.html.getElementsByClass('toggleContent');
-	if(elms && elms.length > 0){
-		for(var i=0;i<elms.length;i++){
-			toggleDisplay(elms[i]);
-		}
-	}
-	elms=dojo.html.getElementsByClass('exception-display');
-	if(elms && elms.length > 0){
-		toggleDisplay(elms[elms.length-1]);
-	}
-})();
-</script>
-
-</body>
-</html>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.java
deleted file mode 100644
index c8d9e0f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pages;
-
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.util.exception.ExceptionAnalyzer;
-import org.apache.tapestry.util.exception.ExceptionDescription;
-
-/**
- * Default exception reporting page.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Exception extends BasePage implements PageDetachListener
-{
-
-    /** Transient property. */
-    public abstract void setExceptions(ExceptionDescription[] exceptions);
-
-    public void setException(Throwable value)
-    {
-        ExceptionAnalyzer analyzer = new ExceptionAnalyzer();
-
-        ExceptionDescription[] exceptions = analyzer.analyze(value);
-
-        setExceptions(exceptions);
-    }
-
-    public boolean isDynamic()
-    {
-        return getRequestCycle().getResponseBuilder().isDynamic();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.page b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.page
deleted file mode 100644
index d086875..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/Exception.page
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification class="org.apache.tapestry.pages.Exception">
-  
-  <component id="restart" type="ServiceLink">
-    <binding name="service" value="ognl:@org.apache.tapestry.Tapestry@RESTART_SERVICE"/>
-  </component>
-  
-  <asset name="stylesheet" path="Exception.css" />
-  <asset name="dynamicStylesheet" path="Exception-Dynamic.css" />
-  
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleLink.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleLink.html
deleted file mode 100644
index b63a53e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleLink.html
+++ /dev/null
@@ -1,26 +0,0 @@
-
-<span jwcid="@Shell" stylesheet="ognl:assets.stylesheet" disableCaching="true" 
-	doctype="ognl:''" title="Stale Link">
-
-<body>
-<span class="exception-top">
-You have clicked on a <i>stale link</i>.  
-</span>
-
-<p>
-<span jwcid="@Insert" value="ognl:message" class="exception-message">
-Exception message goes here.
-</span>
-</p>
-<p>This is most likely the result of using your
-browser's <b>back</b> button, but can also be an application error.</p>
-
-<p>You may continue by returning to the
-application's</p>
-
-<b>
-<a jwcid="home">home page</a></b>.
-
-</body>
-
-</span>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleLink.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleLink.java
deleted file mode 100644
index 9f9c185..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleLink.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pages;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Stores a message (taken from the {@link org.apache.tapestry.StaleLinkException})
- *  that is displayed as part of the page.
- *
- *  @author Howard Lewis Ship
- *  @since 3.0
- *
- **/
-
-public abstract class StaleLink extends BasePage
-{
-    public abstract void setMessage(String message);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleLink.page b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleLink.page
deleted file mode 100644
index 3fb5a12..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleLink.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.pages.StaleLink">
-  
-  <property-specification name="message" type="java.lang.String"/>
-  
-  <component id="home" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@HOME_SERVICE"/>
-  </component>
-  
-  <private-asset name="stylesheet" resource-path="Exception.css"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleSession.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleSession.html
deleted file mode 100644
index 7ae27f1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleSession.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
-<span jwcid="@Shell" title="Stale Session" disableCaching="true" doctype="ognl:''" stylesheet="ognl:assets.stylesheet">
-
-<body>
-<span class="exception-top">
-Your session has timed out.
-</span>
-
-<p>Web applications store information about what you are doing on the server.  This information
-is called the <em>session</em>.</p>
-
-<p>Web servers must track many, many sessions.  If you
-are inactive for a long enough time (usually, a few minutes), this information is discarded to
-make room for active users.</p>
-
-<p>At this point you may <b>
-<a jwcid="restart">restart</a></b> the session to continue.</p>
-
-</body>
-</span>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleSession.page b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleSession.page
deleted file mode 100644
index c6ed99e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/StaleSession.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification>
-  
-  <component id="restart" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@RESTART_SERVICE"/>
-  </component>
-  
-  <private-asset name="stylesheet" resource-path="Exception.css"/>
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/package.html
deleted file mode 100644
index a23d733..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/pages/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-Basic pages used for errors, stale links and stale sessions.  These can all be
-overriden in the application specification.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/BeanSetPropertySetter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/BeanSetPropertySetter.java
deleted file mode 100644
index 59e6818..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/BeanSetPropertySetter.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.tapestry.bean.BindingBeanInitializer;
-import org.apache.tapestry.spec.IBeanSpecification;
-
-/**
- * Holds the data from a &lt;set-property&gt; element while the body is being parsed.
- * 
- * @author Howard Lewis Ship
- */
-class BeanSetPropertySetter extends BaseLocatable
-{
-    private IBeanSpecification _beanSpecification;
-
-    private BindingBeanInitializer _initializer;
-
-    private String _bindingReference;
-
-    private String _prefix;
-
-    BeanSetPropertySetter(IBeanSpecification beanSpecification, BindingBeanInitializer initializer,
-            String prefix, String expression)
-    {
-        _beanSpecification = beanSpecification;
-        _initializer = initializer;
-        _prefix = prefix;
-        _bindingReference = expression;
-    }
-
-    void applyBindingReference(String bindingReference)
-    {
-        String fullBindingReference = _prefix == null ? bindingReference : _prefix
-                + bindingReference;
-
-        _initializer.setBindingReference(fullBindingReference);
-
-        _beanSpecification.setLocation(getLocation());
-        _beanSpecification.addInitializer(_initializer);
-    }
-
-    public String getBindingReference()
-    {
-        return _bindingReference;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/BindingSetter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/BindingSetter.java
deleted file mode 100644
index 6db3e55..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/BindingSetter.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.tapestry.spec.IBindingSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-
-/**
- * Carries name and value information while the body of
- * a &lt;binding&gt; or &lt;static-binding&gt; is being parsed.
- *
- * @author Howard Lewis Ship
- */
-class BindingSetter extends BaseLocatable
-{
-    private IContainedComponent _component;
-    private String _name;
-    private String _value;
-
-    BindingSetter(IContainedComponent component, String name, String value)
-    {
-        _component = component;
-        _name = name;
-        _value = value;
-    }
-
-    void apply(IBindingSpecification spec)
-    {
-        spec.setLocation(getLocation());
-        _component.setBinding(_name, spec);
-    }
-
-    public String getValue()
-    {
-        return _value;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/CloseToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/CloseToken.java
deleted file mode 100644
index 568e3bb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/CloseToken.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.ToStringBuilder;
-
-/**
- * Represents the closing tag of a component element in the template.
- * 
- * @see TokenType#CLOSE
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class CloseToken extends TemplateToken
-{
-    private String _tag;
-
-    public CloseToken(String tag, Location location)
-    {
-        super(TokenType.CLOSE, location);
-
-        _tag = tag;
-    }
-
-    public String getTag()
-    {
-        return _tag;
-    }
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-        builder.append("tag", _tag);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ComponentTemplate.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ComponentTemplate.java
deleted file mode 100644
index 43895dc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ComponentTemplate.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-/**
- *  Enapsulates a parsed component template, allowing access to the
- *  tokens parsed.
- *
- *  <p>TBD:  Record the name of the resource (or other location) from which
- *  the template was parsed (useful during debugging).
- *
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class ComponentTemplate
-{
-    /**
-     *  The HTML template from which the tokens were generated.  This is a string
-     *  read from a resource.  The tokens represents offsets and lengths into
-     *  this string.
-     *
-     **/
-
-    private char[] _templateData;
-
-    private TemplateToken[] _tokens;
-
-    /**
-     *  Creates a new ComponentTemplate.
-     *
-     *  @param templateData The template data.  This is <em>not</em> copied, so
-     *  the array passed in should not be modified further.
-     *
-     *  @param tokens  The tokens making up the template.  This is also
-     *  retained (<em>not</em> copied), and so should not
-     *  be modified once passed to the constructor.
-     *
-     **/
-
-    public ComponentTemplate(char[] templateData, TemplateToken[] tokens)
-    {
-        _templateData = templateData;
-        _tokens = tokens;
-    }
-
-    public char[] getTemplateData()
-    {
-        return _templateData;
-    }
-
-    public TemplateToken getToken(int index)
-    {
-        return _tokens[index];
-    }
-
-    public int getTokenCount()
-    {
-        return _tokens.length;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/DescriptionSetter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/DescriptionSetter.java
deleted file mode 100644
index 97ecf33..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/DescriptionSetter.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.hivemind.util.PropertyUtils;
-
-/**
- * Used to hold an object that can be described while parsing the
- * &lt;description&gt; element.
- *
- * @author Howard Lewis Ship
- */
-class DescriptionSetter extends BaseLocatable
-{
-    private Object _descriptionHolder;
-
-    DescriptionSetter(Object descriptionHolder)
-    {
-        _descriptionHolder = descriptionHolder;
-    }
-    
-    void apply(String description)
-    {
-        PropertyUtils.write(_descriptionHolder, "description", description);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ExtensionConfigurationSetter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ExtensionConfigurationSetter.java
deleted file mode 100644
index 7d26896..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ExtensionConfigurationSetter.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.tapestry.spec.IExtensionSpecification;
-
-/**
- * Used to hold data about a &lt;configure&gt; element while it is being parsed.
- * 
- * @author Howard Lewis Ship
- */
-class ExtensionConfigurationSetter extends BaseLocatable
-{
-    private IExtensionSpecification _extension;
-
-    private String _propertyName;
-
-    private String _value;
-
-    ExtensionConfigurationSetter(IExtensionSpecification extension, String propertyName,
-            String value)
-    {
-        _extension = extension;
-        _propertyName = propertyName;
-        _value = value;
-    }
-
-    String getValue()
-    {
-        return _value;
-    }
-
-    void apply(String value)
-    {
-        _extension.addConfiguration(_propertyName, value);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ISpecificationParser.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ISpecificationParser.java
deleted file mode 100644
index c9fd077..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ISpecificationParser.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-
-/**
- * Service interface for a wrapper around the class
- * {@link org.apache.tapestry.parse.SpecificationParser}.
- * Because the implementation of {@link org.apache.tapestry.parse.SpecificationParser}
- * is not threadsafe, the implementation of this
- * service uses the pooled service model.
- *
- * <p>
- * Note: had to use the 'I' prefix, so that {@link org.apache.tapestry.parse.SpecificationParser}
- * could keep its name. Otherwise, it makes Spindle support really, really ugly.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ISpecificationParser
-{
-    /**
-     * Parses an application specification from the provided Resource.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException on any error.
-     */
-    IApplicationSpecification parseApplicationSpecification(Resource resource);
-
-    IComponentSpecification parseComponentSpecification(Resource resource);
-
-    ILibrarySpecification parseLibrarySpecification(Resource resource);
-
-    IComponentSpecification parsePageSpecification(Resource resource);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ITemplateParser.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ITemplateParser.java
deleted file mode 100644
index 7a2db08..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ITemplateParser.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.Resource;
-
-/**
- * Service interface for the <code>tapestry.TemplateParser</code> service.
- * Note that this requires a threaded service model.
- * <p>
- * Note: had to use the 'I' prefix, so that
- * {@link org.apache.tapestry.parse.TemplateParser} could keep its name.
- * Otherwise, it makes Spindle support really, really ugly.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ITemplateParser
-{
-
-    /**
-     * Parses the template data into an array of {@link TemplateToken}s.
-     * <p>
-     * The parser is <i>decidedly</i> not threadsafe, so care should be taken
-     * that only a single thread accesses it.
-     * 
-     * @param templateData
-     *            the HTML template to parse. Some tokens will hold a reference
-     *            to this array.
-     * @param delegate
-     *            object that "knows" about defined components
-     * @param resourceLocation
-     *            a description of where the template originated from, used with
-     *            error messages.
-     */
-    TemplateToken[] parse(char[] templateData,
-            ITemplateParserDelegate delegate, Resource resourceLocation)
-    throws TemplateParseException;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ITemplateParserDelegate.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ITemplateParserDelegate.java
deleted file mode 100644
index f91b128..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ITemplateParserDelegate.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.Location;
-
-/**
- * Provides a {@link TemplateParser}with additional information about dynamic components.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface ITemplateParserDelegate
-{
-    /**
-     * Returns true if the component id is valid, false if the component id is not recognized.
-     */
-
-    boolean getKnownComponent(String componentId);
-
-    /**
-     * Returns true if the specified component allows a body, false otherwise. The parser uses this
-     * information to determine if it should ignore the body of a tag.
-     */
-
-    boolean getAllowBody(String componentId, Location location);
-
-    /**
-     * Used with implicit components to determine if the component allows a body or not.
-     * 
-     * @param libraryId
-     *            the specified library id, possibly null
-     * @param type
-     *            the component type
-     * @since 3.0
-     */
-
-    boolean getAllowBody(String libraryId, String type, Location location);
-
-    /**
-     * Returns the name of the attribute used to indicate a component. The default is "jwcid", but
-     * this can be overriden in a number of ways.
-     */
-
-    String getComponentAttributeName();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/LocalizationToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/LocalizationToken.java
deleted file mode 100644
index 56597d1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/LocalizationToken.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import java.util.Map;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.ToStringBuilder;
-
-/**
- *  Represents localized text from the template.
- *
- *  @see TokenType#LOCALIZATION
- * 
- *  @author Howard Lewis Ship
- *  @since 3.0
- *
- **/
-
-public class LocalizationToken extends TemplateToken
-{
-    private String _tag;
-    private String _key;
-    private boolean _raw;
-    private Map _attributes;
-    
-    /**
-     *  Creates a new token.
-     * 
-     * 
-     *  @param tag the tag of the element from the template
-     *  @param key the localization key specified
-     *  @param raw if true, then the localized value contains markup that should not be escaped
-     *  @param attributes any additional attributes (beyond those used to define key and raw)
-     *  that were specified.  This value is retained, not copied.
-     *  @param location location of the tag which defines this token
-     * 
-     **/
-    
-    public LocalizationToken(String tag, String key, boolean raw, Map attributes, Location location)
-    {
-        super(TokenType.LOCALIZATION, location);
-        
-        _tag = tag;
-        _key = key;
-        _raw = raw;
-        _attributes = attributes;
-    }
-    
-    /**
-     *  Returns any attributes for the token, which may be null.  Do not modify
-     *  the return value.
-     * 
-     **/
-    
-    public Map getAttributes()
-    {
-        return _attributes;
-    }
-
-    public boolean isRaw()
-    {
-        return _raw;
-    }
-
-    public String getTag()
-    {
-        return _tag;
-    }
-
-    public String getKey()
-    {
-        return _key;
-    }
-    
-    protected void extendDescription(ToStringBuilder builder)
-    {
-        builder.append("tag", _tag);
-        builder.append("key", _key);
-        builder.append("raw", _raw);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/OpenToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/OpenToken.java
deleted file mode 100644
index 70e2c8f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/OpenToken.java
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.ToStringBuilder;
-
-/**
- * Token representing the open tag for a component. Components may be either specified or implicit.
- * Specified components (the traditional type, dating back to the origin of Tapestry) are matched by
- * an entry in the containing component's specification. Implicit components specify their type in
- * the component template and must not have an entry in the containing component's specification.
- * 
- * @see TokenType#OPEN
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class OpenToken extends TemplateToken
-{
-    private String _tag;
-
-    private String _id;
-
-    private String _componentType;
-
-    private Map _attributes;
-
-    /**
-     * Creates a new token with the given tag, id and type.
-     * 
-     * @param tag
-     *            the template tag which represents the component, typically "span"
-     * @param id
-     *            the id for the component, which may be assigned by the template parser for
-     *            implicit components
-     * @param componentType
-     *            the type of component, if an implicit component, or null for a specified component
-     * @param location
-     *            location of tag represented by this token
-     */
-
-    public OpenToken(String tag, String id, String componentType, Location location)
-    {
-        super(TokenType.OPEN, location);
-        
-        _tag = tag;
-        _id = id;
-        _componentType = componentType;
-    }
-
-    /**
-     * Returns the id for the component.
-     */
-
-    public String getId()
-    {
-        return _id;
-    }
-
-    /**
-     * Returns the tag used to represent the component within the template.
-     */
-
-    public String getTag()
-    {
-        return _tag;
-    }
-
-    /**
-     * Returns the specified component type, or null for a component where the type is not defined
-     * in the template. The type may include a library id prefix.
-     */
-
-    public String getComponentType()
-    {
-        return _componentType;
-    }
-
-    public void addAttribute(String name, String value)
-    {
-        if (_attributes == null)
-            _attributes = new HashMap();
-
-        _attributes.put(name, value);
-    }
-
-    /**
-     * Returns a Map of attributes. Keys and values are strings.
-     */
-
-    public Map getAttributesMap()
-    {
-        return _attributes;
-    }
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-        builder.append("id", _id);
-        builder.append("componentType", _componentType);
-        builder.append("tag", _tag);
-        builder.append("attributes", _attributes);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ParseMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ParseMessages.java
deleted file mode 100644
index 5bf7a9b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ParseMessages.java
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * Localized messages for the org.apache.tapestry.parse package.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-final class ParseMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(ParseMessages.class);
-
-    /* defeat instantiation */
-    private ParseMessages() { }
-    
-    static String commentNotEnded(int line)
-    {
-        return _formatter.format("comment-not-ended", new Integer(line));
-    }
-
-    static String unclosedUnknownTag(int line)
-    {
-        return _formatter.format("unclosed-unknown-tag", new Integer(line));
-    }
-
-    static String unclosedTag(String tagName, int line)
-    {
-        return _formatter.format("unclosed-tag", tagName, new Integer(line));
-    }
-
-    static String missingAttributeValue(String tagName, int line, String attributeName)
-    {
-        return _formatter.format(
-                "missing-attribute-value",
-                tagName,
-                new Integer(line),
-                attributeName);
-    }
-
-    static String componentMayNotBeIgnored(String tagName, int line)
-    {
-        return _formatter.format("component-may-not-be-ignored", tagName, new Integer(line));
-    }
-
-    static String componentIdInvalid(String tagName, int line, String jwcid)
-    {
-        return _formatter.format("component-id-invalid", tagName, new Integer(line), jwcid);
-    }
-
-    static String unknownComponentId(String tagName, int line, String jwcid)
-    {
-        return _formatter.format("unknown-component-id", tagName, new Integer(line), jwcid);
-    }
-
-    static String nestedIgnore(String tagName, int line)
-    {
-        return _formatter.format("nested-ignore", tagName, new Integer(line));
-    }
-
-    static String contentBlockMayNotBeIgnored(String tagName, int line)
-    {
-        return _formatter.format("content-block-may-not-be-ignored", tagName, new Integer(line));
-    }
-
-    static String contentBlockMayNotBeEmpty(String tagName, int line)
-    {
-        return _formatter.format("content-block-may-not-be-empty", tagName, new Integer(line));
-    }
-
-    static String incompleteCloseTag(int line)
-    {
-        return _formatter.format("incomplete-close-tag", new Integer(line));
-    }
-
-    static String improperlyNestedCloseTag(String tagName, int closeLine, String startTagName,
-            int startLine)
-    {
-        return _formatter.format("improperly-nested-close-tag", new Object[]
-        { tagName, new Integer(closeLine), startTagName, new Integer(startLine) });
-    }
-
-    static String unmatchedCloseTag(String tagName, int line)
-    {
-        return _formatter.format("unmatched-close-tag", tagName, new Integer(line));
-    }
-
-    static String failConvertBoolean(String value)
-    {
-        return _formatter.format("fail-convert-boolean", value);
-    }
-
-    static String failConvertDouble(String value)
-    {
-        return _formatter.format("fail-convert-double", value);
-    }
-
-    static String failConvertInt(String value)
-    {
-        return _formatter.format("fail-convert-int", value);
-    }
-
-    static String failConvertLong(String value)
-    {
-        return _formatter.format("fail-convert-long", value);
-    }
-
-    static String unableToCopy(String id)
-    {
-        return _formatter.format("unable-to-copy", id);
-    }
-
-    static String bothTypeAndCopyOf(String id)
-    {
-        return _formatter.format("both-type-and-copy-of", id);
-    }
-
-    static String missingTypeOrCopyOf(String id)
-    {
-        return _formatter.format("missing-type-or-copy-of", id);
-    }
-
-    static String frameworkLibraryIdIsReserved(String id)
-    {
-        return _formatter.format("framework-library-id-is-reserved", id);
-    }
-
-    static String incorrectDocumentType(String expected, String actual)
-    {
-        return _formatter.format("incorrect-document-type", expected, actual);
-    }
-
-    static String noAttributeAndBody(String attributeName, String elementName)
-    {
-        return _formatter.format("no-attribute-and-body", attributeName, elementName);
-    }
-
-    static String requiredExtendedAttribute(String elementName, String attributeName)
-    {
-        return _formatter.format("required-extended-attribute", elementName, attributeName);
-    }
-
-    static String invalidAttribute(String key, String value)
-    {
-        return _formatter.format(key, value);
-    }
-
-    static String missingResource(Resource resource)
-    {
-        return _formatter.format("missing-resource", resource);
-    }
-
-    static String errorReadingResource(Resource resource, Throwable cause)
-    {
-        return _formatter.format("error-reading-resource", resource, cause);
-    }
-
-    static String unknownPublicId(Resource resource, String publicId)
-    {
-        return _formatter.format("unknown-public-id", resource, publicId);
-    }
-
-    static String serviceElementNotSupported()
-    {
-        return _formatter.getMessage("service-element-not-supported");
-    }
-
-    static String rangeError(TemplateToken token, int length)
-    {
-        return _formatter.format("range-error", token, new Integer(length));
-    }
-
-    public static String duplicateTagAttribute(String tagName, int line, String attributeName)
-    {
-        return _formatter.format(
-                "duplicate-tag-attribute",
-                tagName,
-                new Integer(line),
-                attributeName);
-    }
-
-    public static Object listenerBindingUnsupported(Location location)
-    {
-        return _formatter.format("listener-binding-unsupported", HiveMind
-                .getLocationString(location));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ParseStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ParseStrings.properties
deleted file mode 100644
index 42ec8f2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/ParseStrings.properties
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-comment-not-ended=Comment on line {0} did not end.
-unclosed-tag=Tag <{0}> on line {1} is never closed.
-unclosed-unknown-tag=Tag on line {1} is never closed.
-missing-attribute-value=Tag <{0}> on line {1} is missing a value for attribute {2}.
-content-block-may-not-be-ignored=Tag <{0}> on line {1} is the template content, and may not be in an ignored block.
-content-block-may-not-be-empty=Tag <{0}> on line {1} is the template content, and may not be empty.
-unknown-component-id=Tag <{0}> on line {1} references unknown component id ''{2}''.
-component-may-not-be-ignored=Tag <{0}> on line {1} is a dynamic component, and may not appear inside an ignored block.
-nested-ignore=Tag <{0}> on line {1} should be ignored, but is already inside an ignored block (ignored blocks may not be nested).
-incomplete-close-tag=Incomplete close tag on line {0}.
-improperly-nested-close-tag=Closing tag </{0}> on line {1} is improperly nested with tag <{2}> on line {3}.
-unmatched-close-tag=Closing tag </{0}> on line {1} does not have a matching open tag.
-component-id-invalid=Tag <{0}> on line {1} contains an invalid jwcid ''{2}''.
-
-fail-convert-boolean=Could not convert ''{0}'' to boolean.
-fail-convert-int=Could not convert ''{0}'' to integer.
-fail-convert-double=Could not convert ''{0}'' to double.
-fail-convert-long=Could not convert ''{0}'' to long.
-both-type-and-copy-of=Contained component {0} contains both type and copy-of attributes.
-missing-type-or-copy-of=Contained component {0} does not specify attribute type or copy-of.
-unable-to-copy=Unable to copy component {0}, which does not exist.
-invalid-parameter-name=Parameter ''{0}'' is an invalid name.  Parameter names should be valid Java identifiers.
-invalid-page-name=''{0}'' is not a valid page name.  Page names must start with a letter and consist only of letters, numbers, period, dash and underscore.
-invalid-component-type=''{0}'' is not a valid component type.  Types must be valid Java identifiers.
-invalid-property-name=''{0}'' is not a valid JavaBean property name.  Property names must be valid Java identifiers.
-invalid-bean-name=''{0}'' is not a valid helper bean name.  Helper bean names must be valid Java identifiers.
-invalid-component-id=''{0}'' is not a valid component id.  Component ids must be valid Java identifiers.
-invalid-asset-name=''{0}'' is not a valid asset name.  Asset names must be valid Java identifiers.
-invalid-library-id=''{0}'' is not a valid library id.  Library ids must be valid Java identifiers.
-invalid-extension-name=''{0}'' is not a valid extension name.  Extension names must start with a letter, and contain only letters, numbers, dash and underscore.
-invalid-component-type=''{0}'' is not a valid component type.
-framework-library-id-is-reserved=The library id ''{0}'' is reserved and may not be used.
-no-attribute-and-body=It is not valid to specify a value for attribute ''{0}'' of <{1}> and provide a value in the body of the element.
-required-extended-attribute=Element <{0}> does not specify a value for attribute ''{1}'', or contain a body value.
-error-reading-resource=Unable to read {0}: {1}
-incorrect-document-type=Incorrect document type; expected {0} but received {1}.
-missing-resource=Resource at {0} does not exist.
-unknown-public-id=Document {0} has an unexpected public id of ''{1}''.
-service-element-not-supported=The <service> element is no longer supported; the HiveMind tapestry.services.ApplicationServices configuration point serves the same purpose.
-listener-binding-unsupported=The <listener-binding> element is no longer supported (at {0}).
-
-range-error={0}: out of range for template length {1}.
-duplicate-tag-attribute=Tag <{0}> on line {1} contains more than one ''{2}'' attribute.
-
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/PropertyValueSetter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/PropertyValueSetter.java
deleted file mode 100644
index ede5ae1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/PropertyValueSetter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- * Used to hold a property name and property value, and an
- * {@link org.apache.tapestry.util.IPropertyHolder}, during parsing.
- *
- * @author Howard Lewis Ship
- */
-
-class PropertyValueSetter
-{
-    private IPropertyHolder _holder;
-    private String _propertyName;
-    private String _propertyValue;
-
-    PropertyValueSetter(IPropertyHolder holder, String propertyName, String propertyValue)
-    {
-        _holder = holder;
-        _propertyName = propertyName;
-        _propertyValue = propertyValue;
-    }
-
-    public void applyValue(String value)
-    {
-        _holder.setProperty(_propertyName, value);
-    }
-
-    public String getPropertyValue()
-    {
-        return _propertyValue;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/SpecificationParser.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/SpecificationParser.java
deleted file mode 100644
index f3a014a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/SpecificationParser.java
+++ /dev/null
@@ -1,1751 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.*;
-import org.apache.hivemind.impl.DefaultErrorHandler;
-import org.apache.hivemind.impl.LocationImpl;
-import org.apache.hivemind.parse.AbstractParser;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.bean.BindingBeanInitializer;
-import org.apache.tapestry.bean.LightweightBeanInitializer;
-import org.apache.tapestry.binding.BindingConstants;
-import org.apache.tapestry.binding.BindingSource;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.spec.*;
-import org.apache.tapestry.util.IPropertyHolder;
-import org.apache.tapestry.util.RegexpMatcher;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.apache.tapestry.util.xml.InvalidStringException;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Parses the different types of Tapestry specifications.
- * <p>
- * Not threadsafe; it is the callers responsibility to ensure thread safety.
- * 
- * @author Howard Lewis Ship
- */
-public class SpecificationParser extends AbstractParser implements ISpecificationParser
-{
-    /**
-     * Perl5 pattern for asset names. Letter, followed by letter, number or underscore. Also allows
-     * the special "$template" value.
-     * 
-     * @since 2.2
-     */
-
-    public static final String ASSET_NAME_PATTERN = "(\\$template)|(" + Tapestry.SIMPLE_PROPERTY_NAME_PATTERN + ")";
-
-    /**
-     * Perl5 pattern for helper bean names. Letter, followed by letter, number or underscore.
-     * 
-     * @since 2.2
-     */
-
-    public static final String BEAN_NAME_PATTERN = Tapestry.SIMPLE_PROPERTY_NAME_PATTERN;
-
-    public static final String IDENTIFIER_PATTERN = "_?[a-zA-Z]\\w*";
-    
-    public static final String EXTENDED_IDENTIFIER_PATTERN = "_?[a-zA-Z](\\w|-)*";
-    
-    /**
-     * Perl5 pattern for component type (which was known as an "alias" in earlier versions of
-     * Tapestry). This is either a simple property name, or a series of property names seperated by
-     * slashes (the latter being new in Tapestry 4.0). This defines a literal that can appear in a
-     * library or application specification.
-     * 
-     * @since 2.2
-     */
-
-    public static final String COMPONENT_ALIAS_PATTERN = "^(" + IDENTIFIER_PATTERN + "/)*"
-            + IDENTIFIER_PATTERN + "$";
-
-    /**
-     * Perl5 pattern for component ids. Letter, followed by letter, number or underscore.
-     * 
-     * @since 2.2
-     */
-
-    public static final String COMPONENT_ID_PATTERN = Tapestry.SIMPLE_PROPERTY_NAME_PATTERN;
-
-    /**
-     * Perl5 pattern for component types (i.e., the type attribute of the &lt;component&gt;
-     * element). Component types are an optional namespace prefix followed by a component type
-     * (within the library defined by the namespace). Starting in 4.0, the type portion is actually
-     * a series of identifiers seperated by slashes.
-     * 
-     * @since 2.2
-     */
-
-    public static final String COMPONENT_TYPE_PATTERN = "^(" + IDENTIFIER_PATTERN + ":)?" + "("
-            + IDENTIFIER_PATTERN + "/)*" + IDENTIFIER_PATTERN + "$";
-
-    /**
-     * Extended version of {@link Tapestry#SIMPLE_PROPERTY_NAME_PATTERN}, but allows a series of
-     * individual property names, seperated by periods. In addition, each name within the dotted
-     * sequence is allowed to contain dashes.
-     * 
-     * @since 2.2
-     */
-
-    public static final String EXTENDED_PROPERTY_NAME_PATTERN = "^" + EXTENDED_IDENTIFIER_PATTERN
-            + "(\\." + EXTENDED_IDENTIFIER_PATTERN + ")*$";
-
-    /**
-     * Per5 pattern for extension names. Letter followed by letter, number, dash, period or
-     * underscore.
-     * 
-     * @since 2.2
-     */
-
-    public static final String EXTENSION_NAME_PATTERN = EXTENDED_PROPERTY_NAME_PATTERN;
-
-    /**
-     * Perl5 pattern for library ids. Letter followed by letter, number or underscore.
-     * 
-     * @since 2.2
-     */
-
-    public static final String LIBRARY_ID_PATTERN = Tapestry.SIMPLE_PROPERTY_NAME_PATTERN;
-    
-    /**
-     * Perl5 pattern for page names. Page names appear in library and application specifications, in
-     * the &lt;page&gt; element. Starting with 4.0, the page name may look more like a path name,
-     * consisting of a number of ids seperated by slashes. This is used to determine the folder
-     * which contains the page specification or the page's template.
-     * 
-     * @since 2.2
-     */
-
-    public static final String PAGE_NAME_PATTERN = "^" + IDENTIFIER_PATTERN + "(/" + EXTENDED_IDENTIFIER_PATTERN + ")*$";
-
-    /**
-     * Perl5 pattern that parameter names must conform to. Letter, followed by letter, number or
-     * underscore.
-     * 
-     * @since 2.2
-     */
-
-    public static final String PARAMETER_NAME_PATTERN = Tapestry.SIMPLE_PROPERTY_NAME_PATTERN;
-
-    /**
-     * Perl5 pattern that property names (that can be connected to parameters) must conform to.
-     * Letter, followed by letter, number or underscore.
-     * 
-     * @since 2.2
-     */
-
-    public static final String PROPERTY_NAME_PATTERN = Tapestry.SIMPLE_PROPERTY_NAME_PATTERN;
-
-    /**
-     * Perl5 pattern for service names. Letter followed by letter, number, dash, underscore or
-     * period.
-     * 
-     * @since 2.2
-     * @deprecated As of release 4.0, the &lt;service&gt; element (in 3.0 DTDs) is no longer
-     *             supported.
-     */
-
-    public static final String SERVICE_NAME_PATTERN = EXTENDED_PROPERTY_NAME_PATTERN;
-    
-    /** @since 3.0 */
-
-    public static final String TAPESTRY_DTD_3_0_PUBLIC_ID = "-//Apache Software Foundation//Tapestry Specification 3.0//EN";
-
-    /** @since 4.0 */
-
-    public static final String TAPESTRY_DTD_4_0_PUBLIC_ID = "-//Apache Software Foundation//Tapestry Specification 4.0//EN";
-
-    /** @since 4.1 */
-    
-    public static final String TAPESTRY_DTD_4_1_PUBLIC_ID = "-//Apache Software Foundation//Tapestry Specification 4.1//EN";
-    
-    private static final int STATE_ALLOW_DESCRIPTION = 2000;
-
-    private static final int STATE_ALLOW_PROPERTY = 2001;
-
-    private static final int STATE_APPLICATION_SPECIFICATION_INITIAL = 1002;
-
-    private static final int STATE_BEAN = 4;
-
-    /** Very different between 3.0 and 4.0 DTD. */
-
-    private static final int STATE_BINDING_3_0 = 7;
-
-    /** @since 4.0 */
-
-    private static final int STATE_BINDING = 100;
-
-    private static final int STATE_COMPONENT = 6;
-
-    private static final int STATE_COMPONENT_SPECIFICATION = 1;
-
-    private static final int STATE_COMPONENT_SPECIFICATION_INITIAL = 1000;
-
-    private static final int STATE_CONFIGURE = 14;
-
-    private static final int STATE_DESCRIPTION = 2;
-
-    private static final int STATE_EXTENSION = 13;
-
-    private static final int STATE_LIBRARY_SPECIFICATION = 12;
-
-    private static final int STATE_LIBRARY_SPECIFICATION_INITIAL = 1003;
-
-    private static final int STATE_LISTENER_BINDING = 8;
-
-    private static final int STATE_NO_CONTENT = 3000;
-
-    private static final int STATE_PAGE_SPECIFICATION = 11;
-
-    private static final int STATE_PAGE_SPECIFICATION_INITIAL = 1001;
-
-    private static final int STATE_META = 3;
-
-    private static final int STATE_PROPERTY = 10;
-
-    private static final int STATE_SET = 5;
-
-    /** 3.0 DTD only. */
-    private static final int STATE_STATIC_BINDING = 9;
-    
-    /**
-     * We can share a single map for all the XML attribute to object conversions, since the keys are
-     * unique.
-     */
-
-    private final Map _conversionMap = new HashMap();
-
-    /** @since 4.0 */
-    private final Log _log;
-
-    /** @since 4.0 */
-    private final ErrorHandler _errorHandler;
-
-    /**
-     * Set to true if parsing the 4.0 DTD.
-     * 
-     * @since 4.0
-     */
-
-    private boolean _dtd40;
-
-    /**
-     * The attributes of the current element, as a map (string keyed on string).
-     */
-
-    private Map _attributes;
-
-    /**
-     * The name of the current element.
-     */
-
-    private String _elementName;
-
-    /** @since 1.0.9 */
-
-    private final SpecFactory _factory;
-
-    private RegexpMatcher _matcher = new RegexpMatcher();
-
-    private SAXParser _parser;
-
-    private SAXParserFactory _parserFactory = SAXParserFactory.newInstance();
-
-    /**
-     * @since 3.0
-     */
-
-    private final ClassResolver _resolver;
-
-    /** @since 4.0 */
-
-    private BindingSource _bindingSource;
-
-    /**
-     * The root object parsed: a component or page specification, a library specification, or an
-     * application specification.
-     */
-    private Object _rootObject;
-
-    /** @since 4.0 */
-
-    private ValueConverter _valueConverter;
-
-    // Identify all the different acceptible values.
-    // We continue to sneak by with a single map because
-    // there aren't conflicts; when we have 'foo' meaning
-    // different things in different places in the DTD, we'll
-    // need multiple maps.
-
-    {
-
-        _conversionMap.put("true", Boolean.TRUE);
-        _conversionMap.put("t", Boolean.TRUE);
-        _conversionMap.put("1", Boolean.TRUE);
-        _conversionMap.put("y", Boolean.TRUE);
-        _conversionMap.put("yes", Boolean.TRUE);
-        _conversionMap.put("on", Boolean.TRUE);
-        _conversionMap.put("aye", Boolean.TRUE);
-
-        _conversionMap.put("false", Boolean.FALSE);
-        _conversionMap.put("f", Boolean.FALSE);
-        _conversionMap.put("0", Boolean.FALSE);
-        _conversionMap.put("off", Boolean.FALSE);
-        _conversionMap.put("no", Boolean.FALSE);
-        _conversionMap.put("n", Boolean.FALSE);
-        _conversionMap.put("nay", Boolean.FALSE);
-
-        _conversionMap.put("none", BeanLifecycle.NONE);
-        _conversionMap.put("request", BeanLifecycle.REQUEST);
-        _conversionMap.put("page", BeanLifecycle.PAGE);
-        _conversionMap.put("render", BeanLifecycle.RENDER);
-
-        _parserFactory.setNamespaceAware(false);
-        _parserFactory.setValidating(true);
-    }
-
-    /**
-     * This constructor is a convienience used by some tests.
-     */
-    public SpecificationParser(ClassResolver resolver)
-    {
-        this(new DefaultErrorHandler(), LogFactory.getLog(SpecificationParser.class), 
-                resolver, new SpecFactory());
-    }
-
-    /**
-     * The full constructor, used within Tapestry.
-     */
-    public SpecificationParser(ErrorHandler errorHandler, Log log, ClassResolver resolver,
-            SpecFactory factory)
-    {
-        _errorHandler = errorHandler;
-        _log = log;
-        _resolver = resolver;
-        _factory = factory;
-    }
-
-    protected void begin(String elementName, Map attributes)
-    {
-        _elementName = elementName;
-        _attributes = attributes;
-
-        switch (getState())
-        {
-            case STATE_COMPONENT_SPECIFICATION_INITIAL:
-
-                beginComponentSpecificationInitial();
-                break;
-
-            case STATE_PAGE_SPECIFICATION_INITIAL:
-
-                beginPageSpecificationInitial();
-                break;
-
-            case STATE_APPLICATION_SPECIFICATION_INITIAL:
-
-                beginApplicationSpecificationInitial();
-                break;
-
-            case STATE_LIBRARY_SPECIFICATION_INITIAL:
-
-                beginLibrarySpecificationInitial();
-                break;
-
-            case STATE_COMPONENT_SPECIFICATION:
-
-                beginComponentSpecification();
-                break;
-
-            case STATE_PAGE_SPECIFICATION:
-
-                beginPageSpecification();
-                break;
-
-            case STATE_ALLOW_DESCRIPTION:
-
-                beginAllowDescription();
-                break;
-
-            case STATE_ALLOW_PROPERTY:
-
-                allowMetaData();
-                break;
-
-            case STATE_BEAN:
-
-                beginBean();
-                break;
-
-            case STATE_COMPONENT:
-
-                beginComponent();
-                break;
-
-            case STATE_LIBRARY_SPECIFICATION:
-
-                beginLibrarySpecification();
-                break;
-
-            case STATE_EXTENSION:
-
-                beginExtension();
-                break;
-
-            default:
-
-                unexpectedElement(_elementName);
-        }
-    }
-
-    /**
-     * Special state for a number of specification types that can support the &lt;description&gt;
-     * element.
-     */
-
-    private void beginAllowDescription()
-    {
-        if (_elementName.equals("description"))
-        {
-            enterDescription();
-            return;
-        }
-
-        unexpectedElement(_elementName);
-    }
-
-    /**
-     * Special state for a number of elements that can support the nested &lt;meta&gt; meta data
-     * element (&lt;property&gt; in 3.0 DTD).
-     */
-
-    private void allowMetaData()
-    {
-        if (_dtd40)
-        {
-            if (_elementName.equals("meta"))
-            {
-                enterMeta();
-                return;
-            }
-        }
-        else if (_elementName.equals("property"))
-        {
-            enterProperty30();
-            return;
-        }
-
-        unexpectedElement(_elementName);
-    }
-
-    private void beginApplicationSpecificationInitial()
-    {
-        expectElement("application");
-
-        String name = getAttribute("name");
-        String engineClassName = getAttribute("engine-class");
-
-        IApplicationSpecification as = _factory.createApplicationSpecification();
-
-        as.setName(name);
-
-        if (HiveMind.isNonBlank(engineClassName))
-            as.setEngineClassName(engineClassName);
-
-        _rootObject = as;
-
-        push(_elementName, as, STATE_LIBRARY_SPECIFICATION);
-    }
-
-    private void beginBean()
-    {
-        if (_elementName.equals("set"))
-        {
-            enterSet();
-            return;
-        }
-
-        if (_elementName.equals("set-property"))
-        {
-            enterSetProperty30();
-            return;
-        }
-
-        if (_elementName.equals("set-message-property"))
-        {
-            enterSetMessage30();
-            return;
-        }
-
-        if (_elementName.equals("description"))
-        {
-            enterDescription();
-            return;
-        }
-
-        allowMetaData();
-    }
-
-    private void beginComponent()
-    {
-        // <binding> has changed between 3.0 and 4.0
-
-        if (_elementName.equals("binding"))
-        {
-            enterBinding();
-            return;
-        }
-
-        if (_elementName.equals("static-binding"))
-        {
-            enterStaticBinding30();
-            return;
-        }
-
-        if (_elementName.equals("message-binding"))
-        {
-            enterMessageBinding30();
-            return;
-        }
-
-        if (_elementName.equals("inherited-binding"))
-        {
-            enterInheritedBinding30();
-            return;
-        }
-
-        if (_elementName.equals("listener-binding"))
-        {
-            enterListenerBinding();
-            return;
-        }
-
-        allowMetaData();
-    }
-
-    private void beginComponentSpecification()
-    {
-        if (_elementName.equals("reserved-parameter"))
-        {
-            enterReservedParameter();
-            return;
-        }
-
-        if (_elementName.equals("parameter"))
-        {
-            enterParameter();
-            return;
-        }
-
-        // The remainder are common to both <component-specification> and
-        // <page-specification>
-
-        beginPageSpecification();
-    }
-
-    private void beginComponentSpecificationInitial()
-    {
-        expectElement("component-specification");
-
-        IComponentSpecification cs = _factory.createComponentSpecification();
-
-        cs.setAllowBody(getBooleanAttribute("allow-body", true));
-        cs.setAllowInformalParameters(getBooleanAttribute("allow-informal-parameters", true));
-        cs.setDeprecated(getBooleanAttribute("deprecated", false));
-
-        String className = getAttribute("class");
-
-        if (className != null)
-            cs.setComponentClassName(className);
-
-        cs.setSpecificationLocation(getResource());
-
-        _rootObject = cs;
-
-        push(_elementName, cs, STATE_COMPONENT_SPECIFICATION);
-    }
-
-    private void beginExtension()
-    {
-        if (_elementName.equals("configure"))
-        {
-            enterConfigure();
-            return;
-        }
-
-        allowMetaData();
-    }
-
-    private void beginLibrarySpecification()
-    {
-        if (_elementName.equals("description"))
-        {
-            enterDescription();
-            return;
-        }
-
-        if (_elementName.equals("page"))
-        {
-            enterPage();
-            return;
-        }
-
-        if (_elementName.equals("component-type"))
-        {
-            enterComponentType();
-            return;
-        }
-
-        // Holdover from the 3.0 DTD, now ignored.
-
-        if (_elementName.equals("service"))
-        {
-            enterService30();
-            return;
-        }
-
-        if (_elementName.equals("library"))
-        {
-            enterLibrary();
-            return;
-        }
-
-        if (_elementName.equals("extension"))
-        {
-            enterExtension();
-            return;
-        }
-
-        allowMetaData();
-    }
-
-    private void beginLibrarySpecificationInitial()
-    {
-        expectElement("library-specification");
-
-        ILibrarySpecification ls = _factory.createLibrarySpecification();
-
-        _rootObject = ls;
-
-        push(_elementName, ls, STATE_LIBRARY_SPECIFICATION);
-    }
-
-    private void beginPageSpecification()
-    {
-        if (_elementName.equals("component"))
-        {
-            enterComponent();
-            return;
-        }
-
-        if (_elementName.equals("bean"))
-        {
-            enterBean();
-            return;
-        }
-
-        // <property-specification> in 3.0, <property> in 4.0
-        // Have to be careful, because <meta> in 4.0 was <property> in 3.0
-
-        if (_elementName.equals("property-specification")
-                || (_dtd40 && _elementName.equals("property")))
-        {
-            enterProperty();
-            return;
-        }
-
-        if (_elementName.equals("inject"))
-        {
-            enterInject();
-            return;
-        }
-
-        // <asset> is new in 4.0
-
-        if (_elementName.equals("asset"))
-        {
-            enterAsset();
-            return;
-        }
-
-        // <context-asset>, <external-asset>, and <private-asset>
-        // are all throwbacks to the 3.0 DTD and don't exist
-        // in the 4.0 DTD.
-
-        if (_elementName.equals("context-asset"))
-        {
-            enterContextAsset30();
-            return;
-        }
-
-        if (_elementName.equals("private-asset"))
-        {
-            enterPrivateAsset30();
-            return;
-        }
-
-        if (_elementName.equals("external-asset"))
-        {
-            enterExternalAsset30();
-            return;
-
-        }
-
-        if (_elementName.equals("description"))
-        {
-            enterDescription();
-            return;
-        }
-
-        allowMetaData();
-    }
-
-    private void beginPageSpecificationInitial()
-    {
-        expectElement("page-specification");
-
-        IComponentSpecification cs = _factory.createComponentSpecification();
-
-        String className = getAttribute("class");
-
-        if (className != null)
-            cs.setComponentClassName(className);
-
-        cs.setSpecificationLocation(getResource());
-        cs.setPageSpecification(true);
-
-        _rootObject = cs;
-
-        push(_elementName, cs, STATE_PAGE_SPECIFICATION);
-    }
-
-    /**
-     * Close a stream (if not null), ignoring any errors.
-     */
-    private void close(InputStream stream)
-    {
-        try
-        {
-            if (stream != null)
-                stream.close();
-        }
-        catch (IOException ex)
-        {
-            // ignore
-        }
-    }
-
-    private void copyBindings(String sourceComponentId, IComponentSpecification cs,
-            IContainedComponent target)
-    {
-        IContainedComponent source = cs.getComponent(sourceComponentId);
-        if (source == null)
-            throw new DocumentParseException(ParseMessages.unableToCopy(sourceComponentId),
-                    getLocation());
-
-        Iterator i = source.getBindingNames().iterator();
-        while (i.hasNext())
-        {
-            String bindingName = (String) i.next();
-            IBindingSpecification binding = source.getBinding(bindingName);
-            target.setBinding(bindingName, binding);
-        }
-
-        target.setType(source.getType());
-    }
-
-    protected void end(String elementName)
-    {
-        _elementName = elementName;
-
-        switch (getState())
-        {
-            case STATE_DESCRIPTION:
-
-                endDescription();
-                break;
-
-            case STATE_META:
-
-                endProperty();
-                break;
-
-            case STATE_SET:
-
-                endSetProperty();
-                break;
-
-            case STATE_BINDING_3_0:
-
-                endBinding30();
-                break;
-
-            case STATE_BINDING:
-
-                endBinding();
-                break;
-
-            case STATE_STATIC_BINDING:
-
-                endStaticBinding();
-                break;
-
-            case STATE_PROPERTY:
-
-                endPropertySpecification();
-                break;
-
-            case STATE_LIBRARY_SPECIFICATION:
-
-                endLibrarySpecification();
-                break;
-
-            case STATE_CONFIGURE:
-
-                endConfigure();
-                break;
-
-            default:
-                break;
-        }
-
-        // Pop the top element of the stack and continue processing from there.
-
-        pop();
-    }
-
-    private void endBinding30()
-    {
-        BindingSetter bs = (BindingSetter) peekObject();
-
-        String expression = getExtendedValue(bs.getValue(), "expression", true);
-
-        IBindingSpecification spec = _factory.createBindingSpecification();
-
-        spec.setType(BindingType.PREFIXED);
-        spec.setValue(BindingConstants.OGNL_PREFIX + ":" + expression);
-
-        bs.apply(spec);
-    }
-
-    private void endConfigure()
-    {
-        ExtensionConfigurationSetter setter = (ExtensionConfigurationSetter) peekObject();
-
-        String finalValue = getExtendedValue(setter.getValue(), "value", true);
-
-        setter.apply(finalValue);
-    }
-
-    private void endDescription()
-    {
-        DescriptionSetter setter = (DescriptionSetter) peekObject();
-
-        String description = peekContent();
-
-        setter.apply(description);
-    }
-
-    private void endLibrarySpecification()
-    {
-        ILibrarySpecification spec = (ILibrarySpecification) peekObject();
-
-        spec.setSpecificationLocation(getResource());
-
-        spec.instantiateImmediateExtensions();
-    }
-
-    private void endProperty()
-    {
-        PropertyValueSetter pvs = (PropertyValueSetter) peekObject();
-
-        String finalValue = getExtendedValue(pvs.getPropertyValue(), "value", true);
-
-        pvs.applyValue(finalValue);
-    }
-
-    private void endPropertySpecification()
-    {
-        IPropertySpecification ps = (IPropertySpecification) peekObject();
-
-        String initialValue = getExtendedValue(ps.getInitialValue(), "initial-value", false);
-
-        // In the 3.0 DTD, the initial value was always an OGNL expression.
-        // In the 4.0 DTD, it is a binding reference, qualified with a prefix.
-
-        if (initialValue != null && !_dtd40)
-            initialValue = BindingConstants.OGNL_PREFIX + ":" + initialValue;
-
-        ps.setInitialValue(initialValue);
-    }
-
-    private void endSetProperty()
-    {
-        BeanSetPropertySetter bs = (BeanSetPropertySetter) peekObject();
-
-        String finalValue = getExtendedValue(bs.getBindingReference(), "expression", true);
-
-        bs.applyBindingReference(finalValue);
-    }
-
-    private void endStaticBinding()
-    {
-        BindingSetter bs = (BindingSetter) peekObject();
-
-        String literalValue = getExtendedValue(bs.getValue(), "value", true);
-
-        IBindingSpecification spec = _factory.createBindingSpecification();
-
-        spec.setType(BindingType.PREFIXED);
-        spec.setValue(BindingConstants.LITERAL_PREFIX + ":" + literalValue);
-
-        bs.apply(spec);
-    }
-
-    private void enterAsset(String pathAttributeName, String prefix)
-    {
-        String name = getValidatedAttribute("name", ASSET_NAME_PATTERN, "invalid-asset-name");
-        String path = getAttribute(pathAttributeName);
-        String propertyName = getValidatedAttribute(
-                "property",
-                PROPERTY_NAME_PATTERN,
-                "invalid-property-name");
-
-        IAssetSpecification ia = _factory.createAssetSpecification();
-
-        ia.setPath(prefix == null ? path : prefix + path);
-        ia.setPropertyName(propertyName);
-
-        IComponentSpecification cs = (IComponentSpecification) peekObject();
-
-        cs.addAsset(name, ia);
-
-        push(_elementName, ia, STATE_ALLOW_PROPERTY);
-    }
-
-    private void enterBean()
-    {
-        String name = getValidatedAttribute("name", BEAN_NAME_PATTERN, "invalid-bean-name");
-
-        String classAttribute = getAttribute("class");
-
-        // Look for the lightweight initialization
-
-        int commax = classAttribute.indexOf(',');
-
-        String className = commax < 0 ? classAttribute : classAttribute.substring(0, commax);
-
-        BeanLifecycle lifecycle = (BeanLifecycle) getConvertedAttribute(
-                "lifecycle",
-                BeanLifecycle.REQUEST);
-        String propertyName = getValidatedAttribute(
-                "property",
-                PROPERTY_NAME_PATTERN,
-                "invalid-property-name");
-
-        IBeanSpecification bs = _factory.createBeanSpecification();
-
-        bs.setClassName(className);
-        bs.setLifecycle(lifecycle);
-        bs.setPropertyName(propertyName);
-
-        if (commax > 0)
-        {
-            String initializer = classAttribute.substring(commax + 1);
-            bs.addInitializer(new LightweightBeanInitializer(initializer));
-        }
-
-        IComponentSpecification cs = (IComponentSpecification) peekObject();
-
-        cs.addBeanSpecification(name, bs);
-
-        push(_elementName, bs, STATE_BEAN);
-    }
-
-    private void enterBinding()
-    {
-        if (!_dtd40)
-        {
-            enterBinding30();
-            return;
-        }
-
-        // 4.0 stuff
-
-        String name = getValidatedAttribute(
-                "name",
-                PARAMETER_NAME_PATTERN,
-                "invalid-parameter-name");
-        String value = getAttribute("value");
-
-        IContainedComponent cc = (IContainedComponent) peekObject();
-
-        BindingSetter bs = new BindingSetter(cc, name, value);
-
-        push(_elementName, bs, STATE_BINDING, false);
-    }
-
-    private void endBinding()
-    {
-        BindingSetter bs = (BindingSetter) peekObject();
-
-        String value = getExtendedValue(bs.getValue(), "value", true);
-
-        IBindingSpecification spec = _factory.createBindingSpecification();
-
-        spec.setType(BindingType.PREFIXED);
-        spec.setValue(value);
-
-        bs.apply(spec);
-    }
-
-    /**
-     * Handles a binding in a 3.0 DTD.
-     */
-
-    private void enterBinding30()
-    {
-        String name = getAttribute("name");
-        String expression = getAttribute("expression");
-
-        IContainedComponent cc = (IContainedComponent) peekObject();
-
-        BindingSetter bs = new BindingSetter(cc, name, expression);
-
-        push(_elementName, bs, STATE_BINDING_3_0, false);
-    }
-
-    private void enterComponent()
-    {
-        String id = getValidatedAttribute("id", COMPONENT_ID_PATTERN, "invalid-component-id");
-
-        String type = getValidatedAttribute(
-                "type",
-                COMPONENT_TYPE_PATTERN,
-                "invalid-component-type");
-        String copyOf = getAttribute("copy-of");
-        boolean inherit = getBooleanAttribute("inherit-informal-parameters", false);
-        String propertyName = getValidatedAttribute(
-                "property",
-                PROPERTY_NAME_PATTERN,
-                "invalid-property-name");
-
-        // Check that either copy-of or type, but not both
-
-        boolean hasCopyOf = HiveMind.isNonBlank(copyOf);
-
-        if (hasCopyOf)
-        {
-            if (HiveMind.isNonBlank(type))
-                throw new DocumentParseException(ParseMessages.bothTypeAndCopyOf(id), getLocation());
-        }
-        else
-        {
-            if (HiveMind.isBlank(type))
-                throw new DocumentParseException(ParseMessages.missingTypeOrCopyOf(id),
-                        getLocation());
-        }
-
-        IContainedComponent cc = _factory.createContainedComponent();
-        cc.setType(type);
-        cc.setCopyOf(copyOf);
-        cc.setInheritInformalParameters(inherit);
-        cc.setPropertyName(propertyName);
-
-        IComponentSpecification cs = (IComponentSpecification) peekObject();
-
-        cs.addComponent(id, cc);
-
-        if (hasCopyOf)
-            copyBindings(copyOf, cs, cc);
-
-        push(_elementName, cc, STATE_COMPONENT);
-    }
-
-    private void enterComponentType()
-    {
-        String type = getValidatedAttribute(
-                "type",
-                COMPONENT_ALIAS_PATTERN,
-                "invalid-component-type");
-        String path = getAttribute("specification-path");
-
-        ILibrarySpecification ls = (ILibrarySpecification) peekObject();
-
-        ls.setComponentSpecificationPath(type, path);
-
-        push(_elementName, null, STATE_NO_CONTENT);
-    }
-
-    private void enterConfigure()
-    {
-        String attributeName = _dtd40 ? "property" : "property-name";
-
-        String propertyName = getValidatedAttribute(
-                attributeName,
-                PROPERTY_NAME_PATTERN,
-                "invalid-property-name");
-
-        String value = getAttribute("value");
-
-        IExtensionSpecification es = (IExtensionSpecification) peekObject();
-
-        ExtensionConfigurationSetter setter = new ExtensionConfigurationSetter(es, propertyName,
-                value);
-
-        push(_elementName, setter, STATE_CONFIGURE, false);
-    }
-
-    private void enterContextAsset30()
-    {
-        enterAsset("path", "context:");
-    }
-
-    /**
-     * New in the 4.0 DTD. When using the 4.0 DTD, you must explicitly specify prefix if the asset
-     * is not stored in the same domain as the specification file.
-     * 
-     * @since 4.0
-     */
-
-    private void enterAsset()
-    {
-        enterAsset("path", null);
-    }
-
-    private void enterDescription()
-    {
-        push(_elementName, new DescriptionSetter(peekObject()), STATE_DESCRIPTION, false);
-    }
-
-    private void enterExtension()
-    {
-        String name = getValidatedAttribute(
-                "name",
-                EXTENSION_NAME_PATTERN,
-                "invalid-extension-name");
-
-        boolean immediate = getBooleanAttribute("immediate", false);
-        String className = getAttribute("class");
-
-        IExtensionSpecification es = _factory.createExtensionSpecification(
-                _resolver,
-                _valueConverter);
-
-        es.setClassName(className);
-        es.setImmediate(immediate);
-
-        ILibrarySpecification ls = (ILibrarySpecification) peekObject();
-
-        ls.addExtensionSpecification(name, es);
-
-        push(_elementName, es, STATE_EXTENSION);
-    }
-
-    private void enterExternalAsset30()
-    {
-        // External URLs get no prefix, but will have a scheme (i.e., "http:") that
-        // fulfils much the same purpose.
-
-        enterAsset("URL", null);
-    }
-
-    /** A throwback to the 3.0 DTD. */
-
-    private void enterInheritedBinding30()
-    {
-        String name = getAttribute("name");
-        String parameterName = getAttribute("parameter-name");
-
-        IBindingSpecification bs = _factory.createBindingSpecification();
-        bs.setType(BindingType.INHERITED);
-        bs.setValue(parameterName);
-
-        IContainedComponent cc = (IContainedComponent) peekObject();
-
-        cc.setBinding(name, bs);
-
-        push(_elementName, null, STATE_NO_CONTENT);
-    }
-
-    private void enterLibrary()
-    {
-        String libraryId = getValidatedAttribute("id", LIBRARY_ID_PATTERN, "invalid-library-id");
-        String path = getAttribute("specification-path");
-
-        if (libraryId.equals(INamespace.FRAMEWORK_NAMESPACE)
-                || libraryId.equals(INamespace.APPLICATION_NAMESPACE))
-            throw new DocumentParseException(ParseMessages
-                    .frameworkLibraryIdIsReserved(INamespace.FRAMEWORK_NAMESPACE), getLocation());
-
-        ILibrarySpecification ls = (ILibrarySpecification) peekObject();
-
-        ls.setLibrarySpecificationPath(libraryId, path);
-
-        push(_elementName, null, STATE_NO_CONTENT);
-    }
-
-    private void enterListenerBinding()
-    {
-        _log.warn(ParseMessages.listenerBindingUnsupported(getLocation()));
-
-        push(_elementName, null, STATE_LISTENER_BINDING, false);
-    }
-
-    private void enterMessageBinding30()
-    {
-        String name = getAttribute("name");
-        String key = getAttribute("key");
-
-        IBindingSpecification bs = _factory.createBindingSpecification();
-        bs.setType(BindingType.PREFIXED);
-        bs.setValue(BindingConstants.MESSAGE_PREFIX + ":" + key);
-        bs.setLocation(getLocation());
-
-        IContainedComponent cc = (IContainedComponent) peekObject();
-
-        cc.setBinding(name, bs);
-
-        push(_elementName, null, STATE_NO_CONTENT);
-    }
-
-    private void enterPage()
-    {
-        String name = getValidatedAttribute("name", PAGE_NAME_PATTERN, "invalid-page-name");
-        String path = getAttribute("specification-path");
-
-        ILibrarySpecification ls = (ILibrarySpecification) peekObject();
-
-        ls.setPageSpecificationPath(name, path);
-
-        push(_elementName, null, STATE_NO_CONTENT);
-    }
-
-    private void enterParameter()
-    {
-        IParameterSpecification ps = _factory.createParameterSpecification();
-
-        String name = getValidatedAttribute(
-                "name",
-                PARAMETER_NAME_PATTERN,
-                "invalid-parameter-name");
-
-        String attributeName = _dtd40 ? "property" : "property-name";
-
-        String propertyName = getValidatedAttribute(
-                attributeName,
-                PROPERTY_NAME_PATTERN,
-                "invalid-property-name");
-
-        if (propertyName == null)
-            propertyName = name;
-
-        ps.setParameterName(name);
-        ps.setPropertyName(propertyName);
-
-        ps.setRequired(getBooleanAttribute("required", false));
-
-        // In the 3.0 DTD, default-value was always an OGNL expression.
-        // Starting with 4.0, it's like a binding (prefixed). For a 3.0
-        // DTD, we supply the "ognl:" prefix.
-
-        String defaultValue = getAttribute("default-value");
-
-        if (defaultValue != null && !_dtd40)
-            defaultValue = BindingConstants.OGNL_PREFIX + ":" + defaultValue;
-
-        ps.setDefaultValue(defaultValue);
-
-        if (!_dtd40)
-        {
-            // When direction=auto (in a 3.0 DTD), turn caching off
-
-            String direction = getAttribute("direction");
-            ps.setCache(!"auto".equals(direction));
-        }
-        else
-        {
-            boolean cache = getBooleanAttribute("cache", true);
-            ps.setCache(cache);
-        }
-
-        // type will only be specified in a 3.0 DTD.
-
-        String type = getAttribute("type");
-
-        if (type != null)
-            ps.setType(type);
-
-        // aliases is new in the 4.0 DTD
-
-        String aliases = getAttribute("aliases");
-
-        ps.setAliases(aliases);
-        ps.setDeprecated(getBooleanAttribute("deprecated", false));
-
-        IComponentSpecification cs = (IComponentSpecification) peekObject();
-
-        cs.addParameter(ps);
-
-        push(_elementName, ps, STATE_ALLOW_DESCRIPTION);
-    }
-
-    private void enterPrivateAsset30()
-    {
-        enterAsset("resource-path", "classpath:");
-    }
-
-    /** @since 4.0 */
-    private void enterMeta()
-    {
-        String key = getAttribute("key");
-        String value = getAttribute("value");
-
-        // Value may be null, in which case the value is set from the element content
-
-        IPropertyHolder ph = (IPropertyHolder) peekObject();
-
-        push(_elementName, new PropertyValueSetter(ph, key, value), STATE_META, false);
-    }
-
-    private void enterProperty30()
-    {
-        String name = getAttribute("name");
-        String value = getAttribute("value");
-
-        // Value may be null, in which case the value is set from the element content
-
-        IPropertyHolder ph = (IPropertyHolder) peekObject();
-
-        push(_elementName, new PropertyValueSetter(ph, name, value), STATE_META, false);
-    }
-
-    /**
-     * &tl;property&gt; in 4.0, or &lt;property-specification&gt; in 3.0.
-     */
-
-    private void enterProperty()
-    {
-        String name = getValidatedAttribute("name", PROPERTY_NAME_PATTERN, "invalid-property-name");
-        String type = getAttribute("type");
-
-        String persistence = null;
-
-        if (_dtd40)
-            persistence = getAttribute("persist");
-        else
-            persistence = getBooleanAttribute("persistent", false) ? "session" : null;
-
-        String initialValue = getAttribute("initial-value");
-
-        IPropertySpecification ps = _factory.createPropertySpecification();
-        ps.setName(name);
-
-        if (HiveMind.isNonBlank(type))
-            ps.setType(type);
-
-        ps.setPersistence(persistence);
-        ps.setInitialValue(initialValue);
-
-        IComponentSpecification cs = (IComponentSpecification) peekObject();
-        cs.addPropertySpecification(ps);
-
-        push(_elementName, ps, STATE_PROPERTY, false);
-    }
-
-    /**
-     * @since 4.0
-     */
-
-    private void enterInject()
-    {
-        String property = getValidatedAttribute(
-                "property",
-                PROPERTY_NAME_PATTERN,
-                "invalid-property-name");
-        String type = getAttribute("type");
-        String objectReference = getAttribute("object");
-
-        InjectSpecification spec = _factory.createInjectSpecification();
-
-        spec.setProperty(property);
-        spec.setType(type);
-        spec.setObject(objectReference);
-        IComponentSpecification cs = (IComponentSpecification) peekObject();
-
-        cs.addInjectSpecification(spec);
-
-        push(_elementName, spec, STATE_NO_CONTENT);
-    }
-
-    private void enterReservedParameter()
-    {
-        String name = getAttribute("name");
-        IComponentSpecification cs = (IComponentSpecification) peekObject();
-
-        cs.addReservedParameterName(name);
-
-        push(_elementName, null, STATE_NO_CONTENT);
-    }
-
-    private void enterService30()
-    {
-        _errorHandler.error(_log, ParseMessages.serviceElementNotSupported(), getLocation(), null);
-
-        push(_elementName, null, STATE_NO_CONTENT);
-    }
-
-    private void enterSetMessage30()
-    {
-        String name = getAttribute("name");
-        String key = getAttribute("key");
-
-        BindingBeanInitializer bi = _factory.createBindingBeanInitializer(_bindingSource);
-
-        bi.setPropertyName(name);
-        bi.setBindingReference(BindingConstants.MESSAGE_PREFIX + ":" + key);
-        bi.setLocation(getLocation());
-
-        IBeanSpecification bs = (IBeanSpecification) peekObject();
-
-        bs.addInitializer(bi);
-
-        push(_elementName, null, STATE_NO_CONTENT);
-    }
-
-    private void enterSet()
-    {
-        String name = getAttribute("name");
-        String reference = getAttribute("value");
-
-        BindingBeanInitializer bi = _factory.createBindingBeanInitializer(_bindingSource);
-
-        bi.setPropertyName(name);
-
-        IBeanSpecification bs = (IBeanSpecification) peekObject();
-
-        push(_elementName, new BeanSetPropertySetter(bs, bi, null, reference), STATE_SET, false);
-    }
-
-    private void enterSetProperty30()
-    {
-        String name = getAttribute("name");
-        String expression = getAttribute("expression");
-
-        BindingBeanInitializer bi = _factory.createBindingBeanInitializer(_bindingSource);
-
-        bi.setPropertyName(name);
-
-        IBeanSpecification bs = (IBeanSpecification) peekObject();
-
-        push(_elementName, new BeanSetPropertySetter(bs, bi, BindingConstants.OGNL_PREFIX + ":",
-                expression), STATE_SET, false);
-    }
-
-    private void enterStaticBinding30()
-    {
-        String name = getAttribute("name");
-        String expression = getAttribute("value");
-
-        IContainedComponent cc = (IContainedComponent) peekObject();
-
-        BindingSetter bs = new BindingSetter(cc, name, expression);
-
-        push(_elementName, bs, STATE_STATIC_BINDING, false);
-    }
-
-    private void expectElement(String elementName)
-    {
-        if (_elementName.equals(elementName))
-            return;
-
-        throw new DocumentParseException(ParseMessages.incorrectDocumentType(
-                _elementName,
-                elementName), getLocation(), null);
-
-    }
-
-    private String getAttribute(String name)
-    {
-        return (String) _attributes.get(name);
-    }
-
-    private boolean getBooleanAttribute(String name, boolean defaultValue)
-    {
-        String value = getAttribute(name);
-
-        if (value == null)
-            return defaultValue;
-
-        Boolean b = (Boolean) _conversionMap.get(value);
-
-        return b.booleanValue();
-    }
-
-    private Object getConvertedAttribute(String name, Object defaultValue)
-    {
-        String key = getAttribute(name);
-
-        if (key == null)
-            return defaultValue;
-
-        return _conversionMap.get(key);
-    }
-
-    private InputSource getDTDInputSource(String name)
-    {
-        InputStream stream = getClass().getResourceAsStream(name);
-
-        return new InputSource(stream);
-    }
-
-    private String getExtendedValue(String attributeValue, String attributeName, boolean required)
-    {
-        String contentValue = peekContent();
-
-        boolean asAttribute = HiveMind.isNonBlank(attributeValue);
-        boolean asContent = HiveMind.isNonBlank(contentValue);
-
-        if (asAttribute && asContent)
-        {
-            throw new DocumentParseException(ParseMessages.noAttributeAndBody(
-                    attributeName,
-                    _elementName), getLocation(), null);
-        }
-
-        if (required && !(asAttribute || asContent))
-        {
-            throw new DocumentParseException(ParseMessages.requiredExtendedAttribute(
-                    _elementName,
-                    attributeName), getLocation(), null);
-        }
-
-        if (asAttribute)
-            return attributeValue;
-
-        return contentValue;
-    }
-
-    private String getValidatedAttribute(String name, String pattern, String errorKey)
-    {
-        String value = getAttribute(name);
-
-        if (value == null)
-            return null;
-
-        if (_matcher.matches(pattern, value))
-            return value;
-
-        throw new InvalidStringException(ParseMessages.invalidAttribute(errorKey, value), value,
-                getLocation());
-    }
-
-    protected void initializeParser(Resource resource, int startState)
-    {
-        super.initializeParser(resource, startState);
-
-        _rootObject = null;
-        _attributes = new HashMap();
-    }
-
-    public IApplicationSpecification parseApplicationSpecification(Resource resource)
-    {
-        initializeParser(resource, STATE_APPLICATION_SPECIFICATION_INITIAL);
-
-        try
-        {
-            parseDocument();
-
-            return (IApplicationSpecification) _rootObject;
-        }
-        finally
-        {
-            resetParser();
-        }
-    }
-
-    public IComponentSpecification parseComponentSpecification(Resource resource)
-    {
-        initializeParser(resource, STATE_COMPONENT_SPECIFICATION_INITIAL);
-
-        try
-        {
-            parseDocument();
-
-            return (IComponentSpecification) _rootObject;
-        }
-        finally
-        {
-            resetParser();
-        }
-    }
-
-    private void parseDocument()
-    {
-        InputStream stream = null;
-
-        Resource resource = getResource();
-
-        boolean success = false;
-
-        try
-        {
-            if (_parser == null)
-                _parser = _parserFactory.newSAXParser();
-
-            URL resourceURL = resource.getResourceURL();
-
-            if (resourceURL == null)
-                throw new DocumentParseException(ParseMessages.missingResource(resource), resource);
-
-            InputStream rawStream = resourceURL.openStream();
-            stream = new BufferedInputStream(rawStream);
-
-            _parser.parse(stream, this, resourceURL.toExternalForm());
-
-            stream.close();
-            stream = null;
-
-            success = true;
-        }
-        catch (SAXParseException ex)
-        {
-            _parser = null;
-
-            Location location = new LocationImpl(resource, ex.getLineNumber(), ex.getColumnNumber());
-
-            throw new DocumentParseException(ParseMessages.errorReadingResource(resource, ex),
-                    location, ex);
-        }
-        catch (Exception ex)
-        {
-            _parser = null;
-
-            throw new DocumentParseException(ParseMessages.errorReadingResource(resource, ex),
-                    resource, ex);
-        }
-        finally
-        {
-            if (!success)
-                _parser = null;
-
-            close(stream);
-        }
-    }
-
-    public ILibrarySpecification parseLibrarySpecification(Resource resource)
-    {
-        initializeParser(resource, STATE_LIBRARY_SPECIFICATION_INITIAL);
-
-        try
-        {
-            parseDocument();
-
-            return (ILibrarySpecification) _rootObject;
-        }
-        finally
-        {
-            resetParser();
-        }
-    }
-
-    public IComponentSpecification parsePageSpecification(Resource resource)
-    {
-        initializeParser(resource, STATE_PAGE_SPECIFICATION_INITIAL);
-
-        try
-        {
-            parseDocument();
-
-            return (IComponentSpecification) _rootObject;
-        }
-        finally
-        {
-            resetParser();
-        }
-    }
-
-    protected String peekContent()
-    {
-        String content = super.peekContent();
-
-        if (content == null)
-            return null;
-
-        return content.trim();
-    }
-
-    protected void resetParser()
-    {
-        _rootObject = null;
-        _dtd40 = false;
-
-        _attributes.clear();
-    }
-
-    /**
-     * Resolved an external entity, which is assumed to be the doctype. Might need a check to ensure
-     * that specs without a doctype fail.
-     */
-    public InputSource resolveEntity(String publicId, String systemId) throws SAXException
-    {
-        if (TAPESTRY_DTD_4_0_PUBLIC_ID.equals(publicId))
-        {
-            _dtd40 = true;
-            return getDTDInputSource("Tapestry_4_0.dtd");
-        }
-
-        if (TAPESTRY_DTD_4_1_PUBLIC_ID.equals(publicId)) 
-        {
-            _dtd40 = true;
-            return getDTDInputSource("Tapestry_4_1.dtd");
-        }
-        
-        if (TAPESTRY_DTD_3_0_PUBLIC_ID.equals(publicId))
-            return getDTDInputSource("Tapestry_3_0.dtd");
-
-        throw new DocumentParseException(ParseMessages.unknownPublicId(getResource(), publicId),
-                new LocationImpl(getResource()), null);
-    }
-
-    /** @since 4.0 */
-    public void setBindingSource(BindingSource bindingSource)
-    {
-        _bindingSource = bindingSource;
-    }
-
-    /** @since 4.0 */
-    public void setValueConverter(ValueConverter valueConverter)
-    {
-        _valueConverter = valueConverter;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_1_3.dtd b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_1_3.dtd
deleted file mode 100644
index e01c5ab..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_1_3.dtd
+++ /dev/null
@@ -1,548 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-The DTD for Tapestry application, page and component specifications.
-Associated with the public identifier:
-
-	-//Howard Lewis Ship//Tapestry Specification 1.3//EN
-	
-The canonical location for the DTD is:
-
-	http://tapestry.sf.net/dtd/Tapestry_1_3.dtd
-
-For application specifications, the root element is application.
-
-For component specifications, the root element is component-specification.
-
-For page specifications, the root element is page-specification.
-
-For library specifiations, the root element is library-specification.
-
-This DTD is backwards compatible with the 1.2 DTD, with the following exceptions:
-- specification (in 1.1) has been split into page-specification and component-specification
-- added string-value element
-- added library-specification root element
-- added library element
-- added extension element
-- added static value type 'long'
-- allow <property> within <bean>, <component>, <extension>, <private-asset>, <context-asset> and <external-asset>
-- add "render" to bean lifecycle value
-- rename <binding>'s property-path attribute to expression
-- simplify set-property to use OGNL expressions
-- add "form" as parameter direction
--->
-
-<!-- =======================================================
-Entity: attribute-flag
-
-For entity attributesthat take a boolean value, defines 'yes' and 'no'.
-The default varies, so isn't included here.
--->
-<!ENTITY % attribute-flag "(yes|no)">
-
-
-<!-- =======================================================
-Entity: static-value-type
-
-For entity attributes that take a string but convert it to a real
-type.  Defaults to String.
-
--->
-<!ENTITY % static-value-type "(boolean|int|long|double|String) 'String'">
-
-<!ENTITY % library-content "(description*, property*, (page|component-alias|service|library|extension)*)">
-
-<!-- =======================================================
-Element: application
-Root element
-
-Defines a Tapestry application.
-
-Attributes:
-  name: A textual name used to uniquely identify the application.
-  engine-class:  The Java class to instantiate as the application engine.
--->
-<!ELEMENT application %library-content;>
-<!ATTLIST application
-  name CDATA #REQUIRED
-  engine-class CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: bean
-Appears in: component-specification, page-specification
-
-Defines a JavaBean that will be used in some way by the component.  Beans
-are accessible via the components' beans property (which contains a property
-for each bean).  Beans are created as needed, and are discarded based on
-the lifecycle attribute.  Beans are typically used to extend the
-implementation of a component via aggregation.
-
-Attributes:
-  name: the name of the bean
-  class: the Java class to instantiate
-  lifecycle: when the reference to the bean should be discard
-  	"none" no lifecycle, the bean is created and returned, but not stored
-  	"request" the bean is retained until the end of the request cycle
-  	"page" the bean is retained for the lifespan of the page
-  	"render" the bean is retained until the end of the current page render
-  	
-Nothing prevents a bean for storing state; however, such state will
-not be associated with any particular session (unlike persistant page
-properties).  Further, because of page pooling, subsequent requests
-from the same client may be serviced by different instances of a page and
-(therefore) different bean instances.
-
-Beans that have the "request" lifecycle may be stored into a pool
-for later re-use (in the same or different page).
-
-The bean may have its properties set.  Properties are set on both
-newly instantiated beans, and beans that are retrieved from a pool.
-
--->
-<!ELEMENT bean (description*, property*, (set-property | set-string-property)*)>
-<!ATTLIST bean
-  name CDATA #REQUIRED
-  class CDATA #REQUIRED
-  lifecycle (none|request|page|render) "request"
->
-
-<!-- =======================================================
-Element: binding
-Appears in: component
-
-Binds a parameter of the component to a property of its container.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  expression: The OGNL expression.
--->
-<!ELEMENT binding EMPTY>
-<!ATTLIST binding
-  name CDATA #REQUIRED
-  expression CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: configure
-Appears in: extension
-
-Configures one JavaBean property of an extension.
-
-Attributes:
-  property-name:  The name of the property to configure.
-  type: Conversion of property value.
-  
- 
--->
-
-<!ELEMENT configure (#PCDATA)>
-<!ATTLIST configure 
-  property-name CDATA #REQUIRED
-  type %static-value-type;
->
-  
-<!-- =======================================================
-Element: component
-Contained by: component-specification, page-specification
-
-Defines a component contained by the component being specified.
-
-Attribute:
-  id: A unique identifier for the component within the container.
-  type: The type of component, either a well known logical name, or the complete path
-    to the component's specification.
-  copy-of: The id of a previously defined component; this component will be a copy
-    of the other component.
-
-The Tapestry page loader ensures that either type or copy-of is specified, but not both.
--->
-<!ELEMENT component (property*, (binding | field-binding | inherited-binding | static-binding | string-binding)*)>
-<!ATTLIST component
-  id ID #REQUIRED
-  type CDATA #IMPLIED
-  copy-of IDREF #IMPLIED
->
-
-<!-- =======================================================
-Element: component-alias
-Contained by: application
-
-Establishes a short logic name for a particular component that is used
-within the application.
-
-Attributes:
-  type: The logical name for the component.
-  specification-path:  The complete path to the component's specification.
--->
-<!ELEMENT component-alias EMPTY>
-<!ATTLIST component-alias
-  type CDATA #REQUIRED
-  specification-path CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: component-specification
-Root element
-
-A component specification.  It's attributes define the Java class to
-instantiate, whether the component may wrap other elements, and whether
-informal (undeclared) parameters are allowed.  Very similar to a page-specification,
-except that component-specification allows for parameters (formal and informal).
-
-Attributes:
-  class: The Java class to instantiate for the component.
-  allow-body:  If yes (the default), the component may wrap other elements (have a body).
-  allow-informal-parameters:  If yes (the default), informal parameters (parameters that are not
-    explictily defined) are allowed.
--->
-<!ELEMENT component-specification 
-	(description*, parameter*, reserved-parameter*, property*,
-	(bean |	component | external-asset | context-asset | private-asset)*)>
-<!ATTLIST component-specification
-  class CDATA #REQUIRED
-  allow-body %attribute-flag; "yes"
-  allow-informal-parameters %attribute-flag; "yes"
->
-
-<!-- =======================================================
-Element: context-asset
-Contained by: component-specification, page-specification
-
-An asset located in the same web application context as the running
-application.
-
-Attributes:
-  name: The name of the asset.
-  path: The path, relative to the web application context, of the resource.
--->
-<!ELEMENT context-asset (property*)>
-<!ATTLIST context-asset
-  name CDATA #REQUIRED
-  path CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: description
-Appears in: many
-
-Several elements may contain descriptions; these descriptions are
-optional.  The eventual goal is to provide help in some form of IDE.
-Currently, descriptions are optional and ignored.
-
-Attributes:
-  xml:lang the language that the description is expressed in.
--->
-<!ELEMENT description (#PCDATA)>
-<!ATTLIST description
-  xml:lang NMTOKEN "en"
->
-
-<!-- =======================================================
-Element: extension
-Contained by: application, library-specification
-
-Defines an extension, an object that is instantiated and configured
-(like a helper bean) and is then accessible, by name, from the
-containing library (or application).
-
-Attributes:
-  name: Name of the extension.
-  class: Java class to instantiate.
-  immediate: If true, the extension is instantiated early instead of as-needed.
-  
--->
-<!ELEMENT extension (property*, configure*)>
-<!ATTLIST extension
-  name CDATA #REQUIRED
-  class CDATA #REQUIRED
-  immediate %attribute-flag; "no"
->
-
-<!-- =======================================================
-Element: external-asset
-Contained by: component-specification, page-specification
-
-Defines an asset at some external source.
-
-Attributes:
-  name: The name of the asset.
-  URL: The URL used to reference the asset.
--->
-<!ELEMENT external-asset (property*)>
-<!ATTLIST external-asset
-  name CDATA #REQUIRED
-  URL CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: field-binding
-Appears in: component
-
-Binds a parameter of the component to a public static field of
-some Java object.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  field-name:  The name of the field, of the form [package.]class.field.
-    The package may be ommitted if it is "java.lang".
--->
-<!ELEMENT field-binding EMPTY>
-<!ATTLIST field-binding
-  name CDATA #REQUIRED
-  field-name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: inherited-binding
-Appears in: component
-
-Binds a parameter of the component to a parameter of the container.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  parameter-name: The name of the container parameter to bind the
-    component parameter to.
--->
-<!ELEMENT inherited-binding EMPTY>
-<!ATTLIST inherited-binding
-  name CDATA #REQUIRED
-  parameter-name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: library
-Appears in: application-specification, library-specification
-
-Defines a library used in the construction of the container
-(either another library, or the application itself).
-
-Attributes:
-  id: An identifier used to reference pages and components
-    provided by the library.
-  specification-path: The path to the resource that provides
-    the library specification.
--->
-<!ELEMENT library EMPTY>
-<!ATTLIST library
-  id CDATA #REQUIRED
-  specification-path CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: library-specification
-Root element
-
-Defines a library that may be used in the construction 
-of an application (or another library).  An application can
-be thought of as a specialized kind of library.
-
--->
-<!ELEMENT library-specification %library-content;>
-
-<!-- =======================================================
-Element: page
-Contained by: application, library-specification
-
-Defines a single page within the application.  Each application will contain
-at least one of these, to define the Home page.
-
-Attributes:
-  name: A unique name for the application.
-  specification-path:  The resource classpath of the component specification
-    for the page.
--->
-<!ELEMENT page EMPTY>
-<!ATTLIST page
-  name CDATA #REQUIRED
-  specification-path CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: page-specification
-Root element
-
-A page specification.  It's attributes define the Java class to
-instantiate.  Pages are like components, except they always allow
-a body, and never allow parameters (formal or otherwise).
-
-Attributes:
-  class: The Java class to instantiate for the component.
--->
-<!ELEMENT page-specification (description*, property*,
-    (bean | component | external-asset | context-asset | private-asset)*)>
-<!ATTLIST page-specification
-  class CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: parameter
-Contained by: component-specification
-
-Defines a formal parameter for the component.
-
-Attributes:
-  name: A unqiue name for the parameter.
-  java-type: The name of a Java class or primitive type expected by the parameter.
-    This is for documentation purposes only, it is not enforced.
-  required: If yes, then the parameter must be bound.  If no (the default),
-    then the parameter is optional.
-  property-name: The name to use, instead of the parameter name, for the
-    JavaBean property connected to this parameter.
-  direction: The normal flow of data through the component.
--->
-
-<!ELEMENT parameter (description*)>
-<!ATTLIST parameter
-  name CDATA #REQUIRED
-  java-type CDATA #IMPLIED
-  required %attribute-flag; "no"
-  property-name CDATA #IMPLIED
-  direction (in|form|custom) "custom"
->
-
-<!-- =======================================================
-Element: private-asset
-Contained by: component-specification, page-specification
-
-An asset available within the Java classpath (i.e., bundled inside a JAR or WAR).
-
-Attributes:
-  name: The name of the asset.
-  resource-path: The complete pathname of the resource.
--->
-<!ELEMENT private-asset (property*)>
-<!ATTLIST private-asset
-  name CDATA #REQUIRED
-  resource-path CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: property
-Contained by: (many other elements)
-
-Defines a key/value pair associated with the application or component specification.  Properties
-are used to capture information that doesn't fit into the DTD.  The value for the property is
-the PCDATA wrapped by the property tag (which is trimmed of leading and trailing whitespace).
-
-This should not be confused with several other tags which are used to set JavaBeans properties
-of various objects.  The <property> tag exists to allow meta-data to be stored in the specification.
-
-Attributes:
-  name: The name of the property to set.
-  
--->
-<!ELEMENT property (#PCDATA)>
-<!ATTLIST property
-  name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: reserved-parameter
-Appears in: component-specification
-
-Identifies a name which may not be used as an informal parameter.
-Informal parameters are typically HTML attribute names; this
-list identifies HTML attributes that are written exclusively
-by the component and may not be affected by informal parameters.
-
-Attributes:
-  name: The parameter name to reserve.
--->
-
-<!ELEMENT reserved-parameter EMPTY>
-<!ATTLIST reserved-parameter
-  name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: service
-Appears in: application
-
-Defines an engine service.  You may override the default
-set of engine services or provide completely new services.
-
-Attributes:
-  name: The name of the service.
-  class: The Java class to instantiate for the service.
-
--->
-
-<!ELEMENT service EMPTY>
-<!ATTLIST service
-  name CDATA #REQUIRED
-  class CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: set-property
-Appears in: bean
-
-Used to initialize a property of a helper bean.
-
-Attributes:
-  name: The name of the property to be set.
-  expression: The OGNL expression that provides a value.
--->
-
-<!ELEMENT set-property EMPTY>
-<!ATTLIST set-property
-  name CDATA #REQUIRED
-  expression CDATA #REQUIRED
->
-
-
-<!-- =======================================================
-Element: set-string-property
-Appears in: bean
-
-A localized string.
-
-Attributes:
-  key:  Sets a property of a string from a localized string.
-
--->
-
-<!ELEMENT set-string-property EMPTY>
-<!ATTLIST set-string-property
-  name CDATA #REQUIRED
-  key CDATA #REQUIRED
->
-
-
-<!-- =======================================================
-Element: static-binding
-Appears in: component
-
-Binds a parameter of the component to a static value defined directly
-within this specification. The value is the PCDATA wrapped by the element
-(with leading and trailing whitespace removed).
-
-Attributes:
-  name: The name of the component parameter to bind.
-
--->
-<!ELEMENT static-binding (#PCDATA)>
-<!ATTLIST static-binding
-  name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: string-binding
-Appears in: component
-
-Binds a parameter of the component to a localized string of
-its container.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  key: The key used to access a localized string.
-  
--->
-
-<!ELEMENT string-binding EMPTY>
-<!ATTLIST string-binding
-  name CDATA #REQUIRED
-  key CDATA #REQUIRED
->
-
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_3_0.dtd b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_3_0.dtd
deleted file mode 100644
index 2a2bfad..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_3_0.dtd
+++ /dev/null
@@ -1,546 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-The DTD for Tapestry application, library, page and component specifications.
-Associated with the public identifier:
-
-	-//Apache Software Foundation//Tapestry Specification 3.0//EN
-	
-The canonical location for the DTD is:
-
-	http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd
-
-For application specifications, the root element is application.
-
-For component specifications, the root element is component-specification.
-
-For page specifications, the root element is page-specification.
-
-For library specifiations, the root element is library-specification.
-
-This DTD is backwards compatible with the 1.3 DTD, with the following exceptions:
-- <field-binding> has been removed
-- attribute class of <component-specification> and <page-specification is now optional
-- attributes name and engine-class of <application> are now optional
-- added value attribute to <static-binding>
-- added value attribute to <property>
-- renamed <component-alias> to <component-type>
-- rename <set-string-property> to <set-message-property>
-- added <listener-binding> element
-- added <property-specification> element
-- renamed java-type to type inside <parameter>
-- allow values to be specified as attributes or wrapped character data in many elements
-- allow only a single <description> per element
--->
-<!-- =======================================================
-Entity: attribute-flag
-
-For entity attributes that take a boolean value, defines 'yes' and 'no'.
-The default varies, so isn't included here.
--->
-<!ENTITY % attribute-flag "(yes|no)">
-<!-- =======================================================
-Entity: static-value-type
-
-For entity attributes that take a string but convert it to a real
-type.  Defaults to String.
-
--->
-<!ENTITY % static-value-type "(boolean|int|long|double|String) 'String'">
-<!ENTITY % library-content "(description?, property*, (page|component-type|service|library|extension)*)">
-<!-- =======================================================
-Element: application
-Root element
-
-Defines a Tapestry application.
-
-Attributes:
-  name: A textual name used to uniquely identify the application.
-  engine-class:  The Java class to instantiate as the application engine.
--->
-<!ELEMENT application %library-content;>
-<!ATTLIST application
-	name CDATA #IMPLIED
-	engine-class CDATA #IMPLIED
->
-<!-- =======================================================
-Element: bean
-Appears in: component-specification, page-specification
-
-Defines a JavaBean that will be used in some way by the component.  Beans
-are accessible via the components' beans property (which contains a property
-for each bean).  Beans are created as needed, and are discarded based on
-the lifecycle attribute.  Beans are typically used to extend the
-implementation of a component via aggregation.
-
-Attributes:
-  name: the name of the bean
-  class: the Java class to instantiate
-  lifecycle: when the reference to the bean should be discard
-  	"none" no lifecycle, the bean is created and returned, but not stored
-  	"request" the bean is retained until the end of the request cycle
-  	"page" the bean is retained for the lifespan of the page
-  	"render" the bean is retained until the end of the current page render
-  	
-Nothing prevents a bean for storing state; however, such state will
-not be associated with any particular session (unlike persistant page
-properties).  Further, because of page pooling, subsequent requests
-from the same client may be serviced by different instances of a page and
-(therefore) different bean instances.
-
-Beans that have the "request" lifecycle may be stored into a pool
-for later re-use (in the same or different page).
-
-The bean may have its properties set.  Properties are set on both
-newly instantiated beans, and beans that are retrieved from a pool.
-
--->
-<!ELEMENT bean (description?, property*, (set-property | set-message-property)*)>
-<!ATTLIST bean
-	name CDATA #REQUIRED
-	class CDATA #REQUIRED
-	lifecycle (none | request | page | render) "request"
->
-<!-- =======================================================
-Element: binding
-Appears in: component
-
-Binds a parameter of the component to a OGNL expression, relative
-to its container.  The expression may be provided as an attribute, or 
-as the body of the element.  The latter case is useful when the 
-expression is long, or uses problematic characters (such as a 
-mix of single and double quotes).
-
-Attributes:
-  name: The name of the component parameter to bind.
-  expression: The OGNL expression.
--->
-<!ELEMENT binding (#PCDATA)>
-<!ATTLIST binding
-	name CDATA #REQUIRED
-	expression CDATA #IMPLIED
->
-<!-- =======================================================
-Element: configure
-Appears in: extension
-
-Configures one JavaBean property of an extension.
-
-Attributes:
-  property-name:  The name of the property to configure.
-  type: Conversion of property value.
-  value: The value to be converted and applied.  If not 
-    specified, the element's character data is
-    used.  
- 
--->
-<!ELEMENT configure (#PCDATA)>
-<!ATTLIST configure
-	property-name CDATA #REQUIRED
-	type %static-value-type;
-	value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: component
-Contained by: component-specification, page-specification
-
-Defines a component contained by the component being specified.
-
-Attribute:
-  id: A unique identifier for the component within the container.
-  type: The type of component, either a well known logical name, or the complete path
-    to the component's specification.
-  copy-of: The id of a previously defined component; this component will be a copy
-    of the other component.
-
-The Tapestry page loader ensures that either type or copy-of is specified, but not both.
--->
-<!ELEMENT component (property*, (binding | inherited-binding | listener-binding | static-binding | message-binding)*)>
-<!ATTLIST component
-	id ID #REQUIRED
-	type CDATA #IMPLIED
-	copy-of IDREF #IMPLIED
-	inherit-informal-parameters %attribute-flag; "no"
->
-<!-- =======================================================
-Element: component-type
-Contained by: application
-
-Establishes a short logic name for a particular component that is used
-within the application.
-
-Attributes:
-  type: The logical name for the component.
-  specification-path:  The complete path to the component's specification.
--->
-<!ELEMENT component-type EMPTY>
-<!ATTLIST component-type
-	type CDATA #REQUIRED
-	specification-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: component-specification
-Root element
-
-A component specification.  It's attributes define the Java class to
-instantiate, whether the component may wrap other elements, and whether
-informal (undeclared) parameters are allowed.  Very similar to a page-specification,
-except that component-specification allows for parameters (formal and informal).
-
-Attributes:
-  class: The Java class to instantiate for the component.
-  allow-body:  If yes (the default), the component may wrap other elements (have a body).
-  allow-informal-parameters:  If yes (the default), informal parameters (parameters that are not
-    explictily defined) are allowed.
--->
-<!ELEMENT component-specification (description?, parameter*, reserved-parameter*, property*, (bean | component | external-asset | context-asset | private-asset | property-specification)*)>
-<!ATTLIST component-specification
-	class CDATA #IMPLIED
-	allow-body %attribute-flag; "yes"
-	allow-informal-parameters %attribute-flag; "yes"
->
-<!-- =======================================================
-Element: context-asset
-Contained by: component-specification, page-specification
-
-An asset located in the same web application context as the running
-application.
-
-Attributes:
-  name: The name of the asset.
-  path: The path, relative to the web application context, of the resource.
--->
-<!ELEMENT context-asset (property*)>
-<!ATTLIST context-asset
-	name CDATA #REQUIRED
-	path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: description
-Appears in: many
-
-Several elements may contain descriptions; these descriptions are
-optional.  The eventual goal is to provide help in some form of IDE.
-Currently, descriptions are optional and ignored.
-
--->
-<!ELEMENT description (#PCDATA)>
-<!-- =======================================================
-Element: extension
-Contained by: application, library-specification
-
-Defines an extension, an object that is instantiated and configured
-(like a helper bean) and is then accessible, by name, from the
-containing library (or application).
-
-Attributes:
-  name: Name of the extension.
-  class: Java class to instantiate.
-  immediate: If true, the extension is instantiated early instead of as-needed.
-  
--->
-<!ELEMENT extension (property*, configure*)>
-<!ATTLIST extension
-	name CDATA #REQUIRED
-	class CDATA #REQUIRED
-	immediate %attribute-flag; "no"
->
-<!-- =======================================================
-Element: external-asset
-Contained by: component-specification, page-specification
-
-Defines an asset at some external source.
-
-Attributes:
-  name: The name of the asset.
-  URL: The URL used to reference the asset.
--->
-<!ELEMENT external-asset (property*)>
-<!ATTLIST external-asset
-	name CDATA #REQUIRED
-	URL CDATA #REQUIRED
->
-<!-- =======================================================
-Element: inherited-binding
-Appears in: component
-
-Binds a parameter of the component to a parameter of the container.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  parameter-name: The name of the container parameter to bind the
-    component parameter to.
--->
-<!ELEMENT inherited-binding EMPTY>
-<!ATTLIST inherited-binding
-	name CDATA #REQUIRED
-	parameter-name CDATA #REQUIRED
->
-<!-- =======================================================
-Element: library
-Appears in: application-specification, library-specification
-
-Defines a library used in the construction of the container
-(either another library, or the application itself).
-
-Attributes:
-  id: An identifier used to reference pages and components
-    provided by the library.
-  specification-path: The path to the resource that provides
-    the library specification.
--->
-<!ELEMENT library EMPTY>
-<!ATTLIST library
-	id CDATA #REQUIRED
-	specification-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: library-specification
-Root element
-
-Defines a library that may be used in the construction 
-of an application (or another library).  An application can
-be thought of as a specialized kind of library.
-
--->
-<!ELEMENT library-specification %library-content;>
-<!-- =======================================================
-Element: page
-Contained by: application, library-specification
-
-Defines a single page within the application.  Each application will contain
-at least one of these, to define the Home page.
-
-Attributes:
-  name: A unique name for the application.
-  specification-path:  The resource classpath of the component specification
-    for the page.
--->
-<!ELEMENT page EMPTY>
-<!ATTLIST page
-	name CDATA #REQUIRED
-	specification-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: listener-binding
-Appears in: component
-
-Defines an in-place script using the scripting language
-supported by Bean Scripting Framework (http://jakarta.apache.org/bsf).
-The script itself is the element's character data (often, inside
-a CDATA block).
-
-The default language is jython, though this can be overridden.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  language: The language the script is written in.
--->
-<!ELEMENT listener-binding (#PCDATA)>
-<!ATTLIST listener-binding
-	name CDATA #REQUIRED
-	language CDATA #IMPLIED
->
-<!-- =======================================================
-Element: page-specification
-Root element
-
-A page specification.  It's attributes define the Java class to
-instantiate.  Pages are like components, except they always allow
-a body, and never allow parameters (formal or otherwise).
-
-Attributes:
-  class: The Java class to instantiate for the component.
--->
-<!ELEMENT page-specification (description?, property*, (bean | component | external-asset | context-asset | private-asset | property-specification)*)>
-<!ATTLIST page-specification
-	class CDATA #IMPLIED
->
-<!-- =======================================================
-Element: parameter
-Contained by: component-specification
-
-Defines a formal parameter for the component.
-
-Attributes:
-  name: A unique name for the parameter.
-  type: The name of a Java class or primitive type expected by the parameter.
-  required: If yes, then the parameter must be bound.  If no (the default),
-    then the parameter is optional.
-  property-name: The name to use, instead of the parameter name, for the
-    JavaBean property connected to this parameter.
-  direction: The normal flow of data through the component 
-  			(in, form, custom, auto).
-  default-value: Specifies the default value for the parameter, 
-  				if the parameter is not bound.
--->
-<!ELEMENT parameter (description?)>
-<!ATTLIST parameter
-	name CDATA #REQUIRED
-	type CDATA #IMPLIED
-	required %attribute-flag; "no"
-	property-name CDATA #IMPLIED
-	default-value CDATA #IMPLIED
-	direction (in | form | custom | auto) "custom"
->
-<!-- =======================================================
-Element: private-asset
-Contained by: component-specification, page-specification
-
-An asset available within the Java classpath (i.e., bundled inside a JAR or WAR).
-
-Attributes:
-  name: The name of the asset.
-  resource-path: The complete pathname of the resource.
--->
-<!ELEMENT private-asset (property*)>
-<!ATTLIST private-asset
-	name CDATA #REQUIRED
-	resource-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: property
-Contained by: (many other elements)
-
-Defines a key/value pair associated with the application or component specification.  Properties
-are used to capture information that doesn't fit into the DTD.  The value for the property is
-the PCDATA wrapped by the property tag (which is trimmed of leading and trailing whitespace).
-
-This should not be confused with several other tags which are used to set JavaBeans properties
-of various objects.  The <property> tag exists to allow meta-data to be stored in the specification.
-
-Attributes:
-  name: The name of the property to set.
-  value: If specified, is the value of the property, otherwise, the PCDATA is used.
-  
--->
-<!ELEMENT property (#PCDATA)>
-<!ATTLIST property
-	name CDATA #REQUIRED
-	value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: property-specification
-Appears in: page-specification, component-specification
-
-Identifies a transient or persistent property.
-
-Attributes:
-  name: The name of the property.
-  type: The type of the value, either the name of a scalar type,
-    or the fully qualified name of a class.  If omitted,
-    java.lang.Object is used.
-  persistent: If "yes", the value will be made persistant.  Default
-    is "no".
-  initial-value:  If provided, this is an OGNL expression used
-    to initialize the property.  If not specified, the
-    body of the element is used as the initial value.
-    
--->
-<!ELEMENT property-specification (#PCDATA)>
-<!ATTLIST property-specification
-	name CDATA #REQUIRED
-	type CDATA #IMPLIED
-	persistent %attribute-flag; "no"
-	initial-value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: reserved-parameter
-Appears in: component-specification
-
-Identifies a name which may not be used as an informal parameter.
-Informal parameters are typically HTML attribute names; this
-list identifies HTML attributes that are written exclusively
-by the component and may not be affected by informal parameters.
-
-Attributes:
-  name: The parameter name to reserve.
--->
-<!ELEMENT reserved-parameter EMPTY>
-<!ATTLIST reserved-parameter
-	name CDATA #REQUIRED
->
-<!-- =======================================================
-Element: service
-Appears in: application
-
-Defines an engine service.  You may override the default
-set of engine services or provide completely new services.
-
-Attributes:
-  name: The name of the service.
-  class: The Java class to instantiate for the service.
-
--->
-<!ELEMENT service EMPTY>
-<!ATTLIST service
-	name CDATA #REQUIRED
-	class CDATA #REQUIRED
->
-<!-- =======================================================
-Element: set-property
-Appears in: bean
-
-Used to initialize a property of a helper bean.  An OGNL expression
-is provided as the expression attribute, or as wrapped
-character data.
-
-Attributes:
-  name: The name of the property to be set.
-  expression: The OGNL expression that provides a value.
--->
-<!ELEMENT set-property (#PCDATA)>
-<!ATTLIST set-property
-	name CDATA #REQUIRED
-	expression CDATA #IMPLIED
->
-<!-- =======================================================
-Element: set-message-property
-Appears in: bean
-
-A localized string.
-
-Attributes:
-  key:  Sets a property of a string from a localized string.
-
--->
-<!ELEMENT set-message-property EMPTY>
-<!ATTLIST set-message-property
-	name CDATA #REQUIRED
-	key CDATA #REQUIRED
->
-<!-- =======================================================
-Element: static-binding
-Appears in: component
-
-Binds a parameter of the component to a static value defined directly
-within this specification. The value either the value ttribute, or
-the PCDATA wrapped by the element (with leading and trailing whitespace removed).
-
-Attributes:
-  name: The name of the component parameter to bind.
-  value: The value of the binding.  If not specied, the PCDATA wrapped
-    by the element is the binding.
--->
-<!ELEMENT static-binding (#PCDATA)>
-<!ATTLIST static-binding
-	name CDATA #REQUIRED
-	value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: message-binding
-Appears in: component
-
-Binds a parameter of the component to a localized message of
-its container.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  key: The key used to access a localized string.
-  
--->
-<!ELEMENT message-binding EMPTY>
-<!ATTLIST message-binding
-	name CDATA #REQUIRED
-	key CDATA #REQUIRED
->
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_4_0.dtd b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_4_0.dtd
deleted file mode 100644
index bf316f0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_4_0.dtd
+++ /dev/null
@@ -1,472 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-The DTD for Tapestry application, library, page and component specifications.
-Associated with the public identifier:
-
-	-//Apache Software Foundation//Tapestry Specification 4.0//EN
-	
-The canonical location for the DTD is:
-
-	http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd
-
-For application specifications, the root element is application.
-
-For component specifications, the root element is component-specification.
-
-For page specifications, the root element is page-specification.
-
-For library specifiations, the root element is library-specification.
-
-This DTD represents a significant change from (and simplification of) the 3.0 DTD. 
-Tapestry 4.0 will continue to parse specifications that use the 3.0 DTD for the
-forseable future.
-
-The following changes have occured:
-
-- <service> has been removed; it was used to define engine services, which
-  is now accomplished using the HiveMind tapestry.services.ApplicationServices
-  configuration point.
-- <static-binding>, <inherited-binding> and <message-binding> elements have been removed.
-  There is now just <binding>, whose value attribute contains a prefix to interpret how
-  the remainder of the value is interpreted (no prefix meaning a literal, or static, value).
-- <property> renamed to <meta> and <property-specification> renamed to <property>
-- Removed the type attribute from <property>
-- <property> persistent attribute is now called "persist", and is a string, not a boolean
-- Added <inject>
-- Removed the direction and type attributes from <parameter>
-- Consolidated <context-asset>, <private-asset> and <external-asset> into <asset>
-- Consolidated <set-property> and <set-message-property> into <set>
-- More flexibility on the order of elements
-- Added property attribute to <component>, <bean> and <asset>
-- Removed the type attribute from the <configure> element
-- Added many alternatives to 'yes' and 'no' for boolean attributes.
-- Added aliases and cache attributes to <parameter>
-- Added deprecated to <component-specification>
-- Removed <listener-binding>
--->
-<!-- =======================================================
-Entity: attribute-flag
-
-For entity attributes that take a boolean value.
--->
-<!ENTITY % attribute-flag "(yes|no|true|false|on|off|1|0|y|n|t|f|aye|nay)">
-<!ENTITY % library-content "(description?, (meta|page|component-type|library|extension)*)">
-<!-- =======================================================
-Element: application
-Root element
-
-Defines a Tapestry application.
-
-Attributes:
-  name: A textual name used to uniquely identify the application.
-  engine-class:  The Java class to instantiate as the application engine.
--->
-<!ELEMENT application %library-content;>
-<!ATTLIST application
-	name CDATA #IMPLIED
-	engine-class CDATA #IMPLIED
->
-<!-- =======================================================
-Element: asset
-Contained by: component-specification, page-specification
-
-An asset that may be referenced by the component. Different prefixes
-may be applied to the path indicate where the asset is stored; 
-context: for the web application context folder or classpath:
-for a file stored in the web applications' classpath.
-
-Attributes:
-  name: The name of the asset.
-  path: The path for the resource, which may be relative or absolute.
-  property: The name of a property that will be created to inject the
-    asset into the component.
--->
-<!ELEMENT asset (meta*)>
-<!ATTLIST asset
-	name CDATA #REQUIRED
-	path CDATA #REQUIRED
-  property CDATA #IMPLIED
->
-  <!-- =======================================================
-Element: bean
-Appears in: component-specification, page-specification
-
-Defines a JavaBean that will be used in some way by the component.  Beans
-are accessible via the components' beans property (which contains a property
-for each bean).  Beans are created as needed, and are discarded based on
-the lifecycle attribute.  Beans are typically used to extend the
-implementation of a component via aggregation.
-
-Attributes:
-  name: the name of the bean
-  class: the Java class to instantiate
-  lifecycle: when the reference to the bean should be discard
-  	"none" no lifecycle, the bean is created and returned, but not stored
-  	"request" the bean is retained until the end of the request cycle
-  	"page" the bean is retained for the lifespan of the page
-  	"render" (default) the bean is retained until the end of the current page render
-  property: if specified, then a read-ony property is created in the component
-    to access the bean.
-    
-Nothing prevents a bean for storing state; however, such state will
-not be associated with any particular session (unlike persistant page
-properties).  Further, because of page pooling, subsequent requests
-from the same client may be serviced by different instances of a page and
-(therefore) different bean instances.
-
-Beans that have the "request" lifecycle may be stored into a pool
-for later re-use (in the same or different page).
-
-The bean may have its properties set.  Properties are set on both
-newly instantiated beans, and beans that are retrieved from a pool.
-
--->
-<!ELEMENT bean (description?, (meta|set)*)>
-<!ATTLIST bean
-	name CDATA #REQUIRED
-	class CDATA #REQUIRED
-	lifecycle (none | request | page | render) "request"
-  property CDATA #IMPLIED
->
-<!-- =======================================================
-Element: binding
-Appears in: component
-
-Binds a parameter of the component to a value. The value may
-be literal, an OGNL expression, or something else, as
-determined by its prefix. The value attribute is optional,
-if not provided, the enclosed character data is the value
-(but it is not allowed to specify both value and character data).
-
-Attributes:
-  name: The name of the component parameter to bind.
-  value The value to bind to the parameter.
--->
-<!ELEMENT binding (#PCDATA)>
-<!ATTLIST binding
-	name CDATA #REQUIRED
-	value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: inherited-binding
-Appears in: component
-
-Binds a parameter of the component to a parameter of the container.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  parameter-name: The name of the container parameter to bind the
-    component parameter to.
--->
-<!ELEMENT inherited-binding EMPTY>
-<!ATTLIST inherited-binding
-	name CDATA #REQUIRED
-	parameter-name CDATA #REQUIRED
->
-<!-- =======================================================
-Element: configure
-Appears in: extension
-
-Configures one JavaBean property of an extension.
-
-Attributes:
-  property:  The name of the property to configure.
-  value: The value to be converted and applied.  If not 
-    specified, the element's character data is
-    used.  
- 
--->
-<!ELEMENT configure (#PCDATA)>
-<!ATTLIST configure
-	property CDATA #REQUIRED
-	value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: component
-Contained by: component-specification, page-specification
-
-Defines a component contained by the component being specified.
-
-Attribute:
-  id: A unique identifier for the component within the container.
-  type: The type of component, either a well known logical name, or the complete path
-    to the component's specification.
-  copy-of: The id of a previously defined component; this component will be a copy
-    of the other component.
-  inherit-informal-parameters: If yes, then all informal parameters of the containing
-    component are copied into this component.
-  property: Optional property name; the component instance will be injected into this
-    property.
-
-The Tapestry page loader ensures that either type or copy-of is specified, but not both.
--->
-<!ELEMENT component (meta | binding | inherited-binding )*>
-<!ATTLIST component
-	id ID #REQUIRED
-	type CDATA #IMPLIED
-	copy-of IDREF #IMPLIED
-	inherit-informal-parameters %attribute-flag; "no"
-  property CDATA  #IMPLIED
->
-<!-- =======================================================
-Element: component-type
-Contained by: application
-
-Establishes a short logic name for a particular component that is used
-within the application.
-
-Attributes:
-  type: The logical name for the component.
-  specification-path:  The complete path to the component's specification.
--->
-<!ELEMENT component-type EMPTY>
-<!ATTLIST component-type
-	type CDATA #REQUIRED
-	specification-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: component-specification
-Root element
-
-A component specification.  It's attributes define the Java class to
-instantiate, whether the component may wrap other elements, and whether
-informal (undeclared) parameters are allowed.  Very similar to a page-specification,
-except that component-specification allows for parameters (formal and informal).
-
-Attributes:
-  class: The Java class to instantiate for the component.
-  allow-body:  If yes (the default), the component may wrap other elements (have a body).
-  allow-informal-parameters:  If yes (the default), informal parameters (parameters that are not
-    explictily defined) are allowed.
-  deprecated: If yes, then using the component will generate a warning, advising the user
-    to find a different component. The default is no.
--->
-<!ELEMENT component-specification (description?, (parameter | reserved-parameter | meta | bean | component | asset | property | inject )*)>
-<!ATTLIST component-specification
-	class CDATA #IMPLIED
-	allow-body %attribute-flag; "yes"
-	allow-informal-parameters %attribute-flag; "yes"
-  deprecated %attribute-flag; "no"
->
-<!-- =======================================================
-Element: description
-Appears in: many
-
-Several elements may contain descriptions; these descriptions are
-optional.  The eventual goal is to provide help in some form of IDE.
-Currently, descriptions are optional and ignored.
-
--->
-<!ELEMENT description (#PCDATA)>
-<!-- =======================================================
-Element: extension
-Contained by: application, library-specification
-
-Defines an extension, an object that is instantiated and configured
-(like a helper bean) and is then accessible, by name, from the
-containing library (or application).
-
-Attributes:
-  name: Name of the extension.
-  class: Java class to instantiate.
-  immediate: If true, the extension is instantiated early instead of as-needed.
-  
--->
-<!ELEMENT extension (meta | configure)* >
-<!ATTLIST extension
-	name CDATA #REQUIRED
-	class CDATA #REQUIRED
-	immediate %attribute-flag; "no"
->
-<!-- =======================================================
-Element: inject
-Contained by: component-specification, page-specification
-
-Defines a new property whose read-only value is an object
-obtained from HiveMind.
-
-Attributes:
-  property The name of the property.
-  type: The type of object to be injected, used to interpret
-    the meaning of the object attribute.
-  object: The locator used to obtain the value.
--->
-<!ELEMENT inject EMPTY>
-<!ATTLIST inject
-  property CDATA #REQUIRED
-  type CDATA "object"
-  object CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: library
-Appears in: application-specification, library-specification
-
-Defines a library used in the construction of the container
-(either another library, or the application itself).
-
-Attributes:
-  id: An identifier used to reference pages and components
-    provided by the library.
-  specification-path: The path to the resource that provides
-    the library specification.
--->
-<!ELEMENT library EMPTY>
-<!ATTLIST library
-	id CDATA #REQUIRED
-	specification-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: library-specification
-Root element
-
-Defines a library that may be used in the construction 
-of an application (or another library).  An application can
-be thought of as a specialized kind of library.
-
--->
-<!ELEMENT library-specification %library-content;>
-<!-- =======================================================
-Element: page
-Contained by: application, library-specification
-
-Defines a single page within the application.  Each application will contain
-at least one of these, to define the Home page.
-
-Attributes:
-  name: A unique name for the application.
-  specification-path:  The resource classpath of the component specification
-    for the page.
--->
-<!ELEMENT page EMPTY>
-<!ATTLIST page
-	name CDATA #REQUIRED
-	specification-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: meta
-Contained by: (many other elements)
-
-Defines a key/value pair associated with the application or component specification.  Properties
-are used to capture information that doesn't fit into the DTD.  The value for the property is
-either the value attribute, or the PCDATA wrapped by the property tag 
-(which is trimmed of leading and trailing whitespace).
-
-This should not be confused with several other tags which are used to set JavaBeans properties
-of various objects.  The <property> tag exists to allow meta-data to be stored in the specification.
-
-Attributes:
-  key: The name of the property to set.
-  value: If specified, is the value of the property, otherwise, the PCDATA is used.
-  
--->
-<!ELEMENT meta (#PCDATA)>
-<!ATTLIST meta
-	key CDATA #REQUIRED
-	value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: page-specification
-Root element
-
-A page specification.  It's attributes define the Java class to
-instantiate.  Pages are like components, except they always allow
-a body, and never allow parameters (formal or otherwise).
-
-Attributes:
-  class: The Java class to instantiate for the component.
--->
-<!ELEMENT page-specification (description?,  (meta| bean | component | asset | property | inject )*)>
-<!ATTLIST page-specification
-	class CDATA #IMPLIED
->
-<!-- =======================================================
-Element: parameter
-Contained by: component-specification
-
-Defines a formal parameter for the component.
-
-Attributes:
-  name: A unique name for the parameter.
-  required: If yes, then the parameter must be bound.  If no (the default),
-    then the parameter is optional.
-  property: The name to use, instead of the parameter name, for the
-    JavaBean property connected to this parameter.
-  default-value: Specifies the default value for the parameter, if not bound,
-    as a binding reference.
-  cache: If true (the default), then the parameter property will cache the binding value
-   If false, then each access to the property will re-acquire the the current value
-   for the binding on each access (though invariant bindings may still be cached).
-  aliases: An optional, comma-seperated list of aliases for the parameter. Used to allow
-    compatibility when parameter names are changed.
-  deprecated: If true, then using the parameter will generate a runtime warning.
--->
-<!ELEMENT parameter (description?)>
-<!ATTLIST parameter
-	name CDATA #REQUIRED
-	required %attribute-flag; "no"
-	property CDATA #IMPLIED
-	default-value CDATA #IMPLIED
-  cache %attribute-flag; "yes"
-  aliases CDATA #IMPLIED
-  deprecated %attribute-flag; "no"
->
-<!-- =======================================================
-Element: property
-Appears in: page-specification, component-specification
-
-Identifies a transient or persistent property.
-
-Attributes:
-  name: The name of the property.
-  persist: The name of the strategy for persisting the property between requests, 
-   or leave blank for no persistence (that is, a transient property).  
-   "session" is the most common strategy.
-  initial-value:  If provided, this is an OGNL expression used
-    to initialize the property.  If not specified, the
-    body of the element is used as the initial value.
-    
--->
-<!ELEMENT property (#PCDATA)>
-<!ATTLIST property
-	name CDATA #REQUIRED
-	persist CDATA #IMPLIED
-	initial-value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: reserved-parameter
-Appears in: component-specification
-
-Identifies a name which may not be used as an informal parameter.
-Informal parameters are typically HTML attribute names; this
-list identifies HTML attributes that are written exclusively
-by the component and may not be affected by informal parameters.
-
-Attributes:
-  name: The parameter name to reserve.
--->
-<!ELEMENT reserved-parameter EMPTY>
-<!ATTLIST reserved-parameter
-	name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: set
-Appears in: bean
-
-Used to initialize a property of a managed bean.  The value
-is a binding reference, and is provided as the value attribute, 
-or as wrapped character data.
-
-Attributes:
-  name: The name of the property to be set.
-  value: The value (as a binding reference) to set the property
-    to.
--->
-<!ELEMENT set (#PCDATA)>
-<!ATTLIST set
-	name CDATA #REQUIRED
-	value CDATA #IMPLIED
->
-
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_4_1.dtd b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_4_1.dtd
deleted file mode 100644
index 42d8e51..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/Tapestry_4_1.dtd
+++ /dev/null
@@ -1,475 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-The DTD for Tapestry application, library, page and component specifications.
-Associated with the public identifier:
-
-	-//Apache Software Foundation//Tapestry Specification 4.1//EN
-	
-The canonical location for the DTD is:
-
-	http://tapestry.apache.org/dtd/Tapestry_4_1.dtd
-
-For application specifications, the root element is application.
-
-For component specifications, the root element is component-specification.
-
-For page specifications, the root element is page-specification.
-
-For library specifiations, the root element is library-specification.
-
-This DTD represents a significant change from (and simplification of) the 3.0 DTD. 
-Tapestry 4.0 will continue to parse specifications that use the 3.0 DTD for the
-forseable future.
-
-The following changes have occured:
-
-- <service> has been removed; it was used to define engine services, which
-  is now accomplished using the HiveMind tapestry.services.ApplicationServices
-  configuration point.
-- <static-binding>, <inherited-binding> and <message-binding> elements have been removed.
-  There is now just <binding>, whose value attribute contains a prefix to interpret how
-  the remainder of the value is interpreted (no prefix meaning a literal, or static, value).
-- <property> renamed to <meta> and <property-specification> renamed to <property>
-- Removed the type attribute from <property>
-- <property> persistent attribute is now called "persist", and is a string, not a boolean
-- Added <inject>
-- Removed the direction and type attributes from <parameter>
-- Consolidated <context-asset>, <private-asset> and <external-asset> into <asset>
-- Consolidated <set-property> and <set-message-property> into <set>
-- More flexibility on the order of elements
-- Added property attribute to <component>, <bean> and <asset>
-- Removed the type attribute from the <configure> element
-- Added many alternatives to 'yes' and 'no' for boolean attributes.
-- Added aliases and cache attributes to <parameter>
-- Added deprecated to <component-specification>
-- Removed <listener-binding>
--->
-<!-- =======================================================
-Entity: attribute-flag
-
-For entity attributes that take a boolean value.
--->
-<!ENTITY % attribute-flag "(yes|no|true|false|on|off|1|0|y|n|t|f|aye|nay)">
-<!ENTITY % library-content "(description?, (meta|page|component-type|library|extension)*)">
-<!-- =======================================================
-Element: application
-Root element
-
-Defines a Tapestry application.
-
-Attributes:
-  name: A textual name used to uniquely identify the application.
-  engine-class:  The Java class to instantiate as the application engine.
--->
-<!ELEMENT application %library-content;>
-<!ATTLIST application
-	name CDATA #IMPLIED
-	engine-class CDATA #IMPLIED
->
-<!-- =======================================================
-Element: asset
-Contained by: component-specification, page-specification
-
-An asset that may be referenced by the component. Different prefixes
-may be applied to the path indicate where the asset is stored; 
-context: for the web application context folder or classpath:
-for a file stored in the web applications' classpath.
-
-Attributes:
-  name: The name of the asset.
-  path: The path for the resource, which may be relative or absolute.
-  property: The name of a property that will be created to inject the
-    asset into the component.
--->
-<!ELEMENT asset (meta*)>
-<!ATTLIST asset
-	name CDATA #REQUIRED
-	path CDATA #REQUIRED
-  property CDATA #IMPLIED
->
-  <!-- =======================================================
-Element: bean
-Appears in: component-specification, page-specification
-
-Defines a JavaBean that will be used in some way by the component.  Beans
-are accessible via the components' beans property (which contains a property
-for each bean).  Beans are created as needed, and are discarded based on
-the lifecycle attribute.  Beans are typically used to extend the
-implementation of a component via aggregation.
-
-Attributes:
-  name: the name of the bean
-  class: the Java class to instantiate
-  lifecycle: when the reference to the bean should be discard
-  	"none" no lifecycle, the bean is created and returned, but not stored
-  	"request" the bean is retained until the end of the request cycle
-  	"page" the bean is retained for the lifespan of the page
-  	"render" (default) the bean is retained until the end of the current page render
-  property: if specified, then a read-ony property is created in the component
-    to access the bean.
-    
-Nothing prevents a bean for storing state; however, such state will
-not be associated with any particular session (unlike persistant page
-properties).  Further, because of page pooling, subsequent requests
-from the same client may be serviced by different instances of a page and
-(therefore) different bean instances.
-
-Beans that have the "request" lifecycle may be stored into a pool
-for later re-use (in the same or different page).
-
-The bean may have its properties set.  Properties are set on both
-newly instantiated beans, and beans that are retrieved from a pool.
-
--->
-<!ELEMENT bean (description?, (meta|set)*)>
-<!ATTLIST bean
-	name CDATA #REQUIRED
-	class CDATA #REQUIRED
-	lifecycle (none | request | page | render) "request"
-  property CDATA #IMPLIED
->
-<!-- =======================================================
-Element: binding
-Appears in: component
-
-Binds a parameter of the component to a value. The value may
-be literal, an OGNL expression, or something else, as
-determined by its prefix. The value attribute is optional,
-if not provided, the enclosed character data is the value
-(but it is not allowed to specify both value and character data).
-
-Attributes:
-  name: The name of the component parameter to bind.
-  value The value to bind to the parameter.
--->
-<!ELEMENT binding (#PCDATA)>
-<!ATTLIST binding
-	name CDATA #REQUIRED
-	value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: inherited-binding
-Appears in: component
-
-Binds a parameter of the component to a parameter of the container.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  parameter-name: The name of the container parameter to bind the
-    component parameter to.
--->
-<!ELEMENT inherited-binding EMPTY>
-<!ATTLIST inherited-binding
-	name CDATA #REQUIRED
-	parameter-name CDATA #REQUIRED
->
-<!-- =======================================================
-Element: configure
-Appears in: extension
-
-Configures one JavaBean property of an extension.
-
-Attributes:
-  property:  The name of the property to configure.
-  value: The value to be converted and applied.  If not 
-    specified, the element's character data is
-    used.  
- 
--->
-<!ELEMENT configure (#PCDATA)>
-<!ATTLIST configure
-	property CDATA #REQUIRED
-	value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: component
-Contained by: component-specification, page-specification
-
-Defines a component contained by the component being specified.
-
-Attribute:
-  id: A unique identifier for the component within the container.
-  type: The type of component, either a well known logical name, or the complete path
-    to the component's specification.
-  copy-of: The id of a previously defined component; this component will be a copy
-    of the other component.
-  inherit-informal-parameters: If yes, then all informal parameters of the containing
-    component are copied into this component.
-  property: Optional property name; the component instance will be injected into this
-    property.
-
-The Tapestry page loader ensures that either type or copy-of is specified, but not both.
--->
-<!ELEMENT component (meta | binding | inherited-binding )*>
-<!ATTLIST component
-	id ID #REQUIRED
-	type CDATA #IMPLIED
-	copy-of IDREF #IMPLIED
-	inherit-informal-parameters %attribute-flag; "no"
-  property CDATA  #IMPLIED
->
-<!-- =======================================================
-Element: component-type
-Contained by: application
-
-Establishes a short logic name for a particular component that is used
-within the application.
-
-Attributes:
-  type: The logical name for the component.
-  specification-path:  The complete path to the component's specification.
--->
-<!ELEMENT component-type EMPTY>
-<!ATTLIST component-type
-	type CDATA #REQUIRED
-	specification-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: component-specification
-Root element
-
-A component specification.  It's attributes define the Java class to
-instantiate, whether the component may wrap other elements, and whether
-informal (undeclared) parameters are allowed.  Very similar to a page-specification,
-except that component-specification allows for parameters (formal and informal).
-
-Attributes:
-  class: The Java class to instantiate for the component.
-  allow-body:  If yes (the default), the component may wrap other elements (have a body).
-  allow-informal-parameters:  If yes (the default), informal parameters (parameters that are not
-    explictily defined) are allowed.
-  deprecated: If yes, then using the component will generate a warning, advising the user
-    to find a different component. The default is no.
-  inherit-specification: If yes (the default), all elements contained in any superclass components will be
-  	directly inherited in this specification.(this includes parameters/properties/assets/etc..)
--->
-<!ELEMENT component-specification (description?, (parameter | reserved-parameter | meta | bean | component | asset | property | inject )*)>
-<!ATTLIST component-specification
-	class CDATA #IMPLIED
-	allow-body %attribute-flag; "yes"
-	allow-informal-parameters %attribute-flag; "yes"
-  	deprecated %attribute-flag; "no"
-  	inherit-specification %attribute-flag; "yes"
->
-<!-- =======================================================
-Element: description
-Appears in: many
-
-Several elements may contain descriptions; these descriptions are
-optional.  The eventual goal is to provide help in some form of IDE.
-Currently, descriptions are optional and ignored.
-
--->
-<!ELEMENT description (#PCDATA)>
-<!-- =======================================================
-Element: extension
-Contained by: application, library-specification
-
-Defines an extension, an object that is instantiated and configured
-(like a helper bean) and is then accessible, by name, from the
-containing library (or application).
-
-Attributes:
-  name: Name of the extension.
-  class: Java class to instantiate.
-  immediate: If true, the extension is instantiated early instead of as-needed.
-  
--->
-<!ELEMENT extension (meta | configure)* >
-<!ATTLIST extension
-	name CDATA #REQUIRED
-	class CDATA #REQUIRED
-	immediate %attribute-flag; "no"
->
-<!-- =======================================================
-Element: inject
-Contained by: component-specification, page-specification
-
-Defines a new property whose read-only value is an object
-obtained from HiveMind.
-
-Attributes:
-  property The name of the property.
-  type: The type of object to be injected, used to interpret
-    the meaning of the object attribute.
-  object: The locator used to obtain the value.
--->
-<!ELEMENT inject EMPTY>
-<!ATTLIST inject
-  property CDATA #REQUIRED
-  type CDATA "object"
-  object CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: library
-Appears in: application-specification, library-specification
-
-Defines a library used in the construction of the container
-(either another library, or the application itself).
-
-Attributes:
-  id: An identifier used to reference pages and components
-    provided by the library.
-  specification-path: The path to the resource that provides
-    the library specification.
--->
-<!ELEMENT library EMPTY>
-<!ATTLIST library
-	id CDATA #REQUIRED
-	specification-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: library-specification
-Root element
-
-Defines a library that may be used in the construction 
-of an application (or another library).  An application can
-be thought of as a specialized kind of library.
-
--->
-<!ELEMENT library-specification %library-content;>
-<!-- =======================================================
-Element: page
-Contained by: application, library-specification
-
-Defines a single page within the application.  Each application will contain
-at least one of these, to define the Home page.
-
-Attributes:
-  name: A unique name for the application.
-  specification-path:  The resource classpath of the component specification
-    for the page.
--->
-<!ELEMENT page EMPTY>
-<!ATTLIST page
-	name CDATA #REQUIRED
-	specification-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: meta
-Contained by: (many other elements)
-
-Defines a key/value pair associated with the application or component specification.  Properties
-are used to capture information that doesn't fit into the DTD.  The value for the property is
-either the value attribute, or the PCDATA wrapped by the property tag 
-(which is trimmed of leading and trailing whitespace).
-
-This should not be confused with several other tags which are used to set JavaBeans properties
-of various objects.  The <property> tag exists to allow meta-data to be stored in the specification.
-
-Attributes:
-  key: The name of the property to set.
-  value: If specified, is the value of the property, otherwise, the PCDATA is used.
-  
--->
-<!ELEMENT meta (#PCDATA)>
-<!ATTLIST meta
-	key CDATA #REQUIRED
-	value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: page-specification
-Root element
-
-A page specification.  It's attributes define the Java class to
-instantiate.  Pages are like components, except they always allow
-a body, and never allow parameters (formal or otherwise).
-
-Attributes:
-  class: The Java class to instantiate for the component.
--->
-<!ELEMENT page-specification (description?,  (meta| bean | component | asset | property | inject )*)>
-<!ATTLIST page-specification
-	class CDATA #IMPLIED
->
-<!-- =======================================================
-Element: parameter
-Contained by: component-specification
-
-Defines a formal parameter for the component.
-
-Attributes:
-  name: A unique name for the parameter.
-  required: If yes, then the parameter must be bound.  If no (the default),
-    then the parameter is optional.
-  property: The name to use, instead of the parameter name, for the
-    JavaBean property connected to this parameter.
-  default-value: Specifies the default value for the parameter, if not bound,
-    as a binding reference.
-  cache: If true (the default), then the parameter property will cache the binding value
-   If false, then each access to the property will re-acquire the the current value
-   for the binding on each access (though invariant bindings may still be cached).
-  aliases: An optional, comma-seperated list of aliases for the parameter. Used to allow
-    compatibility when parameter names are changed.
-  deprecated: If true, then using the parameter will generate a runtime warning.
--->
-<!ELEMENT parameter (description?)>
-<!ATTLIST parameter
-	name CDATA #REQUIRED
-	required %attribute-flag; "no"
-	property CDATA #IMPLIED
-	default-value CDATA #IMPLIED
-  cache %attribute-flag; "yes"
-  aliases CDATA #IMPLIED
-  deprecated %attribute-flag; "no"
->
-<!-- =======================================================
-Element: property
-Appears in: page-specification, component-specification
-
-Identifies a transient or persistent property.
-
-Attributes:
-  name: The name of the property.
-  persist: The name of the strategy for persisting the property between requests, 
-   or leave blank for no persistence (that is, a transient property).  
-   "session" is the most common strategy.
-  initial-value:  If provided, this is an OGNL expression used
-    to initialize the property.  If not specified, the
-    body of the element is used as the initial value.
-    
--->
-<!ELEMENT property (#PCDATA)>
-<!ATTLIST property
-	name CDATA #REQUIRED
-	persist CDATA #IMPLIED
-	initial-value CDATA #IMPLIED
->
-<!-- =======================================================
-Element: reserved-parameter
-Appears in: component-specification
-
-Identifies a name which may not be used as an informal parameter.
-Informal parameters are typically HTML attribute names; this
-list identifies HTML attributes that are written exclusively
-by the component and may not be affected by informal parameters.
-
-Attributes:
-  name: The parameter name to reserve.
--->
-<!ELEMENT reserved-parameter EMPTY>
-<!ATTLIST reserved-parameter
-	name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: set
-Appears in: bean
-
-Used to initialize a property of a managed bean.  The value
-is a binding reference, and is provided as the value attribute, 
-or as wrapped character data.
-
-Attributes:
-  name: The name of the property to be set.
-  value: The value (as a binding reference) to set the property
-    to.
--->
-<!ELEMENT set (#PCDATA)>
-<!ATTLIST set
-	name CDATA #REQUIRED
-	value CDATA #IMPLIED
->
-
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateParseException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateParseException.java
deleted file mode 100644
index c71e92f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateParseException.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.Location;
-
-/**
- *  Exception thrown indicating a problem parsing an HTML template.
- *
- *  @author Howard Ship
- * 
- **/
-
-public class TemplateParseException extends Exception implements Locatable
-{
-    private static final long serialVersionUID = 3741503276431589982L;
-    
-    private final Location _location;
-    private final Throwable _rootCause;
-
-    public TemplateParseException(String message)
-    {
-        this(message, null, null);
-    }
-
-    public TemplateParseException(String message, Location location)
-    {
-        this(message, location, null);
-    }
-
-    public TemplateParseException(String message, Location location, Throwable rootCause)
-    {
-        super(message);
-
-        _location = location;
-
-        _rootCause = rootCause;
-
-    }
-
-    public Location getLocation()
-    {
-        return _location;
-    }
-
-    public Throwable getRootCause()
-    {
-        return _rootCause;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateParser.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateParser.java
deleted file mode 100644
index 61f6535..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateParser.java
+++ /dev/null
@@ -1,1460 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.LocationImpl;
-import org.apache.oro.text.regex.MalformedPatternException;
-import org.apache.oro.text.regex.MatchResult;
-import org.apache.oro.text.regex.Pattern;
-import org.apache.oro.text.regex.PatternMatcher;
-import org.apache.oro.text.regex.Perl5Compiler;
-import org.apache.oro.text.regex.Perl5Matcher;
-import org.apache.tapestry.util.IdAllocator;
-
-/**
- * Parses Tapestry templates, breaking them into a series of
- * {@link org.apache.tapestry.parse.TemplateToken tokens}. Although often referred to as an "HTML
- * template", there is no real requirement that the template be HTML. This parser can handle any
- * reasonable SGML derived markup (including XML), but specifically works around the ambiguities of
- * HTML reasonably.
- * <p>
- * Deployed as the tapestry.parse.TemplateParser service, using the threaded model.
- * <p>
- * Dynamic markup in Tapestry attempts to be invisible. Components are arbitrary tags containing a
- * <code>jwcid</code> attribute. Such components must be well balanced (have a matching close tag,
- * or end the tag with "<code>/&gt;</code>".
- * <p>
- * Generally, the id specified in the template is matched against an component defined in the
- * specification. However, implicit components are also possible. The jwcid attribute uses the
- * syntax "<code>@Type</code>" for implicit components. Type is the component type, and may include a library id
- *       prefix. Such a component is anonymous (but is given a unique id).
- *       <p>
- *       (The unique ids assigned start with a dollar sign, which is normally no allowed for
- *       component ids ... this helps to make them stand out and assures that they do not conflict
- *       with user-defined component ids. These ids tend to propagate into URLs and become HTML
- *       element names and even JavaScript variable names ... the dollar sign is acceptible in these
- *       contexts as well).
- *       <p>
- *       Implicit component may also be given a name using the syntax "
- *       <code>componentId:@Type</code>". Such a component should <b>not </b> be defined in the
- *       specification, but may still be accessed via
- *       {@link org.apache.tapestry.IComponent#getComponent(String)}.
- *       <p>
- *       Both defined and implicit components may have additional attributes defined, simply by
- *       including them in the template. They set formal or informal parameters of the component to
- *       static strings.
- *       {@link org.apache.tapestry.spec.IComponentSpecification#getAllowInformalParameters()}, if
- *       false, will cause such attributes to be simply ignored. For defined components, conflicting
- *       values defined in the template are ignored.
- *       <p>
- *       Attributes in component tags will become formal and informal parameters of the
- *       corresponding component. Most attributes will be
- *       <p>
- *       The parser removes the body of some tags (when the corresponding component doesn't
- *       {@link org.apache.tapestry.spec.IComponentSpecification#getAllowBody() allow a body}, and
- *       allows portions of the template to be completely removed.
- *       <p>
- *       The parser does a pretty thorough lexical analysis of the template, and reports a great
- *       number of errors, including improper nesting of tags.
- *       <p>
- *       The parser supports <em>invisible localization</em>: The parser recognizes HTML of the
- *       form: <code>&lt;span key="<i>value</i>"&gt; ... &lt;/span&gt;</code> and converts them
- *       into a {@link TokenType#LOCALIZATION} token. You may also specifify a <code>raw</code>
- *       attribute ... if the value is <code>true</code>, then the localized value is sent to the
- *       client without filtering, which is appropriate if the value has any markup that should not
- *       be escaped.
- * @author Howard Lewis Ship, Geoff Longman
- */
-
-public class TemplateParser implements ITemplateParser
-{
-    /**
-     * The attribute, checked for in &lt;span&gt; tags, that signfies that the span is being used as
-     * an invisible localization.
-     * 
-     * @since 2.0.4
-     */
-
-    public static final String LOCALIZATION_KEY_ATTRIBUTE_NAME = "key";
-
-    /**
-     * Used with {@link #LOCALIZATION_KEY_ATTRIBUTE_NAME} to indicate a string that should be
-     * rendered "raw" (without escaping HTML). If not specified, defaults to "false". The value must
-     * equal "true" (caselessly).
-     * 
-     * @since 2.3
-     */
-
-    public static final String RAW_ATTRIBUTE_NAME = "raw";
-    
-    public static final String PROPERTY_NAME_PATTERN = "_?[a-zA-Z]\\w*";
-    
-    /**
-     * Pattern used to recognize ordinary components (defined in the specification).
-     * 
-     * @since 3.0
-     */
-
-    public static final String SIMPLE_ID_PATTERN = "^(" + PROPERTY_NAME_PATTERN + ")$";
-    
-    /**
-     * Pattern used to recognize implicit components (whose type is defined in the template).
-     * Subgroup 1 is the id (which may be null) and subgroup 2 is the type (which may be qualified
-     * with a library prefix). Subgroup 4 is the library id, Subgroup 5 is the simple component
-     * type, which may (as of 4.0) have slashes to delinate folders containing the component.
-     * 
-     * @since 3.0
-     */
-
-    public static final String IMPLICIT_ID_PATTERN = "^(" + PROPERTY_NAME_PATTERN + ")?@((("
-            + PROPERTY_NAME_PATTERN + "):)?((" + PROPERTY_NAME_PATTERN + "/)*"
-            + PROPERTY_NAME_PATTERN + "))$";
-    
-    /**
-     * A "magic" component id that causes the tag with the id and its entire body to be ignored
-     * during parsing.
-     */
-
-    private static final String REMOVE_ID = "$remove$";
-
-    /**
-     * A "magic" component id that causes the tag to represent the true content of the template. Any
-     * content prior to the tag is discarded, and any content after the tag is ignored. The tag
-     * itself is not included.
-     */
-
-    private static final String CONTENT_ID = "$content$";
-
-    private static final int IMPLICIT_ID_PATTERN_ID_GROUP = 1;
-
-    private static final int IMPLICIT_ID_PATTERN_TYPE_GROUP = 2;
-
-    private static final int IMPLICIT_ID_PATTERN_LIBRARY_ID_GROUP = 4;
-
-    private static final int IMPLICIT_ID_PATTERN_SIMPLE_TYPE_GROUP = 5;
-
-    private static final char[] COMMENT_START = new char[]
-                                                         { '<', '!', '-', '-' };
-
-    private static final char[] COMMENT_END = new char[]
-                                                       { '-', '-', '>' };
-
-    private static final char[] CLOSE_TAG = new char[]
-                                                     { '<', '/' };
-    
-    private static final int WAIT_FOR_ATTRIBUTE_NAME = 0;
-
-    private static final int COLLECT_ATTRIBUTE_NAME = 1;
-
-    private static final int ADVANCE_PAST_EQUALS = 2;
-
-    private static final int WAIT_FOR_ATTRIBUTE_VALUE = 3;
-
-    private static final int COLLECT_QUOTED_VALUE = 4;
-
-    private static final int COLLECT_UNQUOTED_VALUE = 5;
-    
-    /**
-     * Conversions needed by {@link #convertEntitiesToPlain(String)}.
-     */
-
-    private static final String[] CONVERSIONS =
-    { "&lt;", "<", "&gt;", ">", "&quot;", "\"", "&amp;", "&" };
-    
-    /**
-     * Attribute name used to identify components.
-     * 
-     * @since 4.0
-     */
-
-    private String _componentAttributeName;
-    
-    private Pattern _simpleIdPattern;
-
-    private Pattern _implicitIdPattern;
-
-    private PatternMatcher _patternMatcher;
-
-    private IdAllocator _idAllocator = new IdAllocator();
-
-    private ITemplateParserDelegate _delegate;
-
-    /**
-     * Identifies the template being parsed; used with error messages.
-     */
-
-    private Resource _resourceLocation;
-
-    /**
-     * Shared instance of {@link Location} used by all {@link TextToken} instances in the template.
-     */
-
-    private Location _templateLocation;
-
-    /**
-     * Location with in the resource for the current line.
-     */
-
-    private Location _currentLocation;
-
-    /**
-     * Local reference to the template data that is to be parsed.
-     */
-
-    private char[] _templateData;
-
-    /**
-     * List of Tag.
-     */
-
-    private List _stack = new ArrayList();
-
-    /**
-     * 
-     * @author hls
-     */
-    private static class Tag
-    {
-        // The element, i.e., <jwc> or virtually any other element (via jwcid attribute)
-        String _tagName;
-
-        // If true, the tag is a placeholder for a dynamic element
-        boolean _component;
-
-        // If true, the body of the tag is being ignored, and the
-        // ignore flag is cleared when the close tag is reached
-        boolean _ignoringBody;
-
-        // If true, then the entire tag (and its body) is being ignored
-        boolean _removeTag;
-
-        // If true, then the tag must have a balanced closing tag.
-        // This is always true for components.
-        boolean _mustBalance;
-
-        // The line on which the start tag exists
-        int _line;
-
-        // If true, then the parse ends when the closing tag is found.
-        boolean _content;
-
-        Tag(String tagName, int line)
-        {
-            _tagName = tagName;
-            _line = line;
-        }
-
-        boolean match(String matchTagName)
-        {
-            return _tagName.equalsIgnoreCase(matchTagName);
-        }
-    }
-
-    /**
-     * List of {@link TemplateToken}, this forms the ultimate response.
-     */
-
-    private List _tokens = new ArrayList();
-
-    /**
-     * The location of the 'cursor' within the template data. The advance() method moves this
-     * forward.
-     */
-
-    private int _cursor;
-
-    /**
-     * The start of the current block of static text, or -1 if no block is active.
-     */
-
-    private int _blockStart;
-
-    /**
-     * The current line number; tracked by advance(). Starts at 1.
-     */
-
-    private int _line;
-
-    /**
-     * Set to true when the body of a tag is being ignored. This is typically used to skip over the
-     * body of a tag when its corresponding component doesn't allow a body, or whe the special jwcid
-     * of $remove$ is used.
-     */
-
-    private boolean _ignoring;
-
-    /**
-     * A {@link Map}of {@link String}s, used to store attributes collected while parsing a tag.
-     */
-
-    private Map _attributes = new HashMap();
-
-    /**
-     * A factory used to create template tokens.
-     */
-
-    private TemplateTokenFactory _factory;
-
-    public TemplateParser()
-    {
-        Perl5Compiler compiler = new Perl5Compiler();
-
-        try
-        {
-            _simpleIdPattern = compiler.compile(SIMPLE_ID_PATTERN);
-            _implicitIdPattern = compiler.compile(IMPLICIT_ID_PATTERN);
-        }
-        catch (MalformedPatternException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-
-        _patternMatcher = new Perl5Matcher();
-    }
-
-    /**
-     * Parses the template data into an array of {@link TemplateToken}s.
-     * <p>
-     * The parser is <i>decidedly </i> not threadsafe, so care should be taken that only a single
-     * thread accesses it.
-     * 
-     * @param templateData
-     *            the HTML template to parse. Some tokens will hold a reference to this array.
-     * @param delegate
-     *            object that "knows" about defined components
-     * @param resourceLocation
-     *            a description of where the template originated from, used with error messages.
-     */
-
-    public TemplateToken[] parse(char[] templateData, ITemplateParserDelegate delegate, 
-            Resource resourceLocation) throws TemplateParseException
-    {
-        try
-        {
-            beforeParse(templateData, delegate, resourceLocation);
-            
-            parse();
-
-            return (TemplateToken[]) _tokens.toArray(new TemplateToken[_tokens.size()]);
-        }
-        finally
-        {
-            afterParse();
-        }
-    }
-
-    /**
-     * perform default initialization of the parser.
-     */
-
-    protected void beforeParse(char[] templateData, ITemplateParserDelegate delegate, Resource resourceLocation)
-    {
-        _templateData = templateData;
-        _resourceLocation = resourceLocation;
-        _templateLocation = new LocationImpl(resourceLocation);
-        _delegate = delegate;
-        _ignoring = false;
-        _line = 1;
-        _componentAttributeName = delegate.getComponentAttributeName();
-    }
-
-    /**
-     * Perform default cleanup after parsing completes.
-     */
-
-    protected void afterParse()
-    {
-        _delegate = null;
-        _templateData = null;
-        _resourceLocation = null;
-        _templateLocation = null;
-        _currentLocation = null;
-        _stack.clear();
-        _tokens.clear();
-        _attributes.clear();
-        _idAllocator.clear();
-    }
-
-    /**
-     * Used by the parser to report problems in the parse. Parsing <b>must </b> stop when a problem
-     * is reported.
-     * <p>
-     * The default implementation simply throws an exception that contains the message and location
-     * parameters.
-     * <p>
-     * Subclasses may override but <b>must </b> ensure they throw the required exception.
-     * 
-     * @param message
-     * @param location
-     * @param line
-     *            ignored by the default impl
-     * @param cursor
-     *            ignored by the default impl
-     * @throws TemplateParseException
-     *             always thrown in order to terminate the parse.
-     */
-
-    protected void templateParseProblem(String message, Location location, int line, int cursor)
-            throws TemplateParseException
-    {
-        throw new TemplateParseException(message, location);
-    }
-
-    /**
-     * Used by the parser to report tapestry runtime specific problems in the parse. Parsing <b>must
-     * </b> stop when a problem is reported.
-     * <p>
-     * The default implementation simply rethrows the exception.
-     * <p>
-     * Subclasses may override but <b>must </b> ensure they rethrow the exception.
-     * 
-     * @param exception
-     * @param line
-     *            ignored by the default impl
-     * @param cursor
-     *            ignored by the default impl
-     * @throws ApplicationRuntimeException
-     *             always rethrown in order to terminate the parse.
-     */
-
-    protected void templateParseProblem(ApplicationRuntimeException exception, int line, int cursor)
-    {
-        throw exception;
-    }
-
-    /**
-     * Give subclasses access to the parse results.
-     */
-    protected List getTokens()
-    {
-        if (_tokens == null)
-            return Collections.EMPTY_LIST;
-
-        return _tokens;
-    }
-
-    /**
-     * Checks to see if the next few characters match a given pattern.
-     */
-
-    private boolean lookahead(char[] match)
-    {
-        try
-        {
-            for (int i = 0; i < match.length; i++)
-            {
-                if (_templateData[_cursor + i] != match[i])
-                    return false;
-            }
-
-            // Every character matched.
-
-            return true;
-        }
-        catch (IndexOutOfBoundsException ex)
-        {
-            return false;
-        }
-    }
-
-    protected void parse() throws TemplateParseException
-    {
-        _cursor = 0;
-        _blockStart = -1;
-        int length = _templateData.length;
-        
-        while (_cursor < length)
-        {
-            if (_templateData[_cursor] != '<')
-            {
-                if (_blockStart < 0 && !_ignoring)
-                    _blockStart = _cursor;
-                
-                advance();
-                continue;
-            }
-            
-            // OK, start of something.
-            
-            if (lookahead(CLOSE_TAG))
-            {
-                closeTag();
-                continue;
-            }
-
-            if (lookahead(COMMENT_START))
-            {
-                skipComment();
-                continue;
-            }
-            
-            // The start of some tag.
-            
-            startTag();
-        }
-        
-        // Usually there's some text at the end of the template (after the last closing tag) that
-        // should
-        // be added. Often the last few tags are static tags so we definately
-        // need to end the text block.
-        
-        addTextToken(_templateData.length - 1);
-    }
-
-    /**
-     * Advance forward in the document until the end of the comment is reached. In addition, skip
-     * any whitespace following the comment.
-     */
-
-    private void skipComment() throws TemplateParseException
-    {
-        int length = _templateData.length;
-        int startLine = _line;
-
-        if (_blockStart < 0 && !_ignoring)
-            _blockStart = _cursor;
-
-        while (true)
-        {
-            if (_cursor >= length)
-                templateParseProblem(ParseMessages.commentNotEnded(startLine), new LocationImpl(
-                        _resourceLocation, startLine), startLine, _cursor);
-
-            if (lookahead(COMMENT_END))
-                break;
-
-            // Not the end of the comment, advance over it.
-
-            advance();
-        }
-
-        _cursor += COMMENT_END.length;
-        advanceOverWhitespace();
-    }
-
-    private void addTextToken(int end)
-    {
-        // No active block to add to.
-
-        if (_blockStart < 0)
-            return;
-
-        if (_blockStart <= end)
-        {
-            // This seems odd, shouldn't the location be the current location? I guess
-            // no errors are ever reported for a text token.
-
-            TemplateToken token = _factory.createTextToken(
-                    _templateData,
-                    _blockStart,
-                    end,
-                    _templateLocation);
-
-            _tokens.add(token);
-        }
-
-        _blockStart = -1;
-    }
-
-    private void startTag() throws TemplateParseException
-    {
-        int cursorStart = _cursor;
-        int length = _templateData.length;
-        String tagName = null;
-        boolean endOfTag = false;
-        boolean emptyTag = false;
-        int startLine = _line;
-        Location startLocation = new LocationImpl(_resourceLocation, startLine);
-
-        tagBeginEvent(startLine, _cursor);
-
-        advance();
-
-        // Collect the element type
-
-        while (_cursor < length)
-        {
-            char ch = _templateData[_cursor];
-
-            if (ch == '/' || ch == '>' || Character.isWhitespace(ch))
-            {
-                tagName = new String(_templateData, cursorStart + 1, _cursor - cursorStart - 1);
-
-                break;
-            }
-
-            advance();
-        }
-
-        String attributeName = null;
-        int attributeNameStart = -1;
-        int attributeValueStart = -1;
-        int state = WAIT_FOR_ATTRIBUTE_NAME;
-        char quoteChar = 0;
-
-        _attributes.clear();
-
-        // Collect each attribute
-
-        while (!endOfTag)
-        {
-            if (_cursor >= length)
-            {
-                String message = (tagName == null) ? ParseMessages.unclosedUnknownTag(startLine)
-                        : ParseMessages.unclosedTag(tagName, startLine);
-
-                templateParseProblem(message, startLocation, startLine, cursorStart);
-            }
-
-            char ch = _templateData[_cursor];
-
-            switch (state)
-            {
-                case WAIT_FOR_ATTRIBUTE_NAME:
-
-                    // Ignore whitespace before the next attribute name, while
-                    // looking for the end of the current tag.
-
-                    if (ch == '/')
-                    {
-                        emptyTag = true;
-                        advance();
-                        break;
-                    }
-
-                    if (ch == '>')
-                    {
-                        endOfTag = true;
-                        break;
-                    }
-
-                    if (Character.isWhitespace(ch))
-                    {
-                        advance();
-                        break;
-                    }
-
-                    // Found non-whitespace, assume its the attribute name.
-                    // Note: could use a check here for non-alpha.
-
-                    attributeNameStart = _cursor;
-                    state = COLLECT_ATTRIBUTE_NAME;
-                    advance();
-                    break;
-
-                case COLLECT_ATTRIBUTE_NAME:
-
-                    // Looking for end of attribute name.
-
-                    if (ch == '=' || ch == '/' || ch == '>' || Character.isWhitespace(ch))
-                    {
-                        attributeName = new String(_templateData, attributeNameStart, _cursor
-                                - attributeNameStart);
-
-                        state = ADVANCE_PAST_EQUALS;
-                        break;
-                    }
-
-                    // Part of the attribute name
-
-                    advance();
-                    break;
-
-                case ADVANCE_PAST_EQUALS:
-
-                    // Looking for the '=' sign. May hit the end of the tag, or (for bare
-                    // attributes),
-                    // the next attribute name.
-
-                    if (ch == '/' || ch == '>')
-                    {
-                        // A bare attribute, which is not interesting to
-                        // us.
-
-                        state = WAIT_FOR_ATTRIBUTE_NAME;
-                        break;
-                    }
-
-                    if (Character.isWhitespace(ch))
-                    {
-                        advance();
-                        break;
-                    }
-
-                    if (ch == '=')
-                    {
-                        state = WAIT_FOR_ATTRIBUTE_VALUE;
-                        quoteChar = 0;
-                        attributeValueStart = -1;
-                        advance();
-                        break;
-                    }
-
-                    // Otherwise, an HTML style "bare" attribute (such as <select multiple>).
-                    // We aren't interested in those (we're just looking for the id or jwcid
-                    // attribute).
-
-                    state = WAIT_FOR_ATTRIBUTE_NAME;
-                    break;
-
-                case WAIT_FOR_ATTRIBUTE_VALUE:
-
-                    if (ch == '/' || ch == '>')
-                        templateParseProblem(ParseMessages.missingAttributeValue(
-                                tagName,
-                                _line,
-                                attributeName), getCurrentLocation(), _line, _cursor);
-
-                    // Ignore whitespace between '=' and the attribute value. Also, look
-                    // for initial quote.
-
-                    if (Character.isWhitespace(ch))
-                    {
-                        advance();
-                        break;
-                    }
-
-                    if (ch == '\'' || ch == '"')
-                    {
-                        quoteChar = ch;
-
-                        state = COLLECT_QUOTED_VALUE;
-                        advance();
-                        attributeValueStart = _cursor;
-                        attributeBeginEvent(attributeName, _line, attributeValueStart);
-                        break;
-                    }
-
-                    // Not whitespace or quote, must be start of unquoted attribute.
-
-                    state = COLLECT_UNQUOTED_VALUE;
-                    attributeValueStart = _cursor;
-                    attributeBeginEvent(attributeName, _line, attributeValueStart);
-                    break;
-
-                case COLLECT_QUOTED_VALUE:
-
-                    // Start collecting the quoted attribute value. Stop at the matching quote
-                    // character,
-                    // unless bare, in which case, stop at the next whitespace.
-
-                    if (ch == quoteChar)
-                    {
-                        String attributeValue = new String(_templateData, attributeValueStart,
-                                _cursor - attributeValueStart);
-
-                        attributeEndEvent(_cursor);
-
-                        addAttributeIfUnique(tagName, attributeName, attributeValue);
-
-                        // Advance over the quote.
-                        advance();
-                        state = WAIT_FOR_ATTRIBUTE_NAME;
-                        break;
-                    }
-
-                    advance();
-                    break;
-
-                case COLLECT_UNQUOTED_VALUE:
-
-                    // An unquoted attribute value ends with whitespace
-                    // or the end of the enclosing tag.
-
-                    if (ch == '/' || ch == '>' || Character.isWhitespace(ch))
-                    {
-                        String attributeValue = new String(_templateData, attributeValueStart,
-                                _cursor - attributeValueStart);
-
-                        attributeEndEvent(_cursor);
-                        addAttributeIfUnique(tagName, attributeName, attributeValue);
-
-                        state = WAIT_FOR_ATTRIBUTE_NAME;
-                        break;
-                    }
-
-                    advance();
-                    break;
-            }
-        }
-
-        tagEndEvent(_cursor);
-
-        // Check for invisible localizations
-        
-        String localizationKey = findValueCaselessly(LOCALIZATION_KEY_ATTRIBUTE_NAME, _attributes);
-        String jwcId = findValueCaselessly(_componentAttributeName, _attributes);
-        
-        if (localizationKey != null && jwcId == null)
-        {
-            if (_ignoring)
-                templateParseProblem(
-                        ParseMessages.componentMayNotBeIgnored(tagName, startLine),
-                        startLocation,
-                        startLine,
-                        cursorStart);
-            
-            // If the tag isn't empty, then create a Tag instance to ignore the
-            // body of the tag.
-            
-            if (!emptyTag)
-            {
-                Tag tag = new Tag(tagName, startLine);
-                
-                tag._component = false;
-                tag._removeTag = false;
-                tag._ignoringBody = true;
-                tag._mustBalance = true;
-                
-                _stack.add(tag);
-                
-                // Start ignoring content until the close tag.
-                
-                _ignoring = true;
-            }
-            else
-            {
-                // Cursor is at the closing carat, advance over it.
-                advance();
-                // TAPESTRY-359: *don't* skip whitespace advanceOverWhitespace()
-            }
-            
-            // End any open block.
-            
-            addTextToken(cursorStart - 1);
-            
-            boolean raw = checkBoolean(RAW_ATTRIBUTE_NAME, _attributes);
-            
-            Map attributes = filter(_attributes, new String[] { LOCALIZATION_KEY_ATTRIBUTE_NAME, RAW_ATTRIBUTE_NAME });
-            
-            TemplateToken token = _factory.createLocalizationToken(
-                    tagName,
-                    localizationKey,
-                    raw,
-                    attributes,
-                    startLocation);
-            
-            _tokens.add(token);
-            
-            return;
-        }
-        
-        if (jwcId != null)
-        {
-            processComponentStart(tagName, jwcId, emptyTag, startLine, cursorStart, startLocation);
-            return;
-        }
-
-        // A static tag (not a tag without a jwcid attribute).
-        // We need to record this so that we can match close tags later.
-
-        if (!emptyTag)
-        {
-            Tag tag = new Tag(tagName, startLine);
-            _stack.add(tag);
-        }
-
-        // If there wasn't an active block, then start one.
-
-        if (_blockStart < 0 && !_ignoring)
-            _blockStart = cursorStart;
-
-        advance();
-    }
-
-    /**
-     * @throws TemplateParseException
-     * @since 4.0
-     */
-
-    private void addAttributeIfUnique(String tagName, String attributeName, String attributeValue)
-            throws TemplateParseException
-    {
-
-        if (_attributes.containsKey(attributeName))
-            templateParseProblem(
-                    ParseMessages.duplicateTagAttribute(tagName, _line, attributeName),
-                    getCurrentLocation(),
-                    _line,
-                    _cursor);
-
-        _attributes.put(attributeName, attributeValue);
-    }
-
-    /**
-     * Processes a tag that is the open tag for a component (but also handles the $remove$ and
-     * $content$ tags).
-     */
-
-    /**
-     * Notify that the beginning of a tag has been detected.
-     * <p>
-     * Default implementation does nothing.
-     */
-    protected void tagBeginEvent(int startLine, int cursorPosition)
-    {
-    }
-
-    /**
-     * Notify that the end of the current tag has been detected.
-     * <p>
-     * Default implementation does nothing.
-     */
-    protected void tagEndEvent(int cursorPosition)
-    {
-    }
-
-    /**
-     * Notify that the beginning of an attribute value has been detected.
-     * <p>
-     * Default implementation does nothing.
-     */
-    protected void attributeBeginEvent(String attributeName, int startLine, int cursorPosition)
-    {
-    }
-
-    /**
-     * Notify that the end of the current attribute value has been detected.
-     * <p>
-     * Default implementation does nothing.
-     */
-    protected void attributeEndEvent(int cursorPosition)
-    {
-    }
-
-    private void processComponentStart(String tagName, String jwcId, boolean emptyTag,
-            int startLine, int cursorStart, Location startLocation) throws TemplateParseException
-    {
-        String componentId = jwcId;
-        if (componentId.equalsIgnoreCase(CONTENT_ID))
-        {
-            processContentTag(tagName, startLine, cursorStart, emptyTag);
-
-            return;
-        }
-
-        boolean isRemoveId = componentId.equalsIgnoreCase(REMOVE_ID);
-
-        if (_ignoring && !isRemoveId)
-            templateParseProblem(
-                    ParseMessages.componentMayNotBeIgnored(tagName, startLine),
-                    startLocation,
-                    startLine,
-                    cursorStart);
-
-        String type = null;
-        boolean allowBody = false;
-
-        if (_patternMatcher.matches(componentId, _implicitIdPattern))
-        {
-            MatchResult match = _patternMatcher.getMatch();
-
-            componentId = match.group(IMPLICIT_ID_PATTERN_ID_GROUP);
-            type = match.group(IMPLICIT_ID_PATTERN_TYPE_GROUP);
-
-            String libraryId = match.group(IMPLICIT_ID_PATTERN_LIBRARY_ID_GROUP);
-            String simpleType = match.group(IMPLICIT_ID_PATTERN_SIMPLE_TYPE_GROUP);
-
-            // If (and this is typical) no actual component id was specified,
-            // then generate one on the fly.
-            // The allocated id for anonymous components is
-            // based on the simple (unprefixed) type, but starts
-            // with a leading dollar sign to ensure no conflicts
-            // with user defined component ids (which don't allow dollar signs
-            // in the id).
-            // New for 4.0: the component type may included slashes ('/'), but these
-            // are not valid identifiers, so we convert them to '$'.
-
-            if (componentId == null)
-                componentId = _idAllocator.allocateId("$" + simpleType.replace('/', '$'));
-
-            try
-            {
-                allowBody = _delegate.getAllowBody(libraryId, simpleType, startLocation);
-            }
-            catch (ApplicationRuntimeException e)
-            {
-                // give subclasses a chance to handle and rethrow
-                templateParseProblem(e, startLine, cursorStart);
-            }
-
-        }
-        else
-        {
-            if (!isRemoveId)
-            {
-                if (!_patternMatcher.matches(componentId, _simpleIdPattern))
-                    templateParseProblem(
-                            ParseMessages.componentIdInvalid(tagName, startLine, componentId),
-                            startLocation,
-                            startLine,
-                            cursorStart);
-
-                if (!_delegate.getKnownComponent(componentId))
-                    templateParseProblem(
-                            ParseMessages.unknownComponentId(tagName, startLine, componentId),
-                            startLocation,
-                            startLine,
-                            cursorStart);
-
-                try
-                {
-                    allowBody = _delegate.getAllowBody(componentId, startLocation);
-                }
-                catch (ApplicationRuntimeException e)
-                {
-                    // give subclasses a chance to handle and rethrow
-                    templateParseProblem(e, startLine, cursorStart);
-                }
-            }
-        }
-
-        // Ignore the body if we're removing the entire tag,
-        // of if the corresponding component doesn't allow
-        // a body.
-
-        boolean ignoreBody = !emptyTag && (isRemoveId || !allowBody);
-
-        if (_ignoring && ignoreBody)
-            templateParseProblem(ParseMessages.nestedIgnore(tagName, startLine), new LocationImpl(
-                    _resourceLocation, startLine), startLine, cursorStart);
-
-        if (!emptyTag)
-            pushNewTag(tagName, startLine, isRemoveId, ignoreBody);
-
-        // End any open block.
-
-        addTextToken(cursorStart - 1);
-
-        if (!isRemoveId)
-        {
-            addOpenToken(tagName, componentId, type, startLocation);
-
-            if (emptyTag)
-                _tokens.add(_factory.createCloseToken(tagName, getCurrentLocation()));
-        }
-
-        advance();
-    }
-
-    private void pushNewTag(String tagName, int startLine, boolean isRemoveId, boolean ignoreBody)
-    {
-        Tag tag = new Tag(tagName, startLine);
-
-        tag._component = !isRemoveId;
-        tag._removeTag = isRemoveId;
-
-        tag._ignoringBody = ignoreBody;
-
-        _ignoring = tag._ignoringBody;
-
-        tag._mustBalance = true;
-
-        _stack.add(tag);
-    }
-
-    private void processContentTag(String tagName, int startLine, int cursorStart, boolean emptyTag)
-            throws TemplateParseException
-    {
-        if (_ignoring)
-            templateParseProblem(
-                    ParseMessages.contentBlockMayNotBeIgnored(tagName, startLine),
-                    new LocationImpl(_resourceLocation, startLine),
-                    startLine,
-                    cursorStart);
-
-        if (emptyTag)
-            templateParseProblem(
-                    ParseMessages.contentBlockMayNotBeEmpty(tagName, startLine),
-                    new LocationImpl(_resourceLocation, startLine),
-                    startLine,
-                    cursorStart);
-
-        _tokens.clear();
-        _blockStart = -1;
-
-        Tag tag = new Tag(tagName, startLine);
-
-        tag._mustBalance = true;
-        tag._content = true;
-
-        _stack.clear();
-        _stack.add(tag);
-
-        advance();
-    }
-
-    private void addOpenToken(String tagName, String jwcId, String type, Location location)
-    {
-        OpenToken token = _factory.createOpenToken(tagName, jwcId, type, location);
-        _tokens.add(token);
-
-        if (_attributes.isEmpty())
-            return;
-
-        Iterator i = _attributes.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            String key = (String) entry.getKey();
-
-            if (key.equalsIgnoreCase(_componentAttributeName))
-                continue;
-
-            String value = (String) entry.getValue();
-
-            addAttributeToToken(token, key, value);
-        }
-    }
-
-    /**
-     * Adds the attribute to the token (identifying prefixes and whatnot is now done downstream).
-     * 
-     * @since 3.0
-     */
-
-    private void addAttributeToToken(OpenToken token, String name, String attributeValue)
-    {
-        token.addAttribute(name, convertEntitiesToPlain(attributeValue));
-    }
-
-    /**
-     * Invoked to handle a closing tag, i.e., &lt;/foo&gt;. When a tag closes, it will match against
-     * a tag on the open tag start. Preferably the top tag on the stack (if everything is well
-     * balanced), but this is HTML, not XML, so many tags won't balance.
-     * <p>
-     * Once the matching tag is located, the question is ... is the tag dynamic or static? If
-     * static, then the current text block is extended to include this close tag. If dynamic, then
-     * the current text block is ended (before the '&lt;' that starts the tag) and a close token is
-     * added.
-     * <p>
-     * In either case, the matching static element and anything above it is removed, and the cursor
-     * is left on the character following the '&gt;'.
-     */
-
-    private void closeTag() throws TemplateParseException
-    {
-        int cursorStart = _cursor;
-        int length = _templateData.length;
-        int startLine = _line;
-
-        Location startLocation = getCurrentLocation();
-
-        _cursor += CLOSE_TAG.length;
-
-        int tagStart = _cursor;
-
-        while (true)
-        {
-            if (_cursor >= length)
-                templateParseProblem(
-                        ParseMessages.incompleteCloseTag(startLine),
-                        startLocation,
-                        startLine,
-                        cursorStart);
-
-            char ch = _templateData[_cursor];
-
-            if (ch == '>')
-                break;
-
-            advance();
-        }
-
-        String tagName = new String(_templateData, tagStart, _cursor - tagStart);
-
-        int stackPos = _stack.size() - 1;
-        Tag tag = null;
-
-        while (stackPos >= 0)
-        {
-            tag = (Tag) _stack.get(stackPos);
-
-            if (tag.match(tagName))
-                break;
-
-            if (tag._mustBalance)
-                templateParseProblem(ParseMessages.improperlyNestedCloseTag(
-                        tagName,
-                        startLine,
-                        tag._tagName,
-                        tag._line), startLocation, startLine, cursorStart);
-
-            stackPos--;
-        }
-
-        if (stackPos < 0)
-            templateParseProblem(
-                    ParseMessages.unmatchedCloseTag(tagName, startLine),
-                    startLocation,
-                    startLine,
-                    cursorStart);
-
-        // Special case for the content tag
-
-        if (tag._content)
-        {
-            addTextToken(cursorStart - 1);
-
-            // Advance the cursor right to the end.
-
-            _cursor = length;
-            _stack.clear();
-            return;
-        }
-
-        // When a component closes, add a CLOSE tag.
-        if (tag._component)
-        {
-            addTextToken(cursorStart - 1);
-
-            _tokens.add(_factory.createCloseToken(tagName, getCurrentLocation()));
-        }
-        else
-        {
-            // The close of a static tag. Unless removing the tag
-            // entirely, make sure the block tag is part of a text block.
-
-            if (_blockStart < 0 && !tag._removeTag && !_ignoring)
-                _blockStart = cursorStart;
-        }
-
-        // Remove all elements at stackPos or above.
-
-        for (int i = _stack.size() - 1; i >= stackPos; i--)
-            _stack.remove(i);
-
-        // Advance cursor past '>'
-
-        advance();
-
-        // If editting out the tag (i.e., $remove$) then kill any whitespace.
-        // For components that simply don't contain a body, removeTag will
-        // be false.
-
-        if (tag._removeTag)
-            advanceOverWhitespace();
-
-        // If we were ignoring the body of the tag, then clear the ignoring
-        // flag, since we're out of the body.
-
-        if (tag._ignoringBody)
-            _ignoring = false;
-    }
-
-    /**
-     * Advances the cursor to the next character. If the end-of-line is reached, then increments the
-     * line counter.
-     */
-
-    private void advance()
-    {
-        int length = _templateData.length;
-
-        if (_cursor >= length)
-            return;
-        
-        char ch = _templateData[_cursor];
-        
-        _cursor++;
-        
-        if (ch == '\n')
-        {
-            _line++;
-            _currentLocation = null;
-            return;
-        }
-        
-        // A \r, or a \r\n also counts as a new line.
-        
-        if (ch == '\r')
-        {
-            _line++;
-            _currentLocation = null;
-            
-            if (_cursor < length && _templateData[_cursor] == '\n')
-                _cursor++;
-            
-            return;
-        }
-        
-        // Not an end-of-line character.
-    }
-
-    private void advanceOverWhitespace()
-    {
-        int length = _templateData.length;
-
-        while (_cursor < length)
-        {
-            char ch = _templateData[_cursor];
-            if (!Character.isWhitespace(ch))
-                return;
-
-            advance();
-        }
-    }
-
-    /**
-     * Returns a new Map that is a copy of the input Map with some key/value pairs removed. A list
-     * of keys is passed in and matching keys (caseless comparison) from the input Map are excluded
-     * from the output map. May return null (rather than return an empty Map).
-     */
-
-    private Map filter(Map input, String[] removeKeys)
-    {
-        if (input == null || input.isEmpty())
-            return null;
-
-        Map result = null;
-
-        Iterator i = input.entrySet().iterator();
-
-        nextkey: while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            String key = (String) entry.getKey();
-
-            for (int j = 0; j < removeKeys.length; j++)
-            {
-                if (key.equalsIgnoreCase(removeKeys[j]))
-                    continue nextkey;
-            }
-
-            if (result == null)
-                result = new HashMap(input.size());
-
-            result.put(key, entry.getValue());
-        }
-
-        return result;
-    }
-
-    /**
-     * Searches a Map for given key, caselessly. The Map is expected to consist of Strings for keys
-     * and values. Returns the value for the first key found that matches (caselessly) the input
-     * key. Returns null if no value found.
-     */
-
-    protected String findValueCaselessly(String key, Map map)
-    {
-        String result = (String) map.get(key);
-
-        if (result != null)
-            return result;
-
-        Iterator i = map.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            String entryKey = (String) entry.getKey();
-
-            if (entryKey.equalsIgnoreCase(key))
-                return (String) entry.getValue();
-        }
-
-        return null;
-    }
-
-    /**
-     * Provided a raw input string that has been recognized to be an expression, this removes excess
-     * white space and converts &amp;amp;;, &amp;quot;; &amp;lt;; and &amp;gt;; to their normal
-     * character values (otherwise its impossible to specify those values in expressions in the
-     * template).
-     */
-
-    private String convertEntitiesToPlain(String input)
-    {
-        int inputLength = input.length();
-
-        StringBuffer buffer = new StringBuffer(inputLength);
-
-        int cursor = 0;
-
-        outer: while (cursor < inputLength)
-        {
-            for (int i = 0; i < CONVERSIONS.length; i += 2)
-            {
-                String entity = CONVERSIONS[i];
-                int entityLength = entity.length();
-                String value = CONVERSIONS[i + 1];
-
-                if (cursor + entityLength > inputLength)
-                    continue;
-
-                if (input.substring(cursor, cursor + entityLength).equals(entity))
-                {
-                    buffer.append(value);
-                    cursor += entityLength;
-                    continue outer;
-                }
-            }
-
-            buffer.append(input.charAt(cursor));
-            cursor++;
-        }
-
-        return buffer.toString().trim();
-    }
-
-    /**
-     * Returns true if the map contains the given key (caseless search) and the value is "true"
-     * (caseless comparison).
-     */
-
-    private boolean checkBoolean(String key, Map map)
-    {
-        String value = findValueCaselessly(key, map);
-
-        if (value == null)
-            return false;
-
-        return value.equalsIgnoreCase("true");
-    }
-
-    /**
-     * Gets the current location within the file. This allows the location to be created only as
-     * needed, and multiple objects on the same line can share the same Location instance.
-     * 
-     * @since 3.0
-     */
-
-    protected Location getCurrentLocation()
-    {
-        if (_currentLocation == null)
-            _currentLocation = new LocationImpl(_resourceLocation, _line);
-
-        return _currentLocation;
-    }
-
-    public void setFactory(TemplateTokenFactory factory)
-    {
-        _factory = factory;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateToken.java
deleted file mode 100644
index dac5a2c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateToken.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.ToStringBuilder;
-
-/**
- * Base class for a number of different types of tokens that can be extracted from a page/component
- * template. This class defines the type of the token, subclasses provide interpretations on the
- * token.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class TemplateToken implements Locatable
-{
-    private TokenType _type;
-
-    private Location _location;
-
-    protected TemplateToken(TokenType type, Location location)
-    {
-        _type = type;
-        _location = location;
-    }
-
-    public TokenType getType()
-    {
-        return _type;
-    }
-
-    public Location getLocation()
-    {
-        return _location;
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("type", _type.getName());
-        builder.append("location", _location);
-        
-        extendDescription(builder);
-
-        return builder.toString();
-    }
-
-    /**
-     * Overridden in subclasses to append additional fields (defined in the subclass) to the
-     * description. Subclasses may override this method without invoking this implementation, which
-     * is empty.
-     * 
-     * @since 3.0
-     */
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateTokenFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateTokenFactory.java
deleted file mode 100644
index 43fcfe2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TemplateTokenFactory.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import java.util.Map;
-
-import org.apache.hivemind.Location;
-
-/**
- * A Factory used by {@link org.apache.tapestry.parse.TemplateParser} to create
- * {@link org.apache.tapestry.parse.TemplateToken} objects.
- * 
- * <p>
- * This class is extended by Spindle - the Eclipse Plugin for Tapestry.
- * </p>
- * 
- * @author glongman@intelligentworks.com
- * @since 3.0
- */
-public class TemplateTokenFactory
-{
-
-    public OpenToken createOpenToken(String tagName, String jwcId, String type,
-            Location location)
-    {
-        return new OpenToken(tagName, jwcId, type, location);
-    }
-
-    public CloseToken createCloseToken(String tagName, Location location)
-    {
-        return new CloseToken(tagName, location);
-    }
-
-    public TextToken createTextToken(char[] templateData, int blockStart, int end, Location templateLocation)
-    {
-        return new TextToken(templateData, blockStart, end, templateLocation);
-    }
-
-    public LocalizationToken createLocalizationToken(String tagName, String localizationKey, 
-            boolean raw, Map attributes, Location startLocation)
-    {
-        return new LocalizationToken(tagName, localizationKey, raw, attributes, startLocation);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TextToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TextToken.java
deleted file mode 100644
index 46a6f01..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TextToken.java
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.ToStringBuilder;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Represents static text in the template that may be passed through to the client unchanged
- * (except, perhaps, for the removal of some whitespace).
- * 
- * @see TokenType#TEXT
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class TextToken extends TemplateToken implements IRender
-{
-    private char[] _templateData;
-
-    private int _offset;
-
-    private int _length;
-
-    public TextToken(char[] templateData, int startIndex, int endIndex, Location location)
-    {
-        super(TokenType.TEXT, location);
-
-        if (startIndex < 0 || endIndex < 0 || startIndex > templateData.length
-                || endIndex > templateData.length)
-            throw new ApplicationRuntimeException(ParseMessages.rangeError(
-                    this,
-                    templateData.length), this, getLocation(), null);
-
-        _templateData = templateData;
-
-        _offset = startIndex;
-        _length = endIndex - startIndex + 1;
-    }
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (_length == 0)
-            return;
-
-        // At one time, we would check to see if the cycle was rewinding and
-        // only invoke printRaw() if it was. However, that slows down
-        // normal rendering (microscopically) and, with the new
-        // NullResponseWriter class, the "cost" of invoking cycle.isRewinding()
-        // is approximately the same as the "cost" of invoking writer.printRaw().
-
-        writer.printRaw(_templateData, _offset, _length);
-    }
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-        builder.append("offset", _offset);
-        builder.append("length", _length);
-        builder.append("templateData", getTemplateDataAsString());
-    }
-
-    public String getTemplateDataAsString()
-    {
-        return new String(_templateData, _offset, _length);
-    }
-
-    public int getLength()
-    {
-        return _length;
-    }
-
-    public int getOffset()
-    {
-        return _offset;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TokenType.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TokenType.java
deleted file mode 100644
index 2ffdb86..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/TokenType.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-/**
- * An enumeration of the different possible token types.
- * 
- * @see TemplateToken
- * @author Howard Lewis Ship
- */
-
-public final class TokenType
-{
-
-    /**
-     * Raw HTML text.
-     * 
-     * @see TextToken
-     */
-
-    public static final TokenType TEXT = new TokenType("TEXT");
-
-    /**
-     * The opening tag of an element.
-     * 
-     * @see OpenToken
-     */
-
-    public static final TokenType OPEN = new TokenType("OPEN");
-
-    /**
-     * The closing tag of an element.
-     * 
-     * @see CloseToken
-     */
-
-    public static final TokenType CLOSE = new TokenType("CLOSE");
-
-    /**
-     * A reference to a localized string.
-     * 
-     * @since 2.0.4
-     */
-
-    public static final TokenType LOCALIZATION = new TokenType("LOCALIZATION");
-
-    private final String _name;
-
-    private TokenType(String name)
-    {
-        _name = name;
-    }
-
-    public String toString()
-    {
-        return "TokenType[" + _name + "]";
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/package.html
deleted file mode 100644
index 25e98ec..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/parse/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Classes used when parsing templates, application and component specifications.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/AbstractPrefixedClientPropertyPersistenceScope.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/AbstractPrefixedClientPropertyPersistenceScope.java
deleted file mode 100644
index 7eab47f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/AbstractPrefixedClientPropertyPersistenceScope.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.hivemind.util.Defense;
-
-/**
- * Base implementation of {@link org.apache.tapestry.record.ClientPropertyPersistenceScope} wherein
- * the scopes are recognized via a prefix on the page name to form the query parameter name.
- * Capiche?
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public abstract class AbstractPrefixedClientPropertyPersistenceScope implements
-        ClientPropertyPersistenceScope
-{
-    private final String _prefix;
-
-    public AbstractPrefixedClientPropertyPersistenceScope(String prefix)
-    {
-        Defense.notNull(prefix, "prefix");
-
-        _prefix = prefix;
-    }
-
-    public String constructParameterName(String pageName)
-    {
-        return _prefix + pageName;
-    }
-
-    public boolean isParameterForScope(String parameterName)
-    {
-        return parameterName.startsWith(_prefix);
-    }
-
-    public String extractPageName(String parameterName)
-    {
-        return parameterName.substring(_prefix.length());
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/AppClientPropertyPersistenceScope.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/AppClientPropertyPersistenceScope.java
deleted file mode 100644
index 7655f84..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/AppClientPropertyPersistenceScope.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.tapestry.engine.ServiceEncoding;
-
-/**
- * Defines the 'app' scope for persisting client properties. Persist the properties in all cases.
- * 
- * @author Mindbridge
- * @since 4.0
- * @see org.apache.tapestry.record.ClientPropertyPersistenceScope
- */
-public class AppClientPropertyPersistenceScope extends
-        AbstractPrefixedClientPropertyPersistenceScope
-{
-
-    public AppClientPropertyPersistenceScope()
-    {
-        super("appstate:");
-    }
-
-    /**
-     * Always returns true.
-     */
-
-    public boolean shouldEncodeState(ServiceEncoding encoding, String pageName,
-            PersistentPropertyData data)
-    {
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/ChangeKey.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/ChangeKey.java
deleted file mode 100644
index 91dc5b6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/ChangeKey.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.hivemind.util.Defense;
-
-/**
- * Used to identify a property change.
- * 
- * @author Howard Lewis Ship
- */
-
-public class ChangeKey
-{
-    private int _hashCode = -1;
-
-    private String _componentPath;
-
-    private String _propertyName;
-
-    public ChangeKey(String componentPath, String propertyName)
-    {
-        Defense.notNull(propertyName, "propertyName");
-
-        _componentPath = componentPath;
-        _propertyName = propertyName;
-    }
-
-    public boolean equals(Object object)
-    {
-        if (object == null)
-            return false;
-
-        if (this == object)
-            return true;
-
-        if (!(object instanceof ChangeKey))
-            return false;
-
-        ChangeKey other = (ChangeKey) object;
-
-        return same(_propertyName, other._propertyName)
-                && same(_componentPath, other._componentPath);
-    }
-
-    private boolean same(String s1, String s2)
-    {
-        return s1 == s2 || (s1 != null && s1.equals(s2));
-    }
-
-    public String getComponentPath()
-    {
-        return _componentPath;
-    }
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    /**
-     * Returns a hash code computed from the property name and component path.
-     */
-
-    public int hashCode()
-    {
-        if (_hashCode == -1)
-        {
-            _hashCode = 31 * 27 + _propertyName.hashCode();
-
-            if (_componentPath != null)
-                _hashCode = 31 * _hashCode + _componentPath.hashCode();
-        }
-
-        return _hashCode;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/ClientPropertyPersistenceScope.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/ClientPropertyPersistenceScope.java
deleted file mode 100644
index e9fb4ce..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/ClientPropertyPersistenceScope.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.tapestry.engine.ServiceEncoding;
-
-/**
- * Service tapestry.persist.ClientPropertyPersistenceScope. Determines whether a particular property
- * needs to be persisted or not.
- *
- * @author Mindbridge
- * @since 4.0
- * @see org.apache.tapestry.record.ClientPropertyPersistenceStrategy
- */
-public interface ClientPropertyPersistenceScope
-{
-    /**
-     * Determines whether state should be encoded for the request.
-     *
-     * @param encoding
-     *            identifies the service, URL and base set of parameters
-     * @param pageName
-     *            the page for which data is potentially to be encoded
-     * @param data
-     *              The data to check.
-     * @return true if state should be encoded into the encoding, false otherwise
-     */
-
-    boolean shouldEncodeState(ServiceEncoding encoding, String pageName, PersistentPropertyData data);
-
-    /**
-     * Constructs a parameter name for a particular page name. The parameter name can be recognized
-     * (in a later request) by the {@link #isParameterForScope(String)} method.
-     *
-     * @param pageName
-     *            the name of the page for which a corresponding parameter name should be generated.
-     * @return a query parameter name that identifies the page and this client persistence scope.
-     */
-
-    String constructParameterName(String pageName);
-
-    /**
-     * Checks a parameter to see if it was the result of {@link #constructParameterName(String)} for
-     * this persistence scope.
-     *
-     * @param parameterName
-     *            a query parameter name
-     * @return true if the parameterName was genereted (i.e., is properly prefixed) by this scope,
-     *         false otherwise.
-     */
-
-    boolean isParameterForScope(String parameterName);
-
-    /**
-     * Extracts a page name from a query parameter name.
-     *
-     * @param parameterName
-     *            the paramter name, for which {@link #isParameterForScope(String)} must return true
-     * @return the name of the page
-     */
-    String extractPageName(String parameterName);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/ClientPropertyPersistenceStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/ClientPropertyPersistenceStrategy.java
deleted file mode 100644
index e70925c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/ClientPropertyPersistenceStrategy.java
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.web.WebRequest;
-
-import java.util.*;
-
-/**
- * Service tapestry.persist.ClientPropertyPersistenceStrategy. Encodes persistent page properties on
- * the client as query parameters.
- * <p>
- * Uses the threaded model.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.engine.ILink
- */
-public class ClientPropertyPersistenceStrategy implements PropertyPersistenceStrategy
-{
-    /**
-     * Keyed on page name (String), values are
-     * {@link org.apache.tapestry.record.PersistentPropertyData}.
-     */
-    protected final Map _data = new LinkedHashMap();
-
-    protected PersistentPropertyDataEncoder _encoder;
-
-    protected WebRequest _request;
-
-    protected ClientPropertyPersistenceScope _scope;
-
-    /**
-     * Initializer for this service, invoked every time a service instance is created. This
-     * initializer pulls out of the request and query parameters whose prefix is "client:" and
-     * expects them to be encoded {@link PersistentPropertyData}, which are stored internally.
-     * Because the service model is threaded, this information is specific to a single request, and
-     * will be discarded at the end of the request.
-     */
-
-    public void initializeService()
-    {
-        List names = _request.getParameterNames();
-        Iterator i = names.iterator();
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-
-            if (!_scope.isParameterForScope(name))
-                continue;
-
-            String pageName = _scope.extractPageName(name);
-
-            String encoded = _request.getParameterValue(name);
-
-            PersistentPropertyData data = new PersistentPropertyData(_encoder);
-            data.storeEncoded(encoded);
-
-            _data.put(pageName, data);
-        }
-    }
-
-    public void store(String pageName, String idPath, String propertyName, Object newValue)
-    {
-        PersistentPropertyData data = (PersistentPropertyData) _data.get(pageName);
-        if (data == null)
-        {
-            data = new PersistentPropertyData(_encoder);
-            _data.put(pageName, data);
-        }
-
-        data.store(idPath, propertyName, newValue);
-    }
-
-    public Collection getStoredChanges(String pageName)
-    {
-        PersistentPropertyData data = (PersistentPropertyData) _data.get(pageName);
-
-        if (data == null)
-            return Collections.EMPTY_LIST;
-
-        return data.getPageChanges();
-    }
-
-    public void discardStoredChanges(String pageName)
-    {
-        _data.remove(pageName);
-    }
-
-    public void addParametersForPersistentProperties(ServiceEncoding encoding, boolean post)
-    {
-        Defense.notNull(encoding, "encoding");
- 
-        Iterator i = _data.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry e = (Map.Entry) i.next();
-
-            String pageName = (String) e.getKey();
-            PersistentPropertyData data = (PersistentPropertyData) e.getValue();
-
-            ClientPropertyPersistenceScope scope = getScope();
-
-            if (scope.shouldEncodeState(encoding, pageName, data))
-            {
-                String parameterName = _scope.constructParameterName(pageName);
-                encoding.setParameterValue(parameterName, data.getEncoded());
-            }
-        }
-    }
-
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-
-    public ClientPropertyPersistenceScope getScope()
-    {
-        return _scope;
-    }
-
-    public void setScope(ClientPropertyPersistenceScope scope)
-    {
-        _scope = scope;
-    }
-
-    public void setEncoder(PersistentPropertyDataEncoder encoder)
-    {
-        _encoder = encoder;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PageClientPropertyPersistenceScope.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PageClientPropertyPersistenceScope.java
deleted file mode 100644
index 9380aa6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PageClientPropertyPersistenceScope.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ServiceEncoding;
-
-/**
- * Defines the 'page' scope for persisting client properties. Persist the properties only if the
- * current page name is the same as that of the property.
- * 
- * @author Mindbridge
- * @since 4.0
- * @see org.apache.tapestry.record.ClientPropertyPersistenceScope
- */
-public class PageClientPropertyPersistenceScope extends
-        AbstractPrefixedClientPropertyPersistenceScope
-{
-    private IRequestCycle _requestCycle;
-
-    public PageClientPropertyPersistenceScope()
-    {
-        super("state:");
-    }
-
-    /**
-     * Returns true if the active page name matches the page for this property. This means that
-     * <em>after a new page has been activated</em>, the state is discarded.
-     */
-
-    public boolean shouldEncodeState(ServiceEncoding encoding, String pageName,
-            PersistentPropertyData data)
-    {
-        IPage page = _requestCycle.getPage();
-
-        // TAPESTRY-701: if you try to generate a link using, say, page or external service,
-        // from inside PageValidateListener.pageValidate(), then there may not be an active
-        // page yet. Seems like the right thing to do is hold onto any properties until
-        // we know what the active page is.  I know this one is going to cause a fight
-        // since its not clear whether keeping or discarding is the right way to go.
-        
-        if (page == null)
-            return true;
-
-        return pageName.equals(page.getPageName());
-    }
-
-    public void setRequestCycle(IRequestCycle requestCycle)
-    {
-        _requestCycle = requestCycle;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PageRecorderImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PageRecorderImpl.java
deleted file mode 100644
index a24eb68..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PageRecorderImpl.java
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.engine.IPageRecorder;
-import org.apache.tapestry.event.ObservedChangeEvent;
-import org.apache.tapestry.spec.IPropertySpecification;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PageRecorderImpl implements IPageRecorder
-{
-
-    private String _pageName;
-
-    private PropertyPersistenceStrategySource _strategySource;
-
-    private boolean _locked = false;
-
-    private ErrorLog _log;
-
-    public PageRecorderImpl(String pageName, PropertyPersistenceStrategySource strategySource, ErrorLog log)
-    {
-        Defense.notNull(pageName, "pageName");
-        Defense.notNull(strategySource, "strategySource");
-        Defense.notNull(log, "log");
-
-        _pageName = pageName;
-        _strategySource = strategySource;
-        _log = log;
-    }
-
-    public void commit()
-    {
-        _locked = true;
-    }
-
-    public boolean isLocked()
-    {
-        return _locked;
-    }
-    
-    public Collection getChanges()
-    {
-        return _strategySource.getAllStoredChanges(_pageName);
-    }
-
-    public void rollback(IPage page)
-    {
-        Collection changes = getChanges();
-
-        Iterator i = changes.iterator();
-
-        while(i.hasNext())
-        {
-            PropertyChange change = (PropertyChange) i.next();
-
-            applyChange(page, change);
-        }
-    }
-
-    private void applyChange(IPage page, PropertyChange change)
-    {
-        String idPath = change.getComponentPath();
-
-        IComponent component = (idPath == null) ? page : page.getNestedComponent(idPath);
-        
-        PropertyUtils.write(component, change.getPropertyName(), change.getNewValue());
-    }
-
-    public void observeChange(ObservedChangeEvent event)
-    {
-        IComponent component = event.getComponent();
-        String propertyName = event.getPropertyName();
-
-        if (_locked)
-        {
-            _log.error(RecordMessages.recorderLocked(propertyName, component), null, null);
-            return;
-        }
-        
-        PropertyPersistenceStrategy strategy = findStrategy(component, propertyName);
-
-        if (strategy != null)
-            strategy.store(_pageName, component.getIdPath(), propertyName, event.getNewValue());
-    }
-
-    // package private for testing
-
-    PropertyPersistenceStrategy findStrategy(IComponent component, String propertyName)
-    {
-        // So much for Law of Demeter!
-
-        IPropertySpecification propertySpecification = component.getSpecification().getPropertySpecification(propertyName);
-
-        if (propertySpecification == null)
-        {
-            _log.error(RecordMessages.missingPropertySpecification(propertyName, component), null, null);
-            return null;
-        }
-
-        String name = propertySpecification.getPersistence();
-
-        // Should check for nulls, but the architecture of the framework pretty
-        // much
-        // ensures that we won't get here unless there is a property
-        // and a persistence value for the property.
-
-        try
-        {
-            return _strategySource.getStrategy(name);
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            _log.error(ex.getMessage(), propertySpecification.getLocation(), ex);
-            return null;
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PageRecorderSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PageRecorderSource.java
deleted file mode 100644
index d1a3161..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PageRecorderSource.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.engine.IPageRecorder;
-
-/**
- * Used to obtain a page recorder instance. Starting in Tapestry 3.0, page
- * recorders are short-lived and specific to a single request.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface PageRecorderSource
-{
-
-    IPageRecorder createPageRecorder(IPage page);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PersistentPropertyData.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PersistentPropertyData.java
deleted file mode 100644
index c94b029..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PersistentPropertyData.java
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hivemind.util.Defense;
-
-/**
- * Stores persistent property changes concerning a single page. The data may be
- * stored as an encoded string and the PPD can turn between encoded and object
- * form.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PersistentPropertyData
-{
-
-    /**
-     * Keyed on {@link org.apache.tapestry.record.ChangeKey}, values are new
-     * objects.
-     */
-
-    private Map _changes;
-
-    private String _encoded;
-
-    private final PersistentPropertyDataEncoder _encoder;
-
-    /**
-     * Creates a new data using the specified encoder. The set of page changes
-     * is initially empty.
-     */
-
-    public PersistentPropertyData(PersistentPropertyDataEncoder encoder)
-    {
-        Defense.notNull(encoder, "encoder");
-
-        _encoder = encoder;
-        _changes = new HashMap();
-    }
-
-    public String getEncoded()
-    {
-        if (_encoded == null) _encoded = encode();
-
-        return _encoded;
-    }
-
-    public List getPageChanges()
-    {
-        if (_changes == null)
-        {
-            List pageChanges = _encoder.decodePageChanges(_encoded);
-
-            _changes = decode(pageChanges);
-
-            return pageChanges;
-        }
-
-        return createPageChangeList();
-    }
-
-    public void store(String componentPath, String propertyName, Object newValue)
-    {
-        Defense.notNull(propertyName, "propertyName");
-
-        if (_changes == null)
-            _changes = decode(_encoder.decodePageChanges(_encoded));
-
-        ChangeKey key = new ChangeKey(componentPath, propertyName);
-
-        _changes.put(key, newValue);
-
-        // With the new (or changed) value, the encoded string is no
-        // longer valid.
-
-        _encoded = null;
-    }
-
-    public void storeEncoded(String encoded)
-    {
-        Defense.notNull(encoded, "encoded");
-
-        _encoded = encoded;
-
-        // The decoded data is no longer valid now.
-
-        _changes = null;
-    }
-
-    private List createPageChangeList()
-    {
-        List result = new ArrayList();
-
-        Iterator i = _changes.entrySet().iterator();
-
-        while(i.hasNext())
-        {
-            Map.Entry me = (Map.Entry) i.next();
-
-            ChangeKey changeKey = (ChangeKey) me.getKey();
-            Object value = me.getValue();
-
-            PropertyChange change = new PropertyChangeImpl(changeKey.getComponentPath(), changeKey.getPropertyName(), value);
-            
-            result.add(change);
-        }
-
-        return result;
-    }
-
-    private String encode()
-    {
-        List changes = createPageChangeList();
-
-        return _encoder.encodePageChanges(changes);
-    }
-
-    private Map decode(List pageChanges)
-    {
-        Map result = new HashMap();
-
-        Iterator i = pageChanges.iterator();
-        while(i.hasNext())
-        {
-            PropertyChange pc = (PropertyChange) i.next();
-
-            String propertyName = pc.getPropertyName();
-            String componentPath = pc.getComponentPath();
-
-            ChangeKey key = new ChangeKey(componentPath, propertyName);
-
-            result.put(key, pc.getNewValue());
-        }
-
-        return result;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PersistentPropertyDataEncoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PersistentPropertyDataEncoder.java
deleted file mode 100644
index 0dd3af8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PersistentPropertyDataEncoder.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import java.util.List;
-
-/**
- * Responsible for encoding {@link org.apache.tapestry.record.PropertyChange}s
- * into and out of plain strings.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface PersistentPropertyDataEncoder
-{
-
-    /**
-     * Encodes a (possibly empty) list of {@link PropertyChange}s into a string
-     * representation that can later be decoded.
-     *
-     * @param changes
-     *          List of changes to encode into a persistable form.
-     * 
-     * @return encoded string (possibly empty, but not null)
-     */
-    String encodePageChanges(List changes);
-
-    /**
-     * Takes a string with an encoded set of page changes, and converts it back
-     * into a list of {@link org.apache.tapestry.record.PropertyChange}s.
-     *
-     * @param encoded
-     *          The data to un-encode, which should be equivalent to the same that
-     *          was passed in to {@link #encodePageChanges(java.util.List)}.
-     * 
-     * @return The decoded page data.
-     */
-
-    List decodePageChanges(String encoded);
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PersistentPropertyDataEncoderImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PersistentPropertyDataEncoderImpl.java
deleted file mode 100644
index 4bdb953..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PersistentPropertyDataEncoderImpl.java
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.util.io.ResolvingObjectInputStream;
-import org.apache.tapestry.util.io.TeeOutputStream;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-/**
- * Responsible for converting lists of {@link org.apache.tapestry.record.PropertyChange}s back and
- * forth to a URL safe encoded string.
- * <p/>
- * A possible improvement would be to encode the binary data with encryption both on and off, and
- * select the shortest (prefixing with a character that identifies whether encryption should be used
- * to decode).
- * </p>
- */
-public class PersistentPropertyDataEncoderImpl implements PersistentPropertyDataEncoder {
-    /**
-     * Prefix on the MIME encoding that indicates that the encoded data is not encoded.
-     */
-
-    public static final String BYTESTREAM_PREFIX = "B";
-
-    /**
-     * Prefix on the MIME encoding that indicates that the encoded data is encoded with GZIP.
-     */
-
-    public static final String GZIP_BYTESTREAM_PREFIX = "Z";
-
-    protected ClassResolver _classResolver;
-
-    public String encodePageChanges(List changes)
-    {
-        Defense.notNull(changes, "changes");
-
-        if (changes.isEmpty())
-            return "";
-
-        try {
-            ByteArrayOutputStream bosPlain = new ByteArrayOutputStream();
-            ByteArrayOutputStream bosCompressed = new ByteArrayOutputStream();
-
-            GZIPOutputStream gos = new GZIPOutputStream(bosCompressed);
-
-            TeeOutputStream tos = new TeeOutputStream(bosPlain, gos);
-
-            ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(tos));
-
-            writeChangesToStream(changes, oos);
-
-            oos.close();
-
-            boolean useCompressed = bosCompressed.size() < bosPlain.size();
-
-            byte[] data = useCompressed ? bosCompressed.toByteArray() : bosPlain.toByteArray();
-
-            byte[] encoded = Base64.encodeBase64(data);
-
-            String prefix = useCompressed ? GZIP_BYTESTREAM_PREFIX : BYTESTREAM_PREFIX;
-
-            return prefix + new String(encoded);
-        }
-        catch (Exception ex) {
-            throw new ApplicationRuntimeException(RecordMessages.encodeFailure(ex), ex);
-        }
-    }
-
-    public List decodePageChanges(String encoded)
-    {
-        if (HiveMind.isBlank(encoded))
-            return Collections.EMPTY_LIST;
-
-        String prefix = encoded.substring(0, 1);
-
-        if (!(prefix.equals(BYTESTREAM_PREFIX) || prefix.equals(GZIP_BYTESTREAM_PREFIX)))
-            throw new ApplicationRuntimeException(RecordMessages.unknownPrefix(prefix));
-
-        try {
-            // Strip off the prefix, feed that in as a MIME stream.
-
-            byte[] decoded = Base64.decodeBase64(encoded.substring(1).getBytes());
-
-            InputStream is = new ByteArrayInputStream(decoded);
-
-            if (prefix.equals(GZIP_BYTESTREAM_PREFIX))
-                is = new GZIPInputStream(is);
-
-            // I believe this is more efficient; the buffered input stream should ask the
-            // GZIP stream for large blocks of un-gzipped bytes, with should be more efficient.
-            // The object input stream will probably be looking for just a few bytes at
-            // a time. We use a resolving object input stream that knows how to find
-            // classes not normally acessible.
-
-            ObjectInputStream ois = new ResolvingObjectInputStream(_classResolver, new BufferedInputStream(is));
-
-            List result = readChangesFromStream(ois);
-
-            ois.close();
-
-            return result;
-        }
-        catch (Exception ex) {
-            throw new ApplicationRuntimeException(RecordMessages.decodeFailure(ex), ex);
-        }
-    }
-
-    protected void writeChangesToStream(List changes, ObjectOutputStream oos)
-            throws IOException
-    {
-        oos.writeInt(changes.size());
-
-        Iterator i = changes.iterator();
-        while (i.hasNext()) {
-            PropertyChange pc = (PropertyChange) i.next();
-
-            String componentPath = pc.getComponentPath();
-            String propertyName = pc.getPropertyName();
-            Object value = pc.getNewValue();
-
-            oos.writeBoolean(componentPath != null);
-
-            if (componentPath != null)
-                oos.writeUTF(componentPath);
-
-            oos.writeUTF(propertyName);
-
-            oos.writeObject(value);
-        }
-    }
-
-    protected List readChangesFromStream(ObjectInputStream ois)
-            throws IOException, ClassNotFoundException
-    {
-        List result = new ArrayList();
-
-        int count = ois.readInt();
-
-        for (int i = 0; i < count; i++) {
-            boolean hasPath = ois.readBoolean();
-            String componentPath = hasPath ? ois.readUTF() : null;
-            String propertyName = ois.readUTF();
-            Object value = ois.readObject();
-
-            PropertyChangeImpl pc = new PropertyChangeImpl(componentPath, propertyName, value);
-
-            result.add(pc);
-        }
-
-        return result;
-    }
-
-    public void setClassResolver(ClassResolver resolver)
-    {
-        _classResolver = resolver;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyChange.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyChange.java
deleted file mode 100644
index 4cc3abd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyChange.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-/**
- * Represents a change to a component on a page, this represents a datum of
- * information stored by a {@link org.apache.tapestry.engine.IPageRecorder}.
- * <p>
- * Renamed from IPageChange in release 4.0.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface PropertyChange
-{
-
-    /**
-     * The path to the component on the page, or null if the property is a
-     * property of the page.
-     */
-
-    String getComponentPath();
-
-    /**
-     * The new value for the property, which may be null.
-     */
-
-    Object getNewValue();
-
-    /**
-     * The name of the property that changed.
-     */
-
-    String getPropertyName();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyChangeImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyChangeImpl.java
deleted file mode 100644
index 203f5c4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyChangeImpl.java
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.ToStringBuilder;
-
-/**
- * Represents a change to a component on a page.
- * 
- * @author Howard Lewis Ship
- */
-
-public class PropertyChangeImpl implements PropertyChange
-{
-
-    private String _componentPath;
-
-    private String _propertyName;
-
-    private Object _newValue;
-
-    public PropertyChangeImpl(String componentPath, String propertyName,
-            Object newValue)
-    {
-        Defense.notNull(propertyName, "propertyName");
-
-        // TODO: This breaks some tests, but those tests are wrong.
-        // Defense.notNull(newValue, "newValue");
-
-        _componentPath = componentPath;
-        _propertyName = propertyName;
-        _newValue = newValue;
-    }
-
-    /**
-     * The path to the component on the page, or null if the property is a
-     * property of the page.
-     */
-
-    public String getComponentPath()
-    {
-        return _componentPath;
-    }
-
-    /**
-     * The new value for the property, which may be null.
-     */
-
-    public Object getNewValue()
-    {
-        return _newValue;
-    }
-
-    /**
-     * The name of the property that changed.
-     */
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("componentPath", _componentPath);
-        builder.append("propertyName", _propertyName);
-        builder.append("newValue", _newValue);
-
-        return builder.toString();
-    }
-
-    public boolean equals(Object object)
-    {
-        if (this == object) return true;
-
-        if (object == null || object.getClass() != this.getClass())
-            return false;
-
-        PropertyChangeImpl other = (PropertyChangeImpl) object;
-
-        return same(_componentPath, other._componentPath)
-                && same(_propertyName, other._propertyName)
-                && same(_newValue, other._newValue);
-    }
-
-    private boolean same(Object o1, Object o2)
-    {
-        return o1 == o2 || (o1 != null && o1.equals(o2));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyChangeObserver.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyChangeObserver.java
deleted file mode 100644
index 0dfeb93..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyChangeObserver.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.record;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.Tapestry;
-
-
-/**
- * Core service that is consulted anytime a specified component property is set. This service
- * is intended to be used as a means of intercepting component property state objects so that 
- * their individual properties can be observed independently from basic set/get operations 
- * done on page/component properties.
- * 
- */
-public interface PropertyChangeObserver
-{
-
-    /**
-     * Invoked by the enhanced property workers any time a {@link IComponent} property is set, either
-     * by an initial value binding or explicitly through an abstract setter.
-     * 
-     * @param component
-     *          The component that this property is attached to.
-     * @param property 
-     *          The object to observe changes on, may be null.
-     * @param propertyName
-     *          The name of the property being observed - needed for doing things like calling
-     *          {@link Tapestry#fireObservedChange(IComponent, String, Object)}.
-     * @return Expected to return either the same exact instance passed in or one that is proxied but still
-     *         maintains the original state of the object.
-     */
-    Object observePropertyChanges(IComponent component, Object property, String propertyName);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategy.java
deleted file mode 100644
index 78c6e53..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategy.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import java.util.Collection;
-
-import org.apache.tapestry.engine.ServiceEncoding;
-
-/**
- * Defines how a persistent property is made persistent. The typical
- * implementation is to store the persistent property into the session as a
- * session attribute.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface PropertyPersistenceStrategy
-{
-
-    /**
-     * Stores the new value.
-     * 
-     * @param pageName
-     *            the name of the page containing the property
-     * @param idPath
-     *            the path to the component with the property (may be null)
-     * @param propertyName
-     *            the name of the property to be persisted
-     * @param newValue
-     *            the new value (which may be null)
-     */
-
-    void store(String pageName, String idPath, String propertyName,
-            Object newValue);
-
-    /**
-     * Returns a collection of {@link org.apache.tapestry.record.PropertyChange}s.
-     * These represent prior changes previously stored. The order is not
-     * significant. Must not return null. Does not have to reflect changes made
-     * during the current request (this method is typically invoked as part of
-     * rolling back a page to a prior state, before any further changes are
-     * possible).
-     */
-
-    Collection getStoredChanges(String pageName);
-
-    /**
-     * Invoked to discard any stored changes for the specified page.
-     */
-    void discardStoredChanges(String pageName);
-
-    /**
-     * Invoked by a {@link org.apache.tapestry.services.LinkFactory}&nbsp;, the
-     * parameters may be modified (added to) to store information related to
-     * persistent properties. This method is forwarded to all
-     * {@link PropertyPersistenceStrategy}s.
-     * 
-     * @param encoding
-     *            Service encoding, which indentifies the URL and the query
-     *            parameters from which the
-     *            {@link org.apache.tapestry.engine.ILink}&nbsp;will be
-     *            created.
-     * @param post
-     *            if true, then the link will be used for a post (not a get,
-     *            i.e., for a HTML form); this may affect what information is
-     *            encoded into the link
-     * @see PropertyPersistenceStrategySource
-     */
-
-    void addParametersForPersistentProperties(ServiceEncoding encoding,
-            boolean post);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategyContribution.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategyContribution.java
deleted file mode 100644
index eb7602e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategyContribution.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- * A contribution to the <code>tapestry.persist.PersistenceStrategy</code>
- * configuration.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PropertyPersistenceStrategyContribution extends BaseLocatable
-{
-
-    private String _name;
-
-    private PropertyPersistenceStrategy _strategy;
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    public PropertyPersistenceStrategy getStrategy()
-    {
-        return _strategy;
-    }
-
-    public void setStrategy(PropertyPersistenceStrategy strategy)
-    {
-        _strategy = strategy;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategySource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategySource.java
deleted file mode 100644
index 05c196f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategySource.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import java.util.Collection;
-
-import org.apache.tapestry.engine.ServiceEncoding;
-
-/**
- * A source for {@link org.apache.tapestry.record.PropertyPersistenceStrategy}s.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface PropertyPersistenceStrategySource
-{
-
-    /**
-     * Returns the name strategy.
-     * 
-     * @param name
-     *            the name of the strategy to retrieve.
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if no such strategy exists.
-     */
-    PropertyPersistenceStrategy getStrategy(String name);
-
-    /**
-     * Returns all changes ({@link PropertyChange}) collected by any
-     * persistence strategy for the page. May return an empty list.
-     * 
-     * @see PropertyPersistenceStrategy#getStoredChanges(String)
-     */
-
-    Collection getAllStoredChanges(String pageName);
-
-    /**
-     * Discards any stored property changes for the named page.
-     */
-
-    void discardAllStoredChanged(String pageName);
-
-    /**
-     * Invoked by a {@link org.apache.tapestry.services.LinkFactory}&nbsp;, the
-     * parameters may be modified (added to) to store information related to
-     * persistent properties. This method is forwarded to all
-     * {@link PropertyPersistenceStrategy}s.
-     * 
-     * @param encoding
-     *            Service encoding, which indentifies the URL and the query
-     *            parameters from which the
-     *            {@link org.apache.tapestry.engine.ILink} will be created.
-     * @param post
-     *            if true, then the link will be used for a post (not a get,
-     *            i.e., for a HTML form); this may affect what information is
-     *            encoded into the link
-     * @see PropertyPersistenceStrategySource
-     */
-
-    void addParametersForPersistentProperties(ServiceEncoding encoding,
-            boolean post);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategySourceImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategySourceImpl.java
deleted file mode 100644
index 8bc0bdd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/PropertyPersistenceStrategySourceImpl.java
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.engine.ServiceEncoding;
-
-/**
- * Implementation of the
- * <code>tapestry.persist.PropertyPersistenceStrategySource</code> service.
- * Allows access to other services, that implement the
- * {@link org.apache.tapestry.record.PropertyPersistenceStrategy} interface.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PropertyPersistenceStrategySourceImpl implements
-        PropertyPersistenceStrategySource
-{
-
-    // Set from tapestry.props.PersistenceStrategy
-    private List _contributions;
-
-    private Map _strategies = new HashMap();
-
-    public void initializeService()
-    {
-        Iterator i = _contributions.iterator();
-        while(i.hasNext())
-        {
-            PropertyPersistenceStrategyContribution c = (PropertyPersistenceStrategyContribution) i
-                    .next();
-
-            _strategies.put(c.getName(), c.getStrategy());
-        }
-    }
-
-    public PropertyPersistenceStrategy getStrategy(String name)
-    {
-        if (!_strategies.containsKey(name))
-            throw new ApplicationRuntimeException(RecordMessages
-                    .unknownPersistenceStrategy(name));
-
-        return (PropertyPersistenceStrategy) _strategies.get(name);
-    }
-
-    public Collection getAllStoredChanges(String pageName)
-    {
-        Collection result = new ArrayList();
-
-        Iterator i = _strategies.values().iterator();
-
-        while(i.hasNext())
-        {
-            PropertyPersistenceStrategy s = (PropertyPersistenceStrategy) i
-                    .next();
-
-            result.addAll(s.getStoredChanges(pageName));
-        }
-
-        return result;
-    }
-
-    public void discardAllStoredChanged(String pageName)
-    {
-        Iterator i = _strategies.values().iterator();
-
-        while(i.hasNext())
-        {
-            PropertyPersistenceStrategy s = (PropertyPersistenceStrategy) i
-                    .next();
-
-            s.discardStoredChanges(pageName);
-        }
-    }
-
-    public void addParametersForPersistentProperties(ServiceEncoding encoding,
-            boolean post)
-    {
-        Iterator i = _strategies.values().iterator();
-
-        while(i.hasNext())
-        {
-            PropertyPersistenceStrategy s = (PropertyPersistenceStrategy) i
-                    .next();
-
-            s.addParametersForPersistentProperties(encoding, post);
-        }
-    }
-
-    public void setContributions(List contributions)
-    {
-        _contributions = contributions;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/RecordMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/RecordMessages.java
deleted file mode 100644
index 19035d3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/RecordMessages.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.IComponent;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class RecordMessages
-{
-
-    private static final MessageFormatter _formatter = new MessageFormatter(
-            RecordMessages.class);
-
-    /* defeat instantiation */
-    private RecordMessages()
-    {
-    }
-
-    static String unknownPersistenceStrategy(String name)
-    {
-        return _formatter.format("unknown-persistence-strategy", name);
-    }
-
-    static String missingPropertySpecification(String propertyName,
-            IComponent component)
-    {
-        return _formatter.format("missing-property-specification",
-                propertyName, component.getExtendedId(), component
-                        .getSpecification().getSpecificationLocation());
-    }
-
-    static String recorderLocked(String propertyName, IComponent component)
-    {
-        return _formatter.format("recorder-locked", propertyName, component
-                .getExtendedId());
-    }
-
-    static String decodeFailure(Throwable cause)
-    {
-        return _formatter.format("decode-failure", cause);
-    }
-
-    static String encodeFailure(Throwable cause)
-    {
-        return _formatter.format("encode-failure", cause);
-    }
-
-    static String unknownPrefix(String prefix)
-    {
-        return _formatter.format("unknown-prefix", prefix);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/RecordStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/RecordStrings.properties
deleted file mode 100644
index b755cb2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/RecordStrings.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-unknown-persistence-strategy=Unknown property persistence strategy ''{0}''.
-missing-property-specification=A property change event for property {0} of {1} was observed, but no such property is identified in the specification ({2}).
-recorder-locked=Change to persistent property {0} of {1} has been ignored. Persistent properties may only be changed prior to the rendering of the response page.
-decode-failure=An exception occured decoding the MIME data stream: {0}
-encode-failure=An exception occured encoding the data stream into MIME format: {0}
-unknown-prefix=The prefix of the MIME encoded data stream was ''{0}'', it should be ''B'' or ''Z''.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/RecordUtils.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/RecordUtils.java
deleted file mode 100644
index bcaadde..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/RecordUtils.java
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.record;

-

-import java.util.Iterator;

-

-import org.apache.hivemind.util.Defense;

-import org.apache.tapestry.TapestryUtils;

-import org.apache.tapestry.web.WebSession;

-

-/**

- * Utility methods to support implementations of

- * {@link org.apache.tapestry.record.PropertyPersistenceStrategy}. This consists of code refactored

- * out of {@link org.apache.tapestry.record.SessionPropertyPersistenceStrategy} to support other,

- * similar, persistence types with different rules for how long values are stored in the session.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public final class RecordUtils

-{

-    /* defeat instantiation */

-    private RecordUtils() { }

-    

-    /**

-     * Builds a {@link PropertyChange} instance for the given key and value pulled from the

-     * {@link org.apache.tapestry.web.WebSession}.

-     * 

-     * @param key

-     *            a key, previously created by

-     *            {@link #buildChangeKey(String, String, String, String, String)}, consisting of a

-     *            strategy id, application id, page name, id path (optional), and a property name,

-     *            all seperated by commas.

-     * @param value

-     *            the value stored in the session with this key

-     * @return a {@link PropertyChange} storing the property name and id path (if any), and the

-     *         value

-     */

-    public static PropertyChange buildChange(String key, Object value)

-    {

-        String[] tokens = TapestryUtils.split(key);

-

-        // Either strategy-id, app-name,page-name,id-path,property

-        // or strategy-id,app-name,page-name,property

-

-        String idPath = (tokens.length == 5) ? tokens[3] : null;

-        String propertyName = tokens[tokens.length - 1];

-

-        return new PropertyChangeImpl(idPath, propertyName, value);

-    }

-

-    /**

-     * Iterates over the attributes stored in the session, invoking a callback on each one that

-     * matches the given prefix, applicationid and page name. This is used to operate over all

-     * stored data for a particular combination of strategy, applicationId and page.

-     * 

-     * @param strategyId

-     *            a unique identifier for a particular implementation of

-     *            {@link PropertyPersistenceStrategy}

-     * @param applicationId

-     *            a unique id for the application

-     * @param pageName

-     *            the name of the page

-     * @param session

-     *            the session to search

-     * @param callback

-     *            the callback to invoke on each matching attibute name

-     */

-    public static void iterateOverMatchingAttributes(String strategyId, String applicationId,

-            String pageName, WebSession session, WebSessionAttributeCallback callback)

-    {

-        Defense.notNull(strategyId, "strategyId");

-        Defense.notNull(applicationId, "applicationId");

-        Defense.notNull(pageName, "pageName");

-        Defense.notNull(session, "session");

-

-        String prefix = strategyId + "," + applicationId + "," + pageName + ",";

-

-        Iterator i = session.getAttributeNames().iterator();

-        while (i.hasNext())

-        {

-            String name = (String) i.next();

-

-            if (name.startsWith(prefix))

-                callback.handleAttribute(session, name);

-        }

-    }

-

-    /**

-     * Builds a change key, used to identify the change within the {@link WebSession}. A change key

-     * can be used as a session attribute name, without reasonable fear of conflict.

-     * 

-     * @param strategyId

-     *            a unique identifier for a particular implementation of

-     *            {@link PropertyPersistenceStrategy}

-     * @param applicationId

-     *            a unique identifier for the application

-     * @param pageName

-     *            the name of the page containing the change

-     * @param idPath

-     *            the id path of the component within the page containing the page, possibly null

-     * @param propertyName

-     *            the name of the property

-     * @return the above values, seperated by commas (well, no comma between the prefix and the

-     *         application id)

-     */

-    public static String buildChangeKey(String strategyId, String applicationId, String pageName,

-            String idPath, String propertyName)

-    {

-        Defense.notNull(strategyId, "strategyId");

-        Defense.notNull(applicationId, "applicationId");

-        Defense.notNull(pageName, "pageName");

-        Defense.notNull(propertyName, "propertyName");

-

-        StringBuffer buffer = new StringBuffer(strategyId);

-

-        buffer.append(",");

-        buffer.append(applicationId);

-        buffer.append(",");

-        buffer.append(pageName);

-

-        if (idPath != null)

-        {

-            buffer.append(",");

-            buffer.append(idPath);

-        }

-

-        buffer.append(",");

-        buffer.append(propertyName);

-

-        return buffer.toString();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/SessionPropertyPersistenceStrategy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/SessionPropertyPersistenceStrategy.java
deleted file mode 100644
index a4a450b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/SessionPropertyPersistenceStrategy.java
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-
-/**
- * The most basic {@link org.apache.tapestry.record.PropertyPersistenceStrategy},
- * which stores properties in the HttpSession as attributes.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class SessionPropertyPersistenceStrategy implements
-        PropertyPersistenceStrategy
-{
-
-    public static final String STRATEGY_ID = "session";
-
-    // Really, the name of the servlet; used as a prefix on all
-    // HttpSessionAttribute keys
-    // to keep things straight if multiple Tapestry apps are deployed
-    // in the same WAR.
-
-    private String _applicationId;
-
-    private WebRequest _request;
-
-    public void store(String pageName, String idPath, String propertyName, Object newValue)
-    {
-        Defense.notNull(pageName, "pageName");
-        Defense.notNull(propertyName, "propertyName");
-
-        WebSession session = _request.getSession(true);
-
-        String attributeName = RecordUtils.buildChangeKey(STRATEGY_ID, _applicationId, pageName, idPath, propertyName);
-
-        session.setAttribute(attributeName, newValue);
-    }
-
-    public Collection getStoredChanges(String pageName)
-    {
-        Defense.notNull(pageName, "pageName");
-
-        WebSession session = _request.getSession(false);
-
-        if (session == null) 
-            return Collections.EMPTY_LIST;
-
-        final Collection result = new ArrayList();
-
-        WebSessionAttributeCallback callback = new WebSessionAttributeCallback()
-        {
-            public void handleAttribute(WebSession sess, String name)
-            {
-                PropertyChange change = RecordUtils.buildChange(name, sess.getAttribute(name));
-
-                result.add(change);
-            }
-        };
-
-        RecordUtils.iterateOverMatchingAttributes(STRATEGY_ID, _applicationId, pageName, session, callback);
-
-        return result;
-    }
-
-    public void discardStoredChanges(String pageName)
-    {
-        WebSession session = _request.getSession(false);
-
-        if (session == null) return;
-
-        WebSessionAttributeCallback callback = new WebSessionAttributeCallback()
-        {
-            public void handleAttribute(WebSession sess, String name)
-            {
-                sess.setAttribute(name, null);
-            }
-        };
-
-        RecordUtils.iterateOverMatchingAttributes(STRATEGY_ID, _applicationId,
-                pageName, session, callback);
-    }
-
-    /**
-     * Does nothing; session persistence does not make use of query parameters.
-     */
-
-    public void addParametersForPersistentProperties(ServiceEncoding encoding,
-            boolean post)
-    {
-    }
-
-    public void setApplicationId(String applicationName)
-    {
-        _applicationId = applicationName;
-    }
-
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/WebSessionAttributeCallback.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/WebSessionAttributeCallback.java
deleted file mode 100644
index 8d476c3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/WebSessionAttributeCallback.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.record;

-

-import org.apache.tapestry.web.WebSession;

-

-/**

- * Callback interface used to operate on a subset of attributes stored within a

- * {@link org.apache.tapestry.web.WebSession} whose names match a particular prefix.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public interface WebSessionAttributeCallback

-{

-    /**

-     * Invoked for each matching attribute.

-     * 

-     * @param session

-     *            session containing the attribute

-     * @param name

-     *            full name of the attribute

-     */

-    void handleAttribute(WebSession session, String name);

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/package.html
deleted file mode 100644
index 2e1f763..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/record/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Abstract and simple (memory-based) implementations of
-{@link org.apache.tapestry.engine.IPageRecorder}.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/DecodedRequest.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/DecodedRequest.java
deleted file mode 100644
index d89865e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/DecodedRequest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * Contains properties of an {@link javax.servlet.http.HttpServletRequest}that have been extracted
- * from the request (or otherwise determined). An instance of this is created by an
- * {@link org.apache.tapestry.request.IRequestDecoder}. The decoder must set the serverName and
- * requestURI properties, and should set the scheme and server port properties.
- * 
- * @see IRequestDecoder
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class DecodedRequest
-{
-    private String _scheme = "http";
-
-    private String _serverName;
-
-    private String _requestURI;
-
-    private int _serverPort = 80;
-
-    public DecodedRequest()
-    {
-    }
-
-    /**
-     * Initializes default values for the properties from the request provided.
-     * 
-     * @since 4.0
-     */
-
-    public DecodedRequest(HttpServletRequest request)
-    {
-        _scheme = request.getScheme();
-        _serverName = request.getServerName();
-        _requestURI = request.getRequestURI();
-        _serverPort = request.getServerPort();
-    }
-
-    /**
-     * Default value is 80.
-     */
-
-    public int getServerPort()
-    {
-        return _serverPort;
-    }
-
-    /**
-     * Default value is 'http'.
-     */
-
-    public String getScheme()
-    {
-        return _scheme;
-    }
-
-    /**
-     * No default, a value must be set by the decoder.
-     */
-
-    public String getServerName()
-    {
-        return _serverName;
-    }
-
-    /**
-     * No default, a value must be set by the decoder.
-     */
-
-    public String getRequestURI()
-    {
-        return _requestURI;
-    }
-
-    public void setServerPort(int serverPort)
-    {
-        _serverPort = serverPort;
-    }
-
-    public void setScheme(String scheme)
-    {
-        _scheme = scheme;
-    }
-
-    public void setServerName(String serverName)
-    {
-        _serverName = serverName;
-    }
-
-    public void setRequestURI(String URI)
-    {
-        _requestURI = URI;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/DecodedRequestInjector.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/DecodedRequestInjector.java
deleted file mode 100644
index 8271c0c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/DecodedRequestInjector.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.ServletRequestServicer;
-import org.apache.tapestry.services.ServletRequestServicerFilter;
-import org.apache.tapestry.spec.ILibrarySpecification;
-
-/**
- * Checks to see if a {@link org.apache.tapestry.request.IRequestDecoder}has been provided as an
- * application extension, and (if so), creates a new HttpServletRequest wrapper around the decoded
- * request.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DecodedRequestInjector implements ServletRequestServicerFilter
-{
-    private ILibrarySpecification _applicationSpecification;
-
-    private IRequestDecoder _decoder;
-
-    public void initializeService()
-    {
-        if (_applicationSpecification.checkExtension(Tapestry.REQUEST_DECODER_EXTENSION_NAME))
-            _decoder = (IRequestDecoder) _applicationSpecification.getExtension(
-                    Tapestry.REQUEST_DECODER_EXTENSION_NAME,
-                    IRequestDecoder.class);
-    }
-
-    public void service(HttpServletRequest request, HttpServletResponse response,
-            ServletRequestServicer servicer) throws IOException, ServletException
-    {
-        HttpServletRequest decodedRequest = _decoder == null ? request : wrapRequest(request);
-
-        servicer.service(decodedRequest, response);
-    }
-
-    public HttpServletRequest wrapRequest(HttpServletRequest request)
-    {
-        DecodedRequest decodedRequest = _decoder.decodeRequest(request);
-
-        return new DecodedRequestWrapper(request, decodedRequest);
-    }
-
-    public void setApplicationSpecification(ILibrarySpecification applicationSpecification)
-    {
-        _applicationSpecification = applicationSpecification;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/DecodedRequestWrapper.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/DecodedRequestWrapper.java
deleted file mode 100644
index 799ee47..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/DecodedRequestWrapper.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-
-import org.apache.hivemind.util.Defense;
-
-/**
- * A wrapper that uses a {@link org.apache.tapestry.request.DecodedRequest}to override default
- * values for several HttpServletRequest properties.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DecodedRequestWrapper extends HttpServletRequestWrapper
-{
-    private final DecodedRequest _decoded;
-
-    public DecodedRequestWrapper(HttpServletRequest request, DecodedRequest decoded)
-    {
-        super(request);
-
-        Defense.notNull(decoded, "decoded");
-
-        _decoded = decoded;
-    }
-
-    public String getRequestURI()
-    {
-        return _decoded.getRequestURI();
-    }
-
-    public String getScheme()
-    {
-        return _decoded.getScheme();
-    }
-
-    public String getServerName()
-    {
-        return _decoded.getServerName();
-    }
-
-    public int getServerPort()
-    {
-        return _decoded.getServerPort();
-    }
-
-    public String toString()
-    {
-        return "<DecodedRequestWrapper for " + getRequest() + ">";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/IRequestDecoder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/IRequestDecoder.java
deleted file mode 100644
index b951fa6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/IRequestDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- *  Given a {@link javax.servlet.http.HttpServletRequest}, identifies
- *  the correct request properties (server, scheme, URI and port).
- * 
- *  <p>An implementation of this class may be necessary when using
- *  Tapestry with specific firewalls which may obscure
- *  the scheme, server, etc. visible to the client web browser
- *  (the request appears to arrive from the firewall server, not the
- *  client web browser).
- *
- *  @author Howard Lewis Ship
- *  @version IRequestDecoder.java,v 1.1 2002/08/20 21:49:58 hship Exp
- *  @since 2.2
- * 
- **/
-
-public interface IRequestDecoder
-{
-
-    /**
-     *  Invoked to identify the actual properties from the request.
-     * 
-     **/
-
-    DecodedRequest decodeRequest(HttpServletRequest request);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/IUploadFile.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/IUploadFile.java
deleted file mode 100644
index 6fb4f6b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/IUploadFile.java
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-import java.io.File;
-import java.io.InputStream;
-
-/**
- * Represents a file uploaded from a client side form.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-
-public interface IUploadFile
-{
-
-    /**
-     * Returns the name of the file that was uploaded. This is just the filename
-     * portion of the complete path.
-     */
-
-    String getFileName();
-
-    /**
-     * Returns the complete path, as reported by the client browser. Different
-     * browsers report different things here.
-     * 
-     * @since 2.0.4
-     */
-
-    String getFilePath();
-
-    /**
-     * Returns an input stream of the content of the file. There is no guarantee
-     * that this stream will be valid after the end of the current request
-     * cycle, so it should be processed immediately.
-     * <p>
-     * As of release 1.0.8, this will be a a
-     * {@link java.io.ByteArrayInputStream}, but that, too, may change (a
-     * future implementation may upload the stream to a temporary file and
-     * return an input stream from that).
-     */
-
-    InputStream getStream();
-
-    /**
-     * Returns the MIME type specified when the file was uploaded. May return
-     * null if the content type is not known.
-     * 
-     * @since 2.2
-     */
-
-    String getContentType();
-
-    /**
-     * Writes the content of the file to a known location. This should be
-     * invoked at most once. In a standard implementation based on Jakarta
-     * FileUpload, this will often be implemented efficiently as a file rename.
-     * 
-     * @since 3.0
-     */
-
-    void write(File file);
-
-    /**
-     * Returns true if the uploaded content is in memory. False generally means
-     * the content is stored in a temporary file.
-     */
-
-    boolean isInMemory();
-
-    /**
-     * Returns the size, in bytes, of the uploaded content.
-     * 
-     * @since 3.0
-     */
-
-    long getSize();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/package.html
deleted file mode 100644
index dc8d268..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/request/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Deals with upload form data.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/AbstractSpecificationResolver.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/AbstractSpecificationResolver.java
deleted file mode 100644
index 9b69540..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/AbstractSpecificationResolver.java
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Base class for resolving a {@link org.apache.tapestry.spec.IComponentSpecification}for a
- * particular page or component, within a specified {@link org.apache.tapestry.INamespace}. In some
- * cases, a search is necessary.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class AbstractSpecificationResolver
-{
-    /** Set by resolve(). */
-    private INamespace _namespace;
-
-    /** Set by resolve(). */
-    private IComponentSpecification _specification;
-
-    /** Set by container. */
-    private ISpecificationSource _specificationSource;
-
-    private ISpecificationResolverDelegate _delegate;
-
-    private String _applicationId;
-
-    private Resource _contextRoot;
-
-    /** Initialized in initializeService(). */
-
-    private Resource _webInfLocation;
-
-    private Resource _webInfAppLocation;
-
-    public void initializeService()
-    {
-        _webInfLocation = _contextRoot.getRelativeResource("WEB-INF/");
-
-        _webInfAppLocation = _webInfLocation.getRelativeResource(_applicationId + "/");
-    }
-
-    /**
-     * Returns the {@link ISpecificationResolverDelegate}instance registered in the application 
-     * or null if no such extension exists.
-     */
-
-    public ISpecificationResolverDelegate getDelegate()
-    {
-        return _delegate;
-    }
-
-    /**
-     * Returns the location of the servlet, within the servlet context.
-     */
-
-    protected Resource getContextRoot()
-    {
-        return _contextRoot;
-    }
-
-    public void setContextRoot(Resource contextRoot)
-    {
-        _contextRoot = contextRoot;
-    }
-
-    /**
-     * Invoked in subclasses to identify the resolved namespace.
-     */
-
-    protected void setNamespace(INamespace namespace)
-    {
-        _namespace = namespace;
-    }
-
-    /**
-     * Returns the resolve namespace.
-     */
-
-    public INamespace getNamespace()
-    {
-        return _namespace;
-    }
-
-    /**
-     * Returns the specification source for the running application.
-     */
-
-    protected ISpecificationSource getSpecificationSource()
-    {
-        return _specificationSource;
-    }
-
-    /**
-     * Returns the location of /WEB-INF/, in the servlet context.
-     */
-
-    protected Resource getWebInfLocation()
-    {
-        return _webInfLocation;
-    }
-
-    /**
-     * Returns the location of the application-specific subdirectory, under /WEB-INF/, in the
-     * servlet context.
-     */
-
-    protected Resource getWebInfAppLocation()
-    {
-        return _webInfAppLocation;
-    }
-
-    /**
-     * Returns the resolved specification.
-     */
-
-    public IComponentSpecification getSpecification()
-    {
-        return _specification;
-    }
-
-    /**
-     * Invoked in subclass to set the final specification the initial inputs are resolved to.
-     */
-
-    protected void setSpecification(IComponentSpecification specification)
-    {
-        _specification = specification;
-    }
-
-    /**
-     * Clears the namespace and specification properties.
-     */
-
-    protected void reset()
-    {
-        _namespace = null;
-        _specification = null;
-    }
-
-    /** @since 4.0 */
-    public void setDelegate(ISpecificationResolverDelegate delegate)
-    {
-        _delegate = delegate;
-    }
-
-    /** @since 4.0 */
-    public void setApplicationId(String applicationId)
-    {
-        _applicationId = applicationId;
-    }
-
-    /** @since 4.0 */
-    public void setSpecificationSource(ISpecificationSource source)
-    {
-        _specificationSource = source;
-    }
-
-    /** @since 4.0 */
-    protected INamespace getApplicationNamespace()
-    {
-        return _specificationSource.getApplicationNamespace();
-    }
-
-    /** @since 4.0 */
-    protected INamespace getFrameworkNamespace()
-    {
-        return _specificationSource.getFrameworkNamespace();
-    }
-
-    /**
-     * @since 4.0
-     */
-    protected INamespace findNamespaceForId(INamespace containerNamespace, String libraryId)
-    {
-        if (libraryId == null)
-            return containerNamespace;
-    
-        if (libraryId.equals(INamespace.APPLICATION_NAMESPACE))
-            return getApplicationNamespace();
-    
-        if (libraryId.equals(INamespace.FRAMEWORK_NAMESPACE))
-            return getFrameworkNamespace();
-    
-        return containerNamespace.getChildNamespace(libraryId);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentResourceResolverImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentResourceResolverImpl.java
deleted file mode 100644
index 1360a43..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentResourceResolverImpl.java
+++ /dev/null
@@ -1,192 +0,0 @@
-package org.apache.tapestry.resolver;
-
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ContextResource;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.web.WebContextResource;
-
-import java.util.Locale;
-
-/**
- * Implementation of {@link IComponentResourceResolver}.
- */
-public class ComponentResourceResolverImpl implements IComponentResourceResolver {
-
-    /**
-     * Used to find resources under the context WEB-INF/ directory.
-     */
-    private static final String WEB_INF = "WEB-INF/";
-
-    private AssetFactory _classpathAssetFactory;
-    private AssetFactory _contextAssetFactory;
-
-    /** Application id of the current tapestry app - as in applicationId.application */
-    private String _applicationId;
-    
-    /** Root web context directory */
-    private Resource _contextRoot;
-    /** The location of the WEB-INF context directory */
-    private Resource _webInfLocation;
-    /** The location of the application within the WEB-INF/ folder */
-    private Resource _webInfAppLocation;
-
-    /**
-     * Called by hivemind automatically.
-     */
-    public void initializeService()
-    {
-        _webInfLocation = _contextRoot.getRelativeResource(WEB_INF);
-        
-        _webInfAppLocation = _webInfLocation.getRelativeResource(_applicationId + "/");
-    }
-
-    public Resource findComponentResource(IComponent component, IRequestCycle cycle, String path, String extension, Locale locale)
-    {
-        Resource base = component.getSpecification().getSpecificationLocation();
-        String baseName = path == null ? extractBaseName(base) : path;
-        Resource resource = null;
-
-        // have to do explicit check for context resource first
-        // as it might be a classpath based spec and then we need to manually figure out
-        // the best location to start from as context paths always get resolved first
-        // before classpath resources
-        
-        if (WebContextResource.class.isInstance(base) || ContextResource.class.isInstance(base))
-        {
-            resource = base.getRelativeResource(baseName + extension);
-
-            if (resource != null)
-                return localizeResource(resource, locale);
-        }
-
-        resource = findComponentClassResource(component, cycle, baseName, extension, locale);
-
-        // In some cases the generic classpath resource path is fine - such as bundled component properties
-
-        if (resource == null)
-        {    
-            resource = base.getRelativeResource(baseName + extension);
-            
-            if (resource != null)
-                resource = localizeResource(resource, locale);
-        }
-
-        return resource;
-    }
-
-    String extractBaseName(Resource baseResourceLocation)
-    {
-        String fileName = baseResourceLocation.getName();
-        int dotx = fileName.lastIndexOf('.');
-
-        return dotx > -1 ? fileName.substring(0, dotx) : fileName;
-    }
-
-    Resource localizeResource(Resource resource, Locale locale)
-    {
-        if (locale == null)
-            return resource;
-
-        Resource localized = resource.getLocalization(locale);
-        if (localized != null && localized.getResourceURL() != null)
-            return localized;
-
-        return resource;
-    }
-
-    Resource findComponentClassResource(IComponent component, IRequestCycle cycle, String baseName, String extension, Locale locale)
-    {
-        Resource base = component.getSpecification().getSpecificationLocation();
-        String componentPackages = component.getNamespace().getPropertyValue("org.apache.tapestry.component-class-packages");
-
-        // this relies on finding things from the component class name
-
-        if (componentPackages == null)
-            return null;
-
-        String className = component.getSpecification().getComponentClassName();
-        if (className == null)
-            return null;
-
-        String[] packages = TapestryUtils.split(componentPackages);
-        for (int i=0; i < packages.length; i++)
-        {
-            // find matching package in class
-            int index = className.lastIndexOf(packages[i]);
-            if (index < 0)
-                continue;
-
-            // First try context
-
-            String templateName = className.substring((index + packages[i].length()) + 1, className.length()).replaceAll("\\.", "/");
-            templateName =  templateName + extension;
-
-            if (_contextAssetFactory.assetExists(component.getSpecification(), _webInfAppLocation, templateName, locale))
-            {
-                return _contextAssetFactory.createAsset(_webInfAppLocation, component.getSpecification(),  templateName, locale, component.getLocation()).getResourceLocation();
-            } else if (_contextAssetFactory.assetExists(component.getSpecification(), _webInfLocation, templateName, locale))
-            {
-                return _contextAssetFactory.createAsset(_webInfLocation, component.getSpecification(), templateName, locale, component.getLocation()).getResourceLocation();
-            }
-
-            // else classpath
-
-            String resourceName = baseName + extension;
-
-            if (_classpathAssetFactory.assetExists(component.getSpecification(), base, resourceName, locale))
-            {
-                return _classpathAssetFactory.createAsset(base, component.getSpecification(), resourceName, locale, component.getLocation()).getResourceLocation();
-            }
-
-            // if all else fails try package name context paths
-
-            String[] packageSegments = packages[i].split("\\.");
-            
-            if (packageSegments != null && packageSegments.length > 0)
-            {
-                // start with last segment and slowly build the path up with all of them
-                String packagePath = "";
-
-                for (int s=packageSegments.length - 1; s > -1; s--)
-                {
-                    packagePath += packageSegments[s] + "/";
-
-                    String templatePath = packagePath + templateName;
-                    
-                    if (_contextAssetFactory.assetExists(component.getSpecification(), _webInfAppLocation, templatePath, locale))
-                    {
-                        return _contextAssetFactory.createAsset(_webInfAppLocation, component.getSpecification(),  templatePath, locale, component.getLocation()).getResourceLocation();
-                    } else if (_contextAssetFactory.assetExists(component.getSpecification(), _webInfLocation, templatePath, locale))
-                    {
-                        return _contextAssetFactory.createAsset(_webInfLocation, component.getSpecification(), templatePath, locale, component.getLocation()).getResourceLocation();
-                    }
-                }
-            }
-        }
-
-        return null;
-    }
-
-    public void setContextRoot(Resource contextRoot)
-    {
-        _contextRoot = contextRoot;
-    }
-
-    public void setClasspathAssetFactory(AssetFactory classpathAssetFactory)
-    {
-        _classpathAssetFactory = classpathAssetFactory;
-    }
-
-    public void setContextAssetFactory(AssetFactory contextAssetFactory)
-    {
-        _contextAssetFactory = contextAssetFactory;
-    }
-
-    public void setApplicationId(String applicationId)
-    {
-        _applicationId = applicationId;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolver.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolver.java
deleted file mode 100644
index 13e9dac..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolver.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Service interface for locating component specifications.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ComponentSpecificationResolver
-{
-    /**
-     * Passed the namespace of a container (to resolve the type in) and the type to resolve,
-     * performs the processing. A "bare type" (without a library prefix) may be in the
-     * containerNamespace, or the framework namespace (a search occurs in that order).
-     * 
-     * @param cycle
-     *            current request cycle
-     * @param containerNamespace
-     *            namespace that may contain a library referenced in the type
-     * @param type
-     *            the component specification to find, either a simple name, or prefixed with a
-     *            library id (defined for the container namespace)
-     * @see #getNamespace()
-     * @see #getSpecification()
-     */
-    void resolve(IRequestCycle cycle, INamespace containerNamespace, String type,
-            Location location);
-
-    /**
-     * Like
-     * {@link #resolve(org.apache.tapestry.IRequestCycle, org.apache.tapestry.INamespace, java.lang.String, Location)},
-     * but used when the type has already been parsed into a library id and a simple type.
-     * 
-     * @param cycle
-     *            current request cycle
-     * @param containerNamespace
-     *            namespace that may contain a library referenced in the type
-     * @param libraryId
-     *            the library id within the container namespace, or null
-     * @param type
-     *            the component specification to find as a simple name (without a library prefix)
-     * @param location
-     *            of reference to be resolved
-     * @throws ApplicationRuntimeException
-     *             if the type cannot be resolved
-     */
-    void resolve(IRequestCycle cycle, INamespace containerNamespace, String libraryId,
-            String type, Location location);
-
-    /**
-     * The specification resolved by the resolve() method.
-     */
-    IComponentSpecification getSpecification();
-
-    /**
-     * The namespace containing the resolved component.
-     */
-    INamespace getNamespace();
-
-    /**
-     * Returns the unqualified type of the component (i.e., with any namespace prefix stripped off).
-     */
-    String getType();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java
deleted file mode 100644
index 79a1a07..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java
+++ /dev/null
@@ -1,308 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.LocationImpl;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.ClassFinder;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Utility class that understands the rules of component types (which may optionally have a library
- * prefix) and can resolve the type to a {@link org.apache.tapestry.INamespace}and a
- * {@link org.apache.tapestry.spec.IComponentSpecification}.
- * <p>
- * Like {@link org.apache.tapestry.resolver.PageSpecificationResolver}, if the component is not
- * defined explicitly in the namespace, a search may occur: Performs the tricky work of resolving a
- * page name to a page specification. The search for pages in the application namespace is the most
- * complicated, since Tapestry searches for pages that aren't explicitly defined in the application
- * specification. The search, based on the <i>simple-name </i> of the page, goes as follows:
- * <ul>
- * <li>As declared in the application specification
- * <li><i>type</i>.jwc in the same folder as the application specification
- * <li><i>type</i> jwc in the WEB-INF/ <i>servlet-name </i> directory of the context root
- * <li><i>type</i>.jwc in WEB-INF
- * <li><i>type</i>.jwc in the application root (within the context root)
- * <li>By searching the framework namespace
- * <li>By searching for a named class file within the org.apache.tapestry.component-class-packages
- * property (defined within the namespace)
- * </ul>
- *
- * The search for components in library namespaces is more abbreviated:
- * <ul>
- * <li>As declared in the library specification
- * <li><i>type </i>.jwc in the same folder as the library specification
- * <li>By searching the framework namespace
- * </ul>
- *
- * @since 3.0
- */
-
-public class ComponentSpecificationResolverImpl extends AbstractSpecificationResolver implements ComponentSpecificationResolver
-{
-    /** Set by container. */
-    private Log _log;
-
-    /** Set by resolve(). */
-    private String _type;
-
-    private ClassFinder _classFinder;
-
-    private ClassResolver _classResolver;
-
-    protected void reset()
-    {
-        _type = null;
-
-        super.reset();
-    }
-
-    /**
-     * Passed the namespace of a container (to resolve the type in) and the type to resolve,
-     * performs the processing. A "bare type" (without a library prefix) may be in the
-     * containerNamespace, or the framework namespace (a search occurs in that order).
-     *
-     * @param cycle
-     *            current request cycle
-     * @param containerNamespace
-     *            namespace that may contain a library referenced in the type
-     * @param type
-     *            the component specification to find, either a simple name, or prefixed with a
-     *            library id (defined for the container namespace)
-     * @see #getNamespace()
-     * @see #getSpecification()
-     */
-
-    public void resolve(IRequestCycle cycle, INamespace containerNamespace, String type, Location location)
-    {
-        int colonx = type.indexOf(':');
-
-        if (colonx > 0)
-        {
-            String libraryId = type.substring(0, colonx);
-            String simpleType = type.substring(colonx + 1);
-
-            resolve(cycle, containerNamespace, libraryId, simpleType, location);
-        }
-        else
-            resolve(cycle, containerNamespace, null, type, location);
-
-        IComponentSpecification spec = getSpecification();
-
-        if (spec.isDeprecated())
-            _log.warn(ResolverMessages.componentIsDeprecated(type, location));
-    }
-
-    /**
-     * Like
-     * {@link #resolve(org.apache.tapestry.IRequestCycle, org.apache.tapestry.INamespace, java.lang.String, Location)},
-     * but used when the type has already been parsed into a library id and a simple type.
-     *
-     * @param cycle
-     *            current request cycle
-     * @param containerNamespace
-     *            namespace that may contain a library referenced in the type
-     * @param libraryId
-     *            the library id within the container namespace, or null
-     * @param type
-     *            the component specification to find as a simple name (without a library prefix)
-     * @param location
-     *            of reference to be resolved
-     * @throws ApplicationRuntimeException
-     *             if the type cannot be resolved
-     */
-
-    public void resolve(IRequestCycle cycle, INamespace containerNamespace, String libraryId,
-                        String type, Location location)
-    {
-        reset();
-        _type = type;
-
-        INamespace namespace;
-        try
-        {
-            namespace = findNamespaceForId(containerNamespace, libraryId);
-        }
-        catch (ApplicationRuntimeException e)
-        {
-            throw new ApplicationRuntimeException(e.getMessage(), location, e);
-        }
-
-        setNamespace(namespace);
-
-        if (namespace.containsComponentType(type))
-        {
-            setSpecification(namespace.getComponentSpecification(type));
-            return;
-        }
-
-        IComponentSpecification spec = searchForComponent(cycle);
-
-        // If not found after search, check to see if it's in
-        // the framework instead.
-
-        if (spec == null)
-        {
-            throw new ApplicationRuntimeException(ResolverMessages.noSuchComponentType(
-              type,
-              namespace), location, null);
-
-        }
-
-        setSpecification(spec);
-
-        // Install it into the namespace, to short-circuit any future search.
-
-        install();
-    }
-
-    // Hm. This could maybe go elsewhere, say onto ISpecificationSource
-
-    private IComponentSpecification searchForComponent(IRequestCycle cycle)
-    {
-        IComponentSpecification result = null;
-        INamespace namespace = getNamespace();
-
-        if (_log.isDebugEnabled())
-            _log.debug(ResolverMessages.resolvingComponent(_type, namespace));
-
-        String expectedName = _type + ".jwc";
-        Resource namespaceLocation = namespace.getSpecificationLocation();
-
-        // Look for appropriate file in same folder as the library (or application)
-        // specificaiton.
-
-        result = check(namespaceLocation.getRelativeResource(expectedName));
-
-        if (result != null)
-            return result;
-
-        if (namespace.isApplicationNamespace()) {
-
-            // The application namespace gets some extra searching.
-
-            result = check(getWebInfAppLocation().getRelativeResource(expectedName));
-
-            if (result == null)
-                result = check(getWebInfLocation().getRelativeResource(expectedName));
-
-            if (result == null)
-                result = check((getContextRoot().getRelativeResource(expectedName)));
-
-            if (result != null)
-                return result;
-        }
-
-        result = getDelegate().findComponentSpecification(cycle, namespace, _type);
-        if (result != null)
-            return result;
-
-        result = searchForComponentClass(namespace, _type);
-
-        if (result != null)
-            return result;
-
-        // Not in the library or app spec; does it match a component
-        // provided by the Framework?
-
-        INamespace framework = getSpecificationSource().getFrameworkNamespace();
-
-        if (framework.containsComponentType(_type))
-            return framework.getComponentSpecification(_type);
-
-        return null;
-    }
-
-    IComponentSpecification searchForComponentClass(INamespace namespace, String type)
-    {
-        String packages = namespace.getPropertyValue("org.apache.tapestry.component-class-packages");
-
-        String className = type.replace('/', '.');
-
-        Class componentClass = _classFinder.findClass(packages, className);
-        if (componentClass == null)
-            return null;
-
-        IComponentSpecification spec = new ComponentSpecification();
-
-        Resource namespaceResource = namespace.getSpecificationLocation();
-        Resource componentResource = namespaceResource.getRelativeResource(type + ".jwc");
-
-        // try classpath relative if namespace relative doesn't resolve
-
-        if (componentResource.getResourceURL() == null) {
-
-            componentResource = new ClasspathResource(_classResolver, componentClass.getName().replace('.', '/'));
-        }
-
-        Location location = new LocationImpl(componentResource);
-
-        spec.setLocation(location);
-        spec.setSpecificationLocation(componentResource);
-        spec.setComponentClassName(componentClass.getName());
-
-        return spec;
-    }
-
-    private IComponentSpecification check(Resource resource)
-    {
-        if (_log.isDebugEnabled())
-            _log.debug("Checking: " + resource);
-
-        if (resource.getResourceURL() == null)
-            return null;
-
-        return getSpecificationSource().getComponentSpecification(resource);
-    }
-
-    private void install()
-    {
-        INamespace namespace = getNamespace();
-        IComponentSpecification specification = getSpecification();
-
-        if (_log.isDebugEnabled())
-            _log.debug(ResolverMessages.installingComponent(_type, namespace, specification));
-
-        namespace.installComponentSpecification(_type, specification);
-    }
-
-    public String getType()
-    {
-        return _type;
-    }
-
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-
-    public void setClassFinder(ClassFinder classFinder)
-    {
-        _classFinder = classFinder;
-    }
-
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/IComponentResourceResolver.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/IComponentResourceResolver.java
deleted file mode 100644
index 9a48b80..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/IComponentResourceResolver.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.apache.tapestry.resolver;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-import java.util.Locale;
-
-/**
- * Service responsible for finding resources relative or specific to a {@link org.apache.tapestry.IComponent}.
- * 
- */
-public interface IComponentResourceResolver {
-
-    /**
-     * Searches for a resource relative to the specified {@link IComponent}, optionally also attemping to
-     * find a localized version of the resource using the specified {@link Locale}.
-     * 
-     * @param component
-     *          The component to find the resource relative to.
-     * @param cycle
-     *          The current request.
-     * @param name
-     *          Optional resource name to search for, the default is to use the component name.
-     * @param extension
-     *          Extension name of the resource, such as &lt;ComponentName&gt;.properties for properties
-     *          / &lt;ComponentName&gt;.html for templates and so on.  
-     * @param locale
-     *          Optional localization specifier.
-     * 
-     * @return The resolved resource, or null if none could be found. The returned {@link Resource} may
-     *          also be not null but still not valid. To ensure validity check {@link org.apache.hivemind.Resource#getResourceURL()} for
-     *          a not null value.
-     */
-    Resource findComponentResource(IComponent component, IRequestCycle cycle, String name, String extension, Locale locale);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ISpecificationResolverDelegate.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ISpecificationResolverDelegate.java
deleted file mode 100644
index 4ec7120..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ISpecificationResolverDelegate.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Delegate interface used when a page or component specification can not be
- * found by the normal means. This allows hooks to support specifications from
- * unusual locations, or generated on the fly.
- * <p>
- * The delegate must be coded in a threadsafe manner.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public interface ISpecificationResolverDelegate
-{
-
-    /**
-     * Invoked by {@link PageSpecificationResolver} to find the indicated page
-     * specification. Returns the specification, or null. The specification, if
-     * returned, <em>will be cached</em> (this represents a change from
-     * release 3.0 to release 4.0).
-     * 
-     * @param cycle
-     *            used to gain access to framework and Servlet API objects
-     * @param namespace
-     *            the namespace containing the page
-     * @param simplePageName
-     *            the name of the page (without any namespace prefix)
-     */
-
-    IComponentSpecification findPageSpecification(IRequestCycle cycle,
-            INamespace namespace, String simplePageName);
-
-    /**
-     * Invoked by {@link PageSpecificationResolver} to find the indicated
-     * component specification. Returns the specification, or null. The
-     * specification <em>will be cached</em> (this represents a change from
-     * release 3.0 to release 4.0).
-     * 
-     * @param cycle
-     *            used to gain access to framework and Servlet API objects
-     * @param namespace
-     *            the namespace containing the component
-     * @param type
-     *            the component type (without any namespace prefix)
-     */
-
-    IComponentSpecification findComponentSpecification(
-            IRequestCycle cycle, INamespace namespace, String type);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/PageSpecificationResolver.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/PageSpecificationResolver.java
deleted file mode 100644
index 7621f84..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/PageSpecificationResolver.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Service interface for locating a page specification given its name.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface PageSpecificationResolver
-{
-
-    /**
-     * Resolve the name (which may have a library id prefix) to a namespace (see
-     * {@link #getNamespace()}) and a specification (see
-     * {@link #getSpecification()}).
-     * 
-     * @throws org.apache.tapestry.PageNotFoundException
-     *             if the name cannot be resolved to the name of a page
-     */
-    void resolve(IRequestCycle cycle, String prefixedName);
-
-    /**
-     * Returns just the name of the page, unqualified by any namespace.
-     */
-    String getSimplePageName();
-
-    /**
-     * Returns the namespace containing the page.
-     */
-    INamespace getNamespace();
-
-    /**
-     * Returns the specification for the page.
-     */
-    IComponentSpecification getSpecification();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/PageSpecificationResolverImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/PageSpecificationResolverImpl.java
deleted file mode 100644
index 6decc98..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/PageSpecificationResolverImpl.java
+++ /dev/null
@@ -1,317 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.LocationImpl;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageNotFoundException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.ComponentPropertySource;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Performs the tricky work of resolving a page name to a page specification.
- * The search for pages in the application namespace is the most complicated,
- * since Tapestry searches for pages that aren't explicitly defined in the
- * application specification. The search, based on the <i>simple-name </i> of
- * the page, goes as follows:
- * <ul>
- * <li>As declared in the application specification
- * <li><i>simple-name </i>.page in the same folder as the application
- * specification
- * <li><i>simple-name </i> page in the WEB-INF/ <i>servlet-name </i> directory
- * of the context root
- * <li><i>simple-name </i>.page in WEB-INF
- * <li><i>simple-name </i>.page in the application root (within the context
- * root)
- * <li><i>simple-name </i>.html as a template in the application root, for
- * which an implicit specification is generated
- * <li>By searching the framework namespace
- * <li>By invoking
- * {@link org.apache.tapestry.resolver.ISpecificationResolverDelegate#findPageSpecification(IRequestCycle, INamespace, String)}
- * </ul>
- * <p>
- * Pages in a component library are searched for in a more abbreviated fashion:
- * <ul>
- * <li>As declared in the library specification
- * <li><i>simple-name </i>.page in the same folder as the library specification
- * <li>By searching the framework namespace
- * <li>By invoking
- * {@link org.apache.tapestry.resolver.ISpecificationResolverDelegate#findPageSpecification(IRequestCycle, INamespace, String)}
- * </ul>
- * 
- * @see org.apache.tapestry.engine.IPageSource
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class PageSpecificationResolverImpl extends
-        AbstractSpecificationResolver implements PageSpecificationResolver
-{
-
-    private static final String WEB_INF = "/WEB-INF/";
-
-    /** set by container. */
-    private Log _log;
-
-    /** Set by resolve(). */
-    private String _simpleName;
-
-    /** @since 4.0 * */
-    private INamespace _applicationNamespace;
-
-    /** @since 4.0 * */
-    private INamespace _frameworkNamespace;
-
-    /** @since 4.0 */
-
-    private ComponentPropertySource _componentPropertySource;
-
-    public void initializeService()
-    {
-        _applicationNamespace = getSpecificationSource()
-                .getApplicationNamespace();
-        _frameworkNamespace = getSpecificationSource().getFrameworkNamespace();
-
-        super.initializeService();
-    }
-
-    protected void reset()
-    {
-        _simpleName = null;
-
-        super.reset();
-    }
-
-    /**
-     * Resolve the name (which may have a library id prefix) to a namespace (see
-     * {@link #getNamespace()}) and a specification (see
-     * {@link #getSpecification()}).
-     * 
-     * @throws ApplicationRuntimeException
-     *             if the name cannot be resolved
-     */
-
-    public void resolve(IRequestCycle cycle, String prefixedName)
-    {
-        reset();
-
-        INamespace namespace = null;
-
-        int colonx = prefixedName.indexOf(':');
-
-        if (colonx > 0)
-        {
-            _simpleName = prefixedName.substring(colonx + 1);
-            String namespaceId = prefixedName.substring(0, colonx);
-
-            namespace = findNamespaceForId(_applicationNamespace, namespaceId);
-        }
-        else
-        {
-            _simpleName = prefixedName;
-
-            namespace = _applicationNamespace;
-        }
-
-        setNamespace(namespace);
-
-        if (namespace.containsPage(_simpleName))
-        {
-            setSpecification(namespace.getPageSpecification(_simpleName));
-            return;
-        }
-
-        // Not defined in the specification, so it's time to hunt it down.
-
-        searchForPage(cycle);
-
-        if (getSpecification() == null)
-            throw new PageNotFoundException(_simpleName,
-                    ResolverMessages.noSuchPage(_simpleName, namespace));
-    }
-
-    public String getSimplePageName()
-    {
-        return _simpleName;
-    }
-
-    private void searchForPage(IRequestCycle cycle)
-    {
-        INamespace namespace = getNamespace();
-
-        if (_log.isDebugEnabled())
-            _log.debug(ResolverMessages.resolvingPage(_simpleName, namespace));
-
-        // Check with and without the leading slash
-
-        if (_simpleName.regionMatches(true, 0, WEB_INF, 0, WEB_INF.length())
-                || _simpleName.regionMatches(true, 0, WEB_INF, 1, WEB_INF.length() - 1))
-            throw new ApplicationRuntimeException(ResolverMessages.webInfNotAllowed(_simpleName));
-
-        String expectedName = _simpleName + ".page";
-
-        Resource namespaceLocation = namespace.getSpecificationLocation();
-
-        // See if there's a specification file in the same folder
-        // as the library or application specification that's
-        // supposed to contain the page.
-
-        if (found(namespaceLocation, expectedName))
-            return;
-
-        if (namespace.isApplicationNamespace())
-        {
-
-            // The application namespace gets some extra searching.
-
-            if (found(getWebInfAppLocation(), expectedName))
-                return;
-
-            if (found(getWebInfLocation(), expectedName))
-                return;
-
-            if (found(getContextRoot(), expectedName))
-                return;
-
-            // The wierd one ... where we see if there's a template in the
-            // application root
-            // location.
-
-            String templateName = _simpleName + "." + getTemplateExtension();
-
-            Resource templateResource = getContextRoot().getRelativeResource(templateName);
-
-            if (_log.isDebugEnabled())
-                _log.debug(ResolverMessages.checkingResource(templateResource));
-
-            if (templateResource.getResourceURL() != null)
-            {
-                setupImplicitPage(templateResource, namespaceLocation);
-                return;
-            }
-
-            // Not found in application namespace, so maybe its a framework
-            // page.
-
-            if (_frameworkNamespace.containsPage(_simpleName))
-            {
-                if (_log.isDebugEnabled())
-                    _log.debug(ResolverMessages.foundFrameworkPage(_simpleName));
-
-                setNamespace(_frameworkNamespace);
-
-                // Note: This implies that normal lookup rules don't work
-                // for the framework! Framework pages must be
-                // defined in the framework library specification.
-
-                setSpecification(_frameworkNamespace.getPageSpecification(_simpleName));
-                return;
-            }
-        }
-
-        // Not found by any normal rule, so its time to
-        // consult the delegate.
-
-        IComponentSpecification specification = getDelegate().findPageSpecification(cycle, namespace, _simpleName);
-
-        if (specification != null)
-        {
-            setSpecification(specification);
-            install();
-        }
-    }
-
-    private void setupImplicitPage(Resource resource, Resource namespaceLocation)
-    {
-        if (_log.isDebugEnabled())
-            _log.debug(ResolverMessages.foundHTMLTemplate(resource));
-
-        // TODO: The SpecFactory in Specification parser should be used in some
-        // way to create an IComponentSpecification!
-
-        // The virtual location of the page specification is relative to the
-        // namespace (typically, the application specification). This will be
-        // used when searching for the page's message catalog or other related assets.
-        
-        Resource pageResource = namespaceLocation.getRelativeResource(_simpleName + ".page");
-        
-        IComponentSpecification specification = new ComponentSpecification();
-        specification.setPageSpecification(true);
-        specification.setSpecificationLocation(pageResource);
-        specification.setLocation(new LocationImpl(resource));
-        
-        setSpecification(specification);
-        
-        install();
-    }
-
-    private boolean found(Resource baseResource, String expectedName)
-    {
-        Resource resource = baseResource.getRelativeResource(expectedName);
-
-        if (_log.isDebugEnabled())
-            _log.debug(ResolverMessages.checkingResource(resource));
-
-        if (resource.getResourceURL() == null)
-            return false;
-
-        setSpecification(getSpecificationSource().getPageSpecification(resource));
-
-        install();
-
-        return true;
-    }
-    
-    private void install()
-    {
-        INamespace namespace = getNamespace();
-        IComponentSpecification specification = getSpecification();
-        
-        if (_log.isDebugEnabled())
-            _log.debug(ResolverMessages.installingPage(_simpleName, namespace, specification));
-        
-        namespace.installPageSpecification(_simpleName, specification);
-    }
-
-    /**
-     * If the namespace defines the template extension (as property
-     * {@link Tapestry#TEMPLATE_EXTENSION_PROPERTY}, then that is used,
-     * otherwise the default is used.
-     */
-
-    private String getTemplateExtension()
-    {
-        return _componentPropertySource.getNamespaceProperty(getNamespace(), Tapestry.TEMPLATE_EXTENSION_PROPERTY);
-    }
-
-    /** @since 4.0 */
-
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-
-    /** @since 4.0 */
-    public void setComponentPropertySource(ComponentPropertySource componentPropertySource)
-    {
-        _componentPropertySource = componentPropertySource;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ResolverMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ResolverMessages.java
deleted file mode 100644
index cae6c68..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ResolverMessages.java
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Messages for the resolver package.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-final class ResolverMessages
-{
-
-    private static final MessageFormatter _formatter = new MessageFormatter(
-            ResolverMessages.class);
-    
-    /* defeat instantiation */
-    private ResolverMessages() { }
-    
-    static String noSuchComponentType(String type, INamespace namespace)
-    {
-        return _formatter.format("no-such-component-type", type, namespace);
-    }
-
-    static String noSuchPage(String name, INamespace namespace)
-    {
-        return _formatter.format("no-such-page", name, namespace
-                .getNamespaceId());
-    }
-
-    static String resolvingComponent(String type, INamespace namespace)
-    {
-        return _formatter.format("resolving-component", type, namespace);
-    }
-
-    static String checkingResource(Resource resource)
-    {
-        return _formatter.format("checking-resource", resource);
-    }
-
-    static String installingComponent(String type, INamespace namespace,
-            IComponentSpecification specification)
-    {
-        return _formatter.format("installing-component", type, namespace,
-                specification);
-    }
-
-    static String installingPage(String pageName, INamespace namespace,
-            IComponentSpecification specification)
-    {
-        return _formatter.format("installing-page", pageName, namespace,
-                specification);
-    }
-
-    static String resolvingPage(String pageName, INamespace namespace)
-    {
-        return _formatter.format("resolving-page", pageName, namespace);
-    }
-
-    static String foundFrameworkPage(String pageName)
-    {
-        return _formatter.format("found-framework-page", pageName);
-    }
-
-    static String foundHTMLTemplate(Resource resource)
-    {
-        return _formatter.format("found-html-template", resource);
-    }
-
-    public static String componentIsDeprecated(String componentType,
-            Location location)
-    {
-        return _formatter.format("component-is-deprecated", componentType,
-                HiveMind.getLocationString(location));
-    }
-
-    static String webInfNotAllowed(String simpleName)
-    {
-        return _formatter.format("web-inf-not-allowed", simpleName);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ResolverStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ResolverStrings.properties
deleted file mode 100644
index af5c1ef..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/ResolverStrings.properties
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-no-such-component-type=Component ''{0}'' not found in {1}.
-no-such-page=Page ''{0}'' not found in {1}.
-resolving-component=Resolving component ''{0}'' in {1}.
-resolving-page=Resolving page ''{0}'' in {1}.
-checking-resource=Checking: {0}
-installing-component=Installing component type ''{0}'' into {1} as {2}.
-installing-page=Installing page ''{0}'' into {1} as {2}.
-found-framework-page=Found page ''{0}'' in framework namespace.
-found-html-template=Found HTML template at {0}.
-component-is-deprecated=Component ''{0}'' (at {1}) is deprecated, and will likely be removed in a later release. Consult its documentation to find a replacement component.
-web-inf-not-allowed=Page name ''{0}'' is not valid, as it directly references a file stored in the WEB-INF folder.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/package.html
deleted file mode 100644
index 2d51ce5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/resolver/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Namespace resolution of pages/components/etc..
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/AbstractToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/AbstractToken.java
deleted file mode 100644
index a3c06f2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/AbstractToken.java
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Base class for creating tokens which may contain other tokens.
- * 
- * @author Howard Lewis Ship
- * @since 0.2.9
- */
-
-abstract class AbstractToken implements IScriptToken
-{
-    private List _tokens;
-
-    private Location _location;
-
-    protected AbstractToken(Location location)
-    {
-        _location = location;
-    }
-
-    public Location getLocation()
-    {
-        return _location;
-    }
-
-    public void addToken(IScriptToken token)
-    {
-        if (_tokens == null)
-            _tokens = new ArrayList();
-
-        _tokens.add(token);
-    }
-
-    /**
-     * Invokes {@link IScriptToken#write(StringBuffer,ScriptSession)}on each child token (if there
-     * are any).
-     */
-
-    protected void writeChildren(StringBuffer buffer, ScriptSession session)
-    {
-        if (_tokens == null)
-            return;
-
-        Iterator i = _tokens.iterator();
-
-        while (i.hasNext())
-        {
-            IScriptToken token = (IScriptToken) i.next();
-
-            token.write(buffer, session);
-        }
-    }
-
-    /**
-     * Evaluates the expression against the session's symbols, using
-     * {@link org.apache.tapestry.services.ExpressionEvaluator#read(Object, String)} and returns the result.
-     */
-    protected Object evaluate(String expression, ScriptSession session)
-    {
-
-        try
-        {
-            return session.evaluate(expression);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), _location, ex);
-        }
-    }
-
-    /**
-     * Evaluates an expression and coerces the result to a boolean.
-     * 
-     * @since 4.0
-     */
-
-    protected boolean evaluateBoolean(String expression, ScriptSession session)
-    {
-        try
-        {
-            Boolean b = (Boolean) session.evaluate(expression, Boolean.class);
-
-            return b.booleanValue();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), _location, ex);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/AbstractTokenRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/AbstractTokenRule.java
deleted file mode 100644
index be4e0f6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/AbstractTokenRule.java
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.util.xml.BaseRule;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-
-/**
- * Base class for the rules that build {@link org.apache.tapestry.script.IScriptToken}s.
- * Used with classes that can contain a mix of text and elements (those that
- * accept "full content").
- * 
- *
- * @author Howard Lewis Ship
- * @since 3.0
- **/
-
-abstract class AbstractTokenRule extends BaseRule
-{
-
-    private static final int STATE_START = 0;
-    private static final int STATE_DOLLAR = 1;
-    private static final int STATE_COLLECT_EXPRESSION = 2;
-    
-    /**
-     * Adds a token to its parent, the top object on the stack.
-     */
-    protected void addToParent(RuleDirectedParser parser, IScriptToken token)
-    {
-        IScriptToken parent = (IScriptToken) parser.peek();
-
-        parent.addToken(token);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void content(RuleDirectedParser parser, String content)
-    {
-        IScriptToken token = (IScriptToken) parser.peek();
-
-        addTextTokens(token, content, parser.getLocation());
-    }
-
-    /**
-     * Parses the provided text and converts it into a series of .
-     */
-    protected void addTextTokens(IScriptToken token, String text, Location location)
-    {
-        char[] buffer = text.toCharArray();
-        int state = STATE_START;
-        int blockStart = 0;
-        int blockLength = 0;
-        int expressionStart = -1;
-        int expressionLength = 0;
-        int i = 0;
-        int braceDepth = 0;
-
-        while (i < buffer.length)
-        {
-            char ch = buffer[i];
-
-            switch (state)
-            {
-                case STATE_START :
-
-                    if (ch == '$')
-                    {
-                        state = STATE_DOLLAR;
-                        i++;
-                        continue;
-                    }
-
-                    blockLength++;
-                    i++;
-                    continue;
-
-                case STATE_DOLLAR :
-
-                    if (ch == '{')
-                    {
-                        state = STATE_COLLECT_EXPRESSION;
-                        i++;
-
-                        expressionStart = i;
-                        expressionLength = 0;
-                        braceDepth = 1;
-
-                        continue;
-                    }
-
-                    // The '$' was just what it was, not the start of a ${} expression
-                    // block, so include it as part of the static text block.
-
-                    blockLength++;
-
-                    state = STATE_START;
-                    continue;
-
-                case STATE_COLLECT_EXPRESSION :
-
-                    if (ch != '}')
-                    {
-                        if (ch == '{')
-                            braceDepth++;
-
-                        i++;
-                        expressionLength++;
-                        continue;
-                    }
-
-                    braceDepth--;
-
-                    if (braceDepth > 0)
-                    {
-                        i++;
-                        expressionLength++;
-                        continue;
-                    }
-
-                    // Hit the closing brace of an expression.
-
-                    // Degenerate case:  the string "${}".
-
-                    if (expressionLength == 0)
-                        blockLength += 3;
-
-                    if (blockLength > 0)
-                        token.addToken(constructStatic(text, blockStart, blockLength, location));
-
-                    if (expressionLength > 0)
-                    {
-                        String expression =
-                            text.substring(expressionStart, expressionStart + expressionLength);
-
-                        token.addToken(new InsertToken(expression, location));
-                    }
-
-                    i++;
-                    blockStart = i;
-                    blockLength = 0;
-
-                    // And drop into state start
-
-                    state = STATE_START;
-
-                    continue;
-            }
-
-        }
-
-        // OK, to handle the end.  Couple of degenerate cases where
-        // a ${...} was incomplete, so we adust the block length.
-
-        if (state == STATE_DOLLAR)
-            blockLength++;
-
-        if (state == STATE_COLLECT_EXPRESSION)
-            blockLength += expressionLength + 2;
-
-        if (blockLength > 0)
-            token.addToken(constructStatic(text, blockStart, blockLength, location));
-    }
-
-    private IScriptToken constructStatic(
-        String text,
-        int blockStart,
-        int blockLength,
-        Location location)
-    {
-        String literal = text.substring(blockStart, blockStart + blockLength);
-
-        return new StaticToken(literal, location);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/BodyRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/BodyRule.java
deleted file mode 100644
index 80a5b2a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/BodyRule.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs a {@link BodyToken} from
- * a &lt;body&gt; element, which contains full content.
- *
- * @author Howard Lewis Ship
- * @since 3.0
- */
-class BodyRule extends AbstractTokenRule
-{
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        BodyToken token = new BodyToken(parser.getLocation());
-        addToParent(parser, token);
-
-        parser.push(token);
-    }
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/BodyToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/BodyToken.java
deleted file mode 100644
index e2ebf53..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/BodyToken.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.Location;
-
-/**
- * Generates a String from its child tokens, then applies it to
- * {@link ScriptSessionImpl#setBody(String)}.
- * 
- * @author Howard Lewis Ship
- * @since 0.2.9
- */
-
-class BodyToken extends AbstractToken
-{
-
-    private int _bufferLengthHighwater = 100;
-
-    public BodyToken(Location location)
-    {
-        super(location);
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        if (buffer != null) throw new IllegalArgumentException();
-
-        StringBuffer useBuffer = new StringBuffer(_bufferLengthHighwater);
-
-        writeChildren(useBuffer, session);
-
-        session.addBodyScript(useBuffer.toString());
-
-        // Store the buffer length from this run for the next run, since its
-        // going to be approximately the right size.
-
-        _bufferLengthHighwater = Math.max(_bufferLengthHighwater, useBuffer
-                .length());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ForeachRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ForeachRule.java
deleted file mode 100644
index add48e4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ForeachRule.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs a {@link org.apache.tapestry.script.ForeachToken}
- * from a &lt;foreach&gt; element, which contains full content.
- * 
- * <p>As of 3.0, then index attribute has been added to foreach to keep 
- * track of the current index of the iterating collection.</p>
- *
- * @author Howard Lewis Ship, Harish Krishnaswamy
- * @since 3.0
- */
-class ForeachRule extends AbstractTokenRule
-{
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String key = getAttribute(attributes, "key");
-        String index = getAttribute(attributes, "index");
-        String expression = getAttribute(attributes, "expression");
-
-        if (expression == null)
-            expression = getAttribute(attributes, "property-path"); // 1.0, 1.1 DTD
-
-        IScriptToken token = new ForeachToken(key, index, expression, parser.getLocation());
-
-        addToParent(parser, token);
-
-        parser.push(token);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ForeachToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ForeachToken.java
deleted file mode 100644
index eba54a9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ForeachToken.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.hivemind.Location;
-
-/**
- * A looping operator, modeled after the Foreach component. It takes as its
- * source as property and iterates through the values, updating a symbol on each
- * pass.
- * <p>
- * As of 3.0, the index attribute has been added to foreach to keep track of the
- * current index of the iterating collection.
- * </p>
- * 
- * @author Howard Lewis Ship, Harish Krishnaswamy
- * @since 1.0.1
- */
-
-class ForeachToken extends AbstractToken
-{
-
-    private String _key;
-
-    private String _index;
-
-    private String _expression;
-
-    ForeachToken(String key, String index, String expression, Location location)
-    {
-        super(location);
-
-        _key = key;
-        _index = index;
-        _expression = expression;
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        Iterator i = (Iterator) session.evaluate(_expression, Iterator.class);
-
-        if (i == null) return;
-
-        Map symbols = session.getSymbols();
-
-        int index = 0;
-
-        while(i.hasNext())
-        {
-            Object newValue = i.next();
-
-            symbols.put(_key, newValue);
-
-            if (_index != null) symbols.put(_index, String.valueOf(index));
-
-            writeChildren(buffer, session);
-
-            index++;
-        }
-
-        // We leave the last value as a symbol; don't know if that's
-        // good or bad.
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IScriptToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IScriptToken.java
deleted file mode 100644
index da4decc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IScriptToken.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.Locatable;
-
-/**
- * Defines the responsibilities of a template token used by a
- * {@link org.apache.tapestry.IScript}.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IScriptToken extends Locatable
-{
-
-    /**
-     * Invoked to have the token add its text to the buffer. A token may need
-     * access to the symbols in order to produce its output.
-     * <p>
-     * Top level tokens (such as BodyToken) can expect that buffer will be null.
-     */
-
-    void write(StringBuffer buffer, ScriptSession session);
-
-    /**
-     * Invoked during parsing to add the token parameter as a child of this
-     * token.
-     * 
-     * @since 0.2.9
-     */
-
-    void addToken(IScriptToken token);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IfRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IfRule.java
deleted file mode 100644
index c64a587..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IfRule.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.IfToken} from an &lt;if&gt;
- * or &lt;if-not&gt; element, which contains full content.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-class IfRule extends AbstractTokenRule
-{
-
-    private boolean _condition;
-
-    public IfRule(boolean condition)
-    {
-        _condition = condition;
-    }
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String expression = getAttribute(attributes, "expression");
-
-        if (expression == null)
-            expression = getAttribute(attributes, "property-path"); // 1.0, 1.1
-                                                                    // DTD
-
-        IScriptToken token = new IfToken(_condition, expression, parser
-                .getLocation());
-
-        addToParent(parser, token);
-
-        parser.push(token);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IfToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IfToken.java
deleted file mode 100644
index 00dae70..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IfToken.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.Location;
-
-/**
- * A conditional portion of the generated script.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.1
- */
-
-class IfToken extends AbstractToken
-{
-
-    private boolean _condition;
-
-    private String _expression;
-
-    IfToken(boolean condition, String expression, Location location)
-    {
-        super(location);
-
-        _condition = condition;
-        _expression = expression;
-    }
-
-    private boolean evaluate(ScriptSession session)
-    {
-        return evaluateBoolean(_expression, session);
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        if (evaluate(session) == _condition) writeChildren(buffer, session);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IncludeScriptRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IncludeScriptRule.java
deleted file mode 100644
index 1b2f88c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IncludeScriptRule.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.BaseRule;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.IncludeScriptToken} from a
- * &lt;include-script&gt; element, which contains no content.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-class IncludeScriptRule extends BaseRule
-{
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String path = getAttribute(attributes, "resource-path");
-
-        IncludeScriptToken token = new IncludeScriptToken(path, parser
-                .getLocation());
-
-        IScriptToken parent = (IScriptToken) parser.peek();
-        parent.addToken(token);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IncludeScriptToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IncludeScriptToken.java
deleted file mode 100644
index 264767a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/IncludeScriptToken.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.util.ClasspathResource;
-
-/**
- *  A token for included scripts.
- *
- *  @author Howard Lewis Ship
- *  @since 1.0.5
- * 
- **/
-
-class IncludeScriptToken extends AbstractToken
-{
-    private String _resourcePath;
-
-    public IncludeScriptToken(String resourcePath, Location location)
-    {
-        super(location);
-
-        _resourcePath = resourcePath;
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        Resource includeLocation = null;
-
-        if (_resourcePath.startsWith("/"))
-        {
-            includeLocation =
-                new ClasspathResource(new DefaultClassResolver(),
-                    _resourcePath);
-        }
-        else
-        {
-            Resource baseLocation = session.getScriptTemplateResource();
-            includeLocation = baseLocation.getRelativeResource(_resourcePath);
-        }
-
-        // TODO: Allow for scripts relative to context resources!
-
-        session.addExternalScript(includeLocation);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InitRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InitRule.java
deleted file mode 100644
index 465f7aa..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InitRule.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.InitToken} from an
- * &lt;initialization&gt; element, which contains full content.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-public class InitRule extends AbstractTokenRule
-{
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        IScriptToken token = new InitToken(parser.getLocation());
-
-        addToParent(parser, token);
-
-        parser.push(token);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InitToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InitToken.java
deleted file mode 100644
index 5334f52..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InitToken.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.Location;
-
-/**
- * Generates a String from its child tokens, then applies it to
- * {@link ScriptSessionImpl#setInitialization(String)}.
- * 
- * @author Howard Lewis Ship
- * @since 0.2.9
- */
-
-class InitToken extends AbstractToken
-{
-
-    private int _bufferLengthHighwater = 100;
-
-    public InitToken(Location location)
-    {
-        super(location);
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        if (buffer != null) throw new IllegalArgumentException();
-
-        StringBuffer useBuffer = new StringBuffer(_bufferLengthHighwater);
-        
-        writeChildren(useBuffer, session);
-        
-        session.addInitializationScript(useBuffer.toString());
-        
-        // Store the buffer length from this run for the next run, since its
-        // going to be approximately the right size.
-
-        _bufferLengthHighwater = Math.max(_bufferLengthHighwater, useBuffer
-                .length());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InputSymbolRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InputSymbolRule.java
deleted file mode 100644
index 22e38da..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InputSymbolRule.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.xml.BaseRule;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.InputSymbolToken}from an
- * &lt;input-symbol&gt; element.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-class InputSymbolRule extends BaseRule
-{
-
-    private ClassResolver _resolver;
-
-    public InputSymbolRule(ClassResolver resolver)
-    {
-        _resolver = resolver;
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String key = getAttribute(attributes, "key");
-
-        parser.validate(key, Tapestry.SIMPLE_PROPERTY_NAME_PATTERN,
-                "ScriptParser.invalid-key");
-
-        String className = getAttribute(attributes, "class");
-        Class expectedClass = lookupClass(parser, className);
-
-        String required = getAttribute(attributes, "required");
-
-        InputSymbolToken token = new InputSymbolToken(key, expectedClass,
-                required.equals("yes"), parser.getLocation());
-
-        IScriptToken parent = (IScriptToken) parser.peek();
-        parent.addToken(token);
-    }
-
-    private Class lookupClass(RuleDirectedParser parser, String className)
-    {
-        if (HiveMind.isBlank(className)) return null;
-
-        try
-        {
-            return _resolver.findClass(className);
-        }
-        catch (Exception ex)
-        {
-            throw new DocumentParseException(Tapestry.format(
-                    "ScriptParser.unable-to-resolve-class", className), parser
-                    .getLocation(), ex);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InputSymbolToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InputSymbolToken.java
deleted file mode 100644
index 2108c9d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InputSymbolToken.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A token that validates that an input symbol exists or is of a
- *  declared type.
- *
- *
- *  @author Howard Lewis Ship
- *  @since 2.2
- * 
- **/
-
-class InputSymbolToken extends AbstractToken
-{
-    private String _key;
-    private Class _class;
-    private boolean _required;
-
-    InputSymbolToken(String key, Class clazz, boolean required, Location location)
-    {
-        super(location);
-
-        _key = key;
-        _class = clazz;
-        _required = required;
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        Object value = session.getSymbols().get(_key);
-
-        if (_required && value == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("InputSymbolToken.required", _key),
-                getLocation(),
-                null);
-
-        if (value != null && _class != null && !_class.isAssignableFrom(value.getClass()))
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "InputSymbolToken.wrong-type",
-                    _key,
-                    value.getClass().getName(),
-                    _class.getName()),
-                getLocation(),
-                null);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InsertRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InsertRule.java
deleted file mode 100644
index c947f25..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InsertRule.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.InsertToken}
- * from an &lt;insert&gt; element, which contains full content.
- * &lt;insert&gt; is a throwback to the 1.0 and 1.1 DTDs.
- *
- * @author Howard Lewis Ship
- * @since 3.0
- */
-class InsertRule extends AbstractTokenRule
-{
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        // property-path is really an OGNL expression.
-        String expression = getAttribute(attributes, "property-path");
-
-        // Was called key in the 1.0 DTD
-        if (expression == null)
-            expression = getAttribute(attributes, "key");
-
-        IScriptToken token = new InsertToken(expression, parser.getLocation());
-
-        addToParent(parser, token);
-
-        parser.push(token);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InsertToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InsertToken.java
deleted file mode 100644
index 914a397..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/InsertToken.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import java.io.Writer;
-import java.util.Map;
-
-import org.apache.hivemind.Location;
-
-/**
- * A token that writes the value of a property using a property path routed in
- * the symbols..
- * 
- * @author Howard Lewis Ship
- */
-
-class InsertToken extends AbstractToken
-{
-
-    private String _expression;
-
-    InsertToken(String expression, Location location)
-    {
-        super(location);
-
-        _expression = expression;
-    }
-
-    /**
-     * Gets the named symbol from the symbols {@link Map}, verifies that it is
-     * a String, and writes it to the {@link Writer}.
-     */
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        Object value = evaluate(_expression, session);
-
-        if (value != null) buffer.append(value);
-    }
-
-    public void addToken(IScriptToken token)
-    {
-        // Should never be invoked.
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/LetRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/LetRule.java
deleted file mode 100644
index b116875..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/LetRule.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.LetToken}
- * from a &lt;let&gt; element, which may contain full content.
- *
- * @author Howard Lewis Ship
- * @since 3.0
- */
-class LetRule extends AbstractTokenRule
-{
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String key = getAttribute(attributes, "key");
-        
-        String unique = getAttribute(attributes, "unique");
-        boolean uniqueFlag = unique != null && unique.equals("yes"); 
-
-        parser.validate(key, Tapestry.SIMPLE_PROPERTY_NAME_PATTERN, "ScriptParser.invalid-key");
-
-        LetToken token = new LetToken(key, uniqueFlag, parser.getLocation());
-
-        addToParent(parser, token);
-
-        parser.push(token);
-    }
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/LetToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/LetToken.java
deleted file mode 100644
index b265b82..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/LetToken.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import java.util.Map;
-
-import org.apache.hivemind.Location;
-
-/**
- * Allows for the creation of new symbols that can be used in the script or
- * returned to the caller.
- * <p>
- * The &lt;let&gt; tag wraps around static text and &lt;insert&gt; elements. The
- * results are trimmed.
- * 
- * @author Howard Lewis Ship
- * @since 0.2.9
- */
-
-class LetToken extends AbstractToken
-{
-
-    private String _key;
-    private boolean _unique;
-    private int _bufferLengthHighwater = 20;
-
-    public LetToken(String key, boolean unique, Location location)
-    {
-        super(location);
-
-        _key = key;
-        _unique = unique;
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        if (buffer != null) throw new IllegalArgumentException();
-
-        StringBuffer useBuffer = new StringBuffer(_bufferLengthHighwater);
-
-        writeChildren(useBuffer, session);
-
-        // Store the symbol back into the root set of symbols.
-
-        Map symbols = session.getSymbols();
-
-        String value = useBuffer.toString().trim();
-
-        if (_unique) {
-            value = session.getUniqueString(value);
-            
-            // unique in scripts is mostly used to generate javascript identifiers
-            value = makeValidIdentifier(value);
-        }
-
-        symbols.put(_key, value);
-
-        // Store the buffer length from this run for the next run, since its
-        // going to be approximately the right size.
-
-        _bufferLengthHighwater = Math.max(_bufferLengthHighwater, useBuffer
-                .length());
-    }
-    
-    /**
-     * Replaces hyphens, colons and periods (which are allowed in html 
-     * but not in javascript identifiers) with underscores.
-     */
-    private static String makeValidIdentifier(String id) {
-        char[] chars = id.toCharArray();
-        for (int i=0; i<chars.length; i++) {
-            char c = chars[i];
-            if (c==':' || c=='-' || c=='.')
-                chars[i]='_';
-        }
-        return new String(chars);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ParsedScript.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ParsedScript.java
deleted file mode 100644
index b44dd27..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ParsedScript.java
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import java.util.Map;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.IScriptProcessor;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.ExpressionEvaluator;
-
-/**
- * A top level container for a number of {@link IScriptToken script tokens}.
- * 
- * @author Howard Lewis Ship
- * @since 0.2.9
- */
-
-public class ParsedScript extends AbstractToken implements IScript
-{
-
-    private Resource _scriptResource;
-
-    private ExpressionEvaluator _evaluator;
-
-    /** @since 4.0 */
-
-    private ValueConverter _valueConverter;
-
-    public ParsedScript(ExpressionEvaluator evaluator,
-            ValueConverter valueConverter, Location location)
-    {
-        super(location);
-
-        _evaluator = evaluator;
-        _valueConverter = valueConverter;
-        _scriptResource = location.getResource();
-    }
-
-    public Resource getScriptResource()
-    {
-        return _scriptResource;
-    }
-
-    /**
-     * Creates the {@link ScriptSessionImpl}and invokes
-     * {@link org.apache.tapestry.script.AbstractToken#writeChildren(java.lang.StringBuffer, org.apache.tapestry.script.ScriptSession)}.
-     */
-    public void execute(IRequestCycle cycle, IScriptProcessor processor, Map symbols)
-    {
-        ScriptSession session = new ScriptSessionImpl(_scriptResource, cycle,
-                processor, _evaluator, _valueConverter, symbols);
-
-        writeChildren(null, session);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void execute(IComponent target, IRequestCycle cycle, IScriptProcessor processor,
-            Map symbols)
-    {
-        ScriptSession session = new ScriptSessionImpl(_scriptResource, target, cycle,
-                processor, _evaluator, _valueConverter, symbols);
-
-        writeChildren(null, session);
-    }
-    
-    /**
-     * Does nothing; never invoked.
-     */
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptParser.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptParser.java
deleted file mode 100644
index 97681cf..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptParser.java
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.ExpressionEvaluator;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-
-/**
- * Parses a Tapestry Script, an XML file defined by one of the following public
- * identifiers:
- * <ul>
- * <li><code>-//Primix Solutions//Tapestry Script 1.0//EN</code></li>
- * <li><code>-//Howard Ship//Tapestry Script 1.1//EN</code></li>
- * <li><code>-//Howard Lewis Ship//Tapestry Script 1.2//EN</code></li>
- * </ul>
- * <p>
- * The version 1.1, is largely backwards compatible to the old script, but adds
- * a number of new features (if, if-not, foreach and the use of property paths
- * with insert).
- * <p>
- * Version 1.2 removes the &lt;insert&gt; element, using an Ant-like syntax (
- * <code>${<i>expression</i>}</code>). It also replaces the attribute name
- * <code>property-path</code> with <code>expression</code> (because OGNL is
- * used).
- * <p>
- * A Tapestry Script is used, in association with the
- * {@link org.apache.tapestry.html.Body}and/or
- * {@link org.apache.tapestry.html.Script}components, to generate JavaScript
- * for use with a Tapestry component. Two seperate pieces of JavaScript can be
- * generated. The body section (associated with the <code>body</code> element
- * of the XML document) is typically used to define JavaScript functions (most
- * often, event handlers). The initialization section (associated with the
- * <code>initialization</code> element of the XML document) is used to add
- * JavaScript that will be evaluated when the page finishes loading (i.e., from
- * the HTML &lt;body&gt; element's onLoad event handler).
- *
- * @author Howard Lewis Ship
- */
-
-public class ScriptParser
-{
-    public static final String SCRIPT_DTD_1_0_PUBLIC_ID = "-//Primix Solutions//Tapestry Script 1.0//EN";
-
-    public static final String SCRIPT_DTD_1_1_PUBLIC_ID = "-//Howard Ship//Tapestry Script 1.1//EN";
-
-    public static final String SCRIPT_DTD_1_2_PUBLIC_ID = "-//Howard Lewis Ship//Tapestry Script 1.2//EN";
-
-    /** @since 3.0 */
-    public static final String SCRIPT_DTD_3_0_PUBLIC_ID = "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN";
-
-    /** @since 4.1 */
-    public static final String SCRIPT_DTD_4_0_PUBLIC_ID = "-//Apache Software Foundation//Tapestry Script Specification 4.0//EN";
-
-    private RuleDirectedParser _parser;
-
-    public ScriptParser(ClassResolver resolver, ExpressionEvaluator evaluator, ValueConverter valueConverter)
-    {
-        _parser = new RuleDirectedParser();
-
-        _parser.registerEntity(SCRIPT_DTD_1_0_PUBLIC_ID,
-                               "/org/apache/tapestry/script/Script_1_0.dtd");
-        _parser.registerEntity(SCRIPT_DTD_1_1_PUBLIC_ID,
-                               "/org/apache/tapestry/script/Script_1_1.dtd");
-        _parser.registerEntity(SCRIPT_DTD_1_2_PUBLIC_ID,
-                               "/org/apache/tapestry/script/Script_1_2.dtd");
-        _parser.registerEntity(SCRIPT_DTD_3_0_PUBLIC_ID,
-                               "/org/apache/tapestry/script/Script_3_0.dtd");
-        _parser.registerEntity(SCRIPT_DTD_4_0_PUBLIC_ID,
-                               "/org/apache/tapestry/script/Script_4_0.dtd");
-
-        _parser.addRule("script", new ScriptRule(evaluator, valueConverter));
-        _parser.addRule("let", new LetRule());
-        _parser.addRule("set", new SetRule());
-        _parser.addRule("include-script", new IncludeScriptRule());
-        _parser.addRule("input-symbol", new InputSymbolRule(resolver));
-        _parser.addRule("body", new BodyRule());
-        _parser.addRule("initialization", new InitRule());
-        _parser.addRule("if", new IfRule(true));
-        _parser.addRule("if-not", new IfRule(false));
-        _parser.addRule("foreach", new ForeachRule());
-        _parser.addRule("unique", new UniqueRule());
-
-        // This will go away when the 1.1 and earler DTDs are retired.
-        _parser.addRule("insert", new InsertRule());
-
-    }
-
-    /**
-     * Parses the given input stream to produce a parsed script, ready to
-     * execute.
-     */
-
-    public IScript parse(Resource resourceLocation)
-    {
-        return (IScript) _parser.parse(resourceLocation);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptRule.java
deleted file mode 100644
index b6591f1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptRule.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.ExpressionEvaluator;
-import org.apache.tapestry.util.xml.BaseRule;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Rule for &lt;script&gt; element. Creates a
- * {@link org.apache.tapestry.script.ParsedScript}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-public class ScriptRule extends BaseRule
-{
-
-    /** @since 4.0 */
-    private ExpressionEvaluator _evaluator;
-
-    /** @since 4.0 */
-    private ValueConverter _valueConverter;
-
-    public ScriptRule(ExpressionEvaluator evaluator,
-            ValueConverter valueConverter)
-    {
-        _evaluator = evaluator;
-        _valueConverter = valueConverter;
-    }
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        ParsedScript script = new ParsedScript(_evaluator, _valueConverter,
-                parser.getLocation());
-
-        parser.push(script);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptSession.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptSession.java
deleted file mode 100644
index 6fe2aed..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptSession.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import java.util.Map;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScriptProcessor;
-
-/**
- * Process object used when executing a
- * {@link org.apache.tapestry.IScript script template}. This ScriptSession
- * provides support
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ScriptSession extends IScriptProcessor
-{
-
-    /**
-     * Evaluates an OGNL expression, where the root object for the expression is
-     * the {@link #getSymbols() symbols map}.
-     */
-    Object evaluate(String expression);
-
-    /**
-     * Returns the resource for the script template.
-     */
-
-    Resource getScriptTemplateResource();
-
-    /**
-     * Returns the symbols (which may be created or updated during the execution
-     * of the script template).
-     */
-
-    Map getSymbols();
-
-    /**
-     * Returns the current request cycle.
-     */
-    IRequestCycle getRequestCycle();
-
-    /**
-     * Evaluates an expression and coerces the result to a particlar type.
-     * 
-     * @since 4.0
-     * @see org.apache.tapestry.coerce.ValueConverter
-     */
-
-    Object evaluate(String expression, Class desiredType);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java
deleted file mode 100644
index c8fe4ce..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java
+++ /dev/null
@@ -1,189 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScriptProcessor;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.ExpressionEvaluator;
-
-import java.util.Map;
-
-/**
- * The result of executing a script, the session is used during the parsing
- * process as well. Following
- * {@link org.apache.tapestry.IScript#execute(IComponent, org.apache.tapestry.IRequestCycle, org.apache.tapestry.IScriptProcessor, java.util.Map)},
- * the session provides access to output symbols as well as the body and
- * initialization blocks created by the script tokens.
- *
- * @author Howard Lewis Ship
- * @since 0.2.9
- */
-
-public class ScriptSessionImpl implements ScriptSession
-{
-
-    private IRequestCycle _cycle;
-
-    private IScriptProcessor _processor;
-
-    private Resource _scriptTemplateResource;
-
-    private Map _symbols;
-
-    /** @since 4.0 */
-    private ExpressionEvaluator _evaluator;
-
-    /** @since 4.0 */
-    private ValueConverter _valueConverter;
-
-    private IComponent _component;
-
-    public ScriptSessionImpl(Resource scriptTemplateResource,
-                             IRequestCycle cycle, IScriptProcessor processor,
-                             ExpressionEvaluator evaluator, ValueConverter valueConverter,
-                             Map symbols)
-    {
-        _scriptTemplateResource = scriptTemplateResource;
-        _cycle = cycle;
-        _processor = processor;
-        _symbols = symbols;
-        _evaluator = evaluator;
-        _valueConverter = valueConverter;
-    }
-
-    public ScriptSessionImpl(Resource scriptTemplateResource,
-                             IComponent component,
-                             IRequestCycle cycle, IScriptProcessor processor,
-                             ExpressionEvaluator evaluator, ValueConverter valueConverter,
-                             Map symbols)
-    {
-        _scriptTemplateResource = scriptTemplateResource;
-        _component = component;
-        _cycle = cycle;
-        _processor = processor;
-        _symbols = symbols;
-        _evaluator = evaluator;
-        _valueConverter = valueConverter;
-    }
-
-    public Object evaluate(String expression)
-    {
-        return _evaluator.read(_symbols, expression); //_evaluator.read(_symbols, expression);
-    }
-
-    public Object evaluate(String expression, Class desiredType)
-    {
-        Object raw = evaluate(expression);
-
-        return _valueConverter.coerceValue(raw, desiredType);
-    }
-
-    public Resource getScriptTemplateResource()
-    {
-        return _scriptTemplateResource;
-    }
-
-    public Map getSymbols()
-    {
-        return _symbols;
-    }
-
-    public IRequestCycle getRequestCycle()
-    {
-        return _cycle;
-    }
-
-    public void addBodyScript(String script)
-    {
-        addBodyScript(_component, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isBodyScriptAllowed(IComponent target)
-    {
-        return _processor.isBodyScriptAllowed(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isExternalScriptAllowed(IComponent target)
-    {
-        return _processor.isExternalScriptAllowed(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isInitializationScriptAllowed(IComponent target)
-    {
-        return _processor.isInitializationScriptAllowed(target);
-    }
-
-    public void addBodyScript(IComponent target, String script)
-    {
-        if (_processor.isBodyScriptAllowed(target))
-            _processor.addBodyScript(target, script);
-    }
-
-    public void addExternalScript(Resource resource)
-    {
-        addExternalScript(_component, resource);
-    }
-
-    public void addExternalScript(IComponent target, Resource resource)
-    {
-        if (_processor.isExternalScriptAllowed(target))
-            _processor.addExternalScript(target, resource);
-    }
-
-    public void addInitializationScript(String script)
-    {
-        addInitializationScript(_component, script);
-    }
-
-    public void addInitializationScript(IComponent target, String script)
-    {
-        if (_processor.isInitializationScriptAllowed(target))
-            _processor.addInitializationScript(target, script);
-    }
-
-    public void addScriptAfterInitialization(IComponent target, String script)
-    {
-        if (_processor.isInitializationScriptAllowed(target))
-            _processor.addScriptAfterInitialization(target, script);
-    }
-
-    public String getUniqueString(String baseValue)
-    {
-        return _processor.getUniqueString(baseValue);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer();
-
-        buffer.append("ScriptSession[");
-        buffer.append(_scriptTemplateResource);
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_1_0.dtd b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_1_0.dtd
deleted file mode 100644
index a98b7ff..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_1_0.dtd
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--DTD for the files used with the ScriptGenerator class and Script component.  This is recognized with the public identifier:
-
-	-//Primix Solutions//Tapestry Script 1.0//EN
-
--->
-
-<!--
-
-Element: script
-
-Root element.
-
--->
-
-<!ELEMENT script (let*, body?, initialization?)>
-
-<!--
-
-Element: let
-Contained by: script
-
-Used to create a new symbol.
-
--->
-
-<!ELEMENT let (#PCDATA | insert)*>
-<!ATTLIST let
-	key CDATA #REQUIRED
->
-
-<!--
-
-Element: body
-Contained by: script
-
-Allows a mix of text and insert elements.  This text is added to
-the large scripting block just before the <body> tag.
--->
-
-<!ELEMENT body (#PCDATA | insert)*>
-
-<!--
-Element: initialization
-Contained by: script
-
-Text in this block is added to the event handler for the <body>
-tag's onLoad event.
--->
-
-<!ELEMENT initialization (#PCDATA | insert)*>
-
-<!--
-Element: insert
-Contained by: body, initialization
-
-Allows an arbitrary symbol to be inserted.
--->
-
-<!ELEMENT insert (#PCDATA)>
-<!ATTLIST insert
-	key CDATA #REQUIRED
->
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_1_1.dtd b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_1_1.dtd
deleted file mode 100644
index 70eea4a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_1_1.dtd
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-DTD for the files used with the ScriptGenerator class and Script component.  
-This is recognized with the public identifier:
-
-	-//Howard Ship//Tapestry Script 1.1//EN
-
-The canonical location for the DTD is:
-
-	http://tapestry.sf.net/dtd/Tapestry_1_1.dtd
-
-The root element is always script.
-	
--->
-<!-- =======================================================
-
-Entity: full-content
-
-Identifies the contents of most of the other elements.
-
--->
-<!ENTITY % full-content "(#PCDATA | foreach | insert | if | if-not)*">
-<!-- =======================================================
-
-Element: body
-Contained by: script
-
-Allows a mix of text and insert elements.  This text is added to
-the large scripting block just before the <body> tag.
--->
-<!ELEMENT body %full-content;>
-<!-- =======================================================
-
-Element: foreach
-Appears in: %full-content;
-
-Iterates over a list of items; this is modeled after the
-Foreach component.  No iteration occurs if the value
-from the property path is null.
-
-Attributes:
-  key: Defines the symbol into which each succesive value is stored.
-  property-path: The source of values.
--->
-<!ELEMENT foreach %full-content;>
-<!ATTLIST foreach
-  key CDATA #REQUIRED
-  property-path CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: include-script
-Contained by: script
-
-Inserts a reference to an external, static, JavaScript file.
-
-Attributes:
-  resource-path: The path to the script within the classpath.
--->
-<!ELEMENT include-script EMPTY>
-<!ATTLIST include-script
-  resource-path CDATA #REQUIRED
->
-
-<!-- =======================================================
-
-Element: if
-Appears in: %full-content;
-
-Creates a conditional portion of the script; The body of the element 
-is only included if the property-path evaulates to true.
-
--->
-<!ELEMENT if %full-content;>
-<!ATTLIST if
-  property-path CDATA #REQUIRED
->
-<!-- =======================================================
-
-Element: if-not
-Appears in: %full-content;
-
-Creates a conditional portion of the script; The body of the element 
-is only included if the property-path evaulates to false.
-
--->
-<!ELEMENT if-not %full-content;>
-<!ATTLIST if-not
-  property-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: initialization
-Contained by: script
-
-Text in this block is added to the event handler for the <body>
-tag's onLoad event.
--->
-<!ELEMENT initialization %full-content;>
-<!-- =======================================================
-Element: insert
-Contained by: body, initialization
-
-Allows an arbitrary symbol to be inserted.
-
-Attributes:
-  property-path: The path to the value to insert.
--->
-<!ELEMENT insert EMPTY>
-<!ATTLIST insert
-  property-path CDATA #REQUIRED
->
-
-<!-- =======================================================
-
-Element: let
-Contained by: script
-
-Used to create a new symbol.
-
--->
-<!ELEMENT let %full-content;>
-<!ATTLIST let
-  key CDATA #REQUIRED
->
-<!-- =======================================================
-
-Element: script
-
-Root element.
-
-Allows zero or more let elements (to establish new symbols),
-followed by a body and/or initialization element.
-
--->
-<!ELEMENT script (include-script*, let*, body?, initialization?)>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_1_2.dtd b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_1_2.dtd
deleted file mode 100644
index ab1e035..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_1_2.dtd
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-DTD for the files used with the ScriptParser class and Script component.  
-This is recognized with the public identifier:
-
-	-//Howard Lewis Ship//Tapestry Script 1.2//EN
-
-The canonical location for the DTD is:
-
-	http://tapestry.sf.net/dtd/Script_1_2.dtd
-
-The root element is always script.
-	
--->
-<!-- =======================================================
-
-Entity: full-content
-
-Identifies the contents of most of the other elements.
-
--->
-<!ENTITY % full-content "(#PCDATA | foreach | if | if-not)*">
-<!-- =======================================================
-
-Element: body
-Contained by: script
-
-Allows a mix of text and insert elements.  This text is added to
-the large scripting block just before the <body> tag.
--->
-<!ELEMENT body %full-content;>
-<!-- =======================================================
-
-Element: foreach
-Appears in: %full-content;
-
-Iterates over a list of items; this is modeled after the
-Foreach component.  No iteration occurs if the value
-from the property path is null.
-
-Attributes:
-  key: Defines the symbol into which each succesive value is stored.
-  expression: The source of values, as an OGNL expression rooted in the symbols Map.
--->
-<!ELEMENT foreach %full-content;>
-<!ATTLIST foreach
-  key CDATA #REQUIRED
-  expression CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: include-script
-Contained by: script
-
-Inserts a reference to an external, static, JavaScript file.
-
-Attributes:
-  resource-path: The path to the script within the classpath.
--->
-<!ELEMENT include-script EMPTY>
-<!ATTLIST include-script
-  resource-path CDATA #REQUIRED
->
-
-<!-- =======================================================
-
-Element: if
-Appears in: %full-content;
-
-Creates a conditional portion of the script; The body of the element 
-is only included if the expression evaulates to true.
-
-Attributes:
-  expression: The trigger expression, as an OGNL expression rooted in 
-    the symbols Map.
-
--->
-<!ELEMENT if %full-content;>
-<!ATTLIST if
-  expression CDATA #REQUIRED
->
-<!-- =======================================================
-
-Element: if-not
-Appears in: %full-content;
-
-Creates a conditional portion of the script; The body of the element 
-is only included if the property-path evaulates to false.
-
-Attributes:
-  expression: The trigger expression, as an OGNL expression rooted in 
-    the symbols Map.
-
--->
-<!ELEMENT if-not %full-content;>
-<!ATTLIST if-not
-  expression CDATA #REQUIRED
->
-<!-- =======================================================
-Element: initialization
-Contained by: script
-
-Text in this block is added to the event handler for the <body>
-tag's onLoad event.
--->
-<!ELEMENT initialization %full-content;>
-
-
-
-<!-- =======================================================
-Element: input-symbol
-Contained by: script
-
-Defines an input symbol used by the script.
-Attributes:
-  key: The name of the symbol.
-  class:  If specified, the exected class or interface for the symbol.
-  required: If yes, then the symbol must be non-null.
--->
-
-<!ELEMENT input-symbol EMPTY>
-<!ATTLIST input-symbol
-  key CDATA #REQUIRED
-  class CDATA #IMPLIED
-  required (yes|no) "no"
->
-
-<!-- =======================================================
-
-Element: let
-Contained by: script
-
-Used to create a new symbol.
-
--->
-<!ELEMENT let %full-content;>
-<!ATTLIST let
-  key CDATA #REQUIRED
->
-<!-- =======================================================
-
-Element: script
-
-Root element.
-
-Allows zero or more let elements (to establish new symbols),
-followed by a body and/or initialization element.
-
--->
-<!ELEMENT script (include-script*, input-symbol*, 
-	(let | set)*, body?, initialization?)>
-
-
-<!-- =======================================================
-
-Element: set
-Contained by: script
-
-Creates a new symbol as the result of evaluating an OGNL expression.
-
--->
-<!ELEMENT set EMPTY>
-<!ATTLIST set
-  key CDATA #REQUIRED
-  expression CDATA #REQUIRED
->
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_3_0.dtd b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_3_0.dtd
deleted file mode 100644
index b7d8e0d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_3_0.dtd
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-DTD for the files used with the ScriptParser class and Script component.  
-This is recognized with the public identifier:
-
-	-//Apache Software Foundation//Tapestry Script Specification 3.0//EN
-
-The canonical location for the DTD is:
-
-	http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd
-
-The root element is always script.
-	
-This DTD is backwards compatible with the 1.2 DTD, with the following exceptions:
-- Addition of <unique> element
-- Addition of unique attribute to <let> element
-- Addition of index attribute to <foreach> element
--->
-<!-- =======================================================
-
-Entity: full-content
-
-Identifies the contents of most of the other elements.
-
--->
-<!ENTITY % full-content "(#PCDATA | foreach | if | if-not | unique)*">
-<!-- =======================================================
-
-Element: body
-Contained by: script
-
-Allows a mix of text and control elements.  This text is added to
-the large scripting block just inside the <body> tag.
--->
-<!ELEMENT body %full-content;>
-<!-- =======================================================
-
-Element: foreach
-Appears in: %full-content;
-
-Iterates over a list of items; this is modeled after the
-For component.  No iteration occurs if the value
-from the expression is null.
-
-Attributes:
-  key: Defines the symbol into which each succesive value is stored.
-  index: Defines the symbol into which the index of the value of the current iteration is stored.
-  expression: The source of values, as an OGNL expression rooted in the symbols Map.
--->
-<!ELEMENT foreach %full-content;>
-<!ATTLIST foreach
-  key CDATA #IMPLIED
-  index CDATA #IMPLIED
-  expression CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: include-script
-Contained by: script
-
-Inserts a reference to an external, static, JavaScript file.
-
-Attributes:
-  resource-path: The path to the script within the classpath.
--->
-<!ELEMENT include-script EMPTY>
-<!ATTLIST include-script
-  resource-path CDATA #REQUIRED
->
-
-<!-- =======================================================
-
-Element: if
-Appears in: %full-content;
-
-Creates a conditional portion of the script; The body of the element 
-is only included if the expression evaulates to true.
-
-Attributes:
-  expression: The trigger expression, as an OGNL expression rooted in 
-    the symbols Map.
-
--->
-<!ELEMENT if %full-content;>
-<!ATTLIST if
-  expression CDATA #REQUIRED
->
-<!-- =======================================================
-
-Element: if-not
-Appears in: %full-content;
-
-Creates a conditional portion of the script; The body of the element 
-is only included if the property-path evaulates to false.
-
-Attributes:
-  expression: The trigger expression, as an OGNL expression rooted in 
-    the symbols Map.
-
--->
-<!ELEMENT if-not %full-content;>
-<!ATTLIST if-not
-  expression CDATA #REQUIRED
->
-<!-- =======================================================
-Element: initialization
-Contained by: script
-
-Text in this block is added to the event handler for the <body>
-tag's onLoad event.
--->
-<!ELEMENT initialization %full-content;>
-
-
-
-<!-- =======================================================
-Element: input-symbol
-Contained by: script
-
-Defines an input symbol used by the script.
-Attributes:
-  key: The name of the symbol.
-  class:  If specified, the exected class or interface for the symbol.
-  required: If yes, then the symbol must be non-null.
--->
-
-<!ELEMENT input-symbol EMPTY>
-<!ATTLIST input-symbol
-  key CDATA #REQUIRED
-  class CDATA #IMPLIED
-  required (yes|no) "no"
->
-
-<!-- =======================================================
-
-Element: let
-Contained by: script
-
-Used to create a new symbol. The content of the tag
-is used to create a string that is the name.  If the
-unique flag is enabled, the name is ensured to be unique
-(a suffix may be appended to ensure it is unique
-among all names so generated).
-
-Attributes:
-  key: The name of the symbol to create.
-  unique: If yes, the name is ensured to be unique.
-  The default is no.
-
--->
-<!ELEMENT let %full-content;>
-<!ATTLIST let
-  key CDATA #REQUIRED
-  unique (yes|no) "no"
->
-<!-- =======================================================
-
-Element: script
-
-Root element.
-
-Allows zero or more let elements (to establish new symbols),
-followed by a body and/or initialization element.
-
--->
-<!ELEMENT script (include-script*, input-symbol*, 
-	(let | set)*, body?, initialization?)>
-
-
-<!-- =======================================================
-
-Element: set
-Contained by: script
-
-Creates a new symbol as the result of evaluating an OGNL expression.
-
--->
-<!ELEMENT set EMPTY>
-<!ATTLIST set
-  key CDATA #REQUIRED
-  expression CDATA #REQUIRED
->
-
-<!-- =======================================================
-
-Element: unique
-Appears in: %full-content;
-
-Defines a block that only is rendered once per page.
-This is appropriate to certain kinds of initialization code
-that should not be duplicated, even if the script is
-executed multiple times.
-
--->
-<!ELEMENT unique %full-content;>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_4_0.dtd b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_4_0.dtd
deleted file mode 100644
index e8e600b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/Script_4_0.dtd
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-DTD for the files used with the ScriptParser class and Script component.  
-This is recognized with the public identifier:
-
-	-//Apache Software Foundation//Tapestry Script Specification 4.0//EN
-
-The canonical location for the DTD is:
-
-	http://tapestry.apache.org/dtd/Script_4_0.dtd
-
-The root element is always script.
-	
-This DTD is backwards compatible with the 1.2 DTD, with the following exceptions:
-- Addition of <unique> element
-- Addition of unique attribute to <let> element
-- Addition of index attribute to <foreach> element
--->
-<!-- =======================================================
-
-Entity: full-content
-
-Identifies the contents of most of the other elements.
-
--->
-<!ENTITY % full-content "(#PCDATA | foreach | if | if-not | unique)*">
-<!-- =======================================================
-
-Element: body
-Contained by: script
-
-Allows a mix of text and control elements.  This text is added to
-the large scripting block just inside the <body> tag.
--->
-<!ELEMENT body %full-content;>
-<!-- =======================================================
-
-Element: foreach
-Appears in: %full-content;
-
-Iterates over a list of items; this is modeled after the
-For component.  No iteration occurs if the value
-from the expression is null.
-
-Attributes:
-  key: Defines the symbol into which each succesive value is stored.
-  index: Defines the symbol into which the index of the value of the current iteration is stored.
-  expression: The source of values, as an OGNL expression rooted in the symbols Map.
--->
-<!ELEMENT foreach %full-content;>
-<!ATTLIST foreach
-  key CDATA #IMPLIED
-  index CDATA #IMPLIED
-  expression CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: include-script
-Contained by: script
-
-Inserts a reference to an external, static, JavaScript file.
-
-Attributes:
-  resource-path: The path to the script within the classpath.
--->
-<!ELEMENT include-script EMPTY>
-<!ATTLIST include-script
-  resource-path CDATA #REQUIRED
->
-
-<!-- =======================================================
-
-Element: if
-Appears in: %full-content;
-
-Creates a conditional portion of the script; The body of the element 
-is only included if the expression evaulates to true.
-
-Attributes:
-  expression: The trigger expression, as an OGNL expression rooted in 
-    the symbols Map.
-
--->
-<!ELEMENT if %full-content;>
-<!ATTLIST if
-  expression CDATA #REQUIRED
->
-<!-- =======================================================
-
-Element: if-not
-Appears in: %full-content;
-
-Creates a conditional portion of the script; The body of the element 
-is only included if the property-path evaulates to false.
-
-Attributes:
-  expression: The trigger expression, as an OGNL expression rooted in 
-    the symbols Map.
-
--->
-<!ELEMENT if-not %full-content;>
-<!ATTLIST if-not
-  expression CDATA #REQUIRED
->
-<!-- =======================================================
-Element: initialization
-Contained by: script
-
-Text in this block is added to the event handler for the <body>
-tag's onLoad event.
--->
-<!ELEMENT initialization %full-content;>
-
-
-
-<!-- =======================================================
-Element: input-symbol
-Contained by: script
-
-Defines an input symbol used by the script.
-Attributes:
-  key: The name of the symbol.
-  class:  If specified, the exected class or interface for the symbol.
-  required: If yes, then the symbol must be non-null.
--->
-
-<!ELEMENT input-symbol EMPTY>
-<!ATTLIST input-symbol
-  key CDATA #REQUIRED
-  class CDATA #IMPLIED
-  required (yes|no) "no"
->
-
-<!-- =======================================================
-
-Element: let
-Contained by: script
-
-Used to create a new symbol. The content of the tag
-is used to create a string that is the name.  If the
-unique flag is enabled, the name is ensured to be unique
-(a suffix may be appended to ensure it is unique
-among all names so generated).
-
-Attributes:
-  key: The name of the symbol to create.
-  unique: If yes, the name is ensured to be unique.
-  The default is no.
-
--->
-<!ELEMENT let %full-content;>
-<!ATTLIST let
-  key CDATA #REQUIRED
-  unique (yes|no) "no"
->
-<!-- =======================================================
-
-Element: script
-
-Root element.
-
-Allows zero or more let elements (to establish new symbols),
-followed by a body and/or initialization element.
-
--->
-<!ELEMENT script (include-script*, input-symbol*, 
-	(let | set)*, body?, initialization?)>
-
-
-<!-- =======================================================
-
-Element: set
-Contained by: script
-
-Creates a new symbol as the result of evaluating an OGNL expression.
-
--->
-<!ELEMENT set EMPTY>
-<!ATTLIST set
-  key CDATA #REQUIRED
-  expression CDATA #REQUIRED
->
-
-<!-- =======================================================
-
-Element: unique
-Appears in: %full-content;
-
-Defines a block that only is rendered once per page.
-This is appropriate to certain kinds of initialization code
-that should not be duplicated, even if the script is
-executed multiple times.
-
--->
-<!ELEMENT unique %full-content;>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/SetRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/SetRule.java
deleted file mode 100644
index f3327ff..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/SetRule.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.xml.BaseRule;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs at {@link org.apache.tapestry.script.SetToken} from at &lt;set&gt; element,
- * which contains full content.
- *
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-class SetRule extends BaseRule
-{
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String key = getAttribute(attributes, "key");
-
-        parser.validate(key, Tapestry.SIMPLE_PROPERTY_NAME_PATTERN, "ScriptParser.invalid-key");
-
-        String expression = getAttribute(attributes, "expression");
-
-        SetToken token = new SetToken(key, expression, parser.getLocation());
-
-        IScriptToken parent = (IScriptToken) parser.peek();
-        parent.addToken(token);
-
-        parser.push(token);
-    }
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/SetToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/SetToken.java
deleted file mode 100644
index 31b7943..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/SetToken.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.Location;
-
-/**
- * Like {@link org.apache.tapestry.script.LetToken}, but sets the value from an
- * expression attribute, rather than a body of full content.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-class SetToken extends AbstractToken
-{
-
-    private String _key;
-    private String _expression;
-
-    SetToken(String key, String expression, Location location)
-    {
-        super(location);
-        _key = key;
-        _expression = expression;
-    }
-
-    /**
-     * Doesn't <em>write</em>, it evaluates the expression and assigns the
-     * result back to the key.
-     */
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-
-        Object value = evaluate(_expression, session);
-
-        session.getSymbols().put(_key, value);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/StaticToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/StaticToken.java
deleted file mode 100644
index 024ebfb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/StaticToken.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.Location;
-
-/**
- * A token for static portions of the template.
- * 
- * @author Howard Lewis Ship
- */
-
-class StaticToken extends AbstractToken
-{
-
-    private String _text;
-
-    StaticToken(String text, Location location)
-    {
-        super(location);
-
-        _text = text;
-    }
-
-    /**
-     * Writes the text to the writer.
-     */
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        buffer.append(_text);
-    }
-
-    public void addToken(IScriptToken token)
-    {
-        // Should never be invoked.
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/UniqueRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/UniqueRule.java
deleted file mode 100644
index ba8006e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/UniqueRule.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs a {@link org.apache.tapestry.script.UniqueToken}
- * from an &lt;unique&gt; element, which contains full content.
- *
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class UniqueRule extends AbstractTokenRule
-{
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        IScriptToken token = new UniqueToken(parser.getLocation());
-
-        addToParent(parser, token);
-        parser.push(token);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/UniqueToken.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/UniqueToken.java
deleted file mode 100644
index e3faad8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/UniqueToken.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Writes out its child tokens only the first time it executes
- * (with a given tag).  Uses
- * {@link org.apache.tapestry.IRequestCycle#setAttribute(String, Object)}
- * to identify whether a particular block has rendered yet.
- *
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-class UniqueToken extends AbstractToken
-{
-    public UniqueToken(Location location)
-    {
-        super(location);
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        IRequestCycle cycle = session.getRequestCycle();
-
-        Location location = getLocation();
-        String tag = "<unique> " + location.toString();
-
-        if (cycle.getAttribute(tag) != null)
-            return;
-
-        cycle.setAttribute(tag, Boolean.TRUE);
-
-        writeChildren(buffer, session);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/package.html
deleted file mode 100644
index 9b8e457..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/script/package.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Parser and related classes for dynamically generating JavaScript for
-inclusion in an HTML response.  This is used by a number of
-tapestry components, including 
-{@link org.apache.tapestry.html.Rollover}, as well
-as {@link org.apache.tapestry.html.Script} (used for
-including arbitrary user-written JavaScript).
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/DefaultListItemRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/DefaultListItemRenderer.java
deleted file mode 100644
index 8f1d86b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/DefaultListItemRenderer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.apache.tapestry.scriptaculous;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-import java.util.Iterator;
-
-/**
- * Default implementation of {@link ListItemRenderer}. Simply displays
- * the values of each object supplied by invoking toString(). Other more
- * advanced renderers may add html content to the <code>&lt;li&gt;</code> elements or
- * similarly advanced UI displays.
- */
-public class DefaultListItemRenderer implements ListItemRenderer {
-
-    /**
-     * Shared global instance default used by {@link Suggest} when no custom renderer
-     * is specified.
-     */
-    public static final ListItemRenderer SHARED_INSTANCE = new DefaultListItemRenderer();
-
-    /**
-     * {@inheritDoc}
-     */
-    public void renderList(IMarkupWriter writer, IRequestCycle cycle, Iterator values)
-    {
-        if (cycle.isRewinding())
-            return;
-
-        writer.begin("ul");
-        
-        while (values.hasNext())
-        {
-            Object value = values.next();
-            
-            if (value == null)
-                continue;
-
-            writer.begin("li");
-            writer.print(value.toString());
-            writer.end("li");
-        }
-
-        writer.end();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/ListItemRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/ListItemRenderer.java
deleted file mode 100644
index c7218d2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/ListItemRenderer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.apache.tapestry.scriptaculous;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-import java.util.Iterator;
-
-/**
- * Renderer used by {@link Suggest} component to render lists usable
- * by the currently integrated
- * <a href="http://wiki.script.aculo.us/scriptaculous/show/Ajax.Autocompleter">script.aculo.us</a>
- * javascript library.
- *
- * <p/>This particular library expects the rendered contents of this class to
- * be an unordered html list.
- * <p/>
- * <pre>
- * &lt;ul&gt;
- *   &lt;li&gt;Apple&lt;/li&gt;
- *   &lt;li&gt;Apricot&lt;/li&gt;
- * &lt;/ul&gt;
- * </pre>
- */
-public interface ListItemRenderer {
-
-    /**
-     * Renders an unordered html list to the response, using the specified
-     * collection of values as the contents to fill in the <pre><li></pre> elements
-     * with.
-     * 
-     * @param writer
-     *          Markup writer to write content in to.
-     * @param cycle
-     *          Current request cycle.
-     * @param values
-     *          Values used to render list.
-     */
-    public void renderList(IMarkupWriter writer, IRequestCycle cycle, Iterator values);
-}
-
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/ScriptaculousMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/ScriptaculousMessages.java
deleted file mode 100644
index 0172ece..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/ScriptaculousMessages.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.apache.tapestry.scriptaculous;
-
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * Error message formatter.
- */
-public class ScriptaculousMessages {
-
-    private static final MessageFormatter _formatter = new MessageFormatter(ScriptaculousMessages.class);
-
-    // defeat instantiation
-    private ScriptaculousMessages() {}
-
-    public static String invalidOptions(String options, Throwable cause)
-    {
-        return _formatter.format("invalid-options", options, cause);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/ScriptaculousStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/ScriptaculousStrings.properties
deleted file mode 100644
index c8cbfc5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/ScriptaculousStrings.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2007 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-invalid-options=Invalid JSON options string given: {0}. The options parameter must be properly formatted according to JSON object syntax rules. {1}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.java
deleted file mode 100644
index 7866d7d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.java
+++ /dev/null
@@ -1,377 +0,0 @@
-package org.apache.tapestry.scriptaculous;
-
-import java.text.ParseException;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.engine.DirectServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.form.AbstractFormComponent;
-import org.apache.tapestry.form.TranslatedField;
-import org.apache.tapestry.form.TranslatedFieldSupport;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.link.DirectLink;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.util.SizeRestrictingIterator;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Implementation of the <a href="http://wiki.script.aculo.us/scriptaculous/show/Ajax.Autocompleter">Ajax.Autocompleter</a> in
- * the form of a {@link org.apache.tapestry.form.TextField} like component with the additional ability to dynamically suggest
- * values via XHR requests.
- *
- * <p>
- * This component will use the html element tag name defined in your html template to include it to determine whether or not
- * to render a TextArea or TextField style input element. For example, specifying a component definition such as:
- * </p>
- *
- * <pre>&lt;input jwcid="@Suggest" value="literal:A default value" /&gt;</pre>
- *
- * <p>
- * would render something looking like:
- * </p>
- *
- * <pre>&lt;input type="text" name="suggest" id="suggest" autocomplete="off" value="literal:A default value" /&gt;</pre>
- *
- * <p>while a defintion of</p>
- *
- * <pre>&lt;textarea jwcid="@Suggest" value="literal:A default value" /&gt;</pre>
- *
- * <p>would render something like:</p>
- *
- * <pre>
- *  &lt;textarea name="suggest" id="suggest" &gt;A default value&lt;textarea/&gt;
- * </pre>
- *
- */
-public abstract class Suggest extends AbstractFormComponent implements TranslatedField, IDirect {
-
-    /**
-     * Injected service used to invoke whatever listeners people have setup to handle
-     * changing value from this field.
-     *
-     * @return The invoker.
-     */
-    public abstract ListenerInvoker getListenerInvoker();
-
-    /**
-     * Injected response builder for doing specific XHR things.
-     *
-     * @return ResponseBuilder for this request. 
-     */
-    public abstract ResponseBuilder getResponse();
-
-    /**
-     * Associated javascript template.
-     *
-     * @return The script template.
-     */
-    public abstract IScript getScript();
-
-    /**
-     * Used to convert form input values.
-     *
-     * @return The value converter to use.
-     */
-    public abstract ValueConverter getValueConverter();
-
-    /**
-     * Injected.
-     *
-     * @return Service used to validate input.
-     */
-    public abstract ValidatableFieldSupport getValidatableFieldSupport();
-
-    /**
-     * Injected.
-     *
-     * @return Translation service.
-     */
-    public abstract TranslatedFieldSupport getTranslatedFieldSupport();
-
-    /**
-     * Injected.
-     *
-     * @return The {@link org.apache.tapestry.engine.DirectService} engine.  
-     */
-    public abstract IEngineService getEngineService();
-
-    ////////////////////////////////////////////////////////
-    // Parameters
-    ////////////////////////////////////////////////////////
-
-    public abstract Object getValue();
-    public abstract void setValue(Object value);
-
-    public abstract ListItemRenderer getListItemRenderer();
-    public abstract void setListItemRenderer(ListItemRenderer renderer);
-
-    public abstract IActionListener getListener();
-
-    public abstract Object getListSource();
-    public abstract void setListSource(Object value);
-
-    public abstract int getMaxResults();
-
-    public abstract Object getParameters();
-
-    public abstract String getOptions();
-
-    public abstract String getUpdateElementClass();
-
-    /**
-     * Used internally to track listener invoked searches versus
-     * normal rendering requests.
-     *
-     * @return True if search was triggered, false otherwise.
-     */
-    public abstract boolean isSearchTriggered();
-    public abstract void setSearchTriggered(boolean value);
-
-    public boolean isRequired()
-    {
-        return getValidatableFieldSupport().isRequired(this);
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // render search triggered response instead of normal render if
-        // listener was invoked
-
-        IForm form = TapestryUtils.getForm(cycle, this);
-        setForm(form);
-
-        if (form.wasPrerendered(writer, this))
-            return;
-
-        if (!form.isRewinding() && !cycle.isRewinding()
-            && getResponse().isDynamic() && isSearchTriggered())
-        {
-            setName(form);
-
-            // do nothing if it wasn't for this instance - such as in a loop
-
-            if (cycle.getParameter(getClientId()) == null)
-                return;
-
-            renderList(writer, cycle);
-            return;
-        }
-
-        // defer to super if normal render
-
-        super.renderComponent(writer, cycle);
-    }
-
-    /**
-     * Invoked only when a search has been triggered to render out the &lt;li&gt; list of
-     * dynamic suggestion options.
-     *
-     * @param writer
-     *          The markup writer.
-     * @param cycle
-     *          The associated request.
-     */
-    public void renderList(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Defense.notNull(getListSource(), "listSource for Suggest component.");
-
-        Iterator values = (Iterator)getValueConverter().coerceValue(getListSource(), Iterator.class);
-
-        if (isParameterBound("maxResults"))
-        {
-            values = new SizeRestrictingIterator(values, getMaxResults());
-        }
-
-        getListItemRenderer().renderList(writer, cycle, values);
-    }
-
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = getTranslatedFieldSupport().format(this, getValue());
-        boolean isTextArea = getTemplateTagName().equalsIgnoreCase("textarea");
-
-        renderDelegatePrefix(writer, cycle);
-
-        if (isTextArea)
-            writer.begin(getTemplateTagName());
-        else
-            writer.beginEmpty(getTemplateTagName());
-
-        // only render input attributes if not a textarea
-        if (!isTextArea)
-        {
-            writer.attribute("type", "text");
-            writer.attribute("autocomplete", "off");
-        }
-
-        renderIdAttribute(writer, cycle);
-        writer.attribute("name", getName());
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        renderInformalParameters(writer, cycle);
-        renderDelegateAttributes(writer, cycle);
-
-        getTranslatedFieldSupport().renderContributions(this, writer, cycle);
-        getValidatableFieldSupport().renderContributions(this, writer, cycle);
-
-        if (value != null)
-        {
-            if (!isTextArea)
-                writer.attribute("value", value);
-            else
-                writer.print(value);
-        }
-
-        if (!isTextArea)
-            writer.closeTag();
-        else
-            writer.end();
-
-        renderDelegateSuffix(writer, cycle);
-
-        // render update element
-
-        writer.begin("div");
-        writer.attribute("id", getClientId() + "choices");
-        writer.attribute("class", getUpdateElementClass());
-        writer.end();
-
-        // render javascript
-
-        JSONObject json = null;
-        String options = getOptions();
-
-        try {
-
-            json = options != null ? new JSONObject(options) : new JSONObject();
-
-        } catch (ParseException ex)
-        {
-            throw new ApplicationRuntimeException(ScriptaculousMessages.invalidOptions(options, ex), this.getBinding("options").getLocation(), ex);
-        }
-
-        // bind onFailure client side function if not already defined
-
-        if (!json.has("onFailure"))
-        {
-            json.put("onFailure", "tapestry.error");
-        }
-
-        if (!json.has("encoding"))
-        {
-            json.put("encoding", cycle.getEngine().getOutputEncoding());
-        }
-
-        Map parms = new HashMap();
-        parms.put("inputId", getClientId());
-        parms.put("updateId", getClientId() + "choices");
-        parms.put("options", json.toString());
-
-        Object[] specifiedParams = DirectLink.constructServiceParameters(getParameters());
-        Object[] listenerParams = null;
-        if (specifiedParams != null)
-        {
-            listenerParams = new Object[specifiedParams.length + 1];
-            System.arraycopy(specifiedParams, 0, listenerParams, 1, specifiedParams.length);
-        } else {
-
-            listenerParams = new Object[1];
-        }
-
-        listenerParams[0] = getClientId();
-
-        ILink updateLink = getEngineService().getLink(isStateful(), new DirectServiceParameter(this, listenerParams));
-        parms.put("updateUrl", updateLink.getURL());
-
-        PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, this);
-        getScript().execute(this, cycle, pageRenderSupport, parms);
-    }
-
-    /**
-     * Rewinds the component, doing translation, validation and binding.
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-        try
-        {
-            Object object = getTranslatedFieldSupport().parse(this, value);
-            getValidatableFieldSupport().validate(this, writer, cycle, object);
-
-            setValue(object);
-        } catch (ValidatorException e)
-        {
-            getForm().getDelegate().recordFieldInputValue(value);
-            getForm().getDelegate().record(e);
-        }
-    }
-
-    /**
-     * Triggers the listener. The parameters passed are the current text
-     * and those specified in the parameters parameter of the component.
-     * If the listener parameter is not bound, attempt to locate an implicit
-     * listener named by the capitalized component id, prefixed by "do".
-     */
-    public void trigger(IRequestCycle cycle)
-    {
-        IActionListener listener = getListener();
-        if (listener == null)
-            listener = getContainer().getListeners().getImplicitListener(this);
-
-        Object[] params = cycle.getListenerParameters();
-
-        // replace the first param with the correct value
-        String inputId = (String)params[0];
-        params[0] = cycle.getParameter(inputId);
-
-        cycle.setListenerParameters(params);
-
-        setSearchTriggered(true);
-
-        getListenerInvoker().invokeListener(listener, this, cycle);
-    }
-
-    public List getUpdateComponents()
-    {
-        return Arrays.asList(new Object[] { getClientId() });
-    }
-
-    public boolean isAsync()
-    {
-        return true;
-    }
-
-    public boolean isJson()
-    {
-        return false;
-    }
-
-    /**
-     * Sets the default {@link ListItemRenderer} for component, to be overriden as
-     * necessary by component parameters.
-     */
-    protected void finishLoad()
-    {
-        setListItemRenderer(DefaultListItemRenderer.SHARED_INSTANCE);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.jwc
deleted file mode 100644
index 91e2b5e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.jwc
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2007 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-        
-<!DOCTYPE component-specification PUBLIC
-        "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-        "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.scriptaculous.Suggest" allow-body="no" allow-informal-parameters="yes">
-
-    <description>
-        Provides dynamic suggestion list autocompletion for textarea and input text fields.
-    </description>
-
-    <parameter name="listener">
-        <description>
-            Listener method to invoke for each field search request. This listener
-            should expect to get exactly one parameter of type String, which is the
-	        value that was typed in to the field. It may additionally receive
-	        extra parameters if the parameters parameter is used. If no listener
-	        is provided, Tapestry will attempt to find a listener with the
-	        capitalized id of the component, prefixed by "do". For example,
-	        jwcid="nameSearch@Suggest" would have a listener called doNameSearch(). 
-        </description>
-    </parameter>
-
-    <parameter name="parameters">
-        <description>
-            An array of objects to be encoded into the URL.
-            These parameters will be decoded when the autocompleter is triggered
-            and passed to the listener method. Note that the first parameter passed
-            to the listener will always be the 'search string' - the parameters
-            defined here will follow.
-        </description>
-    </parameter>
-
-    <parameter name="listSource" required="true">
-        <description>
-            Object,String[],Collection of values to be used to autocomplete a particular
-            autocomplete field search, this should be set when this component invokes your input
-            search listener.
-        </description>
-    </parameter>
-
-    <parameter name="stateful" default-value="ognl:false">
-        <description>
-            Whether or not the request created by this component should be required to be stateful or not, default is false.
-        </description>
-    </parameter>
-
-    <parameter name="listItemRenderer">
-        <description>
-            The ListItemRenderer that should be used to render the drop down list, the
-            default renderer iterates over the values and puts the string value in a &lt;li&gt;&lt;/li&gt; block.
-        </description>
-    </parameter>
-
-    <parameter name="maxResults">
-        <description>The maximum number of results to display in response to an autocompletion search request.</description>
-    </parameter>
-
-    <parameter name="updateElementClass" default-value="literal:autocomplete">
-        <description>
-            The class attribute set on the element that will be populated with the results of the autocompletion list
-            response.
-        </description>
-    </parameter>
-    
-    <parameter name="options" default-value="literal:{method: 'get', frequency: 0.2}">
-        <description>
-            Options to be passed directly to the javascript constructor of this javascript control in the form
-            of a json object property map.
-        </description>
-    </parameter>
-
-    <parameter name="value" required="yes" />
-    <parameter name="disabled" />
-    <parameter name="displayName" />
-    <parameter name="translator" default-value="translator:string" />
-    <parameter name="validators" />
-
-    <inject property="listenerInvoker" object="infrastructure:listenerInvoker" />
-    <inject property="engineService" object="service:tapestry.services.Direct" />    
-    <inject property="script" type="script" object="Suggest.script" />
-    <inject property="valueConverter" object="service:tapestry.coerce.ValueConverter" />
-    <inject property="translatedFieldSupport" object="service:tapestry.form.TranslatedFieldSupport" />
-    <inject property="validatableFieldSupport" object="service:tapestry.form.ValidatableFieldSupport" />
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.script
deleted file mode 100644
index 9c6667e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/scriptaculous/Suggest.script
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2007 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-        "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-        "http://tapestry.apache.org/dtd/Script_3_0.dtd">
-
-<script>
-    <include-script resource-path="/scriptaculous-1.7.1/prototype.js" />
-    <include-script resource-path="/scriptaculous-1.7.1/effects.js" />
-    <include-script resource-path="/scriptaculous-1.7.1/controls.js" />
-
-    <input-symbol key="updateUrl" required="yes" />
-    <input-symbol key="inputId" required="yes" />
-    <input-symbol key="updateId" required="yes" />
-    <input-symbol key="options" required="yes" />
-
-    <let key="completer" unique="yes">${inputId}</let>
-
-    <initialization>
-        var ${completer} = new Ajax.Autocompleter("${inputId}", "${updateId}", "${updateUrl}", ${options});
-    </initialization>
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/AbsoluteURLBuilder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/AbsoluteURLBuilder.java
deleted file mode 100644
index b21ef4d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/AbsoluteURLBuilder.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-/**
- * Service used to construct absolute URLs (often used for redirects).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface AbsoluteURLBuilder
-{
-    /**
-     * Constructs a URL from the given URI (that is, service path), schema, server and port.
-     * 
-     * @param URI
-     *            either a complete URL (that is, containing a colon), in which case it is returned
-     *            unchanged, or the path within the server.
-     * @param scheme
-     *            scheme to prefix URI with
-     * @param server
-     *            to prefix the URI with (unless the URI begins with "//"
-     * @param port
-     *            to suffix the server with (unless the URI begins with "//")
-     */
-    String constructURL(String URI, String scheme, String server, int port);
-
-    /**
-     * Constructs a URL, defaulting scheme, server and port to the values for the current request.
-     */
-
-    String constructURL(String URI);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ApplicationGlobals.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ApplicationGlobals.java
deleted file mode 100644
index 4e003d2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ApplicationGlobals.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import java.util.List;
-
-import javax.servlet.ServletContext;
-
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.web.WebActivator;
-import org.apache.tapestry.web.WebContext;
-
-/**
- * A "global" holder for various services and configurations. In many cases, these values end up as
- * properties of the {@link org.apache.tapestry.services.Infrastructure} . The servlet and portlet
- * implementations differentiate themselves by storing different values into these properties.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ApplicationGlobals
-{
-    /**
-     * Invoked by the (indirectly) by the servlet at init(), after parsing the application
-     * specification.
-     */
-    void storeActivator(WebActivator activator);
-
-    void storeSpecification(IApplicationSpecification applicationSpecification);
-
-    /**
-     * Invoked (indirectly) by the servlet at init().
-     */
-    void storeServletContext(ServletContext context);
-
-    /**
-     * Invoked (indirectly) by the servlet at init().
-     */
-
-    void storeWebContext(WebContext context);
-
-    /**
-     * Returns the previously stored context.
-     * 
-     * @see #storeWebContext(WebContext) .
-     */
-
-    WebContext getWebContext();
-
-    /**
-     * Returns the previously stored context.
-     * 
-     * @see #storeServletContext(ServletContext)
-     */
-    ServletContext getServletContext();
-
-    WebActivator getActivator();
-
-    IApplicationSpecification getSpecification();
-
-    String getActivatorName();
-
-    /**
-     * Stores the default set of engine service definitions. Application services override factory
-     * services with the same {@link org.apache.tapestry.engine.IEngineService#getName()} .
-     * 
-     * @param factoryServices
-     *            List of {@link org.apache.tapestry.engine.IEngineService}.
-     */
-
-    void storeFactoryServices(List factoryServices);
-
-    /**
-     * Returns the factory default services as a List of
-     * {@link org.apache.tapestry.engine.IEngineService}.
-     */
-
-    List getFactoryServices();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ApplicationInitializer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ApplicationInitializer.java
deleted file mode 100644
index 09b5d3f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ApplicationInitializer.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import javax.servlet.http.HttpServlet;
-
-/**
- * An object which may perform startup initialization for the servlet.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ApplicationInitializer
-{
-    void initialize(HttpServlet servlet);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ClassFinder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ClassFinder.java
deleted file mode 100644
index 1616190..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ClassFinder.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-/**
- * Used to search for a class within a list of packages. Available as service tapestry.ClassFinder.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ClassFinder
-{
-    /**
-     * Searches for a class within a list of packages, which always includes the default package.
-     * 
-     * @param packageList
-     *            a comma seperated list of package names (i.e., "java.lang,java.util")
-     * @param className
-     *            the name of the class to search for. This may be just a class name, or even a
-     *            partial class name (i.e., "impl.Foo").
-     * @return the class, if found, or null if no class could be found in any of the packages
-     */
-
-    Class findClass(String packageList, String className);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ClasspathResourceFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ClasspathResourceFactory.java
deleted file mode 100644
index 4c49636..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ClasspathResourceFactory.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.hivemind.util.ClasspathResource;
-
-/**
- * Used to create new instances of {@link org.apache.hivemind.util.ClasspathResource}.
- */
-public interface ClasspathResourceFactory
-{
-    ClasspathResource newResource(String path);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentConstructor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentConstructor.java
deleted file mode 100644
index ec4c295..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentConstructor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-/**
- * Starting with 4.0, copmonents do not always have a zero-args constructor; the enhanced subclass
- * may take some parameters used to initialize instance variables. This interface represents a
- * wrapper around a constructor and an array of parameters that can be used to stamp out new
- * instances of a component.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ComponentConstructor
-{
-    /**
-     * Requests that a new instance of the component.
-     */
-
-    Object newInstance();
-
-    /**
-     * Returns the class actually instantiated (which may be an enhanced subclass).
-     */
-    Class getComponentClass();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentConstructorFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentConstructorFactory.java
deleted file mode 100644
index 306e2e9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentConstructorFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * <code>tapestry.enhance.ComponentConstructorFactory</code> service that acts as a wrapper around
- * {@link org.apache.tapestry.enhance.EnhancementOperation}, used to take a base component class
- * and provide an enhanced subclass of it.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ComponentConstructorFactory
-{
-    /**
-     * Passed a component specification and the base component class name, provides back an object
-     * used to instantiate instances of the component. {@link ComponentConstructor}s are internally
-     * cached, repeated calls with the same specification object will yield the same result.
-     * 
-     * @param specification
-     *            the page or component specification which directs the enhancement operation
-     * @param className
-     *            the name of the base component class (in some cases,
-     *            {@link IComponentSpecification#getComponentClassName()} is null andother code
-     *            provides the default)
-     * @returns a constructor used to create instances of the enhanced component class
-     */
-
-    ComponentConstructor getComponentConstructor(IComponentSpecification specification,
-            String className);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentMessagesSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentMessagesSource.java
deleted file mode 100644
index c99ad89..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentMessagesSource.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.hivemind.Messages;
-import org.apache.tapestry.IComponent;
-
-/**
- *  Defines an object that can provide a component with its
- *  {@link org.apache.hivemind.Messages}.
- *
- *  @author Howard Lewis Ship
- *  @since 2.0.4
- */
-public interface ComponentMessagesSource
-{
-    /**
-     * Gets the associated localized component messages.
-     *
-     * @param component
-     *          The component to get properties for.
-     * @return The {@link Messages} for the specified component.
-     */
-    Messages getMessages(IComponent component);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentPropertySource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentPropertySource.java
deleted file mode 100644
index 53f592c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentPropertySource.java
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.INamespace;
-
-import java.util.Locale;
-
-/**
- * Encapsulates the logic for searching for component meta-data. Deployed as service
- * tapestry.props.ComponentPropertySource.
- *
- * <p>
- * TODO: Adjust name, since it now provides access to namespace properties as well as component
- * properties.
- * </p>
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ComponentPropertySource
-{
-    /**
-     * Returns the property value for a particular named meta-data property of the component. The
-     * search order is:
-     * <ul>
-     * <li>The component's specification</li>
-     * <li>The specification of the application (or the library containing the component).</li>
-     * <li>The chain of global property sources.</li>
-     * </ul>
-     *
-     * @param component
-     *          The {@link IComponent} to get the property of.
-     * @param propertyName
-     *          Key of the property.
-     * 
-     * @return the value of the given key, or null if not found.
-     */
-
-    String getComponentProperty(IComponent component, String propertyName);
-
-    /**
-     * Like {@link #getComponentProperty(IComponent, String)}, but the property name will be
-     * localized to the component's current locale (determined from its page). Localizing the
-     * property name means that a suffix may be appended to it. If the fully localized name is not
-     * found, then the locale is generalized (i.e., from "en_UK" to "en" to nothing) until a match
-     * is found.
-     *
-     * @param component
-     *          The {@link IComponent} to get the property of.
-     * @param locale
-     *          The {@link Locale} to get properties for.
-     * @param propertyName
-     *          Key of the property.
-     *
-     * @return the value of the given property name, or null if not found.
-     */
-    String getLocalizedComponentProperty(IComponent component, Locale locale, String propertyName);
-
-    /**
-     * Returns the property value for a particular named meta-data property of the namespace. The
-     * search order is:
-     * 
-     * <ul>
-     * <li>The library or application specification for the namespace.</li>
-     * <li>The chain of global property sources.</li>
-     * </ul>
-     *
-     * @param namespace
-     *          The namespace to get the property from.
-     * @param propertyName
-     *          The key of the property to get.
-     * 
-     * @return the value of the given key, or null if not found.
-     */
-
-    String getNamespaceProperty(INamespace namespace, String propertyName);
-
-    /**
-     * As with {@link #getLocalizedComponentProperty(IComponent, Locale, String)}, but with a
-     * {@link INamespace}.
-     *
-     * @param namespace
-     *          The namespace to get the property from.
-     * @param locale
-     *          {@link Locale} to filter the properties for.
-     * @param propertyName
-     *          The key of the property to get.
-     *
-     * @return The matching property, or null if not found.
-     */
-
-    String getLocalizedNamespaceProperty(INamespace namespace, Locale locale, String propertyName);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentRenderWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentRenderWorker.java
deleted file mode 100644
index 05180d5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentRenderWorker.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright May 20, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.html.Body;
-
-
-/**
- * Interface that defines the chain of render workers that will be 
- * invoked after all {@link IComponent} render invocations.
- * 
- * @author jkuhnert
- */
-public interface ComponentRenderWorker
-{
-    
-    /**
-     * Invoked just after the components render call, giving services 
-     * implementing the {@link ComponentRenderWorker} interface a guaranteed 
-     * state to work off of.
-     * 
-     * @param cycle
-     *          The associated request for this render.
-     * @param component
-     *          The component that has just been rendered.
-     */
-    void renderComponent(IRequestCycle cycle, IComponent component);
-    
-    /**
-     * Special render for handling html element targets. This is invoked
-     * just after the body component renders its body, but before the script
-     * data is written out. 
-     * 
-     * @param cycle
-     *          The associated request cycle.
-     * @param component
-     *          The {@link Body} component, which holds the needed {@link PageRenderSupport} object.
-     */
-    void renderBody(IRequestCycle cycle, Body component);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentTemplateLoader.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentTemplateLoader.java
deleted file mode 100644
index 4f3d04e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ComponentTemplateLoader.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.ITemplateComponent;
-
-/**
- * Service interface for <code>tapestry.page.ComponentTemplateLoader</code>; responsible for
- * finding and integrating a component (or page) template with the component (or page) instance.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ComponentTemplateLoader
-{
-    void loadTemplate(IRequestCycle requestCycle, ITemplateComponent loadComponent);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/CookieSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/CookieSource.java
deleted file mode 100644
index b17749c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/CookieSource.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-/**
- * Used by other services to obtain cookie values for the current request.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface CookieSource
-{
-    /**
-     * Returns the value of the first cookie whose name matches. Returns null if no such cookie
-     * exists. This method is only aware of cookies that are part of the incoming request; it does
-     * not know about additional cookies added since then (via
-     * {@link #writeCookieValue(String, String)}).
-     */
-    String readCookieValue(String name);
-
-    /**
-     * Creates or updates a cookie value. The value is stored using a max age (in seconds) defined
-     * by the symbol <code>org.apache.tapestry.default-cookie-max-age</code>. The factory default
-     * for this value is the equivalent of one week.
-     */
-
-    void writeCookieValue(String name, String value);
-
-    /**
-     * As with {@link #writeCookieValue(String, String)} but an explicit maximum age may be set.
-     * 
-     * @param name
-     *            the name of the cookie
-     * @param value
-     *            the value to be stored in the cookie
-     * @param maxAge
-     *            the maximum age, in seconds, to store the cookie
-     */
-
-    void writeCookieValue(String name, String value, int maxAge);
-    
-    /**
-     * As with {@link #writeCookieValue(String, String)} but an explicit path
-     * may be set.
-     */
-    void writeCookieValue(String name, String value, String path);
-    
-    /**
-     * As with {@link #writeCookieValue(String, String)} but an explicit path
-     * may be set.
-     */
-    void writeDomainCookieValue(String name, String value, String domain);
-    
-    /**
-     * As with {@link #writeCookieValue(String, String)} but an explicit path
-     * may be set.
-     */
-    void writeDomainCookieValue(String name, String value, String domain, int maxAge);
-    
-    /**
-     * As with {@link #writeCookieValue(String, String, String)} but an explicit
-     * domain may be set.
-     */
-    void writeCookieValue(String name, String value, String path, String domain);
-    
-    /**
-     * Removes a previously written cookie, by writing a new cookie with a maxAge of 0.
-     */
-
-    void removeCookieValue(String name);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/DataSqueezer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/DataSqueezer.java
deleted file mode 100644
index f3ef7d6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/DataSqueezer.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-/**
- * Lightweight serialization used to encode values into strings that are stored in query parameters
- * and hidden fields.
- */
-public interface DataSqueezer
-{
-    /**
-     * Squeezes the data object into a String by locating an appropriate adaptor that can perform
-     * the conversion. data may be null.
-     *
-     * @param data
-     *          The object to squeeze.
-     *
-     * @return The string equivalent of the data in "squeezed" form.
-     */
-    String squeeze(Object data);
-
-    /**
-     * A convenience; invokes {@link #squeeze(Object)} for each element in the data array. If data
-     * is null, returns null.
-     *
-     * @param data
-     *          Array of objects to squeeze.
-     *
-     * @return Squeezed string array.
-     */
-    String[] squeeze(Object[] data);
-
-    /**
-     * Unsqueezes the string. Note that in a special case, where the first character of the string
-     * is not a recognized prefix, it is assumed that the string is simply a string, and returned
-     * with no change.
-     *
-     * @param string
-     *          The data to unsqueeze.
-     *
-     * @return The object representation of the data - theoretically matching the object
-     *          passed in via {@link #squeeze(Object)}. 
-     */
-    Object unsqueeze(String string);
-
-    /**
-     * Convenience method for unsqueezing many strings (back into objects).
-     * <p>
-     * If strings is null, returns null.
-     * </p>
-     *
-     * @param strings
-     *          The string data array to unsqueeze.
-     *
-     * @return The data in its object form, as was passed in to {@link #squeeze(Object[])}. 
-     */
-    Object[] unsqueeze(String[] strings);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/DataSqueezerFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/DataSqueezerFilter.java
deleted file mode 100644
index 2a45dc2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/DataSqueezerFilter.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services;
-
-/**
- * @author James Carman
- */
-public interface DataSqueezerFilter {
-
-    /**
-     * Optionally squeezes the data object into a String.
-     * 
-     * @param data the data to squeeze
-     * @param dataSqueezer the next squeezer in the pipeline
-     * 
-     * @return the string representation
-     */
-    String squeeze(Object data, DataSqueezer dataSqueezer);
-
-    /**
-     * A convenience; invokes {@link #squeeze(Object, DataSqueezer)}for each element in the
-     * data array. If data is null, returns null.
-     * 
-     * @param data the data to squeeze
-     * @param dataSqueezer the next squeezer in the pipeline
-     * 
-     * @return the string representation
-     */
-    String[] squeeze(Object[] data, DataSqueezer dataSqueezer);
-
-    /**
-     * Unsqueezes the string. Note that in a special case, where the first
-     * character of the string is not a recognized prefix, it is assumed that
-     * the string is simply a string, and returned with no change.
-     * 
-     * @param string the string representation of the data
-     * @param dataSqueezer the next squeezer in the pipeline
-     * 
-     * @return the unsqueezed data object
-     */
-    Object unsqueeze(String string, DataSqueezer dataSqueezer);
-
-    /**
-     * Convenience method for unsqueezing many strings (back into objects).
-     * <p>
-     * If strings is null, returns null.
-     * </p>
-     * @param strings the string representation of the data
-     * @param dataSqueezer the next squeezer in the pipeline
-     *
-     * @return the unsqueezed data object
-     */
-    Object[] unsqueeze(String[] strings, DataSqueezer dataSqueezer);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/EngineFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/EngineFactory.java
deleted file mode 100644
index 20e177f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/EngineFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.IEngine;
-
-import java.util.Locale;
-
-/**
- * Responsible for creating new instance of {@link org.apache.tapestry.IEngine}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface EngineFactory
-{
-
-    /**
-     * Creates and initializes a new engine instance for the specified locale.
-     *
-     * @param locale The locale to create the instance for.
-     *
-     * @return A newly constructed engine.
-     */
-    IEngine constructNewEngineInstance(Locale locale);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/EngineManager.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/EngineManager.java
deleted file mode 100644
index 5a80da7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/EngineManager.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.IEngine;
-
-/**
- * Service responsible for obtaining instances of
- * {@link org.apache.tapestry.IEngine} to service the current request. An engine
- * service may be retrieved from a pool, or extracted from the HttpSession.
- * After the request is processed, the engine is re-stored into the HttpSession
- * (if stateful) or back into the pool (if not stateful).
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface EngineManager
-{
-
-    /**
-     * Locates or creates an engine instance for the current request.
-     */
-    IEngine getEngineInstance();
-
-    /**
-     * Store the engine back at the end of the current request.
-     */
-
-    void storeEngineInstance(IEngine engine);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ExpressionCache.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ExpressionCache.java
deleted file mode 100644
index 30a2f7e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ExpressionCache.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-/**
- * Cache of compiled OGNL expressions.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ExpressionCache
-{
-
-    /**
-     * Returns the compiled form of the OGNL expression.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the expression is not valid
-     */
-    Object getCompiledExpression(String expression);
-    
-    /**
-     * Returns the compiled ognl expression for the given target object class / expression
-     * combination.
-     * 
-     * @param target
-     *          The object this expression is to be used for.
-     * @param expression
-     *          The expression.
-     * @return
-     *      The compiled (or new if neccessary) ognl statement.
-     */
-    Object getCompiledExpression(Object target, String expression);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ExpressionEvaluator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ExpressionEvaluator.java
deleted file mode 100644
index 58e65d8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ExpressionEvaluator.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import ognl.OgnlContext;
-import ognl.enhance.ExpressionAccessor;
-
-/**
- * Wrapper around the OGNL library.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ExpressionEvaluator
-{
-
-    /**
-     * Reads a property of the target, defined by the expression.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the expression can not be parsed, or if some other error
-     *             occurs during evaluation of the expression.
-     */
-    Object read(Object target, String expression);
-
-    /**
-     * Reads a property of the target, defined by the (previously compiled)
-     * expression.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if some other error occurs during evaluation of the
-     *             expression.
-     */
-    Object readCompiled(Object target, Object expression);
-    
-    /**
-     * Reads a property of the target, defined by the (previously compiled)
-     * expression.
-     * 
-     * @param target
-     *          The object to resolve the expression against.
-     * @param expression
-     *          The compiled expression.
-     * @return
-     *          The result of reading on the expression.
-     */
-    Object read(Object target, ExpressionAccessor expression);
-    
-    /**
-     * Updates a property of the target, defined by the expression.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the expression can not be parsed, or if some other error
-     *             occurs during evaluation of the expression.
-     */
-    void write(Object target, String expression, Object value);
-
-    /**
-     * Updates a property of the target, defined by the (previously compiled)
-     * expression.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if some other error occurs during evaluation of the
-     *             expression.
-     */
-    void writeCompiled(Object target, Object expression, Object value);
-    
-    /**
-     * Updates a property of the target, defined by the (previously compiled)
-     * expression.
-     * 
-     * @param target
-     *          The target object to set a value on.
-     * @param expression
-     *          The pre-compiled expression.
-     * @param value
-     *          The value to set.
-     */
-    void write(Object target, ExpressionAccessor expression, Object value);
-    
-    /**
-     * Returns true if the expression evaluates to a constant or other literal
-     * value.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the expression is not valid
-     */
-    boolean isConstant(String expression);
-    
-    /**
-     * Returns true if the expression evaluates to a constant or other literal
-     * value.
-     * 
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the expression is not valid
-     */
-    boolean isConstant(Object target, String expression);
-    
-    /**
-     * Creates a default OGNL context object that can be used against
-     * the specified object for expression evaluation.
-     * 
-     * @param target 
-     *          The object to get a context for.
-     * @return 
-     *          An ognl context map.
-     */
-    OgnlContext createContext(Object target);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/Infrastructure.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/Infrastructure.java
deleted file mode 100644
index d874da7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/Infrastructure.java
+++ /dev/null
@@ -1,310 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import java.util.Locale;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.describe.HTMLDescriber;
-import org.apache.tapestry.engine.IPageSource;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.engine.state.ApplicationStateManager;
-import org.apache.tapestry.error.ExceptionPresenter;
-import org.apache.tapestry.error.RequestExceptionReporter;
-import org.apache.tapestry.error.StaleLinkExceptionPresenter;
-import org.apache.tapestry.error.StaleSessionExceptionPresenter;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.listener.ListenerMapSource;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-/**
- * Tapestry infrastructure ... key services required by the
- * {@link org.apache.tapestry.IEngine} instance.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface Infrastructure
-{
-
-    /**
-     * Initializes the Infrastructure for a particular mode.
-     * 
-     * @throws IllegalStateException
-     *             if the Infrastructure has already been initialized.
-     */
-
-    void initialize(String mode);
-
-    /**
-     * Returns a named property.
-     * 
-     * @throws IllegalStateException
-     *             if the Infrastructure has not yet been initialized.
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if no value has been contributed for specified property name.
-     */
-
-    Object getProperty(String propertyName);
-
-    /**
-     * Returns the {@link org.apache.tapestry.spec.IApplicationSpecification}&nbsp;for
-     * the current application.
-     */
-
-    IApplicationSpecification getApplicationSpecification();
-
-    /**
-     * Returns an {@link IPropertySource}&nbsp;configured to search the
-     * application specification, etc. See
-     * <code>tapestry.ApplicationPropertySource</code>.
-     */
-    IPropertySource getApplicationPropertySource();
-
-    /**
-     * Returns an {@link IPropertySource}&nbsp;configured to search the
-     * servlet, servlet context, and factory defaults.
-     */
-
-    IPropertySource getGlobalPropertySource();
-
-    /**
-     * Returns the coordinator to be notified of reset events (which will, in
-     * turn, notify other services that they should discard cached data).
-     */
-
-    ResetEventHub getResetEventHub();
-
-    /**
-     * Returns the source of component message bundles.
-     */
-
-    ComponentMessagesSource getComponentMessagesSource();
-
-    /**
-     * Returns component or page template contents.
-     */
-
-    TemplateSource getTemplateSource();
-
-    /**
-     * Returns the source of all application, page, component and library
-     * specifications.
-     */
-
-    ISpecificationSource getSpecificationSource();
-
-    /**
-     * Returns a generic, shared ObjectPool instance.
-     */
-    ObjectPool getObjectPool();
-
-    /**
-     * Returns the source for pages. The source is a cache of pages, but also
-     * can create new instances when needed.
-     */
-
-    IPageSource getPageSource();
-
-    /**
-     * Returns the ClassResolver used by the Tapestry HiveMind module, which
-     * should be sufficient for use throughout the application.
-     */
-
-    ClassResolver getClassResolver();
-
-    /**
-     * The DataSqueezer, used when constructing and decoding values stored in
-     * URLs (as query parameters or hidden form fields).
-     */
-
-    DataSqueezer getDataSqueezer();
-
-    /**
-     * The source for ready-to-execute versions of Tapestry script templates.
-     */
-
-    IScriptSource getScriptSource();
-
-    /**
-     * The object from which engine services are obtained.
-     */
-
-    ServiceMap getServiceMap();
-
-    /**
-     * Service used to report exceptions to the console.
-     */
-
-    RequestExceptionReporter getRequestExceptionReporter();
-
-    /**
-     * Renders the active page as the response.
-     */
-
-    ResponseRenderer getResponseRenderer();
-
-    /**
-     * Constructs {@link org.apache.tapestry.engine.ILink}&nbsp;instances for
-     * {@link org.apache.tapestry.engine.IEngineService}s.
-     */
-
-    LinkFactory getLinkFactory();
-
-    /**
-     * Used by the {@link org.apache.tapestry.IEngine}&nbsp;to create instances
-     * of {@link org.apache.tapestry.IRequestCycle}.
-     */
-
-    RequestCycleFactory getRequestCycleFactory();
-
-    /**
-     * Accesses application state objects (Visit and Global from Tapestry 3.0,
-     * but now more can be created).
-     */
-
-    ApplicationStateManager getApplicationStateManager();
-
-    /**
-     * Returns the request for the current request cycle.
-     */
-
-    WebRequest getRequest();
-
-    /**
-     * Returns the response for the current request cycle.
-     */
-
-    WebResponse getResponse();
-
-    /**
-     * Returns the context path, which identifies the application within the
-     * application server. Context path should be used as a prefix for any URLs
-     * generated. The context path may be the empty string, and will not end in
-     * a slash (servlet paths should start with a slash).
-     */
-
-    String getContextPath();
-
-    /**
-     * Returns the application's id; a unique name that is incorporated into
-     * various session attribute keys and into certain paths when searching for
-     * resources. For a servlet-based Tapestry application, the id is the name
-     * of the servlet.
-     */
-
-    String getApplicationId();
-
-    /**
-     * Returns the root context resource, which is the starting point when
-     * looking for resources within the application.
-     */
-
-    Resource getContextRoot();
-
-    /**
-     * Returns an object used to access component meta-data properties.
-     */
-
-    ComponentPropertySource getComponentPropertySource();
-
-    /**
-     * Invoked when the locale for the current thread is changed.
-     * 
-     * @see org.apache.tapestry.IEngine#setLocale(Locale)
-     */
-
-    void setLocale(Locale value);
-
-    String getOutputEncoding();
-
-    MarkupWriterSource getMarkupWriterSource();
-
-    HTMLDescriber getHTMLDescriber();
-
-    /**
-     * Responsible for presenting an exception error report to the user.
-     */
-
-    ExceptionPresenter getExceptionPresenter();
-
-    /**
-     * The source for {@link org.apache.tapestry.listener.ListenerMap}s, for
-     * components or other objects.
-     */
-
-    ListenerMapSource getListenerMapSource();
-
-    /**
-     * The service responsible for reporting
-     * {@link org.apache.tapestry.StaleSessionException}s.
-     */
-
-    StaleSessionExceptionPresenter getStaleSessionExceptionPresenter();
-
-    /**
-     * The service responsible for reporting
-     * {@link org.apache.tapestry.StaleLinkException}s.
-     */
-
-    StaleLinkExceptionPresenter getStaleLinkExceptionPresenter();
-
-    /**
-     * Service used to convert and coerce types.
-     */
-
-    ValueConverter getValueConverter();
-
-    /**
-     * Service (possibly a pipeline) that will invoke
-     * {@link org.apache.tapestry.IActionListener} objects.
-     */
-
-    ListenerInvoker getListenerInvoker();
-
-    /**
-     * Service that is used to convert {@link org.apache.hivemind.Resource}s
-     * into {@link org.apache.tapestry.IAsset}s.
-     */
-
-    AssetFactory getAssetFactory();
-
-    /**
-     * Service used to access HTTP Cookies. This is only available for Servlet
-     * Tapestry; a placeholder will be provided for Portlet Tapestry.
-     */
-
-    CookieSource getCookieSource();
-
-    /**
-     * Used to search for a class name within a list of packages.
-     */
-
-    ClassFinder getClassFinder();
-
-    /**
-     * Returns the request cycle for the current thread.
-     */
-    IRequestCycle getRequestCycle();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/InjectedValueProvider.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/InjectedValueProvider.java
deleted file mode 100644
index 3f26759..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/InjectedValueProvider.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.hivemind.Location;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface InjectedValueProvider
-{
-    /**
-     * Looks up a value in HiveMind using the object reference (as with HiveMind's built-in object
-     * translator). The module will always be the Tapestry module (which means that most service ids
-     * or configurations will have to be fully qualified.
-     * 
-     * @param objectReference
-     *            the reference to the HiveMind object to obtain, with a leading prefix indicating
-     *            type (i.e., "service:", "configuration:", etc.
-     * @param location
-     *            the location of the value, used if an error must be reported.
-     * @return the value
-     */
-
-    Object obtainValue(String objectReference, Location location);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/LinkFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/LinkFactory.java
deleted file mode 100644
index 60467ba..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/LinkFactory.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import java.util.Map;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.engine.ServiceEncoder;
-
-/**
- * A source of {@link org.apache.tapestry.engine.ILink}instances. This is
- * primarily used by {@link org.apache.tapestry.engine.IEngineService}s.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface LinkFactory
-{
-
-    /**
-     * Constructs an {@link org.apache.tapestry.engine.ILink}.
-     * 
-     * @param service
-     *            the service for which the link is being generated
-     * @param post
-     *            if true, then the link will be used for a post (not a get,
-     *            i.e., for a HTML form); this may affect what information is
-     *            encoded into the link
-     * @param parameters
-     *            A map; keys are strings and values are strings or string
-     *            arrays (exception: key {@link ServiceConstants#PARAMETER} is
-     *            an array of objects. Certain keys, defined in
-     *            {@link ServiceConstants} may have special meaning. The map
-     *            will typically be modified internally. May not be null.
-     * @param stateful
-     *            If true, then the final URL should be encoded (with the
-     *            session id) if necessary. If false, the session encoding
-     *            should not occur. The latter case is useful for services that
-     *            will absolutely not need any access to user-specific state.
-     */
-    ILink constructLink(IEngineService service, boolean post,
-            Map parameters, boolean stateful);
-
-    /**
-     * A secondary function of the service is to convert encoded (aka
-     * "squeezed") listener parameters back into an array of Objects. This does
-     * (barely) makes sense .. the link factory is responsible for encoding the
-     * listener parameters, it should be responsible for decoding them.
-     * 
-     * @param cycle
-     *            the current request cycle
-     * @return an array of Object[]. May return an empty array, but won't return
-     *         null.
-     */
-
-    Object[] extractListenerParameters(IRequestCycle cycle);
-
-    /**
-     * Returns an array of {@link org.apache.tapestry.engine.ServiceEncoder},
-     * ordering into execution order. May return an empty array, but won't
-     * return null.
-     */
-
-    ServiceEncoder[] getServiceEncoders();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/NamespaceResources.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/NamespaceResources.java
deleted file mode 100644
index 57e4134..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/NamespaceResources.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.services;

-

-import org.apache.hivemind.Location;

-import org.apache.hivemind.Resource;

-import org.apache.tapestry.spec.IComponentSpecification;

-import org.apache.tapestry.spec.ILibrarySpecification;

-

-/**

- * Companion to the standard {@link org.apache.tapestry.engine.Namespace implementation} of

- * {@link org.apache.tapestry.INamespace}. Defines resources needed by the Namespace instance to

- * operate (these have grown numerous!)

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public interface NamespaceResources

-{

-    /**

-     * Finds a child library specification for some parent library specification.

-     * 

-     * @param libraryResource

-     *            the {@link Resource} from which the parent library (or application) specification

-     *            was loaded

-     * @param path

-     *            the relative path from the parent specification resource to the library

-     *            specification. As a special case, a path starting with a leading slash is assumed

-     *            to be on the classpath.

-     * @param location TODO

-     * @return the library specification.

-     */

-    ILibrarySpecification findChildLibrarySpecification(Resource libraryResource, String path, Location location);

-

-    /**

-     * Retrieves a page specification, parsing it as necessary.

-     * 

-     * @param libraryResource

-     *            the base resource for resolving the path to the page specification; this will be

-     *            the resource for the library (or application) specification

-     * @param specificationPath

-     *            the path to the specification to be parsed

-     * @param location

-     *            used to report errors

-     * @throws org.apache.hivemind.ApplicationRuntimeException

-     *             if the specification doesn't exist, is unreadable or invalid.

-     * @see org.apache.tapestry.engine.ISpecificationSource#getPageSpecification(Resource)

-     */

-

-    IComponentSpecification getPageSpecification(Resource libraryResource,

-            String specificationPath, Location location);

-

-    /**

-     * Retrieves a component specification, parsing it as necessary.

-     * 

-     * @param libraryResource

-     *            the base resource for resolving the path to the page specification; this will be

-     *            the resource for the library (or application) specification

-     * @param specificationPath

-     *            the path to the specification to be parsed

-     * @param location

-     *            used to report errors

-     * @throws org.apache.hivemind.ApplicationRuntimeException

-     *             if the specification doesn't exist, is unreadable or invalid.

-     */

-

-    IComponentSpecification getComponentSpecification(Resource libraryResource,

-            String specificationPath, Location location);

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ObjectPool.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ObjectPool.java
deleted file mode 100644
index 9b60914..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ObjectPool.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-/**
- * An pool for objects. Objects may be stored in a Pool for later reuse.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ObjectPool
-{
-
-    /**
-     * Returns an object from the pool, previously stored with the given key.
-     * May return null if no such object exists.
-     *
-     * @return 
-     */
-    Object get(Object key);
-
-    /**
-     * Stores an object into the pool for later retrieval with the provided key.
-     */
-
-    void store(Object key, Object value);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/RequestCycleFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/RequestCycleFactory.java
deleted file mode 100644
index 90cbbe6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/RequestCycleFactory.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * A factory for creating instances of {@link org.apache.tapestry.IRequestCycle}for
- * the current request.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface RequestCycleFactory
-{
-
-    /**
-     * Constructs the new instance using the request context. This includes
-     * accessing {@link org.apache.tapestry.engine.ServiceEncoder}s to restore
-     * any missing query parameters (that were encoding into the URL).
-     */
-
-    IRequestCycle newRequestCycle(IEngine engine);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/RequestGlobals.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/RequestGlobals.java
deleted file mode 100644
index 172ad37..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/RequestGlobals.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-/**
- * Access point for thread-local information about the current request.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface RequestGlobals
-{
-
-    void store(HttpServletRequest request, HttpServletResponse response);
-
-    void store(WebRequest request, WebResponse response);
-
-    void store(IRequestCycle cycle);
-    
-    void store(ResponseBuilder builder);
-    
-    HttpServletRequest getRequest();
-
-    WebRequest getWebRequest();
-
-    HttpServletResponse getResponse();
-
-    WebResponse getWebResponse();
-
-    IRequestCycle getRequestCycle();
-    
-    ResponseBuilder getResponseBuilder();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/RequestLocaleManager.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/RequestLocaleManager.java
deleted file mode 100644
index bb88142..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/RequestLocaleManager.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import java.util.Locale;
-
-/**
- * Used to determine what is the client-specified locale, if any, for the
- * current request. This may be stored in the request as an HTTP Cookie, or may
- * be interpolated from request headers. Additionally, the "raw" value provided
- * by the client may be filtered down.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface RequestLocaleManager
-{
-
-    /**
-     * Determines the locale to use for processing the current request. The
-     * value is returned, but also stored as locale.
-     *
-     * @return The {@link Locale} to be used for this request.
-     */
-
-    Locale extractLocaleForCurrentRequest();
-
-    /**
-     * Stores the thread's locale as a cookie for later use.
-     */
-
-    void persistLocale();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResetEventHub.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResetEventHub.java
deleted file mode 100644
index 4b93fff..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResetEventHub.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.event.ResetEventListener;
-
-/**
- * Service interface for a source of <b>reset</b> events; this events are used
- * to inform other services that they should discard any cached data.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ResetEventHub
-{
-
-    void addResetEventListener(ResetEventListener l);
-
-    void removeResetEventListener(ResetEventListener l);
-
-    /**
-     * Notifies registered listeners.
-     */
-    void fireResetEvent();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseBuilder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseBuilder.java
deleted file mode 100644
index 0ad0a40..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseBuilder.java
+++ /dev/null
@@ -1,326 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.services.impl.DojoAjaxResponseBuilder;
-
-import java.io.IOException;
-
-/**
- * Represents the service responsible for managing all content output that is sent
- * to the client. In the case of normal http responses this management would inlude 
- * handing out {@link IMarkupWriter} instances to render components with, as well as 
- * managing any javascript written to the output using Script templates.
- *
- * <p>
- *  This is a major internal change in terms of the way tapestry renders pages/components.
- *  Traditionally a response has been rendered via:
- *  <em>
- *  IPage.render(writer, cycle);
- *  </em>
- *  The logic has now changed somewhat, while the IPage.render(writer, cycle) does still happen, this
- *  service is the primary invoker of all renders, even nested component bodies. That means that in the majority
- *  of cases the ResponseBuilder service is used to invoke IComponent.render() throught the entire render
- *  cycle, creating a great deal of flexibility in terms of what can be done to control the output of a given
- *  response.
- * </p>
- *
- * <p>
- * This service was primarily created to help bolster support for more dynamic content responses, such 
- * as XHR/JSON/etc - where controlling individual component output (and javascript) becomes very important
- * when managaing client side browser state. 
- * </p>
- *
- * @since 4.1
- */
-public interface ResponseBuilder extends PageRenderSupport {
-
-    /**
-     * Inside a {@link org.apache.tapestry.util.ContentType}, the output encoding is called
-     * "charset".
-     */
-    String ENCODING_KEY = "charset";
-
-    /**
-     * The content type of the response that will be returned.
-     */
-    String CONTENT_TYPE = "text/xml";
-
-    /**
-     * The response element type.
-     */
-    String ELEMENT_TYPE = "element";
-
-    /**
-     * The response exception type.
-     */
-    String EXCEPTION_TYPE = "exception";
-
-    /**
-     * The response element type denoting a brand new page render.
-     */
-    String PAGE_TYPE = "page";
-
-    String SCRIPT_TYPE = "script";
-
-    String BODY_SCRIPT = "bodyscript";
-
-    String INCLUDE_SCRIPT = "includescript";
-
-    String INITIALIZATION_SCRIPT = "initializationscript";
-
-    /**
-     * Implementors that manage content writes dynamically (ie {@link DojoAjaxResponseBuilder}) should
-     * return true to denote that dynamic behaviour is on for a particular response.
-     *
-     * @return Whether or not request is dynamic.
-     */
-    boolean isDynamic();
-
-    /**
-     * Causes the output stream to be flushed, used primarily in concert with {@link IRequestCycle} to sync
-     * up flushing of headers to the browser once any page changes have been committed.
-     *
-     * @throws IOException During io error.
-     */
-    void flush()
-      throws IOException;
-
-    /**
-     * Renders the response to a client. Handles transitioning logic
-     * for setting up page and associated components for response.
-     *
-     * @param cycle
-     *          The main request cycle object for this request.
-     *
-     * @throws IOException During io error.
-     */
-
-    void renderResponse(IRequestCycle cycle)
-      throws IOException;
-
-    /**
-     * Invoked to render a renderable object. Performs any necessary
-     * under the hood type logic involving ajax/json/normal responses, where
-     * needed.
-     *
-     * @param writer
-     *          The markup writer to use, this may be ignored or swapped
-     *          out for a different writer depending on the implementation being used.
-     * @param render The renderable object to render
-     * @param cycle Render request cycle
-     */
-
-    void render(IMarkupWriter writer, IRender render, IRequestCycle cycle);
-
-    /**
-     * If the component identified by the specified id isn't already set to
-     * be updated, will add it to the response for updating. (Only applicable
-     * in dynamic responses such as XHR/JSON ).
-     *
-     * @param id
-     *          The {@link IComponent} id to update.
-     */
-    void updateComponent(String id);
-
-    /**
-     * Checks if the rendered response contains a particular component. Contains
-     * can mean many things. In the instance of a dynamic response it could potentially
-     * mean a component explicitly set to be updated - or a component that has a containing
-     * component explicitly set to be updated.
-     *
-     * @param target The component to check containment of.
-     * @return True if response contains the specified component, false otherwise.
-     */
-    boolean contains(IComponent target);
-
-    /**
-     * Similar to {@link #contains(IComponent)}, but only returns true if the component
-     * has been marked for update directly via an <code>updateComponents</code> property 
-     * or by calling {@link ResponseBuilder#updateComponent(String)} directly. 
-     *
-     * <p>
-     * <b>IMPORTANT!:</b> This will not return true for components contained by a component
-     *  marked for update. If you want that kind of behaviour use {@link #contains(IComponent)}. 
-     * </p>
-     *
-     * @param target The component to check.
-     * @return True if the component as listed as one to be updated, false otherwise.
-     */
-    boolean explicitlyContains(IComponent target);
-
-    /**
-     * Invoked by components that know "when" the method should be called. Causes all queued up
-     * body related javascript data to be written out to the response.
-     *
-     * @param writer
-     *          The writer to use . (may / may not be ignored depending on the response type)
-     * @param cycle
-     *          Associated request.
-     */
-    void writeBodyScript(IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     * Invoked by components that know "when" the method should be called. Causes all queued up
-     * initialization related javascript data to be written out to the response.
-     *
-     * @param writer
-     *          The writer to use . (may / may not be ignored depending on the response type)
-     */
-    void writeInitializationScript(IMarkupWriter writer);
-
-    /**
-     * Invoked by {@link PageRenderSupport} to write external js package
-     * includes. This method will be invoked for each external script requesting
-     * inclusion in the response.
-     *
-     * These will typically be written out as 
-     * <code>
-     * <script type="text/javascript" src="url"></script>
-     * </code>.
-     *
-     * @param writer
-     *          The markup writer to use, this may be ignored or swapped
-     *          out for a different writer depending on the implementation being used.
-     * @param url
-     *          The absolute url to the .js package to be included.
-     * @param cycle
-     *          The associated request.
-     */
-    void writeExternalScript(IMarkupWriter writer, String url, IRequestCycle cycle);
-
-    /**
-     * Marks the beginning of the core body script.
-     *
-     * @param writer
-     *          The markup writer to use, this may be ignored or swapped
-     *          out for a different writer depending on the implementation being used.
-     * @param cycle
-     *          The associated request.
-     */
-    void beginBodyScript(IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     * Intended to be written within the confines of the body script, should
-     * be invoked once just after {@link #beginBodyScript(IMarkupWriter, IRequestCycle)} is called
-     * to include any image initializations. This method should only be called if
-     * there are actually images that need pre-initialization. Ie in many instances 
-     * it will not be called at all.
-     *
-     * @param writer
-     *          The markup writer to use, this may be ignored or swapped
-     *          out for a different writer depending on the implementation being used.
-     * @param script
-     *          The non null value of the script images to include. 
-     * @param preloadName
-     *          The global variable name to give to the preloaded images array.
-     * @param cycle
-     *          The associated request.
-     */
-    void writeImageInitializations(IMarkupWriter writer, String script, String preloadName, IRequestCycle cycle);
-
-    /**
-     * Called after {@link #beginBodyScript(IMarkupWriter, IRequestCycle)} to write the containing
-     * body script. This method may not be called at all if there is no js body 
-     * to write into the response.
-     *
-     * @param writer
-     *          The markup writer to use, this may be ignored or swapped
-     *          out for a different writer depending on the implementation being used.
-     * @param script
-     *          The script to write into the body response.
-     * @param cycle
-     *          The associated request.
-     */
-    void writeBodyScript(IMarkupWriter writer, String script, IRequestCycle cycle);
-
-    /**
-     * Marks the end of the body block being called. This method will 
-     * always be called if {@link #beginBodyScript(IMarkupWriter, IRequestCycle)} was previously
-     * called. 
-     *
-     * @param writer
-     *          The markup writer to use, this may be ignored or swapped
-     *          out for a different writer depending on the implementation being used.
-     * @param cycle
-     *          The associated request.
-     */
-    void endBodyScript(IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     * Writes any javascript that should only execute after all other items
-     * on a page have completed rendering. This is typically implemented via
-     * wrapping the executing of the code to some sort of <code>window.onload</code> 
-     * event, but will vary depending on the implementation of the builder being used.
-     *
-     * This method will ~only~ be called if there is any queued intialization script 
-     * to write.
-     *
-     * @param writer
-     *          The markup writer to use, this may be ignored or swapped
-     *          out for a different writer depending on the implementation being used.
-     * @param script
-     *          The initialzation script to write.
-     */
-    void writeInitializationScript(IMarkupWriter writer, String script);
-
-    /**
-     * Returns the IMarkupWriter associated with this response, it may or may
-     * not be a NullWriter instance depending on the response type or stage 
-     * of the render cycle. (specifically during rewind)
-     *
-     * @return A validly writable markup writer, even if the content is sometimes
-     * ignored.
-     */
-
-    IMarkupWriter getWriter();
-
-    /**
-     * Gets a write that will output its content in a <code>response</code>
-     * element with the given id and type. 
-     *
-     * @param id
-     *          The response element id to give writer.
-     * @param type
-     *          Optional - If specified will give the response element a type
-     *          attribute.
-     * @return A valid {@link IMarkupWriter} instance to write content to.
-     */
-    IMarkupWriter getWriter(String id, String type);
-
-    /**
-     * Determines if the specified component should have any asset image URL
-     * references embedded in the response.
-     *
-     * @param target
-     *          The component to allow/disallow image initialization script content from.
-     * @return True if the component script should be allowed.
-     */
-    boolean isImageInitializationAllowed(IComponent target);
-
-    /**
-     * Adds a status message to the current response.
-     *
-     * @param writer
-     *          The markup writer to use, this may be ignored or swapped
-     *          out for a different writer depending on the implementation being used.
-     * @param category
-     *          Allows setting a category that best describes the type of the status message,
-     *          i.e. info, error, e.t.c.
-     * @param text
-     *          The status message. 
-     */
-    void addStatusMessage(IMarkupWriter writer, String category, String text);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseContributor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseContributor.java
deleted file mode 100644
index 4165801..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseContributor.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-
-
-/**
- * Determines if the particular incoming ajax request is handled by this
- * contributor/library response type. If it is will also provide an instance
- * of the appropriate ResponseBuilder.
- *
- * @author jkuhnert
- */
-public interface ResponseContributor {
-    
-    /**
-     * Determines if the incoming ajax request is capable of being
-     * handled by the {@link ResponseBuilder} this contributor
-     * manages.
-     * 
-     * @param cycle 
-     *          Main request cycle for this request.
-     * @return True if can handle request, false otherwise.
-     */
-    boolean handlesResponse(IRequestCycle cycle);
-    
-    /**
-     * Creates the appropriate {@link ResponseBuilder} instance to handle the
-     * incoming ajax request.
-     * 
-     * @param cycle
-     *          The incoming request cycle for this request.
-     *          
-     * @return A newly created response builder.
-     */
-    ResponseBuilder createBuilder(IRequestCycle cycle)
-    throws IOException;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseDelegateFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseDelegateFactory.java
deleted file mode 100644
index a4b72dc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseDelegateFactory.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.DirectService;
-
-
-/**
- * Service used by {@link DirectService} to determine type of ajax request
- * receive and determine the appropriate {@link ResponseBuilder} to handle
- * the response.
- *
- * @author jkuhnert
- */
-public interface ResponseDelegateFactory {
-    
-    /**
-     * Creates an appropriate {@link ResponseBuilder} for the incoming 
-     * ajax request, if possible.
-     * 
-     * @param cycle
-     *          The request cycle for this request.
-     * @return The configured response builder.
-     */
-    ResponseBuilder getResponseBuilder(IRequestCycle cycle)
-    throws IOException;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseRenderer.java
deleted file mode 100644
index e04c3a8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ResponseRenderer.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Responsible for rendering the active page as the response. Works with the
- * {@link org.apache.tapestry.services.RequestLocaleManager}to persist any change to the selected
- * locale.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @deprecated To be replaced with {@link ResponseBuilder}.
- */
-public interface ResponseRenderer
-{
-    /**
-     * Renders the reponse, using the current active page defined by the request cycle.
-     */
-
-    void renderResponse(IRequestCycle cycle) throws IOException;
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServiceConstants.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServiceConstants.java
deleted file mode 100644
index 485405d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServiceConstants.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-/**
- * Defines constants for query parameters names commonly used by services.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ServiceConstants
-{
-    /**
-     * The name of the service responsible for processing the request.
-     */
-    public static final String SERVICE = "service";
-
-    /**
-     * The name of the page to activate when processing the service.
-     */
-
-    public static final String PAGE = "page";
-
-    /**
-     * The id path to the component within the page. By convention, this component is within the
-     * {@link #PAGE}.
-     */
-
-    public static final String COMPONENT = "component";
-
-    /**
-     * The name of the page containing the component; this is only specified when the component is
-     * contained by a page other than the activate page ({@link #PAGE}).
-     */
-
-    public static final String CONTAINER = "container";
-
-    /**
-     * A flag indicating whether a session was active when the link was rendered. If this is true,
-     * but no session is active when the request is processed, the a service may at its discression
-     * throw a {@iink org.apache.tapestry.StaleLinkException}
-     */
-
-    public static final String SESSION = "session";
-
-    /**
-     * Contains a number of additional strings meaningful to the application (the term service
-     * parameters is something of an entrenched misnomer, a better term would have been application
-     * parameters). These parameters are typically objects that have been squeezed into strings by
-     * {@link org.apache.tapestry.services.DataSqueezer}.
-     * <p>
-     * The value is currently "sp" for vaguely historical reasons ("service parameter"), though it
-     * would be better if it were "lp" (for "listener parameter"), or just "param" perhaps.
-     */
-
-    public static final String PARAMETER = "sp";
-
-    /**
-     * Contains a string list of the parts in a response that should be updated. Parts
-     * can be both components and normal html tags resolved via their unique id's.
-     */
-    public static final String UPDATE_PARTS = "updateParts";
-    
-    /**
-     * A list of all the constants defined by this class.
-     * 
-     * @see org.apache.tapestry.form.FormSupportImpl
-     */
-    public static final String[] RESERVED_IDS =
-    { SERVICE, PAGE, COMPONENT, CONTAINER, SESSION, PARAMETER };
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServiceMap.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServiceMap.java
deleted file mode 100644
index d54bb2a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServiceMap.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.engine.IEngineService;
-
-/**
- * Service interface for <code>tapestry.services.ServiceMap</code>, provides access to engine
- * services defined in the HiveMind module deployment descriptors.
- * <p>
- * Note: In Tapestry 3.0 and earlier, a &lt;service&gt; element in the application and library
- * specifications was used to define services. This is no longer supported.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ServiceMap
-{
-    /**
-     * Returns the named service.
-     * 
-     * @param name
-     *            the unique name for the service, as defined by each service instance's
-     *            {@link IEngineService#getName()} method.
-     * @returns the named service
-     * @throws org.apache.hivemind.ApplicationRuntimeException
-     *             if the named service does not exist
-     */
-    IEngineService getService(String name);
-
-    /**
-     * Returns true if the name is a known service, or false otherwise.
-     */
-
-    boolean isValid(String name);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServletRequestServicer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServletRequestServicer.java
deleted file mode 100644
index 97a88c3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServletRequestServicer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * An object that can service an HTTP servlet request. This is the bridge from the servlet world
- * into the Tapestry world. Generally, few objects actually implement this; instead objects
- * implement {@link org.apache.tapestry.services.ServletRequestServicerFilter} and plug into
- * the tapestry.request.ServletRequestServicerPipeline configuration point.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ServletRequestServicer
-{
-    void service(HttpServletRequest request, HttpServletResponse response)
-            throws IOException, ServletException;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServletRequestServicerFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServletRequestServicerFilter.java
deleted file mode 100644
index 63b6ca6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/ServletRequestServicerFilter.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Filter interface for
- * {@link org.apache.tapestry.services.ServletRequestServicer}. Allows objects
- * and services to "plug into" the pipeline.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public interface ServletRequestServicerFilter
-{
-
-    void service(HttpServletRequest request,
-            HttpServletResponse response, ServletRequestServicer servicer)
-        throws IOException, ServletException;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/TemplateSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/TemplateSource.java
deleted file mode 100644
index 7dd7f8d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/TemplateSource.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.parse.ComponentTemplate;
-
-/**
- * A source of localized HTML templates for components.  
- * The cache is the means of access for components to load thier templates,
- * which they need not do until just before rendering.
- *
- * <p>The template cache must be able to locate and parse templates as needed.
- * It may maintain templates in memory.
- *
- * @author Howard Ship
- */
-
-public interface TemplateSource
-{
-    /**
-     *  Name of an {@link org.apache.tapestry.IAsset} of a component that provides the template
-     *  for the asset.  This overrides the default (that the template is in
-     *  the same directory as the specification).  This allows
-     *  pages or component templates to be located properly, relative to static
-     *  assets (such as images and stylesheets).
-     * 
-     *  @since 2.2
-     * 
-     */
-    
-    String TEMPLATE_ASSET_NAME = "$template";
-
-    /**
-     *  Name of the component parameter that will be automatically bound to
-     *  the HTML tag that is used to insert the component in the parent template.
-     *  If the parent component does not have a template (i.e. it extends 
-     *  AbstractComponent, not BaseComponent), then this parameter is bound to null.
-     * 
-     *  @since 3.0
-     *  @deprecated To be removed in 4.2. Use the new {@link IComponent#getTemplateTagName()} method
-     *              instead.
-     */
-    
-    String TEMPLATE_TAG_PARAMETER_NAME = "templateTag";
-    
-    /**
-     *  Locates the template for the component.
-     * 
-     *  @param cycle The request cycle loading the template; this is required
-     *  in some cases when the template is loaded from an {@link org.apache.tapestry.IAsset}.
-     *  @param component The component for which a template should be loaded.
-     */
-
-    ComponentTemplate getTemplate(IRequestCycle cycle, IComponent component);
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/WebRequestServicer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/WebRequestServicer.java
deleted file mode 100644
index 8e14702..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/WebRequestServicer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import java.io.IOException;
-
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-/**
- * Interface for objects that can handle web requests; few classes implement
- * this, instead they implement
- * {@link org.apache.tapestry.services.WebRequestServicerFilter}&nbsp;and plug
- * into the tapestry.request.WebRequestServicerPipeline configuration point.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface WebRequestServicer
-{
-
-    void service(WebRequest request, WebResponse response)
-        throws IOException;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/WebRequestServicerFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/WebRequestServicerFilter.java
deleted file mode 100644
index 9f4199c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/WebRequestServicerFilter.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services;
-
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-import java.io.IOException;
-
-/**
- * Filter interface for {@link org.apache.tapestry.services.WebRequestServicer}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface WebRequestServicerFilter
-{
-
-    void service(WebRequest request, WebResponse response, WebRequestServicer servicer)
-        throws IOException;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/AbsoluteURLBuilderImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/AbsoluteURLBuilderImpl.java
deleted file mode 100644
index 2cdfa83..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/AbsoluteURLBuilderImpl.java
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.tapestry.services.AbsoluteURLBuilder;
-import org.apache.tapestry.web.WebRequest;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class AbsoluteURLBuilderImpl implements AbsoluteURLBuilder
-{
-    private WebRequest _request;
-
-    public String constructURL(String URI, String scheme, String server, int port)
-    {
-        // Though, really, what does a leading colon with no scheme before it
-        // mean?
-
-        if (URI.indexOf(':') >= 0)
-            return URI;
-
-        StringBuffer buffer = new StringBuffer();
-
-        // Should check the length here, first.
-
-        if (URI.length()> 2 && URI.substring(0, 2).equals("//"))
-        {
-            buffer.append(scheme);
-            buffer.append(':');
-            buffer.append(URI);
-            return buffer.toString();
-        }
-
-        buffer.append(scheme);
-        buffer.append("://");
-        buffer.append(server);
-
-        if (port > 0)
-        {
-            buffer.append(':');
-            buffer.append(port);
-        }
-
-        if (URI.charAt(0) != '/')
-            buffer.append('/');
-
-        buffer.append(URI);
-
-        return buffer.toString();
-    }
-
-    public String constructURL(String URI)
-    {
-        String scheme = _request.getScheme();
-        String server = _request.getServerName();
-        int port = _request.getServerPort();
-
-        // Keep things simple ... port 80 is accepted as the
-        // standard port for http so it can be ommitted.
-        //
-        // Some of the Tomcat code indicates that port 443 is the default
-        // for https.. And it is. 
-
-        if ((scheme.equals("http") && port == 80) || (scheme.equals("https") && port == 443))
-            port = 0;
-
-        return constructURL(URI, scheme, server, port);
-    }
-
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/AbstractSetupApplicationGlobals.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/AbstractSetupApplicationGlobals.java
deleted file mode 100644
index e4f212b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/AbstractSetupApplicationGlobals.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.List;
-
-import org.apache.tapestry.services.ApplicationGlobals;
-import org.apache.tapestry.services.Infrastructure;
-
-/**
- * Base class for settting up services and configurations inside
- * {@link org.apache.tapestry.services.ApplicationGlobals tapestry.globals.ApplicationGlobals}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class AbstractSetupApplicationGlobals
-{
-
-    private ApplicationGlobals _globals;
-
-    private List _factoryServices;
-
-    private Infrastructure _infrastructure;
-
-    protected void initialize(String mode)
-    {
-        _globals.storeFactoryServices(_factoryServices);
-
-        _infrastructure.initialize(mode);
-    }
-
-    public void setGlobals(ApplicationGlobals globals)
-    {
-        _globals = globals;
-    }
-
-    public void setFactoryServices(List factoryServices)
-    {
-        _factoryServices = factoryServices;
-    }
-
-    public void setInfrastructure(Infrastructure infrastructure)
-    {
-        _infrastructure = infrastructure;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ApplicationGlobalsImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ApplicationGlobalsImpl.java
deleted file mode 100644
index 8bdb4a5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ApplicationGlobalsImpl.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.List;
-
-import javax.servlet.ServletContext;
-
-import org.apache.tapestry.services.ApplicationGlobals;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.web.WebActivator;
-import org.apache.tapestry.web.WebContext;
-
-/**
- * Implementation of {@link ApplicationGlobals}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ApplicationGlobalsImpl implements ApplicationGlobals
-{
-    private WebActivator _activator;
-
-    private IApplicationSpecification _specification;
-
-    private WebContext _webContext;
-
-    private List _factoryServices;
-
-    private ServletContext _servletContext;
-
-    public void storeActivator(WebActivator activator)
-    {
-        _activator = activator;
-    }
-
-    public void storeSpecification(IApplicationSpecification applicationSpecification)
-    {
-        _specification = applicationSpecification;
-    }
-
-    public WebActivator getActivator()
-    {
-        return _activator;
-    }
-
-    public IApplicationSpecification getSpecification()
-    {
-        return _specification;
-    }
-
-    public String getActivatorName()
-    {
-        return _activator.getActivatorName();
-    }
-
-    public WebContext getWebContext()
-    {
-        return _webContext;
-    }
-
-    public void storeWebContext(WebContext context)
-    {
-        _webContext = context;
-    }
-
-    public void storeFactoryServices(List factoryServices)
-    {
-        _factoryServices = factoryServices;
-    }
-
-    public List getFactoryServices()
-    {
-        return _factoryServices;
-    }
-
-    public ServletContext getServletContext()
-    {
-        return _servletContext;
-    }
-
-    public void storeServletContext(ServletContext context)
-    {
-        _servletContext = context;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ApplicationSpecificationInitializer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ApplicationSpecificationInitializer.java
deleted file mode 100644
index a1eea66..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ApplicationSpecificationInitializer.java
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServlet;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ContextResource;
-import org.apache.tapestry.parse.ISpecificationParser;
-import org.apache.tapestry.services.ApplicationGlobals;
-import org.apache.tapestry.services.ApplicationInitializer;
-import org.apache.tapestry.services.ClasspathResourceFactory;
-import org.apache.tapestry.spec.ApplicationSpecification;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.web.HttpServletWebActivator;
-
-/**
- * Locates the application specification and informs the servlet service about it.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ApplicationSpecificationInitializer implements ApplicationInitializer
-{
-    public static final String APP_SPEC_PATH_PARAM = "org.apache.tapestry.application-specification";
-
-    private Log _log;
-
-    private ClasspathResourceFactory _classpathResourceFactory;
-
-    private ApplicationGlobals _globals;
-
-    private ISpecificationParser _parser;
-
-    public void initialize(HttpServlet servlet)
-    {
-        IApplicationSpecification spec = null;
-
-        Resource specResource = findApplicationSpecification(servlet);
-
-        if (specResource == null)
-        {
-            _log.warn(ImplMessages.noApplicationSpecification(servlet));
-            
-            spec = constructStandinSpecification(servlet);
-        } else
-            spec = _parser.parseApplicationSpecification(specResource);
-        
-        _globals.storeActivator(new HttpServletWebActivator(servlet));
-        _globals.storeSpecification(spec);
-    }
-
-    private Resource findApplicationSpecification(HttpServlet servlet)
-    {
-        String path = servlet.getInitParameter(APP_SPEC_PATH_PARAM);
-
-        if (path != null)
-            return _classpathResourceFactory.newResource(path);
-
-        ServletContext context = servlet.getServletContext();
-        String servletName = servlet.getServletName();
-        String expectedName = servletName + ".application";
-
-        Resource webInfLocation = new ContextResource(context, "/WEB-INF/");
-        Resource webInfAppLocation = webInfLocation.getRelativeResource(servletName + "/");
-
-        Resource result = check(webInfAppLocation, expectedName);
-        if (result != null)
-            return result;
-        
-        result = check(webInfLocation, expectedName);
-        if (result != null)
-            return result;
-        
-        // Now look for it in classpath, just in case
-        
-        result = _classpathResourceFactory.newResource(expectedName);
-        if (result != null && result.getResourceURL() != null)
-            return result;
-        
-        return null;
-    }
-
-    private Resource check(Resource resource, String name)
-    {
-        Resource result = resource.getRelativeResource(name);
-
-        if (_log.isDebugEnabled())
-            _log.debug("Checking for existence of " + result);
-
-        if (result.getResourceURL() != null)
-        {
-            _log.debug("Found " + result);
-            return result;
-        }
-
-        return null;
-    }
-
-    private IApplicationSpecification constructStandinSpecification(HttpServlet servlet)
-    {
-        String servletName = servlet.getServletName();
-
-        ApplicationSpecification result = new ApplicationSpecification();
-
-        // Pretend the file exists in the most common expected location.
-
-        Resource virtualLocation = new ContextResource(servlet.getServletContext(), "/WEB-INF/" + servletName + ".application");
-
-        result.setSpecificationLocation(virtualLocation);
-
-        result.setName(servletName);
-
-        return result;
-    }
-
-    public void setClasspathResourceFactory(ClasspathResourceFactory factory)
-    {
-        _classpathResourceFactory = factory;
-    }
-
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-
-    public void setGlobals(ApplicationGlobals globals)
-    {
-        _globals = globals;
-    }
-
-    public void setParser(ISpecificationParser parser)
-    {
-        _parser = parser;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/BaseTagWriter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/BaseTagWriter.java
deleted file mode 100644
index 8c7b00a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/BaseTagWriter.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Contains code needed to render the &lt;base&gt; tag for pages. The &lt;base&gt; tag ensures that
- * the base URL for the rendered page matches the location of the page template in the servlet
- * context, so that relative URLs to static assets (images, stylesheets, etc.) will be processed
- * correctly. This is important starting with release 4.0, where HTML templates are no longer
- * restricted to the servlet root.
- * <p>
- * Note that pages outside of the application namespace (provided by the framework itself, or in a
- * library) are "virtually located" in the application root.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class BaseTagWriter implements IRender
-{
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IPage page = cycle.getPage();
-
-        StringBuffer sb = new StringBuffer();
-        sb.append("/");
-
-        if (page.getNamespace().getId() == null)
-        {
-            String name = page.getPageName();
-            int slashx = name.lastIndexOf('/');
-
-            // Include the directory and trailing slash.
-            if (slashx > 0)
-                sb.append(name.substring(0, slashx + 1));
-        }
-
-        String url = cycle.getAbsoluteURL(sb.toString());
-
-        writer.beginEmpty("base");
-        writer.attribute("href", url);
-        writer.printRaw("<!--[if IE]></base><![endif]-->");
-
-        writer.println();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/BindingPrefixContribution.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/BindingPrefixContribution.java
deleted file mode 100644
index 0c1b321..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/BindingPrefixContribution.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.tapestry.binding.BindingFactory;
-
-/**
- * Contribution to the <code>tapestry.bindings.BindingFactories</code>
- * configuration point.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class BindingPrefixContribution extends BaseLocatable
-{
-    private String _prefix;
-
-    private BindingFactory _factory;
-
-    public BindingFactory getFactory()
-    {
-        return _factory;
-    }
-
-    public void setFactory(BindingFactory factory)
-    {
-        _factory = factory;
-    }
-
-    public String getPrefix()
-    {
-        return _prefix;
-    }
-
-    public void setPrefix(String prefix)
-    {
-        _prefix = prefix;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/BindingSourceImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/BindingSourceImpl.java
deleted file mode 100644
index 6db687e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/BindingSourceImpl.java
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.BindingFactory;
-import org.apache.tapestry.binding.BindingSource;
-import org.apache.tapestry.spec.IParameterSpecification;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Implementation of the {@link BindingSource} service.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class BindingSourceImpl implements BindingSource
-{
-    private List _contributions;
-
-    private Map _propertyMap;
-
-    /**
-     * Keyed on prefix, value is {@link BindingFactory}.
-     */
-    private Map _factoryMap = new HashMap();
-
-    public void initializeService()
-    {
-        Iterator i = _contributions.iterator();
-
-        while (i.hasNext())
-        {
-            BindingPrefixContribution c = (BindingPrefixContribution) i.next();
-
-            _factoryMap.put(c.getPrefix(), c.getFactory());
-        }
-    }
-
-    public IBinding createBinding(IComponent component, String description,
-            String reference, String defaultBindingType, Location location)
-    {
-        return createBinding(component, null, description, reference, defaultBindingType, location);
-    }
-
-    public IBinding createBinding(IComponent component, IParameterSpecification parameter, String description,
-                                  String reference, String defaultBindingType, Location location)
-    {
-        String prefix = null;
-        String path = reference;
-        BindingFactory factory = null;
-
-        int colonx = reference.indexOf(':');
-
-        if (colonx > -1)
-        {
-            String pathPrefix = reference.substring(0, colonx);
-
-            if (_factoryMap.containsKey(pathPrefix))
-            {
-                prefix = pathPrefix;
-
-                path = reference.substring(colonx + 1);
-            }
-        } else if (parameter != null && _propertyMap.containsKey(parameter.getParameterName()))
-        {
-            
-            factory = (BindingFactory) _propertyMap.get(parameter.getParameterName());
-        }
-
-        if (prefix == null)
-        {
-            prefix = defaultBindingType;
-        }
-
-        if (factory == null)
-        {
-            factory = (BindingFactory) _factoryMap.get(prefix);
-        }
-        
-        return factory.createBinding(component, description, path, location);
-    }
-
-    public void setContributions(List contributions)
-    {
-        _contributions = contributions;
-    }
-
-    public void setPropertyContributions(Map properties)
-    {
-        _propertyMap = properties;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ClassFinderImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ClassFinderImpl.java
deleted file mode 100644
index 0b0a416..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ClassFinderImpl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.services.ClassFinder;
-
-/**
- * Implemenation of service tapestry.ClassFinder.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ClassFinderImpl implements ClassFinder
-{
-    private ClassResolver _classResolver;
-
-    public Class findClass(String packageList, String className)
-    {
-        String[] packages = TapestryUtils.split(packageList);
-
-        for (int i = 0; i < packages.length; i++)
-        {
-            String fullName = packages[i].trim() + "." + className;
-
-            Class result = _classResolver.checkForClass(fullName);
-
-            if (result != null)
-                return result;
-        }
-
-        return _classResolver.checkForClass(className);
-    }
-
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ClasspathResourceFactoryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ClasspathResourceFactoryImpl.java
deleted file mode 100644
index 714c75f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ClasspathResourceFactoryImpl.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.services.ClasspathResourceFactory;
-
-/**
- * Implementation of {@link org.apache.tapestry.services.ClasspathResourceFactory}.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ClasspathResourceFactoryImpl implements ClasspathResourceFactory
-{
-    private ClassResolver _classResolver;
-
-    public ClasspathResourceFactoryImpl() {} 
-    
-    public ClasspathResourceFactoryImpl(ClassResolver resolver)
-    {
-        _classResolver = resolver;
-    }
-    
-    public ClasspathResource newResource(String path)
-    {
-        return new ClasspathResource(_classResolver, path);
-    }
-
-    public void setClassResolver(ClassResolver resolver)
-    {
-        _classResolver = resolver;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/CompiledExpression.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/CompiledExpression.java
deleted file mode 100644
index 6073d83..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/CompiledExpression.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.apache.tapestry.services.impl;
-
-import ognl.Node;
-import org.apache.hivemind.service.ClassFab;
-import org.apache.hivemind.service.MethodSignature;
-
-/**
- * Simple struct used by {@link HiveMindExpressionCompiler} to hold temporary references to
- * all of the objects involved in compiling / generating a compiled ognl expression.
- */
-public class CompiledExpression {
-
-    ClassFab _generatedClass;
-    Node _expression;
-    Object _root;
-    MethodSignature _getterMethod;
-    MethodSignature _setterMethod;
-
-    public CompiledExpression(Node expression, Object root,
-                              MethodSignature getter, MethodSignature setter)
-    {
-        _expression = expression;
-        _root = root;
-        _getterMethod = getter;
-        _setterMethod = setter;
-    }
-
-    public ClassFab getGeneratedClass()
-    {
-        return _generatedClass;
-    }
-
-    public void setGeneratedClass(ClassFab generatedClass)
-    {
-        _generatedClass = generatedClass;
-    }
-
-    public Node getExpression()
-    {
-        return _expression;
-    }
-
-    public void setExpression(Node expression)
-    {
-        _expression = expression;
-    }
-
-    public Object getRoot()
-    {
-        return _root;
-    }
-
-    public void setRoot(Object root)
-    {
-        _root = root;
-    }
-
-    public MethodSignature getGetterMethod()
-    {
-        return _getterMethod;
-    }
-
-    public void setGetterMethod(MethodSignature method)
-    {
-        _getterMethod = method;
-    }
-
-    public MethodSignature getSettermethod()
-    {
-        return _setterMethod;
-    }
-
-    public void setSetterMethod(MethodSignature method)
-    {
-        _setterMethod = method;
-    }
-
-    public String toString()
-    {
-        return "CompiledExpression[" +
-               "_generatedClass=" + _generatedClass +
-               '\n' +
-               ", _expression=" + _expression +
-               '\n' +
-               ", _root=" + _root +
-               '\n' +
-               ", _getterMethod=" + _getterMethod +
-               '\n' +
-               ", _setterMethod=" + _setterMethod +
-               '\n' +
-               ']';
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentConstructorFactoryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentConstructorFactoryImpl.java
deleted file mode 100644
index b46427c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentConstructorFactoryImpl.java
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantLock;
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.service.ClassFactory;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.enhance.EnhancedClassValidator;
-import org.apache.tapestry.enhance.EnhancementOperationImpl;
-import org.apache.tapestry.enhance.EnhancementWorker;
-import org.apache.tapestry.event.ReportStatusEvent;
-import org.apache.tapestry.event.ReportStatusListener;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.services.ComponentConstructor;
-import org.apache.tapestry.services.ComponentConstructorFactory;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Implementation of the {@link org.apache.tapestry.services.ComponentConstructorFactory} service
- * interface.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ComponentConstructorFactoryImpl implements ComponentConstructorFactory,
-                                                        ResetEventListener, ReportStatusListener
-{
-    private final ReentrantLock _lock = new ReentrantLock();
-
-    private String _serviceId;
-
-    private Log _log;
-
-    private ClassFactory _classFactory;
-
-    private ClassResolver _classResolver;
-
-    private EnhancedClassValidator _validator;
-
-    private EnhancementWorker _chain;
-
-    /**
-     * Map of {@link org.apache.tapestry.services.ComponentConstructor} keyed on
-     * {@link org.apache.tapestry.spec.IComponentSpecification}.
-     */
-
-    private Map _cachedConstructors = Collections.synchronizedMap(new HashMap());
-
-    public void resetEventDidOccur()
-    {
-        _cachedConstructors.clear();
-    }
-
-    public synchronized void reportStatus(ReportStatusEvent event)
-    {
-        event.title(_serviceId);
-
-        event.property("enhanced class count", _cachedConstructors.size());
-        event.collection("enhanced classes", _cachedConstructors.keySet());
-    }
-
-    public ComponentConstructor getComponentConstructor(IComponentSpecification specification,
-                                                        String className)
-    {
-        Defense.notNull(specification, "specification");
-
-        try
-        {
-            _lock.lockInterruptibly();
-
-            ComponentConstructor result = (ComponentConstructor) _cachedConstructors.get(specification);
-
-            if (result == null)
-            {
-                Class baseClass = _classResolver.findClass(className);
-
-                EnhancementOperationImpl eo = new EnhancementOperationImpl(_classResolver, specification, baseClass, _classFactory, _log);
-
-                // Invoking on the chain is the same as invoking on every
-                // object in the chain (because method performEnhancement() is type void).
-
-                _chain.performEnhancement(eo, specification);
-
-                result = eo.getConstructor();
-
-                // TODO: This should be optional to work around that IBM JVM bug.
-
-                _validator.validate(baseClass, result.getComponentClass(), specification);
-
-                _cachedConstructors.put(specification, result);
-            }
-
-            return result;
-
-        } catch (InterruptedException e)
-        {
-            throw new ApplicationRuntimeException(e);
-        } finally
-        {
-            _lock.unlock();
-        }
-    }
-
-    public void setClassFactory(ClassFactory classFactory)
-    {
-        _classFactory = classFactory;
-    }
-
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-
-    public void setValidator(EnhancedClassValidator validator)
-    {
-        _validator = validator;
-    }
-
-    public void setChain(EnhancementWorker chain)
-    {
-        _chain = chain;
-    }
-
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-
-    public void setServiceId(String serviceId)
-    {
-        _serviceId = serviceId;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
deleted file mode 100644
index 1a22265..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
+++ /dev/null
@@ -1,544 +0,0 @@
-// Copyright May 20, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.PoolManageable;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.*;
-import org.apache.tapestry.dojo.IWidget;
-import org.apache.tapestry.engine.DirectEventServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.html.Body;
-import org.apache.tapestry.internal.Component;
-import org.apache.tapestry.internal.event.ComponentEventProperty;
-import org.apache.tapestry.internal.event.EventBoundListener;
-import org.apache.tapestry.internal.event.IComponentEventInvoker;
-import org.apache.tapestry.services.ComponentRenderWorker;
-import org.apache.tapestry.util.ScriptUtils;
-
-import java.util.*;
-
-
-/**
- * Implementation that handles connecting events to listener
- * method invocations.
- *
- * @author jkuhnert
- */
-public class ComponentEventConnectionWorker implements ComponentRenderWorker, PoolManageable
-{
-    /** Stored in {@link IRequestCycle} with associated forms. */
-    public static final String FORM_NAME_LIST =  "org.apache.tapestry.services.impl.ComponentEventConnectionFormNames-";
-
-    // holds mapped event listener info
-    private IComponentEventInvoker _invoker;
-
-    // generates links for scripts
-    private IEngineService _eventEngine;
-
-    // handles resolving and loading different component event 
-    // connection script types
-    private IScriptSource _scriptSource;
-
-    // script path references
-    private String _componentScript;
-    private String _widgetScript;
-    private String _elementScript;
-
-    // resolves classpath relative resources
-    private ClassResolver _resolver;
-
-    // wrappers around resolved script templates
-    private ClasspathResource _componentResource;
-    private ClasspathResource _widgetResource;
-    private ClasspathResource _elementResource;
-
-    /**
-     * For event connections referencing forms that have not been rendered yet.
-     */
-    private Map _deferredFormConnections = new HashMap(24);
-
-    /**
-     * Used to store deferred form connection information, but most importantly is used
-     * to provide unique equals/hashcode semantics.
-     */
-    class DeferredFormConnection {
-
-        String _formId;
-        Map _scriptParms;
-        Boolean _async;
-        Boolean _validate;
-        String _uniqueHash;
-
-        public DeferredFormConnection(String formId, Map scriptParms, Boolean async,
-                                      Boolean validate, String uniqueHash)
-        {
-            _formId = formId;
-            _scriptParms = scriptParms;
-            _async = async;
-            _validate = validate;
-            _uniqueHash = uniqueHash;
-        }
-
-        public boolean equals(Object o)
-        {
-            if (this == o) return true;
-            if (o == null || getClass() != o.getClass()) return false;
-
-            DeferredFormConnection that = (DeferredFormConnection) o;
-
-            if (_uniqueHash != null ? !_uniqueHash.equals(that._uniqueHash) : that._uniqueHash != null) return false;
-
-            return true;
-        }
-
-        public int hashCode()
-        {
-            return (_uniqueHash != null ? _uniqueHash.hashCode() : 0);
-        }
-    }
-
-    public void activateService()
-    {
-        _deferredFormConnections.clear();
-    }
-
-    public void passivateService()
-    {
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void renderComponent(IRequestCycle cycle, IComponent component)
-    {
-        if (cycle.isRewinding())
-            return;
-
-        if (Component.class.isInstance(component) && !((Component)component).hasEvents() && !IForm.class.isInstance(component))
-            return;
-
-        if (TapestryUtils.getOptionalPageRenderSupport(cycle) == null)
-            return;
-
-        // Don't render fields being pre-rendered, otherwise we'll render twice
-        IComponent field = (IComponent)cycle.getAttribute(TapestryUtils.FIELD_PRERENDER);
-        if (field != null && field == component)
-            return;
-
-        linkComponentEvents(cycle, component);
-
-        linkElementEvents(cycle, component);
-
-        if (IForm.class.isInstance(component))
-            mapFormNames(cycle, (IForm)component);
-
-        if (isDeferredForm(component))
-            linkDeferredForm(cycle, (IForm)component);
-    }
-
-    void linkComponentEvents(IRequestCycle cycle, IComponent component)
-    {
-        ComponentEventProperty[] props = _invoker.getEventPropertyListeners(component.getExtendedId());
-        if (props == null)
-            return;
-
-        for (int i=0; i < props.length; i++) {
-
-            String clientId = component.getClientId();
-
-            Map parms = new HashMap();
-            parms.put("clientId", clientId);
-            parms.put("component", component);
-
-            Object[][] events = getEvents(props[i], clientId);
-            Object[][] formEvents = filterFormEvents(props[i], parms, cycle);
-
-            if (events.length < 1 && formEvents.length < 1)
-                continue;
-
-            DirectEventServiceParameter dsp =
-              new DirectEventServiceParameter((IDirectEvent)component, new Object[] {}, new String[] {}, false);
-
-            parms.put("url", _eventEngine.getLink(false, dsp).getURL());
-            parms.put("events", events);
-            parms.put("formEvents", formEvents);
-
-            PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, component);
-            Resource resource = getScript(component);
-
-            _scriptSource.getScript(resource).execute(component, cycle, prs, parms);
-        }
-    }
-
-    void linkElementEvents(IRequestCycle cycle, IComponent component)
-    {
-        if (!component.getSpecification().hasElementEvents())
-            return;
-
-        DirectEventServiceParameter dsp =
-          new DirectEventServiceParameter((IDirectEvent)component, new Object[] {}, new String[] {}, false);
-
-        String url = _eventEngine.getLink(false, dsp).getURL();
-
-        PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, component);
-        Resource resource = getElementScript();
-
-        Map elements = component.getSpecification().getElementEvents();
-        Iterator keys = elements.keySet().iterator();
-
-        // build our list of targets / events
-        while (keys.hasNext()) {
-
-            Map parms = new HashMap();
-
-            String target = (String)keys.next();
-
-            ComponentEventProperty prop = (ComponentEventProperty)elements.get(target);
-
-            parms.put("component", component);
-            parms.put("target", target);
-            parms.put("url", url);
-            parms.put("events", getEvents(prop, target));
-            parms.put("formEvents", filterFormEvents(prop, parms, cycle));
-
-            _scriptSource.getScript(resource).execute(component, cycle, prs, parms);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void renderBody(IRequestCycle cycle, Body component)
-    {
-        if (cycle.isRewinding())
-            return;
-
-        renderComponent(cycle, component);
-
-        // just in case
-        _deferredFormConnections.clear();
-    }
-
-    void mapFormNames(IRequestCycle cycle, IForm form)
-    {
-        List names = (List)cycle.getAttribute(FORM_NAME_LIST + form.getExtendedId());
-
-        if (names == null) {
-            names = new ArrayList();
-
-            cycle.setAttribute(FORM_NAME_LIST + form.getExtendedId(), names);
-        }
-
-        names.add(form.getName());
-    }
-
-    void linkDeferredForm(IRequestCycle cycle, IForm form)
-    {
-        List deferred = (List)_deferredFormConnections.remove(form.getExtendedId());
-
-        for (int i=0; i < deferred.size(); i++)
-        {
-            DeferredFormConnection fConn = (DeferredFormConnection)deferred.get(i);
-            Map scriptParms = fConn._scriptParms;
-
-            // don't want any events accidently connected again
-            scriptParms.remove("events");
-
-            IComponent component = (IComponent)scriptParms.get("component");
-
-            // fire off element based events first
-
-            linkElementEvents(cycle, component);
-
-            ComponentEventProperty[] props = _invoker.getEventPropertyListeners(component.getExtendedId());
-            if (props == null)
-                continue;
-
-            for (int e=0; e < props.length; e++) {
-
-                Object[][] formEvents = buildFormEvents(cycle, form.getExtendedId(),
-                                                        props[e].getFormEvents(), fConn._async,
-                                                        fConn._validate, fConn._uniqueHash);
-
-                scriptParms.put("formEvents", formEvents);
-
-                // execute script
-
-                PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, component);
-                Resource resource = getScript(component);
-
-                _scriptSource.getScript(resource).execute(form, cycle, prs, scriptParms);
-            }
-        }
-    }
-
-    /**
-     * Generates a two dimensional array containing the event name in the first
-     * index and a unique hashcode for the event binding in the second.
-     *
-     * @param prop The component event properties object the events are managed in.
-     * @return A two dimensional array containing all events, or empty array if none exist.
-     */
-    Object[][] getEvents(ComponentEventProperty prop, String clientId)
-    {
-        Set events = prop.getEvents();
-        List ret = new ArrayList();
-
-        Iterator it = events.iterator();
-        while (it.hasNext())
-        {
-            String event = (String)it.next();
-
-            int hash = 0;
-            List listeners = prop.getEventListeners(event);
-
-            for (int i=0; i < listeners.size(); i++)
-                hash += listeners.get(i).hashCode();
-
-            ret.add(new Object[]{ event, ScriptUtils.functionHash(event + hash + clientId) });
-        }
-
-        return (Object[][])ret.toArray(new Object[ret.size()][2]);
-    }
-
-    Object[][] buildFormEvents(IRequestCycle cycle, String formId, Set events,
-                               Boolean async, Boolean validate, Object uniqueHash)
-    {
-        List formNames = (List)cycle.getAttribute(FORM_NAME_LIST + formId);
-        List retval = new ArrayList();
-
-        Iterator it = events.iterator();
-
-        while (it.hasNext())
-        {
-            String event = (String)it.next();
-
-            retval.add(new Object[]{event, formNames, async, validate,
-                                    ScriptUtils.functionHash(new String(uniqueHash + event)) });
-        }
-
-        return (Object[][])retval.toArray(new Object[retval.size()][5]);
-    }
-
-    Resource getScript(IComponent component)
-    {
-        if (IWidget.class.isInstance(component)) {
-
-            if (_widgetResource == null)
-                _widgetResource = new ClasspathResource(_resolver, _widgetScript);
-
-            return _widgetResource;
-        }
-
-        if (_componentResource == null)
-            _componentResource = new ClasspathResource(_resolver, _componentScript);
-
-        return _componentResource;
-    }
-
-    Resource getElementScript()
-    {
-        if (_elementResource == null)
-            _elementResource = new ClasspathResource(_resolver, _elementScript);
-
-        return _elementResource;
-    }
-
-    boolean isDeferredForm(IComponent component)
-    {
-        if (IForm.class.isInstance(component)
-            && _deferredFormConnections.get(((IForm)component).getExtendedId()) != null)
-            return true;
-
-        return false;
-    }
-
-    /**
-     * For each form event attempts to find a rendered form name list that corresponds
-     * to the actual client ids that the form can be connected to. If the form hasn't been
-     * rendered yet the events will be filtered out and deferred for execution <i>after</i>
-     * the form has rendererd.
-     *
-     * @param prop
-     *          The configured event properties.
-     * @param scriptParms
-     *          The parameters to eventually be passed in to the javascript tempate.
-     * @param cycle
-     *          The current cycle.
-     *
-     * @return A set of events that can be connected now because the form has already rendered.
-     */
-    Object[][] filterFormEvents(ComponentEventProperty prop, Map scriptParms, IRequestCycle cycle)
-    {
-        Set events = prop.getFormEvents();
-
-        if (events.size() < 1)
-            return new Object[0][0];
-
-        List retval = new ArrayList();
-
-        Iterator it = events.iterator();
-        while (it.hasNext())
-        {
-            String event = (String)it.next();
-            Iterator lit = prop.getFormEventListeners(event).iterator();
-
-            while (lit.hasNext())
-            {
-                EventBoundListener listener = (EventBoundListener)lit.next();
-
-                String formId = listener.getFormId();
-                List formNames = (List)cycle.getAttribute(FORM_NAME_LIST + formId);
-
-                // defer connection until form is rendered
-                if (formNames == null)
-                {
-                    deferFormConnection(formId, scriptParms,
-                                        listener.isAsync(),
-                                        listener.isValidateForm(),
-                                        ScriptUtils.functionHash(listener.hashCode() + (String) scriptParms.get("clientId")));
-                    
-                    /*deferFormConnection(formId, scriptParms,
-                                        listener.isAsync(),
-                                        listener.isValidateForm(),
-                                        ScriptUtils.functionHash(listener.hashCode() + (String) scriptParms.get("clientId")));*/
-
-                    // re-looping over the same property -> event listener list would
-                    // result in duplicate bindings so break out 
-                    break;
-                }
-
-                // form has been rendered so go ahead
-                retval.add(new Object[] {
-                  event, formNames,
-                  Boolean.valueOf(listener.isAsync()),
-                  Boolean.valueOf(listener.isValidateForm()),
-                  ScriptUtils.functionHash(listener)
-                });
-            }
-        }
-
-        return (Object[][])retval.toArray(new Object[retval.size()][5]);
-    }
-
-    /**
-     * Temporarily stores the data needed to perform script evaluations that
-     * connect a component event to submitting a particular form that hasn't
-     * been rendered yet. We can't reliably connect to a form until its name has
-     * been set by a render, which could happen multiple times if it's in a list.
-     *
-     * <p>
-     * The idea here is that when the form actually ~is~ rendered we will look for 
-     * any pending deferred operations and run them while also clearing out our
-     * deferred list.
-     * </p>
-     *
-     * @param formId The form to defer event connection for.
-     * @param scriptParms The initial map of parameters for the connection @Script component.
-     * @param async Whether or not the action taken should be asynchronous.
-     * @param validate Whether or not the form should have client side validation run befor submitting.
-     * @param uniqueHash Represents a hashcode() value that will help make client side function name
-     *                  unique.
-     */
-    void deferFormConnection(String formId, Map scriptParms,
-                             boolean async, boolean validate, String uniqueHash)
-    {
-        List deferred = (List)_deferredFormConnections.get(formId);
-        if (deferred == null)
-        {
-            deferred = new ArrayList();
-            _deferredFormConnections.put(formId, deferred);
-        }
-
-        DeferredFormConnection connection = new DeferredFormConnection(formId, scriptParms, Boolean.valueOf(async),
-                                                                       Boolean.valueOf(validate), uniqueHash);
-
-        if (!deferred.contains(connection))
-            deferred.add(connection);
-    }
-
-    // for testing
-    Map getDefferedFormConnections()
-    {
-        return _deferredFormConnections;
-    }
-
-    /**
-     * Sets the invoker to use/manage event connections.
-     * @param invoker Manages component event invocations.
-     */
-    public void setEventInvoker(IComponentEventInvoker invoker)
-    {
-        _invoker = invoker;
-    }
-
-    /**
-     * Sets the engine service that will be used to construct callback
-     * URL references to invoke the specified components event listener.
-     *
-     * @param eventEngine Engine used to create client side urls for updating things async.
-     */
-    public void setEventEngine(IEngineService eventEngine)
-    {
-        _eventEngine = eventEngine;
-    }
-
-    /**
-     * The javascript that will be used to connect the component
-     * to its configured events. (if any)
-     * @param script The component script functions.
-     */
-    public void setComponentScript(String script)
-    {
-        _componentScript = script;
-    }
-
-    /**
-     * The javascript that will be used to connect the widget component
-     * to its configured events. (if any)
-     * @param script The dojo widget based script.
-     */
-    public void setWidgetScript(String script)
-    {
-        _widgetScript = script;
-    }
-
-    /**
-     * The javascript that connects html elements to direct
-     * listener methods.
-     * @param script Event element target scripts.
-     */
-    public void setElementScript(String script)
-    {
-        _elementScript = script;
-    }
-
-    /**
-     * The service that parses script files.
-     * @param scriptSource Service.
-     */
-    public void setScriptSource(IScriptSource scriptSource)
-    {
-        _scriptSource = scriptSource;
-    }
-
-    public void setClassResolver(ClassResolver resolver)
-    {
-        _resolver = resolver;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentMessages.java
deleted file mode 100644
index c103fdb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentMessages.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.Locale;
-import java.util.Properties;
-
-import org.apache.hivemind.impl.AbstractMessages;
-import org.apache.hivemind.util.Defense;
-
-/**
- * Implementation of {@link org.apache.hivemind.Messages}. This is basically a wrapper around an
- * instance of {@link Properties}. This ensures that the properties are, in fact, read-only (which
- * ensures that they don't have to be synchronized).
- * 
- * @author Howard Lewis Ship
- * @since 2.0.4
- */
-
-public class ComponentMessages extends AbstractMessages
-{
-    private final Properties _properties;
-
-    private final Locale _locale;
-
-    public ComponentMessages(Locale locale, Properties properties)
-    {
-        Defense.notNull(locale, "locale");
-        Defense.notNull(properties, "properties");
-
-        _locale = locale;
-        _properties = properties;
-    }
-
-    protected String findMessage(String key)
-    {
-        return _properties.getProperty(key);
-    }
-
-    protected Locale getLocale()
-    {
-        return _locale;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentMessagesSourceImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentMessagesSourceImpl.java
deleted file mode 100644
index 1bb1962..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentMessagesSourceImpl.java
+++ /dev/null
@@ -1,442 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
-import org.apache.commons.io.IOUtils;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Messages;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.LocalizedNameGenerator;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.resolver.IComponentResourceResolver;
-import org.apache.tapestry.services.ClasspathResourceFactory;
-import org.apache.tapestry.services.ComponentMessagesSource;
-import org.apache.tapestry.services.ComponentPropertySource;
-import org.apache.tapestry.util.text.LocalizedProperties;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.*;
-
-/**
- * Service used to access localized properties for a component.
- *
- * @author Howard Lewis Ship
- * @since 2.0.4
- */
-
-public class ComponentMessagesSourceImpl implements ComponentMessagesSource, ResetEventListener
-{
-    /**
-     * The name of the component/application/etc property that will be used to
-     * determine the encoding to use when loading the messages.
-     */
-
-    public static final String MESSAGES_ENCODING_PROPERTY_NAME = "org.apache.tapestry.messages-encoding";
-
-    /**
-     * The alternate file name of a namespace properties file to lookup. Can be used to override the default
-     * behaviour which is to look for a &lt;namespace name&gt;.properties file to find localized/global properties.
-     */
-
-    public static final String NAMESPACE_PROPERTIES_NAME = "org.apache.tapestry.namespace-properties-name";
-
-    private static final String SUFFIX = ".properties";
-
-    private Properties _emptyProperties = new Properties();
-
-    /**
-     * Map of Maps. The outer map is keyed on component specification location
-     * (a{@link Resource}).  This inner map is keyed on locale and the value is
-     * a {@link Properties}.
-     */
-
-    private Map _componentCache = new ConcurrentHashMap();
-
-    private ComponentPropertySource _componentPropertySource;
-
-    /**
-     * For locating resources on the classpath as well as context path.
-     */
-    private ClasspathResourceFactory _classpathResourceFactory;
-
-    private IComponentResourceResolver _resourceResolver;
-
-    /**
-     * Returns an instance of {@link Properties} containing the properly
-     * localized messages for the component, in the {@link Locale} identified by
-     * the component's containing page.
-     *
-     * @param component
-     *          The component to get properties for.
-     *
-     * @return A new {@link Properties} instance representing the localized properties for
-     *          the specified component.
-     */
-
-    protected Properties getLocalizedProperties(IComponent component)
-    {
-        Defense.notNull(component, "component");
-
-        Resource specificationLocation = component.getSpecification().getSpecificationLocation();
-
-        Locale locale = component.getPage().getLocale();
-
-        Map propertiesMap = findPropertiesMapForResource(specificationLocation);
-
-        Properties result = (Properties) propertiesMap.get(locale);
-
-        if (result == null)
-        {
-            // Not found, create it now.
-
-            result = assembleComponentProperties(component, specificationLocation,
-                                                 propertiesMap, locale);
-
-            propertiesMap.put(locale, result);
-        }
-
-        return result;
-    }
-
-    private Map findPropertiesMapForResource(Resource resource)
-    {
-        Map result = (Map) _componentCache.get(resource);
-
-        if (result == null)
-        {
-            result = new HashMap();
-            
-            _componentCache.put(resource, result);
-        }
-
-        return result;
-    }
-
-    private Properties getNamespaceProperties(IComponent component, Locale locale)
-    {
-        INamespace namespace = component.getNamespace();
-
-        Resource namespaceLocation = namespace.getSpecificationLocation();
-
-        Map propertiesMap = findPropertiesMapForResource(namespaceLocation);
-
-        Properties result = (Properties) propertiesMap.get(locale);
-
-        if (result == null)
-        {
-            result = new Properties();
-
-            // recurse through parent properties
-            
-            List spaceList = new ArrayList();
-            spaceList.add(namespace);
-
-            INamespace parent = namespace;
-            while (parent.getParentNamespace() != null)
-            {
-                parent = parent.getParentNamespace();
-
-                spaceList.add(parent);
-            }
-
-            // reverse it so top most namespace comes first
-
-            for (int i=spaceList.size() - 1; i > -1; i--)
-            {
-                INamespace space = (INamespace)spaceList.get(i);
-
-                result.putAll(assembleNamespaceProperties(space, findPropertiesMapForResource(space.getSpecificationLocation()), locale));
-            }
-
-            propertiesMap.put(locale, result);
-        }
-
-        return result;
-    }
-
-    private Properties assembleComponentProperties(IComponent component, Resource baseResourceLocation,
-                                                   Map propertiesMap, Locale locale)
-    {
-        List localizations =  findLocalizationsForResource(component, baseResourceLocation, locale,
-                                                           component.getSpecification().getProperty(NAMESPACE_PROPERTIES_NAME));
-
-        Properties parent = null;
-        Properties assembledProperties = null;
-
-        Iterator i = localizations.iterator();
-
-        while(i.hasNext())
-        {
-            ResourceLocalization rl = (ResourceLocalization) i.next();
-            Locale l = rl.getLocale();
-
-            // Retrieve namespace properties for current locale (and parent
-            // locales)
-
-            Properties namespaceProperties = getNamespaceProperties(component, l);
-
-            // Use the namespace properties as default for assembled properties
-
-            assembledProperties = new Properties(namespaceProperties);
-
-            // Read localized properties for component
-            
-            Properties properties = readComponentProperties(component, l, rl.getResource(), null);
-
-            // Override parent properties with current locale
-
-            if (parent != null)
-            {
-                if (properties != null)
-                    parent.putAll(properties);
-            }
-            else
-                parent = properties;
-
-            // Add to assembled properties
-            if (parent != null)
-                assembledProperties.putAll(parent);
-
-            // Save result in cache
-            propertiesMap.put(l, assembledProperties);
-        }
-
-        if (assembledProperties == null)
-            assembledProperties = new Properties();
-
-        return assembledProperties;
-    }
-
-    private Properties assembleNamespaceProperties(INamespace namespace, Map propertiesMap, Locale locale)
-    {
-        List localizations = findLocalizationsForResource(namespace.getSpecificationLocation(), locale,
-                                                          namespace.getPropertyValue(NAMESPACE_PROPERTIES_NAME));
-        
-        // Build them back up in reverse order.
-
-        Properties parent = _emptyProperties;
-
-        Iterator i = localizations.iterator();
-
-        while(i.hasNext())
-        {
-            ResourceLocalization rl = (ResourceLocalization) i.next();
-            
-            Locale l = rl.getLocale();
-
-            Properties properties = (Properties) propertiesMap.get(l);
-
-            if (properties == null)
-            {
-                properties = readNamespaceProperties(namespace, l, rl.getResource(), parent);
-
-                propertiesMap.put(l, properties);
-            }
-
-            parent = properties;
-        }
-
-        return parent;
-
-    }
-
-    /**
-     * Finds the localizations of the provided resource. Returns a List of
-     * {@link ResourceLocalization}(each pairing a locale with a localized
-     * resource). The list is ordered from most general (i.e., "foo.properties")
-     * to most specific (i.e., "foo_en_US_yokel.properties").
-     */
-
-    private List findLocalizationsForResource(Resource resource, Locale locale, String alternateName)
-    {
-        List result = new ArrayList();
-
-        String baseName = null;
-        if (alternateName != null) {
-
-            baseName = alternateName.replace('.', '/');
-        } else {
-
-            baseName = extractBaseName(resource);
-        }
-
-        LocalizedNameGenerator g = new LocalizedNameGenerator(baseName, locale, SUFFIX);
-
-        while(g.more())
-        {
-            String localizedName = g.next();
-            Locale l = g.getCurrentLocale();
-
-            Resource localizedResource = resource.getRelativeResource(localizedName);
-
-            if (localizedResource.getResourceURL() == null)
-            {
-                localizedResource = _classpathResourceFactory.newResource(baseName + SUFFIX);
-            }
-
-            result.add(new ResourceLocalization(l, localizedResource));
-        }
-
-        Collections.reverse(result);
-
-        return result;
-    }
-
-    private List findLocalizationsForResource(IComponent component, Resource resource, Locale locale, String alternateName)
-    {
-        List result = new ArrayList();
-
-        String baseName = null;
-        if (alternateName != null) {
-
-            baseName = alternateName.replace('.', '/');
-        } else {
-
-            baseName = extractBaseName(resource);
-        }
-
-        LocalizedNameGenerator g = new LocalizedNameGenerator(baseName, locale, "");
-
-        while(g.more())
-        {
-            String localizedName = g.next();
-            Locale l = g.getCurrentLocale();
-
-            Resource localizedResource = _resourceResolver.findComponentResource(component, null, localizedName, SUFFIX, null);
-            
-            if (localizedResource == null)
-                continue;
-
-            result.add(new ResourceLocalization(l, localizedResource));
-        }
-
-        Collections.reverse(result);
-
-        return result;
-    }
-
-    private String extractBaseName(Resource baseResourceLocation)
-    {
-        String fileName = baseResourceLocation.getName();
-        int dotx = fileName.lastIndexOf('.');
-
-        return dotx > -1 ? fileName.substring(0, dotx) : fileName;
-    }
-
-    private Properties readComponentProperties(IComponent component,
-                                               Locale locale, Resource propertiesResource, Properties parent)
-    {
-        String encoding = getComponentMessagesEncoding(component, locale);
-
-        return readPropertiesResource(propertiesResource.getResourceURL(), encoding, parent);
-    }
-
-    private Properties readNamespaceProperties(INamespace namespace,
-                                               Locale locale, Resource propertiesResource, Properties parent)
-    {
-        String encoding = getNamespaceMessagesEncoding(namespace, locale);
-
-        return readPropertiesResource(propertiesResource.getResourceURL(), encoding, parent);
-    }
-
-    private Properties readPropertiesResource(URL resourceURL, String encoding, Properties parent)
-    {
-        if (resourceURL == null)
-            return parent;
-
-        Properties result = new Properties(parent);
-
-        LocalizedProperties wrapper = new LocalizedProperties(result);
-
-        InputStream input = null;
-
-        try
-        {
-            input = new BufferedInputStream(resourceURL.openStream());
-
-            if (encoding == null)
-                wrapper.load(input);
-            else
-                wrapper.load(input, encoding);
-
-            input.close();
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.unableToLoadProperties(resourceURL, ex), ex);
-        }
-        finally
-        {
-            IOUtils.closeQuietly(input);
-        }
-
-        return result;
-    }
-
-    /**
-     * Clears the cache of read properties files.
-     */
-
-    public void resetEventDidOccur()
-    {
-        _componentCache.clear();
-    }
-
-    public Messages getMessages(IComponent component)
-    {
-        return new ComponentMessages(component.getPage().getLocale(),
-                                     getLocalizedProperties(component));
-    }
-
-    private String getComponentMessagesEncoding(IComponent component, Locale locale)
-    {
-        String encoding = _componentPropertySource.getLocalizedComponentProperty(component, locale,
-                                                                                 MESSAGES_ENCODING_PROPERTY_NAME);
-
-        if (encoding == null)
-            encoding = _componentPropertySource.
-              getLocalizedComponentProperty(component, locale, TemplateSourceImpl.TEMPLATE_ENCODING_PROPERTY_NAME);
-
-        return encoding;
-    }
-
-    private String getNamespaceMessagesEncoding(INamespace namespace, Locale locale)
-    {
-        return _componentPropertySource.
-          getLocalizedNamespaceProperty(namespace, locale, MESSAGES_ENCODING_PROPERTY_NAME);
-    }
-
-    public void setComponentPropertySource(ComponentPropertySource componentPropertySource)
-    {
-        _componentPropertySource = componentPropertySource;
-    }
-
-    public void setClasspathResourceFactory(ClasspathResourceFactory factory)
-    {
-        _classpathResourceFactory = factory;
-    }
-
-    public void setComponentResourceResolver(IComponentResourceResolver resourceResolver)
-    {
-        _resourceResolver = resourceResolver;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentPropertySourceImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentPropertySourceImpl.java
deleted file mode 100644
index e3fbad5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentPropertySourceImpl.java
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.lib.chain.ChainBuilder;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.services.ComponentPropertySource;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.PropertyHolderPropertySource;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * Implementation of tapestry.props.ComponentPropertySource.
- * <p>
- * TODO: Figure out a testing strategy for this beast!
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ComponentPropertySourceImpl implements ComponentPropertySource, ResetEventListener
-{
-    private IPropertySource _globalProperties;
-
-    private ChainBuilder _chainBuilder;
-
-    private Map _componentSources = new ConcurrentHashMap();
-
-    private Map _localizedComponentSources = new ConcurrentHashMap();
-
-    private Map _namespaceSources = new ConcurrentHashMap();
-
-    private Map _localizedNamespaceSources = new ConcurrentHashMap();
-
-    public void resetEventDidOccur()
-    {
-        _componentSources.clear();
-        _localizedComponentSources.clear();
-        _namespaceSources.clear();
-        _localizedNamespaceSources.clear();
-    }
-
-    private IPropertySource getSourceForNamespace(INamespace namespace)
-    {
-        Resource key = namespace.getSpecificationLocation();
-
-        IPropertySource result = (IPropertySource) _namespaceSources.get(key);
-
-        if (result == null)
-        {
-            result = createSourceForNamespace(namespace);
-
-            _namespaceSources.put(key, result);
-        }
-
-        return result;
-    }
-
-    private IPropertySource getSourceForComponent(IComponent component)
-    {
-        Resource key = component.getSpecification().getSpecificationLocation();
-
-        IPropertySource result = (IPropertySource) _componentSources.get(key);
-
-        if (result == null)
-        {
-            result = createSourceForComponent(component);
-            _componentSources.put(key, result);
-        }
-
-        return result;
-    }
-
-    private LocalizedPropertySource getLocalizedSourceForComponent(IComponent component)
-    {
-        Resource key = component.getSpecification().getSpecificationLocation();
-
-        LocalizedPropertySource result = (LocalizedPropertySource) _localizedComponentSources.get(key);
-
-        if (result == null)
-        {
-            result = new LocalizedPropertySource(getSourceForComponent(component));
-
-            _localizedComponentSources.put(key, result);
-        }
-
-        return result;
-    }
-
-    private LocalizedPropertySource getLocalizedSourceForNamespace(INamespace namespace)
-    {
-        Resource key = namespace.getSpecificationLocation();
-
-        LocalizedPropertySource result = (LocalizedPropertySource) _localizedNamespaceSources.get(key);
-
-        if (result == null)
-        {
-            result = new LocalizedPropertySource(getSourceForNamespace(namespace));
-
-            _localizedNamespaceSources.put(key, result);
-        }
-
-        return result;
-    }
-
-    private IPropertySource createSourceForComponent(IComponent component)
-    {
-        IComponentSpecification specification = component.getSpecification();
-
-        List sources = new ArrayList();
-
-        sources.add(new PropertyHolderPropertySource(specification));
-        sources.add(getSourceForNamespace(component.getNamespace()));
-
-        return (IPropertySource) _chainBuilder.buildImplementation(
-          IPropertySource.class,
-          sources,
-          ImplMessages.componentPropertySourceDescription(specification));
-    }
-
-    private IPropertySource createSourceForNamespace(INamespace namespace)
-    {
-        List sources = new ArrayList();
-
-        sources.add(new PropertyHolderPropertySource(namespace.getSpecification()));
-        sources.add(_globalProperties);
-
-        return (IPropertySource) _chainBuilder.buildImplementation(IPropertySource.class,
-                                                                   sources,
-                                                                   ImplMessages.namespacePropertySourceDescription(namespace));
-    }
-
-    public String getComponentProperty(IComponent component, String propertyName)
-    {
-        return getSourceForComponent(component).getPropertyValue(propertyName);
-    }
-
-    public String getLocalizedComponentProperty(IComponent component, Locale locale, String propertyName)
-    {
-        return getLocalizedSourceForComponent(component).getPropertyValue(propertyName, locale);
-    }
-
-    public String getNamespaceProperty(INamespace namespace, String propertyName)
-    {
-        return getSourceForNamespace(namespace).getPropertyValue(propertyName);
-    }
-
-    public String getLocalizedNamespaceProperty(INamespace namespace, Locale locale, String propertyName)
-    {
-        return getLocalizedSourceForNamespace(namespace).getPropertyValue(propertyName, locale);
-    }
-
-    public void setChainBuilder(ChainBuilder chainBuilder)
-    {
-        _chainBuilder = chainBuilder;
-    }
-
-    public void setGlobalProperties(IPropertySource globalProperties)
-    {
-        _globalProperties = globalProperties;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderImpl.java
deleted file mode 100644
index 8448553..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderImpl.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.commons.logging.Log;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.ITemplateComponent;
-import org.apache.tapestry.binding.BindingSource;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.parse.ComponentTemplate;
-import org.apache.tapestry.services.ComponentTemplateLoader;
-import org.apache.tapestry.services.TemplateSource;
-
-/**
- * Utility service, <code>tapestry.page.ComponentTemplateLoader</code>, which will process the
- * component's {@link org.apache.tapestry.parse.ComponentTemplate template}, which involves working
- * through the nested structure of the template and hooking the various static template blocks and
- * components together using {@link org.apache.tapestry.IComponent#addBody(IRender)}and
- * {@link org.apache.tapestry.ITemplateComponent#addOuter(IRender)}.
- * <p>
- * Because this service must be reentrant, it acts as a factory for a
- * {@link org.apache.tapestry.services.impl.ComponentTemplateLoaderLogic}that is created (and
- * discarded) for each component whose template is loaded.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class ComponentTemplateLoaderImpl implements ComponentTemplateLoader
-{
-    private Log _log;
-
-    private IPageLoader _pageLoader;
-
-    private TemplateSource _templateSource;
-
-    /** @since 4.0 */
-
-    private BindingSource _bindingSource;
-
-    public void loadTemplate(IRequestCycle requestCycle, ITemplateComponent loadComponent)
-    {
-        ComponentTemplate template = _templateSource.getTemplate(requestCycle, loadComponent);
-
-        ComponentTemplateLoaderLogic logic = new ComponentTemplateLoaderLogic(_log, _pageLoader, _bindingSource);
-
-        logic.loadTemplate(requestCycle, loadComponent, template);
-    }
-
-    /** @since 4.0 */
-
-    public void setPageLoader(IPageLoader pageLoader)
-    {
-        _pageLoader = pageLoader;
-    }
-
-    /** @since 4.0 */
-
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-
-    /**
-     * @since 4.0
-     */
-
-    public void setTemplateSource(TemplateSource templateSource)
-    {
-        _templateSource = templateSource;
-    }
-
-    /**
-     * @since 4.0
-     */
-
-    public void setBindingSource(BindingSource bindingSource)
-    {
-        _bindingSource = bindingSource;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderLogic.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderLogic.java
deleted file mode 100644
index 2543060..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentTemplateLoaderLogic.java
+++ /dev/null
@@ -1,419 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.*;
-import org.apache.tapestry.binding.BindingConstants;
-import org.apache.tapestry.binding.BindingSource;
-import org.apache.tapestry.binding.LiteralBinding;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.parse.*;
-import org.apache.tapestry.services.TemplateSource;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-import org.apache.tapestry.spec.IParameterSpecification;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Contains the logic from {@link org.apache.tapestry.services.impl.ComponentTemplateLoaderImpl},
- * which creates one of these instances to process the request. This is necessary because the
- * service must be re-entrant (because templates can contain components that have templates).
- *
- */
-public class ComponentTemplateLoaderLogic
-{
-    private Log _log;
-
-    private IPageLoader _pageLoader;
-
-    private IRequestCycle _requestCycle;
-
-    private ITemplateComponent _loadComponent;
-
-    private BindingSource _bindingSource;
-
-    private IComponent[] _stack;
-
-    private int _stackx;
-
-    private IComponent _activeComponent = null;
-
-    private Set _seenIds = new HashSet();
-
-    public ComponentTemplateLoaderLogic(Log log, IPageLoader pageLoader, BindingSource bindingSource)
-    {
-        _log = log;
-        _pageLoader = pageLoader;
-        _bindingSource = bindingSource;
-    }
-
-    public void loadTemplate(IRequestCycle requestCycle, ITemplateComponent loadComponent,
-                             ComponentTemplate template)
-    {
-        _requestCycle = requestCycle;
-        _loadComponent = loadComponent;
-
-        process(template);
-    }
-
-    private void process(ComponentTemplate template)
-    {
-        int count = template.getTokenCount();
-
-        _stack = new IComponent[count];
-
-        for (int i = 0; i < count; i++)
-        {
-            TemplateToken token = template.getToken(i);
-
-            TokenType type = token.getType();
-
-            if (type == TokenType.TEXT)
-            {
-                process((TextToken) token);
-                continue;
-            }
-
-            if (type == TokenType.OPEN)
-            {
-                process((OpenToken) token);
-                continue;
-            }
-
-            if (type == TokenType.CLOSE)
-            {
-                process((CloseToken) token);
-                continue;
-            }
-
-            if (type == TokenType.LOCALIZATION)
-            {
-                process((LocalizationToken) token);
-            }
-        }
-
-        // This is also pretty much unreachable, and the message is kind of out
-        // of date, too.
-
-        if (_stackx != 0)
-            throw new ApplicationRuntimeException(Tapestry.getMessage("BaseComponent.unbalance-open-tags"),
-                                                  _loadComponent, null, null);
-
-        checkAllComponentsReferenced();
-    }
-
-    /**
-     * Adds the token (which implements {@link IRender}) to the active component (using
-     * {@link IComponent#addBody(IRender)}), or to this component
-     * {@link org.apache.tapestry.BaseComponent#addOuter(IRender)}.
-     * <p>
-     * A check is made that the active component allows a body.
-     */
-
-    private void process(TextToken token)
-    {
-        if (_activeComponent == null)
-        {
-            _loadComponent.addOuter(token);
-            return;
-        }
-
-        if (!_activeComponent.getSpecification().getAllowBody())
-            throw createBodylessComponentException(_activeComponent);
-
-        _activeComponent.addBody(token);
-    }
-
-    private void process(OpenToken token)
-    {
-        String id = token.getId();
-        IComponent component = null;
-        String componentType = token.getComponentType();
-
-        if (componentType == null)
-            component = getEmbeddedComponent(id);
-        else
-        {
-            checkForDuplicateId(id, token.getLocation());
-
-            component = createImplicitComponent(id, componentType, token.getLocation());
-        }
-
-        // Make sure the template contains each component only once.
-
-        if (_seenIds.contains(id))
-            throw new ApplicationRuntimeException(ImplMessages.multipleComponentReferences(_loadComponent,id),
-                                                  _loadComponent, token.getLocation(), null);
-
-        _seenIds.add(id);
-
-        if (_activeComponent == null)
-            _loadComponent.addOuter(component);
-        else
-        {
-            // Note: this code may no longer be reachable (because the
-            // template parser does this check first).
-
-            if (!_activeComponent.getSpecification().getAllowBody())
-                throw createBodylessComponentException(_activeComponent);
-
-            _activeComponent.addBody(component);
-        }
-
-        addTemplateBindings(component, token);
-
-        _stack[_stackx++] = _activeComponent;
-
-        _activeComponent = component;
-    }
-
-    private void checkForDuplicateId(String id, Location location)
-    {
-        if (id == null)
-            return;
-
-        IContainedComponent cc = _loadComponent.getSpecification().getComponent(id);
-
-        if (cc != null)
-            throw new ApplicationRuntimeException(ImplMessages.dupeComponentId(id, cc),
-                                                  _loadComponent, location, null);
-    }
-
-    private IComponent createImplicitComponent(String id, String componentType, Location location)
-    {
-        return _pageLoader.createImplicitComponent(
-                _requestCycle,
-                _loadComponent,
-                id,
-                componentType,
-                location);
-    }
-
-    private IComponent getEmbeddedComponent(String id)
-    {
-        return _loadComponent.getComponent(id);
-    }
-
-    private void process(CloseToken token)
-    {
-        // Again, this is pretty much impossible to reach because
-        // the template parser does a great job.
-
-        if (_stackx <= 0)
-            throw new ApplicationRuntimeException(ImplMessages.unbalancedCloseTags(),
-                                                  _loadComponent, token.getLocation(), null);
-
-        // Null and forget the top element on the stack.
-
-        _stack[_stackx--] = null;
-
-        _activeComponent = _stack[_stackx];
-    }
-
-    private void process(LocalizationToken token)
-    {
-        IRender render = new LocalizedStringRender(_loadComponent, token);
-
-        if (_activeComponent == null)
-            _loadComponent.addOuter(render);
-        else
-            _activeComponent.addBody(render);
-    }
-
-    /**
-     * Adds bindings based on attributes in the template.
-     */
-
-    void addTemplateBindings(IComponent component, OpenToken token)
-    {
-        // sets the html tag name used to specify the component
-
-        component.setTemplateTagName(token.getTag());
-
-        IComponentSpecification spec = component.getSpecification();
-
-        Map attributes = token.getAttributesMap();
-
-        if (attributes != null)
-        {
-            Iterator i = attributes.entrySet().iterator();
-
-            while (i.hasNext())
-            {
-                Map.Entry entry = (Map.Entry) i.next();
-
-                String attributeName = (String) entry.getKey();
-                String value = (String) entry.getValue();
-
-                IParameterSpecification pspec = spec.getParameter(attributeName);
-                String parameterName = pspec == null ? attributeName : pspec.getParameterName();
-
-                if (!attributeName.equals(parameterName))
-                    _log.warn(ImplMessages.usedTemplateParameterAlias(token, attributeName, parameterName));
-
-                String description = ImplMessages.templateParameterName(parameterName);
-
-                // Values in a template are always literal, unless prefixed.
-
-                IBinding binding = _bindingSource.createBinding(
-                        _loadComponent,
-                        pspec,
-                        description,
-                        value,
-                        BindingConstants.LITERAL_PREFIX,
-                        token.getLocation());
-
-                addBinding(component, spec, parameterName, binding);
-            }
-        }
-
-        // if the component defines a templateTag parameter and
-        // there is no established binding for that parameter,
-        // add a static binding carrying the template tag
-
-        if (spec.getParameter(TemplateSource.TEMPLATE_TAG_PARAMETER_NAME) != null
-            && component.getBinding(TemplateSource.TEMPLATE_TAG_PARAMETER_NAME) == null)
-        {
-            IBinding binding = _bindingSource.createBinding(
-                    component,
-                    TemplateSource.TEMPLATE_TAG_PARAMETER_NAME,
-                    token.getTag(),
-                    BindingConstants.LITERAL_PREFIX,
-                    token.getLocation());
-
-            addBinding(component, spec, TemplateSource.TEMPLATE_TAG_PARAMETER_NAME, binding);
-        }
-    }
-
-    /**
-     * Adds an expression binding, checking for errors related to reserved and informal parameters.
-     * <p>
-     * It is an error to specify expression bindings in both the specification and the template.
-     */
-
-    private void addBinding(IComponent component, IComponentSpecification spec,
-                            String name, IBinding binding)
-    {
-
-        // If matches a formal parameter name, allow it to be set
-        // unless there's already a binding.
-
-        boolean valid = validate(component, spec, name, binding);
-
-        if (valid)
-            component.setBinding(name, binding);
-    }
-
-    private boolean validate(IComponent component, IComponentSpecification spec,
-                             String name, IBinding binding)
-    {
-        // TODO: This is ugly! Need a better/smarter way, even if we have to extend BindingSource
-        // to tell us.
-
-        boolean isLiteral = binding instanceof LiteralBinding;
-        boolean isBound = component.getBinding(name) != null;
-        boolean isFormal = spec.getParameter(name) != null;
-
-        if (!isFormal)
-        {
-            if (!spec.getAllowInformalParameters())
-            {
-                // Again; if informal parameters are disallowed, ignore literal bindings, as they
-                // are there as placeholders or for WYSIWYG.
-
-                if (isLiteral)
-                    return false;
-
-                throw new ApplicationRuntimeException(ImplMessages.templateBindingForInformalParameter(_loadComponent, name, component),
-                                                      component, binding.getLocation(), null);
-            }
-
-            // If the name is reserved (matches a formal parameter
-            // or reserved name, caselessly), then skip it.
-
-            if (spec.isReservedParameterName(name))
-            {
-                // Final case for literals: if they conflict with a reserved name, they are ignored.
-                // Again, there for WYSIWYG.
-
-                if (isLiteral)
-                    return false;
-
-                throw new ApplicationRuntimeException(ImplMessages.templateBindingForReservedParameter(_loadComponent, name, component),
-                                                      component, binding.getLocation(), null);
-            }
-        }
-
-        // So, at this point it doesn't matter if the parameter is a formal parameter or
-        // an informal parameter. The binding (if any) in the specification takes precendence
-        // over the template. Literal bindings that conflict are considered to be there for WYSIWYG
-        // purposes. Non-literal bindings that conflict with a specification binding are an
-        // error.
-
-        if (isBound)
-        {
-            // Literal bindings in the template that conflict with bound parameters
-            // from the spec are silently ignored.
-
-            if (isLiteral)
-                return false;
-
-            throw new ApplicationRuntimeException(ImplMessages.dupeTemplateBinding(
-                    name,
-                    component,
-                    _loadComponent), component, binding.getLocation(), null);
-        }
-
-        return true;
-
-    }
-
-    private void checkAllComponentsReferenced()
-    {
-        // First, contruct a modifiable copy of the ids of all expected components
-        // (that is, components declared in the specification).
-
-        Map components = _loadComponent.getComponents();
-
-        Set ids = components.keySet();
-
-        // If the seen ids ... ids referenced in the template, matches
-        // all the ids in the specification then we're fine.
-
-        if (_seenIds.containsAll(ids))
-            return;
-
-        // Create a modifiable copy. Remove the ids that are referenced in
-        // the template. The remainder are worthy of note.
-
-        ids = new HashSet(ids);
-        ids.removeAll(_seenIds);
-
-        _log.warn(ImplMessages.missingComponentSpec(_loadComponent, ids));
-
-    }
-
-    private ApplicationRuntimeException createBodylessComponentException(IComponent component)
-    {
-        return new ApplicationRuntimeException(ImplMessages.bodylessComponent(), component, null, null);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/CookieSourceImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/CookieSourceImpl.java
deleted file mode 100644
index 8c30075..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/CookieSourceImpl.java
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.tapestry.services.CookieSource;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Implementation of the {@link org.apache.tapestry.services.CookieSource} service interface.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class CookieSourceImpl implements CookieSource
-{
-    private HttpServletRequest _request;
-
-    private HttpServletResponse _response;
-
-    private int _defaultMaxAge;
-
-    public String readCookieValue(String name)
-    {
-        Cookie[] cookies = _request.getCookies();
-
-        if (cookies == null)
-            return null;
-
-        for (int i = 0; i < cookies.length; i++)
-        {
-            if (cookies[i].getName().equals(name))
-                return cookies[i].getValue();
-        }
-
-        return null;
-    }
-
-    public void writeCookieValue(String name, String value)
-    {
-        writeCookieValue(name, value, _defaultMaxAge);
-    }
-
-    public void writeCookieValue(String name, String value, int maxAge)
-    {
-        Cookie cookie = new Cookie(name, value);
-        cookie.setPath(_request.getContextPath() + "/");
-        cookie.setMaxAge(maxAge);
-
-        _response.addCookie(cookie);
-    }
-
-    public void writeCookieValue(String name, String value, String path)
-    {
-        Cookie cookie = new Cookie(name, value);
-        cookie.setPath(path);
-        _response.addCookie(cookie);
-    }
-
-    public void writeDomainCookieValue(String name, String value, String domain)
-    {
-        Cookie cookie = new Cookie(name, value);
-        cookie.setPath(_request.getContextPath() + "/");
-        cookie.setDomain(domain);
-        _response.addCookie(cookie);
-    }
-
-    public void writeDomainCookieValue(String name, String value, String domain, int maxAge)
-    {
-        Cookie cookie = new Cookie(name, value);
-        cookie.setPath(_request.getContextPath() + "/");
-        cookie.setDomain(domain);
-        cookie.setMaxAge(maxAge);
-
-        _response.addCookie(cookie);
-    }
-
-    public void writeCookieValue(String name, String value, String path, String domain)
-    {
-        Cookie cookie = new Cookie(name, value);
-        cookie.setPath(path);
-        cookie.setDomain(domain);
-        _response.addCookie(cookie);
-    }
-
-    public void removeCookieValue(String name)
-    {
-        Cookie cookie = new Cookie(name, null);
-        cookie.setPath(_request.getContextPath() + "/");
-        cookie.setMaxAge(0);
-
-        _response.addCookie(cookie);
-    }
-
-    public void setRequest(HttpServletRequest request)
-    {
-        _request = request;
-    }
-
-    public void setResponse(HttpServletResponse response)
-    {
-        _response = response;
-    }
-
-    public void setDefaultMaxAge(int defaultMaxAge)
-    {
-        _defaultMaxAge = defaultMaxAge;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultParserDelegate.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultParserDelegate.java
deleted file mode 100644
index 755a118..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultParserDelegate.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.parse.ITemplateParserDelegate;
-import org.apache.tapestry.resolver.ComponentSpecificationResolver;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Default implementation of {@link org.apache.tapestry.parse.ITemplateParserDelegate}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class DefaultParserDelegate implements ITemplateParserDelegate
-{
-    private IComponent _component;
-
-    private ComponentSpecificationResolver _resolver;
-
-    private IRequestCycle _cycle;
-
-    private String _componentAttributeName;
-
-    public DefaultParserDelegate(IComponent component, String componentAttributeName,
-            IRequestCycle cycle, ComponentSpecificationResolver resolver)
-    {
-        _component = component;
-        _componentAttributeName = componentAttributeName;
-        _resolver = resolver;
-        _cycle = cycle;
-    }
-
-    public boolean getKnownComponent(String componentId)
-    {
-        return _component.getSpecification().getComponent(componentId) != null;
-    }
-
-    public boolean getAllowBody(String componentId, Location location)
-    {
-        IComponent embedded = _component.getComponent(componentId);
-
-        if (embedded == null)
-            throw Tapestry.createNoSuchComponentException(_component, componentId, location);
-
-        return embedded.getSpecification().getAllowBody();
-    }
-
-    public boolean getAllowBody(String libraryId, String type, Location location)
-    {
-        INamespace namespace = _component.getNamespace();
-
-        _resolver.resolve(_cycle, namespace, libraryId, type, location);
-
-        IComponentSpecification spec = _resolver.getSpecification();
-
-        return spec.getAllowBody();
-    }
-
-    public String getComponentAttributeName()
-    {
-        return _componentAttributeName;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java
deleted file mode 100644
index 973c75b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java
+++ /dev/null
@@ -1,445 +0,0 @@
-// Copyright Mar 18, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.services.RequestLocaleManager;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.util.PageRenderSupportImpl;
-import org.apache.tapestry.web.WebResponse;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-
-
-/**
- * Manages normal html responses for tapestry request/response cycles.
- *
- * @author jkuhnert
- */
-public class DefaultResponseBuilder implements ResponseBuilder
-{
-    private final AssetFactory _assetFactory;
-
-    private final String _namespace;
-
-    private PageRenderSupportImpl _prs;
-
-    private RequestLocaleManager _localeManager;
-
-    private MarkupWriterSource _markupWriterSource;
-
-    private WebResponse _webResponse;
-
-    /** Default writer for rendering html output. */
-    private IMarkupWriter _writer;
-
-    private boolean _closeWriter = true;
-
-    /**
-     * Portlet constructor.
-     *
-     * @param writer
-     */
-    public DefaultResponseBuilder(IMarkupWriter writer,
-                                  AssetFactory assetFactory, String namespace, boolean closeWriter)
-    {
-        _writer = writer;
-        _assetFactory = assetFactory;
-        _namespace = namespace;
-        _closeWriter = closeWriter;
-    }
-
-    /**
-     * Used in testing only.
-     * @param writer
-     */
-    public DefaultResponseBuilder(IMarkupWriter writer)
-    {
-        _writer = writer;
-        _assetFactory = null;
-        _namespace = null;
-    }
-
-    /**
-     * Creates a new response builder with the required services it needs
-     * to render the response when {@link #renderResponse(IRequestCycle)} is called.
-     *
-     * @param localeManager
-     *          Used to set the locale on the response.
-     * @param markupWriterSource
-     *          Creates IMarkupWriter instance to be used.
-     * @param webResponse
-     *          Web response for output stream.
-     */
-    public DefaultResponseBuilder(RequestLocaleManager localeManager,
-                                  MarkupWriterSource markupWriterSource, WebResponse webResponse,
-                                  AssetFactory assetFactory, String namespace)
-    {
-        Defense.notNull(assetFactory, "assetService");
-
-        _localeManager = localeManager;
-        _markupWriterSource = markupWriterSource;
-        _webResponse = webResponse;
-
-        // Used by PageRenderSupport
-
-        _assetFactory = assetFactory;
-        _namespace = namespace;
-    }
-
-    /**
-     *
-     * {@inheritDoc}
-     */
-    public boolean isDynamic()
-    {
-        return false;
-    }
-
-    /**
-     *
-     * {@inheritDoc}
-     */
-    public void renderResponse(IRequestCycle cycle)
-      throws IOException
-    {
-        if (_writer == null)
-        {
-            _localeManager.persistLocale();
-
-            IPage page = cycle.getPage();
-
-            ContentType contentType = page.getResponseContentType();
-            String encoding = contentType.getParameter(ENCODING_KEY);
-
-            if (encoding == null)
-            {
-                encoding = cycle.getEngine().getOutputEncoding();
-
-                contentType.setParameter(ENCODING_KEY, encoding);
-            }
-
-            PrintWriter printWriter = _webResponse.getPrintWriter(contentType);
-
-            _writer = _markupWriterSource.newMarkupWriter(printWriter, contentType);
-        }
-
-        // render response
-
-        _prs = new PageRenderSupportImpl(_assetFactory, _namespace, cycle.getPage().getLocation(), this);
-
-        TapestryUtils.storePageRenderSupport(cycle, _prs);
-
-        cycle.renderPage(this);
-
-        TapestryUtils.removePageRenderSupport(cycle);
-
-        flush();
-
-        if (_closeWriter)
-            _writer.close();
-    }
-
-    public void flush()
-      throws IOException
-    {
-        // Important - causes any cookies stored to properly be written out before the
-        // rest of the response starts being written - see TAPESTRY-825
-
-        _writer.flush();
-    }
-
-    /**
-     *
-     * {@inheritDoc}
-     */
-    public void render(IMarkupWriter writer, IRender render, IRequestCycle cycle)
-    {
-        if (writer == null)
-            render.render(_writer, cycle);
-        else
-            render.render(writer, cycle);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void updateComponent(String id)
-    {
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean contains(IComponent target)
-    {
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean explicitlyContains(IComponent target)
-    {
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public IMarkupWriter getWriter()
-    {
-        if (_writer == null)
-            return NullWriter.getSharedInstance();
-
-        return _writer;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public IMarkupWriter getWriter(String id, String type)
-    {
-        if (_writer == null)
-            return NullWriter.getSharedInstance();
-
-        return _writer;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isBodyScriptAllowed(IComponent target)
-    {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isExternalScriptAllowed(IComponent target)
-    {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isInitializationScriptAllowed(IComponent target)
-    {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isImageInitializationAllowed(IComponent target)
-    {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(IComponent target, IAsset source)
-    {
-        return _prs.getPreloadedImageReference(target, source);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(IComponent target, String url)
-    {
-        return _prs.getPreloadedImageReference(target, url);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(String url)
-    {
-        return _prs.getPreloadedImageReference(url);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addBodyScript(IComponent target, String script)
-    {
-        _prs.addBodyScript(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addBodyScript(String script)
-    {
-        _prs.addBodyScript(script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addExternalScript(IComponent target, Resource resource)
-    {
-        _prs.addExternalScript(target, resource);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addExternalScript(Resource resource)
-    {
-        _prs.addExternalScript(resource);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addInitializationScript(IComponent target, String script)
-    {
-        _prs.addInitializationScript(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addInitializationScript(String script)
-    {
-        _prs.addInitializationScript(script);
-    }
-
-    public void addScriptAfterInitialization(IComponent target, String script)
-    {
-        _prs.addScriptAfterInitialization(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getUniqueString(String baseValue)
-    {
-        return _prs.getUniqueString(baseValue);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeBodyScript(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        _prs.writeBodyScript(writer, cycle);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeInitializationScript(IMarkupWriter writer)
-    {
-        _prs.writeInitializationScript(writer);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void beginBodyScript(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.begin("script");
-        writer.attribute("type", "text/javascript");
-        writer.printRaw("<!--");
-        writer.println();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void endBodyScript(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.println();
-        writer.printRaw("// -->");
-        writer.end();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeBodyScript(IMarkupWriter writer, String script, IRequestCycle cycle)
-    {
-        writer.printRaw(script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeExternalScript(IMarkupWriter writer, String url, IRequestCycle cycle)
-    {
-        writer.begin("script");
-        writer.attribute("type", "text/javascript");
-        writer.attribute("src", url);
-        writer.end();
-        writer.println();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeImageInitializations(IMarkupWriter writer, String script, String preloadName, IRequestCycle cycle)
-    {
-
-        writer.println();
-        writer.printRaw("dojo.addOnLoad(function(e) {\n");
-
-        writer.printRaw(preloadName + " = [];\n");
-        writer.printRaw("if (document.images)\n");
-        writer.printRaw("{\n");
-        writer.printRaw(script);
-        writer.printRaw("}\n");
-
-        writer.printRaw("});");
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeInitializationScript(IMarkupWriter writer, String script)
-    {
-        writer.begin("script");
-        writer.attribute("type", "text/javascript");
-        writer.printRaw("<!--\n");
-
-        writer.printRaw("dojo.addOnLoad(function(e) {\n");
-
-        writer.printRaw(script);
-
-        writer.printRaw("});");
-
-        writer.printRaw("\n// -->");
-        writer.end();
-    }
-
-    /**
-     * This implementation does nothing.
-     * {@inheritDoc}
-     */
-    public void addStatusMessage(IMarkupWriter normalWriter, String category, String text)
-    {
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultResponseContributorImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultResponseContributorImpl.java
deleted file mode 100644
index 39618e1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DefaultResponseContributorImpl.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.services.RequestLocaleManager;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.ResponseContributor;
-import org.apache.tapestry.web.WebResponse;
-
-/**
- * Factory that is used if no other has been chosen, handles normal html
- * responses.
- * 
- * TODO: Should probably implement this as a hivemind pipeline.
- * 
- * @author jkuhnert
- */
-public class DefaultResponseContributorImpl implements ResponseContributor
-{
-    protected RequestLocaleManager _localeManager;
-    
-    protected MarkupWriterSource _markupWriterSource;
-
-    protected WebResponse _webResponse;
-    
-    protected AssetFactory _assetFactory;
-    
-    /**
-     * {@inheritDoc}
-     */
-    public ResponseBuilder createBuilder(IRequestCycle cycle)
-    throws IOException
-    {
-        return new DefaultResponseBuilder(_localeManager, _markupWriterSource, 
-                _webResponse, _assetFactory, _webResponse.getNamespace());
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public boolean handlesResponse(IRequestCycle cycle)
-    {
-        return true;
-    }
-    
-    public void setLocaleManager(RequestLocaleManager localeManager)
-    {
-        _localeManager = localeManager;
-    }
-    
-    public void setMarkupWriterSource(MarkupWriterSource markupWriterSource)
-    {
-        _markupWriterSource = markupWriterSource;
-    }
-    
-    public void setWebResponse(WebResponse webResponse)
-    {
-        _webResponse = webResponse;
-    }
-    
-    public void setAssetFactory(AssetFactory factory)
-    {
-        _assetFactory = factory;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DeferredObject.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DeferredObject.java
deleted file mode 100644
index caa1d1b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DeferredObject.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Locatable;
-
-/**
- * Interface for an object that can provide a second, target object. This encapsulates the process
- * of obtaining the target object (which is presumably expensive) so that the operation can be
- * deferred or even avoided.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.services.impl.DeferredObjectTranslator
- */
-public interface DeferredObject extends Locatable
-{
-    /**
-     * Returns the target object. The caller is expected to cache the result, if appropriate.
-     */
-    Object getObject();
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DeferredObjectImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DeferredObjectImpl.java
deleted file mode 100644
index 1abd7b1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DeferredObjectImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.internal.Module;
-import org.apache.hivemind.schema.Translator;
-
-/**
- * An encapsulation of an invocation of
- * {@link org.apache.hivemind.schema.Translator#translate(org.apache.hivemind.internal.Module, java.lang.Class, java.lang.String, org.apache.hivemind.Location)},
- * allowing the actual invocation (and all the object creation, etc., that entails) to be deferred,
- * or even avoided all together.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DeferredObjectImpl implements DeferredObject
-{
-    private final Module _module;
-
-    private final Translator _objectTranslator;
-
-    private final String _objectReference;
-
-    private final Location _location;
-
-    private Object _object;
-
-    public DeferredObjectImpl(final Translator objectTranslator, final Module module,
-            final String objectReference, final Location location)
-    {
-        _objectTranslator = objectTranslator;
-        _module = module;
-        _objectReference = objectReference;
-        _location = location;
-    }
-
-    public synchronized Object getObject()
-    {
-        if (_object == null)
-            _object = _objectTranslator.translate(
-                    _module,
-                    Object.class,
-                    _objectReference,
-                    _location);
-
-        return _object;
-    }
-
-    public Location getLocation()
-    {
-        return _location;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DeferredObjectTranslator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DeferredObjectTranslator.java
deleted file mode 100644
index 76820aa..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DeferredObjectTranslator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.internal.Module;
-import org.apache.hivemind.schema.Translator;
-
-/**
- * Service <code>tapestry.DeferredObjectTranslator</code>, which is used to encapsulate the
- * ObjectTranslator and return {@link org.apache.tapestry.services.impl.DeferredObjectImpl}instances.
- * These allow the translator to <em>not be executed until (and unless)
- * the value is needed</em>,
- * with the added expense that you have to de-referrence the
- * {@link org.apache.tapestry.services.impl.DeferredObjectImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DeferredObjectTranslator implements Translator
-{
-    private Translator _objectTranslator;
-
-    public Object translate(Module module, Class propertyType, String inputValue, Location location)
-    {
-        return new DeferredObjectImpl(_objectTranslator, module, inputValue, location);
-    }
-
-    public void setObjectTranslator(Translator objectTranslator)
-    {
-        _objectTranslator = objectTranslator;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DisableCachingFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DisableCachingFilter.java
deleted file mode 100644
index 00e6946..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DisableCachingFilter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantLock;
-
-import java.io.IOException;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.services.ResetEventHub;
-import org.apache.tapestry.services.WebRequestServicer;
-import org.apache.tapestry.services.WebRequestServicerFilter;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-/**
- * Filter whose job is to invoke
- * {@link org.apache.tapestry.services.ResetEventHub#fireResetEvent()} after the request has
- * been processed. This filter is only contributed into the
- * tapestry.request.WebRequestServicerPipeline configuration if the
- * org.apache.tapestry.disable-caching system property is true.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DisableCachingFilter implements WebRequestServicerFilter
-{
-    private final ReentrantLock _lock = new ReentrantLock();
-    
-    private ErrorLog _errorLog;
-    
-    private ResetEventHub _resetEventHub;
-    
-    public void service(WebRequest request, WebResponse response, WebRequestServicer servicer)
-            throws IOException
-    {
-        try
-        {
-            _lock.lock();
-            
-            servicer.service(request, response);
-        }
-        finally
-        {
-            fireResetEvent();
-            
-            _lock.unlock();
-        }
-
-    }
-
-    private void fireResetEvent()
-    {
-        try
-        {
-            _resetEventHub.fireResetEvent();
-        }
-        catch (Exception ex)
-        {
-            _errorLog.error(ImplMessages.errorResetting(ex), HiveMind.getLocation(ex), ex);
-        }
-    }
-    
-    public void setResetEventHub(ResetEventHub resetEventCoordinator)
-    {
-        _resetEventHub = resetEventCoordinator;
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java
deleted file mode 100644
index bdc1732..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java
+++ /dev/null
@@ -1,844 +0,0 @@
-// Copyright May 8, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.markup.NestedMarkupWriterImpl;
-import org.apache.tapestry.services.RequestLocaleManager;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.util.PageRenderSupportImpl;
-import org.apache.tapestry.util.ScriptUtils;
-import org.apache.tapestry.web.WebResponse;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.*;
-
-
-/**
- * Main class that handles dojo based ajax responses. These responses are wrapped
- * by an xml document format that segments off invididual component/javascript response
- * types into easy to manage xml elements that can then be interpreted and managed by 
- * running client-side javascript.
- *
- */
-public class DojoAjaxResponseBuilder implements ResponseBuilder
-{
-    private static final Log _log = LogFactory.getLog(DojoAjaxResponseBuilder.class);
-
-    private static final String NEWLINE = System.getProperty("line.separator");
-
-    private final AssetFactory _assetFactory;
-
-    private final String _namespace;
-
-    private PageRenderSupportImpl _prs;
-
-    // used to create IMarkupWriter
-    private RequestLocaleManager _localeManager;
-    private MarkupWriterSource _markupWriterSource;
-    private WebResponse _response;
-
-    private List _errorPages;
-
-    private ContentType _contentType;
-
-    // our response writer
-    private IMarkupWriter _writer;
-    // Parts that will be updated.
-    private List _parts = new ArrayList();
-    // Map of specialized writers, like scripts
-    private Map _writers = new HashMap();
-    // List of status messages.
-    private List _statusMessages;
-
-    private IRequestCycle _cycle;
-
-    private IEngineService _pageService;
-
-    /**
-     * Keeps track of renders involving a whole page response, such 
-     * as exception pages or pages activated via {@link IRequestCycle#activate(IPage)}.
-     */
-    private boolean _pageRender = false;
-
-    /**
-     * Used to keep track of whether or not the appropriate xml response start
-     * block has been started.
-     */
-    private boolean _responseStarted = false;
-
-    /**
-     * Creates a builder with a pre-configured {@link IMarkupWriter}.
-     * Currently only used for testing.
-     *
-     * @param cycle
-     *          The current cycle.
-     * @param writer
-     *          The markup writer to render all "good" content to.
-     * @param parts
-     *          A set of string ids of the components that may have
-     *          their responses rendered.
-     * @param errorPages
-     *          List of page names known to be exception pages.
-     */
-    public DojoAjaxResponseBuilder(IRequestCycle cycle, IMarkupWriter writer, List parts, List errorPages)
-    {
-        Defense.notNull(cycle, "cycle");
-        Defense.notNull(writer, "writer");
-
-        _writer = writer;
-        _cycle = cycle;
-
-        if (parts != null)
-            _parts.addAll(parts);
-
-        _namespace = null;
-        _assetFactory = null;
-        _errorPages = errorPages;
-    }
-
-    /**
-     * Creates a builder with a pre-configured {@link IMarkupWriter}. 
-     * Currently only used for testing.
-     *
-     * @param cycle
-     *          Current request.
-     * @param writer
-     *          The markup writer to render all "good" content to.
-     * @param parts
-     *          A set of string ids of the components that may have 
-     *          their responses rendered.
-     */
-    public DojoAjaxResponseBuilder(IRequestCycle cycle, IMarkupWriter writer, List parts)
-    {
-        this(cycle, writer, parts, null);
-    }
-
-    /**
-     * Creates a new response builder with the required services it needs
-     * to render the response when {@link #renderResponse(IRequestCycle)} is called.
-     *
-     * @param cycle
-     *          The current request.
-     * @param localeManager
-     *          Used to set the locale on the response.
-     * @param markupWriterSource
-     *          Creates IJSONWriter instance to be used.
-     * @param webResponse
-     *          Web response for output stream.
-     * @param errorPages
-     *          List of page names known to be exception pages.
-     * @param assetFactory
-     *          Used to manage asset source inclusions.
-     * @param namespace
-     *          The core namespace to use for javascript/client side operations.
-     * @param pageService
-     *          {@link org.apache.tapestry.engine.PageService} used to generate page urls.
-     */
-    public DojoAjaxResponseBuilder(IRequestCycle cycle,
-                                   RequestLocaleManager localeManager,
-                                   MarkupWriterSource markupWriterSource,
-                                   WebResponse webResponse, List errorPages,
-                                   AssetFactory assetFactory, String namespace, IEngineService pageService)
-    {
-        Defense.notNull(cycle, "cycle");
-        Defense.notNull(assetFactory, "assetService");
-
-        _cycle = cycle;
-        _localeManager = localeManager;
-        _markupWriterSource = markupWriterSource;
-        _response = webResponse;
-        _errorPages = errorPages;
-        _pageService = pageService;
-
-        // Used by PageRenderSupport
-
-        _assetFactory = assetFactory;
-        _namespace = namespace;
-    }
-
-    /**
-     *
-     * {@inheritDoc}
-     */
-    public boolean isDynamic()
-    {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void renderResponse(IRequestCycle cycle)
-      throws IOException
-    {
-        // if response was already started
-
-        if (_responseStarted)
-        {
-            // clear out any previous input
-            clearPartialWriters();
-
-            cycle.renderPage(this);
-
-            TapestryUtils.removePageRenderSupport(cycle);
-            
-            endResponse();
-
-            _writer.close();
-
-            return;
-        }
-
-        _localeManager.persistLocale();
-        _contentType = new ContentType(CONTENT_TYPE + ";charset=" + cycle.getInfrastructure().getOutputEncoding());
-
-        String encoding = _contentType.getParameter(ENCODING_KEY);
-
-        if (encoding == null)
-        {
-            encoding = cycle.getEngine().getOutputEncoding();
-
-            _contentType.setParameter(ENCODING_KEY, encoding);
-        }
-
-        if (_writer == null)
-        {
-            parseParameters(cycle);
-
-            PrintWriter printWriter = _response.getPrintWriter(_contentType);
-            _writer = _markupWriterSource.newMarkupWriter(printWriter, _contentType);
-        }
-
-        // render response
-
-        _prs = new PageRenderSupportImpl(_assetFactory, _namespace, cycle.getPage().getLocation(), this);
-
-        TapestryUtils.storePageRenderSupport(cycle, _prs);
-
-        cycle.renderPage(this);
-
-        TapestryUtils.removePageRenderSupport(cycle);
-
-        endResponse();
-
-        _writer.close();
-    }
-
-    public void flush()
-      throws IOException
-    {
-        // Important - causes any cookies stored to properly be written out before the
-        // rest of the response starts being written - see TAPESTRY-825
-
-        _writer.flush();
-
-        if (!_responseStarted)
-            beginResponse();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void updateComponent(String id)
-    {
-        if (!_parts.contains(id))
-            _parts.add(id);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public IMarkupWriter getWriter()
-    {
-        return _writer;
-    }
-
-    void setWriter(IMarkupWriter writer)
-    {
-        _writer = writer;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isBodyScriptAllowed(IComponent target)
-    {
-        if (_pageRender)
-            return true;
-
-        if (target != null
-            && IPage.class.isInstance(target)
-            || (IForm.class.isInstance(target)
-                && ((IForm)target).isFormFieldUpdating()))
-            return true;
-
-        return contains(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isExternalScriptAllowed(IComponent target)
-    {
-        if (_pageRender)
-            return true;
-
-        if (target != null
-            && IPage.class.isInstance(target)
-            || (IForm.class.isInstance(target)
-                && ((IForm)target).isFormFieldUpdating()))
-            return true;
-
-        return contains(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isInitializationScriptAllowed(IComponent target)
-    {
-        if (_log.isDebugEnabled())
-        {
-            _log.debug("isInitializationScriptAllowed(" + target + ") contains?: " + contains(target) + " _pageRender: " + _pageRender);
-        }
-
-        if (_pageRender)
-            return true;
-
-        if (target != null
-            && IPage.class.isInstance(target)
-            || (IForm.class.isInstance(target)
-                && ((IForm)target).isFormFieldUpdating()))
-            return true;
-
-        return contains(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isImageInitializationAllowed(IComponent target)
-    {
-        if (_pageRender)
-            return true;
-
-        if (target != null
-            && IPage.class.isInstance(target)
-            || (IForm.class.isInstance(target)
-                && ((IForm)target).isFormFieldUpdating()))
-            return true;
-
-        return contains(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(IComponent target, IAsset source)
-    {
-        return _prs.getPreloadedImageReference(target, source);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(IComponent target, String url)
-    {
-        return _prs.getPreloadedImageReference(target, url);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(String url)
-    {
-        return _prs.getPreloadedImageReference(url);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addBodyScript(IComponent target, String script)
-    {
-        _prs.addBodyScript(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addBodyScript(String script)
-    {
-        _prs.addBodyScript(script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addExternalScript(IComponent target, Resource resource)
-    {
-        _prs.addExternalScript(target, resource);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addExternalScript(Resource resource)
-    {
-        _prs.addExternalScript(resource);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addInitializationScript(IComponent target, String script)
-    {
-        _prs.addInitializationScript(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addInitializationScript(String script)
-    {
-        _prs.addInitializationScript(script);
-    }
-
-    public void addScriptAfterInitialization(IComponent target, String script)
-    {
-        _prs.addScriptAfterInitialization(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getUniqueString(String baseValue)
-    {
-        return _prs.getUniqueString(baseValue);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeBodyScript(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        _prs.writeBodyScript(writer, cycle);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeInitializationScript(IMarkupWriter writer)
-    {
-        _prs.writeInitializationScript(writer);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void beginBodyScript(IMarkupWriter normalWriter, IRequestCycle cycle)
-    {
-        IMarkupWriter writer = getWriter(ResponseBuilder.BODY_SCRIPT, ResponseBuilder.SCRIPT_TYPE);
-
-        writer.begin("script");
-        writer.printRaw(NEWLINE + "//<![CDATA[" + NEWLINE);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void endBodyScript(IMarkupWriter normalWriter, IRequestCycle cycle)
-    {
-        IMarkupWriter writer = getWriter(ResponseBuilder.BODY_SCRIPT, ResponseBuilder.SCRIPT_TYPE);
-
-        writer.printRaw(NEWLINE + "//]]>" + NEWLINE);
-        writer.end();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeBodyScript(IMarkupWriter normalWriter, String script, IRequestCycle cycle)
-    {
-        IMarkupWriter writer = getWriter(ResponseBuilder.BODY_SCRIPT, ResponseBuilder.SCRIPT_TYPE);
-
-        writer.printRaw(script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeExternalScript(IMarkupWriter normalWriter, String url, IRequestCycle cycle)
-    {
-        IMarkupWriter writer = getWriter(ResponseBuilder.INCLUDE_SCRIPT, ResponseBuilder.SCRIPT_TYPE);
-
-        // causes asset includes to be loaded dynamically into document head
-        writer.beginEmpty("include");
-        writer.attribute("url", url);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeImageInitializations(IMarkupWriter normalWriter, String script, String preloadName, IRequestCycle cycle)
-    {
-        IMarkupWriter writer = getWriter(ResponseBuilder.BODY_SCRIPT, ResponseBuilder.SCRIPT_TYPE);
-
-        writer.printRaw(NEWLINE + preloadName + " = [];" + NEWLINE);
-        writer.printRaw("if (document.images) {" + NEWLINE);
-
-        writer.printRaw(script);
-
-        writer.printRaw("}" + NEWLINE);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeInitializationScript(IMarkupWriter normalWriter, String script)
-    {
-        IMarkupWriter writer = getWriter(ResponseBuilder.INITIALIZATION_SCRIPT, ResponseBuilder.SCRIPT_TYPE);
-
-        writer.begin("script");
-
-        // return is in XML so must escape any potentially non-xml compliant content
-        writer.printRaw(NEWLINE + "//<![CDATA[" + NEWLINE);
-
-        writer.printRaw(script);
-
-        writer.printRaw(NEWLINE + "//]]>" + NEWLINE);
-
-        writer.end();
-    }
-
-    public void addStatus(IMarkupWriter normalWriter, String text)
-    {
-        addStatusMessage(normalWriter, "info", text);
-    }
-
-    /**
-     * Adds a status message to the current response. This implementation keeps track
-     * of all messages and appends them to the XHR response. On the client side, 
-     * the default behavior is to publish the message to a topic matching the category name
-     * using <code>dojo.event.topic.publish(category,text);</code>.
-     *
-     * @param normalWriter
-     *          The markup writer to use, this may be ignored or swapped
-     *          out for a different writer depending on the implementation being used.
-     * @param category
-     *          Allows setting a category that best describes the type of the status message,
-     *          i.e. info, error, e.t.c.
-     * @param text
-     *          The status message. 
-     */
-    public void addStatusMessage(IMarkupWriter normalWriter, String category, String text)
-    {
-        if (_statusMessages==null)
-        {
-            _statusMessages = new ArrayList();
-        }
-
-        _statusMessages.add(category);
-        _statusMessages.add(text);
-    }
-
-    void writeStatusMessages() {
-
-        for (int i=0; i < _statusMessages.size(); i+=2)
-        {
-            IMarkupWriter writer = getWriter((String) _statusMessages.get(i), "status");
-
-            writer.printRaw((String) _statusMessages.get(i+1));
-        }
-
-        _statusMessages = null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void render(IMarkupWriter writer, IRender render, IRequestCycle cycle)
-    {
-        // must be a valid writer already
-
-        if (NestedMarkupWriterImpl.class.isInstance(writer) && !NullWriter.class.isInstance(writer))
-        {
-            render.render(writer, cycle);
-            return;
-        }
-
-        // check for page exception renders and write content to writer so client can display them
-
-        if (IPage.class.isInstance(render))
-        {
-            IPage page = (IPage)render;
-            String errorPage = getErrorPage(page.getPageName());
-
-            if (errorPage != null)
-            {
-                _pageRender = true;
-
-                clearPartialWriters();
-                render.render(getWriter(errorPage, EXCEPTION_TYPE), cycle);
-                return;
-            }
-
-            // If a page other than the active page originally requested is rendered
-            // it means someone activated a new page, so we need to tell the client to handle
-            // this appropriately. (usually by replacing the current dom with whatever this renders)
-
-            if (_cycle.getParameter(ServiceConstants.PAGE) != null
-                && !page.getPageName().equals(_cycle.getParameter(ServiceConstants.PAGE)))
-            {
-                IMarkupWriter urlwriter = _writer.getNestedWriter();
-
-                urlwriter.begin("response");
-                urlwriter.attribute("type", PAGE_TYPE);
-                urlwriter.attribute("url", _pageService.getLink(true, page.getPageName()).getAbsoluteURL());
-
-                _writers.put(PAGE_TYPE, urlwriter);
-                return;
-            }
-        }
-
-        if (IComponent.class.isInstance(render)
-            && contains((IComponent)render, ((IComponent)render).peekClientId()))
-        {
-            render.render(getComponentWriter( ((IComponent)render).peekClientId() ), cycle);
-            return;
-        }
-
-        // Nothing else found, throw out response
-
-        render.render(NullWriter.getSharedInstance(), cycle);
-    }
-
-    private String getErrorPage(String pageName)
-    {
-        for (int i=0; i < _errorPages.size(); i++)
-        {
-            String page = (String)_errorPages.get(i);
-
-            if (pageName.indexOf(page) > -1)
-                return page;
-        }
-
-        return null;
-    }
-
-    IMarkupWriter getComponentWriter(String id)
-    {
-        return getWriter(id, ELEMENT_TYPE);
-    }
-
-    /**
-     *
-     * {@inheritDoc}
-     */
-    public IMarkupWriter getWriter(String id, String type)
-    {
-        Defense.notNull(id, "id can't be null");
-
-        if (!_responseStarted)
-            beginResponse();
-
-        IMarkupWriter w = (IMarkupWriter)_writers.get(id);
-        if (w != null)
-            return w;
-
-        // Make component write to a "nested" writer
-        // so that element begin/ends don't conflict
-        // with xml element response begin/ends. This is very
-        // important.
-
-        IMarkupWriter nestedWriter = _writer.getNestedWriter();
-        nestedWriter.begin("response");
-        nestedWriter.attribute("id", id);
-        if (type != null)
-            nestedWriter.attribute("type", type);
-
-        _writers.put(id, nestedWriter);
-
-        return nestedWriter;
-    }
-
-    /**
-     * Called to start an ajax response. Writes xml doctype and starts
-     * the <code>ajax-response</code> element that will contain all of
-     * the returned content.
-     */
-    void beginResponse()
-    {
-        _responseStarted = true;
-
-        _writer.printRaw("<?xml version=\"1.0\" encoding=\"" + _cycle.getInfrastructure().getOutputEncoding() + "\"?>");
-        _writer.printRaw("<!DOCTYPE html "
-                         + "PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" "
-                         + "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\" [" + NEWLINE
-                         + "<!ENTITY nbsp '&#160;'>" + NEWLINE
-                         + "]>" + NEWLINE);
-        
-        _writer.printRaw("<ajax-response>");
-    }
-
-    /**
-     * Invoked to clear out tempoary partial writer buffers before rendering exception
-     * page.
-     */
-    void clearPartialWriters()
-    {
-        _writers.clear();
-    }
-
-    /**
-     * Called after the entire response has been captured. Causes
-     * the writer buffer output captured to be segmented and written
-     * out to the right response elements for the client libraries to parse.
-     */
-    void endResponse()
-    {
-        if (!_responseStarted)
-        {
-            beginResponse();
-        }
-
-        // write out captured content
-
-        if (_statusMessages != null)
-            writeStatusMessages();
-
-        Iterator keys = _writers.keySet().iterator();
-        String buffer;
-
-        while (keys.hasNext())
-        {
-            String key = (String)keys.next();
-            NestedMarkupWriter nw = (NestedMarkupWriter)_writers.get(key);
-
-            buffer = nw.getBuffer();
-
-            if (_log.isDebugEnabled())
-            {
-                _log.debug("Ajax markup buffer for key <" + key + " contains: " + buffer);
-            }
-
-            if (!isScriptWriter(key))
-                _writer.printRaw(ScriptUtils.ensureValidScriptTags(buffer));
-            else
-                _writer.printRaw(buffer);
-        }
-
-        // end response
-
-        _writer.printRaw("</ajax-response>");
-        _writer.flush();
-    }
-
-    /**
-     * Determines if the specified markup writer key is one of
-     * the pre-defined script keys from ResponseBuilder.
-     *
-     * @param key
-     *          The key to check.
-     * @return True, if key is one of the ResponseBuilder keys. 
-     *         (BODY_SCRIPT,INCLUDE_SCRIPT,INITIALIZATION_SCRIPT)
-     */
-    boolean isScriptWriter(String key)
-    {
-        if (key == null)
-            return false;
-
-        if (ResponseBuilder.BODY_SCRIPT.equals(key)
-            || ResponseBuilder.INCLUDE_SCRIPT.equals(key)
-            || ResponseBuilder.INITIALIZATION_SCRIPT.equals(key))
-            return true;
-
-        return false;
-    }
-
-    /**
-     * Grabs the incoming parameters needed for json responses, most notable the
-     * {@link ServiceConstants#UPDATE_PARTS} parameter.
-     *
-     * @param cycle
-     *            The request cycle to parse from
-     */
-    void parseParameters(IRequestCycle cycle)
-    {
-        Object[] updateParts = cycle.getParameters(ServiceConstants.UPDATE_PARTS);
-
-        if (updateParts == null)
-            return;
-
-        for(int i = 0; i < updateParts.length; i++)
-            _parts.add(updateParts[i].toString());
-    }
-
-    /**
-     * Determines if the specified component is contained in the 
-     * responses requested update parts.
-     * @param target
-     *          The component to check for.
-     * @return True if the request should capture the components output.
-     */
-    public boolean contains(IComponent target)
-    {
-        if (target == null)
-            return false;
-
-        String id = target.getClientId();
-
-        return contains(target, id);
-    }
-
-    boolean contains(IComponent target, String id)
-    {
-        if (_parts.contains(id))
-            return true;
-
-        Iterator it = _cycle.renderStackIterator();
-        while (it.hasNext())
-        {
-            IComponent comp = (IComponent)it.next();
-            String compId = comp.getClientId();
-
-            if (comp != target && _parts.contains(compId))
-                return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean explicitlyContains(IComponent target)
-    {
-        if (target == null)
-            return false;
-
-        return _parts.contains(target.getId());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseContributorImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseContributorImpl.java
deleted file mode 100644
index 50790c4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseContributorImpl.java
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright May 8, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.services.RequestLocaleManager;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.ResponseContributor;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * Handles determining dojo ajax requests.
- * 
- * @author jkuhnert
- */
-public class DojoAjaxResponseContributorImpl implements ResponseContributor
-{
-    public static final String DOJO_AJAX_HEADER = "dojo-ajax-request";
-    
-    private RequestLocaleManager _localeManager;
-    
-    private MarkupWriterSource _markupWriterSource;
-    
-    private WebResponse _webResponse;
-    
-    private WebRequest _webRequest;
-    
-    private String _exceptionPageName;
-    
-    private String _staleSessionPageName;
-    
-    private String _staleLinkPageName;
-    
-    private AssetFactory _assetFactory;
-    
-    private IEngineService _pageService;
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public ResponseBuilder createBuilder(IRequestCycle cycle)
-        throws IOException
-    {
-        List errorPages = new ArrayList();
-        errorPages.add(_exceptionPageName);
-        errorPages.add(_staleSessionPageName);
-        errorPages.add(_staleLinkPageName);
-        
-        return new DojoAjaxResponseBuilder(cycle, _localeManager, 
-                _markupWriterSource,
-                _webResponse, errorPages, _assetFactory, 
-                _webResponse.getNamespace(), _pageService);
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean handlesResponse(IRequestCycle cycle)
-    {
-        return _webRequest.getHeader(DOJO_AJAX_HEADER) != null;
-    }
-    
-    public void setLocaleManager(RequestLocaleManager localeManager)
-    {
-        _localeManager = localeManager;
-    }
-    
-    public void setMarkupWriterSource(MarkupWriterSource markupWriterSource)
-    {
-        _markupWriterSource = markupWriterSource;
-    }
-    
-    public void setWebResponse(WebResponse webResponse)
-    {
-        _webResponse = webResponse;
-    }
-    
-    public void setWebRequest(WebRequest webRequest)
-    {
-        _webRequest  = webRequest;
-    }
-    
-    public void setExceptionPageName(String name)
-    {
-        _exceptionPageName = name;
-    }
-    
-    public void setStaleSessionPageName(String name)
-    {
-        _staleSessionPageName = name;
-    }
-    
-    public void setStaleLinkPageName(String name)
-    {
-        _staleLinkPageName = name;
-    }
-    
-    public void setAssetFactory(AssetFactory factory)
-    {
-        _assetFactory = factory;
-    }
-    
-    public void setPageService(IEngineService service)
-    {
-        _pageService = service;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineFactoryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineFactoryImpl.java
deleted file mode 100644
index 66f359a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineFactoryImpl.java
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.ErrorLog;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.engine.BaseEngine;
-import org.apache.tapestry.services.EngineFactory;
-import org.apache.tapestry.spec.IApplicationSpecification;
-
-import java.util.Locale;
-
-/**
- * Standard implementation of {@link org.apache.tapestry.services.EngineFactory} service. This
- * should do for most purposes, since a major focus of Tapestry 4.0 is to no longer require
- * subclassing of {@link org.apache.tapestry.engine.BaseEngine}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class EngineFactoryImpl implements EngineFactory
-{
-    private IApplicationSpecification _applicationSpecification;
-
-    private String _defaultEngineClassName;
-
-    private EngineConstructor _constructor;
-
-    private ClassResolver _classResolver;
-
-    private ErrorLog _errorLog;
-
-    /**
-     * Creates a new engine?
-     * @author Howard Lewis Ship
-     */
-    interface EngineConstructor
-    {
-        IEngine construct();
-    }
-
-    // TODO: Create a BaseEngineConstructor that is hardcoded to
-    // instantiate a BaseEngine instance, without using reflection
-    // (for efficiency).
-
-    /**
-     * Creates a new reflective engine constructor.
-     */
-    static class ReflectiveEngineConstructor implements EngineConstructor
-    {
-        private Class _engineClass;
-
-        ReflectiveEngineConstructor(Class engineClass)
-        {
-            _engineClass = engineClass;
-        }
-
-        public IEngine construct()
-        {
-            try
-            {
-                return (IEngine) _engineClass.newInstance();
-            }
-            catch (Exception ex)
-            {
-                throw new ApplicationRuntimeException(ImplMessages.errorInstantiatingEngine(_engineClass, ex), ex);
-            }
-        }
-    }
-
-    public void initializeService()
-    {
-        String engineClassName = _applicationSpecification.getEngineClassName();
-
-        // TODO: Check in web.xml first.
-
-        if (engineClassName == null)
-            engineClassName = _defaultEngineClassName;
-
-        Class engineClass = _classResolver.checkForClass(engineClassName);
-
-        if (engineClass == null)
-        {
-            _errorLog.error(ImplMessages.engineClassNotFound(engineClassName), null, null);
-            engineClass = BaseEngine.class;
-        }
-
-        _constructor = new ReflectiveEngineConstructor(engineClass);
-    }
-
-    public IEngine constructNewEngineInstance(Locale locale)
-    {
-        IEngine result = _constructor.construct();
-
-        result.setLocale(locale);
-
-        return result;
-    }
-
-    public void setApplicationSpecification(IApplicationSpecification specification)
-    {
-        _applicationSpecification = specification;
-    }
-
-    public void setClassResolver(ClassResolver resolver)
-    {
-        _classResolver = resolver;
-    }
-
-    public void setDefaultEngineClassName(String string)
-    {
-        _defaultEngineClassName = string;
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineManagerImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineManagerImpl.java
deleted file mode 100644
index 3db7f03..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineManagerImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.services.EngineFactory;
-import org.apache.tapestry.services.EngineManager;
-import org.apache.tapestry.services.ObjectPool;
-import org.apache.tapestry.services.RequestLocaleManager;
-
-/**
- * Implementation of service {@link org.apache.tapestry.services.EngineManager}.
- * Service point tapestry.request.EngineManager.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class EngineManagerImpl implements EngineManager
-{
-    private ObjectPool _enginePool;
-
-    private EngineFactory _engineFactory;
-
-    private RequestLocaleManager _localeManager;
-
-    public IEngine getEngineInstance()
-    {
-        Locale locale = _localeManager.extractLocaleForCurrentRequest();
-
-        IEngine result = (IEngine) _enginePool.get(locale);
-
-        // This happens when either the pool is empty, or when a session exists
-        // but the engine has not been stored into it (which should never happen, and
-        // probably indicates an error in the framework or the application).
-
-        if (result == null)
-            result = _engineFactory.constructNewEngineInstance(locale);
-
-        return result;
-    }
-
-    public void storeEngineInstance(IEngine engine)
-    {
-        _enginePool.store(engine.getLocale(), engine);
-    }
-
-    public void setEngineFactory(EngineFactory factory)
-    {
-        _engineFactory = factory;
-    }
-
-    public void setEnginePool(ObjectPool pool)
-    {
-        _enginePool = pool;
-    }
-
-    public void setLocaleManager(RequestLocaleManager manager)
-    {
-        _localeManager = manager;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceContribution.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceContribution.java
deleted file mode 100644
index f0ed3ae..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceContribution.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.tapestry.engine.IEngineService;
-
-/**
- * Maps an engine service to a name. The services
- * {@link org.apache.tapestry.engine.IEngineService#getName()}&nbsp;method must match.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class EngineServiceContribution extends BaseLocatable
-{
-    private String _name;
-
-    private IEngineService _service;
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    public IEngineService getService()
-    {
-        return _service;
-    }
-
-    public void setService(IEngineService service)
-    {
-        _service = service;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceInnerProxy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceInnerProxy.java
deleted file mode 100644
index 4504e63..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceInnerProxy.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.io.IOException;
-import java.io.Serializable;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * Inner proxy that actually resolves the engine service using the
- * {@link org.apache.tapestry.services.impl.EngineServiceSource}, then replaces itself in the outer
- * proxy.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.services.impl.EngineServiceOuterProxy
- */
-public class EngineServiceInnerProxy implements IEngineService, Serializable
-{
-    private static final long serialVersionUID = -8128030027597659447L;
-
-    private final String _serviceName;
-
-    private final EngineServiceOuterProxy _outerProxy;
-
-    private final EngineServiceSource _source;
-
-    public EngineServiceInnerProxy(String serviceName, EngineServiceOuterProxy outerProxy,
-            EngineServiceSource source)
-    {
-        Defense.notNull(serviceName, "serviceName");
-        Defense.notNull(outerProxy, "outerProxy");
-        Defense.notNull(source, "source");
-
-        _serviceName = serviceName;
-        _outerProxy = outerProxy;
-        _source = source;
-    }
-
-    public String toString()
-    {
-        return ImplMessages.engineServiceInnerProxyToString(_serviceName);
-    }
-
-    private IEngineService resolve()
-    {
-        IEngineService service = _source.resolveEngineService(_serviceName);
-
-        _outerProxy.installDelegate(service);
-
-        return service;
-    }
-
-    public synchronized ILink getLink(boolean post, Object parameter)
-    {
-        return resolve().getLink(post, parameter);
-    }
-
-    public synchronized void service(IRequestCycle cycle) throws IOException
-    {
-        resolve().service(cycle);
-    }
-
-    public String getName()
-    {
-        return _serviceName;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceObjectProvider.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceObjectProvider.java
deleted file mode 100644
index 2cf22c0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceObjectProvider.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.internal.Module;
-import org.apache.hivemind.service.ObjectProvider;
-import org.apache.tapestry.services.ServiceMap;
-
-/**
- * Provides the implementation of the "engine-service:" prefix, were the locator is simply the name
- * of an engine service.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class EngineServiceObjectProvider implements ObjectProvider
-{
-    private ServiceMap _serviceMap;
-
-    public void setServiceMap(ServiceMap serviceMap)
-    {
-        _serviceMap = serviceMap;
-    }
-
-    public Object provideObject(Module contributingModule, Class propertyType, String locator,
-            Location location)
-    {
-        return _serviceMap.getService(locator);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceOuterProxy.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceOuterProxy.java
deleted file mode 100644
index 023b410..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceOuterProxy.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.io.IOException;
-import java.io.Serializable;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * Outer proxy for engine services. The inner proxy resolves the engine service name to a engine
- * service implementation and installed it into the outer proxy as a delegate. Although HiveMind
- * does provide a similar system of inner and outer delegates, Tapestry's engine-service:
- * {@link org.apache.tapestry.services.impl.EngineServiceObjectProvider}&nbsp;object provider can
- * cause exceptions (recurive service build) when attempting to link two services together. This
- * extra layer of proxying resolves that issue.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class EngineServiceOuterProxy implements IEngineService, Serializable
-{
-    
-    /**
-     * generated.
-     */
-    private static final long serialVersionUID = 2050789495671401625L;
-
-    private final String _serviceName;
-
-    private IEngineService _delegate;
-
-    public EngineServiceOuterProxy(String serviceName)
-    {
-        Defense.notNull(serviceName, "serviceName");
-
-        _serviceName = serviceName;
-    }
-
-    void installDelegate(IEngineService delegate)
-    {
-        _delegate = delegate;
-    }
-
-    IEngineService getDelegate()
-    {
-        return _delegate;
-    }
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        return _delegate.getLink(post, parameter);
-    }
-
-    public void service(IRequestCycle cycle) throws IOException
-    {
-        _delegate.service(cycle);
-    }
-
-    public String getName()
-    {
-        return _serviceName;
-    }
-
-    public String toString()
-    {
-        return ImplMessages.engineServiceOuterProxyToString(_serviceName);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceSource.java
deleted file mode 100644
index e3f97f5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/EngineServiceSource.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.tapestry.engine.IEngineService;
-
-/**
- * Interface that allows {@link IEngineService} proxies to be converted to real instances.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.services.impl.EngineServiceInnerProxy
- */
-public interface EngineServiceSource
-{
-    /**
-     * Obtains an actual service implementation, not a proxy.
-     */
-
-    IEngineService resolveEngineService(String name);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionCacheImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionCacheImpl.java
deleted file mode 100644
index e45c0b7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionCacheImpl.java
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantLock;
-import ognl.ClassCacheInspector;
-import ognl.Node;
-import ognl.Ognl;
-import ognl.OgnlRuntime;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.event.ReportStatusEvent;
-import org.apache.tapestry.event.ReportStatusListener;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.services.ExpressionCache;
-import org.apache.tapestry.services.ExpressionEvaluator;
-
-import java.beans.Introspector;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ExpressionCacheImpl implements ExpressionCache, ResetEventListener, ReportStatusListener, ClassCacheInspector {
-
-    private final ReentrantLock _lock = new ReentrantLock();
-    
-    private String _serviceId;
-
-    private Map _cache = new WeakHashMap();
-    
-    private Map _objectCache = new WeakHashMap();
-    
-    private ExpressionEvaluator _evaluator;
-
-    private final boolean _cachingDisabled = Boolean.getBoolean("org.apache.tapestry.disable-caching");
-
-    public void initializeService()
-    {
-        if (_cachingDisabled)
-        {
-            OgnlRuntime.setClassCacheInspector(this);
-        }
-    }
-
-    public void resetEventDidOccur()
-    {
-        try {
-            
-            _lock.lock();
-            
-            _cache.clear();
-            _objectCache.clear();
-
-            Introspector.flushCaches();
-
-        } finally {
-            
-            _lock.unlock();
-        }
-    }
-
-    public boolean shouldCache(Class type)
-    {
-        if (!_cachingDisabled || type == null
-            || AbstractComponent.class.isAssignableFrom(type))
-            return false;
-
-        return true;
-    }
-
-    public void reportStatus(ReportStatusEvent event)
-    {
-        event.title(_serviceId);
-
-        event.property("cached expression count", _cache.size());
-        event.collection("cached expressions", _cache.keySet());
-        
-        event.property("cached object expression count", _objectCache.size());
-    }
-    
-    public Object getCompiledExpression(Object target, String expression)
-    {
-        try {   
-            
-            _lock.lock();
-            
-            Map cached = (Map)_objectCache.get(target.getClass());
-            
-            if (cached == null)
-            {    
-                cached = new HashMap();
-                _objectCache.put(target.getClass(), cached);
-            }
-            
-            Node result = (Node)cached.get(expression);
-            
-            if (result == null || result.getAccessor() == null)
-            {
-                result = parse(target, expression);
-                cached.put(expression, result);
-            }
-            
-            return result;
-            
-        } finally {
-
-            _lock.unlock();
-        }
-    }
-    
-    public Object getCompiledExpression(String expression)
-    {
-        try {
-            
-            _lock.lock();
-            
-            Object result = _cache.get(expression);
-
-            if (result == null)
-            {
-                result = parse(expression);
-                _cache.put(expression, result);
-            }
-            
-            return result;
-        } finally {
-
-            _lock.unlock();
-        }
-    }
-
-    private Node parse(Object target, String expression)
-    {
-        try
-        {
-            return Ognl.compileExpression(_evaluator.createContext(target), target, expression);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.unableToParseExpression(expression,ex), ex);
-        }
-    }
-    
-    private Object parse(String expression)
-    {
-        try
-        {
-            return Ognl.parseExpression(expression);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.unableToParseExpression(expression, ex), ex);
-        }
-    }
-
-    public void setServiceId(String serviceId)
-    {
-        _serviceId = serviceId;
-    }
-    
-    public void setEvaluator(ExpressionEvaluator evaluator)
-    {
-        _evaluator = evaluator;
-    }
-    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionEvaluatorImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionEvaluatorImpl.java
deleted file mode 100644
index 8872e7e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionEvaluatorImpl.java
+++ /dev/null
@@ -1,270 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import ognl.*;
-import ognl.enhance.ExpressionAccessor;
-import org.apache.commons.pool.impl.GenericObjectPool;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.events.RegistryShutdownListener;
-import org.apache.hivemind.service.ClassFactory;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.ExpressionCache;
-import org.apache.tapestry.services.ExpressionEvaluator;
-import org.apache.tapestry.spec.IApplicationSpecification;
-
-import java.beans.Introspector;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @since 4.0
- */
-public class ExpressionEvaluatorImpl implements ExpressionEvaluator, RegistryShutdownListener {
-    
-    private static final long POOL_MIN_IDLE_TIME = 1000 * 60 * 50;
-
-    private static final long POOL_SLEEP_TIME = 1000 * 60 * 4;
-
-    // Uses Thread's context class loader
-
-    private final ClassResolver _ognlResolver = new OgnlClassResolver();
-
-    private ExpressionCache _expressionCache;
-
-    private IApplicationSpecification _applicationSpecification;
-
-    private TypeConverter _typeConverter;
-
-    private List _contributions;
-    
-    private List _nullHandlerContributions;
-
-    // Context, with a root of null, used when evaluating an expression
-    // to see if it is a constant.
-
-    private Map _defaultContext;
-    
-    private ClassFactory _classFactory;
-
-    private GenericObjectPool _contextPool;
-
-    public void setApplicationSpecification(IApplicationSpecification applicationSpecification)
-    {
-        _applicationSpecification = applicationSpecification;
-    }
-
-    public void initializeService()
-    {
-        if (_applicationSpecification.checkExtension(Tapestry.OGNL_TYPE_CONVERTER))
-            _typeConverter = (TypeConverter) _applicationSpecification.getExtension(Tapestry.OGNL_TYPE_CONVERTER,
-                    TypeConverter.class);
-
-        Iterator i = _contributions.iterator();
-
-        while (i.hasNext())
-        {
-            PropertyAccessorContribution c = (PropertyAccessorContribution) i.next();
-            
-            OgnlRuntime.setPropertyAccessor(c.getSubjectClass(), c.getAccessor());
-        }
-        
-        Iterator j = _nullHandlerContributions.iterator();
-        
-        while (j.hasNext())
-        {
-            NullHandlerContribution h = (NullHandlerContribution) j.next();
-            
-            OgnlRuntime.setNullHandler(h.getSubjectClass(), h.getHandler());
-        }
-        
-        _defaultContext = Ognl.createDefaultContext(null, _ognlResolver, _typeConverter);
-        
-        OgnlRuntime.setCompiler(new HiveMindExpressionCompiler(_classFactory));
-        
-        _contextPool = new GenericObjectPool(new PoolableOgnlContextFactory(_ognlResolver, _typeConverter));
-
-        _contextPool.setMaxActive(-1);
-        _contextPool.setMaxIdle(-1);
-        _contextPool.setMinEvictableIdleTimeMillis(POOL_MIN_IDLE_TIME);
-        _contextPool.setTimeBetweenEvictionRunsMillis(POOL_SLEEP_TIME);
-    }
-
-    public Object read(Object target, String expression)
-    {
-        Node node = (Node)_expressionCache.getCompiledExpression(target, expression);
-        
-        if (node.getAccessor() != null)
-            return read(target, node.getAccessor());
-        
-        return readCompiled(target, node);
-    }
-
-    public Object readCompiled(Object target, Object expression)
-    {
-        OgnlContext context = null;
-        try
-        {
-            context = (OgnlContext)_contextPool.borrowObject();
-            context.setRoot(target);
-
-            return Ognl.getValue(expression, context, target);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.unableToReadExpression(ImplMessages
-                    .parsedExpression(), target, ex), target, null, ex);
-        } finally {
-            try { if (context != null) _contextPool.returnObject(context); } catch (Exception e) {}
-        }
-    }
-    
-    public Object read(Object target, ExpressionAccessor expression)
-    {
-        OgnlContext context = null;
-        try
-        {
-            context = (OgnlContext)_contextPool.borrowObject();
-            
-            return expression.get(context, target);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.unableToReadExpression(ImplMessages
-                    .parsedExpression(), target, ex), target, null, ex);
-        } finally {
-            try { if (context != null) _contextPool.returnObject(context); } catch (Exception e) {}
-        }
-    }
-    
-    public OgnlContext createContext(Object target)
-    {
-        OgnlContext result = (OgnlContext)Ognl.createDefaultContext(target, _ognlResolver);
-
-        if (_typeConverter != null)
-            Ognl.setTypeConverter(result, _typeConverter);
-
-        return result;
-    }
-
-    public void write(Object target, String expression, Object value)
-    {
-        writeCompiled(target, _expressionCache.getCompiledExpression(target, expression), value);
-    }
-
-    public void write(Object target, ExpressionAccessor expression, Object value)
-    {
-        OgnlContext context = null;
-        try
-        {
-            context = (OgnlContext)_contextPool.borrowObject();
-            
-            expression.set(context, target, value);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.unableToWriteExpression(ImplMessages
-                    .parsedExpression(), target, value, ex), target, null, ex);
-        } finally {
-            try { if (context != null) _contextPool.returnObject(context); } catch (Exception e) {}
-        }
-    }
-    
-    public void writeCompiled(Object target, Object expression, Object value)
-    {
-        OgnlContext context = null;
-        try
-        {
-            context = (OgnlContext)_contextPool.borrowObject();
-
-            Ognl.setValue(expression, context, target, value);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.unableToWriteExpression(ImplMessages
-                    .parsedExpression(), target, value, ex), target, null, ex);
-        } finally {
-            try { if (context != null) _contextPool.returnObject(context); } catch (Exception e) {}
-        }
-    }
-    
-    public boolean isConstant(Object target, String expression)
-    {
-        Object compiled = _expressionCache.getCompiledExpression(target, expression);
-
-        try
-        {
-            return Ognl.isConstant(compiled, _defaultContext);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.isConstantExpressionError(
-                    expression,
-                    ex), ex);
-        }
-    }
-    
-    public boolean isConstant(String expression)
-    {
-        Object compiled = _expressionCache.getCompiledExpression(expression);
-
-        try
-        {
-            return Ognl.isConstant(compiled, _defaultContext);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.isConstantExpressionError(
-                    expression,
-                    ex), ex);
-        }
-    }
-
-    public void registryDidShutdown()
-    {
-        try
-        {
-            _contextPool.clear();
-            _contextPool.close();
-
-            OgnlRuntime.clearCache();
-            Introspector.flushCaches();
-            
-        } catch (Exception et) {
-            // ignore
-        }
-    }
-
-    public void setExpressionCache(ExpressionCache expressionCache)
-    {
-        _expressionCache = expressionCache;
-    }
-
-    public void setContributions(List contributions)
-    {
-        _contributions = contributions;
-    }
-    
-    public void setNullHandlerContributions(List nullHandlerContributions)
-    {
-        _nullHandlerContributions = nullHandlerContributions;
-    }    
-    
-    public void setClassFactory(ClassFactory classFactory)
-    {
-        _classFactory = classFactory;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExtensionLookupFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExtensionLookupFactory.java
deleted file mode 100644
index 86d3b8e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExtensionLookupFactory.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ServiceImplementationFactory;
-import org.apache.hivemind.ServiceImplementationFactoryParameters;
-import org.apache.hivemind.lib.DefaultImplementationBuilder;
-import org.apache.tapestry.spec.IApplicationSpecification;
-
-/**
- * An implementation of {@link org.apache.hivemind.ServiceImplementationFactory}that looks for a
- * service implementation provided as an
- * {@link org.apache.tapestry.spec.ILibrarySpecification#getExtension(String) application
- * extension}. If no such extension exists, then a
- * {@link org.apache.hivemind.lib.DefaultImplementationBuilder default implementation}is
- * constructed and returned instead. This allows compatibility with Tapestry 3.0 and earlier
- * application extensions (though those will be phased out in the future).
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ExtensionLookupFactory implements ServiceImplementationFactory
-{
-    private IApplicationSpecification _specification;
-
-    private DefaultImplementationBuilder _defaultBuilder;
-
-    public Object createCoreServiceImplementation(
-            ServiceImplementationFactoryParameters factorParameters)
-    {
-        ExtensionLookupParameter p = (ExtensionLookupParameter) factorParameters.getParameters()
-                .get(0);
-
-        String extensionName = p.getExtensionName();
-
-        Class serviceInterface = factorParameters.getServiceInterface();
-
-        try
-        {
-            if (_specification.checkExtension(extensionName))
-                return _specification.getExtension(extensionName, serviceInterface);
-
-            if (p.getDefault() != null)
-                return p.getDefault();
-
-            return _defaultBuilder.buildDefaultImplementation(serviceInterface);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), p.getLocation(), ex);
-        }
-    }
-
-    public void setDefaultBuilder(DefaultImplementationBuilder builder)
-    {
-        _defaultBuilder = builder;
-    }
-
-    public void setSpecification(IApplicationSpecification specification)
-    {
-        _specification = specification;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExtensionLookupParameter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExtensionLookupParameter.java
deleted file mode 100644
index 98756c9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExtensionLookupParameter.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- * Parameters to the {@link org.apache.tapestry.services.impl.ExtensionLookupFactory}
- * service implementation factory.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ExtensionLookupParameter extends BaseLocatable
-{
-    private String _extensionName;
-    private Object _default; 
-
-    public String getExtensionName()
-    {
-        return _extensionName;
-    }
-
-    public void setExtensionName(String string)
-    {
-        _extensionName = string;
-    }
-
-    public Object getDefault()
-    {
-        return _default;
-    }
-    
-    public void setDefault(Object defaultValue)
-    {
-        _default = defaultValue;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java
deleted file mode 100644
index 22cb68b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java
+++ /dev/null
@@ -1,467 +0,0 @@
-//Copyright 2004, 2005 The Apache Software Foundation
-
-//Licensed under the Apache License, Version 2.0 (the "License");
-//you may not use this file except in compliance with the License.
-//You may obtain a copy of the License at
-
-//http://www.apache.org/licenses/LICENSE-2.0
-
-//Unless required by applicable law or agreed to in writing, software
-//distributed under the License is distributed on an "AS IS" BASIS,
-//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//See the License for the specific language governing permissions and
-//limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import javassist.CannotCompileException;
-import javassist.NotFoundException;
-import ognl.*;
-import ognl.enhance.*;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.service.ClassFab;
-import org.apache.hivemind.service.ClassFabUtils;
-import org.apache.hivemind.service.ClassFactory;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.enhance.AbstractFab;
-
-import java.lang.reflect.Modifier;
-import java.util.*;
-
-/**
- * Adds to default ognl compiler class pools.
- *
- */
-public class HiveMindExpressionCompiler extends ExpressionCompiler implements OgnlExpressionCompiler {
-
-    private static final Log _log = LogFactory.getLog(HiveMindExpressionCompiler.class);
-
-    private ClassFactory _classFactory;
-
-    public HiveMindExpressionCompiler(ClassFactory classfactory)
-    {
-        _classFactory = classfactory;
-    }
-
-    public String getClassName(Class clazz)
-    {
-        if (IRender.class.isAssignableFrom(clazz) || Modifier.isPublic(clazz.getModifiers()))
-            return clazz.getName();
-
-        if (clazz.getName().equals("java.util.AbstractList$Itr"))
-            return Iterator.class.getName();
-
-        if (Modifier.isPublic(clazz.getModifiers()) && clazz.isInterface())
-            return clazz.getName();
-
-        Class[] intf = clazz.getInterfaces();
-
-        for (int i = 0; i < intf.length; i++)
-        {
-            if (intf[i].getName().indexOf("util.List") > 0)
-                return intf[i].getName();
-            else if (intf[i].getName().indexOf("Iterator") > 0)
-                return intf[i].getName();
-        }
-
-        if (clazz.getSuperclass() != null && clazz.getSuperclass().getInterfaces().length > 0)
-            return getClassName(clazz.getSuperclass());
-
-        return clazz.getName();
-    }
-
-    public Class getInterfaceClass(Class clazz)
-    {
-        if (IRender.class.isAssignableFrom(clazz) || clazz.isInterface()
-            || Modifier.isPublic(clazz.getModifiers()))
-            return clazz;
-
-        if (clazz.getName().equals("java.util.AbstractList$Itr"))
-            return Iterator.class;
-
-        if (Modifier.isPublic(clazz.getModifiers())
-            && clazz.isInterface() || clazz.isPrimitive())
-        {
-            return clazz;
-        }
-
-        Class[] intf = clazz.getInterfaces();
-
-        for (int i = 0; i < intf.length; i++)
-        {
-            if (List.class.isAssignableFrom(intf[i]))
-                return List.class;
-            else if (Iterator.class.isAssignableFrom(intf[i]))
-                return Iterator.class;
-            else if (Map.class.isAssignableFrom(intf[i]))
-                return Map.class;
-            else if (Set.class.isAssignableFrom(intf[i]))
-                return Set.class;
-            else if (Collection.class.isAssignableFrom(intf[i]))
-                return Collection.class;
-        }
-
-        if (clazz.getSuperclass() != null && clazz.getSuperclass().getInterfaces().length > 0)
-            return getInterfaceClass(clazz.getSuperclass());
-
-        return clazz;
-    }
-
-    public Class getRootExpressionClass(Node rootNode, OgnlContext context)
-    {
-        if (context.getRoot() == null)
-            return null;
-
-        Class ret = context.getRoot().getClass();
-
-        if (!IRender.class.isInstance(context.getRoot())
-            && context.getFirstAccessor() != null
-            && context.getFirstAccessor().isInstance(context.getRoot()))
-        {
-            ret = context.getFirstAccessor();
-        }
-
-        return ret;
-    }
-
-    public void compileExpression(OgnlContext context, Node expression, Object root)
-            throws Exception
-    {
-        if (_log.isDebugEnabled())
-            _log.debug("Compiling expr class " + expression.getClass().getName()
-                       + " and root " + root.getClass().getName() + " with toString:" + expression.toString());
-
-        synchronized (expression)
-        {
-            if (expression.getAccessor() != null)
-                return;
-
-            String getBody = null;
-            String setBody;
-            
-            MethodSignature valueGetter = new MethodSignature(Object.class, "get", new Class[]{OgnlContext.class, Object.class}, null);
-            MethodSignature valueSetter = new MethodSignature(void.class, "set", new Class[]{OgnlContext.class, Object.class, Object.class}, null);
-
-            CompiledExpression compiled = new CompiledExpression(expression, root, valueGetter, valueSetter);
-
-            MethodSignature expressionSetter = new MethodSignature(void.class, "setExpression", new Class[]{Node.class}, null);
-
-            // must evaluate expression value at least once if object isn't null
-
-            if (root != null)
-                Ognl.getValue(expression, context, root);
-
-            try
-            {
-                getBody = generateGetter(context, compiled);
-            } catch (UnsupportedCompilationException uc)
-            {
-                // uc.printStackTrace();
-                // The target object may not fully resolve yet because of a partial tree with a null somewhere, we
-                // don't want to bail out forever because it might be enhancable on another pass eventually
-                return;
-            } catch (javassist.CannotCompileException e)
-            {
-                _log.error("Error generating OGNL getter for expression " + expression + " with root " + root + " and body:\n" + getBody, e);
-
-                e.printStackTrace();
-
-                generateFailSafe(context, expression, root);
-                return;
-            }
-
-            try
-            {
-                generateClassFab(compiled).addMethod(Modifier.PUBLIC, valueGetter, getBody);
-            } catch (Throwable t)
-            {
-                _log.error("Error generating OGNL getter for expression " + expression + " with root " + root + " and body:\n" + getBody, t);
-
-                t.printStackTrace();
-
-                generateFailSafe(context, expression, root);
-                return;
-            }
-
-            try
-            {
-                setBody = generateSetter(context, compiled);
-            } catch (UnsupportedCompilationException uc)
-            {
-                //_log.warn("Unsupported setter compilation caught: " + uc.getMessage() + " for expression: " + expression.toString(), uc);
-
-                setBody = generateOgnlSetter(generateClassFab(compiled), valueSetter);
-
-                if (!generateClassFab(compiled).containsMethod(expressionSetter))
-                {
-                    generateClassFab(compiled).addField("_node", Node.class);
-                    generateClassFab(compiled).addMethod(Modifier.PUBLIC, expressionSetter, "{ _node = $1; }");
-                }
-            }
-
-            try
-            {
-                if (setBody == null)
-                {
-                    setBody = generateOgnlSetter(generateClassFab(compiled), valueSetter);
-
-                    if (!generateClassFab(compiled).containsMethod(expressionSetter))
-                    {
-                        generateClassFab(compiled).addField("_node", Node.class);
-                        generateClassFab(compiled).addMethod(Modifier.PUBLIC, expressionSetter, "{ _node = $1; }");
-                    }
-                }
-
-                if (setBody != null)
-                    generateClassFab(compiled).addMethod(Modifier.PUBLIC, valueSetter, setBody);
-
-                generateClassFab(compiled).addConstructor(new Class[0], new Class[0], "{}");
-
-                Class clazz = ((AbstractFab) generateClassFab(compiled)).createClass(true);
-
-                expression.setAccessor((ExpressionAccessor) clazz.newInstance());
-
-            }  catch (Throwable t)
-            {
-                _log.error("Error generating OGNL statements for expression " + expression + " with root " + root, t);
-                t.printStackTrace();
-
-                generateFailSafe(context, expression, root);
-                return;
-            }
-
-            // need to set expression on node if the field was just defined.
-
-            if (generateClassFab(compiled).containsMethod(expressionSetter))
-            {
-                expression.getAccessor().setExpression(expression);
-            }
-        }
-    }
-
-    ClassFab generateClassFab(CompiledExpression compiled)
-            throws Exception
-    {
-        if (compiled.getGeneratedClass() != null)
-            return compiled.getGeneratedClass();
-
-        ClassFab classFab = _classFactory.newClass(ClassFabUtils.generateClassName(compiled.getExpression().getClass()), Object.class);
-        classFab.addInterface(ExpressionAccessor.class);
-        
-        compiled.setGeneratedClass(classFab);
-
-        return classFab;
-    }
-
-    protected void generateFailSafe(OgnlContext context, Node expression, Object root)
-    {
-        if (expression.getAccessor() != null)
-            return;
-
-        try
-        {
-            ClassFab classFab = _classFactory.newClass(expression.getClass().getName() + expression.hashCode() + "Accessor", Object.class);
-            classFab.addInterface(ExpressionAccessor.class);
-
-            MethodSignature valueGetter = new MethodSignature(Object.class, "get", new Class[]{OgnlContext.class, Object.class}, null);
-            MethodSignature valueSetter = new MethodSignature(void.class, "set", new Class[]{OgnlContext.class, Object.class, Object.class}, null);
-
-            MethodSignature expressionSetter = new MethodSignature(void.class, "setExpression", new Class[]{Node.class}, null);
-
-            if (!classFab.containsMethod(expressionSetter))
-            {
-                classFab.addField("_node", Node.class);
-                classFab.addMethod(Modifier.PUBLIC, expressionSetter, "{ _node = $1; }");
-            }
-
-            classFab.addMethod(Modifier.PUBLIC, valueGetter, generateOgnlGetter(classFab, valueGetter));
-            classFab.addMethod(Modifier.PUBLIC, valueSetter, generateOgnlSetter(classFab, valueSetter));
-
-            classFab.addConstructor(new Class[0], new Class[0], "{}");
-
-            Class clazz = ((AbstractFab) classFab).createClass(true);
-
-            expression.setAccessor((ExpressionAccessor) clazz.newInstance());
-
-            // need to set expression on node if the field was just defined.
-
-            if (classFab.containsMethod(expressionSetter))
-            {
-                expression.getAccessor().setExpression(expression);
-            }
-
-        } catch (Throwable t)
-        {
-            t.printStackTrace();
-        }
-    }
-
-    protected String generateGetter(OgnlContext context, CompiledExpression compiled)
-            throws Exception
-    {
-        String pre = "";
-        String post = "";
-        String body;
-        String getterCode;
-
-        context.setRoot(compiled.getRoot());
-        context.setCurrentObject(compiled.getRoot());
-        context.remove(PRE_CAST);
-
-        try
-        {
-            getterCode = compiled.getExpression().toGetSourceString(context, compiled.getRoot());
-        } catch (NullPointerException e)
-        {
-            if (_log.isDebugEnabled())
-                _log.warn("NullPointer caught compiling getter, may be normal ognl method artifact.", e);
-
-            throw new UnsupportedCompilationException("Statement threw nullpointer.");
-        }
-
-        if (getterCode == null || getterCode.trim().length() <= 0
-                                  && !ASTVarRef.class.isAssignableFrom(compiled.getExpression().getClass()))
-        {
-            getterCode = "null";
-        }
-
-        String castExpression = (String) context.get(PRE_CAST);
-
-        if (context.getCurrentType() == null
-            || context.getCurrentType().isPrimitive()
-            || Character.class.isAssignableFrom(context.getCurrentType())
-            || Object.class == context.getCurrentType())
-        {
-            pre = pre + " ($w) (";
-            post = post + ")";
-        }
-
-        String rootExpr = !getterCode.equals("null") ? getRootExpression(compiled.getExpression(), compiled.getRoot(), context) : "";
-
-        String noRoot = (String) context.remove("_noRoot");
-        if (noRoot != null)
-            rootExpr = "";
-
-        createLocalReferences(context, generateClassFab(compiled), compiled.getGetterMethod().getParameterTypes());
-
-        if (OrderedReturn.class.isInstance(compiled.getExpression()) && ((OrderedReturn) compiled.getExpression()).getLastExpression() != null)
-        {
-            body = "{ "
-                   + (ASTMethod.class.isInstance(compiled.getExpression()) || ASTChain.class.isInstance(compiled.getExpression()) ? rootExpr : "")
-                   + (castExpression != null ? castExpression : "")
-                   + ((OrderedReturn) compiled.getExpression()).getCoreExpression()
-                   + " return " + pre + ((OrderedReturn) compiled.getExpression()).getLastExpression()
-                   + post
-                   + ";}";
-
-        } else
-        {
-            body = "{ return " + pre
-                   + (castExpression != null ? castExpression : "")
-                   + rootExpr
-                   + getterCode
-                   + post
-                   + ";}";
-        }
-
-        body = body.replaceAll("\\.\\.", ".");
-
-        if (_log.isDebugEnabled())
-            _log.debug("Getter Body: ===================================\n" + body);
-
-        return body;
-    }
-
-    void createLocalReferences(OgnlContext context, ClassFab classFab, Class[] params)
-            throws CannotCompileException, NotFoundException
-    {
-        Map referenceMap = context.getLocalReferences();
-        if (referenceMap == null || referenceMap.size() < 1)
-            return;
-
-        Iterator it = referenceMap.keySet().iterator();
-
-        while (it.hasNext())
-        {
-            String key = (String) it.next();
-            LocalReference ref = (LocalReference) referenceMap.get(key);
-
-            String widener = ref.getType().isPrimitive() ? " " : " ($w) ";
-
-            String body = "{";
-            body += " return  " + widener + ref.getExpression() + ";";
-            body += "}";
-
-            body = body.replaceAll("\\.\\.", ".");
-
-            if (_log.isDebugEnabled())
-                _log.debug("createLocalReferences() body is:\n" + body);
-
-            MethodSignature method = new MethodSignature(ref.getType(), ref.getName(), params, null);
-            classFab.addMethod(Modifier.PUBLIC, method, body);
-
-            it.remove();
-        }
-    }
-
-    protected String generateSetter(OgnlContext context, CompiledExpression compiled)
-            throws Exception
-    {
-        if (ExpressionNode.class.isInstance(compiled.getExpression())
-            || ASTConst.class.isInstance(compiled.getExpression()))
-            throw new UnsupportedCompilationException("Can't compile expression/constant setters.");
-
-        context.setRoot(compiled.getRoot());
-        context.setCurrentObject(compiled.getRoot());
-        context.remove(PRE_CAST);
-
-        String body;
-
-        String setterCode = compiled.getExpression().toSetSourceString(context, compiled.getRoot());
-        String castExpression = (String) context.get(PRE_CAST);
-
-        if (setterCode == null || setterCode.trim().length() < 1)
-            throw new UnsupportedCompilationException("Can't compile null setter body.");
-
-        if (compiled.getRoot() == null)
-            throw new UnsupportedCompilationException("Can't compile setters with a null root object.");
-
-        String pre = getRootExpression(compiled.getExpression(), compiled.getRoot(), context);
-
-        String noRoot = (String) context.remove("_noRoot");
-        if (noRoot != null)
-            pre = "";
-
-        String setterValue = (String) context.remove("setterConversion");
-        if (setterValue == null)
-            setterValue = "";
-
-        createLocalReferences(context, generateClassFab(compiled), compiled.getSettermethod().getParameterTypes());
-
-        body = "{"
-               + setterValue
-               + (castExpression != null ? castExpression : "")
-               + pre
-               + setterCode + ";}";
-
-        body = body.replaceAll("\\.\\.", ".");
-
-        if (_log.isDebugEnabled())
-            _log.debug("Setter Body: ===================================\n" + body);
-
-        return body;
-    }
-
-    String generateOgnlGetter(ClassFab newClass, MethodSignature valueGetter)
-            throws Exception
-    {
-        return "{ return _node.getValue($1, $2); }";
-    }
-
-    String generateOgnlSetter(ClassFab newClass, MethodSignature valueSetter)
-            throws Exception
-    {
-        return "{ _node.setValue($1, $2, $3); }";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ImplMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ImplMessages.java
deleted file mode 100644
index c5faad9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ImplMessages.java
+++ /dev/null
@@ -1,290 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Locale;
-
-import javax.servlet.http.HttpServlet;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.parse.OpenToken;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-
-/**
- * @author Howard Lewis Ship
- * @since 4.0
- */
-final class ImplMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(ImplMessages.class);
-
-    /* defeat instantiation */
-    private ImplMessages() { }
-    
-    static String unknownRequest()
-    {
-        return _formatter.getMessage("unknown-request");
-    }
-    
-    static String initializerContribution()
-    {
-        return _formatter.getMessage("initializer-contribution");
-    }
-
-    static String noApplicationSpecification(HttpServlet servlet)
-    {
-        return _formatter.format("no-application-specification", servlet.getServletName());
-    }
-
-    static String errorInstantiatingEngine(Class engineClass, Throwable cause)
-    {
-        return _formatter.format("error-instantiating-engine", engineClass.getName(), cause);
-    }
-
-    static String noTemplateForComponent(String componentId, Locale locale)
-    {
-        return _formatter.format("no-template-for-component", componentId, locale);
-    }
-
-    static String noTemplateForPage(String pageName, Locale locale)
-    {
-        return _formatter.format("no-template-for-page", pageName, locale);
-    }
-
-    static String unableToReadTemplate(Object template)
-    {
-        return _formatter.format("unable-to-read-template", template);
-    }
-
-    static String unableToParseTemplate(Resource resource)
-    {
-        return _formatter.format("unable-to-parse-template", resource);
-    }
-
-    static String unableToParseSpecification(Resource resource)
-    {
-        return _formatter.format("unable-to-parse-specification", resource);
-    }
-
-    static String unableToReadInfrastructureProperty(String propertyName, Infrastructure service,
-            Throwable cause)
-    {
-        return _formatter.format(
-                "unable-to-read-infrastructure-property",
-                propertyName,
-                service,
-                cause);
-    }
-
-    static String multipleComponentReferences(IComponent component, String id)
-    {
-        return _formatter.format("multiple-component-references", component.getExtendedId(), id);
-    }
-
-    static String dupeComponentId(String id, IContainedComponent containedComponent)
-    {
-        return _formatter.format("dupe-component-id", id, HiveMind
-                .getLocationString(containedComponent));
-    }
-
-    static String unbalancedCloseTags()
-    {
-        return _formatter.getMessage("unbalanced-close-tags");
-    }
-
-    static String templateBindingForInformalParameter(IComponent loadComponent,
-            String parameterName, IComponent component)
-    {
-        return _formatter.format("template-binding-for-informal-parameter", loadComponent
-                .getExtendedId(), parameterName, component.getExtendedId());
-    }
-
-    static String templateBindingForReservedParameter(IComponent loadComponent,
-            String parameterName, IComponent component)
-    {
-        return _formatter.format("template-binding-for-reserved-parameter", loadComponent
-                .getExtendedId(), parameterName, component.getExtendedId());
-    }
-
-    static String missingComponentSpec(IComponent component, Collection ids)
-    {
-        StringBuffer buffer = new StringBuffer();
-        List idList = new ArrayList(ids);
-        int count = idList.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            if (i > 0)
-                buffer.append(", ");
-
-            buffer.append(idList.get(i));
-        }
-
-        return _formatter.format("missing-component-spec", component.getExtendedId(), new Integer(
-                count), buffer.toString());
-    }
-
-    static String bodylessComponent()
-    {
-        return _formatter.getMessage("bodyless-component");
-    }
-
-    static String dupeTemplateBinding(String name, IComponent component, IComponent loadComponent)
-    {
-        return _formatter.format(
-                "dupe-template-binding",
-                name,
-                component.getExtendedId(),
-                loadComponent.getExtendedId());
-    }
-
-    static String unableToLoadProperties(URL url, Throwable cause)
-    {
-        return _formatter.format("unable-to-load-properties", url, cause);
-    }
-
-    static String noSuchService(String name)
-    {
-        return _formatter.format("no-such-service", name);
-    }
-
-    static String dupeService(String name, EngineServiceContribution existing)
-    {
-        return _formatter.format("dupe-service", name, HiveMind.getLocationString(existing));
-    }
-
-    static String unableToParseExpression(String expression, Throwable cause)
-    {
-        return _formatter.format("unable-to-parse-expression", expression, cause);
-    }
-
-    static String parsedExpression()
-    {
-        return _formatter.getMessage("parsed-expression");
-    }
-
-    static String unableToReadExpression(String expression, Object target, Throwable cause)
-    {
-        return _formatter.format("unable-to-read-expression", expression, target, cause);
-    }
-
-    static String unableToWriteExpression(String expression, Object target, Object value,
-            Throwable cause)
-    {
-        return _formatter.format("unable-to-write-expression", new Object[]
-        { expression, target, value, cause });
-    }
-
-    static String isConstantExpressionError(String expression, Exception ex)
-    {
-        return _formatter.format("is-constant-expression-error", expression, ex);
-    }
-
-    static String templateParameterName(String name)
-    {
-        return _formatter.format("template-parameter-name", name);
-    }
-
-    static String componentPropertySourceDescription(IComponentSpecification spec)
-    {
-        return _formatter.format("component-property-source-description", spec
-                .getSpecificationLocation());
-    }
-
-    static String namespacePropertySourceDescription(INamespace namespace)
-    {
-        return _formatter
-                .format("namespace-property-source-description", namespace.getExtendedId());
-    }
-
-    static String invalidEncoding(String encoding, Throwable cause)
-    {
-        return _formatter.format("invalid-encoding", encoding, cause);
-    }
-
-    static String errorResetting(Throwable cause)
-    {
-        return _formatter.format("error-resetting", cause);
-    }
-
-    static String engineServiceInnerProxyToString(String serviceName)
-    {
-        return _formatter.format("engine-service-inner-proxy-to-string", serviceName);
-    }
-
-    static String engineServiceOuterProxyToString(String serviceName)
-    {
-        return _formatter.format("engine-service-outer-proxy-to-string", serviceName);
-    }
-
-    static String serviceNameMismatch(IEngineService service, String expectedName, String actualName)
-    {
-        return _formatter.format("service-name-mismatch", service, expectedName, actualName);
-    }
-
-    static String infrastructureAlreadyInitialized(String newMode, String initializedMode)
-    {
-        return _formatter.format("infrastructure-already-initialized", newMode, initializedMode);
-    }
-
-    static String duplicateInfrastructureContribution(InfrastructureContribution conflict,
-            Location existingLocation)
-    {
-        return _formatter.format(
-                "duplicate-infrastructure-contribution",
-                conflict.getProperty(),
-                conflict.getMode(),
-                existingLocation);
-    }
-
-    static String infrastructureNotInitialized()
-    {
-        return _formatter.getMessage("infrastructure-not-initialized");
-    }
-
-    static String missingInfrastructureProperty(String propertyName)
-    {
-        return _formatter.format("missing-infrastructure-property", propertyName);
-    }
-
-    public static String usedTemplateParameterAlias(OpenToken token, String attributeName,
-            String parameterName)
-    {
-        return _formatter.format("used-template-parameter-alias", new Object[]
-        { HiveMind.getLocationString(token), token.getType(), attributeName, parameterName });
-    }
-
-    static String engineClassNotFound(String engineClassName)
-    {
-        return _formatter.format("engine-class-not-found", engineClassName);
-    }
-
-    static String serviceNameIsNull()
-    {
-        return _formatter.getMessage("service-name-is-null");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ImplStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ImplStrings.properties
deleted file mode 100644
index cc48974..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ImplStrings.properties
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-initializer-contribution=application initializer
-no-application-specification=Could not find an application specification for application servlet {0}.
-error-instantiating-engine=Unable to instantiate engine as instance of class {0}: {1}
-
-no-template-for-component=Could not find template for component {0} in locale {1}.
-no-template-for-page=Could not find template for page {0} in locale {1}.
-unable-to-parse-template=Could not parse template {0}.
-unable-to-read-template=Could not read template {0}.
-
-unable-to-parse-specification=Could not parse specification {0}.
-
-unable-to-read-infrastructure-property=Unable to read property ''{0}'' of {1}: {2}
-
-multiple-component-references=Template for component {0} contains multiple references to embedded component {1}.
-
-dupe-component-id=Component {0} conflicts with a prior declaration in the specification (at {1}).
-unbalanced-close-tags=More closing tags the open tags in template.
-template-binding-for-informal-parameter=The template for {0} contains a binding for parameter ''{1}'' of component {2}, which does not allow informal parameters.
-template-binding-for-reserved-parameter=The template for {0} contains a binding for parameter ''{1}'' of component {2}, which is a reserved parameter name.
-dupe-template-binding=A binding for parameter ''{0}'' of component {1} in the template for {2} conflicts with an existing binding in the specification.
-bodyless-component=This component may not have a body.
-missing-component-spec=Template for component {0} does not reference embedded {1,choice,1#component|1<components}: {2}.
-unable-to-load-properties=Unable to load properties from {0}: {1}
-
-no-such-service=No engine service named ''{0}'' is available.
-dupe-service=Engine service ''{0}'' has already been defined (at {1}); this contribution has been ignored.
-
-unable-to-parse-expression=Unable to parse OGNL expression ''{0}'': {1}
-unable-to-read-expression=Unable to read OGNL expression ''{0}'' of {1}: {2}
-parsed-expression=<parsed OGNL expression>
-unable-to-write-expression=Unable to update OGNL expression ''{0}'' of {1} to {2}: {3}
-is-constant-expression-error=Error evaluating OGNL expression ''{0}'': {1}
-template-parameter-name=template parameter {0}
-template-tag-parameter-name=implicit template tag parameter
-
-component-property-source-description=<PropertySource for {0}>
-namespace-property-source-description=<PropertySource for namespace {0}>
-
-invalid-encoding=Unable to set request character encoding to ''{0}'': {1}
-error-resetting=Error resetting cached data at end of request: {0}
-engine-service-outer-proxy-to-string=<OuterProxy for engine service ''{0}''>
-engine-service-inner-proxy-to-string=<InnerProxy for engine service ''{0}''>
-service-name-mismatch=Engine service {0} is mapped to name ''{1}'' but indicates a name of ''{2}''.
-infrastructure-already-initialized=The Infrastructure service can not be initialized for mode ''{0}'', it has already been initialized for mode ''{1}''.  The Infrastructure may only be initialized once.
-infrastructure-not-initialized=The Infrastructure service has not yet been initialized.
-duplicate-infrastructure-contribution=Infrastructure contribution for property ''{0}'' (mode ''{1}'') conflicts with a prior contribution (at {2}) and has been ignored.
-missing-infrastructure-property=Infrastructure property ''{0}'' is not defined.
-used-template-parameter-alias=Parameter {2} (for component {1}, at {0}) was bound; this parameter has been deprecated, bind parameter {3} instead.
-engine-class-not-found=Engine class ''{0}'' not found.
-service-name-is-null=The service name is null.  Engine services must implement method getServiceName() and return a non-null value.
-
-unknown-request=Unable to find a suitable ResponseBuilder for the incoming request.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InfrastructureContribution.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InfrastructureContribution.java
deleted file mode 100644
index cacdca8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InfrastructureContribution.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- * A contribution to the {@link org.apache.tapestry.services.Infrastructure}&nbsp;service. Defines
- * a property of Infrastructure and the value for that property. The infrastructure is setup in a
- * <em>mode</em> (currently, either "servlet" or "portlet"). Contributions that define a non-null
- * mode are ignored unless their mode matches the Infrastructure mode.
- * <p>
- * There are two configuration points that control Infrastructure:
- * <code>tapestry.Infrastructure</code> and <code>tapestry.InfrastructureOverride</code>.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InfrastructureContribution extends BaseLocatable
-{
-    private String _property;
-
-    private String _mode;
-
-    private DeferredObject _deferredObject;
-
-    public void setDeferredObject(DeferredObject deferredObject)
-    {
-        _deferredObject = deferredObject;
-    }
-
-    public void setValue(String value)
-    {
-        _deferredObject = new LiteralDeferredObject(value, getLocation());
-    }
-
-    /**
-     * The object which should be exposed as the given Infrastructure property.
-     */
-    public Object getObject()
-    {
-        return _deferredObject.getObject();
-    }
-
-    /**
-     * The mode for which this contribution applies, or null if the contribution applies to all
-     * modes.
-     */
-
-    public String getMode()
-    {
-        return _mode;
-    }
-
-    public void setMode(String mode)
-    {
-        _mode = mode;
-    }
-
-    /**
-     * The property of the {@link org.apache.tapestry.services.Infrastructure}for which a value is
-     * to be provided.
-     */
-
-    public String getProperty()
-    {
-        return _property;
-    }
-
-    public void setProperty(String property)
-    {
-        _property = property;
-    }
-
-    public boolean matchesMode(String mode)
-    {
-        // If our mode is null, then we only match null.
-
-        if (_mode == mode)
-            return true;
-
-        // Otherwise, match our non-null model against their possibly-null mode.
-
-        return _mode != null && _mode.equals(mode);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InfrastructureImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InfrastructureImpl.java
deleted file mode 100644
index bd05987..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InfrastructureImpl.java
+++ /dev/null
@@ -1,402 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.service.ThreadLocale;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.describe.HTMLDescriber;
-import org.apache.tapestry.engine.IPageSource;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.engine.state.ApplicationStateManager;
-import org.apache.tapestry.error.ExceptionPresenter;
-import org.apache.tapestry.error.RequestExceptionReporter;
-import org.apache.tapestry.error.StaleLinkExceptionPresenter;
-import org.apache.tapestry.error.StaleSessionExceptionPresenter;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.listener.ListenerMapSource;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.services.*;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.web.WebContext;
-import org.apache.tapestry.web.WebContextResource;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-import java.util.*;
-
-/**
- * Allows access to selected HiveMind services.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class InfrastructureImpl implements Infrastructure
-{
-    /**
-     * List of {@link org.apache.tapestry.services.impl.InfrastructureContribution}.
-     */
-    private List _normalContributions;
-
-    /**
-     * List of {@link org.apache.tapestry.services.impl.InfrastructureContribution}.
-     */
-    private List _overrideContributions;
-
-    private Map _properties = new HashMap();
-
-    private boolean _initialized;
-
-    private String _mode;
-
-    private ErrorLog _errorLog;
-
-    private ClassResolver _classResolver;
-
-    private ThreadLocale _threadLocale;
-
-    private String _outputEncoding;
-
-    private RequestLocaleManager _localeManager;
-
-    public void setLocale(Locale locale)
-    {
-        _threadLocale.setLocale(locale);
-        
-        _localeManager.persistLocale();
-    }
-
-    public String getApplicationId()
-    {
-        return (String) getProperty("applicationId");
-    }
-
-    public IPropertySource getApplicationPropertySource()
-    {
-        return (IPropertySource) getProperty("applicationPropertySource");
-    }
-
-    public IApplicationSpecification getApplicationSpecification()
-    {
-        return (IApplicationSpecification) getProperty("applicationSpecification");
-    }
-
-    public ApplicationStateManager getApplicationStateManager()
-    {
-        return (ApplicationStateManager) getProperty("applicationStateManager");
-    }
-
-    public ClassResolver getClassResolver()
-    {
-        return _classResolver;
-    }
-
-    public ComponentMessagesSource getComponentMessagesSource()
-    {
-        return (ComponentMessagesSource) getProperty("componentMessagesSource");
-    }
-
-    public ComponentPropertySource getComponentPropertySource()
-    {
-        return (ComponentPropertySource) getProperty("componentPropertySource");
-    }
-
-    public String getContextPath()
-    {
-        return getRequest().getContextPath();
-    }
-
-    public Resource getContextRoot()
-    {
-        WebContext context = (WebContext) getProperty("context");
-
-        return new WebContextResource(context, "/");
-    }
-
-    public DataSqueezer getDataSqueezer()
-    {
-        return (DataSqueezer) getProperty("dataSqueezer");
-    }
-
-    public IPropertySource getGlobalPropertySource()
-    {
-        return (IPropertySource) getProperty("globalPropertySource");
-    }
-
-    public LinkFactory getLinkFactory()
-    {
-        return (LinkFactory) getProperty("linkFactory");
-    }
-
-    public ObjectPool getObjectPool()
-    {
-        return (ObjectPool) getProperty("objectPool");
-    }
-
-    public IPageSource getPageSource()
-    {
-        return (IPageSource) getProperty("pageSource");
-    }
-
-    public WebRequest getRequest()
-    {
-        return (WebRequest) getProperty("request");
-    }
-
-    public RequestCycleFactory getRequestCycleFactory()
-    {
-        return (RequestCycleFactory) getProperty("requestCycleFactory");
-    }
-
-    public RequestExceptionReporter getRequestExceptionReporter()
-    {
-        return (RequestExceptionReporter) getProperty("requestExceptionReporter");
-    }
-
-    public ResetEventHub getResetEventHub()
-    {
-        return (ResetEventHub) getProperty("resetEventHub");
-    }
-
-    public WebResponse getResponse()
-    {
-        return (WebResponse) getProperty("response");
-    }
-
-    public ResponseRenderer getResponseRenderer()
-    {
-        return (ResponseRenderer) getProperty("responseRenderer");
-    }
-
-    public IScriptSource getScriptSource()
-    {
-        return (IScriptSource) getProperty("scriptSource");
-    }
-
-    public ServiceMap getServiceMap()
-    {
-        return (ServiceMap) getProperty("serviceMap");
-    }
-
-    public ISpecificationSource getSpecificationSource()
-    {
-        return (ISpecificationSource) getProperty("specificationSource");
-    }
-
-    public TemplateSource getTemplateSource()
-    {
-        return (TemplateSource) getProperty("templateSource");
-    }
-
-    public String getOutputEncoding()
-    {
-        if (_outputEncoding != null)
-            return _outputEncoding;
-
-        _outputEncoding = getApplicationPropertySource().getPropertyValue("org.apache.tapestry.output-encoding");
-        
-        return _outputEncoding;
-    }
-
-    public MarkupWriterSource getMarkupWriterSource()
-    {
-        return (MarkupWriterSource) getProperty("markupWriterSource");
-    }
-
-    public HTMLDescriber getHTMLDescriber()
-    {
-        return (HTMLDescriber) getProperty("HTMLDescriber");
-    }
-
-    public ExceptionPresenter getExceptionPresenter()
-    {
-        return (ExceptionPresenter) getProperty("exceptionPresenter");
-    }
-
-    public ListenerMapSource getListenerMapSource()
-    {
-        return (ListenerMapSource) getProperty("listenerMapSource");
-    }
-
-    public StaleSessionExceptionPresenter getStaleSessionExceptionPresenter()
-    {
-        return (StaleSessionExceptionPresenter) getProperty("staleSessionExceptionPresenter");
-    }
-
-    public StaleLinkExceptionPresenter getStaleLinkExceptionPresenter()
-    {
-        return (StaleLinkExceptionPresenter) getProperty("staleLinkExceptionPresenter");
-    }
-
-    public ValueConverter getValueConverter()
-    {
-        return (ValueConverter) getProperty("valueConverter");
-    }
-
-    public ListenerInvoker getListenerInvoker()
-    {
-        return (ListenerInvoker) getProperty("listenerInvoker");
-    }
-
-    public AssetFactory getAssetFactory()
-    {
-        return (AssetFactory) getProperty("assetFactory");
-    }
-
-    public CookieSource getCookieSource()
-    {
-        return (CookieSource) getProperty("cookieSource");
-    }
-
-    public ClassFinder getClassFinder()
-    {
-        return (ClassFinder) getProperty("classFinder");
-    }
-
-    public IRequestCycle getRequestCycle()
-    {
-        return (IRequestCycle) getProperty("requestCycle");
-    }
-
-    public Object getProperty(String propertyName)
-    {
-        Defense.notNull(propertyName, "propertyName");
-
-        if (!_initialized)
-            throw new IllegalStateException(ImplMessages.infrastructureNotInitialized());
-
-        Object result = _properties.get(propertyName);
-
-        if (result == null)
-            throw new ApplicationRuntimeException(ImplMessages.missingInfrastructureProperty(propertyName));
-
-        return result;
-    }
-
-    public synchronized void initialize(String mode)
-    {
-        Defense.notNull(mode, "mode");
-
-        if (_initialized)
-            throw new IllegalStateException(ImplMessages.infrastructureAlreadyInitialized(
-                    mode,
-                    _mode));
-
-        Map normalByMode = buildMapFromContributions(_normalContributions, mode);
-        Map normal = buildMapFromContributions(_normalContributions, null);
-        Map overrideByMode = buildMapFromContributions(_overrideContributions, mode);
-        Map override = buildMapFromContributions(_overrideContributions, null);
-
-        addToProperties(overrideByMode);
-        addToProperties(override);
-        addToProperties(normalByMode);
-        addToProperties(normal);
-
-        _mode = mode;
-        _initialized = true;
-    }
-
-    private Map buildMapFromContributions(List contributions, String mode)
-    {
-        Map result = new HashMap();
-
-        Iterator i = contributions.iterator();
-        while (i.hasNext())
-        {
-            InfrastructureContribution ic = (InfrastructureContribution) i.next();
-
-            if (!ic.matchesMode(mode))
-                continue;
-
-            String propertyName = ic.getProperty();
-
-            InfrastructureContribution existing = (InfrastructureContribution) result
-                    .get(propertyName);
-
-            if (existing != null)
-            {
-                _errorLog.error(ImplMessages.duplicateInfrastructureContribution(ic, existing
-                        .getLocation()), ic.getLocation(), null);
-                continue;
-            }
-
-            result.put(propertyName, ic);
-        }
-
-        return result;
-    }
-
-    /**
-     * Adds to the master set of properties contributed objects that don't match an already existing
-     * key.
-     * 
-     * @param map
-     *            map of {@link org.apache.tapestry.services.impl.InfrastructureContribution}keyed
-     *            on property name (String).
-     */
-
-    private void addToProperties(Map map)
-    {
-        Iterator i = map.values().iterator();
-        while (i.hasNext())
-        {
-            InfrastructureContribution ic = (InfrastructureContribution) i.next();
-            String propertyName = ic.getProperty();
-
-            if (_properties.containsKey(propertyName))
-                continue;
-
-            _properties.put(propertyName, ic.getObject());
-        }
-    }
-
-    public void setClassResolver(ClassResolver classResolver)
-    {
-        _classResolver = classResolver;
-    }
-
-    public void setThreadLocale(ThreadLocale threadLocale)
-    {
-        _threadLocale = threadLocale;
-    }
-
-    public void setNormalContributions(List normalContributions)
-    {
-        _normalContributions = normalContributions;
-    }
-
-    public void setOverrideContributions(List overrideContributions)
-    {
-        _overrideContributions = overrideContributions;
-    }
-
-    public void setLocaleManager(RequestLocaleManager manager)
-    {
-        _localeManager = manager;
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InfrastructureObjectProvider.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InfrastructureObjectProvider.java
deleted file mode 100644
index f51469c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InfrastructureObjectProvider.java
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.internal.Module;
-import org.apache.hivemind.service.ObjectProvider;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.services.Infrastructure;
-
-/**
- * An ObjectProvider that streamlines access to the central
- * {@link org.apache.tapestry.services.Infrastructure}object. The locator for this provider is the
- * name of a property of the Infrastructure.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-public class InfrastructureObjectProvider implements ObjectProvider
-{
-    private ErrorLog _errorLog;
-
-    private Infrastructure _infrastructure;
-
-    private Map _cache = new HashMap();
-
-    public synchronized Object provideObject(Module contributingModule, Class propertyType,
-            String locator, Location location)
-    {
-        Object result = _cache.get(locator);
-
-        if (result == null)
-        {
-            result = readProperty(locator, location);
-            _cache.put(locator, result);
-        }
-
-        return result;
-    }
-
-    Object readProperty(String locator, Location location)
-    {
-        try
-        {            
-            if (PropertyUtils.isReadable(_infrastructure, locator))
-                return PropertyUtils.read(_infrastructure, locator);
-
-            return _infrastructure.getProperty(locator);
-        }
-        catch (Throwable ex)
-        {
-            _errorLog.error(ImplMessages.unableToReadInfrastructureProperty(
-                    locator,
-                    _infrastructure,
-                    ex), location, ex);
-
-            return null;
-        }
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-
-    public void setInfrastructure(Infrastructure infrastructure)
-    {
-        _infrastructure = infrastructure;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InitializationParameterHolderPropertySource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InitializationParameterHolderPropertySource.java
deleted file mode 100644
index 2e3e4cf..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InitializationParameterHolderPropertySource.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.web.InitializationParameterHolder;
-
-/**
- * Searches for property values inside objects that implement {@link org.apache.tapestry.web.InitializationParameterHolder}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class InitializationParameterHolderPropertySource implements IPropertySource
-{
-    private InitializationParameterHolder _holder;
-
-    public String getPropertyValue(String propertyName)
-    {
-        return _holder.getInitParameterValue(propertyName);
-    }
-
-    public void setHolder(InitializationParameterHolder holder)
-    {
-        _holder = holder;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InjectedValueProviderFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InjectedValueProviderFactory.java
deleted file mode 100644
index 24660bb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InjectedValueProviderFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ServiceImplementationFactory;
-import org.apache.hivemind.ServiceImplementationFactoryParameters;
-import org.apache.hivemind.internal.Module;
-import org.apache.hivemind.schema.Translator;
-
-/**
- * A special-purpose factory for constructing the
- * {@link org.apache.tapestry.services.InjectedValueProvider} service (which needs access to a
- * {@link Module} which is normally not visible.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectedValueProviderFactory implements ServiceImplementationFactory
-{
-    private Translator _objectTranslator;
-
-    public Object createCoreServiceImplementation(ServiceImplementationFactoryParameters parameters)
-    {
-        // The invoking module here is the tapestry module
-
-        return new InjectedValueProviderImpl(parameters.getInvokingModule(), _objectTranslator);
-    }
-
-    public void setObjectTranslator(Translator objectTranslator)
-    {
-        _objectTranslator = objectTranslator;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InjectedValueProviderImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InjectedValueProviderImpl.java
deleted file mode 100644
index e2b1d2f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InjectedValueProviderImpl.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.internal.Module;
-import org.apache.hivemind.schema.Translator;
-import org.apache.tapestry.services.InjectedValueProvider;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectedValueProviderImpl implements InjectedValueProvider
-{
-    private Module _module;
-
-    private Translator _objectTranslator;
-
-    /**
-     * Creates a new value provider.
-     * @param module
-     * @param objectTranslator
-     */
-    public InjectedValueProviderImpl(Module module, Translator objectTranslator)
-    {
-        _module = module;
-        _objectTranslator = objectTranslator;
-    }
-    
-    /**
-     * Deletegates out to
-     * {@link Translator#translate(org.apache.hivemind.internal.Module, java.lang.Class, java.lang.String, org.apache.hivemind.Location)} .
-     */
-    public Object obtainValue(String locator, Location location)
-    {
-        return _objectTranslator.translate(_module, Object.class, locator, location);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InvokeEngineTerminator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InvokeEngineTerminator.java
deleted file mode 100644
index 4765d6f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/InvokeEngineTerminator.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.io.IOException;
-
-import org.apache.tapestry.Constants;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.services.EngineManager;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.services.WebRequestServicer;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-/**
- * The terminatior for the <code>tapestry.RequestProcessor</code> pipeline, this service is
- * responsible for:
- * <ul>
- * <li>Locating the correct engine instance and letting it to the rest of the request.
- * <li>Returning the engine instance to the pool at the end of the request. </ul>
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class InvokeEngineTerminator implements WebRequestServicer
-{
-    private EngineManager _engineManager;
-
-    private Infrastructure _infrastructure;
-
-    public void service(WebRequest request, WebResponse response) throws IOException
-    {
-        IEngine engine = _engineManager.getEngineInstance();
-        
-        // Until we can inject the infrastructure into the engine
-        // we do this to let the engine know about it.
-
-        request.setAttribute(Constants.INFRASTRUCTURE_KEY, _infrastructure);
-
-        try
-        {
-            engine.service(request, response);
-        }
-        finally
-        {
-            _engineManager.storeEngineInstance(engine);
-        }
-
-    }
-
-    public void setEngineManager(EngineManager manager)
-    {
-        _engineManager = manager;
-    }
-
-    public void setInfrastructure(Infrastructure infrastructure)
-    {
-        _infrastructure = infrastructure;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java
deleted file mode 100644
index b20f84a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java
+++ /dev/null
@@ -1,459 +0,0 @@
-// Copyright Mar 18, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.json.IJSONWriter;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.services.RequestLocaleManager;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.util.PageRenderSupportImpl;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Class that implements JSON responses in tapestry.
- *
- * @see <a href="http://json.org">json.org</a>
- * @author jkuhnert
- */
-public class JSONResponseBuilder implements ResponseBuilder
-{
-    /** Writer that creates JSON output response. */
-    protected IJSONWriter _writer;
-    /** Passed in to bypass normal rendering. */
-    protected IMarkupWriter _nullWriter = NullWriter.getSharedInstance();
-
-    /** Parts that will be updated. */
-    protected List _parts = new ArrayList();
-
-    protected RequestLocaleManager _localeManager;
-    protected MarkupWriterSource _markupWriterSource;
-
-    private WebResponse _response;
-
-    private ContentType _contentType;
-
-    private final AssetFactory _assetFactory;
-
-    private final String _namespace;
-
-    private PageRenderSupportImpl _prs;
-
-    private IRequestCycle _cycle;
-
-    /**
-     * Creates a new response builder with the required services it needs
-     * to render the response when {@link #renderResponse(IRequestCycle)} is called.
-     *
-     * @param localeManager
-     *          Used to set the locale on the response.
-     * @param markupWriterSource
-     *          Creates IJSONWriter instance to be used.
-     * @param webResponse
-     *          Web response for output stream.
-     */
-    public JSONResponseBuilder(IRequestCycle cycle, RequestLocaleManager localeManager,
-                               MarkupWriterSource markupWriterSource,
-                               WebResponse webResponse, WebRequest request, AssetFactory assetFactory, String namespace)
-    {
-        Defense.notNull(cycle, "cycle");
-
-        _cycle = cycle;
-        _localeManager = localeManager;
-        _markupWriterSource = markupWriterSource;
-        _response = webResponse;
-
-        // Used by PageRenderSupport
-
-        _assetFactory = assetFactory;
-        _namespace = namespace;
-    }
-
-    /**
-     *
-     * {@inheritDoc}
-     */
-    public boolean isDynamic()
-    {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void renderResponse(IRequestCycle cycle)
-      throws IOException
-    {
-        _localeManager.persistLocale();
-
-        IPage page = cycle.getPage();
-
-        _contentType = page.getResponseContentType();
-
-        String encoding = _contentType.getParameter(ENCODING_KEY);
-
-        if (encoding == null)
-        {
-            encoding = cycle.getEngine().getOutputEncoding();
-
-            _contentType.setParameter(ENCODING_KEY, encoding);
-        }
-
-        if (_writer == null)
-        {
-            parseParameters(cycle);
-
-            PrintWriter printWriter = _response.getPrintWriter(_contentType);
-
-            _writer = _markupWriterSource.newJSONWriter(printWriter, _contentType);
-        }
-
-        // render response
-
-        _prs = new PageRenderSupportImpl(_assetFactory, _namespace, cycle.getPage().getLocation(), this);
-
-        TapestryUtils.storePageRenderSupport(cycle, _prs);
-
-        cycle.renderPage(this);
-
-        TapestryUtils.removePageRenderSupport(cycle);
-
-        flush();
-
-        _writer.close();
-    }
-
-    public void flush()
-      throws IOException
-    {
-        // Important - causes any cookies stored to properly be written out before the
-        // rest of the response starts being written - see TAPESTRY-825
-
-        _writer.flush();
-    }
-
-    /**
-     * Grabs the incoming parameters needed for json responses, most notable the
-     * {@link ServiceConstants#UPDATE_PARTS} parameter.
-     *
-     * @param cycle
-     *            The request cycle to parse from
-     */
-    protected void parseParameters(IRequestCycle cycle)
-    {
-        Object[] updateParts = cycle.getParameters(ServiceConstants.UPDATE_PARTS);
-
-        if (updateParts == null)
-            return;
-
-        for(int i = 0; i < updateParts.length; i++)
-            _parts.add(updateParts[i].toString());
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void render(IMarkupWriter writer, IRender render, IRequestCycle cycle)
-    {
-        if (IJSONRender.class.isInstance(render)
-            && IComponent.class.isInstance(render))
-        {
-            IJSONRender json = (IJSONRender) render;
-            IComponent component = (IComponent) render;
-
-            if (!contains(component, component.peekClientId()))
-            {
-                render.render(_nullWriter, cycle);
-                return;
-            }
-
-            json.renderComponent(_writer, cycle);
-        }
-
-        render.render(_nullWriter, cycle);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void updateComponent(String id)
-    {
-        if (!_parts.contains(id))
-            _parts.add(id);
-    }
-
-    /**
-     * Determines if the specified component is contained in the 
-     * responses requested update parts.
-     * @param target
-     *          The component to check for.
-     * @return True if the request should capture the components output.
-     */
-    public boolean contains(IComponent target)
-    {
-        if (target == null)
-            return false;
-
-        String id = target.getClientId();
-
-        return contains(target, id);
-    }
-
-    boolean contains(IComponent target, String id)
-    {
-        if (_parts.contains(id))
-            return true;
-
-        Iterator it = _cycle.renderStackIterator();
-        while (it.hasNext())
-        {
-            IComponent comp = (IComponent)it.next();
-            String compId = comp.getClientId();
-
-            if (comp != target && _parts.contains(compId))
-                return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean explicitlyContains(IComponent target)
-    {
-        if (target == null)
-            return false;
-
-        return _parts.contains(target.getId());
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public IMarkupWriter getWriter()
-    {
-        return _nullWriter;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public IMarkupWriter getWriter(String id, String type)
-    {
-        return _nullWriter;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isBodyScriptAllowed(IComponent target)
-    {
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isExternalScriptAllowed(IComponent target)
-    {
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isInitializationScriptAllowed(IComponent target)
-    {
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isImageInitializationAllowed(IComponent target)
-    {
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(IComponent target, IAsset source)
-    {
-        return _prs.getPreloadedImageReference(target, source);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(IComponent target, String url)
-    {
-        return _prs.getPreloadedImageReference(target, url);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(String url)
-    {
-        return _prs.getPreloadedImageReference(url);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addBodyScript(IComponent target, String script)
-    {
-        _prs.addBodyScript(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addBodyScript(String script)
-    {
-        _prs.addBodyScript(script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addExternalScript(IComponent target, Resource resource)
-    {
-        _prs.addExternalScript(target, resource);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addExternalScript(Resource resource)
-    {
-        _prs.addExternalScript(resource);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addInitializationScript(IComponent target, String script)
-    {
-        _prs.addInitializationScript(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addInitializationScript(String script)
-    {
-        _prs.addInitializationScript(script);
-    }
-
-    public void addScriptAfterInitialization(IComponent target, String script)
-    {
-        _prs.addScriptAfterInitialization(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getUniqueString(String baseValue)
-    {
-        return _prs.getUniqueString(baseValue);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeBodyScript(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        _prs.writeBodyScript(writer, cycle);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeInitializationScript(IMarkupWriter writer)
-    {
-        _prs.writeInitializationScript(writer);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void beginBodyScript(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // does nothing
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void endBodyScript(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // does nothing
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeBodyScript(IMarkupWriter writer, String script, IRequestCycle cycle)
-    {
-        // does nothing
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeExternalScript(IMarkupWriter normalWriter, String url, IRequestCycle cycle)
-    {
-        // does nothing
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeImageInitializations(IMarkupWriter writer, String script, String preloadName, IRequestCycle cycle)
-    {
-        // does nothing
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeInitializationScript(IMarkupWriter writer, String script)
-    {
-        // does nothing
-    }
-
-    /**
-     * This implementation does nothing.
-     * {@inheritDoc}
-     */
-    public void addStatusMessage(IMarkupWriter normalWriter, String category, String text)
-    {
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/JSONResponseContributorImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/JSONResponseContributorImpl.java
deleted file mode 100644
index e222c42..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/JSONResponseContributorImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.services.RequestLocaleManager;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.ResponseContributor;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-import java.io.IOException;
-
-/**
- * Determines if incoming request is a valid json request via the "json" http header
- * or the "json" = "true" request parameter.
- * 
- * @author jkuhnert
- */
-public class JSONResponseContributorImpl implements ResponseContributor
-{
-    
-    public static final String JSON_HEADER = "json";
-    
-    private RequestLocaleManager _localeManager;
-    
-    private MarkupWriterSource _markupWriterSource;
-    
-    private WebResponse _webResponse;
-    
-    private WebRequest _webRequest;
-    
-    private AssetFactory _assetFactory;
-    
-    /**
-     * {@inheritDoc}
-     */
-    public ResponseBuilder createBuilder(IRequestCycle cycle)
-    throws IOException
-    {
-        return new JSONResponseBuilder(cycle, _localeManager, _markupWriterSource,
-                _webResponse, _webRequest, _assetFactory, _webResponse.getNamespace());
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public boolean handlesResponse(IRequestCycle cycle)
-    {
-        String parm = cycle.getParameter(JSON_HEADER);
-        
-        if (parm != null && Boolean.valueOf(parm).booleanValue())
-            return true;
-        if (_webRequest.getHeader(JSON_HEADER) != null)
-            return true;
-        
-        return false;
-    }
-    
-    public void setLocaleManager(RequestLocaleManager localeManager)
-    {
-        _localeManager = localeManager;
-    }
-    
-    public void setMarkupWriterSource(MarkupWriterSource markupWriterSource)
-    {
-        _markupWriterSource = markupWriterSource;
-    }
-    
-    public void setWebResponse(WebResponse webResponse)
-    {
-        _webResponse = webResponse;
-    }
-    
-    public void setWebRequest(WebRequest webRequest)
-    {
-        _webRequest  = webRequest;
-    }
-    
-    public void setAssetFactory(AssetFactory factory)
-    {
-        _assetFactory = factory;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java
deleted file mode 100644
index 95e7afd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java
+++ /dev/null
@@ -1,239 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.commons.codec.net.URLCodec;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.order.Orderer;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.*;
-import org.apache.tapestry.record.PropertyPersistenceStrategySource;
-import org.apache.tapestry.services.DataSqueezer;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.QueryParameterMap;
-import org.apache.tapestry.web.WebRequest;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class LinkFactoryImpl implements LinkFactory
-{
-    
-    protected URLCodec _codec = new URLCodec();
-        
-    protected PropertyPersistenceStrategySource _persistenceStrategySource;
-    
-    protected IRequestCycle _requestCycle;
-    
-    protected WebRequest _request;
-    
-    private DataSqueezer _dataSqueezer;
-
-    private ErrorLog _errorLog;
-
-    /**
-     * List of {@link org.apache.tapestry.services.impl.ServiceEncoderContribution}.
-     */
-
-    private List _contributions;
-
-    private ServiceEncoder[] _encoders;
-
-    private String _servletPath;
-
-    private final Object[] _empty = new Object[0];
-    
-    public void initializeService()
-    {
-        Orderer orderer = new Orderer(_errorLog, "encoder");
-
-        Iterator i = _contributions.iterator();
-
-        while (i.hasNext())
-        {
-            ServiceEncoderContribution c = (ServiceEncoderContribution) i.next();
-
-            orderer.add(c, c.getId(), c.getAfter(), c.getBefore());
-        }
-
-        List ordered = orderer.getOrderedObjects();
-        int count = ordered.size();
-
-        _encoders = new ServiceEncoder[count];
-
-        for (int j = 0; j < count; j++)
-        {
-            ServiceEncoderContribution c = (ServiceEncoderContribution) ordered.get(j);
-
-            _encoders[j] = c.getEncoder();
-        }
-
-    }
-
-    public ILink constructLink(IEngineService service, boolean post, Map parameters, boolean stateful)
-    {
-        finalizeParameters(service, parameters);
-
-        IEngine engine = _requestCycle.getEngine();
-
-        QueryParameterMap qmap = new QueryParameterMap(parameters);
-        
-        ServiceEncoding serviceEncoding = createServiceEncoding(qmap);
-        
-        // Give persistent property strategies a chance to store extra data
-        // into the link.
-
-        if (stateful)
-            _persistenceStrategySource.addParametersForPersistentProperties(serviceEncoding, post);
-
-        String fullServletPath = _request.getContextPath() + serviceEncoding.getServletPath();
-
-        return new EngineServiceLink(_requestCycle, fullServletPath, engine.getOutputEncoding(),
-                _codec, _request, qmap, stateful);
-    }
-
-    protected void finalizeParameters(IEngineService service, Map parameters)
-    {
-        Defense.notNull(service, "service");
-        Defense.notNull(parameters, "parameters");
-        
-        String serviceName = service.getName();
-
-        if (serviceName == null)
-            throw new ApplicationRuntimeException(ImplMessages.serviceNameIsNull());
-
-        parameters.put(ServiceConstants.SERVICE, serviceName);
-
-        squeezeServiceParameters(parameters);
-    }
-
-    public ServiceEncoder[] getServiceEncoders()
-    {
-        return _encoders;
-    }
-
-    /**
-     * Creates a new service encoding, and allows the encoders to modify it before returning.
-     */
-
-    protected ServiceEncoding createServiceEncoding(QueryParameterMap parameters)
-    {
-        ServiceEncodingImpl result = new ServiceEncodingImpl(_servletPath, parameters);
-
-        for (int i = 0; i < _encoders.length; i++)
-        {
-            _encoders[i].encode(result);
-
-            if (result.isModified())
-                break;
-        }
-
-        return result;
-    }
-
-    protected void squeezeServiceParameters(Map parameters)
-    {
-        Object[] serviceParameters = (Object[]) parameters.get(ServiceConstants.PARAMETER);
-
-        if (serviceParameters == null)
-            return;
-        
-        parameters.put(ServiceConstants.PARAMETER, squeeze(serviceParameters));
-    }
-
-    public Object[] extractListenerParameters(IRequestCycle cycle)
-    {
-        String[] squeezed = cycle.getParameters(ServiceConstants.PARAMETER);
-
-        if (Tapestry.size(squeezed) == 0)
-            return _empty;
-
-        try
-        {
-            return _dataSqueezer.unsqueeze(squeezed);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-    }
-
-    private String[] squeeze(Object[] input)
-    {
-        try
-        {
-            return _dataSqueezer.squeeze(input);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-    }
-
-    public void setDataSqueezer(DataSqueezer dataSqueezer)
-    {
-        _dataSqueezer = dataSqueezer;
-    }
-
-    public void setContributions(List contributions)
-    {
-        _contributions = contributions;
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-
-    public void setServletPath(String servletPath)
-    {
-        _servletPath = servletPath;
-    }
-
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-
-    /**
-     * This is kind of limiting; it's possible that other things beyond persistence strategies will
-     * want to have a hand at encoding data into URLs. If that comes to pass, we'll need to
-     * implement an event coordinator/listener combo to let implementations know about links being
-     * generated.
-     *
-     * @param persistenceStrategySource
-     *          The persistent strategy to use.
-     */
-
-    public void setPersistenceStrategySource(PropertyPersistenceStrategySource persistenceStrategySource)
-    {
-        _persistenceStrategySource = persistenceStrategySource;
-    }
-
-    public void setRequestCycle(IRequestCycle requestCycle)
-    {
-        _requestCycle = requestCycle;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LiteralDeferredObject.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LiteralDeferredObject.java
deleted file mode 100644
index c9314c2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LiteralDeferredObject.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Location;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class LiteralDeferredObject implements DeferredObject
-{
-    private String _value;
-
-    private Location _location;
-
-    public LiteralDeferredObject(String value, Location location)
-    {
-        _value = value;
-        _location = location;
-    }
-
-    public Object getObject()
-    {
-        return _value;
-    }
-
-    public Location getLocation()
-    {
-        return _location;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LocalizedPropertySource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LocalizedPropertySource.java
deleted file mode 100644
index 0275fb9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LocalizedPropertySource.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.Locale;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.LocalizedNameGenerator;
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- * Wraps around a {@link org.apache.tapestry.engine.IPropertySource}to query a series of localized
- * keys.
- * <p>
- * This is much simpler than the old {@link LocalizedPropertySource}, and
- * allows the locale to be specified on a thread-safe, per-invocation basis.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class LocalizedPropertySource
-{
-    private IPropertySource _source;
-
-    public LocalizedPropertySource(IPropertySource source)
-    {
-        Defense.notNull(source, "source");
-
-        _source = source;
-    }
-
-    /**
-     * Get the property from the source, trying different variations of propertyName (adding
-     * suffixes).
-     * 
-     * @param propertyName
-     *            the base property name to search with.
-     * @param locale
-     *            the Locale used to generate suffixes (may be null).
-     */
-
-    public String getPropertyValue(String propertyName, Locale locale)
-    {
-        Defense.notNull(propertyName, "propertyName");
-
-        LocalizedNameGenerator g = new LocalizedNameGenerator(propertyName, locale, "");
-
-        while (g.more())
-        {
-            String localizedName = g.next();
-
-            String result = _source.getPropertyValue(localizedName);
-
-            if (result != null)
-                return result;
-        }
-
-        return null;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LocalizedStringRender.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LocalizedStringRender.java
deleted file mode 100644
index 3582a94..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/LocalizedStringRender.java
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.hivemind.util.ToStringBuilder;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.parse.LocalizationToken;
-import org.apache.tapestry.parse.TextToken;
-
-/**
- * A class used with invisible localizations. Constructed from a {@link TextToken}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class LocalizedStringRender implements IRender
-{
-    private IComponent _component;
-
-    private String _key;
-
-    private Map _attributes;
-
-    private String _value;
-
-    private boolean _raw;
-    
-    private String _tag;
-
-    public LocalizedStringRender(IComponent component, LocalizationToken token)
-    {
-        _component = component;
-        _key = token.getKey();
-        _raw = token.isRaw();
-        _tag = token.getTag();
-        _attributes = token.getAttributes();
-    }
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.isRewinding())
-            return;
-
-        if (_attributes != null)
-        {
-            writer.begin(_tag == null ? "span" : _tag);
-            
-            Iterator i = _attributes.entrySet().iterator();
-
-            while (i.hasNext())
-            {
-                Map.Entry entry = (Map.Entry) i.next();
-                String attributeName = (String) entry.getKey();
-                String attributeValue = (String) entry.getValue();
-
-                writer.attribute(attributeName, attributeValue);
-            }
-        }
-
-        if (_value == null)
-            _value = _component.getMessages().getMessage(_key);
-
-        writer.print(_value, _raw);
-        
-        if (_attributes != null)
-            writer.end();
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("component", _component);
-        builder.append("key", _key);
-        builder.append("raw", _raw);
-        builder.append("attributes", _attributes);
-
-        return builder.toString();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/NamespaceResourcesImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/NamespaceResourcesImpl.java
deleted file mode 100644
index 1d5dded..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/NamespaceResourcesImpl.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.services.impl;

-

-import org.apache.hivemind.Location;

-import org.apache.hivemind.Resource;

-import org.apache.hivemind.util.Defense;

-import org.apache.tapestry.IAsset;

-import org.apache.tapestry.asset.AssetSource;

-import org.apache.tapestry.engine.ISpecificationSource;

-import org.apache.tapestry.services.NamespaceResources;

-import org.apache.tapestry.spec.IComponentSpecification;

-import org.apache.tapestry.spec.ILibrarySpecification;

-

-/**

- * Implementation of {@link org.apache.tapestry.services.NamespaceResources}.

- * 

- * @author Howard M. Lewis Ship

- */

-public class NamespaceResourcesImpl implements NamespaceResources

-{

-    private final ISpecificationSource _specificationSource;

-

-    private final AssetSource _assetSource;

-

-    public NamespaceResourcesImpl(ISpecificationSource source, AssetSource assetSource)

-    {

-        Defense.notNull(source, "source");

-        Defense.notNull(assetSource, "assetSource");

-

-        _specificationSource = source;

-        _assetSource = assetSource;

-    }

-

-    public ILibrarySpecification findChildLibrarySpecification(Resource parentResource,

-            String path, Location location)

-    {

-        Resource childResource = findSpecificationResource(parentResource, path, location);

-

-        return _specificationSource.getLibrarySpecification(childResource);

-

-    }

-

-    private Resource findSpecificationResource(Resource libraryResource, String path, Location location)

-    {

-        // TODO: This is where we'll play with assets and asset prefixes

-        

-        IAsset childAsset = _assetSource.findAsset(libraryResource, path, null, location);

-

-        Resource childResource = childAsset.getResourceLocation();

-        

-        return childResource;

-    }

-

-    public IComponentSpecification getPageSpecification(Resource resource,

-            String specificationPath, Location location)

-    {

-        Resource pageSpecificationResource = findSpecificationResource(

-                resource,

-                specificationPath,

-                location);

-

-        return _specificationSource.getPageSpecification(pageSpecificationResource);

-    }

-

-    public IComponentSpecification getComponentSpecification(Resource resource,

-            String specificationPath, Location location)

-    {

-        Resource componentSpecificationResource = findSpecificationResource(

-                resource,

-                specificationPath,

-                location);

-

-        return _specificationSource.getComponentSpecification(componentSpecificationResource);

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/NullHandlerContribution.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/NullHandlerContribution.java
deleted file mode 100644
index ce2c4d8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/NullHandlerContribution.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2004, 2005, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import ognl.NullHandler;
-
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- * A contribution to the <code>tapestry.ognl.NullHandlers</code> configuration point; this
- * provides the Class and {@link ognl.NullHandler}that will be passed to
- * {@link ognl.OgnlRuntime#setNullHandler(java.lang.Class, ognl.NullHandler)}.
- * 
- * @author Andreas Andreou
- * @since 4.1
- */
-public class NullHandlerContribution extends BaseLocatable
-{
-    private Class _subjectClass;
-
-    private NullHandler _handler;
-
-    public NullHandler getHandler()
-    {
-        return _handler;
-    }
-
-    public void setHandler(NullHandler handler)
-    {
-        _handler = handler;
-    }
-
-    public Class getSubjectClass()
-    {
-        return _subjectClass;
-    }
-
-    public void setSubjectClass(Class subjectClass)
-    {
-        _subjectClass = subjectClass;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ObjectPoolImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ObjectPoolImpl.java
deleted file mode 100644
index d79ecd5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ObjectPoolImpl.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantLock;
-import org.apache.tapestry.event.ReportStatusEvent;
-import org.apache.tapestry.event.ReportStatusListener;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.services.ObjectPool;
-
-import java.util.*;
-
-/**
- * Implementation of the {@link org.apache.tapestry.services.ObjectPool} interface.
- * <p>
- * This ia a minimal implementation, one that has no concept of automatically removing unused pooled
- * objects. Eventually, it will also register for notifications about general cache cleaning.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ObjectPoolImpl implements ObjectPool, ResetEventListener, ReportStatusListener
-{
-    private String _serviceId;
-
-    private int _count = 0;
-
-    private final ReentrantLock _lock = new ReentrantLock();
-
-    /**
-     * Pool of Lists (of pooled objects), keyed on arbitrary key.
-     */
-    private Map _pool = new HashMap();
-        
-    public Object get(Object key)
-    {
-        List pooled = (List) _pool.get(key);
-        
-        try
-        {
-            _lock.lock();
-            
-            if (pooled == null || pooled.isEmpty())
-                return null;
-
-            _count--;
-
-            return pooled.remove(0);
-
-        } finally
-        {
-            _lock.unlock();
-        }
-    }
-
-    public void store(Object key, Object value)
-    {
-        List pooled = (List) _pool.get(key);
-
-        try
-        {
-            _lock.lock();
-            
-            if (pooled == null)
-            {
-                pooled = new LinkedList();
-                _pool.put(key, pooled);
-            }
-
-            pooled.add(value);
-
-            _count++;
-        } finally
-        {
-            _lock.unlock();
-        }
-    }
-
-    public void resetEventDidOccur()
-    {
-        _pool.clear();
-
-        _count = 0;
-    }
-
-    public void reportStatus(ReportStatusEvent event)
-    {
-        event.title(_serviceId);
-
-        event.property("total count", _count);
-
-        event.section("Count by Key");
-
-        Iterator i = _pool.entrySet().iterator();
-
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            String key = entry.getKey().toString();
-
-            List pooled = (List) entry.getValue();
-
-            event.property(key, pooled.size());
-        }
-    }
-
-    public void setServiceId(String serviceId)
-    {
-        _serviceId = serviceId;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/OgnlClassResolver.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/OgnlClassResolver.java
deleted file mode 100644
index 6c79bb3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/OgnlClassResolver.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.Map;
-
-import ognl.ClassResolver;
-
-/**
- * Implementation of OGNL's ClassResolver (which is unfortunately, named
- * the same as HiveMind's ClassResolver).
- *
- * @author Howard Lewis Ship
- */
-public class OgnlClassResolver implements ClassResolver
-{
-    private ClassLoader _loader;
-
-    public OgnlClassResolver()
-    {
-        this(Thread.currentThread().getContextClassLoader());
-    }
-
-    public OgnlClassResolver(ClassLoader loader)
-    {
-        _loader = loader;
-    }
-
-    public Class classForName(String name, Map context) throws ClassNotFoundException
-    {
-        return Class.forName(name, true, _loader);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PoolableOgnlContextFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PoolableOgnlContextFactory.java
deleted file mode 100644
index c7bf1d4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PoolableOgnlContextFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.apache.tapestry.services.impl;
-
-import ognl.ClassResolver;
-import ognl.Ognl;
-import ognl.OgnlContext;
-import ognl.TypeConverter;
-import org.apache.commons.pool.BasePoolableObjectFactory;
-
-/**
- * Used by {@link ExpressionEvaluatorImpl} to pool {@link ognl.OgnlContext} objects.
- */
-public class PoolableOgnlContextFactory extends BasePoolableObjectFactory {
-
-    private final ClassResolver _resolver;
-
-    private TypeConverter _typeConverter;
-
-    public PoolableOgnlContextFactory(ClassResolver resolver, TypeConverter typeConverter)
-    {
-        _resolver = resolver;
-        _typeConverter = typeConverter;
-    }
-
-    public Object makeObject()
-        throws Exception
-    {
-        return Ognl.createDefaultContext(null, _resolver, _typeConverter);
-    }
-
-    public void activateObject(Object obj)
-    throws Exception
-    {
-        OgnlContext context = (OgnlContext)obj;
-        
-        if (context.getRoot() != null || context.getValues().size() > 0) {
-            context.clear();
-            context.setRoot(null);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PropertyAccessorContribution.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PropertyAccessorContribution.java
deleted file mode 100644
index 9cb27f9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PropertyAccessorContribution.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import ognl.PropertyAccessor;
-
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- * A contribution to the <code>tapestry.ognl.PropertyAccessors</code> configuration point; this
- * provides the Class and {@link ognl.PropertyAccessor}that will be passed to
- * {@link ognl.OgnlRuntime#setPropertyAccessor(java.lang.Class, ognl.PropertyAccessor)}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PropertyAccessorContribution extends BaseLocatable
-{
-    private Class _subjectClass;
-
-    private PropertyAccessor _accessor;
-
-    public PropertyAccessor getAccessor()
-    {
-        return _accessor;
-    }
-
-    public void setAccessor(PropertyAccessor accessor)
-    {
-        _accessor = accessor;
-    }
-
-    public Class getSubjectClass()
-    {
-        return _subjectClass;
-    }
-
-    public void setSubjectClass(Class subjectClass)
-    {
-        _subjectClass = subjectClass;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PropertyObjectProvider.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PropertyObjectProvider.java
deleted file mode 100644
index 1cbca8a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PropertyObjectProvider.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.internal.Module;
-import org.apache.hivemind.service.ObjectProvider;
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- * An implementation of {@link org.apache.hivemind.service.ObjectProvider}
- * that gets the actual value from the
- * <code>tapestry.GlobalPropertySource</code> service.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class PropertyObjectProvider implements ObjectProvider
-{
-    private IPropertySource _source;
-
-    /**
-     * Gets the value; the locator is the key passed to
-     * {@link IPropertySource#getPropertyValue(String)}.
-     */
-    public Object provideObject(
-        Module contributingModule,
-        Class propertyType,
-        String locator,
-        Location location)
-    {
-        try
-        {
-            return _source.getPropertyValue(locator);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), location, ex);
-        }
-    }
-
-    public void setSource(IPropertySource source)
-    {
-        _source = source;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PrototypeResponseBuilder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PrototypeResponseBuilder.java
deleted file mode 100644
index aec1bb2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PrototypeResponseBuilder.java
+++ /dev/null
@@ -1,558 +0,0 @@
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.markup.NestedMarkupWriterImpl;
-import org.apache.tapestry.services.RequestLocaleManager;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.util.PageRenderSupportImpl;
-import org.apache.tapestry.web.WebResponse;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.*;
-
-/**
- * Implementation of response builder for prototype client side library initiated XHR requests.
- *
- */
-public class PrototypeResponseBuilder implements ResponseBuilder {
-
-    public static final String CONTENT_TYPE = "text/html";
-
-    private final AssetFactory _assetFactory;
-
-    private final String _namespace;
-
-    private PageRenderSupportImpl _prs;
-
-    // used to create IMarkupWriter
-    private RequestLocaleManager _localeManager;
-    private MarkupWriterSource _markupWriterSource;
-    private WebResponse _response;
-
-    // our response writer
-    private IMarkupWriter _writer;
-
-    // Parts that will be updated.
-    private List _parts = new ArrayList();
-
-    // Map of specialized writers, like scripts
-
-    private Map _writers = new HashMap();
-    private IRequestCycle _cycle;
-
-    /**
-     * Used for unit testing only.
-     *
-     * @param cycle Request.
-     * @param writer Markup writer.
-     * @param parts Update parts list.
-     */
-    public PrototypeResponseBuilder(IRequestCycle cycle, IMarkupWriter writer, List parts)
-    {
-        _cycle = cycle;
-        _writer = writer;
-
-        if (parts != null)
-            _parts.addAll(parts);
-
-        _assetFactory = null;
-        _namespace = null;
-    }
-
-    /**
-     * Creates a new response builder with the required services it needs
-     * to render the response when {@link #renderResponse(IRequestCycle)} is called.
-     *
-     * @param cycle
-     *          Associated request.
-     * @param localeManager
-     *          Locale manager to use for response.
-     * @param markupWriterSource
-     *          Creates necessary {@link IMarkupWriter} instances.
-     * @param webResponse
-     *          The http response.
-     * @param assetFactory
-     *          Asset manager for script / other resource inclusion.
-     * @param namespace
-     *          Javascript namespace value - used in portlets.
-     */
-    public PrototypeResponseBuilder(IRequestCycle cycle,
-                                    RequestLocaleManager localeManager,
-                                    MarkupWriterSource markupWriterSource,
-                                    WebResponse webResponse,
-                                    AssetFactory assetFactory, String namespace)
-    {
-        Defense.notNull(cycle, "cycle");
-        Defense.notNull(assetFactory, "assetService");
-
-        _cycle = cycle;
-        _localeManager = localeManager;
-        _markupWriterSource = markupWriterSource;
-        _response = webResponse;
-
-        // Used by PageRenderSupport
-
-        _assetFactory = assetFactory;
-        _namespace = namespace;
-    }
-
-    /**
-     *
-     * {@inheritDoc}
-     */
-    public boolean isDynamic()
-    {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void renderResponse(IRequestCycle cycle)
-      throws IOException
-    {
-        _localeManager.persistLocale();
-
-        ContentType contentType = new ContentType(CONTENT_TYPE + ";charset=" + cycle.getInfrastructure().getOutputEncoding());
-
-        String encoding = contentType.getParameter(ENCODING_KEY);
-
-        if (encoding == null)
-        {
-            encoding = cycle.getEngine().getOutputEncoding();
-
-            contentType.setParameter(ENCODING_KEY, encoding);
-        }
-
-        if (_writer == null)
-        {
-            parseParameters(cycle);
-
-            PrintWriter printWriter = _response.getPrintWriter(contentType);
-
-            _writer = _markupWriterSource.newMarkupWriter(printWriter, contentType);
-        }
-
-        // render response
-
-        _prs = new PageRenderSupportImpl(_assetFactory, _namespace, cycle.getPage().getLocation(), this);
-
-        TapestryUtils.storePageRenderSupport(cycle, _prs);
-
-        cycle.renderPage(this);
-
-        TapestryUtils.removePageRenderSupport(cycle);
-
-        endResponse();
-
-        _writer.close();
-    }
-
-    public void flush()
-      throws IOException
-    {
-        _writer.flush();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void updateComponent(String id)
-    {
-        if (!_parts.contains(id))
-            _parts.add(id);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public IMarkupWriter getWriter()
-    {
-        return _writer;
-    }
-
-    void setWriter(IMarkupWriter writer)
-    {
-        _writer = writer;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isBodyScriptAllowed(IComponent target)
-    {
-        if (target != null
-            && IPage.class.isInstance(target)
-            || (IForm.class.isInstance(target)
-                && ((IForm)target).isFormFieldUpdating()))
-            return true;
-
-        return contains(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isExternalScriptAllowed(IComponent target)
-    {
-        if (target != null
-            && IPage.class.isInstance(target)
-            || (IForm.class.isInstance(target)
-                && ((IForm)target).isFormFieldUpdating()))
-            return true;
-
-        return contains(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isInitializationScriptAllowed(IComponent target)
-    {
-        if (target != null
-            && IPage.class.isInstance(target)
-            || (IForm.class.isInstance(target)
-                && ((IForm)target).isFormFieldUpdating()))
-            return true;
-
-        return contains(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isImageInitializationAllowed(IComponent target)
-    {
-        if (target != null
-            && IPage.class.isInstance(target)
-            || (IForm.class.isInstance(target)
-                && ((IForm)target).isFormFieldUpdating()))
-            return true;
-
-        return contains(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(IComponent target, IAsset source)
-    {
-        return _prs.getPreloadedImageReference(target, source);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(IComponent target, String url)
-    {
-        return _prs.getPreloadedImageReference(target, url);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPreloadedImageReference(String url)
-    {
-        return _prs.getPreloadedImageReference(url);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addBodyScript(IComponent target, String script)
-    {
-        _prs.addBodyScript(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addBodyScript(String script)
-    {
-        _prs.addBodyScript(script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addExternalScript(IComponent target, Resource resource)
-    {
-        _prs.addExternalScript(target, resource);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addExternalScript(Resource resource)
-    {
-        _prs.addExternalScript(resource);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addInitializationScript(IComponent target, String script)
-    {
-        _prs.addInitializationScript(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void addInitializationScript(String script)
-    {
-        _prs.addInitializationScript(script);
-    }
-
-    public void addScriptAfterInitialization(IComponent target, String script)
-    {
-        _prs.addScriptAfterInitialization(target, script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getUniqueString(String baseValue)
-    {
-        return _prs.getUniqueString(baseValue);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeBodyScript(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        _prs.writeBodyScript(writer, cycle);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeInitializationScript(IMarkupWriter writer)
-    {
-        _prs.writeInitializationScript(writer);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void beginBodyScript(IMarkupWriter normalWriter, IRequestCycle cycle)
-    {
-        _writer.begin("script");
-        _writer.printRaw("\n//<![CDATA[\n");
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void endBodyScript(IMarkupWriter normalWriter, IRequestCycle cycle)
-    {
-        _writer.printRaw("\n//]]>\n");
-        _writer.end();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeBodyScript(IMarkupWriter normalWriter, String script, IRequestCycle cycle)
-    {
-        _writer.printRaw(script);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeExternalScript(IMarkupWriter normalWriter, String url, IRequestCycle cycle)
-    {
-        _writer.begin("script");
-        _writer.attribute("type", "text/javascript");
-        _writer.attribute("src", url);
-        _writer.end();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeImageInitializations(IMarkupWriter normalWriter, String script, String preloadName, IRequestCycle cycle)
-    {
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void writeInitializationScript(IMarkupWriter normalWriter, String script)
-    {
-        _writer.begin("script");
-
-        // return is in XML so must escape any potentially non-xml compliant content
-        _writer.printRaw("\n//<![CDATA[\n");
-        _writer.printRaw(script);
-        _writer.printRaw("\n//]]>\n");
-        _writer.end();
-    }
-
-    public void addStatus(IMarkupWriter normalWriter, String text)
-    {
-        throw new UnsupportedOperationException("Can't return a status response with prototype based requests.");
-    }
-
-    public void addStatusMessage(IMarkupWriter normalWriter, String category, String text)
-    {
-        throw new UnsupportedOperationException("Can't return a status response with prototype based requests.");
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void render(IMarkupWriter writer, IRender render, IRequestCycle cycle)
-    {
-        // must be a valid writer already
-
-        if (NestedMarkupWriterImpl.class.isInstance(writer))
-        {
-            render.render(writer, cycle);
-            return;
-        }
-
-        if (IComponent.class.isInstance(render)
-            && contains((IComponent)render, ((IComponent)render).peekClientId()))
-        {
-            render.render(getComponentWriter( ((IComponent)render).peekClientId() ), cycle);
-            return;
-        }
-
-        // Nothing else found, throw out response
-
-        render.render(NullWriter.getSharedInstance(), cycle);
-    }
-
-    IMarkupWriter getComponentWriter(String id)
-    {
-        return getWriter(id, ELEMENT_TYPE);
-    }
-
-    /**
-     *
-     * {@inheritDoc}
-     */
-    public IMarkupWriter getWriter(String id, String type)
-    {
-        Defense.notNull(id, "id can't be null");
-
-        IMarkupWriter w = (IMarkupWriter)_writers.get(id);
-        if (w != null)
-            return w;
-
-        IMarkupWriter nestedWriter = _writer.getNestedWriter();
-        _writers.put(id, nestedWriter);
-
-        return nestedWriter;
-    }
-
-    void beginResponse()
-    {
-    }
-
-    /**
-     * Invoked to clear out tempoary partial writer buffers before rendering exception
-     * page.
-     */
-    void clearPartialWriters()
-    {
-        _writers.clear();
-    }
-
-    /**
-     * Called after the entire response has been captured. Causes
-     * the writer buffer output captured to be segmented and written
-     * out to the right response elements for the client libraries to parse.
-     */
-    void endResponse()
-    {
-        Iterator keys = _writers.keySet().iterator();
-
-        while (keys.hasNext())
-        {
-            String key = (String)keys.next();
-            NestedMarkupWriter nw = (NestedMarkupWriter)_writers.get(key);
-
-            nw.close();
-        }
-
-        _writer.flush();
-    }
-
-    /**
-     * Grabs the incoming parameters needed for json responses, most notable the
-     * {@link ServiceConstants#UPDATE_PARTS} parameter.
-     *
-     * @param cycle
-     *            The request cycle to parse from
-     */
-    void parseParameters(IRequestCycle cycle)
-    {
-        Object[] updateParts = cycle.getParameters(ServiceConstants.UPDATE_PARTS);
-
-        if (updateParts == null)
-            return;
-
-        for(int i = 0; i < updateParts.length; i++)
-        {
-            _parts.add(updateParts[i].toString());
-        }
-    }
-
-    /**
-     * Determines if the specified component is contained in the
-     * responses requested update parts.
-     * @param target
-     *          The component to check for.
-     * @return True if the request should capture the components output.
-     */
-    public boolean contains(IComponent target)
-    {
-        if (target == null)
-            return false;
-
-        String id = target.getClientId();
-
-        return contains(target, id);
-    }
-
-    boolean contains(IComponent target, String id)
-    {
-        if (_parts.contains(id))
-            return true;
-
-        Iterator it = _cycle.renderStackIterator();
-        while (it.hasNext())
-        {
-            IComponent comp = (IComponent)it.next();
-            String compId = comp.getClientId();
-
-            if (comp != target && _parts.contains(compId))
-                return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean explicitlyContains(IComponent target)
-    {
-        if (target == null)
-            return false;
-
-        return _parts.contains(target.getId());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PrototypeResponseContributorImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PrototypeResponseContributorImpl.java
deleted file mode 100644
index d9e39da..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/PrototypeResponseContributorImpl.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.apache.tapestry.services.impl;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.services.RequestLocaleManager;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.ResponseContributor;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-import java.io.IOException;
-
-/**
- * Implementation of prototype javascript library XHR request sniffer.
- */
-public class PrototypeResponseContributorImpl implements ResponseContributor {
-
-    public static final String PROTOTYPE_HEADER = "X-Prototype-Version";
-
-    private RequestLocaleManager _localeManager;
-    private MarkupWriterSource _markupWriterSource;
-    private WebResponse _webResponse;
-    private WebRequest _webRequest;
-    private AssetFactory _assetFactory;
-
-    /**
-     * {@inheritDoc}
-     */
-    public ResponseBuilder createBuilder(IRequestCycle cycle)
-            throws IOException
-    {
-        return new PrototypeResponseBuilder(cycle, _localeManager, _markupWriterSource,
-                                            _webResponse, _assetFactory, _webResponse.getNamespace());
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean handlesResponse(IRequestCycle cycle)
-    {
-        return _webRequest.getHeader(PROTOTYPE_HEADER) != null;
-    }
-
-    public void setLocaleManager(RequestLocaleManager localeManager)
-    {
-        _localeManager = localeManager;
-    }
-
-    public void setMarkupWriterSource(MarkupWriterSource markupWriterSource)
-    {
-        _markupWriterSource = markupWriterSource;
-    }
-
-    public void setWebResponse(WebResponse webResponse)
-    {
-        _webResponse = webResponse;
-    }
-
-    public void setWebRequest(WebRequest webRequest)
-    {
-        _webRequest  = webRequest;
-    }
-
-    public void setAssetFactory(AssetFactory factory)
-    {
-        _assetFactory = factory;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/RequestCycleFactoryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/RequestCycleFactoryImpl.java
deleted file mode 100644
index d2459b8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/RequestCycleFactoryImpl.java
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorHandler;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.RequestCycle;
-import org.apache.tapestry.engine.RequestCycleEnvironment;
-import org.apache.tapestry.engine.ServiceEncoder;
-import org.apache.tapestry.engine.ServiceEncodingImpl;
-import org.apache.tapestry.record.PropertyPersistenceStrategySource;
-import org.apache.tapestry.services.*;
-import org.apache.tapestry.util.QueryParameterMap;
-import org.apache.tapestry.web.WebRequest;
-
-import java.io.IOException;
-import java.util.Iterator;
-
-/**
- * Service that creates instances of {@link org.apache.tapestry.IRequestCycle}on behalf of an
- * engine.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class RequestCycleFactoryImpl implements RequestCycleFactory
-{
-    private ServiceEncoder[] _encoders;
-
-    private PropertyPersistenceStrategySource _strategySource;
-
-    private ErrorHandler _errorHandler;
-
-    private Infrastructure _infrastructure;
-
-    private AbsoluteURLBuilder _absoluteURLBuilder;
-
-    private RequestCycleEnvironment _environment;
-
-    private RequestGlobals _requestGlobals;
-
-    private ResponseDelegateFactory _responseDelegateFactory;
-
-    public void initializeService()
-    {
-        _environment = new RequestCycleEnvironment(_errorHandler, _infrastructure, _strategySource,
-                                                   _absoluteURLBuilder);
-    }
-
-    public IRequestCycle newRequestCycle(IEngine engine)
-    {
-        WebRequest request = _infrastructure.getRequest();
-
-        QueryParameterMap parameters = extractParameters(request);
-
-        decodeParameters(request.getActivationPath(), request.getPathInfo(), parameters);
-
-        String serviceName = findService(parameters);
-
-        IRequestCycle cycle = new RequestCycle(engine, parameters, serviceName, _environment);
-
-        _requestGlobals.store(cycle);
-
-        try {
-
-            _requestGlobals.store(_responseDelegateFactory.getResponseBuilder(cycle));
-
-            cycle.setResponseBuilder(_requestGlobals.getResponseBuilder());
-
-        } catch (IOException e) {
-            throw new ApplicationRuntimeException("Error creating response builder.", e);
-        }
-
-        return cycle;
-    }
-
-    private String findService(QueryParameterMap parameters)
-    {
-        String serviceName = parameters.getParameterValue(ServiceConstants.SERVICE);
-
-        return serviceName == null ? Tapestry.HOME_SERVICE : serviceName;
-    }
-
-    /**
-     * Constructs a {@link org.apache.tapestry.util.QueryParameterMap}using the parameters
-     * available from the {@link WebRequest}&nbsp;(but ignoring any
-     * file upload parameters!).
-     */
-
-    private QueryParameterMap extractParameters(WebRequest request)
-    {
-        QueryParameterMap result = new QueryParameterMap();
-
-        Iterator i = request.getParameterNames().iterator();
-
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-
-            String[] values = request.getParameterValues(name);
-
-            if (values.length == 1)
-                result.setParameterValue(name, values[0]);
-            else
-                result.setParameterValues(name, values);
-        }
-
-        return result;
-    }
-
-    private void decodeParameters(String servletPath, String pathInfo, QueryParameterMap map)
-    {
-        ServiceEncodingImpl se = new ServiceEncodingImpl(servletPath, pathInfo, map);
-
-        for (int i = 0; i < _encoders.length; i++)
-        {
-            _encoders[i].decode(se);
-
-            if (se.isModified())
-                return;
-        }
-    }
-
-    public void setEncoders(ServiceEncoder[] encoders)
-    {
-        _encoders = encoders;
-    }
-
-    public void setStrategySource(PropertyPersistenceStrategySource strategySource)
-    {
-        _strategySource = strategySource;
-    }
-
-    public void setErrorHandler(ErrorHandler errorHandler)
-    {
-        _errorHandler = errorHandler;
-    }
-
-    public void setInfrastructure(Infrastructure infrastructure)
-    {
-        _infrastructure = infrastructure;
-    }
-
-    public void setAbsoluteURLBuilder(AbsoluteURLBuilder absoluteURLBuilder)
-    {
-        _absoluteURLBuilder = absoluteURLBuilder;
-    }
-
-    public void setRequestGlobals(RequestGlobals requestGlobals)
-    {
-        _requestGlobals = requestGlobals;
-    }
-
-    /**
-     * For injection.
-     */
-    public void setResponseDelegateFactory(ResponseDelegateFactory responseDelegate)
-    {
-        _responseDelegateFactory = responseDelegate;
-    }
-
-    /**
-     * For subclass access.
-     */
-    public ResponseDelegateFactory getResponseDelegateFactory()
-    {
-        return _responseDelegateFactory;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/RequestGlobalsImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/RequestGlobalsImpl.java
deleted file mode 100644
index e14b18b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/RequestGlobalsImpl.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.RequestGlobals;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-/**
- * Wrapper around {@link org.apache.hivemind.service.ThreadLocalStorage}used to store and retrieve
- * Servlet API info.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class RequestGlobalsImpl implements RequestGlobals
-{
-    private WebRequest _webRequest;
-
-    private WebResponse _webResponse;
-
-    private HttpServletRequest _request;
-
-    private HttpServletResponse _response;
-
-    private IRequestCycle _requestCycle;
-
-    private ResponseBuilder _responseBuilder;
-    
-    public WebRequest getWebRequest()
-    {
-        return _webRequest;
-    }
-
-    public WebResponse getWebResponse()
-    {
-        return _webResponse;
-    }
-
-    public HttpServletRequest getRequest()
-    {
-        return _request;
-    }
-
-    public HttpServletResponse getResponse()
-    {
-        return _response;
-    }
-
-    public void store(WebRequest request, WebResponse response)
-    {
-        _webRequest = request;
-        _webResponse = response;
-    }
-
-    public void store(HttpServletRequest request, HttpServletResponse response)
-    {
-        _request = request;
-        _response = response;
-    }
-
-    public IRequestCycle getRequestCycle()
-    {
-        return _requestCycle;
-    }
-
-    public void store(IRequestCycle cycle)
-    {
-        _requestCycle = cycle;
-    }
-    
-    public ResponseBuilder getResponseBuilder()
-    {
-        return _responseBuilder;
-    }
-    
-    public void store(ResponseBuilder builder)
-    {
-        _responseBuilder = builder;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/RequestLocaleManagerImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/RequestLocaleManagerImpl.java
deleted file mode 100644
index 409e2b2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/RequestLocaleManagerImpl.java
+++ /dev/null
@@ -1,208 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.service.ThreadLocale;
-import org.apache.tapestry.TapestryConstants;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.services.CookieSource;
-import org.apache.tapestry.services.RequestLocaleManager;
-import org.apache.tapestry.web.WebRequest;
-
-import java.util.*;
-
-/**
- * Service tapestry.request.RequestLocaleManager. Identifies the Locale provided by the client
- * (either in a Tapestry-specific cookie, or interpolated from the HTTP header.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class RequestLocaleManagerImpl implements RequestLocaleManager
-{
-    private WebRequest _request;
-
-    /**
-     * Extracted at start of request, and used at end of request to see if locale has changed.
-     * Because of this thread-specific state, the service must use the threaded service lifecycle
-     * model.
-     */
-
-    private Locale _requestLocale;
-
-    private CookieSource _cookieSource;
-
-    private ThreadLocale _threadLocale;
-
-    /**
-     * Set from symbol org.apache.tapestry.accepted-locales, a comma-seperated list of locale names.
-     * The first name is the default for requests that can't be matched against the other locale
-     * names. May also be blank, in which case, whatever locale was provided in the request is
-     * accepted (which is Tapestry 3.0 behavior).
-     */
-
-    private String _acceptedLocales;
-
-    private Locale _defaultLocale;
-
-    /**
-     * Set of locale names. Incoming requests will be matched to one of these locales.
-     */
-
-    private Set _acceptedLocaleNamesSet = new HashSet();
-
-    /**
-     * Cache of Locales, keyed on locale name.
-     */
-
-    private Map _localeCache = new HashMap();
-
-    /**
-     * Reference to last persisted locale, if any.  Used to prevent
-     * duplicate cookie writes of the same locale.
-     */
-    private Locale _lastPersisted;
-
-    public void initializeService()
-    {
-        String[] names = TapestryUtils.split(_acceptedLocales);
-
-        if (names.length == 0)
-            return;
-
-        _defaultLocale = getLocale(names[0]);
-
-        _acceptedLocaleNamesSet.addAll(Arrays.asList(names));
-    }
-
-    public Locale extractLocaleForCurrentRequest()
-    {
-        String localeName = _cookieSource.readCookieValue(TapestryConstants.LOCALE_COOKIE_NAME);
-
-        String requestedLocale = (localeName != null) ? localeName : _request.getLocale().toString();
-
-        _requestLocale = filterRequestedLocale(requestedLocale);
-
-        _threadLocale.setLocale(_requestLocale);
-
-        return _requestLocale;
-    }
-
-    /**
-     * Converts the request locale name into a Locale instance; applies filters (based on
-     * acceptedLocales) if enabled.
-     */
-
-    Locale filterRequestedLocale(String localeName)
-    {
-        String requestLocaleName = localeName;
-        if (_acceptedLocaleNamesSet.isEmpty())
-            return getLocale(requestLocaleName);
-
-        while (requestLocaleName.length() > 0)
-        {
-            if (_acceptedLocaleNamesSet.contains(requestLocaleName))
-                return getLocale(requestLocaleName);
-
-            requestLocaleName = stripTerm(requestLocaleName);
-        }
-
-        // now try "best match"
-
-        for (Iterator it = _acceptedLocaleNamesSet.iterator(); it.hasNext();)
-        {
-            String locale = (String) it.next();
-
-            if (locale.startsWith(localeName))
-                return getLocale(locale);
-        }
-
-        return _defaultLocale;
-    }
-
-    private String stripTerm(String localeName)
-    {
-        int scorex = localeName.lastIndexOf('_');
-
-        return scorex < 0 ? "" : localeName.substring(0, scorex);
-    }
-
-    public void persistLocale()
-    {
-        Locale locale = _threadLocale.getLocale();
-
-        if (locale.equals(_requestLocale)
-            || _lastPersisted != null && locale.equals(_lastPersisted))
-            return;
-
-        _cookieSource.writeCookieValue(TapestryConstants.LOCALE_COOKIE_NAME, locale.toString());
-        _lastPersisted = locale;
-    }
-
-    Locale getLocale(String name)
-    {
-        Locale result = (Locale) _localeCache.get(name);
-
-        if (result == null)
-        {
-            result = constructLocale(name);
-            _localeCache.put(name, result);
-        }
-
-        return result;
-    }
-
-    private Locale constructLocale(String name)
-    {
-        String[] terms = TapestryUtils.split(name, '_');
-
-        switch (terms.length)
-        {
-            case 1:
-                return new Locale(terms[0], "");
-
-            case 2:
-                return new Locale(terms[0], terms[1]);
-
-            case 3:
-
-                return new Locale(terms[0], terms[1], terms[2]);
-
-            default:
-
-                throw new IllegalArgumentException();
-        }
-    }
-
-    public void setCookieSource(CookieSource source)
-    {
-        _cookieSource = source;
-    }
-
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-
-    public void setThreadLocale(ThreadLocale threadLocale)
-    {
-        _threadLocale = threadLocale;
-    }
-
-    public void setAcceptedLocales(String acceptedLocales)
-    {
-        _acceptedLocales = acceptedLocales;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResetEventHubImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResetEventHubImpl.java
deleted file mode 100644
index 1e56640..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResetEventHubImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.Iterator;
-
-import org.apache.hivemind.util.EventListenerList;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.services.ResetEventHub;
-
-/**
- * Implementation of the <code>tapestry.ResetEventHub</code>
- * service.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ResetEventHubImpl implements ResetEventHub
-{
-    private EventListenerList _listeners = new EventListenerList();
-
-    public void addResetEventListener(ResetEventListener l)
-    {
-        _listeners.addListener(l);
-    }
-
-    public void removeResetEventListener(ResetEventListener l)
-    {
-        _listeners.removeListener(l);
-    }
-
-    public void fireResetEvent()
-    {
-        Iterator i = _listeners.getListeners();
-
-        while (i.hasNext())
-        {
-            ResetEventListener l = (ResetEventListener) i.next();
-
-            l.resetEventDidOccur();
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResourceLocalization.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResourceLocalization.java
deleted file mode 100644
index afbafd2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResourceLocalization.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.Locale;
-
-import org.apache.hivemind.Resource;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ResourceLocalization
-{
-    private Locale _locale;
-
-    private Resource _resource;
-
-    public ResourceLocalization(Locale locale, Resource resource)
-    {
-        _locale = locale;
-        _resource = resource;
-    }
-
-    public Locale getLocale()
-    {
-        return _locale;
-    }
-
-    /**
-     * The localized version of the resource; this may or may not exist.
-     */
-
-    public Resource getResource()
-    {
-        return _resource;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResponseDelegateFactoryImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResponseDelegateFactoryImpl.java
deleted file mode 100644
index 3f1df8e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResponseDelegateFactoryImpl.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.ResponseContributor;
-import org.apache.tapestry.services.ResponseDelegateFactory;
-
-/**
- * Implementation of {@link ResponseDelegateFactory}.
- *
- * @author jkuhnert
- */
-public class ResponseDelegateFactoryImpl implements ResponseDelegateFactory {
-    
-    /** Configured response contribution choosers. */
-    protected List _responseContributors;
-    
-    /**
-     * {@inheritDoc}
-     */
-    public ResponseBuilder getResponseBuilder(IRequestCycle cycle)
-    throws IOException
-    {
-        if (_responseContributors == null)
-            return null;
-        
-        for (int i = 0; i < _responseContributors.size(); i++) {
-            ResponseContributor rc = (ResponseContributor)_responseContributors.get(i);
-            if (rc.handlesResponse(cycle))
-                return rc.createBuilder(cycle);
-        }
-        
-        throw new ApplicationRuntimeException(ImplMessages.unknownRequest());
-    }
-    
-    /**
-     * Sets a configured list of {@link ResponseContributor} objects to be used
-     * in processing ajax requests.
-     * 
-     * @param responseContributors
-     */
-    public void setResponseContributors(List responseContributors)
-    {
-        this._responseContributors = responseContributors;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResponseRendererImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResponseRendererImpl.java
deleted file mode 100644
index 3885d2e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ResponseRendererImpl.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.ResponseRenderer;
-
-/**
- * Responsible for rendering a response to the client.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ResponseRendererImpl implements ResponseRenderer
-{
-    public void renderResponse(IRequestCycle cycle)
-        throws IOException
-    {
-        cycle.getResponseBuilder().renderResponse(cycle);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ServiceEncoderContribution.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ServiceEncoderContribution.java
deleted file mode 100644
index 92aa51c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ServiceEncoderContribution.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.tapestry.engine.ServiceEncoder;
-
-/**
- * A contribution to the tapestry.url.ServiceEncoders configuration point, identifying some number
- * of {@link org.apache.tapestry.engine.ServiceEncoder}s, as well as the ordering of those
- * encoders.
- * 
- * @author Howard M. Lewis Ship
- */
-public class ServiceEncoderContribution extends BaseLocatable
-{
-    private String _id;
-
-    private String _before;
-
-    private String _after;
-
-    private ServiceEncoder _encoder;
-    
-    public String getAfter()
-    {
-        return _after;
-    }
-
-    public void setAfter(String after)
-    {
-        _after = after;
-    }
-
-    public String getBefore()
-    {
-        return _before;
-    }
-
-    public void setBefore(String before)
-    {
-        _before = before;
-    }
-
-    public ServiceEncoder getEncoder()
-    {
-        return _encoder;
-    }
-
-    public void setEncoder(ServiceEncoder encoder)
-    {
-        _encoder = encoder;
-    }
-
-    public String getId()
-    {
-        return _id;
-    }
-
-    public void setId(String id)
-    {
-        _id = id;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ServiceMapImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ServiceMapImpl.java
deleted file mode 100644
index e8ee52f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/ServiceMapImpl.java
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.services.ServiceMap;
-
-/**
- * Implementation of {@link org.apache.tapestry.services.ServiceMap}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ServiceMapImpl implements ServiceMap, EngineServiceSource
-{
-    /**
-     * List of {@link EngineServiceContribution}.
-     */
-    private List _applicationServices;
-
-    /**
-     * List of {@link EngineServiceContribution}.
-     */
-    private List _factoryServices;
-
-    private ErrorLog _errorLog;
-
-    /**
-     * Map of {@link EngineServiceContribution}&nbsp;keyed on String name.
-     */
-    private Map _services;
-
-    /**
-     * Map of {@link org.apache.tapestry.services.impl.EngineServiceOuterProxy}, keyed on String
-     * name.
-     */
-
-    private Map _proxies = new HashMap();
-
-    public void initializeService()
-    {
-        Map factoryMap = buildServiceMap(_factoryServices);
-        Map applicationMap = buildServiceMap(_applicationServices);
-
-        // Add services from the applicationMap to factoryMap, overwriting
-        // factoryMap entries with the same name.
-
-        factoryMap.putAll(applicationMap);
-
-        _services = factoryMap;
-    }
-
-    private Map buildServiceMap(List services)
-    {
-        Map result = new HashMap();
-
-        Iterator i = services.iterator();
-        while (i.hasNext())
-        {
-            EngineServiceContribution contribution = (EngineServiceContribution) i.next();
-            String name = contribution.getName();
-
-            EngineServiceContribution existing = (EngineServiceContribution) result.get(name);
-
-            if (existing != null)
-            {
-                _errorLog.error(
-                        ImplMessages.dupeService(name, existing),
-                        existing.getLocation(),
-                        null);
-                continue;
-            }
-
-            result.put(name, contribution);
-        }
-
-        return result;
-    }
-
-    public synchronized IEngineService getService(String name)
-    {
-        IEngineService result = (IEngineService) _proxies.get(name);
-
-        if (result == null)
-        {
-            result = buildProxy(name);
-            _proxies.put(name, result);
-        }
-
-        return result;
-    }
-
-    public boolean isValid(String name)
-    {
-        return _services.containsKey(name);
-    }
-
-    /**
-     * This returns the actual service, not the outer proxy.
-     */
-
-    public IEngineService resolveEngineService(String name)
-    {
-        EngineServiceContribution contribution = (EngineServiceContribution) _services.get(name);
-
-        if (contribution == null)
-            throw new ApplicationRuntimeException(ImplMessages.noSuchService(name));
-
-        IEngineService service = contribution.getService();
-        String serviceName = service.getName();
-
-        if (!name.equals(serviceName))
-            throw new ApplicationRuntimeException(ImplMessages.serviceNameMismatch(
-                    service,
-                    name,
-                    serviceName), contribution.getLocation(), null);
-
-        return service;
-    }
-
-    private IEngineService buildProxy(String name)
-    {
-        if (!_services.containsKey(name))
-            throw new ApplicationRuntimeException(ImplMessages.noSuchService(name));
-
-        EngineServiceOuterProxy outer = new EngineServiceOuterProxy(name);
-
-        EngineServiceInnerProxy inner = new EngineServiceInnerProxy(name, outer, this);
-
-        outer.installDelegate(inner);
-
-        return outer;
-    }
-
-    public void setApplicationServices(List applicationServices)
-    {
-        _applicationServices = applicationServices;
-    }
-
-    public void setFactoryServices(List factoryServices)
-    {
-        _factoryServices = factoryServices;
-    }
-
-    public void setErrorLog(ErrorLog errorLog)
-    {
-        _errorLog = errorLog;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SetupRequestEncoding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SetupRequestEncoding.java
deleted file mode 100644
index 4535e94..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SetupRequestEncoding.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.services.ServletRequestServicer;
-import org.apache.tapestry.services.ServletRequestServicerFilter;
-
-/**
- * Analyzes the incoming request to set the correct output encoding.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class SetupRequestEncoding implements ServletRequestServicerFilter
-{
-    private boolean _skipSet;
-
-    private String _outputEncoding;
-
-    public void service(HttpServletRequest request, HttpServletResponse response,
-            ServletRequestServicer servicer) throws IOException, ServletException
-    {
-        if (!_skipSet)
-        {
-            String encoding = request.getCharacterEncoding();
-
-            if (encoding == null)
-                setRequestEncodingToOutputEncoding(request);
-        }
-
-        // Next in chain
-
-        servicer.service(request, response);
-    }
-
-    private void setRequestEncodingToOutputEncoding(HttpServletRequest request)
-    {
-        try
-        {
-            // We compile against the 2.3 API but allow
-            // the code to execute against the 2.2 In the
-            // later case, we can get some interesting errors.
-
-            request.setCharacterEncoding(_outputEncoding);
-        }
-        catch (UnsupportedEncodingException ex)
-        {
-            throw new ApplicationRuntimeException(
-                    ImplMessages.invalidEncoding(_outputEncoding, ex), ex);
-        }
-        catch (NoSuchMethodError ex)
-        {
-            _skipSet = true;
-        }
-        catch (AbstractMethodError ex)
-        {
-            _skipSet = true;
-        }
-    }
-
-    public void setOutputEncoding(String outputEncoding)
-    {
-        _outputEncoding = outputEncoding;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SetupServletApplicationGlobals.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SetupServletApplicationGlobals.java
deleted file mode 100644
index 9fc6d11..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SetupServletApplicationGlobals.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import javax.servlet.http.HttpServlet;
-
-import org.apache.tapestry.services.ApplicationInitializer;
-
-/**
- * Stores services and configurations into the
- * {@link org.apache.tapestry.services.ApplicationGlobals tapestry.globals.ApplicationGlobals}
- * service, which is used to see the
- * {@link org.apache.tapestry.services.Infrastructure tapestry.infrastructure} service. The mode to
- * use is normally "servlet", but this can be overriden by setting the
- * org.apache.tapestry.application-mode initialization parameter. WML applications should use the
- * mode "wml".
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class SetupServletApplicationGlobals extends AbstractSetupApplicationGlobals implements
-        ApplicationInitializer
-{
-    public void initialize(HttpServlet servlet)
-    {
-        String mode = servlet.getInitParameter("org.apache.tapestry.application-mode");
-
-        initialize(mode == null ? "servlet" : mode);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SpecificationSourceImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SpecificationSourceImpl.java
deleted file mode 100644
index 10fa3a2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SpecificationSourceImpl.java
+++ /dev/null
@@ -1,259 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.asset.AssetSource;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.engine.Namespace;
-import org.apache.tapestry.event.ReportStatusEvent;
-import org.apache.tapestry.event.ReportStatusListener;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.parse.ISpecificationParser;
-import org.apache.tapestry.services.NamespaceResources;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-import org.apache.tapestry.spec.LibrarySpecification;
-import org.apache.tapestry.util.xml.DocumentParseException;
-
-/**
- * Default implementation of {@link ISpecificationSource} that expects to use the normal class
- * loader to locate component specifications from within the classpath.
- * <p>
- * Caches specifications in memory forever, or until {@link #resetEventDidOccur()} is invoked.
- * 
- * @author Howard Lewis Ship
- */
-public class SpecificationSourceImpl implements ISpecificationSource, ResetEventListener,
-        ReportStatusListener
-{
-    private ClassResolver _classResolver;
-
-    private IApplicationSpecification _specification;
-
-    private ISpecificationParser _parser;
-
-    private NamespaceResources _namespaceResources;
-
-    private INamespace _applicationNamespace;
-
-    private INamespace _frameworkNamespace;
-
-    private AssetSource _assetSource;
-
-    private String _serviceId;
-
-    /**
-     * Contains previously parsed component specifications.
-     */
-
-    private Map _componentCache = new HashMap();
-
-    /**
-     * Contains previously parsed page specifications.
-     * 
-     * @since 2.2
-     */
-
-    private Map _pageCache = new HashMap();
-
-    /**
-     * Contains previously parsed library specifications, keyed on specification resource path.
-     * 
-     * @since 2.2
-     */
-
-    private Map _libraryCache = new HashMap();
-
-    /**
-     * Contains {@link INamespace} instances, keyed on id (which will be null for the application
-     * specification).
-     */
-
-    private Map _namespaceCache = new HashMap();
-
-    public void reportStatus(ReportStatusEvent event)
-    {
-        event.title(_serviceId);
-
-        event.property("page specification count", _pageCache.size());
-        event.collection("page specifications", _pageCache.keySet());
-        event.property("component specification count", _componentCache.size());
-        event.collection("component specifications", _componentCache.keySet());
-    }
-
-    public void initializeService()
-    {
-        _namespaceResources = new NamespaceResourcesImpl(this, _assetSource);
-    }
-
-    /**
-     * Clears the specification cache. This is used during debugging.
-     */
-
-    public synchronized void resetEventDidOccur()
-    {
-        _componentCache.clear();
-        _pageCache.clear();
-        _libraryCache.clear();
-        _namespaceCache.clear();
-
-        _applicationNamespace = null;
-        _frameworkNamespace = null;
-    }
-
-    protected IComponentSpecification parseSpecification(Resource resource, boolean asPage)
-    {
-        IComponentSpecification result = null;
-
-        try
-        {
-            if (asPage)
-                result = _parser.parsePageSpecification(resource);
-            else
-                result = _parser.parseComponentSpecification(resource);
-        }
-        catch (DocumentParseException ex)
-        {
-            throw new ApplicationRuntimeException(
-                    ImplMessages.unableToParseSpecification(resource), ex);
-        }
-
-        return result;
-    }
-
-    protected ILibrarySpecification parseLibrarySpecification(Resource resource)
-    {
-        try
-        {
-            return _parser.parseLibrarySpecification(resource);
-        }
-        catch (DocumentParseException ex)
-        {
-            throw new ApplicationRuntimeException(
-                    ImplMessages.unableToParseSpecification(resource), ex);
-        }
-
-    }
-
-    /**
-     * Gets a component specification.
-     * 
-     * @param resourceLocation
-     *            the complete resource path to the specification.
-     * @throws ApplicationRuntimeException
-     *             if the specification cannot be obtained.
-     */
-
-    public synchronized IComponentSpecification getComponentSpecification(Resource resourceLocation)
-    {
-        IComponentSpecification result = (IComponentSpecification) _componentCache
-                .get(resourceLocation);
-
-        if (result == null)
-        {
-            result = parseSpecification(resourceLocation, false);
-
-            _componentCache.put(resourceLocation, result);
-        }
-
-        return result;
-    }
-
-    public synchronized IComponentSpecification getPageSpecification(Resource resourceLocation)
-    {
-        IComponentSpecification result = (IComponentSpecification) _pageCache.get(resourceLocation);
-
-        if (result == null)
-        {
-            result = parseSpecification(resourceLocation, true);
-
-            _pageCache.put(resourceLocation, result);
-        }
-
-        return result;
-    }
-
-    public synchronized ILibrarySpecification getLibrarySpecification(Resource resourceLocation)
-    {
-        ILibrarySpecification result = (LibrarySpecification) _libraryCache.get(resourceLocation);
-
-        if (result == null)
-        {
-            result = parseLibrarySpecification(resourceLocation);
-            _libraryCache.put(resourceLocation, result);
-        }
-
-        return result;
-    }
-
-    public synchronized INamespace getApplicationNamespace()
-    {
-        if (_applicationNamespace == null)
-            _applicationNamespace = new Namespace(null, null, _specification, _namespaceResources);
-
-        return _applicationNamespace;
-    }
-
-    public synchronized INamespace getFrameworkNamespace()
-    {
-        if (_frameworkNamespace == null)
-        {
-            Resource resource = new ClasspathResource(_classResolver,
-                    "/org/apache/tapestry/Framework.library");
-
-            ILibrarySpecification ls = getLibrarySpecification(resource);
-
-            _frameworkNamespace = new Namespace(INamespace.FRAMEWORK_NAMESPACE, null, ls,
-                    _namespaceResources);
-        }
-
-        return _frameworkNamespace;
-    }
-
-    public void setParser(ISpecificationParser parser)
-    {
-        _parser = parser;
-    }
-
-    public void setClassResolver(ClassResolver resolver)
-    {
-        _classResolver = resolver;
-    }
-
-    public void setSpecification(IApplicationSpecification specification)
-    {
-        _specification = specification;
-    }
-
-    public void setAssetSource(AssetSource assetSource)
-    {
-        _assetSource = assetSource;
-    }
-
-    public void setServiceId(String serviceId)
-    {
-        _serviceId = serviceId;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SymbolSourcesPropertySource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SymbolSourcesPropertySource.java
deleted file mode 100644
index c6759c4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SymbolSourcesPropertySource.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.internal.Module;
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- * Property source that bridges to HiveMind Symbol Sources.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class SymbolSourcesPropertySource implements IPropertySource
-{
-    private Module _module;
-
-    public SymbolSourcesPropertySource(Module module)
-    {
-        _module = module;
-    }
-
-    /**
-     * Invokes {@link Module#getConfigurationAsMap(String)}.
-     */
-    public String getPropertyValue(String propertyName)
-    {
-        return _module.valueForSymbol(propertyName);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SymbolSourcesPropertySourceFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SymbolSourcesPropertySourceFactory.java
deleted file mode 100644
index fb3a2c1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/SymbolSourcesPropertySourceFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ServiceImplementationFactory;
-import org.apache.hivemind.ServiceImplementationFactoryParameters;
-import org.apache.hivemind.internal.Module;
-
-/**
- * Used to create an service instance of
- * {@link  org.apache.tapestry.services.impl.SymbolSourcesPropertySource}. This is because SSPS
- * needs an instance of {@link Module}, and there's no way to do that
- * with hivemind.BuilderFactory.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class SymbolSourcesPropertySourceFactory implements ServiceImplementationFactory
-{
-
-    public Object createCoreServiceImplementation(ServiceImplementationFactoryParameters parameters)
-    {
-        return new SymbolSourcesPropertySource(parameters.getInvokingModule());
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/TemplateSourceImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/TemplateSourceImpl.java
deleted file mode 100644
index 6594236..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/TemplateSourceImpl.java
+++ /dev/null
@@ -1,586 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.ITemplateSourceDelegate;
-import org.apache.tapestry.event.ReportStatusEvent;
-import org.apache.tapestry.event.ReportStatusListener;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.l10n.ResourceLocalizer;
-import org.apache.tapestry.parse.*;
-import org.apache.tapestry.resolver.ComponentSpecificationResolver;
-import org.apache.tapestry.resolver.IComponentResourceResolver;
-import org.apache.tapestry.services.ComponentPropertySource;
-import org.apache.tapestry.services.TemplateSource;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.MultiKey;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * Implementation of {@link org.apache.tapestry.services.TemplateSource}. Templates, once parsed,
- * stay in memory until explicitly cleared.
- * 
- * @author Howard Lewis Ship
- */
-
-public class TemplateSourceImpl implements TemplateSource, ResetEventListener, ReportStatusListener
-{
-
-    // The name of the component/application/etc property that will be used to
-    // determine the encoding to use when loading the template
-
-    public static final String TEMPLATE_ENCODING_PROPERTY_NAME = "org.apache.tapestry.template-encoding";
-
-    private static final int BUFFER_SIZE = 2000;
-
-    private String _serviceId;
-
-    private Log _log;
-    
-    // Cache of previously retrieved templates. Key is a multi-key of
-    // specification resource path and locale (local may be null), value
-    // is the ComponentTemplate.
-
-    private Map _cache = new ConcurrentHashMap();
-
-    // Previously read templates; key is the Resource, value
-    // is the ComponentTemplate.
-
-    private Map _templates = new ConcurrentHashMap();
-
-    private ITemplateParser _parser;
-
-    /** @since 2.2 */
-
-    private Resource _contextRoot;
-
-    /** @since 3.0 */
-
-    private ITemplateSourceDelegate _delegate;
-
-    /** @since 4.0 */
-
-    private ComponentSpecificationResolver _componentSpecificationResolver;
-
-    /** @since 4.0 */
-
-    private ComponentPropertySource _componentPropertySource;
-
-    /** @since 4.0 */
-
-    private ResourceLocalizer _localizer;
-
-    /** @since 4.1.2 */
-    
-    private IComponentResourceResolver _resourceResolver;
-
-    /**
-     * Clears the template cache. This is used during debugging.
-     */
-
-    public void resetEventDidOccur()
-    {
-        _cache.clear();
-        _templates.clear();
-    }
-
-    public void reportStatus(ReportStatusEvent event)
-    {
-        event.title(_serviceId);
-
-        int templateCount = 0;
-        int tokenCount = 0;
-        int characterCount = 0;
-
-        Iterator i = _templates.values().iterator();
-
-        while (i.hasNext())
-        {
-            ComponentTemplate template = (ComponentTemplate) i.next();
-
-            templateCount++;
-
-            int count = template.getTokenCount();
-
-            tokenCount += count;
-
-            for (int j = 0; j < count; j++)
-            {
-                TemplateToken token = template.getToken(j);
-
-                if (token.getType() == TokenType.TEXT)
-                {
-                    TextToken tt = (TextToken) token;
-
-                    characterCount += tt.getLength();
-                }
-            }
-        }
-
-        event.property("parsed templates", templateCount);
-        event.property("total template tokens", tokenCount);
-        event.property("total template characters", characterCount);
-
-        event.section("Parsed template token counts");
-
-        i = _templates.entrySet().iterator();
-
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            String key = entry.getKey().toString();
-
-            ComponentTemplate template = (ComponentTemplate) entry.getValue();
-
-            event.property(key, template.getTokenCount());
-        }
-    }
-
-    /**
-     * Reads the template for the component.
-     */
-
-    public ComponentTemplate getTemplate(IRequestCycle cycle, IComponent component)
-    {
-        IComponentSpecification specification = component.getSpecification();
-        Resource resource = specification.getSpecificationLocation();
-
-        Locale locale = component.getPage().getLocale();
-
-        Object key = new MultiKey(new Object[] { resource, locale }, false);
-
-        ComponentTemplate result = searchCache(key);
-        if (result != null)
-            return result;
-
-        result = findTemplate(cycle, resource, component, locale);
-
-        if (result == null)
-        {
-            result = _delegate.findTemplate(cycle, component, locale);
-
-            if (result != null)
-                return result;
-
-            String message = component.getSpecification().isPageSpecification() ? ImplMessages
-                    .noTemplateForPage(component.getExtendedId(), locale) : ImplMessages
-                    .noTemplateForComponent(component.getExtendedId(), locale);
-
-            throw new ApplicationRuntimeException(message, component, component.getLocation(), null);
-        }
-
-        saveToCache(key, result);
-
-        return result;
-    }
-
-    private ComponentTemplate searchCache(Object key)
-    {
-        return (ComponentTemplate) _cache.get(key);
-    }
-
-    private void saveToCache(Object key, ComponentTemplate template)
-    {
-        _cache.put(key, template);
-
-    }
-
-    /**
-     * Finds the template for the given component, using the following rules:
-     * <ul>
-     * <li>If the component has a $template asset, use that
-     * <li>Look for a template in the same folder as the component
-     * <li>If a page in the application namespace, search in the application root
-     * <li>Fail!
-     * </ul>
-     * 
-     * @return the template, or null if not found
-     */
-
-    private ComponentTemplate findTemplate(IRequestCycle cycle, Resource resource,
-            IComponent component, Locale locale)
-    {
-        IAsset templateAsset = component.getAsset(TEMPLATE_ASSET_NAME);
-
-        if (templateAsset != null && templateAsset.getResourceLocation() != null && templateAsset.getResourceLocation().getResourceURL() != null)
-            return readTemplateFromAsset(cycle, component, templateAsset.getResourceLocation());
-        
-        String name = resource.getName();
-        int dotx = name.lastIndexOf('.');
-        String templateExtension = getTemplateExtension(component);
-        String templateBaseName = name.substring(0, dotx + 1) + templateExtension;
-
-        ComponentTemplate result = findStandardTemplate(
-                cycle,
-                resource,
-                component,
-                templateBaseName,
-                locale);
-
-        if (result == null && component.getSpecification().isPageSpecification()
-                && component.getNamespace().isApplicationNamespace())
-            result = findPageTemplateInApplicationRoot(
-                    cycle,
-                    (IPage) component,
-                    templateExtension,
-                    locale);
-
-        if (result == null) {
-
-            Resource template = _resourceResolver.findComponentResource(component, cycle, null, "." + templateExtension, locale);
-            
-            if (template != null && template.getResourceURL() != null)
-                return readTemplateFromAsset(cycle, component, template);
-        }
-
-        return result;
-    }
-
-    private ComponentTemplate findPageTemplateInApplicationRoot(IRequestCycle cycle, IPage page,
-            String templateExtension, Locale locale)
-    {
-        // Note: a subtle change from release 3.0 to 4.0.
-        // In release 3.0, you could use a <page> element to define a page named Foo whose
-        // specification was Bar.page. We would then search for /Bar.page. Confusing? Yes.
-        // In 4.0, we are more reliant on the page name, which may include a folder prefix (i.e.,
-        // "admin/EditUser", so when we search it is based on the page name and not the
-        // specification resource file name. We would search for Foo.html. Moral of the
-        // story is to use the page name for the page specifiation and the template.
-
-        String templateBaseName = page.getPageName() + "." + templateExtension;
-
-        if (_log.isDebugEnabled())
-            _log.debug("Checking for " + templateBaseName + " in application root");
-
-        Resource baseLocation = _contextRoot.getRelativeResource(templateBaseName);
-        Resource localizedLocation = _localizer.findLocalization(baseLocation, locale);
-
-        if (localizedLocation == null)
-            return null;
-
-        return getOrParseTemplate(cycle, localizedLocation, page);
-    }
-
-
-
-    /**
-     * Reads an asset to get the template.
-     */
-
-    private ComponentTemplate readTemplateFromAsset(IRequestCycle cycle, IComponent component,
-            Resource asset)
-    {
-        InputStream stream = null;
-
-        char[] templateData = null;
-
-        try
-        {
-            stream = asset.getResourceURL().openStream();
-
-            String encoding = getTemplateEncoding(component, null);
-
-            templateData = readTemplateStream(stream, encoding);
-
-            stream.close();
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.unableToReadTemplate(asset), ex);
-        }
-
-        return constructTemplateInstance(cycle, templateData, asset, component);
-    }
-
-    /**
-     * Search for the template corresponding to the resource and the locale. This may be in the
-     * template map already, or may involve reading and parsing the template.
-     * 
-     * @return the template, or null if not found.
-     */
-
-    private ComponentTemplate findStandardTemplate(IRequestCycle cycle, Resource resource,
-            IComponent component, String templateBaseName, Locale locale)
-    {
-        if (_log.isDebugEnabled())
-            _log.debug("Searching for localized version of template for " + resource
-                    + " in locale " + locale.getDisplayName());
-
-        Resource baseTemplateLocation = resource.getRelativeResource(templateBaseName);
-        Resource localizedTemplateLocation = _localizer.findLocalization(baseTemplateLocation, locale);
-
-        if (localizedTemplateLocation == null)
-            return null;
-
-        return getOrParseTemplate(cycle, localizedTemplateLocation, component);
-
-    }
-
-    /**
-     * Returns a previously parsed template at the specified location (which must already be
-     * localized). If not already in the template Map, then the location is parsed and stored into
-     * the templates Map, then returned.
-     */
-
-    private ComponentTemplate getOrParseTemplate(IRequestCycle cycle, Resource resource,
-            IComponent component)
-    {
-
-        ComponentTemplate result = (ComponentTemplate) _templates.get(resource);
-        if (result != null)
-            return result;
-
-        // Ok, see if it exists.
-
-        result = parseTemplate(cycle, resource, component);
-
-        if (result != null)
-            _templates.put(resource, result);
-
-        return result;
-    }
-
-    /**
-     * Reads the template for the given resource; returns null if the resource doesn't exist. Note
-     * that this method is only invoked from a synchronized block, so there shouldn't be threading
-     * issues here.
-     */
-
-    private ComponentTemplate parseTemplate(IRequestCycle cycle, Resource resource,
-            IComponent component)
-    {
-        String encoding = getTemplateEncoding(component, resource.getLocale());
-
-        char[] templateData = readTemplate(resource, encoding);
-        if (templateData == null)
-            return null;
-
-        return constructTemplateInstance(cycle, templateData, resource, component);
-    }
-
-    /**
-     * This method is currently synchronized, because {@link org.apache.tapestry.parse.TemplateParser} is not threadsafe.
-     * Another good candidate for a pooling mechanism, especially because parsing a template may
-     * take a while.
-     */
-
-    private synchronized ComponentTemplate constructTemplateInstance(IRequestCycle cycle,
-            char[] templateData, Resource resource, IComponent component)
-    {
-        String componentAttributeName = _componentPropertySource.getComponentProperty(
-                component,
-                "org.apache.tapestry.jwcid-attribute-name");
-
-        ITemplateParserDelegate delegate = new DefaultParserDelegate(component,
-                componentAttributeName, cycle, _componentSpecificationResolver);
-
-        TemplateToken[] tokens;
-
-        try
-        {
-            tokens = _parser.parse(templateData, delegate, resource);
-        }
-        catch (TemplateParseException ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.unableToParseTemplate(resource), ex);
-        }
-
-        if (_log.isDebugEnabled())
-            _log.debug("Parsed " + tokens.length + " tokens from template");
-
-        return new ComponentTemplate(templateData, tokens);
-    }
-
-    /**
-     * Reads the template, given the complete path to the resource. Returns null if the resource
-     * doesn't exist.
-     */
-
-    private char[] readTemplate(Resource resource, String encoding)
-    {
-        if (_log.isDebugEnabled())
-            _log.debug("Reading template " + resource);
-
-        URL url = resource.getResourceURL();
-
-        if (url == null)
-        {
-            if (_log.isDebugEnabled())
-                _log.debug("Template does not exist.");
-
-            return null;
-        }
-
-        if (_log.isDebugEnabled())
-            _log.debug("Reading template from URL " + url);
-
-        InputStream stream = null;
-
-        try
-        {
-            stream = url.openStream();
-
-            return readTemplateStream(stream, encoding);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(ImplMessages.unableToReadTemplate(resource), ex);
-        }
-        finally
-        {
-            Tapestry.close(stream);
-        }
-
-    }
-
-    /**
-     * Reads a Stream into memory as an array of characters.
-     */
-
-    private char[] readTemplateStream(InputStream stream, String encoding) throws IOException
-    {
-        char[] charBuffer = new char[BUFFER_SIZE];
-        StringBuffer buffer = new StringBuffer();
-
-        InputStreamReader reader;
-        if (encoding != null)
-            reader = new InputStreamReader(new BufferedInputStream(stream), encoding);
-        else
-            reader = new InputStreamReader(new BufferedInputStream(stream));
-
-        try
-        {
-            while (true)
-            {
-                int charsRead = reader.read(charBuffer, 0, BUFFER_SIZE);
-
-                if (charsRead <= 0)
-                    break;
-
-                buffer.append(charBuffer, 0, charsRead);
-            }
-        }
-        finally
-        {
-            reader.close();
-        }
-
-        // OK, now reuse the charBuffer variable to
-        // produce the final result.
-
-        int length = buffer.length();
-
-        charBuffer = new char[length];
-
-        // Copy the character out of the StringBuffer and into the
-        // array.
-
-        buffer.getChars(0, length, charBuffer, 0);
-
-        return charBuffer;
-    }
-
-    /**
-     * Checks for the {@link Tapestry#TEMPLATE_EXTENSION_PROPERTY}in the component's specification,
-     * then in the component's namespace's specification. Returns
-     * {@link Tapestry#TEMPLATE_EXTENSION_PROPERTY} if not otherwise overriden.
-     */
-
-    private String getTemplateExtension(IComponent component)
-    {
-        return _componentPropertySource.getComponentProperty(
-                component,
-                Tapestry.TEMPLATE_EXTENSION_PROPERTY);
-    }
-
-    private String getTemplateEncoding(IComponent component, Locale locale)
-    {
-        return _componentPropertySource.getLocalizedComponentProperty(
-                component,
-                locale,
-                TEMPLATE_ENCODING_PROPERTY_NAME);
-    }
-
-    /** @since 4.0 */
-
-    public void setParser(ITemplateParser parser)
-    {
-        _parser = parser;
-    }
-
-    /** @since 4.0 */
-
-    public void setLog(Log log)
-    {
-        _log = log;
-    }
-
-    /** @since 4.0 */
-
-    public void setDelegate(ITemplateSourceDelegate delegate)
-    {
-        _delegate = delegate;
-    }
-
-    /** @since 4.0 */
-
-    public void setComponentSpecificationResolver(ComponentSpecificationResolver resolver)
-    {
-        _componentSpecificationResolver = resolver;
-    }
-
-    /** @since 4.0 */
-    public void setContextRoot(Resource contextRoot)
-    {
-        _contextRoot = contextRoot;
-    }
-
-    /** @since 4.0 */
-    public void setComponentPropertySource(ComponentPropertySource componentPropertySource)
-    {
-        _componentPropertySource = componentPropertySource;
-    }
-
-    /** @since 4.0 */
-    public void setServiceId(String serviceId)
-    {
-        _serviceId = serviceId;
-    }
-
-    /** @since 4.0 */
-    public void setLocalizer(ResourceLocalizer localizer)
-    {
-        _localizer = localizer;
-    }
-
-    public void setComponentResourceResolver(IComponentResourceResolver resourceResolver)
-    {
-        _resourceResolver = resourceResolver;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/WebContextInitializer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/WebContextInitializer.java
deleted file mode 100644
index b75f940..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/WebContextInitializer.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServlet;
-
-import org.apache.tapestry.services.ApplicationGlobals;
-import org.apache.tapestry.services.ApplicationInitializer;
-import org.apache.tapestry.web.ServletWebContext;
-import org.apache.tapestry.web.WebContext;
-
-/**
- * Gets the context from the servlet, creates a {@link org.apache.tapestry.web.ServletWebContext},
- * and stores that into the {@link org.apache.tapestry.services.ApplicationGlobals}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class WebContextInitializer implements ApplicationInitializer
-{
-    private ApplicationGlobals _globals;
-
-    public void initialize(HttpServlet servlet)
-    {
-        ServletContext servletContext = servlet.getServletContext();
-        WebContext context = new ServletWebContext(servletContext);
-
-        _globals.storeServletContext(servletContext);
-        _globals.storeWebContext(context);
-    }
-
-    public void setGlobals(ApplicationGlobals globals)
-    {
-        _globals = globals;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/WebRequestServicerPipelineBridge.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/WebRequestServicerPipelineBridge.java
deleted file mode 100644
index 70e0948..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/WebRequestServicerPipelineBridge.java
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.tapestry.services.RequestGlobals;
-import org.apache.tapestry.services.ServletRequestServicer;
-import org.apache.tapestry.services.WebRequestServicer;
-import org.apache.tapestry.web.ServletWebRequest;
-import org.apache.tapestry.web.ServletWebResponse;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-/**
- * Bridges from the <code>tapestry.request.ServletRequestServicerPipeline</code> to the
- * <code>tapestry.request.WebRequestServicerPipeline</code>. Also, stores the web request and
- * web response into {@link org.apache.tapestry.services.RequestGlobals}. Intercepts runtime
- * exceptions and throws them wrapped as {@link javax.servlet.ServletException}.
- * 
- * <p>This service is responsible for for storing the http/web request wrappers into 
- *  {@link RequestGlobals}.</p>
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class WebRequestServicerPipelineBridge implements ServletRequestServicer
-{
-    private RequestGlobals _requestGlobals;
-
-    private WebRequestServicer _webRequestServicer;
-
-    public void service(HttpServletRequest request, HttpServletResponse response)
-            throws IOException, ServletException
-    {
-        _requestGlobals.store(request, response);
-        
-        WebRequest webRequest = new ServletWebRequest(request, response);
-        WebResponse webResponse = new ServletWebResponse(response);
-        
-        _requestGlobals.store(webRequest, webResponse);
-        
-        try
-        {
-            _webRequestServicer.service(webRequest, webResponse);
-        }
-        catch (RuntimeException ex)
-        {
-            throw new ServletException(ex);
-        }
-    }
-
-    public void setRequestGlobals(RequestGlobals requestGlobals)
-    {
-        _requestGlobals = requestGlobals;
-    }
-
-    public void setWebRequestServicer(WebRequestServicer webRequestServicer)
-    {
-        _webRequestServicer = webRequestServicer;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/package.html
deleted file mode 100644
index b427a51..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/impl/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Service implementations.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/package.html
deleted file mode 100644
index 018ad40..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/services/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<body>
-
-    Interfaces for Tapestry-related HiveMind services.
-    
-</body>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ApplicationSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ApplicationSpecification.java
deleted file mode 100644
index 247f147..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ApplicationSpecification.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.util.ToStringBuilder;
-
-/**
- *  Defines the configuration for a Tapestry application.  An ApplicationSpecification
- *  extends {@link LibrarySpecification} by adding new properties
- *  name and engineClassName.
- *
- *  @author Howard Lewis Ship
- *
- **/
-
-public class ApplicationSpecification extends LibrarySpecification implements IApplicationSpecification
-{
-    private String _name;
-    private String _engineClassName;
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public void setEngineClassName(String value)
-    {
-        _engineClassName = value;
-    }
-
-    public String getEngineClassName()
-    {
-        return _engineClassName;
-    }
-
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-        builder.append("name", _name);
-        builder.append("engineClassName", _engineClassName);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/AssetSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/AssetSpecification.java
deleted file mode 100644
index c5b7d77..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/AssetSpecification.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-/**
- * Defines an internal, external or private asset.
- * 
- * @author Howard Lewis Ship
- */
-
-public class AssetSpecification extends LocatablePropertyHolder implements IAssetSpecification
-{
-    protected String _path;
-
-    /** @since 4.0 */
-    private String _propertyName;
-
-    /**
-     * Returns the base path for the asset. This may be interpreted as a URL, relative URL or the
-     * path to a resource, depending on the type of asset. Starting with 4.0, this may have a prefix
-     * added to identify the type of resource.
-     */
-
-    public String getPath()
-    {
-        return _path;
-    }
-
-    /** @since 3.0 * */
-
-    public void setPath(String path)
-    {
-        this._path = path;
-    }
-
-    /** @since 4.0 */
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    /** @since 4.0 */
-    public void setPropertyName(String propertyName)
-    {
-        _propertyName = propertyName;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BeanLifecycle.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BeanLifecycle.java
deleted file mode 100644
index 246b756..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BeanLifecycle.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-/**
- * An enumeration of the different possible lifecycles for a JavaBean.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.4
- */
-
-public final class BeanLifecycle
-{
-    /**
-     * No lifecycle; the bean is created fresh on each reference and not retained.
-     */
-
-    public static final BeanLifecycle NONE = new BeanLifecycle("NONE");
-
-    /**
-     * The standard lifecycle; the bean is retained for the duration of the request cycle and is
-     * discarded at the end of the request cycle.
-     */
-
-    public static final BeanLifecycle REQUEST = new BeanLifecycle("REQUEST");
-
-    /**
-     * The bean is created once and reused for the lifespan of the page containing the component.
-     */
-
-    public static final BeanLifecycle PAGE = new BeanLifecycle("PAGE");
-
-    /**
-     * The bean is create and reused until the end of the current render, at which point it is
-     * discarded.
-     * 
-     * @since 2.2
-     */
-
-    public static final BeanLifecycle RENDER = new BeanLifecycle("RENDER");
-
-    private final String _name;
-
-    private BeanLifecycle(String name)
-    {
-        _name = name;
-    }
-
-    public String toString()
-    {
-        return "BeanLifecycle[" + _name + "]";
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BeanSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BeanSpecification.java
deleted file mode 100644
index 24fcb08..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BeanSpecification.java
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.bean.IBeanInitializer;
-
-/**
- * A specification of a helper bean for a component.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.4
- */
-
-public class BeanSpecification extends LocatablePropertyHolder implements IBeanSpecification
-{
-    protected String _className;
-
-    protected BeanLifecycle _lifecycle;
-
-    /**
-     * A List of {@link IBeanInitializer}.
-     */
-
-    protected List _initializers;
-
-    /** @since 1.0.9 * */
-    private String _description;
-
-    /** @since 4.0 */
-
-    private String _propertyName;
-    
-    public String getClassName()
-    {
-        return _className;
-    }
-
-    public BeanLifecycle getLifecycle()
-    {
-        return _lifecycle;
-    }
-
-    /**
-     * @since 1.0.5
-     */
-
-    public void addInitializer(IBeanInitializer initializer)
-    {
-        if (_initializers == null)
-            _initializers = new ArrayList();
-
-        _initializers.add(initializer);
-    }
-
-    /**
-     * Returns the {@link List}of {@link IBeanInitializer}s. The caller should not modify this
-     * value!. May return null if there are no initializers.
-     * 
-     * @since 1.0.5
-     */
-
-    public List getInitializers()
-    {
-        return _initializers;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("BeanSpecification[");
-
-        buffer.append(_className);
-        buffer.append(", lifecycle ");
-        buffer.append(_lifecycle.getName());
-
-        if (_initializers != null && _initializers.size() > 0)
-        {
-            buffer.append(", ");
-            buffer.append(_initializers.size());
-            buffer.append(" initializers");
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    public String getDescription()
-    {
-        return _description;
-    }
-
-    public void setDescription(String desc)
-    {
-        _description = desc;
-    }
-
-    /** @since 3.0 * */
-
-    public void setClassName(String className)
-    {
-        this._className = className;
-    }
-
-    /** @since 3.0 * */
-
-    public void setLifecycle(BeanLifecycle lifecycle)
-    {
-        this._lifecycle = lifecycle;
-    }
-
-    /** @since 4.0 */
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    /** @since 4.0 */
-    public void setPropertyName(String propertyName)
-    {
-        _propertyName = propertyName;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BindingSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BindingSpecification.java
deleted file mode 100644
index a5346f4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BindingSpecification.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- *  Stores a binding specification, which identifies the static value
- *  or OGNL expression for the binding.  The name of the binding (which
- *  matches a bindable property of the contined component) is implicitly known.
- *
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class BindingSpecification extends BaseLocatable implements IBindingSpecification
-{
-    private BindingType _type;
-    private String _value;
-    
-    public BindingType getType()
-    {
-        return _type;
-    }
-
-    public String getValue()
-    {
-        return _value;
-    }
-
-    public void setType(BindingType type)
-    {
-        _type = type;
-    }
-
-    public void setValue(String value)
-    {
-        _value = value;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BindingType.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BindingType.java
deleted file mode 100644
index fe940a9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/BindingType.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-/**
- * Defines the different types of bindings possible for a component. These are used in the
- * {@link IBindingSpecification} and ultimately used to create an instance of
- * {@link org.apache.tapestry.IBinding}.
- * 
- * @author Howard Lewis Ship
- */
-
-public final class BindingType
-{
-    /**
-     * Indicates that the binding value is a prefixed locator, ready for use with
-     * {@link org.apache.tapestry.binding.BindingSource}.
-     */
-
-    public static final BindingType PREFIXED = new BindingType("PREFIXED");
-
-    public static final BindingType INHERITED = new BindingType("INHERITED");
-
-    private final String _name;
-
-    private BindingType(String name)
-    {
-        _name = name;
-    }
-
-    public String toString()
-    {
-        return "BindingType[" + _name + "]";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java
deleted file mode 100644
index 0a8be8b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java
+++ /dev/null
@@ -1,867 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.ToStringBuilder;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.internal.event.ComponentEventProperty;
-import org.apache.tapestry.internal.event.EventBoundListener;
-
-import java.util.*;
-
-/**
- * A specification for a component, as read from an XML specification file.
- * <p>
- * A specification consists of
- * <ul>
- * <li>An implementing class
- * <li>An optional description
- * <li>A set of contained components
- * <li>Bindings for the properties of each contained component
- * <li>A set of named assets
- * <li>Definitions for managed beans
- * <li>Any reserved names (used for HTML attributes)
- * <li>Declared properties
- * <li>Property injections
- * </ul>
- * <p>
- * From this information, an actual component may be instantiated and initialized. Instantiating a
- * component is usually a recursive process, since to initialize a container component, it is
- * necessary to instantiate and initialize its contained components as well.
- * 
- * @see org.apache.tapestry.IComponent
- * @see IContainedComponent
- * @see org.apache.tapestry.engine.IPageLoader
- * @author Howard Lewis Ship
- */
-
-public class ComponentSpecification extends LocatablePropertyHolder implements IComponentSpecification
-{
-    /**
-     * Keyed on component id, value is {@link IContainedComponent}.
-     */
-
-    protected Map _components;
-
-    /**
-     * Keyed on asset name, value is {@link IAssetSpecification}.
-     */
-
-    protected Map _assets;
-
-    /**
-     * Defines all formal parameters. Keyed on parameter name, value is
-     * {@link IParameterSpecification}.
-     */
-
-    protected Map _parameters;
-
-    /**
-     * Defines all helper beans. Keyed on name, value is {@link IBeanSpecification}.
-     * 
-     * @since 1.0.4
-     */
-
-    protected Map _beans;
-
-    /**
-     * The names of all reserved informal parameter names (as lower-case). This allows the page
-     * loader to filter out any informal parameters during page load, rather than during render.
-     * 
-     * @since 1.0.5
-     */
-
-    protected Set _reservedParameterNames;
-
-    private String _componentClassName;
-
-    /** @since 1.0.9 * */
-
-    private String _description;
-    
-    /**
-     * Is the component allowed to have a body (that is, wrap other elements?).
-     */
-
-    private boolean _allowBody = true;
-
-    /**
-     * Is the component allow to have informal parameter specified.
-     */
-
-    private boolean _allowInformalParameters = true;
-
-    /**
-     * The XML Public Id used when the page or component specification was read (if applicable).
-     * 
-     * @since 2.2
-     */
-
-    private String _publicId;
-
-    /**
-     * Indicates that the specification is for a page, not a component.
-     * 
-     * @since 2.2
-     */
-
-    private boolean _pageSpecification;
-
-    /**
-     * The location from which the specification was obtained.
-     * 
-     * @since 3.0
-     */
-
-    private Resource _specificationLocation;
-
-    /**
-     * A Map of {@link IPropertySpecification}keyed on the name of the property.
-     * 
-     * @since 3.0
-     */
-
-    private Map _propertySpecifications;
-
-    /**
-     * List of {@link InjectSpecification}.
-     * 
-     * @since 4.0
-     */
-
-    private List _injectSpecifications;
-
-    /**
-     * Keyed on property name, value is some other object (such as an IAssetSpecification) that has
-     * claimed a property of the page.
-     * 
-     * @since 4.0
-     */
-
-    private Map _claimedProperties;
-
-    /**
-     * @since 4.0
-     */
-
-    private boolean _deprecated = false;
-    
-    private Map _componentEvents = new HashMap();
-    private Map _elementEvents = new HashMap();
-
-    /**
-     * @throws ApplicationRuntimeException
-     *             if the name already exists.
-     */
-
-    public void addAsset(String name, IAssetSpecification asset)
-    {
-        if (_assets == null)
-            _assets = new HashMap();
-
-        IAssetSpecification existing = (IAssetSpecification) _assets.get(name);
-
-        if (existing != null)
-            throw new ApplicationRuntimeException(SpecMessages.duplicateAsset(name, existing),
-                    asset.getLocation(), null);
-
-        claimProperty(asset.getPropertyName(), asset);
-
-        _assets.put(name, asset);
-    }
-
-    /**
-     * @throws ApplicationRuntimeException if the id is already defined.
-     */
-
-    public void addComponent(String id, IContainedComponent component)
-    {
-        if (_components == null)
-            _components = new HashMap();
-
-        IContainedComponent existing = (IContainedComponent) _components.get(id);
-
-        if (existing != null)
-            throw new ApplicationRuntimeException(SpecMessages.duplicateComponent(id, existing),
-                    component.getLocation(), null);
-
-        _components.put(id, component);
-
-        claimProperty(component.getPropertyName(), component);
-    }
-
-    /**
-     * Adds the parameter. The name is added as a reserved name.
-     * 
-     * @throws ApplicationRuntimeException if the name already exists.
-     */
-
-    public void addParameter(IParameterSpecification spec)
-    {
-        if (_parameters == null)
-            _parameters = new HashMap();
-
-        String name = spec.getParameterName();
-
-        addParameterByName(name, spec);
-
-        Iterator i = spec.getAliasNames().iterator();
-        while (i.hasNext())
-        {
-            String alias = (String) i.next();
-
-            addParameterByName(alias, spec);
-        }
-
-        claimProperty(spec.getPropertyName(), spec);
-    }
-
-    private void addParameterByName(String name, IParameterSpecification spec)
-    {
-        IParameterSpecification existing = (IParameterSpecification) _parameters.get(name);
-
-        if (existing != null)
-            throw new ApplicationRuntimeException(SpecMessages.duplicateParameter(name, existing),
-                    spec.getLocation(), null);
-
-        _parameters.put(name, spec);
-
-        addReservedParameterName(name);
-    }
-
-    /**
-     * Returns true if the component is allowed to wrap other elements (static HTML or other
-     * components). The default is true.
-     * 
-     * @see #setAllowBody(boolean)
-     */
-
-    public boolean getAllowBody()
-    {
-        return _allowBody;
-    }
-
-    /**
-     * Returns true if the component allows informal parameters (parameters not formally defined).
-     * Informal parameters are generally used to create additional HTML attributes for an HTML tag
-     * rendered by the component. This is often used to specify JavaScript event handlers or the
-     * class of the component (for Cascarding Style Sheets).
-     * <p>
-     * The default value is true.
-     * 
-     * @see #setAllowInformalParameters(boolean)
-     */
-
-    public boolean getAllowInformalParameters()
-    {
-        return _allowInformalParameters;
-    }
-
-    /**
-     * Returns the {@link IAssetSpecification}with the given name, or null if no such specification
-     * exists.
-     * 
-     * @see #addAsset(String,IAssetSpecification)
-     */
-
-    public IAssetSpecification getAsset(String name)
-    {
-        return (IAssetSpecification) get(_assets, name);
-    }
-
-    /**
-     * Returns a <code>List</code> of the String names of all assets, in alphabetical order.
-     */
-
-    public List getAssetNames()
-    {
-        return sortedKeys(_assets);
-    }
-
-    /**
-     * Returns the specification of a contained component with the given id, or null if no such
-     * contained component exists.
-     * 
-     * @see #addComponent(String, IContainedComponent)
-     */
-
-    public IContainedComponent getComponent(String id)
-    {
-        return (IContainedComponent) get(_components, id);
-    }
-
-    
-    public String getComponentClassName()
-    {
-        return _componentClassName;
-    }
-
-    /**
-     * Returns an <code>List</code> of the String names of the {@link IContainedComponent}s for
-     * this component.
-     * 
-     * @see #addComponent(String, IContainedComponent)
-     */
-
-    public List getComponentIds()
-    {
-        return sortedKeys(_components);
-    }
-
-    /**
-     * Returns the specification of a parameter with the given name, or null if no such parameter
-     * exists.
-     * 
-     * @see #addParameterByName(String, IParameterSpecification)
-     */
-
-    public IParameterSpecification getParameter(String name)
-    {
-        return (IParameterSpecification) get(_parameters, name);
-    }
-
-    public Collection getRequiredParameters()
-    {
-        if (_parameters == null)
-            return Collections.EMPTY_LIST;
-
-        Collection result = new ArrayList();
-
-        Iterator i = _parameters.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-            String name = (String) entry.getKey();
-            IParameterSpecification spec = (IParameterSpecification) entry.getValue();
-
-            if (!spec.isRequired())
-                continue;
-
-            if (!name.equals(spec.getParameterName()))
-                continue;
-
-            result.add(spec);
-        }
-
-        return result;
-    }
-
-    /**
-     * Returns a List of of String names of all parameters. This list is in alphabetical order.
-     * 
-     * @see #addParameterByName(String, IParameterSpecification)
-     */
-
-    public List getParameterNames()
-    {
-        return sortedKeys(_parameters);
-    }
-
-    public void setAllowBody(boolean value)
-    {
-        _allowBody = value;
-    }
-
-    public void setAllowInformalParameters(boolean value)
-    {
-        _allowInformalParameters = value;
-    }
-
-    public void setComponentClassName(String value)
-    {
-        _componentClassName = value;
-    }
-
-    /**
-     * @since 1.0.4
-     * @throws ApplicationRuntimeException
-     *             if the bean already has a specification.
-     */
-
-    public void addBeanSpecification(String name, IBeanSpecification specification)
-    {
-        if (_beans == null)
-            _beans = new HashMap();
-
-        IBeanSpecification existing = (IBeanSpecification) _beans.get(name);
-
-        if (existing != null)
-            throw new ApplicationRuntimeException(SpecMessages.duplicateBean(name, existing),
-                    specification.getLocation(), null);
-
-        claimProperty(specification.getPropertyName(), specification);
-
-        _beans.put(name, specification);
-    }
-
-    /**
-     * Returns the {@link IBeanSpecification}for the given name, or null if not such specification
-     * exists.
-     * 
-     * @since 1.0.4
-     */
-
-    public IBeanSpecification getBeanSpecification(String name)
-    {
-        return (IBeanSpecification) get(_beans, name);
-    }
-
-    /**
-     * Returns an unmodifiable collection of the names of all beans.
-     */
-
-    public Collection getBeanNames()
-    {
-        if (_beans == null)
-            return Collections.EMPTY_LIST;
-
-        return Collections.unmodifiableCollection(_beans.keySet());
-    }
-
-    /**
-     * Adds the value as a reserved name. Reserved names are not allowed as the names of informal
-     * parameters. Since the comparison is caseless, the value is converted to lowercase before
-     * being stored.
-     * 
-     * @since 1.0.5
-     */
-
-    public void addReservedParameterName(String value)
-    {
-        if (_reservedParameterNames == null)
-            _reservedParameterNames = new HashSet();
-
-        _reservedParameterNames.add(value.toLowerCase());
-    }
-
-    /**
-     * Returns true if the value specified is in the reserved name list. The comparison is caseless.
-     * All formal parameters are automatically in the reserved name list, as well as any additional
-     * reserved names specified in the component specification. The latter refer to HTML attributes
-     * generated directly by the component.
-     * 
-     * @since 1.0.5
-     */
-
-    public boolean isReservedParameterName(String value)
-    {
-        if (_reservedParameterNames == null)
-            return false;
-
-        return _reservedParameterNames.contains(value.toLowerCase());
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("componentClassName", _componentClassName);
-        builder.append("pageSpecification", _pageSpecification);
-        builder.append("specificationLocation", _specificationLocation);
-        builder.append("allowBody", _allowBody);
-        builder.append("allowInformalParameter", _allowInformalParameters);
-
-        return builder.toString();
-    }
-
-    /**
-     * Returns the documentation for this component.
-     * 
-     * @since 1.0.9
-     */
-
-    public String getDescription()
-    {
-        return _description;
-    }
-
-    /**
-     * Sets the documentation for this component.
-     * 
-     * @since 1.0.9
-     */
-
-    public void setDescription(String description)
-    {
-        _description = description;
-    }
-
-    /**
-     * Returns the XML Public Id for the specification file, or null if not applicable.
-     * <p>
-     * This method exists as a convienience for the Spindle plugin. A previous method used an
-     * arbitrary version string, the public id is more useful and less ambiguous.
-     * 
-     * @since 2.2
-     */
-
-    public String getPublicId()
-    {
-        return _publicId;
-    }
-
-    /** @since 2.2 * */
-
-    public void setPublicId(String publicId)
-    {
-        _publicId = publicId;
-    }
-
-    /**
-     * Returns true if the specification is known to be a page specification and not a component
-     * specification. Earlier versions of the framework did not distinguish between the two, but
-     * starting in 2.2, there are seperate XML entities for pages and components. Pages omit several
-     * attributes and entities related to parameters, as parameters only make sense for components.
-     * 
-     * @since 2.2
-     */
-
-    public boolean isPageSpecification()
-    {
-        return _pageSpecification;
-    }
-
-    /** @since 2.2 * */
-
-    public void setPageSpecification(boolean pageSpecification)
-    {
-        _pageSpecification = pageSpecification;
-    }
-
-    /** @since 2.2 * */
-
-    private List sortedKeys(Map input)
-    {
-        if (input == null)
-            return Collections.EMPTY_LIST;
-
-        List result = new ArrayList(input.keySet());
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    /** @since 2.2 * */
-
-    private Object get(Map map, Object key)
-    {
-        if (map == null)
-            return null;
-
-        return map.get(key);
-    }
-
-    /** @since 3.0 * */
-
-    public Resource getSpecificationLocation()
-    {
-        return _specificationLocation;
-    }
-
-    /** @since 3.0 * */
-
-    public void setSpecificationLocation(Resource specificationLocation)
-    {
-        _specificationLocation = specificationLocation;
-    }
-
-    /**
-     * Adds a new property specification. The name of the property must not already be defined (and
-     * must not change after being added).
-     * 
-     * @since 3.0
-     */
-
-    public void addPropertySpecification(IPropertySpecification spec)
-    {
-        if (_propertySpecifications == null)
-            _propertySpecifications = new HashMap();
-
-        String name = spec.getName();
-        IPropertySpecification existing = (IPropertySpecification) _propertySpecifications
-                .get(name);
-
-        if (existing != null)
-            throw new ApplicationRuntimeException(SpecMessages.duplicateProperty(name, existing), spec.getLocation(), null);
-
-        claimProperty(name, spec);
-
-        _propertySpecifications.put(name, spec);
-    }
-
-    /**
-     * Returns a sorted, immutable list of the names of all
-     * {@link org.apache.tapestry.spec.IPropertySpecification}s.
-     * 
-     * @since 3.0
-     */
-
-    public List getPropertySpecificationNames()
-    {
-        return sortedKeys(_propertySpecifications);
-    }
-
-    /**
-     * Returns the named {@link org.apache.tapestry.spec.IPropertySpecification}, or null if no
-     * such specification exist.
-     * 
-     * @since 3.0
-     * @see #addPropertySpecification(IPropertySpecification)
-     */
-
-    public IPropertySpecification getPropertySpecification(String name)
-    {
-        return (IPropertySpecification) get(_propertySpecifications, name);
-    }
-
-    public void addInjectSpecification(InjectSpecification spec)
-    {
-        if (_injectSpecifications == null)
-            _injectSpecifications = new ArrayList();
-
-        claimProperty(spec.getProperty(), spec);
-
-        _injectSpecifications.add(spec);
-    }
-
-    public List getInjectSpecifications()
-    {
-        return safeList(_injectSpecifications);
-    }
-
-    private List safeList(List input)
-    {
-        if (input == null)
-            return Collections.EMPTY_LIST;
-
-        return Collections.unmodifiableList(input);
-    }
-
-    private void claimProperty(String propertyName, Object subSpecification)
-    {
-        if (propertyName == null)
-            return;
-
-        if (_claimedProperties == null)
-            _claimedProperties = new HashMap();
-
-        Object existing = _claimedProperties.get(propertyName);
-
-        if (existing != null)
-            throw new ApplicationRuntimeException(SpecMessages.claimedProperty(
-                    propertyName,
-                    existing), HiveMind.getLocation(subSpecification), null);
-
-        _claimedProperties.put(propertyName, subSpecification);
-    }
-
-    /** @since 4.0 */
-    public boolean isDeprecated()
-    {
-        return _deprecated;
-    }
-
-    /** @since 4.0 */
-    public void setDeprecated(boolean deprecated)
-    {
-        _deprecated = deprecated;
-    }
-
-    public Set getReservedParameterNames()
-    {
-        if (_reservedParameterNames == null)
-            return Collections.EMPTY_SET;
-
-        return Collections.unmodifiableSet(_reservedParameterNames);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void addEventListener(String componentId, String[] events, 
-            String methodName, String formId, boolean validateForm, boolean async, boolean focus, boolean autoSubmit)
-    {
-        ComponentEventProperty property = getComponentEvents(componentId);
-        if (property == null) {
-            property = new ComponentEventProperty(componentId);
-            _componentEvents.put(componentId, property);
-        }
-
-        property.addListener(events, methodName, formId, validateForm, async, focus, autoSubmit);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void addElementEventListener(String elementId, String[] events, 
-            String methodName, String formId, boolean validateForm, boolean async, boolean focus)
-    {
-        ComponentEventProperty property = getElementEvents(elementId);
-        if (property == null) {
-            property = new ComponentEventProperty(elementId);
-            _elementEvents.put(elementId, property);
-        }
-
-        property.addListener(events, methodName, formId, validateForm, async, focus, true);
-    }
-
-    public void connectAutoSubmitEvents(IComponent component, IForm form)
-    {
-        Defense.notNull(form, "form");
-        
-        ComponentEventProperty property = getComponentEvents(component.getExtendedId());
-        
-        if (property == null)
-            return;
-
-        property.connectAutoSubmitEvents(form.getExtendedId());
-    }
-
-    public void rewireComponentId(String componentId, String idPath)
-    {
-        ComponentEventProperty prop = getComponentEvents(componentId);
-        if (prop == null)
-            return;
-
-        if (_componentEvents.containsKey(idPath))
-            return;
-
-        try {
-
-            ComponentEventProperty clone = (ComponentEventProperty) prop.clone();
-
-            clone.rewireComponentId(idPath);
-
-            _componentEvents.put(idPath, clone);
-
-        } catch (CloneNotSupportedException e) {
-
-            throw new ApplicationRuntimeException(e);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public ComponentEventProperty getComponentEvents(String id)
-    {
-        return (ComponentEventProperty)_componentEvents.get(id);
-    }
-
-    public Map getComponentEvents()
-    {
-        return _componentEvents;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public ComponentEventProperty getElementEvents(String id)
-    {
-        return (ComponentEventProperty)_elementEvents.get(id);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public Map getElementEvents()
-    {
-        return _elementEvents;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public EventBoundListener[] getFormEvents(String formId, BrowserEvent event)
-    {
-        List ret = new ArrayList();
-        
-        Iterator it = _componentEvents.keySet().iterator();
-        while (it.hasNext()) {
-            
-            String compId = (String)it.next();
-            ComponentEventProperty prop = (ComponentEventProperty)_componentEvents.get(compId);
-
-            ret.addAll(prop.getFormEventListeners(formId, event, null));
-        }
-        
-        it = _elementEvents.keySet().iterator();
-        while (it.hasNext()) {
-            
-            String compId = (String)it.next();
-            ComponentEventProperty prop = (ComponentEventProperty)_elementEvents.get(compId);
-
-            ret.addAll(prop.getFormEventListeners(formId, event, null));
-        }
-        
-        return (EventBoundListener[])ret.toArray(new EventBoundListener[ret.size()]);
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public boolean hasElementEvents()
-    {
-        return _elementEvents.size() > 0;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int hashCode()
-    {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((_componentClassName == null) ? 0 : _componentClassName.hashCode());
-        result = prime * result + ((_description == null) ? 0 : _description.hashCode());
-        result = prime * result + (_pageSpecification ? 1231 : 1237);
-        result = prime * result + ((_publicId == null) ? 0 : _publicId.hashCode());
-        return result;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean equals(Object obj)
-    {
-        if (this == obj) return true;
-        if (obj == null) return false;
-        if (getClass() != obj.getClass()) return false;
-        final ComponentSpecification other = (ComponentSpecification) obj;
-        if (_componentClassName == null) {
-            if (other._componentClassName != null) return false;
-        } else if (!_componentClassName.equals(other._componentClassName)) return false;
-        if (_description == null) {
-            if (other._description != null) return false;
-        } else if (!_description.equals(other._description)) return false;
-        if (_pageSpecification != other._pageSpecification) return false;
-        if (_publicId == null) {
-            if (other._publicId != null) return false;
-        } else if (!_publicId.equals(other._publicId)) return false;
-        if (_specificationLocation == null) {
-            if (other._specificationLocation != null) return false;
-        } else if (!_specificationLocation.getPath().equals(other._specificationLocation.getPath())) return false;
-        return true;
-    }
-    
-    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ContainedComponent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ContainedComponent.java
deleted file mode 100644
index 19a8777..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ContainedComponent.java
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Defines a contained component. This includes the information needed to get the contained
- * component's specification, as well as any bindings for the component.
- * 
- * @author Howard Lewis Ship
- */
-
-public class ContainedComponent extends LocatablePropertyHolder implements IContainedComponent
-{
-    private static final int MAP_SIZE = 3;
-    
-    protected Map _bindings;
-    
-    private String _type;
-
-    private String _copyOf;
-
-    private boolean _inheritInformalParameters;
-
-    /** @since 4.0 */
-    private String _propertyName;
-
-    /**
-     * Returns the named binding, or null if the binding does not exist.
-     */
-
-    public IBindingSpecification getBinding(String name)
-    {
-        if (_bindings == null)
-            return null;
-
-        return (IBindingSpecification) _bindings.get(name);
-    }
-
-    /**
-     * Returns an umodifiable <code>Collection</code> of Strings, each the name of one binding for
-     * the component.
-     */
-
-    public Collection getBindingNames()
-    {
-        if (_bindings == null)
-            return Collections.EMPTY_LIST;
-
-        return Collections.unmodifiableCollection(_bindings.keySet());
-    }
-
-    public String getType()
-    {
-        return _type;
-    }
-
-    public void setBinding(String name, IBindingSpecification spec)
-    {
-        if (_bindings == null)
-            _bindings = new HashMap(MAP_SIZE);
-
-        _bindings.put(name, spec);
-    }
-
-    public void setType(String value)
-    {
-        _type = value;
-    }
-    
-    /**
-     * Sets the String Id of the component being copied from. For use by IDE tools like Spindle.
-     * 
-     * @since 1.0.9
-     */
-
-    public void setCopyOf(String id)
-    {
-        _copyOf = id;
-    }
-
-    /**
-     * Returns the id of the component being copied from. For use by IDE tools like Spindle.
-     * 
-     * @since 1.0.9
-     */
-
-    public String getCopyOf()
-    {
-        return _copyOf;
-    }
-
-    /**
-     * Returns whether the contained component will inherit the informal parameters of its parent.
-     * 
-     * @since 3.0
-     */
-    public boolean getInheritInformalParameters()
-    {
-        return _inheritInformalParameters;
-    }
-
-    /**
-     * Sets whether the contained component will inherit the informal parameters of its parent.
-     * 
-     * @since 3.0
-     */
-    public void setInheritInformalParameters(boolean value)
-    {
-        _inheritInformalParameters = value;
-    }
-
-    /** @since 4.0 */
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    /** @since 4.0 */
-    public void setPropertyName(String propertyName)
-    {
-        _propertyName = propertyName;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ExtensionSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ExtensionSpecification.java
deleted file mode 100644
index 41f400f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ExtensionSpecification.java
+++ /dev/null
@@ -1,203 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.coerce.ValueConverter;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Defines an "extension", which is much like a helper bean, but is part of a library or application
- * specification (and has the same lifecycle as the application).
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class ExtensionSpecification extends LocatablePropertyHolder implements IExtensionSpecification
-{
-    private static final Log LOG = LogFactory.getLog(ExtensionSpecification.class);
-    
-    protected Map _configuration = new HashMap();
-    
-    private String _className;
-    
-    private boolean _immediate;
-
-    /** @since 4.0 */
-    private ClassResolver _resolver;
-
-    /** @since 4.0 */
-    private ValueConverter _converter;
-
-    /**
-     * Creates a new instance which will use the specified resolver to resolve classes and converter
-     * to coerce values to their desired type.
-     *
-     * @param resolver
-     *          The class resolver used to resolve classes safely in a servlet environment.
-     * @param valueConverter
-     *          Converter used to coerce values.
-     */
-    public ExtensionSpecification(ClassResolver resolver, ValueConverter valueConverter)
-    {
-        _resolver = resolver;
-        _converter = valueConverter;
-    }
-
-    public String getClassName()
-    {
-        return _className;
-    }
-
-    public void setClassName(String className)
-    {
-        _className = className;
-    }
-
-    public void addConfiguration(String propertyName, String value)
-    {
-        if (_configuration.containsKey(propertyName))
-            throw new IllegalArgumentException(Tapestry.format("ExtensionSpecification.duplicate-property", this, propertyName));
-
-        _configuration.put(propertyName, value);
-    }
-
-    /**
-     * Returns an immutable Map of the configuration; keyed on property name, with values as
-     * properties to assign.
-     */
-
-    public Map getConfiguration()
-    {
-        return Collections.unmodifiableMap(_configuration);
-    }
-
-    /**
-     * Invoked to instantiate an instance of the extension and return it. It also configures
-     * properties of the extension.
-     */
-
-    public Object instantiateExtension()
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Instantiating extension class " + _className + ".");
-
-        Class extensionClass = null;
-        Object result = null;
-
-        try
-        {
-            extensionClass = _resolver.findClass(_className);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(Tapestry.format(
-                    "ExtensionSpecification.bad-class",
-                    _className), getLocation(), ex);
-        }
-
-        result = instantiateInstance(extensionClass, result);
-
-        initializeProperties(result);
-
-        return result;
-    }
-
-    private void initializeProperties(Object extension)
-    {
-
-        Iterator i = _configuration.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            String propertyName = (String) entry.getKey();
-            String textValue = (String) entry.getValue();
-
-            try
-            {
-                Class propertyType = PropertyUtils.getPropertyType(extension, propertyName);
-
-                Object objectValue = _converter.coerceValue(textValue, propertyType);
-
-                PropertyUtils.write(extension, propertyName, objectValue);
-            }
-            catch (Exception ex)
-            {
-                throw new ApplicationRuntimeException(ex.getMessage(), getLocation(), ex);
-            }
-        }
-    }
-
-    private Object instantiateInstance(Class extensionClass, Object result)
-    {
-        Object returnResult = result;
-        try
-        {
-            returnResult = extensionClass.newInstance();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), getLocation(), ex);
-        }
-
-        return returnResult;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("ExtensionSpecification@");
-        buffer.append(Integer.toHexString(hashCode()));
-        buffer.append('[');
-        buffer.append(_className);
-
-        if (_configuration != null)
-        {
-            buffer.append(' ');
-            buffer.append(_configuration);
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /**
-     * Returns true if the extensions should be instantiated immediately after the containing
-     * {@link org.apache.tapestry.spec.LibrarySpecification}if parsed. Non-immediate extensions are
-     * instantiated only as needed.
-     */
-
-    public boolean isImmediate()
-    {
-        return _immediate;
-    }
-
-    public void setImmediate(boolean immediate)
-    {
-        _immediate = immediate;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IApplicationSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IApplicationSpecification.java
deleted file mode 100644
index ed6ba63..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IApplicationSpecification.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-
-
-/**
- *  Defines and interface for the configuration for a Tapestry application.  An ApplicationSpecification
- *  extends {@link ILibrarySpecification} by adding new properties 
- *  name and engineClassName.
- *
- *  @author Geoffrey Longman
- *
- **/
-
-public interface IApplicationSpecification extends ILibrarySpecification
-{
-    /**
-     *  Returns a "user friendly" name for the application (which is optional).
-     * 
-     **/
-    
-    String getName();
-
-    void setEngineClassName(String value);
-    
-    /**
-     *  Returns the name of the class (which implements {@link org.apache.tapestry.IEngine}).
-     *  May return null, in which case a default is used.
-     * 
-     **/
-    
-    String getEngineClassName();
-    
-    void setName(String name);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IAssetSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IAssetSpecification.java
deleted file mode 100644
index e418f08..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IAssetSpecification.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.LocationHolder;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- * Defines an internal, external or private asset.
- * 
- * @author glongman@intelligentworks.com
- */
-public interface IAssetSpecification extends IPropertyHolder, LocationHolder, Locatable, PropertyInjectable
-{
-    /**
-     * Returns the base path for the asset. This may be interpreted as a URL, relative URL or the
-     * path to a resource, depending on the type of asset.
-     */
-    String getPath();
-
-    /** @since 3.0 * */
-    void setPath(String path);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IBeanSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IBeanSpecification.java
deleted file mode 100644
index 7be68b6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IBeanSpecification.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.List;
-
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.LocationHolder;
-import org.apache.tapestry.bean.IBeanInitializer;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- * A specification of a helper bean for a component.
- * 
- * @author glongman@intelligentworks.com
- */
-public interface IBeanSpecification extends IPropertyHolder, LocationHolder,
-        Locatable, PropertyInjectable
-{
-
-    String getClassName();
-
-    BeanLifecycle getLifecycle();
-
-    /**
-     * @since 1.0.5
-     */
-    void addInitializer(IBeanInitializer initializer);
-
-    /**
-     * Returns the {@link List} of {@link IBeanInitializer}s. The caller should
-     * not modify this value!. May return null if there are no initializers.
-     * 
-     * @since 1.0.5
-     */
-    List getInitializers();
-
-    String toString();
-
-    String getDescription();
-
-    void setDescription(String desc);
-
-    /** @since 3.0 * */
-    void setClassName(String className);
-
-    /** @since 3.0 * */
-    void setLifecycle(BeanLifecycle lifecycle);
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IBindingSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IBindingSpecification.java
deleted file mode 100644
index 1d3fc65..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IBindingSpecification.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.LocationHolder;
-
-/**
- * Stores a binding specification, which identifies the static value or OGNL
- * expression for the binding. The name of the binding (which matches a bindable
- * property of the contined component) is implicitly known.
- * 
- * @author glongman@intelligentworks.com
- */
-public interface IBindingSpecification extends LocationHolder, Locatable
-{
-
-    /**
-     * Returns the type of binding specification; this is generally
-     * {@link org.apache.tapestry.spec.BindingType#PREFIXED}.
-     */
-
-    BindingType getType();
-
-    /**
-     * For a prefixed binding specification (the typical type), the value is a
-     * binding reference; a string used to contruct the actual binding, and
-     * consists of a prefix (such as "ognl:" or "message:") and a locator. The
-     * prefix selects a {@link org.apache.tapestry.binding.BindingFactory}, and
-     * the locator is passed to the factory, which uses it to construct the
-     * {@link org.apache.tapestry.IBinding}instance.
-     */
-
-    String getValue();
-
-    void setType(BindingType type);
-
-    void setValue(String value);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IComponentSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IComponentSpecification.java
deleted file mode 100644
index 3e6ed49..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IComponentSpecification.java
+++ /dev/null
@@ -1,327 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.LocationHolder;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.util.IPropertyHolder;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-/**
- * A specification for a component, as read from an XML specification file.
- * <p>
- * A specification consists of
- * <ul>
- * <li>An implementing class
- * <li>An optional template
- * <li>An optional description
- * <li>A set of contained components
- * <li>Bindings for the properties of each contained component
- * <li>A set of named assets
- * <li>Definitions for helper beans
- * <li>Any reserved names (used for HTML attributes)
- * </ul>
- * <p>
- * From this information, an actual component may be instantiated and
- * initialized. Instantiating a component is usually a recursive process, since
- * to initialize a container component, it is necessary to instantiate and
- * initialize its contained components as well.
- * 
- * @see org.apache.tapestry.IComponent
- * @see IContainedComponent
- * @see IComponentSpecification
- * @see org.apache.tapestry.engine.IPageLoader
- * @author glongman@intelligentworks.com
- */
-public interface IComponentSpecification extends IPropertyHolder,
-        LocationHolder, Locatable, IEventListener
-{
-
-    /**
-     * @throws IllegalArgumentException
-     *             if the name already exists.
-     */
-    void addAsset(String name, IAssetSpecification asset);
-
-    /**
-     * @throws IllegalArgumentException
-     *             if the id is already defined.
-     */
-    void addComponent(String id, IContainedComponent component);
-
-    /**
-     * Adds the parameter. The parameter name and aliases are added as a
-     * reserved name. The code assumes that the parameter specification will
-     * <strong>not</strong> be subsequently changed.
-     * 
-     * @throws IllegalArgumentException
-     *             if the name already exists.
-     */
-    void addParameter(IParameterSpecification spec);
-
-    /**
-     * Returns true if the component is allowed to wrap other elements (static
-     * HTML or other components). The default is true.
-     * 
-     * @see #setAllowBody(boolean)
-     */
-    boolean getAllowBody();
-
-    /**
-     * Returns true if the component allows informal parameters (parameters not
-     * formally defined). Informal parameters are generally used to create
-     * additional HTML attributes for an HTML tag rendered by the component.
-     * This is often used to specify JavaScript event handlers or the class of
-     * the component (for Cascarding Style Sheets).
-     * <p>
-     * The default value is true.
-     * 
-     * @see #setAllowInformalParameters(boolean)
-     */
-    boolean getAllowInformalParameters();
-
-    /**
-     * Returns the {@link IAssetSpecification}with the given name, or null if
-     * no such specification exists.
-     * 
-     * @see #addAsset(String,IAssetSpecification)
-     */
-    IAssetSpecification getAsset(String name);
-
-    /**
-     * Returns a <code>List</code> of the String names of all assets, in
-     * alphabetical order.
-     */
-    List getAssetNames();
-
-    /**
-     * Returns the specification of a contained component with the given id, or
-     * null if no such contained component exists.
-     * 
-     * @see #addComponent(String, IContainedComponent)
-     */
-    IContainedComponent getComponent(String id);
-
-    /**
-     * Returns the class name to be used when instantiating the component, or
-     * null if no class name was provided in the specification (in which case, a
-     * system of defaults will be used to determine the class name).
-     */
-
-    String getComponentClassName();
-
-    /**
-     * Returns an <code>List</code> of the String names of the
-     * {@link IContainedComponent}s for this component.
-     * 
-     * @see #addComponent(String, IContainedComponent)
-     */
-    List getComponentIds();
-
-    /**
-     * Returns the specification of a parameter with the given name, or null if
-     * no such parameter exists.
-     * 
-     * @see #addParameter(IParameterSpecification)
-     */
-    IParameterSpecification getParameter(String name);
-
-    /**
-     * Returns an unordered collection of {@link IParameterSpecification}, for
-     * all parameters that are required. This includes only "real" parameters,
-     * not aliases.
-     * 
-     * @since 4.0
-     */
-
-    Collection getRequiredParameters();
-
-    /**
-     * Returns a List of of String names of all parameters. This list is in
-     * alphabetical order.
-     * 
-     * @see #addParameter(IParameterSpecification)
-     */
-    List getParameterNames();
-
-    void setAllowBody(boolean value);
-
-    void setAllowInformalParameters(boolean value);
-
-    void setComponentClassName(String value);
-
-    /**
-     * @since 1.0.4
-     * @throws IllegalArgumentException
-     *             if the bean already has a specification.
-     */
-    void addBeanSpecification(String name, IBeanSpecification specification);
-
-    /**
-     * Returns the {@link IBeanSpecification}for the given name, or null if not
-     * such specification exists.
-     * 
-     * @since 1.0.4
-     */
-    IBeanSpecification getBeanSpecification(String name);
-
-    /**
-     * Returns an unmodifiable collection of the names of all beans.
-     */
-    Collection getBeanNames();
-
-    /**
-     * Adds the value as a reserved name. Reserved names are not allowed as the
-     * names of informal parameters. Since the comparison is caseless, the value
-     * is converted to lowercase before being stored.
-     * 
-     * @since 1.0.5
-     */
-    void addReservedParameterName(String value);
-
-    /**
-     * Returns true if the value specified is in the reserved name list. The
-     * comparison is caseless. All formal parameters are automatically in the
-     * reserved name list, as well as any additional reserved names specified in
-     * the component specification. The latter refer to HTML attributes
-     * generated directly by the component.
-     * 
-     * @since 1.0.5
-     */
-    boolean isReservedParameterName(String value);
-
-    /**
-     * Returns the documentation for this component.
-     * 
-     * @since 1.0.9
-     */
-    String getDescription();
-
-    /**
-     * Sets the documentation for this component.
-     * 
-     * @since 1.0.9
-     */
-    void setDescription(String description);
-
-    /**
-     * Returns the XML Public Id for the specification file, or null if not
-     * applicable.
-     * <p>
-     * This method exists as a convienience for the Spindle plugin. A previous
-     * method used an arbitrary version string, the public id is more useful and
-     * less ambiguous.
-     * 
-     * @since 2.2
-     */
-    String getPublicId();
-
-    /** @since 2.2 * */
-    void setPublicId(String publicId);
-
-    /**
-     * Returns true if the specification is known to be a page specification and
-     * not a component specification. Earlier versions of the framework did not
-     * distinguish between the two, but starting in 2.2, there are seperate XML
-     * entities for pages and components. Pages omit several attributes and
-     * entities related to parameters, as parameters only make sense for
-     * components.
-     * 
-     * @since 2.2
-     */
-    boolean isPageSpecification();
-
-    /** @since 2.2 * */
-    void setPageSpecification(boolean pageSpecification);
-
-    /** @since 3.0 * */
-    Resource getSpecificationLocation();
-
-    /** @since 3.0 * */
-    void setSpecificationLocation(Resource specificationLocation);
-
-    /**
-     * Adds a new property specification. The name of the property must not
-     * already be defined (and must not change after being added).
-     * 
-     * @since 3.0
-     */
-    void addPropertySpecification(IPropertySpecification spec);
-
-    /**
-     * Returns a sorted, immutable list of the names of all
-     * {@link org.apache.tapestry.spec.IPropertySpecification}s.
-     * 
-     * @since 3.0
-     */
-    List getPropertySpecificationNames();
-
-    /**
-     * Returns the named {@link org.apache.tapestry.spec.IPropertySpecification},
-     * or null if no such specification exist.
-     * 
-     * @since 3.0
-     * @see #addPropertySpecification(IPropertySpecification)
-     */
-    IPropertySpecification getPropertySpecification(String name);
-
-    /**
-     * Adds a {@link InjectSpecification}.
-     * 
-     * @since 4.0
-     */
-
-    void addInjectSpecification(InjectSpecification spec);
-
-    /**
-     * Returns the list of {@link InjectSpecification}. Will return an empty
-     * list if no specifications have been added.
-     * 
-     * @since 4.0
-     */
-
-    List getInjectSpecifications();
-
-    /**
-     * Returns true if the component is deprecated. Deprecated components
-     * generate a warning when used.
-     * 
-     * @since 4.0
-     */
-
-    boolean isDeprecated();
-
-    /**
-     * @since 4.0
-     */
-
-    void setDeprecated(boolean deprecated);
-
-    /**
-     * Returns a Set of Strings; the reserved parameter names for the component.
-     * This combines explicit reserved names with formal parameter names. Each
-     * parameter name in the Set will be all lower case (to facilitate a
-     * caseless comparison).
-     * 
-     * @returns an unmodifiable set (of String), possibly empty
-     * @since 4.0
-     */
-
-    Set getReservedParameterNames();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IContainedComponent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IContainedComponent.java
deleted file mode 100644
index b4994a2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IContainedComponent.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.Collection;
-
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.LocationHolder;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- * Defines a contained component. This includes the information needed to get
- * the contained component's specification, as well as any bindings for the
- * component.
- * 
- * @author glongman@intelligentworks.com
- */
-public interface IContainedComponent extends IPropertyHolder, LocationHolder,
-        Locatable, PropertyInjectable
-{
-
-    /**
-     * Returns the named binding, or null if the binding does not exist.
-     */
-    IBindingSpecification getBinding(String name);
-
-    /**
-     * Returns an umodifiable <code>Collection</code> of Strings, each the
-     * name of one binding for the component.
-     */
-    Collection getBindingNames();
-
-    String getType();
-
-    void setBinding(String name, IBindingSpecification spec);
-
-    void setType(String value);
-    
-    /**
-     * Sets the String Id of the component being copied from. For use by IDE
-     * tools like Spindle.
-     * 
-     * @since 1.0.9
-     */
-    void setCopyOf(String id);
-
-    /**
-     * Returns the id of the component being copied from. For use by IDE tools
-     * like Spindle.
-     * 
-     * @since 1.0.9
-     */
-    String getCopyOf();
-
-    /**
-     * Returns whether the contained component will inherit the informal
-     * parameters of its parent.
-     * 
-     * @since 3.0
-     */
-    boolean getInheritInformalParameters();
-
-    /**
-     * Sets whether the contained component will inherit the informal parameters
-     * of its parent.
-     * 
-     * @since 3.0
-     */
-    void setInheritInformalParameters(boolean value);
-
-    /**
-     * Returns the name of the property to be created for this component, or
-     * null if no property should be created.
-     * 
-     * @since 4.0
-     */
-    String getPropertyName();
-
-    /**
-     * @since 4.0
-     */
-
-    void setPropertyName(String propertyName);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java
deleted file mode 100644
index ac32e53..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.spec;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.internal.event.ComponentEventProperty;
-import org.apache.tapestry.internal.event.EventBoundListener;
-
-import java.util.Map;
-
-
-/**
- * Specification for something that can listen to and act on client side generated
- * browser events.
- *
- */
-public interface IEventListener
-{
-    /**
-     * Adds a deferred event listener binding for the specified component.
-     * 
-     * @param componentId 
-     *          The component this is for.
-     * @param events
-     *          The events that should cause the listener to be executed.
-     * @param methodName
-     *          The page/component listener name that should be executed when
-     *          one of the supplied events occurs.
-     * @param formId
-     *          The optional id of the form that should be submitted as part of this event invocation.
-     * @param validateForm
-     *          If a formId was specified, whether or not that form should have client side valiation
-     *          invoked during the process.
-     * @param async 
-     *          If submitting a form, whether or not to do it asynchronously.
-     * @param focus
-     *          If submitting a form, controls whether or not to focus it after an update.
-     * @param autoSubmit
-     *          If true - auto form wiring is performed on any component targets implementing {@link org.apache.tapestry.form.IFormComponent} so
-     *          that the enclosing form is submitted as part of the event in order to maintain consistent form state as in normal listener method
-     *          invocations.
-     */
-    void addEventListener(String componentId, String[] events, String methodName,
-                          String formId, boolean validateForm, boolean async, boolean focus, boolean autoSubmit);
-    
-    /**
-     * Adds a deferred event listener binding for the specified html element.
-     * 
-     * @param elementId
-     *          The client side html element id to match against.
-     * @param events
-     *          The client side events to bind to.
-     * @param methodName
-     *          The listener that should be invoked when the event happens.
-     * @param formId
-     *          The optional id of the form that should be submitted as part of this event invocation.
-     * @param validateForm
-     *          If a formId was specified, whether or not that form should have client side valiation
-     *          invoked during the process.
-     * @param async 
-     *          If submitting a form, whether or not to do it asynchronously.
-     * @param focus
-     *          If submitting a form, controls whether or not to focus it after an update.
-     */
-    void addElementEventListener(String elementId, String[] events, 
-            String methodName, String formId, boolean validateForm, boolean async, boolean focus);
-
-    /**
-     * Invoked during rendering when a component has been detected as a {@link org.apache.tapestry.form.IFormComponent} and may
-     * possibly need its events to be wired up as form events.
-     *
-     * @param component The component to rewire form events for.
-     * @param form The form containing the component.
-     */
-    void connectAutoSubmitEvents(IComponent component, IForm form);
-
-    /**
-     * Checks if any element events are bound to this component.
-     * 
-     * @return True if any element events are mapped from this component.
-     */
-    boolean hasElementEvents();
-    
-    /**
-     * Gets component bound event properties.
-     * 
-     * @param componentId The component to get event listeners for.
-     * @return The bound component event property container, or null if none exist.
-     */
-    ComponentEventProperty getComponentEvents(String componentId);
-    
-    /**
-     * Gets element bound event properties.
-     * 
-     * @param elementId The element to get listeners for.
-     * @return The bound element event property container, or null if none exist.
-     */
-    ComponentEventProperty getElementEvents(String elementId);
-    
-    /**
-     * Returns a list of element / component bound event listeners that were specified
-     * as invoking the form component with a matching id to <code>formId</code> of type
-     * {@link EventBoundListener} .
-     * 
-     * @param formId
-     *          The form that the event listeners were bound to submit when the event occurs.
-     * @param event
-     *           The event that caused the current invocation.
-     * 
-     * @return A list of events bound to the specified form, empty if none exist.
-     */
-    EventBoundListener[] getFormEvents(String formId, BrowserEvent event);
-    
-    /**
-     * Gets all mapped element events for this component.
-     * 
-     * @return Mapped elements events, if any.
-     */
-    Map getElementEvents();
-
-    /**
-     * Gets all component event mappings.
-     *
-     * @return Map of component {@link ComponentEventProperty} values this component is listening to.
-     */
-    Map getComponentEvents();
-
-    /**
-     * Invoked during page load to map event connections previously made via the {@link org.apache.tapestry.IComponent#getId()} identifier
-     * to use the more unique {@link org.apache.tapestry.IComponent#getIdPath()}.
-     *
-     * @param componentId
-     *          The basic component id.
-     * @param idPath
-     *          The id of the component pre-pended with the path of components containing it.
-     */
-    void rewireComponentId(String componentId, String idPath);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IExtensionSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IExtensionSpecification.java
deleted file mode 100644
index 65408ec..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IExtensionSpecification.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.Map;
-
-import org.apache.hivemind.LocationHolder;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- * Defines an "extension", which is much like a helper bean, but is part of a
- * library or application specification (and has the same lifecycle as the
- * application).
- * 
- * @author glongman@intelligentworks.com
- */
-public interface IExtensionSpecification extends IPropertyHolder,
-        LocationHolder
-{
-
-    String getClassName();
-
-    void setClassName(String className);
-
-    void addConfiguration(String propertyName, String value);
-
-    /**
-     * Returns an immutable Map of the configuration; keyed on property name,
-     * with values as properties to assign.
-     */
-    Map getConfiguration();
-
-    /**
-     * Invoked to instantiate an instance of the extension and return it. It
-     * also configures properties of the extension.
-     */
-    Object instantiateExtension();
-
-    /**
-     * Returns true if the extensions should be instantiated immediately after
-     * the containing {@link org.apache.tapestry.spec.LibrarySpecification}if
-     * parsed. Non-immediate extensions are instantiated only as needed.
-     */
-    boolean isImmediate();
-
-    void setImmediate(boolean immediate);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ILibrarySpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ILibrarySpecification.java
deleted file mode 100644
index e4dd9da..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ILibrarySpecification.java
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hivemind.LocationHolder;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- * Interface for the Specification for a library.
- * {@link org.apache.tapestry.spec.ApplicationSpecification}is a specialized
- * kind of library.
- * 
- * @author Geoffrey Longman
- * @since 2.2
- */
-
-public interface ILibrarySpecification extends IPropertyHolder, LocationHolder
-{
-
-    /**
-     * Returns the specification path (within the classpath) for an embedded
-     * library, or null if no such library has been defined.
-     */
-
-    String getLibrarySpecificationPath(String id);
-
-    /**
-     * Sets the specification path for an embedded library.
-     * 
-     * @throws IllegalArgumentException
-     *             if a library with the given id already exists
-     */
-
-    void setLibrarySpecificationPath(String id, String path);
-
-    /**
-     * Returns a sorted list of library ids (or the empty list, but not null).
-     */
-
-    List getLibraryIds();
-
-    String getPageSpecificationPath(String name);
-
-    void setPageSpecificationPath(String name, String path);
-
-    /**
-     * Returns a sorted list of page names explicitly defined by this library,
-     * or an empty list (but not null).
-     */
-
-    List getPageNames();
-
-    void setComponentSpecificationPath(String type, String path);
-
-    String getComponentSpecificationPath(String type);
-
-    /**
-     * Returns the simple types of all components defined in this library.
-     * Returns a list of strings in sorted order, or an empty list (but not
-     * null).
-     * 
-     * @since 3.0
-     */
-
-    List getComponentTypes();
-
-    /**
-     * Returns the documentation for this library..
-     */
-
-    String getDescription();
-
-    /**
-     * Sets the documentation for this library.
-     */
-
-    void setDescription(String description);
-
-    /**
-     * Returns a Map of extensions; key is extension name, value is
-     * {@link org.apache.tapestry.spec.IExtensionSpecification}. May return
-     * null. The returned Map is immutable.
-     */
-
-    Map getExtensionSpecifications();
-
-    /**
-     * Adds another extension specification.
-     */
-
-    void addExtensionSpecification(String name,
-            IExtensionSpecification extension);
-
-    /**
-     * Returns a sorted List of the names of all extensions. May return the
-     * empty list, but won't return null.
-     */
-
-    List getExtensionNames();
-
-    /**
-     * Returns the named IExtensionSpecification, or null if it doesn't exist.
-     */
-
-    IExtensionSpecification getExtensionSpecification(String name);
-
-    /**
-     * Returns an instantiated extension. Extensions are created as needed and
-     * cached for later use.
-     * 
-     * @throws IllegalArgumentException
-     *             if no extension specification exists for the given name.
-     */
-
-    Object getExtension(String name);
-
-    /**
-     * Returns an instantiated extension, performing a check to ensure that the
-     * extension is a subtype of the given class (or extends the given
-     * interface).
-     * 
-     * @throws IllegalArgumentException
-     *             if no extension specification exists for the given name, or
-     *             if the extension fails the type check.
-     * @since 3.0
-     */
-
-    Object getExtension(String name, Class typeConstraint);
-
-    /**
-     * Returns true if the named extension exists (or can be instantiated),
-     * returns false if the named extension has no specification.
-     */
-
-    boolean checkExtension(String name);
-
-    /**
-     * Invoked after the entire specification has been constructed to
-     * instantiate any extensions marked immediate.
-     */
-
-    void instantiateImmediateExtensions();
-
-    String getPublicId();
-
-    void setPublicId(String value);
-
-    /**
-     * Returns the location from which the specification was read.
-     * 
-     * @since 3.0
-     */
-
-    Resource getSpecificationLocation();
-
-    /** @since 3.0 * */
-
-    void setSpecificationLocation(Resource specificationLocation);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IParameterSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IParameterSpecification.java
deleted file mode 100644
index b8600a7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IParameterSpecification.java
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.Collection;
-
-import org.apache.hivemind.LocationHolder;
-
-/**
- * Defines a formal parameter to a component. An
- * <code>IParameterSpecification</code> is contained by a
- * {@link IComponentSpecification}.
- * <p>
- * TBD: Identify arrays in some way.
- * 
- * @author glongman@intelligentworks.com
- */
-public interface IParameterSpecification extends LocationHolder
-{
-
-    /**
-     * Returns the class name of the expected type of the parameter. The default
-     * value is <code>java.lang.Object</code> which matches anything.
-     */
-    String getType();
-
-    /**
-     * Returns true if the parameter is required by the component. The default
-     * is false, meaning the parameter is optional.
-     */
-    boolean isRequired();
-
-    void setRequired(boolean value);
-
-    /**
-     * Sets the type of value expected for the parameter. This can be left blank
-     * to indicate any type.
-     */
-    void setType(String value);
-
-    /**
-     * Returns the documentation for this parameter.
-     * 
-     * @since 1.0.9
-     */
-    String getDescription();
-
-    /**
-     * Sets the documentation for this parameter.
-     * 
-     * @since 1.0.9
-     */
-    void setDescription(String description);
-
-    /**
-     * Sets the property name (of the component class) to connect the parameter
-     * to.
-     */
-    void setPropertyName(String propertyName);
-
-    /**
-     * Returns the name of the JavaBeans property to connect the parameter to.
-     */
-    String getPropertyName();
-
-    /**
-     * Returns the default value for the parameter (or null if the parameter has
-     * no default value). Required parameters may not have a default value. The
-     * default value is a <em>binding locator</em> (a prefixed value, as with
-     * a binding element).
-     */
-    String getDefaultValue();
-
-    /**
-     * Sets the default value of the JavaBeans property if no binding is
-     * provided.
-     */
-    void setDefaultValue(String defaultValue);
-
-    /**
-     * Returns true if the parameter property should cache the result of the
-     * binding.
-     * 
-     * @since 4.0
-     */
-
-    boolean getCache();
-
-    /** @since 4.0 */
-
-    void setCache(boolean cache);
-
-    /**
-     * Returns the (primary) name of the parameter.
-     * 
-     * @since 4.0
-     */
-
-    String getParameterName();
-
-    /**
-     * @since 4.0
-     */
-
-    void setParameterName(String name);
-
-    /**
-     * Returns a non-null collection of strings for the aliases of the
-     * parameter. This is usually an empty list.
-     * 
-     * @since 4.0
-     */
-
-    Collection getAliasNames();
-
-    /**
-     * Sets the list of aliases as a comma-seperated list.
-     * 
-     * @param nameList
-     *            a comma seperated list of names, which may be null or empty
-     * @since 4.0
-     */
-
-    void setAliases(String nameList);
-
-    /**
-     * Returns true if the parameter is deprecated. Deprecated parameter
-     * generate a warning when bound.
-     * 
-     * @since 4.0
-     */
-
-    boolean isDeprecated();
-
-    /**
-     * @since 4.0
-     */
-
-    void setDeprecated(boolean deprecated);
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IPropertySpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IPropertySpecification.java
deleted file mode 100644
index f0c5f9f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/IPropertySpecification.java
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.LocationHolder;
-
-/**
- * Defines a transient or persistant property of a component or page.
- * 
- * @author glongman@intelligentworks.com
- */
-public interface IPropertySpecification extends LocationHolder
-{
-
-    /**
-     * Returns the initial value for this property, as a binding reference. May
-     * return null if the property has no initial value. The initial value is
-     * from finishLoad() and re-applied in pageDetached().
-     */
-
-    String getInitialValue();
-
-    String getName();
-
-    /**
-     * Returns true if {@link #getPersistence()}is null.
-     */
-    boolean isPersistent();
-
-    String getType();
-
-    void setInitialValue(String initialValue);
-
-    /**
-     * Sets the name of the property. This should not be changed once this
-     * IPropertySpecification is added to a
-     * {@link org.apache.tapestry.spec.IComponentSpecification}.
-     */
-    void setName(String name);
-
-    void setType(String type);
-    
-    /**
-     * Sets whether or not this property represents a concrete generic type.
-     * 
-     * @param isGeneric
-     */
-    void setGeneric(boolean isGeneric);
-    
-    /**
-     * Checks if the type represented by this property is in a generic declaration.
-     * 
-     * @return True if it is generic, false otherwise.
-     */
-    boolean isGeneric();
-    
-    /**
-     * Checks if this property has previously had it's type information examined to
-     * determine if it is elligable for proxying. Meaning {@link #canProxy()} should
-     * be a real value.
-     * 
-     * @return True if the proxy type has been checked, false otherwise.
-     */
-    boolean isProxyChecked();
-    
-    /**
-     * Sets the state of this property so that it is known whether or not the type
-     * it represents has been checked as being compatible with proxying or not.
-     * 
-     * @param checked
-     */
-    void setProxyChecked(boolean checked);
-    
-    /**
-     * Checks if this parameter can be proxied. 
-     * 
-     * @return True if the type can be proxied, false otherwise.
-     */
-    boolean canProxy();
-    
-    /**
-     * Sets whether or not this property can be proxied.
-     * 
-     * @param canProxy
-     */
-    void setCanProxy(boolean canProxy);
-    
-    /**
-     * A string indicating how the property is persisted.
-     * 
-     * @since 4.0
-     */
-
-    void setPersistence(String persistence);
-
-    /**
-     * If null, then the property is not persistent.
-     * 
-     * @since 4.0
-     */
-    String getPersistence();
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/InjectSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/InjectSpecification.java
deleted file mode 100644
index 60afcb0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/InjectSpecification.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.LocationHolder;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface InjectSpecification extends LocationHolder
-{
-
-    /**
-     * Returns the name of the property to be created.
-     */
-
-    String getProperty();
-
-    void setProperty(String property);
-
-    /**
-     * Returns the type of injection. Different injection types interpret the
-     * {@link #getObject() object property} differently. Ultimately, the type is
-     * used to select the correct
-     * {@link org.apache.tapestry.enhance.InjectEnhancementWorker}.
-     */
-
-    String getType();
-
-    void setType(String type);
-
-    /**
-     * Returns the string used to indentify a particular object.
-     */
-
-    String getObject();
-
-    void setObject(String object);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/InjectSpecificationImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/InjectSpecificationImpl.java
deleted file mode 100644
index 6dd0071..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/InjectSpecificationImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class InjectSpecificationImpl extends BaseLocatable implements
-        InjectSpecification
-{
-
-    private String _property;
-
-    private String _object;
-
-    private String _type;
-
-    public String getObject()
-    {
-        return _object;
-    }
-
-    public void setObject(String object)
-    {
-        _object = object;
-    }
-
-    public String getProperty()
-    {
-        return _property;
-    }
-
-    public void setProperty(String name)
-    {
-        _property = name;
-    }
-
-    public String getType()
-    {
-        return _type;
-    }
-
-    public void setType(String type)
-    {
-        _type = type;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/LibrarySpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/LibrarySpecification.java
deleted file mode 100644
index 4e7e517..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/LibrarySpecification.java
+++ /dev/null
@@ -1,527 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ToStringBuilder;
-import org.apache.tapestry.Tapestry;
-
-import java.util.*;
-
-/**
- * Specification for a library.
- * {@link org.apache.tapestry.spec.ApplicationSpecification}is a specialized
- * kind of library.
- *
- * @author Howard Lewis Ship
- * @since 2.2bv
- */
-
-public class LibrarySpecification extends LocatablePropertyHolder implements ILibrarySpecification
-{
-
-    /**
-     * Map of page name to page specification path.
-     */
-
-    private Map _pages;
-
-    /**
-     * Map of component alias to component specification path.
-     */
-    private Map _components;
-
-    /**
-     * Map of library id to library specification path.
-     */
-
-    private Map _libraries;
-
-    private String _description;
-
-    /**
-     * Map of extension name to {@link IExtensionSpecification}.
-     */
-
-    private Map _extensions;
-
-    /**
-     * Map of extension name to Object for instantiated extensions.
-     */
-
-    private Map _instantiatedExtensions;
-
-    /**
-     * The XML Public Id used when the library specification was read (if
-     * applicable).
-     *
-     * @since 2.2
-     */
-
-    private String _publicId;
-
-    /**
-     * The location of the specification.
-     */
-
-    private Resource _specificationLocation;
-
-    public String getLibrarySpecificationPath(String id)
-    {
-        return (String) get(_libraries, id);
-    }
-
-    /**
-     * Sets the specification path for an embedded library.
-     *
-     * @throws IllegalArgumentException
-     *             if a library with the given id already exists
-     */
-
-    public void setLibrarySpecificationPath(String id, String path)
-    {
-        if (_libraries == null) _libraries = new HashMap();
-
-        if (_libraries.containsKey(id))
-            throw new IllegalArgumentException(Tapestry.format("LibrarySpecification.duplicate-child-namespace-id", id));
-
-        _libraries.put(id, path);
-    }
-
-    public List getLibraryIds()
-    {
-        return sortedKeys(_libraries);
-    }
-
-    public String getPageSpecificationPath(String name)
-    {
-        return (String) get(_pages, name);
-    }
-
-    public void setPageSpecificationPath(String name, String path)
-    {
-        if (_pages == null)
-            _pages = new HashMap();
-
-        if (_pages.containsKey(name))
-            throw new IllegalArgumentException(Tapestry.format("LibrarySpecification.duplicate-page-name", name));
-
-        _pages.put(name, path);
-    }
-
-    public List getPageNames()
-    {
-        return sortedKeys(_pages);
-    }
-
-    public void setComponentSpecificationPath(String alias, String path)
-    {
-        if (_components == null)
-            _components = new HashMap();
-
-        if (_components.containsKey(alias))
-            throw new IllegalArgumentException(Tapestry.format("LibrarySpecification.duplicate-component-alias", alias));
-
-        _components.put(alias, path);
-    }
-
-    public String getComponentSpecificationPath(String alias)
-    {
-        return (String) get(_components, alias);
-    }
-
-    /**
-     * @since 3.0
-     */
-
-    public List getComponentTypes()
-    {
-        return sortedKeys(_components);
-    }
-
-    private List sortedKeys(Map map)
-    {
-        if (map == null)
-            return Collections.EMPTY_LIST;
-
-        List result = new ArrayList(map.keySet());
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    private Object get(Map map, Object key)
-    {
-        if (map == null)
-            return null;
-
-        return map.get(key);
-    }
-
-    /**
-     * Returns the documentation for this library..
-     */
-
-    public String getDescription()
-    {
-        return _description;
-    }
-
-    /**
-     * Sets the documentation for this library.
-     */
-
-    public void setDescription(String description)
-    {
-        _description = description;
-    }
-
-    /**
-     * Returns a Map of extensions; key is extension name, value is
-     * {@link org.apache.tapestry.spec.IExtensionSpecification}. May return
-     * null. The returned Map is immutable.
-     */
-
-    public Map getExtensionSpecifications()
-    {
-        if (_extensions == null)
-            return null;
-
-        return Collections.unmodifiableMap(_extensions);
-    }
-
-    /**
-     * Adds another extension specification.
-     *
-     * @throws IllegalArgumentException
-     *             if an extension with the given name already exists.
-     */
-    public void addExtensionSpecification(String name, IExtensionSpecification extension)
-    {
-        if (_extensions == null)
-            _extensions = new HashMap();
-
-        if (_extensions.containsKey(name))
-            throw new IllegalArgumentException(Tapestry.format("LibrarySpecification.duplicate-extension-name",
-                                                               this, name));
-
-        _extensions.put(name, extension);
-    }
-
-    /**
-     * Returns a sorted List of the names of all extensions. May return the
-     * empty list, but won't return null.
-     */
-
-    public synchronized List getExtensionNames()
-    {
-        return sortedKeys(_instantiatedExtensions);
-    }
-
-    /**
-     * Returns the named IExtensionSpecification, or null if it doesn't exist.
-     */
-
-    public IExtensionSpecification getExtensionSpecification(String name)
-    {
-        if (_extensions == null)
-            return null;
-
-        return (IExtensionSpecification) _extensions.get(name);
-    }
-
-    /**
-     * Returns true if this library specification has a specification for the
-     * named extension.
-     */
-
-    public boolean checkExtension(String name)
-    {
-        if (_extensions == null)
-            return false;
-
-        return _extensions.containsKey(name);
-    }
-
-    /**
-     * Returns an instantiated extension. Extensions are created as needed and
-     * cached for later use.
-     *
-     * @throws IllegalArgumentException
-     *             if no extension specification exists for the given name.
-     */
-
-    public synchronized Object getExtension(String name)
-    {
-        return getExtension(name, null);
-    }
-
-    /** @since 3.0 * */
-
-    public synchronized Object getExtension(String name, Class typeConstraint)
-    {
-        if (_instantiatedExtensions == null)
-            _instantiatedExtensions = new HashMap();
-
-        Object result = _instantiatedExtensions.get(name);
-        IExtensionSpecification spec = getExtensionSpecification(name);
-
-        if (spec == null)
-            throw new IllegalArgumentException(Tapestry.format("LibrarySpecification.no-such-extension", name));
-
-        if (result == null)
-        {
-
-            result = spec.instantiateExtension();
-
-            _instantiatedExtensions.put(name, result);
-        }
-
-        if (typeConstraint != null)
-            applyTypeConstraint(name, result, typeConstraint, spec.getLocation());
-
-        return result;
-    }
-
-    /**
-     * Checks that an extension conforms to the supplied type constraint.
-     *
-     * @param name
-     *          Name of the extension to apply constraint check to.
-     * @param extension
-     *          Object extension.
-     * @param typeConstraint
-     *          Constraint to check.
-     * @param location
-     *          Location of specified extension.
-     * 
-     * @throws IllegalArgumentException
-     *             if the extension fails the check.
-     * @since 3.0
-     */
-
-    protected void applyTypeConstraint(String name, Object extension,
-                                       Class typeConstraint, Location location)
-    {
-        Class extensionClass = extension.getClass();
-
-        // Can you assign an instance of the extension to a variable
-        // of type typeContraint legally?
-
-        if (typeConstraint.isAssignableFrom(extensionClass))
-            return;
-
-        String key = typeConstraint.isInterface()
-                     ? "LibrarySpecification.extension-does-not-implement-interface"
-                     : "LibrarySpecification.extension-not-a-subclass";
-
-        throw new ApplicationRuntimeException(
-          Tapestry.format(key, name, extensionClass.getName(), typeConstraint.getName()), location, null);
-    }
-
-    /**
-     * Invoked after the entire specification has been constructed to
-     * instantiate any extensions marked immediate.
-     */
-
-    public synchronized void instantiateImmediateExtensions()
-    {
-        if (_extensions == null)
-            return;
-
-        Iterator i = _extensions.entrySet().iterator();
-
-        while(i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            IExtensionSpecification spec = (IExtensionSpecification) entry.getValue();
-
-            if (!spec.isImmediate())
-                continue;
-
-            String name = (String) entry.getKey();
-
-            getExtension(name);
-        }
-
-    }
-
-    /**
-     * Returns the extensions map.
-     *
-     * @return Map of objects.
-     */
-
-    protected Map getExtensions()
-    {
-        return _extensions;
-    }
-
-    /**
-     * Updates the extension map.
-     *
-     * @param extension
-     *            A Map of extension specification paths keyed on extension id.
-     *            <p>
-     *            The map is retained, not copied.
-     */
-
-    protected void setExtensions(Map extension)
-    {
-        _extensions = extension;
-    }
-
-    /**
-     * Returns the libraries map.
-     *
-     * @return Map of {@link LibrarySpecification}.
-     */
-
-    protected Map getLibraries()
-    {
-        return _libraries;
-    }
-
-    /**
-     * Updates the library map.
-     *
-     * @param libraries
-     *            A Map of library specification paths keyed on library id.
-     *            <p>
-     *            The map is retained, not copied.
-     */
-
-    protected void setLibraries(Map libraries)
-    {
-        _libraries = libraries;
-    }
-
-    /**
-     * Returns the pages map.
-     *
-     * @return Map of {@link IComponentSpecification}.
-     */
-
-    protected Map getPages()
-    {
-        return _pages;
-    }
-
-    /**
-     * Updates the page map.
-     *
-     * @param pages
-     *            A Map of page specification paths keyed on page id.
-     *            <p>
-     *            The map is retained, not copied.
-     */
-
-    protected void setPages(Map pages)
-    {
-        _pages = pages;
-    }
-
-    /**
-     * Returns the components map.
-     *
-     * @return Map of {@link IContainedComponent}.
-     */
-
-    protected Map getComponents()
-    {
-        return _components;
-    }
-
-    /**
-     * Updates the components map.
-     *
-     * @param components
-     *            A Map of {@link IContainedComponent}keyed on component id.
-     *            The map is retained, not copied.
-     */
-
-    protected void setComponents(Map components)
-    {
-        _components = components;
-    }
-
-    /**
-     * Returns the XML Public Id for the library file, or null if not
-     * applicable.
-     * <p>
-     * This method exists as a convienience for the Spindle plugin. A previous
-     * method used an arbitrary version string, the public id is more useful and
-     * less ambiguous.
-     */
-
-    public String getPublicId()
-    {
-        return _publicId;
-    }
-
-    public void setPublicId(String publicId)
-    {
-        _publicId = publicId;
-    }
-
-    /** @since 3.0 * */
-
-    public Resource getSpecificationLocation()
-    {
-        return _specificationLocation;
-    }
-
-    /** @since 3.0 * */
-
-    public void setSpecificationLocation(Resource specificationLocation)
-    {
-        _specificationLocation = specificationLocation;
-    }
-
-    /** @since 3.0 * */
-
-    public synchronized String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("components", _components);
-        builder.append("description", _description);
-        builder.append("instantiatedExtensions", _instantiatedExtensions);
-        builder.append("libraries", _libraries);
-        builder.append("pages", _pages);
-        builder.append("publicId", _publicId);
-        builder.append("specificationLocation", _specificationLocation);
-
-        extendDescription(builder);
-
-        return builder.toString();
-    }
-
-    /**
-     * Does nothing, subclasses may override to add additional description.
-     *
-     * @see #toString()
-     * @since 3.0
-     */
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/LocatablePropertyHolder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/LocatablePropertyHolder.java
deleted file mode 100644
index 52e057e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/LocatablePropertyHolder.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.LocationHolder;
-import org.apache.tapestry.util.BasePropertyHolder;
-
-/**
- * Base class for implementing both interfaces
- * {@link org.apache.tapestry.util.IPropertyHolder} and
- * {@link LocationHolder}. This is used by all the
- * specification classes.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class LocatablePropertyHolder extends BasePropertyHolder implements LocationHolder
-{
-
-    private Location _location;
-
-    public Location getLocation()
-    {
-        return _location;
-    }
-
-    public void setLocation(Location location)
-    {
-        _location = location;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ParameterSpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ParameterSpecification.java
deleted file mode 100644
index 31ca8b1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/ParameterSpecification.java
+++ /dev/null
@@ -1,212 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.TapestryUtils;
-
-/**
- * Defines a formal parameter to a component. A
- * <code>IParameterSpecification</code> is contained by a
- * {@link IComponentSpecification}.
- * <p>
- * TBD: Identify arrays in some way.
- * 
- * @author Howard Lewis Ship
- */
-
-public class ParameterSpecification extends BaseLocatable implements
-        IParameterSpecification
-{
-
-    private boolean _required = false;
-
-    private String _type;
-
-    /** @since 1.0.9 */
-    private String _description;
-
-    /** @since 2.0.3 */
-    private String _propertyName;
-
-    /** @since 3.0 */
-    private String _defaultValue;
-
-    /** @since 4.0 */
-    private boolean _cache = true;
-
-    /** @since 4.0 */
-    private Collection _aliasNames = Collections.EMPTY_LIST;
-
-    /** @since 4.0 */
-    private String _parameterName;
-
-    /** @since 4.0 */
-    private boolean _deprecated = false;
-
-    /**
-     * Returns the class name of the expected type of the parameter. The default
-     * value is <code>java.lang.Object</code> which matches anything.
-     */
-
-    public String getType()
-    {
-        return _type;
-    }
-
-    /**
-     * Returns true if the parameter is required by the component. The default
-     * is false, meaning the parameter is optional.
-     */
-
-    public boolean isRequired()
-    {
-        return _required;
-    }
-
-    public void setRequired(boolean value)
-    {
-        _required = value;
-    }
-
-    /**
-     * Sets the type of value expected for the parameter. This can be left blank
-     * to indicate any type.
-     */
-
-    public void setType(String value)
-    {
-        _type = value;
-    }
-
-    /**
-     * Returns the documentation for this parameter.
-     * 
-     * @since 1.0.9
-     */
-
-    public String getDescription()
-    {
-        return _description;
-    }
-
-    /**
-     * Sets the documentation for this parameter.
-     * 
-     * @since 1.0.9
-     */
-
-    public void setDescription(String description)
-    {
-        _description = description;
-    }
-
-    /**
-     * Sets the property name (of the component class) to connect the parameter
-     * to.
-     */
-
-    public void setPropertyName(String propertyName)
-    {
-        _propertyName = propertyName;
-    }
-
-    /**
-     * Returns the name of the JavaBeans property to connect the parameter to.
-     */
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    /**
-     * @see org.apache.tapestry.spec.IParameterSpecification#getDefaultValue()
-     */
-    public String getDefaultValue()
-    {
-        return _defaultValue;
-    }
-
-    /**
-     * @see org.apache.tapestry.spec.IParameterSpecification#setDefaultValue(java.lang.String)
-     */
-    public void setDefaultValue(String defaultValue)
-    {
-        _defaultValue = defaultValue;
-    }
-
-    /** @since 4.0 */
-    public boolean getCache()
-    {
-        return _cache;
-    }
-
-    /** @since 4.0 */
-    public void setCache(boolean cache)
-    {
-        _cache = cache;
-    }
-
-    /** @since 4.0 */
-    public Collection getAliasNames()
-    {
-        return _aliasNames;
-    }
-
-    /** @since 4.0 */
-    public String getParameterName()
-    {
-        return _parameterName;
-    }
-
-    /** @since 4.0 */
-    public void setAliases(String nameList)
-    {
-        if (HiveMind.isNonBlank(nameList))
-        {
-            String[] names = TapestryUtils.split(nameList);
-
-            _aliasNames = Arrays.asList(names);
-        }
-    }
-
-    /** @since 4.0 */
-    public void setParameterName(String name)
-    {
-        Defense.notNull(name, "name");
-
-        _parameterName = name;
-    }
-
-    /** @since 4.0 */
-    public boolean isDeprecated()
-    {
-        return _deprecated;
-    }
-
-    /** @since 4.0 */
-    public void setDeprecated(boolean deprecated)
-    {
-        _deprecated = deprecated;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/PropertyInjectable.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/PropertyInjectable.java
deleted file mode 100644
index ce0de3c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/PropertyInjectable.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-/**
- * Interface extended by several specification interfaces to indicate that the
- * runtime object constructed from the specification can be injected into the
- * component class.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface PropertyInjectable
-{
-
-    /**
-     * Returns the name of the property to be created for this component, or
-     * null if no property should be created.
-     */
-    String getPropertyName();
-
-    void setPropertyName(String propertyName);
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/PropertySpecification.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/PropertySpecification.java
deleted file mode 100644
index ea5c344..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/PropertySpecification.java
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.impl.BaseLocatable;
-
-/**
- * Defines a transient or persistant property of a component or page.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class PropertySpecification extends BaseLocatable implements
-        IPropertySpecification
-{
-
-    private String _name;
-
-    private String _type;
-
-    private boolean _isGeneric;
-    
-    private String _initialValue;
-
-    private String _persistence;
-
-    private boolean _proxyChecked;
-    
-    private boolean _canProxy;
-    
-    public String getInitialValue()
-    {
-        return _initialValue;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public boolean isPersistent()
-    {
-        return _persistence != null;
-    }
-
-    /**
-     * The type of property to create, or null if no type was specified. The
-     * value is the name of a primitive type, a fully qualified class name, or
-     * an array name for either. Type is only specified for 3.0 DTDs, in 4.0 the
-     * only behavior is for the new property to match the type defined by an
-     * abstract accessor, or to be java.lang.Object.
-     */
-    public String getType()
-    {
-        return _type;
-    }
-
-    public void setInitialValue(String initialValue)
-    {
-        _initialValue = initialValue;
-    }
-
-    /**
-     * Sets the name of the property. This should not be changed once this
-     * IPropertySpecification is added to a
-     * {@link org.apache.tapestry.spec.ComponentSpecification}.
-     */
-
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    public void setType(String type)
-    {
-        _type = type;
-    }
-
-    public void setGeneric(boolean isGeneric)
-    {
-        _isGeneric = isGeneric;
-    }
-    
-    public boolean isGeneric()
-    {
-        return _isGeneric;
-    }
-    
-    /** @since 4.0 */
-    public String getPersistence()
-    {
-        return _persistence;
-    }
-
-    /** @since 4.0 */
-    public void setPersistence(String persistence)
-    {
-        _persistence = persistence;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean canProxy()
-    {
-        return _canProxy;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isProxyChecked()
-    {
-        return _proxyChecked;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void setCanProxy(boolean canProxy)
-    {
-        _canProxy = canProxy;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void setProxyChecked(boolean checked)
-    {
-        _proxyChecked = checked;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/SpecFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/SpecFactory.java
deleted file mode 100644
index ca69345..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/SpecFactory.java
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.tapestry.bean.BindingBeanInitializer;
-import org.apache.tapestry.binding.BindingSource;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * A Factory used by {@link org.apache.tapestry.parse.SpecificationParser}&nbsp;
- * to create Tapestry domain objects.
- * <p>
- * The default implementation here creates the expected runtime instances of
- * classes in packages:
- * <ul>
- * <li>org.apache.tapestry.spec</li>
- * <li>org.apache.tapestry.bean</li>
- * </ul>
- * <p>
- * This class is extended by Spindle - the Eclipse Plugin for Tapestry
- * 
- * @author GWL
- * @since 1.0.9
- */
-
-public class SpecFactory
-{
-
-    /**
-     * Creates a concrete instance of {@link ApplicationSpecification}.
-     */
-
-    public IApplicationSpecification createApplicationSpecification()
-    {
-        return new ApplicationSpecification();
-    }
-
-    /**
-     * Creates an instance of {@link LibrarySpecification}.
-     * 
-     * @since 2.2
-     */
-
-    public ILibrarySpecification createLibrarySpecification()
-    {
-        return new LibrarySpecification();
-    }
-
-    /**
-     * Returns a new instance of {@link IAssetSpecification}.
-     * 
-     * @since 3.0
-     */
-
-    public IAssetSpecification createAssetSpecification()
-    {
-        return new AssetSpecification();
-    }
-
-    /**
-     * Creates a new instance of {@link IBeanSpecification}.
-     * 
-     * @since 3.0
-     */
-
-    public IBeanSpecification createBeanSpecification()
-    {
-        return new BeanSpecification();
-    }
-
-    public IBindingSpecification createBindingSpecification()
-    {
-        return new BindingSpecification();
-    }
-
-    /**
-     * Creates a concrete instance of {@link IComponentSpecification}.
-     */
-
-    public IComponentSpecification createComponentSpecification()
-    {
-        return new ComponentSpecification();
-    }
-
-    /**
-     * Creates a concrete instance of {@link IContainedComponent}.
-     */
-
-    public IContainedComponent createContainedComponent()
-    {
-        return new ContainedComponent();
-    }
-
-    /**
-     * Creates a concrete instance of {@link ParameterSpecification}.
-     */
-
-    public IParameterSpecification createParameterSpecification()
-    {
-        return new ParameterSpecification();
-    }
-
-    /** @since 4.0 */
-    public BindingBeanInitializer createBindingBeanInitializer(
-            BindingSource source)
-    {
-        return new BindingBeanInitializer(source);
-    }
-
-    /**
-     * Creates a concrete instance of
-     * {@link org.apache.tapestry.spec.IExtensionSpecification}.
-     * 
-     * @since 2.2
-     */
-
-    public IExtensionSpecification createExtensionSpecification(
-            ClassResolver resolver, ValueConverter valueConverter)
-    {
-        return new ExtensionSpecification(resolver, valueConverter);
-    }
-
-    /**
-     * Creates a concrete instance of
-     * {@link org.apache.tapestry.spec.IPropertySpecification}.
-     * 
-     * @since 3.0
-     */
-
-    public IPropertySpecification createPropertySpecification()
-    {
-        return new PropertySpecification();
-    }
-
-    /** @since 4.0 */
-    public InjectSpecification createInjectSpecification()
-    {
-        return new InjectSpecificationImpl();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/SpecMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/SpecMessages.java
deleted file mode 100644
index 4fb6b43..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/SpecMessages.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class SpecMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(SpecMessages.class);
-
-    /* defeat instantiation */
-    private SpecMessages() { }
-    
-    static String claimedProperty(String propertyName, Object existing)
-    {
-        return _formatter.format("claimed-property", propertyName, HiveMind
-                .getLocationString(existing));
-    }
-
-    static String duplicateAsset(String name, IAssetSpecification previousAsset)
-    {
-        return _formatter
-                .format("duplicate-asset", name, HiveMind.getLocationString(previousAsset));
-    }
-
-    static String duplicateParameter(String name, IParameterSpecification existing)
-    {
-        return _formatter.format("duplicate-parameter", name, HiveMind.getLocationString(existing));
-    }
-
-    static String duplicateBean(String name, IBeanSpecification spec)
-    {
-        return _formatter.format("duplicate-bean", name, HiveMind.getLocationString(spec));
-    }
-
-    static String duplicateProperty(String name, IPropertySpecification existing)
-    {
-        return _formatter.format("duplicate-property", name, HiveMind.getLocationString(existing));
-    }
-
-    static String duplicateComponent(String name, IContainedComponent existing)
-    {
-        return _formatter.format("duplicate-component", name, HiveMind.getLocationString(existing));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/SpecStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/SpecStrings.properties
deleted file mode 100644
index 9a9c8f5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/SpecStrings.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-claimed-property=Property {0} has already been accounted for by the element at {1}.
-duplicate-asset=Asset {0} has already been declared (at {1}).
-duplicate-parameter=Parameter {0} has already been declared (at {1}).
-duplicate-bean=Bean {0} has already been declared (at {1}).
-duplicate-property=Property {0} has already been declared (at {1}).
-duplicate-component=Component {0} has already been declated (at {1}).
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/package.html
deleted file mode 100644
index 9fc09b1..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/spec/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Classes to represent application and component specifications.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/CreatePropertyWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/CreatePropertyWorker.java
deleted file mode 100644
index d8027fd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/CreatePropertyWorker.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.enhance.EnhanceUtils;
-import org.apache.tapestry.enhance.EnhancementOperation;
-import org.apache.tapestry.enhance.EnhancementWorker;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Forces the creation of a property, overrriding an existing implementation. Allows test code to
- * set the specification and messages properties of components.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class CreatePropertyWorker implements EnhancementWorker
-{
-    private final String _propertyName;
-
-    private final Location _location;
-
-    public CreatePropertyWorker(String propertyName, Location location)
-    {
-        _propertyName = propertyName;
-        _location = location;
-    }
-
-    public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
-    {
-        Class propertyType = EnhanceUtils.extractPropertyType(op, _propertyName, null);
-
-        op.claimProperty(_propertyName);
-
-        String field = "_$" + _propertyName;
-
-        op.addField(field, propertyType);
-
-        EnhanceUtils.createSimpleAccessor(op, field, _propertyName, propertyType, _location);
-
-        EnhanceUtils.createSimpleMutator(op, field, _propertyName, propertyType, _location);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/Creator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/Creator.java
deleted file mode 100644
index 5e9a78b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/Creator.java
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.service.ClassFactory;
-import org.apache.hivemind.service.impl.ClassFactoryImpl;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.enhance.AbstractPropertyWorker;
-import org.apache.tapestry.enhance.EnhancementOperationImpl;
-import org.apache.tapestry.enhance.EnhancementWorker;
-import org.apache.tapestry.enhance.InjectRenderWorker;
-import org.apache.tapestry.services.ComponentConstructor;
-import org.apache.tapestry.services.ComponentRenderWorker;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.DescribedLocation;
-
-/**
- * A utility class that is used to instantiate abstract Tapestry pages and components. It creates,
- * at runtime, a subclass where all abstract properties are filled in (each property complete with
- * an instance variable, an accessor method and a mutator method). This isn't quite the same as how
- * the class is enhanced at runtime (though it does use a subset of the same
- * {@link org.apache.tapestry.enhance.EnhancementWorker code}), but is sufficient to unit test the
- * class, especially listener methods.
- * <p>
- * One part of the enhancement is that the
- * {@link org.apache.tapestry.IComponent#getSpecification() specification}&nbsp;and
- * {@link org.apache.tapestry.IComponent#getMessages() messages}&nbsp;properties of the page or
- * component class are converted into read/write properties that can be set via reflection
- * (including {@link #newInstance(Class, Map)}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class Creator
-{
-    /**
-     * Keyed on Class, value is an {@link ComponentConstructor}.
-     */
-    private final Map _constructors = new HashMap();
-
-    private final ClassFactory _classFactory = new ClassFactoryImpl();
-
-    private final ClassResolver _classResolver = new DefaultClassResolver();
-
-    private final List _workers = new ArrayList();
-
-    private final Resource _creatorResource = new ClasspathResource(_classResolver,
-            "/CreatorLocation");
-
-    private final Location _creatorLocation = new DescribedLocation(_creatorResource,
-            "Creator Location");
-    
-    private final ComponentRenderWorker _renderWorker = new MockComponentRenderWorker();
-    
-    private final InjectRenderWorker _injectRender = new InjectRenderWorker();
-    
-    {
-        
-        _injectRender.setRenderWorker(_renderWorker);
-        
-        // Overrride AbstractComponent's implementations of
-        // these two properties (making them read/write).
-
-        _workers.add(new CreatePropertyWorker("messages", _creatorLocation));
-        _workers.add(new CreatePropertyWorker("specification", _creatorLocation));
-        _workers.add(_injectRender);
-        
-        // Implement any abstract properties.
-        // Note that we don't bother setting the errorLog property
-        // so failures may turn into NPEs.
-        
-        _workers.add(new AbstractPropertyWorker());
-    }
-
-    private ComponentConstructor createComponentConstructor(Class inputClass)
-    {
-        if (inputClass.isInterface() || inputClass.isPrimitive() || inputClass.isArray())
-            throw new IllegalArgumentException(ScriptMessages.wrongTypeForEnhancement(inputClass));
-
-        EnhancementOperationImpl op = new EnhancementOperationImpl(_classResolver,
-                new ComponentSpecification(), inputClass, _classFactory, null);
-
-        IComponentSpecification spec = new ComponentSpecification();
-        spec.setLocation(_creatorLocation);
-
-        Iterator i = _workers.iterator();
-        while (i.hasNext())
-        {
-            EnhancementWorker worker = (EnhancementWorker) i.next();
-
-            worker.performEnhancement(op, spec);
-        }
-
-        return op.getConstructor();
-    }
-
-    private ComponentConstructor getComponentConstructor(Class inputClass)
-    {
-        ComponentConstructor result = (ComponentConstructor) _constructors.get(inputClass);
-
-        if (result == null)
-        {
-            result = createComponentConstructor(inputClass);
-
-            _constructors.put(inputClass, result);
-        }
-
-        return result;
-    }
-
-    /**
-     * Given a particular abstract class; will create an instance of that class. A subclass is
-     * created with all abstract properties filled in with ordinary implementations.
-     */
-    public Object newInstance(Class abstractClass)
-    {
-        ComponentConstructor constructor = getComponentConstructor(abstractClass);
-
-        try
-        {
-            return constructor.newInstance();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ScriptMessages.unableToInstantiate(
-                    abstractClass,
-                    ex));
-        }
-    }
-
-    /**
-     * Creates a new instance of a given class, and then initializes properties of the instance. The
-     * map contains string keys that are property names, and object values.
-     */
-    public Object newInstance(Class abstractClass, Map properties)
-    {
-        Object result = newInstance(abstractClass);
-
-        if (properties != null)
-        {
-            Iterator i = properties.entrySet().iterator();
-
-            while (i.hasNext())
-            {
-                Map.Entry e = (Map.Entry) i.next();
-
-                String propertyName = (String) e.getKey();
-
-                PropertyUtils.write(result, propertyName, e.getValue());
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * A convienience (useful in test code) for invoking {@link #newInstance(Class, Map)}. The Map
-     * is constructed from the properties array, which consists of alternating keys and values.
-     */
-
-    public Object newInstance(Class abstractClass, Object[] properties)
-    {
-        Map propertyMap = Tapestry.convertArrayToMap(properties);
-
-        return newInstance(abstractClass, propertyMap);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/MockComponentRenderWorker.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/MockComponentRenderWorker.java
deleted file mode 100644
index 428fb8f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/MockComponentRenderWorker.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright Jul 10, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.test;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.Body;
-import org.apache.tapestry.services.ComponentRenderWorker;
-
-
-/**
- * Placeholder class used to allow proper creation of {@link AbstractComponent} classes
- * that normally rely on it being injected at runtime. Used primarily by {@link Creator}.
- * 
- * @author jkuhnert
- */
-public class MockComponentRenderWorker implements ComponentRenderWorker
-{
-
-    /** Does nothing. */
-    public MockComponentRenderWorker()
-    {
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public void renderBody(IRequestCycle cycle, Body component)
-    {
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public void renderComponent(IRequestCycle cycle, IComponent component)
-    {
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/ScriptMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/ScriptMessages.java
deleted file mode 100644
index fea76fe..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/ScriptMessages.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.hivemind.service.ClassFabUtils;
-
-/**
- * Container of static methods to format logging and exception messages, used
- * within the org.apache.tapesty.test package (and a few sub-packages).
- * <p>
- * Technically, these are messages for the test package, and this class should
- * be called TestMessages ... but that's always a bad idea (it makes the class
- * look like a JUnit test suite).
- * <p>
- * This class is public, not package private, because some related sub-packages
- * make use of it as well.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public final class ScriptMessages
-{
-
-    private static final MessageFormatter _formatter = new MessageFormatter(
-            ScriptMessages.class);
-
-    /* defeat instantiation */
-    private ScriptMessages()
-    {
-    }
-
-    static String wrongTypeForEnhancement(Class type)
-    {
-        return _formatter.format("wrong-type-for-enhancement", ClassFabUtils
-                .getJavaClassName(type));
-    }
-
-    static String unableToInstantiate(Class abstractClass, Throwable cause)
-    {
-        return _formatter.format("unable-to-instantiate", abstractClass
-                .getName(), cause);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/ScriptStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/ScriptStrings.properties
deleted file mode 100644
index 1b9ee96..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/ScriptStrings.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2004, 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-wrong-type-for-enhancement=Can not create instance of {0}. Interfaces, arrays and primitive types may not be enhanced.
-unable-to-instantiate=Unable to instantiate enhanced subclass of {0}: {2}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/package.html
deleted file mode 100644
index de4efed..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/test/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Various testing utilities to make testing tapestry pages/components easier.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/BasePropertyHolder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/BasePropertyHolder.java
deleted file mode 100644
index 9d9efc6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/BasePropertyHolder.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.*;
-
-/**
- *  Base class implementation for the {@link IPropertyHolder} interface.
- *
- *
- *  @author Howard Lewis Ship
- *
- */
-
-public class BasePropertyHolder implements IPropertyHolder
-{
-    private static final int MAP_SIZE = 7;
-    private Map properties;
-
-    public String getProperty(String name)
-    {
-        if (properties == null)
-            return null;
-
-        return (String) properties.get(name);
-    }
-
-    public void setProperty(String name, String value)
-    {
-        if (value == null)
-        {
-            removeProperty(name);
-            return;
-        }
-
-        if (properties == null)
-            properties = new HashMap(MAP_SIZE);
-
-        properties.put(name, value);
-    }
-
-    public void removeProperty(String name)
-    {
-        if (properties == null)
-            return;
-
-        properties.remove(name);
-    }
-
-    public List getPropertyNames()
-    {
-        if (properties == null)
-            return Collections.EMPTY_LIST;
-
-        List result = new ArrayList(properties.keySet());
-        
-        Collections.sort(result);
-        
-        return result;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ComponentAddress.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ComponentAddress.java
deleted file mode 100644
index 8e45c72..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ComponentAddress.java
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.io.Serializable;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The ComponentAddress class contains the path to a component, allowing it to locate an instance of
- * that component in a different {@link org.apache.tapestry.IRequestCycle}.
- * <p>
- * This class needs to be used mostly when working with components accessed via the
- * {@link org.apache.tapestry.IRender}interface. It allows those components to serialize and pass
- * as a service parameter information about what component they have to talk to if control returns
- * back to them.
- * <p>
- * This situation often occurs when the component used via IRender contains Direct or Action links.
- * 
- * @author mindbridge
- * @since 2.2
- */
-public class ComponentAddress implements Serializable
-{
-    private static final long serialVersionUID = 533068199722072804L;
-
-    private String _pageName;
-
-    private String _idPath;
-
-    /**
-     * Creates a new ComponentAddress object that carries the identification information of the
-     * given component (the page name and the ID path).
-     * 
-     * @param component
-     *            the component to get the address of
-     */
-    public ComponentAddress(IComponent component)
-    {
-        this(component.getPage().getPageName(), component.getIdPath());
-    }
-
-    /**
-     * Creates a new ComponentAddress using the given Page Name and ID Path.
-     * 
-     * @param pageName
-     *            the name of the page that contains the component
-     * @param idPath
-     *            the ID Path of the component (which may be null)
-     */
-    public ComponentAddress(String pageName, String idPath)
-    {
-        Defense.notNull(pageName, "pageName");
-
-        _pageName = pageName;
-        _idPath = idPath;
-    }
-
-    /**
-     * Creates a new ComponentAddress using the given Page Name and ID Path relative on the provided
-     * Namespace.
-     * 
-     * @param namespace
-     *            the namespace of the page that contains the component
-     * @param pageName
-     *            the name of the page that contains the component
-     * @param idPath
-     *            the ID Path of the component
-     */
-    public ComponentAddress(INamespace namespace, String pageName, String idPath)
-    {
-        this(namespace.constructQualifiedName(pageName), idPath);
-    }
-
-    /**
-     * Finds a component with the current address using the given RequestCycle.
-     * 
-     * @param cycle
-     *            the RequestCycle to use to locate the component
-     * @return IComponent a component that has been initialized for the given RequestCycle
-     */
-    public IComponent findComponent(IRequestCycle cycle)
-    {
-        IPage objPage = cycle.getPage(_pageName);
-        return objPage.getNestedComponent(_idPath);
-    }
-
-    /**
-     * Returns the idPath of the component.
-     * 
-     * @return String the ID path of the component, or null if the address references a page, not a
-     *         component within a page.
-     */
-    public String getIdPath()
-    {
-        return _idPath;
-    }
-
-    /**
-     * Returns the Page Name of the component.
-     * 
-     * @return String the Page Name of the component
-     */
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-    /**
-     * @see java.lang.Object#hashCode()
-     */
-    public int hashCode()
-    {
-        int hash = _pageName.hashCode() * 31;
-        if (_idPath != null)
-            hash += _idPath.hashCode();
-        return hash;
-    }
-
-    /**
-     * @see java.lang.Object#equals(Object)
-     */
-    public boolean equals(Object obj)
-    {
-        if (!(obj instanceof ComponentAddress))
-            return false;
-
-        if (obj == this)
-            return true;
-
-        ComponentAddress objAddress = (ComponentAddress) obj;
-        if (!getPageName().equals(objAddress.getPageName()))
-            return false;
-
-        String idPath1 = getIdPath();
-        String idPath2 = objAddress.getIdPath();
-        return (idPath1 == idPath2) || (idPath1 != null && idPath1.equals(idPath2));
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ContentType.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ContentType.java
deleted file mode 100644
index 9e7dc8f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ContentType.java
+++ /dev/null
@@ -1,217 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import org.apache.hivemind.util.Defense;
-
-/**
- * Represents an HTTP content type. Allows to set various elements like the mime type, the character
- * set, and other parameters. This is similar to a number of other implementations of the same
- * concept in JAF, etc. We have created this simple implementation to avoid including the whole
- * libraries.
- * 
- * @author mindbridge
- * @since 3.0
- */
-public class ContentType
-{
-    private String _baseType = "";
-
-    private String _subType = "";
-
-    private final Map _parameters = new HashMap();
-
-    /**
-     * Creates a new empty content type.
-     */
-    public ContentType()
-    {
-    }
-
-    /**
-     * Creates a new content type from the argument. The format of the argument has to be
-     * basetype/subtype(;key=value)*
-     * 
-     * @param contentType
-     *            the content type that needs to be represented
-     */
-    public ContentType(String contentType)
-    {
-        this();
-        parse(contentType);
-    }
-
-    /**
-     * Returns true only if the other object is another instance of ContentType, and has the ssame
-     * baseType, subType and set of parameters.
-     */
-    public boolean equals(Object o)
-    {
-        if (o == null)
-            return false;
-
-        if (o.getClass() != this.getClass())
-            return false;
-
-        ContentType ct = (ContentType) o;
-
-        return _baseType.equals(ct._baseType) && _subType.equals(ct._subType)
-                && _parameters.equals(ct._parameters);
-    }
-
-    /**
-     * @return the base type of the content type
-     */
-    public String getBaseType()
-    {
-        return _baseType;
-    }
-
-    /**
-     * @param baseType
-     */
-    public void setBaseType(String baseType)
-    {
-        Defense.notNull(baseType, "baseType");
-
-        _baseType = baseType;
-    }
-
-    /**
-     * @return the sub-type of the content type
-     */
-    public String getSubType()
-    {
-        return _subType;
-    }
-
-    /**
-     * @param subType
-     */
-    public void setSubType(String subType)
-    {
-        Defense.notNull(subType, "subType");
-
-        _subType = subType;
-    }
-
-    /**
-     * @return the MIME type of the content type
-     */
-    public String getMimeType()
-    {
-        return _baseType + "/" + _subType;
-    }
-
-    /**
-     * @return the list of names of parameters in this content type
-     */
-    public String[] getParameterNames()
-    {
-        Set parameterNames = _parameters.keySet();
-        return (String[]) parameterNames.toArray(new String[parameterNames.size()]);
-    }
-
-    /**
-     * @param key
-     *            the name of the content type parameter
-     * @return the value of the content type parameter
-     */
-    public String getParameter(String key)
-    {
-        Defense.notNull(key, "key");
-
-        return (String) _parameters.get(key);
-    }
-
-    /**
-     * @param key
-     *            the name of the content type parameter
-     * @param value
-     *            the value of the content type parameter
-     */
-    public void setParameter(String key, String value)
-    {
-        Defense.notNull(key, "key");
-        Defense.notNull(value, "value");
-
-        _parameters.put(key.toLowerCase(), value);
-    }
-
-    /**
-     * Parses the argument and configures the content type accordingly. The format of the argument
-     * has to be type/subtype(;key=value)*
-     * 
-     * @param contentType
-     *            the content type that needs to be represented
-     */
-    public void parse(String contentType)
-    {
-        _baseType = "";
-        _subType = "";
-        _parameters.clear();
-
-        StringTokenizer tokens = new StringTokenizer(contentType, ";");
-        if (!tokens.hasMoreTokens())
-            return;
-
-        String mimeType = tokens.nextToken();
-        StringTokenizer mimeTokens = new StringTokenizer(mimeType, "/");
-        setBaseType(mimeTokens.hasMoreTokens() ? mimeTokens.nextToken() : "");
-        setSubType(mimeTokens.hasMoreTokens() ? mimeTokens.nextToken() : "");
-
-        while (tokens.hasMoreTokens())
-        {
-            String parameter = tokens.nextToken();
-
-            StringTokenizer parameterTokens = new StringTokenizer(parameter, "=");
-            String key = parameterTokens.hasMoreTokens() ? parameterTokens.nextToken() : "";
-            String value = parameterTokens.hasMoreTokens() ? parameterTokens.nextToken() : "";
-            setParameter(key, value);
-        }
-    }
-
-    /**
-     * @return the string representation of this content type
-     */
-    public String unparse()
-    {
-        StringBuffer buf = new StringBuffer(getMimeType());
-
-        String[] parameterNames = getParameterNames();
-        for (int i = 0; i < parameterNames.length; i++)
-        {
-            String key = parameterNames[i];
-            String value = getParameter(key);
-            buf.append(";" + key + "=" + value);
-        }
-
-        return buf.toString();
-    }
-
-    /**
-     * @return the string representation of this content type. Same as unparse().
-     */
-    public String toString()
-    {
-        return unparse();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/DefaultPrimaryKeyConverter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/DefaultPrimaryKeyConverter.java
deleted file mode 100644
index 2cfaadd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/DefaultPrimaryKeyConverter.java
+++ /dev/null
@@ -1,315 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.util;

-

-import java.util.ArrayList;

-import java.util.Collections;

-import java.util.HashMap;

-import java.util.HashSet;

-import java.util.List;

-import java.util.Map;

-import java.util.Set;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.util.Defense;

-import org.apache.tapestry.components.IPrimaryKeyConverter;

-

-/**

- * Companion to the {@link org.apache.tapestry.components.ForBean For component}, this class is an

- * implementation of {@link org.apache.tapestry.components.IPrimaryKeyConverter} that performs some

- * additional handling, such as tracking value sets..

- * <p>

- * Value sets are sets of value objects maintained by the converter; the converter will provide a

- * synthetic read/write boolean property that indicates if the {@link #getLastValue() last value} is

- * or is not in the set.

- * <p>

- * A single built-in value set, {@link #isDeleted()} has a special purpose; it controls whether or

- * not values are returned from {@link #getValues()}. Subclasses may add additional synthetic

- * boolean properties and additional sets.

- * <p>

- * Why not just store a boolean property in the object itself? Well, deleted is a good example of a

- * property that is meaningful in the context of an operation, but isn't stored ... once an object

- * is deleted (from secondary storage, such as a database) there's no place to store such a flag.

- * The DefaultPrimaryKey converter is used in this context to store transient, operation data ...

- * such as which values are to be deleted.

- * <p>

- * This class can be thought of as a successor to {@link org.apache.tapestry.form.ListEditMap}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class DefaultPrimaryKeyConverter implements IPrimaryKeyConverter

-{

-    private final Map _map = new HashMap();

-

-    private final List _keys = new ArrayList();

-

-    // The values added to the Map, in the order they were added.

-    private final List _values = new ArrayList();

-

-    // The last value accessed by getPrimaryKey() or getValue().

-    // Other methods may operate upon this value.

-

-    private Object _lastValue;

-

-    private Set _deletedValues;

-

-    /**

-     * Clears all properties of the converter, returning it to a pristine state. Subclasses should

-     * invoke this implementation in addition to clearing any of their own state.

-     */

-    public void clear()

-    {

-        _map.clear();

-        _keys.clear();

-        _values.clear();

-        _lastValue = null;

-        _deletedValues = null;

-    }

-

-    public final void add(Object key, Object value)

-    {

-        Defense.notNull(key, "key");

-        Defense.notNull(value, "value");

-

-        if (_map.containsKey(key))

-            throw new ApplicationRuntimeException(UtilMessages.keyAlreadyExists(key));

-

-        _map.put(key, value);

-

-        _keys.add(key);

-        _values.add(value);

-

-        _lastValue = value;

-    }

-

-    /**

-     * Returns a unmodifiable list of values stored into the converter, in the order in which they

-     * were stored.

-     * 

-     * @return an unmodifiable List

-     * @see #add(Object, Object)

-     */

-    public final List getAllValues()

-    {

-        return Collections.unmodifiableList(_values);

-    }

-

-    /**

-     * Returns a list of all values stored into the converter, with deleted values removed.

-     */

-

-    public final List getValues()

-    {

-        if (isDeletedValuesEmpty())

-            return getAllValues();

-

-        List result = new ArrayList(_values);

-

-        result.removeAll(_deletedValues);

-

-        return result;

-    }

-

-    /**

-     * Returns true if the deleted values set is empty (or null).

-     */

-    private boolean isDeletedValuesEmpty()

-    {

-        return _deletedValues == null || _deletedValues.isEmpty();

-    }

-

-    /**

-     * Checks to see if the {@link #getLastValue() last value} is, or is not, in the set of deleted

-     * values.

-     */

-    public final boolean isDeleted()

-    {

-        return checkValueSetForLastValue(_deletedValues);

-    }

-

-    /**

-     * Checks the set to see if it contains the {@link #getLastValue() last value}.

-     * 

-     * @param valueSet

-     *            the set to check, which may be null

-     * @return true if the last value is in the set (if non-null)

-     */

-    protected final boolean checkValueSetForLastValue(Set valueSet)

-    {

-        return valueSet != null && valueSet.contains(_lastValue);

-    }

-

-    /**

-     * Adds or removes the {@link #getLastValue() last value} from the

-     * {@link #getDeletedValues() deleted values set}.

-     * 

-     * @param deleted

-     */

-    public final void setDeleted(boolean deleted)

-    {

-        _deletedValues = updateValueSetForLastValue(_deletedValues, deleted);

-    }

-

-    /**

-     * Updates a value set to add or remove the {@link #getLastValue() last value} to the set. The

-     * logic here will create and return a new Set instance if necessary (that is, if inSet is true

-     * and set is null). The point is to defer the creation of the set until its actually needed.

-     * 

-     * @param set

-     *            the set to update, which may be null

-     * @param inSet

-     *            if true, the last value will be added to the set (creating the set as necessary);

-     *            if false, the last value will be removed

-     * @return the set passed in, or a new Set instance

-     */

-    protected final Set updateValueSetForLastValue(Set set, boolean inSet)

-    {

-        Set updatedSet = set;

-        if (inSet)

-        {

-            if (updatedSet == null)

-                updatedSet = new HashSet();

-

-            updatedSet.add(_lastValue);

-

-            return updatedSet;

-        }

-

-        if (updatedSet != null)

-            updatedSet.remove(_lastValue);

-

-        return updatedSet;

-    }

-

-    /**

-     * Returns the last active value; this is the value passed to {@link #getPrimaryKey(Object)} or

-     * the value for the key passed to {@link #getValue(Object)}.

-     * <p>

-     * Maintaining <em>value sets</em> involves adding or removing the active value from a set.

-     * 

-     * @return the last active object

-     */

-    public final Object getLastValue()

-    {

-        return _lastValue;

-    }

-

-    /**

-     * Returns an unmodifiable set of all values marked as deleted.

-     */

-

-    public final Set getDeletedValues()

-    {

-        return createUnmodifiableSet(_deletedValues);

-    }

-

-    /**

-     * Converts a value set into a returnable value; null is converted to the empty set, and

-     * non-null is wrapped as unmodifiable.

-     * 

-     * @param valueSet

-     *            the set to convert and return

-     * @return a non-null, non-modifiable Set

-     */

-    protected final Set createUnmodifiableSet(Set valueSet)

-    {

-        return valueSet == null ? Collections.EMPTY_SET : Collections.unmodifiableSet(valueSet);

-    }

-

-    /**

-     * Iterates over the keys and values, removing any values (and corresponding keys) that that are

-     * in the deleted set. After invoking this, {@link #getAllValues()} will be the same as

-     * {@link #getValues()}.

-     */

-    public final void removeDeletedValues()

-    {

-        _lastValue = null;

-

-        if (isDeletedValuesEmpty())

-            return;

-

-        int count = _keys.size();

-

-        for (int i = count - 1; i >= 0; i--)

-        {

-            if (_deletedValues.contains(_values.get(i)))

-            {

-                _values.remove(i);

-                Object key = _keys.remove(i);

-

-                _map.remove(key);

-            }

-        }

-    }

-

-    /**

-     * Gets the primary key of an object previously stored in this converter.

-     * 

-     * @param value

-     *            an object previously stored in the converter

-     * @return the corresponding key used to store the object

-     * @throws ApplicationRuntimeException

-     *             if the value was not previously stored

-     * @see #add(Object, Object)

-     */

-    public final Object getPrimaryKey(Object value)

-    {

-        int index = _values.indexOf(value);

-

-        if (index < 0)

-            throw new ApplicationRuntimeException(UtilMessages.valueNotFound(value), value, null,

-                    null);

-

-        _lastValue = value;

-

-        return _keys.get(index);

-    }

-

-    /**

-     * Given a primary key, locates the corresponding object. May invoke

-     * {@link #provideMissingValue(Object)} if no such key has been stored into the converter.

-     * 

-     * @return the object if the key is found, or null otherwise.

-     * @see #add(Object, Object)

-     */

-    public final Object getValue(Object primaryKey)

-    {

-        Object result = _map.get(primaryKey);

-

-        if (result == null)

-            result = provideMissingValue(primaryKey);

-

-        _lastValue = result;

-

-        return result;

-    }

-

-    /**

-     * Invoked by {@link #getValue(Object)} when the key is not found in the converter's map.

-     * Subclasses may override this method to either obtain the corresponding object from secondary

-     * storage, to throw an exception, or to provide a new object instance. This implementation

-     * returns null.

-     * 

-     * @param key

-     *            the key for which an object was requested

-     * @return the object for the key, or null if no object may can be provided

-     */

-    protected Object provideMissingValue(Object key)

-    {

-        return null;

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/DescribedLocation.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/DescribedLocation.java
deleted file mode 100644
index 8ba1e36..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/DescribedLocation.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-
-/**
- * Implementation of {@link org.apache.hivemind.Location} that is used to describe a location within
- * a resource. This is used when the location within the resource can't be expressed as a line and
- * column. One example is for setting the location of an annotation. This is useful for line-precise
- * exception reporting of errors related to annotations.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class DescribedLocation implements Location
-{
-    private final Resource _resource;
-
-    private final String _description;
-
-    public DescribedLocation(Resource resource, String description)
-    {
-        Defense.notNull(resource, "resource");
-        Defense.notNull(description, "description");
-
-        _resource = resource;
-        _description = description;
-    }
-
-    /**
-     * Returns the description provided in the constructor.
-     */
-
-    public String toString()
-    {
-        return _description;
-    }
-
-    /**
-     * Returns the resource provided in the constructor.
-     */
-
-    public Resource getResource()
-    {
-        return _resource;
-    }
-
-    /**
-     * Always returns 0.
-     */
-
-    public int getLineNumber()
-    {
-        return 0;
-    }
-
-    /**
-     * Always returns 0.
-     */
-
-    public int getColumnNumber()
-    {
-        return 0;
-    }
-
-    /**
-     * A DescribedLocation is equal to another only if their resources are equal, and their
-     * descriptions are equal.
-     */
-    public boolean equals(Object other)
-    {
-        if (other instanceof DescribedLocation)
-        {
-            DescribedLocation otherLocation = (DescribedLocation) other;
-
-            return _resource.equals(otherLocation._resource)
-                    && _description.equals(otherLocation._description);
-        }
-
-        return false;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/IPropertyHolder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/IPropertyHolder.java
deleted file mode 100644
index 46c3e5d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/IPropertyHolder.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.List;
-
-/**
- * An interface that defines an object that can store named propertys. The names
- * and the properties are Strings.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IPropertyHolder
-{
-
-    /**
-     * Returns a List of Strings, the names of all properties held by the
-     * receiver. May return an empty list. The List is sorted alphabetically.
-     * The List may be modified without affecting this property holder.
-     * <p>
-     * Prior to release 2.2, this method returned Collection.
-     */
-
-    List getPropertyNames();
-
-    /**
-     * Sets a named property. The new value replaces the existing value, if any.
-     * Setting a property to null is the same as removing the property.
-     */
-
-    void setProperty(String name, String value);
-
-    /**
-     * Removes the named property, if present.
-     */
-
-    void removeProperty(String name);
-
-    /**
-     * Retrieves the named property, or null if the property is not defined.
-     */
-
-    String getProperty(String name);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java
deleted file mode 100644
index 2c580d0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Used to "uniquify" names within a given context. A base name is passed in,
- * and the return value is the base name, or the base name extended with a
- * suffix to make it unique.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class IdAllocator
-{
-
-    private static final String SEPARATOR = "_";
-
-    private final Map _generatorMap = new HashMap();
-
-    private final String _namespace;
-    
-    /** Class used only by IdAllocator. */
-    private class NameGenerator implements Cloneable
-    {
-
-        private final String _baseId;
-
-        private int _index;
-
-        NameGenerator(String baseId)
-        {
-            _baseId = baseId + SEPARATOR;
-        }
-
-        public String nextId()
-        {
-            return _baseId + _index++;
-        }
-        
-        public String peekId()
-        {
-            return _baseId + _index;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        protected Object clone()
-            throws CloneNotSupportedException
-        {
-            return super.clone();
-        }
-    }
-
-    public IdAllocator()
-    {
-        this("");
-    }
-
-    public IdAllocator(String namespace)
-    {
-        Defense.notNull(namespace, "namespace");
-
-        _namespace = namespace;
-    }
-
-    /**
-     * Allocates the id. Repeated calls for the same name will return "name",
-     * "name_0", "name_1", etc.
-     *
-     * @param name
-     *          The base id to allocate new unique ids from.
-     *
-     * @return A unique version of the passed in id.
-     */
-
-    public String allocateId(String name)
-    {
-        String key = name + _namespace;
-
-        NameGenerator g = (NameGenerator) _generatorMap.get(key.toLowerCase());
-        String result = null;
-
-        if (g == null)
-        {
-            g = new NameGenerator(key);
-            result = key;
-        }
-        else 
-            result = g.nextId();
-
-        // Handle the degenerate case, where a base name of the form "foo$0" has
-        // been
-        // requested. Skip over any duplicates thus formed.
-
-        while(_generatorMap.containsKey(result.toLowerCase()))
-            result = g.nextId();
-        
-        _generatorMap.put(result.toLowerCase(), g);
-        
-        return result;
-    }
-    
-    /**
-     * Should return the exact same thing as {@link #allocateId(String)}, with the difference
-     * that the calculated id is not allocated and stored so multiple calls will always return the 
-     * same thing. 
-     * 
-     * @param name The name to peek at.
-     * @return The next id that will be allocated for the given name.
-     */
-    public String peekNextId(String name)
-    {
-        String key = name + _namespace;
-
-        NameGenerator g = (NameGenerator) _generatorMap.get(key.toLowerCase());
-        String result = null;
-        
-        if (g == null)
-        {
-            g = new NameGenerator(key);
-            result = key;
-        } else 
-            result = g.peekId();
-        
-        // Handle the degenerate case, where a base name of the form "foo_0" has
-        // been
-        // requested. Skip over any duplicates thus formed.
-        
-        // in a peek we don't want to actually increment any id state so we must
-        // clone
-        
-        if (_generatorMap.containsKey(result.toLowerCase())) {
-            
-            try {
-                NameGenerator cg = (NameGenerator)g.clone();
-                
-                while (_generatorMap.containsKey(result.toLowerCase()))
-                    result = cg.nextId();
-                
-            } catch (CloneNotSupportedException e) {
-                throw new ApplicationRuntimeException(e);
-            }
-        }
-        
-        return result;
-    }
-    
-    /**
-     * Clears the allocator, resetting it to freshly allocated state.
-     */
-
-    public void clear()
-    {
-        _generatorMap.clear();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/MultiKey.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/MultiKey.java
deleted file mode 100644
index 3485594..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/MultiKey.java
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.tapestry.Tapestry;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- * A complex key that may be used as an alternative to nested {@link java.util.Map}s.
- * 
- * @author Howard Lewis Ship
- */
-
-public class MultiKey implements Externalizable
-{
-
-    /**
-     * @since 2.0.4
-     */
-
-    private static final long serialVersionUID = 4465448607415788806L;
-
-    private static final int HASH_CODE_UNSET = -1;
-
-    private transient int hashCode = HASH_CODE_UNSET;
-
-    private Object[] _keys;
-
-    /**
-     * Public no-arguments constructor needed to be compatible with
-     * {@link Externalizable}; this leaves the new MultiKey in a non-usable
-     * state and shouldn't be used by user code.
-     */
-
-    public MultiKey()
-    {
-    }
-
-    /**
-     * Builds a <code>MultiKey</code> from an array of keys. If the array is
-     * not copied, then it must not be modified.
-     * 
-     * @param keys
-     *            The components of the key.
-     * @param makeCopy
-     *            If true, a copy of the keys is created. If false, the keys are
-     *            simple retained by the <code>MultiKey</code>.
-     * @throws IllegalArgumentException
-     *             if keys is null, of if the first element of keys is null.
-     */
-
-    public MultiKey(Object[] keys, boolean makeCopy)
-    {
-        super();
-
-        if (keys == null || keys.length == 0)
-            throw new IllegalArgumentException(Tapestry.getMessage("MultiKey.null-keys"));
-
-        if (keys[0] == null)
-            throw new IllegalArgumentException(Tapestry.getMessage("MultiKey.first-element-may-not-be-null"));
-
-        if (makeCopy)
-        {
-            _keys = new Object[keys.length];
-            System.arraycopy(keys, 0, this._keys, 0, keys.length);
-        }
-        else
-            _keys = keys;
-    }
-
-    /**
-     * Returns true if. :
-     * <ul>
-     * <li>The other object is a <code>MultiKey</code>
-     * <li>They have the same number of key elements
-     * <li>Every element is an exact match or is equal
-     * </ul>
-     */
-
-    public boolean equals(Object other)
-    {
-        int i;
-
-        if (other == null)
-            return false;
-
-        if (_keys == null)
-            throw new IllegalStateException(Tapestry.getMessage("MultiKey.no-keys"));
-
-        // Would a hashCode check be worthwhile here?
-
-        try
-        {
-            MultiKey otherMulti = (MultiKey) other;
-
-            if (_keys.length != otherMulti._keys.length) return false;
-
-            for(i = 0; i < _keys.length; i++)
-            {
-                // On an exact match, continue. This means that null matches
-                // null.
-
-                if (_keys[i] == otherMulti._keys[i])
-                    continue;
-
-                // If either is null, but not both, then
-                // not a match.
-
-                if (_keys[i] == null || otherMulti._keys[i] == null)
-                    return false;
-
-                if (!_keys[i].equals(otherMulti._keys[i]))
-                    return false;
-            }
-
-            // Every key equal. A match.
-
-            return true;
-        }
-        catch (ClassCastException e)
-        {
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns the hash code of the receiver, which is computed from all the
-     * non-null key elements. This value is computed once and then cached, so
-     * elements should not change their hash codes once created (note that this
-     * is the same constraint that would be used if the individual key elements
-     * were themselves {@link java.util.Map} keys.
-     */
-
-    public int hashCode()
-    {
-        if (hashCode == HASH_CODE_UNSET)
-        {
-            hashCode = _keys[0].hashCode();
-
-            for(int i = 1; i < _keys.length; i++)
-            {
-                if (_keys[i] != null) hashCode ^= _keys[i].hashCode();
-            }
-        }
-
-        return hashCode;
-    }
-
-    /**
-     * Identifies all the keys stored by this <code>MultiKey</code>.
-     */
-
-    public String toString()
-    {
-        StringBuffer buffer;
-        int i;
-
-        buffer = new StringBuffer("MultiKey[");
-
-        for(i = 0; i < _keys.length; i++)
-        {
-            if (i > 0) buffer.append(", ");
-
-            if (_keys[i] == null)
-                buffer.append("<null>");
-            else buffer.append(_keys[i]);
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /**
-     * Writes a count of the keys, then writes each individual key.
-     */
-
-    public void writeExternal(ObjectOutput out)
-        throws IOException
-    {
-        out.writeInt(_keys.length);
-
-        for(int i = 0; i < _keys.length; i++)
-            out.writeObject(_keys[i]);
-    }
-
-    /**
-     * Reads the state previously written by
-     * {@link #writeExternal(ObjectOutput)}.
-     */
-
-    public void readExternal(ObjectInput in)
-        throws IOException, ClassNotFoundException
-    {
-        int count;
-
-        count = in.readInt();
-        _keys = new Object[count];
-
-        for(int i = 0; i < count; i++)
-            _keys[i] = in.readObject();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ObjectIdentityMap.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ObjectIdentityMap.java
deleted file mode 100644
index 82912d6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ObjectIdentityMap.java
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-/**
- * A simple map-like collection, similar to (but more more limited than) JDK
- * 1.4's IdentityHashMap. It is designed for <em>small</em> collections of
- * objects.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ObjectIdentityMap
-{
-
-    private int _pairCount = 0;
-
-    // Alternates between keys and values
-
-    private Object[] _pairs;
-
-    /**
-     * Adds or updates a key in the bag.
-     * 
-     * @param key
-     *            the key to store a value under; an existing value with the key
-     *            is discarded
-     * @param value
-     *            the value to store
-     */
-    public void put(Object key, Object value)
-    {
-        for(int i = 0; i < _pairCount; i++)
-        {
-            int index = 2 * i;
-
-            if (_pairs[index] == key)
-            {
-                _pairs[index + 1] = value;
-                return;
-            }
-        }
-
-        expandPairsIfNeeded();
-
-        int index = 2 * _pairCount;
-
-        _pairs[index] = key;
-        _pairs[index + 1] = value;
-
-        _pairCount++;
-    }
-
-    /**
-     * Returns the object stored for the given key.
-     * 
-     * @return the value, or null if the key is not found
-     */
-
-    public Object get(Object key)
-    {
-        for(int i = 0; i < _pairCount; i++)
-        {
-            int index = 2 * i;
-
-            if (_pairs[index] == key) { return _pairs[index + 1]; }
-        }
-
-        return null;
-    }
-
-    private void expandPairsIfNeeded()
-    {
-        int currentSize = _pairs == null ? 0 : _pairs.length;
-
-        int newLength = 2 * (_pairCount + 1);
-
-        if (newLength >= currentSize)
-        {
-            // Expand to dobule current size. Allocate room for 5 keys and 5
-            // values
-            // initially.
-
-            int newSize = Math.max(10, 2 * currentSize);
-
-            Object[] newPairsArray = new Object[newSize];
-
-            if (currentSize > 0)
-                System.arraycopy(_pairs, 0, newPairsArray, 0, currentSize);
-
-            _pairs = newPairsArray;
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java
deleted file mode 100644
index 6f101e0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java
+++ /dev/null
@@ -1,374 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.services.ResponseBuilder;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Implementation of {@link org.apache.tapestry.PageRenderSupport}. The
- * {@link org.apache.tapestry.html.Body}&nbsp;component uses an instance of this class.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PageRenderSupportImpl implements Locatable, PageRenderSupport
-{
-    private final AssetFactory _assetFactory;
-
-    private final Location _location;
-
-    private final ResponseBuilder _builder;
-
-    // Lines that belong inside the onLoad event handler for the <body> tag.
-
-    private StringBuffer _initializationScript;
-
-    // Used by addScriptAfterInitialization
-
-    private StringBuffer _postInitializationScript;
-
-    // Any other scripting desired
-
-    private StringBuffer _bodyScript;
-
-    // Contains text lines related to image initializations
-
-    private StringBuffer _imageInitializations;
-
-    /**
-     * Map of URLs to Strings (preloaded image references).
-     */
-
-    private Map _imageMap;
-
-    /**
-     * List of included scripts. Values are Strings.
-     *
-     * @since 1.0.5
-     */
-
-    private List _externalScripts;
-
-    private final IdAllocator _idAllocator;
-
-    private final String _preloadName;
-
-    private final Map _requires = new HashMap();
-
-    public PageRenderSupportImpl(AssetFactory assetFactory, String namespace,
-                                 Location location, ResponseBuilder builder)
-    {
-        Defense.notNull(assetFactory, "assetService");
-
-        _assetFactory = assetFactory;
-        _location = location;
-        _idAllocator = new IdAllocator(namespace);
-        _builder = builder;
-
-        _preloadName = (namespace.equals("") ? "tapestry." : namespace) + "preload";
-    }
-
-    /**
-     * Returns the location, which may be used in error messages. In practical terms, this is the
-     * location of the {@link org.apache.tapestry.html.Body}&nbsp;component.
-     */
-
-    public Location getLocation()
-    {
-        return _location;
-    }
-
-    public String getPreloadedImageReference(String URL)
-    {
-        return getPreloadedImageReference(null, URL);
-    }
-
-    public String getPreloadedImageReference(IComponent target, IAsset source)
-    {
-        return getPreloadedImageReference(target, source.buildURL());
-    }
-
-    public String getPreloadedImageReference(IComponent target, String URL)
-    {
-        if (target != null
-            && !_builder.isImageInitializationAllowed(target))
-            return URL;
-
-        if (_imageMap == null)
-            _imageMap = new HashMap();
-
-        String reference = (String) _imageMap.get(URL);
-
-        if (reference == null)
-        {
-            int count = _imageMap.size();
-            String varName = _preloadName + "[" + count + "]";
-            reference = varName + ".src";
-
-            if (_imageInitializations == null)
-                _imageInitializations = new StringBuffer();
-
-            _imageInitializations.append("  ");
-            _imageInitializations.append(varName);
-            _imageInitializations.append(" = new Image();\n");
-            _imageInitializations.append("  ");
-            _imageInitializations.append(reference);
-            _imageInitializations.append(" = \"");
-            _imageInitializations.append(URL);
-            _imageInitializations.append("\";\n");
-
-            _imageMap.put(URL, reference);
-        }
-
-        return reference;
-    }
-
-    public void addBodyScript(String script)
-    {
-        addBodyScript(null, script);
-    }
-
-    public void addBodyScript(IComponent target, String script)
-    {
-        if (!_builder.isBodyScriptAllowed(target))
-            return;
-
-        String val = stripDuplicateIncludes(script);
-
-        if (_bodyScript == null)
-            _bodyScript = new StringBuffer(val.length());
-
-        _bodyScript.append("\n").append(val);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isBodyScriptAllowed(IComponent target)
-    {
-        return _builder.isBodyScriptAllowed(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isExternalScriptAllowed(IComponent target)
-    {
-        return _builder.isExternalScriptAllowed(target);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isInitializationScriptAllowed(IComponent target)
-    {
-        return _builder.isInitializationScriptAllowed(target);
-    }
-
-    public void addInitializationScript(String script)
-    {
-        addInitializationScript(null, script);
-    }
-
-    public void addInitializationScript(IComponent target, String script)
-    {
-        if (!_builder.isInitializationScriptAllowed(target))
-            return;
-
-        String val = stripDuplicateIncludes(script);
-
-        if (_initializationScript == null)
-            _initializationScript = new StringBuffer(val.length() + 1);
-
-        _initializationScript.append("\n").append(val);
-    }
-
-    public void addScriptAfterInitialization(IComponent target, String script)
-    {
-        if (!_builder.isInitializationScriptAllowed(target))
-            return;
-
-        String strippedScript = stripDuplicateIncludes(script);
-
-        if (_postInitializationScript == null)
-            _postInitializationScript = new StringBuffer(strippedScript.length() + 1);
-
-        _postInitializationScript.append("\n").append(strippedScript);
-    }
-
-    /**
-     * Provides a mechanism to strip out duplicate dojo.require calls made in script
-     * templates in order to reduce amount of redundant javascript written to client.
-     *
-     * @param input The incoming script string to check for requires.
-     * @return The input string stripped of all known dojo.require calls, if any.
-     */
-    String stripDuplicateIncludes(String input)
-    {
-        String[] lines = StringUtils.splitPreserveAllTokens(input, ';');
-
-        if (lines == null || lines.length < 1)
-            return input;
-
-        String ret = input;
-
-        for (int i=0; i < lines.length; i++)
-        {
-            if (lines[i].indexOf("dojo.require") < 0)
-                continue;
-
-            String line = StringUtils.stripToEmpty(lines[i]);
-
-            if (_requires.containsKey(line))
-            {
-                ret = StringUtils.replaceOnce(ret, line+";", "");
-            } else
-            {
-                _requires.put(line, "t");
-            }
-        }
-
-        return StringUtils.stripToEmpty(ret.trim());
-    }
-
-    public void addExternalScript(Resource scriptLocation)
-    {
-        addExternalScript(null, scriptLocation);
-    }
-
-    public void addExternalScript(IComponent target, Resource scriptLocation)
-    {
-        if (!_builder.isExternalScriptAllowed(target))
-            return;
-
-        if (_externalScripts == null)
-            _externalScripts = new ArrayList();
-
-        if (_externalScripts.contains(scriptLocation))
-            return;
-
-        // Record the Resource so we don't include it twice.
-
-        _externalScripts.add(scriptLocation);
-    }
-
-    public String getUniqueString(String baseValue)
-    {
-        return _idAllocator.allocateId(baseValue);
-    }
-
-    private void writeExternalScripts(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        int count = Tapestry.size(_externalScripts);
-        for (int i = 0; i < count; i++)
-        {
-            Resource scriptLocation = (Resource) _externalScripts.get(i);
-
-            IAsset asset = _assetFactory.createAsset(scriptLocation, null);
-
-            String url = asset.buildURL();
-
-            // Note: important to use begin(), not beginEmpty(), because browser don't
-            // interpret <script .../> properly.
-
-            _builder.writeExternalScript(writer, url, cycle);
-        }
-    }
-
-    /**
-     * Writes a single large JavaScript block containing:
-     * <ul>
-     * <li>Any image initializations (via {@link #getPreloadedImageReference(IComponent, String)}).
-     * <li>Any included scripts (via {@link #addExternalScript(Resource)}).
-     * <li>Any contributions (via {@link #addBodyScript(String)}).
-     * </ul>
-     *
-     * @see #writeInitializationScript(IMarkupWriter)
-     * @param writer
-     *          The markup writer to use.
-     * @param cycle
-     *          The current request.
-     */
-
-    public void writeBodyScript(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (!Tapestry.isEmpty(_externalScripts))
-            writeExternalScripts(writer, cycle);
-
-        if (!(any(_bodyScript) || any(_imageInitializations)))
-            return;
-
-        _builder.beginBodyScript(writer, cycle);
-
-        if (any(_imageInitializations))
-        {
-            _builder.writeImageInitializations(writer,
-                                               StringUtils.stripToEmpty(_imageInitializations.toString()),
-                                               _preloadName,
-                                               cycle);
-        }
-
-        if (any(_bodyScript))
-        {
-            _builder.writeBodyScript(writer, StringUtils.stripToEmpty(_bodyScript.toString()), cycle);
-        }
-
-        _builder.endBodyScript(writer, cycle);
-    }
-
-    /**
-     * Writes any image initializations; this should be invoked at the end of the render, after all
-     * the related HTML will have already been streamed to the client and parsed by the web browser.
-     * Earlier versions of Tapestry uses a <code>window.onload</code> event handler.
-     *
-     * @param writer
-     *          The markup writer to use.
-     */
-
-    public void writeInitializationScript(IMarkupWriter writer)
-    {
-        if (!any(_initializationScript) && !any(_postInitializationScript))
-            return;
-
-        String script = getContent(_initializationScript) + getContent(_postInitializationScript);
-
-        _builder.writeInitializationScript(writer, StringUtils.stripToEmpty(script));
-    }
-
-    public static String getContent(StringBuffer buffer)
-    {
-        if (buffer == null || buffer.length() < 1)
-            return "";
-        
-        return buffer.toString();
-    }
-
-    private boolean any(StringBuffer buffer)
-    {
-        return buffer != null && buffer.length() > 0;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/PropertyHolderPropertySource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/PropertyHolderPropertySource.java
deleted file mode 100644
index 17b6e05..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/PropertyHolderPropertySource.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- *  Implements the {@link IPropertySource} interface
- *  for instances that implement {@link org.apache.tapestry.util.IPropertyHolder}.
- *
- *  @author Howard Lewis Ship
- *  @since 2.3
- *
- **/
-
-public class PropertyHolderPropertySource implements IPropertySource
-{
-    private IPropertyHolder _holder;
-    
-    public PropertyHolderPropertySource(IPropertyHolder holder)
-    {
-        _holder = holder;
-    }
-
-    public String getPropertyValue(String propertyName)
-    {
-        return _holder.getProperty(propertyName);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/QueryParameterMap.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/QueryParameterMap.java
deleted file mode 100644
index 2bd0387..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/QueryParameterMap.java
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.hivemind.util.Defense;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.TreeMap;
-
-/**
- * A wrapper around a Map that stores query parameter values. Map keys are
- * strings. Map values can be simple strings or array of string (or null).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class QueryParameterMap
-{
-    private final Map _parameters;
-
-    public QueryParameterMap()
-    {
-        this(new HashMap());
-    }
-
-    /**
-     * Constructor around an existing Map whose keys and values are expected to
-     * conform expected use (keys are strings, values are null, string or string
-     * array). The map passed in is retained ( not copied).
-     */
-
-    public QueryParameterMap(Map parameterMap)
-    {
-        Defense.notNull(parameterMap, "parameterMap");
-
-        _parameters = parameterMap;
-    }
-
-    /**
-     * Replaces the parameter value for the given name wit the new value (which
-     * may be null).
-     */
-
-    public void setParameterValue(String name, String value)
-    {
-        Defense.notNull(name, "name");
-
-        _parameters.put(name, value);
-    }
-
-    /**
-     * Replaces the parameter value for the given name wit the new list of
-     * values (which may be empty or null).
-     */
-
-    public void setParameterValues(String name, String[] values)
-    {
-        Defense.notNull(name, "name");
-
-        _parameters.put(name, values);
-    }
-
-    /**
-     * Gets a query parameter value. If an array of values was stored, this
-     * returns the first value. May return null.
-     */
-
-    public String getParameterValue(String name)
-    {
-        Defense.notNull(name, "name");
-
-        Object values = _parameters.get(name);
-
-        if (values == null || values instanceof String) return (String) values;
-
-        String[] array = (String[]) values;
-
-        return array[0];
-    }
-
-    /**
-     * Returns the array of values for the specified parameter. If only a lone
-     * value was stored (via {@link #setParameterValue(String, String)}, then
-     * the value is wrapped as a string array and returned.
-     */
-    public String[] getParameterValues(String name)
-    {
-        Defense.notNull(name, "name");
-
-        Object values = _parameters.get(name);
-
-        if (values == null || values instanceof String[])
-            return (String[]) values;
-
-        String loneValue = (String) values;
-
-        return new String[] { loneValue };
-    }
-
-    /**
-     * Returns the names of all parameters, sorted alphabetically.
-     */
-    public String[] getParameterNames()
-    {
-        int count = _parameters.size();
-
-        String[] result = (String[]) _parameters.keySet().toArray(new String[count]);
-
-        if (!TreeMap.class.isInstance(_parameters))
-            Arrays.sort(result);
-
-        return result;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/RegexpMatch.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/RegexpMatch.java
deleted file mode 100644
index 3d2f970..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/RegexpMatch.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-/**
- * A "friendly" version of a regular expression match. 
- */
-public class RegexpMatch
-{
-    private final int _groupCount;
-    private final String[] _groups;
-
-    RegexpMatch(int groupCount, String[] groups)
-    {
-        _groupCount = groupCount;
-        _groups = groups;
-    }
-
-    /**
-     * Returns a matching group within the input string. Group 0 is the entire input string, group 1
-     * is the content with the first expression, etc.
-     */
-
-    public String getGroup(int group)
-    {
-        return _groups[group];
-    }
-
-    /**
-     * Returns the entire matching input.
-     */
-
-    public String getInput()
-    {
-        return _groups[0];
-    }
-    
-    public int getMatchLength()
-    {
-        return _groups[0].length();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/RegexpMatcher.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/RegexpMatcher.java
deleted file mode 100644
index c66f653..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/RegexpMatcher.java
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.commons.pool.KeyedPoolableObjectFactory;
-import org.apache.commons.pool.impl.GenericKeyedObjectPool;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.oro.text.regex.Perl5Compiler;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Streamlines the interface to ORO by implicitly constructing the necessary compilers and matchers,
- * and by caching compiled patterns.
- * 
- */
-
-public class RegexpMatcher
-{    
-    private static final long SLEEP_TIME = 1000 * 60 * 4;
-
-    private static final long EVICT_IDLE_TIME = 1000 * 60 * 60;
-    
-    private final KeyedPoolableObjectFactory _factory = new RegexpPoolObjectFactory();
-
-    private final GenericKeyedObjectPool _pool;
-    
-    private Map _escapedPatternStrings = new HashMap();
-    
-    public RegexpMatcher()
-    {
-        _pool = new GenericKeyedObjectPool(_factory);
-        
-        _pool.setMinEvictableIdleTimeMillis(EVICT_IDLE_TIME);
-        _pool.setTimeBetweenEvictionRunsMillis(SLEEP_TIME);
-    }
-    
-    /**
-     * Clears any previously compiled patterns.
-     */
-    public void clear()
-    {
-        _pool.clear();
-    }
-    
-    public boolean matches(String pattern, String input)
-    {
-        Pattern compiled = null;
-        
-        try {
-            
-            compiled = (Pattern)_pool.borrowObject(pattern);
-            
-            return compiled.matcher(input).matches();
-            
-        } catch (Exception e) {
-            
-            throw new ApplicationRuntimeException(e);
-        } finally {
-            
-            try { _pool.returnObject(pattern, compiled); } catch (Throwable t) { }
-        }
-    }
-    
-    public boolean contains(String pattern, String input)
-    {
-        Pattern compiled = null;
-        
-        try {
-            
-            compiled = (Pattern)_pool.borrowObject(pattern);
-            
-            return compiled.matcher(input).find();
-            
-        } catch (Exception e) {
-            
-            throw new ApplicationRuntimeException(e);
-        } finally {
-            
-            try { _pool.returnObject(pattern, compiled); } catch (Throwable t) { }
-        }
-    }
-
-    public String getEscapedPatternString(String pattern)
-    {
-        String result = (String) _escapedPatternStrings.get(pattern);
-        
-        if (result == null)
-        {
-            result = Perl5Compiler.quotemeta(pattern);
-
-            _escapedPatternStrings.put(pattern, result);
-        }
-        
-        return result;
-    }
-    
-    /**
-     * Given an input string, finds all matches in an input string for the pattern.
-     * 
-     * @param pattern
-     *            the regexp pattern for matching
-     * @param input
-     *            the string to search for matches within
-     * @return array (possibly empty) of matches
-     * @since 4.0
-     */
-    public RegexpMatch[] getMatches(String pattern, String input)
-    {
-        Pattern compiled = null;
-        
-        try {
-            
-            compiled = (Pattern)_pool.borrowObject(pattern);
-
-            Matcher matcher = compiled.matcher(input);
-            List matches = new ArrayList();
-            
-            while (matcher.find())
-            {
-                int length = matcher.groupCount();
-                String[] groups = new String[length + 1];
-                groups[0] = matcher.group();
-                
-                for (int i=1; i <= length; i++) {
-                    groups[i] = matcher.group(i);
-                }
-
-                matches.add(new RegexpMatch(length, groups));
-            }
-            
-            return (RegexpMatch[]) matches.toArray(new RegexpMatch[matches.size()]);
-            
-        } catch (Exception e) {
-            
-            throw new ApplicationRuntimeException(e);
-        } finally {
-            
-            try { _pool.returnObject(pattern, compiled); } catch (Throwable t) { }
-        }
-    }
-
-    /**
-     * Given an input string, finds all matches in an input string for the pattern.
-     * 
-     * @param pattern
-     *            the regexp pattern for matching
-     * @param input
-     *            the string to search for matches within
-     * @param subgroup
-     *            the group (sub-expression) within the pattern to return as a match
-     * @return array (possibly empty) of matching strings
-     */
-    public String[] getMatches(String pattern, String input, int subgroup)
-    {
-        Pattern compiled = null;
-        
-        try {
-
-            compiled = (Pattern)_pool.borrowObject(pattern);
-
-            Matcher matcher = compiled.matcher(input);
-            List matches = new ArrayList();
-            
-            while (matcher.find())
-            {
-                String matchedInput = matcher.group(subgroup);
-                
-                matches.add(matchedInput);
-            }
-
-            return (String[]) matches.toArray(new String[matches.size()]);
-            
-        } catch (Exception e) {
-
-            throw new ApplicationRuntimeException(e);
-        } finally {
-
-            try { _pool.returnObject(pattern, compiled); } catch (Throwable t) { }
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/RegexpPoolObjectFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/RegexpPoolObjectFactory.java
deleted file mode 100644
index 30f72e7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/RegexpPoolObjectFactory.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.util;
-
-import org.apache.commons.pool.BaseKeyedPoolableObjectFactory;
-import org.apache.hivemind.util.Defense;
-
-
-/**
- * Implementation of {@link BaseKeyedPoolableObjectFactory} for regexp patterns
- * that compiles incoming String regexp patterns into compiled {@link java.util.regex.Pattern}
- * objects.
- */
-public class RegexpPoolObjectFactory extends BaseKeyedPoolableObjectFactory
-{
-    /**
-     * {@inheritDoc}
-     */
-    public Object makeObject(Object pattern)
-        throws Exception
-    {
-        Defense.notNull(pattern, "Regexp pattern");
-        Defense.isAssignable(pattern, String.class, "Regexp pattern");
-        
-        String regexp = (String)pattern;
-
-        return java.util.regex.Pattern.compile(regexp, java.util.regex.Pattern.COMMENTS | java.util.regex.Pattern.DOTALL);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ResourceBundlePropertySource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ResourceBundlePropertySource.java
deleted file mode 100644
index c15ea1e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ResourceBundlePropertySource.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- *  A property source that is based on a {@link java.util.ResourceBundle}.
- *
- *  @author Howard Lewis Ship
- *  @since 3.0
- *
- **/
-
-public class ResourceBundlePropertySource implements IPropertySource
-{
-    private ResourceBundle _bundle;
-
-    public ResourceBundlePropertySource(ResourceBundle bundle)
-    {
-        _bundle = bundle;
-    }
-
-    /**
-     *  Gets the value from the bundle by invoking
-     *  {@link ResourceBundle#getString(java.lang.String)}.  If
-     *  the bundle does not contain the key (that is, it it
-     *  throws {@link java.util.MissingResourceException}), then
-     *  null is returned.
-     * 
-     **/
-    
-    public String getPropertyValue(String propertyName)
-    {
-        try
-        {
-            return _bundle.getString(propertyName);
-        }
-        catch (MissingResourceException ex)
-        {
-            return null;
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ScriptUtils.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ScriptUtils.java
deleted file mode 100644
index a7fb69b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/ScriptUtils.java
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright May 8, 2006 The Apache Software Foundation.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.util;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.pool.KeyedPoolableObjectFactory;
-import org.apache.commons.pool.impl.GenericKeyedObjectPool;
-import org.apache.hivemind.ApplicationRuntimeException;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-
-/**
- * Various scripting utility methods.
- */
-public final class ScriptUtils
-{
-    /**
-     * XML cdata start.
-     */
-    public static final String BEGIN_COMMENT = "\n<script>\n//<![CDATA[\n";
-    /**
-     * XML character data end.
-     */
-    public static final String END_COMMENT = "\n//]]>\n</script>\n";
-
-    /**
-     * Regexp represenging javascript matches.
-     */
-    public static final String SCRIPT_PATTERN = "(?:<script.*?>)(.*?)(?:<\\/script>)";
-
-    private static final KeyedPoolableObjectFactory _factory = new RegexpPoolObjectFactory();
-
-    private static final GenericKeyedObjectPool _pool;
-
-    private static final int MAX_ACTIVE = 100;
-
-    private static final long SLEEP_TIME = 1000 * 60 * 4;
-
-    static {
-        _pool = new GenericKeyedObjectPool(_factory, MAX_ACTIVE, GenericKeyedObjectPool.WHEN_EXHAUSTED_BLOCK, -1);
-
-        _pool.setMaxIdle(MAX_ACTIVE / 2);
-        _pool.setMinEvictableIdleTimeMillis(MAX_ACTIVE);
-        _pool.setTimeBetweenEvictionRunsMillis(SLEEP_TIME);
-    }
-
-    /* defeat instantiation */
-    private ScriptUtils() { }
-
-    /**
-     * Takes any <script>contents..</script> tags found in the specified
-     * input string and replaces their contents into one large <script></script>
-     * block (meaning if multiple script blocks are found, they will be turned into one),
-     * with the addition of {@link #BEGIN_COMMENT} inserted before the logic block and
-     * {@link #END_COMMENT} inserted after the logic block.
-     *
-     * @param input
-     *          The string to replace tags on
-     * @return The properly formatted string, if any formatting needed to occur.
-     */
-    public static String ensureValidScriptTags(String input) {
-
-        if (input == null)
-            return null;
-
-
-        Pattern compiled = null;
-
-        try {
-
-            compiled = (Pattern)_pool.borrowObject(SCRIPT_PATTERN);
-
-            Matcher matcher = compiled.matcher(input);
-            StringBuffer buffer = new StringBuffer(input.length());
-
-            boolean matched = false;
-            int end = 0;
-            while (matcher.find()) {
-
-                matched = true;
-                String str = matcher.group(1);
-                int pos = matcher.start() - end;
-                end = matcher.end();
-
-                if (str == null || str.trim().equals(""))
-                    matcher.appendReplacement(buffer, "");
-                else {
-                    // gather the text from the beggining to the match into a new buffer
-                    StringBuffer matchLocal = new StringBuffer();
-                    matcher.appendReplacement(matchLocal, BEGIN_COMMENT + "$1" + END_COMMENT);
-
-                    // the first part is always script-less, no need to remove comments from it.
-                    String curr =  matchLocal.toString();
-                    String prefix = curr.substring(0, pos);
-                    String suffix = curr.substring(pos);
-
-                    // the second part is in a script, so remove comments.
-                    suffix = StringUtils.replace(suffix, "<!--", "");
-                    suffix = StringUtils.replace(suffix, "// -->", "");
-                    buffer.append(prefix).append(suffix);
-                }
-            }
-
-            if (!matched)
-                buffer.append(input);
-            else {
-                //copies non matched character input, ie content after the last script.
-                matcher.appendTail(buffer);
-            }
-
-            return buffer.toString();
-
-        } catch (Exception e) {
-
-            throw new ApplicationRuntimeException(e);
-        } finally {
-
-            try { _pool.returnObject(SCRIPT_PATTERN, compiled); } catch (Throwable t) { }
-        }
-    }
-    
-    /**
-     * Utility that will attempt to generate a unique hash string
-     * that is javascript client in a function name based on the inomcing
-     * object's {@link Object#hashCode()} return value.
-     * 
-     * @param target The object to hash a string for.
-     * @return A string hash value, not necessarily exactly the same thing that would
-     *         be returned by {@link Object#hashCode()}.
-     */
-    public static String functionHash(Object target)
-    {
-        int hash = target.hashCode();
-        if (hash < 0) // flip exponent if negative
-            hash = hash*-1;
-        
-        return String.valueOf(hash);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/SizeRestrictingIterator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/SizeRestrictingIterator.java
deleted file mode 100644
index 7e45ce9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/SizeRestrictingIterator.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package org.apache.tapestry.util;
-
-import org.apache.hivemind.util.Defense;
-
-import java.util.Iterator;
-
-/**
- * <p>This class implements an {@link Iterator} which can only return a fixed
- * number of items.</p>
- *
- */
-public class SizeRestrictingIterator implements Iterator {
-
-    private static final int DEFAULT_MAX_SIZE = 20;
-
-    private final int _maxSize;
-    private final Iterator _iterator;
-    private int _currentIndex;
-
-    /**
-     * Constructs an Iterator which will return at most {@link #DEFAULT_MAX_SIZE} items.
-     *
-     * @param iterator
-     *          The underlying iterator this object will defer to for actual
-     *          iteration.
-     */
-    public SizeRestrictingIterator(Iterator iterator)
-    {
-        this(iterator, DEFAULT_MAX_SIZE);
-    }
-
-    /**
-     * Constructs an Iterator which will return at most as many
-     * items as defined by the user.
-     *
-     * @param iterator
-     *          The underlying iterator this object will defer to for actual
-     *          iteration.
-     * @param maxSize
-     *          How many items to return / filter the list by.
-     */
-    public SizeRestrictingIterator(Iterator iterator, int maxSize)
-    {
-        Defense.notNull(iterator, "Iterator source");
-        
-        _iterator = iterator;
-        _maxSize = maxSize;
-        
-        _currentIndex = 0;
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public boolean hasNext()
-    {
-        return _currentIndex < _maxSize && _iterator.hasNext();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Object next()
-    {
-        _currentIndex++;
-        return _iterator.next();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void remove()
-    {
-        _currentIndex--;
-        _iterator.remove();
-    }
-    
-    public String toString()
-    {
-        return "SizeRestrictingIterator[" +
-               "_maxSize=" + _maxSize +
-               '\n' +
-               ", _current=" + _currentIndex +
-               '\n' +
-               ", _iterator=" + _iterator +
-               '\n' +
-               ']';
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/Strftime.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/Strftime.java
deleted file mode 100644
index 9a89b66..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/Strftime.java
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * Copyright 2006 The Apache Software Foundation. Licensed under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with the License. You may obtain
- * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
- * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
- * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
- * for the specific language governing permissions and limitations under the License.
- */
-
-package org.apache.tapestry.util;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.TimeZone;
-
-/**
- * Converts dates to strings using the same format specifiers as strftime Note: This does not mimic
- * strftime perfectly. Certain strftime commands, are not supported, and will convert as if they
- * were literals. Certain complicated commands, like those dealing with the week of the year
- * probably don't have exactly the same behavior as strftime. These limitations are due to use
- * SimpleDateTime. If the conversion was done manually, all these limitations could be eliminated.
- * The interface looks like a subset of DateFormat. Maybe someday someone will make this class
- * extend DateFormat.
- * 
- * <p>
- * Added to tapestry in order to help with dojo/javascript date/time conversions.
- * </p>
- * 
- * @see "http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html"
- * @author Bip Thelin
- * @author Dan Sandberg
- */
-public class Strftime
-{
-
-    protected static Properties translate;
-    protected static Properties pTranslate;
-    protected SimpleDateFormat simpleDateFormat;
-
-    /**
-     * Initialize our pattern translation
-     */
-    static {
-        translate = new Properties();
-        translate.put("a", "EEE");
-        translate.put("A", "EEEE");
-        translate.put("b", "MMM");
-        translate.put("B", "MMMM");
-        translate.put("c", "EEE MMM d HH:mm:ss yyyy");
-
-        // There's no way to specify the century in SimpleDateFormat. We don't want to hard-code
-        // 20 since this could be wrong for the pre-2000 files.
-        // translate.put("C", "20");
-        translate.put("d", "dd");
-        translate.put("D", "MM/dd/yy");
-        translate.put("e", "dd"); // will show as '03' instead of ' 3'
-        translate.put("F", "yyyy-MM-dd");
-        translate.put("g", "yy");
-        translate.put("G", "yyyy");
-        translate.put("H", "HH");
-        translate.put("h", "MMM");
-        translate.put("I", "hh");
-        translate.put("j", "DDD");
-        translate.put("k", "HH"); // will show as '07' instead of ' 7'
-        translate.put("l", "hh"); // will show as '07' instead of ' 7'
-        translate.put("m", "MM");
-        translate.put("M", "mm");
-        translate.put("n", "\n");
-        translate.put("p", "a");
-        translate.put("P", "a"); // will show as pm instead of PM
-        translate.put("r", "hh:mm:ss a");
-        translate.put("R", "HH:mm");
-        // There's no way to specify this with SimpleDateFormat
-        // translate.put("s","seconds since ecpoch");
-        translate.put("S", "ss");
-        translate.put("t", "\t");
-        translate.put("T", "HH:mm:ss");
-        // There's no way to specify this with SimpleDateFormat
-        // translate.put("u","day of week ( 1-7 )");
-
-        // There's no way to specify this with SimpleDateFormat
-        // translate.put("U","week in year with first sunday as first day...");
-
-        translate.put("V", "ww"); // I'm not sure this is always exactly the same
-
-        // There's no way to specify this with SimpleDateFormat
-        // translate.put("W","week in year with first monday as first day...");
-
-        // There's no way to specify this with SimpleDateFormat
-        // translate.put("w","E");
-        translate.put("X", "HH:mm:ss");
-        translate.put("x", "MM/dd/yy");
-        translate.put("y", "yy");
-        translate.put("Y", "yyyy");
-        translate.put("Z", "z");
-        translate.put("z", "Z");
-        translate.put("%", "%");
-        
-        pTranslate = new Properties();
-        pTranslate.put("EEE", "%a");
-        pTranslate.put("EEEE", "%A");
-        pTranslate.put("MMM", "%b");
-        pTranslate.put("MMMM", "%B");
-        pTranslate.put("EEE MMM d HH:mm:ss yyyy", "%c");
-
-        // There's no way to specify the century in SimpleDateFormat. We don't want to hard-code
-        // 20 since this could be wrong for the pre-2000 files.
-        // translate.put("C", "20");
-        pTranslate.put("dd", "%d");
-        pTranslate.put("MM/dd/yy", "%D");
-        pTranslate.put("yyyy-MM-dd", "%F");
-        pTranslate.put("yy", "%g");
-        pTranslate.put("yyyy", "%G");
-        pTranslate.put("HH", "%H");
-        pTranslate.put("MMM", "%h");
-        pTranslate.put("hh", "%I");
-        pTranslate.put("DDD", "%j");
-        pTranslate.put("MM", "%m");
-        pTranslate.put("mm", "%M");
-        pTranslate.put("\n", "%n");
-        pTranslate.put("a", "%p"); // will show as pm instead of PM
-        pTranslate.put("hh:mm:ss a", "%r");
-        pTranslate.put("HH:mm", "%R");
-        // There's no way to specify this with SimpleDateFormat
-        // translate.put("s","seconds since ecpoch");
-        pTranslate.put("ss", "%S");
-        pTranslate.put("\t", "%t");
-        pTranslate.put("HH:mm:ss", "%T");
-        // There's no way to specify this with SimpleDateFormat
-        // translate.put("u","day of week ( 1-7 )");
-
-        // There's no way to specify this with SimpleDateFormat
-        // translate.put("U","week in year with first sunday as first day...");
-
-        pTranslate.put("ww", "%V"); // I'm not sure this is always exactly the same
-
-        // There's no way to specify this with SimpleDateFormat
-        // translate.put("W","week in year with first monday as first day...");
-
-        // There's no way to specify this with SimpleDateFormat
-        // translate.put("w","E");
-        pTranslate.put("HH:mm:ss", "%X");
-        pTranslate.put("MM/dd/yy", "%x");
-        pTranslate.put("yy", "%y");
-        pTranslate.put("yyyy", "%Y");
-        pTranslate.put("z", "%Z");
-        pTranslate.put("Z", "%z");
-        pTranslate.put("%", "%");
-    }
-
-    /**
-     * Create an instance of this date formatting class.
-     * 
-     * @see #Strftime( String, Locale )
-     */
-    public Strftime(String origFormat)
-    {
-        String convertedFormat = convertDateFormat(origFormat);
-        simpleDateFormat = new SimpleDateFormat(convertedFormat);
-    }
-
-    /**
-     * Create an instance of this date formatting class.
-     * 
-     * @param origFormat
-     *            the strftime-style formatting string
-     * @param locale
-     *            the locale to use for locale-specific conversions
-     */
-    public Strftime(String origFormat, Locale locale)
-    {
-        String convertedFormat = convertDateFormat(origFormat);
-        simpleDateFormat = new SimpleDateFormat(convertedFormat, locale);
-    }
-
-    /**
-     * Format the date according to the strftime-style string given in the constructor.
-     * 
-     * @param date
-     *            the date to format
-     * @return the formatted date
-     */
-    public String format(Date date)
-    {
-        return simpleDateFormat.format(date);
-    }
-
-    /**
-     * Parses the input. 
-     * 
-     * @see java.text.SimpleDateFormat#parse(String)
-     * @param input The string to parse.
-     * @return A parsed {@link Date}.
-     * @throws ParseException On input error.
-     */
-    public Date parse(String input)
-    throws ParseException
-    {
-        return simpleDateFormat.parse(input);
-    }
-    
-    /**
-     * Get the timezone used for formatting conversions.
-     * 
-     * @return the timezone
-     */
-    public TimeZone getTimeZone()
-    {
-        return simpleDateFormat.getTimeZone();
-    }
-
-    /**
-     * Change the timezone used to format dates.
-     * 
-     * @see SimpleDateFormat#setTimeZone(TimeZone)
-     */
-    public void setTimeZone(TimeZone timeZone)
-    {
-        simpleDateFormat.setTimeZone(timeZone);
-    }
-    
-    /**
-     * Does the exact opposite of {{@link #convertDateFormat(String)} by converting
-     * the incoming java date format string into a POSIX compliant format string.
-     * @param pattern The java date format style format
-     * @return The converted format into something usable by POSIX strftime style parser/formatters.
-     */
-    public static String convertToPosixFormat(String pattern)
-    {
-        if (pattern == null) return null;
-        
-        StringBuffer buf = new StringBuffer();
-        int start=-1;
-        
-        for(int i = 0; i < pattern.length(); i++) {
-            char c = pattern.charAt(i);
-            
-            // if in a definition
-            if (Character.isLetter(c)) {
-                if (start <= -1) start = i;
-                continue;
-            } else if (start >= 0) {
-                // we've hit the end of a definition
-                String conv = pattern.substring(start, i);
-                String match = pTranslate.getProperty(conv);
-                
-                if (match == null)
-                    buf.append(conv); // just append it, this shouldn't happen we hope
-                else
-                    buf.append(match);
-                
-                // reset
-                start=-1;
-            }
-            
-            buf.append(c);
-        }
-        
-        // grab last one, if any
-        if (start > -1) {
-            String conv = pattern.substring(start, pattern.length());
-            String match = pTranslate.getProperty(conv);
-            if (match == null) buf.append(conv);
-            else buf.append(match);
-        }
-        
-        return buf.toString();
-    }
-    
-    /**
-     * Search the provided pattern and get the C standard Date/Time formatting rules and convert
-     * them to the Java equivalent.
-     * 
-     * @param pattern
-     *            The pattern to search
-     * @return The modified pattern
-     */
-    public static String convertDateFormat(String pattern)
-    {
-        boolean inside = false;
-        boolean mark = false;
-        boolean modifiedCommand = false;
-        
-        StringBuffer buf = new StringBuffer();
-        
-        for(int i = 0; i < pattern.length(); i++) {
-            char c = pattern.charAt(i);
-
-            if (c == '%' && !mark) {
-                mark = true;
-            } else {
-                if (mark) {
-                    if (modifiedCommand) {
-                        // don't do anything--we just wanted to skip a char
-                        modifiedCommand = false;
-                        mark = false;
-                    } else {
-                        inside = translateCommand(buf, pattern, i, inside);
-                        // It's a modifier code
-                        if (c == 'O' || c == 'E') {
-                            modifiedCommand = true;
-                        } else {
-                            mark = false;
-                        }
-                    }
-                } else {
-                    if (!inside && c != ' ') {
-                        // We start a literal, which we need to quote
-                        buf.append("'");
-                        inside = true;
-                    }
-
-                    buf.append(c);
-                }
-            }
-        }
-
-        if (buf.length() > 0) {
-            char lastChar = buf.charAt(buf.length() - 1);
-
-            if (lastChar != '\'' && inside) {
-                buf.append('\'');
-            }
-        }
-        return buf.toString();
-    }
-
-    private static String quote(String str, boolean insideQuotes)
-    {
-        String retVal = str;
-        if (!insideQuotes) {
-            retVal = '\'' + retVal + '\'';
-        }
-        return retVal;
-    }
-
-    /**
-     * try to get the Java Date/Time formating associated with the C standard provided.
-     * 
-     * @param c
-     *            The C equivalent to translate
-     * @return The Java formatting rule to use
-     */
-    private static boolean translateCommand(StringBuffer buf, String pattern, int index,
-            boolean oldInside)
-    {
-        char firstChar = pattern.charAt(index);
-        boolean newInside = oldInside;
-
-        // O and E are modifiers, they mean to present an alternative representation of the next
-        // char
-        // we just handle the next char as if the O or E wasn't there
-        if (firstChar == 'O' || firstChar == 'E') {
-            if (index + 1 < pattern.length()) {
-                newInside = translateCommand(buf, pattern, index + 1, oldInside);
-            } else {
-                buf.append(quote("%" + firstChar, oldInside));
-            }
-        } else {
-            String command = translate.getProperty(String.valueOf(firstChar));
-
-            // If we don't find a format, treat it as a literal--That's what apache does
-            if (command == null) {
-                buf.append(quote("%" + firstChar, oldInside));
-            } else {
-                // If we were inside quotes, close the quotes
-                if (oldInside) {
-                    buf.append('\'');
-                }
-                buf.append(command);
-                newInside = false;
-            }
-        }
-        return newInside;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/StringSplitter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/StringSplitter.java
deleted file mode 100644
index 8c90ae4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/StringSplitter.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-/**
- * Used to split a string into substrings based on a single character delimiter.
- * A fast, simple version of {@link java.util.StringTokenizer}.
- * 
- * @author Howard Lewis Ship
- */
-
-public class StringSplitter
-{
-
-    private char _delimiter;
-
-    public StringSplitter(char delimiter)
-    {
-        this._delimiter = delimiter;
-    }
-
-    public char getDelimiter()
-    {
-        return _delimiter;
-    }
-
-    /**
-     * Splits a string on the delimter into an array of String tokens. The
-     * delimiters are not included in the tokens. Null tokens (caused by two
-     * consecutive delimiter) are reduced to an empty string. Leading delimiters
-     * are ignored.
-     */
-
-    public String[] splitToArray(String value)
-    {
-        char[] buffer;
-        int i;
-        String[] result;
-        int resultCount = 0;
-        int start;
-        int length;
-        String token;
-        String[] newResult;
-        boolean first = true;
-
-        buffer = value.toCharArray();
-
-        result = new String[3];
-
-        start = 0;
-        length = 0;
-
-        for(i = 0; i < buffer.length; i++)
-        {
-            if (buffer[i] != _delimiter)
-            {
-                length++;
-                continue;
-            }
-
-            // This is used to ignore leading delimiter(s).
-
-            if (length > 0 || !first)
-            {
-                token = new String(buffer, start, length);
-
-                if (resultCount == result.length)
-                {
-                    newResult = new String[result.length * 2];
-
-                    System.arraycopy(result, 0, newResult, 0, result.length);
-
-                    result = newResult;
-                }
-
-                result[resultCount++] = token;
-
-                first = false;
-            }
-
-            start = i + 1;
-            length = 0;
-        }
-
-        // Special case: if the string contains no delimiters
-        // then it isn't really split. Wrap the input string
-        // in an array and return. This is a little optimization
-        // to prevent a new String instance from being
-        // created unnecessarily.
-
-        if (start == 0 && length == buffer.length)
-        {
-            result = new String[1];
-            result[0] = value;
-            return result;
-        }
-
-        // If the string is all delimiters, then this
-        // will result in a single empty token.
-
-        token = new String(buffer, start, length);
-
-        newResult = new String[resultCount + 1];
-        System.arraycopy(result, 0, newResult, 0, resultCount);
-        newResult[resultCount] = token;
-
-        return newResult;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/SystemPropertiesPropertySource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/SystemPropertiesPropertySource.java
deleted file mode 100644
index e3729ae..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/SystemPropertiesPropertySource.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- *  Obtain properties from JVM system properties.
- * 
- *
- *  @author Howard Lewis Ship
- *  @since 2.3
- *
- **/
-
-public class SystemPropertiesPropertySource implements IPropertySource
-{
-    private static IPropertySource _shared;
-    
-    public static synchronized IPropertySource getInstance()
-    {
-        if (_shared == null)
-            _shared = new SystemPropertiesPropertySource();
-            
-        return _shared; 
-    }
-
-    /**
-     *  Delegates to {@link System#getProperty(java.lang.String)}.
-     * 
-     **/
-    
-    public String getPropertyValue(String propertyName)
-    {
-        return System.getProperty(propertyName);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/UtilMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/UtilMessages.java
deleted file mode 100644
index bbc637d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/UtilMessages.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.util;

-

-import org.apache.hivemind.impl.MessageFormatter;

-

-/**

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-final class UtilMessages

-{

-    private static final MessageFormatter _formatter = new MessageFormatter(UtilMessages.class);

-

-    /* defeat instantiation */

-    private UtilMessages() { }

-    

-    static String valueNotFound(Object value)

-    {

-        return _formatter.format("value-not-found", value);

-    }

-

-    static String keyAlreadyExists(Object key)

-    {

-        return _formatter.format("key-already-exists", key);

-    }

-}

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/UtilStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/UtilStrings.properties
deleted file mode 100644
index ea57355..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/UtilStrings.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-value-not-found=Value {0} not found.

-key-already-exists=Key ''{0}'' already exists in this primary key converter.

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/ExceptionAnalyzer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/ExceptionAnalyzer.java
deleted file mode 100644
index eccd8b9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/ExceptionAnalyzer.java
+++ /dev/null
@@ -1,410 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.exception;
-
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.io.CharArrayWriter;
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Analyzes an exception, creating one or more {@link ExceptionDescription}s from it.
- * 
- * @author Howard Lewis Ship
- */
-
-public class ExceptionAnalyzer
-{
-    private static final int SKIP_LEADING_WHITESPACE = 0;
-
-    private static final int SKIP_T = 1;
-
-    private static final int SKIP_OTHER_WHITESPACE = 2;
-    
-    private final List exceptionDescriptions = new ArrayList();
-
-    private final List propertyDescriptions = new ArrayList();
-
-    private final CharArrayWriter writer = new CharArrayWriter();
-
-    private boolean exhaustive = false;
-
-    /**
-     * If true, then stack trace is extracted for each exception. If false, the default, then stack
-     * trace is extracted for only the deepest exception.
-     */
-
-    public boolean isExhaustive()
-    {
-        return exhaustive;
-    }
-
-    public void setExhaustive(boolean value)
-    {
-        exhaustive = value;
-    }
-
-    /**
-     * Analyzes the exceptions. This builds an {@link ExceptionDescription}for the exception. It
-     * also looks for a non-null {@link Throwable}property. If one exists, then a second
-     * {@link ExceptionDescription}is created. This continues until no more nested exceptions can
-     * be found.
-     * <p>
-     * The description includes a set of name/value properties (as {@link ExceptionProperty})
-     * object. This list contains all non-null properties that are not, themselves,
-     * {@link Throwable}.
-     * <p>
-     * The name is the display name (not the logical name) of the property. The value is the
-     * <code>toString()</code> value of the property. Only properties defined in subclasses of
-     * {@link Throwable}are included.
-     * <p>
-     * A future enhancement will be to alphabetically sort the properties by name.
-     */
-
-    public ExceptionDescription[] analyze(Throwable exception)
-    {
-        Throwable thrown = exception;
-        try
-        {
-
-            while (thrown != null)
-            {
-                thrown = buildDescription(thrown);
-            }
-
-            ExceptionDescription[] result = new ExceptionDescription[exceptionDescriptions.size()];
-
-            return (ExceptionDescription[]) exceptionDescriptions.toArray(result);
-        }
-        finally
-        {
-            exceptionDescriptions.clear();
-            propertyDescriptions.clear();
-
-            writer.reset();
-        }
-    }
-
-    protected Throwable buildDescription(Throwable exception)
-    {
-        BeanInfo info;
-        Class exceptionClass;
-        ExceptionProperty property;
-        PropertyDescriptor[] descriptors;
-        PropertyDescriptor descriptor;
-        Throwable next = null;
-        int i;
-        Object value;
-        Method method;
-        ExceptionProperty[] properties;
-        ExceptionDescription description;
-        String stringValue;
-        String message;
-        String[] stackTrace = null;
-
-        propertyDescriptions.clear();
-
-        message = exception.getMessage();
-        exceptionClass = exception.getClass();
-
-        // Get properties, ignoring those in Throwable and higher
-        // (including the 'message' property).
-
-        try
-        {
-            info = Introspector.getBeanInfo(exceptionClass, Throwable.class);
-        }
-        catch (IntrospectionException e)
-        {
-            return null;
-        }
-
-        descriptors = info.getPropertyDescriptors();
-
-        for (i = 0; i < descriptors.length; i++)
-        {
-            descriptor = descriptors[i];
-
-            method = descriptor.getReadMethod();
-            if (method == null)
-                continue;
-
-            try
-            {
-                value = method.invoke(exception, null);
-            }
-            catch (Exception e)
-            {
-                continue;
-            }
-
-            if (value == null)
-                continue;
-
-            // Some annoying exceptions duplicate the message property
-            // (I'm talking to YOU SAXParseException), so just edit that out.
-
-            if (message != null && message.equals(value))
-                continue;
-
-            // Skip Throwables ... but the first non-null found is the next 
-            // exception (unless it refers to the current one - some 3rd party
-            // libaries do this). We kind of count on there being no more 
-            // than one Throwable property per Exception.
-
-            if (value instanceof Throwable)
-            {
-                if (next == null && value != exception)
-                    next = (Throwable) value;
-
-                continue;
-            }
-
-            stringValue = value.toString().trim();
-
-            if (stringValue.length() == 0)
-                continue;
-
-            property = new ExceptionProperty(descriptor.getDisplayName(), value);
-
-            propertyDescriptions.add(property);
-        }
-
-        // If exhaustive, or in the deepest exception (where there's no next)
-        // the extract the stack trace.
-
-        if (next == null || exhaustive)
-            stackTrace = getStackTrace(exception);
-
-        // Would be nice to sort the properties here.
-
-        properties = new ExceptionProperty[propertyDescriptions.size()];
-
-        ExceptionProperty[] propArray = (ExceptionProperty[]) propertyDescriptions
-                .toArray(properties);
-
-        description = new ExceptionDescription(exceptionClass.getName(), message, propArray,
-                stackTrace);
-
-        exceptionDescriptions.add(description);
-
-        return next;
-    }
-
-    /**
-     * Gets the stack trace for the exception, and converts it into an array of strings.
-     * <p>
-     * This involves parsing the string generated indirectly from
-     * <code>Throwable.printStackTrace(PrintWriter)</code>. This method can get confused if the
-     * message (presumably, the first line emitted by printStackTrace()) spans multiple lines.
-     * <p>
-     * Different JVMs format the exception in different ways.
-     * <p>
-     * A possible expansion would be more flexibility in defining the pattern used. Hopefully all
-     * 'mainstream' JVMs are close enough for this to continue working.
-     */
-
-    protected String[] getStackTrace(Throwable exception)
-    {
-        writer.reset();
-
-        PrintWriter printWriter = new PrintWriter(writer);
-
-        exception.printStackTrace(printWriter);
-
-        printWriter.close();
-
-        String fullTrace = writer.toString();
-
-        writer.reset();
-
-        // OK, the trick is to convert the full trace into an array of stack frames.
-
-        StringReader stringReader = new StringReader(fullTrace);
-        LineNumberReader lineReader = new LineNumberReader(stringReader);
-        int lineNumber = 0;
-        List frames = new ArrayList();
-
-        try
-        {
-            while (true)
-            {
-                String line = lineReader.readLine();
-
-                if (line == null)
-                    break;
-
-                // Always ignore the first line.
-
-                if (++lineNumber == 1)
-                    continue;
-
-                frames.add(stripFrame(line));
-            }
-
-            lineReader.close();
-        }
-        catch (IOException ex)
-        {
-            // Not likely to happen with this particular set
-            // of readers.
-        }
-
-        String[] result = new String[frames.size()];
-
-        return (String[]) frames.toArray(result);
-    }
-
-    /**
-     * Sun's JVM prefixes each line in the stack trace with " <tab>at</tab> ", other JVMs don't. This
-     * method looks for and strips such stuff.
-     */
-
-    private String stripFrame(String frame)
-    {
-        char[] array = frame.toCharArray();
-
-        int i = 0;
-        int state = SKIP_LEADING_WHITESPACE;
-        boolean more = true;
-
-        while (more)
-        {
-            // Ran out of characters to skip? Return the empty string.
-
-            if (i == array.length)
-                return "";
-
-            char ch = array[i];
-
-            switch (state)
-            {
-                // Ignore whitespace at the start of the line.
-
-                case SKIP_LEADING_WHITESPACE:
-
-                    if (Character.isWhitespace(ch))
-                    {
-                        i++;
-                        continue;
-                    }
-
-                    if (ch == 'a')
-                    {
-                        state = SKIP_T;
-                        i++;
-                        continue;
-                    }
-
-                    // Found non-whitespace, not 'a'
-                    more = false;
-                    break;
-
-                // Skip over the 't' after an 'a'
-
-                case SKIP_T:
-
-                    if (ch == 't')
-                    {
-                        state = SKIP_OTHER_WHITESPACE;
-                        i++;
-                        continue;
-                    }
-
-                    // Back out the skipped-over 'a'
-
-                    i--;
-                    more = false;
-                    break;
-
-                // Skip whitespace between 'at' and the name of the class
-
-                case SKIP_OTHER_WHITESPACE:
-
-                    if (Character.isWhitespace(ch))
-                    {
-                        i++;
-                        continue;
-                    }
-
-                    // Not whitespace
-                    more = false;
-                    break;
-            }
-
-        }
-
-        // Found nothing to strip out.
-
-        if (i == 0)
-            return frame;
-
-        return frame.substring(i);
-    }
-
-    /**
-     * Produces a text based exception report to the provided stream.
-     */
-
-    public void reportException(Throwable exception, PrintStream stream)
-    {
-        int i;
-        int j;
-        ExceptionDescription[] descriptions;
-        ExceptionProperty[] properties;
-        String[] stackTrace;
-        String message;
-
-        descriptions = analyze(exception);
-
-        for (i = 0; i < descriptions.length; i++)
-        {
-            message = descriptions[i].getMessage();
-
-            if (message == null)
-                stream.println(descriptions[i].getExceptionClassName());
-            else
-                stream.println(descriptions[i].getExceptionClassName() + ": "
-                        + descriptions[i].getMessage());
-
-            properties = descriptions[i].getProperties();
-
-            for (j = 0; j < properties.length; j++)
-                stream.println("   " + properties[j].getName() + ": " + properties[j].getValue());
-
-            // Just show the stack trace on the deepest exception.
-
-            if (i + 1 == descriptions.length)
-            {
-                stackTrace = descriptions[i].getStackTrace();
-
-                for (j = 0; j < stackTrace.length; j++)
-                    stream.println(stackTrace[j]);
-            }
-            else
-                stream.println();
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/ExceptionDescription.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/ExceptionDescription.java
deleted file mode 100644
index 12adec9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/ExceptionDescription.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.exception;
-
-import java.io.Serializable;
-
-/**
- * A description of an <code>Exception</code>. This is useful when presenting
- * an exception (in output or on a web page).
- * <p>
- * We capture all the information about an exception as Strings.
- * 
- * @author Howard Lewis Ship
- */
-
-public class ExceptionDescription implements Serializable
-{
-
-    /**
-     * @since 2.0.4
-     */
-
-    private static final long serialVersionUID = -4874930784340781514L;
-
-    private String _exceptionClassName;
-    private String _message;
-    private ExceptionProperty[] _properties;
-    private String[] _stackTrace;
-
-    public ExceptionDescription(String exceptionClassName, String message,
-            ExceptionProperty[] properties, String[] stackTrace)
-    {
-        this._exceptionClassName = exceptionClassName;
-        this._message = message;
-        this._properties = properties;
-        this._stackTrace = stackTrace;
-    }
-
-    public String getExceptionClassName()
-    {
-        return _exceptionClassName;
-    }
-
-    public String getMessage()
-    {
-        return _message;
-    }
-
-    public ExceptionProperty[] getProperties()
-    {
-        return _properties;
-    }
-
-    public String[] getStackTrace()
-    {
-        return _stackTrace;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/ExceptionProperty.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/ExceptionProperty.java
deleted file mode 100644
index f75cffb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/ExceptionProperty.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.exception;
-
-import java.io.Serializable;
-
-/**
- * Captures a name/value property pair from an exception. Part of an
- * {@link ExceptionDescription}.
- * 
- * @author Howard Lewis Ship
- */
-
-public class ExceptionProperty implements Serializable
-{
-
-    private static final long serialVersionUID = 5260773289683550374L;
-
-    /**
-     * @since 2.0.4
-     */
-
-    private String _name;
-
-    private Object _value;
-
-    public ExceptionProperty(String name, Object value)
-    {
-        this._name = name;
-        this._value = value;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public Object getValue()
-    {
-        return _value;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/package.html
deleted file mode 100644
index 43e96ef..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/exception/package.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>A basic framework for analyzing a reporting exceptions.  The 
-{@link org.apache.tapestry.util.exception.ExceptionAnalyzer} class will identify
-the type, message and other properties of an exception, and understands about nested
-exceptions.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/BinaryDumpOutputStream.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/BinaryDumpOutputStream.java
deleted file mode 100644
index ed7143d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/BinaryDumpOutputStream.java
+++ /dev/null
@@ -1,316 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.Writer;
-
-/**
- * A kind of super-formatter. It is sent a stream of binary data and formats it in a human-readable
- * dump format which is forwarded to its output stream.
- * <p>
- * Currently, output is in hex though options to change that may be introduced.
- * 
- * @author Howard Lewis Ship
- */
-
-public class BinaryDumpOutputStream extends OutputStream
-{
-    private static final char[] HEX =
-    { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
-
-    private PrintWriter _out;
-
-    private boolean locked = false;
-
-    private boolean _showOffset = true;
-
-    private int bytesPerLine = 16;
-
-    private int _spacingInterval = 4;
-
-    private char substituteChar = '.';
-
-    private String offsetSeperator = ": ";
-
-    private int offset = 0;
-
-    private int lineCount = 0;
-
-    private int bytesSinceSpace = 0;
-
-    private char[] ascii = null;
-
-    private boolean showAscii = true;
-
-    private String asciiBegin = "  |";
-
-    private String asciiEnd = "|";
-
-    /**
-     * Creates a <code>PrintWriter</code> for <code>System.out</code>.
-     */
-
-    public BinaryDumpOutputStream()
-    {
-        this(new PrintWriter(System.out, true));
-    }
-
-    public BinaryDumpOutputStream(PrintWriter out)
-    {
-        this._out = out;
-    }
-
-    public BinaryDumpOutputStream(Writer out)
-    {
-        this._out = new PrintWriter(out);
-    }
-
-    public void close() throws IOException
-    {
-        if (_out != null)
-        {
-            if (lineCount > 0)
-                finishFinalLine();
-
-            _out.close();
-        }
-
-        _out = null;
-    }
-
-    private void finishFinalLine()
-    {
-        // Since we only finish the final line after at least one byte has
-        // been written to it, we don't need to worry about
-        // the offset.
-
-        while (lineCount < bytesPerLine)
-        {
-            // After every <n> bytes, emit a space.
-
-            if (_spacingInterval > 0 && bytesSinceSpace == _spacingInterval)
-            {
-                _out.print(' ');
-                bytesSinceSpace = 0;
-            }
-
-            // Two spaces to substitute for the two hex digits.
-
-            _out.print("  ");
-
-            if (showAscii)
-                ascii[lineCount] = ' ';
-
-            lineCount++;
-            bytesSinceSpace++;
-        }
-
-        if (showAscii)
-        {
-            _out.print(asciiBegin);
-            _out.print(ascii);
-            _out.print(asciiEnd);
-        }
-
-        _out.println();
-    }
-
-    /**
-     * Forwards the <code>flush()</code> to the <code>PrintWriter</code>.
-     */
-
-    public void flush() throws IOException
-    {
-        _out.flush();
-    }
-
-    public String getAsciiBegin()
-    {
-        return asciiBegin;
-    }
-
-    public String getAsciiEnd()
-    {
-        return asciiEnd;
-    }
-
-    public int getBytesPerLine()
-    {
-        return bytesPerLine;
-    }
-
-    public String getOffsetSeperator()
-    {
-        return offsetSeperator;
-    }
-
-    public boolean getShowAscii()
-    {
-        return showAscii;
-    }
-
-    public char getSubstituteChar()
-    {
-        return substituteChar;
-    }
-
-    public void setAsciiBegin(String value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        asciiBegin = value;
-    }
-
-    public void setAsciiEnd(String value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        asciiEnd = value;
-    }
-
-    public void setBytesPerLine(int value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        bytesPerLine = value;
-
-        ascii = null;
-    }
-
-    public void setOffsetSeperator(String value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        offsetSeperator = value;
-    }
-
-    public void setShowAscii(boolean value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        showAscii = value;
-    }
-
-    /**
-     * Sets the character used in the ASCII dump that substitutes for characters outside the range
-     * of 32..126.
-     */
-
-    public void setSubstituteChar(char value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        substituteChar = value;
-    }
-
-    public void write(int b) throws IOException
-    {
-        char letter;
-
-        if (showAscii && ascii == null)
-            ascii = new char[bytesPerLine];
-
-        // Prevent further customization after output starts being written.
-
-        locked = true;
-
-        if (lineCount == bytesPerLine)
-        {
-            if (showAscii)
-            {
-                _out.print(asciiBegin);
-                _out.print(ascii);
-                _out.print(asciiEnd);
-            }
-
-            _out.println();
-
-            bytesSinceSpace = 0;
-            lineCount = 0;
-            offset += bytesPerLine;
-        }
-
-        if (lineCount == 0 && _showOffset)
-        {
-            writeHex(offset, 4);
-            _out.print(offsetSeperator);
-        }
-
-        // After every <n> bytes, emit a space.
-
-        if (_spacingInterval > 0 && bytesSinceSpace == _spacingInterval)
-        {
-            _out.print(' ');
-            bytesSinceSpace = 0;
-        }
-
-        writeHex(b, 2);
-
-        if (showAscii)
-        {
-            if (b < 32 | b > 127)
-                letter = substituteChar;
-            else
-                letter = (char) b;
-
-            ascii[lineCount] = letter;
-        }
-
-        lineCount++;
-        bytesSinceSpace++;
-    }
-
-    private void writeHex(int value, int digits)
-    {
-        int i;
-        int nybble;
-
-        for (i = 0; i < digits; i++)
-        {
-            nybble = (value >> 4 * (digits - i - 1)) & 0x0f;
-
-            _out.print(HEX[nybble]);
-        }
-    }
-
-    public void setSpacingInterval(int spacingInterval)
-    {
-        this._spacingInterval = spacingInterval;
-    }
-
-    public boolean isShowOffset()
-    {
-        return _showOffset;
-    }
-
-    public void setShowOffset(boolean showOffset)
-    {
-        this._showOffset = showOffset;
-    }
-
-    public int getSpacingInterval()
-    {
-        return _spacingInterval;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/BooleanAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/BooleanAdaptor.java
deleted file mode 100644
index a8265ae..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/BooleanAdaptor.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Squeezes a {@link Boolean}.
- * 
- * @author Howard Lewis Ship
- */
-
-public class BooleanAdaptor implements SqueezeAdaptor
-{
-    private static final String PREFIX = "TF";
-
-    public String getPrefix()
-    {
-        return PREFIX;
-    }
-
-    public Class getDataClass()
-    {
-        return Boolean.class;
-    }
-
-    /**
-     * Squeezes the {@link Boolean}data to either 'T' or 'F'.
-     */
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        Boolean bool = (Boolean) data;
-
-        return bool.booleanValue() ? "T" : "F";
-    }
-
-    /**
-     * Unsqueezes the string to either {@link Boolean#TRUE}or {@link Boolean#FALSE}, depending on
-     * the prefix character.
-     */
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        char ch = string.charAt(0);
-
-        if (ch == 'T')
-            return Boolean.TRUE;
-
-        return Boolean.FALSE;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ByteAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ByteAdaptor.java
deleted file mode 100644
index 03b84e3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ByteAdaptor.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Squeezes a {@link Byte}.
- * 
- * @author Howard Lewis Ship
- */
-
-public class ByteAdaptor implements SqueezeAdaptor
-{
-    private static final String PREFIX = "b";
-
-    public String getPrefix()
-    {
-        return PREFIX;
-    }
-
-    public Class getDataClass()
-    {
-        return Byte.class;
-    }
-
-    /**
-     * Invoked <code>toString()</code> on data (which is type {@link Byte}), and prefixs the
-     * result.
-     */
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return PREFIX + data.toString();
-    }
-
-    /**
-     * Constructs an {@link Byte} from the string, after stripping the prefix.
-     */
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Byte(string.substring(1));
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/CharacterAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/CharacterAdaptor.java
deleted file mode 100644
index 4284ceb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/CharacterAdaptor.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Squeezes a Character.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class CharacterAdaptor implements SqueezeAdaptor
-{
-    private static final String PREFIX = "c";
-
-    private static final char PREFIX_CH = 'c';
-
-    public String getPrefix()
-    {
-        return PREFIX;
-    }
-
-    public Class getDataClass()
-    {
-        return Character.class;
-    }
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        Character charData = (Character) data;
-        char value = charData.charValue();
-
-        char[] buffer = new char[]
-        { PREFIX_CH, value };
-
-        return new String(buffer);
-    }
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Character(string.charAt(1));
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ComponentAddressAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ComponentAddressAdaptor.java
deleted file mode 100644
index f1d3712..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ComponentAddressAdaptor.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.DataSqueezer;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * Squeezes a org.apache.tapestry.ComponentAddress.
- * 
- * @author mindbridge
- * @since 2.2
- */
-
-public class ComponentAddressAdaptor implements SqueezeAdaptor
-{
-    private static final String PREFIX = "A";
-
-    private static final char SEPARATOR = ',';
-
-    public String getPrefix()
-    {
-        return PREFIX;
-    }
-
-    public Class getDataClass()
-    {
-        return ComponentAddress.class;
-    }
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        ComponentAddress address = (ComponentAddress) data;
-
-        // a 'null' id path is encoded as an empty string
-        String idPath = address.getIdPath();
-        if (idPath == null)
-            idPath = "";
-
-        return PREFIX + address.getPageName() + SEPARATOR + idPath;
-    }
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        int separator = string.indexOf(SEPARATOR);
-        if (separator < 0)
-            throw new ApplicationRuntimeException(Tapestry
-                    .getMessage("ComponentAddressAdaptor.no-separator"));
-
-        String pageName = string.substring(1, separator);
-        String idPath = string.substring(separator + 1);
-        if (idPath.equals(""))
-            idPath = null;
-
-        return new ComponentAddress(pageName, idPath);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/DataSqueezerImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/DataSqueezerImpl.java
deleted file mode 100644
index 2c89e31..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/DataSqueezerImpl.java
+++ /dev/null
@@ -1,217 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.hivemind.lib.util.StrategyRegistry;
-import org.apache.hivemind.lib.util.StrategyRegistryImpl;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.DataSqueezer;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * A class used to convert arbitrary objects to Strings and back. This has particular uses involving
- * HTTP URLs and Cookies.
- * 
- * @author Howard Lewis Ship
- */
-
-public class DataSqueezerImpl implements DataSqueezer
-{
-    protected static final String NULL_PREFIX = "X";
-
-    protected static final int ARRAY_SIZE = 90;
-
-    protected static final int FIRST_ADAPTOR_OFFSET = 33;
-
-    /**
-     * An array of adaptors; this is used as a cheap lookup-table when unsqueezing. Each adaptor is
-     * identified by a single ASCII character, in the range of 33 ('!') to 122 (the letter 'z'). The
-     * offset into this table is the character minus 33.
-     */
-
-    protected SqueezeAdaptor[] _adaptorByPrefix = new SqueezeAdaptor[ARRAY_SIZE];
-
-    /**
-     * AdaptorRegistry cache of adaptors.
-     */
-
-    protected StrategyRegistry _adaptors = new StrategyRegistryImpl();
-
-    public void setSqueezeAdaptors(List adaptors)
-    {
-        Iterator i = adaptors.iterator();
-
-        while (i.hasNext())
-        {
-            SqueezeAdaptor adaptor = (SqueezeAdaptor) i.next();
-            register(adaptor);
-        }
-    }
-
-    /**
-     * Registers the adaptor with one or more single-character prefixes.
-     * <p>
-     * <b>Note</b>: This method should be used for testing purposes only! Squeeze adaptors are
-     * normally injected by HiveMind.
-     * 
-     * @param adaptor
-     *            the adaptor which to be registered.
-     */
-
-    public synchronized void register(SqueezeAdaptor adaptor)
-    {
-        if (adaptor == null)
-            throw new IllegalArgumentException(Tapestry.getMessage("DataSqueezer.null-adaptor"));
-
-        String prefix = adaptor.getPrefix();
-        int prefixLength = prefix.length();
-        int offset;
-
-        if (prefixLength < 1)
-            throw new IllegalArgumentException(Tapestry.getMessage("DataSqueezer.short-prefix"));
-
-        Class dataClass = adaptor.getDataClass();
-        if (dataClass == null)
-            throw new IllegalArgumentException(Tapestry.getMessage("DataSqueezer.null-class"));
-
-        for (int i = 0; i < prefixLength; i++)
-        {
-            char ch = prefix.charAt(i);
-
-            if (ch < '!' | ch > 'z')
-                throw new IllegalArgumentException(Tapestry
-                        .getMessage("DataSqueezer.prefix-out-of-range"));
-
-            offset = ch - FIRST_ADAPTOR_OFFSET;
-
-            if (_adaptorByPrefix[offset] != null)
-                throw new IllegalArgumentException(Tapestry.format(
-                        "DataSqueezer.adaptor-prefix-taken",
-                        prefix.substring(i, i)));
-
-            _adaptorByPrefix[offset] = adaptor;
-
-        }
-
-        _adaptors.register(dataClass, adaptor);
-    }
-
-    /**
-     * Squeezes the data object into a String by locating an appropriate adaptor that can perform
-     * the conversion. data may be null.
-     */
-
-    public String squeeze(Object data)
-    {
-        SqueezeAdaptor adaptor;
-
-        if (data == null)
-            return NULL_PREFIX;
-
-        adaptor = (SqueezeAdaptor) _adaptors.getStrategy(data.getClass());
-
-        return adaptor.squeeze(this, data);
-    }
-
-    /**
-     * A convience; invokes {@link #squeeze(Object)}for each element in the data array. If data is
-     * null, returns null.
-     */
-
-    public String[] squeeze(Object[] data)
-    {
-        if (data == null)
-            return null;
-
-        int length = data.length;
-        String[] result;
-
-        result = new String[length];
-
-        for (int i = 0; i < length; i++)
-            result[i] = squeeze(data[i]);
-
-        return result;
-    }
-
-    /**
-     * Unsqueezes the string. Note that in a special case, where the first character of the string
-     * is not a recognized prefix, it is assumed that the string is simply a string, and return with
-     * no change.
-     */
-
-    public Object unsqueeze(String string)
-    {
-        SqueezeAdaptor adaptor = null;
-
-        if (string.equals(NULL_PREFIX))
-            return null;
-        else if (string.length() <= 0)
-            return null;
-        
-        int offset = string.charAt(0) - FIRST_ADAPTOR_OFFSET;
-
-        if (offset >= 0 && offset < _adaptorByPrefix.length)
-            adaptor = _adaptorByPrefix[offset];
-
-        // If the adaptor is not otherwise recognized, the it is simply
-        // an encoded String (the StringAdaptor may not have added
-        // a prefix).
-
-        if (adaptor == null)
-            return string;
-
-        // Adaptor should never be null, because we always supply
-        // an adaptor for String
-
-        return adaptor.unsqueeze(this, string);
-    }
-
-    /**
-     * Convienience method for unsqueezing many strings (back into objects).
-     * <p>
-     * If strings is null, returns null.
-     */
-
-    public Object[] unsqueeze(String[] strings)
-    {
-        if (strings == null)
-            return null;
-
-        int length = strings.length;
-        Object[] result;
-
-        result = new Object[length];
-
-        for (int i = 0; i < length; i++)
-            result[i] = unsqueeze(strings[i]);
-
-        return result;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer();
-        buffer.append("DataSqueezer[adaptors=<");
-        buffer.append(_adaptors.toString());
-        buffer.append(">]");
-
-        return buffer.toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/DataSqueezerUtil.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/DataSqueezerUtil.java
deleted file mode 100644
index 516db46..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/DataSqueezerUtil.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.impl.DefaultClassResolver;
-
-/**
- * Utility methods used when testing code that uses a
- * {@link org.apache.tapestry.services.DataSqueezer}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public final class DataSqueezerUtil
-{
-    /* defeat instantiation */
-    private DataSqueezerUtil() { }
-    
-    /**
-     * Returns a data squeezer with a set of basic adaptors, ready to be used by JUnit-tests.
-     */
-    public static DataSqueezerImpl createUnitTestSqueezer(ClassResolver resolver)
-    {
-        DataSqueezerImpl ds = new DataSqueezerImpl();
-
-        ds.register(new BooleanAdaptor());
-        ds.register(new ByteAdaptor());
-        ds.register(new CharacterAdaptor());
-        ds.register(new ComponentAddressAdaptor());
-        ds.register(new DoubleAdaptor());
-        ds.register(new FloatAdaptor());
-        ds.register(new IntegerAdaptor());
-        ds.register(new LongAdaptor());
-        ds.register(new ShortAdaptor());
-        ds.register(new StringAdaptor());
-
-        SerializableAdaptor ser = new SerializableAdaptor();
-        ser.setResolver(resolver);
-
-        ds.register(ser);
-
-        return ds;
-    }
-
-    /**
-     * Returns a data squeezer with a set of basic adaptors, ready to be used by JUnit-tests.
-     */
-
-    public static DataSqueezerImpl createUnitTestSqueezer()
-    {
-        return createUnitTestSqueezer(new DefaultClassResolver());
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/DoubleAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/DoubleAdaptor.java
deleted file mode 100644
index f2d6677..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/DoubleAdaptor.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Squeezes a {@link Double}.
- * 
- * @author Howard Lewis Ship
- */
-
-public class DoubleAdaptor implements SqueezeAdaptor
-{
-
-    private static final String PREFIX = "d";
-
-    public String getPrefix()
-    {
-        return PREFIX;
-    }
-
-    public Class getDataClass()
-    {
-        return Double.class;
-    }
-
-    /**
-     * Invoked <code>toString()</code> on data (which is type {@link Double}),
-     * and prefixs the result.
-     */
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return PREFIX + data.toString();
-    }
-
-    /**
-     * Constructs an {@link Double} from the string, after stripping the prefix.
-     */
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Double(string.substring(1));
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/FloatAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/FloatAdaptor.java
deleted file mode 100644
index 3a1dcd2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/FloatAdaptor.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Squeezes a {@link Float}.
- * 
- * @author Howard Lewis Ship
- */
-
-public class FloatAdaptor implements SqueezeAdaptor
-{
-
-    private static final String PREFIX = "f";
-
-    public String getPrefix()
-    {
-        return PREFIX;
-    }
-
-    public Class getDataClass()
-    {
-        return Float.class;
-    }
-
-    /**
-     * Invoked <code>toString()</code> on data (which is type {@link Float}),
-     * and prefixs the result.
-     */
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return PREFIX + data.toString();
-    }
-
-    /**
-     * Constructs a {@link Float} from the string, after stripping the prefix.
-     */
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Float(string.substring(1));
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/GzipUtil.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/GzipUtil.java
deleted file mode 100644
index 870a9f4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/GzipUtil.java
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.web.WebRequest;
-
-
-/**
- * Encapsulates logic related to various gzip compression schemes and their rules
- * as they apply to different browsers.
- *
- * @author jkuhnert
- */
-public final class GzipUtil
-{
-    private static final float MIN_IE_VERSION = 7.0f;
-
-    private static final String MSIE_6_COMPATIBLE_STRING = "SV1";
-
-    /* defeat instantiation */
-    private GzipUtil() { }
-
-    /**
-     * Determines if gzip compression is appropriate/possible based on the User Agent and 
-     * other limiting factors. IE versions &lt; 6.1 are known to not work with gzip compression reliably. 
-     *
-     * @return True, if this request can be served in gzip format. False otherwise.
-     */
-    public static boolean isGzipCapable(WebRequest request)
-    {
-        String encoding = request.getHeader("Accept-Encoding");
-        if (encoding == null || encoding.indexOf("gzip") < 0)
-            return false;
-
-        // Handle IE specific hacks
-
-        String userAgent = request.getHeader("User-Agent");
-        int ieIndex = (userAgent != null) ? userAgent.indexOf("MSIE") : -1;
-        if (ieIndex > -1) {
-
-            float version = -1;
-
-            try {
-                version = Float.parseFloat(userAgent.substring(ieIndex + 4, ieIndex + 8));
-            } catch (NumberFormatException nf) {nf.printStackTrace();}
-
-            if (version >= MIN_IE_VERSION)
-                return true;
-
-            if (userAgent.indexOf(MSIE_6_COMPATIBLE_STRING) > -1)
-                return true;
-
-            // else false
-
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Based on the given type of content, determines if compression is appropriate. The biggest
-     * thing it does is make sure that image content isn't compressed as that kind of content
-     * is already compressed fairly well.
-     *
-     * @param contentType
-     *          The content type to check. (ie "text/javascript","text/html", etc..)
-     *
-     * @return True if compression is appropriate for the content specified, false otherwise.
-     */
-    public static boolean shouldCompressContentType(String contentType)
-    {
-        if (contentType == null)
-            return false;
-
-        return contentType.indexOf("javascript") > -1
-               || contentType.indexOf("css") > -1
-               || contentType.indexOf("html") > -1
-               || contentType.indexOf("text") > -1;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/IntegerAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/IntegerAdaptor.java
deleted file mode 100644
index 06bce03..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/IntegerAdaptor.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Squeezes a {@link Integer}. This adaptor claims all the digits as prefix
- * characters, so its the very simplest conversion of all!
- * 
- * @author Howard Lewis Ship
- */
-
-public class IntegerAdaptor implements SqueezeAdaptor
-{
-
-    public String getPrefix()
-    {
-        return "-0123456789";
-    }
-
-    public Class getDataClass()
-    {
-        return Integer.class;
-    }
-
-    /**
-     * Simply invokes <code>toString()</code> on the data, which is actually
-     * type {@link Integer}.
-     */
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return data.toString();
-    }
-
-    /**
-     * Constructs an {@link Integer} from the string.
-     */
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Integer(string);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/IoMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/IoMessages.java
deleted file mode 100644
index dfc0d07..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/IoMessages.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * 
- * @author hls
- */
-final class IoMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(IoMessages.class);
-
-    /* defeat instantiation */
-    private IoMessages() { }
-    
-    static String encodeFailure(Object object, Throwable cause)
-    {
-        return _formatter.format("encode-failure", object, cause);
-    }
-
-    static String decodeFailure(Throwable cause)
-    {
-        return _formatter.format("decode-failure", cause);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/IoStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/IoStrings.properties
deleted file mode 100644
index dfe7aac..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/IoStrings.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-encode-failure=Unable to encode object {0}: {1}. This is sometimes caused when classes being \
-serialized to a stream don't implement java.io.Serializable.
-decode-failure=Unable to decode stream: {0}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/LongAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/LongAdaptor.java
deleted file mode 100644
index 6ab02c7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/LongAdaptor.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Squeezes a {@link Long}.
- * 
- * @author Howard Lewis Ship
- */
-
-public class LongAdaptor implements SqueezeAdaptor
-{
-
-    private static final String PREFIX = "l";
-
-    public String getPrefix()
-    {
-        return PREFIX;
-    }
-
-    public Class getDataClass()
-    {
-        return Long.class;
-    }
-
-    /**
-     * Invoked <code>toString()</code> on data (which is type {@link Long}),
-     * and prefixs the result.
-     */
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return PREFIX + data.toString();
-    }
-
-    /**
-     * Constructs a {@link Long} from the string, after stripping the prefix.
-     */
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Long(string.substring(1));
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ResolvingObjectInputStream.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ResolvingObjectInputStream.java
deleted file mode 100644
index 6ffe03c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ResolvingObjectInputStream.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectStreamClass;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.util.Defense;
-
-/**
- * Specialized subclass of {@link java.io.ObjectInputStream}that knows how to
- * resolve classes with a non-default class loader (represented by an instance
- * of {@link org.apache.hivemind.ClassResolver}).
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class ResolvingObjectInputStream extends ObjectInputStream
-{
-
-    private ClassResolver _resolver;
-
-    public ResolvingObjectInputStream(ClassResolver resolver, InputStream input)
-        throws IOException
-    {
-        super(input);
-
-        Defense.notNull(resolver, "resolver");
-
-        _resolver = resolver;
-    }
-
-    /**
-     * Overrides the default implementation to have the resource resolver find
-     * the class.
-     */
-
-    protected Class resolveClass(ObjectStreamClass v)
-        throws IOException, ClassNotFoundException
-    {
-        return _resolver.findClass(v.getName());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/SerializableAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/SerializableAdaptor.java
deleted file mode 100644
index 7029f6c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/SerializableAdaptor.java
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.tapestry.services.DataSqueezer;
-
-import java.io.*;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-/**
- * The most complicated of the adaptors, this one takes an arbitrary serializable object, serializes
- * it to binary (possibly compressing the stream along the way), and encodes it in a Base64
- * encoding. The first character of the squeezed stream indicates whether it is or is not encoded.
- * 
- * @author Howard Lewis Ship
- */
-
-public class SerializableAdaptor implements SqueezeAdaptor
-{
-    private static final char BYTESTREAM_PREFIX = 'O';
-
-    private static final char GZIP_BYTESTREAM_PREFIX = 'Z';
-
-    // O is for an object stream rendered as MIME
-    // Z is for on object stream, compressed, rendered as MIME
-
-    private static final String PREFIX = "OZ";
-
-    private ClassResolver _resolver;
-    
-    public String getPrefix()
-    {
-        return PREFIX;
-    }
-
-    public Class getDataClass()
-    {
-        return Serializable.class;
-    }
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        try
-        {
-            ByteArrayOutputStream bosPlain = new ByteArrayOutputStream();
-            ByteArrayOutputStream bosCompressed = new ByteArrayOutputStream();
-
-            GZIPOutputStream gos = new GZIPOutputStream(bosCompressed);
-
-            TeeOutputStream tos = new TeeOutputStream(bosPlain, gos);
-
-            ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(tos));
-
-            oos.writeObject(data);
-
-            oos.close();
-
-            boolean useCompressed = bosCompressed.size() < bosPlain.size();
-
-            byte[] byteArray = useCompressed ? bosCompressed.toByteArray() : bosPlain.toByteArray();
-
-            byte[] encoded = Base64.encodeBase64(byteArray);
-
-            String prefix = Character.toString(useCompressed ? GZIP_BYTESTREAM_PREFIX  : BYTESTREAM_PREFIX);
-
-            return prefix + new String(encoded);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(IoMessages.encodeFailure(data, ex), ex);
-        }
-    }
-
-    public Object unsqueeze(DataSqueezer squeezer, String encoded)
-    {
-        char prefix = encoded.charAt(0);
-
-        try
-        {
-            // Strip off the prefix, feed that in as a MIME stream.
-
-            byte[] mimeData = encoded.substring(1).getBytes();
-
-            byte[] decoded = Base64.decodeBase64(mimeData);
-
-            InputStream is = new ByteArrayInputStream(decoded);
-
-            if (prefix == GZIP_BYTESTREAM_PREFIX)
-                is = new GZIPInputStream(is);
-
-            is = new BufferedInputStream(is);
-
-            ObjectInputStream ois = new ResolvingObjectInputStream(_resolver, is);
-
-            Object result = ois.readObject();
-
-            ois.close();
-
-            return result;
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(IoMessages.decodeFailure(ex), ex);
-        }
-    }
-
-    public void setResolver(ClassResolver resolver)
-    {
-        _resolver = resolver;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ShortAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ShortAdaptor.java
deleted file mode 100644
index e19fb54..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/ShortAdaptor.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Squeezes a {@link Short}.
- * 
- * @author Howard Lewis Ship
- */
-
-public class ShortAdaptor implements SqueezeAdaptor
-{
-
-    private static final String PREFIX = "s";
-
-    public String getPrefix()
-    {
-        return PREFIX;
-    }
-
-    public Class getDataClass()
-    {
-        return Short.class;
-    }
-
-    /**
-     * Invoked <code>toString()</code> on data (which is type {@link Short}),
-     * and prefixs the result.
-     */
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return PREFIX + data.toString();
-    }
-
-    /**
-     * Constructs a {@link Short} from the string, after stripping the prefix.
-     */
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Short(string.substring(1));
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/SqueezeAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/SqueezeAdaptor.java
deleted file mode 100644
index 66b9b0c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/SqueezeAdaptor.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Interface which defines a class used to convert data for a specific Java type into a String
- * format (squeeze it), or convert from a String back into a Java type (unsqueeze).
- * <p>
- * This interface is somewhat misnamed; this is more of the GoF Strategy pattern than GoF Adaptor
- * pattern.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface SqueezeAdaptor
-{
-    /**
-     * Returns one or more characters, each of which will be a prefix for this adaptor.
-     *
-     * @return The prefix for this squeezer.
-     */
-
-    String getPrefix();
-
-    /**
-     * Returns the class (or interface) which can be encoded by this adaptor.
-     *
-     * @return The class type that this adaptor can manage.
-     */
-
-    Class getDataClass();
-
-    /**
-     * Converts the data object into a String.
-     *
-     * @param squeezer
-     *          The squeezer that should be used to ultimately squeeze the data.
-     * @param data
-     *          The data to squeeze.
-     *
-     * @return String representation of data.
-     */
-
-    String squeeze(DataSqueezer squeezer, Object data);
-
-    /**
-     * Converts a String back into an appropriate object.
-     *
-     * @param squeezer
-     *          The squeezer to use to unsqueeze the data.
-     * @param string
-     *          The string data - as was returned from {@link #squeeze(org.apache.tapestry.services.DataSqueezer, Object)}.
-     *
-     * @return The re-constituded object representation of the string.
-     */
-
-    Object unsqueeze(DataSqueezer squeezer, String string);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/StringAdaptor.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/StringAdaptor.java
deleted file mode 100644
index b039c74..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/StringAdaptor.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.services.DataSqueezer;
-
-/**
- * Squeezes a String (which is pretty simple, most of the time).
- * 
- * @author Howard Lewis Ship
- */
-
-public class StringAdaptor implements SqueezeAdaptor
-{
-
-    private static final String PREFIX = "S";
-
-    public String getPrefix()
-    {
-        return PREFIX;
-    }
-
-    public Class getDataClass()
-    {
-        return String.class;
-    }
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        String string = (String) data;
-
-        return PREFIX + string;
-    }
-
-    /**
-     * Strips the prefix from the string. This method is only invoked by the
-     * {@link DataSqueezerImpl} if the string leads with its normal prefix (an
-     * 'S').
-     */
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        if (string.length() == 1) return "";
-
-        return string.substring(1);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/TeeOutputStream.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/TeeOutputStream.java
deleted file mode 100644
index dd421fb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/TeeOutputStream.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import org.apache.hivemind.util.Defense;
-
-/**
- * An output stream that copies bytes pushed through it to two other output
- * streams.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class TeeOutputStream extends OutputStream
-{
-
-    private final OutputStream _os1;
-
-    private final OutputStream _os2;
-
-    public TeeOutputStream(OutputStream os1, OutputStream os2)
-    {
-        Defense.notNull(os1, "os1");
-        Defense.notNull(os2, "os2");
-
-        _os1 = os1;
-        _os2 = os2;
-    }
-
-    public void close()
-        throws IOException
-    {
-        _os1.close();
-        _os2.close();
-    }
-
-    public void flush()
-        throws IOException
-    {
-        _os1.flush();
-        _os2.flush();
-    }
-
-    public void write(byte[] b, int off, int len)
-        throws IOException
-    {
-        _os1.write(b, off, len);
-        _os2.write(b, off, len);
-    }
-
-    public void write(byte[] b)
-        throws IOException
-    {
-        _os1.write(b);
-        _os1.write(b);
-    }
-
-    public void write(int b)
-        throws IOException
-    {
-        _os1.write(b);
-        _os2.write(b);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/package.html
deleted file mode 100644
index 08eace0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/io/package.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-
-
-<body>
-
-<p>Some interesting I/O classes.  {@link org.apache.tapestry.util.io.BinaryDumpOutputStream}
-formats a stream of bytes into a human readable presentation, much like
-the Unix command line tool <code>od</code>.
-
-<p>{@link org.apache.tapestry.util.io.DataSqueezer} is used to squeeze and unsqueeze 
-basic scalar types, Strings and serializable objects into a String format.  The eventual
-purpose is to safely encode information into URLs or as HTTP Cookies.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/package.html
deleted file mode 100644
index e84fb30..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-
-<body>
-
-<p>A general set of resuable classes and utilities for creating Internet and XML applications.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/prop/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/prop/package.html
deleted file mode 100644
index 456330c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/prop/package.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-
-
-<body>
-
-<p>Classes for operating on Java Beans as collections of named properties.
-Prior to release 2.2, there was much more here, but with 2.2
-Tapestry switch to use the <a href="http://www.ognl.org">Object Graph
-Navigation Library</a> which is much more powerful.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/AsciiCharacterMatcher.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/AsciiCharacterMatcher.java
deleted file mode 100644
index 789ef5c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/AsciiCharacterMatcher.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-/**
- * An object for matching a set of provided ASCII characters.
- * 
- * @author mb
- * @since 4.0
- */
-public class AsciiCharacterMatcher implements ICharacterMatcher 
-{
-    private boolean[] _charMap;
-    
-    /**
-     * Create a new ASCII character matcher for identifying the set of provided ASCII characters.
-     * 
-     * @param chars the character that this matcher should identify
-     */
-    public AsciiCharacterMatcher(String chars) {
-        _charMap = new boolean[128];
-        for (int i = 0; i < chars.length(); i++) {
-            char ch = chars.charAt(i);
-            if (ch > 127)
-                continue;
-            _charMap[ch] = true;
-        }
-    }
-    
-    /**
-     * Match the characters provided in the constructor.
-     * 
-     * @see org.apache.tapestry.util.text.ICharacterMatcher#matches(char)
-     */
-    public boolean matches(char ch)
-    {
-        if (ch > 127)
-            return false;
-        return _charMap[ch];
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/AsciiCharacterTranslator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/AsciiCharacterTranslator.java
deleted file mode 100644
index f93844a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/AsciiCharacterTranslator.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-/**
- * An object that translates selected ASCII characters into equivalent strings.
- * 
- * @author mb
- * @since 4.0
- */
-public class AsciiCharacterTranslator implements ICharacterTranslator
-{
-
-    private String[] _charMap;
-
-    /**
-     * Creates and initializes a new translator that translates the provided
-     * ASCII characters into strings. All other characters will be translated to
-     * null.
-     * 
-     * @param characterMap
-     *            an array of pairs of strings. Each pair consists of a key that
-     *            must be a single ASCII character, and a value that is its
-     *            equivalent string.
-     */
-    public AsciiCharacterTranslator(String[][] characterMap)
-    {
-        _charMap = new String[128];
-
-        int pairCount = characterMap.length;
-        for(int i = 0; i < pairCount; i++)
-        {
-            String[] pair = characterMap[i];
-            if (pair.length != 2) continue;
-            String key = pair[0];
-            String value = pair[1];
-            if (key.length() != 1) continue;
-            char ch = key.charAt(0);
-            if (ch >= 128) continue;
-
-            _charMap[ch] = value;
-        }
-    }
-
-    /**
-     * @see org.apache.tapestry.util.text.ICharacterTranslator#translate(char) .
-     */
-    public String translate(char ch)
-    {
-        if (ch >= 128) return null;
-        return _charMap[ch];
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/CompoundMatcher.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/CompoundMatcher.java
deleted file mode 100644
index 2a21a0c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/CompoundMatcher.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-/**
- * Combine a set of character matchers. A given character will be matched if any
- * of the provided objects matches it.
- * 
- * @author mb
- * @since 4.0
- */
-public class CompoundMatcher implements ICharacterMatcher
-{
-    private ICharacterMatcher[] _matchers;
-    
-    /**
-     * Create a new object that will match a character if any of the provided objects matches it.
-     * 
-     * @param matchers the array of objects that will be queried if a character matches
-     */
-    public CompoundMatcher(ICharacterMatcher[] matchers) {
-        _matchers = matchers;
-    }
-    
-    /**
-     * Match the character if any of the provided objects matches it.
-     * 
-     * @see org.apache.tapestry.util.text.ICharacterMatcher#matches(char)
-     */
-    public boolean matches(char ch)
-    {
-        for (int i = 0; i < _matchers.length; i++) {
-            if (_matchers[i].matches(ch))
-                return true;
-        }
-        return false;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/DefaultCharacterTranslatorSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/DefaultCharacterTranslatorSource.java
deleted file mode 100644
index da4144b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/DefaultCharacterTranslatorSource.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * The default implementation of a character translator source. Returns a
- * standard HTML translator that encodes everything that is non-safe or an HTML
- * translator that encodes only non-safe ASCII symbols if the encoding is a
- * unicode one.
- * 
- * @author mb
- * @since 4.0
- */
-public class DefaultCharacterTranslatorSource implements
-        ICharacterTranslatorSource
-{
-
-    private static final ICharacterTranslator DEFAULT_TRANSLATOR = new MarkupCharacterTranslator();
-    private static final ICharacterTranslator UNICODE_TRANSLATOR = new MarkupCharacterTranslator(
-            false);
-
-    private static final Map _translators;
-
-    static
-    {
-        _translators = new HashMap();
-        _translators.put("UTF-8", UNICODE_TRANSLATOR);
-        _translators.put("UTF-7", UNICODE_TRANSLATOR);
-        _translators.put("UTF-16", UNICODE_TRANSLATOR);
-        _translators.put("UTF-16BE", UNICODE_TRANSLATOR);
-        _translators.put("UTF-16LE", UNICODE_TRANSLATOR);
-    }
-
-    /**
-     * Returns a translator that encodes all non-safe characters into their HTML
-     * equivalents.
-     * 
-     * @see org.apache.tapestry.util.text.ICharacterTranslatorSource#getDefaultTranslator()
-     */
-    public ICharacterTranslator getDefaultTranslator()
-    {
-        return DEFAULT_TRANSLATOR;
-    }
-
-    /**
-     * If the encoding is a Unicode one, returns a translator that encodes only
-     * the non-safe ASCII characters and leaves the others untouched. Otherwise,
-     * returns the default translator.
-     * 
-     * @see org.apache.tapestry.util.text.ICharacterTranslatorSource#getTranslator(java.lang.String)
-     */
-    public ICharacterTranslator getTranslator(String encoding)
-    {
-        ICharacterTranslator translator = (ICharacterTranslator) _translators
-                .get(encoding.toUpperCase());
-        if (translator != null) return translator;
-        return getDefaultTranslator();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ExtendedReader.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ExtendedReader.java
deleted file mode 100644
index b9482af..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ExtendedReader.java
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * A Reader that provides some additional functionality, such as peek().
- * 
- * @author mb
- * @since 4.0
- */
-public class ExtendedReader extends Reader
-{
-    private Reader _reader;
-    private boolean _hasBufferedChar = false;
-    private char _bufferedChar;
-    
-    /**
-     * Creates a new extended reader that reads from the provided object.
-     * 
-     * @param in the Reader to get data from
-     */
-    public ExtendedReader(Reader in)
-    {
-        _reader = in;
-    }
-
-    /**
-     * Returns the next character in the stream without actually comitting the read.
-     * Multiple consequtive invocations of this method should return the same value.
-     * 
-     * @return the next character waiting in the stream or -1 if the end of the stream is reached
-     * @throws IOException if an error occurs
-     */
-    public synchronized int peek() throws IOException
-    {
-        if (!_hasBufferedChar) {
-            int bufferedChar = read();
-            if (bufferedChar < 0)
-                return bufferedChar;
-            _bufferedChar = (char) bufferedChar;
-            _hasBufferedChar = true;
-        }
-        return _bufferedChar;
-    }
-    
-    /**
-     * Determines whether the end of the stream is reached.
-     * 
-     * @return true if at the end of stream
-     * @throws IOException if an error occurs
-     */
-    public synchronized boolean isEndOfStream() throws IOException
-    {
-        return peek() < 0;
-    }
-
-    /**
-     * Skips the next characters until a character that does not match the provided rule is reached.
-     * 
-     * @param matcher the object determining whether a character should be skipped
-     * @throws IOException if an error occurs
-     */
-    public synchronized void skipCharacters(ICharacterMatcher matcher) throws IOException
-    {
-        while (true) {
-            if (isEndOfStream())
-                break;
-            char ch = (char) peek();
-            if (!matcher.matches(ch))
-                break;
-            read();
-        }
-    }
-    
-    /**
-     * Reads the next characters until a character that does not match the provided rule is reached.
-     * 
-     * @param matcher the object determining whether a character should be read
-     * @return the string of characters read
-     * @throws IOException if an error occurs
-     */
-    public synchronized String readCharacters(ICharacterMatcher matcher) throws IOException
-    {
-        StringBuffer buf = new StringBuffer();
-        while (true) {
-            if (isEndOfStream())
-                break;
-            char ch = (char) peek();
-            if (!matcher.matches(ch))
-                break;
-            buf.append(read());
-        }
-        return buf.toString();
-    }
-    
-    /** 
-     * @see java.io.FilterReader#read(char[], int, int)
-     */
-    public synchronized int read(char[] cbuf, int off, int len) throws IOException
-    {
-        int offset = off;
-        if (len <= 0)
-            return 0;
-        int readLength = len;
-        
-        boolean extraChar = _hasBufferedChar;
-        if (_hasBufferedChar) {
-            _hasBufferedChar = false;
-            cbuf[offset++] = _bufferedChar;
-            readLength--;
-        }
-
-        int read = _reader.read(cbuf, offset, readLength);
-        if (extraChar)
-            read++;
-        return read;
-    }
-    
-    /** 
-     * @see java.io.FilterReader#ready()
-     */
-    public synchronized boolean ready() throws IOException
-    {
-        if (_hasBufferedChar)
-            return true;
-        return _reader.ready();
-    }
-    
-    /** 
-     * @see java.io.FilterReader#markSupported()
-     */
-    public synchronized boolean markSupported()
-    {
-        return false;
-    }
-    
-    /** 
-     * @see java.io.FilterReader#reset()
-     */
-    public synchronized void reset() throws IOException
-    {
-        _hasBufferedChar = false;
-        _reader.reset();
-    }
-    
-    /** 
-     * @see java.io.FilterReader#skip(long)
-     */
-    public synchronized long skip(long n) throws IOException
-    {
-        long skipChars = n;
-        if (_hasBufferedChar && skipChars > 0) {
-            _hasBufferedChar = false;
-            skipChars--;
-        }
-        return _reader.skip(skipChars);
-    }
-
-    /** 
-     * @see java.io.Reader#close()
-     */
-    public synchronized void close() throws IOException
-    {
-        _hasBufferedChar = false;
-        _reader.close();
-    }
-    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ICharacterMatcher.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ICharacterMatcher.java
deleted file mode 100644
index 9006f19..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ICharacterMatcher.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-/**
- * An interface for determining whether a character matches a particular rule.
- * 
- * @author mb
- * @since 4.0
- */
-public interface ICharacterMatcher
-{
-
-    /**
-     * Determine whether the given character matches the implemented rule.
-     * 
-     * @param ch
-     *            the character to be matched
-     * @return true if the character matches the rule
-     */
-    boolean matches(char ch);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ICharacterTranslator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ICharacterTranslator.java
deleted file mode 100644
index eb235b0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ICharacterTranslator.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-/**
- * An interface for translating a character into a string.
- * 
- * @author mb
- * @since 4.0
- */
-public interface ICharacterTranslator
-{
-
-    /**
-     * Translates the provided character into a string.
-     * 
-     * @param ch
-     *            the character to be translated
-     * @return null if the character is not to be translated, an empty string if
-     *         the character is to be ignored, or another string to represent
-     *         the character translation
-     */
-    String translate(char ch);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ICharacterTranslatorSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ICharacterTranslatorSource.java
deleted file mode 100644
index e293316..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/ICharacterTranslatorSource.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-/**
- * A factory for creating character translators depending on the encoding.
- * 
- * @author mb
- * @since 4.0
- */
-public interface ICharacterTranslatorSource
-{
-
-    ICharacterTranslator getDefaultTranslator();
-
-    ICharacterTranslator getTranslator(String encoding);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/InverseMatcher.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/InverseMatcher.java
deleted file mode 100644
index 003aedd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/InverseMatcher.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-/**
- * Matches a given character only if the provided object does NOT match it.
- * 
- * @author mb
- * @since 4.0
- */
-public class InverseMatcher implements ICharacterMatcher
-{
-    private ICharacterMatcher _matcher;
-    
-    /**
-     * Creates a new object that inverts the matching rule of the provided matcher.
-     * 
-     * @param matcher the matcher whose behaviour will be inverted
-     */
-    public InverseMatcher(ICharacterMatcher matcher)
-    {
-        _matcher = matcher;
-    }
-    
-    /**
-     * Matches the character only if the provided object does NOT match it.
-     * 
-     * @see org.apache.tapestry.util.text.ICharacterMatcher#matches(char)
-     */
-    public boolean matches(char ch)
-    {
-        return !_matcher.matches(ch);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/LocalizedProperties.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/LocalizedProperties.java
deleted file mode 100644
index 5c129dc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/LocalizedProperties.java
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A version of java.util.Properties that can read the properties from files
- * using an encoding other than ISO-8859-1. All non-latin characters are read
- * correctly using the given encoding and no longer need to be quoted using
- * native2ascii. In addition, the properties may be stored in an arbitrary map,
- * rather than only in Properties. For example, using LinkedHashMap will
- * preserve the order of the properties as defined in the file.
- * 
- * @author mb
- * @since 4.0
- */
-public class LocalizedProperties
-{
-
-    private Map _propertyMap;
-
-    /**
-     * Create a new object with an empty property storage.
-     */
-    public LocalizedProperties()
-    {
-        this(new HashMap());
-    }
-
-    /**
-     * Use the provided argument as the storage location for the properties
-     * managed by this object. This allows different types of Map
-     * implementations to be used, such as a LinkedHashMap to preserve the order
-     * of the keys, for example. The provided map may contain the default
-     * property values as well.
-     * 
-     * @param propertyMap
-     *            the map where properties are to be stored
-     */
-    public LocalizedProperties(Map propertyMap)
-    {
-        _propertyMap = propertyMap;
-    }
-
-    /**
-     * Returns the property value corresponding the provided key. If there is no
-     * such property, or the value in the provided map is not of type String,
-     * null is returned.
-     * 
-     * @param key
-     *            the property key
-     * @return the value of the property, or null if there is no such property
-     */
-    public String getProperty(String key)
-    {
-        Object value = _propertyMap.get(key);
-        if (value instanceof String) return (String) value;
-        return null;
-    }
-
-    /**
-     * Returns the property value corresponding to the provided key, or the
-     * provided default value if no such property exists.
-     * 
-     * @param key
-     *            the property key
-     * @param defaultValue
-     *            the default value of the property
-     * @return the value of the property, or the default value if there is no
-     *         such property
-     */
-    public String getProperty(String key, String defaultValue)
-    {
-        String value = getProperty(key);
-        if (value != null) return value;
-        return defaultValue;
-    }
-
-    /**
-     * Stores a property value.
-     * 
-     * @param key
-     *            the property key
-     * @param value
-     *            the property value
-     */
-    public void setProperty(String key, String value)
-    {
-        _propertyMap.put(key, value);
-    }
-
-    /**
-     * Returns the map containing all properties. The map can be used to
-     * enumerate the properties or their keys.
-     * 
-     * @return a map containing the properties
-     */
-    public Map getPropertyMap()
-    {
-        return _propertyMap;
-    }
-
-    /**
-     * Loads the properties from the given stream using the default character
-     * encoding. This method operates in the same way as the equivalent method
-     * in {@link java.util.Properties}, but it also handles non-ascii symbols.
-     * 
-     * @param ins
-     *            the stream to load the properties from
-     * @throws IOException
-     */
-    public void load(InputStream ins)
-        throws IOException
-    {
-        LocalizedPropertiesLoader loader = new LocalizedPropertiesLoader(ins);
-        loader.load(_propertyMap);
-    }
-
-    /**
-     * Loads the properties from the given stream using the provided character
-     * encoding. This method operates in the same way as the equivalent method
-     * in {@link java.util.Properties}, but it also handles non-ascii symbols.
-     * 
-     * @param ins
-     *            the stream to load the properties from
-     * @param encoding
-     *            the encoding the use when parsing the stream
-     * @throws IOException
-     */
-    public void load(InputStream ins, String encoding)
-        throws IOException
-    {
-        LocalizedPropertiesLoader loader = new LocalizedPropertiesLoader(ins,
-                encoding);
-        loader.load(_propertyMap);
-    }
-
-    /**
-     * Loads the properties from the given reader. This method operates in the
-     * same way as the equivalent method in {@link java.util.Properties}, but
-     * it also handles non-ascii symbols.
-     * 
-     * @param reader
-     *            the reader to load the properties from
-     * @throws IOException
-     */
-    public void load(Reader reader)
-        throws IOException
-    {
-        LocalizedPropertiesLoader loader = new LocalizedPropertiesLoader(reader);
-        loader.load(_propertyMap);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/LocalizedPropertiesLoader.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/LocalizedPropertiesLoader.java
deleted file mode 100644
index be62af2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/LocalizedPropertiesLoader.java
+++ /dev/null
@@ -1,256 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.UnsupportedEncodingException;
-import java.util.Map;
-
-/**
- * An object that loads a properties file from the provided input stream or
- * reader. This class reads the property file exactly like java.util.Properties,
- * except that it also allows the files to use an encoding other than ISO-8859-1
- * and all non-ASCII characters are read correctly using the given encoding. In
- * short, non-latin characters no longer need to be quoted using native2ascii.
- * 
- * @author mb
- * @since 4.0
- */
-public class LocalizedPropertiesLoader
-{
-
-    private static final String HEX_DIGITS = "0123456789ABCDEF";
-
-    private static final ICharacterMatcher WHITESPACE = new WhitespaceMatcher(
-            false);
-    private static final ICharacterMatcher LINE_SEPARATOR = new AsciiCharacterMatcher(
-            "\n\r");
-    private static final ICharacterMatcher NOT_LINE_SEPARATOR = new InverseMatcher(
-            LINE_SEPARATOR);
-    private static final ICharacterMatcher KEY_VALUE_SEPARATOR = new AsciiCharacterMatcher(
-            "=:");
-    private static final ICharacterMatcher SEPARATOR = new AsciiCharacterMatcher(
-            "=:\r\n");
-    private static final ICharacterMatcher COMMENT = new AsciiCharacterMatcher(
-            "#!");
-    private static final ICharacterMatcher WHITESPACE_OR_SEPARATOR = new CompoundMatcher(
-            new ICharacterMatcher[] { WHITESPACE, SEPARATOR });
-
-    private ExtendedReader _extendedReader;
-
-    /**
-     * Creates a new loader that will load the properties from the given input
-     * stream using the default character encoding.
-     * 
-     * @param ins
-     *            the input stream to load the properties from
-     */
-    public LocalizedPropertiesLoader(InputStream ins)
-    {
-        this(new InputStreamReader(ins));
-    }
-
-    /**
-     * Creates a new loader that will load the properties from the given input
-     * stream using the provided character encoding.
-     * 
-     * @param ins
-     *            the input stream to load the properties from
-     * @param encoding
-     *            the character encoding the be used when reading from the
-     *            stream
-     * @throws UnsupportedEncodingException
-     *             if the name of the encoding cannot be recognized
-     */
-    public LocalizedPropertiesLoader(InputStream ins, String encoding)
-        throws UnsupportedEncodingException
-    {
-        this(new InputStreamReader(ins, encoding));
-    }
-
-    /**
-     * Creates a new loader that will load the properties from the given reader.
-     * 
-     * @param reader
-     *            the Reader to load the properties from
-     */
-    public LocalizedPropertiesLoader(Reader reader)
-    {
-        _extendedReader = new ExtendedReader(new BufferedReader(reader));
-    }
-
-    /**
-     * Read the properties from the provided stream and store them into the
-     * given map.
-     * 
-     * @param properties
-     *            the map where the properties will be stored
-     * @throws IOException
-     *             if an error occurs
-     */
-    public void load(Map properties)
-        throws IOException
-    {
-        while(!isAtEndOfStream())
-        {
-            // we are at the beginning of a line.
-            // check whether it is a comment and if it is, skip it
-            int nextChar = _extendedReader.peek();
-            if (COMMENT.matches((char) nextChar))
-            {
-                _extendedReader.skipCharacters(NOT_LINE_SEPARATOR);
-                continue;
-            }
-
-            _extendedReader.skipCharacters(WHITESPACE);
-            if (!isAtEndOfLine())
-            {
-                // this line does not consist only of whitespace. the next word
-                // is the key
-                String key = readQuotedLine(WHITESPACE_OR_SEPARATOR);
-                _extendedReader.skipCharacters(WHITESPACE);
-
-                // if the next char is a key-value separator, read it and skip
-                // the following spaces
-                nextChar = _extendedReader.peek();
-                if (nextChar > 0
-                        && KEY_VALUE_SEPARATOR.matches((char) nextChar))
-                {
-                    _extendedReader.read();
-                    _extendedReader.skipCharacters(WHITESPACE);
-                }
-
-                // finally, read the value
-                String value = readQuotedLine(LINE_SEPARATOR);
-
-                properties.put(key, value);
-            }
-            _extendedReader.skipCharacters(LINE_SEPARATOR);
-        }
-    }
-
-    private boolean isAtEndOfStream()
-        throws IOException
-    {
-        int nextChar = _extendedReader.peek();
-        return (nextChar < 0);
-    }
-
-    private boolean isAtEndOfLine()
-        throws IOException
-    {
-        int nextChar = _extendedReader.peek();
-        if (nextChar < 0) return true;
-        return LINE_SEPARATOR.matches((char) nextChar);
-    }
-
-    private String readQuotedLine(ICharacterMatcher terminators)
-        throws IOException
-    {
-        StringBuffer buf = new StringBuffer();
-
-        while(true)
-        {
-            // see what the next char is
-            int nextChar = _extendedReader.peek();
-
-            // if at end of stream or the char is one of the terminators, stop
-            if (nextChar < 0 || terminators.matches((char) nextChar)) break;
-
-            try
-            {
-                // read the char (and possibly unquote it)
-                char ch = readQuotedChar();
-                buf.append(ch);
-            }
-            catch (IgnoreCharacterException e)
-            {
-                // simply ignore -- no character was read
-            }
-        }
-
-        return buf.toString();
-    }
-
-    private char readQuotedChar()
-        throws IOException, IgnoreCharacterException
-    {
-        int nextChar = _extendedReader.read();
-        if (nextChar < 0) throw new IgnoreCharacterException();
-        char ch = (char) nextChar;
-
-        // if the char is not the quotation char, simply return it
-        if (ch != '\\') return ch;
-
-        // the character is a quotation character. unquote it
-        nextChar = _extendedReader.read();
-
-        // if at the end of the stream, stop
-        if (nextChar < 0) throw new IgnoreCharacterException();
-
-        ch = (char) nextChar;
-        switch(ch)
-        {
-        case 'u':
-            char res = 0;
-            for(int i = 0; i < 4; i++)
-            {
-                nextChar = _extendedReader.read();
-                if (nextChar < 0)
-                    throw new IllegalArgumentException(
-                            "Malformed \\uxxxx encoding.");
-                char digitChar = (char) nextChar;
-                int digit = HEX_DIGITS
-                        .indexOf(Character.toUpperCase(digitChar));
-                if (digit < 0)
-                    throw new IllegalArgumentException(
-                            "Malformed \\uxxxx encoding.");
-                res = (char) (res * 16 + digit);
-            }
-            return res;
-
-        case '\r':
-            // if the next char is \n, read it and fall through
-            nextChar = _extendedReader.peek();
-            if (nextChar == '\n') _extendedReader.read();
-        case '\n':
-            _extendedReader.skipCharacters(WHITESPACE);
-            throw new IgnoreCharacterException();
-
-        case 't':
-            return '\t';
-        case 'n':
-            return '\n';
-        case 'r':
-            return '\r';
-        default:
-            return ch;
-        }
-    }
-
-    /**
-     * 
-     * @author unknown
-     */
-    private static class IgnoreCharacterException extends Exception
-    {
-
-        private static final long serialVersionUID = 8366308710256427596L;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/MarkupCharacterTranslator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/MarkupCharacterTranslator.java
deleted file mode 100644
index 97a2677..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/MarkupCharacterTranslator.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-/**
- * An object that encodes a character according to rules of the HTML
- * specification, so that it will be properly parsed by a browser irrespectively
- * of the character encoding used in the HTML output.
- *
- * @author mb
- * @since 4.0
- */
-public class MarkupCharacterTranslator implements ICharacterTranslator {
-
-    private static final String SAFE_CHARACTERS = "01234567890"
-                                                  + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-                                                  + "\t\n\r !#$%'()*+,-./:;=?@[\\]^_`{|}~";
-
-    private static final String[][] ENTITIES = {
-            {"\"", "&quot;"},
-            {"<", "&lt;"}, {">", "&gt;"}, {"&", "&amp;"}
-    };
-
-    private static final ICharacterMatcher SAFE_MATCHER = new AsciiCharacterMatcher(SAFE_CHARACTERS);
-    private static final ICharacterTranslator ENTITY_TRANSLATOR = new AsciiCharacterTranslator(ENTITIES);
-
-    private boolean _encodeNonAscii;
-    private ICharacterMatcher _safeMatcher;
-    private ICharacterTranslator _entityTranslator;
-
-    public MarkupCharacterTranslator()
-    {
-        this(true);
-    }
-
-    public MarkupCharacterTranslator(boolean encodeNonAscii)
-    {
-        this(encodeNonAscii, SAFE_MATCHER, ENTITY_TRANSLATOR);
-    }
-
-    public MarkupCharacterTranslator(boolean encodeNonAscii,
-                                     ICharacterMatcher safeMatcher, ICharacterTranslator entityTranslator)
-    {
-        _encodeNonAscii = encodeNonAscii;
-        _safeMatcher = safeMatcher;
-        _entityTranslator = entityTranslator;
-    }
-
-    public MarkupCharacterTranslator(boolean encodeNonAscii,
-                                     String safeCharacters, String[][] entities)
-    {
-        _encodeNonAscii = encodeNonAscii;
-        _safeMatcher = new AsciiCharacterMatcher(safeCharacters);
-        _entityTranslator = new AsciiCharacterTranslator(entities);
-    }
-
-    /**
-     * @see ICharacterTranslator#translate(char)
-     */
-    public String translate(char ch)
-    {
-        // IE and Firefox do not handle characters between 128 and 159 well,
-        // so they have to be quoted as well
-        if (ch >= 160 && !_encodeNonAscii)
-            return null;
-
-        if (_safeMatcher.matches(ch))
-            return null;
-
-        String entity = _entityTranslator.translate(ch);
-        if (entity != null)
-            return entity;
-
-        // needs to use a NumberFormat here to be fully compliant,
-        // but this is accepted fine by the browsers
-        return "&#" + (int) ch + ";";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/WhitespaceMatcher.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/WhitespaceMatcher.java
deleted file mode 100644
index 9377ab4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/WhitespaceMatcher.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.text;
-
-/**
- * Matches a whitespace character.
- * 
- * @author mb
- * @since 4.0
- */
-public class WhitespaceMatcher implements ICharacterMatcher
-{
-
-    private boolean _matchEndLines;
-
-    /**
-     * Creates an object that matches all whitespace characters, line
-     * terminators included.
-     */
-    public WhitespaceMatcher()
-    {
-        this(true);
-    }
-
-    /**
-     * Creates an object that matches whitespace characters. Line terminators
-     * are included only if this is specified.
-     * 
-     * @param matchEndLines
-     *            match line terminators as well
-     */
-    public WhitespaceMatcher(boolean matchEndLines)
-    {
-        _matchEndLines = matchEndLines;
-    }
-
-    /**
-     * Matches whitespace characters. Line terminators may be matched depending
-     * on the constructor used to create the object.
-     * 
-     * @see org.apache.tapestry.util.text.ICharacterMatcher#matches(char)
-     */
-    public boolean matches(char ch)
-    {
-        if (!_matchEndLines) if (ch == '\n' || ch == '\r') return false;
-
-        return Character.isWhitespace(ch);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/XmlCharacterTranslator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/XmlCharacterTranslator.java
deleted file mode 100644
index 3d2f1e5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/XmlCharacterTranslator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright Aug 4, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.util.text;
-
-
-/**
- * Handles escaping of special characters as per the XML spec section 2.2.
- * 
- * @author lquijano
- */
-public final class XmlCharacterTranslator extends MarkupCharacterTranslator {
-    
-    /** Default constructor. */
-    public XmlCharacterTranslator() {
-        super(true);
-    }
-    
-    /**
-     * Translates the character.
-     * 
-     * <p>
-     *  XML spec section 2.2
-     *  Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] |
-     *  [#xE000-#xFFFD] |
-     *  [#x10000-#x10FFFF]
-     *  any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
-     *  </p>
-     */
-    public String translate(char ch) {
-        if (ch == 0x09 || ch == 0x0a || ch == 0x0d
-                || (ch >= 0x20 && ch <= 0xd7ff)
-                || (ch >= 0xe000 && ch <= 0xfffd)
-                || (ch >= 0x10000 && ch <= 0x10ffff)) {
-            return super.translate(ch);
-        }
-
-        return "";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/package.html
deleted file mode 100644
index e84752c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/text/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Helper classes for template parsing and rendering.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/BaseRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/BaseRule.java
deleted file mode 100644
index c729ea4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/BaseRule.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.xml;
-
-import org.apache.hivemind.HiveMind;
-import org.xml.sax.Attributes;
-
-/**
- * Base implementation of {@link org.apache.tapestry.util.xml.IRule}that does nothing.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-public class BaseRule implements IRule
-{
-    protected String getAttribute(Attributes attributes, String name)
-    {
-        int count = attributes.getLength();
-
-        for (int i = 0; i < count; i++)
-        {
-            String attributeName = attributes.getLocalName(i);
-
-            if (HiveMind.isBlank(attributeName))
-                attributeName = attributes.getQName(i);
-
-            if (attributeName.equals(name))
-                return attributes.getValue(i);
-        }
-
-        return null;
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-
-    }
-
-    public void endElement(RuleDirectedParser parser)
-    {
-
-    }
-
-    public void content(RuleDirectedParser parser, String content)
-    {
-
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/DocumentParseException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/DocumentParseException.java
deleted file mode 100644
index 1e96379..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/DocumentParseException.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.xml;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.LocationImpl;
-import org.xml.sax.SAXParseException;
-
-/**
- * Exception thrown if there is any kind of error parsing the an XML document.
- * 
- * @see org.apache.tapestry.parse.SpecificationParser
- * @author Howard Lewis Ship
- * @since 0.2.10
- */
-
-public class DocumentParseException extends ApplicationRuntimeException
-{
-
-    private static final long serialVersionUID = 4630222650675402789L;
-
-    public DocumentParseException(String message)
-    {
-        this(message, (Resource) null);
-    }
-
-    public DocumentParseException(String message, Throwable rootCause)
-    {
-        super(message, null, rootCause);
-    }
-
-    public DocumentParseException(String message, Location location)
-    {
-        super(message, location, null);
-    }
-
-    public DocumentParseException(String message, Location location,
-            Throwable rootCause)
-    {
-        super(message, location, rootCause);
-    }
-
-    public DocumentParseException(String message, Resource resource,
-            SAXParseException rootCause)
-    {
-        this(message, resource == null ? null : new LocationImpl(resource,
-                rootCause.getLineNumber(), rootCause.getColumnNumber()),
-                rootCause);
-    }
-
-    public DocumentParseException(String message, Resource resource)
-    {
-        this(message, resource, (Throwable) null);
-    }
-
-    public DocumentParseException(String message, Resource resource,
-            Throwable rootCause)
-    {
-        this(message, resource == null ? null : new LocationImpl(resource),
-                rootCause);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/IRule.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/IRule.java
deleted file mode 100644
index dff1b49..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/IRule.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.xml;
-
-import org.xml.sax.Attributes;
-
-/**
- * A rule that may be pushed onto the
- * {@link org.apache.tapestry.util.xml.RuleDirectedParser}'s rule stack. A rule
- * is associated with an XML element. It is pushed onto the stack when the open
- * tag for the rule is encountered. It is is popped off the stack after the
- * end-tag is encountered. It is notified about any text it directly wraps
- * around.
- * <p>
- * Rules should be stateless, because a rule instance may appear multiple times
- * in the rule stack (if elements can be recusively nested).
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public interface IRule
-{
-
-    /**
-     * Invoked just after the rule is pushed onto the rule stack. Typically, a
-     * Rule will use the information to create a new object and push it onto the
-     * object stack. If the rule needs to know about the element (rather than
-     * the attributes), it may obtain the URI, localName and qName from the
-     * parser.
-     */
-    void startElement(RuleDirectedParser parser, Attributes attributes);
-
-    /**
-     * Invoked just after the rule is popped off the rule stack.
-     */
-    void endElement(RuleDirectedParser parser);
-
-    /**
-     * Invoked when real content is found. The parser is responsible for
-     * aggregating all content provided by the underlying SAX parser into a
-     * single string.
-     */
-
-    void content(RuleDirectedParser parser, String content);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/InvalidStringException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/InvalidStringException.java
deleted file mode 100644
index 3c9c069..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/InvalidStringException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.xml;
-
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.Location;
-
-/**
- * Exception thrown if there is any kind of error validating a string during document parsing.
- * 
- * @author Geoffrey Longman
- * @since 2.2
- */
-
-public class InvalidStringException extends DocumentParseException implements Locatable
-{
-    private static final long serialVersionUID = 8199998733585358584L;
-    
-    private final String _invalidString;
-
-    public InvalidStringException(String message, String invalidString, Location location)
-    {
-        super(message, location, null);
-
-        _invalidString = invalidString;
-    }
-
-    public String getInvalidString()
-    {
-        return _invalidString;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/RuleDirectedParser.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/RuleDirectedParser.java
deleted file mode 100644
index 8dee218..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/RuleDirectedParser.java
+++ /dev/null
@@ -1,565 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.xml;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.LocationImpl;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.RegexpMatcher;
-import org.xml.sax.*;
-import org.xml.sax.helpers.DefaultHandler;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A simplified version of org.apache.commons.digester.Digester. This version is without as
- * many bells and whistles but has some key features needed when parsing a document (rather than a
- * configuration file): <br>
- * <ul>
- * <li>Notifications for each bit of text</li>
- * <li>Tracking of exact location within the document.</li>
- * </ul>
- * <p>
- * Like Digester, there's an object stack and a rule stack. The rules are much simpler (more
- * coding), in that there's a one-to-one relationship between an element and a rule.
- * <p>
- * Based on SAX2.
- *
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class RuleDirectedParser extends DefaultHandler
-{
-    private static final Log LOG = LogFactory.getLog(RuleDirectedParser.class);
-
-    private static SAXParserFactory _parserFactory;
-
-    private Resource _documentLocation;
-
-    private List _ruleStack = new ArrayList();
-
-    private List _objectStack = new ArrayList();
-
-    private Object _documentObject;
-
-    private Locator _locator;
-
-    private int _line = -1;
-
-    private int _column = -1;
-
-    private Location _location;
-
-    private SAXParser _parser;
-
-    private RegexpMatcher _matcher;
-
-    private String _uri;
-
-    private String _localName;
-
-    private String _qName;
-
-    /**
-     * Map of {@link IRule}keyed on the local name of the element.
-     */
-    private Map _ruleMap = new HashMap();
-
-    /**
-     * Used to accumlate content provided by
-     * {@link org.xml.sax.ContentHandler#characters(char[], int, int)}.
-     */
-
-    private StringBuffer _contentBuffer = new StringBuffer();
-
-    /**
-     * Map of paths to external entities (such as the DTD) keyed on public id.
-     */
-
-    private Map _entities = new HashMap();
-
-    public Object parse(Resource documentLocation)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Parsing: " + documentLocation);
-
-        try
-        {
-            _documentLocation = documentLocation;
-
-            URL url = documentLocation.getResourceURL();
-
-            if (url == null)
-                throw new DocumentParseException(Tapestry.format("RuleDrivenParser.resource-missing", documentLocation), documentLocation);
-
-            return parse(url);
-        }
-        finally
-        {
-            _documentLocation = null;
-            _ruleStack.clear();
-            _objectStack.clear();
-            _documentObject = null;
-
-            _uri = null;
-            _localName = null;
-            _qName = null;
-
-            _line = -1;
-            _column = -1;
-            _location = null;
-            _locator = null;
-
-            _contentBuffer.setLength(0);
-        }
-    }
-
-    protected Object parse(URL url)
-    {
-        if (_parser == null)
-            _parser = constructParser();
-
-        InputStream stream = null;
-
-        try
-        {
-            stream = url.openStream();
-        }
-        catch (IOException ex)
-        {
-            throw new DocumentParseException(Tapestry.format(
-              "RuleDrivenParser.unable-to-open-resource",
-              url), _documentLocation, ex);
-        }
-
-        InputSource source = new InputSource(stream);
-
-        try
-        {
-            _parser.parse(source, this);
-
-            stream.close();
-        }
-        catch (Exception ex)
-        {
-            throw new DocumentParseException(Tapestry.format(
-              "RuleDrivenParser.parse-error",
-              url,
-              ex.getMessage()), getLocation(), ex);
-        }
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Document parsed as: " + _documentObject);
-
-        return _documentObject;
-    }
-
-    /**
-     * Returns an {@link Location}representing the current position within the document (depending
-     * on the parser, this may be accurate to column number level).
-     */
-
-    public Location getLocation()
-    {
-        if (_locator == null)
-            return null;
-
-        int line = _locator.getLineNumber();
-        int column = _locator.getColumnNumber();
-
-        if (_line != line || _column != column)
-        {
-            _location = null;
-            _line = line;
-            _column = column;
-        }
-
-        if (_location == null)
-            _location = new LocationImpl(_documentLocation, _line, _column);
-
-        return _location;
-    }
-
-    /**
-     * Pushes an object onto the object stack. The first object pushed is the "document object", the
-     * root object returned by the parse.
-     */
-    public void push(Object object)
-    {
-        if (_documentObject == null)
-            _documentObject = object;
-
-        push(_objectStack, object, "object stack");
-    }
-
-    /**
-     * Returns the top object on the object stack.
-     */
-    public Object peek()
-    {
-        return peek(_objectStack, 0);
-    }
-
-    /**
-     * Returns an object within the object stack, at depth. Depth 0 is the top object, depth 1 is
-     * the next-to-top object, etc.
-     */
-
-    public Object peek(int depth)
-    {
-        return peek(_objectStack, depth);
-    }
-
-    /**
-     * Removes and returns the top object on the object stack.
-     */
-    public Object pop()
-    {
-        return pop(_objectStack, "object stack");
-    }
-
-    private Object pop(List list, String name)
-    {
-        Object result = list.remove(list.size() - 1);
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Popped " + result + " off " + name + " (at " + getLocation() + ")");
-
-        return result;
-    }
-
-    private Object peek(List list, int depth)
-    {
-        return list.get(list.size() - 1 - depth);
-    }
-
-    private void push(List list, Object object, String name)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Pushing " + object + " onto " + name + " (at " + getLocation() + ")");
-
-        list.add(object);
-    }
-
-    /**
-     * Pushes a new rule onto the rule stack.
-     */
-
-    protected void pushRule(IRule rule)
-    {
-        push(_ruleStack, rule, "rule stack");
-    }
-
-    /**
-     * Returns the top rule on the stack.
-     */
-
-    protected IRule peekRule()
-    {
-        return (IRule) peek(_ruleStack, 0);
-    }
-
-    protected IRule popRule()
-    {
-        return (IRule) pop(_ruleStack, "rule stack");
-    }
-
-    public void addRule(String localElementName, IRule rule)
-    {
-        _ruleMap.put(localElementName, rule);
-    }
-
-    /**
-     * Registers a public id and corresponding input source. Generally, the source is a wrapper
-     * around an input stream to a package resource.
-     *
-     * @param publicId
-     *            the public identifier to be registerred, generally the publicId of a DTD related
-     *            to the document being parsed
-     * @param entityPath
-     *            the resource path of the entity, typically a DTD file. Relative files names are
-     *            expected to be stored in the same package as the class file, otherwise a leading
-     *            slash is an absolute pathname within the classpath.
-     */
-
-    public void registerEntity(String publicId, String entityPath)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Registering " + publicId + " as " + entityPath);
-
-        if (_entities == null)
-            _entities = new HashMap();
-
-        _entities.put(publicId, entityPath);
-    }
-
-    protected IRule selectRule(String localName, Attributes attributes)
-    {
-        IRule rule = (IRule) _ruleMap.get(localName);
-
-        if (rule == null)
-            throw new DocumentParseException(Tapestry.format(
-              "RuleDrivenParser.no-rule-for-element",
-              localName), getLocation());
-
-        return rule;
-    }
-
-    /**
-     * Uses the {@link Locator}to track the position in the document as a {@link Location}. This
-     * is invoked once (before the initial element is parsed) and the Locator is retained and
-     * queried as to the current file location.
-     *
-     * @see #getLocation()
-     */
-    public void setDocumentLocator(Locator locator)
-    {
-        _locator = locator;
-    }
-
-    /**
-     * Accumulates the content in a buffer; the concatinated content is provided to the top rule
-     * just before any start or end tag.
-     */
-    public void characters(char[] ch, int start, int length) throws SAXException
-    {
-        _contentBuffer.append(ch, start, length);
-    }
-
-    /**
-     * Pops the top rule off the stack and invokes {@link IRule#endElement(RuleDirectedParser)}.
-     */
-    public void endElement(String uri, String localName, String qName) throws SAXException
-    {
-        fireContentRule();
-
-        _uri = uri;
-        _localName = localName;
-        _qName = qName;
-
-        popRule().endElement(this);
-    }
-
-    /**
-     * Ignorable content is ignored.
-     */
-    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException
-    {
-    }
-
-    /**
-     * Invokes {@link #selectRule(String, Attributes)}to choose a new rule, which is pushed onto
-     * the rule stack, then invokes {@link IRule#startElement(RuleDirectedParser, Attributes)}.
-     */
-    public void startElement(String uri, String localName, String qName, Attributes attributes)
-      throws SAXException
-    {
-        fireContentRule();
-
-        _uri = uri;
-        _localName = localName;
-        _qName = qName;
-
-        String name = extractName(uri, localName, qName);
-
-        IRule newRule = selectRule(name, attributes);
-
-        pushRule(newRule);
-
-        newRule.startElement(this, attributes);
-    }
-
-    private String extractName(String uri, String localName, String qName)
-    {
-        return HiveMind.isBlank(localName) ? qName : localName;
-    }
-
-    /**
-     * Uses {@link javax.xml.parsers.SAXParserFactory}to create a instance of a validation SAX2
-     * parser.
-     */
-    protected synchronized SAXParser constructParser()
-    {
-        if (_parserFactory == null)
-        {
-            _parserFactory = SAXParserFactory.newInstance();
-            configureParserFactory(_parserFactory);
-        }
-
-        try
-        {
-            return _parserFactory.newSAXParser();
-        }
-        catch (SAXException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-        catch (ParserConfigurationException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-
-    }
-
-    /**
-     * Configures a {@link SAXParserFactory}before {@link SAXParserFactory#newSAXParser()}is
-     * invoked. The default implementation sets validating to true and namespaceAware to false,
-     */
-
-    protected void configureParserFactory(SAXParserFactory factory)
-    {
-        factory.setValidating(true);
-        factory.setNamespaceAware(false);
-    }
-
-    /**
-     * Throws the exception.
-     */
-    public void error(SAXParseException ex) throws SAXException
-    {
-        fatalError(ex);
-    }
-
-    /**
-     * Throws the exception.
-     */
-    public void fatalError(SAXParseException ex) throws SAXException
-    {
-        // Sometimes, a bad parse "corrupts" a parser so that it doesn't
-        // work properly for future parses (of valid documents),
-        // so discard it here.
-
-        _parser = null;
-
-        throw ex;
-    }
-
-    /**
-     * Throws the exception.
-     */
-    public void warning(SAXParseException ex) throws SAXException
-    {
-        fatalError(ex);
-    }
-
-    public InputSource resolveEntity(String publicId, String systemId) throws SAXException
-    {
-        String entityPath = null;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Attempting to resolve entity; publicId = " + publicId + " systemId = "
-                      + systemId);
-
-        if (_entities != null)
-            entityPath = (String) _entities.get(publicId);
-
-        if (entityPath == null)
-        {
-            if (LOG.isDebugEnabled())
-                LOG.debug("Entity not found, using " + systemId);
-
-            return null;
-        }
-
-        InputStream stream = getClass().getResourceAsStream(entityPath);
-
-        InputSource result = new InputSource(stream);
-
-        if (result != null && LOG.isDebugEnabled())
-            LOG.debug("Resolved " + publicId + " as " + result + " (for " + entityPath + ")");
-
-        return result;
-    }
-
-    /**
-     * Validates that the input value matches against the specified Perl5 pattern. If valid, the
-     * method simply returns. If not a match, then an error message is generated (using the errorKey
-     * and the input value) and a {@link InvalidStringException}is thrown.
-     */
-
-    public void validate(String value, String pattern, String errorKey)
-    {
-        if (_matcher == null)
-            _matcher = new RegexpMatcher();
-
-        if (_matcher.matches(pattern, value))
-            return;
-
-        throw new InvalidStringException(Tapestry.format(errorKey, value), value, getLocation());
-    }
-
-    public Resource getDocumentLocation()
-    {
-        return _documentLocation;
-    }
-
-    /**
-     * Returns the localName for the current element.
-     *
-     * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String,
-     *      java.lang.String, org.xml.sax.Attributes)
-     */
-    public String getLocalName()
-    {
-        return _localName;
-    }
-
-    /**
-     * Returns the qualified name for the current element.
-     *
-     * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String,
-     *      java.lang.String, org.xml.sax.Attributes)
-     */
-    public String getQName()
-    {
-        return _qName;
-    }
-
-    /**
-     * Returns the URI for the current element.
-     *
-     * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String,
-     *      java.lang.String, org.xml.sax.Attributes)
-     */
-    public String getUri()
-    {
-        return _uri;
-    }
-
-    private void fireContentRule()
-    {
-        String content = _contentBuffer.toString();
-        _contentBuffer.setLength(0);
-
-        if (!_ruleStack.isEmpty())
-            peekRule().content(this, content);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/package.html
deleted file mode 100644
index 64f9ab9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/util/xml/package.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-
-<body>
-
-<p>Base classes for streamlining the process of parsing an XML document.  This is primarily 
-used with a validating parser, where the DTD is stored within the classpath.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/AbstractNumericValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/AbstractNumericValidator.java
deleted file mode 100644
index ed8f51f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/AbstractNumericValidator.java
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * Base class for a number of implementations of {@link org.apache.tapestry.valid.IValidator},
- * meant to replace the awkward {@link org.apache.tapestry.valid.NumberValidator}.
- * 
- * @author Howard M. Lewis Ship
- */
-public abstract class AbstractNumericValidator extends BaseValidator
-{
-    private boolean _zeroIsNull;
-
-    private String _scriptPath = getDefaultScriptPath();
-    
-    private String _invalidNumericFormatMessage;
-
-    private String _invalidIntegerFormatMessage;
-
-    private String _numberTooSmallMessage;
-
-    private String _numberTooLargeMessage;
-
-    private String _numberRangeMessage;
-    
-    public AbstractNumericValidator()
-    {
-        super();
-    }
-
-    public AbstractNumericValidator(String initializer)
-    {
-        super(initializer);
-    }
-
-    public AbstractNumericValidator(boolean required)
-    {
-        super(required);
-    }
-
-    /**
-     * If true, then when rendering, a zero is treated as a non-value, and null is returned. If
-     * false, the default, then zero is rendered as zero.
-     */
-
-    public boolean getZeroIsNull()
-    {
-        return _zeroIsNull;
-    }
-
-    public void setZeroIsNull(boolean zeroIsNull)
-    {
-        _zeroIsNull = zeroIsNull;
-    }
-
-    /**
-     * @since 2.2
-     */
-    public String getScriptPath()
-    {
-        return _scriptPath;
-    }
-
-    /**
-     * Allows a developer to use the existing validation logic with a different client-side script.
-     * This is often sufficient to allow application-specific error presentation (perhaps by using
-     * DHTML to update the content of a &lt;span&gt; tag, or to use a more sophisticated pop-up
-     * window than <code>window.alert()</code>).
-     * 
-     * @since 2.2
-     */
-    public void setScriptPath(String scriptPath)
-    {
-        _scriptPath = scriptPath;
-    }
-
-    /** @since 3.0 */
-    public String getInvalidNumericFormatMessage()
-    {
-        return _invalidNumericFormatMessage;
-    }
-
-    /** @since 3.0 */
-    public String getInvalidIntegerFormatMessage()
-    {
-        return _invalidIntegerFormatMessage;
-    }
-
-    /** @since 3.0 */
-    public String getNumberRangeMessage()
-    {
-        return _numberRangeMessage;
-    }
-
-    /** @since 3.0 */
-    public String getNumberTooLargeMessage()
-    {
-        return _numberTooLargeMessage;
-    }
-
-    /** @since 3.0 */
-    public String getNumberTooSmallMessage()
-    {
-        return _numberTooSmallMessage;
-    }
-
-    /**
-     * Overrides the <code>invalid-numeric-format</code> bundle key. Parameter {0} is the display
-     * name of the field.
-     * 
-     * @since 3.0
-     */
-    public void setInvalidNumericFormatMessage(String string)
-    {
-        _invalidNumericFormatMessage = string;
-    }
-
-    /**
-     * Overrides the <code>invalid-int-format</code> bundle key. Parameter {0} is the display name
-     * of the field.
-     * 
-     * @since 3.0
-     */
-    public void setInvalidIntegerFormatMessage(String string)
-    {
-        _invalidIntegerFormatMessage = string;
-    }
-
-    /**
-     * Overrides the <code>number-range</code> bundle key. Parameter [0} is the display name of
-     * the field. Parameter {1} is the minimum value. Parameter {2} is the maximum value.
-     * 
-     * @since 3.0
-     */
-    public void setNumberRangeMessage(String string)
-    {
-        _numberRangeMessage = string;
-    }
-
-    /**
-     * Overrides the <code>number-too-large</code> bundle key. Parameter {0} is the display name
-     * of the field. Parameter {1} is the maximum allowed value.
-     * 
-     * @since 3.0
-     */
-    public void setNumberTooLargeMessage(String string)
-    {
-        _numberTooLargeMessage = string;
-    }
-
-    /**
-     * Overrides the <code>number-too-small</code> bundle key. Parameter {0} is the display name
-     * of the field. Parameter {1} is the minimum allowed value.
-     * 
-     * @since 3.0
-     */
-    public void setNumberTooSmallMessage(String string)
-    {
-        _numberTooSmallMessage = string;
-    }
-
-    /** @since 3.0 */
-    protected String buildInvalidNumericFormatMessage(IFormComponent field)
-    {
-        String pattern = getPattern(
-                getInvalidNumericFormatMessage(),
-                "invalid-numeric-format",
-                field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName());
-    }
-
-    protected String buildNumberTooSmallMessage(IFormComponent field, Number minimum)
-    {
-        String pattern = getPattern(getNumberTooSmallMessage(), "number-too-small", field.getPage()
-                .getLocale());
-
-        return formatString(pattern, field.getDisplayName(), minimum);
-    }
-
-    /** @since 3.0 */
-    protected String buildInvalidIntegerFormatMessage(IFormComponent field)
-    {
-        String pattern = getPattern(getInvalidIntegerFormatMessage(), "invalid-int-format", field
-                .getPage().getLocale());
-    
-        return formatString(pattern, field.getDisplayName());
-    }
-
-    /**
-     * @since 3.0
-     */
-    protected String buildNumberTooLargeMessage(IFormComponent field, Number maximum)
-    {
-        String pattern = getPattern(getNumberTooLargeMessage(), "number-too-large", field.getPage()
-                .getLocale());
-    
-        return formatString(pattern, field.getDisplayName(), maximum);
-    }
-
-    protected String buildNumberRangeMessage(IFormComponent field, Number mininum, Number maximum)
-    {
-        String pattern = getPattern(getNumberRangeMessage(), "number-range", field.getPage()
-                .getLocale());
-    
-        return formatString(pattern, new Object[]
-        { field.getDisplayName(), mininum, maximum });
-    }
-
-    protected String buildRangeMessage(IFormComponent field, Number minimum, Number maximum)
-    {
-        if (minimum != null && maximum != null)
-            return buildNumberRangeMessage(field, minimum, maximum);
-    
-        if (maximum != null)
-            return buildNumberTooLargeMessage(field, maximum);
-    
-        return buildNumberTooSmallMessage(field, minimum);
-    }
-    
-    protected abstract String getDefaultScriptPath();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/BaseValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/BaseValidator.java
deleted file mode 100644
index 97fa058..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/BaseValidator.java
+++ /dev/null
@@ -1,339 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * Abstract base class for {@link IValidator}. Supports a required and locale property.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-
-public abstract class BaseValidator implements IValidator
-{
-    /**
-     * Input Symbol used to represent the field being validated.
-     * 
-     * @see #processValidatorScript(String, IRequestCycle, IFormComponent, Map)
-     * @since 2.2
-     */
-
-    public static final String FIELD_SYMBOL = "field";
-
-    /**
-     * Input symbol used to represent the validator itself to the script.
-     * 
-     * @see #processValidatorScript(String, IRequestCycle, IFormComponent, Map)
-     * @since 2.2
-     */
-
-    public static final String VALIDATOR_SYMBOL = "validator";
-
-    /**
-     * Input symbol used to represent the {@link IForm}containing the field to the script.
-     * 
-     * @see #processValidatorScript(String, IRequestCycle, IFormComponent, Map)
-     * @since 2.2
-     */
-
-    public static final String FORM_SYMBOL = "form";
-
-    /**
-     * Output symbol set by the script asthe name of the validator JavaScript function. The function
-     * implemented must return true or false (true if the field is valid, false otherwise). After
-     * the script is executed, the function is added to the {@link IForm}as a
-     * {@link org.apache.tapestry.form.FormEventType#SUBMIT}.
-     * 
-     * @see #processValidatorScript(String, IRequestCycle, IFormComponent, Map)
-     * @since 2.2
-     */
-
-    public static final String FUNCTION_SYMBOL = "function";
-
-    private boolean _required;
-
-    /** @since 3.0 */
-
-    private String _requiredMessage;
-
-    /**
-     * @since 2.2
-     */
-
-    private boolean _clientScriptingEnabled = false;
-    
-    /**
-     * @since 4.1
-     */
-    private IScriptSource _scriptSource;
-    
-    /**
-     * Standard constructor. Leaves locale as system default and required as false.
-     */
-
-    public BaseValidator()
-    {
-    }
-
-    /**
-     * Allow the validator to be initialized with a property initialization string.
-     * 
-     * @since 4.0
-     */
-    public BaseValidator(String initializer)
-    {
-        PropertyUtils.configureProperties(this, initializer);
-    }
-
-    protected BaseValidator(boolean required)
-    {
-        _required = required;
-    }
-    
-    public boolean isRequired()
-    {
-        return _required;
-    }
-
-    public void setRequired(boolean required)
-    {
-        _required = required;
-    }
-    
-    public void setScriptSource(IScriptSource scriptSource)
-    {
-        _scriptSource = scriptSource;
-    }
-    
-    /**
-     * Gets a pattern, either as the default value, or as a localized key. If override is null, then
-     * the key from the <code>org.apache.tapestry.valid.ValidationStrings</code>
-     * {@link ResourceBundle}(in the specified locale) is used. The pattern can then be used with
-     * {@link #formatString(String, Object[])}.
-     * <p>
-     * Why do we not just lump these strings into TapestryStrings.properties? because
-     * TapestryStrings.properties is localized to the server's locale, which is fine for the
-     * logging, debugging and error messages it contains. For field validation, whose errors are
-     * visible to the end user normally, we want to localize to the page's locale.
-     * 
-     * @param override
-     *            The override value for the localized string from the bundle.
-     * @param key
-     *            used to lookup pattern from bundle, if override is null.
-     * @param locale
-     *            used to get right localization of bundle.
-     * @since 3.0
-     */
-
-    protected String getPattern(String override, String key, Locale locale)
-    {
-        if (override != null)
-            return override;
-
-        ResourceBundle strings = ResourceBundle.getBundle(
-                "org.apache.tapestry.valid.ValidationStrings",
-                locale);
-
-        return strings.getString(key);
-    }
-
-    /**
-     * Gets a string from the standard resource bundle. The string in the bundle is treated as a
-     * pattern for {@link MessageFormat#format(java.lang.String, java.lang.Object[])}.
-     * 
-     * @param pattern
-     *            string the input pattern to be used with
-     *            {@link MessageFormat#format(java.lang.String, java.lang.Object[])}. It may
-     *            contain replaceable parameters, {0}, {1}, etc.
-     * @param args
-     *            the arguments used to fill replaceable parameters {0}, {1}, etc.
-     * @since 3.0
-     */
-
-    protected String formatString(String pattern, Object[] args)
-    {
-        return MessageFormat.format(pattern, args);
-    }
-
-    /**
-     * Convienience method for invoking {@link #formatString(String, Object[])}.
-     * 
-     * @since 3.0
-     */
-
-    protected String formatString(String pattern, Object arg)
-    {
-        return formatString(pattern, new Object[]
-        { arg });
-    }
-
-    /**
-     * Convienience method for invoking {@link #formatString(String, Object[])}.
-     * 
-     * @since 3.0
-     */
-
-    protected String formatString(String pattern, Object arg1, Object arg2)
-    {
-        return formatString(pattern, new Object[]
-        { arg1, arg2 });
-    }
-
-    /**
-     * Invoked to check if the value is null. If the value is null (or empty), but the required flag
-     * is set, then this method throws a {@link ValidatorException}. Otherwise, returns true if the
-     * value is null.
-     */
-
-    protected boolean checkRequired(IFormComponent field, String value) throws ValidatorException
-    {
-        boolean isEmpty = HiveMind.isBlank(value);
-
-        if (_required && isEmpty)
-            throw new ValidatorException(buildRequiredMessage(field), ValidationConstraint.REQUIRED);
-
-        return isEmpty;
-    }
-
-    /**
-     * Builds an error message indicating a value for a required field was not supplied.
-     * 
-     * @since 3.0
-     */
-
-    protected String buildRequiredMessage(IFormComponent field)
-    {
-        String pattern = getPattern(_requiredMessage, "field-is-required", field.getPage()
-                .getLocale());
-
-        return formatString(pattern, field.getDisplayName());
-    }
-
-    /**
-     * This implementation does nothing. Subclasses may supply their own implementation.
-     * 
-     * @since 2.2
-     */
-
-    public void renderValidatorContribution(IFormComponent field, IMarkupWriter writer,
-            IRequestCycle cycle)
-    {
-    }
-
-    /**
-     * Invoked (from sub-class implementations of
-     * {@link #renderValidatorContribution(IFormComponent, IMarkupWriter, IRequestCycle)}to process
-     * a standard validation script. This expects that:
-     * <ul>
-     * <li>The {@link IFormComponent}is (ultimately) wrapped by a {@link Body}
-     * <li>The script generates a symbol named "function" (as per {@link #FUNCTION_SYMBOL})
-     * </ul>
-     * 
-     * @param scriptPath
-     *            the resource path of the script to execute
-     * @param cycle
-     *            The active request cycle
-     * @param field
-     *            The field to be validated
-     * @param symbols
-     *            a set of input symbols needed by the script. These symbols are augmented with
-     *            symbols for the field, form and validator. symbols may be null, but will be
-     *            modified if not null.
-     * @throws ApplicationRuntimeException
-     *             if there's an error processing the script.
-     * @since 2.2
-     */
-
-    protected void processValidatorScript(String scriptPath, IRequestCycle cycle,
-            IFormComponent field, Map symbols)
-    {
-        IForm form = field.getForm();
-        
-        Map finalSymbols = (symbols == null) ? new HashMap() : symbols;
-        
-        finalSymbols.put(FIELD_SYMBOL, field);
-        finalSymbols.put(FORM_SYMBOL, form);
-        finalSymbols.put(VALIDATOR_SYMBOL, this);
-        
-        Resource location = new ClasspathResource(new DefaultClassResolver(), scriptPath);
-        
-        IScript script = _scriptSource.getScript(location);
-
-        // If there's an error, report it against the field (this validator object doesn't
-        // have a location).
-
-        PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, field);
-
-        script.execute(field, cycle, pageRenderSupport, finalSymbols);
-    }
-
-    /**
-     * Returns true if client scripting is enabled. Some validators are capable of generating
-     * client-side scripting to perform validation when the form is submitted. By default, this flag
-     * is false and subclasses should check it (in
-     * {@link #renderValidatorContribution(IFormComponent, IMarkupWriter, IRequestCycle)}) before
-     * generating client side script.
-     * 
-     * @since 2.2
-     */
-
-    public boolean isClientScriptingEnabled()
-    {
-        return _clientScriptingEnabled;
-    }
-
-    public void setClientScriptingEnabled(boolean clientScriptingEnabled)
-    {
-        _clientScriptingEnabled = clientScriptingEnabled;
-    }
-
-    public String getRequiredMessage()
-    {
-        return _requiredMessage;
-    }
-
-    /**
-     * Overrides the <code>field-is-required</code> bundle key. Parameter {0} is the display name
-     * of the field.
-     * 
-     * @since 3.0
-     */
-
-    public void setRequiredMessage(String string)
-    {
-        _requiredMessage = string;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/DateValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/DateValidator.java
deleted file mode 100644
index 2cc54b9..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/DateValidator.java
+++ /dev/null
@@ -1,354 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * Provides input validation for strings treated as dates. In addition, allows a minimum and maximum
- * date to be set.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-
-public class DateValidator extends BaseValidator
-{
-    public static final String DEFAULT_DISPLAY_FORMAT = "MM/DD/YYYY";
-    
-    public static final DateFormat DEFAULT_DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy");
-    
-    private DateFormat _format;
-
-    private String _displayFormat;
-
-    private Date _minimum;
-
-    private Date _maximum;
-
-    private Calendar _calendar;
-
-    private String _scriptPath = "/org/apache/tapestry/valid/DateValidator.script";
-
-    private String _dateTooEarlyMessage;
-
-    private String _dateTooLateMessage;
-
-    private String _invalidDateFormatMessage;
-
-    public DateValidator()
-    {
-
-    }
-
-    /**
-     * Initializes the DateValidator with properties defined by the initializer.
-     * 
-     * @since 4.0
-     */
-
-    public DateValidator(String initializer)
-    {
-        super(initializer);
-    }
-
-    public void setFormat(DateFormat value)
-    {
-        _format = value;
-    }
-
-    public DateFormat getFormat()
-    {
-        return _format;
-    }
-
-    /**
-     * @return the {@link DateFormat}the validator will use, returning the default if no other date
-     *         format is specified via {@link #setFormat(DateFormat)}
-     * @since 3.0
-     */
-    public DateFormat getEffectiveFormat()
-    {
-        if (_format == null)
-            return DEFAULT_DATE_FORMAT;
-
-        return _format;
-    }
-
-    public String getDisplayFormat()
-    {
-        return _displayFormat;
-    }
-
-    public void setDisplayFormat(String value)
-    {
-        _displayFormat = value;
-    }
-
-    /**
-     * @return the display format message the validator will use, returning the default if no other
-     *         display format message is specified. The default is the
-     *         {@link SimpleDateFormat#toPattern()}for {@link SimpleDateFormat}s, or "MM/DD/YYYY"
-     *         for unknown {@link DateFormat}subclasses.
-     * @since 3.0
-     */
-    public String getEffectiveDisplayFormat()
-    {
-        if (_displayFormat == null)
-        {
-            DateFormat format = getEffectiveFormat();
-            if (format instanceof SimpleDateFormat)
-                return ((SimpleDateFormat) format).toPattern();
-
-            return DEFAULT_DISPLAY_FORMAT;
-        }
-
-        return _displayFormat;
-    }
-
-    public String toString(IFormComponent file, Object value)
-    {
-        if (value == null)
-            return null;
-
-        Date date = (Date) value;
-
-        DateFormat format = getEffectiveFormat();
-
-        // DateFormat is not threadsafe, so guard access to it.
-
-        synchronized (format)
-        {
-            return format.format(date);
-        }
-    }
-
-    public Object toObject(IFormComponent field, String value) throws ValidatorException
-    {
-        if (checkRequired(field, value))
-            return null;
-
-        DateFormat format = getEffectiveFormat();
-
-        Date result;
-
-        try
-        {
-            // DateFormat is not threadsafe, so guard access
-            // to it.
-
-            synchronized (format)
-            {
-                result = format.parse(value);
-            }
-
-            if (_calendar == null)
-                _calendar = new GregorianCalendar();
-
-            _calendar.setTime(result);
-
-            // SimpleDateFormat allows two-digit dates to be
-            // entered, i.e., 12/24/66 is Dec 24 0066 ... that's
-            // probably not what is really wanted, so treat
-            // it as an invalid date.
-
-            if (_calendar.get(Calendar.YEAR) < 1000)
-                result = null;
-
-        }
-        catch (ParseException ex)
-        {
-            // ParseException does not include a useful error message
-            // about what's wrong.
-            result = null;
-        }
-
-        if (result == null)
-            throw new ValidatorException(buildInvalidDateFormatMessage(field),
-                    ValidationConstraint.DATE_FORMAT);
-
-        // OK, check that the date is in range.
-
-        if (_minimum != null && _minimum.compareTo(result) > 0)
-            throw new ValidatorException(buildDateTooEarlyMessage(field, format.format(_minimum)),
-                    ValidationConstraint.TOO_SMALL);
-
-        if (_maximum != null && _maximum.compareTo(result) < 0)
-            throw new ValidatorException(buildDateTooLateMessage(field, format.format(_maximum)),
-                    ValidationConstraint.TOO_LARGE);
-
-        return result;
-
-    }
-
-    public Date getMaximum()
-    {
-        return _maximum;
-    }
-
-    public void setMaximum(Date maximum)
-    {
-        _maximum = maximum;
-    }
-
-    public Date getMinimum()
-    {
-        return _minimum;
-    }
-
-    public void setMinimum(Date minimum)
-    {
-        _minimum = minimum;
-    }
-
-    /**
-     * @since 2.2
-     */
-
-    public void renderValidatorContribution(IFormComponent field, IMarkupWriter writer,
-            IRequestCycle cycle)
-    {
-        if (!(isClientScriptingEnabled() && isRequired()))
-            return;
-        
-        Map symbols = new HashMap();
-        
-        symbols.put("requiredMessage", buildRequiredMessage(field));
-        
-        processValidatorScript(_scriptPath, cycle, field, symbols);
-    }
-    
-    /**
-     * @since 2.2
-     */
-
-    public String getScriptPath()
-    {
-        return _scriptPath;
-    }
-
-    /**
-     * Allows a developer to use the existing validation logic with a different client-side script.
-     * This is often sufficient to allow application-specific error presentation (perhaps by using
-     * DHTML to update the content of a &lt;span&gt; tag, or to use a more sophisticated pop-up
-     * window than <code>window.alert()</code>).
-     * 
-     * @since 2.2
-     */
-
-    public void setScriptPath(String scriptPath)
-    {
-        _scriptPath = scriptPath;
-    }
-
-    /** @since 3.0 */
-
-    public String getDateTooEarlyMessage()
-    {
-        return _dateTooEarlyMessage;
-    }
-
-    /** @since 3.0 */
-
-    public String getDateTooLateMessage()
-    {
-        return _dateTooLateMessage;
-    }
-
-    /** @since 3.0 */
-
-    public String getInvalidDateFormatMessage()
-    {
-        return _invalidDateFormatMessage;
-    }
-
-    /** @since 3.0 */
-
-    protected String buildInvalidDateFormatMessage(IFormComponent field)
-    {
-        String pattern = getPattern(_invalidDateFormatMessage, "invalid-date-format", field
-                .getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName(), getEffectiveDisplayFormat());
-    }
-
-    /** @since 3.0 * */
-
-    protected String buildDateTooEarlyMessage(IFormComponent field, String earliestDate)
-    {
-        String pattern = getPattern(_dateTooEarlyMessage, "date-too-early", field.getPage()
-                .getLocale());
-
-        return formatString(pattern, field.getDisplayName(), earliestDate);
-    }
-
-    /** @since 3.0 */
-
-    protected String buildDateTooLateMessage(IFormComponent field, String latestDate)
-    {
-        String pattern = getPattern(_dateTooLateMessage, "date-too-late", field.getPage()
-                .getLocale());
-
-        return formatString(pattern, field.getDisplayName(), latestDate);
-    }
-
-    /**
-     * Overrides the bundle key <code>date-too-early</code>. Parameter {0} is the display name of
-     * the field. Parameter {1} is the earliest allowed date.
-     * 
-     * @since 3.0
-     */
-
-    public void setDateTooEarlyMessage(String string)
-    {
-        _dateTooEarlyMessage = string;
-    }
-
-    /**
-     * Overrides the bundle key <code>date-too-late</code>. Parameter {0} is the display name of
-     * the field. Parameter {1} is the latest allowed date.
-     * 
-     * @since 3.0
-     */
-
-    public void setDateTooLateMessage(String string)
-    {
-        _dateTooLateMessage = string;
-    }
-
-    /**
-     * Overrides the bundle key <code>invalid-date-format</code>. Parameter {0} is the display
-     * name of the field. Parameter {1} is the allowed format.
-     * 
-     * @since 3.0
-     */
-
-    public void setInvalidDateFormatMessage(String string)
-    {
-        _invalidDateFormatMessage = string;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/DateValidator.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/DateValidator.script
deleted file mode 100644
index a10248a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/DateValidator.script
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://tapestry.apache.org/dtd/Script_3_0.dtd">
-	
-<!-- 
-
-  Creates a script for validating that a date field is required.  Eventually,
-  this will also do client-side input validation.
-  
-  Input symbols:
-     field, form, validator:  As normal for a validation script.
-	 requiredMessage: Message to display if the field is required yet blank.
-     
--->
-	
-<script>
-  
-<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>
-<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>
-<input-symbol key="validator" class="org.apache.tapestry.valid.DateValidator" required="yes"/>
-<input-symbol key="requiredMessage" class="java.lang.String"/>
-
-<let key="function" unique="yes">
-validate_${field.name}
-</let>
-
-<body>
-function ${function}(event)
-{
-  var field = dojo.byId("${field.name}");
-
-  if (field.value.length == 0) {
-     Tapestry.invalid_field(field, "${requiredMessage}");
-     dojo.event.browser.stopEvent(event);
-  }
-}
-</body>
-
-<initialization>
-Tapestry.onsubmit('${form.name}', ${function});
-</initialization>
-
-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/EmailValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/EmailValidator.java
deleted file mode 100644
index d0fc4ae..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/EmailValidator.java
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * Simple validation of email strings, to enforce required, and minimum length
- * (maximum length is enforced in the client browser, by setting a maximum input
- * length on the text field).
- * 
- * @author Malcolm Edgar
- * @since 2.3
- */
-
-public class EmailValidator extends BaseValidator
-{
-
-    private int _minimumLength;
-
-    private String _minimumLengthMessage;
-
-    private String _invalidEmailFormatMessage;
-
-    private String _scriptPath = "/org/apache/tapestry/valid/EmailValidator.script";
-
-    public EmailValidator()
-    {
-    }
-
-    /**
-     * Initializes the EmailValidator with properties defined by the
-     * initializer.
-     * 
-     * @since 4.0
-     */
-
-    public EmailValidator(String initializer)
-    {
-        super(initializer);
-    }
-
-    public String toString(IFormComponent field, Object value)
-    {
-        if (value == null) return null;
-
-        return value.toString();
-    }
-
-    public Object toObject(IFormComponent field, String input)
-        throws ValidatorException
-    {
-        if (checkRequired(field, input)) return null;
-
-        if (_minimumLength > 0 && input.length() < _minimumLength)
-            throw new ValidatorException(buildMinimumLengthMessage(field),
-                    ValidationConstraint.MINIMUM_WIDTH);
-
-        if (!isValidEmail(input))
-            throw new ValidatorException(buildInvalidEmailFormatMessage(field),
-                    ValidationConstraint.EMAIL_FORMAT);
-
-        return input;
-    }
-
-    public int getMinimumLength()
-    {
-        return _minimumLength;
-    }
-
-    public void setMinimumLength(int minimumLength)
-    {
-        _minimumLength = minimumLength;
-    }
-
-    public void renderValidatorContribution(IFormComponent field,
-            IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (!isClientScriptingEnabled()) return;
-
-        Map symbols = new HashMap();
-
-        Locale locale = field.getPage().getLocale();
-        String displayName = field.getDisplayName();
-
-        if (isRequired())
-            symbols.put("requiredMessage", buildRequiredMessage(field));
-
-        if (_minimumLength > 0)
-            symbols.put("minimumLengthMessage",
-                    buildMinimumLengthMessage(field));
-
-        String pattern = getPattern(getInvalidEmailFormatMessage(),
-                "invalid-email-format", locale);
-
-        symbols.put("emailFormatMessage", formatString(pattern, displayName));
-
-        processValidatorScript(_scriptPath, cycle, field, symbols);
-    }
-
-    public String getScriptPath()
-    {
-        return _scriptPath;
-    }
-
-    /**
-     * Allows a developer to use the existing validation logic with a different
-     * client-side script. This is often sufficient to allow
-     * application-specific error presentation (perhaps by using DHTML to update
-     * the content of a &lt;span&gt; tag, or to use a more sophisticated pop-up
-     * window than <code>window.alert()</code>).
-     */
-
-    public void setScriptPath(String scriptPath)
-    {
-        _scriptPath = scriptPath;
-    }
-
-    /**
-     * Return true if the email format is valid.
-     * 
-     * @param email
-     *            the email string to validate
-     * @return true if the email format is valid
-     */
-
-    protected boolean isValidEmail(String email)
-    {
-        int atIndex = email.indexOf('@');
-
-        return !((atIndex <= 0) || (atIndex == email.length() - 1));
-    }
-
-    /** @since 3.0 */
-
-    public String getInvalidEmailFormatMessage()
-    {
-        return _invalidEmailFormatMessage;
-    }
-
-    /** @since 3.0 */
-
-    public String getMinimumLengthMessage()
-    {
-        return _minimumLengthMessage;
-    }
-
-    /**
-     * Overrides the <code>invalid-email-format</code> bundle key. Parameter
-     * {0} is the display name of the field.
-     * 
-     * @since 3.0
-     */
-
-    public void setInvalidEmailFormatMessage(String string)
-    {
-        _invalidEmailFormatMessage = string;
-    }
-
-    /**
-     * Overrides the <code>field-too-short</code> bundle key. Parameter {0} is
-     * the minimum length. Parameter {1} is the display name of the field.
-     * 
-     * @since 3.0
-     */
-    public void setMinimumLengthMessage(String string)
-    {
-        _minimumLengthMessage = string;
-    }
-
-    /** @since 3.0 */
-
-    protected String buildMinimumLengthMessage(IFormComponent field)
-    {
-        String pattern = getPattern(_minimumLengthMessage, "field-too-short",
-                field.getPage().getLocale());
-
-        return formatString(pattern, Integer.toString(_minimumLength), field
-                .getDisplayName());
-    }
-
-    /** @since 3.0 */
-
-    protected String buildInvalidEmailFormatMessage(IFormComponent field)
-    {
-        String pattern = getPattern(_invalidEmailFormatMessage,
-                "invalid-email-format", field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/EmailValidator.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/EmailValidator.script
deleted file mode 100644
index d8c11ea..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/EmailValidator.script
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://tapestry.apache.org/dtd/Script_3_0.dtd">
-
-<!--
-
-  Creates a script for validating that a field is required and/or has a minimum
-  field length.
-
-  Input symbols:
-     field, form, validator:  As normal for a validation script.
-	 requiredMessage: Message to display if the field is required yet blank.
-	 minimumLengthMessage: Message to display if the field length is too short.
-
--->
-
-<script>
-
-<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>
-<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>
-<input-symbol key="validator" class="org.apache.tapestry.valid.EmailValidator" required="yes"/>
-<input-symbol key="requiredMessage" class="java.lang.String"/>
-<input-symbol key="minimumLengthMessage" class="java.lang.String"/>
-<input-symbol key="emailFormatMessage" class="java.lang.String"/>
-
-<let key="function" unique="yes">
-validate_${field.name}
-</let>
-
-<body>
-function ${function}(event)
-{
-  var field = dojo.byId("${field.name}");
-
-  strValue = field.value.replace(/ /g,"");
-
-  field.value = strValue;
-
-<if expression="validator.required">
-  if (strValue.length == 0)
-  {
-    Tapestry.invalid_field(field, "${requiredMessage}");
-    dojo.event.browser.stopEvent(event);
-    return;
-  }
-</if>
-
-<if-not expression="validator.required">
-  if (strValue.length == 0)
-     return;
-</if-not>
-
-<if expression="validator.minimumLength">
-  if (strValue.length &lt; ${validator.minimumLength})
-  {
-    Tapestry.invalid_field(field, "${minimumLengthMessage}");
-    dojo.event.browser.stopEvent(event);
-    return;
-   }
-</if>
-
-  atIndex = strValue.indexOf("@");
-  if ((atIndex == -1) || (atIndex == 0) || (atIndex == strValue.length -1)) {
-    Tapestry.invalid_field(field, "${emailFormatMessage}");
-    dojo.event.browser.stopEvent(event);
-  }
-}
-</body>
-
-<initialization>
-Tapestry.onsubmit('${form.name}', ${function});
-</initialization>
-
-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/FieldLabel.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/FieldLabel.java
deleted file mode 100644
index d81c3d2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/FieldLabel.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * Used to label an {@link IFormComponent}. Because such fields know their
- * displayName (user-presentable name), there's no reason to hard code the label
- * in a page's HTML template (this also helps with localization). [ <a
- * href="../../../../../ComponentReference/FieldLabel.html">Component Reference
- * </a>]
- * 
- * @author Howard Lewis Lewis Ship
- */
-
-public abstract class FieldLabel extends AbstractComponent
-{
-
-    // Parameter
-    public abstract boolean isPrerender();
-
-    /**
-     * Gets the {@link IForm}&nbsp;and {@link IValidationDelegate delegate},
-     * then renders the label obtained from the field. Does nothing when
-     * rewinding.
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = TapestryUtils.getForm(cycle, this);
-        
-        IFormComponent field = getField();
-        
-        if (field != null && isPrerender())
-            form.prerenderField(writer, field, getLocation());
-        
-        if (cycle.isRewinding()) 
-            return;
-        
-        String displayName = getDisplayName();
-        
-        if (displayName == null)
-        {
-            if (field == null)
-                throw Tapestry.createRequiredParameterException(this, "field");
-            
-            displayName = field.getDisplayName();
-            
-            if (displayName == null)
-                throw new BindingException(ValidMessages.noDisplayName(this,
-                        field), this, null, getBinding("field"), null);
-        }
-        
-        IValidationDelegate delegate = form.getDelegate();
-        
-        String id = (field == null) ? null : field.getClientId();
-        
-        if (field != null)
-            delegate.writeLabelPrefix(field, writer, cycle);
-        
-        writer.begin("label");
-        
-        if (id != null) 
-            writer.attribute("for", id);
-        
-        delegate.writeLabelAttributes(writer, cycle, field);
-        renderInformalParameters(writer, cycle);
-        
-        delegate.beforeLabelText(writer, cycle, field);
-        
-        writer.print(displayName, getRaw());
-        
-        delegate.afterLabelText(writer, cycle, field);
-        
-        writer.end();
-        
-        if (field != null)
-            delegate.writeLabelSuffix(field, writer, cycle);
-    }
-
-    /** displayName parameter. */
-    public abstract String getDisplayName();
-
-    /** field parameter. */
-    public abstract IFormComponent getField();
-
-    /** raw parameter. */
-    public abstract boolean getRaw();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/FieldLabel.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/FieldLabel.jwc
deleted file mode 100644
index 1e0d6ea..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/FieldLabel.jwc
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.valid.FieldLabel"
-	allow-body="no"
-	allow-informal-parameters="yes">
-
-  <description>
-  Labels a ValidField of other form element component.
-  </description>
-
-  <parameter name="field" required="yes"/>
-
-  <parameter name="displayName">
-    <description>
-      Optional.  Defaults to the displayName of the associated field.
-      Used to override the field's displayName, or when there is no
-      field.
-    </description>
-  </parameter>
-
-  <parameter name="raw">
-    <description>
-      If false (the default), then HTML characters in the value are escaped.  If
-      true, then value is emitted exactly as is.
-    </description>
-  </parameter>
-  
-  <parameter name="prerender" default-value="true">
-    <description>
-      If true (the default), then the field (if any) will be pre-rendered by the FieldLabel.
-      This is useful when the FieldLabel and field are inside a loop and the FieldLabel
-      precedes the field.  This parameter should be set to false if the FieldLabel occurs
-      after the field.
-    </description>
-  </parameter>
-  
-  <reserved-parameter name="for"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/FieldTracking.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/FieldTracking.java
deleted file mode 100644
index c3b9a0d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/FieldTracking.java
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.io.Serializable;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * Default implementation of {@link IFieldTracking}.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-
-public class FieldTracking implements IFieldTracking, Serializable
-{
-
-    private static final long serialVersionUID = -5397563163968532716L;
-
-    private transient IFormComponent _component;
-
-    private String _input;
-
-    private IRender _renderer;
-
-    private String _fieldName;
-
-    private ValidationConstraint _constraint;
-
-    /**
-     * Constructor used for unassociated errors; errors that are not about any
-     * particular field within the form.
-     */
-
-    FieldTracking()
-    {
-    }
-
-    /**
-     * Standard constructor for a field (with the given name), rendered by the
-     * specified component.
-     */
-
-    FieldTracking(String fieldName, IFormComponent component)
-    {
-        Defense.notNull(fieldName, "fieldName");
-        Defense.notNull(component, "component");
-
-        _fieldName = fieldName;
-        _component = component;
-    }
-
-    public IFormComponent getComponent()
-    {
-        return _component;
-    }
-
-    public IRender getErrorRenderer()
-    {
-        return _renderer;
-    }
-
-    public void setErrorRenderer(IRender value)
-    {
-        _renderer = value;
-    }
-
-    public String getInput()
-    {
-        return _input;
-    }
-
-    public void setInput(String value)
-    {
-        _input = value;
-    }
-
-    public String getFieldName()
-    {
-        return _fieldName;
-    }
-
-    public ValidationConstraint getConstraint()
-    {
-        return _constraint;
-    }
-
-    public void setConstraint(ValidationConstraint constraint)
-    {
-        _constraint = constraint;
-    }
-
-    /** @since 3.0 * */
-
-    public boolean isInError()
-    {
-        return _renderer != null;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IFieldTracking.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IFieldTracking.java
deleted file mode 100644
index 3f8be9a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IFieldTracking.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * Defines the interface for an object that tracks input fields. This interface
- * is now poorly named, in that it tracks errors that may <em>not</em> be
- * associated with a specific field.
- * <p>
- * For each field, a flag is stored indicating if the field is, in fact, in
- * error. The input supplied by the client is stored so that if the form is
- * re-rendered (as is typically done when there are input errors), the value
- * entered by the user can be displayed back to the user. An error message
- * renderer is stored; this is an object that can render the error message (it
- * is usually a {@link org.apache.tapestry.valid.RenderString}&nbsp;wrapper
- * around a simple string).
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-
-public interface IFieldTracking
-{
-
-    /**
-     * Returns true if the field is in error (that is, if it has an error
-     * message {@link #getErrorRenderer() renderer}.
-     */
-
-    boolean isInError();
-
-    /**
-     * Returns the field component. This may return null if the error is not
-     * associated with any particular field. Note: may return null after the
-     * field tracking object is serialized and deserialized (the underlying
-     * component reference is transient); this metehod is primarily used for
-     * testing.
-     */
-
-    IFormComponent getComponent();
-
-    /**
-     * Returns an object that will render the error message. The renderer
-     * <em>must</em> implement a simple <code>toString()</code> that does
-     * not produce markup, but is a simple message.
-     * 
-     * @see ValidatorException#ValidatorException(String, IRender,
-     *      ValidationConstraint)
-     * @since 1.0.9
-     */
-
-    IRender getErrorRenderer();
-
-    /**
-     * Returns the invalid input recorded for the field. This is stored so that,
-     * on a subsequent render, the smae invalid input can be presented to the
-     * client to be corrected.
-     */
-
-    String getInput();
-
-    /**
-     * Returns the name of the field, that is, the name assigned by the form
-     * (this will differ from the component's id when any kind of looping
-     * operation is in effect).
-     */
-
-    String getFieldName();
-
-    /**
-     * Returns the validation constraint that was violated by the input. This
-     * may be null if the constraint isn't known.
-     */
-
-    ValidationConstraint getConstraint();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IValidationDelegate.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IValidationDelegate.java
deleted file mode 100644
index 3b6f0bb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IValidationDelegate.java
+++ /dev/null
@@ -1,410 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.TextField;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * Interface used to track validation errors in forms and
- * {@link IFormComponent form element component}s (including
- * {@link TextField}&nbsp;and its subclasses).
- * <p>
- * In addition, controls how fields that are in error are presented (they can be
- * <em>decorated</em> in various ways by the delegate; the default
- * implementation adds two red asterisks to the right of the field).
- * <p>
- * Each {@link org.apache.tapestry.form.Form}&nbsp;must have its own validation
- * delegate instance.
- * <p>
- * Starting with release 1.0.8, this interface was extensively revised (in a
- * non-backwards compatible way) to move the tracking of errors and invalid
- * values (during a request cycle) to the delegate. It has evolved from a
- * largely stateless conduit for error messages into a very stateful tracker of
- * field state.
- * <p>
- * Starting with release 1.0.9, this interface was <em>again</em> reworked, to
- * allow tracking of errors in {@link IFormComponent form components}, and to
- * allow unassociated errors to be tracked. Unassociated errors are "global",
- * they don't apply to any particular field.
- * <p>
- * <b>Fields vs. Form Element Components </b> <br>
- * For most simple forms, these terms are pretty much synonymous. Your form will
- * render normally, and each form element component will render only once. Some
- * of your form components will be {@link ValidField}&nbsp;components and
- * handle most of their validation internally (with the help of
- * {@link IValidator}&nbsp;objects). In addition, your form listener may do
- * additional validation and notify the validation delegate of additional
- * errors, some of which are associated with a particular field, some of which
- * are unassociated with any particular field.
- * <p>
- * But what happens if you use a {@link org.apache.tapestry.components.ForBean}&nbsp;or
- * {@link org.apache.tapestry.form.ListEdit}&nbsp;inside your form? Some of
- * your components will render multiple times. In this case you will have
- * multiple <em>fields</em>. Each field will have a unique field name (the
- * {@link org.apache.tapestry.form.FormSupport#getElementId(IFormComponent) element id},
- * which you can see this in the generated HTML). It is this field name that the
- * delegate keys off of, which means that some fields generated by a component
- * may have errors and some may not, it all works fine (with one exception).
- * <p>
- * <b>The Exception </b> <br>
- * The problem is that a component doesn't know its field name until its
- * <code>render()</code> method is invoked (at which point, it allocates a
- * unique field name from the
- * {@link org.apache.tapestry.IForm#getElementId(org.apache.tapestry.form.IFormComponent)}.
- * This is not a problem for the field or its {@link IValidator}, but screws
- * things up for the {@link FieldLabel}.
- * <p>
- * Typically, the label is rendered <em>before</em> the corresponding form
- * component. Form components leave their last assigned field name in their
- * {@link IFormComponent#getName() name property}. So if the form component is
- * in any kind of loop, the {@link FieldLabel}will key its name,
- * {@link IFormComponent#getDisplayName() display name} and error status off of
- * its last renderred value. So the moral of the story is don't use
- * {@link FieldLabel}in this situation.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IValidationDelegate extends Serializable
-{
-
-    /**
-     * Invoked before other methods to configure the delegate for the given form
-     * component. Sets the current field based on the
-     * {@link IFormComponent#getName() name} of the form component.
-     * <p>
-     * The caller should invoke this with a parameter of null to record
-     * unassociated global errors (errors not associated with any particular
-     * field).
-     * 
-     * @since 1.0.8
-     */
-
-    void setFormComponent(IFormComponent component);
-
-    /**
-     * Returns true if the current field is in error (that is, had bad input
-     * submitted by the end user).
-     * 
-     * @since 1.0.8
-     */
-
-    boolean isInError();
-
-    /**
-     * Returns the string submitted by the client as the value for the current
-     * field.
-     * 
-     * @since 1.0.8
-     */
-
-    String getFieldInputValue();
-
-    /**
-     * Returns a {@link List} of {@link IFieldTracking}, in default order (the
-     * order in which fields are renderred). A caller should not change the
-     * values (the List is immutable). May return null if no fields are in
-     * error.
-     * 
-     * @since 1.0.8
-     */
-
-    List getFieldTracking();
-
-    /**
-     * Resets any tracking information for the current field. This will clear
-     * the field's inError flag, and set its error message and invalid input
-     * value to null.
-     * 
-     * @since 1.0.8
-     */
-
-    void reset();
-
-    /**
-     * Clears all tracking information.
-     * 
-     * @since 1.0.10
-     */
-
-    void clear();
-
-    /**
-     * Clears all errors, but maintains user input. This is useful when a form
-     * has been submitted for a semantic other than "process this data". A
-     * common example of this is a dependent drop down list; selecting an option
-     * in one drop down list forces a refresh submit of the form, to repopulate
-     * the options in a second, dependent drop down list.
-     * <p>
-     * In these cases, the user input provided in the request is maintained, but
-     * any errors should be cleared out (to prevent unwanted error messages and
-     * decorations).
-     * 
-     * @since 3.0.1
-     */
-
-    void clearErrors();
-
-    /**
-     * Records the user's input for the current form component. Input should be
-     * recorded even if there isn't an explicit error, since later form-wide
-     * validations may discover an error in the field.
-     * 
-     * @since 3.0
-     */
-
-    void recordFieldInputValue(String input);
-
-    /**
-     * The error notification method, invoked during the rewind phase (that is,
-     * while HTTP parameters are being extracted from the request and assigned
-     * to various object properties).
-     * <p>
-     * Typically, the delegate simply invokes
-     * {@link #record(String, ValidationConstraint)}or
-     * {@link #record(IRender, ValidationConstraint)}, but special delegates
-     * may override this behavior to provide (in some cases) different error
-     * messages or more complicated error renderers.
-     */
-
-    void record(ValidatorException ex);
-
-    /**
-     * Records an error in the current field, or an unassociated error if there
-     * is no current field.
-     * 
-     * @param message
-     *            message to display (@see RenderString}
-     * @param constraint
-     *            the constraint that was violated, or null if not known
-     * @since 1.0.9
-     */
-
-    void record(String message, ValidationConstraint constraint);
-
-    /**
-     * Convienience for recording a standard string messages against a field.
-     * 
-     * @param field
-     *            the field to record the error message against, or null to
-     *            record an unassociated error
-     * @param message
-     *            the error message to record
-     * @since 4.0
-     */
-
-    void record(IFormComponent field, String message);
-
-    /**
-     * Records an error in the current component, or an unassociated error. The
-     * maximum flexibility recorder.
-     * 
-     * @param errorRenderer
-     *            object that will render the error message (@see RenderString}
-     * @param constraint
-     *            the constraint that was violated, or null if not known
-     */
-
-    void record(IRender errorRenderer, ValidationConstraint constraint);
-
-    /**
-     * Invoked before the field is rendered. If the field is in error, the
-     * delegate may decorate the field in some way (to highlight its error
-     * state).
-     * 
-     * @param writer
-     *            the writer to which output should be sent
-     * @param cycle
-     *            the active request cycle
-     * @param component
-     *            the component being decorated
-     * @param validator
-     *            the validator for the component, or null if the component does
-     *            have (or doesn't support) a validator
-     */
-
-    void writePrefix(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator);
-
-    /**
-     * Invoked just before the &lt;input&gt; element is closed. The delegate can
-     * write additional attributes. This is often used to set the CSS class of
-     * the field so that it can be displayed differently, if in error (or
-     * required). *
-     * 
-     * @param writer
-     *            the writer to which output should be sent
-     * @param cycle
-     *            the active request cycle
-     * @param component
-     *            the component being decorated
-     * @param validator
-     *            the validator for the component, or null if the component does
-     *            have (or doesn't support) a validator
-     * @since 1.0.5
-     */
-
-    void writeAttributes(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator);
-
-    /**
-     * Invoked after the form component is rendered, so that the delegate may
-     * decorate the form component (if it is in error). *
-     * 
-     * @param writer
-     *            the writer to which output should be sent
-     * @param cycle
-     *            the active request cycle
-     * @param component
-     *            the component being decorated
-     * @param validator
-     *            the validator for the component, or null if the component does
-     *            have (or doesn't support) a validator
-     */
-
-    void writeSuffix(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator);
-
-    /**
-     * Invoked by a {@link FieldLabel} just before writing the name of the form
-     * component.
-     */
-
-    void writeLabelPrefix(IFormComponent component,
-            IMarkupWriter writer, IRequestCycle cycle);
-    
-    /**
-     * Invoked just before the &lt;label&gt; element is closed. The delegate can
-     * write additional attributes. This is often used to set the CSS class of
-     * the label so that it can be displayed differently, if in error (or
-     * required). Any attributes written here will be overriden by any informal
-     * parameters specified in the {@link FieldLabel} implementation.
-     * 
-     * @param writer
-     *            the writer to which output should be sent
-     * @param cycle
-     *            the active request cycle
-     * @param component
-     *            the component field that label decorates
-     * @since 4.0.1
-     */
-
-    void writeLabelAttributes(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component);
-    
-    /**
-     * Invoked just before the actual field label text is written, right after all attributes and 
-     * informal parameters are done being printed on the <code>&lt;label&gt;</code> tag. 
-     * 
-     * <p>
-     *  Example, writing content would go here:
-     * </p>
-     * <p>
-     *  &lt;label class="error"&gt &gt;&gt;here&lt;&lt; LABEL TEXT &lt;/label&gt;
-     * </p>
-     * 
-     * @param writer
-     *          The writer to use.
-     * @param cycle
-     *          Current request cycle.
-     * @param component
-     *          Field label is bound to.
-     */
-    void beforeLabelText(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component);
-    
-    /**
-     * Invoked just before the closing <code>&lt;/label&gt;</code> tag is written.
-     * 
-     * <p>
-     *  Example, writing content would go here:
-     * </p>
-     * <p>
-     *  &lt;label class="error"&gt LABEL TEXT  &gt;&gt;here&lt;&lt;  &lt;/label&gt;
-     * </p>
-     * 
-     * @param writer
-     *          The writer to use.
-     * @param cycle
-     *          Current request cycle.
-     * @param component
-     *          Field label is bound to.
-     */
-    void afterLabelText(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component);
-    
-    /**
-     * Invoked by a {@link FieldLabel} just after writing the name of the form
-     * component.
-     */
-
-    void writeLabelSuffix(IFormComponent component, IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     * Returns true if any form component has errors.
-     */
-
-    boolean getHasErrors();
-
-    /**
-     * Returns the {@link IFieldTracking}&nbsp;for the current component, if
-     * any. Useful when displaying error messages for individual fields.
-     * 
-     * @since 3.0.2
-     */
-    IFieldTracking getCurrentFieldTracking();
-
-    /**
-     * Returns a list of {@link org.apache.tapestry.IRender} objects, each of
-     * which will render an error message for a field tracked by the delegate,
-     * plus any unassociated errors (for which no specific field is identified).
-     * These objects can be rendered or converted to a string (via toString()).
-     * 
-     * @return non-empty List of {@link org.apache.tapestry.IRender}.
-     */
-
-    List getErrorRenderers();
-
-    /**
-     * Registers a field for automatic focus. The goal is for the first field
-     * that is in error to get focus; failing that, the first required field;
-     * failing that, any field.
-     * 
-     * @param field
-     *            the field requesting focus
-     * @param priority
-     *            a priority level used to determine whether the registered
-     *            field becomes the focus field. Constants for this purpose are
-     *            defined in {@link ValidationConstants}.
-     * @since 4.0
-     */
-
-    void registerForFocus(IFormComponent field, int priority);
-
-    /**
-     * Returns the field to focus upon, based on prior calls to
-     * {@link #registerForFocus(IFormComponent, int)}.
-     * 
-     * @return the field name, or null if no field should receive focus.
-     * @since 4.0
-     */
-    String getFocusField();
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IValidator.java
deleted file mode 100644
index 5e0db97..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IValidator.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * An object that works with an {@link IFormComponent} to format output (convert object values to
- * strings values) and to process input (convert strings to object values and validate them).
- * <p>
- * Note that this interface represents validation as supported in Tapestry 2.x to 3.0. It has been
- * outdated (and will eventually be deprecated) by new support in Tapestry 4.0, centered around the
- * {@link org.apache.tapestry.form.translator.Translator} and
- * {@link org.apache.tapestry.form.validator.Validator} interfaces.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-
-public interface IValidator
-{
-    /**
-     * All validators must implement a required property. If true, the client must supply a non-null
-     * value.
-     */
-
-    boolean isRequired();
-
-    /**
-     * Invoked during rendering to convert an object value (which may be null) to a String. It is
-     * acceptible to return null. The string will be the VALUE attribute of the HTML text field.
-     */
-
-    String toString(IFormComponent field, Object value);
-
-    /**
-     * Converts input, submitted by the client, into an object value. May return null if the input
-     * is null (and the required flag is false).
-     * <p>
-     * The input string will already have been trimmed. It may be null.
-     * 
-     * @throws ValidatorException
-     *             if the string cannot be converted into an object, or the object is not valid (due
-     *             to other constraints).
-     */
-
-    Object toObject(IFormComponent field, String input) throws ValidatorException;
-
-    /**
-     * Invoked by the field after it finishes rendering its tag (but before the tag is closed) to
-     * allow the validator to provide a contribution to the rendering process. Validators typically
-     * generated client-side JavaScript to peform validation.
-     * 
-     * @since 2.2
-     */
-
-    void renderValidatorContribution(IFormComponent field, IMarkupWriter writer,
-            IRequestCycle cycle);
-
-    /**
-     * Sets the script source used to resolve script paths.
-     * 
-     * @param scriptSource
-     */
-    void setScriptSource(IScriptSource scriptSource);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IntValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IntValidator.java
deleted file mode 100644
index 8966bb3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IntValidator.java
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * A type-specific replacement for
- * {@link org.apache.tapestry.valid.NumberValidator}.
- * 
- * @author Howard M. Lewis Ship
- */
-public class IntValidator extends AbstractNumericValidator
-{
-
-    private boolean _minimumSet;
-
-    private int _minimum;
-
-    private boolean _maximumSet;
-
-    private int _maximum;
-
-    public IntValidator()
-    {
-    }
-
-    public IntValidator(String initializer)
-    {
-        super(initializer);
-    }
-
-    public String toString(IFormComponent field, Object value)
-    {
-        if (value == null) return null;
-
-        // Be generous; maybe it isn't quite an int, so
-        // treat it as a Number
-
-        Number number = (Number) value;
-
-        if (getZeroIsNull() && number.intValue() == 0) return null;
-
-        return number.toString();
-    }
-
-    public Object toObject(IFormComponent field, String value)
-        throws ValidatorException
-    {
-        if (checkRequired(field, value)) return null;
-
-        try
-        {
-            int intValue = Integer.parseInt(value);
-
-            if (_minimumSet && intValue < _minimum)
-                throw new ValidatorException(buildNumberTooSmallMessage(field,
-                        new Integer(_minimum)), ValidationConstraint.TOO_SMALL);
-
-            if (_maximumSet && intValue > _maximum)
-                throw new ValidatorException(buildNumberTooLargeMessage(field,
-                        new Integer(_maximum)), ValidationConstraint.TOO_LARGE);
-
-            return new Integer(intValue);
-        }
-        catch (NumberFormatException ex)
-        {
-            throw new ValidatorException(
-                    buildInvalidNumericFormatMessage(field),
-                    ValidationConstraint.NUMBER_FORMAT);
-        }
-    }
-
-    public void renderValidatorContribution(IFormComponent field,
-            IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (!isClientScriptingEnabled()) return;
-
-        if (!(isRequired() || _minimumSet || _maximumSet)) return;
-
-        Map symbols = buildSymbols(field);
-
-        processValidatorScript(getScriptPath(), cycle, field, symbols);
-    }
-
-    Map buildSymbols(IFormComponent field)
-    {
-        Map symbols = new HashMap();
-
-        if (isRequired())
-            symbols.put("requiredMessage", buildRequiredMessage(field));
-
-        symbols.put("formatMessage", buildInvalidIntegerFormatMessage(field));
-
-        if (_minimumSet || _maximumSet)
-        {
-            Number minimum = _minimumSet ? new Integer(_minimum) : null;
-            Number maximum = _maximumSet ? new Integer(_maximum) : null;
-
-            symbols.put("minimum", minimum);
-            symbols.put("maximum", maximum);
-
-            symbols.put("rangeMessage", buildRangeMessage(field, minimum,
-                    maximum));
-        }
-
-        return symbols;
-    }
-
-    public void setMaximum(int maximum)
-    {
-        _maximum = maximum;
-        _maximumSet = true;
-    }
-
-    public void setMinimum(int minimum)
-    {
-        _minimum = minimum;
-        _minimumSet = true;
-    }
-
-    protected String getDefaultScriptPath()
-    {
-        return "/org/apache/tapestry/valid/IntegerValidator.script";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IntegerValidator.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IntegerValidator.script
deleted file mode 100644
index 42e8ea3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/IntegerValidator.script
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC

-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"

-	"http://tapestry.apache.org/dtd/Script_3_0.dtd">

-	

-<!-- 

-

-  Creates a script for validating that an integer field is required and/or has a minimum

-  field length.

-  

-  Input symbols:

-     field, form, validator:  As normal for a validation script.

-     minimum, maximum: Optional, set the range.

-     formatMessage: Message displayed if the input is not valid.

-	   requiredMessage: Message to display if the field is required yet blank.

-	   rangeMessage: Message to display if the field is not in the expected range. 

-     formatExpression: Regular expression for the field.

--->

-	

-<script>

-<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>

-<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>

-<input-symbol key="validator" class="org.apache.tapestry.valid.IValidator" required="yes"/>

-<input-symbol key="minimum" class="java.lang.Number"/>

-<input-symbol key="maximum" class="java.lang.Number"/>

-<input-symbol key="formatMessage" class="java.lang.String" required="yes"/>

-<input-symbol key="requiredMessage" class="java.lang.String"/>

-<input-symbol key="rangeMessage" class="java.lang.String"/>

-

-<let key="function" unique="yes">

-validate_${field.name}

-</let>

-

-<body>

-function ${function}(event)

-{

-  var field = dojo.byId("${field.name}"); 

-  var stringValue = field.value;  

-<if expression="validator.required">

-  if (stringValue.length == 0)

-  {

-     Tapestry.invalid_field(field, "${requiredMessage}");

-     dojo.event.browser.stopEvent(event);

-     return;

-  }

-</if>

-<if-not expression="validator.required">

-  if (stringValue.length == 0)

-     return;

-</if-not>

-  var value = stringValue * 1;

-  if (isNaN(value))

-  {

-    Tapestry.invalid_field(field, "${formatMessage}");

-    dojo.event.browser.stopEvent(event);

-  }

-  var regex = /\./;

-  if (stringValue.search(regex) != -1)

-  {

-    Tapestry.invalid_field(field, "${formatMessage}");

-    dojo.event.browser.stopEvent(event);

-    return;

-  }

-<if expression="minimum != null">

-  if (value &lt; ${minimum})

-  {

-    Tapestry.invalid_field(field, "${rangeMessage}");

-    dojo.event.browser.stopEvent(event);

-    return;

-  }

-</if>

-<if expression="maximum != null">

-  if (value &gt; ${maximum})

-  {

-    Tapestry.invalid_field(field, "${rangeMessage}");

-    dojo.event.browser.stopEvent(event);

-    return;

-  }

-</if>

-}

-</body>

-

-<initialization>

-Tapestry.onsubmit('${form.name}', ${function});

-</initialization>

-

-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/NumberValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/NumberValidator.java
deleted file mode 100644
index 2b3848f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/NumberValidator.java
+++ /dev/null
@@ -1,504 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.lib.util.StrategyRegistry;
-import org.apache.hivemind.lib.util.StrategyRegistryImpl;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.IFormComponent;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Simple validation for standard number classes. This is probably insufficient for anything tricky
- * and application specific, such as parsing currency.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-
-public class NumberValidator extends AbstractNumericValidator
-{
-    public static final int NUMBER_TYPE_INTEGER = 0;
-
-    public static final int NUMBER_TYPE_REAL = 1;
-    
-    private static final Map TYPES = new HashMap();
-    
-    private static StrategyRegistry _numberAdaptors = new StrategyRegistryImpl();
-    
-    static
-    {
-        TYPES.put("boolean", boolean.class);
-        TYPES.put("Boolean", Boolean.class);
-        TYPES.put("java.lang.Boolean", Boolean.class);
-        TYPES.put("char", char.class);
-        TYPES.put("Character", Character.class);
-        TYPES.put("java.lang.Character", Character.class);
-        TYPES.put("short", short.class);
-        TYPES.put("Short", Short.class);
-        TYPES.put("java.lang.Short", Short.class);
-        TYPES.put("int", int.class);
-        TYPES.put("Integer", Integer.class);
-        TYPES.put("java.lang.Integer", Integer.class);
-        TYPES.put("long", long.class);
-        TYPES.put("Long", Long.class);
-        TYPES.put("java.lang.Long", Long.class);
-        TYPES.put("float", float.class);
-        TYPES.put("Float", Float.class);
-        TYPES.put("java.lang.Float", Float.class);
-        TYPES.put("byte", byte.class);
-        TYPES.put("Byte", Byte.class);
-        TYPES.put("java.lang.Byte", Byte.class);
-        TYPES.put("double", double.class);
-        TYPES.put("Double", Double.class);
-        TYPES.put("java.lang.Double", Double.class);
-        TYPES.put("java.math.BigInteger", BigInteger.class);
-        TYPES.put("java.math.BigDecimal", BigDecimal.class);
-    }
-
-    private Class _valueTypeClass = int.class;
-
-    private Number _minimum;
-
-    private Number _maximum;
-
-    /**
-     * This class is not meant for use outside of NumberValidator; it is public only to fascilitate
-     * some unit testing.
-     */
-    public abstract static class NumberStrategy
-    {
-        /**
-         * Parses a non-empty {@link String}into the correct subclass of {@link Number}.
-         * 
-         * @throws NumberFormatException
-         *             if the String can not be parsed.
-         */
-
-        public abstract Number parse(String value);
-
-        /**
-         * Indicates the type of the number represented -- integer or real. The information is used
-         * to build the client-side validator. This method could return a boolean, but returns an
-         * int to allow future extensions of the validator.
-         * 
-         * @return one of the predefined number types
-         */
-        public abstract int getNumberType();
-
-        public int compare(Number left, Number right)
-        {
-            Number comparisonRight = right;
-            if (!left.getClass().equals(comparisonRight.getClass()))
-                comparisonRight = coerce(comparisonRight);
-
-            Comparable lc = (Comparable) left;
-
-            return lc.compareTo(comparisonRight);
-        }
-
-        /**
-         * Invoked when comparing two Numbers of different types. The number is cooerced from its
-         * ordinary type to the correct type for comparison.
-         * 
-         * @since 3.0
-         */
-        protected abstract Number coerce(Number number);
-    }
-
-    /**
-     * Integer adaptor.
-     */
-    private abstract static class IntegerNumberAdaptor extends NumberStrategy
-    {
-        public int getNumberType()
-        {
-            return NUMBER_TYPE_INTEGER;
-        }
-    }
-
-    /**
-     * Integer adaptor.
-     */
-    private abstract static class RealNumberAdaptor extends NumberStrategy
-    {
-        public int getNumberType()
-        {
-            return NUMBER_TYPE_REAL;
-        }
-    }
-
-    /**
-     * Integer adaptor.
-     */
-    private static class ByteAdaptor extends IntegerNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Byte(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Byte(number.byteValue());
-        }
-    }
-
-    /**
-     * Integer adaptor.
-     */
-    private static class ShortAdaptor extends IntegerNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Short(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Short(number.shortValue());
-        }
-    }
-
-    /**
-     * Integer adaptor.
-     */
-    private static class IntAdaptor extends IntegerNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Integer(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Integer(number.intValue());
-        }
-    }
-
-    /**
-     * Integer adaptor.
-     */
-    private static class LongAdaptor extends IntegerNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Long(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Long(number.longValue());
-        }
-    }
-
-    /**
-     * Integer adaptor.
-     */
-    private static class FloatAdaptor extends RealNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Float(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Float(number.floatValue());
-        }
-    }
-
-    /**
-     * Integer adaptor.
-     */
-    private static class DoubleAdaptor extends RealNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Double(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Double(number.doubleValue());
-        }
-    }
-
-    /**
-     * Integer adaptor.
-     */
-    private static class BigDecimalAdaptor extends RealNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new BigDecimal(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new BigDecimal(number.doubleValue());
-        }
-    }
-
-    /**
-     * Integer adaptor.
-     */
-    private static class BigIntegerAdaptor extends IntegerNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new BigInteger(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new BigInteger(number.toString());
-        }
-    }
-
-    static
-    {
-        NumberStrategy byteAdaptor = new ByteAdaptor();
-        NumberStrategy shortAdaptor = new ShortAdaptor();
-        NumberStrategy intAdaptor = new IntAdaptor();
-        NumberStrategy longAdaptor = new LongAdaptor();
-        NumberStrategy floatAdaptor = new FloatAdaptor();
-        NumberStrategy doubleAdaptor = new DoubleAdaptor();
-
-        _numberAdaptors.register(Byte.class, byteAdaptor);
-        _numberAdaptors.register(byte.class, byteAdaptor);
-        _numberAdaptors.register(Short.class, shortAdaptor);
-        _numberAdaptors.register(short.class, shortAdaptor);
-        _numberAdaptors.register(Integer.class, intAdaptor);
-        _numberAdaptors.register(int.class, intAdaptor);
-        _numberAdaptors.register(Long.class, longAdaptor);
-        _numberAdaptors.register(long.class, longAdaptor);
-        _numberAdaptors.register(Float.class, floatAdaptor);
-        _numberAdaptors.register(float.class, floatAdaptor);
-        _numberAdaptors.register(Double.class, doubleAdaptor);
-        _numberAdaptors.register(double.class, doubleAdaptor);
-
-        _numberAdaptors.register(BigDecimal.class, new BigDecimalAdaptor());
-        _numberAdaptors.register(BigInteger.class, new BigIntegerAdaptor());
-    }
-
-    public NumberValidator()
-    {
-
-    }
-
-    /**
-     * Initializes the NumberValidator with properties defined by the initializer.
-     * 
-     * @since 4.0
-     */
-
-    public NumberValidator(String initializer)
-    {
-        PropertyUtils.configureProperties(this, initializer);
-    }
-
-    public String toString(IFormComponent field, Object value)
-    {
-        if (value == null)
-            return null;
-
-        if (getZeroIsNull())
-        {
-            Number number = (Number) value;
-
-            if (number.doubleValue() == 0.0)
-                return null;
-        }
-
-        return value.toString();
-    }
-
-    private NumberStrategy getStrategy(IFormComponent field)
-    {
-        NumberStrategy result = getStrategy(_valueTypeClass);
-
-        if (result == null)
-            throw new ApplicationRuntimeException(Tapestry.format("NumberValidator.no-adaptor-for-field",
-                field,
-                _valueTypeClass.getName()));
-
-        return result;
-    }
-
-    /**
-     * Returns an strategy for the given type.
-     * <p>
-     * Note: this method exists only for testing purposes. It is not meant to be invoked by user
-     * code and is subject to change at any time.
-     * 
-     * @param type
-     *            the type (a Number subclass) for which to return an adaptor
-     * @return the adaptor, or null if no such adaptor may be found
-     * @since 3.0
-     */
-    public static NumberStrategy getStrategy(Class type)
-    {
-        return (NumberStrategy) _numberAdaptors.getStrategy(type);
-    }
-
-    public Object toObject(IFormComponent field, String value) throws ValidatorException
-    {
-        if (checkRequired(field, value))
-            return null;
-
-        NumberStrategy adaptor = getStrategy(field);
-        Number result = null;
-
-        try
-        {
-            result = adaptor.parse(value);
-        }
-        catch (NumberFormatException ex)
-        {
-            throw new ValidatorException(buildInvalidNumericFormatMessage(field),
-                    ValidationConstraint.NUMBER_FORMAT);
-        }
-
-        if (_minimum != null && adaptor.compare(result, _minimum) < 0)
-            throw new ValidatorException(buildNumberTooSmallMessage(field, _minimum),
-                    ValidationConstraint.TOO_SMALL);
-
-        if (_maximum != null && adaptor.compare(result, _maximum) > 0)
-            throw new ValidatorException(buildNumberTooLargeMessage(field, _maximum),
-                    ValidationConstraint.TOO_LARGE);
-
-        return result;
-    }
-
-    public Number getMaximum()
-    {
-        return _maximum;
-    }
-
-    public boolean getHasMaximum()
-    {
-        return _maximum != null;
-    }
-
-    public void setMaximum(Number maximum)
-    {
-        _maximum = maximum;
-    }
-
-    public Number getMinimum()
-    {
-        return _minimum;
-    }
-
-    public boolean getHasMinimum()
-    {
-        return _minimum != null;
-    }
-
-    public void setMinimum(Number minimum)
-    {
-        _minimum = minimum;
-    }
-
-    /**
-     * @since 2.2
-     */
-
-    public void renderValidatorContribution(IFormComponent field, IMarkupWriter writer,
-            IRequestCycle cycle)
-    {
-        if (!isClientScriptingEnabled())
-            return;
-
-        if (!(isRequired() || _minimum != null || _maximum != null))
-            return;
-
-        Map symbols = new HashMap();
-
-        if (isRequired())
-            symbols.put("requiredMessage", buildRequiredMessage(field));
-
-        if (isIntegerNumber())
-            symbols.put("formatMessage", buildInvalidIntegerFormatMessage(field));
-        else
-            symbols.put("formatMessage", buildInvalidNumericFormatMessage(field));
-
-        if (_minimum != null || _maximum != null)
-            symbols.put("rangeMessage", buildRangeMessage(field, _minimum, _maximum));
-
-        processValidatorScript(getScriptPath(), cycle, field, symbols);
-    }
-
-    /**
-     * Sets the value type from a string type name. The name may be a scalar numeric type, a fully
-     * qualified class name, or the name of a numeric wrapper type from java.lang (with the package
-     * name omitted).
-     * 
-     * @since 3.0
-     */
-
-    public void setValueType(String typeName)
-    {
-        Class typeClass = (Class) TYPES.get(typeName);
-
-        if (typeClass == null)
-            throw new ApplicationRuntimeException(Tapestry.format("NumberValidator.unknown-type", typeName));
-
-        _valueTypeClass = typeClass;
-    }
-
-    /** @since 3.0 * */
-
-    public void setValueTypeClass(Class valueTypeClass)
-    {
-        _valueTypeClass = valueTypeClass;
-    }
-
-    /**
-     * Returns the value type to convert strings back into. The default is int.
-     * 
-     * @since 3.0
-     */
-
-    public Class getValueTypeClass()
-    {
-        return _valueTypeClass;
-    }
-
-    /** @since 3.0 */
-
-    public boolean isIntegerNumber()
-    {
-        NumberStrategy strategy = (NumberStrategy) _numberAdaptors.getStrategy(_valueTypeClass);
-        if (strategy == null)
-            return false;
-
-        return strategy.getNumberType() == NUMBER_TYPE_INTEGER;
-    }
-
-    protected String getDefaultScriptPath()
-    {
-        return "/org/apache/tapestry/valid/NumberValidator.script";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/NumberValidator.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/NumberValidator.script
deleted file mode 100644
index a3732d7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/NumberValidator.script
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://tapestry.apache.org/dtd/Script_3_0.dtd">
-	
-<!-- 
-
-  Creates a script for validating that a field is required and/or has a minimum
-  field length.
-  
-  Input symbols:
-     field, form, validator:  As normal for a validation script.
-     formatMessage: Message displayed if the input is not valid.
-	 requiredMessage: Message to display if the field is required yet blank.
-	 rangeMessage: Message to display if the field is not in the expected range. 
-     formatExpression: Regular expression for the field.
--->
-	
-<script>
-<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>
-<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>
-<input-symbol key="validator" class="org.apache.tapestry.valid.NumberValidator" required="yes"/>
-<input-symbol key="formatMessage" class="java.lang.String" required="yes"/>
-<input-symbol key="requiredMessage" class="java.lang.String"/>
-<input-symbol key="rangeMessage" class="java.lang.String"/>
-
-<let key="function" unique="yes">
-validate_${field.name}
-</let>
-
-<body>
-function ${function}(event)
-{
-  var field = dojo.byId("${field.name}");
-  var stringValue = field.value;  
-<if expression="validator.required">
-  if (stringValue.length == 0)
-  {
-     Tapestry.invalid_field(field, "${requiredMessage}");
-     dojo.event.browser.stopEvent(event);
-     return;
-  }
-</if>
-<if-not expression="validator.required">
-  if (stringValue.length == 0)
-     return true;
-</if-not>
-  var value = stringValue * 1;
-  if (isNaN(value))
-  {
-      Tapestry.invalid_field(field, "${formatMessage}");
-      dojo.event.browser.stopEvent(event);
-      return;
-  }
-<if expression="validator.integerNumber">
-  var regex = /\./;
-  if (stringValue.search(regex) != -1)
-  {
-      Tapestry.invalid_field(field, "${formatMessage}");
-      dojo.event.browser.stopEvent(event);
-      return;
-  }
-</if>
-<if expression="validator.minimum != null">
-  if (value &lt; ${validator.minimum})
-  {
-     Tapestry.invalid_field(field, "${rangeMessage}");
-     dojo.event.browser.stopEvent(event);
-     return;
-  }
-</if>
-<if expression="validator.maximum != null">
-  if (value &gt; ${validator.maximum})
-  {
-     Tapestry.invalid_field(field, "${rangeMessage}");
-     dojo.event.browser.stopEvent(event);
-     return;
-  }
-</if>
-}
-</body>
-
-<initialization>
-Tapestry.onsubmit('${form.name}', ${function});
-</initialization>
-
-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/PatternDelegate.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/PatternDelegate.java
deleted file mode 100644
index b340a7f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/PatternDelegate.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-/**
- * Implementations of this interface will provide pattern utility services.
- * 
- * @author  Harish Krishnaswamy
- * @since   3.0
- */
-public interface PatternDelegate
-{
-    /**
-     * Answers the question whether the input string fulfills the pattern string provided.
-     * 
-     * @param patternString The pattern that the input string is compared against.
-     * @param input The string under test.
-     * @return Returns true if the pattern exists in the input string; returns false otherwise.
-     */
-    boolean contains(String patternString, String input);
-    
-    /**
-     * Returns the escaped sequence of characters representing the pattern string provided.
-     * 
-     * @param patternString The raw sequence of characters that represent the pattern.
-     * @return The escaped sequence of characters that represent the pattern.
-     */
-    String getEscapedPatternString(String patternString);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/PatternValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/PatternValidator.java
deleted file mode 100644
index cd8e199..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/PatternValidator.java
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.util.RegexpMatcher;
-
-/**
- * <p>The validator bean that provides a pattern validation service.
- * 
- * <p>The actual pattern matching algorithm is provided by the 
- * {@link org.apache.tapestry.valid.PatternDelegate}. This enables the user to provide
- * custom pattern matching implementations. In the event a custom implementation is not 
- * provided, this validator will use the {@link org.apache.tapestry.util.RegexpMatcher}.
- * 
- * <p>This validator has the ability to provide client side validation on demand. 
- * To enable client side validation simply set the <code>clientScriptingEnabled</code>
- * property to <code>true</code>.
- * The default implementation of the script will be in JavaScript and allows the user to 
- * override this with a custom implementation by setting the path to the custom  
- * script via {@link #setScriptPath(String)}.
- * 
- * @author  Harish Krishnaswamy
- * @since   3.0
- */
-public class PatternValidator extends BaseValidator
-{
-    /**
-     * The pattern that this validator will use to validate the input. The default 
-     * pattern is an empty string.
-     */
-    private String _patternString = "";
-
-    /**
-     * A custom message in the event of a validation failure.
-     */
-    private String _patternNotMatchedMessage;
-
-    /**
-     * The object that handles pattern matching.
-     */
-    private PatternDelegate _patternDelegate;
-
-    /**
-     * The location of the script specification for client side validation.
-     */
-    private String _scriptPath = "/org/apache/tapestry/valid/PatternValidator.script";
-
-    /**
-     * Returns custom validation failure message. The default message comes from 
-     * <code>ValidationStrings.properties</code> file for key 
-     * <code>pattern-not-matched</code>.
-     */
-    public String getPatternNotMatchedMessage()
-    {
-        return _patternNotMatchedMessage;
-    }
-
-    /**
-     * Returns the pattern that this validator uses for validation.
-     */
-    public String getPatternString()
-    {
-        return _patternString;
-    }
-
-    /**
-     * Allows for a custom message to be set typically via the bean specification.
-     */
-    public void setPatternNotMatchedMessage(String message)
-    {
-        _patternNotMatchedMessage = message;
-    }
-
-    /**
-     * Allows the user to change the validation pattern. 
-     */
-    public void setPatternString(String pattern)
-    {
-        _patternString = pattern;
-    }
-
-    /**
-     * Static inner class that acts as a delegate to RegexpMatcher and conforms to the 
-     * PatternDelegate contract.
-     */
-    private static class RegExpDelegate implements PatternDelegate
-    {
-        private RegexpMatcher _matcher;
-
-        private RegexpMatcher getPatternMatcher()
-        {
-            if (_matcher == null)
-                _matcher = new RegexpMatcher();
-
-            return _matcher;
-        }
-
-        public boolean contains(String patternString, String input)
-        {
-            return getPatternMatcher().contains(patternString, input);
-        }
-
-        public String getEscapedPatternString(String patternString)
-        {
-            return getPatternMatcher().getEscapedPatternString(patternString);
-        }
-    }
-
-    /**
-     * Allows for a custom implementation to do the pattern matching. The default pattern 
-     * matching is done with {@link org.apache.tapestry.util.RegexpMatcher}.
-     */
-    public void setPatternDelegate(PatternDelegate patternDelegate)
-    {
-        _patternDelegate = patternDelegate;
-    }
-
-    /**
-     * Returns the custom pattern matcher if one is provided or creates and returns the 
-     * default matcher laziliy.
-     */
-    public PatternDelegate getPatternDelegate()
-    {
-        if (_patternDelegate == null)
-            _patternDelegate = new RegExpDelegate();
-
-        return _patternDelegate;
-    }
-
-    /**
-     * @see org.apache.tapestry.valid.IValidator#toString(org.apache.tapestry.form.IFormComponent, java.lang.Object)
-     */
-    public String toString(IFormComponent field, Object value)
-    {
-        if (value == null)
-            return null;
-
-        return value.toString();
-    }
-
-    private String buildPatternNotMatchedMessage(IFormComponent field, String patternString)
-    {
-        String templateMessage =
-            getPattern(
-                _patternNotMatchedMessage,
-                "pattern-not-matched",
-                field.getPage().getLocale());
-
-        return formatString(templateMessage, field.getDisplayName(), patternString);
-    }
-
-    /**
-     * @see org.apache.tapestry.valid.IValidator#toObject(org.apache.tapestry.form.IFormComponent, java.lang.String)
-     */
-    public Object toObject(IFormComponent field, String input) throws ValidatorException
-    {
-        if (checkRequired(field, input))
-            return null;
-
-        boolean matched = false;
-
-        try
-        {
-            matched = getPatternDelegate().contains(_patternString, input);
-        }
-        catch (Throwable t)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "PatternValidator.pattern-match-error",
-                    _patternString,
-                    field.getDisplayName()),
-                field,
-                field.getLocation(),
-                t);
-        }
-
-        if (!matched)
-            throw new ValidatorException(
-                buildPatternNotMatchedMessage(field, _patternString),
-                ValidationConstraint.PATTERN_MISMATCH);
-
-        return input;
-    }
-
-    /**
-     * Allows for a custom implementation of the client side validation.
-     */
-    public void setScriptPath(String scriptPath)
-    {
-        _scriptPath = scriptPath;
-    }
-
-    /**
-     * @see org.apache.tapestry.valid.IValidator#renderValidatorContribution(org.apache.tapestry.form.IFormComponent, org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    public void renderValidatorContribution(
-        IFormComponent field,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        if (!isClientScriptingEnabled())
-            return;
-
-        Map symbols = new HashMap();
-
-        if (isRequired())
-            symbols.put("requiredMessage", buildRequiredMessage(field));
-
-        symbols.put(
-            "patternNotMatchedMessage",
-            buildPatternNotMatchedMessage(field, getEscapedPatternString()));
-
-        processValidatorScript(_scriptPath, cycle, field, symbols);
-    }
-
-    /**
-     * Returns the escaped sequence of the pattern string for rendering in the error message. 
-     */
-    public String getEscapedPatternString()
-    {
-        return getPatternDelegate().getEscapedPatternString(_patternString);
-    }
-
-    public String toString()
-    {
-        return "Pattern: "
-            + _patternString
-            + "; Script Path: "
-            + _scriptPath
-            + "; Pattern Delegate: "
-            + _patternDelegate;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/PatternValidator.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/PatternValidator.script
deleted file mode 100644
index 421bf53..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/PatternValidator.script
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<!-- 
-
-  Creates a script for validating that a field matches a required pattern.
-  
-  Input symbols:
-     field, form, validator:  As normal for a validation script.
-	 requiredMessage: Message to display if the field is required yet blank.
-	 patternNotMatchedMessage: Message to display if the field does not fulfill the required pattern.
-     
--->
-	
-<script>
-<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>
-<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>
-<input-symbol key="validator" class="org.apache.tapestry.valid.PatternValidator" required="yes"/>
-<input-symbol key="requiredMessage" class="java.lang.String"/>
-<input-symbol key="patternNotMatchedMessage" class="java.lang.String" required="yes"/>
-
-<let key="function" unique="yes">
-    validate_${field.name}
-</let>
-
-<let key="pattern" unique="yes">
-    pattern_${field.name}
-</let>
-
-<body>
-var ${pattern} = new RegExp("${validator.escapedPatternString}");
-
-function ${function}(event)
-{
-    var field = dojo.byId("${field.name}");
-<if expression="validator.required">
-    if (field.value.length == 0)
-    {
-        Tapestry.invalid_field(field, "${requiredMessage}");
-        dojo.event.browser.stopEvent(event);
-        return;
-    }
-</if>
-    if (field.value.length &gt; 0 &amp;&amp; !${pattern}.test(field.value)) {
-        Tapestry.invalid_field(field, "${patternNotMatchedMessage}");
-        dojo.event.browser.stopEvent(event);
-    }
-}
-</body>
-
-<initialization>
-Tapestry.onsubmit('${form.name}', ${function});
-</initialization>
-
-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/RenderString.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/RenderString.java
deleted file mode 100644
index c027970..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/RenderString.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * A wrapper around {@link String}&nbsp;that allows the String to be renderred.
- * This is primarily used to present error messages.
- * 
- * @author Howard Lewis Ship
- */
-
-public class RenderString implements IRender, Serializable
-{
-
-    private static final long serialVersionUID = 6215074338439140780L;
-
-    private String _string;
-
-    private boolean _raw = false;
-
-    public RenderString(String string)
-    {
-        _string = string;
-    }
-
-    /**
-     * @param string
-     *            the string to render
-     * @param raw
-     *            if true, the String is rendered as-is, with no filtering. If
-     *            false (the default), the String is filtered.
-     */
-
-    public RenderString(String string, boolean raw)
-    {
-        _string = string;
-        _raw = raw;
-    }
-
-    /**
-     * Renders the String to the writer. Does nothing if the string is null. If
-     * raw is true, uses {@link IMarkupWriter#printRaw(String)}, otherwise
-     * {@link IMarkupWriter#print(String)}.
-     */
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (_string == null) return;
-
-        writer.print(_string, _raw);
-    }
-
-    public String getString()
-    {
-        return _string;
-    }
-
-    public boolean isRaw()
-    {
-        return _raw;
-    }
-
-    /**
-     * Returns the string that would be rendered. This is part of the contract
-     * for error renderers used with validation ... must provide a
-     * user-presentable toString() that does not include any markup.
-     */
-
-    public String toString()
-    {
-        return _string;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/StringValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/StringValidator.java
deleted file mode 100644
index 58f107d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/StringValidator.java
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * Simple validation of strings, to enforce required, and minimum length
- * (maximum length is enforced in the client browser, by setting a maximum input
- * length on the text field).
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-
-public class StringValidator extends BaseValidator
-{
-
-    private int _minimumLength;
-
-    private String _minimumLengthMessage;
-
-    /** @since 2.2 * */
-
-    private String _scriptPath = "/org/apache/tapestry/valid/StringValidator.script";
-
-    public StringValidator()
-    {
-    }
-
-    /**
-     * Initializes the StringValidator with properties defined by the
-     * initializer.
-     * 
-     * @since 4.0
-     */
-
-    public StringValidator(String initializer)
-    {
-        super(initializer);
-    }
-
-    public String toString(IFormComponent field, Object value)
-    {
-        if (value == null) return null;
-
-        return value.toString();
-    }
-
-    public Object toObject(IFormComponent field, String input)
-        throws ValidatorException
-    {
-        if (checkRequired(field, input)) return null;
-
-        if (_minimumLength > 0 && input.length() < _minimumLength)
-            throw new ValidatorException(buildMinimumLengthMessage(field),
-                    ValidationConstraint.MINIMUM_WIDTH);
-
-        return input;
-    }
-
-    public int getMinimumLength()
-    {
-        return _minimumLength;
-    }
-
-    public void setMinimumLength(int minimumLength)
-    {
-        _minimumLength = minimumLength;
-    }
-
-    /**
-     * @since 2.2
-     */
-
-    public void renderValidatorContribution(IFormComponent field,
-            IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (!isClientScriptingEnabled()) return;
-
-        if (!(isRequired() || _minimumLength > 0)) return;
-
-        Map symbols = new HashMap();
-
-        if (isRequired())
-            symbols.put("requiredMessage", buildRequiredMessage(field));
-
-        if (_minimumLength > 0)
-            symbols.put("minimumLengthMessage",
-                    buildMinimumLengthMessage(field));
-
-        processValidatorScript(_scriptPath, cycle, field, symbols);
-    }
-
-    /**
-     * @since 2.2
-     */
-
-    public String getScriptPath()
-    {
-        return _scriptPath;
-    }
-
-    /**
-     * Allows a developer to use the existing validation logic with a different
-     * client-side script. This is often sufficient to allow
-     * application-specific error presentation (perhaps by using DHTML to update
-     * the content of a &lt;span&gt; tag, or to use a more sophisticated pop-up
-     * window than <code>window.alert()</code>).
-     * 
-     * @since 2.2
-     */
-
-    public void setScriptPath(String scriptPath)
-    {
-        _scriptPath = scriptPath;
-    }
-
-    /** @since 3.0 */
-    public String getMinimumLengthMessage()
-    {
-        return _minimumLengthMessage;
-    }
-
-    /**
-     * Overrides the <code>field-too-short</code> bundle key. Parameter {0} is
-     * the minimum length. Parameter {1} is the display name of the field.
-     * 
-     * @since 3.0
-     */
-
-    public void setMinimumLengthMessage(String string)
-    {
-        _minimumLengthMessage = string;
-    }
-
-    /** @since 3.0 */
-
-    protected String buildMinimumLengthMessage(IFormComponent field)
-    {
-        String pattern = getPattern(_minimumLengthMessage, "field-too-short",
-                field.getPage().getLocale());
-
-        return formatString(pattern, Integer.toString(_minimumLength), field
-                .getDisplayName());
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/StringValidator.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/StringValidator.script
deleted file mode 100644
index f3ebc14..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/StringValidator.script
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://tapestry.apache.org/dtd/Script_3_0.dtd">
-<!--
-
-  Creates a script for validating that a field is required and/or has a minimum
-  field length.
-
-  Input symbols:
-     field, form, validator:  As normal for a validation script.
-	 requiredMessage: Message to display if the field is required yet blank.
-	 minimumLengthMessage: Message to display if the field length is too short.
-
--->
-
-<script>
-
-<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>
-<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>
-<input-symbol key="validator" class="org.apache.tapestry.valid.StringValidator" required="yes"/>
-<input-symbol key="requiredMessage" class="java.lang.String"/>
-<input-symbol key="minimumLengthMessage" class="java.lang.String"/>
-
-<let key="function" unique="yes">
-validate_${field.name}
-</let>
-
-<body>
-function ${function}(event)
-{
-  var field = dojo.byId("${field.name}");
-<if expression="validator.required">
-  if (field.value.length == 0)
-  {
-    Tapestry.invalid_field(field, "${requiredMessage}");
-    dojo.event.browser.stopEvent(event);
-    return;
-  }
-</if>
-<if-not expression="validator.required">
-  if (field.value.length == 0) { return; }
-</if-not>
-
-<if expression="validator.minimumLength">
-  if (field.value.length &lt; ${validator.minimumLength})
-  {
-    Tapestry.invalid_field(field, "${minimumLengthMessage}");
-    dojo.event.browser.stopEvent(event);
-    return;
-  }
-</if>
-}
-</body>
-
-
-<initialization>
-Tapestry.onsubmit('${form.name}', ${function});
-</initialization>
-
-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/UrlValidator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/UrlValidator.java
deleted file mode 100644
index c74eed6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/UrlValidator.java
+++ /dev/null
@@ -1,302 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.Vector;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.util.StringSplitter;
-
-/**
- * @since 3.0
- */
-public class UrlValidator extends BaseValidator
-{
-
-    private int _minimumLength;
-
-    private String _minimumLengthMessage;
-
-    private String _invalidUrlFormatMessage;
-
-    private String _disallowedProtocolMessage;
-
-    private Collection _allowedProtocols;
-
-    private String _scriptPath = "/org/apache/tapestry/valid/UrlValidator.script"; //$NON-NLS-1$
-
-    public UrlValidator()
-    {
-    }
-
-    /**
-     * Initializes the UrlValidator with properties defined by the initializer.
-     * 
-     * @since 4.0
-     */
-
-    public UrlValidator(String initializer)
-    {
-        super(initializer);
-    }
-
-    public String toString(IFormComponent field, Object value)
-    {
-        if (value == null) return null;
-
-        return value.toString();
-    }
-
-    public Object toObject(IFormComponent field, String input)
-        throws ValidatorException
-    {
-        if (checkRequired(field, input)) return null;
-
-        if (_minimumLength > 0 && input.length() < _minimumLength)
-            throw new ValidatorException(buildMinimumLengthMessage(field),
-                    ValidationConstraint.MINIMUM_WIDTH);
-
-        if (!isValidUrl(input))
-            throw new ValidatorException(buildInvalidUrlFormatMessage(field),
-                    ValidationConstraint.URL_FORMAT);
-
-        if (!isAllowedProtocol(input)) { throw new ValidatorException(
-                buildDisallowedProtocolMessage(field),
-                ValidationConstraint.DISALLOWED_PROTOCOL); }
-
-        return input;
-    }
-
-    public int getMinimumLength()
-    {
-        return _minimumLength;
-    }
-
-    public void setMinimumLength(int minimumLength)
-    {
-        _minimumLength = minimumLength;
-    }
-
-    public void renderValidatorContribution(IFormComponent field,
-            IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (!isClientScriptingEnabled()) return;
-
-        Map symbols = new HashMap();
-
-        if (isRequired())
-            symbols.put("requiredMessage", buildRequiredMessage(field)); //$NON-NLS-1$
-
-        if (_minimumLength > 0) symbols.put("minimumLengthMessage", //$NON-NLS-1$
-                buildMinimumLengthMessage(field));
-
-        symbols.put("urlFormatMessage", buildInvalidUrlFormatMessage(field)); //$NON-NLS-1$
-
-        symbols.put("urlDisallowedProtocolMessage", //$NON-NLS-1$
-                buildDisallowedProtocolMessage(field));
-
-        symbols.put("urlRegexpProtocols", buildUrlRegexpProtocols()); //$NON-NLS-1$
-
-        processValidatorScript(_scriptPath, cycle, field, symbols);
-    }
-
-    private String buildUrlRegexpProtocols()
-    {
-        if (_allowedProtocols == null) { return null; }
-        String regexp = "/("; //$NON-NLS-1$
-        Iterator iter = _allowedProtocols.iterator();
-        while(iter.hasNext())
-        {
-            String protocol = (String) iter.next();
-            regexp += protocol;
-            if (iter.hasNext())
-            {
-                regexp += "|"; //$NON-NLS-1$
-            }
-        }
-        regexp += "):///"; //$NON-NLS-1$
-        return regexp;
-    }
-
-    public String getScriptPath()
-    {
-        return _scriptPath;
-    }
-
-    public void setScriptPath(String scriptPath)
-    {
-        _scriptPath = scriptPath;
-    }
-
-    protected boolean isValidUrl(String url)
-    {
-        boolean bIsValid;
-        try
-        {
-            new URL(url);
-            bIsValid = true;
-        }
-        catch (MalformedURLException mue)
-        {
-            bIsValid = false;
-        }
-        return bIsValid;
-    }
-
-    protected boolean isAllowedProtocol(String url)
-    {
-        boolean bIsAllowed = false;
-        if (_allowedProtocols != null)
-        {
-            URL oUrl;
-            try
-            {
-                oUrl = new URL(url);
-            }
-            catch (MalformedURLException e)
-            {
-                return false;
-            }
-            String actualProtocol = oUrl.getProtocol();
-            Iterator iter = _allowedProtocols.iterator();
-            while(iter.hasNext())
-            {
-                String protocol = (String) iter.next();
-                if (protocol.equals(actualProtocol))
-                {
-                    bIsAllowed = true;
-                    break;
-                }
-            }
-        }
-        else
-        {
-            bIsAllowed = true;
-        }
-        return bIsAllowed;
-    }
-
-    public String getInvalidUrlFormatMessage()
-    {
-        return _invalidUrlFormatMessage;
-    }
-
-    public String getMinimumLengthMessage()
-    {
-        return _minimumLengthMessage;
-    }
-
-    public void setInvalidUrlFormatMessage(String string)
-    {
-        _invalidUrlFormatMessage = string;
-    }
-
-    public String getDisallowedProtocolMessage()
-    {
-        return _disallowedProtocolMessage;
-    }
-
-    public void setDisallowedProtocolMessage(String string)
-    {
-        _disallowedProtocolMessage = string;
-    }
-
-    public void setMinimumLengthMessage(String string)
-    {
-        _minimumLengthMessage = string;
-    }
-
-    protected String buildMinimumLengthMessage(IFormComponent field)
-    {
-        String pattern = getPattern(_minimumLengthMessage, "field-too-short", //$NON-NLS-1$
-                field.getPage().getLocale());
-
-        return formatString(pattern, Integer.toString(_minimumLength), field
-                .getDisplayName());
-    }
-
-    protected String buildInvalidUrlFormatMessage(IFormComponent field)
-    {
-        String pattern = getPattern(_invalidUrlFormatMessage,
-                "invalid-url-format", //$NON-NLS-1$
-                field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName());
-    }
-
-    protected String buildDisallowedProtocolMessage(IFormComponent field)
-    {
-        if (_allowedProtocols == null) { return null; }
-        String pattern = getPattern(_disallowedProtocolMessage,
-                "disallowed-protocol", //$NON-NLS-1$
-                field.getPage().getLocale());
-
-        String allowedProtocols = ""; //$NON-NLS-1$
-        Iterator iter = _allowedProtocols.iterator();
-        while(iter.hasNext())
-        {
-            String protocol = (String) iter.next();
-            if (!allowedProtocols.equals("")) { //$NON-NLS-1$
-                if (iter.hasNext())
-                {
-                    allowedProtocols += ", "; //$NON-NLS-1$
-                }
-                else
-                {
-                    allowedProtocols += " or "; //$NON-NLS-1$
-                }
-            }
-            allowedProtocols += protocol;
-        }
-
-        return formatString(pattern, allowedProtocols);
-    }
-
-    protected String getPattern(String override, String key, Locale locale)
-    {
-        if (override != null) return override;
-
-        ResourceBundle strings = ResourceBundle.getBundle(
-                "org.apache.tapestry.valid.ValidationStrings", locale);
-        return strings.getString(key);
-    }
-
-    /**
-     * @param protocols
-     *            comma separated list of allowed protocols
-     */
-    public void setAllowedProtocols(String protocols)
-    {
-        StringSplitter spliter = new StringSplitter(',');
-        // String[] aProtocols = protocols.split(","); //$NON-NLS-1$
-        String[] aProtocols = spliter.splitToArray(protocols); //$NON-NLS-1$
-        _allowedProtocols = new Vector();
-        for(int i = 0; i < aProtocols.length; i++)
-        {
-            _allowedProtocols.add(aProtocols[i]);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/UrlValidator.script b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/UrlValidator.script
deleted file mode 100644
index 6bbdb84..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/UrlValidator.script
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE script
-	PUBLIC "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://tapestry.apache.org/dtd/Script_3_0.dtd"
->
-
-
-<!--
-	Creates a script for validating that a field is required and/or has a minimum
-	field length.
-
-	Input symbols:
-	field, form, validator:  As normal for a validation script.
-	requiredMessage: Message to display if the field is required yet blank.
-	minimumLengthMessage: Message to display if the field length is too short.
-	urlFormatMessage: Message to display if the field value is not a valid URL.
-	urlRegexpProtocols: The regexp to check that the protocol is one of the allowed protocols.
-	urlDisallowedProtocolMessage: Message to display if the field value does not use an allowed protocol.
-
--->
-<script>
-	<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes" />
-	<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes" />
-	<input-symbol key="validator" class="org.apache.tapestry.valid.UrlValidator" required="yes" />
-	<input-symbol key="requiredMessage" class="java.lang.String" />
-	<input-symbol key="minimumLengthMessage" class="java.lang.String" />
-	<input-symbol key="urlFormatMessage" class="java.lang.String" />
-	<input-symbol key="urlRegexpProtocols" class="java.lang.String" />
-	<input-symbol key="urlDisallowedProtocolMessage" class="java.lang.String" />
-
-	<let key="function" unique="yes">validate_${field.name}</let>
-
-	<body>
-    
-<unique><![CDATA[
-function regexpTestUrl(sUrl) {
-	var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
-	return regexp.test(sUrl);
-}  
-]]></unique>    
-
-		function ${function}(event) {
-			var field = dojo.byId("${field.name}");
-			strValue = field.value.replace(/ /g,"");
-			field.value = strValue;
-
-		<if expression="validator.required">
-			if (strValue.length == 0) {
-				Tapestry.invalid_field(field, "${requiredMessage}");
-                dojo.event.browser.stopEvent(event);
-                return;
-            }
-		</if>
-
-		<if-not expression="validator.required">
-			if (strValue.length == 0)
-				return true;
-		</if-not>
-
-		<if expression="validator.minimumLength">
-			if (strValue.length &lt; ${validator.minimumLength}) {
-				Tapestry.invalid_field(field, "${minimumLengthMessage}");
-                dojo.event.browser.stopEvent(event);
-                return;
-            }
-		</if>
-
-			if(!regexpTestUrl(strValue)) {
-				Tapestry.invalid_field(field, "${urlFormatMessage}");
-                dojo.event.browser.stopEvent(event);
-                return;
-            }
-		<if expression="null != urlRegexpProtocols">
-			var protoRegExp = ${urlRegexpProtocols};
-			if(!protoRegExp.test(strValue)) {
-			     Tapestry.invalid_field(field, "${urlDisallowedProtocolMessage}");
-                 dojo.event.browser.stopEvent(event);
-                 return;
-            }
-		</if>
-		}
-	</body>
-  
-<initialization>
-Tapestry.onsubmit('${form.name}', ${function});
-</initialization>
-
-</script>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidField.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidField.java
deleted file mode 100644
index d679245..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidField.java
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.AbstractFormComponent;
-import org.apache.tapestry.form.Form;
-
-/**
- * A {@link Form}component that creates a text field that allows for validation
- * of user input and conversion between string and object values. [ <a
- * href="../../../../../ComponentReference/ValidField.html">Component Reference
- * </a>]
- * <p>
- * A ValidatingTextField uses an {@link IValidationDelegate} to track errors and
- * an {@link IValidator}to convert between strings and objects (as well as
- * perform validations). The validation delegate is shared by all validating
- * text fields in a form, the validator may be shared my multiple elements as
- * desired.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class ValidField extends AbstractFormComponent
-{
-
-    public abstract boolean isHidden();
-
-    public abstract boolean isDisabled();
-
-    public abstract Object getValue();
-
-    public abstract void setValue(Object value);
-
-    /** Parameter. */
-
-    public abstract String getDisplayName();
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IValidationDelegate delegate = getForm().getDelegate();
-
-        delegate.registerForFocus(this,
-                delegate.isInError() ? ValidationConstants.ERROR_FIELD
-                        : ValidationConstants.NORMAL_FIELD);
-
-        delegate.writePrefix(writer, cycle, this, null);
-
-        writer.beginEmpty("input");
-
-        writer.attribute("type", isHidden() ? "password" : "text");
-
-        if (isDisabled()) writer.attribute("disabled", "disabled");
-
-        writer.attribute("name", getName());
-
-        String value = readValue();
-        if (value != null) writer.attribute("value", value);
-
-        renderIdAttribute(writer, cycle);
-
-        renderInformalParameters(writer, cycle);
-
-        delegate.writeAttributes(writer, cycle, this, null);
-
-        IValidator validator = getValidator();
-
-        if (validator == null)
-            throw Tapestry.createRequiredParameterException(this, "validator");
-
-        if (validator.isRequired())
-            delegate.registerForFocus(this, ValidationConstants.REQUIRED_FIELD);
-
-        validator.renderValidatorContribution(this, writer, cycle);
-
-        writer.closeTag();
-
-        delegate.writeSuffix(writer, cycle, this, null);
-    }
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-
-        updateValue(value);
-    }
-
-    protected String readValue()
-    {
-        IValidator validator = getValidator();
-        if (validator == null)
-            throw Tapestry.createRequiredParameterException(this, "validator");
-
-        IValidationDelegate delegate = getForm().getDelegate();
-
-        if (delegate.isInError()) return delegate.getFieldInputValue();
-
-        Object value = getValue();
-
-        String result = validator.toString(this, value);
-
-        return result;
-    }
-
-    protected void updateValue(String value)
-    {
-        Object objectValue = null;
-
-        IValidator validator = getValidator();
-        if (validator == null)
-            throw Tapestry.createRequiredParameterException(this, "validator");
-
-        IValidationDelegate delegate = getForm().getDelegate();
-
-        delegate.recordFieldInputValue(value);
-
-        try
-        {
-            objectValue = validator.toObject(this, value);
-        }
-        catch (ValidatorException ex)
-        {
-            delegate.record(ex);
-            return;
-        }
-
-        setValue(objectValue);
-    }
-
-    public abstract IValidator getValidator();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidField.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidField.jwc
deleted file mode 100644
index 062040b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidField.jwc
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification class="org.apache.tapestry.valid.ValidField" allow-body="no" deprecated="true">
-
-  <description>
-  A text input field that can validate input.  ValidField is deprecated; Tapestry 4.0 adds support for this kind of validation
-  to existing components such as TextField and TextArea.
-  </description>
-
-  <parameter name="value" required="yes"/>
-  
-  <parameter name="disabled"/>
-  
-  <parameter name="hidden"/>
-    
-  <parameter name="validator" required="yes">
-    <description>
-    Converts value to a string and parses strings back into object values.
-    </description>
-  </parameter>
-    
-  <parameter name="displayName" required="yes">
-    <description>
-    Name used by FieldLabel and when generating validation error messages.
-    </description>
-  </parameter>
-  <parameter name="id" property="idParameter" default-value="id"/>
-  		  
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="value"/>
-  <reserved-parameter name="name"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidMessages.java
deleted file mode 100644
index fee285a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidMessages.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.IComponent;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class ValidMessages
-{
-
-    private static final MessageFormatter _formatter = new MessageFormatter(
-            ValidMessages.class);
-
-    /* defeat instantiation */
-    private ValidMessages()
-    {
-    }
-
-    static String noDisplayName(IComponent label, IComponent field)
-    {
-        return _formatter.format("no-display-name", label.getExtendedId(),
-                field.getExtendedId());
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidStrings.properties
deleted file mode 100644
index 42e1019..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidStrings.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-no-display-name=Display name for {0} was not specified and was not provided by field {1}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java
deleted file mode 100644
index 64887c2..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-/**
- * Constants used by the {@link org.apache.tapestry.valid.IValidationDelegate} or
- * {@link org.apache.tapestry.form.IFormComponent fields}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public final class ValidationConstants
-{
-    
-    public static final int NORMAL_FIELD = 1;
-    
-    public static final int REQUIRED_FIELD = 2;
-    
-    public static final int ERROR_FIELD = 3;
-    
-    public static final String REQUIRED = "required";
-    
-    public static final String REQUIRED_MESSAGE = "required-message";
-    
-    public static final String CONSTRAINTS = "constraints";
-    
-    public static final String TRIM = "trim";
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java
deleted file mode 100644
index 684329e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.io.Serializable;
-
-/**
- * Defines an enumeration of different types of validation constraints that may be violated.
- * 
- * @author Howard Lewis Ship
- */
-
-public class ValidationConstraint implements Serializable
-{
-    /**
-     * Indicates that no value (or a value consisting only of white space) was provided for a field
-     * that requires a non-null value.
-     */
-
-    public static final ValidationConstraint REQUIRED = new ValidationConstraint("REQUIRED");
-
-    /**
-     * Indicates that a non-null value was provided, but that (after removing leading and trailing
-     * whitespace), the value was not long enough.
-     */
-
-    public static final ValidationConstraint MINIMUM_WIDTH = new ValidationConstraint(
-            "MINIMUM_WIDTH");
-
-    /**
-     * Indicates that a non-null value was provided, but that (after removing leading and trailing
-     * whitespace), the value was too long.
-     */
-
-    public static final ValidationConstraint MAXIMUM_WIDTH = new ValidationConstraint(
-            "MAXIMUM_WIDTH");
-
-    /**
-     * Indicates a general error in converting a String into a Date.
-     */
-
-    public static final ValidationConstraint DATE_FORMAT = new ValidationConstraint("DATE_FORMAT");
-
-    /**
-     * Indicates a general error in the format of a string that is to be interpreted as a email.
-     */
-
-    public static final ValidationConstraint EMAIL_FORMAT = new ValidationConstraint("EMAIL_FORMAT");
-
-    /**
-     * Indicates a general error in the format of a string that is to be interpreted as a number.
-     */
-
-    public static final ValidationConstraint NUMBER_FORMAT = new ValidationConstraint("NUMBER_FORMAT");
-
-    /**
-     * Indicates that the value was too small (for a Date, too early).
-     */
-
-    public static final ValidationConstraint TOO_SMALL = new ValidationConstraint("TOO_SMALL");
-
-    /**
-     * Indicates that the value was too large (for a Date, too late).
-     */
-
-    public static final ValidationConstraint TOO_LARGE = new ValidationConstraint("TOO_LARGE");
-
-    /**
-     * Indicates an error in a string that does not fulfill a pattern.
-     * 
-     * @since 3.0
-     */
-
-    public static final ValidationConstraint PATTERN_MISMATCH = new ValidationConstraint(
-            "PATTERN_MISMATCH");
-
-    /**
-     * Indicates a consistency error, usually between too different fields.
-     * 
-     * @since 3.0
-     */
-
-    public static final ValidationConstraint CONSISTENCY = new ValidationConstraint("CONSISTENCY");
-
-    /**
-     * Indicates that a URL is not of the correct format.
-     * 
-     * @since 3.0
-     */
-
-    public static final ValidationConstraint URL_FORMAT = new ValidationConstraint("URL_FORMAT");
-
-    /**
-     * Indicates that the URL does not use one of the specified protocols.
-     * 
-     * @since 3.0
-     */
-
-    public static final ValidationConstraint DISALLOWED_PROTOCOL = new ValidationConstraint(
-            "DISALLOWED_PROTOCOL");
-
-    private static final long serialVersionUID = 371593028205311930L;
-    
-    private final String _name;
-
-    /**
-     * Protected constructor, which allows new constraints to be created as subclasses.
-     */
-
-    protected ValidationConstraint(String name)
-    {
-        _name = name;
-    }
-
-    public String toString()
-    {
-        return "ValidationConstraint[" + _name + "]";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationDelegate.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationDelegate.java
deleted file mode 100644
index afee811..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationDelegate.java
+++ /dev/null
@@ -1,511 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.IFormComponent;
-
-import java.util.*;
-
-/**
- * A base implementation of {@link IValidationDelegate} that can be used as a
- * managed bean. This class is often subclassed, typically to override
- * presentation details.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.5
- */
-
-public class ValidationDelegate implements IValidationDelegate
-{
-
-    private static final long serialVersionUID = 6215074338439140780L;
-
-    private transient IFormComponent _currentComponent;
-
-    private transient String _focusField;
-
-    private transient int _focusPriority = -1;
-
-    /**
-     * A list of {@link IFieldTracking}.
-     */
-
-    private final List _trackings = new ArrayList();
-
-    /**
-     * A map of {@link IFieldTracking}, keyed on form element name.
-     */
-
-    private final Map _trackingMap = new HashMap();
-
-    public void clear()
-    {
-        _currentComponent = null;
-        _trackings.clear();
-        _trackingMap.clear();
-    }
-
-    public void clearErrors()
-    {
-        if (_trackings == null) 
-            return;
-
-        Iterator i = _trackings.iterator();
-        while(i.hasNext())
-        {
-            FieldTracking ft = (FieldTracking) i.next();
-            ft.setErrorRenderer(null);
-        }
-    }
-
-    /**
-     * If the form component is in error, places a &lt;font color="red"&lt;
-     * around it. Note: this will only work on the render phase after a rewind,
-     * and will be confused if components are inside any kind of loop.
-     */
-
-    public void writeLabelPrefix(IFormComponent component,
-            IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (isInError(component))
-        {
-            writer.begin("font");
-            writer.attribute("color", "red");
-        }
-    }
-
-    /**
-     * Does nothing by default. {@inheritDoc}
-     */
-
-    public void writeLabelAttributes(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component)
-    {
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void beforeLabelText(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component)
-    {
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void afterLabelText(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component)
-    {
-    }
-    
-    /**
-     * Closes the &lt;font&gt; element,started by
-     * {@link #writeLabelPrefix(IFormComponent,IMarkupWriter,IRequestCycle)},
-     * if the form component is in error.
-     */
-
-    public void writeLabelSuffix(IFormComponent component,
-            IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (isInError(component))
-        {
-            writer.end();
-        }
-    }
-
-    /**
-     * Returns the {@link IFieldTracking}for the current component, if any. The
-     * {@link IFieldTracking}is usually created in
-     * {@link #record(String, ValidationConstraint)}or in
-     * {@link #record(IRender, ValidationConstraint)}.
-     * <p>
-     * Components may be rendered multiple times, with multiple names (provided
-     * by the {@link org.apache.tapestry.form.Form}, care must be taken that
-     * this method is invoked <em>after</em> the Form has provided a unique
-     * {@link IFormComponent#getName()}for the component.
-     * 
-     * @see #setFormComponent(IFormComponent)
-     * @return the {@link FieldTracking}, or null if the field has no tracking.
-     */
-
-    protected FieldTracking getComponentTracking()
-    {
-        return (FieldTracking) _trackingMap.get(_currentComponent.getName());
-    }
-
-    public void setFormComponent(IFormComponent component)
-    {
-        _currentComponent = component;
-    }
-
-    public boolean isInError()
-    {
-        IFieldTracking tracking = getComponentTracking();
-
-        return tracking != null && tracking.isInError();
-    }
-
-    public String getFieldInputValue()
-    {
-        IFieldTracking tracking = getComponentTracking();
-
-        return tracking == null ? null : tracking.getInput();
-    }
-
-    /**
-     * Returns all the field trackings as an unmodifiable List.
-     */
-
-    public List getFieldTracking()
-    {
-        if (Tapestry.size(_trackings) == 0) return null;
-
-        return Collections.unmodifiableList(_trackings);
-    }
-
-    /** @since 3.0.2 */
-    public IFieldTracking getCurrentFieldTracking()
-    {
-        return findCurrentTracking();
-    }
-
-    public void reset()
-    {
-        IFieldTracking tracking = getComponentTracking();
-
-        if (tracking != null)
-        {
-            _trackings.remove(tracking);
-            _trackingMap.remove(tracking.getFieldName());
-        }
-    }
-
-    /**
-     * Invokes {@link #record(String, ValidationConstraint)}, or
-     * {@link #record(IRender, ValidationConstraint)}if the
-     * {@link ValidatorException#getErrorRenderer() error renderer property}is
-     * not null.
-     */
-
-    public void record(ValidatorException ex)
-    {
-        IRender errorRenderer = ex.getErrorRenderer();
-
-        if (errorRenderer == null)
-            record(ex.getMessage(), ex.getConstraint());
-        else 
-            record(errorRenderer, ex.getConstraint());
-    }
-
-    /**
-     * Invokes {@link #record(IRender, ValidationConstraint)}, after wrapping
-     * the message parameter in a {@link RenderString}.
-     */
-
-    public void record(String message, ValidationConstraint constraint)
-    {
-        record(new RenderString(message), constraint);
-    }
-
-    /**
-     * Records error information about the currently selected component, or
-     * records unassociated (with any field) errors.
-     * <p>
-     * Currently, you may have at most one error per <em>field</em> (note the
-     * difference between field and component), but any number of unassociated
-     * errors.
-     * <p>
-     * Subclasses may override the default error message (based on other
-     * factors, such as the field and constraint) before invoking this
-     * implementation.
-     * 
-     * @since 1.0.9
-     */
-
-    public void record(IRender errorRenderer, ValidationConstraint constraint)
-    {
-        FieldTracking tracking = findCurrentTracking();
-
-        // Note that recording two errors for the same field is not advised; the
-        // second will override the first.
-
-        tracking.setErrorRenderer(errorRenderer);
-        tracking.setConstraint(constraint);
-    }
-
-    /** @since 4.0 */
-
-    public void record(IFormComponent field, String message)
-    {
-        setFormComponent(field);
-
-        record(message, null);
-    }
-
-    public void recordFieldInputValue(String input)
-    {
-        FieldTracking tracking = findCurrentTracking();
-
-        tracking.setInput(input);
-    }
-
-    /**
-     * Finds or creates the field tracking for the
-     * {@link #setFormComponent(IFormComponent)} &nbsp;current component. If no
-     * current component, an unassociated error is created and returned.
-     * 
-     * @since 3.0
-     */
-
-    protected FieldTracking findCurrentTracking()
-    {
-        FieldTracking result = null;
-
-        if (_currentComponent == null)
-        {
-            result = new FieldTracking();
-
-            // Add it to the field trackings, but not to the
-            // map.
-
-            _trackings.add(result);
-        }
-        else
-        {
-            result = getComponentTracking();
-
-            if (result == null)
-            {
-                String fieldName = _currentComponent.getName();
-
-                result = new FieldTracking(fieldName, _currentComponent);
-
-                _trackings.add(result);
-                _trackingMap.put(fieldName, result);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Does nothing. Override in a subclass to decorate fields.
-     */
-
-    public void writePrefix(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator)
-    {
-    }
-
-    /**
-     * Currently appends a single css class attribute of <code>fieldInvalid</code> if the field
-     * is in error.  If the field has a matching constraint of {@link ValidationConstraint#REQUIRED}
-     * the <code>fieldMissing</code> is written instead. 
-     */
-
-    public void writeAttributes(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator)
-    {
-        IFieldTracking tracking = getFieldTracking(component);
-        if (tracking == null)
-            return;
-
-        if (tracking.getConstraint() != null
-            && tracking.getConstraint() == ValidationConstraint.REQUIRED)
-        {
-            writer.appendAttribute("class", "fieldMissing");
-        } else if (tracking.isInError())
-        {
-
-            writer.appendAttribute("class", "fieldInvalid");
-        }        
-    }
-
-    /**
-     * Default implementation; if the current field is in error, then a suffix
-     * is written. The suffix is:
-     * <code>&amp;nbsp;&lt;font color="red"&gt;**&lt;/font&gt;</code>.
-     */
-
-    public void writeSuffix(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator)
-    {
-        if (isInError())
-        {
-            writer.printRaw("&nbsp;");
-            writer.begin("font");
-            writer.attribute("color", "red");
-            writer.print("**");
-            writer.end();
-        }
-    }
-    
-    public boolean getHasErrors()
-    {
-        return getFirstError() != null;
-    }
-
-    /**
-     * A convienience, as most pages just show the first error on the page.
-     * <p>
-     * As of release 1.0.9, this returns an instance of {@link IRender}, not a
-     * {@link String}.
-     */
-
-    public IRender getFirstError()
-    {
-        if (Tapestry.size(_trackings) == 0)
-            return null;
-
-        Iterator i = _trackings.iterator();
-
-        while(i.hasNext())
-        {
-            IFieldTracking tracking = (IFieldTracking) i.next();
-
-            if (tracking.isInError()) return tracking.getErrorRenderer();
-        }
-
-        return null;
-    }
-
-    /**
-     * Checks to see if the field is in error. This will <em>not</em> work
-     * properly in a loop, but is only used by {@link FieldLabel}. Therefore,
-     * using {@link FieldLabel}in a loop (where the {@link IFormComponent}is
-     * renderred more than once) will not provide correct results.
-     */
-
-    protected boolean isInError(IFormComponent component)
-    {
-        // Get the name as most recently rendered.
-
-        String fieldName = component.getName();
-
-        IFieldTracking tracking = (IFieldTracking) _trackingMap.get(fieldName);
-
-        return tracking != null && tracking.isInError();
-    }
-
-    protected IFieldTracking getFieldTracking(IFormComponent component)
-    {
-        String fieldName = component.getName();
-
-        return (IFieldTracking) _trackingMap.get(fieldName);
-    }
-
-    /**
-     * Returns a {@link List}of {@link IFieldTracking}s. This is the master
-     * list of trackings, except that it omits and trackings that are not
-     * associated with a particular field. May return an empty list, or null.
-     * <p>
-     * Order is not determined, though it is likely the order in which
-     * components are laid out on in the template (this is subject to change).
-     */
-
-    public List getAssociatedTrackings()
-    {
-        int count = Tapestry.size(_trackings);
-
-        if (count == 0) return null;
-
-        List result = new ArrayList(count);
-
-        for(int i = 0; i < count; i++)
-        {
-            IFieldTracking tracking = (IFieldTracking) _trackings.get(i);
-
-            if (tracking.getFieldName() == null) continue;
-
-            result.add(tracking);
-        }
-
-        return result;
-    }
-
-    /**
-     * Like {@link #getAssociatedTrackings()}, but returns only the
-     * unassociated trackings. Unassociated trackings are new (in release
-     * 1.0.9), and are why interface {@link IFieldTracking}is not very well
-     * named.
-     * <p>
-     * The trackings are returned in an unspecified order, which (for the
-     * moment, anyway) is the order in which they were added (this could change
-     * in the future, or become more concrete).
-     */
-
-    public List getUnassociatedTrackings()
-    {
-        int count = Tapestry.size(_trackings);
-
-        if (count == 0) return null;
-
-        List result = new ArrayList(count);
-
-        for(int i = 0; i < count; i++)
-        {
-            IFieldTracking tracking = (IFieldTracking) _trackings.get(i);
-
-            if (tracking.getFieldName() != null) continue;
-
-            result.add(tracking);
-        }
-
-        return result;
-    }
-
-    public List getErrorRenderers()
-    {
-        List result = new ArrayList();
-
-        Iterator i = _trackings.iterator();
-        while(i.hasNext())
-        {
-            IFieldTracking tracking = (IFieldTracking) i.next();
-
-            IRender errorRenderer = tracking.getErrorRenderer();
-
-            if (errorRenderer != null) 
-                result.add(errorRenderer);
-        }
-
-        return result;
-    }
-
-    /** @since 4.0 */
-
-    public void registerForFocus(IFormComponent field, int priority)
-    {
-        if (priority > _focusPriority)
-        {
-            _focusField = field.getClientId();
-            _focusPriority = priority;
-        }
-    }
-
-    /**
-     * Returns the focus field, or null if no form components registered for
-     * focus (i.e., they were all disabled).
-     */
-
-    public String getFocusField()
-    {
-        return _focusField;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings.java
deleted file mode 100644
index 9344844..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-/**
- * Constants used for accessing validation message patterns.
- * 
- * @author Paul Ferraro
- */
-public final class ValidationStrings
-{
-    public static final String REQUIRED_FIELD = "field-is-required";
-
-    public static final String INVALID_DATE = "invalid-date-format";
-    public static final String INVALID_NUMBER = "invalid-numeric-format";
-    public static final String INVALID_EMAIL = "invalid-email-format";
-    
-    public static final String REGEX_MISMATCH = "regex-mismatch";
-    
-    public static final String PATTERN_MISMATCH = "pattern-not-matched";
-    
-    public static final String VALUE_TOO_SHORT = "field-too-short";
-    public static final String VALUE_TOO_LONG = "field-too-long";
-    
-    public static final String VALUE_TOO_SMALL = "number-too-small";
-    public static final String VALUE_TOO_LARGE = "number-too-large";
-    
-    public static final String DATE_TOO_EARLY = "date-too-early";
-    public static final String DATE_TOO_LATE = "date-too-late";
-    
-    public static final String INVALID_FIELD_EQUALITY = "invalid-field-equality";
-    
-    private static final String RESOURCE_BUNDLE = ValidationStrings.class.getName();
-    
-    private ValidationStrings()
-    {
-        // Disable construction
-    }
-    
-    /**
-     * Fetches the appropriate validation message pattern from the appropriate localized resource.
-     * This method should be called with the locale of the current request.
-     */
-    public static String getMessagePattern(String key, Locale locale)
-    {
-        return ResourceBundle.getBundle(RESOURCE_BUNDLE, locale).getString(key);
-    }
-    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings.properties
deleted file mode 100644
index fc8c0d0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=You must enter a value for {0}.
-field-too-short=You must enter at least {0} characters for {1}.
-
-invalid-date-format=Invalid date format for {0}.  Format is {1}.
-invalid-int-format={0} must be an integer value. 
-invalid-format={0} is not in a recognized format.
-invalid-numeric-format={0} must be a numeric value.
-
-date-too-early={0} must be on or after {1}.
-date-too-late={0} must be on or before {1}.
-
-number-too-small={0} must not be smaller than {1}.
-number-too-large={0} must not be larger than {1}.
-
-number-range={0} must be between {1} and {2}.
-
-invalid-email-format=Invalid email format for {0}.  Format is user@hostname.
-
-pattern-not-matched={0} does not fulfill the required pattern {1}.
-
-invalid-url-format = Invalid URL.
-disallowed-protocol = Disallowed protocol - protocol must be {0}.
-
-### 4.0 ###
-
-field-too-long=You must enter no more than {0} characters for {1}.
-
-regex-mismatch={0} is invalid.
-
-invalid-field-equality={0} must be {1,choice,0#different from|1#the same as} {2}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_da.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_da.properties
deleted file mode 100644
index 81bfe5f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_da.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-field-is-required=Du skal udfylde feltet {0}.

-field-too-short=Du skal indtaste mindst {0} tegn i feltet {1}.

-

-invalid-date-format=Ugyldigt datoformat i feltet {0}.  Formatet er {1}.

-invalid-int-format={0} skal v\u00e6re et helt tal.

-invalid-format={0} er ikke i et genkendeligt format.

-invalid-numeric-format={0} skal v\u00e6re en numerisk v\u00e6rdi.

-

-date-too-early={0} skal v\u00e6re p\u00e5 eller efter {1}.

-date-too-late={0} skal v\u00e6re p\u00e5 eller f\u00f8r {1}.

-

-number-too-small={0} m\u00e5 ikke v\u00e6re mindre end {1}.

-number-too-large={0} m\u00e5 ikke v\u00e6re st\u00f8rre end {1}.

-

-number-range={0} skal v\u00e6re mellem {1} og {2}.

-

-invalid-email-format=Ugyldigt e-mailformat i feltet {0}.  Formatet er bruger@dom\u00e6ne.

-

-pattern-not-matched={0} opfylder ikke det kr\u00e6vede m\u00f8nster {1}.

-

-invalid-url-format = Ugyldig URL.

-disallowed-protocol = Ulovlig protokol - protokolen skal v\u00e6re {0}.

-

-### 4.0 ###

-

-field-too-long=Du m\u00e5 ikke indtaste mere end {0} tegn i feltet {1}.

-

-regex-mismatch={0} er ugyldig(t).

-

-invalid-field-equality={0} skal {1,choice,0#v\u00e6re forskellig fra|1#stemme overens med} {2}.

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_de.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_de.properties
deleted file mode 100644
index a888b0a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_de.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=Eingabefeld {0} ist ein Pflichtfeld.
-field-too-short=Sie m\u00fcssen min. {0} Zeichen in das Eingabefeld {1} eingeben.
-invalid-date-format=Das Eingabefeld {0} hat ein falsches Datumsformat (Eingabeformat ist {1}).
-invalid-int-format=Eingabefeld {0} erwartet einen numerischen Wert.
-invalid-format=Das Eingabefeld {0} hat nicht das gew\u00fcnschte Format.
-invalid-numeric-format=Eingabefeld {0} erwartet einen numerischen Wert.
-
-date-too-early=Das Datum für das Eingabefeld {0} kann nur der {1} oder später sein.
-date-too-late=Das Datum für das Eingabefeld {0} kann nur der {1} oder früher sein.
-
-number-too-small=Der Wert für das Eingabefeld {0} darf nicht kleiner als {1} sein.
-number-too-large=Der Wert für das Eingabefeld {0} darf nicht grösser als {1} sein.
-
-number-range=Der Wert f\u00fcr das Eingabefeld {0} darf nur zwischen {1} und {2} liegen.
-
-invalid-email-format=Feld {0} enthält keine gültige Email-Adresse.  Das Format ist user@hostname.
-
-pattern-not-matched={0} genügt nicht dem geforderten Pattern {1}.
-
-invalid-url-format = Ungültige URL.
-disallowed-protocol = Unerlaubtes Protokoll - Das Protokoll muss {0} sein.
-
-### 4.0 ###
-
-field-too-long=Sie dürfen höchstens {0} Zeichen für {1} eingeben.
-
-regex-mismatch={0} ist ungültig.
-
-invalid-field-equality={0} muss {1,choice,0#einen anderen|1#den gleichen} Wert wie {2} haben.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_el.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_el.properties
deleted file mode 100644
index d2aabbd..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_el.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=\u03a0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b4\u03ce\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b9\u03bc\u03ae \u03c3\u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0}.
-field-too-short=\u03a0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf\u03c5\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf\u03bd {0} \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b5\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {1}.
-
-invalid-date-format=\u039b\u03ac\u03b8\u03bf\u03c2 \u03c4\u03cd\u03c0\u03bf\u03c2 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0}!  \u039f \u03c3\u03c9\u03c3\u03c4\u03cc\u03c2 \u03c4\u03cd\u03c0\u03bf\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 {1}!
-invalid-int-format=\u03a4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03ba\u03ad\u03c1\u03b1\u03b9\u03bf\u03c2!
-invalid-format=\u03a4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0} \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03c3\u03b5 \u03b1\u03bd\u03b1\u03b3\u03bd\u03c9\u03c1\u03af\u03c3\u03b9\u03bc\u03bf \u03c4\u03cd\u03c0\u03bf!
-invalid-numeric-format=\u03a4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c1\u03b9\u03b8\u03bc\u03b7\u03c4\u03b9\u03ba\u03cc!
-
-date-too-early=\u03a4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03af\u03c3\u03bf \u03ae \u03bc\u03b5\u03c4\u03ac \u03b1\u03c0\u03cc {1}!
-date-too-late=\u03a4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03af\u03c3\u03bf \u03ae \u03c0\u03c1\u03b9\u03bd \u03b1\u03c0\u03cc {1}!
-
-number-too-small=\u03a4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0} \u03b4\u03b5\u03bd \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bc\u03b9\u03ba\u03c1\u03cc\u03c4\u03b5\u03c1\u03bf \u03b1\u03c0\u03cc {1}!
-number-too-large=\u03a4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0} \u03b4\u03b5\u03bd \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03ad\u03b9\u03bd\u03b1\u03b9 \u03bc\u03b5\u03b3\u03b1\u03bb\u03cd\u03c4\u03b5\u03c1\u03bf \u03b1\u03c0\u03cc {1}!
-
-number-range=\u03a4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bc\u03b5\u03c4\u03b1\u03be\u03cd {1} \u03ba\u03b1\u03b9 {2}!
-
-invalid-email-format=\u039b\u03ac\u03b8\u03bf\u03c2 \u03c4\u03cd\u03c0\u03bf\u03c2 email \u03b3\u03b9\u03b1 \u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0}!  \u039f \u03c3\u03c9\u03c3\u03c4\u03cc\u03c2 \u03c4\u03cd\u03c0\u03bf\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 user@hostname!
-
-pattern-not-matched=\u03a4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0} \u03b4\u03b5\u03bd \u03b9\u03ba\u03b1\u03bd\u03bf\u03c0\u03bf\u03b9\u03b5\u03af \u03c4\u03b7 \u03bc\u03bf\u03c1\u03c6\u03ae {1}!
-
-invalid-url-format = \u039b\u03b1\u03bd\u03b8\u03b1\u03c3\u03bc\u03ad\u03bd\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL!
-disallowed-protocol = \u039c\u03b7 \u03b5\u03c0\u03b9\u03c4\u03c1\u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03c9\u03c4\u03cc\u03ba\u03bf\u03bb\u03bb\u03bf - \u03c4\u03bf \u03c0\u03c1\u03c9\u03c4\u03cc\u03ba\u03bf\u03bb\u03bb\u03bf \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 {0}!
-
-### 4.0 ###
-
-field-too-long=\u0394\u03b5\u03bd \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03bf\u03c5\u03c2 \u03b1\u03c0\u03cc {0} \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b5\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {1}.
-
-regex-mismatch=\u03a4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0} \u03b5\u03af\u03bd\u03b1\u03b9 \u03bb\u03b1\u03bd\u03b8\u03b1\u03c3\u03bc\u03ad\u03bd\u03bf.
-
-invalid-field-equality=\u03a4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {0} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 {1,choice,0#\u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03b1\u03c0\u03cc|1#\u03af\u03b4\u03b9\u03bf \u03bc\u03b5} \u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf {2}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_en.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_en.properties
deleted file mode 100644
index 9e8aa42..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_en.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=You must enter a value for {0}.
-field-too-short=You must enter at least {0} characters for {1}.
-
-invalid-date-format=Invalid date format for {0}.  Format is {1}.
-invalid-int-format={0} must be an integer value. 
-invalid-format={0} is not in a recognized format.
-invalid-numeric-format={0} must be a numeric value. 
-
-date-too-early={0} must be on or after {1}.
-date-too-late={0} must be on or before {1}.
-
-number-too-small={0} must not be smaller than {1}.
-number-too-large={0} must not be larger than {1}.
-
-number-range={0} must be between {1} and {2}.
-
-invalid-email-format=Invalid email format for {0}.  Format is user@hostname.
-
-pattern-not-matched={0} does not fulfill the required pattern {1}.
-
-invalid-url-format = Invalid URL.
-disallowed-protocol = Disallowed protocol - protocol must be {0}.
-
-### 4.0 ###
-
-field-too-long=You must enter no more than {0} characters for {1}.
-
-regex-mismatch={0} is invalid.
-
-invalid-field-equality={0} must be {1,choice,0#different from|1#the same as} {2}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_es.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_es.properties
deleted file mode 100644
index 5867206..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_es.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=Tiene que ingresar un valor para {0}.
-field-too-short=Tiene que ingresar al menos {0} caracteres para {1}.
-
-invalid-date-format=Formato de fecha no v\u00e1lido para {0}.  El formato es {1}.
-invalid-int-format={0} tiene que ser un valor entero.
-invalid-format={0} no se encuentra en un formato reconocido.
-invalid-numeric-format={0} tiene que ser un valor num\u00e9rico.
-
-date-too-early={0} tiene que ser actual o despu\u00e9s de {1}.
-date-too-late={0} tiene que ser actual o antes de {1}.
-
-number-too-small={0} no puede ser menor que {1}.
-number-too-large={0} no puede ser mayor que {1}.
-
-number-range={0} tiene que estar entre {1} y {2}.
-
-invalid-email-format=Formato de email inv\u00e1lido para {0}.  El formato es usuario@servidor.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_fi.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_fi.properties
deleted file mode 100644
index e40e8cc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_fi.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-# $Id$
-
-field-is-required=Anna syöte kenttään: {0}.
-field-too-short=Kentän {1} arvon minimipituus on {0} merkkiä.
-
-invalid-date-format=Kentän {0} päivämäärä on väärää muotoa. Muoto on {1}.
-invalid-int-format=Kentän {0} arvon pitää olla kokonaisluku.
-invalid-format=Kentän {0} syöte on väärää muotoa.
-invalid-numeric-format=Kentän {0} arvon pitää olla luku.
-
-date-too-early=Kentän {0} päivämäärä ei saa olla ennen {1}.
-date-too-late=Kentän {0} päivämäärä ei saa olla jälkeen {1}.
-
-number-too-small=Kentän {0} arvo ei saa olla pienempi {1}.
-number-too-large=Kentän {0} arvo ei saa olla suurempi kuin {1}.
-
-number-range=Kentän {0} arvon tulee olla välillä {1}-{2}.
-
-invalid-email-format=Sähköpostiosoite kentässä {0} on väärää muotoa. Muoto on tunnus@kone.fi.
-
-pattern-not-matched=Kentän {0} arvo ei ole vaaditussa muodossa {1}.
-
-invalid-url-format = URL on väärää muotoa.
-disallowed-protocol = Protokolla ei kelpaa - protokollan pitää olla {0}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_fr.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_fr.properties
deleted file mode 100644
index 34be496..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_fr.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=Vous devez entrer une valeur pour {0}.
-field-too-short=Vous devez entrer au moins {0} caract\u00e8res pour {1}.
-
-invalid-date-format=Format de date invalide pour {0}. Le format correct est {1}.
-invalid-int-format={0} doit \u00eatre une valeur enti\u00e8re.
-invalid-format={0} n'est pas un format reconnu.
-invalid-numeric-format={0} doit \u00eatre une valeur num\u00e9rique.
-
-date-too-early={0} doit \u00eatre le ou apres {1}.
-date-too-late={0} doit \u00eatre le ou avant {1}.
-
-number-too-small={0} ne doit pas \u00eatre plus petit que {1}.
-number-too-large={0} ne doit pas \u00eatre plus grand que {1}.
-
-number-range={0} doit \u00eatre compris entre {1} et {2}.
-
-invalid-email-format=Format de courriel invalide pour {0}. Entrez un courriel de la forme user@hostname.
-
-pattern-not-matched={0} ne correspond pas au mod\u00e8le {1}.
-
-invalid-url-format = URL invalide.
-disallowed-protocol = Protocole interdit - le protocole doit \u00eatre {0}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_hu.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_hu.properties
deleted file mode 100644
index 94e9b11..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_hu.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-field-is-required={0} megad\u00e1sa k\u00f6telez\u0151.

-field-too-short={1} legal\u00e1bb {0} karakter hossz\u00fa kell legyen.

-

-invalid-date-format={0} nem megfelel\u0151 form\u00e1tum\u00fa. A helyes d\u00e1tum form\u00e1tum {1}.

-invalid-int-format={0} \u00e9rt\u00e9ke eg\u00e9sz sz\u00e1m kell legyen.

-invalid-format={0} ismeretlen form\u00e1tum\u00fa.

-invalid-numeric-format={0} \u00e9rt\u00e9ke sz\u00e1m kell legyen.

-

-date-too-early={0} {1} ut\u00e1ni id\u0151pont kell legyen.

-date-too-late={0} {1} el\u0151tti id\u0151pont kell legyen.

-

-number-too-small={0} \u00e9rt\u00e9ke nem lehet kisebb, mint {1}.

-number-too-large={0} \u00e9rt\u00e9ke nem lehet nagyobb, mint {1}.

-

-number-range={0} \u00e9rt\u00e9ke {1} \u00e9s {2} k\u00f6z\u00f6tt kell legyen.

-

-invalid-email-format={0} nem megfelel\u0151 form\u00e1tum\u00fa. A helyes e-mail form\u00e1tum user@hostname.

-

-pattern-not-matched={0} \u00e9rt\u00e9ke nem felel meg az el\u0151\u00edrt {1} mint\u00e1nak.

-

-invalid-url-format=Hib\u00e1s URL.

-disallowed-protocol=Nem megengedett protokoll - a protokoll {0} kell legyen.

-

-### 4.0 ###

-

-field-too-long={1} legfeljebb {0} karakter hossz\u00fa lehet.

-

-regex-mismatch={0} \u00e9rt\u00e9ke nem megengedett.

-

-invalid-field-equality={0} \u00e9s {2} \u00e9rt\u00e9k\u00e9nek {1,choice,0#k\u00fcl\u00f6nb\u00f6znie kell|1#meg kell egyeznie}.

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_it.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_it.properties
deleted file mode 100644
index b73d6fc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_it.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=Devi inserire un valore per {0}.
-field-too-short=Sono richiesti almeno {0} caratteri per {1}.
-
-invalid-date-format=Formato della data non valido per {0}.  Il formato corretto \u00e8 {1}.
-invalid-int-format={0} deve essere un valore numerico intero.
-invalid-format={0} non \u00e8 un formato riconosciuto.
-invalid-numeric-format={0} deve essere un valore numerico.
-
-date-too-early={0} deve essere uguale o successico a {1}.
-date-too-late={0} deve essere uguale o precedente a {1}.
-
-number-too-small={0} non deve essere pi\u00f9 piccolo di {1}.
-number-too-large={0} non deve essere pi\u00f9 grande di {1}.
-
-number-range={0} deve essere compreso tra {1} e {2}.
-
-invalid-email-format=Formato email non valido per {0}.  Il formato corretto \u00e8 user@hostname.
-
-pattern-not-matched={0} non soddisfa i reuisiti di {1}.
-
-invalid-url-format = URL non valido.
-disallowed-protocol = Protocollo non consentito - il protocollo deve essere {0}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_nl.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_nl.properties
deleted file mode 100644
index 6a9796c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_nl.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-field-is-required=U dient een waarde in te voeren voor {0}.

-field-too-short=U dient minimaal {0} karakters in te voeren voor {1}.

-

-invalid-date-format=Datumformaat is niet juist voor {0}.  Het formaat is {1}.

-invalid-int-format={0} moet een geheel getal zijn.

-invalid-format={0} is van een onbekend formaat.

-invalid-numeric-format={0} moet een numerieke waarde zijn.

-

-date-too-early={0} moet op of na {1} vallen.

-date-too-late={0} moet op of voor {1} vallen.

-

-number-too-small={0} mag niet kleiner zijn dan {1}.

-number-too-large={0} mag niet groter zijn dan {1}.

-

-number-range={0} moet liggen tussen {1} en {2}.

-

-invalid-email-format=Ongeldig emailformaat voor {0}.  Het formaat is gebruiker@host.

-

-pattern-not-matched={0} voldoet niet aan het vereiste patroon {1}.

-

-invalid-url-format = Ongeldige URL.

-disallowed-protocol = Niet toegestaan protocol - protocol moet {0} zijn.

-

-### 4.0 ###

-

-field-too-long=U mag niet meer dan {0} karakters invoeren voor {1}.

-

-regex-mismatch={0} is ongeldig.

-

-invalid-field-equality={0} moet {1,choice,0#afwijkend van|1#hetzelfde als} {2} zijn.

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_no.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_no.properties
deleted file mode 100644
index bab0790..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_no.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2005 The Apache Software Foundation

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-field-is-required=Du må fylle ut {0}.

-field-too-short=Feltet {1} må inneholde minst {0} tegn.

-

-invalid-date-format=Ugyldig datoformat for {0}. Formatet er {1}.

-invalid-int-format={0} må være et heltall

-invalid-format={0} er ikke i et kjent format

-invalid-numeric-format={0} må være et tall

-

-date-too-early={0} må være på eller etter {1}.

-date-too-late={0} må være på eller før {1}.

-

-number-too-small={0} må være mindre enn {1}.

-number-too-large={0} må være større enn {1}.

-

-number-range={0} må være mellom {1} og {2}.

-

-invalid-email-format=Ugyldig e-post format for {0}. Korrekt format er bruker@domene.

-

-pattern-not-matched={0} oppfyller ikke det ønskede mønsteret {1}.

-

-invalid-url-format=Ugyldig URL.

-disallowed-protocol=Protokollen er ikke tillatt - det må være {0}.

-

-### 4.0 ###

-

-field-too-long=Feltet {1} kan ikke inneholde mer enn {0} tegn.

-

-regex-mismatch={0} er ugyldig.

-

-invalid-field-equality={0} må være {1,choice,0#forskjellig fra|1#samme som} {2}.

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_pl.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_pl.properties
deleted file mode 100644
index 58c694e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_pl.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-field-is-required=Brak warto\u015Bci w polu {0}.

-field-too-short=Ilo\u015B\u0107 znak\u00F3w w polu {1} nie mo\u017Ce by\u0107 mniejsza ni\u017C {0}.

-

-invalid-date-format=Nieprawid\u0142owy format daty w polu {0}. Prawid\u0142owy format to {1}.

-invalid-int-format={0} musi by\u0107 liczb\u0105 ca\u0142kowit\u0105.

-invalid-format={0} posiada nieprawid\u0142owy format.

-invalid-numeric-format={0} posiada nieprawid\u0142owy format liczby.

-

-date-too-early=Data w polu {0} nie mo\u017Ce by\u0107 wcze\u015Bniejsza ni\u017C {1}.

-date-too-late=Data w polu {0} nie mo\u017Ce by\u0107 p\u00F3\u017Aniejsza ni\u017C {1}.

-

-number-too-small=Warto\u015B\u0107 w polu {0} nie mo\u017Ce by\u0107 mniejsza ni\u017C {1}.

-number-too-large=Warto\u015B\u0107 w polu {0} nie mo\u017Ce by\u0107 wi\u0119ksza ni\u017C {1}.

-

-number-range=Warto\u015B\u0107 w polu {0} musi by\u0107 z przedzia\u0142u {1} i {2}.

-

-invalid-email-format=Nieprawid\u0142owy adres email w polu {0}. Przyk\u0142ad prawid\u0142owego adresu to jan@kowalski.pl

-

-pattern-not-matched=Warto\u015B\u0107 w polu {0} nie jest zgodna z wymaganym formatem {1}.

-

-invalid-url-format = B\u0142\u0119dny URL.

-disallowed-protocol = Niedozwolony protok\u00F3\u0142 - dopuszczalny protok\u00F3\u0142 to {0}.

-

-### 4.0 ###

-field-too-long=Ilo\u015B\u0107 znak\u00F3w w polu {1} nie mo\u017Ce by\u0107 wi\u0119ksza ni\u017C {0}.

-regex-mismatch=Warto\u015B\u0107 w polu {0} nie jest zgodna z wymaganym wzorcem.

diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_pt.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_pt.properties
deleted file mode 100644
index 148d57b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_pt.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=Tem de inserir um valor para {0}.
-field-too-short=Tem de inserir pelo menos {0} caracteres para {1}.
-
-invalid-date-format=Formato de data inv\u00e1lido para {0}.  O formato \u00e9 {1}.
-invalid-int-format={0} tem de ser um valor inteiro.
-invalid-format={0} n\u00e3o se encontra num formato conhecido.
-invalid-numeric-format={0} tem de ser um valor num\u00e9rico.
-
-date-too-early={0} tem de ser a mesma ou posterior a {1}.
-date-too-late={0} tem de ser a mesma ou anterior a {1}.
-
-number-too-small={0} n\u00e3o pode ser menor do que {1}.
-number-too-large={0} n\u00e3o pode ser maior do que {1}.
-
-number-range={0} tem de estar entre {1} e {2}.
-
-invalid-email-format=Formato de email inv\u00e1lido para {0}.  O formato \u00e9 user@hostname.
-
-pattern-not-matched={0} n\u00e3o correponde ao padr\u00e3o {1}.
-
-invalid-url-format = URL inv\u00e1lido.
-disallowed-protocol = Protocolo interdito - o protocolo tem de ser {0}.
-
-### 4.0 ###
-
-field-too-long=Não pode inserir mais do que {0} characters para {1}.
-
-regex-mismatch={0} \u00e9 inv\u00e1lido.
-
-invalid-field-equality={0} tem de ser {1,choice,0#diferente de|1#igual a} {2}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_pt_BR.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_pt_BR.properties
deleted file mode 100644
index 36011ac..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_pt_BR.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=Por favor, digite um valor para o campo "{0}".
-field-too-short=O campo "{1}" deve ter pelo menos {0} caracteres.
-
-invalid-date-format=Formato de data inv\u00e1lido para o campo "{0}". A data deve estar no formato "{1}".
-invalid-int-format=O campo "{0}" deve conter um n\u00famero inteiro.
-invalid-format="{0}" n\u00e3o \u00e9 um formato reconhecido.
-invalid-numeric-format=O campo "{0}" deve conter um valor num\u00e9rico.
-
-date-too-early=O campo "{0}" deve conter uma data posterior ou igual a {1}.
-date-too-late=O campo "{0}" deve conter uma data anterior ou igual a {1}.
-
-number-too-small=O campo "{0}" n\u00e3o pode ser menor que {1}.
-number-too-large=O campo "{0}" n\u00e3o pode ser maior que {1}.
-
-number-range=O campo "{0}" deve conter um valor entre {1} e {2}.
-
-invalid-email-format=Email inv\u00e1lido para o campo "{0}". O email deve estar no formato usuario@provedor.
-
-pattern-not-matched=O campo "{0}" n\u00e3o satisfaz o padr\u00e3o "{1}".
-
-invalid-url-format = URL inv\u00e1lida.
-disallowed-protocol = Protocolo n\u00e3o permitido. O protocolo deve ser {0}.
-
-### 4.0 ###
-
-field-too-long=O campo "{1}" deve ter no m\u00e1ximo {0} caracteres.
-
-regex-mismatch=O valor do campo "{0}" \u00e9 inv\u00e1lido.
-
-invalid-field-equality=O campo "{0}" deve ser {1,choice,0#diferente do|1#igual ao} campo "{2}".
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_ru.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_ru.properties
deleted file mode 100644
index b669a27..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_ru.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f {0}.
-field-too-short=\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0434\u043b\u044f {1}.
-
-invalid-date-format=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u0442\u044b \u0434\u043b\u044f {0}. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 {1}.
-invalid-int-format={0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c.
-invalid-format=\u041d\u0435\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 {0} .
-invalid-numeric-format={0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u043c.
-
-date-too-early={0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u0440\u0430\u043d\u0435\u0435 {1}.
-date-too-late={0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u043f\u043e\u0437\u0434\u043d\u0435\u0435 {1}.
-
-number-too-small={0} \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c {1}.
-number-too-large={0} \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c {1}.
-
-number-range={0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u0436\u0434\u0443 {1} \u0438 {2}.
-
-invalid-email-format=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0432 {0}. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442: user@hostname
-
-pattern-not-matched={0} \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 {1}.
-
-invalid-url-format = \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 URL.
-disallowed-protocol = \u041d\u0435\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b - \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b {0}.
-
-### 4.0 ###
-
-field-too-long=\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 {0} \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0434\u043b\u044f {1}.
-
-regex-mismatch={0} \u043d\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e.
-
-invalid-field-equality={0} \u0434\u043e\u043b\u0436\u043d\u043e {1,choice,0#\u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442|1#\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c} {2}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_sv.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_sv.properties
deleted file mode 100644
index 9d03af4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_sv.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=Du m\u00e5ste skriva in ett v\u00e4rde f\u00f6r {0}.
-field-too-short=Du m\u00e5ste skriva in minst {0} tecken f\u00f6r {1}.
-
-invalid-date-format=Ogilitigt datumformat f\u00f6r {0}. Formatet \u00e4r {1}.
-invalid-int-format={0} m\u00e5ste vara ett heltalsv\u00e4rde.
-invalid-format={0} \u00e4r inte i ett k\u00e4nt format.
-invalid-numeric-format={0} m\u00e5ste vara ett numeriskt v\u00e4rde.
-
-date-too-early={0} m\u00e5ste vara p\u00e5 eller efter {1}.
-date-too-late={0} m\u00e5ste vara p\u00e5 eller f\u00f6re {1}.
-
-number-too-small={0} m\u00e5ste vara mindre \u00e4n {1}.
-number-too-large={0} m\u00e5ste vara st\u00f6rre \u00e4n {1}.
-
-number-range={0} m\u00e5ste vara mellan {1} och {2}.
-
-invalid-email-format=Ogiltigt e-post address format f\u00f6r {0}. Korrekt format \u00e4r anv\u00e4ndare@dom\u00e4n.
-
-pattern-not-matched={0} uppfyller inte det \u00f6nskade m\u00f6nstret. {1}.
-
-invalid-url-format=Ogiltig URL.
-disallowed-protocol=Protokollet \u00e4r inte till\u00e5tet - det m\u00e5ste vara {0}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_zh_CN.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_zh_CN.properties
deleted file mode 100644
index 5a9c1e0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_zh_CN.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=\u8bf7\u8f93\u5165{0}\u7684\u5185\u5bb9\u3002
-field-too-short={1}\u7684\u5185\u5bb9\u4e0d\u80fd\u5c11\u4e8e{0}\u5b57\u7b26\u3002
-
-invalid-date-format={0}\u7684\u65e5\u671f\u683c\u5f0f\u4e0d\u6b63\u786e\uff0c\u6b63\u786e\u683c\u5f0f\u662f{1}\u3002
-invalid-int-format={0}\u7684\u5185\u5bb9\u5fc5\u987b\u662f\u6574\u6570\u3002
-invalid-format=\u65e0\u6cd5\u8bc6\u522b{0}\u7684\u683c\u5f0f\u3002
-invalid-numeric-format={0}\u7684\u5185\u5bb9\u5fc5\u987b\u662f\u6570\u5b57\u3002
-
-date-too-early={0}\u7684\u65e5\u671f\u5fc5\u987b\u5728{1}\u4e4b\u540e\u3002
-date-too-late={0}\u7684\u65e5\u671f\u5fc5\u987b\u5728{1}\u4e4b\u524d\u3002
-
-number-too-small={0}\u7684\u6570\u503c\u4e0d\u80fd\u5c0f\u4e8e{1}\u3002
-number-too-large={0}\u7684\u6570\u503c\u4e0d\u80fd\u5927\u4e8e{1}\u3002
-
-number-range={0}\u7684\u6570\u503c\u5fc5\u987b\u5728{1}\u548c{2}\u4e4b\u95f4\u3002
-
-invalid-email-format=\u7535\u5b50\u90ae\u4ef6\u5730\u5740{0}\u683c\u5f0f\u4e0d\u6b63\u786e\uff0c\u6b63\u786e\u7684\u683c\u5f0f\u662fuser@hostname\u3002
-
-pattern-not-matched={0}\u4e0d\u7b26\u5408\u6240\u8981\u6c42\u7684\u683c\u5f0f{1}\u3002
-
-invalid-url-format = \u9519\u8bef\u7684URL\u3002
-disallowed-protocol = \u4e0d\u88ab\u5141\u8bb8\u7684\u534f\u8bae\uff0c\u5fc5\u987b\u662f{0}\u3002
-### 4.0 ###
-
-field-too-long={1}\u7684\u5185\u5bb9\u4e0d\u80fd\u8d85\u8fc7{0}\u5b57\u7b26\u3002
-
-regex-mismatch={0}\u7684\u683c\u5f0f\u4e0d\u6b63\u786e\u3002
-
-invalid-field-equality={0}\u5fc5\u987b{1,choice,0#\u4e0d\u540c\u4e8e|1#\u76f8\u540c\u4e8e} {2}.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_zh_TW.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_zh_TW.properties
deleted file mode 100644
index fde9e7a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationStrings_zh_TW.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=\u8acb\u8f38\u5165{0}\u6b04\u4f4d\u7684\u5167\u5bb9\u3002
-field-too-short={1}\u6b04\u4f4d\u7684\u5167\u5bb9\u4e0d\u80fd\u5c11\u65bc{0}\u5b57\u5143\u3002
-
-invalid-date-format={0}\u6b04\u4f4d\u7684\u65e5\u671f\u683c\u5f0f\u4e0d\u6b63\u78ba\uff0c\u6b63\u78ba\u683c\u5f0f\u70ba{1}\u3002
-invalid-int-format={0}\u6b04\u4f4d\u7684\u5167\u5bb9\u5fc5\u9808\u662f\u6574\u6578\u3002
-invalid-format=\u7121\u6cd5\u8fa8\u8a8d{0}\u6b04\u4f4d\u7684\u683c\u5f0f\u3002
-invalid-numeric-format={0}\u6b04\u4f4d\u7684\u5167\u5bb9\u5fc5\u9808\u662f\u6578\u5b57\u3002
-
-date-too-early={0}\u6b04\u4f4d\u7684\u65e5\u671f\u5fc5\u9808\u5728{1}\u4e4b\u5f8c\u3002
-date-too-late={0}\u6b04\u4f4d\u7684\u65e5\u671f\u5fc5\u9808\u5728{1}\u4e4b\u524d\u3002
-
-number-too-small={0}\u6b04\u4f4d\u7684\u6578\u5b57\u4e0d\u80fd\u5c0f\u65bc{1}\u3002
-number-too-large={0}\u6b04\u4f4d\u7684\u6578\u5b57\u4e0d\u80fd\u5927\u65bc{1}\u3002
-
-number-range={0}\u6b04\u4f4d\u7684\u6578\u5b57\u5fc5\u9808\u5728{1}\u548c{2}\u4e4b\u9593\u3002
-
-invalid-email-format=\u96fb\u5b50\u90f5\u4ef6\u5730\u5740{0}\u683c\u5f0f\u932f\u8aa4\uff0c\u6b63\u78ba\u7684\u683c\u5f0f\u662fuser@hostname\u3002
-
-pattern-not-matched={0}\u4e0d\u7b26\u5408\u6240\u8981\u6c42\u7684\u6a23\u5f0f{1}\u3002
-
-invalid-url-format = \u932f\u8aa4\u7684URL\u3002
-disallowed-protocol = \u4e0d\u88ab\u5141\u8a31\u7684\u5354\u5b9a\uff0c\u5fc5\u9808\u662f{0}\u3002
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidatorBinding.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidatorBinding.java
deleted file mode 100644
index 92cc9a6..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidatorBinding.java
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.binding.AbstractBinding;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * Implementation of {@link IBinding} that provides
- * {@link org.apache.tapestry.valid.IValidator} &nbsp;instances based on a
- * validator bean descriptor. The descriptor is of the form "type[,properties]".
- * The types are values such as "string", "date" or "number" defined in the
- * tapestry.valid.Validators configuration point. The properties are a
- * properties initialization string.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.hivemind.util.PropertyUtils#configureProperties(java.lang.Object,
- *      java.lang.String)
- */
-public class ValidatorBinding extends AbstractBinding
-{
-
-    private final IValidator _validator;
-
-    public ValidatorBinding(String description, ValueConverter valueConverter,
-            Location location, IValidator validator)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(validator, "validator");
-
-        _validator = validator;
-    }
-
-    public Object getObject()
-    {
-        return _validator;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidatorBindingFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidatorBindingFactory.java
deleted file mode 100644
index 665e2df..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidatorBindingFactory.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.lib.BeanFactory;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.AbstractBindingFactory;
-import org.apache.tapestry.engine.IScriptSource;
-
-/**
- * Uses the tapestry.valid.ValidatorBeanFactory service to obtain configuration IValidator
- * instances.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.valid.ValidatorBinding
- */
-public class ValidatorBindingFactory extends AbstractBindingFactory
-{
-    private BeanFactory _validatorBeanFactory;
-
-    private IScriptSource _scriptSource;
-    
-    public void setValidatorBeanFactory(BeanFactory validatorBeanFactory)
-    {
-        _validatorBeanFactory = validatorBeanFactory;
-    }
-
-    public void setScriptSource(IScriptSource scriptSource)
-    {
-        _scriptSource = scriptSource;
-    }
-    
-    /**
-     * Creates and returns a {@link ValidatorBinding}. Interprets the path as a bean initializer,
-     * used to locate a particular type of validator and a particular configuration of its
-     * properties.
-     */
-
-    public IBinding createBinding(IComponent root, String bindingDescription, String expression,
-            Location location)
-    {
-        try
-        {
-            IValidator validator = (IValidator) _validatorBeanFactory.get(expression);
-            validator.setScriptSource(_scriptSource);
-            
-            return new ValidatorBinding(bindingDescription, getValueConverter(), location,
-                    validator);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), location, ex);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidatorException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidatorException.java
deleted file mode 100644
index 71c0fda..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/ValidatorException.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IRender;
-
-/**
- * Thrown by a {@link IValidator}when submitted input is not valid.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-
-public class ValidatorException extends Exception
-{
-    private static final long serialVersionUID = 2451683137746501377L;
-
-    private final IRender _errorRenderer;
-
-    private final ValidationConstraint _constraint;
-
-    public ValidatorException(String errorMessage)
-    {
-        this(errorMessage, null, null);
-    }
-
-    public ValidatorException(String errorMessage, ValidationConstraint constraint)
-    {
-        this(errorMessage, null, constraint);
-    }
-
-    /**
-     * Creates a new instance.
-     * 
-     * @param errorMessage
-     *            the default error message to be used (this may be overriden by the
-     *            {@link IValidationDelegate})
-     * @param errorRenderer
-     *            to use to render the error message (may be null). This is used with custom
-     *            validators that create renderers that produce rich markup (such as icons or links
-     *            to help pages). Such renderes are expected to implement a <code>toString()</code>
-     *            that returns a simple error message (without any markup).
-     * @param constraint
-     *            a validation constraint that has been compromised, or null if no constraint is
-     *            applicable
-     */
-
-    public ValidatorException(String errorMessage, IRender errorRenderer,
-            ValidationConstraint constraint)
-    {
-        super(errorMessage);
-
-        _errorRenderer = errorRenderer;
-        _constraint = constraint;
-    }
-
-    public ValidationConstraint getConstraint()
-    {
-        return _constraint;
-    }
-
-    /**
-     * Returns the error renderer for this exception, which may be null.
-     * 
-     * @since 3.0 *
-     */
-
-    public IRender getErrorRenderer()
-    {
-        return _errorRenderer;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/package.html
deleted file mode 100644
index f858edf..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/valid/package.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<body>
-
-Components and classes that provide specialized, validating text fields.
-The component {@link org.apache.tapestry.valid.ValidField}
-does most of the work, and is paired with an implementation of
-{@link org.apache.tapestry.valid.IValidator} (often as a helper bean)
-which provides the rules of translation (between object value and string) and validation.
-
-<p>
-Fields can all be set as required or not; most IValidator implementations add additional
-validations, such as fitting the input value between a minimum and maximum value.
-
-
-<p>Fields can also have a {@link org.apache.tapestry.valid.FieldLabel} that reflects the state (normal or error)
-of the field.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/version.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/version.properties
deleted file mode 100644
index 62750fc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/version.properties
+++ /dev/null
@@ -1 +0,0 @@
-project.version=4.1.3
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/AttributeHolder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/AttributeHolder.java
deleted file mode 100644
index 11636ab..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/AttributeHolder.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import java.util.List;
-
-/**
- * Interface for objects that can hold attributes. Attributes are objects that are stored and
- * retrieved using unique string names. There may be constraints on when attributes can be accessed
- * (for example, {@link org.apache.tapestry.web.WebSession}attributes should not be
- * changed once the response is committed).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface AttributeHolder
-{
-    /**
-     * Returns a list of all known attributes in ascending alphabetical order. May be empty (but
-     * won't be null).
-     * 
-     * @returns Unmodifiable list of string attribute names.
-     */
-
-    List getAttributeNames();
-
-    /**
-     * Returns the named object, or null if no attribute has been stored with the given name.
-     */
-
-    Object getAttribute(String name);
-
-    /**
-     * Updates the attribute, replacing (or removing) its value. For certain implementations, the
-     * attribute may need to be serializable (for example, a {@link WebSession}
-     * &nbsp;attribute in a clustered application).
-     * 
-     * @param name
-     *            the name of the attribute to update
-     * @param attribute
-     *            the new value for the attribute, or null to delete the attribute entirely.
-     */
-
-    void setAttribute(String name, Object attribute);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/HttpServletWebActivator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/HttpServletWebActivator.java
deleted file mode 100644
index c3c597b..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/HttpServletWebActivator.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import java.util.List;
-
-import javax.servlet.http.HttpServlet;
-
-import org.apache.tapestry.describe.DescriptionReceiver;
-
-/**
- * Adapts {@link javax.servlet.http.HttpServlet}&nbsp; as
- * {@link org.apache.tapestry.web.WebActivator}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class HttpServletWebActivator implements WebActivator
-{
-    private HttpServlet _httpServlet;
-
-    public HttpServletWebActivator(HttpServlet servlet)
-    {
-        _httpServlet = servlet;
-    }
-
-    public String getActivatorName()
-    {
-        return _httpServlet.getServletName();
-    }
-
-    public List getInitParameterNames()
-    {
-        return WebUtils.toSortedList(_httpServlet.getInitParameterNames());
-    }
-
-    public String getInitParameterValue(String name)
-    {
-        return _httpServlet.getInitParameter(name);
-    }
-
-    public void describeTo(DescriptionReceiver receiver)
-    {
-        receiver.describeAlternate(_httpServlet);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/InitializationParameterHolder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/InitializationParameterHolder.java
deleted file mode 100644
index 44c9abc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/InitializationParameterHolder.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import java.util.List;
-
-/**
- * Defines methods for accessing initialization parameters.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface InitializationParameterHolder
-{
-    /**
-     * Returns a sorted list of the names of all initialization parameters (which may be the empty
-     * list).
-     * 
-     * @return List of String
-     */
-
-    List getInitParameterNames();
-
-    /**
-     * Returns the value of the named parameter, or null if the reciever does not have such a
-     * parameter.
-     * 
-     * @param name
-     *            the name of the parameter to retrieve
-     * @return the corresponding value, or null
-     */
-
-    String getInitParameterValue(String name);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/LocalizedWebContextResourceFinder.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/LocalizedWebContextResourceFinder.java
deleted file mode 100644
index 020b30d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/LocalizedWebContextResourceFinder.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.LocalizedNameGenerator;
-import org.apache.hivemind.util.LocalizedResource;
-
-import java.util.Locale;
-
-/**
- * Finds localized resources within a {@link org.apache.tapestry.web.WebContext}..
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-public class LocalizedWebContextResourceFinder
-{
-
-    private WebContext _context;
-
-    public LocalizedWebContextResourceFinder(WebContext context)
-    {
-        Defense.notNull(context, "context");
-
-        _context = context;
-    }
-
-    /**
-     * Resolves the resource, returning a path representing the closest match
-     * (with respect to the provided locale). Returns null if no match.
-     * <p>
-     * The provided path is split into a base path and a suffix (at the last
-     * period character). The locale will provide different suffixes to the base
-     * path and the first match is returned.
-     */
-
-    public LocalizedResource resolve(String contextPath, Locale locale)
-    {
-        int dotx = contextPath.lastIndexOf('.');
-        String basePath;
-        String suffix;
-        if (dotx >= 0)
-        {
-            basePath = contextPath.substring(0, dotx);
-            suffix = contextPath.substring(dotx);
-        }
-        else
-        {
-            // Resource without extension
-            basePath = contextPath;
-            suffix = "";
-        }
-
-        LocalizedNameGenerator generator = new LocalizedNameGenerator(basePath,
-                locale, suffix);
-
-        while(generator.more())
-        {
-            String candidatePath = generator.next();
-
-            if (isExistingResource(candidatePath))
-                return new LocalizedResource(candidatePath, generator.getCurrentLocale());
-        }
-
-        return null;
-    }
-
-    private boolean isExistingResource(String path)
-    {
-        return _context.getResource(path) != null;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebContext.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebContext.java
deleted file mode 100644
index 3ee0250..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebContext.java
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-import java.util.Set;
-
-import javax.servlet.ServletContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.describe.DescriptionReceiver;
-
-/**
- * Adapts {@link javax.servlet.ServletContext}&nbsp;as
- * {@link org.apache.tapestry.web.WebContext}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ServletWebContext implements WebContext
-{
-
-    private static final Log LOG = LogFactory.getLog(ServletWebContext.class);
-
-    private final ServletContext _servletContext;
-
-    public ServletWebContext(ServletContext context)
-    {
-        Defense.notNull(context, "context");
-
-        _servletContext = context;
-    }
-
-    public void describeTo(DescriptionReceiver receiver)
-    {
-        receiver.describeAlternate(_servletContext);
-    }
-
-    public List getAttributeNames()
-    {
-        return WebUtils.toSortedList(_servletContext.getAttributeNames());
-    }
-
-    public Object getAttribute(String name)
-    {
-        return _servletContext.getAttribute(name);
-    }
-
-    public void setAttribute(String name, Object attribute)
-    {
-        if (attribute == null)
-            _servletContext.removeAttribute(name);
-        else _servletContext.setAttribute(name, attribute);
-
-    }
-
-    public URL getResource(String path)
-    {
-        try
-        {
-            return _servletContext.getResource(path);
-        }
-        catch (MalformedURLException ex)
-        {
-            LOG.error(WebMessages.errorGettingResource(path, ex), ex);
-
-            return null;
-        }
-    }
-
-    public String getInitParameterValue(String name)
-    {
-        return _servletContext.getInitParameter(name);
-    }
-
-    public List getInitParameterNames()
-    {
-        return WebUtils.toSortedList(_servletContext.getInitParameterNames());
-    }
-
-    public String getMimeType(String resourcePath)
-    {
-        return _servletContext.getMimeType(resourcePath);
-    }
-
-    public String getRealPath(String path)
-    {
-        return _servletContext.getRealPath(path);
-    }
-
-    public InputStream getResourceAsStream(String path)
-    {
-        return _servletContext.getResourceAsStream(path);
-    }
-
-    public Set getResourcePaths(String path)
-    {
-        return _servletContext.getResourcePaths(path);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebRequest.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebRequest.java
deleted file mode 100644
index 48fbd63..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebRequest.java
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.describe.DescriptionReceiver;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import java.io.IOException;
-import java.security.Principal;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Adapter from {@link javax.servlet.http.HttpServletRequest}&nbsp;to
- * {@link org.apache.tapestry.web.WebRequest}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ServletWebRequest implements WebRequest
-{
-    private final HttpServletRequest _servletRequest;
-
-    private final HttpServletResponse _servletResponse;
-
-    private WebSession _webSession;
-
-    public ServletWebRequest(HttpServletRequest request, HttpServletResponse response)
-    {
-        Defense.notNull(request, "request");
-        Defense.notNull(response, "response");
-        
-        _servletRequest = request;
-        _servletResponse = response;
-    }
-
-    public List getParameterNames()
-    {
-        return WebUtils.toSortedList(_servletRequest.getParameterNames());
-    }
-
-    public String getParameterValue(String parameterName)
-    {
-        return _servletRequest.getParameter(parameterName);
-    }
-
-    public String[] getParameterValues(String parameterName)
-    {
-        return _servletRequest.getParameterValues(parameterName);
-    }
-
-    public String getContextPath()
-    {
-        return _servletRequest.getContextPath();
-    }
-
-    public WebSession getSession(boolean create)
-    {
-        if (_webSession != null)
-            return _webSession;
-
-        HttpSession session = _servletRequest.getSession(create);
-
-        if (session != null)
-            _webSession = new ServletWebSession(session);
-
-        return _webSession;
-    }
-
-    public List getAttributeNames()
-    {
-        return WebUtils.toSortedList(_servletRequest.getAttributeNames());
-    }
-
-    public Object getAttribute(String name)
-    {
-        return _servletRequest.getAttribute(name);
-    }
-
-    public void setAttribute(String name, Object attribute)
-    {
-        if (attribute == null)
-            _servletRequest.removeAttribute(name);
-        else
-            _servletRequest.setAttribute(name, attribute);
-    }
-
-    public String getScheme()
-    {
-        return _servletRequest.getScheme();
-    }
-
-    public String getServerName()
-    {
-        return _servletRequest.getServerName();
-    }
-
-    public int getServerPort()
-    {
-        return _servletRequest.getServerPort();
-    }
-
-    public String getRequestURI()
-    {
-        return _servletRequest.getRequestURI();
-    }
-
-    public void forward(String URL)
-    {
-        if (HiveMind.isBlank(URL))
-        {
-            performForward("/");
-            return;
-        }
-
-        boolean internal = !(URL.startsWith("/") || URL.indexOf("://") > 0);
-
-        if (internal)
-            performForward("/" + URL);
-        else
-            sendRedirect(URL);
-    }
-
-    private void sendRedirect(String URL)
-    {
-        String finalURL = _servletResponse.encodeRedirectURL(URL);
-
-        try
-        {
-            _servletResponse.sendRedirect(finalURL);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(WebMessages.unableToRedirect(URL, ex), ex);
-        }
-
-    }
-
-    private void performForward(String URL)
-    {
-        RequestDispatcher dispatcher = _servletRequest.getRequestDispatcher(URL);
-
-        if (dispatcher == null)
-            throw new ApplicationRuntimeException(WebMessages.unableToFindDispatcher(URL));
-
-        try
-        {
-            dispatcher.forward(_servletRequest, _servletResponse);
-        }
-        catch (ServletException ex)
-        {
-            throw new ApplicationRuntimeException(WebMessages.unableToForward(URL, ex), ex);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(WebMessages.unableToForward(URL, ex), ex);
-        }
-    }
-
-    /**
-     * Returns {@link HttpServletRequest#getServletPath()}.
-     */
-    public String getActivationPath()
-    {
-        return _servletRequest.getServletPath();
-    }
-
-    public String getPathInfo()
-    {
-        return _servletRequest.getPathInfo();
-    }
-
-    public Locale getLocale()
-    {
-        return _servletRequest.getLocale();
-    }
-
-    public void describeTo(DescriptionReceiver receiver)
-    {
-        receiver.describeAlternate(_servletRequest);
-    }
-
-    public String getHeader(String name)
-    {
-        return _servletRequest.getHeader(name);
-    }
-
-    public long getDateHeader(String name)
-    {
-        return _servletRequest.getDateHeader(name);
-    }
-
-    public int getIntHeader(String name)
-    {
-        return _servletRequest.getIntHeader(name);
-    }
-
-    public String getRemoteUser()
-    {
-        return _servletRequest.getRemoteUser();
-    }
-
-    public Principal getUserPrincipal()
-    {
-        return _servletRequest.getUserPrincipal();
-    }
-
-    public boolean isUserInRole(String role)
-    {
-        return _servletRequest.isUserInRole(role);
-    }
-    
-    public boolean isSecure()
-    {
-        return _servletRequest.isSecure();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebResponse.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebResponse.java
deleted file mode 100644
index 6b20f2c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebResponse.java
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.util.ContentType;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-
-/**
- * Adapts {@link javax.servlet.http.HttpServletResponse}&nbsp;as
- * {@link org.apache.tapestry.web.WebResponse}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ServletWebResponse implements WebResponse
-{
-    private static final Log DEFAULT_LOG = LogFactory.getLog(ServletWebResponse.class);
-
-    private final Log _log;
-
-    private final boolean _tomcatPatch;
-
-    private final HttpServletResponse _servletResponse;
-
-    private boolean _needsReset;
-
-    private ContentType _printWriterContentType;
-
-    public ServletWebResponse(HttpServletResponse response)
-    {
-        this(response, DEFAULT_LOG, Boolean.getBoolean("org.apache.tapestry.607-patch"));
-    }
-
-    /**
-     * Alternate constructor used by some tests.
-     *
-     * @param response
-     *          The wrapped response.
-     * @param log
-     *          Logger.
-     * @param tomcatPatch
-     *          Whether or not to apply tomcat workaround.
-     */
-    ServletWebResponse(HttpServletResponse response, Log log, boolean tomcatPatch)
-    {
-        Defense.notNull(response, "response");
-        Defense.notNull(log, "log");
-
-        _servletResponse = response;
-        _log = log;
-        _tomcatPatch = tomcatPatch;
-    }
-
-    public OutputStream getOutputStream(ContentType contentType)
-    {
-        Defense.notNull(contentType, "contentType");
-
-        _servletResponse.setContentType(contentType.getMimeType());
-
-        try
-        {
-            return _servletResponse.getOutputStream();
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(WebMessages.streamOpenError(contentType, ex),
-                    null, ex);
-        }
-    }
-
-    public PrintWriter getPrintWriter(ContentType contentType) throws IOException
-    {
-        Defense.notNull(contentType, "contentType");
-
-        if (_needsReset)
-            reset();
-
-        _needsReset = true;
-        
-        if (_printWriterContentType == null || ! _tomcatPatch)
-        {
-            _servletResponse.setContentType(contentType.toString());
-            _printWriterContentType = contentType;
-        }
-        else
-        {
-            // This is a workaround for a tomcat bug; it takes effect when a page is reset so that
-            // the exception page (typically) can be rendered. See TAPESTRY-607 for details.
-
-            if (!_printWriterContentType.equals(contentType))
-                _log.warn(WebMessages.contentTypeUnchanged(_printWriterContentType, contentType));
-        }
-
-        try
-        {
-            return _servletResponse.getWriter();
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(WebMessages.writerOpenError(contentType, ex),
-                    null, ex);
-        }
-    }
-
-    public String encodeURL(String url)
-    {
-        return _servletResponse.encodeURL(url);
-    }
-
-    public void reset()
-    {
-        try
-        {
-            _servletResponse.reset();
-        }
-        catch (IllegalStateException ex)
-        {
-            _log.error(WebMessages.resetFailed(ex), ex);
-        }
-    }
-
-    public void setContentLength(int length)
-    {
-        _servletResponse.setContentLength(length);
-    }
-
-    public String getNamespace()
-    {
-        return "";
-    }
-
-    public void setDateHeader(String name, long date)
-    {
-        _servletResponse.setDateHeader(name, date);
-    }
-
-    public void setStatus(int status)
-    {
-        _servletResponse.setStatus(status);
-    }
-
-    public void setHeader(String name, String value)
-    {
-        _servletResponse.setHeader(name, value);
-    }
-
-    public void setIntHeader(String name, int value)
-    {
-        _servletResponse.setIntHeader(name, value);
-    }
-
-    public void sendError(int statusCode, String message) throws IOException
-    {
-        _servletResponse.sendError(statusCode, message);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebSession.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebSession.java
deleted file mode 100644
index 09e4d2c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/ServletWebSession.java
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import java.util.List;
-
-import javax.servlet.http.HttpSession;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.describe.DescriptionReceiver;
-
-/**
- * Adapts {@link javax.servlet.http.HttpSession}&nbsp; as
- * {@link org.apache.tapestry.web.WebSession}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ServletWebSession implements WebSession
-{
-    private final HttpSession _httpSession;
-
-    public ServletWebSession(HttpSession session)
-    {
-        Defense.notNull(session, "session");
-
-        _httpSession = session;
-    }
-
-    public void describeTo(DescriptionReceiver receiver)
-    {
-        receiver.describeAlternate(_httpSession);
-    }
-
-    public List getAttributeNames()
-    {
-        return WebUtils.toSortedList(_httpSession.getAttributeNames());
-    }
-
-    public Object getAttribute(String name)
-    {
-        return _httpSession.getAttribute(name);
-    }
-
-    public void setAttribute(String name, Object attribute)
-    {
-        if (attribute == null)
-            _httpSession.removeAttribute(name);
-        else
-            _httpSession.setAttribute(name, attribute);
-    }
-
-    public String getId()
-    {
-        return _httpSession.getId();
-    }
-
-    public boolean isNew()
-    {
-        return _httpSession.isNew();
-    }
-
-    public void invalidate()
-    {
-        _httpSession.invalidate();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public long getCreationTime()
-    {
-        return _httpSession.getCreationTime();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public long getLastAccessedTime()
-    {
-        return _httpSession.getLastAccessedTime();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public int getMaxInactiveInterval()
-    {
-        return _httpSession.getMaxInactiveInterval();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public void setMaxInactiveInterval(int interval)
-    {
-        _httpSession.setMaxInactiveInterval(interval);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebActivator.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebActivator.java
deleted file mode 100644
index 1d98aab..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebActivator.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import org.apache.tapestry.describe.Describable;
-
-/**
- * A wrapper around a {@link javax.servlet.http.HttpServlet}&nbsp;or 
- * {@link javax.portlet.Portlet}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface WebActivator extends InitializationParameterHolder, Describable
-{
-    String getActivatorName();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebContext.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebContext.java
deleted file mode 100644
index 05d9a78..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebContext.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Set;
-
-import org.apache.tapestry.describe.Describable;
-
-/**
- * A representation of a set of servlets (or portlets) packaged together as a web application
- * archive. Attributes stored within the context are global to all 'lets (but not distributed across
- * a server cluster).
- * 
- * @author Howard M. Lewis Ship
- */
-public interface WebContext extends AttributeHolder, InitializationParameterHolder, Describable
-{
-    /**
-     * Returns a URL to the resource that is mapped to a specified path. The path must begin with a
-     * "/" and is interpreted as relative to the current context root.
-     */
-
-    URL getResource(String path);
-
-    /**
-     * Returns the MIME type of the specified file, or null if the MIME type is not known.
-     */
-    String getMimeType(String resourcePath);
-    
-    /**
-     * Returns a directory-like listing of all the paths to resources within 
-     * the web application whose longest sub-path matches the supplied 
-     * path argument. Paths indicating subdirectory paths end with a slash (/). 
-     * The returned paths are all relative to the root of the web application 
-     * and have a leading '/'. 
-     * @param path  partial path used to match the resources, which must start with a '/'
-     * @return a Set containing the directory listing, or null if there are no resources 
-     * in the web application whose path begins with the supplied path.
-     */
-    Set getResourcePaths(String path);
-    
-    /**
-     * Returns the resource located at the named path as an <code>InputStream</code>
-     * object.
-     * @param path a <code>String</code> specifying the path to the resource
-     * @return the <code>InputStream</code> returned to the servlet, 
-     *         or <code>null</code> if no resource exists at the specified path
-     */
-    InputStream getResourceAsStream(String path);
-    
-    /**
-     * Returns a <code>String</code> containing the real path for a given virtual path. 
-     * For example, the path "/index.html" returns the absolute file path 
-     * on the server's filesystem would be served by a request for 
-     * "http://host/contextPath/index.html", where contextPath is the 
-     * context path of this WebContext.
-     * 
-     * @param path a <code>String</code> specifying a virtual path
-     * @return a <code>String</code> specifying the real path, or <code>null</code> if the 
-     *         translation cannot be performed
-     */
-    String getRealPath(String path);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebContextResource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebContextResource.java
deleted file mode 100644
index 793472d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebContextResource.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.AbstractResource;
-import org.apache.hivemind.util.LocalizedResource;
-
-import javax.servlet.ServletContext;
-import java.net.URL;
-import java.util.Locale;
-
-/**
- * Implementation of {@link org.apache.hivemind.Resource} for resources found within a
- * {@link org.apache.tapestry.web.WebContext}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-public class WebContextResource extends AbstractResource
-{
-    private WebContext _context;
-
-    public WebContextResource(WebContext context, String path)
-    {
-        this(context, path, null);
-    }
-
-    public WebContextResource(WebContext context, String path, Locale locale)
-    {
-        super(path, locale);
-
-        _context = context;
-    }
-
-    /**
-     * Locates the resource using {@link LocalizedWebContextResourceFinder}and
-     * {@link ServletContext#getResource(java.lang.String)}.
-     */
-
-    public Resource getLocalization(Locale locale)
-    {
-        LocalizedWebContextResourceFinder finder = new LocalizedWebContextResourceFinder(_context);
-
-        String path = getPath();
-        LocalizedResource localizedResource = finder.resolve(path, locale);
-
-        if (localizedResource == null)
-            return null;
-
-        String localizedPath = localizedResource.getResourcePath();
-        Locale pathLocale = localizedResource.getResourceLocale();
-
-        if (localizedPath == null)
-            return null;
-
-        if (path.equals(localizedPath))
-            return this;
-
-        return new WebContextResource(_context, localizedPath, pathLocale);
-    }
-
-    public URL getResourceURL()
-    {
-        return _context.getResource(getPath());
-    }
-
-    public String toString()
-    {
-        return "context:" + getPath();
-    }
-
-    public int hashCode()
-    {
-        return 2387 & getPath().hashCode();
-    }
-
-    protected Resource newResource(String path)
-    {
-        return new WebContextResource(_context, path);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebMessages.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebMessages.java
deleted file mode 100644
index 0f98799..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebMessages.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import org.apache.hivemind.impl.MessageFormatter;
-import org.apache.tapestry.util.ContentType;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class WebMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(WebMessages.class);
-
-    /* defeat instantiation */
-    private WebMessages() { }
-    
-    static String streamOpenError(ContentType contentType, Throwable cause)
-    {
-        return _formatter.format("stream-open-error", contentType, cause);
-    }
-
-    static String errorGettingResource(String path, Throwable ex)
-    {
-        return _formatter.format("error-getting-resource", path, ex);
-    }
-
-    static String unableToFindDispatcher(String url)
-    {
-        return _formatter.format("unable-to-find-dispatcher", url);
-    }
-
-    static String unableToForward(String url, Throwable cause)
-    {
-        return _formatter.format("unable-to-forward", url, cause);
-    }
-
-    static String unableToRedirect(String url, Throwable cause)
-    {
-        return _formatter.format("unable-to-redirect", url, cause);
-    }
-
-    static String writerOpenError(ContentType contentType, Throwable cause)
-    {
-        return _formatter.format("writer-open-error", contentType, cause);
-    }
-
-    static String resetFailed(Throwable cause)
-    {
-        return _formatter.format("reset-failed", cause);
-    }
-
-    static String contentTypeUnchanged(ContentType existing, ContentType requested)
-    {
-        return _formatter.format("content-type-unchanged", existing, requested);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebRequest.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebRequest.java
deleted file mode 100644
index 1324ae0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebRequest.java
+++ /dev/null
@@ -1,267 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import org.apache.tapestry.describe.Describable;
-
-import javax.servlet.http.HttpServletRequest;
-import java.security.Principal;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Contains information about the current request, including URLs, schemes, parameters, properties
- * and attributes. This is essentially a generic version of
- * {@link javax.servlet.http.HttpServletRequest}. In some cases, certain methods will be
- * unsupported in some implementations (such as {@link #getHeader(String)} for Portlet Tapestry).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface WebRequest extends AttributeHolder, Describable
-{
-    /**
-     * Returns the names of all query parameters for this request. Note that this may return an
-     * empty list if an HTML form submission uploads files (with a request encoding of
-     * multipart/form-data). Accessing query parameters in such an event requires parsing of the
-     * request input stream.
-     * 
-     * @return List of Strings, in ascending alphabetical order
-     */
-
-    List getParameterNames();
-
-    /**
-     * Returns a parameter value. If the parameter was submitted with multiple values, then the
-     * first submitted value is returned. May return null if no parameter was submitted with the
-     * given name.
-     * 
-     * @param parameterName
-     *            name of parameter to obtain
-     * @return the corresponding value, or null if a value for the parameter was not submitted in
-     *         the request
-     * @see #getParameterValues(String)
-     */
-
-    String getParameterValue(String parameterName);
-
-    /**
-     * Returns all parameter values for a particular parameter name. May return null.
-     * <p>
-     * The caller should <em>not modify</em> the returned value.
-     * 
-     * @param parameterName
-     *            name of parameter to obtain
-     * @return the corresponding values, or null if no values for the parameter were submitted in
-     *         the request
-     * @see #getParameterValue(String)
-     */
-
-    String[] getParameterValues(String parameterName);
-
-    /**
-     * Returns the portion of the request URI that indicates the context of the request. The context
-     * path always comes first in a request URI. The path starts with a "/" character but does not
-     * end with a "/" character.
-     *
-     * @return The servlet context path.
-     */
-
-    String getContextPath();
-
-    /**
-     * Returns the current {@link WebSession}associated with this request, possibly creating it if
-     * it does not already exist. If create is false and the request has no valid session, this
-     * method returns null. To make sure the session is properly maintained, you must call this
-     * method <em>before</em> the response is committed.
-     * 
-     * @param create
-     *            if true, the session will be created and returned if it does not already exist
-     * @return The session, or null if it does not exist (and create is false)
-     */
-    WebSession getSession(boolean create);
-
-    /**
-     * Returns the name of the scheme used to make this request. For example, http, https, or ftp.
-     * Different schemes have different rules for constructing URLs, as noted in RFC 1738.
-     *
-     * @return The scheme.
-     */
-    String getScheme();
-
-    /**
-     * Returns the host name of the server that received the request. Note that behind a firewall,
-     * this may be obscured (i.e., it may be the name of the firewall server, which is not
-     * necessarily visible to clients outside the firewall).
-     *
-     * @return The name of the server.
-     * @see org.apache.tapestry.request.IRequestDecoder
-     */
-
-    String getServerName();
-
-    /**
-     * Returns the port number on which this request was received.
-     *
-     * @return The port number this request is acting on.
-     */
-
-    int getServerPort();
-
-    /**
-     * Returns the path portion of the request which triggered this request. Query parameters,
-     * scheme, server and port are omitted.
-     * <p>
-     * Note: portlets do not know their request URI.
-     * </p>
-     *
-     * @return The requested URI.
-     */
-
-    String getRequestURI();
-
-    /**
-     * Redirects to the indicated URL. If the URL is local, then a forward occurs. Otherwise, a
-     * client side redirect is returned to the client browser.
-     *
-     * @param URL
-     *          The url to forward the request to.
-     */
-
-    void forward(String URL);
-
-    /**
-     * Returns the path of the resource which activated this request (this is the equivalent of the
-     * servlet path for a servlet request). The activation path will not end with a slash.
-     * 
-     * @return The full servlet path (for servlet requests), or a blank string (for portlet requests).
-     */
-    String getActivationPath();
-
-    /**
-     * Return any additional path info beyond the servlet path itself. Path info, if non-null,
-     * begins with a path.
-     * 
-     * @return path info, or null if no path info
-     */
-
-    String getPathInfo();
-
-    /**
-     * Returns the preferred locale to which content should be localized, as specified by the client
-     * or by the container. May return null.
-     *
-     * @return The locale associated with the request, may be null.
-     */
-    Locale getLocale();
-
-    /**
-     * Returns the value of the specified request header.
-     * 
-     * @param name
-     *            the name of the header to retrieve
-     * @return the header value as a string, or null if the header is not in the request.
-     */
-
-    String getHeader(String name);
-
-    /**
-     * Returns the value of the specified request header
-     * as a <code>long</code> value that represents a
-     * <code>Date</code> object. Use this method with
-     * headers that contain dates, such as
-     * <code>If-Modified-Since</code>.
-     *
-     * <p>The date is returned as
-     * the number of milliseconds since January 1, 1970 GMT.
-     * The header name is case insensitive.
-     *
-     * <p>If the request did not have a header of the
-     * specified name, this method returns -1. If the header
-     * can't be converted to a date, the method throws
-     * an <code>IllegalArgumentException</code>.
-     *
-     * @param name a <code>String</code> specifying the
-     * name of the header
-     *
-     * @return a <code>long</code> value representing the
-     * date specified in the header expressed as the number
-     * of milliseconds since January 1, 1970 GMT, or -1 if
-     * the named header was not included with the reqest
-     *
-     * @exception IllegalArgumentException If the header value
-     * can't be converted to a date
-     */
-    long getDateHeader(String name);
-
-    /**
-     * Returns the value of the specified request header
-     * as an <code>int</code>. If the request does not have a header
-     * of the specified name, this method returns -1. If the
-     * header cannot be converted to an integer, this method
-     * throws a <code>NumberFormatException</code>.
-     *
-     * <p>The header name is case insensitive.
-     *
-     * @param name a <code>String</code> specifying the name
-     * of a request header
-     *
-     * @return an integer expressing the value of the request header or -1
-     * if the request doesn't have a header of this name
-     *
-     * @exception NumberFormatException If the header value can't be
-     * converted to an <code>int</code>
-     */
-    int getIntHeader(String name);
-
-    /**
-     * Returns the login of the user making this request, if the user has been authenticated, or
-     * null if the user has not been authenticated.
-     * 
-     * @return a String specifying the login of the user making this request, or null if the user
-     *         login is not known.
-     */
-
-    String getRemoteUser();
-
-    /**
-     * Returns a java.security.Principal object containing the name of the current authenticated
-     * user.
-     * 
-     * @return a java.security.Principal containing the name of the user making this request, or
-     *         null if the user has not been authenticated.
-     */
-    Principal getUserPrincipal();
-
-    /**
-     * * Returns a boolean indicating whether the authenticated user is included in the specified
-     * logical "role". Roles and role membership can be defined using deployment descriptors. If the
-     * user has not been authenticated, the method returns false.
-     * 
-     * @param role
-     *            a String specifying the name of the role
-     * @return a boolean indicating whether the user making this request belongs to a given role;
-     *         false if the user has not been authenticated.
-     */
-    boolean isUserInRole(String role);
-    
-    /**
-     * Taken from {@link HttpServletRequest}. Indicates if this request is coming in on
-     * a SSL/secure connection. 
-     * 
-     * @return True if secure, false otherwise.
-     */
-    boolean isSecure();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebResponse.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebResponse.java
deleted file mode 100644
index 16fec43..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebResponse.java
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import org.apache.tapestry.util.ContentType;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-
-/**
- * Controls the response to the client, and specifically allows for creating the output stream (or
- * print writer) to which content is sent. This is essentially a generic version of
- * {@link javax.servlet.http.HttpServletResponse}. Some operations may be unsupported in some
- * implementations (for example, the portlet implementation can't handle any of the setHeader
- * methods).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface WebResponse
-{
-    /**
-     * Returns a output stream to which output should be sent. This method should only be invoked
-     * once on a response.
-     *
-     * @param contentType
-     *          The encoding type that this outputstream will write content as.
-     * @return the output stream, configured for the given type.
-     *
-     * @throws IOException On io error.
-     */
-
-    OutputStream getOutputStream(ContentType contentType)
-      throws IOException;
-
-    /**
-     * Returns a {@link PrintWriter} to which output should be sent. This method should be invoked
-     * once on a response. A second call is expected to be so that an exception page can be
-     * rendered, and the underlying request data is reset.
-     *
-     * @param contentType
-     *          The type of content encoding the writer is for.
-     * @return A new {@link PrintWriter} instance.
-     *
-     * @throws IOException On io error.
-     */
-
-    PrintWriter getPrintWriter(ContentType contentType)
-      throws IOException;
-
-    /**
-     * Encodes a URL, which adds information to the URL needed to ensure that the request triggered
-     * by the URL will be associated with the current session (if any). In most cases, the string is
-     * returned unchanged.
-     *
-     * @param url
-     *          The URL to encode.
-     * @return The url encoded.
-     */
-
-    String encodeURL(String url);
-
-    /**
-     * Resets any buffered content. This may be used after an error to radically change what the
-     * output will be.
-     */
-
-    void reset();
-
-    /**
-     * Sets the response content length header.
-     *
-     * @param contentLength
-     *          The total content length this response will write. 
-     */
-    void setContentLength(int contentLength);
-
-    /**
-     * Returns a value to be prefixed or suffixed with any client-side JavaScript elements
-     * (variables and function names) to ensure that they are unique with the context of the entire
-     * page. For servlets, this is the empty string.
-     *
-     * @return The namespace that this requests resources should be pre-pended with.
-     */
-
-    String getNamespace();
-
-    /**
-     * Sets a response header as a date.
-     * 
-     * @param name
-     *            the name of the header to set
-     * @param date
-     *            the date value to set, in milliseconds since the epoch
-     */
-    void setDateHeader(String name, long date);
-
-    /**
-     * Sets a response header as a string.
-     * 
-     * @param name
-     *            the name of the header to set
-     * @param value
-     *            the value for the named header
-     */
-
-    void setHeader(String name, String value);
-
-    /**
-     * Sets a response header with the given name and integer value.
-     * 
-     * @param name
-     *            the name of the header to set
-     * @param value
-     *            the value for the named header
-     */
-    void setIntHeader(String name, int value);
-
-    /**
-     * Sets the status code for this response.
-     *
-     * @param status
-     *          The HTTP status code to set on the return header.
-     */
-    void setStatus(int status);
-
-    /**
-     * Sends an error response.
-     *
-     * @param statusCode
-     *          The error status code to set on the header.
-     * @param message
-     *          The message to give as the reason for error.
-     *
-     * @throws IOException on io error.
-     */
-    void sendError(int statusCode, String message) throws IOException;
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebSession.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebSession.java
deleted file mode 100644
index 9b47069..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebSession.java
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import org.apache.tapestry.describe.Describable;
-
-/**
- * Primarily concerned with maintaining server-side state as attributes.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface WebSession extends AttributeHolder, Describable
-{
-    /**
-     * Returns a unique string identifier used to identify the session. This value is provided by
-     * the container, and is typically incorporated into URLs, or stored as a HTTP cookie.
-     * 
-     * @see org.apache.tapestry.web.WebResponse#encodeURL(String) .
-     */
-    String getId();
-
-    /**
-     * Returns true if the client does not yet know about the session or if the client chooses not
-     * to join the session.
-     */
-    boolean isNew();
-
-    /**
-     * Invalidates this session then unbinds any objects bound to it.
-     * 
-     * @throws IllegalStateException
-     *             if the session is already invalidated.
-     */
-
-    void invalidate();
-    
-    /**
-     * Returns the time when this session was created, measured in milliseconds 
-     * since midnight January 1, 1970 GMT.
-     * 
-     * @return a long specifying when this session was created, 
-     *          expressed in milliseconds since 1/1/1970 GMT
-     */
-    
-    long getCreationTime();
-    
-    /**
-     * Returns the last time the client sent a request associated with this session, as 
-     * the number of milliseconds since midnight January 1, 1970 GMT, and marked by the 
-     * time the container recieved the request.
-     *
-     * <p> Actions that your application takes, such as getting or setting a value associated 
-     *  with the session, do not affect the access time.</p>
-     * 
-     * @return a long  representing the last time the client sent a request associated with 
-     *          this session, expressed in milliseconds since 1/1/1970 GMT
-     */
-    
-    long getLastAccessedTime();
-    
-    /**
-     * Returns the maximum time interval, in seconds, that the servlet container will 
-     * keep this session open between client accesses. After this interval, the servlet 
-     * container will invalidate the session. The maximum time interval can be set with 
-     * the setMaxInactiveInterval method. A negative time indicates the session should 
-     * never timeout.
-     * 
-     * @return an integer specifying the number of seconds this session 
-     *         remains open between client requests
-     */
-    
-    int getMaxInactiveInterval();
-    
-    /**
-     * Specifies the time, in seconds, between client requests before the servlet container 
-     * will invalidate this session. A negative time indicates the session should never timeout.
-     * 
-     * @param interval - An integer specifying the number of seconds
-     */
-    
-    void setMaxInactiveInterval(int interval);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebStrings.properties b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebStrings.properties
deleted file mode 100644
index 2faeec4..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebStrings.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-stream-open-error=Error opening response stream for content type {0}: {1}
-writer-open-error=Error opening response writer for content type {0}: {1}
-error-getting-resource=Error getting context resource ''{0}'': {1}
-unable-to-redirect=Unable to redirect to {0}: {1}
-unable-to-find-dispatcher=Unable to find a request dispatcher for local resource ''{0}''.
-unable-to-forward=Unable to forward to local resource ''{0}'': {1}
-reset-failed=Unable to reset response buffer: {0}
-content-type-unchanged=Unable to change response content type from ''{0}'' to ''{1}'' (following a reset). See Tapestry issue TAPESTRY-607.
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebUtils.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebUtils.java
deleted file mode 100644
index 23c3541..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/WebUtils.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-
-import org.apache.hivemind.util.Defense;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class WebUtils
-{
-    /* defeat insantiation */
-    private WebUtils() { }
-    
-    /**
-     * Converts an Enumeration of Strings into an unmodifiable List of Strings, sorted into
-     * ascending order.
-     */
-
-    public static List toSortedList(Enumeration e)
-    {
-        Defense.notNull(e, "e");
-
-        List list = new ArrayList();
-        while (e.hasMoreElements())
-            list.add(e.nextElement());
-
-        if (list.isEmpty())
-            return Collections.EMPTY_LIST;
-
-        Collections.sort(list);
-
-        return Collections.unmodifiableList(list);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/package.html
deleted file mode 100644
index 6d689a5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/web/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Apache Tapestry</title>
-</head>
-<body>
-
-<p>Interfaces that provide an abtraction between Tapestry and the underlying Servlet APIs.  An external library provides support
-    for JSR-168 Portlets.</p>  
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/AbstractPostfield.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/AbstractPostfield.java
deleted file mode 100644
index 1c29135..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/AbstractPostfield.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.AbstractFormComponent;
-
-/**
- * A base class for building components that correspond to WML postfield elements. All such
- * components must be wrapped (directly or indirectly) by a {@link Go}component.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class AbstractPostfield extends AbstractFormComponent
-{
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.beginEmpty("postfield");
-
-        writer.attribute("name", getName());
-
-        String varName = getVarName();
-        writer.attributeRaw("value", varName != null ? getEncodedVarName(varName) : "");
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-    }
-
-    private String getEncodedVarName(String varName)
-    {
-        return "$(" + varName + ")";
-    }
-
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    public abstract String getVarName();
-
-    public void updateValue(Object value)
-    {
-        getBinding("value").setObject(value);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Card.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Card.java
deleted file mode 100644
index 8c5d805..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Card.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- * A deck contains a collection of cards. There is a variety of card types, each specifying a
- * different mode of user interaction.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Card extends AbstractComponent
-{
-    private static final String ATTRIBUTE_NAME = "org.apache.tapestry.wml.Card";
-
-    /**
-     * @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(Tapestry.getMessage("Card.cards-may-not-nest"),
-                    this, null, null);
-
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-
-        writer.begin("card");
-
-        String title = getTitle();
-        if (HiveMind.isNonBlank(title))
-            writer.attribute("title", title);
-
-        renderInformalParameters(writer, cycle);
-
-        IMarkupWriter nestedWriter = writer.getNestedWriter();
-
-        renderBody(nestedWriter, cycle);
-
-        nestedWriter.close();
-
-        writer.end();
-
-        cycle.removeAttribute(ATTRIBUTE_NAME);
-    }
-
-    public abstract String getTitle();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Card.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Card.jwc
deleted file mode 100644
index d177e92..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Card.jwc
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Card">
-
-    <description>
-        An WML deck contains a collection of cards. There is a variety of card types, each specifying a different mode
-        of user interaction.
-    </description>
-
-    <parameter name="title" type="java.lang.String" direction="in">
-        <description>
-            The title attribute specifies advisory information about the element. The title may be rendered in a
-            variety of ways by the user agent (eg, suggested bookmark name, pop-up tooltip, etc.).
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Deck.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Deck.java
deleted file mode 100644
index 6006aa3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Deck.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractPage;
-import org.apache.tapestry.util.ContentType;
-
-/**
- * Concrete class for WML decks. Most decks should be able to simply subclass this, adding new
- * properties and methods. An unlikely exception would be a deck that was not based on a template.
- * 
- * @author David Solis
- * @since 0.2.9
- */
-
-public abstract class Deck extends AbstractPage
-{
-    /**
-     * @return "text/vnd.wap.wml"
-     */
-    public ContentType getResponseContentType()
-    {
-        return new ContentType("text/vnd.wap.wml");
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Do.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Do.java
deleted file mode 100644
index 237430d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Do.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The do element provides a general mechanism for the user to act upon the
- * current card, in other words a card-level user interface element. The
- * representation of the do element is user agent dependent and the author must
- * only assume that the element is mapped to a unique user interface widget that
- * the user can activate. For example, the widget mapping may be to a
- * graphically rendered button, a soft or function key, a voice-activated
- * command sequence, or any other interface that has a simple "activate"
- * operation with no inter-operation persistent state. The do element may appear
- * at both the card and deck-level.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Do extends AbstractComponent
-{
-
-    /**
-     * @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.begin("do");
-
-            writer.attribute("type", getType());
-
-            String label = getLabel();
-            if (HiveMind.isNonBlank(label)) writer.attribute("label", label);
-
-            renderInformalParameters(writer, cycle);
-        }
-
-        renderBody(writer, cycle);
-
-        if (render) writer.end();
-    }
-
-    public abstract String getType();
-
-    public abstract String getLabel();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Do.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Do.jwc
deleted file mode 100644
index e9d7013..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Do.jwc
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Do">
-
-    <description>
-        The do element provides a general mechanism for the user to act upon the current card, i.e. a card-level user
-        interface element.
-    </description>
-
-    <parameter name="type" type="java.lang.String" direction="in" required="yes" >
-        <description>
-            The do element type. This attribute provides a hint to the user agent about the author's intended use of
-            the element and how the element should be mapped to a physical user interface construct.
-            Predefined DO types are accept, prev, help, reset, options, delete and unkown.
-        </description>
-    </parameter>
-
-    <parameter name="label" type="java.lang.String" direction="in">
-        <description>
-            If the user agent is able to dynamically label the user interface widget, this attribute specifies a textual
-            string suitable for such labelling.
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Go.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Go.java
deleted file mode 100644
index 2508fbe..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Go.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.Form;
-
-/**
- * The go element declares a go task, indicating navigation to a URI. If the URI
- * names a WML card or deck, it is displayed.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Go extends Form
-{
-
-    /**
-     * This component doesn't support event handlers.
-     */
-    protected void emitEventHandlers(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    protected String constructFormNameForActionService(String actionId)
-    {
-        return "Go" + actionId;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Go.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Go.jwc
deleted file mode 100644
index 8d6313a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Go.jwc
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2004, 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Go">
-
-    <description>The go element declares a go task, indicating navigation to a URI.</description>
-
-    <bean name="delegate" class="org.apache.tapestry.valid.ValidationDelegate" property="delegate" />
-
-    <parameter name="method" default-value="literal:post">
-        <description>
-            The method used by the form when it is submitted, defaults to POST.
-        </description>
-    </parameter>
-
-    <parameter name="success">
-        <description>
-            Object invoked when the form is submitted normally (not a cancel or a refresh) and the
-            validation delegate contains no errors.
-        </description>
-    </parameter>
-
-    <parameter name="cancel">
-        <description>
-            Object invoked when the form is cancelled (a special type of form submission). The
-            cancel listener (if any) overrides the standard listener. Other properties will not be
-            affected by the rewind.
-        </description>
-    </parameter>
-
-    <parameter name="refresh">
-        <description>
-            Object invoked when the form is refreshed (a special type of form submission). The
-            refresh listener (if any) overrides the standard listener. Other properties managed by
-            enclosed components will be updated.
-        </description>
-    </parameter>
-
-    <parameter name="listener">
-        <description>Default listener used when no other listener is invoked.</description>
-    </parameter>
-
-
-    <parameter name="stateful" default-value="true">
-        <description>
-            If true (the default), then an active session is required when the Go is submitted, if a
-            session was active when the Go was rendered.
-        </description>
-    </parameter>
-
-    <parameter name="scheme">
-        <description>
-            Forces the link to be generated as an absolute URL with the given scheme (unless the
-            scheme matches the scheme for the current request).
-        </description>
-    </parameter>
-
-    <parameter name="port">
-        <description>
-            Forces the link to be generated as an absolute URL with the given port (unless the port
-            matches the port for the current request).
-        </description>
-    </parameter>
-
-
-    <reserved-parameter name="href" />
-    <reserved-parameter name="name" />
-
-    <inject property="directService" object="engine-service:direct" />
-    <inject property="response" object="infrastructure:response" />
-    <inject property="listenerInvoker" object="infrastructure:listenerInvoker" />
-    <inject property="formSupportFactory" object="service:tapestry.form.GoFormSupportFactory"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/GoFormSupportFactory.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/GoFormSupportFactory.java
deleted file mode 100644
index 65db576..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/GoFormSupportFactory.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormSupport;
-import org.apache.tapestry.form.FormSupportFactory;
-
-/**
- * Implementation of {@link FormSupportFactory} that generates 
- * {@link GoFormSupportImpl} instances, suitable for WML content.
- *
- * @since 4.1.1
- */
-public class GoFormSupportFactory implements FormSupportFactory
-{
-    public FormSupport createFormSupport(IMarkupWriter writer, IRequestCycle cycle, IForm form) 
-    {
-        return new GoFormSupportImpl(writer, cycle, form);
-    }    
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/GoFormSupportImpl.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/GoFormSupportImpl.java
deleted file mode 100644
index dab25df..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/GoFormSupportImpl.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormEventType;
-import org.apache.tapestry.form.FormSupportImpl;
-
-/**
- * Subclass of {@link org.apache.tapestry.form.FormSupportImpl}&nbsp;that
- * adjusts the output markup to conform to WML.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class GoFormSupportImpl extends FormSupportImpl
-{
-
-    public GoFormSupportImpl(IMarkupWriter writer, IRequestCycle cycle,
-            IForm form)
-    {
-        super(writer, cycle, form);
-    }
-
-    protected void writeTag(IMarkupWriter writer, String method, String url)
-    {
-        writer.begin("go");
-        writer.attribute("method", method);
-        writer.attribute("href", url);
-    }
-
-    protected void writeHiddenFields()
-    {
-        // The super-implementation writes a <div> tag that's not
-        // valid as WML.
-        
-        writeHiddenFieldList(getHiddenFieldWriter());
-    }
-    
-    protected void writeHiddenField(IMarkupWriter writer, String name,
-            String id, String value)
-    {
-        writer.beginEmpty("postfield");
-        writer.attribute("name", name);
-
-        if (HiveMind.isNonBlank(id)) writer.attribute("id", id);
-
-        writer.attribute("value", value);
-        writer.println();
-    }
-
-    public void addEventHandler(FormEventType type, String functionName)
-    {
-        throw new UnsupportedOperationException(
-                "addEventHandler() not supported for WML Go component.");
-    }
-
-    protected void emitEventManagerInitialization()
-    {
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/GoLinkRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/GoLinkRenderer.java
deleted file mode 100644
index a337fb7..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/GoLinkRenderer.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.link.DefaultLinkRenderer;
-import org.apache.tapestry.link.ILinkRenderer;
-
-/**
- * A subclass of {@link org.apache.tapestry.link.DefaultLinkRenderer} for the
- * WML Go element.
- * 
- * @author David Solis
- * @since 3.0
- */
-public class GoLinkRenderer extends DefaultLinkRenderer
-{
-
-    /**
-     * A singleton for the go link.
-     */
-
-    public static final ILinkRenderer SHARED_INSTANCE = new GoLinkRenderer();
-
-    public String getElement()
-    {
-        return "go";
-    }
-
-    public boolean getHasBody()
-    {
-        return false;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Image.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Image.java
deleted file mode 100644
index 540cb8d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Image.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The Image component indicates that an image is to be included in the text
- * flow. Image layout is done within the context of normal text layout.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Image extends AbstractComponent
-{
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#renderComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.beginEmpty("img");
-
-            writer.attribute("src", getImage().buildURL());
-
-            writer.attribute("alt", getAlt());
-
-            renderInformalParameters(writer, cycle);
-
-            writer.closeTag();
-        }
-    }
-
-    public abstract IAsset getImage();
-
-    public abstract String getAlt();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Image.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Image.jwc
deleted file mode 100644
index 0a61276..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Image.jwc
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Image" allow-body="no">
-
-    <description>
-        Displays a wml image, deriving the source URL for the image from an asset.
-    </description>
-
-    <parameter name="image" type="org.apache.tapestry.IAsset" direction="in" required="yes">
-        <description>
-            The asset to display.
-        </description>
-    </parameter>
-
-    <parameter name="alt" type="java.lang.String" direction="in" required="yes">
-        <description>
-            This attribute specifies an alternative textual representation for the image. This representation is used
-            when the image can not be displayed using any other method
-        </description>
-    </parameter>
-
-    <reserved-parameter name="src"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Input.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Input.java
deleted file mode 100644
index fbd1cbf..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Input.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The Input element specifies a text entry object.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Input extends AbstractComponent
-{
-
-    /**
-     * @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.beginEmpty("input");
-
-            writer.attribute("type", isHidden() ? "password" : "text");
-
-            writer.attribute("name", getName());
-
-            String title = getTitle();
-            if (HiveMind.isNonBlank(title)) writer.attribute("title", title);
-
-            String format = getFormat();
-            if (HiveMind.isNonBlank(format))
-                writer.attribute("format", format);
-
-            boolean emptyok = isEmptyok();
-            if (emptyok) writer.attribute("emptyok", emptyok);
-
-            renderInformalParameters(writer, cycle);
-
-            String value = getValue();
-            if (HiveMind.isNonBlank(value)) writer.attribute("value", value);
-
-            writer.closeTag();
-        }
-    }
-
-    public abstract String getTitle();
-
-    public abstract String getName();
-
-    public abstract String getFormat();
-
-    public abstract boolean isHidden();
-
-    public abstract boolean isEmptyok();
-
-    public abstract String getValue();
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Input.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Input.jwc
deleted file mode 100644
index a90091c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Input.jwc
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Input" allow-body="no">
-
-    <description>
-        The Input element specifies a text entry object.
-    </description>
-
-    <parameter name="title">
-        <description>
-            The title attribute specifies advisory information about the element. The title may be rendered in a
-            variety of ways by the user agent (eg, suggested bookmark name, pop-up tooltip, etc.).
-        </description>
-    </parameter>
-
-    <parameter name="hidden"/>
-
-    <parameter name="name" required="yes" >
-        <description>
-            The name attribute specifies a variable name.
-        </description>
-    </parameter>
-
-    <parameter name="format">
-        <description>
-            The format attribute specifies an input mask for user input entries. The string consists of mask control
-            characters and static text that is displayed in the input area. The user agent may use the format mask to
-            facilitate accelerated data input. An input mask is only valid when it contains only legal format codes.
-            User agents must ignore invalid masks.
-            The format control characters specify the data format expected to be entered by the user.
-            See the WML specification for valid format control characters.
-        </description>
-    </parameter>
-
-    <parameter name="emptyok">
-        <description>
-            The emptyok attribute indicates that this input element accepts empty input although a non-empty format
-            string has been specified.
-        </description>
-    </parameter>
-
-    <parameter name="value" required="yes">
-        <description>
-            Bind value to the variable that should recieve the user input string.
-        </description>
-    </parameter>
-
-    <reserved-parameter name="type"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/OnEvent.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/OnEvent.java
deleted file mode 100644
index 100ddda..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/OnEvent.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  The onevent element binds a task to a particular intrinsic event for the immediately enclosing element, ie,
- *  specifying an onevent element inside an "XYZ" element associates an intrinsic event binding with the "XYZ" element.
- *  The user agent must ignore any onevent element specifying a type that does not correspond to a legal intrinsic event
- *  for the immediately enclosing element.
- *
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public abstract class OnEvent extends AbstractComponent
-{
-    /**
-     *  @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.begin("onevent");
-
-            writer.attribute("type", getType());
-
-            renderInformalParameters(writer, cycle);
-        }
-
-        renderBody(writer, cycle);
-
-        if (render)
-        {
-            writer.end();
-        }
-    }
-
-    public abstract String getType();
-
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/OnEvent.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/OnEvent.jwc
deleted file mode 100644
index 19f2e12..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/OnEvent.jwc
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.OnEvent">
-
-    <description>
-        The onevent element binds a task to a particular intrinsic event for the immediately enclosing element, ie,
-        specifying an onevent element inside an "XYZ" element associates an intrinsic event binding with the "XYZ"
-        element.
-        The user agent must ignore any onevent element specifying a type that does not correspond to a legal
-        intrinsic event for the immediately enclosing element.
-    </description>
-
-    <parameter name="type" type="java.lang.String" direction="in" required="yes">
-        <description>
-            The type attribute indicates the name of the intrinsic event
-            (ontimer, onenterforward, onenterbackward, onpick).
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Option.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Option.java
deleted file mode 100644
index f7e0dc0..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Option.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * This component serves as a container for one item that is listed as a choice
- * in a {@link Select}. A {@link Select}offers a selection of choices from
- * which usersu may choose one or more items. The select list is created using a
- * select element which contains a collection of option elements. A string or
- * text describing the item appears between the opening and closing option tags.
- * In order to have a dynamic onpick attribute it is better to use a concrete
- * class of {@link org.apache.tapestry.link.ILinkRenderer}with the
- * {@link OptionRenderer}.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Option extends AbstractComponent
-{
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#renderComponent(IMarkupWriter,
-     *      IRequestCycle)
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.begin("option");
-
-            String value = getValue();
-            if (HiveMind.isNonBlank(value)) writer.attribute("value", value);
-
-            renderInformalParameters(writer, cycle);
-
-            renderBody(writer, cycle);
-
-            writer.end();
-        }
-    }
-
-    public abstract String getValue();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Option.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Option.jwc
deleted file mode 100644
index 2daadb3..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Option.jwc
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Option">
-
-    <description>
-        This component serves as a container for one item that is listed as a choice in a Select. A Select
-        offers a selection of choices from which usersu may choose one or more items. The select list is created using a
-        select element which contains a collection of option elements. A string or text describing the item appears between
-        the opening and closing option tags.
-    </description>
-
-    <parameter name="value" type="java.lang.String" direction="in">
-        <description>
-            The value attribute specifies the value to be used when setting the name variable. When the user selects
-            this option, the resulting value specified in the value attribute is used to set the Select element's
-            name wml variable.
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/OptionRenderer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/OptionRenderer.java
deleted file mode 100644
index c17f24c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/OptionRenderer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.link.DefaultLinkRenderer;
-import org.apache.tapestry.link.ILinkRenderer;
-
-/**
- * Implementation of {@link org.apache.tapestry.link.ILinkRenderer} for the WML
- * Option element. The value attribute is reserved.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public class OptionRenderer extends DefaultLinkRenderer
-{
-
-    /**
-     * A singleton for the option link.
-     */
-
-    public static final ILinkRenderer SHARED_INSTANCE = new OptionRenderer();
-
-    protected String getElement()
-    {
-        return "option";
-    }
-
-    protected String getUrlAttribute()
-    {
-        return "onpick";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Postfield.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Postfield.java
deleted file mode 100644
index 83327bb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Postfield.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The postfield element specifies a field name and value for transmission to an
- * origin server during a URL request.
- * 
- * @see Go
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Postfield extends AbstractPostfield
-{
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = cycle.getParameter(getName());
-        updateValue(value);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Postfield.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Postfield.jwc
deleted file mode 100644
index a17d74c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Postfield.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Postfield" allow-body="no">
-
-    <description>
-        The postfield element specifies a field name and value for transmission to an origin server during an
-        URL request.
-    </description>
-
-    <parameter name="value" type="java.lang.String" required="yes">
-        <description>
-            Bind value to the variable that should recieve the user input string.
-        </description>
-    </parameter>
-
-    <parameter name="name" property-name="varName" type="java.lang.String" direction="in" required="yes">
-        <description>
-            The name attribute specifies an WML variable name.
-        </description>
-    </parameter>
-
-    <reserved-parameter name="value"/>
-
-    <property-specification name="name" type="java.lang.String"/>
-    <property-specification name="form" type="org.apache.tapestry.IForm"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/PropertySelection.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/PropertySelection.java
deleted file mode 100644
index 8744436..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/PropertySelection.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- *  A high level component used to render a drop-down list of options that the user may select.
- *
- *  Informal parameters are applied to the &lt;select&gt; tag.  To have greater control over the 
- *  &lt;option&gt; tags, you must use a Select and Option or a concrete class 
- *  of {@link org.apache.tapestry.link.ILinkRenderer} with the {@link OptionRenderer}.
- *
- *  @author David Solis
- */
-
-public abstract class PropertySelection extends AbstractComponent
-{
-    /**
-     *  @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            IPropertySelectionModel model = getModel();
-
-            writer.begin("select");
-
-            writer.attribute("name", getName());
-
-            renderInformalParameters(writer, cycle);
-
-            writer.println();
-
-            int count = model.getOptionCount();
-
-            for (int i = 0; i < count; i++)
-            {
-
-                writer.begin("option");
-                writer.attribute("value", model.getValue(i));
-
-                writer.print(model.getLabel(i));
-
-                writer.end();
-                writer.println();
-            }
-
-            writer.end();
-        }
-    }
-
-    public abstract IPropertySelectionModel getModel();
-
-    public abstract String getName();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/PropertySelection.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/PropertySelection.jwc
deleted file mode 100644
index 358e0bc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/PropertySelection.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.PropertySelection"
-    allow-body="no"
-    allow-informal-parameters="yes">
-
-    <description>
-        Creates an WML select to choose a single property from a list of options.
-    </description>
-
-    <parameter name="name" required="yes" type="java.lang.String" direction="in"/>
-
-    <parameter name="model"
-        type="org.apache.tapestry.form.IPropertySelectionModel"
-        required="yes"
-        direction="auto"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Select.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Select.java
deleted file mode 100644
index c3f5f7f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Select.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- * The Select element lets users pick from a list of options. Each option is specified by an Option
- * element. Each Option element may have one line of formatted text (which may be wrapped or
- * truncated by the user agent if too long). Unless multiple selections are required it is generally
- * easier to use the {@link PropertySelection}component.
- * 
- * @author David Solis
- * @since 3.0
- */
-public abstract class Select extends AbstractComponent
-{
-    /**
-     * Used by the <code>Select</code> to record itself as a {@link IRequestCycle}attribute, so
-     * that the {@link Option}components it wraps can have access to it.
-     */
-
-    private static final String ATTRIBUTE_NAME = "org.apache.tapestry.active.Select";
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(Tapestry.getMessage("Select.may-not-nest"), this,
-                    null, null);
-
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.begin("select");
-
-            writer.attribute("name", getName());
-
-            String value = getValue();
-            if (HiveMind.isNonBlank(value))
-                writer.attribute("value", value);
-
-            String title = getTitle();
-            if (HiveMind.isNonBlank(title))
-                writer.attribute("title", title);
-
-            boolean multiple = isMultiple();
-            if (multiple)
-                writer.attribute("multiple", multiple);
-
-            renderInformalParameters(writer, cycle);
-        }
-
-        renderBody(writer, cycle);
-
-        if (render)
-        {
-            writer.end();
-        }
-
-        cycle.removeAttribute(ATTRIBUTE_NAME);
-    }
-
-    public abstract boolean isMultiple();
-
-    public abstract String getName();
-
-    public abstract String getValue();
-
-    public abstract String getTitle();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Select.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Select.jwc
deleted file mode 100644
index 4d64bec..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Select.jwc
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.wml.Select">
-
-	<description>
-		The WMLSelect element lets users pick from a list of options. Each option is specified 
-		by an Option element. Each Option element may have one line of formatted text 
-		(which may be wrapped or truncated by the user agent if too long). 
-		Option elements may be organised into hierarchical groups using the OptionGroup 
-		element. 
-	</description>
-
-	<parameter name="multiple" type="boolean" direction="in">
-        <description>
-            This attribute indicates that the select list should accept multiple selections. 
-            When not set, the select list should only accept a single selected option.
-        </description>
-	</parameter>
-
-	<parameter name="title" type="java.lang.String" direction="in">
-		<description>
-			This attribute specifies a title for this element, which may be used in the 
-			presentation of this object.
-			This attribute specifies a title for this element, which may be used in the 
-			presentation of this object.
-		</description>
-	</parameter>
-
-	<parameter name="name" type="java.lang.String" direction="in">
-        <description>
-            The name attribute indicates the name of the variable to set with the result 
-            of the selection. The variable is set to the string value of the chosen option
-            element, which is specified with the value attribute. The name variable's value 
-            is used to pre-select options in the select list.
-        </description>
-    </parameter>
-
-	<parameter name="value" type="java.lang.String" direction="in">
-        <description>
-            The value attribute indicates the default value of the variable named in the 
-            name attribute. When the element is displayed, and the variable named in the 
-            name attribute is not set, the name variable may be assigned the value 
-            specified in the value attribute, depending on the values defined in iname and 
-            ivalue. If the name variable already contains a value, the value attribute is 
-            ignored. Any application of the default value is done before the list is 
-            pre-selected with the value of the name variable.
-            If this element allows the selection of multiple options, the result of the 
-            user's choice is a list of all selected values, separated by the semicolon 
-            character. The name variable is set with this result. In addition, the value 
-            attribute is interpreted as a semicolon-separated list of pre-selected options.
-        </description>
-	</parameter>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/SelectionField.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/SelectionField.java
deleted file mode 100644
index 5b41389..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/SelectionField.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- * SelectionField specifies a postfield element and it is used to complement the
- * {@link PropertySelection}component.
- * 
- * @author David Solis
- * @since 3.0
- */
-public abstract class SelectionField extends AbstractPostfield
-{
-
-    /**
-     * @see org.apache.tapestry.form.AbstractFormComponent#rewindFormComponent(org.apache.tapestry.IMarkupWriter,
-     *      org.apache.tapestry.IRequestCycle)
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String optionValue = cycle.getParameter(getName());
-        IPropertySelectionModel model = getModel();
-        Object value = (optionValue == null) ? null : model
-                .translateValue(optionValue);
-
-        updateValue(value);
-    }
-
-    public abstract IPropertySelectionModel getModel();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/SelectionField.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/SelectionField.jwc
deleted file mode 100644
index cf7e306..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/SelectionField.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.SelectionField" allow-body="no">
-
-    <description>
-        SelectionField specifies a postfield element and it is used to complement the PropertySelection component.
-    </description>
-
-    <parameter name="value" required="yes" type="java.lang.Object"/>
-
-    <parameter name="model"
-        type="org.apache.tapestry.form.IPropertySelectionModel"
-        required="yes"
-        direction="auto"/>
-
-    <parameter name="name" property-name="varName" type="java.lang.String" direction="in" required="yes">
-        <description>
-            The name attribute specifies an WML variable name.
-        </description>
-    </parameter>
-
-    <reserved-parameter name="value"/>
-
-    <property-specification name="name" type="java.lang.String"/>
-    <property-specification name="form" type="org.apache.tapestry.IForm"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Setvar.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Setvar.java
deleted file mode 100644
index cb0c7eb..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Setvar.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The setvar element specifies the variable to set in the current browser
- * context as a side effect of executing a task.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Setvar extends AbstractComponent
-{
-
-    /**
-     * @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.isRewinding()) return;
-
-        writer.beginEmpty("setvar");
-
-        writer.attribute("name", getName());
-
-        renderInformalParameters(writer, cycle);
-
-        String value = getValue();
-
-        if (HiveMind.isNonBlank(value))
-            writer.attribute("value", value);
-        else writer.attribute("value", "");
-
-        writer.closeTag();
-    }
-
-    public abstract String getName();
-
-    public abstract String getValue();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Setvar.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Setvar.jwc
deleted file mode 100644
index 67530ce..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Setvar.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Setvar" allow-body="no">
-
-    <description>
-        The setvar element specifies the variable to set in the current browser context as a side effect of executing
-        a task.
-    </description>
-    <parameter name="name" required="yes">
-        <description>
-            The name attribute specifies a WML variable name.
-        </description>
-    </parameter>
-
-    <parameter name="value" required="yes">
-        <description>
-            Bind value to the variable that should recieve the user input string.
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Timer.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Timer.java
deleted file mode 100644
index 41a9206..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Timer.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.hivemind.HiveMind;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The Timer element declares a card timer, which exposes a means of processing
- * inactivity or idle time. The timer is initialised and started at card entry
- * and is stopped when the card is exited.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Timer extends AbstractComponent
-{
-
-    /**
-     * @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     */
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.beginEmpty("timer");
-
-            writer.attribute("name", getName());
-
-            String value = getValue();
-            if (HiveMind.isNonBlank(value))
-                writer.attribute("value", value);
-            else writer.attribute("value", "0");
-
-            renderInformalParameters(writer, cycle);
-
-            writer.closeTag();
-        }
-    }
-
-    public abstract String getName();
-
-    /** @since 4.0 */
-
-    public abstract String getValue();
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Timer.jwc b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Timer.jwc
deleted file mode 100644
index 735b5ac..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/Timer.jwc
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Timer" allow-body="no">
-
-    <description>
-        The Timer element declares a card timer, which exposes a means of processing inactivity or idle time.
-        The timer is initialised and started at card entry and is stopped when the card is exited.
-    </description>
-
-    <parameter name="name">
-        <description>
-            The name attribute specifies the name of the variable to be set with the value of the timer. The name
-            variable's value is used to set the timeout period upon timer initialisation. The variable named by the
-            name attribute will be set with the current timer value when the card is exited or when the timer expires.
-            For example, if the timer expires, the name variable is set to a value of "0".
-        </description>
-    </parameter>
-
-    <parameter name="value">
-        <description>
-            The value attribute indicates the default value of the variable named in the name attribute. When the
-            timer is initialised and the variable named in the name attribute is not set, the name variable is assigned
-            the value specified in the value attribute. If the name variable already contains a value, the value
-            attribute is ignored. If the name attribute is not specified, the timeout is always initialised to the
-            value specified in the value attribute.
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WML.library b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WML.library
deleted file mode 100644
index a07609a..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WML.library
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<library-specification>
-    <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-    <component-type type="Card" specification-path="/org/apache/tapestry/wml/Card.jwc"/>
-    <component-type type="Do" specification-path="/org/apache/tapestry/wml/Do.jwc"/>
-    <component-type type="Go" specification-path="/org/apache/tapestry/wml/Go.jwc"/>
-    <component-type type="Input" specification-path="/org/apache/tapestry/wml/Input.jwc"/>
-    <component-type type="OnEvent" specification-path="/org/apache/tapestry/wml/OnEvent.jwc"/>
-    <component-type type="Postfield" specification-path="/org/apache/tapestry/wml/Postfield.jwc"/>
-    <component-type type="Setvar" specification-path="/org/apache/tapestry/wml/Setvar.jwc"/>
-    <component-type type="Timer" specification-path="/org/apache/tapestry/wml/Timer.jwc"/>
-    <component-type type="Image" specification-path="/org/apache/tapestry/wml/Image.jwc"/>
-    <component-type type="Option" specification-path="/org/apache/tapestry/wml/Option.jwc"/>
-    <component-type type="PropertySelection" specification-path="/org/apache/tapestry/wml/PropertySelection.jwc"/>
-    <component-type type="Select" specification-path="/org/apache/tapestry/wml/Select.jwc"/>
-    <component-type type="SelectionField" specification-path="/org/apache/tapestry/wml/SelectionField.jwc"/>
-
-</library-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WMLCharacterTranslatorSource.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WMLCharacterTranslatorSource.java
deleted file mode 100644
index b3c8f3c..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WMLCharacterTranslatorSource.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.util.text.AsciiCharacterMatcher;
-import org.apache.tapestry.util.text.AsciiCharacterTranslator;
-import org.apache.tapestry.util.text.ICharacterMatcher;
-import org.apache.tapestry.util.text.ICharacterTranslator;
-import org.apache.tapestry.util.text.ICharacterTranslatorSource;
-import org.apache.tapestry.util.text.MarkupCharacterTranslator;
-
-/**
- * The WML implementation of a character translator source. Returns a WML
- * translator that encodes everything that is non-safe. Some code borrowed from
- * WMLWriter (by David Solis)
- * 
- * @author mb
- * @since 4.0
- */
-public class WMLCharacterTranslatorSource implements ICharacterTranslatorSource
-{
-
-    private static final String SAFE_CHARACTERS = "01234567890"
-            + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-            + "\t\n\r !\"#%'()*+,-./:;=?@[\\]^_`{|}~";
-
-    private static final String[][] ENTITIES = { { "\"", "&quot;" },
-            { "<", "&lt;" }, { ">", "&gt;" }, { "&", "&amp;" }, { "$", "$$" } };
-
-    private static final ICharacterMatcher SAFE_MATCHER = new AsciiCharacterMatcher(
-            SAFE_CHARACTERS);
-    private static final ICharacterTranslator ENTITY_TRANSLATOR = new AsciiCharacterTranslator(
-            ENTITIES);
-
-    private static final ICharacterTranslator WML_TRANSLATOR = new MarkupCharacterTranslator(
-            true, SAFE_MATCHER, ENTITY_TRANSLATOR);
-
-    /**
-     * @see org.apache.tapestry.util.text.ICharacterTranslatorSource#getDefaultTranslator()
-     */
-    public ICharacterTranslator getDefaultTranslator()
-    {
-        return WML_TRANSLATOR;
-    }
-
-    /**
-     * @see org.apache.tapestry.util.text.ICharacterTranslatorSource#getTranslator(java.lang.String)
-     */
-    public ICharacterTranslator getTranslator(String encoding)
-    {
-        return getDefaultTranslator();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WMLEngine.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WMLEngine.java
deleted file mode 100644
index 57420d8..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WMLEngine.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.engine.BaseEngine;
-
-/**
- * Subclass of {@link BaseEngine} used for WML applications to change the
- * Exception, StaleLink and StaleSession pages.
- * 
- * @author David Solis
- * @since 3.0
- * @deprecated To be removed in 4.1. No longer necessary; the differences
- *             between WML applications and HTML applications are now handled
- *             via a startup mode. See
- *             {@link org.apache.tapestry.services.impl.SetupServletApplicationGlobals}.
- */
-
-public class WMLEngine extends BaseEngine
-{
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WMLMarkupFilter.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WMLMarkupFilter.java
deleted file mode 100644
index 85e600f..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/WMLMarkupFilter.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.markup.AbstractMarkupFilter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class WMLMarkupFilter extends AbstractMarkupFilter
-{
-
-    public WMLMarkupFilter()
-    {
-        super(new WMLCharacterTranslatorSource().getDefaultTranslator());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/package.html
deleted file mode 100644
index 9c0da5d..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/package.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Classes and components for main elements of the Wireless Markup Language (WML 1.2).
-
-<ul>
-<li>{@link org.apache.tapestry.wml.Deck} is an alternative to
-{@link org.apache.tapestry.html.BasePage} that provides a <code>text/wml</code> response.</li>
-<li>Basic support for WMLScript.</li>
-<li><b>No support for WML style tables.</li>
-</ul>
- 
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-@author David Solis <a href="mailto:dsolis@apache.org">dsolis@apache.org</a>
- 
-</body>
-</html>
- 
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLException.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLException.java
deleted file mode 100644
index 4a152b5..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml.pages;
-
-import org.apache.tapestry.util.exception.ExceptionAnalyzer;
-import org.apache.tapestry.util.exception.ExceptionDescription;
-import org.apache.tapestry.wml.Deck;
-
-/**
- * Default exception reporting page for WML applications.
- * 
- * @author David Solis
- * @since 3.0
- * CHECKSTYLE:OFF
- */
-public abstract class WMLException extends Deck
-{
-    private ExceptionDescription[] _exceptions;
-
-    public void initialize()
-    {
-        _exceptions = null;
-    }
-
-    public ExceptionDescription[] getExceptions()
-    {
-        return _exceptions;
-    }
-
-    public void setException(Throwable value)
-    {
-        ExceptionAnalyzer analyzer;
-
-        analyzer = new ExceptionAnalyzer();
-
-        _exceptions = analyzer.analyze(value);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLException.page b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLException.page
deleted file mode 100644
index 2d28c64..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLException.page
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.wml.pages.WMLException">
-  
-  <property name="org.apache.tapestry.template-extension" value="wml"/>
-  
-  <property-specification name="current" type="org.apache.tapestry.util.exception.ExceptionDescription"/>
-
-  <component id="restart" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@RESTART_SERVICE"/>
-  </component>
-
-  <component id="foreachProperty" type="For">
-  	<static-binding name="element" value="tr"/>
-    <binding name="source" expression="current.properties"/>
-  </component>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLException.wml b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLException.wml
deleted file mode 100644
index 6034682..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLException.wml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>

-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-    <head>

-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>

-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>

-    </head>

-

-	<card id="Exception" title="Exception">

-		<p>

-			An exception has occured.

-            You may continue by <b><a jwcid="restart">restarting</a></b> the session.<br/>

-            <table columns="1">

-				<p jwcid="@For" source="ognl:exceptions" value="ognl:current">

-					<tr><td><b jwcid="@Insert" value="ognl:current.exceptionClassName">some.exception.Class</b></td></tr>

-					<tr><td><b jwcid="@Insert" value="ognl:current.message">A message describing the exception.</b></td></tr>

-					<tr jwcid="foreachProperty">

-						<td><b jwcid="@Insert" value="ognl:components.foreachProperty.value.name">Property Name</b>:<b jwcid="@Insert" value="ognl:components.foreachProperty.value.value">Property Value</b></td>

-					</tr>

-				</p>

-			</table>

-		</p>

-				

-	</card>

-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleLink.java b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleLink.java
deleted file mode 100644
index 00ee62e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleLink.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml.pages;
-
-import org.apache.tapestry.wml.Deck;
-
-
-/**
- *  Stores a message (taken from the {@link org.apache.tapestry.StaleLinkException})
- *  that is displayed as part of the page.
- *
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public abstract class WMLStaleLink extends Deck
-{
-    public abstract void setMessage(String message);
-}
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleLink.page b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleLink.page
deleted file mode 100644
index ed2bf9e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleLink.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.wml.pages.WMLStaleLink">
-  
-  <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-  <property-specification name="message" type="java.lang.String"/>
-
-  <component id="home" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@HOME_SERVICE"/>
-  </component>
-  
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleLink.wml b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleLink.wml
deleted file mode 100644
index d1098dc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleLink.wml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>

-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-    <head>

-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>

-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>

-    </head>

-

-	<card id="StaleLink" title="StaleLink">

-		<p>You have clicked on a <i>stale link</i>.</p>  

-		<p>

-			<b jwcid="@Insert" value="ognl:message">Exception message goes here.</b>

-		</p>

-		<p>

-			This is most likely the result of using your browser's <b>back</b> button, but can also be an application error.

-		</p>

-		<p>

-			You may continue by returning to the application's <b><a jwcid="home">home page</a></b>.

-		</p>				

-	</card>

-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleSession.page b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleSession.page
deleted file mode 100644
index cd49cbc..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleSession.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.wml.Deck">
-  
-  <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-  <component id="restart" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@RESTART_SERVICE"/>
-  </component>
-  
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleSession.wml b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleSession.wml
deleted file mode 100644
index bc89a0e..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/WMLStaleSession.wml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>

-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-    <head>

-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>

-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>

-    </head>

-

-	<card id="StaleSession" title="StaleSession">

-		<p>Your session has timed out.</p>			

-		<p>Web applications store information about what you are doing on the server.  This information

-		is called the <em>session</em>.</p>

-		

-		<p>Web servers must track many, many sessions.  If you

-		are inactive for a long enough time (usually, a few minutes), this information is discarded to

-		make room for active users.</p>

-		

-		<p>At this point you may <b><a jwcid="restart">restart</a></b> the session to continue.</p>

-	</card>

-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/package.html b/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/package.html
deleted file mode 100644
index 15b4877..0000000
--- a/tapestry/tapestry-framework/src/java/org/apache/tapestry/wml/pages/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-WML style pages.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/js/Uri.js b/tapestry/tapestry-framework/src/js/Uri.js
deleted file mode 100644
index 89e0030..0000000
--- a/tapestry/tapestry-framework/src/js/Uri.js
+++ /dev/null
@@ -1,99 +0,0 @@
-dojo.provide("dojo.uri.Uri");
-
-dojo.uri = new function() {
-	
-	var authorityPattern = new RegExp("^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$");
-	var uriPattern = new RegExp("(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$");
-	var cssPattern = new RegExp("/(\\w+.css)");
-	
-	this.dojoUri = function (/*dojo.uri.Uri||String*/uri) {
-		// summary: returns a Uri object resolved relative to the dojo root
-		return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(), uri);
-	}
-
-	this.moduleUri = function(/*String*/module, /*dojo.uri.Uri||String*/uri){
-		// summary: returns a Uri object relative to a module
-		// description: Examples: dojo.uri.moduleUri("dojo","Editor"), or dojo.uri.moduleUri("acme","someWidget")
-		var loc = dojo.hostenv.getModuleSymbols(module).join('/');
-		if(!loc){
-			return null;
-		}
-		if(loc.lastIndexOf("/") != loc.length-1){
-			loc += "/";
-		}
-		
-		//If the path is an absolute path (starts with a / or is on another domain/xdomain)
-		//then don't add the baseScriptUri.
-		var colonIndex = loc.indexOf(":");
-		var slashIndex = loc.indexOf("/");
-		if(loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > slashIndex)){
-			loc = dojo.hostenv.getBaseScriptUri() + loc;
-		}
-
-		return new dojo.uri.Uri(loc,uri);
-	}
-
-	this.Uri = function (/*dojo.uri.Uri||String...*/) {
-		// summary: Constructor to create an object representing a URI.
-		// description: 
-		//  Each argument is evaluated in order relative to the next until
-		//  a canonical uri is produced. To get an absolute Uri relative
-		//  to the current document use
-		//      new dojo.uri.Uri(document.baseURI, uri)
-
-		// TODO: support for IPv6, see RFC 2732
-
-		// resolve uri components relative to each other
-		var uri = arguments[0];
-		if (uri && arguments.length > 1) {
-			var cssMatch = cssPattern.exec(uri);
-			if (cssMatch){
-				uri = uri.toString().replace(cssMatch[1], "");
-			}
-		}
-	
-		for (var i = 1; i < arguments.length; i++) {
-			if(!arguments[i]) { continue; }
-
-			// Safari doesn't support this.constructor so we have to be explicit
-			var relobj = new dojo.uri.Uri(arguments[i].toString());
-			var uriobj = new dojo.uri.Uri(uri.toString());
-
-			if ((relobj.path=="")&&(relobj.scheme==null)&&(relobj.authority==null)&&(relobj.query==null)) {
-				if (relobj.fragment != null) { uriobj.fragment = relobj.fragment; }
-				relobj = uriobj;
-			}
-			
-			if (relobj.scheme != null && relobj.authority != null)
-				uri = "";
-			if (relobj.scheme != null) { uri += relobj.scheme + ":"; }
-			if (relobj.authority != null) { uri += "//" + relobj.authority; }
-			uri += relobj.path;
-			if (relobj.query != null) { uri += "?" + relobj.query; }
-			if (relobj.fragment != null) { uri += "#" + relobj.fragment; }
-		}
-		
-		this.uri = uri.toString();
-
-		// break the uri into its main components
-	    var r = this.uri.match(uriPattern);
-	    
-		this.scheme = r[2] || (r[1] ? "" : null);
-		this.authority = r[4] || (r[3] ? "" : null);
-		this.path = r[5]; // can never be undefined
-		this.query = r[7] || (r[6] ? "" : null);
-		this.fragment  = r[9] || (r[8] ? "" : null);
-		
-		if (this.authority != null) {
-			// server based naming authority
-			r = this.authority.match(authorityPattern);
-			
-			this.user = r[3] || null;
-			this.password = r[4] || null;
-			this.host = r[5];
-			this.port = r[7] || null;
-		}
-	
-		this.toString = function(){ return this.uri; }
-	}
-};
diff --git a/tapestry/tapestry-framework/src/js/build.xml b/tapestry/tapestry-framework/src/js/build.xml
deleted file mode 100644
index ad4fec4..0000000
--- a/tapestry/tapestry-framework/src/js/build.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!-- 
-	See dojo license information in dojo/LICENSE for dojo licensing specifics.
-	
-	The dojo sources may be obtained via the subversion repository at
-	http://svn.dojotoolkit.org
--->
-<project name="Tapestry Javascript" default="test">
-
-	<property name="root.dir" value="../../.." />
-	<property file="${root.dir}/config/build.properties" />
-	<property name="profile.file" value="tapestry.profile.js" />
-	
-	<property name="release.dir" value="${dojo.dir}/../release/" />
-	
-	<taskdef name="dojo-test" classname="org.dojotoolkit.ant.DojoTestTask" 
-			classpath="lib/ant-dojotest.jar" />
-	
-	<target name="check-dependencies" description="Ensures that dojo.dir is set.">
-		<fail message="dojo.dir not set" unless="dojo.dir" />
-	</target>
-	
-	<!-- ====================================================== -->
-	<!-- Building												-->
-	<!-- ====================================================== -->
-
-	<target name="package" depends="check-dependencies" description="Builds tapestry dojo package and copies it into source tree.">
-		<echo>Building dojo package</echo>
-
-		<echo>Copying tapestry profile to dojo build directory.</echo>
-		<copy todir="${dojo.dir}/profiles" file="${profile.file}" />
-
-		<echo>Building dojo tapestry release</echo>
-		<ant dir="${dojo.dir}" target="release">
-			<property name="docless" value="true" />
-			<property name="profile" value="tapestry" />
-		</ant>
-		
-		<copy todir="${java.classes.dir}/dojo" overwrite="true">
-			<fileset dir="${release.dir}">
-				<exclude name="dojo/demos/**" />
-				<exclude name="dojo/tests/**" />
-			</fileset>
-		</copy>
-	</target>
-	
-	<!-- ====================================================== -->
-	<!-- Testing												-->
-	<!-- ====================================================== -->
-	
-	<target name="test" description="Tests tapestry js package with dojo test utils." >
-		 <dojo-test dojosrc="dojo-0.4.3" testsrc="tests"/>
-	</target>
-	
-</project>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/DojoFileStorageProvider.jar b/tapestry/tapestry-framework/src/js/dojo-0.4.3/DojoFileStorageProvider.jar
deleted file mode 100644
index 8f67f20..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/DojoFileStorageProvider.jar
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/LICENSE b/tapestry/tapestry-framework/src/js/dojo-0.4.3/LICENSE
deleted file mode 100644
index 225d20c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/LICENSE
+++ /dev/null
@@ -1,195 +0,0 @@
-Dojo is availble under *either* the terms of the modified BSD license *or* the
-Academic Free License version 2.1. As a recipient of Dojo, you may choose which
-license to receive this code under (except as noted in per-module LICENSE
-files). Some modules may not be the copyright of the Dojo Foundation. These
-modules contain explicit declarations of copyright in both the LICENSE files in
-the directories in which they reside and in the code itself. No external
-contributions are allowed under licenses which are fundamentally incompatible
-with the AFL or BSD licenses that Dojo is distributed under.
-
-The text of the AFL and BSD licenses is reproduced below. 
-
--------------------------------------------------------------------------------
-The "New" BSD License:
-**********************
-
-Copyright (c) 2005-2006, The Dojo Foundation
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  * Redistributions of source code must retain the above copyright notice, this
-    list of conditions and the following disclaimer.
-  * Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
-  * Neither the name of the Dojo Foundation nor the names of its contributors
-    may be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--------------------------------------------------------------------------------
-The Academic Free License, v. 2.1:
-**********************************
-
-This Academic Free License (the "License") applies to any original work of
-authorship (the "Original Work") whose owner (the "Licensor") has placed the
-following notice immediately following the copyright notice for the Original
-Work:
-
-Licensed under the Academic Free License version 2.1
-
-1) Grant of Copyright License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license to do the
-following:
-
-a) to reproduce the Original Work in copies;
-
-b) to prepare derivative works ("Derivative Works") based upon the Original
-Work;
-
-c) to distribute copies of the Original Work and Derivative Works to the
-public;
-
-d) to perform the Original Work publicly; and
-
-e) to display the Original Work publicly.
-
-2) Grant of Patent License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
-claims owned or controlled by the Licensor that are embodied in the Original
-Work as furnished by the Licensor, to make, use, sell and offer for sale the
-Original Work and Derivative Works.
-
-3) Grant of Source Code License. The term "Source Code" means the preferred
-form of the Original Work for making modifications to it and all available
-documentation describing how to modify the Original Work. Licensor hereby
-agrees to provide a machine-readable copy of the Source Code of the Original
-Work along with each copy of the Original Work that Licensor distributes.
-Licensor reserves the right to satisfy this obligation by placing a
-machine-readable copy of the Source Code in an information repository
-reasonably calculated to permit inexpensive and convenient access by You for as
-long as Licensor continues to distribute the Original Work, and by publishing
-the address of that information repository in a notice immediately following
-the copyright notice that applies to the Original Work.
-
-4) Exclusions From License Grant. Neither the names of Licensor, nor the names
-of any contributors to the Original Work, nor any of their trademarks or
-service marks, may be used to endorse or promote products derived from this
-Original Work without express prior written permission of the Licensor. Nothing
-in this License shall be deemed to grant any rights to trademarks, copyrights,
-patents, trade secrets or any other intellectual property of Licensor except as
-expressly stated herein. No patent license is granted to make, use, sell or
-offer to sell embodiments of any patent claims other than the licensed claims
-defined in Section 2. No right is granted to the trademarks of Licensor even if
-such marks are included in the Original Work. Nothing in this License shall be
-interpreted to prohibit Licensor from licensing under different terms from this
-License any Original Work that Licensor otherwise would have a right to
-license.
-
-5) This section intentionally omitted.
-
-6) Attribution Rights. You must retain, in the Source Code of any Derivative
-Works that You create, all copyright, patent or trademark notices from the
-Source Code of the Original Work, as well as any notices of licensing and any
-descriptive text identified therein as an "Attribution Notice." You must cause
-the Source Code for any Derivative Works that You create to carry a prominent
-Attribution Notice reasonably calculated to inform recipients that You have
-modified the Original Work.
-
-7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
-the copyright in and to the Original Work and the patent rights granted herein
-by Licensor are owned by the Licensor or are sublicensed to You under the terms
-of this License with the permission of the contributor(s) of those copyrights
-and patent rights. Except as expressly stated in the immediately proceeding
-sentence, the Original Work is provided under this License on an "AS IS" BASIS
-and WITHOUT WARRANTY, either express or implied, including, without limitation,
-the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
-This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
-license to Original Work is granted hereunder except under this disclaimer.
-
-8) Limitation of Liability. Under no circumstances and under no legal theory,
-whether in tort (including negligence), contract, or otherwise, shall the
-Licensor be liable to any person for any direct, indirect, special, incidental,
-or consequential damages of any character arising as a result of this License
-or the use of the Original Work including, without limitation, damages for loss
-of goodwill, work stoppage, computer failure or malfunction, or any and all
-other commercial damages or losses. This limitation of liability shall not
-apply to liability for death or personal injury resulting from Licensor's
-negligence to the extent applicable law prohibits such limitation. Some
-jurisdictions do not allow the exclusion or limitation of incidental or
-consequential damages, so this exclusion and limitation may not apply to You.
-
-9) Acceptance and Termination. If You distribute copies of the Original Work or
-a Derivative Work, You must make a reasonable effort under the circumstances to
-obtain the express assent of recipients to the terms of this License. Nothing
-else but this License (or another written agreement between Licensor and You)
-grants You permission to create Derivative Works based upon the Original Work
-or to exercise any of the rights granted in Section 1 herein, and any attempt
-to do so except under the terms of this License (or another written agreement
-between Licensor and You) is expressly prohibited by U.S. copyright law, the
-equivalent laws of other countries, and by international treaty. Therefore, by
-exercising any of the rights granted to You in Section 1 herein, You indicate
-Your acceptance of this License and all of its terms and conditions.
-
-10) Termination for Patent Action. This License shall terminate automatically
-and You may no longer exercise any of the rights granted to You by this License
-as of the date You commence an action, including a cross-claim or counterclaim,
-against Licensor or any licensee alleging that the Original Work infringes a
-patent. This termination provision shall not apply for an action alleging
-patent infringement by combinations of the Original Work with other software or
-hardware.
-
-11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
-License may be brought only in the courts of a jurisdiction wherein the
-Licensor resides or in which Licensor conducts its primary business, and under
-the laws of that jurisdiction excluding its conflict-of-law provisions. The
-application of the United Nations Convention on Contracts for the International
-Sale of Goods is expressly excluded. Any use of the Original Work outside the
-scope of this License or after its termination shall be subject to the
-requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et
-seq., the equivalent laws of other countries, and international treaty. This
-section shall survive the termination of this License.
-
-12) Attorneys Fees. In any action to enforce the terms of this License or
-seeking damages relating thereto, the prevailing party shall be entitled to
-recover its costs and expenses, including, without limitation, reasonable
-attorneys' fees and costs incurred in connection with such action, including
-any appeal of such action. This section shall survive the termination of this
-License.
-
-13) Miscellaneous. This License represents the complete agreement concerning
-the subject matter hereof. If any provision of this License is held to be
-unenforceable, such provision shall be reformed only to the extent necessary to
-make it enforceable.
-
-14) Definition of "You" in This License. "You" throughout this License, whether
-in upper or lower case, means an individual or a legal entity exercising rights
-under, and complying with all of the terms of, this License. For legal
-entities, "You" includes any entity that controls, is controlled by, or is
-under common control with you. For purposes of this definition, "control" means
-(i) the power, direct or indirect, to cause the direction or management of such
-entity, whether by contract or otherwise, or (ii) ownership of fifty percent
-(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
-entity.
-
-15) Right to Use. You may use the Original Work in all ways not otherwise
-restricted or conditioned by this License or by law, and Licensor promises not
-to interfere with or be responsible for such uses by You.
-
-This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved.
-Permission is hereby granted to copy and distribute this license without
-modification. This license may not be modified without the express written
-permission of its copyright owner.
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/README b/tapestry/tapestry-framework/src/js/dojo-0.4.3/README
deleted file mode 100644
index 2bb84ea..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/README
+++ /dev/null
@@ -1,176 +0,0 @@
-The Dojo Toolkit
-----------------
-
-Dojo is a portable JavaScript toolkit for web application developers and
-JavaScript professionals. Dojo solves real-world problems by providing powerful
-abstractions and solid, tested implementations.
-
-Getting Started
----------------
-
-To use Dojo in your application, download one of the pre-built editions from the
-Dojo website, http://dojotoolkit.org. Once you have downloaded the file you will
-need to unzip the archive in your website root. At a minimum, you will need to
-extract:
-
-    src/ (folder)
-    dojo.js
-    iframe_history.html
-
-To begin using dojo, include dojo in your pages by using:
-
-    <script type="text/javascript" src="/path/to/dojo.js"></script>
-
-Depending on the edition that you have downloaded, this base dojo.js file may or
-may not include the modules you wish to use in your application. The files which
-have been "baked in" to the dojo.js that is part of your distribution are listed
-in the file build.txt that is part of the top-level directory that is created
-when you unpack the archive. To ensure modules you wish to use are available,
-use dojo.require() to request them. A very rich application might include:
-
-    <script type="text/javascript" src="/path/to/dojo.js"></script>
-    <script type="text/javascript">
-        dojo.require("dojo.event.*");       // sophisticated AOP event handling
-        dojo.require("dojo.io.*");          // for Ajax requests
-        dojo.require("dojo.storage.*");     // a persistent local data cache
-        dojo.require("dojo.json");          // serialization to JSON
-        dojo.require("dojo.dnd.*");         // drag-and-drop
-        dojo.require("dojo.lfx.*");         // animations and eye candy
-        dojo.require("dojo.widget.Editor2");// stable, portable HTML WYSIWYG
-    </script>
-
-Note that only those modules which are *not* already "baked in" to dojo.js by
-the edition's build process are requested by dojo.require(). This helps make
-your application faster without forcing you to use a build tool while in
-development. See "Building Dojo" and "Working From Source" for more details.
-
-
-Compatibility
--------------
-
-In addition to it's suite of unit-tests for core system components, Dojo has
-been tested on almost every modern browser, including:
-
-    - IE 5.5+
-    - Mozilla 1.5+, Firefox 1.0+
-    - Safari 1.3.9+
-    - Konqueror 3.4+
-    - Opera 8.5+
-
-Note that some widgets and features may not perform exactly the same on every
-browser due to browser implementation differences.
-
-For those looking to use Dojo in non-browser environments, please see "Working
-From Source".
-
-
-Documentation and Getting Help
-------------------------------
-
-Articles outlining major Dojo systems are linked from:
-
-    http://dojotoolkit.org/docs/
-
-Toolkit APIs are listed in outline form at:
-
-    http://dojotoolkit.org/docs/apis/
-
-And documented in full at:
-
-    http://manual.dojotoolkit.org/
-
-The project also maintains a JotSpot Wiki at:
-
-    http://dojo.jot.com/
-
-A FAQ has been extracted from mailing list traffic:
-
-    http://dojo.jot.com/FAQ
-
-And the main Dojo user mailing list is archived and made searchable at:
-
-    http://news.gmane.org/gmane.comp.web.dojo.user/
-
-You can sign up for this list, which is a great place to ask questions, at:
-
-    http://dojotoolkit.org/mailman/listinfo/dojo-interest
-
-The Dojo developers also tend to hang out in IRC and help people with Dojo
-problems. You're most likely to find them at:
-
-    irc.freenode.net #dojo
-
-Note that 3PM Wed PST in #dojo-meeting is reserved for a weekly meeting between
-project developers, although anyone is welcome to participate.
-
-
-Working From Source
--------------------
-
-The core of Dojo is a powerful package system that allows developers to optimize
-Dojo for deployment while using *exactly the same* application code in
-development. Therefore, working from source is almost exactly like working from
-a pre-built edition. Pre-built editions are significantly faster to load than
-working from source, but are not as flexible when in development.
-
-There are multiple ways to get the source. Nightly snapshots of the Dojo source
-repository are available at:
-
-    http://archive.dojotoolkit.org/nightly.tgz
-
-Anonymous Subversion access is also available:
-
-    %> svn co http://svn.dojotoolkit.org/dojo/trunk/ dojo
-
-Each of these sources will include some extra directories not included in the
-pre-packaged editions, including command-line tests and build tools for
-constructing your own packages.
-
-Running the command-line unit test suite requires Ant 1.6. If it is installed
-and in your path, you can run the tests using:
-
-    %> cd buildscripts
-    %> ant test
-
-The command-line test harness makes use of Rhino, a JavaScript interpreter
-written in Java. Once you have a copy of Dojo's source tree, you have a copy of
-Rhino. From the root directory, you can use Rhino interactively to load Dojo:
-
-    %> java -jar buildscripts/lib/js.jar
-    Rhino 1.5 release 3 2002 01 27
-    js> load("dojo.js");
-    js> print(dojo);
-    [object Object]
-    js> quit();
-
-This environment is wonderful for testing raw JavaScript functionality in, or
-even for scripting your system. Since Rhino has full access to anything in
-Java's classpath, the sky is the limit!
-
-Building Dojo
--------------
-
-Dojo requires Ant 1.6.x in order to build correctly. While using Dojo from
-source does *NOT* require that you make a build, speeding up your application by
-constructing a custom profile build does.
-
-Once you have Ant and a source snapshot of Dojo, you can make your own profile
-build ("edition") which includes only those modules your application uses by
-customizing one of the files in:
-
-    [dojo]/buildscripts/profiles/
-
-These files are named *.profile.js and each one contains a list of modules to
-include in a build. If we created a new profile called "test.profile.js", we
-could then make a profile build using it by doing:
-
-    %> cd buildscripts
-    %> ant -Dprofile=test -Ddocless=true release intern-strings
-
-If the build is successful, your newly minted and compressed  profile build will
-be placed in [dojo]/release/dojo/
-
--------------------------------------------------------------------------------
-Copyright (c) 2004-2006, The Dojo Foundation, All Rights Reserved
-
-vim:ts=4:et:tw=80:shiftwidth=4:
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/Storage_version6.swf b/tapestry/tapestry-framework/src/js/dojo-0.4.3/Storage_version6.swf
deleted file mode 100644
index c97b14c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/Storage_version6.swf
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/Storage_version8.swf b/tapestry/tapestry-framework/src/js/dojo-0.4.3/Storage_version8.swf
deleted file mode 100644
index 449da95..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/Storage_version8.swf
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/build.txt b/tapestry/tapestry-framework/src/js/dojo-0.4.3/build.txt
deleted file mode 100644
index b5a0cb1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/build.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-Files baked into this build:
-
-dojo.js:
-dojoGuardStart.js
-../src/bootstrap1.js
-../src/loader.js
-dojoGuardEnd.js
-../src/hostenv_browser.js
-../src/lang/common.js
-../src/lang/array.js
-../src/lang/extras.js
-../src/lang/func.js
-../src/event/common.js
-../src/event/browser.js
-../src/string/common.js
-../src/string.js
-../src/io/common.js
-../src/string/extras.js
-../src/dom.js
-../src/undo/browser.js
-../src/io/BrowserIO.js
-../src/io/cookie.js
-../src/lang/declare.js
-../src/html/common.js
-../src/uri/Uri.js
-../src/html/style.js
-../src/html/__package__.js
-../src/html/display.js
-../src/ns.js
-../src/event/topic.js
-../src/event/__package__.js
-../src/widget/Manager.js
-../src/i18n/common.js
-../src/tlocale.js
-
-dojo2.js:
-../src/experimental.js
-../src/regexp.js
-../src/i18n/number.js
-../src/validate/common.js
-../src/validate/check.js
-../src/date/common.js
-../src/date/supplemental.js
-../src/date/format.js
-../src/date/serialize.js
-../src/validate/datetime.js
-../src/validate/web.js
-../src/validate/creditCard.js
-../src/validate/us.js
-
-dojo3.js:
-../src/namespaces/dojo.js
-../src/xml/Parse.js
-../src/widget/Widget.js
-../src/widget/Parse.js
-../src/uri/__package__.js
-../src/widget/DomWidget.js
-../src/html/layout.js
-../src/html/util.js
-../src/gfx/color.js
-../src/lfx/Animation.js
-../src/html/color.js
-../src/lfx/html.js
-../src/lfx/__package__.js
-../src/lfx/toggle.js
-../src/widget/HtmlWidget.js
-../src/widget/__package__.js
-../src/io/__package__.js
-../src/widget/ContentPane.js
-../src/html/selection.js
-../src/html/iframe.js
-../src/widget/PopupContainer.js
-../src/widget/DropdownContainer.js
-../src/widget/html/stabile.js
-../src/widget/Dialog.js
-../src/widget/ComboBox.js
-../src/widget/Select.js
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo.js
deleted file mode 100644
index e3b88c0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo.js
+++ /dev/null
@@ -1,5489 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
-	This is a compiled version of Dojo, built for deployment and not for
-	development. To get an editable version, please visit:
-
-		http://dojotoolkit.org
-
-	for documentation and information on getting the source.
-*/
-
-if(typeof dojo=="undefined"){
-var dj_global=this;
-var dj_currentContext=this;
-function dj_undef(_1,_2){
-return (typeof (_2||dj_currentContext)[_1]=="undefined");
-}
-if(dj_undef("djConfig",this)){
-var djConfig={};
-}
-if(dj_undef("dojo",this)){
-var dojo={};
-}
-dojo.global=function(){
-return dj_currentContext;
-};
-dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:0,patch:0,flag:"dev",revision:Number("$Rev$".match(/[0-9]+/)[0]),toString:function(){
-with(dojo.version){
-return major+"."+minor+"."+patch+flag+" ("+revision+")";
-}
-}};
-dojo.evalProp=function(_3,_4,_5){
-if((!_4)||(!_3)){
-return undefined;
-}
-if(!dj_undef(_3,_4)){
-return _4[_3];
-}
-return (_5?(_4[_3]={}):undefined);
-};
-dojo.parseObjPath=function(_6,_7,_8){
-var _9=(_7||dojo.global());
-var _a=_6.split(".");
-var _b=_a.pop();
-for(var i=0,l=_a.length;i<l&&_9;i++){
-_9=dojo.evalProp(_a[i],_9,_8);
-}
-return {obj:_9,prop:_b};
-};
-dojo.evalObjPath=function(_e,_f){
-if(typeof _e!="string"){
-return dojo.global();
-}
-if(_e.indexOf(".")==-1){
-return dojo.evalProp(_e,dojo.global(),_f);
-}
-var ref=dojo.parseObjPath(_e,dojo.global(),_f);
-if(ref){
-return dojo.evalProp(ref.prop,ref.obj,_f);
-}
-return null;
-};
-dojo.errorToString=function(_11){
-if(!dj_undef("message",_11)){
-return _11.message;
-}else{
-if(!dj_undef("description",_11)){
-return _11.description;
-}else{
-return _11;
-}
-}
-};
-dojo.raise=function(_12,_13){
-if(_13){
-_12=_12+": "+dojo.errorToString(_13);
-}else{
-_12=dojo.errorToString(_12);
-}
-try{
-if(djConfig.isDebug){
-dojo.hostenv.println("FATAL exception raised: "+_12);
-}
-}
-catch(e){
-}
-throw _13||Error(_12);
-};
-dojo.debug=function(){
-};
-dojo.debugShallow=function(obj){
-};
-dojo.profile={start:function(){
-},end:function(){
-},stop:function(){
-},dump:function(){
-}};
-function dj_eval(_15){
-return dj_global.eval?dj_global.eval(_15):eval(_15);
-}
-dojo.unimplemented=function(_16,_17){
-var _18="'"+_16+"' not implemented";
-if(_17!=null){
-_18+=" "+_17;
-}
-dojo.raise(_18);
-};
-dojo.deprecated=function(_19,_1a,_1b){
-var _1c="DEPRECATED: "+_19;
-if(_1a){
-_1c+=" "+_1a;
-}
-if(_1b){
-_1c+=" -- will be removed in version: "+_1b;
-}
-dojo.debug(_1c);
-};
-dojo.render=(function(){
-function vscaffold(_1d,_1e){
-var tmp={capable:false,support:{builtin:false,plugin:false},prefixes:_1d};
-for(var i=0;i<_1e.length;i++){
-tmp[_1e[i]]=false;
-}
-return tmp;
-}
-return {name:"",ver:dojo.version,os:{win:false,linux:false,osx:false},html:vscaffold(["html"],["ie","opera","khtml","safari","moz"]),svg:vscaffold(["svg"],["corel","adobe","batik"]),vml:vscaffold(["vml"],["ie"]),swf:vscaffold(["Swf","Flash","Mm"],["mm"]),swt:vscaffold(["Swt"],["ibm"])};
-})();
-dojo.hostenv=(function(){
-var _21={isDebug:false,allowQueryConfig:false,baseScriptUri:"",baseRelativePath:"",libraryScriptUri:"",iePreventClobber:false,ieClobberMinimal:true,preventBackButtonFix:true,delayMozLoadingFix:false,searchIds:[],parseWidgets:true};
-if(typeof djConfig=="undefined"){
-djConfig=_21;
-}else{
-for(var _22 in _21){
-if(typeof djConfig[_22]=="undefined"){
-djConfig[_22]=_21[_22];
-}
-}
-}
-return {name_:"(unset)",version_:"(unset)",getName:function(){
-return this.name_;
-},getVersion:function(){
-return this.version_;
-},getText:function(uri){
-dojo.unimplemented("getText","uri="+uri);
-}};
-})();
-dojo.hostenv.getBaseScriptUri=function(){
-if(djConfig.baseScriptUri.length){
-return djConfig.baseScriptUri;
-}
-var uri=new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-if(!uri){
-dojo.raise("Nothing returned by getLibraryScriptUri(): "+uri);
-}
-var _25=uri.lastIndexOf("/");
-djConfig.baseScriptUri=djConfig.baseRelativePath;
-return djConfig.baseScriptUri;
-};
-(function(){
-var _26={pkgFileName:"__package__",loading_modules_:{},loaded_modules_:{},addedToLoadingCount:[],removedFromLoadingCount:[],inFlightCount:0,modulePrefixes_:{dojo:{name:"dojo",value:"src"}},setModulePrefix:function(_27,_28){
-this.modulePrefixes_[_27]={name:_27,value:_28};
-},moduleHasPrefix:function(_29){
-var mp=this.modulePrefixes_;
-return Boolean(mp[_29]&&mp[_29].value);
-},getModulePrefix:function(_2b){
-if(this.moduleHasPrefix(_2b)){
-return this.modulePrefixes_[_2b].value;
-}
-return _2b;
-},getTextStack:[],loadUriStack:[],loadedUris:[],post_load_:false,modulesLoadedListeners:[],unloadListeners:[],loadNotifying:false};
-for(var _2c in _26){
-dojo.hostenv[_2c]=_26[_2c];
-}
-})();
-dojo.hostenv.loadPath=function(_2d,_2e,cb){
-var uri;
-if(_2d.charAt(0)=="/"||_2d.match(/^\w+:/)){
-uri=_2d;
-}else{
-uri=this.getBaseScriptUri()+_2d;
-}
-if(djConfig.cacheBust&&dojo.render.html.capable){
-uri+="?"+String(djConfig.cacheBust).replace(/\W+/g,"");
-}
-try{
-return !_2e?this.loadUri(uri,cb):this.loadUriAndCheck(uri,_2e,cb);
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.hostenv.loadUri=function(uri,cb){
-if(this.loadedUris[uri]){
-return true;
-}
-var _33=this.getText(uri,null,true);
-if(!_33){
-return false;
-}
-this.loadedUris[uri]=true;
-var _34=dj_eval(_33);
-if(cb){
-cb(_34);
-}
-return true;
-};
-dojo.hostenv.loadUriAndCheck=function(uri,_36,cb){
-var ok=true;
-try{
-ok=this.loadUri(uri,cb);
-}
-catch(e){
-dojo.debug("failed loading ",uri," with error: ",e);
-}
-return Boolean(ok&&this.findModule(_36,false));
-};
-dojo.loaded=function(){
-};
-dojo.unloaded=function(){
-};
-dojo.hostenv.loaded=function(){
-this.loadNotifying=true;
-this.post_load_=true;
-var mll=this.modulesLoadedListeners;
-for(var x=0;x<mll.length;x++){
-mll[x]();
-}
-this.modulesLoadedListeners=[];
-this.loadNotifying=false;
-dojo.loaded();
-};
-dojo.hostenv.unloaded=function(){
-var mll=this.unloadListeners;
-while(mll.length){
-(mll.pop())();
-}
-dojo.unloaded();
-};
-dojo.addOnLoad=function(obj,_3d){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.modulesLoadedListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.modulesLoadedListeners.push(function(){
-obj[_3d]();
-});
-}
-}
-if(dh.post_load_&&dh.inFlightCount==0&&!dh.loadNotifying){
-dh.callLoaded();
-}
-};
-dojo.addOnUnload=function(obj,_40){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.unloadListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.unloadListeners.push(function(){
-obj[_40]();
-});
-}
-}
-};
-dojo.hostenv.modulesLoaded=function(){
-if(this.post_load_){
-return;
-}
-if(this.loadUriStack.length==0&&this.getTextStack.length==0){
-if(this.inFlightCount>0){
-dojo.debug("files still in flight!");
-return;
-}
-dojo.hostenv.callLoaded();
-}
-};
-dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
-setTimeout("dojo.hostenv.loaded();",0);
-}else{
-dojo.hostenv.loaded();
-}
-};
-dojo.hostenv.getModuleSymbols=function(_42){
-var _43=_42.split(".");
-for(var i=_43.length;i>0;i--){
-var _45=_43.slice(0,i).join(".");
-if((i==1)&&!this.moduleHasPrefix(_45)){
-_43[0]="../"+_43[0];
-}else{
-var _46=this.getModulePrefix(_45);
-if(_46!=_45){
-_43.splice(0,i,_46);
-break;
-}
-}
-}
-return _43;
-};
-dojo.hostenv._global_omit_module_check=false;
-dojo.hostenv.loadModule=function(_47,_48,_49){
-if(!_47){
-return;
-}
-_49=this._global_omit_module_check||_49;
-var _4a=this.findModule(_47,false);
-if(_4a){
-return _4a;
-}
-if(dj_undef(_47,this.loading_modules_)){
-this.addedToLoadingCount.push(_47);
-}
-this.loading_modules_[_47]=1;
-var _4b=_47.replace(/\./g,"/")+".js";
-var _4c=_47.split(".");
-var _4d=this.getModuleSymbols(_47);
-var _4e=((_4d[0].charAt(0)!="/")&&!_4d[0].match(/^\w+:/));
-var _4f=_4d[_4d.length-1];
-var ok;
-if(_4f=="*"){
-_47=_4c.slice(0,-1).join(".");
-while(_4d.length){
-_4d.pop();
-_4d.push(this.pkgFileName);
-_4b=_4d.join("/")+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,!_49?_47:null);
-if(ok){
-break;
-}
-_4d.pop();
-}
-}else{
-_4b=_4d.join("/")+".js";
-_47=_4c.join(".");
-var _51=!_49?_47:null;
-ok=this.loadPath(_4b,_51);
-if(!ok&&!_48){
-_4d.pop();
-while(_4d.length){
-_4b=_4d.join("/")+".js";
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-_4d.pop();
-_4b=_4d.join("/")+"/"+this.pkgFileName+".js";
-if(_4e&&_4b.charAt(0)=="/"){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,_51);
-if(ok){
-break;
-}
-}
-}
-if(!ok&&!_49){
-dojo.raise("Could not load '"+_47+"'; last tried '"+_4b+"'");
-}
-}
-if(!_49&&!this["isXDomain"]){
-_4a=this.findModule(_47,false);
-if(!_4a){
-dojo.raise("symbol '"+_47+"' is not defined after loading '"+_4b+"'");
-}
-}
-return _4a;
-};
-dojo.hostenv.startPackage=function(_52){
-var _53=String(_52);
-var _54=_53;
-var _55=_52.split(/\./);
-if(_55[_55.length-1]=="*"){
-_55.pop();
-_54=_55.join(".");
-}
-var _56=dojo.evalObjPath(_54,true);
-this.loaded_modules_[_53]=_56;
-this.loaded_modules_[_54]=_56;
-return _56;
-};
-dojo.hostenv.findModule=function(_57,_58){
-var lmn=String(_57);
-if(this.loaded_modules_[lmn]){
-return this.loaded_modules_[lmn];
-}
-if(_58){
-dojo.raise("no loaded module named '"+_57+"'");
-}
-return null;
-};
-dojo.kwCompoundRequire=function(_5a){
-var _5b=_5a["common"]||[];
-var _5c=_5a[dojo.hostenv.name_]?_5b.concat(_5a[dojo.hostenv.name_]||[]):_5b.concat(_5a["default"]||[]);
-for(var x=0;x<_5c.length;x++){
-var _5e=_5c[x];
-if(_5e.constructor==Array){
-dojo.hostenv.loadModule.apply(dojo.hostenv,_5e);
-}else{
-dojo.hostenv.loadModule(_5e);
-}
-}
-};
-dojo.require=function(_5f){
-dojo.hostenv.loadModule.apply(dojo.hostenv,arguments);
-};
-dojo.requireIf=function(_60,_61){
-var _62=arguments[0];
-if((_62===true)||(_62=="common")||(_62&&dojo.render[_62].capable)){
-var _63=[];
-for(var i=1;i<arguments.length;i++){
-_63.push(arguments[i]);
-}
-dojo.require.apply(dojo,_63);
-}
-};
-dojo.requireAfterIf=dojo.requireIf;
-dojo.provide=function(_65){
-return dojo.hostenv.startPackage.apply(dojo.hostenv,arguments);
-};
-dojo.registerModulePath=function(_66,_67){
-return dojo.hostenv.setModulePrefix(_66,_67);
-};
-if(djConfig["modulePaths"]){
-for(var param in djConfig["modulePaths"]){
-dojo.registerModulePath(param,djConfig["modulePaths"][param]);
-}
-}
-dojo.setModulePrefix=function(_68,_69){
-dojo.deprecated("dojo.setModulePrefix(\""+_68+"\", \""+_69+"\")","replaced by dojo.registerModulePath","0.5");
-return dojo.registerModulePath(_68,_69);
-};
-dojo.exists=function(obj,_6b){
-var p=_6b.split(".");
-for(var i=0;i<p.length;i++){
-if(!obj[p[i]]){
-return false;
-}
-obj=obj[p[i]];
-}
-return true;
-};
-dojo.hostenv.normalizeLocale=function(_6e){
-var _6f=_6e?_6e.toLowerCase():dojo.locale;
-if(_6f=="root"){
-_6f="ROOT";
-}
-return _6f;
-};
-dojo.hostenv.searchLocalePath=function(_70,_71,_72){
-_70=dojo.hostenv.normalizeLocale(_70);
-var _73=_70.split("-");
-var _74=[];
-for(var i=_73.length;i>0;i--){
-_74.push(_73.slice(0,i).join("-"));
-}
-_74.push(false);
-if(_71){
-_74.reverse();
-}
-for(var j=_74.length-1;j>=0;j--){
-var loc=_74[j]||"ROOT";
-var _78=_72(loc);
-if(_78){
-break;
-}
-}
-};
-dojo.hostenv.localesGenerated=["ROOT","es-es","es","it-it","pt-br","de","fr-fr","zh-cn","pt","en-us","zh","fr","zh-tw","it","en-gb","xx","de-de","ko-kr","ja-jp","ko","en","ja"];
-dojo.hostenv.registerNlsPrefix=function(){
-dojo.registerModulePath("nls","nls");
-};
-dojo.hostenv.preloadLocalizations=function(){
-if(dojo.hostenv.localesGenerated){
-dojo.hostenv.registerNlsPrefix();
-function preload(_79){
-_79=dojo.hostenv.normalizeLocale(_79);
-dojo.hostenv.searchLocalePath(_79,true,function(loc){
-for(var i=0;i<dojo.hostenv.localesGenerated.length;i++){
-if(dojo.hostenv.localesGenerated[i]==loc){
-dojo["require"]("nls.dojo_"+loc);
-return true;
-}
-}
-return false;
-});
-}
-preload();
-var _7c=djConfig.extraLocale||[];
-for(var i=0;i<_7c.length;i++){
-preload(_7c[i]);
-}
-}
-dojo.hostenv.preloadLocalizations=function(){
-};
-};
-dojo.requireLocalization=function(_7e,_7f,_80,_81){
-dojo.hostenv.preloadLocalizations();
-var _82=dojo.hostenv.normalizeLocale(_80);
-var _83=[_7e,"nls",_7f].join(".");
-var _84="";
-if(_81){
-var _85=_81.split(",");
-for(var i=0;i<_85.length;i++){
-if(_82.indexOf(_85[i])==0 || _85[i].indexOf(_82)==0){
-if(_85[i].length>_84.length){
-_84=_85[i];
-}
-}
-}
-if(!_84){
-_84="ROOT";
-}
-}
-var _87=_81?_84:_82;
-var _88=dojo.hostenv.findModule(_83);
-var _89=null;
-if(_88){
-if(djConfig.localizationComplete&&_88._built){
-return;
-}
-var _8a=_87.replace("-","_");
-var _8b=_83+"."+_8a;
-_89=dojo.hostenv.findModule(_8b);
-}
-if(!_89){
-_88=dojo.hostenv.startPackage(_83);
-var _8c=dojo.hostenv.getModuleSymbols(_7e);
-var _8d=_8c.concat("nls").join("/");
-var _8e;
-dojo.hostenv.searchLocalePath(_87,_81,function(loc){
-var _90=loc.replace("-","_");
-var _91=_83+"."+_90;
-var _92=false;
-if(!dojo.hostenv.findModule(_91)){
-dojo.hostenv.startPackage(_91);
-var _93=[_8d];
-if(loc!="ROOT"){
-_93.push(loc);
-}
-_93.push(_7f);
-var _94=_93.join("/")+".js";
-_92=dojo.hostenv.loadPath(_94,null,function(_95){
-var _96=function(){
-};
-_96.prototype=_8e;
-_88[_90]=new _96();
-for(var j in _95){
-_88[_90][j]=_95[j];
-}
-});
-}else{
-_92=true;
-}
-if(_92&&_88[_90]){
-_8e=_88[_90];
-}else{
-_88[_90]=_8e;
-}
-if(_81){
-return true;
-}
-});
-}
-if(_81&&_82!=_84){
-_88[_82.replace("-","_")]=_88[_84.replace("-","_")];
-}
-};
-(function(){
-var _98=djConfig.extraLocale;
-if(_98){
-if(!_98 instanceof Array){
-_98=[_98];
-}
-var req=dojo.requireLocalization;
-dojo.requireLocalization=function(m,b,_9c,_9d){
-req(m,b,_9c,_9d);
-if(_9c){
-return;
-}
-for(var i=0;i<_98.length;i++){
-req(m,b,_98[i],_9d);
-}
-};
-}
-})();
-}
-if(typeof window!="undefined"){
-(function(){
-if(djConfig.allowQueryConfig){
-var _9f=document.location.toString();
-var _a0=_9f.split("?",2);
-if(_a0.length>1){
-var _a1=_a0[1];
-var _a2=_a1.split("&");
-for(var x in _a2){
-var sp=_a2[x].split("=");
-if((sp[0].length>9)&&(sp[0].substr(0,9)=="djConfig.")){
-var opt=sp[0].substr(9);
-try{
-djConfig[opt]=eval(sp[1]);
-}
-catch(e){
-djConfig[opt]=sp[1];
-}
-}
-}
-}
-}
-if(((djConfig["baseScriptUri"]=="")||(djConfig["baseRelativePath"]==""))&&(document&&document.getElementsByTagName)){
-var _a6=document.getElementsByTagName("script");
-var _a7=/(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-for(var i=0;i<_a6.length;i++){
-var src=_a6[i].getAttribute("src");
-if(!src){
-continue;
-}
-var m=src.match(_a7);
-if(m){
-var _ab=src.substring(0,m.index);
-if(src.indexOf("bootstrap1")>-1){
-_ab+="../";
-}
-if(!this["djConfig"]){
-djConfig={};
-}
-if(djConfig["baseScriptUri"]==""){
-djConfig["baseScriptUri"]=_ab;
-}
-if(djConfig["baseRelativePath"]==""){
-djConfig["baseRelativePath"]=_ab;
-}
-break;
-}
-}
-}
-var dr=dojo.render;
-var drh=dojo.render.html;
-var drs=dojo.render.svg;
-var dua=(drh.UA=navigator.userAgent);
-var dav=(drh.AV=navigator.appVersion);
-var t=true;
-var f=false;
-drh.capable=t;
-drh.support.builtin=t;
-dr.ver=parseFloat(drh.AV);
-dr.os.mac=dav.indexOf("Macintosh")>=0;
-dr.os.win=dav.indexOf("Windows")>=0;
-dr.os.linux=dav.indexOf("X11")>=0;
-drh.opera=dua.indexOf("Opera")>=0;
-drh.khtml=(dav.indexOf("Konqueror")>=0)||(dav.indexOf("Safari")>=0);
-drh.safari=dav.indexOf("Safari")>=0;
-var _b3=dua.indexOf("Gecko");
-drh.mozilla=drh.moz=(_b3>=0)&&(!drh.khtml);
-if(drh.mozilla){
-drh.geckoVersion=dua.substring(_b3+6,_b3+14);
-}
-drh.ie=(document.all)&&(!drh.opera);
-drh.ie50=drh.ie&&dav.indexOf("MSIE 5.0")>=0;
-drh.ie55=drh.ie&&dav.indexOf("MSIE 5.5")>=0;
-drh.ie60=drh.ie&&dav.indexOf("MSIE 6.0")>=0;
-drh.ie70=drh.ie&&dav.indexOf("MSIE 7.0")>=0;
-var cm=document["compatMode"];
-drh.quirks=(cm=="BackCompat")||(cm=="QuirksMode")||drh.ie55||drh.ie50;
-dojo.locale=dojo.locale||(drh.ie?navigator.userLanguage:navigator.language).toLowerCase();
-dr.vml.capable=drh.ie;
-drs.capable=f;
-drs.support.plugin=f;
-drs.support.builtin=f;
-var _b5=window["document"];
-var tdi=_b5["implementation"];
-if((tdi)&&(tdi["hasFeature"])&&(tdi.hasFeature("org.w3c.dom.svg","1.0"))){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-if(drh.safari){
-var tmp=dua.split("AppleWebKit/")[1];
-var ver=parseFloat(tmp.split(" ")[0]);
-if(ver>=420){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-}else{
-}
-})();
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.render.name=dojo.hostenv.name_="browser";
-dojo.hostenv.searchIds=[];
-dojo.hostenv._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
-dojo.hostenv.getXmlhttpObject=function(){
-var _b9=null;
-var _ba=null;
-try{
-_b9=new XMLHttpRequest();
-}
-catch(e){
-}
-if(!_b9){
-for(var i=0;i<3;++i){
-var _bc=dojo.hostenv._XMLHTTP_PROGIDS[i];
-try{
-_b9=new ActiveXObject(_bc);
-}
-catch(e){
-_ba=e;
-}
-if(_b9){
-dojo.hostenv._XMLHTTP_PROGIDS=[_bc];
-break;
-}
-}
-}
-if(!_b9){
-return dojo.raise("XMLHTTP not available",_ba);
-}
-return _b9;
-};
-dojo.hostenv._blockAsync=false;
-dojo.hostenv.getText=function(uri,_be,_bf){
-if(!_be){
-this._blockAsync=true;
-}
-var _c0=this.getXmlhttpObject();
-function isDocumentOk(_c1){
-var _c2=_c1["status"];
-return Boolean((!_c2)||((200<=_c2)&&(300>_c2))||(_c2==304));
-}
-if(_be){
-var _c3=this,_c4=null,gbl=dojo.global();
-var xhr=dojo.evalObjPath("dojo.io.XMLHTTPTransport");
-_c0.onreadystatechange=function(){
-if(_c4){
-gbl.clearTimeout(_c4);
-_c4=null;
-}
-if(_c3._blockAsync||(xhr&&xhr._blockAsync)){
-_c4=gbl.setTimeout(function(){
-_c0.onreadystatechange.apply(this);
-},10);
-}else{
-if(4==_c0.readyState){
-if(isDocumentOk(_c0)){
-_be(_c0.responseText);
-}
-}
-}
-};
-}
-_c0.open("GET",uri,_be?true:false);
-try{
-_c0.send(null);
-if(_be){
-return null;
-}
-if(!isDocumentOk(_c0)){
-var err=Error("Unable to load "+uri+" status:"+_c0.status);
-err.status=_c0.status;
-err.responseText=_c0.responseText;
-throw err;
-}
-}
-catch(e){
-this._blockAsync=false;
-if((_bf)&&(!_be)){
-return null;
-}else{
-throw e;
-}
-}
-this._blockAsync=false;
-return _c0.responseText;
-};
-dojo.hostenv.defaultDebugContainerId="dojoDebug";
-dojo.hostenv._println_buffer=[];
-dojo.hostenv._println_safe=false;
-dojo.hostenv.println=function(_c8){
-if(!dojo.hostenv._println_safe){
-dojo.hostenv._println_buffer.push(_c8);
-}else{
-try{
-var _c9=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId);
-if(!_c9){
-_c9=dojo.body();
-}
-var div=document.createElement("div");
-div.appendChild(document.createTextNode(_c8));
-_c9.appendChild(div);
-}
-catch(e){
-try{
-document.write("<div>"+_c8+"</div>");
-}
-catch(e2){
-window.status=_c8;
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-dojo.hostenv._println_safe=true;
-while(dojo.hostenv._println_buffer.length>0){
-dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-}
-});
-function dj_addNodeEvtHdlr(_cb,_cc,fp){
-var _ce=_cb["on"+_cc]||function(){
-};
-_cb["on"+_cc]=function(){
-fp.apply(_cb,arguments);
-_ce.apply(_cb,arguments);
-};
-return true;
-}
-dojo.hostenv._djInitFired=false;
-function dj_load_init(e){
-dojo.hostenv._djInitFired=true;
-var _d0=(e&&e.type)?e.type.toLowerCase():"load";
-if(arguments.callee.initialized||(_d0!="domcontentloaded"&&_d0!="load")){
-return;
-}
-arguments.callee.initialized=true;
-if(typeof (_timer)!="undefined"){
-clearInterval(_timer);
-delete _timer;
-}
-var _d1=function(){
-if(dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-};
-if(dojo.hostenv.inFlightCount==0){
-_d1();
-dojo.hostenv.modulesLoaded();
-}else{
-dojo.hostenv.modulesLoadedListeners.unshift(_d1);
-}
-}
-if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
-document.addEventListener("DOMContentLoaded",dj_load_init,null);
-}
-window.addEventListener("load",dj_load_init,null);
-}
-if(dojo.render.html.ie&&dojo.render.os.win){
-document.attachEvent("onreadystatechange",function(e){
-if(document.readyState=="complete"){
-dj_load_init();
-}
-});
-}
-if(/(WebKit|khtml)/i.test(navigator.userAgent)){
-var _timer=setInterval(function(){
-if(/loaded|complete/.test(document.readyState)){
-dj_load_init();
-}
-},10);
-}
-if(dojo.render.html.ie){
-dj_addNodeEvtHdlr(window,"beforeunload",function(){
-dojo.hostenv._unloading=true;
-window.setTimeout(function(){
-dojo.hostenv._unloading=false;
-},0);
-});
-}
-dj_addNodeEvtHdlr(window,"unload",function(){
-dojo.hostenv.unloaded();
-if((!dojo.render.html.ie)||(dojo.render.html.ie&&dojo.hostenv._unloading)){
-dojo.hostenv.unloaded();
-}
-});
-dojo.hostenv.makeWidgets=function(){
-var _d3=[];
-if(djConfig.searchIds&&djConfig.searchIds.length>0){
-_d3=_d3.concat(djConfig.searchIds);
-}
-if(dojo.hostenv.searchIds&&dojo.hostenv.searchIds.length>0){
-_d3=_d3.concat(dojo.hostenv.searchIds);
-}
-if((djConfig.parseWidgets)||(_d3.length>0)){
-if(dojo.evalObjPath("dojo.widget.Parse")){
-var _d4=new dojo.xml.Parse();
-if(_d3.length>0){
-for(var x=0;x<_d3.length;x++){
-var _d6=document.getElementById(_d3[x]);
-if(!_d6){
-continue;
-}
-var _d7=_d4.parseElement(_d6,null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}else{
-if(djConfig.parseWidgets){
-var _d7=_d4.parseElement(dojo.body(),null,true);
-dojo.widget.getParser().createComponents(_d7);
-}
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-if(!dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-});
-try{
-if(dojo.render.html.ie){
-document.namespaces.add("v","urn:schemas-microsoft-com:vml");
-document.createStyleSheet().addRule("v\\:*","behavior:url(#default#VML)");
-}
-}
-catch(e){
-}
-dojo.hostenv.writeIncludes=function(){
-};
-if(!dj_undef("document",this)){
-dj_currentDocument=this.document;
-}
-dojo.doc=function(){
-return dj_currentDocument;
-};
-dojo.body=function(){
-return dojo.doc().body||dojo.doc().getElementsByTagName("body")[0];
-};
-dojo.byId=function(id,doc){
-if((id)&&((typeof id=="string")||(id instanceof String))){
-if(!doc){
-doc=dj_currentDocument;
-}
-var ele=doc.getElementById(id);
-if(ele&&(ele.id!=id)&&doc.all){
-ele=null;
-eles=doc.all[id];
-if(eles){
-if(eles.length){
-for(var i=0;i<eles.length;i++){
-if(eles[i].id==id){
-ele=eles[i];
-break;
-}
-}
-}else{
-ele=eles;
-}
-}
-}
-return ele;
-}
-return id;
-};
-dojo.setContext=function(_dc,_dd){
-dj_currentContext=_dc;
-dj_currentDocument=_dd;
-};
-dojo._fireCallback=function(_de,_df,_e0){
-if((_df)&&((typeof _de=="string")||(_de instanceof String))){
-_de=_df[_de];
-}
-return (_df?_de.apply(_df,_e0||[]):_de());
-};
-dojo.withGlobal=function(_e1,_e2,_e3,_e4){
-var _e5;
-var _e6=dj_currentContext;
-var _e7=dj_currentDocument;
-try{
-dojo.setContext(_e1,_e1.document);
-_e5=dojo._fireCallback(_e2,_e3,_e4);
-}
-finally{
-dojo.setContext(_e6,_e7);
-}
-return _e5;
-};
-dojo.withDoc=function(_e8,_e9,_ea,_eb){
-var _ec;
-var _ed=dj_currentDocument;
-try{
-dj_currentDocument=_e8;
-_ec=dojo._fireCallback(_e9,_ea,_eb);
-}
-finally{
-dj_currentDocument=_ed;
-}
-return _ec;
-};
-}
-dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
-dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
-dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
-dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_ee,_ef){
-if(!dojo.lang.isFunction(_ef)){
-dojo.raise("dojo.inherits: superclass argument ["+_ef+"] must be a function (subclass: ["+_ee+"']");
-}
-_ee.prototype=new _ef();
-_ee.prototype.constructor=_ee;
-_ee.superclass=_ef.prototype;
-_ee["super"]=_ef.prototype;
-};
-dojo.lang._mixin=function(obj,_f1){
-var _f2={};
-for(var x in _f1){
-if((typeof _f2[x]=="undefined")||(_f2[x]!=_f1[x])){
-obj[x]=_f1[x];
-}
-}
-if(dojo.render.html.ie&&(typeof (_f1["toString"])=="function")&&(_f1["toString"]!=obj["toString"])&&(_f1["toString"]!=_f2["toString"])){
-obj.toString=_f1.toString;
-}
-return obj;
-};
-dojo.lang.mixin=function(obj,_f5){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(obj,arguments[i]);
-}
-return obj;
-};
-dojo.lang.extend=function(_f8,_f9){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_f8.prototype,arguments[i]);
-}
-return _f8;
-};
-dojo.inherits=dojo.lang.inherits;
-dojo.mixin=dojo.lang.mixin;
-dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_fc,_fd,_fe,_ff){
-if(!dojo.lang.isArrayLike(_fc)&&dojo.lang.isArrayLike(_fd)){
-dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var temp=_fc;
-_fc=_fd;
-_fd=temp;
-}
-var _101=dojo.lang.isString(_fc);
-if(_101){
-_fc=_fc.split("");
-}
-if(_ff){
-var step=-1;
-var i=_fc.length-1;
-var end=-1;
-}else{
-var step=1;
-var i=0;
-var end=_fc.length;
-}
-if(_fe){
-while(i!=end){
-if(_fc[i]===_fd){
-return i;
-}
-i+=step;
-}
-}else{
-while(i!=end){
-if(_fc[i]==_fd){
-return i;
-}
-i+=step;
-}
-}
-return -1;
-};
-dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_105,_106,_107){
-return dojo.lang.find(_105,_106,_107,true);
-};
-dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_108,_109){
-return dojo.lang.find(_108,_109)>-1;
-};
-dojo.lang.isObject=function(it){
-if(typeof it=="undefined"){
-return false;
-}
-return (typeof it=="object"||it===null||dojo.lang.isArray(it)||dojo.lang.isFunction(it));
-};
-dojo.lang.isArray=function(it){
-return (it&&it instanceof Array||typeof it=="array");
-};
-dojo.lang.isArrayLike=function(it){
-if((!it)||(dojo.lang.isUndefined(it))){
-return false;
-}
-if(dojo.lang.isString(it)){
-return false;
-}
-if(dojo.lang.isFunction(it)){
-return false;
-}
-if(dojo.lang.isArray(it)){
-return true;
-}
-if((it.tagName)&&(it.tagName.toLowerCase()=="form")){
-return false;
-}
-if(dojo.lang.isNumber(it.length)&&isFinite(it.length)){
-return true;
-}
-return false;
-};
-dojo.lang.isFunction=function(it){
-return (it instanceof Function||typeof it=="function");
-};
-(function(){
-if((dojo.render.html.capable)&&(dojo.render.html["safari"])){
-dojo.lang.isFunction=function(it){
-if((typeof (it)=="function")&&(it=="[object NodeList]")){
-return false;
-}
-return (it instanceof Function||typeof it=="function");
-};
-}
-})();
-dojo.lang.isString=function(it){
-return (typeof it=="string"||it instanceof String);
-};
-dojo.lang.isAlien=function(it){
-if(!it){
-return false;
-}
-return !dojo.lang.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));
-};
-dojo.lang.isBoolean=function(it){
-return (it instanceof Boolean||typeof it=="boolean");
-};
-dojo.lang.isNumber=function(it){
-return (it instanceof Number||typeof it=="number");
-};
-dojo.lang.isUndefined=function(it){
-return ((typeof (it)=="undefined")&&(it==undefined));
-};
-dojo.provide("dojo.lang.array");
-dojo.lang.mixin(dojo.lang,{has:function(obj,name){
-try{
-return typeof obj[name]!="undefined";
-}
-catch(e){
-return false;
-}
-},isEmpty:function(obj){
-if(dojo.lang.isObject(obj)){
-var tmp={};
-var _118=0;
-for(var x in obj){
-if(obj[x]&&(!tmp[x])){
-_118++;
-break;
-}
-}
-return _118==0;
-}else{
-if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
-return obj.length==0;
-}
-}
-},map:function(arr,obj,_11c){
-var _11d=dojo.lang.isString(arr);
-if(_11d){
-arr=arr.split("");
-}
-if(dojo.lang.isFunction(obj)&&(!_11c)){
-_11c=obj;
-obj=dj_global;
-}else{
-if(dojo.lang.isFunction(obj)&&_11c){
-var _11e=obj;
-obj=_11c;
-_11c=_11e;
-}
-}
-if(Array.map){
-var _11f=Array.map(arr,_11c,obj);
-}else{
-var _11f=[];
-for(var i=0;i<arr.length;++i){
-_11f.push(_11c.call(obj,arr[i]));
-}
-}
-if(_11d){
-return _11f.join("");
-}else{
-return _11f;
-}
-},reduce:function(arr,_122,obj,_124){
-var _125=_122;
-if(arguments.length==2){
-_124=_122;
-_125=arr[0];
-arr=arr.slice(1);
-}else{
-if(arguments.length==3){
-if(dojo.lang.isFunction(obj)){
-_124=obj;
-obj=null;
-}
-}else{
-if(dojo.lang.isFunction(obj)){
-var tmp=_124;
-_124=obj;
-obj=tmp;
-}
-}
-}
-var ob=obj||dj_global;
-dojo.lang.map(arr,function(val){
-_125=_124.call(ob,_125,val);
-});
-return _125;
-},forEach:function(_129,_12a,_12b){
-if(dojo.lang.isString(_129)){
-_129=_129.split("");
-}
-if(Array.forEach){
-Array.forEach(_129,_12a,_12b);
-}else{
-if(!_12b){
-_12b=dj_global;
-}
-for(var i=0,l=_129.length;i<l;i++){
-_12a.call(_12b,_129[i],i,_129);
-}
-}
-},_everyOrSome:function(_12e,arr,_130,_131){
-if(dojo.lang.isString(arr)){
-arr=arr.split("");
-}
-if(Array.every){
-return Array[_12e?"every":"some"](arr,_130,_131);
-}else{
-if(!_131){
-_131=dj_global;
-}
-for(var i=0,l=arr.length;i<l;i++){
-var _134=_130.call(_131,arr[i],i,arr);
-if(_12e&&!_134){
-return false;
-}else{
-if((!_12e)&&(_134)){
-return true;
-}
-}
-}
-return Boolean(_12e);
-}
-},every:function(arr,_136,_137){
-return this._everyOrSome(true,arr,_136,_137);
-},some:function(arr,_139,_13a){
-return this._everyOrSome(false,arr,_139,_13a);
-},filter:function(arr,_13c,_13d){
-var _13e=dojo.lang.isString(arr);
-if(_13e){
-arr=arr.split("");
-}
-var _13f;
-if(Array.filter){
-_13f=Array.filter(arr,_13c,_13d);
-}else{
-if(!_13d){
-if(arguments.length>=3){
-dojo.raise("thisObject doesn't exist!");
-}
-_13d=dj_global;
-}
-_13f=[];
-for(var i=0;i<arr.length;i++){
-if(_13c.call(_13d,arr[i],i,arr)){
-_13f.push(arr[i]);
-}
-}
-}
-if(_13e){
-return _13f.join("");
-}else{
-return _13f;
-}
-},unnest:function(){
-var out=[];
-for(var i=0;i<arguments.length;i++){
-if(dojo.lang.isArrayLike(arguments[i])){
-var add=dojo.lang.unnest.apply(this,arguments[i]);
-out=out.concat(add);
-}else{
-out.push(arguments[i]);
-}
-}
-return out;
-},toArray:function(_144,_145){
-var _146=[];
-for(var i=_145||0;i<_144.length;i++){
-_146.push(_144[i]);
-}
-return _146;
-}});
-dojo.provide("dojo.lang.extras");
-dojo.lang.setTimeout=function(func,_149){
-var _14a=window,_14b=2;
-if(!dojo.lang.isFunction(func)){
-_14a=func;
-func=_149;
-_149=arguments[2];
-_14b++;
-}
-if(dojo.lang.isString(func)){
-func=_14a[func];
-}
-var args=[];
-for(var i=_14b;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return dojo.global().setTimeout(function(){
-func.apply(_14a,args);
-},_149);
-};
-dojo.lang.clearTimeout=function(_14e){
-dojo.global().clearTimeout(_14e);
-};
-dojo.lang.getNameInObj=function(ns,item){
-if(!ns){
-ns=dj_global;
-}
-for(var x in ns){
-if(ns[x]===item){
-return new String(x);
-}
-}
-return null;
-};
-dojo.lang.shallowCopy=function(obj,deep){
-var i,ret;
-if(obj===null){
-return null;
-}
-if(dojo.lang.isObject(obj)){
-ret=new obj.constructor();
-for(i in obj){
-if(dojo.lang.isUndefined(ret[i])){
-ret[i]=deep?dojo.lang.shallowCopy(obj[i],deep):obj[i];
-}
-}
-}else{
-if(dojo.lang.isArray(obj)){
-ret=[];
-for(i=0;i<obj.length;i++){
-ret[i]=deep?dojo.lang.shallowCopy(obj[i],deep):obj[i];
-}
-}else{
-ret=obj;
-}
-}
-return ret;
-};
-dojo.lang.firstValued=function(){
-for(var i=0;i<arguments.length;i++){
-if(typeof arguments[i]!="undefined"){
-return arguments[i];
-}
-}
-return undefined;
-};
-dojo.lang.getObjPathValue=function(_157,_158,_159){
-with(dojo.parseObjPath(_157,_158,_159)){
-return dojo.evalProp(prop,obj,_159);
-}
-};
-dojo.lang.setObjPathValue=function(_15a,_15b,_15c,_15d){
-dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
-if(arguments.length<4){
-_15d=true;
-}
-with(dojo.parseObjPath(_15a,_15c,_15d)){
-if(obj&&(_15d||(prop in obj))){
-obj[prop]=_15b;
-}
-}
-};
-dojo.provide("dojo.lang.func");
-dojo.lang.hitch=function(_15e,_15f){
-var args=[];
-for(var x=2;x<arguments.length;x++){
-args.push(arguments[x]);
-}
-var fcn=(dojo.lang.isString(_15f)?_15e[_15f]:_15f)||function(){
-};
-return function(){
-var ta=args.concat([]);
-for(var x=0;x<arguments.length;x++){
-ta.push(arguments[x]);
-}
-return fcn.apply(_15e,ta);
-};
-};
-dojo.lang.anonCtr=0;
-dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_165,_166,_167){
-var nso=(_166||dojo.lang.anon);
-if((_167)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
-for(var x in nso){
-try{
-if(nso[x]===_165){
-return x;
-}
-}
-catch(e){
-}
-}
-}
-var ret="__"+dojo.lang.anonCtr++;
-while(typeof nso[ret]!="undefined"){
-ret="__"+dojo.lang.anonCtr++;
-}
-nso[ret]=_165;
-return ret;
-};
-dojo.lang.forward=function(_16b){
-return function(){
-return this[_16b].apply(this,arguments);
-};
-};
-dojo.lang.curry=function(_16c,func){
-var _16e=[];
-_16c=_16c||dj_global;
-if(dojo.lang.isString(func)){
-func=_16c[func];
-}
-for(var x=2;x<arguments.length;x++){
-_16e.push(arguments[x]);
-}
-var _170=(func["__preJoinArity"]||func.length)-_16e.length;
-function gather(_171,_172,_173){
-var _174=_173;
-var _175=_172.slice(0);
-for(var x=0;x<_171.length;x++){
-_175.push(_171[x]);
-}
-_173=_173-_171.length;
-if(_173<=0){
-var res=func.apply(_16c,_175);
-_173=_174;
-return res;
-}else{
-return function(){
-return gather(arguments,_175,_173);
-};
-}
-}
-return gather([],_16e,_170);
-};
-dojo.lang.curryArguments=function(_178,func,args,_17b){
-var _17c=[];
-var x=_17b||0;
-for(x=_17b;x<args.length;x++){
-_17c.push(args[x]);
-}
-return dojo.lang.curry.apply(dojo.lang,[_178,func].concat(_17c));
-};
-dojo.lang.tryThese=function(){
-for(var x=0;x<arguments.length;x++){
-try{
-if(typeof arguments[x]=="function"){
-var ret=(arguments[x]());
-if(ret){
-return ret;
-}
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-dojo.lang.delayThese=function(farr,cb,_182,_183){
-if(!farr.length){
-if(typeof _183=="function"){
-_183();
-}
-return;
-}
-if((typeof _182=="undefined")&&(typeof cb=="number")){
-_182=cb;
-cb=function(){
-};
-}else{
-if(!cb){
-cb=function(){
-};
-if(!_182){
-_182=0;
-}
-}
-}
-setTimeout(function(){
-(farr.shift())();
-cb();
-dojo.lang.delayThese(farr,cb,_182,_183);
-},_182);
-};
-dojo.provide("dojo.event.common");
-dojo.event=new function(){
-this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_185){
-var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1};
-switch(args.length){
-case 0:
-return;
-case 1:
-return;
-case 2:
-ao.srcFunc=args[0];
-ao.adviceFunc=args[1];
-break;
-case 3:
-if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isString(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-}else{
-if((dl.isString(args[1]))&&(dl.isString(args[2]))){
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-}else{
-if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isFunction(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-var _188=dl.nameAnonFunc(args[2],ao.adviceObj,_185);
-ao.adviceFunc=_188;
-}else{
-if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
-ao.adviceType="after";
-ao.srcObj=dj_global;
-var _188=dl.nameAnonFunc(args[0],ao.srcObj,_185);
-ao.srcFunc=_188;
-ao.adviceObj=args[1];
-ao.adviceFunc=args[2];
-}
-}
-}
-}
-break;
-case 4:
-if((dl.isObject(args[0]))&&(dl.isObject(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isString(args[1]))&&(dl.isObject(args[2]))){
-ao.adviceType=args[0];
-ao.srcObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
-ao.adviceType=args[0];
-ao.srcObj=dj_global;
-var _188=dl.nameAnonFunc(args[1],dj_global,_185);
-ao.srcFunc=_188;
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-var _188=dl.nameAnonFunc(args[3],dj_global,_185);
-ao.adviceObj=dj_global;
-ao.adviceFunc=_188;
-}else{
-if(dl.isObject(args[1])){
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=dj_global;
-ao.adviceFunc=args[3];
-}else{
-if(dl.isObject(args[2])){
-ao.srcObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-ao.srcObj=ao.adviceObj=ao.aroundObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-ao.aroundFunc=args[3];
-}
-}
-}
-}
-}
-}
-break;
-case 6:
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=args[3];
-ao.adviceFunc=args[4];
-ao.aroundFunc=args[5];
-ao.aroundObj=dj_global;
-break;
-default:
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=args[3];
-ao.adviceFunc=args[4];
-ao.aroundObj=args[5];
-ao.aroundFunc=args[6];
-ao.once=args[7];
-ao.delay=args[8];
-ao.rate=args[9];
-ao.adviceMsg=args[10];
-ao.maxCalls=(!isNaN(parseInt(args[11])))?args[11]:-1;
-break;
-}
-if(dl.isFunction(ao.aroundFunc)){
-var _188=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_185);
-ao.aroundFunc=_188;
-}
-if(dl.isFunction(ao.srcFunc)){
-ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
-}
-if(dl.isFunction(ao.adviceFunc)){
-ao.adviceFunc=dl.getNameInObj(ao.adviceObj,ao.adviceFunc);
-}
-if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){
-ao.aroundFunc=dl.getNameInObj(ao.aroundObj,ao.aroundFunc);
-}
-if(!ao.srcObj){
-dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc);
-}
-if(!ao.adviceObj){
-dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc);
-}
-if(!ao.adviceFunc){
-dojo.debug("bad adviceFunc for srcFunc: "+ao.srcFunc);
-dojo.debugShallow(ao);
-}
-return ao;
-}
-this.connect=function(){
-if(arguments.length==1){
-var ao=arguments[0];
-}else{
-var ao=interpolateArgs(arguments,true);
-}
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
-if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _18a={};
-for(var x in ao){
-_18a[x]=ao[x];
-}
-var mjps=[];
-dojo.lang.forEach(ao.srcObj,function(src){
-if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
-src=dojo.byId(src);
-}
-_18a.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_18a));
-});
-return mjps;
-}
-var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc);
-if(ao.adviceFunc){
-var mjp2=dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj,ao.adviceFunc);
-}
-mjp.kwAddAdvice(ao);
-return mjp;
-};
-this.log=function(a1,a2){
-var _192;
-if((arguments.length==1)&&(typeof a1=="object")){
-_192=a1;
-}else{
-_192={srcObj:a1,srcFunc:a2};
-}
-_192.adviceFunc=function(){
-var _193=[];
-for(var x=0;x<arguments.length;x++){
-_193.push(arguments[x]);
-}
-dojo.debug("("+_192.srcObj+")."+_192.srcFunc,":",_193.join(", "));
-};
-this.kwConnect(_192);
-};
-this.connectBefore=function(){
-var args=["before"];
-for(var i=0;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return this.connect.apply(this,args);
-};
-this.connectAround=function(){
-var args=["around"];
-for(var i=0;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return this.connect.apply(this,args);
-};
-this.connectOnce=function(){
-var ao=interpolateArgs(arguments,true);
-ao.once=true;
-return this.connect(ao);
-};
-this.connectRunOnce=function(){
-var ao=interpolateArgs(arguments,true);
-ao.maxCalls=1;
-return this.connect(ao);
-};
-this._kwConnectImpl=function(_19b,_19c){
-var fn=(_19c)?"disconnect":"connect";
-if(typeof _19b["srcFunc"]=="function"){
-_19b.srcObj=_19b["srcObj"]||dj_global;
-var _19e=dojo.lang.nameAnonFunc(_19b.srcFunc,_19b.srcObj,true);
-_19b.srcFunc=_19e;
-}
-if(typeof _19b["adviceFunc"]=="function"){
-_19b.adviceObj=_19b["adviceObj"]||dj_global;
-var _19e=dojo.lang.nameAnonFunc(_19b.adviceFunc,_19b.adviceObj,true);
-_19b.adviceFunc=_19e;
-}
-_19b.srcObj=_19b["srcObj"]||dj_global;
-_19b.adviceObj=_19b["adviceObj"]||_19b["targetObj"]||dj_global;
-_19b.adviceFunc=_19b["adviceFunc"]||_19b["targetFunc"];
-return dojo.event[fn](_19b);
-};
-this.kwConnect=function(_19f){
-return this._kwConnectImpl(_19f,false);
-};
-this.disconnect=function(){
-if(arguments.length==1){
-var ao=arguments[0];
-}else{
-var ao=interpolateArgs(arguments,true);
-}
-if(!ao.adviceFunc){
-return;
-}
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.disconnect(ao);
-}
-ao.srcFunc="onkeypress";
-}
-if(!ao.srcObj[ao.srcFunc]){
-return null;
-}
-var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc,true);
-mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
-return mjp;
-};
-this.kwDisconnect=function(_1a2){
-return this._kwConnectImpl(_1a2,true);
-};
-};
-dojo.event.MethodInvocation=function(_1a3,obj,args){
-this.jp_=_1a3;
-this.object=obj;
-this.args=[];
-for(var x=0;x<args.length;x++){
-this.args[x]=args[x];
-}
-this.around_index=-1;
-};
-dojo.event.MethodInvocation.prototype.proceed=function(){
-this.around_index++;
-if(this.around_index>=this.jp_.around.length){
-return this.jp_.object[this.jp_.methodname].apply(this.jp_.object,this.args);
-}else{
-var ti=this.jp_.around[this.around_index];
-var mobj=ti[0]||dj_global;
-var meth=ti[1];
-return mobj[meth].call(mobj,this);
-}
-};
-dojo.event.MethodJoinPoint=function(obj,_1ab){
-this.object=obj||dj_global;
-this.methodname=_1ab;
-this.methodfunc=this.object[_1ab];
-this.squelch=false;
-};
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_1ad){
-if(!obj){
-obj=dj_global;
-}
-var ofn=obj[_1ad];
-if(!ofn){
-ofn=obj[_1ad]=function(){
-};
-if(!obj[_1ad]){
-dojo.raise("Cannot set do-nothing method on that object "+_1ad);
-}
-}else{
-if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
-return null;
-}
-}
-var _1af=_1ad+"$joinpoint";
-var _1b0=_1ad+"$joinpoint$method";
-var _1b1=obj[_1af];
-if(!_1b1){
-var _1b2=false;
-if(dojo.event["browser"]){
-if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_1b2=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_1af,_1b0,_1ad]);
-}
-}
-var _1b3=ofn.length;
-obj[_1b0]=ofn;
-_1b1=obj[_1af]=new dojo.event.MethodJoinPoint(obj,_1b0);
-if(!_1b2){
-obj[_1ad]=function(){
-return _1b1.run.apply(_1b1,arguments);
-};
-}else{
-obj[_1ad]=function(){
-var args=[];
-if(!arguments.length){
-var evt=null;
-try{
-if(obj.ownerDocument){
-evt=obj.ownerDocument.parentWindow.event;
-}else{
-if(obj.documentElement){
-evt=obj.documentElement.ownerDocument.parentWindow.event;
-}else{
-if(obj.event){
-evt=obj.event;
-}else{
-evt=window.event;
-}
-}
-}
-}
-catch(e){
-evt=window.event;
-}
-if(evt){
-args.push(dojo.event.browser.fixEvent(evt,this));
-}
-}else{
-for(var x=0;x<arguments.length;x++){
-if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
-args.push(dojo.event.browser.fixEvent(arguments[x],this));
-}else{
-args.push(arguments[x]);
-}
-}
-}
-return _1b1.run.apply(_1b1,args);
-};
-}
-obj[_1ad].__preJoinArity=_1b3;
-}
-return _1b1;
-};
-dojo.lang.extend(dojo.event.MethodJoinPoint,{squelch:false,unintercept:function(){
-this.object[this.methodname]=this.methodfunc;
-this.before=[];
-this.after=[];
-this.around=[];
-},disconnect:dojo.lang.forward("unintercept"),run:function(){
-var obj=this.object||dj_global;
-var args=arguments;
-var _1b9=[];
-for(var x=0;x<args.length;x++){
-_1b9[x]=args[x];
-}
-var _1bb=function(marr){
-if(!marr){
-dojo.debug("Null argument to unrollAdvice()");
-return;
-}
-var _1bd=marr[0]||dj_global;
-var _1be=marr[1];
-if(!_1bd[_1be]){
-dojo.raise("function \""+_1be+"\" does not exist on \""+_1bd+"\"");
-}
-var _1bf=marr[2]||dj_global;
-var _1c0=marr[3];
-var msg=marr[6];
-var _1c2=marr[7];
-if(_1c2>-1){
-if(_1c2==0){
-return;
-}
-marr[7]--;
-}
-var _1c3;
-var to={args:[],jp_:this,object:obj,proceed:function(){
-return _1bd[_1be].apply(_1bd,to.args);
-}};
-to.args=_1b9;
-var _1c5=parseInt(marr[4]);
-var _1c6=((!isNaN(_1c5))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
-if(marr[5]){
-var rate=parseInt(marr[5]);
-var cur=new Date();
-var _1c9=false;
-if((marr["last"])&&((cur-marr.last)<=rate)){
-if(dojo.event._canTimeout){
-if(marr["delayTimer"]){
-clearTimeout(marr.delayTimer);
-}
-var tod=parseInt(rate*2);
-var mcpy=dojo.lang.shallowCopy(marr);
-marr.delayTimer=setTimeout(function(){
-mcpy[5]=0;
-_1bb(mcpy);
-},tod);
-}
-return;
-}else{
-marr.last=cur;
-}
-}
-if(_1c0){
-_1bf[_1c0].call(_1bf,to);
-}else{
-if((_1c6)&&((dojo.render.html)||(dojo.render.svg))){
-dj_global["setTimeout"](function(){
-if(msg){
-_1bd[_1be].call(_1bd,to);
-}else{
-_1bd[_1be].apply(_1bd,args);
-}
-},_1c5);
-}else{
-if(msg){
-_1bd[_1be].call(_1bd,to);
-}else{
-_1bd[_1be].apply(_1bd,args);
-}
-}
-}
-};
-var _1cc=function(){
-if(this.squelch){
-try{
-return _1bb.apply(this,arguments);
-}
-catch(e){
-dojo.debug(e);
-}
-}else{
-return _1bb.apply(this,arguments);
-}
-};
-if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_1cc);
-}
-var _1cd;
-try{
-if((this["around"])&&(this.around.length>0)){
-var mi=new dojo.event.MethodInvocation(this,obj,args);
-_1cd=mi.proceed();
-}else{
-if(this.methodfunc){
-_1cd=this.object[this.methodname].apply(this.object,args);
-}
-}
-}
-catch(e){
-if(!this.squelch){
-dojo.debug(e,"when calling",this.methodname,"on",this.object,"with arguments",args);
-dojo.raise(e);
-}
-}
-if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_1cc);
-}
-return (this.methodfunc)?_1cd:null;
-},getArr:function(kind){
-var type="after";
-if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
-type="before";
-}else{
-if(kind=="around"){
-type="around";
-}
-}
-if(!this[type]){
-this[type]=[];
-}
-return this[type];
-},kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"],args["maxCalls"]);
-},addAdvice:function(_1d2,_1d3,_1d4,_1d5,_1d6,_1d7,once,_1d9,rate,_1db,_1dc){
-var arr=this.getArr(_1d6);
-if(!arr){
-dojo.raise("bad this: "+this);
-}
-var ao=[_1d2,_1d3,_1d4,_1d5,_1d9,rate,_1db,_1dc];
-if(once){
-if(this.hasAdvice(_1d2,_1d3,_1d6,arr)>=0){
-return;
-}
-}
-if(_1d7=="first"){
-arr.unshift(ao);
-}else{
-arr.push(ao);
-}
-},hasAdvice:function(_1df,_1e0,_1e1,arr){
-if(!arr){
-arr=this.getArr(_1e1);
-}
-var ind=-1;
-for(var x=0;x<arr.length;x++){
-var aao=(typeof _1e0=="object")?(new String(_1e0)).toString():_1e0;
-var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_1df)&&(a1o==aao)){
-ind=x;
-}
-}
-return ind;
-},removeAdvice:function(_1e7,_1e8,_1e9,once){
-var arr=this.getArr(_1e9);
-var ind=this.hasAdvice(_1e7,_1e8,_1e9,arr);
-if(ind==-1){
-return false;
-}
-while(ind!=-1){
-arr.splice(ind,1);
-if(once){
-break;
-}
-ind=this.hasAdvice(_1e7,_1e8,_1e9,arr);
-}
-return true;
-}});
-dojo.provide("dojo.event.browser");
-dojo._ie_clobber=new function(){
-this.clobberNodes=[];
-function nukeProp(node,prop){
-try{
-node[prop]=null;
-}
-catch(e){
-}
-try{
-delete node[prop];
-}
-catch(e){
-}
-try{
-node.removeAttribute(prop);
-}
-catch(e){
-}
-}
-this.clobber=function(_1ef){
-var na;
-var tna;
-if(_1ef){
-tna=_1ef.all||_1ef.getElementsByTagName("*");
-na=[_1ef];
-for(var x=0;x<tna.length;x++){
-if(tna[x]["__doClobber__"]){
-na.push(tna[x]);
-}
-}
-}else{
-try{
-window.onload=null;
-}
-catch(e){
-}
-na=(this.clobberNodes.length)?this.clobberNodes:document.all;
-}
-tna=null;
-var _1f3={};
-for(var i=na.length-1;i>=0;i=i-1){
-var el=na[i];
-try{
-if(el&&el["__clobberAttrs__"]){
-for(var j=0;j<el.__clobberAttrs__.length;j++){
-nukeProp(el,el.__clobberAttrs__[j]);
-}
-nukeProp(el,"__clobberAttrs__");
-nukeProp(el,"__doClobber__");
-}
-}
-catch(e){
-}
-}
-na=null;
-};
-};
-if(dojo.render.html.ie){
-dojo.addOnUnload(function(){
-dojo._ie_clobber.clobber();
-try{
-if((dojo["widget"])&&(dojo.widget["manager"])){
-dojo.widget.manager.destroyAll();
-}
-}
-catch(e){
-}
-if(dojo.widget){
-for(var name in dojo.widget._templateCache){
-if(dojo.widget._templateCache[name].node){
-dojo.dom.destroyNode(dojo.widget._templateCache[name].node);
-dojo.widget._templateCache[name].node=null;
-delete dojo.widget._templateCache[name].node;
-}
-}
-}
-try{
-window.onload=null;
-}
-catch(e){
-}
-try{
-window.onunload=null;
-}
-catch(e){
-}
-dojo._ie_clobber.clobberNodes=[];
-});
-}
-dojo.event.browser=new function(){
-var _1f8=0;
-this.normalizedEventName=function(_1f9){
-switch(_1f9){
-case "CheckboxStateChange":
-case "DOMAttrModified":
-case "DOMMenuItemActive":
-case "DOMMenuItemInactive":
-case "DOMMouseScroll":
-case "DOMNodeInserted":
-case "DOMNodeRemoved":
-case "RadioStateChange":
-return _1f9;
-break;
-default:
-var lcn=_1f9.toLowerCase();
-return (lcn.indexOf("on")==0)?lcn.substr(2):lcn;
-break;
-}
-};
-this.clean=function(node){
-if(dojo.render.html.ie){
-dojo._ie_clobber.clobber(node);
-}
-};
-this.addClobberNode=function(node){
-if(!dojo.render.html.ie){
-return;
-}
-if(!node["__doClobber__"]){
-node.__doClobber__=true;
-dojo._ie_clobber.clobberNodes.push(node);
-node.__clobberAttrs__=[];
-}
-};
-this.addClobberNodeAttrs=function(node,_1fe){
-if(!dojo.render.html.ie){
-return;
-}
-this.addClobberNode(node);
-for(var x=0;x<_1fe.length;x++){
-node.__clobberAttrs__.push(_1fe[x]);
-}
-};
-this.removeListener=function(node,_201,fp,_203){
-if(!_203){
-var _203=false;
-}
-_201=dojo.event.browser.normalizedEventName(_201);
-if(_201=="key"){
-if(dojo.render.html.ie){
-this.removeListener(node,"onkeydown",fp,_203);
-}
-_201="keypress";
-}
-if(node.removeEventListener){
-node.removeEventListener(_201,fp,_203);
-}
-};
-this.addListener=function(node,_205,fp,_207,_208){
-if(!node){
-return;
-}
-if(!_207){
-var _207=false;
-}
-_205=dojo.event.browser.normalizedEventName(_205);
-if(_205=="key"){
-if(dojo.render.html.ie){
-this.addListener(node,"onkeydown",fp,_207,_208);
-}
-_205="keypress";
-}
-if(!_208){
-var _209=function(evt){
-if(!evt){
-evt=window.event;
-}
-var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_207){
-dojo.event.browser.stopEvent(evt);
-}
-return ret;
-};
-}else{
-_209=fp;
-}
-if(node.addEventListener){
-node.addEventListener(_205,_209,_207);
-return _209;
-}else{
-_205="on"+_205;
-if(typeof node[_205]=="function"){
-var _20c=node[_205];
-node[_205]=function(e){
-_20c(e);
-return _209(e);
-};
-}else{
-node[_205]=_209;
-}
-if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_205]);
-}
-return _209;
-}
-};
-this.isEvent=function(obj){
-return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
-};
-this.currentEvent=null;
-this.callListener=function(_20f,_210){
-if(typeof _20f!="function"){
-dojo.raise("listener not a function: "+_20f);
-}
-dojo.event.browser.currentEvent.currentTarget=_210;
-return _20f.call(_210,dojo.event.browser.currentEvent);
-};
-this._stopPropagation=function(){
-dojo.event.browser.currentEvent.cancelBubble=true;
-};
-this._preventDefault=function(){
-dojo.event.browser.currentEvent.returnValue=false;
-};
-this.keys={KEY_BACKSPACE:8,KEY_TAB:9,KEY_CLEAR:12,KEY_ENTER:13,KEY_SHIFT:16,KEY_CTRL:17,KEY_ALT:18,KEY_PAUSE:19,KEY_CAPS_LOCK:20,KEY_ESCAPE:27,KEY_SPACE:32,KEY_PAGE_UP:33,KEY_PAGE_DOWN:34,KEY_END:35,KEY_HOME:36,KEY_LEFT_ARROW:37,KEY_UP_ARROW:38,KEY_RIGHT_ARROW:39,KEY_DOWN_ARROW:40,KEY_INSERT:45,KEY_DELETE:46,KEY_HELP:47,KEY_LEFT_WINDOW:91,KEY_RIGHT_WINDOW:92,KEY_SELECT:93,KEY_NUMPAD_0:96,KEY_NUMPAD_1:97,KEY_NUMPAD_2:98,KEY_NUMPAD_3:99,KEY_NUMPAD_4:100,KEY_NUMPAD_5:101,KEY_NUMPAD_6:102,KEY_NUMPAD_7:103,KEY_NUMPAD_8:104,KEY_NUMPAD_9:105,KEY_NUMPAD_MULTIPLY:106,KEY_NUMPAD_PLUS:107,KEY_NUMPAD_ENTER:108,KEY_NUMPAD_MINUS:109,KEY_NUMPAD_PERIOD:110,KEY_NUMPAD_DIVIDE:111,KEY_F1:112,KEY_F2:113,KEY_F3:114,KEY_F4:115,KEY_F5:116,KEY_F6:117,KEY_F7:118,KEY_F8:119,KEY_F9:120,KEY_F10:121,KEY_F11:122,KEY_F12:123,KEY_F13:124,KEY_F14:125,KEY_F15:126,KEY_NUM_LOCK:144,KEY_SCROLL_LOCK:145};
-this.revKeys=[];
-for(var key in this.keys){
-this.revKeys[this.keys[key]]=key;
-}
-this.fixEvent=function(evt,_213){
-if(!evt){
-if(window["event"]){
-evt=window.event;
-}
-}
-if((evt["type"])&&(evt["type"].indexOf("key")==0)){
-evt.keys=this.revKeys;
-for(var key in this.keys){
-evt[key]=this.keys[key];
-}
-if(evt["type"]=="keydown"&&dojo.render.html.ie){
-switch(evt.keyCode){
-case evt.KEY_SHIFT:
-case evt.KEY_CTRL:
-case evt.KEY_ALT:
-case evt.KEY_CAPS_LOCK:
-case evt.KEY_LEFT_WINDOW:
-case evt.KEY_RIGHT_WINDOW:
-case evt.KEY_SELECT:
-case evt.KEY_NUM_LOCK:
-case evt.KEY_SCROLL_LOCK:
-case evt.KEY_NUMPAD_0:
-case evt.KEY_NUMPAD_1:
-case evt.KEY_NUMPAD_2:
-case evt.KEY_NUMPAD_3:
-case evt.KEY_NUMPAD_4:
-case evt.KEY_NUMPAD_5:
-case evt.KEY_NUMPAD_6:
-case evt.KEY_NUMPAD_7:
-case evt.KEY_NUMPAD_8:
-case evt.KEY_NUMPAD_9:
-case evt.KEY_NUMPAD_PERIOD:
-break;
-case evt.KEY_NUMPAD_MULTIPLY:
-case evt.KEY_NUMPAD_PLUS:
-case evt.KEY_NUMPAD_ENTER:
-case evt.KEY_NUMPAD_MINUS:
-case evt.KEY_NUMPAD_DIVIDE:
-break;
-case evt.KEY_PAUSE:
-case evt.KEY_TAB:
-case evt.KEY_BACKSPACE:
-case evt.KEY_ENTER:
-case evt.KEY_ESCAPE:
-case evt.KEY_PAGE_UP:
-case evt.KEY_PAGE_DOWN:
-case evt.KEY_END:
-case evt.KEY_HOME:
-case evt.KEY_LEFT_ARROW:
-case evt.KEY_UP_ARROW:
-case evt.KEY_RIGHT_ARROW:
-case evt.KEY_DOWN_ARROW:
-case evt.KEY_INSERT:
-case evt.KEY_DELETE:
-case evt.KEY_F1:
-case evt.KEY_F2:
-case evt.KEY_F3:
-case evt.KEY_F4:
-case evt.KEY_F5:
-case evt.KEY_F6:
-case evt.KEY_F7:
-case evt.KEY_F8:
-case evt.KEY_F9:
-case evt.KEY_F10:
-case evt.KEY_F11:
-case evt.KEY_F12:
-case evt.KEY_F12:
-case evt.KEY_F13:
-case evt.KEY_F14:
-case evt.KEY_F15:
-case evt.KEY_CLEAR:
-case evt.KEY_HELP:
-evt.key=evt.keyCode;
-break;
-default:
-if(evt.ctrlKey||evt.altKey){
-var _215=evt.keyCode;
-if(_215>=65&&_215<=90&&evt.shiftKey==false){
-_215+=32;
-}
-if(_215>=1&&_215<=26&&evt.ctrlKey){
-_215+=96;
-}
-evt.key=String.fromCharCode(_215);
-}
-}
-}else{
-if(evt["type"]=="keypress"){
-if(dojo.render.html.opera){
-if(evt.which==0){
-evt.key=evt.keyCode;
-}else{
-if(evt.which>0){
-switch(evt.which){
-case evt.KEY_SHIFT:
-case evt.KEY_CTRL:
-case evt.KEY_ALT:
-case evt.KEY_CAPS_LOCK:
-case evt.KEY_NUM_LOCK:
-case evt.KEY_SCROLL_LOCK:
-break;
-case evt.KEY_PAUSE:
-case evt.KEY_TAB:
-case evt.KEY_BACKSPACE:
-case evt.KEY_ENTER:
-case evt.KEY_ESCAPE:
-evt.key=evt.which;
-break;
-default:
-var _215=evt.which;
-if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_215+=32;
-}
-evt.key=String.fromCharCode(_215);
-}
-}
-}
-}else{
-if(dojo.render.html.ie){
-if(!evt.ctrlKey&&!evt.altKey&&evt.keyCode>=evt.KEY_SPACE){
-evt.key=String.fromCharCode(evt.keyCode);
-}
-}else{
-if(dojo.render.html.safari){
-switch(evt.keyCode){
-case 25:
-evt.key=evt.KEY_TAB;
-evt.shift=true;
-break;
-case 63232:
-evt.key=evt.KEY_UP_ARROW;
-break;
-case 63233:
-evt.key=evt.KEY_DOWN_ARROW;
-break;
-case 63234:
-evt.key=evt.KEY_LEFT_ARROW;
-break;
-case 63235:
-evt.key=evt.KEY_RIGHT_ARROW;
-break;
-case 63236:
-evt.key=evt.KEY_F1;
-break;
-case 63237:
-evt.key=evt.KEY_F2;
-break;
-case 63238:
-evt.key=evt.KEY_F3;
-break;
-case 63239:
-evt.key=evt.KEY_F4;
-break;
-case 63240:
-evt.key=evt.KEY_F5;
-break;
-case 63241:
-evt.key=evt.KEY_F6;
-break;
-case 63242:
-evt.key=evt.KEY_F7;
-break;
-case 63243:
-evt.key=evt.KEY_F8;
-break;
-case 63244:
-evt.key=evt.KEY_F9;
-break;
-case 63245:
-evt.key=evt.KEY_F10;
-break;
-case 63246:
-evt.key=evt.KEY_F11;
-break;
-case 63247:
-evt.key=evt.KEY_F12;
-break;
-case 63250:
-evt.key=evt.KEY_PAUSE;
-break;
-case 63272:
-evt.key=evt.KEY_DELETE;
-break;
-case 63273:
-evt.key=evt.KEY_HOME;
-break;
-case 63275:
-evt.key=evt.KEY_END;
-break;
-case 63276:
-evt.key=evt.KEY_PAGE_UP;
-break;
-case 63277:
-evt.key=evt.KEY_PAGE_DOWN;
-break;
-case 63302:
-evt.key=evt.KEY_INSERT;
-break;
-case 63248:
-case 63249:
-case 63289:
-break;
-default:
-evt.key=evt.charCode>=evt.KEY_SPACE?String.fromCharCode(evt.charCode):evt.keyCode;
-}
-}else{
-evt.key=evt.charCode>0?String.fromCharCode(evt.charCode):evt.keyCode;
-}
-}
-}
-}
-}
-}
-if(dojo.render.html.ie){
-if(!evt.target){
-evt.target=evt.srcElement;
-}
-if(!evt.currentTarget){
-evt.currentTarget=(_213?_213:evt.srcElement);
-}
-if(!evt.layerX){
-evt.layerX=evt.offsetX;
-}
-if(!evt.layerY){
-evt.layerY=evt.offsetY;
-}
-var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _217=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
-if(!evt.pageX){
-evt.pageX=evt.clientX+(_217.scrollLeft||0);
-}
-if(!evt.pageY){
-evt.pageY=evt.clientY+(_217.scrollTop||0);
-}
-if(evt.type=="mouseover"){
-evt.relatedTarget=evt.fromElement;
-}
-if(evt.type=="mouseout"){
-evt.relatedTarget=evt.toElement;
-}
-this.currentEvent=evt;
-evt.callListener=this.callListener;
-evt.stopPropagation=this._stopPropagation;
-evt.preventDefault=this._preventDefault;
-}
-return evt;
-};
-this.stopEvent=function(evt){
-if(window.event){
-evt.cancelBubble=true;
-evt.returnValue=false;
-}else{
-evt.preventDefault();
-evt.stopPropagation();
-}
-};
-};
-dojo.provide("dojo.string.common");
-dojo.string.trim=function(str,wh){
-if(!str.replace){
-return str;
-}
-if(!str.length){
-return str;
-}
-var re=(wh>0)?(/^\s+/):(wh<0)?(/\s+$/):(/^\s+|\s+$/g);
-return str.replace(re,"");
-};
-dojo.string.trimStart=function(str){
-return dojo.string.trim(str,1);
-};
-dojo.string.trimEnd=function(str){
-return dojo.string.trim(str,-1);
-};
-dojo.string.repeat=function(str,_21f,_220){
-var out="";
-for(var i=0;i<_21f;i++){
-out+=str;
-if(_220&&i<_21f-1){
-out+=_220;
-}
-}
-return out;
-};
-dojo.string.pad=function(str,len,c,dir){
-var out=String(str);
-if(!c){
-c="0";
-}
-if(!dir){
-dir=1;
-}
-while(out.length<len){
-if(dir>0){
-out=c+out;
-}else{
-out+=c;
-}
-}
-return out;
-};
-dojo.string.padLeft=function(str,len,c){
-return dojo.string.pad(str,len,c,1);
-};
-dojo.string.padRight=function(str,len,c){
-return dojo.string.pad(str,len,c,-1);
-};
-dojo.provide("dojo.string");
-dojo.provide("dojo.io.common");
-dojo.io.transports=[];
-dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_22f,_230,_231){
-if((arguments.length==1)&&(arguments[0].constructor==Object)){
-this.fromKwArgs(arguments[0]);
-}else{
-this.url=url;
-if(_22f){
-this.mimetype=_22f;
-}
-if(_230){
-this.transport=_230;
-}
-if(arguments.length>=4){
-this.changeUrl=_231;
-}
-}
-};
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,jsonFilter:function(_232){
-if((this.mimetype=="text/json-comment-filtered")||(this.mimetype=="application/json-comment-filtered")){
-var _233=_232.indexOf("/*");
-var _234=_232.lastIndexOf("*/");
-if((_233==-1)||(_234==-1)){
-dojo.debug("your JSON wasn't comment filtered!");
-return "";
-}
-return _232.substring(_233+2,_234);
-}
-dojo.debug("please consider using a mimetype of text/json-comment-filtered to avoid potential security issues with JSON endpoints");
-return _232;
-},load:function(type,data,_237,_238){
-},error:function(type,_23a,_23b,_23c){
-},timeout:function(type,_23e,_23f,_240){
-},handle:function(type,data,_243,_244){
-},timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_245){
-if(_245["url"]){
-_245.url=_245.url.toString();
-}
-if(_245["formNode"]){
-_245.formNode=dojo.byId(_245.formNode);
-}
-if(!_245["method"]&&_245["formNode"]&&_245["formNode"].method){
-_245.method=_245["formNode"].method;
-}
-if(!_245["handle"]&&_245["handler"]){
-_245.handle=_245.handler;
-}
-if(!_245["load"]&&_245["loaded"]){
-_245.load=_245.loaded;
-}
-if(!_245["changeUrl"]&&_245["changeURL"]){
-_245.changeUrl=_245.changeURL;
-}
-_245.encoding=dojo.lang.firstValued(_245["encoding"],djConfig["bindEncoding"],"");
-_245.sendTransport=dojo.lang.firstValued(_245["sendTransport"],djConfig["ioSendTransport"],false);
-var _246=dojo.lang.isFunction;
-for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
-var fn=dojo.io.hdlrFuncNames[x];
-if(_245[fn]&&_246(_245[fn])){
-continue;
-}
-if(_245["handle"]&&_246(_245["handle"])){
-_245[fn]=_245.handle;
-}
-}
-dojo.lang.mixin(this,_245);
-}});
-dojo.io.Error=function(msg,type,num){
-this.message=msg;
-this.type=type||"unknown";
-this.number=num||0;
-};
-dojo.io.transports.addTransport=function(name){
-this.push(name);
-this[name]=dojo.io[name];
-};
-dojo.io.bind=function(_24d){
-if(!(_24d instanceof dojo.io.Request)){
-try{
-_24d=new dojo.io.Request(_24d);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _24e="";
-if(_24d["transport"]){
-_24e=_24d["transport"];
-if(!this[_24e]){
-dojo.io.sendBindError(_24d,"No dojo.io.bind() transport with name '"+_24d["transport"]+"'.");
-return _24d;
-}
-if(!this[_24e].canHandle(_24d)){
-dojo.io.sendBindError(_24d,"dojo.io.bind() transport with name '"+_24d["transport"]+"' cannot handle this type of request.");
-return _24d;
-}
-}else{
-for(var x=0;x<dojo.io.transports.length;x++){
-var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_24d))){
-_24e=tmp;
-break;
-}
-}
-if(_24e==""){
-dojo.io.sendBindError(_24d,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _24d;
-}
-}
-this[_24e].bind(_24d);
-_24d.bindSuccess=true;
-return _24d;
-};
-dojo.io.sendBindError=function(_251,_252){
-if((typeof _251.error=="function"||typeof _251.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _253=new dojo.io.Error(_252);
-setTimeout(function(){
-_251[(typeof _251.error=="function")?"error":"handle"]("error",_253,null,_251);
-},50);
-}else{
-dojo.raise(_252);
-}
-};
-dojo.io.queueBind=function(_254){
-if(!(_254 instanceof dojo.io.Request)){
-try{
-_254=new dojo.io.Request(_254);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _255=_254.load;
-_254.load=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_255.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-var _257=_254.error;
-_254.error=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_257.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-dojo.io._bindQueue.push(_254);
-dojo.io._dispatchNextQueueBind();
-return _254;
-};
-dojo.io._dispatchNextQueueBind=function(){
-if(!dojo.io._queueBindInFlight){
-dojo.io._queueBindInFlight=true;
-if(dojo.io._bindQueue.length>0){
-dojo.io.bind(dojo.io._bindQueue.shift());
-}else{
-dojo.io._queueBindInFlight=false;
-}
-}
-};
-dojo.io._bindQueue=[];
-dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_25a,last){
-var enc=/utf/i.test(_25a||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _25d=[];
-var _25e=new Object();
-for(var name in map){
-var _260=function(elt){
-var val=enc(name)+"="+enc(elt);
-_25d[(last==name)?"push":"unshift"](val);
-};
-if(!_25e[name]){
-var _263=map[name];
-if(dojo.lang.isArray(_263)){
-dojo.lang.forEach(_263,_260);
-}else{
-_260(_263);
-}
-}
-}
-return _25d.join("&");
-};
-dojo.io.setIFrameSrc=function(_264,src,_266){
-try{
-var r=dojo.render.html;
-if(!_266){
-if(r.safari){
-_264.location=src;
-}else{
-frames[_264.name].location=src;
-}
-}else{
-var idoc;
-if(r.ie){
-idoc=_264.contentWindow.document;
-}else{
-if(r.safari){
-idoc=_264.document;
-}else{
-idoc=_264.contentWindow;
-}
-}
-if(!idoc){
-_264.location=src;
-return;
-}else{
-idoc.location.replace(src);
-}
-}
-}
-catch(e){
-dojo.debug(e);
-dojo.debug("setIFrameSrc: "+e);
-}
-};
-dojo.provide("dojo.string.extras");
-dojo.string.substituteParams=function(_269,hash){
-var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _269.replace(/\%\{(\w+)\}/g,function(_26c,key){
-if(typeof (map[key])!="undefined"&&map[key]!=null){
-return map[key];
-}
-dojo.raise("Substitution not found: "+key);
-});
-};
-dojo.string.capitalize=function(str){
-if(!dojo.lang.isString(str)){
-return "";
-}
-if(arguments.length==0){
-str=this;
-}
-var _26f=str.split(" ");
-for(var i=0;i<_26f.length;i++){
-_26f[i]=_26f[i].charAt(0).toUpperCase()+_26f[i].substring(1);
-}
-return _26f.join(" ");
-};
-dojo.string.isBlank=function(str){
-if(!dojo.lang.isString(str)){
-return true;
-}
-return (dojo.string.trim(str).length==0);
-};
-dojo.string.encodeAscii=function(str){
-if(!dojo.lang.isString(str)){
-return str;
-}
-var ret="";
-var _274=escape(str);
-var _275,re=/%u([0-9A-F]{4})/i;
-while((_275=_274.match(re))){
-var num=Number("0x"+_275[1]);
-var _278=escape("&#"+num+";");
-ret+=_274.substring(0,_275.index)+_278;
-_274=_274.substring(_275.index+_275[0].length);
-}
-ret+=_274.replace(/\+/g,"%2B");
-return ret;
-};
-dojo.string.escape=function(type,str){
-var args=dojo.lang.toArray(arguments,1);
-switch(type.toLowerCase()){
-case "xml":
-case "html":
-case "xhtml":
-return dojo.string.escapeXml.apply(this,args);
-case "sql":
-return dojo.string.escapeSql.apply(this,args);
-case "regexp":
-case "regex":
-return dojo.string.escapeRegExp.apply(this,args);
-case "javascript":
-case "jscript":
-case "js":
-return dojo.string.escapeJavaScript.apply(this,args);
-case "ascii":
-return dojo.string.encodeAscii.apply(this,args);
-default:
-return str;
-}
-};
-dojo.string.escapeXml=function(str,_27d){
-str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_27d){
-str=str.replace(/'/gm,"&#39;");
-}
-return str;
-};
-dojo.string.escapeSql=function(str){
-return str.replace(/'/gm,"''");
-};
-dojo.string.escapeRegExp=function(str){
-return str.replace(/\\/gm,"\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm,"\\$1");
-};
-dojo.string.escapeJavaScript=function(str){
-return str.replace(/(["'\f\b\n\t\r])/gm,"\\$1");
-};
-dojo.string.escapeString=function(str){
-return ("\""+str.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");
-};
-dojo.string.summary=function(str,len){
-if(!len||str.length<=len){
-return str;
-}
-return str.substring(0,len).replace(/\.+$/,"")+"...";
-};
-dojo.string.endsWith=function(str,end,_286){
-if(_286){
-str=str.toLowerCase();
-end=end.toLowerCase();
-}
-if((str.length-end.length)<0){
-return false;
-}
-return str.lastIndexOf(end)==str.length-end.length;
-};
-dojo.string.endsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.endsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.startsWith=function(str,_28a,_28b){
-if(_28b){
-str=str.toLowerCase();
-_28a=_28a.toLowerCase();
-}
-return str.indexOf(_28a)==0;
-};
-dojo.string.startsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.startsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.has=function(str){
-for(var i=1;i<arguments.length;i++){
-if(str.indexOf(arguments[i])>-1){
-return true;
-}
-}
-return false;
-};
-dojo.string.normalizeNewlines=function(text,_291){
-if(_291=="\n"){
-text=text.replace(/\r\n/g,"\n");
-text=text.replace(/\r/g,"\n");
-}else{
-if(_291=="\r"){
-text=text.replace(/\r\n/g,"\r");
-text=text.replace(/\n/g,"\r");
-}else{
-text=text.replace(/([^\r])\n/g,"$1\r\n").replace(/\r([^\n])/g,"\r\n$1");
-}
-}
-return text;
-};
-dojo.string.splitEscaped=function(str,_293){
-var _294=[];
-for(var i=0,_296=0;i<str.length;i++){
-if(str.charAt(i)=="\\"){
-i++;
-continue;
-}
-if(str.charAt(i)==_293){
-_294.push(str.substring(_296,i));
-_296=i+1;
-}
-}
-_294.push(str.substr(_296));
-return _294;
-};
-dojo.provide("dojo.dom");
-dojo.dom.ELEMENT_NODE=1;
-dojo.dom.ATTRIBUTE_NODE=2;
-dojo.dom.TEXT_NODE=3;
-dojo.dom.CDATA_SECTION_NODE=4;
-dojo.dom.ENTITY_REFERENCE_NODE=5;
-dojo.dom.ENTITY_NODE=6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE=7;
-dojo.dom.COMMENT_NODE=8;
-dojo.dom.DOCUMENT_NODE=9;
-dojo.dom.DOCUMENT_TYPE_NODE=10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE=11;
-dojo.dom.NOTATION_NODE=12;
-dojo.dom.dojoml="http://www.dojotoolkit.org/2004/dojoml";
-dojo.dom.xmlns={svg:"http://www.w3.org/2000/svg",smil:"http://www.w3.org/2001/SMIL20/",mml:"http://www.w3.org/1998/Math/MathML",cml:"http://www.xml-cml.org",xlink:"http://www.w3.org/1999/xlink",xhtml:"http://www.w3.org/1999/xhtml",xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",xbl:"http://www.mozilla.org/xbl",fo:"http://www.w3.org/1999/XSL/Format",xsl:"http://www.w3.org/1999/XSL/Transform",xslt:"http://www.w3.org/1999/XSL/Transform",xi:"http://www.w3.org/2001/XInclude",xforms:"http://www.w3.org/2002/01/xforms",saxon:"http://icl.com/saxon",xalan:"http://xml.apache.org/xslt",xsd:"http://www.w3.org/2001/XMLSchema",dt:"http://www.w3.org/2001/XMLSchema-datatypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",dc:"http://purl.org/dc/elements/1.1/",dcq:"http://purl.org/dc/qualifiers/1.0","soap-env":"http://schemas.xmlsoap.org/soap/envelope/",wsdl:"http://schemas.xmlsoap.org/wsdl/",AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"};
-dojo.dom.isNode=function(wh){
-if(typeof Element=="function"){
-try{
-return wh instanceof Element;
-}
-catch(e){
-}
-}else{
-return wh&&!isNaN(wh.nodeType);
-}
-};
-dojo.dom.getUniqueId=function(){
-var _298=dojo.doc();
-do{
-var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_298.getElementById(id));
-return id;
-};
-dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_29a,_29b){
-var node=_29a.firstChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.nextSibling;
-}
-if(_29b&&node&&node.tagName&&node.tagName.toLowerCase()!=_29b.toLowerCase()){
-node=dojo.dom.nextElement(node,_29b);
-}
-return node;
-};
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_29d,_29e){
-var node=_29d.lastChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.previousSibling;
-}
-if(_29e&&node&&node.tagName&&node.tagName.toLowerCase()!=_29e.toLowerCase()){
-node=dojo.dom.prevElement(node,_29e);
-}
-return node;
-};
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_2a1){
-if(!node){
-return null;
-}
-do{
-node=node.nextSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_2a1&&_2a1.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_2a1);
-}
-return node;
-};
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_2a3){
-if(!node){
-return null;
-}
-if(_2a3){
-_2a3=_2a3.toLowerCase();
-}
-do{
-node=node.previousSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_2a3&&_2a3.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_2a3);
-}
-return node;
-};
-dojo.dom.moveChildren=function(_2a4,_2a5,trim){
-var _2a7=0;
-if(trim){
-while(_2a4.hasChildNodes()&&_2a4.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_2a4.removeChild(_2a4.firstChild);
-}
-while(_2a4.hasChildNodes()&&_2a4.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_2a4.removeChild(_2a4.lastChild);
-}
-}
-while(_2a4.hasChildNodes()){
-_2a5.appendChild(_2a4.firstChild);
-_2a7++;
-}
-return _2a7;
-};
-dojo.dom.copyChildren=function(_2a8,_2a9,trim){
-var _2ab=_2a8.cloneNode(true);
-return this.moveChildren(_2ab,_2a9,trim);
-};
-dojo.dom.replaceChildren=function(node,_2ad){
-var _2ae=[];
-if(dojo.render.html.ie){
-for(var i=0;i<node.childNodes.length;i++){
-_2ae.push(node.childNodes[i]);
-}
-}
-dojo.dom.removeChildren(node);
-node.appendChild(_2ad);
-for(var i=0;i<_2ae.length;i++){
-dojo.dom.destroyNode(_2ae[i]);
-}
-};
-dojo.dom.removeChildren=function(node){
-var _2b1=node.childNodes.length;
-while(node.hasChildNodes()){
-dojo.dom.removeNode(node.firstChild);
-}
-return _2b1;
-};
-dojo.dom.replaceNode=function(node,_2b3){
-return node.parentNode.replaceChild(_2b3,node);
-};
-dojo.dom.destroyNode=function(node){
-if(node.parentNode){
-node=dojo.dom.removeNode(node);
-}
-if(node.nodeType!=3){
-if(dojo.evalObjPath("dojo.event.browser.clean",false)){
-dojo.event.browser.clean(node);
-}
-if(dojo.render.html.ie){
-node.outerHTML="";
-}
-}
-};
-dojo.dom.removeNode=function(node){
-if(node&&node.parentNode){
-return node.parentNode.removeChild(node);
-}
-};
-dojo.dom.getAncestors=function(node,_2b7,_2b8){
-var _2b9=[];
-var _2ba=(_2b7&&(_2b7 instanceof Function||typeof _2b7=="function"));
-while(node){
-if(!_2ba||_2b7(node)){
-_2b9.push(node);
-}
-if(_2b8&&_2b9.length>0){
-return _2b9[0];
-}
-node=node.parentNode;
-}
-if(_2b8){
-return null;
-}
-return _2b9;
-};
-dojo.dom.getAncestorsByTag=function(node,tag,_2bd){
-tag=tag.toLowerCase();
-return dojo.dom.getAncestors(node,function(el){
-return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_2bd);
-};
-dojo.dom.getFirstAncestorByTag=function(node,tag){
-return dojo.dom.getAncestorsByTag(node,tag,true);
-};
-dojo.dom.isDescendantOf=function(node,_2c2,_2c3){
-if(_2c3&&node){
-node=node.parentNode;
-}
-while(node){
-if(node==_2c2){
-return true;
-}
-node=node.parentNode;
-}
-return false;
-};
-dojo.dom.innerXML=function(node){
-if(node.innerXML){
-return node.innerXML;
-}else{
-if(node.xml){
-return node.xml;
-}else{
-if(typeof XMLSerializer!="undefined"){
-return (new XMLSerializer()).serializeToString(node);
-}
-}
-}
-};
-dojo.dom.createDocument=function(){
-var doc=null;
-var _2c6=dojo.doc();
-if(!dj_undef("ActiveXObject")){
-var _2c7=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_2c7.length;i++){
-try{
-doc=new ActiveXObject(_2c7[i]+".XMLDOM");
-}
-catch(e){
-}
-if(doc){
-break;
-}
-}
-}else{
-if((_2c6.implementation)&&(_2c6.implementation.createDocument)){
-doc=_2c6.implementation.createDocument("","",null);
-}
-}
-return doc;
-};
-dojo.dom.createDocumentFromText=function(str,_2ca){
-if(!_2ca){
-_2ca="text/xml";
-}
-if(!dj_undef("DOMParser")){
-var _2cb=new DOMParser();
-return _2cb.parseFromString(str,_2ca);
-}else{
-if(!dj_undef("ActiveXObject")){
-var _2cc=dojo.dom.createDocument();
-if(_2cc){
-_2cc.async=false;
-_2cc.loadXML(str);
-return _2cc;
-}else{
-dojo.debug("toXml didn't work?");
-}
-}else{
-var _2cd=dojo.doc();
-if(_2cd.createElement){
-var tmp=_2cd.createElement("xml");
-tmp.innerHTML=str;
-if(_2cd.implementation&&_2cd.implementation.createDocument){
-var _2cf=_2cd.implementation.createDocument("foo","",null);
-for(var i=0;i<tmp.childNodes.length;i++){
-_2cf.importNode(tmp.childNodes.item(i),true);
-}
-return _2cf;
-}
-return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
-}
-}
-}
-return null;
-};
-dojo.dom.prependChild=function(node,_2d2){
-if(_2d2.firstChild){
-_2d2.insertBefore(node,_2d2.firstChild);
-}else{
-_2d2.appendChild(node);
-}
-return true;
-};
-dojo.dom.insertBefore=function(node,ref,_2d5){
-if((_2d5!=true)&&(node===ref||node.nextSibling===ref)){
-return false;
-}
-var _2d6=ref.parentNode;
-_2d6.insertBefore(node,ref);
-return true;
-};
-dojo.dom.insertAfter=function(node,ref,_2d9){
-var pn=ref.parentNode;
-if(ref==pn.lastChild){
-if((_2d9!=true)&&(node===ref)){
-return false;
-}
-pn.appendChild(node);
-}else{
-return this.insertBefore(node,ref.nextSibling,_2d9);
-}
-return true;
-};
-dojo.dom.insertAtPosition=function(node,ref,_2dd){
-if((!node)||(!ref)||(!_2dd)){
-return false;
-}
-switch(_2dd.toLowerCase()){
-case "before":
-return dojo.dom.insertBefore(node,ref);
-case "after":
-return dojo.dom.insertAfter(node,ref);
-case "first":
-if(ref.firstChild){
-return dojo.dom.insertBefore(node,ref.firstChild);
-}else{
-ref.appendChild(node);
-return true;
-}
-break;
-default:
-ref.appendChild(node);
-return true;
-}
-};
-dojo.dom.insertAtIndex=function(node,_2df,_2e0){
-var _2e1=_2df.childNodes;
-if(!_2e1.length||_2e1.length==_2e0){
-_2df.appendChild(node);
-return true;
-}
-if(_2e0==0){
-return dojo.dom.prependChild(node,_2df);
-}
-return dojo.dom.insertAfter(node,_2e1[_2e0-1]);
-};
-dojo.dom.textContent=function(node,text){
-if(arguments.length>1){
-var _2e4=dojo.doc();
-dojo.dom.replaceChildren(node,_2e4.createTextNode(text));
-return text;
-}else{
-if(node.textContent!=undefined){
-return node.textContent;
-}
-var _2e5="";
-if(node==null){
-return _2e5;
-}
-for(var i=0;i<node.childNodes.length;i++){
-switch(node.childNodes[i].nodeType){
-case 1:
-case 5:
-_2e5+=dojo.dom.textContent(node.childNodes[i]);
-break;
-case 3:
-case 2:
-case 4:
-_2e5+=node.childNodes[i].nodeValue;
-break;
-default:
-break;
-}
-}
-return _2e5;
-}
-};
-dojo.dom.hasParent=function(node){
-return Boolean(node&&node.parentNode&&dojo.dom.isNode(node.parentNode));
-};
-dojo.dom.isTag=function(node){
-if(node&&node.tagName){
-for(var i=1;i<arguments.length;i++){
-if(node.tagName==String(arguments[i])){
-return String(arguments[i]);
-}
-}
-}
-return "";
-};
-dojo.dom.setAttributeNS=function(elem,_2eb,_2ec,_2ed){
-if(elem==null||((elem==undefined)&&(typeof elem=="undefined"))){
-dojo.raise("No element given to dojo.dom.setAttributeNS");
-}
-if(!((elem.setAttributeNS==undefined)&&(typeof elem.setAttributeNS=="undefined"))){
-elem.setAttributeNS(_2eb,_2ec,_2ed);
-}else{
-var _2ee=elem.ownerDocument;
-var _2ef=_2ee.createNode(2,_2ec,_2eb);
-_2ef.nodeValue=_2ed;
-elem.setAttributeNode(_2ef);
-}
-};
-dojo.provide("dojo.undo.browser");
-try{
-if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
-}
-}
-catch(e){
-}
-if(dojo.render.html.opera){
-dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work.");
-}
-dojo.undo.browser={initialHref:(!dj_undef("window"))?window.location.href:"",initialHash:(!dj_undef("window"))?window.location.hash:"",moveForward:false,historyStack:[],forwardStack:[],historyIframe:null,bookmarkAnchor:null,locationTimer:null,setInitialState:function(args){
-this.initialState=this._createState(this.initialHref,args,this.initialHash);
-},addToHistory:function(args){
-this.forwardStack=[];
-var hash=null;
-var url=null;
-if(!this.historyIframe){
-if(djConfig["useXDomain"]&&!djConfig["dojoIframeHistoryUrl"]){
-dojo.debug("dojo.undo.browser: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
-}
-this.historyIframe=window.frames["djhistory"];
-}
-if(!this.bookmarkAnchor){
-this.bookmarkAnchor=document.createElement("a");
-dojo.body().appendChild(this.bookmarkAnchor);
-this.bookmarkAnchor.style.display="none";
-}
-if(args["changeUrl"]){
-hash="#"+((args["changeUrl"]!==true)?args["changeUrl"]:(new Date()).getTime());
-if(this.historyStack.length==0&&this.initialState.urlHash==hash){
-this.initialState=this._createState(url,args,hash);
-return;
-}else{
-if(this.historyStack.length>0&&this.historyStack[this.historyStack.length-1].urlHash==hash){
-this.historyStack[this.historyStack.length-1]=this._createState(url,args,hash);
-return;
-}
-}
-this.changingUrl=true;
-setTimeout("window.location.href = '"+hash+"'; dojo.undo.browser.changingUrl = false;",1);
-this.bookmarkAnchor.href=hash;
-if(dojo.render.html.ie){
-url=this._loadIframeHistory();
-var _2f4=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_2f6){
-if(window.location.hash!=""){
-setTimeout("window.location.href = '"+hash+"';",1);
-}
-_2f4.apply(this,[_2f6]);
-};
-if(args["back"]){
-args.back=tcb;
-}else{
-if(args["backButton"]){
-args.backButton=tcb;
-}else{
-if(args["handle"]){
-args.handle=tcb;
-}
-}
-}
-var _2f7=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_2f9){
-if(window.location.hash!=""){
-window.location.href=hash;
-}
-if(_2f7){
-_2f7.apply(this,[_2f9]);
-}
-};
-if(args["forward"]){
-args.forward=tfw;
-}else{
-if(args["forwardButton"]){
-args.forwardButton=tfw;
-}else{
-if(args["handle"]){
-args.handle=tfw;
-}
-}
-}
-}else{
-if(dojo.render.html.moz){
-if(!this.locationTimer){
-this.locationTimer=setInterval("dojo.undo.browser.checkLocation();",200);
-}
-}
-}
-}else{
-url=this._loadIframeHistory();
-}
-this.historyStack.push(this._createState(url,args,hash));
-},checkLocation:function(){
-if(!this.changingUrl){
-var hsl=this.historyStack.length;
-if((window.location.hash==this.initialHash||window.location.href==this.initialHref)&&(hsl==1)){
-this.handleBackButton();
-return;
-}
-if(this.forwardStack.length>0){
-if(this.forwardStack[this.forwardStack.length-1].urlHash==window.location.hash){
-this.handleForwardButton();
-return;
-}
-}
-if((hsl>=2)&&(this.historyStack[hsl-2])){
-if(this.historyStack[hsl-2].urlHash==window.location.hash){
-this.handleBackButton();
-return;
-}
-}
-}
-},iframeLoaded:function(evt,_2fc){
-if(!dojo.render.html.opera){
-var _2fd=this._getUrlQuery(_2fc.href);
-if(_2fd==null){
-if(this.historyStack.length==1){
-this.handleBackButton();
-}
-return;
-}
-if(this.moveForward){
-this.moveForward=false;
-return;
-}
-if(this.historyStack.length>=2&&_2fd==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
-this.handleBackButton();
-}else{
-if(this.forwardStack.length>0&&_2fd==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
-this.handleForwardButton();
-}
-}
-}
-},handleBackButton:function(){
-var _2fe=this.historyStack.pop();
-if(!_2fe){
-return;
-}
-var last=this.historyStack[this.historyStack.length-1];
-if(!last&&this.historyStack.length==0){
-last=this.initialState;
-}
-if(last){
-if(last.kwArgs["back"]){
-last.kwArgs["back"]();
-}else{
-if(last.kwArgs["backButton"]){
-last.kwArgs["backButton"]();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("back");
-}
-}
-}
-}
-this.forwardStack.push(_2fe);
-},handleForwardButton:function(){
-var last=this.forwardStack.pop();
-if(!last){
-return;
-}
-if(last.kwArgs["forward"]){
-last.kwArgs.forward();
-}else{
-if(last.kwArgs["forwardButton"]){
-last.kwArgs.forwardButton();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("forward");
-}
-}
-}
-this.historyStack.push(last);
-},_createState:function(url,args,hash){
-return {"url":url,"kwArgs":args,"urlHash":hash};
-},_getUrlQuery:function(url){
-var _305=url.split("?");
-if(_305.length<2){
-return null;
-}else{
-return _305[1];
-}
-},_loadIframeHistory:function(){
-var url=(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"?"+(new Date()).getTime();
-this.moveForward=true;
-dojo.io.setIFrameSrc(this.historyIframe,url,false);
-return url;
-}};
-dojo.provide("dojo.io.BrowserIO");
-if(!dj_undef("window")){
-dojo.io.checkChildrenForFile=function(node){
-var _308=false;
-var _309=node.getElementsByTagName("input");
-dojo.lang.forEach(_309,function(_30a){
-if(_308){
-return;
-}
-if(_30a.getAttribute("type")=="file"){
-_308=true;
-}
-});
-return _308;
-};
-dojo.io.formHasFile=function(_30b){
-return dojo.io.checkChildrenForFile(_30b);
-};
-dojo.io.updateNode=function(node,_30d){
-node=dojo.byId(node);
-var args=_30d;
-if(dojo.lang.isString(_30d)){
-args={url:_30d};
-}
-args.mimetype="text/html";
-args.load=function(t,d,e){
-while(node.firstChild){
-dojo.dom.destroyNode(node.firstChild);
-}
-node.innerHTML=d;
-};
-dojo.io.bind(args);
-};
-dojo.io.formFilter=function(node){
-var type=(node.type||"").toLowerCase();
-return !node.disabled&&node.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],type);
-};
-dojo.io.encodeForm=function(_314,_315,_316){
-if((!_314)||(!_314.tagName)||(!_314.tagName.toLowerCase()=="form")){
-dojo.raise("Attempted to encode a non-form element.");
-}
-if(!_316){
-_316=dojo.io.formFilter;
-}
-var enc=/utf/i.test(_315||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _318=[];
-for(var i=0;i<_314.elements.length;i++){
-var elm=_314.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_316(elm)){
-continue;
-}
-var name=enc(elm.name);
-var type=elm.type.toLowerCase();
-if(type=="select-multiple"){
-for(var j=0;j<elm.options.length;j++){
-if(elm.options[j].selected){
-_318.push(name+"="+enc(elm.options[j].value));
-}
-}
-}else{
-if(dojo.lang.inArray(["radio","checkbox"],type)){
-if(elm.checked){
-_318.push(name+"="+enc(elm.value));
-}
-}else{
-_318.push(name+"="+enc(elm.value));
-}
-}
-}
-var _31e=_314.getElementsByTagName("input");
-for(var i=0;i<_31e.length;i++){
-var _31f=_31e[i];
-if(_31f.type.toLowerCase()=="image"&&_31f.form==_314&&_316(_31f)){
-var name=enc(_31f.name);
-_318.push(name+"="+enc(_31f.value));
-_318.push(name+".x=0");
-_318.push(name+".y=0");
-}
-}
-return _318.join("&")+"&";
-};
-dojo.io.FormBind=function(args){
-this.bindArgs={};
-if(args&&args.formNode){
-this.init(args);
-}else{
-if(args){
-this.init({formNode:args});
-}
-}
-};
-dojo.lang.extend(dojo.io.FormBind,{form:null,bindArgs:null,clickedButton:null,init:function(args){
-var form=dojo.byId(args.formNode);
-if(!form||!form.tagName||form.tagName.toLowerCase()!="form"){
-throw new Error("FormBind: Couldn't apply, invalid form");
-}else{
-if(this.form==form){
-return;
-}else{
-if(this.form){
-throw new Error("FormBind: Already applied to a form");
-}
-}
-}
-dojo.lang.mixin(this.bindArgs,args);
-this.form=form;
-this.connect(form,"onsubmit","submit");
-for(var i=0;i<form.elements.length;i++){
-var node=form.elements[i];
-if(node&&node.type&&dojo.lang.inArray(["submit","button"],node.type.toLowerCase())){
-this.connect(node,"onclick","click");
-}
-}
-var _325=form.getElementsByTagName("input");
-for(var i=0;i<_325.length;i++){
-var _326=_325[i];
-if(_326.type.toLowerCase()=="image"&&_326.form==form){
-this.connect(_326,"onclick","click");
-}
-}
-},onSubmit:function(form){
-return true;
-},submit:function(e){
-e.preventDefault();
-if(this.onSubmit(this.form)){
-dojo.io.bind(dojo.lang.mixin(this.bindArgs,{formFilter:dojo.lang.hitch(this,"formFilter")}));
-}
-},click:function(e){
-var node=e.currentTarget;
-if(node.disabled){
-return;
-}
-this.clickedButton=node;
-},formFilter:function(node){
-var type=(node.type||"").toLowerCase();
-var _32d=false;
-if(node.disabled||!node.name){
-_32d=false;
-}else{
-if(dojo.lang.inArray(["submit","button","image"],type)){
-if(!this.clickedButton){
-this.clickedButton=node;
-}
-_32d=node==this.clickedButton;
-}else{
-_32d=!dojo.lang.inArray(["file","submit","reset","button"],type);
-}
-}
-return _32d;
-},connect:function(_32e,_32f,_330){
-if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_32e,_32f,this,_330);
-}else{
-var fcn=dojo.lang.hitch(this,_330);
-_32e[_32f]=function(e){
-if(!e){
-e=window.event;
-}
-if(!e.currentTarget){
-e.currentTarget=e.srcElement;
-}
-if(!e.preventDefault){
-e.preventDefault=function(){
-window.event.returnValue=false;
-};
-}
-fcn(e);
-};
-}
-}});
-dojo.io.XMLHTTPTransport=new function(){
-var _333=this;
-var _334={};
-this.useCache=false;
-this.preventCache=false;
-function getCacheKey(url,_336,_337){
-return url+"|"+_336+"|"+_337.toLowerCase();
-}
-function addToCache(url,_339,_33a,http){
-_334[getCacheKey(url,_339,_33a)]=http;
-}
-function getFromCache(url,_33d,_33e){
-return _334[getCacheKey(url,_33d,_33e)];
-}
-this.clearCache=function(){
-_334={};
-};
-function doLoad(_33f,http,url,_342,_343){
-if(((http.status>=200)&&(http.status<300))||(http.status==304)||(http.status==1223)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
-var ret;
-if(_33f.method.toLowerCase()=="head"){
-var _345=http.getAllResponseHeaders();
-ret={};
-ret.toString=function(){
-return _345;
-};
-var _346=_345.split(/[\r\n]+/g);
-for(var i=0;i<_346.length;i++){
-var pair=_346[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-if(pair){
-ret[pair[1]]=pair[2];
-}
-}
-}else{
-if(_33f.mimetype=="text/javascript"){
-try{
-ret=dj_eval(http.responseText);
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=null;
-}
-}else{
-if(_33f.mimetype.substr(0,9)=="text/json"||_33f.mimetype.substr(0,16)=="application/json"){
-try{
-ret=dj_eval("("+_33f.jsonFilter(http.responseText)+")");
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=false;
-}
-}else{
-if((_33f.mimetype=="application/xml")||(_33f.mimetype=="text/xml")){
-ret=http.responseXML;
-if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
-ret=dojo.dom.createDocumentFromText(http.responseText);
-}
-}else{
-ret=http.responseText;
-}
-}
-}
-}
-if(_343){
-addToCache(url,_342,_33f.method,http);
-}
-_33f[(typeof _33f.load=="function")?"load":"handle"]("load",ret,http,_33f);
-}else{
-var _349=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_33f[(typeof _33f.error=="function")?"error":"handle"]("error",_349,http,_33f);
-}
-}
-function setHeaders(http,_34b){
-if(_34b["headers"]){
-for(var _34c in _34b["headers"]){
-if(_34c.toLowerCase()=="content-type"&&!_34b["contentType"]){
-_34b["contentType"]=_34b["headers"][_34c];
-}else{
-http.setRequestHeader(_34c,_34b["headers"][_34c]);
-}
-}
-}
-}
-this.inFlight=[];
-this.inFlightTimer=null;
-this.startWatchingInFlight=function(){
-if(!this.inFlightTimer){
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-}
-};
-this.watchInFlight=function(){
-var now=null;
-if(!dojo.hostenv._blockAsync&&!_333._blockAsync){
-for(var x=this.inFlight.length-1;x>=0;x--){
-try{
-var tif=this.inFlight[x];
-if(!tif||tif.http._aborted||!tif.http.readyState){
-this.inFlight.splice(x,1);
-continue;
-}
-if(4==tif.http.readyState){
-this.inFlight.splice(x,1);
-doLoad(tif.req,tif.http,tif.url,tif.query,tif.useCache);
-}else{
-if(tif.startTime){
-if(!now){
-now=(new Date()).getTime();
-}
-if(tif.startTime+(tif.req.timeoutSeconds*1000)<now){
-if(typeof tif.http.abort=="function"){
-tif.http.abort();
-}
-this.inFlight.splice(x,1);
-tif.req[(typeof tif.req.timeout=="function")?"timeout":"handle"]("timeout",null,tif.http,tif.req);
-}
-}
-}
-}
-catch(e){
-try{
-var _350=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_350,tif.http,tif.req);
-}
-catch(e2){
-dojo.debug("XMLHttpTransport error callback failed: "+e2);
-}
-}
-}
-}
-clearTimeout(this.inFlightTimer);
-if(this.inFlight.length==0){
-this.inFlightTimer=null;
-return;
-}
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-};
-var _351=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_352){
-var mlc=_352["mimetype"].toLowerCase()||"";
-return _351&&((dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript"],mlc))||(mlc.substr(0,9)=="text/json"||mlc.substr(0,16)=="application/json"))&&!(_352["formNode"]&&dojo.io.formHasFile(_352["formNode"]));
-};
-this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_354){
-if(!_354["url"]){
-if(!_354["formNode"]&&(_354["backButton"]||_354["back"]||_354["changeUrl"]||_354["watchForURL"])&&(!djConfig.preventBackButtonFix)){
-dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_354);
-return true;
-}
-}
-var url=_354.url;
-var _356="";
-if(_354["formNode"]){
-var ta=_354.formNode.getAttribute("action");
-if((ta)&&(!_354["url"])){
-url=ta;
-}
-var tp=_354.formNode.getAttribute("method");
-if((tp)&&(!_354["method"])){
-_354.method=tp;
-}
-_356+=dojo.io.encodeForm(_354.formNode,_354.encoding,_354["formFilter"]);
-}
-if(url.indexOf("#")>-1){
-dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
-url=url.split("#")[0];
-}
-if(_354["file"]){
-_354.method="post";
-}
-if(!_354["method"]){
-_354.method="get";
-}
-if(_354.method.toLowerCase()=="get"){
-_354.multipart=false;
-}else{
-if(_354["file"]){
-_354.multipart=true;
-}else{
-if(!_354["multipart"]){
-_354.multipart=false;
-}
-}
-}
-if(_354["backButton"]||_354["back"]||_354["changeUrl"]){
-dojo.undo.browser.addToHistory(_354);
-}
-var _359=_354["content"]||{};
-if(_354.sendTransport){
-_359["dojo.transport"]="xmlhttp";
-}
-do{
-if(_354.postContent){
-_356=_354.postContent;
-break;
-}
-if(_359){
-_356+=dojo.io.argsFromMap(_359,_354.encoding);
-}
-if(_354.method.toLowerCase()=="get"||!_354.multipart){
-break;
-}
-var t=[];
-if(_356.length){
-var q=_356.split("&");
-for(var i=0;i<q.length;++i){
-if(q[i].length){
-var p=q[i].split("=");
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+p[0]+"\"","",p[1]);
-}
-}
-}
-if(_354.file){
-if(dojo.lang.isArray(_354.file)){
-for(var i=0;i<_354.file.length;++i){
-var o=_354.file[i];
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}else{
-var o=_354.file;
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}
-if(t.length){
-t.push("--"+this.multipartBoundary+"--","");
-_356=t.join("\r\n");
-}
-}while(false);
-var _35f=_354["sync"]?false:true;
-var _360=_354["preventCache"]||(this.preventCache==true&&_354["preventCache"]!=false);
-var _361=_354["useCache"]==true||(this.useCache==true&&_354["useCache"]!=false);
-if(!_360&&_361){
-var _362=getFromCache(url,_356,_354.method);
-if(_362){
-doLoad(_354,_362,url,_356,false);
-return;
-}
-}
-var http=dojo.hostenv.getXmlhttpObject(_354);
-var _364=false;
-if(_35f){
-var _365=this.inFlight.push({"req":_354,"http":http,"url":url,"query":_356,"useCache":_361,"startTime":_354.timeoutSeconds?(new Date()).getTime():0});
-this.startWatchingInFlight();
-}else{
-_333._blockAsync=true;
-}
-if(_354.method.toLowerCase()=="post"){
-if(!_354.user){
-http.open("POST",url,_35f);
-}else{
-http.open("POST",url,_35f,_354.user,_354.password);
-}
-setHeaders(http,_354);
-http.setRequestHeader("Content-Type",_354.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_354.contentType||"application/x-www-form-urlencoded"));
-try{
-http.send(_356);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_354,{status:404},url,_356,_361);
-}
-}else{
-var _366=url;
-if(_356!=""){
-_366+=(_366.indexOf("?")>-1?"&":"?")+_356;
-}
-if(_360){
-_366+=(dojo.string.endsWithAny(_366,"?","&")?"":(_366.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
-}
-if(!_354.user){
-http.open(_354.method.toUpperCase(),_366,_35f);
-}else{
-http.open(_354.method.toUpperCase(),_366,_35f,_354.user,_354.password);
-}
-setHeaders(http,_354);
-try{
-http.send(null);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_354,{status:404},url,_356,_361);
-}
-}
-if(!_35f){
-doLoad(_354,http,url,_356,_361);
-_333._blockAsync=false;
-}
-_354.abort=function(){
-try{
-http._aborted=true;
-}
-catch(e){
-}
-return http.abort();
-};
-return;
-};
-dojo.io.transports.addTransport("XMLHTTPTransport");
-};
-}
-dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(name,_368,days,path,_36b,_36c){
-var _36d=-1;
-if((typeof days=="number")&&(days>=0)){
-var d=new Date();
-d.setTime(d.getTime()+(days*24*60*60*1000));
-_36d=d.toGMTString();
-}
-_368=escape(_368);
-document.cookie=name+"="+_368+";"+(_36d!=-1?" expires="+_36d+";":"")+(path?"path="+path:"")+(_36b?"; domain="+_36b:"")+(_36c?"; secure":"");
-};
-dojo.io.cookie.set=dojo.io.cookie.setCookie;
-dojo.io.cookie.getCookie=function(name){
-var idx=document.cookie.lastIndexOf(name+"=");
-if(idx==-1){
-return null;
-}
-var _371=document.cookie.substring(idx+name.length+1);
-var end=_371.indexOf(";");
-if(end==-1){
-end=_371.length;
-}
-_371=_371.substring(0,end);
-_371=unescape(_371);
-return _371;
-};
-dojo.io.cookie.get=dojo.io.cookie.getCookie;
-dojo.io.cookie.deleteCookie=function(name){
-dojo.io.cookie.setCookie(name,"-",0);
-};
-dojo.io.cookie.setObjectCookie=function(name,obj,days,path,_378,_379,_37a){
-if(arguments.length==5){
-_37a=_378;
-_378=null;
-_379=null;
-}
-var _37b=[],_37c,_37d="";
-if(!_37a){
-_37c=dojo.io.cookie.getObjectCookie(name);
-}
-if(days>=0){
-if(!_37c){
-_37c={};
-}
-for(var prop in obj){
-if(obj[prop]==null){
-delete _37c[prop];
-}else{
-if((typeof obj[prop]=="string")||(typeof obj[prop]=="number")){
-_37c[prop]=obj[prop];
-}
-}
-}
-prop=null;
-for(var prop in _37c){
-_37b.push(escape(prop)+"="+escape(_37c[prop]));
-}
-_37d=_37b.join("&");
-}
-dojo.io.cookie.setCookie(name,_37d,days,path,_378,_379);
-};
-dojo.io.cookie.getObjectCookie=function(name){
-var _380=null,_381=dojo.io.cookie.getCookie(name);
-if(_381){
-_380={};
-var _382=_381.split("&");
-for(var i=0;i<_382.length;i++){
-var pair=_382[i].split("=");
-var _385=pair[1];
-if(isNaN(_385)){
-_385=unescape(pair[1]);
-}
-_380[unescape(pair[0])]=_385;
-}
-}
-return _380;
-};
-dojo.io.cookie.isSupported=function(){
-if(typeof navigator.cookieEnabled!="boolean"){
-dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _386=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_386=="CookiesAllowed");
-if(navigator.cookieEnabled){
-this.deleteCookie("__TestingYourBrowserForCookieSupport__");
-}
-}
-return navigator.cookieEnabled;
-};
-if(!dojo.io.cookies){
-dojo.io.cookies=dojo.io.cookie;
-}
-dojo.provide("dojo.lang.declare");
-dojo.lang.declare=function(_387,_388,init,_38a){
-if((dojo.lang.isFunction(_38a))||((!_38a)&&(!dojo.lang.isFunction(init)))){
-var temp=_38a;
-_38a=init;
-init=temp;
-}
-var _38c=[];
-if(dojo.lang.isArray(_388)){
-_38c=_388;
-_388=_38c.shift();
-}
-if(!init){
-init=dojo.evalObjPath(_387,false);
-if((init)&&(!dojo.lang.isFunction(init))){
-init=null;
-}
-}
-var ctor=dojo.lang.declare._makeConstructor();
-var scp=(_388?_388.prototype:null);
-if(scp){
-scp.prototyping=true;
-ctor.prototype=new _388();
-scp.prototyping=false;
-}
-ctor.superclass=scp;
-ctor.mixins=_38c;
-for(var i=0,l=_38c.length;i<l;i++){
-dojo.lang.extend(ctor,_38c[i].prototype);
-}
-ctor.prototype.initializer=null;
-ctor.prototype.declaredClass=_387;
-if(dojo.lang.isArray(_38a)){
-dojo.lang.extend.apply(dojo.lang,[ctor].concat(_38a));
-}else{
-dojo.lang.extend(ctor,(_38a)||{});
-}
-dojo.lang.extend(ctor,dojo.lang.declare._common);
-ctor.prototype.constructor=ctor;
-ctor.prototype.initializer=(ctor.prototype.initializer)||(init)||(function(){
-});
-var _391=dojo.parseObjPath(_387,null,true);
-_391.obj[_391.prop]=ctor;
-return ctor;
-};
-dojo.lang.declare._makeConstructor=function(){
-return function(){
-var self=this._getPropContext();
-var s=self.constructor.superclass;
-if((s)&&(s.constructor)){
-if(s.constructor==arguments.callee){
-this._inherited("constructor",arguments);
-}else{
-this._contextMethod(s,"constructor",arguments);
-}
-}
-var ms=(self.constructor.mixins)||([]);
-for(var i=0,m;(m=ms[i]);i++){
-(((m.prototype)&&(m.prototype.initializer))||(m)).apply(this,arguments);
-}
-if((!this.prototyping)&&(self.initializer)){
-self.initializer.apply(this,arguments);
-}
-};
-};
-dojo.lang.declare._common={_getPropContext:function(){
-return (this.___proto||this);
-},_contextMethod:function(_397,_398,args){
-var _39a,_39b=this.___proto;
-this.___proto=_397;
-try{
-_39a=_397[_398].apply(this,(args||[]));
-}
-catch(e){
-throw e;
-}
-finally{
-this.___proto=_39b;
-}
-return _39a;
-},_inherited:function(prop,args){
-var p=this._getPropContext();
-do{
-if((!p.constructor)||(!p.constructor.superclass)){
-return;
-}
-p=p.constructor.superclass;
-}while(!(prop in p));
-return (dojo.lang.isFunction(p[prop])?this._contextMethod(p,prop,args):p[prop]);
-},inherited:function(prop,args){
-dojo.deprecated("'inherited' method is dangerous, do not up-call! 'inherited' is slated for removal in 0.5; name your super class (or use superclass property) instead.","0.5");
-this._inherited(prop,args);
-}};
-dojo.declare=dojo.lang.declare;
-dojo.provide("dojo.html.common");
-dojo.lang.mixin(dojo.html,dojo.dom);
-dojo.html.body=function(){
-dojo.deprecated("dojo.html.body() moved to dojo.body()","0.5");
-return dojo.body();
-};
-dojo.html.getEventTarget=function(evt){
-if(!evt){
-evt=dojo.global().event||{};
-}
-var t=(evt.srcElement?evt.srcElement:(evt.target?evt.target:null));
-while((t)&&(t.nodeType!=1)){
-t=t.parentNode;
-}
-return t;
-};
-dojo.html.getViewport=function(){
-var _3a3=dojo.global();
-var _3a4=dojo.doc();
-var w=0;
-var h=0;
-if(dojo.render.html.mozilla){
-w=_3a4.documentElement.clientWidth;
-h=_3a3.innerHeight;
-}else{
-if(!dojo.render.html.opera&&_3a3.innerWidth){
-w=_3a3.innerWidth;
-h=_3a3.innerHeight;
-}else{
-if(!dojo.render.html.opera&&dojo.exists(_3a4,"documentElement.clientWidth")){
-var w2=_3a4.documentElement.clientWidth;
-if(!w||w2&&w2<w){
-w=w2;
-}
-h=_3a4.documentElement.clientHeight;
-}else{
-if(dojo.body().clientWidth){
-w=dojo.body().clientWidth;
-h=dojo.body().clientHeight;
-}
-}
-}
-}
-return {width:w,height:h};
-};
-dojo.html.getScroll=function(){
-var _3a8=dojo.global();
-var _3a9=dojo.doc();
-var top=_3a8.pageYOffset||_3a9.documentElement.scrollTop||dojo.body().scrollTop||0;
-var left=_3a8.pageXOffset||_3a9.documentElement.scrollLeft||dojo.body().scrollLeft||0;
-return {top:top,left:left,offset:{x:left,y:top}};
-};
-dojo.html.getParentByType=function(node,type){
-var _3ae=dojo.doc();
-var _3af=dojo.byId(node);
-type=type.toLowerCase();
-while((_3af)&&(_3af.nodeName.toLowerCase()!=type)){
-if(_3af==(_3ae["body"]||_3ae["documentElement"])){
-return null;
-}
-_3af=_3af.parentNode;
-}
-return _3af;
-};
-dojo.html.getAttribute=function(node,attr){
-node=dojo.byId(node);
-if((!node)||(!node.getAttribute)){
-return null;
-}
-var ta=typeof attr=="string"?attr:new String(attr);
-var v=node.getAttribute(ta.toUpperCase());
-if((v)&&(typeof v=="string")&&(v!="")){
-return v;
-}
-if(v&&v.value){
-return v.value;
-}
-if((node.getAttributeNode)&&(node.getAttributeNode(ta))){
-return (node.getAttributeNode(ta)).value;
-}else{
-if(node.getAttribute(ta)){
-return node.getAttribute(ta);
-}else{
-if(node.getAttribute(ta.toLowerCase())){
-return node.getAttribute(ta.toLowerCase());
-}
-}
-}
-return null;
-};
-dojo.html.hasAttribute=function(node,attr){
-return dojo.html.getAttribute(dojo.byId(node),attr)?true:false;
-};
-dojo.html.getCursorPosition=function(e){
-e=e||dojo.global().event;
-var _3b7={x:0,y:0};
-if(e.pageX||e.pageY){
-_3b7.x=e.pageX;
-_3b7.y=e.pageY;
-}else{
-var de=dojo.doc().documentElement;
-var db=dojo.body();
-_3b7.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_3b7.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
-}
-return _3b7;
-};
-dojo.html.isTag=function(node){
-node=dojo.byId(node);
-if(node&&node.tagName){
-for(var i=1;i<arguments.length;i++){
-if(node.tagName.toLowerCase()==String(arguments[i]).toLowerCase()){
-return String(arguments[i]).toLowerCase();
-}
-}
-}
-return "";
-};
-if(dojo.render.html.ie&&!dojo.render.html.ie70){
-if(window.location.href.substr(0,6).toLowerCase()!="https:"){
-(function(){
-var _3bc=dojo.doc().createElement("script");
-_3bc.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_3bc);
-})();
-}
-}else{
-dojo.html.createExternalElement=function(doc,tag){
-return doc.createElement(tag);
-};
-}
-dojo.html._callDeprecated=function(_3bf,_3c0,args,_3c2,_3c3){
-dojo.deprecated("dojo.html."+_3bf,"replaced by dojo.html."+_3c0+"("+(_3c2?"node, {"+_3c2+": "+_3c2+"}":"")+")"+(_3c3?"."+_3c3:""),"0.5");
-var _3c4=[];
-if(_3c2){
-var _3c5={};
-_3c5[_3c2]=args[1];
-_3c4.push(args[0]);
-_3c4.push(_3c5);
-}else{
-_3c4=args;
-}
-var ret=dojo.html[_3c0].apply(dojo.html,args);
-if(_3c3){
-return ret[_3c3];
-}else{
-return ret;
-}
-};
-dojo.html.getViewportWidth=function(){
-return dojo.html._callDeprecated("getViewportWidth","getViewport",arguments,null,"width");
-};
-dojo.html.getViewportHeight=function(){
-return dojo.html._callDeprecated("getViewportHeight","getViewport",arguments,null,"height");
-};
-dojo.html.getViewportSize=function(){
-return dojo.html._callDeprecated("getViewportSize","getViewport",arguments);
-};
-dojo.html.getScrollTop=function(){
-return dojo.html._callDeprecated("getScrollTop","getScroll",arguments,null,"top");
-};
-dojo.html.getScrollLeft=function(){
-return dojo.html._callDeprecated("getScrollLeft","getScroll",arguments,null,"left");
-};
-dojo.html.getScrollOffset=function(){
-return dojo.html._callDeprecated("getScrollOffset","getScroll",arguments,null,"offset");
-};
-dojo.provide("dojo.uri.Uri");
-dojo.uri=new function(){
-var _3c7=new RegExp("^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$");
-var _3c8=new RegExp("(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$");
-var _3c9=new RegExp("/(\\w+.css)");
-this.dojoUri=function(uri){
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
-};
-this.moduleUri=function(_3cb,uri){
-var loc=dojo.hostenv.getModuleSymbols(_3cb).join("/");
-if(!loc){
-return null;
-}
-if(loc.lastIndexOf("/")!=loc.length-1){
-loc+="/";
-}
-var _3ce=loc.indexOf(":");
-var _3cf=loc.indexOf("/");
-if(loc.charAt(0)!="/"&&(_3ce==-1||_3ce>_3cf)){
-loc=dojo.hostenv.getBaseScriptUri()+loc;
-}
-return new dojo.uri.Uri(loc,uri);
-};
-this.Uri=function(){
-var uri=arguments[0];
-if(uri&&arguments.length>1){
-var _3d1=_3c9.exec(uri);
-if(_3d1){
-uri=uri.toString().replace(_3d1[1],"");
-}
-}
-for(var i=1;i<arguments.length;i++){
-if(!arguments[i]){
-continue;
-}
-var _3d3=new dojo.uri.Uri(arguments[i].toString());
-var _3d4=new dojo.uri.Uri(uri.toString());
-if((_3d3.path=="")&&(_3d3.scheme==null)&&(_3d3.authority==null)&&(_3d3.query==null)){
-if(_3d3.fragment!=null){
-_3d4.fragment=_3d3.fragment;
-}
-_3d3=_3d4;
-}
-if(_3d3.scheme!=null&&_3d3.authority!=null){
-uri="";
-}
-if(_3d3.scheme!=null){
-uri+=_3d3.scheme+":";
-}
-if(_3d3.authority!=null){
-uri+="//"+_3d3.authority;
-}
-uri+=_3d3.path;
-if(_3d3.query!=null){
-uri+="?"+_3d3.query;
-}
-if(_3d3.fragment!=null){
-uri+="#"+_3d3.fragment;
-}
-}
-this.uri=uri.toString();
-var r=this.uri.match(_3c8);
-this.scheme=r[2]||(r[1]?"":null);
-this.authority=r[4]||(r[3]?"":null);
-this.path=r[5];
-this.query=r[7]||(r[6]?"":null);
-this.fragment=r[9]||(r[8]?"":null);
-if(this.authority!=null){
-r=this.authority.match(_3c7);
-this.user=r[3]||null;
-this.password=r[4]||null;
-this.host=r[5];
-this.port=r[7]||null;
-}
-this.toString=function(){
-return this.uri;
-};
-};
-};
-dojo.provide("dojo.html.style");
-dojo.html.getClass=function(node){
-node=dojo.byId(node);
-if(!node){
-return "";
-}
-var cs="";
-if(node.className){
-cs=node.className;
-}else{
-if(dojo.html.hasAttribute(node,"class")){
-cs=dojo.html.getAttribute(node,"class");
-}
-}
-return cs.replace(/^\s+|\s+$/g,"");
-};
-dojo.html.getClasses=function(node){
-var c=dojo.html.getClass(node);
-return (c=="")?[]:c.split(/\s+/g);
-};
-dojo.html.hasClass=function(node,_3db){
-return (new RegExp("(^|\\s+)"+_3db+"(\\s+|$)")).test(dojo.html.getClass(node));
-};
-dojo.html.prependClass=function(node,_3dd){
-_3dd+=" "+dojo.html.getClass(node);
-return dojo.html.setClass(node,_3dd);
-};
-dojo.html.addClass=function(node,_3df){
-if(dojo.html.hasClass(node,_3df)){
-return false;
-}
-_3df=(dojo.html.getClass(node)+" "+_3df).replace(/^\s+|\s+$/g,"");
-return dojo.html.setClass(node,_3df);
-};
-dojo.html.setClass=function(node,_3e1){
-node=dojo.byId(node);
-var cs=new String(_3e1);
-try{
-if(typeof node.className=="string"){
-node.className=cs;
-}else{
-if(node.setAttribute){
-node.setAttribute("class",_3e1);
-node.className=cs;
-}else{
-return false;
-}
-}
-}
-catch(e){
-dojo.debug("dojo.html.setClass() failed",e);
-}
-return true;
-};
-dojo.html.removeClass=function(node,_3e4,_3e5){
-try{
-if(!_3e5){
-var _3e6=dojo.html.getClass(node).replace(new RegExp("(^|\\s+)"+_3e4+"(\\s+|$)"),"$1$2");
-}else{
-var _3e6=dojo.html.getClass(node).replace(_3e4,"");
-}
-dojo.html.setClass(node,_3e6);
-}
-catch(e){
-dojo.debug("dojo.html.removeClass() failed",e);
-}
-return true;
-};
-dojo.html.replaceClass=function(node,_3e8,_3e9){
-dojo.html.removeClass(node,_3e9);
-dojo.html.addClass(node,_3e8);
-};
-dojo.html.classMatchType={ContainsAll:0,ContainsAny:1,IsOnly:2};
-dojo.html.getElementsByClass=function(_3ea,_3eb,_3ec,_3ed,_3ee){
-_3ee=false;
-var _3ef=dojo.doc();
-_3eb=dojo.byId(_3eb)||_3ef;
-var _3f0=_3ea.split(/\s+/g);
-var _3f1=[];
-if(_3ed!=1&&_3ed!=2){
-_3ed=0;
-}
-var _3f2=new RegExp("(\\s|^)(("+_3f0.join(")|(")+"))(\\s|$)");
-var _3f3=_3f0.join(" ").length;
-var _3f4=[];
-if(!_3ee&&_3ef.evaluate){
-var _3f5=".//"+(_3ec||"*")+"[contains(";
-if(_3ed!=dojo.html.classMatchType.ContainsAny){
-_3f5+="concat(' ',@class,' '), ' "+_3f0.join(" ') and contains(concat(' ',@class,' '), ' ")+" ')";
-if(_3ed==2){
-_3f5+=" and string-length(@class)="+_3f3+"]";
-}else{
-_3f5+="]";
-}
-}else{
-_3f5+="concat(' ',@class,' '), ' "+_3f0.join(" ') or contains(concat(' ',@class,' '), ' ")+" ')]";
-}
-var _3f6=_3ef.evaluate(_3f5,_3eb,null,XPathResult.ANY_TYPE,null);
-var _3f7=_3f6.iterateNext();
-while(_3f7){
-try{
-_3f4.push(_3f7);
-_3f7=_3f6.iterateNext();
-}
-catch(e){
-break;
-}
-}
-return _3f4;
-}else{
-if(!_3ec){
-_3ec="*";
-}
-_3f4=_3eb.getElementsByTagName(_3ec);
-var node,i=0;
-outer:
-while(node=_3f4[i++]){
-var _3fa=dojo.html.getClasses(node);
-if(_3fa.length==0){
-continue outer;
-}
-var _3fb=0;
-for(var j=0;j<_3fa.length;j++){
-if(_3f2.test(_3fa[j])){
-if(_3ed==dojo.html.classMatchType.ContainsAny){
-_3f1.push(node);
-continue outer;
-}else{
-_3fb++;
-}
-}else{
-if(_3ed==dojo.html.classMatchType.IsOnly){
-continue outer;
-}
-}
-}
-if(_3fb==_3f0.length){
-if((_3ed==dojo.html.classMatchType.IsOnly)&&(_3fb==_3fa.length)){
-_3f1.push(node);
-}else{
-if(_3ed==dojo.html.classMatchType.ContainsAll){
-_3f1.push(node);
-}
-}
-}
-}
-return _3f1;
-}
-};
-dojo.html.getElementsByClassName=dojo.html.getElementsByClass;
-dojo.html.toCamelCase=function(_3fd){
-var arr=_3fd.split("-"),cc=arr[0];
-for(var i=1;i<arr.length;i++){
-cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
-}
-return cc;
-};
-dojo.html.toSelectorCase=function(_401){
-return _401.replace(/([A-Z])/g,"-$1").toLowerCase();
-};
-if(dojo.render.html.ie){
-dojo.html.getComputedStyle=function(node,_403,_404){
-node=dojo.byId(node);
-if(!node||!node.currentStyle){
-return _404;
-}
-return node.currentStyle[dojo.html.toCamelCase(_403)];
-};
-dojo.html.getComputedStyles=function(node){
-return node.currentStyle;
-};
-}else{
-dojo.html.getComputedStyle=function(node,_407,_408){
-node=dojo.byId(node);
-if(!node||!node.style){
-return _408;
-}
-var s=document.defaultView.getComputedStyle(node,null);
-return (s&&s[dojo.html.toCamelCase(_407)])||"";
-};
-dojo.html.getComputedStyles=function(node){
-return document.defaultView.getComputedStyle(node,null);
-};
-}
-dojo.html.getStyleProperty=function(node,_40c){
-node=dojo.byId(node);
-return (node&&node.style?node.style[dojo.html.toCamelCase(_40c)]:undefined);
-};
-dojo.html.getStyle=function(node,_40e){
-var _40f=dojo.html.getStyleProperty(node,_40e);
-return (_40f?_40f:dojo.html.getComputedStyle(node,_40e));
-};
-dojo.html.setStyle=function(node,_411,_412){
-node=dojo.byId(node);
-if(node&&node.style){
-var _413=dojo.html.toCamelCase(_411);
-node.style[_413]=_412;
-}
-};
-dojo.html.setStyleText=function(_414,text){
-try{
-_414.style.cssText=text;
-}
-catch(e){
-_414.setAttribute("style",text);
-}
-};
-dojo.html.copyStyle=function(_416,_417){
-if(!_417.style.cssText){
-_416.setAttribute("style",_417.getAttribute("style"));
-}else{
-_416.style.cssText=_417.style.cssText;
-}
-dojo.html.addClass(_416,dojo.html.getClass(_417));
-};
-dojo.html.getUnitValue=function(node,_419,_41a){
-var s=dojo.html.getComputedStyle(node,_419);
-if((!s)||((s=="auto")&&(_41a))){
-return {value:0,units:"px"};
-}
-var _41c=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_41c){
-return dojo.html.getUnitValue.bad;
-}
-return {value:Number(_41c[1]),units:_41c[2].toLowerCase()};
-};
-dojo.html.getUnitValue.bad={value:NaN,units:""};
-if(dojo.render.html.ie){
-dojo.html.toPixelValue=function(_41d,_41e){
-if(!_41e){
-return 0;
-}
-if(_41e.slice(-2)=="px"){
-return parseFloat(_41e);
-}
-var _41f=0;
-with(_41d){
-var _420=style.left;
-var _421=runtimeStyle.left;
-runtimeStyle.left=currentStyle.left;
-try{
-style.left=_41e||0;
-_41f=style.pixelLeft;
-style.left=_420;
-runtimeStyle.left=_421;
-}
-catch(e){
-}
-}
-return _41f;
-};
-}else{
-dojo.html.toPixelValue=function(_422,_423){
-return (_423&&(_423.slice(-2)=="px")?parseFloat(_423):0);
-};
-}
-dojo.html.getPixelValue=function(node,_425,_426){
-return dojo.html.toPixelValue(node,dojo.html.getComputedStyle(node,_425));
-};
-dojo.html.setPositivePixelValue=function(node,_428,_429){
-if(isNaN(_429)){
-return false;
-}
-node.style[_428]=Math.max(0,_429)+"px";
-return true;
-};
-dojo.html.styleSheet=null;
-dojo.html.insertCssRule=function(_42a,_42b,_42c){
-if(!dojo.html.styleSheet){
-if(document.createStyleSheet){
-dojo.html.styleSheet=document.createStyleSheet();
-}else{
-if(document.styleSheets[0]){
-dojo.html.styleSheet=document.styleSheets[0];
-}else{
-return null;
-}
-}
-}
-if(arguments.length<3){
-if(dojo.html.styleSheet.cssRules){
-_42c=dojo.html.styleSheet.cssRules.length;
-}else{
-if(dojo.html.styleSheet.rules){
-_42c=dojo.html.styleSheet.rules.length;
-}else{
-return null;
-}
-}
-}
-if(dojo.html.styleSheet.insertRule){
-var rule=_42a+" { "+_42b+" }";
-return dojo.html.styleSheet.insertRule(rule,_42c);
-}else{
-if(dojo.html.styleSheet.addRule){
-return dojo.html.styleSheet.addRule(_42a,_42b,_42c);
-}else{
-return null;
-}
-}
-};
-dojo.html.removeCssRule=function(_42e){
-if(!dojo.html.styleSheet){
-dojo.debug("no stylesheet defined for removing rules");
-return false;
-}
-if(dojo.render.html.ie){
-if(!_42e){
-_42e=dojo.html.styleSheet.rules.length;
-dojo.html.styleSheet.removeRule(_42e);
-}
-}else{
-if(document.styleSheets[0]){
-if(!_42e){
-_42e=dojo.html.styleSheet.cssRules.length;
-}
-dojo.html.styleSheet.deleteRule(_42e);
-}
-}
-return true;
-};
-dojo.html._insertedCssFiles=[];
-dojo.html.insertCssFile=function(URI,doc,_431,_432){
-if(!URI){
-return;
-}
-if(!doc){
-doc=document;
-}
-var _433=dojo.hostenv.getText(URI,false,_432);
-if(_433===null){
-return;
-}
-_433=dojo.html.fixPathsInCssText(_433,URI);
-if(_431){
-var idx=-1,node,ent=dojo.html._insertedCssFiles;
-for(var i=0;i<ent.length;i++){
-if((ent[i].doc==doc)&&(ent[i].cssText==_433)){
-idx=i;
-node=ent[i].nodeRef;
-break;
-}
-}
-if(node){
-var _438=doc.getElementsByTagName("style");
-for(var i=0;i<_438.length;i++){
-if(_438[i]==node){
-return;
-}
-}
-dojo.html._insertedCssFiles.shift(idx,1);
-}
-}
-var _439=dojo.html.insertCssText(_433,doc);
-dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_433,"nodeRef":_439});
-if(_439&&djConfig.isDebug){
-_439.setAttribute("dbgHref",URI);
-}
-return _439;
-};
-dojo.html.insertCssText=function(_43a,doc,URI){
-if(!_43a){
-return;
-}
-if(!doc){
-doc=document;
-}
-if(URI){
-_43a=dojo.html.fixPathsInCssText(_43a,URI);
-}
-var _43d=doc.createElement("style");
-_43d.setAttribute("type","text/css");
-var head=doc.getElementsByTagName("head")[0];
-if(!head){
-dojo.debug("No head tag in document, aborting styles");
-return;
-}else{
-head.appendChild(_43d);
-}
-if(_43d.styleSheet){
-var _43f=function(){
-try{
-_43d.styleSheet.cssText=_43a;
-}
-catch(e){
-dojo.debug(e);
-}
-};
-if(_43d.styleSheet.disabled){
-setTimeout(_43f,10);
-}else{
-_43f();
-}
-}else{
-var _440=doc.createTextNode(_43a);
-_43d.appendChild(_440);
-}
-return _43d;
-};
-dojo.html.fixPathsInCssText=function(_441,URI){
-if(!_441||!URI){
-return;
-}
-var _443,str="",url="",_446="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-var _447=new RegExp("url\\(\\s*("+_446+")\\s*\\)");
-var _448=/(file|https?|ftps?):\/\//;
-regexTrim=new RegExp("^[\\s]*(['\"]?)("+_446+")\\1[\\s]*?$");
-if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _449=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_446+")['\"]");
-while(_443=_449.exec(_441)){
-url=_443[2].replace(regexTrim,"$2");
-if(!_448.exec(url)){
-url=(new dojo.uri.Uri(URI,url).toString());
-}
-str+=_441.substring(0,_443.index)+"AlphaImageLoader("+_443[1]+"src='"+url+"'";
-_441=_441.substr(_443.index+_443[0].length);
-}
-_441=str+_441;
-str="";
-}
-while(_443=_447.exec(_441)){
-url=_443[1].replace(regexTrim,"$2");
-if(!_448.exec(url)){
-url=(new dojo.uri.Uri(URI,url).toString());
-}
-str+=_441.substring(0,_443.index)+"url("+url+")";
-_441=_441.substr(_443.index+_443[0].length);
-}
-return str+_441;
-};
-dojo.html.setActiveStyleSheet=function(_44a){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
-a.disabled=true;
-if(a.getAttribute("title")==_44a){
-a.disabled=false;
-}
-}
-}
-};
-dojo.html.getActiveStyleSheet=function(){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")&&!a.disabled){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.getPreferredStyleSheet=function(){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("rel").indexOf("alt")==-1&&a.getAttribute("title")){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.applyBrowserClass=function(node){
-var drh=dojo.render.html;
-var _456={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
-for(var p in _456){
-if(_456[p]){
-dojo.html.addClass(node,p);
-}
-}
-};
-dojo.kwCompoundRequire({common:["dojo.html.common","dojo.html.style"]});
-dojo.provide("dojo.html.*");
-dojo.provide("dojo.html.display");
-dojo.html._toggle=function(node,_459,_45a){
-node=dojo.byId(node);
-_45a(node,!_459(node));
-return _459(node);
-};
-dojo.html.show=function(node){
-node=dojo.byId(node);
-if(dojo.html.getStyleProperty(node,"display")=="none"){
-dojo.html.setStyle(node,"display",(node.dojoDisplayCache||""));
-node.dojoDisplayCache=undefined;
-}
-};
-dojo.html.hide=function(node){
-node=dojo.byId(node);
-if(typeof node["dojoDisplayCache"]=="undefined"){
-var d=dojo.html.getStyleProperty(node,"display");
-if(d!="none"){
-node.dojoDisplayCache=d;
-}
-}
-dojo.html.setStyle(node,"display","none");
-};
-dojo.html.setShowing=function(node,_45f){
-dojo.html[(_45f?"show":"hide")](node);
-};
-dojo.html.isShowing=function(node){
-return (dojo.html.getStyleProperty(node,"display")!="none");
-};
-dojo.html.toggleShowing=function(node){
-return dojo.html._toggle(node,dojo.html.isShowing,dojo.html.setShowing);
-};
-dojo.html.displayMap={tr:"",td:"",th:"",img:"inline",span:"inline",input:"inline",button:"inline"};
-dojo.html.suggestDisplayByTagName=function(node){
-node=dojo.byId(node);
-if(node&&node.tagName){
-var tag=node.tagName.toLowerCase();
-return (tag in dojo.html.displayMap?dojo.html.displayMap[tag]:"block");
-}
-};
-dojo.html.setDisplay=function(node,_465){
-dojo.html.setStyle(node,"display",((_465 instanceof String||typeof _465=="string")?_465:(_465?dojo.html.suggestDisplayByTagName(node):"none")));
-};
-dojo.html.isDisplayed=function(node){
-return (dojo.html.getComputedStyle(node,"display")!="none");
-};
-dojo.html.toggleDisplay=function(node){
-return dojo.html._toggle(node,dojo.html.isDisplayed,dojo.html.setDisplay);
-};
-dojo.html.setVisibility=function(node,_469){
-dojo.html.setStyle(node,"visibility",((_469 instanceof String||typeof _469=="string")?_469:(_469?"visible":"hidden")));
-};
-dojo.html.isVisible=function(node){
-return (dojo.html.getComputedStyle(node,"visibility")!="hidden");
-};
-dojo.html.toggleVisibility=function(node){
-return dojo.html._toggle(node,dojo.html.isVisible,dojo.html.setVisibility);
-};
-dojo.html.setOpacity=function(node,_46d,_46e){
-node=dojo.byId(node);
-var h=dojo.render.html;
-if(!_46e){
-if(_46d>=1){
-if(h.ie){
-dojo.html.clearOpacity(node);
-return;
-}else{
-_46d=0.999999;
-}
-}else{
-if(_46d<0){
-_46d=0;
-}
-}
-}
-if(h.ie){
-if(node.nodeName.toLowerCase()=="tr"){
-var tds=node.getElementsByTagName("td");
-for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_46d*100+")";
-}
-}
-node.style.filter="Alpha(Opacity="+_46d*100+")";
-}else{
-if(h.moz){
-node.style.opacity=_46d;
-node.style.MozOpacity=_46d;
-}else{
-if(h.safari){
-node.style.opacity=_46d;
-node.style.KhtmlOpacity=_46d;
-}else{
-node.style.opacity=_46d;
-}
-}
-}
-};
-dojo.html.clearOpacity=function(node){
-node=dojo.byId(node);
-var ns=node.style;
-var h=dojo.render.html;
-if(h.ie){
-try{
-if(node.filters&&node.filters.alpha){
-ns.filter="";
-}
-}
-catch(e){
-}
-}else{
-if(h.moz){
-ns.opacity=1;
-ns.MozOpacity=1;
-}else{
-if(h.safari){
-ns.opacity=1;
-ns.KhtmlOpacity=1;
-}else{
-ns.opacity=1;
-}
-}
-}
-};
-dojo.html.getOpacity=function(node){
-node=dojo.byId(node);
-var h=dojo.render.html;
-if(h.ie){
-var opac=(node.filters&&node.filters.alpha&&typeof node.filters.alpha.opacity=="number"?node.filters.alpha.opacity:100)/100;
-}else{
-var opac=node.style.opacity||node.style.MozOpacity||node.style.KhtmlOpacity||1;
-}
-return opac>=0.999999?1:Number(opac);
-};
-dojo.provide("dojo.ns");
-dojo.ns={namespaces:{},failed:{},loading:{},loaded:{},register:function(name,_479,_47a,_47b){
-if(!_47b||!this.namespaces[name]){
-this.namespaces[name]=new dojo.ns.Ns(name,_479,_47a);
-}
-},allow:function(name){
-if(this.failed[name]){
-return false;
-}
-if((djConfig.excludeNamespace)&&(dojo.lang.inArray(djConfig.excludeNamespace,name))){
-return false;
-}
-return ((name==this.dojo)||(!djConfig.includeNamespace)||(dojo.lang.inArray(djConfig.includeNamespace,name)));
-},get:function(name){
-return this.namespaces[name];
-},require:function(name){
-var ns=this.namespaces[name];
-if((ns)&&(this.loaded[name])){
-return ns;
-}
-if(!this.allow(name)){
-return false;
-}
-if(this.loading[name]){
-dojo.debug("dojo.namespace.require: re-entrant request to load namespace \""+name+"\" must fail.");
-return false;
-}
-var req=dojo.require;
-this.loading[name]=true;
-try{
-if(name=="dojo"){
-req("dojo.namespaces.dojo");
-}else{
-if(!dojo.hostenv.moduleHasPrefix(name)){
-dojo.registerModulePath(name,"../"+name);
-}
-req([name,"manifest"].join("."),false,true);
-}
-if(!this.namespaces[name]){
-this.failed[name]=true;
-}
-}
-finally{
-this.loading[name]=false;
-}
-return this.namespaces[name];
-}};
-dojo.ns.Ns=function(name,_482,_483){
-this.name=name;
-this.module=_482;
-this.resolver=_483;
-this._loaded=[];
-this._failed=[];
-};
-dojo.ns.Ns.prototype.resolve=function(name,_485,_486){
-if(!this.resolver||djConfig["skipAutoRequire"]){
-return false;
-}
-var _487=this.resolver(name,_485);
-if((_487)&&(!this._loaded[_487])&&(!this._failed[_487])){
-var req=dojo.require;
-req(_487,false,true);
-if(dojo.hostenv.findModule(_487,false)){
-this._loaded[_487]=true;
-}else{
-if(!_486){
-dojo.raise("dojo.ns.Ns.resolve: module '"+_487+"' not found after loading via namespace '"+this.name+"'");
-}
-this._failed[_487]=true;
-}
-}
-return Boolean(this._loaded[_487]);
-};
-dojo.registerNamespace=function(name,_48a,_48b){
-dojo.ns.register.apply(dojo.ns,arguments);
-};
-dojo.registerNamespaceResolver=function(name,_48d){
-var n=dojo.ns.namespaces[name];
-if(n){
-n.resolver=_48d;
-}
-};
-dojo.registerNamespaceManifest=function(_48f,path,name,_492,_493){
-dojo.registerModulePath(name,path);
-dojo.registerNamespace(name,_492,_493);
-};
-dojo.registerNamespace("dojo","dojo.widget");
-dojo.provide("dojo.event.topic");
-dojo.event.topic=new function(){
-this.topics={};
-this.getTopic=function(_494){
-if(!this.topics[_494]){
-this.topics[_494]=new this.TopicImpl(_494);
-}
-return this.topics[_494];
-};
-this.registerPublisher=function(_495,obj,_497){
-var _495=this.getTopic(_495);
-_495.registerPublisher(obj,_497);
-};
-this.subscribe=function(_498,obj,_49a){
-var _498=this.getTopic(_498);
-_498.subscribe(obj,_49a);
-};
-this.unsubscribe=function(_49b,obj,_49d){
-var _49b=this.getTopic(_49b);
-_49b.unsubscribe(obj,_49d);
-};
-this.destroy=function(_49e){
-this.getTopic(_49e).destroy();
-delete this.topics[_49e];
-};
-this.publishApply=function(_49f,args){
-var _49f=this.getTopic(_49f);
-_49f.sendMessage.apply(_49f,args);
-};
-this.publish=function(_4a1,_4a2){
-var _4a1=this.getTopic(_4a1);
-var args=[];
-for(var x=1;x<arguments.length;x++){
-args.push(arguments[x]);
-}
-_4a1.sendMessage.apply(_4a1,args);
-};
-};
-dojo.event.topic.TopicImpl=function(_4a5){
-this.topicName=_4a5;
-this.subscribe=function(_4a6,_4a7){
-var tf=_4a7||_4a6;
-var to=(!_4a7)?dj_global:_4a6;
-return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this.unsubscribe=function(_4aa,_4ab){
-var tf=(!_4ab)?_4aa:_4ab;
-var to=(!_4ab)?null:_4aa;
-return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this._getJoinPoint=function(){
-return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
-};
-this.setSquelch=function(_4ae){
-this._getJoinPoint().squelch=_4ae;
-};
-this.destroy=function(){
-this._getJoinPoint().disconnect();
-};
-this.registerPublisher=function(_4af,_4b0){
-dojo.event.connect(_4af,_4b0,this,"sendMessage");
-};
-this.sendMessage=function(_4b1){
-};
-};
-dojo.kwCompoundRequire({common:["dojo.event.common","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
-dojo.provide("dojo.event.*");
-dojo.provide("dojo.widget.Manager");
-dojo.widget.manager=new function(){
-this.widgets=[];
-this.widgetIds=[];
-this.topWidgets={};
-var _4b2={};
-var _4b3=[];
-this.getUniqueId=function(_4b4){
-var _4b5;
-do{
-_4b5=_4b4+"_"+(_4b2[_4b4]!=undefined?++_4b2[_4b4]:_4b2[_4b4]=0);
-}while(this.getWidgetById(_4b5));
-return _4b5;
-};
-this.add=function(_4b6){
-this.widgets.push(_4b6);
-if(!_4b6.extraArgs["id"]){
-_4b6.extraArgs["id"]=_4b6.extraArgs["ID"];
-}
-if(_4b6.widgetId==""){
-if(_4b6["id"]){
-_4b6.widgetId=_4b6["id"];
-}else{
-if(_4b6.extraArgs["id"]){
-_4b6.widgetId=_4b6.extraArgs["id"];
-}else{
-_4b6.widgetId=this.getUniqueId(_4b6.ns+"_"+_4b6.widgetType);
-}
-}
-}
-if(this.widgetIds[_4b6.widgetId]){
-dojo.debug("widget ID collision on ID: "+_4b6.widgetId);
-}
-this.widgetIds[_4b6.widgetId]=_4b6;
-};
-this.destroyAll=function(){
-for(var x=this.widgets.length-1;x>=0;x--){
-try{
-this.widgets[x].destroy(true);
-delete this.widgets[x];
-}
-catch(e){
-}
-}
-};
-this.remove=function(_4b8){
-if(dojo.lang.isNumber(_4b8)){
-var tw=this.widgets[_4b8].widgetId;
-delete this.topWidgets[tw];
-delete this.widgetIds[tw];
-this.widgets.splice(_4b8,1);
-}else{
-this.removeById(_4b8);
-}
-};
-this.removeById=function(id){
-if(!dojo.lang.isString(id)){
-id=id["widgetId"];
-if(!id){
-dojo.debug("invalid widget or id passed to removeById");
-return;
-}
-}
-for(var i=0;i<this.widgets.length;i++){
-if(this.widgets[i].widgetId==id){
-this.remove(i);
-break;
-}
-}
-};
-this.getWidgetById=function(id){
-if(dojo.lang.isString(id)){
-return this.widgetIds[id];
-}
-return id;
-};
-this.getWidgetsByType=function(type){
-var lt=type.toLowerCase();
-var _4bf=(type.indexOf(":")<0?function(x){
-return x.widgetType.toLowerCase();
-}:function(x){
-return x.getNamespacedType();
-});
-var ret=[];
-dojo.lang.forEach(this.widgets,function(x){
-if(_4bf(x)==lt){
-ret.push(x);
-}
-});
-return ret;
-};
-this.getWidgetsByFilter=function(_4c4,_4c5){
-var ret=[];
-dojo.lang.every(this.widgets,function(x){
-if(_4c4(x)){
-ret.push(x);
-if(_4c5){
-return false;
-}
-}
-return true;
-});
-return (_4c5?ret[0]:ret);
-};
-this.getAllWidgets=function(){
-return this.widgets.concat();
-};
-this.getWidgetByNode=function(node){
-var w=this.getAllWidgets();
-node=dojo.byId(node);
-for(var i=0;i<w.length;i++){
-if(w[i].domNode==node){
-return w[i];
-}
-}
-return null;
-};
-this.byId=this.getWidgetById;
-this.byType=this.getWidgetsByType;
-this.byFilter=this.getWidgetsByFilter;
-this.byNode=this.getWidgetByNode;
-var _4cb={};
-var _4cc=["dojo.widget"];
-for(var i=0;i<_4cc.length;i++){
-_4cc[_4cc[i]]=true;
-}
-this.registerWidgetPackage=function(_4ce){
-if(!_4cc[_4ce]){
-_4cc[_4ce]=true;
-_4cc.push(_4ce);
-}
-};
-this.getWidgetPackageList=function(){
-return dojo.lang.map(_4cc,function(elt){
-return (elt!==true?elt:undefined);
-});
-};
-this.getImplementation=function(_4d0,_4d1,_4d2,ns){
-var impl=this.getImplementationName(_4d0,ns);
-if(impl){
-var ret=_4d1?new impl(_4d1):new impl();
-return ret;
-}
-};
-function buildPrefixCache(){
-for(var _4d6 in dojo.render){
-if(dojo.render[_4d6]["capable"]===true){
-var _4d7=dojo.render[_4d6].prefixes;
-for(var i=0;i<_4d7.length;i++){
-_4b3.push(_4d7[i].toLowerCase());
-}
-}
-}
-}
-var _4d9=function(_4da,_4db){
-if(!_4db){
-return null;
-}
-for(var i=0,l=_4b3.length,_4de;i<=l;i++){
-_4de=(i<l?_4db[_4b3[i]]:_4db);
-if(!_4de){
-continue;
-}
-for(var name in _4de){
-if(name.toLowerCase()==_4da){
-return _4de[name];
-}
-}
-}
-return null;
-};
-var _4e0=function(_4e1,_4e2){
-var _4e3=dojo.evalObjPath(_4e2,false);
-return (_4e3?_4d9(_4e1,_4e3):null);
-};
-this.getImplementationName=function(_4e4,ns){
-var _4e6=_4e4.toLowerCase();
-ns=ns||"dojo";
-var imps=_4cb[ns]||(_4cb[ns]={});
-var impl=imps[_4e6];
-if(impl){
-return impl;
-}
-if(!_4b3.length){
-buildPrefixCache();
-}
-var _4e9=dojo.ns.get(ns);
-if(!_4e9){
-dojo.ns.register(ns,ns+".widget");
-_4e9=dojo.ns.get(ns);
-}
-if(_4e9){
-_4e9.resolve(_4e4);
-}
-impl=_4e0(_4e6,_4e9.module);
-if(impl){
-return (imps[_4e6]=impl);
-}
-_4e9=dojo.ns.require(ns);
-if((_4e9)&&(_4e9.resolver)){
-_4e9.resolve(_4e4);
-impl=_4e0(_4e6,_4e9.module);
-if(impl){
-return (imps[_4e6]=impl);
-}
-}
-dojo.deprecated("dojo.widget.Manager.getImplementationName","Could not locate widget implementation for \""+_4e4+"\" in \""+_4e9.module+"\" registered to namespace \""+_4e9.name+"\". "+"Developers must specify correct namespaces for all non-Dojo widgets","0.5");
-for(var i=0;i<_4cc.length;i++){
-impl=_4e0(_4e6,_4cc[i]);
-if(impl){
-return (imps[_4e6]=impl);
-}
-}
-throw new Error("Could not locate widget implementation for \""+_4e4+"\" in \""+_4e9.module+"\" registered to namespace \""+_4e9.name+"\"");
-};
-this.resizing=false;
-this.onWindowResized=function(){
-if(this.resizing){
-return;
-}
-try{
-this.resizing=true;
-for(var id in this.topWidgets){
-var _4ec=this.topWidgets[id];
-if(_4ec.checkSize){
-_4ec.checkSize();
-}
-}
-}
-catch(e){
-}
-finally{
-this.resizing=false;
-}
-};
-if(typeof window!="undefined"){
-dojo.addOnLoad(this,"onWindowResized");
-dojo.event.connect(window,"onresize",this,"onWindowResized");
-}
-};
-(function(){
-var dw=dojo.widget;
-var dwm=dw.manager;
-var h=dojo.lang.curry(dojo.lang,"hitch",dwm);
-var g=function(_4f1,_4f2){
-dw[(_4f2||_4f1)]=h(_4f1);
-};
-g("add","addWidget");
-g("destroyAll","destroyAllWidgets");
-g("remove","removeWidget");
-g("removeById","removeWidgetById");
-g("getWidgetById");
-g("getWidgetById","byId");
-g("getWidgetsByType");
-g("getWidgetsByFilter");
-g("getWidgetsByType","byType");
-g("getWidgetsByFilter","byFilter");
-g("getWidgetByNode","byNode");
-dw.all=function(n){
-var _4f4=dwm.getAllWidgets.apply(dwm,arguments);
-if(arguments.length>0){
-return _4f4[n];
-}
-return _4f4;
-};
-g("registerWidgetPackage");
-g("getImplementation","getWidgetImplementation");
-g("getImplementationName","getWidgetImplementationName");
-dw.widgets=dwm.widgets;
-dw.widgetIds=dwm.widgetIds;
-dw.root=dwm.root;
-})();
-dojo.provide("dojo.i18n.common");
-dojo.i18n.getLocalization=function(_4f5,_4f6,_4f7){
-dojo.hostenv.preloadLocalizations();
-_4f7=dojo.hostenv.normalizeLocale(_4f7);
-var _4f8=_4f7.split("-");
-var _4f9=[_4f5,"nls",_4f6].join(".");
-var _4fa=dojo.hostenv.findModule(_4f9,true);
-var _4fb;
-for(var i=_4f8.length;i>0;i--){
-var loc=_4f8.slice(0,i).join("_");
-if(_4fa[loc]){
-_4fb=_4fa[loc];
-break;
-}
-}
-if(!_4fb){
-_4fb=_4fa.ROOT;
-}
-if(_4fb){
-var _4fe=function(){
-};
-_4fe.prototype=_4fb;
-return new _4fe();
-}
-dojo.raise("Bundle not found: "+_4f6+" in "+_4f5+" , locale="+_4f7);
-};
-dojo.i18n.isLTR=function(_4ff){
-var lang=dojo.hostenv.normalizeLocale(_4ff).split("-")[0];
-var RTL={ar:true,fa:true,he:true,ur:true,yi:true};
-return !RTL[lang];
-};
-dojo.provide("dojo.tlocale");
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo.js.uncompressed.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo.js.uncompressed.js
deleted file mode 100644
index 3398f12..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo.js.uncompressed.js
+++ /dev/null
@@ -1,8385 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-if(typeof dojo == "undefined"){
-
-// TODOC: HOW TO DOC THE BELOW?
-// @global: djConfig
-// summary:
-//		Application code can set the global 'djConfig' prior to loading
-//		the library to override certain global settings for how dojo works.
-// description:  The variables that can be set are as follows:
-//			- isDebug: false
-//			- allowQueryConfig: false
-//			- baseScriptUri: ""
-//			- baseRelativePath: ""
-//			- libraryScriptUri: ""
-//			- iePreventClobber: false
-//			- ieClobberMinimal: true
-//			- locale: undefined
-//			- extraLocale: undefined
-//			- preventBackButtonFix: true
-//			- searchIds: []
-//			- parseWidgets: true
-// TODOC: HOW TO DOC THESE VARIABLES?
-// TODOC: IS THIS A COMPLETE LIST?
-// note:
-//		'djConfig' does not exist under 'dojo.*' so that it can be set before the
-//		'dojo' variable exists.
-// note:
-//		Setting any of these variables *after* the library has loaded does nothing at all.
-// TODOC: is this still true?  Release notes for 0.3 indicated they could be set after load.
-//
-
-
-//TODOC:  HOW TO DOC THIS?
-// @global: dj_global
-// summary:
-//		an alias for the top-level global object in the host environment
-//		(e.g., the window object in a browser).
-// description:
-//		Refer to 'dj_global' rather than referring to window to ensure your
-//		code runs correctly in contexts other than web browsers (eg: Rhino on a server).
-var dj_global = this;
-
-//TODOC:  HOW TO DOC THIS?
-// @global: dj_currentContext
-// summary:
-//		Private global context object. Where 'dj_global' always refers to the boot-time
-//    global context, 'dj_currentContext' can be modified for temporary context shifting.
-//    dojo.global() returns dj_currentContext.
-// description:
-//		Refer to dojo.global() rather than referring to dj_global to ensure your
-//		code runs correctly in managed contexts.
-var dj_currentContext = this;
-
-
-// ****************************************************************
-// global public utils
-// TODOC: DO WE WANT TO NOTE THAT THESE ARE GLOBAL PUBLIC UTILS?
-// ****************************************************************
-
-function dj_undef(/*String*/ name, /*Object?*/ object){
-	//summary: Returns true if 'name' is defined on 'object' (or globally if 'object' is null).
-	//description: Note that 'defined' and 'exists' are not the same concept.
-	return (typeof (object || dj_currentContext)[name] == "undefined");	// Boolean
-}
-
-// make sure djConfig is defined
-if(dj_undef("djConfig", this)){
-	var djConfig = {};
-}
-
-//TODOC:  HOW TO DOC THIS?
-// dojo is the root variable of (almost all) our public symbols -- make sure it is defined.
-if(dj_undef("dojo", this)){
-	var dojo = {};
-}
-
-dojo.global = function(){
-	// summary:
-	//		return the current global context object
-	//		(e.g., the window object in a browser).
-	// description:
-	//		Refer to 'dojo.global()' rather than referring to window to ensure your
-	//		code runs correctly in contexts other than web browsers (eg: Rhino on a server).
-	return dj_currentContext;
-}
-
-// Override locale setting, if specified
-dojo.locale  = djConfig.locale;
-
-//TODOC:  HOW TO DOC THIS?
-dojo.version = {
-	// summary: version number of this instance of dojo.
-	major: 0, minor: 0, patch: 0, flag: "dev",
-	revision: Number("$Rev$".match(/[0-9]+/)[0]),
-	toString: function(){
-		with(dojo.version){
-			return major + "." + minor + "." + patch + flag + " (" + revision + ")";	// String
-		}
-	}
-}
-
-dojo.evalProp = function(/*String*/ name, /*Object*/ object, /*Boolean?*/ create){
-	// summary: Returns 'object[name]'.  If not defined and 'create' is true, will return a new Object.
-	// description:
-	//		Returns null if 'object[name]' is not defined and 'create' is not true.
-	// 		Note: 'defined' and 'exists' are not the same concept.
-	if((!object)||(!name)) return undefined; // undefined
-	if(!dj_undef(name, object)) return object[name]; // mixed
-	return (create ? (object[name]={}) : undefined);	// mixed
-}
-
-dojo.parseObjPath = function(/*String*/ path, /*Object?*/ context, /*Boolean?*/ create){
-	// summary: Parse string path to an object, and return corresponding object reference and property name.
-	// description:
-	//		Returns an object with two properties, 'obj' and 'prop'.
-	//		'obj[prop]' is the reference indicated by 'path'.
-	// path: Path to an object, in the form "A.B.C".
-	// context: Object to use as root of path.  Defaults to 'dojo.global()'.
-	// create: If true, Objects will be created at any point along the 'path' that is undefined.
-	var object = (context || dojo.global());
-	var names = path.split('.');
-	var prop = names.pop();
-	for (var i=0,l=names.length;i<l && object;i++){
-		object = dojo.evalProp(names[i], object, create);
-	}
-	return {obj: object, prop: prop};	// Object: {obj: Object, prop: String}
-}
-
-dojo.evalObjPath = function(/*String*/ path, /*Boolean?*/ create){
-	// summary: Return the value of object at 'path' in the global scope, without using 'eval()'.
-	// path: Path to an object, in the form "A.B.C".
-	// create: If true, Objects will be created at any point along the 'path' that is undefined.
-	if(typeof path != "string"){
-		return dojo.global();
-	}
-	// fast path for no periods
-	if(path.indexOf('.') == -1){
-		return dojo.evalProp(path, dojo.global(), create);		// mixed
-	}
-
-	//MOW: old 'with' syntax was confusing and would throw an error if parseObjPath returned null.
-	var ref = dojo.parseObjPath(path, dojo.global(), create);
-	if(ref){
-		return dojo.evalProp(ref.prop, ref.obj, create);	// mixed
-	}
-	return null;
-}
-
-dojo.errorToString = function(/*Error*/ exception){
-	// summary: Return an exception's 'message', 'description' or text.
-
-	// TODO: overriding Error.prototype.toString won't accomplish this?
- 	// 		... since natively generated Error objects do not always reflect such things?
-	if(!dj_undef("message", exception)){
-		return exception.message;		// String
-	}else if(!dj_undef("description", exception)){
-		return exception.description;	// String
-	}else{
-		return exception;				// Error
-	}
-}
-
-dojo.raise = function(/*String*/ message, /*Error?*/ exception){
-	// summary: Common point for raising exceptions in Dojo to enable logging.
-	//	Throws an error message with text of 'exception' if provided, or
-	//	rethrows exception object.
-
-	if(exception){
-		message = message + ": "+dojo.errorToString(exception);
-	}else{
-		message = dojo.errorToString(message);
-	}
-
-	// print the message to the user if hostenv.println is defined
-	try { if(djConfig.isDebug){ dojo.hostenv.println("FATAL exception raised: "+message); } } catch (e) {}
-
-	throw exception || Error(message);
-}
-
-//Stub functions so things don't break.
-//TODOC:  HOW TO DOC THESE?
-dojo.debug = function(){};
-dojo.debugShallow = function(obj){};
-dojo.profile = { start: function(){}, end: function(){}, stop: function(){}, dump: function(){} };
-
-function dj_eval(/*String*/ scriptFragment){
-	// summary: Perform an evaluation in the global scope.  Use this rather than calling 'eval()' directly.
-	// description: Placed in a separate function to minimize size of trapped evaluation context.
-	// note:
-	//	 - JSC eval() takes an optional second argument which can be 'unsafe'.
-	//	 - Mozilla/SpiderMonkey eval() takes an optional second argument which is the
-	//  	 scope object for new symbols.
-	return dj_global.eval ? dj_global.eval(scriptFragment) : eval(scriptFragment); 	// mixed
-}
-
-dojo.unimplemented = function(/*String*/ funcname, /*String?*/ extra){
-	// summary: Throw an exception because some function is not implemented.
-	// extra: Text to append to the exception message.
-	var message = "'" + funcname + "' not implemented";
-	if (extra != null) { message += " " + extra; }
-	dojo.raise(message);
-}
-
-dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){
-	// summary: Log a debug message to indicate that a behavior has been deprecated.
-	// extra: Text to append to the message.
-	// removal: Text to indicate when in the future the behavior will be removed.
-	var message = "DEPRECATED: " + behaviour;
-	if(extra){ message += " " + extra; }
-	if(removal){ message += " -- will be removed in version: " + removal; }
-	dojo.debug(message);
-}
-
-dojo.render = (function(){
-	//TODOC: HOW TO DOC THIS?
-	// summary: Details rendering support, OS and browser of the current environment.
-	// TODOC: is this something many folks will interact with?  If so, we should doc the structure created...
-	function vscaffold(prefs, names){
-		var tmp = {
-			capable: false,
-			support: {
-				builtin: false,
-				plugin: false
-			},
-			prefixes: prefs
-		};
-		for(var i=0; i<names.length; i++){
-			tmp[names[i]] = false;
-		}
-		return tmp;
-	}
-
-	return {
-		name: "",
-		ver: dojo.version,
-		os: { win: false, linux: false, osx: false },
-		html: vscaffold(["html"], ["ie", "opera", "khtml", "safari", "moz"]),
-		svg: vscaffold(["svg"], ["corel", "adobe", "batik"]),
-		vml: vscaffold(["vml"], ["ie"]),
-		swf: vscaffold(["Swf", "Flash", "Mm"], ["mm"]),
-		swt: vscaffold(["Swt"], ["ibm"])
-	};
-})();
-
-// ****************************************************************
-// dojo.hostenv methods that must be defined in hostenv_*.js
-// ****************************************************************
-
-/**
- * The interface definining the interaction with the EcmaScript host environment.
-*/
-
-/*
- * None of these methods should ever be called directly by library users.
- * Instead public methods such as loadModule should be called instead.
- */
-dojo.hostenv = (function(){
-	// TODOC:  HOW TO DOC THIS?
-	// summary: Provides encapsulation of behavior that changes across different 'host environments'
-	//			(different browsers, server via Rhino, etc).
-	// description: None of these methods should ever be called directly by library users.
-	//				Use public methods such as 'loadModule' instead.
-
-	// default configuration options
-	var config = {
-		isDebug: false,
-		allowQueryConfig: false,
-		baseScriptUri: "",
-		baseRelativePath: "",
-		libraryScriptUri: "",
-		iePreventClobber: false,
-		ieClobberMinimal: true,
-		preventBackButtonFix: true,
-		delayMozLoadingFix: false,
-		searchIds: [],
-		parseWidgets: true
-	};
-
-	if (typeof djConfig == "undefined") { djConfig = config; }
-	else {
-		for (var option in config) {
-			if (typeof djConfig[option] == "undefined") {
-				djConfig[option] = config[option];
-			}
-		}
-	}
-
-	return {
-		name_: '(unset)',
-		version_: '(unset)',
-
-
-		getName: function(){
-			// sumary: Return the name of the host environment.
-			return this.name_; 	// String
-		},
-
-
-		getVersion: function(){
-			// summary: Return the version of the hostenv.
-			return this.version_; // String
-		},
-
-		getText: function(/*String*/ uri){
-			// summary:	Read the plain/text contents at the specified 'uri'.
-			// description:
-			//			If 'getText()' is not implemented, then it is necessary to override
-			//			'loadUri()' with an implementation that doesn't rely on it.
-
-			dojo.unimplemented('getText', "uri=" + uri);
-		}
-	};
-})();
-
-
-dojo.hostenv.getBaseScriptUri = function(){
-	// summary: Return the base script uri that other scripts are found relative to.
-	// TODOC: HUH?  This comment means nothing to me.  What other scripts? Is this the path to other dojo libraries?
-	//		MAYBE:  Return the base uri to scripts in the dojo library.	 ???
-	// return: Empty string or a path ending in '/'.
-	if(djConfig.baseScriptUri.length){
-		return djConfig.baseScriptUri;
-	}
-
-	// MOW: Why not:
-	//			uri = djConfig.libraryScriptUri || djConfig.baseRelativePath
-	//		??? Why 'new String(...)'
-	var uri = new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-	if (!uri) { dojo.raise("Nothing returned by getLibraryScriptUri(): " + uri); }
-
-	// MOW: uri seems to not be actually used.  Seems to be hard-coding to djConfig.baseRelativePath... ???
-	var lastslash = uri.lastIndexOf('/');		// MOW ???
-	djConfig.baseScriptUri = djConfig.baseRelativePath;
-	return djConfig.baseScriptUri;	// String
-}
-
-/*
- * loader.js - A bootstrap module.  Runs before the hostenv_*.js file. Contains all of the package loading methods.
- */
-
-//A semi-colon is at the start of the line because after doing a build, this function definition
-//get compressed onto the same line as the last line in bootstrap1.js. That list line is just a
-//curly bracket, and the browser complains about that syntax. The semicolon fixes it. Putting it
-//here instead of at the end of bootstrap1.js, since it is more of an issue for this file, (using
-//the closure), and bootstrap1.js could change in the future.
-;(function(){
-	//Additional properties for dojo.hostenv
-	var _addHostEnv = {
-		pkgFileName: "__package__",
-	
-		// for recursion protection
-		loading_modules_: {},
-		loaded_modules_: {},
-		addedToLoadingCount: [],
-		removedFromLoadingCount: [],
-	
-		inFlightCount: 0,
-	
-		// FIXME: it should be possible to pull module prefixes in from djConfig
-		modulePrefixes_: {
-			dojo: {name: "dojo", value: "src"}
-		},
-
-		setModulePrefix: function(/*String*/module, /*String*/prefix){
-			// summary: establishes module/prefix pair
-			this.modulePrefixes_[module] = {name: module, value: prefix};
-		},
-
-		moduleHasPrefix: function(/*String*/module){
-			// summary: checks to see if module has been established
-			var mp = this.modulePrefixes_;
-			return Boolean(mp[module] && mp[module].value); // Boolean
-		},
-
-		getModulePrefix: function(/*String*/module){
-			// summary: gets the prefix associated with module
-			if(this.moduleHasPrefix(module)){
-				return this.modulePrefixes_[module].value; // String
-			}
-			return module; // String
-		},
-
-		getTextStack: [],
-		loadUriStack: [],
-		loadedUris: [],
-	
-		//WARNING: This variable is referenced by packages outside of bootstrap: FloatingPane.js and undo/browser.js
-		post_load_: false,
-		
-		//Egad! Lots of test files push on this directly instead of using dojo.addOnLoad.
-		modulesLoadedListeners: [],
-		unloadListeners: [],
-		loadNotifying: false
-	};
-	
-	//Add all of these properties to dojo.hostenv
-	for(var param in _addHostEnv){
-		dojo.hostenv[param] = _addHostEnv[param];
-	}
-})();
-
-dojo.hostenv.loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){
-// summary:
-//	Load a Javascript module given a relative path
-//
-// description:
-//	Loads and interprets the script located at relpath, which is relative to the
-//	script root directory.  If the script is found but its interpretation causes
-//	a runtime exception, that exception is not caught by us, so the caller will
-//	see it.  We return a true value if and only if the script is found.
-//
-//	For now, we do not have an implementation of a true search path.  We
-//	consider only the single base script uri, as returned by getBaseScriptUri().
-//
-// relpath: A relative path to a script (no leading '/', and typically
-// 	ending in '.js').
-// module: A module whose existance to check for after loading a path.
-//	Can be used to determine success or failure of the load.
-// cb: a callback function to pass the result of evaluating the script
-
-	var uri;
-	if(relpath.charAt(0) == '/' || relpath.match(/^\w+:/)){
-		// dojo.raise("relpath '" + relpath + "'; must be relative");
-		uri = relpath;
-	}else{
-		uri = this.getBaseScriptUri() + relpath;
-	}
-	if(djConfig.cacheBust && dojo.render.html.capable){
-		uri += "?" + String(djConfig.cacheBust).replace(/\W+/g,"");
-	}
-	try{
-		return !module ? this.loadUri(uri, cb) : this.loadUriAndCheck(uri, module, cb); // Boolean
-	}catch(e){
-		dojo.debug(e);
-		return false; // Boolean
-	}
-}
-
-dojo.hostenv.loadUri = function(/*String (URL)*/uri, /*Function?*/cb){
-// summary:
-//	Loads JavaScript from a URI
-//
-// description:
-//	Reads the contents of the URI, and evaluates the contents.  This is used to load modules as well
-//	as resource bundles.  Returns true if it succeeded. Returns false if the URI reading failed.
-//	Throws if the evaluation throws.
-//
-// uri: a uri which points at the script to be loaded
-// cb: a callback function to process the result of evaluating the script as an expression, typically
-//	used by the resource bundle loader to load JSON-style resources
-
-	if(this.loadedUris[uri]){
-		return true; // Boolean
-	}
-	var contents = this.getText(uri, null, true);
-	if(!contents){ return false; } // Boolean
-	this.loadedUris[uri] = true;
-	// if(cb){ contents = '('+contents+')'; }
-	var value = dj_eval(contents);
-	if(cb){ cb(value); }
-	return true; // Boolean
-}
-
-// FIXME: probably need to add logging to this method
-dojo.hostenv.loadUriAndCheck = function(/*String (URL)*/uri, /*String*/moduleName, /*Function?*/cb){
-	// summary: calls loadUri then findModule and returns true if both succeed
-	var ok = true;
-	try{
-		ok = this.loadUri(uri, cb);
-	}catch(e){
-		dojo.debug("failed loading ", uri, " with error: ", e);
-	}
-	return Boolean(ok && this.findModule(moduleName, false)); // Boolean
-}
-
-dojo.loaded = function(){ }
-dojo.unloaded = function(){ }
-
-dojo.hostenv.loaded = function(){
-	this.loadNotifying = true;
-	this.post_load_ = true;
-	var mll = this.modulesLoadedListeners;
-	for(var x=0; x<mll.length; x++){
-		mll[x]();
-	}
-
-	//Clear listeners so new ones can be added
-	//For other xdomain package loads after the initial load.
-	this.modulesLoadedListeners = [];
-	this.loadNotifying = false;
-
-	dojo.loaded();
-}
-
-dojo.hostenv.unloaded = function(){
-	var mll = this.unloadListeners;
-	while(mll.length){
-		(mll.pop())();
-	}
-	dojo.unloaded();
-}
-
-dojo.addOnLoad = function(/*Object?*/obj, /*String|Function*/functionName) {
-// summary:
-//	Registers a function to be triggered after the DOM has finished loading 
-//	and widgets declared in markup have been instantiated.  Images and CSS files
-//	may or may not have finished downloading when the specified function is called.
-//	(Note that widgets' CSS and HTML code is guaranteed to be downloaded before said
-//	widgets are instantiated.)
-//
-// usage:
-//	dojo.addOnLoad(functionPointer)
-//	dojo.addOnLoad(object, "functionName")
-
-	var dh = dojo.hostenv;
-	if(arguments.length == 1) {
-		dh.modulesLoadedListeners.push(obj);
-	} else if(arguments.length > 1) {
-		dh.modulesLoadedListeners.push(function() {
-			obj[functionName]();
-		});
-	}
-
-	//Added for xdomain loading. dojo.addOnLoad is used to
-	//indicate callbacks after doing some dojo.require() statements.
-	//In the xdomain case, if all the requires are loaded (after initial
-	//page load), then immediately call any listeners.
-	if(dh.post_load_ && dh.inFlightCount == 0 && !dh.loadNotifying){
-		dh.callLoaded();
-	}
-}
-
-dojo.addOnUnload = function(/*Object?*/obj, /*String|Function?*/functionName){
-// summary: registers a function to be triggered when the page unloads
-//
-// usage:
-//	dojo.addOnLoad(functionPointer)
-//	dojo.addOnLoad(object, "functionName")
-	var dh = dojo.hostenv;
-	if(arguments.length == 1){
-		dh.unloadListeners.push(obj);
-	} else if(arguments.length > 1) {
-		dh.unloadListeners.push(function() {
-			obj[functionName]();
-		});
-	}
-}
-
-dojo.hostenv.modulesLoaded = function(){
-	if(this.post_load_){ return; }
-	if(this.loadUriStack.length==0 && this.getTextStack.length==0){
-		if(this.inFlightCount > 0){ 
-			dojo.debug("files still in flight!");
-			return;
-		}
-		dojo.hostenv.callLoaded();
-	}
-}
-
-dojo.hostenv.callLoaded = function(){
-	//The "object" check is for IE, and the other opera check fixes an issue
-	//in Opera where it could not find the body element in some widget test cases.
-	//For 0.9, maybe route all browsers through the setTimeout (need protection
-	//still for non-browser environments though). This might also help the issue with
-	//FF 2.0 and freezing issues where we try to do sync xhr while background css images
-	//are being loaded (trac #2572)? Consider for 0.9.
-	if(typeof setTimeout == "object" || (djConfig["useXDomain"] && dojo.render.html.opera)){
-		setTimeout("dojo.hostenv.loaded();", 0);
-	}else{
-		dojo.hostenv.loaded();
-	}
-}
-
-dojo.hostenv.getModuleSymbols = function(/*String*/modulename){
-// summary:
-//	Converts a module name in dotted JS notation to an array representing the path in the source tree
-	var syms = modulename.split(".");
-	for(var i = syms.length; i>0; i--){
-		var parentModule = syms.slice(0, i).join(".");
-		if((i==1) && !this.moduleHasPrefix(parentModule)){		
-			// Support default module directory (sibling of dojo) for top-level modules 
-			syms[0] = "../" + syms[0];
-		}else{
-			var parentModulePath = this.getModulePrefix(parentModule);
-			if(parentModulePath != parentModule){
-				syms.splice(0, i, parentModulePath);
-				break;
-			}
-		}
-	}
-	return syms; // Array
-}
-
-dojo.hostenv._global_omit_module_check = false;
-dojo.hostenv.loadModule = function(/*String*/moduleName, /*Boolean?*/exactOnly, /*Boolean?*/omitModuleCheck){
-// summary:
-//	loads a Javascript module from the appropriate URI
-//
-// description:
-//	loadModule("A.B") first checks to see if symbol A.B is defined. 
-//	If it is, it is simply returned (nothing to do).
-//	
-//	If it is not defined, it will look for "A/B.js" in the script root directory,
-//	followed by "A.js".
-//	
-//	It throws if it cannot find a file to load, or if the symbol A.B is not
-//	defined after loading.
-//	
-//	It returns the object A.B.
-//	
-//	This does nothing about importing symbols into the current package.
-//	It is presumed that the caller will take care of that. For example, to import
-//	all symbols:
-//	
-//	   with (dojo.hostenv.loadModule("A.B")) {
-//	      ...
-//	   }
-//	
-//	And to import just the leaf symbol:
-//	
-//	   var B = dojo.hostenv.loadModule("A.B");
-//	   ...
-//	
-//	dj_load is an alias for dojo.hostenv.loadModule
-
-	if(!moduleName){ return; }
-	omitModuleCheck = this._global_omit_module_check || omitModuleCheck;
-	var module = this.findModule(moduleName, false);
-	if(module){
-		return module;
-	}
-
-	// protect against infinite recursion from mutual dependencies
-	if(dj_undef(moduleName, this.loading_modules_)){
-		this.addedToLoadingCount.push(moduleName);
-	}
-	this.loading_modules_[moduleName] = 1;
-
-	// convert periods to slashes
-	var relpath = moduleName.replace(/\./g, '/') + '.js';
-
-	var nsyms = moduleName.split(".");
-	
-	// this line allowed loading of a module manifest as if it were a namespace
-	// it's an interesting idea, but shouldn't be combined with 'namespaces' proper
-	// and leads to unwanted dependencies
-	// the effect can be achieved in other (albeit less-flexible) ways now, so I am
-	// removing this pending further design work
-	// perhaps we can explicitly define this idea of a 'module manifest', and subclass
-	// 'namespace manifest' from that
-	//dojo.getNamespace(nsyms[0]);
-
-	var syms = this.getModuleSymbols(moduleName);
-	var startedRelative = ((syms[0].charAt(0) != '/') && !syms[0].match(/^\w+:/));
-	var last = syms[syms.length - 1];
-	var ok;
-	// figure out if we're looking for a full package, if so, we want to do
-	// things slightly diffrently
-	if(last=="*"){
-		moduleName = nsyms.slice(0, -1).join('.');
-		while(syms.length){
-			syms.pop();
-			syms.push(this.pkgFileName);
-			relpath = syms.join("/") + '.js';
-			if(startedRelative && relpath.charAt(0)=="/"){
-				relpath = relpath.slice(1);
-			}
-			ok = this.loadPath(relpath, !omitModuleCheck ? moduleName : null);
-			if(ok){ break; }
-			syms.pop();
-		}
-	}else{
-		relpath = syms.join("/") + '.js';
-		moduleName = nsyms.join('.');
-		var modArg = !omitModuleCheck ? moduleName : null;
-		ok = this.loadPath(relpath, modArg);
-		if(!ok && !exactOnly){
-			syms.pop();
-			while(syms.length){
-				relpath = syms.join('/') + '.js';
-				ok = this.loadPath(relpath, modArg);
-				if(ok){ break; }
-				syms.pop();
-				relpath = syms.join('/') + '/'+this.pkgFileName+'.js';
-				if(startedRelative && relpath.charAt(0)=="/"){
-					relpath = relpath.slice(1);
-				}
-				ok = this.loadPath(relpath, modArg);
-				if(ok){ break; }
-			}
-		}
-
-		if(!ok && !omitModuleCheck){
-			dojo.raise("Could not load '" + moduleName + "'; last tried '" + relpath + "'");
-		}
-	}
-
-	// check that the symbol was defined
-	//Don't bother if we're doing xdomain (asynchronous) loading.
-	if(!omitModuleCheck && !this["isXDomain"]){
-		// pass in false so we can give better error
-		module = this.findModule(moduleName, false);
-		if(!module){
-			dojo.raise("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); 
-		}
-	}
-
-	return module;
-}
-
-dojo.hostenv.startPackage = function(/*String*/packageName){
-// summary:
-//	Creates a JavaScript package
-//
-// description:
-//	startPackage("A.B") follows the path, and at each level creates a new empty
-//	object or uses what already exists. It returns the result.
-//
-// packageName: the package to be created as a String in dot notation
-
-	//Make sure we have a string.
-	var fullPkgName = String(packageName);
-	var strippedPkgName = fullPkgName;
-
-	var syms = packageName.split(/\./);
-	if(syms[syms.length-1]=="*"){
-		syms.pop();
-		strippedPkgName = syms.join(".");
-	}
-	var evaledPkg = dojo.evalObjPath(strippedPkgName, true);
-	this.loaded_modules_[fullPkgName] = evaledPkg;
-	this.loaded_modules_[strippedPkgName] = evaledPkg;
-	
-	return evaledPkg; // Object
-}
-
-dojo.hostenv.findModule = function(/*String*/moduleName, /*Boolean?*/mustExist){
-// summary:
-//	Returns the Object representing the module, if it exists, otherwise null.
-//
-// moduleName A fully qualified module including package name, like 'A.B'.
-// mustExist Optional, default false. throw instead of returning null
-//	if the module does not currently exist.
-
-	var lmn = String(moduleName);
-
-	if(this.loaded_modules_[lmn]){
-		return this.loaded_modules_[lmn]; // Object
-	}
-
-	if(mustExist){
-		dojo.raise("no loaded module named '" + moduleName + "'");
-	}
-	return null; // null
-}
-
-//Start of old bootstrap2:
-
-dojo.kwCompoundRequire = function(/*Object containing Arrays*/modMap){
-// description:
-//	This method taks a "map" of arrays which one can use to optionally load dojo
-//	modules. The map is indexed by the possible dojo.hostenv.name_ values, with
-//	two additional values: "default" and "common". The items in the "default"
-//	array will be loaded if none of the other items have been choosen based on
-//	the hostenv.name_ item. The items in the "common" array will _always_ be
-//	loaded, regardless of which list is chosen.  Here's how it's normally
-//	called:
-//	
-//	dojo.kwCompoundRequire({
-//		browser: [
-//			["foo.bar.baz", true, true], // an example that passes multiple args to loadModule()
-//			"foo.sample.*",
-//			"foo.test,
-//		],
-//		default: [ "foo.sample.*" ],
-//		common: [ "really.important.module.*" ]
-//	});
-
-	var common = modMap["common"]||[];
-	var result = modMap[dojo.hostenv.name_] ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]);
-
-	for(var x=0; x<result.length; x++){
-		var curr = result[x];
-		if(curr.constructor == Array){
-			dojo.hostenv.loadModule.apply(dojo.hostenv, curr);
-		}else{
-			dojo.hostenv.loadModule(curr);
-		}
-	}
-}
-
-dojo.require = function(/*String*/ resourceName){
-	// summary
-	//	Ensure that the given resource (ie, javascript
-	//	source file) has been loaded.
-	// description
-	//	dojo.require() is similar to C's #include command or java's "import" command.
-	//	You call dojo.require() to pull in the resources (ie, javascript source files)
-	//	that define the functions you are using. 
-	//
-	//	Note that in the case of a build, many resources have already been included
-	//	into dojo.js (ie, many of the javascript source files have been compressed and
-	//	concatened into dojo.js), so many dojo.require() calls will simply return
-	//	without downloading anything.
-	dojo.hostenv.loadModule.apply(dojo.hostenv, arguments);
-}
-
-dojo.requireIf = function(/*Boolean*/ condition, /*String*/ resourceName){
-	// summary
-	//	If the condition is true then call dojo.require() for the specified resource
-	var arg0 = arguments[0];
-	if((arg0 === true)||(arg0=="common")||(arg0 && dojo.render[arg0].capable)){
-		var args = [];
-		for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }
-		dojo.require.apply(dojo, args);
-	}
-}
-
-dojo.requireAfterIf = dojo.requireIf;
-
-dojo.provide = function(/*String*/ resourceName){
-	// summary
-	//	Each javascript source file must have (exactly) one dojo.provide()
-	//	call at the top of the file, corresponding to the file name.
-	//	For example, dojo/src/foo.js must have dojo.provide("dojo.foo"); at the top of the file.
-	//
-	// description
-	//	Each javascript source file is called a resource.  When a resource
-	//	is loaded by the browser, dojo.provide() registers that it has
-	//	been loaded.
-	//	
-	//	For backwards compatibility reasons, in addition to registering the resource,
-	//	dojo.provide() also ensures that the javascript object for the module exists.  For
-	//	example, dojo.provide("dojo.html.common"), in addition to registering that common.js
-	//	is a resource for the dojo.html module, will ensure that the dojo.html javascript object
-	//	exists, so that calls like dojo.html.foo = function(){ ... } don't fail.
-	//
-	//	In the case of a build (or in the future, a rollup), where multiple javascript source
-	//	files are combined into one bigger file (similar to a .lib or .jar file), that file
-	//	will contain multiple dojo.provide() calls, to note that it includes
-	//	multiple resources.
-	return dojo.hostenv.startPackage.apply(dojo.hostenv, arguments);
-}
-
-dojo.registerModulePath = function(/*String*/module, /*String*/prefix){
-	// summary: maps a module name to a path
-	// description: An unregistered module is given the default path of ../<module>,
-	//	relative to Dojo root. For example, module acme is mapped to ../acme.
-	//	If you want to use a different module name, use dojo.registerModulePath. 
-	return dojo.hostenv.setModulePrefix(module, prefix);
-}
-
-if(djConfig["modulePaths"]){
-	for(var param in djConfig["modulePaths"]){
-		dojo.registerModulePath(param, djConfig["modulePaths"][param]);
-	}
-}
-
-dojo.setModulePrefix = function(/*String*/module, /*String*/prefix){
-	// summary: maps a module name to a path
-	dojo.deprecated('dojo.setModulePrefix("' + module + '", "' + prefix + '")', "replaced by dojo.registerModulePath", "0.5");
-	return dojo.registerModulePath(module, prefix);
-}
-
-dojo.exists = function(/*Object*/obj, /*String*/name){
-	// summary: determine if an object supports a given method
-	// description: useful for longer api chains where you have to test each object in the chain
-	var p = name.split(".");
-	for(var i = 0; i < p.length; i++){
-		if(!obj[p[i]]){ return false; } // Boolean
-		obj = obj[p[i]];
-	}
-	return true; // Boolean
-}
-
-// Localization routines
-
-dojo.hostenv.normalizeLocale = function(/*String?*/locale){
-//	summary:
-//		Returns canonical form of locale, as used by Dojo.  All variants are case-insensitive and are separated by '-'
-//		as specified in RFC 3066. If no locale is specified, the user agent's default is returned.
-
-	var result = locale ? locale.toLowerCase() : dojo.locale;
-	if(result == "root"){
-		result = "ROOT";
-	}
-	return result;// String
-};
-
-dojo.hostenv.searchLocalePath = function(/*String*/locale, /*Boolean*/down, /*Function*/searchFunc){
-//	summary:
-//		A helper method to assist in searching for locale-based resources.  Will iterate through
-//		the variants of a particular locale, either up or down, executing a callback function.
-//		For example, "en-us" and true will try "en-us" followed by "en" and finally "ROOT".
-
-	locale = dojo.hostenv.normalizeLocale(locale);
-
-	var elements = locale.split('-');
-	var searchlist = [];
-	for(var i = elements.length; i > 0; i--){
-		searchlist.push(elements.slice(0, i).join('-'));
-	}
-	searchlist.push(false);
-	if(down){searchlist.reverse();}
-
-	for(var j = searchlist.length - 1; j >= 0; j--){
-		var loc = searchlist[j] || "ROOT";
-		var stop = searchFunc(loc);
-		if(stop){ break; }
-	}
-}
-
-//These two functions are placed outside of preloadLocalizations
-//So that the xd loading can use/override them.
-dojo.hostenv.localesGenerated =["ROOT","es-es","es","it-it","pt-br","de","fr-fr","zh-cn","pt","en-us","zh","fr","zh-tw","it","en-gb","xx","de-de","ko-kr","ja-jp","ko","en","ja"]; // value will be inserted here at build time, if necessary
-
-dojo.hostenv.registerNlsPrefix = function(){
-// summary:
-//	Register module "nls" to point where Dojo can find pre-built localization files
-	dojo.registerModulePath("nls","nls");	
-}
-
-dojo.hostenv.preloadLocalizations = function(){
-// summary:
-//	Load built, flattened resource bundles, if available for all locales used in the page.
-//	Execute only once.  Note that this is a no-op unless there is a build.
-
-	if(dojo.hostenv.localesGenerated){
-		dojo.hostenv.registerNlsPrefix();
-
-		function preload(locale){
-			locale = dojo.hostenv.normalizeLocale(locale);
-			dojo.hostenv.searchLocalePath(locale, true, function(loc){
-				for(var i=0; i<dojo.hostenv.localesGenerated.length;i++){
-					if(dojo.hostenv.localesGenerated[i] == loc){
-						dojo["require"]("nls.dojo_"+loc);
-						return true; // Boolean
-					}
-				}
-				return false; // Boolean
-			});
-		}
-		preload();
-		var extra = djConfig.extraLocale||[];
-		for(var i=0; i<extra.length; i++){
-			preload(extra[i]);
-		}
-	}
-	dojo.hostenv.preloadLocalizations = function(){};
-}
-
-dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
-// summary:
-//	Declares translated resources and loads them if necessary, in the same style as dojo.require.
-//	Contents of the resource bundle are typically strings, but may be any name/value pair,
-//	represented in JSON format.  See also dojo.i18n.getLocalization.
-//
-// moduleName: name of the package containing the "nls" directory in which the bundle is found
-// bundleName: bundle name, i.e. the filename without the '.js' suffix
-// locale: the locale to load (optional)  By default, the browser's user locale as defined by dojo.locale
-// availableFlatLocales: A comma-separated list of the available, flattened locales for this bundle.
-// This argument should only be set by the build process.
-//
-// description:
-//	Load translated resource bundles provided underneath the "nls" directory within a package.
-//	Translated resources may be located in different packages throughout the source tree.  For example,
-//	a particular widget may define one or more resource bundles, structured in a program as follows,
-//	where moduleName is mycode.mywidget and bundleNames available include bundleone and bundletwo:
-//	...
-//	mycode/
-//	 mywidget/
-//	  nls/
-//	   bundleone.js (the fallback translation, English in this example)
-//	   bundletwo.js (also a fallback translation)
-//	   de/
-//	    bundleone.js
-//	    bundletwo.js
-//	   de-at/
-//	    bundleone.js
-//	   en/
-//	    (empty; use the fallback translation)
-//	   en-us/
-//	    bundleone.js
-//	   en-gb/
-//	    bundleone.js
-//	   es/
-//	    bundleone.js
-//	    bundletwo.js
-//	  ...etc
-//	...
-//	Each directory is named for a locale as specified by RFC 3066, (http://www.ietf.org/rfc/rfc3066.txt),
-//	normalized in lowercase.  Note that the two bundles in the example do not define all the same variants.
-//	For a given locale, bundles will be loaded for that locale and all more general locales above it, including
-//	a fallback at the root directory.  For example, a declaration for the "de-at" locale will first
-//	load nls/de-at/bundleone.js, then nls/de/bundleone.js and finally nls/bundleone.js.  The data will
-//	be flattened into a single Object so that lookups will follow this cascading pattern.  An optional build
-//	step can preload the bundles to avoid data redundancy and the multiple network hits normally required to
-//	load these resources.
-
-	dojo.hostenv.preloadLocalizations();
-	var targetLocale = dojo.hostenv.normalizeLocale(locale);
- 	var bundlePackage = [moduleName, "nls", bundleName].join(".");
-//NOTE: When loading these resources, the packaging does not match what is on disk.  This is an
-// implementation detail, as this is just a private data structure to hold the loaded resources.
-// e.g. tests/hello/nls/en-us/salutations.js is loaded as the object tests.hello.nls.salutations.en_us={...}
-// The structure on disk is intended to be most convenient for developers and translators, but in memory
-// it is more logical and efficient to store in a different order.  Locales cannot use dashes, since the
-// resulting path will not evaluate as valid JS, so we translate them to underscores.
-	
-	//Find the best-match locale to load if we have available flat locales.
-	var bestLocale = "";
-	if(availableFlatLocales){
-		var flatLocales = availableFlatLocales.split(",");
-		for(var i = 0; i < flatLocales.length; i++){
-			//Locale must match from start of string.
-			if(targetLocale.indexOf(flatLocales[i]) == 0){
-				if(flatLocales[i].length > bestLocale.length){
-					bestLocale = flatLocales[i];
-				}
-			}
-		}
-		if(!bestLocale){
-			bestLocale = "ROOT";
-		}		
-	}
-
-	//See if the desired locale is already loaded.
-	var tempLocale = availableFlatLocales ? bestLocale : targetLocale;
-	var bundle = dojo.hostenv.findModule(bundlePackage);
-	var localizedBundle = null;
-	if(bundle){
-		if(djConfig.localizationComplete && bundle._built){return;}
-		var jsLoc = tempLocale.replace('-', '_');
-		var translationPackage = bundlePackage+"."+jsLoc;
-		localizedBundle = dojo.hostenv.findModule(translationPackage);
-	}
-
-	if(!localizedBundle){
-		bundle = dojo.hostenv.startPackage(bundlePackage);
-		var syms = dojo.hostenv.getModuleSymbols(moduleName);
-		var modpath = syms.concat("nls").join("/");
-		var parent;
-
-		dojo.hostenv.searchLocalePath(tempLocale, availableFlatLocales, function(loc){
-			var jsLoc = loc.replace('-', '_');
-			var translationPackage = bundlePackage + "." + jsLoc;
-			var loaded = false;
-			if(!dojo.hostenv.findModule(translationPackage)){
-				// Mark loaded whether it's found or not, so that further load attempts will not be made
-				dojo.hostenv.startPackage(translationPackage);
-				var module = [modpath];
-				if(loc != "ROOT"){module.push(loc);}
-				module.push(bundleName);
-				var filespec = module.join("/") + '.js';
-				loaded = dojo.hostenv.loadPath(filespec, null, function(hash){
-					// Use singleton with prototype to point to parent bundle, then mix-in result from loadPath
-					var clazz = function(){};
-					clazz.prototype = parent;
-					bundle[jsLoc] = new clazz();
-					for(var j in hash){ bundle[jsLoc][j] = hash[j]; }
-				});
-			}else{
-				loaded = true;
-			}
-			if(loaded && bundle[jsLoc]){
-				parent = bundle[jsLoc];
-			}else{
-				bundle[jsLoc] = parent;
-			}
-			
-			if(availableFlatLocales){
-				//Stop the locale path searching if we know the availableFlatLocales, since
-				//the first call to this function will load the only bundle that is needed.
-				return true;
-			}
-		});
-	}
-
-	//Save the best locale bundle as the target locale bundle when we know the
-	//the available bundles.
-	if(availableFlatLocales && targetLocale != bestLocale){
-		bundle[targetLocale.replace('-', '_')] = bundle[bestLocale.replace('-', '_')];
-	}
-};
-
-(function(){
-	// If other locales are used, dojo.requireLocalization should load them as well, by default.
-	// Override dojo.requireLocalization to do load the default bundle, then iterate through the
-	// extraLocale list and load those translations as well, unless a particular locale was requested.
-
-	var extra = djConfig.extraLocale;
-	if(extra){
-		if(!extra instanceof Array){
-			extra = [extra];
-		}
-
-		var req = dojo.requireLocalization;
-		dojo.requireLocalization = function(m, b, locale, availableFlatLocales){
-			req(m,b,locale, availableFlatLocales);
-			if(locale){return;}
-			for(var i=0; i<extra.length; i++){
-				req(m,b,extra[i], availableFlatLocales);
-			}
-		};
-	}
-})();
-
-};
-
-if(typeof window != 'undefined'){
-
-	// attempt to figure out the path to dojo if it isn't set in the config
-	(function(){
-		// before we get any further with the config options, try to pick them out
-		// of the URL. Most of this code is from NW
-		if(djConfig.allowQueryConfig){
-			var baseUrl = document.location.toString(); // FIXME: use location.query instead?
-			var params = baseUrl.split("?", 2);
-			if(params.length > 1){
-				var paramStr = params[1];
-				var pairs = paramStr.split("&");
-				for(var x in pairs){
-					var sp = pairs[x].split("=");
-					// FIXME: is this eval dangerous?
-					if((sp[0].length > 9)&&(sp[0].substr(0, 9) == "djConfig.")){
-						var opt = sp[0].substr(9);
-						try{
-							djConfig[opt]=eval(sp[1]);
-						}catch(e){
-							djConfig[opt]=sp[1];
-						}
-					}
-				}
-			}
-		}
-
-		if(
-			((djConfig["baseScriptUri"] == "")||(djConfig["baseRelativePath"] == "")) && 
-			(document && document.getElementsByTagName)
-		){
-			var scripts = document.getElementsByTagName("script");
-			var rePkg = /(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-			for(var i = 0; i < scripts.length; i++) {
-				var src = scripts[i].getAttribute("src");
-				if(!src) { continue; }
-				var m = src.match(rePkg);
-				if(m) {
-					var root = src.substring(0, m.index);
-					if(src.indexOf("bootstrap1") > -1) { root += "../"; }
-					if(!this["djConfig"]) { djConfig = {}; }
-					if(djConfig["baseScriptUri"] == "") { djConfig["baseScriptUri"] = root; }
-					if(djConfig["baseRelativePath"] == "") { djConfig["baseRelativePath"] = root; }
-					break;
-				}
-			}
-		}
-
-		// fill in the rendering support information in dojo.render.*
-		var dr = dojo.render;
-		var drh = dojo.render.html;
-		var drs = dojo.render.svg;
-		var dua = (drh.UA = navigator.userAgent);
-		var dav = (drh.AV = navigator.appVersion);
-		var t = true;
-		var f = false;
-		drh.capable = t;
-		drh.support.builtin = t;
-
-		dr.ver = parseFloat(drh.AV);
-		dr.os.mac = dav.indexOf("Macintosh") >= 0;
-		dr.os.win = dav.indexOf("Windows") >= 0;
-		// could also be Solaris or something, but it's the same browser
-		dr.os.linux = dav.indexOf("X11") >= 0;
-
-		drh.opera = dua.indexOf("Opera") >= 0;
-		drh.khtml = (dav.indexOf("Konqueror") >= 0)||(dav.indexOf("Safari") >= 0);
-		drh.safari = dav.indexOf("Safari") >= 0;
-		var geckoPos = dua.indexOf("Gecko");
-		drh.mozilla = drh.moz = (geckoPos >= 0)&&(!drh.khtml);
-		if (drh.mozilla) {
-			// gecko version is YYYYMMDD
-			drh.geckoVersion = dua.substring(geckoPos + 6, geckoPos + 14);
-		}
-		drh.ie = (document.all)&&(!drh.opera);
-		drh.ie50 = drh.ie && dav.indexOf("MSIE 5.0")>=0;
-		drh.ie55 = drh.ie && dav.indexOf("MSIE 5.5")>=0;
-		drh.ie60 = drh.ie && dav.indexOf("MSIE 6.0")>=0;
-		drh.ie70 = drh.ie && dav.indexOf("MSIE 7.0")>=0;
-
-		var cm = document["compatMode"];
-		drh.quirks = (cm == "BackCompat")||(cm == "QuirksMode")||drh.ie55||drh.ie50;
-
-		// TODO: is the HTML LANG attribute relevant?
-		dojo.locale = dojo.locale || (drh.ie ? navigator.userLanguage : navigator.language).toLowerCase();
-
-		dr.vml.capable=drh.ie;
-		drs.capable = f;
-		drs.support.plugin = f;
-		drs.support.builtin = f;
-		var tdoc = window["document"];
-		var tdi = tdoc["implementation"];
-
-		if((tdi)&&(tdi["hasFeature"])&&(tdi.hasFeature("org.w3c.dom.svg", "1.0"))){
-			drs.capable = t;
-			drs.support.builtin = t;
-			drs.support.plugin = f;
-		}
-		// webkits after 420 support SVG natively. The test string is "AppleWebKit/420+"
-		if(drh.safari){
-			var tmp = dua.split("AppleWebKit/")[1];
-			var ver = parseFloat(tmp.split(" ")[0]);
-			if(ver >= 420){
-				drs.capable = t;
-				drs.support.builtin = t;
-				drs.support.plugin = f;
-			}
-		}else{
-		}
-	})();
-
-	dojo.hostenv.startPackage("dojo.hostenv");
-
-	dojo.render.name = dojo.hostenv.name_ = 'browser';
-	dojo.hostenv.searchIds = [];
-
-	// These are in order of decreasing likelihood; this will change in time.
-	dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
-
-	dojo.hostenv.getXmlhttpObject = function(){
-		// summary: does the work of portably generating a new XMLHTTPRequest object.
-		var http = null;
-		var last_e = null;
-		try{ http = new XMLHttpRequest(); }catch(e){}
-		if(!http){
-			for(var i=0; i<3; ++i){
-				var progid = dojo.hostenv._XMLHTTP_PROGIDS[i];
-				try{
-					http = new ActiveXObject(progid);
-				}catch(e){
-					last_e = e;
-				}
-
-				if(http){
-					dojo.hostenv._XMLHTTP_PROGIDS = [progid];  // so faster next time
-					break;
-				}
-			}
-
-			/*if(http && !http.toString) {
-				http.toString = function() { "[object XMLHttpRequest]"; }
-			}*/
-		}
-
-		if(!http){
-			return dojo.raise("XMLHTTP not available", last_e);
-		}
-
-		return http; // XMLHTTPRequest instance
-	}
-
-	dojo.hostenv._blockAsync = false;
-	dojo.hostenv.getText = function(uri, async_cb, fail_ok){
-		// summary: Read the contents of the specified uri and return those contents.
-		// uri:
-		//		A relative or absolute uri. If absolute, it still must be in
-		//		the same "domain" as we are.
-		// async_cb:
-		//		If not specified, load synchronously. If specified, load
-		//		asynchronously, and use async_cb as the progress handler which
-		//		takes the xmlhttp object as its argument. If async_cb, this
-		//		function returns null.
-		// fail_ok:
-		//		Default false. If fail_ok and !async_cb and loading fails,
-		//		return null instead of throwing.
-
-		// need to block async callbacks from snatching this thread as the result
-		// of an async callback might call another sync XHR, this hangs khtml forever
-		// hostenv._blockAsync must also be checked in BrowserIO's watchInFlight()
-		// NOTE: must be declared before scope switches ie. this.getXmlhttpObject()
-		if(!async_cb){ this._blockAsync = true; }
-
-		var http = this.getXmlhttpObject();
-
-		function isDocumentOk(http){
-			var stat = http["status"];
-			// allow a 304 use cache, needed in konq (is this compliant with the http spec?)
-			return Boolean((!stat)||((200 <= stat)&&(300 > stat))||(stat==304));
-		}
-
-		if(async_cb){
-			var _this = this, timer = null, gbl = dojo.global();
-			var xhr = dojo.evalObjPath("dojo.io.XMLHTTPTransport");
-			http.onreadystatechange = function(){
-				if(timer){ gbl.clearTimeout(timer); timer = null; }
-				if(_this._blockAsync || (xhr && xhr._blockAsync)){
-					timer = gbl.setTimeout(function () { http.onreadystatechange.apply(this); }, 10);
-				}else{
-					if(4==http.readyState){
-						if(isDocumentOk(http)){
-							// dojo.debug("LOADED URI: "+uri);
-							async_cb(http.responseText);
-						}
-					}
-				}
-			}
-		}
-
-		http.open('GET', uri, async_cb ? true : false);
-		try{
-			http.send(null);
-			if(async_cb){
-				return null;
-			}
-			if(!isDocumentOk(http)){
-				var err = Error("Unable to load "+uri+" status:"+ http.status);
-				err.status = http.status;
-				err.responseText = http.responseText;
-				throw err;
-			}
-		}catch(e){
-			this._blockAsync = false;
-			if((fail_ok)&&(!async_cb)){
-				return null;
-			}else{
-				throw e;
-			}
-		}
-
-		this._blockAsync = false;
-		return http.responseText; // String
-	}
-
-	dojo.hostenv.defaultDebugContainerId = 'dojoDebug';
-	dojo.hostenv._println_buffer = [];
-	dojo.hostenv._println_safe = false;
-	dojo.hostenv.println = function(/*String*/line){
-		// summary:
-		//		prints the provided line to whatever logging container is
-		//		available. If the page isn't loaded yet, the line may be added
-		//		to a buffer for printing later.
-		if(!dojo.hostenv._println_safe){
-			dojo.hostenv._println_buffer.push(line);
-		}else{
-			try {
-				var console = document.getElementById(djConfig.debugContainerId ?
-					djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId);
-				if(!console) { console = dojo.body(); }
-
-				var div = document.createElement("div");
-				div.appendChild(document.createTextNode(line));
-				console.appendChild(div);
-			} catch (e) {
-				try{
-					// safari needs the output wrapped in an element for some reason
-					document.write("<div>" + line + "</div>");
-				}catch(e2){
-					window.status = line;
-				}
-			}
-		}
-	}
-
-	dojo.addOnLoad(function(){
-		dojo.hostenv._println_safe = true;
-		while(dojo.hostenv._println_buffer.length > 0){
-			dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-		}
-	});
-
-	function dj_addNodeEvtHdlr(/*DomNode*/node, /*String*/evtName, /*Function*/fp){
-		// summary:
-		//		non-destructively adds the specified function to the node's
-		//		evtName handler.
-		// node: the DomNode to add the handler to
-		// evtName: should be in the form "click" for "onclick" handlers
-		var oldHandler = node["on"+evtName] || function(){};
-		node["on"+evtName] = function(){
-			fp.apply(node, arguments);
-			oldHandler.apply(node, arguments);
-		}
-		return true;
-	}
-
-	dojo.hostenv._djInitFired = false;
-	//	BEGIN DOMContentLoaded, from Dean Edwards (http://dean.edwards.name/weblog/2006/06/again/)
-	function dj_load_init(e){
-		dojo.hostenv._djInitFired = true;
-		// allow multiple calls, only first one will take effect
-		// A bug in khtml calls events callbacks for document for event which isnt supported
-		// for example a created contextmenu event calls DOMContentLoaded, workaround
-		var type = (e && e.type) ? e.type.toLowerCase() : "load";
-		if(arguments.callee.initialized || (type!="domcontentloaded" && type!="load")){ return; }
-		arguments.callee.initialized = true;
-		if(typeof(_timer) != 'undefined'){
-			clearInterval(_timer);
-			delete _timer;
-		}
-
-		var initFunc = function(){
-			//perform initialization
-			if(dojo.render.html.ie){
-				dojo.hostenv.makeWidgets();
-			}
-		};
-
-		if(dojo.hostenv.inFlightCount == 0){
-			initFunc();
-			dojo.hostenv.modulesLoaded();
-		}else{
-			//This else case should be xdomain loading.
-			//Make sure this is the first thing in the load listener array.
-			//Part of the dojo.addOnLoad guarantee is that when the listeners are notified,
-			//It means the DOM (or page) has loaded and that widgets have been parsed.
-			dojo.hostenv.modulesLoadedListeners.unshift(initFunc);
-		}
-	}
-
-	//	START DOMContentLoaded
-	// Mozilla and Opera 9 expose the event we could use
-	if(document.addEventListener){
-		// NOTE: 
-		//		due to a threading issue in Firefox 2.0, we can't enable
-		//		DOMContentLoaded on that platform. For more information, see:
-		//		http://trac.dojotoolkit.org/ticket/1704
-		if(dojo.render.html.opera || (dojo.render.html.moz && (djConfig["enableMozDomContentLoaded"] === true))){
-			document.addEventListener("DOMContentLoaded", dj_load_init, null);
-		}
-
-		//	mainly for Opera 8.5, won't be fired if DOMContentLoaded fired already.
-		//  also used for Mozilla because of trac #1640
-		window.addEventListener("load", dj_load_init, null);
-	}
-
-	// 	for Internet Explorer. readyState will not be achieved on init call, but dojo doesn't need it
-	//	however, we'll include it because we don't know if there are other functions added that might.
-	//	Note that this has changed because the build process strips all comments--including conditional
-	//		ones.
-	if(dojo.render.html.ie && dojo.render.os.win){
-		document.attachEvent("onreadystatechange", function(e){
-			if(document.readyState == "complete"){
-				dj_load_init();
-			}
-		});
-	}
-
-	if (/(WebKit|khtml)/i.test(navigator.userAgent)) { // sniff
-		var _timer = setInterval(function() {
-			if (/loaded|complete/.test(document.readyState)) {
-				dj_load_init(); // call the onload handler
-			}
-		}, 10);
-	}
-	//	END DOMContentLoaded
-
-	// IE WebControl hosted in an application can fire "beforeunload" and "unload"
-	// events when control visibility changes, causing Dojo to unload too soon. The
-	// following code fixes the problem
-	// Reference: http://support.microsoft.com/default.aspx?scid=kb;en-us;199155
-	if(dojo.render.html.ie){
-		dj_addNodeEvtHdlr(window, "beforeunload", function(){
-			dojo.hostenv._unloading = true;
-			window.setTimeout(function() {
-				dojo.hostenv._unloading = false;
-			}, 0);
-		});
-	}
-
-	dj_addNodeEvtHdlr(window, "unload", function(){
-		dojo.hostenv.unloaded();
-		if((!dojo.render.html.ie)||(dojo.render.html.ie && dojo.hostenv._unloading)){
-			dojo.hostenv.unloaded();
-		}
-	});
-
-	dojo.hostenv.makeWidgets = function(){
-		// you can put searchIds in djConfig and dojo.hostenv at the moment
-		// we should probably eventually move to one or the other
-		var sids = [];
-		if(djConfig.searchIds && djConfig.searchIds.length > 0) {
-			sids = sids.concat(djConfig.searchIds);
-		}
-		if(dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) {
-			sids = sids.concat(dojo.hostenv.searchIds);
-		}
-
-		if((djConfig.parseWidgets)||(sids.length > 0)){
-			if(dojo.evalObjPath("dojo.widget.Parse")){
-				// we must do this on a delay to avoid:
-				//	http://www.shaftek.org/blog/archives/000212.html
-				// (IE bug)
-					var parser = new dojo.xml.Parse();
-					if(sids.length > 0){
-						for(var x=0; x<sids.length; x++){
-							var tmpNode = document.getElementById(sids[x]);
-							if(!tmpNode){ continue; }
-							var frag = parser.parseElement(tmpNode, null, true);
-							dojo.widget.getParser().createComponents(frag);
-						}
-					}else if(djConfig.parseWidgets){
-						var frag  = parser.parseElement(dojo.body(), null, true);
-						dojo.widget.getParser().createComponents(frag);
-					}
-			}
-		}
-	}
-
-	dojo.addOnLoad(function(){
-		if(!dojo.render.html.ie) {
-			dojo.hostenv.makeWidgets();
-		}
-	});
-
-	try{
-		if(dojo.render.html.ie){
-			document.namespaces.add("v","urn:schemas-microsoft-com:vml");
-			document.createStyleSheet().addRule("v\\:*", "behavior:url(#default#VML)");
-		}
-	}catch(e){ }
-
-	// stub, over-ridden by debugging code. This will at least keep us from
-	// breaking when it's not included
-	dojo.hostenv.writeIncludes = function(){}
-
-	//TODOC:  HOW TO DOC THIS?
-	// @global: dj_currentDocument
-	// summary:
-	//		Current document object. 'dj_currentDocument' can be modified for temporary context shifting.
-	// description:
-	//    dojo.doc() returns dojo.currentDocument.
-	//		Refer to dojo.doc() rather than referring to 'window.document' to ensure your
-	//		code runs correctly in managed contexts.
-	if(!dj_undef("document", this)){
-		dj_currentDocument = this.document;
-	}
-
-	dojo.doc = function(){
-		// summary:
-		//		return the document object associated with the dojo.global()
-		return dj_currentDocument;
-	}
-
-	dojo.body = function(){
-		// summary:
-		//		return the body object associated with dojo.doc()
-		// Note: document.body is not defined for a strict xhtml document
-		return dojo.doc().body || dojo.doc().getElementsByTagName("body")[0];
-	}
-
-	dojo.byId = function(/*String*/id, /*DocumentElement*/doc){
-		// summary:
-		// 		similar to other library's "$" function, takes a string
-		// 		representing a DOM id or a DomNode and returns the
-		// 		corresponding DomNode. If a Node is passed, this function is a
-		// 		no-op. Returns a single DOM node or null, working around
-		// 		several browser-specific bugs to do so.
-		// id: DOM id or DOM Node
-		// doc:
-		//		optional, defaults to the current value of dj_currentDocument.
-		//		Can be used to retreive node references from other documents.
-		if((id)&&((typeof id == "string")||(id instanceof String))){
-			if(!doc){ doc = dj_currentDocument; }
-			var ele = doc.getElementById(id);
-			// workaround bug in IE and Opera 8.2 where getElementById returns wrong element
-			if(ele && (ele.id != id) && doc.all){
-				ele = null;
-				// get all matching elements with this id
-				eles = doc.all[id];
-				if(eles){
-					// if more than 1, choose first with the correct id
-					if(eles.length){
-						for(var i=0; i<eles.length; i++){
-							if(eles[i].id == id){
-								ele = eles[i];
-								break;
-							}
-						}
-					// return 1 and only element
-					}else{
-						ele = eles;
-					}
-				}
-			}
-			return ele; // DomNode
-		}
-		return id; // DomNode
-	}
-
-	dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){
-		// summary:
-		//		changes the behavior of many core Dojo functions that deal with
-		//		namespace and DOM lookup, changing them to work in a new global
-		//		context. The varibles dj_currentContext and dj_currentDocument
-		//		are modified as a result of calling this function.
-		dj_currentContext = globalObject;
-		dj_currentDocument = globalDocument;
-	};
-
-	dojo._fireCallback = function(callback, context, cbArguments){
-		if((context)&&((typeof callback == "string")||(callback instanceof String))){
-			callback=context[callback];
-		}
-		return (context ? callback.apply(context, cbArguments || [ ]) : callback());
-	}
-
-	dojo.withGlobal = function(/*Object*/globalObject, /*Function*/callback, /*Object?*/thisObject, /*Array?*/cbArguments){
-		// summary:
-		//		Call callback with globalObject as dojo.global() and globalObject.document
-		//		as dojo.doc(). If provided, globalObject will be executed in the context of
-		//		object thisObject
-		// description:
-		//		When callback() returns or throws an error, the dojo.global() and dojo.doc() will
-		//		be restored to its previous state.
-		var rval;
-		var oldGlob = dj_currentContext;
-		var oldDoc = dj_currentDocument;
-		try{
-			dojo.setContext(globalObject, globalObject.document);
-			rval = dojo._fireCallback(callback, thisObject, cbArguments);
-		}finally{
-			dojo.setContext(oldGlob, oldDoc);
-		}
-		return rval;
-	}
-
-	dojo.withDoc = function (/*Object*/documentObject, /*Function*/callback, /*Object?*/thisObject, /*Array?*/cbArguments) {
-		// summary:
-		//		Call callback with documentObject as dojo.doc(). If provided, callback will be executed
-		//		in the context of object thisObject
-		// description:
-		//		When callback() returns or throws an error, the dojo.doc() will
-		//		be restored to its previous state.
-		var rval;
-		var oldDoc = dj_currentDocument;
-		try{
-			dj_currentDocument = documentObject;
-			rval = dojo._fireCallback(callback, thisObject, cbArguments);
-		}finally{
-			dj_currentDocument = oldDoc;
-		}
-		return rval;
-	}
-
-} //if (typeof window != 'undefined')
-
-//Load debug code if necessary.
-dojo.requireIf((djConfig["isDebug"] || djConfig["debugAtAllCosts"]), "dojo.debug");
-
-//window.widget is for Dashboard detection
-//The full conditionals are spelled out to avoid issues during builds.
-//Builds may be looking for require/requireIf statements and processing them.
-dojo.requireIf(djConfig["debugAtAllCosts"] && !window.widget && !djConfig["useXDomain"], "dojo.browser_debug");
-dojo.requireIf(djConfig["debugAtAllCosts"] && !window.widget && djConfig["useXDomain"], "dojo.browser_debug_xd");
-
-dojo.provide("dojo.lang.common");
-
-dojo.lang.inherits = function(/*Function*/subclass, /*Function*/superclass){
-	// summary: Set up inheritance between two classes.
-	if(!dojo.lang.isFunction(superclass)){ 
-		dojo.raise("dojo.inherits: superclass argument ["+superclass+"] must be a function (subclass: ["+subclass+"']");
-	}
-	subclass.prototype = new superclass();
-	subclass.prototype.constructor = subclass;
-	subclass.superclass = superclass.prototype;
-	// DEPRECATED: super is a reserved word, use 'superclass'
-	subclass['super'] = superclass.prototype;
-}
-
-dojo.lang._mixin = function(/*Object*/ obj, /*Object*/ props){
-	// summary:
-	//		Adds all properties and methods of props to obj. This addition is
-	//		"prototype extension safe", so that instances of objects will not
-	//		pass along prototype defaults.
-	var tobj = {};
-	for(var x in props){
-		// the "tobj" condition avoid copying properties in "props"
-		// inherited from Object.prototype.  For example, if obj has a custom
-		// toString() method, don't overwrite it with the toString() method
-		// that props inherited from Object.protoype
-		if((typeof tobj[x] == "undefined") || (tobj[x] != props[x])){
-			obj[x] = props[x];
-		}
-	}
-	// IE doesn't recognize custom toStrings in for..in
-	if(dojo.render.html.ie 
-		&& (typeof(props["toString"]) == "function")
-		&& (props["toString"] != obj["toString"])
-		&& (props["toString"] != tobj["toString"]))
-	{
-		obj.toString = props.toString;
-	}
-	return obj; // Object
-}
-
-dojo.lang.mixin = function(/*Object*/obj, /*Object...*/props){
-	// summary:	Adds all properties and methods of props to obj. 
-	for(var i=1, l=arguments.length; i<l; i++){
-		dojo.lang._mixin(obj, arguments[i]);
-	}
-	return obj; // Object
-}
-
-dojo.lang.extend = function(/*Object*/ constructor, /*Object...*/ props){
-	// summary:
-	//		Adds all properties and methods of props to constructor's
-	//		prototype, making them available to all instances created with
-	//		constructor.
-	for(var i=1, l=arguments.length; i<l; i++){
-		dojo.lang._mixin(constructor.prototype, arguments[i]);
-	}
-	return constructor; // Object
-}
-
-// Promote to dojo module
-dojo.inherits = dojo.lang.inherits;
-//dojo.lang._mixin = dojo.lang._mixin;
-dojo.mixin = dojo.lang.mixin;
-dojo.extend = dojo.lang.extend;
-
-dojo.lang.find = function(	/*Array*/		array, 
-							/*Object*/		value,
-							/*Boolean?*/	identity,
-							/*Boolean?*/	findLast){
-	// summary:	
-	//		Return the index of value in array, returning -1 if not found.
-	// array: just what you think
-	// value: the value to locate
-	// identity: 
-	//		If true, matches with identity comparison (===). If false, uses
-	//		normal comparison (==).
-	// findLast: 
-	//		If true, returns index of last instance of value.
-	// examples:
-	//		find(array, value[, identity [findLast]]) // recommended
- 	//		find(value, array[, identity [findLast]]) // deprecated
-							
-	// support both (array, value) and (value, array)
-	if(!dojo.lang.isArrayLike(array) && dojo.lang.isArrayLike(value)) {
-		dojo.deprecated('dojo.lang.find(value, array)', 'use dojo.lang.find(array, value) instead', "0.5");
-		var temp = array;
-		array = value;
-		value = temp;
-	}
-	var isString = dojo.lang.isString(array);
-	if(isString) { array = array.split(""); }
-
-	if(findLast) {
-		var step = -1;
-		var i = array.length - 1;
-		var end = -1;
-	} else {
-		var step = 1;
-		var i = 0;
-		var end = array.length;
-	}
-	if(identity){
-		while(i != end) {
-			if(array[i] === value){ return i; }
-			i += step;
-		}
-	}else{
-		while(i != end) {
-			if(array[i] == value){ return i; }
-			i += step;
-		}
-	}
-	return -1;	// number
-}
-
-dojo.lang.indexOf = dojo.lang.find;
-
-dojo.lang.findLast = function(/*Array*/array, /*Object*/value, /*boolean?*/identity){
-	// summary:
-	//		Return index of last occurance of value in array, returning -1 if
-	//		not found. This is a shortcut for dojo.lang.find() with a true
-	//		value for its "findLast" parameter.
-	// identity:
-	//		If true, matches with identity comparison (===). If false, uses
-	//		normal comparison (==).
-	return dojo.lang.find(array, value, identity, true); // number
-}
-
-dojo.lang.lastIndexOf = dojo.lang.findLast;
-
-dojo.lang.inArray = function(array /*Array*/, value /*Object*/){
-	// summary:	Return true if value is present in array.
-	return dojo.lang.find(array, value) > -1; // boolean
-}
-
-/**
- * Partial implmentation of is* functions from
- * http://www.crockford.com/javascript/recommend.html
- * NOTE: some of these may not be the best thing to use in all situations
- * as they aren't part of core JS and therefore can't work in every case.
- * See WARNING messages inline for tips.
- *
- * The following is* functions are fairly "safe"
- */
-
-dojo.lang.isObject = function(/*anything*/ it){
-	// summary:	Return true if it is an Object, Array or Function.
-	if(typeof it == "undefined"){ return false; }
-	return (typeof it == "object" || it === null || dojo.lang.isArray(it) || dojo.lang.isFunction(it)); // Boolean
-}
-
-dojo.lang.isArray = function(/*anything*/ it){
-	// summary:	Return true if it is an Array.
-	return (it && it instanceof Array || typeof it == "array"); // Boolean
-}
-
-dojo.lang.isArrayLike = function(/*anything*/ it){
-	// summary:	
-	//		Return true if it can be used as an array (i.e. is an object with
-	//		an integer length property).
-	if((!it)||(dojo.lang.isUndefined(it))){ return false; }
-	if(dojo.lang.isString(it)){ return false; }
-	if(dojo.lang.isFunction(it)){ return false; } // keeps out built-in constructors (Number, String, ...) which have length properties
-	if(dojo.lang.isArray(it)){ return true; }
-	// form node itself is ArrayLike, but not always iterable. Use form.elements instead.
-	if((it.tagName)&&(it.tagName.toLowerCase()=='form')){ return false; }
-	if(dojo.lang.isNumber(it.length) && isFinite(it.length)){ return true; }
-	return false; // Boolean
-}
-
-dojo.lang.isFunction = function(/*anything*/ it){
-	// summary:	Return true if it is a Function.
-	return (it instanceof Function || typeof it == "function"); // Boolean
-};
-
-(function(){
-	// webkit treats NodeList as a function, which is bad
-	if((dojo.render.html.capable)&&(dojo.render.html["safari"])){
-		dojo.lang.isFunction = function(/*anything*/ it){
-			if((typeof(it) == "function") && (it == "[object NodeList]")) { return false; }
-			return (it instanceof Function || typeof it == "function"); // Boolean
-		}
-	}
-})();
-
-dojo.lang.isString = function(/*anything*/ it){
-	// summary:	Return true if it is a String.
-	return (typeof it == "string" || it instanceof String);
-}
-
-dojo.lang.isAlien = function(/*anything*/ it){
-	// summary: Return true if it is not a built-in function. False if not.
-	if(!it){ return false; }
-	return !dojo.lang.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean
-}
-
-dojo.lang.isBoolean = function(/*anything*/ it){
-	// summary:	Return true if it is a Boolean.
-	return (it instanceof Boolean || typeof it == "boolean"); // Boolean
-}
-
-/**
- * The following is***() functions are somewhat "unsafe". Fortunately,
- * there are workarounds the the language provides and are mentioned
- * in the WARNING messages.
- *
- */
-dojo.lang.isNumber = function(/*anything*/ it){
-	// summary:	Return true if it is a number.
-	// description: 
-	//		WARNING - In most cases, isNaN(it) is sufficient to determine whether or not
-	// 		something is a number or can be used as such. For example, a number or string
-	// 		can be used interchangably when accessing array items (array["1"] is the same as
-	// 		array[1]) and isNaN will return false for both values ("1" and 1). However,
-	// 		isNumber("1")  will return false, which is generally not too useful.
-	// 		Also, isNumber(NaN) returns true, again, this isn't generally useful, but there
-	// 		are corner cases (like when you want to make sure that two things are really
-	// 		the same type of thing). That is really where isNumber "shines".
-	//
-	// Recommendation - Use isNaN(it) when possible
-	
-	return (it instanceof Number || typeof it == "number"); // Boolean
-}
-
-/*
- * FIXME: Should isUndefined go away since it is error prone?
- */
-dojo.lang.isUndefined = function(/*anything*/ it){
-	// summary: Return true if it is not defined.
-	// description: 
-	//		WARNING - In some cases, isUndefined will not behave as you
-	// 		might expect. If you do isUndefined(foo) and there is no earlier
-	// 		reference to foo, an error will be thrown before isUndefined is
-	// 		called. It behaves correctly if you scope yor object first, i.e.
-	// 		isUndefined(foo.bar) where foo is an object and bar isn't a
-	// 		property of the object.
-	//
-	// Recommendation - Use typeof foo == "undefined" when possible
-
-	return ((typeof(it) == "undefined")&&(it == undefined)); // Boolean
-}
-
-// end Crockford functions
-
-dojo.provide("dojo.lang.array");
-
-
-
-// FIXME: Is this worthless since you can do: if(name in obj)
-// is this the right place for this?
-
-dojo.lang.mixin(dojo.lang, {
-	has: function(/*Object*/obj, /*String*/name){
-		// summary: is there a property with the passed name in obj?
-		try{
-			return typeof obj[name] != "undefined"; // Boolean
-		}catch(e){ return false; } // Boolean
-	},
-
-	isEmpty: function(/*Object*/obj){
-		// summary:
-		//		can be used to determine if the passed object is "empty". In
-		//		the case of array-like objects, the length, property is
-		//		examined, but for other types of objects iteration is used to
-		//		examine the iterable "surface area" to determine if any
-		//		non-prototypal properties have been assigned. This iteration is
-		//		prototype-extension safe.
-		if(dojo.lang.isObject(obj)){
-			var tmp = {};
-			var count = 0;
-			for(var x in obj){
-				if(obj[x] && (!tmp[x])){
-					count++;
-					break;
-				} 
-			}
-			return count == 0; // boolean
-		}else if(dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)){
-			return obj.length == 0; // boolean
-		}
-	},
-
-	map: function(/*Array*/arr, /*Object|Function*/obj, /*Function?*/unary_func){
-		// summary:
-		//		returns a new array constituded from the return values of
-		//		passing each element of arr into unary_func. The obj parameter
-		//		may be passed to enable the passed function to be called in
-		//		that scope. In environments that support JavaScript 1.6, this
-		//		function is a passthrough to the built-in map() function
-		//		provided by Array instances. For details on this, see:
-		// 			http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:map
-		// examples:
-		//		dojo.lang.map([1, 2, 3, 4], function(item){ return item+1 });
-		//		// returns [2, 3, 4, 5]
-		var isString = dojo.lang.isString(arr);
-		if(isString){
-			// arr: String
-			arr = arr.split("");
-		}
-		if(dojo.lang.isFunction(obj)&&(!unary_func)){
-			unary_func = obj;
-			obj = dj_global;
-		}else if(dojo.lang.isFunction(obj) && unary_func){
-			// ff 1.5 compat
-			var tmpObj = obj;
-			obj = unary_func;
-			unary_func = tmpObj;
-		}
-		if(Array.map){
-			var outArr = Array.map(arr, unary_func, obj);
-		}else{
-			var outArr = [];
-			for(var i=0;i<arr.length;++i){
-				outArr.push(unary_func.call(obj, arr[i]));
-			}
-		}
-		if(isString) {
-			return outArr.join(""); // String
-		} else {
-			return outArr; // Array
-		}
-	},
-
-	reduce: function(/*Array*/arr, initialValue, /*Object|Function*/obj, /*Function*/binary_func){
-		// summary:
-		// 		similar to Python's builtin reduce() function. The result of
-		// 		the previous computation is passed as the first argument to
-		// 		binary_func along with the next value from arr. The result of
-		// 		this call is used along with the subsequent value from arr, and
-		// 		this continues until arr is exhausted. The return value is the
-		// 		last result. The "obj" and "initialValue" parameters may be
-		// 		safely omitted and the order of obj and binary_func may be
-		// 		reversed. The default order of the obj and binary_func argument
-		// 		will probably be reversed in a future release, and this call
-		// 		order is supported today.
-		// examples:
-		//		dojo.lang.reduce([1, 2, 3, 4], function(last, next){ return last+next});
-		//		returns 10
-		var reducedValue = initialValue;
-		if(arguments.length == 2){
-			binary_func = initialValue;
-			reducedValue = arr[0];
-			arr = arr.slice(1);
-		}else if(arguments.length == 3){
-			if(dojo.lang.isFunction(obj)){
-				binary_func = obj;
-				obj = null;
-			}
-		}else{
-			// un-fsck the default order
-			// FIXME:
-			//		could be wrong for some strange function object cases. Not
-			//		sure how to test for them.
-			if(dojo.lang.isFunction(obj)){
-				var tmp = binary_func;
-				binary_func = obj;
-				obj = tmp;
-			}
-		}
-
-		var ob = obj || dj_global;
-		dojo.lang.map(arr, 
-			function(val){
-				reducedValue = binary_func.call(ob, reducedValue, val);
-			}
-		);
-		return reducedValue;
-	},
-
-	forEach: function(/*Array*/anArray, /*Function*/callback, /*Object?*/thisObject){
-		// summary:
-		//		for every item in anArray, call callback with that item as its
-		//		only parameter. Return values are ignored. This funciton
-		//		corresponds (and wraps) the JavaScript 1.6 forEach method. For
-		//		more details, see:
-		//			http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:forEach
-		if(dojo.lang.isString(anArray)){
-			// anArray: String
-			anArray = anArray.split(""); 
-		}
-		if(Array.forEach){
-			Array.forEach(anArray, callback, thisObject);
-		}else{
-			// FIXME: there are several ways of handilng thisObject. Is dj_global always the default context?
-			if(!thisObject){
-				thisObject=dj_global;
-			}
-			for(var i=0,l=anArray.length; i<l; i++){ 
-				callback.call(thisObject, anArray[i], i, anArray);
-			}
-		}
-	},
-
-	_everyOrSome: function(/*Boolean*/every, /*Array*/arr, /*Function*/callback, /*Object?*/thisObject){
-		if(dojo.lang.isString(arr)){ 
-			//arr: String
-			arr = arr.split(""); 
-		}
-		if(Array.every){
-			return Array[ every ? "every" : "some" ](arr, callback, thisObject);
-		}else{
-			if(!thisObject){
-				thisObject = dj_global;
-			}
-			for(var i=0,l=arr.length; i<l; i++){
-				var result = callback.call(thisObject, arr[i], i, arr);
-				if(every && !result){
-					return false; // Boolean
-				}else if((!every)&&(result)){
-					return true; // Boolean
-				}
-			}
-			return Boolean(every); // Boolean
-		}
-	},
-
-	every: function(/*Array*/arr, /*Function*/callback, /*Object?*/thisObject){
-		// summary:
-		//		determines whether or not every item in the array satisfies the
-		//		condition implemented by callback. thisObject may be used to
-		//		scope the call to callback. The function signature is derived
-		//		from the JavaScript 1.6 Array.every() function. More
-		//		information on this can be found here:
-		//			http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:every
-		// examples:
-		//		dojo.lang.every([1, 2, 3, 4], function(item){ return item>1; });
-		//		// returns false
-		//		dojo.lang.every([1, 2, 3, 4], function(item){ return item>0; });
-		//		// returns true 
-		return this._everyOrSome(true, arr, callback, thisObject); // Boolean
-	},
-
-	some: function(/*Array*/arr, /*Function*/callback, /*Object?*/thisObject){
-		// summary:
-		//		determines whether or not any item in the array satisfies the
-		//		condition implemented by callback. thisObject may be used to
-		//		scope the call to callback. The function signature is derived
-		//		from the JavaScript 1.6 Array.some() function. More
-		//		information on this can be found here:
-		//			http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some
-		// examples:
-		//		dojo.lang.some([1, 2, 3, 4], function(item){ return item>1; });
-		//		// returns true
-		//		dojo.lang.some([1, 2, 3, 4], function(item){ return item<1; });
-		//		// returns false
-		return this._everyOrSome(false, arr, callback, thisObject); // Boolean
-	},
-
-	filter: function(/*Array*/arr, /*Function*/callback, /*Object?*/thisObject){
-		// summary:
-		//		returns a new Array with those items from arr that match the
-		//		condition implemented by callback.thisObject may be used to
-		//		scope the call to callback. The function signature is derived
-		//		from the JavaScript 1.6 Array.filter() function, although
-		//		special accomidation is made in our implementation for strings.
-		//		More information on the JS 1.6 API can be found here:
-		//			http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:filter
-		// examples:
-		//		dojo.lang.some([1, 2, 3, 4], function(item){ return item>1; });
-		//		// returns [2, 3, 4]
-		var isString = dojo.lang.isString(arr);
-		if(isString){ /*arr: String*/arr = arr.split(""); }
-		var outArr;
-		if(Array.filter){
-			outArr = Array.filter(arr, callback, thisObject);
-		}else{
-			if(!thisObject){
-				if(arguments.length >= 3){ dojo.raise("thisObject doesn't exist!"); }
-				thisObject = dj_global;
-			}
-
-			outArr = [];
-			for(var i = 0; i < arr.length; i++){
-				if(callback.call(thisObject, arr[i], i, arr)){
-					outArr.push(arr[i]);
-				}
-			}
-		}
-		if(isString){
-			return outArr.join(""); // String
-		} else {
-			return outArr; // Array
-		}
-	},
-
-	unnest: function(/* ... */){
-		// summary:
-		//		Creates a 1-D array out of all the arguments passed,
-		//		unravelling any array-like objects in the process
-		// usage:
-		//		unnest(1, 2, 3) ==> [1, 2, 3]
-		//		unnest(1, [2, [3], [[[4]]]]) ==> [1, 2, 3, 4]
-
-		var out = [];
-		for(var i = 0; i < arguments.length; i++){
-			if(dojo.lang.isArrayLike(arguments[i])){
-				var add = dojo.lang.unnest.apply(this, arguments[i]);
-				out = out.concat(add);
-			}else{
-				out.push(arguments[i]);
-			}
-		}
-		return out; // Array
-	},
-
-	toArray: function(/*Object*/arrayLike, /*Number*/startOffset){
-		// summary:
-		//		Converts an array-like object (i.e. arguments, DOMCollection)
-		//		to an array. Returns a new Array object.
-		var array = [];
-		for(var i = startOffset||0; i < arrayLike.length; i++){
-			array.push(arrayLike[i]);
-		}
-		return array; // Array
-	}
-});
-
-dojo.provide("dojo.lang.extras");
-
-
-
-dojo.lang.setTimeout = function(/*Function*/func, /*int*/delay /*, ...*/){
-	// summary:
-	//		Sets a timeout in milliseconds to execute a function in a given
-	//		context with optional arguments.
-	// usage:
-	//		dojo.lang.setTimeout(Object context, function func, number delay[, arg1[, ...]]);
-	//		dojo.lang.setTimeout(function func, number delay[, arg1[, ...]]);
-
-	var context = window, argsStart = 2;
-	if(!dojo.lang.isFunction(func)){
-		context = func;
-		func = delay;
-		delay = arguments[2];
-		argsStart++;
-	}
-
-	if(dojo.lang.isString(func)){
-		func = context[func];
-	}
-	
-	var args = [];
-	for (var i = argsStart; i < arguments.length; i++){
-		args.push(arguments[i]);
-	}
-	return dojo.global().setTimeout(function(){ func.apply(context, args); }, delay); // int
-}
-
-dojo.lang.clearTimeout = function(/*int*/timer){
-	// summary: clears timer by number from the execution queue
-
-	// FIXME:
-	//		why do we have this function? It's not portable outside of browser
-	//		environments and it's a stupid wrapper on something that browsers
-	//		provide anyway.
-	dojo.global().clearTimeout(timer);
-}
-
-dojo.lang.getNameInObj = function(/*Object*/ns, /*unknown*/item){
-	// summary: 
-	//		looks for a value in the object ns with a value matching item and
-	//		returns the property name
-	// ns: if null, dj_global is used
-	// item: value to return a name for
-	if(!ns){ ns = dj_global; }
-
-	for(var x in ns){
-		if(ns[x] === item){
-			return new String(x); // String
-		}
-	}
-	return null; // null
-}
-
-dojo.lang.shallowCopy = function(/*Object*/obj, /*Boolean?*/deep){
-	// summary:
-	//		copies object obj one level deep, or full depth if deep is true
-	var i, ret;	
-
-	if(obj === null){ /*obj: null*/ return null; } // null
-	
-	if(dojo.lang.isObject(obj)){
-		// obj: Object	
-		ret = new obj.constructor();
-		for(i in obj){
-			if(dojo.lang.isUndefined(ret[i])){
-				ret[i] = deep ? dojo.lang.shallowCopy(obj[i], deep) : obj[i];
-			}
-		}
-	}else if(dojo.lang.isArray(obj)){
-		// obj: Array
-		ret = [];
-		for(i=0; i<obj.length; i++){
-			ret[i] = deep ? dojo.lang.shallowCopy(obj[i], deep) : obj[i];
-		}
-	}else{
-		// obj: Object
-		ret = obj;
-	}
-
-	return ret; // Object
-}
-
-dojo.lang.firstValued = function(/* ... */){
-	// summary: Return the first argument that isn't undefined
-
-	for(var i = 0; i < arguments.length; i++){
-		if(typeof arguments[i] != "undefined"){
-			return arguments[i]; // Object
-		}
-	}
-	return undefined; // undefined
-}
-
-dojo.lang.getObjPathValue = function(/*String*/objpath, /*Object?*/context, /*Boolean?*/create){
-	// summary:
-	//		Gets a value from a reference specified as a string descriptor,
-	//		(e.g. "A.B") in the given context.
-	// context: if not specified, dj_global is used
-	// create: if true, undefined objects in the path are created.
-	with(dojo.parseObjPath(objpath, context, create)){
-		return dojo.evalProp(prop, obj, create); // Object
-	}
-}
-
-dojo.lang.setObjPathValue = function(/*String*/objpath, /*anything*/value, /*Object?*/context, /*Boolean?*/create){
-	// summary:
-	//		Sets a value on a reference specified as a string descriptor.
-	//		(e.g. "A.B") in the given context. This is similar to straight
-	//		assignment, except that the object structure in question can
-	//		optionally be created if it does not exist.
-	//	context: if not specified, dj_global is used
-	//	create: if true, undefined objects in the path are created.
-
-	// FIXME: why is this function valuable? It should be scheduled for
-	// removal on the grounds that dojo.parseObjPath does most of it's work and
-	// is more straightforward and has fewer dependencies. Also, the order of
-	// arguments is bone-headed. "context" should clearly come after "create".
-	// *sigh*
-	dojo.deprecated("dojo.lang.setObjPathValue", "use dojo.parseObjPath and the '=' operator", "0.6");
-
-	if(arguments.length < 4){
-		create = true;
-	}
-	with(dojo.parseObjPath(objpath, context, create)){
-		if(obj && (create || (prop in obj))){
-			obj[prop] = value;
-		}
-	}
-}
-
-dojo.provide("dojo.lang.func");
-
-
-dojo.lang.hitch = function(/*Object*/thisObject, /*Function|String*/method /*, ...*/){
-	// summary: 
-	//		Returns a function that will only ever execute in the a given scope
-	//		(thisObject). This allows for easy use of object member functions
-	//		in callbacks and other places in which the "this" keyword may
-	//		otherwise not reference the expected scope. Any number of default
-	//		positional arguments may be passed as parameters beyond "method".
-	//		Each of these values will be used to "placehold" (similar to curry)
-	//		for the hitched function. Note that the order of arguments may be
-	//		reversed in a future version.
-	// thisObject: the scope to run the method in
-	// method:
-	//		a function to be "bound" to thisObject or the name of the method in
-	//		thisObject to be used as the basis for the binding
-	// usage:
-	//		dojo.lang.hitch(foo, "bar")(); // runs foo.bar() in the scope of foo
-	//		dojo.lang.hitch(foo, myFunction); // returns a function that runs myFunction in the scope of foo
-
-	var args = [];
-	for(var x=2; x<arguments.length; x++){
-		args.push(arguments[x]);
-	}
-	var fcn = (dojo.lang.isString(method) ? thisObject[method] : method) || function(){};
-	return function(){
-		var ta = args.concat([]); // make a copy
-		for(var x=0; x<arguments.length; x++){
-			ta.push(arguments[x]);
-		}
-		return fcn.apply(thisObject, ta); // Function
-		// return fcn.apply(thisObject, arguments); // Function
-	};
-}
-
-dojo.lang.anonCtr = 0;
-dojo.lang.anon = {};
-
-dojo.lang.nameAnonFunc = function(/*Function*/anonFuncPtr, /*Object*/thisObj, /*Boolean*/searchForNames){
-	// summary:
-	//		Creates a reference to anonFuncPtr in thisObj with a completely
-	//		unique name. The new name is returned as a String.  If
-	//		searchForNames is true, an effort will be made to locate an
-	//		existing reference to anonFuncPtr in thisObj, and if one is found,
-	//		the existing name will be returned instead. The default is for
-	//		searchForNames to be false.
-	var nso = (thisObj|| dojo.lang.anon);
-	if( (searchForNames) ||
-		((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"] == true)) ){
-		for(var x in nso){
-			try{
-				if(nso[x] === anonFuncPtr){
-					return x;
-				}
-			}catch(e){} // window.external fails in IE embedded in Eclipse (Eclipse bug #151165)
-		}
-	}
-	var ret = "__"+dojo.lang.anonCtr++;
-	while(typeof nso[ret] != "undefined"){
-		ret = "__"+dojo.lang.anonCtr++;
-	}
-	nso[ret] = anonFuncPtr;
-	return ret; // String
-}
-
-dojo.lang.forward = function(funcName){
-	// summary:
-	// 		Returns a function that forwards a method call to
-	// 		this.funcName(...).  Unlike dojo.lang.hitch(), the "this" scope is
-	// 		not fixed on a single object. Ported from MochiKit.
-	return function(){
-		return this[funcName].apply(this, arguments);
-	}; // Function
-}
-
-dojo.lang.curry = function(thisObj, func /* args ... */){
-	// summary:
-	//		similar to the curry() method found in many functional programming
-	//		environments, this function returns an "argument accumulator"
-	//		function, bound to a particular scope, and "primed" with a variable
-	//		number of arguments. The curry method is unique in that it returns
-	//		a function that may return other "partial" function which can be
-	//		called repeatedly. New functions are returned until the arity of
-	//		the original function is reached, at which point the underlying
-	//		function (func) is called in the scope thisObj with all of the
-	//		accumulated arguments (plus any extras) in positional order.
-	// examples:
-	//		assuming a function defined like this:
-	//			var foo = {
-	//				bar: function(arg1, arg2, arg3){
-	//					dojo.debug.apply(dojo, arguments);
-	//				}
-	//			};
-	//		
-	//		dojo.lang.curry() can be used most simply in this way:
-	//		
-	//			tmp = dojo.lang.curry(foo, foo.bar, "arg one", "thinger");
-	//			tmp("blah", "this is superfluous");
-	//			// debugs: "arg one thinger blah this is superfluous"
-	//			tmp("blah");
-	//			// debugs: "arg one thinger blah"
-	//			tmp();
-	//			// returns a function exactly like tmp that expects one argument
-	//
-	//		other intermittent functions could be created until the 3
-	//		positional arguments are filled:
-	//
-	//			tmp = dojo.lang.curry(foo, foo.bar, "arg one");
-	//			tmp2 = tmp("arg two");
-	//			tmp2("blah blah");
-	//			// debugs: "arg one arg two blah blah"
-	//			tmp2("oy");
-	//			// debugs: "arg one arg two oy"
-	//
-	//		curry() can also be used to call the function if enough arguments
-	//		are passed in the initial invocation:
-	//
-	//			dojo.lang.curry(foo, foo.bar, "one", "two", "three", "four");
-	//			// debugs: "one two three four"
-	//			dojo.lang.curry(foo, foo.bar, "one", "two", "three");
-	//			// debugs: "one two three"
-
-
-	// FIXME: the order of func and thisObj should be changed!!!
-	var outerArgs = [];
-	thisObj = thisObj||dj_global;
-	if(dojo.lang.isString(func)){
-		func = thisObj[func];
-	}
-	for(var x=2; x<arguments.length; x++){
-		outerArgs.push(arguments[x]);
-	}
-	// since the event system replaces the original function with a new
-	// join-point runner with an arity of 0, we check to see if it's left us
-	// any clues about the original arity in lieu of the function's actual
-	// length property
-	var ecount = (func["__preJoinArity"]||func.length) - outerArgs.length;
-	// borrowed from svend tofte
-	function gather(nextArgs, innerArgs, expected){
-		var texpected = expected;
-		var totalArgs = innerArgs.slice(0); // copy
-		for(var x=0; x<nextArgs.length; x++){
-			totalArgs.push(nextArgs[x]);
-		}
-		// check the list of provided nextArgs to see if it, plus the
-		// number of innerArgs already supplied, meets the total
-		// expected.
-		expected = expected-nextArgs.length;
-		if(expected<=0){
-			var res = func.apply(thisObj, totalArgs);
-			expected = texpected;
-			return res;
-		}else{
-			return function(){
-				return gather(arguments,// check to see if we've been run
-										// with enough args
-							totalArgs,	// a copy
-							expected);	// how many more do we need to run?;
-			};
-		}
-	}
-	return gather([], outerArgs, ecount);
-}
-
-dojo.lang.curryArguments = function(/*Object*/thisObj, /*Function*/func, /*Array*/args, /*Integer, optional*/offset){
-	// summary:
-	//		similar to dojo.lang.curry(), except that a list of arguments to
-	//		start the curry with may be provided as an array instead of as
-	//		positional arguments. An offset may be specified from the 0 index
-	//		to skip some elements in args.
-	var targs = [];
-	var x = offset||0;
-	for(x=offset; x<args.length; x++){
-		targs.push(args[x]); // ensure that it's an arr
-	}
-	return dojo.lang.curry.apply(dojo.lang, [thisObj, func].concat(targs));
-}
-
-dojo.lang.tryThese = function(/*...*/){
-	// summary:
-	//		executes each function argument in turn, returning the return value
-	//		from the first one which does not throw an exception in execution.
-	//		Any number of functions may be passed.
-	for(var x=0; x<arguments.length; x++){
-		try{
-			if(typeof arguments[x] == "function"){
-				var ret = (arguments[x]());
-				if(ret){
-					return ret;
-				}
-			}
-		}catch(e){
-			dojo.debug(e);
-		}
-	}
-}
-
-dojo.lang.delayThese = function(/*Array*/farr, /*Function, optional*/cb, /*Integer*/delay, /*Function, optional*/onend){
-	// summary:
-	//		executes a series of functions contained in farr, but spaces out
-	//		calls to each function by the millisecond delay provided. If cb is
-	//		provided, it will be called directly after each item in farr is
-	//		called and if onend is passed, it will be called when all items
-	//		have completed executing.
-
-	/**
-	 * alternate: (array funcArray, function callback, function onend)
-	 * alternate: (array funcArray, function callback)
-	 * alternate: (array funcArray)
-	 */
-	if(!farr.length){ 
-		if(typeof onend == "function"){
-			onend();
-		}
-		return;
-	}
-	if((typeof delay == "undefined")&&(typeof cb == "number")){
-		delay = cb;
-		cb = function(){};
-	}else if(!cb){
-		cb = function(){};
-		if(!delay){ delay = 0; }
-	}
-	setTimeout(function(){
-		(farr.shift())();
-		cb();
-		dojo.lang.delayThese(farr, cb, delay, onend);
-	}, delay);
-}
-
-dojo.provide("dojo.event.common");
-
-
-
-
-
-// TODO: connection filter functions
-//			these are functions that accept a method invocation (like around
-//			advice) and return a boolean based on it. That value determines
-//			whether or not the connection proceeds. It could "feel" like around
-//			advice for those who know what it is (calling proceed() or not),
-//			but I think presenting it as a "filter" and/or calling it with the
-//			function args and not the MethodInvocation might make it more
-//			palletable to "normal" users than around-advice currently is
-// TODO: execution scope mangling
-//			YUI's event facility by default executes listeners in the context
-//			of the source object. This is very odd, but should probably be
-//			supported as an option (both for the source and for the dest). It
-//			can be thought of as a connection-specific hitch().
-// TODO: more resiliency for 4+ arguments to connect()
-
-dojo.event = new function(){
-	this._canTimeout = dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-
-	// FIXME: where should we put this method (not here!)?
-	function interpolateArgs(args, searchForNames){
-		var dl = dojo.lang;
-		var ao = {
-			srcObj: dj_global,
-			srcFunc: null,
-			adviceObj: dj_global,
-			adviceFunc: null,
-			aroundObj: null,
-			aroundFunc: null,
-			adviceType: (args.length>2) ? args[0] : "after",
-			precedence: "last",
-			once: false,
-			delay: null,
-			rate: 0,
-			adviceMsg: false,
-			maxCalls: -1
-		};
-
-		switch(args.length){
-			case 0: return;
-			case 1: return;
-			case 2:
-				ao.srcFunc = args[0];
-				ao.adviceFunc = args[1];
-				break;
-			case 3:
-				if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isString(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-				}else if((dl.isString(args[1]))&&(dl.isString(args[2]))){
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-				}else if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isFunction(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					var tmpName  = dl.nameAnonFunc(args[2], ao.adviceObj, searchForNames);
-					ao.adviceFunc = tmpName;
-				}else if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = dj_global;
-					var tmpName  = dl.nameAnonFunc(args[0], ao.srcObj, searchForNames);
-					ao.srcFunc = tmpName;
-					ao.adviceObj = args[1];
-					ao.adviceFunc = args[2];
-				}
-				break;
-			case 4:
-				if((dl.isObject(args[0]))&&(dl.isObject(args[2]))){
-					// we can assume that we've got an old-style "connect" from
-					// the sigslot school of event attachment. We therefore
-					// assume after-advice.
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isString(args[1]))&&(dl.isObject(args[2]))){
-					ao.adviceType = args[0];
-					ao.srcObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
-					ao.adviceType = args[0];
-					ao.srcObj = dj_global;
-					var tmpName  = dl.nameAnonFunc(args[1], dj_global, searchForNames);
-					ao.srcFunc = tmpName;
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
-					ao.srcObj = args[1];
-					ao.srcFunc = args[2];
-					var tmpName  = dl.nameAnonFunc(args[3], dj_global, searchForNames);
-					ao.adviceObj = dj_global;
-					ao.adviceFunc = tmpName;
-				}else if(dl.isObject(args[1])){
-					ao.srcObj = args[1];
-					ao.srcFunc = args[2];
-					ao.adviceObj = dj_global;
-					ao.adviceFunc = args[3];
-				}else if(dl.isObject(args[2])){
-					ao.srcObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else{
-					ao.srcObj = ao.adviceObj = ao.aroundObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-					ao.aroundFunc = args[3];
-				}
-				break;
-			case 6:
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundFunc = args[5];
-				ao.aroundObj = dj_global;
-				break;
-			default:
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundObj = args[5];
-				ao.aroundFunc = args[6];
-				ao.once = args[7];
-				ao.delay = args[8];
-				ao.rate = args[9];
-				ao.adviceMsg = args[10];
-				ao.maxCalls = (!isNaN(parseInt(args[11]))) ? args[11] : -1;
-				break;
-		}
-
-		if(dl.isFunction(ao.aroundFunc)){
-			var tmpName  = dl.nameAnonFunc(ao.aroundFunc, ao.aroundObj, searchForNames);
-			ao.aroundFunc = tmpName;
-		}
-
-		if(dl.isFunction(ao.srcFunc)){
-			ao.srcFunc = dl.getNameInObj(ao.srcObj, ao.srcFunc);
-		}
-
-		if(dl.isFunction(ao.adviceFunc)){
-			ao.adviceFunc = dl.getNameInObj(ao.adviceObj, ao.adviceFunc);
-		}
-
-		if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){
-			ao.aroundFunc = dl.getNameInObj(ao.aroundObj, ao.aroundFunc);
-		}
-
-		if(!ao.srcObj){
-			dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc);
-		}
-		if(!ao.adviceObj){
-			dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc);
-		}
-		
-		if(!ao.adviceFunc){
-			dojo.debug("bad adviceFunc for srcFunc: "+ao.srcFunc);
-			dojo.debugShallow(ao);
-		} 
-		
-		return ao;
-	}
-
-	this.connect = function(/*...*/){
-		// summary:
-		//		dojo.event.connect is the glue that holds most Dojo-based
-		//		applications together. Most combinations of arguments are
-		//		supported, with the connect() method attempting to disambiguate
-		//		the implied types of positional parameters. The following will
-		//		all work:
-		//			dojo.event.connect("globalFunctionName1", "globalFunctionName2");
-		//			dojo.event.connect(functionReference1, functionReference2);
-		//			dojo.event.connect("globalFunctionName1", functionReference2);
-		//			dojo.event.connect(functionReference1, "globalFunctionName2");
-		//			dojo.event.connect(scope1, "functionName1", "globalFunctionName2");
-		//			dojo.event.connect("globalFunctionName1", scope2, "functionName2");
-		//			dojo.event.connect(scope1, "functionName1", scope2, "functionName2");
-		//			dojo.event.connect("after", scope1, "functionName1", scope2, "functionName2");
-		//			dojo.event.connect("before", scope1, "functionName1", scope2, "functionName2");
-		//			dojo.event.connect("around", 	scope1, "functionName1", 
-		//											scope2, "functionName2",
-		//											aroundFunctionReference);
-		//			dojo.event.connect("around", 	scope1, "functionName1", 
-		//											scope2, "functionName2",
-		//											scope3, "aroundFunctionName");
-		//			dojo.event.connect("before-around", 	scope1, "functionName1", 
-		//													scope2, "functionName2",
-		//													aroundFunctionReference);
-		//			dojo.event.connect("after-around", 		scope1, "functionName1", 
-		//													scope2, "functionName2",
-		//													aroundFunctionReference);
-		//			dojo.event.connect("after-around", 		scope1, "functionName1", 
-		//													scope2, "functionName2",
-		//													scope3, "aroundFunctionName");
-		//			dojo.event.connect("around", 	scope1, "functionName1", 
-		//											scope2, "functionName2",
-		//											scope3, "aroundFunctionName", true, 30);
-		//			dojo.event.connect("around", 	scope1, "functionName1", 
-		//											scope2, "functionName2",
-		//											scope3, "aroundFunctionName", null, null, 10);
-		// adviceType: 
-		//		Optional. String. One of "before", "after", "around",
-		//		"before-around", or "after-around". FIXME
-		// srcObj:
-		//		the scope in which to locate/execute the named srcFunc. Along
-		//		with srcFunc, this creates a way to dereference the function to
-		//		call. So if the function in question is "foo.bar", the
-		//		srcObj/srcFunc pair would be foo and "bar", where "bar" is a
-		//		string and foo is an object reference.
-		// srcFunc:
-		//		the name of the function to connect to. When it is executed,
-		//		the listener being registered with this call will be called.
-		//		The adviceType defines the call order between the source and
-		//		the target functions.
-		// adviceObj:
-		//		the scope in which to locate/execute the named adviceFunc.
-		// adviceFunc:
-		//		the name of the function being conected to srcObj.srcFunc
-		// aroundObj:
-		//		the scope in which to locate/execute the named aroundFunc.
-		// aroundFunc:
-		//		the name of, or a reference to, the function that will be used
-		//		to mediate the advice call. Around advice requires a special
-		//		unary function that will be passed a "MethodInvocation" object.
-		//		These objects have several important properties, namely:
-		//			- args
-		//				a mutable array of arguments to be passed into the
-		//				wrapped function
-		//			- proceed
-		//				a function that "continues" the invocation. The result
-		//				of this function is the return of the wrapped function.
-		//				You can then manipulate this return before passing it
-		//				back out (or take further action based on it).
-		// once:
-		//		boolean that determines whether or not this connect() will
-		//		create a new connection if an identical connect() has already
-		//		been made. Defaults to "false".
-		// delay:
-		//		an optional delay (in ms), as an integer, for dispatch of a
-		//		listener after the source has been fired.
-		// rate:
-		//		an optional rate throttling parameter (integer, in ms). When
-		//		specified, this particular connection will not fire more than
-		//		once in the interval specified by the rate
-		// adviceMsg:
-		//		boolean. Should the listener have all the parameters passed in
-		//		as a single argument?
-
-		/*
-				ao.adviceType = args[0];
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundObj = args[5];
-				ao.aroundFunc = args[6];
-				ao.once = args[7];
-				ao.delay = args[8];
-				ao.rate = args[9];
-				ao.adviceMsg = args[10];
-				ao.maxCalls = args[11];
-		*/
-		if(arguments.length == 1){
-			var ao = arguments[0];
-		}else{
-			var ao = interpolateArgs(arguments, true);
-		}
-		if(dojo.lang.isString(ao.srcFunc) && (ao.srcFunc.toLowerCase() == "onkey") ){
-			if(dojo.render.html.ie){
-				ao.srcFunc = "onkeydown";
-				this.connect(ao);
-			}
-			ao.srcFunc = "onkeypress";
-		}
-
-		if(dojo.lang.isArray(ao.srcObj) && ao.srcObj!=""){
-			var tmpAO = {};
-			for(var x in ao){
-				tmpAO[x] = ao[x];
-			}
-			var mjps = [];
-			dojo.lang.forEach(ao.srcObj, function(src){
-				if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
-					src = dojo.byId(src);
-					// dojo.debug(src);
-				}
-				tmpAO.srcObj = src;
-				// dojo.debug(tmpAO.srcObj, tmpAO.srcFunc);
-				// dojo.debug(tmpAO.adviceObj, tmpAO.adviceFunc);
-				mjps.push(dojo.event.connect.call(dojo.event, tmpAO));
-			});
-			return mjps;
-		}
-
-		// FIXME: just doing a "getForMethod()" seems to be enough to put this into infinite recursion!!
-		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc);
-		if(ao.adviceFunc){
-			var mjp2 = dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj, ao.adviceFunc);
-		}
-
-		mjp.kwAddAdvice(ao);
-
-		// advanced users might want to fsck w/ the join point manually
-		return mjp; // a MethodJoinPoint object
-	}
-
-	this.log = function(/*object or funcName*/ a1, /*funcName*/ a2){
-		// summary:
-		//		a function that will wrap and log all calls to the specified
-		//		a1.a2() function. If only a1 is passed, it'll be used as a
-		//		function or function name on the global context. Logging will
-		//		be sent to dojo.debug
-		// a1:
-		//		if a2 is passed, this should be an object. If not, it can be a
-		//		function or function name.
-		// a2:
-		//		a function name
-		var kwArgs;
-		if((arguments.length == 1)&&(typeof a1 == "object")){
-			kwArgs = a1;
-		}else{
-			kwArgs = {
-				srcObj: a1,
-				srcFunc: a2
-			};
-		}
-		kwArgs.adviceFunc = function(){
-			var argsStr = [];
-			for(var x=0; x<arguments.length; x++){
-				argsStr.push(arguments[x]);
-			}
-			dojo.debug("("+kwArgs.srcObj+")."+kwArgs.srcFunc, ":", argsStr.join(", "));
-		};
-		this.kwConnect(kwArgs);
-	}
-
-	this.connectBefore = function(){
-		// summary:
-		//	 	takes the same parameters as dojo.event.connect(), except that
-		//	 	the advice type will always be "before"
-		var args = ["before"];
-		for(var i = 0; i < arguments.length; i++){ args.push(arguments[i]); }
-		return this.connect.apply(this, args); // a MethodJoinPoint object
-	}
-
-	this.connectAround = function(){
-		// summary:
-		//	 	takes the same parameters as dojo.event.connect(), except that
-		//	 	the advice type will always be "around"
-		var args = ["around"];
-		for(var i = 0; i < arguments.length; i++){ args.push(arguments[i]); }
-		return this.connect.apply(this, args); // a MethodJoinPoint object
-	}
-
-	this.connectOnce = function(){
-		// summary:
-		//	 	takes the same parameters as dojo.event.connect(), except that
-		//	 	the "once" flag will always be set to "true"
-		var ao = interpolateArgs(arguments, true);
-		ao.once = true;
-		return this.connect(ao); // a MethodJoinPoint object
-	}
-
-	this.connectRunOnce = function(){
-		// summary:
-		//	 	takes the same parameters as dojo.event.connect(), except that
-		//	 	the "maxCalls" flag will always be set to 1
-		var ao = interpolateArgs(arguments, true);
-		ao.maxCalls = 1;
-		return this.connect(ao); // a MethodJoinPoint object
-	}
-
-	this._kwConnectImpl = function(kwArgs, disconnect){
-		var fn = (disconnect) ? "disconnect" : "connect";
-		if(typeof kwArgs["srcFunc"] == "function"){
-			kwArgs.srcObj = kwArgs["srcObj"]||dj_global;
-			var tmpName  = dojo.lang.nameAnonFunc(kwArgs.srcFunc, kwArgs.srcObj, true);
-			kwArgs.srcFunc = tmpName;
-		}
-		if(typeof kwArgs["adviceFunc"] == "function"){
-			kwArgs.adviceObj = kwArgs["adviceObj"]||dj_global;
-			var tmpName  = dojo.lang.nameAnonFunc(kwArgs.adviceFunc, kwArgs.adviceObj, true);
-			kwArgs.adviceFunc = tmpName;
-		}
-		kwArgs.srcObj = kwArgs["srcObj"]||dj_global;
-		kwArgs.adviceObj = kwArgs["adviceObj"]||kwArgs["targetObj"]||dj_global;
-		kwArgs.adviceFunc = kwArgs["adviceFunc"]||kwArgs["targetFunc"];
-		// pass kwargs to avoid unrolling/repacking
-		return dojo.event[fn](kwArgs);
-	}
-
-	this.kwConnect = function(/*Object*/ kwArgs){
-		// summary:
-		//		A version of dojo.event.connect() that takes a map of named
-		//		parameters instead of the positional parameters that
-		//		dojo.event.connect() uses. For many advanced connection types,
-		//		this can be a much more readable (and potentially faster)
-		//		alternative.
-		// kwArgs:
-		// 		An object that can have the following properties:
-		//			- adviceType
-		//			- srcObj
-		//			- srcFunc
-		//			- adviceObj
-		//			- adviceFunc 
-		//			- aroundObj
-		//			- aroundFunc
-		//			- once
-		//			- delay
-		//			- rate
-		//			- adviceMsg
-		//		As with connect, only srcFunc and adviceFunc are generally
-		//		required
-
-		return this._kwConnectImpl(kwArgs, false); // a MethodJoinPoint object
-
-	}
-
-	this.disconnect = function(){
-		// summary:
-		//		Takes the same parameters as dojo.event.connect() but destroys
-		//		an existing connection instead of building a new one. For
-		//		multiple identical connections, multiple disconnect() calls
-		//		will unroll one each time it's called.
-		if(arguments.length == 1){
-			var ao = arguments[0];
-		}else{
-			var ao = interpolateArgs(arguments, true);
-		}
-		if(!ao.adviceFunc){ return; } // nothing to disconnect
-		if(dojo.lang.isString(ao.srcFunc) && (ao.srcFunc.toLowerCase() == "onkey") ){
-			if(dojo.render.html.ie){
-				ao.srcFunc = "onkeydown";
-				this.disconnect(ao);
-			}
-			ao.srcFunc = "onkeypress";
-		}
-		if(!ao.srcObj[ao.srcFunc]){ return null; } // prevent un-necessaray joinpoint creation
-		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc, true);
-		mjp.removeAdvice(ao.adviceObj, ao.adviceFunc, ao.adviceType, ao.once); // a MethodJoinPoint object
-		return mjp;
-	}
-
-	this.kwDisconnect = function(kwArgs){
-		// summary:
-		//		Takes the same parameters as dojo.event.kwConnect() but
-		//		destroys an existing connection instead of building a new one.
-		return this._kwConnectImpl(kwArgs, true);
-	}
-}
-
-// exactly one of these is created whenever a method with a joint point is run,
-// if there is at least one 'around' advice.
-dojo.event.MethodInvocation = function(/*dojo.event.MethodJoinPoint*/join_point, /*Object*/obj, /*Array*/args){
-	// summary:
-	//		a class the models the call into a function. This is used under the
-	//		covers for all method invocations on both ends of a
-	//		connect()-wrapped function dispatch. This allows us to "pickle"
-	//		calls, such as in the case of around advice.
-	// join_point:
-	//		a dojo.event.MethodJoinPoint object that represents a connection
-	// obj:
-	//		the scope the call will execute in
-	// args:
-	//		an array of parameters that will get passed to the callee
-	this.jp_ = join_point;
-	this.object = obj;
-	this.args = [];
-	// make sure we don't lock into a mutable object which can change under us.
-	// It's ok if the individual items change, though.
-	for(var x=0; x<args.length; x++){
-		this.args[x] = args[x];
-	}
-	// the index of the 'around' that is currently being executed.
-	this.around_index = -1;
-}
-
-dojo.event.MethodInvocation.prototype.proceed = function(){
-	// summary:
-	//		proceed with the method call that's represented by this invocation
-	//		object
-	this.around_index++;
-	if(this.around_index >= this.jp_.around.length){
-		return this.jp_.object[this.jp_.methodname].apply(this.jp_.object, this.args);
-		// return this.jp_.run_before_after(this.object, this.args);
-	}else{
-		var ti = this.jp_.around[this.around_index];
-		var mobj = ti[0]||dj_global;
-		var meth = ti[1];
-		return mobj[meth].call(mobj, this);
-	}
-} 
-
-
-dojo.event.MethodJoinPoint = function(/*Object*/obj, /*String*/funcName){
-	this.object = obj||dj_global;
-	this.methodname = funcName;
-	this.methodfunc = this.object[funcName];
-	this.squelch = false;
-	// this.before = [];
-	// this.after = [];
-	// this.around = [];
-}
-
-dojo.event.MethodJoinPoint.getForMethod = function(/*Object*/obj, /*String*/funcName){
-	// summary:
-	//		"static" class function for returning a MethodJoinPoint from a
-	//		scoped function. If one doesn't exist, one is created.
-	// obj:
-	//		the scope to search for the function in
-	// funcName:
-	//		the name of the function to return a MethodJoinPoint for
-	if(!obj){ obj = dj_global; }
-	var ofn = obj[funcName];
-	if(!ofn){
-		// supply a do-nothing method implementation
-		ofn = obj[funcName] = function(){};
-		if(!obj[funcName]){
-			// e.g. cannot add to inbuilt objects in IE6
-			dojo.raise("Cannot set do-nothing method on that object "+funcName);
-		}
-	}else if((typeof ofn != "function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
-		// FIXME: should we throw an exception here instead?
-		return null; 
-	}
-	// we hide our joinpoint instance in obj[funcName + '$joinpoint']
-	var jpname = funcName + "$joinpoint";
-	var jpfuncname = funcName + "$joinpoint$method";
-	var joinpoint = obj[jpname];
-	if(!joinpoint){
-		var isNode = false;
-		if(dojo.event["browser"]){
-			if( (obj["attachEvent"])||
-				(obj["nodeType"])||
-				(obj["addEventListener"]) ){
-				isNode = true;
-				dojo.event.browser.addClobberNodeAttrs(obj, [jpname, jpfuncname, funcName]);
-			}
-		}
-		var origArity = ofn.length;
-		obj[jpfuncname] = ofn;
-		// joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, funcName);
-		joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, jpfuncname);
-
-		if(!isNode){
-			obj[funcName] = function(){ 
-				// var args = [];
-				// for(var x=0; x<arguments.length; x++){
-					// args.push(arguments[x]);
-				// }
-				// return joinpoint.run.apply(joinpoint, args); 
-				return joinpoint.run.apply(joinpoint, arguments); 
-			}
-		}else{
-			obj[funcName] = function(){ 
-				var args = [];
-
-				if(!arguments.length){
-					var evt = null;
-					try{
-						if(obj.ownerDocument){
-							evt = obj.ownerDocument.parentWindow.event;
-						}else if(obj.documentElement){
-							evt = obj.documentElement.ownerDocument.parentWindow.event;
-						}else if(obj.event){ //obj is a window
-							evt = obj.event;
-						}else{
-							evt = window.event;
-						}
-					}catch(e){
-						evt = window.event;
-					}
-
-					if(evt){
-						args.push(dojo.event.browser.fixEvent(evt, this));
-					}
-				}else{
-					for(var x=0; x<arguments.length; x++){
-						if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
-							args.push(dojo.event.browser.fixEvent(arguments[x], this));
-						}else{
-							args.push(arguments[x]);
-						}
-					}
-				}
-				// return joinpoint.run.apply(joinpoint, arguments); 
-				return joinpoint.run.apply(joinpoint, args); 
-			}
-		}
-		obj[funcName].__preJoinArity = origArity;
-	}
-	return joinpoint; // dojo.event.MethodJoinPoint
-}
-
-dojo.lang.extend(dojo.event.MethodJoinPoint, {
-	squelch: false,
-
-	unintercept: function(){
-		// summary: 
-		//		destroy the connection to all listeners that may have been
-		//		registered on this joinpoint
-		this.object[this.methodname] = this.methodfunc;
-		this.before = [];
-		this.after = [];
-		this.around = [];
-	},
-
-	disconnect: dojo.lang.forward("unintercept"),
-
-	run: function(){
-		// summary:
-		//		execute the connection represented by this join point. The
-		//		arguments passed to run() will be passed to the function and
-		//		its listeners.
-		var obj = this.object||dj_global;
-		var args = arguments;
-
-		// optimization. We only compute once the array version of the arguments
-		// pseudo-arr in order to prevent building it each time advice is unrolled.
-		var aargs = [];
-		for(var x=0; x<args.length; x++){
-			aargs[x] = args[x];
-		}
-
-		var unrollAdvice  = function(marr){ 
-			if(!marr){
-				dojo.debug("Null argument to unrollAdvice()");
-				return;
-			}
-		  
-			var callObj = marr[0]||dj_global;
-			var callFunc = marr[1];
-			
-			if(!callObj[callFunc]){
-				dojo.raise("function \"" + callFunc + "\" does not exist on \"" + callObj + "\"");
-			}
-			
-			var aroundObj = marr[2]||dj_global;
-			var aroundFunc = marr[3];
-			var msg = marr[6];
-			var maxCount = marr[7];
-			if(maxCount > -1){
-				if(maxCount == 0){
-					return;
-				}
-				marr[7]--;
-			}
-			var undef;
-
-			var to = {
-				args: [],
-				jp_: this,
-				object: obj,
-				proceed: function(){
-					return callObj[callFunc].apply(callObj, to.args);
-				}
-			};
-			to.args = aargs;
-
-			var delay = parseInt(marr[4]);
-			var hasDelay = ((!isNaN(delay))&&(marr[4]!==null)&&(typeof marr[4] != "undefined"));
-			if(marr[5]){
-				var rate = parseInt(marr[5]);
-				var cur = new Date();
-				var timerSet = false;
-				if((marr["last"])&&((cur-marr.last)<=rate)){
-					if(dojo.event._canTimeout){
-						if(marr["delayTimer"]){
-							clearTimeout(marr.delayTimer);
-						}
-						var tod = parseInt(rate*2); // is rate*2 naive?
-						var mcpy = dojo.lang.shallowCopy(marr);
-						marr.delayTimer = setTimeout(function(){
-							// FIXME: on IE at least, event objects from the
-							// browser can go out of scope. How (or should?) we
-							// deal with it?
-							mcpy[5] = 0;
-							unrollAdvice(mcpy);
-						}, tod);
-					}
-					return;
-				}else{
-					marr.last = cur;
-				}
-			}
-
-			// FIXME: need to enforce rates for a connection here!
-
-			if(aroundFunc){
-				// NOTE: around advice can't delay since we might otherwise depend
-				// on execution order!
-				aroundObj[aroundFunc].call(aroundObj, to);
-			}else{
-				// var tmjp = dojo.event.MethodJoinPoint.getForMethod(obj, methname);
-				if((hasDelay)&&((dojo.render.html)||(dojo.render.svg))){  // FIXME: the render checks are grotty!
-					dj_global["setTimeout"](function(){
-						if(msg){
-							callObj[callFunc].call(callObj, to); 
-						}else{
-							callObj[callFunc].apply(callObj, args); 
-						}
-					}, delay);
-				}else{ // many environments can't support delay!
-					if(msg){
-						callObj[callFunc].call(callObj, to); 
-					}else{
-						callObj[callFunc].apply(callObj, args); 
-					}
-				}
-			}
-		};
-
-		var unRollSquelch = function(){
-			if(this.squelch){
-				try{
-					return unrollAdvice.apply(this, arguments);
-				}catch(e){ 
-					dojo.debug(e);
-				}
-			}else{
-				return unrollAdvice.apply(this, arguments);
-			}
-		};
-
-		if((this["before"])&&(this.before.length>0)){
-			// pass a cloned array, if this event disconnects this event forEach on this.before wont work
-			dojo.lang.forEach(this.before.concat(new Array()), unRollSquelch);
-		}
-
-		var result;
-		try{
-			if((this["around"])&&(this.around.length>0)){
-				var mi = new dojo.event.MethodInvocation(this, obj, args);
-				result = mi.proceed();
-			}else if(this.methodfunc){
-				result = this.object[this.methodname].apply(this.object, args);
-			}
-		}catch(e){ 
-			if(!this.squelch){ 
-				dojo.debug(e,"when calling",this.methodname,"on",this.object,"with arguments",args);
-				dojo.raise(e);
-			} 
-		}
-
-		if((this["after"])&&(this.after.length>0)){
-			// see comment on this.before above
-			dojo.lang.forEach(this.after.concat(new Array()), unRollSquelch);
-		}
-
-		return (this.methodfunc) ? result : null;
-	},
-
-	getArr: function(/*String*/kind){
-		// summary: return a list of listeners of the past "kind"
-		// kind:
-		//		can be one of: "before", "after", "around", "before-around", or
-		//		"after-around"
-		var type = "after";
-		// FIXME: we should be able to do this through props or Array.in()
-		if((typeof kind == "string")&&(kind.indexOf("before")!=-1)){
-			type = "before";
-		}else if(kind=="around"){
-			type = "around";
-		}
-		if(!this[type]){ this[type] = []; }
-		return this[type]; // Array
-	},
-
-	kwAddAdvice: function(/*Object*/args){
-		// summary:
-		//		adds advice to the joinpoint with arguments in a map
-		// args:
-		// 		An object that can have the following properties:
-		//			- adviceType
-		//			- adviceObj
-		//			- adviceFunc 
-		//			- aroundObj
-		//			- aroundFunc
-		//			- once
-		//			- delay
-		//			- rate
-		//			- adviceMsg
-		//			- maxCalls
-		this.addAdvice(	args["adviceObj"], args["adviceFunc"], 
-						args["aroundObj"], args["aroundFunc"], 
-						args["adviceType"], args["precedence"], 
-						args["once"], args["delay"], args["rate"], 
-						args["adviceMsg"], args["maxCalls"]);
-	},
-
-	addAdvice: function(	thisAdviceObj, thisAdvice, 
-							thisAroundObj, thisAround, 
-							adviceType, precedence, 
-							once, delay, rate, asMessage,
-							maxCalls){
-		// summary:
-		//		add advice to this joinpoint using positional parameters
-		// thisAdviceObj:
-		//		the scope in which to locate/execute the named adviceFunc.
-		// thisAdviceFunc:
-		//		the name of the function being conected
-		// thisAroundObj:
-		//		the scope in which to locate/execute the named aroundFunc.
-		// thisAroundFunc:
-		//		the name of the function that will be used to mediate the
-		//		advice call.
-		// adviceType: 
-		//		Optional. String. One of "before", "after", "around",
-		//		"before-around", or "after-around". FIXME
-		// once:
-		//		boolean that determines whether or not this advice will create
-		//		a new connection if an identical advice set has already been
-		//		provided. Defaults to "false".
-		// delay:
-		//		an optional delay (in ms), as an integer, for dispatch of a
-		//		listener after the source has been fired.
-		// rate:
-		//		an optional rate throttling parameter (integer, in ms). When
-		//		specified, this particular connection will not fire more than
-		//		once in the interval specified by the rate
-		// adviceMsg:
-		//		boolean. Should the listener have all the parameters passed in
-		//		as a single argument?
-		// maxCalls:
-		//		Integer. The maximum number of times this connection can be
-		//		used before being auto-disconnected. -1 signals that the
-		//		connection should never be disconnected.
-		var arr = this.getArr(adviceType);
-		if(!arr){
-			dojo.raise("bad this: " + this);
-		}
-
-		var ao = [thisAdviceObj, thisAdvice, thisAroundObj, thisAround, delay, rate, asMessage, maxCalls];
-		
-		if(once){
-			if(this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr) >= 0){
-				return;
-			}
-		}
-
-		if(precedence == "first"){
-			arr.unshift(ao);
-		}else{
-			arr.push(ao);
-		}
-	},
-
-	hasAdvice: function(thisAdviceObj, thisAdvice, adviceType, arr){
-		// summary:
-		//		returns the array index of the first existing connection
-		//		betweened the passed advice and this joinpoint. Will be -1 if
-		//		none exists.
-		// thisAdviceObj:
-		//		the scope in which to locate/execute the named adviceFunc.
-		// thisAdviceFunc:
-		//		the name of the function being conected
-		// adviceType: 
-		//		Optional. String. One of "before", "after", "around",
-		//		"before-around", or "after-around". FIXME
-		// arr:
-		//		Optional. The list of advices to search. Will be found via
-		//		adviceType if not passed
-		if(!arr){ arr = this.getArr(adviceType); }
-		var ind = -1;
-		for(var x=0; x<arr.length; x++){
-			var aao = (typeof thisAdvice == "object") ? (new String(thisAdvice)).toString() : thisAdvice;
-			var a1o = (typeof arr[x][1] == "object") ? (new String(arr[x][1])).toString() : arr[x][1];
-			if((arr[x][0] == thisAdviceObj)&&(a1o == aao)){
-				ind = x;
-			}
-		}
-		return ind; // Integer
-	},
-
-	removeAdvice: function(thisAdviceObj, thisAdvice, adviceType, once){
-		// summary:
-		//		returns the array index of the first existing connection
-		//		betweened the passed advice and this joinpoint. Will be -1 if
-		//		none exists.
-		// thisAdviceObj:
-		//		the scope in which to locate/execute the named adviceFunc.
-		// thisAdviceFunc:
-		//		the name of the function being conected
-		// adviceType: 
-		//		Optional. String. One of "before", "after", "around",
-		//		"before-around", or "after-around". FIXME
-		// once:
-		//		Optional. Should this only remove the first occurance of the
-		//		connection?
-		var arr = this.getArr(adviceType);
-		var ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
-		if(ind == -1){
-			return false;
-		}
-		while(ind != -1){
-			arr.splice(ind, 1);
-			if(once){ break; }
-			ind = this.hasAdvice(thisAdviceObj, thisAdvice, adviceType, arr);
-		}
-		return true;
-	}
-});
-
-dojo.provide("dojo.event.browser");
-
-
-// FIXME: any particular reason this is in the global scope?
-dojo._ie_clobber = new function(){
-	this.clobberNodes = [];
-
-	function nukeProp(node, prop){
-		// try{ node.removeAttribute(prop); 	}catch(e){ /* squelch */ }
-		try{ node[prop] = null; 			}catch(e){ /* squelch */ }
-		try{ delete node[prop]; 			}catch(e){ /* squelch */ }
-		// FIXME: JotLive needs this, but I'm not sure if it's too slow or not
-		try{ node.removeAttribute(prop);	}catch(e){ /* squelch */ }
-	}
-
-	this.clobber = function(nodeRef){
-		var na;
-		var tna;
-		if(nodeRef){
-			tna = nodeRef.all || nodeRef.getElementsByTagName("*");
-			na = [nodeRef];
-			for(var x=0; x<tna.length; x++){
-				// if we're gonna be clobbering the thing, at least make sure
-				// we aren't trying to do it twice
-				if(tna[x]["__doClobber__"]){
-					na.push(tna[x]);
-				}
-			}
-		}else{
-			try{ window.onload = null; }catch(e){}
-			na = (this.clobberNodes.length) ? this.clobberNodes : document.all;
-		}
-		tna = null;
-		var basis = {};
-		for(var i = na.length-1; i>=0; i=i-1){
-			var el = na[i];
-			try{
-				if(el && el["__clobberAttrs__"]){
-					for(var j=0; j<el.__clobberAttrs__.length; j++){
-						nukeProp(el, el.__clobberAttrs__[j]);
-					}
-					nukeProp(el, "__clobberAttrs__");
-					nukeProp(el, "__doClobber__");
-				}
-			}catch(e){ /* squelch! */};
-		}
-		na = null;
-	}
-}
-
-if(dojo.render.html.ie){
-	dojo.addOnUnload(function(){
-		dojo._ie_clobber.clobber();
-		try{
-			if((dojo["widget"])&&(dojo.widget["manager"])){
-				dojo.widget.manager.destroyAll();
-			}
-		}catch(e){}
-
-		// Workaround for IE leak recommended in ticket #1727 by schallm
-		if(dojo.widget){
-			for(var name in dojo.widget._templateCache){
-				if(dojo.widget._templateCache[name].node){
-					dojo.dom.destroyNode(dojo.widget._templateCache[name].node);
-					dojo.widget._templateCache[name].node = null;
-					delete dojo.widget._templateCache[name].node;
-				}
-			}
-		}
-
-		try{ window.onload = null; }catch(e){}
-		try{ window.onunload = null; }catch(e){}
-		dojo._ie_clobber.clobberNodes = [];
-		// CollectGarbage();
-	});
-}
-
-dojo.event.browser = new function(){
-
-	var clobberIdx = 0;
-
-	this.normalizedEventName = function(/*String*/eventName){
-		switch(eventName){
-			case "CheckboxStateChange":
-			case "DOMAttrModified":
-			case "DOMMenuItemActive":
-			case "DOMMenuItemInactive":
-			case "DOMMouseScroll":
-			case "DOMNodeInserted":
-			case "DOMNodeRemoved":
-			case "RadioStateChange":
-				return eventName;
-				break;
-			default:
-				var lcn = eventName.toLowerCase();
-				return (lcn.indexOf("on") == 0) ? lcn.substr(2) : lcn;
-				break;
-		}
-	}
-	
-	this.clean = function(/*DOMNode*/node){
-		// summary:
-		//		removes native event handlers so that destruction of the node
-		//		will not leak memory. On most browsers this is a no-op, but
-		//		it's critical for manual node removal on IE.
-		// node:
-		//		A DOM node. All of it's children will also be cleaned.
-		if(dojo.render.html.ie){ 
-			dojo._ie_clobber.clobber(node);
-		}
-	}
-
-	this.addClobberNode = function(/*DOMNode*/node){
-		// summary:
-		//		register the passed node to support event stripping
-		// node:
-		//		A DOM node
-		if(!dojo.render.html.ie){ return; }
-		if(!node["__doClobber__"]){
-			node.__doClobber__ = true;
-			dojo._ie_clobber.clobberNodes.push(node);
-			// this might not be the most efficient thing to do, but it's
-			// much less error prone than other approaches which were
-			// previously tried and failed
-			node.__clobberAttrs__ = [];
-		}
-	}
-
-	this.addClobberNodeAttrs = function(/*DOMNode*/node, /*Array*/props){
-		// summary:
-		//		register the passed node to support event stripping
-		// node:
-		//		A DOM node to stip properties from later
-		// props:
-		//		A list of propeties to strip from the node
-		if(!dojo.render.html.ie){ return; }
-		this.addClobberNode(node);
-		for(var x=0; x<props.length; x++){
-			node.__clobberAttrs__.push(props[x]);
-		}
-	}
-
-	this.removeListener = function(	/*DOMNode*/ node, 
-									/*String*/	evtName, 
-									/*Function*/fp, 
-									/*Boolean*/	capture){
-		// summary:
-		//		clobbers the listener from the node
-		// evtName:
-		//		the name of the handler to remove the function from
-		// node:
-		//		DOM node to attach the event to
-		// fp:
-		//		the function to register
-		// capture:
-		//		Optional. should this listener prevent propigation?
-		if(!capture){ var capture = false; }
-		evtName = dojo.event.browser.normalizedEventName(evtName);
-		if(evtName == "key"){
-			if(dojo.render.html.ie){
-				this.removeListener(node, "onkeydown", fp, capture);
-			}
-			evtName = "keypress";
-		}
-		// FIXME: this is mostly a punt, we aren't actually doing anything on IE
-		if(node.removeEventListener){
-			node.removeEventListener(evtName, fp, capture);
-		}
-	}
-
-	this.addListener = function(/*DOMNode*/node, /*String*/evtName, /*Function*/fp, /*Boolean*/capture, /*Boolean*/dontFix){
-		// summary:
-		//		adds a listener to the node
-		// evtName:
-		//		the name of the handler to add the listener to can be either of
-		//		the form "onclick" or "click"
-		// node:
-		//		DOM node to attach the event to
-		// fp:
-		//		the function to register
-		// capture:
-		//		Optional. Should this listener prevent propigation?
-		// dontFix:
-		//		Optional. Should we avoid registering a new closure around the
-		//		listener to enable fixEvent for dispatch of the registered
-		//		function?
-		if(!node){ return; } // FIXME: log and/or bail?
-		if(!capture){ var capture = false; }
-		evtName = dojo.event.browser.normalizedEventName(evtName);
-		if(evtName == "key"){
-			if(dojo.render.html.ie){
-				this.addListener(node, "onkeydown", fp, capture, dontFix);
-			}
-			evtName = "keypress";
-		}
-
-		if(!dontFix){
-			// build yet another closure around fp in order to inject fixEvent
-			// around the resulting event
-			var newfp = function(evt){
-				if(!evt){ evt = window.event; }
-				var ret = fp(dojo.event.browser.fixEvent(evt, this));
-				if(capture){
-					dojo.event.browser.stopEvent(evt);
-				}
-				return ret;
-			}
-		}else{
-			newfp = fp;
-		}
-
-		if(node.addEventListener){ 
-			node.addEventListener(evtName, newfp, capture);
-			return newfp;
-		}else{
-			evtName = "on"+evtName;
-			if(typeof node[evtName] == "function" ){
-				var oldEvt = node[evtName];
-				node[evtName] = function(e){
-					oldEvt(e);
-					return newfp(e);
-				}
-			}else{
-				node[evtName]=newfp;
-			}
-			if(dojo.render.html.ie){
-				this.addClobberNodeAttrs(node, [evtName]);
-			}
-			return newfp;
-		}
-	}
-
-	this.isEvent = function(/*Object*/obj){
-		// summary: 
-		//		Tries to determine whether or not the object is a DOM event.
-
-		// FIXME: event detection hack ... could test for additional attributes
-		// if necessary
-		return (typeof obj != "undefined")&&(obj)&&(typeof Event != "undefined")&&(obj.eventPhase); // Boolean
-		// Event does not support instanceof in Opera, otherwise:
-		//return (typeof Event != "undefined")&&(obj instanceof Event);
-	}
-
-	this.currentEvent = null;
-	
-	this.callListener = function(/*Function*/listener, /*DOMNode*/curTarget){
-		// summary:
-		//		calls the specified listener in the context of the passed node
-		//		with the current DOM event object as the only parameter
-		// listener:
-		//		the function to call
-		// curTarget:
-		//		the Node to call the function in the scope of
-		if(typeof listener != 'function'){
-			dojo.raise("listener not a function: " + listener);
-		}
-		dojo.event.browser.currentEvent.currentTarget = curTarget;
-		return listener.call(curTarget, dojo.event.browser.currentEvent);
-	}
-
-	this._stopPropagation = function(){
-		dojo.event.browser.currentEvent.cancelBubble = true; 
-	}
-
-	this._preventDefault = function(){
-		dojo.event.browser.currentEvent.returnValue = false;
-	}
-
-	this.keys = {
-		KEY_BACKSPACE: 8,
-		KEY_TAB: 9,
-		KEY_CLEAR: 12,
-		KEY_ENTER: 13,
-		KEY_SHIFT: 16,
-		KEY_CTRL: 17,
-		KEY_ALT: 18,
-		KEY_PAUSE: 19,
-		KEY_CAPS_LOCK: 20,
-		KEY_ESCAPE: 27,
-		KEY_SPACE: 32,
-		KEY_PAGE_UP: 33,
-		KEY_PAGE_DOWN: 34,
-		KEY_END: 35,
-		KEY_HOME: 36,
-		KEY_LEFT_ARROW: 37,
-		KEY_UP_ARROW: 38,
-		KEY_RIGHT_ARROW: 39,
-		KEY_DOWN_ARROW: 40,
-		KEY_INSERT: 45,
-		KEY_DELETE: 46,
-		KEY_HELP: 47,
-		KEY_LEFT_WINDOW: 91,
-		KEY_RIGHT_WINDOW: 92,
-		KEY_SELECT: 93,
-		KEY_NUMPAD_0: 96,
-		KEY_NUMPAD_1: 97,
-		KEY_NUMPAD_2: 98,
-		KEY_NUMPAD_3: 99,
-		KEY_NUMPAD_4: 100,
-		KEY_NUMPAD_5: 101,
-		KEY_NUMPAD_6: 102,
-		KEY_NUMPAD_7: 103,
-		KEY_NUMPAD_8: 104,
-		KEY_NUMPAD_9: 105,
-		KEY_NUMPAD_MULTIPLY: 106,
-		KEY_NUMPAD_PLUS: 107,
-		KEY_NUMPAD_ENTER: 108,
-		KEY_NUMPAD_MINUS: 109,
-		KEY_NUMPAD_PERIOD: 110,
-		KEY_NUMPAD_DIVIDE: 111,
-		KEY_F1: 112,
-		KEY_F2: 113,
-		KEY_F3: 114,
-		KEY_F4: 115,
-		KEY_F5: 116,
-		KEY_F6: 117,
-		KEY_F7: 118,
-		KEY_F8: 119,
-		KEY_F9: 120,
-		KEY_F10: 121,
-		KEY_F11: 122,
-		KEY_F12: 123,
-		KEY_F13: 124,
-		KEY_F14: 125,
-		KEY_F15: 126,
-		KEY_NUM_LOCK: 144,
-		KEY_SCROLL_LOCK: 145
-	};
-
-	// reverse lookup
-	this.revKeys = [];
-	for(var key in this.keys){
-		this.revKeys[this.keys[key]] = key;
-	}
-
-	this.fixEvent = function(/*Event*/evt, /*DOMNode*/sender){
-		// summary:
-		//		normalizes properties on the event object including event
-		//		bubbling methods, keystroke normalization, and x/y positions
-		// evt: the native event object
-		// sender: the node to treat as "currentTarget"
-		if(!evt){
-			if(window["event"]){
-				evt = window.event;
-			}
-		}
-		
-		if((evt["type"])&&(evt["type"].indexOf("key") == 0)){ // key events
-			evt.keys = this.revKeys;
-			// FIXME: how can we eliminate this iteration?
-			for(var key in this.keys){
-				evt[key] = this.keys[key];
-			}
-			if(evt["type"] == "keydown" && dojo.render.html.ie){
-				switch(evt.keyCode){
-					case evt.KEY_SHIFT:
-					case evt.KEY_CTRL:
-					case evt.KEY_ALT:
-					case evt.KEY_CAPS_LOCK:
-					case evt.KEY_LEFT_WINDOW:
-					case evt.KEY_RIGHT_WINDOW:
-					case evt.KEY_SELECT:
-					case evt.KEY_NUM_LOCK:
-					case evt.KEY_SCROLL_LOCK:
-					// I'll get these in keypress after the OS munges them based on numlock
-					case evt.KEY_NUMPAD_0:
-					case evt.KEY_NUMPAD_1:
-					case evt.KEY_NUMPAD_2:
-					case evt.KEY_NUMPAD_3:
-					case evt.KEY_NUMPAD_4:
-					case evt.KEY_NUMPAD_5:
-					case evt.KEY_NUMPAD_6:
-					case evt.KEY_NUMPAD_7:
-					case evt.KEY_NUMPAD_8:
-					case evt.KEY_NUMPAD_9:
-					case evt.KEY_NUMPAD_PERIOD:
-						break; // just ignore the keys that can morph
-					case evt.KEY_NUMPAD_MULTIPLY:
-					case evt.KEY_NUMPAD_PLUS:
-					case evt.KEY_NUMPAD_ENTER:
-					case evt.KEY_NUMPAD_MINUS:
-					case evt.KEY_NUMPAD_DIVIDE:
-						break; // I could handle these but just pick them up in keypress
-					case evt.KEY_PAUSE:
-					case evt.KEY_TAB:
-					case evt.KEY_BACKSPACE:
-					case evt.KEY_ENTER:
-					case evt.KEY_ESCAPE:
-					case evt.KEY_PAGE_UP:
-					case evt.KEY_PAGE_DOWN:
-					case evt.KEY_END:
-					case evt.KEY_HOME:
-					case evt.KEY_LEFT_ARROW:
-					case evt.KEY_UP_ARROW:
-					case evt.KEY_RIGHT_ARROW:
-					case evt.KEY_DOWN_ARROW:
-					case evt.KEY_INSERT:
-					case evt.KEY_DELETE:
-					case evt.KEY_F1:
-					case evt.KEY_F2:
-					case evt.KEY_F3:
-					case evt.KEY_F4:
-					case evt.KEY_F5:
-					case evt.KEY_F6:
-					case evt.KEY_F7:
-					case evt.KEY_F8:
-					case evt.KEY_F9:
-					case evt.KEY_F10:
-					case evt.KEY_F11:
-					case evt.KEY_F12:
-					case evt.KEY_F12:
-					case evt.KEY_F13:
-					case evt.KEY_F14:
-					case evt.KEY_F15:
-					case evt.KEY_CLEAR:
-					case evt.KEY_HELP:
-						evt.key = evt.keyCode;
-						break;
-					default:
-						if(evt.ctrlKey || evt.altKey){
-							var unifiedCharCode = evt.keyCode;
-							// if lower case but keycode is uppercase, convert it
-							if(unifiedCharCode >= 65 && unifiedCharCode <= 90 && evt.shiftKey == false){
-								unifiedCharCode += 32;
-							}
-							if(unifiedCharCode >= 1 && unifiedCharCode <= 26 && evt.ctrlKey){
-								unifiedCharCode += 96; // 001-032 = ctrl+[a-z]
-							}
-							evt.key = String.fromCharCode(unifiedCharCode);
-						}
-				}
-			} else if(evt["type"] == "keypress"){
-				if(dojo.render.html.opera){
-					if(evt.which == 0){
-						evt.key = evt.keyCode;
-					}else if(evt.which > 0){
-						switch(evt.which){
-							case evt.KEY_SHIFT:
-							case evt.KEY_CTRL:
-							case evt.KEY_ALT:
-							case evt.KEY_CAPS_LOCK:
-							case evt.KEY_NUM_LOCK:
-							case evt.KEY_SCROLL_LOCK:
-								break;
-							case evt.KEY_PAUSE:
-							case evt.KEY_TAB:
-							case evt.KEY_BACKSPACE:
-							case evt.KEY_ENTER:
-							case evt.KEY_ESCAPE:
-								evt.key = evt.which;
-								break;
-							default:
-								var unifiedCharCode = evt.which;
-								if((evt.ctrlKey || evt.altKey || evt.metaKey) && (evt.which >= 65 && evt.which <= 90 && evt.shiftKey == false)){
-									unifiedCharCode += 32;
-								}
-								evt.key = String.fromCharCode(unifiedCharCode);
-						}
-					}
-				}else if(dojo.render.html.ie){ // catch some IE keys that are hard to get in keyDown
-					// key combinations were handled in onKeyDown
-					if(!evt.ctrlKey && !evt.altKey && evt.keyCode >= evt.KEY_SPACE){
-						evt.key = String.fromCharCode(evt.keyCode);
-					}
-				}else if(dojo.render.html.safari){
-					switch(evt.keyCode){
-						case 25: evt.key = evt.KEY_TAB; evt.shift = true;break;
-						case 63232: evt.key = evt.KEY_UP_ARROW; break;
-						case 63233: evt.key = evt.KEY_DOWN_ARROW; break;
-						case 63234: evt.key = evt.KEY_LEFT_ARROW; break;
-						case 63235: evt.key = evt.KEY_RIGHT_ARROW; break;
-						case 63236: evt.key = evt.KEY_F1; break;
-						case 63237: evt.key = evt.KEY_F2; break;
-						case 63238: evt.key = evt.KEY_F3; break;
-						case 63239: evt.key = evt.KEY_F4; break;
-						case 63240: evt.key = evt.KEY_F5; break;
-						case 63241: evt.key = evt.KEY_F6; break;
-						case 63242: evt.key = evt.KEY_F7; break;
-						case 63243: evt.key = evt.KEY_F8; break;
-						case 63244: evt.key = evt.KEY_F9; break;
-						case 63245: evt.key = evt.KEY_F10; break;
-						case 63246: evt.key = evt.KEY_F11; break;
-						case 63247: evt.key = evt.KEY_F12; break;
-						case 63250: evt.key = evt.KEY_PAUSE; break;
-						case 63272: evt.key = evt.KEY_DELETE; break;
-						case 63273: evt.key = evt.KEY_HOME; break;
-						case 63275: evt.key = evt.KEY_END; break;
-						case 63276: evt.key = evt.KEY_PAGE_UP; break;
-						case 63277: evt.key = evt.KEY_PAGE_DOWN; break;
-						case 63302: evt.key = evt.KEY_INSERT; break;
-						case 63248://prtscr
-						case 63249://scrolllock
-						case 63289://numlock
-							break;
-						default: 
-							evt.key = evt.charCode >= evt.KEY_SPACE ? String.fromCharCode(evt.charCode) : evt.keyCode;
-					}
-				}else{
-					evt.key = evt.charCode > 0 ? String.fromCharCode(evt.charCode) : evt.keyCode;
-				}
-			}
-		}
-		if(dojo.render.html.ie){
-			if(!evt.target){ evt.target = evt.srcElement; }
-			if(!evt.currentTarget){ evt.currentTarget = (sender ? sender : evt.srcElement); }
-			if(!evt.layerX){ evt.layerX = evt.offsetX; }
-			if(!evt.layerY){ evt.layerY = evt.offsetY; }
-			// FIXME: scroll position query is duped from dojo.html to avoid dependency on that entire module
-			// DONOT replace the following to use dojo.body(), in IE, document.documentElement should be used
-			// here rather than document.body
-			var doc = (evt.srcElement && evt.srcElement.ownerDocument) ? evt.srcElement.ownerDocument : document;
-			var docBody = ((dojo.render.html.ie55)||(doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement;
-			if(!evt.pageX){ evt.pageX = evt.clientX + (docBody.scrollLeft || 0) }
-			if(!evt.pageY){ evt.pageY = evt.clientY + (docBody.scrollTop || 0) }
-			// mouseover
-			if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; }
-			// mouseout
-			if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; }
-			this.currentEvent = evt;
-			evt.callListener = this.callListener;
-			evt.stopPropagation = this._stopPropagation;
-			evt.preventDefault = this._preventDefault;
-		}
-		return evt; // Event
-	}
-
-	this.stopEvent = function(/*Event*/evt){
-		// summary:
-		//		prevents propigation and clobbers the default action of the
-		//		passed event
-		// evt: Optional for IE. The native event object.
-		if(window.event){
-			evt.cancelBubble = true;
-			evt.returnValue = false;
-		}else{
-			evt.preventDefault();
-			evt.stopPropagation();
-		}
-	}
-}
-
-dojo.provide("dojo.string.common");
-
-dojo.string.trim = function(/* string */str, /* integer? */wh){
-	//	summary
-	//	Trim whitespace from str.  If wh > 0, trim from start, if wh < 0, trim from end, else both
-	if(!str.replace){ return str; }
-	if(!str.length){ return str; }
-	var re = (wh > 0) ? (/^\s+/) : (wh < 0) ? (/\s+$/) : (/^\s+|\s+$/g);
-	return str.replace(re, "");	//	string
-}
-
-dojo.string.trimStart = function(/* string */str) {
-	//	summary
-	//	Trim whitespace at the beginning of 'str'
-	return dojo.string.trim(str, 1);	//	string
-}
-
-dojo.string.trimEnd = function(/* string */str) {
-	//	summary
-	//	Trim whitespace at the end of 'str'
-	return dojo.string.trim(str, -1);
-}
-
-dojo.string.repeat = function(/* string */str, /* integer */count, /* string? */separator) {
-	//	summary
-	//	Return 'str' repeated 'count' times, optionally placing 'separator' between each rep
-	var out = "";
-	for(var i = 0; i < count; i++) {
-		out += str;
-		if(separator && i < count - 1) {
-			out += separator;
-		}
-	}
-	return out;	//	string
-}
-
-dojo.string.pad = function(/* string */str, /* integer */len/*=2*/, /* string */ c/*='0'*/, /* integer */dir/*=1*/) {
-	//	summary
-	//	Pad 'str' to guarantee that it is at least 'len' length with the character 'c' at either the 
-	//	start (dir=1) or end (dir=-1) of the string
-	var out = String(str);
-	if(!c) {
-		c = '0';
-	}
-	if(!dir) {
-		dir = 1;
-	}
-	while(out.length < len) {
-		if(dir > 0) {
-			out = c + out;
-		} else {
-			out += c;
-		}
-	}
-	return out;	//	string
-}
-
-dojo.string.padLeft = function(/* string */str, /* integer */len, /* string */c) {
-	//	summary
-	//	same as dojo.string.pad(str, len, c, 1)
-	return dojo.string.pad(str, len, c, 1);	//	string
-}
-
-dojo.string.padRight = function(/* string */str, /* integer */len, /* string */c) {
-	//	summary
-	//	same as dojo.string.pad(str, len, c, -1)
-	return dojo.string.pad(str, len, c, -1);	//	string
-}
-
-dojo.provide("dojo.string");
-
-
-dojo.provide("dojo.io.common");
-
-
-
-dojo.io.transports = [];
-dojo.io.hdlrFuncNames = [ "load", "error", "timeout" ]; 
-
-dojo.io.Request = function(/*String*/ url, /*String*/ mimetype, /*String*/ transport, /*String or Boolean*/ changeUrl){
-
-	if((arguments.length == 1)&&(arguments[0].constructor == Object)){
-		this.fromKwArgs(arguments[0]);
-	}else{
-		this.url = url;
-		if(mimetype){ this.mimetype = mimetype; }
-		if(transport){ this.transport = transport; }
-		if(arguments.length >= 4){ this.changeUrl = changeUrl; }
-	}
-}
-
-dojo.lang.extend(dojo.io.Request, {
-
-	/** The URL to hit */
-	url: "",
-	
-	/** The mime type used to interrpret the response body */
-	mimetype: "text/plain",
-	
-	/** The HTTP method to use */
-	method: "GET",
-	
-	/** An Object containing key-value pairs to be included with the request */
-	content: undefined, // Object
-	
-	/** The transport medium to use */
-	transport: undefined, // String
-	
-	/** If defined the URL of the page is physically changed */
-	changeUrl: undefined, // String
-	
-	/** A form node to use in the request */
-	formNode: undefined, // HTMLFormElement
-	
-	/** Whether the request should be made synchronously */
-	sync: false,
-	
-	bindSuccess: false,
-
-	/** Cache/look for the request in the cache before attempting to request?
-	 *  NOTE: this isn't a browser cache, this is internal and would only cache in-page
-	 */
-	useCache: false,
-
-	/** Prevent the browser from caching this by adding a query string argument to the URL */
-	preventCache: false,
-
-	jsonFilter: function(value){
-		if(	(this.mimetype == "text/json-comment-filtered")||
-			(this.mimetype == "application/json-comment-filtered")
-		){
-			var cStartIdx = value.indexOf("\/*");
-			var cEndIdx = value.lastIndexOf("*\/");
-			if((cStartIdx == -1)||(cEndIdx == -1)){
-				dojo.debug("your JSON wasn't comment filtered!");
-				return "";
-			}
-			return value.substring(cStartIdx+2, cEndIdx);
-		}
-		dojo.debug("please consider using a mimetype of text/json-comment-filtered to avoid potential security issues with JSON endpoints");
-		return value;
-	},
-	
-	// events stuff
-	load: function(/*String*/type, /*Object*/data, /*Object*/transportImplementation, /*Object*/kwArgs){
-	
-	},
-	error: function(/*String*/type, /*Object*/error, /*Object*/transportImplementation, /*Object*/kwArgs){
-			
-	},
-	timeout: function(/*String*/type, /*Object*/empty, /*Object*/transportImplementation, /*Object*/kwArgs){
-	
-	},
-	handle: function(/*String*/type, /*Object*/data, /*Object*/transportImplementation, /*Object*/kwArgs){
-
-	},
-
-	timeoutSeconds: 0,
-	
-	// the abort method needs to be filled in by the transport that accepts the
-	// bind() request
-	abort: function(){ },
-
-	fromKwArgs: function(/*Object*/ kwArgs){
-		// summary:
-		//		Creates a dojo.io.Request from a simple object (kwArgs object).
-
-		// normalize args
-		if(kwArgs["url"]){ kwArgs.url = kwArgs.url.toString(); }
-		if(kwArgs["formNode"]) { kwArgs.formNode = dojo.byId(kwArgs.formNode); }
-		if(!kwArgs["method"] && kwArgs["formNode"] && kwArgs["formNode"].method) {
-			kwArgs.method = kwArgs["formNode"].method;
-		}
-		
-		// backwards compatibility
-		if(!kwArgs["handle"] && kwArgs["handler"]){ kwArgs.handle = kwArgs.handler; }
-		if(!kwArgs["load"] && kwArgs["loaded"]){ kwArgs.load = kwArgs.loaded; }
-		if(!kwArgs["changeUrl"] && kwArgs["changeURL"]) { kwArgs.changeUrl = kwArgs.changeURL; }
-
-		// encoding fun!
-		kwArgs.encoding = dojo.lang.firstValued(kwArgs["encoding"], djConfig["bindEncoding"], "");
-
-		kwArgs.sendTransport = dojo.lang.firstValued(kwArgs["sendTransport"], djConfig["ioSendTransport"], false);
-
-		var isFunction = dojo.lang.isFunction;
-		for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){
-			var fn = dojo.io.hdlrFuncNames[x];
-			if(kwArgs[fn] && isFunction(kwArgs[fn])){ continue; }
-			if(kwArgs["handle"] && isFunction(kwArgs["handle"])){
-				kwArgs[fn] = kwArgs.handle;
-			}
-		}
-		dojo.lang.mixin(this, kwArgs);
-	}
-
-});
-
-dojo.io.Error = function(/*String*/ msg, /*String*/ type, /*Number*/num){
-	// summary:
-	//		Constructs an object representing a bind error.
-	this.message = msg;
-	this.type =  type || "unknown"; // must be one of "io", "parse", "unknown"
-	this.number = num || 0; // per-substrate error number, not normalized
-}
-
-dojo.io.transports.addTransport = function(/*String*/name){
-	// summary:
-	//		Used to register transports that can support bind calls.
-	this.push(name);
-	// FIXME: do we need to handle things that aren't direct children of the
-	// dojo.io module? (say, dojo.io.foo.fooTransport?)
-	this[name] = dojo.io[name];
-}
-
-// binding interface, the various implementations register their capabilities
-// and the bind() method dispatches
-dojo.io.bind = function(/*dojo.io.Request or Object*/request){
-	// summary:
-	//		Binding interface for IO. Loading different IO transports, like
-	//		dojo.io.BrowserIO or dojo.io.IframeIO, will register with bind
-	//		to handle particular types of bind calls.
-	//		request: Object
-	//				Object containing bind arguments. This object is converted to
-	//				a dojo.io.Request object, and that request object is the return
-	//				value for this method.
-	if(!(request instanceof dojo.io.Request)){
-		try{
-			request = new dojo.io.Request(request);
-		}catch(e){ dojo.debug(e); }
-	}
-
-	// if the request asks for a particular implementation, use it
-	var tsName = "";
-	if(request["transport"]){
-		tsName = request["transport"];
-		if(!this[tsName]){
-			dojo.io.sendBindError(request, "No dojo.io.bind() transport with name '"
-				+ request["transport"] + "'.");
-			return request; //dojo.io.Request
-		}
-		if(!this[tsName].canHandle(request)){
-			dojo.io.sendBindError(request, "dojo.io.bind() transport with name '"
-				+ request["transport"] + "' cannot handle this type of request.");
-			return request;	//dojo.io.Request
-		}
-	}else{
-		// otherwise we do our best to auto-detect what available transports
-		// will handle 
-		for(var x=0; x<dojo.io.transports.length; x++){
-			var tmp = dojo.io.transports[x];
-			if((this[tmp])&&(this[tmp].canHandle(request))){
-				tsName = tmp;
-				break;
-			}
-		}
-		if(tsName == ""){
-			dojo.io.sendBindError(request, "None of the loaded transports for dojo.io.bind()"
-				+ " can handle the request.");
-			return request; //dojo.io.Request
-		}
-	}
-	this[tsName].bind(request);
-	request.bindSuccess = true;
-	return request; //dojo.io.Request
-}
-
-dojo.io.sendBindError = function(/* Object */request, /* String */message){
-	// summary:
-	//		Used internally by dojo.io.bind() to return/raise a bind error.
-
-	//Need to be careful since not all hostenvs support setTimeout.
-	if((typeof request.error == "function" || typeof request.handle == "function")
-		&& (typeof setTimeout == "function" || typeof setTimeout == "object")){
-		var errorObject = new dojo.io.Error(message);
-		setTimeout(function(){
-			request[(typeof request.error == "function") ? "error" : "handle"]("error", errorObject, null, request);
-		}, 50);
-	}else{
-		dojo.raise(message);
-	}
-}
-
-dojo.io.queueBind = function(/*dojo.io.Request or Object*/request){
-	// summary:
-	//		queueBind will use dojo.io.bind() but guarantee that only one bind
-	//		call is handled at a time.
-	// description:
-	//		If queueBind is called while a bind call
-	//		is in process, it will queue up the other calls to bind and call them
-	//		in order as bind calls complete.
-	//		request: Object
-	//			Same sort of request object as used for dojo.io.bind().
-	if(!(request instanceof dojo.io.Request)){
-		try{
-			request = new dojo.io.Request(request);
-		}catch(e){ dojo.debug(e); }
-	}
-
-	// make sure we get called if/when we get a response
-	var oldLoad = request.load;
-	request.load = function(){
-		dojo.io._queueBindInFlight = false;
-		var ret = oldLoad.apply(this, arguments);
-		dojo.io._dispatchNextQueueBind();
-		return ret;
-	}
-
-	var oldErr = request.error;
-	request.error = function(){
-		dojo.io._queueBindInFlight = false;
-		var ret = oldErr.apply(this, arguments);
-		dojo.io._dispatchNextQueueBind();
-		return ret;
-	}
-
-	dojo.io._bindQueue.push(request);
-	dojo.io._dispatchNextQueueBind();
-	return request; //dojo.io.Request
-}
-
-dojo.io._dispatchNextQueueBind = function(){
-	// summary:
-	//	Private method used by dojo.io.queueBind().
-	if(!dojo.io._queueBindInFlight){
-		dojo.io._queueBindInFlight = true;
-		if(dojo.io._bindQueue.length > 0){
-			dojo.io.bind(dojo.io._bindQueue.shift());
-		}else{
-			dojo.io._queueBindInFlight = false;
-		}
-	}
-}
-dojo.io._bindQueue = [];
-dojo.io._queueBindInFlight = false;
-
-dojo.io.argsFromMap = function(/*Object*/map, /*String?*/encoding, /*String?*/last){
-	// summary:
-	//		Converts name/values pairs in the map object to an URL-encoded string
-	//		with format of name1=value1&name2=value2...
-	//		map: Object
-	//			Object that has the contains the names and values.
-	//		encoding: String?
-	//			String to specify how to encode the name and value. If the encoding string
-	//			contains "utf" (case-insensitive), then encodeURIComponent is used. Otherwise
-	//			dojo.string.encodeAscii is used.
-	//		last: String?
-	//			The last parameter in the list. Helps with final string formatting?
-	var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;
-	var mapped = [];
-	var control = new Object();
-	for(var name in map){
-		var domap = function(elt){
-			var val = enc(name)+"="+enc(elt);
-			mapped[(last == name) ? "push" : "unshift"](val);
-		}
-		if(!control[name]){
-			var value = map[name];
-			// FIXME: should be isArrayLike?
-			if (dojo.lang.isArray(value)){
-				dojo.lang.forEach(value, domap);
-			}else{
-				domap(value);
-			}
-		}
-	}
-	return mapped.join("&"); //String
-}
-
-dojo.io.setIFrameSrc = function(/*DOMNode*/ iframe, /*String*/ src, /*Boolean*/ replace){
-	//summary:
-	//		Sets the URL that is loaded in an IFrame. The replace parameter indicates whether
-	//		location.replace() should be used when changing the location of the iframe.
-	try{
-		var r = dojo.render.html;
-		// dojo.debug(iframe);
-		if(!replace){
-			if(r.safari){
-				iframe.location = src;
-			}else{
-				frames[iframe.name].location = src;
-			}
-		}else{
-			// Fun with DOM 0 incompatibilities!
-			var idoc;
-			if(r.ie){
-				idoc = iframe.contentWindow.document;
-			}else if(r.safari){
-				idoc = iframe.document;
-			}else{ //  if(r.moz){
-				idoc = iframe.contentWindow;
-			}
-
-			//For Safari (at least 2.0.3) and Opera, if the iframe
-			//has just been created but it doesn't have content
-			//yet, then iframe.document may be null. In that case,
-			//use iframe.location and return.
-			if(!idoc){
-				iframe.location = src;
-				return;
-			}else{
-				idoc.location.replace(src);
-			}
-		}
-	}catch(e){ 
-		dojo.debug(e); 
-		dojo.debug("setIFrameSrc: "+e); 
-	}
-}
-
-dojo.provide("dojo.string.extras");
-
-
-
-
-
-//TODO: should we use ${} substitution syntax instead, like widgets do?
-dojo.string.substituteParams = function(/*string*/template, /* object - optional or ... */hash){
-// summary:
-//	Performs parameterized substitutions on a string. Throws an exception if any parameter is unmatched.
-//
-// description:
-//	For example,
-//		dojo.string.substituteParams("File '%{0}' is not found in directory '%{1}'.","foo.html","/temp");
-//	returns
-//		"File 'foo.html' is not found in directory '/temp'."
-//
-// template: the original string template with %{values} to be replaced
-// hash: name/value pairs (type object) to provide substitutions.  Alternatively, substitutions may be
-//	included as arguments 1..n to this function, corresponding to template parameters 0..n-1
-
-	var map = (typeof hash == 'object') ? hash : dojo.lang.toArray(arguments, 1);
-
-	return template.replace(/\%\{(\w+)\}/g, function(match, key){
-		if(typeof(map[key]) != "undefined" && map[key] != null){
-			return map[key];
-		}
-		dojo.raise("Substitution not found: " + key);
-	}); // string
-};
-
-dojo.string.capitalize = function(/*string*/str){
-// summary:
-//	Uppercases the first letter of each word
-
-	if(!dojo.lang.isString(str)){ return ""; }
-	if(arguments.length == 0){ str = this; }
-
-	var words = str.split(' ');
-	for(var i=0; i<words.length; i++){
-		words[i] = words[i].charAt(0).toUpperCase() + words[i].substring(1);
-	}
-	return words.join(" "); // string
-}
-
-dojo.string.isBlank = function(/*string*/str){
-// summary:
-//	Return true if the entire string is whitespace characters
-
-	if(!dojo.lang.isString(str)){ return true; }
-	return (dojo.string.trim(str).length == 0); // boolean
-}
-
-//FIXME: not sure exactly what encodeAscii is trying to do, or if it's working right
-dojo.string.encodeAscii = function(/*string*/str){
-	if(!dojo.lang.isString(str)){ return str; } // unknown
-	var ret = "";
-	var value = escape(str);
-	var match, re = /%u([0-9A-F]{4})/i;
-	while((match = value.match(re))){
-		var num = Number("0x"+match[1]);
-		var newVal = escape("&#" + num + ";");
-		ret += value.substring(0, match.index) + newVal;
-		value = value.substring(match.index+match[0].length);
-	}
-	ret += value.replace(/\+/g, "%2B");
-	return ret; // string
-}
-
-dojo.string.escape = function(/*string*/type, /*string*/str){
-// summary:
-//	Adds escape sequences for special characters according to the convention of 'type'
-//
-// type: one of xml|html|xhtml|sql|regexp|regex|javascript|jscript|js|ascii
-// str: the string to be escaped
-
-	var args = dojo.lang.toArray(arguments, 1);
-	switch(type.toLowerCase()){
-		case "xml":
-		case "html":
-		case "xhtml":
-			return dojo.string.escapeXml.apply(this, args); // string
-		case "sql":
-			return dojo.string.escapeSql.apply(this, args); // string
-		case "regexp":
-		case "regex":
-			return dojo.string.escapeRegExp.apply(this, args); // string
-		case "javascript":
-		case "jscript":
-		case "js":
-			return dojo.string.escapeJavaScript.apply(this, args); // string
-		case "ascii":
-			// so it's encode, but it seems useful
-			return dojo.string.encodeAscii.apply(this, args); // string
-		default:
-			return str; // string
-	}
-}
-
-dojo.string.escapeXml = function(/*string*/str, /*boolean*/noSingleQuotes){
-//summary:
-//	Adds escape sequences for special characters in XML: &<>"'
-//  Optionally skips escapes for single quotes
-
-	str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;")
-		.replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
-	if(!noSingleQuotes){ str = str.replace(/'/gm, "&#39;"); }
-	return str; // string
-}
-
-dojo.string.escapeSql = function(/*string*/str){
-//summary:
-//	Adds escape sequences for single quotes in SQL expressions
-
-	return str.replace(/'/gm, "''"); //string
-}
-
-dojo.string.escapeRegExp = function(/*string*/str){
-//summary:
-//	Adds escape sequences for special characters in regular expressions
-
-	return str.replace(/\\/gm, "\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm, "\\$1"); // string
-}
-
-//FIXME: should this one also escape backslash?
-dojo.string.escapeJavaScript = function(/*string*/str){
-//summary:
-//	Adds escape sequences for single and double quotes as well
-//	as non-visible characters in JavaScript string literal expressions
-
-	return str.replace(/(["'\f\b\n\t\r])/gm, "\\$1"); // string
-}
-
-//FIXME: looks a lot like escapeJavaScript, just adds quotes? deprecate one?
-dojo.string.escapeString = function(/*string*/str){
-//summary:
-//	Adds escape sequences for non-visual characters, double quote and backslash
-//	and surrounds with double quotes to form a valid string literal.
-	return ('"' + str.replace(/(["\\])/g, '\\$1') + '"'
-		).replace(/[\f]/g, "\\f"
-		).replace(/[\b]/g, "\\b"
-		).replace(/[\n]/g, "\\n"
-		).replace(/[\t]/g, "\\t"
-		).replace(/[\r]/g, "\\r"); // string
-}
-
-// TODO: make an HTML version
-dojo.string.summary = function(/*string*/str, /*number*/len){
-// summary:
-//	Truncates 'str' after 'len' characters and appends periods as necessary so that it ends with "..."
-
-	if(!len || str.length <= len){
-		return str; // string
-	}
-
-	return str.substring(0, len).replace(/\.+$/, "") + "..."; // string
-}
-
-dojo.string.endsWith = function(/*string*/str, /*string*/end, /*boolean*/ignoreCase){
-// summary:
-//	Returns true if 'str' ends with 'end'
-
-	if(ignoreCase){
-		str = str.toLowerCase();
-		end = end.toLowerCase();
-	}
-	if((str.length - end.length) < 0){
-		return false; // boolean
-	}
-	return str.lastIndexOf(end) == str.length - end.length; // boolean
-}
-
-dojo.string.endsWithAny = function(/*string*/str /* , ... */){
-// summary:
-//	Returns true if 'str' ends with any of the arguments[2 -> n]
-
-	for(var i = 1; i < arguments.length; i++) {
-		if(dojo.string.endsWith(str, arguments[i])) {
-			return true; // boolean
-		}
-	}
-	return false; // boolean
-}
-
-dojo.string.startsWith = function(/*string*/str, /*string*/start, /*boolean*/ignoreCase){
-// summary:
-//	Returns true if 'str' starts with 'start'
-
-	if(ignoreCase) {
-		str = str.toLowerCase();
-		start = start.toLowerCase();
-	}
-	return str.indexOf(start) == 0; // boolean
-}
-
-dojo.string.startsWithAny = function(/*string*/str /* , ... */){
-// summary:
-//	Returns true if 'str' starts with any of the arguments[2 -> n]
-
-	for(var i = 1; i < arguments.length; i++) {
-		if(dojo.string.startsWith(str, arguments[i])) {
-			return true; // boolean
-		}
-	}
-	return false; // boolean
-}
-
-dojo.string.has = function(/*string*/str /* , ... */) {
-// summary:
-//	Returns true if 'str' contains any of the arguments 2 -> n
-
-	for(var i = 1; i < arguments.length; i++) {
-		if(str.indexOf(arguments[i]) > -1){
-			return true; // boolean
-		}
-	}
-	return false; // boolean
-}
-
-dojo.string.normalizeNewlines = function(/*string*/text, /*string? (\n or \r)*/newlineChar){
-// summary:
-//	Changes occurences of CR and LF in text to CRLF, or if newlineChar is provided as '\n' or '\r',
-//	substitutes newlineChar for occurrences of CR/LF and CRLF
-
-	if (newlineChar == "\n"){
-		text = text.replace(/\r\n/g, "\n");
-		text = text.replace(/\r/g, "\n");
-	} else if (newlineChar == "\r"){
-		text = text.replace(/\r\n/g, "\r");
-		text = text.replace(/\n/g, "\r");
-	}else{
-		text = text.replace(/([^\r])\n/g, "$1\r\n").replace(/\r([^\n])/g, "\r\n$1");
-	}
-	return text; // string
-}
-
-dojo.string.splitEscaped = function(/*string*/str, /*string of length=1*/charac){
-// summary:
-//	Splits 'str' into an array separated by 'charac', but skips characters escaped with a backslash
-
-	var components = [];
-	for (var i = 0, prevcomma = 0; i < str.length; i++){
-		if (str.charAt(i) == '\\'){ i++; continue; }
-		if (str.charAt(i) == charac){
-			components.push(str.substring(prevcomma, i));
-			prevcomma = i + 1;
-		}
-	}
-	components.push(str.substr(prevcomma));
-	return components; // array
-}
-
-dojo.provide("dojo.dom");
-
-dojo.dom.ELEMENT_NODE                  = 1;
-dojo.dom.ATTRIBUTE_NODE                = 2;
-dojo.dom.TEXT_NODE                     = 3;
-dojo.dom.CDATA_SECTION_NODE            = 4;
-dojo.dom.ENTITY_REFERENCE_NODE         = 5;
-dojo.dom.ENTITY_NODE                   = 6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE   = 7;
-dojo.dom.COMMENT_NODE                  = 8;
-dojo.dom.DOCUMENT_NODE                 = 9;
-dojo.dom.DOCUMENT_TYPE_NODE            = 10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE        = 11;
-dojo.dom.NOTATION_NODE                 = 12;
-	
-dojo.dom.dojoml = "http://www.dojotoolkit.org/2004/dojoml";
-
-/**
- *	comprehensive list of XML namespaces
-**/
-dojo.dom.xmlns = {
-	//	summary
-	//	aliases for various common XML namespaces
-	svg : "http://www.w3.org/2000/svg",
-	smil : "http://www.w3.org/2001/SMIL20/",
-	mml : "http://www.w3.org/1998/Math/MathML",
-	cml : "http://www.xml-cml.org",
-	xlink : "http://www.w3.org/1999/xlink",
-	xhtml : "http://www.w3.org/1999/xhtml",
-	xul : "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-	xbl : "http://www.mozilla.org/xbl",
-	fo : "http://www.w3.org/1999/XSL/Format",
-	xsl : "http://www.w3.org/1999/XSL/Transform",
-	xslt : "http://www.w3.org/1999/XSL/Transform",
-	xi : "http://www.w3.org/2001/XInclude",
-	xforms : "http://www.w3.org/2002/01/xforms",
-	saxon : "http://icl.com/saxon",
-	xalan : "http://xml.apache.org/xslt",
-	xsd : "http://www.w3.org/2001/XMLSchema",
-	dt: "http://www.w3.org/2001/XMLSchema-datatypes",
-	xsi : "http://www.w3.org/2001/XMLSchema-instance",
-	rdf : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
-	rdfs : "http://www.w3.org/2000/01/rdf-schema#",
-	dc : "http://purl.org/dc/elements/1.1/",
-	dcq: "http://purl.org/dc/qualifiers/1.0",
-	"soap-env" : "http://schemas.xmlsoap.org/soap/envelope/",
-	wsdl : "http://schemas.xmlsoap.org/wsdl/",
-	AdobeExtensions : "http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-};
-
-dojo.dom.isNode = function(/* object */wh){
-	//	summary:
-	//		checks to see if wh is actually a node.
-	if(typeof Element == "function") {
-		try {
-			return wh instanceof Element;	//	boolean
-		} catch(e) {}
-	} else {
-		// best-guess
-		return wh && !isNaN(wh.nodeType);	//	boolean
-	}
-}
-
-dojo.dom.getUniqueId = function(){
-	//	summary:
-	//		returns a unique string for use with any DOM element
-	var _document = dojo.doc();
-	do {
-		var id = "dj_unique_" + (++arguments.callee._idIncrement);
-	}while(_document.getElementById(id));
-	return id;	//	string
-}
-dojo.dom.getUniqueId._idIncrement = 0;
-
-dojo.dom.firstElement = dojo.dom.getFirstChildElement = function(/* Element */parentNode, /* string? */tagName){
-	//	summary:
-	//		returns the first child element matching tagName
-	var node = parentNode.firstChild;
-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE){
-		node = node.nextSibling;
-	}
-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
-		node = dojo.dom.nextElement(node, tagName);
-	}
-	return node;	//	Element
-}
-
-dojo.dom.lastElement = dojo.dom.getLastChildElement = function(/* Element */parentNode, /* string? */tagName){
-	//	summary:
-	//		returns the last child element matching tagName
-	var node = parentNode.lastChild;
-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE) {
-		node = node.previousSibling;
-	}
-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
-		node = dojo.dom.prevElement(node, tagName);
-	}
-	return node;	//	Element
-}
-
-dojo.dom.nextElement = dojo.dom.getNextSiblingElement = function(/* Node */node, /* string? */tagName){
-	//	summary:
-	//		returns the next sibling element matching tagName
-	if(!node) { return null; }
-	do {
-		node = node.nextSibling;
-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);
-
-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
-		return dojo.dom.nextElement(node, tagName);
-	}
-	return node;	//	Element
-}
-
-dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement = function(/* Node */node, /* string? */tagName){
-	//	summary:
-	//		returns the previous sibling element matching tagName
-	if(!node) { return null; }
-	if(tagName) { tagName = tagName.toLowerCase(); }
-	do {
-		node = node.previousSibling;
-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);
-
-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
-		return dojo.dom.prevElement(node, tagName);
-	}
-	return node;	//	Element
-}
-
-// TODO: hmph
-/*this.forEachChildTag = function(node, unaryFunc) {
-	var child = this.getFirstChildTag(node);
-	while(child) {
-		if(unaryFunc(child) == "break") { break; }
-		child = this.getNextSiblingTag(child);
-	}
-}*/
-
-dojo.dom.moveChildren = function(/*Element*/srcNode, /*Element*/destNode, /*boolean?*/trim){
-	//	summary:
-	//		Moves children from srcNode to destNode and returns the count of
-	//		children moved; will trim off text nodes if trim == true
-	var count = 0;
-	if(trim) {
-		while(srcNode.hasChildNodes() &&
-			srcNode.firstChild.nodeType == dojo.dom.TEXT_NODE) {
-			srcNode.removeChild(srcNode.firstChild);
-		}
-		while(srcNode.hasChildNodes() &&
-			srcNode.lastChild.nodeType == dojo.dom.TEXT_NODE) {
-			srcNode.removeChild(srcNode.lastChild);
-		}
-	}
-	while(srcNode.hasChildNodes()){
-		destNode.appendChild(srcNode.firstChild);
-		count++;
-	}
-	return count;	//	number
-}
-
-dojo.dom.copyChildren = function(/*Element*/srcNode, /*Element*/destNode, /*boolean?*/trim){
-	//	summary:
-	//		Copies children from srcNde to destNode and returns the count of
-	//		children copied; will trim off text nodes if trim == true
-	var clonedNode = srcNode.cloneNode(true);
-	return this.moveChildren(clonedNode, destNode, trim);	//	number
-}
-
-dojo.dom.replaceChildren = function(/*Element*/node, /*Node*/newChild){
-	//	summary:
-	//		Removes all children of node and appends newChild. All the existing
-	//		children will be destroyed.
-	// FIXME: what if newChild is an array-like object?
-	var nodes = [];
-	if(dojo.render.html.ie){
-		for(var i=0;i<node.childNodes.length;i++){
-			nodes.push(node.childNodes[i]);
-		}
-	}
-	dojo.dom.removeChildren(node);
-	node.appendChild(newChild);
-	for(var i=0;i<nodes.length;i++){
-		dojo.dom.destroyNode(nodes[i]);
-	}
-}
-
-dojo.dom.removeChildren = function(/*Element*/node){
-	//	summary:
-	//		removes all children from node and returns the count of children removed.
-	//		The children nodes are not destroyed. Be sure to call destroyNode on them
-	//		after they are not used anymore.
-	var count = node.childNodes.length;
-	while(node.hasChildNodes()){ dojo.dom.removeNode(node.firstChild); }
-	return count; // int
-}
-
-dojo.dom.replaceNode = function(/*Element*/node, /*Element*/newNode){
-	//	summary:
-	//		replaces node with newNode and returns a reference to the removed node.
-	//		To prevent IE memory leak, call destroyNode on the returned node when
-	//		it is no longer needed.
-	return node.parentNode.replaceChild(newNode, node); // Node
-}
-
-dojo.dom.destroyNode = function(/*Node*/node){
-	// summary:
-	//		destroy a node (it can not be used any more). For IE, this is the
-	//		right function to call to prevent memory leaks. While for other
-	//		browsers, this is identical to dojo.dom.removeNode
-	if(node.parentNode){
-		node = dojo.dom.removeNode(node);
-	}
-	if(node.nodeType != 3){ // ingore TEXT_NODE
-		if(dojo.evalObjPath("dojo.event.browser.clean", false)){
-			dojo.event.browser.clean(node);
-		}
-		if(dojo.render.html.ie){
-			node.outerHTML=''; //prevent ugly IE mem leak associated with Node.removeChild (ticket #1727)
-		}
-	}
-}
-
-dojo.dom.removeNode = function(/*Node*/node){
-	// summary:
-	//		if node has a parent, removes node from parent and returns a
-	//		reference to the removed child.
-	//		To prevent IE memory leak, call destroyNode on the returned node when
-	//		it is no longer needed.
-	//	node:
-	//		the node to remove from its parent.
-
-	if(node && node.parentNode){
-		// return a ref to the removed child
-		return node.parentNode.removeChild(node); //Node
-	}
-}
-
-dojo.dom.getAncestors = function(/*Node*/node, /*function?*/filterFunction, /*boolean?*/returnFirstHit){
-	//	summary:
-	//		returns all ancestors matching optional filterFunction; will return
-	//		only the first if returnFirstHit
-	var ancestors = [];
-	var isFunction = (filterFunction && (filterFunction instanceof Function || typeof filterFunction == "function"));
-	while(node){
-		if(!isFunction || filterFunction(node)){
-			ancestors.push(node);
-		}
-		if(returnFirstHit && ancestors.length > 0){ 
-			return ancestors[0]; 	//	Node
-		}
-		
-		node = node.parentNode;
-	}
-	if(returnFirstHit){ return null; }
-	return ancestors;	//	array
-}
-
-dojo.dom.getAncestorsByTag = function(/*Node*/node, /*String*/tag, /*boolean?*/returnFirstHit){
-	//	summary:
-	//		returns all ancestors matching tag (as tagName), will only return
-	//		first one if returnFirstHit
-	tag = tag.toLowerCase();
-	return dojo.dom.getAncestors(node, function(el){
-		return ((el.tagName)&&(el.tagName.toLowerCase() == tag));
-	}, returnFirstHit);	//	Node || array
-}
-
-dojo.dom.getFirstAncestorByTag = function(/*Node*/node, /*string*/tag){
-	//	summary:
-	//		Returns first ancestor of node with tag tagName
-	return dojo.dom.getAncestorsByTag(node, tag, true);	//	Node
-}
-
-dojo.dom.isDescendantOf = function(/* Node */node, /* Node */ancestor, /* boolean? */guaranteeDescendant){
-	//	summary
-	//	Returns boolean if node is a descendant of ancestor
-	// guaranteeDescendant allows us to be a "true" isDescendantOf function
-	if(guaranteeDescendant && node) { node = node.parentNode; }
-	while(node) {
-		if(node == ancestor){ 
-			return true; 	//	boolean
-		}
-		node = node.parentNode;
-	}
-	return false;	//	boolean
-}
-
-dojo.dom.innerXML = function(/*Node*/node){
-	//	summary:
-	//		Implementation of MS's innerXML function.
-	if(node.innerXML){
-		return node.innerXML;	//	string
-	}else if (node.xml){
-		return node.xml;		//	string
-	}else if(typeof XMLSerializer != "undefined"){
-		return (new XMLSerializer()).serializeToString(node);	//	string
-	}
-}
-
-dojo.dom.createDocument = function(){
-	//	summary:
-	//		cross-browser implementation of creating an XML document object.
-	var doc = null;
-	var _document = dojo.doc();
-
-	if(!dj_undef("ActiveXObject")){
-		var prefixes = [ "MSXML2", "Microsoft", "MSXML", "MSXML3" ];
-		for(var i = 0; i<prefixes.length; i++){
-			try{
-				doc = new ActiveXObject(prefixes[i]+".XMLDOM");
-			}catch(e){ /* squelch */ };
-
-			if(doc){ break; }
-		}
-	}else if((_document.implementation)&&
-		(_document.implementation.createDocument)){
-		doc = _document.implementation.createDocument("", "", null);
-	}
-	
-	return doc;	//	DOMDocument
-}
-
-dojo.dom.createDocumentFromText = function(/*string*/str, /*string?*/mimetype){
-	//	summary:
-	//		attempts to create a Document object based on optional mime-type,
-	//		using str as the contents of the document
-	if(!mimetype){ mimetype = "text/xml"; }
-	if(!dj_undef("DOMParser")){
-		var parser = new DOMParser();
-		return parser.parseFromString(str, mimetype);	//	DOMDocument
-	}else if(!dj_undef("ActiveXObject")){
-		var domDoc = dojo.dom.createDocument();
-		if(domDoc){
-			domDoc.async = false;
-			domDoc.loadXML(str);
-			return domDoc;	//	DOMDocument
-		}else{
-			dojo.debug("toXml didn't work?");
-		}
-	/*
-	}else if((dojo.render.html.capable)&&(dojo.render.html.safari)){
-		// FIXME: this doesn't appear to work!
-		// from: http://web-graphics.com/mtarchive/001606.php
-		// var xml = '<?xml version="1.0"?>'+str;
-		var mtype = "text/xml";
-		var xml = '<?xml version="1.0"?>'+str;
-		var url = "data:"+mtype+";charset=utf-8,"+encodeURIComponent(xml);
-		var req = new XMLHttpRequest();
-		req.open("GET", url, false);
-		req.overrideMimeType(mtype);
-		req.send(null);
-		return req.responseXML;
-	*/
-	}else{
-		var _document = dojo.doc();
-		if(_document.createElement){
-			// FIXME: this may change all tags to uppercase!
-			var tmp = _document.createElement("xml");
-			tmp.innerHTML = str;
-			if(_document.implementation && _document.implementation.createDocument){
-				var xmlDoc = _document.implementation.createDocument("foo", "", null);
-				for(var i = 0; i < tmp.childNodes.length; i++) {
-					xmlDoc.importNode(tmp.childNodes.item(i), true);
-				}
-				return xmlDoc;	//	DOMDocument
-			}
-			// FIXME: probably not a good idea to have to return an HTML fragment
-			// FIXME: the tmp.doc.firstChild is as tested from IE, so it may not
-			// work that way across the board
-			return ((tmp.document)&&
-				(tmp.document.firstChild ?  tmp.document.firstChild : tmp));	//	DOMDocument
-		}
-	}
-	return null;
-}
-
-dojo.dom.prependChild = function(/*Element*/node, /*Element*/parent){
-	//	summary:
-	//		prepends node to parent's children nodes
-	if(parent.firstChild) {
-		parent.insertBefore(node, parent.firstChild);
-	} else {
-		parent.appendChild(node);
-	}
-	return true;	//	boolean
-}
-
-dojo.dom.insertBefore = function(/*Node*/node, /*Node*/ref, /*boolean?*/force){
-	//	summary:
-	//		Try to insert node before ref
-	if(	(force != true)&&
-		(node === ref || node.nextSibling === ref)){ return false; }
-	var parent = ref.parentNode;
-	parent.insertBefore(node, ref);
-	return true;	//	boolean
-}
-
-dojo.dom.insertAfter = function(/*Node*/node, /*Node*/ref, /*boolean?*/force){
-	//	summary:
-	//		Try to insert node after ref
-	var pn = ref.parentNode;
-	if(ref == pn.lastChild){
-		if((force != true)&&(node === ref)){
-			return false;	//	boolean
-		}
-		pn.appendChild(node);
-	}else{
-		return this.insertBefore(node, ref.nextSibling, force);	//	boolean
-	}
-	return true;	//	boolean
-}
-
-dojo.dom.insertAtPosition = function(/*Node*/node, /*Node*/ref, /*string*/position){
-	//	summary:
-	//		attempt to insert node in relation to ref based on position
-	if((!node)||(!ref)||(!position)){ 
-		return false;	//	boolean 
-	}
-	switch(position.toLowerCase()){
-		case "before":
-			return dojo.dom.insertBefore(node, ref);	//	boolean
-		case "after":
-			return dojo.dom.insertAfter(node, ref);		//	boolean
-		case "first":
-			if(ref.firstChild){
-				return dojo.dom.insertBefore(node, ref.firstChild);	//	boolean
-			}else{
-				ref.appendChild(node);
-				return true;	//	boolean
-			}
-			break;
-		default: // aka: last
-			ref.appendChild(node);
-			return true;	//	boolean
-	}
-}
-
-dojo.dom.insertAtIndex = function(/*Node*/node, /*Element*/containingNode, /*number*/insertionIndex){
-	//	summary:
-	//		insert node into child nodes nodelist of containingNode at
-	//		insertionIndex. insertionIndex should be between 0 and 
-	//		the number of the childNodes in containingNode. insertionIndex
-	//		specifys after how many childNodes in containingNode the node
-	//		shall be inserted. If 0 is given, node will be appended to 
-	//		containingNode.
-	var siblingNodes = containingNode.childNodes;
-
-	// if there aren't any kids yet, just add it to the beginning
-
-	if (!siblingNodes.length || siblingNodes.length == insertionIndex){
-		containingNode.appendChild(node);
-		return true;	//	boolean
-	}
-
-	if(insertionIndex == 0){
-		return dojo.dom.prependChild(node, containingNode);	//	boolean
-	}
-	// otherwise we need to walk the childNodes
-	// and find our spot
-
-	return dojo.dom.insertAfter(node, siblingNodes[insertionIndex-1]);	//	boolean
-}
-	
-dojo.dom.textContent = function(/*Node*/node, /*string*/text){
-	//	summary:
-	//		implementation of the DOM Level 3 attribute; scan node for text
-	if (arguments.length>1) {
-		var _document = dojo.doc();
-		dojo.dom.replaceChildren(node, _document.createTextNode(text));
-		return text;	//	string
-	} else {
-		if(node.textContent != undefined){ //FF 1.5
-			return node.textContent;	//	string
-		}
-		var _result = "";
-		if (node == null) { return _result; }
-		for (var i = 0; i < node.childNodes.length; i++) {
-			switch (node.childNodes[i].nodeType) {
-				case 1: // ELEMENT_NODE
-				case 5: // ENTITY_REFERENCE_NODE
-					_result += dojo.dom.textContent(node.childNodes[i]);
-					break;
-				case 3: // TEXT_NODE
-				case 2: // ATTRIBUTE_NODE
-				case 4: // CDATA_SECTION_NODE
-					_result += node.childNodes[i].nodeValue;
-					break;
-				default:
-					break;
-			}
-		}
-		return _result;	//	string
-	}
-}
-
-dojo.dom.hasParent = function(/*Node*/node){
-	//	summary:
-	//		returns whether or not node is a child of another node.
-	return Boolean(node && node.parentNode && dojo.dom.isNode(node.parentNode));	//	boolean
-}
-
-/**
- * Examples:
- *
- * myFooNode = <foo />
- * isTag(myFooNode, "foo"); // returns "foo"
- * isTag(myFooNode, "bar"); // returns ""
- * isTag(myFooNode, "FOO"); // returns ""
- * isTag(myFooNode, "hey", "foo", "bar"); // returns "foo"
-**/
-dojo.dom.isTag = function(/* Node */node /* ... */){
-	//	summary:
-	//		determines if node has any of the provided tag names and returns
-	//		the tag name that matches, empty string otherwise.
-	if(node && node.tagName) {
-		for(var i=1; i<arguments.length; i++){
-			if(node.tagName==String(arguments[i])){
-				return String(arguments[i]);	//	string
-			}
-		}
-	}
-	return "";	//	string
-}
-
-dojo.dom.setAttributeNS = function(	/*Element*/elem, /*string*/namespaceURI, 
-									/*string*/attrName, /*string*/attrValue){
-	//	summary:
-	//		implementation of DOM2 setAttributeNS that works cross browser.
-	if(elem == null || ((elem == undefined)&&(typeof elem == "undefined"))){
-		dojo.raise("No element given to dojo.dom.setAttributeNS");
-	}
-	
-	if(!((elem.setAttributeNS == undefined)&&(typeof elem.setAttributeNS == "undefined"))){ // w3c
-		elem.setAttributeNS(namespaceURI, attrName, attrValue);
-	}else{ // IE
-		// get a root XML document
-		var ownerDoc = elem.ownerDocument;
-		var attribute = ownerDoc.createNode(
-			2, // node type
-			attrName,
-			namespaceURI
-		);
-		
-		// set value
-		attribute.nodeValue = attrValue;
-		
-		// attach to element
-		elem.setAttributeNode(attribute);
-	}
-}
-
-dojo.provide("dojo.undo.browser");
-
-
-try{
-	if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-		document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='" + (djConfig["dojoIframeHistoryUrl"] || dojo.hostenv.getBaseScriptUri()+'iframe_history.html') + "'></iframe>");
-	}
-}catch(e){/* squelch */}
-
-if(dojo.render.html.opera){
-	dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work.");
-}
-
-dojo.undo.browser = {
-	initialHref: (!dj_undef("window")) ? window.location.href : "",
-	initialHash: (!dj_undef("window")) ? window.location.hash : "",
-
-	moveForward: false,
-	historyStack: [],
-	forwardStack: [],
-	historyIframe: null,
-	bookmarkAnchor: null,
-	locationTimer: null,
-
-	/**
-	 * 
-	 */
-	setInitialState: function(/*Object*/args){
-		//summary: Sets the state object and back callback for the very first page that is loaded.
-		//description: It is recommended that you call this method as part of an event listener that is registered via
-		//dojo.addOnLoad().
-		//args: Object
-		//		See the addToHistory() function for the list of valid args properties.
-		this.initialState = this._createState(this.initialHref, args, this.initialHash);
-	},
-
-	//FIXME: Would like to support arbitrary back/forward jumps. Have to rework iframeLoaded among other things.
-	//FIXME: is there a slight race condition in moz using change URL with the timer check and when
-	//       the hash gets set? I think I have seen a back/forward call in quick succession, but not consistent.
-	addToHistory: function(args){
-		//summary: adds a state object (args) to the history list. You must set
-		//djConfig.preventBackButtonFix = false to use dojo.undo.browser.
-
-		//args: Object
-		//		args can have the following properties:
-		//		To support getting back button notifications, the object argument should implement a
-		//		function called either "back", "backButton", or "handle". The string "back" will be
-		//		passed as the first and only argument to this callback.
-		//		- To support getting forward button notifications, the object argument should implement a
-		//		function called either "forward", "forwardButton", or "handle". The string "forward" will be
-		//		passed as the first and only argument to this callback.
-		//		- If you want the browser location string to change, define "changeUrl" on the object. If the
-		//		value of "changeUrl" is true, then a unique number will be appended to the URL as a fragment
-		//		identifier (http://some.domain.com/path#uniquenumber). If it is any other value that does
-		//		not evaluate to false, that value will be used as the fragment identifier. For example,
-		//		if changeUrl: 'page1', then the URL will look like: http://some.domain.com/path#page1
-	 	//		Full example:
-		//		dojo.undo.browser.addToHistory({
-		//		  back: function() { alert('back pressed'); },
-		//		  forward: function() { alert('forward pressed'); },
-		//		  changeUrl: true
-		//		});
-		//
-		//	BROWSER NOTES:
-		//  Safari 1.2: 
-		//	back button "works" fine, however it's not possible to actually
-		//	DETECT that you've moved backwards by inspecting window.location.
-		//	Unless there is some other means of locating.
-		//	FIXME: perhaps we can poll on history.length?
-		//	Safari 2.0.3+ (and probably 1.3.2+):
-		//	works fine, except when changeUrl is used. When changeUrl is used,
-		//	Safari jumps all the way back to whatever page was shown before
-		//	the page that uses dojo.undo.browser support.
-		//	IE 5.5 SP2:
-		//	back button behavior is macro. It does not move back to the
-		//	previous hash value, but to the last full page load. This suggests
-		//	that the iframe is the correct way to capture the back button in
-		//	these cases.
-		//	Don't test this page using local disk for MSIE. MSIE will not create 
-		//	a history list for iframe_history.html if served from a file: URL. 
-		//	The XML served back from the XHR tests will also not be properly 
-		//	created if served from local disk. Serve the test pages from a web 
-		//	server to test in that browser.
-		//	IE 6.0:
-		//	same behavior as IE 5.5 SP2
-		//	Firefox 1.0+:
-		//	the back button will return us to the previous hash on the same
-		//	page, thereby not requiring an iframe hack, although we do then
-		//	need to run a timer to detect inter-page movement.
-
-		//If addToHistory is called, then that means we prune the
-		//forward stack -- the user went back, then wanted to
-		//start a new forward path.
-		this.forwardStack = []; 
-
-		var hash = null;
-		var url = null;
-		if(!this.historyIframe){
-			if(djConfig["useXDomain"] && !djConfig["dojoIframeHistoryUrl"]){
-				dojo.debug("dojo.undo.browser: When using cross-domain Dojo builds,"
-					+ " please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"
-					+ " to the path on your domain to iframe_history.html");
-			}
-			this.historyIframe = window.frames["djhistory"];
-		}
-		if(!this.bookmarkAnchor){
-			this.bookmarkAnchor = document.createElement("a");
-			dojo.body().appendChild(this.bookmarkAnchor);
-			this.bookmarkAnchor.style.display = "none";
-		}
-		if(args["changeUrl"]){
-			hash = "#"+ ((args["changeUrl"]!==true) ? args["changeUrl"] : (new Date()).getTime());
-			
-			//If the current hash matches the new one, just replace the history object with
-			//this new one. It doesn't make sense to track different state objects for the same
-			//logical URL. This matches the browser behavior of only putting in one history
-			//item no matter how many times you click on the same #hash link, at least in Firefox
-			//and Safari, and there is no reliable way in those browsers to know if a #hash link
-			//has been clicked on multiple times. So making this the standard behavior in all browsers
-			//so that dojo.undo.browser's behavior is the same in all browsers.
-			if(this.historyStack.length == 0 && this.initialState.urlHash == hash){
-				this.initialState = this._createState(url, args, hash);
-				return;
-			}else if(this.historyStack.length > 0 && this.historyStack[this.historyStack.length - 1].urlHash == hash){
-				this.historyStack[this.historyStack.length - 1] = this._createState(url, args, hash);
-				return;
-			}
-
-			this.changingUrl = true;
-			setTimeout("window.location.href = '"+hash+"'; dojo.undo.browser.changingUrl = false;", 1);
-			this.bookmarkAnchor.href = hash;
-			
-			if(dojo.render.html.ie){
-				url = this._loadIframeHistory();
-
-				var oldCB = args["back"]||args["backButton"]||args["handle"];
-
-				//The function takes handleName as a parameter, in case the
-				//callback we are overriding was "handle". In that case,
-				//we will need to pass the handle name to handle.
-				var tcb = function(handleName){
-					if(window.location.hash != ""){
-						setTimeout("window.location.href = '"+hash+"';", 1);
-					}
-					//Use apply to set "this" to args, and to try to avoid memory leaks.
-					oldCB.apply(this, [handleName]);
-				}
-		
-				//Set interceptor function in the right place.
-				if(args["back"]){
-					args.back = tcb;
-				}else if(args["backButton"]){
-					args.backButton = tcb;
-				}else if(args["handle"]){
-					args.handle = tcb;
-				}
-		
-				var oldFW = args["forward"]||args["forwardButton"]||args["handle"];
-		
-				//The function takes handleName as a parameter, in case the
-				//callback we are overriding was "handle". In that case,
-				//we will need to pass the handle name to handle.
-				var tfw = function(handleName){
-					if(window.location.hash != ""){
-						window.location.href = hash;
-					}
-					if(oldFW){ // we might not actually have one
-						//Use apply to set "this" to args, and to try to avoid memory leaks.
-						oldFW.apply(this, [handleName]);
-					}
-				}
-
-				//Set interceptor function in the right place.
-				if(args["forward"]){
-					args.forward = tfw;
-				}else if(args["forwardButton"]){
-					args.forwardButton = tfw;
-				}else if(args["handle"]){
-					args.handle = tfw;
-				}
-
-			}else if(dojo.render.html.moz){
-				// start the timer
-				if(!this.locationTimer){
-					this.locationTimer = setInterval("dojo.undo.browser.checkLocation();", 200);
-				}
-			}
-		}else{
-			url = this._loadIframeHistory();
-		}
-
-		this.historyStack.push(this._createState(url, args, hash));
-	},
-
-	checkLocation: function(){
-		//summary: private method. Do not call this directly.
-		if (!this.changingUrl){
-			var hsl = this.historyStack.length;
-
-			if((window.location.hash == this.initialHash||window.location.href == this.initialHref)&&(hsl == 1)){
-				// FIXME: could this ever be a forward button?
-				// we can't clear it because we still need to check for forwards. Ugg.
-				// clearInterval(this.locationTimer);
-				this.handleBackButton();
-				return;
-			}
-			
-			// first check to see if we could have gone forward. We always halt on
-			// a no-hash item.
-			if(this.forwardStack.length > 0){
-				if(this.forwardStack[this.forwardStack.length-1].urlHash == window.location.hash){
-					this.handleForwardButton();
-					return;
-				}
-			}
-	
-			// ok, that didn't work, try someplace back in the history stack
-			if((hsl >= 2)&&(this.historyStack[hsl-2])){
-				if(this.historyStack[hsl-2].urlHash==window.location.hash){
-					this.handleBackButton();
-					return;
-				}
-			}
-		}
-	},
-
-	iframeLoaded: function(evt, ifrLoc){
-		//summary: private method. Do not call this directly.
-		if(!dojo.render.html.opera){
-			var query = this._getUrlQuery(ifrLoc.href);
-			if(query == null){ 
-				// alert("iframeLoaded");
-				// we hit the end of the history, so we should go back
-				if(this.historyStack.length == 1){
-					this.handleBackButton();
-				}
-				return;
-			}
-			if(this.moveForward){
-				// we were expecting it, so it's not either a forward or backward movement
-				this.moveForward = false;
-				return;
-			}
-	
-			//Check the back stack first, since it is more likely.
-			//Note that only one step back or forward is supported.
-			if(this.historyStack.length >= 2 && query == this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
-				this.handleBackButton();
-			}
-			else if(this.forwardStack.length > 0 && query == this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
-				this.handleForwardButton();
-			}
-		}
-	},
-
-	handleBackButton: function(){
-		//summary: private method. Do not call this directly.
-
-		//The "current" page is always at the top of the history stack.
-		var current = this.historyStack.pop();
-		if(!current){ return; }
-		var last = this.historyStack[this.historyStack.length-1];
-		if(!last && this.historyStack.length == 0){
-			last = this.initialState;
-		}
-		if (last){
-			if(last.kwArgs["back"]){
-				last.kwArgs["back"]();
-			}else if(last.kwArgs["backButton"]){
-				last.kwArgs["backButton"]();
-			}else if(last.kwArgs["handle"]){
-				last.kwArgs.handle("back");
-			}
-		}
-		this.forwardStack.push(current);
-	},
-
-	handleForwardButton: function(){
-		//summary: private method. Do not call this directly.
-
-		var last = this.forwardStack.pop();
-		if(!last){ return; }
-		if(last.kwArgs["forward"]){
-			last.kwArgs.forward();
-		}else if(last.kwArgs["forwardButton"]){
-			last.kwArgs.forwardButton();
-		}else if(last.kwArgs["handle"]){
-			last.kwArgs.handle("forward");
-		}
-		this.historyStack.push(last);
-	},
-
-	_createState: function(url, args, hash){
-		//summary: private method. Do not call this directly.
-
-		return {"url": url, "kwArgs": args, "urlHash": hash};	//Object
-	},
-
-	_getUrlQuery: function(url){
-		//summary: private method. Do not call this directly.
-		var segments = url.split("?");
-		if (segments.length < 2){
-			return null; //null
-		}
-		else{
-			return segments[1]; //String
-		}
-	},
-	
-	_loadIframeHistory: function(){
-		//summary: private method. Do not call this directly.
-		var url = (djConfig["dojoIframeHistoryUrl"] || dojo.hostenv.getBaseScriptUri()+'iframe_history.html')
-			+ "?" + (new Date()).getTime();
-		this.moveForward = true;
-		dojo.io.setIFrameSrc(this.historyIframe, url, false);	
-		return url; //String
-	}
-}
-
-dojo.provide("dojo.io.BrowserIO");
-
-
-
-
-
-
-
-
-if(!dj_undef("window")) {
-
-dojo.io.checkChildrenForFile = function(/*DOMNode*/node){
-	//summary: Checks any child nodes of node for an input type="file" element.
-	var hasFile = false;
-	var inputs = node.getElementsByTagName("input");
-	dojo.lang.forEach(inputs, function(input){
-		if(hasFile){ return; }
-		if(input.getAttribute("type")=="file"){
-			hasFile = true;
-		}
-	});
-	return hasFile; //boolean
-}
-
-dojo.io.formHasFile = function(/*DOMNode*/formNode){
-	//summary: Just calls dojo.io.checkChildrenForFile().
-	return dojo.io.checkChildrenForFile(formNode); //boolean
-}
-
-dojo.io.updateNode = function(/*DOMNode*/node, /*String or Object*/urlOrArgs){
-	//summary: Updates a DOMnode with the result of a dojo.io.bind() call.
-	//node: DOMNode
-	//urlOrArgs: String or Object
-	//		Either a String that has an URL, or an object containing dojo.io.bind()
-	//		arguments.
-	node = dojo.byId(node);
-	var args = urlOrArgs;
-	if(dojo.lang.isString(urlOrArgs)){
-		args = { url: urlOrArgs };
-	}
-	args.mimetype = "text/html";
-	args.load = function(t, d, e){
-		while(node.firstChild){
-			dojo.dom.destroyNode(node.firstChild);
-		}
-		node.innerHTML = d;
-	};
-	dojo.io.bind(args);
-}
-
-dojo.io.formFilter = function(/*DOMNode*/node) {
-	//summary: Returns true if the node is an input element that is enabled, has
-	//a name, and whose type is one of the following values: ["file", "submit", "image", "reset", "button"]
-	var type = (node.type||"").toLowerCase();
-	return !node.disabled && node.name
-		&& !dojo.lang.inArray(["file", "submit", "image", "reset", "button"], type); //boolean
-}
-
-// TODO: Move to htmlUtils
-dojo.io.encodeForm = function(/*DOMNode*/formNode, /*String?*/encoding, /*Function?*/formFilter){
-	//summary: Converts the names and values of form elements into an URL-encoded
-	//string (name=value&name=value...).
-	//formNode: DOMNode
-	//encoding: String?
-	//		The encoding to use for the values. Specify a string that starts with
-	//		"utf" (for instance, "utf8"), to use encodeURIComponent() as the encoding
-	//		function. Otherwise, dojo.string.encodeAscii will be used.
-	//formFilter: Function?
-	//	A function used to filter out form elements. The element node will be passed
-	//	to the formFilter function, and a boolean result is expected (true indicating
-	//	indicating that the element should have its name/value included in the output).
-	//	If no formFilter is specified, then dojo.io.formFilter() will be used.
-	if((!formNode)||(!formNode.tagName)||(!formNode.tagName.toLowerCase() == "form")){
-		dojo.raise("Attempted to encode a non-form element.");
-	}
-	if(!formFilter) { formFilter = dojo.io.formFilter; }
-	var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;
-	var values = [];
-
-	for(var i = 0; i < formNode.elements.length; i++){
-		var elm = formNode.elements[i];
-		if(!elm || elm.tagName.toLowerCase() == "fieldset" || !formFilter(elm)) { continue; }
-		var name = enc(elm.name);
-		var type = elm.type.toLowerCase();
-
-		if(type == "select-multiple"){
-			for(var j = 0; j < elm.options.length; j++){
-				if(elm.options[j].selected) {
-					values.push(name + "=" + enc(elm.options[j].value));
-				}
-			}
-		}else if(dojo.lang.inArray(["radio", "checkbox"], type)){
-			if(elm.checked){
-				values.push(name + "=" + enc(elm.value));
-			}
-		}else{
-			values.push(name + "=" + enc(elm.value));
-		}
-	}
-
-	// now collect input type="image", which doesn't show up in the elements array
-	var inputs = formNode.getElementsByTagName("input");
-	for(var i = 0; i < inputs.length; i++) {
-		var input = inputs[i];
-		if(input.type.toLowerCase() == "image" && input.form == formNode
-			&& formFilter(input)) {
-			var name = enc(input.name);
-			values.push(name + "=" + enc(input.value));
-			values.push(name + ".x=0");
-			values.push(name + ".y=0");
-		}
-	}
-	return values.join("&") + "&"; //String
-}
-
-dojo.io.FormBind = function(/*DOMNode or Object*/args) {
-	//summary: constructor for a dojo.io.FormBind object. See the Dojo Book for
-	//some information on usage: http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book23
-	//args: DOMNode or Object
-	//		args can either be the DOMNode for a form element, or an object containing
-	//		dojo.io.bind() arguments, one of which should be formNode with the value of
-	//		a form element DOMNode.
-	this.bindArgs = {};
-
-	if(args && args.formNode) {
-		this.init(args);
-	} else if(args) {
-		this.init({formNode: args});
-	}
-}
-dojo.lang.extend(dojo.io.FormBind, {
-	form: null,
-
-	bindArgs: null,
-
-	clickedButton: null,
-
-	init: function(/*DOMNode or Object*/args) {
-		//summary: Internal function called by the dojo.io.FormBind() constructor
-		//do not call this method directly.
-		var form = dojo.byId(args.formNode);
-
-		if(!form || !form.tagName || form.tagName.toLowerCase() != "form") {
-			throw new Error("FormBind: Couldn't apply, invalid form");
-		} else if(this.form == form) {
-			return;
-		} else if(this.form) {
-			throw new Error("FormBind: Already applied to a form");
-		}
-
-		dojo.lang.mixin(this.bindArgs, args);
-		this.form = form;
-
-		this.connect(form, "onsubmit", "submit");
-
-		for(var i = 0; i < form.elements.length; i++) {
-			var node = form.elements[i];
-			if(node && node.type && dojo.lang.inArray(["submit", "button"], node.type.toLowerCase())) {
-				this.connect(node, "onclick", "click");
-			}
-		}
-
-		var inputs = form.getElementsByTagName("input");
-		for(var i = 0; i < inputs.length; i++) {
-			var input = inputs[i];
-			if(input.type.toLowerCase() == "image" && input.form == form) {
-				this.connect(input, "onclick", "click");
-			}
-		}
-	},
-
-	onSubmit: function(/*DOMNode*/form) {
-		//summary: Function used to verify that the form is OK to submit.
-		//Override this function if you want specific form validation done.
-		return true; //boolean
-	},
-
-	submit: function(/*Event*/e) {
-		//summary: internal function that is connected as a listener to the
-		//form's onsubmit event.
-		e.preventDefault();
-		if(this.onSubmit(this.form)) {
-			dojo.io.bind(dojo.lang.mixin(this.bindArgs, {
-				formFilter: dojo.lang.hitch(this, "formFilter")
-			}));
-		}
-	},
-
-	click: function(/*Event*/e) {
-		//summary: internal method that is connected as a listener to the
-		//form's elements whose click event can submit a form.
-		var node = e.currentTarget;
-		if(node.disabled) { return; }
-		this.clickedButton = node;
-	},
-
-	formFilter: function(/*DOMNode*/node) {
-		//summary: internal function used to know which form element values to include
-		//		in the dojo.io.bind() request.
-		var type = (node.type||"").toLowerCase();
-		var accept = false;
-		if(node.disabled || !node.name) {
-			accept = false;
-		} else if(dojo.lang.inArray(["submit", "button", "image"], type)) {
-			if(!this.clickedButton) { this.clickedButton = node; }
-			accept = node == this.clickedButton;
-		} else {
-			accept = !dojo.lang.inArray(["file", "submit", "reset", "button"], type);
-		}
-		return accept; //boolean
-	},
-
-	// in case you don't have dojo.event.* pulled in
-	connect: function(/*Object*/srcObj, /*Function*/srcFcn, /*Function*/targetFcn) {
-		//summary: internal function used to connect event listeners to form elements
-		//that trigger events. Used in case dojo.event is not loaded.
-		if(dojo.evalObjPath("dojo.event.connect")) {
-			dojo.event.connect(srcObj, srcFcn, this, targetFcn);
-		} else {
-			var fcn = dojo.lang.hitch(this, targetFcn);
-			srcObj[srcFcn] = function(e) {
-				if(!e) { e = window.event; }
-				if(!e.currentTarget) { e.currentTarget = e.srcElement; }
-				if(!e.preventDefault) { e.preventDefault = function() { window.event.returnValue = false; } }
-				fcn(e);
-			}
-		}
-	}
-});
-
-dojo.io.XMLHTTPTransport = new function(){
-	//summary: The object that implements the dojo.io.bind transport for XMLHttpRequest.
-	var _this = this;
-
-	var _cache = {}; // FIXME: make this public? do we even need to?
-	this.useCache = false; // if this is true, we'll cache unless kwArgs.useCache = false
-	this.preventCache = false; // if this is true, we'll always force GET requests to cache
-
-	// FIXME: Should this even be a function? or do we just hard code it in the next 2 functions?
-	function getCacheKey(url, query, method) {
-		return url + "|" + query + "|" + method.toLowerCase();
-	}
-
-	function addToCache(url, query, method, http) {
-		_cache[getCacheKey(url, query, method)] = http;
-	}
-
-	function getFromCache(url, query, method) {
-		return _cache[getCacheKey(url, query, method)];
-	}
-
-	this.clearCache = function() {
-		_cache = {};
-	}
-
-	// moved successful load stuff here
-	function doLoad(kwArgs, http, url, query, useCache) {
-		if(	((http.status>=200)&&(http.status<300))|| 	// allow any 2XX response code
-			(http.status==304)|| 						// get it out of the cache
-			(http.status==1223)|| 						// Internet Explorer mangled the status code
-			(location.protocol=="file:" && (http.status==0 || http.status==undefined))||
-			(location.protocol=="chrome:" && (http.status==0 || http.status==undefined))
-		){
-			var ret;
-			if(kwArgs.method.toLowerCase() == "head"){
-				var headers = http.getAllResponseHeaders();
-				ret = {};
-				ret.toString = function(){ return headers; }
-				var values = headers.split(/[\r\n]+/g);
-				for(var i = 0; i < values.length; i++) {
-					var pair = values[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-					if(pair) {
-						ret[pair[1]] = pair[2];
-					}
-				}
-			}else if(kwArgs.mimetype == "text/javascript"){
-				try{
-					ret = dj_eval(http.responseText);
-				}catch(e){
-					dojo.debug(e);
-					dojo.debug(http.responseText);
-					ret = null;
-				}
-			}else if(kwArgs.mimetype.substr(0, 9) == "text/json" || kwArgs.mimetype.substr(0, 16) == "application/json"){
-				try{
-					ret = dj_eval("("+kwArgs.jsonFilter(http.responseText)+")");
-				}catch(e){
-					dojo.debug(e);
-					dojo.debug(http.responseText);
-					ret = false;
-				}
-			}else if((kwArgs.mimetype == "application/xml")||
-						(kwArgs.mimetype == "text/xml")){
-				ret = http.responseXML;
-				if(!ret || typeof ret == "string" || !http.getResponseHeader("Content-Type")) {
-					ret = dojo.dom.createDocumentFromText(http.responseText);
-				}
-			}else{
-				ret = http.responseText;
-			}
-
-			if(useCache){ // only cache successful responses
-				addToCache(url, query, kwArgs.method, http);
-			}
-			kwArgs[(typeof kwArgs.load == "function") ? "load" : "handle"]("load", ret, http, kwArgs);
-		}else{
-			var errObj = new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-			kwArgs[(typeof kwArgs.error == "function") ? "error" : "handle"]("error", errObj, http, kwArgs);
-		}
-	}
-
-	// set headers (note: Content-Type will get overriden if kwArgs.contentType is set)
-	function setHeaders(http, kwArgs){
-		if(kwArgs["headers"]) {
-			for(var header in kwArgs["headers"]) {
-				if(header.toLowerCase() == "content-type" && !kwArgs["contentType"]) {
-					kwArgs["contentType"] = kwArgs["headers"][header];
-				} else {
-					http.setRequestHeader(header, kwArgs["headers"][header]);
-				}
-			}
-		}
-	}
-
-	this.inFlight = [];
-	this.inFlightTimer = null;
-
-	this.startWatchingInFlight = function(){
-		//summary: internal method used to trigger a timer to watch all inflight
-		//XMLHttpRequests.
-		if(!this.inFlightTimer){
-			// setInterval broken in mozilla x86_64 in some circumstances, see
-			// https://bugzilla.mozilla.org/show_bug.cgi?id=344439
-			// using setTimeout instead
-			this.inFlightTimer = setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();", 10);
-		}
-	}
-
-	this.watchInFlight = function(){
-		//summary: internal method that checks each inflight XMLHttpRequest to see
-		//if it has completed or if the timeout situation applies.
-		var now = null;
-		// make sure sync calls stay thread safe, if this callback is called during a sync call
-		// and this results in another sync call before the first sync call ends the browser hangs
-		if(!dojo.hostenv._blockAsync && !_this._blockAsync){
-			for(var x=this.inFlight.length-1; x>=0; x--){
-				try{
-					var tif = this.inFlight[x];
-					if(!tif || tif.http._aborted || !tif.http.readyState){
-						this.inFlight.splice(x, 1); continue; 
-					}
-					if(4==tif.http.readyState){
-						// remove it so we can clean refs
-						this.inFlight.splice(x, 1);
-						doLoad(tif.req, tif.http, tif.url, tif.query, tif.useCache);
-					}else if (tif.startTime){
-						//See if this is a timeout case.
-						if(!now){
-							now = (new Date()).getTime();
-						}
-						if(tif.startTime + (tif.req.timeoutSeconds * 1000) < now){
-							//Stop the request.
-							if(typeof tif.http.abort == "function"){
-								tif.http.abort();
-							}
-		
-							// remove it so we can clean refs
-							this.inFlight.splice(x, 1);
-							tif.req[(typeof tif.req.timeout == "function") ? "timeout" : "handle"]("timeout", null, tif.http, tif.req);
-						}
-					}
-				}catch(e){
-					try{
-						var errObj = new dojo.io.Error("XMLHttpTransport.watchInFlight Error: " + e);
-						tif.req[(typeof tif.req.error == "function") ? "error" : "handle"]("error", errObj, tif.http, tif.req);
-					}catch(e2){
-						dojo.debug("XMLHttpTransport error callback failed: " + e2);
-					}
-				}
-			}
-		}
-
-		clearTimeout(this.inFlightTimer);
-		if(this.inFlight.length == 0){
-			this.inFlightTimer = null;
-			return;
-		}
-		this.inFlightTimer = setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();", 10);
-	}
-
-	var hasXmlHttp = dojo.hostenv.getXmlhttpObject() ? true : false;
-	this.canHandle = function(/*dojo.io.Request*/kwArgs){
-		//summary: Tells dojo.io.bind() if this is a good transport to
-		//use for the particular type of request. This type of transport cannot
-		//handle forms that have an input type="file" element.
-
-		// FIXME: we need to determine when form values need to be
-		// multi-part mime encoded and avoid using this transport for those
-		// requests.
-		var mlc = kwArgs["mimetype"].toLowerCase()||"";
-		return hasXmlHttp
-			&& (
-				(
-					dojo.lang.inArray([
-						"text/plain", "text/html", "application/xml", 
-						"text/xml", "text/javascript"
-						], mlc
-					)
-				) || (
-					mlc.substr(0, 9) == "text/json" || mlc.substr(0, 16) == "application/json"
-				)
-			)
-			&& !( kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"]) ); //boolean
-	}
-
-	this.multipartBoundary = "45309FFF-BD65-4d50-99C9-36986896A96F";	// unique guid as a boundary value for multipart posts
-
-	this.bind = function(/*dojo.io.Request*/kwArgs){
-		//summary: function that sends the request to the server.
-
-		//This function will attach an abort() function to the kwArgs dojo.io.Request object,
-		//so if you need to abort the request, you can call that method on the request object.
-		//The following are acceptable properties in kwArgs (in addition to the
-		//normal dojo.io.Request object properties).
-		//url: String: URL the server URL to use for the request.
-		//method: String: the HTTP method to use (GET, POST, etc...).
-		//mimetype: Specifies what format the result data should be given to the load/handle callback. Valid values are:
-		//		text/javascript, text/json, application/json, application/xml, text/xml. Any other mimetype will give back a text
-		//		string.
-		//transport: String: specify "XMLHTTPTransport" to force the use of this XMLHttpRequest transport.
-		//headers: Object: The object property names and values will be sent as HTTP request header
-		//		names and values.
-		//sendTransport: boolean: If true, then dojo.transport=xmlhttp will be added to the request.
-		//encoding: String: The type of encoding to use when dealing with the content kwArgs property.
-		//content: Object: The content object is converted into a name=value&name=value string, by
-		//		using dojo.io.argsFromMap(). The encoding kwArgs property is passed to dojo.io.argsFromMap()
-		//		for use in encoding the names and values. The resulting string is added to the request.
-		//formNode: DOMNode: a form element node. This should not normally be used. Use new dojo.io.FormBind() instead.
-		//		If formNode is used, then the names and values of the form elements will be converted
-		//		to a name=value&name=value string and added to the request. The encoding kwArgs property is used
-		//		to encode the names and values.
-		//postContent: String: Raw name=value&name=value string to be included as part of the request.
-		//back or backButton: Function: A function to be called if the back button is pressed. If this kwArgs property
-		//		is used, then back button support via dojo.undo.browser will be used. See notes for dojo.undo.browser on usage.
-		//		You need to set djConfig.preventBackButtonFix = false to enable back button support.
-		//changeUrl: boolean or String: Used as part of back button support. See notes for dojo.undo.browser on usage.
-		//user: String: The user name. Used in conjuction with password. Passed to XMLHttpRequest.open().
-		//password: String: The user's password. Used in conjuction with user. Passed to XMLHttpRequest.open().
-		//file: Object or Array of Objects: an object simulating a file to be uploaded. file objects should have the following properties:
-		//		name or fileName: the name of the file
-		//		contentType: the MIME content type for the file.
-		//		content: the actual content of the file.
-		//multipart: boolean: indicates whether this should be a multipart mime request. If kwArgs.file exists, then this
-		//		property is set to true automatically.
-		//sync: boolean: if true, then a synchronous XMLHttpRequest call is done,
-		//		if false (the default), then an asynchronous call is used.
-		//preventCache: boolean: If true, then a cache busting parameter is added to the request URL.
-		//		default value is false.
-		//useCache: boolean: If true, then XMLHttpTransport will keep an internal cache of the server
-		//		response and use that response if a similar request is done again.
-		//		A similar request is one that has the same URL, query string and HTTP method value.
-		//		default is false.
-		if(!kwArgs["url"]){
-			// are we performing a history action?
-			if( !kwArgs["formNode"]
-				&& (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"] || kwArgs["watchForURL"])
-				&& (!djConfig.preventBackButtonFix)) {
-        dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request",
-        				"Use dojo.undo.browser.addToHistory() instead.", "0.4");
-				dojo.undo.browser.addToHistory(kwArgs);
-				return true;
-			}
-		}
-
-		// build this first for cache purposes
-		var url = kwArgs.url;
-		var query = "";
-		if(kwArgs["formNode"]){
-			var ta = kwArgs.formNode.getAttribute("action");
-			if((ta)&&(!kwArgs["url"])){ url = ta; }
-			var tp = kwArgs.formNode.getAttribute("method");
-			if((tp)&&(!kwArgs["method"])){ kwArgs.method = tp; }
-			query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding, kwArgs["formFilter"]);
-		}
-
-		if(url.indexOf("#") > -1) {
-			dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url);
-			url = url.split("#")[0];
-		}
-
-		if(kwArgs["file"]){
-			// force post for file transfer
-			kwArgs.method = "post";
-		}
-
-		if(!kwArgs["method"]){
-			kwArgs.method = "get";
-		}
-
-		// guess the multipart value
-		if(kwArgs.method.toLowerCase() == "get"){
-			// GET cannot use multipart
-			kwArgs.multipart = false;
-		}else{
-			if(kwArgs["file"]){
-				// enforce multipart when sending files
-				kwArgs.multipart = true;
-			}else if(!kwArgs["multipart"]){
-				// default 
-				kwArgs.multipart = false;
-			}
-		}
-
-		if(kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]){
-			dojo.undo.browser.addToHistory(kwArgs);
-		}
-
-		var content = kwArgs["content"] || {};
-
-		if(kwArgs.sendTransport) {
-			content["dojo.transport"] = "xmlhttp";
-		}
-
-		do { // break-block
-			if(kwArgs.postContent){
-				query = kwArgs.postContent;
-				break;
-			}
-
-			if(content) {
-				query += dojo.io.argsFromMap(content, kwArgs.encoding);
-			}
-			
-			if(kwArgs.method.toLowerCase() == "get" || !kwArgs.multipart){
-				break;
-			}
-
-			var	t = [];
-			if(query.length){
-				var q = query.split("&");
-				for(var i = 0; i < q.length; ++i){
-					if(q[i].length){
-						var p = q[i].split("=");
-						t.push(	"--" + this.multipartBoundary,
-								"Content-Disposition: form-data; name=\"" + p[0] + "\"", 
-								"",
-								p[1]);
-					}
-				}
-			}
-
-			if(kwArgs.file){
-				if(dojo.lang.isArray(kwArgs.file)){
-					for(var i = 0; i < kwArgs.file.length; ++i){
-						var o = kwArgs.file[i];
-						t.push(	"--" + this.multipartBoundary,
-								"Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"",
-								"Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"),
-								"",
-								o.content);
-					}
-				}else{
-					var o = kwArgs.file;
-					t.push(	"--" + this.multipartBoundary,
-							"Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"",
-							"Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"),
-							"",
-							o.content);
-				}
-			}
-
-			if(t.length){
-				t.push("--"+this.multipartBoundary+"--", "");
-				query = t.join("\r\n");
-			}
-		}while(false);
-
-		// kwArgs.Connection = "close";
-
-		var async = kwArgs["sync"] ? false : true;
-
-		var preventCache = kwArgs["preventCache"] ||
-			(this.preventCache == true && kwArgs["preventCache"] != false);
-		var useCache = kwArgs["useCache"] == true ||
-			(this.useCache == true && kwArgs["useCache"] != false );
-
-		// preventCache is browser-level (add query string junk), useCache
-		// is for the local cache. If we say preventCache, then don't attempt
-		// to look in the cache, but if useCache is true, we still want to cache
-		// the response
-		if(!preventCache && useCache){
-			var cachedHttp = getFromCache(url, query, kwArgs.method);
-			if(cachedHttp){
-				doLoad(kwArgs, cachedHttp, url, query, false);
-				return;
-			}
-		}
-
-		// much of this is from getText, but reproduced here because we need
-		// more flexibility
-		var http = dojo.hostenv.getXmlhttpObject(kwArgs);	
-		var received = false;
-
-		// build a handler function that calls back to the handler obj
-		if(async){
-			var startTime = 
-			// FIXME: setting up this callback handler leaks on IE!!!
-			this.inFlight.push({
-				"req":		kwArgs,
-				"http":		http,
-				"url":	 	url,
-				"query":	query,
-				"useCache":	useCache,
-				"startTime": kwArgs.timeoutSeconds ? (new Date()).getTime() : 0
-			});
-			this.startWatchingInFlight();
-		}else{
-			// block async callbacks until sync is in, needed in khtml, others?
-			_this._blockAsync = true;
-		}
-
-		if(kwArgs.method.toLowerCase() == "post"){
-			// FIXME: need to hack in more flexible Content-Type setting here!
-			if (!kwArgs.user) {
-				http.open("POST", url, async);
-			}else{
-        http.open("POST", url, async, kwArgs.user, kwArgs.password);
-			}
-			setHeaders(http, kwArgs);
-			http.setRequestHeader("Content-Type", kwArgs.multipart ? ("multipart/form-data; boundary=" + this.multipartBoundary) : 
-				(kwArgs.contentType || "application/x-www-form-urlencoded"));
-			try{
-				http.send(query);
-			}catch(e){
-				if(typeof http.abort == "function"){
-					http.abort();
-				}
-				doLoad(kwArgs, {status: 404}, url, query, useCache);
-			}
-		}else{
-			var tmpUrl = url;
-			if(query != "") {
-				tmpUrl += (tmpUrl.indexOf("?") > -1 ? "&" : "?") + query;
-			}
-			if(preventCache) {
-				tmpUrl += (dojo.string.endsWithAny(tmpUrl, "?", "&")
-					? "" : (tmpUrl.indexOf("?") > -1 ? "&" : "?")) + "dojo.preventCache=" + new Date().valueOf();
-			}
-			if (!kwArgs.user) {
-				http.open(kwArgs.method.toUpperCase(), tmpUrl, async);
-			}else{
-				http.open(kwArgs.method.toUpperCase(), tmpUrl, async, kwArgs.user, kwArgs.password);
-			}
-			setHeaders(http, kwArgs);
-			try {
-				http.send(null);
-			}catch(e)	{
-				if(typeof http.abort == "function"){
-					http.abort();
-				}
-				doLoad(kwArgs, {status: 404}, url, query, useCache);
-			}
-		}
-
-		if( !async ) {
-			doLoad(kwArgs, http, url, query, useCache);
-			_this._blockAsync = false;
-		}
-
-		kwArgs.abort = function(){
-			try{// khtml doesent reset readyState on abort, need this workaround
-				http._aborted = true; 
-			}catch(e){/*squelsh*/}
-			return http.abort();
-		}
-
-		return;
-	}
-	dojo.io.transports.addTransport("XMLHTTPTransport");
-}
-
-}
-
-dojo.provide("dojo.io.cookie");
-
-dojo.io.cookie.setCookie = function(/*String*/name, /*String*/value, 
-									/*Number?*/days, /*String?*/path, 
-									/*String?*/domain, /*boolean?*/secure){
-	//summary: sets a cookie.
-	var expires = -1;
-	if((typeof days == "number")&&(days >= 0)){
-		var d = new Date();
-		d.setTime(d.getTime()+(days*24*60*60*1000));
-		expires = d.toGMTString();
-	}
-	value = escape(value);
-	document.cookie = name + "=" + value + ";"
-		+ (expires != -1 ? " expires=" + expires + ";" : "")
-		+ (path ? "path=" + path : "")
-		+ (domain ? "; domain=" + domain : "")
-		+ (secure ? "; secure" : "");
-}
-
-dojo.io.cookie.set = dojo.io.cookie.setCookie;
-
-dojo.io.cookie.getCookie = function(/*String*/name){
-	//summary: Gets a cookie with the given name.
-
-	// FIXME: Which cookie should we return?
-	//        If there are cookies set for different sub domains in the current
-	//        scope there could be more than one cookie with the same name.
-	//        I think taking the last one in the list takes the one from the
-	//        deepest subdomain, which is what we're doing here.
-	var idx = document.cookie.lastIndexOf(name+'=');
-	if(idx == -1) { return null; }
-	var value = document.cookie.substring(idx+name.length+1);
-	var end = value.indexOf(';');
-	if(end == -1) { end = value.length; }
-	value = value.substring(0, end);
-	value = unescape(value);
-	return value; //String
-}
-
-dojo.io.cookie.get = dojo.io.cookie.getCookie;
-
-dojo.io.cookie.deleteCookie = function(/*String*/name){
-	//summary: Deletes a cookie with the given name.
-	dojo.io.cookie.setCookie(name, "-", 0);
-}
-
-dojo.io.cookie.setObjectCookie = function(	/*String*/name, /*Object*/obj, 
-											/*Number?*/days, /*String?*/path, 
-											/*String?*/domain, /*boolean?*/secure, 
-											/*boolean?*/clearCurrent){
-	//summary: Takes an object, serializes it to a cookie value, and either
-	//sets a cookie with the serialized value.
-	//description: If clearCurrent is true, then any current cookie value
-	//for this object will be replaced with the the new serialized object value.
-	//If clearCurrent is false, then the existing cookie value will be modified
-	//with any changes from the new object value.
-	//Objects must be simple name/value pairs where the value is either a string
-	//or a number. Any other value will be ignored.
-	if(arguments.length == 5){ // for backwards compat
-		clearCurrent = domain;
-		domain = null;
-		secure = null;
-	}
-	var pairs = [], cookie, value = "";
-	if(!clearCurrent){
-		cookie = dojo.io.cookie.getObjectCookie(name);
-	}
-	if(days >= 0){
-		if(!cookie){ cookie = {}; }
-		for(var prop in obj){
-			if(obj[prop] == null){
-				delete cookie[prop];
-			}else if((typeof obj[prop] == "string")||(typeof obj[prop] == "number")){
-				cookie[prop] = obj[prop];
-			}
-		}
-		prop = null;
-		for(var prop in cookie){
-			pairs.push(escape(prop) + "=" + escape(cookie[prop]));
-		}
-		value = pairs.join("&");
-	}
-	dojo.io.cookie.setCookie(name, value, days, path, domain, secure);
-}
-
-dojo.io.cookie.getObjectCookie = function(/*String*/name){
-	//summary: Gets an object value for the given cookie name. The complement of
-	//dojo.io.cookie.setObjectCookie().
-	var values = null, cookie = dojo.io.cookie.getCookie(name);
-	if(cookie){
-		values = {};
-		var pairs = cookie.split("&");
-		for(var i = 0; i < pairs.length; i++){
-			var pair = pairs[i].split("=");
-			var value = pair[1];
-			if( isNaN(value) ){ value = unescape(pair[1]); }
-			values[ unescape(pair[0]) ] = value;
-		}
-	}
-	return values;
-}
-
-dojo.io.cookie.isSupported = function(){
-	//summary: Tests the browser to see if cookies are enabled.
-	if(typeof navigator.cookieEnabled != "boolean"){
-		dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__",
-			"CookiesAllowed", 90, null);
-		var cookieVal = dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-		navigator.cookieEnabled = (cookieVal == "CookiesAllowed");
-		if(navigator.cookieEnabled){
-			// FIXME: should we leave this around?
-			this.deleteCookie("__TestingYourBrowserForCookieSupport__");
-		}
-	}
-	return navigator.cookieEnabled; //boolean
-}
-
-// need to leave this in for backwards-compat from 0.1 for when it gets pulled in by dojo.io.*
-if(!dojo.io.cookies){ dojo.io.cookies = dojo.io.cookie; }
-
-dojo.provide("dojo.lang.declare");
-
-
-
-
-dojo.lang.declare = function(	/*String*/ className, 
-								/*Function|Array*/ superclass, 
-								/*Function?*/ init, 
-								/*Object|Array*/ props){
-	/*
-	 *	summary: Create a feature-rich constructor with a compact notation
-	 *	className: the name of the constructor (loosely, a "class")
-	 * 	superclass:
-	 *		may be a Function, or an Array of Functions. If "superclass" is an
-	 *		array, the first element is used as the prototypical ancestor and
-	 *		any following Functions become mixin ancestors.
-	 *	init: an initializer function
-	 *	props:
-	 *		an object (or array of objects) whose properties are copied to the
-	 *		created prototype
-	 *	description:
-	 *		Create a constructor using a compact notation for inheritance and
-	 *		prototype extension. "superclass" argument may be a Function, or an
-	 *		array of Functions. 
-	 *
-	 *		If "superclass" is an array, the first element is used as the
-	 *		prototypical ancestor and any following Functions become mixin
-	 *		ancestors. 
-	 * 
-	 *		All "superclass(es)" must be Functions (not mere Objects).
-	 *
-	 *		Using mixin ancestors provides a type of multiple inheritance.
-	 *		Mixin ancestors prototypical properties are copied to the subclass,
-	 *		and any inializater/constructor is invoked. 
-	 *
-	 *		Properties of object "props" are copied to the constructor
-	 *		prototype. If "props" is an array, properties of each object in the
-	 *		array are copied to the constructor prototype.
-	 *
-	 *		name of the class ("className" argument) is stored in
-	 *		"declaredClass" property
-	 * 
-	 *		Initializer functions are called when an object is instantiated
-	 *		from this constructor.
-	 * 
-	 *		Aliased as "dojo.declare"
-	 *
-	 * Usage:
-	 *
-	 *		dojo.declare("my.classes.bar", my.classes.foo,
-	 *			function(){
-	 *				// initialization function
-	 *				this.myComplicatedObject = new ReallyComplicatedObject(); 
-	 *			},
-	 *			{ // properties to be added to the class prototype
-	 *				someValue: 2,
-	 *				someMethod: function(){ 
-	 *					doStuff(); 
-	 *				}
-	 *			}
-	 *		);
-	 *
-	 */
-	if((dojo.lang.isFunction(props))||((!props)&&(!dojo.lang.isFunction(init)))){ 
-		// parameter juggling to support omitting init param (also allows
-		// reordering init and props arguments)
-		var temp = props;
-		props = init;
-		init = temp;
-	}	
-	var mixins = [ ];
-	if(dojo.lang.isArray(superclass)){
-		mixins = superclass;
-		superclass = mixins.shift();
-	}
-	if(!init){
-		init = dojo.evalObjPath(className, false);
-		if((init)&&(!dojo.lang.isFunction(init))){ init = null };
-	}
-	var ctor = dojo.lang.declare._makeConstructor();
-	var scp = (superclass ? superclass.prototype : null);
-	if(scp){
-		scp.prototyping = true;
-		ctor.prototype = new superclass();
-		scp.prototyping = false; 
-	}
-	ctor.superclass = scp;
-	ctor.mixins = mixins;
-	for(var i=0,l=mixins.length; i<l; i++){
-		dojo.lang.extend(ctor, mixins[i].prototype);
-	}
-	ctor.prototype.initializer = null;
-	ctor.prototype.declaredClass = className;
-	if(dojo.lang.isArray(props)){
-		dojo.lang.extend.apply(dojo.lang, [ctor].concat(props));
-	}else{
-		dojo.lang.extend(ctor, (props)||{});
-	}
-	dojo.lang.extend(ctor, dojo.lang.declare._common);
-	ctor.prototype.constructor = ctor;
-	ctor.prototype.initializer = (ctor.prototype.initializer)||(init)||(function(){});
-	var created = dojo.parseObjPath(className, null, true);
-	created.obj[created.prop] = ctor;
-	return ctor; // Function
-}
-
-dojo.lang.declare._makeConstructor = function(){
-	return function(){ 
-		// get the generational context (which object [or prototype] should be constructed)
-		var self = this._getPropContext();
-		var s = self.constructor.superclass;
-		if((s)&&(s.constructor)){
-			if(s.constructor==arguments.callee){
-				// if this constructor is invoked directly (my.ancestor.call(this))
-				this._inherited("constructor", arguments);
-			}else{
-				this._contextMethod(s, "constructor", arguments);
-			}
-		}
-		var ms = (self.constructor.mixins)||([]);
-		for(var i=0, m; (m=ms[i]); i++) {
-			(((m.prototype)&&(m.prototype.initializer))||(m)).apply(this, arguments);
-		}
-		if((!this.prototyping)&&(self.initializer)){
-			self.initializer.apply(this, arguments);
-		}
-	}
-}
-
-dojo.lang.declare._common = {
-	_getPropContext: function(){ return (this.___proto||this); },
-	// caches ptype context and calls method on it
-	_contextMethod: function(ptype, method, args){
-		var result, stack = this.___proto;
-		this.___proto = ptype;
-		try { result = ptype[method].apply(this,(args||[])); }
-		catch(e) { throw e; }	
-		finally { this.___proto = stack; }
-		return result;
-	},
-	_inherited: function(prop, args){
-		// summary:
-		//		Searches backward thru prototype chain to find nearest
-		//		ancestral instance of prop. Internal use only.
-		var p = this._getPropContext();
-		do{
-			if((!p.constructor)||(!p.constructor.superclass)){ return; }
-			p = p.constructor.superclass;
-		}while(!(prop in p));
-		return (dojo.lang.isFunction(p[prop]) ? this._contextMethod(p, prop, args) : p[prop]);
-	},
-	inherited: function(prop, args){
-		dojo.deprecated("'inherited' method is dangerous, do not up-call! 'inherited' is slated for removal in 0.5; name your super class (or use superclass property) instead.", "0.5");
-		this._inherited(prop, args);
-	}
-}
-
-dojo.declare = dojo.lang.declare;
-
-dojo.provide("dojo.html.common");
-
-
-
-dojo.lang.mixin(dojo.html, dojo.dom);
-
-dojo.html.body = function(){
-	dojo.deprecated("dojo.html.body() moved to dojo.body()", "0.5");
-	return dojo.body();
-}
-
-// FIXME: we are going to assume that we can throw any and every rendering
-// engine into the IE 5.x box model. In Mozilla, we do this w/ CSS.
-// Need to investigate for KHTML and Opera
-
-dojo.html.getEventTarget = function(/* DOMEvent */evt){
-	//	summary
-	//	Returns the target of an event
-	if(!evt) { evt = dojo.global().event || {} };
-	var t = (evt.srcElement ? evt.srcElement : (evt.target ? evt.target : null));
-	while((t)&&(t.nodeType!=1)){ t = t.parentNode; }
-	return t;	//	HTMLElement
-}
-
-dojo.html.getViewport = function(){
-	//	summary
-	//	Returns the dimensions of the viewable area of a browser window
-	var _window = dojo.global();
-	var _document = dojo.doc();
-	var w = 0;
-	var h = 0;
-
-	if(dojo.render.html.mozilla){
-		// mozilla
-		w = _document.documentElement.clientWidth;
-		h = _window.innerHeight;
-	}else if(!dojo.render.html.opera && _window.innerWidth){
-		//in opera9, dojo.body().clientWidth should be used, instead
-		//of window.innerWidth/document.documentElement.clientWidth
-		//so we have to check whether it is opera
-		w = _window.innerWidth;
-		h = _window.innerHeight;
-	} else if (!dojo.render.html.opera && dojo.exists(_document, "documentElement.clientWidth")){
-		// IE6 Strict
-		var w2 = _document.documentElement.clientWidth;
-		// this lets us account for scrollbars
-		if(!w || w2 && w2 < w) {
-			w = w2;
-		}
-		h = _document.documentElement.clientHeight;
-	} else if (dojo.body().clientWidth){
-		// IE, Opera
-		w = dojo.body().clientWidth;
-		h = dojo.body().clientHeight;
-	}
-	return { width: w, height: h };	//	object
-}
-
-dojo.html.getScroll = function(){
-	//	summary
-	//	Returns the scroll position of the document
-	var _window = dojo.global();
-	var _document = dojo.doc();
-	var top = _window.pageYOffset || _document.documentElement.scrollTop || dojo.body().scrollTop || 0;
-	var left = _window.pageXOffset || _document.documentElement.scrollLeft || dojo.body().scrollLeft || 0;
-	return { 
-		top: top, 
-		left: left, 
-		offset:{ x: left, y: top }	//	note the change, NOT an Array with added properties. 
-	};	//	object
-}
-
-dojo.html.getParentByType = function(/* HTMLElement */node, /* string */type) {
-	//	summary
-	//	Returns the first ancestor of node with tagName type.
-	var _document = dojo.doc();
-	var parent = dojo.byId(node);
-	type = type.toLowerCase();
-	while((parent)&&(parent.nodeName.toLowerCase()!=type)){
-		if(parent==(_document["body"]||_document["documentElement"])){
-			return null;
-		}
-		parent = parent.parentNode;
-	}
-	return parent;	//	HTMLElement
-}
-
-dojo.html.getAttribute = function(/* HTMLElement */node, /* string */attr){
-	//	summary
-	//	Returns the value of attribute attr from node.
-	node = dojo.byId(node);
-	// FIXME: need to add support for attr-specific accessors
-	if((!node)||(!node.getAttribute)){
-		// if(attr !== 'nwType'){
-		//	alert("getAttr of '" + attr + "' with bad node"); 
-		// }
-		return null;
-	}
-	var ta = typeof attr == 'string' ? attr : new String(attr);
-
-	// first try the approach most likely to succeed
-	var v = node.getAttribute(ta.toUpperCase());
-	if((v)&&(typeof v == 'string')&&(v!="")){ 
-		return v;	//	string 
-	}
-
-	// try returning the attributes value, if we couldn't get it as a string
-	if(v && v.value){ 
-		return v.value;	//	string 
-	}
-
-	// this should work on Opera 7, but it's a little on the crashy side
-	if((node.getAttributeNode)&&(node.getAttributeNode(ta))){
-		return (node.getAttributeNode(ta)).value;	//	string
-	}else if(node.getAttribute(ta)){
-		return node.getAttribute(ta);	//	string
-	}else if(node.getAttribute(ta.toLowerCase())){
-		return node.getAttribute(ta.toLowerCase());	//	string
-	}
-	return null;	//	string
-}
-	
-dojo.html.hasAttribute = function(/* HTMLElement */node, /* string */attr){
-	//	summary
-	//	Determines whether or not the specified node carries a value for the attribute in question.
-	return dojo.html.getAttribute(dojo.byId(node), attr) ? true : false;	//	boolean
-}
-	
-dojo.html.getCursorPosition = function(/* DOMEvent */e){
-	//	summary
-	//	Returns the mouse position relative to the document (not the viewport).
-	//	For example, if you have a document that is 10000px tall,
-	//	but your browser window is only 100px tall,
-	//	if you scroll to the bottom of the document and call this function it
-	//	will return {x: 0, y: 10000}
-	//	NOTE: for events delivered via dojo.event.connect() and/or dojoAttachEvent (for widgets),
-	//	you can just access evt.pageX and evt.pageY, rather than calling this function.
-	e = e || dojo.global().event;
-	var cursor = {x:0, y:0};
-	if(e.pageX || e.pageY){
-		cursor.x = e.pageX;
-		cursor.y = e.pageY;
-	}else{
-		var de = dojo.doc().documentElement;
-		var db = dojo.body();
-		cursor.x = e.clientX + ((de||db)["scrollLeft"]) - ((de||db)["clientLeft"]);
-		cursor.y = e.clientY + ((de||db)["scrollTop"]) - ((de||db)["clientTop"]);
-	}
-	return cursor;	//	object
-}
-
-dojo.html.isTag = function(/* HTMLElement */node) {
-	//	summary
-	//	Like dojo.dom.isTag, except case-insensitive
-	node = dojo.byId(node);
-	if(node && node.tagName) {
-		for (var i=1; i<arguments.length; i++){
-			if (node.tagName.toLowerCase()==String(arguments[i]).toLowerCase()){
-				return String(arguments[i]).toLowerCase();	//	string
-			}
-		}
-	}
-	return "";	//	string
-}
-
-//define dojo.html.createExternalElement for IE to workaround the annoying activation "feature" in new IE
-//details: http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/overview/activating_activex.asp
-if(dojo.render.html.ie && !dojo.render.html.ie70){
-	//only define createExternalElement for IE in none https to avoid "mixed content" warning dialog
-	if(window.location.href.substr(0,6).toLowerCase() != "https:"){
-		(function(){
-			// FIXME: this seems not to work correctly on IE 7!!
-
-			//The trick is to define a function in a script.src property:
-			// <script src="javascript:'function createExternalElement(){...}'"></script>,
-			//which will be treated as an external javascript file in IE
-			var xscript = dojo.doc().createElement('script');
-			xscript.src = "javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-			dojo.doc().getElementsByTagName("head")[0].appendChild(xscript);
-		})();
-	}
-}else{
-	//for other browsers, simply use document.createElement
-	//is enough
-	dojo.html.createExternalElement = function(/* HTMLDocument */doc, /* string */tag){
-		//	summary
-		//	Creates an element in the HTML document, here for ActiveX activation workaround.
-		return doc.createElement(tag);	//	HTMLElement
-	}
-}
-
-dojo.html._callDeprecated = function(inFunc, replFunc, args, argName, retValue){
-	dojo.deprecated("dojo.html." + inFunc,
-					"replaced by dojo.html." + replFunc + "(" + (argName ? "node, {"+ argName + ": " + argName + "}" : "" ) + ")" + (retValue ? "." + retValue : ""), "0.5");
-	var newArgs = [];
-	if(argName){ var argsIn = {}; argsIn[argName] = args[1]; newArgs.push(args[0]); newArgs.push(argsIn); }
-	else { newArgs = args }
-	var ret = dojo.html[replFunc].apply(dojo.html, args);
-	if(retValue){ return ret[retValue]; }
-	else { return ret; }
-}
-
-dojo.html.getViewportWidth = function(){
-	return dojo.html._callDeprecated("getViewportWidth", "getViewport", arguments, null, "width");
-}
-dojo.html.getViewportHeight = function(){
-	return dojo.html._callDeprecated("getViewportHeight", "getViewport", arguments, null, "height");
-}
-dojo.html.getViewportSize = function(){
-	return dojo.html._callDeprecated("getViewportSize", "getViewport", arguments);
-}
-dojo.html.getScrollTop = function(){
-	return dojo.html._callDeprecated("getScrollTop", "getScroll", arguments, null, "top");
-}
-dojo.html.getScrollLeft = function(){
-	return dojo.html._callDeprecated("getScrollLeft", "getScroll", arguments, null, "left");
-}
-dojo.html.getScrollOffset = function(){
-	return dojo.html._callDeprecated("getScrollOffset", "getScroll", arguments, null, "offset");
-}
-
-dojo.provide("dojo.uri.Uri");
-
-dojo.uri = new function() {
-
-	var authorityPattern = new RegExp("^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$");
-	var uriPattern = new RegExp("(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$");
-	var cssPattern = new RegExp("/(\\w+.css)");
-
-	this.dojoUri = function (/*dojo.uri.Uri||String*/uri) {
-		// summary: returns a Uri object resolved relative to the dojo root
-		return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(), uri);
-	}
-
-	this.moduleUri = function(/*String*/module, /*dojo.uri.Uri||String*/uri){
-		// summary: returns a Uri object relative to a module
-		// description: Examples: dojo.uri.moduleUri("dojo.widget","templates/template.html"), or dojo.uri.moduleUri("acme","images/small.png")
-		var loc = dojo.hostenv.getModuleSymbols(module).join('/');
-		if(!loc){
-			return null;
-		}
-		if(loc.lastIndexOf("/") != loc.length-1){
-			loc += "/";
-		}
-
-		//If the path is an absolute path (starts with a / or is on another domain/xdomain)
-		//then don't add the baseScriptUri.
-		var colonIndex = loc.indexOf(":");
-		var slashIndex = loc.indexOf("/");
-		if(loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > slashIndex)){
-			loc = dojo.hostenv.getBaseScriptUri() + loc;
-		}
-
-		return new dojo.uri.Uri(loc,uri);
-	}
-
-	this.Uri = function (/*dojo.uri.Uri||String...*/) {
-		// summary: Constructor to create an object representing a URI.
-		// description:
-		//  Each argument is evaluated in order relative to the next until
-		//  a canonical uri is produced. To get an absolute Uri relative
-		//  to the current document use
-		//      new dojo.uri.Uri(document.baseURI, uri)
-
-		// TODO: support for IPv6, see RFC 2732
-
-		// resolve uri components relative to each other
-		var uri = arguments[0];
-		if (uri && arguments.length > 1) {
-			var cssMatch = cssPattern.exec(uri);
-			if (cssMatch){
-				uri = uri.toString().replace(cssMatch[1], "");
-			}
-		}
-
-		for (var i = 1; i < arguments.length; i++) {
-			if(!arguments[i]) { continue; }
-
-			// Safari doesn't support this.constructor so we have to be explicit
-			var relobj = new dojo.uri.Uri(arguments[i].toString());
-			var uriobj = new dojo.uri.Uri(uri.toString());
-
-			if ((relobj.path=="")&&(relobj.scheme==null)&&(relobj.authority==null)&&(relobj.query==null)) {
-				if (relobj.fragment != null) { uriobj.fragment = relobj.fragment; }
-				relobj = uriobj;
-			}
-
-			if (relobj.scheme != null && relobj.authority != null)
-				uri = "";
-			if (relobj.scheme != null) { uri += relobj.scheme + ":"; }
-			if (relobj.authority != null) { uri += "//" + relobj.authority; }
-			uri += relobj.path;
-			if (relobj.query != null) { uri += "?" + relobj.query; }
-			if (relobj.fragment != null) { uri += "#" + relobj.fragment; }
-		}
-
-		this.uri = uri.toString();
-
-		// break the uri into its main components
-	    var r = this.uri.match(uriPattern);
-
-		this.scheme = r[2] || (r[1] ? "" : null);
-		this.authority = r[4] || (r[3] ? "" : null);
-		this.path = r[5]; // can never be undefined
-		this.query = r[7] || (r[6] ? "" : null);
-		this.fragment  = r[9] || (r[8] ? "" : null);
-
-		if (this.authority != null) {
-			// server based naming authority
-			r = this.authority.match(authorityPattern);
-
-			this.user = r[3] || null;
-			this.password = r[4] || null;
-			this.host = r[5];
-			this.port = r[7] || null;
-		}
-
-		this.toString = function(){ return this.uri; }
-	}
-};
-
-dojo.provide("dojo.html.style");
-
-
-
-dojo.html.getClass = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the string value of the list of CSS classes currently assigned directly 
-	//	to the node in question. Returns an empty string if no class attribute is found;
-	node = dojo.byId(node);
-	if(!node){ return ""; }
-	var cs = "";
-	if(node.className){
-		cs = node.className;
-	}else if(dojo.html.hasAttribute(node, "class")){
-		cs = dojo.html.getAttribute(node, "class");
-	}
-	return cs.replace(/^\s+|\s+$/g, "");	//	string
-}
-
-dojo.html.getClasses = function(/* HTMLElement */node) {
-	//	summary
-	//	Returns an array of CSS classes currently assigned directly to the node in question. 
-	//	Returns an empty array if no classes are found;
-	var c = dojo.html.getClass(node);
-	return (c == "") ? [] : c.split(/\s+/g);	//	array
-}
-
-dojo.html.hasClass = function(/* HTMLElement */node, /* string */classname){
-	//	summary
-	//	Returns whether or not the specified classname is a portion of the
-	//	class list currently applied to the node. Does not cover cascaded
-	//	styles, only classes directly applied to the node.
-	return (new RegExp('(^|\\s+)'+classname+'(\\s+|$)')).test(dojo.html.getClass(node))	//	boolean
-}
-
-dojo.html.prependClass = function(/* HTMLElement */node, /* string */classStr){
-	//	summary
-	//	Adds the specified class to the beginning of the class list on the
-	//	passed node. This gives the specified class the highest precidence
-	//	when style cascading is calculated for the node. Returns true or
-	//	false; indicating success or failure of the operation, respectively.
-	classStr += " " + dojo.html.getClass(node);
-	return dojo.html.setClass(node, classStr);	//	boolean
-}
-
-dojo.html.addClass = function(/* HTMLElement */node, /* string */classStr){
-	//	summary
-	//	Adds the specified class to the end of the class list on the
-	//	passed &node;. Returns &true; or &false; indicating success or failure.
-	if (dojo.html.hasClass(node, classStr)) {
-	  return false;
-	}
-	classStr = (dojo.html.getClass(node) + " " + classStr).replace(/^\s+|\s+$/g,"");
-	return dojo.html.setClass(node, classStr);	//	boolean
-}
-
-dojo.html.setClass = function(/* HTMLElement */node, /* string */classStr){
-	//	summary
-	//	Clobbers the existing list of classes for the node, replacing it with
-	//	the list given in the 2nd argument. Returns true or false
-	//	indicating success or failure.
-	node = dojo.byId(node);
-	var cs = new String(classStr);
-	try{
-		if(typeof node.className == "string"){
-			node.className = cs;
-		}else if(node.setAttribute){
-			node.setAttribute("class", classStr);
-			node.className = cs;
-		}else{
-			return false;
-		}
-	}catch(e){
-		dojo.debug("dojo.html.setClass() failed", e);
-	}
-	return true;
-}
-
-dojo.html.removeClass = function(/* HTMLElement */node, /* string */classStr, /* boolean? */allowPartialMatches){
-	//	summary
-	//	Removes the className from the node;. Returns true or false indicating success or failure.
-	try{
-		if (!allowPartialMatches) {
-			var newcs = dojo.html.getClass(node).replace(new RegExp('(^|\\s+)'+classStr+'(\\s+|$)'), "$1$2");
-		} else {
-			var newcs = dojo.html.getClass(node).replace(classStr,'');
-		}
-		dojo.html.setClass(node, newcs);
-	}catch(e){
-		dojo.debug("dojo.html.removeClass() failed", e);
-	}
-	return true;	//	boolean
-}
-
-dojo.html.replaceClass = function(/* HTMLElement */node, /* string */newClass, /* string */oldClass) {
-	//	summary
-	//	Replaces 'oldClass' and adds 'newClass' to node
-	dojo.html.removeClass(node, oldClass);
-	dojo.html.addClass(node, newClass);
-}
-
-// Enum type for getElementsByClass classMatchType arg:
-dojo.html.classMatchType = {
-	ContainsAll : 0, // all of the classes are part of the node's class (default)
-	ContainsAny : 1, // any of the classes are part of the node's class
-	IsOnly : 2 // only all of the classes are part of the node's class
-}
-
-
-dojo.html.getElementsByClass = function(
-	/* string */classStr, 
-	/* HTMLElement? */parent, 
-	/* string? */nodeType, 
-	/* integer? */classMatchType, 
-	/* boolean? */useNonXpath
-){
-	//	summary
-	//	Returns an array of nodes for the given classStr, children of a
-	//	parent, and optionally of a certain nodeType
-	// FIXME: temporarily set to false because of several dojo tickets related
-	// to the xpath version not working consistently in firefox.
-	useNonXpath = false;
-	var _document = dojo.doc();
-	parent = dojo.byId(parent) || _document;
-	var classes = classStr.split(/\s+/g);
-	var nodes = [];
-	if( classMatchType != 1 && classMatchType != 2 ) classMatchType = 0; // make it enum
-	var reClass = new RegExp("(\\s|^)((" + classes.join(")|(") + "))(\\s|$)");
-	var srtLength = classes.join(" ").length;
-	var candidateNodes = [];
-	
-	if(!useNonXpath && _document.evaluate) { // supports dom 3 xpath
-		var xpath = ".//" + (nodeType || "*") + "[contains(";
-		if(classMatchType != dojo.html.classMatchType.ContainsAny){
-			xpath += "concat(' ',@class,' '), ' " +
-			classes.join(" ') and contains(concat(' ',@class,' '), ' ") +
-			" ')";
-			if (classMatchType == 2) {
-				xpath += " and string-length(@class)="+srtLength+"]";
-			}else{
-				xpath += "]";
-			}
-		}else{
-			xpath += "concat(' ',@class,' '), ' " +
-			classes.join(" ') or contains(concat(' ',@class,' '), ' ") +
-			" ')]";
-		}
-		var xpathResult = _document.evaluate(xpath, parent, null, XPathResult.ANY_TYPE, null);
-		var result = xpathResult.iterateNext();
-		while(result){
-			try{
-				candidateNodes.push(result);
-				result = xpathResult.iterateNext();
-			}catch(e){ break; }
-		}
-		return candidateNodes;	//	NodeList
-	}else{
-		if(!nodeType){
-			nodeType = "*";
-		}
-		candidateNodes = parent.getElementsByTagName(nodeType);
-
-		var node, i = 0;
-		outer:
-		while(node = candidateNodes[i++]){
-			var nodeClasses = dojo.html.getClasses(node);
-			if(nodeClasses.length == 0){ continue outer; }
-			var matches = 0;
-	
-			for(var j = 0; j < nodeClasses.length; j++){
-				if(reClass.test(nodeClasses[j])){
-					if(classMatchType == dojo.html.classMatchType.ContainsAny){
-						nodes.push(node);
-						continue outer;
-					}else{
-						matches++;
-					}
-				}else{
-					if(classMatchType == dojo.html.classMatchType.IsOnly){
-						continue outer;
-					}
-				}
-			}
-	
-			if(matches == classes.length){
-				if(	(classMatchType == dojo.html.classMatchType.IsOnly)&&
-					(matches == nodeClasses.length)){
-					nodes.push(node);
-				}else if(classMatchType == dojo.html.classMatchType.ContainsAll){
-					nodes.push(node);
-				}
-			}
-		}
-		return nodes;	//	NodeList
-	}
-}
-dojo.html.getElementsByClassName = dojo.html.getElementsByClass;
-
-dojo.html.toCamelCase = function(/* string */selector){
-	//	summary
-	//	Translates a CSS selector string to a camel-cased one.
-	var arr = selector.split('-'), cc = arr[0];
-	for(var i = 1; i < arr.length; i++) {
-		cc += arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
-	}
-	return cc;	//	string
-}
-
-dojo.html.toSelectorCase = function(/* string */selector){
-	//	summary
-	//	Translates a camel cased string to a selector cased one.
-	return selector.replace(/([A-Z])/g, "-$1" ).toLowerCase();	//	string
-}
-
-if (dojo.render.html.ie) {
-	// IE branch
-	dojo.html.getComputedStyle = function(/*HTMLElement|String*/node, /*String*/property, /*String*/value) {
-		// summary
-		// Get the computed style value for style "property" on "node" (IE).
-		node = dojo.byId(node); // FIXME: remove ability to access nodes by id for this time-critical function
-		if(!node || !node.currentStyle){return value;}
-		// FIXME: standardize on camel-case input to improve speed
-		return node.currentStyle[dojo.html.toCamelCase(property)]; // String
-	}
-	// SJM: getComputedStyle should be abandoned and replaced with the below function.
-	// All our supported browsers can return CSS2 compliant CssStyleDeclaration objects
-	// which can be queried directly for multiple styles.
-	dojo.html.getComputedStyles = function(/*HTMLElement*/node) {
-		// summary
-		// Get a style object containing computed styles for HTML Element node (IE).
-		return node.currentStyle; // CSSStyleDeclaration
-	}
-} else {
-	// non-IE branch
-	dojo.html.getComputedStyle = function(/*HTMLElement|String*/node, /*String*/property, /*Any*/value) {
-		// summary
-		// Get the computed style value for style "property" on "node" (non-IE).
-		node = dojo.byId(node);
-		if(!node || !node.style){return value;}
-		var s = document.defaultView.getComputedStyle(node, null);
-		// s may be null on Safari
-		return (s&&s[dojo.html.toCamelCase(property)])||''; // String
-	}	
-	// SJM: getComputedStyle should be abandoned and replaced with the below function.
-	// All our supported browsers can return CSS2 compliant CssStyleDeclaration objects
-	// which can be queried directly for multiple styles.
-	dojo.html.getComputedStyles = function(node) {
-		// summary
-		// Get a style object containing computed styles for HTML Element node (non-IE).
-		return document.defaultView.getComputedStyle(node, null); // CSSStyleDeclaration
-	}	
-}
-
-dojo.html.getStyleProperty = function(/* HTMLElement */node, /* string */cssSelector){
-	//	summary
-	//	Returns the value of the passed style
-	node = dojo.byId(node);
-	return (node && node.style ? node.style[dojo.html.toCamelCase(cssSelector)] : undefined);	//	string
-}
-
-dojo.html.getStyle = function(/* HTMLElement */node, /* string */cssSelector){
-	//	summary
-	//	Returns the computed value of the passed style
-	var value = dojo.html.getStyleProperty(node, cssSelector);
-	return (value ? value : dojo.html.getComputedStyle(node, cssSelector));	//	string || integer
-}
-
-dojo.html.setStyle = function(/* HTMLElement */node, /* string */cssSelector, /* string */value){
-	//	summary
-	//	Set the value of passed style on node
-	node = dojo.byId(node);
-	if(node && node.style){
-		var camelCased = dojo.html.toCamelCase(cssSelector);
-		node.style[camelCased] = value;
-	}
-}
-
-dojo.html.setStyleText = function (/* HTMLElement */target, /* string */text) {
-	//	summary
-	//	Try to set the entire cssText property of the passed target; equiv of setting style attribute.
-	try {
-	 	target.style.cssText = text;
-	} catch (e) {
-		target.setAttribute("style", text);
-	}
-}
-
-dojo.html.copyStyle = function(/* HTMLElement */target, /* HTMLElement */source){
-	//	summary
-	// work around for opera which doesn't have cssText, and for IE which fails on setAttribute 
-	if(!source.style.cssText){ 
-		target.setAttribute("style", source.getAttribute("style")); 
-	}else{
-		target.style.cssText = source.style.cssText; 
-	}
-	dojo.html.addClass(target, dojo.html.getClass(source));
-}
-
-dojo.html.getUnitValue = function(/* HTMLElement */node, /* string */cssSelector, /* boolean? */autoIsZero){
-	//	summary
-	//	Get the value of passed selector, with the specific units used
-	var s = dojo.html.getComputedStyle(node, cssSelector);
-	if((!s)||((s == 'auto')&&(autoIsZero))){ 
-		return { value: 0, units: 'px' };	//	object 
-	}
-	// FIXME: is regex inefficient vs. parseInt or some manual test? 
-	var match = s.match(/(\-?[\d.]+)([a-z%]*)/i);
-	if (!match){return dojo.html.getUnitValue.bad;}
-	return { value: Number(match[1]), units: match[2].toLowerCase() };	//	object
-}
-dojo.html.getUnitValue.bad = { value: NaN, units: '' };
-
-if (dojo.render.html.ie) {
-	// IE branch
-	dojo.html.toPixelValue = function(/* HTMLElement */element, /* String */styleValue){
-		// summary
-		//  Extract value in pixels from styleValue (IE version).
-		//  If a value cannot be extracted, zero is returned.
-		if(!styleValue){return 0;}
-		if(styleValue.slice(-2) == 'px'){return parseFloat(styleValue);}
-		var pixelValue = 0;
-		with(element){
-			var sLeft = style.left;
-			var rsLeft = runtimeStyle.left;
-			runtimeStyle.left = currentStyle.left;
-			try {
-				style.left = styleValue || 0;
-				pixelValue = style.pixelLeft;
-				style.left = sLeft;
-				runtimeStyle.left = rsLeft;
-			}catch(e){
-				// FIXME: it's possible for styleValue to be incompatible with
-				// style.left. In particular, border width values of 
-				// "thick", "medium", or "thin" will provoke an exception.
-			}
-		}
-		return pixelValue; // Number
-	}
-} else {
-	// non-IE branch
-	dojo.html.toPixelValue = function(/* HTMLElement */element, /* String */styleValue){
-		// summary
-		//  Extract value in pixels from styleValue (non-IE version).
-		//  If a value cannot be extracted, zero is returned.
-		return (styleValue && (styleValue.slice(-2)=='px') ? parseFloat(styleValue) : 0); // Number
-	}
-}
-
-dojo.html.getPixelValue = function(/* HTMLElement */node, /* string */styleProperty, /* boolean? */autoIsZero){
-	// summary
-	//  Get a computed style value, in pixels.
-	// node: HTMLElement
-	//  Node to interrogate
-	// styleProperty: String
-	//  Style property to query, in either css-selector or camelCase (property) format.
-	// autoIsZero: Boolean
-	//  Deprecated. Any value that cannot be converted to pixels is returned as zero.
-	// 
-	//  summary
-	//  Get the value of passed selector in pixels.
-	//
-	return dojo.html.toPixelValue(node, dojo.html.getComputedStyle(node, styleProperty));
-} 
-
-dojo.html.setPositivePixelValue = function(/* HTMLElement */node, /* string */selector, /* integer */value){
-	//	summary
-	//	Attempt to set the value of selector on node as a positive pixel value.
-	if(isNaN(value)){return false;}
-	node.style[selector] = Math.max(0, value) + 'px'; 
-	return true;	//	boolean
-}
-
-dojo.html.styleSheet = null;
-
-// FIXME: this is a really basic stub for adding and removing cssRules, but
-// it assumes that you know the index of the cssRule that you want to add 
-// or remove, making it less than useful.  So we need something that can 
-// search for the selector that you you want to remove.
-dojo.html.insertCssRule = function(/* string */selector, /* string */declaration, /* integer? */index) {
-	//	summary
-	//	Attempt to insert declaration as selector on the internal stylesheet; if index try to set it there.
-	if (!dojo.html.styleSheet) {
-		if (document.createStyleSheet) { // IE
-			dojo.html.styleSheet = document.createStyleSheet();
-		} else if (document.styleSheets[0]) { // rest
-			// FIXME: should create a new style sheet here
-			// fall back on an exsiting style sheet
-			dojo.html.styleSheet = document.styleSheets[0];
-		} else { 
-			return null;	//	integer 
-		} // fail
-	}
-
-	if (arguments.length < 3) { // index may == 0
-		if (dojo.html.styleSheet.cssRules) { // W3
-			index = dojo.html.styleSheet.cssRules.length;
-		} else if (dojo.html.styleSheet.rules) { // IE
-			index = dojo.html.styleSheet.rules.length;
-		} else { 
-			return null;	//	integer 
-		} // fail
-	}
-
-	if (dojo.html.styleSheet.insertRule) { // W3
-		var rule = selector + " { " + declaration + " }";
-		return dojo.html.styleSheet.insertRule(rule, index);	//	integer
-	} else if (dojo.html.styleSheet.addRule) { // IE
-		return dojo.html.styleSheet.addRule(selector, declaration, index);	//	integer
-	} else { 
-		return null; // integer
-	} // fail
-}
-
-dojo.html.removeCssRule = function(/* integer? */index){
-	//	summary
-	//	Attempt to remove the rule at index.
-	if(!dojo.html.styleSheet){
-		dojo.debug("no stylesheet defined for removing rules");
-		return false;
-	}
-	if(dojo.render.html.ie){
-		if(!index){
-			index = dojo.html.styleSheet.rules.length;
-			dojo.html.styleSheet.removeRule(index);
-		}
-	}else if(document.styleSheets[0]){
-		if(!index){
-			index = dojo.html.styleSheet.cssRules.length;
-		}
-		dojo.html.styleSheet.deleteRule(index);
-	}
-	return true;	//	boolean
-}
-
-dojo.html._insertedCssFiles = []; // cache container needed because IE reformats cssText when added to DOM
-dojo.html.insertCssFile = function(/* string */URI, /* HTMLDocument? */doc, /* boolean? */checkDuplicates, /* boolean */fail_ok){
-	//	summary
-	// calls css by XmlHTTP and inserts it into DOM as <style [widgetType="widgetType"]> *downloaded cssText*</style>
-	if(!URI){ return; }
-	if(!doc){ doc = document; }
-	var cssStr = dojo.hostenv.getText(URI, false, fail_ok);
-	if(cssStr===null){ return; }
-	cssStr = dojo.html.fixPathsInCssText(cssStr, URI);
-
-	if(checkDuplicates){
-		var idx = -1, node, ent = dojo.html._insertedCssFiles;
-		for(var i = 0; i < ent.length; i++){
-			if((ent[i].doc == doc) && (ent[i].cssText == cssStr)){
-				idx = i; node = ent[i].nodeRef;
-				break;
-			}
-		}
-		// make sure we havent deleted our node
-		if(node){
-			var styles = doc.getElementsByTagName("style");
-			for(var i = 0; i < styles.length; i++){
-				if(styles[i] == node){
-					return;
-				}
-			}
-			// delete this entry
-			dojo.html._insertedCssFiles.shift(idx, 1);
-		}
-	}
-
-	var style = dojo.html.insertCssText(cssStr, doc);
-	dojo.html._insertedCssFiles.push({'doc': doc, 'cssText': cssStr, 'nodeRef': style});
-
-	// insert custom attribute ex dbgHref="../foo.css" usefull when debugging in DOM inspectors, no?
-	if(style && djConfig.isDebug){
-		style.setAttribute("dbgHref", URI);
-	}
-	return style;	//	HTMLStyleElement
-}
-
-dojo.html.insertCssText = function(/* string */cssStr, /* HTMLDocument? */doc, /* string? */URI){
-	//	summary
-	//	Attempt to insert CSS rules into the document through inserting a style element
-	// DomNode Style  = insertCssText(String ".dojoMenu {color: green;}"[, DomDoc document, dojo.uri.Uri Url ])
-	if(!cssStr){ 
-		return; //	HTMLStyleElement
-	}
-	if(!doc){ doc = document; }
-	if(URI){// fix paths in cssStr
-		cssStr = dojo.html.fixPathsInCssText(cssStr, URI);
-	}
-	var style = doc.createElement("style");
-	style.setAttribute("type", "text/css");
-	// IE is b0rken enough to require that we add the element to the doc
-	// before changing it's properties
-	var head = doc.getElementsByTagName("head")[0];
-	if(!head){ // must have a head tag 
-		dojo.debug("No head tag in document, aborting styles");
-		return;	//	HTMLStyleElement
-	}else{
-		head.appendChild(style);
-	}
-	if(style.styleSheet){// IE
-		var setFunc = function(){ 
-			try{
-				style.styleSheet.cssText = cssStr;
-			}catch(e){ dojo.debug(e); }
-		};
-		if(style.styleSheet.disabled){
-			setTimeout(setFunc, 10);
-		}else{
-			setFunc();
-		}
-	}else{ // w3c
-		var cssText = doc.createTextNode(cssStr);
-		style.appendChild(cssText);
-	}
-	return style;	//	HTMLStyleElement
-}
-
-dojo.html.fixPathsInCssText = function(/* string */cssStr, /* string */URI){
-	//	summary
-	// usage: cssText comes from dojoroot/src/widget/templates/Foobar.css
-	// 	it has .dojoFoo { background-image: url(images/bar.png);} then uri should point to dojoroot/src/widget/templates/
-	if(!cssStr || !URI){ return; }
-	var match, str = "", url = "", urlChrs = "[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-	var regex = new RegExp('url\\(\\s*('+urlChrs+')\\s*\\)');
-	var regexProtocol = /(file|https?|ftps?):\/\//;
-	regexTrim = new RegExp("^[\\s]*(['\"]?)("+urlChrs+")\\1[\\s]*?$");
-	if(dojo.render.html.ie55 || dojo.render.html.ie60){
-		var regexIe = new RegExp("AlphaImageLoader\\((.*)src\=['\"]("+urlChrs+")['\"]");
-		// TODO: need to decide how to handle relative paths and AlphaImageLoader see #1441
-		// current implementation breaks on build with intern_strings
-		while(match = regexIe.exec(cssStr)){
-			url = match[2].replace(regexTrim, "$2");
-			if(!regexProtocol.exec(url)){
-				url = (new dojo.uri.Uri(URI, url).toString());
-			}
-			str += cssStr.substring(0, match.index) + "AlphaImageLoader(" + match[1] + "src='" + url + "'";
-			cssStr = cssStr.substr(match.index + match[0].length);
-		}
-		cssStr = str + cssStr;
-		str = "";
-	}
-
-	while(match = regex.exec(cssStr)){
-		url = match[1].replace(regexTrim, "$2");
-		if(!regexProtocol.exec(url)){
-			url = (new dojo.uri.Uri(URI, url).toString());
-		}
-		str += cssStr.substring(0, match.index) + "url(" + url + ")";
-		cssStr = cssStr.substr(match.index + match[0].length);
-	}
-	return str + cssStr;	//	string
-}
-
-dojo.html.setActiveStyleSheet = function(/* string */title){
-	//	summary
-	//	Activate style sheet with specified title.
-	var i = 0, a, els = dojo.doc().getElementsByTagName("link");
-	while (a = els[i++]) {
-		if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")){
-			a.disabled = true;
-			if (a.getAttribute("title") == title) { a.disabled = false; }
-		}
-	}
-}
-
-dojo.html.getActiveStyleSheet = function(){
-	//	summary
-	//	return the title of the currently active stylesheet
-	var i = 0, a, els = dojo.doc().getElementsByTagName("link");
-	while (a = els[i++]) {
-		if (a.getAttribute("rel").indexOf("style") != -1 
-			&& a.getAttribute("title") 
-			&& !a.disabled
-		){
-			return a.getAttribute("title");	//	string 
-		}
-	}
-	return null;	//	string
-}
-
-dojo.html.getPreferredStyleSheet = function(){
-	//	summary
-	//	Return the preferred stylesheet title (i.e. link without alt attribute)
-	var i = 0, a, els = dojo.doc().getElementsByTagName("link");
-	while (a = els[i++]) {
-		if(a.getAttribute("rel").indexOf("style") != -1
-			&& a.getAttribute("rel").indexOf("alt") == -1
-			&& a.getAttribute("title")
-		){ 
-			return a.getAttribute("title"); 	//	string
-		}
-	}
-	return null;	//	string
-}
-
-dojo.html.applyBrowserClass = function(/* HTMLElement */node){
-	//	summary
-	//	Applies pre-set class names based on browser & version to the passed node.
-	//	Modified version of Morris' CSS hack.
-	var drh=dojo.render.html;
-	var classes = {
-		dj_ie: drh.ie,
-		dj_ie55: drh.ie55,
-		dj_ie6: drh.ie60,
-		dj_ie7: drh.ie70,
-		dj_iequirks: drh.ie && drh.quirks,
-		dj_opera: drh.opera,
-		dj_opera8: drh.opera && (Math.floor(dojo.render.version)==8),
-		dj_opera9: drh.opera && (Math.floor(dojo.render.version)==9),
-		dj_khtml: drh.khtml,
-		dj_safari: drh.safari,
-		dj_gecko: drh.mozilla
-	}; // no dojo unsupported browsers
-	for(var p in classes){
-		if(classes[p]){
-			dojo.html.addClass(node, p);
-		}
-	}
-};
-
-dojo.kwCompoundRequire({
-	common: [ "dojo.html.common",
-			  "dojo.html.style" ]
-});
-dojo.provide("dojo.html.*");
-
-dojo.provide("dojo.html.display");
-
-
-dojo.html._toggle = function(node, tester, setter){
-	node = dojo.byId(node);
-	setter(node, !tester(node));
-	return tester(node);
-}
-
-dojo.html.show = function(/* HTMLElement */node){
-	//	summary
-	//	Show the passed element by reverting display property set by dojo.html.hide
-	node = dojo.byId(node);
-	if(dojo.html.getStyleProperty(node, 'display')=='none'){
-		dojo.html.setStyle(node, 'display', (node.dojoDisplayCache||''));
-		node.dojoDisplayCache = undefined;	// cannot use delete on a node in IE6
-	}
-}
-
-dojo.html.hide = function(/* HTMLElement */node){
-	//	summary
-	//	Hide the passed element by setting display:none
-	node = dojo.byId(node);
-	if(typeof node["dojoDisplayCache"] == "undefined"){ // it could == '', so we cannot say !node.dojoDisplayCount
-		var d = dojo.html.getStyleProperty(node, 'display')
-		if(d!='none'){
-			node.dojoDisplayCache = d;
-		}
-	}
-	dojo.html.setStyle(node, 'display', 'none');
-}
-
-dojo.html.setShowing = function(/* HTMLElement */node, /* boolean? */showing){
-	//	summary
-	// Calls show() if showing is true, hide() otherwise
-	dojo.html[(showing ? 'show' : 'hide')](node);
-}
-
-dojo.html.isShowing = function(/* HTMLElement */node){
-	//	summary
-	//	Returns whether the element is displayed or not.
-	// FIXME: returns true if node is bad, isHidden would be easier to make correct
-	return (dojo.html.getStyleProperty(node, 'display') != 'none');	//	boolean
-}
-
-dojo.html.toggleShowing = function(/* HTMLElement */node){
-	//	summary
-	// Call setShowing() on node with the complement of isShowing(), then return the new value of isShowing()
-	return dojo.html._toggle(node, dojo.html.isShowing, dojo.html.setShowing);	//	boolean
-}
-
-// Simple mapping of tag names to display values
-// FIXME: simplistic 
-dojo.html.displayMap = { tr: '', td: '', th: '', img: 'inline', span: 'inline', input: 'inline', button: 'inline' };
-
-dojo.html.suggestDisplayByTagName = function(/* HTMLElement */node){
-	//	summary
-	// Suggest a value for the display property that will show 'node' based on it's tag
-	node = dojo.byId(node);
-	if(node && node.tagName){
-		var tag = node.tagName.toLowerCase();
-		return (tag in dojo.html.displayMap ? dojo.html.displayMap[tag] : 'block');	//	string
-	}
-}
-
-dojo.html.setDisplay = function(/* HTMLElement */node, /* string */display){
-	//	summary
-	// 	Sets the value of style.display to value of 'display' parameter if it is a string.
-	// 	Otherwise, if 'display' is false, set style.display to 'none'.
-	// 	Finally, set 'display' to a suggested display value based on the node's tag
-	dojo.html.setStyle(node, 'display', ((display instanceof String || typeof display == "string") ? display : (display ? dojo.html.suggestDisplayByTagName(node) : 'none')));
-}
-
-dojo.html.isDisplayed = function(/* HTMLElement */node){
-	//	summary
-	// 	Is true if the the computed display style for node is not 'none'
-	// 	FIXME: returns true if node is bad, isNotDisplayed would be easier to make correct
-	return (dojo.html.getComputedStyle(node, 'display') != 'none');	//	boolean
-}
-
-dojo.html.toggleDisplay = function(/* HTMLElement */node){
-	//	summary
-	// 	Call setDisplay() on node with the complement of isDisplayed(), then
-	// 	return the new value of isDisplayed()
-	return dojo.html._toggle(node, dojo.html.isDisplayed, dojo.html.setDisplay);	//	boolean
-}
-
-dojo.html.setVisibility = function(/* HTMLElement */node, /* string */visibility){
-	//	summary
-	// 	Sets the value of style.visibility to value of 'visibility' parameter if it is a string.
-	// 	Otherwise, if 'visibility' is false, set style.visibility to 'hidden'. Finally, set style.visibility to 'visible'.
-	dojo.html.setStyle(node, 'visibility', ((visibility instanceof String || typeof visibility == "string") ? visibility : (visibility ? 'visible' : 'hidden')));
-}
-
-dojo.html.isVisible = function(/* HTMLElement */node){
-	//	summary
-	// 	Returns true if the the computed visibility style for node is not 'hidden'
-	// 	FIXME: returns true if node is bad, isInvisible would be easier to make correct
-	return (dojo.html.getComputedStyle(node, 'visibility') != 'hidden');	//	boolean
-}
-
-dojo.html.toggleVisibility = function(node){
-	//	summary
-	// Call setVisibility() on node with the complement of isVisible(), then return the new value of isVisible()
-	return dojo.html._toggle(node, dojo.html.isVisible, dojo.html.setVisibility);	//	boolean
-}
-
-dojo.html.setOpacity = function(/* HTMLElement */node, /* float */opacity, /* boolean? */dontFixOpacity){
-	//	summary
-	//	Sets the opacity of node in a cross-browser way.
-	//	float between 0.0 (transparent) and 1.0 (opaque)
-	node = dojo.byId(node);
-	var h = dojo.render.html;
-	if(!dontFixOpacity){
-		if( opacity >= 1.0){
-			if(h.ie){
-				dojo.html.clearOpacity(node);
-				return;
-			}else{
-				opacity = 0.999999;
-			}
-		}else if( opacity < 0.0){ opacity = 0; }
-	}
-	if(h.ie){
-		if(node.nodeName.toLowerCase() == "tr"){
-			// FIXME: is this too naive? will we get more than we want?
-			var tds = node.getElementsByTagName("td");
-			for(var x=0; x<tds.length; x++){
-				tds[x].style.filter = "Alpha(Opacity="+opacity*100+")";
-			}
-		}
-		node.style.filter = "Alpha(Opacity="+opacity*100+")";
-	}else if(h.moz){
-		node.style.opacity = opacity; // ffox 1.0 directly supports "opacity"
-		node.style.MozOpacity = opacity;
-	}else if(h.safari){
-		node.style.opacity = opacity; // 1.3 directly supports "opacity"
-		node.style.KhtmlOpacity = opacity;
-	}else{
-		node.style.opacity = opacity;
-	}
-}
-
-dojo.html.clearOpacity = function(/* HTMLElement */node){
-	//	summary
-	//	Clears any opacity setting on the passed element.
-	node = dojo.byId(node);
-	var ns = node.style;
-	var h = dojo.render.html;
-	if(h.ie){
-		try {
-			if( node.filters && node.filters.alpha ){
-				ns.filter = ""; // FIXME: may get rid of other filter effects
-			}
-		} catch(e) {
-			/*
-			 * IE7 gives error if node.filters not set;
-			 * don't know why or how to workaround (other than this)
-			 */
-		}
-	}else if(h.moz){
-		ns.opacity = 1;
-		ns.MozOpacity = 1;
-	}else if(h.safari){
-		ns.opacity = 1;
-		ns.KhtmlOpacity = 1;
-	}else{
-		ns.opacity = 1;
-	}
-}
-
-dojo.html.getOpacity = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the opacity of the passed element
-	node = dojo.byId(node);
-	var h = dojo.render.html;
-	if(h.ie){
-		var opac = (node.filters && node.filters.alpha &&
-			typeof node.filters.alpha.opacity == "number"
-			? node.filters.alpha.opacity : 100) / 100;
-	}else{
-		var opac = node.style.opacity || node.style.MozOpacity ||
-			node.style.KhtmlOpacity || 1;
-	}
-	return opac >= 0.999999 ? 1.0 : Number(opac);	//	float
-}
-
-dojo.provide("dojo.ns");
-
-dojo.ns = {
-	// summary: private object that implements widget namespace management
-	namespaces: {},
-	failed: {},
-	loading: {},
-	loaded: {},
-	register: function(/*String*/name, /*String*/module, /*Function?*/resolver, /*Boolean?*/noOverride){
-		// summary: creates and registers a dojo.ns.Ns object
-		if(!noOverride || !this.namespaces[name]){
-			this.namespaces[name] = new dojo.ns.Ns(name, module, resolver);
-		}
-	},
-	allow: function(/*String*/name){
-		// summary: Returns false if 'name' is filtered by configuration or has failed to load, true otherwise
-		if(this.failed[name]){return false;} // Boolean
-		if((djConfig.excludeNamespace)&&(dojo.lang.inArray(djConfig.excludeNamespace, name))){return false;} // Boolean
-		// If the namespace is "dojo", or the user has not specified allowed namespaces return true.
-		// Otherwise, if the user has specifically allowed this namespace, return true, otherwise false.
-		return((name==this.dojo)||(!djConfig.includeNamespace)||(dojo.lang.inArray(djConfig.includeNamespace, name))); // Boolean
-	},
-	get: function(/*String*/name){
-		// summary
-		//  Return Ns object registered to 'name', if any
-		return this.namespaces[name]; // Ns
-	},
-	require: function(/*String*/name){
-		// summary
-  	//  Try to ensure that 'name' is registered, loading a namespace manifest if necessary
-		var ns = this.namespaces[name];
-		if((ns)&&(this.loaded[name])){return ns;} // Ns
-		if(!this.allow(name)){return false;} // Boolean
- 		if(this.loading[name]){
-			// FIXME: do we really ever have re-entrancy situation? this would appear to be really bad
-			// original code did not throw an exception, although that seems the only course
-			// adding debug output here to track if this occurs.
-			dojo.debug('dojo.namespace.require: re-entrant request to load namespace "' + name + '" must fail.'); 
-			return false; // Boolean
-		}
-		// workaround so we don't break the build system
-		var req = dojo.require;
-		this.loading[name] = true;
-		try {
-			//dojo namespace file is always in the Dojo namespaces folder, not any custom folder
-			if(name=="dojo"){
-				req("dojo.namespaces.dojo");
-			}else{
-				// if no registered module prefix, use ../<name> by convention
-				if(!dojo.hostenv.moduleHasPrefix(name)){
-					dojo.registerModulePath(name, "../" + name);
-				}
-				req([name, 'manifest'].join('.'), false, true);
-			}
-			if(!this.namespaces[name]){
-				this.failed[name] = true; //only look for a namespace once
-			}
-		}finally{
-			this.loading[name]=false;
-		}
-		return this.namespaces[name]; // Ns
-	}
-}
-
-dojo.ns.Ns = function(/*String*/name, /*String*/module, /*Function?*/resolver){
-	// summary: this object simply encapsulates namespace data
-	this.name = name;
-	this.module = module;
-	this.resolver = resolver;
-	this._loaded = [ ];
-	this._failed = [ ];
-}
-
-dojo.ns.Ns.prototype.resolve = function(/*String*/name, /*String*/domain, /*Boolean?*/omitModuleCheck){
-	//summary: map component with 'name' and 'domain' to a module via namespace resolver, if specified
-	if(!this.resolver || djConfig["skipAutoRequire"]){return false;} // Boolean
-	var fullName = this.resolver(name, domain);
-	//only load a widget once. This is a quicker check than dojo.require does
-	if((fullName)&&(!this._loaded[fullName])&&(!this._failed[fullName])){
-		//workaround so we don't break the build system
-		var req = dojo.require;
-		req(fullName, false, true); //omit the module check, we'll do it ourselves.
-		if(dojo.hostenv.findModule(fullName, false)){
-			this._loaded[fullName] = true;
-		}else{
-			if(!omitModuleCheck){dojo.raise("dojo.ns.Ns.resolve: module '" + fullName + "' not found after loading via namespace '" + this.name + "'");} 
-			this._failed[fullName] = true;
-		}
-	}
-	return Boolean(this._loaded[fullName]); // Boolean
-}
-
-dojo.registerNamespace = function(/*String*/name, /*String*/module, /*Function?*/resolver){
-	// summary: maps a module name to a namespace for widgets, and optionally maps widget names to modules for auto-loading
-	// description: An unregistered namespace is mapped to an eponymous module.
-	//	For example, namespace acme is mapped to module acme, and widgets are
-	//	assumed to belong to acme.widget. If you want to use a different widget
-	//	module, use dojo.registerNamespace.
-	dojo.ns.register.apply(dojo.ns, arguments);
-}
-
-dojo.registerNamespaceResolver = function(/*String*/name, /*Function*/resolver){
-	// summary: a resolver function maps widget names to modules, so the
-	//	widget manager can auto-load needed widget implementations
-	//
-	// description: The resolver provides information to allow Dojo
-	//	to load widget modules on demand. When a widget is created,
-	//	a namespace resolver can tell Dojo what module to require
-	//	to ensure that the widget implementation code is loaded.
-	//
-	// name: will always be lower-case.
-	//
-	// example:
-	//  dojo.registerNamespaceResolver("acme",
-	//    function(name){ 
-	//      return "acme.widget."+dojo.string.capitalize(name);
-	//    }
-	//  );
-	var n = dojo.ns.namespaces[name];
-	if(n){
-		n.resolver = resolver;
-	}
-}
-
-dojo.registerNamespaceManifest = function(/*String*/module, /*String*/path, /*String*/name, /*String*/widgetModule, /*Function?*/resolver){
-	// summary: convenience function to register a module path, a namespace, and optionally a resolver all at once.
-	dojo.registerModulePath(name, path);
-	dojo.registerNamespace(name, widgetModule, resolver);
-}
-
-// NOTE: rather put this in dojo.widget.Widget, but that fubars debugAtAllCosts
-dojo.registerNamespace("dojo", "dojo.widget");
-
-
-dojo.provide("dojo.event.topic");
-
-dojo.event.topic = new function(){
-	this.topics = {};
-
-	this.getTopic = function(/*String*/topic){
-		// summary:
-		//		returns a topic implementation object of type
-		//		dojo.event.topic.TopicImpl
-		// topic:
-		//		a unique, opaque string that names the topic
-		if(!this.topics[topic]){
-			this.topics[topic] = new this.TopicImpl(topic);
-		}
-		return this.topics[topic]; // a dojo.event.topic.TopicImpl object
-	}
-
-	this.registerPublisher = function(/*String*/topic, /*Object*/obj, /*String*/funcName){
-		// summary:
-		//		registers a function as a publisher on a topic. Subsequent
-		//		calls to the function will cause a publish event on the topic
-		//		with the arguments passed to the function passed to registered
-		//		listeners.
-		// topic: 
-		//		a unique, opaque string that names the topic
-		// obj:
-		//		the scope to locate the function in
-		// funcName:
-		//		the name of the function to register
-		var topic = this.getTopic(topic);
-		topic.registerPublisher(obj, funcName);
-	}
-
-	this.subscribe = function(/*String*/topic, /*Object*/obj, /*String*/funcName){
-		// summary:
-		//		susbscribes the function to the topic. Subsequent events
-		//		dispached to the topic will create a function call for the
-		//		obj.funcName() function.
-		// topic: 
-		//		a unique, opaque string that names the topic
-		// obj:
-		//		the scope to locate the function in
-		// funcName:
-		//		the name of the function to being registered as a listener
-		var topic = this.getTopic(topic);
-		topic.subscribe(obj, funcName);
-	}
-
-	this.unsubscribe = function(/*String*/topic, /*Object*/obj, /*String*/funcName){
-		// summary:
-		//		unsubscribes the obj.funcName() from the topic
-		// topic: 
-		//		a unique, opaque string that names the topic
-		// obj:
-		//		the scope to locate the function in
-		// funcName:
-		//		the name of the function to being unregistered as a listener
-		var topic = this.getTopic(topic);
-		topic.unsubscribe(obj, funcName);
-	}
-
-	this.destroy = function(/*String*/topic){
-		// summary: 
-		//		destroys the topic and unregisters all listeners
-		// topic:
-		//		a unique, opaque string that names the topic
-		this.getTopic(topic).destroy();
-		delete this.topics[topic];
-	}
-
-	this.publishApply = function(/*String*/topic, /*Array*/args){
-		// summary: 
-		//		dispatches an event to the topic using the args array as the
-		//		source for the call arguments to each listener. This is similar
-		//		to JavaScript's built-in Function.apply()
-		// topic:
-		//		a unique, opaque string that names the topic
-		// args:
-		//		the arguments to be passed into listeners of the topic
-		var topic = this.getTopic(topic);
-		topic.sendMessage.apply(topic, args);
-	}
-
-	this.publish = function(/*String*/topic, /*Object*/message){
-		// summary: 
-		//		manually "publish" to the passed topic
-		// topic:
-		//		a unique, opaque string that names the topic
-		// message:
-		//		can be an array of parameters (similar to publishApply), or
-		//		will be treated as one of many arguments to be passed along in
-		//		a "flat" unrolling
-		var topic = this.getTopic(topic);
-		// if message is an array, we treat it as a set of arguments,
-		// otherwise, we just pass on the arguments passed in as-is
-		var args = [];
-		// could we use concat instead here?
-		for(var x=1; x<arguments.length; x++){
-			args.push(arguments[x]);
-		}
-		topic.sendMessage.apply(topic, args);
-	}
-}
-
-dojo.event.topic.TopicImpl = function(topicName){
-	// summary: a class to represent topics
-
-	this.topicName = topicName;
-
-	this.subscribe = function(/*Object*/listenerObject, /*Function or String*/listenerMethod){
-		// summary:
-		//		use dojo.event.connect() to attach the passed listener to the
-		//		topic represented by this object
-		// listenerObject:
-		//		if a string and listenerMethod is ommitted, this is treated as
-		//		the name of a function in the global namespace. If
-		//		listenerMethod is provided, this is the scope to find/execute
-		//		the function in.
-		// listenerMethod:
-		//		Optional. The function to register.
-		var tf = listenerMethod||listenerObject;
-		var to = (!listenerMethod) ? dj_global : listenerObject;
-		return dojo.event.kwConnect({ // dojo.event.MethodJoinPoint
-			srcObj:		this, 
-			srcFunc:	"sendMessage", 
-			adviceObj:	to,
-			adviceFunc: tf
-		});
-	}
-
-	this.unsubscribe = function(/*Object*/listenerObject, /*Function or String*/listenerMethod){
-		// summary:
-		//		use dojo.event.disconnect() to attach the passed listener to the
-		//		topic represented by this object
-		// listenerObject:
-		//		if a string and listenerMethod is ommitted, this is treated as
-		//		the name of a function in the global namespace. If
-		//		listenerMethod is provided, this is the scope to find the
-		//		function in.
-		// listenerMethod:
-		//		Optional. The function to unregister.
-		var tf = (!listenerMethod) ? listenerObject : listenerMethod;
-		var to = (!listenerMethod) ? null : listenerObject;
-		return dojo.event.kwDisconnect({ // dojo.event.MethodJoinPoint
-			srcObj:		this, 
-			srcFunc:	"sendMessage", 
-			adviceObj:	to,
-			adviceFunc: tf
-		});
-	}
-
-	this._getJoinPoint = function(){
-		return dojo.event.MethodJoinPoint.getForMethod(this, "sendMessage");
-	}
-
-	this.setSquelch = function(/*Boolean*/shouldSquelch){
-		// summary: 
-		//		determine whether or not exceptions in the calling of a
-		//		listener in the chain should stop execution of the chain.
-		this._getJoinPoint().squelch = shouldSquelch;
-	}
-
-	this.destroy = function(){
-		// summary: disconnects all listeners from this topic
-		this._getJoinPoint().disconnect();
-	}
-
-	this.registerPublisher = function(	/*Object*/publisherObject, 
-										/*Function or String*/publisherMethod){
-		// summary:
-		//		registers the passed function as a publisher on this topic.
-		//		Each time the function is called, an event will be published on
-		//		this topic.
-		// publisherObject:
-		//		if a string and listenerMethod is ommitted, this is treated as
-		//		the name of a function in the global namespace. If
-		//		listenerMethod is provided, this is the scope to find the
-		//		function in.
-		// publisherMethod:
-		//		Optional. The function to register.
-		dojo.event.connect(publisherObject, publisherMethod, this, "sendMessage");
-	}
-
-	this.sendMessage = function(message){
-		// summary: a stub to be called when a message is sent to the topic.
-
-		// The message has been propagated
-	}
-}
-
-
-dojo.kwCompoundRequire({
-	common: ["dojo.event.common", "dojo.event.topic"],
-	browser: ["dojo.event.browser"],
-	dashboard: ["dojo.event.browser"]
-});
-dojo.provide("dojo.event.*");
-
-dojo.provide("dojo.widget.Manager");
-
-
-
-
-// summary
-//	Manager class for the widgets.
-//	This is an internal class used by dojo; users shouldn't call this class directly.
-dojo.widget.manager = new function(){
-	this.widgets = [];
-	this.widgetIds = [];
-	
-	// map of widgetId-->widget for widgets without parents (top level widgets)
-	this.topWidgets = {};
-
-	var widgetTypeCtr = {};
-	var renderPrefixCache = [];
-
-	this.getUniqueId = function (widgetType) {
-		var widgetId;
-		do{
-			widgetId = widgetType + "_" + (widgetTypeCtr[widgetType] != undefined ?
-			++widgetTypeCtr[widgetType] : widgetTypeCtr[widgetType] = 0);
-		}while(this.getWidgetById(widgetId));
-		return widgetId;
-	}
-
-	this.add = function(widget){
-		//dojo.profile.start("dojo.widget.manager.add");
-		this.widgets.push(widget);
-		// Opera9 uses ID (caps)
-		if(!widget.extraArgs["id"]){
-			widget.extraArgs["id"] = widget.extraArgs["ID"];
-		}
-		// FIXME: the rest of this method is very slow!
-		if(widget.widgetId == ""){
-			if(widget["id"]){
-				widget.widgetId = widget["id"];
-			}else if(widget.extraArgs["id"]){
-				widget.widgetId = widget.extraArgs["id"];
-			}else{
-				widget.widgetId = this.getUniqueId(widget.ns+'_'+widget.widgetType);
-			}
-		}
-		if(this.widgetIds[widget.widgetId]){
-			dojo.debug("widget ID collision on ID: "+widget.widgetId);
-		}
-		this.widgetIds[widget.widgetId] = widget;
-		// Widget.destroy already calls removeById(), so we don't need to
-		// connect() it here
-		//dojo.profile.end("dojo.widget.manager.add");
-	}
-
-	this.destroyAll = function(){
-		for(var x=this.widgets.length-1; x>=0; x--){
-			try{
-				// this.widgets[x].destroyChildren();
-				this.widgets[x].destroy(true);
-				delete this.widgets[x];
-			}catch(e){ }
-		}
-	}
-
-	// FIXME: we should never allow removal of the root widget until all others
-	// are removed!
-	this.remove = function(widgetIndex){
-		if(dojo.lang.isNumber(widgetIndex)){
-			var tw = this.widgets[widgetIndex].widgetId;
-			delete this.topWidgets[tw];
-			delete this.widgetIds[tw];
-			this.widgets.splice(widgetIndex, 1);
-		}else{
-			this.removeById(widgetIndex);
-		}
-	}
-	
-	// FIXME: suboptimal performance
-	this.removeById = function(id) {
-		if(!dojo.lang.isString(id)){
-			id = id["widgetId"];
-			if(!id){ dojo.debug("invalid widget or id passed to removeById"); return; }
-		}
-		for (var i=0; i<this.widgets.length; i++){
-			if(this.widgets[i].widgetId == id){
-				this.remove(i);
-				break;
-			}
-		}
-	}
-
-	this.getWidgetById = function(id){
-		if(dojo.lang.isString(id)){
-			return this.widgetIds[id];
-		}
-		return id;
-	}
-
-	this.getWidgetsByType = function(type){
-		var lt = type.toLowerCase();
-		var getType = (type.indexOf(":") < 0 ? 
-			function(x) { return x.widgetType.toLowerCase(); } :
-			function(x) { return x.getNamespacedType(); }
-		);
-		var ret = [];
-		dojo.lang.forEach(this.widgets, function(x){
-			if(getType(x) == lt){ret.push(x);}
-		});
-		return ret;
-	}
-
-	this.getWidgetsByFilter = function(unaryFunc, onlyOne){
-		var ret = [];
-		dojo.lang.every(this.widgets, function(x){
-			if(unaryFunc(x)){
-				ret.push(x);
-				if(onlyOne){return false;}
-			}
-			return true;
-		});
-		return (onlyOne ? ret[0] : ret);
-	}
-
-	this.getAllWidgets = function() {
-		return this.widgets.concat();
-	}
-
-	//	added, trt 2006-01-20
-	this.getWidgetByNode = function(/* DOMNode */ node){
-		var w=this.getAllWidgets();
-		node = dojo.byId(node);
-		for(var i=0; i<w.length; i++){
-			if(w[i].domNode==node){
-				return w[i];
-			}
-		}
-		return null;
-	}
-
-	// shortcuts, baby
-	this.byId = this.getWidgetById;
-	this.byType = this.getWidgetsByType;
-	this.byFilter = this.getWidgetsByFilter;
-	this.byNode = this.getWidgetByNode;
-
-	// map of previousally discovered implementation names to constructors
-	var knownWidgetImplementations = {};
-
-	// support manually registered widget packages
-	var widgetPackages = ["dojo.widget"];
-	for (var i=0; i<widgetPackages.length; i++) {
-		// convenience for checking if a package exists (reverse lookup)
-		widgetPackages[widgetPackages[i]] = true;
-	}
-
-	this.registerWidgetPackage = function(pname) {
-		if(!widgetPackages[pname]){
-			widgetPackages[pname] = true;
-			widgetPackages.push(pname);
-		}
-	}
-	
-	this.getWidgetPackageList = function() {
-		return dojo.lang.map(widgetPackages, function(elt) { return(elt!==true ? elt : undefined); });
-	}
-	
-	this.getImplementation = function(widgetName, ctorObject, mixins, ns){
-		// try and find a name for the widget
-		var impl = this.getImplementationName(widgetName, ns);
-		if(impl){ 
-			// var tic = new Date();
-			var ret = ctorObject ? new impl(ctorObject) : new impl();
-			// dojo.debug(new Date() - tic);
-			return ret;
-		}
-	}
-
-	function buildPrefixCache() {
-		for(var renderer in dojo.render){
-			if(dojo.render[renderer]["capable"] === true){
-				var prefixes = dojo.render[renderer].prefixes;
-				for(var i=0; i<prefixes.length; i++){
-					renderPrefixCache.push(prefixes[i].toLowerCase());
-				}
-			}
-		}
-		// make sure we don't HAVE to prefix widget implementation names
-		// with anything to get them to render
-		//renderPrefixCache.push("");
-		// empty prefix is included automatically
-	}
-	
-	var findImplementationInModule = function(lowerCaseWidgetName, module){
-		if(!module){return null;}
-		for(var i=0, l=renderPrefixCache.length, widgetModule; i<=l; i++){
-			widgetModule = (i<l ? module[renderPrefixCache[i]] : module);
-			if(!widgetModule){continue;}
-			for(var name in widgetModule){
-				if(name.toLowerCase() == lowerCaseWidgetName){
-					return widgetModule[name];
-				}
-			}
-		}
-		return null;
-	}
-
-	var findImplementation = function(lowerCaseWidgetName, moduleName){
-		// locate registered widget module
-		var module = dojo.evalObjPath(moduleName, false);
-		// locate a widget implementation in the registered module for our current rendering environment
-		return (module ? findImplementationInModule(lowerCaseWidgetName, module) : null);
-	}
-
-	this.getImplementationName = function(widgetName, ns){
-		/*
-		 * Locate an implementation (constructor) for 'widgetName' in namespace 'ns' 
-		 * widgetNames are case INSENSITIVE
-		 * 
-		 * 1. Return value from implementation cache, if available, for quick turnaround.
-		 * 2. Locate a namespace registration for 'ns'
-		 * 3. If no namespace found, register the conventional one (ns.widget)
-		 * 4. Allow the namespace resolver (if any) to load a module for this widget.
-		 * 5. Permute the widget name and capable rendering prefixes to locate, cache, and return 
-		 *    an appropriate widget implementation.
-		 * 6. If no implementation is found, attempt to load the namespace manifest,
-		 *    and then look again for an implementation to cache and return.
-		 * 7. Use the deprecated widgetPackages registration system to attempt to locate the widget
-		 * 8. Fail
-		 */
-		var lowerCaseWidgetName = widgetName.toLowerCase();
-
-		// default to dojo namespace
-		ns=ns||"dojo";
-		// use cache if available
-		var imps = knownWidgetImplementations[ns] || (knownWidgetImplementations[ns]={});
-		//if(!knownWidgetImplementations[ns]){knownWidgetImplementations[ns]={};}
-		var impl = imps[lowerCaseWidgetName];
-		if(impl){
-			return impl;
-		}
-		
-		// (one time) store a list of the render prefixes we are capable of rendering
-		if(!renderPrefixCache.length){
-			buildPrefixCache();
-		}
-
-		// lookup namespace
-		var nsObj = dojo.ns.get(ns);
-		if(!nsObj){
-			// default to <ns>.widget by convention
-			dojo.ns.register(ns, ns + '.widget');
-			nsObj = dojo.ns.get(ns);
-		}
-		
-		// allow the namespace to resolve the widget module
-		if(nsObj){nsObj.resolve(widgetName);}
-
-		// locate a widget implementation in the registered module for our current rendering environment
-		impl = findImplementation(lowerCaseWidgetName, nsObj.module);
-		if(impl){return(imps[lowerCaseWidgetName] = impl)};
-
-		// try to load a manifest to resolve this implemenation
-		nsObj = dojo.ns.require(ns);
-		if((nsObj)&&(nsObj.resolver)){
-			nsObj.resolve(widgetName);
-			impl = findImplementation(lowerCaseWidgetName, nsObj.module);
-			if(impl){return(imps[lowerCaseWidgetName] = impl)};
-		}
-	
-		// this is an error condition under new rules
-		dojo.deprecated('dojo.widget.Manager.getImplementationName', 
-			'Could not locate widget implementation for "' + widgetName + '" in "' + nsObj.module + '" registered to namespace "' + nsObj.name + '". '										
-			+ "Developers must specify correct namespaces for all non-Dojo widgets", "0.5");
-
-		// backward compat: if the user has not specified any namespace and their widget is not in dojo.widget.*
-		// search registered widget packages [sic]
-		// note: registerWidgetPackage itself is now deprecated 
-		for(var i=0; i<widgetPackages.length; i++){
-			impl = findImplementation(lowerCaseWidgetName, widgetPackages[i]);
-			if(impl){return(imps[lowerCaseWidgetName] = impl)};
-		}
-		
-		throw new Error('Could not locate widget implementation for "' + widgetName + '" in "' + nsObj.module + '" registered to namespace "' + nsObj.name + '"');
-	}
-
-	// FIXME: does it even belong in this module?
-	// NOTE: this method is implemented by DomWidget.js since not all
-	// hostenv's would have an implementation.
-	/*this.getWidgetFromPrimitive = function(baseRenderType){
-		dojo.unimplemented("dojo.widget.manager.getWidgetFromPrimitive");
-	}
-
-	this.getWidgetFromEvent = function(nativeEvt){
-		dojo.unimplemented("dojo.widget.manager.getWidgetFromEvent");
-	}*/
-
-	// Catch window resize events and notify top level widgets
-	this.resizing=false;
-	this.onWindowResized = function(){
-		if(this.resizing){
-			return;	// duplicate event
-		}
-		try{
-			this.resizing=true;
-			for(var id in this.topWidgets){
-				var child = this.topWidgets[id];
-				if(child.checkSize ){
-					child.checkSize();
-				}
-			}
-		}catch(e){
-		}finally{
-			this.resizing=false;
-		}
-	}
-	if(typeof window != "undefined") {
-		dojo.addOnLoad(this, 'onWindowResized');							// initial sizing
-		dojo.event.connect(window, 'onresize', this, 'onWindowResized');	// window resize
-	}
-
-	// FIXME: what else?
-};
-
-(function(){
-	var dw = dojo.widget;
-	var dwm = dw.manager;
-	var h = dojo.lang.curry(dojo.lang, "hitch", dwm);
-	var g = function(oldName, newName){
-		dw[(newName||oldName)] = h(oldName);
-	}
-	// copy the methods from the default manager (this) to the widget namespace
-	g("add", "addWidget");
-	g("destroyAll", "destroyAllWidgets");
-	g("remove", "removeWidget");
-	g("removeById", "removeWidgetById");
-	g("getWidgetById");
-	g("getWidgetById", "byId");
-	g("getWidgetsByType");
-	g("getWidgetsByFilter");
-	g("getWidgetsByType", "byType");
-	g("getWidgetsByFilter", "byFilter");
-	g("getWidgetByNode", "byNode");
-	dw.all = function(n){
-		var widgets = dwm.getAllWidgets.apply(dwm, arguments);
-		if(arguments.length > 0) {
-			return widgets[n];
-		}
-		return widgets;
-	}
-	g("registerWidgetPackage");
-	g("getImplementation", "getWidgetImplementation");
-	g("getImplementationName", "getWidgetImplementationName");
-
-	dw.widgets = dwm.widgets;
-	dw.widgetIds = dwm.widgetIds;
-	dw.root = dwm.root;
-})();
-
-dojo.provide("dojo.i18n.common");
-
-dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){
-//	summary:
-//		Returns an Object containing the localization for a given resource bundle
-//		in a package, matching the specified locale.
-//
-//	description:
-//		Returns a hash containing name/value pairs in its prototypesuch that values can be easily overridden.
-//		Throws an exception if the bundle is not found.
-//		Bundle must have already been loaded by dojo.requireLocalization() or by a build optimization step.
-//
-//	packageName: package which is associated with this resource
-//	bundleName: the base filename of the resource bundle (without the ".js" suffix)
-//	locale: the variant to load (optional).  By default, the locale defined by the
-//		host environment: dojo.locale
-
-	dojo.hostenv.preloadLocalizations();
-	locale = dojo.hostenv.normalizeLocale(locale);
-
-	// look for nearest locale match
-	var elements = locale.split('-');
-	var module = [packageName,"nls",bundleName].join('.');
-	var bundle = dojo.hostenv.findModule(module, true);
-
-	var localization;
-	for(var i = elements.length; i > 0; i--){
-		var loc = elements.slice(0, i).join('_');
-		if(bundle[loc]){
-			localization = bundle[loc];
-			break;
-		}
-	}
-	if(!localization){
-		localization = bundle.ROOT;
-	}
-
-	// make a singleton prototype so that the caller won't accidentally change the values globally
-	if(localization){
-		var clazz = function(){};
-		clazz.prototype = localization;
-		return new clazz(); // Object
-	}
-
-	dojo.raise("Bundle not found: " + bundleName + " in " + packageName+" , locale=" + locale);
-};
-
-dojo.i18n.isLTR = function(/*String?*/locale){
-//	summary:
-//		Is the language read left-to-right?  Most exceptions are for middle eastern languages.
-//
-//	locale: a string representing the locale.  By default, the locale defined by the
-//		host environment: dojo.locale
-
-	var lang = dojo.hostenv.normalizeLocale(locale).split('-')[0];
-	var RTL = {ar:true,fa:true,he:true,ur:true,yi:true};
-	return !RTL[lang]; // Boolean
-};
-
-dojo.provide("dojo.tlocale");
-
-
-
-
-
-
-
-
-
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo2.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo2.js
deleted file mode 100644
index fc732de..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo2.js
+++ /dev/null
@@ -1,2136 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("layer.validation");
-dojo.provide("dojo.experimental");
-dojo.experimental=function(_1,_2){
-var _3="EXPERIMENTAL: "+_1;
-_3+=" -- Not yet ready for use.  APIs subject to change without notice.";
-if(_2){
-_3+=" "+_2;
-}
-dojo.debug(_3);
-};
-dojo.provide("dojo.regexp");
-dojo.evalObjPath("dojo.regexp.us",true);
-dojo.regexp.tld=function(_4){
-_4=(typeof _4=="object")?_4:{};
-if(typeof _4.allowCC!="boolean"){
-_4.allowCC=true;
-}
-if(typeof _4.allowInfra!="boolean"){
-_4.allowInfra=true;
-}
-if(typeof _4.allowGeneric!="boolean"){
-_4.allowGeneric=true;
-}
-var _5="arpa";
-var _6="aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|xxx|jobs|mobi|post";
-var _7="ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|"+"bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|"+"ec|ee|eg|er|eu|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|"+"gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|"+"la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|"+"my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|"+"re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sk|sl|sm|sn|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|"+"tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw";
-var a=[];
-if(_4.allowInfra){
-a.push(_5);
-}
-if(_4.allowGeneric){
-a.push(_6);
-}
-if(_4.allowCC){
-a.push(_7);
-}
-var _9="";
-if(a.length>0){
-_9="("+a.join("|")+")";
-}
-return _9;
-};
-dojo.regexp.ipAddress=function(_a){
-_a=(typeof _a=="object")?_a:{};
-if(typeof _a.allowDottedDecimal!="boolean"){
-_a.allowDottedDecimal=true;
-}
-if(typeof _a.allowDottedHex!="boolean"){
-_a.allowDottedHex=true;
-}
-if(typeof _a.allowDottedOctal!="boolean"){
-_a.allowDottedOctal=true;
-}
-if(typeof _a.allowDecimal!="boolean"){
-_a.allowDecimal=true;
-}
-if(typeof _a.allowHex!="boolean"){
-_a.allowHex=true;
-}
-if(typeof _a.allowIPv6!="boolean"){
-_a.allowIPv6=true;
-}
-if(typeof _a.allowHybrid!="boolean"){
-_a.allowHybrid=true;
-}
-var _b="((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
-var _c="(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]";
-var _d="(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]";
-var _e="(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|"+"4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])";
-var _f="0[xX]0*[\\da-fA-F]{1,8}";
-var _10="([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}";
-var _11="([\\da-fA-F]{1,4}\\:){6}"+"((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
-var a=[];
-if(_a.allowDottedDecimal){
-a.push(_b);
-}
-if(_a.allowDottedHex){
-a.push(_c);
-}
-if(_a.allowDottedOctal){
-a.push(_d);
-}
-if(_a.allowDecimal){
-a.push(_e);
-}
-if(_a.allowHex){
-a.push(_f);
-}
-if(_a.allowIPv6){
-a.push(_10);
-}
-if(_a.allowHybrid){
-a.push(_11);
-}
-var _13="";
-if(a.length>0){
-_13="("+a.join("|")+")";
-}
-return _13;
-};
-dojo.regexp.host=function(_14){
-_14=(typeof _14=="object")?_14:{};
-if(typeof _14.allowIP!="boolean"){
-_14.allowIP=true;
-}
-if(typeof _14.allowLocal!="boolean"){
-_14.allowLocal=false;
-}
-if(typeof _14.allowPort!="boolean"){
-_14.allowPort=true;
-}
-var _15="([0-9a-zA-Z]([-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?\\.)+"+dojo.regexp.tld(_14);
-var _16=(_14.allowPort)?"(\\:"+dojo.regexp.integer({signed:false})+")?":"";
-var _17=_15;
-if(_14.allowIP){
-_17+="|"+dojo.regexp.ipAddress(_14);
-}
-if(_14.allowLocal){
-_17+="|localhost";
-}
-return "("+_17+")"+_16;
-};
-dojo.regexp.url=function(_18){
-_18=(typeof _18=="object")?_18:{};
-if(typeof _18.scheme=="undefined"){
-_18.scheme=[true,false];
-}
-var _19=dojo.regexp.buildGroupRE(_18.scheme,function(q){
-if(q){
-return "(https?|ftps?)\\://";
-}
-return "";
-});
-var _1b="(/([^?#\\s/]+/)*)?([^?#\\s/]+(\\?[^?#\\s/]*)?(#[A-Za-z][\\w.:-]*)?)?";
-return _19+dojo.regexp.host(_18)+_1b;
-};
-dojo.regexp.emailAddress=function(_1c){
-_1c=(typeof _1c=="object")?_1c:{};
-if(typeof _1c.allowCruft!="boolean"){
-_1c.allowCruft=false;
-}
-_1c.allowPort=false;
-var _1d="([\\da-z]+[-._+&'])*[\\da-z]+";
-var _1e=_1d+"@"+dojo.regexp.host(_1c);
-if(_1c.allowCruft){
-_1e="<?(mailto\\:)?"+_1e+">?";
-}
-return _1e;
-};
-dojo.regexp.emailAddressList=function(_1f){
-_1f=(typeof _1f=="object")?_1f:{};
-if(typeof _1f.listSeparator!="string"){
-_1f.listSeparator="\\s;,";
-}
-var _20=dojo.regexp.emailAddress(_1f);
-var _21="("+_20+"\\s*["+_1f.listSeparator+"]\\s*)*"+_20+"\\s*["+_1f.listSeparator+"]?\\s*";
-return _21;
-};
-dojo.regexp.integer=function(_22){
-_22=(typeof _22=="object")?_22:{};
-if(typeof _22.signed=="undefined"){
-_22.signed=[true,false];
-}
-if(typeof _22.separator=="undefined"){
-_22.separator="";
-}else{
-if(typeof _22.groupSize=="undefined"){
-_22.groupSize=3;
-}
-}
-var _23=dojo.regexp.buildGroupRE(_22.signed,function(q){
-return q?"[-+]":"";
-});
-var _25=dojo.regexp.buildGroupRE(_22.separator,function(sep){
-if(sep==""){
-return "(0|[1-9]\\d*)";
-}
-var grp=_22.groupSize,_28=_22.groupSize2;
-if(typeof _28!="undefined"){
-var _29="(0|[1-9]\\d{0,"+(_28-1)+"}(["+sep+"]\\d{"+_28+"})*["+sep+"]\\d{"+grp+"})";
-return ((grp-_28)>0)?"("+_29+"|(0|[1-9]\\d{0,"+(grp-1)+"}))":_29;
-}
-return "(0|[1-9]\\d{0,"+(grp-1)+"}(["+sep+"]\\d{"+grp+"})*)";
-});
-return _23+_25;
-};
-dojo.regexp.realNumber=function(_2a){
-_2a=(typeof _2a=="object")?_2a:{};
-if(typeof _2a.places!="number"){
-_2a.places=Infinity;
-}
-if(typeof _2a.decimal!="string"){
-_2a.decimal=".";
-}
-if(typeof _2a.fractional=="undefined"){
-_2a.fractional=[true,false];
-}
-if(typeof _2a.exponent=="undefined"){
-_2a.exponent=[true,false];
-}
-if(typeof _2a.eSigned=="undefined"){
-_2a.eSigned=[true,false];
-}
-var _2b=dojo.regexp.integer(_2a);
-var _2c=dojo.regexp.buildGroupRE(_2a.fractional,function(q){
-var re="";
-if(q&&(_2a.places>0)){
-re="\\"+_2a.decimal;
-if(_2a.places==Infinity){
-re="("+re+"\\d+)?";
-}else{
-re=re+"\\d{"+_2a.places+"}";
-}
-}
-return re;
-});
-var _2f=dojo.regexp.buildGroupRE(_2a.exponent,function(q){
-if(q){
-return "([eE]"+dojo.regexp.integer({signed:_2a.eSigned})+")";
-}
-return "";
-});
-return _2b+_2c+_2f;
-};
-dojo.regexp.currency=function(_31){
-_31=(typeof _31=="object")?_31:{};
-if(typeof _31.signed=="undefined"){
-_31.signed=[true,false];
-}
-if(typeof _31.symbol=="undefined"){
-_31.symbol="$";
-}
-if(typeof _31.placement!="string"){
-_31.placement="before";
-}
-if(typeof _31.signPlacement!="string"){
-_31.signPlacement="before";
-}
-if(typeof _31.separator=="undefined"){
-_31.separator=",";
-}
-if(typeof _31.fractional=="undefined"&&typeof _31.cents!="undefined"){
-dojo.deprecated("dojo.regexp.currency: flags.cents","use flags.fractional instead","0.5");
-_31.fractional=_31.cents;
-}
-if(typeof _31.decimal!="string"){
-_31.decimal=".";
-}
-var _32=dojo.regexp.buildGroupRE(_31.signed,function(q){
-if(q){
-return "[-+]";
-}
-return "";
-});
-var _34=dojo.regexp.buildGroupRE(_31.symbol,function(_35){
-return "\\s?"+_35.replace(/([.$?*!=:|\\\/^])/g,"\\$1")+"\\s?";
-});
-switch(_31.signPlacement){
-case "before":
-_34=_32+_34;
-break;
-case "after":
-_34=_34+_32;
-break;
-}
-var _36=_31;
-_36.signed=false;
-_36.exponent=false;
-var _37=dojo.regexp.realNumber(_36);
-var _38;
-switch(_31.placement){
-case "before":
-_38=_34+_37;
-break;
-case "after":
-_38=_37+_34;
-break;
-}
-switch(_31.signPlacement){
-case "around":
-_38="("+_38+"|"+"\\("+_38+"\\)"+")";
-break;
-case "begin":
-_38=_32+_38;
-break;
-case "end":
-_38=_38+_32;
-break;
-}
-return _38;
-};
-dojo.regexp.us.state=function(_39){
-_39=(typeof _39=="object")?_39:{};
-if(typeof _39.allowTerritories!="boolean"){
-_39.allowTerritories=true;
-}
-if(typeof _39.allowMilitary!="boolean"){
-_39.allowMilitary=true;
-}
-var _3a="AL|AK|AZ|AR|CA|CO|CT|DE|DC|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|"+"NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY";
-var _3b="AS|FM|GU|MH|MP|PW|PR|VI";
-var _3c="AA|AE|AP";
-if(_39.allowTerritories){
-_3a+="|"+_3b;
-}
-if(_39.allowMilitary){
-_3a+="|"+_3c;
-}
-return "("+_3a+")";
-};
-dojo.regexp.time=function(_3d){
-dojo.deprecated("dojo.regexp.time","Use dojo.date.parse instead","0.5");
-_3d=(typeof _3d=="object")?_3d:{};
-if(typeof _3d.format=="undefined"){
-_3d.format="h:mm:ss t";
-}
-if(typeof _3d.amSymbol!="string"){
-_3d.amSymbol="AM";
-}
-if(typeof _3d.pmSymbol!="string"){
-_3d.pmSymbol="PM";
-}
-var _3e=function(_3f){
-_3f=_3f.replace(/([.$?*!=:|{}\(\)\[\]\\\/^])/g,"\\$1");
-var _40=_3d.amSymbol.replace(/([.$?*!=:|{}\(\)\[\]\\\/^])/g,"\\$1");
-var _41=_3d.pmSymbol.replace(/([.$?*!=:|{}\(\)\[\]\\\/^])/g,"\\$1");
-_3f=_3f.replace("hh","(0[1-9]|1[0-2])");
-_3f=_3f.replace("h","([1-9]|1[0-2])");
-_3f=_3f.replace("HH","([01][0-9]|2[0-3])");
-_3f=_3f.replace("H","([0-9]|1[0-9]|2[0-3])");
-_3f=_3f.replace("mm","([0-5][0-9])");
-_3f=_3f.replace("m","([1-5][0-9]|[0-9])");
-_3f=_3f.replace("ss","([0-5][0-9])");
-_3f=_3f.replace("s","([1-5][0-9]|[0-9])");
-_3f=_3f.replace("t","\\s?("+_40+"|"+_41+")\\s?");
-return _3f;
-};
-return dojo.regexp.buildGroupRE(_3d.format,_3e);
-};
-dojo.regexp.numberFormat=function(_42){
-_42=(typeof _42=="object")?_42:{};
-if(typeof _42.format=="undefined"){
-_42.format="###-###-####";
-}
-var _43=function(_44){
-_44=_44.replace(/([.$*!=:|{}\(\)\[\]\\\/^])/g,"\\$1");
-_44=_44.replace(/\?/g,"\\d?");
-_44=_44.replace(/#/g,"\\d");
-return _44;
-};
-return dojo.regexp.buildGroupRE(_42.format,_43);
-};
-dojo.regexp.buildGroupRE=function(a,re){
-if(!(a instanceof Array)){
-return re(a);
-}
-var b=[];
-for(var i=0;i<a.length;i++){
-b.push(re(a[i]));
-}
-return "("+b.join("|")+")";
-};
-dojo.provide("dojo.i18n.number");
-dojo.require("dojo.i18n.common");
-dojo.require("dojo.lang.common");
-dojo.i18n.number.format=function(_49,_4a,_4b){
-_4a=(typeof _4a=="object")?_4a:{};
-var _4c=dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE,_4b);
-if(typeof _4a.separator=="undefined"){
-_4a.separator=_4c[1];
-}
-if(typeof _4a.decimal=="undefined"){
-_4a.decimal=_4c[2];
-}
-if(typeof _4a.groupSize=="undefined"){
-_4a.groupSize=_4c[3];
-}
-if(typeof _4a.groupSize2=="undefined"){
-_4a.groupSize2=_4c[4];
-}
-if(typeof _4a.round=="undefined"){
-_4a.round=true;
-}
-if(typeof _4a.signed=="undefined"){
-_4a.signed=true;
-}
-var _4d=(_4a.signed&&(_49<0))?"-":"";
-_49=Math.abs(_49);
-var _4e=String((((_4a.places>0)||!_4a.round)?Math.floor:Math.round)(_49));
-function splitSubstrings(str,_50){
-for(var _51=[];str.length>=_50;str=str.substr(0,str.length-_50)){
-_51.push(str.substr(-_50));
-}
-if(str.length>0){
-_51.push(str);
-}
-return _51.reverse();
-}
-if(_4a.groupSize2&&(_4e.length>_4a.groupSize)){
-var _52=splitSubstrings(_4e.substr(0,_4e.length-_4a.groupSize),_4a.groupSize2);
-_52.push(_4e.substr(-_4a.groupSize));
-_4d=_4d+_52.join(_4a.separator);
-}else{
-if(_4a.groupSize){
-_4d=_4d+splitSubstrings(_4e,_4a.groupSize).join(_4a.separator);
-}else{
-_4d=_4d+_4e;
-}
-}
-if(_4a.places>0){
-var _53=_49-Math.floor(_49);
-_53=(_4a.round?Math.round:Math.floor)(_53*Math.pow(10,_4a.places));
-_4d=_4d+_4a.decimal+_53;
-}
-return _4d;
-};
-dojo.i18n.number.parse=function(_54,_55,_56){
-_56=(typeof _56=="object")?_56:{};
-var _57=dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE,_55);
-if(typeof _56.separator=="undefined"){
-_56.separator=_57[1];
-}
-if(typeof _56.decimal=="undefined"){
-_56.decimal=_57[2];
-}
-if(typeof _56.groupSize=="undefined"){
-_56.groupSize=_57[3];
-}
-if(typeof _56.groupSize2=="undefined"){
-_56.groupSize2=_57[4];
-}
-if(typeof _56.validate=="undefined"){
-_56.validate=true;
-}
-if(_56.validate&&!dojo.i18n.number.isReal(_54,_55,_56)){
-return Number.NaN;
-}
-var _58=_54.split(_56.decimal);
-if(_58.length>2){
-return Number.NaN;
-}
-var _59;
-if(_56.separator!=""){
-_59=Number(_58[0].replace(new RegExp("\\"+_56.separator,"g"),""));
-}else{
-_59=Number(_58[0]);
-}
-var _5a=(_58.length==1)?0:Number(_58[1])/Math.pow(10,String(_58[1]).length);
-return _59+_5a;
-};
-dojo.i18n.number.isInteger=function(_5b,_5c,_5d){
-_5d=(typeof _5d=="object")?_5d:{};
-var _5e=dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE,_5c);
-if(typeof _5d.separator=="undefined"){
-_5d.separator=_5e[1];
-}else{
-if(dojo.lang.isArray(_5d.separator)&&_5d.separator.length===0){
-_5d.separator=[_5e[1],""];
-}
-}
-if(typeof _5d.groupSize=="undefined"){
-_5d.groupSize=_5e[3];
-}
-if(typeof _5d.groupSize2=="undefined"){
-_5d.groupSize2=_5e[4];
-}
-var re=new RegExp("^"+dojo.regexp.integer(_5d)+"$");
-return re.test(_5b);
-};
-dojo.i18n.number.isReal=function(_60,_61,_62){
-_62=(typeof _62=="object")?_62:{};
-var _63=dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE,_61);
-if(typeof _62.separator=="undefined"){
-_62.separator=_63[1];
-}else{
-if(dojo.lang.isArray(_62.separator)&&_62.separator.length===0){
-_62.separator=[_63[1],""];
-}
-}
-if(typeof _62.decimal=="undefined"){
-_62.decimal=_63[2];
-}
-if(typeof _62.groupSize=="undefined"){
-_62.groupSize=_63[3];
-}
-if(typeof _62.groupSize2=="undefined"){
-_62.groupSize2=_63[4];
-}
-var re=new RegExp("^"+dojo.regexp.realNumber(_62)+"$");
-return re.test(_60);
-};
-(function(){
-dojo.i18n.number.FORMAT_TABLE={"ar-ae":["","",",",1],"ar-bh":["","",",",1],"ar-dz":["","",",",1],"ar-eg":["","",",",1],"ar-jo":["","",",",1],"ar-kw":["","",",",1],"ar-lb":["","",",",1],"ar-ma":["","",",",1],"ar-om":["","",",",1],"ar-qa":["","",",",1],"ar-sa":["","",",",1],"ar-sy":["","",",",1],"ar-tn":["","",",",1],"ar-ye":["","",",",1],"cs-cz":[".",".",",",3],"da-dk":[".",".",",",3],"de-at":[".",".",",",3],"de-de":[".",".",",",3],"de-lu":[".",".",",",3],"de-ch":["'","'",".",3],"el-gr":[".",".",",",3],"en-au":[",",",",".",3],"en-ca":[",",",",".",3],"en-gb":[",",",",".",3],"en-hk":[",",",",".",3],"en-ie":[",",",",".",3],"en-in":[",",",",".",3,2],"en-nz":[",",",",".",3],"en-us":[",",",",".",3],"en-za":[",",",",".",3],"es-ar":[".",".",",",3],"es-bo":[".",".",",",3],"es-cl":[".",".",",",3],"es-co":[".",".",",",3],"es-cr":[".",".",",",3],"es-do":[".",".",",",3],"es-ec":[".",".",",",3],"es-es":[".",".",",",3],"es-gt":[",",",",".",3],"es-hn":[",",",",".",3],"es-mx":[",",",",".",3],"es-ni":[",",",",".",3],"es-pa":[",",",",".",3],"es-pe":[",",",",".",3],"es-pr":[",",",",".",3],"es-py":[".",".",",",3],"es-sv":[",",",",".",3],"es-uy":[".",".",",",3],"es-ve":[".",".",",",3],"fi-fi":[" "," ",",",3],"fr-be":[".",".",",",3],"fr-ca":[" "," ",",",3],"fr-ch":[" "," ",".",3],"fr-fr":[" "," ",",",3],"fr-lu":[".",".",",",3],"he-il":[",",",",".",3],"hu-hu":[" "," ",",",3],"it-ch":[" "," ",".",3],"it-it":[".",".",",",3],"ja-jp":[",",",",".",3],"ko-kr":[",",",",".",3],"no-no":[".",".",",",3],"nl-be":[" "," ",",",3],"nl-nl":[".",".",",",3],"pl-pl":[".",".",",",3],"pt-br":[".",".",",",3],"pt-pt":[".",".","$",3],"ru-ru":[" "," ",",",3],"sv-se":["."," ",",",3],"tr-tr":[".",".",",",3],"zh-cn":[",",",",".",3],"zh-hk":[",",",",".",3],"zh-tw":[",",",",".",3],"*":[",",",",".",3]};
-})();
-dojo.i18n.number._mapToLocalizedFormatData=function(_65,_66){
-_66=dojo.hostenv.normalizeLocale(_66);
-var _67=_65[_66];
-if(typeof _67=="undefined"){
-_67=_65["*"];
-}
-return _67;
-};
-dojo.provide("dojo.validate.common");
-dojo.validate.isText=function(_68,_69){
-_69=(typeof _69=="object")?_69:{};
-if(/^\s*$/.test(_68)){
-return false;
-}
-if(typeof _69.length=="number"&&_69.length!=_68.length){
-return false;
-}
-if(typeof _69.minlength=="number"&&_69.minlength>_68.length){
-return false;
-}
-if(typeof _69.maxlength=="number"&&_69.maxlength<_68.length){
-return false;
-}
-return true;
-};
-dojo.validate.isInteger=function(_6a,_6b){
-var re=new RegExp("^"+dojo.regexp.integer(_6b)+"$");
-return re.test(_6a);
-};
-dojo.validate.isRealNumber=function(_6d,_6e){
-var re=new RegExp("^"+dojo.regexp.realNumber(_6e)+"$");
-return re.test(_6d);
-};
-dojo.validate.isCurrency=function(_70,_71){
-var re=new RegExp("^"+dojo.regexp.currency(_71)+"$");
-return re.test(_70);
-};
-dojo.validate._isInRangeCache={};
-dojo.validate.isInRange=function(_73,_74){
-_73=_73.replace(dojo.lang.has(_74,"separator")?_74.separator:",","","g").replace(dojo.lang.has(_74,"symbol")?_74.symbol:"$","");
-if(isNaN(_73)){
-return false;
-}
-_74=(typeof _74=="object")?_74:{};
-var max=(typeof _74.max=="number")?_74.max:Infinity;
-var min=(typeof _74.min=="number")?_74.min:-Infinity;
-var dec=(typeof _74.decimal=="string")?_74.decimal:".";
-var _78=dojo.validate._isInRangeCache;
-var _79=_73+"max"+max+"min"+min+"dec"+dec;
-if(typeof _78[_79]!="undefined"){
-return _78[_79];
-}
-var _7a="[^"+dec+"\\deE+-]";
-_73=_73.replace(RegExp(_7a,"g"),"");
-_73=_73.replace(/^([+-]?)(\D*)/,"$1");
-_73=_73.replace(/(\D*)$/,"");
-_7a="(\\d)["+dec+"](\\d)";
-_73=_73.replace(RegExp(_7a,"g"),"$1.$2");
-_73=Number(_73);
-if(_73<min||_73>max){
-_78[_79]=false;
-return false;
-}
-_78[_79]=true;
-return true;
-};
-dojo.validate.isNumberFormat=function(_7b,_7c){
-var re=new RegExp("^"+dojo.regexp.numberFormat(_7c)+"$","i");
-return re.test(_7b);
-};
-dojo.validate.isValidLuhn=function(_7e){
-var sum,_80,_81;
-if(typeof _7e!="string"){
-_7e=String(_7e);
-}
-_7e=_7e.replace(/[- ]/g,"");
-_80=_7e.length%2;
-sum=0;
-for(var i=0;i<_7e.length;i++){
-_81=parseInt(_7e.charAt(i));
-if(i%2==_80){
-_81*=2;
-}
-if(_81>9){
-_81-=9;
-}
-sum+=_81;
-}
-return !(sum%10);
-};
-dojo.provide("dojo.validate.check");
-dojo.require("dojo.lang.common");
-dojo.validate.check=function(_83,_84){
-var _85=[];
-var _86=[];
-var _87={isSuccessful:function(){
-return (!this.hasInvalid()&&!this.hasMissing());
-},hasMissing:function(){
-return (_85.length>0);
-},getMissing:function(){
-return _85;
-},isMissing:function(_88){
-for(var i=0;i<_85.length;i++){
-if(_88==_85[i]){
-return true;
-}
-}
-return false;
-},hasInvalid:function(){
-return (_86.length>0);
-},getInvalid:function(){
-return _86;
-},isInvalid:function(_8a){
-for(var i=0;i<_86.length;i++){
-if(_8a==_86[i]){
-return true;
-}
-}
-return false;
-}};
-if(_84.trim instanceof Array){
-for(var i=0;i<_84.trim.length;i++){
-var _8d=_83[_84.trim[i]];
-if(dj_undef("type",_8d)||_8d.type!="text"&&_8d.type!="textarea"&&_8d.type!="password"){
-continue;
-}
-_8d.value=_8d.value.replace(/(^\s*|\s*$)/g,"");
-}
-}
-if(_84.uppercase instanceof Array){
-for(var i=0;i<_84.uppercase.length;i++){
-var _8d=_83[_84.uppercase[i]];
-if(dj_undef("type",_8d)||_8d.type!="text"&&_8d.type!="textarea"&&_8d.type!="password"){
-continue;
-}
-_8d.value=_8d.value.toUpperCase();
-}
-}
-if(_84.lowercase instanceof Array){
-for(var i=0;i<_84.lowercase.length;i++){
-var _8d=_83[_84.lowercase[i]];
-if(dj_undef("type",_8d)||_8d.type!="text"&&_8d.type!="textarea"&&_8d.type!="password"){
-continue;
-}
-_8d.value=_8d.value.toLowerCase();
-}
-}
-if(_84.ucfirst instanceof Array){
-for(var i=0;i<_84.ucfirst.length;i++){
-var _8d=_83[_84.ucfirst[i]];
-if(dj_undef("type",_8d)||_8d.type!="text"&&_8d.type!="textarea"&&_8d.type!="password"){
-continue;
-}
-_8d.value=_8d.value.replace(/\b\w+\b/g,function(_8e){
-return _8e.substring(0,1).toUpperCase()+_8e.substring(1).toLowerCase();
-});
-}
-}
-if(_84.digit instanceof Array){
-for(var i=0;i<_84.digit.length;i++){
-var _8d=_83[_84.digit[i]];
-if(dj_undef("type",_8d)||_8d.type!="text"&&_8d.type!="textarea"&&_8d.type!="password"){
-continue;
-}
-_8d.value=_8d.value.replace(/\D/g,"");
-}
-}
-if(_84.required instanceof Array){
-for(var i=0;i<_84.required.length;i++){
-if(!dojo.lang.isString(_84.required[i])){continue;}
-var _8d=_83[_84.required[i]];
-if(!dj_undef("type",_8d)&&(_8d.type=="text"||_8d.type=="textarea"||_8d.type=="password"||_8d.type=="file")&&/^\s*$/.test(_8d.value)){
-_85[_85.length]=_8d.name;
-}else{
-if(!dj_undef("type",_8d)&&(_8d.type=="select-one"||_8d.type=="select-multiple")&&(_8d.selectedIndex==-1||/^\s*$/.test(_8d.options[_8d.selectedIndex].value))){
-_85[_85.length]=_8d.name;
-}else{
-if(dojo.lang.isArrayLike(_8d)){
-var _8f=false;
-for(var j=0;j<_8d.length;j++){
-if(_8d[j].checked){
-_8f=true;
-}
-}
-if(!_8f){
-_85[_85.length]=_8d[0].name;
-}}}}}}
-if(_84.required instanceof Array){
-for(var i=0;i<_84.required.length;i++){
-if(!dojo.lang.isObject(_84.required[i])){continue;}
-var _8d,_91;
-for(var _92 in _84.required[i]){
-_8d=_83[_92];
-_91=_84.required[i][_92];
-}
-if(dojo.lang.isArrayLike(_8d)){
-var _8f=0;
-for(var j=0;j<_8d.length;j++){
-if(_8d[j].checked){
-_8f++;
-}
-}
-if(_8f<_91){
-_85[_85.length]=_8d[0].name;
-}
-}else{
-if(!dj_undef("type",_8d)&&_8d.type=="select-multiple"){
-var _93=0;
-for(var j=0;j<_8d.options.length;j++){
-if(_8d.options[j].selected&&!/^\s*$/.test(_8d.options[j].value)){
-_93++;
-}
-}
-if(_93<_91){
-_85[_85.length]=_8d.name;
-}}}}}
-if(dojo.lang.isObject(_84.dependencies)||dojo.lang.isObject(_84.dependancies)){
-if(_84["dependancies"]){
-dojo.deprecated("dojo.validate.check","profile 'dependancies' is deprecated, please use "+"'dependencies'","0.5");
-_84.dependencies=_84.dependancies;
-}
-for(_92 in _84.dependencies){
-var _8d=_83[_92];
-if(dj_undef("type",_8d)){
-continue;
-}
-if(_8d.type!="text"&&_8d.type!="textarea"&&_8d.type!="password"){
-continue;
-}
-if(/\S+/.test(_8d.value)){
-continue;
-}
-if(_87.isMissing(_8d.name)){
-continue;
-}
-var _94=_83[_84.dependencies[_92]];
-if(_94.type!="text"&&_94.type!="textarea"&&_94.type!="password"){
-continue;
-}
-if(/^\s*$/.test(_94.value)){
-continue;
-}
-_85[_85.length]=_8d.name;
-}
-}
-if(dojo.lang.isObject(_84.constraints)){
-for(_92 in _84.constraints){
-var _8d=_83[_92];
-if(!_8d){
-continue;
-}
-if(!dj_undef("tagName",_8d)&&(_8d.tagName.toLowerCase().indexOf("input")>=0||_8d.tagName.toLowerCase().indexOf("textarea")>=0)&&/^\s*$/.test(_8d.value)){
-continue;
-}
-var _95=true;
-if(dojo.lang.isFunction(_84.constraints[_92])){
-_95=_84.constraints[_92](_8d.value);
-}else{
-if(dojo.lang.isArray(_84.constraints[_92])){
-if(dojo.lang.isArray(_84.constraints[_92][0])){
-for(var i=0;i<_84.constraints[_92].length;i++){
-_95=dojo.validate.evaluateConstraint(_84,_84.constraints[_92][i],_92,_8d);
-if(!_95){
-break;
-}
-}
-}else{
-_95=dojo.validate.evaluateConstraint(_84,_84.constraints[_92],_92,_8d);
-}
-}
-}
-if(!_95){
-_86[_86.length]=_8d.name;
-}
-}
-}
-if(dojo.lang.isObject(_84.confirm)){
-for(_92 in _84.confirm){
-var _8d=_83[_92];
-var _94=_83[_84.confirm[_92]];
-if(dj_undef("type",_8d)||dj_undef("type",_94)||(_8d.type!="text"&&_8d.type!="textarea"&&_8d.type!="password")||(_94.type!=_8d.type)||(_94.value==_8d.value)||(_87.isInvalid(_8d.name))||(/^\s*$/.test(_94.value))){
-continue;
-}
-_86[_86.length]=_8d.name;
-}
-}
-return _87;
-};
-dojo.validate.evaluateConstraint=function(_96,_97,_98,_99){
-var _9a=_97[0];
-var _9b=_97.slice(1);
-_9b.unshift(_99.value);
-if(typeof _9a!="undefined"){
-return _9a.apply(null,_9b);
-}
-return false;
-};
-dojo.provide("dojo.date.common");
-dojo.date.setDayOfYear=function(_9c,_9d){
-_9c.setMonth(0);
-_9c.setDate(_9d);
-return _9c;
-};
-dojo.date.getDayOfYear=function(_9e){
-var _9f=_9e.getFullYear();
-var _a0=new Date(_9f-1,11,31);
-return Math.floor((_9e.getTime()-_a0.getTime())/86400000);
-};
-dojo.date.setWeekOfYear=function(_a1,_a2,_a3){
-if(arguments.length==1){
-_a3=0;
-}
-dojo.unimplemented("dojo.date.setWeekOfYear");
-};
-dojo.date.getWeekOfYear=function(_a4,_a5){
-if(arguments.length==1){
-_a5=0;
-}
-var _a6=new Date(_a4.getFullYear(),0,1);
-var day=_a6.getDay();
-_a6.setDate(_a6.getDate()-day+_a5-(day>_a5?7:0));
-return Math.floor((_a4.getTime()-_a6.getTime())/604800000);
-};
-dojo.date.setIsoWeekOfYear=function(_a8,_a9,_aa){
-if(arguments.length==1){
-_aa=1;
-}
-dojo.unimplemented("dojo.date.setIsoWeekOfYear");
-};
-dojo.date.getIsoWeekOfYear=function(_ab,_ac){
-if(arguments.length==1){
-_ac=1;
-}
-dojo.unimplemented("dojo.date.getIsoWeekOfYear");
-};
-dojo.date.shortTimezones=["IDLW","BET","HST","MART","AKST","PST","MST","CST","EST","AST","NFT","BST","FST","AT","GMT","CET","EET","MSK","IRT","GST","AFT","AGTT","IST","NPT","ALMT","MMT","JT","AWST","JST","ACST","AEST","LHST","VUT","NFT","NZT","CHAST","PHOT","LINT"];
-dojo.date.timezoneOffsets=[-720,-660,-600,-570,-540,-480,-420,-360,-300,-240,-210,-180,-120,-60,0,60,120,180,210,240,270,300,330,345,360,390,420,480,540,570,600,630,660,690,720,765,780,840];
-dojo.date.getDaysInMonth=function(_ad){
-var _ae=_ad.getMonth();
-var _af=[31,28,31,30,31,30,31,31,30,31,30,31];
-if(_ae==1&&dojo.date.isLeapYear(_ad)){
-return 29;
-}else{
-return _af[_ae];
-}
-};
-dojo.date.isLeapYear=function(_b0){
-var _b1=_b0.getFullYear();
-return (_b1%400==0)?true:(_b1%100==0)?false:(_b1%4==0)?true:false;
-};
-dojo.date.getTimezoneName=function(_b2){
-var str=_b2.toString();
-var tz="";
-var _b5;
-var pos=str.indexOf("(");
-if(pos>-1){
-pos++;
-tz=str.substring(pos,str.indexOf(")"));
-}else{
-var pat=/([A-Z\/]+) \d{4}$/;
-if((_b5=str.match(pat))){
-tz=_b5[1];
-}else{
-str=_b2.toLocaleString();
-pat=/ ([A-Z\/]+)$/;
-if((_b5=str.match(pat))){
-tz=_b5[1];
-}
-}
-}
-return tz=="AM"||tz=="PM"?"":tz;
-};
-dojo.date.getOrdinal=function(_b8){
-var _b9=_b8.getDate();
-if(_b9%100!=11&&_b9%10==1){
-return "st";
-}else{
-if(_b9%100!=12&&_b9%10==2){
-return "nd";
-}else{
-if(_b9%100!=13&&_b9%10==3){
-return "rd";
-}else{
-return "th";
-}
-}
-}
-};
-dojo.date.compareTypes={DATE:1,TIME:2};
-dojo.date.compare=function(_ba,_bb,_bc){
-var dA=_ba;
-var dB=_bb||new Date();
-var now=new Date();
-with(dojo.date.compareTypes){
-var opt=_bc||(DATE|TIME);
-var d1=new Date((opt&DATE)?dA.getFullYear():now.getFullYear(),(opt&DATE)?dA.getMonth():now.getMonth(),(opt&DATE)?dA.getDate():now.getDate(),(opt&TIME)?dA.getHours():0,(opt&TIME)?dA.getMinutes():0,(opt&TIME)?dA.getSeconds():0);
-var d2=new Date((opt&DATE)?dB.getFullYear():now.getFullYear(),(opt&DATE)?dB.getMonth():now.getMonth(),(opt&DATE)?dB.getDate():now.getDate(),(opt&TIME)?dB.getHours():0,(opt&TIME)?dB.getMinutes():0,(opt&TIME)?dB.getSeconds():0);
-}
-if(d1.valueOf()>d2.valueOf()){
-return 1;
-}
-if(d1.valueOf()<d2.valueOf()){
-return -1;
-}
-return 0;
-};
-dojo.date.dateParts={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6,QUARTER:7,WEEK:8,WEEKDAY:9};
-dojo.date.add=function(dt,_c4,_c5){
-if(typeof dt=="number"){
-dt=new Date(dt);
-}
-function fixOvershoot(){
-if(sum.getDate()<dt.getDate()){
-sum.setDate(0);
-}
-}
-var sum=new Date(dt);
-with(dojo.date.dateParts){
-switch(_c4){
-case YEAR:
-sum.setFullYear(dt.getFullYear()+_c5);
-fixOvershoot();
-break;
-case QUARTER:
-_c5*=3;
-case MONTH:
-sum.setMonth(dt.getMonth()+_c5);
-fixOvershoot();
-break;
-case WEEK:
-_c5*=7;
-case DAY:
-sum.setDate(dt.getDate()+_c5);
-break;
-case WEEKDAY:
-var dat=dt.getDate();
-var _c8=0;
-var _c9=0;
-var _ca=0;
-var _cb=0;
-var adj=0;
-var mod=_c5%5;
-if(mod==0){
-_c9=(_c5>0)?5:-5;
-_c8=(_c5>0)?((_c5-5)/5):((_c5+5)/5);
-}else{
-_c9=mod;
-_c8=parseInt(_c5/5);
-}
-_ca=dt.getDay();
-if(_ca==6&&_c5>0){
-adj=1;
-}else{
-if(_ca==0&&_c5<0){
-adj=-1;
-}
-}
-_cb=(_ca+_c9);
-if(_cb==0||_cb==6){
-adj=(_c5>0)?2:-2;
-}
-sum.setDate(dat+(7*_c8)+_c9+adj);
-break;
-case HOUR:
-sum.setHours(sum.getHours()+_c5);
-break;
-case MINUTE:
-sum.setMinutes(sum.getMinutes()+_c5);
-break;
-case SECOND:
-sum.setSeconds(sum.getSeconds()+_c5);
-break;
-case MILLISECOND:
-sum.setMilliseconds(sum.getMilliseconds()+_c5);
-break;
-default:
-break;
-}
-}
-return sum;
-};
-dojo.date.diff=function(dtA,dtB,_d0){
-if(typeof dtA=="number"){
-dtA=new Date(dtA);
-}
-if(typeof dtB=="number"){
-dtB=new Date(dtB);
-}
-var _d1=dtB.getFullYear()-dtA.getFullYear();
-var _d2=(dtB.getMonth()-dtA.getMonth())+(_d1*12);
-var _d3=dtB.getTime()-dtA.getTime();
-var _d4=_d3/1000;
-var _d5=_d4/60;
-var _d6=_d5/60;
-var _d7=_d6/24;
-var _d8=_d7/7;
-var _d9=0;
-with(dojo.date.dateParts){
-switch(_d0){
-case YEAR:
-_d9=_d1;
-break;
-case QUARTER:
-var mA=dtA.getMonth();
-var mB=dtB.getMonth();
-var qA=Math.floor(mA/3)+1;
-var qB=Math.floor(mB/3)+1;
-qB+=(_d1*4);
-_d9=qB-qA;
-break;
-case MONTH:
-_d9=_d2;
-break;
-case WEEK:
-_d9=parseInt(_d8);
-break;
-case DAY:
-_d9=_d7;
-break;
-case WEEKDAY:
-var _de=Math.round(_d7);
-var _df=parseInt(_de/7);
-var mod=_de%7;
-if(mod==0){
-_de=_df*5;
-}else{
-var adj=0;
-var _e2=dtA.getDay();
-var _e3=dtB.getDay();
-_df=parseInt(_de/7);
-mod=_de%7;
-var _e4=new Date(dtA);
-_e4.setDate(_e4.getDate()+(_df*7));
-var _e5=_e4.getDay();
-if(_d7>0){
-switch(true){
-case _e2==6:
-adj=-1;
-break;
-case _e2==0:
-adj=0;
-break;
-case _e3==6:
-adj=-1;
-break;
-case _e3==0:
-adj=-2;
-break;
-case (_e5+mod)>5:
-adj=-2;
-break;
-default:
-break;
-}
-}else{
-if(_d7<0){
-switch(true){
-case _e2==6:
-adj=0;
-break;
-case _e2==0:
-adj=1;
-break;
-case _e3==6:
-adj=2;
-break;
-case _e3==0:
-adj=1;
-break;
-case (_e5+mod)<0:
-adj=2;
-break;
-default:
-break;
-}
-}
-}
-_de+=adj;
-_de-=(_df*2);
-}
-_d9=_de;
-break;
-case HOUR:
-_d9=_d6;
-break;
-case MINUTE:
-_d9=_d5;
-break;
-case SECOND:
-_d9=_d4;
-break;
-case MILLISECOND:
-_d9=_d3;
-break;
-default:
-break;
-}
-}
-return Math.round(_d9);
-};
-dojo.provide("dojo.date.supplemental");
-dojo.date.getFirstDayOfWeek=function(_e6){
-var _e7={mv:5,ae:6,af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,lb:6,ly:6,ma:6,om:6,qa:6,sa:6,sd:6,so:6,tn:6,ye:6,as:0,au:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,ie:0,il:0,is:0,jm:0,jp:0,kg:0,kr:0,la:0,mh:0,mo:0,mp:0,mt:0,nz:0,ph:0,pk:0,sg:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,vi:0,za:0,zw:0,et:0,mw:0,ng:0,tj:0,gb:0,sy:4};
-_e6=dojo.hostenv.normalizeLocale(_e6);
-var _e8=_e6.split("-")[1];
-var dow=_e7[_e8];
-return (typeof dow=="undefined")?1:dow;
-};
-dojo.date.getWeekend=function(_ea){
-var _eb={eg:5,il:5,sy:5,"in":0,ae:4,bh:4,dz:4,iq:4,jo:4,kw:4,lb:4,ly:4,ma:4,om:4,qa:4,sa:4,sd:4,tn:4,ye:4};
-var _ec={ae:5,bh:5,dz:5,iq:5,jo:5,kw:5,lb:5,ly:5,ma:5,om:5,qa:5,sa:5,sd:5,tn:5,ye:5,af:5,ir:5,eg:6,il:6,sy:6};
-_ea=dojo.hostenv.normalizeLocale(_ea);
-var _ed=_ea.split("-")[1];
-var _ee=_eb[_ed];
-var end=_ec[_ed];
-if(typeof _ee=="undefined"){
-_ee=6;
-}
-if(typeof end=="undefined"){
-end=0;
-}
-return {start:_ee,end:end};
-};
-dojo.date.isWeekend=function(_f0,_f1){
-var _f2=dojo.date.getWeekend(_f1);
-var day=(_f0||new Date()).getDay();
-if(_f2.end<_f2.start){
-_f2.end+=7;
-if(day<_f2.start){
-day+=7;
-}
-}
-return day>=_f2.start&&day<=_f2.end;
-};
-dojo.provide("dojo.date.format");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.string.common");
-dojo.require("dojo.i18n.common");
-dojo.requireLocalization("dojo.i18n.calendar","gregorian",null,"zh-cn,zh-hk,de,ko,zh-tw,zh,ja,fi,pt-br,fr,es,ROOT,hu,en,it,sv,nl,pt");
-dojo.requireLocalization("dojo.i18n.calendar","gregorianExtras",null,"zh,ja,ROOT");
-(function(){
-dojo.date.format=function(_f4,_f5){
-if(typeof _f5=="string"){
-dojo.deprecated("dojo.date.format","To format dates with POSIX-style strings, please use dojo.date.strftime instead","0.5");
-return dojo.date.strftime(_f4,_f5);
-}
-function formatPattern(_f6,_f7){
-return _f7.replace(/([a-z])\1*/ig,function(_f8){
-var s;
-var c=_f8.charAt(0);
-var l=_f8.length;
-var pad;
-var _fd=["abbr","wide","narrow"];
-switch(c){
-case "G":
-if(l>3){
-dojo.unimplemented("Era format not implemented");
-}
-s=_fe.eras[_f6.getFullYear()<0?1:0];
-break;
-case "y":
-s=_f6.getFullYear();
-switch(l){
-case 1:
-break;
-case 2:
-s=String(s);
-s=s.substr(s.length-2);
-break;
-default:
-pad=true;
-}
-break;
-case "Q":
-case "q":
-s=Math.ceil((_f6.getMonth()+1)/3);
-switch(l){
-case 1:
-case 2:
-pad=true;
-break;
-case 3:
-case 4:
-dojo.unimplemented("Quarter format not implemented");
-}
-break;
-case "M":
-case "L":
-var m=_f6.getMonth();
-var _100;
-switch(l){
-case 1:
-case 2:
-s=m+1;
-pad=true;
-break;
-case 3:
-case 4:
-case 5:
-_100=_fd[l-3];
-break;
-}
-if(_100){
-var type=(c=="L")?"standalone":"format";
-var prop=["months",type,_100].join("-");
-s=_fe[prop][m];
-}
-break;
-case "w":
-var _103=0;
-s=dojo.date.getWeekOfYear(_f6,_103);
-pad=true;
-break;
-case "d":
-s=_f6.getDate();
-pad=true;
-break;
-case "D":
-s=dojo.date.getDayOfYear(_f6);
-pad=true;
-break;
-case "E":
-case "e":
-case "c":
-var d=_f6.getDay();
-var _100;
-switch(l){
-case 1:
-case 2:
-if(c=="e"){
-var _105=dojo.date.getFirstDayOfWeek(_f5.locale);
-d=(d-_105+7)%7;
-}
-if(c!="c"){
-s=d+1;
-pad=true;
-break;
-}
-case 3:
-case 4:
-case 5:
-_100=_fd[l-3];
-break;
-}
-if(_100){
-var type=(c=="c")?"standalone":"format";
-var prop=["days",type,_100].join("-");
-s=_fe[prop][d];
-}
-break;
-case "a":
-var _106=(_f6.getHours()<12)?"am":"pm";
-s=_fe[_106];
-break;
-case "h":
-case "H":
-case "K":
-case "k":
-var h=_f6.getHours();
-switch(c){
-case "h":
-s=(h%12)||12;
-break;
-case "H":
-s=h;
-break;
-case "K":
-s=(h%12);
-break;
-case "k":
-s=h||24;
-break;
-}
-pad=true;
-break;
-case "m":
-s=_f6.getMinutes();
-pad=true;
-break;
-case "s":
-s=_f6.getSeconds();
-pad=true;
-break;
-case "S":
-s=Math.round(_f6.getMilliseconds()*Math.pow(10,l-3));
-break;
-case "v":
-case "z":
-s=dojo.date.getTimezoneName(_f6);
-if(s){
-break;
-}
-l=4;
-case "Z":
-var _108=_f6.getTimezoneOffset();
-var tz=[(_108<=0?"+":"-"),dojo.string.pad(Math.floor(Math.abs(_108)/60),2),dojo.string.pad(Math.abs(_108)%60,2)];
-if(l==4){
-tz.splice(0,0,"GMT");
-tz.splice(3,0,":");
-}
-s=tz.join("");
-break;
-case "Y":
-case "u":
-case "W":
-case "F":
-case "g":
-case "A":
-s="?";
-break;
-default:
-dojo.raise("dojo.date.format: invalid pattern char: "+_f7);
-}
-if(pad){
-s=dojo.string.pad(s,l);
-}
-return s;
-});
-}
-_f5=_f5||{};
-var _10a=dojo.hostenv.normalizeLocale(_f5.locale);
-var _10b=_f5.formatLength||"short";
-var _fe=dojo.date._getGregorianBundle(_10a);
-var str=[];
-var _10d=dojo.lang.curry(this,formatPattern,_f4);
-if(_f5.selector=="yearOnly"){
-var year=_f4.getFullYear();
-if(_10a.match(/^zh|^ja/)){
-year+="\u5e74";
-}
-return year;
-}
-if(_f5.selector!="timeOnly"){
-var _10f=_f5.datePattern||_fe["dateFormat-"+_10b];
-if(_10f){
-str.push(_processPattern(_10f,_10d));
-}
-}
-if(_f5.selector!="dateOnly"){
-var _110=_f5.timePattern||_fe["timeFormat-"+_10b];
-if(_110){
-str.push(_processPattern(_110,_10d));
-}
-}
-var _111=str.join(" ");
-return _111;
-};
-dojo.date.parse=function(_112,_113){
-_113=_113||{};
-var _114=dojo.hostenv.normalizeLocale(_113.locale);
-var info=dojo.date._getGregorianBundle(_114);
-var _116=_113.formatLength||"full";
-if(!_113.selector){
-_113.selector="dateOnly";
-}
-var _117=_113.datePattern||info["dateFormat-"+_116];
-var _118=_113.timePattern||info["timeFormat-"+_116];
-var _119;
-if(_113.selector=="dateOnly"){
-_119=_117;
-}else{
-if(_113.selector=="timeOnly"){
-_119=_118;
-}else{
-if(_113.selector=="dateTime"){
-_119=_117+" "+_118;
-}else{
-var msg="dojo.date.parse: Unknown selector param passed: '"+_113.selector+"'.";
-msg+=" Defaulting to date pattern.";
-dojo.debug(msg);
-_119=_117;
-}
-}
-}
-var _11b=[];
-var _11c=_processPattern(_119,dojo.lang.curry(this,_buildDateTimeRE,_11b,info,_113));
-var _11d=new RegExp("^"+_11c+"$");
-var _11e=_11d.exec(_112);
-if(!_11e){
-return null;
-}
-var _11f=["abbr","wide","narrow"];
-var _120=new Date(1972,0);
-var _121={};
-for(var i=1;i<_11e.length;i++){
-var grp=_11b[i-1];
-var l=grp.length;
-var v=_11e[i];
-switch(grp.charAt(0)){
-case "y":
-if(l!=2){
-_120.setFullYear(v);
-_121.year=v;
-}else{
-if(v<100){
-v=Number(v);
-var year=""+new Date().getFullYear();
-var _127=year.substring(0,2)*100;
-var _128=Number(year.substring(2,4));
-var _129=Math.min(_128+20,99);
-var num=(v<_129)?_127+v:_127-100+v;
-_120.setFullYear(num);
-_121.year=num;
-}else{
-if(_113.strict){
-return null;
-}
-_120.setFullYear(v);
-_121.year=v;
-}
-}
-break;
-case "M":
-if(l>2){
-if(!_113.strict){
-v=v.replace(/\./g,"");
-v=v.toLowerCase();
-}
-var _12b=info["months-format-"+_11f[l-3]].concat();
-for(var j=0;j<_12b.length;j++){
-if(!_113.strict){
-_12b[j]=_12b[j].toLowerCase();
-}
-if(v==_12b[j]){
-_120.setMonth(j);
-_121.month=j;
-break;
-}
-}
-if(j==_12b.length){
-dojo.debug("dojo.date.parse: Could not parse month name: '"+v+"'.");
-return null;
-}
-}else{
-_120.setMonth(v-1);
-_121.month=v-1;
-}
-break;
-case "E":
-case "e":
-if(!_113.strict){
-v=v.toLowerCase();
-}
-var days=info["days-format-"+_11f[l-3]].concat();
-for(var j=0;j<days.length;j++){
-if(!_113.strict){
-days[j]=days[j].toLowerCase();
-}
-if(v==days[j]){
-break;
-}
-}
-if(j==days.length){
-dojo.debug("dojo.date.parse: Could not parse weekday name: '"+v+"'.");
-return null;
-}
-break;
-case "d":
-_120.setDate(v);
-_121.date=v;
-break;
-case "a":
-var am=_113.am||info.am;
-var pm=_113.pm||info.pm;
-if(!_113.strict){
-v=v.replace(/\./g,"").toLowerCase();
-am=am.replace(/\./g,"").toLowerCase();
-pm=pm.replace(/\./g,"").toLowerCase();
-}
-if(_113.strict&&v!=am&&v!=pm){
-dojo.debug("dojo.date.parse: Could not parse am/pm part.");
-return null;
-}
-var _130=_120.getHours();
-if(v==pm&&_130<12){
-_120.setHours(_130+12);
-}else{
-if(v==am&&_130==12){
-_120.setHours(0);
-}
-}
-break;
-case "K":
-if(v==24){
-v=0;
-}
-case "h":
-case "H":
-case "k":
-if(v>23){
-dojo.debug("dojo.date.parse: Illegal hours value");
-return null;
-}
-_120.setHours(v);
-break;
-case "m":
-_120.setMinutes(v);
-break;
-case "s":
-_120.setSeconds(v);
-break;
-case "S":
-_120.setMilliseconds(v);
-break;
-default:
-dojo.unimplemented("dojo.date.parse: unsupported pattern char="+grp.charAt(0));
-}
-}
-if(_121.year&&_120.getFullYear()!=_121.year){
-dojo.debug("Parsed year: '"+_120.getFullYear()+"' did not match input year: '"+_121.year+"'.");
-return null;
-}
-if(_121.month&&_120.getMonth()!=_121.month){
-dojo.debug("Parsed month: '"+_120.getMonth()+"' did not match input month: '"+_121.month+"'.");
-return null;
-}
-if(_121.date&&_120.getDate()!=_121.date){
-dojo.debug("Parsed day of month: '"+_120.getDate()+"' did not match input day of month: '"+_121.date+"'.");
-return null;
-}
-return _120;
-};
-function _processPattern(_131,_132,_133,_134){
-var _135=function(x){
-return x;
-};
-_132=_132||_135;
-_133=_133||_135;
-_134=_134||_135;
-var _137=_131.match(/(''|[^'])+/g);
-var _138=false;
-for(var i=0;i<_137.length;i++){
-if(!_137[i]){
-_137[i]="";
-}else{
-_137[i]=(_138?_133:_132)(_137[i]);
-_138=!_138;
-}
-}
-return _134(_137.join(""));
-}
-function _buildDateTimeRE(_13a,info,_13c,_13d){
-return _13d.replace(/([a-z])\1*/ig,function(_13e){
-var s;
-var c=_13e.charAt(0);
-var l=_13e.length;
-switch(c){
-case "y":
-s="\\d"+((l==2)?"{2,4}":"+");
-break;
-case "M":
-s=(l>2)?"\\S+":"\\d{1,2}";
-break;
-case "d":
-s="\\d{1,2}";
-break;
-case "E":
-s="\\S+";
-break;
-case "h":
-case "H":
-case "K":
-case "k":
-s="\\d{1,2}";
-break;
-case "m":
-case "s":
-s="[0-5]\\d";
-break;
-case "S":
-s="\\d{1,3}";
-break;
-case "a":
-var am=_13c.am||info.am||"AM";
-var pm=_13c.pm||info.pm||"PM";
-if(_13c.strict){
-s=am+"|"+pm;
-}else{
-s=am;
-s+=(am!=am.toLowerCase())?"|"+am.toLowerCase():"";
-s+="|";
-s+=(pm!=pm.toLowerCase())?pm+"|"+pm.toLowerCase():pm;
-}
-break;
-default:
-dojo.unimplemented("parse of date format, pattern="+_13d);
-}
-if(_13a){
-_13a.push(_13e);
-}
-return "\\s*("+s+")\\s*";
-});
-}
-})();
-dojo.date.strftime=function(_144,_145,_146){
-var _147=null;
-function _(s,n){
-return dojo.string.pad(s,n||2,_147||"0");
-}
-var info=dojo.date._getGregorianBundle(_146);
-function $(_14b){
-switch(_14b){
-case "a":
-return dojo.date.getDayShortName(_144,_146);
-case "A":
-return dojo.date.getDayName(_144,_146);
-case "b":
-case "h":
-return dojo.date.getMonthShortName(_144,_146);
-case "B":
-return dojo.date.getMonthName(_144,_146);
-case "c":
-return dojo.date.format(_144,{locale:_146});
-case "C":
-return _(Math.floor(_144.getFullYear()/100));
-case "d":
-return _(_144.getDate());
-case "D":
-return $("m")+"/"+$("d")+"/"+$("y");
-case "e":
-if(_147==null){
-_147=" ";
-}
-return _(_144.getDate());
-case "f":
-if(_147==null){
-_147=" ";
-}
-return _(_144.getMonth()+1);
-case "g":
-break;
-case "G":
-dojo.unimplemented("unimplemented modifier 'G'");
-break;
-case "F":
-return $("Y")+"-"+$("m")+"-"+$("d");
-case "H":
-return _(_144.getHours());
-case "I":
-return _(_144.getHours()%12||12);
-case "j":
-return _(dojo.date.getDayOfYear(_144),3);
-case "k":
-if(_147==null){
-_147=" ";
-}
-return _(_144.getHours());
-case "l":
-if(_147==null){
-_147=" ";
-}
-return _(_144.getHours()%12||12);
-case "m":
-return _(_144.getMonth()+1);
-case "M":
-return _(_144.getMinutes());
-case "n":
-return "\n";
-case "p":
-return info[_144.getHours()<12?"am":"pm"];
-case "r":
-return $("I")+":"+$("M")+":"+$("S")+" "+$("p");
-case "R":
-return $("H")+":"+$("M");
-case "S":
-return _(_144.getSeconds());
-case "t":
-return "\t";
-case "T":
-return $("H")+":"+$("M")+":"+$("S");
-case "u":
-return String(_144.getDay()||7);
-case "U":
-return _(dojo.date.getWeekOfYear(_144));
-case "V":
-return _(dojo.date.getIsoWeekOfYear(_144));
-case "W":
-return _(dojo.date.getWeekOfYear(_144,1));
-case "w":
-return String(_144.getDay());
-case "x":
-return dojo.date.format(_144,{selector:"dateOnly",locale:_146});
-case "X":
-return dojo.date.format(_144,{selector:"timeOnly",locale:_146});
-case "y":
-return _(_144.getFullYear()%100);
-case "Y":
-return String(_144.getFullYear());
-case "z":
-var _14c=_144.getTimezoneOffset();
-return (_14c>0?"-":"+")+_(Math.floor(Math.abs(_14c)/60))+":"+_(Math.abs(_14c)%60);
-case "Z":
-return dojo.date.getTimezoneName(_144);
-case "%":
-return "%";
-}
-}
-var _14d="";
-var i=0;
-var _14f=0;
-var _150=null;
-while((_14f=_145.indexOf("%",i))!=-1){
-_14d+=_145.substring(i,_14f++);
-switch(_145.charAt(_14f++)){
-case "_":
-_147=" ";
-break;
-case "-":
-_147="";
-break;
-case "0":
-_147="0";
-break;
-case "^":
-_150="upper";
-break;
-case "*":
-_150="lower";
-break;
-case "#":
-_150="swap";
-break;
-default:
-_147=null;
-_14f--;
-break;
-}
-var _151=$(_145.charAt(_14f++));
-switch(_150){
-case "upper":
-_151=_151.toUpperCase();
-break;
-case "lower":
-_151=_151.toLowerCase();
-break;
-case "swap":
-var _152=_151.toLowerCase();
-var _153="";
-var j=0;
-var ch="";
-while(j<_151.length){
-ch=_151.charAt(j);
-_153+=(ch==_152.charAt(j))?ch.toUpperCase():ch.toLowerCase();
-j++;
-}
-_151=_153;
-break;
-default:
-break;
-}
-_150=null;
-_14d+=_151;
-i=_14f;
-}
-_14d+=_145.substring(i);
-return _14d;
-};
-(function(){
-var _156=[];
-dojo.date.addCustomFormats=function(_157,_158){
-_156.push({pkg:_157,name:_158});
-};
-dojo.date._getGregorianBundle=function(_159){
-var _15a={};
-dojo.lang.forEach(_156,function(desc){
-var _15c=dojo.i18n.getLocalization(desc.pkg,desc.name,_159);
-_15a=dojo.lang.mixin(_15a,_15c);
-},this);
-return _15a;
-};
-})();
-dojo.date.addCustomFormats("dojo.i18n.calendar","gregorian");
-dojo.date.addCustomFormats("dojo.i18n.calendar","gregorianExtras");
-dojo.date.getNames=function(item,type,use,_160){
-var _161;
-var _162=dojo.date._getGregorianBundle(_160);
-var _163=[item,use,type];
-if(use=="standAlone"){
-_161=_162[_163.join("-")];
-}
-_163[1]="format";
-return (_161||_162[_163.join("-")]).concat();
-};
-dojo.date.getDayName=function(_164,_165){
-return dojo.date.getNames("days","wide","format",_165)[_164.getDay()];
-};
-dojo.date.getDayShortName=function(_166,_167){
-return dojo.date.getNames("days","abbr","format",_167)[_166.getDay()];
-};
-dojo.date.getMonthName=function(_168,_169){
-return dojo.date.getNames("months","wide","format",_169)[_168.getMonth()];
-};
-dojo.date.getMonthShortName=function(_16a,_16b){
-return dojo.date.getNames("months","abbr","format",_16b)[_16a.getMonth()];
-};
-dojo.date.toRelativeString=function(_16c){
-var now=new Date();
-var diff=(now-_16c)/1000;
-var end=" ago";
-var _170=false;
-if(diff<0){
-_170=true;
-end=" from now";
-diff=-diff;
-}
-if(diff<60){
-diff=Math.round(diff);
-return diff+" second"+(diff==1?"":"s")+end;
-}
-if(diff<60*60){
-diff=Math.round(diff/60);
-return diff+" minute"+(diff==1?"":"s")+end;
-}
-if(diff<60*60*24){
-diff=Math.round(diff/3600);
-return diff+" hour"+(diff==1?"":"s")+end;
-}
-if(diff<60*60*24*7){
-diff=Math.round(diff/(3600*24));
-if(diff==1){
-return _170?"Tomorrow":"Yesterday";
-}else{
-return diff+" days"+end;
-}
-}
-return dojo.date.format(_16c);
-};
-dojo.date.toSql=function(_171,_172){
-return dojo.date.strftime(_171,"%F"+!_172?" %T":"");
-};
-dojo.date.fromSql=function(_173){
-var _174=_173.split(/[\- :]/g);
-while(_174.length<6){
-_174.push(0);
-}
-return new Date(_174[0],(parseInt(_174[1],10)-1),_174[2],_174[3],_174[4],_174[5]);
-};
-dojo.provide("dojo.date.serialize");
-dojo.require("dojo.string.common");
-dojo.date.setIso8601=function(_175,_176){
-var _177=(_176.indexOf("T")==-1)?_176.split(" "):_176.split("T");
-_175=dojo.date.setIso8601Date(_175,_177[0]);
-if(_177.length==2){
-_175=dojo.date.setIso8601Time(_175,_177[1]);
-}
-return _175;
-};
-dojo.date.fromIso8601=function(_178){
-return dojo.date.setIso8601(new Date(0,0),_178);
-};
-dojo.date.setIso8601Date=function(_179,_17a){
-var _17b="^([0-9]{4})((-?([0-9]{2})(-?([0-9]{2}))?)|"+"(-?([0-9]{3}))|(-?W([0-9]{2})(-?([1-7]))?))?$";
-var d=_17a.match(new RegExp(_17b));
-if(!d){
-dojo.debug("invalid date string: "+_17a);
-return null;
-}
-var year=d[1];
-var _17e=d[4];
-var date=d[6];
-var _180=d[8];
-var week=d[10];
-var _182=d[12]?d[12]:1;
-_179.setFullYear(year);
-if(_180){
-_179.setMonth(0);
-_179.setDate(Number(_180));
-}else{
-if(week){
-_179.setMonth(0);
-_179.setDate(1);
-var gd=_179.getDay();
-var day=gd?gd:7;
-var _185=Number(_182)+(7*Number(week));
-if(day<=4){
-_179.setDate(_185+1-day);
-}else{
-_179.setDate(_185+8-day);
-}
-}else{
-if(_17e){
-_179.setDate(1);
-_179.setMonth(_17e-1);
-}
-if(date){
-_179.setDate(date);
-}
-}
-}
-return _179;
-};
-dojo.date.fromIso8601Date=function(_186){
-return dojo.date.setIso8601Date(new Date(0,0),_186);
-};
-dojo.date.setIso8601Time=function(_187,_188){
-var _189="Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$";
-var d=_188.match(new RegExp(_189));
-var _18b=0;
-if(d){
-if(d[0]!="Z"){
-_18b=(Number(d[3])*60)+Number(d[5]);
-_18b*=((d[2]=="-")?1:-1);
-}
-_18b-=_187.getTimezoneOffset();
-_188=_188.substr(0,_188.length-d[0].length);
-}
-var _18c="^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(.([0-9]+))?)?)?$";
-d=_188.match(new RegExp(_18c));
-if(!d){
-dojo.debug("invalid time string: "+_188);
-return null;
-}
-var _18d=d[1];
-var mins=Number((d[3])?d[3]:0);
-var secs=(d[5])?d[5]:0;
-var ms=d[7]?(Number("0."+d[7])*1000):0;
-_187.setHours(_18d);
-_187.setMinutes(mins);
-_187.setSeconds(secs);
-_187.setMilliseconds(ms);
-if(_18b!==0){
-_187.setTime(_187.getTime()+_18b*60000);
-}
-return _187;
-};
-dojo.date.fromIso8601Time=function(_191){
-return dojo.date.setIso8601Time(new Date(0,0),_191);
-};
-dojo.date.toRfc3339=function(_192,_193){
-if(!_192){
-_192=new Date();
-}
-var _=dojo.string.pad;
-var _195=[];
-if(_193!="timeOnly"){
-var date=[_(_192.getFullYear(),4),_(_192.getMonth()+1,2),_(_192.getDate(),2)].join("-");
-_195.push(date);
-}
-if(_193!="dateOnly"){
-var time=[_(_192.getHours(),2),_(_192.getMinutes(),2),_(_192.getSeconds(),2)].join(":");
-var _198=_192.getTimezoneOffset();
-time+=(_198>0?"-":"+")+_(Math.floor(Math.abs(_198)/60),2)+":"+_(Math.abs(_198)%60,2);
-_195.push(time);
-}
-return _195.join("T");
-};
-dojo.date.fromRfc3339=function(_199){
-if(_199.indexOf("Tany")!=-1){
-_199=_199.replace("Tany","");
-}
-var _19a=new Date();
-return dojo.date.setIso8601(_19a,_199);
-};
-dojo.provide("dojo.validate.datetime");
-dojo.validate.isValidTime=function(_19b,_19c){
-dojo.deprecated("dojo.validate.datetime","use dojo.date.parse instead","0.5");
-var re=new RegExp("^"+dojo.regexp.time(_19c)+"$","i");
-return re.test(_19b);
-};
-dojo.validate.is12HourTime=function(_19e){
-dojo.deprecated("dojo.validate.datetime","use dojo.date.parse instead","0.5");
-return dojo.validate.isValidTime(_19e,{format:["h:mm:ss t","h:mm t"]});
-};
-dojo.validate.is24HourTime=function(_19f){
-dojo.deprecated("dojo.validate.datetime","use dojo.date.parse instead","0.5");
-return dojo.validate.isValidTime(_19f,{format:["HH:mm:ss","HH:mm"]});
-};
-dojo.validate.isValidDate=function(_1a0,_1a1){
-dojo.deprecated("dojo.validate.datetime","use dojo.date.parse instead","0.5");
-if(typeof _1a1=="object"&&typeof _1a1.format=="string"){
-_1a1=_1a1.format;
-}
-if(typeof _1a1!="string"){
-_1a1="MM/DD/YYYY";
-}
-var _1a2=_1a1.replace(/([$^.*+?=!:|\/\\\(\)\[\]\{\}])/g,"\\$1");
-_1a2=_1a2.replace("YYYY","([0-9]{4})");
-_1a2=_1a2.replace("MM","(0[1-9]|10|11|12)");
-_1a2=_1a2.replace("M","([1-9]|10|11|12)");
-_1a2=_1a2.replace("DDD","(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])");
-_1a2=_1a2.replace("DD","(0[1-9]|[12][0-9]|30|31)");
-_1a2=_1a2.replace("D","([1-9]|[12][0-9]|30|31)");
-_1a2=_1a2.replace("ww","(0[1-9]|[1-4][0-9]|5[0-3])");
-_1a2=_1a2.replace("d","([1-7])");
-_1a2="^"+_1a2+"$";
-var re=new RegExp(_1a2);
-if(!re.test(_1a0)){
-return false;
-}
-var year=0,_1a5=1,date=1,_1a7=1,week=1,day=1;
-var _1aa=_1a1.match(/(YYYY|MM|M|DDD|DD|D|ww|d)/g);
-var _1ab=re.exec(_1a0);
-for(var i=0;i<_1aa.length;i++){
-switch(_1aa[i]){
-case "YYYY":
-year=Number(_1ab[i+1]);
-break;
-case "M":
-case "MM":
-_1a5=Number(_1ab[i+1]);
-break;
-case "D":
-case "DD":
-date=Number(_1ab[i+1]);
-break;
-case "DDD":
-_1a7=Number(_1ab[i+1]);
-break;
-case "ww":
-week=Number(_1ab[i+1]);
-break;
-case "d":
-day=Number(_1ab[i+1]);
-break;
-}
-}
-var _1ad=(year%4==0&&(year%100!=0||year%400==0));
-if(date==31&&(_1a5==4||_1a5==6||_1a5==9||_1a5==11)){
-return false;
-}
-if(date>=30&&_1a5==2){
-return false;
-}
-if(date==29&&_1a5==2&&!_1ad){
-return false;
-}
-if(_1a7==366&&!_1ad){
-return false;
-}
-return true;
-};
-dojo.provide("dojo.validate.web");
-dojo.validate.isIpAddress=function(_1ae,_1af){
-var re=new RegExp("^"+dojo.regexp.ipAddress(_1af)+"$","i");
-return re.test(_1ae);
-};
-dojo.validate.isUrl=function(_1b1,_1b2){
-var re=new RegExp("^"+dojo.regexp.url(_1b2)+"$","i");
-return re.test(_1b1);
-};
-dojo.validate.isEmailAddress=function(_1b4,_1b5){
-var re=new RegExp("^"+dojo.regexp.emailAddress(_1b5)+"$","i");
-return re.test(_1b4);
-};
-dojo.validate.isEmailAddressList=function(_1b7,_1b8){
-var re=new RegExp("^"+dojo.regexp.emailAddressList(_1b8)+"$","i");
-return re.test(_1b7);
-};
-dojo.validate.getEmailAddressList=function(_1ba,_1bb){
-if(!_1bb){
-_1bb={};
-}
-if(!_1bb.listSeparator){
-_1bb.listSeparator="\\s;,";
-}
-if(dojo.validate.isEmailAddressList(_1ba,_1bb)){
-return _1ba.split(new RegExp("\\s*["+_1bb.listSeparator+"]\\s*"));
-}
-return [];
-};
-dojo.provide("dojo.validate.creditCard");
-dojo.require("dojo.lang.common");
-dojo.validate.isValidCreditCard=function(_1bc,_1bd){
-if(_1bc&&_1bd&&((_1bd.toLowerCase()=="er"||dojo.validate.isValidLuhn(_1bc))&&(dojo.validate.isValidCreditCardNumber(_1bc,_1bd.toLowerCase())))){
-return true;
-}
-return false;
-};
-dojo.validate.isValidCreditCardNumber=function(_1be,_1bf){
-if(typeof _1be!="string"){
-_1be=String(_1be);
-}
-_1be=_1be.replace(/[- ]/g,"");
-var _1c0=[];
-var _1c1={"mc":"5[1-5][0-9]{14}","ec":"5[1-5][0-9]{14}","vi":"4([0-9]{12}|[0-9]{15})","ax":"3[47][0-9]{13}","dc":"3(0[0-5][0-9]{11}|[68][0-9]{12})","bl":"3(0[0-5][0-9]{11}|[68][0-9]{12})","di":"6011[0-9]{12}","jcb":"(3[0-9]{15}|(2131|1800)[0-9]{11})","er":"2(014|149)[0-9]{11}"};
-if(_1bf&&dojo.lang.has(_1c1,_1bf.toLowerCase())){
-return Boolean(_1be.match(_1c1[_1bf.toLowerCase()]));
-}else{
-for(var p in _1c1){
-if(_1be.match("^"+_1c1[p]+"$")!=null){
-_1c0.push(p);
-}
-}
-return (_1c0.length)?_1c0.join("|"):false;
-}
-};
-dojo.validate.isValidCvv=function(_1c3,_1c4){
-if(typeof _1c3!="string"){
-_1c3=String(_1c3);
-}
-var _1c5;
-switch(_1c4.toLowerCase()){
-case "mc":
-case "ec":
-case "vi":
-case "di":
-_1c5="###";
-break;
-case "ax":
-_1c5="####";
-break;
-default:
-return false;
-}
-var _1c6={format:_1c5};
-if((_1c3.length==_1c5.length)&&(dojo.validate.isNumberFormat(_1c3,_1c6))){
-return true;
-}
-return false;
-};
-dojo.provide("dojo.validate.us");
-dojo.validate.us.isCurrency=function(_1c7,_1c8){
-return dojo.validate.isCurrency(_1c7,_1c8);
-};
-dojo.validate.us.isState=function(_1c9,_1ca){
-var re=new RegExp("^"+dojo.regexp.us.state(_1ca)+"$","i");
-return re.test(_1c9);
-};
-dojo.validate.us.isPhoneNumber=function(_1cc){
-var _1cd={format:["###-###-####","(###) ###-####","(###) ### ####","###.###.####","###/###-####","### ### ####","###-###-#### x#???","(###) ###-#### x#???","(###) ### #### x#???","###.###.#### x#???","###/###-#### x#???","### ### #### x#???","##########"]};
-return dojo.validate.isNumberFormat(_1cc,_1cd);
-};
-dojo.validate.us.isSocialSecurityNumber=function(_1ce){
-var _1cf={format:["###-##-####","### ## ####","#########"]};
-return dojo.validate.isNumberFormat(_1ce,_1cf);
-};
-dojo.validate.us.isZipCode=function(_1d0){
-var _1d1={format:["#####-####","##### ####","#########","#####"]};
-return dojo.validate.isNumberFormat(_1d0,_1d1);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo2.js.uncompressed.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo2.js.uncompressed.js
deleted file mode 100644
index ecb8e40..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo2.js.uncompressed.js
+++ /dev/null
@@ -1,3452 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("layer.validation");
-dojo.provide("dojo.experimental");
-
-dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
-	// summary: Marks code as experimental.
-	// description: 
-	//    This can be used to mark a function, file, or module as experimental.
-	//    Experimental code is not ready to be used, and the APIs are subject
-	//    to change without notice.  Experimental code may be completed deleted
-	//    without going through the normal deprecation process.
-	// moduleName: The name of a module, or the name of a module file or a specific function
-	// extra: some additional message for the user
-	
-	// examples:
-	//    dojo.experimental("dojo.data.Result");
-	//    dojo.experimental("dojo.weather.toKelvin()", "PENDING approval from NOAA");
-	var message = "EXPERIMENTAL: " + moduleName;
-	message += " -- Not yet ready for use.  APIs subject to change without notice.";
-	if(extra){ message += " " + extra; }
-	dojo.debug(message);
-}
-
-dojo.provide("dojo.regexp");
-dojo.evalObjPath("dojo.regexp.us", true);	// this file also defines stuff in the dojo.regexp.us module (TODO: move to separate file?)
-
-// *** Regular Expression Generators ***
-
-dojo.regexp.tld = function(/*Object?*/flags){
-	// summary: Builds a RE that matches a top-level domain
-	//
-	// flags:
-	//    flags.allowCC  Include 2 letter country code domains.  Default is true.
-	//    flags.allowGeneric  Include the generic domains.  Default is true.
-	//    flags.allowInfra  Include infrastructure domains.  Default is true.
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.allowCC != "boolean"){ flags.allowCC = true; }
-	if(typeof flags.allowInfra != "boolean"){ flags.allowInfra = true; }
-	if(typeof flags.allowGeneric != "boolean"){ flags.allowGeneric = true; }
-
-	// Infrastructure top-level domain - only one at present
-	var infraRE = "arpa";
-
-	// Generic top-level domains RE.
-	var genericRE = 
-		"aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|xxx|jobs|mobi|post";
-	
-	// Country Code top-level domains RE
-	var ccRE = 
-		"ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|" +
-		"bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|" +
-		"ec|ee|eg|er|eu|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|"
-		+
-		"gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|" +
-		"la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|" +
-		"my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|" +
-		"re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sk|sl|sm|sn|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|" +
-		"tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw";
-
-	// Build top-level domain RE
-	var a = [];
-	if(flags.allowInfra){ a.push(infraRE); }
-	if(flags.allowGeneric){ a.push(genericRE); }
-	if(flags.allowCC){ a.push(ccRE); }
-
-	var tldRE = "";
-	if (a.length > 0) {
-		tldRE = "(" + a.join("|") + ")";
-	}
-
-	return tldRE; // String
-}
-
-dojo.regexp.ipAddress = function(/*Object?*/flags){
-	// summary: Builds a RE that matches an IP Address
-	//
-	// description:
-	//  Supports 5 formats for IPv4: dotted decimal, dotted hex, dotted octal, decimal and hexadecimal.
-	//  Supports 2 formats for Ipv6.
-	//
-	// flags  An object.  All flags are boolean with default = true.
-	//    flags.allowDottedDecimal  Example, 207.142.131.235.  No zero padding.
-	//    flags.allowDottedHex  Example, 0x18.0x11.0x9b.0x28.  Case insensitive.  Zero padding allowed.
-	//    flags.allowDottedOctal  Example, 0030.0021.0233.0050.  Zero padding allowed.
-	//    flags.allowDecimal  Example, 3482223595.  A decimal number between 0-4294967295.
-	//    flags.allowHex  Example, 0xCF8E83EB.  Hexadecimal number between 0x0-0xFFFFFFFF.
-	//      Case insensitive.  Zero padding allowed.
-	//    flags.allowIPv6   IPv6 address written as eight groups of four hexadecimal digits.
-	//    flags.allowHybrid   IPv6 address written as six groups of four hexadecimal digits
-	//      followed by the usual 4 dotted decimal digit notation of IPv4. x:x:x:x:x:x:d.d.d.d
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.allowDottedDecimal != "boolean"){ flags.allowDottedDecimal = true; }
-	if(typeof flags.allowDottedHex != "boolean"){ flags.allowDottedHex = true; }
-	if(typeof flags.allowDottedOctal != "boolean"){ flags.allowDottedOctal = true; }
-	if(typeof flags.allowDecimal != "boolean"){ flags.allowDecimal = true; }
-	if(typeof flags.allowHex != "boolean"){ flags.allowHex = true; }
-	if(typeof flags.allowIPv6 != "boolean"){ flags.allowIPv6 = true; }
-	if(typeof flags.allowHybrid != "boolean"){ flags.allowHybrid = true; }
-
-	// decimal-dotted IP address RE.
-	var dottedDecimalRE = 
-		// Each number is between 0-255.  Zero padding is not allowed.
-		"((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
-
-	// dotted hex IP address RE.  Each number is between 0x0-0xff.  Zero padding is allowed, e.g. 0x00.
-	var dottedHexRE = "(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]";
-
-	// dotted octal IP address RE.  Each number is between 0000-0377.  
-	// Zero padding is allowed, but each number must have at least 4 characters.
-	var dottedOctalRE = "(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]";
-
-	// decimal IP address RE.  A decimal number between 0-4294967295.  
-	var decimalRE =  "(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|" +
-		"4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])";
-
-	// hexadecimal IP address RE. 
-	// A hexadecimal number between 0x0-0xFFFFFFFF. Case insensitive.  Zero padding is allowed.
-	var hexRE = "0[xX]0*[\\da-fA-F]{1,8}";
-
-	// IPv6 address RE. 
-	// The format is written as eight groups of four hexadecimal digits, x:x:x:x:x:x:x:x,
-	// where x is between 0000-ffff. Zero padding is optional. Case insensitive. 
-	var ipv6RE = "([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}";
-
-	// IPv6/IPv4 Hybrid address RE. 
-	// The format is written as six groups of four hexadecimal digits, 
-	// followed by the 4 dotted decimal IPv4 format. x:x:x:x:x:x:d.d.d.d
-	var hybridRE = "([\\da-fA-F]{1,4}\\:){6}" + 
-		"((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
-
-	// Build IP Address RE
-	var a = [];
-	if(flags.allowDottedDecimal){ a.push(dottedDecimalRE); }
-	if(flags.allowDottedHex){ a.push(dottedHexRE); }
-	if(flags.allowDottedOctal){ a.push(dottedOctalRE); }
-	if(flags.allowDecimal){ a.push(decimalRE); }
-	if(flags.allowHex){ a.push(hexRE); }
-	if(flags.allowIPv6){ a.push(ipv6RE); }
-	if(flags.allowHybrid){ a.push(hybridRE); }
-
-	var ipAddressRE = "";
-	if(a.length > 0){
-		ipAddressRE = "(" + a.join("|") + ")";
-	}
-
-	return ipAddressRE; // String
-}
-
-dojo.regexp.host = function(/*Object?*/flags){
-	// summary: Builds a RE that matches a host
-	// description: A host is a domain name or an IP address, possibly followed by a port number.
-	// flags: An object.
-	//    flags.allowIP  Allow an IP address for hostname.  Default is true.
-	//    flags.allowLocal  Allow the host to be "localhost".  Default is false.
-	//    flags.allowPort  Allow a port number to be present.  Default is true.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.allowIP != "boolean"){ flags.allowIP = true; }
-	if(typeof flags.allowLocal != "boolean"){ flags.allowLocal = false; }
-	if(typeof flags.allowPort != "boolean"){ flags.allowPort = true; }
-
-	// Domain names can not end with a dash.
-	var domainNameRE = "([0-9a-zA-Z]([-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?\\.)+" + dojo.regexp.tld(flags);
-
-	// port number RE
-	var portRE = ( flags.allowPort ) ? "(\\:" + dojo.regexp.integer({signed: false}) + ")?" : "";
-
-	// build host RE
-	var hostNameRE = domainNameRE;
-	if(flags.allowIP){ hostNameRE += "|" +  dojo.regexp.ipAddress(flags); }
-	if(flags.allowLocal){ hostNameRE += "|localhost"; }
-
-	return "(" + hostNameRE + ")" + portRE; // String
-}
-
-dojo.regexp.url = function(/*Object?*/flags){
-	// summary: Builds a regular expression that matches a URL
-	//
-	// flags: An object
-	//    flags.scheme  Can be true, false, or [true, false]. 
-	//      This means: required, not allowed, or match either one.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.scheme == "undefined"){ flags.scheme = [true, false]; }
-
-	// Scheme RE
-	var protocolRE = dojo.regexp.buildGroupRE(flags.scheme,
-		function(q){ if(q){ return "(https?|ftps?)\\://"; } return ""; }
-	);
-
-	// Path and query and anchor RE
-	var pathRE = "(/([^?#\\s/]+/)*)?([^?#\\s/]+(\\?[^?#\\s/]*)?(#[A-Za-z][\\w.:-]*)?)?";
-
-	return protocolRE + dojo.regexp.host(flags) + pathRE;
-}
-
-
-dojo.regexp.emailAddress = function(/*Object?*/flags){
-	// summary: Builds a regular expression that matches an email address
-	//
-	//flags: An object
-	//    flags.allowCruft  Allow address like <mailto:foo@yahoo.com>.  Default is false.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if (typeof flags.allowCruft != "boolean") { flags.allowCruft = false; }
-	flags.allowPort = false; // invalid in email addresses
-
-	// user name RE - apostrophes are valid if there's not 2 in a row
-	var usernameRE = "([\\da-z]+[-._+&'])*[\\da-z]+";
-
-	// build emailAddress RE
-	var emailAddressRE = usernameRE + "@" + dojo.regexp.host(flags);
-
-	// Allow email addresses with cruft
-	if ( flags.allowCruft ) {
-		emailAddressRE = "<?(mailto\\:)?" + emailAddressRE + ">?";
-	}
-
-	return emailAddressRE; // String
-}
-
-dojo.regexp.emailAddressList = function(/*Object?*/flags){
-	// summary: Builds a regular expression that matches a list of email addresses.
-	//
-	// flags: An object.
-	//    flags.listSeparator  The character used to separate email addresses.  Default is ";", ",", "\n" or " ".
-	//    flags in regexp.emailAddress can be applied.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.listSeparator != "string"){ flags.listSeparator = "\\s;,"; }
-
-	// build a RE for an Email Address List
-	var emailAddressRE = dojo.regexp.emailAddress(flags);
-	var emailAddressListRE = "(" + emailAddressRE + "\\s*[" + flags.listSeparator + "]\\s*)*" + 
-		emailAddressRE + "\\s*[" + flags.listSeparator + "]?\\s*";
-
-	return emailAddressListRE; // String
-}
-
-dojo.regexp.integer = function(/*Object?*/flags){
-	// summary: Builds a regular expression that matches an integer
-	//
-	// flags: An object
-	//    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-	//      Default is [true, false], (i.e. will match if it is signed or unsigned).
-	//    flags.separator  The character used as the thousands separator.  Default is no separator.
-	//      For more than one symbol use an array, e.g. [",", ""], makes ',' optional.
-	//	flags.groupSize group size between separators
-	//	flags.groupSize2 second grouping (for India)
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.signed == "undefined"){ flags.signed = [true, false]; }
-	if(typeof flags.separator == "undefined"){
-		flags.separator = "";
-	} else if(typeof flags.groupSize == "undefined"){
-		flags.groupSize = 3;
-	}
-	// build sign RE
-	var signRE = dojo.regexp.buildGroupRE(flags.signed,
-		function(q) { return q ? "[-+]" : ""; }
-	);
-
-	// number RE
-	var numberRE = dojo.regexp.buildGroupRE(flags.separator,
-		function(sep){ 
-			if(sep == ""){ 
-				return "(0|[1-9]\\d*)";
-			}
-			var grp = flags.groupSize, grp2 = flags.groupSize2;
-			if(typeof grp2 != "undefined"){
-				var grp2RE = "(0|[1-9]\\d{0," + (grp2-1) + "}([" + sep + "]\\d{" + grp2 + "})*[" + sep + "]\\d{" + grp + "})";
-				return ((grp-grp2) > 0) ? "(" + grp2RE + "|(0|[1-9]\\d{0," + (grp-1) + "}))" : grp2RE;
-			}
-			return  "(0|[1-9]\\d{0," + (grp-1) + "}([" + sep + "]\\d{" + grp + "})*)";
-		}
-	);
-
-	// integer RE
-	return signRE + numberRE; // String
-}
-
-dojo.regexp.realNumber = function(/*Object?*/flags){
-	// summary: Builds a regular expression to match a real number in exponential notation
-	//
-	// flags:An object
-	//    flags.places  The integer number of decimal places.
-	//      If not given, the decimal part is optional and the number of places is unlimited.
-	//    flags.decimal  A string for the character used as the decimal point.  Default is ".".
-	//    flags.fractional  Whether decimal places are allowed.
-	//      Can be true, false, or [true, false].  Default is [true, false]
-	//    flags.exponent  Express in exponential notation.  Can be true, false, or [true, false].
-	//      Default is [true, false], (i.e. will match if the exponential part is present are not).
-	//    flags.eSigned  The leading plus-or-minus sign on the exponent.  Can be true, false, 
-	//      or [true, false].  Default is [true, false], (i.e. will match if it is signed or unsigned).
-	//    flags in regexp.integer can be applied.
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.places != "number"){ flags.places = Infinity; }
-	if(typeof flags.decimal != "string"){ flags.decimal = "."; }
-	if(typeof flags.fractional == "undefined"){ flags.fractional = [true, false]; }
-	if(typeof flags.exponent == "undefined"){ flags.exponent = [true, false]; }
-	if(typeof flags.eSigned == "undefined"){ flags.eSigned = [true, false]; }
-
-	// integer RE
-	var integerRE = dojo.regexp.integer(flags);
-
-	// decimal RE
-	var decimalRE = dojo.regexp.buildGroupRE(flags.fractional,
-		function(q){
-			var re = "";
-			if(q && (flags.places > 0)){
-				re = "\\" + flags.decimal;
-				if(flags.places == Infinity){ 
-					re = "(" + re + "\\d+)?"; 
-				}else{ 
-					re = re + "\\d{" + flags.places + "}"; 
-				}
-			}
-
-			return re;
-		}
-	);
-
-	// exponent RE
-	var exponentRE = dojo.regexp.buildGroupRE(flags.exponent,
-		function(q){ 
-			if(q){ return "([eE]" + dojo.regexp.integer({ signed: flags.eSigned}) + ")"; }
-			return ""; 
-		}
-	);
-
-	// real number RE
-	return integerRE + decimalRE + exponentRE; // String
-}
-
-dojo.regexp.currency = function(/*Object?*/flags){
-	// summary: Builds a regular expression to match a monetary value
-	//
-	// flags: An object
-	//    flags.symbol  A currency symbol such as Yen "�", Pound "�", or the Euro sign "�".  
-	//      Default is "$".  For more than one symbol use an array, e.g. ["$", ""], makes $ optional.
-	//    flags.placement  The symbol can come "before" the number or "after" the number.  Default is "before".
-	//    flags.signPlacement  The sign can come "before" the number or "after" the sign,
-	//      "around" to put parentheses around negative values, or "end" for the final char.  Default is "before".
-	//    flags.cents  deprecated, in favor of flags.fractional
-	//    flags in regexp.realNumber can be applied except exponent, eSigned.
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.signed == "undefined"){ flags.signed = [true, false]; }
-	if(typeof flags.symbol == "undefined"){ flags.symbol = "$"; }
-	if(typeof flags.placement != "string"){ flags.placement = "before"; }
-	if(typeof flags.signPlacement != "string"){ flags.signPlacement = "before"; }
-	if(typeof flags.separator == "undefined"){ flags.separator = ","; }
-	if(typeof flags.fractional == "undefined" && typeof flags.cents != "undefined"){
-		dojo.deprecated("dojo.regexp.currency: flags.cents", "use flags.fractional instead", "0.5");
-		flags.fractional = flags.cents;
-	}
-	if(typeof flags.decimal != "string"){ flags.decimal = "."; }
-
-	// build sign RE
-	var signRE = dojo.regexp.buildGroupRE(flags.signed,
-		function(q){ if (q){ return "[-+]"; } return ""; }
-	);
-
-	// build symbol RE
-	var symbolRE = dojo.regexp.buildGroupRE(flags.symbol,
-		function(symbol){ 
-			// escape all special characters
-			return "\\s?" + symbol.replace( /([.$?*!=:|\\\/^])/g, "\\$1") + "\\s?";
-		}
-	);
-
-	switch (flags.signPlacement){
-		case "before":
-			symbolRE = signRE + symbolRE;
-			break;
-		case "after":
-			symbolRE = symbolRE + signRE;
-			break;
-	}
-
-	// number RE
-	var flagsCopy = flags; //TODO: copy by value?
-	flagsCopy.signed = false; flagsCopy.exponent = false;
-	var numberRE = dojo.regexp.realNumber(flagsCopy);
-
-	// build currency RE
-	var currencyRE;
-	switch (flags.placement){
-		case "before":
-			currencyRE = symbolRE + numberRE;
-			break;
-		case "after":
-			currencyRE = numberRE + symbolRE;
-			break;
-	}
-
-	switch (flags.signPlacement){
-		case "around":
-			currencyRE = "(" + currencyRE + "|" + "\\(" + currencyRE + "\\)" + ")";
-			break;
-		case "begin":
-			currencyRE = signRE + currencyRE;
-			break;
-		case "end":
-			currencyRE = currencyRE + signRE;
-			break;
-	}
-	return currencyRE; // String
-}
-
-
-dojo.regexp.us.state = function(/*Object?*/flags){
-	// summary: A regular expression to match US state and territory abbreviations
-	//
-	// flags  An object.
-	//    flags.allowTerritories  Allow Guam, Puerto Rico, etc.  Default is true.
-	//    flags.allowMilitary  Allow military 'states', e.g. Armed Forces Europe (AE).  Default is true.
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.allowTerritories != "boolean"){ flags.allowTerritories = true; }
-	if(typeof flags.allowMilitary != "boolean"){ flags.allowMilitary = true; }
-
-	// state RE
-	var statesRE = 
-		"AL|AK|AZ|AR|CA|CO|CT|DE|DC|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|" + 
-		"NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY";
-
-	// territories RE
-	var territoriesRE = "AS|FM|GU|MH|MP|PW|PR|VI";
-
-	// military states RE
-	var militaryRE = "AA|AE|AP";
-
-	// Build states and territories RE
-	if(flags.allowTerritories){ statesRE += "|" + territoriesRE; }
-	if(flags.allowMilitary){ statesRE += "|" + militaryRE; }
-
-	return "(" + statesRE + ")"; // String
-}
-
-dojo.regexp.time = function(/*Object?*/flags){
-	// summary: Builds a regular expression to match any International format for time
-	// description: The RE can match one format or one of multiple formats.
-	//
-	//  Format
-	//  h        12 hour, no zero padding.
-	//  hh       12 hour, has leading zero.
-	//  H        24 hour, no zero padding.
-	//  HH       24 hour, has leading zero.
-	//  m        minutes, no zero padding.
-	//  mm       minutes, has leading zero.
-	//  s        seconds, no zero padding.
-	//  ss       seconds, has leading zero.
-	//  t        am or pm, case insensitive.
-	//  All other characters must appear literally in the expression.
-	//
-	//  Example
-	//    "h:m:s t"  ->   2:5:33 PM
-	//    "HH:mm:ss" ->  14:05:33
-	//
-	// flags: An object
-	//    flags.format  A string or an array of strings.  Default is "h:mm:ss t".
-	//    flags.amSymbol  The symbol used for AM.  Default is "AM".
-	//    flags.pmSymbol  The symbol used for PM.  Default is "PM".
-
-	dojo.deprecated("dojo.regexp.time", "Use dojo.date.parse instead", "0.5");
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.format == "undefined"){ flags.format = "h:mm:ss t"; }
-	if(typeof flags.amSymbol != "string"){ flags.amSymbol = "AM"; }
-	if(typeof flags.pmSymbol != "string"){ flags.pmSymbol = "PM"; }
-
-	// Converts a time format to a RE
-	var timeRE = function(format){
-		// escape all special characters
-		format = format.replace( /([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-		var amRE = flags.amSymbol.replace( /([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-		var pmRE = flags.pmSymbol.replace( /([.$?*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-
-		// replace tokens with Regular Expressions
-		format = format.replace("hh", "(0[1-9]|1[0-2])");
-		format = format.replace("h", "([1-9]|1[0-2])");
-		format = format.replace("HH", "([01][0-9]|2[0-3])");
-		format = format.replace("H", "([0-9]|1[0-9]|2[0-3])");
-		format = format.replace("mm", "([0-5][0-9])");
-		format = format.replace("m", "([1-5][0-9]|[0-9])");
-		format = format.replace("ss", "([0-5][0-9])");
-		format = format.replace("s", "([1-5][0-9]|[0-9])");
-		format = format.replace("t", "\\s?(" + amRE + "|" + pmRE + ")\\s?" );
-
-		return format; // String
-	};
-
-	// build RE for multiple time formats
-	return dojo.regexp.buildGroupRE(flags.format, timeRE); // String
-}
-
-dojo.regexp.numberFormat = function(/*Object?*/flags){
-	// summary: Builds a regular expression to match any sort of number based format
-	// description:
-	//  Use this method for phone numbers, social security numbers, zip-codes, etc.
-	//  The RE can match one format or one of multiple formats.
-	//
-	//  Format
-	//    #        Stands for a digit, 0-9.
-	//    ?        Stands for an optional digit, 0-9 or nothing.
-	//    All other characters must appear literally in the expression.
-	//
-	//  Example   
-	//    "(###) ###-####"       ->   (510) 542-9742
-	//    "(###) ###-#### x#???" ->   (510) 542-9742 x153
-	//    "###-##-####"          ->   506-82-1089       i.e. social security number
-	//    "#####-####"           ->   98225-1649        i.e. zip code
-	//
-	// flags:  An object
-	//    flags.format  A string or an Array of strings for multiple formats.
-
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	if(typeof flags.format == "undefined"){ flags.format = "###-###-####"; }
-
-	// Converts a number format to RE.
-	var digitRE = function(format){
-		// escape all special characters, except '?'
-		format = format.replace( /([.$*!=:|{}\(\)\[\]\\\/^])/g, "\\$1");
-
-		// Now replace '?' with Regular Expression
-		format = format.replace(/\?/g, "\\d?");
-
-		// replace # with Regular Expression
-		format = format.replace(/#/g, "\\d");
-
-		return format; // String
-	};
-
-	// build RE for multiple number formats
-	return dojo.regexp.buildGroupRE(flags.format, digitRE); //String
-}
-
-
-dojo.regexp.buildGroupRE = function(/*value or Array of values*/a, /*Function(x) returns a regular expression as a String*/re){
-	// summary: Builds a regular expression that groups subexpressions
-	// description: A utility function used by some of the RE generators.
-	//  The subexpressions are constructed by the function, re, in the second parameter.
-	//  re builds one subexpression for each elem in the array a, in the first parameter.
-	//  Returns a string for a regular expression that groups all the subexpressions.
-	//
-	// a:  A single value or an array of values.
-	// re:  A function.  Takes one parameter and converts it to a regular expression. 
-
-	// case 1: a is a single value.
-	if(!(a instanceof Array)){
-		return re(a); // String
-	}
-
-	// case 2: a is an array
-	var b = [];
-	for (var i = 0; i < a.length; i++){
-		// convert each elem to a RE
-		b.push(re(a[i]));
-	}
-
-	 // join the REs as alternatives in a RE group.
-	return "(" + b.join("|") + ")"; // String
-}
-
-dojo.provide("dojo.i18n.number");
-
-
-
-
-dojo.require("dojo.i18n.common");
-dojo.require("dojo.lang.common");
-
-/**
-* Method to Format and validate a given number
-*
-* @param Number value
-*	The number to be formatted and validated.
-* @param Object flags
-*   flags.places number of decimal places to show, default is 0 (cannot be Infinity)
-*   flags.round true to round the number, false to truncate
-* @param String locale
-*	The locale used to determine the number format.
-* @return String
-* 	the formatted number of type String if successful
-*   or null if an unsupported locale value was provided
-**/
-dojo.i18n.number.format = function(value, flags /*optional*/, locale /*optional*/){
-	flags = (typeof flags == "object") ? flags : {};
-
-	var formatData = dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE, locale);
-	if (typeof flags.separator == "undefined") {flags.separator = formatData[1];}
-	if (typeof flags.decimal == "undefined") {flags.decimal = formatData[2];}
-	if (typeof flags.groupSize == "undefined") {flags.groupSize = formatData[3];}
-	if (typeof flags.groupSize2 == "undefined") {flags.groupSize2 = formatData[4];}
-	if (typeof flags.round == "undefined") {flags.round = true;}
-	if (typeof flags.signed == "undefined") {flags.signed = true;}
-
-	var output = (flags.signed && (value < 0)) ? "-" : "";
-	value = Math.abs(value);
-	var whole = String((((flags.places > 0) || !flags.round) ? Math.floor : Math.round)(value));
-
-	// Splits str into substrings of size count, starting from right to left.  Is there a more clever way to do this in JS?
-	function splitSubstrings(str, count){
-		for(var subs = []; str.length >= count; str = str.substr(0, str.length - count)){
-			subs.push(str.substr(-count));
-		}
-		if (str.length > 0){subs.push(str);}
-		return subs.reverse();
-	}
-
-	if (flags.groupSize2 && (whole.length > flags.groupSize)){
-		var groups = splitSubstrings(whole.substr(0, whole.length - flags.groupSize), flags.groupSize2);
-		groups.push(whole.substr(-flags.groupSize));
-		output = output + groups.join(flags.separator);
-	}else if (flags.groupSize){
-		output = output + splitSubstrings(whole, flags.groupSize).join(flags.separator);
-	}else{
-		output = output + whole;
-	}
-
-//TODO: what if flags.places is Infinity?
-	if (flags.places > 0){
-	//Q: Is it safe to convert to a string and split on ".", or might that be locale dependent?  Use Math for now.
-		var fract = value - Math.floor(value);
-		fract = (flags.round ? Math.round : Math.floor)(fract * Math.pow(10, flags.places));
-		output = output + flags.decimal + fract;
-	}
-
-//TODO: exp
-
-	return output;
-};
-
-/**
-* Method to convert a properly formatted int string to a primative numeric value.
-*
-* @param String value
-*	The int string to be convertted
-* @param string locale
-*	The locale used to convert the number string
-* @param Object flags
-*   flags.validate true to check the string for strict adherence to the locale settings for separator, sign, etc.
-*     Default is true
-* @return Number
-* 	Returns a value of type Number, Number.NaN if not a number, or null if locale is not supported.
-**/
-dojo.i18n.number.parse = function(value, locale /*optional*/, flags /*optional*/){
-	flags = (typeof flags == "object") ? flags : {};
-
-	var formatData = dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE, locale);
-	if (typeof flags.separator == "undefined") {flags.separator = formatData[1];}
-	if (typeof flags.decimal == "undefined") {flags.decimal = formatData[2];}
-	if (typeof flags.groupSize == "undefined") {flags.groupSize = formatData[3];}
-	if (typeof flags.groupSize2 == "undefined") {flags.groupSize2 = formatData[4];}
-	if (typeof flags.validate == "undefined") {flags.validate = true;}
-
-	if (flags.validate && !dojo.i18n.number.isReal(value, locale, flags)) {
-		return Number.NaN;
-	}
-
-	var numbers = value.split(flags.decimal);
-	if (numbers.length > 2){return Number.NaN; }
-    var whole;
-    if (flags.separator != ""){
-        whole = Number(numbers[0].replace(new RegExp("\\" + flags.separator, "g"), ""));
-    } else {
-        whole = Number(numbers[0]);
-    }
-	var fract = (numbers.length == 1) ? 0 : Number(numbers[1]) / Math.pow(10, String(numbers[1]).length);
-
-//TODO: exp
-
-	return whole + fract;
-};
-
-/**
-  Validates whether a string is in an integer format. 
-
-  @param value  A string.
-  @param locale the locale to determine formatting used.  By default, the locale defined by the
-    host environment: dojo.locale
-  @param flags  An object.
-    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. sign is optional).
-    flags.separator  The character used as the thousands separator.  Default is specified by the locale.
-      For more than one symbol use an array, e.g. [",", ""], makes ',' optional.
-      The empty array [] makes the default separator optional.   
-  @return  true or false.
-*/
-dojo.i18n.number.isInteger = function(value, locale /*optional*/, flags /*optional*/) {
-	flags = (typeof flags == "object") ? flags : {};
-
-	var formatData = dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE, locale);
-	if (typeof flags.separator == "undefined") {flags.separator = formatData[1];}
-	else if (dojo.lang.isArray(flags.separator) && flags.separator.length ===0){
-		flags.separator = [formatData[1],""];
-	}
-	if (typeof flags.groupSize == "undefined") {flags.groupSize = formatData[3];}
-	if (typeof flags.groupSize2 == "undefined") {flags.groupSize2 = formatData[4];}
-
-	var re = new RegExp("^" + dojo.regexp.integer(flags) + "$");
-	return re.test(value);
-};
-
-/**
-  Validates whether a string is a real valued number. 
-  Format is the usual exponential notation.
-
-  @param value  A string.
-  @param locale the locale to determine formatting used.  By default, the locale defined by the
-    host environment: dojo.locale
-  @param flags  An object.
-    flags.places  The integer number of decimal places.
-      If not given, the decimal part is optional and the number of places is unlimited.
-    flags.decimal  The character used for the decimal point.  The default is specified by the locale.
-    flags.exponent  Express in exponential notation.  Can be true, false, or [true, false].
-      Default is [true, false], (i.e. the exponential part is optional).
-    flags.eSigned  The leading plus-or-minus sign on the exponent.  Can be true, false, 
-      or [true, false].  Default is [true, false], (i.e. sign is optional).
-    flags in regexp.integer can be applied.
-  @return  true or false.
-*/
-dojo.i18n.number.isReal = function(value, locale /*optional*/, flags /*optional*/) {
-	flags = (typeof flags == "object") ? flags : {};
-
-	var formatData = dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE, locale);
-	if (typeof flags.separator == "undefined") {flags.separator = formatData[1];}
-	else if (dojo.lang.isArray(flags.separator) && flags.separator.length ===0){
-		flags.separator = [formatData[1],""];
-	}
-	if (typeof flags.decimal == "undefined") {flags.decimal = formatData[2];}
-	if (typeof flags.groupSize == "undefined") {flags.groupSize = formatData[3];}
-	if (typeof flags.groupSize2 == "undefined") {flags.groupSize2 = formatData[4];}
-
-	var re = new RegExp("^" + dojo.regexp.realNumber(flags) + "$");
-	return re.test(value);
-};
-
-//TODO: hide in a closure?
-//TODO: change to use hashes and mixins, rather than arrays
-//Q: fallback algorithm/how to structure table:
-// does it make sense to look by country code most of the time (wildcard match on
-// language, except where it's relevant) and provide default country when only
-// a language is given?
-(function() {
-
-dojo.i18n.number.FORMAT_TABLE = {
-	//0: thousand seperator for monetary, 1: thousand seperator for number, 2: decimal seperator, 3: group size, 4: second group size because of india
-	'ar-ae': ["","", ",", 1],
-	'ar-bh': ["","",",", 1],
-	'ar-dz': ["","",",", 1],
-	'ar-eg': ["","", ",", 1],
-	'ar-jo': ["","",",", 1],
-	'ar-kw': ["","", ",", 1],
-	'ar-lb': ["","", ",", 1],
-	'ar-ma': ["","", ",", 1],
-	'ar-om': ["","", ",", 1],
-	'ar-qa': ["","", ",", 1],
-	'ar-sa': ["","", ",", 1],
-	'ar-sy': ["","", ",", 1],
-	'ar-tn': ["","", ",", 1],
-	'ar-ye': ["","", ",", 1],
-	'cs-cz': [".",".", ",", 3],
-	'da-dk': [".",".", ",", 3],
-	'de-at': [".",".", ",", 3],
-	'de-de': [".",".", ",", 3],
-	'de-lu': [".",".", ",", 3],
-	//IBM JSL defect 51278. right now we have problem with single quote. //IBM: explain?
-	'de-ch': ["'","'", ".", 3], //Q: comma as decimal separator for currency??
-	//'de-ch': [".",".", ",", 3],
-	'el-gr': [".",".", ",", 3],
-	'en-au': [",",",", ".", 3],
-	'en-ca': [",",",", ".", 3],
-	'en-gb': [",",",", ".", 3],
-	'en-hk': [",",",", ".", 3],
-	'en-ie': [",",",", ".", 3],
-	'en-in': [",",",", ".", 3,2],//india-english, 1,23,456.78
-	'en-nz': [",",",", ".", 3],
-	'en-us': [",",",", ".", 3],
-	'en-za': [",",",", ".", 3],
-	
-	'es-ar': [".",".", ",", 3],
-	'es-bo': [".",".", ",", 3],
-	'es-cl': [".",".", ",", 3],
-	'es-co': [".",".", ",", 3],
-	'es-cr': [".",".", ",", 3],
-	'es-do': [".",".", ",", 3],
-	'es-ec': [".",".", ",", 3],
-	'es-es': [".",".", ",", 3],
-	'es-gt': [",",",", ".", 3],
-	'es-hn': [",",",", ".", 3],
-	'es-mx': [",",",", ".", 3],
-	'es-ni': [",",",", ".", 3],
-	'es-pa': [",",",", ".", 3],
-	'es-pe': [",",",", ".", 3],
-	'es-pr': [",",",", ".", 3],
-	'es-py': [".",".",",", 3],
-	'es-sv': [",", ",",".", 3],
-	'es-uy': [".",".",",", 3],
-	'es-ve': [".",".", ",", 3],
-	
-	'fi-fi': [" "," ", ",", 3],
-	
-	'fr-be': [".",".",",", 3],
-	'fr-ca': [" ", " ", ",", 3],
-	
-	'fr-ch': [" ", " ",".", 3],
-	
-	'fr-fr': [" "," ", ",", 3],
-	'fr-lu': [".",".", ",", 3],
-	
-	'he-il': [",",",", ".", 3],
-	
-	'hu-hu': [" ", " ",",", 3],
-	
-	'it-ch': [" "," ", ".", 3],
-	
-	'it-it': [".",".", ",", 3],
-	'ja-jp': [",",",", ".", 3],
-	'ko-kr': [",", ",",".", 3],
-	
-	'no-no': [".",".", ",", 3],
-	
-	'nl-be': [" "," ", ",", 3],
-	'nl-nl': [".",".", ",", 3],
-	'pl-pl': [".", ".",",", 3],
-	
-	'pt-br': [".",".", ",", 3],
-	'pt-pt': [".",".", "$", 3],
-	'ru-ru': [" ", " ",",", 3],
-	
-	'sv-se': ["."," ", ",", 3],
-	
-	'tr-tr': [".",".", ",", 3],
-	
-	'zh-cn': [",",",", ".", 3],
-	'zh-hk': [",",",",".", 3],
-	'zh-tw': [",", ",",".", 3],
-	'*': [",",",", ".", 3]
-};
-})();
-
-dojo.i18n.number._mapToLocalizedFormatData = function(table, locale){
-	locale = dojo.hostenv.normalizeLocale(locale);
-//TODO: most- to least-specific search? search by country code?
-//TODO: implement aliases to simplify and shorten tables
-	var data = table[locale];
-	if (typeof data == 'undefined'){data = table['*'];}
-	return data;
-}
-
-dojo.provide("dojo.validate.common");
-
-
-
-
-dojo.validate.isText = function(/*String*/value, /*Object?*/flags){
-// summary:
-//	Checks if a string has non whitespace characters. 
-//	Parameters allow you to constrain the length.
-//
-// value: A string
-// flags: {length: Number, minlength: Number, maxlength: Number}
-//    flags.length  If set, checks if there are exactly flags.length number of characters.
-//    flags.minlength  If set, checks if there are at least flags.minlength number of characters.
-//    flags.maxlength  If set, checks if there are at most flags.maxlength number of characters.
-
-	flags = (typeof flags == "object") ? flags : {};
-
-	// test for text
-	if(/^\s*$/.test(value)){ return false; } // Boolean
-
-	// length tests
-	if(typeof flags.length == "number" && flags.length != value.length){ return false; } // Boolean
-	if(typeof flags.minlength == "number" && flags.minlength > value.length){ return false; } // Boolean
-	if(typeof flags.maxlength == "number" && flags.maxlength < value.length){ return false; } // Boolean
-
-	return true; // Boolean
-}
-
-dojo.validate.isInteger = function(/*String*/value, /*Object?*/flags){
-// summary:
-//	Validates whether a string is in an integer format
-//
-// value  A string
-// flags  {signed: Boolean|[true,false], separator: String}
-//    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-//      Default is [true, false], (i.e. sign is optional).
-//    flags.separator  The character used as the thousands separator.  Default is no separator.
-//      For more than one symbol use an array, e.g. [",", ""], makes ',' optional.
-
-	var re = new RegExp("^" + dojo.regexp.integer(flags) + "$");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.isRealNumber = function(/*String*/value, /*Object?*/flags){
-// summary:
-//	Validates whether a string is a real valued number. 
-//	Format is the usual exponential notation.
-//
-// value: A string
-// flags: {places: Number, decimal: String, exponent: Boolean|[true,false], eSigned: Boolean|[true,false], ...}
-//    flags.places  The integer number of decimal places.
-//      If not given, the decimal part is optional and the number of places is unlimited.
-//    flags.decimal  The character used for the decimal point.  Default is ".".
-//    flags.exponent  Express in exponential notation.  Can be true, false, or [true, false].
-//      Default is [true, false], (i.e. the exponential part is optional).
-//    flags.eSigned  The leading plus-or-minus sign on the exponent.  Can be true, false, 
-//      or [true, false].  Default is [true, false], (i.e. sign is optional).
-//    flags in regexp.integer can be applied.
-
-	var re = new RegExp("^" + dojo.regexp.realNumber(flags) + "$");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.isCurrency = function(/*String*/value, /*Object?*/flags){
-// summary:
-//	Validates whether a string denotes a monetary value. 
-// value: A string
-// flags: {signed:Boolean|[true,false], symbol:String, placement:String, separator:String,
-//	fractional:Boolean|[true,false], decimal:String}
-//    flags.signed  The leading plus-or-minus sign.  Can be true, false, or [true, false].
-//      Default is [true, false], (i.e. sign is optional).
-//    flags.symbol  A currency symbol such as Yen "�", Pound "�", or the Euro sign "�".  
-//      Default is "$".  For more than one symbol use an array, e.g. ["$", ""], makes $ optional.
-//    flags.placement  The symbol can come "before" the number or "after".  Default is "before".
-//    flags.separator  The character used as the thousands separator. The default is ",".
-//    flags.fractional  The appropriate number of decimal places for fractional currency (e.g. cents)
-//      Can be true, false, or [true, false].  Default is [true, false], (i.e. cents are optional).
-//    flags.decimal  The character used for the decimal point.  Default is ".".
-
-	var re = new RegExp("^" + dojo.regexp.currency(flags) + "$");
-	return re.test(value); // Boolean
-}
-
-dojo.validate._isInRangeCache = {};
-
-dojo.validate.isInRange = function(/*String*/value, /*Object?*/flags){
-//summary:
-//	Validates whether a string denoting an integer, 
-//	real number, or monetary value is between a max and min. 
-//
-// value: A string
-// flags: {max:Number, min:Number, decimal:String}
-//    flags.max  A number, which the value must be less than or equal to for the validation to be true.
-//    flags.min  A number, which the value must be greater than or equal to for the validation to be true.
-//    flags.decimal  The character used for the decimal point.  Default is ".".
-
-
-	//stripping the separator allows NaN to perform as expected, if no separator, we assume ','
-	//once i18n support is ready for this, instead of assuming, we default to i18n's recommended value
-	value = value.replace(dojo.lang.has(flags,'separator')?flags.separator:',', '', 'g').
-		replace(dojo.lang.has(flags,'symbol')?flags.symbol:'$', '');
-	if(isNaN(value)){
-		return false; // Boolean
-	}
-	// assign default values to missing paramters
-	flags = (typeof flags == "object") ? flags : {};
-	var max = (typeof flags.max == "number") ? flags.max : Infinity;
-	var min = (typeof flags.min == "number") ? flags.min : -Infinity;
-	var dec = (typeof flags.decimal == "string") ? flags.decimal : ".";
-	
-	var cache = dojo.validate._isInRangeCache;
-	var cacheIdx = value+"max"+max+"min"+min+"dec"+dec;
-	if(typeof cache[cacheIdx] != "undefined"){
-		return cache[cacheIdx];
-	}
-
-	// splice out anything not part of a number
-	var pattern = "[^" + dec + "\\deE+-]";
-	value = value.replace(RegExp(pattern, "g"), "");
-
-	// trim ends of things like e, E, or the decimal character
-	value = value.replace(/^([+-]?)(\D*)/, "$1");
-	value = value.replace(/(\D*)$/, "");
-
-	// replace decimal with ".". The minus sign '-' could be the decimal!
-	pattern = "(\\d)[" + dec + "](\\d)";
-	value = value.replace(RegExp(pattern, "g"), "$1.$2");
-
-	value = Number(value);
-	if ( value < min || value > max ) { cache[cacheIdx] = false; return false; } // Boolean
-
-	cache[cacheIdx] = true; return true; // Boolean
-}
-
-dojo.validate.isNumberFormat = function(/*String*/value, /*Object?*/flags){
-// summary:
-//	Validates any sort of number based format
-//
-// description:
-//	Use it for phone numbers, social security numbers, zip-codes, etc.
-//	The value can be validated against one format or one of multiple formats.
-//
-//  Format
-//    #        Stands for a digit, 0-9.
-//    ?        Stands for an optional digit, 0-9 or nothing.
-//    All other characters must appear literally in the expression.
-//
-//  Example   
-//    "(###) ###-####"       ->   (510) 542-9742
-//    "(###) ###-#### x#???" ->   (510) 542-9742 x153
-//    "###-##-####"          ->   506-82-1089       i.e. social security number
-//    "#####-####"           ->   98225-1649        i.e. zip code
-//
-// value: A string
-// flags: {format:String}
-//    flags.format  A string or an Array of strings for multiple formats.
-
-	var re = new RegExp("^" + dojo.regexp.numberFormat(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.isValidLuhn = function(/*String*/value){
-//summary: Compares value against the Luhn algorithm to verify its integrity
-	var sum, parity, curDigit;
-	if(typeof value!='string'){
-		value = String(value);
-	}
-	value = value.replace(/[- ]/g,''); //ignore dashes and whitespaces
-	parity = value.length%2;
-	sum=0;
-	for(var i=0;i<value.length;i++){
-		curDigit = parseInt(value.charAt(i));
-		if(i%2==parity){
-			curDigit*=2;
-		}
-		if(curDigit>9){
-			curDigit-=9;
-		}
-		sum+=curDigit;
-	}
-	return !(sum%10); //Boolean
-}
-
-/**
-	Procedural API Description
-
-		The main aim is to make input validation expressible in a simple format.
-		You define profiles which declare the required and optional fields and any constraints they might have.
-		The results are provided as an object that makes it easy to handle missing and invalid input.
-
-	Usage
-
-		var results = dojo.validate.check(form, profile);
-
-	Profile Object
-
-		var profile = {
-			// filters change the field value and are applied before validation.
-			trim: ["tx1", "tx2"],
-			uppercase: ["tx9"],
-			lowercase: ["tx5", "tx6", "tx7"],
-			ucfirst: ["tx10"],
-			digit: ["tx11"],
-
-			// required input fields that are blank will be reported missing.
-			// required radio button groups and drop-down lists with no selection will be reported missing.
-			// checkbox groups and selectboxes can be required to have more than one value selected.
-			// List required fields by name and use this notation to require more than one value: {checkboxgroup: 2}, {selectboxname: 3}.
-			required: ["tx7", "tx8", "pw1", "ta1", "rb1", "rb2", "cb3", "s1", {"doubledip":2}, {"tripledip":3}],
-
-			// dependant/conditional fields are required if the target field is present and not blank.
-			// At present only textbox, password, and textarea fields are supported.
-			dependencies:	{
-				cc_exp: "cc_no",	
-				cc_type: "cc_no",	
-			},
-
-			// Fields can be validated using any boolean valued function.  
-			// Use arrays to specify parameters in addition to the field value.
-			constraints: {
-				field_name1: myValidationFunction,
-				field_name2: dojo.validate.isInteger,
-				field_name3: [myValidationFunction, additional parameters],
-				field_name4: [dojo.validate.isValidDate, "YYYY.MM.DD"],
-				field_name5: [dojo.validate.isEmailAddress, false, true],
-			},
-
-			// Confirm is a sort of conditional validation.
-			// It associates each field in its property list with another field whose value should be equal.
-			// If the values are not equal, the field in the property list is reported as Invalid. Unless the target field is blank.
-			confirm: {
-				email_confirm: "email",	
-				pw2: "pw1",	
-			}
-		};
-
-	Results Object
-
-		isSuccessful(): Returns true if there were no invalid or missing fields, else it returns false.
-		hasMissing():  Returns true if the results contain any missing fields.
-		getMissing():  Returns a list of required fields that have values missing.
-		isMissing(field):  Returns true if the field is required and the value is missing.
-		hasInvalid():  Returns true if the results contain fields with invalid data.
-		getInvalid():  Returns a list of fields that have invalid values.
-		isInvalid(field):  Returns true if the field has an invalid value.
-
-*/
-
-dojo.provide("dojo.validate.check");
-
-dojo.require("dojo.lang.common");
-
-dojo.validate.check = function(/*HTMLFormElement*/form, /*Object*/profile){
-	// summary: validates user input of an HTML form based on input profile
-	//
-	// description:
-	//	returns an object that contains several methods summarizing the results of the validation
-	//
-	// form: form to be validated
-	// profile: specifies how the form fields are to be validated
-	// {trim:Array, uppercase:Array, lowercase:Array, ucfirst:Array, digit:Array,
-	//	required:Array, dependencies:Object, constraints:Object, confirm:Object}
-
-	// Essentially private properties of results object
-	var missing = [];
-	var invalid = [];
-
-	// results object summarizes the validation
-	var results = {
-		isSuccessful: function() {return ( !this.hasInvalid() && !this.hasMissing() );},
-		hasMissing: function() {return ( missing.length > 0 );},
-		getMissing: function() {return missing;},
-		isMissing: function(elemname) {
-			for(var i = 0; i < missing.length; i++){
-				if(elemname == missing[i]){ return true; }
-			}
-			return false;
-		},
-		hasInvalid: function() {return ( invalid.length > 0 );},
-		getInvalid: function() {return invalid;},
-		isInvalid: function(elemname){
-			for(var i = 0; i < invalid.length; i++){
-				if(elemname == invalid[i]){ return true; }
-			}
-			return false;
-		}
-	};
-
-	// Filters are applied before fields are validated.
-	// Trim removes white space at the front and end of the fields.
-	if(profile.trim instanceof Array){
-		for(var i = 0; i < profile.trim.length; i++){
-			var elem = form[profile.trim[i]];
-			if(dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; }
-			elem.value = elem.value.replace(/(^\s*|\s*$)/g, "");
-		}
-	}
-	// Convert to uppercase
-	if(profile.uppercase instanceof Array){
-		for(var i = 0; i < profile.uppercase.length; i++){
-			var elem = form[profile.uppercase[i]];
-			if(dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; }
-			elem.value = elem.value.toUpperCase();
-		}
-	}
-	// Convert to lowercase
-	if(profile.lowercase instanceof Array){
-		for (var i = 0; i < profile.lowercase.length; i++){
-			var elem = form[profile.lowercase[i]];
-			if(dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; }
-			elem.value = elem.value.toLowerCase();
-		}
-	}
-	// Uppercase first letter
-	if(profile.ucfirst instanceof Array){
-		for(var i = 0; i < profile.ucfirst.length; i++){
-			var elem = form[profile.ucfirst[i]];
-			if(dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; }
-			elem.value = elem.value.replace(/\b\w+\b/g, function(word) { return word.substring(0,1).toUpperCase() + word.substring(1).toLowerCase(); });
-		}
-	}
-	// Remove non digits characters from the input.
-	if(profile.digit instanceof Array){
-		for(var i = 0; i < profile.digit.length; i++){
-			var elem = form[profile.digit[i]];
-			if(dj_undef("type", elem) || elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; }
-			elem.value = elem.value.replace(/\D/g, "");
-		}
-	}
-
-	// See if required input fields have values missing.
-	if(profile.required instanceof Array){
-		for(var i = 0; i < profile.required.length; i++){ 
-			if(!dojo.lang.isString(profile.required[i])){ continue; }
-			var elem = form[profile.required[i]];
-			// Are textbox, textarea, or password fields blank.
-			if(!dj_undef("type", elem) && (elem.type == "text" || elem.type == "textarea" || elem.type == "password" || elem.type == "file") && /^\s*$/.test(elem.value)){
-				missing[missing.length] = elem.name;
-			}
-			// Does drop-down box have option selected.
-			else if(!dj_undef("type", elem) && (elem.type == "select-one" || elem.type == "select-multiple") 
-						&& (elem.selectedIndex == -1 
-						|| /^\s*$/.test(elem.options[elem.selectedIndex].value))){
-				missing[missing.length] = elem.name;
-			}
-			// Does radio button group (or check box group) have option checked.
-			else if(elem instanceof Array){
-				var checked = false;
-				for(var j = 0; j < elem.length; j++){
-					if (elem[j].checked) { checked = true; }
-				}
-				if(!checked){	
-					missing[missing.length] = elem[0].name;
-				}
-			}
-		}
-	}
-
-	// See if checkbox groups and select boxes have x number of required values.
-	if(profile.required instanceof Array){
-		for (var i = 0; i < profile.required.length; i++){ 
-			if(!dojo.lang.isObject(profile.required[i])){ continue; }
-			var elem, numRequired;
-			for(var name in profile.required[i]){ 
-				elem = form[name]; 
-				numRequired = profile.required[i][name];
-			}
-			// case 1: elem is a check box group
-			if(elem instanceof Array){
-				var checked = 0;
-				for(var j = 0; j < elem.length; j++){
-					if(elem[j].checked){ checked++; }
-				}
-				if(checked < numRequired){	
-					missing[missing.length] = elem[0].name;
-				}
-			}
-			// case 2: elem is a select box
-			else if(!dj_undef("type", elem) && elem.type == "select-multiple" ){
-				var selected = 0;
-				for(var j = 0; j < elem.options.length; j++){
-					if (elem.options[j].selected && !/^\s*$/.test(elem.options[j].value)) { selected++; }
-				}
-				if(selected < numRequired){	
-					missing[missing.length] = elem.name;
-				}
-			}
-		}
-	}
-
-	// Dependent fields are required when the target field is present (not blank).
-	// Todo: Support dependent and target fields that are radio button groups, or select drop-down lists.
-	// Todo: Make the dependency based on a specific value of the target field.
-	// Todo: allow dependent fields to have several required values, like {checkboxgroup: 3}.
-	if(dojo.lang.isObject(profile.dependencies) || dojo.lang.isObject(profile.dependancies)){
-		if(profile["dependancies"]){
-			dojo.deprecated("dojo.validate.check", "profile 'dependancies' is deprecated, please use "
-							+ "'dependencies'", "0.5");
-			profile.dependencies=profile.dependancies;
-		}
-		// properties of dependencies object are the names of dependent fields to be checked
-		for(name in profile.dependencies){
-			var elem = form[name];	// the dependent element
-			if(dj_undef("type", elem)){continue;}
-			if(elem.type != "text" && elem.type != "textarea" && elem.type != "password"){ continue; } // limited support
-			if(/\S+/.test(elem.value)){ continue; }	// has a value already
-			if(results.isMissing(elem.name)){ continue; }	// already listed as missing
-			var target = form[profile.dependencies[name]];
-			if(target.type != "text" && target.type != "textarea" && target.type != "password"){ continue; }	// limited support
-			if(/^\s*$/.test(target.value)){ continue; }	// skip if blank
-			missing[missing.length] = elem.name;	// ok the dependent field is missing
-		}
-	}
-
-	// Find invalid input fields.
-	if(dojo.lang.isObject(profile.constraints)){
-		// constraint properties are the names of fields to bevalidated
-		for(name in profile.constraints){
-			var elem = form[name];
-			if(!elem) {continue;}
-			
-			// skip if blank - its optional unless required, in which case it
-			// is already listed as missing.
-			if(!dj_undef("tagName",elem) 
-				&& (elem.tagName.toLowerCase().indexOf("input") >= 0
-					|| elem.tagName.toLowerCase().indexOf("textarea") >= 0) 
-				&& /^\s*$/.test(elem.value)){ 
-				continue; 
-			}
-			
-			var isValid = true;
-			// case 1: constraint value is validation function
-			if(dojo.lang.isFunction(profile.constraints[name])){
-				isValid = profile.constraints[name](elem.value);
-			}else if(dojo.lang.isArray(profile.constraints[name])){
-				
-				// handle nested arrays for multiple constraints
-				if(dojo.lang.isArray(profile.constraints[name][0])){
-					for (var i=0; i<profile.constraints[name].length; i++){
-						isValid = dojo.validate.evaluateConstraint(profile, profile.constraints[name][i], name, elem);
-						if(!isValid){ break; }
-					}
-				}else{
-					// case 2: constraint value is array, first elem is function,
-					// tail is parameters
-					isValid = dojo.validate.evaluateConstraint(profile, profile.constraints[name], name, elem);
-				}
-			}
-			
-			if(!isValid){	
-				invalid[invalid.length] = elem.name;
-			}
-		}
-	}
-
-	// Find unequal confirm fields and report them as Invalid.
-	if(dojo.lang.isObject(profile.confirm)){
-		for(name in profile.confirm){
-			var elem = form[name];	// the confirm element
-			var target = form[profile.confirm[name]];
-			if (dj_undef("type", elem) || dj_undef("type", target) || (elem.type != "text" && elem.type != "textarea" && elem.type != "password") 
-				||(target.type != elem.type)
-				||(target.value == elem.value)	// it's valid
-				||(results.isInvalid(elem.name))// already listed as invalid
-				||(/^\s*$/.test(target.value)))	// skip if blank - only confirm if target has a value
-			{
-				continue; 
-			}
-			invalid[invalid.length] = elem.name;
-		}
-	}
-
-	return results; // Object
-};
-
-//TODO: evaluateConstraint doesn't use profile or fieldName args?
-dojo.validate.evaluateConstraint=function(profile, /*Array*/constraint, fieldName, elem){
-	// summary:
-	//	Evaluates dojo.validate.check() constraints that are specified as array
-	//	arguments
-	//
-	// description: The arrays are expected to be in the format of:
-	//      constraints:{
-	//              fieldName: [functionToCall, param1, param2, etc.],
-	//              fieldName: [[functionToCallFirst, param1],[functionToCallSecond,param2]]
-	//      }
-	// 
-	//  This function evaluates a single array function in the format of:
-	//      [functionName, argument1, argument2, etc]
-	// 
-	//  The function will be parsed out and evaluated against the incoming parameters.
-	//
-	// profile: The dojo.validate.check() profile that this evaluation is against.
-	// constraint: The single [] array of function and arguments for the function.
-	// fieldName: The form dom name of the field being validated.
-	// elem: The form element field.
-	
- 	var isValidSomething = constraint[0];
-	var params = constraint.slice(1);
-	params.unshift(elem.value);
-	if(typeof isValidSomething != "undefined"){
-		return isValidSomething.apply(null, params);
-	}
-	return false; // Boolean
-}
-
-dojo.provide("dojo.date.common");
-
-
-/* Supplementary Date Functions
- *******************************/
-
-dojo.date.setDayOfYear = function(/*Date*/dateObject, /*Number*/dayOfYear){
-	// summary: sets dateObject according to day of the year (1..366)
-	dateObject.setMonth(0);
-	dateObject.setDate(dayOfYear);
-	return dateObject; // Date
-}
-
-dojo.date.getDayOfYear = function(/*Date*/dateObject){
-	// summary: gets the day of the year as represented by dateObject
-	var fullYear = dateObject.getFullYear();
-	var lastDayOfPrevYear = new Date(fullYear-1, 11, 31);
-	return Math.floor((dateObject.getTime() -
-		lastDayOfPrevYear.getTime()) / 86400000); // Number
-}
-
-
-dojo.date.setWeekOfYear = function(/*Date*/dateObject, /*Number*/week, /*Number*/firstDay){
-	if(arguments.length == 1){ firstDay = 0; } // Sunday
-	dojo.unimplemented("dojo.date.setWeekOfYear");
-}
-
-dojo.date.getWeekOfYear = function(/*Date*/dateObject, /*Number*/firstDay){
-	if(arguments.length == 1){ firstDay = 0; } // Sunday
-
-	// work out the first day of the year corresponding to the week
-	var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1);
-	var day = firstDayOfYear.getDay();
-	firstDayOfYear.setDate(firstDayOfYear.getDate() -
-			day + firstDay - (day > firstDay ? 7 : 0));
-
-	return Math.floor((dateObject.getTime() -
-		firstDayOfYear.getTime()) / 604800000);
-}
-
-dojo.date.setIsoWeekOfYear = function(/*Date*/dateObject, /*Number*/week, /*Number*/firstDay){
-	// summary: unimplemented
-	if (arguments.length == 1) { firstDay = 1; } // Monday
-	dojo.unimplemented("dojo.date.setIsoWeekOfYear");
-}
-
-dojo.date.getIsoWeekOfYear = function(/*Date*/dateObject, /*Number*/firstDay) {
-	// summary: unimplemented
-	if (arguments.length == 1) { firstDay = 1; } // Monday
-	dojo.unimplemented("dojo.date.getIsoWeekOfYear");
-}
-
-
-/* Informational Functions
- **************************/
-
-//DEPRECATED: These timezone arrays will be deprecated in 0.5
-dojo.date.shortTimezones = ["IDLW", "BET", "HST", "MART", "AKST", "PST", "MST",
-	"CST", "EST", "AST", "NFT", "BST", "FST", "AT", "GMT", "CET", "EET", "MSK",
-	"IRT", "GST", "AFT", "AGTT", "IST", "NPT", "ALMT", "MMT", "JT", "AWST",
-	"JST", "ACST", "AEST", "LHST", "VUT", "NFT", "NZT", "CHAST", "PHOT",
-	"LINT"];
-dojo.date.timezoneOffsets = [-720, -660, -600, -570, -540, -480, -420, -360,
-	-300, -240, -210, -180, -120, -60, 0, 60, 120, 180, 210, 240, 270, 300,
-	330, 345, 360, 390, 420, 480, 540, 570, 600, 630, 660, 690, 720, 765, 780,
-	840];
-/*
-dojo.date.timezones = ["International Date Line West", "Bering Standard Time",
-	"Hawaiian Standard Time", "Marquesas Time", "Alaska Standard Time",
-	"Pacific Standard Time (USA)", "Mountain Standard Time",
-	"Central Standard Time (USA)", "Eastern Standard Time (USA)",
-	"Atlantic Standard Time", "Newfoundland Time", "Brazil Standard Time",
-	"Fernando de Noronha Standard Time (Brazil)", "Azores Time",
-	"Greenwich Mean Time", "Central Europe Time", "Eastern Europe Time",
-	"Moscow Time", "Iran Standard Time", "Gulf Standard Time",
-	"Afghanistan Time", "Aqtobe Time", "Indian Standard Time", "Nepal Time",
-	"Almaty Time", "Myanmar Time", "Java Time",
-	"Australian Western Standard Time", "Japan Standard Time",
-	"Australian Central Standard Time", "Lord Hove Standard Time (Australia)",
-	"Vanuata Time", "Norfolk Time (Australia)", "New Zealand Standard Time",
-	"Chatham Standard Time (New Zealand)", "Phoenix Islands Time (Kribati)",
-	"Line Islands Time (Kribati)"];
-*/
-
-dojo.date.getDaysInMonth = function(/*Date*/dateObject){
-	// summary: returns the number of days in the month used by dateObject
-	var month = dateObject.getMonth();
-	var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
-	if (month == 1 && dojo.date.isLeapYear(dateObject)) { return 29; } // Number
-	else { return days[month]; } // Number
-}
-
-dojo.date.isLeapYear = function(/*Date*/dateObject){
-// summary:
-//	Determines if the year of the dateObject is a leap year
-//
-// description:
-//	Leap years are years with an additional day YYYY-02-29, where the year
-//	number is a multiple of four with the following exception: If a year
-//	is a multiple of 100, then it is only a leap year if it is also a
-//	multiple of 400. For example, 1900 was not a leap year, but 2000 is one.
-
-	var year = dateObject.getFullYear();
-	return (year%400 == 0) ? true : (year%100 == 0) ? false : (year%4 == 0) ? true : false; // Boolean
-}
-
-// FIXME: This is not localized
-dojo.date.getTimezoneName = function(/*Date*/dateObject){
-// summary:
-//	Get the user's time zone as provided by the browser
-//
-// dateObject: needed because the timezone may vary with time (daylight savings)
-//
-// description:
-//	Try to get time zone info from toString or toLocaleString
-//	method of the Date object -- UTC offset is not a time zone.
-//	See http://www.twinsun.com/tz/tz-link.htm
-//	Note: results may be inconsistent across browsers.
-
-	var str = dateObject.toString(); // Start looking in toString
-	var tz = ''; // The result -- return empty string if nothing found
-	var match;
-
-	// First look for something in parentheses -- fast lookup, no regex
-	var pos = str.indexOf('(');
-	if (pos > -1) {
-		pos++;
-		tz = str.substring(pos, str.indexOf(')'));
-	}
-	// If at first you don't succeed ...
-	else{
-		// If IE knows about the TZ, it appears before the year
-		// Capital letters or slash before a 4-digit year 
-		// at the end of string
-		var pat = /([A-Z\/]+) \d{4}$/;
-		if((match = str.match(pat))) {
-			tz = match[1];
-		}
-		// Some browsers (e.g. Safari) glue the TZ on the end
-		// of toLocaleString instead of putting it in toString
-		else{
-			str = dateObject.toLocaleString();
-			// Capital letters or slash -- end of string, 
-			// after space
-			pat = / ([A-Z\/]+)$/;
-			if((match = str.match(pat))) {
-				tz = match[1];
-			}
-		}
-	}
-
-	// Make sure it doesn't somehow end up return AM or PM
-	return tz == 'AM' || tz == 'PM' ? '' : tz; //String
-}
-
-
-//FIXME: not localized
-dojo.date.getOrdinal = function(dateObject){
-	// summary: returns the appropriate suffix (English only) for the day of the month, e.g. 'st' for 1, 'nd' for 2, etc.)
-	var date = dateObject.getDate();
-
-	if(date%100 != 11 && date%10 == 1){ return "st"; } // String
-	else if(date%100 != 12 && date%10 == 2){ return "nd"; } // String
-	else if(date%100 != 13 && date%10 == 3){ return "rd"; } // String
-	else{ return "th"; } // String
-}
-
-
-/* compare and add
- ******************/
-dojo.date.compareTypes={
-	// 	summary
-	//	bitmask for comparison operations.
-	DATE:1, TIME:2 
-};
-dojo.date.compare=function(/* Date */ dateA, /* Date */ dateB, /* dojo.date.compareTypes */ options){
-	//	summary
-	//	Compare two date objects by date, time, or both.  Returns 0 if equal, positive if a > b, else negative.
-	var dA=dateA;
-	var dB=dateB||new Date();
-	var now=new Date();
-	//FIXME: shorten this code
-	with(dojo.date.compareTypes){
-		var opt=options||(DATE|TIME);
-		var d1=new Date(
-			(opt&DATE)?dA.getFullYear():now.getFullYear(), 
-			(opt&DATE)?dA.getMonth():now.getMonth(),
-			(opt&DATE)?dA.getDate():now.getDate(),
-			(opt&TIME)?dA.getHours():0,
-			(opt&TIME)?dA.getMinutes():0,
-			(opt&TIME)?dA.getSeconds():0
-		);
-		var d2=new Date(
-			(opt&DATE)?dB.getFullYear():now.getFullYear(),
-			(opt&DATE)?dB.getMonth():now.getMonth(),
-			(opt&DATE)?dB.getDate():now.getDate(),
-			(opt&TIME)?dB.getHours():0,
-			(opt&TIME)?dB.getMinutes():0,
-			(opt&TIME)?dB.getSeconds():0
-		);
-	}
-	if(d1.valueOf()>d2.valueOf()){
-		return 1;	//	int
-	}
-	if(d1.valueOf()<d2.valueOf()){
-		return -1;	//	int
-	}
-	return 0;	//	int
-}
-
-dojo.date.dateParts={ 
-	//	summary
-	//	constants for use in dojo.date.add
-	YEAR:0, MONTH:1, DAY:2, HOUR:3, MINUTE:4, SECOND:5, MILLISECOND:6, QUARTER:7, WEEK:8, WEEKDAY:9
-};
-
-dojo.date.add = function(/* Date */ dt, /* dojo.date.dateParts */ interv, /* int */ incr){
-//	summary:
-//		Add to a Date in intervals of different size, from milliseconds to years
-//
-//	dt:
-//		A Javascript Date object to start with
-//
-//	interv:
-//		A constant representing the interval, e.g. YEAR, MONTH, DAY.  See dojo.date.dateParts.
-//
-//	incr:
-//		How much to add to the date
-
-	if(typeof dt == 'number'){dt = new Date(dt);} // Allow timestamps
-//FIXME: what's the reason behind this?	incr = incr || 1;
-
-	function fixOvershoot(){
-		if (sum.getDate() < dt.getDate()){
-			sum.setDate(0);
-		}
-	}
-	
-	var sum = new Date(dt);
-
-	with(dojo.date.dateParts){
-		switch(interv){
-			case YEAR:
-				sum.setFullYear(dt.getFullYear()+incr);
-				// Keep increment/decrement from 2/29 out of March
-				fixOvershoot();
-				break;
-			case QUARTER:
-				// Naive quarter is just three months
-				incr*=3;
-				// fallthrough...
-			case MONTH:
-				sum.setMonth(dt.getMonth()+incr);
-				// Reset to last day of month if you overshoot
-				fixOvershoot();
-				break;
-			case WEEK:
-				incr*=7;
-				// fallthrough...
-			case DAY:
-				sum.setDate(dt.getDate() + incr);
-				break;
-			case WEEKDAY:
-				//FIXME: assumes Saturday/Sunday weekend, but even this is not fixed.  There are CLDR entries to localize this.
-				var dat = dt.getDate();
-				var weeks = 0;
-				var days = 0;
-				var strt = 0;
-				var trgt = 0;
-				var adj = 0;
-				// Divide the increment time span into weekspans plus leftover days
-				// e.g., 8 days is one 5-day weekspan / and two leftover days
-				// Can't have zero leftover days, so numbers divisible by 5 get
-				// a days value of 5, and the remaining days make up the number of weeks
-				var mod = incr % 5;
-				if (mod == 0) {
-					days = (incr > 0) ? 5 : -5;
-					weeks = (incr > 0) ? ((incr-5)/5) : ((incr+5)/5);
-				}
-				else {
-					days = mod;
-					weeks = parseInt(incr/5);
-				}
-				// Get weekday value for orig date param
-				strt = dt.getDay();
-				// Orig date is Sat / positive incrementer
-				// Jump over Sun
-				if (strt == 6 && incr > 0) {
-					adj = 1;
-				}
-				// Orig date is Sun / negative incrementer
-				// Jump back over Sat
-				else if (strt == 0 && incr < 0) {
-					adj = -1;
-				}
-				// Get weekday val for the new date
-				trgt = (strt + days);
-				// New date is on Sat or Sun
-				if (trgt == 0 || trgt == 6) {
-					adj = (incr > 0) ? 2 : -2;
-				}
-				// Increment by number of weeks plus leftover days plus
-				// weekend adjustments
-				sum.setDate(dat + (7*weeks) + days + adj);
-				break;
-			case HOUR:
-				sum.setHours(sum.getHours()+incr);
-				break;
-			case MINUTE:
-				sum.setMinutes(sum.getMinutes()+incr);
-				break;
-			case SECOND:
-				sum.setSeconds(sum.getSeconds()+incr);
-				break;
-			case MILLISECOND:
-				sum.setMilliseconds(sum.getMilliseconds()+incr);
-				break;
-			default:
-				// Do nothing
-				break;
-		}
-	}
-
-	return sum; // Date
-};
-
-dojo.date.diff = function(/* Date */ dtA, /* Date */ dtB, /* dojo.date.dateParts */ interv){
-//	summary:
-//		Get the difference in a specific unit of time (e.g., number of months, weeks,
-//		days, etc.) between two dates.
-//
-//	dtA:
-//		A Javascript Date object
-//
-//	dtB:
-//		A Javascript Date object
-//
-//	interv:
-//		A constant representing the interval, e.g. YEAR, MONTH, DAY.  See dojo.date.dateParts.
-
-	// Accept timestamp input
-	if(typeof dtA == 'number'){dtA = new Date(dtA);}
-	if(typeof dtB == 'number'){dtB = new Date(dtB);}
-	var yeaDiff = dtB.getFullYear() - dtA.getFullYear();
-	var monDiff = (dtB.getMonth() - dtA.getMonth()) + (yeaDiff * 12);
-	var msDiff = dtB.getTime() - dtA.getTime(); // Millisecs
-	var secDiff = msDiff/1000;
-	var minDiff = secDiff/60;
-	var houDiff = minDiff/60;
-	var dayDiff = houDiff/24;
-	var weeDiff = dayDiff/7;
-	var delta = 0; // Integer return value
-
-	with(dojo.date.dateParts){
-		switch(interv){
-			case YEAR:
-				delta = yeaDiff;
-				break;
-			case QUARTER:
-				var mA = dtA.getMonth();
-				var mB = dtB.getMonth();
-				// Figure out which quarter the months are in
-				var qA = Math.floor(mA/3) + 1;
-				var qB = Math.floor(mB/3) + 1;
-				// Add quarters for any year difference between the dates
-				qB += (yeaDiff * 4);
-				delta = qB - qA;
-				break;
-			case MONTH:
-				delta = monDiff;
-				break;
-			case WEEK:
-				// Truncate instead of rounding
-				// Don't use Math.floor -- value may be negative
-				delta = parseInt(weeDiff);
-				break;
-			case DAY:
-				delta = dayDiff;
-				break;
-			case WEEKDAY:
-				var days = Math.round(dayDiff);
-				var weeks = parseInt(days/7);
-				var mod = days % 7;
-
-				// Even number of weeks
-				if (mod == 0) {
-					days = weeks*5;
-				}
-				// Weeks plus spare change (< 7 days)
-				else {
-					var adj = 0;
-					var aDay = dtA.getDay();
-					var bDay = dtB.getDay();
-	
-					weeks = parseInt(days/7);
-					mod = days % 7;
-					// Mark the date advanced by the number of
-					// round weeks (may be zero)
-					var dtMark = new Date(dtA);
-					dtMark.setDate(dtMark.getDate()+(weeks*7));
-					var dayMark = dtMark.getDay();
-					// Spare change days -- 6 or less
-					// ----------
-					// Positive diff
-					if (dayDiff > 0) {
-						switch (true) {
-							// Range starts on Sat
-							case aDay == 6:
-								adj = -1;
-								break;
-							// Range starts on Sun
-							case aDay == 0:
-								adj = 0;
-								break;
-							// Range ends on Sat
-							case bDay == 6:
-								adj = -1;
-								break;
-							// Range ends on Sun
-							case bDay == 0:
-								adj = -2;
-								break;
-							// Range contains weekend
-							case (dayMark + mod) > 5:
-								adj = -2;
-								break;
-							default:
-								// Do nothing
-								break;
-						}
-					}
-					// Negative diff
-					else if (dayDiff < 0) {
-						switch (true) {
-							// Range starts on Sat
-							case aDay == 6:
-								adj = 0;
-								break;
-							// Range starts on Sun
-							case aDay == 0:
-								adj = 1;
-								break;
-							// Range ends on Sat
-							case bDay == 6:
-								adj = 2;
-								break;
-							// Range ends on Sun
-							case bDay == 0:
-								adj = 1;
-								break;
-							// Range contains weekend
-							case (dayMark + mod) < 0:
-								adj = 2;
-								break;
-							default:
-								// Do nothing
-								break;
-						}
-					}
-					days += adj;
-					days -= (weeks*2);
-				}
-				delta = days;
-
-				break;
-			case HOUR:
-				delta = houDiff;
-				break;
-			case MINUTE:
-				delta = minDiff;
-				break;
-			case SECOND:
-				delta = secDiff;
-				break;
-			case MILLISECOND:
-				delta = msDiff;
-				break;
-			default:
-				// Do nothing
-				break;
-		}
-	}
-
-	// Round for fractional values and DST leaps
-	return Math.round(delta); // Number (integer)
-};
-
-dojo.provide("dojo.date.supplemental");
-
-dojo.date.getFirstDayOfWeek = function(/*String?*/locale){
-// summary: Returns a zero-based index for first day of the week
-// description:
-//		Returns a zero-based index for first day of the week, as used by the local (Gregorian) calendar.
-//		e.g. Sunday (returns 0), or Monday (returns 1)
-
-	// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/weekData/firstDay
-	var firstDay = {/*default is 1=Monday*/
-		mv:5,
-		ae:6,af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,lb:6,ly:6,ma:6,om:6,qa:6,sa:6,
-		sd:6,so:6,tn:6,ye:6,
-		as:0,au:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,ie:0,il:0,is:0,jm:0,jp:0,kg:0,kr:0,la:0,
-		mh:0,mo:0,mp:0,mt:0,nz:0,ph:0,pk:0,sg:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,vi:0,za:0,zw:0,
-		et:0,mw:0,ng:0,tj:0,
-		gb:0,
-		sy:4
-	};
-
-	locale = dojo.hostenv.normalizeLocale(locale);
-	var country = locale.split("-")[1];
-	var dow = firstDay[country];
-	return (typeof dow == 'undefined') ? 1 : dow; /*Number*/
-};
-
-dojo.date.getWeekend = function(/*String?*/locale){
-// summary: Returns a hash containing the start and end days of the weekend
-// description:
-//		Returns a hash containing the start and end days of the weekend according to local custom using locale,
-//		or by default in the user's locale.
-//		e.g. {start:6, end:0}
-
-	// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/weekData/weekend{Start,End}
-	var weekendStart = {/*default is 6=Saturday*/
-		eg:5,il:5,sy:5,
-		'in':0,
-		ae:4,bh:4,dz:4,iq:4,jo:4,kw:4,lb:4,ly:4,ma:4,om:4,qa:4,sa:4,sd:4,tn:4,ye:4		
-	};
-
-	var weekendEnd = {/*default is 0=Sunday*/
-		ae:5,bh:5,dz:5,iq:5,jo:5,kw:5,lb:5,ly:5,ma:5,om:5,qa:5,sa:5,sd:5,tn:5,ye:5,af:5,ir:5,
-		eg:6,il:6,sy:6
-	};
-
-	locale = dojo.hostenv.normalizeLocale(locale);
-	var country = locale.split("-")[1];
-	var start = weekendStart[country];
-	var end = weekendEnd[country];
-	if(typeof start == 'undefined'){start=6;}
-	if(typeof end == 'undefined'){end=0;}
-	return {start:start, end:end}; /*Object {start,end}*/
-};
-
-dojo.date.isWeekend = function(/*Date?*/dateObj, /*String?*/locale){
-// summary:
-//	Determines if the date falls on a weekend, according to local custom.
-
-	var weekend = dojo.date.getWeekend(locale);
-	var day = (dateObj || new Date()).getDay();
-	if(weekend.end<weekend.start){
-		weekend.end+=7;
-		if(day<weekend.start){ day+=7; }
-	}
-	return day >= weekend.start && day <= weekend.end; // Boolean
-};
-
-dojo.provide("dojo.date.format");
-
-
-
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.string.common");
-dojo.require("dojo.i18n.common");
-
-// Load the bundles containing localization information for
-// names and formats
-dojo.requireLocalization("dojo.i18n.calendar", "gregorian");
-dojo.requireLocalization("dojo.i18n.calendar", "gregorianExtras");
-
-//NOTE: Everything in this module assumes Gregorian calendars.
-// Other calendars will be implemented in separate modules.
-
-(function(){
-dojo.date.format = function(/*Date*/dateObject, /*Object?*/options){
-//
-// summary:
-//		Format a Date object as a String, using locale-specific settings.
-//
-// description:
-//		Create a string from a Date object using a known localized pattern.
-//		By default, this method formats both date and time from dateObject.
-//		Formatting patterns are chosen appropriate to the locale.  Different
-//		formatting lengths may be chosen, with "full" used by default.
-//		Custom patterns may be used or registered with translations using
-//		the addCustomBundle method.
-//		Formatting patterns are implemented using the syntax described at
-//		http://www.unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns
-//
-// dateObject:
-//		the date and/or time to be formatted.  If a time only is formatted,
-//		the values in the year, month, and day fields are irrelevant.  The
-//		opposite is true when formatting only dates.
-//
-// options: object {selector: string, formatLength: string, datePattern: string, timePattern: string, locale: string}
-//		selector- choice of timeOnly,dateOnly (default: date and time)
-//		formatLength- choice of long, short, medium or full (plus any custom additions).  Defaults to 'full'
-//		datePattern,timePattern- override pattern with this string
-//		am,pm- override strings for am/pm in times
-//		locale- override the locale used to determine formatting rules
-//
-
-	if(typeof options == "string"){
-		dojo.deprecated("dojo.date.format", "To format dates with POSIX-style strings, please use dojo.date.strftime instead", "0.5");
-		return dojo.date.strftime(dateObject, options);
-	}
-
-	// Format a pattern without literals
-	function formatPattern(dateObject, pattern){
-		return pattern.replace(/([a-z])\1*/ig, function(match){
-			var s;
-			var c = match.charAt(0);
-			var l = match.length;
-			var pad;
-			var widthList = ["abbr", "wide", "narrow"];
-			switch(c){
-				case 'G':
-					if(l>3){dojo.unimplemented("Era format not implemented");}
-					s = bundle.eras[dateObject.getFullYear() < 0 ? 1 : 0];
-					break;
-				case 'y':
-					s = dateObject.getFullYear();
-					switch(l){
-						case 1:
-							break;
-						case 2:
-							s = String(s); s = s.substr(s.length - 2);
-							break;
-						default:
-							pad = true;
-					}
-					break;
-				case 'Q':
-				case 'q':
-					s = Math.ceil((dateObject.getMonth()+1)/3);
-					switch(l){
-						case 1: case 2:
-							pad = true;
-							break;
-						case 3:
-						case 4:
-							dojo.unimplemented("Quarter format not implemented");
-					}
-					break;
-				case 'M':
-				case 'L':
-					var m = dateObject.getMonth();
-					var width;
-					switch(l){
-						case 1: case 2:
-							s = m+1; pad = true;
-							break;
-						case 3: case 4: case 5:
-							width = widthList[l-3];
-							break;
-					}
-					if(width){
-						var type = (c == "L") ? "standalone" : "format";
-						var prop = ["months",type,width].join("-");
-						s = bundle[prop][m];
-					}
-					break;
-				case 'w':
-					var firstDay = 0;
-					s = dojo.date.getWeekOfYear(dateObject, firstDay); pad = true;
-					break;
-				case 'd':
-					s = dateObject.getDate(); pad = true;
-					break;
-				case 'D':
-					s = dojo.date.getDayOfYear(dateObject); pad = true;
-					break;
-				case 'E':
-				case 'e':
-				case 'c': // REVIEW: don't see this in the spec?
-					var d = dateObject.getDay();
-					var width;
-					switch(l){
-						case 1: case 2:
-							if(c == 'e'){
-								var first = dojo.date.getFirstDayOfWeek(options.locale);
-								d = (d-first+7)%7;
-							}
-							if(c != 'c'){
-								s = d+1; pad = true;
-								break;
-							}
-							// else fallthrough...
-						case 3: case 4: case 5:
-							width = widthList[l-3];
-							break;
-					}
-					if(width){
-						var type = (c == "c") ? "standalone" : "format";
-						var prop = ["days",type,width].join("-");
-						s = bundle[prop][d];
-					}
-					break;
-				case 'a':
-					var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm';
-					s = bundle[timePeriod];
-					break;
-				case 'h':
-				case 'H':
-				case 'K':
-				case 'k':
-					var h = dateObject.getHours();
-					// strange choices in the date format make it impossible to write this succinctly
-					switch (c) {
-						case 'h': // 1-12
-							s = (h % 12) || 12;
-							break;
-						case 'H': // 0-23
-							s = h;
-							break;
-						case 'K': // 0-11
-							s = (h % 12);
-							break;
-						case 'k': // 1-24
-							s = h || 24;
-							break;
-					}
-					pad = true;
-					break;
-				case 'm':
-					s = dateObject.getMinutes(); pad = true;
-					break;
-				case 's':
-					s = dateObject.getSeconds(); pad = true;
-					break;
-				case 'S':
-					s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l-3));
-					break;
-				case 'v': // FIXME: don't know what this is. seems to be same as z?
-				case 'z':
-					// We only have one timezone to offer; the one from the browser
-					s = dojo.date.getTimezoneName(dateObject);
-					if(s){break;}
-					l=4;
-					// fallthrough... use GMT if tz not available
-				case 'Z':
-					var offset = dateObject.getTimezoneOffset();
-					var tz = [
-						(offset<=0 ? "+" : "-"),
-						dojo.string.pad(Math.floor(Math.abs(offset)/60), 2),
-						dojo.string.pad(Math.abs(offset)% 60, 2)
-					];
-					if(l==4){
-						tz.splice(0, 0, "GMT");
-						tz.splice(3, 0, ":");
-					}
-					s = tz.join("");
-					break;
-				case 'Y':
-				case 'u':
-				case 'W':
-				case 'F':
-				case 'g':
-				case 'A':
-//					dojo.debug(match+" modifier not yet implemented");
-					s = "?";
-					break;
-				default:
-					dojo.raise("dojo.date.format: invalid pattern char: "+pattern);
-			}
-			if(pad){ s = dojo.string.pad(s, l); }
-			return s;
-		});
-	}
-
-	options = options || {};
-
-	var locale = dojo.hostenv.normalizeLocale(options.locale);
-	var formatLength = options.formatLength || 'short';
-	var bundle = dojo.date._getGregorianBundle(locale);
-	var str = [];
-	var sauce = dojo.lang.curry(this, formatPattern, dateObject);
-	if(options.selector == "yearOnly"){
-		// Special case as this is not yet driven by CLDR data
-		var year = dateObject.getFullYear();
-		if(locale.match(/^zh|^ja/)){
-			year += "\u5E74";
-		}
-		return year;
-	}
-	if(options.selector != "timeOnly"){
-		var datePattern = options.datePattern || bundle["dateFormat-"+formatLength];
-		if(datePattern){str.push(_processPattern(datePattern, sauce));}
-	}
-	if(options.selector != "dateOnly"){
-		var timePattern = options.timePattern || bundle["timeFormat-"+formatLength];
-		if(timePattern){str.push(_processPattern(timePattern, sauce));}
-	}
-	var result = str.join(" "); //TODO: use locale-specific pattern to assemble date + time
-	return result; /*String*/
-};
-
-dojo.date.parse = function(/*String*/value, /*Object?*/options){
-//
-// summary:
-//		Convert a properly formatted string to a primitive Date object,
-//		using locale-specific settings.
-//
-// description:
-//		Create a Date object from a string using a known localized pattern.
-//		By default, this method parses looking for both date and time in the string.
-//		Formatting patterns are chosen appropriate to the locale.  Different
-//		formatting lengths may be chosen, with "full" used by default.
-//		Custom patterns may be used or registered with translations using
-//		the addCustomBundle method.
-//		Formatting patterns are implemented using the syntax described at
-//		http://www.unicode.org/reports/tr35/#Date_Format_Patterns
-//
-// value:
-//		A string representation of a date
-//
-// options: object {selector: string, formatLength: string, datePattern: string, timePattern: string, locale: string, strict: boolean}
-//		selector- choice of timeOnly, dateOnly, dateTime (default: dateOnly)
-//		formatLength- choice of long, short, medium or full (plus any custom additions).  Defaults to 'full'
-//		datePattern,timePattern- override pattern with this string
-//		am,pm- override strings for am/pm in times
-//		locale- override the locale used to determine formatting rules
-//		strict- strict parsing, off by default
-//
-
-	options = options || {};
-	var locale = dojo.hostenv.normalizeLocale(options.locale);
-	var info = dojo.date._getGregorianBundle(locale);
-	var formatLength = options.formatLength || 'full';
-	if(!options.selector){ options.selector = 'dateOnly'; }
-	var datePattern = options.datePattern || info["dateFormat-" + formatLength];
-	var timePattern = options.timePattern || info["timeFormat-" + formatLength];
-
-	var pattern;
-	if(options.selector == 'dateOnly'){
-		pattern = datePattern;
-	}
-	else if(options.selector == 'timeOnly'){
-		pattern = timePattern;
-	}else if(options.selector == 'dateTime'){
-		pattern = datePattern + ' ' + timePattern; //TODO: use locale-specific pattern to assemble date + time
-	}else{
-		var msg = "dojo.date.parse: Unknown selector param passed: '" + options.selector + "'.";
-		msg += " Defaulting to date pattern.";
-		dojo.debug(msg);
-		pattern = datePattern;
-	}
-
-	var groups = [];
-	var dateREString = _processPattern(pattern, dojo.lang.curry(this, _buildDateTimeRE, groups, info, options));
-	var dateRE = new RegExp("^" + dateREString + "$");
-
-	var match = dateRE.exec(value);
-	if(!match){
-		return null;
-	}
-
-	var widthList = ['abbr', 'wide', 'narrow'];
-	//1972 is a leap year.  We want to avoid Feb 29 rolling over into Mar 1,
-	//in the cases where the year is parsed after the month and day.
-	var result = new Date(1972, 0);
-	var expected = {};
-	for(var i=1; i<match.length; i++){
-		var grp=groups[i-1];
-		var l=grp.length;
-		var v=match[i];
-		switch(grp.charAt(0)){
-			case 'y':
-				if(l != 2){
-					//interpret year literally, so '5' would be 5 A.D.
-					result.setFullYear(v);
-					expected.year = v;
-				}else{
-					if(v<100){
-						v = Number(v);
-						//choose century to apply, according to a sliding window
-						//of 80 years before and 20 years after present year
-						var year = '' + new Date().getFullYear();
-						var century = year.substring(0, 2) * 100;
-						var yearPart = Number(year.substring(2, 4));
-						var cutoff = Math.min(yearPart + 20, 99);
-						var num = (v < cutoff) ? century + v : century - 100 + v;
-						result.setFullYear(num);
-						expected.year = num;
-					}else{
-						//we expected 2 digits and got more...
-						if(options.strict){
-							return null;
-						}
-						//interpret literally, so '150' would be 150 A.D.
-						//also tolerate '1950', if 'yyyy' input passed to 'yy' format
-						result.setFullYear(v);
-						expected.year = v;
-					}
-				}
-				break;
-			case 'M':
-				if (l>2) {
-					if(!options.strict){
-						//Tolerate abbreviating period in month part
-						v = v.replace(/\./g,'');
-						//Case-insensitive
-						v = v.toLowerCase();
-					}
-					var months = info['months-format-' + widthList[l-3]].concat();
-					for (var j=0; j<months.length; j++){
-						if(!options.strict){
-							//Case-insensitive
-							months[j] = months[j].toLowerCase();
-						}
-						if(v == months[j]){
-							result.setMonth(j);
-							expected.month = j;
-							break;
-						}
-					}
-					if(j==months.length){
-						dojo.debug("dojo.date.parse: Could not parse month name: '" + v + "'.");
-						return null;
-					}
-				}else{
-					result.setMonth(v-1);
-					expected.month = v-1;
-				}
-				break;
-			case 'E':
-			case 'e':
-				if(!options.strict){
-					//Case-insensitive
-					v = v.toLowerCase();
-				}
-				var days = info['days-format-' + widthList[l-3]].concat();
-				for (var j=0; j<days.length; j++){
-					if(!options.strict){
-						//Case-insensitive
-						days[j] = days[j].toLowerCase();
-					}
-					if(v == days[j]){
-						//TODO: not sure what to actually do with this input,
-						//in terms of setting something on the Date obj...?
-						//without more context, can't affect the actual date
-						break;
-					}
-				}
-				if(j==days.length){
-					dojo.debug("dojo.date.parse: Could not parse weekday name: '" + v + "'.");
-					return null;
-				}
-				break;	
-			case 'd':
-				result.setDate(v);
-				expected.date = v;
-				break;
-			case 'a': //am/pm
-				var am = options.am || info.am;
-				var pm = options.pm || info.pm;
-				if(!options.strict){
-					v = v.replace(/\./g,'').toLowerCase();
-					am = am.replace(/\./g,'').toLowerCase();
-					pm = pm.replace(/\./g,'').toLowerCase();
-				}
-				if(options.strict && v != am && v != pm){
-					dojo.debug("dojo.date.parse: Could not parse am/pm part.");
-					return null;
-				}
-				var hours = result.getHours();
-				if(v == pm && hours < 12){
-					result.setHours(hours + 12); //e.g., 3pm -> 15
-				} else if(v == am && hours == 12){
-					result.setHours(0); //12am -> 0
-				}
-				break;
-			case 'K': //hour (1-24)
-				if(v==24){v=0;}
-				// fallthrough...
-			case 'h': //hour (1-12)
-			case 'H': //hour (0-23)
-			case 'k': //hour (0-11)
-				//TODO: strict bounds checking, padding
-				if(v>23){
-					dojo.debug("dojo.date.parse: Illegal hours value");
-					return null;
-				}
-
-				//in the 12-hour case, adjusting for am/pm requires the 'a' part
-				//which for now we will assume always comes after the 'h' part
-				result.setHours(v);
-				break;
-			case 'm': //minutes
-				result.setMinutes(v);
-				break;
-			case 's': //seconds
-				result.setSeconds(v);
-				break;
-			case 'S': //milliseconds
-				result.setMilliseconds(v);
-				break;
-			default:
-				dojo.unimplemented("dojo.date.parse: unsupported pattern char=" + grp.charAt(0));
-		}
-	}
-
-	//validate parse date fields versus input date fields
-	if(expected.year && result.getFullYear() != expected.year){
-		dojo.debug("Parsed year: '" + result.getFullYear() + "' did not match input year: '" + expected.year + "'.");
-		return null;
-	}
-	if(expected.month && result.getMonth() != expected.month){
-		dojo.debug("Parsed month: '" + result.getMonth() + "' did not match input month: '" + expected.month + "'.");
-		return null;
-	}
-	if(expected.date && result.getDate() != expected.date){
-		dojo.debug("Parsed day of month: '" + result.getDate() + "' did not match input day of month: '" + expected.date + "'.");
-		return null;
-	}
-
-	//TODO: implement a getWeekday() method in order to test 
-	//validity of input strings containing 'EEE' or 'EEEE'...
-
-	return result; /*Date*/
-};
-
-function _processPattern(pattern, applyPattern, applyLiteral, applyAll){
-	// Process a pattern with literals in it
-	// Break up on single quotes, treat every other one as a literal, except '' which becomes '
-	var identity = function(x){return x;};
-	applyPattern = applyPattern || identity;
-	applyLiteral = applyLiteral || identity;
-	applyAll = applyAll || identity;
-
-	//split on single quotes (which escape literals in date format strings) 
-	//but preserve escaped single quotes (e.g., o''clock)
-	var chunks = pattern.match(/(''|[^'])+/g); 
-	var literal = false;
-
-	for(var i=0; i<chunks.length; i++){
-		if(!chunks[i]){
-			chunks[i]='';
-		} else {
-			chunks[i]=(literal ? applyLiteral : applyPattern)(chunks[i]);
-			literal = !literal;
-		}
-	}
-	return applyAll(chunks.join(''));
-}
-
-function _buildDateTimeRE(groups, info, options, pattern){
-	return pattern.replace(/([a-z])\1*/ig, function(match){
-		// Build a simple regexp without parenthesis, which would ruin the match list
-		var s;
-		var c = match.charAt(0);
-		var l = match.length;
-		switch(c){
-			case 'y':
-				s = '\\d' + ((l==2) ? '{2,4}' : '+');
-				break;
-			case 'M':
-				s = (l>2) ? '\\S+' : '\\d{1,2}';
-				break;
-			case 'd':
-				s = '\\d{1,2}';
-				break;
-		    case 'E':
-				s = '\\S+';
-				break;
-			case 'h': 
-			case 'H': 
-			case 'K': 
-			case 'k':
-				s = '\\d{1,2}';
-				break;
-			case 'm':
-			case 's':
-				s = '[0-5]\\d';
-				break;
-			case 'S':
-				s = '\\d{1,3}';
-				break;
-			case 'a':
-				var am = options.am || info.am || 'AM';
-				var pm = options.pm || info.pm || 'PM';
-				if(options.strict){
-					s = am + '|' + pm;
-				}else{
-					s = am;
-					s += (am != am.toLowerCase()) ? '|' + am.toLowerCase() : '';
-					s += '|';
-					s += (pm != pm.toLowerCase()) ? pm + '|' + pm.toLowerCase() : pm;
-				}
-				break;
-			default:
-				dojo.unimplemented("parse of date format, pattern=" + pattern);
-		}
-
-		if(groups){ groups.push(match); }
-
-//FIXME: replace whitespace within final regexp with more flexible whitespace match instead?
-		//tolerate whitespace
-		return '\\s*(' + s + ')\\s*';
-	});
-}
-})();
-
-//TODO: try to common strftime and format code somehow?
-
-dojo.date.strftime = function(/*Date*/dateObject, /*String*/format, /*String?*/locale){
-//
-// summary:
-//		Formats the date object using the specifications of the POSIX strftime function
-//
-// description:
-//		see <http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html>
-
-	// zero pad
-	var padChar = null;
-	function _(s, n){
-		return dojo.string.pad(s, n || 2, padChar || "0");
-	}
-
-	var info = dojo.date._getGregorianBundle(locale);
-
-	function $(property){
-		switch (property){
-			case "a": // abbreviated weekday name according to the current locale
-				return dojo.date.getDayShortName(dateObject, locale);
-
-			case "A": // full weekday name according to the current locale
-				return dojo.date.getDayName(dateObject, locale);
-
-			case "b":
-			case "h": // abbreviated month name according to the current locale
-				return dojo.date.getMonthShortName(dateObject, locale);
-				
-			case "B": // full month name according to the current locale
-				return dojo.date.getMonthName(dateObject, locale);
-				
-			case "c": // preferred date and time representation for the current
-				      // locale
-				return dojo.date.format(dateObject, {locale: locale});
-
-			case "C": // century number (the year divided by 100 and truncated
-				      // to an integer, range 00 to 99)
-				return _(Math.floor(dateObject.getFullYear()/100));
-				
-			case "d": // day of the month as a decimal number (range 01 to 31)
-				return _(dateObject.getDate());
-				
-			case "D": // same as %m/%d/%y
-				return $("m") + "/" + $("d") + "/" + $("y");
-					
-			case "e": // day of the month as a decimal number, a single digit is
-				      // preceded by a space (range ' 1' to '31')
-				if(padChar == null){ padChar = " "; }
-				return _(dateObject.getDate());
-			
-			case "f": // month as a decimal number, a single digit is
-							// preceded by a space (range ' 1' to '12')
-				if(padChar == null){ padChar = " "; }
-				return _(dateObject.getMonth()+1);				
-			
-			case "g": // like %G, but without the century.
-				break;
-			
-			case "G": // The 4-digit year corresponding to the ISO week number
-				      // (see %V).  This has the same format and value as %Y,
-				      // except that if the ISO week number belongs to the
-				      // previous or next year, that year is used instead.
-				dojo.unimplemented("unimplemented modifier 'G'");
-				break;
-			
-			case "F": // same as %Y-%m-%d
-				return $("Y") + "-" + $("m") + "-" + $("d");
-				
-			case "H": // hour as a decimal number using a 24-hour clock (range
-				      // 00 to 23)
-				return _(dateObject.getHours());
-				
-			case "I": // hour as a decimal number using a 12-hour clock (range
-				      // 01 to 12)
-				return _(dateObject.getHours() % 12 || 12);
-				
-			case "j": // day of the year as a decimal number (range 001 to 366)
-				return _(dojo.date.getDayOfYear(dateObject), 3);
-				
-			case "k": // Hour as a decimal number using a 24-hour clock (range
-					  // 0 to 23 (space-padded))
-				if (padChar == null) { padChar = " "; }
-				return _(dateObject.getHours());
-
-			case "l": // Hour as a decimal number using a 12-hour clock (range
-					  // 1 to 12 (space-padded))
-				if (padChar == null) { padChar = " "; }
-				return _(dateObject.getHours() % 12 || 12);
-			
-			case "m": // month as a decimal number (range 01 to 12)
-				return _(dateObject.getMonth() + 1);
-				
-			case "M": // minute as a decimal number
-				return _(dateObject.getMinutes());
-			
-			case "n":
-				return "\n";
-
-			case "p": // either `am' or `pm' according to the given time value,
-				      // or the corresponding strings for the current locale
-				return info[dateObject.getHours() < 12 ? "am" : "pm"];
-				
-			case "r": // time in a.m. and p.m. notation
-				return $("I") + ":" + $("M") + ":" + $("S") + " " + $("p");
-				
-			case "R": // time in 24 hour notation
-				return $("H") + ":" + $("M");
-				
-			case "S": // second as a decimal number
-				return _(dateObject.getSeconds());
-
-			case "t":
-				return "\t";
-
-			case "T": // current time, equal to %H:%M:%S
-				return $("H") + ":" + $("M") + ":" + $("S");
-				
-			case "u": // weekday as a decimal number [1,7], with 1 representing
-				      // Monday
-				return String(dateObject.getDay() || 7);
-				
-			case "U": // week number of the current year as a decimal number,
-				      // starting with the first Sunday as the first day of the
-				      // first week
-				return _(dojo.date.getWeekOfYear(dateObject));
-
-			case "V": // week number of the year (Monday as the first day of the
-				      // week) as a decimal number [01,53]. If the week containing
-				      // 1 January has four or more days in the new year, then it 
-				      // is considered week 1. Otherwise, it is the last week of 
-				      // the previous year, and the next week is week 1.
-				return _(dojo.date.getIsoWeekOfYear(dateObject));
-				
-			case "W": // week number of the current year as a decimal number,
-				      // starting with the first Monday as the first day of the
-				      // first week
-				return _(dojo.date.getWeekOfYear(dateObject, 1));
-				
-			case "w": // day of the week as a decimal, Sunday being 0
-				return String(dateObject.getDay());
-
-			case "x": // preferred date representation for the current locale
-				      // without the time
-				return dojo.date.format(dateObject, {selector:'dateOnly', locale:locale});
-
-			case "X": // preferred time representation for the current locale
-				      // without the date
-				return dojo.date.format(dateObject, {selector:'timeOnly', locale:locale});
-
-			case "y": // year as a decimal number without a century (range 00 to
-				      // 99)
-				return _(dateObject.getFullYear()%100);
-				
-			case "Y": // year as a decimal number including the century
-				return String(dateObject.getFullYear());
-			
-			case "z": // time zone or name or abbreviation
-				var timezoneOffset = dateObject.getTimezoneOffset();
-				return (timezoneOffset > 0 ? "-" : "+") + 
-					_(Math.floor(Math.abs(timezoneOffset)/60)) + ":" +
-					_(Math.abs(timezoneOffset)%60);
-
-			case "Z": // time zone or name or abbreviation
-				return dojo.date.getTimezoneName(dateObject);
-			
-			case "%":
-				return "%";
-		}
-	}
-
-	// parse the formatting string and construct the resulting string
-	var string = "";
-	var i = 0;
-	var index = 0;
-	var switchCase = null;
-	while ((index = format.indexOf("%", i)) != -1){
-		string += format.substring(i, index++);
-		
-		// inspect modifier flag
-		switch (format.charAt(index++)) {
-			case "_": // Pad a numeric result string with spaces.
-				padChar = " "; break;
-			case "-": // Do not pad a numeric result string.
-				padChar = ""; break;
-			case "0": // Pad a numeric result string with zeros.
-				padChar = "0"; break;
-			case "^": // Convert characters in result string to uppercase.
-				switchCase = "upper"; break;
-			case "*": // Convert characters in result string to lowercase
-				switchCase = "lower"; break;
-			case "#": // Swap the case of the result string.
-				switchCase = "swap"; break;
-			default: // no modifier flag so decrement the index
-				padChar = null; index--; break;
-		}
-
-		// toggle case if a flag is set
-		var property = $(format.charAt(index++));
-		switch (switchCase){
-			case "upper":
-				property = property.toUpperCase();
-				break;
-			case "lower":
-				property = property.toLowerCase();
-				break;
-			case "swap": // Upper to lower, and versey-vicea
-				var compareString = property.toLowerCase();
-				var swapString = '';
-				var j = 0;
-				var ch = '';
-				while (j < property.length){
-					ch = property.charAt(j);
-					swapString += (ch == compareString.charAt(j)) ?
-						ch.toUpperCase() : ch.toLowerCase();
-					j++;
-				}
-				property = swapString;
-				break;
-			default:
-				break;
-		}
-		switchCase = null;
-		
-		string += property;
-		i = index;
-	}
-	string += format.substring(i);
-	
-	return string; // String
-};
-
-(function(){
-var _customFormats = [];
-dojo.date.addCustomFormats = function(/*String*/packageName, /*String*/bundleName){
-//
-// summary:
-//		Add a reference to a bundle containing localized custom formats to be
-//		used by date/time formatting and parsing routines.
-//
-// description:
-//		The user may add custom localized formats where the bundle has properties following the
-//		same naming convention used by dojo for the CLDR data: dateFormat-xxxx / timeFormat-xxxx
-//		The pattern string should match the format used by the CLDR.
-//		See dojo.date.format for details.
-//		The resources must be loaded by dojo.requireLocalization() prior to use
-
-	_customFormats.push({pkg:packageName,name:bundleName});
-};
-
-dojo.date._getGregorianBundle = function(/*String*/locale){
-	var gregorian = {};
-	dojo.lang.forEach(_customFormats, function(desc){
-		var bundle = dojo.i18n.getLocalization(desc.pkg, desc.name, locale);
-		gregorian = dojo.lang.mixin(gregorian, bundle);
-	}, this);
-	return gregorian; /*Object*/
-};
-})();
-
-dojo.date.addCustomFormats("dojo.i18n.calendar","gregorian");
-dojo.date.addCustomFormats("dojo.i18n.calendar","gregorianExtras");
-
-dojo.date.getNames = function(/*String*/item, /*String*/type, /*String?*/use, /*String?*/locale){
-//
-// summary:
-//		Used to get localized strings for day or month names.
-//
-// item: 'months' || 'days'
-// type: 'wide' || 'narrow' || 'abbr' (e.g. "Monday", "Mon", or "M" respectively, in English)
-// use: 'standAlone' || 'format' (default)
-// locale: override locale used to find the names
-
-	var label;
-	var lookup = dojo.date._getGregorianBundle(locale);
-	var props = [item, use, type];
-	if(use == 'standAlone'){
-		label = lookup[props.join('-')];
-	}
-	props[1] = 'format';
-
-	// return by copy so changes won't be made accidentally to the in-memory model
-	return (label || lookup[props.join('-')]).concat(); /*Array*/
-};
-
-// Convenience methods
-
-dojo.date.getDayName = function(/*Date*/dateObject, /*String?*/locale){
-// summary: gets the full localized day of the week corresponding to the date object
-	return dojo.date.getNames('days', 'wide', 'format', locale)[dateObject.getDay()]; /*String*/
-};
-
-dojo.date.getDayShortName = function(/*Date*/dateObject, /*String?*/locale){
-// summary: gets the abbreviated localized day of the week corresponding to the date object
-	return dojo.date.getNames('days', 'abbr', 'format', locale)[dateObject.getDay()]; /*String*/
-};
-
-dojo.date.getMonthName = function(/*Date*/dateObject, /*String?*/locale){
-// summary: gets the full localized month name corresponding to the date object
-	return dojo.date.getNames('months', 'wide', 'format', locale)[dateObject.getMonth()]; /*String*/
-};
-
-dojo.date.getMonthShortName = function(/*Date*/dateObject, /*String?*/locale){
-// summary: gets the abbreviated localized month name corresponding to the date object
-	return dojo.date.getNames('months', 'abbr', 'format', locale)[dateObject.getMonth()]; /*String*/
-};
-
-//FIXME: not localized
-dojo.date.toRelativeString = function(/*Date*/dateObject){
-// summary:
-//	Returns an description in English of the date relative to the current date.  Note: this is not localized yet.  English only.
-//
-// description: Example returns:
-//	 - "1 minute ago"
-//	 - "4 minutes ago"
-//	 - "Yesterday"
-//	 - "2 days ago"
-
-	var now = new Date();
-	var diff = (now - dateObject) / 1000;
-	var end = " ago";
-	var future = false;
-	if(diff < 0){
-		future = true;
-		end = " from now";
-		diff = -diff;
-	}
-
-	if(diff < 60){
-		diff = Math.round(diff);
-		return diff + " second" + (diff == 1 ? "" : "s") + end;
-	}
-	if(diff < 60*60){
-		diff = Math.round(diff/60);
-		return diff + " minute" + (diff == 1 ? "" : "s") + end;
-	}
-	if(diff < 60*60*24){
-		diff = Math.round(diff/3600);
-		return diff + " hour" + (diff == 1 ? "" : "s") + end;
-	}
-	if(diff < 60*60*24*7){
-		diff = Math.round(diff/(3600*24));
-		if(diff == 1){
-			return future ? "Tomorrow" : "Yesterday";
-		}else{
-			return diff + " days" + end;
-		}
-	}
-	return dojo.date.format(dateObject); // String
-};
-
-//FIXME: SQL methods can probably be moved to a different module without i18n deps
-
-dojo.date.toSql = function(/*Date*/dateObject, /*Boolean?*/noTime){
-// summary:
-//	Convert a Date to a SQL string
-// noTime: whether to ignore the time portion of the Date.  Defaults to false.
-
-	return dojo.date.strftime(dateObject, "%F" + !noTime ? " %T" : ""); // String
-};
-
-dojo.date.fromSql = function(/*String*/sqlDate){
-// summary:
-//	Convert a SQL date string to a JavaScript Date object
-
-	var parts = sqlDate.split(/[\- :]/g);
-	while(parts.length < 6){
-		parts.push(0);
-	}
-	return new Date(parts[0], (parseInt(parts[1],10)-1), parts[2], parts[3], parts[4], parts[5]); // Date
-};
-
-dojo.provide("dojo.date.serialize");
-
-dojo.require("dojo.string.common");
-
-/* ISO 8601 Functions
- *********************/
-
-dojo.date.setIso8601 = function(/*Date*/dateObject, /*String*/formattedString){
-	// summary: sets a Date object based on an ISO 8601 formatted string (uses date and time)
-	var comps = (formattedString.indexOf("T") == -1) ? formattedString.split(" ") : formattedString.split("T");
-	dateObject = dojo.date.setIso8601Date(dateObject, comps[0]);
-	if(comps.length == 2){ dateObject = dojo.date.setIso8601Time(dateObject, comps[1]); }
-	return dateObject; /* Date or null */
-};
-
-dojo.date.fromIso8601 = function(/*String*/formattedString){
-	// summary: returns a Date object based on an ISO 8601 formatted string (uses date and time)
-	return dojo.date.setIso8601(new Date(0, 0), formattedString);
-};
-
-dojo.date.setIso8601Date = function(/*String*/dateObject, /*String*/formattedString){
-	// summary: sets a Date object based on an ISO 8601 formatted string (date only)
-	var regexp = "^([0-9]{4})((-?([0-9]{2})(-?([0-9]{2}))?)|" +
-			"(-?([0-9]{3}))|(-?W([0-9]{2})(-?([1-7]))?))?$";
-	var d = formattedString.match(new RegExp(regexp));
-	if(!d){
-		dojo.debug("invalid date string: " + formattedString);
-		return null; // null
-	}
-	var year = d[1];
-	var month = d[4];
-	var date = d[6];
-	var dayofyear = d[8];
-	var week = d[10];
-	var dayofweek = d[12] ? d[12] : 1;
-
-	dateObject.setFullYear(year);
-
-	if(dayofyear){
-		dateObject.setMonth(0);
-		dateObject.setDate(Number(dayofyear));
-	}
-	else if(week){
-		dateObject.setMonth(0);
-		dateObject.setDate(1);
-		var gd = dateObject.getDay();
-		var day =  gd ? gd : 7;
-		var offset = Number(dayofweek) + (7 * Number(week));
-		
-		if(day <= 4){ dateObject.setDate(offset + 1 - day); }
-		else{ dateObject.setDate(offset + 8 - day); }
-	} else{
-		if(month){
-			dateObject.setDate(1);
-			dateObject.setMonth(month - 1); 
-		}
-		if(date){ dateObject.setDate(date); }
-	}
-	
-	return dateObject; // Date
-};
-
-dojo.date.fromIso8601Date = function(/*String*/formattedString){
-	// summary: returns a Date object based on an ISO 8601 formatted string (date only)
-	return dojo.date.setIso8601Date(new Date(0, 0), formattedString);
-};
-
-dojo.date.setIso8601Time = function(/*Date*/dateObject, /*String*/formattedString){
-	// summary: sets a Date object based on an ISO 8601 formatted string (time only)
-
-	// first strip timezone info from the end
-	var timezone = "Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$";
-	var d = formattedString.match(new RegExp(timezone));
-
-	var offset = 0; // local time if no tz info
-	if(d){
-		if(d[0] != 'Z'){
-			offset = (Number(d[3]) * 60) + Number(d[5]);
-			offset *= ((d[2] == '-') ? 1 : -1);
-		}
-		offset -= dateObject.getTimezoneOffset();
-		formattedString = formattedString.substr(0, formattedString.length - d[0].length);
-	}
-
-	// then work out the time
-	var regexp = "^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(\.([0-9]+))?)?)?$";
-	d = formattedString.match(new RegExp(regexp));
-	if(!d){
-		dojo.debug("invalid time string: " + formattedString);
-		return null; // null
-	}
-	var hours = d[1];
-	var mins = Number((d[3]) ? d[3] : 0);
-	var secs = (d[5]) ? d[5] : 0;
-	var ms = d[7] ? (Number("0." + d[7]) * 1000) : 0;
-
-	dateObject.setHours(hours);
-	dateObject.setMinutes(mins);
-	dateObject.setSeconds(secs);
-	dateObject.setMilliseconds(ms);
-
-	if(offset !== 0){
-		dateObject.setTime(dateObject.getTime() + offset * 60000);
-	}	
-	return dateObject; // Date
-};
-
-dojo.date.fromIso8601Time = function(/*String*/formattedString){
-	// summary: returns a Date object based on an ISO 8601 formatted string (date only)
-	return dojo.date.setIso8601Time(new Date(0, 0), formattedString);
-};
-
-
-/* RFC-3339 Date Functions
- *************************/
-
-dojo.date.toRfc3339 = function(/*Date?*/dateObject, /*String?*/selector){
-//	summary:
-//		Format a JavaScript Date object as a string according to RFC 3339
-//
-//	dateObject:
-//		A JavaScript date, or the current date and time, by default
-//
-//	selector:
-//		"dateOnly" or "timeOnly" to format selected portions of the Date object.
-//		Date and time will be formatted by default.
-
-//FIXME: tolerate Number, string input?
-	if(!dateObject){
-		dateObject = new Date();
-	}
-
-	var _ = dojo.string.pad;
-	var formattedDate = [];
-	if(selector != "timeOnly"){
-		var date = [_(dateObject.getFullYear(),4), _(dateObject.getMonth()+1,2), _(dateObject.getDate(),2)].join('-');
-		formattedDate.push(date);
-	}
-	if(selector != "dateOnly"){
-		var time = [_(dateObject.getHours(),2), _(dateObject.getMinutes(),2), _(dateObject.getSeconds(),2)].join(':');
-		var timezoneOffset = dateObject.getTimezoneOffset();
-		time += (timezoneOffset > 0 ? "-" : "+") + 
-					_(Math.floor(Math.abs(timezoneOffset)/60),2) + ":" +
-					_(Math.abs(timezoneOffset)%60,2);
-		formattedDate.push(time);
-	}
-	return formattedDate.join('T'); // String
-};
-
-dojo.date.fromRfc3339 = function(/*String*/rfcDate){
-//	summary:
-//		Create a JavaScript Date object from a string formatted according to RFC 3339
-//
-//	rfcDate:
-//		A string such as 2005-06-30T08:05:00-07:00
-//		"any" is also supported in place of a time.
-
-	// backwards compatible support for use of "any" instead of just not 
-	// including the time
-	if(rfcDate.indexOf("Tany")!=-1){
-		rfcDate = rfcDate.replace("Tany","");
-	}
-	var dateObject = new Date();
-	return dojo.date.setIso8601(dateObject, rfcDate); // Date or null
-};
-
-dojo.provide("dojo.validate.datetime");
-
-
-/**
-  Validates a time value in any International format.
-  The value can be validated against one format or one of multiple formats.
-
-  Format
-  h        12 hour, no zero padding.
-  hh       12 hour, has leading zero.
-  H        24 hour, no zero padding.
-  HH       24 hour, has leading zero.
-  m        minutes, no zero padding.
-  mm       minutes, has leading zero.
-  s        seconds, no zero padding.
-  ss       seconds, has leading zero.
-  All other characters must appear literally in the expression.
-
-  Example
-    "h:m:s t"  ->   2:5:33 PM
-    "HH:mm:ss" ->  14:05:33
-
-  @param value  A string.
-  @param flags  An object.
-    flags.format  A string or an array of strings.  Default is "h:mm:ss t".
-    flags.amSymbol  The symbol used for AM.  Default is "AM".
-    flags.pmSymbol  The symbol used for PM.  Default is "PM".
-  @return  true or false
-*/
-dojo.validate.isValidTime = function(value, flags) {
-	dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5");
-	var re = new RegExp("^" + dojo.regexp.time(flags) + "$", "i");
-	return re.test(value);
-}
-
-/**
-  Validates 12-hour time format.
-  Zero-padding is not allowed for hours, required for minutes and seconds.
-  Seconds are optional.
-
-  @param value  A string.
-  @return  true or false
-*/
-dojo.validate.is12HourTime = function(value) {
-	dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5");
-	return dojo.validate.isValidTime(value, {format: ["h:mm:ss t", "h:mm t"]});
-}
-
-/**
-  Validates 24-hour military time format.
-  Zero-padding is required for hours, minutes, and seconds.
-  Seconds are optional.
-
-  @param value  A string.
-  @return  true or false
-*/
-dojo.validate.is24HourTime = function(value) {
-	dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5");
-	return dojo.validate.isValidTime(value, {format: ["HH:mm:ss", "HH:mm"]} );
-}
-
-/**
-  Returns true if the date conforms to the format given and is a valid date. Otherwise returns false.
-
-  @param dateValue  A string for the date.
-  @param format  A string, default is  "MM/DD/YYYY".
-  @return  true or false
-
-  Accepts any type of format, including ISO8601.
-  All characters in the format string are treated literally except the following tokens:
-
-  YYYY - matches a 4 digit year
-  M - matches a non zero-padded month
-  MM - matches a zero-padded month
-  D -  matches a non zero-padded date
-  DD -  matches a zero-padded date
-  DDD -  matches an ordinal date, 001-365, and 366 on leapyear
-  ww - matches week of year, 01-53
-  d - matches day of week, 1-7
-
-  Examples: These are all today's date.
-
-  Date          Format
-  2005-W42-3    YYYY-Www-d
-  2005-292      YYYY-DDD
-  20051019      YYYYMMDD
-  10/19/2005    M/D/YYYY
-  19.10.2005    D.M.YYYY
-*/
-dojo.validate.isValidDate = function(dateValue, format) {
-	dojo.deprecated("dojo.validate.datetime", "use dojo.date.parse instead", "0.5");
-	// Default is the American format
-	if (typeof format == "object" && typeof format.format == "string"){ format = format.format; }
-	if (typeof format != "string") { format = "MM/DD/YYYY"; }
-
-	// Create a literal regular expression based on format
-	var reLiteral = format.replace(/([$^.*+?=!:|\/\\\(\)\[\]\{\}])/g, "\\$1");
-
-	// Convert all the tokens to RE elements
-	reLiteral = reLiteral.replace( "YYYY", "([0-9]{4})" );
-	reLiteral = reLiteral.replace( "MM", "(0[1-9]|10|11|12)" );
-	reLiteral = reLiteral.replace( "M", "([1-9]|10|11|12)" );
-	reLiteral = reLiteral.replace( "DDD", "(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])" );
-	reLiteral = reLiteral.replace( "DD", "(0[1-9]|[12][0-9]|30|31)" );
-	reLiteral = reLiteral.replace( "D", "([1-9]|[12][0-9]|30|31)" );
-	reLiteral = reLiteral.replace( "ww", "(0[1-9]|[1-4][0-9]|5[0-3])" );
-	reLiteral = reLiteral.replace( "d", "([1-7])" );
-
-	// Anchor pattern to begining and end of string
-	reLiteral = "^" + reLiteral + "$";
-
-	// Dynamic RE that parses the original format given
-	var re = new RegExp(reLiteral);
-	
-	// Test if date is in a valid format
-	if (!re.test(dateValue))  return false;
-
-	// Parse date to get elements and check if date is valid
-	// Assume valid values for date elements not given.
-	var year = 0, month = 1, date = 1, dayofyear = 1, week = 1, day = 1;
-
-	// Capture tokens
-	var tokens = format.match( /(YYYY|MM|M|DDD|DD|D|ww|d)/g );
-
-	// Capture date values
-	var values = re.exec(dateValue);
-
-	// Match up tokens with date values
-	for (var i = 0; i < tokens.length; i++) {
-		switch (tokens[i]) {
-		case "YYYY":
-			year = Number(values[i+1]); break;
-		case "M":
-		case "MM":
-			month = Number(values[i+1]); break;
-		case "D":
-		case "DD":
-			date = Number(values[i+1]); break;
-		case "DDD":
-			dayofyear = Number(values[i+1]); break;
-		case "ww":
-			week = Number(values[i+1]); break;
-		case "d":
-			day = Number(values[i+1]); break;
-		}
-	}
-
-	// Leap years are divisible by 4, but not by 100, unless by 400
-	var leapyear = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
-
-	// 31st of a month with 30 days
-	if (date == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) return false; 
-
-	// February 30th or 31st
-	if (date >= 30 && month == 2) return false; 
-
-	// February 29th outside a leap year
-	if (date == 29 && month == 2 && !leapyear) return false; 
-	if (dayofyear == 366 && !leapyear)  return false;
-
-	return true;
-}
-
-dojo.provide("dojo.validate.web");
-
-
-dojo.validate.isIpAddress = function(/*String*/value, /*Object?*/flags) {
-	// summary: Validates an IP address
-	//
-	// description:
-	//  Supports 5 formats for IPv4: dotted decimal, dotted hex, dotted octal, decimal and hexadecimal.
-	//  Supports 2 formats for Ipv6.
-	//
-	// value  A string.
-	// flags  An object.  All flags are boolean with default = true.
-	//    flags.allowDottedDecimal  Example, 207.142.131.235.  No zero padding.
-	//    flags.allowDottedHex  Example, 0x18.0x11.0x9b.0x28.  Case insensitive.  Zero padding allowed.
-	//    flags.allowDottedOctal  Example, 0030.0021.0233.0050.  Zero padding allowed.
-	//    flags.allowDecimal  Example, 3482223595.  A decimal number between 0-4294967295.
-	//    flags.allowHex  Example, 0xCF8E83EB.  Hexadecimal number between 0x0-0xFFFFFFFF.
-	//      Case insensitive.  Zero padding allowed.
-	//    flags.allowIPv6   IPv6 address written as eight groups of four hexadecimal digits.
-	//    flags.allowHybrid   IPv6 address written as six groups of four hexadecimal digits
-	//      followed by the usual 4 dotted decimal digit notation of IPv4. x:x:x:x:x:x:d.d.d.d
-
-	var re = new RegExp("^" + dojo.regexp.ipAddress(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
-
-
-dojo.validate.isUrl = function(/*String*/value, /*Object?*/flags) {
-	// summary: Checks if a string could be a valid URL
-	// value: A string
-	// flags: An object
-	//    flags.scheme  Can be true, false, or [true, false]. 
-	//      This means: required, not allowed, or either.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
-	var re = new RegExp("^" + dojo.regexp.url(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.isEmailAddress = function(/*String*/value, /*Object?*/flags) {
-	// summary: Checks if a string could be a valid email address
-	//
-	// value: A string
-	// flags: An object
-	//    flags.allowCruft  Allow address like <mailto:foo@yahoo.com>.  Default is false.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
-	var re = new RegExp("^" + dojo.regexp.emailAddress(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.isEmailAddressList = function(/*String*/value, /*Object?*/flags) {
-	// summary: Checks if a string could be a valid email address list.
-	//
-	// value  A string.
-	// flags  An object.
-	//    flags.listSeparator  The character used to separate email addresses.  Default is ";", ",", "\n" or " ".
-	//    flags in regexp.emailAddress can be applied.
-	//    flags in regexp.host can be applied.
-	//    flags in regexp.ipAddress can be applied.
-	//    flags in regexp.tld can be applied.
-
-	var re = new RegExp("^" + dojo.regexp.emailAddressList(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.getEmailAddressList = function(/*String*/value, /*Object?*/flags) {
-	// summary: Check if value is an email address list. If an empty list
-	//  is returned, the value didn't pass the test or it was empty.
-	//
-	// value: A string
-	// flags: An object (same as dojo.validate.isEmailAddressList)
-
-	if(!flags) { flags = {}; }
-	if(!flags.listSeparator) { flags.listSeparator = "\\s;,"; }
-
-	if ( dojo.validate.isEmailAddressList(value, flags) ) {
-		return value.split(new RegExp("\\s*[" + flags.listSeparator + "]\\s*")); // Array
-	}
-	return []; // Array
-}
-
-dojo.provide('dojo.validate.creditCard');
-
-dojo.require("dojo.lang.common");
-
-
-/*
-	Validates Credit Cards using account number rules in conjunction with the Luhn algorigthm
-	
- */
-
-dojo.validate.isValidCreditCard = function(/*String|Int*/value, /*String*/ccType){
-	//Summary:
-	//  checks if type matches the # scheme, and if Luhn checksum is accurate (unless its an Enroute card, the checkSum is skipped)
-	
-	//Value: Boolean
-	if(value&&ccType&&((ccType.toLowerCase()=='er'||dojo.validate.isValidLuhn(value))&&(dojo.validate.isValidCreditCardNumber(value,ccType.toLowerCase())))){
-			return true; //Boolean
-	}
-	return false; //Boolean
-}
-dojo.validate.isValidCreditCardNumber = function(/*String|Int*/value,/*String?*/ccType) {
-	//Summary:
-	//  checks if the # matches the pattern for that card or any card types if none is specified
-	//  value == CC #, white spaces and dashes are ignored
-	//  ccType is of the values in cardinfo -- if Omitted it it returns a | delimited string of matching card types, or false if no matches found
-	
-	//Value: Boolean
-	
-	if(typeof value!='string'){
-		value = String(value);
-	}
-	value = value.replace(/[- ]/g,''); //ignore dashes and whitespaces
-	/* 	FIXME: not sure on all the abbreviations for credit cards,below is what each stands for atleast to my knowledge
-		mc: Mastercard
-		ec: Eurocard
-		vi: Visa
-		ax: American Express
-		dc: Diners Club
-		bl: Carte Blanch
-		di: Discover
-		jcb: JCB
-		er: Enroute
-	 */
-	var results=[];
-	var cardinfo = {
-		'mc':'5[1-5][0-9]{14}','ec':'5[1-5][0-9]{14}','vi':'4([0-9]{12}|[0-9]{15})',
-		'ax':'3[47][0-9]{13}', 'dc':'3(0[0-5][0-9]{11}|[68][0-9]{12})',
-		'bl':'3(0[0-5][0-9]{11}|[68][0-9]{12})','di':'6011[0-9]{12}',
-		'jcb':'(3[0-9]{15}|(2131|1800)[0-9]{11})','er':'2(014|149)[0-9]{11}'
-	};
-	if(ccType&&dojo.lang.has(cardinfo,ccType.toLowerCase())){
-		return Boolean(value.match(cardinfo[ccType.toLowerCase()])); // boolean
-	}else{
-		for(var p in cardinfo){
-			if(value.match('^'+cardinfo[p]+'$')!=null){
-				results.push(p);
-			}
-		}
-		return (results.length)?results.join('|'):false; // string | boolean
-	}	
-}
-
-dojo.validate.isValidCvv = function(/*String|Int*/value, /*String*/ccType) {
-	//Summary:
-	//  returns true if the security code (CCV) matches the correct format for supplied ccType
-	
-	//Value: Boolean
-	
-	if(typeof value!='string'){
-		value=String(value);
-	}
-	var format;
-	switch (ccType.toLowerCase()){
-		case 'mc':
-		case 'ec':
-		case 'vi':
-		case 'di':
-			format = '###';
-			break;
-		case 'ax':
-			format = '####';
-			break;
-		default:
-			return false; //Boolean
-	}
-	var flags = {format:format};
-	//FIXME? Why does isNumberFormat take an object for flags when its only parameter is either a string or an array inside the object?
-	if ((value.length == format.length)&&(dojo.validate.isNumberFormat(value, flags))){
-		return true; //Boolean
-	}
-	return false; //Boolean
-}
-
-dojo.provide("dojo.validate.us");
-
-
-dojo.validate.us.isCurrency = function(/*String*/value, /*Object?*/flags){
-	// summary: Validates U.S. currency
-	// value: the representation to check
-	// flags: flags in validate.isCurrency can be applied.
-	return dojo.validate.isCurrency(value, flags); // Boolean
-}
-
-
-dojo.validate.us.isState = function(/*String*/value, /*Object?*/flags){
-	// summary: Validates US state and territory abbreviations.
-	//
-	// value: A two character string
-	// flags: An object
-	//    flags.allowTerritories  Allow Guam, Puerto Rico, etc.  Default is true.
-	//    flags.allowMilitary  Allow military 'states', e.g. Armed Forces Europe (AE).  Default is true.
-
-	var re = new RegExp("^" + dojo.regexp.us.state(flags) + "$", "i");
-	return re.test(value); // Boolean
-}
-
-dojo.validate.us.isPhoneNumber = function(/*String*/value){
-	// summary: Validates 10 US digit phone number for several common formats
-	// value: The telephone number string
-
-	var flags = {
-		format: [
-			"###-###-####",
-			"(###) ###-####",
-			"(###) ### ####",
-			"###.###.####",
-			"###/###-####",
-			"### ### ####",
-			"###-###-#### x#???",
-			"(###) ###-#### x#???",
-			"(###) ### #### x#???",
-			"###.###.#### x#???",
-			"###/###-#### x#???",
-			"### ### #### x#???",
-			"##########"
-		]
-	};
-
-	return dojo.validate.isNumberFormat(value, flags); // Boolean
-}
-
-dojo.validate.us.isSocialSecurityNumber = function(/*String*/value){
-// summary: Validates social security number
-	var flags = {
-		format: [
-			"###-##-####",
-			"### ## ####",
-			"#########"
-		]
-	};
-
-	return dojo.validate.isNumberFormat(value, flags); // Boolean
-}
-
-dojo.validate.us.isZipCode = function(/*String*/value){
-// summary: Validates U.S. zip-code
-	var flags = {
-		format: [
-			"#####-####",
-			"##### ####",
-			"#########",
-			"#####"
-		]
-	};
-
-	return dojo.validate.isNumberFormat(value, flags); // Boolean
-}
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo3.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo3.js
deleted file mode 100644
index d72363e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo3.js
+++ /dev/null
@@ -1,5172 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("layer.widget");
-dojo.provide("dojo.namespaces.dojo");
-dojo.require("dojo.ns");
-(function(){
-var _1={html:{"accordioncontainer":"dojo.widget.AccordionContainer","animatedpng":"dojo.widget.AnimatedPng","button":"dojo.widget.Button","chart":"dojo.widget.Chart","checkbox":"dojo.widget.Checkbox","clock":"dojo.widget.Clock","colorpalette":"dojo.widget.ColorPalette","combobox":"dojo.widget.ComboBox","combobutton":"dojo.widget.Button","contentpane":"dojo.widget.ContentPane","currencytextbox":"dojo.widget.CurrencyTextbox","datepicker":"dojo.widget.DatePicker","datetextbox":"dojo.widget.DateTextbox","debugconsole":"dojo.widget.DebugConsole","dialog":"dojo.widget.Dialog","dropdownbutton":"dojo.widget.Button","dropdowndatepicker":"dojo.widget.DropdownDatePicker","dropdowntimepicker":"dojo.widget.DropdownTimePicker","emaillisttextbox":"dojo.widget.InternetTextbox","emailtextbox":"dojo.widget.InternetTextbox","editor":"dojo.widget.Editor","editor2":"dojo.widget.Editor2","filteringtable":"dojo.widget.FilteringTable","fisheyelist":"dojo.widget.FisheyeList","fisheyelistitem":"dojo.widget.FisheyeList","floatingpane":"dojo.widget.FloatingPane","modalfloatingpane":"dojo.widget.FloatingPane","form":"dojo.widget.Form","googlemap":"dojo.widget.GoogleMap","inlineeditbox":"dojo.widget.InlineEditBox","integerspinner":"dojo.widget.Spinner","integertextbox":"dojo.widget.IntegerTextbox","ipaddresstextbox":"dojo.widget.InternetTextbox","layoutcontainer":"dojo.widget.LayoutContainer","linkpane":"dojo.widget.LinkPane","popupmenu2":"dojo.widget.Menu2","menuitem2":"dojo.widget.Menu2","menuseparator2":"dojo.widget.Menu2","menubar2":"dojo.widget.Menu2","menubaritem2":"dojo.widget.Menu2","pagecontainer":"dojo.widget.PageContainer","pagecontroller":"dojo.widget.PageContainer","popupcontainer":"dojo.widget.PopupContainer","progressbar":"dojo.widget.ProgressBar","radiogroup":"dojo.widget.RadioGroup","realnumbertextbox":"dojo.widget.RealNumberTextbox","regexptextbox":"dojo.widget.RegexpTextbox","repeater":"dojo.widget.Repeater","resizabletextarea":"dojo.widget.ResizableTextarea","richtext":"dojo.widget.RichText","select":"dojo.widget.Select","show":"dojo.widget.Show","showaction":"dojo.widget.ShowAction","showslide":"dojo.widget.ShowSlide","slidervertical":"dojo.widget.Slider","sliderhorizontal":"dojo.widget.Slider","slider":"dojo.widget.Slider","slideshow":"dojo.widget.SlideShow","sortabletable":"dojo.widget.SortableTable","splitcontainer":"dojo.widget.SplitContainer","tabcontainer":"dojo.widget.TabContainer","tabcontroller":"dojo.widget.TabContainer","taskbar":"dojo.widget.TaskBar","textbox":"dojo.widget.Textbox","timepicker":"dojo.widget.TimePicker","timetextbox":"dojo.widget.DateTextbox","titlepane":"dojo.widget.TitlePane","toaster":"dojo.widget.Toaster","toggler":"dojo.widget.Toggler","toolbar":"dojo.widget.Toolbar","toolbarcontainer":"dojo.widget.Toolbar","toolbaritem":"dojo.widget.Toolbar","toolbarbuttongroup":"dojo.widget.Toolbar","toolbarbutton":"dojo.widget.Toolbar","toolbardialog":"dojo.widget.Toolbar","toolbarmenu":"dojo.widget.Toolbar","toolbarseparator":"dojo.widget.Toolbar","toolbarspace":"dojo.widget.Toolbar","toolbarselect":"dojo.widget.Toolbar","toolbarcolordialog":"dojo.widget.Toolbar","tooltip":"dojo.widget.Tooltip","tree":"dojo.widget.Tree","treebasiccontroller":"dojo.widget.TreeBasicController","treecontextmenu":"dojo.widget.TreeContextMenu","treedisablewrapextension":"dojo.widget.TreeDisableWrapExtension","treedociconextension":"dojo.widget.TreeDocIconExtension","treeeditor":"dojo.widget.TreeEditor","treeemphasizeonselect":"dojo.widget.TreeEmphasizeOnSelect","treeexpandtonodeonselect":"dojo.widget.TreeExpandToNodeOnSelect","treelinkextension":"dojo.widget.TreeLinkExtension","treeloadingcontroller":"dojo.widget.TreeLoadingController","treemenuitem":"dojo.widget.TreeContextMenu","treenode":"dojo.widget.TreeNode","treerpccontroller":"dojo.widget.TreeRPCController","treeselector":"dojo.widget.TreeSelector","treetoggleonselect":"dojo.widget.TreeToggleOnSelect","treev3":"dojo.widget.TreeV3","treebasiccontrollerv3":"dojo.widget.TreeBasicControllerV3","treecontextmenuv3":"dojo.widget.TreeContextMenuV3","treedndcontrollerv3":"dojo.widget.TreeDndControllerV3","treeloadingcontrollerv3":"dojo.widget.TreeLoadingControllerV3","treemenuitemv3":"dojo.widget.TreeContextMenuV3","treerpccontrollerv3":"dojo.widget.TreeRpcControllerV3","treeselectorv3":"dojo.widget.TreeSelectorV3","urltextbox":"dojo.widget.InternetTextbox","usphonenumbertextbox":"dojo.widget.UsTextbox","ussocialsecuritynumbertextbox":"dojo.widget.UsTextbox","usstatetextbox":"dojo.widget.UsTextbox","usziptextbox":"dojo.widget.UsTextbox","validationtextbox":"dojo.widget.ValidationTextbox","treeloadingcontroller":"dojo.widget.TreeLoadingController","wizardcontainer":"dojo.widget.Wizard","wizardpane":"dojo.widget.Wizard","yahoomap":"dojo.widget.YahooMap"},svg:{"chart":"dojo.widget.svg.Chart"},vml:{"chart":"dojo.widget.vml.Chart"}};
-dojo.addDojoNamespaceMapping=function(_2,_3){
-_1[_2]=_3;
-};
-function dojoNamespaceResolver(_4,_5){
-if(!_5){
-_5="html";
-}
-if(!_1[_5]){
-return null;
-}
-return _1[_5][_4];
-}
-dojo.registerNamespaceResolver("dojo",dojoNamespaceResolver);
-})();
-dojo.provide("dojo.xml.Parse");
-dojo.require("dojo.dom");
-dojo.xml.Parse=function(){
-var _6=((dojo.render.html.capable)&&(dojo.render.html.ie));
-function getTagName(_7){
-try{
-return _7.tagName.toLowerCase();
-}
-catch(e){
-return "";
-}
-}
-function getDojoTagName(_8){
-var _9=getTagName(_8);
-if(!_9){
-return "";
-}
-if((dojo.widget)&&(dojo.widget.tags[_9])){
-return _9;
-}
-var p=_9.indexOf(":");
-if(p>=0){
-return _9;
-}
-if(_9.substr(0,5)=="dojo:"){
-return _9;
-}
-if(dojo.render.html.capable&&dojo.render.html.ie&&_8.scopeName!="HTML"){
-return _8.scopeName.toLowerCase()+":"+_9;
-}
-if(_9.substr(0,4)=="dojo"){
-return "dojo:"+_9.substring(4);
-}
-var _b=_8.getAttribute("dojoType")||_8.getAttribute("dojotype");
-if(_b){
-if(_b.indexOf(":")<0){
-_b="dojo:"+_b;
-}
-return _b.toLowerCase();
-}
-_b=_8.getAttributeNS&&_8.getAttributeNS(dojo.dom.dojoml,"type");
-if(_b){
-return "dojo:"+_b.toLowerCase();
-}
-try{
-_b=_8.getAttribute("dojo:type");
-}
-catch(e){
-}
-if(_b){
-return "dojo:"+_b.toLowerCase();
-}
-if((dj_global["djConfig"])&&(!djConfig["ignoreClassNames"])){
-var _c=_8.className||_8.getAttribute("class");
-if((_c)&&(_c.indexOf)&&(_c.indexOf("dojo-")!=-1)){
-var _d=_c.split(" ");
-for(var x=0,c=_d.length;x<c;x++){
-if(_d[x].slice(0,5)=="dojo-"){
-return "dojo:"+_d[x].substr(5).toLowerCase();
-}
-}
-}
-}
-return "";
-}
-this.parseElement=function(_10,_11,_12,_13){
-var _14=getTagName(_10);
-if(_6&&_14.indexOf("/")==0){
-return null;
-}
-try{
-var _15=_10.getAttribute("parseWidgets");
-if(_15&&_15.toLowerCase()=="false"){
-return {};
-}
-}
-catch(e){
-}
-var _16=true;
-if(_12){
-var _17=getDojoTagName(_10);
-_14=_17||_14;
-_16=Boolean(_17);
-}
-var _18={};
-_18[_14]=[];
-var pos=_14.indexOf(":");
-if(pos>0){
-var ns=_14.substring(0,pos);
-_18["ns"]=ns;
-if((dojo.ns)&&(!dojo.ns.allow(ns))){
-_16=false;
-}
-}
-if(_16){
-var _1b=this.parseAttributes(_10);
-for(var _15 in _1b){
-if((!_18[_14][_15])||(typeof _18[_14][_15]!="array")){
-_18[_14][_15]=[];
-}
-_18[_14][_15].push(_1b[_15]);
-}
-_18[_14].nodeRef=_10;
-_18.tagName=_14;
-_18.index=_13||0;
-}
-var _1c=0;
-for(var i=0;i<_10.childNodes.length;i++){
-var tcn=_10.childNodes.item(i);
-switch(tcn.nodeType){
-case dojo.dom.ELEMENT_NODE:
-var ctn=getDojoTagName(tcn)||getTagName(tcn);
-if(!_18[ctn]){
-_18[ctn]=[];
-}
-_18[ctn].push(this.parseElement(tcn,true,_12,_1c));
-if((tcn.childNodes.length==1)&&(tcn.childNodes.item(0).nodeType==dojo.dom.TEXT_NODE)){
-_18[ctn][_18[ctn].length-1].value=tcn.childNodes.item(0).nodeValue;
-}
-_1c++;
-break;
-case dojo.dom.TEXT_NODE:
-if(_10.childNodes.length==1){
-_18[_14].push({value:_10.childNodes.item(0).nodeValue});
-}
-break;
-default:
-break;
-}
-}
-return _18;
-};
-this.parseAttributes=function(_20){
-var _21={};
-var _22=_20.attributes;
-var _23,i=0;
-while((_23=_22[i++])){
-if(_6){
-if(!_23){
-continue;
-}
-if((typeof _23=="object")&&(typeof _23.nodeValue=="undefined")||(_23.nodeValue==null)||(_23.nodeValue=="")){
-continue;
-}
-}
-var nn=_23.nodeName.split(":");
-nn=(nn.length==2)?nn[1]:_23.nodeName;
-_21[nn]={value:_23.nodeValue};
-}
-return _21;
-};
-};
-dojo.provide("dojo.widget.Widget");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.ns");
-dojo.require("dojo.widget.Manager");
-dojo.require("dojo.event.*");
-dojo.declare("dojo.widget.Widget",null,function(){
-this.children=[];
-this.extraArgs={};
-},{parent:null,isTopLevel:false,disabled:false,isContainer:false,widgetId:"",widgetType:"Widget",ns:"dojo",getNamespacedType:function(){
-return (this.ns?this.ns+":"+this.widgetType:this.widgetType).toLowerCase();
-},toString:function(){
-return "[Widget "+this.getNamespacedType()+", "+(this.widgetId||"NO ID")+"]";
-},repr:function(){
-return this.toString();
-},enable:function(){
-this.disabled=false;
-},disable:function(){
-this.disabled=true;
-},onResized:function(){
-this.notifyChildrenOfResize();
-},notifyChildrenOfResize:function(){
-for(var i=0;i<this.children.length;i++){
-var _27=this.children[i];
-if(_27.onResized){
-_27.onResized();
-}
-}
-},create:function(_28,_29,_2a,ns){
-if(ns){
-this.ns=ns;
-}
-this.satisfyPropertySets(_28,_29,_2a);
-this.mixInProperties(_28,_29,_2a);
-this.postMixInProperties(_28,_29,_2a);
-dojo.widget.manager.add(this);
-this.buildRendering(_28,_29,_2a);
-this.initialize(_28,_29,_2a);
-this.postInitialize(_28,_29,_2a);
-this.postCreate(_28,_29,_2a);
-return this;
-},destroy:function(_2c){
-if(this.parent){
-this.parent.removeChild(this);
-}
-this.destroyChildren();
-this.uninitialize();
-this.destroyRendering(_2c);
-dojo.widget.manager.removeById(this.widgetId);
-},destroyChildren:function(){
-var _2d;
-var i=0;
-while(this.children.length>i){
-_2d=this.children[i];
-if(_2d instanceof dojo.widget.Widget){
-this.removeChild(_2d);
-_2d.destroy();
-continue;
-}
-i++;
-}
-},getChildrenOfType:function(_2f,_30){
-var ret=[];
-var _32=dojo.lang.isFunction(_2f);
-if(!_32){
-_2f=_2f.toLowerCase();
-}
-for(var x=0;x<this.children.length;x++){
-if(_32){
-if(this.children[x] instanceof _2f){
-ret.push(this.children[x]);
-}
-}else{
-if(this.children[x].widgetType.toLowerCase()==_2f){
-ret.push(this.children[x]);
-}
-}
-if(_30){
-ret=ret.concat(this.children[x].getChildrenOfType(_2f,_30));
-}
-}
-return ret;
-},getDescendants:function(){
-var _34=[];
-var _35=[this];
-var _36;
-while((_36=_35.pop())){
-_34.push(_36);
-if(_36.children){
-dojo.lang.forEach(_36.children,function(_37){
-_35.push(_37);
-});
-}
-}
-return _34;
-},isFirstChild:function(){
-return this===this.parent.children[0];
-},isLastChild:function(){
-return this===this.parent.children[this.parent.children.length-1];
-},satisfyPropertySets:function(_38){
-return _38;
-},mixInProperties:function(_39,_3a){
-if((_39["fastMixIn"])||(_3a["fastMixIn"])){
-for(var x in _39){
-this[x]=_39[x];
-}
-return;
-}
-var _3c;
-var _3d=dojo.widget.lcArgsCache[this.widgetType];
-if(_3d==null){
-_3d={};
-for(var y in this){
-_3d[((new String(y)).toLowerCase())]=y;
-}
-dojo.widget.lcArgsCache[this.widgetType]=_3d;
-}
-var _3f={};
-for(var x in _39){
-if(!this[x]){
-var y=_3d[(new String(x)).toLowerCase()];
-if(y){
-_39[y]=_39[x];
-x=y;
-}
-}
-if(_3f[x]){
-continue;
-}
-_3f[x]=true;
-if((typeof this[x])!=(typeof _3c)){
-if(typeof _39[x]!="string"){
-this[x]=_39[x];
-}else{
-if(dojo.lang.isString(this[x])){
-this[x]=_39[x];
-}else{
-if(dojo.lang.isNumber(this[x])){
-this[x]=new Number(_39[x]);
-}else{
-if(dojo.lang.isBoolean(this[x])){
-this[x]=(_39[x].toLowerCase()=="false")?false:true;
-}else{
-if(dojo.lang.isFunction(this[x])){
-if(_39[x].search(/[^\w\.]+/i)==-1){
-this[x]=dojo.evalObjPath(_39[x],false);
-}else{
-var tn=dojo.lang.nameAnonFunc(new Function(_39[x]),this);
-dojo.event.kwConnect({srcObj:this,srcFunc:x,adviceObj:this,adviceFunc:tn});
-}
-}else{
-if(dojo.lang.isArray(this[x])){
-this[x]=_39[x].split(";");
-}else{
-if(this[x] instanceof Date){
-this[x]=new Date(Number(_39[x]));
-}else{
-if(typeof this[x]=="object"){
-if(this[x] instanceof dojo.uri.Uri){
-this[x]=dojo.uri.dojoUri(_39[x]);
-}else{
-var _41=_39[x].split(";");
-for(var y=0;y<_41.length;y++){
-var si=_41[y].indexOf(":");
-if((si!=-1)&&(_41[y].length>si)){
-this[x][_41[y].substr(0,si).replace(/^\s+|\s+$/g,"")]=_41[y].substr(si+1);
-}
-}
-}
-}else{
-this[x]=_39[x];
-}
-}
-}
-}
-}
-}
-}
-}
-}else{
-this.extraArgs[x.toLowerCase()]=_39[x];
-}
-}
-},postMixInProperties:function(_43,_44,_45){
-},initialize:function(_46,_47,_48){
-return false;
-},postInitialize:function(_49,_4a,_4b){
-return false;
-},postCreate:function(_4c,_4d,_4e){
-return false;
-},uninitialize:function(){
-return false;
-},buildRendering:function(_4f,_50,_51){
-dojo.unimplemented("dojo.widget.Widget.buildRendering, on "+this.toString()+", ");
-return false;
-},destroyRendering:function(){
-dojo.unimplemented("dojo.widget.Widget.destroyRendering");
-return false;
-},addedTo:function(_52){
-},addChild:function(_53){
-dojo.unimplemented("dojo.widget.Widget.addChild");
-return false;
-},removeChild:function(_54){
-for(var x=0;x<this.children.length;x++){
-if(this.children[x]===_54){
-this.children.splice(x,1);
-_54.parent=null;
-break;
-}
-}
-return _54;
-},getPreviousSibling:function(){
-var idx=this.getParentIndex();
-if(idx<=0){
-return null;
-}
-return this.parent.children[idx-1];
-},getSiblings:function(){
-return this.parent.children;
-},getParentIndex:function(){
-return dojo.lang.indexOf(this.parent.children,this,true);
-},getNextSibling:function(){
-var idx=this.getParentIndex();
-if(idx==this.parent.children.length-1){
-return null;
-}
-if(idx<0){
-return null;
-}
-return this.parent.children[idx+1];
-}});
-dojo.widget.lcArgsCache={};
-dojo.widget.tags={};
-dojo.widget.tags.addParseTreeHandler=function(_58){
-dojo.deprecated("addParseTreeHandler",". ParseTreeHandlers are now reserved for components. Any unfiltered DojoML tag without a ParseTreeHandler is assumed to be a widget","0.5");
-};
-dojo.widget.tags["dojo:propertyset"]=function(_59,_5a,_5b){
-var _5c=_5a.parseProperties(_59["dojo:propertyset"]);
-};
-dojo.widget.tags["dojo:connect"]=function(_5d,_5e,_5f){
-var _60=_5e.parseProperties(_5d["dojo:connect"]);
-};
-dojo.widget.buildWidgetFromParseTree=function(_61,_62,_63,_64,_65,_66){
-var _67=_61.split(":");
-_67=(_67.length==2)?_67[1]:_61;
-var _68=_66||_63.parseProperties(_62[_62["ns"]+":"+_67]);
-var _69=dojo.widget.manager.getImplementation(_67,null,null,_62["ns"]);
-if(!_69){
-throw new Error("cannot find \""+_61+"\" widget");
-}else{
-if(!_69.create){
-throw new Error("\""+_61+"\" widget object has no \"create\" method and does not appear to implement *Widget");
-}
-}
-_68["dojoinsertionindex"]=_65;
-var ret=_69.create(_68,_62,_64,_62["ns"]);
-return ret;
-};
-dojo.widget.defineWidget=function(_6b,_6c,_6d,_6e,_6f){
-if(dojo.lang.isString(arguments[3])){
-dojo.widget._defineWidget(arguments[0],arguments[3],arguments[1],arguments[4],arguments[2]);
-}else{
-var _70=[arguments[0]],p=3;
-if(dojo.lang.isString(arguments[1])){
-_70.push(arguments[1],arguments[2]);
-}else{
-_70.push("",arguments[1]);
-p=2;
-}
-if(dojo.lang.isFunction(arguments[p])){
-_70.push(arguments[p],arguments[p+1]);
-}else{
-_70.push(null,arguments[p]);
-}
-dojo.widget._defineWidget.apply(this,_70);
-}
-};
-dojo.widget.defineWidget.renderers="html|svg|vml";
-dojo.widget._defineWidget=function(_72,_73,_74,_75,_76){
-var _77=_72.split(".");
-var _78=_77.pop();
-var _79="\\.("+(_73?_73+"|":"")+dojo.widget.defineWidget.renderers+")\\.";
-var r=_72.search(new RegExp(_79));
-_77=(r<0?_77.join("."):_72.substr(0,r));
-dojo.widget.manager.registerWidgetPackage(_77);
-var pos=_77.indexOf(".");
-var _7c=(pos>-1)?_77.substring(0,pos):_77;
-_76=(_76)||{};
-_76.widgetType=_78;
-if((!_75)&&(_76["classConstructor"])){
-_75=_76.classConstructor;
-delete _76.classConstructor;
-}
-dojo.declare(_72,_74,_75,_76);
-};
-dojo.provide("dojo.widget.Parse");
-dojo.require("dojo.widget.Manager");
-dojo.require("dojo.dom");
-dojo.widget.Parse=function(_7d){
-this.propertySetsList=[];
-this.fragment=_7d;
-this.createComponents=function(_7e,_7f){
-var _80=[];
-var _81=false;
-try{
-if(_7e&&_7e.tagName&&(_7e!=_7e.nodeRef)){
-var _82=dojo.widget.tags;
-var tna=String(_7e.tagName).split(";");
-for(var x=0;x<tna.length;x++){
-var ltn=tna[x].replace(/^\s+|\s+$/g,"").toLowerCase();
-_7e.tagName=ltn;
-var ret;
-if(_82[ltn]){
-_81=true;
-ret=_82[ltn](_7e,this,_7f,_7e.index);
-_80.push(ret);
-}else{
-if(ltn.indexOf(":")==-1){
-ltn="dojo:"+ltn;
-}
-ret=dojo.widget.buildWidgetFromParseTree(ltn,_7e,this,_7f,_7e.index);
-if(ret){
-_81=true;
-_80.push(ret);
-}
-}
-}
-}
-}
-catch(e){
-dojo.debug("dojo.widget.Parse: error:",e);
-}
-if(!_81){
-_80=_80.concat(this.createSubComponents(_7e,_7f));
-}
-return _80;
-};
-this.createSubComponents=function(_87,_88){
-var _89,_8a=[];
-for(var _8b in _87){
-_89=_87[_8b];
-if(_89&&typeof _89=="object"&&(_89!=_87.nodeRef)&&(_89!=_87.tagName)&&(!dojo.dom.isNode(_89))){
-_8a=_8a.concat(this.createComponents(_89,_88));
-}
-}
-return _8a;
-};
-this.parsePropertySets=function(_8c){
-return [];
-};
-this.parseProperties=function(_8d){
-var _8e={};
-for(var _8f in _8d){
-if((_8d[_8f]==_8d.tagName)||(_8d[_8f]==_8d.nodeRef)){
-}else{
-var _90=_8d[_8f];
-if(_90.tagName&&dojo.widget.tags[_90.tagName.toLowerCase()]){
-}else{
-if(_90[0]&&_90[0].value!=""&&_90[0].value!=null){
-try{
-if(_8f.toLowerCase()=="dataprovider"){
-var _91=this;
-this.getDataProvider(_91,_90[0].value);
-_8e.dataProvider=this.dataProvider;
-}
-_8e[_8f]=_90[0].value;
-var _92=this.parseProperties(_90);
-for(var _93 in _92){
-_8e[_93]=_92[_93];
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-}
-switch(_8f.toLowerCase()){
-case "checked":
-case "disabled":
-if(typeof _8e[_8f]!="boolean"){
-_8e[_8f]=true;
-}
-break;
-}
-}
-}
-return _8e;
-};
-this.getDataProvider=function(_94,_95){
-dojo.io.bind({url:_95,load:function(_96,_97){
-if(_96=="load"){
-_94.dataProvider=_97;
-}
-},mimetype:"text/javascript",sync:true});
-};
-this.getPropertySetById=function(_98){
-for(var x=0;x<this.propertySetsList.length;x++){
-if(_98==this.propertySetsList[x]["id"][0].value){
-return this.propertySetsList[x];
-}
-}
-return "";
-};
-this.getPropertySetsByType=function(_9a){
-var _9b=[];
-for(var x=0;x<this.propertySetsList.length;x++){
-var cpl=this.propertySetsList[x];
-var _9e=cpl.componentClass||cpl.componentType||null;
-var _9f=this.propertySetsList[x]["id"][0].value;
-if(_9e&&(_9f==_9e[0].value)){
-_9b.push(cpl);
-}
-}
-return _9b;
-};
-this.getPropertySets=function(_a0){
-var ppl="dojo:propertyproviderlist";
-var _a2=[];
-var _a3=_a0.tagName;
-if(_a0[ppl]){
-var _a4=_a0[ppl].value.split(" ");
-for(var _a5 in _a4){
-if((_a5.indexOf("..")==-1)&&(_a5.indexOf("://")==-1)){
-var _a6=this.getPropertySetById(_a5);
-if(_a6!=""){
-_a2.push(_a6);
-}
-}else{
-}
-}
-}
-return this.getPropertySetsByType(_a3).concat(_a2);
-};
-this.createComponentFromScript=function(_a7,_a8,_a9,ns){
-_a9.fastMixIn=true;
-var ltn=(ns||"dojo")+":"+_a8.toLowerCase();
-if(dojo.widget.tags[ltn]){
-return [dojo.widget.tags[ltn](_a9,this,null,null,_a9)];
-}
-return [dojo.widget.buildWidgetFromParseTree(ltn,_a9,this,null,null,_a9)];
-};
-};
-dojo.widget._parser_collection={"dojo":new dojo.widget.Parse()};
-dojo.widget.getParser=function(_ac){
-if(!_ac){
-_ac="dojo";
-}
-if(!this._parser_collection[_ac]){
-this._parser_collection[_ac]=new dojo.widget.Parse();
-}
-return this._parser_collection[_ac];
-};
-dojo.widget.createWidget=function(_ad,_ae,_af,_b0){
-var _b1=false;
-var _b2=(typeof _ad=="string");
-if(_b2){
-var pos=_ad.indexOf(":");
-var ns=(pos>-1)?_ad.substring(0,pos):"dojo";
-if(pos>-1){
-_ad=_ad.substring(pos+1);
-}
-var _b5=_ad.toLowerCase();
-var _b6=ns+":"+_b5;
-_b1=(dojo.byId(_ad)&&!dojo.widget.tags[_b6]);
-}
-if((arguments.length==1)&&(_b1||!_b2)){
-var xp=new dojo.xml.Parse();
-var tn=_b1?dojo.byId(_ad):_ad;
-return dojo.widget.getParser().createComponents(xp.parseElement(tn,null,true))[0];
-}
-function fromScript(_b9,_ba,_bb,ns){
-_bb[_b6]={dojotype:[{value:_b5}],nodeRef:_b9,fastMixIn:true};
-_bb.ns=ns;
-return dojo.widget.getParser().createComponentFromScript(_b9,_ba,_bb,ns);
-}
-_ae=_ae||{};
-var _bd=false;
-var tn=null;
-var h=dojo.render.html.capable;
-if(h){
-tn=document.createElement("span");
-}
-if(!_af){
-_bd=true;
-_af=tn;
-if(h){
-dojo.body().appendChild(_af);
-}
-}else{
-if(_b0){
-dojo.dom.insertAtPosition(tn,_af,_b0);
-}else{
-tn=_af;
-}
-}
-var _bf=fromScript(tn,_ad.toLowerCase(),_ae,ns);
-if((!_bf)||(!_bf[0])||(typeof _bf[0].widgetType=="undefined")){
-throw new Error("createWidget: Creation of \""+_ad+"\" widget failed.");
-}
-try{
-if(_bd&&_bf[0].domNode.parentNode){
-_bf[0].domNode.parentNode.removeChild(_bf[0].domNode);
-}
-}
-catch(e){
-dojo.debug(e);
-}
-return _bf[0];
-};
-dojo.kwCompoundRequire({common:[["dojo.uri.Uri",false,false]]});
-dojo.provide("dojo.uri.*");
-dojo.provide("dojo.widget.DomWidget");
-dojo.require("dojo.event.*");
-dojo.require("dojo.dom");
-dojo.require("dojo.html.style");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.extras");
-dojo.widget._cssFiles={};
-dojo.widget._cssStrings={};
-dojo.widget._templateCache={};
-dojo.widget.defaultStrings={dojoRoot:dojo.hostenv.getBaseScriptUri(),dojoWidgetModuleUri:dojo.uri.moduleUri("dojo.widget"),baseScriptUri:dojo.hostenv.getBaseScriptUri()};
-dojo.widget.fillFromTemplateCache=function(obj,_c1,_c2,_c3){
-var _c4=_c1||obj.templatePath;
-var _c5=dojo.widget._templateCache;
-if(!_c4&&!obj["widgetType"]){
-do{
-var _c6="__dummyTemplate__"+dojo.widget._templateCache.dummyCount++;
-}while(_c5[_c6]);
-obj.widgetType=_c6;
-}
-var wt=_c4?_c4.toString():obj.widgetType;
-var ts=_c5[wt];
-if(!ts){
-_c5[wt]={"string":null,"node":null};
-if(_c3){
-ts={};
-}else{
-ts=_c5[wt];
-}
-}
-if((!obj.templateString)&&(!_c3)){
-obj.templateString=_c2||ts["string"];
-}
-if(obj.templateString){
-obj.templateString=this._sanitizeTemplateString(obj.templateString);
-}
-if((!obj.templateNode)&&(!_c3)){
-obj.templateNode=ts["node"];
-}
-if((!obj.templateNode)&&(!obj.templateString)&&(_c4)){
-var _c9=this._sanitizeTemplateString(dojo.hostenv.getText(_c4));
-obj.templateString=_c9;
-if(!_c3){
-_c5[wt]["string"]=_c9;
-}
-}
-if((!ts["string"])&&(!_c3)){
-ts.string=obj.templateString;
-}
-};
-dojo.widget._sanitizeTemplateString=function(_ca){
-if(_ca){
-_ca=_ca.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
-var _cb=_ca.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_cb){
-_ca=_cb[1];
-}
-}else{
-_ca="";
-}
-return _ca;
-};
-dojo.widget._templateCache.dummyCount=0;
-dojo.widget.attachProperties=["dojoAttachPoint","id"];
-dojo.widget.eventAttachProperty="dojoAttachEvent";
-dojo.widget.onBuildProperty="dojoOnBuild";
-dojo.widget.waiNames=["waiRole","waiState"];
-dojo.widget.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(_cc,ns,_ce,_cf){
-if(dojo.render.html.ie){
-_cc.setAttribute(this[ns].alias+":"+_ce,this[ns].prefix+_cf);
-}else{
-_cc.setAttributeNS(this[ns]["namespace"],_ce,this[ns].prefix+_cf);
-}
-},getAttr:function(_d0,ns,_d2){
-if(dojo.render.html.ie){
-return _d0.getAttribute(this[ns].alias+":"+_d2);
-}else{
-return _d0.getAttributeNS(this[ns]["namespace"],_d2);
-}
-},removeAttr:function(_d3,ns,_d5){
-var _d6=true;
-if(dojo.render.html.ie){
-_d6=_d3.removeAttribute(this[ns].alias+":"+_d5);
-}else{
-_d3.removeAttributeNS(this[ns]["namespace"],_d5);
-}
-return _d6;
-}};
-dojo.widget.attachTemplateNodes=function(_d7,_d8,_d9){
-var _da=dojo.dom.ELEMENT_NODE;
-function trim(str){
-return str.replace(/^\s+|\s+$/g,"");
-}
-if(!_d7){
-_d7=_d8.domNode;
-}
-if(_d7.nodeType!=_da){
-return;
-}
-var _dc=_d7.all||_d7.getElementsByTagName("*");
-var _dd=_d8;
-for(var x=-1;x<_dc.length;x++){
-var _df=(x==-1)?_d7:_dc[x];
-var _e0=[];
-if(!_d8.widgetsInTemplate||!_df.getAttribute("dojoType")){
-for(var y=0;y<this.attachProperties.length;y++){
-var _e2=_df.getAttribute(this.attachProperties[y]);
-if(_e2){
-_e0=_e2.split(";");
-for(var z=0;z<_e0.length;z++){
-if(dojo.lang.isArray(_d8[_e0[z]])){
-_d8[_e0[z]].push(_df);
-}else{
-_d8[_e0[z]]=_df;
-}
-}
-break;
-}
-}
-var _e4=_df.getAttribute(this.eventAttachProperty);
-if(_e4){
-var _e5=_e4.split(";");
-for(var y=0;y<_e5.length;y++){
-if((!_e5[y])||(!_e5[y].length)){
-continue;
-}
-var _e6=null;
-var _e7=trim(_e5[y]);
-if(_e5[y].indexOf(":")>=0){
-var _e8=_e7.split(":");
-_e7=trim(_e8[0]);
-_e6=trim(_e8[1]);
-}
-if(!_e6){
-_e6=_e7;
-}
-var tf=function(){
-var ntf=new String(_e6);
-return function(evt){
-if(_dd[ntf]){
-_dd[ntf](dojo.event.browser.fixEvent(evt,this));
-}
-};
-}();
-dojo.event.browser.addListener(_df,_e7,tf,false,true);
-}
-}
-for(var y=0;y<_d9.length;y++){
-var _ec=_df.getAttribute(_d9[y]);
-if((_ec)&&(_ec.length)){
-var _e6=null;
-var _ed=_d9[y].substr(4);
-_e6=trim(_ec);
-var _ee=[_e6];
-if(_e6.indexOf(";")>=0){
-_ee=dojo.lang.map(_e6.split(";"),trim);
-}
-for(var z=0;z<_ee.length;z++){
-if(!_ee[z].length){
-continue;
-}
-var tf=function(){
-var ntf=new String(_ee[z]);
-return function(evt){
-if(_dd[ntf]){
-_dd[ntf](dojo.event.browser.fixEvent(evt,this));
-}
-};
-}();
-dojo.event.browser.addListener(_df,_ed,tf,false,true);
-}
-}
-}
-}
-var _f1=_df.getAttribute(this.templateProperty);
-if(_f1){
-_d8[_f1]=_df;
-}
-dojo.lang.forEach(dojo.widget.waiNames,function(_f2){
-var wai=dojo.widget.wai[_f2];
-var val=_df.getAttribute(wai.name);
-if(val){
-if(val.indexOf("-")==-1){
-dojo.widget.wai.setAttr(_df,wai.name,"role",val);
-}else{
-var _f5=val.split("-");
-dojo.widget.wai.setAttr(_df,wai.name,_f5[0],_f5[1]);
-}
-}
-},this);
-var _f6=_df.getAttribute(this.onBuildProperty);
-if(_f6){
-eval("var node = baseNode; var widget = targetObj; "+_f6);
-}
-}
-};
-dojo.widget.getDojoEventsFromStr=function(str){
-var re=/(dojoOn([a-z]+)(\s?))=/gi;
-var _f9=str?str.match(re)||[]:[];
-var ret=[];
-var lem={};
-for(var x=0;x<_f9.length;x++){
-if(_f9[x].length<1){
-continue;
-}
-var cm=_f9[x].replace(/\s/,"");
-cm=(cm.slice(0,cm.length-1));
-if(!lem[cm]){
-lem[cm]=true;
-ret.push(cm);
-}
-}
-return ret;
-};
-dojo.declare("dojo.widget.DomWidget",dojo.widget.Widget,function(){
-if((arguments.length>0)&&(typeof arguments[0]=="object")){
-this.create(arguments[0]);
-}
-},{templateNode:null,templateString:null,templateCssString:null,preventClobber:false,domNode:null,containerNode:null,widgetsInTemplate:false,addChild:function(_fe,_ff,pos,ref,_102){
-if(!this.isContainer){
-dojo.debug("dojo.widget.DomWidget.addChild() attempted on non-container widget");
-return null;
-}else{
-if(_102==undefined){
-_102=this.children.length;
-}
-this.addWidgetAsDirectChild(_fe,_ff,pos,ref,_102);
-this.registerChild(_fe,_102);
-}
-return _fe;
-},addWidgetAsDirectChild:function(_103,_104,pos,ref,_107){
-if((!this.containerNode)&&(!_104)){
-this.containerNode=this.domNode;
-}
-var cn=(_104)?_104:this.containerNode;
-if(!pos){
-pos="after";
-}
-if(!ref){
-if(!cn){
-cn=dojo.body();
-}
-ref=cn.lastChild;
-}
-if(!_107){
-_107=0;
-}
-_103.domNode.setAttribute("dojoinsertionindex",_107);
-if(!ref){
-cn.appendChild(_103.domNode);
-}else{
-if(pos=="insertAtIndex"){
-dojo.dom.insertAtIndex(_103.domNode,ref.parentNode,_107);
-}else{
-if((pos=="after")&&(ref===cn.lastChild)){
-cn.appendChild(_103.domNode);
-}else{
-dojo.dom.insertAtPosition(_103.domNode,cn,pos);
-}
-}
-}
-},registerChild:function(_109,_10a){
-_109.dojoInsertionIndex=_10a;
-var idx=-1;
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].dojoInsertionIndex<=_10a){
-idx=i;
-}
-}
-this.children.splice(idx+1,0,_109);
-_109.parent=this;
-_109.addedTo(this,idx+1);
-delete dojo.widget.manager.topWidgets[_109.widgetId];
-},removeChild:function(_10d){
-dojo.dom.removeNode(_10d.domNode);
-return dojo.widget.DomWidget.superclass.removeChild.call(this,_10d);
-},getFragNodeRef:function(frag){
-if(!frag){
-return null;
-}
-if(!frag[this.getNamespacedType()]){
-dojo.raise("Error: no frag for widget type "+this.getNamespacedType()+", id "+this.widgetId+" (maybe a widget has set it's type incorrectly)");
-}
-return frag[this.getNamespacedType()]["nodeRef"];
-},postInitialize:function(args,frag,_111){
-var _112=this.getFragNodeRef(frag);
-if(_111&&(_111.snarfChildDomOutput||!_112)){
-_111.addWidgetAsDirectChild(this,"","insertAtIndex","",args["dojoinsertionindex"],_112);
-}else{
-if(_112){
-if(this.domNode&&(this.domNode!==_112)){
-this._sourceNodeRef=dojo.dom.replaceNode(_112,this.domNode);
-}
-}
-}
-if(_111){
-_111.registerChild(this,args.dojoinsertionindex);
-}else{
-dojo.widget.manager.topWidgets[this.widgetId]=this;
-}
-if(this.widgetsInTemplate){
-var _113=new dojo.xml.Parse();
-var _114;
-var _115=this.domNode.getElementsByTagName("*");
-for(var i=0;i<_115.length;i++){
-if(_115[i].getAttribute("dojoAttachPoint")=="subContainerWidget"){
-_114=_115[i];
-}
-if(_115[i].getAttribute("dojoType")){
-_115[i].setAttribute("isSubWidget",true);
-}
-}
-if(this.isContainer&&!this.containerNode){
-if(_114){
-var src=this.getFragNodeRef(frag);
-if(src){
-dojo.dom.moveChildren(src,_114);
-frag["dojoDontFollow"]=true;
-}
-}else{
-dojo.debug("No subContainerWidget node can be found in template file for widget "+this);
-}
-}
-var _118=_113.parseElement(this.domNode,null,true);
-dojo.widget.getParser().createSubComponents(_118,this);
-var _119=[];
-var _11a=[this];
-var w;
-while((w=_11a.pop())){
-for(var i=0;i<w.children.length;i++){
-var _11c=w.children[i];
-if(_11c._processedSubWidgets||!_11c.extraArgs["issubwidget"]){
-continue;
-}
-_119.push(_11c);
-if(_11c.isContainer){
-_11a.push(_11c);
-}
-}
-}
-for(var i=0;i<_119.length;i++){
-var _11d=_119[i];
-if(_11d._processedSubWidgets){
-dojo.debug("This should not happen: widget._processedSubWidgets is already true!");
-return;
-}
-_11d._processedSubWidgets=true;
-if(_11d.extraArgs["dojoattachevent"]){
-var evts=_11d.extraArgs["dojoattachevent"].split(";");
-for(var j=0;j<evts.length;j++){
-var _120=null;
-var tevt=dojo.string.trim(evts[j]);
-if(tevt.indexOf(":")>=0){
-var _122=tevt.split(":");
-tevt=dojo.string.trim(_122[0]);
-_120=dojo.string.trim(_122[1]);
-}
-if(!_120){
-_120=tevt;
-}
-if(dojo.lang.isFunction(_11d[tevt])){
-dojo.event.kwConnect({srcObj:_11d,srcFunc:tevt,targetObj:this,targetFunc:_120});
-}else{
-alert(tevt+" is not a function in widget "+_11d);
-}
-}
-}
-if(_11d.extraArgs["dojoattachpoint"]){
-this[_11d.extraArgs["dojoattachpoint"]]=_11d;
-}
-}
-}
-if(this.isContainer&&!frag["dojoDontFollow"]){
-dojo.widget.getParser().createSubComponents(frag,this);
-}
-},buildRendering:function(args,frag){
-var ts=dojo.widget._templateCache[this.widgetType];
-if(args["templatecsspath"]){
-args["templateCssPath"]=args["templatecsspath"];
-}
-var _126=args["templateCssPath"]||this.templateCssPath;
-if(_126&&!dojo.widget._cssFiles[_126.toString()]){
-if((!this.templateCssString)&&(_126)){
-this.templateCssString=dojo.hostenv.getText(_126);
-this.templateCssPath=null;
-}
-dojo.widget._cssFiles[_126.toString()]=true;
-}
-if((this["templateCssString"])&&(!dojo.widget._cssStrings[this.templateCssString])){
-dojo.html.insertCssText(this.templateCssString,null,_126);
-dojo.widget._cssStrings[this.templateCssString]=true;
-}
-if((!this.preventClobber)&&((this.templatePath)||(this.templateNode)||((this["templateString"])&&(this.templateString.length))||((typeof ts!="undefined")&&((ts["string"])||(ts["node"]))))){
-this.buildFromTemplate(args,frag);
-}else{
-this.domNode=this.getFragNodeRef(frag);
-}
-this.fillInTemplate(args,frag);
-},buildFromTemplate:function(args,frag){
-var _129=false;
-if(args["templatepath"]){
-args["templatePath"]=args["templatepath"];
-}
-dojo.widget.fillFromTemplateCache(this,args["templatePath"],null,_129);
-var ts=dojo.widget._templateCache[this.templatePath?this.templatePath.toString():this.widgetType];
-if((ts)&&(!_129)){
-if(!this.templateString.length){
-this.templateString=ts["string"];
-}
-if(!this.templateNode){
-this.templateNode=ts["node"];
-}
-}
-var _12b=false;
-var node=null;
-var tstr=this.templateString;
-if((!this.templateNode)&&(this.templateString)){
-_12b=this.templateString.match(/\$\{([^\}]+)\}/g);
-if(_12b){
-var hash=this.strings||{};
-for(var key in dojo.widget.defaultStrings){
-if(dojo.lang.isUndefined(hash[key])){
-hash[key]=dojo.widget.defaultStrings[key];
-}
-}
-for(var i=0;i<_12b.length;i++){
-var key=_12b[i];
-key=key.substring(2,key.length-1);
-var kval=(key.substring(0,5)=="this.")?dojo.lang.getObjPathValue(key.substring(5),this):hash[key];
-var _132;
-if((kval)||(dojo.lang.isString(kval))){
-_132=new String((dojo.lang.isFunction(kval))?kval.call(this,key,this.templateString):kval);
-while(_132.indexOf("\"")>-1){
-_132=_132.replace("\"","&quot;");
-}
-tstr=tstr.replace(_12b[i],_132);
-}
-}
-}else{
-this.templateNode=this.createNodesFromText(this.templateString,true)[0];
-if(!_129){
-ts.node=this.templateNode;
-}
-}
-}
-if((!this.templateNode)&&(!_12b)){
-dojo.debug("DomWidget.buildFromTemplate: could not create template");
-return false;
-}else{
-if(!_12b){
-node=this.templateNode.cloneNode(true);
-if(!node){
-return false;
-}
-}else{
-node=this.createNodesFromText(tstr,true)[0];
-}
-}
-this.domNode=node;
-this.attachTemplateNodes();
-if(this.isContainer&&this.containerNode){
-var src=this.getFragNodeRef(frag);
-if(src){
-dojo.dom.moveChildren(src,this.containerNode);
-}
-}
-},attachTemplateNodes:function(_134,_135){
-if(!_134){
-_134=this.domNode;
-}
-if(!_135){
-_135=this;
-}
-return dojo.widget.attachTemplateNodes(_134,_135,dojo.widget.getDojoEventsFromStr(this.templateString));
-},fillInTemplate:function(){
-},destroyRendering:function(){
-try{
-dojo.dom.destroyNode(this.domNode);
-delete this.domNode;
-}
-catch(e){
-}
-if(this._sourceNodeRef){
-try{
-dojo.dom.destroyNode(this._sourceNodeRef);
-}
-catch(e){
-}
-}
-},createNodesFromText:function(){
-dojo.unimplemented("dojo.widget.DomWidget.createNodesFromText");
-}});
-dojo.provide("dojo.html.layout");
-dojo.require("dojo.html.common");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.display");
-dojo.html.sumAncestorProperties=function(node,prop){
-node=dojo.byId(node);
-if(!node){
-return 0;
-}
-var _138=0;
-while(node){
-if(dojo.html.getComputedStyle(node,"position")=="fixed"){
-return 0;
-}
-var val=node[prop];
-if(val){
-_138+=val-0;
-if(node==dojo.body()){
-break;
-}
-}
-node=node.parentNode;
-}
-return _138;
-};
-dojo.html.setStyleAttributes=function(node,_13b){
-node=dojo.byId(node);
-var _13c=_13b.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_13c.length;i++){
-var _13e=_13c[i].split(":");
-var name=_13e[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _140=_13e[1].replace(/\s*$/,"").replace(/^\s*/,"");
-switch(name){
-case "opacity":
-dojo.html.setOpacity(node,_140);
-break;
-case "content-height":
-dojo.html.setContentBox(node,{height:_140});
-break;
-case "content-width":
-dojo.html.setContentBox(node,{width:_140});
-break;
-case "outer-height":
-dojo.html.setMarginBox(node,{height:_140});
-break;
-case "outer-width":
-dojo.html.setMarginBox(node,{width:_140});
-break;
-default:
-node.style[dojo.html.toCamelCase(name)]=_140;
-}
-}
-};
-dojo.html.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-dojo.html.getAbsolutePosition=dojo.html.abs=function(node,_142,_143){
-node=dojo.byId(node,node.ownerDocument);
-var ret={x:0,y:0};
-var bs=dojo.html.boxSizing;
-if(!_143){
-_143=bs.CONTENT_BOX;
-}
-var _146=2;
-var _147;
-switch(_143){
-case bs.MARGIN_BOX:
-_147=3;
-break;
-case bs.BORDER_BOX:
-_147=2;
-break;
-case bs.PADDING_BOX:
-default:
-_147=1;
-break;
-case bs.CONTENT_BOX:
-_147=0;
-break;
-}
-var h=dojo.render.html;
-var db=document["body"]||document["documentElement"];
-if(h.ie){
-with(node.getBoundingClientRect()){
-ret.x=left-2;
-ret.y=top-2;
-}
-}else{
-if(document.getBoxObjectFor){
-_146=1;
-try{
-var bo=document.getBoxObjectFor(node);
-ret.x=bo.x-dojo.html.sumAncestorProperties(node,"scrollLeft");
-ret.y=bo.y-dojo.html.sumAncestorProperties(node,"scrollTop");
-}
-catch(e){
-}
-}else{
-if(node["offsetParent"]){
-var _14b;
-if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){
-_14b=db;
-}else{
-_14b=db.parentNode;
-}
-if(node.parentNode!=db){
-var nd=node;
-if(dojo.render.html.opera){
-nd=db;
-}
-ret.x-=dojo.html.sumAncestorProperties(nd,"scrollLeft");
-ret.y-=dojo.html.sumAncestorProperties(nd,"scrollTop");
-}
-var _14d=node;
-do{
-var n=_14d["offsetLeft"];
-if(!h.opera||n>0){
-ret.x+=isNaN(n)?0:n;
-}
-var m=_14d["offsetTop"];
-ret.y+=isNaN(m)?0:m;
-_14d=_14d.offsetParent;
-}while((_14d!=_14b)&&(_14d!=null));
-}else{
-if(node["x"]&&node["y"]){
-ret.x+=isNaN(node.x)?0:node.x;
-ret.y+=isNaN(node.y)?0:node.y;
-}
-}
-}
-}
-if(_142){
-var _150=dojo.html.getScroll();
-ret.y+=_150.top;
-ret.x+=_150.left;
-}
-var _151=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
-if(_146>_147){
-for(var i=_147;i<_146;++i){
-ret.y+=_151[i](node,"top");
-ret.x+=_151[i](node,"left");
-}
-}else{
-if(_146<_147){
-for(var i=_147;i>_146;--i){
-ret.y-=_151[i-1](node,"top");
-ret.x-=_151[i-1](node,"left");
-}
-}
-}
-ret.top=ret.y;
-ret.left=ret.x;
-return ret;
-};
-dojo.html.isPositionAbsolute=function(node){
-return (dojo.html.getComputedStyle(node,"position")=="absolute");
-};
-dojo.html._sumPixelValues=function(node,_155,_156){
-var _157=0;
-for(var x=0;x<_155.length;x++){
-_157+=dojo.html.getPixelValue(node,_155[x],_156);
-}
-return _157;
-};
-dojo.html.getMargin=function(node){
-return {width:dojo.html._sumPixelValues(node,["margin-left","margin-right"],(dojo.html.getComputedStyle(node,"position")=="absolute")),height:dojo.html._sumPixelValues(node,["margin-top","margin-bottom"],(dojo.html.getComputedStyle(node,"position")=="absolute"))};
-};
-dojo.html.getBorder=function(node){
-return {width:dojo.html.getBorderExtent(node,"left")+dojo.html.getBorderExtent(node,"right"),height:dojo.html.getBorderExtent(node,"top")+dojo.html.getBorderExtent(node,"bottom")};
-};
-dojo.html.getBorderExtent=function(node,side){
-return (dojo.html.getStyle(node,"border-"+side+"-style")=="none"?0:dojo.html.getPixelValue(node,"border-"+side+"-width"));
-};
-dojo.html.getMarginExtent=function(node,side){
-return dojo.html._sumPixelValues(node,["margin-"+side],dojo.html.isPositionAbsolute(node));
-};
-dojo.html.getPaddingExtent=function(node,side){
-return dojo.html._sumPixelValues(node,["padding-"+side],true);
-};
-dojo.html.getPadding=function(node){
-return {width:dojo.html._sumPixelValues(node,["padding-left","padding-right"],true),height:dojo.html._sumPixelValues(node,["padding-top","padding-bottom"],true)};
-};
-dojo.html.getPadBorder=function(node){
-var pad=dojo.html.getPadding(node);
-var _164=dojo.html.getBorder(node);
-return {width:pad.width+_164.width,height:pad.height+_164.height};
-};
-dojo.html.getBoxSizing=function(node){
-var h=dojo.render.html;
-var bs=dojo.html.boxSizing;
-if(((h.ie)||(h.opera))&&node.nodeName.toLowerCase()!="img"){
-var cm=document["compatMode"];
-if((cm=="BackCompat")||(cm=="QuirksMode")){
-return bs.BORDER_BOX;
-}else{
-return bs.CONTENT_BOX;
-}
-}else{
-if(arguments.length==0){
-node=document.documentElement;
-}
-var _169;
-if(!h.ie){
-_169=dojo.html.getStyle(node,"-moz-box-sizing");
-if(!_169){
-_169=dojo.html.getStyle(node,"box-sizing");
-}
-}
-return (_169?_169:bs.CONTENT_BOX);
-}
-};
-dojo.html.isBorderBox=function(node){
-return (dojo.html.getBoxSizing(node)==dojo.html.boxSizing.BORDER_BOX);
-};
-dojo.html.getBorderBox=function(node){
-node=dojo.byId(node);
-return {width:node.offsetWidth,height:node.offsetHeight};
-};
-dojo.html.getPaddingBox=function(node){
-var box=dojo.html.getBorderBox(node);
-var _16e=dojo.html.getBorder(node);
-return {width:box.width-_16e.width,height:box.height-_16e.height};
-};
-dojo.html.getContentBox=function(node){
-node=dojo.byId(node);
-var _170=dojo.html.getPadBorder(node);
-return {width:node.offsetWidth-_170.width,height:node.offsetHeight-_170.height};
-};
-dojo.html.setContentBox=function(node,args){
-node=dojo.byId(node);
-var _173=0;
-var _174=0;
-var isbb=dojo.html.isBorderBox(node);
-var _176=(isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var ret={};
-if(typeof args.width!="undefined"){
-_173=args.width+_176.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_173);
-}
-if(typeof args.height!="undefined"){
-_174=args.height+_176.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_174);
-}
-return ret;
-};
-dojo.html.getMarginBox=function(node){
-var _179=dojo.html.getBorderBox(node);
-var _17a=dojo.html.getMargin(node);
-return {width:_179.width+_17a.width,height:_179.height+_17a.height};
-};
-dojo.html.setMarginBox=function(node,args){
-node=dojo.byId(node);
-var _17d=0;
-var _17e=0;
-var isbb=dojo.html.isBorderBox(node);
-var _180=(!isbb?dojo.html.getPadBorder(node):{width:0,height:0});
-var _181=dojo.html.getMargin(node);
-var ret={};
-if(typeof args.width!="undefined"){
-_17d=args.width-_180.width;
-_17d-=_181.width;
-ret.width=dojo.html.setPositivePixelValue(node,"width",_17d);
-}
-if(typeof args.height!="undefined"){
-_17e=args.height-_180.height;
-_17e-=_181.height;
-ret.height=dojo.html.setPositivePixelValue(node,"height",_17e);
-}
-return ret;
-};
-dojo.html.getElementBox=function(node,type){
-var bs=dojo.html.boxSizing;
-switch(type){
-case bs.MARGIN_BOX:
-return dojo.html.getMarginBox(node);
-case bs.BORDER_BOX:
-return dojo.html.getBorderBox(node);
-case bs.PADDING_BOX:
-return dojo.html.getPaddingBox(node);
-case bs.CONTENT_BOX:
-default:
-return dojo.html.getContentBox(node);
-}
-};
-dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_186,_187,_188){
-if(_186 instanceof Array||typeof _186=="array"){
-dojo.deprecated("dojo.html.toCoordinateArray","use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead","0.5");
-while(_186.length<4){
-_186.push(0);
-}
-while(_186.length>4){
-_186.pop();
-}
-var ret={left:_186[0],top:_186[1],width:_186[2],height:_186[3]};
-}else{
-if(!_186.nodeType&&!(_186 instanceof String||typeof _186=="string")&&("width" in _186||"height" in _186||"left" in _186||"x" in _186||"top" in _186||"y" in _186)){
-var ret={left:_186.left||_186.x||0,top:_186.top||_186.y||0,width:_186.width||0,height:_186.height||0};
-}else{
-var node=dojo.byId(_186);
-var pos=dojo.html.abs(node,_187,_188);
-var _18c=dojo.html.getMarginBox(node);
-var ret={left:pos.left,top:pos.top,width:_18c.width,height:_18c.height};
-}
-}
-ret.x=ret.left;
-ret.y=ret.top;
-return ret;
-};
-dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(node,_18e){
-return dojo.html._callDeprecated("setMarginBoxWidth","setMarginBox",arguments,"width");
-};
-dojo.html.setMarginBoxHeight=dojo.html.setOuterHeight=function(){
-return dojo.html._callDeprecated("setMarginBoxHeight","setMarginBox",arguments,"height");
-};
-dojo.html.getMarginBoxWidth=dojo.html.getOuterWidth=function(){
-return dojo.html._callDeprecated("getMarginBoxWidth","getMarginBox",arguments,null,"width");
-};
-dojo.html.getMarginBoxHeight=dojo.html.getOuterHeight=function(){
-return dojo.html._callDeprecated("getMarginBoxHeight","getMarginBox",arguments,null,"height");
-};
-dojo.html.getTotalOffset=function(node,type,_191){
-return dojo.html._callDeprecated("getTotalOffset","getAbsolutePosition",arguments,null,type);
-};
-dojo.html.getAbsoluteX=function(node,_193){
-return dojo.html._callDeprecated("getAbsoluteX","getAbsolutePosition",arguments,null,"x");
-};
-dojo.html.getAbsoluteY=function(node,_195){
-return dojo.html._callDeprecated("getAbsoluteY","getAbsolutePosition",arguments,null,"y");
-};
-dojo.html.totalOffsetLeft=function(node,_197){
-return dojo.html._callDeprecated("totalOffsetLeft","getAbsolutePosition",arguments,null,"left");
-};
-dojo.html.totalOffsetTop=function(node,_199){
-return dojo.html._callDeprecated("totalOffsetTop","getAbsolutePosition",arguments,null,"top");
-};
-dojo.html.getMarginWidth=function(node){
-return dojo.html._callDeprecated("getMarginWidth","getMargin",arguments,null,"width");
-};
-dojo.html.getMarginHeight=function(node){
-return dojo.html._callDeprecated("getMarginHeight","getMargin",arguments,null,"height");
-};
-dojo.html.getBorderWidth=function(node){
-return dojo.html._callDeprecated("getBorderWidth","getBorder",arguments,null,"width");
-};
-dojo.html.getBorderHeight=function(node){
-return dojo.html._callDeprecated("getBorderHeight","getBorder",arguments,null,"height");
-};
-dojo.html.getPaddingWidth=function(node){
-return dojo.html._callDeprecated("getPaddingWidth","getPadding",arguments,null,"width");
-};
-dojo.html.getPaddingHeight=function(node){
-return dojo.html._callDeprecated("getPaddingHeight","getPadding",arguments,null,"height");
-};
-dojo.html.getPadBorderWidth=function(node){
-return dojo.html._callDeprecated("getPadBorderWidth","getPadBorder",arguments,null,"width");
-};
-dojo.html.getPadBorderHeight=function(node){
-return dojo.html._callDeprecated("getPadBorderHeight","getPadBorder",arguments,null,"height");
-};
-dojo.html.getBorderBoxWidth=dojo.html.getInnerWidth=function(){
-return dojo.html._callDeprecated("getBorderBoxWidth","getBorderBox",arguments,null,"width");
-};
-dojo.html.getBorderBoxHeight=dojo.html.getInnerHeight=function(){
-return dojo.html._callDeprecated("getBorderBoxHeight","getBorderBox",arguments,null,"height");
-};
-dojo.html.getContentBoxWidth=dojo.html.getContentWidth=function(){
-return dojo.html._callDeprecated("getContentBoxWidth","getContentBox",arguments,null,"width");
-};
-dojo.html.getContentBoxHeight=dojo.html.getContentHeight=function(){
-return dojo.html._callDeprecated("getContentBoxHeight","getContentBox",arguments,null,"height");
-};
-dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(node,_1a3){
-return dojo.html._callDeprecated("setContentBoxWidth","setContentBox",arguments,"width");
-};
-dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(node,_1a5){
-return dojo.html._callDeprecated("setContentBoxHeight","setContentBox",arguments,"height");
-};
-dojo.provide("dojo.html.util");
-dojo.html.getElementWindow=function(_1a6){
-return dojo.html.getDocumentWindow(_1a6.ownerDocument);
-};
-dojo.html.getDocumentWindow=function(doc){
-if(dojo.render.html.safari&&!doc._parentWindow){
-var fix=function(win){
-win.document._parentWindow=win;
-for(var i=0;i<win.frames.length;i++){
-fix(win.frames[i]);
-}
-};
-fix(window.top);
-}
-if(dojo.render.html.ie&&window!==document.parentWindow&&!doc._parentWindow){
-doc.parentWindow.execScript("document._parentWindow = window;","Javascript");
-var win=doc._parentWindow;
-doc._parentWindow=null;
-return win;
-}
-return doc._parentWindow||doc.parentWindow||doc.defaultView;
-};
-dojo.html.gravity=function(node,e){
-node=dojo.byId(node);
-var _1ae=dojo.html.getCursorPosition(e);
-with(dojo.html){
-var _1af=getAbsolutePosition(node,true);
-var bb=getBorderBox(node);
-var _1b1=_1af.x+(bb.width/2);
-var _1b2=_1af.y+(bb.height/2);
-}
-with(dojo.html.gravity){
-return ((_1ae.x<_1b1?WEST:EAST)|(_1ae.y<_1b2?NORTH:SOUTH));
-}
-};
-dojo.html.gravity.NORTH=1;
-dojo.html.gravity.SOUTH=1<<1;
-dojo.html.gravity.EAST=1<<2;
-dojo.html.gravity.WEST=1<<3;
-dojo.html.overElement=function(_1b3,e){
-_1b3=dojo.byId(_1b3);
-var _1b5=dojo.html.getCursorPosition(e);
-var bb=dojo.html.getBorderBox(_1b3);
-var _1b7=dojo.html.getAbsolutePosition(_1b3,true,dojo.html.boxSizing.BORDER_BOX);
-var top=_1b7.y;
-var _1b9=top+bb.height;
-var left=_1b7.x;
-var _1bb=left+bb.width;
-return (_1b5.x>=left&&_1b5.x<=_1bb&&_1b5.y>=top&&_1b5.y<=_1b9);
-};
-dojo.html.renderedTextContent=function(node){
-node=dojo.byId(node);
-var _1bd="";
-if(node==null){
-return _1bd;
-}
-for(var i=0;i<node.childNodes.length;i++){
-switch(node.childNodes[i].nodeType){
-case 1:
-case 5:
-var _1bf="unknown";
-try{
-_1bf=dojo.html.getStyle(node.childNodes[i],"display");
-}
-catch(E){
-}
-switch(_1bf){
-case "block":
-case "list-item":
-case "run-in":
-case "table":
-case "table-row-group":
-case "table-header-group":
-case "table-footer-group":
-case "table-row":
-case "table-column-group":
-case "table-column":
-case "table-cell":
-case "table-caption":
-_1bd+="\n";
-_1bd+=dojo.html.renderedTextContent(node.childNodes[i]);
-_1bd+="\n";
-break;
-case "none":
-break;
-default:
-if(node.childNodes[i].tagName&&node.childNodes[i].tagName.toLowerCase()=="br"){
-_1bd+="\n";
-}else{
-_1bd+=dojo.html.renderedTextContent(node.childNodes[i]);
-}
-break;
-}
-break;
-case 3:
-case 2:
-case 4:
-var text=node.childNodes[i].nodeValue;
-var _1c1="unknown";
-try{
-_1c1=dojo.html.getStyle(node,"text-transform");
-}
-catch(E){
-}
-switch(_1c1){
-case "capitalize":
-var _1c2=text.split(" ");
-for(var i=0;i<_1c2.length;i++){
-_1c2[i]=_1c2[i].charAt(0).toUpperCase()+_1c2[i].substring(1);
-}
-text=_1c2.join(" ");
-break;
-case "uppercase":
-text=text.toUpperCase();
-break;
-case "lowercase":
-text=text.toLowerCase();
-break;
-default:
-break;
-}
-switch(_1c1){
-case "nowrap":
-break;
-case "pre-wrap":
-break;
-case "pre-line":
-break;
-case "pre":
-break;
-default:
-text=text.replace(/\s+/," ");
-if(/\s$/.test(_1bd)){
-text.replace(/^\s/,"");
-}
-break;
-}
-_1bd+=text;
-break;
-default:
-break;
-}
-}
-return _1bd;
-};
-dojo.html.createNodesFromText=function(txt,trim){
-if(trim){
-txt=txt.replace(/^\s+|\s+$/g,"");
-}
-var tn=dojo.doc().createElement("div");
-tn.style.visibility="hidden";
-dojo.body().appendChild(tn);
-var _1c6="none";
-if((/^<t[dh][\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table><tbody><tr>"+txt+"</tr></tbody></table>";
-_1c6="cell";
-}else{
-if((/^<tr[\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table><tbody>"+txt+"</tbody></table>";
-_1c6="row";
-}else{
-if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table>"+txt+"</table>";
-_1c6="section";
-}
-}
-}
-tn.innerHTML=txt;
-if(tn["normalize"]){
-tn.normalize();
-}
-var _1c7=null;
-switch(_1c6){
-case "cell":
-_1c7=tn.getElementsByTagName("tr")[0];
-break;
-case "row":
-_1c7=tn.getElementsByTagName("tbody")[0];
-break;
-case "section":
-_1c7=tn.getElementsByTagName("table")[0];
-break;
-default:
-_1c7=tn;
-break;
-}
-var _1c8=[];
-for(var x=0;x<_1c7.childNodes.length;x++){
-_1c8.push(_1c7.childNodes[x].cloneNode(true));
-}
-tn.style.display="none";
-dojo.html.destroyNode(tn);
-return _1c8;
-};
-dojo.html.placeOnScreen=function(node,_1cb,_1cc,_1cd,_1ce,_1cf,_1d0){
-if(_1cb instanceof Array||typeof _1cb=="array"){
-_1d0=_1cf;
-_1cf=_1ce;
-_1ce=_1cd;
-_1cd=_1cc;
-_1cc=_1cb[1];
-_1cb=_1cb[0];
-}
-if(_1cf instanceof String||typeof _1cf=="string"){
-_1cf=_1cf.split(",");
-}
-if(!isNaN(_1cd)){
-_1cd=[Number(_1cd),Number(_1cd)];
-}else{
-if(!(_1cd instanceof Array||typeof _1cd=="array")){
-_1cd=[0,0];
-}
-}
-var _1d1=dojo.html.getScroll().offset;
-var view=dojo.html.getViewport();
-node=dojo.byId(node);
-var _1d3=node.style.display;
-node.style.display="";
-var bb=dojo.html.getBorderBox(node);
-var w=bb.width;
-var h=bb.height;
-node.style.display=_1d3;
-if(!(_1cf instanceof Array||typeof _1cf=="array")){
-_1cf=["TL"];
-}
-var _1d7,_1d8,_1d9=Infinity,_1da;
-for(var _1db=0;_1db<_1cf.length;++_1db){
-var _1dc=_1cf[_1db];
-var _1dd=true;
-var tryX=_1cb-(_1dc.charAt(1)=="L"?0:w)+_1cd[0]*(_1dc.charAt(1)=="L"?1:-1);
-var tryY=_1cc-(_1dc.charAt(0)=="T"?0:h)+_1cd[1]*(_1dc.charAt(0)=="T"?1:-1);
-if(_1ce){
-tryX-=_1d1.x;
-tryY-=_1d1.y;
-}
-if(tryX<0){
-tryX=0;
-_1dd=false;
-}
-if(tryY<0){
-tryY=0;
-_1dd=false;
-}
-var x=tryX+w;
-if(x>view.width){
-x=view.width-w;
-_1dd=false;
-}else{
-x=tryX;
-}
-x=Math.max(_1cd[0],x)+_1d1.x;
-var y=tryY+h;
-if(y>view.height){
-y=view.height-h;
-_1dd=false;
-}else{
-y=tryY;
-}
-y=Math.max(_1cd[1],y)+_1d1.y;
-if(_1dd){
-_1d7=x;
-_1d8=y;
-_1d9=0;
-_1da=_1dc;
-break;
-}else{
-var dist=Math.pow(x-tryX-_1d1.x,2)+Math.pow(y-tryY-_1d1.y,2);
-if(_1d9>dist){
-_1d9=dist;
-_1d7=x;
-_1d8=y;
-_1da=_1dc;
-}
-}
-}
-if(!_1d0){
-node.style.left=_1d7+"px";
-node.style.top=_1d8+"px";
-}
-return {left:_1d7,top:_1d8,x:_1d7,y:_1d8,dist:_1d9,corner:_1da};
-};
-dojo.html.placeOnScreenPoint=function(node,_1e4,_1e5,_1e6,_1e7){
-dojo.deprecated("dojo.html.placeOnScreenPoint","use dojo.html.placeOnScreen() instead","0.5");
-return dojo.html.placeOnScreen(node,_1e4,_1e5,_1e6,_1e7,["TL","TR","BL","BR"]);
-};
-dojo.html.placeOnScreenAroundElement=function(node,_1e9,_1ea,_1eb,_1ec,_1ed){
-var best,_1ef=Infinity;
-_1e9=dojo.byId(_1e9);
-var _1f0=_1e9.style.display;
-_1e9.style.display="";
-var mb=dojo.html.getElementBox(_1e9,_1eb);
-var _1f2=mb.width;
-var _1f3=mb.height;
-var _1f4=dojo.html.getAbsolutePosition(_1e9,true,_1eb);
-_1e9.style.display=_1f0;
-for(var _1f5 in _1ec){
-var pos,_1f7,_1f8;
-var _1f9=_1ec[_1f5];
-_1f7=_1f4.x+(_1f5.charAt(1)=="L"?0:_1f2);
-_1f8=_1f4.y+(_1f5.charAt(0)=="T"?0:_1f3);
-pos=dojo.html.placeOnScreen(node,_1f7,_1f8,_1ea,true,_1f9,true);
-if(pos.dist==0){
-best=pos;
-break;
-}else{
-if(_1ef>pos.dist){
-_1ef=pos.dist;
-best=pos;
-}
-}
-}
-if(!_1ed){
-node.style.left=best.left+"px";
-node.style.top=best.top+"px";
-}
-return best;
-};
-dojo.html.scrollIntoView=function(node){
-if(!node){
-return;
-}
-if(dojo.render.html.ie){
-if(dojo.html.getBorderBox(node.parentNode).height<=node.parentNode.scrollHeight){
-node.scrollIntoView(false);
-}
-}else{
-if(dojo.render.html.mozilla){
-node.scrollIntoView(false);
-}else{
-var _1fb=node.parentNode;
-var _1fc=_1fb.scrollTop+dojo.html.getBorderBox(_1fb).height;
-var _1fd=node.offsetTop+dojo.html.getMarginBox(node).height;
-if(_1fc<_1fd){
-_1fb.scrollTop+=(_1fd-_1fc);
-}else{
-if(_1fb.scrollTop>node.offsetTop){
-_1fb.scrollTop-=(_1fb.scrollTop-node.offsetTop);
-}
-}
-}
-}
-};
-dojo.provide("dojo.gfx.color");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.array");
-dojo.gfx.color.Color=function(r,g,b,a){
-if(dojo.lang.isArray(r)){
-this.r=r[0];
-this.g=r[1];
-this.b=r[2];
-this.a=r[3]||1;
-}else{
-if(dojo.lang.isString(r)){
-var rgb=dojo.gfx.color.extractRGB(r);
-this.r=rgb[0];
-this.g=rgb[1];
-this.b=rgb[2];
-this.a=g||1;
-}else{
-if(r instanceof dojo.gfx.color.Color){
-this.r=r.r;
-this.b=r.b;
-this.g=r.g;
-this.a=r.a;
-}else{
-this.r=r;
-this.g=g;
-this.b=b;
-this.a=a;
-}
-}
-}
-};
-dojo.gfx.color.Color.fromArray=function(arr){
-return new dojo.gfx.color.Color(arr[0],arr[1],arr[2],arr[3]);
-};
-dojo.extend(dojo.gfx.color.Color,{toRgb:function(_204){
-if(_204){
-return this.toRgba();
-}else{
-return [this.r,this.g,this.b];
-}
-},toRgba:function(){
-return [this.r,this.g,this.b,this.a];
-},toHex:function(){
-return dojo.gfx.color.rgb2hex(this.toRgb());
-},toCss:function(){
-return "rgb("+this.toRgb().join()+")";
-},toString:function(){
-return this.toHex();
-},blend:function(_205,_206){
-var rgb=null;
-if(dojo.lang.isArray(_205)){
-rgb=_205;
-}else{
-if(_205 instanceof dojo.gfx.color.Color){
-rgb=_205.toRgb();
-}else{
-rgb=new dojo.gfx.color.Color(_205).toRgb();
-}
-}
-return dojo.gfx.color.blend(this.toRgb(),rgb,_206);
-}});
-dojo.gfx.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],lime:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.gfx.color.blend=function(a,b,_20a){
-if(typeof a=="string"){
-return dojo.gfx.color.blendHex(a,b,_20a);
-}
-if(!_20a){
-_20a=0;
-}
-_20a=Math.min(Math.max(-1,_20a),1);
-_20a=((_20a+1)/2);
-var c=[];
-for(var x=0;x<3;x++){
-c[x]=parseInt(b[x]+((a[x]-b[x])*_20a));
-}
-return c;
-};
-dojo.gfx.color.blendHex=function(a,b,_20f){
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_20f));
-};
-dojo.gfx.color.extractRGB=function(_210){
-var hex="0123456789abcdef";
-_210=_210.toLowerCase();
-if(_210.indexOf("rgb")==0){
-var _212=_210.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_212.splice(1,3);
-return ret;
-}else{
-var _214=dojo.gfx.color.hex2rgb(_210);
-if(_214){
-return _214;
-}else{
-return dojo.gfx.color.named[_210]||[255,255,255];
-}
-}
-};
-dojo.gfx.color.hex2rgb=function(hex){
-var _216="0123456789ABCDEF";
-var rgb=new Array(3);
-if(hex.indexOf("#")==0){
-hex=hex.substring(1);
-}
-hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_216+"]","g"),"")!=""){
-return null;
-}
-if(hex.length==3){
-rgb[0]=hex.charAt(0)+hex.charAt(0);
-rgb[1]=hex.charAt(1)+hex.charAt(1);
-rgb[2]=hex.charAt(2)+hex.charAt(2);
-}else{
-rgb[0]=hex.substring(0,2);
-rgb[1]=hex.substring(2,4);
-rgb[2]=hex.substring(4);
-}
-for(var i=0;i<rgb.length;i++){
-rgb[i]=_216.indexOf(rgb[i].charAt(0))*16+_216.indexOf(rgb[i].charAt(1));
-}
-return rgb;
-};
-dojo.gfx.color.rgb2hex=function(r,g,b){
-if(dojo.lang.isArray(r)){
-g=r[1]||0;
-b=r[2]||0;
-r=r[0]||0;
-}
-var ret=dojo.lang.map([r,g,b],function(x){
-x=new Number(x);
-var s=x.toString(16);
-while(s.length<2){
-s="0"+s;
-}
-return s;
-});
-ret.unshift("#");
-return ret.join("");
-};
-dojo.provide("dojo.lfx.Animation");
-dojo.require("dojo.lang.func");
-dojo.lfx.Line=function(_21f,end){
-this.start=_21f;
-this.end=end;
-if(dojo.lang.isArray(_21f)){
-var diff=[];
-dojo.lang.forEach(this.start,function(s,i){
-diff[i]=this.end[i]-s;
-},this);
-this.getValue=function(n){
-var res=[];
-dojo.lang.forEach(this.start,function(s,i){
-res[i]=(diff[i]*n)+s;
-},this);
-return res;
-};
-}else{
-var diff=end-_21f;
-this.getValue=function(n){
-return (diff*n)+this.start;
-};
-}
-};
-if((dojo.render.html.khtml)&&(!dojo.render.html.safari)){
-dojo.lfx.easeDefault=function(n){
-return (parseFloat("0.5")+((Math.sin((n+parseFloat("1.5"))*Math.PI))/2));
-};
-}else{
-dojo.lfx.easeDefault=function(n){
-return (0.5+((Math.sin((n+1.5)*Math.PI))/2));
-};
-}
-dojo.lfx.easeIn=function(n){
-return Math.pow(n,3);
-};
-dojo.lfx.easeOut=function(n){
-return (1-Math.pow(1-n,3));
-};
-dojo.lfx.easeInOut=function(n){
-return ((3*Math.pow(n,2))-(2*Math.pow(n,3)));
-};
-dojo.lfx.IAnimation=function(){
-};
-dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:10,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_22f,_230){
-if(!_230){
-_230=_22f;
-_22f=this;
-}
-_230=dojo.lang.hitch(_22f,_230);
-var _231=this[evt]||function(){
-};
-this[evt]=function(){
-var ret=_231.apply(this,arguments);
-_230.apply(this,arguments);
-return ret;
-};
-return this;
-},fire:function(evt,args){
-if(this[evt]){
-this[evt].apply(this,(args||[]));
-}
-return this;
-},repeat:function(_235){
-this.repeatCount=_235;
-return this;
-},_active:false,_paused:false});
-dojo.lfx.Animation=function(_236,_237,_238,_239,_23a,rate){
-dojo.lfx.IAnimation.call(this);
-if(dojo.lang.isNumber(_236)||(!_236&&_237.getValue)){
-rate=_23a;
-_23a=_239;
-_239=_238;
-_238=_237;
-_237=_236;
-_236=null;
-}else{
-if(_236.getValue||dojo.lang.isArray(_236)){
-rate=_239;
-_23a=_238;
-_239=_237;
-_238=_236;
-_237=null;
-_236=null;
-}
-}
-if(dojo.lang.isArray(_238)){
-this.curve=new dojo.lfx.Line(_238[0],_238[1]);
-}else{
-this.curve=_238;
-}
-if(_237!=null&&_237>0){
-this.duration=_237;
-}
-if(_23a){
-this.repeatCount=_23a;
-}
-if(rate){
-this.rate=rate;
-}
-if(_236){
-dojo.lang.forEach(["handler","beforeBegin","onBegin","onEnd","onPlay","onStop","onAnimate"],function(item){
-if(_236[item]){
-this.connect(item,_236[item]);
-}
-},this);
-}
-if(_239&&dojo.lang.isFunction(_239)){
-this.easing=_239;
-}
-};
-dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_23d,_23e){
-if(_23e){
-clearTimeout(this._timer);
-this._active=false;
-this._paused=false;
-this._percent=0;
-}else{
-if(this._active&&!this._paused){
-return this;
-}
-}
-this.fire("handler",["beforeBegin"]);
-this.fire("beforeBegin");
-if(_23d>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_23e);
-}),_23d);
-return this;
-}
-this._startTime=new Date().valueOf();
-if(this._paused){
-this._startTime-=(this.duration*this._percent/100);
-}
-this._endTime=this._startTime+this.duration;
-this._active=true;
-this._paused=false;
-var step=this._percent/100;
-var _240=this.curve.getValue(step);
-if(this._percent==0){
-if(!this._startRepeatCount){
-this._startRepeatCount=this.repeatCount;
-}
-this.fire("handler",["begin",_240]);
-this.fire("onBegin",[_240]);
-}
-this.fire("handler",["play",_240]);
-this.fire("onPlay",[_240]);
-this._cycle();
-return this;
-},pause:function(){
-clearTimeout(this._timer);
-if(!this._active){
-return this;
-}
-this._paused=true;
-var _241=this.curve.getValue(this._percent/100);
-this.fire("handler",["pause",_241]);
-this.fire("onPause",[_241]);
-return this;
-},gotoPercent:function(pct,_243){
-clearTimeout(this._timer);
-this._active=true;
-this._paused=true;
-this._percent=pct;
-if(_243){
-this.play();
-}
-return this;
-},stop:function(_244){
-clearTimeout(this._timer);
-var step=this._percent/100;
-if(_244){
-step=1;
-}
-var _246=this.curve.getValue(step);
-this.fire("handler",["stop",_246]);
-this.fire("onStop",[_246]);
-this._active=false;
-this._paused=false;
-return this;
-},status:function(){
-if(this._active){
-return this._paused?"paused":"playing";
-}else{
-return "stopped";
-}
-return this;
-},_cycle:function(){
-clearTimeout(this._timer);
-if(this._active){
-var curr=new Date().valueOf();
-var step=(curr-this._startTime)/(this._endTime-this._startTime);
-if(step>=1){
-step=1;
-this._percent=100;
-}else{
-this._percent=step*100;
-}
-if((this.easing)&&(dojo.lang.isFunction(this.easing))){
-step=this.easing(step);
-}
-var _249=this.curve.getValue(step);
-this.fire("handler",["animate",_249]);
-this.fire("onAnimate",[_249]);
-if(step<1){
-this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
-}else{
-this._active=false;
-this.fire("handler",["end"]);
-this.fire("onEnd");
-if(this.repeatCount>0){
-this.repeatCount--;
-this.play(null,true);
-}else{
-if(this.repeatCount==-1){
-this.play(null,true);
-}else{
-if(this._startRepeatCount){
-this.repeatCount=this._startRepeatCount;
-this._startRepeatCount=0;
-}
-}
-}
-}
-}
-return this;
-}});
-dojo.lfx.Combine=function(_24a){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._animsEnded=0;
-var _24b=arguments;
-if(_24b.length==1&&(dojo.lang.isArray(_24b[0])||dojo.lang.isArrayLike(_24b[0]))){
-_24b=_24b[0];
-}
-dojo.lang.forEach(_24b,function(anim){
-this._anims.push(anim);
-anim.connect("onEnd",dojo.lang.hitch(this,"_onAnimsEnded"));
-},this);
-};
-dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_24d,_24e){
-if(!this._anims.length){
-return this;
-}
-this.fire("beforeBegin");
-if(_24d>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_24e);
-}),_24d);
-return this;
-}
-if(_24e||this._anims[0].percent==0){
-this.fire("onBegin");
-}
-this.fire("onPlay");
-this._animsCall("play",null,_24e);
-return this;
-},pause:function(){
-this.fire("onPause");
-this._animsCall("pause");
-return this;
-},stop:function(_24f){
-this.fire("onStop");
-this._animsCall("stop",_24f);
-return this;
-},_onAnimsEnded:function(){
-this._animsEnded++;
-if(this._animsEnded>=this._anims.length){
-this.fire("onEnd");
-}
-return this;
-},_animsCall:function(_250){
-var args=[];
-if(arguments.length>1){
-for(var i=1;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-}
-var _253=this;
-dojo.lang.forEach(this._anims,function(anim){
-anim[_250](args);
-},_253);
-return this;
-}});
-dojo.lfx.Chain=function(_255){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._currAnim=-1;
-var _256=arguments;
-if(_256.length==1&&(dojo.lang.isArray(_256[0])||dojo.lang.isArrayLike(_256[0]))){
-_256=_256[0];
-}
-var _257=this;
-dojo.lang.forEach(_256,function(anim,i,_25a){
-this._anims.push(anim);
-if(i<_25a.length-1){
-anim.connect("onEnd",dojo.lang.hitch(this,"_playNext"));
-}else{
-anim.connect("onEnd",dojo.lang.hitch(this,function(){
-this.fire("onEnd");
-}));
-}
-},this);
-};
-dojo.inherits(dojo.lfx.Chain,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_25b,_25c){
-if(!this._anims.length){
-return this;
-}
-if(_25c||!this._anims[this._currAnim]){
-this._currAnim=0;
-}
-var _25d=this._anims[this._currAnim];
-this.fire("beforeBegin");
-if(_25b>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_25c);
-}),_25b);
-return this;
-}
-if(_25d){
-if(this._currAnim==0){
-this.fire("handler",["begin",this._currAnim]);
-this.fire("onBegin",[this._currAnim]);
-}
-this.fire("onPlay",[this._currAnim]);
-_25d.play(null,_25c);
-}
-return this;
-},pause:function(){
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].pause();
-this.fire("onPause",[this._currAnim]);
-}
-return this;
-},playPause:function(){
-if(this._anims.length==0){
-return this;
-}
-if(this._currAnim==-1){
-this._currAnim=0;
-}
-var _25e=this._anims[this._currAnim];
-if(_25e){
-if(!_25e._active||_25e._paused){
-this.play();
-}else{
-this.pause();
-}
-}
-return this;
-},stop:function(){
-var _25f=this._anims[this._currAnim];
-if(_25f){
-_25f.stop();
-this.fire("onStop",[this._currAnim]);
-}
-return _25f;
-},_playNext:function(){
-if(this._currAnim==-1||this._anims.length==0){
-return this;
-}
-this._currAnim++;
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].play(null,true);
-}
-return this;
-}});
-dojo.lfx.combine=function(_260){
-var _261=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_261=arguments[0];
-}
-if(_261.length==1){
-return _261[0];
-}
-return new dojo.lfx.Combine(_261);
-};
-dojo.lfx.chain=function(_262){
-var _263=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_263=arguments[0];
-}
-if(_263.length==1){
-return _263[0];
-}
-return new dojo.lfx.Chain(_263);
-};
-dojo.require("dojo.html.style");
-dojo.provide("dojo.html.color");
-dojo.require("dojo.lang.common");
-dojo.html.getBackgroundColor=function(node){
-node=dojo.byId(node);
-var _265;
-do{
-_265=dojo.html.getStyle(node,"background-color");
-if(_265.toLowerCase()=="rgba(0, 0, 0, 0)"){
-_265="transparent";
-}
-if(node==document.getElementsByTagName("body")[0]){
-node=null;
-break;
-}
-node=node.parentNode;
-}while(node&&dojo.lang.inArray(["transparent",""],_265));
-if(_265=="transparent"){
-_265=[255,255,255,0];
-}else{
-_265=dojo.gfx.color.extractRGB(_265);
-}
-return _265;
-};
-dojo.provide("dojo.lfx.html");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.html.display");
-dojo.lfx.html._byId=function(_266){
-if(!_266){
-return [];
-}
-if(dojo.lang.isArrayLike(_266)){
-if(!_266.alreadyChecked){
-var n=[];
-dojo.lang.forEach(_266,function(node){
-n.push(dojo.byId(node));
-});
-n.alreadyChecked=true;
-return n;
-}else{
-return _266;
-}
-}else{
-var n=[];
-n.push(dojo.byId(_266));
-n.alreadyChecked=true;
-return n;
-}
-};
-dojo.lfx.html.propertyAnimation=function(_269,_26a,_26b,_26c,_26d){
-_269=dojo.lfx.html._byId(_269);
-var _26e={"propertyMap":_26a,"nodes":_269,"duration":_26b,"easing":_26c||dojo.lfx.easeDefault};
-var _26f=function(args){
-if(args.nodes.length==1){
-var pm=args.propertyMap;
-if(!dojo.lang.isArray(args.propertyMap)){
-var parr=[];
-for(var _273 in pm){
-pm[_273].property=_273;
-parr.push(pm[_273]);
-}
-pm=args.propertyMap=parr;
-}
-dojo.lang.forEach(pm,function(prop){
-if(dj_undef("start",prop)){
-if(prop.property!="opacity"){
-prop.start=parseInt(dojo.html.getComputedStyle(args.nodes[0],prop.property));
-}else{
-prop.start=dojo.html.getOpacity(args.nodes[0]);
-}
-}
-});
-}
-};
-var _275=function(_276){
-var _277=[];
-dojo.lang.forEach(_276,function(c){
-_277.push(Math.round(c));
-});
-return _277;
-};
-var _279=function(n,_27b){
-n=dojo.byId(n);
-if(!n||!n.style){
-return;
-}
-for(var s in _27b){
-try{
-if(s=="opacity"){
-dojo.html.setOpacity(n,_27b[s]);
-}else{
-n.style[s]=_27b[s];
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-var _27d=function(_27e){
-this._properties=_27e;
-this.diffs=new Array(_27e.length);
-dojo.lang.forEach(_27e,function(prop,i){
-if(dojo.lang.isFunction(prop.start)){
-prop.start=prop.start(prop,i);
-}
-if(dojo.lang.isFunction(prop.end)){
-prop.end=prop.end(prop,i);
-}
-if(dojo.lang.isArray(prop.start)){
-this.diffs[i]=null;
-}else{
-if(prop.start instanceof dojo.gfx.color.Color){
-prop.startRgb=prop.start.toRgb();
-prop.endRgb=prop.end.toRgb();
-}else{
-this.diffs[i]=prop.end-prop.start;
-}
-}
-},this);
-this.getValue=function(n){
-var ret={};
-dojo.lang.forEach(this._properties,function(prop,i){
-var _285=null;
-if(dojo.lang.isArray(prop.start)){
-}else{
-if(prop.start instanceof dojo.gfx.color.Color){
-_285=(prop.units||"rgb")+"(";
-for(var j=0;j<prop.startRgb.length;j++){
-_285+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
-}
-_285+=")";
-}else{
-_285=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
-}
-}
-ret[dojo.html.toCamelCase(prop.property)]=_285;
-},this);
-return ret;
-};
-};
-var anim=new dojo.lfx.Animation({beforeBegin:function(){
-_26f(_26e);
-anim.curve=new _27d(_26e.propertyMap);
-},onAnimate:function(_288){
-dojo.lang.forEach(_26e.nodes,function(node){
-_279(node,_288);
-});
-}},_26e.duration,null,_26e.easing);
-if(_26d){
-for(var x in _26d){
-if(dojo.lang.isFunction(_26d[x])){
-anim.connect(x,anim,_26d[x]);
-}
-}
-}
-return anim;
-};
-dojo.lfx.html._makeFadeable=function(_28b){
-var _28c=function(node){
-if(dojo.render.html.ie){
-if((node.style.zoom.length==0)&&(dojo.html.getStyle(node,"zoom")=="normal")){
-node.style.zoom="1";
-}
-if((node.style.width.length==0)&&(dojo.html.getStyle(node,"width")=="auto")){
-node.style.width="auto";
-}
-}
-};
-if(dojo.lang.isArrayLike(_28b)){
-dojo.lang.forEach(_28b,_28c);
-}else{
-_28c(_28b);
-}
-};
-dojo.lfx.html.fade=function(_28e,_28f,_290,_291,_292){
-_28e=dojo.lfx.html._byId(_28e);
-var _293={property:"opacity"};
-if(!dj_undef("start",_28f)){
-_293.start=_28f.start;
-}else{
-_293.start=function(){
-return dojo.html.getOpacity(_28e[0]);
-};
-}
-if(!dj_undef("end",_28f)){
-_293.end=_28f.end;
-}else{
-dojo.raise("dojo.lfx.html.fade needs an end value");
-}
-var anim=dojo.lfx.propertyAnimation(_28e,[_293],_290,_291);
-anim.connect("beforeBegin",function(){
-dojo.lfx.html._makeFadeable(_28e);
-});
-if(_292){
-anim.connect("onEnd",function(){
-_292(_28e,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.fadeIn=function(_295,_296,_297,_298){
-return dojo.lfx.html.fade(_295,{end:1},_296,_297,_298);
-};
-dojo.lfx.html.fadeOut=function(_299,_29a,_29b,_29c){
-return dojo.lfx.html.fade(_299,{end:0},_29a,_29b,_29c);
-};
-dojo.lfx.html.fadeShow=function(_29d,_29e,_29f,_2a0){
-_29d=dojo.lfx.html._byId(_29d);
-dojo.lang.forEach(_29d,function(node){
-dojo.html.setOpacity(node,0);
-});
-var anim=dojo.lfx.html.fadeIn(_29d,_29e,_29f,_2a0);
-anim.connect("beforeBegin",function(){
-if(dojo.lang.isArrayLike(_29d)){
-dojo.lang.forEach(_29d,dojo.html.show);
-}else{
-dojo.html.show(_29d);
-}
-});
-return anim;
-};
-dojo.lfx.html.fadeHide=function(_2a3,_2a4,_2a5,_2a6){
-var anim=dojo.lfx.html.fadeOut(_2a3,_2a4,_2a5,function(){
-if(dojo.lang.isArrayLike(_2a3)){
-dojo.lang.forEach(_2a3,dojo.html.hide);
-}else{
-dojo.html.hide(_2a3);
-}
-if(_2a6){
-_2a6(_2a3,anim);
-}
-});
-return anim;
-};
-dojo.lfx.html.wipeIn=function(_2a8,_2a9,_2aa,_2ab){
-_2a8=dojo.lfx.html._byId(_2a8);
-var _2ac=[];
-dojo.lang.forEach(_2a8,function(node){
-var _2ae={};
-var _2af,_2b0,_2b1;
-with(node.style){
-_2af=top;
-_2b0=left;
-_2b1=position;
-top="-9999px";
-left="-9999px";
-position="absolute";
-display="";
-}
-var _2b2=dojo.html.getBorderBox(node).height;
-with(node.style){
-top=_2af;
-left=_2b0;
-position=_2b1;
-display="none";
-}
-var anim=dojo.lfx.propertyAnimation(node,{"height":{start:1,end:function(){
-return _2b2;
-}}},_2a9,_2aa);
-anim.connect("beforeBegin",function(){
-_2ae.overflow=node.style.overflow;
-_2ae.height=node.style.height;
-with(node.style){
-overflow="hidden";
-height="1px";
-}
-dojo.html.show(node);
-});
-anim.connect("onEnd",function(){
-with(node.style){
-overflow=_2ae.overflow;
-height=_2ae.height;
-}
-if(_2ab){
-_2ab(node,anim);
-}
-});
-_2ac.push(anim);
-});
-return dojo.lfx.combine(_2ac);
-};
-dojo.lfx.html.wipeOut=function(_2b4,_2b5,_2b6,_2b7){
-_2b4=dojo.lfx.html._byId(_2b4);
-var _2b8=[];
-dojo.lang.forEach(_2b4,function(node){
-var _2ba={};
-var anim=dojo.lfx.propertyAnimation(node,{"height":{start:function(){
-return dojo.html.getContentBox(node).height;
-},end:1}},_2b5,_2b6,{"beforeBegin":function(){
-_2ba.overflow=node.style.overflow;
-_2ba.height=node.style.height;
-with(node.style){
-overflow="hidden";
-}
-dojo.html.show(node);
-},"onEnd":function(){
-dojo.html.hide(node);
-with(node.style){
-overflow=_2ba.overflow;
-height=_2ba.height;
-}
-if(_2b7){
-_2b7(node,anim);
-}
-}});
-_2b8.push(anim);
-});
-return dojo.lfx.combine(_2b8);
-};
-dojo.lfx.html.slideTo=function(_2bc,_2bd,_2be,_2bf,_2c0){
-_2bc=dojo.lfx.html._byId(_2bc);
-var _2c1=[];
-var _2c2=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_2bd)){
-dojo.deprecated("dojo.lfx.html.slideTo(node, array)","use dojo.lfx.html.slideTo(node, {top: value, left: value});","0.5");
-_2bd={top:_2bd[0],left:_2bd[1]};
-}
-dojo.lang.forEach(_2bc,function(node){
-var top=null;
-var left=null;
-var init=(function(){
-var _2c7=node;
-return function(){
-var pos=_2c2(_2c7,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_2c2(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_2c2(node,"left"))||0);
-if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_2c7,true);
-dojo.html.setStyleAttributes(_2c7,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-left=ret.x;
-}
-};
-})();
-init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:(_2bd.top||0)},"left":{start:left,end:(_2bd.left||0)}},_2be,_2bf,{"beforeBegin":init});
-if(_2c0){
-anim.connect("onEnd",function(){
-_2c0(_2bc,anim);
-});
-}
-_2c1.push(anim);
-});
-return dojo.lfx.combine(_2c1);
-};
-dojo.lfx.html.slideBy=function(_2cb,_2cc,_2cd,_2ce,_2cf){
-_2cb=dojo.lfx.html._byId(_2cb);
-var _2d0=[];
-var _2d1=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_2cc)){
-dojo.deprecated("dojo.lfx.html.slideBy(node, array)","use dojo.lfx.html.slideBy(node, {top: value, left: value});","0.5");
-_2cc={top:_2cc[0],left:_2cc[1]};
-}
-dojo.lang.forEach(_2cb,function(node){
-var top=null;
-var left=null;
-var init=(function(){
-var _2d6=node;
-return function(){
-var pos=_2d1(_2d6,"position");
-top=(pos=="absolute"?node.offsetTop:parseInt(_2d1(node,"top"))||0);
-left=(pos=="absolute"?node.offsetLeft:parseInt(_2d1(node,"left"))||0);
-if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_2d6,true);
-dojo.html.setStyleAttributes(_2d6,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-left=ret.x;
-}
-};
-})();
-init();
-var anim=dojo.lfx.propertyAnimation(node,{"top":{start:top,end:top+(_2cc.top||0)},"left":{start:left,end:left+(_2cc.left||0)}},_2cd,_2ce).connect("beforeBegin",init);
-if(_2cf){
-anim.connect("onEnd",function(){
-_2cf(_2cb,anim);
-});
-}
-_2d0.push(anim);
-});
-return dojo.lfx.combine(_2d0);
-};
-dojo.lfx.html.explode=function(_2da,_2db,_2dc,_2dd,_2de){
-var h=dojo.html;
-_2da=dojo.byId(_2da);
-_2db=dojo.byId(_2db);
-var _2e0=h.toCoordinateObject(_2da,true);
-var _2e1=document.createElement("div");
-h.copyStyle(_2e1,_2db);
-if(_2db.explodeClassName){
-_2e1.className=_2db.explodeClassName;
-}
-with(_2e1.style){
-position="absolute";
-display="none";
-var _2e2=h.getStyle(_2da,"background-color");
-backgroundColor=_2e2?_2e2.toLowerCase():"transparent";
-backgroundColor=(backgroundColor=="transparent")?"rgb(221, 221, 221)":backgroundColor;
-}
-dojo.body().appendChild(_2e1);
-with(_2db.style){
-visibility="hidden";
-display="block";
-}
-var _2e3=h.toCoordinateObject(_2db,true);
-with(_2db.style){
-display="none";
-visibility="visible";
-}
-var _2e4={opacity:{start:0.5,end:1}};
-dojo.lang.forEach(["height","width","top","left"],function(type){
-_2e4[type]={start:_2e0[type],end:_2e3[type]};
-});
-var anim=new dojo.lfx.propertyAnimation(_2e1,_2e4,_2dc,_2dd,{"beforeBegin":function(){
-h.setDisplay(_2e1,"block");
-},"onEnd":function(){
-h.setDisplay(_2db,"block");
-_2e1.parentNode.removeChild(_2e1);
-}});
-if(_2de){
-anim.connect("onEnd",function(){
-_2de(_2db,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.implode=function(_2e7,end,_2e9,_2ea,_2eb){
-var h=dojo.html;
-_2e7=dojo.byId(_2e7);
-end=dojo.byId(end);
-var _2ed=dojo.html.toCoordinateObject(_2e7,true);
-var _2ee=dojo.html.toCoordinateObject(end,true);
-var _2ef=document.createElement("div");
-dojo.html.copyStyle(_2ef,_2e7);
-if(_2e7.explodeClassName){
-_2ef.className=_2e7.explodeClassName;
-}
-dojo.html.setOpacity(_2ef,0.3);
-with(_2ef.style){
-position="absolute";
-display="none";
-backgroundColor=h.getStyle(_2e7,"background-color").toLowerCase();
-}
-dojo.body().appendChild(_2ef);
-var _2f0={opacity:{start:1,end:0.5}};
-dojo.lang.forEach(["height","width","top","left"],function(type){
-_2f0[type]={start:_2ed[type],end:_2ee[type]};
-});
-var anim=new dojo.lfx.propertyAnimation(_2ef,_2f0,_2e9,_2ea,{"beforeBegin":function(){
-dojo.html.hide(_2e7);
-dojo.html.show(_2ef);
-},"onEnd":function(){
-_2ef.parentNode.removeChild(_2ef);
-}});
-if(_2eb){
-anim.connect("onEnd",function(){
-_2eb(_2e7,anim);
-});
-}
-return anim;
-};
-dojo.lfx.html.highlight=function(_2f3,_2f4,_2f5,_2f6,_2f7){
-_2f3=dojo.lfx.html._byId(_2f3);
-var _2f8=[];
-dojo.lang.forEach(_2f3,function(node){
-var _2fa=dojo.html.getBackgroundColor(node);
-var bg=dojo.html.getStyle(node,"background-color").toLowerCase();
-var _2fc=dojo.html.getStyle(node,"background-image");
-var _2fd=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
-while(_2fa.length>3){
-_2fa.pop();
-}
-var rgb=new dojo.gfx.color.Color(_2f4);
-var _2ff=new dojo.gfx.color.Color(_2fa);
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:rgb,end:_2ff}},_2f5,_2f6,{"beforeBegin":function(){
-if(_2fc){
-node.style.backgroundImage="none";
-}
-node.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")";
-},"onEnd":function(){
-if(_2fc){
-node.style.backgroundImage=_2fc;
-}
-if(_2fd){
-node.style.backgroundColor="transparent";
-}
-if(_2f7){
-_2f7(node,anim);
-}
-}});
-_2f8.push(anim);
-});
-return dojo.lfx.combine(_2f8);
-};
-dojo.lfx.html.unhighlight=function(_301,_302,_303,_304,_305){
-_301=dojo.lfx.html._byId(_301);
-var _306=[];
-dojo.lang.forEach(_301,function(node){
-var _308=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
-var rgb=new dojo.gfx.color.Color(_302);
-var _30a=dojo.html.getStyle(node,"background-image");
-var anim=dojo.lfx.propertyAnimation(node,{"background-color":{start:_308,end:rgb}},_303,_304,{"beforeBegin":function(){
-if(_30a){
-node.style.backgroundImage="none";
-}
-node.style.backgroundColor="rgb("+_308.toRgb().join(",")+")";
-},"onEnd":function(){
-if(_305){
-_305(node,anim);
-}
-}});
-_306.push(anim);
-});
-return dojo.lfx.combine(_306);
-};
-dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
-dojo.kwCompoundRequire({browser:["dojo.lfx.html"],dashboard:["dojo.lfx.html"]});
-dojo.provide("dojo.lfx.*");
-dojo.provide("dojo.lfx.toggle");
-dojo.lfx.toggle.plain={show:function(node,_30d,_30e,_30f){
-dojo.html.show(node);
-if(dojo.lang.isFunction(_30f)){
-_30f();
-}
-},hide:function(node,_311,_312,_313){
-dojo.html.hide(node);
-if(dojo.lang.isFunction(_313)){
-_313();
-}
-}};
-dojo.lfx.toggle.fade={show:function(node,_315,_316,_317){
-dojo.lfx.fadeShow(node,_315,_316,_317).play();
-},hide:function(node,_319,_31a,_31b){
-dojo.lfx.fadeHide(node,_319,_31a,_31b).play();
-}};
-dojo.lfx.toggle.wipe={show:function(node,_31d,_31e,_31f){
-dojo.lfx.wipeIn(node,_31d,_31e,_31f).play();
-},hide:function(node,_321,_322,_323){
-dojo.lfx.wipeOut(node,_321,_322,_323).play();
-}};
-dojo.lfx.toggle.explode={show:function(node,_325,_326,_327,_328){
-dojo.lfx.explode(_328||{x:0,y:0,width:0,height:0},node,_325,_326,_327).play();
-},hide:function(node,_32a,_32b,_32c,_32d){
-dojo.lfx.implode(node,_32d||{x:0,y:0,width:0,height:0},_32a,_32b,_32c).play();
-}};
-dojo.provide("dojo.widget.HtmlWidget");
-dojo.require("dojo.html.display");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lang.func");
-dojo.declare("dojo.widget.HtmlWidget",dojo.widget.DomWidget,{templateCssPath:null,templatePath:null,lang:"",toggle:"plain",toggleDuration:150,initialize:function(args,frag){
-},postMixInProperties:function(args,frag){
-if(this.lang===""){
-this.lang=null;
-}
-this.toggleObj=dojo.lfx.toggle[this.toggle.toLowerCase()]||dojo.lfx.toggle.plain;
-},createNodesFromText:function(txt,wrap){
-return dojo.html.createNodesFromText(txt,wrap);
-},destroyRendering:function(_334){
-try{
-if(this.bgIframe){
-this.bgIframe.remove();
-delete this.bgIframe;
-}
-if(!_334&&this.domNode){
-dojo.event.browser.clean(this.domNode);
-}
-dojo.widget.HtmlWidget.superclass.destroyRendering.call(this);
-}
-catch(e){
-}
-},isShowing:function(){
-return dojo.html.isShowing(this.domNode);
-},toggleShowing:function(){
-if(this.isShowing()){
-this.hide();
-}else{
-this.show();
-}
-},show:function(){
-if(this.isShowing()){
-return;
-}
-this.animationInProgress=true;
-this.toggleObj.show(this.domNode,this.toggleDuration,null,dojo.lang.hitch(this,this.onShow),this.explodeSrc);
-},onShow:function(){
-this.animationInProgress=false;
-this.checkSize();
-},hide:function(){
-if(!this.isShowing()){
-return;
-}
-this.animationInProgress=true;
-this.toggleObj.hide(this.domNode,this.toggleDuration,null,dojo.lang.hitch(this,this.onHide),this.explodeSrc);
-},onHide:function(){
-this.animationInProgress=false;
-},_isResized:function(w,h){
-if(!this.isShowing()){
-return false;
-}
-var wh=dojo.html.getMarginBox(this.domNode);
-var _338=w||wh.width;
-var _339=h||wh.height;
-if(this.width==_338&&this.height==_339){
-return false;
-}
-this.width=_338;
-this.height=_339;
-return true;
-},checkSize:function(){
-if(!this._isResized()){
-return;
-}
-this.onResized();
-},resizeTo:function(w,h){
-dojo.html.setMarginBox(this.domNode,{width:w,height:h});
-if(this.isShowing()){
-this.onResized();
-}
-},resizeSoon:function(){
-if(this.isShowing()){
-dojo.lang.setTimeout(this,this.onResized,0);
-}
-},onResized:function(){
-dojo.lang.forEach(this.children,function(_33c){
-if(_33c.checkSize){
-_33c.checkSize();
-}
-});
-}});
-dojo.kwCompoundRequire({common:["dojo.xml.Parse","dojo.widget.Widget","dojo.widget.Parse","dojo.widget.Manager"],browser:["dojo.widget.DomWidget","dojo.widget.HtmlWidget"],dashboard:["dojo.widget.DomWidget","dojo.widget.HtmlWidget"],svg:["dojo.widget.SvgWidget"],rhino:["dojo.widget.SwtWidget"]});
-dojo.provide("dojo.widget.*");
-dojo.kwCompoundRequire({common:["dojo.io.common"],rhino:["dojo.io.RhinoIO"],browser:["dojo.io.BrowserIO","dojo.io.cookie"],dashboard:["dojo.io.BrowserIO","dojo.io.cookie"]});
-dojo.provide("dojo.io.*");
-dojo.provide("dojo.widget.ContentPane");
-dojo.require("dojo.string");
-dojo.require("dojo.string.extras");
-dojo.require("dojo.html.style");
-dojo.widget.defineWidget("dojo.widget.ContentPane",dojo.widget.HtmlWidget,function(){
-this._styleNodes=[];
-this._onLoadStack=[];
-this._onUnloadStack=[];
-this._callOnUnload=false;
-this._ioBindObj;
-this.scriptScope;
-this.bindArgs={};
-},{isContainer:true,adjustPaths:true,href:"",extractContent:true,parseContent:true,cacheContent:true,preload:false,refreshOnShow:false,handler:"",executeScripts:false,scriptSeparation:true,loadingMessage:"Loading...",isLoaded:false,postCreate:function(args,frag,_33f){
-if(this.handler!==""){
-this.setHandler(this.handler);
-}
-if(this.isShowing()||this.preload){
-this.loadContents();
-}
-},show:function(){
-if(this.refreshOnShow){
-this.refresh();
-}else{
-this.loadContents();
-}
-dojo.widget.ContentPane.superclass.show.call(this);
-},refresh:function(){
-this.isLoaded=false;
-this.loadContents();
-},loadContents:function(){
-if(this.isLoaded){
-return;
-}
-if(dojo.lang.isFunction(this.handler)){
-this._runHandler();
-}else{
-if(this.href!=""){
-this._downloadExternalContent(this.href,this.cacheContent&&!this.refreshOnShow);
-}
-}
-},setUrl:function(url){
-this.href=url;
-this.isLoaded=false;
-if(this.preload||this.isShowing()){
-this.loadContents();
-}
-},abort:function(){
-var bind=this._ioBindObj;
-if(!bind||!bind.abort){
-return;
-}
-bind.abort();
-delete this._ioBindObj;
-},_downloadExternalContent:function(url,_343){
-this.abort();
-this._handleDefaults(this.loadingMessage,"onDownloadStart");
-var self=this;
-this._ioBindObj=dojo.io.bind(this._cacheSetting({url:url,mimetype:"text/html",handler:function(type,data,xhr){
-delete self._ioBindObj;
-if(type=="load"){
-self.onDownloadEnd.call(self,url,data);
-}else{
-var e={responseText:xhr.responseText,status:xhr.status,statusText:xhr.statusText,responseHeaders:xhr.getAllResponseHeaders(),text:"Error loading '"+url+"' ("+xhr.status+" "+xhr.statusText+")"};
-self._handleDefaults.call(self,e,"onDownloadError");
-self.onLoad();
-}
-}},_343));
-},_cacheSetting:function(_349,_34a){
-for(var x in this.bindArgs){
-if(dojo.lang.isUndefined(_349[x])){
-_349[x]=this.bindArgs[x];
-}
-}
-if(dojo.lang.isUndefined(_349.useCache)){
-_349.useCache=_34a;
-}
-if(dojo.lang.isUndefined(_349.preventCache)){
-_349.preventCache=!_34a;
-}
-if(dojo.lang.isUndefined(_349.mimetype)){
-_349.mimetype="text/html";
-}
-return _349;
-},onLoad:function(e){
-this._runStack("_onLoadStack");
-this.isLoaded=true;
-},onUnLoad:function(e){
-dojo.deprecated(this.widgetType+".onUnLoad, use .onUnload (lowercased load)",0.5);
-},onUnload:function(e){
-this._runStack("_onUnloadStack");
-delete this.scriptScope;
-if(this.onUnLoad!==dojo.widget.ContentPane.prototype.onUnLoad){
-this.onUnLoad.apply(this,arguments);
-}
-},_runStack:function(_34f){
-var st=this[_34f];
-var err="";
-var _352=this.scriptScope||window;
-for(var i=0;i<st.length;i++){
-try{
-st[i].call(_352);
-}
-catch(e){
-err+="\n"+st[i]+" failed: "+e.description;
-}
-}
-this[_34f]=[];
-if(err.length){
-var name=(_34f=="_onLoadStack")?"addOnLoad":"addOnUnLoad";
-this._handleDefaults(name+" failure\n "+err,"onExecError","debug");
-}
-},addOnLoad:function(obj,func){
-this._pushOnStack(this._onLoadStack,obj,func);
-},addOnUnload:function(obj,func){
-this._pushOnStack(this._onUnloadStack,obj,func);
-},addOnUnLoad:function(){
-dojo.deprecated(this.widgetType+".addOnUnLoad, use addOnUnload instead. (lowercased Load)",0.5);
-this.addOnUnload.apply(this,arguments);
-},_pushOnStack:function(_359,obj,func){
-if(typeof func=="undefined"){
-_359.push(obj);
-}else{
-_359.push(function(){
-obj[func]();
-});
-}
-},destroy:function(){
-this.onUnload();
-dojo.widget.ContentPane.superclass.destroy.call(this);
-},onExecError:function(e){
-},onContentError:function(e){
-},onDownloadError:function(e){
-},onDownloadStart:function(e){
-},onDownloadEnd:function(url,data){
-data=this.splitAndFixPaths(data,url);
-this.setContent(data);
-},_handleDefaults:function(e,_363,_364){
-if(!_363){
-_363="onContentError";
-}
-if(dojo.lang.isString(e)){
-e={text:e};
-}
-if(!e.text){
-e.text=e.toString();
-}
-e.toString=function(){
-return this.text;
-};
-if(typeof e.returnValue!="boolean"){
-e.returnValue=true;
-}
-if(typeof e.preventDefault!="function"){
-e.preventDefault=function(){
-this.returnValue=false;
-};
-}
-this[_363](e);
-if(e.returnValue){
-switch(_364){
-case true:
-case "alert":
-alert(e.toString());
-break;
-case "debug":
-dojo.debug(e.toString());
-break;
-default:
-if(this._callOnUnload){
-this.onUnload();
-}
-this._callOnUnload=false;
-if(arguments.callee._loopStop){
-dojo.debug(e.toString());
-}else{
-arguments.callee._loopStop=true;
-this._setContent(e.toString());
-}
-}
-}
-arguments.callee._loopStop=false;
-},splitAndFixPaths:function(s,url){
-var _367=[],_368=[],tmp=[];
-var _36a=[],_36b=[],attr=[],_36d=[];
-var str="",path="",fix="",_371="",tag="",_373="";
-if(!url){
-url="./";
-}
-if(s){
-var _374=/<title[^>]*>([\s\S]*?)<\/title>/i;
-while(_36a=_374.exec(s)){
-_367.push(_36a[1]);
-s=s.substring(0,_36a.index)+s.substr(_36a.index+_36a[0].length);
-}
-if(this.adjustPaths){
-var _375=/<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i;
-var _376=/\s(src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i;
-var _377=/^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
-while(tag=_375.exec(s)){
-str+=s.substring(0,tag.index);
-s=s.substring((tag.index+tag[0].length),s.length);
-tag=tag[0];
-_371="";
-while(attr=_376.exec(tag)){
-path="";
-_373=attr[3];
-switch(attr[1].toLowerCase()){
-case "src":
-case "href":
-if(_377.exec(_373)){
-path=_373;
-}else{
-path=(new dojo.uri.Uri(url,_373).toString());
-}
-break;
-case "style":
-path=dojo.html.fixPathsInCssText(_373,url);
-break;
-default:
-path=_373;
-}
-fix=" "+attr[1]+"="+attr[2]+path+attr[2];
-_371+=tag.substring(0,attr.index)+fix;
-tag=tag.substring((attr.index+attr[0].length),tag.length);
-}
-str+=_371+tag;
-}
-s=str+s;
-}
-_374=/(?:<(style)[^>]*>([\s\S]*?)<\/style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
-while(_36a=_374.exec(s)){
-if(_36a[1]&&_36a[1].toLowerCase()=="style"){
-_36d.push(dojo.html.fixPathsInCssText(_36a[2],url));
-}else{
-if(attr=_36a[3].match(/href=(['"]?)([^'">]*)\1/i)){
-_36d.push({path:attr[2]});
-}
-}
-s=s.substring(0,_36a.index)+s.substr(_36a.index+_36a[0].length);
-}
-var _374=/<script([^>]*)>([\s\S]*?)<\/script>/i;
-var _378=/src=(['"]?)([^"']*)\1/i;
-var _379=/.*(\bdojo\b\.js(?:\.uncompressed\.js)?)$/;
-var _37a=/(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo\.hostenv\.writeIncludes\(\s*\);?/g;
-var _37b=/dojo\.(?:(?:require(?:After)?(?:If)?)|(?:widget\.(?:manager\.)?registerWidgetPackage)|(?:(?:hostenv\.)?setModulePrefix|registerModulePath)|defineNamespace)\((['"]).*?\1\)\s*;?/;
-while(_36a=_374.exec(s)){
-if(this.executeScripts&&_36a[1]){
-if(attr=_378.exec(_36a[1])){
-if(_379.exec(attr[2])){
-dojo.debug("Security note! inhibit:"+attr[2]+" from  being loaded again.");
-}else{
-_368.push({path:attr[2]});
-}
-}
-}
-if(_36a[2]){
-var sc=_36a[2].replace(_37a,"");
-if(!sc){
-continue;
-}
-while(tmp=_37b.exec(sc)){
-_36b.push(tmp[0]);
-sc=sc.substring(0,tmp.index)+sc.substr(tmp.index+tmp[0].length);
-}
-if(this.executeScripts){
-_368.push(sc);
-}
-}
-s=s.substr(0,_36a.index)+s.substr(_36a.index+_36a[0].length);
-}
-if(this.extractContent){
-_36a=s.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_36a){
-s=_36a[1];
-}
-}
-if(this.executeScripts&&this.scriptSeparation){
-var _374=/(<[a-zA-Z][a-zA-Z0-9]*\s[^>]*?\S=)((['"])[^>]*scriptScope[^>]*>)/;
-var _37d=/([\s'";:\(])scriptScope(.*)/;
-str="";
-while(tag=_374.exec(s)){
-tmp=((tag[3]=="'")?"\"":"'");
-fix="";
-str+=s.substring(0,tag.index)+tag[1];
-while(attr=_37d.exec(tag[2])){
-tag[2]=tag[2].substring(0,attr.index)+attr[1]+"dojo.widget.byId("+tmp+this.widgetId+tmp+").scriptScope"+attr[2];
-}
-str+=tag[2];
-s=s.substr(tag.index+tag[0].length);
-}
-s=str+s;
-}
-}
-return {"xml":s,"styles":_36d,"titles":_367,"requires":_36b,"scripts":_368,"url":url};
-},_setContent:function(cont){
-this.destroyChildren();
-for(var i=0;i<this._styleNodes.length;i++){
-if(this._styleNodes[i]&&this._styleNodes[i].parentNode){
-this._styleNodes[i].parentNode.removeChild(this._styleNodes[i]);
-}
-}
-this._styleNodes=[];
-try{
-var node=this.containerNode||this.domNode;
-while(node.firstChild){
-dojo.html.destroyNode(node.firstChild);
-}
-if(typeof cont!="string"){
-node.appendChild(cont);
-}else{
-node.innerHTML=cont;
-}
-}
-catch(e){
-e.text="Couldn't load content:"+e.description;
-this._handleDefaults(e,"onContentError");
-}
-},setContent:function(data){
-this.abort();
-if(this._callOnUnload){
-this.onUnload();
-}
-this._callOnUnload=true;
-if(!data||dojo.html.isNode(data)){
-this._setContent(data);
-this.onResized();
-this.onLoad();
-}else{
-if(typeof data.xml!="string"){
-this.href="";
-data=this.splitAndFixPaths(data);
-}
-this._setContent(data.xml);
-for(var i=0;i<data.styles.length;i++){
-if(data.styles[i].path){
-this._styleNodes.push(dojo.html.insertCssFile(data.styles[i].path,dojo.doc(),false,true));
-}else{
-this._styleNodes.push(dojo.html.insertCssText(data.styles[i]));
-}
-}
-if(this.parseContent){
-for(var i=0;i<data.requires.length;i++){
-try{
-eval(data.requires[i]);
-}
-catch(e){
-e.text="ContentPane: error in package loading calls, "+(e.description||e);
-this._handleDefaults(e,"onContentError","debug");
-}
-}
-}
-var _383=this;
-function asyncParse(){
-if(_383.executeScripts){
-_383._executeScripts(data.scripts);
-}
-if(_383.parseContent){
-var node=_383.containerNode||_383.domNode;
-var _385=new dojo.xml.Parse();
-var frag=_385.parseElement(node,null,true);
-dojo.widget.getParser().createSubComponents(frag,_383);
-}
-_383.onResized();
-_383.onLoad();
-}
-if(dojo.hostenv.isXDomain&&data.requires.length){
-dojo.addOnLoad(asyncParse);
-}else{
-asyncParse();
-}
-}
-},setHandler:function(_387){
-var fcn=dojo.lang.isFunction(_387)?_387:window[_387];
-if(!dojo.lang.isFunction(fcn)){
-this._handleDefaults("Unable to set handler, '"+_387+"' not a function.","onExecError",true);
-return;
-}
-this.handler=function(){
-return fcn.apply(this,arguments);
-};
-},_runHandler:function(){
-var ret=true;
-if(dojo.lang.isFunction(this.handler)){
-this.handler(this,this.domNode);
-ret=false;
-}
-this.onLoad();
-return ret;
-},_executeScripts:function(_38a){
-var self=this;
-var tmp="",code="";
-for(var i=0;i<_38a.length;i++){
-if(_38a[i].path){
-dojo.io.bind(this._cacheSetting({"url":_38a[i].path,"load":function(type,_390){
-dojo.lang.hitch(self,tmp=";"+_390);
-},"error":function(type,_392){
-_392.text=type+" downloading remote script";
-self._handleDefaults.call(self,_392,"onExecError","debug");
-},"mimetype":"text/plain","sync":true},this.cacheContent));
-code+=tmp;
-}else{
-code+=_38a[i];
-}
-}
-try{
-if(this.scriptSeparation){
-delete this.scriptScope;
-this.scriptScope=new (new Function("_container_",code+"; return this;"))(self);
-}else{
-var djg=dojo.global();
-if(djg.execScript){
-djg.execScript(code);
-}else{
-var djd=dojo.doc();
-var sc=djd.createElement("script");
-sc.appendChild(djd.createTextNode(code));
-(this.containerNode||this.domNode).appendChild(sc);
-}
-}
-}
-catch(e){
-e.text="Error running scripts from content:\n"+e.description;
-this._handleDefaults(e,"onExecError","debug");
-}
-}});
-dojo.require("dojo.html.common");
-dojo.provide("dojo.html.selection");
-dojo.require("dojo.dom");
-dojo.require("dojo.lang.common");
-dojo.html.selectionType={NONE:0,TEXT:1,CONTROL:2};
-dojo.html.clearSelection=function(){
-var _396=dojo.global();
-var _397=dojo.doc();
-try{
-if(_396["getSelection"]){
-if(dojo.render.html.safari){
-_396.getSelection().collapse();
-}else{
-_396.getSelection().removeAllRanges();
-}
-}else{
-if(_397.selection){
-if(_397.selection.empty){
-_397.selection.empty();
-}else{
-if(_397.selection.clear){
-_397.selection.clear();
-}
-}
-}
-}
-return true;
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.html.disableSelection=function(_398){
-_398=dojo.byId(_398)||dojo.body();
-var h=dojo.render.html;
-if(h.mozilla){
-_398.style.MozUserSelect="none";
-}else{
-if(h.safari){
-_398.style.KhtmlUserSelect="none";
-}else{
-if(h.ie){
-_398.unselectable="on";
-}else{
-return false;
-}
-}
-}
-return true;
-};
-dojo.html.enableSelection=function(_39a){
-_39a=dojo.byId(_39a)||dojo.body();
-var h=dojo.render.html;
-if(h.mozilla){
-_39a.style.MozUserSelect="";
-}else{
-if(h.safari){
-_39a.style.KhtmlUserSelect="";
-}else{
-if(h.ie){
-_39a.unselectable="off";
-}else{
-return false;
-}
-}
-}
-return true;
-};
-dojo.html.selectElement=function(_39c){
-dojo.deprecated("dojo.html.selectElement","replaced by dojo.html.selection.selectElementChildren",0.5);
-};
-dojo.html.selectInputText=function(_39d){
-var _39e=dojo.global();
-var _39f=dojo.doc();
-_39d=dojo.byId(_39d);
-if(_39f["selection"]&&dojo.body()["createTextRange"]){
-var _3a0=_39d.createTextRange();
-_3a0.moveStart("character",0);
-_3a0.moveEnd("character",_39d.value.length);
-_3a0.select();
-}else{
-if(_39e["getSelection"]){
-var _3a1=_39e.getSelection();
-_39d.setSelectionRange(0,_39d.value.length);
-}
-}
-_39d.focus();
-};
-dojo.html.isSelectionCollapsed=function(){
-dojo.deprecated("dojo.html.isSelectionCollapsed","replaced by dojo.html.selection.isCollapsed",0.5);
-return dojo.html.selection.isCollapsed();
-};
-dojo.lang.mixin(dojo.html.selection,{getType:function(){
-if(dojo.doc()["selection"]){
-return dojo.html.selectionType[dojo.doc().selection.type.toUpperCase()];
-}else{
-var _3a2=dojo.html.selectionType.TEXT;
-var oSel;
-try{
-oSel=dojo.global().getSelection();
-}
-catch(e){
-}
-if(oSel&&oSel.rangeCount==1){
-var _3a4=oSel.getRangeAt(0);
-if(_3a4.startContainer==_3a4.endContainer&&(_3a4.endOffset-_3a4.startOffset)==1&&_3a4.startContainer.nodeType!=dojo.dom.TEXT_NODE){
-_3a2=dojo.html.selectionType.CONTROL;
-}
-}
-return _3a2;
-}
-},isCollapsed:function(){
-var _3a5=dojo.global();
-var _3a6=dojo.doc();
-if(_3a6["selection"]){
-return _3a6.selection.createRange().text=="";
-}else{
-if(_3a5["getSelection"]){
-var _3a7=_3a5.getSelection();
-if(dojo.lang.isString(_3a7)){
-return _3a7=="";
-}else{
-return _3a7.isCollapsed||_3a7.toString()=="";
-}
-}
-}
-},getSelectedElement:function(){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-if(dojo.doc()["selection"]){
-var _3a8=dojo.doc().selection.createRange();
-if(_3a8&&_3a8.item){
-return dojo.doc().selection.createRange().item(0);
-}
-}else{
-var _3a9=dojo.global().getSelection();
-return _3a9.anchorNode.childNodes[_3a9.anchorOffset];
-}
-}
-},getParentElement:function(){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-var p=dojo.html.selection.getSelectedElement();
-if(p){
-return p.parentNode;
-}
-}else{
-if(dojo.doc()["selection"]){
-return dojo.doc().selection.createRange().parentElement();
-}else{
-var _3ab=dojo.global().getSelection();
-if(_3ab){
-var node=_3ab.anchorNode;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.parentNode;
-}
-return node;
-}
-}
-}
-},getSelectedText:function(){
-if(dojo.doc()["selection"]){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-return null;
-}
-return dojo.doc().selection.createRange().text;
-}else{
-var _3ad=dojo.global().getSelection();
-if(_3ad){
-return _3ad.toString();
-}
-}
-},getSelectedHtml:function(){
-if(dojo.doc()["selection"]){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-return null;
-}
-return dojo.doc().selection.createRange().htmlText;
-}else{
-var _3ae=dojo.global().getSelection();
-if(_3ae&&_3ae.rangeCount){
-var frag=_3ae.getRangeAt(0).cloneContents();
-var div=document.createElement("div");
-div.appendChild(frag);
-return div.innerHTML;
-}
-return null;
-}
-},hasAncestorElement:function(_3b1){
-return (dojo.html.selection.getAncestorElement.apply(this,arguments)!=null);
-},getAncestorElement:function(_3b2){
-var node=dojo.html.selection.getSelectedElement()||dojo.html.selection.getParentElement();
-while(node){
-if(dojo.html.selection.isTag(node,arguments).length>0){
-return node;
-}
-node=node.parentNode;
-}
-return null;
-},isTag:function(node,tags){
-if(node&&node.tagName){
-for(var i=0;i<tags.length;i++){
-if(node.tagName.toLowerCase()==String(tags[i]).toLowerCase()){
-return String(tags[i]).toLowerCase();
-}
-}
-}
-return "";
-},selectElement:function(_3b7){
-var _3b8=dojo.global();
-var _3b9=dojo.doc();
-_3b7=dojo.byId(_3b7);
-if(_3b9.selection&&dojo.body().createTextRange){
-try{
-var _3ba=dojo.body().createControlRange();
-_3ba.addElement(_3b7);
-_3ba.select();
-}
-catch(e){
-dojo.html.selection.selectElementChildren(_3b7);
-}
-}else{
-if(_3b8["getSelection"]){
-var _3bb=_3b8.getSelection();
-if(_3bb["removeAllRanges"]){
-var _3ba=_3b9.createRange();
-_3ba.selectNode(_3b7);
-_3bb.removeAllRanges();
-_3bb.addRange(_3ba);
-}
-}
-}
-},selectElementChildren:function(_3bc){
-var _3bd=dojo.global();
-var _3be=dojo.doc();
-_3bc=dojo.byId(_3bc);
-if(_3be.selection&&dojo.body().createTextRange){
-var _3bf=dojo.body().createTextRange();
-_3bf.moveToElementText(_3bc);
-_3bf.select();
-}else{
-if(_3bd["getSelection"]){
-var _3c0=_3bd.getSelection();
-if(_3c0["setBaseAndExtent"]){
-_3c0.setBaseAndExtent(_3bc,0,_3bc,_3bc.innerText.length-1);
-}else{
-if(_3c0["selectAllChildren"]){
-_3c0.selectAllChildren(_3bc);
-}
-}
-}
-}
-},getBookmark:function(){
-var _3c1;
-var _3c2=dojo.doc();
-if(_3c2["selection"]){
-var _3c3=_3c2.selection.createRange();
-_3c1=_3c3.getBookmark();
-}else{
-var _3c4;
-try{
-_3c4=dojo.global().getSelection();
-}
-catch(e){
-}
-if(_3c4){
-var _3c3=_3c4.getRangeAt(0);
-_3c1=_3c3.cloneRange();
-}else{
-dojo.debug("No idea how to store the current selection for this browser!");
-}
-}
-return _3c1;
-},moveToBookmark:function(_3c5){
-var _3c6=dojo.doc();
-if(_3c6["selection"]){
-var _3c7=_3c6.selection.createRange();
-_3c7.moveToBookmark(_3c5);
-_3c7.select();
-}else{
-var _3c8;
-try{
-_3c8=dojo.global().getSelection();
-}
-catch(e){
-}
-if(_3c8&&_3c8["removeAllRanges"]){
-_3c8.removeAllRanges();
-_3c8.addRange(_3c5);
-}else{
-dojo.debug("No idea how to restore selection for this browser!");
-}
-}
-},collapse:function(_3c9){
-if(dojo.global()["getSelection"]){
-var _3ca=dojo.global().getSelection();
-if(_3ca.removeAllRanges){
-if(_3c9){
-_3ca.collapseToStart();
-}else{
-_3ca.collapseToEnd();
-}
-}else{
-dojo.global().getSelection().collapse(_3c9);
-}
-}else{
-if(dojo.doc().selection){
-var _3cb=dojo.doc().selection.createRange();
-_3cb.collapse(_3c9);
-_3cb.select();
-}
-}
-},remove:function(){
-if(dojo.doc().selection){
-var _3cc=dojo.doc().selection;
-if(_3cc.type.toUpperCase()!="NONE"){
-_3cc.clear();
-}
-return _3cc;
-}else{
-var _3cc=dojo.global().getSelection();
-for(var i=0;i<_3cc.rangeCount;i++){
-_3cc.getRangeAt(i).deleteContents();
-}
-return _3cc;
-}
-}});
-dojo.provide("dojo.html.iframe");
-dojo.html.iframeContentWindow=function(_3ce){
-var win=dojo.html.getDocumentWindow(dojo.html.iframeContentDocument(_3ce))||dojo.html.iframeContentDocument(_3ce).__parent__||(_3ce.name&&document.frames[_3ce.name])||null;
-return win;
-};
-dojo.html.iframeContentDocument=function(_3d0){
-var doc=_3d0.contentDocument||((_3d0.contentWindow)&&(_3d0.contentWindow.document))||((_3d0.name)&&(document.frames[_3d0.name])&&(document.frames[_3d0.name].document))||null;
-return doc;
-};
-dojo.html.BackgroundIframe=function(node){
-if(dojo.render.html.ie55||dojo.render.html.ie60){
-var html="<iframe src='javascript:false'"+" style='position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;"+"z-index: -1; filter:Alpha(Opacity=\"0\");' "+">";
-this.iframe=dojo.doc().createElement(html);
-this.iframe.tabIndex=-1;
-if(node){
-node.appendChild(this.iframe);
-this.domNode=node;
-}else{
-dojo.body().appendChild(this.iframe);
-this.iframe.style.display="none";
-}
-}
-};
-dojo.lang.extend(dojo.html.BackgroundIframe,{iframe:null,onResized:function(){
-if(this.iframe&&this.domNode&&this.domNode.parentNode){
-var _3d4=dojo.html.getMarginBox(this.domNode);
-if(_3d4.width==0||_3d4.height==0){
-dojo.lang.setTimeout(this,this.onResized,100);
-return;
-}
-this.iframe.style.width=_3d4.width+"px";
-this.iframe.style.height=_3d4.height+"px";
-}
-},size:function(node){
-if(!this.iframe){
-return;
-}
-var _3d6=dojo.html.toCoordinateObject(node,true,dojo.html.boxSizing.BORDER_BOX);
-with(this.iframe.style){
-width=_3d6.width+"px";
-height=_3d6.height+"px";
-left=_3d6.left+"px";
-top=_3d6.top+"px";
-}
-},setZIndex:function(node){
-if(!this.iframe){
-return;
-}
-if(dojo.dom.isNode(node)){
-this.iframe.style.zIndex=dojo.html.getStyle(node,"z-index")-1;
-}else{
-if(!isNaN(node)){
-this.iframe.style.zIndex=node;
-}
-}
-},show:function(){
-if(this.iframe){
-this.iframe.style.display="block";
-}
-},hide:function(){
-if(this.iframe){
-this.iframe.style.display="none";
-}
-},remove:function(){
-if(this.iframe){
-dojo.html.removeNode(this.iframe,true);
-delete this.iframe;
-this.iframe=null;
-}
-}});
-dojo.provide("dojo.widget.PopupContainer");
-dojo.require("dojo.html.style");
-dojo.require("dojo.event.*");
-dojo.declare("dojo.widget.PopupContainerBase",null,function(){
-this.queueOnAnimationFinish=[];
-},{isShowingNow:false,currentSubpopup:null,beginZIndex:1000,parentPopup:null,parent:null,popupIndex:0,aroundBox:dojo.html.boxSizing.BORDER_BOX,openedForWindow:null,processKey:function(evt){
-return false;
-},applyPopupBasicStyle:function(){
-with(this.domNode.style){
-display="none";
-position="absolute";
-}
-},aboutToShow:function(){
-},open:function(x,y,_3db,_3dc,_3dd,_3de){
-if(this.isShowingNow){
-return;
-}
-if(this.animationInProgress){
-this.queueOnAnimationFinish.push(this.open,arguments);
-return;
-}
-this.aboutToShow();
-var _3df=false,node,_3e1;
-if(typeof x=="object"){
-node=x;
-_3e1=_3dc;
-_3dc=_3db;
-_3db=y;
-_3df=true;
-}
-this.parent=_3db;
-dojo.body().appendChild(this.domNode);
-_3dc=_3dc||_3db["domNode"]||[];
-var _3e2=null;
-this.isTopLevel=true;
-while(_3db){
-if(_3db!==this&&(_3db.setOpenedSubpopup!=undefined&&_3db.applyPopupBasicStyle!=undefined)){
-_3e2=_3db;
-this.isTopLevel=false;
-_3e2.setOpenedSubpopup(this);
-break;
-}
-_3db=_3db.parent;
-}
-this.parentPopup=_3e2;
-this.popupIndex=_3e2?_3e2.popupIndex+1:1;
-if(this.isTopLevel){
-var _3e3=dojo.html.isNode(_3dc)?_3dc:null;
-dojo.widget.PopupManager.opened(this,_3e3);
-}
-if(this.isTopLevel&&!dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.isCollapsed)){
-this._bookmark=dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.getBookmark);
-}else{
-this._bookmark=null;
-}
-if(_3dc instanceof Array){
-_3dc={left:_3dc[0],top:_3dc[1],width:0,height:0};
-}
-with(this.domNode.style){
-display="";
-zIndex=this.beginZIndex+this.popupIndex;
-}
-if(_3df){
-this.move(node,_3de,_3e1);
-}else{
-this.move(x,y,_3de,_3dd);
-}
-this.domNode.style.display="none";
-this.explodeSrc=_3dc;
-this.show();
-this.isShowingNow=true;
-},move:function(x,y,_3e6,_3e7){
-var _3e8=(typeof x=="object");
-if(_3e8){
-var _3e9=_3e6;
-var node=x;
-_3e6=y;
-if(!_3e9){
-_3e9={"BL":"TL","TL":"BL"};
-}
-dojo.html.placeOnScreenAroundElement(this.domNode,node,_3e6,this.aroundBox,_3e9);
-}else{
-if(!_3e7){
-_3e7="TL,TR,BL,BR";
-}
-dojo.html.placeOnScreen(this.domNode,x,y,_3e6,true,_3e7);
-}
-},close:function(_3eb){
-if(_3eb){
-this.domNode.style.display="none";
-}
-if(this.animationInProgress){
-this.queueOnAnimationFinish.push(this.close,[]);
-return;
-}
-this.closeSubpopup(_3eb);
-this.hide();
-if(this.bgIframe){
-this.bgIframe.hide();
-this.bgIframe.size({left:0,top:0,width:0,height:0});
-}
-if(this.isTopLevel){
-dojo.widget.PopupManager.closed(this);
-}
-this.isShowingNow=false;
-if(this.parent){
-setTimeout(dojo.lang.hitch(this,function(){
-try{
-if(this.parent["focus"]){
-this.parent.focus();
-}else{
-this.parent.domNode.focus();
-}
-}
-catch(e){
-dojo.debug("No idea how to focus to parent",e);
-}
-}),10);
-}
-if(this._bookmark&&dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.isCollapsed)){
-if(this.openedForWindow){
-this.openedForWindow.focus();
-}
-try{
-dojo.withGlobal(this.openedForWindow||dojo.global(),"moveToBookmark",dojo.html.selection,[this._bookmark]);
-}
-catch(e){
-}
-}
-this._bookmark=null;
-},closeAll:function(_3ec){
-if(this.parentPopup){
-this.parentPopup.closeAll(_3ec);
-}else{
-this.close(_3ec);
-}
-},setOpenedSubpopup:function(_3ed){
-this.currentSubpopup=_3ed;
-},closeSubpopup:function(_3ee){
-if(this.currentSubpopup==null){
-return;
-}
-this.currentSubpopup.close(_3ee);
-this.currentSubpopup=null;
-},onShow:function(){
-dojo.widget.PopupContainer.superclass.onShow.apply(this,arguments);
-this.openedSize={w:this.domNode.style.width,h:this.domNode.style.height};
-if(dojo.render.html.ie){
-if(!this.bgIframe){
-this.bgIframe=new dojo.html.BackgroundIframe();
-this.bgIframe.setZIndex(this.domNode);
-}
-this.bgIframe.size(this.domNode);
-this.bgIframe.show();
-}
-this.processQueue();
-},processQueue:function(){
-if(!this.queueOnAnimationFinish.length){
-return;
-}
-var func=this.queueOnAnimationFinish.shift();
-var args=this.queueOnAnimationFinish.shift();
-func.apply(this,args);
-},onHide:function(){
-dojo.widget.HtmlWidget.prototype.onHide.call(this);
-if(this.openedSize){
-with(this.domNode.style){
-width=this.openedSize.w;
-height=this.openedSize.h;
-}
-}
-this.processQueue();
-}});
-dojo.widget.defineWidget("dojo.widget.PopupContainer",[dojo.widget.HtmlWidget,dojo.widget.PopupContainerBase],{isContainer:true,fillInTemplate:function(){
-this.applyPopupBasicStyle();
-dojo.widget.PopupContainer.superclass.fillInTemplate.apply(this,arguments);
-}});
-dojo.widget.PopupManager=new function(){
-this.currentMenu=null;
-this.currentButton=null;
-this.currentFocusMenu=null;
-this.focusNode=null;
-this.registeredWindows=[];
-this.registerWin=function(win){
-if(!win.__PopupManagerRegistered){
-dojo.event.connect(win.document,"onmousedown",this,"onClick");
-dojo.event.connect(win,"onscroll",this,"onClick");
-dojo.event.connect(win.document,"onkey",this,"onKey");
-win.__PopupManagerRegistered=true;
-this.registeredWindows.push(win);
-}
-};
-this.registerAllWindows=function(_3f2){
-if(!_3f2){
-_3f2=dojo.html.getDocumentWindow(window.top&&window.top.document||window.document);
-}
-this.registerWin(_3f2);
-for(var i=0;i<_3f2.frames.length;i++){
-try{
-var win=dojo.html.getDocumentWindow(_3f2.frames[i].document);
-if(win){
-this.registerAllWindows(win);
-}
-}
-catch(e){
-}
-}
-};
-this.unRegisterWin=function(win){
-if(win.__PopupManagerRegistered){
-dojo.event.disconnect(win.document,"onmousedown",this,"onClick");
-dojo.event.disconnect(win,"onscroll",this,"onClick");
-dojo.event.disconnect(win.document,"onkey",this,"onKey");
-win.__PopupManagerRegistered=false;
-}
-};
-this.unRegisterAllWindows=function(){
-for(var i=0;i<this.registeredWindows.length;++i){
-this.unRegisterWin(this.registeredWindows[i]);
-}
-this.registeredWindows=[];
-};
-dojo.addOnLoad(this,"registerAllWindows");
-dojo.addOnUnload(this,"unRegisterAllWindows");
-this.closed=function(menu){
-if(this.currentMenu==menu){
-this.currentMenu=null;
-this.currentButton=null;
-this.currentFocusMenu=null;
-}
-};
-this.opened=function(menu,_3f9){
-if(menu==this.currentMenu){
-return;
-}
-if(this.currentMenu){
-this.currentMenu.close();
-}
-this.currentMenu=menu;
-this.currentFocusMenu=menu;
-this.currentButton=_3f9;
-};
-this.setFocusedMenu=function(menu){
-this.currentFocusMenu=menu;
-};
-this.onKey=function(e){
-if(!e.key){
-return;
-}
-if(!this.currentMenu||!this.currentMenu.isShowingNow){
-return;
-}
-var m=this.currentFocusMenu;
-while(m){
-if(m.processKey(e)){
-e.preventDefault();
-e.stopPropagation();
-break;
-}
-m=m.parentPopup||m.parentMenu;
-}
-},this.onClick=function(e){
-if(!this.currentMenu){
-return;
-}
-var _3fe=dojo.html.getScroll().offset;
-var m=this.currentMenu;
-while(m){
-if(dojo.html.overElement(m.domNode,e)||dojo.html.isDescendantOf(e.target,m.domNode)){
-return;
-}
-m=m.currentSubpopup;
-}
-if(this.currentButton&&dojo.html.overElement(this.currentButton,e)){
-return;
-}
-this.currentMenu.closeAll(true);
-};
-};
-dojo.provide("dojo.widget.DropdownContainer");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.display");
-dojo.widget.defineWidget("dojo.widget.DropdownContainer",dojo.widget.HtmlWidget,{inputWidth:"7em",id:"",inputId:"",inputName:"",iconURL:dojo.uri.moduleUri("dojo.widget","templates/images/combo_box_arrow.png"),copyClasses:false,iconAlt:"",containerToggle:"plain",containerToggleDuration:150,templateString:"<span style=\"white-space:nowrap\"><input type=\"hidden\" name=\"\" value=\"\" dojoAttachPoint=\"valueNode\" /><input name=\"\" type=\"text\" value=\"\" style=\"vertical-align:middle;\" dojoAttachPoint=\"inputNode\" autocomplete=\"off\" /> <img src=\"${this.iconURL}\" alt=\"${this.iconAlt}\" dojoAttachEvent=\"onclick:onIconClick\" dojoAttachPoint=\"buttonNode\" style=\"vertical-align:middle; cursor:pointer; cursor:hand\" /></span>",templateCssPath:"",isContainer:true,attachTemplateNodes:function(){
-dojo.widget.DropdownContainer.superclass.attachTemplateNodes.apply(this,arguments);
-this.popup=dojo.widget.createWidget("PopupContainer",{toggle:this.containerToggle,toggleDuration:this.containerToggleDuration});
-this.containerNode=this.popup.domNode;
-},fillInTemplate:function(args,frag){
-this.domNode.appendChild(this.popup.domNode);
-if(this.id){
-this.domNode.id=this.id;
-}
-if(this.inputId){
-this.inputNode.id=this.inputId;
-}
-if(this.inputName){
-this.inputNode.name=this.inputName;
-}
-this.inputNode.style.width=this.inputWidth;
-this.inputNode.disabled=this.disabled;
-if(this.copyClasses){
-this.inputNode.style="";
-this.inputNode.className=this.getFragNodeRef(frag).className;
-}
-dojo.event.connect(this.inputNode,"onchange",this,"onInputChange");
-},onIconClick:function(evt){
-if(this.disabled){
-return;
-}
-if(!this.popup.isShowingNow){
-this.popup.open(this.inputNode,this,this.buttonNode);
-}else{
-this.popup.close();
-}
-},hideContainer:function(){
-if(this.popup.isShowingNow){
-this.popup.close();
-}
-},onInputChange:function(){
-},enable:function(){
-this.inputNode.disabled=false;
-dojo.widget.DropdownContainer.superclass.enable.apply(this,arguments);
-},disable:function(){
-this.inputNode.disabled=true;
-dojo.widget.DropdownContainer.superclass.disable.apply(this,arguments);
-}});
-dojo.provide("dojo.widget.html.stabile");
-dojo.widget.html.stabile={_sqQuotables:new RegExp("([\\\\'])","g"),_depth:0,_recur:false,depthLimit:2};
-dojo.widget.html.stabile.getState=function(id){
-dojo.widget.html.stabile.setup();
-return dojo.widget.html.stabile.widgetState[id];
-};
-dojo.widget.html.stabile.setState=function(id,_405,_406){
-dojo.widget.html.stabile.setup();
-dojo.widget.html.stabile.widgetState[id]=_405;
-if(_406){
-dojo.widget.html.stabile.commit(dojo.widget.html.stabile.widgetState);
-}
-};
-dojo.widget.html.stabile.setup=function(){
-if(!dojo.widget.html.stabile.widgetState){
-var text=dojo.widget.html.stabile._getStorage().value;
-dojo.widget.html.stabile.widgetState=text?dj_eval("("+text+")"):{};
-}
-};
-dojo.widget.html.stabile.commit=function(_408){
-dojo.widget.html.stabile._getStorage().value=dojo.widget.html.stabile.description(_408);
-};
-dojo.widget.html.stabile.description=function(v,_40a){
-var _40b=dojo.widget.html.stabile._depth;
-var _40c=function(){
-return this.description(this,true);
-};
-try{
-if(v===void (0)){
-return "undefined";
-}
-if(v===null){
-return "null";
-}
-if(typeof (v)=="boolean"||typeof (v)=="number"||v instanceof Boolean||v instanceof Number){
-return v.toString();
-}
-if(typeof (v)=="string"||v instanceof String){
-var v1=v.replace(dojo.widget.html.stabile._sqQuotables,"\\$1");
-v1=v1.replace(/\n/g,"\\n");
-v1=v1.replace(/\r/g,"\\r");
-return "'"+v1+"'";
-}
-if(v instanceof Date){
-return "new Date("+d.getFullYear+","+d.getMonth()+","+d.getDate()+")";
-}
-var d;
-if(v instanceof Array||v.push){
-if(_40b>=dojo.widget.html.stabile.depthLimit){
-return "[ ... ]";
-}
-d="[";
-var _40f=true;
-dojo.widget.html.stabile._depth++;
-for(var i=0;i<v.length;i++){
-if(_40f){
-_40f=false;
-}else{
-d+=",";
-}
-d+=arguments.callee(v[i],_40a);
-}
-return d+"]";
-}
-if(v.constructor==Object||v.toString==_40c){
-if(_40b>=dojo.widget.html.stabile.depthLimit){
-return "{ ... }";
-}
-if(typeof (v.hasOwnProperty)!="function"&&v.prototype){
-throw new Error("description: "+v+" not supported by script engine");
-}
-var _40f=true;
-d="{";
-dojo.widget.html.stabile._depth++;
-for(var key in v){
-if(v[key]==void (0)||typeof (v[key])=="function"){
-continue;
-}
-if(_40f){
-_40f=false;
-}else{
-d+=", ";
-}
-var kd=key;
-if(!kd.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/)){
-kd=arguments.callee(key,_40a);
-}
-d+=kd+": "+arguments.callee(v[key],_40a);
-}
-return d+"}";
-}
-if(_40a){
-if(dojo.widget.html.stabile._recur){
-var _413=Object.prototype.toString;
-return _413.apply(v,[]);
-}else{
-dojo.widget.html.stabile._recur=true;
-return v.toString();
-}
-}else{
-throw new Error("Unknown type: "+v);
-return "'unknown'";
-}
-}
-finally{
-dojo.widget.html.stabile._depth=_40b;
-}
-};
-dojo.widget.html.stabile._getStorage=function(){
-if(dojo.widget.html.stabile.dataField){
-return dojo.widget.html.stabile.dataField;
-}
-var form=document.forms._dojo_form;
-return dojo.widget.html.stabile.dataField=form?form.stabile:{value:""};
-};
-dojo.provide("dojo.widget.Dialog");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.display");
-dojo.declare("dojo.widget.ModalDialogBase",null,{isContainer:true,focusElement:"",bgColor:"black",bgOpacity:0.4,followScroll:true,closeOnBackgroundClick:false,trapTabs:function(e){
-if(e.target==this.tabStartOuter){
-if(this._fromTrap){
-this.tabStart.focus();
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabEnd.focus();
-}
-}else{
-if(e.target==this.tabStart){
-if(this._fromTrap){
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabEnd.focus();
-}
-}else{
-if(e.target==this.tabEndOuter){
-if(this._fromTrap){
-this.tabEnd.focus();
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabStart.focus();
-}
-}else{
-if(e.target==this.tabEnd){
-if(this._fromTrap){
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabStart.focus();
-}
-}
-}
-}
-}
-},clearTrap:function(e){
-var _417=this;
-setTimeout(function(){
-_417._fromTrap=false;
-},100);
-},postCreate:function(){
-with(this.domNode.style){
-position="absolute";
-zIndex=999;
-display="none";
-overflow="visible";
-}
-var b=dojo.body();
-b.appendChild(this.domNode);
-this.bg=document.createElement("div");
-this.bg.className="dialogUnderlay";
-with(this.bg.style){
-position="absolute";
-left=top="0px";
-zIndex=998;
-display="none";
-}
-b.appendChild(this.bg);
-this.setBackgroundColor(this.bgColor);
-this.bgIframe=new dojo.html.BackgroundIframe();
-if(this.bgIframe.iframe){
-with(this.bgIframe.iframe.style){
-position="absolute";
-left=top="0px";
-zIndex=90;
-display="none";
-}
-}
-if(this.closeOnBackgroundClick){
-dojo.event.kwConnect({srcObj:this.bg,srcFunc:"onclick",adviceObj:this,adviceFunc:"onBackgroundClick",once:true});
-}
-},uninitialize:function(){
-this.bgIframe.remove();
-dojo.html.removeNode(this.bg,true);
-dojo.event.disconnect(window, "onscroll", this, "_onScroll");
-dojo.event.disconnect(document.documentElement, "onkey", this, "_onKey");
-},setBackgroundColor:function(_419){
-if(arguments.length>=3){
-_419=new dojo.gfx.color.Color(arguments[0],arguments[1],arguments[2]);
-}else{
-_419=new dojo.gfx.color.Color(_419);
-}
-this.bg.style.backgroundColor=_419.toString();
-return this.bgColor=_419;
-},setBackgroundOpacity:function(op){
-if(arguments.length==0){
-op=this.bgOpacity;
-}
-dojo.html.setOpacity(this.bg,op);
-try{
-this.bgOpacity=dojo.html.getOpacity(this.bg);
-}
-catch(e){
-this.bgOpacity=op;
-}
-return this.bgOpacity;
-},_sizeBackground:function(){
-if(this.bgOpacity>0){
-var _41b=dojo.html.getViewport();
-var h=_41b.height;
-var w=_41b.width;
-with(this.bg.style){
-width=w+"px";
-height=h+"px";
-}
-var _41e=dojo.html.getScroll().offset;
-this.bg.style.top=_41e.y+"px";
-this.bg.style.left=_41e.x+"px";
-var _41b=dojo.html.getViewport();
-if(_41b.width!=w){
-this.bg.style.width=_41b.width+"px";
-}
-if(_41b.height!=h){
-this.bg.style.height=_41b.height+"px";
-}
-}
-this.bgIframe.size(this.bg);
-},_showBackground:function(){
-if(this.bgOpacity>0){
-this.bg.style.display="block";
-}
-if(this.bgIframe.iframe){
-this.bgIframe.iframe.style.display="block";
-}
-},placeModalDialog:function(){
-var _41f=dojo.html.getScroll().offset;
-var _420=dojo.html.getViewport();
-var mb;
-if(this.isShowing()){
-mb=dojo.html.getMarginBox(this.domNode);
-}else{
-dojo.html.setVisibility(this.domNode,false);
-dojo.html.show(this.domNode);
-mb=dojo.html.getMarginBox(this.domNode);
-dojo.html.hide(this.domNode);
-dojo.html.setVisibility(this.domNode,true);
-}
-var x=_41f.x+(_420.width-mb.width)/2;
-var y=_41f.y+(_420.height-mb.height)/2;
-with(this.domNode.style){
-left=x+"px";
-top=y+"px";
-}
-},_onKey:function(evt){
-if(evt.key){
-var node=evt.target;
-while(node!=null){
-if(node==this.domNode){
-return;
-}
-node=node.parentNode;
-}
-if(evt.key!=evt.KEY_TAB){
-dojo.event.browser.stopEvent(evt);
-}else{
-if(!dojo.render.html.opera){
-try{
-this.tabStart.focus();
-}
-catch(e){
-}
-}
-}
-}
-},showModalDialog:function(){
-if(this.followScroll&&!this._scrollConnected){
-this._scrollConnected=true;
-dojo.event.connect(window,"onscroll",this,"_onScroll");
-}
-dojo.event.connect(document.documentElement,"onkey",this,"_onKey");
-this.placeModalDialog();
-this.setBackgroundOpacity();
-this._sizeBackground();
-this._showBackground();
-this._fromTrap=true;
-setTimeout(dojo.lang.hitch(this,function(){
-try{
-this.tabStart.focus();
-}
-catch(e){
-}
-}),50);
-},hideModalDialog:function(){
-if(this.focusElement){
-dojo.byId(this.focusElement).focus();
-dojo.byId(this.focusElement).blur();
-}
-this.bg.style.display="none";
-this.bg.style.width=this.bg.style.height="1px";
-if(this.bgIframe.iframe){
-this.bgIframe.iframe.style.display="none";
-}
-dojo.event.disconnect(document.documentElement,"onkey",this,"_onKey");
-if(this._scrollConnected){
-this._scrollConnected=false;
-dojo.event.disconnect(window,"onscroll",this,"_onScroll");
-}
-},_onScroll:function(){
-var _426=dojo.html.getScroll().offset;
-this.bg.style.top=_426.y+"px";
-this.bg.style.left=_426.x+"px";
-this.placeModalDialog();
-},checkSize:function(){
-if(this.isShowing()){
-this._sizeBackground();
-this.placeModalDialog();
-this.onResized();
-}
-},onBackgroundClick:function(){
-if(this.lifetime-this.timeRemaining>=this.blockDuration){
-return;
-}
-this.hide();
-}});
-dojo.widget.defineWidget("dojo.widget.Dialog",[dojo.widget.ContentPane,dojo.widget.ModalDialogBase],{templateString:"<div id=\"${this.widgetId}\" class=\"dojoDialog\" dojoattachpoint=\"wrapper\">\n\t<span dojoattachpoint=\"tabStartOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\"\ttabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabStart\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoattachpoint=\"containerNode\" style=\"position: relative; z-index: 2;\"></div>\n\t<span dojoattachpoint=\"tabEnd\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabEndOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n</div>\n",blockDuration:0,lifetime:0,closeNode:"",postMixInProperties:function(){
-dojo.widget.Dialog.superclass.postMixInProperties.apply(this,arguments);
-if(this.closeNode){
-this.setCloseControl(this.closeNode);
-}
-},postCreate:function(){
-dojo.widget.Dialog.superclass.postCreate.apply(this,arguments);
-dojo.widget.ModalDialogBase.prototype.postCreate.apply(this,arguments);
-},show:function(){
-if(this.lifetime){
-this.timeRemaining=this.lifetime;
-if(this.timerNode){
-this.timerNode.innerHTML=Math.ceil(this.timeRemaining/1000);
-}
-if(this.blockDuration&&this.closeNode){
-if(this.lifetime>this.blockDuration){
-this.closeNode.style.visibility="hidden";
-}else{
-this.closeNode.style.display="none";
-}
-}
-if(this.timer){
-clearInterval(this.timer);
-}
-this.timer=setInterval(dojo.lang.hitch(this,"_onTick"),100);
-}
-this.showModalDialog();
-dojo.widget.Dialog.superclass.show.call(this);
-},onLoad:function(){
-this.placeModalDialog();
-dojo.widget.Dialog.superclass.onLoad.call(this);
-},fillInTemplate:function(){
-},hide:function(){
-this.hideModalDialog();
-dojo.widget.Dialog.superclass.hide.call(this);
-if(this.timer){
-clearInterval(this.timer);
-}
-},setTimerNode:function(node){
-this.timerNode=node;
-},setCloseControl:function(node){
-this.closeNode=dojo.byId(node);
-dojo.event.connect(this.closeNode,"onclick",this,"hide");
-},setShowControl:function(node){
-node=dojo.byId(node);
-dojo.event.connect(node,"onclick",this,"show");
-},_onTick:function(){
-if(this.timer){
-this.timeRemaining-=100;
-if(this.lifetime-this.timeRemaining>=this.blockDuration){
-if(this.closeNode){
-this.closeNode.style.visibility="visible";
-}
-}
-if(!this.timeRemaining){
-clearInterval(this.timer);
-this.hide();
-}else{
-if(this.timerNode){
-this.timerNode.innerHTML=Math.ceil(this.timeRemaining/1000);
-}
-}
-}
-}});
-dojo.provide("dojo.widget.ComboBox");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.*");
-dojo.require("dojo.string");
-dojo.declare("dojo.widget.incrementalComboBoxDataProvider",null,function(_42a){
-this.searchUrl=_42a.dataUrl;
-this._cache={};
-this._inFlight=false;
-this._lastRequest=null;
-this.allowCache=false;
-},{_addToCache:function(_42b,data){
-if(this.allowCache){
-this._cache[_42b]=data;
-}
-},startSearch:function(_42d,_42e){
-if(this._inFlight){
-}
-var tss=encodeURIComponent(_42d);
-var _430=dojo.string.substituteParams(this.searchUrl,{"searchString":tss});
-var _431=this;
-var _432=this._lastRequest=dojo.io.bind({url:_430,method:"get",mimetype:"text/json",load:function(type,data,evt){
-_431._inFlight=false;
-if(!dojo.lang.isArray(data)){
-var _436=[];
-for(var key in data){
-_436.push([data[key],key]);
-}
-data=_436;
-}
-_431._addToCache(_42d,data);
-if(_432==_431._lastRequest){
-_42e(data);
-}
-}});
-this._inFlight=true;
-}});
-dojo.declare("dojo.widget.basicComboBoxDataProvider",null,function(_438,node){
-this._data=[];
-this.searchLimit=30;
-this.searchType="STARTSTRING";
-this.caseSensitive=false;
-if(!dj_undef("dataUrl",_438)&&!dojo.string.isBlank(_438.dataUrl)){
-this._getData(_438.dataUrl);
-}else{
-if((node)&&(node.nodeName.toLowerCase()=="select")){
-var opts=node.getElementsByTagName("option");
-var ol=opts.length;
-var data=[];
-for(var x=0;x<ol;x++){
-var text=opts[x].textContent||opts[x].innerText||opts[x].innerHTML;
-var _43f=[String(text),String(opts[x].value)];
-data.push(_43f);
-if(opts[x].selected){
-_438.setAllValues(_43f[0],_43f[1]);
-}
-}
-this.setData(data);
-}
-}
-},{_getData:function(url){
-dojo.io.bind({url:url,load:dojo.lang.hitch(this,function(type,data,evt){
-if(!dojo.lang.isArray(data)){
-var _444=[];
-for(var key in data){
-_444.push([data[key],key]);
-}
-data=_444;
-}
-this.setData(data);
-}),mimetype:"text/json"});
-},startSearch:function(_446,_447){
-this._performSearch(_446,_447);
-},_performSearch:function(_448,_449){
-var st=this.searchType;
-var ret=[];
-if(!this.caseSensitive){
-_448=_448.toLowerCase();
-}
-for(var x=0;x<this._data.length;x++){
-if((this.searchLimit>0)&&(ret.length>=this.searchLimit)){
-break;
-}
-var _44d=new String((!this.caseSensitive)?this._data[x][0].toLowerCase():this._data[x][0]);
-if(_44d.length<_448.length){
-continue;
-}
-if(st=="STARTSTRING"){
-if(_448==_44d.substr(0,_448.length)){
-ret.push(this._data[x]);
-}
-}else{
-if(st=="SUBSTRING"){
-if(_44d.indexOf(_448)>=0){
-ret.push(this._data[x]);
-}
-}else{
-if(st=="STARTWORD"){
-var idx=_44d.indexOf(_448);
-if(idx==0){
-ret.push(this._data[x]);
-}
-if(idx<=0){
-continue;
-}
-var _44f=false;
-while(idx!=-1){
-if(" ,/(".indexOf(_44d.charAt(idx-1))!=-1){
-_44f=true;
-break;
-}
-idx=_44d.indexOf(_448,idx+1);
-}
-if(!_44f){
-continue;
-}else{
-ret.push(this._data[x]);
-}
-}
-}
-}
-}
-_449(ret);
-},setData:function(_450){
-this._data=_450;
-}});
-dojo.widget.defineWidget("dojo.widget.ComboBox",dojo.widget.HtmlWidget,{forceValidOption:false,searchType:"stringstart",dataProvider:null,autoComplete:true,searchDelay:100,dataUrl:"",fadeTime:200,maxListLength:8,mode:"local",selectedResult:null,dataProviderClass:"",buttonSrc:dojo.uri.moduleUri("dojo.widget","templates/images/combo_box_arrow.png"),dropdownToggle:"fade",templateString:"<span _=\"whitespace and CR's between tags adds &nbsp; in FF\"\n\tclass=\"dojoComboBoxOuter\"\n\t><input style=\"display:none\"  tabindex=\"-1\" name=\"\" value=\"\" \n\t\tdojoAttachPoint=\"comboBoxValue\"\n\t><input style=\"display:none\"  tabindex=\"-1\" name=\"\" value=\"\" \n\t\tdojoAttachPoint=\"comboBoxSelectionValue\"\n\t><input type=\"text\" autocomplete=\"off\" class=\"dojoComboBox\"\n\t\tdojoAttachEvent=\"key:_handleKeyEvents; keyUp: onKeyUp; compositionEnd; onResize;\"\n\t\tdojoAttachPoint=\"textInputNode\"\n\t><img hspace=\"0\"\n\t\tvspace=\"0\"\n\t\tclass=\"dojoComboBox\"\n\t\tdojoAttachPoint=\"downArrowNode\"\n\t\tdojoAttachEvent=\"onMouseUp: handleArrowClick; onResize;\"\n\t\tsrc=\"${this.buttonSrc}\"\n></span>\n",templateCssString:".dojoComboBoxOuter {\n\tborder: 0px !important;\n\tmargin: 0px !important;\n\tpadding: 0px !important;\n\tbackground: transparent !important;\n\twhite-space: nowrap !important;\n}\n\n.dojoComboBox {\n\tborder: 1px inset #afafaf;\n\tmargin: 0px;\n\tpadding: 0px;\n\tvertical-align: middle !important;\n\tfloat: none !important;\n\tposition: static !important;\n\tdisplay: inline !important;\n}\n\n/* the input box */\ninput.dojoComboBox {\n\tborder-right-width: 0px !important; \n\tmargin-right: 0px !important;\n\tpadding-right: 0px !important;\n}\n\n/* the down arrow */\nimg.dojoComboBox {\n\tborder-left-width: 0px !important;\n\tpadding-left: 0px !important;\n\tmargin-left: 0px !important;\n}\n\n/* IE vertical-alignment calculations can be off by +-1 but these margins are collapsed away */\n.dj_ie img.dojoComboBox {\n\tmargin-top: 1px; \n\tmargin-bottom: 1px; \n}\n\n/* the drop down */\n.dojoComboBoxOptions {\n\tfont-family: Verdana, Helvetica, Garamond, sans-serif;\n\t/* font-size: 0.7em; */\n\tbackground-color: white;\n\tborder: 1px solid #afafaf;\n\tposition: absolute;\n\tz-index: 1000; \n\toverflow: auto;\n\tcursor: default;\n}\n\n.dojoComboBoxItem {\n\tpadding-left: 2px;\n\tpadding-top: 2px;\n\tmargin: 0px;\n}\n\n.dojoComboBoxItemEven {\n\tbackground-color: #f4f4f4;\n}\n\n.dojoComboBoxItemOdd {\n\tbackground-color: white;\n}\n\n.dojoComboBoxItemHighlight {\n\tbackground-color: #63709A;\n\tcolor: white;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/ComboBox.css"),setValue:function(_451){
-this.comboBoxValue.value=_451;
-if(this.textInputNode.value!=_451){
-this.textInputNode.value=_451;
-dojo.widget.html.stabile.setState(this.widgetId,this.getState(),true);
-this.onValueChanged(_451);
-}
-},onValueChanged:function(_452){
-},getValue:function(){
-return this.comboBoxValue.value;
-},getState:function(){
-return {value:this.getValue()};
-},setState:function(_453){
-this.setValue(_453.value);
-},enable:function(){
-this.disabled=false;
-this.textInputNode.removeAttribute("disabled");
-},disable:function(){
-this.disabled=true;
-this.textInputNode.setAttribute("disabled",true);
-},_getCaretPos:function(_454){
-if(dojo.lang.isNumber(_454.selectionStart)){
-return _454.selectionStart;
-}else{
-if(dojo.render.html.ie){
-var tr=document.selection.createRange().duplicate();
-var ntr=_454.createTextRange();
-tr.move("character",0);
-ntr.move("character",0);
-try{
-ntr.setEndPoint("EndToEnd",tr);
-return String(ntr.text).replace(/\r/g,"").length;
-}
-catch(e){
-return 0;
-}
-}
-}
-},_setCaretPos:function(_457,_458){
-_458=parseInt(_458);
-this._setSelectedRange(_457,_458,_458);
-},_setSelectedRange:function(_459,_45a,end){
-if(!end){
-end=_459.value.length;
-}
-if(_459.setSelectionRange){
-_459.focus();
-_459.setSelectionRange(_45a,end);
-}else{
-if(_459.createTextRange){
-var _45c=_459.createTextRange();
-with(_45c){
-collapse(true);
-moveEnd("character",end);
-moveStart("character",_45a);
-select();
-}
-}else{
-_459.value=_459.value;
-_459.blur();
-_459.focus();
-var dist=parseInt(_459.value.length)-end;
-var _45e=String.fromCharCode(37);
-var tcc=_45e.charCodeAt(0);
-for(var x=0;x<dist;x++){
-var te=document.createEvent("KeyEvents");
-te.initKeyEvent("keypress",true,true,null,false,false,false,false,tcc,tcc);
-_459.dispatchEvent(te);
-}
-}
-}
-},_handleKeyEvents:function(evt){
-if(evt.ctrlKey||evt.altKey||!evt.key){
-return;
-}
-this._prev_key_backspace=false;
-this._prev_key_esc=false;
-var k=dojo.event.browser.keys;
-var _464=true;
-switch(evt.key){
-case k.KEY_DOWN_ARROW:
-if(!this.popupWidget.isShowingNow){
-this._startSearchFromInput();
-}
-this._highlightNextOption();
-dojo.event.browser.stopEvent(evt);
-return;
-case k.KEY_UP_ARROW:
-this._highlightPrevOption();
-dojo.event.browser.stopEvent(evt);
-return;
-case k.KEY_TAB:
-if(!this.autoComplete&&this.popupWidget.isShowingNow&&this._highlighted_option){
-dojo.event.browser.stopEvent(evt);
-this._selectOption({"target":this._highlighted_option,"noHide":false});
-this._setSelectedRange(this.textInputNode,this.textInputNode.value.length,null);
-}else{
-this._selectOption();
-return;
-}
-break;
-case k.KEY_ENTER:
-if(this.popupWidget.isShowingNow){
-dojo.event.browser.stopEvent(evt);
-}
-if(this.autoComplete){
-this._selectOption();
-return;
-}
-case " ":
-if(this.popupWidget.isShowingNow&&this._highlighted_option){
-dojo.event.browser.stopEvent(evt);
-this._selectOption();
-this._hideResultList();
-return;
-}
-break;
-case k.KEY_ESCAPE:
-this._hideResultList();
-this._prev_key_esc=true;
-return;
-case k.KEY_BACKSPACE:
-this._prev_key_backspace=true;
-if(!this.textInputNode.value.length){
-this.setAllValues("","");
-this._hideResultList();
-_464=false;
-}
-break;
-case k.KEY_RIGHT_ARROW:
-case k.KEY_LEFT_ARROW:
-_464=false;
-break;
-default:
-if(evt.charCode==0){
-_464=false;
-}
-}
-if(this.searchTimer){
-clearTimeout(this.searchTimer);
-}
-if(_464){
-this._blurOptionNode();
-this.searchTimer=setTimeout(dojo.lang.hitch(this,this._startSearchFromInput),this.searchDelay);
-}
-},compositionEnd:function(evt){
-evt.key=evt.keyCode;
-this._handleKeyEvents(evt);
-},onKeyUp:function(evt){
-this.setValue(this.textInputNode.value);
-},setSelectedValue:function(_467){
-this.comboBoxSelectionValue.value=_467;
-},setAllValues:function(_468,_469){
-this.setSelectedValue(_469);
-this.setValue(_468);
-},_focusOptionNode:function(node){
-if(this._highlighted_option!=node){
-this._blurOptionNode();
-this._highlighted_option=node;
-dojo.html.addClass(this._highlighted_option,"dojoComboBoxItemHighlight");
-}
-},_blurOptionNode:function(){
-if(this._highlighted_option){
-dojo.html.removeClass(this._highlighted_option,"dojoComboBoxItemHighlight");
-this._highlighted_option=null;
-}
-},_highlightNextOption:function(){
-if((!this._highlighted_option)||!this._highlighted_option.parentNode){
-this._focusOptionNode(this.optionsListNode.firstChild);
-}else{
-if(this._highlighted_option.nextSibling){
-this._focusOptionNode(this._highlighted_option.nextSibling);
-}
-}
-dojo.html.scrollIntoView(this._highlighted_option);
-},_highlightPrevOption:function(){
-if(this._highlighted_option&&this._highlighted_option.previousSibling){
-this._focusOptionNode(this._highlighted_option.previousSibling);
-}else{
-this._highlighted_option=null;
-this._hideResultList();
-return;
-}
-dojo.html.scrollIntoView(this._highlighted_option);
-},_itemMouseOver:function(evt){
-if(evt.target===this.optionsListNode){
-return;
-}
-this._focusOptionNode(evt.target);
-dojo.html.addClass(this._highlighted_option,"dojoComboBoxItemHighlight");
-},_itemMouseOut:function(evt){
-if(evt.target===this.optionsListNode){
-return;
-}
-this._blurOptionNode();
-},onResize:function(){
-var _46d=dojo.html.getContentBox(this.textInputNode);
-if(_46d.height<=0){
-dojo.lang.setTimeout(this,"onResize",100);
-return;
-}
-var _46e={width:_46d.height,height:_46d.height};
-dojo.html.setContentBox(this.downArrowNode,_46e);
-},fillInTemplate:function(args,frag){
-dojo.html.applyBrowserClass(this.domNode);
-var _471=this.getFragNodeRef(frag);
-if(!this.name&&_471.name){
-this.name=_471.name;
-}
-this.comboBoxValue.name=this.name;
-this.comboBoxSelectionValue.name=this.name+"_selected";
-dojo.html.copyStyle(this.domNode,_471);
-dojo.html.copyStyle(this.textInputNode,_471);
-dojo.html.copyStyle(this.downArrowNode,_471);
-with(this.downArrowNode.style){
-width="0px";
-height="0px";
-}
-var _472;
-if(this.dataProviderClass){
-if(typeof this.dataProviderClass=="string"){
-_472=dojo.evalObjPath(this.dataProviderClass);
-}else{
-_472=this.dataProviderClass;
-}
-}else{
-if(this.mode=="remote"){
-_472=dojo.widget.incrementalComboBoxDataProvider;
-}else{
-_472=dojo.widget.basicComboBoxDataProvider;
-}
-}
-this.dataProvider=new _472(this,this.getFragNodeRef(frag));
-this.popupWidget=new dojo.widget.createWidget("PopupContainer",{toggle:this.dropdownToggle,toggleDuration:this.toggleDuration});
-dojo.event.connect(this,"destroy",this.popupWidget,"destroy");
-this.optionsListNode=this.popupWidget.domNode;
-this.domNode.appendChild(this.optionsListNode);
-dojo.html.addClass(this.optionsListNode,"dojoComboBoxOptions");
-dojo.event.connect(this.optionsListNode,"onclick",this,"_selectOption");
-dojo.event.connect(this.optionsListNode,"onmouseover",this,"_onMouseOver");
-dojo.event.connect(this.optionsListNode,"onmouseout",this,"_onMouseOut");
-dojo.event.connect(this.optionsListNode,"onmouseover",this,"_itemMouseOver");
-dojo.event.connect(this.optionsListNode,"onmouseout",this,"_itemMouseOut");
-},_openResultList:function(_473){
-if(this.disabled){
-return;
-}
-this._clearResultList();
-if(!_473.length){
-this._hideResultList();
-}
-if((this.autoComplete)&&(_473.length)&&(!this._prev_key_backspace)&&(this.textInputNode.value.length>0)){
-var cpos=this._getCaretPos(this.textInputNode);
-if((cpos+1)>this.textInputNode.value.length){
-this.textInputNode.value+=_473[0][0].substr(cpos);
-this._setSelectedRange(this.textInputNode,cpos,this.textInputNode.value.length);
-}
-}
-var even=true;
-while(_473.length){
-var tr=_473.shift();
-if(tr){
-var td=document.createElement("div");
-td.appendChild(document.createTextNode(tr[0]));
-td.setAttribute("resultName",tr[0]);
-td.setAttribute("resultValue",tr[1]);
-td.className="dojoComboBoxItem "+((even)?"dojoComboBoxItemEven":"dojoComboBoxItemOdd");
-even=(!even);
-this.optionsListNode.appendChild(td);
-}
-}
-this._showResultList();
-},_onFocusInput:function(){
-this._hasFocus=true;
-},_onBlurInput:function(){
-this._hasFocus=false;
-this._handleBlurTimer(true,500);
-},_handleBlurTimer:function(_478,_479){
-if(this.blurTimer&&(_478||_479)){
-clearTimeout(this.blurTimer);
-}
-if(_479){
-this.blurTimer=dojo.lang.setTimeout(this,"_checkBlurred",_479);
-}
-},_onMouseOver:function(evt){
-if(!this._mouseover_list){
-this._handleBlurTimer(true,0);
-this._mouseover_list=true;
-}
-},_onMouseOut:function(evt){
-var _47c=evt.relatedTarget;
-try{
-if(!_47c||_47c.parentNode!=this.optionsListNode){
-this._mouseover_list=false;
-this._handleBlurTimer(true,100);
-this._tryFocus();
-}
-}
-catch(e){
-}
-},_isInputEqualToResult:function(_47d){
-var _47e=this.textInputNode.value;
-if(!this.dataProvider.caseSensitive){
-_47e=_47e.toLowerCase();
-_47d=_47d.toLowerCase();
-}
-return (_47e==_47d);
-},_isValidOption:function(){
-var tgt=dojo.html.firstElement(this.optionsListNode);
-var _480=false;
-while(!_480&&tgt){
-if(this._isInputEqualToResult(tgt.getAttribute("resultName"))){
-_480=true;
-}else{
-tgt=dojo.html.nextElement(tgt);
-}
-}
-return _480;
-},_checkBlurred:function(){
-if(!this._hasFocus&&!this._mouseover_list){
-this._hideResultList();
-if(!this.textInputNode.value.length){
-this.setAllValues("","");
-return;
-}
-var _481=this._isValidOption();
-if(this.forceValidOption&&!_481){
-this.setAllValues("","");
-return;
-}
-if(!_481){
-this.setSelectedValue("");
-}
-}
-},_selectOption:function(evt){
-var tgt=null;
-if(!evt){
-evt={target:this._highlighted_option};
-}
-if(!dojo.html.isDescendantOf(evt.target,this.optionsListNode)){
-if(!this.textInputNode.value.length){
-return;
-}
-tgt=dojo.html.firstElement(this.optionsListNode);
-if(!tgt||!this._isInputEqualToResult(tgt.getAttribute("resultName"))){
-return;
-}
-}else{
-tgt=evt.target;
-}
-while((tgt.nodeType!=1)||(!tgt.getAttribute("resultName"))){
-tgt=tgt.parentNode;
-if(tgt===dojo.body()){
-return false;
-}
-}
-this.selectedResult=[tgt.getAttribute("resultName"),tgt.getAttribute("resultValue")];
-this.setAllValues(tgt.getAttribute("resultName"),tgt.getAttribute("resultValue"));
-if(!evt.noHide){
-this._hideResultList();
-this._setSelectedRange(this.textInputNode,0,null);
-}
-this._tryFocus();
-},_clearResultList:function(){
-if(this.optionsListNode.innerHTML){
-this.optionsListNode.innerHTML="";
-}
-},_hideResultList:function(){
-this.popupWidget.close();
-},_showResultList:function(){
-var _484=this.optionsListNode.childNodes;
-if(_484.length){
-var _485=Math.min(_484.length,this.maxListLength);
-with(this.optionsListNode.style){
-display="";
-if(_485==_484.length){
-height="";
-}else{
-height=_485*dojo.html.getMarginBox(_484[0]).height+"px";
-}
-width=(dojo.html.getMarginBox(this.domNode).width-2)+"px";
-}
-this.popupWidget.open(this.domNode,this,this.downArrowNode);
-}else{
-this._hideResultList();
-}
-},handleArrowClick:function(){
-this._handleBlurTimer(true,0);
-this._tryFocus();
-if(this.popupWidget.isShowingNow){
-this._hideResultList();
-}else{
-this._startSearch("");
-}
-},_tryFocus:function(){
-try{
-this.textInputNode.focus();
-}
-catch(e){
-}
-},_startSearchFromInput:function(){
-this._startSearch(this.textInputNode.value);
-},_startSearch:function(key){
-this.dataProvider.startSearch(key,dojo.lang.hitch(this,"_openResultList"));
-},postCreate:function(){
-this.onResize();
-dojo.event.connect(this.textInputNode,"onblur",this,"_onBlurInput");
-dojo.event.connect(this.textInputNode,"onfocus",this,"_onFocusInput");
-if(this.disabled){
-this.disable();
-}
-var s=dojo.widget.html.stabile.getState(this.widgetId);
-if(s){
-this.setState(s);
-}
-}});
-dojo.provide("dojo.widget.Select");
-dojo.widget.defineWidget("dojo.widget.Select",dojo.widget.ComboBox,{forceValidOption:true,setValue:function(_488){
-this.comboBoxValue.value=_488;
-dojo.widget.html.stabile.setState(this.widgetId,this.getState(),true);
-this.onValueChanged(_488);
-},setLabel:function(_489){
-this.comboBoxSelectionValue.value=_489;
-if(this.textInputNode.value!=_489){
-this.textInputNode.value=_489;
-}
-},getLabel:function(){
-return this.comboBoxSelectionValue.value;
-},getState:function(){
-return {value:this.getValue(),label:this.getLabel()};
-},onKeyUp:function(evt){
-this.setLabel(this.textInputNode.value);
-},setState:function(_48b){
-this.setValue(_48b.value);
-this.setLabel(_48b.label);
-},setAllValues:function(_48c,_48d){
-this.setLabel(_48c);
-this.setValue(_48d);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo3.js.uncompressed.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo3.js.uncompressed.js
deleted file mode 100644
index ed443e7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/dojo3.js.uncompressed.js
+++ /dev/null
@@ -1,8566 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("layer.widget");
-dojo.provide("dojo.namespaces.dojo");
-dojo.require("dojo.ns");
-
-(function(){
-	// Mapping of all widget short names to their full package names
-	// This is used for widget autoloading - no dojo.require() is necessary.
-	// If you use a widget in markup or create one dynamically, then this
-	// mapping is used to find and load any dependencies not already loaded.
-	// You should use your own namespace for any custom widgets.
-	// For extra widgets you use, dojo.declare() may be used to explicitly load them.
-	// Experimental and deprecated widgets are not included in this table
-	var map = {
-		html: {
-			"accordioncontainer": "dojo.widget.AccordionContainer",
-			"animatedpng": "dojo.widget.AnimatedPng",
-			"button": "dojo.widget.Button",
-			"chart": "dojo.widget.Chart",
-			"checkbox": "dojo.widget.Checkbox",
-			"clock": "dojo.widget.Clock",
-			"colorpalette": "dojo.widget.ColorPalette",
-			"combobox": "dojo.widget.ComboBox",
-			"combobutton": "dojo.widget.Button",
-			"contentpane": "dojo.widget.ContentPane",
-			"currencytextbox": "dojo.widget.CurrencyTextbox",
-			"datepicker": "dojo.widget.DatePicker",
-			"datetextbox": "dojo.widget.DateTextbox",
-			"debugconsole": "dojo.widget.DebugConsole",
-			"dialog": "dojo.widget.Dialog",
-			"dropdownbutton": "dojo.widget.Button",
-			"dropdowndatepicker": "dojo.widget.DropdownDatePicker",
-			"dropdowntimepicker": "dojo.widget.DropdownTimePicker",
-			"emaillisttextbox": "dojo.widget.InternetTextbox",
-			"emailtextbox": "dojo.widget.InternetTextbox",
-			"editor": "dojo.widget.Editor",
-			"editor2": "dojo.widget.Editor2",
-			"filteringtable": "dojo.widget.FilteringTable",
-			"fisheyelist": "dojo.widget.FisheyeList",
-			"fisheyelistitem": "dojo.widget.FisheyeList",
-			"floatingpane": "dojo.widget.FloatingPane",
-			"modalfloatingpane": "dojo.widget.FloatingPane",
-			"form": "dojo.widget.Form",
-			"googlemap": "dojo.widget.GoogleMap",
-			"inlineeditbox": "dojo.widget.InlineEditBox",
-			"integerspinner": "dojo.widget.Spinner",
-			"integertextbox": "dojo.widget.IntegerTextbox",
-			"ipaddresstextbox": "dojo.widget.InternetTextbox",
-			"layoutcontainer": "dojo.widget.LayoutContainer",
-			"linkpane": "dojo.widget.LinkPane",
-			"popupmenu2": "dojo.widget.Menu2",
-			"menuitem2": "dojo.widget.Menu2",
-			"menuseparator2": "dojo.widget.Menu2",
-			"menubar2": "dojo.widget.Menu2",
-			"menubaritem2": "dojo.widget.Menu2",
-			"pagecontainer": "dojo.widget.PageContainer",
-			"pagecontroller": "dojo.widget.PageContainer",
-			"popupcontainer": "dojo.widget.PopupContainer",
-			"progressbar": "dojo.widget.ProgressBar",
-			"radiogroup": "dojo.widget.RadioGroup",
-			"realnumbertextbox": "dojo.widget.RealNumberTextbox",
-			"regexptextbox": "dojo.widget.RegexpTextbox",
-			"repeater": "dojo.widget.Repeater", 
-			"resizabletextarea": "dojo.widget.ResizableTextarea",
-			"richtext": "dojo.widget.RichText",
-			"select": "dojo.widget.Select",
-			"show": "dojo.widget.Show",
-			"showaction": "dojo.widget.ShowAction",
-			"showslide": "dojo.widget.ShowSlide",
-			"slidervertical": "dojo.widget.Slider",
-			"sliderhorizontal": "dojo.widget.Slider",
-			"slider":"dojo.widget.Slider",
-			"slideshow": "dojo.widget.SlideShow",
-			"sortabletable": "dojo.widget.SortableTable",
-			"splitcontainer": "dojo.widget.SplitContainer",
-			"tabcontainer": "dojo.widget.TabContainer",
-			"tabcontroller": "dojo.widget.TabContainer",
-			"taskbar": "dojo.widget.TaskBar",
-			"textbox": "dojo.widget.Textbox",
-			"timepicker": "dojo.widget.TimePicker",
-			"timetextbox": "dojo.widget.DateTextbox",
-			"titlepane": "dojo.widget.TitlePane",
-			"toaster": "dojo.widget.Toaster",
-			"toggler": "dojo.widget.Toggler",
-			"toolbar": "dojo.widget.Toolbar",
-			"toolbarcontainer": "dojo.widget.Toolbar",
-			"toolbaritem": "dojo.widget.Toolbar",
-			"toolbarbuttongroup": "dojo.widget.Toolbar",
-			"toolbarbutton": "dojo.widget.Toolbar",
-			"toolbardialog": "dojo.widget.Toolbar",
-			"toolbarmenu": "dojo.widget.Toolbar",
-			"toolbarseparator": "dojo.widget.Toolbar",
-			"toolbarspace": "dojo.widget.Toolbar",
-			"toolbarselect": "dojo.widget.Toolbar",
-			"toolbarcolordialog": "dojo.widget.Toolbar",
-			"tooltip": "dojo.widget.Tooltip",
-			"tree": "dojo.widget.Tree",
-			"treebasiccontroller": "dojo.widget.TreeBasicController",
-			"treecontextmenu": "dojo.widget.TreeContextMenu",
-			"treedisablewrapextension": "dojo.widget.TreeDisableWrapExtension",
-			"treedociconextension": "dojo.widget.TreeDocIconExtension",
-			"treeeditor": "dojo.widget.TreeEditor",
-			"treeemphasizeonselect": "dojo.widget.TreeEmphasizeOnSelect",
-			"treeexpandtonodeonselect": "dojo.widget.TreeExpandToNodeOnSelect",
-			"treelinkextension": "dojo.widget.TreeLinkExtension",
-			"treeloadingcontroller": "dojo.widget.TreeLoadingController",
-			"treemenuitem": "dojo.widget.TreeContextMenu",
-			"treenode": "dojo.widget.TreeNode",
-			"treerpccontroller": "dojo.widget.TreeRPCController",
-			"treeselector": "dojo.widget.TreeSelector",
-			"treetoggleonselect": "dojo.widget.TreeToggleOnSelect",
-			"treev3": "dojo.widget.TreeV3",
-			"treebasiccontrollerv3": "dojo.widget.TreeBasicControllerV3",
-			"treecontextmenuv3": "dojo.widget.TreeContextMenuV3",
-			"treedndcontrollerv3": "dojo.widget.TreeDndControllerV3",
-			"treeloadingcontrollerv3": "dojo.widget.TreeLoadingControllerV3",
-			"treemenuitemv3": "dojo.widget.TreeContextMenuV3",
-			"treerpccontrollerv3": "dojo.widget.TreeRpcControllerV3",
-			"treeselectorv3": "dojo.widget.TreeSelectorV3",
-			"urltextbox": "dojo.widget.InternetTextbox",
-			"usphonenumbertextbox": "dojo.widget.UsTextbox",
-			"ussocialsecuritynumbertextbox": "dojo.widget.UsTextbox",
-			"usstatetextbox": "dojo.widget.UsTextbox",
-			"usziptextbox": "dojo.widget.UsTextbox",
-			"validationtextbox": "dojo.widget.ValidationTextbox",
-			"treeloadingcontroller": "dojo.widget.TreeLoadingController",
-			"wizardcontainer": "dojo.widget.Wizard",
-			"wizardpane": "dojo.widget.Wizard",
-			"yahoomap": "dojo.widget.YahooMap"
-		},
-		svg: {
-			"chart": "dojo.widget.svg.Chart"
-		},
-		vml: {
-			"chart": "dojo.widget.vml.Chart"
-		}
-	};
-
-	dojo.addDojoNamespaceMapping = function(/*String*/shortName, /*String*/packageName){
-	// summary:
-	//	Add an entry to the mapping table for the dojo: namespace
-	//
-	// shortName: the name to be used as the widget's tag name in the dojo: namespace
-	// packageName: the path to the Javascript module in dotted package notation
-		map[shortName]=packageName;    
-	};
-	
-	function dojoNamespaceResolver(name, domain){
-		if(!domain){ domain="html"; }
-		if(!map[domain]){ return null; }
-		return map[domain][name];    
-	}
-
-	dojo.registerNamespaceResolver("dojo", dojoNamespaceResolver);
-})();
-
-dojo.provide("dojo.xml.Parse");
-dojo.require("dojo.dom");
-
-//TODO: determine dependencies
-// currently has dependency on dojo.xml.DomUtil nodeTypes constants...
-
-// using documentFragment nomenclature to generalize in case we don't want to require passing a collection of nodes with a single parent
-
-dojo.xml.Parse = function(){
-	// summary:
-	//		generic class for taking a DOM node and parsing it into an object
-	//		based on the "dojo tag name" of that node.
-	// 
-	//		supported dojoTagName's:
-	//			<prefix:tag> => prefix:tag
-	//			<dojo:tag> => dojo:tag
-	//			<dojoTag> => dojo:tag
-	//			<tag dojoType="type"> => dojo:type
-	//			<tag dojoType="prefix:type"> => prefix:type
-	//			<tag dojo:type="type"> => dojo:type
-	//			<tag class="classa dojo-type classb"> => dojo:type	
-
-	var isIE = ((dojo.render.html.capable)&&(dojo.render.html.ie));
-
-	// get normalized (lowercase) tagName
-	// some browsers report tagNames in lowercase no matter what
-	function getTagName(node){
-		/*
-		return ((node)&&(node["tagName"]) ? node.tagName.toLowerCase() : '');
-		*/
-		try{
-			return node.tagName.toLowerCase();
-		}catch(e){
-			return "";
-		}
-	}
-
-	// locate dojo qualified tag name
-	function getDojoTagName(node){
-		var tagName = getTagName(node);
-		if (!tagName){
-				return '';
-		}
-		// any registered tag
-		if((dojo.widget)&&(dojo.widget.tags[tagName])){
-			return tagName;
-		}
-		// <prefix:tag> => prefix:tag
-		var p = tagName.indexOf(":");
-		if(p>=0){
-			return tagName;
-		}
-		// <dojo:tag> => dojo:tag
-		if(tagName.substr(0,5) == "dojo:"){
-			return tagName;
-		}
-		if(dojo.render.html.capable && dojo.render.html.ie && node.scopeName != 'HTML'){
-			return node.scopeName.toLowerCase() + ':' + tagName;
-		}
-		// <dojoTag> => dojo:tag
-		if(tagName.substr(0,4) == "dojo"){
-			// FIXME: this assumes tag names are always lower case
-			return "dojo:" + tagName.substring(4);
-		}
-		// <tag dojoType="prefix:type"> => prefix:type
-		// <tag dojoType="type"> => dojo:type
-		var djt = node.getAttribute("dojoType") || node.getAttribute("dojotype");
-		if(djt){
-			if (djt.indexOf(":")<0){
-				djt = "dojo:"+djt;
-			}
-			return djt.toLowerCase();
-		}
-		// <tag dojo:type="type"> => dojo:type
-		djt = node.getAttributeNS && node.getAttributeNS(dojo.dom.dojoml,"type");
-		if(djt){
-			return "dojo:" + djt.toLowerCase();
-		}
-		// <tag dojo:type="type"> => dojo:type
-		try{
-			// FIXME: IE really really doesn't like this, so we squelch errors for it
-			djt = node.getAttribute("dojo:type");
-		}catch(e){ 
-			// FIXME: log?  
-		}
-		if(djt){ return "dojo:"+djt.toLowerCase(); }
-		// <tag class="classa dojo-type classb"> => dojo:type	
-		if((dj_global["djConfig"])&&(!djConfig["ignoreClassNames"])){ 
-			// FIXME: should we make this optionally enabled via djConfig?
-			var classes = node.className||node.getAttribute("class");
-			// FIXME: following line, without check for existence of classes.indexOf
-			// breaks firefox 1.5's svg widgets
-			if((classes )&&(classes.indexOf)&&(classes.indexOf("dojo-")!=-1)){
-				var aclasses = classes.split(" ");
-				for(var x=0, c=aclasses.length; x<c; x++){
-					if(aclasses[x].slice(0, 5) == "dojo-"){
-						return "dojo:"+aclasses[x].substr(5).toLowerCase(); 
-					}
-				}
-			}
-		}
-		// no dojo-qualified name
-		return '';
-	}
-
-
-	this.parseElement = function(	/*DomNode*/node,
-									/*Boolean*/hasParentNodeSet, 
-									/*Boolean*/optimizeForDojoML, 
-									/*Integer*/thisIdx	){
-		// summary:
-		//		recursively parse the passed node, returning a normalized data
-		//		structure that represents the "attributes of interest" of said
-		//		elements. If optimizeForDojoML is true, only nodes that contain
-		//		a "dojo tag name" will be inspected for attributes.
-		// node: the DomNode to be treated as the root of inspection
-		// hasParentNodeSet: no-op, please pass "null"
-		// optimizeForDojoML: should we ignore non-Dojo nodes? Defaults to false.
-		// thisIdx:
-		//		a way to specify a synthetic "index" property in the resulting
-		//		data structure. Otherwise the index property of the top-level
-		//		return element is always "0".
-
-		// TODOC: document return structure of a non-trivial element set
-
-		// run shortcuts to bail out of processing up front to save time and
-		// object alloc if possible.
-		var tagName = getTagName(node);
-		//There's a weird bug in IE where it counts end tags, e.g. </dojo:button> as nodes that should be parsed.  Ignore these
-		if(isIE && tagName.indexOf("/")==0){ return null; }
-
-		try{
-			var attr = node.getAttribute("parseWidgets");
-			if(attr && attr.toLowerCase() == "false"){
-				return {};
-			}
-		}catch(e){/*continue*/}
-
-		
-		// look for a dojoml qualified name
-		// process dojoml only when optimizeForDojoML is true
-		var process = true;
-		if(optimizeForDojoML){
-			var dojoTagName = getDojoTagName(node);
-			tagName = dojoTagName || tagName;
-			process = Boolean(dojoTagName);
-		}
-
-		var parsedNodeSet = {};
-		parsedNodeSet[tagName] = [];
-		var pos = tagName.indexOf(":");
-		if(pos>0){
-			var ns = tagName.substring(0,pos);
-			parsedNodeSet["ns"] = ns;
-			// honor user namespace filters
-			if((dojo.ns)&&(!dojo.ns.allow(ns))){process=false;}
-		}
-
-		if(process){
-			var attributeSet = this.parseAttributes(node);
-			for(var attr in attributeSet){
-				if((!parsedNodeSet[tagName][attr])||(typeof parsedNodeSet[tagName][attr] != "array")){
-					parsedNodeSet[tagName][attr] = [];
-				}
-				parsedNodeSet[tagName][attr].push(attributeSet[attr]);
-			}	
-			// FIXME: we might want to make this optional or provide cloning instead of
-			// referencing, but for now, we include a node reference to allow
-			// instantiated components to figure out their "roots"
-			parsedNodeSet[tagName].nodeRef = node;
-			parsedNodeSet.tagName = tagName;
-			parsedNodeSet.index = thisIdx||0;
-		}
-
-		var count = 0;
-		for(var i = 0; i < node.childNodes.length; i++){
-			var tcn = node.childNodes.item(i);
-			switch(tcn.nodeType){
-				case  dojo.dom.ELEMENT_NODE: // element nodes, call this function recursively
-					var ctn = getDojoTagName(tcn) || getTagName(tcn);
-					if(!parsedNodeSet[ctn]){
-						parsedNodeSet[ctn] = [];
-					}
-					parsedNodeSet[ctn].push(this.parseElement(tcn, true, optimizeForDojoML, count));
-					if(	(tcn.childNodes.length == 1)&&
-						(tcn.childNodes.item(0).nodeType == dojo.dom.TEXT_NODE)){
-						parsedNodeSet[ctn][parsedNodeSet[ctn].length-1].value = tcn.childNodes.item(0).nodeValue;
-					}
-					count++;
-					break;
-				case  dojo.dom.TEXT_NODE: // if a single text node is the child, treat it as an attribute
-					if(node.childNodes.length == 1){
-						parsedNodeSet[tagName].push({ value: node.childNodes.item(0).nodeValue });
-					}
-					break;
-				default: break;
-				/*
-				case  dojo.dom.ATTRIBUTE_NODE: // attribute node... not meaningful here
-					break;
-				case  dojo.dom.CDATA_SECTION_NODE: // cdata section... not sure if this would ever be meaningful... might be...
-					break;
-				case  dojo.dom.ENTITY_REFERENCE_NODE: // entity reference node... not meaningful here
-					break;
-				case  dojo.dom.ENTITY_NODE: // entity node... not sure if this would ever be meaningful
-					break;
-				case  dojo.dom.PROCESSING_INSTRUCTION_NODE: // processing instruction node... not meaningful here
-					break;
-				case  dojo.dom.COMMENT_NODE: // comment node... not not sure if this would ever be meaningful 
-					break;
-				case  dojo.dom.DOCUMENT_NODE: // document node... not sure if this would ever be meaningful
-					break;
-				case  dojo.dom.DOCUMENT_TYPE_NODE: // document type node... not meaningful here
-					break;
-				case  dojo.dom.DOCUMENT_FRAGMENT_NODE: // document fragment node... not meaningful here
-					break;
-				case  dojo.dom.NOTATION_NODE:// notation node... not meaningful here
-					break;
-				*/
-			}
-		}
-		//return (hasParentNodeSet) ? parsedNodeSet[node.tagName] : parsedNodeSet;
-		//if(parsedNodeSet.tagName)dojo.debug("parseElement: RETURNING NODE WITH TAGNAME "+parsedNodeSet.tagName);
-		return parsedNodeSet;
-	};
-
-
-	/* parses a set of attributes on a node into an object tree */
-	this.parseAttributes = function(/*DomNode*/node){
-		// summary:
-		// 		creates an attribute object that maps attribute values for the
-		// 		passed node. Note that this is similar to creating a JSON
-		// 		representation of a DOM node.
-		// usage:
-		//		a node with the following serialization:
-		//			<div foo="bar" baz="thud">...</div>	
-		//		would yeild the following return structure when passed into this
-		//		function:
-		//			{
-		//				"foo": {
-		//					"value": "bar"
-		//				},
-		//				"baz": {
-		//					"value": "thud"
-		//				}
-		//			}
-		//
-		var parsedAttributeSet = {};
-		var atts = node.attributes;
-		// TODO: should we allow for duplicate attributes at this point...
-		// would any of the relevant dom implementations even allow this?
-		var attnode, i=0;
-		while((attnode=atts[i++])){
-			if(isIE){
-				if(!attnode){ continue; }
-				if((typeof attnode == "object")&&
-					(typeof attnode.nodeValue == 'undefined')||
-					(attnode.nodeValue == null)||
-					(attnode.nodeValue == '')){ 
-					continue; 
-				}
-			}
-
-			var nn = attnode.nodeName.split(":");
-			nn = (nn.length == 2) ? nn[1] : attnode.nodeName;
-						
-			parsedAttributeSet[nn] = { 
-				value: attnode.nodeValue 
-			};
-		}
-		return parsedAttributeSet;
-	};
-};
-
-dojo.provide("dojo.widget.Widget");
-
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.ns");
-dojo.require("dojo.widget.Manager");
-dojo.require("dojo.event.*");
-
-dojo.declare("dojo.widget.Widget", null,
-	function(){
-		// these properties aren't primitives and need to be created on a per-item
-		// basis.
-
-		// children: Array
-		//		a list of all of the widgets that have been added as children of
-		//		this component. Should only have values if isContainer is true.
-		this.children = [];
-
-		// extraArgs: Object
-		//		a map of properties which the widget system tried to assign from
-		//		user input but did not correspond to any of the properties set on
-		//		the class prototype. These names will also be available in all
-		//		lower-case form in this map
-		this.extraArgs = {};
-	},
-{
-	// parent: Widget
-	//		the parent of this widget
-	parent: null, 
-
-	// isTopLevel: Boolean
-	//		should this widget eat all events that bubble up to it?
-	//		obviously, top-level and modal widgets should set these appropriately
-	isTopLevel:  false, 
-
-	// disabled: Boolean
-	//		should this widget respond to user input?
-	//		in markup, this is specified as "disabled='disabled'", or just "disabled"
-	disabled: false,
-
-	// isContainer: Boolean
-	//		can this widget contain other widgets?
-	isContainer: false, 
-
-	// widgetId: String
-	//		a unique, opaque ID string that can be assigned by users or by the
-	//		system. If the developer passes an ID which is known not to be
-	//		unique, the specified ID is ignored and the system-generated ID is
-	//		used instead.
-	widgetId: "",
-
-	// widgetType: String
-	//		used for building generic widgets
-	widgetType: "Widget",
-
-	// ns: String
-	//		defaults to 'dojo'.  "namespace" is a reserved word in JavaScript, so we abbreviate
-	ns: "dojo",
-
-	getNamespacedType: function(){ 
-		// summary:
-		//		get the "full" name of the widget. If the widget comes from the
-		//		"dojo" namespace and is a Button, calling this method will
-		//		return "dojo:button", all lower-case
-		return (this.ns ? this.ns + ":" + this.widgetType : this.widgetType).toLowerCase(); // String
-	},
-	
-	toString: function(){
-		// summary:
-		//		returns a string that represents the widget. When a widget is
-		//		cast to a string, this method will be used to generate the
-		//		output. Currently, it does not implement any sort of reversable
-		//		serialization.
-		return '[Widget ' + this.getNamespacedType() + ', ' + (this.widgetId || 'NO ID') + ']'; // String
-	},
-
-	repr: function(){
-		// summary: returns the string representation of the widget.
-		return this.toString(); // String
-	},
-
-	enable: function(){
-		// summary:
-		//		enables the widget, usually involving unmasking inputs and
-		//		turning on event handlers. Not implemented here.
-		this.disabled = false;
-	},
-
-	disable: function(){
-		// summary:
-		//		disables the widget, usually involves masking inputs and
-		//		unsetting event handlers. Not implemented here.
-		this.disabled = true;
-	},
-
-	// TODO:
-	//	1) this would be better in HtmlWidget rather than here?
-	//	2) since many widgets don't care if they've been resized, maybe this should be a mixin?
-	onResized: function(){
-		// summary:
-		//		A signal that widgets will call when they have been resized.
-		//		Can be connected to for determining if a layout needs to be
-		//		reflowed. Clients should override this function to do special
-		//		processing, then call this.notifyChildrenOfResize() to notify
-		//		children of resize.
-		this.notifyChildrenOfResize();
-	},
-	
-	notifyChildrenOfResize: function(){
-		// summary: dispatches resized events to all children of this widget
-		for(var i=0; i<this.children.length; i++){
-			var child = this.children[i];
-			//dojo.debug(this.widgetId + " resizing child " + child.widgetId);
-			if( child.onResized ){
-				child.onResized();
-			}
-		}
-	},
-
-	create: function(args, fragment, parent, ns){
-		// summary:
-		//		'create' manages the initialization part of the widget
-		//		lifecycle. It's called implicitly when any widget is created.
-		//		All other initialization functions for widgets, except for the
-		//		constructor, are called as a result of 'create' being fired.
-		// args: Object
-		//		a normalized view of the parameters that the widget should take
-		// fragment: Object
-		//		if the widget is being instantiated from markup, this object 
-		// parent: Widget?
-		//		the widget, if any, that this widget will be the child of.  If
-		//		none is passed, the global default widget is used.
-		// ns: String?
-		//		what namespace the widget belongs to
-		// description:
-		//		to understand the process by which widgets are instantiated, it
-		//		is critical to understand what other methods 'create' calls and
-		//		which of them you'll want to over-ride. Of course, adventurous
-		//		developers could over-ride 'create' entirely, but this should
-		//		only be done as a last resort.
-		//
-		//		Below is a list of the methods that are called, in the order
-		//		they are fired, along with notes about what they do and if/when
-		//		you should over-ride them in your widget:
-		//			
-		//			mixInProperties:
-		//				takes the args and does lightweight type introspection
-		//				on pre-existing object properties to initialize widget
-		//				values by casting the values that are passed in args
-		//			postMixInProperties:
-		//				a stub function that you can over-ride to modify
-		//				variables that may have been naively assigned by
-		//				mixInProperties
-		//			# widget is added to manager object here
-		//			buildRendering
-		//				subclasses use this method to handle all UI initialization
-		//			initialize:
-		//				a stub function that you can over-ride.
-		//			postInitialize:
-		//				a stub function that you can over-ride.
-		//			postCreate
-		//				a stub function that you can over-ride to modify take
-		//				actions once the widget has been placed in the UI
-		//
-		//		all of these functions are passed the same arguments as are
-		//		passed to 'create'
-
-		//dojo.profile.start(this.widgetType + " create");
-		if(ns){
-			this.ns = ns;
-		}
-		// dojo.debug(this.widgetType, "create");
-		//dojo.profile.start(this.widgetType + " satisfyPropertySets");
-		this.satisfyPropertySets(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " satisfyPropertySets");
-		// dojo.debug(this.widgetType, "-> mixInProperties");
-		//dojo.profile.start(this.widgetType + " mixInProperties");
-		this.mixInProperties(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " mixInProperties");
-		// dojo.debug(this.widgetType, "-> postMixInProperties");
-		//dojo.profile.start(this.widgetType + " postMixInProperties");
-		this.postMixInProperties(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " postMixInProperties");
-		// dojo.debug(this.widgetType, "-> dojo.widget.manager.add");
-		dojo.widget.manager.add(this);
-		// dojo.debug(this.widgetType, "-> buildRendering");
-		//dojo.profile.start(this.widgetType + " buildRendering");
-		this.buildRendering(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " buildRendering");
-		// dojo.debug(this.widgetType, "-> initialize");
-		//dojo.profile.start(this.widgetType + " initialize");
-		this.initialize(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " initialize");
-		// dojo.debug(this.widgetType, "-> postInitialize");
-		// postinitialize includes subcomponent creation
-		// profile is put directly to function
-		this.postInitialize(args, fragment, parent);
-		// dojo.debug(this.widgetType, "-> postCreate");
-		//dojo.profile.start(this.widgetType + " postCreate");
-		this.postCreate(args, fragment, parent);
-		//dojo.profile.end(this.widgetType + " postCreate");
-		// dojo.debug(this.widgetType, "done!");
-		
-		//dojo.profile.end(this.widgetType + " create");
-		
-		return this;
-	},
-
-	destroy: function(finalize){
-		// summary:
-		// 		Destroy this widget and it's descendants. This is the generic
-		// 		"destructor" function that all widget users should call to
-		// 		clealy discard with a widget. Once a widget is destroyed, it's
-		// 		removed from the manager object.
-		// finalize: Boolean
-		//		is this function being called part of global environment
-		//		tear-down?
-
-		// FIXME: this is woefully incomplete
-		if(this.parent){
-			this.parent.removeChild(this);
-		}
-		this.destroyChildren();
-		this.uninitialize();
-		this.destroyRendering(finalize);
-		dojo.widget.manager.removeById(this.widgetId);
-	},
-
-	destroyChildren: function(){
-		// summary:
-		//		Recursively destroy the children of this widget and their
-		//		descendents.
-		var widget;
-		var i=0;
-		while(this.children.length > i){
-			widget = this.children[i];
-			if (widget instanceof dojo.widget.Widget) { // find first widget
-				this.removeChild(widget);
-				widget.destroy();
-				continue;
-			}
-			
-			i++; // skip data object
-		}
-				
-	},
-
-	getChildrenOfType: function(/*String*/type, recurse){
-		// summary: 
-		//		return an array of descendant widgets who match the passed type
-		// recurse: Boolean
-		//		should we try to get all descendants that match? Defaults to
-		//		false.
-		var ret = [];
-		var isFunc = dojo.lang.isFunction(type);
-		if(!isFunc){
-			type = type.toLowerCase();
-		}
-		for(var x=0; x<this.children.length; x++){
-			if(isFunc){
-				if(this.children[x] instanceof type){
-					ret.push(this.children[x]);
-				}
-			}else{
-				if(this.children[x].widgetType.toLowerCase() == type){
-					ret.push(this.children[x]);
-				}
-			}
-			if(recurse){
-				ret = ret.concat(this.children[x].getChildrenOfType(type, recurse));
-			}
-		}
-		return ret; // Array
-	},
-
-	getDescendants: function(){
-		// returns: a flattened array of all direct descendants including self
-		var result = [];
-		var stack = [this];
-		var elem;
-		while ((elem = stack.pop())){
-			result.push(elem);
-			// a child may be data object without children field set (not widget)
-			if (elem.children) {
-				dojo.lang.forEach(elem.children, function(elem) { stack.push(elem); });
-			}
-		}
-		return result; // Array
-	},
-
-
-	isFirstChild: function(){
-		return this === this.parent.children[0]; // Boolean
-	},
-
-	isLastChild: function() {
-		return this === this.parent.children[this.parent.children.length-1]; // Boolean
-	},
-
-	satisfyPropertySets: function(args){
-		// summary: not implemented!
-
-		// dojo.profile.start("satisfyPropertySets");
-		// get the default propsets for our component type
-		/*
-		var typePropSets = []; // FIXME: need to pull these from somewhere!
-		var localPropSets = []; // pull out propsets from the parser's return structure
-
-		// for(var x=0; x<args.length; x++){
-		// }
-
-		for(var x=0; x<typePropSets.length; x++){
-		}
-
-		for(var x=0; x<localPropSets.length; x++){
-		}
-		*/
-		// dojo.profile.end("satisfyPropertySets");
-		
-		return args;
-	},
-
-	mixInProperties: function(args, /*Object*/frag){
-		// summary:
-		// 		takes the list of properties listed in args and sets values of
-		// 		the current object based on existence of properties with the
-		// 		same name (case insensitive) and the type of the pre-existing
-		// 		property. This is a lightweight conversion and is not intended
-		// 		to capture custom type semantics.
-		// args: Object
-		//		A map of properties and values to set on the current object. By
-		//		default it is assumed that properties in args are in string
-		//		form and need to be converted. However, if there is a
-		//		'fastMixIn' property with the value 'true' in the args param,
-		//		this assumption is ignored and all values in args are copied
-		//		directly to the current object without any form of type
-		//		casting.
-		// description:
-		//		The mix-in code attempts to do some type-assignment based on
-		//		PRE-EXISTING properties of the "this" object. When a named
-		//		property of args is located, it is first tested to make
-		//		sure that the current object already "has one". Properties
-		//		which are undefined in the base widget are NOT settable here.
-		//		The next step is to try to determine type of the pre-existing
-		//		property. If it's a string, the property value is simply
-		//		assigned. If a function, it is first cast using "new
-		//		Function()" and the execution scope modified such that it
-		//		always evaluates in the context of the current object. This
-		//		listener is then added to the original function via
-		//		dojo.event.connect(). If an Array, the system attempts to split
-		//		the string value on ";" chars, and no further processing is
-		//		attempted (conversion of array elements to a integers, for
-		//		instance). If the property value is an Object
-		//		(testObj.constructor === Object), the property is split first
-		//		on ";" chars, secondly on ":" chars, and the resulting
-		//		key/value pairs are assigned to an object in a map style. The
-		//		onus is on the property user to ensure that all property values
-		//		are converted to the expected type before usage. Properties
-		//		which do not occur in the "this" object are assigned to the
-		//		this.extraArgs map using both the original name and the
-		//		lower-case name of the property. This allows for consistent
-		//		access semantics regardless of the case preservation of the
-		//		source of the property names.
-		
-		if((args["fastMixIn"])||(frag["fastMixIn"])){
-			// dojo.profile.start("mixInProperties_fastMixIn");
-			// fast mix in assumes case sensitivity, no type casting, etc...
-			// dojo.lang.mixin(this, args);
-			for(var x in args){
-				this[x] = args[x];
-			}
-			// dojo.profile.end("mixInProperties_fastMixIn");
-			return;
-		}
-		// dojo.profile.start("mixInProperties");
-
-		var undef;
-
-		// NOTE: we cannot assume that the passed properties are case-correct
-		// (esp due to some browser bugs). Therefore, we attempt to locate
-		// properties for assignment regardless of case. This may cause
-		// problematic assignments and bugs in the future and will need to be
-		// documented with big bright neon lights.
-
-		// FIXME: fails miserably if a mixin property has a default value of null in 
-		// a widget
-
-		// NOTE: caching lower-cased args in the prototype is only 
-		// acceptable if the properties are invariant.
-		// if we have a name-cache, get it
-		var lcArgs = dojo.widget.lcArgsCache[this.widgetType];
-		if ( lcArgs == null ){
-			// build a lower-case property name cache if we don't have one
-			lcArgs = {};
-			for(var y in this){
-				lcArgs[((new String(y)).toLowerCase())] = y;
-			}
-			dojo.widget.lcArgsCache[this.widgetType] = lcArgs;
-		}
-		var visited = {};
-		for(var x in args){
-			if(!this[x]){ // check the cache for properties
-				var y = lcArgs[(new String(x)).toLowerCase()];
-				if(y){
-					args[y] = args[x];
-					x = y; 
-				}
-			}
-			if(visited[x]){ continue; }
-			visited[x] = true;
-			if((typeof this[x]) != (typeof undef)){
-				if(typeof args[x] != "string"){
-					this[x] = args[x];
-				}else{
-					if(dojo.lang.isString(this[x])){
-						this[x] = args[x];
-					}else if(dojo.lang.isNumber(this[x])){
-						this[x] = new Number(args[x]); // FIXME: what if NaN is the result?
-					}else if(dojo.lang.isBoolean(this[x])){
-						this[x] = (args[x].toLowerCase()=="false") ? false : true;
-					}else if(dojo.lang.isFunction(this[x])){
-
-						// FIXME: need to determine if always over-writing instead
-						// of attaching here is appropriate. I suspect that we
-						// might want to only allow attaching w/ action items.
-						
-						// RAR, 1/19/05: I'm going to attach instead of
-						// over-write here. Perhaps function objects could have
-						// some sort of flag set on them? Or mixed-into objects
-						// could have some list of non-mutable properties
-						// (although I'm not sure how that would alleviate this
-						// particular problem)? 
-
-						// this[x] = new Function(args[x]);
-
-						// after an IRC discussion last week, it was decided
-						// that these event handlers should execute in the
-						// context of the widget, so that the "this" pointer
-						// takes correctly.
-						
-						// argument that contains no punctuation other than . is 
-						// considered a function spec, not code
-						if(args[x].search(/[^\w\.]+/i) == -1){
-							this[x] = dojo.evalObjPath(args[x], false);
-						}else{
-							var tn = dojo.lang.nameAnonFunc(new Function(args[x]), this);
-							dojo.event.kwConnect({
-								srcObj: this, 
-								srcFunc: x, 
-								adviceObj: this, 
-								adviceFunc: tn
-							});
-						}
-					}else if(dojo.lang.isArray(this[x])){ // typeof [] == "object"
-						this[x] = args[x].split(";");
-					} else if (this[x] instanceof Date) {
-						this[x] = new Date(Number(args[x])); // assume timestamp
-					}else if(typeof this[x] == "object"){ 
-						// FIXME: should we be allowing extension here to handle
-						// other object types intelligently?
-
-						// if a plain string is passed to a property of type dojo.uri.Uri,
-						// we assume it is relative to root of dojo
-						if (this[x] instanceof dojo.uri.Uri){
-							this[x] = dojo.uri.dojoUri(args[x]);
-						}else{
-							// FIXME: unlike all other types, we do not replace the
-							// object with a new one here. Should we change that?
-							var pairs = args[x].split(";");
-							for(var y=0; y<pairs.length; y++){
-								var si = pairs[y].indexOf(":");
-								if((si != -1)&&(pairs[y].length>si)){
-									this[x][pairs[y].substr(0, si).replace(/^\s+|\s+$/g, "")] = pairs[y].substr(si+1);
-								}
-							}
-						}
-					}else{
-						// the default is straight-up string assignment. When would
-						// we ever hit this?
-						this[x] = args[x];
-					}
-				}
-			}else{
-				// collect any extra 'non mixed in' args
-				this.extraArgs[x.toLowerCase()] = args[x];
-			}
-		}
-		// dojo.profile.end("mixInProperties");
-	},
-	
-	postMixInProperties: function(/*Object*/args, /*Object*/frag, /*Widget*/parent){
-		// summary
-		//	Called after the parameters to the widget have been read-in,
-		//	but before the widget template is instantiated.
-		//	Especially useful to set properties that are referenced in the widget template.
-	},
-
-	initialize: function(/*Object*/args, /*Object*/frag, /*Widget*/parent){
-		// summary: stub function.
-		return false;
-		// dojo.unimplemented("dojo.widget.Widget.initialize");
-	},
-
-	postInitialize: function(/*Object*/args, /*Object*/frag, /*Widget*/parent){
-		// summary: stub function.
-		return false;
-	},
-
-	postCreate: function(/*Object*/args, /*Object*/frag, /*Widget*/parent){
-		// summary: stub function.
-		return false;
-	},
-
-	uninitialize: function(){
-		// summary: 
-		//		stub function. Over-ride to implement custom widget tear-down
-		//		behavior.
-		return false;
-	},
-
-	buildRendering: function(/*Object*/args, /*Object*/frag, /*Widget*/parent){
-		// summary: stub function. SUBCLASSES MUST IMPLEMENT
-		dojo.unimplemented("dojo.widget.Widget.buildRendering, on "+this.toString()+", ");
-		return false;
-	},
-
-	destroyRendering: function(){
-		// summary: stub function. SUBCLASSES MUST IMPLEMENT
-		dojo.unimplemented("dojo.widget.Widget.destroyRendering");
-		return false;
-	},
-
-	addedTo: function(parent){
-		// summary:
-		//		stub function this is just a signal that can be caught
-		// parent: Widget
-		//		instance of dojo.widget.Widget that we were added to
-	},
-
-	addChild: function(child){
-		// summary: stub function. SUBCLASSES MUST IMPLEMENT
-		dojo.unimplemented("dojo.widget.Widget.addChild");
-		return false;
-	},
-
-	// Detach the given child widget from me, but don't destroy it
-	removeChild: function(/*Widget*/widget){
-		// summary: 
-		//		removes the passed widget instance from this widget but does
-		//		not destroy it
-		for(var x=0; x<this.children.length; x++){
-			if(this.children[x] === widget){
-				this.children.splice(x, 1);
-				widget.parent=null;
-				break;
-			}
-		}
-		return widget; // Widget
-	},
-
-	getPreviousSibling: function(){
-		// summary:
-		//		returns null if this is the first child of the parent,
-		//		otherwise returns the next sibling to the "left".
-		var idx = this.getParentIndex();
- 
-		 // first node is idx=0 not found is idx<0
-		if (idx<=0) return null;
- 
-		return this.parent.children[idx-1]; // Widget
-	},
- 
-	getSiblings: function(){
-		// summary: gets an array of all children of our parent, including "this"
-		return this.parent.children; // Array
-	},
- 
-	getParentIndex: function(){
-		// summary: what index are we at in the parent's children array?
-		return dojo.lang.indexOf(this.parent.children, this, true); // int
-	},
- 
-	getNextSibling: function(){
-		// summary:
-		//		returns null if this is the last child of the parent,
-		//		otherwise returns the next sibling to the "right".
- 
-		var idx = this.getParentIndex();
- 
-		if (idx == this.parent.children.length-1){return null;} // last node
-		if (idx < 0){return null;} // not found
- 
-		return this.parent.children[idx+1]; // Widget
-	}
-});
-
-// Lower case name cache: listing of the lower case elements in each widget.
-// We can't store the lcArgs in the widget itself because if B subclasses A,
-// then B.prototype.lcArgs might return A.prototype.lcArgs, which is not what we
-// want
-dojo.widget.lcArgsCache = {};
-
-// TODO: should have a more general way to add tags or tag libraries?
-// TODO: need a default tags class to inherit from for things like getting propertySets
-// TODO: parse properties/propertySets into component attributes
-// TODO: parse subcomponents
-// TODO: copy/clone raw markup fragments/nodes as appropriate
-dojo.widget.tags = {};
-dojo.widget.tags.addParseTreeHandler = function(/*String*/type){
-	// summary: deprecated!
-	dojo.deprecated("addParseTreeHandler", ". ParseTreeHandlers are now reserved for components. Any unfiltered DojoML tag without a ParseTreeHandler is assumed to be a widget", "0.5");
-	/*
-	var ltype = type.toLowerCase();
-	this[ltype] = function(fragment, widgetParser, parentComp, insertionIndex, localProps){
-		var _ltype = ltype;
-		dojo.profile.start(_ltype);
-		var n = dojo.widget.buildWidgetFromParseTree(ltype, fragment, widgetParser, parentComp, insertionIndex, localProps);
-		dojo.profile.end(_ltype);
-		return n;
-	}
-	*/
-}
-
-//dojo.widget.tags.addParseTreeHandler("dojo:widget");
-
-dojo.widget.tags["dojo:propertyset"] = function(fragment, widgetParser, parentComp){
-	// FIXME: Is this needed?
-	// FIXME: Not sure that this parses into the structure that I want it to parse into...
-	// FIXME: add support for nested propertySets
-	var properties = widgetParser.parseProperties(fragment["dojo:propertyset"]);
-}
-
-// FIXME: need to add the <dojo:connect />
-dojo.widget.tags["dojo:connect"] = function(fragment, widgetParser, parentComp){
-	var properties = widgetParser.parseProperties(fragment["dojo:connect"]);
-}
-
-// FIXME: if we know the insertion point (to a reasonable location), why then do we:
-//	- create a template node
-//	- clone the template node
-//	- render the clone and set properties
-//	- remove the clone from the render tree
-//	- place the clone
-// this is quite dumb
-dojo.widget.buildWidgetFromParseTree = function(/*String*/				type,
-												/*Object*/				frag, 
-												/*dojo.widget.Parse*/	parser,
-												/*Widget, optional*/	parentComp, 
-												/*int, optional*/		insertionIndex,
-												/*Object*/				localProps){
-
-	// summary: creates a tree of widgets from the data structure produced by the first-pass parser (frag)
-	
-
-	var stype = type.split(":");
-	stype = (stype.length == 2) ? stype[1] : type;
-	
-	// FIXME: we don't seem to be doing anything with this!
-	// var propertySets = parser.getPropertySets(frag);
-	var localProperties = localProps || parser.parseProperties(frag[frag["ns"]+":"+stype]);
-	var twidget = dojo.widget.manager.getImplementation(stype,null,null,frag["ns"]);
-	if(!twidget){
-		throw new Error('cannot find "' + type + '" widget');
-	}else if (!twidget.create){
-		throw new Error('"' + type + '" widget object has no "create" method and does not appear to implement *Widget');
-	}
-	localProperties["dojoinsertionindex"] = insertionIndex;
-	// FIXME: we lose no less than 5ms in construction!
-	var ret = twidget.create(localProperties, frag, parentComp, frag["ns"]);
-	// dojo.profile.end("buildWidgetFromParseTree");
-	return ret;
-}
-
-dojo.widget.defineWidget = function(widgetClass, renderer, superclasses, init, props){
-	// summary: Create a widget constructor function (aka widgetClass)
-	// widgetClass: String
-	//		the location in the object hierarchy to place the new widget class constructor
-	// renderer: String
-	//		usually "html", determines when this delcaration will be used
-	// superclasses: Function||Function[]
-	//		can be either a single function or an array of functions to be
-	//		mixed in as superclasses. If an array, only the first will be used
-	//		to set prototype inheritance.
-	// init: Function
-	//		an optional constructor function. Will be called after superclasses are mixed in.
-	// props: Object
-	//		a map of properties and functions to extend the class prototype with
-
-	// This meta-function does parameter juggling for backward compat and overloading
-	// if 4th argument is a string, we are using the old syntax
-	// old sig: widgetClass, superclasses, props (object), renderer (string), init (function)
-	if(dojo.lang.isString(arguments[3])){
-		dojo.widget._defineWidget(arguments[0], arguments[3], arguments[1], arguments[4], arguments[2]);
-	}else{
-		// widgetClass
-		var args = [ arguments[0] ], p = 3;
-		if(dojo.lang.isString(arguments[1])){
-			// renderer, superclass
-			args.push(arguments[1], arguments[2]);
-		}else{
-			// superclass
-			args.push('', arguments[1]);
-			p = 2;
-		}
-		if(dojo.lang.isFunction(arguments[p])){
-			// init (function), props (object) 
-			args.push(arguments[p], arguments[p+1]);
-		}else{
-			// props (object) 
-			args.push(null, arguments[p]);
-		}
-		dojo.widget._defineWidget.apply(this, args);
-	}
-}
-
-dojo.widget.defineWidget.renderers = "html|svg|vml";
-
-dojo.widget._defineWidget = function(widgetClass /*string*/, renderer /*string*/, superclasses /*function||array*/, init /*function*/, props /*object*/){
-	// FIXME: uncomment next line to test parameter juggling ... remove when confidence improves
-	// dojo.debug('(c:)' + widgetClass + '\n\n(r:)' + renderer + '\n\n(i:)' + init + '\n\n(p:)' + props);
-	// widgetClass takes the form foo.bar.baz<.renderer>.WidgetName (e.g. foo.bar.baz.WidgetName or foo.bar.baz.html.WidgetName)
-	var module = widgetClass.split(".");
-	var type = module.pop(); // type <= WidgetName, module <= foo.bar.baz<.renderer>
-	var regx = "\\.(" + (renderer ? renderer + '|' : '') + dojo.widget.defineWidget.renderers + ")\\.";
-	var r = widgetClass.search(new RegExp(regx));
-	module = (r < 0 ? module.join(".") : widgetClass.substr(0, r));
-
-	// deprecated in favor of namespace system, remove for 0.5
-	dojo.widget.manager.registerWidgetPackage(module);
-	
-	var pos = module.indexOf(".");
-	var nsName = (pos > -1) ? module.substring(0,pos) : module;
-
-	// FIXME: hrm, this might make things simpler
-	//dojo.widget.tags.addParseTreeHandler(nsName+":"+type.toLowerCase());
-	
-	props=(props)||{};
-	props.widgetType = type;
-	if((!init)&&(props["classConstructor"])){
-		init = props.classConstructor;
-		delete props.classConstructor;
-	}
-	dojo.declare(widgetClass, superclasses, init, props);
-}
-
-dojo.provide("dojo.widget.Parse");
-dojo.require("dojo.widget.Manager");
-dojo.require("dojo.dom");
-
-//
-// dojoML parser should be moved out of 'widget', codifying the difference between a 'component'
-// and a 'widget'. A 'component' being anything that can be generated from a tag.
-//
-// a particular dojoML tag would be handled by a registered tagHandler with a hook for a default handler
-// if the widget system is loaded, a widget builder would be attach itself as the default handler
-// 
-// widget tags are no longer registered themselves:
-// they are now arbitrarily namespaced, so we cannot register them all, and the non-prefixed portions 
-// are no longer guaranteed unique 
-// 
-// therefore dojo.widget.tags should go with this parser code out of the widget module
-//
-
-dojo.widget.Parse = function(/*Object*/fragment){
-	this.propertySetsList = [];
-	this.fragment = fragment;
-
-	this.createComponents = function(/*Object*/frag, /*Object*/parentComp){
-		var comps = [];
-		var built = false;
-		// if we have items to parse/create at this level, do it!
-		try{
-			if(frag && frag.tagName && (frag != frag.nodeRef)){
-				
-				// these are in fact, not ever for widgets per-se anymore, 
-				// but for other markup elements (aka components)
-				var djTags = dojo.widget.tags;
-				
-				// we split so that you can declare multiple 
-				// non-destructive components from the same ctor node
-				var tna = String(frag.tagName).split(";");
-				for(var x=0; x<tna.length; x++){
-					var ltn = tna[x].replace(/^\s+|\s+$/g, "").toLowerCase();
-					// FIXME: unsure what this does
-					frag.tagName = ltn;
-					var ret;
-					if(djTags[ltn]){
-						built = true;
-						ret = djTags[ltn](frag, this, parentComp, frag.index);
-						comps.push(ret);
-					}else{
-						// we require a namespace prefix, default to dojo:
-						if(ltn.indexOf(":") == -1){
-							ltn = "dojo:"+ltn;
-						}
-						// FIXME: handling failure condition correctly?
-						// ret = djTags[ltn](frag, this, parentComp, frag.index);
-						ret = dojo.widget.buildWidgetFromParseTree(ltn, frag, this, parentComp, frag.index);
-						if(ret){
-							built = true;
-							comps.push(ret);
-						}
-					}
-				}
-			}
-		}catch(e){
-			dojo.debug("dojo.widget.Parse: error:", e);
-			// note, commenting out the next line is breaking several widgets for me
-			// throw e;
-			// IE is such a pain sometimes
-		}
-		// if there's a sub-frag, build widgets from that too
-		if(!built){
-			comps = comps.concat(this.createSubComponents(frag, parentComp));
-		}
-		return comps; // Array
-	}
-
-	this.createSubComponents = function(/*Object*/fragment, /*Object*/parentComp){
-		// summary: recurses over a raw JavaScript object structure,
-		// and calls the corresponding handler for its normalized tagName if it exists
-
-		var frag, comps = [];
-		for(var item in fragment){
-			frag = fragment[item];
-			if(frag && typeof frag == "object"
-				&&(frag!=fragment.nodeRef)
-				&&(frag!=fragment.tagName)
-				&&(!dojo.dom.isNode(frag))){// needed in IE when we have event.connected to the domNode
-				comps = comps.concat(this.createComponents(frag, parentComp));
-			}
-		}
-		return comps; // Array
-	}
-
-	this.parsePropertySets = function(/*Object*/fragment){
-		// summary: checks the top level of a raw JavaScript object
-		//	structure for any propertySets.  It stores an array of references to 
-		//	propertySets that it finds.
-		return [];
-		/*
-		var propertySets = [];
-		for(var item in fragment){
-			if((fragment[item]["tagName"] == "dojo:propertyset")){
-				propertySets.push(fragment[item]);
-			}
-		}
-		// FIXME: should we store these propertySets somewhere for later retrieval
-		this.propertySetsList.push(propertySets);
-		return propertySets;
-		*/
-	}
-
-	this.parseProperties = function(/*Object*/fragment){
-		// summary: parseProperties checks a raw JavaScript object structure for
-		//	properties, and returns a hash of properties that it finds.
-		var properties = {};
-		for(var item in fragment){
-			// FIXME: need to check for undefined?
-			// case: its a tagName or nodeRef
-			if((fragment[item] == fragment.tagName)||(fragment[item] == fragment.nodeRef)){
-				// do nothing
-			}else{
-				var frag = fragment[item];
-				if(frag.tagName && dojo.widget.tags[frag.tagName.toLowerCase()]){
-					// TODO: it isn't a property or property set, it's a fragment, 
-					// so do something else
-					// FIXME: needs to be a better/stricter check
-					// TODO: handle xlink:href for external property sets
-				}else if(frag[0] && frag[0].value!="" && frag[0].value!=null){
-					try{
-						// FIXME: need to allow more than one provider
-						if(item.toLowerCase() == "dataprovider"){
-							var _this = this;
-							this.getDataProvider(_this, frag[0].value);
-							properties.dataProvider = this.dataProvider;
-						}
-						properties[item] = frag[0].value;
-						var nestedProperties = this.parseProperties(frag);
-						// FIXME: this kind of copying is expensive and inefficient!
-						for(var property in nestedProperties){
-							properties[property] = nestedProperties[property];
-						}
-					}catch(e){ dojo.debug(e); }
-				}
-				switch(item.toLowerCase()){
-				case "checked":
-				case "disabled":
-					if (typeof properties[item] != "boolean"){ 
-						properties[item] = true;
-					}
-					break;
-				}
-			} 
-		}
-		return properties; // Object
-	}
-
-	this.getDataProvider = function(/*Object*/objRef, /*String*/dataUrl){
-		// FIXME: this is currently sync.  To make this async, we made need to move 
-		//this step into the widget ctor, so that it is loaded when it is needed 
-		// to populate the widget
-		dojo.io.bind({
-			url: dataUrl,
-			load: function(type, evaldObj){
-				if(type=="load"){
-					objRef.dataProvider = evaldObj;
-				}
-			},
-			mimetype: "text/javascript",
-			sync: true
-		});
-	}
-
-	this.getPropertySetById = function(propertySetId){
-		// summary: returns the propertySet that matches the provided id
-		for(var x = 0; x < this.propertySetsList.length; x++){
-			if(propertySetId == this.propertySetsList[x]["id"][0].value){
-				return this.propertySetsList[x];
-			}
-		}
-		return ""; // String
-	}
-	
-	//FIXME: doesn't use the componentType param?
-	this.getPropertySetsByType = function(componentType){
-		// summary: returns the propertySet(s) that match(es) the
-	 	// provided componentClass
-
-		var propertySets = [];
-		for(var x=0; x < this.propertySetsList.length; x++){
-			var cpl = this.propertySetsList[x];
-			var cpcc = cpl.componentClass || cpl.componentType || null; //FIXME: is componentType supposed to be an indirect reference?
-			var propertySetId = this.propertySetsList[x]["id"][0].value;
-			if(cpcc && (propertySetId == cpcc[0].value)){
-				propertySets.push(cpl);
-			}
-		}
-		return propertySets; // Array
-	}
-
-	this.getPropertySets = function(/*Object*/fragment){
-		// summary: returns the propertySet for a given component fragment
-
-		var ppl = "dojo:propertyproviderlist";
-		var propertySets = [];
-		var tagname = fragment.tagName;
-		if(fragment[ppl]){ 
-			var propertyProviderIds = fragment[ppl].value.split(" ");
-			// FIXME: should the propertyProviderList attribute contain #
-			// 		  syntax for reference to ids or not?
-			// FIXME: need a better test to see if this is local or external
-			// FIXME: doesn't handle nested propertySets, or propertySets that
-			// 		  just contain information about css documents, etc.
-			for(var propertySetId in propertyProviderIds){
-				if((propertySetId.indexOf("..")==-1)&&(propertySetId.indexOf("://")==-1)){
-					// get a reference to a propertySet within the current parsed structure
-					var propertySet = this.getPropertySetById(propertySetId);
-					if(propertySet != ""){
-						propertySets.push(propertySet);
-					}
-				}else{
-					// FIXME: add code to parse and return a propertySet from
-					// another document
-					// alex: is this even necessaray? Do we care? If so, why?
-				}
-			}
-		}
-		// we put the typed ones first so that the parsed ones override when
-		// iteration happens.
-		return this.getPropertySetsByType(tagname).concat(propertySets); // Array
-	}
-
-	this.createComponentFromScript = function(/*Node*/nodeRef, /*String*/componentName, /*Object*/properties, /*String?*/ns){
-		// summary:
-		// nodeRef: the node to be replaced... in the future, we might want to add 
-		// an alternative way to specify an insertion point
-		// componentName: the expected dojo widget name, i.e. Button of ContextMenu
-		// properties: an object of name value pairs
-		// ns: the namespace of the widget.  Defaults to "dojo"
-
-		properties.fastMixIn = true;			
-		// FIXME: we pulled it apart and now we put it back together ... 
-		var ltn = (ns || "dojo") + ":" + componentName.toLowerCase();
-		if(dojo.widget.tags[ltn]){
-			return [dojo.widget.tags[ltn](properties, this, null, null, properties)]; // Array
-		}
-		return [dojo.widget.buildWidgetFromParseTree(ltn, properties, this, null, null, properties)]; // Array
-	}
-}
-
-dojo.widget._parser_collection = {"dojo": new dojo.widget.Parse() };
-
-dojo.widget.getParser = function(/*String?*/name){
-	if(!name){ name = "dojo"; }
-	if(!this._parser_collection[name]){
-		this._parser_collection[name] = new dojo.widget.Parse();
-	}
-	return this._parser_collection[name];
-}
-
-dojo.widget.createWidget = function(/*String*/name, /*String*/props, /*Node*/refNode, /*String*/position){
-	// summary: Creates widget
-	// name: The name of the widget to create with optional namespace prefix,
-	//	e.g."ns:widget", namespace defaults to "dojo".
-	// props: Key-Value pairs of properties of the widget
-	// refNode: If the position argument is specified, this node is used as
-	//	a reference for inserting this node into a DOM tree; else
-	//	the widget becomes the domNode
-	// position: The position to insert this widget's node relative to the
-	//	refNode argument
-
-	var isNode = false;
-	var isNameStr = (typeof name == "string");
-	if(isNameStr){
-		var pos = name.indexOf(":");
-		var ns = (pos > -1) ? name.substring(0,pos) : "dojo";
-		if(pos > -1){ name = name.substring(pos+1); }
-		var lowerCaseName = name.toLowerCase();
-		var namespacedName = ns + ":" + lowerCaseName;
-		isNode = (dojo.byId(name) && !dojo.widget.tags[namespacedName]); 
-	}
-
-	if((arguments.length == 1) && (isNode || !isNameStr)){
-		// we got a DOM node 
-		var xp = new dojo.xml.Parse(); 
-		// FIXME: we should try to find the parent! 
-		var tn = isNode ? dojo.byId(name) : name; 
-		return dojo.widget.getParser().createComponents(xp.parseElement(tn, null, true))[0]; 
-	}
-
-	function fromScript(placeKeeperNode, name, props, ns){
-		props[namespacedName] = { 
-			dojotype: [{value: lowerCaseName}],
-			nodeRef: placeKeeperNode,
-			fastMixIn: true
-		};
-		props.ns = ns;
-		return dojo.widget.getParser().createComponentFromScript(placeKeeperNode, name, props, ns);
-	}
-
-	props = props||{};
-	var notRef = false;
-	var tn = null;
-	var h = dojo.render.html.capable;
-	if(h){
-		tn = document.createElement("span");
-	}
-	if(!refNode){
-		notRef = true;
-		refNode = tn;
-		if(h){
-			dojo.body().appendChild(refNode);
-		}
-	}else if(position){
-		dojo.dom.insertAtPosition(tn, refNode, position);
-	}else{ // otherwise don't replace, but build in-place
-		tn = refNode;
-	}
-	var widgetArray = fromScript(tn, name.toLowerCase(), props, ns);
-	if(	(!widgetArray)||(!widgetArray[0])||
-		(typeof widgetArray[0].widgetType == "undefined") ){
-		throw new Error("createWidget: Creation of \"" + name + "\" widget failed.");
-	}
-	try{
-		if(notRef && widgetArray[0].domNode.parentNode){
-			widgetArray[0].domNode.parentNode.removeChild(widgetArray[0].domNode);
-		}
-	}catch(e){
-		/* squelch for Safari */
-		dojo.debug(e);
-	}
-	return widgetArray[0]; // Widget
-}
-
-dojo.kwCompoundRequire({
-	common: [["dojo.uri.Uri", false, false]]
-});
-dojo.provide("dojo.uri.*");
-
-dojo.provide("dojo.widget.DomWidget");
-
-dojo.require("dojo.event.*");
-
-dojo.require("dojo.dom");
-dojo.require("dojo.html.style");
-
-
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.extras");
-
-dojo.widget._cssFiles = {};
-dojo.widget._cssStrings = {};
-dojo.widget._templateCache = {};
-
-dojo.widget.defaultStrings = {
-	// summary: a mapping of strings that are used in template variable replacement
-	dojoRoot: dojo.hostenv.getBaseScriptUri(),
-	dojoWidgetModuleUri: dojo.uri.moduleUri("dojo.widget"),
-	baseScriptUri: dojo.hostenv.getBaseScriptUri()
-};
-
-dojo.widget.fillFromTemplateCache = function(obj, templatePath, templateString, avoidCache){
-	// summary:
-	//		static method to build from a template w/ or w/o a real widget in
-	//		place
-	// obj: DomWidget
-	//		an instance of dojo.widget.DomWidget to initialize the template for
-	// templatePath: String
-	//		the URL to get the template from. dojo.uri.Uri is often passed as well.
-	// templateString: String?
-	//		a string to use in lieu of fetching the template from a URL
-	// avoidCache: Boolean?
-	//		should the template system not use whatever is in the cache and
-	//		always use the passed templatePath or templateString?
-
-	// dojo.debug("avoidCache:", avoidCache);
-	var tpath = templatePath || obj.templatePath;
-
-	var tmplts = dojo.widget._templateCache;
-	if(!tpath && !obj["widgetType"]) { // don't have a real template here
-		do {
-			var dummyName = "__dummyTemplate__" + dojo.widget._templateCache.dummyCount++;
-		} while(tmplts[dummyName]);
-		obj.widgetType = dummyName;
-	}
-	var wt = tpath?tpath.toString():obj.widgetType;
-
-	var ts = tmplts[wt];
-	if(!ts){
-		tmplts[wt] = {"string": null, "node": null};
-		if(avoidCache){
-			ts = {};
-		}else{
-			ts = tmplts[wt];
-		}
-	}
-
-	if((!obj.templateString)&&(!avoidCache)){
-		obj.templateString = templateString || ts["string"];
-	}
-	if(obj.templateString){
-		obj.templateString = this._sanitizeTemplateString(obj.templateString);
-	}
-
-	if((!obj.templateNode)&&(!avoidCache)){
-		obj.templateNode = ts["node"];
-	}
-	if((!obj.templateNode)&&(!obj.templateString)&&(tpath)){
-		// fetch a text fragment and assign it to templateString
-		// NOTE: we rely on blocking IO here!
-		var tstring = this._sanitizeTemplateString(dojo.hostenv.getText(tpath));
-
-		obj.templateString = tstring;
-		if(!avoidCache){
-			tmplts[wt]["string"] = tstring;
-		}
-	}
-	if((!ts["string"])&&(!avoidCache)){
-		ts.string = obj.templateString;
-	}
-}
-
-dojo.widget._sanitizeTemplateString = function(/*String*/tString){
-	//summary: Strips <?xml ...?> declarations so that external SVG and XML
-	//documents can be added to a document without worry. Also, if the string
-	//is an HTML document, only the part inside the body tag is returned.
-	if(tString){
-		tString = tString.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, "");
-		var matches = tString.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-		if(matches){
-			tString = matches[1];
-		}
-	}else{
-		tString = "";
-	}
-	return tString; //String
-}
-
-dojo.widget._templateCache.dummyCount = 0;
-
-// Array: list of properties to search for node-to-property mappings
-dojo.widget.attachProperties = ["dojoAttachPoint", "id"];
-
-// String: name of the property to use for mapping DOM events to widget functions
-dojo.widget.eventAttachProperty = "dojoAttachEvent";
-
-// String: property name of code to evaluate when the widget is constructed
-dojo.widget.onBuildProperty = "dojoOnBuild";
-
-// Array:  possible accessibility values to set on widget elements - role or state
-dojo.widget.waiNames  = ["waiRole", "waiState"];
-
-dojo.widget.wai = {
-	// summary: Contains functions to set accessibility roles and states
-	//		onto widget elements
-	waiRole: { 	
-				// name: String:
-				//		information for mapping accessibility role
-				name: "waiRole", 
-				// namespace: String:
-				//		URI of the namespace for the set of roles
-				"namespace": "http://www.w3.org/TR/xhtml2", 
-				// alias: String:
-				//		The alias to assign the namespace
-				alias: "x2",
-				// prefix: String:
-				//		The prefix to assign to the role value
-				prefix: "wairole:"
-	},
-	waiState: { 
-				// name: String:
-				//		information for mapping accessibility state
-				name: "waiState", 
-				// namespace: String:
-				//		URI of the namespace for the set of states
-				"namespace": "http://www.w3.org/2005/07/aaa", 
-				// alias: String:
-				//		The alias to assign the namespace
-				alias: "aaa",
-				// prefix: String:
-				//		empty string - state value does not require prefix
-				prefix: ""
-	},
-	setAttr: function(/*DomNode*/node, /*String*/ ns, /*String*/ attr, /*String|Boolean*/value){
-		// summary: Use appropriate API to set the role or state attribute onto the element.
-		// description: In IE use the generic setAttribute() api.  Append a namespace
-		//   alias to the attribute name and appropriate prefix to the value. 
-		//   Otherwise, use the setAttribueNS api to set the namespaced attribute. Also
-		//   add the appropriate prefix to the attribute value.
-		if(dojo.render.html.ie){
-			node.setAttribute(this[ns].alias+":"+ attr, this[ns].prefix+value);
-		}else{
-			node.setAttributeNS(this[ns]["namespace"], attr, this[ns].prefix+value);
-		}
-	},
-
-	getAttr: function(/*DomNode*/ node, /*String*/ ns, /*String|Boolena*/ attr){
-		// Summary:  Use the appropriate API to retrieve the role or state value
-		// Description: In IE use the generic getAttribute() api.  An alias value 
-		// 	was added to the attribute name to simulate a namespace when the attribute
-		//  was set.  Otherwise use the getAttributeNS() api to retrieve the state value
-		if(dojo.render.html.ie){
-			return node.getAttribute(this[ns].alias+":"+attr);
-		}else{
-			return node.getAttributeNS(this[ns]["namespace"], attr);
-		}
-	},
-	removeAttr: function(/*DomNode*/ node, /*String*/ ns, /*String|Boolena*/ attr){
-		// summary:  Use the appropriate API to remove the role or state value
-		// description: In IE use the generic removeAttribute() api.  An alias value 
-		// 	was added to the attribute name to simulate a namespace when the attribute
-		//  was set.  Otherwise use the removeAttributeNS() api to remove the state value
-		var success = true; //only IE returns a value
-		if(dojo.render.html.ie){
-			 success = node.removeAttribute(this[ns].alias+":"+attr);
-		}else{
-			node.removeAttributeNS(this[ns]["namespace"], attr);
-		}
-		return success;
-	}
-};
-
-dojo.widget.attachTemplateNodes = function(rootNode, /*Widget*/ targetObj, events ){
-	// summary:
-	//		map widget properties and functions to the handlers specified in
-	//		the dom node and it's descendants. This function iterates over all
-	//		nodes and looks for these properties:
-	//			* dojoAttachPoint
-	//			* dojoAttachEvent	
-	//			* waiRole
-	//			* waiState
-	//			* any "dojoOn*" proprties passed in the events array
-	// rootNode: DomNode
-	//		the node to search for properties. All children will be searched.
-	// events: Array
-	//		a list of properties generated from getDojoEventsFromStr.
-
-	// FIXME: this method is still taking WAAAY too long. We need ways of optimizing:
-	//	a.) what we are looking for on each node
-	//	b.) the nodes that are subject to interrogation (use xpath instead?)
-	//	c.) how expensive event assignment is (less eval(), more connect())
-	// var start = new Date();
-	var elementNodeType = dojo.dom.ELEMENT_NODE;
-
-	function trim(str){
-		return str.replace(/^\s+|\s+$/g, "");
-	}
-
-	if(!rootNode){ 
-		rootNode = targetObj.domNode;
-	}
-
-	if(rootNode.nodeType != elementNodeType){
-		return;
-	}
-	// alert(events.length);
-
-	var nodes = rootNode.all || rootNode.getElementsByTagName("*");
-	var _this = targetObj;
-	for(var x=-1; x<nodes.length; x++){
-		var baseNode = (x == -1) ? rootNode : nodes[x];
-		// FIXME: is this going to have capitalization problems?  Could use getAttribute(name, 0); to get attributes case-insensitve
-		var attachPoint = [];
-		if(!targetObj.widgetsInTemplate || !baseNode.getAttribute('dojoType')){
-			for(var y=0; y<this.attachProperties.length; y++){
-				var tmpAttachPoint = baseNode.getAttribute(this.attachProperties[y]);
-				if(tmpAttachPoint){
-					attachPoint = tmpAttachPoint.split(";");
-					for(var z=0; z<attachPoint.length; z++){
-						if(dojo.lang.isArray(targetObj[attachPoint[z]])){
-							targetObj[attachPoint[z]].push(baseNode);
-						}else{
-							targetObj[attachPoint[z]]=baseNode;
-						}
-					}
-					break;
-				}
-			}
-
-			var attachEvent = baseNode.getAttribute(this.eventAttachProperty);
-			if(attachEvent){
-				// NOTE: we want to support attributes that have the form
-				// "domEvent: nativeEvent; ..."
-				var evts = attachEvent.split(";");
-				for(var y=0; y<evts.length; y++){
-					if((!evts[y])||(!evts[y].length)){ continue; }
-					var thisFunc = null;
-					var tevt = trim(evts[y]);
-					if(evts[y].indexOf(":") >= 0){
-						// oh, if only JS had tuple assignment
-						var funcNameArr = tevt.split(":");
-						tevt = trim(funcNameArr[0]);
-						thisFunc = trim(funcNameArr[1]);
-					}
-					if(!thisFunc){
-						thisFunc = tevt;
-					}
-	
-					var tf = function(){ 
-						var ntf = new String(thisFunc);
-						return function(evt){
-							if(_this[ntf]){
-								_this[ntf](dojo.event.browser.fixEvent(evt, this));
-							}
-						};
-					}();
-					dojo.event.browser.addListener(baseNode, tevt, tf, false, true);
-					// dojo.event.browser.addListener(baseNode, tevt, dojo.lang.hitch(_this, thisFunc));
-				}
-			}
-	
-			for(var y=0; y<events.length; y++){
-				//alert(events[x]);
-				var evtVal = baseNode.getAttribute(events[y]);
-				if((evtVal)&&(evtVal.length)){
-					var thisFunc = null;
-					var domEvt = events[y].substr(4); // clober the "dojo" prefix
-					thisFunc = trim(evtVal);
-					var funcs = [thisFunc];
-					if(thisFunc.indexOf(";")>=0){
-						funcs = dojo.lang.map(thisFunc.split(";"), trim);
-					}
-					for(var z=0; z<funcs.length; z++){
-						if(!funcs[z].length){ continue; }
-						var tf = function(){ 
-							var ntf = new String(funcs[z]);
-							return function(evt){
-								if(_this[ntf]){
-									_this[ntf](dojo.event.browser.fixEvent(evt, this));
-								}
-							}
-						}();
-						dojo.event.browser.addListener(baseNode, domEvt, tf, false, true);
-						// dojo.event.browser.addListener(baseNode, domEvt, dojo.lang.hitch(_this, funcs[z]));
-					}
-				}
-			}
-		}
-		// continue;
-
-		// FIXME: we need to put this into some kind of lookup structure
-		// instead of direct assignment
-		var tmpltPoint = baseNode.getAttribute(this.templateProperty);
-		if(tmpltPoint){
-			targetObj[tmpltPoint]=baseNode;
-		}
-
-		dojo.lang.forEach(dojo.widget.waiNames, function(name){
-			var wai = dojo.widget.wai[name];
-			var val = baseNode.getAttribute(wai.name);
-			if(val){
-				if(val.indexOf('-') == -1){ 
-					dojo.widget.wai.setAttr(baseNode, wai.name, "role", val);
-				}else{
-					// this is a state-value pair
-					var statePair = val.split('-');
-					dojo.widget.wai.setAttr(baseNode, wai.name, statePair[0], statePair[1]);
-				}
-			}
-		}, this);
-
-		var onBuild = baseNode.getAttribute(this.onBuildProperty);
-		if(onBuild){
-			eval("var node = baseNode; var widget = targetObj; "+onBuild);
-		}
-	}
-
-}
-
-dojo.widget.getDojoEventsFromStr = function(str){
-	// summary:
-	//		generates a list of properties with names that match the form
-	//		dojoOn*
-	// str: String
-	//		the template string to search
-	
-	// var lstr = str.toLowerCase();
-	var re = /(dojoOn([a-z]+)(\s?))=/gi;
-	var evts = str ? str.match(re)||[] : [];
-	var ret = [];
-	var lem = {};
-	for(var x=0; x<evts.length; x++){
-		if(evts[x].length < 1){ continue; }
-		var cm = evts[x].replace(/\s/, "");
-		cm = (cm.slice(0, cm.length-1));
-		if(!lem[cm]){
-			lem[cm] = true;
-			ret.push(cm);
-		}
-	}
-	return ret; // Array
-}
-
-dojo.declare("dojo.widget.DomWidget", 
-	dojo.widget.Widget,
-	function(){
-		// summary:
-		//		dojo.widget.DomWidget is the superclass that provides behavior for all
-		//		DOM-based renderers, including HtmlWidget and SvgWidget. DomWidget
-		//		implements the templating system that most widget authors use to define
-		//		the UI for their widgets.
-		if((arguments.length>0)&&(typeof arguments[0] == "object")){
-			this.create(arguments[0]);
-		}
-	},
-	{							 
-		// templateNode: DomNode
-		//		a node that represents the widget template. Pre-empts both templateString and templatePath.
-		templateNode: null,
-
-		// templateString String:
-		//		a string that represents the widget template. Pre-empts the
-		//		templatePath. In builds that have their strings "interned", the
-		//		templatePath is converted to an inline templateString, thereby
-		//		preventing a synchronous network call.
-		templateString: null,
-
-		// templateCssString String:
-		//		a string that represents the CSS for the widgettemplate.
-		//		Pre-empts the templateCssPath. In builds that have their
-		//		strings "interned", the templateCssPath is converted to an
-		//		inline templateCssString, thereby preventing a synchronous
-		//		network call.
-		templateCssString: null,
-
-		// preventClobber Boolean:
-		//		should the widget not replace the node from which it was
-		//		constructed? Widgets that apply behaviors to pre-existing parts
-		//		of a page can be implemented easily by setting this to "true".
-		//		In these cases, the domNode property will point to the node
-		//		which the widget was created from.
-		preventClobber: false,
-
-		// domNode DomNode:
-		//		this is our visible representation of the widget! Other DOM
-		//		Nodes may by assigned to other properties, usually through the
-		//		template system's dojoAttachPonit syntax, but the domNode
-		//		property is the canonical "top level" node in widget UI.
-		domNode: null, 
-
-		// containerNode DomNode:
-		//		holds child elements. "containerNode" is generally set via a
-		//		dojoAttachPoint assignment and it designates where widgets that
-		//		are defined as "children" of the parent will be placed
-		//		visually.
-		containerNode: null,
-
-		// widgetsInTemplate Boolean:
-		//		should we parse the template to find widgets that might be
-		//		declared in markup inside it? false by default.
-		widgetsInTemplate: false,
-
-		addChild: function(/*Widget*/	widget, overrideContainerNode, pos, ref, insertIndex){
-			// summary:
-			//		Process the given child widget, inserting it's dom node as
-			//		a child of our dom node
-			// overrideContainerNode: DomNode?
-			//		a non-default container node for the widget
-			// pos: String?
-			//		can be one of "before", "after", "first", or "last". This
-			//		has the same meaning as in dojo.dom.insertAtPosition()
-			// ref: DomNode?
-			//		a node to place the widget relative to
-			// insertIndex: int?
-			//		DOM index, same meaning as in dojo.dom.insertAtIndex()
-			// returns: the widget that was inserted
-
-			// FIXME: should we support addition at an index in the children arr and
-			// order the display accordingly? Right now we always append.
-			if(!this.isContainer){ // we aren't allowed to contain other widgets, it seems
-				dojo.debug("dojo.widget.DomWidget.addChild() attempted on non-container widget");
-				return null;
-			}else{
-				if(insertIndex == undefined){
-					insertIndex = this.children.length;
-				}
-				this.addWidgetAsDirectChild(widget, overrideContainerNode, pos, ref, insertIndex);
-				this.registerChild(widget, insertIndex);
-			}
-			return widget; // Widget
-		},
-		
-		addWidgetAsDirectChild: function(/*Widget*/	widget, overrideContainerNode, pos, ref, insertIndex){
-			// summary:
-			//		Process the given child widget, inserting it's dom node as
-			//		a child of our dom node
-			// overrideContainerNode: DomNode
-			//		a non-default container node for the widget
-			// pos: String?
-			//		can be one of "before", "after", "first", or "last". This
-			//		has the same meaning as in dojo.dom.insertAtPosition()
-			// ref: DomNode?
-			//		a node to place the widget relative to
-			// insertIndex: int?
-			//		DOM index, same meaning as in dojo.dom.insertAtIndex()
-			if((!this.containerNode)&&(!overrideContainerNode)){
-				this.containerNode = this.domNode;
-			}
-			var cn = (overrideContainerNode) ? overrideContainerNode : this.containerNode;
-			if(!pos){ pos = "after"; }
-			if(!ref){ 
-				if(!cn){ cn = dojo.body(); }
-				ref = cn.lastChild; 
-			}
-			if(!insertIndex) { insertIndex = 0; }
-			widget.domNode.setAttribute("dojoinsertionindex", insertIndex);
-
-			// insert the child widget domNode directly underneath my domNode, in the
-			// specified position (by default, append to end)
-			if(!ref){
-				cn.appendChild(widget.domNode);
-			}else{
-				// FIXME: was this meant to be the (ugly hack) way to support insert @ index?
-				//dojo.dom[pos](widget.domNode, ref, insertIndex);
-
-				// CAL: this appears to be the intended way to insert a node at a given position...
-				if (pos == 'insertAtIndex'){
-					// dojo.debug("idx:", insertIndex, "isLast:", ref === cn.lastChild);
-					dojo.dom.insertAtIndex(widget.domNode, ref.parentNode, insertIndex);
-				}else{
-					// dojo.debug("pos:", pos, "isLast:", ref === cn.lastChild);
-					if((pos == "after")&&(ref === cn.lastChild)){
-						cn.appendChild(widget.domNode);
-					}else{
-						dojo.dom.insertAtPosition(widget.domNode, cn, pos);
-					}
-				}
-			}
-		},
-
-		registerChild: function(widget, insertionIndex){
-			// summary: record that given widget descends from me
-			// widget: Widget
-			//		the widget that is now a child
-			// insertionIndex: int
-			//		where in the children[] array to place it
-
-			// we need to insert the child at the right point in the parent's 
-			// 'children' array, based on the insertionIndex
-
-			widget.dojoInsertionIndex = insertionIndex;
-
-			var idx = -1;
-			for(var i=0; i<this.children.length; i++){
-
-				//This appears to fix an out of order issue in the case of mixed
-				//markup and programmatically added children.  Previously, if a child
-				//existed from markup, and another child was addChild()d without specifying
-				//any additional parameters, it would end up first in the list, when in fact
-				//it should be after.  I can't see cases where this would break things, but
-				//I could see no other obvious solution. -dustin
-
-				if (this.children[i].dojoInsertionIndex <= insertionIndex){
-					idx = i;
-				}
-			}
-
-			this.children.splice(idx+1, 0, widget);
-
-			widget.parent = this;
-			widget.addedTo(this, idx+1);
-			
-			// If this widget was created programatically, then it was erroneously added
-			// to dojo.widget.manager.topWidgets.  Fix that here.
-			delete dojo.widget.manager.topWidgets[widget.widgetId];
-		},
-
-		removeChild: function(/*Widget*/ widget){
-			// summary: detach child domNode from parent domNode
-			dojo.dom.removeNode(widget.domNode);
-
-			// remove child widget from parent widget 
-			return dojo.widget.DomWidget.superclass.removeChild.call(this, widget); // Widget
-		},
-
-		getFragNodeRef: function(frag){
-			// summary:
-			//		returns the source node, if any, that the widget was
-			//		declared from
-			// frag: Object
-			//		an opaque data structure generated by the first-pass parser
-			if(!frag){return null;} // null
-			if(!frag[this.getNamespacedType()]){
-				dojo.raise("Error: no frag for widget type " + this.getNamespacedType() 
-					+ ", id " + this.widgetId
-					+ " (maybe a widget has set it's type incorrectly)");
-			}
-			return frag[this.getNamespacedType()]["nodeRef"]; // DomNode
-		},
-		
-		postInitialize: function(/*Object*/ args, /*Object*/ frag, /*Widget*/ parentComp){
-			// summary:
-			//		Replace the source domNode with the generated dom
-			//		structure, and register the widget with its parent.
-			//		This is an implementation of the stub function defined in
-			//		dojo.widget.Widget.
-			
-			//dojo.profile.start(this.widgetType + " postInitialize");
-			
-			var sourceNodeRef = this.getFragNodeRef(frag);
-			// Stick my generated dom into the output tree
-			//alert(this.widgetId + ": replacing " + sourceNodeRef + " with " + this.domNode.innerHTML);
-			if (parentComp && (parentComp.snarfChildDomOutput || !sourceNodeRef)){
-				// Add my generated dom as a direct child of my parent widget
-				// This is important for generated widgets, and also cases where I am generating an
-				// <li> node that can't be inserted back into the original DOM tree
-				parentComp.addWidgetAsDirectChild(this, "", "insertAtIndex", "",  args["dojoinsertionindex"], sourceNodeRef);
-			} else if (sourceNodeRef){
-				// Do in-place replacement of the my source node with my generated dom
-				if(this.domNode && (this.domNode !== sourceNodeRef)){
-					this._sourceNodeRef = dojo.dom.replaceNode(sourceNodeRef, this.domNode);
-				}
-			}
-
-			// Register myself with my parent, or with the widget manager if
-			// I have no parent
-			// TODO: the code below erroneously adds all programatically generated widgets
-			// to topWidgets (since we don't know who the parent is until after creation finishes)
-			if ( parentComp ) {
-				parentComp.registerChild(this, args.dojoinsertionindex);
-			} else {
-				dojo.widget.manager.topWidgets[this.widgetId]=this;
-			}
-
-			if(this.widgetsInTemplate){
-				var parser = new dojo.xml.Parse();
-
-				var subContainerNode;
-				//TODO: use xpath here?
-				var subnodes = this.domNode.getElementsByTagName("*");
-				for(var i=0;i<subnodes.length;i++){
-					if(subnodes[i].getAttribute('dojoAttachPoint') == 'subContainerWidget'){
-						subContainerNode = subnodes[i];
-//						break;
-					}
-					if(subnodes[i].getAttribute('dojoType')){
-						subnodes[i].setAttribute('isSubWidget', true);
-					}
-				}
-				if (this.isContainer && !this.containerNode){
-					//no containerNode is available, which means a widget is used as a container. find it here and move
-					//all dom nodes defined in the main html page as children of this.domNode into the actual container
-					//widget's node (at this point, the subwidgets defined in the template file is not parsed yet)
-					if(subContainerNode){
-						var src = this.getFragNodeRef(frag);
-						if (src){
-							dojo.dom.moveChildren(src, subContainerNode);
-							//do not need to follow children nodes in the main html page, as they
-							//will be dealt with in the subContainerWidget
-							frag['dojoDontFollow'] = true;
-						}
-					}else{
-						dojo.debug("No subContainerWidget node can be found in template file for widget "+this);
-					}
-				}
-
-				var templatefrag = parser.parseElement(this.domNode, null, true);
-				// createSubComponents not createComponents because frag has already been created
-				dojo.widget.getParser().createSubComponents(templatefrag, this);
-	
-				//find all the sub widgets defined in the template file of this widget
-				var subwidgets = [];
-				var stack = [this];
-				var w;
-				while((w = stack.pop())){
-					for(var i = 0; i < w.children.length; i++){
-						var cwidget = w.children[i];
-						if(cwidget._processedSubWidgets || !cwidget.extraArgs['issubwidget']){ continue; }
-						subwidgets.push(cwidget);
-						if(cwidget.isContainer){
-							stack.push(cwidget);
-						}
-					}
-				}
-	
-				//connect event to this widget/attach dom node
-				for(var i = 0; i < subwidgets.length; i++){
-					var widget = subwidgets[i];
-					if(widget._processedSubWidgets){
-						dojo.debug("This should not happen: widget._processedSubWidgets is already true!");
-						return;
-					}
-					widget._processedSubWidgets = true;
-					if(widget.extraArgs['dojoattachevent']){
-						var evts = widget.extraArgs['dojoattachevent'].split(";");
-						for(var j=0; j<evts.length; j++){
-							var thisFunc = null;
-							var tevt = dojo.string.trim(evts[j]);
-							if(tevt.indexOf(":") >= 0){
-								// oh, if only JS had tuple assignment
-								var funcNameArr = tevt.split(":");
-								tevt = dojo.string.trim(funcNameArr[0]);
-								thisFunc = dojo.string.trim(funcNameArr[1]);
-							}
-							if(!thisFunc){
-								thisFunc = tevt;
-							}
-							if(dojo.lang.isFunction(widget[tevt])){
-								dojo.event.kwConnect({
-									srcObj: widget, 
-									srcFunc: tevt, 
-									targetObj: this, 
-									targetFunc: thisFunc
-								});
-							}else{
-								alert(tevt+" is not a function in widget "+widget);
-							}
-						}
-					}
-	
-					if(widget.extraArgs['dojoattachpoint']){
-						//don't attach widget.domNode here, as we do not know which
-						//dom node we should connect to (in checkbox widget case, 
-						//it is inputNode). So we make the widget itself available
-						this[widget.extraArgs['dojoattachpoint']] = widget;
-					}
-				}
-			}
-
-			//dojo.profile.end(this.widgetType + " postInitialize");
-
-			// Expand my children widgets
-			/* dojoDontFollow is important for a very special case
-			 * basically if you have a widget that you instantiate from script
-			 * and that widget is a container, and it contains a reference to a parent
-			 * instance, the parser will start recursively parsing until the browser
-			 * complains.  So the solution is to set an initialization property of 
-			 * dojoDontFollow: true and then it won't recurse where it shouldn't
-			 */
-			if(this.isContainer && !frag["dojoDontFollow"]){
-				//alert("recurse from " + this.widgetId);
-				// build any sub-components with us as the parent
-				dojo.widget.getParser().createSubComponents(frag, this);
-			}
-		},
-
-		// method over-ride
-		buildRendering: function(/*Object*/ args, /*Object*/ frag){
-			// summary:
-			//		Construct the UI for this widget, generally from a
-			//		template. This can be over-ridden for custom UI creation to
-			//		to side-step the template system.  This is an
-			//		implementation of the stub function defined in
-			//		dojo.widget.Widget.
-
-			// DOM widgets construct themselves from a template
-			var ts = dojo.widget._templateCache[this.widgetType];
-			
-			// Handle style for this widget here, as even if templatePath
-			// is not set, style specified by templateCssString or templateCssPath
-			// should be applied. templateCssString has higher priority
-			// than templateCssPath
-			if(args["templatecsspath"]){
-				args["templateCssPath"] = args["templatecsspath"];
-			}
-			var cpath = args["templateCssPath"] || this.templateCssPath;
-			if(cpath && !dojo.widget._cssFiles[cpath.toString()]){
-				if((!this.templateCssString)&&(cpath)){
-					this.templateCssString = dojo.hostenv.getText(cpath);
-					this.templateCssPath = null;
-				}
-				dojo.widget._cssFiles[cpath.toString()] = true;
-			}
-		
-			if((this["templateCssString"])&&(!dojo.widget._cssStrings[this.templateCssString])){
-				dojo.html.insertCssText(this.templateCssString, null, cpath);
-				dojo.widget._cssStrings[this.templateCssString] = true;
-			}
-			if(	
-				(!this.preventClobber)&&(
-					(this.templatePath)||
-					(this.templateNode)||
-					(
-						(this["templateString"])&&(this.templateString.length) 
-					)||
-					(
-						(typeof ts != "undefined")&&( (ts["string"])||(ts["node"]) )
-					)
-				)
-			){
-				// if it looks like we can build the thing from a template, do it!
-				this.buildFromTemplate(args, frag);
-			}else{
-				// otherwise, assign the DOM node that was the source of the widget
-				// parsing to be the root node
-				this.domNode = this.getFragNodeRef(frag);
-			}
-			this.fillInTemplate(args, frag); 	// this is where individual widgets
-												// will handle population of data
-												// from properties, remote data
-												// sets, etc.
-		},
-
-		buildFromTemplate: function(/*Object*/ args, /*Object*/ frag){
-			// summary:
-			//		Called by buildRendering, creates the actual UI in a DomWidget.
-
-			// var start = new Date();
-			// copy template properties if they're already set in the templates object
-			// dojo.debug("buildFromTemplate:", this);
-			var avoidCache = false;
-			if(args["templatepath"]){
-//				avoidCache = true;
-				args["templatePath"] = args["templatepath"];
-			}
-			dojo.widget.fillFromTemplateCache(	this, 
-												args["templatePath"], 
-												null,
-												avoidCache);
-			var ts = dojo.widget._templateCache[this.templatePath?this.templatePath.toString():this.widgetType];
-			if((ts)&&(!avoidCache)){
-				if(!this.templateString.length){
-					this.templateString = ts["string"];
-				}
-				if(!this.templateNode){
-					this.templateNode = ts["node"];
-				}
-			}
-			var matches = false;
-			var node = null;
-			// var tstr = new String(this.templateString); 
-			var tstr = this.templateString; 
-			// attempt to clone a template node, if there is one
-			if((!this.templateNode)&&(this.templateString)){
-				matches = this.templateString.match(/\$\{([^\}]+)\}/g);
-				if(matches) {
-					// if we do property replacement, don't create a templateNode
-					// to clone from.
-					var hash = this.strings || {};
-					// FIXME: should this hash of default replacements be cached in
-					// templateString?
-					for(var key in dojo.widget.defaultStrings) {
-						if(dojo.lang.isUndefined(hash[key])) {
-							hash[key] = dojo.widget.defaultStrings[key];
-						}
-					}
-					// FIXME: this is a lot of string munging. Can we make it faster?
-					for(var i = 0; i < matches.length; i++) {
-						var key = matches[i];
-						key = key.substring(2, key.length-1);
-						var kval = (key.substring(0, 5) == "this.") ? dojo.lang.getObjPathValue(key.substring(5), this) : hash[key];
-						var value;
-						if((kval)||(dojo.lang.isString(kval))){
-							value = new String((dojo.lang.isFunction(kval)) ? kval.call(this, key, this.templateString) : kval);
-							// Safer substitution, see heading "Attribute values" in  
-							// http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
-							while (value.indexOf("\"") > -1) {
-								value=value.replace("\"","&quot;");
-							}
-							tstr = tstr.replace(matches[i], value);
-						}
-					}
-				}else{
-					// otherwise, we are required to instantiate a copy of the template
-					// string if one is provided.
-					
-					// FIXME: need to be able to distinguish here what should be done
-					// or provide a generic interface across all DOM implementations
-					// FIMXE: this breaks if the template has whitespace as its first 
-					// characters
-					// node = this.createNodesFromText(this.templateString, true);
-					// this.templateNode = node[0].cloneNode(true); // we're optimistic here
-					this.templateNode = this.createNodesFromText(this.templateString, true)[0];
-					if(!avoidCache){
-						ts.node = this.templateNode;
-					}
-				}
-			}
-			if((!this.templateNode)&&(!matches)){ 
-				dojo.debug("DomWidget.buildFromTemplate: could not create template");
-				return false;
-			}else if(!matches){
-				node = this.templateNode.cloneNode(true);
-				if(!node){ return false; }
-			}else{
-				node = this.createNodesFromText(tstr, true)[0];
-			}
-
-			// recurse through the node, looking for, and attaching to, our
-			// attachment points which should be defined on the template node.
-
-			this.domNode = node;
-			// dojo.profile.start("attachTemplateNodes");
-			this.attachTemplateNodes();
-			// dojo.profile.end("attachTemplateNodes");
-		
-			// relocate source contents to templated container node
-			// this.containerNode must be able to receive children, or exceptions will be thrown
-			if (this.isContainer && this.containerNode){
-				var src = this.getFragNodeRef(frag);
-				if (src){
-					dojo.dom.moveChildren(src, this.containerNode);
-				}
-			}
-		},
-
-		attachTemplateNodes: function(baseNode, targetObj){
-			// summary: 
-			//		hooks up event handlers and property/node linkages. Calls
-			//		dojo.widget.attachTemplateNodes to do all the hard work.
-			// baseNode: DomNode
-			//		defaults to "this.domNode"
-			// targetObj: Widget
-			//		defaults to "this"
-			if(!baseNode){ baseNode = this.domNode; }
-			if(!targetObj){ targetObj = this; }
-			return dojo.widget.attachTemplateNodes(baseNode, targetObj, 
-						dojo.widget.getDojoEventsFromStr(this.templateString));
-		},
-
-		fillInTemplate: function(){
-			// summary:
-			//		stub function! sub-classes may use as a default UI
-			//		initializer function. The UI rendering will be available by
-			//		the time this is called from buildRendering. If
-			//		buildRendering is over-ridden, this function may not be
-			//		fired!
-
-			// dojo.unimplemented("dojo.widget.DomWidget.fillInTemplate");
-		},
-		
-		// method over-ride
-		destroyRendering: function(){
-			// summary: UI destructor.  Destroy the dom nodes associated w/this widget.
-			try{
-				dojo.dom.destroyNode(this.domNode);
-				delete this.domNode;
-			}catch(e){ /* squelch! */ }
-			if(this._sourceNodeRef){
-				try{
-					dojo.dom.destroyNode(this._sourceNodeRef);
-				}catch(e){ /* squelch! */ }
-			}
-		},
-
-		createNodesFromText: function(){
-			// summary
-			//	Attempts to create a set of nodes based on the structure of the passed text.
-			//	Implemented in HtmlWidget and SvgWidget.
-			dojo.unimplemented("dojo.widget.DomWidget.createNodesFromText");
-		}
-	}
-);
-
-dojo.provide("dojo.html.layout");
-
-dojo.require("dojo.html.common");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.display");
-
-dojo.html.sumAncestorProperties = function(/* HTMLElement */node, /* string */prop){
-	//	summary
-	//	Returns the sum of the passed property on all ancestors of node.
-	node = dojo.byId(node);
-	if(!node){ return 0; } // FIXME: throw an error?
-	
-	var retVal = 0;
-	while(node){
-		if(dojo.html.getComputedStyle(node, 'position') == 'fixed'){
-			return 0;
-		}
-		var val = node[prop];
-		if(val){
-			retVal += val - 0;
-			if(node==dojo.body()){ break; }// opera and khtml #body & #html has the same values, we only need one value
-		}
-		node = node.parentNode;
-	}
-	return retVal;	//	integer
-}
-
-dojo.html.setStyleAttributes = function(/* HTMLElement */node, /* string */attributes) { 
-	//	summary
-	//	allows a dev to pass a string similar to what you'd pass in style="", and apply it to a node.
-	node = dojo.byId(node);
-	var splittedAttribs=attributes.replace(/(;)?\s*$/, "").split(";"); 
-	for(var i=0; i<splittedAttribs.length; i++){ 
-		var nameValue=splittedAttribs[i].split(":"); 
-		var name=nameValue[0].replace(/\s*$/, "").replace(/^\s*/, "").toLowerCase();
-		var value=nameValue[1].replace(/\s*$/, "").replace(/^\s*/, "");
-		switch(name){
-			case "opacity":
-				dojo.html.setOpacity(node, value); 
-				break; 
-			case "content-height":
-				dojo.html.setContentBox(node, {height: value}); 
-				break; 
-			case "content-width":
-				dojo.html.setContentBox(node, {width: value}); 
-				break; 
-			case "outer-height":
-				dojo.html.setMarginBox(node, {height: value}); 
-				break; 
-			case "outer-width":
-				dojo.html.setMarginBox(node, {width: value}); 
-				break; 
-			default:
-				node.style[dojo.html.toCamelCase(name)]=value; 
-		}
-	} 
-}
-
-dojo.html.boxSizing = {
-	MARGIN_BOX: "margin-box",
-	BORDER_BOX: "border-box",
-	PADDING_BOX: "padding-box",
-	CONTENT_BOX: "content-box"
-};
-
-dojo.html.getAbsolutePosition = dojo.html.abs = function(/* HTMLElement */node, /* boolean? */includeScroll, /* string? */boxType){
-	//	summary
-	//	Gets the absolute position of the passed element based on the document itself.
-	node = dojo.byId(node, node.ownerDocument);
-	var ret = {
-		x: 0,
-		y: 0
-	};
-
-	var bs = dojo.html.boxSizing;
-	if(!boxType) { boxType = bs.CONTENT_BOX; }
-	var nativeBoxType = 2; //BORDER box
-	var targetBoxType;
-	switch(boxType){
-		case bs.MARGIN_BOX:
-			targetBoxType = 3;
-			break;
-		case bs.BORDER_BOX:
-			targetBoxType = 2;
-			break;
-		case bs.PADDING_BOX:
-		default:
-			targetBoxType = 1;
-			break;
-		case bs.CONTENT_BOX:
-			targetBoxType = 0;
-			break;
-	}
-
-	var h = dojo.render.html;
-	var db = document["body"]||document["documentElement"];
-
-	if(h.ie){
-		with(node.getBoundingClientRect()){
-			ret.x = left-2;
-			ret.y = top-2;
-		}
-	}else if(document.getBoxObjectFor){
-		// mozilla
-		nativeBoxType = 1; //getBoxObjectFor return padding box coordinate
-		try{
-			var bo = document.getBoxObjectFor(node);
-			ret.x = bo.x - dojo.html.sumAncestorProperties(node, "scrollLeft");
-			ret.y = bo.y - dojo.html.sumAncestorProperties(node, "scrollTop");
-		}catch(e){
-			// squelch
-		}
-	}else{
-		if(node["offsetParent"]){
-			var endNode;
-			// in Safari, if the node is an absolutely positioned child of
-			// the body and the body has a margin the offset of the child
-			// and the body contain the body's margins, so we need to end
-			// at the body
-			if(	(h.safari)&&
-				(node.style.getPropertyValue("position") == "absolute")&&
-				(node.parentNode == db)){
-				endNode = db;
-			}else{
-				endNode = db.parentNode;
-			}
-
-			//TODO: set correct nativeBoxType for safari/konqueror
-
-			if(node.parentNode != db){
-				var nd = node;
-				if(dojo.render.html.opera){ nd = db; }
-				ret.x -= dojo.html.sumAncestorProperties(nd, "scrollLeft");
-				ret.y -= dojo.html.sumAncestorProperties(nd, "scrollTop");
-			}
-			var curnode = node;
-			do{
-				var n = curnode["offsetLeft"];
-				//FIXME: ugly hack to workaround the submenu in 
-				//popupmenu2 does not shown up correctly in opera. 
-				//Someone have a better workaround?
-				if(!h.opera || n>0){
-					ret.x += isNaN(n) ? 0 : n;
-				}
-				var m = curnode["offsetTop"];
-				ret.y += isNaN(m) ? 0 : m;
-				curnode = curnode.offsetParent;
-			}while((curnode != endNode)&&(curnode != null));
-		}else if(node["x"]&&node["y"]){
-			ret.x += isNaN(node.x) ? 0 : node.x;
-			ret.y += isNaN(node.y) ? 0 : node.y;
-		}
-	}
-
-	// account for document scrolling!
-	if(includeScroll){
-		var scroll = dojo.html.getScroll();
-		ret.y += scroll.top;
-		ret.x += scroll.left;
-	}
-
-	var extentFuncArray=[dojo.html.getPaddingExtent, dojo.html.getBorderExtent, dojo.html.getMarginExtent];
-	if(nativeBoxType > targetBoxType){
-		for(var i=targetBoxType;i<nativeBoxType;++i){
-			ret.y += extentFuncArray[i](node, 'top');
-			ret.x += extentFuncArray[i](node, 'left');
-		}
-	}else if(nativeBoxType < targetBoxType){
-		for(var i=targetBoxType;i>nativeBoxType;--i){
-			ret.y -= extentFuncArray[i-1](node, 'top');
-			ret.x -= extentFuncArray[i-1](node, 'left');
-		}
-	}
-	ret.top = ret.y;
-	ret.left = ret.x;
-	return ret;	//	object
-}
-
-dojo.html.isPositionAbsolute = function(/* HTMLElement */node){
-	//	summary
-	//	Returns true if the element is absolutely positioned.
-	return (dojo.html.getComputedStyle(node, 'position') == 'absolute');	//	boolean
-}
-
-dojo.html._sumPixelValues = function(/* HTMLElement */node, selectors, autoIsZero){
-	var total = 0;
-	for(var x=0; x<selectors.length; x++){
-		total += dojo.html.getPixelValue(node, selectors[x], autoIsZero);
-	}
-	return total;
-}
-
-dojo.html.getMargin = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the width and height of the passed node's margin
-	return {
-		width: dojo.html._sumPixelValues(node, ["margin-left", "margin-right"], (dojo.html.getComputedStyle(node, 'position') == 'absolute')),
-		height: dojo.html._sumPixelValues(node, ["margin-top", "margin-bottom"], (dojo.html.getComputedStyle(node, 'position') == 'absolute'))
-	};	//	object
-}
-
-dojo.html.getBorder = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the width and height of the passed node's border
-	return {
-		width: dojo.html.getBorderExtent(node, 'left') + dojo.html.getBorderExtent(node, 'right'),
-		height: dojo.html.getBorderExtent(node, 'top') + dojo.html.getBorderExtent(node, 'bottom')
-	};	//	object
-}
-
-dojo.html.getBorderExtent = function(/* HTMLElement */node, /* string */side){
-	//	summary
-	//	returns the width of the requested border
-	return (dojo.html.getStyle(node, 'border-' + side + '-style') == 'none' ? 0 : dojo.html.getPixelValue(node, 'border-' + side + '-width'));	// integer
-}
-
-dojo.html.getMarginExtent = function(/* HTMLElement */node, /* string */side){
-	//	summary
-	//	returns the width of the requested margin
-	return dojo.html._sumPixelValues(node, ["margin-" + side], dojo.html.isPositionAbsolute(node));	//	integer
-}
-
-dojo.html.getPaddingExtent = function(/* HTMLElement */node, /* string */side){
-	//	summary
-	//	Returns the width of the requested padding 
-	return dojo.html._sumPixelValues(node, ["padding-" + side], true);	//	integer
-}
-
-dojo.html.getPadding = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the width and height of the passed node's padding
-	return {
-		width: dojo.html._sumPixelValues(node, ["padding-left", "padding-right"], true),
-		height: dojo.html._sumPixelValues(node, ["padding-top", "padding-bottom"], true)
-	};	//	object
-}
-
-dojo.html.getPadBorder = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the width and height of the passed node's padding and border
-	var pad = dojo.html.getPadding(node);
-	var border = dojo.html.getBorder(node);
-	return { width: pad.width + border.width, height: pad.height + border.height };	//	object
-}
-
-dojo.html.getBoxSizing = function(/* HTMLElement */node){
-	//	summary
-	//	Returns which box model the passed element is working with
-	var h = dojo.render.html;
-	var bs = dojo.html.boxSizing;
-	if(((h.ie)||(h.opera)) && node.nodeName.toLowerCase() != "img"){ 
-		var cm = document["compatMode"];
-		if((cm == "BackCompat")||(cm == "QuirksMode")){
-			return bs.BORDER_BOX; 	//	string
-		}else{
-			return bs.CONTENT_BOX; 	//	string
-		}
-	}else{
-		if(arguments.length == 0){ node = document.documentElement; }
-		var sizing;
-		if(!h.ie){
-			sizing = dojo.html.getStyle(node, "-moz-box-sizing");
-			if(!sizing){ 
-				sizing = dojo.html.getStyle(node, "box-sizing");
-			}
-		}
-		return (sizing ? sizing : bs.CONTENT_BOX);	//	string
-	}
-}
-
-dojo.html.isBorderBox = function(/* HTMLElement */node){
-	//	summary
-	//	returns whether the passed element is using border box sizing or not.
-	return (dojo.html.getBoxSizing(node) == dojo.html.boxSizing.BORDER_BOX);	//	boolean
-}
-
-dojo.html.getBorderBox = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the dimensions of the passed element based on border-box sizing.
-	node = dojo.byId(node);
-	return { width: node.offsetWidth, height: node.offsetHeight };	//	object
-}
-
-dojo.html.getPaddingBox = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the dimensions of the padding box (see http://www.w3.org/TR/CSS21/box.html)
-	var box = dojo.html.getBorderBox(node);
-	var border = dojo.html.getBorder(node);
-	return {
-		width: box.width - border.width,
-		height:box.height - border.height
-	};	//	object
-}
-
-dojo.html.getContentBox = function(/* HTMLElement */node){
-	//	summary
-	//	Returns the dimensions of the content box (see http://www.w3.org/TR/CSS21/box.html)
-	node = dojo.byId(node);
-	var padborder = dojo.html.getPadBorder(node);
-	return {
-		width: node.offsetWidth - padborder.width,
-		height: node.offsetHeight - padborder.height
-	};	//	object
-}
-
-dojo.html.setContentBox = function(/* HTMLElement */node, /* object */args){
-	//	summary
-	//	Sets the dimensions of the passed node according to content sizing.
-	node = dojo.byId(node);
-	var width = 0; var height = 0;
-	var isbb = dojo.html.isBorderBox(node);
-	var padborder = (isbb ? dojo.html.getPadBorder(node) : { width: 0, height: 0});
-	var ret = {};
-	if(typeof args.width != "undefined"){
-		width = args.width + padborder.width;
-		ret.width = dojo.html.setPositivePixelValue(node, "width", width);
-	}
-	if(typeof args.height != "undefined"){
-		height = args.height + padborder.height;
-		ret.height = dojo.html.setPositivePixelValue(node, "height", height);
-	}
-	return ret;	//	object
-}
-
-dojo.html.getMarginBox = function(/* HTMLElement */node){
-	//	summary
-	//	returns the dimensions of the passed node including any margins.
-	var borderbox = dojo.html.getBorderBox(node);
-	var margin = dojo.html.getMargin(node);
-	return { width: borderbox.width + margin.width, height: borderbox.height + margin.height };	//	object
-}
-
-dojo.html.setMarginBox = function(/* HTMLElement */node, /* object */args){
-	//	summary
-	//	Sets the dimensions of the passed node using margin box calcs.
-	node = dojo.byId(node);
-	var width = 0; var height = 0;
-	var isbb = dojo.html.isBorderBox(node);
-	var padborder = (!isbb ? dojo.html.getPadBorder(node) : { width: 0, height: 0 });
-	var margin = dojo.html.getMargin(node);
-	var ret = {};
-	if(typeof args.width != "undefined"){
-		width = args.width - padborder.width;
-		width -= margin.width;
-		ret.width = dojo.html.setPositivePixelValue(node, "width", width);
-	}
-	if(typeof args.height != "undefined"){
-		height = args.height - padborder.height;
-		height -= margin.height;
-		ret.height = dojo.html.setPositivePixelValue(node, "height", height);
-	}
-	return ret;	//	object
-}
-
-dojo.html.getElementBox = function(/* HTMLElement */node, /* string */type){
-	//	summary
-	//	return dimesions of a node based on the passed box model type.
-	var bs = dojo.html.boxSizing;
-	switch(type){
-		case bs.MARGIN_BOX:
-			return dojo.html.getMarginBox(node);	//	object
-		case bs.BORDER_BOX:
-			return dojo.html.getBorderBox(node);	//	object
-		case bs.PADDING_BOX:
-			return dojo.html.getPaddingBox(node);	//	object
-		case bs.CONTENT_BOX:
-		default:
-			return dojo.html.getContentBox(node);	//	object
-	}
-}
-// in: coordinate array [x,y,w,h] or dom node
-// return: coordinate object
-dojo.html.toCoordinateObject = dojo.html.toCoordinateArray = function(/* array */coords, /* boolean? */includeScroll, /* string? */boxtype) {
-	//	summary
-	//	Converts an array of coordinates into an object of named arguments.
-	if(coords instanceof Array || typeof coords == "array"){
-		dojo.deprecated("dojo.html.toCoordinateArray", "use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead", "0.5");
-		// coords is already an array (of format [x,y,w,h]), just return it
-		while ( coords.length < 4 ) { coords.push(0); }
-		while ( coords.length > 4 ) { coords.pop(); }
-		var ret = {
-			left: coords[0],
-			top: coords[1],
-			width: coords[2],
-			height: coords[3]
-		};
-	}else if(!coords.nodeType && !(coords instanceof String || typeof coords == "string") &&
-			 ('width' in coords || 'height' in coords || 'left' in coords ||
-			  'x' in coords || 'top' in coords || 'y' in coords)){
-		// coords is a coordinate object or at least part of one
-		var ret = {
-			left: coords.left||coords.x||0,
-			top: coords.top||coords.y||0,
-			width: coords.width||0,
-			height: coords.height||0
-		};
-	}else{
-		// coords is an dom object (or dom object id); return it's coordinates
-		var node = dojo.byId(coords);
-		var pos = dojo.html.abs(node, includeScroll, boxtype);
-		var marginbox = dojo.html.getMarginBox(node);
-		var ret = {
-			left: pos.left,
-			top: pos.top,
-			width: marginbox.width,
-			height: marginbox.height
-		};
-	}
-	ret.x = ret.left;
-	ret.y = ret.top;
-	return ret;	//	object
-}
-
-dojo.html.setMarginBoxWidth = dojo.html.setOuterWidth = function(node, width){
-	return dojo.html._callDeprecated("setMarginBoxWidth", "setMarginBox", arguments, "width");
-}
-dojo.html.setMarginBoxHeight = dojo.html.setOuterHeight = function(){
-	return dojo.html._callDeprecated("setMarginBoxHeight", "setMarginBox", arguments, "height");
-}
-dojo.html.getMarginBoxWidth = dojo.html.getOuterWidth = function(){
-	return dojo.html._callDeprecated("getMarginBoxWidth", "getMarginBox", arguments, null, "width");
-}
-dojo.html.getMarginBoxHeight = dojo.html.getOuterHeight = function(){
-	return dojo.html._callDeprecated("getMarginBoxHeight", "getMarginBox", arguments, null, "height");
-}
-dojo.html.getTotalOffset = function(node, type, includeScroll){
-	return dojo.html._callDeprecated("getTotalOffset", "getAbsolutePosition", arguments, null, type);
-}
-dojo.html.getAbsoluteX = function(node, includeScroll){
-	return dojo.html._callDeprecated("getAbsoluteX", "getAbsolutePosition", arguments, null, "x");
-}
-dojo.html.getAbsoluteY = function(node, includeScroll){
-	return dojo.html._callDeprecated("getAbsoluteY", "getAbsolutePosition", arguments, null, "y");
-}
-dojo.html.totalOffsetLeft = function(node, includeScroll){
-	return dojo.html._callDeprecated("totalOffsetLeft", "getAbsolutePosition", arguments, null, "left");
-}
-dojo.html.totalOffsetTop = function(node, includeScroll){
-	return dojo.html._callDeprecated("totalOffsetTop", "getAbsolutePosition", arguments, null, "top");
-}
-dojo.html.getMarginWidth = function(node){
-	return dojo.html._callDeprecated("getMarginWidth", "getMargin", arguments, null, "width");
-}
-dojo.html.getMarginHeight = function(node){
-	return dojo.html._callDeprecated("getMarginHeight", "getMargin", arguments, null, "height");
-}
-dojo.html.getBorderWidth = function(node){
-	return dojo.html._callDeprecated("getBorderWidth", "getBorder", arguments, null, "width");
-}
-dojo.html.getBorderHeight = function(node){
-	return dojo.html._callDeprecated("getBorderHeight", "getBorder", arguments, null, "height");
-}
-dojo.html.getPaddingWidth = function(node){
-	return dojo.html._callDeprecated("getPaddingWidth", "getPadding", arguments, null, "width");
-}
-dojo.html.getPaddingHeight = function(node){
-	return dojo.html._callDeprecated("getPaddingHeight", "getPadding", arguments, null, "height");
-}
-dojo.html.getPadBorderWidth = function(node){
-	return dojo.html._callDeprecated("getPadBorderWidth", "getPadBorder", arguments, null, "width");
-}
-dojo.html.getPadBorderHeight = function(node){
-	return dojo.html._callDeprecated("getPadBorderHeight", "getPadBorder", arguments, null, "height");
-}
-dojo.html.getBorderBoxWidth = dojo.html.getInnerWidth = function(){
-	return dojo.html._callDeprecated("getBorderBoxWidth", "getBorderBox", arguments, null, "width");
-}
-dojo.html.getBorderBoxHeight = dojo.html.getInnerHeight = function(){
-	return dojo.html._callDeprecated("getBorderBoxHeight", "getBorderBox", arguments, null, "height");
-}
-dojo.html.getContentBoxWidth = dojo.html.getContentWidth = function(){
-	return dojo.html._callDeprecated("getContentBoxWidth", "getContentBox", arguments, null, "width");
-}
-dojo.html.getContentBoxHeight = dojo.html.getContentHeight = function(){
-	return dojo.html._callDeprecated("getContentBoxHeight", "getContentBox", arguments, null, "height");
-}
-dojo.html.setContentBoxWidth = dojo.html.setContentWidth = function(node, width){
-	return dojo.html._callDeprecated("setContentBoxWidth", "setContentBox", arguments, "width");
-}
-dojo.html.setContentBoxHeight = dojo.html.setContentHeight = function(node, height){
-	return dojo.html._callDeprecated("setContentBoxHeight", "setContentBox", arguments, "height");
-}
-
-dojo.provide("dojo.html.util");
-
-
-dojo.html.getElementWindow = function(/* HTMLElement */element){
-	//	summary
-	// 	Get the window object where the element is placed in.
-	return dojo.html.getDocumentWindow( element.ownerDocument );	//	Window
-}
-
-dojo.html.getDocumentWindow = function(doc){
-	//	summary
-	// 	Get window object associated with document doc
-
-	// With Safari, there is not wa to retrieve the window from the document, so we must fix it.
-	if(dojo.render.html.safari && !doc._parentWindow){
-		/*
-			This is a Safari specific function that fix the reference to the parent
-			window from the document object.
-		*/
-
-		var fix=function(win){
-			win.document._parentWindow=win;
-			for(var i=0; i<win.frames.length; i++){
-				fix(win.frames[i]);
-			}
-		}
-		fix(window.top);
-	}
-
-	//In some IE versions (at least 6.0), document.parentWindow does not return a
-	//reference to the real window object (maybe a copy), so we must fix it as well
-	//We use IE specific execScript to attach the real window reference to
-	//document._parentWindow for later use
-	if(dojo.render.html.ie && window !== document.parentWindow && !doc._parentWindow){
-		/*
-		In IE 6, only the variable "window" can be used to connect events (others
-		may be only copies).
-		*/
-		doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
-		//to prevent memory leak, unset it after use
-		//another possibility is to add an onUnload handler which seems overkill to me (liucougar)
-		var win = doc._parentWindow;
-		doc._parentWindow = null;
-		return win;	//	Window
-	}
-
-	return doc._parentWindow || doc.parentWindow || doc.defaultView;	//	Window
-}
-
-dojo.html.gravity = function(/* HTMLElement */node, /* DOMEvent */e){
-	//	summary
-	//	Calculates the mouse's direction of gravity relative to the centre
-	//	of the given node.
-	//	<p>
-	//	If you wanted to insert a node into a DOM tree based on the mouse
-	//	position you might use the following code:
-	//	<pre>
-	//	if (gravity(node, e) & gravity.NORTH) { [insert before]; }
-	//	else { [insert after]; }
-	//	</pre>
-	//
-	//	@param node The node
-	//	@param e		The event containing the mouse coordinates
-	//	@return		 The directions, NORTH or SOUTH and EAST or WEST. These
-	//						 are properties of the function.
-	node = dojo.byId(node);
-	var mouse = dojo.html.getCursorPosition(e);
-
-	with (dojo.html) {
-		var absolute = getAbsolutePosition(node, true);
-		var bb = getBorderBox(node);
-		var nodecenterx = absolute.x + (bb.width / 2);
-		var nodecentery = absolute.y + (bb.height / 2);
-	}
-
-	with (dojo.html.gravity) {
-		return ((mouse.x < nodecenterx ? WEST : EAST) | (mouse.y < nodecentery ? NORTH : SOUTH));	//	integer
-	}
-}
-
-dojo.html.gravity.NORTH = 1;
-dojo.html.gravity.SOUTH = 1 << 1;
-dojo.html.gravity.EAST = 1 << 2;
-dojo.html.gravity.WEST = 1 << 3;
-
-dojo.html.overElement = function(/* HTMLElement */element, /* DOMEvent */e){
-	//	summary
-	//	Returns whether the mouse is over the passed element.
-	//	Element must be display:block (ie, not a <span>)
-	element = dojo.byId(element);
-	var mouse = dojo.html.getCursorPosition(e);
-	var bb = dojo.html.getBorderBox(element);
-	var absolute = dojo.html.getAbsolutePosition(element, true, dojo.html.boxSizing.BORDER_BOX);
-	var top = absolute.y;
-	var bottom = top + bb.height;
-	var left = absolute.x;
-	var right = left + bb.width;
-
-	return (mouse.x >= left
-		&& mouse.x <= right
-		&& mouse.y >= top
-		&& mouse.y <= bottom
-	);	//	boolean
-}
-
-dojo.html.renderedTextContent = function(/* HTMLElement */node){
-	//	summary
-	//	Attempts to return the text as it would be rendered, with the line breaks
-	//	sorted out nicely. Unfinished.
-	node = dojo.byId(node);
-	var result = "";
-	if (node == null) { return result; }
-	for (var i = 0; i < node.childNodes.length; i++) {
-		switch (node.childNodes[i].nodeType) {
-			case 1: // ELEMENT_NODE
-			case 5: // ENTITY_REFERENCE_NODE
-				var display = "unknown";
-				try {
-					display = dojo.html.getStyle(node.childNodes[i], "display");
-				} catch(E) {}
-				switch (display) {
-					case "block": case "list-item": case "run-in":
-					case "table": case "table-row-group": case "table-header-group":
-					case "table-footer-group": case "table-row": case "table-column-group":
-					case "table-column": case "table-cell": case "table-caption":
-						// TODO: this shouldn't insert double spaces on aligning blocks
-						result += "\n";
-						result += dojo.html.renderedTextContent(node.childNodes[i]);
-						result += "\n";
-						break;
-
-					case "none": break;
-
-					default:
-						if(node.childNodes[i].tagName && node.childNodes[i].tagName.toLowerCase() == "br") {
-							result += "\n";
-						} else {
-							result += dojo.html.renderedTextContent(node.childNodes[i]);
-						}
-						break;
-				}
-				break;
-			case 3: // TEXT_NODE
-			case 2: // ATTRIBUTE_NODE
-			case 4: // CDATA_SECTION_NODE
-				var text = node.childNodes[i].nodeValue;
-				var textTransform = "unknown";
-				try {
-					textTransform = dojo.html.getStyle(node, "text-transform");
-				} catch(E) {}
-				switch (textTransform){
-					case "capitalize":
-						var words = text.split(' ');
-						for(var i=0; i<words.length; i++){
-							words[i] = words[i].charAt(0).toUpperCase() + words[i].substring(1);
-						}
-						text = words.join(" ");
-						break;
-					case "uppercase": text = text.toUpperCase(); break;
-					case "lowercase": text = text.toLowerCase(); break;
-					default: break; // leave as is
-				}
-				// TODO: implement
-				switch (textTransform){
-					case "nowrap": break;
-					case "pre-wrap": break;
-					case "pre-line": break;
-					case "pre": break; // leave as is
-					default:
-						// remove whitespace and collapse first space
-						text = text.replace(/\s+/, " ");
-						if (/\s$/.test(result)) { text.replace(/^\s/, ""); }
-						break;
-				}
-				result += text;
-				break;
-			default:
-				break;
-		}
-	}
-	return result;	//	string
-}
-
-dojo.html.createNodesFromText = function(/* string */txt, /* boolean? */trim){
-	//	summary
-	//	Attempts to create a set of nodes based on the structure of the passed text.
-	if(trim) { txt = txt.replace(/^\s+|\s+$/g, ""); }
-
-	var tn = dojo.doc().createElement("div");
-	// tn.style.display = "none";
-	tn.style.visibility= "hidden";
-	dojo.body().appendChild(tn);
-	var tableType = "none";
-	if((/^<t[dh][\s\r\n>]/i).test(txt.replace(/^\s+/))) {
-		txt = "<table><tbody><tr>" + txt + "</tr></tbody></table>";
-		tableType = "cell";
-	} else if((/^<tr[\s\r\n>]/i).test(txt.replace(/^\s+/))) {
-		txt = "<table><tbody>" + txt + "</tbody></table>";
-		tableType = "row";
-	} else if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(txt.replace(/^\s+/))) {
-		txt = "<table>" + txt + "</table>";
-		tableType = "section";
-	}
-	tn.innerHTML = txt;
-	if(tn["normalize"]){
-		tn.normalize();
-	}
-
-	var parent = null;
-	switch(tableType) {
-		case "cell":
-			parent = tn.getElementsByTagName("tr")[0];
-			break;
-		case "row":
-			parent = tn.getElementsByTagName("tbody")[0];
-			break;
-		case "section":
-			parent = tn.getElementsByTagName("table")[0];
-			break;
-		default:
-			parent = tn;
-			break;
-	}
-
-	/* this doesn't make much sense, I'm assuming it just meant trim() so wrap was replaced with trim
-	if(wrap){
-		var ret = [];
-		// start hack
-		var fc = tn.firstChild;
-		ret[0] = ((fc.nodeValue == " ")||(fc.nodeValue == "\t")) ? fc.nextSibling : fc;
-		// end hack
-		// tn.style.display = "none";
-		dojo.body().removeChild(tn);
-		return ret;
-	}
-	*/
-	var nodes = [];
-	for(var x=0; x<parent.childNodes.length; x++){
-		nodes.push(parent.childNodes[x].cloneNode(true));
-	}
-	tn.style.display = "none"; // FIXME: why do we do this?
-	dojo.html.destroyNode(tn);
-	return nodes;	//	array
-}
-
-dojo.html.placeOnScreen = function(
-	/* HTMLElement */node,
-	/* integer */desiredX,
-	/* integer */desiredY,
-	/* integer */padding,
-	/* boolean? */hasScroll,
-	/* string? */corners,
-	/* boolean? */tryOnly
-){
-	//	summary
-	//	Keeps 'node' in the visible area of the screen while trying to
-	//	place closest to desiredX, desiredY. The input coordinates are
-	//	expected to be the desired screen position, not accounting for
-	//	scrolling. If you already accounted for scrolling, set 'hasScroll'
-	//	to true. Set padding to either a number or array for [paddingX, paddingY]
-	//	to put some buffer around the element you want to position.
-	//	Set which corner(s) you want to bind to, such as
-	//
-	//	placeOnScreen(node, desiredX, desiredY, padding, hasScroll, "TR")
-	//	placeOnScreen(node, [desiredX, desiredY], padding, hasScroll, ["TR", "BL"])
-	//
-	//	The desiredX/desiredY will be treated as the topleft(TL)/topright(TR) or
-	//	BottomLeft(BL)/BottomRight(BR) corner of the node. Each corner is tested
-	//	and if a perfect match is found, it will be used. Otherwise, it goes through
-	//	all of the specified corners, and choose the most appropriate one.
-	//	By default, corner = ['TL'].
-	//	If tryOnly is set to true, the node will not be moved to the place.
-	//
-	//	NOTE: node is assumed to be absolutely or relatively positioned.
-	//
-	//	Alternate call sig:
-	//	 placeOnScreen(node, [x, y], padding, hasScroll)
-	//
-	//	Examples:
-	//	 placeOnScreen(node, 100, 200)
-	//	 placeOnScreen("myId", [800, 623], 5)
-	//	 placeOnScreen(node, 234, 3284, [2, 5], true)
-
-	// TODO: make this function have variable call sigs
-	//	kes(node, ptArray, cornerArray, padding, hasScroll)
-	//	kes(node, ptX, ptY, cornerA, cornerB, cornerC, paddingArray, hasScroll)
-	if(desiredX instanceof Array || typeof desiredX == "array") {
-		tryOnly = corners;
-		corners = hasScroll;
-		hasScroll = padding;
-		padding = desiredY;
-		desiredY = desiredX[1];
-		desiredX = desiredX[0];
-	}
-
-	if(corners instanceof String || typeof corners == "string"){
-		corners = corners.split(",");
-	}
-
-	if(!isNaN(padding)) {
-		padding = [Number(padding), Number(padding)];
-	} else if(!(padding instanceof Array || typeof padding == "array")) {
-		padding = [0, 0];
-	}
-
-	var scroll = dojo.html.getScroll().offset;
-	var view = dojo.html.getViewport();
-
-	node = dojo.byId(node);
-	var oldDisplay = node.style.display;
-	node.style.display="";
-	var bb = dojo.html.getBorderBox(node);
-	var w = bb.width;
-	var h = bb.height;
-	node.style.display=oldDisplay;
-
-	if(!(corners instanceof Array || typeof corners == "array")){
-		corners = ['TL'];
-	}
-
-	var bestx, besty, bestDistance = Infinity, bestCorner;
-
-	for(var cidex=0; cidex<corners.length; ++cidex){
-		var corner = corners[cidex];
-		var match = true;
-		var tryX = desiredX - (corner.charAt(1)=='L' ? 0 : w) + padding[0]*(corner.charAt(1)=='L' ? 1 : -1);
-		var tryY = desiredY - (corner.charAt(0)=='T' ? 0 : h) + padding[1]*(corner.charAt(0)=='T' ? 1 : -1);
-		if(hasScroll) {
-			tryX -= scroll.x;
-			tryY -= scroll.y;
-		}
-
-		if(tryX < 0){
-			tryX = 0;
-			match = false;
-		}
-
-		if(tryY < 0){
-			tryY = 0;
-			match = false;
-		}
-
-		var x = tryX + w;
-		if(x > view.width) {
-			x = view.width - w;
-			match = false;
-		} else {
-			x = tryX;
-		}
-		x = Math.max(padding[0], x) + scroll.x;
-
-		var y = tryY + h;
-		if(y > view.height) {
-			y = view.height - h;
-			match = false;
-		} else {
-			y = tryY;
-		}
-		y = Math.max(padding[1], y) + scroll.y;
-
-		if(match){ //perfect match, return now
-			bestx = x;
-			besty = y;
-			bestDistance = 0;
-			bestCorner = corner;
-			break;
-		}else{
-			//not perfect, find out whether it is better than the saved one
-			var dist = Math.pow(x-tryX-scroll.x,2)+Math.pow(y-tryY-scroll.y,2);
-			if(bestDistance > dist){
-				bestDistance = dist;
-				bestx = x;
-				besty = y;
-				bestCorner = corner;
-			}
-		}
-	}
-
-	if(!tryOnly){
-		node.style.left = bestx + "px";
-		node.style.top = besty + "px";
-	}
-
-	return { left: bestx, top: besty, x: bestx, y: besty, dist: bestDistance, corner:  bestCorner};	//	object
-}
-
-dojo.html.placeOnScreenPoint = function(node, desiredX, desiredY, padding, hasScroll) {
-	dojo.deprecated("dojo.html.placeOnScreenPoint", "use dojo.html.placeOnScreen() instead", "0.5");
-	return dojo.html.placeOnScreen(node, desiredX, desiredY, padding, hasScroll, ['TL', 'TR', 'BL', 'BR']);
-}
-
-dojo.html.placeOnScreenAroundElement = function(
-	/* HTMLElement */node,
-	/* HTMLElement */aroundNode,
-	/* integer */padding,
-	/* string? */aroundType,
-	/* string? */aroundCorners,
-	/* boolean? */tryOnly
-){
-	//	summary
-	//	Like placeOnScreen, except it accepts aroundNode instead of x,y
-	//	and attempts to place node around it. aroundType (see
-	//	dojo.html.boxSizing in html/layout.js) determines which box of the
-	//	aroundNode should be used to calculate the outer box.
-	//	aroundCorners specify Which corner of aroundNode should be
-	//	used to place the node => which corner(s) of node to use (see the
-	//	corners parameter in dojo.html.placeOnScreen)
-	//	aroundCorners: {'TL': 'BL', 'BL': 'TL'}
-
-	var best, bestDistance=Infinity;
-	aroundNode = dojo.byId(aroundNode);
-	var oldDisplay = aroundNode.style.display;
-	aroundNode.style.display="";
-	var mb = dojo.html.getElementBox(aroundNode, aroundType);
-	var aroundNodeW = mb.width;
-	var aroundNodeH = mb.height;
-	var aroundNodePos = dojo.html.getAbsolutePosition(aroundNode, true, aroundType);
-	aroundNode.style.display=oldDisplay;
-
-	for(var nodeCorner in aroundCorners){
-		var pos, desiredX, desiredY;
-		var corners = aroundCorners[nodeCorner];
-
-		desiredX = aroundNodePos.x + (nodeCorner.charAt(1)=='L' ? 0 : aroundNodeW);
-		desiredY = aroundNodePos.y + (nodeCorner.charAt(0)=='T' ? 0 : aroundNodeH);
-
-		pos = dojo.html.placeOnScreen(node, desiredX, desiredY, padding, true, corners, true);
-		if(pos.dist == 0){
-			best = pos;
-			break;
-		}else{
-			//not perfect, find out whether it is better than the saved one
-			if(bestDistance > pos.dist){
-				bestDistance = pos.dist;
-				best = pos;
-			}
-		}
-	}
-
-	if(!tryOnly){
-		node.style.left = best.left + "px";
-		node.style.top = best.top + "px";
-	}
-	return best;	//	object
-}
-
-dojo.html.scrollIntoView = function(/* HTMLElement */node){
-	//	summary
-	//	Scroll the passed node into view, if it is not.
-	if(!node){ return; }
-
-	// don't rely on that node.scrollIntoView works just because the function is there
-	// it doesnt work in Konqueror or Opera even though the function is there and probably
-	// not safari either
-	// dont like browser sniffs implementations but sometimes you have to use it
-	if(dojo.render.html.ie){
-		//only call scrollIntoView if there is a scrollbar for this menu,
-		//otherwise, scrollIntoView will scroll the window scrollbar
-		if(dojo.html.getBorderBox(node.parentNode).height <= node.parentNode.scrollHeight){
-			node.scrollIntoView(false);
-		}
-	}else if(dojo.render.html.mozilla){
-		// IE, mozilla
-		node.scrollIntoView(false);
-	}else{
-		var parent = node.parentNode;
-		var parentBottom = parent.scrollTop + dojo.html.getBorderBox(parent).height;
-		var nodeBottom = node.offsetTop + dojo.html.getMarginBox(node).height;
-		if(parentBottom < nodeBottom){
-			parent.scrollTop += (nodeBottom - parentBottom);
-		}else if(parent.scrollTop > node.offsetTop){
-			parent.scrollTop -= (parent.scrollTop - node.offsetTop);
-		}
-	}
-}
-
-dojo.provide("dojo.gfx.color");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.array");
-
-// TODO: rewrite the "x2y" methods to take advantage of the parsing
-//       abilities of the Color object. Also, beef up the Color
-//       object (as possible) to parse most common formats
-
-// takes an r, g, b, a(lpha) value, [r, g, b, a] array, "rgb(...)" string, hex string (#aaa, #aaaaaa, aaaaaaa)
-dojo.gfx.color.Color = function(r, g, b, a) {
-	// dojo.debug("r:", r[0], "g:", r[1], "b:", r[2]);
-	if(dojo.lang.isArray(r)){
-		this.r = r[0];
-		this.g = r[1];
-		this.b = r[2];
-		this.a = r[3]||1.0;
-	}else if(dojo.lang.isString(r)){
-		var rgb = dojo.gfx.color.extractRGB(r);
-		this.r = rgb[0];
-		this.g = rgb[1];
-		this.b = rgb[2];
-		this.a = g||1.0;
-	}else if(r instanceof dojo.gfx.color.Color){
-		// why does this create a new instance if we were passed one?
-		this.r = r.r;
-		this.b = r.b;
-		this.g = r.g;
-		this.a = r.a;
-	}else{
-		this.r = r;
-		this.g = g;
-		this.b = b;
-		this.a = a;
-	}
-}
-
-dojo.gfx.color.Color.fromArray = function(arr) {
-	return new dojo.gfx.color.Color(arr[0], arr[1], arr[2], arr[3]);
-}
-
-dojo.extend(dojo.gfx.color.Color, {
-	toRgb: function(includeAlpha) {
-		if(includeAlpha) {
-			return this.toRgba();
-		} else {
-			return [this.r, this.g, this.b];
-		}
-	},
-	toRgba: function() {
-		return [this.r, this.g, this.b, this.a];
-	},
-	toHex: function() {
-		return dojo.gfx.color.rgb2hex(this.toRgb());
-	},
-	toCss: function() {
-		return "rgb(" + this.toRgb().join() + ")";
-	},
-	toString: function() {
-		return this.toHex(); // decent default?
-	},
-	blend: function(color, weight){
-		var rgb = null;
-		if(dojo.lang.isArray(color)){
-			rgb = color;
-		}else if(color instanceof dojo.gfx.color.Color){
-			rgb = color.toRgb();
-		}else{
-			rgb = new dojo.gfx.color.Color(color).toRgb();
-		}
-		return dojo.gfx.color.blend(this.toRgb(), rgb, weight);
-	}
-});
-
-dojo.gfx.color.named = {
-	white:      [255,255,255],
-	black:      [0,0,0],
-	red:        [255,0,0],
-	green:	    [0,255,0],
-	lime:	    [0,255,0],
-	blue:       [0,0,255],
-	navy:       [0,0,128],
-	gray:       [128,128,128],
-	silver:     [192,192,192]
-};
-
-dojo.gfx.color.blend = function(a, b, weight){
-	// summary: 
-	//		blend colors a and b (both as RGB array or hex strings) with weight
-	//		from -1 to +1, 0 being a 50/50 blend
-	if(typeof a == "string"){
-		return dojo.gfx.color.blendHex(a, b, weight);
-	}
-	if(!weight){
-		weight = 0;
-	}
-	weight = Math.min(Math.max(-1, weight), 1);
-
-	// alex: this interface blows.
-	// map -1 to 1 to the range 0 to 1
-	weight = ((weight + 1)/2);
-	
-	var c = [];
-
-	// var stop = (1000*weight);
-	for(var x = 0; x < 3; x++){
-		c[x] = parseInt( b[x] + ( (a[x] - b[x]) * weight) );
-	}
-	return c;
-}
-
-// very convenient blend that takes and returns hex values
-// (will get called automatically by blend when blend gets strings)
-dojo.gfx.color.blendHex = function(a, b, weight) {
-	return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a), dojo.gfx.color.hex2rgb(b), weight));
-}
-
-// get RGB array from css-style color declarations
-dojo.gfx.color.extractRGB = function(color) {
-	var hex = "0123456789abcdef";
-	color = color.toLowerCase();
-	if( color.indexOf("rgb") == 0 ) {
-		var matches = color.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-		var ret = matches.splice(1, 3);
-		return ret;
-	} else {
-		var colors = dojo.gfx.color.hex2rgb(color);
-		if(colors) {
-			return colors;
-		} else {
-			// named color (how many do we support?)
-			return dojo.gfx.color.named[color] || [255, 255, 255];
-		}
-	}
-}
-
-dojo.gfx.color.hex2rgb = function(hex) {
-	var hexNum = "0123456789ABCDEF";
-	var rgb = new Array(3);
-	if( hex.indexOf("#") == 0 ) { hex = hex.substring(1); }
-	hex = hex.toUpperCase();
-	if(hex.replace(new RegExp("["+hexNum+"]", "g"), "") != "") {
-		return null;
-	}
-	if( hex.length == 3 ) {
-		rgb[0] = hex.charAt(0) + hex.charAt(0)
-		rgb[1] = hex.charAt(1) + hex.charAt(1)
-		rgb[2] = hex.charAt(2) + hex.charAt(2);
-	} else {
-		rgb[0] = hex.substring(0, 2);
-		rgb[1] = hex.substring(2, 4);
-		rgb[2] = hex.substring(4);
-	}
-	for(var i = 0; i < rgb.length; i++) {
-		rgb[i] = hexNum.indexOf(rgb[i].charAt(0)) * 16 + hexNum.indexOf(rgb[i].charAt(1));
-	}
-	return rgb;
-}
-
-dojo.gfx.color.rgb2hex = function(r, g, b) {
-	if(dojo.lang.isArray(r)) {
-		g = r[1] || 0;
-		b = r[2] || 0;
-		r = r[0] || 0;
-	}
-	var ret = dojo.lang.map([r, g, b], function(x) {
-		x = new Number(x);
-		var s = x.toString(16);
-		while(s.length < 2) { s = "0" + s; }
-		return s;
-	});
-	ret.unshift("#");
-	return ret.join("");
-}
-
-dojo.provide("dojo.lfx.Animation");
-
-dojo.require("dojo.lang.func");
-
-/*
-	Animation package based on Dan Pupius' work: http://pupius.co.uk/js/Toolkit.Drawing.js
-*/
-dojo.lfx.Line = function(/*int*/ start, /*int*/ end){
-	// summary: dojo.lfx.Line is the object used to generate values
-	//			from a start value to an end value
-	this.start = start;
-	this.end = end;
-	if(dojo.lang.isArray(start)){
-		/* start: Array
-		   end: Array
-		   pId: a */
-		var diff = [];
-		dojo.lang.forEach(this.start, function(s,i){
-			diff[i] = this.end[i] - s;
-		}, this);
-		
-		this.getValue = function(/*float*/ n){
-			var res = [];
-			dojo.lang.forEach(this.start, function(s, i){
-				res[i] = (diff[i] * n) + s;
-			}, this);
-			return res; // Array
-		}
-	}else{
-		var diff = end - start;
-			
-		this.getValue = function(/*float*/ n){
-			//	summary: returns the point on the line
-			//	n: a floating point number greater than 0 and less than 1
-			return (diff * n) + this.start; // Decimal
-		}
-	}
-}
-
-if((dojo.render.html.khtml)&&(!dojo.render.html.safari)){
-	// the cool kids are obviously not using konqueror...
-	// found a very wierd bug in floats constants, 1.5 evals as 1
-	// seems somebody mixed up ints and floats in 3.5.4 ??
-	// FIXME: investigate more and post a KDE bug (Fredrik)
-	dojo.lfx.easeDefault = function(/*Decimal?*/ n){
-		//	summary: Returns the point for point n on a sin wave.
-		return (parseFloat("0.5")+((Math.sin( (n+parseFloat("1.5")) * Math.PI))/2));
-	}
-}else{
-	dojo.lfx.easeDefault = function(/*Decimal?*/ n){
-		return (0.5+((Math.sin( (n+1.5) * Math.PI))/2));
-	}
-}
-
-dojo.lfx.easeIn = function(/*Decimal?*/ n){
-	//	summary: returns the point on an easing curve
-	//	n: a floating point number greater than 0 and less than 1
-	return Math.pow(n, 3);
-}
-
-dojo.lfx.easeOut = function(/*Decimal?*/ n){
-	//	summary: returns the point on the line
-	//	n: a floating point number greater than 0 and less than 1
-	return ( 1 - Math.pow(1 - n, 3) );
-}
-
-dojo.lfx.easeInOut = function(/*Decimal?*/ n){
-	//	summary: returns the point on the line
-	//	n: a floating point number greater than 0 and less than 1
-	return ( (3 * Math.pow(n, 2)) - (2 * Math.pow(n, 3)) );
-}
-
-dojo.lfx.IAnimation = function(){
-	// summary: dojo.lfx.IAnimation is an interface that implements
-	//			commonly used functions of animation objects
-}
-dojo.lang.extend(dojo.lfx.IAnimation, {
-	// public properties
-	curve: null,
-	duration: 1000,
-	easing: null,
-	repeatCount: 0,
-	rate: 10,
-	
-	// events
-	handler: null,
-	beforeBegin: null,
-	onBegin: null,
-	onAnimate: null,
-	onEnd: null,
-	onPlay: null,
-	onPause: null,
-	onStop: null,
-	
-	// public methods
-	play: null,
-	pause: null,
-	stop: null,
-	
-	connect: function(/*Event*/ evt, /*Object*/ scope, /*Function*/ newFunc){
-		// summary: Convenience function.  Quickly connect to an event
-		//			of this object and save the old functions connected to it.
-		// evt: The name of the event to connect to.
-		// scope: the scope in which to run newFunc.
-		// newFunc: the function to run when evt is fired.
-		if(!newFunc){
-			/* scope: Function
-			   newFunc: null
-			   pId: f */
-			newFunc = scope;
-			scope = this;
-		}
-		newFunc = dojo.lang.hitch(scope, newFunc);
-		var oldFunc = this[evt]||function(){};
-		this[evt] = function(){
-			var ret = oldFunc.apply(this, arguments);
-			newFunc.apply(this, arguments);
-			return ret;
-		}
-		return this; // dojo.lfx.IAnimation
-	},
-
-	fire: function(/*Event*/ evt, /*Array*/ args){
-		// summary: Convenience function.  Fire event "evt" and pass it
-		//			the arguments specified in "args".
-		// evt: The event to fire.
-		// args: The arguments to pass to the event.
-		if(this[evt]){
-			this[evt].apply(this, (args||[]));
-		}
-		return this; // dojo.lfx.IAnimation
-	},
-	
-	repeat: function(/*int*/ count){
-		// summary: Set the repeat count of this object.
-		// count: How many times to repeat the animation.
-		this.repeatCount = count;
-		return this; // dojo.lfx.IAnimation
-	},
-
-	// private properties
-	_active: false,
-	_paused: false
-});
-
-dojo.lfx.Animation = function(	/*Object*/ handlers, 
-								/*int*/ duration, 
-								/*dojo.lfx.Line*/ curve, 
-								/*function*/ easing, 
-								/*int*/ repeatCount, 
-								/*int*/ rate){
-	//	summary
-	//		a generic animation object that fires callbacks into it's handlers
-	//		object at various states
-	//	handlers: { handler: Function?, onstart: Function?, onstop: Function?, onanimate: Function? }
-	dojo.lfx.IAnimation.call(this);
-	if(dojo.lang.isNumber(handlers)||(!handlers && duration.getValue)){
-		// no handlers argument:
-		rate = repeatCount;
-		repeatCount = easing;
-		easing = curve;
-		curve = duration;
-		duration = handlers;
-		handlers = null;
-	}else if(handlers.getValue||dojo.lang.isArray(handlers)){
-		// no handlers or duration:
-		rate = easing;
-		repeatCount = curve;
-		easing = duration;
-		curve = handlers;
-		duration = null;
-		handlers = null;
-	}
-	if(dojo.lang.isArray(curve)){
-		/* curve: Array
-		   pId: a */
-		this.curve = new dojo.lfx.Line(curve[0], curve[1]);
-	}else{
-		this.curve = curve;
-	}
-	if(duration != null && duration > 0){ this.duration = duration; }
-	if(repeatCount){ this.repeatCount = repeatCount; }
-	if(rate){ this.rate = rate; }
-	if(handlers){
-		dojo.lang.forEach([
-				"handler", "beforeBegin", "onBegin", 
-				"onEnd", "onPlay", "onStop", "onAnimate"
-			], function(item){
-				if(handlers[item]){
-					this.connect(item, handlers[item]);
-				}
-			}, this);
-	}
-	if(easing && dojo.lang.isFunction(easing)){
-		this.easing=easing;
-	}
-}
-dojo.inherits(dojo.lfx.Animation, dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation, {
-	// "private" properties
-	_startTime: null,
-	_endTime: null,
-	_timer: null,
-	_percent: 0,
-	_startRepeatCount: 0,
-
-	// public methods
-	play: function(/*int?*/ delay, /*bool?*/ gotoStart){
-		// summary: Start the animation.
-		// delay: How many milliseconds to delay before starting.
-		// gotoStart: If true, starts the animation from the beginning; otherwise,
-		//            starts it from its current position.
-		if(gotoStart){
-			clearTimeout(this._timer);
-			this._active = false;
-			this._paused = false;
-			this._percent = 0;
-		}else if(this._active && !this._paused){
-			return this; // dojo.lfx.Animation
-		}
-		
-		this.fire("handler", ["beforeBegin"]);
-		this.fire("beforeBegin");
-
-		if(delay > 0){
-			setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);
-			return this; // dojo.lfx.Animation
-		}
-		
-		this._startTime = new Date().valueOf();
-		if(this._paused){
-			this._startTime -= (this.duration * this._percent / 100);
-		}
-		this._endTime = this._startTime + this.duration;
-
-		this._active = true;
-		this._paused = false;
-		
-		var step = this._percent / 100;
-		var value = this.curve.getValue(step);
-		if(this._percent == 0 ){
-			if(!this._startRepeatCount){
-				this._startRepeatCount = this.repeatCount;
-			}
-			this.fire("handler", ["begin", value]);
-			this.fire("onBegin", [value]);
-		}
-
-		this.fire("handler", ["play", value]);
-		this.fire("onPlay", [value]);
-
-		this._cycle();
-		return this; // dojo.lfx.Animation
-	},
-
-	pause: function(){
-		// summary: Pauses a running animation.
-		clearTimeout(this._timer);
-		if(!this._active){ return this; /*dojo.lfx.Animation*/}
-		this._paused = true;
-		var value = this.curve.getValue(this._percent / 100);
-		this.fire("handler", ["pause", value]);
-		this.fire("onPause", [value]);
-		return this; // dojo.lfx.Animation
-	},
-
-	gotoPercent: function(/*Decimal*/ pct, /*bool?*/ andPlay){
-		// summary: Sets the progress of the animation.
-		// pct: A percentage in decimal notation (between and including 0.0 and 1.0).
-		// andPlay: If true, play the animation after setting the progress.
-		clearTimeout(this._timer);
-		this._active = true;
-		this._paused = true;
-		this._percent = pct;
-		if(andPlay){ this.play(); }
-		return this; // dojo.lfx.Animation
-	},
-
-	stop: function(/*bool?*/ gotoEnd){
-		// summary: Stops a running animation.
-		// gotoEnd: If true, the animation will end.
-		clearTimeout(this._timer);
-		var step = this._percent / 100;
-		if(gotoEnd){
-			step = 1;
-		}
-		var value = this.curve.getValue(step);
-		this.fire("handler", ["stop", value]);
-		this.fire("onStop", [value]);
-		this._active = false;
-		this._paused = false;
-		return this; // dojo.lfx.Animation
-	},
-
-	status: function(){
-		// summary: Returns a string representation of the status of
-		//			the animation.
-		if(this._active){
-			return this._paused ? "paused" : "playing"; // String
-		}else{
-			return "stopped"; // String
-		}
-		return this;
-	},
-
-	// "private" methods
-	_cycle: function(){
-		clearTimeout(this._timer);
-		if(this._active){
-			var curr = new Date().valueOf();
-			var step = (curr - this._startTime) / (this._endTime - this._startTime);
-
-			if(step >= 1){
-				step = 1;
-				this._percent = 100;
-			}else{
-				this._percent = step * 100;
-			}
-			
-			// Perform easing
-			if((this.easing)&&(dojo.lang.isFunction(this.easing))){
-				step = this.easing(step);
-			}
-
-			var value = this.curve.getValue(step);
-			this.fire("handler", ["animate", value]);
-			this.fire("onAnimate", [value]);
-
-			if( step < 1 ){
-				this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate);
-			}else{
-				this._active = false;
-				this.fire("handler", ["end"]);
-				this.fire("onEnd");
-
-				if(this.repeatCount > 0){
-					this.repeatCount--;
-					this.play(null, true);
-				}else if(this.repeatCount == -1){
-					this.play(null, true);
-				}else{
-					if(this._startRepeatCount){
-						this.repeatCount = this._startRepeatCount;
-						this._startRepeatCount = 0;
-					}
-				}
-			}
-		}
-		return this; // dojo.lfx.Animation
-	}
-});
-
-dojo.lfx.Combine = function(/*dojo.lfx.IAnimation...*/ animations){
-	// summary: An animation object to play animations passed to it at the same time.
-	dojo.lfx.IAnimation.call(this);
-	this._anims = [];
-	this._animsEnded = 0;
-	
-	var anims = arguments;
-	if(anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))){
-		/* animations: dojo.lfx.IAnimation[]
-		   pId: a */
-		anims = anims[0];
-	}
-	
-	dojo.lang.forEach(anims, function(anim){
-		this._anims.push(anim);
-		anim.connect("onEnd", dojo.lang.hitch(this, "_onAnimsEnded"));
-	}, this);
-}
-dojo.inherits(dojo.lfx.Combine, dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine, {
-	// private members
-	_animsEnded: 0,
-	
-	// public methods
-	play: function(/*int?*/ delay, /*bool?*/ gotoStart){
-		// summary: Start the animations.
-		// delay: How many milliseconds to delay before starting.
-		// gotoStart: If true, starts the animations from the beginning; otherwise,
-		//            starts them from their current position.
-		if( !this._anims.length ){ return this; /*dojo.lfx.Combine*/}
-
-		this.fire("beforeBegin");
-
-		if(delay > 0){
-			setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);
-			return this; // dojo.lfx.Combine
-		}
-		
-		if(gotoStart || this._anims[0].percent == 0){
-			this.fire("onBegin");
-		}
-		this.fire("onPlay");
-		this._animsCall("play", null, gotoStart);
-		return this; // dojo.lfx.Combine
-	},
-	
-	pause: function(){
-		// summary: Pauses the running animations.
-		this.fire("onPause");
-		this._animsCall("pause"); 
-		return this; // dojo.lfx.Combine
-	},
-	
-	stop: function(/*bool?*/ gotoEnd){
-		// summary: Stops the running animations.
-		// gotoEnd: If true, the animations will end.
-		this.fire("onStop");
-		this._animsCall("stop", gotoEnd);
-		return this; // dojo.lfx.Combine
-	},
-	
-	// private methods
-	_onAnimsEnded: function(){
-		this._animsEnded++;
-		if(this._animsEnded >= this._anims.length){
-			this.fire("onEnd");
-		}
-		return this; // dojo.lfx.Combine
-	},
-	
-	_animsCall: function(/*String*/ funcName){
-		var args = [];
-		if(arguments.length > 1){
-			for(var i = 1 ; i < arguments.length ; i++){
-				args.push(arguments[i]);
-			}
-		}
-		var _this = this;
-		dojo.lang.forEach(this._anims, function(anim){
-			anim[funcName](args);
-		}, _this);
-		return this; // dojo.lfx.Combine
-	}
-});
-
-dojo.lfx.Chain = function(/*dojo.lfx.IAnimation...*/ animations) {
-	// summary: An animation object to play animations passed to it
-	//			one after another.
-	dojo.lfx.IAnimation.call(this);
-	this._anims = [];
-	this._currAnim = -1;
-	
-	var anims = arguments;
-	if(anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))){
-		/* animations: dojo.lfx.IAnimation[]
-		   pId: a */
-		anims = anims[0];
-	}
-	
-	var _this = this;
-	dojo.lang.forEach(anims, function(anim, i, anims_arr){
-		this._anims.push(anim);
-		if(i < anims_arr.length - 1){
-			anim.connect("onEnd", dojo.lang.hitch(this, "_playNext") );
-		}else{
-			anim.connect("onEnd", dojo.lang.hitch(this, function(){ this.fire("onEnd"); }) );
-		}
-	}, this);
-}
-dojo.inherits(dojo.lfx.Chain, dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain, {
-	// private members
-	_currAnim: -1,
-	
-	// public methods
-	play: function(/*int?*/ delay, /*bool?*/ gotoStart){
-		// summary: Start the animation sequence.
-		// delay: How many milliseconds to delay before starting.
-		// gotoStart: If true, starts the sequence from the beginning; otherwise,
-		//            starts it from its current position.
-		if( !this._anims.length ) { return this; /*dojo.lfx.Chain*/}
-		if( gotoStart || !this._anims[this._currAnim] ) {
-			this._currAnim = 0;
-		}
-
-		var currentAnimation = this._anims[this._currAnim];
-
-		this.fire("beforeBegin");
-		if(delay > 0){
-			setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);
-			return this; // dojo.lfx.Chain
-		}
-		
-		if(currentAnimation){
-			if(this._currAnim == 0){
-				this.fire("handler", ["begin", this._currAnim]);
-				this.fire("onBegin", [this._currAnim]);
-			}
-			this.fire("onPlay", [this._currAnim]);
-			currentAnimation.play(null, gotoStart);
-		}
-		return this; // dojo.lfx.Chain
-	},
-	
-	pause: function(){
-		// summary: Pauses the running animation sequence.
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].pause();
-			this.fire("onPause", [this._currAnim]);
-		}
-		return this; // dojo.lfx.Chain
-	},
-	
-	playPause: function(){
-		// summary: If the animation sequence is playing, pause it; otherwise,
-		//			play it.
-		if(this._anims.length == 0){ return this; }
-		if(this._currAnim == -1){ this._currAnim = 0; }
-		var currAnim = this._anims[this._currAnim];
-		if( currAnim ) {
-			if( !currAnim._active || currAnim._paused ) {
-				this.play();
-			} else {
-				this.pause();
-			}
-		}
-		return this; // dojo.lfx.Chain
-	},
-	
-	stop: function(){
-		// summary: Stops the running animations.
-		var currAnim = this._anims[this._currAnim];
-		if(currAnim){
-			currAnim.stop();
-			this.fire("onStop", [this._currAnim]);
-		}
-		return currAnim; // dojo.lfx.IAnimation
-	},
-	
-	// private methods
-	_playNext: function(){
-		if( this._currAnim == -1 || this._anims.length == 0 ) { return this; }
-		this._currAnim++;
-		if( this._anims[this._currAnim] ){
-			this._anims[this._currAnim].play(null, true);
-		}
-		return this; // dojo.lfx.Chain
-	}
-});
-
-dojo.lfx.combine = function(/*dojo.lfx.IAnimation...*/ animations){
-	// summary: Convenience function.  Returns a dojo.lfx.Combine created
-	//			using the animations passed in.
-	var anims = arguments;
-	if(dojo.lang.isArray(arguments[0])){
-		/* animations: dojo.lfx.IAnimation[]
-		   pId: a */
-		anims = arguments[0];
-	}
-	if(anims.length == 1){ return anims[0]; }
-	return new dojo.lfx.Combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.chain = function(/*dojo.lfx.IAnimation...*/ animations){
-	// summary: Convenience function.  Returns a dojo.lfx.Chain created
-	//			using the animations passed in.
-	var anims = arguments;
-	if(dojo.lang.isArray(arguments[0])){
-		/* animations: dojo.lfx.IAnimation[]
-		   pId: a */
-		anims = arguments[0];
-	}
-	if(anims.length == 1){ return anims[0]; }
-	return new dojo.lfx.Chain(anims); // dojo.lfx.Combine
-}
-
-dojo.require("dojo.html.style");
-dojo.provide("dojo.html.color");
-
-
-dojo.require("dojo.lang.common");
-
-dojo.html.getBackgroundColor = function(/* HTMLElement */node){
-	//	summary
-	//	returns the background color of the passed node as a 32-bit color (RGBA)
-	node = dojo.byId(node);
-	var color;
-	do{
-		color = dojo.html.getStyle(node, "background-color");
-		// Safari doesn't say "transparent"
-		if(color.toLowerCase() == "rgba(0, 0, 0, 0)") { color = "transparent"; }
-		if(node == document.getElementsByTagName("body")[0]) { node = null; break; }
-		node = node.parentNode;
-	}while(node && dojo.lang.inArray(["transparent", ""], color));
-	if(color == "transparent"){
-		color = [255, 255, 255, 0];
-	}else{
-		color = dojo.gfx.color.extractRGB(color);
-	}
-	return color;	//	array
-}
-
-dojo.provide("dojo.lfx.html");
-
-
-
-dojo.require("dojo.lang.array");
-dojo.require("dojo.html.display");
-
-
-
-dojo.lfx.html._byId = function(nodes){
-	if(!nodes){ return []; }
-	if(dojo.lang.isArrayLike(nodes)){
-		if(!nodes.alreadyChecked){
-			var n = [];
-			dojo.lang.forEach(nodes, function(node){
-				n.push(dojo.byId(node));
-			});
-			n.alreadyChecked = true;
-			return n;
-		}else{
-			return nodes;
-		}
-	}else{
-		var n = [];
-		n.push(dojo.byId(nodes));
-		n.alreadyChecked = true;
-		return n;
-	}
-}
-
-dojo.lfx.html.propertyAnimation = function(	/*DOMNode[]*/ nodes, 
-											/*Object[]*/ propertyMap, 
-											/*int*/ duration,
-											/*function*/ easing,
-											/*Object*/ handlers){
-	// summary: Returns an animation that will transition the properties of "nodes"
-	//			depending how they are defined in "propertyMap".
-	// nodes: An array of DOMNodes or one DOMNode.
-	// propertyMap: { property: String, start: Decimal?, end: Decimal?, units: String? }
-	//				An array of objects defining properties to change.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// handlers: { handler: Function?, onstart: Function?, onstop: Function?, onanimate: Function? }
-	nodes = dojo.lfx.html._byId(nodes);
-
-	var targs = {
-		"propertyMap": propertyMap,
-		"nodes": nodes,
-		"duration": duration,
-		"easing": easing||dojo.lfx.easeDefault
-	};
-	
-	var setEmUp = function(args){
-		if(args.nodes.length==1){
-			// FIXME: we're only supporting start-value filling when one node is
-			// passed
-			
-			var pm = args.propertyMap;
-			if(!dojo.lang.isArray(args.propertyMap)){
-				// it's stupid to have to pack an array with a set of objects
-				// when you can just pass in an object list
-				var parr = [];
-				for(var pname in pm){
-					pm[pname].property = pname;
-					parr.push(pm[pname]);
-				}
-				pm = args.propertyMap = parr;
-			}
-			dojo.lang.forEach(pm, function(prop){
-				if(dj_undef("start", prop)){
-					if(prop.property != "opacity"){
-						prop.start = parseInt(dojo.html.getComputedStyle(args.nodes[0], prop.property));
-					}else{
-						prop.start = dojo.html.getOpacity(args.nodes[0]);
-					}
-				}
-			});
-		}
-	}
-
-	var coordsAsInts = function(coords){
-		var cints = [];
-		dojo.lang.forEach(coords, function(c){ 
-			cints.push(Math.round(c));
-		});
-		return cints;
-	}
-
-	var setStyle = function(n, style){
-		n = dojo.byId(n);
-		if(!n || !n.style){ return; }
-		for(var s in style){
-			try{
-				if(s == "opacity"){
-					dojo.html.setOpacity(n, style[s]);
-				}else{
-						n.style[s] = style[s];
-				}
-			}catch(e){ dojo.debug(e); }
-		}
-	}
-
-	var propLine = function(properties){
-		this._properties = properties;
-		this.diffs = new Array(properties.length);
-		dojo.lang.forEach(properties, function(prop, i){
-			// calculate the end - start to optimize a bit
-			if(dojo.lang.isFunction(prop.start)){
-				prop.start = prop.start(prop, i);
-			}
-			if(dojo.lang.isFunction(prop.end)){
-				prop.end = prop.end(prop, i);
-			}
-			if(dojo.lang.isArray(prop.start)){
-				// don't loop through the arrays
-				this.diffs[i] = null;
-			}else if(prop.start instanceof dojo.gfx.color.Color){
-				// save these so we don't have to call toRgb() every getValue() call
-				prop.startRgb = prop.start.toRgb();
-				prop.endRgb = prop.end.toRgb();
-			}else{
-				this.diffs[i] = prop.end - prop.start;
-			}
-		}, this);
-
-		this.getValue = function(n){
-			var ret = {};
-			dojo.lang.forEach(this._properties, function(prop, i){
-				var value = null;
-				if(dojo.lang.isArray(prop.start)){
-					// FIXME: what to do here?
-				}else if(prop.start instanceof dojo.gfx.color.Color){
-					value = (prop.units||"rgb") + "(";
-					for(var j = 0 ; j < prop.startRgb.length ; j++){
-						value += Math.round(((prop.endRgb[j] - prop.startRgb[j]) * n) + prop.startRgb[j]) + (j < prop.startRgb.length - 1 ? "," : "");
-					}
-					value += ")";
-				}else{
-					value = ((this.diffs[i]) * n) + prop.start + (prop.property != "opacity" ? prop.units||"px" : "");
-				}
-				ret[dojo.html.toCamelCase(prop.property)] = value;
-			}, this);
-			return ret;
-		}
-	}
-	
-	var anim = new dojo.lfx.Animation({
-			beforeBegin: function(){ 
-				setEmUp(targs); 
-				anim.curve = new propLine(targs.propertyMap);
-			},
-			onAnimate: function(propValues){
-				dojo.lang.forEach(targs.nodes, function(node){
-					setStyle(node, propValues);
-				});
-			}
-		},
-		targs.duration, 
-		null,
-		targs.easing
-	);
-	if(handlers){
-		for(var x in handlers){
-			if(dojo.lang.isFunction(handlers[x])){
-				anim.connect(x, anim, handlers[x]);
-			}
-		}
-	}
-	
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html._makeFadeable = function(nodes){
-	var makeFade = function(node){
-		if(dojo.render.html.ie){
-			// only set the zoom if the "tickle" value would be the same as the
-			// default
-			if( (node.style.zoom.length == 0) &&
-				(dojo.html.getStyle(node, "zoom") == "normal") ){
-				// make sure the node "hasLayout"
-				// NOTE: this has been tested with larger and smaller user-set text
-				// sizes and works fine
-				node.style.zoom = "1";
-				// node.style.zoom = "normal";
-			}
-			// don't set the width to auto if it didn't already cascade that way.
-			// We don't want to f anyones designs
-			if(	(node.style.width.length == 0) &&
-				(dojo.html.getStyle(node, "width") == "auto") ){
-				node.style.width = "auto";
-			}
-		}
-	}
-	if(dojo.lang.isArrayLike(nodes)){
-		dojo.lang.forEach(nodes, makeFade);
-	}else{
-		makeFade(nodes);
-	}
-}
-
-dojo.lfx.html.fade = function(/*DOMNode[]*/ nodes,
-							  /*Object*/values,
-							  /*int?*/ duration,
-							  /*Function?*/ easing,
-							  /*Function?*/ callback){
-	// summary:Returns an animation that will fade the "nodes" from the start to end values passed.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// values: { start: Decimal?, end: Decimal? }
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	nodes = dojo.lfx.html._byId(nodes);
-	var props = { property: "opacity" };
-	if(!dj_undef("start", values)){
-		props.start = values.start;
-	}else{
-		props.start = function(){ return dojo.html.getOpacity(nodes[0]); };
-	}
-
-	if(!dj_undef("end", values)){
-		props.end = values.end;
-	}else{
-		dojo.raise("dojo.lfx.html.fade needs an end value");
-	}
-
-	var anim = dojo.lfx.propertyAnimation(nodes, [ props ], duration, easing);
-	anim.connect("beforeBegin", function(){
-		dojo.lfx.html._makeFadeable(nodes);
-	});
-	if(callback){
-		anim.connect("onEnd", function(){ callback(nodes, anim); });
-	}
-
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html.fadeIn = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will fade "nodes" from its current opacity to fully opaque.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	return dojo.lfx.html.fade(nodes, { end: 1 }, duration, easing, callback); // dojo.lfx.Animation
-}
-
-dojo.lfx.html.fadeOut = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will fade "nodes" from its current opacity to fully transparent.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.	
-	return dojo.lfx.html.fade(nodes, { end: 0 }, duration, easing, callback); // dojo.lfx.Animation
-}
-
-dojo.lfx.html.fadeShow = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will fade "nodes" from transparent to opaque and shows
-	//			"nodes" at the end if it is hidden.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.	
-	nodes=dojo.lfx.html._byId(nodes);
-	dojo.lang.forEach(nodes, function(node){
-		dojo.html.setOpacity(node, 0.0);
-	});
-
-	var anim = dojo.lfx.html.fadeIn(nodes, duration, easing, callback);
-	anim.connect("beforeBegin", function(){ 
-		if(dojo.lang.isArrayLike(nodes)){
-			dojo.lang.forEach(nodes, dojo.html.show);
-		}else{
-			dojo.html.show(nodes);
-		}
-	});
-
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html.fadeHide = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will fade "nodes" from its current opacity to opaque and hides
-	//			"nodes" at the end.
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	var anim = dojo.lfx.html.fadeOut(nodes, duration, easing, function(){
-		if(dojo.lang.isArrayLike(nodes)){
-			dojo.lang.forEach(nodes, dojo.html.hide);
-		}else{
-			dojo.html.hide(nodes);
-		}
-		if(callback){ callback(nodes, anim); }
-	});
-	
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html.wipeIn = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will show and wipe in "nodes".
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
-		var oprop = {  };	// old properties of node (before we mucked w/them)
-		
-		// get node height, either it's natural height or it's height specified via style or class attributes
-		// (for FF, the node has to be (temporarily) rendered to measure height)
-		// TODO: should this offscreen code be part of dojo.html, so that getBorderBox() works on hidden nodes?
-		var origTop, origLeft, origPosition;
-		with(node.style){
-			origTop=top; origLeft=left; origPosition=position;
-			top="-9999px"; left="-9999px"; position="absolute";
-			display="";
-		}
-		var nodeHeight = dojo.html.getBorderBox(node).height;
-		with(node.style){
-			top=origTop; left=origLeft; position=origPosition;
-			display="none";
-		}
-
-		var anim = dojo.lfx.propertyAnimation(node,
-			{	"height": {
-					start: 1, // 0 causes IE to display the whole panel
-					end: function(){ return nodeHeight; } 
-				}
-			}, 
-			duration, 
-			easing);
-	
-		anim.connect("beforeBegin", function(){
-			oprop.overflow = node.style.overflow;
-			oprop.height = node.style.height;
-			with(node.style){
-				overflow = "hidden";
-				height = "1px"; // 0 causes IE to display the whole panel
-			}
-			dojo.html.show(node);
-		});
-		
-		anim.connect("onEnd", function(){ 
-			with(node.style){
-				overflow = oprop.overflow;
-				height = oprop.height;
-			}
-			if(callback){ callback(node, anim); }
-		});
-		anims.push(anim);
-	});
-	
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.html.wipeOut = function(/*DOMNode[]*/ nodes, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will wipe out and hide "nodes".
-	// nodes: An array of DOMNodes or one DOMNode.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-	
-	dojo.lang.forEach(nodes, function(node){
-		var oprop = {  };	// old properties of node (before we mucked w/them)
-		var anim = dojo.lfx.propertyAnimation(node,
-			{	"height": {
-					start: function(){ return dojo.html.getContentBox(node).height; },
-					end: 1 // 0 causes IE to display the whole panel
-				} 
-			},
-			duration,
-			easing,
-			{
-				"beforeBegin": function(){
-					oprop.overflow = node.style.overflow;
-					oprop.height = node.style.height;
-					with(node.style){
-						overflow = "hidden";
-					}
-					dojo.html.show(node);
-				},
-				
-				"onEnd": function(){ 
-					dojo.html.hide(node);
-					with(node.style){
-						overflow = oprop.overflow;
-						height = oprop.height;
-					}
-					if(callback){ callback(node, anim); }
-				}
-			}
-		);
-		anims.push(anim);
-	});
-
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.html.slideTo = function(/*DOMNode*/ nodes,
-								 /*Object*/ coords,
-								 /*int?*/ duration,
-								 /*Function?*/ easing,
-								 /*Function?*/ callback){
-	// summary: Returns an animation that will slide "nodes" from its current position to
-	//			the position defined in "coords".
-	// nodes: An array of DOMNodes or one DOMNode.
-	// coords: { top: Decimal?, left: Decimal? }
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-	var compute = dojo.html.getComputedStyle;
-	
-	if(dojo.lang.isArray(coords)){
-		/* coords: Array
-		   pId: a */
-		dojo.deprecated('dojo.lfx.html.slideTo(node, array)', 'use dojo.lfx.html.slideTo(node, {top: value, left: value});', '0.5');
-		coords = { top: coords[0], left: coords[1] };
-	}
-	dojo.lang.forEach(nodes, function(node){
-		var top = null;
-		var left = null;
-		
-		var init = (function(){
-			var innerNode = node;
-			return function(){
-				var pos = compute(innerNode, 'position');
-				top = (pos == 'absolute' ? node.offsetTop : parseInt(compute(node, 'top')) || 0);
-				left = (pos == 'absolute' ? node.offsetLeft : parseInt(compute(node, 'left')) || 0);
-
-				if (!dojo.lang.inArray(['absolute', 'relative'], pos)) {
-					var ret = dojo.html.abs(innerNode, true);
-					dojo.html.setStyleAttributes(innerNode, "position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-					top = ret.y;
-					left = ret.x;
-				}
-			}
-		})();
-		init();
-		
-		var anim = dojo.lfx.propertyAnimation(node,
-			{	"top": { start: top, end: (coords.top||0) },
-				"left": { start: left, end: (coords.left||0)  }
-			},
-			duration,
-			easing,
-			{ "beforeBegin": init }
-		);
-
-		if(callback){
-			anim.connect("onEnd", function(){ callback(nodes, anim); });
-		}
-
-		anims.push(anim);
-	});
-	
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.html.slideBy = function(/*DOMNode*/ nodes, /*Object*/ coords, /*int?*/ duration, /*Function?*/ easing, /*Function?*/ callback){
-	// summary: Returns an animation that will slide "nodes" from its current position
-	//			to its current position plus the numbers defined in "coords".
-	// nodes: An array of DOMNodes or one DOMNode.
-	// coords: { top: Decimal?, left: Decimal? }
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-	var compute = dojo.html.getComputedStyle;
-
-	if(dojo.lang.isArray(coords)){
-		/* coords: Array
-		   pId: a */
-		dojo.deprecated('dojo.lfx.html.slideBy(node, array)', 'use dojo.lfx.html.slideBy(node, {top: value, left: value});', '0.5');
-		coords = { top: coords[0], left: coords[1] };
-	}
-
-	dojo.lang.forEach(nodes, function(node){
-		var top = null;
-		var left = null;
-		
-		var init = (function(){
-			var innerNode = node;
-			return function(){
-				var pos = compute(innerNode, 'position');
-				top = (pos == 'absolute' ? node.offsetTop : parseInt(compute(node, 'top')) || 0);
-				left = (pos == 'absolute' ? node.offsetLeft : parseInt(compute(node, 'left')) || 0);
-
-				if (!dojo.lang.inArray(['absolute', 'relative'], pos)) {
-					var ret = dojo.html.abs(innerNode, true);
-					dojo.html.setStyleAttributes(innerNode, "position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-					top = ret.y;
-					left = ret.x;
-				}
-			}
-		})();
-		init();
-		
-		var anim = dojo.lfx.propertyAnimation(node,
-			{
-				"top": { start: top, end: top+(coords.top||0) },
-				"left": { start: left, end: left+(coords.left||0) }
-			},
-			duration,
-			easing).connect("beforeBegin", init);
-
-		if(callback){
-			anim.connect("onEnd", function(){ callback(nodes, anim); });
-		}
-
-		anims.push(anim);
-	});
-
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.html.explode = function(/*DOMNode*/ start,
-								 /*DOMNode*/ endNode,
-								 /*int?*/ duration,
-								 /*Function?*/ easing,
-								 /*Function?*/ callback){
-	// summary: Returns an animation that will 
-	// start:
-	// endNode:
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	var h = dojo.html;
-	start = dojo.byId(start);
-	endNode = dojo.byId(endNode);
-	var startCoords = h.toCoordinateObject(start, true);
-	var outline = document.createElement("div");
-	h.copyStyle(outline, endNode);
-	if(endNode.explodeClassName){ outline.className = endNode.explodeClassName; }
-	with(outline.style){
-		position = "absolute";
-		display = "none";
-		// border = "1px solid black";
-		var backgroundStyle = h.getStyle(start, "background-color");
-		backgroundColor = backgroundStyle ? backgroundStyle.toLowerCase() : "transparent";
-		backgroundColor = (backgroundColor == "transparent") ? "rgb(221, 221, 221)" : backgroundColor;
-	}
-	dojo.body().appendChild(outline);
-
-	with(endNode.style){
-		visibility = "hidden";
-		display = "block";
-	}
-	var endCoords = h.toCoordinateObject(endNode, true);
-	with(endNode.style){
-		display = "none";
-		visibility = "visible";
-	}
-
-	var props = { opacity: { start: 0.5, end: 1.0 } };
-	dojo.lang.forEach(["height", "width", "top", "left"], function(type){
-		props[type] = { start: startCoords[type], end: endCoords[type] }
-	});
-	
-	var anim = new dojo.lfx.propertyAnimation(outline, 
-		props,
-		duration,
-		easing,
-		{
-			"beforeBegin": function(){
-				h.setDisplay(outline, "block");
-			},
-			"onEnd": function(){
-				h.setDisplay(endNode, "block");
-				outline.parentNode.removeChild(outline);
-			}
-		}
-	);
-
-	if(callback){
-		anim.connect("onEnd", function(){ callback(endNode, anim); });
-	}
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html.implode = function(/*DOMNode*/ startNode,
-								 /*DOMNode*/ end,
-								 /*int?*/ duration,
-								 /*Function?*/ easing,
-								 /*Function?*/ callback){
-	// summary: Returns an animation that will 
-	// startNode:
-	// end:
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	var h = dojo.html;
-	startNode = dojo.byId(startNode);
-	end = dojo.byId(end);
-	var startCoords = dojo.html.toCoordinateObject(startNode, true);
-	var endCoords = dojo.html.toCoordinateObject(end, true);
-
-	var outline = document.createElement("div");
-	dojo.html.copyStyle(outline, startNode);
-	if (startNode.explodeClassName) { outline.className = startNode.explodeClassName; }
-	dojo.html.setOpacity(outline, 0.3);
-	with(outline.style){
-		position = "absolute";
-		display = "none";
-		backgroundColor = h.getStyle(startNode, "background-color").toLowerCase();
-	}
-	dojo.body().appendChild(outline);
-
-	var props = { opacity: { start: 1.0, end: 0.5 } };
-	dojo.lang.forEach(["height", "width", "top", "left"], function(type){
-		props[type] = { start: startCoords[type], end: endCoords[type] }
-	});
-	
-	var anim = new dojo.lfx.propertyAnimation(outline,
-		props,
-		duration,
-		easing,
-		{
-			"beforeBegin": function(){
-				dojo.html.hide(startNode);
-				dojo.html.show(outline);
-			},
-			"onEnd": function(){
-				outline.parentNode.removeChild(outline);
-			}
-		}
-	);
-
-	if(callback){
-		anim.connect("onEnd", function(){ callback(startNode, anim); });
-	}
-	return anim; // dojo.lfx.Animation
-}
-
-dojo.lfx.html.highlight = function(/*DOMNode[]*/ nodes,
-								   /*dojo.gfx.color.Color*/ startColor,
-								   /*int?*/ duration,
-								   /*Function?*/ easing,
-								   /*Function?*/ callback){
-	// summary: Returns an animation that will set the background color
-	//			of "nodes" to startColor and transition it to "nodes"
-	//			original color.
-	// startColor: Color to transition from.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
-		var color = dojo.html.getBackgroundColor(node);
-		var bg = dojo.html.getStyle(node, "background-color").toLowerCase();
-		var bgImage = dojo.html.getStyle(node, "background-image");
-		var wasTransparent = (bg == "transparent" || bg == "rgba(0, 0, 0, 0)");
-		while(color.length > 3) { color.pop(); }
-
-		var rgb = new dojo.gfx.color.Color(startColor);
-		var endRgb = new dojo.gfx.color.Color(color);
-
-		var anim = dojo.lfx.propertyAnimation(node, 
-			{ "background-color": { start: rgb, end: endRgb } }, 
-			duration, 
-			easing,
-			{
-				"beforeBegin": function(){ 
-					if(bgImage){
-						node.style.backgroundImage = "none";
-					}
-					node.style.backgroundColor = "rgb(" + rgb.toRgb().join(",") + ")";
-				},
-				"onEnd": function(){ 
-					if(bgImage){
-						node.style.backgroundImage = bgImage;
-					}
-					if(wasTransparent){
-						node.style.backgroundColor = "transparent";
-					}
-					if(callback){
-						callback(node, anim);
-					}
-				}
-			}
-		);
-
-		anims.push(anim);
-	});
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lfx.html.unhighlight = function(/*DOMNode[]*/ nodes,
-									 /*dojo.gfx.color.Color*/ endColor,
-									 /*int?*/ duration,
-									 /*Function?*/ easing,
-									 /*Function?*/ callback){
-	// summary: Returns an animation that will transition "nodes" background color
-	//			from its current color to "endColor".
-	// endColor: Color to transition to.
-	// duration: Duration of the animation in milliseconds.
-	// easing: An easing function.
-	// callback: Function to run at the end of the animation.
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
-		var color = new dojo.gfx.color.Color(dojo.html.getBackgroundColor(node));
-		var rgb = new dojo.gfx.color.Color(endColor);
-
-		var bgImage = dojo.html.getStyle(node, "background-image");
-		
-		var anim = dojo.lfx.propertyAnimation(node, 
-			{ "background-color": { start: color, end: rgb } },
-			duration, 
-			easing,
-			{
-				"beforeBegin": function(){ 
-					if(bgImage){
-						node.style.backgroundImage = "none";
-					}
-					node.style.backgroundColor = "rgb(" + color.toRgb().join(",") + ")";
-				},
-				"onEnd": function(){ 
-					if(callback){
-						callback(node, anim);
-					}
-				}
-			}
-		);
-		anims.push(anim);
-	});
-	return dojo.lfx.combine(anims); // dojo.lfx.Combine
-}
-
-dojo.lang.mixin(dojo.lfx, dojo.lfx.html);
-
-dojo.kwCompoundRequire({
-	browser: ["dojo.lfx.html"],
-	dashboard: ["dojo.lfx.html"]
-});
-dojo.provide("dojo.lfx.*");
-
-dojo.provide("dojo.lfx.toggle");
-
-
-dojo.lfx.toggle.plain = {
-	show: function(node, duration, easing, callback){
-		dojo.html.show(node);
-		if(dojo.lang.isFunction(callback)){ callback(); }
-	},
-	
-	hide: function(node, duration, easing, callback){
-		dojo.html.hide(node);
-		if(dojo.lang.isFunction(callback)){ callback(); }
-	}
-}
-
-dojo.lfx.toggle.fade = {
-	show: function(node, duration, easing, callback){
-		dojo.lfx.fadeShow(node, duration, easing, callback).play();
-	},
-
-	hide: function(node, duration, easing, callback){
-		dojo.lfx.fadeHide(node, duration, easing, callback).play();
-	}
-}
-
-dojo.lfx.toggle.wipe = {
-	show: function(node, duration, easing, callback){
-		dojo.lfx.wipeIn(node, duration, easing, callback).play();
-	},
-
-	hide: function(node, duration, easing, callback){
-		dojo.lfx.wipeOut(node, duration, easing, callback).play();
-	}
-}
-
-dojo.lfx.toggle.explode = {
-	show: function(node, duration, easing, callback, explodeSrc){
-		dojo.lfx.explode(explodeSrc||{x:0,y:0,width:0,height:0}, node, duration, easing, callback).play();
-	},
-
-	hide: function(node, duration, easing, callback, explodeSrc){
-		dojo.lfx.implode(node, explodeSrc||{x:0,y:0,width:0,height:0}, duration, easing, callback).play();
-	}
-}
-
-dojo.provide("dojo.widget.HtmlWidget");
-
-
-dojo.require("dojo.html.display");
-
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lang.func");
-
-
-dojo.declare("dojo.widget.HtmlWidget", dojo.widget.DomWidget, {								 
-	// summary
-	//	Base class for all browser based widgets, or at least "html" widgets.
-	//	The meaning of "html" has become unclear; in practice, all widgets derive from this class.
-	
-	// templateCssPath: String
-	//	Path to CSS file for this widget
-	templateCssPath: null,
-	
-	// templatePath: String
-	//	Path to template (HTML file) for this widget
-	templatePath: null,
-
-	// lang: String
-	//	Language to display this widget in (like en-us).
-	//	Defaults to brower's specified preferred language (typically the language of the OS)
-	lang: "",
-
-	// toggle: String
-	//	Controls animation effect for when show() and hide() (or toggle()) are called.
-	//	Possible values: "plain", "wipe", "fade", "explode"
-	toggle: "plain",
-
-	// toggleDuration: Integer
-	//	Number of milliseconds for toggle animation effect to complete
-	toggleDuration: 150,
-
-	initialize: function(args, frag){
-		// summary: called after the widget is rendered; most subclasses won't override or call this function
-	},
-
-	postMixInProperties: function(args, frag){
-		if(this.lang === ""){this.lang = null;}
-		// now that we know the setting for toggle, get toggle object
-		// (default to plain toggler if user specified toggler not present)
-		this.toggleObj =
-			dojo.lfx.toggle[this.toggle.toLowerCase()] || dojo.lfx.toggle.plain;
-	},
-
-	createNodesFromText: function(txt, wrap){
-		return dojo.html.createNodesFromText(txt, wrap);
-	},
-
-	destroyRendering: function(finalize){
-		try{
-			if(this.bgIframe){
-				this.bgIframe.remove();
-				delete this.bgIframe;
-			}
-			if(!finalize && this.domNode){
-				dojo.event.browser.clean(this.domNode);
-			}
-			dojo.widget.HtmlWidget.superclass.destroyRendering.call(this);
-		}catch(e){ /* squelch! */ }
-	},
-
-	/////////////////////////////////////////////////////////
-	// Displaying/hiding the widget
-	/////////////////////////////////////////////////////////
-	isShowing: function(){
-		// summary
-		//	Tests whether widget is set to show-mode or hide-mode (see show() and 
-		//	hide() methods)
-		//
-		//	This function is poorly named.  Even if widget is in show-mode,
-		//	if it's inside a container that's hidden
-		//	(either a container widget, or just a domnode with display:none),
-		//	then it won't be displayed
-		return dojo.html.isShowing(this.domNode);	// Boolean
-	},
-
-	toggleShowing: function(){
-		// summary: show or hide the widget, to switch it's state
-		if(this.isShowing()){
-			this.hide();
-		}else{
-			this.show();
-		}
-	},
-
-	show: function(){
-		// summary: show the widget
-		if(this.isShowing()){ return; }
-		this.animationInProgress=true;
-		this.toggleObj.show(this.domNode, this.toggleDuration, null,
-			dojo.lang.hitch(this, this.onShow), this.explodeSrc);
-	},
-
-	onShow: function(){
-		// summary: called after the show() animation has completed
-		this.animationInProgress=false;
-		this.checkSize();
-	},
-
-	hide: function(){
-		// summary: hide the widget (ending up with display:none)
-		if(!this.isShowing()){ return; }
-		this.animationInProgress = true;
-		this.toggleObj.hide(this.domNode, this.toggleDuration, null,
-			dojo.lang.hitch(this, this.onHide), this.explodeSrc);
-	},
-
-	onHide: function(){
-		// summary: called after the hide() animation has completed
-		this.animationInProgress=false;
-	},
-
-	//////////////////////////////////////////////////////////////////////////////
-	// Sizing related methods
-	//  If the parent changes size then for each child it should call either
-	//   - resizeTo(): size the child explicitly
-	//   - or checkSize(): notify the child the the parent has changed size
-	//////////////////////////////////////////////////////////////////////////////
-
-	_isResized: function(w, h){
-		// summary
-		//	Test if my size has changed.
-		//	If width & height are specified then that's my new size; otherwise,
-		//	query outerWidth/outerHeight of my domNode
-
-		// If I'm not being displayed then disregard (show() must
-		// check if the size has changed)
-		if(!this.isShowing()){ return false; }
-
-		// If my parent has been resized and I have style="height: 100%"
-		// or something similar then my size has changed too.
-		var wh = dojo.html.getMarginBox(this.domNode);
-		var width=w||wh.width;
-		var height=h||wh.height;
-		if(this.width == width && this.height == height){ return false; }
-
-		this.width=width;
-		this.height=height;
-		return true;
-	},
-
-	checkSize: function(){
-		// summary
-		//	Called when my parent has changed size, but my parent won't call resizeTo().
-		//	This is useful if my size is height:100% or something similar.
-		//	Also called whenever I am shown, because the first time I am shown I may need
-		//	to do size calculations.
-		if(!this._isResized()){ return; }
-		this.onResized();
-	},
-
-	resizeTo: function(w, h){
-		// summary: explicitly set this widget's size (in pixels).
-		dojo.html.setMarginBox(this.domNode, { width: w, height: h });
-		
-		// can't do sizing if widget is hidden because referencing node.offsetWidth/node.offsetHeight returns 0.
-		// do sizing on show() instead.
-		if(this.isShowing()){
-			this.onResized();
-		}
-	},
-
-	resizeSoon: function(){
-		// summary
-		//	schedule onResized() to be called soon, after browser has had
-		//	a little more time to calculate the sizes
-		if(this.isShowing()){
-			dojo.lang.setTimeout(this, this.onResized, 0);
-		}
-	},
-
-	onResized: function(){
-		// summary
-		//	Called when my size has changed.
-		//	Must notify children if their size has (possibly) changed.
-		dojo.lang.forEach(this.children, function(child){ if(child.checkSize){child.checkSize();} });
-	}
-});
-
-dojo.kwCompoundRequire({
-	common: ["dojo.xml.Parse", 
-			 "dojo.widget.Widget", 
-			 "dojo.widget.Parse", 
-			 "dojo.widget.Manager"],
-	browser: ["dojo.widget.DomWidget",
-			  "dojo.widget.HtmlWidget"],
-	dashboard: ["dojo.widget.DomWidget",
-			  "dojo.widget.HtmlWidget"],
-	svg: 	 ["dojo.widget.SvgWidget"],
-	rhino: 	 ["dojo.widget.SwtWidget"]
-});
-dojo.provide("dojo.widget.*");
-
-dojo.kwCompoundRequire({
-	common: ["dojo.io.common"],
-	rhino: ["dojo.io.RhinoIO"],
-	browser: ["dojo.io.BrowserIO", "dojo.io.cookie"],
-	dashboard: ["dojo.io.BrowserIO", "dojo.io.cookie"]
-});
-dojo.provide("dojo.io.*");
-
-dojo.provide("dojo.widget.ContentPane");
-
-
-
-
-dojo.require("dojo.string");
-dojo.require("dojo.string.extras");
-dojo.require("dojo.html.style");
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.ContentPane",
-	dojo.widget.HtmlWidget,
-	function(){
-		// summary:
-		//		A widget that can be used as a standalone widget 
-		//		or as a baseclass for other widgets
-		//		Handles replacement of document fragment using either external uri or javascript/java 
-		//		generated markup or DomNode content, instanciating widgets within content and runs scripts.
-		//		Dont confuse it with an iframe, it only needs document fragments.
-		//		It's useful as a child of LayoutContainer, SplitContainer, or TabContainer.
-		//		But note that those classes can contain any widget as a child.
-		// scriptScope: Function
-		//		reference holder to the inline scripts container, if scriptSeparation is true
-		// bindArgs: String[]
-		//		Send in extra args to the dojo.io.bind call
-		
-		// per widgetImpl variables
-		this._styleNodes =  [];
-		this._onLoadStack = [];
-		this._onUnloadStack = [];
-		this._callOnUnload = false;
-		this._ioBindObj;
-		//	Note:
-		//		dont change this value externally
-		this.scriptScope; // undefined for now
-
-		// loading option
-		//	example:
-		//		bindArgs="preventCache:false;" overrides cacheContent
-		this.bindArgs = {};
-
-	
-	}, {
-		isContainer: true,
-
-		// loading options
-		// adjustPaths: Boolean
-		//		adjust relative paths in markup to fit this page
-		adjustPaths: true,
-
-		// href: String
-		//		The href of the content that displays now
-		//		Set this at construction if you want to load externally,
-		//		changing href after creation doesnt have any effect, see setUrl
-		href: "",
-
-		// extractContent Boolean: Extract visible content from inside of <body> .... </body>
-		extractContent: true,
-
-		// parseContent Boolean: Construct all widgets that is in content
-		parseContent:	true,
-
-		// cacheContent Boolean: Cache content retreived externally
-		cacheContent:	true,
-
-		// preload: Boolean
-		//		Force load of data even if pane is hidden.
-		// Note:
-		//		In order to delay download you need to initially hide the node it constructs from
-		preload: false,
-
-		// refreshOnShow: Boolean
-		//		Refresh (re-download) content when pane goes from hidden to shown
-		refreshOnShow: false,
-
-		// handler: String||Function
-		//		Generate pane content from a java function
-		//		The name of the java proxy function
-		handler: "",
-
-		// executeScripts: Boolean
-		//		Run scripts within content, extractContent has NO effect on this.
-		// Note:
-		//		if true scripts in content will be evaled after content is innerHTML'ed
-		executeScripts: false,
-
-		// scriptSeparation: Boolean
-		//		Run scripts in a separate scope, unique for each ContentPane
-		scriptSeparation: true,
-
-		// loadingMessage: String
-		//		Message that shows while downloading
-		loadingMessage: "Loading...",
-
-		// isLoaded: Boolean
-		//		Tells loading status
-		isLoaded: false,
-
-		postCreate: function(args, frag, parentComp){
-			if (this.handler!==""){
-				this.setHandler(this.handler);
-			}
-			if(this.isShowing() || this.preload){
-				this.loadContents(); 
-			}
-		},
-	
-		show: function(){
-			// if refreshOnShow is true, reload the contents every time; otherwise, load only the first time
-			if(this.refreshOnShow){
-				this.refresh();
-			}else{
-				this.loadContents();
-			}
-			dojo.widget.ContentPane.superclass.show.call(this);
-		},
-	
-		refresh: function(){
-			// summary:
-			//		Force a refresh (re-download) of content, be sure to turn of cache
-			this.isLoaded=false;
-			this.loadContents();
-		},
-	
-		loadContents: function() {
-			// summary:
-			//		Download if isLoaded is false, else ignore
-			if ( this.isLoaded ){
-				return;
-			}
-			if ( dojo.lang.isFunction(this.handler)) {
-				this._runHandler();
-			} else if ( this.href != "" ) {
-				this._downloadExternalContent(this.href, this.cacheContent && !this.refreshOnShow);
-			}
-		},
-		
-		setUrl: function(/*String||dojo.uri.Uri*/ url) {
-			// summary:
-			//		Reset the (external defined) content of this pane and replace with new url
-
-			//	Note:
-			//		It delays the download until widget is shown if preload is false
-			this.href = url;
-			this.isLoaded = false;
-			if ( this.preload || this.isShowing() ){
-				this.loadContents();
-			}
-		},
-
-		abort: function(){
-			// summary
-			//		Aborts a inflight download of content
-			var bind = this._ioBindObj;
-			if(!bind || !bind.abort){ return; }
-			bind.abort();
-			delete this._ioBindObj;
-		},
-	
-		_downloadExternalContent: function(url, useCache) {
-			this.abort();
-			this._handleDefaults(this.loadingMessage, "onDownloadStart");
-			var self = this;
-			this._ioBindObj = dojo.io.bind(
-				this._cacheSetting({
-					url: url,
-					mimetype: "text/html",
-					handler: function(type, data, xhr){
-						delete self._ioBindObj; // makes sure abort doesnt clear cache
-						if(type=="load"){
-							self.onDownloadEnd.call(self, url, data);
-						}else{
-							// XHR isnt a normal JS object, IE doesnt have prototype on XHR so we cant extend it or shallowCopy it
-							var e = {
-								responseText: xhr.responseText,
-								status: xhr.status,
-								statusText: xhr.statusText,
-								responseHeaders: xhr.getAllResponseHeaders(),
-								text: "Error loading '" + url + "' (" + xhr.status + " "+  xhr.statusText + ")"
-							};
-							self._handleDefaults.call(self, e, "onDownloadError");
-							self.onLoad();
-						}
-					}
-				}, useCache)
-			);
-		},
-	
-		_cacheSetting: function(bindObj, useCache){
-			for(var x in this.bindArgs){
-				if(dojo.lang.isUndefined(bindObj[x])){
-					bindObj[x] = this.bindArgs[x];
-				}
-			}
-
-			if(dojo.lang.isUndefined(bindObj.useCache)){ bindObj.useCache = useCache; }
-			if(dojo.lang.isUndefined(bindObj.preventCache)){ bindObj.preventCache = !useCache; }
-			if(dojo.lang.isUndefined(bindObj.mimetype)){ bindObj.mimetype = "text/html"; }
-			return bindObj;
-		},
-
-		onLoad: function(e){
-			// summary:
-			//		Event hook, is called after everything is loaded and widgetified 
-			this._runStack("_onLoadStack");
-			this.isLoaded=true;
-		},
-	
-		onUnLoad: function(e){
-			// summary:
-			//		Deprecated, use onUnload (lowercased load)
-			dojo.deprecated(this.widgetType+".onUnLoad, use .onUnload (lowercased load)", 0.5);
-		},
-
-		onUnload: function(e){
-			// summary:
-			//		Event hook, is called before old content is cleared
-			this._runStack("_onUnloadStack");
-			delete this.scriptScope;
-			// FIXME: remove for 0.5 along with onUnLoad
-			if(this.onUnLoad !== dojo.widget.ContentPane.prototype.onUnLoad){
-				this.onUnLoad.apply(this, arguments);
-			}
-		},
-	
-		_runStack: function(stName){
-			var st = this[stName]; var err = "";
-			var scope = this.scriptScope || window;
-			for(var i = 0;i < st.length; i++){
-				try{
-					st[i].call(scope);
-				}catch(e){ 
-					err += "\n"+st[i]+" failed: "+e.description;
-				}
-			}
-			this[stName] = [];
-	
-			if(err.length){
-				var name = (stName== "_onLoadStack") ? "addOnLoad" : "addOnUnLoad";
-				this._handleDefaults(name+" failure\n "+err, "onExecError", "debug");
-			}
-		},
-	
-		addOnLoad: function(obj, func){
-			// summary
-			//		Stores function refs and calls them one by one in the order they came in
-			//		when load event occurs.
-			//	obj: Function||Object?
-			//		holder object
-			//	func: Function
-			//		function that will be called 
-			this._pushOnStack(this._onLoadStack, obj, func);
-		},
-	
-		addOnUnload: function(obj, func){
-			// summary
-			//		Stores function refs and calls them one by one in the order they came in
-			//		when unload event occurs.
-			//	obj: Function||Object
-			//		holder object
-			//	func: Function
-			//		function that will be called 
-			this._pushOnStack(this._onUnloadStack, obj, func);
-		},
-
-		addOnUnLoad: function(){
-			// summary:
-			//		Deprecated use addOnUnload (lower cased load)
-			dojo.deprecated(this.widgetType + ".addOnUnLoad, use addOnUnload instead. (lowercased Load)", 0.5);
-			this.addOnUnload.apply(this, arguments);
-		},
-	
-		_pushOnStack: function(stack, obj, func){
-			if(typeof func == 'undefined') {
-				stack.push(obj);
-			}else{
-				stack.push(function(){ obj[func](); });
-			}
-		},
-	
-		destroy: function(){
-			// make sure we call onUnload
-			this.onUnload();
-			dojo.widget.ContentPane.superclass.destroy.call(this);
-		},
- 
-		onExecError: function(/*Object*/e){
-			// summary:
-			//		called when content script eval error or Java error occurs, preventDefault-able
-			//		default is to debug not alert as in 0.3.1
-		},
-	
-		onContentError: function(/*Object*/e){
-			// summary: 
-			//		called on DOM faults, require fault etc in content, preventDefault-able
-			//		default is to display errormessage inside pane
-		},
-	
-		onDownloadError: function(/*Object*/e){
-			// summary: 
-			//		called when download error occurs, preventDefault-able
-			//		default is to display errormessage inside pane
-		},
-	
-		onDownloadStart: function(/*Object*/e){
-			// summary:
-			//		called before download starts, preventDefault-able
-			//		default is to display loadingMessage inside pane
-			//		by changing e.text in your event handler you can change loading message
-		},
-	
-		// 
-		onDownloadEnd: function(url, data){
-			// summary:
-			//		called when download is finished
-			//
-			//	url String: url that downloaded data
-			//	data String: the markup that was downloaded
-			data = this.splitAndFixPaths(data, url);
-			this.setContent(data);
-		},
-	
-		// useful if user wants to prevent default behaviour ie: _setContent("Error...")
-		_handleDefaults: function(e, handler, messType){
-			if(!handler){ handler = "onContentError"; }
-
-			if(dojo.lang.isString(e)){ e = {text: e}; }
-
-			if(!e.text){ e.text = e.toString(); }
-
-			e.toString = function(){ return this.text; };
-
-			if(typeof e.returnValue != "boolean"){
-				e.returnValue = true; 
-			}
-			if(typeof e.preventDefault != "function"){
-				e.preventDefault = function(){ this.returnValue = false; };
-			}
-			// call our handler
-			this[handler](e);
-			if(e.returnValue){
-				switch(messType){
-					case true: // fallthrough, old compat
-					case "alert":
-						alert(e.toString()); break;
-					case "debug":
-						dojo.debug(e.toString()); break;
-					default:
-					// makes sure scripts can clean up after themselves, before we setContent
-					if(this._callOnUnload){ this.onUnload(); } 
-					// makes sure we dont try to call onUnLoad again on this event,
-					// ie onUnLoad before 'Loading...' but not before clearing 'Loading...'
-					this._callOnUnload = false;
-
-					// we might end up in a endless recursion here if domNode cant append content
-					if(arguments.callee._loopStop){
-						dojo.debug(e.toString());
-					}else{
-						arguments.callee._loopStop = true;
-						this._setContent(e.toString());
-					}
-				}
-			}
-			arguments.callee._loopStop = false;
-		},
-	
-		// pathfixes, require calls, css stuff and neccesary content clean
-		splitAndFixPaths: function(s, url){
-			// summary:
-			// 		adjusts all relative paths in (hopefully) all cases, images, remote scripts, links etc.
-			// 		splits up content in different pieces, scripts, title, style, link and whats left becomes .xml
-			//	s String:	The markup in string
-			//	url (String||dojo.uri.Uri?) url that pulled in markup
-
-			var titles = [], scripts = [],tmp = [];// init vars
-			var match = [], requires = [], attr = [], styles = [];
-			var str = '', path = '', fix = '', tagFix = '', tag = '', origPath = '';
-	
-			if(!url) { url = "./"; } // point to this page if not set
-
-			if(s){ // make sure we dont run regexes on empty content
-
-				/************** <title> ***********/
-				// khtml is picky about dom faults, you can't attach a <style> or <title> node as child of body
-				// must go into head, so we need to cut out those tags
-				var regex = /<title[^>]*>([\s\S]*?)<\/title>/i;
-				while(match = regex.exec(s)){
-					titles.push(match[1]);
-					s = s.substring(0, match.index) + s.substr(match.index + match[0].length);
-				};
-		
-				/************** adjust paths *****************/
-				if(this.adjustPaths){
-					// attributepaths one tag can have multiple paths example:
-					// <input src="..." style="url(..)"/> or <a style="url(..)" href="..">
-					// strip out the tag and run fix on that.
-					// this guarantees that we won't run replace on another tag's attribute + it was easier do
-					var regexFindTag = /<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i;
-					var regexFindAttr = /\s(src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i;
-					// these are the supported protocols, all other is considered relative
-					var regexProtocols = /^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
-		
-					while(tag = regexFindTag.exec(s)){
-						str += s.substring(0, tag.index);
-						s = s.substring((tag.index + tag[0].length), s.length);
-						tag = tag[0];
-			
-						// loop through attributes
-						tagFix = '';
-						while(attr = regexFindAttr.exec(tag)){
-							path = ""; origPath = attr[3];
-							switch(attr[1].toLowerCase()){
-								case "src":// falltrough
-								case "href":
-									if(regexProtocols.exec(origPath)){
-										path = origPath;
-									} else {
-										path = (new dojo.uri.Uri(url, origPath).toString());
-									}
-									break;
-								case "style":// style
-									path = dojo.html.fixPathsInCssText(origPath, url);
-									break;
-								default:
-									path = origPath;
-							}
-							fix = " " + attr[1] + "=" + attr[2] + path + attr[2];
-							// slices up tag before next attribute check
-							tagFix += tag.substring(0, attr.index) + fix;
-							tag = tag.substring((attr.index + attr[0].length), tag.length);
-						}
-						str += tagFix + tag; //dojo.debug(tagFix + tag);
-					}
-					s = str+s;
-				}
-
-				/****************  cut out all <style> and <link rel="stylesheet" href=".."> **************/
-				regex = /(?:<(style)[^>]*>([\s\S]*?)<\/style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
-				while(match = regex.exec(s)){
-					if(match[1] && match[1].toLowerCase() == "style"){
-						styles.push(dojo.html.fixPathsInCssText(match[2],url));
-					}else if(attr = match[3].match(/href=(['"]?)([^'">]*)\1/i)){
-						styles.push({path: attr[2]});
-					}
-					s = s.substring(0, match.index) + s.substr(match.index + match[0].length);
-				};
-
-				/***************** cut out all <script> tags, push them into scripts array ***************/
-				var regex = /<script([^>]*)>([\s\S]*?)<\/script>/i;
-				var regexSrc = /src=(['"]?)([^"']*)\1/i;
-				var regexDojoJs = /.*(\bdojo\b\.js(?:\.uncompressed\.js)?)$/;
-				var regexInvalid = /(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo\.hostenv\.writeIncludes\(\s*\);?/g;
-				var regexRequires = /dojo\.(?:(?:require(?:After)?(?:If)?)|(?:widget\.(?:manager\.)?registerWidgetPackage)|(?:(?:hostenv\.)?setModulePrefix|registerModulePath)|defineNamespace)\((['"]).*?\1\)\s*;?/;
-
-				while(match = regex.exec(s)){
-					if(this.executeScripts && match[1]){
-						if(attr = regexSrc.exec(match[1])){
-							// remove a dojo.js or dojo.js.uncompressed.js from remoteScripts
-							// we declare all files named dojo.js as bad, regardless of path
-							if(regexDojoJs.exec(attr[2])){
-								dojo.debug("Security note! inhibit:"+attr[2]+" from  being loaded again.");
-							}else{
-								scripts.push({path: attr[2]});
-							}
-						}
-					}
-					if(match[2]){
-						// remove all invalid variables etc like djConfig and dojo.hostenv.writeIncludes()
-						var sc = match[2].replace(regexInvalid, "");
-						if(!sc){ continue; }
-		
-						// cut out all dojo.require (...) calls, if we have execute 
-						// scripts false widgets dont get there require calls
-						// takes out possible widgetpackage registration as well
-						while(tmp = regexRequires.exec(sc)){
-							requires.push(tmp[0]);
-							sc = sc.substring(0, tmp.index) + sc.substr(tmp.index + tmp[0].length);
-						}
-						if(this.executeScripts){
-							scripts.push(sc);
-						}
-					}
-					s = s.substr(0, match.index) + s.substr(match.index + match[0].length);
-				}
-
-				/********* extract content *********/
-				if(this.extractContent){
-					match = s.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-					if(match) { s = match[1]; }
-				}
-	
-				/*** replace scriptScope prefix in html Event handler
-				* working order: find tags with scriptScope in a tag attribute
-				* then replace all standalone scriptScope occurencies with reference to to this widget
-				* valid onClick="scriptScope.func()" or onClick="scriptScope['func']();scriptScope.i++"
-				* not valid onClick="var.scriptScope.ref" nor onClick="var['scriptScope'].ref" */
-				if(this.executeScripts && this.scriptSeparation){
-					var regex = /(<[a-zA-Z][a-zA-Z0-9]*\s[^>]*?\S=)((['"])[^>]*scriptScope[^>]*>)/;
-					var regexAttr = /([\s'";:\(])scriptScope(.*)/; // we rely on that attribute begins ' or "
-					str = ""; 
-					while(tag = regex.exec(s)){
-						tmp = ((tag[3]=="'") ? '"': "'");fix= "";
-						str += s.substring(0, tag.index) + tag[1];
-						while(attr = regexAttr.exec(tag[2])){
-							tag[2] = tag[2].substring(0, attr.index) + attr[1] + "dojo.widget.byId("+ tmp + this.widgetId + tmp + ").scriptScope" + attr[2];
-						}
-						str += tag[2];
-						s = s.substr(tag.index + tag[0].length);
-					}
-					s = str + s;
-				}
-	 		}
-
-			return {"xml": 		s, // Object
-				"styles":		styles,
-				"titles": 		titles,
-				"requires": 	requires,
-				"scripts": 		scripts,
-				"url": 			url};
-		},
-	
-		
-		_setContent: function(cont){
-			this.destroyChildren();
-	
-			// remove old stylenodes from HEAD
-			for(var i = 0; i < this._styleNodes.length; i++){
-				if(this._styleNodes[i] && this._styleNodes[i].parentNode){
-					this._styleNodes[i].parentNode.removeChild(this._styleNodes[i]);
-				}
-			}
-			this._styleNodes = [];
-
-			try{
-				var node = this.containerNode || this.domNode;
-				while(node.firstChild){
-					dojo.html.destroyNode(node.firstChild);
-				}
-				if(typeof cont != "string"){
-					node.appendChild(cont);
-				}else{
-					node.innerHTML = cont;
-				}
-			}catch(e){
-				e.text = "Couldn't load content:"+e.description;
-				this._handleDefaults(e, "onContentError");
-			}
-		},
-	
-		setContent: function(data){
-			// summary:
-			//		Replaces old content with data content, include style classes from old content
-			//	data String||DomNode:	new content, be it Document fragment or a DomNode chain
-			//			If data contains style tags, link rel=stylesheet it inserts those styles into DOM
-			this.abort();
-			if(this._callOnUnload){ this.onUnload(); }// this tells a remote script clean up after itself
-			this._callOnUnload = true;
-	
-			if(!data || dojo.html.isNode(data)){
-				// if we do a clean using setContent(""); or setContent(#node) bypass all parsing, extractContent etc
-				this._setContent(data);
-				this.onResized();
-				this.onLoad();
-			}else{
-				// need to run splitAndFixPaths? ie. manually setting content
-				// adjustPaths is taken care of inside splitAndFixPaths
-				if(typeof data.xml != "string"){ 
-					this.href = ""; // so we can refresh safely
-					data = this.splitAndFixPaths(data); 
-				}
-
-				this._setContent(data.xml);
-
-				// insert styles from content (in same order they came in)
-				for(var i = 0; i < data.styles.length; i++){
-					if(data.styles[i].path){
-						this._styleNodes.push(dojo.html.insertCssFile(data.styles[i].path, dojo.doc(), false, true));
-					}else{
-						this._styleNodes.push(dojo.html.insertCssText(data.styles[i]));
-					}
-				}
-	
-				if(this.parseContent){
-					for(var i = 0; i < data.requires.length; i++){
-						try{
-							eval(data.requires[i]);
-						} catch(e){
-							e.text = "ContentPane: error in package loading calls, " + (e.description||e);
-							this._handleDefaults(e, "onContentError", "debug");
-						}
-					}
-				}
-				// need to allow async load, Xdomain uses it
-				// is inline function because we cant send args to dojo.addOnLoad
-				var _self = this;
-				function asyncParse(){
-					if(_self.executeScripts){
-						_self._executeScripts(data.scripts);
-					}
-	
-					if(_self.parseContent){
-						var node = _self.containerNode || _self.domNode;
-						var parser = new dojo.xml.Parse();
-						var frag = parser.parseElement(node, null, true);
-						// createSubComponents not createComponents because frag has already been created
-						dojo.widget.getParser().createSubComponents(frag, _self);
-					}
-	
-					_self.onResized();
-					_self.onLoad();
-				}
-				// try as long as possible to make setContent sync call
-				if(dojo.hostenv.isXDomain && data.requires.length){
-					dojo.addOnLoad(asyncParse);
-				}else{
-					asyncParse();
-				}
-			}
-		},
-
-		setHandler: function(/*Function*/ handler) {
-			// summary:
-			//		Generate pane content from given java function
-			var fcn = dojo.lang.isFunction(handler) ? handler : window[handler];
-			if(!dojo.lang.isFunction(fcn)) {
-				// FIXME: needs testing! somebody with java knowledge needs to try this
-				this._handleDefaults("Unable to set handler, '" + handler + "' not a function.", "onExecError", true);
-				return;
-			}
-			this.handler = function() {
-				return fcn.apply(this, arguments);
-			}
-		},
-	
-		_runHandler: function() {
-			var ret = true;
-			if(dojo.lang.isFunction(this.handler)) {
-				this.handler(this, this.domNode);
-				ret = false;
-			}
-			this.onLoad();
-			return ret;
-		},
-	
-		_executeScripts: function(scripts) {
-			// loop through the scripts in the order they came in
-			var self = this;
-			var tmp = "", code = "";
-			for(var i = 0; i < scripts.length; i++){
-				if(scripts[i].path){ // remotescript
-					dojo.io.bind(this._cacheSetting({
-						"url": 		scripts[i].path,
-						"load":     function(type, scriptStr){
-								dojo.lang.hitch(self, tmp = ";"+scriptStr);
-						},
-						"error":    function(type, error){
-								error.text = type + " downloading remote script";
-								self._handleDefaults.call(self, error, "onExecError", "debug");
-						},
-						"mimetype": "text/plain",
-						"sync":     true
-					}, this.cacheContent));
-					code += tmp;
-				}else{
-					code += scripts[i];
-				}
-			}
-
-
-			try{
-				if(this.scriptSeparation){
-					// initialize a new anonymous container for our script, dont make it part of this widgets scope chain
-					// instead send in a variable that points to this widget, useful to connect events to onLoad, onUnload etc..
-					delete this.scriptScope;
-					this.scriptScope = new (new Function('_container_', code+'; return this;'))(self);
-				}else{
-					// exec in global, lose the _container_ feature
-					var djg = dojo.global();
-					if(djg.execScript){
-						djg.execScript(code);
-					}else{
-						var djd = dojo.doc();
-						var sc = djd.createElement("script");
-						sc.appendChild(djd.createTextNode(code));
-						(this.containerNode||this.domNode).appendChild(sc);
-					}
-				}
-			}catch(e){
-				e.text = "Error running scripts from content:\n"+e.description;
-				this._handleDefaults(e, "onExecError", "debug");
-			}
-		}
-	}
-);
-
-dojo.require("dojo.html.common");
-dojo.provide("dojo.html.selection");
-
-dojo.require("dojo.dom");
-dojo.require("dojo.lang.common");
-
-/**
- * type of selection
-**/
-dojo.html.selectionType = {
-	NONE : 0, //selection is empty
-	TEXT : 1, //selection contains text (may also contains CONTROL objects)
-	CONTROL : 2 //only one element is selected (such as img, table etc)
-};
-
-dojo.html.clearSelection = function(){
-	// summary: deselect the current selection to make it empty
-	var _window = dojo.global();
-	var _document = dojo.doc();
-	try{
-		if(_window["getSelection"]){ 
-			if(dojo.render.html.safari){
-				// pulled from WebCore/ecma/kjs_window.cpp, line 2536
-				_window.getSelection().collapse();
-			}else{
-				_window.getSelection().removeAllRanges();
-			}
-		}else if(_document.selection){
-			if(_document.selection.empty){
-				_document.selection.empty();
-			}else if(_document.selection.clear){
-				_document.selection.clear();
-			}
-		}
-		return true;
-	}catch(e){
-		dojo.debug(e);
-		return false;
-	}
-}
-
-dojo.html.disableSelection = function(/*DomNode*/element){
-	// summary: disable selection on a node
-	element = dojo.byId(element)||dojo.body();
-	var h = dojo.render.html;
-	
-	if(h.mozilla){
-		element.style.MozUserSelect = "none";
-	}else if(h.safari){
-		element.style.KhtmlUserSelect = "none"; 
-	}else if(h.ie){
-		element.unselectable = "on";
-	}else{
-		return false;
-	}
-	return true;
-}
-
-dojo.html.enableSelection = function(/*DomNode*/element){
-	// summary: enable selection on a node
-	element = dojo.byId(element)||dojo.body();
-	
-	var h = dojo.render.html;
-	if(h.mozilla){ 
-		element.style.MozUserSelect = ""; 
-	}else if(h.safari){
-		element.style.KhtmlUserSelect = "";
-	}else if(h.ie){
-		element.unselectable = "off";
-	}else{
-		return false;
-	}
-	return true;
-}
-
-dojo.html.selectElement = function(/*DomNode*/element){
-	dojo.deprecated("dojo.html.selectElement", "replaced by dojo.html.selection.selectElementChildren", 0.5);
-}
-
-dojo.html.selectInputText = function(/*DomNode*/element){
-	// summary: select all the text in an input element
-	var _window = dojo.global();
-	var _document = dojo.doc();
-	element = dojo.byId(element);
-	if(_document["selection"] && dojo.body()["createTextRange"]){ // IE
-		var range = element.createTextRange();
-		range.moveStart("character", 0);
-		range.moveEnd("character", element.value.length);
-		range.select();
-	}else if(_window["getSelection"]){
-		var selection = _window.getSelection();
-		// FIXME: does this work on Safari?
-		element.setSelectionRange(0, element.value.length);
-	}
-	element.focus();
-}
-
-
-dojo.html.isSelectionCollapsed = function(){
-	dojo.deprecated("dojo.html.isSelectionCollapsed", "replaced by dojo.html.selection.isCollapsed", 0.5);
-	return dojo.html.selection.isCollapsed();
-}
-
-dojo.lang.mixin(dojo.html.selection, {
-	getType: function() {
-		// summary: Get the selection type (like document.select.type in IE).
-		if(dojo.doc()["selection"]){ //IE
-			return dojo.html.selectionType[dojo.doc().selection.type.toUpperCase()];
-		}else{
-			var stype = dojo.html.selectionType.TEXT;
-	
-			// Check if the actual selection is a CONTROL (IMG, TABLE, HR, etc...).
-			var oSel;
-			try {oSel = dojo.global().getSelection();}
-			catch (e) {}
-			
-			if(oSel && oSel.rangeCount==1){
-				var oRange = oSel.getRangeAt(0);
-				if (oRange.startContainer == oRange.endContainer && (oRange.endOffset - oRange.startOffset) == 1
-					&& oRange.startContainer.nodeType != dojo.dom.TEXT_NODE) {
-					stype = dojo.html.selectionType.CONTROL;
-				}
-			}
-			return stype;
-		}
-	},
-	isCollapsed: function() {
-		// summary: return whether the current selection is empty
-		var _window = dojo.global();
-		var _document = dojo.doc();
-		if(_document["selection"]){ // IE
-			return _document.selection.createRange().text == "";
-		}else if(_window["getSelection"]){
-			var selection = _window.getSelection();
-			if(dojo.lang.isString(selection)){ // Safari
-				return selection == "";
-			}else{ // Mozilla/W3
-				return selection.isCollapsed || selection.toString() == "";
-			}
-		}
-	},
-	getSelectedElement: function() {
-		// summary: 
-		//		Retrieves the selected element (if any), just in the case that a single
-		//		element (object like and image or a table) is selected.
-		if ( dojo.html.selection.getType() == dojo.html.selectionType.CONTROL ){
-			if(dojo.doc()["selection"]){ //IE
-				var range = dojo.doc().selection.createRange();
-		
-				if ( range && range.item ){
-					return dojo.doc().selection.createRange().item(0);
-				}
-			}else{
-				var selection = dojo.global().getSelection();
-				return selection.anchorNode.childNodes[ selection.anchorOffset ];
-			}
-		}
-	},
-	getParentElement: function() {
-		// summary: 
-		//		Get the parent element of the current selection
-		if(dojo.html.selection.getType() == dojo.html.selectionType.CONTROL){
-			var p = dojo.html.selection.getSelectedElement();
-			if(p){ return p.parentNode; }
-		}else{
-			if(dojo.doc()["selection"]){ //IE
-				return dojo.doc().selection.createRange().parentElement();
-			}else{
-				var selection = dojo.global().getSelection();
-				if(selection){
-					var node = selection.anchorNode;
-		
-					while ( node && node.nodeType != dojo.dom.ELEMENT_NODE ){
-						node = node.parentNode;
-					}
-		
-					return node;
-				}
-			}
-		}
-	},
-	getSelectedText: function(){
-		// summary:
-		//		Return the text (no html tags) included in the current selection or null if no text is selected
-		if(dojo.doc()["selection"]){ //IE
-			if(dojo.html.selection.getType() == dojo.html.selectionType.CONTROL){
-				return null;
-			}
-			return dojo.doc().selection.createRange().text;
-		}else{
-			var selection = dojo.global().getSelection();
-			if(selection){
-				return selection.toString();
-			}
-		}
-	},
-	getSelectedHtml: function(){
-		// summary:
-		//		Return the html of the current selection or null if unavailable
-		if(dojo.doc()["selection"]){ //IE
-			if(dojo.html.selection.getType() == dojo.html.selectionType.CONTROL){
-				return null;
-			}
-			return dojo.doc().selection.createRange().htmlText;
-		}else{
-			var selection = dojo.global().getSelection();
-			if(selection && selection.rangeCount){
-				var frag = selection.getRangeAt(0).cloneContents();
-				var div = document.createElement("div");
-				div.appendChild(frag);
-				return div.innerHTML;
-			}
-			return null;
-		}
-	},
-	hasAncestorElement: function(/*String*/tagName /* ... */){
-		// summary: 
-		// 		Check whether current selection has a  parent element which is of type tagName (or one of the other specified tagName)
-		return (dojo.html.selection.getAncestorElement.apply(this, arguments) != null);
-	},
-	getAncestorElement: function(/*String*/tagName /* ... */){
-		// summary:
-		//		Return the parent element of the current selection which is of type tagName (or one of the other specified tagName)
-		var node = dojo.html.selection.getSelectedElement() || dojo.html.selection.getParentElement();
-		while(node /*&& node.tagName.toLowerCase() != 'body'*/){
-			if(dojo.html.selection.isTag(node, arguments).length>0){
-				return node;
-			}
-			node = node.parentNode;
-		}
-		return null;
-	},
-	//modified from dojo.html.isTag to take an array as second parameter
-	isTag: function(/*DomNode*/node, /*Array*/tags) {
-		if(node && node.tagName) {
-			for (var i=0; i<tags.length; i++){
-				if (node.tagName.toLowerCase()==String(tags[i]).toLowerCase()){
-					return String(tags[i]).toLowerCase();
-				}
-			}
-		}
-		return "";
-	},
-	selectElement: function(/*DomNode*/element) {
-		// summary: clear previous selection and select element (including all its children)
-		var _window = dojo.global();
-		var _document = dojo.doc();
-		element = dojo.byId(element);
-		if(_document.selection && dojo.body().createTextRange){ // IE
-			try{
-				var range = dojo.body().createControlRange();
-				range.addElement(element);
-				range.select();
-			}catch(e){
-				dojo.html.selection.selectElementChildren(element);
-			}
-		}else if(_window["getSelection"]){
-			var selection = _window.getSelection();
-			// FIXME: does this work on Safari?
-			if(selection["removeAllRanges"]){ // Mozilla
-				var range = _document.createRange() ;
-				range.selectNode(element) ;
-				selection.removeAllRanges() ;
-				selection.addRange(range) ;
-			}
-		}
-	},
-	selectElementChildren: function(/*DomNode*/element){
-		// summary: clear previous selection and select the content of the node (excluding the node itself)
-		var _window = dojo.global();
-		var _document = dojo.doc();
-		element = dojo.byId(element);
-		if(_document.selection && dojo.body().createTextRange){ // IE
-			var range = dojo.body().createTextRange();
-			range.moveToElementText(element);
-			range.select();
-		}else if(_window["getSelection"]){
-			var selection = _window.getSelection();
-			if(selection["setBaseAndExtent"]){ // Safari
-				selection.setBaseAndExtent(element, 0, element, element.innerText.length - 1);
-			} else if(selection["selectAllChildren"]){ // Mozilla
-				selection.selectAllChildren(element);
-			}
-		}
-	},
-	getBookmark: function(){
-		// summary: Retrieves a bookmark that can be used with moveToBookmark to return to the same range
-		var bookmark;
-		var _document = dojo.doc();
-		if(_document["selection"]){ // IE
-			var range = _document.selection.createRange();
-			bookmark = range.getBookmark();
-		}else{
-			var selection;
-			try {selection = dojo.global().getSelection();}
-			catch (e) {}
-			if(selection){
-				var range = selection.getRangeAt(0);
-				bookmark = range.cloneRange();
-			}else{
-				dojo.debug("No idea how to store the current selection for this browser!");
-			}
-		}
-		return bookmark;
-	},
-	moveToBookmark: function(/*Object*/bookmark){
-		// summary: Moves current selection to a bookmark
-		// bookmark: this should be a returned object from dojo.html.selection.getBookmark()
-		var _document = dojo.doc();
-		if(_document["selection"]){ // IE
-			var range = _document.selection.createRange();
-			 range.moveToBookmark(bookmark);
-			 range.select();
-		}else{ //Moz/W3C
-			var selection;
-			try {selection = dojo.global().getSelection();}
-			catch (e) {}
-			if(selection && selection['removeAllRanges']){
-				selection.removeAllRanges() ;
-				selection.addRange(bookmark) ;
-			}else{
-				dojo.debug("No idea how to restore selection for this browser!");
-			}
-		}
-	},
-	collapse: function(/*Boolean*/beginning) {
-		// summary: clear current selection
-		if(dojo.global()['getSelection']){
-			var selection = dojo.global().getSelection();
-			if(selection.removeAllRanges){ // Mozilla
-				if(beginning){
-					selection.collapseToStart();
-				}else{
-					selection.collapseToEnd();
-				}
-			}else{ // Safari
-				// pulled from WebCore/ecma/kjs_window.cpp, line 2536
-				 dojo.global().getSelection().collapse(beginning);
-			}
-		}else if(dojo.doc().selection){ // IE
-			var range = dojo.doc().selection.createRange();
-			range.collapse(beginning);
-			range.select();
-		}
-	},
-	remove: function() {
-		// summary: delete current selection
-		if(dojo.doc().selection) { //IE
-			var selection = dojo.doc().selection;
-
-			if ( selection.type.toUpperCase() != "NONE" ){
-				selection.clear();
-			}
-		
-			return selection;
-		}else{
-			var selection = dojo.global().getSelection();
-
-			for ( var i = 0; i < selection.rangeCount; i++ ){
-				selection.getRangeAt(i).deleteContents();
-			}
-		
-			return selection;
-		}
-	}
-});
-
-dojo.provide("dojo.html.iframe");
-
-
-// thanks burstlib!
-dojo.html.iframeContentWindow = function(/* HTMLIFrameElement */iframe_el) {
-	//	summary
-	//	returns the window reference of the passed iframe
-	var win = dojo.html.getDocumentWindow(dojo.html.iframeContentDocument(iframe_el)) ||
-		// Moz. TODO: is this available when defaultView isn't?
-		dojo.html.iframeContentDocument(iframe_el).__parent__ ||
-		(iframe_el.name && document.frames[iframe_el.name]) || null;
-	return win;	//	Window
-}
-
-dojo.html.iframeContentDocument = function(/* HTMLIFrameElement */iframe_el){
-	//	summary
-	//	returns a reference to the document object inside iframe_el
-	var doc = iframe_el.contentDocument // W3
-		|| ((iframe_el.contentWindow)&&(iframe_el.contentWindow.document))	// IE
-		|| ((iframe_el.name)&&(document.frames[iframe_el.name])&&(document.frames[iframe_el.name].document)) 
-		|| null;
-	return doc;	//	HTMLDocument
-}
-
-dojo.html.BackgroundIframe = function(/* HTMLElement */node) {
-	//	summary
-	//	For IE z-index schenanigans
-	//	Two possible uses:
-	//	1. new dojo.html.BackgroundIframe(node)
-	//		Makes a background iframe as a child of node, that fills area (and position) of node
-	//	2. new dojo.html.BackgroundIframe()
-	//		Attaches frame to dojo.body().  User must call size() to set size.
-	if(dojo.render.html.ie55 || dojo.render.html.ie60) {
-		var html="<iframe src='javascript:false'"
-			+ " style='position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;"
-			+ "z-index: -1; filter:Alpha(Opacity=\"0\");' "
-			+ ">";
-		this.iframe = dojo.doc().createElement(html);
-		this.iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work.
-		if(node){
-			node.appendChild(this.iframe);
-			this.domNode=node;
-		}else{
-			dojo.body().appendChild(this.iframe);
-			this.iframe.style.display="none";
-		}
-	}
-}
-dojo.lang.extend(dojo.html.BackgroundIframe, {
-	iframe: null,
-	onResized: function(){
-		//	summary
-		//	Resize event handler.
-		// TODO: this function shouldn't be necessary but setting width=height=100% doesn't work!
-		if(this.iframe && this.domNode && this.domNode.parentNode){ // No parentElement if onResized() timeout event occurs on a removed domnode
-			var outer = dojo.html.getMarginBox(this.domNode);
-			if (outer.width  == 0 || outer.height == 0 ){
-				dojo.lang.setTimeout(this, this.onResized, 100);
-				return;
-			}
-			this.iframe.style.width = outer.width + "px";
-			this.iframe.style.height = outer.height + "px";
-		}
-	},
-
-	size: function(/* HTMLElement */node) {
-		// summary:
-		//		Call this function if the iframe is connected to dojo.body()
-		//		rather than the node being shadowed 
-
-		//	(TODO: erase)
-		if(!this.iframe){ return; }
-		var coords = dojo.html.toCoordinateObject(node, true, dojo.html.boxSizing.BORDER_BOX);
-		with(this.iframe.style){
-			width = coords.width + "px";
-			height = coords.height + "px";
-			left = coords.left + "px";
-			top = coords.top + "px";
-		}
-	},
-
-	setZIndex: function(/* HTMLElement */node){
-		//	summary
-		//	Sets the z-index of the background iframe.
-		if(!this.iframe){ return; }
-		if(dojo.dom.isNode(node)){
-			this.iframe.style.zIndex = dojo.html.getStyle(node, "z-index") - 1;
-		}else if(!isNaN(node)){
-			this.iframe.style.zIndex = node;
-		}
-	},
-
-	show: function(){
-		//	summary:
-		//		show the iframe
-		if(this.iframe){ 
-			this.iframe.style.display = "block";
-		}
-	},
-
-	hide: function(){
-		//	summary:
-		//		hide the iframe
-		if(this.iframe){ 
-			this.iframe.style.display = "none";
-		}
-	},
-
-	remove: function(){
-		//	summary:
-		//		remove the iframe
-		if(this.iframe){
-			dojo.html.removeNode(this.iframe, true);
-			delete this.iframe;
-			this.iframe=null;
-		}
-	}
-});
-
-dojo.provide("dojo.widget.PopupContainer");
-
-dojo.require("dojo.html.style");
-
-
-
-dojo.require("dojo.event.*");
-
-
-
-dojo.declare(
-	"dojo.widget.PopupContainerBase",
-	null,
-	function(){
-		this.queueOnAnimationFinish = [];
-	},
-{
-	// summary:
-	//		PopupContainerBase is the mixin class which provide popup behaviors:
-	//		it can open in a given position x,y or around a given node.
-	//		In addition, it handles animation and IE bleed through workaround.
-	// description:
-	//		This class can not be used standalone: it should be mixed-in to a
-	//		dojo.widget.HtmlWidget. Use PopupContainer instead if you want a
-	//		a standalone popup widget
-
-	// isShowingNow: Boolean: whether this popup is shown
-	isShowingNow: false,
-
-	// currentSubpopup: Widget: the shown sub popup if any
-	currentSubpopup: null,
-
-	// beginZIndex: Integer: the minimal popup zIndex
-	beginZIndex: 1000,
-
-	// parentPopup: Widget: parent popup widget
-	parentPopup: null,
-
-	// parent: Widget: the widget that caused me to be displayed; the logical parent.
-	parent: null,
-
-	// popupIndex: Integer: level of sub popup
-	popupIndex: 0,
-
-	// aroundBox: dojo.html.boxSizing: which bounding box to use for open aroundNode. By default use BORDER box of the aroundNode
-	aroundBox: dojo.html.boxSizing.BORDER_BOX,
-
-	// openedForWindow: Object: in which window the open() is triggered
-	openedForWindow: null,
-
-	processKey: function(/*Event*/evt){
-		// summary: key event handler
-		return false;
-	},
-
-	applyPopupBasicStyle: function(){
-		// summary: apply necessary css rules to the top domNode
-		// description:
-		//		this function should be called in sub class where a custom
-		//		templateString/templateStringPath is used (see Tooltip widget)
-		with(this.domNode.style){
-			display = 'none';
-			position = 'absolute';
-		}
-	},
-
-	aboutToShow: function() {
-		// summary: connect to this stub to modify the content of the popup
-	},
-
-	open: function(/*Integer*/x, /*Integer*/y, /*DomNode*/parent, /*Object*/explodeSrc, /*String?*/orient, /*Array?*/padding){
-		// summary:
-		//		Open the popup at position (x,y), relative to dojo.body()
-	 	//		Or open(node, parent, explodeSrc, aroundOrient) to open
-	 	//		around node
-		if (this.isShowingNow){ return; }
-
-		// if I click right button and menu is opened, then it gets 2 commands: close -> open
-		// so close enables animation and next "open" is put to queue to occur at new location
-		if(this.animationInProgress){
-			this.queueOnAnimationFinish.push(this.open, arguments);
-			return;
-		}
-
-		this.aboutToShow();
-
-		var around = false, node, aroundOrient;
-		if(typeof x == 'object'){
-			node = x;
-			aroundOrient = explodeSrc;
-			explodeSrc = parent;
-			parent = y;
-			around = true;
-		}
-
-		// save this so that the focus can be returned
-		this.parent = parent;
-
-		// for unknown reasons even if the domNode is attached to the body in postCreate(),
-		// it's not attached here, so have to attach it here.
-		dojo.body().appendChild(this.domNode);
-
-		// if explodeSrc isn't specified then explode from my parent widget
-		explodeSrc = explodeSrc || parent["domNode"] || [];
-
-		//keep track of parent popup to decided whether this is a top level popup
-		var parentPopup = null;
-		this.isTopLevel = true;
-		while(parent){
-			if(parent !== this && (parent.setOpenedSubpopup != undefined && parent.applyPopupBasicStyle != undefined)){
-				parentPopup = parent;
-				this.isTopLevel = false;
-				parentPopup.setOpenedSubpopup(this);
-				break;
-			}
-			parent = parent.parent;
-		}
-
-		this.parentPopup = parentPopup;
-		this.popupIndex = parentPopup ? parentPopup.popupIndex + 1 : 1;
-
-		if(this.isTopLevel){
-			var button = dojo.html.isNode(explodeSrc) ? explodeSrc : null;
-			dojo.widget.PopupManager.opened(this, button);
-		}
-
-		//Store the current selection and restore it before the action for a menu item
-		//is executed. This is required as clicking on an menu item deselects current selection
-		if(this.isTopLevel && !dojo.withGlobal(this.openedForWindow||dojo.global(), dojo.html.selection.isCollapsed)){
-			this._bookmark = dojo.withGlobal(this.openedForWindow||dojo.global(), dojo.html.selection.getBookmark);
-		}else{
-			this._bookmark = null;
-		}
-
-		//convert explodeSrc from format [x, y] to
-		//{left: x, top: y, width: 0, height: 0} which is the new
-		//format required by dojo.html.toCoordinateObject
-		if(explodeSrc instanceof Array){
-			explodeSrc = {left: explodeSrc[0], top: explodeSrc[1], width: 0, height: 0};
-		}
-
-		// display temporarily, and move into position, then hide again
-		with(this.domNode.style){
-			display="";
-			zIndex = this.beginZIndex + this.popupIndex;
-		}
-
-		if(around){
-			this.move(node, padding, aroundOrient);
-		}else{
-			this.move(x, y, padding, orient);
-		}
-		this.domNode.style.display="none";
-
-		this.explodeSrc = explodeSrc;
-
-		// then use the user defined method to display it
-		this.show();
-
-		this.isShowingNow = true;
-	},
-
-	// TODOC: move(node, padding, aroundOrient) how to do this?
-	move: function(/*Int*/x, /*Int*/y, /*Integer?*/padding, /*String?*/orient){
-		// summary: calculate where to place the popup
-
-		var around = (typeof x == "object");
-		if(around){
-			var aroundOrient=padding;
-			var node=x;
-			padding=y;
-			if(!aroundOrient){ //By default, attempt to open above the aroundNode, or below
-				aroundOrient = {'BL': 'TL', 'TL': 'BL'};
-			}
-			dojo.html.placeOnScreenAroundElement(this.domNode, node, padding, this.aroundBox, aroundOrient);
-		}else{
-			if(!orient){ orient = 'TL,TR,BL,BR';}
-			dojo.html.placeOnScreen(this.domNode, x, y, padding, true, orient);
-		}
-	},
-
-	close: function(/*Boolean?*/force){
-		// summary: hide the popup
-		if(force){
-			this.domNode.style.display="none";
-		}
-
-		// If we are in the process of opening the menu and we are asked to close it
-		if(this.animationInProgress){
-			this.queueOnAnimationFinish.push(this.close, []);
-			return;
-		}
-
-		this.closeSubpopup(force);
-		this.hide();
-		if(this.bgIframe){
-			this.bgIframe.hide();
-			this.bgIframe.size({left: 0, top: 0, width: 0, height: 0});
-		}
-		if(this.isTopLevel){
-			dojo.widget.PopupManager.closed(this);
-		}
-		this.isShowingNow = false;
-		// return focus to the widget that opened the menu
-
-		if(this.parent){
-			setTimeout(
-				dojo.lang.hitch(this, 
-					function(){
-						try{
-							if(this.parent['focus']){
-								this.parent.focus();
-							}else{
-								this.parent.domNode.focus(); 
-							}
-						}catch(e){dojo.debug("No idea how to focus to parent", e);}
-					}
-				),
-				10
-			);
-		}
-
-
-		//do not need to restore if current selection is not empty
-		//(use keyboard to select a menu item)
-		if(this._bookmark && dojo.withGlobal(this.openedForWindow||dojo.global(), dojo.html.selection.isCollapsed)){
-			if(this.openedForWindow){
-				this.openedForWindow.focus()
-			}
-			try{
-				dojo.withGlobal(this.openedForWindow||dojo.global(), "moveToBookmark", dojo.html.selection, [this._bookmark]);
-			}catch(e){
-				/*squelch IE internal error, see http://trac.dojotoolkit.org/ticket/1984 */
-			}
-		}
-		this._bookmark = null;
-	},
-
-	closeAll: function(/*Boolean?*/force){
-		// summary: hide all popups including sub ones
-		if (this.parentPopup){
-			this.parentPopup.closeAll(force);
-		}else{
-			this.close(force);
-		}
-	},
-
-	setOpenedSubpopup: function(/*Widget*/popup) {
-		// summary: used by sub popup to set currentSubpopup in the parent popup
-		this.currentSubpopup = popup;
-	},
-
-	closeSubpopup: function(/*Boolean?*/force) {
-		// summary: close opened sub popup
-		if(this.currentSubpopup == null){ return; }
-
-		this.currentSubpopup.close(force);
-		this.currentSubpopup = null;
-	},
-
-	onShow: function() {
-		dojo.widget.PopupContainer.superclass.onShow.apply(this, arguments);
-		// With some animation (wipe), after close, the size of the domnode is 0
-		// and next time when shown, the open() function can not determine
-		// the correct place to popup, so we store the opened size here and
-		// set it after close (in function onHide())
-		this.openedSize={w: this.domNode.style.width, h: this.domNode.style.height};
-		// prevent IE bleed through
-		if(dojo.render.html.ie){
-			if(!this.bgIframe){
-				this.bgIframe = new dojo.html.BackgroundIframe();
-				this.bgIframe.setZIndex(this.domNode);
-			}
-
-			this.bgIframe.size(this.domNode);
-			this.bgIframe.show();
-		}
-		this.processQueue();
-	},
-
-	processQueue: function() {
-		// summary: do events from queue
-		if (!this.queueOnAnimationFinish.length) return;
-
-		var func = this.queueOnAnimationFinish.shift();
-		var args = this.queueOnAnimationFinish.shift();
-
-		func.apply(this, args);
-	},
-
-	onHide: function() {
-		dojo.widget.HtmlWidget.prototype.onHide.call(this);
-
-		//restore size of the domnode, see comment in
-		//function onShow()
-		if(this.openedSize){
-			with(this.domNode.style){
-				width=this.openedSize.w;
-				height=this.openedSize.h;
-			}
-		}
-
-		this.processQueue();
-	}
-});
-
-dojo.widget.defineWidget(
-	"dojo.widget.PopupContainer",
-	[dojo.widget.HtmlWidget, dojo.widget.PopupContainerBase], {
-		// summary: dojo.widget.PopupContainer is the widget version of dojo.widget.PopupContainerBase
-		isContainer: true,
-		fillInTemplate: function(){
-			this.applyPopupBasicStyle();
-			dojo.widget.PopupContainer.superclass.fillInTemplate.apply(this, arguments);
-		}
-	});
-
-
-dojo.widget.PopupManager = new function(){
-	// summary:
-	//		the popup manager makes sure we don't have several popups
-	//		open at once. the root popup in an opening sequence calls
-	//		opened(). when a root menu closes it calls closed(). then
-	//		everything works. lovely.
-
-	this.currentMenu = null;
-	this.currentButton = null;		// button that opened current menu (if any)
-	this.currentFocusMenu = null;	// the (sub)menu which receives key events
-	this.focusNode = null;
-	this.registeredWindows = [];
-
-	this.registerWin = function(/*Window*/win){
-		// summary: register a window so that when clicks/scroll in it, the popup can be closed automatically
-		if(!win.__PopupManagerRegistered)
-		{
-			dojo.event.connect(win.document, 'onmousedown', this, 'onClick');
-			dojo.event.connect(win, "onscroll", this, "onClick");
-			dojo.event.connect(win.document, "onkey", this, 'onKey');
-			win.__PopupManagerRegistered = true;
-			this.registeredWindows.push(win);
-		}
-	};
-
-	/*
-
-	*/
-	this.registerAllWindows = function(/*Window*/targetWindow){
-		// summary:
-		//		This function register all the iframes and the top window,
-		//		so that whereever the user clicks in the page, the popup
-		//		menu will be closed
-		//		In case you add an iframe after onload event, please call
-		//		dojo.widget.PopupManager.registerWin manually
-
-		//starting from window.top, clicking everywhere in this page
-		//should close popup menus
-		if(!targetWindow) { //see comment below
-			targetWindow = dojo.html.getDocumentWindow(window.top && window.top.document || window.document);
-		}
-
-		this.registerWin(targetWindow);
-
-		for (var i = 0; i < targetWindow.frames.length; i++){
-			try{
-				//do not remove  dojo.html.getDocumentWindow, see comment in it
-				var win = dojo.html.getDocumentWindow(targetWindow.frames[i].document);
-				if(win){
-					this.registerAllWindows(win);
-				}
-			}catch(e){ /* squelch error for cross domain iframes */ }
-		}
-	};
-
-	this.unRegisterWin = function(/*Window*/win){
-		// summary: remove listeners on the registered window
-		if(win.__PopupManagerRegistered)
-		{
-			dojo.event.disconnect(win.document, 'onmousedown', this, 'onClick');
-			dojo.event.disconnect(win, "onscroll", this, "onClick");
-			dojo.event.disconnect(win.document, "onkey", this, 'onKey');
-			win.__PopupManagerRegistered = false;
-		}
-	};
-
-	this.unRegisterAllWindows = function(){
-		// summary: remove listeners on all the registered windows
-		for(var i=0;i<this.registeredWindows.length;++i){
-			this.unRegisterWin(this.registeredWindows[i]);
-		}
-		this.registeredWindows = [];
-	};
-
-	dojo.addOnLoad(this, "registerAllWindows");
-	dojo.addOnUnload(this, "unRegisterAllWindows");
-
-	this.closed = function(/*Widget*/menu){
-		// summary: notify the manager that menu is closed
-		if (this.currentMenu == menu){
-			this.currentMenu = null;
-			this.currentButton = null;
-			this.currentFocusMenu = null;
-		}
-	};
-
-	this.opened = function(/*Widget*/menu, /*DomNode*/button){
-		// summary: sets the current opened popup
-		if (menu == this.currentMenu){ return; }
-
-		if (this.currentMenu){
-			this.currentMenu.close();
-		}
-
-		this.currentMenu = menu;
-		this.currentFocusMenu = menu;
-		this.currentButton = button;
-	};
-
-	this.setFocusedMenu = function(/*Widget*/menu){
-		// summary:
-		// 		Set the current focused popup, This is used by popups which supports keyboard navigation
-		this.currentFocusMenu = menu;
-	};
-
-	this.onKey = function(/*Event*/e){
-		if (!e.key) { return; }
-		if(!this.currentMenu || !this.currentMenu.isShowingNow){ return; }
-
-		// loop from child menu up ancestor chain, ending at button that spawned the menu
-		var m = this.currentFocusMenu;
-		while (m){
-			if(m.processKey(e)){
-				e.preventDefault();
-				e.stopPropagation();
-				break;
-			}
-			m = m.parentPopup || m.parentMenu;
-		}		
-	},
-
-	this.onClick = function(/*Event*/e){
-		if (!this.currentMenu){ return; }
-
-		var scrolloffset = dojo.html.getScroll().offset;
-
-		// starting from the base menu, perform a hit test
-		// and exit when one succeeds
-
-		var m = this.currentMenu;
-
-		while (m){
-			if(dojo.html.overElement(m.domNode, e) || dojo.html.isDescendantOf(e.target, m.domNode)){
-				return;
-			}
-			m = m.currentSubpopup;
-		}
-
-		// Also, if user clicked the button that opened this menu, then
-		// that button will send the menu a close() command, so this code
-		// shouldn't try to close the menu.  Closing twice messes up animation.
-		if (this.currentButton && dojo.html.overElement(this.currentButton, e)){
-			return;
-		}
-
-		// the click didn't fall within the open menu tree
-		// so close it
-
-		this.currentMenu.closeAll(true);
-	};
-}
-
-dojo.provide("dojo.widget.DropdownContainer");
-
-
-
-dojo.require("dojo.event.*");
-
-dojo.require("dojo.html.display");
-
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.DropdownContainer",
-	dojo.widget.HtmlWidget,
-	{
-		// summary:
-		//		provides an input box and a button for a dropdown.
-		//		In subclass, the dropdown can be specified.
-
-		// inputWidth: String: width of the input box
-		inputWidth: "7em",
-
-		// id: String: id of this widget
-		id: "",
-
-		// inputId: String: id of the input box
-		inputId: "",
-
-		// inputName: String: name of the input box
-		inputName: "",
-
-		// iconURL: dojo.uri.Uri: icon for the dropdown button
-		iconURL: dojo.uri.moduleUri("dojo.widget", "templates/images/combo_box_arrow.png"),
-
-		// copyClass:
-		//		should we use the class properties on the source node instead
-		//		of our own styles?
-		copyClasses: false,
-
-		// iconAlt: dojo.uri.Uri: alt text for the dropdown button icon
-		iconAlt: "",
-
-		// containerToggle: String: toggle property of the dropdown
-		containerToggle: "plain",
-
-		// containerToggleDuration: Integer: toggle duration property of the dropdown
-		containerToggleDuration: 150,
-
-		templateString: '<span style="white-space:nowrap"><input type="hidden" name="" value="" dojoAttachPoint="valueNode" /><input name="" type="text" value="" style="vertical-align:middle;" dojoAttachPoint="inputNode" autocomplete="off" /> <img src="${this.iconURL}" alt="${this.iconAlt}" dojoAttachEvent="onclick:onIconClick" dojoAttachPoint="buttonNode" style="vertical-align:middle; cursor:pointer; cursor:hand" /></span>',
-		templateCssPath: "",
-		isContainer: true,
-
-		attachTemplateNodes: function(){
-			// summary: use attachTemplateNodes to specify containerNode, as fillInTemplate is too late for this
-			dojo.widget.DropdownContainer.superclass.attachTemplateNodes.apply(this, arguments);
-			this.popup = dojo.widget.createWidget("PopupContainer", {toggle: this.containerToggle, toggleDuration: this.containerToggleDuration});
-			this.containerNode = this.popup.domNode;
-		},
-
-		fillInTemplate: function(args, frag){
-			this.domNode.appendChild(this.popup.domNode);
-			if(this.id) { this.domNode.id = this.id; }
-			if(this.inputId){ this.inputNode.id = this.inputId; }
-			if(this.inputName){ this.inputNode.name = this.inputName; }
-			this.inputNode.style.width = this.inputWidth;
-			this.inputNode.disabled = this.disabled;
-
-			if(this.copyClasses){
-				this.inputNode.style = "";
-				this.inputNode.className = this.getFragNodeRef(frag).className;
-			}
-
-
-			dojo.event.connect(this.inputNode, "onchange", this, "onInputChange");
-		},
-
-		onIconClick: function(/*Event*/ evt){
-			if(this.disabled) return;
-			if(!this.popup.isShowingNow){
-				this.popup.open(this.inputNode, this, this.buttonNode);
-			}else{
-				this.popup.close();
-			}
-		},
-
-		hideContainer: function(){
-			// summary: hide the dropdown
-			if(this.popup.isShowingNow){
-				this.popup.close();
-			}
-		},
-
-		onInputChange: function(){
-			// summary: signal for changes in the input box
-		},
-		
-		enable: function() {
-			// summary: enable this widget to accept user input
-			this.inputNode.disabled = false;
-			dojo.widget.DropdownContainer.superclass.enable.apply(this, arguments);
-		},
-		
-		disable: function() {
-			// summary: lock this widget so that the user can't change the value
-			this.inputNode.disabled = true;
-			dojo.widget.DropdownContainer.superclass.disable.apply(this, arguments);
-		}
-	}
-);
-
-dojo.provide("dojo.widget.html.stabile");
-
-dojo.widget.html.stabile = {
-	// summary: Maintain state of widgets when user hits back/forward button
-
-	// Characters to quote in single-quoted regexprs
-	_sqQuotables: new RegExp("([\\\\'])", "g"),
-
-	// Current depth.
-	_depth: 0,
-
-	// Set to true when calling v.toString, to sniff for infinite
-	// recursion.
-	_recur: false,
-
-	// Levels of nesting of Array and object displays.
-	// If when >= depth, no display or array or object internals.
-	depthLimit: 2
-};
-
-//// PUBLIC METHODS
-
-dojo.widget.html.stabile.getState = function(id){
-	// summary
-	//	Get the state stored for the widget with the given ID, or undefined
-	//	if none.
-
-	dojo.widget.html.stabile.setup();
-	return dojo.widget.html.stabile.widgetState[id];
-}
-
-dojo.widget.html.stabile.setState = function(id, state, isCommit){
-	// summary
-	//		Set the state stored for the widget with the given ID.  If isCommit
-	//		is true, commits all widget state to more stable storage.
-
-	dojo.widget.html.stabile.setup();
-	dojo.widget.html.stabile.widgetState[id] = state;
-	if(isCommit){
-		dojo.widget.html.stabile.commit(dojo.widget.html.stabile.widgetState);
-	}
-}
-
-dojo.widget.html.stabile.setup = function(){
-	// summary
-	//		Sets up widgetState: a hash keyed by widgetId, maps to an object
-	//		or array writable with "describe".  If there is data in the widget
-	//		storage area, use it, otherwise initialize an empty object.
-
-	if(!dojo.widget.html.stabile.widgetState){
-		var text = dojo.widget.html.stabile._getStorage().value;
-		dojo.widget.html.stabile.widgetState = text ? dj_eval("("+text+")") : {};
-	}
-}
-
-dojo.widget.html.stabile.commit = function(state){
-	// summary
-	//		Commits all widget state to more stable storage, so if the user
-	//		navigates away and returns, it can be restored.
-
-	dojo.widget.html.stabile._getStorage().value = dojo.widget.html.stabile.description(state);
-}
-
-dojo.widget.html.stabile.description = function(v, showAll){
-	// summary
-	//		Return a JSON "description string" for the given value.
-	//		Supports only core JavaScript types with literals, plus Date,
-	//		and cyclic structures are unsupported.
-	//		showAll defaults to false -- if true, this becomes a simple symbolic
-	//		object dumper, but you cannot "eval" the output.
-
-	// Save and later restore dojo.widget.html.stabile._depth;
-	var depth = dojo.widget.html.stabile._depth;
-
-	var describeThis = function() {
-		 return this.description(this, true);
-	} 
-	
-	try {
-
-		if(v===void(0)){
-			return "undefined";
-		}
-		if(v===null){
-			return "null";
-		}
-		if(typeof(v)=="boolean" || typeof(v)=="number"
-		    || v instanceof Boolean || v instanceof Number){
-			return v.toString();
-		}
-
-		if(typeof(v)=="string" || v instanceof String){
-			// Quote strings and their contents as required.
-			// Replacing by $& fails in IE 5.0
-			var v1 = v.replace(dojo.widget.html.stabile._sqQuotables, "\\$1"); 
-			v1 = v1.replace(/\n/g, "\\n");
-			v1 = v1.replace(/\r/g, "\\r");
-			// Any other important special cases?
-			return "'"+v1+"'";
-		}
-
-		if(v instanceof Date){
-			// Create a data constructor.
-			return "new Date("+d.getFullYear+","+d.getMonth()+","+d.getDate()+")";
-		}
-
-		var d;
-		if(v instanceof Array || v.push){
-			// "push" test needed for KHTML/Safari, don't know why -cp
-
-			if(depth>=dojo.widget.html.stabile.depthLimit)
-			  return "[ ... ]";
-
-			d = "[";
-			var first = true;
-			dojo.widget.html.stabile._depth++;
-			for(var i=0; i<v.length; i++){
-				// Skip functions and undefined values
-				// if(v[i]==undef || typeof(v[i])=="function")
-				//   continue;
-				if(first){
-					first = false;
-				}else{
-					d += ",";
-				}
-				d+=arguments.callee(v[i], showAll);
-			}
-			return d+"]";
-		}
-
-		if(v.constructor==Object
-		    || v.toString==describeThis){
-			if(depth>=dojo.widget.html.stabile.depthLimit)
-			  return "{ ... }";
-
-			// Instanceof Hash is good, or if we just use Objects,
-			// we can say v.constructor==Object.
-			// IE (5?) lacks hasOwnProperty, but perhaps objects do not always
-			// have prototypes??
-			if(typeof(v.hasOwnProperty)!="function" && v.prototype){
-				throw new Error("description: "+v+" not supported by script engine");
-			}
-			var first = true;
-			d = "{";
-			dojo.widget.html.stabile._depth++;
-			for(var key in v){
-				// Skip values that are functions or undefined.
-				if(v[key]==void(0) || typeof(v[key])=="function")
-					continue;
-				if(first){
-					first = false;
-				}else{
-					d += ", ";
-				}
-				var kd = key;
-				// If the key is not a legal identifier, use its description.
-				// For strings this will quote the stirng.
-				if(!kd.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/)){
-					kd = arguments.callee(key, showAll);
-				}
-				d += kd+": "+arguments.callee(v[key], showAll);
-			}
-			return d+"}";
-		}
-
-		if(showAll){
-			if(dojo.widget.html.stabile._recur){
-				// Save the original definitions of toString;
-				var objectToString = Object.prototype.toString;
-				return objectToString.apply(v, []);
-			}else{
-				dojo.widget.html.stabile._recur = true;
-				return v.toString();
-			}
-		}else{
-			// log("Description? "+v.toString()+", "+typeof(v));
-			throw new Error("Unknown type: "+v);
-			return "'unknown'";
-		}
-
-	} finally {
-		// Always restore the global current depth.
-		dojo.widget.html.stabile._depth = depth;
-	}
-
-}
-
-
-
-//// PRIVATE TO MODULE
-
-dojo.widget.html.stabile._getStorage = function(){
-	// summary
-	//	Gets an object (form field) with a read/write "value" property.
-
-	if (dojo.widget.html.stabile.dataField) {
-		return dojo.widget.html.stabile.dataField;
-	}
-	var form = document.forms._dojo_form;
-	return dojo.widget.html.stabile.dataField = form ? form.stabile : {value: ""};
-}
-
-
-dojo.provide("dojo.widget.Dialog");
-
-
-
-dojo.require("dojo.event.*");
-
-
-dojo.require("dojo.html.display");
-
-
-dojo.declare(
-	"dojo.widget.ModalDialogBase", 
-	null,
-	{
-		// summary
-		//	Mixin for widgets implementing a modal dialog
-
-		isContainer: true,
-
-		// focusElement: String
-		//	provide a focusable element or element id if you need to
-		//	work around FF's tendency to send focus into outer space on hide
-		focusElement: "",
-
-		// bgColor: String
-		//	color of viewport when displaying a dialog
-		bgColor: "black",
-		
-		// bgOpacity: Number
-		//	opacity (0~1) of viewport color (see bgColor attribute)
-		bgOpacity: 0.4,
-
-		// followScroll: Boolean
-		//	if true, readjusts the dialog (and dialog background) when the user moves the scrollbar
-		followScroll: true,
-
-		// closeOnBackgroundClick: Boolean
-		//	clicking anywhere on the background will close the dialog
-		closeOnBackgroundClick: false,
-
-		trapTabs: function(/*Event*/ e){
-			// summary
-			//	callback on focus
-			if(e.target == this.tabStartOuter) {
-				if(this._fromTrap) {
-					this.tabStart.focus();
-					this._fromTrap = false;
-				} else {
-					this._fromTrap = true;
-					this.tabEnd.focus();
-				}
-			} else if (e.target == this.tabStart) {
-				if(this._fromTrap) {
-					this._fromTrap = false;
-				} else {
-					this._fromTrap = true;
-					this.tabEnd.focus();
-				}
-			} else if(e.target == this.tabEndOuter) {
-				if(this._fromTrap) {
-					this.tabEnd.focus();
-					this._fromTrap = false;
-				} else {
-					this._fromTrap = true;
-					this.tabStart.focus();
-				}
-			} else if(e.target == this.tabEnd) {
-				if(this._fromTrap) {
-					this._fromTrap = false;
-				} else {
-					this._fromTrap = true;
-					this.tabStart.focus();
-				}
-			}
-		},
-
-		clearTrap: function(/*Event*/ e) {
-			// summary
-			//	callback on blur
-			var _this = this;
-			setTimeout(function() {
-				_this._fromTrap = false;
-			}, 100);
-		},
-
-		postCreate: function() {
-			// summary
-			//	if the target mixin class already defined postCreate,
-			//	dojo.widget.ModalDialogBase.prototype.postCreate.call(this)
-			//	should be called in its postCreate()
-			with(this.domNode.style){
-				position = "absolute";
-				zIndex = 999;
-				display = "none";
-				overflow = "visible";
-			}
-			var b = dojo.body();
-			b.appendChild(this.domNode);
-
-			// make background (which sits behind the dialog but above the normal text)
-			this.bg = document.createElement("div");
-			this.bg.className = "dialogUnderlay";
-			with(this.bg.style){
-				position = "absolute";
-				left = top = "0px";
-				zIndex = 998;
-				display = "none";
-			}
-			b.appendChild(this.bg);
-			this.setBackgroundColor(this.bgColor);
-
-			this.bgIframe = new dojo.html.BackgroundIframe();
-            if(this.bgIframe.iframe){
-				with(this.bgIframe.iframe.style){
-					position = "absolute";
-					left = top = "0px";
-					zIndex = 90;
-					display = "none";
-				}
-			}
-
-			if(this.closeOnBackgroundClick){
-				dojo.event.kwConnect({srcObj: this.bg, srcFunc: "onclick",
-					adviceObj: this, adviceFunc: "onBackgroundClick", once: true});
-			}
-		},
-
-		uninitialize: function(){
-			this.bgIframe.remove();
-			dojo.html.removeNode(this.bg, true);
-		},
-
-		setBackgroundColor: function(/*String*/ color) {
-			// summary
-			//	changes background color specified by "bgColor" parameter
-			//	usage:
-			//		setBackgroundColor("black");
-			//		setBackgroundColor(0xff, 0xff, 0xff);
-			if(arguments.length >= 3) {
-				color = new dojo.gfx.color.Color(arguments[0], arguments[1], arguments[2]);
-			} else {
-				color = new dojo.gfx.color.Color(color);
-			}
-			this.bg.style.backgroundColor = color.toString();
-			return this.bgColor = color;	// String: the color
-		},
-
-		setBackgroundOpacity: function(/*Number*/ op) {
-			// summary
-			//	changes background opacity set by "bgOpacity" parameter
-			if(arguments.length == 0) { op = this.bgOpacity; }
-			dojo.html.setOpacity(this.bg, op);
-			try {
-				this.bgOpacity = dojo.html.getOpacity(this.bg);
-			} catch (e) {
-				this.bgOpacity = op;
-			}
-			return this.bgOpacity;	// Number: the opacity
-		},
-
-		_sizeBackground: function() {
-			if(this.bgOpacity > 0) {
-				
-				var viewport = dojo.html.getViewport();
-				var h = viewport.height;
-				var w = viewport.width;
-				with(this.bg.style){
-					width = w + "px";
-					height = h + "px";
-				}
-				var scroll_offset = dojo.html.getScroll().offset;
-				this.bg.style.top = scroll_offset.y + "px";
-				this.bg.style.left = scroll_offset.x + "px";
-				// process twice since the scroll bar may have been removed
-				// by the previous resizing
-				var viewport = dojo.html.getViewport();
-				if (viewport.width != w) { this.bg.style.width = viewport.width + "px"; }
-				if (viewport.height != h) { this.bg.style.height = viewport.height + "px"; }
-			}
-			this.bgIframe.size(this.bg);
-		},
-
-		_showBackground: function() {
-			if(this.bgOpacity > 0) {
-				this.bg.style.display = "block";
-			}
-			if(this.bgIframe.iframe){
-				this.bgIframe.iframe.style.display = "block";
-			}
-		},
-
-		placeModalDialog: function() {
-			// summary: position modal dialog in center of screen
-
-			var scroll_offset = dojo.html.getScroll().offset;
-			var viewport_size = dojo.html.getViewport();
-			
-			// find the size of the dialog (dialog needs to be showing to get the size)
-			var mb;
-			if(this.isShowing()){
-				mb = dojo.html.getMarginBox(this.domNode);
-			}else{
-				dojo.html.setVisibility(this.domNode, false);
-				dojo.html.show(this.domNode);
-				mb = dojo.html.getMarginBox(this.domNode);
-				dojo.html.hide(this.domNode);
-				dojo.html.setVisibility(this.domNode, true);
-			}
-			
-			var x = scroll_offset.x + (viewport_size.width - mb.width)/2;
-			var y = scroll_offset.y + (viewport_size.height - mb.height)/2;
-			with(this.domNode.style){
-				left = x + "px";
-				top = y + "px";
-			}
-		},
-
-		_onKey: function(/*Event*/ evt){
-			if (evt.key){
-				// see if the key is for the dialog
-				var node = evt.target;
-				while (node != null){
-					if (node == this.domNode){
-						return; // yes, so just let it go
-					}
-					node = node.parentNode;
-				}
-				// this key is for the disabled document window
-				if (evt.key != evt.KEY_TAB){ // allow tabbing into the dialog for a11y
-					dojo.event.browser.stopEvent(evt);
-				// opera won't tab to a div
-				}else if (!dojo.render.html.opera){
-					try {
-						this.tabStart.focus(); 
-					} catch(e){}
-				}
-			}
-		},
-
-		showModalDialog: function() {
-			// summary
-			//	call this function in show() of subclass before calling superclass.show()
-			if (this.followScroll && !this._scrollConnected){
-				this._scrollConnected = true;
-				dojo.event.connect(window, "onscroll", this, "_onScroll");
-			}
-			dojo.event.connect(document.documentElement, "onkey", this, "_onKey");
-
-			this.placeModalDialog();
-			this.setBackgroundOpacity();
-			this._sizeBackground();
-			this._showBackground();
-			this._fromTrap = true; 
-
-			// set timeout to allow the browser to render dialog 
-			setTimeout(dojo.lang.hitch(this, function(){
-				try{
-					this.tabStart.focus();
-				}catch(e){}
-			}), 50);
-
-		},
-
-		hideModalDialog: function(){
-			// summary
-			//	call this function in hide() of subclass
-
-			// workaround for FF focus going into outer space
-			if (this.focusElement) {
-				dojo.byId(this.focusElement).focus(); 
-				dojo.byId(this.focusElement).blur();
-			}
-
-			this.bg.style.display = "none";
-			this.bg.style.width = this.bg.style.height = "1px";
-            if(this.bgIframe.iframe){
-				this.bgIframe.iframe.style.display = "none";
-			}
-
-			dojo.event.disconnect(document.documentElement, "onkey", this, "_onKey");
-			if (this._scrollConnected){
-				this._scrollConnected = false;
-				dojo.event.disconnect(window, "onscroll", this, "_onScroll");
-			}
-		},
-
-		_onScroll: function(){
-			var scroll_offset = dojo.html.getScroll().offset;
-			this.bg.style.top = scroll_offset.y + "px";
-			this.bg.style.left = scroll_offset.x + "px";
-			this.placeModalDialog();
-		},
-
-		checkSize: function() {
-			if(this.isShowing()){
-				this._sizeBackground();
-				this.placeModalDialog();
-				this.onResized();
-			}
-		},
-		
-		onBackgroundClick: function(){
-			// summary
-			//		Callback on background click.
-			//		Clicking anywhere on the background will close the dialog, but only
-			//		if the dialog doesn't have an explicit close button, and only if
-			//		the dialog doesn't have a blockDuration.
-			if(this.lifetime - this.timeRemaining >= this.blockDuration){ return; }
-			this.hide();
-		}
-	});
-
-dojo.widget.defineWidget(
-	"dojo.widget.Dialog",
-	[dojo.widget.ContentPane, dojo.widget.ModalDialogBase],
-	{
-		// summary
-		//	Pops up a modal dialog window, blocking access to the screen and also graying out the screen
-		//	Dialog is extended from ContentPane so it supports all the same parameters (href, etc.)
-
-		templateString:"<div id=\"${this.widgetId}\" class=\"dojoDialog\" dojoattachpoint=\"wrapper\">\n\t<span dojoattachpoint=\"tabStartOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\"\ttabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabStart\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoattachpoint=\"containerNode\" style=\"position: relative; z-index: 2;\"></div>\n\t<span dojoattachpoint=\"tabEnd\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabEndOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n</div>\n",
-
-		// blockDuration: Integer
-		//	number of seconds for which the user cannot dismiss the dialog
-		blockDuration: 0,
-		
-		// lifetime: Integer
-		//	if set, this controls the number of seconds the dialog will be displayed before automatically disappearing
-		lifetime: 0,
-
-		// closeNode: String
-		//	Id of button or other dom node to click to close this dialog
-		closeNode: "",
-
-		postMixInProperties: function(){
-			dojo.widget.Dialog.superclass.postMixInProperties.apply(this, arguments);
-			if(this.closeNode){
-				this.setCloseControl(this.closeNode);
-			}
-		},
-
-		postCreate: function(){
-			dojo.widget.Dialog.superclass.postCreate.apply(this, arguments);
-			dojo.widget.ModalDialogBase.prototype.postCreate.apply(this, arguments);
-		},
-
-		show: function() {
-			if(this.lifetime){
-				this.timeRemaining = this.lifetime;
-				if(this.timerNode){
-					this.timerNode.innerHTML = Math.ceil(this.timeRemaining/1000);
-				}
-				if(this.blockDuration && this.closeNode){
-					if(this.lifetime > this.blockDuration){
-						this.closeNode.style.visibility = "hidden";
-					}else{
-						this.closeNode.style.display = "none";
-					}
-				}
-				if (this.timer) {
-					clearInterval(this.timer);
-				}
-				this.timer = setInterval(dojo.lang.hitch(this, "_onTick"), 100);
-			}
-
-			this.showModalDialog();
-			dojo.widget.Dialog.superclass.show.call(this);
-		},
-
-		onLoad: function(){
-			// when href is specified we need to reposition
-			// the dialog after the data is loaded
-			this.placeModalDialog();
-			dojo.widget.Dialog.superclass.onLoad.call(this);
-		},
-		
-		fillInTemplate: function(){
-			// dojo.event.connect(this.domNode, "onclick", this, "killEvent");
-		},
-
-		hide: function(){
-			this.hideModalDialog();
-			dojo.widget.Dialog.superclass.hide.call(this);
-
-			if(this.timer){
-				clearInterval(this.timer);
-			}
-		},
-		
-		setTimerNode: function(node){
-			// summary
-			//	specify into which node to write the remaining # of seconds
-			// TODO: make this a parameter too
-			this.timerNode = node;
-		},
-
-		setCloseControl: function(/*String|DomNode*/ node) {
-			// summary
-			//	Specify which node is the close button for this dialog.
-			//	If no close node is specified then clicking anywhere on the screen will close the dialog.
-			this.closeNode = dojo.byId(node);
-			dojo.event.connect(this.closeNode, "onclick", this, "hide");
-		},
-
-		setShowControl: function(/*String|DomNode*/ node) {
-			// summary
-			//	when specified node is clicked, show this dialog
-			// TODO: make this a parameter too
-			node = dojo.byId(node);
-			dojo.event.connect(node, "onclick", this, "show");
-		},
-
-		_onTick: function(){
-			// summary
-			//	callback every second that the timer clicks
-			if(this.timer){
-				this.timeRemaining -= 100;
-				if(this.lifetime - this.timeRemaining >= this.blockDuration){
-					// TODO: this block of code is executing over and over again, rather than just once
-					if(this.closeNode){
-						this.closeNode.style.visibility = "visible";
-					}
-				}
-				if(!this.timeRemaining){
-					clearInterval(this.timer);
-					this.hide();
-				}else if(this.timerNode){
-					this.timerNode.innerHTML = Math.ceil(this.timeRemaining/1000);
-				}
-			}
-		}
-	}
-);
-
-dojo.provide("dojo.widget.ComboBox");
-
-
-dojo.require("dojo.event.*");
-
-dojo.require("dojo.html.*");
-dojo.require("dojo.string");
-
-
-
-dojo.declare(
-	"dojo.widget.incrementalComboBoxDataProvider",
-	null,
-	function(options){
-		// summary:
-		//		Reference implementation / interface for Combobox incremental data provider.
-		//		This class takes a search string and returns values that match
-		//		that search string.  The filtering of values (to find values matching given
-		//		search string) is done on the server.
-		//
-		// options:
-		//		Structure containing {dataUrl: "foo.js?search={searchString}"} or similar data.
-		//		dataUrl is a URL that is passed the search string a returns a JSON structure
-		//		showing the matching values, like [ ["Alabama","AL"], ["Alaska","AK"], ["American Samoa","AS"] ]
-
-		this.searchUrl = options.dataUrl;
-
-		// TODO: cache doesn't work
-		this._cache = {};
-
-		this._inFlight = false;
-		this._lastRequest = null;
-
-		// allowCache: Boolean
-		//	Setting to use/not use cache for previously seen values
-		//	TODO: caching doesn't work.
-		//	TODO: read the setting for this value from the widget parameters
-		this.allowCache = false;
-	},
-	{
-		_addToCache: function(/*String*/ keyword, /*Array*/ data){
-			if(this.allowCache){
-				this._cache[keyword] = data;
-			}
-		},
-
-		startSearch: function(/*String*/ searchStr, /*Function*/ callback){
-			// summary:
-			//		Start the search for patterns that match searchStr, and call
-			//		specified callback functions with the results
-			// searchStr:
-			//		The characters the user has typed into the <input>.
-			// callback:
-			//		This function will be called with the result, as an
-			//		array of label/value pairs (the value is used for the Select widget).  Example:
-			//		[ ["Alabama","AL"], ["Alaska","AK"], ["American Samoa","AS"] ]
-
-			if(this._inFlight){
-				// FIXME: implement backoff!
-			}
-			var tss = encodeURIComponent(searchStr);
-			var realUrl = dojo.string.substituteParams(this.searchUrl, {"searchString": tss});
-			var _this = this;
-			var request = this._lastRequest = dojo.io.bind({
-				url: realUrl,
-				method: "get",
-				mimetype: "text/json",
-				load: function(type, data, evt){
-					_this._inFlight = false;
-					if(!dojo.lang.isArray(data)){
-						var arrData = [];
-						for(var key in data){
-							arrData.push([data[key], key]);
-						}
-						data = arrData;
-					}
-					_this._addToCache(searchStr, data);
-					if (request == _this._lastRequest){
-						callback(data);
-					}
-				}
-			});
-			this._inFlight = true;
-		}
-	}
-);
-
-dojo.declare(
-	"dojo.widget.basicComboBoxDataProvider",
-	null,
-	function(/*Object*/ options, /*DomNode*/ node){
-		// summary:
-		//		Reference implementation / interface for Combobox data provider.
-		//		This class takes a search string and returns values that match
-		//		that search string.    All possible values for the combobox are downloaded
-		//		on initialization, and then startSearch() runs locally,
-		//		merely filting that downloaded list, to find values matching search string
-		//
-		//		NOTE: this data provider is designed as a naive reference
-		//		implementation, and as such it is written more for readability than
-		//		speed. A deployable data provider would implement lookups, search
-		//		caching (and invalidation), and a significantly less naive data
-		//		structure for storage of items.
-		//
-		//	options: Object
-		//		Options object.  Example:
-		//		{
-		//			dataUrl: String (URL to query to get list of possible drop down values),
-		//			setAllValues: Function (callback for setting initially selected value)
-		//		}
-		//		The return format for dataURL is (for example)
-		//			[ ["Alabama","AL"], ["Alaska","AK"], ["American Samoa","AS"] ... ]
-		//
-		// node:
-		//		Pointer to the domNode in the original markup.
-		//		This is needed in the case when the list of values is embedded
-		//		in the html like <select> <option>Alabama</option> <option>Arkansas</option> ...
-		//		rather than specified as a URL.
-
-		// _data: Array
-		//		List of every possible value for the drop down list
-		//		startSearch() simply searches this array and returns matching values.
-		this._data = [];
-
-		// searchLimit: Integer
-		//		Maximum number of results to return.
-		//		TODO: need to read this value from the widget parameters
-		this.searchLimit = 30;
-
-		// searchType: String
-		//		Defines what values match the search string; see searchType parameter
-		//		of ComboBox for details
-		//		TODO: need to read this value from the widget parameters; the setting in ComboBox is being ignored.
-		this.searchType = "STARTSTRING";
-
-		// caseSensitive: Boolean
-		//		Should search be case sensitive?
-		//		TODO: this should be a parameter to combobox?
-		this.caseSensitive = false;
-
-		if(!dj_undef("dataUrl", options) && !dojo.string.isBlank(options.dataUrl)){
-			this._getData(options.dataUrl);
-		}else{
-			// check to see if we can populate the list from <option> elements
-			if((node)&&(node.nodeName.toLowerCase() == "select")){
-				// NOTE: we're not handling <optgroup> here yet
-				var opts = node.getElementsByTagName("option");
-				var ol = opts.length;
-				var data = [];
-				for(var x=0; x<ol; x++){
-					var text = opts[x].textContent || opts[x].innerText || opts[x].innerHTML;
-					var keyValArr = [String(text), String(opts[x].value)];
-					data.push(keyValArr);
-					if(opts[x].selected){
-						options.setAllValues(keyValArr[0], keyValArr[1]);
-					}
-				}
-				this.setData(data);
-			}
-		}
-	},
-	{
-		_getData: function(/*String*/ url){
-			dojo.io.bind({
-				url: url,
-				load: dojo.lang.hitch(this, function(type, data, evt){
-					if(!dojo.lang.isArray(data)){
-						var arrData = [];
-						for(var key in data){
-							arrData.push([data[key], key]);
-						}
-						data = arrData;
-					}
-					this.setData(data);
-				}),
-				mimetype: "text/json"
-			});
-		},
-
-		startSearch: function(/*String*/ searchStr, /*Function*/ callback){
-			// summary:
-			//		Start the search for patterns that match searchStr.
-			// searchStr:
-			//		The characters the user has typed into the <input>.
-			// callback:
-			//		This function will be called with the result, as an
-			//		array of label/value pairs (the value is used for the Select widget).  Example:
-			//		[ ["Alabama","AL"], ["Alaska","AK"], ["American Samoa","AS"] ]
-
-			// FIXME: need to add timeout handling here!!
-			this._performSearch(searchStr, callback);
-		},
-
-		_performSearch: function(/*String*/ searchStr, /*Function*/ callback){
-			//
-			//	NOTE: this search is LINEAR, which means that it exhibits perhaps
-			//	the worst possible speed characteristics of any search type. It's
-			//	written this way to outline the responsibilities and interfaces for
-			//	a search.
-			//
-			var st = this.searchType;
-			// FIXME: this is just an example search, which means that we implement
-			// only a linear search without any of the attendant (useful!) optimizations
-			var ret = [];
-			if(!this.caseSensitive){
-				searchStr = searchStr.toLowerCase();
-			}
-			for(var x=0; x<this._data.length; x++){
-				if((this.searchLimit > 0)&&(ret.length >= this.searchLimit)){
-					break;
-				}
-				// FIXME: we should avoid copies if possible!
-				var dataLabel = new String((!this.caseSensitive) ? this._data[x][0].toLowerCase() : this._data[x][0]);
-				if(dataLabel.length < searchStr.length){
-					// this won't ever be a good search, will it? What if we start
-					// to support regex search?
-					continue;
-				}
-
-				if(st == "STARTSTRING"){
-					if(searchStr == dataLabel.substr(0, searchStr.length)){
-						ret.push(this._data[x]);
-					}
-				}else if(st == "SUBSTRING"){
-					// this one is a gimmie
-					if(dataLabel.indexOf(searchStr) >= 0){
-						ret.push(this._data[x]);
-					}
-				}else if(st == "STARTWORD"){
-					// do a substring search and then attempt to determine if the
-					// preceeding char was the beginning of the string or a
-					// whitespace char.
-					var idx = dataLabel.indexOf(searchStr);
-					if(idx == 0){
-						// implicit match
-						ret.push(this._data[x]);
-					}
-					if(idx <= 0){
-						// if we didn't match or implicily matched, march onward
-						continue;
-					}
-					// otherwise, we have to go figure out if the match was at the
-					// start of a word...
-					// this code is taken almost directy from nWidgets
-					var matches = false;
-					while(idx!=-1){
-						// make sure the match either starts whole string, or
-						// follows a space, or follows some punctuation
-						if(" ,/(".indexOf(dataLabel.charAt(idx-1)) != -1){
-							// FIXME: what about tab chars?
-							matches = true; break;
-						}
-						idx = dataLabel.indexOf(searchStr, idx+1);
-					}
-					if(!matches){
-						continue;
-					}else{
-						ret.push(this._data[x]);
-					}
-				}
-			}
-			callback(ret);
-		},
-
-		setData: function(/*Array*/ pdata){
-			// summary: set (or reset) the data and initialize lookup structures
-			this._data = pdata;
-		}
-	}
-);
-
-dojo.widget.defineWidget(
-	"dojo.widget.ComboBox",
-	dojo.widget.HtmlWidget,
-	{
-		// summary:
-		//		Auto-completing text box, and base class for Select widget.
-		//
-		//		The drop down box's values are populated from an class called
-		//		a data provider, which returns a list of values based on the characters
-		//		that the user has typed into the input box.
-		//
-		//		Some of the options to the ComboBox are actually arguments to the data
-		//		provider.
-
-		// forceValidOption: Boolean
-		//		If true, only allow selection of strings in drop down list.
-		//		If false, user can select a value from the drop down, or just type in
-		//		any random value.
-		forceValidOption: false,
-
-		// searchType: String
-		//		Argument to data provider.
-		//		Specifies rule for matching typed in string w/list of available auto-completions.
-		//			startString - look for auto-completions that start w/the specified string.
-		//			subString - look for auto-completions containing the typed in string.
-		//			startWord - look for auto-completions where any word starts w/the typed in string.
-		searchType: "stringstart",
-
-		// dataProvider: Object
-		//		(Read only) reference to data provider object created for this combobox
-		//		according to "dataProviderClass" argument.
-		dataProvider: null,
-
-		// autoComplete: Boolean
-		//		If you type in a partial string, and then tab out of the <input> box,
-		//		automatically copy the first entry displayed in the drop down list to
-		//		the <input> field
-		autoComplete: true,
-
-		// searchDelay: Integer
-		//		Delay in milliseconds between when user types something and we start
-		//		searching based on that value
-		searchDelay: 100,
-
-		// dataUrl: String
-		//		URL argument passed to data provider object (class name specified in "dataProviderClass")
-		//		An example of the URL format for the default data provider is
-		//		"remoteComboBoxData.js?search=%{searchString}"
-		dataUrl: "",
-
-		// fadeTime: Integer
-		//		Milliseconds duration of fadeout for drop down box
-		fadeTime: 200,
-
-		// maxListLength: Integer
-		//		 Limits list to X visible rows, scroll on rest
-		maxListLength: 8,
-
-		// mode: String
-		//		Mode must be specified unless dataProviderClass is specified.
-		//		"local" to inline search string, "remote" for JSON-returning live search
-		//		or "html" for dumber live search.
-		mode: "local",
-
-		// selectedResult: Array
-		//		(Read only) array specifying the value/label that the user selected
-		selectedResult: null,
-
-		// dataProviderClass: String
-		//		Name of data provider class (code that maps a search string to a list of values)
-		//		The class must match the interface demonstrated by dojo.widget.incrementalComboBoxDataProvider
-		dataProviderClass: "",
-
-		// buttonSrc: URI
-		//		URI for the down arrow icon to the right of the input box.
-		buttonSrc: dojo.uri.moduleUri("dojo.widget", "templates/images/combo_box_arrow.png"),
-
-		// dropdownToggle: String
-		//		Animation effect for showing/displaying drop down box
-		dropdownToggle: "fade",
-
-		templateString:"<span _=\"whitespace and CR's between tags adds &nbsp; in FF\"\n\tclass=\"dojoComboBoxOuter\"\n\t><input style=\"display:none\"  tabindex=\"-1\" name=\"\" value=\"\" \n\t\tdojoAttachPoint=\"comboBoxValue\"\n\t><input style=\"display:none\"  tabindex=\"-1\" name=\"\" value=\"\" \n\t\tdojoAttachPoint=\"comboBoxSelectionValue\"\n\t><input type=\"text\" autocomplete=\"off\" class=\"dojoComboBox\"\n\t\tdojoAttachEvent=\"key:_handleKeyEvents; keyUp: onKeyUp; compositionEnd; onResize;\"\n\t\tdojoAttachPoint=\"textInputNode\"\n\t><img hspace=\"0\"\n\t\tvspace=\"0\"\n\t\tclass=\"dojoComboBox\"\n\t\tdojoAttachPoint=\"downArrowNode\"\n\t\tdojoAttachEvent=\"onMouseUp: handleArrowClick; onResize;\"\n\t\tsrc=\"${this.buttonSrc}\"\n></span>\n",
-		templateCssString:".dojoComboBoxOuter {\n\tborder: 0px !important;\n\tmargin: 0px !important;\n\tpadding: 0px !important;\n\tbackground: transparent !important;\n\twhite-space: nowrap !important;\n}\n\n.dojoComboBox {\n\tborder: 1px inset #afafaf;\n\tmargin: 0px;\n\tpadding: 0px;\n\tvertical-align: middle !important;\n\tfloat: none !important;\n\tposition: static !important;\n\tdisplay: inline !important;\n}\n\n/* the input box */\ninput.dojoComboBox {\n\tborder-right-width: 0px !important; \n\tmargin-right: 0px !important;\n\tpadding-right: 0px !important;\n}\n\n/* the down arrow */\nimg.dojoComboBox {\n\tborder-left-width: 0px !important;\n\tpadding-left: 0px !important;\n\tmargin-left: 0px !important;\n}\n\n/* IE vertical-alignment calculations can be off by +-1 but these margins are collapsed away */\n.dj_ie img.dojoComboBox {\n\tmargin-top: 1px; \n\tmargin-bottom: 1px; \n}\n\n/* the drop down */\n.dojoComboBoxOptions {\n\tfont-family: Verdana, Helvetica, Garamond, sans-serif;\n\t/* font-size: 0.7em; */\n\tbackground-color: white;\n\tborder: 1px solid #afafaf;\n\tposition: absolute;\n\tz-index: 1000; \n\toverflow: auto;\n\tcursor: default;\n}\n\n.dojoComboBoxItem {\n\tpadding-left: 2px;\n\tpadding-top: 2px;\n\tmargin: 0px;\n}\n\n.dojoComboBoxItemEven {\n\tbackground-color: #f4f4f4;\n}\n\n.dojoComboBoxItemOdd {\n\tbackground-color: white;\n}\n\n.dojoComboBoxItemHighlight {\n\tbackground-color: #63709A;\n\tcolor: white;\n}\n",templateCssPath: dojo.uri.moduleUri("dojo.widget", "templates/ComboBox.css"),
-
-		setValue: function(/*String*/ value){
-			// summary: Sets the value of the combobox
-			this.comboBoxValue.value = value;
-			if (this.textInputNode.value != value){ // prevent mucking up of selection
-				this.textInputNode.value = value;
-				// only change state and value if a new value is set
-				dojo.widget.html.stabile.setState(this.widgetId, this.getState(), true);
-				this.onValueChanged(value);
-			}
-		},
-
-		onValueChanged: function(/*String*/ value){
-			// summary: callback when value changes, for user to attach to
-		},
-
-		getValue: function(){
-			// summary: Rerturns combo box value
-			return this.comboBoxValue.value;
-		},
-
-		getState: function(){
-			// summary:
-			//	Used for saving state of ComboBox when navigates to a new
-			//	page, in case they then hit the browser's "Back" button.
-			return {value: this.getValue()};
-		},
-
-		setState: function(/*Object*/ state){
-			// summary:
-			//	Used for restoring state of ComboBox when has navigated to a new
-			//	page but then hits browser's "Back" button.
-			this.setValue(state.value);
-		},
-
-		enable:function(){
-			this.disabled=false;
-			this.textInputNode.removeAttribute("disabled");
-		},
-
-		disable: function(){
-			this.disabled = true;
-			this.textInputNode.setAttribute("disabled",true);
-		},
-
-		_getCaretPos: function(/*DomNode*/ element){
-			// khtml 3.5.2 has selection* methods as does webkit nightlies from 2005-06-22
-			if(dojo.lang.isNumber(element.selectionStart)){
-				// FIXME: this is totally borked on Moz < 1.3. Any recourse?
-				return element.selectionStart;
-			}else if(dojo.render.html.ie){
-				// in the case of a mouse click in a popup being handled,
-				// then the document.selection is not the textarea, but the popup
-				// var r = document.selection.createRange();
-				// hack to get IE 6 to play nice. What a POS browser.
-				var tr = document.selection.createRange().duplicate();
-				var ntr = element.createTextRange();
-				tr.move("character",0);
-				ntr.move("character",0);
-				try {
-					// If control doesnt have focus, you get an exception.
-					// Seems to happen on reverse-tab, but can also happen on tab (seems to be a race condition - only happens sometimes).
-					// There appears to be no workaround for this - googled for quite a while.
-					ntr.setEndPoint("EndToEnd", tr);
-					return String(ntr.text).replace(/\r/g,"").length;
-				} catch (e){
-					return 0; // If focus has shifted, 0 is fine for caret pos.
-				}
-
-			}
-		},
-
-		_setCaretPos: function(/*DomNode*/ element, /*Number*/ location){
-			location = parseInt(location);
-			this._setSelectedRange(element, location, location);
-		},
-
-		_setSelectedRange: function(/*DomNode*/ element, /*Number*/ start, /*Number*/ end){
-			if(!end){ end = element.value.length; }  // NOTE: Strange - should be able to put caret at start of text?
-			// Mozilla
-			// parts borrowed from http://www.faqts.com/knowledge_base/view.phtml/aid/13562/fid/130
-			if(element.setSelectionRange){
-				element.focus();
-				element.setSelectionRange(start, end);
-			}else if(element.createTextRange){ // IE
-				var range = element.createTextRange();
-				with(range){
-					collapse(true);
-					moveEnd('character', end);
-					moveStart('character', start);
-					select();
-				}
-			}else{ //otherwise try the event-creation hack (our own invention)
-				// do we need these?
-				element.value = element.value;
-				element.blur();
-				element.focus();
-				// figure out how far back to go
-				var dist = parseInt(element.value.length)-end;
-				var tchar = String.fromCharCode(37);
-				var tcc = tchar.charCodeAt(0);
-				for(var x = 0; x < dist; x++){
-					var te = document.createEvent("KeyEvents");
-					te.initKeyEvent("keypress", true, true, null, false, false, false, false, tcc, tcc);
-					element.dispatchEvent(te);
-				}
-			}
-		},
-
-		_handleKeyEvents: function(/*Event*/ evt){
-			// summary: handles keyboard events
-			if(evt.ctrlKey || evt.altKey || !evt.key){ return; }
-
-			// reset these
-			this._prev_key_backspace = false;
-			this._prev_key_esc = false;
-
-			var k = dojo.event.browser.keys;
-			var doSearch = true;
-
-			switch(evt.key){
-	 			case k.KEY_DOWN_ARROW:
-					if(!this.popupWidget.isShowingNow){
-						this._startSearchFromInput();
-					}
-					this._highlightNextOption();
-					dojo.event.browser.stopEvent(evt);
-					return;
-				case k.KEY_UP_ARROW:
-					this._highlightPrevOption();
-					dojo.event.browser.stopEvent(evt);
-					return;
-				case k.KEY_TAB:
-					// using linux alike tab for autocomplete
-					if(!this.autoComplete && this.popupWidget.isShowingNow && this._highlighted_option){
-						dojo.event.browser.stopEvent(evt);
-						this._selectOption({ 'target': this._highlighted_option, 'noHide': false});
-
-						// put caret last
-						this._setSelectedRange(this.textInputNode, this.textInputNode.value.length, null);
-					}else{
-						this._selectOption();
-						return;
-					}
-					break;
-				case k.KEY_ENTER:
-					// prevent submitting form if we press enter with list open
-					if(this.popupWidget.isShowingNow){
-						dojo.event.browser.stopEvent(evt);
-					}
-					if(this.autoComplete){
-						this._selectOption();
-						return;
-					}
-					// fallthrough
-				case " ":
-					if(this.popupWidget.isShowingNow && this._highlighted_option){
-						dojo.event.browser.stopEvent(evt);
-						this._selectOption();
-						this._hideResultList();
-						return;
-					}
-					break;
-				case k.KEY_ESCAPE:
-					this._hideResultList();
-					this._prev_key_esc = true;
-					return;
-				case k.KEY_BACKSPACE:
-					this._prev_key_backspace = true;
-					if(!this.textInputNode.value.length){
-						this.setAllValues("", "");
-						this._hideResultList();
-						doSearch = false;
-					}
-					break;
-				case k.KEY_RIGHT_ARROW: // fall through
-				case k.KEY_LEFT_ARROW: // fall through
-					doSearch = false;
-					break;
-				default:// non char keys (F1-F12 etc..)  shouldn't open list
-					if(evt.charCode==0){
-						doSearch = false;
-					}
-			}
-
-			if(this.searchTimer){
-				clearTimeout(this.searchTimer);
-			}
-			if(doSearch){
-				// if we have gotten this far we dont want to keep our highlight
-				this._blurOptionNode();
-
-				// need to wait a tad before start search so that the event bubbles through DOM and we have value visible
-				this.searchTimer = setTimeout(dojo.lang.hitch(this, this._startSearchFromInput), this.searchDelay);
-			}
-		},
-
-		compositionEnd: function(/*Event*/ evt){
-			// summary: When inputting characters using an input method, such as Asian
-			// languages, it will generate this event instead of onKeyDown event
-			evt.key = evt.keyCode;
-			this._handleKeyEvents(evt);
-		},
-
-		onKeyUp: function(/*Event*/ evt){
-			// summary: callback on key up event
-			this.setValue(this.textInputNode.value);
-		},
-
-		setSelectedValue: function(/*String*/ value){
-			// summary:
-			//		This sets a hidden value associated w/the displayed value.
-			//		The hidden value (and this function) shouldn't be used; if
-			//		you need a hidden value then use Select widget instead of ComboBox.
-			// TODO: remove?
-			// FIXME, not sure what to do here!
-			this.comboBoxSelectionValue.value = value;
-		},
-
-		setAllValues: function(/*String*/ value1, /*String*/ value2){
-			// summary:
-			//		This sets the displayed value and hidden value.
-			//		The hidden value (and this function) shouldn't be used; if
-			//		you need a hidden value then use Select widget instead of ComboBox.
-			this.setSelectedValue(value2);
-			this.setValue(value1);
-		},
-
-		_focusOptionNode: function(/*DomNode*/ node){
-			// summary: does the actual highlight
-			if(this._highlighted_option != node){
-				this._blurOptionNode();
-				this._highlighted_option = node;
-				dojo.html.addClass(this._highlighted_option, "dojoComboBoxItemHighlight");
-			}
-		},
-
-		_blurOptionNode: function(){
-			// sumary: removes highlight on highlighted
-			if(this._highlighted_option){
-				dojo.html.removeClass(this._highlighted_option, "dojoComboBoxItemHighlight");
-				this._highlighted_option = null;
-			}
-		},
-
-		_highlightNextOption: function(){
-			if((!this._highlighted_option) || !this._highlighted_option.parentNode){
-				this._focusOptionNode(this.optionsListNode.firstChild);
-			}else if(this._highlighted_option.nextSibling){
-				this._focusOptionNode(this._highlighted_option.nextSibling);
-			}
-			dojo.html.scrollIntoView(this._highlighted_option);
-		},
-
-		_highlightPrevOption: function(){
-			if(this._highlighted_option && this._highlighted_option.previousSibling){
-				this._focusOptionNode(this._highlighted_option.previousSibling);
-			}else{
-				this._highlighted_option = null;
-				this._hideResultList();
-				return;
-			}
-			dojo.html.scrollIntoView(this._highlighted_option);
-		},
-
-		_itemMouseOver: function(/*Event*/ evt){
-			if (evt.target === this.optionsListNode){ return; }
-			this._focusOptionNode(evt.target);
-			dojo.html.addClass(this._highlighted_option, "dojoComboBoxItemHighlight");
-		},
-
-		_itemMouseOut: function(/*Event*/ evt){
-			if (evt.target === this.optionsListNode){ return; }
-			this._blurOptionNode();
-		},
-
-		onResize: function(){
-			// summary: this function is called when the input area has changed size
-			var inputSize = dojo.html.getContentBox(this.textInputNode);
-			if( inputSize.height <= 0 ){
-				// need more time to calculate size
-				dojo.lang.setTimeout(this, "onResize", 100);
-				return;
-			}
-			var buttonSize = { width: inputSize.height, height: inputSize.height};
-			dojo.html.setContentBox(this.downArrowNode, buttonSize);
-		},
-
-		fillInTemplate: function(/*Object*/ args, /*Object*/ frag){
-			// there's some browser specific CSS in ComboBox.css
-			dojo.html.applyBrowserClass(this.domNode);
-
-			var source = this.getFragNodeRef(frag);
-			if (! this.name && source.name){ this.name = source.name; }
-			this.comboBoxValue.name = this.name;
-			this.comboBoxSelectionValue.name = this.name+"_selected";
-
-			/* different nodes get different parts of the style */
-			dojo.html.copyStyle(this.domNode, source);
-			dojo.html.copyStyle(this.textInputNode, source);
-			dojo.html.copyStyle(this.downArrowNode, source);
-			with (this.downArrowNode.style){ // calculate these later
-				width = "0px";
-				height = "0px";
-			}
-
-			// Use specified data provider class; if no class is specified
-			// then use comboboxDataProvider or incrmentalComboBoxDataProvider
-			// depending on setting of mode
-			var dpClass;
-			if(this.dataProviderClass){
-				if(typeof this.dataProviderClass == "string"){
-					dpClass = dojo.evalObjPath(this.dataProviderClass)
-				}else{
-					dpClass = this.dataProviderClass;
-				}
-			}else{
-				if(this.mode == "remote"){
-					dpClass = dojo.widget.incrementalComboBoxDataProvider;
-				}else{
-					dpClass = dojo.widget.basicComboBoxDataProvider;
-				}
-			}
-			this.dataProvider = new dpClass(this, this.getFragNodeRef(frag));
-
-			this.popupWidget = new dojo.widget.createWidget("PopupContainer",
-				{toggle: this.dropdownToggle, toggleDuration: this.toggleDuration});
-			dojo.event.connect(this, 'destroy', this.popupWidget, 'destroy');
-			this.optionsListNode = this.popupWidget.domNode;
-			this.domNode.appendChild(this.optionsListNode);
-			dojo.html.addClass(this.optionsListNode, 'dojoComboBoxOptions');
-			dojo.event.connect(this.optionsListNode, 'onclick', this, '_selectOption');
-			dojo.event.connect(this.optionsListNode, 'onmouseover', this, '_onMouseOver');
-			dojo.event.connect(this.optionsListNode, 'onmouseout', this, '_onMouseOut');
-
-			// TODO: why does onmouseover and onmouseout connect to two separate handlers???
-			dojo.event.connect(this.optionsListNode, "onmouseover", this, "_itemMouseOver");
-			dojo.event.connect(this.optionsListNode, "onmouseout", this, "_itemMouseOut");
-		},
-
-		_openResultList: function(/*Array*/ results){
-			if (this.disabled){
-				return;
-			}
-			this._clearResultList();
-			if(!results.length){
-				this._hideResultList();
-			}
-
-			if(	(this.autoComplete)&&
-				(results.length)&&
-				(!this._prev_key_backspace)&&
-				(this.textInputNode.value.length > 0)){
-				var cpos = this._getCaretPos(this.textInputNode);
-				// only try to extend if we added the last character at the end of the input
-				if((cpos+1) > this.textInputNode.value.length){
-					// only add to input node as we would overwrite Capitalisation of chars
-					this.textInputNode.value += results[0][0].substr(cpos);
-					// build a new range that has the distance from the earlier
-					// caret position to the end of the first string selected
-					this._setSelectedRange(this.textInputNode, cpos, this.textInputNode.value.length);
-				}
-			}
-
-			var even = true;
-			while(results.length){
-				var tr = results.shift();
-				if(tr){
-					var td = document.createElement("div");
-					td.appendChild(document.createTextNode(tr[0]));
-					td.setAttribute("resultName", tr[0]);
-					td.setAttribute("resultValue", tr[1]);
-					td.className = "dojoComboBoxItem "+((even) ? "dojoComboBoxItemEven" : "dojoComboBoxItemOdd");
-					even = (!even);
-					this.optionsListNode.appendChild(td);
-				}
-			}
-
-			// show our list (only if we have content, else nothing)
-			this._showResultList();
-		},
-
-		_onFocusInput: function(){
-			this._hasFocus = true;
-		},
-
-		_onBlurInput: function(){
-			this._hasFocus = false;
-			this._handleBlurTimer(true, 500);
-		},
-
-		_handleBlurTimer: function(/*Boolean*/clear, /*Number*/ millisec){
-			// summary: collect all blur timers issues here
-			if(this.blurTimer && (clear || millisec)){
-				clearTimeout(this.blurTimer);
-			}
-			if(millisec){ // we ignore that zero is false and never sets as that never happens in this widget
-				this.blurTimer = dojo.lang.setTimeout(this, "_checkBlurred", millisec);
-			}
-		},
-
-		_onMouseOver: function(/*Event*/ evt){
-			// summary: needed in IE and Safari as inputTextNode loses focus when scrolling optionslist
-			if(!this._mouseover_list){
-				this._handleBlurTimer(true, 0);
-				this._mouseover_list = true;
-			}
-		},
-
-		_onMouseOut:function(/*Event*/ evt){
-			// summary: needed in IE and Safari as inputTextNode loses focus when scrolling optionslist
-			var relTarget = evt.relatedTarget;
-			try { // fixes #1807
-				if(!relTarget || relTarget.parentNode != this.optionsListNode){
-					this._mouseover_list = false;
-					this._handleBlurTimer(true, 100);
-					this._tryFocus();
-				}
-			}catch(e){}
-		},
-
-		_isInputEqualToResult: function(/*String*/ result){
-			var input = this.textInputNode.value;
-			if(!this.dataProvider.caseSensitive){
-				input = input.toLowerCase();
-				result = result.toLowerCase();
-			}
-			return (input == result);
-		},
-
-		_isValidOption: function(){
-			var tgt = dojo.html.firstElement(this.optionsListNode);
-			var isValidOption = false;
-			while(!isValidOption && tgt){
-				if(this._isInputEqualToResult(tgt.getAttribute("resultName"))){
-					isValidOption = true;
-				}else{
-					tgt = dojo.html.nextElement(tgt);
-				}
-			}
-			return isValidOption;
-		},
-
-		_checkBlurred: function(){
-			if(!this._hasFocus && !this._mouseover_list){
-				this._hideResultList();
-				// clear the list if the user empties field and moves away.
-				if(!this.textInputNode.value.length){
-					this.setAllValues("", "");
-					return;
-				}
-
-				var isValidOption = this._isValidOption();
-				// enforce selection from option list
-				if(this.forceValidOption && !isValidOption){
-					this.setAllValues("", "");
-					return;
-				}
-				if(!isValidOption){// clear
-					this.setSelectedValue("");
-				}
-			}
-		},
-
-		_selectOption: function(/*Event*/ evt){
-			var tgt = null;
-			if(!evt){
-				evt = { target: this._highlighted_option };
-			}
-
-			if(!dojo.html.isDescendantOf(evt.target, this.optionsListNode)){
-				// handle autocompletion where the the user has hit ENTER or TAB
-
-				// if the input is empty do nothing
-				if(!this.textInputNode.value.length){
-					return;
-				}
-				tgt = dojo.html.firstElement(this.optionsListNode);
-
-				// user has input value not in option list
-				if(!tgt || !this._isInputEqualToResult(tgt.getAttribute("resultName"))){
-					return;
-				}
-				// otherwise the user has accepted the autocompleted value
-			}else{
-				tgt = evt.target;
-			}
-
-			while((tgt.nodeType!=1)||(!tgt.getAttribute("resultName"))){
-				tgt = tgt.parentNode;
-				if(tgt === dojo.body()){
-					return false;
-				}
-			}
-
-			this.selectedResult = [tgt.getAttribute("resultName"), tgt.getAttribute("resultValue")];
-			this.setAllValues(tgt.getAttribute("resultName"), tgt.getAttribute("resultValue"));
-			if(!evt.noHide){
-				this._hideResultList();
-				this._setSelectedRange(this.textInputNode, 0, null);
-			}
-			this._tryFocus();
-		},
-
-		_clearResultList: function(){
-			if(this.optionsListNode.innerHTML){
-				this.optionsListNode.innerHTML = "";  // browser natively knows how to collect this memory
-			}
-		},
-
-		_hideResultList: function(){
-			this.popupWidget.close();
-		},
-
-		_showResultList: function(){
-			// Our dear friend IE doesnt take max-height so we need to calculate that on our own every time
-			var childs = this.optionsListNode.childNodes;
-			if(childs.length){
-				var visibleCount = Math.min(childs.length,this.maxListLength);
-
-				with(this.optionsListNode.style)
-				{
-					display = "";
-					if(visibleCount == childs.length){
-						//no scrollbar is required, so unset height to let browser calcuate it,
-						//as in css, overflow is already set to auto
-						height = "";
-					}else{
-						//show it first to get the correct dojo.style.getOuterHeight(childs[0])
-						//FIXME: shall we cache the height of the item?
-						height = visibleCount * dojo.html.getMarginBox(childs[0]).height +"px";
-					}
-					width = (dojo.html.getMarginBox(this.domNode).width-2)+"px";
-				}
-				this.popupWidget.open(this.domNode, this, this.downArrowNode);
-			}else{
-				this._hideResultList();
-			}
-		},
-
-		handleArrowClick: function(){
-			// summary: callback when arrow is clicked
-			this._handleBlurTimer(true, 0);
-			this._tryFocus();
-			if(this.popupWidget.isShowingNow){
-				this._hideResultList();
-			}else{
-				// forces full population of results, if they click
-				// on the arrow it means they want to see more options
-				this._startSearch("");
-			}
-		},
-
-		_tryFocus: function(){
-			try {
-				this.textInputNode.focus();
-			} catch (e){
-				// element isn't focusable if disabled, or not visible etc - not easy to test for.
-	 		};
-		},
-
-		_startSearchFromInput: function(){
-			this._startSearch(this.textInputNode.value);
-		},
-
-		_startSearch: function(/*String*/ key){
-			this.dataProvider.startSearch(key, dojo.lang.hitch(this, "_openResultList"));
-		},
-
-		postCreate: function(){
-			this.onResize();
-
-			// TODO: add these attach events to template
-			dojo.event.connect(this.textInputNode, "onblur", this, "_onBlurInput");
-			dojo.event.connect(this.textInputNode, "onfocus", this, "_onFocusInput");
-
-			if (this.disabled){
-				this.disable();
-			}
-			var s = dojo.widget.html.stabile.getState(this.widgetId);
-			if (s){
-				this.setState(s);
-			}
-		}
-	}
-);
-
-dojo.provide("dojo.widget.Select");
-
-
-
-
-
-dojo.widget.defineWidget(
-	"dojo.widget.Select",
-	dojo.widget.ComboBox,
-	{
-		/*
-		 * summary
-		 *	Enhanced version of HTML's <select> tag.
-		 *
-		 *	Similar features:
-		 *	  - There is a drop down list of possible values.
-		 *    - You can only enter a value from the drop down list.  (You can't enter an arbitrary value.)
-		 *    - The value submitted with the form is the hidden value (ex: CA),
-		 *      not the displayed value a.k.a. label (ex: California)
-		 *
-		 *	Enhancements over plain HTML version:
-		 *    - If you type in some text then it will filter down the list of possible values in the drop down list.
-		 *    - List can be specified either as a static list or via a javascript function (that can get the list from a server)
-		 */
-
-		//	This value should not be changed by the user
-		forceValidOption: true,
-
-		setValue: function(value) {
-			// summary
-			//	Sets the value of the combobox.
-			//	TODO: this doesn't work correctly when a URL is specified, because we can't
-			//	set the label automatically (based on the specified value)
-			this.comboBoxValue.value = value;
-			dojo.widget.html.stabile.setState(this.widgetId, this.getState(), true);
-			this.onValueChanged(value);
-		},
-
-		setLabel: function(value){
-			// summary
-			//	FIXME, not sure what to do here!
-			//	Users shouldn't call this function; they should be calling setValue() instead
-			this.comboBoxSelectionValue.value = value;
-			if (this.textInputNode.value != value) { // prevent mucking up of selection
-				this.textInputNode.value = value;
-			}
-		},	  
-
-		getLabel: function(){
-			// summary: returns current label
-			return this.comboBoxSelectionValue.value;	// String
-		},
-
-		getState: function() {
-			// summary: returns current value and label
-			return {
-				value: this.getValue(),
-				label: this.getLabel()
-			};	// Object
-		},
-
-		onKeyUp: function(/*Event*/ evt){
-			// summary: internal function
-			this.setLabel(this.textInputNode.value);
-		},
-
-		setState: function(/*Object*/ state) {
-			// summary: internal function to set both value and label
-			this.setValue(state.value);
-			this.setLabel(state.label);
-		},
-
-		setAllValues: function(/*String*/ value1, /*String*/ value2){
-			// summary: internal function to set both value and label
-			this.setLabel(value1);
-			this.setValue(value2);
-		}
-	}
-);
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/flash6_gateway.swf b/tapestry/tapestry-framework/src/js/dojo-0.4.3/flash6_gateway.swf
deleted file mode 100644
index c452d92..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/flash6_gateway.swf
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/iframe_history.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/iframe_history.html
deleted file mode 100644
index 54309f2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/iframe_history.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-	<title></title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
-	<script type="text/javascript">
-	// <!--
-	var noInit = false;
-	var domain = "";
-	// document.domain = "localhost";
-	
-	function defineParams(sparams){
-		if(sparams){
-			var ss = (sparams.indexOf("&amp;") >= 0) ? "&amp;" : "&";
-			sparams = sparams.split(ss);
-			for(var x=0; x<sparams.length; x++){
-				var tp = sparams[x].split("=");
-				if(typeof window[tp[0]] != "undefined"){
-					window[tp[0]] = ((tp[1]=="true")||(tp[1]=="false")) ? eval(tp[1]) : tp[1];
-				}
-			}
-		}
-	}
-	
-	function init(){
-		// parse the query string if there is one to try to get params that
-		// we can act on. Also allow params to be in a fragment identifier.
-		var query = null;
-		var frag = null;
-		var url = document.location.href;
-		var hashIndex = url.indexOf("#");
-		
-		//Extract fragment identifier
-		if(hashIndex != -1){
-			frag = url.substring(hashIndex + 1, url.length);
-			url = url.substring(0, hashIndex);
-		}
-
-		//Extract querystring
-		var parts = url.split("?");
-		if(parts.length == 2){
-			query = parts[1];
-		}
-
-		defineParams(query);
-		defineParams(frag);
-
-		if(noInit){ return; }
-		if(domain.length > 0){
-			document.domain = domain;
-		}
-		var hasParentDojo = false;
-		try{
-			hasParentDojo = window.parent != window && window.parent["dojo"];
-		}catch(e){
-			alert("Initializing iframe_history.html failed. If you are using a cross-domain Dojo build,"
-				+ " please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"
-				+ " to the path on your domain to iframe_history.html");
-			throw e;
-		}
-
-		if(hasParentDojo){
-			//Set the page title so IE history shows up with a somewhat correct name.
-			document.title = window.parent.document.title;
-			
-			//Notify parent that we are loaded.
-			var pdj = window.parent.dojo;
-			if(pdj["undo"] && pdj["undo"]["browser"]){
-				pdj.undo.browser.iframeLoaded(null, window.location);
-			}
-		}
-
-	}
-	// -->
-	</script>
-</head>
-<body onload="try{ init(); }catch(e){ alert(e); }">
-	<h4>The Dojo Toolkit -- iframe_history.html</h4>
-
-	<p>This file is used in Dojo's back/fwd button management.</p>
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ROOT.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ROOT.js
deleted file mode 100644
index e0cd615..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ROOT.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_ROOT");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.ROOT");dojo.i18n.calendar.nls.gregorian.ROOT={"field-weekday":"Day of the Week","dateFormat-medium":"yyyy MMM d","field-second":"Second","field-week":"Week","pm":"PM","timeFormat-full":"HH:mm:ss z","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"am":"AM","days-standAlone-narrow":["1","2","3","4","5","6","7"],"field-year":"Year","eras":["BCE","CE"],"field-minute":"Minute","timeFormat-medium":"HH:mm:ss","field-hour":"Hour","dateFormat-long":"yyyy MMMM d","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-era":"Era","timeFormat-short":"HH:mm","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-long":"HH:mm:ss z","days-format-wide":["1","2","3","4","5","6","7"],"dateFormat-full":"EEEE, yyyy MMMM dd","field-zone":"Zone","days-format-abbr":["1","2","3","4","5","6","7"]};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.ROOT");dojo.i18n.calendar.nls.gregorianExtras.ROOT={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.ROOT");dojo.widget.nls.TimePicker.ROOT={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.ROOT");dojo.widget.nls.DropdownDatePicker.ROOT={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.ROOT");dojo.widget.nls.DropdownTimePicker.ROOT={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_de-de.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_de-de.js
deleted file mode 100644
index 1c82f01..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_de-de.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_de-de");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.de_de");dojo.i18n.calendar.nls.gregorian.de_de={"field-weekday":"Wochentag","dateFormat-medium":"dd.MM.yyyy","field-second":"Sekunde","field-week":"Woche","pm":"nachm.","timeFormat-full":"H:mm' Uhr 'z","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"vorm.","days-standAlone-narrow":["S","M","D","M","D","F","S"],"field-year":"Jahr","eras":["v. Chr.","n. Chr."],"field-hour":"Stunde","dateFormat-long":"d. MMMM yyyy","field-day":"Tag","field-dayperiod":"Tageshälfte","field-month":"Monat","dateFormat-short":"dd.MM.yy","months-format-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"field-era":"Epoche","months-format-abbr":["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dateFormat-full":"EEEE, d. MMMM yyyy","field-zone":"Zone","days-format-abbr":["So","Mo","Di","Mi","Do","Fr","Sa"],"field-minute":"Minute","timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.de_de");dojo.i18n.calendar.nls.gregorianExtras.de_de={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.de_de");dojo.widget.nls.TimePicker.de_de={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.de_de");dojo.widget.nls.DropdownDatePicker.de_de={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.de_de");dojo.widget.nls.DropdownTimePicker.de_de={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_de.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_de.js
deleted file mode 100644
index 08fe094..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_de.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_de");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.de");dojo.i18n.calendar.nls.gregorian.de={"field-weekday":"Wochentag","dateFormat-medium":"dd.MM.yyyy","field-second":"Sekunde","field-week":"Woche","pm":"nachm.","timeFormat-full":"H:mm' Uhr 'z","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"vorm.","days-standAlone-narrow":["S","M","D","M","D","F","S"],"field-year":"Jahr","eras":["v. Chr.","n. Chr."],"field-hour":"Stunde","dateFormat-long":"d. MMMM yyyy","field-day":"Tag","field-dayperiod":"Tageshälfte","field-month":"Monat","dateFormat-short":"dd.MM.yy","months-format-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"field-era":"Epoche","months-format-abbr":["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dateFormat-full":"EEEE, d. MMMM yyyy","field-zone":"Zone","days-format-abbr":["So","Mo","Di","Mi","Do","Fr","Sa"],"field-minute":"Minute","timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.de");dojo.i18n.calendar.nls.gregorianExtras.de={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.de");dojo.widget.nls.TimePicker.de={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.de");dojo.widget.nls.DropdownDatePicker.de={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.de");dojo.widget.nls.DropdownTimePicker.de={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_en-gb.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_en-gb.js
deleted file mode 100644
index 61cc977..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_en-gb.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_en-gb");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.en_gb");dojo.i18n.calendar.nls.gregorian.en_gb={"months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormat-long":"MMMM d, yyyy","timeFormat-full":"h:mm:ss a v","eras":["BC","AD"],"timeFormat-medium":"h:mm:ss a","dateFormat-medium":"MMM d, yyyy","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormat-full":"EEEE, MMMM d, yyyy","days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"timeFormat-long":"h:mm:ss a z","timeFormat-short":"h:mm a","dateFormat-short":"M/d/yy","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"days-standAlone-narrow":["S","M","T","W","T","F","S"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","pm":"PM","am":"AM","field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","field-zone":"Zone"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.en_gb");dojo.i18n.calendar.nls.gregorianExtras.en_gb={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.en_gb");dojo.widget.nls.TimePicker.en_gb={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.en_gb");dojo.widget.nls.DropdownDatePicker.en_gb={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.en_gb");dojo.widget.nls.DropdownTimePicker.en_gb={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_en-us.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_en-us.js
deleted file mode 100644
index f474123..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_en-us.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_en-us");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.en_us");dojo.i18n.calendar.nls.gregorian.en_us={"months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormat-long":"MMMM d, yyyy","timeFormat-full":"h:mm:ss a v","eras":["BC","AD"],"timeFormat-medium":"h:mm:ss a","dateFormat-medium":"MMM d, yyyy","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormat-full":"EEEE, MMMM d, yyyy","days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"timeFormat-long":"h:mm:ss a z","timeFormat-short":"h:mm a","dateFormat-short":"M/d/yy","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"days-standAlone-narrow":["S","M","T","W","T","F","S"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","pm":"PM","am":"AM","field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","field-zone":"Zone"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.en_us");dojo.i18n.calendar.nls.gregorianExtras.en_us={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.en_us");dojo.widget.nls.TimePicker.en_us={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.en_us");dojo.widget.nls.DropdownDatePicker.en_us={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.en_us");dojo.widget.nls.DropdownTimePicker.en_us={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_en.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_en.js
deleted file mode 100644
index 6e3f3c7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_en.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_en");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.en");dojo.i18n.calendar.nls.gregorian.en={"months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormat-long":"MMMM d, yyyy","timeFormat-full":"h:mm:ss a v","eras":["BC","AD"],"timeFormat-medium":"h:mm:ss a","dateFormat-medium":"MMM d, yyyy","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormat-full":"EEEE, MMMM d, yyyy","days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"timeFormat-long":"h:mm:ss a z","timeFormat-short":"h:mm a","dateFormat-short":"M/d/yy","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"days-standAlone-narrow":["S","M","T","W","T","F","S"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","pm":"PM","am":"AM","field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","field-zone":"Zone"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.en");dojo.i18n.calendar.nls.gregorianExtras.en={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.en");dojo.widget.nls.TimePicker.en={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.en");dojo.widget.nls.DropdownDatePicker.en={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.en");dojo.widget.nls.DropdownTimePicker.en={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_es-es.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_es-es.js
deleted file mode 100644
index 8bcdabe..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_es-es.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_es-es");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.es_es");dojo.i18n.calendar.nls.gregorian.es_es={"field-weekday":"día de la semana","dateFormat-medium":"dd-MMM-yy","field-second":"segundo","field-week":"semana","pm":"p.m.","timeFormat-full":"HH'H'mm''ss\" z","months-standAlone-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"am":"a.m.","days-standAlone-narrow":["D","L","M","M","J","V","S"],"field-year":"año","eras":["a.C.","d.C."],"field-minute":"minuto","field-hour":"hora","dateFormat-long":"d' de 'MMMM' de 'yyyy","field-day":"día","field-dayperiod":"periodo del día","field-month":"mes","dateFormat-short":"d/MM/yy","months-format-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"field-era":"era","months-format-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"days-format-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"dateFormat-full":"EEEE d' de 'MMMM' de 'yyyy","field-zone":"zona","days-format-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.es_es");dojo.i18n.calendar.nls.gregorianExtras.es_es={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.es_es");dojo.widget.nls.TimePicker.es_es={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.es_es");dojo.widget.nls.DropdownDatePicker.es_es={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.es_es");dojo.widget.nls.DropdownTimePicker.es_es={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_es.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_es.js
deleted file mode 100644
index 6af4cfb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_es.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_es");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.es");dojo.i18n.calendar.nls.gregorian.es={"field-weekday":"día de la semana","dateFormat-medium":"dd-MMM-yy","field-second":"segundo","field-week":"semana","pm":"p.m.","timeFormat-full":"HH'H'mm''ss\" z","months-standAlone-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"am":"a.m.","days-standAlone-narrow":["D","L","M","M","J","V","S"],"field-year":"año","eras":["a.C.","d.C."],"field-minute":"minuto","field-hour":"hora","dateFormat-long":"d' de 'MMMM' de 'yyyy","field-day":"día","field-dayperiod":"periodo del día","field-month":"mes","dateFormat-short":"d/MM/yy","months-format-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"field-era":"era","months-format-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"days-format-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"dateFormat-full":"EEEE d' de 'MMMM' de 'yyyy","field-zone":"zona","days-format-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.es");dojo.i18n.calendar.nls.gregorianExtras.es={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.es");dojo.widget.nls.TimePicker.es={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.es");dojo.widget.nls.DropdownDatePicker.es={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.es");dojo.widget.nls.DropdownTimePicker.es={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_fr-fr.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_fr-fr.js
deleted file mode 100644
index e2292e1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_fr-fr.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_fr-fr");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.fr_fr");dojo.i18n.calendar.nls.gregorian.fr_fr={"field-weekday":"jour de la semaine","dateFormat-medium":"d MMM yy","field-second":"seconde","field-week":"semaine","pm":"ap. m.","timeFormat-full":"HH' h 'mm z","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"matin","days-standAlone-narrow":["D","L","M","M","J","V","S"],"field-year":"année","eras":["av. J.-C.","apr. J.-C."],"field-minute":"minute","field-hour":"heure","dateFormat-long":"d MMMM yyyy","field-day":"jour","field-dayperiod":"période de la journée","field-month":"mois","dateFormat-short":"dd/MM/yy","months-format-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"field-era":"époque","months-format-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormat-full":"EEEE d MMMM yyyy","field-zone":"zone","days-format-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.fr_fr");dojo.i18n.calendar.nls.gregorianExtras.fr_fr={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.fr_fr");dojo.widget.nls.TimePicker.fr_fr={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.fr_fr");dojo.widget.nls.DropdownDatePicker.fr_fr={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.fr_fr");dojo.widget.nls.DropdownTimePicker.fr_fr={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_fr.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_fr.js
deleted file mode 100644
index 350c7db..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_fr.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_fr");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.fr");dojo.i18n.calendar.nls.gregorian.fr={"field-weekday":"jour de la semaine","dateFormat-medium":"d MMM yy","field-second":"seconde","field-week":"semaine","pm":"ap. m.","timeFormat-full":"HH' h 'mm z","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"matin","days-standAlone-narrow":["D","L","M","M","J","V","S"],"field-year":"année","eras":["av. J.-C.","apr. J.-C."],"field-minute":"minute","field-hour":"heure","dateFormat-long":"d MMMM yyyy","field-day":"jour","field-dayperiod":"période de la journée","field-month":"mois","dateFormat-short":"dd/MM/yy","months-format-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"field-era":"époque","months-format-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormat-full":"EEEE d MMMM yyyy","field-zone":"zone","days-format-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.fr");dojo.i18n.calendar.nls.gregorianExtras.fr={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.fr");dojo.widget.nls.TimePicker.fr={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.fr");dojo.widget.nls.DropdownDatePicker.fr={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.fr");dojo.widget.nls.DropdownTimePicker.fr={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_it-it.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_it-it.js
deleted file mode 100644
index dbdfd5d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_it-it.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_it-it");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.it_it");dojo.i18n.calendar.nls.gregorian.it_it={"field-weekday":"giorno della settimana","dateFormat-medium":"dd/MMM/yy","field-second":"secondo","field-week":"settimana","pm":"p.","months-standAlone-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"am":"m.","days-standAlone-narrow":["D","L","M","M","G","V","S"],"field-year":"anno","eras":["aC","dC"],"field-minute":"minuto","field-hour":"ora","dateFormat-long":"dd MMMM yyyy","field-day":"giorno","field-dayperiod":"periodo del giorno","field-month":"mese","dateFormat-short":"dd/MM/yy","months-format-wide":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"field-era":"era","months-format-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"days-format-wide":["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],"dateFormat-full":"EEEE d MMMM yyyy","field-zone":"zona","days-format-abbr":["dom","lun","mar","mer","gio","ven","sab"],"timeFormat-full":"HH:mm:ss z","timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.it_it");dojo.i18n.calendar.nls.gregorianExtras.it_it={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.it_it");dojo.widget.nls.TimePicker.it_it={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.it_it");dojo.widget.nls.DropdownDatePicker.it_it={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.it_it");dojo.widget.nls.DropdownTimePicker.it_it={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_it.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_it.js
deleted file mode 100644
index b4f14c3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_it.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_it");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.it");dojo.i18n.calendar.nls.gregorian.it={"field-weekday":"giorno della settimana","dateFormat-medium":"dd/MMM/yy","field-second":"secondo","field-week":"settimana","pm":"p.","months-standAlone-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"am":"m.","days-standAlone-narrow":["D","L","M","M","G","V","S"],"field-year":"anno","eras":["aC","dC"],"field-minute":"minuto","field-hour":"ora","dateFormat-long":"dd MMMM yyyy","field-day":"giorno","field-dayperiod":"periodo del giorno","field-month":"mese","dateFormat-short":"dd/MM/yy","months-format-wide":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"field-era":"era","months-format-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"days-format-wide":["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],"dateFormat-full":"EEEE d MMMM yyyy","field-zone":"zona","days-format-abbr":["dom","lun","mar","mer","gio","ven","sab"],"timeFormat-full":"HH:mm:ss z","timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.it");dojo.i18n.calendar.nls.gregorianExtras.it={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.it");dojo.widget.nls.TimePicker.it={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.it");dojo.widget.nls.DropdownDatePicker.it={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.it");dojo.widget.nls.DropdownTimePicker.it={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ja-jp.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ja-jp.js
deleted file mode 100644
index b0acc2d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ja-jp.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_ja-jp");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.ja_jp");dojo.i18n.calendar.nls.gregorian.ja_jp={"days-standAlone-narrow":["日","月","火","水","木","金","土"],"timeFormat-full":"H'時'mm'分'ss'秒'z","eras":["紀元前","西暦"],"timeFormat-medium":"H:mm:ss","dateFormat-medium":"yyyy/MM/dd","am":"午前","months-format-abbr":["1 月","2 月","3 月","4 月","5 月","6 月","7 月","8 月","9 月","10 月","11 月","12 月"],"dateFormat-full":"yyyy'年'M'月'd'日'EEEE","days-format-abbr":["日","月","火","水","木","金","土"],"timeFormat-long":"H:mm:ss:z","timeFormat-short":"H:mm","pm":"午後","months-format-wide":["1 月","2 月","3 月","4 月","5 月","6 月","7 月","8 月","9 月","10 月","11 月","12 月"],"dateFormat-long":"yyyy'年'M'月'd'日'","days-format-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","field-era":"Era","field-zone":"Zone"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.ja_jp");dojo.i18n.calendar.nls.gregorianExtras.ja_jp={"dateFormat-yearOnly":"yyyy年"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.ja_jp");dojo.widget.nls.TimePicker.ja_jp={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.ja_jp");dojo.widget.nls.DropdownDatePicker.ja_jp={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.ja_jp");dojo.widget.nls.DropdownTimePicker.ja_jp={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ja.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ja.js
deleted file mode 100644
index 0a3a157..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ja.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_ja");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.ja");dojo.i18n.calendar.nls.gregorian.ja={"days-standAlone-narrow":["日","月","火","水","木","金","土"],"timeFormat-full":"H'時'mm'分'ss'秒'z","eras":["紀元前","西暦"],"timeFormat-medium":"H:mm:ss","dateFormat-medium":"yyyy/MM/dd","am":"午前","months-format-abbr":["1 月","2 月","3 月","4 月","5 月","6 月","7 月","8 月","9 月","10 月","11 月","12 月"],"dateFormat-full":"yyyy'年'M'月'd'日'EEEE","days-format-abbr":["日","月","火","水","木","金","土"],"timeFormat-long":"H:mm:ss:z","timeFormat-short":"H:mm","pm":"午後","months-format-wide":["1 月","2 月","3 月","4 月","5 月","6 月","7 月","8 月","9 月","10 月","11 月","12 月"],"dateFormat-long":"yyyy'年'M'月'd'日'","days-format-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","field-era":"Era","field-zone":"Zone"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.ja");dojo.i18n.calendar.nls.gregorianExtras.ja={"dateFormat-yearOnly":"yyyy年"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.ja");dojo.widget.nls.TimePicker.ja={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.ja");dojo.widget.nls.DropdownDatePicker.ja={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.ja");dojo.widget.nls.DropdownTimePicker.ja={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ko-kr.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ko-kr.js
deleted file mode 100644
index c0be9a0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ko-kr.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_ko-kr");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.ko_kr");dojo.i18n.calendar.nls.gregorian.ko_kr={"months-standAlone-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormat-long":"yyyy'년' M'월' d'일'","timeFormat-full":"a hh'시' mm'분' ss'초' z","eras":["기원전","서기"],"timeFormat-medium":"a hh'시' mm'분'","dateFormat-medium":"yyyy. MM. dd","am":"오전","months-format-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormat-full":"yyyy'년' M'월' d'일' EEEE","days-format-abbr":["일","월","화","수","목","금","토"],"timeFormat-long":"a hh'시' mm'분' ss'초'","timeFormat-short":"a hh'시' mm'분'","dateFormat-short":"yy. MM. dd","pm":"오후","months-format-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"days-standAlone-narrow":["일","월","화","수","목","금","토"],"days-format-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","field-zone":"Zone"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.ko_kr");dojo.i18n.calendar.nls.gregorianExtras.ko_kr={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.ko_kr");dojo.widget.nls.TimePicker.ko_kr={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.ko_kr");dojo.widget.nls.DropdownDatePicker.ko_kr={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.ko_kr");dojo.widget.nls.DropdownTimePicker.ko_kr={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ko.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ko.js
deleted file mode 100644
index d233f63..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_ko.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_ko");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.ko");dojo.i18n.calendar.nls.gregorian.ko={"months-standAlone-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormat-long":"yyyy'년' M'월' d'일'","timeFormat-full":"a hh'시' mm'분' ss'초' z","eras":["기원전","서기"],"timeFormat-medium":"a hh'시' mm'분'","dateFormat-medium":"yyyy. MM. dd","am":"오전","months-format-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormat-full":"yyyy'년' M'월' d'일' EEEE","days-format-abbr":["일","월","화","수","목","금","토"],"timeFormat-long":"a hh'시' mm'분' ss'초'","timeFormat-short":"a hh'시' mm'분'","dateFormat-short":"yy. MM. dd","pm":"오후","months-format-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"days-standAlone-narrow":["일","월","화","수","목","금","토"],"days-format-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","field-zone":"Zone"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.ko");dojo.i18n.calendar.nls.gregorianExtras.ko={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.ko");dojo.widget.nls.TimePicker.ko={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.ko");dojo.widget.nls.DropdownDatePicker.ko={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.ko");dojo.widget.nls.DropdownTimePicker.ko={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_pt-br.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_pt-br.js
deleted file mode 100644
index c8a8f78..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_pt-br.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_pt-br");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.pt_br");dojo.i18n.calendar.nls.gregorian.pt_br={"field-hour":"Hora","field-dayperiod":"Período do dia","field-minute":"Minuto","timeFormat-full":"HH'h'mm'min'ss's' z","field-weekday":"Dia da semana","field-week":"Semana","field-second":"Segundo","dateFormat-medium":"dd/MM/yyyy","field-day":"Dia","timeFormat-long":"H'h'm'min's's' z","field-month":"Mês","field-year":"Ano","dateFormat-short":"dd/MM/yy","field-zone":"Fuso","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormat-long":"d' de 'MMMM' de 'yyyy","eras":["a.C.","d.C."],"months-format-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"dateFormat-full":"EEEE, d' de 'MMMM' de 'yyyy","days-format-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"months-format-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"days-format-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"pm":"PM","am":"AM","timeFormat-medium":"HH:mm:ss","field-era":"Era","timeFormat-short":"HH:mm"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.pt_br");dojo.i18n.calendar.nls.gregorianExtras.pt_br={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.pt_br");dojo.widget.nls.TimePicker.pt_br={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.pt_br");dojo.widget.nls.DropdownDatePicker.pt_br={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.pt_br");dojo.widget.nls.DropdownTimePicker.pt_br={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_pt.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_pt.js
deleted file mode 100644
index 1bd2408..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_pt.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_pt");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.pt");dojo.i18n.calendar.nls.gregorian.pt={"months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormat-long":"d' de 'MMMM' de 'yyyy","timeFormat-full":"HH'H'mm'm'ss's' z","eras":["a.C.","d.C."],"dateFormat-medium":"d/MMM/yyyy","months-format-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"dateFormat-full":"EEEE, d' de 'MMMM' de 'yyyy","days-format-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"dateFormat-short":"dd-MM-yyyy","months-format-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"days-format-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","pm":"PM","am":"AM","field-year":"Year","field-minute":"Minute","timeFormat-medium":"HH:mm:ss","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","field-zone":"Zone"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.pt");dojo.i18n.calendar.nls.gregorianExtras.pt={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.pt");dojo.widget.nls.TimePicker.pt={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.pt");dojo.widget.nls.DropdownDatePicker.pt={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.pt");dojo.widget.nls.DropdownTimePicker.pt={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_xx.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_xx.js
deleted file mode 100644
index 97026a2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_xx.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_xx");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.xx");dojo.i18n.calendar.nls.gregorian.xx={"field-weekday":"Day of the Week","dateFormat-medium":"yyyy MMM d","field-second":"Second","field-week":"Week","pm":"PM","timeFormat-full":"HH:mm:ss z","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"am":"AM","days-standAlone-narrow":["1","2","3","4","5","6","7"],"field-year":"Year","eras":["BCE","CE"],"field-minute":"Minute","timeFormat-medium":"HH:mm:ss","field-hour":"Hour","dateFormat-long":"yyyy MMMM d","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-era":"Era","timeFormat-short":"HH:mm","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-long":"HH:mm:ss z","days-format-wide":["1","2","3","4","5","6","7"],"dateFormat-full":"EEEE, yyyy MMMM dd","field-zone":"Zone","days-format-abbr":["1","2","3","4","5","6","7"]};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.xx");dojo.i18n.calendar.nls.gregorianExtras.xx={"dateFormat-yearOnly":"yyyy"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.xx");dojo.widget.nls.TimePicker.xx={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.xx");dojo.widget.nls.DropdownDatePicker.xx={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.xx");dojo.widget.nls.DropdownTimePicker.xx={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_zh-cn.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_zh-cn.js
deleted file mode 100644
index 7a2c54d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_zh-cn.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_zh-cn");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.zh_cn");dojo.i18n.calendar.nls.gregorian.zh_cn={"dateFormat-medium":"yyyy-M-d","field-second":"秒钟","field-week":"周","timeFormat-full":"ahh'时'mm'分'ss'秒' z","field-year":"年","field-minute":"分钟","timeFormat-medium":"ahh:mm:ss","field-hour":"小时","dateFormat-long":"yyyy'年'M'月'd'日'","field-day":"日","field-dayperiod":"上午/下午","field-month":"月","dateFormat-short":"yy-M-d","field-era":"时期","timeFormat-short":"ah:mm","timeFormat-long":"ahh'时'mm'分'ss'秒'","dateFormat-full":"yyyy'年'M'月'd'日'EEEE","field-weekday":"周天","field-zone":"区域","days-standAlone-narrow":["日","一","二","三","四","五","六"],"eras":["公元前","公元"],"am":"上午","months-format-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"pm":"下午","months-format-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.zh_cn");dojo.i18n.calendar.nls.gregorianExtras.zh_cn={"dateFormat-yearOnly":"yyyy'年'"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.zh_cn");dojo.widget.nls.TimePicker.zh_cn={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.zh_cn");dojo.widget.nls.DropdownDatePicker.zh_cn={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.zh_cn");dojo.widget.nls.DropdownTimePicker.zh_cn={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_zh-tw.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_zh-tw.js
deleted file mode 100644
index e82db1c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_zh-tw.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_zh-tw");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.zh_tw");dojo.i18n.calendar.nls.gregorian.zh_tw={"dateFormat-medium":"yyyy'年'M'月'd'日'","field-second":"秒","field-week":"週","timeFormat-full":"ahh'時'mm'分'ss'秒' z","eras":["西元前","西元"],"field-year":"年","field-minute":"分鐘","timeFormat-medium":"ahh:mm:ss","field-hour":"小時","dateFormat-long":"yyyy'年'M'月'd'日'","field-day":"整日","field-dayperiod":"日間","field-month":"月","dateFormat-short":"yy'年'M'月'd'日'","field-era":"年代","timeFormat-short":"ah:mm","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"timeFormat-long":"ahh'時'mm'分'ss'秒'","field-weekday":"週天","dateFormat-full":"yyyy'年'M'月'd'日'EEEE","field-zone":"區域","days-standAlone-narrow":["日","一","二","三","四","五","六"],"am":"上午","days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"pm":"下午","months-format-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.zh_tw");dojo.i18n.calendar.nls.gregorianExtras.zh_tw={"dateFormat-yearOnly":"yyyy'年'"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.zh_tw");dojo.widget.nls.TimePicker.zh_tw={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.zh_tw");dojo.widget.nls.DropdownDatePicker.zh_tw={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.zh_tw");dojo.widget.nls.DropdownTimePicker.zh_tw={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_zh.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_zh.js
deleted file mode 100644
index 4a112f7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/nls/dojo_zh.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("nls.dojo_zh");dojo.provide("dojo.i18n.calendar.nls.gregorian");dojo.i18n.calendar.nls.gregorian._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorian.zh");dojo.i18n.calendar.nls.gregorian.zh={"days-standAlone-narrow":["日","一","二","三","四","五","六"],"eras":["公元前","公元"],"am":"上午","months-format-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"pm":"下午","months-format-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"field-weekday":"Day of the Week","dateFormat-medium":"yyyy MMM d","field-second":"Second","field-week":"Week","timeFormat-full":"HH:mm:ss z","field-year":"Year","field-minute":"Minute","timeFormat-medium":"HH:mm:ss","field-hour":"Hour","dateFormat-long":"yyyy MMMM d","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","field-era":"Era","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","dateFormat-full":"EEEE, yyyy MMMM dd","field-zone":"Zone"};dojo.provide("dojo.i18n.calendar.nls.gregorianExtras");dojo.i18n.calendar.nls.gregorianExtras._built=true;dojo.provide("dojo.i18n.calendar.nls.gregorianExtras.zh");dojo.i18n.calendar.nls.gregorianExtras.zh={"dateFormat-yearOnly":"yyyy'年'"};dojo.provide("dojo.widget.nls.TimePicker");dojo.widget.nls.TimePicker._built=true;dojo.provide("dojo.widget.nls.TimePicker.zh");dojo.widget.nls.TimePicker.zh={"any":"any"};dojo.provide("dojo.widget.nls.DropdownDatePicker");dojo.widget.nls.DropdownDatePicker._built=true;dojo.provide("dojo.widget.nls.DropdownDatePicker.zh");dojo.widget.nls.DropdownDatePicker.zh={"selectDate":"Select a date"};dojo.provide("dojo.widget.nls.DropdownTimePicker");dojo.widget.nls.DropdownTimePicker._built=true;dojo.provide("dojo.widget.nls.DropdownTimePicker.zh");dojo.widget.nls.DropdownTimePicker.zh={"selectTime":"Select time"};
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/AdapterRegistry.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/AdapterRegistry.js
deleted file mode 100644
index b40bc35..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/AdapterRegistry.js
+++ /dev/null
@@ -1,31 +0,0 @@
-dojo.provide("dojo.AdapterRegistry");
-dojo.require("dojo.lang.func");
-dojo.AdapterRegistry=function(_1){
-this.pairs=[];
-this.returnWrappers=_1||false;
-};
-dojo.lang.extend(dojo.AdapterRegistry,{register:function(_2,_3,_4,_5,_6){
-var _7=(_6)?"unshift":"push";
-this.pairs[_7]([_2,_3,_4,_5]);
-},match:function(){
-for(var i=0;i<this.pairs.length;i++){
-var _9=this.pairs[i];
-if(_9[1].apply(this,arguments)){
-if((_9[3])||(this.returnWrappers)){
-return _9[2];
-}else{
-return _9[2].apply(this,arguments);
-}
-}
-}
-throw new Error("No match found");
-},unregister:function(_a){
-for(var i=0;i<this.pairs.length;i++){
-var _c=this.pairs[i];
-if(_c[0]==_a){
-this.pairs.splice(i,1);
-return true;
-}
-}
-return false;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/Deferred.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/Deferred.js
deleted file mode 100644
index bc5c4c5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/Deferred.js
+++ /dev/null
@@ -1,152 +0,0 @@
-dojo.provide("dojo.Deferred");
-dojo.require("dojo.lang.func");
-dojo.Deferred=function(_1){
-this.chain=[];
-this.id=this._nextId();
-this.fired=-1;
-this.paused=0;
-this.results=[null,null];
-this.canceller=_1;
-this.silentlyCancelled=false;
-};
-dojo.lang.extend(dojo.Deferred,{getFunctionFromArgs:function(){
-var a=arguments;
-if((a[0])&&(!a[1])){
-if(dojo.lang.isFunction(a[0])){
-return a[0];
-}else{
-if(dojo.lang.isString(a[0])){
-return dj_global[a[0]];
-}
-}
-}else{
-if((a[0])&&(a[1])){
-return dojo.lang.hitch(a[0],a[1]);
-}
-}
-return null;
-},makeCalled:function(){
-var _3=new dojo.Deferred();
-_3.callback();
-return _3;
-},repr:function(){
-var _4;
-if(this.fired==-1){
-_4="unfired";
-}else{
-if(this.fired==0){
-_4="success";
-}else{
-_4="error";
-}
-}
-return "Deferred("+this.id+", "+_4+")";
-},toString:dojo.lang.forward("repr"),_nextId:(function(){
-var n=1;
-return function(){
-return n++;
-};
-})(),cancel:function(){
-if(this.fired==-1){
-if(this.canceller){
-this.canceller(this);
-}else{
-this.silentlyCancelled=true;
-}
-if(this.fired==-1){
-this.errback(new Error(this.repr()));
-}
-}else{
-if((this.fired==0)&&(this.results[0] instanceof dojo.Deferred)){
-this.results[0].cancel();
-}
-}
-},_pause:function(){
-this.paused++;
-},_unpause:function(){
-this.paused--;
-if((this.paused==0)&&(this.fired>=0)){
-this._fire();
-}
-},_continue:function(_6){
-this._resback(_6);
-this._unpause();
-},_resback:function(_7){
-this.fired=((_7 instanceof Error)?1:0);
-this.results[this.fired]=_7;
-this._fire();
-},_check:function(){
-if(this.fired!=-1){
-if(!this.silentlyCancelled){
-dojo.raise("already called!");
-}
-this.silentlyCancelled=false;
-return;
-}
-},callback:function(_8){
-this._check();
-this._resback(_8);
-},errback:function(_9){
-this._check();
-if(!(_9 instanceof Error)){
-_9=new Error(_9);
-}
-this._resback(_9);
-},addBoth:function(cb,_b){
-var _c=this.getFunctionFromArgs(cb,_b);
-if(arguments.length>2){
-_c=dojo.lang.curryArguments(null,_c,arguments,2);
-}
-return this.addCallbacks(_c,_c);
-},addCallback:function(cb,_e){
-var _f=this.getFunctionFromArgs(cb,_e);
-if(arguments.length>2){
-_f=dojo.lang.curryArguments(null,_f,arguments,2);
-}
-return this.addCallbacks(_f,null);
-},addErrback:function(cb,_11){
-var _12=this.getFunctionFromArgs(cb,_11);
-if(arguments.length>2){
-_12=dojo.lang.curryArguments(null,_12,arguments,2);
-}
-return this.addCallbacks(null,_12);
-return this.addCallbacks(null,_11);
-},addCallbacks:function(cb,eb){
-this.chain.push([cb,eb]);
-if(this.fired>=0){
-this._fire();
-}
-return this;
-},_fire:function(){
-var _15=this.chain;
-var _16=this.fired;
-var res=this.results[_16];
-var _18=this;
-var cb=null;
-while(_15.length>0&&this.paused==0){
-var _1a=_15.shift();
-var f=_1a[_16];
-if(f==null){
-continue;
-}
-try{
-res=f(res);
-_16=((res instanceof Error)?1:0);
-if(res instanceof dojo.Deferred){
-cb=function(res){
-_18._continue(res);
-};
-this._pause();
-}
-}
-catch(err){
-_16=1;
-res=err;
-}
-}
-this.fired=_16;
-this.results[_16]=res;
-if((cb)&&(this.paused)){
-res.addBoth(cb);
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/DeferredList.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/DeferredList.js
deleted file mode 100644
index a532817..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/DeferredList.js
+++ /dev/null
@@ -1,64 +0,0 @@
-dojo.require("dojo.Deferred");
-dojo.provide("dojo.DeferredList");
-dojo.DeferredList=function(_1,_2,_3,_4,_5){
-this.list=_1;
-this.resultList=new Array(this.list.length);
-this.chain=[];
-this.id=this._nextId();
-this.fired=-1;
-this.paused=0;
-this.results=[null,null];
-this.canceller=_5;
-this.silentlyCancelled=false;
-if(this.list.length===0&&!_2){
-this.callback(this.resultList);
-}
-this.finishedCount=0;
-this.fireOnOneCallback=_2;
-this.fireOnOneErrback=_3;
-this.consumeErrors=_4;
-var _6=0;
-var _7=this;
-dojo.lang.forEach(this.list,function(d){
-var _9=_6;
-d.addCallback(function(r){
-_7._cbDeferred(_9,true,r);
-});
-d.addErrback(function(r){
-_7._cbDeferred(_9,false,r);
-});
-_6++;
-});
-};
-dojo.inherits(dojo.DeferredList,dojo.Deferred);
-dojo.lang.extend(dojo.DeferredList,{_cbDeferred:function(_c,_d,_e){
-this.resultList[_c]=[_d,_e];
-this.finishedCount+=1;
-if(this.fired!==0){
-if(_d&&this.fireOnOneCallback){
-this.callback([_c,_e]);
-}else{
-if(!_d&&this.fireOnOneErrback){
-this.errback(_e);
-}else{
-if(this.finishedCount==this.list.length){
-this.callback(this.resultList);
-}
-}
-}
-}
-if(!_d&&this.consumeErrors){
-_e=null;
-}
-return _e;
-},gatherResults:function(_f){
-var d=new dojo.DeferredList(_f,false,true,false);
-d.addCallback(function(_11){
-var ret=[];
-for(var i=0;i<_11.length;i++){
-ret.push(_11[i][1]);
-}
-return ret;
-});
-return d;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/a11y.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/a11y.js
deleted file mode 100644
index 48f1b39..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/a11y.js
+++ /dev/null
@@ -1,41 +0,0 @@
-dojo.provide("dojo.a11y");
-dojo.require("dojo.uri.*");
-dojo.require("dojo.html.common");
-dojo.a11y={imgPath:dojo.uri.moduleUri("dojo.widget","templates/images"),doAccessibleCheck:true,accessible:null,checkAccessible:function(){
-if(this.accessible===null){
-this.accessible=false;
-if(this.doAccessibleCheck==true){
-this.accessible=this.testAccessible();
-}
-}
-return this.accessible;
-},testAccessible:function(){
-this.accessible=false;
-if(dojo.render.html.ie||dojo.render.html.mozilla){
-var _1=document.createElement("div");
-_1.style.backgroundImage="url(\""+this.imgPath+"/tab_close.gif\")";
-dojo.body().appendChild(_1);
-var _2=null;
-if(window.getComputedStyle){
-var _3=getComputedStyle(_1,"");
-_2=_3.getPropertyValue("background-image");
-}else{
-_2=_1.currentStyle.backgroundImage;
-}
-var _4=false;
-if(_2!=null&&(_2=="none"||_2=="url(invalid-url:)")){
-this.accessible=true;
-}
-dojo.body().removeChild(_1);
-}
-return this.accessible;
-},setCheckAccessible:function(_5){
-this.doAccessibleCheck=_5;
-},setAccessibleMode:function(){
-if(this.accessible===null){
-if(this.checkAccessible()){
-dojo.render.html.prefixes.unshift("a11y");
-}
-}
-return this.accessible;
-}};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation.js
deleted file mode 100644
index b8d6e0b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation.js
+++ /dev/null
@@ -1,3 +0,0 @@
-dojo.provide("dojo.animation");
-dojo.require("dojo.animation.Animation");
-dojo.deprecated("dojo.animation is slated for removal in 0.5; use dojo.lfx instead.","0.5");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/Animation.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/Animation.js
deleted file mode 100644
index a59458a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/Animation.js
+++ /dev/null
@@ -1,167 +0,0 @@
-dojo.provide("dojo.animation.Animation");
-dojo.require("dojo.animation.AnimationEvent");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.math");
-dojo.require("dojo.math.curves");
-dojo.deprecated("dojo.animation.Animation is slated for removal in 0.5; use dojo.lfx.* instead.","0.5");
-dojo.animation.Animation=function(_1,_2,_3,_4,_5){
-if(dojo.lang.isArray(_1)){
-_1=new dojo.math.curves.Line(_1[0],_1[1]);
-}
-this.curve=_1;
-this.duration=_2;
-this.repeatCount=_4||0;
-this.rate=_5||25;
-if(_3){
-if(dojo.lang.isFunction(_3.getValue)){
-this.accel=_3;
-}else{
-var i=0.35*_3+0.5;
-this.accel=new dojo.math.curves.CatmullRom([[0],[i],[1]],0.45);
-}
-}
-};
-dojo.lang.extend(dojo.animation.Animation,{curve:null,duration:0,repeatCount:0,accel:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,handler:null,_animSequence:null,_startTime:null,_endTime:null,_lastFrame:null,_timer:null,_percent:0,_active:false,_paused:false,_startRepeatCount:0,play:function(_7){
-if(_7){
-clearTimeout(this._timer);
-this._active=false;
-this._paused=false;
-this._percent=0;
-}else{
-if(this._active&&!this._paused){
-return;
-}
-}
-this._startTime=new Date().valueOf();
-if(this._paused){
-this._startTime-=(this.duration*this._percent/100);
-}
-this._endTime=this._startTime+this.duration;
-this._lastFrame=this._startTime;
-var e=new dojo.animation.AnimationEvent(this,null,this.curve.getValue(this._percent),this._startTime,this._startTime,this._endTime,this.duration,this._percent,0);
-this._active=true;
-this._paused=false;
-if(this._percent==0){
-if(!this._startRepeatCount){
-this._startRepeatCount=this.repeatCount;
-}
-e.type="begin";
-if(typeof this.handler=="function"){
-this.handler(e);
-}
-if(typeof this.onBegin=="function"){
-this.onBegin(e);
-}
-}
-e.type="play";
-if(typeof this.handler=="function"){
-this.handler(e);
-}
-if(typeof this.onPlay=="function"){
-this.onPlay(e);
-}
-if(this._animSequence){
-this._animSequence._setCurrent(this);
-}
-this._cycle();
-},pause:function(){
-clearTimeout(this._timer);
-if(!this._active){
-return;
-}
-this._paused=true;
-var e=new dojo.animation.AnimationEvent(this,"pause",this.curve.getValue(this._percent),this._startTime,new Date().valueOf(),this._endTime,this.duration,this._percent,0);
-if(typeof this.handler=="function"){
-this.handler(e);
-}
-if(typeof this.onPause=="function"){
-this.onPause(e);
-}
-},playPause:function(){
-if(!this._active||this._paused){
-this.play();
-}else{
-this.pause();
-}
-},gotoPercent:function(_a,_b){
-clearTimeout(this._timer);
-this._active=true;
-this._paused=true;
-this._percent=_a;
-if(_b){
-this.play();
-}
-},stop:function(_c){
-clearTimeout(this._timer);
-var _d=this._percent/100;
-if(_c){
-_d=1;
-}
-var e=new dojo.animation.AnimationEvent(this,"stop",this.curve.getValue(_d),this._startTime,new Date().valueOf(),this._endTime,this.duration,this._percent);
-if(typeof this.handler=="function"){
-this.handler(e);
-}
-if(typeof this.onStop=="function"){
-this.onStop(e);
-}
-this._active=false;
-this._paused=false;
-},status:function(){
-if(this._active){
-return this._paused?"paused":"playing";
-}else{
-return "stopped";
-}
-},_cycle:function(){
-clearTimeout(this._timer);
-if(this._active){
-var _f=new Date().valueOf();
-var _10=(_f-this._startTime)/(this._endTime-this._startTime);
-var fps=1000/(_f-this._lastFrame);
-this._lastFrame=_f;
-if(_10>=1){
-_10=1;
-this._percent=100;
-}else{
-this._percent=_10*100;
-}
-if(this.accel&&this.accel.getValue){
-_10=this.accel.getValue(_10);
-}
-var e=new dojo.animation.AnimationEvent(this,"animate",this.curve.getValue(_10),this._startTime,_f,this._endTime,this.duration,this._percent,Math.round(fps));
-if(typeof this.handler=="function"){
-this.handler(e);
-}
-if(typeof this.onAnimate=="function"){
-this.onAnimate(e);
-}
-if(_10<1){
-this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
-}else{
-e.type="end";
-this._active=false;
-if(typeof this.handler=="function"){
-this.handler(e);
-}
-if(typeof this.onEnd=="function"){
-this.onEnd(e);
-}
-if(this.repeatCount>0){
-this.repeatCount--;
-this.play(true);
-}else{
-if(this.repeatCount==-1){
-this.play(true);
-}else{
-if(this._startRepeatCount){
-this.repeatCount=this._startRepeatCount;
-this._startRepeatCount=0;
-}
-if(this._animSequence){
-this._animSequence._playNext();
-}
-}
-}
-}
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/AnimationEvent.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/AnimationEvent.js
deleted file mode 100644
index b12f110..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/AnimationEvent.js
+++ /dev/null
@@ -1,24 +0,0 @@
-dojo.provide("dojo.animation.AnimationEvent");
-dojo.require("dojo.lang.common");
-dojo.deprecated("dojo.animation.AnimationEvent is slated for removal in 0.5; use dojo.lfx.* instead.","0.5");
-dojo.animation.AnimationEvent=function(_1,_2,_3,_4,_5,_6,_7,_8,_9){
-this.type=_2;
-this.animation=_1;
-this.coords=_3;
-this.x=_3[0];
-this.y=_3[1];
-this.z=_3[2];
-this.startTime=_4;
-this.currentTime=_5;
-this.endTime=_6;
-this.duration=_7;
-this.percent=_8;
-this.fps=_9;
-};
-dojo.extend(dojo.animation.AnimationEvent,{coordsAsInts:function(){
-var _a=new Array(this.coords.length);
-for(var i=0;i<this.coords.length;i++){
-_a[i]=Math.round(this.coords[i]);
-}
-return _a;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/AnimationSequence.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/AnimationSequence.js
deleted file mode 100644
index 055ceb5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/AnimationSequence.js
+++ /dev/null
@@ -1,115 +0,0 @@
-dojo.provide("dojo.animation.AnimationSequence");
-dojo.require("dojo.animation.AnimationEvent");
-dojo.require("dojo.animation.Animation");
-dojo.deprecated("dojo.animation.AnimationSequence is slated for removal in 0.5; use dojo.lfx.* instead.","0.5");
-dojo.animation.AnimationSequence=function(_1){
-this._anims=[];
-this.repeatCount=_1||0;
-};
-dojo.lang.extend(dojo.animation.AnimationSequence,{repeatCount:0,_anims:[],_currAnim:-1,onBegin:null,onEnd:null,onNext:null,handler:null,add:function(){
-for(var i=0;i<arguments.length;i++){
-this._anims.push(arguments[i]);
-arguments[i]._animSequence=this;
-}
-},remove:function(_3){
-for(var i=0;i<this._anims.length;i++){
-if(this._anims[i]==_3){
-this._anims[i]._animSequence=null;
-this._anims.splice(i,1);
-break;
-}
-}
-},removeAll:function(){
-for(var i=0;i<this._anims.length;i++){
-this._anims[i]._animSequence=null;
-}
-this._anims=[];
-this._currAnim=-1;
-},clear:function(){
-this.removeAll();
-},play:function(_6){
-if(this._anims.length==0){
-return;
-}
-if(_6||!this._anims[this._currAnim]){
-this._currAnim=0;
-}
-if(this._anims[this._currAnim]){
-if(this._currAnim==0){
-var e={type:"begin",animation:this._anims[this._currAnim]};
-if(typeof this.handler=="function"){
-this.handler(e);
-}
-if(typeof this.onBegin=="function"){
-this.onBegin(e);
-}
-}
-this._anims[this._currAnim].play(_6);
-}
-},pause:function(){
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].pause();
-}
-},playPause:function(){
-if(this._anims.length==0){
-return;
-}
-if(this._currAnim==-1){
-this._currAnim=0;
-}
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].playPause();
-}
-},stop:function(){
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].stop();
-}
-},status:function(){
-if(this._anims[this._currAnim]){
-return this._anims[this._currAnim].status();
-}else{
-return "stopped";
-}
-},_setCurrent:function(_8){
-for(var i=0;i<this._anims.length;i++){
-if(this._anims[i]==_8){
-this._currAnim=i;
-break;
-}
-}
-},_playNext:function(){
-if(this._currAnim==-1||this._anims.length==0){
-return;
-}
-this._currAnim++;
-if(this._anims[this._currAnim]){
-var e={type:"next",animation:this._anims[this._currAnim]};
-if(typeof this.handler=="function"){
-this.handler(e);
-}
-if(typeof this.onNext=="function"){
-this.onNext(e);
-}
-this._anims[this._currAnim].play(true);
-}else{
-var e={type:"end",animation:this._anims[this._anims.length-1]};
-if(typeof this.handler=="function"){
-this.handler(e);
-}
-if(typeof this.onEnd=="function"){
-this.onEnd(e);
-}
-if(this.repeatCount>0){
-this._currAnim=0;
-this.repeatCount--;
-this._anims[this._currAnim].play(true);
-}else{
-if(this.repeatCount==-1){
-this._currAnim=0;
-this._anims[this._currAnim].play(true);
-}else{
-this._currAnim=-1;
-}
-}
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/Timer.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/Timer.js
deleted file mode 100644
index 738eb0f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/Timer.js
+++ /dev/null
@@ -1,4 +0,0 @@
-dojo.provide("dojo.animation.Timer");
-dojo.require("dojo.lang.timing.Timer");
-dojo.deprecated("dojo.animation.Timer is now dojo.lang.timing.Timer","0.5");
-dojo.animation.Timer=dojo.lang.timing.Timer;
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/__package__.js
deleted file mode 100644
index df18021..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/animation/__package__.js
+++ /dev/null
@@ -1,3 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.animation.AnimationEvent","dojo.animation.Animation","dojo.animation.AnimationSequence"]});
-dojo.provide("dojo.animation.*");
-dojo.deprecated("dojo.Animation.* is slated for removal in 0.5; use dojo.lfx.* instead.","0.5");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/behavior.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/behavior.js
deleted file mode 100644
index bd9f886..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/behavior.js
+++ /dev/null
@@ -1,137 +0,0 @@
-dojo.provide("dojo.behavior");
-dojo.require("dojo.event.*");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.behavior");
-dojo.behavior=new function(){
-function arrIn(_1,_2){
-if(!_1[_2]){
-_1[_2]=[];
-}
-return _1[_2];
-}
-function forIn(_3,_4,_5){
-var _6={};
-for(var x in _3){
-if(typeof _6[x]=="undefined"){
-if(!_5){
-_4(_3[x],x);
-}else{
-_5.call(_4,_3[x],x);
-}
-}
-}
-}
-this.behaviors={};
-this.add=function(_8){
-var _9={};
-forIn(_8,this,function(_a,_b){
-var _c=arrIn(this.behaviors,_b);
-if((dojo.lang.isString(_a))||(dojo.lang.isFunction(_a))){
-_a={found:_a};
-}
-forIn(_a,function(_d,_e){
-arrIn(_c,_e).push(_d);
-});
-});
-};
-this.apply=function(){
-dojo.profile.start("dojo.behavior.apply");
-var r=dojo.render.html;
-var _10=(!r.safari);
-if(r.safari){
-var uas=r.UA.split("AppleWebKit/")[1];
-if(parseInt(uas.match(/[0-9.]{3,}/))>=420){
-_10=true;
-}
-}
-if((dj_undef("behaviorFastParse",djConfig)?(_10):djConfig["behaviorFastParse"])){
-this.applyFast();
-}else{
-this.applySlow();
-}
-dojo.profile.end("dojo.behavior.apply");
-};
-this.matchCache={};
-this.elementsById=function(id,_13){
-var _14=[];
-var _15=[];
-arrIn(this.matchCache,id);
-if(_13){
-var _16=this.matchCache[id];
-for(var x=0;x<_16.length;x++){
-if(_16[x].id!=""){
-_14.push(_16[x]);
-_16.splice(x,1);
-x--;
-}
-}
-}
-var _18=dojo.byId(id);
-while(_18){
-if(!_18["idcached"]){
-_15.push(_18);
-}
-_18.id="";
-_18=dojo.byId(id);
-}
-this.matchCache[id]=this.matchCache[id].concat(_15);
-dojo.lang.forEach(this.matchCache[id],function(_19){
-_19.id=id;
-_19.idcached=true;
-});
-return {"removed":_14,"added":_15,"match":this.matchCache[id]};
-};
-this.applyToNode=function(_1a,_1b,_1c){
-if(typeof _1b=="string"){
-dojo.event.topic.registerPublisher(_1b,_1a,_1c);
-}else{
-if(typeof _1b=="function"){
-if(_1c=="found"){
-_1b(_1a);
-}else{
-dojo.event.connect(_1a,_1c,_1b);
-}
-}else{
-_1b.srcObj=_1a;
-_1b.srcFunc=_1c;
-dojo.event.kwConnect(_1b);
-}
-}
-};
-this.applyFast=function(){
-dojo.profile.start("dojo.behavior.applyFast");
-forIn(this.behaviors,function(_1d,id){
-var _1f=dojo.behavior.elementsById(id);
-dojo.lang.forEach(_1f.added,function(_20){
-forIn(_1d,function(_21,_22){
-if(dojo.lang.isArray(_21)){
-dojo.lang.forEach(_21,function(_23){
-dojo.behavior.applyToNode(_20,_23,_22);
-});
-}
-});
-});
-});
-dojo.profile.end("dojo.behavior.applyFast");
-};
-this.applySlow=function(){
-dojo.profile.start("dojo.behavior.applySlow");
-var all=document.getElementsByTagName("*");
-var _25=all.length;
-for(var x=0;x<_25;x++){
-var _27=all[x];
-if((_27.id)&&(!_27["behaviorAdded"])&&(this.behaviors[_27.id])){
-_27["behaviorAdded"]=true;
-forIn(this.behaviors[_27.id],function(_28,_29){
-if(dojo.lang.isArray(_28)){
-dojo.lang.forEach(_28,function(_2a){
-dojo.behavior.applyToNode(_27,_2a,_29);
-});
-}
-});
-}
-}
-dojo.profile.end("dojo.behavior.applySlow");
-};
-};
-dojo.addOnLoad(dojo.behavior,"apply");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/bootstrap1.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/bootstrap1.js
deleted file mode 100644
index c0f1c42..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/bootstrap1.js
+++ /dev/null
@@ -1,147 +0,0 @@
-var dj_global=this;
-var dj_currentContext=this;
-function dj_undef(_1,_2){
-return (typeof (_2||dj_currentContext)[_1]=="undefined");
-}
-if(dj_undef("djConfig",this)){
-var djConfig={};
-}
-if(dj_undef("dojo",this)){
-var dojo={};
-}
-dojo.global=function(){
-return dj_currentContext;
-};
-dojo.locale=djConfig.locale;
-dojo.version={major:0,minor:4,patch:3,flag:"+",revision:Number("$Rev$".match(/[0-9]+/)[0]),toString:function(){
-with(dojo.version){
-return major+"."+minor+"."+patch+flag+" ("+revision+")";
-}
-}};
-dojo.evalProp=function(_3,_4,_5){
-if((!_4)||(!_3)){
-return undefined;
-}
-if(!dj_undef(_3,_4)){
-return _4[_3];
-}
-return (_5?(_4[_3]={}):undefined);
-};
-dojo.parseObjPath=function(_6,_7,_8){
-var _9=(_7||dojo.global());
-var _a=_6.split(".");
-var _b=_a.pop();
-for(var i=0,l=_a.length;i<l&&_9;i++){
-_9=dojo.evalProp(_a[i],_9,_8);
-}
-return {obj:_9,prop:_b};
-};
-dojo.evalObjPath=function(_e,_f){
-if(typeof _e!="string"){
-return dojo.global();
-}
-if(_e.indexOf(".")==-1){
-return dojo.evalProp(_e,dojo.global(),_f);
-}
-var ref=dojo.parseObjPath(_e,dojo.global(),_f);
-if(ref){
-return dojo.evalProp(ref.prop,ref.obj,_f);
-}
-return null;
-};
-dojo.errorToString=function(_11){
-if(!dj_undef("message",_11)){
-return _11.message;
-}else{
-if(!dj_undef("description",_11)){
-return _11.description;
-}else{
-return _11;
-}
-}
-};
-dojo.raise=function(_12,_13){
-if(_13){
-_12=_12+": "+dojo.errorToString(_13);
-}else{
-_12=dojo.errorToString(_12);
-}
-try{
-if(djConfig.isDebug){
-dojo.hostenv.println("FATAL exception raised: "+_12);
-}
-}
-catch(e){
-}
-throw _13||Error(_12);
-};
-dojo.debug=function(){
-};
-dojo.debugShallow=function(obj){
-};
-dojo.profile={start:function(){
-},end:function(){
-},stop:function(){
-},dump:function(){
-}};
-function dj_eval(_15){
-return dj_global.eval?dj_global.eval(_15):eval(_15);
-}
-dojo.unimplemented=function(_16,_17){
-var _18="'"+_16+"' not implemented";
-if(_17!=null){
-_18+=" "+_17;
-}
-dojo.raise(_18);
-};
-dojo.deprecated=function(_19,_1a,_1b){
-var _1c="DEPRECATED: "+_19;
-if(_1a){
-_1c+=" "+_1a;
-}
-if(_1b){
-_1c+=" -- will be removed in version: "+_1b;
-}
-dojo.debug(_1c);
-};
-dojo.render=(function(){
-function vscaffold(_1d,_1e){
-var tmp={capable:false,support:{builtin:false,plugin:false},prefixes:_1d};
-for(var i=0;i<_1e.length;i++){
-tmp[_1e[i]]=false;
-}
-return tmp;
-}
-return {name:"",ver:dojo.version,os:{win:false,linux:false,osx:false},html:vscaffold(["html"],["ie","opera","khtml","safari","moz"]),svg:vscaffold(["svg"],["corel","adobe","batik"]),vml:vscaffold(["vml"],["ie"]),swf:vscaffold(["Swf","Flash","Mm"],["mm"]),swt:vscaffold(["Swt"],["ibm"])};
-})();
-dojo.hostenv=(function(){
-var _21={isDebug:false,allowQueryConfig:false,baseScriptUri:"",baseRelativePath:"",libraryScriptUri:"",iePreventClobber:false,ieClobberMinimal:true,preventBackButtonFix:true,delayMozLoadingFix:false,searchIds:[],parseWidgets:true};
-if(typeof djConfig=="undefined"){
-djConfig=_21;
-}else{
-for(var _22 in _21){
-if(typeof djConfig[_22]=="undefined"){
-djConfig[_22]=_21[_22];
-}
-}
-}
-return {name_:"(unset)",version_:"(unset)",getName:function(){
-return this.name_;
-},getVersion:function(){
-return this.version_;
-},getText:function(uri){
-dojo.unimplemented("getText","uri="+uri);
-}};
-})();
-dojo.hostenv.getBaseScriptUri=function(){
-if(djConfig.baseScriptUri.length){
-return djConfig.baseScriptUri;
-}
-var uri=new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-if(!uri){
-dojo.raise("Nothing returned by getLibraryScriptUri(): "+uri);
-}
-var _25=uri.lastIndexOf("/");
-djConfig.baseScriptUri=djConfig.baseRelativePath;
-return djConfig.baseScriptUri;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/browser_debug.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/browser_debug.js
deleted file mode 100644
index 523acd3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/browser_debug.js
+++ /dev/null
@@ -1,122 +0,0 @@
-dojo.provide("dojo.browser_debug");
-dojo.hostenv.loadedUris.push("../src/bootstrap1.js");
-dojo.hostenv.loadedUris.push("../src/loader.js");
-dojo.hostenv.loadedUris.push("../src/hostenv_browser.js");
-dojo.hostenv._loadedUrisListStart=dojo.hostenv.loadedUris.length;
-function removeComments(_1){
-_1=new String((!_1)?"":_1);
-_1=_1.replace(/^(.*?)\/\/(.*)$/mg,"$1");
-_1=_1.replace(/(\n)/mg,"__DOJONEWLINE");
-_1=_1.replace(/\/\*(.*?)\*\//g,"");
-return _1.replace(/__DOJONEWLINE/mg,"\n");
-}
-dojo.hostenv.getRequiresAndProvides=function(_2){
-if(!_2){
-return [];
-}
-var _3=[];
-var _4;
-RegExp.lastIndex=0;
-var _5=/dojo.(hostenv.loadModule|hostenv.require|require|requireIf|kwCompoundRequire|hostenv.conditionalLoadModule|hostenv.startPackage|provide)\([\w\W]*?\)/mg;
-while((_4=_5.exec(_2))!=null){
-_3.push(_4[0]);
-}
-return _3;
-};
-dojo.hostenv.getDelayRequiresAndProvides=function(_6){
-if(!_6){
-return [];
-}
-var _7=[];
-var _8;
-RegExp.lastIndex=0;
-var _9=/dojo.(requireAfterIf)\([\w\W]*?\)/mg;
-while((_8=_9.exec(_6))!=null){
-_7.push(_8[0]);
-}
-return _7;
-};
-dojo.clobberLastObject=function(_a){
-if(_a.indexOf(".")==-1){
-if(!dj_undef(_a,dj_global)){
-delete dj_global[_a];
-}
-return true;
-}
-var _b=_a.split(/\./);
-var _c=dojo.evalObjPath(_b.slice(0,-1).join("."),false);
-var _d=_b[_b.length-1];
-if(!dj_undef(_d,_c)){
-delete _c[_d];
-return true;
-}
-return false;
-};
-var removals=[];
-function zip(_e){
-var _f=[];
-var _10={};
-for(var x=0;x<_e.length;x++){
-if(!_10[_e[x]]){
-_f.push(_e[x]);
-_10[_e[x]]=true;
-}
-}
-return _f;
-}
-var old_dj_eval=dj_eval;
-dj_eval=function(){
-return true;
-};
-dojo.hostenv.oldLoadUri=dojo.hostenv.loadUri;
-dojo.hostenv.loadUri=function(uri,cb){
-if(dojo.hostenv.loadedUris[uri]){
-return true;
-}
-try{
-var _14=this.getText(uri,null,true);
-if(!_14){
-return false;
-}
-if(cb){
-var _15=old_dj_eval("("+_14+")");
-cb(_15);
-}else{
-var _16=dojo.hostenv.getRequiresAndProvides(_14);
-eval(_16.join(";"));
-dojo.hostenv.loadedUris.push(uri);
-dojo.hostenv.loadedUris[uri]=true;
-var _17=dojo.hostenv.getDelayRequiresAndProvides(_14);
-eval(_17.join(";"));
-}
-}
-catch(e){
-alert(e);
-}
-return true;
-};
-dojo.hostenv._writtenIncludes={};
-dojo.hostenv.writeIncludes=function(_18){
-for(var x=removals.length-1;x>=0;x--){
-dojo.clobberLastObject(removals[x]);
-}
-var _1a=[];
-var _1b=dojo.hostenv._writtenIncludes;
-for(var x=0;x<dojo.hostenv.loadedUris.length;x++){
-var _1c=dojo.hostenv.loadedUris[x];
-if(!_1b[_1c]){
-_1b[_1c]=true;
-_1a.push(_1c);
-}
-}
-dojo.hostenv._global_omit_module_check=true;
-for(var x=dojo.hostenv._loadedUrisListStart;x<_1a.length;x++){
-document.write("<script type='text/javascript' src='"+_1a[x]+"'></script>");
-}
-document.write("<script type='text/javascript'>dojo.hostenv._global_omit_module_check = false;</script>");
-dojo.hostenv._loadedUrisListStart=0;
-if(!_18){
-dj_eval=old_dj_eval;
-dojo.hostenv.loadUri=dojo.hostenv.oldLoadUri;
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/browser_debug_xd.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/browser_debug_xd.js
deleted file mode 100644
index 1ca5fbc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/browser_debug_xd.js
+++ /dev/null
@@ -1,25 +0,0 @@
-dojo.provide("dojo.browser_debug_xd");
-dojo.nonDebugProvide=dojo.provide;
-dojo.provide=function(_1){
-var _2=dojo.hostenv["xdDebugQueue"];
-if(_2&&_2.length>0&&_1==_2["currentResourceName"]){
-window.setTimeout("dojo.hostenv.xdDebugFileLoaded('"+_1+"')",1);
-}
-dojo.nonDebugProvide.apply(dojo,arguments);
-};
-dojo.hostenv.xdDebugFileLoaded=function(_3){
-var _4=this.xdDebugQueue;
-if(_3&&_3==_4.currentResourceName){
-_4.shift();
-}
-if(_4.length==0){
-_4.currentResourceName=null;
-this.xdNotifyLoaded();
-}else{
-_4.currentResourceName=_4[0].resourceName;
-var _5=document.createElement("script");
-_5.type="text/javascript";
-_5.src=_4[0].resourcePath;
-document.getElementsByTagName("head")[0].appendChild(_5);
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/cal/iCalendar.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/cal/iCalendar.js
deleted file mode 100644
index 5246fd5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/cal/iCalendar.js
+++ /dev/null
@@ -1,554 +0,0 @@
-dojo.provide("dojo.cal.iCalendar");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.cal.textDirectory");
-dojo.require("dojo.date.common");
-dojo.require("dojo.date.serialize");
-dojo.cal.iCalendar.fromText=function(_1){
-var _2=dojo.cal.textDirectory.tokenise(_1);
-var _3=[];
-for(var i=0,_5=false;i<_2.length;i++){
-var _6=_2[i];
-if(!_5){
-if(_6.name=="BEGIN"&&_6.value=="VCALENDAR"){
-_5=true;
-var _7=[];
-}
-}else{
-if(_6.name=="END"&&_6.value=="VCALENDAR"){
-_3.push(new dojo.cal.iCalendar.VCalendar(_7));
-_5=false;
-}else{
-_7.push(_6);
-}
-}
-}
-return _3;
-};
-dojo.cal.iCalendar.Component=function(_8){
-if(!this.name){
-this.name="COMPONENT";
-}
-this.properties=[];
-this.components=[];
-if(_8){
-for(var i=0,_a="";i<_8.length;i++){
-if(_a==""){
-if(_8[i].name=="BEGIN"){
-_a=_8[i].value;
-var _b=[];
-}else{
-this.addProperty(new dojo.cal.iCalendar.Property(_8[i]));
-}
-}else{
-if(_8[i].name=="END"&&_8[i].value==_a){
-if(_a=="VEVENT"){
-this.addComponent(new dojo.cal.iCalendar.VEvent(_b));
-}else{
-if(_a=="VTIMEZONE"){
-this.addComponent(new dojo.cal.iCalendar.VTimeZone(_b));
-}else{
-if(_a=="VTODO"){
-this.addComponent(new dojo.cal.iCalendar.VTodo(_b));
-}else{
-if(_a=="VJOURNAL"){
-this.addComponent(new dojo.cal.iCalendar.VJournal(_b));
-}else{
-if(_a=="VFREEBUSY"){
-this.addComponent(new dojo.cal.iCalendar.VFreeBusy(_b));
-}else{
-if(_a=="STANDARD"){
-this.addComponent(new dojo.cal.iCalendar.Standard(_b));
-}else{
-if(_a=="DAYLIGHT"){
-this.addComponent(new dojo.cal.iCalendar.Daylight(_b));
-}else{
-if(_a=="VALARM"){
-this.addComponent(new dojo.cal.iCalendar.VAlarm(_b));
-}else{
-dojo.unimplemented("dojo.cal.iCalendar."+_a);
-}
-}
-}
-}
-}
-}
-}
-}
-_a="";
-}else{
-_b.push(_8[i]);
-}
-}
-}
-if(this._ValidProperties){
-this.postCreate();
-}
-}
-};
-dojo.extend(dojo.cal.iCalendar.Component,{addProperty:function(_c){
-this.properties.push(_c);
-this[_c.name.toLowerCase()]=_c;
-},addComponent:function(_d){
-this.components.push(_d);
-},postCreate:function(){
-for(var x=0;x<this._ValidProperties.length;x++){
-var _f=this._ValidProperties[x];
-var _10=false;
-for(var y=0;y<this.properties.length;y++){
-var _12=this.properties[y];
-var _13=_12.name.toLowerCase();
-if(dojo.lang.isArray(_f)){
-var _14=false;
-for(var z=0;z<_f.length;z++){
-var _16=_f[z].name.toLowerCase();
-if((this[_16])&&(_16!=_13)){
-_14=true;
-}
-}
-if(!_14){
-this[_13]=_12;
-}
-}else{
-if(_13==_f.name.toLowerCase()){
-_10=true;
-if(_f.occurance==1){
-this[_13]=_12;
-}else{
-_10=true;
-if(!dojo.lang.isArray(this[_13])){
-this[_13]=[];
-}
-this[_13].push(_12);
-}
-}
-}
-}
-if(_f.required&&!_10){
-dojo.debug("iCalendar - "+this.name+": Required Property not found: "+_f.name);
-}
-}
-if(dojo.lang.isArray(this.rrule)){
-for(var x=0;x<this.rrule.length;x++){
-var _17=this.rrule[x].value;
-this.rrule[x].cache=function(){
-};
-var _18=_17.split(";");
-for(var y=0;y<_18.length;y++){
-var _19=_18[y].split("=");
-var key=_19[0].toLowerCase();
-var val=_19[1];
-if((key=="freq")||(key=="interval")||(key=="until")){
-this.rrule[x][key]=val;
-}else{
-var _1c=val.split(",");
-this.rrule[x][key]=_1c;
-}
-}
-}
-this.recurring=true;
-}
-},toString:function(){
-return "[iCalendar.Component; "+this.name+", "+this.properties.length+" properties, "+this.components.length+" components]";
-}});
-dojo.cal.iCalendar.Property=function(_1d){
-this.name=_1d.name;
-this.group=_1d.group;
-this.params=_1d.params;
-this.value=_1d.value;
-};
-dojo.extend(dojo.cal.iCalendar.Property,{toString:function(){
-return "[iCalenday.Property; "+this.name+": "+this.value+"]";
-}});
-var _P=function(n,oc,req){
-return {name:n,required:(req)?true:false,occurance:(oc=="*"||!oc)?-1:oc};
-};
-dojo.cal.iCalendar.VCalendar=function(_21){
-this.name="VCALENDAR";
-this.recurring=[];
-this.nonRecurringEvents=function(){
-};
-dojo.cal.iCalendar.Component.call(this,_21);
-};
-dojo.inherits(dojo.cal.iCalendar.VCalendar,dojo.cal.iCalendar.Component);
-dojo.extend(dojo.cal.iCalendar.VCalendar,{addComponent:function(_22){
-this.components.push(_22);
-if(_22.name.toLowerCase()=="vevent"){
-if(_22.rrule){
-this.recurring.push(_22);
-}else{
-var _23=_22.getDate();
-var _24=_23.getMonth()+1;
-var _25=_24+"-"+_23.getDate()+"-"+_23.getFullYear();
-if(!dojo.lang.isArray(this[_25])){
-this.nonRecurringEvents[_25]=[];
-}
-this.nonRecurringEvents[_25].push(_22);
-}
-}
-},preComputeRecurringEvents:function(_26){
-var _27=function(){
-};
-for(var x=0;x<this.recurring.length;x++){
-var _29=this.recurring[x].getDates(_26);
-for(var y=0;y<_29.length;y++){
-var _2b=_29[y].getMonth()+1;
-var _2c=_2b+"-"+_29[y].getDate()+"-"+_29[y].getFullYear();
-if(!dojo.lang.isArray(_27[_2c])){
-_27[_2c]=[];
-}
-if(!dojo.lang.inArray(_27[_2c],this.recurring[x])){
-_27[_2c].push(this.recurring[x]);
-}
-}
-}
-this.recurringEvents=_27;
-},getEvents:function(_2d){
-var _2e=[];
-var _2f=[];
-var _30=[];
-var _31=_2d.getMonth()+1;
-var _32=_31+"-"+_2d.getDate()+"-"+_2d.getFullYear();
-if(dojo.lang.isArray(this.nonRecurringEvents[_32])){
-_30=this.nonRecurringEvents[_32];
-dojo.debug("Number of nonRecurring Events: "+_30.length);
-}
-if(dojo.lang.isArray(this.recurringEvents[_32])){
-_2f=this.recurringEvents[_32];
-}
-_2e=_2f.concat(_30);
-if(_2e.length>0){
-return _2e;
-}
-return null;
-}});
-var StandardProperties=[_P("dtstart",1,true),_P("tzoffsetto",1,true),_P("tzoffsetfrom",1,true),_P("comment"),_P("rdate"),_P("rrule"),_P("tzname")];
-dojo.cal.iCalendar.Standard=function(_33){
-this.name="STANDARD";
-this._ValidProperties=StandardProperties;
-dojo.cal.iCalendar.Component.call(this,_33);
-};
-dojo.inherits(dojo.cal.iCalendar.Standard,dojo.cal.iCalendar.Component);
-var DaylightProperties=[_P("dtstart",1,true),_P("tzoffsetto",1,true),_P("tzoffsetfrom",1,true),_P("comment"),_P("rdate"),_P("rrule"),_P("tzname")];
-dojo.cal.iCalendar.Daylight=function(_34){
-this.name="DAYLIGHT";
-this._ValidProperties=DaylightProperties;
-dojo.cal.iCalendar.Component.call(this,_34);
-};
-dojo.inherits(dojo.cal.iCalendar.Daylight,dojo.cal.iCalendar.Component);
-var VEventProperties=[_P("class",1),_P("created",1),_P("description",1),_P("dtstart",1),_P("geo",1),_P("last-mod",1),_P("location",1),_P("organizer",1),_P("priority",1),_P("dtstamp",1),_P("seq",1),_P("status",1),_P("summary",1),_P("transp",1),_P("uid",1),_P("url",1),_P("recurid",1),[_P("dtend",1),_P("duration",1)],_P("attach"),_P("attendee"),_P("categories"),_P("comment"),_P("contact"),_P("exdate"),_P("exrule"),_P("rstatus"),_P("related"),_P("resources"),_P("rdate"),_P("rrule")];
-dojo.cal.iCalendar.VEvent=function(_35){
-this._ValidProperties=VEventProperties;
-this.name="VEVENT";
-dojo.cal.iCalendar.Component.call(this,_35);
-this.recurring=false;
-this.startDate=dojo.date.fromIso8601(this.dtstart.value);
-};
-dojo.inherits(dojo.cal.iCalendar.VEvent,dojo.cal.iCalendar.Component);
-dojo.extend(dojo.cal.iCalendar.VEvent,{getDates:function(_36){
-var _37=this.getDate();
-var _38=[];
-var _39=["su","mo","tu","we","th","fr","sa"];
-var _3a={"daily":1,"weekly":2,"monthly":3,"yearly":4,"byday":1,"bymonthday":1,"byweekno":2,"bymonth":3,"byyearday":4};
-for(var x=0;x<this.rrule.length;x++){
-var _3c=this.rrule[x];
-var _3d=_3c.freq.toLowerCase();
-var _3e=1;
-if(_3c.interval>_3e){
-_3e=_3c.interval;
-}
-var set=[];
-var _40=_3a[_3d];
-if(_3c.until){
-var _41=dojo.date.fromIso8601(_3c.until);
-}else{
-var _41=_36;
-}
-if(_41>_36){
-_41=_36;
-}
-if(_37<_41){
-var _42=function(){
-};
-var _43=function(){
-};
-_42.length=0;
-_43.length=0;
-switch(_3d){
-case "yearly":
-var _44=new Date(_37);
-set.push(_44);
-while(_44<_41){
-_44.setYear(_44.getFullYear()+_3e);
-_45=new Date(_44);
-if(_45<_41){
-set.push(_45);
-}
-}
-break;
-case "monthly":
-_44=new Date(_37);
-set.push(_44);
-while(_44<_41){
-_44.setMonth(_44.getMonth()+_3e);
-var _45=new Date(_44);
-if(_45<_41){
-set.push(_45);
-}
-}
-break;
-case "weekly":
-_44=new Date(_37);
-set.push(_44);
-while(_44<_41){
-_44.setDate(_44.getDate()+(7*_3e));
-var _45=new Date(_44);
-if(_45<_41){
-set.push(_45);
-}
-}
-break;
-case "daily":
-_44=new Date(_37);
-set.push(_44);
-while(_44<_41){
-_44.setDate(_44.getDate()+_3e);
-var _45=new Date(_44);
-if(_45<_41){
-set.push(_45);
-}
-}
-break;
-}
-if((_3c["bymonth"])&&(_3a["bymonth"]<_40)){
-for(var z=0;z<_3c["bymonth"].length;z++){
-if(z==0){
-for(var zz=0;zz<set.length;zz++){
-set[zz].setMonth(_3c["bymonth"][z]-1);
-}
-}else{
-var _48=[];
-for(var zz=0;zz<set.length;zz++){
-var _49=new Date(set[zz]);
-_49.setMonth(_3c[z]);
-_48.push(_49);
-}
-tmp=set.concat(_48);
-set=tmp;
-}
-}
-}
-if(_3c["byweekno"]&&!_3c["bymonth"]){
-dojo.debug("TODO: no support for byweekno yet");
-}
-if(_3c["byyearday"]&&!_3c["bymonth"]&&!_3c["byweekno"]){
-if(_3c["byyearday"].length>1){
-var _4b="([+-]?)([0-9]{1,3})";
-for(var z=1;x<_3c["byyearday"].length;z++){
-var _4c=_3c["byyearday"][z].match(_4b);
-if(z==1){
-for(var zz=0;zz<set.length;zz++){
-if(_4c[1]=="-"){
-dojo.date.setDayOfYear(set[zz],366-_4c[2]);
-}else{
-dojo.date.setDayOfYear(set[zz],_4c[2]);
-}
-}
-}else{
-var _48=[];
-for(var zz=0;zz<set.length;zz++){
-var _49=new Date(set[zz]);
-if(_4c[1]=="-"){
-dojo.date.setDayOfYear(_49,366-_4c[2]);
-}else{
-dojo.date.setDayOfYear(_49,_4c[2]);
-}
-_48.push(_49);
-}
-tmp=set.concat(_48);
-set=tmp;
-}
-}
-}
-}
-if(_3c["bymonthday"]&&(_3a["bymonthday"]<_40)){
-if(_3c["bymonthday"].length>0){
-var _4b="([+-]?)([0-9]{1,3})";
-for(var z=0;z<_3c["bymonthday"].length;z++){
-var _4c=_3c["bymonthday"][z].match(_4b);
-if(z==0){
-for(var zz=0;zz<set.length;zz++){
-if(_4c[1]=="-"){
-if(_4c[2]<dojo.date.getDaysInMonth(set[zz])){
-set[zz].setDate(dojo.date.getDaysInMonth(set[zz])-_4c[2]);
-}
-}else{
-if(_4c[2]<dojo.date.getDaysInMonth(set[zz])){
-set[zz].setDate(_4c[2]);
-}
-}
-}
-}else{
-var _48=[];
-for(var zz=0;zz<set.length;zz++){
-var _49=new Date(set[zz]);
-if(_4c[1]=="-"){
-if(_4c[2]<dojo.date.getDaysInMonth(set[zz])){
-_49.setDate(dojo.date.getDaysInMonth(set[zz])-_4c[2]);
-}
-}else{
-if(_4c[2]<dojo.date.getDaysInMonth(set[zz])){
-_49.setDate(_4c[2]);
-}
-}
-_48.push(_49);
-}
-tmp=set.concat(_48);
-set=tmp;
-}
-}
-}
-}
-if(_3c["byday"]&&(_3a["byday"]<_40)){
-if(_3c["bymonth"]){
-if(_3c["byday"].length>0){
-var _4b="([+-]?)([0-9]{0,1}?)([A-Za-z]{1,2})";
-for(var z=0;z<_3c["byday"].length;z++){
-var _4c=_3c["byday"][z].match(_4b);
-var _4d=_4c[2];
-var day=_4c[3].toLowerCase();
-if(z==0){
-for(var zz=0;zz<set.length;zz++){
-if(_4c[1]=="-"){
-var _4f=0;
-var _50=dojo.date.getDaysInMonth(set[zz]);
-var _51=1;
-set[zz].setDate(_50);
-if(_39[set[zz].getDay()]==day){
-_4f++;
-_51=7;
-}
-_51=1;
-while(_4f<_4d){
-set[zz].setDate(set[zz].getDate()-_51);
-if(_39[set[zz].getDay()]==day){
-_4f++;
-_51=7;
-}
-}
-}else{
-if(_4d){
-var _4f=0;
-set[zz].setDate(1);
-var _52=1;
-if(_39[set[zz].getDay()]==day){
-_4f++;
-_52=7;
-}
-while(_4f<_4d){
-set[zz].setDate(set[zz].getDate()+_52);
-if(_39[set[zz].getDay()]==day){
-_4f++;
-_52=7;
-}
-}
-}else{
-var _4f=0;
-var _48=[];
-_50=new Date(set[zz]);
-var _53=dojo.date.getDaysInMonth(set[zz]);
-_50.setDate(_53);
-set[zz].setDate(1);
-if(_39[set[zz].getDay()]==day){
-_4f++;
-}
-var _45=new Date(set[zz]);
-_52=1;
-while(_45.getDate()<_50){
-if(_39[_45.getDay()]==day){
-_4f++;
-if(_4f==1){
-set[zz]=_45;
-}else{
-_48.push(_45);
-_45=new Date(_45);
-_52=7;
-_45.setDate(_45.getDate()+_52);
-}
-}else{
-_45.setDate(_45.getDate()+_52);
-}
-}
-var t=set.concat(_48);
-set=t;
-}
-}
-}
-}else{
-var _48=[];
-for(var zz=0;zz<set.length;zz++){
-var _49=new Date(set[zz]);
-if(_4c[1]=="-"){
-if(_4c[2]<dojo.date.getDaysInMonth(set[zz])){
-_49.setDate(dojo.date.getDaysInMonth(set[zz])-_4c[2]);
-}
-}else{
-if(_4c[2]<dojo.date.getDaysInMonth(set[zz])){
-_49.setDate(_4c[2]);
-}
-}
-_48.push(_49);
-}
-tmp=set.concat(_48);
-set=tmp;
-}
-}
-}
-}else{
-dojo.debug("TODO: byday within a yearly rule without a bymonth");
-}
-}
-dojo.debug("TODO: Process BYrules for units larger than frequency");
-var tmp=_38.concat(set);
-_38=tmp;
-}
-}
-_38.push(_37);
-return _38;
-},getDate:function(){
-return dojo.date.fromIso8601(this.dtstart.value);
-}});
-var VTimeZoneProperties=[_P("tzid",1,true),_P("last-mod",1),_P("tzurl",1)];
-dojo.cal.iCalendar.VTimeZone=function(_55){
-this.name="VTIMEZONE";
-this._ValidProperties=VTimeZoneProperties;
-dojo.cal.iCalendar.Component.call(this,_55);
-};
-dojo.inherits(dojo.cal.iCalendar.VTimeZone,dojo.cal.iCalendar.Component);
-var VTodoProperties=[_P("class",1),_P("completed",1),_P("created",1),_P("description",1),_P("dtstart",1),_P("geo",1),_P("last-mod",1),_P("location",1),_P("organizer",1),_P("percent",1),_P("priority",1),_P("dtstamp",1),_P("seq",1),_P("status",1),_P("summary",1),_P("uid",1),_P("url",1),_P("recurid",1),[_P("due",1),_P("duration",1)],_P("attach"),_P("attendee"),_P("categories"),_P("comment"),_P("contact"),_P("exdate"),_P("exrule"),_P("rstatus"),_P("related"),_P("resources"),_P("rdate"),_P("rrule")];
-dojo.cal.iCalendar.VTodo=function(_56){
-this.name="VTODO";
-this._ValidProperties=VTodoProperties;
-dojo.cal.iCalendar.Component.call(this,_56);
-};
-dojo.inherits(dojo.cal.iCalendar.VTodo,dojo.cal.iCalendar.Component);
-var VJournalProperties=[_P("class",1),_P("created",1),_P("description",1),_P("dtstart",1),_P("last-mod",1),_P("organizer",1),_P("dtstamp",1),_P("seq",1),_P("status",1),_P("summary",1),_P("uid",1),_P("url",1),_P("recurid",1),_P("attach"),_P("attendee"),_P("categories"),_P("comment"),_P("contact"),_P("exdate"),_P("exrule"),_P("related"),_P("rstatus"),_P("rdate"),_P("rrule")];
-dojo.cal.iCalendar.VJournal=function(_57){
-this.name="VJOURNAL";
-this._ValidProperties=VJournalProperties;
-dojo.cal.iCalendar.Component.call(this,_57);
-};
-dojo.inherits(dojo.cal.iCalendar.VJournal,dojo.cal.iCalendar.Component);
-var VFreeBusyProperties=[_P("contact"),_P("dtstart",1),_P("dtend"),_P("duration"),_P("organizer",1),_P("dtstamp",1),_P("uid",1),_P("url",1),_P("attendee"),_P("comment"),_P("freebusy"),_P("rstatus")];
-dojo.cal.iCalendar.VFreeBusy=function(_58){
-this.name="VFREEBUSY";
-this._ValidProperties=VFreeBusyProperties;
-dojo.cal.iCalendar.Component.call(this,_58);
-};
-dojo.inherits(dojo.cal.iCalendar.VFreeBusy,dojo.cal.iCalendar.Component);
-var VAlarmProperties=[[_P("action",1,true),_P("trigger",1,true),[_P("duration",1),_P("repeat",1)],_P("attach",1)],[_P("action",1,true),_P("description",1,true),_P("trigger",1,true),[_P("duration",1),_P("repeat",1)]],[_P("action",1,true),_P("description",1,true),_P("trigger",1,true),_P("summary",1,true),_P("attendee","*",true),[_P("duration",1),_P("repeat",1)],_P("attach",1)],[_P("action",1,true),_P("attach",1,true),_P("trigger",1,true),[_P("duration",1),_P("repeat",1)],_P("description",1)]];
-dojo.cal.iCalendar.VAlarm=function(_59){
-this.name="VALARM";
-this._ValidProperties=VAlarmProperties;
-dojo.cal.iCalendar.Component.call(this,_59);
-};
-dojo.inherits(dojo.cal.iCalendar.VAlarm,dojo.cal.iCalendar.Component);
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/cal/textDirectory.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/cal/textDirectory.js
deleted file mode 100644
index d81a000..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/cal/textDirectory.js
+++ /dev/null
@@ -1,44 +0,0 @@
-dojo.provide("dojo.cal.textDirectory");
-dojo.require("dojo.string");
-dojo.cal.textDirectory.Property=function(_1){
-var _2=dojo.string.trim(_1.substring(0,_1.indexOf(":")));
-var _3=dojo.string.trim(_1.substr(_1.indexOf(":")+1));
-var _4=dojo.string.splitEscaped(_2,";");
-this.name=_4[0];
-_4.splice(0,1);
-this.params=[];
-var _5;
-for(var i=0;i<_4.length;i++){
-_5=_4[i].split("=");
-var _7=dojo.string.trim(_5[0].toUpperCase());
-if(_5.length==1){
-this.params.push([_7]);
-continue;
-}
-var _8=dojo.string.splitEscaped(_5[1],",");
-for(var j=0;j<_8.length;j++){
-if(dojo.string.trim(_8[j])!=""){
-this.params.push([_7,dojo.string.trim(_8[j])]);
-}
-}
-}
-if(this.name.indexOf(".")>0){
-_5=this.name.split(".");
-this.group=_5[0];
-this.name=_5[1];
-}
-this.value=_3;
-};
-dojo.cal.textDirectory.tokenise=function(_a){
-var _b=dojo.string.normalizeNewlines(_a,"\n").replace(/\n[ \t]/g,"").replace(/\x00/g,"");
-var _c=_b.split("\n");
-var _d=[];
-for(var i=0;i<_c.length;i++){
-if(dojo.string.trim(_c[i])==""){
-continue;
-}
-var _f=new dojo.cal.textDirectory.Property(_c[i]);
-_d.push(_f);
-}
-return _d;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Axis.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Axis.js
deleted file mode 100644
index 46b361f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Axis.js
+++ /dev/null
@@ -1,119 +0,0 @@
-dojo.provide("dojo.charting.Axis");
-dojo.require("dojo.lang.common");
-dojo.charting.Axis=function(_1,_2,_3){
-var id="dojo-charting-axis-"+dojo.charting.Axis.count++;
-this.getId=function(){
-return id;
-};
-this.setId=function(_5){
-id=_5;
-};
-this.scale=_2||"linear";
-this.label=_1||"";
-this.showLabel=true;
-this.showLabels=true;
-this.showLines=false;
-this.showTicks=false;
-this.range={upper:100,lower:0};
-this.origin="min";
-this._origin=null;
-this.labels=_3||[];
-this._labels=[];
-this.nodes={main:null,axis:null,label:null,labels:null,lines:null,ticks:null};
-this._rerender=false;
-};
-dojo.charting.Axis.count=0;
-dojo.extend(dojo.charting.Axis,{getCoord:function(_6,_7,_8){
-_6=parseFloat(_6,10);
-var _9=_7.getArea();
-if(_8.axisX==this){
-var _a=0-this.range.lower;
-var _b=this.range.lower+_a;
-var _c=this.range.upper+_a;
-_6+=_a;
-return (_6*((_9.right-_9.left)/_c))+_9.left;
-}else{
-var _c=this.range.upper;
-var _b=this.range.lower;
-var _a=0;
-if(_b<0){
-_a+=Math.abs(_b);
-}
-_c+=_a;
-_b+=_a;
-_6+=_a;
-var _d=_9.bottom;
-var _e=_9.top;
-return (((_d-_e)/(_c-_b))*(_c-_6))+_e;
-}
-},initializeOrigin:function(_f,_10){
-if(this._origin==null){
-this._origin=this.origin;
-}
-if(isNaN(this._origin)){
-if(this._origin.toLowerCase()=="max"){
-this.origin=_f.range[(_10=="y")?"upper":"lower"];
-}else{
-if(this._origin.toLowerCase()=="min"){
-this.origin=_f.range[(_10=="y")?"lower":"upper"];
-}else{
-this.origin=0;
-}
-}
-}
-},initializeLabels:function(){
-this._labels=[];
-if(this.labels.length==0){
-this.showLabels=false;
-this.showLines=false;
-this.showTicks=false;
-}else{
-if(this.labels[0].label&&this.labels[0].value!=null){
-for(var i=0;i<this.labels.length;i++){
-this._labels.push(this.labels[i]);
-}
-}else{
-if(!isNaN(this.labels[0])){
-for(var i=0;i<this.labels.length;i++){
-this._labels.push({label:this.labels[i],value:this.labels[i]});
-}
-}else{
-var a=[];
-for(var i=0;i<this.labels.length;i++){
-a.push(this.labels[i]);
-}
-var s=a.shift();
-this._labels.push({label:s,value:this.range.lower});
-if(a.length>0){
-var s=a.pop();
-this._labels.push({label:s,value:this.range.upper});
-}
-if(a.length>0){
-var _14=this.range.upper-this.range.lower;
-var _15=_14/(this.labels.length-1);
-for(var i=1;i<=a.length;i++){
-this._labels.push({label:a[i-1],value:this.range.lower+(_15*i)});
-}
-}
-}
-}
-}
-},initialize:function(_16,_17,_18,_19){
-this.destroy();
-this.initializeOrigin(_18,_19);
-this.initializeLabels();
-var _1a=this.render(_16,_17,_18,_19);
-return _1a;
-},destroy:function(){
-for(var p in this.nodes){
-while(this.nodes[p]&&this.nodes[p].childNodes.length>0){
-this.nodes[p].removeChild(this.nodes[p].childNodes[0]);
-}
-if(this.nodes[p]&&this.nodes[p].parentNode){
-this.nodes[p].parentNode.removeChild(this.nodes[p]);
-}
-this.nodes[p]=null;
-}
-}});
-dojo.requireIf(dojo.render.svg.capable,"dojo.charting.svg.Axis");
-dojo.requireIf(dojo.render.vml.capable,"dojo.charting.vml.Axis");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Chart.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Chart.js
deleted file mode 100644
index 54f19ea..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Chart.js
+++ /dev/null
@@ -1,51 +0,0 @@
-dojo.provide("dojo.charting.Chart");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.charting.PlotArea");
-dojo.charting.Chart=function(_1,_2,_3){
-this.node=_1||null;
-this.title=_2||"Chart";
-this.description=_3||"";
-this.plotAreas=[];
-};
-dojo.extend(dojo.charting.Chart,{addPlotArea:function(_4,_5){
-if(_4.x!=null&&_4.left==null){
-_4.left=_4.x;
-}
-if(_4.y!=null&&_4.top==null){
-_4.top=_4.y;
-}
-this.plotAreas.push(_4);
-if(_5){
-this.render();
-}
-},onInitialize:function(_6){
-},onRender:function(_7){
-},onDestroy:function(_8){
-},initialize:function(){
-if(!this.node){
-dojo.raise("dojo.charting.Chart.initialize: there must be a root node defined for the Chart.");
-}
-this.destroy();
-this.render();
-this.onInitialize(this);
-},render:function(){
-if(this.node.style.position!="absolute"){
-this.node.style.position="relative";
-}
-for(var i=0;i<this.plotAreas.length;i++){
-var _a=this.plotAreas[i].plotArea;
-var _b=_a.initialize();
-_b.style.position="absolute";
-_b.style.top=this.plotAreas[i].top+"px";
-_b.style.left=this.plotAreas[i].left+"px";
-this.node.appendChild(_b);
-_a.render();
-}
-},destroy:function(){
-for(var i=0;i<this.plotAreas.length;i++){
-this.plotAreas[i].plotArea.destroy();
-}
-while(this.node&&this.node.childNodes&&this.node.childNodes.length>0){
-this.node.removeChild(this.node.childNodes[0]);
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Plot.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Plot.js
deleted file mode 100644
index 34a0b3b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Plot.js
+++ /dev/null
@@ -1,69 +0,0 @@
-dojo.provide("dojo.charting.Plot");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.charting.Axis");
-dojo.require("dojo.charting.Series");
-dojo.charting.RenderPlotSeries={Singly:"single",Grouped:"grouped"};
-dojo.charting.Plot=function(_1,_2,_3){
-var id="dojo-charting-plot-"+dojo.charting.Plot.count++;
-this.getId=function(){
-return id;
-};
-this.setId=function(_5){
-id=_5;
-};
-this.axisX=null;
-this.axisY=null;
-this.series=[];
-this.dataNode=null;
-this.renderType=dojo.charting.RenderPlotSeries.Singly;
-if(_1){
-this.setAxis(_1,"x");
-}
-if(_2){
-this.setAxis(_2,"y");
-}
-if(_3){
-for(var i=0;i<_3.length;i++){
-this.addSeries(_3[i]);
-}
-}
-};
-dojo.charting.Plot.count=0;
-dojo.extend(dojo.charting.Plot,{addSeries:function(_7,_8){
-if(_7.plotter){
-this.series.push(_7);
-}else{
-this.series.push({data:_7,plotter:_8||dojo.charting.Plotters["Default"]});
-}
-},setAxis:function(_9,_a){
-if(_a.toLowerCase()=="x"){
-this.axisX=_9;
-}else{
-if(_a.toLowerCase()=="y"){
-this.axisY=_9;
-}
-}
-},getRanges:function(){
-var _b,_c,_d,_e;
-_b=_d=Number.MAX_VALUE;
-_c=_e=Number.MIN_VALUE;
-for(var i=0;i<this.series.length;i++){
-var _10=this.series[i].data.evaluate();
-for(var j=0;j<_10.length;j++){
-var _12=_10[j];
-_b=Math.min(_12.x,_b);
-_d=Math.min(_12.y,_d);
-_c=Math.max(_12.x,_c);
-_e=Math.max(_12.y,_e);
-}
-}
-return {x:{upper:_c,lower:_b},y:{upper:_e,lower:_d},toString:function(){
-return "[ x:"+_c+" - "+_b+", y:"+_e+" - "+_d+"]";
-}};
-},destroy:function(){
-var _13=this.dataNode;
-while(_13&&_13.childNodes&&_13.childNodes.length>0){
-_13.removeChild(_13.childNodes[0]);
-}
-this.dataNode=null;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/PlotArea.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/PlotArea.js
deleted file mode 100644
index 69dc875..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/PlotArea.js
+++ /dev/null
@@ -1,124 +0,0 @@
-dojo.provide("dojo.charting.PlotArea");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.gfx.color.hsl");
-dojo.require("dojo.charting.Plot");
-dojo.charting.PlotArea=function(){
-var id="dojo-charting-plotarea-"+dojo.charting.PlotArea.count++;
-this.getId=function(){
-return id;
-};
-this.setId=function(_2){
-id=_2;
-};
-this.areaType="standard";
-this.plots=[];
-this.size={width:600,height:400};
-this.padding={top:10,right:10,bottom:20,left:20};
-this.nodes={main:null,area:null,background:null,axes:null,plots:null};
-this._color={h:140,s:120,l:120,step:27};
-};
-dojo.charting.PlotArea.count=0;
-dojo.extend(dojo.charting.PlotArea,{nextColor:function(){
-var _3=dojo.gfx.color.hsl2rgb(this._color.h,this._color.s,this._color.l);
-this._color.h=(this._color.h+this._color.step)%360;
-while(this._color.h<140){
-this._color.h+=this._color.step;
-}
-return dojo.gfx.color.rgb2hex(_3[0],_3[1],_3[2]);
-},getArea:function(){
-return {left:this.padding.left,right:this.size.width-this.padding.right,top:this.padding.top,bottom:this.size.height-this.padding.bottom,toString:function(){
-var a=[this.top,this.right,this.bottom,this.left];
-return "["+a.join()+"]";
-}};
-},getAxes:function(){
-var _5={};
-for(var i=0;i<this.plots.length;i++){
-var _7=this.plots[i];
-_5[_7.axisX.getId()]={axis:_7.axisX,drawAgainst:_7.axisY,plot:_7,plane:"x"};
-_5[_7.axisY.getId()]={axis:_7.axisY,drawAgainst:_7.axisX,plot:_7,plane:"y"};
-}
-return _5;
-},getLegendInfo:function(){
-var a=[];
-for(var i=0;i<this.plots.length;i++){
-for(var j=0;j<this.plots[i].series.length;j++){
-var _b=this.plots[i].series[j].data;
-a.push({label:_b.label,color:_b.color});
-}
-}
-return a;
-},setAxesRanges:function(){
-var _c={};
-var _d={};
-for(var i=0;i<this.plots.length;i++){
-var _f=this.plots[i];
-var _c=_f.getRanges();
-var x=_c.x;
-var y=_c.y;
-var ax,ay;
-if(!_d[_f.axisX.getId()]){
-_d[_f.axisX.getId()]=_f.axisX;
-_c[_f.axisX.getId()]={upper:x.upper,lower:x.lower};
-}
-ax=_c[_f.axisX.getId()];
-ax.upper=Math.max(ax.upper,x.upper);
-ax.lower=Math.min(ax.lower,x.lower);
-if(!_d[_f.axisY.getId()]){
-_d[_f.axisY.getId()]=_f.axisY;
-_c[_f.axisY.getId()]={upper:y.upper,lower:y.lower};
-}
-ay=_c[_f.axisY.getId()];
-ay.upper=Math.max(ay.upper,y.upper);
-ay.lower=Math.min(ay.lower,y.lower);
-}
-for(var p in _d){
-_d[p].range=_c[p];
-}
-},render:function(_15,_16){
-if(!this.nodes.main||!this.nodes.area||!this.nodes.background||!this.nodes.plots||!this.nodes.axes){
-this.initialize();
-}
-this.resize();
-for(var i=0;i<this.plots.length;i++){
-var _18=this.plots[i];
-if(_18.dataNode){
-this.nodes.plots.removeChild(_18.dataNode);
-}
-var _19=this.initializePlot(_18);
-switch(_18.renderType){
-case dojo.charting.RenderPlotSeries.Grouped:
-if(_18.series[0]){
-_19.appendChild(_18.series[0].plotter(this,_18,_15,_16));
-}
-break;
-case dojo.charting.RenderPlotSeries.Singly:
-default:
-for(var j=0;j<_18.series.length;j++){
-var _1b=_18.series[j];
-var _1c=_1b.data.evaluate(_15);
-_19.appendChild(_1b.plotter(_1c,this,_18,_16));
-}
-}
-this.nodes.plots.appendChild(_19);
-}
-},destroy:function(){
-for(var i=0;i<this.plots.length;i++){
-this.plots[i].destroy();
-}
-for(var p in this.nodes){
-var _1f=this.nodes[p];
-if(!_1f){
-continue;
-}
-if(!_1f.childNodes){
-continue;
-}
-while(_1f.childNodes.length>0){
-_1f.removeChild(_1f.childNodes[0]);
-}
-this.nodes[p]=null;
-}
-}});
-dojo.requireIf(dojo.render.svg.capable,"dojo.charting.svg.PlotArea");
-dojo.requireIf(dojo.render.vml.capable,"dojo.charting.vml.PlotArea");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Plotters.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Plotters.js
deleted file mode 100644
index 3ab0666..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Plotters.js
+++ /dev/null
@@ -1,3 +0,0 @@
-dojo.provide("dojo.charting.Plotters");
-dojo.requireIf(dojo.render.svg.capable,"dojo.charting.svg.Plotters");
-dojo.requireIf(dojo.render.vml.capable,"dojo.charting.vml.Plotters");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/README.txt b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/README.txt
deleted file mode 100644
index c20a415..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/README.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-Dojo Charting Engine
-=========================================================================
-The Dojo Charting Engine is a (fairly) complex object structure, designed
-to provide as much flexibility as possible in terms of chart construction.
-To this end, the engine details the following structure:
-
-Chart
----PlotArea[]
-------Plot[]
----------Axis (axisX)
----------Axis (axisY)
----------Series[]
-
-
-A Chart object is the main entity; it is the entire graphic.  A Chart may
-have any number of PlotArea objects, which are the basic canvas against 
-which data is plotted.  A PlotArea may have any number of Plot objects,
-which is a container representing up to 2 axes and any number of series
-to be plotted against those axes; a Series represents a binding against
-two fields from a data source (initial rev, this data source is always of
-type dojo.collections.Store but this will probably change once dojo.data
-is in production).
-
-The point of this structure is to allow for as much flexibility as possible
-in terms of what kinds of charts can be represented by the engine.  The
-current plan is to accomodate up to analytical financial charts, which tend
-to have 3 plot areas and any number of different types of axes on each one.
-
-The main exception to this is the pie chart, which will have it's own
-custom codebase.  Also, 3D charts are not accounted for at this time,
-although the only thing that will probably need to be altered to make
-that work would be Plot and Series (to accomodate the additional Z axis).
-
-Finally, a Plot will render its series[] through the use of Plotters, which
-are custom methods to render specific types of charts.
--------------------------------------------------------------------------
-In terms of widgets, the basic concept is that there is a central, super-
-flexible Chart widget (Chart, oddly enough), and then any number of preset
-chart type widgets, that are basically built to serve a simple, easy 
-purpose.  For instance, if someone just needs to plot a series of lines,
-they would be better off using the LineChart widget; but if someone needed
-to plot a combo chart, that has 2 Y Axes (one linear, one log) against the
-same X Axis, using lines and areas, then they will want to use a Chart widget.
-Note also that unlike other widgets, the Charting engine *can* be called
-directly from script *without* the need for the actual widget engine to be
-loaded; the Chart widgets are thin wrappers around the charting engine.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Series.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Series.js
deleted file mode 100644
index 6ab4126..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/Series.js
+++ /dev/null
@@ -1,181 +0,0 @@
-dojo.provide("dojo.charting.Series");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.charting.Plotters");
-dojo.charting.Series=function(_1){
-var _2=_1||{length:1};
-this.dataSource=_2.dataSource||null;
-this.bindings={};
-this.color=_2.color;
-this.label=_2.label;
-if(_2.bindings){
-for(var p in _2.bindings){
-this.addBinding(p,_2.bindings[p]);
-}
-}
-};
-dojo.extend(dojo.charting.Series,{bind:function(_4,_5){
-this.dataSource=_4;
-this.bindings=_5;
-},addBinding:function(_6,_7){
-this.bindings[_6]=_7;
-},evaluate:function(_8){
-var _9=[];
-var a=this.dataSource.getData();
-var l=a.length;
-var _c=0;
-var _d=l;
-if(_8){
-if(_8.between){
-for(var i=0;i<l;i++){
-var _f=this.dataSource.getField(a[i],_8.between.field);
-if(_f>=_8.between.low&&_f<=_8.between.high){
-var o={src:a[i],series:this};
-for(var p in this.bindings){
-o[p]=this.dataSource.getField(a[i],this.bindings[p]);
-}
-_9.push(o);
-}
-}
-}else{
-if(_8.from||_8.length){
-if(_8.from){
-_c=Math.max(_8.from,0);
-if(_8.to){
-_d=Math.min(_8.to,_d);
-}
-}else{
-if(_8.length<0){
-_c=Math.max((_d+length),0);
-}else{
-_d=Math.min((_c+length),_d);
-}
-}
-for(var i=_c;i<_d;i++){
-var o={src:a[i],series:this};
-for(var p in this.bindings){
-o[p]=this.dataSource.getField(a[i],this.bindings[p]);
-}
-_9.push(o);
-}
-}
-}
-}else{
-for(var i=_c;i<_d;i++){
-var o={src:a[i],series:this};
-for(var p in this.bindings){
-o[p]=this.dataSource.getField(a[i],this.bindings[p]);
-}
-_9.push(o);
-}
-}
-if(_9.length>0&&typeof (_9[0].x)!="undefined"){
-_9.sort(function(a,b){
-if(a.x>b.x){
-return 1;
-}
-if(a.x<b.x){
-return -1;
-}
-return 0;
-});
-}
-return _9;
-},trends:{createRange:function(_14,len){
-var idx=_14.length-1;
-var _17=(len||_14.length);
-return {"index":idx,"length":_17,"start":Math.max(idx-_17,0)};
-},mean:function(_18,len){
-var _1a=this.createRange(_18,len);
-if(_1a.index<0){
-return 0;
-}
-var _1b=0;
-var _1c=0;
-for(var i=_1a.index;i>=_1a.start;i--){
-_1b+=_18[i].y;
-_1c++;
-}
-_1b/=Math.max(_1c,1);
-return _1b;
-},variance:function(_1e,len){
-var _20=this.createRange(_1e,len);
-if(_20.index<0){
-return 0;
-}
-var _21=0;
-var _22=0;
-var _23=0;
-for(var i=_20.index;i>=_20.start;i--){
-_21+=_1e[i].y;
-_22+=Math.pow(_1e[i].y,2);
-_23++;
-}
-return (_22/_23)-Math.pow(_21/_23,2);
-},standardDeviation:function(_25,len){
-return Math.sqrt(this.getVariance(_25,len));
-},max:function(_27,len){
-var _29=this.createRange(_27,len);
-if(_29.index<0){
-return 0;
-}
-var max=Number.MIN_VALUE;
-for(var i=_29.index;i>=_29.start;i--){
-max=Math.max(_27[i].y,max);
-}
-return max;
-},min:function(_2c,len){
-var _2e=this.createRange(_2c,len);
-if(_2e.index<0){
-return 0;
-}
-var min=Number.MAX_VALUE;
-for(var i=_2e.index;i>=_2e.start;i--){
-min=Math.min(_2c[i].y,min);
-}
-return min;
-},median:function(_31,len){
-var _33=this.createRange(_31,len);
-if(_33.index<0){
-return 0;
-}
-var a=[];
-for(var i=_33.index;i>=_33.start;i--){
-var b=false;
-for(var j=0;j<a.length;j++){
-if(_31[i].y==a[j]){
-b=true;
-break;
-}
-}
-if(!b){
-a.push(_31[i].y);
-}
-}
-a.sort();
-if(a.length>0){
-return a[Math.ceil(a.length/2)];
-}
-return 0;
-},mode:function(_38,len){
-var _3a=this.createRange(_38,len);
-if(_3a.index<0){
-return 0;
-}
-var o={};
-var ret=0;
-var _3d=Number.MIN_VALUE;
-for(var i=_3a.index;i>=_3a.start;i--){
-if(!o[_38[i].y]){
-o[_38[i].y]=1;
-}else{
-o[_38[i].y]++;
-}
-}
-for(var p in o){
-if(_3d<o[p]){
-_3d=o[p];
-ret=p;
-}
-}
-return ret;
-}}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/__package__.js
deleted file mode 100644
index 681b35e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/__package__.js
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dojo.charting.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/svg/Axis.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/svg/Axis.js
deleted file mode 100644
index f6bbe2b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/svg/Axis.js
+++ /dev/null
@@ -1,175 +0,0 @@
-dojo.provide("dojo.charting.svg.Axis");
-dojo.require("dojo.lang.common");
-if(dojo.render.svg.capable){
-dojo.extend(dojo.charting.Axis,{renderLines:function(_1,_2,_3){
-if(this.nodes.lines){
-while(this.nodes.lines.childNodes.length>0){
-this.nodes.lines.removeChild(this.nodes.lines.childNodes[0]);
-}
-if(this.nodes.lines.parentNode){
-this.nodes.lines.parentNode.removeChild(this.nodes.lines);
-this.nodes.lines=null;
-}
-}
-var _4=_1.getArea();
-var g=this.nodes.lines=document.createElementNS(dojo.svg.xmlns.svg,"g");
-g.setAttribute("id",this.getId()+"-lines");
-for(var i=0;i<this._labels.length;i++){
-if(this._labels[i].value==this.origin){
-continue;
-}
-var v=this.getCoord(this._labels[i].value,_1,_2);
-var l=document.createElementNS(dojo.svg.xmlns.svg,"line");
-l.setAttribute("style","stroke:#999;stroke-width:1px;stroke-dasharray:1,4;");
-if(_3=="x"){
-l.setAttribute("y1",_4.top);
-l.setAttribute("y2",_4.bottom);
-l.setAttribute("x1",v);
-l.setAttribute("x2",v);
-}else{
-if(_3=="y"){
-l.setAttribute("y1",v);
-l.setAttribute("y2",v);
-l.setAttribute("x1",_4.left);
-l.setAttribute("x2",_4.right);
-}
-}
-g.appendChild(l);
-}
-return g;
-},renderTicks:function(_9,_a,_b,_c){
-if(this.nodes.ticks){
-while(this.nodes.ticks.childNodes.length>0){
-this.nodes.ticks.removeChild(this.nodes.ticks.childNodes[0]);
-}
-if(this.nodes.ticks.parentNode){
-this.nodes.ticks.parentNode.removeChild(this.nodes.ticks);
-this.nodes.ticks=null;
-}
-}
-var g=this.nodes.ticks=document.createElementNS(dojo.svg.xmlns.svg,"g");
-g.setAttribute("id",this.getId()+"-ticks");
-for(var i=0;i<this._labels.length;i++){
-var v=this.getCoord(this._labels[i].value,_9,_a);
-var l=document.createElementNS(dojo.svg.xmlns.svg,"line");
-l.setAttribute("style","stroke:#000;stroke-width:1pt;");
-if(_b=="x"){
-l.setAttribute("y1",_c);
-l.setAttribute("y2",_c+3);
-l.setAttribute("x1",v);
-l.setAttribute("x2",v);
-}else{
-if(_b=="y"){
-l.setAttribute("y1",v);
-l.setAttribute("y2",v);
-l.setAttribute("x1",_c-2);
-l.setAttribute("x2",_c+2);
-}
-}
-g.appendChild(l);
-}
-return g;
-},renderLabels:function(_11,_12,_13,_14,_15,_16){
-function createLabel(_17,x,y,_1a,_1b){
-var _1c=document.createElementNS(dojo.svg.xmlns.svg,"text");
-_1c.setAttribute("x",x);
-_1c.setAttribute("y",(_13=="x"?y:y+2));
-_1c.setAttribute("style","text-anchor:"+_1b+";font-family:sans-serif;font-size:"+_1a+"px;fill:#000;");
-_1c.appendChild(document.createTextNode(_17));
-return _1c;
-}
-if(this.nodes.labels){
-while(this.nodes.labels.childNodes.length>0){
-this.nodes.labels.removeChild(this.nodes.labels.childNodes[0]);
-}
-if(this.nodes.labels.parentNode){
-this.nodes.labels.parentNode.removeChild(this.nodes.labels);
-this.nodes.labels=null;
-}
-}
-var g=this.nodes.labels=document.createElementNS(dojo.svg.xmlns.svg,"g");
-g.setAttribute("id",this.getId()+"-labels");
-for(var i=0;i<this._labels.length;i++){
-var v=this.getCoord(this._labels[i].value,_11,_12);
-if(_13=="x"){
-g.appendChild(createLabel(this._labels[i].label,v,_14,_15,_16));
-}else{
-if(_13=="y"){
-g.appendChild(createLabel(this._labels[i].label,_14,v,_15,_16));
-}
-}
-}
-return g;
-},render:function(_20,_21,_22,_23){
-if(!this._rerender&&this.nodes.main){
-return this.nodes.main;
-}
-this._rerender=false;
-var _24=_20.getArea();
-var _25=1;
-var _26="stroke:#000;stroke-width:"+_25+"px;";
-var _27=10;
-var _28=_22.getCoord(this.origin,_20,_21);
-this.nodes.main=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var g=this.nodes.main;
-g.setAttribute("id",this.getId());
-var _2a=this.nodes.axis=document.createElementNS(dojo.svg.xmlns.svg,"line");
-if(_23=="x"){
-_2a.setAttribute("y1",_28);
-_2a.setAttribute("y2",_28);
-_2a.setAttribute("x1",_24.left-_25);
-_2a.setAttribute("x2",_24.right+_25);
-_2a.setAttribute("style",_26);
-var y=_28+_27+2;
-if(this.showLines){
-g.appendChild(this.renderLines(_20,_21,_23,y));
-}
-if(this.showTicks){
-g.appendChild(this.renderTicks(_20,_21,_23,_28));
-}
-if(this.showLabels){
-g.appendChild(this.renderLabels(_20,_21,_23,y,_27,"middle"));
-}
-if(this.showLabel&&this.label){
-var x=_20.size.width/2;
-var _2d=document.createElementNS(dojo.svg.xmlns.svg,"text");
-_2d.setAttribute("x",x);
-_2d.setAttribute("y",(_28+(_27*2)+(_27/2)));
-_2d.setAttribute("style","text-anchor:middle;font-family:sans-serif;font-weight:bold;font-size:"+(_27+2)+"px;fill:#000;");
-_2d.appendChild(document.createTextNode(this.label));
-g.appendChild(_2d);
-}
-}else{
-_2a.setAttribute("x1",_28);
-_2a.setAttribute("x2",_28);
-_2a.setAttribute("y1",_24.top);
-_2a.setAttribute("y2",_24.bottom);
-_2a.setAttribute("style",_26);
-var _2e=this.origin==_22.range.upper;
-var x=_28+(_2e?4:-4);
-var _2f=_2e?"start":"end";
-if(this.showLines){
-g.appendChild(this.renderLines(_20,_21,_23,x));
-}
-if(this.showTicks){
-g.appendChild(this.renderTicks(_20,_21,_23,_28));
-}
-if(this.showLabels){
-g.appendChild(this.renderLabels(_20,_21,_23,x,_27,_2f));
-}
-if(this.showLabel&&this.label){
-var x=_2e?(_28+(_27*2)+(_27/2)):(_28-(_27*4));
-var y=_20.size.height/2;
-var _2d=document.createElementNS(dojo.svg.xmlns.svg,"text");
-_2d.setAttribute("x",x);
-_2d.setAttribute("y",y);
-_2d.setAttribute("transform","rotate(90, "+x+", "+y+")");
-_2d.setAttribute("style","text-anchor:middle;font-family:sans-serif;font-weight:bold;font-size:"+(_27+2)+"px;fill:#000;");
-_2d.appendChild(document.createTextNode(this.label));
-g.appendChild(_2d);
-}
-}
-g.appendChild(_2a);
-return g;
-}});
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/svg/PlotArea.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/svg/PlotArea.js
deleted file mode 100644
index 1fd1cd8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/svg/PlotArea.js
+++ /dev/null
@@ -1,64 +0,0 @@
-dojo.provide("dojo.charting.svg.PlotArea");
-dojo.require("dojo.lang.common");
-if(dojo.render.svg.capable){
-dojo.require("dojo.svg");
-dojo.extend(dojo.charting.PlotArea,{resize:function(){
-var _1=this.getArea();
-this.nodes.area.setAttribute("width",this.size.width);
-this.nodes.area.setAttribute("height",this.size.height);
-var _2=this.nodes.area.getElementsByTagName("rect")[0];
-_2.setAttribute("x",_1.left);
-_2.setAttribute("y",_1.top);
-_2.setAttribute("width",_1.right-_1.left);
-_2.setAttribute("height",_1.bottom-_1.top);
-this.nodes.background.setAttribute("width",this.size.width);
-this.nodes.background.setAttribute("height",this.size.height);
-if(this.nodes.plots){
-this.nodes.area.removeChild(this.nodes.plots);
-this.nodes.plots=null;
-}
-this.nodes.plots=document.createElementNS(dojo.svg.xmlns.svg,"g");
-this.nodes.plots.setAttribute("id",this.getId()+"-plots");
-this.nodes.plots.setAttribute("style","clip-path:url(#"+this.getId()+"-clip);");
-this.nodes.area.appendChild(this.nodes.plots);
-for(var i=0;i<this.plots.length;i++){
-this.nodes.plots.appendChild(this.initializePlot(this.plots[i]));
-}
-if(this.nodes.axes){
-this.nodes.area.removeChild(this.nodes.axes);
-this.nodes.axes=null;
-}
-this.nodes.axes=document.createElementNS(dojo.svg.xmlns.svg,"g");
-this.nodes.axes.setAttribute("id",this.getId()+"-axes");
-this.nodes.area.appendChild(this.nodes.axes);
-var _4=this.getAxes();
-for(var p in _4){
-var _6=_4[p];
-this.nodes.axes.appendChild(_6.axis.initialize(this,_6.plot,_6.drawAgainst,_6.plane));
-}
-},initializePlot:function(_7){
-_7.destroy();
-_7.dataNode=document.createElementNS(dojo.svg.xmlns.svg,"g");
-_7.dataNode.setAttribute("id",_7.getId());
-return _7.dataNode;
-},initialize:function(){
-this.destroy();
-this.nodes.main=document.createElement("div");
-this.nodes.area=document.createElementNS(dojo.svg.xmlns.svg,"svg");
-this.nodes.area.setAttribute("id",this.getId());
-this.nodes.main.appendChild(this.nodes.area);
-var _8=document.createElementNS(dojo.svg.xmlns.svg,"defs");
-var _9=document.createElementNS(dojo.svg.xmlns.svg,"clipPath");
-_9.setAttribute("id",this.getId()+"-clip");
-var _a=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-_9.appendChild(_a);
-_8.appendChild(_9);
-this.nodes.area.appendChild(_8);
-this.nodes.background=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-this.nodes.background.setAttribute("id",this.getId()+"-background");
-this.nodes.background.setAttribute("fill","#fff");
-this.nodes.area.appendChild(this.nodes.background);
-this.resize();
-return this.nodes.main;
-}});
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/svg/Plotters.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/svg/Plotters.js
deleted file mode 100644
index c1eabc3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/svg/Plotters.js
+++ /dev/null
@@ -1,689 +0,0 @@
-dojo.provide("dojo.charting.svg.Plotters");
-dojo.require("dojo.lang.common");
-if(dojo.render.svg.capable){
-dojo.require("dojo.svg");
-dojo.mixin(dojo.charting.Plotters,{Bar:function(_1,_2,_3,_4){
-var _5=_1.getArea();
-var _6=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var n=_2.series.length;
-var _8=[];
-for(var i=0;i<n;i++){
-var _a=_2.series[i].data.evaluate(_3);
-_8.push(_a);
-}
-var _b=8;
-var _c=_8[0].length;
-if(_c==0){
-return _6;
-}
-var _d=((_5.right-_5.left)-(_b*(_c-1)))/_c;
-var _e=_d/n;
-var _f=_2.axisY.getCoord(_2.axisX.origin,_1,_2);
-for(var i=0;i<_c;i++){
-var _10=_5.left+(_d*i)+(_b*i);
-for(var j=0;j<n;j++){
-var _12=_8[j][i].y;
-var yA=_f;
-var x=_10+(_e*j);
-var y=_2.axisY.getCoord(_12,_1,_2);
-var h=Math.abs(yA-y);
-if(_12<_2.axisX.origin){
-yA=y;
-y=_f;
-}
-var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-bar.setAttribute("fill",_8[j][i].series.color);
-bar.setAttribute("stroke-width","0");
-bar.setAttribute("x",x);
-bar.setAttribute("y",y);
-bar.setAttribute("width",_e);
-bar.setAttribute("height",h);
-bar.setAttribute("fill-opacity","0.6");
-if(_4){
-_4(bar,_8[j][i].src);
-}
-_6.appendChild(bar);
-}
-}
-return _6;
-},HorizontalBar:function(_18,_19,_1a,_1b){
-var _1c=_18.getArea();
-var _1d=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var n=_19.series.length;
-var _1f=[];
-for(var i=0;i<n;i++){
-var tmp=_19.series[i].data.evaluate(_1a);
-_1f.push(tmp);
-}
-var _22=6;
-var _23=_1f[0].length;
-if(_23==0){
-return _1d;
-}
-var h=((_1c.bottom-_1c.top)-(_22*(_23-1)))/_23;
-var _25=h/n;
-var _26=_19.axisX.getCoord(0,_18,_19);
-for(var i=0;i<_23;i++){
-var _27=_1c.top+(h*i)+(_22*i);
-for(var j=0;j<n;j++){
-var _29=_1f[j][i].y;
-var y=_27+(_25*j);
-var xA=_26;
-var x=_19.axisX.getCoord(_29,_18,_19);
-var w=Math.abs(x-xA);
-if(_29>0){
-x=_26;
-}
-var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-bar.setAttribute("fill",_1f[j][i].series.color);
-bar.setAttribute("stroke-width","0");
-bar.setAttribute("x",xA);
-bar.setAttribute("y",y);
-bar.setAttribute("width",w);
-bar.setAttribute("height",_25);
-bar.setAttribute("fill-opacity","0.6");
-if(_1b){
-_1b(bar,_1f[j][i].src);
-}
-_1d.appendChild(bar);
-}
-}
-return _1d;
-},Gantt:function(_2f,_30,_31,_32){
-var _33=_2f.getArea();
-var _34=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var n=_30.series.length;
-var _36=[];
-for(var i=0;i<n;i++){
-var tmp=_30.series[i].data.evaluate(_31);
-_36.push(tmp);
-}
-var _39=2;
-var _3a=_36[0].length;
-if(_3a==0){
-return _34;
-}
-var h=((_33.bottom-_33.top)-(_39*(_3a-1)))/_3a;
-var _3c=h/n;
-for(var i=0;i<_3a;i++){
-var _3d=_33.top+(h*i)+(_39*i);
-for(var j=0;j<n;j++){
-var _3f=_36[j][i].high;
-var low=_36[j][i].low;
-if(low>_3f){
-var t=_3f;
-_3f=low;
-low=t;
-}
-var x=_30.axisX.getCoord(low,_2f,_30);
-var w=_30.axisX.getCoord(_3f,_2f,_30)-x;
-var y=_3d+(_3c*j);
-var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-bar.setAttribute("fill",_36[j][i].series.color);
-bar.setAttribute("stroke-width","0");
-bar.setAttribute("x",x);
-bar.setAttribute("y",y);
-bar.setAttribute("width",w);
-bar.setAttribute("height",_3c);
-bar.setAttribute("fill-opacity","0.6");
-if(_32){
-_32(bar,_36[j][i].src);
-}
-_34.appendChild(bar);
-}
-}
-return _34;
-},StackedArea:function(_46,_47,_48,_49){
-var _4a=_46.getArea();
-var _4b=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var n=_47.series.length;
-var _4d=[];
-var _4e=[];
-for(var i=0;i<n;i++){
-var tmp=_47.series[i].data.evaluate(_48);
-for(var j=0;j<tmp.length;j++){
-if(i==0){
-_4e.push(tmp[j].y);
-}else{
-_4e[j]+=tmp[j].y;
-}
-tmp[j].y=_4e[j];
-}
-_4d.push(tmp);
-}
-for(var i=n-1;i>=0;i--){
-var _52=document.createElementNS(dojo.svg.xmlns.svg,"path");
-_52.setAttribute("fill",_4d[i][0].series.color);
-_52.setAttribute("fill-opacity","0.4");
-_52.setAttribute("stroke",_4d[i][0].series.color);
-_52.setAttribute("stroke-width","1");
-_52.setAttribute("stroke-opacity","0.85");
-var cmd=[];
-var r=3;
-for(var j=0;j<_4d[i].length;j++){
-var _55=_4d[i];
-var x=_47.axisX.getCoord(_55[j].x,_46,_47);
-var y=_47.axisY.getCoord(_55[j].y,_46,_47);
-if(j==0){
-cmd.push("M");
-}else{
-cmd.push("L");
-}
-cmd.push(x+","+y);
-var c=document.createElementNS(dojo.svg.xmlns.svg,"circle");
-c.setAttribute("cx",x);
-c.setAttribute("cy",y);
-c.setAttribute("r","3");
-c.setAttribute("fill",_55[j].series.color);
-c.setAttribute("fill-opacity","0.6");
-c.setAttribute("stroke-width","1");
-c.setAttribute("stroke-opacity","0.85");
-_4b.appendChild(c);
-if(_49){
-_49(c,_4d[i].src);
-}
-}
-if(i==0){
-cmd.push("L");
-cmd.push(x+","+_47.axisY.getCoord(_47.axisX.origin,_46,_47));
-cmd.push("L");
-cmd.push(_47.axisX.getCoord(_4d[0][0].x,_46,_47)+","+_47.axisY.getCoord(_47.axisX.origin,_46,_47));
-cmd.push("Z");
-}else{
-var _55=_4d[i-1];
-cmd.push("L");
-cmd.push(x+","+Math.round(_47.axisY.getCoord(_55[_55.length-1].y,_46,_47)));
-for(var j=_55.length-2;j>=0;j--){
-var x=_47.axisX.getCoord(_55[j].x,_46,_47);
-var y=_47.axisY.getCoord(_55[j].y,_46,_47);
-cmd.push("L");
-cmd.push(x+","+y);
-}
-}
-_52.setAttribute("d",cmd.join(" ")+" Z");
-_4b.appendChild(_52);
-}
-return _4b;
-},StackedCurvedArea:function(_59,_5a,_5b,_5c){
-var _5d=3;
-var _5e=_59.getArea();
-var _5f=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var n=_5a.series.length;
-var _61=[];
-var _62=[];
-for(var i=0;i<n;i++){
-var tmp=_5a.series[i].data.evaluate(_5b);
-for(var j=0;j<tmp.length;j++){
-if(i==0){
-_62.push(tmp[j].y);
-}else{
-_62[j]+=tmp[j].y;
-}
-tmp[j].y=_62[j];
-}
-_61.push(tmp);
-}
-for(var i=n-1;i>=0;i--){
-var _66=document.createElementNS(dojo.svg.xmlns.svg,"path");
-_66.setAttribute("fill",_61[i][0].series.color);
-_66.setAttribute("fill-opacity","0.4");
-_66.setAttribute("stroke",_61[i][0].series.color);
-_66.setAttribute("stroke-width","1");
-_66.setAttribute("stroke-opacity","0.85");
-var cmd=[];
-var r=3;
-for(var j=0;j<_61[i].length;j++){
-var _69=_61[i];
-var x=_5a.axisX.getCoord(_69[j].x,_59,_5a);
-var y=_5a.axisY.getCoord(_69[j].y,_59,_5a);
-var dx=_5e.left+1;
-var dy=_5e.bottom;
-if(j>0){
-dx=x-_5a.axisX.getCoord(_69[j-1].x,_59,_5a);
-dy=_5a.axisY.getCoord(_69[j-1].y,_59,_5a);
-}
-if(j==0){
-cmd.push("M");
-}else{
-cmd.push("C");
-var cx=x-(_5d-1)*(dx/_5d);
-cmd.push(cx+","+dy);
-cx=x-(dx/_5d);
-cmd.push(cx+","+y);
-}
-cmd.push(x+","+y);
-var c=document.createElementNS(dojo.svg.xmlns.svg,"circle");
-c.setAttribute("cx",x);
-c.setAttribute("cy",y);
-c.setAttribute("r","3");
-c.setAttribute("fill",_69[j].series.color);
-c.setAttribute("fill-opacity","0.6");
-c.setAttribute("stroke-width","1");
-c.setAttribute("stroke-opacity","0.85");
-_5f.appendChild(c);
-if(_5c){
-_5c(c,_61[i].src);
-}
-}
-if(i==0){
-cmd.push("L");
-cmd.push(x+","+_5a.axisY.getCoord(_5a.axisX.origin,_59,_5a));
-cmd.push("L");
-cmd.push(_5a.axisX.getCoord(_61[0][0].x,_59,_5a)+","+_5a.axisY.getCoord(_5a.axisX.origin,_59,_5a));
-cmd.push("Z");
-}else{
-var _69=_61[i-1];
-cmd.push("L");
-cmd.push(x+","+Math.round(_5a.axisY.getCoord(_69[_69.length-1].y,_59,_5a)));
-for(var j=_69.length-2;j>=0;j--){
-var x=_5a.axisX.getCoord(_69[j].x,_59,_5a);
-var y=_5a.axisY.getCoord(_69[j].y,_59,_5a);
-var dx=x-_5a.axisX.getCoord(_69[j+1].x,_59,_5a);
-var dy=_5a.axisY.getCoord(_69[j+1].y,_59,_5a);
-cmd.push("C");
-var cx=x-(_5d-1)*(dx/_5d);
-cmd.push(cx+","+dy);
-cx=x-(dx/_5d);
-cmd.push(cx+","+y);
-cmd.push(x+","+y);
-}
-}
-_66.setAttribute("d",cmd.join(" ")+" Z");
-_5f.appendChild(_66);
-}
-return _5f;
-},DataBar:function(_70,_71,_72,_73){
-var _74=_71.getArea();
-var _75=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var n=_70.length;
-var w=(_74.right-_74.left)/(_72.axisX.range.upper-_72.axisX.range.lower);
-var _78=_72.axisY.getCoord(_72.axisX.origin,_71,_72);
-for(var i=0;i<n;i++){
-var _7a=_70[i].y;
-var yA=_78;
-var x=_72.axisX.getCoord(_70[i].x,_71,_72)-(w/2);
-var y=_72.axisY.getCoord(_7a,_71,_72);
-var h=Math.abs(yA-y);
-if(_7a<_72.axisX.origin){
-yA=y;
-y=_78;
-}
-var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-bar.setAttribute("fill",_70[i].series.color);
-bar.setAttribute("stroke-width","0");
-bar.setAttribute("x",x);
-bar.setAttribute("y",y);
-bar.setAttribute("width",w);
-bar.setAttribute("height",h);
-bar.setAttribute("fill-opacity","0.6");
-if(_73){
-_73(bar,_70[i].src);
-}
-_75.appendChild(bar);
-}
-return _75;
-},Line:function(_80,_81,_82,_83){
-var _84=_81.getArea();
-var _85=document.createElementNS(dojo.svg.xmlns.svg,"g");
-if(_80.length==0){
-return _85;
-}
-var _86=document.createElementNS(dojo.svg.xmlns.svg,"path");
-_85.appendChild(_86);
-_86.setAttribute("fill","none");
-_86.setAttribute("stroke",_80[0].series.color);
-_86.setAttribute("stroke-width","2");
-_86.setAttribute("stroke-opacity","0.85");
-if(_80[0].series.label!=null){
-_86.setAttribute("title",_80[0].series.label);
-}
-var cmd=[];
-for(var i=0;i<_80.length;i++){
-var x=_82.axisX.getCoord(_80[i].x,_81,_82);
-var y=_82.axisY.getCoord(_80[i].y,_81,_82);
-if(i==0){
-cmd.push("M");
-}else{
-cmd.push("L");
-}
-cmd.push(x+","+y);
-var c=document.createElementNS(dojo.svg.xmlns.svg,"circle");
-c.setAttribute("cx",x);
-c.setAttribute("cy",y);
-c.setAttribute("r","3");
-c.setAttribute("fill",_80[i].series.color);
-c.setAttribute("fill-opacity","0.6");
-c.setAttribute("stroke-width","1");
-c.setAttribute("stroke-opacity","0.85");
-_85.appendChild(c);
-if(_83){
-_83(c,_80[i].src);
-}
-}
-_86.setAttribute("d",cmd.join(" "));
-return _85;
-},CurvedLine:function(_8c,_8d,_8e,_8f){
-var _90=3;
-var _91=_8d.getArea();
-var _92=document.createElementNS(dojo.svg.xmlns.svg,"g");
-if(_8c.length==0){
-return _92;
-}
-var _93=document.createElementNS(dojo.svg.xmlns.svg,"path");
-_92.appendChild(_93);
-_93.setAttribute("fill","none");
-_93.setAttribute("stroke",_8c[0].series.color);
-_93.setAttribute("stroke-width","2");
-_93.setAttribute("stroke-opacity","0.85");
-if(_8c[0].series.label!=null){
-_93.setAttribute("title",_8c[0].series.label);
-}
-var cmd=[];
-for(var i=0;i<_8c.length;i++){
-var x=_8e.axisX.getCoord(_8c[i].x,_8d,_8e);
-var y=_8e.axisY.getCoord(_8c[i].y,_8d,_8e);
-var dx=_91.left+1;
-var dy=_91.bottom;
-if(i>0){
-dx=x-_8e.axisX.getCoord(_8c[i-1].x,_8d,_8e);
-dy=_8e.axisY.getCoord(_8c[i-1].y,_8d,_8e);
-}
-if(i==0){
-cmd.push("M");
-}else{
-cmd.push("C");
-var cx=x-(_90-1)*(dx/_90);
-cmd.push(cx+","+dy);
-cx=x-(dx/_90);
-cmd.push(cx+","+y);
-}
-cmd.push(x+","+y);
-var c=document.createElementNS(dojo.svg.xmlns.svg,"circle");
-c.setAttribute("cx",x);
-c.setAttribute("cy",y);
-c.setAttribute("r","3");
-c.setAttribute("fill",_8c[i].series.color);
-c.setAttribute("fill-opacity","0.6");
-c.setAttribute("stroke-width","1");
-c.setAttribute("stroke-opacity","0.85");
-_92.appendChild(c);
-if(_8f){
-_8f(c,_8c[i].src);
-}
-}
-_93.setAttribute("d",cmd.join(" "));
-return _92;
-},Area:function(_9c,_9d,_9e,_9f){
-var _a0=_9d.getArea();
-var _a1=document.createElementNS(dojo.svg.xmlns.svg,"g");
-if(_9c.length==0){
-return _a1;
-}
-var _a2=document.createElementNS(dojo.svg.xmlns.svg,"path");
-_a1.appendChild(_a2);
-_a2.setAttribute("fill",_9c[0].series.color);
-_a2.setAttribute("fill-opacity","0.4");
-_a2.setAttribute("stroke",_9c[0].series.color);
-_a2.setAttribute("stroke-width","1");
-_a2.setAttribute("stroke-opacity","0.85");
-if(_9c[0].series.label!=null){
-_a2.setAttribute("title",_9c[0].series.label);
-}
-var cmd=[];
-for(var i=0;i<_9c.length;i++){
-var x=_9e.axisX.getCoord(_9c[i].x,_9d,_9e);
-var y=_9e.axisY.getCoord(_9c[i].y,_9d,_9e);
-if(i==0){
-cmd.push("M");
-}else{
-cmd.push("L");
-}
-cmd.push(x+","+y);
-var c=document.createElementNS(dojo.svg.xmlns.svg,"circle");
-c.setAttribute("cx",x);
-c.setAttribute("cy",y);
-c.setAttribute("r","3");
-c.setAttribute("fill",_9c[i].series.color);
-c.setAttribute("fill-opacity","0.6");
-c.setAttribute("stroke-width","1");
-c.setAttribute("stroke-opacity","0.85");
-_a1.appendChild(c);
-if(_9f){
-_9f(c,_9c[i].src);
-}
-}
-cmd.push("L");
-cmd.push(x+","+_9e.axisY.getCoord(_9e.axisX.origin,_9d,_9e));
-cmd.push("L");
-cmd.push(_9e.axisX.getCoord(_9c[0].x,_9d,_9e)+","+_9e.axisY.getCoord(_9e.axisX.origin,_9d,_9e));
-cmd.push("Z");
-_a2.setAttribute("d",cmd.join(" "));
-return _a1;
-},CurvedArea:function(_a8,_a9,_aa,_ab){
-var _ac=3;
-var _ad=_a9.getArea();
-var _ae=document.createElementNS(dojo.svg.xmlns.svg,"g");
-if(_a8.length==0){
-return _ae;
-}
-var _af=document.createElementNS(dojo.svg.xmlns.svg,"path");
-_ae.appendChild(_af);
-_af.setAttribute("fill",_a8[0].series.color);
-_af.setAttribute("fill-opacity","0.4");
-_af.setAttribute("stroke",_a8[0].series.color);
-_af.setAttribute("stroke-width","1");
-_af.setAttribute("stroke-opacity","0.85");
-if(_a8[0].series.label!=null){
-_af.setAttribute("title",_a8[0].series.label);
-}
-var cmd=[];
-for(var i=0;i<_a8.length;i++){
-var x=_aa.axisX.getCoord(_a8[i].x,_a9,_aa);
-var y=_aa.axisY.getCoord(_a8[i].y,_a9,_aa);
-var dx=_ad.left+1;
-var dy=_ad.bottom;
-if(i>0){
-dx=x-_aa.axisX.getCoord(_a8[i-1].x,_a9,_aa);
-dy=_aa.axisY.getCoord(_a8[i-1].y,_a9,_aa);
-}
-if(i==0){
-cmd.push("M");
-}else{
-cmd.push("C");
-var cx=x-(_ac-1)*(dx/_ac);
-cmd.push(cx+","+dy);
-cx=x-(dx/_ac);
-cmd.push(cx+","+y);
-}
-cmd.push(x+","+y);
-var c=document.createElementNS(dojo.svg.xmlns.svg,"circle");
-c.setAttribute("cx",x);
-c.setAttribute("cy",y);
-c.setAttribute("r","3");
-c.setAttribute("fill",_a8[i].series.color);
-c.setAttribute("fill-opacity","0.6");
-c.setAttribute("stroke-width","1");
-c.setAttribute("stroke-opacity","0.85");
-_ae.appendChild(c);
-if(_ab){
-_ab(c,_a8[i].src);
-}
-}
-cmd.push("L");
-cmd.push(x+","+_aa.axisY.getCoord(_aa.axisX.origin,_a9,_aa));
-cmd.push("L");
-cmd.push(_aa.axisX.getCoord(_a8[0].x,_a9,_aa)+","+_aa.axisY.getCoord(_aa.axisX.origin,_a9,_aa));
-cmd.push("Z");
-_af.setAttribute("d",cmd.join(" "));
-return _ae;
-},HighLow:function(_b8,_b9,_ba,_bb){
-var _bc=_b9.getArea();
-var _bd=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var n=_b8.length;
-var _bf=((_bc.right-_bc.left)/(_ba.axisX.range.upper-_ba.axisX.range.lower))/4;
-var w=_bf*2;
-for(var i=0;i<n;i++){
-var _c2=_b8[i].high;
-var low=_b8[i].low;
-if(low>_c2){
-var t=low;
-low=_c2;
-_c2=t;
-}
-var x=_ba.axisX.getCoord(_b8[i].x,_b9,_ba)-(w/2);
-var y=_ba.axisY.getCoord(_c2,_b9,_ba);
-var h=_ba.axisY.getCoord(low,_b9,_ba)-y;
-var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-bar.setAttribute("fill",_b8[i].series.color);
-bar.setAttribute("stroke-width","0");
-bar.setAttribute("x",x);
-bar.setAttribute("y",y);
-bar.setAttribute("width",w);
-bar.setAttribute("height",h);
-bar.setAttribute("fill-opacity","0.6");
-if(_bb){
-_bb(bar,_b8[i].src);
-}
-_bd.appendChild(bar);
-}
-return _bd;
-},HighLowClose:function(_c9,_ca,_cb,_cc){
-var _cd=_ca.getArea();
-var _ce=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var n=_c9.length;
-var _d0=((_cd.right-_cd.left)/(_cb.axisX.range.upper-_cb.axisX.range.lower))/4;
-var w=_d0*2;
-for(var i=0;i<n;i++){
-var _d3=_c9[i].high;
-var low=_c9[i].low;
-if(low>_d3){
-var t=low;
-low=_d3;
-_d3=t;
-}
-var c=_c9[i].close;
-var x=_cb.axisX.getCoord(_c9[i].x,_ca,_cb)-(w/2);
-var y=_cb.axisY.getCoord(_d3,_ca,_cb);
-var h=_cb.axisY.getCoord(low,_ca,_cb)-y;
-var _da=_cb.axisY.getCoord(c,_ca,_cb);
-var g=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-bar.setAttribute("fill",_c9[i].series.color);
-bar.setAttribute("stroke-width","0");
-bar.setAttribute("x",x);
-bar.setAttribute("y",y);
-bar.setAttribute("width",w);
-bar.setAttribute("height",h);
-bar.setAttribute("fill-opacity","0.6");
-g.appendChild(bar);
-var _dd=document.createElementNS(dojo.svg.xmlns.svg,"line");
-_dd.setAttribute("x1",x);
-_dd.setAttribute("x2",x+w+(_d0*2));
-_dd.setAttribute("y1",_da);
-_dd.setAttribute("y2",_da);
-_dd.setAttribute("style","stroke:"+_c9[i].series.color+";stroke-width:1px;stroke-opacity:0.6;");
-g.appendChild(_dd);
-if(_cc){
-_cc(g,_c9[i].src);
-}
-_ce.appendChild(g);
-}
-return _ce;
-},HighLowOpenClose:function(_de,_df,_e0,_e1){
-var _e2=_df.getArea();
-var _e3=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var n=_de.length;
-var _e5=((_e2.right-_e2.left)/(_e0.axisX.range.upper-_e0.axisX.range.lower))/4;
-var w=_e5*2;
-for(var i=0;i<n;i++){
-var _e8=_de[i].high;
-var low=_de[i].low;
-if(low>_e8){
-var t=low;
-low=_e8;
-_e8=t;
-}
-var o=_de[i].open;
-var c=_de[i].close;
-var x=_e0.axisX.getCoord(_de[i].x,_df,_e0)-(w/2);
-var y=_e0.axisY.getCoord(_e8,_df,_e0);
-var h=_e0.axisY.getCoord(low,_df,_e0)-y;
-var _f0=_e0.axisY.getCoord(o,_df,_e0);
-var _f1=_e0.axisY.getCoord(c,_df,_e0);
-var g=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-bar.setAttribute("fill",_de[i].series.color);
-bar.setAttribute("stroke-width","0");
-bar.setAttribute("x",x);
-bar.setAttribute("y",y);
-bar.setAttribute("width",w);
-bar.setAttribute("height",h);
-bar.setAttribute("fill-opacity","0.6");
-g.appendChild(bar);
-var _f4=document.createElementNS(dojo.svg.xmlns.svg,"line");
-_f4.setAttribute("x1",x-(_e5*2));
-_f4.setAttribute("x2",x+w);
-_f4.setAttribute("y1",_f0);
-_f4.setAttribute("y2",_f0);
-_f4.setAttribute("style","stroke:"+_de[i].series.color+";stroke-width:1px;stroke-opacity:0.6;");
-g.appendChild(_f4);
-var _f4=document.createElementNS(dojo.svg.xmlns.svg,"line");
-_f4.setAttribute("x1",x);
-_f4.setAttribute("x2",x+w+(_e5*2));
-_f4.setAttribute("y1",_f1);
-_f4.setAttribute("y2",_f1);
-_f4.setAttribute("style","stroke:"+_de[i].series.color+";stroke-width:1px;stroke-opacity:0.6;");
-g.appendChild(_f4);
-if(_e1){
-_e1(g,_de[i].src);
-}
-_e3.appendChild(g);
-}
-return _e3;
-},Scatter:function(_f5,_f6,_f7,_f8){
-var r=7;
-var _fa=document.createElementNS(dojo.svg.xmlns.svg,"g");
-for(var i=0;i<_f5.length;i++){
-var x=_f7.axisX.getCoord(_f5[i].x,_f6,_f7);
-var y=_f7.axisY.getCoord(_f5[i].y,_f6,_f7);
-var _fe=document.createElementNS(dojo.svg.xmlns.svg,"path");
-_fe.setAttribute("fill",_f5[i].series.color);
-_fe.setAttribute("stroke-width","0");
-_fe.setAttribute("d","M "+x+","+(y-r)+" "+"Q "+x+","+y+" "+(x+r)+","+y+" "+"Q "+x+","+y+" "+x+","+(y+r)+" "+"Q "+x+","+y+" "+(x-r)+","+y+" "+"Q "+x+","+y+" "+x+","+(y-r)+" "+"Z");
-if(_f8){
-_f8(_fe,_f5[i].src);
-}
-_fa.appendChild(_fe);
-}
-return _fa;
-},Bubble:function(_ff,_100,plot,_102){
-var _103=document.createElementNS(dojo.svg.xmlns.svg,"g");
-var _104=1;
-for(var i=0;i<_ff.length;i++){
-var x=plot.axisX.getCoord(_ff[i].x,_100,plot);
-var y=plot.axisY.getCoord(_ff[i].y,_100,plot);
-if(i==0){
-var raw=_ff[i].size;
-var dy=plot.axisY.getCoord(_ff[i].y+raw,_100,plot)-y;
-_104=dy/raw;
-}
-if(_104<1){
-_104=1;
-}
-var _10a=document.createElementNS(dojo.svg.xmlns.svg,"circle");
-_10a.setAttribute("fill",_ff[i].series.color);
-_10a.setAttribute("fill-opacity","0.8");
-_10a.setAttribute("stroke",_ff[i].series.color);
-_10a.setAttribute("stroke-width","1");
-_10a.setAttribute("cx",x);
-_10a.setAttribute("cy",y);
-_10a.setAttribute("r",(_ff[i].size/2)*_104);
-if(_102){
-_102(_10a,_ff[i].src);
-}
-_103.appendChild(_10a);
-}
-return _103;
-}});
-dojo.charting.Plotters["Default"]=dojo.charting.Plotters.Line;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/vml/Axis.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/vml/Axis.js
deleted file mode 100644
index ddf59f2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/vml/Axis.js
+++ /dev/null
@@ -1,226 +0,0 @@
-dojo.provide("dojo.charting.vml.Axis");
-dojo.require("dojo.lang.common");
-if(dojo.render.vml.capable){
-dojo.extend(dojo.charting.Axis,{renderLines:function(_1,_2,_3){
-if(this.nodes.lines){
-while(this.nodes.lines.childNodes.length>0){
-this.nodes.lines.removeChild(this.nodes.lines.childNodes[0]);
-}
-if(this.nodes.lines.parentNode){
-this.nodes.lines.parentNode.removeChild(this.nodes.lines);
-this.nodes.lines=null;
-}
-}
-var _4=_1.getArea();
-var g=this.nodes.lines=document.createElement("div");
-g.setAttribute("id",this.getId()+"-lines");
-for(var i=0;i<this._labels.length;i++){
-if(this._labels[i].value==this.origin){
-continue;
-}
-var v=this.getCoord(this._labels[i].value,_1,_2);
-var l=document.createElement("v:line");
-var _9=document.createElement("v:stroke");
-_9.dashstyle="dot";
-l.appendChild(_9);
-l.setAttribute("strokecolor","#666");
-l.setAttribute("strokeweight","1px");
-var s=l.style;
-s.position="absolute";
-s.top="0px";
-s.left="0px";
-s.antialias="false";
-if(_3=="x"){
-l.setAttribute("from",v+"px,"+_4.top+"px");
-l.setAttribute("to",v+"px,"+_4.bottom+"px");
-}else{
-if(_3=="y"){
-l.setAttribute("from",_4.left+"px,"+v+"px");
-l.setAttribute("to",_4.right+"px,"+v+"px");
-}
-}
-g.appendChild(l);
-}
-return g;
-},renderTicks:function(_b,_c,_d,_e){
-if(this.nodes.ticks){
-while(this.nodes.ticks.childNodes.length>0){
-this.nodes.ticks.removeChild(this.nodes.ticks.childNodes[0]);
-}
-if(this.nodes.ticks.parentNode){
-this.nodes.ticks.parentNode.removeChild(this.nodes.ticks);
-this.nodes.ticks=null;
-}
-}
-var g=this.nodes.ticks=document.createElement("div");
-g.setAttribute("id",this.getId()+"-ticks");
-for(var i=0;i<this._labels.length;i++){
-var v=this.getCoord(this._labels[i].value,_b,_c);
-var l=document.createElement("v:line");
-l.setAttribute("strokecolor","#000");
-l.setAttribute("strokeweight","1px");
-var s=l.style;
-s.position="absolute";
-s.top="0px";
-s.left="0px";
-s.antialias="false";
-if(_d=="x"){
-l.setAttribute("from",v+"px,"+_e+"px");
-l.setAttribute("to",v+"px,"+(_e+3)+"px");
-}else{
-if(_d=="y"){
-l.setAttribute("from",(_e-2)+"px,"+v+"px");
-l.setAttribute("to",(_e+2)+"px,"+v+"px");
-}
-}
-g.appendChild(l);
-}
-return g;
-},renderLabels:function(_14,_15,_16,_17,_18,_19){
-function createLabel(_1a,x,y,_1d,_1e){
-var _1f=document.createElement("div");
-var s=_1f.style;
-_1f.innerHTML=_1a;
-s.fontSize=_1d+"px";
-s.fontFamily="sans-serif";
-s.position="absolute";
-s.top=y+"px";
-if(_1e=="center"){
-s.left=x+"px";
-s.textAlign="center";
-}else{
-if(_1e=="left"){
-s.left=x+"px";
-s.textAlign="left";
-}else{
-if(_1e=="right"){
-s.right=x+"px";
-s.textAlign="right";
-}
-}
-}
-return _1f;
-}
-if(this.nodes.labels){
-while(this.nodes.labels.childNodes.length>0){
-this.nodes.labels.removeChild(this.nodes.labels.childNodes[0]);
-}
-if(this.nodes.labels.parentNode){
-this.nodes.labels.parentNode.removeChild(this.nodes.labels);
-this.nodes.labels=null;
-}
-}
-var g=this.nodes.labels=document.createElement("div");
-g.setAttribute("id",this.getId()+"-labels");
-for(var i=0;i<this._labels.length;i++){
-var v=this.getCoord(this._labels[i].value,_14,_15);
-if(_16=="x"){
-var _24=createLabel(this._labels[i].label,v,_17,_18,_19);
-document.body.appendChild(_24);
-_24.style.left=v-(_24.offsetWidth/2)+"px";
-g.appendChild(_24);
-}else{
-if(_16=="y"){
-var _24=createLabel(this._labels[i].label,_17,v,_18,_19);
-document.body.appendChild(_24);
-_24.style.top=v-(_24.offsetHeight/2)+"px";
-g.appendChild(_24);
-}
-}
-}
-return g;
-},render:function(_25,_26,_27,_28){
-if(!this._rerender&&this.nodes.main){
-return this.nodes.main;
-}
-this._rerender=false;
-var _29=_25.getArea();
-var _2a=1;
-var _2b="stroke:#000;stroke-width:"+_2a+"px;";
-var _2c=10;
-var _2d=_27.getCoord(this.origin,_25,_26);
-var g=this.nodes.main=document.createElement("div");
-g.setAttribute("id",this.getId());
-var _2f=this.nodes.axis=document.createElement("v:line");
-_2f.setAttribute("strokecolor","#000");
-_2f.setAttribute("strokeweight",_2a+"px");
-var s=_2f.style;
-s.position="absolute";
-s.top="0px";
-s.left="0px";
-s.antialias="false";
-if(_28=="x"){
-_2f.setAttribute("from",_29.left+"px,"+_2d+"px");
-_2f.setAttribute("to",_29.right+"px,"+_2d+"px");
-var y=_2d+Math.floor(_2c/2);
-if(this.showLines){
-g.appendChild(this.renderLines(_25,_26,_28,y));
-}
-if(this.showTicks){
-g.appendChild(this.renderTicks(_25,_26,_28,_2d));
-}
-if(this.showLabels){
-g.appendChild(this.renderLabels(_25,_26,_28,y,_2c,"center"));
-}
-if(this.showLabel&&this.label){
-var x=_25.size.width/2;
-var y=_2d+Math.round(_2c*1.5);
-var _33=document.createElement("div");
-var s=_33.style;
-_33.innerHTML=this.label;
-s.fontSize=(_2c+2)+"px";
-s.fontFamily="sans-serif";
-s.fontWeight="bold";
-s.position="absolute";
-s.top=y+"px";
-s.left=x+"px";
-s.textAlign="center";
-document.body.appendChild(_33);
-_33.style.left=x-(_33.offsetWidth/2)+"px";
-g.appendChild(_33);
-}
-}else{
-_2f.setAttribute("from",_2d+"px,"+_29.top+"px");
-_2f.setAttribute("to",_2d+"px,"+_29.bottom+"px");
-var _34=this.origin==_27.range.upper;
-var x=_2d+4;
-var _35="left";
-if(!_34){
-x=_29.right-_2d+_2c+4;
-_35="right";
-if(_2d==_29.left){
-x+=(_2c*2)-(_2c/2);
-}
-}
-if(this.showLines){
-g.appendChild(this.renderLines(_25,_26,_28,x));
-}
-if(this.showTicks){
-g.appendChild(this.renderTicks(_25,_26,_28,_2d));
-}
-if(this.showLabels){
-g.appendChild(this.renderLabels(_25,_26,_28,x,_2c,_35));
-}
-if(this.showLabel&&this.label){
-x+=(_2c*2)-2;
-var y=_25.size.height/2;
-var _33=document.createElement("div");
-var s=_33.style;
-_33.innerHTML=this.label;
-s.fontSize=(_2c+2)+"px";
-s.fontFamily="sans-serif";
-s.fontWeight="bold";
-s.position="absolute";
-s.height=_25.size.height+"px";
-s.writingMode="tb-rl";
-s.textAlign="center";
-s[_35]=x+"px";
-document.body.appendChild(_33);
-s.top=y-(_33.offsetHeight/2)+"px";
-g.appendChild(_33);
-}
-}
-g.appendChild(_2f);
-return g;
-}});
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/vml/PlotArea.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/vml/PlotArea.js
deleted file mode 100644
index ed21826..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/vml/PlotArea.js
+++ /dev/null
@@ -1,56 +0,0 @@
-dojo.provide("dojo.charting.vml.PlotArea");
-dojo.require("dojo.lang.common");
-if(dojo.render.vml.capable){
-dojo.extend(dojo.charting.PlotArea,{resize:function(){
-var a=this.getArea();
-this.nodes.area.style.width=this.size.width+"px";
-this.nodes.area.style.height=this.size.height+"px";
-this.nodes.background.style.width=this.size.width+"px";
-this.nodes.background.style.height=this.size.height+"px";
-this.nodes.plots.width=this.size.width+"px";
-this.nodes.plots.height=this.size.height+"px";
-this.nodes.plots.style.clip="rect("+a.top+" "+a.right+" "+a.bottom+" "+a.left+")";
-if(this.nodes.axes){
-this.nodes.area.removeChild(this.nodes.axes);
-}
-var _2=this.nodes.axes=document.createElement("div");
-_2.id=this.getId()+"-axes";
-this.nodes.area.appendChild(_2);
-var ax=this.getAxes();
-for(var p in ax){
-var _5=ax[p];
-_2.appendChild(_5.axis.initialize(this,_5.plot,_5.drawAgainst,_5.plane));
-}
-},initializePlot:function(_6){
-_6.destroy();
-_6.dataNode=document.createElement("div");
-_6.dataNode.id=_6.getId();
-return _6.dataNode;
-},initialize:function(){
-this.destroy();
-var _7=this.nodes.main=document.createElement("div");
-var _8=this.nodes.area=document.createElement("div");
-_8.id=this.getId();
-_8.style.position="absolute";
-_7.appendChild(_8);
-var bg=this.nodes.background=document.createElement("div");
-bg.id=this.getId()+"-background";
-bg.style.position="absolute";
-bg.style.top="0px";
-bg.style.left="0px";
-bg.style.backgroundColor="#fff";
-_8.appendChild(bg);
-var a=this.getArea();
-var _b=this.nodes.plots=document.createElement("div");
-_b.id=this.getId()+"-plots";
-_b.style.position="absolute";
-_b.style.top="0px";
-_b.style.left="0px";
-_8.appendChild(_b);
-for(var i=0;i<this.plots.length;i++){
-_b.appendChild(this.initializePlot(this.plots[i]));
-}
-this.resize();
-return _7;
-}});
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/vml/Plotters.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/vml/Plotters.js
deleted file mode 100644
index 491e706..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/charting/vml/Plotters.js
+++ /dev/null
@@ -1,876 +0,0 @@
-dojo.provide("dojo.charting.vml.Plotters");
-dojo.require("dojo.lang.common");
-if(dojo.render.vml.capable){
-dojo.mixin(dojo.charting.Plotters,{_group:function(_1){
-var _2=document.createElement("div");
-_2.style.position="absolute";
-_2.style.top="0px";
-_2.style.left="0px";
-_2.style.width=_1.size.width+"px";
-_2.style.height=_1.size.height+"px";
-return _2;
-},Bar:function(_3,_4,_5,_6){
-var _7=_3.getArea();
-var _8=dojo.charting.Plotters._group(_3);
-var n=_4.series.length;
-var _a=[];
-for(var i=0;i<n;i++){
-var _c=_4.series[i].data.evaluate(_5);
-_a.push(_c);
-}
-var _d=8;
-var _e=_a[0].length;
-if(_e==0){
-return _8;
-}
-var _f=((_7.right-_7.left)-(_d*(_e-1)))/_e;
-var _10=Math.round(_f/n);
-var _11=_4.axisY.getCoord(_4.axisX.origin,_3,_4);
-for(var i=0;i<_e;i++){
-var _12=_7.left+(_f*i)+(_d*i);
-for(var j=0;j<n;j++){
-var _14=_a[j][i].y;
-var yA=_11;
-var x=_12+(_10*j);
-var y=_4.axisY.getCoord(_14,_3,_4);
-var h=Math.abs(yA-y);
-if(_14<_4.axisX.origin){
-yA=y;
-y=_11;
-}
-var bar=document.createElement("v:rect");
-bar.style.position="absolute";
-bar.style.top=y+1+"px";
-bar.style.left=x+"px";
-bar.style.width=_10+"px";
-bar.style.height=h+"px";
-bar.setAttribute("fillColor",_a[j][i].series.color);
-bar.setAttribute("stroked","false");
-bar.style.antialias="false";
-var _1a=document.createElement("v:fill");
-_1a.setAttribute("opacity","0.6");
-bar.appendChild(_1a);
-if(_6){
-_6(bar,_a[j][i].src);
-}
-_8.appendChild(bar);
-}
-}
-return _8;
-},HorizontalBar:function(_1b,_1c,_1d,_1e){
-var _1f=_1b.getArea();
-var _20=dojo.charting.Plotters._group(_1b);
-var n=_1c.series.length;
-var _22=[];
-for(var i=0;i<n;i++){
-var tmp=_1c.series[i].data.evaluate(_1d);
-_22.push(tmp);
-}
-var _25=6;
-var _26=_22[0].length;
-if(_26==0){
-return _20;
-}
-var h=((_1f.bottom-_1f.top)-(_25*(_26-1)))/_26;
-var _28=h/n;
-var _29=_1c.axisX.getCoord(0,_1b,_1c);
-for(var i=0;i<_26;i++){
-var _2a=_1f.top+(h*i)+(_25*i);
-for(var j=0;j<n;j++){
-var _2c=_22[j][i].y;
-var y=_2a+(_28*j);
-var xA=_29;
-var x=_1c.axisX.getCoord(_2c,_1b,_1c);
-var w=Math.abs(x-xA);
-if(_2c>0){
-x=_29;
-}
-var bar=document.createElement("v:rect");
-bar.style.position="absolute";
-bar.style.top=y+1+"px";
-bar.style.left=xA+"px";
-bar.style.width=w+"px";
-bar.style.height=_28+"px";
-bar.setAttribute("fillColor",_22[j][i].series.color);
-bar.setAttribute("stroked","false");
-bar.style.antialias="false";
-var _32=document.createElement("v:fill");
-_32.setAttribute("opacity","0.6");
-bar.appendChild(_32);
-if(_1e){
-_1e(bar,_22[j][i].src);
-}
-_20.appendChild(bar);
-}
-}
-var _25=4;
-var n=_1c.series.length;
-var h=((_1f.bottom-_1f.top)-(_25*(n-1)))/n;
-var _29=_1c.axisX.getCoord(0,_1b,_1c);
-for(var i=0;i<n;i++){
-var _33=_1c.series[i];
-var _22=_33.data.evaluate(_1d);
-var y=_1f.top+(h*i)+(_25*i);
-var _2c=_22[_22.length-1].y;
-var xA=_29;
-var x=_1c.axisX.getCoord(_2c,_1b,_1c);
-var w=Math.abs(xA-x);
-if(_2c>0){
-xA=x;
-x=_29;
-}
-}
-return _20;
-},Gantt:function(_34,_35,_36,_37){
-var _38=_34.getArea();
-var _39=dojo.charting.Plotters._group(_34);
-var n=_35.series.length;
-var _3b=[];
-for(var i=0;i<n;i++){
-var tmp=_35.series[i].data.evaluate(_36);
-_3b.push(tmp);
-}
-var _3e=2;
-var _3f=_3b[0].length;
-if(_3f==0){
-return _39;
-}
-var h=((_38.bottom-_38.top)-(_3e*(_3f-1)))/_3f;
-var _41=h/n;
-for(var i=0;i<_3f;i++){
-var _42=_38.top+(h*i)+(_3e*i);
-for(var j=0;j<n;j++){
-var _44=_3b[j][i].high;
-var low=_3b[j][i].low;
-if(low>_44){
-var t=_44;
-_44=low;
-low=t;
-}
-var x=_35.axisX.getCoord(low,_34,_35);
-var w=_35.axisX.getCoord(_44,_34,_35)-x;
-var y=_42+(_41*j);
-var bar=document.createElement("v:rect");
-bar.style.position="absolute";
-bar.style.top=y+1+"px";
-bar.style.left=x+"px";
-bar.style.width=w+"px";
-bar.style.height=_41+"px";
-bar.setAttribute("fillColor",_3b[j][i].series.color);
-bar.setAttribute("stroked","false");
-bar.style.antialias="false";
-var _4b=document.createElement("v:fill");
-_4b.setAttribute("opacity","0.6");
-bar.appendChild(_4b);
-if(_37){
-_37(bar,_3b[j][i].src);
-}
-_39.appendChild(bar);
-}
-}
-return _39;
-},StackedArea:function(_4c,_4d,_4e,_4f){
-var _50=_4c.getArea();
-var _51=dojo.charting.Plotters._group(_4c);
-var n=_4d.series.length;
-var _53=[];
-var _54=[];
-for(var i=0;i<n;i++){
-var tmp=_4d.series[i].data.evaluate(_4e);
-for(var j=0;j<tmp.length;j++){
-if(i==0){
-_54.push(tmp[j].y);
-}else{
-_54[j]+=tmp[j].y;
-}
-tmp[j].y=_54[j];
-}
-_53.push(tmp);
-}
-for(var i=n-1;i>=0;i--){
-var _58=document.createElement("v:shape");
-_58.setAttribute("strokeweight","1px");
-_58.setAttribute("strokecolor",_53[i][0].series.color);
-_58.setAttribute("fillcolor",_53[i][0].series.color);
-_58.setAttribute("coordsize",(_50.right-_50.left)+","+(_50.bottom-_50.top));
-_58.style.position="absolute";
-_58.style.top="0px";
-_58.style.left="0px";
-_58.style.width=_50.right-_50.left+"px";
-_58.style.height=_50.bottom-_50.top+"px";
-var _59=document.createElement("v:stroke");
-_59.setAttribute("opacity","0.8");
-_58.appendChild(_59);
-var _5a=document.createElement("v:fill");
-_5a.setAttribute("opacity","0.4");
-_58.appendChild(_5a);
-var cmd=[];
-var r=3;
-for(var j=0;j<_53[i].length;j++){
-var _5d=_53[i];
-var x=Math.round(_4d.axisX.getCoord(_5d[j].x,_4c,_4d));
-var y=Math.round(_4d.axisY.getCoord(_5d[j].y,_4c,_4d));
-if(j==0){
-cmd.push("m");
-cmd.push(x+","+y);
-}else{
-cmd.push("l");
-cmd.push(x+","+y);
-}
-var c=document.createElement("v:oval");
-c.setAttribute("strokeweight","1px");
-c.setAttribute("strokecolor",_5d[j].series.color);
-c.setAttribute("fillcolor",_5d[j].series.color);
-var str=document.createElement("v:stroke");
-str.setAttribute("opacity","0.8");
-c.appendChild(str);
-str=document.createElement("v:fill");
-str.setAttribute("opacity","0.6");
-c.appendChild(str);
-var s=c.style;
-s.position="absolute";
-s.top=(y-r)+"px";
-s.left=(x-r)+"px";
-s.width=(r*2)+"px";
-s.height=(r*2)+"px";
-_51.appendChild(c);
-if(_4f){
-_4f(c,_53[j].src);
-}
-}
-if(i==0){
-cmd.push("l");
-cmd.push(x+","+Math.round(_4d.axisY.getCoord(_4d.axisX.origin,_4c,_4d)));
-cmd.push("l");
-cmd.push(Math.round(_4d.axisX.getCoord(_53[0][0].x,_4c,_4d))+","+Math.round(_4d.axisY.getCoord(_4d.axisX.origin,_4c,_4d)));
-}else{
-var _5d=_53[i-1];
-cmd.push("l");
-cmd.push(x+","+Math.round(_4d.axisY.getCoord(_5d[_5d.length-1].y,_4c,_4d)));
-for(var j=_5d.length-2;j>=0;j--){
-var x=Math.round(_4d.axisX.getCoord(_5d[j].x,_4c,_4d));
-var y=Math.round(_4d.axisY.getCoord(_5d[j].y,_4c,_4d));
-cmd.push("l");
-cmd.push(x+","+y);
-}
-}
-_58.setAttribute("path",cmd.join(" ")+" x e");
-_51.appendChild(_58);
-}
-return _51;
-},StackedCurvedArea:function(_63,_64,_65,_66){
-var _67=3;
-var _68=_63.getArea();
-var _69=dojo.charting.Plotters._group(_63);
-var n=_64.series.length;
-var _6b=[];
-var _6c=[];
-for(var i=0;i<n;i++){
-var tmp=_64.series[i].data.evaluate(_65);
-for(var j=0;j<tmp.length;j++){
-if(i==0){
-_6c.push(tmp[j].y);
-}else{
-_6c[j]+=tmp[j].y;
-}
-tmp[j].y=_6c[j];
-}
-_6b.push(tmp);
-}
-for(var i=n-1;i>=0;i--){
-var _70=document.createElement("v:shape");
-_70.setAttribute("strokeweight","1px");
-_70.setAttribute("strokecolor",_6b[i][0].series.color);
-_70.setAttribute("fillcolor",_6b[i][0].series.color);
-_70.setAttribute("coordsize",(_68.right-_68.left)+","+(_68.bottom-_68.top));
-_70.style.position="absolute";
-_70.style.top="0px";
-_70.style.left="0px";
-_70.style.width=_68.right-_68.left+"px";
-_70.style.height=_68.bottom-_68.top+"px";
-var _71=document.createElement("v:stroke");
-_71.setAttribute("opacity","0.8");
-_70.appendChild(_71);
-var _72=document.createElement("v:fill");
-_72.setAttribute("opacity","0.4");
-_70.appendChild(_72);
-var cmd=[];
-var r=3;
-for(var j=0;j<_6b[i].length;j++){
-var _75=_6b[i];
-var x=Math.round(_64.axisX.getCoord(_75[j].x,_63,_64));
-var y=Math.round(_64.axisY.getCoord(_75[j].y,_63,_64));
-if(j==0){
-cmd.push("m");
-cmd.push(x+","+y);
-}else{
-var _78=Math.round(_64.axisX.getCoord(_75[j-1].x,_63,_64));
-var _79=Math.round(_64.axisY.getCoord(_75[j-1].y,_63,_64));
-var dx=x-_78;
-var dy=y-_79;
-cmd.push("c");
-var cx=Math.round((x-(_67-1)*(dx/_67)));
-cmd.push(cx+","+_79);
-cx=Math.round((x-(dx/_67)));
-cmd.push(cx+","+y);
-cmd.push(x+","+y);
-}
-var c=document.createElement("v:oval");
-c.setAttribute("strokeweight","1px");
-c.setAttribute("strokecolor",_75[j].series.color);
-c.setAttribute("fillcolor",_75[j].series.color);
-var str=document.createElement("v:stroke");
-str.setAttribute("opacity","0.8");
-c.appendChild(str);
-str=document.createElement("v:fill");
-str.setAttribute("opacity","0.6");
-c.appendChild(str);
-var s=c.style;
-s.position="absolute";
-s.top=(y-r)+"px";
-s.left=(x-r)+"px";
-s.width=(r*2)+"px";
-s.height=(r*2)+"px";
-_69.appendChild(c);
-if(_66){
-_66(c,_6b[j].src);
-}
-}
-if(i==0){
-cmd.push("l");
-cmd.push(x+","+Math.round(_64.axisY.getCoord(_64.axisX.origin,_63,_64)));
-cmd.push("l");
-cmd.push(Math.round(_64.axisX.getCoord(_6b[0][0].x,_63,_64))+","+Math.round(_64.axisY.getCoord(_64.axisX.origin,_63,_64)));
-}else{
-var _75=_6b[i-1];
-cmd.push("l");
-cmd.push(x+","+Math.round(_64.axisY.getCoord(_75[_75.length-1].y,_63,_64)));
-for(var j=_75.length-2;j>=0;j--){
-var x=Math.round(_64.axisX.getCoord(_75[j].x,_63,_64));
-var y=Math.round(_64.axisY.getCoord(_75[j].y,_63,_64));
-var _78=Math.round(_64.axisX.getCoord(_75[j+1].x,_63,_64));
-var _79=Math.round(_64.axisY.getCoord(_75[j+1].y,_63,_64));
-var dx=x-_78;
-var dy=y-_79;
-cmd.push("c");
-var cx=Math.round((x-(_67-1)*(dx/_67)));
-cmd.push(cx+","+_79);
-cx=Math.round((x-(dx/_67)));
-cmd.push(cx+","+y);
-cmd.push(x+","+y);
-}
-}
-_70.setAttribute("path",cmd.join(" ")+" x e");
-_69.appendChild(_70);
-}
-return _69;
-},DataBar:function(_80,_81,_82,_83){
-var _84=_81.getArea();
-var _85=dojo.charting.Plotters._group(_81);
-var n=_80.length;
-var w=(_84.right-_84.left)/(_82.axisX.range.upper-_82.axisX.range.lower);
-var _88=_82.axisY.getCoord(_82.axisX.origin,_81,_82);
-for(var i=0;i<n;i++){
-var _8a=_80[i].y;
-var yA=_88;
-var x=_82.axisX.getCoord(_80[i].x,_81,_82)-(w/2)+1;
-var y=_82.axisY.getCoord(_8a,_81,_82);
-var h=Math.abs(yA-y);
-if(_8a<_82.axisX.origin){
-yA=y;
-y=_88;
-}
-var bar=document.createElement("v:rect");
-bar.style.position="absolute";
-bar.style.top=y+1+"px";
-bar.style.left=x+"px";
-bar.style.width=w+"px";
-bar.style.height=h+"px";
-bar.setAttribute("fillColor",_80[i].series.color);
-bar.setAttribute("stroked","false");
-bar.style.antialias="false";
-var _90=document.createElement("v:fill");
-_90.setAttribute("opacity","0.6");
-bar.appendChild(_90);
-if(_83){
-_83(bar,_80[i].src);
-}
-_85.appendChild(bar);
-}
-return _85;
-},Line:function(_91,_92,_93,_94){
-var _95=_92.getArea();
-var _96=dojo.charting.Plotters._group(_92);
-if(_91.length==0){
-return _96;
-}
-var _97=document.createElement("v:shape");
-_97.setAttribute("strokeweight","2px");
-_97.setAttribute("strokecolor",_91[0].series.color);
-_97.setAttribute("fillcolor","none");
-_97.setAttribute("filled","false");
-_97.setAttribute("coordsize",(_95.right-_95.left)+","+(_95.bottom-_95.top));
-_97.style.position="absolute";
-_97.style.top="0px";
-_97.style.left="0px";
-_97.style.width=_95.right-_95.left+"px";
-_97.style.height=_95.bottom-_95.top+"px";
-var _98=document.createElement("v:stroke");
-_98.setAttribute("opacity","0.8");
-_97.appendChild(_98);
-var cmd=[];
-var r=3;
-for(var i=0;i<_91.length;i++){
-var x=Math.round(_93.axisX.getCoord(_91[i].x,_92,_93));
-var y=Math.round(_93.axisY.getCoord(_91[i].y,_92,_93));
-if(i==0){
-cmd.push("m");
-cmd.push(x+","+y);
-}else{
-cmd.push("l");
-cmd.push(x+","+y);
-}
-var c=document.createElement("v:oval");
-c.setAttribute("strokeweight","1px");
-c.setAttribute("strokecolor",_91[i].series.color);
-c.setAttribute("fillcolor",_91[i].series.color);
-var str=document.createElement("v:stroke");
-str.setAttribute("opacity","0.8");
-c.appendChild(str);
-str=document.createElement("v:fill");
-str.setAttribute("opacity","0.6");
-c.appendChild(str);
-var s=c.style;
-s.position="absolute";
-s.top=(y-r)+"px";
-s.left=(x-r)+"px";
-s.width=(r*2)+"px";
-s.height=(r*2)+"px";
-_96.appendChild(c);
-if(_94){
-_94(c,_91[i].src);
-}
-}
-_97.setAttribute("path",cmd.join(" ")+" e");
-_96.appendChild(_97);
-return _96;
-},CurvedLine:function(_a1,_a2,_a3,_a4){
-var _a5=3;
-var _a6=_a2.getArea();
-var _a7=dojo.charting.Plotters._group(_a2);
-if(_a1.length==0){
-return _a7;
-}
-var _a8=document.createElement("v:shape");
-_a8.setAttribute("strokeweight","2px");
-_a8.setAttribute("strokecolor",_a1[0].series.color);
-_a8.setAttribute("fillcolor","none");
-_a8.setAttribute("filled","false");
-_a8.setAttribute("coordsize",(_a6.right-_a6.left)+","+(_a6.bottom-_a6.top));
-_a8.style.position="absolute";
-_a8.style.top="0px";
-_a8.style.left="0px";
-_a8.style.width=_a6.right-_a6.left+"px";
-_a8.style.height=_a6.bottom-_a6.top+"px";
-var _a9=document.createElement("v:stroke");
-_a9.setAttribute("opacity","0.8");
-_a8.appendChild(_a9);
-var cmd=[];
-var r=3;
-for(var i=0;i<_a1.length;i++){
-var x=Math.round(_a3.axisX.getCoord(_a1[i].x,_a2,_a3));
-var y=Math.round(_a3.axisY.getCoord(_a1[i].y,_a2,_a3));
-if(i==0){
-cmd.push("m");
-cmd.push(x+","+y);
-}else{
-var _af=Math.round(_a3.axisX.getCoord(_a1[i-1].x,_a2,_a3));
-var _b0=Math.round(_a3.axisY.getCoord(_a1[i-1].y,_a2,_a3));
-var dx=x-_af;
-var dy=y-_b0;
-cmd.push("c");
-var cx=Math.round((x-(_a5-1)*(dx/_a5)));
-cmd.push(cx+","+_b0);
-cx=Math.round((x-(dx/_a5)));
-cmd.push(cx+","+y);
-cmd.push(x+","+y);
-}
-var c=document.createElement("v:oval");
-c.setAttribute("strokeweight","1px");
-c.setAttribute("strokecolor",_a1[i].series.color);
-c.setAttribute("fillcolor",_a1[i].series.color);
-var str=document.createElement("v:stroke");
-str.setAttribute("opacity","0.8");
-c.appendChild(str);
-str=document.createElement("v:fill");
-str.setAttribute("opacity","0.6");
-c.appendChild(str);
-var s=c.style;
-s.position="absolute";
-s.top=(y-r)+"px";
-s.left=(x-r)+"px";
-s.width=(r*2)+"px";
-s.height=(r*2)+"px";
-_a7.appendChild(c);
-if(_a4){
-_a4(c,_a1[i].src);
-}
-}
-_a8.setAttribute("path",cmd.join(" ")+" e");
-_a7.appendChild(_a8);
-return _a7;
-},Area:function(_b7,_b8,_b9,_ba){
-var _bb=_b8.getArea();
-var _bc=dojo.charting.Plotters._group(_b8);
-if(_b7.length==0){
-return _bc;
-}
-var _bd=document.createElement("v:shape");
-_bd.setAttribute("strokeweight","1px");
-_bd.setAttribute("strokecolor",_b7[0].series.color);
-_bd.setAttribute("fillcolor",_b7[0].series.color);
-_bd.setAttribute("coordsize",(_bb.right-_bb.left)+","+(_bb.bottom-_bb.top));
-_bd.style.position="absolute";
-_bd.style.top="0px";
-_bd.style.left="0px";
-_bd.style.width=_bb.right-_bb.left+"px";
-_bd.style.height=_bb.bottom-_bb.top+"px";
-var _be=document.createElement("v:stroke");
-_be.setAttribute("opacity","0.8");
-_bd.appendChild(_be);
-var _bf=document.createElement("v:fill");
-_bf.setAttribute("opacity","0.4");
-_bd.appendChild(_bf);
-var cmd=[];
-var r=3;
-for(var i=0;i<_b7.length;i++){
-var x=Math.round(_b9.axisX.getCoord(_b7[i].x,_b8,_b9));
-var y=Math.round(_b9.axisY.getCoord(_b7[i].y,_b8,_b9));
-if(i==0){
-cmd.push("m");
-cmd.push(x+","+y);
-}else{
-cmd.push("l");
-cmd.push(x+","+y);
-}
-var c=document.createElement("v:oval");
-c.setAttribute("strokeweight","1px");
-c.setAttribute("strokecolor",_b7[i].series.color);
-c.setAttribute("fillcolor",_b7[i].series.color);
-var str=document.createElement("v:stroke");
-str.setAttribute("opacity","0.8");
-c.appendChild(str);
-str=document.createElement("v:fill");
-str.setAttribute("opacity","0.6");
-c.appendChild(str);
-var s=c.style;
-s.position="absolute";
-s.top=(y-r)+"px";
-s.left=(x-r)+"px";
-s.width=(r*2)+"px";
-s.height=(r*2)+"px";
-_bc.appendChild(c);
-if(_ba){
-_ba(c,_b7[i].src);
-}
-}
-cmd.push("l");
-cmd.push(x+","+Math.round(_b9.axisY.getCoord(_b9.axisX.origin,_b8,_b9)));
-cmd.push("l");
-cmd.push(Math.round(_b9.axisX.getCoord(_b7[0].x,_b8,_b9))+","+Math.round(_b9.axisY.getCoord(_b9.axisX.origin,_b8,_b9)));
-_bd.setAttribute("path",cmd.join(" ")+" x e");
-_bc.appendChild(_bd);
-return _bc;
-},CurvedArea:function(_c8,_c9,_ca,_cb){
-var _cc=3;
-var _cd=_c9.getArea();
-var _ce=dojo.charting.Plotters._group(_c9);
-if(_c8.length==0){
-return _ce;
-}
-var _cf=document.createElement("v:shape");
-_cf.setAttribute("strokeweight","1px");
-_cf.setAttribute("strokecolor",_c8[0].series.color);
-_cf.setAttribute("fillcolor",_c8[0].series.color);
-_cf.setAttribute("coordsize",(_cd.right-_cd.left)+","+(_cd.bottom-_cd.top));
-_cf.style.position="absolute";
-_cf.style.top="0px";
-_cf.style.left="0px";
-_cf.style.width=_cd.right-_cd.left+"px";
-_cf.style.height=_cd.bottom-_cd.top+"px";
-var _d0=document.createElement("v:stroke");
-_d0.setAttribute("opacity","0.8");
-_cf.appendChild(_d0);
-var _d1=document.createElement("v:fill");
-_d1.setAttribute("opacity","0.4");
-_cf.appendChild(_d1);
-var cmd=[];
-var r=3;
-for(var i=0;i<_c8.length;i++){
-var x=Math.round(_ca.axisX.getCoord(_c8[i].x,_c9,_ca));
-var y=Math.round(_ca.axisY.getCoord(_c8[i].y,_c9,_ca));
-if(i==0){
-cmd.push("m");
-cmd.push(x+","+y);
-}else{
-var _d7=Math.round(_ca.axisX.getCoord(_c8[i-1].x,_c9,_ca));
-var _d8=Math.round(_ca.axisY.getCoord(_c8[i-1].y,_c9,_ca));
-var dx=x-_d7;
-var dy=y-_d8;
-cmd.push("c");
-var cx=Math.round((x-(_cc-1)*(dx/_cc)));
-cmd.push(cx+","+_d8);
-cx=Math.round((x-(dx/_cc)));
-cmd.push(cx+","+y);
-cmd.push(x+","+y);
-}
-var c=document.createElement("v:oval");
-c.setAttribute("strokeweight","1px");
-c.setAttribute("strokecolor",_c8[i].series.color);
-c.setAttribute("fillcolor",_c8[i].series.color);
-var str=document.createElement("v:stroke");
-str.setAttribute("opacity","0.8");
-c.appendChild(str);
-str=document.createElement("v:fill");
-str.setAttribute("opacity","0.6");
-c.appendChild(str);
-var s=c.style;
-s.position="absolute";
-s.top=(y-r)+"px";
-s.left=(x-r)+"px";
-s.width=(r*2)+"px";
-s.height=(r*2)+"px";
-_ce.appendChild(c);
-if(_cb){
-_cb(c,_c8[i].src);
-}
-}
-cmd.push("l");
-cmd.push(x+","+Math.round(_ca.axisY.getCoord(_ca.axisX.origin,_c9,_ca)));
-cmd.push("l");
-cmd.push(Math.round(_ca.axisX.getCoord(_c8[0].x,_c9,_ca))+","+Math.round(_ca.axisY.getCoord(_ca.axisX.origin,_c9,_ca)));
-_cf.setAttribute("path",cmd.join(" ")+" x e");
-_ce.appendChild(_cf);
-return _ce;
-},HighLow:function(_df,_e0,_e1,_e2){
-var _e3=_e0.getArea();
-var _e4=dojo.charting.Plotters._group(_e0);
-var n=_df.length;
-var _e6=((_e3.right-_e3.left)/(_e1.axisX.range.upper-_e1.axisX.range.lower))/4;
-var w=_e6*2;
-for(var i=0;i<n;i++){
-var _e9=_df[i].high;
-var low=_df[i].low;
-if(low>_e9){
-var t=low;
-low=_e9;
-_e9=t;
-}
-var x=_e1.axisX.getCoord(_df[i].x,_e0,_e1)-(w/2);
-var y=_e1.axisY.getCoord(_e9,_e0,_e1);
-var h=_e1.axisY.getCoord(low,_e0,_e1)-y;
-var bar=document.createElement("v:rect");
-bar.style.position="absolute";
-bar.style.top=y+1+"px";
-bar.style.left=x+"px";
-bar.style.width=w+"px";
-bar.style.height=h+"px";
-bar.setAttribute("fillColor",_df[i].series.color);
-bar.setAttribute("stroked","false");
-bar.style.antialias="false";
-var _f0=document.createElement("v:fill");
-_f0.setAttribute("opacity","0.6");
-bar.appendChild(_f0);
-if(_e2){
-_e2(bar,_df[i].src);
-}
-_e4.appendChild(bar);
-}
-return _e4;
-},HighLowClose:function(_f1,_f2,_f3,_f4){
-var _f5=_f2.getArea();
-var _f6=dojo.charting.Plotters._group(_f2);
-var n=_f1.length;
-var _f8=((_f5.right-_f5.left)/(_f3.axisX.range.upper-_f3.axisX.range.lower))/4;
-var w=_f8*2;
-for(var i=0;i<n;i++){
-var _fb=_f1[i].high;
-var low=_f1[i].low;
-if(low>_fb){
-var t=low;
-low=_fb;
-_fb=t;
-}
-var c=_f1[i].close;
-var x=_f3.axisX.getCoord(_f1[i].x,_f2,_f3)-(w/2);
-var y=_f3.axisY.getCoord(_fb,_f2,_f3);
-var h=_f3.axisY.getCoord(low,_f2,_f3)-y;
-var _102=_f3.axisY.getCoord(c,_f2,_f3);
-var g=document.createElement("div");
-var bar=document.createElement("v:rect");
-bar.style.position="absolute";
-bar.style.top=y+1+"px";
-bar.style.left=x+"px";
-bar.style.width=w+"px";
-bar.style.height=h+"px";
-bar.setAttribute("fillColor",_f1[i].series.color);
-bar.setAttribute("stroked","false");
-bar.style.antialias="false";
-var fill=document.createElement("v:fill");
-fill.setAttribute("opacity","0.6");
-bar.appendChild(fill);
-g.appendChild(bar);
-var line=document.createElement("v:line");
-line.setAttribute("strokecolor",_f1[i].series.color);
-line.setAttribute("strokeweight","1px");
-line.setAttribute("from",x+"px,"+_102+"px");
-line.setAttribute("to",(x+w+(_f8*2)-2)+"px,"+_102+"px");
-var s=line.style;
-s.position="absolute";
-s.top="0px";
-s.left="0px";
-s.antialias="false";
-var str=document.createElement("v:stroke");
-str.setAttribute("opacity","0.6");
-line.appendChild(str);
-g.appendChild(line);
-if(_f4){
-_f4(g,_f1[i].src);
-}
-_f6.appendChild(g);
-}
-return _f6;
-},HighLowOpenClose:function(data,_10a,plot,_10c){
-var area=_10a.getArea();
-var _10e=dojo.charting.Plotters._group(_10a);
-var n=data.length;
-var part=((area.right-area.left)/(plot.axisX.range.upper-plot.axisX.range.lower))/4;
-var w=part*2;
-for(var i=0;i<n;i++){
-var high=data[i].high;
-var low=data[i].low;
-if(low>high){
-var t=low;
-low=high;
-high=t;
-}
-var o=data[i].open;
-var c=data[i].close;
-var x=plot.axisX.getCoord(data[i].x,_10a,plot)-(w/2);
-var y=plot.axisY.getCoord(high,_10a,plot);
-var h=plot.axisY.getCoord(low,_10a,plot)-y;
-var open=plot.axisY.getCoord(o,_10a,plot);
-var _11c=plot.axisY.getCoord(c,_10a,plot);
-var g=document.createElement("div");
-var bar=document.createElement("v:rect");
-bar.style.position="absolute";
-bar.style.top=y+1+"px";
-bar.style.left=x+"px";
-bar.style.width=w+"px";
-bar.style.height=h+"px";
-bar.setAttribute("fillColor",data[i].series.color);
-bar.setAttribute("stroked","false");
-bar.style.antialias="false";
-var fill=document.createElement("v:fill");
-fill.setAttribute("opacity","0.6");
-bar.appendChild(fill);
-g.appendChild(bar);
-var line=document.createElement("v:line");
-line.setAttribute("strokecolor",data[i].series.color);
-line.setAttribute("strokeweight","1px");
-line.setAttribute("from",(x-(part*2))+"px,"+open+"px");
-line.setAttribute("to",(x+w-2)+"px,"+open+"px");
-var s=line.style;
-s.position="absolute";
-s.top="0px";
-s.left="0px";
-s.antialias="false";
-var str=document.createElement("v:stroke");
-str.setAttribute("opacity","0.6");
-line.appendChild(str);
-g.appendChild(line);
-var line=document.createElement("v:line");
-line.setAttribute("strokecolor",data[i].series.color);
-line.setAttribute("strokeweight","1px");
-line.setAttribute("from",x+"px,"+_11c+"px");
-line.setAttribute("to",(x+w+(part*2)-2)+"px,"+_11c+"px");
-var s=line.style;
-s.position="absolute";
-s.top="0px";
-s.left="0px";
-s.antialias="false";
-var str=document.createElement("v:stroke");
-str.setAttribute("opacity","0.6");
-line.appendChild(str);
-g.appendChild(line);
-if(_10c){
-_10c(g,data[i].src);
-}
-_10e.appendChild(g);
-}
-return _10e;
-},Scatter:function(data,_124,plot,_126){
-var r=6;
-var mod=r/2;
-var area=_124.getArea();
-var _12a=dojo.charting.Plotters._group(_124);
-for(var i=0;i<data.length;i++){
-var x=Math.round(plot.axisX.getCoord(data[i].x,_124,plot));
-var y=Math.round(plot.axisY.getCoord(data[i].y,_124,plot));
-var _12e=document.createElement("v:rect");
-_12e.setAttribute("strokecolor",data[i].series.color);
-_12e.setAttribute("fillcolor",data[i].series.color);
-var fill=document.createElement("v:fill");
-fill.setAttribute("opacity","0.6");
-_12e.appendChild(fill);
-var s=_12e.style;
-s.position="absolute";
-s.rotation="45";
-s.top=(y-mod)+"px";
-s.left=(x-mod)+"px";
-s.width=r+"px";
-s.height=r+"px";
-_12a.appendChild(_12e);
-if(_126){
-_126(_12e,data[i].src);
-}
-}
-return _12a;
-},Bubble:function(data,_132,plot,_134){
-var _135=1;
-var area=_132.getArea();
-var _137=dojo.charting.Plotters._group(_132);
-for(var i=0;i<data.length;i++){
-var x=Math.round(plot.axisX.getCoord(data[i].x,_132,plot));
-var y=Math.round(plot.axisY.getCoord(data[i].y,_132,plot));
-if(i==0){
-var raw=data[i].size;
-var dy=plot.axisY.getCoord(data[i].y+raw,_132,plot)-y;
-_135=dy/raw;
-}
-if(_135<1){
-_135=1;
-}
-var r=(data[i].size/2)*_135;
-var _13e=document.createElement("v:oval");
-_13e.setAttribute("strokecolor",data[i].series.color);
-_13e.setAttribute("fillcolor",data[i].series.color);
-var fill=document.createElement("v:fill");
-fill.setAttribute("opacity","0.6");
-_13e.appendChild(fill);
-var s=_13e.style;
-s.position="absolute";
-s.rotation="45";
-s.top=(y-r)+"px";
-s.left=(x-r)+"px";
-s.width=(r*2)+"px";
-s.height=(r*2)+"px";
-_137.appendChild(_13e);
-if(_134){
-_134(_13e,data[i].src);
-}
-}
-return _137;
-}});
-dojo.charting.Plotters["Default"]=dojo.charting.Plotters.Line;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/ArrayList.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/ArrayList.js
deleted file mode 100644
index 1db5999..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/ArrayList.js
+++ /dev/null
@@ -1,101 +0,0 @@
-dojo.provide("dojo.collections.ArrayList");
-dojo.require("dojo.collections.Collections");
-dojo.collections.ArrayList=function(_1){
-var _2=[];
-if(_1){
-_2=_2.concat(_1);
-}
-this.count=_2.length;
-this.add=function(_3){
-_2.push(_3);
-this.count=_2.length;
-};
-this.addRange=function(a){
-if(a.getIterator){
-var e=a.getIterator();
-while(!e.atEnd()){
-this.add(e.get());
-}
-this.count=_2.length;
-}else{
-for(var i=0;i<a.length;i++){
-_2.push(a[i]);
-}
-this.count=_2.length;
-}
-};
-this.clear=function(){
-_2.splice(0,_2.length);
-this.count=0;
-};
-this.clone=function(){
-return new dojo.collections.ArrayList(_2);
-};
-this.contains=function(_7){
-for(var i=0;i<_2.length;i++){
-if(_2[i]==_7){
-return true;
-}
-}
-return false;
-};
-this.forEach=function(fn,_a){
-var s=_a||dj_global;
-if(Array.forEach){
-Array.forEach(_2,fn,s);
-}else{
-for(var i=0;i<_2.length;i++){
-fn.call(s,_2[i],i,_2);
-}
-}
-};
-this.getIterator=function(){
-return new dojo.collections.Iterator(_2);
-};
-this.indexOf=function(_d){
-for(var i=0;i<_2.length;i++){
-if(_2[i]==_d){
-return i;
-}
-}
-return -1;
-};
-this.insert=function(i,obj){
-_2.splice(i,0,obj);
-this.count=_2.length;
-};
-this.item=function(i){
-return _2[i];
-};
-this.remove=function(obj){
-var i=this.indexOf(obj);
-if(i>=0){
-_2.splice(i,1);
-}
-this.count=_2.length;
-};
-this.removeAt=function(i){
-_2.splice(i,1);
-this.count=_2.length;
-};
-this.reverse=function(){
-_2.reverse();
-};
-this.sort=function(fn){
-if(fn){
-_2.sort(fn);
-}else{
-_2.sort();
-}
-};
-this.setByIndex=function(i,obj){
-_2[i]=obj;
-this.count=_2.length;
-};
-this.toArray=function(){
-return [].concat(_2);
-};
-this.toString=function(_18){
-return _2.join((_18||","));
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/BinaryTree.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/BinaryTree.js
deleted file mode 100644
index 40bbc9d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/BinaryTree.js
+++ /dev/null
@@ -1,244 +0,0 @@
-dojo.provide("dojo.collections.BinaryTree");
-dojo.require("dojo.collections.Collections");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.collections.BinaryTree");
-dojo.collections.BinaryTree=function(_1){
-function node(_2,_3,_4){
-this.value=_2||null;
-this.right=_3||null;
-this.left=_4||null;
-this.clone=function(){
-var c=new node();
-if(this.value.value){
-c.value=this.value.clone();
-}else{
-c.value=this.value;
-}
-if(this.left){
-c.left=this.left.clone();
-}
-if(this.right){
-c.right=this.right.clone();
-}
-};
-this.compare=function(n){
-if(this.value>n.value){
-return 1;
-}
-if(this.value<n.value){
-return -1;
-}
-return 0;
-};
-this.compareData=function(d){
-if(this.value>d){
-return 1;
-}
-if(this.value<d){
-return -1;
-}
-return 0;
-};
-}
-function inorderTraversalBuildup(_8,a){
-if(_8){
-inorderTraversalBuildup(_8.left,a);
-a.add(_8);
-inorderTraversalBuildup(_8.right,a);
-}
-}
-function preorderTraversal(_a,_b){
-var s="";
-if(_a){
-s=_a.value.toString()+_b;
-s+=preorderTraversal(_a.left,_b);
-s+=preorderTraversal(_a.right,_b);
-}
-return s;
-}
-function inorderTraversal(_d,_e){
-var s="";
-if(_d){
-s=inorderTraversal(_d.left,_e);
-s+=_d.value.toString()+_e;
-s+=inorderTraversal(_d.right,_e);
-}
-return s;
-}
-function postorderTraversal(_10,sep){
-var s="";
-if(_10){
-s=postorderTraversal(_10.left,sep);
-s+=postorderTraversal(_10.right,sep);
-s+=_10.value.toString()+sep;
-}
-return s;
-}
-function searchHelper(_13,_14){
-if(!_13){
-return null;
-}
-var i=_13.compareData(_14);
-if(i==0){
-return _13;
-}
-if(i>0){
-return searchHelper(_13.left,_14);
-}else{
-return searchHelper(_13.right,_14);
-}
-}
-this.add=function(_16){
-var n=new node(_16);
-var i;
-var _19=_1a;
-var _1b=null;
-while(_19){
-i=_19.compare(n);
-if(i==0){
-return;
-}
-_1b=_19;
-if(i>0){
-_19=_19.left;
-}else{
-_19=_19.right;
-}
-}
-this.count++;
-if(!_1b){
-_1a=n;
-}else{
-i=_1b.compare(n);
-if(i>0){
-_1b.left=n;
-}else{
-_1b.right=n;
-}
-}
-};
-this.clear=function(){
-_1a=null;
-this.count=0;
-};
-this.clone=function(){
-var c=new dojo.collections.BinaryTree();
-c.root=_1a.clone();
-c.count=this.count;
-return c;
-};
-this.contains=function(_1d){
-return this.search(_1d)!=null;
-};
-this.deleteData=function(_1e){
-var _1f=_1a;
-var _20=null;
-var i=_1f.compareData(_1e);
-while(i!=0&&_1f!=null){
-if(i>0){
-_20=_1f;
-_1f=_1f.left;
-}else{
-if(i<0){
-_20=_1f;
-_1f=_1f.right;
-}
-}
-i=_1f.compareData(_1e);
-}
-if(!_1f){
-return;
-}
-this.count--;
-if(!_1f.right){
-if(!_20){
-_1a=_1f.left;
-}else{
-i=_20.compare(_1f);
-if(i>0){
-_20.left=_1f.left;
-}else{
-if(i<0){
-_20.right=_1f.left;
-}
-}
-}
-}else{
-if(!_1f.right.left){
-if(!_20){
-_1a=_1f.right;
-}else{
-i=_20.compare(_1f);
-if(i>0){
-_20.left=_1f.right;
-}else{
-if(i<0){
-_20.right=_1f.right;
-}
-}
-}
-}else{
-var _22=_1f.right.left;
-var _23=_1f.right;
-while(_22.left!=null){
-_23=_22;
-_22=_22.left;
-}
-_23.left=_22.right;
-_22.left=_1f.left;
-_22.right=_1f.right;
-if(!_20){
-_1a=_22;
-}else{
-i=_20.compare(_1f);
-if(i>0){
-_20.left=_22;
-}else{
-if(i<0){
-_20.right=_22;
-}
-}
-}
-}
-}
-};
-this.getIterator=function(){
-var a=[];
-inorderTraversalBuildup(_1a,a);
-return new dojo.collections.Iterator(a);
-};
-this.search=function(_25){
-return searchHelper(_1a,_25);
-};
-this.toString=function(_26,sep){
-if(!_26){
-var _26=dojo.collections.BinaryTree.TraversalMethods.Inorder;
-}
-if(!sep){
-var sep=" ";
-}
-var s="";
-switch(_26){
-case dojo.collections.BinaryTree.TraversalMethods.Preorder:
-s=preorderTraversal(_1a,sep);
-break;
-case dojo.collections.BinaryTree.TraversalMethods.Inorder:
-s=inorderTraversal(_1a,sep);
-break;
-case dojo.collections.BinaryTree.TraversalMethods.Postorder:
-s=postorderTraversal(_1a,sep);
-break;
-}
-if(s.length==0){
-return "";
-}else{
-return s.substring(0,s.length-sep.length);
-}
-};
-this.count=0;
-var _1a=this.root=null;
-if(_1){
-this.add(_1);
-}
-};
-dojo.collections.BinaryTree.TraversalMethods={Preorder:1,Inorder:2,Postorder:3};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Collections.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Collections.js
deleted file mode 100644
index 6b4161c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Collections.js
+++ /dev/null
@@ -1,79 +0,0 @@
-dojo.provide("dojo.collections.Collections");
-dojo.collections.DictionaryEntry=function(k,v){
-this.key=k;
-this.value=v;
-this.valueOf=function(){
-return this.value;
-};
-this.toString=function(){
-return String(this.value);
-};
-};
-dojo.collections.Iterator=function(_3){
-var a=_3;
-var _5=0;
-this.element=a[_5]||null;
-this.atEnd=function(){
-return (_5>=a.length);
-};
-this.get=function(){
-if(this.atEnd()){
-return null;
-}
-this.element=a[_5++];
-return this.element;
-};
-this.map=function(fn,_7){
-var s=_7||dj_global;
-if(Array.map){
-return Array.map(a,fn,s);
-}else{
-var _9=[];
-for(var i=0;i<a.length;i++){
-_9.push(fn.call(s,a[i]));
-}
-return _9;
-}
-};
-this.reset=function(){
-_5=0;
-this.element=a[_5];
-};
-};
-dojo.collections.DictionaryIterator=function(_b){
-var a=[];
-var _d={};
-for(var p in _b){
-if(!_d[p]){
-a.push(_b[p]);
-}
-}
-var _f=0;
-this.element=a[_f]||null;
-this.atEnd=function(){
-return (_f>=a.length);
-};
-this.get=function(){
-if(this.atEnd()){
-return null;
-}
-this.element=a[_f++];
-return this.element;
-};
-this.map=function(fn,_11){
-var s=_11||dj_global;
-if(Array.map){
-return Array.map(a,fn,s);
-}else{
-var arr=[];
-for(var i=0;i<a.length;i++){
-arr.push(fn.call(s,a[i]));
-}
-return arr;
-}
-};
-this.reset=function(){
-_f=0;
-this.element=a[_f];
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Dictionary.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Dictionary.js
deleted file mode 100644
index b1599b2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Dictionary.js
+++ /dev/null
@@ -1,88 +0,0 @@
-dojo.provide("dojo.collections.Dictionary");
-dojo.require("dojo.collections.Collections");
-dojo.collections.Dictionary=function(_1){
-var _2={};
-this.count=0;
-var _3={};
-this.add=function(k,v){
-var b=(k in _2);
-_2[k]=new dojo.collections.DictionaryEntry(k,v);
-if(!b){
-this.count++;
-}
-};
-this.clear=function(){
-_2={};
-this.count=0;
-};
-this.clone=function(){
-return new dojo.collections.Dictionary(this);
-};
-this.contains=this.containsKey=function(k){
-if(_3[k]){
-return false;
-}
-return (_2[k]!=null);
-};
-this.containsValue=function(v){
-var e=this.getIterator();
-while(e.get()){
-if(e.element.value==v){
-return true;
-}
-}
-return false;
-};
-this.entry=function(k){
-return _2[k];
-};
-this.forEach=function(fn,_c){
-var a=[];
-for(var p in _2){
-if(!_3[p]){
-a.push(_2[p]);
-}
-}
-var s=_c||dj_global;
-if(Array.forEach){
-Array.forEach(a,fn,s);
-}else{
-for(var i=0;i<a.length;i++){
-fn.call(s,a[i],i,a);
-}
-}
-};
-this.getKeyList=function(){
-return (this.getIterator()).map(function(_11){
-return _11.key;
-});
-};
-this.getValueList=function(){
-return (this.getIterator()).map(function(_12){
-return _12.value;
-});
-};
-this.item=function(k){
-if(k in _2){
-return _2[k].valueOf();
-}
-return undefined;
-};
-this.getIterator=function(){
-return new dojo.collections.DictionaryIterator(_2);
-};
-this.remove=function(k){
-if(k in _2&&!_3[k]){
-delete _2[k];
-this.count--;
-return true;
-}
-return false;
-};
-if(_1){
-var e=_1.getIterator();
-while(e.get()){
-this.add(e.element.key,e.element.value);
-}
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Graph.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Graph.js
deleted file mode 100644
index 6bf8fff..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Graph.js
+++ /dev/null
@@ -1,138 +0,0 @@
-dojo.provide("dojo.collections.Graph");
-dojo.require("dojo.collections.Collections");
-dojo.experimental("dojo.collections.Graph");
-dojo.collections.Graph=function(_1){
-function node(_2,_3,_4){
-this.key=_2;
-this.data=_3;
-this.neighbors=_4||new adjacencyList();
-this.addDirected=function(){
-if(arguments[0].constructor==edgeToNeighbor){
-this.neighbors.add(arguments[0]);
-}else{
-var n=arguments[0];
-var _6=arguments[1]||0;
-this.neighbors.add(new edgeToNeighbor(n,_6));
-}
-};
-}
-function nodeList(){
-var d=new dojo.collections.Dictionary();
-function nodelistiterator(){
-var o=[];
-var e=d.getIterator();
-while(e.get()){
-o[o.length]=e.element;
-}
-var _a=0;
-this.element=o[_a]||null;
-this.atEnd=function(){
-return (_a>=o.length);
-};
-this.get=function(){
-if(this.atEnd()){
-return null;
-}
-this.element=o[_a++];
-return this.element;
-};
-this.map=function(fn,_c){
-var s=_c||dj_global;
-if(Array.map){
-return Array.map(o,fn,s);
-}else{
-var _e=[];
-for(var i=0;i<o.length;i++){
-_e.push(fn.call(s,o[i]));
-}
-return _e;
-}
-};
-this.reset=function(){
-_a=0;
-this.element=o[_a];
-};
-}
-this.add=function(_10){
-d.add(_10.key,_10);
-};
-this.clear=function(){
-d.clear();
-};
-this.containsKey=function(key){
-return d.containsKey(key);
-};
-this.getIterator=function(){
-return new nodelistiterator(this);
-};
-this.item=function(key){
-return d.item(key);
-};
-this.remove=function(_13){
-d.remove(_13.key);
-};
-}
-function edgeToNeighbor(_14,_15){
-this.neighbor=_14;
-this.cost=_15;
-}
-function adjacencyList(){
-var d=[];
-this.add=function(o){
-d.push(o);
-};
-this.item=function(i){
-return d[i];
-};
-this.getIterator=function(){
-return new dojo.collections.Iterator([].concat(d));
-};
-}
-this.nodes=_1||new nodeList();
-this.count=this.nodes.count;
-this.clear=function(){
-this.nodes.clear();
-this.count=0;
-};
-this.addNode=function(){
-var n=arguments[0];
-if(arguments.length>1){
-n=new node(arguments[0],arguments[1]);
-}
-if(!this.nodes.containsKey(n.key)){
-this.nodes.add(n);
-this.count++;
-}
-};
-this.addDirectedEdge=function(_1a,_1b,_1c){
-var _1d,_1e;
-if(_1a.constructor!=node){
-_1d=this.nodes.item(_1a);
-_1e=this.nodes.item(_1b);
-}else{
-_1d=_1a;
-_1e=_1b;
-}
-var c=_1c||0;
-_1d.addDirected(_1e,c);
-};
-this.addUndirectedEdge=function(_20,_21,_22){
-var _23,_24;
-if(_20.constructor!=node){
-_23=this.nodes.item(_20);
-_24=this.nodes.item(_21);
-}else{
-_23=_20;
-_24=_21;
-}
-var c=_22||0;
-_23.addDirected(_24,c);
-_24.addDirected(_23,c);
-};
-this.contains=function(n){
-return this.nodes.containsKey(n.key);
-};
-this.containsKey=function(k){
-return this.nodes.containsKey(k);
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Queue.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Queue.js
deleted file mode 100644
index 0fb0eeb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Queue.js
+++ /dev/null
@@ -1,54 +0,0 @@
-dojo.provide("dojo.collections.Queue");
-dojo.require("dojo.collections.Collections");
-dojo.collections.Queue=function(_1){
-var q=[];
-if(_1){
-q=q.concat(_1);
-}
-this.count=q.length;
-this.clear=function(){
-q=[];
-this.count=q.length;
-};
-this.clone=function(){
-return new dojo.collections.Queue(q);
-};
-this.contains=function(o){
-for(var i=0;i<q.length;i++){
-if(q[i]==o){
-return true;
-}
-}
-return false;
-};
-this.copyTo=function(_5,i){
-_5.splice(i,0,q);
-};
-this.dequeue=function(){
-var r=q.shift();
-this.count=q.length;
-return r;
-};
-this.enqueue=function(o){
-this.count=q.push(o);
-};
-this.forEach=function(fn,_a){
-var s=_a||dj_global;
-if(Array.forEach){
-Array.forEach(q,fn,s);
-}else{
-for(var i=0;i<q.length;i++){
-fn.call(s,q[i],i,q);
-}
-}
-};
-this.getIterator=function(){
-return new dojo.collections.Iterator(q);
-};
-this.peek=function(){
-return q[0];
-};
-this.toArray=function(){
-return [].concat(q);
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Set.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Set.js
deleted file mode 100644
index 34cecbb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Set.js
+++ /dev/null
@@ -1,101 +0,0 @@
-dojo.provide("dojo.collections.Set");
-dojo.require("dojo.collections.Collections");
-dojo.require("dojo.collections.ArrayList");
-dojo.collections.Set=new function(){
-this.union=function(_1,_2){
-if(_1.constructor==Array){
-var _1=new dojo.collections.ArrayList(_1);
-}
-if(_2.constructor==Array){
-var _2=new dojo.collections.ArrayList(_2);
-}
-if(!_1.toArray||!_2.toArray){
-dojo.raise("Set operations can only be performed on array-based collections.");
-}
-var _3=new dojo.collections.ArrayList(_1.toArray());
-var e=_2.getIterator();
-while(!e.atEnd()){
-var _5=e.get();
-if(!_3.contains(_5)){
-_3.add(_5);
-}
-}
-return _3;
-};
-this.intersection=function(_6,_7){
-if(_6.constructor==Array){
-var _6=new dojo.collections.ArrayList(_6);
-}
-if(_7.constructor==Array){
-var _7=new dojo.collections.ArrayList(_7);
-}
-if(!_6.toArray||!_7.toArray){
-dojo.raise("Set operations can only be performed on array-based collections.");
-}
-var _8=new dojo.collections.ArrayList();
-var e=_7.getIterator();
-while(!e.atEnd()){
-var _a=e.get();
-if(_6.contains(_a)){
-_8.add(_a);
-}
-}
-return _8;
-};
-this.difference=function(_b,_c){
-if(_b.constructor==Array){
-var _b=new dojo.collections.ArrayList(_b);
-}
-if(_c.constructor==Array){
-var _c=new dojo.collections.ArrayList(_c);
-}
-if(!_b.toArray||!_c.toArray){
-dojo.raise("Set operations can only be performed on array-based collections.");
-}
-var _d=new dojo.collections.ArrayList();
-var e=_b.getIterator();
-while(!e.atEnd()){
-var _f=e.get();
-if(!_c.contains(_f)){
-_d.add(_f);
-}
-}
-return _d;
-};
-this.isSubSet=function(_10,_11){
-if(_10.constructor==Array){
-var _10=new dojo.collections.ArrayList(_10);
-}
-if(_11.constructor==Array){
-var _11=new dojo.collections.ArrayList(_11);
-}
-if(!_10.toArray||!_11.toArray){
-dojo.raise("Set operations can only be performed on array-based collections.");
-}
-var e=_10.getIterator();
-while(!e.atEnd()){
-if(!_11.contains(e.get())){
-return false;
-}
-}
-return true;
-};
-this.isSuperSet=function(_13,_14){
-if(_13.constructor==Array){
-var _13=new dojo.collections.ArrayList(_13);
-}
-if(_14.constructor==Array){
-var _14=new dojo.collections.ArrayList(_14);
-}
-if(!_13.toArray||!_14.toArray){
-dojo.raise("Set operations can only be performed on array-based collections.");
-}
-var e=_14.getIterator();
-while(!e.atEnd()){
-if(!_13.contains(e.get())){
-return false;
-}
-}
-return true;
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/SkipList.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/SkipList.js
deleted file mode 100644
index bcde28b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/SkipList.js
+++ /dev/null
@@ -1,156 +0,0 @@
-dojo.provide("dojo.collections.SkipList");
-dojo.require("dojo.collections.Collections");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.collections.SkipList");
-dojo.collections.SkipList=function(){
-function node(_1,_2){
-this.value=_2;
-this.height=_1;
-this.nodes=new nodeList(_1);
-this.compare=function(_3){
-if(this.value>_3){
-return 1;
-}
-if(this.value<_3){
-return -1;
-}
-return 0;
-};
-this.incrementHeight=function(){
-this.nodes.incrementHeight();
-this.height++;
-};
-this.decrementHeight=function(){
-this.nodes.decrementHeight();
-this.height--;
-};
-}
-function nodeList(_4){
-var _5=[];
-this.height=_4;
-for(var i=0;i<_4;i++){
-_5[i]=null;
-}
-this.item=function(i){
-return _5[i];
-};
-this.incrementHeight=function(){
-this.height++;
-_5[this.height]=null;
-};
-this.decrementHeight=function(){
-_5.splice(_5.length-1,1);
-this.height--;
-};
-}
-function iterator(_8){
-this.element=_8.head;
-this.atEnd=function(){
-return (this.element==null);
-};
-this.get=function(){
-if(this.atEnd()){
-return null;
-}
-this.element=this.element.nodes[0];
-return this.element;
-};
-this.reset=function(){
-this.element=_8.head;
-};
-}
-function chooseRandomHeight(_9){
-var _a=1;
-while(Math.random()<_b&&_a<_9){
-_a++;
-}
-return _a;
-}
-var _b=0.5;
-var _c=0;
-this.head=new node(1);
-this.count=0;
-this.add=function(_d){
-var _e=[];
-var _f=this.head;
-for(var i=this.head.height;i>=0;i--){
-if(!(_f.nodes[i]!=null&&_f.nodes[i].compare(_d)<0)){
-_c++;
-}
-while(_f.nodes[i]!=null&&_f.nodes[i].compare(_d)<0){
-_f=_f.nodes[i];
-_c++;
-}
-_e[i]=_f;
-}
-if(_f.nodes[0]!=null&&_f.nodes[0].compare(_d)==0){
-return;
-}
-var n=new node(_d,chooseRandomHeight(this.head.height+1));
-this.count++;
-if(n.height>this.head.height){
-this.head.incrementHeight();
-this.head.nodes[this.head.height-1]=n;
-}
-for(i=0;i<n.height;i++){
-if(i<_e.length){
-n.nodes[i]=_e[i].nodes[i];
-_e[i].nodes[i]=n;
-}
-}
-};
-this.contains=function(val){
-var _13=this.head;
-var i;
-for(i=this.head.height-1;i>=0;i--){
-while(_13.item(i)!=null){
-_c++;
-var _15=_13.nodes[i].compare(val);
-if(_15==0){
-return true;
-}else{
-if(_15<0){
-_13=_13.nodes[i];
-}else{
-break;
-}
-}
-}
-}
-return false;
-};
-this.getIterator=function(){
-return new iterator(this);
-};
-this.remove=function(val){
-var _17=[];
-var _18=this.head;
-for(var i=this.head.height-1;i>=0;i--){
-if(!(_18.nodes[i]!=null&&_18.nodes[i].compare(val)<0)){
-_c++;
-}
-while(_18.nodes[i]!=null&&_18.nodes[i].compare(val)<0){
-_18=_18.nodes[i];
-_c++;
-}
-_17[i]=_18;
-}
-_18=_18.nodes[0];
-if(_18!=null&&_18.compare(val)==0){
-this.count--;
-for(var i=0;i<this.head.height;i++){
-if(_17[i].nodes[i]!=_18){
-break;
-}else{
-_17[i].nodes[i]=_18.nodes[i];
-}
-}
-if(this.head.nodes[this.head.height-1]==null){
-this.head.decrementHeight();
-}
-}
-};
-this.resetComparisons=function(){
-_c=0;
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/SortedList.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/SortedList.js
deleted file mode 100644
index d73dc1f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/SortedList.js
+++ /dev/null
@@ -1,158 +0,0 @@
-dojo.provide("dojo.collections.SortedList");
-dojo.require("dojo.collections.Collections");
-dojo.collections.SortedList=function(_1){
-var _2=this;
-var _3={};
-var q=[];
-var _5=function(a,b){
-if(a.key>b.key){
-return 1;
-}
-if(a.key<b.key){
-return -1;
-}
-return 0;
-};
-var _8=function(){
-q=[];
-var e=_2.getIterator();
-while(!e.atEnd()){
-q.push(e.get());
-}
-q.sort(_5);
-};
-var _a={};
-this.count=q.length;
-this.add=function(k,v){
-if(!_3[k]){
-_3[k]=new dojo.collections.DictionaryEntry(k,v);
-this.count=q.push(_3[k]);
-q.sort(_5);
-}
-};
-this.clear=function(){
-_3={};
-q=[];
-this.count=q.length;
-};
-this.clone=function(){
-return new dojo.collections.SortedList(this);
-};
-this.contains=this.containsKey=function(k){
-if(_a[k]){
-return false;
-}
-return (_3[k]!=null);
-};
-this.containsValue=function(o){
-var e=this.getIterator();
-while(!e.atEnd()){
-var _10=e.get();
-if(_10.value==o){
-return true;
-}
-}
-return false;
-};
-this.copyTo=function(arr,i){
-var e=this.getIterator();
-var idx=i;
-while(!e.atEnd()){
-arr.splice(idx,0,e.get());
-idx++;
-}
-};
-this.entry=function(k){
-return _3[k];
-};
-this.forEach=function(fn,_17){
-var s=_17||dj_global;
-if(Array.forEach){
-Array.forEach(q,fn,s);
-}else{
-for(var i=0;i<q.length;i++){
-fn.call(s,q[i],i,q);
-}
-}
-};
-this.getByIndex=function(i){
-return q[i].valueOf();
-};
-this.getIterator=function(){
-return new dojo.collections.DictionaryIterator(_3);
-};
-this.getKey=function(i){
-return q[i].key;
-};
-this.getKeyList=function(){
-var arr=[];
-var e=this.getIterator();
-while(!e.atEnd()){
-arr.push(e.get().key);
-}
-return arr;
-};
-this.getValueList=function(){
-var arr=[];
-var e=this.getIterator();
-while(!e.atEnd()){
-arr.push(e.get().value);
-}
-return arr;
-};
-this.indexOfKey=function(k){
-for(var i=0;i<q.length;i++){
-if(q[i].key==k){
-return i;
-}
-}
-return -1;
-};
-this.indexOfValue=function(o){
-for(var i=0;i<q.length;i++){
-if(q[i].value==o){
-return i;
-}
-}
-return -1;
-};
-this.item=function(k){
-if(k in _3&&!_a[k]){
-return _3[k].valueOf();
-}
-return undefined;
-};
-this.remove=function(k){
-delete _3[k];
-_8();
-this.count=q.length;
-};
-this.removeAt=function(i){
-delete _3[q[i].key];
-_8();
-this.count=q.length;
-};
-this.replace=function(k,v){
-if(!_3[k]){
-this.add(k,v);
-return false;
-}else{
-_3[k]=new dojo.collections.DictionaryEntry(k,v);
-q.sort(_5);
-return true;
-}
-};
-this.setByIndex=function(i,o){
-_3[q[i].key].value=o;
-_8();
-this.count=q.length;
-};
-if(_1){
-var e=_1.getIterator();
-while(!e.atEnd()){
-var _2c=e.get();
-q[q.length]=_3[_2c.key]=new dojo.collections.DictionaryEntry(_2c.key,_2c.value);
-}
-q.sort(_5);
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Stack.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Stack.js
deleted file mode 100644
index f225463..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Stack.js
+++ /dev/null
@@ -1,54 +0,0 @@
-dojo.provide("dojo.collections.Stack");
-dojo.require("dojo.collections.Collections");
-dojo.collections.Stack=function(_1){
-var q=[];
-if(_1){
-q=q.concat(_1);
-}
-this.count=q.length;
-this.clear=function(){
-q=[];
-this.count=q.length;
-};
-this.clone=function(){
-return new dojo.collections.Stack(q);
-};
-this.contains=function(o){
-for(var i=0;i<q.length;i++){
-if(q[i]==o){
-return true;
-}
-}
-return false;
-};
-this.copyTo=function(_5,i){
-_5.splice(i,0,q);
-};
-this.forEach=function(fn,_8){
-var s=_8||dj_global;
-if(Array.forEach){
-Array.forEach(q,fn,s);
-}else{
-for(var i=0;i<q.length;i++){
-fn.call(s,q[i],i,q);
-}
-}
-};
-this.getIterator=function(){
-return new dojo.collections.Iterator(q);
-};
-this.peek=function(){
-return q[(q.length-1)];
-};
-this.pop=function(){
-var r=q.pop();
-this.count=q.length;
-return r;
-};
-this.push=function(o){
-this.count=q.push(o);
-};
-this.toArray=function(){
-return [].concat(q);
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Store.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Store.js
deleted file mode 100644
index e2b7ff1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/Store.js
+++ /dev/null
@@ -1,280 +0,0 @@
-dojo.provide("dojo.collections.Store");
-dojo.require("dojo.lang.common");
-dojo.collections.Store=function(_1){
-var _2=[];
-var _3={};
-this.keyField="Id";
-this.get=function(){
-return _2;
-};
-this.getByKey=function(_4){
-return _3[_4];
-};
-this.getByIndex=function(_5){
-return _2[_5];
-};
-this.getIndexOf=function(_6){
-for(var i=0;i<_2.length;i++){
-if(_2[i].key==_6){
-return i;
-}
-}
-return -1;
-};
-this.getData=function(){
-var _8=[];
-for(var i=0;i<_2.length;i++){
-_8.push(_2[i].src);
-}
-return _8;
-};
-this.getDataByKey=function(_a){
-if(_3[_a]!=null){
-return _3[_a].src;
-}
-return null;
-};
-this.getIndexOfData=function(_b){
-for(var i=0;i<_2.length;i++){
-if(_2[i].src==_b){
-return i;
-}
-}
-return -1;
-};
-this.getDataByIndex=function(_d){
-if(_2[_d]){
-return _2[_d].src;
-}
-return null;
-};
-this.update=function(_e,_f,val,_11){
-var _12=_f.split("."),i=0,o=_e,_15;
-if(_12.length>1){
-_15=_12.pop();
-do{
-if(_12[i].indexOf("()")>-1){
-var _16=_12[i++].split("()")[0];
-if(!o[_16]){
-dojo.raise("dojo.collections.Store.getField(obj, '"+_15+"'): '"+_16+"' is not a property of the passed object.");
-}else{
-o=o[_16]();
-}
-}else{
-o=o[_12[i++]];
-}
-}while(i<_12.length&&o!=null);
-}else{
-_15=_12[0];
-}
-_e[_15]=val;
-if(!_11){
-this.onUpdateField(_e,_f,val);
-}
-};
-this.forEach=function(fn){
-if(Array.forEach){
-Array.forEach(_2,fn,this);
-}else{
-for(var i=0;i<_2.length;i++){
-fn.call(this,_2[i]);
-}
-}
-};
-this.forEachData=function(fn){
-if(Array.forEach){
-Array.forEach(this.getData(),fn,this);
-}else{
-var a=this.getData();
-for(var i=0;i<a.length;i++){
-fn.call(this,a[i]);
-}
-}
-};
-this.setData=function(arr,_1d){
-_2=[];
-for(var i=0;i<arr.length;i++){
-var o={key:arr[i][this.keyField],src:arr[i]};
-_2.push(o);
-_3[o.key]=o;
-}
-if(!_1d){
-this.onSetData();
-}
-};
-this.clearData=function(_20){
-_2=[];
-_3={};
-if(!_20){
-this.onClearData();
-}
-};
-this.addData=function(obj,key,_23){
-var k=key||obj[this.keyField];
-if(_3[k]!=null){
-var o=_3[k];
-o.src=obj;
-}else{
-var o={key:k,src:obj};
-_2.push(o);
-_3[o.key]=o;
-}
-if(!_23){
-this.onAddData(o);
-}
-};
-this.addDataRange=function(arr,_27){
-var _28=[];
-for(var i=0;i<arr.length;i++){
-var k=arr[i][this.keyField];
-if(_3[k]!=null){
-var o=_3[k];
-o.src=arr[i];
-}else{
-var o={key:k,src:arr[i]};
-_2.push(o);
-_3[k]=o;
-}
-_28.push(o);
-}
-if(!_27){
-this.onAddDataRange(_28);
-}
-};
-this.addDataByIndex=function(obj,idx,key,_2f){
-var k=key||obj[this.keyField];
-if(_3[k]!=null){
-var i=this.getIndexOf(k);
-var o=_2.splice(i,1);
-o.src=obj;
-}else{
-var o={key:k,src:obj};
-_3[k]=o;
-}
-_2.splice(idx,0,o);
-if(!_2f){
-this.onAddData(o);
-}
-};
-this.addDataRangeByIndex=function(arr,idx,_35){
-var _36=[];
-for(var i=0;i<arr.length;i++){
-var k=arr[i][this.keyField];
-if(_3[k]!=null){
-var j=this.getIndexOf(k);
-var o=_2.splice(j,1);
-o.src=arr[i];
-}else{
-var o={key:k,src:arr[i]};
-_3[k]=o;
-}
-_36.push(o);
-}
-_2.splice(idx,0,_36);
-if(!_35){
-this.onAddDataRange(_36);
-}
-};
-this.removeData=function(obj,_3c){
-var idx=-1;
-var o=null;
-for(var i=0;i<_2.length;i++){
-if(_2[i].src==obj){
-idx=i;
-o=_2[i];
-break;
-}
-}
-if(!_3c){
-this.onRemoveData(o);
-}
-if(idx>-1){
-_2.splice(idx,1);
-delete _3[o.key];
-}
-};
-this.removeDataRange=function(idx,_41,_42){
-var ret=_2.splice(idx,_41);
-for(var i=0;i<ret.length;i++){
-delete _3[ret[i].key];
-}
-if(!_42){
-this.onRemoveDataRange(ret);
-}
-return ret;
-};
-this.removeDataByKey=function(key,_46){
-this.removeData(this.getDataByKey(key),_46);
-};
-this.removeDataByIndex=function(idx,_48){
-this.removeData(this.getDataByIndex(idx),_48);
-};
-if(_1&&_1.length&&_1[0]){
-this.setData(_1,true);
-}
-};
-dojo.extend(dojo.collections.Store,{getField:function(obj,_4a){
-var _4b=_4a.split("."),i=0,o=obj;
-do{
-if(_4b[i].indexOf("()")>-1){
-var _4e=_4b[i++].split("()")[0];
-if(!o[_4e]){
-dojo.raise("dojo.collections.Store.getField(obj, '"+_4a+"'): '"+_4e+"' is not a property of the passed object.");
-}else{
-o=o[_4e]();
-}
-}else{
-o=o[_4b[i++]];
-}
-}while(i<_4b.length&&o!=null);
-if(i<_4b.length){
-dojo.raise("dojo.collections.Store.getField(obj, '"+_4a+"'): '"+_4a+"' is not a property of the passed object.");
-}
-return o;
-},getFromHtml:function(_4f,_50,_51){
-var _52=_50.rows;
-var _53=function(row){
-var obj={};
-for(var i=0;i<_4f.length;i++){
-var o=obj;
-var _58=row.cells[i].innerHTML;
-var p=_4f[i].getField();
-if(p.indexOf(".")>-1){
-p=p.split(".");
-while(p.length>1){
-var pr=p.shift();
-o[pr]={};
-o=o[pr];
-}
-p=p[0];
-}
-var _5b=_4f[i].getType();
-if(_5b==String){
-o[p]=_58;
-}else{
-if(_58){
-o[p]=new _5b(_58);
-}else{
-o[p]=new _5b();
-}
-}
-}
-return obj;
-};
-var arr=[];
-for(var i=0;i<_52.length;i++){
-var o=_53(_52[i]);
-if(_51){
-_51(o,_52[i]);
-}
-arr.push(o);
-}
-return arr;
-},onSetData:function(){
-},onClearData:function(){
-},onAddData:function(obj){
-},onAddDataRange:function(arr){
-},onRemoveData:function(obj){
-},onRemoveDataRange:function(arr){
-},onUpdateField:function(obj,_64,val){
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/__package__.js
deleted file mode 100644
index 573ccd5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/collections/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.collections.Collections","dojo.collections.SortedList","dojo.collections.Dictionary","dojo.collections.Queue","dojo.collections.ArrayList","dojo.collections.Stack","dojo.collections.Set"]});
-dojo.provide("dojo.collections.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto.js
deleted file mode 100644
index 7640465..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto.js
+++ /dev/null
@@ -1,3 +0,0 @@
-dojo.provide("dojo.crypto");
-dojo.crypto.cipherModes={ECB:0,CBC:1,PCBC:2,CFB:3,OFB:4,CTR:5};
-dojo.crypto.outputTypes={Base64:0,Hex:1,String:2,Raw:3};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/Blowfish.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/Blowfish.js
deleted file mode 100644
index 1884e7d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/Blowfish.js
+++ /dev/null
@@ -1,371 +0,0 @@
-dojo.require("dojo.crypto");
-dojo.provide("dojo.crypto.Blowfish");
-dojo.crypto.Blowfish=new function(){
-var _1=Math.pow(2,2);
-var _2=Math.pow(2,3);
-var _3=Math.pow(2,4);
-var _4=Math.pow(2,8);
-var _5=Math.pow(2,16);
-var _6=Math.pow(2,24);
-var iv=null;
-var _8={p:[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s0:[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],s1:[1266315497,3048417604,3681880366,3289982499,2909710000,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],s2:[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],s3:[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409000,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]};
-function add(x,y){
-var _b=(x+y)&4294967295;
-if(_b<0){
-_b=-_b;
-return (65536*((_b>>16)^65535))+(((_b&65535)^65535)+1);
-}
-return _b;
-}
-function split(x){
-var r=x&4294967295;
-if(r<0){
-r=-r;
-return [((r&65535)^65535)+1,(r>>16)^65535];
-}
-return [r&65535,(r>>16)];
-}
-function xor(x,y){
-var xs=split(x);
-var ys=split(y);
-return (65536*(xs[1]^ys[1]))+(xs[0]^ys[0]);
-}
-function $(v,box){
-var d=v&255;
-v>>=8;
-var c=v&255;
-v>>=8;
-var b=v&255;
-v>>=8;
-var a=v&255;
-var r=add(box.s0[a],box.s1[b]);
-r=xor(r,box.s2[c]);
-return add(r,box.s3[d]);
-}
-function eb(o,box){
-var l=o.left;
-var r=o.right;
-l=xor(l,box.p[0]);
-r=xor(r,xor($(l,box),box.p[1]));
-l=xor(l,xor($(r,box),box.p[2]));
-r=xor(r,xor($(l,box),box.p[3]));
-l=xor(l,xor($(r,box),box.p[4]));
-r=xor(r,xor($(l,box),box.p[5]));
-l=xor(l,xor($(r,box),box.p[6]));
-r=xor(r,xor($(l,box),box.p[7]));
-l=xor(l,xor($(r,box),box.p[8]));
-r=xor(r,xor($(l,box),box.p[9]));
-l=xor(l,xor($(r,box),box.p[10]));
-r=xor(r,xor($(l,box),box.p[11]));
-l=xor(l,xor($(r,box),box.p[12]));
-r=xor(r,xor($(l,box),box.p[13]));
-l=xor(l,xor($(r,box),box.p[14]));
-r=xor(r,xor($(l,box),box.p[15]));
-l=xor(l,xor($(r,box),box.p[16]));
-o.right=l;
-o.left=xor(r,box.p[17]);
-}
-function db(o,box){
-var l=o.left;
-var r=o.right;
-l=xor(l,box.p[17]);
-r=xor(r,xor($(l,box),box.p[16]));
-l=xor(l,xor($(r,box),box.p[15]));
-r=xor(r,xor($(l,box),box.p[14]));
-l=xor(l,xor($(r,box),box.p[13]));
-r=xor(r,xor($(l,box),box.p[12]));
-l=xor(l,xor($(r,box),box.p[11]));
-r=xor(r,xor($(l,box),box.p[10]));
-l=xor(l,xor($(r,box),box.p[9]));
-r=xor(r,xor($(l,box),box.p[8]));
-l=xor(l,xor($(r,box),box.p[7]));
-r=xor(r,xor($(l,box),box.p[6]));
-l=xor(l,xor($(r,box),box.p[5]));
-r=xor(r,xor($(l,box),box.p[4]));
-l=xor(l,xor($(r,box),box.p[3]));
-r=xor(r,xor($(l,box),box.p[2]));
-l=xor(l,xor($(r,box),box.p[1]));
-o.right=l;
-o.left=xor(r,box.p[0]);
-}
-function init(key){
-var k=key;
-if(typeof (k)=="string"){
-var a=[];
-for(var i=0;i<k.length;i++){
-a.push(k.charCodeAt(i)&255);
-}
-k=a;
-}
-var box={p:[],s0:[],s1:[],s2:[],s3:[]};
-for(var i=0;i<_8.p.length;i++){
-box.p.push(_8.p[i]);
-}
-for(var i=0;i<_8.s0.length;i++){
-box.s0.push(_8.s0[i]);
-}
-for(var i=0;i<_8.s1.length;i++){
-box.s1.push(_8.s1[i]);
-}
-for(var i=0;i<_8.s2.length;i++){
-box.s2.push(_8.s2[i]);
-}
-for(var i=0;i<_8.s3.length;i++){
-box.s3.push(_8.s3[i]);
-}
-var pos=0;
-var _27=0;
-for(var i=0;i<box.p.length;i++){
-for(var j=0;j<4;j++){
-_27=(_27*_4)|k[pos];
-if(++pos==k.length){
-pos=0;
-}
-}
-box.p[i]=xor(box.p[i],_27);
-}
-var res={left:0,right:0};
-for(var i=0;i<box.p.length;){
-eb(res,box);
-box.p[i++]=res.left;
-box.p[i++]=res.right;
-}
-for(var i=0;i<4;i++){
-for(var j=0;j<box["s"+i].length;){
-eb(res,box);
-box["s"+i][j++]=res.left;
-box["s"+i][j++]=res.right;
-}
-}
-return box;
-}
-function toBase64(ba){
-var p="=";
-var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-var s=[];
-var l=ba.length;
-var rm=l%3;
-var x=l-rm;
-for(var i=0;i<x;){
-var t=ba[i++]<<16|ba[i++]<<8|ba[i++];
-s.push(tab.charAt((t>>>18)&63));
-s.push(tab.charAt((t>>>12)&63));
-s.push(tab.charAt((t>>>6)&63));
-s.push(tab.charAt(t&63));
-}
-switch(rm){
-case 2:
-var t=ba[i++]<<16|ba[i++]<<8;
-s.push(tab.charAt((t>>>18)&63));
-s.push(tab.charAt((t>>>12)&63));
-s.push(tab.charAt((t>>>6)&63));
-s.push(p);
-break;
-case 1:
-var t=ba[i++]<<16;
-s.push(tab.charAt((t>>>18)&63));
-s.push(tab.charAt((t>>>12)&63));
-s.push(p);
-s.push(p);
-break;
-}
-return s.join("");
-}
-function fromBase64(str){
-var s=str.split("");
-var p="=";
-var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-var out=[];
-var l=s.length;
-while(s[--l]==p){
-}
-for(var i=0;i<l;){
-var t=tab.indexOf(s[i++])<<18|tab.indexOf(s[i++])<<12|tab.indexOf(s[i++])<<6|tab.indexOf(s[i++]);
-out.push((t>>>16)&255);
-out.push((t>>>8)&255);
-out.push(t&255);
-}
-return out;
-}
-this.getIV=function(_3b){
-var out=_3b||dojo.crypto.outputTypes.Base64;
-switch(out){
-case dojo.crypto.outputTypes.Hex:
-var s=[];
-for(var i=0;i<iv.length;i++){
-s.push((iv[i]).toString(16));
-}
-return s.join("");
-case dojo.crypto.outputTypes.String:
-return iv.join("");
-case dojo.crypto.outputTypes.Raw:
-return iv;
-default:
-return toBase64(iv);
-}
-};
-this.setIV=function(_3f,_40){
-var ip=_40||dojo.crypto.outputTypes.Base64;
-var ba=null;
-switch(ip){
-case dojo.crypto.outputTypes.String:
-ba=[];
-for(var i=0;i<_3f.length;i++){
-ba.push(_3f.charCodeAt(i));
-}
-break;
-case dojo.crypto.outputTypes.Hex:
-ba=[];
-var i=0;
-while(i+1<_3f.length){
-ba.push(parseInt(_3f.substr(i,2),16));
-i+=2;
-}
-break;
-case dojo.crypto.outputTypes.Raw:
-ba=_3f;
-break;
-default:
-ba=fromBase64(_3f);
-break;
-}
-iv={};
-iv.left=ba[0]*_6|ba[1]*_5|ba[2]*_4|ba[3];
-iv.right=ba[4]*_6|ba[5]*_5|ba[6]*_4|ba[7];
-};
-this.encrypt=function(_44,key,ao){
-var out=dojo.crypto.outputTypes.Base64;
-var _48=dojo.crypto.cipherModes.EBC;
-if(ao){
-if(ao.outputType){
-out=ao.outputType;
-}
-if(ao.cipherMode){
-_48=ao.cipherMode;
-}
-}
-var bx=init(key);
-var _4a=8-(_44.length&7);
-for(var i=0;i<_4a;i++){
-_44+=String.fromCharCode(_4a);
-}
-var _4c=[];
-var _4d=_44.length>>3;
-var pos=0;
-var o={};
-var _50=(_48==dojo.crypto.cipherModes.CBC);
-var _51={left:iv.left||null,right:iv.right||null};
-for(var i=0;i<_4d;i++){
-o.left=_44.charCodeAt(pos)*_6|_44.charCodeAt(pos+1)*_5|_44.charCodeAt(pos+2)*_4|_44.charCodeAt(pos+3);
-o.right=_44.charCodeAt(pos+4)*_6|_44.charCodeAt(pos+5)*_5|_44.charCodeAt(pos+6)*_4|_44.charCodeAt(pos+7);
-if(_50){
-o.left=xor(o.left,_51.left);
-o.right=xor(o.right,_51.right);
-}
-eb(o,bx);
-if(_50){
-_51.left=o.left;
-_51.right=o.right;
-dojo.crypto.outputTypes.Hex;
-}
-_4c.push((o.left>>24)&255);
-_4c.push((o.left>>16)&255);
-_4c.push((o.left>>8)&255);
-_4c.push(o.left&255);
-_4c.push((o.right>>24)&255);
-_4c.push((o.right>>16)&255);
-_4c.push((o.right>>8)&255);
-_4c.push(o.right&255);
-pos+=8;
-}
-switch(out){
-case dojo.crypto.outputTypes.Hex:
-var s=[];
-for(var i=0;i<_4c.length;i++){
-s.push((_4c[i]).toString(16));
-}
-return s.join("");
-case dojo.crypto.outputTypes.String:
-return _4c.join("");
-case dojo.crypto.outputTypes.Raw:
-return _4c;
-default:
-return toBase64(_4c);
-}
-};
-this.decrypt=function(_53,key,ao){
-var ip=dojo.crypto.outputTypes.Base64;
-var _57=dojo.crypto.cipherModes.EBC;
-if(ao){
-if(ao.outputType){
-ip=ao.outputType;
-}
-if(ao.cipherMode){
-_57=ao.cipherMode;
-}
-}
-var bx=init(key);
-var pt=[];
-var c=null;
-switch(ip){
-case dojo.crypto.outputTypes.Hex:
-c=[];
-var i=0;
-while(i+1<_53.length){
-c.push(parseInt(_53.substr(i,2),16));
-i+=2;
-}
-break;
-case dojo.crypto.outputTypes.String:
-c=[];
-for(var i=0;i<_53.length;i++){
-c.push(_53.charCodeAt(i));
-}
-break;
-case dojo.crypto.outputTypes.Raw:
-c=_53;
-break;
-default:
-c=fromBase64(_53);
-break;
-}
-var _5c=c.length>>3;
-var pos=0;
-var o={};
-var _5f=(_57==dojo.crypto.cipherModes.CBC);
-var _60={left:iv.left||null,right:iv.right||null};
-for(var i=0;i<_5c;i++){
-o.left=c[pos]*_6|c[pos+1]*_5|c[pos+2]*_4|c[pos+3];
-o.right=c[pos+4]*_6|c[pos+5]*_5|c[pos+6]*_4|c[pos+7];
-if(_5f){
-var _61=o.left;
-var _62=o.right;
-}
-db(o,bx);
-if(_5f){
-o.left=xor(o.left,_60.left);
-o.right=xor(o.right,_60.right);
-_60.left=_61;
-_60.right=_62;
-}
-pt.push((o.left>>24)&255);
-pt.push((o.left>>16)&255);
-pt.push((o.left>>8)&255);
-pt.push(o.left&255);
-pt.push((o.right>>24)&255);
-pt.push((o.right>>16)&255);
-pt.push((o.right>>8)&255);
-pt.push(o.right&255);
-pos+=8;
-}
-if(pt[pt.length-1]==pt[pt.length-2]||pt[pt.length-1]==1){
-var n=pt[pt.length-1];
-pt.splice(pt.length-n,n);
-}
-for(var i=0;i<pt.length;i++){
-pt[i]=String.fromCharCode(pt[i]);
-}
-return pt.join("");
-};
-this.setIV("0000000000000000",dojo.crypto.outputTypes.Hex);
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/LICENSE b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/LICENSE
deleted file mode 100644
index 36ccb77..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/LICENSE
+++ /dev/null
@@ -1,11 +0,0 @@
-License Disclaimer:
-
-All contents of this directory are Copyright (c) the Dojo Foundation, with the
-following exceptions:
--------------------------------------------------------------------------------
-
-MD5.js, SHA1.js:
-	* Copyright 1998-2005, Paul Johnstone
-	  Distributed under the terms of the BSD License
-
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/MD5.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/MD5.js
deleted file mode 100644
index ce4ace0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/MD5.js
+++ /dev/null
@@ -1,185 +0,0 @@
-dojo.require("dojo.crypto");
-dojo.provide("dojo.crypto.MD5");
-dojo.crypto.MD5=new function(){
-var _1=8;
-var _2=(1<<_1)-1;
-function toWord(s){
-var wa=[];
-for(var i=0;i<s.length*_1;i+=_1){
-wa[i>>5]|=(s.charCodeAt(i/_1)&_2)<<(i%32);
-}
-return wa;
-}
-function toString(wa){
-var s=[];
-for(var i=0;i<wa.length*32;i+=_1){
-s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&_2));
-}
-return s.join("");
-}
-function toHex(wa){
-var h="0123456789abcdef";
-var s=[];
-for(var i=0;i<wa.length*4;i++){
-s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&15)+h.charAt((wa[i>>2]>>((i%4)*8))&15));
-}
-return s.join("");
-}
-function toBase64(wa){
-var p="=";
-var _f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-var s=[];
-for(var i=0;i<wa.length*4;i+=3){
-var t=(((wa[i>>2]>>8*(i%4))&255)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&255)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&255);
-for(var j=0;j<4;j++){
-if(i*8+j*6>wa.length*32){
-s.push(p);
-}else{
-s.push(_f.charAt((t>>6*(3-j))&63));
-}
-}
-}
-return s.join("");
-}
-function add(x,y){
-var l=(x&65535)+(y&65535);
-var m=(x>>16)+(y>>16)+(l>>16);
-return (m<<16)|(l&65535);
-}
-function R(n,c){
-return (n<<c)|(n>>>(32-c));
-}
-function C(q,a,b,x,s,t){
-return add(R(add(add(a,q),add(x,t)),s),b);
-}
-function FF(a,b,c,d,x,s,t){
-return C((b&c)|((~b)&d),a,b,x,s,t);
-}
-function GG(a,b,c,d,x,s,t){
-return C((b&d)|(c&(~d)),a,b,x,s,t);
-}
-function HH(a,b,c,d,x,s,t){
-return C(b^c^d,a,b,x,s,t);
-}
-function II(a,b,c,d,x,s,t){
-return C(c^(b|(~d)),a,b,x,s,t);
-}
-function core(x,len){
-x[len>>5]|=128<<((len)%32);
-x[(((len+64)>>>9)<<4)+14]=len;
-var a=1732584193;
-var b=-271733879;
-var c=-1732584194;
-var d=271733878;
-for(var i=0;i<x.length;i+=16){
-var _43=a;
-var _44=b;
-var _45=c;
-var _46=d;
-a=FF(a,b,c,d,x[i+0],7,-680876936);
-d=FF(d,a,b,c,x[i+1],12,-389564586);
-c=FF(c,d,a,b,x[i+2],17,606105819);
-b=FF(b,c,d,a,x[i+3],22,-1044525330);
-a=FF(a,b,c,d,x[i+4],7,-176418897);
-d=FF(d,a,b,c,x[i+5],12,1200080426);
-c=FF(c,d,a,b,x[i+6],17,-1473231341);
-b=FF(b,c,d,a,x[i+7],22,-45705983);
-a=FF(a,b,c,d,x[i+8],7,1770035416);
-d=FF(d,a,b,c,x[i+9],12,-1958414417);
-c=FF(c,d,a,b,x[i+10],17,-42063);
-b=FF(b,c,d,a,x[i+11],22,-1990404162);
-a=FF(a,b,c,d,x[i+12],7,1804603682);
-d=FF(d,a,b,c,x[i+13],12,-40341101);
-c=FF(c,d,a,b,x[i+14],17,-1502002290);
-b=FF(b,c,d,a,x[i+15],22,1236535329);
-a=GG(a,b,c,d,x[i+1],5,-165796510);
-d=GG(d,a,b,c,x[i+6],9,-1069501632);
-c=GG(c,d,a,b,x[i+11],14,643717713);
-b=GG(b,c,d,a,x[i+0],20,-373897302);
-a=GG(a,b,c,d,x[i+5],5,-701558691);
-d=GG(d,a,b,c,x[i+10],9,38016083);
-c=GG(c,d,a,b,x[i+15],14,-660478335);
-b=GG(b,c,d,a,x[i+4],20,-405537848);
-a=GG(a,b,c,d,x[i+9],5,568446438);
-d=GG(d,a,b,c,x[i+14],9,-1019803690);
-c=GG(c,d,a,b,x[i+3],14,-187363961);
-b=GG(b,c,d,a,x[i+8],20,1163531501);
-a=GG(a,b,c,d,x[i+13],5,-1444681467);
-d=GG(d,a,b,c,x[i+2],9,-51403784);
-c=GG(c,d,a,b,x[i+7],14,1735328473);
-b=GG(b,c,d,a,x[i+12],20,-1926607734);
-a=HH(a,b,c,d,x[i+5],4,-378558);
-d=HH(d,a,b,c,x[i+8],11,-2022574463);
-c=HH(c,d,a,b,x[i+11],16,1839030562);
-b=HH(b,c,d,a,x[i+14],23,-35309556);
-a=HH(a,b,c,d,x[i+1],4,-1530992060);
-d=HH(d,a,b,c,x[i+4],11,1272893353);
-c=HH(c,d,a,b,x[i+7],16,-155497632);
-b=HH(b,c,d,a,x[i+10],23,-1094730640);
-a=HH(a,b,c,d,x[i+13],4,681279174);
-d=HH(d,a,b,c,x[i+0],11,-358537222);
-c=HH(c,d,a,b,x[i+3],16,-722521979);
-b=HH(b,c,d,a,x[i+6],23,76029189);
-a=HH(a,b,c,d,x[i+9],4,-640364487);
-d=HH(d,a,b,c,x[i+12],11,-421815835);
-c=HH(c,d,a,b,x[i+15],16,530742520);
-b=HH(b,c,d,a,x[i+2],23,-995338651);
-a=II(a,b,c,d,x[i+0],6,-198630844);
-d=II(d,a,b,c,x[i+7],10,1126891415);
-c=II(c,d,a,b,x[i+14],15,-1416354905);
-b=II(b,c,d,a,x[i+5],21,-57434055);
-a=II(a,b,c,d,x[i+12],6,1700485571);
-d=II(d,a,b,c,x[i+3],10,-1894986606);
-c=II(c,d,a,b,x[i+10],15,-1051523);
-b=II(b,c,d,a,x[i+1],21,-2054922799);
-a=II(a,b,c,d,x[i+8],6,1873313359);
-d=II(d,a,b,c,x[i+15],10,-30611744);
-c=II(c,d,a,b,x[i+6],15,-1560198380);
-b=II(b,c,d,a,x[i+13],21,1309151649);
-a=II(a,b,c,d,x[i+4],6,-145523070);
-d=II(d,a,b,c,x[i+11],10,-1120210379);
-c=II(c,d,a,b,x[i+2],15,718787259);
-b=II(b,c,d,a,x[i+9],21,-343485551);
-a=add(a,_43);
-b=add(b,_44);
-c=add(c,_45);
-d=add(d,_46);
-}
-return [a,b,c,d];
-}
-function hmac(_47,key){
-var wa=toWord(key);
-if(wa.length>16){
-wa=core(wa,key.length*_1);
-}
-var l=[],r=[];
-for(var i=0;i<16;i++){
-l[i]=wa[i]^909522486;
-r[i]=wa[i]^1549556828;
-}
-var h=core(l.concat(toWord(_47)),512+_47.length*_1);
-return core(r.concat(h),640);
-}
-this.compute=function(_4e,_4f){
-var out=_4f||dojo.crypto.outputTypes.Base64;
-switch(out){
-case dojo.crypto.outputTypes.Hex:
-return toHex(core(toWord(_4e),_4e.length*_1));
-case dojo.crypto.outputTypes.String:
-return toString(core(toWord(_4e),_4e.length*_1));
-default:
-return toBase64(core(toWord(_4e),_4e.length*_1));
-}
-};
-this.getHMAC=function(_51,key,_53){
-var out=_53||dojo.crypto.outputTypes.Base64;
-switch(out){
-case dojo.crypto.outputTypes.Hex:
-return toHex(hmac(_51,key));
-case dojo.crypto.outputTypes.String:
-return toString(hmac(_51,key));
-default:
-return toBase64(hmac(_51,key));
-}
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/Rijndael.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/Rijndael.js
deleted file mode 100644
index 1ac937c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/Rijndael.js
+++ /dev/null
@@ -1,10 +0,0 @@
-dojo.provide("dojo.crypto.Rijndael");
-dojo.require("dojo.crypto");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.crypto.Rijndael");
-dojo.crypto.Rijndael=new function(){
-this.encrypt=function(_1,_2){
-};
-this.decrypt=function(_3,_4){
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/SHA1.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/SHA1.js
deleted file mode 100644
index 5194dfd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/SHA1.js
+++ /dev/null
@@ -1,158 +0,0 @@
-dojo.require("dojo.crypto");
-dojo.provide("dojo.crypto.SHA1");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.crypto.SHA1");
-dojo.crypto.SHA1=new function(){
-var _1=8;
-var _2=(1<<_1)-1;
-function toWord(s){
-var wa=[];
-for(var i=0;i<s.length*_1;i+=_1){
-wa[i>>5]|=(s.charCodeAt(i/_1)&_2)<<(i%32);
-}
-return wa;
-}
-function toString(wa){
-var s=[];
-for(var i=0;i<wa.length*32;i+=_1){
-s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&_2));
-}
-return s.join("");
-}
-function toHex(wa){
-var h="0123456789abcdef";
-var s=[];
-for(var i=0;i<wa.length*4;i++){
-s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&15)+h.charAt((wa[i>>2]>>((i%4)*8))&15));
-}
-return s.join("");
-}
-function toBase64(wa){
-var p="=";
-var _f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-var s=[];
-for(var i=0;i<wa.length*4;i+=3){
-var t=(((wa[i>>2]>>8*(i%4))&255)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&255)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&255);
-for(var j=0;j<4;j++){
-if(i*8+j*6>wa.length*32){
-s.push(p);
-}else{
-s.push(_f.charAt((t>>6*(3-j))&63));
-}
-}
-}
-return s.join("");
-}
-function add(x,y){
-var l=(x&65535)+(y&65535);
-var m=(x>>16)+(y>>16)+(l>>16);
-return (m<<16)|(l&65535);
-}
-function r(x,n){
-return (x<<n)|(x>>>(32-n));
-}
-function f(u,v,w){
-return ((u&v)|(~u&w));
-}
-function g(u,v,w){
-return ((u&v)|(u&w)|(v&w));
-}
-function h(u,v,w){
-return (u^v^w);
-}
-function fn(i,u,v,w){
-if(i<20){
-return f(u,v,w);
-}
-if(i<40){
-return h(u,v,w);
-}
-if(i<60){
-return g(u,v,w);
-}
-return h(u,v,w);
-}
-function cnst(i){
-if(i<20){
-return 1518500249;
-}
-if(i<40){
-return 1859775393;
-}
-if(i<60){
-return -1894007588;
-}
-return -899497514;
-}
-function core(x,len){
-x[len>>5]|=128<<(24-len%32);
-x[((len+64>>9)<<4)+15]=len;
-var w=[];
-var a=1732584193;
-var b=-271733879;
-var c=-1732584194;
-var d=271733878;
-var e=-1009589776;
-for(var i=0;i<x.length;i+=16){
-var _31=a;
-var _32=b;
-var _33=c;
-var _34=d;
-var _35=e;
-for(var j=0;j<80;j++){
-if(j<16){
-w[j]=x[i+j];
-}else{
-w[j]=r(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);
-}
-var t=add(add(r(a,5),fn(j,b,c,d)),add(add(e,w[j]),cnst(j)));
-e=d;
-d=c;
-c=r(b,30);
-b=a;
-a=t;
-}
-a=add(a,_31);
-b=add(b,_32);
-c=add(c,_33);
-d=add(d,_34);
-e=add(e,_35);
-}
-return [a,b,c,d,e];
-}
-function hmac(_38,key){
-var wa=toWord(key);
-if(wa.length>16){
-wa=core(wa,key.length*_1);
-}
-var l=[],r=[];
-for(var i=0;i<16;i++){
-l[i]=wa[i]^909522486;
-r[i]=wa[i]^1549556828;
-}
-var h=core(l.concat(toWord(_38)),512+_38.length*_1);
-return core(r.concat(h),640);
-}
-this.compute=function(_3f,_40){
-var out=_40||dojo.crypto.outputTypes.Base64;
-switch(out){
-case dojo.crypto.outputTypes.Hex:
-return toHex(core(toWord(_3f),_3f.length*_1));
-case dojo.crypto.outputTypes.String:
-return toString(core(toWord(_3f),_3f.length*_1));
-default:
-return toBase64(core(toWord(_3f),_3f.length*_1));
-}
-};
-this.getHMAC=function(_42,key,_44){
-var out=_44||dojo.crypto.outputTypes.Base64;
-switch(out){
-case dojo.crypto.outputTypes.Hex:
-return toHex(hmac(_42,key));
-case dojo.crypto.outputTypes.String:
-return toString(hmac(_42,key));
-default:
-return toBase64(hmac(_42,key));
-}
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/SHA256.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/SHA256.js
deleted file mode 100644
index e616019..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/SHA256.js
+++ /dev/null
@@ -1,8 +0,0 @@
-dojo.provide("dojo.crypto.SHA256");
-dojo.require("dojo.crypto");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.crypto.SHA256");
-dojo.crypto.SHA256=new function(){
-this.compute=function(s){
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/__package__.js
deleted file mode 100644
index 456f49a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/crypto/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.crypto","dojo.crypto.MD5"]});
-dojo.provide("dojo.crypto.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data.js
deleted file mode 100644
index 6dc8cb7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.provide("dojo.data");
-dojo.data={};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/CsvStore.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/CsvStore.js
deleted file mode 100644
index 3bd2d42..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/CsvStore.js
+++ /dev/null
@@ -1,102 +0,0 @@
-dojo.provide("dojo.data.CsvStore");
-dojo.require("dojo.data.core.RemoteStore");
-dojo.require("dojo.lang.assert");
-dojo.declare("dojo.data.CsvStore",dojo.data.core.RemoteStore,{_setupQueryRequest:function(_1,_2){
-var _3=this._serverQueryUrl?this._serverQueryUrl:"";
-var _4=_1.query?_1.query:"";
-_2.url=_3+_4;
-_2.method="get";
-},_resultToQueryData:function(_5){
-var _6=_5;
-var _7=this._getArrayOfArraysFromCsvFileContents(_6);
-var _8=this._getArrayOfObjectsFromArrayOfArrays(_7);
-var _9=this._getRemoteStoreDataFromArrayOfObjects(_8);
-return _9;
-},_setupSaveRequest:function(_a,_b){
-},_getArrayOfArraysFromCsvFileContents:function(_c){
-dojo.lang.assertType(_c,String);
-var _d=new RegExp("\r\n|\n|\r");
-var _e=new RegExp("^\\s+","g");
-var _f=new RegExp("\\s+$","g");
-var _10=new RegExp("\"\"","g");
-var _11=[];
-var _12=_c.split(_d);
-for(var i in _12){
-var _14=_12[i];
-if(_14.length>0){
-var _15=_14.split(",");
-var j=0;
-while(j<_15.length){
-var _17=_15[j];
-var _18=_17.replace(_e,"");
-var _19=_18.replace(_f,"");
-var _1a=_19.charAt(0);
-var _1b=_19.charAt(_19.length-1);
-var _1c=_19.charAt(_19.length-2);
-var _1d=_19.charAt(_19.length-3);
-if((_1a=="\"")&&((_1b!="\"")||((_1b=="\"")&&(_1c=="\"")&&(_1d!="\"")))){
-if(j+1===_15.length){
-return null;
-}
-var _1e=_15[j+1];
-_15[j]=_18+","+_1e;
-_15.splice(j+1,1);
-}else{
-if((_1a=="\"")&&(_1b=="\"")){
-_19=_19.slice(1,(_19.length-1));
-_19=_19.replace(_10,"\"");
-}
-_15[j]=_19;
-j+=1;
-}
-}
-_11.push(_15);
-}
-}
-return _11;
-},_getArrayOfObjectsFromArrayOfArrays:function(_1f){
-dojo.lang.assertType(_1f,Array);
-var _20=[];
-if(_1f.length>1){
-var _21=_1f[0];
-for(var i=1;i<_1f.length;++i){
-var row=_1f[i];
-var _24={};
-for(var j in row){
-var _26=row[j];
-var key=_21[j];
-_24[key]=_26;
-}
-_20.push(_24);
-}
-}
-return _20;
-},_getRemoteStoreDataFromArrayOfObjects:function(_28){
-dojo.lang.assertType(_28,Array);
-var _29={};
-for(var i=0;i<_28.length;++i){
-var _2b=_28[i];
-for(var key in _2b){
-var _2d=_2b[key];
-_2b[key]=[_2d];
-}
-_29[i]=_2b;
-}
-return _29;
-},newItem:function(_2e,_2f){
-dojo.unimplemented("dojo.data.CsvStore.newItem");
-},deleteItem:function(_30){
-dojo.unimplemented("dojo.data.CsvStore.deleteItem");
-},setValues:function(_31,_32,_33){
-dojo.unimplemented("dojo.data.CsvStore.setValues");
-},set:function(_34,_35,_36){
-dojo.unimplemented("dojo.data.CsvStore.set");
-},unsetAttribute:function(_37,_38){
-dojo.unimplemented("dojo.data.CsvStore.unsetAttribute");
-},save:function(_39){
-dojo.unimplemented("dojo.data.CsvStore.save");
-},revert:function(){
-dojo.unimplemented("dojo.data.CsvStore.revert");
-},isDirty:function(_3a){
-dojo.unimplemented("dojo.data.CsvStore.isDirty");
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/OpmlStore.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/OpmlStore.js
deleted file mode 100644
index 45be0e7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/OpmlStore.js
+++ /dev/null
@@ -1,153 +0,0 @@
-dojo.provide("dojo.data.OpmlStore");
-dojo.require("dojo.data.core.Read");
-dojo.require("dojo.data.core.Result");
-dojo.require("dojo.lang.assert");
-dojo.require("dojo.json");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.data.OpmlStore");
-dojo.declare("dojo.data.OpmlStore",dojo.data.core.Read,{initializer:function(_1){
-this._arrayOfTopLevelItems=[];
-this._metadataNodes=null;
-this._loadFinished=false;
-this._opmlFileUrl=_1["url"];
-},_assertIsItem:function(_2){
-if(!this.isItem(_2)){
-throw new Error("dojo.data.OpmlStore: a function was passed an item argument that was not an item");
-}
-},_removeChildNodesThatAreNotElementNodes:function(_3,_4){
-var _5=_3.childNodes;
-if(_5.length==0){
-return;
-}
-var _6=[];
-var i,_8;
-for(i=0;i<_5.length;++i){
-_8=_5[i];
-if(_8.nodeType!=Node.ELEMENT_NODE){
-_6.push(_8);
-}
-}
-for(i=0;i<_6.length;++i){
-_8=_6[i];
-_3.removeChild(_8);
-}
-if(_4){
-for(i=0;i<_5.length;++i){
-_8=_5[i];
-this._removeChildNodesThatAreNotElementNodes(_8,_4);
-}
-}
-},_processRawXmlTree:function(_9){
-var _a=_9.getElementsByTagName("head");
-var _b=_a[0];
-this._removeChildNodesThatAreNotElementNodes(_b);
-this._metadataNodes=_b.childNodes;
-var _c=_9.getElementsByTagName("body");
-var _d=_c[0];
-this._removeChildNodesThatAreNotElementNodes(_d,true);
-var _e=_c[0].childNodes;
-for(var i=0;i<_e.length;++i){
-var _10=_e[i];
-if(_10.tagName=="outline"){
-this._arrayOfTopLevelItems.push(_10);
-}
-}
-},get:function(_11,_12,_13){
-this._assertIsItem(_11);
-if(_12=="children"){
-return (_11.firstChild||_13);
-}else{
-var _14=_11.getAttribute(_12);
-_14=(_14!=undefined)?_14:_13;
-return _14;
-}
-},getValues:function(_15,_16){
-this._assertIsItem(_15);
-if(_16=="children"){
-var _17=[];
-for(var i=0;i<_15.childNodes.length;++i){
-_17.push(_15.childNodes[i]);
-}
-return _17;
-}else{
-return [_15.getAttribute(_16)];
-}
-},getAttributes:function(_19){
-this._assertIsItem(_19);
-var _1a=[];
-var _1b=_19;
-var _1c=_1b.attributes;
-for(var i=0;i<_1c.length;++i){
-var _1e=_1c.item(i);
-_1a.push(_1e.nodeName);
-}
-if(_1b.childNodes.length>0){
-_1a.push("children");
-}
-return _1a;
-},hasAttribute:function(_1f,_20){
-return (this.getValues(_1f,_20).length>0);
-},containsValue:function(_21,_22,_23){
-var _24=this.getValues(_21,_22);
-for(var i=0;i<_24.length;++i){
-var _26=_24[i];
-if(_23==_26){
-return true;
-}
-}
-return false;
-},isItem:function(_27){
-return (_27&&_27.nodeType==Node.ELEMENT_NODE&&_27.tagName=="outline");
-},isItemAvailable:function(_28){
-return this.isItem(_28);
-},find:function(_29){
-var _2a=null;
-if(_29 instanceof dojo.data.core.Result){
-_2a=_29;
-_2a.store=this;
-}else{
-_2a=new dojo.data.core.Result(_29,this);
-}
-var _2b=this;
-var _2c=function(_2d,_2e,evt){
-var _30=_2a.scope||dj_global;
-if(_2d=="load"){
-_2b._processRawXmlTree(_2e);
-if(_2a.saveResult){
-_2a.items=_2b._arrayOfTopLevelItems;
-}
-if(_2a.onbegin){
-_2a.onbegin.call(_30,_2a);
-}
-for(var i=0;i<_2b._arrayOfTopLevelItems.length;i++){
-var _32=_2b._arrayOfTopLevelItems[i];
-if(_2a.onnext&&!_2a._aborted){
-_2a.onnext.call(_30,_32,_2a);
-}
-}
-if(_2a.oncompleted&&!_2a._aborted){
-_2a.oncompleted.call(_30,_2a);
-}
-}else{
-if(_2d=="error"||_2d=="timeout"){
-var _33=_2e;
-if(_2a.onerror){
-_2a.onerror.call(_30,_2e);
-}
-}
-}
-};
-if(!this._loadFinished){
-if(this._opmlFileUrl){
-var _34=dojo.io.bind({url:this._opmlFileUrl,handle:_2c,mimetype:"text/xml",sync:(_2a.sync||false)});
-_2a._abortFunc=_34.abort;
-}
-}
-return _2a;
-},getIdentity:function(_35){
-dojo.unimplemented("dojo.data.OpmlStore.getIdentity()");
-return null;
-},findByIdentity:function(_36){
-dojo.unimplemented("dojo.data.OpmlStore.findByIdentity()");
-return null;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/RdfStore.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/RdfStore.js
deleted file mode 100644
index 68be8a6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/RdfStore.js
+++ /dev/null
@@ -1,172 +0,0 @@
-dojo.provide("dojo.data.RdfStore");
-dojo.provide("dojo.data.RhizomeStore");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.data.core.RemoteStore");
-dojo.require("dojo.experimental");
-dojo.data.RdfDatatypeSerializer=function(_1,_2,_3){
-this.type=_1;
-this._converter=_2;
-this.uri=_3;
-this.serialize=function(_4){
-return this._converter.call(_4,_4);
-};
-};
-dojo.declare("dojo.data.RdfStore",dojo.data.core.RemoteStore,{_datatypeMap:{literal:function(_5){
-var _6=_5.value;
-if(_5["xml:lang"]){
-_6.lang=_5["xml:lang"];
-}
-return _6;
-},uri:function(_7){
-return {id:_7.value};
-},bnode:function(_8){
-return {id:"_:"+_8.value};
-},"http://www.w3.org/2001/XMLSchema#int":function(_9){
-return parseInt(_9.value);
-},"http://www.w3.org/2001/XMLSchema#integer":function(_a){
-return parseInt(_a.value);
-},"http://www.w3.org/2001/XMLSchema#long":function(_b){
-return parseInt(_b.value);
-},"http://www.w3.org/2001/XMLSchema#float":function(_c){
-return parseFloat(_c.value);
-},"http://www.w3.org/2001/XMLSchema#double":function(_d){
-return parseFloat(_d.value);
-},"http://www.w3.org/2001/XMLSchema#boolean":function(_e){
-return !_e||_e=="false"||_e=="0"?false:true;
-}},_datatypeSerializers:[new dojo.data.RdfDatatypeSerializer(Number,Number.toString,"http://www.w3.org/2001/XMLSchema#float"),new dojo.data.RdfDatatypeSerializer(Boolean,Boolean.toString,"http://www.w3.org/2001/XMLSchema#boolean")],_findDatatypeSerializer:function(_f){
-var _10=this._datatypeSerializers.length;
-for(var i=0;i<_10;i++){
-var _12=this._datatypeSerializers[i];
-if(_f instanceof _12.type){
-return _12;
-}
-}
-},_toRDFValue:function(_13){
-var _14={};
-if(_13.id){
-if(_13.id.slice(0,2)=="_:"){
-_14.type="bnode";
-_14.value=_13.id.substring(2);
-}else{
-_14.type="uri";
-_14.value=_13.id;
-}
-}else{
-if(typeof _13=="string"||_13 instanceof String){
-_14.type="literal";
-_14.value=_13;
-if(_13.lang){
-_14["xml:lang"]=_13.lang;
-}
-}else{
-if(typeof _13=="number"){
-_13=new Number(_13);
-}else{
-if(typeof _13=="boolean"){
-_13=new Boolean(_13);
-}
-}
-var _15=this._findDatatypeSerializer(_13);
-if(_15){
-_14={"type":"typed-literal","datatype":_15.uri,"value":_13.toString()};
-}else{
-_14={"type":"literal","value":_13.toString()};
-}
-}
-}
-return _14;
-},_setupSaveRequest:function(_16,_17){
-var _18={"head":{"vars":["s","p","o"]},"results":{"bindings":[]}};
-var _19=[];
-for(var key in this._deleted){
-_19.push(key);
-}
-_18.results.deleted=_19;
-for(key in this._changed){
-var _1b=this._toRDFValue(this.getIdentity(key));
-var _1c=this._changed[key];
-for(var _1d in _1c){
-var _1e={type:"uri",value:_1d};
-var _1f=_1c[_1d];
-if(!_1f.length){
-continue;
-}
-var _20=[];
-for(var i=0;i<_1f.length;i++){
-var _22=this._toRDFValue(_1f[i]);
-_18.results.bindings.push({s:_1b,p:_1e,o:_22});
-}
-}
-}
-var _23=dojo.json.jsonRegistry;
-dojo.json.jsonRegistry=this._jsonRegistry;
-var _24=dojo.json.serialize(_18);
-dojo.json.jsonRegistry=_23;
-_17.postContent=_24;
-},_resultToQueryMetadata:function(_25){
-return _25.head;
-},_resultToQueryData:function(_26){
-var _27={};
-var _28=_26.results.bindings;
-for(var i=0;i<_28.length;i++){
-var _2a=_28[i];
-var _2b=_2a.s.value;
-if(_2a.s.type=="bnode"){
-_2b="_:"+_2b;
-}
-var _2c=data[_2b];
-if(!_2c){
-_2c={};
-data[_2a.s]=_2c;
-}
-var _2d=_2c[_2a.p.value];
-if(!_2d){
-_2c[_2a.p.value]=[_2a.o];
-}else{
-_2d.push(_2a.o);
-}
-}
-return _27;
-}});
-dojo.declare("dojo.data.RhizomeStore",dojo.data.RdfStore,{initializer:function(_2e){
-this._serverQueryUrl=_2e.baseUrl+"search?view=json&searchType=RxPath&search=";
-this._serverSaveUrl=_2e.baseUrl+"save-metadata";
-},_resultToQueryMetadata:function(_2f){
-return _2f;
-},_resultToQueryData:function(_30){
-return _30;
-},_setupSaveRequest:function(_31,_32){
-_32.url=this._serverSaveUrl;
-_32.method="post";
-_32.mimetype="text/plain";
-var _33=[];
-for(var key in this._deleted){
-_33.push(key);
-}
-var _35={};
-for(key in this._changed){
-if(!this._added[key]){
-_33.push(key);
-}
-var _36=this._changed[key];
-var _37={};
-for(var _38 in _36){
-var _39=_36[_38];
-if(!_39.length){
-continue;
-}
-var _3a=[];
-for(var i=0;i<_39.length;i++){
-var _3c=this._toRDFValue(_39[i]);
-_3a.push(_3c);
-}
-_37[_38]=_3a;
-}
-_35[key]=_37;
-}
-var _3d=dojo.json.jsonRegistry;
-dojo.json.jsonRegistry=this._jsonRegistry;
-var _3e=dojo.json.serialize(_35);
-dojo.json.jsonRegistry=_3d;
-_32.content={rdfFormat:"json",resource:_33,metadata:_3e};
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/YahooStore.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/YahooStore.js
deleted file mode 100644
index 278da1a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/YahooStore.js
+++ /dev/null
@@ -1,31 +0,0 @@
-dojo.provide("dojo.data.YahooStore");
-dojo.require("dojo.data.core.RemoteStore");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.io.ScriptSrcIO");
-dojo.declare("dojo.data.YahooStore",dojo.data.core.RemoteStore,{_setupQueryRequest:function(_1,_2){
-var _3=1;
-var _4=1;
-if(_1){
-_3=_1.start||_3;
-_4=_1.count||_4;
-}
-var _5="http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=dojo&language=en&query="+_1.query+"&start="+_3+"&results="+_4+"&output=json";
-_2.url=_5;
-_2.transport="ScriptSrcTransport";
-_2.mimetype="text/json";
-_2.jsonParamName="callback";
-},_resultToQueryMetadata:function(_6){
-return _6.ResultSet;
-},_resultToQueryData:function(_7){
-var _8={};
-for(var i=0;i<_7.ResultSet.totalResultsReturned;++i){
-var _a=_7.ResultSet.Result[i];
-var _b={};
-_b["Url"]=[_a.Url];
-_b["Title"]=[_a.Title];
-_b["Summary"]=[_a.Summary];
-var _c=(_7.ResultSet.firstResultPosition-1)+i;
-_8[_c.toString()]=_b;
-}
-return _8;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/Read.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/Read.js
deleted file mode 100644
index 62fb9d5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/Read.js
+++ /dev/null
@@ -1,42 +0,0 @@
-dojo.provide("dojo.data.core.Read");
-dojo.require("dojo.data.core.Result");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.data.core.Read");
-dojo.declare("dojo.data.core.Read",null,{get:function(_1,_2,_3){
-dojo.unimplemented("dojo.data.core.Read.get");
-var _4=null;
-return _4;
-},getValues:function(_5,_6){
-dojo.unimplemented("dojo.data.core.Read.getValues");
-var _7=null;
-return _7;
-},getAttributes:function(_8){
-dojo.unimplemented("dojo.data.core.Read.getAttributes");
-var _9=null;
-return _9;
-},hasAttribute:function(_a,_b){
-dojo.unimplemented("dojo.data.core.Read.hasAttribute");
-return false;
-},containsValue:function(_c,_d,_e){
-dojo.unimplemented("dojo.data.core.Read.containsValue");
-return false;
-},isItem:function(_f){
-dojo.unimplemented("dojo.data.core.Read.isItem");
-return false;
-},isItemAvailable:function(_10){
-dojo.unimplemented("dojo.data.core.Read.isItemAvailable");
-return false;
-},find:function(_11){
-dojo.unimplemented("dojo.data.core.Read.find");
-var _12=null;
-return _12;
-},getIdentity:function(_13){
-dojo.unimplemented("dojo.data.core.Read.getIdentity");
-var _14=null;
-return _14;
-},findByIdentity:function(_15){
-dojo.unimplemented("dojo.data.core.Read.getByIdentity");
-var _16=null;
-return _16;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/RemoteStore.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/RemoteStore.js
deleted file mode 100644
index c3ffdda..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/RemoteStore.js
+++ /dev/null
@@ -1,341 +0,0 @@
-dojo.provide("dojo.data.core.RemoteStore");
-dojo.require("dojo.data.core.Read");
-dojo.require("dojo.data.core.Write");
-dojo.require("dojo.data.core.Result");
-dojo.require("dojo.experimental");
-dojo.require("dojo.Deferred");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.json");
-dojo.require("dojo.io.*");
-dojo.experimental("dojo.data.core.RemoteStore");
-dojo.lang.declare("dojo.data.core.RemoteStore",[dojo.data.core.Read,dojo.data.core.Write],{_datatypeMap:{},_jsonRegistry:dojo.json.jsonRegistry,initializer:function(_1){
-if(!_1){
-_1={};
-}
-this._serverQueryUrl=_1.queryUrl||"";
-this._serverSaveUrl=_1.saveUrl||"";
-this._deleted={};
-this._changed={};
-this._added={};
-this._results={};
-this._data={};
-this._numItems=0;
-},_setupQueryRequest:function(_2,_3){
-_2.query=_2.query||"";
-_3.url=this._serverQueryUrl+encodeURIComponent(_2.query);
-_3.method="get";
-_3.mimetype="text/json";
-},_resultToQueryMetadata:function(_4){
-return _4;
-},_resultToQueryData:function(_5){
-return _5.data;
-},_remoteToLocalValues:function(_6){
-for(var _7 in _6){
-var _8=_6[_7];
-for(var i=0;i<_8.length;i++){
-var _a=_8[i];
-var _b=_a.datatype||_a.type;
-if(_b){
-var _c=_a.value;
-if(this._datatypeMap[_b]){
-_c=this._datatypeMap[_b](_a);
-}
-_8[i]=_c;
-}
-}
-}
-return _6;
-},_queryToQueryKey:function(_d){
-if(typeof _d=="string"){
-return _d;
-}else{
-return dojo.json.serialize(_d);
-}
-},_assertIsItem:function(_e){
-if(!this.isItem(_e)){
-throw new Error("dojo.data.RemoteStore: a function was passed an item argument that was not an item");
-}
-},get:function(_f,_10,_11){
-var _12=this.getValues(_f,_10);
-if(_12.length==0){
-return _11;
-}
-return _12[0];
-},getValues:function(_13,_14){
-var _15=this.getIdentity(_13);
-this._assertIsItem(_15);
-var _16=this._changed[_15];
-if(_16){
-var _17=_16[_14];
-if(_17!==undefined){
-return _17;
-}else{
-return [];
-}
-}
-return this._data[_15][0][_14];
-},getAttributes:function(_18){
-var _19=this.getIdentity(_18);
-if(!_19){
-return undefined;
-}
-var _1a=[];
-var _1b=this._data[_19][0];
-for(var att in _1b){
-_1a.push(att);
-}
-return _1a;
-},hasAttribute:function(_1d,_1e){
-var _1f=this.getValues(_1d,_1e);
-return _1f.length?true:false;
-},containsValue:function(_20,_21,_22){
-var _23=this.getValues(_20,_21);
-for(var i=0;i<_23.length;i++){
-if(_23[i]==_22){
-return true;
-}
-}
-return false;
-},isItem:function(_25){
-if(!_25){
-return false;
-}
-var _26=_25;
-if(this._deleted[_26]){
-return false;
-}
-if(this._data[_26]){
-return true;
-}
-if(this._added[_26]){
-return true;
-}
-return false;
-},find:function(_27){
-var _28=null;
-if(_27 instanceof dojo.data.core.Result){
-_28=_27;
-_28.store=this;
-}else{
-_28=new dojo.data.core.Result(_27,this);
-}
-var _29=_28.query;
-var _2a=this;
-var _2b=function(_2c,_2d,evt){
-var _2f=_28.scope||dj_global;
-if(_2c=="load"){
-_28.resultMetadata=_2a._resultToQueryMetadata(_2d);
-var _30=_2a._resultToQueryData(_2d);
-if(_28.onbegin){
-_28.onbegin.call(_2f,_28);
-}
-var _31=0;
-var _32=[];
-var _33=0;
-for(var key in _30){
-if(_28._aborted){
-break;
-}
-if(!_2a._deleted[key]){
-var _35=_30[key];
-var _36=_2a._remoteToLocalValues(_35);
-var _37=_2a._data[key];
-var _38=1;
-if(_37){
-_38=++_37[1];
-}else{
-_33++;
-}
-_2a._data[key]=[_36,_38];
-_32.push(key);
-_31++;
-if(_28.onnext){
-_28.onnext.call(_2f,key,_28);
-}
-}
-}
-_2a._results[_2a._queryToQueryKey(_29)]=_32;
-_2a._numItems+=_33;
-_28.length=_31;
-if(_28.saveResult){
-_28.items=_32;
-}
-if(!_28._aborted&&_28.oncompleted){
-_28.oncompleted.call(_2f,_28);
-}
-}else{
-if(_2c=="error"||_2c=="timeout"){
-dojo.debug("find error: "+dojo.json.serialize(_2d));
-if(_28.onerror){
-_28.onerror.call(_2f,_2d);
-}
-}
-}
-};
-var _39=_27.bindArgs||{};
-_39.sync=_28.sync;
-_39.handle=_2b;
-this._setupQueryRequest(_28,_39);
-var _3a=dojo.io.bind(_39);
-_28._abortFunc=_3a.abort;
-return _28;
-},getIdentity:function(_3b){
-if(!this.isItem(_3b)){
-return null;
-}
-return (_3b.id?_3b.id:_3b);
-},newItem:function(_3c,_3d){
-var _3e=_3d["identity"];
-if(this._deleted[_3e]){
-delete this._deleted[_3e];
-}else{
-this._added[_3e]=1;
-}
-if(_3c){
-for(var _3f in _3c){
-var _40=_3c[_3f];
-if(dojo.lang.isArray(_40)){
-this.setValues(_3e,_3f,_40);
-}else{
-this.set(_3e,_3f,_40);
-}
-}
-}
-return {id:_3e};
-},deleteItem:function(_41){
-var _42=this.getIdentity(_41);
-if(!_42){
-return false;
-}
-if(this._added[_42]){
-delete this._added[_42];
-}else{
-this._deleted[_42]=1;
-}
-if(this._changed[_42]){
-delete this._changed[_42];
-}
-return true;
-},setValues:function(_43,_44,_45){
-var _46=this.getIdentity(_43);
-if(!_46){
-return undefined;
-}
-var _47=this._changed[_46];
-if(!_47){
-_47={};
-this._changed[_46]=_47;
-}
-_47[_44]=_45;
-return true;
-},set:function(_48,_49,_4a){
-return this.setValues(_48,_49,[_4a]);
-},unsetAttribute:function(_4b,_4c){
-return this.setValues(_4b,_4c,[]);
-},_initChanges:function(){
-this._deleted={};
-this._changed={};
-this._added={};
-},_setupSaveRequest:function(_4d,_4e){
-_4e.url=this._serverSaveUrl;
-_4e.method="post";
-_4e.mimetype="text/plain";
-var _4f=[];
-for(var key in this._deleted){
-_4f.push(key);
-}
-var _51={"changed":this._changed,"deleted":_4f};
-var _52=dojo.json.jsonRegistry;
-dojo.json.jsonRegistry=this._jsonRegistry;
-var _53=dojo.json.serialize(_51);
-dojo.json.jsonRegistry=_52;
-_4e.postContent=_53;
-},save:function(_54){
-_54=_54||{};
-var _55=new dojo.Deferred();
-var _56=this;
-var _57=function(_58,_59,evt){
-if(_58=="load"){
-if(_55.fired==1){
-return;
-}
-var key=null;
-for(key in _56._added){
-if(!_56._data[key]){
-_56._data[key]=[{},1];
-}
-}
-for(key in _56._changed){
-var _5c=_56._data[key];
-var _5d=_56._changed[key];
-if(_5c){
-_5c[0]=_5d;
-}else{
-_56._data[key]=[_5d,1];
-}
-}
-for(key in _56._deleted){
-if(_56._data[key]){
-delete _56._data[key];
-}
-}
-_56._initChanges();
-_55.callback(true);
-}else{
-if(_58=="error"||_58=="timeout"){
-_55.errback(_59);
-}
-}
-};
-var _5e={sync:_54["sync"],handle:_57};
-this._setupSaveRequest(_54,_5e);
-var _5f=dojo.io.bind(_5e);
-_55.canceller=function(_60){
-_5f.abort();
-};
-return _55;
-},revert:function(){
-this._initChanges();
-return true;
-},isDirty:function(_61){
-if(_61){
-var _62=_61.id||_61;
-return this._deleted[_62]||this._changed[_62];
-}else{
-var key=null;
-for(key in this._changed){
-return true;
-}
-for(key in this._deleted){
-return true;
-}
-for(key in this._added){
-return true;
-}
-return false;
-}
-},createReference:function(_64){
-return {id:_64};
-},getSize:function(){
-return this._numItems;
-},forgetResults:function(_65){
-var _66=this._queryToQueryKey(_65);
-var _67=this._results[_66];
-if(!_67){
-return false;
-}
-var _68=0;
-for(var i=0;i<_67.length;i++){
-var key=_67[i];
-var _6b=this._data[key];
-if(_6b[1]<=1){
-delete this._data[key];
-_68++;
-}else{
-_6b[1]=--_6b[1];
-}
-}
-delete this._results[_66];
-this._numItems-=_68;
-return true;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/Result.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/Result.js
deleted file mode 100644
index 4ac16d0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/Result.js
+++ /dev/null
@@ -1,23 +0,0 @@
-dojo.provide("dojo.data.core.Result");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.data.core.Result");
-dojo.declare("dojo.data.core.Result",null,{initializer:function(_1,_2){
-this.fromKwArgs(_1||{});
-this.items=null;
-this.resultMetadata=null;
-this.length=-1;
-this.store=_2;
-this._aborted=false;
-this._abortFunc=null;
-},sync:true,abort:function(){
-this._aborted=true;
-if(this._abortFunc){
-this._abortFunc();
-}
-},fromKwArgs:function(_3){
-if(typeof _3.saveResult=="undefined"){
-this.saveResult=_3.onnext?false:true;
-}
-dojo.lang.mixin(this,_3);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/Write.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/Write.js
deleted file mode 100644
index 571cadb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/core/Write.js
+++ /dev/null
@@ -1,31 +0,0 @@
-dojo.provide("dojo.data.core.Write");
-dojo.require("dojo.data.core.Read");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.data.core.Write");
-dojo.declare("dojo.data.core.Write",dojo.data.core.Read,{newItem:function(_1){
-var _2;
-dojo.unimplemented("dojo.data.core.Write.newItem");
-return _2;
-},deleteItem:function(_3){
-dojo.unimplemented("dojo.data.core.Write.deleteItem");
-return false;
-},set:function(_4,_5,_6){
-dojo.unimplemented("dojo.data.core.Write.set");
-return false;
-},setValues:function(_7,_8,_9){
-dojo.unimplemented("dojo.data.core.Write.setValues");
-return false;
-},unsetAttribute:function(_a,_b){
-dojo.unimplemented("dojo.data.core.Write.clear");
-return false;
-},save:function(){
-dojo.unimplemented("dojo.data.core.Write.save");
-return false;
-},revert:function(){
-dojo.unimplemented("dojo.data.core.Write.revert");
-return false;
-},isDirty:function(_c){
-dojo.unimplemented("dojo.data.core.Write.isDirty");
-return false;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Attribute.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Attribute.js
deleted file mode 100644
index e62b469..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Attribute.js
+++ /dev/null
@@ -1,22 +0,0 @@
-dojo.provide("dojo.data.old.Attribute");
-dojo.require("dojo.data.old.Item");
-dojo.require("dojo.lang.assert");
-dojo.data.old.Attribute=function(_1,_2){
-dojo.lang.assertType(_1,dojo.data.old.provider.Base,{optional:true});
-dojo.lang.assertType(_2,String);
-dojo.data.old.Item.call(this,_1);
-this._attributeId=_2;
-};
-dojo.inherits(dojo.data.old.Attribute,dojo.data.old.Item);
-dojo.data.old.Attribute.prototype.toString=function(){
-return this._attributeId;
-};
-dojo.data.old.Attribute.prototype.getAttributeId=function(){
-return this._attributeId;
-};
-dojo.data.old.Attribute.prototype.getType=function(){
-return this.get("type");
-};
-dojo.data.old.Attribute.prototype.setType=function(_3){
-this.set("type",_3);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Item.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Item.js
deleted file mode 100644
index 031d34f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Item.js
+++ /dev/null
@@ -1,210 +0,0 @@
-dojo.provide("dojo.data.old.Item");
-dojo.require("dojo.data.old.Observable");
-dojo.require("dojo.data.old.Value");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.assert");
-dojo.data.old.Item=function(_1){
-dojo.lang.assertType(_1,dojo.data.old.provider.Base,{optional:true});
-dojo.data.old.Observable.call(this);
-this._dataProvider=_1;
-this._dictionaryOfAttributeValues={};
-};
-dojo.inherits(dojo.data.old.Item,dojo.data.old.Observable);
-dojo.data.old.Item.compare=function(_2,_3){
-dojo.lang.assertType(_2,dojo.data.old.Item);
-if(!dojo.lang.isOfType(_3,dojo.data.old.Item)){
-return -1;
-}
-var _4=_2.getName();
-var _5=_3.getName();
-if(_4==_5){
-var _6=_2.getAttributes();
-var _7=_3.getAttributes();
-if(_6.length!=_7.length){
-if(_6.length>_7.length){
-return 1;
-}else{
-return -1;
-}
-}
-for(var i in _6){
-var _9=_6[i];
-var _a=_2.getValues(_9);
-var _b=_3.getValues(_9);
-dojo.lang.assert(_a&&(_a.length>0));
-if(!_b){
-return 1;
-}
-if(_a.length!=_b.length){
-if(_a.length>_b.length){
-return 1;
-}else{
-return -1;
-}
-}
-for(var j in _a){
-var _d=_a[j];
-if(!_3.hasAttributeValue(_d)){
-return 1;
-}
-}
-return 0;
-}
-}else{
-if(_4>_5){
-return 1;
-}else{
-return -1;
-}
-}
-};
-dojo.data.old.Item.prototype.toString=function(){
-var _e=[];
-var _f=this.getAttributes();
-for(var i in _f){
-var _11=_f[i];
-var _12=this.getValues(_11);
-var _13;
-if(_12.length==1){
-_13=_12[0];
-}else{
-_13="[";
-_13+=_12.join(", ");
-_13+="]";
-}
-_e.push("  "+_11+": "+_13);
-}
-var _14="{ ";
-_14+=_e.join(",\n");
-_14+=" }";
-return _14;
-};
-dojo.data.old.Item.prototype.compare=function(_15){
-return dojo.data.old.Item.compare(this,_15);
-};
-dojo.data.old.Item.prototype.isEqual=function(_16){
-return (this.compare(_16)==0);
-};
-dojo.data.old.Item.prototype.getName=function(){
-return this.get("name");
-};
-dojo.data.old.Item.prototype.get=function(_17){
-var _18=this._dictionaryOfAttributeValues[_17];
-if(dojo.lang.isUndefined(_18)){
-return null;
-}
-if(_18 instanceof dojo.data.old.Value){
-return _18.getValue();
-}
-if(dojo.lang.isArray(_18)){
-var _19=_18[0];
-return _19.getValue();
-}
-return _18;
-};
-dojo.data.old.Item.prototype.getValue=function(_1a){
-var _1b=this._dictionaryOfAttributeValues[_1a];
-if(dojo.lang.isUndefined(_1b)){
-return null;
-}
-if(_1b instanceof dojo.data.old.Value){
-return _1b;
-}
-if(dojo.lang.isArray(_1b)){
-var _1c=_1b[0];
-return _1c;
-}
-var _1d=_1b;
-_1c=new dojo.data.old.Value(_1d);
-this._dictionaryOfAttributeValues[_1a]=_1c;
-return _1c;
-};
-dojo.data.old.Item.prototype.getValues=function(_1e){
-var _1f=this._dictionaryOfAttributeValues[_1e];
-if(dojo.lang.isUndefined(_1f)){
-return null;
-}
-if(_1f instanceof dojo.data.old.Value){
-var _20=[_1f];
-this._dictionaryOfAttributeValues[_1e]=_20;
-return _20;
-}
-if(dojo.lang.isArray(_1f)){
-return _1f;
-}
-var _21=_1f;
-var _22=new dojo.data.old.Value(_21);
-_20=[_22];
-this._dictionaryOfAttributeValues[_1e]=_20;
-return _20;
-};
-dojo.data.old.Item.prototype.load=function(_23,_24){
-this._dataProvider.registerAttribute(_23);
-var _25=this._dictionaryOfAttributeValues[_23];
-if(dojo.lang.isUndefined(_25)){
-this._dictionaryOfAttributeValues[_23]=_24;
-return;
-}
-if(!(_24 instanceof dojo.data.old.Value)){
-_24=new dojo.data.old.Value(_24);
-}
-if(_25 instanceof dojo.data.old.Value){
-var _26=[_25,_24];
-this._dictionaryOfAttributeValues[_23]=_26;
-return;
-}
-if(dojo.lang.isArray(_25)){
-_25.push(_24);
-return;
-}
-var _27=_25;
-var _28=new dojo.data.old.Value(_27);
-_26=[_28,_24];
-this._dictionaryOfAttributeValues[_23]=_26;
-};
-dojo.data.old.Item.prototype.set=function(_29,_2a){
-this._dataProvider.registerAttribute(_29);
-this._dictionaryOfAttributeValues[_29]=_2a;
-this._dataProvider.noteChange(this,_29,_2a);
-};
-dojo.data.old.Item.prototype.setValue=function(_2b,_2c){
-this.set(_2b,_2c);
-};
-dojo.data.old.Item.prototype.addValue=function(_2d,_2e){
-this.load(_2d,_2e);
-this._dataProvider.noteChange(this,_2d,_2e);
-};
-dojo.data.old.Item.prototype.setValues=function(_2f,_30){
-dojo.lang.assertType(_30,Array);
-this._dataProvider.registerAttribute(_2f);
-var _31=[];
-this._dictionaryOfAttributeValues[_2f]=_31;
-for(var i in _30){
-var _33=_30[i];
-if(!(_33 instanceof dojo.data.old.Value)){
-_33=new dojo.data.old.Value(_33);
-}
-_31.push(_33);
-this._dataProvider.noteChange(this,_2f,_33);
-}
-};
-dojo.data.old.Item.prototype.getAttributes=function(){
-var _34=[];
-for(var key in this._dictionaryOfAttributeValues){
-_34.push(this._dataProvider.getAttribute(key));
-}
-return _34;
-};
-dojo.data.old.Item.prototype.hasAttribute=function(_36){
-return (_36 in this._dictionaryOfAttributeValues);
-};
-dojo.data.old.Item.prototype.hasAttributeValue=function(_37,_38){
-var _39=this.getValues(_37);
-for(var i in _39){
-var _3b=_39[i];
-if(_3b.isEqual(_38)){
-return true;
-}
-}
-return false;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Kind.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Kind.js
deleted file mode 100644
index 78fac0b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Kind.js
+++ /dev/null
@@ -1,6 +0,0 @@
-dojo.provide("dojo.data.old.Kind");
-dojo.require("dojo.data.old.Item");
-dojo.data.old.Kind=function(_1){
-dojo.data.old.Item.call(this,_1);
-};
-dojo.inherits(dojo.data.old.Kind,dojo.data.old.Item);
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Observable.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Observable.js
deleted file mode 100644
index 99fbfa4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Observable.js
+++ /dev/null
@@ -1,27 +0,0 @@
-dojo.provide("dojo.data.old.Observable");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.assert");
-dojo.data.old.Observable=function(){
-};
-dojo.data.old.Observable.prototype.addObserver=function(_1){
-dojo.lang.assertType(_1,Object);
-dojo.lang.assertType(_1.observedObjectHasChanged,Function);
-if(!this._arrayOfObservers){
-this._arrayOfObservers=[];
-}
-if(!dojo.lang.inArray(this._arrayOfObservers,_1)){
-this._arrayOfObservers.push(_1);
-}
-};
-dojo.data.old.Observable.prototype.removeObserver=function(_2){
-if(!this._arrayOfObservers){
-return;
-}
-var _3=dojo.lang.indexOf(this._arrayOfObservers,_2);
-if(_3!=-1){
-this._arrayOfObservers.splice(_3,1);
-}
-};
-dojo.data.old.Observable.prototype.getObservers=function(){
-return this._arrayOfObservers;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/ResultSet.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/ResultSet.js
deleted file mode 100644
index a6aa674..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/ResultSet.js
+++ /dev/null
@@ -1,39 +0,0 @@
-dojo.provide("dojo.data.old.ResultSet");
-dojo.require("dojo.lang.assert");
-dojo.require("dojo.collections.Collections");
-dojo.data.old.ResultSet=function(_1,_2){
-dojo.lang.assertType(_1,dojo.data.old.provider.Base,{optional:true});
-dojo.lang.assertType(_2,Array,{optional:true});
-dojo.data.old.Observable.call(this);
-this._dataProvider=_1;
-this._arrayOfItems=[];
-if(_2){
-this._arrayOfItems=_2;
-}
-};
-dojo.inherits(dojo.data.old.ResultSet,dojo.data.old.Observable);
-dojo.data.old.ResultSet.prototype.toString=function(){
-var _3=this._arrayOfItems.join(", ");
-return _3;
-};
-dojo.data.old.ResultSet.prototype.toArray=function(){
-return this._arrayOfItems;
-};
-dojo.data.old.ResultSet.prototype.getIterator=function(){
-return new dojo.collections.Iterator(this._arrayOfItems);
-};
-dojo.data.old.ResultSet.prototype.getLength=function(){
-return this._arrayOfItems.length;
-};
-dojo.data.old.ResultSet.prototype.getItemAt=function(_4){
-return this._arrayOfItems[_4];
-};
-dojo.data.old.ResultSet.prototype.indexOf=function(_5){
-return dojo.lang.indexOf(this._arrayOfItems,_5);
-};
-dojo.data.old.ResultSet.prototype.contains=function(_6){
-return dojo.lang.inArray(this._arrayOfItems,_6);
-};
-dojo.data.old.ResultSet.prototype.getDataProvider=function(){
-return this._dataProvider;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Type.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Type.js
deleted file mode 100644
index e6ac4fb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Type.js
+++ /dev/null
@@ -1,6 +0,0 @@
-dojo.provide("dojo.data.old.Type");
-dojo.require("dojo.data.old.Item");
-dojo.data.old.Type=function(_1){
-dojo.data.old.Item.call(this,_1);
-};
-dojo.inherits(dojo.data.old.Type,dojo.data.old.Item);
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Value.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Value.js
deleted file mode 100644
index 636a627..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/Value.js
+++ /dev/null
@@ -1,22 +0,0 @@
-dojo.provide("dojo.data.old.Value");
-dojo.require("dojo.lang.assert");
-dojo.data.old.Value=function(_1){
-this._value=_1;
-this._type=null;
-};
-dojo.data.old.Value.prototype.toString=function(){
-return this._value.toString();
-};
-dojo.data.old.Value.prototype.getValue=function(){
-return this._value;
-};
-dojo.data.old.Value.prototype.getType=function(){
-dojo.unimplemented("dojo.data.old.Value.prototype.getType");
-return this._type;
-};
-dojo.data.old.Value.prototype.compare=function(){
-dojo.unimplemented("dojo.data.old.Value.prototype.compare");
-};
-dojo.data.old.Value.prototype.isEqual=function(){
-dojo.unimplemented("dojo.data.old.Value.prototype.isEqual");
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/__package__.js
deleted file mode 100644
index 075e12e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/__package__.js
+++ /dev/null
@@ -1,4 +0,0 @@
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.data.old.*");
-dojo.kwCompoundRequire({common:["dojo.data.old.Item","dojo.data.old.ResultSet","dojo.data.old.provider.FlatFile"]});
-dojo.provide("dojo.data.old.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/format/Csv.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/format/Csv.js
deleted file mode 100644
index 9c96cf2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/format/Csv.js
+++ /dev/null
@@ -1,68 +0,0 @@
-dojo.provide("dojo.data.old.format.Csv");
-dojo.require("dojo.lang.assert");
-dojo.data.old.format.Csv=new function(){
-this.getArrayStructureFromCsvFileContents=function(_1){
-dojo.lang.assertType(_1,String);
-var _2=new RegExp("\r\n|\n|\r");
-var _3=new RegExp("^\\s+","g");
-var _4=new RegExp("\\s+$","g");
-var _5=new RegExp("\"\"","g");
-var _6=[];
-var _7=_1.split(_2);
-for(var i in _7){
-var _9=_7[i];
-if(_9.length>0){
-var _a=_9.split(",");
-var j=0;
-while(j<_a.length){
-var _c=_a[j];
-var _d=_c.replace(_3,"");
-var _e=_d.replace(_4,"");
-var _f=_e.charAt(0);
-var _10=_e.charAt(_e.length-1);
-var _11=_e.charAt(_e.length-2);
-var _12=_e.charAt(_e.length-3);
-if((_f=="\"")&&((_10!="\"")||((_10=="\"")&&(_11=="\"")&&(_12!="\"")))){
-if(j+1===_a.length){
-return null;
-}
-var _13=_a[j+1];
-_a[j]=_d+","+_13;
-_a.splice(j+1,1);
-}else{
-if((_f=="\"")&&(_10=="\"")){
-_e=_e.slice(1,(_e.length-1));
-_e=_e.replace(_5,"\"");
-}
-_a[j]=_e;
-j+=1;
-}
-}
-_6.push(_a);
-}
-}
-return _6;
-};
-this.loadDataProviderFromFileContents=function(_14,_15){
-dojo.lang.assertType(_14,dojo.data.old.provider.Base);
-dojo.lang.assertType(_15,String);
-var _16=this.getArrayStructureFromCsvFileContents(_15);
-if(_16){
-var _17=_16[0];
-for(var i=1;i<_16.length;++i){
-var row=_16[i];
-var _1a=_14.getNewItemToLoad();
-for(var j in row){
-var _1c=row[j];
-var key=_17[j];
-_1a.load(key,_1c);
-}
-}
-}
-};
-this.getCsvStringFromResultSet=function(_1e){
-dojo.unimplemented("dojo.data.old.format.Csv.getCsvStringFromResultSet");
-var _1f=null;
-return _1f;
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/format/Json.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/format/Json.js
deleted file mode 100644
index 9bdf029..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/format/Json.js
+++ /dev/null
@@ -1,58 +0,0 @@
-dojo.provide("dojo.data.old.format.Json");
-dojo.require("dojo.lang.assert");
-dojo.data.old.format.Json=new function(){
-this.loadDataProviderFromFileContents=function(_1,_2){
-dojo.lang.assertType(_1,dojo.data.old.provider.Base);
-dojo.lang.assertType(_2,String);
-var _3=eval("("+_2+")");
-this.loadDataProviderFromArrayOfJsonData(_1,_3);
-};
-this.loadDataProviderFromArrayOfJsonData=function(_4,_5){
-dojo.lang.assertType(_5,Array,{optional:true});
-if(_5&&(_5.length>0)){
-var _6=_5[0];
-dojo.lang.assertType(_6,[Array,"pureobject"]);
-if(dojo.lang.isArray(_6)){
-_loadDataProviderFromArrayOfArrays(_4,_5);
-}else{
-dojo.lang.assertType(_6,"pureobject");
-_loadDataProviderFromArrayOfObjects(_4,_5);
-}
-}
-};
-this.getJsonStringFromResultSet=function(_7){
-dojo.unimplemented("dojo.data.old.format.Json.getJsonStringFromResultSet");
-var _8=null;
-return _8;
-};
-function _loadDataProviderFromArrayOfArrays(_9,_a){
-var _b=_a[0];
-for(var i=1;i<_a.length;++i){
-var _d=_a[i];
-var _e=_9.getNewItemToLoad();
-for(var j in _d){
-var _10=_d[j];
-var key=_b[j];
-_e.load(key,_10);
-}
-}
-}
-function _loadDataProviderFromArrayOfObjects(_12,_13){
-for(var i in _13){
-var row=_13[i];
-var _16=_12.getNewItemToLoad();
-for(var key in row){
-var _18=row[key];
-if(dojo.lang.isArray(_18)){
-var _19=_18;
-for(var j in _19){
-_18=_19[j];
-_16.load(key,_18);
-}
-}else{
-_16.load(key,_18);
-}
-}
-}
-}
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/Base.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/Base.js
deleted file mode 100644
index 2873a4b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/Base.js
+++ /dev/null
@@ -1,111 +0,0 @@
-dojo.provide("dojo.data.old.provider.Base");
-dojo.require("dojo.lang.assert");
-dojo.data.old.provider.Base=function(){
-this._countOfNestedTransactions=0;
-this._changesInCurrentTransaction=null;
-};
-dojo.data.old.provider.Base.prototype.beginTransaction=function(){
-if(this._countOfNestedTransactions===0){
-this._changesInCurrentTransaction=[];
-}
-this._countOfNestedTransactions+=1;
-};
-dojo.data.old.provider.Base.prototype.endTransaction=function(){
-this._countOfNestedTransactions-=1;
-dojo.lang.assert(this._countOfNestedTransactions>=0);
-if(this._countOfNestedTransactions===0){
-var _1=this._saveChanges();
-this._changesInCurrentTransaction=null;
-if(_1.length>0){
-this._notifyObserversOfChanges(_1);
-}
-}
-};
-dojo.data.old.provider.Base.prototype.getNewItemToLoad=function(){
-return this._newItem();
-};
-dojo.data.old.provider.Base.prototype.newItem=function(_2){
-dojo.lang.assertType(_2,String,{optional:true});
-var _3=this._newItem();
-if(_2){
-_3.set("name",_2);
-}
-return _3;
-};
-dojo.data.old.provider.Base.prototype.newAttribute=function(_4){
-dojo.lang.assertType(_4,String,{optional:true});
-var _5=this._newAttribute(_4);
-return _5;
-};
-dojo.data.old.provider.Base.prototype.getAttribute=function(_6){
-dojo.unimplemented("dojo.data.old.provider.Base");
-var _7;
-return _7;
-};
-dojo.data.old.provider.Base.prototype.getAttributes=function(){
-dojo.unimplemented("dojo.data.old.provider.Base");
-return this._arrayOfAttributes;
-};
-dojo.data.old.provider.Base.prototype.fetchArray=function(){
-dojo.unimplemented("dojo.data.old.provider.Base");
-return [];
-};
-dojo.data.old.provider.Base.prototype.fetchResultSet=function(){
-dojo.unimplemented("dojo.data.old.provider.Base");
-var _8;
-return _8;
-};
-dojo.data.old.provider.Base.prototype.noteChange=function(_9,_a,_b){
-var _c={item:_9,attribute:_a,value:_b};
-if(this._countOfNestedTransactions===0){
-this.beginTransaction();
-this._changesInCurrentTransaction.push(_c);
-this.endTransaction();
-}else{
-this._changesInCurrentTransaction.push(_c);
-}
-};
-dojo.data.old.provider.Base.prototype.addItemObserver=function(_d,_e){
-dojo.lang.assertType(_d,dojo.data.old.Item);
-_d.addObserver(_e);
-};
-dojo.data.old.provider.Base.prototype.removeItemObserver=function(_f,_10){
-dojo.lang.assertType(_f,dojo.data.old.Item);
-_f.removeObserver(_10);
-};
-dojo.data.old.provider.Base.prototype._newItem=function(){
-var _11=new dojo.data.old.Item(this);
-return _11;
-};
-dojo.data.old.provider.Base.prototype._newAttribute=function(_12){
-var _13=new dojo.data.old.Attribute(this);
-return _13;
-};
-dojo.data.old.provider.Base.prototype._saveChanges=function(){
-var _14=this._changesInCurrentTransaction;
-return _14;
-};
-dojo.data.old.provider.Base.prototype._notifyObserversOfChanges=function(_15){
-var _16=this._getResultSets();
-for(var i in _15){
-var _18=_15[i];
-var _19=_18.item;
-var _1a=_19.getObservers();
-for(var j in _1a){
-var _1c=_1a[j];
-_1c.observedObjectHasChanged(_19,_18);
-}
-for(var k in _16){
-var _1e=_16[k];
-var _1f=_1e.getObservers();
-for(var m in _1f){
-_1c=_1f[m];
-_1c.observedObjectHasChanged(_1e,_18);
-}
-}
-}
-};
-dojo.data.old.provider.Base.prototype._getResultSets=function(){
-dojo.unimplemented("dojo.data.old.provider.Base");
-return [];
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/Delicious.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/Delicious.js
deleted file mode 100644
index e8270bd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/Delicious.js
+++ /dev/null
@@ -1,20 +0,0 @@
-dojo.provide("dojo.data.old.provider.Delicious");
-dojo.require("dojo.data.old.provider.FlatFile");
-dojo.require("dojo.data.old.format.Json");
-dojo.data.old.provider.Delicious=function(){
-dojo.data.old.provider.FlatFile.call(this);
-if(Delicious&&Delicious.posts){
-dojo.data.old.format.Json.loadDataProviderFromArrayOfJsonData(this,Delicious.posts);
-}else{
-}
-var u=this.registerAttribute("u");
-var d=this.registerAttribute("d");
-var t=this.registerAttribute("t");
-u.load("name","Bookmark");
-d.load("name","Description");
-t.load("name","Tags");
-u.load("type","String");
-d.load("type","String");
-t.load("type","String");
-};
-dojo.inherits(dojo.data.old.provider.Delicious,dojo.data.old.provider.FlatFile);
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/FlatFile.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/FlatFile.js
deleted file mode 100644
index ec78a40..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/FlatFile.js
+++ /dev/null
@@ -1,100 +0,0 @@
-dojo.provide("dojo.data.old.provider.FlatFile");
-dojo.require("dojo.data.old.provider.Base");
-dojo.require("dojo.data.old.Item");
-dojo.require("dojo.data.old.Attribute");
-dojo.require("dojo.data.old.ResultSet");
-dojo.require("dojo.data.old.format.Json");
-dojo.require("dojo.data.old.format.Csv");
-dojo.require("dojo.lang.assert");
-dojo.data.old.provider.FlatFile=function(_1){
-dojo.lang.assertType(_1,"pureobject",{optional:true});
-dojo.data.old.provider.Base.call(this);
-this._arrayOfItems=[];
-this._resultSet=null;
-this._dictionaryOfAttributes={};
-if(_1){
-var _2=_1["jsonObjects"];
-var _3=_1["jsonString"];
-var _4=_1["url"];
-if(_2){
-dojo.data.old.format.Json.loadDataProviderFromArrayOfJsonData(this,_2);
-}
-if(_3){
-dojo.data.old.format.Json.loadDataProviderFromFileContents(this,_3);
-}
-if(_4){
-var _5=_4.split(".");
-var _6=_5[(_5.length-1)];
-var _7=null;
-if(_6=="json"){
-_7=dojo.data.old.format.Json;
-}
-if(_6=="csv"){
-_7=dojo.data.old.format.Csv;
-}
-if(_7){
-var _8=dojo.hostenv.getText(_4);
-_7.loadDataProviderFromFileContents(this,_8);
-}else{
-dojo.lang.assert(false,"new dojo.data.old.provider.FlatFile({url: }) was passed a file without a .csv or .json suffix");
-}
-}
-}
-};
-dojo.inherits(dojo.data.old.provider.FlatFile,dojo.data.old.provider.Base);
-dojo.data.old.provider.FlatFile.prototype.getProviderCapabilities=function(_9){
-dojo.lang.assertType(_9,String,{optional:true});
-if(!this._ourCapabilities){
-this._ourCapabilities={transactions:false,undo:false,login:false,versioning:false,anonymousRead:true,anonymousWrite:false,permissions:false,queries:false,strongTyping:false,datatypes:[String,Date,Number]};
-}
-if(_9){
-return this._ourCapabilities[_9];
-}else{
-return this._ourCapabilities;
-}
-};
-dojo.data.old.provider.FlatFile.prototype.registerAttribute=function(_a){
-var _b=this.getAttribute(_a);
-if(!_b){
-var _c=new dojo.data.old.Attribute(this,_a);
-this._dictionaryOfAttributes[_a]=_c;
-_b=_c;
-}
-return _b;
-};
-dojo.data.old.provider.FlatFile.prototype.getAttribute=function(_d){
-var _e=(this._dictionaryOfAttributes[_d]||null);
-return _e;
-};
-dojo.data.old.provider.FlatFile.prototype.getAttributes=function(){
-var _f=[];
-for(var key in this._dictionaryOfAttributes){
-var _11=this._dictionaryOfAttributes[key];
-_f.push(_11);
-}
-return _f;
-};
-dojo.data.old.provider.FlatFile.prototype.fetchArray=function(_12){
-return this._arrayOfItems;
-};
-dojo.data.old.provider.FlatFile.prototype.fetchResultSet=function(_13){
-if(!this._resultSet){
-this._resultSet=new dojo.data.old.ResultSet(this,this.fetchArray(_13));
-}
-return this._resultSet;
-};
-dojo.data.old.provider.FlatFile.prototype._newItem=function(){
-var _14=new dojo.data.old.Item(this);
-this._arrayOfItems.push(_14);
-return _14;
-};
-dojo.data.old.provider.FlatFile.prototype._newAttribute=function(_15){
-dojo.lang.assertType(_15,String);
-dojo.lang.assert(this.getAttribute(_15)===null);
-var _16=new dojo.data.old.Attribute(this,_15);
-this._dictionaryOfAttributes[_15]=_16;
-return _16;
-};
-dojo.data.old.provider.Base.prototype._getResultSets=function(){
-return [this._resultSet];
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/JotSpot.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/JotSpot.js
deleted file mode 100644
index a841bb2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/JotSpot.js
+++ /dev/null
@@ -1,6 +0,0 @@
-dojo.provide("dojo.data.old.provider.JotSpot");
-dojo.require("dojo.data.old.provider.Base");
-dojo.data.old.provider.JotSpot=function(){
-dojo.unimplemented("dojo.data.old.provider.JotSpot");
-};
-dojo.inherits(dojo.data.old.provider.JotSpot,dojo.data.old.provider.Base);
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/MySql.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/MySql.js
deleted file mode 100644
index 88745e7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/provider/MySql.js
+++ /dev/null
@@ -1,6 +0,0 @@
-dojo.provide("dojo.data.old.provider.MySql");
-dojo.require("dojo.data.old.provider.Base");
-dojo.data.old.provider.MySql=function(){
-dojo.unimplemented("dojo.data.old.provider.MySql");
-};
-dojo.inherits(dojo.data.old.provider.MySql,dojo.data.old.provider.Base);
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/to_do.txt b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/to_do.txt
deleted file mode 100644
index 6e705fc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/data/old/to_do.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-Existing Features
- * can import data from .json or .csv format files
- * can import data from del.icio.us
- * can create and modify data programmatically
- * can bind data to dojo.widget.Chart
- * can bind data to dojo.widget.SortableTable
- * can bind one data set to multiple widgets
- * notifications: widgets are notified when data changes
- * notification available per-item or per-resultSet
- * can create ad-hoc attributes
- * attributes can be loosely-typed 
- * attributes can have meta-data like type and display name
- * half-implemented support for sorting
- * half-implemented support for export to .json
- * API for getting data in simple arrays 
- * API for getting ResultSets with iterators (precursor to support for something like the openrico.org live grid)
- 
-~~~~~~~~~~~~~~~~~~~~~~~~
-To-Do List
- * be able to import data from an html <table></table>
- * think about being able to import data from some type of XML 
- * think about integration with dojo.undo.Manager
- * think more about how to represent the notion of different data types
- * think about what problems we'll run into when we have a MySQL data provider
- * in TableBindingHack, improve support for data types in the SortableTable binding
- * deal with ids (including MySQL multi-field keys)
- * add support for item-references:  employeeItem.set('department', departmentItem);
- * deal with Attributes as instances of Items, not just subclasses of Items
- * unit tests for compare/sort code
- * unit tests for everything
- * implement item.toString('json') and item.toString('xml')
- * implement dataProvider.newItem({name: 'foo', age: 26})
- * deal better with transactions
- * add support for deleting items
- * don't send out multiple notifications to the same observer
- * deal with item versions
- * prototype a Yahoo data provider -- http://developer.yahoo.net/common/json.html
- * prototype a data provider that enforces strong typing
- * prototype a data provider that prevents ad-hoc attributes
- * prototype a data provider that enforces single-kind item
- * prototype a data provider that allows for login/authentication
- * have loosely typed result sets play nicely with widgets that expect strong typing
- * prototype an example of spreadsheet-style formulas or derivation rules
- * experiment with some sort of fetch() that returns only a subset of a data provider's items
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date.js
deleted file mode 100644
index fbce2a9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.provide("dojo.date");
-dojo.deprecated("dojo.date","use one of the modules in dojo.date.* instead","0.5");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/common.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/common.js
deleted file mode 100644
index 9f56658..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/common.js
+++ /dev/null
@@ -1,303 +0,0 @@
-dojo.provide("dojo.date.common");
-dojo.date.setDayOfYear=function(_1,_2){
-_1.setMonth(0);
-_1.setDate(_2);
-return _1;
-};
-dojo.date.getDayOfYear=function(_3){
-var _4=_3.getFullYear();
-var _5=new Date(_4-1,11,31);
-return Math.floor((_3.getTime()-_5.getTime())/86400000);
-};
-dojo.date.setWeekOfYear=function(_6,_7,_8){
-if(arguments.length==1){
-_8=0;
-}
-dojo.unimplemented("dojo.date.setWeekOfYear");
-};
-dojo.date.getWeekOfYear=function(_9,_a){
-if(arguments.length==1){
-_a=0;
-}
-var _b=new Date(_9.getFullYear(),0,1);
-var _c=_b.getDay();
-_b.setDate(_b.getDate()-_c+_a-(_c>_a?7:0));
-return Math.floor((_9.getTime()-_b.getTime())/604800000);
-};
-dojo.date.setIsoWeekOfYear=function(_d,_e,_f){
-if(arguments.length==1){
-_f=1;
-}
-dojo.unimplemented("dojo.date.setIsoWeekOfYear");
-};
-dojo.date.getIsoWeekOfYear=function(_10,_11){
-if(arguments.length==1){
-_11=1;
-}
-dojo.unimplemented("dojo.date.getIsoWeekOfYear");
-};
-dojo.date.shortTimezones=["IDLW","BET","HST","MART","AKST","PST","MST","CST","EST","AST","NFT","BST","FST","AT","GMT","CET","EET","MSK","IRT","GST","AFT","AGTT","IST","NPT","ALMT","MMT","JT","AWST","JST","ACST","AEST","LHST","VUT","NFT","NZT","CHAST","PHOT","LINT"];
-dojo.date.timezoneOffsets=[-720,-660,-600,-570,-540,-480,-420,-360,-300,-240,-210,-180,-120,-60,0,60,120,180,210,240,270,300,330,345,360,390,420,480,540,570,600,630,660,690,720,765,780,840];
-dojo.date.getDaysInMonth=function(_12){
-var _13=_12.getMonth();
-var _14=[31,28,31,30,31,30,31,31,30,31,30,31];
-if(_13==1&&dojo.date.isLeapYear(_12)){
-return 29;
-}else{
-return _14[_13];
-}
-};
-dojo.date.isLeapYear=function(_15){
-var _16=_15.getFullYear();
-return (_16%400==0)?true:(_16%100==0)?false:(_16%4==0)?true:false;
-};
-dojo.date.getTimezoneName=function(_17){
-var str=_17.toString();
-var tz="";
-var _1a;
-var pos=str.indexOf("(");
-if(pos>-1){
-pos++;
-tz=str.substring(pos,str.indexOf(")"));
-}else{
-var pat=/([A-Z\/]+) \d{4}$/;
-if((_1a=str.match(pat))){
-tz=_1a[1];
-}else{
-str=_17.toLocaleString();
-pat=/ ([A-Z\/]+)$/;
-if((_1a=str.match(pat))){
-tz=_1a[1];
-}
-}
-}
-return tz=="AM"||tz=="PM"?"":tz;
-};
-dojo.date.getOrdinal=function(_1d){
-var _1e=_1d.getDate();
-if(_1e%100!=11&&_1e%10==1){
-return "st";
-}else{
-if(_1e%100!=12&&_1e%10==2){
-return "nd";
-}else{
-if(_1e%100!=13&&_1e%10==3){
-return "rd";
-}else{
-return "th";
-}
-}
-}
-};
-dojo.date.compareTypes={DATE:1,TIME:2};
-dojo.date.compare=function(_1f,_20,_21){
-var dA=_1f;
-var dB=_20||new Date();
-var now=new Date();
-with(dojo.date.compareTypes){
-var opt=_21||(DATE|TIME);
-var d1=new Date((opt&DATE)?dA.getFullYear():now.getFullYear(),(opt&DATE)?dA.getMonth():now.getMonth(),(opt&DATE)?dA.getDate():now.getDate(),(opt&TIME)?dA.getHours():0,(opt&TIME)?dA.getMinutes():0,(opt&TIME)?dA.getSeconds():0);
-var d2=new Date((opt&DATE)?dB.getFullYear():now.getFullYear(),(opt&DATE)?dB.getMonth():now.getMonth(),(opt&DATE)?dB.getDate():now.getDate(),(opt&TIME)?dB.getHours():0,(opt&TIME)?dB.getMinutes():0,(opt&TIME)?dB.getSeconds():0);
-}
-if(d1.valueOf()>d2.valueOf()){
-return 1;
-}
-if(d1.valueOf()<d2.valueOf()){
-return -1;
-}
-return 0;
-};
-dojo.date.dateParts={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6,QUARTER:7,WEEK:8,WEEKDAY:9};
-dojo.date.add=function(dt,_29,_2a){
-if(typeof dt=="number"){
-dt=new Date(dt);
-}
-function fixOvershoot(){
-if(sum.getDate()<dt.getDate()){
-sum.setDate(0);
-}
-}
-var sum=new Date(dt);
-with(dojo.date.dateParts){
-switch(_29){
-case YEAR:
-sum.setFullYear(dt.getFullYear()+_2a);
-fixOvershoot();
-break;
-case QUARTER:
-_2a*=3;
-case MONTH:
-sum.setMonth(dt.getMonth()+_2a);
-fixOvershoot();
-break;
-case WEEK:
-_2a*=7;
-case DAY:
-sum.setDate(dt.getDate()+_2a);
-break;
-case WEEKDAY:
-var dat=dt.getDate();
-var _2d=0;
-var _2e=0;
-var _2f=0;
-var _30=0;
-var adj=0;
-var mod=_2a%5;
-if(mod==0){
-_2e=(_2a>0)?5:-5;
-_2d=(_2a>0)?((_2a-5)/5):((_2a+5)/5);
-}else{
-_2e=mod;
-_2d=parseInt(_2a/5);
-}
-_2f=dt.getDay();
-if(_2f==6&&_2a>0){
-adj=1;
-}else{
-if(_2f==0&&_2a<0){
-adj=-1;
-}
-}
-_30=(_2f+_2e);
-if(_30==0||_30==6){
-adj=(_2a>0)?2:-2;
-}
-sum.setDate(dat+(7*_2d)+_2e+adj);
-break;
-case HOUR:
-sum.setHours(sum.getHours()+_2a);
-break;
-case MINUTE:
-sum.setMinutes(sum.getMinutes()+_2a);
-break;
-case SECOND:
-sum.setSeconds(sum.getSeconds()+_2a);
-break;
-case MILLISECOND:
-sum.setMilliseconds(sum.getMilliseconds()+_2a);
-break;
-default:
-break;
-}
-}
-return sum;
-};
-dojo.date.diff=function(dtA,dtB,_35){
-if(typeof dtA=="number"){
-dtA=new Date(dtA);
-}
-if(typeof dtB=="number"){
-dtB=new Date(dtB);
-}
-var _36=dtB.getFullYear()-dtA.getFullYear();
-var _37=(dtB.getMonth()-dtA.getMonth())+(_36*12);
-var _38=dtB.getTime()-dtA.getTime();
-var _39=_38/1000;
-var _3a=_39/60;
-var _3b=_3a/60;
-var _3c=_3b/24;
-var _3d=_3c/7;
-var _3e=0;
-with(dojo.date.dateParts){
-switch(_35){
-case YEAR:
-_3e=_36;
-break;
-case QUARTER:
-var mA=dtA.getMonth();
-var mB=dtB.getMonth();
-var qA=Math.floor(mA/3)+1;
-var qB=Math.floor(mB/3)+1;
-qB+=(_36*4);
-_3e=qB-qA;
-break;
-case MONTH:
-_3e=_37;
-break;
-case WEEK:
-_3e=parseInt(_3d);
-break;
-case DAY:
-_3e=_3c;
-break;
-case WEEKDAY:
-var _43=Math.round(_3c);
-var _44=parseInt(_43/7);
-var mod=_43%7;
-if(mod==0){
-_43=_44*5;
-}else{
-var adj=0;
-var _47=dtA.getDay();
-var _48=dtB.getDay();
-_44=parseInt(_43/7);
-mod=_43%7;
-var _49=new Date(dtA);
-_49.setDate(_49.getDate()+(_44*7));
-var _4a=_49.getDay();
-if(_3c>0){
-switch(true){
-case _47==6:
-adj=-1;
-break;
-case _47==0:
-adj=0;
-break;
-case _48==6:
-adj=-1;
-break;
-case _48==0:
-adj=-2;
-break;
-case (_4a+mod)>5:
-adj=-2;
-break;
-default:
-break;
-}
-}else{
-if(_3c<0){
-switch(true){
-case _47==6:
-adj=0;
-break;
-case _47==0:
-adj=1;
-break;
-case _48==6:
-adj=2;
-break;
-case _48==0:
-adj=1;
-break;
-case (_4a+mod)<0:
-adj=2;
-break;
-default:
-break;
-}
-}
-}
-_43+=adj;
-_43-=(_44*2);
-}
-_3e=_43;
-break;
-case HOUR:
-_3e=_3b;
-break;
-case MINUTE:
-_3e=_3a;
-break;
-case SECOND:
-_3e=_39;
-break;
-case MILLISECOND:
-_3e=_38;
-break;
-default:
-break;
-}
-}
-return Math.round(_3e);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/format.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/format.js
deleted file mode 100644
index 0705dae..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/format.js
+++ /dev/null
@@ -1,707 +0,0 @@
-dojo.provide("dojo.date.format");
-dojo.require("dojo.date.common");
-dojo.require("dojo.date.supplemental");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.string.common");
-dojo.require("dojo.i18n.common");
-dojo.requireLocalization("dojo.i18n.calendar","gregorian",null,"zh-cn,zh-hk,de,ko,zh-tw,zh,ja,fi,pt-br,fr,es,ROOT,hu,en,it,sv,nl,pt");
-dojo.requireLocalization("dojo.i18n.calendar","gregorianExtras",null,"zh,ja,ROOT");
-(function(){
-dojo.date.format=function(_1,_2){
-if(typeof _2=="string"){
-dojo.deprecated("dojo.date.format","To format dates with POSIX-style strings, please use dojo.date.strftime instead","0.5");
-return dojo.date.strftime(_1,_2);
-}
-function formatPattern(_3,_4){
-return _4.replace(/([a-z])\1*/ig,function(_5){
-var s;
-var c=_5.charAt(0);
-var l=_5.length;
-var _9;
-var _a=["abbr","wide","narrow"];
-switch(c){
-case "G":
-if(l>3){
-dojo.unimplemented("Era format not implemented");
-}
-s=_b.eras[_3.getFullYear()<0?1:0];
-break;
-case "y":
-s=_3.getFullYear();
-switch(l){
-case 1:
-break;
-case 2:
-s=String(s);
-s=s.substr(s.length-2);
-break;
-default:
-_9=true;
-}
-break;
-case "Q":
-case "q":
-s=Math.ceil((_3.getMonth()+1)/3);
-switch(l){
-case 1:
-case 2:
-_9=true;
-break;
-case 3:
-case 4:
-dojo.unimplemented("Quarter format not implemented");
-}
-break;
-case "M":
-case "L":
-var m=_3.getMonth();
-var _d;
-switch(l){
-case 1:
-case 2:
-s=m+1;
-_9=true;
-break;
-case 3:
-case 4:
-case 5:
-_d=_a[l-3];
-break;
-}
-if(_d){
-var _e=(c=="L")?"standalone":"format";
-var _f=["months",_e,_d].join("-");
-s=_b[_f][m];
-}
-break;
-case "w":
-var _10=0;
-s=dojo.date.getWeekOfYear(_3,_10);
-_9=true;
-break;
-case "d":
-s=_3.getDate();
-_9=true;
-break;
-case "D":
-s=dojo.date.getDayOfYear(_3);
-_9=true;
-break;
-case "E":
-case "e":
-case "c":
-var d=_3.getDay();
-var _d;
-switch(l){
-case 1:
-case 2:
-if(c=="e"){
-var _12=dojo.date.getFirstDayOfWeek(_2.locale);
-d=(d-_12+7)%7;
-}
-if(c!="c"){
-s=d+1;
-_9=true;
-break;
-}
-case 3:
-case 4:
-case 5:
-_d=_a[l-3];
-break;
-}
-if(_d){
-var _e=(c=="c")?"standalone":"format";
-var _f=["days",_e,_d].join("-");
-s=_b[_f][d];
-}
-break;
-case "a":
-var _13=(_3.getHours()<12)?"am":"pm";
-s=_b[_13];
-break;
-case "h":
-case "H":
-case "K":
-case "k":
-var h=_3.getHours();
-switch(c){
-case "h":
-s=(h%12)||12;
-break;
-case "H":
-s=h;
-break;
-case "K":
-s=(h%12);
-break;
-case "k":
-s=h||24;
-break;
-}
-_9=true;
-break;
-case "m":
-s=_3.getMinutes();
-_9=true;
-break;
-case "s":
-s=_3.getSeconds();
-_9=true;
-break;
-case "S":
-s=Math.round(_3.getMilliseconds()*Math.pow(10,l-3));
-break;
-case "v":
-case "z":
-s=dojo.date.getTimezoneName(_3);
-if(s){
-break;
-}
-l=4;
-case "Z":
-var _15=_3.getTimezoneOffset();
-var tz=[(_15<=0?"+":"-"),dojo.string.pad(Math.floor(Math.abs(_15)/60),2),dojo.string.pad(Math.abs(_15)%60,2)];
-if(l==4){
-tz.splice(0,0,"GMT");
-tz.splice(3,0,":");
-}
-s=tz.join("");
-break;
-case "Y":
-case "u":
-case "W":
-case "F":
-case "g":
-case "A":
-s="?";
-break;
-default:
-dojo.raise("dojo.date.format: invalid pattern char: "+_4);
-}
-if(_9){
-s=dojo.string.pad(s,l);
-}
-return s;
-});
-}
-_2=_2||{};
-var _17=dojo.hostenv.normalizeLocale(_2.locale);
-var _18=_2.formatLength||"short";
-var _b=dojo.date._getGregorianBundle(_17);
-var str=[];
-var _1a=dojo.lang.curry(this,formatPattern,_1);
-if(_2.selector=="yearOnly"){
-var _1b=_1.getFullYear();
-if(_17.match(/^zh|^ja/)){
-_1b+="\u5e74";
-}
-return _1b;
-}
-if(_2.selector!="timeOnly"){
-var _1c=_2.datePattern||_b["dateFormat-"+_18];
-if(_1c){
-str.push(_processPattern(_1c,_1a));
-}
-}
-if(_2.selector!="dateOnly"){
-var _1d=_2.timePattern||_b["timeFormat-"+_18];
-if(_1d){
-str.push(_processPattern(_1d,_1a));
-}
-}
-var _1e=str.join(" ");
-return _1e;
-};
-dojo.date.parse=function(_1f,_20){
-_20=_20||{};
-var _21=dojo.hostenv.normalizeLocale(_20.locale);
-var _22=dojo.date._getGregorianBundle(_21);
-var _23=_20.formatLength||"full";
-if(!_20.selector){
-_20.selector="dateOnly";
-}
-var _24=_20.datePattern||_22["dateFormat-"+_23];
-var _25=_20.timePattern||_22["timeFormat-"+_23];
-var _26;
-if(_20.selector=="dateOnly"){
-_26=_24;
-}else{
-if(_20.selector=="timeOnly"){
-_26=_25;
-}else{
-if(_20.selector=="dateTime"){
-_26=_24+" "+_25;
-}else{
-var msg="dojo.date.parse: Unknown selector param passed: '"+_20.selector+"'.";
-msg+=" Defaulting to date pattern.";
-dojo.debug(msg);
-_26=_24;
-}
-}
-}
-var _28=[];
-var _29=_processPattern(_26,dojo.lang.curry(this,_buildDateTimeRE,_28,_22,_20));
-var _2a=new RegExp("^"+_29+"$");
-var _2b=_2a.exec(_1f);
-if(!_2b){
-return null;
-}
-var _2c=["abbr","wide","narrow"];
-var _2d=new Date(1972,0);
-var _2e={};
-for(var i=1;i<_2b.length;i++){
-var grp=_28[i-1];
-var l=grp.length;
-var v=_2b[i];
-switch(grp.charAt(0)){
-case "y":
-if(l!=2){
-_2d.setFullYear(v);
-_2e.year=v;
-}else{
-if(v<100){
-v=Number(v);
-var _33=""+new Date().getFullYear();
-var _34=_33.substring(0,2)*100;
-var _35=Number(_33.substring(2,4));
-var _36=Math.min(_35+20,99);
-var num=(v<_36)?_34+v:_34-100+v;
-_2d.setFullYear(num);
-_2e.year=num;
-}else{
-if(_20.strict){
-return null;
-}
-_2d.setFullYear(v);
-_2e.year=v;
-}
-}
-break;
-case "M":
-if(l>2){
-if(!_20.strict){
-v=v.replace(/\./g,"");
-v=v.toLowerCase();
-}
-var _38=_22["months-format-"+_2c[l-3]].concat();
-for(var j=0;j<_38.length;j++){
-if(!_20.strict){
-_38[j]=_38[j].toLowerCase();
-}
-if(v==_38[j]){
-_2d.setMonth(j);
-_2e.month=j;
-break;
-}
-}
-if(j==_38.length){
-dojo.debug("dojo.date.parse: Could not parse month name: '"+v+"'.");
-return null;
-}
-}else{
-_2d.setMonth(v-1);
-_2e.month=v-1;
-}
-break;
-case "E":
-case "e":
-if(!_20.strict){
-v=v.toLowerCase();
-}
-var _3a=_22["days-format-"+_2c[l-3]].concat();
-for(var j=0;j<_3a.length;j++){
-if(!_20.strict){
-_3a[j]=_3a[j].toLowerCase();
-}
-if(v==_3a[j]){
-break;
-}
-}
-if(j==_3a.length){
-dojo.debug("dojo.date.parse: Could not parse weekday name: '"+v+"'.");
-return null;
-}
-break;
-case "d":
-_2d.setDate(v);
-_2e.date=v;
-break;
-case "a":
-var am=_20.am||_22.am;
-var pm=_20.pm||_22.pm;
-if(!_20.strict){
-v=v.replace(/\./g,"").toLowerCase();
-am=am.replace(/\./g,"").toLowerCase();
-pm=pm.replace(/\./g,"").toLowerCase();
-}
-if(_20.strict&&v!=am&&v!=pm){
-dojo.debug("dojo.date.parse: Could not parse am/pm part.");
-return null;
-}
-var _3d=_2d.getHours();
-if(v==pm&&_3d<12){
-_2d.setHours(_3d+12);
-}else{
-if(v==am&&_3d==12){
-_2d.setHours(0);
-}
-}
-break;
-case "K":
-if(v==24){
-v=0;
-}
-case "h":
-case "H":
-case "k":
-if(v>23){
-dojo.debug("dojo.date.parse: Illegal hours value");
-return null;
-}
-_2d.setHours(v);
-break;
-case "m":
-_2d.setMinutes(v);
-break;
-case "s":
-_2d.setSeconds(v);
-break;
-case "S":
-_2d.setMilliseconds(v);
-break;
-default:
-dojo.unimplemented("dojo.date.parse: unsupported pattern char="+grp.charAt(0));
-}
-}
-if(_2e.year&&_2d.getFullYear()!=_2e.year){
-dojo.debug("Parsed year: '"+_2d.getFullYear()+"' did not match input year: '"+_2e.year+"'.");
-return null;
-}
-if(_2e.month&&_2d.getMonth()!=_2e.month){
-dojo.debug("Parsed month: '"+_2d.getMonth()+"' did not match input month: '"+_2e.month+"'.");
-return null;
-}
-if(_2e.date&&_2d.getDate()!=_2e.date){
-dojo.debug("Parsed day of month: '"+_2d.getDate()+"' did not match input day of month: '"+_2e.date+"'.");
-return null;
-}
-return _2d;
-};
-function _processPattern(_3e,_3f,_40,_41){
-var _42=function(x){
-return x;
-};
-_3f=_3f||_42;
-_40=_40||_42;
-_41=_41||_42;
-var _44=_3e.match(/(''|[^'])+/g);
-var _45=false;
-for(var i=0;i<_44.length;i++){
-if(!_44[i]){
-_44[i]="";
-}else{
-_44[i]=(_45?_40:_3f)(_44[i]);
-_45=!_45;
-}
-}
-return _41(_44.join(""));
-}
-function _buildDateTimeRE(_47,_48,_49,_4a){
-return _4a.replace(/([a-z])\1*/ig,function(_4b){
-var s;
-var c=_4b.charAt(0);
-var l=_4b.length;
-switch(c){
-case "y":
-s="\\d"+((l==2)?"{2,4}":"+");
-break;
-case "M":
-s=(l>2)?"\\S+":"\\d{1,2}";
-break;
-case "d":
-s="\\d{1,2}";
-break;
-case "E":
-s="\\S+";
-break;
-case "h":
-case "H":
-case "K":
-case "k":
-s="\\d{1,2}";
-break;
-case "m":
-case "s":
-s="[0-5]\\d";
-break;
-case "S":
-s="\\d{1,3}";
-break;
-case "a":
-var am=_49.am||_48.am||"AM";
-var pm=_49.pm||_48.pm||"PM";
-if(_49.strict){
-s=am+"|"+pm;
-}else{
-s=am;
-s+=(am!=am.toLowerCase())?"|"+am.toLowerCase():"";
-s+="|";
-s+=(pm!=pm.toLowerCase())?pm+"|"+pm.toLowerCase():pm;
-}
-break;
-default:
-dojo.unimplemented("parse of date format, pattern="+_4a);
-}
-if(_47){
-_47.push(_4b);
-}
-return "\\s*("+s+")\\s*";
-});
-}
-})();
-dojo.date.strftime=function(_51,_52,_53){
-var _54=null;
-function _(s,n){
-return dojo.string.pad(s,n||2,_54||"0");
-}
-var _57=dojo.date._getGregorianBundle(_53);
-function $(_58){
-switch(_58){
-case "a":
-return dojo.date.getDayShortName(_51,_53);
-case "A":
-return dojo.date.getDayName(_51,_53);
-case "b":
-case "h":
-return dojo.date.getMonthShortName(_51,_53);
-case "B":
-return dojo.date.getMonthName(_51,_53);
-case "c":
-return dojo.date.format(_51,{locale:_53});
-case "C":
-return _(Math.floor(_51.getFullYear()/100));
-case "d":
-return _(_51.getDate());
-case "D":
-return $("m")+"/"+$("d")+"/"+$("y");
-case "e":
-if(_54==null){
-_54=" ";
-}
-return _(_51.getDate());
-case "f":
-if(_54==null){
-_54=" ";
-}
-return _(_51.getMonth()+1);
-case "g":
-break;
-case "G":
-dojo.unimplemented("unimplemented modifier 'G'");
-break;
-case "F":
-return $("Y")+"-"+$("m")+"-"+$("d");
-case "H":
-return _(_51.getHours());
-case "I":
-return _(_51.getHours()%12||12);
-case "j":
-return _(dojo.date.getDayOfYear(_51),3);
-case "k":
-if(_54==null){
-_54=" ";
-}
-return _(_51.getHours());
-case "l":
-if(_54==null){
-_54=" ";
-}
-return _(_51.getHours()%12||12);
-case "m":
-return _(_51.getMonth()+1);
-case "M":
-return _(_51.getMinutes());
-case "n":
-return "\n";
-case "p":
-return _57[_51.getHours()<12?"am":"pm"];
-case "r":
-return $("I")+":"+$("M")+":"+$("S")+" "+$("p");
-case "R":
-return $("H")+":"+$("M");
-case "S":
-return _(_51.getSeconds());
-case "t":
-return "\t";
-case "T":
-return $("H")+":"+$("M")+":"+$("S");
-case "u":
-return String(_51.getDay()||7);
-case "U":
-return _(dojo.date.getWeekOfYear(_51));
-case "V":
-return _(dojo.date.getIsoWeekOfYear(_51));
-case "W":
-return _(dojo.date.getWeekOfYear(_51,1));
-case "w":
-return String(_51.getDay());
-case "x":
-return dojo.date.format(_51,{selector:"dateOnly",locale:_53});
-case "X":
-return dojo.date.format(_51,{selector:"timeOnly",locale:_53});
-case "y":
-return _(_51.getFullYear()%100);
-case "Y":
-return String(_51.getFullYear());
-case "z":
-var _59=_51.getTimezoneOffset();
-return (_59>0?"-":"+")+_(Math.floor(Math.abs(_59)/60))+":"+_(Math.abs(_59)%60);
-case "Z":
-return dojo.date.getTimezoneName(_51);
-case "%":
-return "%";
-}
-}
-var _5a="";
-var i=0;
-var _5c=0;
-var _5d=null;
-while((_5c=_52.indexOf("%",i))!=-1){
-_5a+=_52.substring(i,_5c++);
-switch(_52.charAt(_5c++)){
-case "_":
-_54=" ";
-break;
-case "-":
-_54="";
-break;
-case "0":
-_54="0";
-break;
-case "^":
-_5d="upper";
-break;
-case "*":
-_5d="lower";
-break;
-case "#":
-_5d="swap";
-break;
-default:
-_54=null;
-_5c--;
-break;
-}
-var _5e=$(_52.charAt(_5c++));
-switch(_5d){
-case "upper":
-_5e=_5e.toUpperCase();
-break;
-case "lower":
-_5e=_5e.toLowerCase();
-break;
-case "swap":
-var _5f=_5e.toLowerCase();
-var _60="";
-var j=0;
-var ch="";
-while(j<_5e.length){
-ch=_5e.charAt(j);
-_60+=(ch==_5f.charAt(j))?ch.toUpperCase():ch.toLowerCase();
-j++;
-}
-_5e=_60;
-break;
-default:
-break;
-}
-_5d=null;
-_5a+=_5e;
-i=_5c;
-}
-_5a+=_52.substring(i);
-return _5a;
-};
-(function(){
-var _63=[];
-dojo.date.addCustomFormats=function(_64,_65){
-_63.push({pkg:_64,name:_65});
-};
-dojo.date._getGregorianBundle=function(_66){
-var _67={};
-dojo.lang.forEach(_63,function(_68){
-var _69=dojo.i18n.getLocalization(_68.pkg,_68.name,_66);
-_67=dojo.lang.mixin(_67,_69);
-},this);
-return _67;
-};
-})();
-dojo.date.addCustomFormats("dojo.i18n.calendar","gregorian");
-dojo.date.addCustomFormats("dojo.i18n.calendar","gregorianExtras");
-dojo.date.getNames=function(_6a,_6b,use,_6d){
-var _6e;
-var _6f=dojo.date._getGregorianBundle(_6d);
-var _70=[_6a,use,_6b];
-if(use=="standAlone"){
-_6e=_6f[_70.join("-")];
-}
-_70[1]="format";
-return (_6e||_6f[_70.join("-")]).concat();
-};
-dojo.date.getDayName=function(_71,_72){
-return dojo.date.getNames("days","wide","format",_72)[_71.getDay()];
-};
-dojo.date.getDayShortName=function(_73,_74){
-return dojo.date.getNames("days","abbr","format",_74)[_73.getDay()];
-};
-dojo.date.getMonthName=function(_75,_76){
-return dojo.date.getNames("months","wide","format",_76)[_75.getMonth()];
-};
-dojo.date.getMonthShortName=function(_77,_78){
-return dojo.date.getNames("months","abbr","format",_78)[_77.getMonth()];
-};
-dojo.date.toRelativeString=function(_79){
-var now=new Date();
-var _7b=(now-_79)/1000;
-var end=" ago";
-var _7d=false;
-if(_7b<0){
-_7d=true;
-end=" from now";
-_7b=-_7b;
-}
-if(_7b<60){
-_7b=Math.round(_7b);
-return _7b+" second"+(_7b==1?"":"s")+end;
-}
-if(_7b<60*60){
-_7b=Math.round(_7b/60);
-return _7b+" minute"+(_7b==1?"":"s")+end;
-}
-if(_7b<60*60*24){
-_7b=Math.round(_7b/3600);
-return _7b+" hour"+(_7b==1?"":"s")+end;
-}
-if(_7b<60*60*24*7){
-_7b=Math.round(_7b/(3600*24));
-if(_7b==1){
-return _7d?"Tomorrow":"Yesterday";
-}else{
-return _7b+" days"+end;
-}
-}
-return dojo.date.format(_79);
-};
-dojo.date.toSql=function(_7e,_7f){
-return dojo.date.strftime(_7e,"%F"+!_7f?" %T":"");
-};
-dojo.date.fromSql=function(_80){
-var _81=_80.split(/[\- :]/g);
-while(_81.length<6){
-_81.push(0);
-}
-return new Date(_81[0],(parseInt(_81[1],10)-1),_81[2],_81[3],_81[4],_81[5]);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/serialize.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/serialize.js
deleted file mode 100644
index a5a3e61..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/serialize.js
+++ /dev/null
@@ -1,116 +0,0 @@
-dojo.provide("dojo.date.serialize");
-dojo.require("dojo.string.common");
-dojo.date.setIso8601=function(_1,_2){
-var _3=(_2.indexOf("T")==-1)?_2.split(" "):_2.split("T");
-_1=dojo.date.setIso8601Date(_1,_3[0]);
-if(_3.length==2){
-_1=dojo.date.setIso8601Time(_1,_3[1]);
-}
-return _1;
-};
-dojo.date.fromIso8601=function(_4){
-return dojo.date.setIso8601(new Date(0,0),_4);
-};
-dojo.date.setIso8601Date=function(_5,_6){
-var _7="^([0-9]{4})((-?([0-9]{2})(-?([0-9]{2}))?)|"+"(-?([0-9]{3}))|(-?W([0-9]{2})(-?([1-7]))?))?$";
-var d=_6.match(new RegExp(_7));
-if(!d){
-dojo.debug("invalid date string: "+_6);
-return null;
-}
-var _9=d[1];
-var _a=d[4];
-var _b=d[6];
-var _c=d[8];
-var _d=d[10];
-var _e=d[12]?d[12]:1;
-_5.setFullYear(_9);
-if(_c){
-_5.setMonth(0);
-_5.setDate(Number(_c));
-}else{
-if(_d){
-_5.setMonth(0);
-_5.setDate(1);
-var gd=_5.getDay();
-var day=gd?gd:7;
-var _11=Number(_e)+(7*Number(_d));
-if(day<=4){
-_5.setDate(_11+1-day);
-}else{
-_5.setDate(_11+8-day);
-}
-}else{
-if(_a){
-_5.setDate(1);
-_5.setMonth(_a-1);
-}
-if(_b){
-_5.setDate(_b);
-}
-}
-}
-return _5;
-};
-dojo.date.fromIso8601Date=function(_12){
-return dojo.date.setIso8601Date(new Date(0,0),_12);
-};
-dojo.date.setIso8601Time=function(_13,_14){
-var _15="Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$";
-var d=_14.match(new RegExp(_15));
-var _17=0;
-if(d){
-if(d[0]!="Z"){
-_17=(Number(d[3])*60)+Number(d[5]);
-_17*=((d[2]=="-")?1:-1);
-}
-_17-=_13.getTimezoneOffset();
-_14=_14.substr(0,_14.length-d[0].length);
-}
-var _18="^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(.([0-9]+))?)?)?$";
-d=_14.match(new RegExp(_18));
-if(!d){
-dojo.debug("invalid time string: "+_14);
-return null;
-}
-var _19=d[1];
-var _1a=Number((d[3])?d[3]:0);
-var _1b=(d[5])?d[5]:0;
-var ms=d[7]?(Number("0."+d[7])*1000):0;
-_13.setHours(_19);
-_13.setMinutes(_1a);
-_13.setSeconds(_1b);
-_13.setMilliseconds(ms);
-if(_17!==0){
-_13.setTime(_13.getTime()+_17*60000);
-}
-return _13;
-};
-dojo.date.fromIso8601Time=function(_1d){
-return dojo.date.setIso8601Time(new Date(0,0),_1d);
-};
-dojo.date.toRfc3339=function(_1e,_1f){
-if(!_1e){
-_1e=new Date();
-}
-var _=dojo.string.pad;
-var _21=[];
-if(_1f!="timeOnly"){
-var _22=[_(_1e.getFullYear(),4),_(_1e.getMonth()+1,2),_(_1e.getDate(),2)].join("-");
-_21.push(_22);
-}
-if(_1f!="dateOnly"){
-var _23=[_(_1e.getHours(),2),_(_1e.getMinutes(),2),_(_1e.getSeconds(),2)].join(":");
-var _24=_1e.getTimezoneOffset();
-_23+=(_24>0?"-":"+")+_(Math.floor(Math.abs(_24)/60),2)+":"+_(Math.abs(_24)%60,2);
-_21.push(_23);
-}
-return _21.join("T");
-};
-dojo.date.fromRfc3339=function(_25){
-if(_25.indexOf("Tany")!=-1){
-_25=_25.replace("Tany","");
-}
-var _26=new Date();
-return dojo.date.setIso8601(_26,_25);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/supplemental.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/supplemental.js
deleted file mode 100644
index e747ca0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/date/supplemental.js
+++ /dev/null
@@ -1,34 +0,0 @@
-dojo.provide("dojo.date.supplemental");
-dojo.date.getFirstDayOfWeek=function(_1){
-var _2={mv:5,ae:6,af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,lb:6,ly:6,ma:6,om:6,qa:6,sa:6,sd:6,so:6,tn:6,ye:6,as:0,au:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,ie:0,il:0,is:0,jm:0,jp:0,kg:0,kr:0,la:0,mh:0,mo:0,mp:0,mt:0,nz:0,ph:0,pk:0,sg:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,vi:0,za:0,zw:0,et:0,mw:0,ng:0,tj:0,gb:0,sy:4};
-_1=dojo.hostenv.normalizeLocale(_1);
-var _3=_1.split("-")[1];
-var _4=_2[_3];
-return (typeof _4=="undefined")?1:_4;
-};
-dojo.date.getWeekend=function(_5){
-var _6={eg:5,il:5,sy:5,"in":0,ae:4,bh:4,dz:4,iq:4,jo:4,kw:4,lb:4,ly:4,ma:4,om:4,qa:4,sa:4,sd:4,tn:4,ye:4};
-var _7={ae:5,bh:5,dz:5,iq:5,jo:5,kw:5,lb:5,ly:5,ma:5,om:5,qa:5,sa:5,sd:5,tn:5,ye:5,af:5,ir:5,eg:6,il:6,sy:6};
-_5=dojo.hostenv.normalizeLocale(_5);
-var _8=_5.split("-")[1];
-var _9=_6[_8];
-var _a=_7[_8];
-if(typeof _9=="undefined"){
-_9=6;
-}
-if(typeof _a=="undefined"){
-_a=0;
-}
-return {start:_9,end:_a};
-};
-dojo.date.isWeekend=function(_b,_c){
-var _d=dojo.date.getWeekend(_c);
-var _e=(_b||new Date()).getDay();
-if(_d.end<_d.start){
-_d.end+=7;
-if(_e<_d.start){
-_e+=7;
-}
-}
-return _e>=_d.start&&_e<=_d.end;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug.js
deleted file mode 100644
index 961352e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug.js
+++ /dev/null
@@ -1,72 +0,0 @@
-dojo.provide("dojo.debug");
-dojo.debug=function(){
-if(!djConfig.isDebug){
-return;
-}
-var _1=arguments;
-if(dj_undef("println",dojo.hostenv)){
-dojo.raise("dojo.debug not available (yet?)");
-}
-var _2=dj_global["jum"]&&!dj_global["jum"].isBrowser;
-var s=[(_2?"":"DEBUG: ")];
-for(var i=0;i<_1.length;++i){
-if(!false&&_1[i]&&_1[i] instanceof Error){
-var _5="["+_1[i].name+": "+dojo.errorToString(_1[i])+(_1[i].fileName?", file: "+_1[i].fileName:"")+(_1[i].lineNumber?", line: "+_1[i].lineNumber:"")+"]";
-}else{
-try{
-var _5=String(_1[i]);
-}
-catch(e){
-if(dojo.render.html.ie){
-var _5="[ActiveXObject]";
-}else{
-var _5="[unknown]";
-}
-}
-}
-s.push(_5);
-}
-dojo.hostenv.println(s.join(" "));
-};
-dojo.debugShallow=function(_6){
-if(!djConfig.isDebug){
-return;
-}
-dojo.debug("------------------------------------------------------------");
-dojo.debug("Object: "+_6);
-var _7=[];
-for(var _8 in _6){
-try{
-_7.push(_8+": "+_6[_8]);
-}
-catch(E){
-_7.push(_8+": ERROR - "+E.message);
-}
-}
-_7.sort();
-for(var i=0;i<_7.length;i++){
-dojo.debug(_7[i]);
-}
-dojo.debug("------------------------------------------------------------");
-};
-dojo.debugDeep=function(_a){
-if(!djConfig.isDebug){
-return;
-}
-if(!dojo.uri||!dojo.uri.dojoUri){
-return dojo.debug("You'll need to load dojo.uri.* for deep debugging - sorry!");
-}
-if(!window.open){
-return dojo.debug("Deep debugging is only supported in host environments with window.open");
-}
-var _b=dojo.debugDeep.debugVars.length;
-dojo.debugDeep.debugVars.push(_a);
-var _c=(djConfig["dojoDebugDeepHtmlUrl"]||new dojo.uri.Uri(location,dojo.uri.moduleUri("dojo.debug","deep.html")).toString())+"?var="+_b;
-var _d=window.open(_c,"_blank","width=600, height=400, resizable=yes, scrollbars=yes, status=yes");
-try{
-_d.debugVar=_a;
-}
-catch(e){
-}
-};
-dojo.debugDeep.debugVars=[];
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/Firebug.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/Firebug.js
deleted file mode 100644
index 89a3b80..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/Firebug.js
+++ /dev/null
@@ -1,44 +0,0 @@
-dojo.provide("dojo.debug.Firebug");
-dojo.deprecated("dojo.debug.Firebug is slated for removal in 0.5; use dojo.debug.console instead.","0.5");
-if(dojo.render.html.moz){
-if(console&&console.log){
-var consoleLog=function(){
-if(!djConfig.isDebug){
-return;
-}
-var _1=dojo.lang.toArray(arguments);
-_1.splice(0,0,"DEBUG: ");
-console.log.apply(console,_1);
-};
-dojo.debug=consoleLog;
-dojo.debugDeep=consoleLog;
-dojo.debugShallow=function(_2){
-if(!djConfig.isDebug){
-return;
-}
-if(dojo.lang.isArray(_2)){
-console.log("Array: ",_2);
-for(var i=0;x<_2.length;i++){
-console.log("    ","["+i+"]",_2[i]);
-}
-}else{
-console.log("Object: ",_2);
-var _4=[];
-for(var _5 in _2){
-_4.push(_5);
-}
-_4.sort();
-dojo.lang.forEach(_4,function(_6){
-try{
-console.log("    ",_6,_2[_6]);
-}
-catch(e){
-console.log("    ",_6,"ERROR",e.message,e);
-}
-});
-}
-};
-}else{
-dojo.debug("dojo.debug.Firebug requires Firebug > 0.4");
-}
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/arrow_hide.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/arrow_hide.gif
deleted file mode 100644
index 8bd6b34..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/arrow_hide.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/arrow_show.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/arrow_show.gif
deleted file mode 100644
index 4246b50..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/arrow_show.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/console.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/console.js
deleted file mode 100644
index d38ace9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/console.js
+++ /dev/null
@@ -1,84 +0,0 @@
-dojo.provide("dojo.debug.console");
-dojo.require("dojo.logging.ConsoleLogger");
-if(window.console){
-if(console.info!=null){
-dojo.hostenv.println=function(){
-if(!djConfig.isDebug){
-return;
-}
-console.info.apply(console,arguments);
-};
-dojo.debug=dojo.hostenv.println;
-dojo.debugDeep=dojo.debug;
-dojo.debugShallow=function(_1,_2,_3){
-if(!djConfig.isDebug){
-return;
-}
-_2=(_2!=false);
-_3=(_3!=false);
-if(_1==null||_1.constructor==null){
-return dojo.debug(_1);
-}
-var _4=_1.declaredClass;
-if(_4==null){
-_4=_1.constructor.toString().match(/function\s*(.*)\(/);
-if(_4){
-_4=_4[1];
-}
-}
-if(_4){
-if(_4=="String"||_4=="Number"){
-return dojo.debug(_4+": ",_1);
-}
-if(_2&&!_3){
-var _5=_1;
-}else{
-var _6=[];
-if(_2){
-for(var _7 in _1){
-_6.push(_7);
-}
-}else{
-for(var _7 in _1){
-if(typeof _1[_7]!="function"){
-_6.push(_7);
-}else{
-dojo.debug(_7);
-}
-}
-}
-if(_3){
-_6.sort();
-}
-var _5={};
-dojo.lang.forEach(_6,function(_8){
-_5[_8]=_1[_8];
-});
-}
-return dojo.debug(_4+": %o\n%2.o",_1,_5);
-}
-return dojo.debug(_1.constructor+": ",_1);
-};
-}else{
-if(console.log!=null){
-dojo.hostenv.println=function(){
-if(!djConfig.isDebug){
-return;
-}
-var _9=dojo.lang.toArray(arguments);
-console.log("DEBUG: "+_9.join(" "));
-};
-dojo.debug=dojo.hostenv.println;
-}else{
-dojo.debug("dojo.debug.console requires Firebug > 0.4");
-}
-}
-}else{
-if(dojo.render.html.opera){
-if(opera&&opera.postError){
-dojo.hostenv.println=opera.postError;
-}else{
-dojo.debug("dojo.debug.Opera requires Opera > 8.0");
-}
-}
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/deep.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/deep.html
deleted file mode 100644
index 1a22fbf..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/deep.html
+++ /dev/null
@@ -1,362 +0,0 @@
-<html>
-<head>
-<title>Deep Debugger</title>
-<script>
-
-var tableRows = {};
-var tableCels = {};
-var tableObjs = {};
-var tablesBuilt = {};
-var tableShows = {};
-var tableHides = {};
-
-// IE: nodes w/id need to be redeclared or getElementById is b0rked
-var frame = null;
-
-window.onload = function(){
-	// if IE loads this page too quickly (instantly) then 
-	// window.debugVar might not have been set
-	window.setTimeout(startMeUp, 100);
-}
-
-function startMeUp(){
-	frame = document.getElementById('frame');
-	// GET string 
-	var index = location.search.split("=").pop();
-	var debugObj = window.opener.dojo.debugDeep;
-	var debugVar = debugObj.debugVars[index] || window.debugVar;
-	buildTable('root', frame, debugVar);
-}
-
-function buildTable(path, parent, obj){
-	var keys = [];
-	var vals = [];
-	for(var prop in obj){
-		keys.push(prop);
-		try {
-			vals[prop] = obj[prop];
-		} catch(E) {
-			vals[prop] = 'ERROR: ' + E.message;
-		}
-	}
-	keys.sort(keySorter);
-
-	if (!keys.length){
-
-		var div = document.createElement('div');
-		div.appendChild(document.createTextNode('Object has no properties.'));
-
-		parent.appendChild(div);
-		return;
-	}
-
-
-	var t = document.createElement('table');
-	t.border = "1";
-
-	var tb = document.createElement('tbody');
-	t.appendChild(tb);
-
-
-	for(var i = 0; i < keys.length; i++) {
-		buildTableRow(path+'-'+keys[i], tb, keys[i], vals[keys[i]]);
-	}
-
-	if (path == 'root'){
-		//t.style.width = '90%';
-	}
-	t.style.width = '100%';
-
-	parent.appendChild(t);
-
-	tablesBuilt[path] = true;
-}
-
-function buildTableRow(path, tb, name, value) {
-
-	var simpleType = typeof(value);
-	var createSubrow = (simpleType == 'object');
-	var complexType = simpleType;
-
-	if (simpleType == 'object'){
-		var cls = getConstructorClass(value);
-		if (cls){
-			if (cls == 'Object'){
-			}else if (cls == 'Array'){
-				complexType = 'array';
-			}else{
-				complexType += ' ('+cls+')';
-			}
-		}
-	}
-
-/*var tr1 = document.createElement('tr');
-	var td1 = document.createElement('td');
-	var td2 = document.createElement('td');
-	var td3 = document.createElement('td');
-	var td4 = document.createElement('td');*/
-
-	var row = tb.rows.length;
-	var tr1 = tb.insertRow(row++);
-	var td1 = tr1.insertCell(0);
-	var td2 = tr1.insertCell(1);
-	var td3 = tr1.insertCell(2);
-	var td4 = tr1.insertCell(3);
-	
-	tr1.style.verticalAlign = 'top';
-	td1.style.verticalAlign = 'middle';
-
-	td1.className = 'propPlus';
-	td2.className = 'propName';
-	td3.className = 'propType';
-	td4.className = 'propVal';
-
-	//tr1.appendChild(td1);
-	//tr1.appendChild(td2);
-	//tr1.appendChild(td3);
-	//tr1.appendChild(td4);
-
-	if (createSubrow){
-		var img1 = document.createElement('img');
-		img1.width = 9;
-		img1.height = 9;
-		img1.src = 'arrow_show.gif';
-		var a1 = document.createElement('a');
-		a1.appendChild(img1);
-		a1.href = '#';
-		a1.onclick = function(){ showTableRow(path); return false; };
-
-		var img2 = document.createElement('img');
-		img2.width = 9;
-		img2.height = 9;
-		img2.src = 'arrow_hide.gif';
-		var a2 = document.createElement('a');
-		a2.appendChild(img2);
-		a2.href = '#';
-		a2.onclick = function(){ hideTableRow(path); return false; };
-		a2.style.display = 'none';
-
-		tableShows[path] = a1;
-		tableHides[path] = a2;
-
-		td1.appendChild(a1);
-		td1.appendChild(a2);
-	}else{
-		var img = document.createElement('img');
-		img.width = 9;
-		img.height = 9;
-		img.src = 'spacer.gif';
-
-		td1.appendChild(img);
-	}
-
-	td2.appendChild(document.createTextNode(name));
-	td3.appendChild(document.createTextNode(complexType));
-	td4.appendChild(buildPreBlock(value));
-
-	//tb.appendChild(tr1);
-
-	if (createSubrow){
-		var tr2 = tb.insertRow(row++);
-		var td5 = tr2.insertCell(0);
-		var td6 = tr2.insertCell(1);
-		
-		//var tr2 = document.createElement('tr');
-		//var td5 = document.createElement('td');
-		//var td6 = document.createElement('td');
-
-		td5.innerHTML = '&nbsp;';
-		//td6.innerHTML = '&nbsp;';
-
-		td6.colSpan = '3';
-
-		tr2.appendChild(td5);
-		tr2.appendChild(td6);
-
-		tr2.style.display = 'none';
-
-		tb.appendChild(tr2);
-
-		tableRows[path] = tr2;
-		tableCels[path] = td6;
-		tableObjs[path] = value;
-	}
-}
-
-function showTableRow(path){
-
-	var tr = tableRows[path];
-	var td = tableCels[path];
-	var a1 = tableShows[path];
-	var a2 = tableHides[path];
-
-	if (!tablesBuilt[path]){
-
-		//alert('building table for '+path);
-		buildTable(path, td, tableObjs[path]);
-	}
-
-	tr.style.display = 'table-row';
-
-	a1.style.display = 'none';
-	a2.style.display = 'inline';
-}
-
-function hideTableRow(path){
-
-	var tr = tableRows[path];
-	var a1 = tableShows[path];
-	var a2 = tableHides[path];
-
-	tr.style.display = 'none';
-
-	a1.style.display = 'inline';
-	a2.style.display = 'none';
-}
-
-function buildPreBlock(value){
-
-	//
-	// how many lines ?
-	//
-
-	var s = ''+value;
-	s = s.replace("\r\n", "\n");
-	s = s.replace("\r", "");
-	var lines = s.split("\n");
-
-
-	if (lines.length < 2){
-
-		if (lines[0].length < 60){
-
-			var pre = document.createElement('pre');
-			pre.appendChild(document.createTextNode(s));
-			return pre;
-		}
-	}
-
-
-	//
-	// multiple lines :(
-	//
-
-	var preview = lines[0].substr(0, 60) + ' ...';
-
-	var pre1 = document.createElement('pre');
-	pre1.appendChild(document.createTextNode(preview));
-	pre1.className = 'clicky';
-
-	var pre2 = document.createElement('pre');
-	pre2.appendChild(document.createTextNode(s));
-	pre2.style.display = 'none';
-	pre2.className = 'clicky';
-
-	pre1.onclick = function(){
-		pre1.style.display = 'none';
-		pre2.style.display = 'block';
-	}
-
-	pre2.onclick = function(){
-		pre1.style.display = 'block';
-		pre2.style.display = 'none';
-	}
-
-	var pre = document.createElement('div');
-
-	pre.appendChild(pre1);
-	pre.appendChild(pre2);
-
-	return pre;
-}
-
-function getConstructorClass(obj){
-
-	if (!obj.constructor || !obj.constructor.toString) return;
-
-	var m = obj.constructor.toString().match(/function\s*(\w+)/);
-
-	if (m && m.length == 2) return m[1];
-
-	return null;
-}
-
-function keySorter(a, b){
-
-	if (a == parseInt(a) && b == parseInt(b)){
-
-		return (parseInt(a) > parseInt(b)) ? 1 : ((parseInt(a) < parseInt(b)) ? -1 : 0);
-	}
-
-	// sort by lowercase string
-
-	var a2 = String(a).toLowerCase();
-	var b2 = String(b).toLowerCase();
-
-	return (a2 > b2) ? 1 : ((a2 < b2) ? -1 : 0);
-}
-
-</script>
-<style>
-
-body {
-	font-family: arial, helvetica, sans-serif;
-}
-
-table {
-	border-width: 0px;
-	border-spacing: 1px;
-	border-collapse: separate;
-}
-
-td {
-	border-width: 0px;
-	padding: 2px;
-}
-
-img {
-	border: 0;
-}
-
-pre {
-	margin: 0;
-	padding: 0;
-	white-space: -moz-pre-wrap;  /* Mozilla, supported since 1999 */
-	white-space: -pre-wrap;      /* Opera 4 - 6 */
-	white-space: -o-pre-wrap;    /* Opera 7 */
-	white-space: pre-wrap;       /* CSS3 - Text module (Candidate Recommendation) http://www.w3.org/TR/css3-text/#white-space */
-	word-wrap: break-word;       /* IE 5.5+ */
-}
-
-pre.clicky {
-	cursor: hand;
-	cursor: pointer;
-}
-
-td.propPlus {
-	width: 9px;
-	background-color: #ddd;
-}
-
-td.propName {
-	background-color: #ddd;
-}
-
-td.propType {
-	background-color: #ddd;
-}
-
-td.propVal {
-	background-color: #ddd;
-}
-
-</style>
-</head>
-<body>
-
-<h2>Javascript Object Browser</h2>
-
-<div id="frame"></div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/spacer.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/spacer.gif
deleted file mode 100644
index 2ce50b5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/debug/spacer.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/DragAndDrop.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/DragAndDrop.js
deleted file mode 100644
index cec4e98..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/DragAndDrop.js
+++ /dev/null
@@ -1,63 +0,0 @@
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.declare");
-dojo.provide("dojo.dnd.DragAndDrop");
-dojo.declare("dojo.dnd.DragSource",null,{type:"",onDragEnd:function(_1){
-},onDragStart:function(_2){
-},onSelected:function(_3){
-},unregister:function(){
-dojo.dnd.dragManager.unregisterDragSource(this);
-},reregister:function(){
-dojo.dnd.dragManager.registerDragSource(this);
-}});
-dojo.declare("dojo.dnd.DragObject",null,{type:"",register:function(){
-var dm=dojo.dnd.dragManager;
-if(dm["registerDragObject"]){
-dm.registerDragObject(this);
-}
-},onDragStart:function(_5){
-},onDragMove:function(_6){
-},onDragOver:function(_7){
-},onDragOut:function(_8){
-},onDragEnd:function(_9){
-},onDragLeave:dojo.lang.forward("onDragOut"),onDragEnter:dojo.lang.forward("onDragOver"),ondragout:dojo.lang.forward("onDragOut"),ondragover:dojo.lang.forward("onDragOver")});
-dojo.declare("dojo.dnd.DropTarget",null,{acceptsType:function(_a){
-if(!dojo.lang.inArray(this.acceptedTypes,"*")){
-if(!dojo.lang.inArray(this.acceptedTypes,_a)){
-return false;
-}
-}
-return true;
-},accepts:function(_b){
-if(!dojo.lang.inArray(this.acceptedTypes,"*")){
-for(var i=0;i<_b.length;i++){
-if(!dojo.lang.inArray(this.acceptedTypes,_b[i].type)){
-return false;
-}
-}
-}
-return true;
-},unregister:function(){
-dojo.dnd.dragManager.unregisterDropTarget(this);
-},onDragOver:function(_d){
-},onDragOut:function(_e){
-},onDragMove:function(_f){
-},onDropStart:function(evt){
-},onDrop:function(evt){
-},onDropEnd:function(){
-}},function(){
-this.acceptedTypes=[];
-});
-dojo.dnd.DragEvent=function(){
-this.dragSource=null;
-this.dragObject=null;
-this.target=null;
-this.eventStatus="success";
-};
-dojo.declare("dojo.dnd.DragManager",null,{selectedSources:[],dragObjects:[],dragSources:[],registerDragSource:function(_12){
-},dropTargets:[],registerDropTarget:function(_13){
-},lastDragTarget:null,currentDragTarget:null,onKeyDown:function(){
-},onMouseOut:function(){
-},onMouseMove:function(){
-},onMouseUp:function(){
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragAndDrop.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragAndDrop.js
deleted file mode 100644
index 873d63f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragAndDrop.js
+++ /dev/null
@@ -1,356 +0,0 @@
-dojo.provide("dojo.dnd.HtmlDragAndDrop");
-dojo.require("dojo.dnd.HtmlDragManager");
-dojo.require("dojo.dnd.DragAndDrop");
-dojo.require("dojo.html.*");
-dojo.require("dojo.html.display");
-dojo.require("dojo.html.util");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.html.iframe");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lfx.*");
-dojo.require("dojo.event.*");
-dojo.declare("dojo.dnd.HtmlDragSource",dojo.dnd.DragSource,{dragClass:"",onDragStart:function(){
-var _1=new dojo.dnd.HtmlDragObject(this.dragObject,this.type);
-if(this.dragClass){
-_1.dragClass=this.dragClass;
-}
-if(this.constrainToContainer){
-_1.constrainTo(this.constrainingContainer||this.domNode.parentNode);
-}
-return _1;
-},setDragHandle:function(_2){
-_2=dojo.byId(_2);
-dojo.dnd.dragManager.unregisterDragSource(this);
-this.domNode=_2;
-dojo.dnd.dragManager.registerDragSource(this);
-},setDragTarget:function(_3){
-this.dragObject=_3;
-},constrainTo:function(_4){
-this.constrainToContainer=true;
-if(_4){
-this.constrainingContainer=_4;
-}
-},onSelected:function(){
-for(var i=0;i<this.dragObjects.length;i++){
-dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragSource(this.dragObjects[i]));
-}
-},addDragObjects:function(el){
-for(var i=0;i<arguments.length;i++){
-this.dragObjects.push(dojo.byId(arguments[i]));
-}
-}},function(_8,_9){
-_8=dojo.byId(_8);
-this.dragObjects=[];
-this.constrainToContainer=false;
-if(_8){
-this.domNode=_8;
-this.dragObject=_8;
-this.type=(_9)||(this.domNode.nodeName.toLowerCase());
-dojo.dnd.DragSource.prototype.reregister.call(this);
-}
-});
-dojo.declare("dojo.dnd.HtmlDragObject",dojo.dnd.DragObject,{dragClass:"",opacity:0.5,createIframe:true,disableX:false,disableY:false,createDragNode:function(){
-var _a=this.domNode.cloneNode(true);
-if(this.dragClass){
-dojo.html.addClass(_a,this.dragClass);
-}
-if(this.opacity<1){
-dojo.html.setOpacity(_a,this.opacity);
-}
-var _b=_a.tagName.toLowerCase();
-var _c=(_b=="tr");
-if((_c)||(_b=="tbody")){
-var _d=this.domNode.ownerDocument;
-var _e=_d.createElement("table");
-if(_c){
-var _f=_d.createElement("tbody");
-_e.appendChild(_f);
-_f.appendChild(_a);
-}else{
-_e.appendChild(_a);
-}
-var _10=((_c)?this.domNode:this.domNode.firstChild);
-var _11=((_c)?_a:_a.firstChild);
-var _12=_10.childNodes;
-var _13=_11.childNodes;
-for(var i=0;i<_12.length;i++){
-if((_13[i])&&(_13[i].style)){
-_13[i].style.width=dojo.html.getContentBox(_12[i]).width+"px";
-}
-}
-_a=_e;
-}
-if((dojo.render.html.ie55||dojo.render.html.ie60)&&this.createIframe){
-with(_a.style){
-top="0px";
-left="0px";
-}
-var _15=document.createElement("div");
-_15.appendChild(_a);
-this.bgIframe=new dojo.html.BackgroundIframe(_15);
-_15.appendChild(this.bgIframe.iframe);
-_a=_15;
-}
-_a.style.zIndex=999;
-return _a;
-},onDragStart:function(e){
-dojo.html.clearSelection();
-this.scrollOffset=dojo.html.getScroll().offset;
-this.dragStartPosition=dojo.html.getAbsolutePosition(this.domNode,true);
-this.dragOffset={y:this.dragStartPosition.y-e.pageY,x:this.dragStartPosition.x-e.pageX};
-this.dragClone=this.createDragNode();
-this.containingBlockPosition=this.domNode.offsetParent?dojo.html.getAbsolutePosition(this.domNode.offsetParent,true):{x:0,y:0};
-if(this.constrainToContainer){
-this.constraints=this.getConstraints();
-}
-with(this.dragClone.style){
-position="absolute";
-top=this.dragOffset.y+e.pageY+"px";
-left=this.dragOffset.x+e.pageX+"px";
-}
-dojo.body().appendChild(this.dragClone);
-dojo.event.topic.publish("dragStart",{source:this});
-},getConstraints:function(){
-if(this.constrainingContainer.nodeName.toLowerCase()=="body"){
-var _17=dojo.html.getViewport();
-var _18=_17.width;
-var _19=_17.height;
-var _1a=dojo.html.getScroll().offset;
-var x=_1a.x;
-var y=_1a.y;
-}else{
-var _1d=dojo.html.getContentBox(this.constrainingContainer);
-_18=_1d.width;
-_19=_1d.height;
-x=this.containingBlockPosition.x+dojo.html.getPixelValue(this.constrainingContainer,"padding-left",true)+dojo.html.getBorderExtent(this.constrainingContainer,"left");
-y=this.containingBlockPosition.y+dojo.html.getPixelValue(this.constrainingContainer,"padding-top",true)+dojo.html.getBorderExtent(this.constrainingContainer,"top");
-}
-var mb=dojo.html.getMarginBox(this.domNode);
-return {minX:x,minY:y,maxX:x+_18-mb.width,maxY:y+_19-mb.height};
-},updateDragOffset:function(){
-var _1f=dojo.html.getScroll().offset;
-if(_1f.y!=this.scrollOffset.y){
-var _20=_1f.y-this.scrollOffset.y;
-this.dragOffset.y+=_20;
-this.scrollOffset.y=_1f.y;
-}
-if(_1f.x!=this.scrollOffset.x){
-var _20=_1f.x-this.scrollOffset.x;
-this.dragOffset.x+=_20;
-this.scrollOffset.x=_1f.x;
-}
-},onDragMove:function(e){
-this.updateDragOffset();
-var x=this.dragOffset.x+e.pageX;
-var y=this.dragOffset.y+e.pageY;
-if(this.constrainToContainer){
-if(x<this.constraints.minX){
-x=this.constraints.minX;
-}
-if(y<this.constraints.minY){
-y=this.constraints.minY;
-}
-if(x>this.constraints.maxX){
-x=this.constraints.maxX;
-}
-if(y>this.constraints.maxY){
-y=this.constraints.maxY;
-}
-}
-this.setAbsolutePosition(x,y);
-dojo.event.topic.publish("dragMove",{source:this});
-},setAbsolutePosition:function(x,y){
-if(!this.disableY){
-this.dragClone.style.top=y+"px";
-}
-if(!this.disableX){
-this.dragClone.style.left=x+"px";
-}
-},onDragEnd:function(e){
-switch(e.dragStatus){
-case "dropSuccess":
-dojo.html.removeNode(this.dragClone);
-this.dragClone=null;
-break;
-case "dropFailure":
-var _27=dojo.html.getAbsolutePosition(this.dragClone,true);
-var _28={left:this.dragStartPosition.x+1,top:this.dragStartPosition.y+1};
-var _29=dojo.lfx.slideTo(this.dragClone,_28,300);
-var _2a=this;
-dojo.event.connect(_29,"onEnd",function(e){
-dojo.html.removeNode(_2a.dragClone);
-_2a.dragClone=null;
-});
-_29.play();
-break;
-}
-dojo.event.topic.publish("dragEnd",{source:this});
-},constrainTo:function(_2c){
-this.constrainToContainer=true;
-if(_2c){
-this.constrainingContainer=_2c;
-}else{
-this.constrainingContainer=this.domNode.parentNode;
-}
-}},function(_2d,_2e){
-this.domNode=dojo.byId(_2d);
-this.type=_2e;
-this.constrainToContainer=false;
-this.dragSource=null;
-dojo.dnd.DragObject.prototype.register.call(this);
-});
-dojo.declare("dojo.dnd.HtmlDropTarget",dojo.dnd.DropTarget,{vertical:false,onDragOver:function(e){
-if(!this.accepts(e.dragObjects)){
-return false;
-}
-this.childBoxes=[];
-for(var i=0,_31;i<this.domNode.childNodes.length;i++){
-_31=this.domNode.childNodes[i];
-if(_31.nodeType!=dojo.html.ELEMENT_NODE){
-continue;
-}
-var pos=dojo.html.getAbsolutePosition(_31,true);
-var _33=dojo.html.getBorderBox(_31);
-this.childBoxes.push({top:pos.y,bottom:pos.y+_33.height,left:pos.x,right:pos.x+_33.width,height:_33.height,width:_33.width,node:_31});
-}
-return true;
-},_getNodeUnderMouse:function(e){
-for(var i=0,_36;i<this.childBoxes.length;i++){
-with(this.childBoxes[i]){
-if(e.pageX>=left&&e.pageX<=right&&e.pageY>=top&&e.pageY<=bottom){
-return i;
-}
-}
-}
-return -1;
-},createDropIndicator:function(){
-this.dropIndicator=document.createElement("div");
-with(this.dropIndicator.style){
-position="absolute";
-zIndex=999;
-if(this.vertical){
-borderLeftWidth="1px";
-borderLeftColor="black";
-borderLeftStyle="solid";
-height=dojo.html.getBorderBox(this.domNode).height+"px";
-top=dojo.html.getAbsolutePosition(this.domNode,true).y+"px";
-}else{
-borderTopWidth="1px";
-borderTopColor="black";
-borderTopStyle="solid";
-width=dojo.html.getBorderBox(this.domNode).width+"px";
-left=dojo.html.getAbsolutePosition(this.domNode,true).x+"px";
-}
-}
-},onDragMove:function(e,_38){
-var i=this._getNodeUnderMouse(e);
-if(!this.dropIndicator){
-this.createDropIndicator();
-}
-var _3a=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
-var _3b=false;
-if(i<0){
-if(this.childBoxes.length){
-var _3c=(dojo.html.gravity(this.childBoxes[0].node,e)&_3a);
-if(_3c){
-_3b=true;
-}
-}else{
-var _3c=true;
-}
-}else{
-var _3d=this.childBoxes[i];
-var _3c=(dojo.html.gravity(_3d.node,e)&_3a);
-if(_3d.node===_38[0].dragSource.domNode){
-_3b=true;
-}else{
-var _3e=_3c?(i>0?this.childBoxes[i-1]:_3d):(i<this.childBoxes.length-1?this.childBoxes[i+1]:_3d);
-if(_3e.node===_38[0].dragSource.domNode){
-_3b=true;
-}
-}
-}
-if(_3b){
-this.dropIndicator.style.display="none";
-return;
-}else{
-this.dropIndicator.style.display="";
-}
-this.placeIndicator(e,_38,i,_3c);
-if(!dojo.html.hasParent(this.dropIndicator)){
-dojo.body().appendChild(this.dropIndicator);
-}
-},placeIndicator:function(e,_40,_41,_42){
-var _43=this.vertical?"left":"top";
-var _44;
-if(_41<0){
-if(this.childBoxes.length){
-_44=_42?this.childBoxes[0]:this.childBoxes[this.childBoxes.length-1];
-}else{
-this.dropIndicator.style[_43]=dojo.html.getAbsolutePosition(this.domNode,true)[this.vertical?"x":"y"]+"px";
-}
-}else{
-_44=this.childBoxes[_41];
-}
-if(_44){
-this.dropIndicator.style[_43]=(_42?_44[_43]:_44[this.vertical?"right":"bottom"])+"px";
-if(this.vertical){
-this.dropIndicator.style.height=_44.height+"px";
-this.dropIndicator.style.top=_44.top+"px";
-}else{
-this.dropIndicator.style.width=_44.width+"px";
-this.dropIndicator.style.left=_44.left+"px";
-}
-}
-},onDragOut:function(e){
-if(this.dropIndicator){
-dojo.html.removeNode(this.dropIndicator);
-delete this.dropIndicator;
-}
-},onDrop:function(e){
-this.onDragOut(e);
-var i=this._getNodeUnderMouse(e);
-var _48=this.vertical?dojo.html.gravity.WEST:dojo.html.gravity.NORTH;
-if(i<0){
-if(this.childBoxes.length){
-if(dojo.html.gravity(this.childBoxes[0].node,e)&_48){
-return this.insert(e,this.childBoxes[0].node,"before");
-}else{
-return this.insert(e,this.childBoxes[this.childBoxes.length-1].node,"after");
-}
-}
-return this.insert(e,this.domNode,"append");
-}
-var _49=this.childBoxes[i];
-if(dojo.html.gravity(_49.node,e)&_48){
-return this.insert(e,_49.node,"before");
-}else{
-return this.insert(e,_49.node,"after");
-}
-},insert:function(e,_4b,_4c){
-var _4d=e.dragObject.domNode;
-if(_4c=="before"){
-return dojo.html.insertBefore(_4d,_4b);
-}else{
-if(_4c=="after"){
-return dojo.html.insertAfter(_4d,_4b);
-}else{
-if(_4c=="append"){
-_4b.appendChild(_4d);
-return true;
-}
-}
-}
-return false;
-}},function(_4e,_4f){
-if(arguments.length==0){
-return;
-}
-this.domNode=dojo.byId(_4e);
-dojo.dnd.DropTarget.call(this);
-if(_4f&&dojo.lang.isString(_4f)){
-_4f=[_4f];
-}
-this.acceptedTypes=_4f||[];
-dojo.dnd.dragManager.registerDropTarget(this);
-});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragCopy.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragCopy.js
deleted file mode 100644
index e386c6a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragCopy.js
+++ /dev/null
@@ -1,57 +0,0 @@
-dojo.provide("dojo.dnd.HtmlDragCopy");
-dojo.require("dojo.dnd.*");
-dojo.declare("dojo.dnd.HtmlDragCopySource",dojo.dnd.HtmlDragSource,function(_1,_2,_3){
-this.copyOnce=_3;
-this.makeCopy=true;
-},{onDragStart:function(){
-var _4=new dojo.dnd.HtmlDragCopyObject(this.dragObject,this.type,this);
-if(this.dragClass){
-_4.dragClass=this.dragClass;
-}
-if(this.constrainToContainer){
-_4.constrainTo(this.constrainingContainer||this.domNode.parentNode);
-}
-return _4;
-},onSelected:function(){
-for(var i=0;i<this.dragObjects.length;i++){
-dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragCopySource(this.dragObjects[i]));
-}
-}});
-dojo.declare("dojo.dnd.HtmlDragCopyObject",dojo.dnd.HtmlDragObject,function(_6,_7,_8){
-this.copySource=_8;
-},{onDragStart:function(e){
-dojo.dnd.HtmlDragCopyObject.superclass.onDragStart.apply(this,arguments);
-if(this.copySource.makeCopy){
-this.sourceNode=this.domNode;
-this.domNode=this.domNode.cloneNode(true);
-}
-},onDragEnd:function(e){
-switch(e.dragStatus){
-case "dropFailure":
-var _b=dojo.html.getAbsolutePosition(this.dragClone,true);
-var _c={left:this.dragStartPosition.x+1,top:this.dragStartPosition.y+1};
-var _d=dojo.lfx.slideTo(this.dragClone,_c,500,dojo.lfx.easeOut);
-var _e=this;
-dojo.event.connect(_d,"onEnd",function(e){
-dojo.lang.setTimeout(function(){
-dojo.html.removeNode(_e.dragClone);
-_e.dragClone=null;
-if(_e.copySource.makeCopy){
-dojo.html.removeNode(_e.domNode);
-_e.domNode=_e.sourceNode;
-_e.sourceNode=null;
-}
-},200);
-});
-_d.play();
-dojo.event.topic.publish("dragEnd",{source:this});
-return;
-}
-dojo.dnd.HtmlDragCopyObject.superclass.onDragEnd.apply(this,arguments);
-this.copySource.dragObject=this.domNode;
-if(this.copySource.copyOnce){
-this.copySource.makeCopy=false;
-}
-new dojo.dnd.HtmlDragCopySource(this.sourceNode,this.type,this.copySource.copyOnce);
-this.sourceNode=null;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragManager.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragManager.js
deleted file mode 100644
index d00eb03..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragManager.js
+++ /dev/null
@@ -1,282 +0,0 @@
-dojo.provide("dojo.dnd.HtmlDragManager");
-dojo.require("dojo.dnd.DragAndDrop");
-dojo.require("dojo.event.*");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.html.common");
-dojo.require("dojo.html.layout");
-dojo.declare("dojo.dnd.HtmlDragManager",dojo.dnd.DragManager,{disabled:false,nestedTargets:false,mouseDownTimer:null,dsCounter:0,dsPrefix:"dojoDragSource",dropTargetDimensions:[],currentDropTarget:null,previousDropTarget:null,_dragTriggered:false,selectedSources:[],dragObjects:[],dragSources:[],dropTargets:[],currentX:null,currentY:null,lastX:null,lastY:null,mouseDownX:null,mouseDownY:null,threshold:7,dropAcceptable:false,cancelEvent:function(e){
-e.stopPropagation();
-e.preventDefault();
-},registerDragSource:function(ds){
-if(ds["domNode"]){
-var dp=this.dsPrefix;
-var _4=dp+"Idx_"+(this.dsCounter++);
-ds.dragSourceId=_4;
-this.dragSources[_4]=ds;
-ds.domNode.setAttribute(dp,_4);
-if(dojo.render.html.ie){
-dojo.event.browser.addListener(ds.domNode,"ondragstart",this.cancelEvent);
-}
-}
-},unregisterDragSource:function(ds){
-if(ds["domNode"]){
-var dp=this.dsPrefix;
-var _7=ds.dragSourceId;
-delete ds.dragSourceId;
-delete this.dragSources[_7];
-ds.domNode.setAttribute(dp,null);
-if(dojo.render.html.ie){
-dojo.event.browser.removeListener(ds.domNode,"ondragstart",this.cancelEvent);
-}
-}
-},registerDropTarget:function(dt){
-this.dropTargets.push(dt);
-},unregisterDropTarget:function(dt){
-var _a=dojo.lang.find(this.dropTargets,dt,true);
-if(_a>=0){
-this.dropTargets.splice(_a,1);
-}
-},getDragSource:function(e){
-var tn=e.target;
-if(tn===dojo.body()){
-return;
-}
-var ta=dojo.html.getAttribute(tn,this.dsPrefix);
-while((!ta)&&(tn)){
-tn=tn.parentNode;
-if((!tn)||(tn===dojo.body())){
-return;
-}
-ta=dojo.html.getAttribute(tn,this.dsPrefix);
-}
-return this.dragSources[ta];
-},onKeyDown:function(e){
-},onMouseDown:function(e){
-if(this.disabled){
-return;
-}
-if(dojo.render.html.ie){
-if(e.button!=1){
-return;
-}
-}else{
-if(e.which!=1){
-return;
-}
-}
-var _10=e.target.nodeType==dojo.html.TEXT_NODE?e.target.parentNode:e.target;
-if(dojo.html.isTag(_10,"button","textarea","input","select","option")){
-return;
-}
-var ds=this.getDragSource(e);
-if(!ds){
-return;
-}
-if(!dojo.lang.inArray(this.selectedSources,ds)){
-this.selectedSources.push(ds);
-ds.onSelected();
-}
-this.mouseDownX=e.pageX;
-this.mouseDownY=e.pageY;
-e.preventDefault();
-dojo.event.connect(document,"onmousemove",this,"onMouseMove");
-},onMouseUp:function(e,_13){
-if(this.selectedSources.length==0){
-return;
-}
-this.mouseDownX=null;
-this.mouseDownY=null;
-this._dragTriggered=false;
-e.dragSource=this.dragSource;
-if((!e.shiftKey)&&(!e.ctrlKey)){
-if(this.currentDropTarget){
-this.currentDropTarget.onDropStart();
-}
-dojo.lang.forEach(this.dragObjects,function(_14){
-var ret=null;
-if(!_14){
-return;
-}
-if(this.currentDropTarget){
-e.dragObject=_14;
-var ce=this.currentDropTarget.domNode.childNodes;
-if(ce.length>0){
-e.dropTarget=ce[0];
-while(e.dropTarget==_14.domNode){
-e.dropTarget=e.dropTarget.nextSibling;
-}
-}else{
-e.dropTarget=this.currentDropTarget.domNode;
-}
-if(this.dropAcceptable){
-ret=this.currentDropTarget.onDrop(e);
-}else{
-this.currentDropTarget.onDragOut(e);
-}
-}
-e.dragStatus=this.dropAcceptable&&ret?"dropSuccess":"dropFailure";
-dojo.lang.delayThese([function(){
-try{
-_14.dragSource.onDragEnd(e);
-}
-catch(err){
-var _17={};
-for(var i in e){
-if(i=="type"){
-_17.type="mouseup";
-continue;
-}
-_17[i]=e[i];
-}
-_14.dragSource.onDragEnd(_17);
-}
-},function(){
-_14.onDragEnd(e);
-}]);
-},this);
-this.selectedSources=[];
-this.dragObjects=[];
-this.dragSource=null;
-if(this.currentDropTarget){
-this.currentDropTarget.onDropEnd();
-}
-}else{
-}
-dojo.event.disconnect(document,"onmousemove",this,"onMouseMove");
-this.currentDropTarget=null;
-},onScroll:function(){
-for(var i=0;i<this.dragObjects.length;i++){
-if(this.dragObjects[i].updateDragOffset){
-this.dragObjects[i].updateDragOffset();
-}
-}
-if(this.dragObjects.length){
-this.cacheTargetLocations();
-}
-},_dragStartDistance:function(x,y){
-if((!this.mouseDownX)||(!this.mouseDownX)){
-return;
-}
-var dx=Math.abs(x-this.mouseDownX);
-var dx2=dx*dx;
-var dy=Math.abs(y-this.mouseDownY);
-var dy2=dy*dy;
-return parseInt(Math.sqrt(dx2+dy2),10);
-},cacheTargetLocations:function(){
-dojo.profile.start("cacheTargetLocations");
-this.dropTargetDimensions=[];
-dojo.lang.forEach(this.dropTargets,function(_20){
-var tn=_20.domNode;
-if(!tn||!_20.accepts([this.dragSource])){
-return;
-}
-var abs=dojo.html.getAbsolutePosition(tn,true);
-var bb=dojo.html.getBorderBox(tn);
-this.dropTargetDimensions.push([[abs.x,abs.y],[abs.x+bb.width,abs.y+bb.height],_20]);
-},this);
-dojo.profile.end("cacheTargetLocations");
-},onMouseMove:function(e){
-if((dojo.render.html.ie)&&(e.button!=1)){
-this.currentDropTarget=null;
-this.onMouseUp(e,true);
-return;
-}
-if((this.selectedSources.length)&&(!this.dragObjects.length)){
-var dx;
-var dy;
-if(!this._dragTriggered){
-this._dragTriggered=(this._dragStartDistance(e.pageX,e.pageY)>this.threshold);
-if(!this._dragTriggered){
-return;
-}
-dx=e.pageX-this.mouseDownX;
-dy=e.pageY-this.mouseDownY;
-}
-this.dragSource=this.selectedSources[0];
-dojo.lang.forEach(this.selectedSources,function(_27){
-if(!_27){
-return;
-}
-var tdo=_27.onDragStart(e);
-if(tdo){
-tdo.onDragStart(e);
-tdo.dragOffset.y+=dy;
-tdo.dragOffset.x+=dx;
-tdo.dragSource=_27;
-this.dragObjects.push(tdo);
-}
-},this);
-this.previousDropTarget=null;
-this.cacheTargetLocations();
-}
-dojo.lang.forEach(this.dragObjects,function(_29){
-if(_29){
-_29.onDragMove(e);
-}
-});
-if(this.currentDropTarget){
-var c=dojo.html.toCoordinateObject(this.currentDropTarget.domNode,true);
-var dtp=[[c.x,c.y],[c.x+c.width,c.y+c.height]];
-}
-if((!this.nestedTargets)&&(dtp)&&(this.isInsideBox(e,dtp))){
-if(this.dropAcceptable){
-this.currentDropTarget.onDragMove(e,this.dragObjects);
-}
-}else{
-var _2c=this.findBestTarget(e);
-if(_2c.target===null){
-if(this.currentDropTarget){
-this.currentDropTarget.onDragOut(e);
-this.previousDropTarget=this.currentDropTarget;
-this.currentDropTarget=null;
-}
-this.dropAcceptable=false;
-return;
-}
-if(this.currentDropTarget!==_2c.target){
-if(this.currentDropTarget){
-this.previousDropTarget=this.currentDropTarget;
-this.currentDropTarget.onDragOut(e);
-}
-this.currentDropTarget=_2c.target;
-e.dragObjects=this.dragObjects;
-this.dropAcceptable=this.currentDropTarget.onDragOver(e);
-}else{
-if(this.dropAcceptable){
-this.currentDropTarget.onDragMove(e,this.dragObjects);
-}
-}
-}
-},findBestTarget:function(e){
-var _2e=this;
-var _2f=new Object();
-_2f.target=null;
-_2f.points=null;
-dojo.lang.every(this.dropTargetDimensions,function(_30){
-if(!_2e.isInsideBox(e,_30)){
-return true;
-}
-_2f.target=_30[2];
-_2f.points=_30;
-return Boolean(_2e.nestedTargets);
-});
-return _2f;
-},isInsideBox:function(e,_32){
-if((e.pageX>_32[0][0])&&(e.pageX<_32[1][0])&&(e.pageY>_32[0][1])&&(e.pageY<_32[1][1])){
-return true;
-}
-return false;
-},onMouseOver:function(e){
-},onMouseOut:function(e){
-}});
-dojo.dnd.dragManager=new dojo.dnd.HtmlDragManager();
-(function(){
-var d=document;
-var dm=dojo.dnd.dragManager;
-dojo.event.connect(d,"onkeydown",dm,"onKeyDown");
-dojo.event.connect(d,"onmouseover",dm,"onMouseOver");
-dojo.event.connect(d,"onmouseout",dm,"onMouseOut");
-dojo.event.connect(d,"onmousedown",dm,"onMouseDown");
-dojo.event.connect(d,"onmouseup",dm,"onMouseUp");
-dojo.event.connect(window,"onscroll",dm,"onScroll");
-})();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragMove.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragMove.js
deleted file mode 100644
index 2c1dac1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/HtmlDragMove.js
+++ /dev/null
@@ -1,41 +0,0 @@
-dojo.provide("dojo.dnd.HtmlDragMove");
-dojo.require("dojo.dnd.*");
-dojo.declare("dojo.dnd.HtmlDragMoveSource",dojo.dnd.HtmlDragSource,{onDragStart:function(){
-var _1=new dojo.dnd.HtmlDragMoveObject(this.dragObject,this.type);
-if(this.constrainToContainer){
-_1.constrainTo(this.constrainingContainer);
-}
-return _1;
-},onSelected:function(){
-for(var i=0;i<this.dragObjects.length;i++){
-dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragMoveSource(this.dragObjects[i]));
-}
-}});
-dojo.declare("dojo.dnd.HtmlDragMoveObject",dojo.dnd.HtmlDragObject,{onDragStart:function(e){
-dojo.html.clearSelection();
-this.dragClone=this.domNode;
-if(dojo.html.getComputedStyle(this.domNode,"position")!="absolute"){
-this.domNode.style.position="relative";
-}
-var _4=parseInt(dojo.html.getComputedStyle(this.domNode,"left"));
-var _5=parseInt(dojo.html.getComputedStyle(this.domNode,"top"));
-this.dragStartPosition={x:isNaN(_4)?0:_4,y:isNaN(_5)?0:_5};
-this.scrollOffset=dojo.html.getScroll().offset;
-this.dragOffset={y:this.dragStartPosition.y-e.pageY,x:this.dragStartPosition.x-e.pageX};
-this.containingBlockPosition={x:0,y:0};
-if(this.constrainToContainer){
-this.constraints=this.getConstraints();
-}
-dojo.event.connect(this.domNode,"onclick",this,"_squelchOnClick");
-},onDragEnd:function(e){
-},setAbsolutePosition:function(x,y){
-if(!this.disableY){
-this.domNode.style.top=y+"px";
-}
-if(!this.disableX){
-this.domNode.style.left=x+"px";
-}
-},_squelchOnClick:function(e){
-dojo.event.browser.stopEvent(e);
-dojo.event.disconnect(this.domNode,"onclick",this,"_squelchOnClick");
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/Sortable.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/Sortable.js
deleted file mode 100644
index aec0075..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/Sortable.js
+++ /dev/null
@@ -1,11 +0,0 @@
-dojo.provide("dojo.dnd.Sortable");
-dojo.require("dojo.dnd.*");
-dojo.dnd.Sortable=function(){
-};
-dojo.lang.extend(dojo.dnd.Sortable,{ondragstart:function(e){
-var _2=e.target;
-while(_2.parentNode&&_2.parentNode!=this){
-_2=_2.parentNode;
-}
-return _2;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/TreeDragAndDrop.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/TreeDragAndDrop.js
deleted file mode 100644
index b75953c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/TreeDragAndDrop.js
+++ /dev/null
@@ -1,240 +0,0 @@
-dojo.provide("dojo.dnd.TreeDragAndDrop");
-dojo.require("dojo.dnd.HtmlDragAndDrop");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.html.layout");
-dojo.dnd.TreeDragSource=function(_1,_2,_3,_4){
-this.controller=_2;
-this.treeNode=_4;
-dojo.dnd.HtmlDragSource.call(this,_1,_3);
-};
-dojo.inherits(dojo.dnd.TreeDragSource,dojo.dnd.HtmlDragSource);
-dojo.lang.extend(dojo.dnd.TreeDragSource,{onDragStart:function(){
-var _5=dojo.dnd.HtmlDragSource.prototype.onDragStart.call(this);
-_5.treeNode=this.treeNode;
-_5.onDragStart=dojo.lang.hitch(_5,function(e){
-this.savedSelectedNode=this.treeNode.tree.selector.selectedNode;
-if(this.savedSelectedNode){
-this.savedSelectedNode.unMarkSelected();
-}
-var _7=dojo.dnd.HtmlDragObject.prototype.onDragStart.apply(this,arguments);
-var _8=this.dragClone.getElementsByTagName("img");
-for(var i=0;i<_8.length;i++){
-_8.item(i).style.backgroundImage="url()";
-}
-return _7;
-});
-_5.onDragEnd=function(e){
-if(this.savedSelectedNode){
-this.savedSelectedNode.markSelected();
-}
-return dojo.dnd.HtmlDragObject.prototype.onDragEnd.apply(this,arguments);
-};
-return _5;
-},onDragEnd:function(e){
-var _c=dojo.dnd.HtmlDragSource.prototype.onDragEnd.call(this,e);
-return _c;
-}});
-dojo.dnd.TreeDropTarget=function(_d,_e,_f,_10){
-this.treeNode=_10;
-this.controller=_e;
-dojo.dnd.HtmlDropTarget.apply(this,[_d,_f]);
-};
-dojo.inherits(dojo.dnd.TreeDropTarget,dojo.dnd.HtmlDropTarget);
-dojo.lang.extend(dojo.dnd.TreeDropTarget,{autoExpandDelay:1500,autoExpandTimer:null,position:null,indicatorStyle:"2px black solid",showIndicator:function(_11){
-if(this.position==_11){
-return;
-}
-this.hideIndicator();
-this.position=_11;
-if(_11=="before"){
-this.treeNode.labelNode.style.borderTop=this.indicatorStyle;
-}else{
-if(_11=="after"){
-this.treeNode.labelNode.style.borderBottom=this.indicatorStyle;
-}else{
-if(_11=="onto"){
-this.treeNode.markSelected();
-}
-}
-}
-},hideIndicator:function(){
-this.treeNode.labelNode.style.borderBottom="";
-this.treeNode.labelNode.style.borderTop="";
-this.treeNode.unMarkSelected();
-this.position=null;
-},onDragOver:function(e){
-var _13=dojo.dnd.HtmlDropTarget.prototype.onDragOver.apply(this,arguments);
-if(_13&&this.treeNode.isFolder&&!this.treeNode.isExpanded){
-this.setAutoExpandTimer();
-}
-return _13;
-},accepts:function(_14){
-var _15=dojo.dnd.HtmlDropTarget.prototype.accepts.apply(this,arguments);
-if(!_15){
-return false;
-}
-var _16=_14[0].treeNode;
-if(dojo.lang.isUndefined(_16)||!_16||!_16.isTreeNode){
-dojo.raise("Source is not TreeNode or not found");
-}
-if(_16===this.treeNode){
-return false;
-}
-return true;
-},setAutoExpandTimer:function(){
-var _17=this;
-var _18=function(){
-if(dojo.dnd.dragManager.currentDropTarget===_17){
-_17.controller.expand(_17.treeNode);
-}
-};
-this.autoExpandTimer=dojo.lang.setTimeout(_18,_17.autoExpandDelay);
-},getDNDMode:function(){
-return this.treeNode.tree.DNDMode;
-},getAcceptPosition:function(e,_1a){
-var _1b=this.getDNDMode();
-if(_1b&dojo.widget.Tree.prototype.DNDModes.ONTO&&!(!this.treeNode.actionIsDisabled(dojo.widget.TreeNode.prototype.actions.ADDCHILD)&&_1a.parent!==this.treeNode&&this.controller.canMove(_1a,this.treeNode))){
-_1b&=~dojo.widget.Tree.prototype.DNDModes.ONTO;
-}
-var _1c=this.getPosition(e,_1b);
-if(_1c=="onto"||(!this.isAdjacentNode(_1a,_1c)&&this.controller.canMove(_1a,this.treeNode.parent))){
-return _1c;
-}else{
-return false;
-}
-},onDragOut:function(e){
-this.clearAutoExpandTimer();
-this.hideIndicator();
-},clearAutoExpandTimer:function(){
-if(this.autoExpandTimer){
-clearTimeout(this.autoExpandTimer);
-this.autoExpandTimer=null;
-}
-},onDragMove:function(e,_1f){
-var _20=_1f[0].treeNode;
-var _21=this.getAcceptPosition(e,_20);
-if(_21){
-this.showIndicator(_21);
-}
-},isAdjacentNode:function(_22,_23){
-if(_22===this.treeNode){
-return true;
-}
-if(_22.getNextSibling()===this.treeNode&&_23=="before"){
-return true;
-}
-if(_22.getPreviousSibling()===this.treeNode&&_23=="after"){
-return true;
-}
-return false;
-},getPosition:function(e,_25){
-var _26=dojo.byId(this.treeNode.labelNode);
-var _27=e.pageY||e.clientY+dojo.body().scrollTop;
-var _28=dojo.html.getAbsolutePosition(_26).y;
-var _29=dojo.html.getBorderBox(_26).height;
-var _2a=_27-_28;
-var p=_2a/_29;
-var _2c="";
-if(_25&dojo.widget.Tree.prototype.DNDModes.ONTO&&_25&dojo.widget.Tree.prototype.DNDModes.BETWEEN){
-if(p<=0.3){
-_2c="before";
-}else{
-if(p<=0.7){
-_2c="onto";
-}else{
-_2c="after";
-}
-}
-}else{
-if(_25&dojo.widget.Tree.prototype.DNDModes.BETWEEN){
-if(p<=0.5){
-_2c="before";
-}else{
-_2c="after";
-}
-}else{
-if(_25&dojo.widget.Tree.prototype.DNDModes.ONTO){
-_2c="onto";
-}
-}
-}
-return _2c;
-},getTargetParentIndex:function(_2d,_2e){
-var _2f=_2e=="before"?this.treeNode.getParentIndex():this.treeNode.getParentIndex()+1;
-if(this.treeNode.parent===_2d.parent&&this.treeNode.getParentIndex()>_2d.getParentIndex()){
-_2f--;
-}
-return _2f;
-},onDrop:function(e){
-var _31=this.position;
-this.onDragOut(e);
-var _32=e.dragObject.treeNode;
-if(!dojo.lang.isObject(_32)){
-dojo.raise("TreeNode not found in dragObject");
-}
-if(_31=="onto"){
-return this.controller.move(_32,this.treeNode,0);
-}else{
-var _33=this.getTargetParentIndex(_32,_31);
-return this.controller.move(_32,this.treeNode.parent,_33);
-}
-}});
-dojo.dnd.TreeDNDController=function(_34){
-this.treeController=_34;
-this.dragSources={};
-this.dropTargets={};
-};
-dojo.lang.extend(dojo.dnd.TreeDNDController,{listenTree:function(_35){
-dojo.event.topic.subscribe(_35.eventNames.createDOMNode,this,"onCreateDOMNode");
-dojo.event.topic.subscribe(_35.eventNames.moveFrom,this,"onMoveFrom");
-dojo.event.topic.subscribe(_35.eventNames.moveTo,this,"onMoveTo");
-dojo.event.topic.subscribe(_35.eventNames.addChild,this,"onAddChild");
-dojo.event.topic.subscribe(_35.eventNames.removeNode,this,"onRemoveNode");
-dojo.event.topic.subscribe(_35.eventNames.treeDestroy,this,"onTreeDestroy");
-},unlistenTree:function(_36){
-dojo.event.topic.unsubscribe(_36.eventNames.createDOMNode,this,"onCreateDOMNode");
-dojo.event.topic.unsubscribe(_36.eventNames.moveFrom,this,"onMoveFrom");
-dojo.event.topic.unsubscribe(_36.eventNames.moveTo,this,"onMoveTo");
-dojo.event.topic.unsubscribe(_36.eventNames.addChild,this,"onAddChild");
-dojo.event.topic.unsubscribe(_36.eventNames.removeNode,this,"onRemoveNode");
-dojo.event.topic.unsubscribe(_36.eventNames.treeDestroy,this,"onTreeDestroy");
-},onTreeDestroy:function(_37){
-this.unlistenTree(_37.source);
-},onCreateDOMNode:function(_38){
-this.registerDNDNode(_38.source);
-},onAddChild:function(_39){
-this.registerDNDNode(_39.child);
-},onMoveFrom:function(_3a){
-var _3b=this;
-dojo.lang.forEach(_3a.child.getDescendants(),function(_3c){
-_3b.unregisterDNDNode(_3c);
-});
-},onMoveTo:function(_3d){
-var _3e=this;
-dojo.lang.forEach(_3d.child.getDescendants(),function(_3f){
-_3e.registerDNDNode(_3f);
-});
-},registerDNDNode:function(_40){
-if(!_40.tree.DNDMode){
-return;
-}
-var _41=null;
-var _42=null;
-if(!_40.actionIsDisabled(_40.actions.MOVE)){
-var _41=new dojo.dnd.TreeDragSource(_40.labelNode,this,_40.tree.widgetId,_40);
-this.dragSources[_40.widgetId]=_41;
-}
-var _42=new dojo.dnd.TreeDropTarget(_40.labelNode,this.treeController,_40.tree.DNDAcceptTypes,_40);
-this.dropTargets[_40.widgetId]=_42;
-},unregisterDNDNode:function(_43){
-if(this.dragSources[_43.widgetId]){
-dojo.dnd.dragManager.unregisterDragSource(this.dragSources[_43.widgetId]);
-delete this.dragSources[_43.widgetId];
-}
-if(this.dropTargets[_43.widgetId]){
-dojo.dnd.dragManager.unregisterDropTarget(this.dropTargets[_43.widgetId]);
-delete this.dropTargets[_43.widgetId];
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/TreeDragAndDropV3.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/TreeDragAndDropV3.js
deleted file mode 100644
index b65241e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/TreeDragAndDropV3.js
+++ /dev/null
@@ -1,205 +0,0 @@
-dojo.provide("dojo.dnd.TreeDragAndDropV3");
-dojo.require("dojo.dnd.HtmlDragAndDrop");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.Deferred");
-dojo.require("dojo.html.layout");
-dojo.dnd.TreeDragSourceV3=function(_1,_2,_3,_4){
-this.controller=_2;
-this.treeNode=_4;
-dojo.dnd.HtmlDragSource.call(this,_1,_3);
-};
-dojo.inherits(dojo.dnd.TreeDragSourceV3,dojo.dnd.HtmlDragSource);
-dojo.dnd.TreeDropTargetV3=function(_5,_6,_7,_8){
-this.treeNode=_8;
-this.controller=_6;
-dojo.dnd.HtmlDropTarget.call(this,_5,_7);
-};
-dojo.inherits(dojo.dnd.TreeDropTargetV3,dojo.dnd.HtmlDropTarget);
-dojo.lang.extend(dojo.dnd.TreeDropTargetV3,{autoExpandDelay:1500,autoExpandTimer:null,position:null,indicatorStyle:"2px black groove",showIndicator:function(_9){
-if(this.position==_9){
-return;
-}
-this.hideIndicator();
-this.position=_9;
-var _a=this.treeNode;
-_a.contentNode.style.width=dojo.html.getBorderBox(_a.labelNode).width+"px";
-if(_9=="onto"){
-_a.contentNode.style.border=this.indicatorStyle;
-}else{
-if(_9=="before"){
-_a.contentNode.style.borderTop=this.indicatorStyle;
-}else{
-if(_9=="after"){
-_a.contentNode.style.borderBottom=this.indicatorStyle;
-}
-}
-}
-},hideIndicator:function(){
-this.treeNode.contentNode.style.borderBottom="";
-this.treeNode.contentNode.style.borderTop="";
-this.treeNode.contentNode.style.border="";
-this.treeNode.contentNode.style.width="";
-this.position=null;
-},onDragOver:function(e){
-var _c=dojo.dnd.HtmlDropTarget.prototype.onDragOver.apply(this,arguments);
-if(_c&&this.treeNode.isFolder&&!this.treeNode.isExpanded){
-this.setAutoExpandTimer();
-}
-if(_c){
-this.cacheNodeCoords();
-}
-return _c;
-},accepts:function(_d){
-var _e=dojo.dnd.HtmlDropTarget.prototype.accepts.apply(this,arguments);
-if(!_e){
-return false;
-}
-for(var i=0;i<_d.length;i++){
-var _10=_d[i].treeNode;
-if(_10===this.treeNode){
-return false;
-}
-}
-return true;
-},setAutoExpandTimer:function(){
-var _11=this;
-var _12=function(){
-if(dojo.dnd.dragManager.currentDropTarget===_11){
-_11.controller.expand(_11.treeNode);
-dojo.dnd.dragManager.cacheTargetLocations();
-}
-};
-this.autoExpandTimer=dojo.lang.setTimeout(_12,_11.autoExpandDelay);
-},getAcceptPosition:function(e,_14){
-var _15=this.treeNode.tree.DndMode;
-if(_15&dojo.widget.TreeV3.prototype.DndModes.ONTO&&this.treeNode.actionIsDisabledNow(this.treeNode.actions.ADDCHILD)){
-_15&=~dojo.widget.TreeV3.prototype.DndModes.ONTO;
-}
-var _16=this.getPosition(e,_15);
-if(_16=="onto"){
-return _16;
-}
-for(var i=0;i<_14.length;i++){
-var _18=_14[i].dragSource;
-if(_18.treeNode&&this.isAdjacentNode(_18.treeNode,_16)){
-continue;
-}
-if(!this.controller.canMove(_18.treeNode?_18.treeNode:_18,this.treeNode.parent)){
-return false;
-}
-}
-return _16;
-},onDropEnd:function(e){
-this.clearAutoExpandTimer();
-this.hideIndicator();
-},onDragOut:function(e){
-this.clearAutoExpandTimer();
-this.hideIndicator();
-},clearAutoExpandTimer:function(){
-if(this.autoExpandTimer){
-clearTimeout(this.autoExpandTimer);
-this.autoExpandTimer=null;
-}
-},onDragMove:function(e,_1c){
-var _1d=this.getAcceptPosition(e,_1c);
-if(_1d){
-this.showIndicator(_1d);
-}
-},isAdjacentNode:function(_1e,_1f){
-if(_1e===this.treeNode){
-return true;
-}
-if(_1e.getNextSibling()===this.treeNode&&_1f=="before"){
-return true;
-}
-if(_1e.getPreviousSibling()===this.treeNode&&_1f=="after"){
-return true;
-}
-return false;
-},cacheNodeCoords:function(){
-var _20=this.treeNode.contentNode;
-this.cachedNodeY=dojo.html.getAbsolutePosition(_20).y;
-this.cachedNodeHeight=dojo.html.getBorderBox(_20).height;
-},getPosition:function(e,_22){
-var _23=e.pageY||e.clientY+dojo.body().scrollTop;
-var _24=_23-this.cachedNodeY;
-var p=_24/this.cachedNodeHeight;
-var _26="";
-if(_22&dojo.widget.TreeV3.prototype.DndModes.ONTO&&_22&dojo.widget.TreeV3.prototype.DndModes.BETWEEN){
-if(p<=0.33){
-_26="before";
-}else{
-if(p<=0.66||this.treeNode.isExpanded&&this.treeNode.children.length&&!this.treeNode.isLastChild()){
-_26="onto";
-}else{
-_26="after";
-}
-}
-}else{
-if(_22&dojo.widget.TreeV3.prototype.DndModes.BETWEEN){
-if(p<=0.5||this.treeNode.isExpanded&&this.treeNode.children.length&&!this.treeNode.isLastChild()){
-_26="before";
-}else{
-_26="after";
-}
-}else{
-if(_22&dojo.widget.TreeV3.prototype.DndModes.ONTO){
-_26="onto";
-}
-}
-}
-return _26;
-},getTargetParentIndex:function(_27,_28){
-var _29=_28=="before"?this.treeNode.getParentIndex():this.treeNode.getParentIndex()+1;
-if(_27.treeNode&&this.treeNode.parent===_27.treeNode.parent&&this.treeNode.getParentIndex()>_27.treeNode.getParentIndex()){
-_29--;
-}
-return _29;
-},onDrop:function(e){
-var _2b=this.position;
-var _2c=e.dragObject.dragSource;
-var _2d,_2e;
-if(_2b=="onto"){
-_2d=this.treeNode;
-_2e=0;
-}else{
-_2e=this.getTargetParentIndex(_2c,_2b);
-_2d=this.treeNode.parent;
-}
-var r=this.getDropHandler(e,_2c,_2d,_2e)();
-return r;
-},getDropHandler:function(e,_31,_32,_33){
-var _34;
-var _35=this;
-_34=function(){
-var _36;
-if(_31.treeNode){
-_36=_35.controller.move(_31.treeNode,_32,_33,true);
-}else{
-if(dojo.lang.isFunction(_31.onDrop)){
-_31.onDrop(_32,_33);
-}
-var _37=_31.getTreeNode();
-if(_37){
-_36=_35.controller.createChild(_32,_33,_37,true);
-}else{
-_36=true;
-}
-}
-if(_36 instanceof dojo.Deferred){
-var _38=_36.fired==0;
-if(!_38){
-_35.handleDropError(_31,_32,_33,_36);
-}
-return _38;
-}else{
-return _36;
-}
-};
-return _34;
-},handleDropError:function(_39,_3a,_3b,_3c){
-dojo.debug("TreeDropTargetV3.handleDropError: DND error occured");
-dojo.debugShallow(_3c);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/__package__.js
deleted file mode 100644
index b687256..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dnd/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.dnd.DragAndDrop"],browser:["dojo.dnd.HtmlDragAndDrop"],dashboard:["dojo.dnd.HtmlDragAndDrop"]});
-dojo.provide("dojo.dnd.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/docs.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/docs.js
deleted file mode 100644
index 7f872bf..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/docs.js
+++ /dev/null
@@ -1,671 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.docs");
-dojo.require("dojo.io.*");
-dojo.require("dojo.event.topic");
-dojo.require("dojo.rpc.JotService");
-dojo.require("dojo.dom");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.Deferred");
-dojo.require("dojo.DeferredList");
-
-/*
- * TODO:
- *
- * Package summary needs to compensate for "is"
- * Handle host environments
- * Deal with dojo.widget weirdness
- * Parse parameters
- * Limit function parameters to only the valid ones (Involves packing parameters onto meta during rewriting)
- *
- */
-
-dojo.docs = new function() {
-	this._url = dojo.uri.dojoUri("docscripts");
-	this._rpc = new dojo.rpc.JotService;
-	this._rpc.serviceUrl = dojo.uri.dojoUri("docscripts/jsonrpc.php");
-};
-dojo.lang.mixin(dojo.docs, {
-	_count: 0,
-	_callbacks: {function_names: []},
-	_cache: {}, // Saves the JSON objects in cache
-	require: function(/*String*/ require, /*bool*/ sync) {
-		dojo.debug("require(): " + require);
-		var parts = require.split("/");
-		
-		var size = parts.length;
-		var deferred = new dojo.Deferred;
-		var args = {
-			mimetype: "text/json",
-			load: function(type, data){
-				dojo.debug("require(): loaded for " + require);
-				
-				if(parts[0] != "function_names") {
-					for(var i = 0, part; part = parts[i]; i++){
-						data = data[part];
-					}
-				}
-				deferred.callback(data);
-			},
-			error: function(){
-				deferred.errback();
-			}
-		};
-
-		if(location.protocol == "file:"){
-			if(size){
-				if(parts[parts.length - 1] == "documentation"){
-					parts[parts.length - 1] = "meta";
-				}
-			
-				if(parts[0] == "function_names"){
-					args.url = [this._url, "local_json", "function_names"].join("/");
-				}else{
-					var dirs = parts[0].split(".");
-					args.url = [this._url, "local_json", dirs[0]].join("/");
-					if(dirs.length > 1){
-						args.url = [args.url, dirs[1]].join(".");
-					}
-				}
-			}
-		}
-		
-		dojo.io.bind(args);
-		return deferred;
-	},
-	getFunctionNames: function(){
-		return this.require("function_names"); // dojo.Deferred
-	},
-	unFormat: function(/*String*/ string){
-		var fString = string;
-		if(string.charAt(string.length - 1) == "_"){
-			fString = [string.substring(0, string.length - 1), "*"].join("");
-		}
-		return fString;
-	},
-	getMeta: function(/*String*/ pkg, /*String*/ name, /*Function*/ callback, /*String?*/ id){
-		// summary: Gets information about a function in regards to its meta data
-		if(typeof name == "function"){
-			// pId: a
-			// pkg: ignore
-			id = callback;
-			callback = name;
-			name = pkg;
-			pkg = null;
-			dojo.debug("getMeta(" + name + ")");
-		}else{
-			dojo.debug("getMeta(" + pkg + "/" + name + ")");
-		}
-		
-		if(!id){
-			id = "_";
-		}
-	},
-	_withPkg: function(/*String*/ type, /*Object*/ data, /*Object*/ evt, /*Object*/ input, /*String*/ newType){
-		dojo.debug("_withPkg(" + evt.name + ") has package: " + data[0]);
-		evt.pkg = data[0];
-		if("load" == type && evt.pkg){
-			evt.type = newType;
-		}else{
-			if(evt.callbacks && evt.callbacks.length){
-				evt.callbacks.shift()("error", {}, evt, evt.input);
-			}
-		}
-	},
-	_gotMeta: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){
-		dojo.debug("_gotMeta(" + evt.name + ")");
-
-		var cached = dojo.docs._getCache(evt.pkg, evt.name, "meta", "functions", evt.id);
-		if(cached.summary){
-			data.summary = cached.summary;
-		}
-		if(evt.callbacks && evt.callbacks.length){
-			evt.callbacks.shift()(type, data, evt, evt.input);
-		}
-	},
-	getSrc: function(/*String*/ name, /*Function*/ callback, /*String?*/ id){
-		// summary: Gets src file (created by the doc parser)
-		dojo.debug("getSrc(" + name + ")");
-		if(!id){
-			id = "_";
-		}
-	},
-	getDoc: function(/*String*/ name, /*Function*/ callback, /*String?*/ id){
-		// summary: Gets external documentation stored on Jot for a given function
-		dojo.debug("getDoc(" + name  + ")");
-
-		if(!id){
-			id = "_";
-		}
-
-		var input = {};
-
-		input.type = "doc";
-		input.name = name;
-		input.callbacks = [callback];
-	},
-	_gotDoc: function(/*String*/ type, /*Array*/ data, /*Object*/ evt, /*Object*/ input){
-		dojo.debug("_gotDoc(" + evt.type + ")");
-		
-		evt[evt.type] = data;
-		if(evt.expects && evt.expects.doc){
-			for(var i = 0, expect; expect = evt.expects.doc[i]; i++){
-				if(!(expect in evt)){
-					dojo.debug("_gotDoc() waiting for more data");
-					return;
-				}
-			}
-		}
-		
-		var cache = dojo.docs._getCache(evt.pkg, "meta", "functions", evt.name, evt.id, "meta");
-
-		var description = evt.fn.description;
-		cache.description = description;
-		data = {
-			returns: evt.fn.returns,
-			id: evt.id,
-			variables: []
-		}
-		if(!cache.parameters){
-			cache.parameters = {};
-		}
-		for(var i = 0, param; param = evt.param[i]; i++){
-			var fName = param["DocParamForm/name"];
-			if(!cache.parameters[fName]){
-				cache.parameters[fName] = {};
-			}
-			cache.parameters[fName].description = param["DocParamForm/desc"]
-		}
-
-		data.description = cache.description;
-		data.parameters = cache.parameters;
-		
-		evt.type = "doc";
-	
-		if(evt.callbacks && evt.callbacks.length){
-			evt.callbacks.shift()("load", data, evt, input);
-		}
-	},
-	getPkgDoc: function(/*String*/ name, /*Function*/ callback){
-		// summary: Gets external documentation stored on Jot for a given package
-		dojo.debug("getPkgDoc(" + name + ")");
-		var input = {};
-	},
-	getPkgInfo: function(/*String*/ name, /*Function*/ callback){
-		// summary: Gets a combination of the metadata and external documentation for a given package
-		dojo.debug("getPkgInfo(" + name + ")");
-
-		var input = {
-			expects: {
-				pkginfo: ["pkgmeta", "pkgdoc"]
-			},
-			callback: callback
-		};
-		dojo.docs.getPkgMeta(input, name, dojo.docs._getPkgInfo);
-		dojo.docs.getPkgDoc(input, name, dojo.docs._getPkgInfo);
-	},
-	_getPkgInfo: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){
-		dojo.debug("_getPkgInfo() for " + evt.type);
-		var input = {};
-		var results = {};
-		if(typeof key == "object"){
-			input = key;
-			input[evt.type] = data;
-			if(input.expects && input.expects.pkginfo){
-				for(var i = 0, expect; expect = input.expects.pkginfo[i]; i++){
-					if(!(expect in input)){
-						dojo.debug("_getPkgInfo() waiting for more data");
-						return;
-					}
-				}
-			}
-			results = input.pkgmeta;
-			results.description = input.pkgdoc;
-		}
-
-		if(input.callback){
-			input.callback("load", results, evt);
-		}
-	},
-	getInfo: function(/*String*/ name, /*Function*/ callback){
-		dojo.debug("getInfo(" + name + ")");
-		var input = {
-			expects: {
-				"info": ["meta", "doc"]
-			},
-			callback: callback
-		}
-		dojo.docs.getMeta(input, name, dojo.docs._getInfo);
-		dojo.docs.getDoc(input, name, dojo.docs._getInfo);
-	},
-	_getInfo: function(/*String*/ type, /*String*/ data, /*Object*/ evt, /*Object*/ input){
-		dojo.debug("_getInfo(" + evt.type + ")");
-		if(input && input.expects && input.expects.info){
-			input[evt.type] = data;
-			for(var i = 0, expect; expect = input.expects.info[i]; i++){
-				if(!(expect in input)){
-					dojo.debug("_getInfo() waiting for more data");
-					return;
-				}
-			}
-		}
-
-		if(input.callback){
-			input.callback("load", dojo.docs._getCache(evt.pkg, "meta", "functions", evt.name, evt.id, "meta"), evt, input);
-		}
-	},
-	_getMainText: function(/*String*/ text){
-		// summary: Grabs the innerHTML from a Jot Rech Text node
-		dojo.debug("_getMainText()");
-		return text.replace(/^<html[^<]*>/, "").replace(/<\/html>$/, "").replace(/<\w+\s*\/>/g, "");
-	},
-	getPackageMeta: function(/*Object*/ input){
-		dojo.debug("getPackageMeta(): " + input.package);
-		return this.require(input.package + "/meta", input.sync);
-	},
-	getFunctionMeta: function(/*Object*/ input){
-		var package = input.package || "";
-		var name = input.name;
-		var id = input.id || "_";
-		dojo.debug("getFunctionMeta(): " + name);
-
-		if(!name) return;
-
-		if(package){
-			return this.require(package + "/meta/functions/" + name + "/" + id + "/meta");
-		}else{
-			this.getFunctionNames();
-		}
-	},
-	getFunctionDocumentation: function(/*Object*/ input){
-		var package = input.package || "";
-		var name = input.name;
-		var id = input.id || "_";
-		dojo.debug("getFunctionDocumentation(): " + name);
-		
-		if(!name) return;
-		
-		if(package){
-			return this.require(package + "/meta/functions/" + name + "/" + id + "/documentation");
-		}
-	},
-	_onDocSearch: function(/*Object*/ input){
-		var _this = this;
-		var name = input.name.toLowerCase();
-		if(!name) return;
-
-		this.getFunctionNames().addCallback(function(data){
-			dojo.debug("_onDocSearch(): function names loaded for " + name);
-
-			var output = [];
-			var list = [];
-			var closure = function(pkg, fn) {
-				return function(data){
-					dojo.debug("_onDocSearch(): package meta loaded for: " + pkg);
-					if(data.functions){
-						var functions = data.functions;
-						for(var key in functions){
-							if(fn == key){
-								var ids = functions[key];
-								for(var id in ids){
-									var fnMeta = ids[id];
-									output.push({
-										package: pkg,
-										name: fn,
-										id: id,
-										summary: fnMeta.summary
-									});
-								}
-							}
-						}
-					}
-					return output;
-				}
-			}
-
-			pkgLoop:
-			for(var pkg in data){
-				if(pkg.toLowerCase() == name){
-					name = pkg;
-					dojo.debug("_onDocSearch found a package");
-					//dojo.docs._onDocSelectPackage(input);
-					return;
-				}
-				for(var i = 0, fn; fn = data[pkg][i]; i++){
-					if(fn.toLowerCase().indexOf(name) != -1){
-						dojo.debug("_onDocSearch(): Search matched " + fn);
-						var meta = _this.getPackageMeta({package: pkg});
-						meta.addCallback(closure(pkg, fn));
-						list.push(meta);
-
-						// Build a list of all packages that need to be loaded and their loaded state.
-						continue pkgLoop;
-					}
-				}
-			}
-			
-			list = new dojo.DeferredList(list);
-			list.addCallback(function(results){
-				dojo.debug("_onDocSearch(): All packages loaded");
-				_this._printFunctionResults(results[0][1]);
-			});
-		});
-	},
-	_onDocSearchFn: function(/*String*/ type, /*Array*/ data, /*Object*/ evt){
-		dojo.debug("_onDocSearchFn(" + evt.name + ")");
-
-		var name = evt.name || evt.pkg;
-
-		dojo.debug("_onDocSearchFn found a function");
-
-		evt.pkgs = packages;
-		evt.pkg = name;
-		evt.loaded = 0;
-		for(var i = 0, pkg; pkg = packages[i]; i++){
-			dojo.docs.getPkgMeta(evt, pkg, dojo.docs._onDocResults);
-		}
-	},
-	_onPkgResults: function(/*String*/ type, /*Object*/ data, /*Object*/ evt, /*Object*/ input){
-		dojo.debug("_onPkgResults(" + evt.type + ")");
-		var description = "";
-		var path = "";
-		var methods = {};
-		var requires = {};
-		if(input){
-			input[evt.type] = data;
-			if(input.expects && input.expects.pkgresults){
-				for(var i = 0, expect; expect = input.expects.pkgresults[i]; i++){
-					if(!(expect in input)){
-						dojo.debug("_onPkgResults() waiting for more data");
-						return;
-					}
-				}
-			}
-			path = input.pkgdoc.path;
-			description = input.pkgdoc.description;
-			methods = input.pkgmeta.methods;
-			requires = input.pkgmeta.requires;
-		}
-		var pkg = evt.name.replace("_", "*");
-		var results = {
-			path: path,
-			description: description,
-			size: 0,
-			methods: [],
-			pkg: pkg,
-			requires: requires
-		}
-		var rePrivate = /_[^.]+$/;
-		for(var method in methods){
-			if(!rePrivate.test(method)){
-				for(var pId in methods[method]){
-					results.methods.push({
-						pkg: pkg,
-						name: method,
-						id: pId,
-						summary: methods[method][pId].summary
-					})
-				}
-			}
-		}
-		results.size = results.methods.length;
-		dojo.docs._printPkgResult(results);
-	},
-	_onDocResults: function(/*String*/ type, /*Object*/ data, /*Object*/ evt, /*Object*/ input){
-		dojo.debug("_onDocResults(" + evt.name + "/" + input.pkg + ") " + type);
-		++input.loaded;
-
-		if(input.loaded == input.pkgs.length){
-			var pkgs = input.pkgs;
-			var name = input.pkg;
-			var results = {methods: []};
-			var rePrivate = /_[^.]+$/;
-			data = dojo.docs._cache;
-
-			for(var i = 0, pkg; pkg = pkgs[i]; i++){
-				var methods = dojo.docs._getCache(pkg, "meta", "methods");
-				for(var fn in methods){
-					if(fn.toLowerCase().indexOf(name) == -1){
-						continue;
-					}
-					if(fn != "requires" && !rePrivate.test(fn)){
-						for(var pId in methods[fn]){
-							var result = {
-								pkg: pkg,
-								name: fn,
-								id: "_",
-								summary: ""
-							}
-							if(methods[fn][pId].summary){
-								result.summary = methods[fn][pId].summary;
-							}
-							results.methods.push(result);
-						}
-					}
-				}
-			}
-
-			dojo.debug("Publishing docResults");
-			dojo.docs._printFnResults(results);
-		}
-	},
-	_printFunctionResults: function(results){
-		dojo.debug("_printFnResults(): called");
-		// summary: Call this function to send the /docs/function/results topic
-	},
-	_printPkgResult: function(results){
-		dojo.debug("_printPkgResult(): called");
-	},
-	_onDocSelectFunction: function(/*Object*/ input){
-		// summary: Get doc, meta, and src
-		var name = input.name;
-		var package = input.package || "";
-		var id = input.id || "_";
-		dojo.debug("_onDocSelectFunction(" + name + ")");
-		if(!name || !package) return false;
-
-		var pkgMeta = this.getPackageMeta({package: package});
-		var meta = this.getFunctionMeta({package: package, name: name, id: id});
-		var doc = this.getFunctionDocumentation({package: package, name: name, id: id});
-		
-		var list = new dojo.DeferredList([pkgMeta, meta, doc]);
-		list.addCallback(function(results){
-			dojo.debug("_onDocSelectFunction() loaded");
-			for(var i = 0, result; result = results[i]; i++){
-				dojo.debugShallow(result[1]);
-			}
-		});
-		
-		return list;
-	},
-	_onDocSelectPackage: function(/*Object*/ input){
-		dojo.debug("_onDocSelectPackage(" + input.name + ")")
-		input.expects = {
-			"pkgresults": ["pkgmeta", "pkgdoc"]
-		};
-		dojo.docs.getPkgMeta(input, input.name, dojo.docs._onPkgResults);
-		dojo.docs.getPkgDoc(input, input.name, dojo.docs._onPkgResults);
-	},
-	_onDocSelectResults: function(/*String*/ type, /*Object*/ data, /*Object*/ evt, /*Object*/ input){
-		dojo.debug("_onDocSelectResults(" + evt.type + ", " + evt.name + ")");
-		if(evt.type == "meta"){
-			dojo.docs.getPkgMeta(input, evt.pkg, dojo.docs._onDocSelectResults);
-		}
-		if(input){
-			input[evt.type] = data;
-			if(input.expects && input.expects.docresults){
-				for(var i = 0, expect; expect = input.expects.docresults[i]; i++){
-					if(!(expect in input)){
-						dojo.debug("_onDocSelectResults() waiting for more data");
-						return;
-					}
-				}
-			}
-		}
-
-		dojo.docs._printFunctionDetail(input);
-	},
-	
-	_printFunctionDetail: function(results) {
-		// summary: Call this function to send the /docs/function/detail topic event
-	},
-
-	selectFunction: function(/*String*/ name, /*String?*/ id){
-		// summary: The combined information
-	},
-	savePackage: function(/*Object*/ callbackObject, /*String*/ callback, /*Object*/ parameters){
-		dojo.event.kwConnect({
-			srcObj: dojo.docs,
-			srcFunc: "_savedPkgRpc",
-			targetObj: callbackObject,
-			targetFunc: callback,
-			once: true
-		});
-		
-		var props = {};
-		var cache = dojo.docs._getCache(parameters.pkg, "meta");
-
-		var i = 1;
-
-		if(!cache.path){
-			var path = "id";
-			props[["pname", i].join("")] = "DocPkgForm/require";
-			props[["pvalue", i++].join("")] = parameters.pkg;
-		}else{
-			var path = cache.path;
-		}
-
-		props.form = "//DocPkgForm";
-		props.path = ["/WikiHome/DojoDotDoc/", path].join("");
-
-		if(parameters.description){
-			props[["pname", i].join("")] = "main/text";
-			props[["pvalue", i++].join("")] = parameters.description;
-		}
-		
-		dojo.docs._rpc.callRemote("saveForm",	props).addCallbacks(dojo.docs._pkgRpc, dojo.docs._pkgRpc);
-	},
-	_pkgRpc: function(data){
-		if(data.name){
-			dojo.docs._getCache(data["DocPkgForm/require"], "meta").path = data.name;
-			dojo.docs._savedPkgRpc("load");
-		}else{
-			dojo.docs._savedPkgRpc("error");
-		}
-	},
-	_savedPkgRpc: function(type){
-	},
-	functionPackages: function(/*String*/ name, /*Function*/ callback, /*Object*/ input){
-		// summary: Gets the package associated with a function and stores it in the .pkg value of input
-		dojo.debug("functionPackages() name: " + name);
-
-		if(!input){
-			input = {};
-		}
-		if(!input.callbacks){
-			input.callbacks = [];
-		}
-
-		input.type = "function_names";
-		input.name = name;
-		input.callbacks.unshift(callback);
-		input.callbacks.unshift(dojo.docs._functionPackages);
-	},
-	_functionPackages: function(/*String*/ type, /*Array*/ data, /*Object*/ evt){
-		dojo.debug("_functionPackages() name: " + evt.name);
-		evt.pkg = '';
-
-		var results = [];
-		var data = dojo.docs._cache['function_names'];
-		for(var key in data){
-			if(dojo.lang.inArray(data[key], evt.name)){
-				dojo.debug("_functionPackages() package: " + key);
-				results.push(key);
-			}
-		}
-
-		if(evt.callbacks && evt.callbacks.length){
-			evt.callbacks.shift()(type, results, evt, evt.input);
-		}
-	},
-	setUserName: function(/*String*/ name){
-		dojo.docs._userName = name;
-		if(name && dojo.docs._password){
-			dojo.docs._logIn();
-		}
-	},
-	setPassword: function(/*String*/ password){
-		dojo.docs._password = password;
-		if(password && dojo.docs._userName){
-			dojo.docs._logIn();
-		}
-	},
-	_logIn: function(){
-		dojo.io.bind({
-			url: dojo.docs._rpc.serviceUrl.toString(),
-			method: "post",
-			mimetype: "text/json",
-			content: {
-				username: dojo.docs._userName,
-				password: dojo.docs._password
-			},
-			load: function(type, data){
-				if(data.error){
-					dojo.docs.logInSuccess();
-				}else{
-					dojo.docs.logInFailure();
-				}
-			},
-			error: function(){
-				dojo.docs.logInFailure();
-			}
-		});
-	},
-	logInSuccess: function(){},
-	logInFailure: function(){},
-	_set: function(/*Object*/ base, /*String...*/ keys, /*String*/ value){
-		var args = [];
-		for(var i = 0, arg; arg = arguments[i]; i++){
-			args.push(arg);
-		}
-
-		if(args.length < 3) return;
-		base = args.shift();
-		value = args.pop();
-		var key = args.pop();
-		for(var i = 0, arg; arg = args[i]; i++){
-			if(typeof base[arg] != "object"){
-				base[arg] = {};
-			}
-			base = base[arg];
-		}
-		base[key] = value;
-	},
-	_getCache: function(/*String...*/ keys){
-		var obj = dojo.docs._cache;
-		for(var i = 0; i < arguments.length; i++){
-			var arg = arguments[i];
-			if(!obj[arg]){
-				obj[arg] = {};
-			}
-			obj = obj[arg];
-		}
-		return obj;
-	}
-});
-
-dojo.event.topic.subscribe("/docs/search", dojo.docs, "_onDocSearch");
-dojo.event.topic.subscribe("/docs/function/select", dojo.docs, "_onDocSelectFunction");
-dojo.event.topic.subscribe("/docs/package/select", dojo.docs, "_onDocSelectPackage");
-
-dojo.event.topic.registerPublisher("/docs/function/results", dojo.docs, "_printFunctionResults");
-dojo.event.topic.registerPublisher("/docs/function/detail", dojo.docs, "_printFunctionDetail");
-dojo.event.topic.registerPublisher("/docs/package/detail", dojo.docs, "_printPkgResult");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dom.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dom.js
deleted file mode 100644
index 0ecb90b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/dom.js
+++ /dev/null
@@ -1,368 +0,0 @@
-dojo.provide("dojo.dom");
-dojo.dom.ELEMENT_NODE=1;
-dojo.dom.ATTRIBUTE_NODE=2;
-dojo.dom.TEXT_NODE=3;
-dojo.dom.CDATA_SECTION_NODE=4;
-dojo.dom.ENTITY_REFERENCE_NODE=5;
-dojo.dom.ENTITY_NODE=6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE=7;
-dojo.dom.COMMENT_NODE=8;
-dojo.dom.DOCUMENT_NODE=9;
-dojo.dom.DOCUMENT_TYPE_NODE=10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE=11;
-dojo.dom.NOTATION_NODE=12;
-dojo.dom.dojoml="http://www.dojotoolkit.org/2004/dojoml";
-dojo.dom.xmlns={svg:"http://www.w3.org/2000/svg",smil:"http://www.w3.org/2001/SMIL20/",mml:"http://www.w3.org/1998/Math/MathML",cml:"http://www.xml-cml.org",xlink:"http://www.w3.org/1999/xlink",xhtml:"http://www.w3.org/1999/xhtml",xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",xbl:"http://www.mozilla.org/xbl",fo:"http://www.w3.org/1999/XSL/Format",xsl:"http://www.w3.org/1999/XSL/Transform",xslt:"http://www.w3.org/1999/XSL/Transform",xi:"http://www.w3.org/2001/XInclude",xforms:"http://www.w3.org/2002/01/xforms",saxon:"http://icl.com/saxon",xalan:"http://xml.apache.org/xslt",xsd:"http://www.w3.org/2001/XMLSchema",dt:"http://www.w3.org/2001/XMLSchema-datatypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",dc:"http://purl.org/dc/elements/1.1/",dcq:"http://purl.org/dc/qualifiers/1.0","soap-env":"http://schemas.xmlsoap.org/soap/envelope/",wsdl:"http://schemas.xmlsoap.org/wsdl/",AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"};
-dojo.dom.isNode=function(wh){
-if(typeof Element=="function"){
-try{
-return wh instanceof Element;
-}
-catch(e){
-}
-}else{
-return wh&&!isNaN(wh.nodeType);
-}
-};
-dojo.dom.getUniqueId=function(){
-var _2=dojo.doc();
-do{
-var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(_2.getElementById(id));
-return id;
-};
-dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_4,_5){
-var _6=_4.firstChild;
-while(_6&&_6.nodeType!=dojo.dom.ELEMENT_NODE){
-_6=_6.nextSibling;
-}
-if(_5&&_6&&_6.tagName&&_6.tagName.toLowerCase()!=_5.toLowerCase()){
-_6=dojo.dom.nextElement(_6,_5);
-}
-return _6;
-};
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_7,_8){
-var _9=_7.lastChild;
-while(_9&&_9.nodeType!=dojo.dom.ELEMENT_NODE){
-_9=_9.previousSibling;
-}
-if(_8&&_9&&_9.tagName&&_9.tagName.toLowerCase()!=_8.toLowerCase()){
-_9=dojo.dom.prevElement(_9,_8);
-}
-return _9;
-};
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(_a,_b){
-if(!_a){
-return null;
-}
-do{
-_a=_a.nextSibling;
-}while(_a&&_a.nodeType!=dojo.dom.ELEMENT_NODE);
-if(_a&&_b&&_b.toLowerCase()!=_a.tagName.toLowerCase()){
-return dojo.dom.nextElement(_a,_b);
-}
-return _a;
-};
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(_c,_d){
-if(!_c){
-return null;
-}
-if(_d){
-_d=_d.toLowerCase();
-}
-do{
-_c=_c.previousSibling;
-}while(_c&&_c.nodeType!=dojo.dom.ELEMENT_NODE);
-if(_c&&_d&&_d.toLowerCase()!=_c.tagName.toLowerCase()){
-return dojo.dom.prevElement(_c,_d);
-}
-return _c;
-};
-dojo.dom.moveChildren=function(_e,_f,_10){
-var _11=0;
-if(_10){
-while(_e.hasChildNodes()&&_e.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_e.removeChild(_e.firstChild);
-}
-while(_e.hasChildNodes()&&_e.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_e.removeChild(_e.lastChild);
-}
-}
-while(_e.hasChildNodes()){
-_f.appendChild(_e.firstChild);
-_11++;
-}
-return _11;
-};
-dojo.dom.copyChildren=function(_12,_13,_14){
-var _15=_12.cloneNode(true);
-return this.moveChildren(_15,_13,_14);
-};
-dojo.dom.replaceChildren=function(_16,_17){
-var _18=[];
-if(dojo.render.html.ie){
-for(var i=0;i<_16.childNodes.length;i++){
-_18.push(_16.childNodes[i]);
-}
-}
-dojo.dom.removeChildren(_16);
-_16.appendChild(_17);
-for(var i=0;i<_18.length;i++){
-dojo.dom.destroyNode(_18[i]);
-}
-};
-dojo.dom.removeChildren=function(_1a){
-var _1b=_1a.childNodes.length;
-while(_1a.hasChildNodes()){
-dojo.dom.removeNode(_1a.firstChild);
-}
-return _1b;
-};
-dojo.dom.replaceNode=function(_1c,_1d){
-return _1c.parentNode.replaceChild(_1d,_1c);
-};
-dojo.dom.destroyNode=function(_1e){
-if(_1e.parentNode){
-_1e=dojo.dom.removeNode(_1e);
-}
-if(_1e.nodeType!=3){
-if(dojo.evalObjPath("dojo.event.browser.clean",false)){
-dojo.event.browser.clean(_1e);
-}
-if(dojo.render.html.ie){
-_1e.outerHTML="";
-}
-}
-};
-dojo.dom.removeNode=function(_1f){
-if(_1f&&_1f.parentNode){
-return _1f.parentNode.removeChild(_1f);
-}
-};
-dojo.dom.getAncestors=function(_20,_21,_22){
-var _23=[];
-var _24=(_21&&(_21 instanceof Function||typeof _21=="function"));
-while(_20){
-if(!_24||_21(_20)){
-_23.push(_20);
-}
-if(_22&&_23.length>0){
-return _23[0];
-}
-_20=_20.parentNode;
-}
-if(_22){
-return null;
-}
-return _23;
-};
-dojo.dom.getAncestorsByTag=function(_25,tag,_27){
-tag=tag.toLowerCase();
-return dojo.dom.getAncestors(_25,function(el){
-return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_27);
-};
-dojo.dom.getFirstAncestorByTag=function(_29,tag){
-return dojo.dom.getAncestorsByTag(_29,tag,true);
-};
-dojo.dom.isDescendantOf=function(_2b,_2c,_2d){
-if(_2d&&_2b){
-_2b=_2b.parentNode;
-}
-while(_2b){
-if(_2b==_2c){
-return true;
-}
-_2b=_2b.parentNode;
-}
-return false;
-};
-dojo.dom.innerXML=function(_2e){
-if(_2e.innerXML){
-return _2e.innerXML;
-}else{
-if(_2e.xml){
-return _2e.xml;
-}else{
-if(typeof XMLSerializer!="undefined"){
-return (new XMLSerializer()).serializeToString(_2e);
-}
-}
-}
-};
-dojo.dom.createDocument=function(){
-var doc=null;
-var _30=dojo.doc();
-if(!dj_undef("ActiveXObject")){
-var _31=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_31.length;i++){
-try{
-doc=new ActiveXObject(_31[i]+".XMLDOM");
-}
-catch(e){
-}
-if(doc){
-break;
-}
-}
-}else{
-if((_30.implementation)&&(_30.implementation.createDocument)){
-doc=_30.implementation.createDocument("","",null);
-}
-}
-return doc;
-};
-dojo.dom.createDocumentFromText=function(str,_34){
-if(!_34){
-_34="text/xml";
-}
-if(!dj_undef("DOMParser")){
-var _35=new DOMParser();
-return _35.parseFromString(str,_34);
-}else{
-if(!dj_undef("ActiveXObject")){
-var _36=dojo.dom.createDocument();
-if(_36){
-_36.async=false;
-_36.loadXML(str);
-return _36;
-}else{
-dojo.debug("toXml didn't work?");
-}
-}else{
-var _37=dojo.doc();
-if(_37.createElement){
-var tmp=_37.createElement("xml");
-tmp.innerHTML=str;
-if(_37.implementation&&_37.implementation.createDocument){
-var _39=_37.implementation.createDocument("foo","",null);
-for(var i=0;i<tmp.childNodes.length;i++){
-_39.importNode(tmp.childNodes.item(i),true);
-}
-return _39;
-}
-return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
-}
-}
-}
-return null;
-};
-dojo.dom.prependChild=function(_3b,_3c){
-if(_3c.firstChild){
-_3c.insertBefore(_3b,_3c.firstChild);
-}else{
-_3c.appendChild(_3b);
-}
-return true;
-};
-dojo.dom.insertBefore=function(_3d,ref,_3f){
-if((_3f!=true)&&(_3d===ref||_3d.nextSibling===ref)){
-return false;
-}
-var _40=ref.parentNode;
-_40.insertBefore(_3d,ref);
-return true;
-};
-dojo.dom.insertAfter=function(_41,ref,_43){
-var pn=ref.parentNode;
-if(ref==pn.lastChild){
-if((_43!=true)&&(_41===ref)){
-return false;
-}
-pn.appendChild(_41);
-}else{
-return this.insertBefore(_41,ref.nextSibling,_43);
-}
-return true;
-};
-dojo.dom.insertAtPosition=function(_45,ref,_47){
-if((!_45)||(!ref)||(!_47)){
-return false;
-}
-switch(_47.toLowerCase()){
-case "before":
-return dojo.dom.insertBefore(_45,ref);
-case "after":
-return dojo.dom.insertAfter(_45,ref);
-case "first":
-if(ref.firstChild){
-return dojo.dom.insertBefore(_45,ref.firstChild);
-}else{
-ref.appendChild(_45);
-return true;
-}
-break;
-default:
-ref.appendChild(_45);
-return true;
-}
-};
-dojo.dom.insertAtIndex=function(_48,_49,_4a){
-var _4b=_49.childNodes;
-if(!_4b.length||_4b.length==_4a){
-_49.appendChild(_48);
-return true;
-}
-if(_4a==0){
-return dojo.dom.prependChild(_48,_49);
-}
-return dojo.dom.insertAfter(_48,_4b[_4a-1]);
-};
-dojo.dom.textContent=function(_4c,_4d){
-if(arguments.length>1){
-var _4e=dojo.doc();
-dojo.dom.replaceChildren(_4c,_4e.createTextNode(_4d));
-return _4d;
-}else{
-if(_4c.textContent!=undefined){
-return _4c.textContent;
-}
-var _4f="";
-if(_4c==null){
-return _4f;
-}
-for(var i=0;i<_4c.childNodes.length;i++){
-switch(_4c.childNodes[i].nodeType){
-case 1:
-case 5:
-_4f+=dojo.dom.textContent(_4c.childNodes[i]);
-break;
-case 3:
-case 2:
-case 4:
-_4f+=_4c.childNodes[i].nodeValue;
-break;
-default:
-break;
-}
-}
-return _4f;
-}
-};
-dojo.dom.hasParent=function(_51){
-return Boolean(_51&&_51.parentNode&&dojo.dom.isNode(_51.parentNode));
-};
-dojo.dom.isTag=function(_52){
-if(_52&&_52.tagName){
-for(var i=1;i<arguments.length;i++){
-if(_52.tagName==String(arguments[i])){
-return String(arguments[i]);
-}
-}
-}
-return "";
-};
-dojo.dom.setAttributeNS=function(_54,_55,_56,_57){
-if(_54==null||((_54==undefined)&&(typeof _54=="undefined"))){
-dojo.raise("No element given to dojo.dom.setAttributeNS");
-}
-if(!((_54.setAttributeNS==undefined)&&(typeof _54.setAttributeNS=="undefined"))){
-_54.setAttributeNS(_55,_56,_57);
-}else{
-var _58=_54.ownerDocument;
-var _59=_58.createNode(2,_56,_55);
-_59.nodeValue=_57;
-_54.setAttributeNode(_59);
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event.js
deleted file mode 100644
index 3af47d2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event.js
+++ /dev/null
@@ -1,3 +0,0 @@
-dojo.provide("dojo.event");
-dojo.require("dojo.event.*");
-dojo.deprecated("dojo.event","replaced by dojo.event.*","0.5");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/__package__.js
deleted file mode 100644
index 3b20944..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.event.common","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
-dojo.provide("dojo.event.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/browser.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/browser.js
deleted file mode 100644
index f7ae44b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/browser.js
+++ /dev/null
@@ -1,478 +0,0 @@
-dojo.provide("dojo.event.browser");
-dojo.require("dojo.event.common");
-dojo._ie_clobber=new function(){
-this.clobberNodes=[];
-function nukeProp(_1,_2){
-try{
-_1[_2]=null;
-}
-catch(e){
-}
-try{
-delete _1[_2];
-}
-catch(e){
-}
-try{
-_1.removeAttribute(_2);
-}
-catch(e){
-}
-}
-this.clobber=function(_3){
-var na;
-var _5;
-if(_3){
-_5=_3.all||_3.getElementsByTagName("*");
-na=[_3];
-for(var x=0;x<_5.length;x++){
-if(_5[x]["__doClobber__"]){
-na.push(_5[x]);
-}
-}
-}else{
-try{
-window.onload=null;
-}
-catch(e){
-}
-na=(this.clobberNodes.length)?this.clobberNodes:document.all;
-}
-_5=null;
-var _7={};
-for(var i=na.length-1;i>=0;i=i-1){
-var el=na[i];
-try{
-if(el&&el["__clobberAttrs__"]){
-for(var j=0;j<el.__clobberAttrs__.length;j++){
-nukeProp(el,el.__clobberAttrs__[j]);
-}
-nukeProp(el,"__clobberAttrs__");
-nukeProp(el,"__doClobber__");
-}
-}
-catch(e){
-}
-}
-na=null;
-};
-};
-if(dojo.render.html.ie){
-dojo.addOnUnload(function(){
-dojo._ie_clobber.clobber();
-try{
-if((dojo["widget"])&&(dojo.widget["manager"])){
-dojo.widget.manager.destroyAll();
-}
-}
-catch(e){
-}
-if(dojo.widget){
-for(var _b in dojo.widget._templateCache){
-if(dojo.widget._templateCache[_b].node){
-dojo.dom.destroyNode(dojo.widget._templateCache[_b].node);
-dojo.widget._templateCache[_b].node=null;
-delete dojo.widget._templateCache[_b].node;
-}
-}
-}
-try{
-window.onload=null;
-}
-catch(e){
-}
-try{
-window.onunload=null;
-}
-catch(e){
-}
-dojo._ie_clobber.clobberNodes=[];
-});
-}
-dojo.event.browser=new function(){
-var _c=0;
-this.normalizedEventName=function(_d){
-switch(_d){
-case "CheckboxStateChange":
-case "DOMAttrModified":
-case "DOMMenuItemActive":
-case "DOMMenuItemInactive":
-case "DOMMouseScroll":
-case "DOMNodeInserted":
-case "DOMNodeRemoved":
-case "RadioStateChange":
-return _d;
-break;
-default:
-var _e=_d.toLowerCase();
-return (_e.indexOf("on")==0)?_e.substr(2):_e;
-break;
-}
-};
-this.clean=function(_f){
-if(dojo.render.html.ie){
-dojo._ie_clobber.clobber(_f);
-}
-};
-this.addClobberNode=function(_10){
-if(!dojo.render.html.ie){
-return;
-}
-if(!_10["__doClobber__"]){
-_10.__doClobber__=true;
-dojo._ie_clobber.clobberNodes.push(_10);
-_10.__clobberAttrs__=[];
-}
-};
-this.addClobberNodeAttrs=function(_11,_12){
-if(!dojo.render.html.ie){
-return;
-}
-this.addClobberNode(_11);
-for(var x=0;x<_12.length;x++){
-_11.__clobberAttrs__.push(_12[x]);
-}
-};
-this.removeListener=function(_14,_15,fp,_17){
-if(!_17){
-var _17=false;
-}
-_15=dojo.event.browser.normalizedEventName(_15);
-if(_15=="key"){
-if(dojo.render.html.ie){
-this.removeListener(_14,"onkeydown",fp,_17);
-}
-_15="keypress";
-}
-if(_14.removeEventListener){
-_14.removeEventListener(_15,fp,_17);
-}
-};
-this.addListener=function(_18,_19,fp,_1b,_1c){
-if(!_18){
-return;
-}
-if(!_1b){
-var _1b=false;
-}
-_19=dojo.event.browser.normalizedEventName(_19);
-if(_19=="key"){
-if(dojo.render.html.ie){
-this.addListener(_18,"onkeydown",fp,_1b,_1c);
-}
-_19="keypress";
-}
-if(!_1c){
-var _1d=function(evt){
-if(!evt){
-evt=window.event;
-}
-var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_1b){
-dojo.event.browser.stopEvent(evt);
-}
-return ret;
-};
-}else{
-_1d=fp;
-}
-if(_18.addEventListener){
-_18.addEventListener(_19,_1d,_1b);
-return _1d;
-}else{
-_19="on"+_19;
-if(typeof _18[_19]=="function"){
-var _20=_18[_19];
-_18[_19]=function(e){
-_20(e);
-return _1d(e);
-};
-}else{
-_18[_19]=_1d;
-}
-if(dojo.render.html.ie){
-this.addClobberNodeAttrs(_18,[_19]);
-}
-return _1d;
-}
-};
-this.isEvent=function(obj){
-return (typeof obj!="undefined")&&(obj)&&(typeof Event!="undefined")&&(obj.eventPhase);
-};
-this.currentEvent=null;
-this.callListener=function(_23,_24){
-if(typeof _23!="function"){
-dojo.raise("listener not a function: "+_23);
-}
-dojo.event.browser.currentEvent.currentTarget=_24;
-return _23.call(_24,dojo.event.browser.currentEvent);
-};
-this._stopPropagation=function(){
-dojo.event.browser.currentEvent.cancelBubble=true;
-};
-this._preventDefault=function(){
-dojo.event.browser.currentEvent.returnValue=false;
-};
-this.keys={KEY_BACKSPACE:8,KEY_TAB:9,KEY_CLEAR:12,KEY_ENTER:13,KEY_SHIFT:16,KEY_CTRL:17,KEY_ALT:18,KEY_PAUSE:19,KEY_CAPS_LOCK:20,KEY_ESCAPE:27,KEY_SPACE:32,KEY_PAGE_UP:33,KEY_PAGE_DOWN:34,KEY_END:35,KEY_HOME:36,KEY_LEFT_ARROW:37,KEY_UP_ARROW:38,KEY_RIGHT_ARROW:39,KEY_DOWN_ARROW:40,KEY_INSERT:45,KEY_DELETE:46,KEY_HELP:47,KEY_LEFT_WINDOW:91,KEY_RIGHT_WINDOW:92,KEY_SELECT:93,KEY_NUMPAD_0:96,KEY_NUMPAD_1:97,KEY_NUMPAD_2:98,KEY_NUMPAD_3:99,KEY_NUMPAD_4:100,KEY_NUMPAD_5:101,KEY_NUMPAD_6:102,KEY_NUMPAD_7:103,KEY_NUMPAD_8:104,KEY_NUMPAD_9:105,KEY_NUMPAD_MULTIPLY:106,KEY_NUMPAD_PLUS:107,KEY_NUMPAD_ENTER:108,KEY_NUMPAD_MINUS:109,KEY_NUMPAD_PERIOD:110,KEY_NUMPAD_DIVIDE:111,KEY_F1:112,KEY_F2:113,KEY_F3:114,KEY_F4:115,KEY_F5:116,KEY_F6:117,KEY_F7:118,KEY_F8:119,KEY_F9:120,KEY_F10:121,KEY_F11:122,KEY_F12:123,KEY_F13:124,KEY_F14:125,KEY_F15:126,KEY_NUM_LOCK:144,KEY_SCROLL_LOCK:145};
-this.revKeys=[];
-for(var key in this.keys){
-this.revKeys[this.keys[key]]=key;
-}
-this.fixEvent=function(evt,_27){
-if(!evt){
-if(window["event"]){
-evt=window.event;
-}
-}
-if((evt["type"])&&(evt["type"].indexOf("key")==0)){
-evt.keys=this.revKeys;
-for(var key in this.keys){
-evt[key]=this.keys[key];
-}
-if(evt["type"]=="keydown"&&dojo.render.html.ie){
-switch(evt.keyCode){
-case evt.KEY_SHIFT:
-case evt.KEY_CTRL:
-case evt.KEY_ALT:
-case evt.KEY_CAPS_LOCK:
-case evt.KEY_LEFT_WINDOW:
-case evt.KEY_RIGHT_WINDOW:
-case evt.KEY_SELECT:
-case evt.KEY_NUM_LOCK:
-case evt.KEY_SCROLL_LOCK:
-case evt.KEY_NUMPAD_0:
-case evt.KEY_NUMPAD_1:
-case evt.KEY_NUMPAD_2:
-case evt.KEY_NUMPAD_3:
-case evt.KEY_NUMPAD_4:
-case evt.KEY_NUMPAD_5:
-case evt.KEY_NUMPAD_6:
-case evt.KEY_NUMPAD_7:
-case evt.KEY_NUMPAD_8:
-case evt.KEY_NUMPAD_9:
-case evt.KEY_NUMPAD_PERIOD:
-break;
-case evt.KEY_NUMPAD_MULTIPLY:
-case evt.KEY_NUMPAD_PLUS:
-case evt.KEY_NUMPAD_ENTER:
-case evt.KEY_NUMPAD_MINUS:
-case evt.KEY_NUMPAD_DIVIDE:
-break;
-case evt.KEY_PAUSE:
-case evt.KEY_TAB:
-case evt.KEY_BACKSPACE:
-case evt.KEY_ENTER:
-case evt.KEY_ESCAPE:
-case evt.KEY_PAGE_UP:
-case evt.KEY_PAGE_DOWN:
-case evt.KEY_END:
-case evt.KEY_HOME:
-case evt.KEY_LEFT_ARROW:
-case evt.KEY_UP_ARROW:
-case evt.KEY_RIGHT_ARROW:
-case evt.KEY_DOWN_ARROW:
-case evt.KEY_INSERT:
-case evt.KEY_DELETE:
-case evt.KEY_F1:
-case evt.KEY_F2:
-case evt.KEY_F3:
-case evt.KEY_F4:
-case evt.KEY_F5:
-case evt.KEY_F6:
-case evt.KEY_F7:
-case evt.KEY_F8:
-case evt.KEY_F9:
-case evt.KEY_F10:
-case evt.KEY_F11:
-case evt.KEY_F12:
-case evt.KEY_F12:
-case evt.KEY_F13:
-case evt.KEY_F14:
-case evt.KEY_F15:
-case evt.KEY_CLEAR:
-case evt.KEY_HELP:
-evt.key=evt.keyCode;
-break;
-default:
-if(evt.ctrlKey||evt.altKey){
-var _29=evt.keyCode;
-if(_29>=65&&_29<=90&&evt.shiftKey==false){
-_29+=32;
-}
-if(_29>=1&&_29<=26&&evt.ctrlKey){
-_29+=96;
-}
-evt.key=String.fromCharCode(_29);
-}
-}
-}else{
-if(evt["type"]=="keypress"){
-if(dojo.render.html.opera){
-if(evt.which==0){
-evt.key=evt.keyCode;
-}else{
-if(evt.which>0){
-switch(evt.which){
-case evt.KEY_SHIFT:
-case evt.KEY_CTRL:
-case evt.KEY_ALT:
-case evt.KEY_CAPS_LOCK:
-case evt.KEY_NUM_LOCK:
-case evt.KEY_SCROLL_LOCK:
-break;
-case evt.KEY_PAUSE:
-case evt.KEY_TAB:
-case evt.KEY_BACKSPACE:
-case evt.KEY_ENTER:
-case evt.KEY_ESCAPE:
-evt.key=evt.which;
-break;
-default:
-var _29=evt.which;
-if((evt.ctrlKey||evt.altKey||evt.metaKey)&&(evt.which>=65&&evt.which<=90&&evt.shiftKey==false)){
-_29+=32;
-}
-evt.key=String.fromCharCode(_29);
-}
-}
-}
-}else{
-if(dojo.render.html.ie){
-if(!evt.ctrlKey&&!evt.altKey&&evt.keyCode>=evt.KEY_SPACE){
-evt.key=String.fromCharCode(evt.keyCode);
-}
-}else{
-if(dojo.render.html.safari){
-switch(evt.keyCode){
-case 25:
-evt.key=evt.KEY_TAB;
-evt.shift=true;
-break;
-case 63232:
-evt.key=evt.KEY_UP_ARROW;
-break;
-case 63233:
-evt.key=evt.KEY_DOWN_ARROW;
-break;
-case 63234:
-evt.key=evt.KEY_LEFT_ARROW;
-break;
-case 63235:
-evt.key=evt.KEY_RIGHT_ARROW;
-break;
-case 63236:
-evt.key=evt.KEY_F1;
-break;
-case 63237:
-evt.key=evt.KEY_F2;
-break;
-case 63238:
-evt.key=evt.KEY_F3;
-break;
-case 63239:
-evt.key=evt.KEY_F4;
-break;
-case 63240:
-evt.key=evt.KEY_F5;
-break;
-case 63241:
-evt.key=evt.KEY_F6;
-break;
-case 63242:
-evt.key=evt.KEY_F7;
-break;
-case 63243:
-evt.key=evt.KEY_F8;
-break;
-case 63244:
-evt.key=evt.KEY_F9;
-break;
-case 63245:
-evt.key=evt.KEY_F10;
-break;
-case 63246:
-evt.key=evt.KEY_F11;
-break;
-case 63247:
-evt.key=evt.KEY_F12;
-break;
-case 63250:
-evt.key=evt.KEY_PAUSE;
-break;
-case 63272:
-evt.key=evt.KEY_DELETE;
-break;
-case 63273:
-evt.key=evt.KEY_HOME;
-break;
-case 63275:
-evt.key=evt.KEY_END;
-break;
-case 63276:
-evt.key=evt.KEY_PAGE_UP;
-break;
-case 63277:
-evt.key=evt.KEY_PAGE_DOWN;
-break;
-case 63302:
-evt.key=evt.KEY_INSERT;
-break;
-case 63248:
-case 63249:
-case 63289:
-break;
-default:
-evt.key=evt.charCode>=evt.KEY_SPACE?String.fromCharCode(evt.charCode):evt.keyCode;
-}
-}else{
-evt.key=evt.charCode>0?String.fromCharCode(evt.charCode):evt.keyCode;
-}
-}
-}
-}
-}
-}
-if(dojo.render.html.ie){
-if(!evt.target){
-evt.target=evt.srcElement;
-}
-if(!evt.currentTarget){
-evt.currentTarget=(_27?_27:evt.srcElement);
-}
-if(!evt.layerX){
-evt.layerX=evt.offsetX;
-}
-if(!evt.layerY){
-evt.layerY=evt.offsetY;
-}
-var doc=(evt.srcElement&&evt.srcElement.ownerDocument)?evt.srcElement.ownerDocument:document;
-var _2b=((dojo.render.html.ie55)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
-if(!evt.pageX){
-evt.pageX=evt.clientX+(_2b.scrollLeft||0);
-}
-if(!evt.pageY){
-evt.pageY=evt.clientY+(_2b.scrollTop||0);
-}
-if(evt.type=="mouseover"){
-evt.relatedTarget=evt.fromElement;
-}
-if(evt.type=="mouseout"){
-evt.relatedTarget=evt.toElement;
-}
-this.currentEvent=evt;
-evt.callListener=this.callListener;
-evt.stopPropagation=this._stopPropagation;
-evt.preventDefault=this._preventDefault;
-}
-return evt;
-};
-this.stopEvent=function(evt){
-if(window.event){
-evt.cancelBubble=true;
-evt.returnValue=false;
-}else{
-evt.preventDefault();
-evt.stopPropagation();
-}
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/common.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/common.js
deleted file mode 100644
index e5e1a7e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/common.js
+++ /dev/null
@@ -1,547 +0,0 @@
-dojo.provide("dojo.event.common");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lang.func");
-dojo.event=new function(){
-this._canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(_1,_2){
-var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(_1.length>2)?_1[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false,maxCalls:-1};
-switch(_1.length){
-case 0:
-return;
-case 1:
-return;
-case 2:
-ao.srcFunc=_1[0];
-ao.adviceFunc=_1[1];
-break;
-case 3:
-if((dl.isObject(_1[0]))&&(dl.isString(_1[1]))&&(dl.isString(_1[2]))){
-ao.adviceType="after";
-ao.srcObj=_1[0];
-ao.srcFunc=_1[1];
-ao.adviceFunc=_1[2];
-}else{
-if((dl.isString(_1[1]))&&(dl.isString(_1[2]))){
-ao.srcFunc=_1[1];
-ao.adviceFunc=_1[2];
-}else{
-if((dl.isObject(_1[0]))&&(dl.isString(_1[1]))&&(dl.isFunction(_1[2]))){
-ao.adviceType="after";
-ao.srcObj=_1[0];
-ao.srcFunc=_1[1];
-var _5=dl.nameAnonFunc(_1[2],ao.adviceObj,_2);
-ao.adviceFunc=_5;
-}else{
-if((dl.isFunction(_1[0]))&&(dl.isObject(_1[1]))&&(dl.isString(_1[2]))){
-ao.adviceType="after";
-ao.srcObj=dj_global;
-var _5=dl.nameAnonFunc(_1[0],ao.srcObj,_2);
-ao.srcFunc=_5;
-ao.adviceObj=_1[1];
-ao.adviceFunc=_1[2];
-}
-}
-}
-}
-break;
-case 4:
-if((dl.isObject(_1[0]))&&(dl.isObject(_1[2]))){
-ao.adviceType="after";
-ao.srcObj=_1[0];
-ao.srcFunc=_1[1];
-ao.adviceObj=_1[2];
-ao.adviceFunc=_1[3];
-}else{
-if((dl.isString(_1[0]))&&(dl.isString(_1[1]))&&(dl.isObject(_1[2]))){
-ao.adviceType=_1[0];
-ao.srcObj=dj_global;
-ao.srcFunc=_1[1];
-ao.adviceObj=_1[2];
-ao.adviceFunc=_1[3];
-}else{
-if((dl.isString(_1[0]))&&(dl.isFunction(_1[1]))&&(dl.isObject(_1[2]))){
-ao.adviceType=_1[0];
-ao.srcObj=dj_global;
-var _5=dl.nameAnonFunc(_1[1],dj_global,_2);
-ao.srcFunc=_5;
-ao.adviceObj=_1[2];
-ao.adviceFunc=_1[3];
-}else{
-if((dl.isString(_1[0]))&&(dl.isObject(_1[1]))&&(dl.isString(_1[2]))&&(dl.isFunction(_1[3]))){
-ao.srcObj=_1[1];
-ao.srcFunc=_1[2];
-var _5=dl.nameAnonFunc(_1[3],dj_global,_2);
-ao.adviceObj=dj_global;
-ao.adviceFunc=_5;
-}else{
-if(dl.isObject(_1[1])){
-ao.srcObj=_1[1];
-ao.srcFunc=_1[2];
-ao.adviceObj=dj_global;
-ao.adviceFunc=_1[3];
-}else{
-if(dl.isObject(_1[2])){
-ao.srcObj=dj_global;
-ao.srcFunc=_1[1];
-ao.adviceObj=_1[2];
-ao.adviceFunc=_1[3];
-}else{
-ao.srcObj=ao.adviceObj=ao.aroundObj=dj_global;
-ao.srcFunc=_1[1];
-ao.adviceFunc=_1[2];
-ao.aroundFunc=_1[3];
-}
-}
-}
-}
-}
-}
-break;
-case 6:
-ao.srcObj=_1[1];
-ao.srcFunc=_1[2];
-ao.adviceObj=_1[3];
-ao.adviceFunc=_1[4];
-ao.aroundFunc=_1[5];
-ao.aroundObj=dj_global;
-break;
-default:
-ao.srcObj=_1[1];
-ao.srcFunc=_1[2];
-ao.adviceObj=_1[3];
-ao.adviceFunc=_1[4];
-ao.aroundObj=_1[5];
-ao.aroundFunc=_1[6];
-ao.once=_1[7];
-ao.delay=_1[8];
-ao.rate=_1[9];
-ao.adviceMsg=_1[10];
-ao.maxCalls=(!isNaN(parseInt(_1[11])))?_1[11]:-1;
-break;
-}
-if(dl.isFunction(ao.aroundFunc)){
-var _5=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_2);
-ao.aroundFunc=_5;
-}
-if(dl.isFunction(ao.srcFunc)){
-ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
-}
-if(dl.isFunction(ao.adviceFunc)){
-ao.adviceFunc=dl.getNameInObj(ao.adviceObj,ao.adviceFunc);
-}
-if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){
-ao.aroundFunc=dl.getNameInObj(ao.aroundObj,ao.aroundFunc);
-}
-if(!ao.srcObj){
-dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc);
-}
-if(!ao.adviceObj){
-dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc);
-}
-if(!ao.adviceFunc){
-dojo.debug("bad adviceFunc for srcFunc: "+ao.srcFunc);
-dojo.debugShallow(ao);
-}
-return ao;
-}
-this.connect=function(){
-if(arguments.length==1){
-var ao=arguments[0];
-}else{
-var ao=interpolateArgs(arguments,true);
-}
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.connect(ao);
-}
-ao.srcFunc="onkeypress";
-}
-if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _7={};
-for(var x in ao){
-_7[x]=ao[x];
-}
-var _9=[];
-dojo.lang.forEach(ao.srcObj,function(_a){
-if((dojo.render.html.capable)&&(dojo.lang.isString(_a))){
-_a=dojo.byId(_a);
-}
-_7.srcObj=_a;
-_9.push(dojo.event.connect.call(dojo.event,_7));
-});
-return _9;
-}
-var _b=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc);
-if(ao.adviceFunc){
-var _c=dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj,ao.adviceFunc);
-}
-_b.kwAddAdvice(ao);
-return _b;
-};
-this.log=function(a1,a2){
-var _f;
-if((arguments.length==1)&&(typeof a1=="object")){
-_f=a1;
-}else{
-_f={srcObj:a1,srcFunc:a2};
-}
-_f.adviceFunc=function(){
-var _10=[];
-for(var x=0;x<arguments.length;x++){
-_10.push(arguments[x]);
-}
-dojo.debug("("+_f.srcObj+")."+_f.srcFunc,":",_10.join(", "));
-};
-this.kwConnect(_f);
-};
-this.connectBefore=function(){
-var _12=["before"];
-for(var i=0;i<arguments.length;i++){
-_12.push(arguments[i]);
-}
-return this.connect.apply(this,_12);
-};
-this.connectAround=function(){
-var _14=["around"];
-for(var i=0;i<arguments.length;i++){
-_14.push(arguments[i]);
-}
-return this.connect.apply(this,_14);
-};
-this.connectOnce=function(){
-var ao=interpolateArgs(arguments,true);
-ao.once=true;
-return this.connect(ao);
-};
-this.connectRunOnce=function(){
-var ao=interpolateArgs(arguments,true);
-ao.maxCalls=1;
-return this.connect(ao);
-};
-this._kwConnectImpl=function(_18,_19){
-var fn=(_19)?"disconnect":"connect";
-if(typeof _18["srcFunc"]=="function"){
-_18.srcObj=_18["srcObj"]||dj_global;
-var _1b=dojo.lang.nameAnonFunc(_18.srcFunc,_18.srcObj,true);
-_18.srcFunc=_1b;
-}
-if(typeof _18["adviceFunc"]=="function"){
-_18.adviceObj=_18["adviceObj"]||dj_global;
-var _1b=dojo.lang.nameAnonFunc(_18.adviceFunc,_18.adviceObj,true);
-_18.adviceFunc=_1b;
-}
-_18.srcObj=_18["srcObj"]||dj_global;
-_18.adviceObj=_18["adviceObj"]||_18["targetObj"]||dj_global;
-_18.adviceFunc=_18["adviceFunc"]||_18["targetFunc"];
-return dojo.event[fn](_18);
-};
-this.kwConnect=function(_1c){
-return this._kwConnectImpl(_1c,false);
-};
-this.disconnect=function(){
-if(arguments.length==1){
-var ao=arguments[0];
-}else{
-var ao=interpolateArgs(arguments,true);
-}
-if(!ao.adviceFunc){
-return;
-}
-if(dojo.lang.isString(ao.srcFunc)&&(ao.srcFunc.toLowerCase()=="onkey")){
-if(dojo.render.html.ie){
-ao.srcFunc="onkeydown";
-this.disconnect(ao);
-}
-ao.srcFunc="onkeypress";
-}
-if(!ao.srcObj[ao.srcFunc]){
-return null;
-}
-var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc,true);
-mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
-return mjp;
-};
-this.kwDisconnect=function(_1f){
-return this._kwConnectImpl(_1f,true);
-};
-};
-dojo.event.MethodInvocation=function(_20,obj,_22){
-this.jp_=_20;
-this.object=obj;
-this.args=[];
-for(var x=0;x<_22.length;x++){
-this.args[x]=_22[x];
-}
-this.around_index=-1;
-};
-dojo.event.MethodInvocation.prototype.proceed=function(){
-this.around_index++;
-if(this.around_index>=this.jp_.around.length){
-return this.jp_.object[this.jp_.methodname].apply(this.jp_.object,this.args);
-}else{
-var ti=this.jp_.around[this.around_index];
-var _25=ti[0]||dj_global;
-var _26=ti[1];
-return _25[_26].call(_25,this);
-}
-};
-dojo.event.MethodJoinPoint=function(obj,_28){
-this.object=obj||dj_global;
-this.methodname=_28;
-this.methodfunc=this.object[_28];
-this.squelch=false;
-};
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_2a){
-if(!obj){
-obj=dj_global;
-}
-var ofn=obj[_2a];
-if(!ofn){
-ofn=obj[_2a]=function(){
-};
-if(!obj[_2a]){
-dojo.raise("Cannot set do-nothing method on that object "+_2a);
-}
-}else{
-if((typeof ofn!="function")&&(!dojo.lang.isFunction(ofn))&&(!dojo.lang.isAlien(ofn))){
-return null;
-}
-}
-var _2c=_2a+"$joinpoint";
-var _2d=_2a+"$joinpoint$method";
-var _2e=obj[_2c];
-if(!_2e){
-var _2f=false;
-if(dojo.event["browser"]){
-if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_2f=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_2c,_2d,_2a]);
-}
-}
-var _30=ofn.length;
-obj[_2d]=ofn;
-_2e=obj[_2c]=new dojo.event.MethodJoinPoint(obj,_2d);
-if(!_2f){
-obj[_2a]=function(){
-return _2e.run.apply(_2e,arguments);
-};
-}else{
-obj[_2a]=function(){
-var _31=[];
-if(!arguments.length){
-var evt=null;
-try{
-if(obj.ownerDocument){
-evt=obj.ownerDocument.parentWindow.event;
-}else{
-if(obj.documentElement){
-evt=obj.documentElement.ownerDocument.parentWindow.event;
-}else{
-if(obj.event){
-evt=obj.event;
-}else{
-evt=window.event;
-}
-}
-}
-}
-catch(e){
-evt=window.event;
-}
-if(evt){
-_31.push(dojo.event.browser.fixEvent(evt,this));
-}
-}else{
-for(var x=0;x<arguments.length;x++){
-if((x==0)&&(dojo.event.browser.isEvent(arguments[x]))){
-_31.push(dojo.event.browser.fixEvent(arguments[x],this));
-}else{
-_31.push(arguments[x]);
-}
-}
-}
-return _2e.run.apply(_2e,_31);
-};
-}
-obj[_2a].__preJoinArity=_30;
-}
-return _2e;
-};
-dojo.lang.extend(dojo.event.MethodJoinPoint,{squelch:false,unintercept:function(){
-this.object[this.methodname]=this.methodfunc;
-this.before=[];
-this.after=[];
-this.around=[];
-},disconnect:dojo.lang.forward("unintercept"),run:function(){
-var obj=this.object||dj_global;
-var _35=arguments;
-var _36=[];
-for(var x=0;x<_35.length;x++){
-_36[x]=_35[x];
-}
-var _38=function(_39){
-if(!_39){
-dojo.debug("Null argument to unrollAdvice()");
-return;
-}
-var _3a=_39[0]||dj_global;
-var _3b=_39[1];
-if(!_3a[_3b]){
-dojo.raise("function \""+_3b+"\" does not exist on \""+_3a+"\"");
-}
-var _3c=_39[2]||dj_global;
-var _3d=_39[3];
-var msg=_39[6];
-var _3f=_39[7];
-if(_3f>-1){
-if(_3f==0){
-return;
-}
-_39[7]--;
-}
-var _40;
-var to={args:[],jp_:this,object:obj,proceed:function(){
-return _3a[_3b].apply(_3a,to.args);
-}};
-to.args=_36;
-var _42=parseInt(_39[4]);
-var _43=((!isNaN(_42))&&(_39[4]!==null)&&(typeof _39[4]!="undefined"));
-if(_39[5]){
-var _44=parseInt(_39[5]);
-var cur=new Date();
-var _46=false;
-if((_39["last"])&&((cur-_39.last)<=_44)){
-if(dojo.event._canTimeout){
-if(_39["delayTimer"]){
-clearTimeout(_39.delayTimer);
-}
-var tod=parseInt(_44*2);
-var _48=dojo.lang.shallowCopy(_39);
-_39.delayTimer=setTimeout(function(){
-_48[5]=0;
-_38(_48);
-},tod);
-}
-return;
-}else{
-_39.last=cur;
-}
-}
-if(_3d){
-_3c[_3d].call(_3c,to);
-}else{
-if((_43)&&((dojo.render.html)||(dojo.render.svg))){
-dj_global["setTimeout"](function(){
-if(msg){
-_3a[_3b].call(_3a,to);
-}else{
-_3a[_3b].apply(_3a,_35);
-}
-},_42);
-}else{
-if(msg){
-_3a[_3b].call(_3a,to);
-}else{
-_3a[_3b].apply(_3a,_35);
-}
-}
-}
-};
-var _49=function(){
-if(this.squelch){
-try{
-return _38.apply(this,arguments);
-}
-catch(e){
-dojo.debug(e);
-}
-}else{
-return _38.apply(this,arguments);
-}
-};
-if((this["before"])&&(this.before.length>0)){
-dojo.lang.forEach(this.before.concat(new Array()),_49);
-}
-var _4a;
-try{
-if((this["around"])&&(this.around.length>0)){
-var mi=new dojo.event.MethodInvocation(this,obj,_35);
-_4a=mi.proceed();
-}else{
-if(this.methodfunc){
-_4a=this.object[this.methodname].apply(this.object,_35);
-}
-}
-}
-catch(e){
-if(!this.squelch){
-dojo.debug(e,"when calling",this.methodname,"on",this.object,"with arguments",_35);
-dojo.raise(e);
-}
-}
-if((this["after"])&&(this.after.length>0)){
-dojo.lang.forEach(this.after.concat(new Array()),_49);
-}
-return (this.methodfunc)?_4a:null;
-},getArr:function(_4c){
-var _4d="after";
-if((typeof _4c=="string")&&(_4c.indexOf("before")!=-1)){
-_4d="before";
-}else{
-if(_4c=="around"){
-_4d="around";
-}
-}
-if(!this[_4d]){
-this[_4d]=[];
-}
-return this[_4d];
-},kwAddAdvice:function(_4e){
-this.addAdvice(_4e["adviceObj"],_4e["adviceFunc"],_4e["aroundObj"],_4e["aroundFunc"],_4e["adviceType"],_4e["precedence"],_4e["once"],_4e["delay"],_4e["rate"],_4e["adviceMsg"],_4e["maxCalls"]);
-},addAdvice:function(_4f,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59){
-var arr=this.getArr(_53);
-if(!arr){
-dojo.raise("bad this: "+this);
-}
-var ao=[_4f,_50,_51,_52,_56,_57,_58,_59];
-if(_55){
-if(this.hasAdvice(_4f,_50,_53,arr)>=0){
-return;
-}
-}
-if(_54=="first"){
-arr.unshift(ao);
-}else{
-arr.push(ao);
-}
-},hasAdvice:function(_5c,_5d,_5e,arr){
-if(!arr){
-arr=this.getArr(_5e);
-}
-var ind=-1;
-for(var x=0;x<arr.length;x++){
-var aao=(typeof _5d=="object")?(new String(_5d)).toString():_5d;
-var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_5c)&&(a1o==aao)){
-ind=x;
-}
-}
-return ind;
-},removeAdvice:function(_64,_65,_66,_67){
-var arr=this.getArr(_66);
-var ind=this.hasAdvice(_64,_65,_66,arr);
-if(ind==-1){
-return false;
-}
-while(ind!=-1){
-arr.splice(ind,1);
-if(_67){
-break;
-}
-ind=this.hasAdvice(_64,_65,_66,arr);
-}
-return true;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/topic.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/topic.js
deleted file mode 100644
index 9b0451a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/event/topic.js
+++ /dev/null
@@ -1,66 +0,0 @@
-dojo.require("dojo.event.common");
-dojo.provide("dojo.event.topic");
-dojo.event.topic=new function(){
-this.topics={};
-this.getTopic=function(_1){
-if(!this.topics[_1]){
-this.topics[_1]=new this.TopicImpl(_1);
-}
-return this.topics[_1];
-};
-this.registerPublisher=function(_2,_3,_4){
-var _2=this.getTopic(_2);
-_2.registerPublisher(_3,_4);
-};
-this.subscribe=function(_5,_6,_7){
-var _5=this.getTopic(_5);
-_5.subscribe(_6,_7);
-};
-this.unsubscribe=function(_8,_9,_a){
-var _8=this.getTopic(_8);
-_8.unsubscribe(_9,_a);
-};
-this.destroy=function(_b){
-this.getTopic(_b).destroy();
-delete this.topics[_b];
-};
-this.publishApply=function(_c,_d){
-var _c=this.getTopic(_c);
-_c.sendMessage.apply(_c,_d);
-};
-this.publish=function(_e,_f){
-var _e=this.getTopic(_e);
-var _10=[];
-for(var x=1;x<arguments.length;x++){
-_10.push(arguments[x]);
-}
-_e.sendMessage.apply(_e,_10);
-};
-};
-dojo.event.topic.TopicImpl=function(_12){
-this.topicName=_12;
-this.subscribe=function(_13,_14){
-var tf=_14||_13;
-var to=(!_14)?dj_global:_13;
-return dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this.unsubscribe=function(_17,_18){
-var tf=(!_18)?_17:_18;
-var to=(!_18)?null:_17;
-return dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this._getJoinPoint=function(){
-return dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage");
-};
-this.setSquelch=function(_1b){
-this._getJoinPoint().squelch=_1b;
-};
-this.destroy=function(){
-this._getJoinPoint().disconnect();
-};
-this.registerPublisher=function(_1c,_1d){
-dojo.event.connect(_1c,_1d,this,"sendMessage");
-};
-this.sendMessage=function(_1e){
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/experimental.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/experimental.js
deleted file mode 100644
index adaaabe..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/experimental.js
+++ /dev/null
@@ -1,9 +0,0 @@
-dojo.provide("dojo.experimental");
-dojo.experimental=function(_1,_2){
-var _3="EXPERIMENTAL: "+_1;
-_3+=" -- Not yet ready for use.  APIs subject to change without notice.";
-if(_2){
-_3+=" "+_2;
-}
-dojo.debug(_3);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash.js
deleted file mode 100644
index eb3fdb0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash.js
+++ /dev/null
@@ -1,433 +0,0 @@
-dojo.provide("dojo.flash");
-dojo.require("dojo.string.*");
-dojo.require("dojo.uri.*");
-dojo.require("dojo.html.common");
-dojo.flash=function(){
-};
-dojo.flash={flash6_version:null,flash8_version:null,ready:false,_visible:true,_loadedListeners:new Array(),_installingListeners:new Array(),setSwf:function(_1){
-if(_1==null||dojo.lang.isUndefined(_1)){
-return;
-}
-if(_1.flash6!=null&&!dojo.lang.isUndefined(_1.flash6)){
-this.flash6_version=_1.flash6;
-}
-if(_1.flash8!=null&&!dojo.lang.isUndefined(_1.flash8)){
-this.flash8_version=_1.flash8;
-}
-if(!dojo.lang.isUndefined(_1.visible)){
-this._visible=_1.visible;
-}
-this._initialize();
-},useFlash6:function(){
-if(this.flash6_version==null){
-return false;
-}else{
-if(this.flash6_version!=null&&dojo.flash.info.commVersion==6){
-return true;
-}else{
-return false;
-}
-}
-},useFlash8:function(){
-if(this.flash8_version==null){
-return false;
-}else{
-if(this.flash8_version!=null&&dojo.flash.info.commVersion==8){
-return true;
-}else{
-return false;
-}
-}
-},addLoadedListener:function(_2){
-this._loadedListeners.push(_2);
-},addInstallingListener:function(_3){
-this._installingListeners.push(_3);
-},loaded:function(){
-dojo.flash.ready=true;
-if(dojo.flash._loadedListeners.length>0){
-for(var i=0;i<dojo.flash._loadedListeners.length;i++){
-dojo.flash._loadedListeners[i].call(null);
-}
-}
-},installing:function(){
-if(dojo.flash._installingListeners.length>0){
-for(var i=0;i<dojo.flash._installingListeners.length;i++){
-dojo.flash._installingListeners[i].call(null);
-}
-}
-},_initialize:function(){
-var _6=new dojo.flash.Install();
-dojo.flash.installer=_6;
-if(_6.needed()==true){
-_6.install();
-}else{
-dojo.flash.obj=new dojo.flash.Embed(this._visible);
-dojo.flash.obj.write(dojo.flash.info.commVersion);
-dojo.flash.comm=new dojo.flash.Communicator();
-}
-}};
-dojo.flash.Info=function(){
-if(dojo.render.html.ie){
-document.writeln("<script language=\"VBScript\" type=\"text/vbscript\">");
-document.writeln("Function VBGetSwfVer(i)");
-document.writeln("  on error resume next");
-document.writeln("  Dim swControl, swVersion");
-document.writeln("  swVersion = 0");
-document.writeln("  set swControl = CreateObject(\"ShockwaveFlash.ShockwaveFlash.\" + CStr(i))");
-document.writeln("  if (IsObject(swControl)) then");
-document.writeln("    swVersion = swControl.GetVariable(\"$version\")");
-document.writeln("  end if");
-document.writeln("  VBGetSwfVer = swVersion");
-document.writeln("End Function");
-document.writeln("</script>");
-}
-this._detectVersion();
-this._detectCommunicationVersion();
-};
-dojo.flash.Info.prototype={version:-1,versionMajor:-1,versionMinor:-1,versionRevision:-1,capable:false,commVersion:6,installing:false,isVersionOrAbove:function(_7,_8,_9){
-_9=parseFloat("."+_9);
-if(this.versionMajor>=_7&&this.versionMinor>=_8&&this.versionRevision>=_9){
-return true;
-}else{
-return false;
-}
-},_detectVersion:function(){
-var _a;
-for(var _b=25;_b>0;_b--){
-if(dojo.render.html.ie){
-_a=VBGetSwfVer(_b);
-}else{
-_a=this._JSFlashInfo(_b);
-}
-if(_a==-1){
-this.capable=false;
-return;
-}else{
-if(_a!=0){
-var _c;
-if(dojo.render.html.ie){
-var _d=_a.split(" ");
-var _e=_d[1];
-_c=_e.split(",");
-}else{
-_c=_a.split(".");
-}
-this.versionMajor=_c[0];
-this.versionMinor=_c[1];
-this.versionRevision=_c[2];
-var _f=this.versionMajor+"."+this.versionRevision;
-this.version=parseFloat(_f);
-this.capable=true;
-break;
-}
-}
-}
-},_JSFlashInfo:function(_10){
-if(navigator.plugins!=null&&navigator.plugins.length>0){
-if(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]){
-var _11=navigator.plugins["Shockwave Flash 2.0"]?" 2.0":"";
-var _12=navigator.plugins["Shockwave Flash"+_11].description;
-var _13=_12.split(" ");
-var _14=_13[2].split(".");
-var _15=_14[0];
-var _16=_14[1];
-if(_13[3]!=""){
-var _17=_13[3].split("r");
-}else{
-var _17=_13[4].split("r");
-}
-var _18=_17[1]>0?_17[1]:0;
-var _19=_15+"."+_16+"."+_18;
-return _19;
-}
-}
-return -1;
-},_detectCommunicationVersion:function(){
-if(this.capable==false){
-this.commVersion=null;
-return;
-}
-if(typeof djConfig["forceFlashComm"]!="undefined"&&typeof djConfig["forceFlashComm"]!=null){
-this.commVersion=djConfig["forceFlashComm"];
-return;
-}
-if(dojo.render.html.safari==true||dojo.render.html.opera==true){
-this.commVersion=8;
-}else{
-this.commVersion=6;
-}
-}};
-dojo.flash.Embed=function(_1a){
-this._visible=_1a;
-};
-dojo.flash.Embed.prototype={width:215,height:138,id:"flashObject",_visible:true,protocol:function(){
-switch(window.location.protocol){
-case "https:":
-return "https";
-break;
-default:
-return "http";
-break;
-}
-},write:function(_1b,_1c){
-if(dojo.lang.isUndefined(_1c)){
-_1c=false;
-}
-var _1d=new dojo.string.Builder();
-_1d.append("width: "+this.width+"px; ");
-_1d.append("height: "+this.height+"px; ");
-if(this._visible==false){
-_1d.append("position: absolute; ");
-_1d.append("z-index: 10000; ");
-_1d.append("top: -1000px; ");
-_1d.append("left: -1000px; ");
-}
-_1d=_1d.toString();
-var _1e;
-var _1f;
-if(_1b==6){
-_1f=dojo.flash.flash6_version;
-var _20=djConfig.baseRelativePath;
-_1f=_1f+"?baseRelativePath="+escape(_20);
-_1e="<embed id=\""+this.id+"\" src=\""+_1f+"\" "+"    quality=\"high\" bgcolor=\"#ffffff\" "+"    width=\""+this.width+"\" height=\""+this.height+"\" "+"    name=\""+this.id+"\" "+"    align=\"middle\" allowScriptAccess=\"sameDomain\" "+"    type=\"application/x-shockwave-flash\" swLiveConnect=\"true\" "+"    pluginspage=\""+this.protocol()+"://www.macromedia.com/go/getflashplayer\">";
-}else{
-_1f=dojo.flash.flash8_version;
-var _21=_1f;
-var _22=_1f;
-var _20=djConfig.baseRelativePath;
-if(_1c){
-var _23=escape(window.location);
-document.title=document.title.slice(0,47)+" - Flash Player Installation";
-var _24=escape(document.title);
-_21+="?MMredirectURL="+_23+"&MMplayerType=ActiveX"+"&MMdoctitle="+_24+"&baseRelativePath="+escape(_20);
-_22+="?MMredirectURL="+_23+"&MMplayerType=PlugIn"+"&baseRelativePath="+escape(_20);
-}
-if(_22.indexOf("?")==-1){
-_22+="?baseRelativePath="+escape(_20)+"' ";
-}
-_1e="<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" "+"codebase=\""+this.protocol()+"://fpdownload.macromedia.com/pub/shockwave/cabs/flash/"+"swflash.cab#version=8,0,0,0\" "+"width=\""+this.width+"\" "+"height=\""+this.height+"\" "+"id=\""+this.id+"\" "+"align=\"middle\"> "+"<param name=\"allowScriptAccess\" value=\"sameDomain\" /> "+"<param name=\"movie\" value=\""+_21+"\" /> "+"<param name=\"quality\" value=\"high\" /> "+"<param name=\"bgcolor\" value=\"#ffffff\" /> "+"<embed src=\""+_22+"' "+"quality=\"high\" "+"bgcolor=\"#ffffff\" "+"width=\""+this.width+"\" "+"height=\""+this.height+"\" "+"id=\""+this.id+"\" "+"name=\""+this.id+"\" "+"swLiveConnect=\"true\" "+"align=\"middle\" "+"allowScriptAccess=\"sameDomain\" "+"type=\"application/x-shockwave-flash\" "+"pluginspage=\""+this.protocol()+"://www.macromedia.com/go/getflashplayer\" />"+"</object>";
-}
-_1e="<div id=\""+this.id+"Container\" style=\""+_1d+"\"> "+_1e+"</div>";
-document.writeln(_1e);
-},get:function(){
-return document.getElementById(this.id);
-},setVisible:function(_25){
-var _26=dojo.byId(this.id+"Container");
-if(_25==true){
-_26.style.visibility="visible";
-}else{
-_26.style.position="absolute";
-_26.style.x="-1000px";
-_26.style.y="-1000px";
-_26.style.visibility="hidden";
-}
-},center:function(){
-var _27=this.width;
-var _28=this.height;
-var _29=dojo.html.getScroll().offset;
-var _2a=dojo.html.getViewport();
-var x=_29.x+(_2a.width-_27)/2;
-var y=_29.y+(_2a.height-_28)/2;
-var _2d=dojo.byId(this.id+"Container");
-_2d.style.top=y+"px";
-_2d.style.left=x+"px";
-}};
-dojo.flash.Communicator=function(){
-if(dojo.flash.useFlash6()){
-this._writeFlash6();
-}else{
-if(dojo.flash.useFlash8()){
-this._writeFlash8();
-}
-}
-};
-dojo.flash.Communicator.prototype={_writeFlash6:function(){
-var id=dojo.flash.obj.id;
-document.writeln("<script language=\"JavaScript\">");
-document.writeln("  function "+id+"_DoFSCommand(command, args){ ");
-document.writeln("    dojo.flash.comm._handleFSCommand(command, args); ");
-document.writeln("}");
-document.writeln("</script>");
-if(dojo.render.html.ie){
-document.writeln("<SCRIPT LANGUAGE=VBScript> ");
-document.writeln("on error resume next ");
-document.writeln("Sub "+id+"_FSCommand(ByVal command, ByVal args)");
-document.writeln(" call "+id+"_DoFSCommand(command, args)");
-document.writeln("end sub");
-document.writeln("</SCRIPT> ");
-}
-},_writeFlash8:function(){
-},_handleFSCommand:function(_2f,_30){
-if(_2f!=null&&!dojo.lang.isUndefined(_2f)&&/^FSCommand:(.*)/.test(_2f)==true){
-_2f=_2f.match(/^FSCommand:(.*)/)[1];
-}
-if(_2f=="addCallback"){
-this._fscommandAddCallback(_2f,_30);
-}else{
-if(_2f=="call"){
-this._fscommandCall(_2f,_30);
-}else{
-if(_2f=="fscommandReady"){
-this._fscommandReady();
-}
-}
-}
-},_fscommandAddCallback:function(_31,_32){
-var _33=_32;
-var _34=function(){
-return dojo.flash.comm._call(_33,arguments);
-};
-dojo.flash.comm[_33]=_34;
-dojo.flash.obj.get().SetVariable("_succeeded",true);
-},_fscommandCall:function(_35,_36){
-var _37=dojo.flash.obj.get();
-var _38=_36;
-var _39=parseInt(_37.GetVariable("_numArgs"));
-var _3a=new Array();
-for(var i=0;i<_39;i++){
-var _3c=_37.GetVariable("_"+i);
-_3a.push(_3c);
-}
-var _3d;
-if(_38.indexOf(".")==-1){
-_3d=window[_38];
-}else{
-_3d=eval(_38);
-}
-var _3e=null;
-if(!dojo.lang.isUndefined(_3d)&&_3d!=null){
-_3e=_3d.apply(null,_3a);
-}
-_37.SetVariable("_returnResult",_3e);
-},_fscommandReady:function(){
-var _3f=dojo.flash.obj.get();
-_3f.SetVariable("fscommandReady","true");
-},_call:function(_40,_41){
-var _42=dojo.flash.obj.get();
-_42.SetVariable("_functionName",_40);
-_42.SetVariable("_numArgs",_41.length);
-for(var i=0;i<_41.length;i++){
-var _44=_41[i];
-_44=_44.replace(/\0/g,"\\0");
-_42.SetVariable("_"+i,_44);
-}
-_42.TCallLabel("/_flashRunner","execute");
-var _45=_42.GetVariable("_returnResult");
-_45=_45.replace(/\\0/g,"\x00");
-return _45;
-},_addExternalInterfaceCallback:function(_46){
-var _47=function(){
-var _48=new Array(arguments.length);
-for(var i=0;i<arguments.length;i++){
-_48[i]=arguments[i];
-}
-return dojo.flash.comm._execFlash(_46,_48);
-};
-dojo.flash.comm[_46]=_47;
-},_encodeData:function(_4a){
-var _4b=/\&([^;]*)\;/g;
-_4a=_4a.replace(_4b,"&amp;$1;");
-_4a=_4a.replace(/</g,"&lt;");
-_4a=_4a.replace(/>/g,"&gt;");
-_4a=_4a.replace("\\","&custom_backslash;&custom_backslash;");
-_4a=_4a.replace(/\n/g,"\\n");
-_4a=_4a.replace(/\r/g,"\\r");
-_4a=_4a.replace(/\f/g,"\\f");
-_4a=_4a.replace(/\0/g,"\\0");
-_4a=_4a.replace(/\'/g,"\\'");
-_4a=_4a.replace(/\"/g,"\\\"");
-return _4a;
-},_decodeData:function(_4c){
-if(_4c==null||typeof _4c=="undefined"){
-return _4c;
-}
-_4c=_4c.replace(/\&custom_lt\;/g,"<");
-_4c=_4c.replace(/\&custom_gt\;/g,">");
-_4c=eval("\""+_4c+"\"");
-return _4c;
-},_chunkArgumentData:function(_4d,_4e){
-var _4f=dojo.flash.obj.get();
-var _50=Math.ceil(_4d.length/1024);
-for(var i=0;i<_50;i++){
-var _52=i*1024;
-var _53=i*1024+1024;
-if(i==(_50-1)){
-_53=i*1024+_4d.length;
-}
-var _54=_4d.substring(_52,_53);
-_54=this._encodeData(_54);
-_4f.CallFunction("<invoke name=\"chunkArgumentData\" "+"returntype=\"javascript\">"+"<arguments>"+"<string>"+_54+"</string>"+"<number>"+_4e+"</number>"+"</arguments>"+"</invoke>");
-}
-},_chunkReturnData:function(){
-var _55=dojo.flash.obj.get();
-var _56=_55.getReturnLength();
-var _57=new Array();
-for(var i=0;i<_56;i++){
-var _59=_55.CallFunction("<invoke name=\"chunkReturnData\" "+"returntype=\"javascript\">"+"<arguments>"+"<number>"+i+"</number>"+"</arguments>"+"</invoke>");
-if(_59=="\"\""||_59=="''"){
-_59="";
-}else{
-_59=_59.substring(1,_59.length-1);
-}
-_57.push(_59);
-}
-var _5a=_57.join("");
-return _5a;
-},_execFlash:function(_5b,_5c){
-var _5d=dojo.flash.obj.get();
-_5d.startExec();
-_5d.setNumberArguments(_5c.length);
-for(var i=0;i<_5c.length;i++){
-this._chunkArgumentData(_5c[i],i);
-}
-_5d.exec(_5b);
-var _5f=this._chunkReturnData();
-_5f=this._decodeData(_5f);
-_5d.endExec();
-return _5f;
-}};
-dojo.flash.Install=function(){
-};
-dojo.flash.Install.prototype={needed:function(){
-if(dojo.flash.info.capable==false){
-return true;
-}
-if(dojo.render.os.mac==true&&!dojo.flash.info.isVersionOrAbove(8,0,0)){
-return true;
-}
-if(!dojo.flash.info.isVersionOrAbove(6,0,0)){
-return true;
-}
-return false;
-},install:function(){
-dojo.flash.info.installing=true;
-dojo.flash.installing();
-if(dojo.flash.info.capable==false){
-var _60=new dojo.flash.Embed(false);
-_60.write(8);
-}else{
-if(dojo.flash.info.isVersionOrAbove(6,0,65)){
-var _60=new dojo.flash.Embed(false);
-_60.write(8,true);
-_60.setVisible(true);
-_60.center();
-}else{
-alert("This content requires a more recent version of the Macromedia "+" Flash Player.");
-window.location.href=+dojo.flash.Embed.protocol()+"://www.macromedia.com/go/getflashplayer";
-}
-}
-},_onInstallStatus:function(msg){
-if(msg=="Download.Complete"){
-dojo.flash._initialize();
-}else{
-if(msg=="Download.Cancelled"){
-alert("This content requires a more recent version of the Macromedia "+" Flash Player.");
-window.location.href=dojo.flash.Embed.protocol()+"://www.macromedia.com/go/getflashplayer";
-}else{
-if(msg=="Download.Failed"){
-alert("There was an error downloading the Flash Player update. "+"Please try again later, or visit macromedia.com to download "+"the latest version of the Flash plugin.");
-}
-}
-}
-}};
-dojo.flash.info=new dojo.flash.Info();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash6/DojoExternalInterface.as b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash6/DojoExternalInterface.as
deleted file mode 100644
index c99e429..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash6/DojoExternalInterface.as
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/** 

-		An implementation of Flash 8's ExternalInterface that works with Flash 6

-		and which is source-compatible with Flash 8. 

-		

-		@author Brad Neuberg, bkn3@columbia.edu 

-*/

-

-class DojoExternalInterface{

-	public static var available:Boolean;

-	public static var dojoPath = "";

-	

-	public static var _fscommandReady = false;

-	public static var _callbacks = new Array();

-

-	public static function initialize(){ 

-		//getURL("javascript:dojo.debug('FLASH:DojoExternalInterface initialize')");

-		// FIXME: Set available variable by testing for capabilities

-		DojoExternalInterface.available = true;

-		

-		// extract the dojo base path

-		DojoExternalInterface.dojoPath = DojoExternalInterface.getDojoPath();

-		//getURL("javascript:dojo.debug('FLASH:dojoPath="+DojoExternalInterface.dojoPath+"')");

-		

-		// Sometimes, on IE, the fscommand infrastructure can take a few hundred

-		// milliseconds the first time a page loads. Set a timer to keep checking

-		// to make sure we can issue fscommands; otherwise, our calls to fscommand

-		// for setCallback() and loaded() will just "disappear"

-		_root.fscommandReady = false;

-		var fsChecker = function(){

-			// issue a test fscommand

-			fscommand("fscommandReady");

-			

-			// JavaScript should set _root.fscommandReady if it got the call

-			if(_root.fscommandReady == "true"){

-				DojoExternalInterface._fscommandReady = true;

-				clearInterval(_root.fsTimer);

-			}

-		};

-		_root.fsTimer = setInterval(fsChecker, 100);

-	}

-	

-	public static function addCallback(methodName:String, instance:Object, 

-											method:Function) : Boolean{

-		// A variable that indicates whether the call below succeeded

-		_root._succeeded = null;

-		

-		// Callbacks are registered with the JavaScript side as follows.

-		// On the Flash side, we maintain a lookup table that associates

-		// the methodName with the actual instance and method that are

-		// associated with this method.

-		// Using fscommand, we send over the action "addCallback", with the

-		// argument being the methodName to add, such as "foobar".

-		// The JavaScript takes these values and registers the existence of

-		// this callback point.

-		

-		// precede the method name with a _ character in case it starts

-		// with a number

-		_callbacks["_" + methodName] = {_instance: instance, _method: method};

-		_callbacks[_callbacks.length] = methodName;

-		

-		// The API for ExternalInterface says we have to make sure the call

-		// succeeded; check to see if there is a value 

-		// for _succeeded, which is set by the JavaScript side

-		if(_root._succeeded == null){

-			return false;

-		}else{

-			return true;

-		}

-	}

-	

-	public static function call(methodName:String, 

-								resultsCallback:Function) : Void{

-		// FIXME: support full JSON serialization

-		

-		// First, we pack up all of the arguments to this call and set them

-		// as Flash variables, which the JavaScript side will unpack using

-		// plugin.GetVariable(). We set the number of arguments as "_numArgs",

-		// and add each argument as a variable, such as "_1", "_2", etc., starting

-		// from 0.

-		// We then execute an fscommand with the action "call" and the

-		// argument being the method name. JavaScript takes the method name,

-		// retrieves the arguments using GetVariable, executes the method,

-		// and then places the return result in a Flash variable

-		// named "_returnResult".

-		_root._numArgs = arguments.length - 2;

-		for(var i = 2; i < arguments.length; i++){

-			var argIndex = i - 2;

-			_root["_" + argIndex] = arguments[i];

-		}

-		

-		_root._returnResult = undefined;

-		fscommand("call", methodName);

-		

-		// immediately return if the caller is not waiting for return results

-		if(resultsCallback == undefined || resultsCallback == null){

-			return;

-		}

-		

-		// check at regular intervals for return results	

-		var resultsChecker = function(){

-			if((typeof _root._returnResult != "undefined")&&

-				(_root._returnResult != "undefined")){

-				clearInterval(_root._callbackID);

-				resultsCallback.call(null, _root._returnResult);

-			}

-		};	

-		_root._callbackID = setInterval(resultsChecker, 100);

-	}

-	

-	/** 

-			Called by Flash to indicate to JavaScript that we are ready to have

-			our Flash functions called. Calling loaded()

-			will fire the dojo.flash.loaded() event, so that JavaScript can know that

-			Flash has finished loading and adding its callbacks, and can begin to

-			interact with the Flash file.

-	*/

-	public static function loaded(){

-		//getURL("javascript:dojo.debug('FLASH:loaded')");

-		

-		// one more step: see if fscommands are ready to be executed; if not,

-		// set an interval that will keep running until fscommands are ready;

-		// make sure the gateway is loaded as well

-		var execLoaded = function(){

-			if(DojoExternalInterface._fscommandReady == true){

-				clearInterval(_root.loadedInterval);

-				

-				// initialize the small Flash file that helps gateway JS to Flash

-				// calls

-				DojoExternalInterface._initializeFlashRunner();

-			}	

-		};

-		

-		if(_fscommandReady == true){

-			execLoaded();

-		}else{

-			_root.loadedInterval = setInterval(execLoaded, 50);

-		}

-	}

-	

-	/** 

-			Handles and executes a JavaScript to Flash method call. Used by

-			initializeFlashRunner. 

-	*/

-	public static function _handleJSCall(){

-		// get our parameters

-		var numArgs = parseInt(_root._numArgs);

-		var jsArgs = new Array();

-		for(var i = 0; i < numArgs; i++){

-			var currentValue = _root["_" + i];

-			jsArgs.push(currentValue);

-		}

-		

-		// get our function name

-		var functionName = _root._functionName;

-		

-		// now get the actual instance and method object to execute on,

-		// using our lookup table that was constructed by calls to

-		// addCallback on initialization

-		var instance = _callbacks["_" + functionName]._instance;

-		var method = _callbacks["_" + functionName]._method;

-		

-		// execute it

-		var results = method.apply(instance, jsArgs);

-		

-		// return the results

-		_root._returnResult = results;

-	}

-	

-	/** Called by the flash6_gateway.swf to indicate that it is loaded. */

-	public static function _gatewayReady(){

-		for(var i = 0; i < _callbacks.length; i++){

-			fscommand("addCallback", _callbacks[i]);

-		}

-		call("dojo.flash.loaded");

-	}

-	

-	/** 

-			When JavaScript wants to communicate with Flash it simply sets

-			the Flash variable "_execute" to true; this method creates the

-			internal Movie Clip, called the Flash Runner, that makes this

-			magic happen.

-	*/

-	public static function _initializeFlashRunner(){

-		// figure out where our Flash movie is

-		var swfLoc = DojoExternalInterface.dojoPath + "flash6_gateway.swf";

-		

-		// load our gateway helper file

-		_root.createEmptyMovieClip("_flashRunner", 5000);

-		_root._flashRunner._lockroot = true;

-		_root._flashRunner.loadMovie(swfLoc);

-	}

-	

-	private static function getDojoPath(){

-		var url = _root._url;

-		var start = url.indexOf("baseRelativePath=") + "baseRelativePath=".length;

-		var path = url.substring(start);

-		var end = path.indexOf("&");

-		if(end != -1){

-			path = path.substring(0, end);

-		}

-		return path;

-	}

-}

-

-// vim:ts=4:noet:tw=0:

diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash6/flash6_gateway.fla b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash6/flash6_gateway.fla
deleted file mode 100644
index d1f1c74..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash6/flash6_gateway.fla
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash8/DojoExternalInterface.as b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash8/DojoExternalInterface.as
deleted file mode 100644
index 9e3865d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash8/DojoExternalInterface.as
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/**

-	A wrapper around Flash 8's ExternalInterface; DojoExternalInterface is needed so that we

-	can do a Flash 6 implementation of ExternalInterface, and be able

-	to support having a single codebase that uses DojoExternalInterface

-	across Flash versions rather than having two seperate source bases,

-	where one uses ExternalInterface and the other uses DojoExternalInterface.

-	

-	DojoExternalInterface class does a variety of optimizations to bypass ExternalInterface's

-	unbelievably bad performance so that we can have good performance

-	on Safari; see the blog post

-	http://codinginparadise.org/weblog/2006/02/how-to-speed-up-flash-8s.html

-	for details.

-	

-	@author Brad Neuberg, bkn3@columbia.edu

-*/

-import flash.external.ExternalInterface;

-

-class DojoExternalInterface{

-	public static var available:Boolean;

-	public static var dojoPath = "";

-	

-	private static var flashMethods:Array = new Array();

-	private static var numArgs:Number;

-	private static var argData:Array;

-	private static var resultData = null;

-	

-	public static function initialize(){

-		// extract the dojo base path

-		DojoExternalInterface.dojoPath = DojoExternalInterface.getDojoPath();

-		

-		// see if we need to do an express install

-		var install:ExpressInstall = new ExpressInstall();

-		if(install.needsUpdate){

-			install.init();

-		}

-		

-		// register our callback functions

-		ExternalInterface.addCallback("startExec", DojoExternalInterface, startExec);

-		ExternalInterface.addCallback("setNumberArguments", DojoExternalInterface,

-																	setNumberArguments);

-		ExternalInterface.addCallback("chunkArgumentData", DojoExternalInterface,

-																	chunkArgumentData);

-		ExternalInterface.addCallback("exec", DojoExternalInterface, exec);

-		ExternalInterface.addCallback("getReturnLength", DojoExternalInterface,

-																	getReturnLength);

-		ExternalInterface.addCallback("chunkReturnData", DojoExternalInterface,

-																	chunkReturnData);

-		ExternalInterface.addCallback("endExec", DojoExternalInterface, endExec);

-		

-		// set whether communication is available

-		DojoExternalInterface.available = ExternalInterface.available;

-		DojoExternalInterface.call("loaded");

-	}

-	

-	public static function addCallback(methodName:String, instance:Object, 

-										 								 method:Function) : Boolean{

-		// register DojoExternalInterface methodName with it's instance

-		DojoExternalInterface.flashMethods[methodName] = instance;

-		

-		// tell JavaScript about DojoExternalInterface new method so we can create a proxy

-		ExternalInterface.call("dojo.flash.comm._addExternalInterfaceCallback", 

-													 methodName);

-													 

-		return true;

-	}

-	

-	public static function call(methodName:String,

-								resultsCallback:Function) : Void{

-		// we might have any number of optional arguments, so we have to 

-		// pass them in dynamically; strip out the results callback

-		var parameters = new Array();

-		for(var i = 0; i < arguments.length; i++){

-			if(i != 1){ // skip the callback

-				parameters.push(arguments[i]);

-			}

-		}

-		

-		var results = ExternalInterface.call.apply(ExternalInterface, parameters);

-		

-		// immediately give the results back, since ExternalInterface is

-		// synchronous

-		if(resultsCallback != null && typeof resultsCallback != "undefined"){

-			resultsCallback.call(null, results);

-		}

-	}

-	

-	/** 

-			Called by Flash to indicate to JavaScript that we are ready to have

-			our Flash functions called. Calling loaded()

-			will fire the dojo.flash.loaded() event, so that JavaScript can know that

-			Flash has finished loading and adding its callbacks, and can begin to

-			interact with the Flash file.

-	*/

-	public static function loaded(){

-		DojoExternalInterface.call("dojo.flash.loaded");

-	}

-	

-	public static function startExec():Void{

-		DojoExternalInterface.numArgs = null;

-		DojoExternalInterface.argData = null;

-		DojoExternalInterface.resultData = null;

-	}

-	

-	public static function setNumberArguments(numArgs):Void{

-		DojoExternalInterface.numArgs = numArgs;

-		DojoExternalInterface.argData = new Array(DojoExternalInterface.numArgs);

-	}

-	

-	public static function chunkArgumentData(value, argIndex:Number):Void{

-		//getURL("javascript:dojo.debug('FLASH: chunkArgumentData, value="+value+", argIndex="+argIndex+"')");

-		var currentValue = DojoExternalInterface.argData[argIndex];

-		if(currentValue == null || typeof currentValue == "undefined"){

-			DojoExternalInterface.argData[argIndex] = value;

-		}else{

-			DojoExternalInterface.argData[argIndex] += value;

-		}

-	}

-	

-	public static function exec(methodName):Void{

-		// decode all of the arguments that were passed in

-		for(var i = 0; i < DojoExternalInterface.argData.length; i++){

-			DojoExternalInterface.argData[i] = 

-				DojoExternalInterface.decodeData(DojoExternalInterface.argData[i]);

-		}

-		

-		var instance = DojoExternalInterface.flashMethods[methodName];

-		DojoExternalInterface.resultData = instance[methodName].apply(

-																			instance, DojoExternalInterface.argData);

-		// encode the result data

-		DojoExternalInterface.resultData = 

-			DojoExternalInterface.encodeData(DojoExternalInterface.resultData);

-			

-		//getURL("javascript:dojo.debug('FLASH: encoded result data="+DojoExternalInterface.resultData+"')");

-	}

-	

-	public static function getReturnLength():Number{

-	 if(DojoExternalInterface.resultData == null || 

-	 					typeof DojoExternalInterface.resultData == "undefined"){

-	 	return 0;

-	 }

-	 var segments = Math.ceil(DojoExternalInterface.resultData.length / 1024);

-	 return segments;

-	}

-	

-	public static function chunkReturnData(segment:Number):String{

-		var numSegments = DojoExternalInterface.getReturnLength();

-		var startCut = segment * 1024;

-		var endCut = segment * 1024 + 1024;

-		if(segment == (numSegments - 1)){

-			endCut = segment * 1024 + DojoExternalInterface.resultData.length;

-		}

-			

-		var piece = DojoExternalInterface.resultData.substring(startCut, endCut);

-		

-		//getURL("javascript:dojo.debug('FLASH: chunking return piece="+piece+"')");

-		

-		return piece;

-	}

-	

-	public static function endExec():Void{

-	}

-	

-	private static function decodeData(data):String{

-		// we have to use custom encodings for certain characters when passing

-		// them over; for example, passing a backslash over as //// from JavaScript

-		// to Flash doesn't work

-		data = DojoExternalInterface.replaceStr(data, "&custom_backslash;", "\\");

-		

-		data = DojoExternalInterface.replaceStr(data, "\\\'", "\'");

-		data = DojoExternalInterface.replaceStr(data, "\\\"", "\"");

-		

-		return data;

-	}

-	

-	private static function encodeData(data){

-		//getURL("javascript:dojo.debug('inside flash, data before="+data+"')");

-

-		// double encode all entity values, or they will be mis-decoded

-		// by Flash when returned

-		data = DojoExternalInterface.replaceStr(data, "&", "&amp;");

-		

-		// certain XMLish characters break Flash's wire serialization for

-		// ExternalInterface; encode these into a custom encoding, rather than

-		// the standard entity encoding, because otherwise we won't be able to

-		// differentiate between our own encoding and any entity characters

-		// that are being used in the string itself

-		data = DojoExternalInterface.replaceStr(data, '<', '&custom_lt;');

-		data = DojoExternalInterface.replaceStr(data, '>', '&custom_gt;');

-		

-		// encode control characters and JavaScript delimiters

-		data = DojoExternalInterface.replaceStr(data, "\n", "\\n");

-		data = DojoExternalInterface.replaceStr(data, "\r", "\\r");

-		data = DojoExternalInterface.replaceStr(data, "\f", "\\f");

-		data = DojoExternalInterface.replaceStr(data, "'", "\\'");

-		data = DojoExternalInterface.replaceStr(data, '"', '\"');

-		

-		//getURL("javascript:dojo.debug('inside flash, data after="+data+"')");

-		return data;

-	}

-	

-	/** 

-			Flash ActionScript has no String.replace method or support for

-			Regular Expressions! We roll our own very simple one.

-	*/

-	private static function replaceStr(inputStr:String, replaceThis:String, 

-																		 withThis:String):String {

-		var splitStr = inputStr.split(replaceThis)

-		inputStr = splitStr.join(withThis)

-		return inputStr;

-	}

-	

-	private static function getDojoPath(){

-		var url = _root._url;

-		var start = url.indexOf("baseRelativePath=") + "baseRelativePath=".length;

-		var path = url.substring(start);

-		var end = path.indexOf("&");

-		if(end != -1){

-			path = path.substring(0, end);

-		}

-		return path;

-	}

-}

-

-// vim:ts=4:noet:tw=0:

diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash8/ExpressInstall.as b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash8/ExpressInstall.as
deleted file mode 100644
index 5f823b7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/flash/flash8/ExpressInstall.as
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/**

- * Based on the expressinstall.as class created by Geoff Stearns as part

- * of the FlashObject library.

- *

- * Use this file to invoke the Macromedia Flash Player Express Install functionality

- * This file is intended for use with the FlashObject embed script. You can download FlashObject 

- * and this file at the following URL: http://blog.deconcept.com/flashobject/

- *

- * Usage: 

- *          var ExpressInstall = new ExpressInstall();

- *          

- *          // test to see if install is needed:

- *          if (ExpressInstall.needsUpdate) { // returns true if update is needed

- *              ExpressInstall.init(); // starts the update

- *          }

- *

- *	NOTE: Your Flash movie must be at least 214px by 137px in order to use ExpressInstall.

- *

- */

-

-class ExpressInstall {

-	public var needsUpdate:Boolean;

-	private var updater:MovieClip;

-	private var hold:MovieClip;

-	

-	public function ExpressInstall(){

-		// does the user need to update?

-		this.needsUpdate = (_root.MMplayerType == undefined) ? false : true;	

-	}

-

-	public function init():Void{

-		this.loadUpdater();

-	}

-

-	public function loadUpdater():Void {

-		System.security.allowDomain("fpdownload.macromedia.com");

-

-		// hope that nothing is at a depth of 10000000, you can change this depth if needed, but you want

-		// it to be on top of your content if you have any stuff on the first frame

-		this.updater = _root.createEmptyMovieClip("expressInstallHolder", 10000000);

-

-		// register the callback so we know if they cancel or there is an error

-		var _self = this;

-		this.updater.installStatus = _self.onInstallStatus;

-		this.hold = this.updater.createEmptyMovieClip("hold", 1);

-

-		// can't use movieClipLoader because it has to work in 6.0.65

-		this.updater.onEnterFrame = function():Void {

-			if(typeof this.hold.startUpdate == 'function'){

-				_self.initUpdater();

-				this.onEnterFrame = null;

-			}

-		}

-

-		var cacheBuster:Number = Math.random();

-

-		this.hold.loadMovie("http://fpdownload.macromedia.com/pub/flashplayer/"

-												+"update/current/swf/autoUpdater.swf?"+ cacheBuster);

-	}

-

-	private function initUpdater():Void{

-		this.hold.redirectURL = _root.MMredirectURL;

-		this.hold.MMplayerType = _root.MMplayerType;

-		this.hold.MMdoctitle = _root.MMdoctitle;

-		this.hold.startUpdate();

-	}

-

-	public function onInstallStatus(msg):Void{

-		getURL("javascript:dojo.flash.install._onInstallStatus('"+msg+"')");

-	}

-}

diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/Colorspace.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/Colorspace.js
deleted file mode 100644
index b1daf97..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/Colorspace.js
+++ /dev/null
@@ -1,710 +0,0 @@
-dojo.provide("dojo.gfx.Colorspace");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.math.matrix");
-dojo.gfx.Colorspace=function(){
-this.whitePoint="D65";
-this.stdObserver="10";
-this.chromaticAdaptationAlg="bradford";
-this.RGBWorkingSpace="s_rgb";
-this.useApproxCIELabMapping=1;
-this.chainMaps={"RGB_to_xyY":["XYZ"],"xyY_to_RGB":["XYZ"],"RGB_to_Lab":["XYZ"],"Lab_to_RGB":["XYZ"],"RGB_to_LCHab":["XYZ","Lab"],"LCHab_to_RGB":["Lab"],"xyY_to_Lab":["XYZ"],"Lab_to_xyY":["XYZ"],"XYZ_to_LCHab":["Lab"],"LCHab_to_XYZ":["Lab"],"xyY_to_LCHab":["XYZ","Lab"],"LCHab_to_xyY":["Lab","XYZ"],"RGB_to_Luv":["XYZ"],"Luv_to_RGB":["XYZ"],"xyY_to_Luv":["XYZ"],"Luv_to_xyY":["XYZ"],"Lab_to_Luv":["XYZ"],"Luv_to_Lab":["XYZ"],"LCHab_to_Luv":["Lab","XYZ"],"Luv_to_LCHab":["XYZ","Lab"],"RGB_to_LCHuv":["XYZ","Luv"],"LCHuv_to_RGB":["Luv","XYZ"],"XYZ_to_LCHuv":["Luv"],"LCHuv_to_XYZ":["Luv"],"xyY_to_LCHuv":["XYZ","Luv"],"LCHuv_to_xyY":["Luv","XYZ"],"Lab_to_LCHuv":["XYZ","Luv"],"LCHuv_to_Lab":["Luv","XYZ"],"LCHab_to_LCHuv":["Lab","XYZ","Luv"],"LCHuv_to_LCHab":["Luv","XYZ","Lab"],"XYZ_to_CMY":["RGB"],"CMY_to_XYZ":["RGB"],"xyY_to_CMY":["RGB"],"CMY_to_xyY":["RGB"],"Lab_to_CMY":["RGB"],"CMY_to_Lab":["RGB"],"LCHab_to_CMY":["RGB"],"CMY_to_LCHab":["RGB"],"Luv_to_CMY":["RGB"],"CMY_to_Luv":["RGB"],"LCHuv_to_CMY":["RGB"],"CMY_to_LCHuv":["RGB"],"XYZ_to_HSL":["RGB"],"HSL_to_XYZ":["RGB"],"xyY_to_HSL":["RGB"],"HSL_to_xyY":["RGB"],"Lab_to_HSL":["RGB"],"HSL_to_Lab":["RGB"],"LCHab_to_HSL":["RGB"],"HSL_to_LCHab":["RGB"],"Luv_to_HSL":["RGB"],"HSL_to_Luv":["RGB"],"LCHuv_to_HSL":["RGB"],"HSL_to_LCHuv":["RGB"],"CMY_to_HSL":["RGB"],"HSL_to_CMY":["RGB"],"CMYK_to_HSL":["RGB"],"HSL_to_CMYK":["RGB"],"XYZ_to_HSV":["RGB"],"HSV_to_XYZ":["RGB"],"xyY_to_HSV":["RGB"],"HSV_to_xyY":["RGB"],"Lab_to_HSV":["RGB"],"HSV_to_Lab":["RGB"],"LCHab_to_HSV":["RGB"],"HSV_to_LCHab":["RGB"],"Luv_to_HSV":["RGB"],"HSV_to_Luv":["RGB"],"LCHuv_to_HSV":["RGB"],"HSV_to_LCHuv":["RGB"],"CMY_to_HSV":["RGB"],"HSV_to_CMY":["RGB"],"CMYK_to_HSV":["RGB"],"HSV_to_CMYK":["RGB"],"HSL_to_HSV":["RGB"],"HSV_to_HSL":["RGB"],"XYZ_to_CMYK":["RGB"],"CMYK_to_XYZ":["RGB"],"xyY_to_CMYK":["RGB"],"CMYK_to_xyY":["RGB"],"Lab_to_CMYK":["RGB"],"CMYK_to_Lab":["RGB"],"LCHab_to_CMYK":["RGB"],"CMYK_to_LCHab":["RGB"],"Luv_to_CMYK":["RGB"],"CMYK_to_Luv":["RGB"],"LCHuv_to_CMYK":["RGB"],"CMYK_to_LCHuv":["RGB"]};
-return this;
-};
-dojo.gfx.Colorspace.prototype.convert=function(_1,_2,_3){
-var k=_2+"_to_"+_3;
-if(this[k]){
-return this[k](_1);
-}else{
-if(this.chainMaps[k]){
-var _5=_2;
-var _6=this.chainMaps[k].concat();
-_6.push(_3);
-for(var i=0;i<_6.length;i++){
-_1=this.convert(_1,_5,_6[i]);
-_5=_6[i];
-}
-return _1;
-}else{
-dojo.debug("Can't convert from "+_2+" to "+_3);
-}
-}
-};
-dojo.gfx.Colorspace.prototype.munge=function(_8,_9){
-if(dojo.lang.isArray(_9[0])){
-_9=_9[0];
-}
-var _a=new Array();
-for(var i=0;i<_8.length;i++){
-_a[_8.charAt(i)]=_9[i];
-}
-return _a;
-};
-dojo.gfx.Colorspace.prototype.getWhitePoint=function(){
-var x=0;
-var y=0;
-var t=0;
-switch(this.stdObserver){
-case "2":
-switch(this.whitePoint){
-case "E":
-x=1/3;
-y=1/3;
-t=5400;
-break;
-case "D50":
-x=0.34567;
-y=0.3585;
-t=5000;
-break;
-case "D55":
-x=0.33242;
-y=0.34743;
-t=5500;
-break;
-case "D65":
-x=0.31271;
-y=0.32902;
-t=6500;
-break;
-case "D75":
-x=0.29902;
-y=0.31485;
-t=7500;
-break;
-case "A":
-x=0.44757;
-y=0.40745;
-t=2856;
-break;
-case "B":
-x=0.34842;
-y=0.35161;
-t=4874;
-break;
-case "C":
-x=0.31006;
-y=0.31616;
-t=6774;
-break;
-case "9300":
-x=0.2848;
-y=0.2932;
-t=9300;
-break;
-case "F2":
-x=0.37207;
-y=0.37512;
-t=4200;
-break;
-case "F7":
-x=0.31285;
-y=0.32918;
-t=6500;
-break;
-case "F11":
-x=0.38054;
-y=0.37691;
-t=4000;
-break;
-default:
-dojo.debug("White point "+this.whitePoint+" isn't defined for Std. Observer "+this.strObserver);
-}
-break;
-case "10":
-switch(this.whitePoint){
-case "E":
-x=1/3;
-y=1/3;
-t=5400;
-break;
-case "D50":
-x=0.34773;
-y=0.35952;
-t=5000;
-break;
-case "D55":
-x=0.33411;
-y=0.34877;
-t=5500;
-break;
-case "D65":
-x=0.31382;
-y=0.331;
-t=6500;
-break;
-case "D75":
-x=0.29968;
-y=0.3174;
-t=7500;
-break;
-case "A":
-x=0.45117;
-y=0.40594;
-t=2856;
-break;
-case "B":
-x=0.3498;
-y=0.3527;
-t=4874;
-break;
-case "C":
-x=0.31039;
-y=0.31905;
-t=6774;
-break;
-case "F2":
-x=0.37928;
-y=0.36723;
-t=4200;
-break;
-case "F7":
-x=0.31565;
-y=0.32951;
-t=6500;
-break;
-case "F11":
-x=0.38543;
-y=0.3711;
-t=4000;
-break;
-default:
-dojo.debug("White point "+this.whitePoint+" isn't defined for Std. Observer "+this.strObserver);
-}
-break;
-default:
-dojo.debug("Std. Observer "+this.strObserver+" isn't defined");
-}
-var z=1-x-y;
-var wp={"x":x,"y":y,"z":z,"t":t};
-wp.Y=1;
-var XYZ=this.xyY_to_XYZ([wp.x,wp.y,wp.Y]);
-wp.X=XYZ[0];
-wp.Y=XYZ[1];
-wp.Z=XYZ[2];
-return wp;
-};
-dojo.gfx.Colorspace.prototype.getPrimaries=function(){
-var m=[];
-switch(this.RGBWorkingSpace){
-case "adobe_rgb_1998":
-m=[2.2,"D65",0.64,0.33,0.297361,0.21,0.71,0.627355,0.15,0.06,0.075285];
-break;
-case "apple_rgb":
-m=[1.8,"D65",0.625,0.34,0.244634,0.28,0.595,0.672034,0.155,0.07,0.083332];
-break;
-case "best_rgb":
-m=[2.2,"D50",0.7347,0.2653,0.228457,0.215,0.775,0.737352,0.13,0.035,0.034191];
-break;
-case "beta_rgb":
-m=[2.2,"D50",0.6888,0.3112,0.303273,0.1986,0.7551,0.663786,0.1265,0.0352,0.032941];
-break;
-case "bruce_rgb":
-m=[2.2,"D65",0.64,0.33,0.240995,0.28,0.65,0.683554,0.15,0.06,0.075452];
-break;
-case "cie_rgb":
-m=[2.2,"E",0.735,0.265,0.176204,0.274,0.717,0.812985,0.167,0.009,0.010811];
-break;
-case "color_match_rgb":
-m=[1.8,"D50",0.63,0.34,0.274884,0.295,0.605,0.658132,0.15,0.075,0.066985];
-break;
-case "don_rgb_4":
-m=[2.2,"D50",0.696,0.3,0.27835,0.215,0.765,0.68797,0.13,0.035,0.03368];
-break;
-case "eci_rgb":
-m=[1.8,"D50",0.67,0.33,0.32025,0.21,0.71,0.602071,0.14,0.08,0.077679];
-break;
-case "ekta_space_ps5":
-m=[2.2,"D50",0.695,0.305,0.260629,0.26,0.7,0.734946,0.11,0.005,0.004425];
-break;
-case "ntsc_rgb":
-m=[2.2,"C",0.67,0.33,0.298839,0.21,0.71,0.586811,0.14,0.08,0.11435];
-break;
-case "pal_secam_rgb":
-m=[2.2,"D65",0.64,0.33,0.222021,0.29,0.6,0.706645,0.15,0.06,0.071334];
-break;
-case "pro_photo_rgb":
-m=[1.8,"D50",0.7347,0.2653,0.28804,0.1596,0.8404,0.711874,0.0366,0.0001,0.000086];
-break;
-case "smpte-c_rgb":
-m=[2.2,"D65",0.63,0.34,0.212395,0.31,0.595,0.701049,0.155,0.07,0.086556];
-break;
-case "s_rgb":
-m=[2.2,"D65",0.64,0.33,0.212656,0.3,0.6,0.715158,0.15,0.06,0.072186];
-break;
-case "wide_gamut_rgb":
-m=[2.2,"D50",0.735,0.265,0.258187,0.115,0.826,0.724938,0.157,0.018,0.016875];
-break;
-default:
-dojo.debug("RGB working space "+this.RGBWorkingSpace+" isn't defined");
-}
-var p={name:this.RGBWorkingSpace,gamma:m[0],wp:m[1],xr:m[2],yr:m[3],Yr:m[4],xg:m[5],yg:m[6],Yg:m[7],xb:m[8],yb:m[9],Yb:m[10]};
-if(p.wp!=this.whitePoint){
-var r=this.XYZ_to_xyY(this.chromaticAdaptation(this.xyY_to_XYZ([p.xr,p.yr,p.Yr]),p.wp,this.whitePoint));
-var g=this.XYZ_to_xyY(this.chromaticAdaptation(this.xyY_to_XYZ([p.xg,p.yg,p.Yg]),p.wp,this.whitePoint));
-var b=this.XYZ_to_xyY(this.chromaticAdaptation(this.xyY_to_XYZ([p.xb,p.yb,p.Yb]),p.wp,this.whitePoint));
-p.xr=r[0];
-p.yr=r[1];
-p.Yr=r[2];
-p.xg=g[0];
-p.yg=g[1];
-p.Yg=g[2];
-p.xb=b[0];
-p.yb=b[1];
-p.Yb=b[2];
-p.wp=this.whitePoint;
-}
-p.zr=1-p.xr-p.yr;
-p.zg=1-p.xg-p.yg;
-p.zb=1-p.xb-p.yb;
-return p;
-};
-dojo.gfx.Colorspace.prototype.epsilon=function(){
-return this.useApproxCIELabMapping?0.008856:216/24289;
-};
-dojo.gfx.Colorspace.prototype.kappa=function(){
-return this.useApproxCIELabMapping?903.3:24389/27;
-};
-dojo.gfx.Colorspace.prototype.XYZ_to_xyY=function(){
-var src=this.munge("XYZ",arguments);
-var sum=src.X+src.Y+src.Z;
-if(sum==0){
-var wp=this.getWhitePoint();
-var x=wp.x;
-var y=wp.y;
-}else{
-var x=src.X/sum;
-var y=src.Y/sum;
-}
-var Y=src.Y;
-return [x,y,Y];
-};
-dojo.gfx.Colorspace.prototype.xyY_to_XYZ=function(){
-var src=this.munge("xyY",arguments);
-if(src.y==0){
-var X=0;
-var Y=0;
-var Z=0;
-}else{
-var X=(src.x*src.Y)/src.y;
-var Y=src.Y;
-var Z=((1-src.x-src.y)*src.Y)/src.y;
-}
-return [X,Y,Z];
-};
-dojo.gfx.Colorspace.prototype.RGB_to_XYZ=function(){
-var src=this.munge("RGB",arguments);
-var m=this.getRGB_XYZ_Matrix();
-var pr=this.getPrimaries();
-if(this.RGBWorkingSpace=="s_rgb"){
-var r=(src.R>0.04045)?Math.pow(((src.R+0.055)/1.055),2.4):src.R/12.92;
-var g=(src.G>0.04045)?Math.pow(((src.G+0.055)/1.055),2.4):src.G/12.92;
-var b=(src.B>0.04045)?Math.pow(((src.B+0.055)/1.055),2.4):src.B/12.92;
-}else{
-var r=Math.pow(src.R,pr.gamma);
-var g=Math.pow(src.G,pr.gamma);
-var b=Math.pow(src.B,pr.gamma);
-}
-var XYZ=dojo.math.matrix.multiply([[r,g,b]],m);
-return [XYZ[0][0],XYZ[0][1],XYZ[0][2]];
-};
-dojo.gfx.Colorspace.prototype.XYZ_to_RGB=function(){
-var src=this.munge("XYZ",arguments);
-var mi=this.getXYZ_RGB_Matrix();
-var pr=this.getPrimaries();
-var rgb=dojo.math.matrix.multiply([[src.X,src.Y,src.Z]],mi);
-var r=rgb[0][0];
-var g=rgb[0][1];
-var b=rgb[0][2];
-if(this.RGBWorkingSpace=="s_rgb"){
-var R=(r>0.0031308)?(1.055*Math.pow(r,1/2.4))-0.055:12.92*r;
-var G=(g>0.0031308)?(1.055*Math.pow(g,1/2.4))-0.055:12.92*g;
-var B=(b>0.0031308)?(1.055*Math.pow(b,1/2.4))-0.055:12.92*b;
-}else{
-var R=Math.pow(r,1/pr.gamma);
-var G=Math.pow(g,1/pr.gamma);
-var B=Math.pow(b,1/pr.gamma);
-}
-return [R,G,B];
-};
-dojo.gfx.Colorspace.prototype.XYZ_to_Lab=function(){
-var src=this.munge("XYZ",arguments);
-var wp=this.getWhitePoint();
-var xr=src.X/wp.X;
-var yr=src.Y/wp.Y;
-var zr=src.Z/wp.Z;
-var fx=(xr>this.epsilon())?Math.pow(xr,1/3):(this.kappa()*xr+16)/116;
-var fy=(yr>this.epsilon())?Math.pow(yr,1/3):(this.kappa()*yr+16)/116;
-var fz=(zr>this.epsilon())?Math.pow(zr,1/3):(this.kappa()*zr+16)/116;
-var L=116*fy-16;
-var a=500*(fx-fy);
-var b=200*(fy-fz);
-return [L,a,b];
-};
-dojo.gfx.Colorspace.prototype.Lab_to_XYZ=function(){
-var src=this.munge("Lab",arguments);
-var wp=this.getWhitePoint();
-var yr=(src.L>(this.kappa()*this.epsilon()))?Math.pow((src.L+16)/116,3):src.L/this.kappa();
-var fy=(yr>this.epsilon())?(src.L+16)/116:(this.kappa()*yr+16)/116;
-var fx=(src.a/500)+fy;
-var fz=fy-(src.b/200);
-var _43=Math.pow(fx,3);
-var _44=Math.pow(fz,3);
-var xr=(_43>this.epsilon())?_43:(116*fx-16)/this.kappa();
-var zr=(_44>this.epsilon())?_44:(116*fz-16)/this.kappa();
-var X=xr*wp.X;
-var Y=yr*wp.Y;
-var Z=zr*wp.Z;
-return [X,Y,Z];
-};
-dojo.gfx.Colorspace.prototype.Lab_to_LCHab=function(){
-var src=this.munge("Lab",arguments);
-var L=src.L;
-var C=Math.pow(src.a*src.a+src.b*src.b,0.5);
-var H=Math.atan2(src.b,src.a)*(180/Math.PI);
-if(H<0){
-H+=360;
-}
-if(H>360){
-H-=360;
-}
-return [L,C,H];
-};
-dojo.gfx.Colorspace.prototype.LCHab_to_Lab=function(){
-var src=this.munge("LCH",arguments);
-var _4f=src.H*(Math.PI/180);
-var L=src.L;
-var a=src.C/Math.pow(Math.pow(Math.tan(_4f),2)+1,0.5);
-if((90<src.H)&&(src.H<270)){
-a=-a;
-}
-var b=Math.pow(Math.pow(src.C,2)-Math.pow(a,2),0.5);
-if(src.H>180){
-b=-b;
-}
-return [L,a,b];
-};
-dojo.gfx.Colorspace.prototype.chromaticAdaptation=function(col,_54,_55){
-col=this.munge("XYZ",[col]);
-var _56=this.whitePoint;
-this.whitePoint=_54;
-var _57=this.getWhitePoint();
-this.whitePoint=_55;
-var _58=this.getWhitePoint();
-this.whitePoint=_56;
-switch(this.chromaticAdaptationAlg){
-case "xyz_scaling":
-var ma=[[1,0,0],[0,1,0],[0,0,1]];
-var mai=[[1,0,0],[0,1,0],[0,0,1]];
-break;
-case "bradford":
-var ma=[[0.8951,-0.7502,0.0389],[0.2664,1.7135,-0.0685],[-0.1614,0.0367,1.0296]];
-var mai=[[0.986993,0.432305,-0.008529],[-0.147054,0.51836,0.040043],[0.159963,0.049291,0.968487]];
-break;
-case "von_kries":
-var ma=[[0.40024,-0.2263,0],[0.7076,1.16532,0],[-0.08081,0.0457,0.91822]];
-var mai=[[1.859936,0.361191,0],[-1.129382,0.638812,0],[0.219897,-0.000006,1.089064]];
-break;
-default:
-dojo.debug("The "+this.chromaticAdaptationAlg+" chromatic adaptation algorithm matricies are not defined");
-}
-var _5b=dojo.math.matrix.multiply([[_57.x,_57.y,_57.z]],ma);
-var _5c=dojo.math.matrix.multiply([[_58.x,_58.y,_58.z]],ma);
-var _5d=[[_5c[0][0]/_5b[0][0],0,0],[0,_5c[0][1]/_5b[0][1],0],[0,0,_5c[0][2]/_5b[0][2]]];
-var m=dojo.math.matrix.multiply(dojo.math.matrix.multiply(ma,_5d),mai);
-var dst=dojo.math.matrix.multiply([[col.X,col.Y,col.Z]],m);
-return dst[0];
-};
-dojo.gfx.Colorspace.prototype.getRGB_XYZ_Matrix=function(){
-var wp=this.getWhitePoint();
-var pr=this.getPrimaries();
-var Xr=pr.xr/pr.yr;
-var Yr=1;
-var Zr=(1-pr.xr-pr.yr)/pr.yr;
-var Xg=pr.xg/pr.yg;
-var Yg=1;
-var Zg=(1-pr.xg-pr.yg)/pr.yg;
-var Xb=pr.xb/pr.yb;
-var Yb=1;
-var Zb=(1-pr.xb-pr.yb)/pr.yb;
-var m1=[[Xr,Yr,Zr],[Xg,Yg,Zg],[Xb,Yb,Zb]];
-var m2=[[wp.X,wp.Y,wp.Z]];
-var sm=dojo.math.matrix.multiply(m2,dojo.math.matrix.inverse(m1));
-var Sr=sm[0][0];
-var Sg=sm[0][1];
-var Sb=sm[0][2];
-var m4=[[Sr*Xr,Sr*Yr,Sr*Zr],[Sg*Xg,Sg*Yg,Sg*Zg],[Sb*Xb,Sb*Yb,Sb*Zb]];
-return m4;
-};
-dojo.gfx.Colorspace.prototype.getXYZ_RGB_Matrix=function(){
-var m=this.getRGB_XYZ_Matrix();
-return dojo.math.matrix.inverse(m);
-};
-dojo.gfx.Colorspace.prototype.XYZ_to_Luv=function(){
-var src=this.munge("XYZ",arguments);
-var wp=this.getWhitePoint();
-var ud=(4*src.X)/(src.X+15*src.Y+3*src.Z);
-var vd=(9*src.Y)/(src.X+15*src.Y+3*src.Z);
-var udr=(4*wp.X)/(wp.X+15*wp.Y+3*wp.Z);
-var vdr=(9*wp.Y)/(wp.X+15*wp.Y+3*wp.Z);
-var yr=src.Y/wp.Y;
-var L=(yr>this.epsilon())?116*Math.pow(yr,1/3)-16:this.kappa()*yr;
-var u=13*L*(ud-udr);
-var v=13*L*(vd-vdr);
-return [L,u,v];
-};
-dojo.gfx.Colorspace.prototype.Luv_to_XYZ=function(){
-var src=this.munge("Luv",arguments);
-var wp=this.getWhitePoint();
-var uz=(4*wp.X)/(wp.X+15*wp.Y+3*wp.Z);
-var vz=(9*wp.Y)/(wp.X+15*wp.Y+3*wp.Z);
-var Y=(src.L>this.kappa()*this.epsilon())?Math.pow((src.L+16)/116,3):src.L/this.kappa();
-var a=(1/3)*(((52*src.L)/(src.u+13*src.L*uz))-1);
-var b=-5*Y;
-var c=-(1/3);
-var d=Y*(((39*src.L)/(src.v+13*src.L*vz))-5);
-var X=(d-b)/(a-c);
-var Z=X*a+b;
-return [X,Y,Z];
-};
-dojo.gfx.Colorspace.prototype.Luv_to_LCHuv=function(){
-var src=this.munge("Luv",arguments);
-var L=src.L;
-var C=Math.pow(src.u*src.u+src.v*src.v,0.5);
-var H=Math.atan2(src.v,src.u)*(180/Math.PI);
-if(H<0){
-H+=360;
-}
-if(H>360){
-H-=360;
-}
-return [L,C,H];
-};
-dojo.gfx.Colorspace.prototype.LCHuv_to_Luv=function(){
-var src=this.munge("LCH",arguments);
-var _8d=src.H*(Math.PI/180);
-var L=src.L;
-var u=src.C/Math.pow(Math.pow(Math.tan(_8d),2)+1,0.5);
-var v=Math.pow(src.C*src.C-u*u,0.5);
-if((90<src.H)&&(src.H<270)){
-u*=-1;
-}
-if(src.H>180){
-v*=-1;
-}
-return [L,u,v];
-};
-dojo.gfx.Colorspace.colorTemp_to_whitePoint=function(T){
-if(T<4000){
-dojo.debug("Can't find a white point for temperatures under 4000K");
-return [0,0];
-}
-if(T>25000){
-dojo.debug("Can't find a white point for temperatures over 25000K");
-return [0,0];
-}
-var T1=T;
-var T2=T*T;
-var T3=T2*T;
-var _95=Math.pow(10,9);
-var _96=Math.pow(10,6);
-var _97=Math.pow(10,3);
-if(T<=7000){
-var x=(-4.607*_95/T3)+(2.9678*_96/T2)+(0.09911*_97/T)+0.244063;
-}else{
-var x=(-2.0064*_95/T3)+(1.9018*_96/T2)+(0.24748*_97/T)+0.23704;
-}
-var y=-3*x*x+2.87*x-0.275;
-return [x,y];
-};
-dojo.gfx.Colorspace.prototype.RGB_to_CMY=function(){
-var src=this.munge("RGB",arguments);
-var C=1-src.R;
-var M=1-src.G;
-var Y=1-src.B;
-return [C,M,Y];
-};
-dojo.gfx.Colorspace.prototype.CMY_to_RGB=function(){
-var src=this.munge("CMY",arguments);
-var R=1-src.C;
-var G=1-src.M;
-var B=1-src.Y;
-return [R,G,B];
-};
-dojo.gfx.Colorspace.prototype.RGB_to_CMYK=function(){
-var src=this.munge("RGB",arguments);
-var K=Math.min(1-src.R,1-src.G,1-src.B);
-var C=(1-src.R-K)/(1-K);
-var M=(1-src.G-K)/(1-K);
-var Y=(1-src.B-K)/(1-K);
-return [C,M,Y,K];
-};
-dojo.gfx.Colorspace.prototype.CMYK_to_RGB=function(){
-var src=this.munge("CMYK",arguments);
-var R=1-Math.min(1,src.C*(1-src.K)+src.K);
-var G=1-Math.min(1,src.M*(1-src.K)+src.K);
-var B=1-Math.min(1,src.Y*(1-src.K)+src.K);
-return [R,G,B];
-};
-dojo.gfx.Colorspace.prototype.CMY_to_CMYK=function(){
-var src=this.munge("CMY",arguments);
-var K=Math.min(src.C,src.M,src.Y);
-var C=(src.C-K)/(1-K);
-var M=(src.M-K)/(1-K);
-var Y=(src.Y-K)/(1-K);
-return [C,M,Y,K];
-};
-dojo.gfx.Colorspace.prototype.CMYK_to_CMY=function(){
-var src=this.munge("CMYK",arguments);
-var C=Math.min(1,src.C*(1-src.K)+src.K);
-var M=Math.min(1,src.M*(1-src.K)+src.K);
-var Y=Math.min(1,src.Y*(1-src.K)+src.K);
-return [C,M,Y];
-};
-dojo.gfx.Colorspace.prototype.RGB_to_HSV=function(){
-var src=this.munge("RGB",arguments);
-var min=Math.min(src.R,src.G,src.B);
-var V=Math.max(src.R,src.G,src.B);
-var _b7=V-min;
-var H=null;
-var S=(V==0)?0:_b7/V;
-if(S==0){
-H=0;
-}else{
-if(src.R==V){
-H=60*(src.G-src.B)/_b7;
-}else{
-if(src.G==V){
-H=120+60*(src.B-src.R)/_b7;
-}else{
-if(src.B==V){
-H=240+60*(src.R-src.G)/_b7;
-}
-}
-}
-if(H<0){
-H+=360;
-}
-}
-H=(H==0)?360:H;
-return [H,S,V];
-};
-dojo.gfx.Colorspace.prototype.HSV_to_RGB=function(){
-var src=this.munge("HSV",arguments);
-if(src.H==360){
-src.H=0;
-}
-var r=null;
-var g=null;
-var b=null;
-if(src.S==0){
-var R=src.V;
-var G=src.V;
-var B=src.V;
-}else{
-var _c1=src.H/60;
-var i=Math.floor(_c1);
-var f=_c1-i;
-var p=src.V*(1-src.S);
-var q=src.V*(1-(src.S*f));
-var t=src.V*(1-(src.S*(1-f)));
-switch(i){
-case 0:
-R=src.V;
-G=t;
-B=p;
-break;
-case 1:
-R=q;
-G=src.V;
-B=p;
-break;
-case 2:
-R=p;
-G=src.V;
-B=t;
-break;
-case 3:
-R=p;
-G=q;
-B=src.V;
-break;
-case 4:
-R=t;
-G=p;
-B=src.V;
-break;
-case 5:
-R=src.V;
-G=p;
-B=q;
-break;
-}
-}
-return [R,G,B];
-};
-dojo.gfx.Colorspace.prototype.RGB_to_HSL=function(){
-var src=this.munge("RGB",arguments);
-var min=Math.min(src.R,src.G,src.B);
-var max=Math.max(src.R,src.G,src.B);
-var _ca=max-min;
-var H=0;
-var S=0;
-var L=(min+max)/2;
-if((L>0)&&(L<1)){
-S=_ca/((L<0.5)?(2*L):(2-2*L));
-}
-if(_ca>0){
-if((max==src.R)&&(max!=src.G)){
-H+=(src.G-src.B)/_ca;
-}
-if((max==src.G)&&(max!=src.B)){
-H+=(2+(src.B-src.R)/_ca);
-}
-if((max==src.B)&&(max!=src.R)){
-H+=(4+(src.R-src.G)/_ca);
-}
-H*=60;
-}
-H=(H==0)?360:H;
-return [H,S,L];
-};
-dojo.gfx.Colorspace.prototype.HSL_to_RGB=function(){
-var src=this.munge("HSL",arguments);
-while(src.H<0){
-src.H+=360;
-}
-while(src.H>=360){
-src.H-=360;
-}
-var R=0;
-var G=0;
-var B=0;
-if(src.H<120){
-R=(120-src.H)/60;
-G=src.H/60;
-B=0;
-}else{
-if(src.H<240){
-R=0;
-G=(240-src.H)/60;
-B=(src.H-120)/60;
-}else{
-R=(src.H-240)/60;
-G=0;
-B=(360-src.H)/60;
-}
-}
-R=2*src.S*Math.min(R,1)+(1-src.S);
-G=2*src.S*Math.min(G,1)+(1-src.S);
-B=2*src.S*Math.min(B,1)+(1-src.S);
-if(src.L<0.5){
-R=src.L*R;
-G=src.L*G;
-B=src.L*B;
-}else{
-R=(1-src.L)*R+2*src.L-1;
-G=(1-src.L)*G+2*src.L-1;
-B=(1-src.L)*B+2*src.L-1;
-}
-return [R,G,B];
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/__package__.js
deleted file mode 100644
index d7519f1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/__package__.js
+++ /dev/null
@@ -1,4 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.gfx.color","dojo.gfx.matrix","dojo.gfx.common"]});
-dojo.requireIf(dojo.render.svg.capable,"dojo.gfx.svg");
-dojo.requireIf(dojo.render.vml.capable,"dojo.gfx.vml");
-dojo.provide("dojo.gfx.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/color.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/color.js
deleted file mode 100644
index 1fca31b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/color.js
+++ /dev/null
@@ -1,137 +0,0 @@
-dojo.provide("dojo.gfx.color");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.array");
-dojo.gfx.color.Color=function(r,g,b,a){
-if(dojo.lang.isArray(r)){
-this.r=r[0];
-this.g=r[1];
-this.b=r[2];
-this.a=r[3]||1;
-}else{
-if(dojo.lang.isString(r)){
-var _5=dojo.gfx.color.extractRGB(r);
-this.r=_5[0];
-this.g=_5[1];
-this.b=_5[2];
-this.a=g||1;
-}else{
-if(r instanceof dojo.gfx.color.Color){
-this.r=r.r;
-this.b=r.b;
-this.g=r.g;
-this.a=r.a;
-}else{
-this.r=r;
-this.g=g;
-this.b=b;
-this.a=a;
-}
-}
-}
-};
-dojo.gfx.color.Color.fromArray=function(_6){
-return new dojo.gfx.color.Color(_6[0],_6[1],_6[2],_6[3]);
-};
-dojo.extend(dojo.gfx.color.Color,{toRgb:function(_7){
-if(_7){
-return this.toRgba();
-}else{
-return [this.r,this.g,this.b];
-}
-},toRgba:function(){
-return [this.r,this.g,this.b,this.a];
-},toHex:function(){
-return dojo.gfx.color.rgb2hex(this.toRgb());
-},toCss:function(){
-return "rgb("+this.toRgb().join()+")";
-},toString:function(){
-return this.toHex();
-},blend:function(_8,_9){
-var _a=null;
-if(dojo.lang.isArray(_8)){
-_a=_8;
-}else{
-if(_8 instanceof dojo.gfx.color.Color){
-_a=_8.toRgb();
-}else{
-_a=new dojo.gfx.color.Color(_8).toRgb();
-}
-}
-return dojo.gfx.color.blend(this.toRgb(),_a,_9);
-}});
-dojo.gfx.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],lime:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.gfx.color.blend=function(a,b,_d){
-if(typeof a=="string"){
-return dojo.gfx.color.blendHex(a,b,_d);
-}
-if(!_d){
-_d=0;
-}
-_d=Math.min(Math.max(-1,_d),1);
-_d=((_d+1)/2);
-var c=[];
-for(var x=0;x<3;x++){
-c[x]=parseInt(b[x]+((a[x]-b[x])*_d));
-}
-return c;
-};
-dojo.gfx.color.blendHex=function(a,b,_12){
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_12));
-};
-dojo.gfx.color.extractRGB=function(_13){
-var hex="0123456789abcdef";
-_13=_13.toLowerCase();
-if(_13.indexOf("rgb")==0){
-var _15=_13.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_15.splice(1,3);
-return ret;
-}else{
-var _17=dojo.gfx.color.hex2rgb(_13);
-if(_17){
-return _17;
-}else{
-return dojo.gfx.color.named[_13]||[255,255,255];
-}
-}
-};
-dojo.gfx.color.hex2rgb=function(hex){
-var _19="0123456789ABCDEF";
-var rgb=new Array(3);
-if(hex.indexOf("#")==0){
-hex=hex.substring(1);
-}
-hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_19+"]","g"),"")!=""){
-return null;
-}
-if(hex.length==3){
-rgb[0]=hex.charAt(0)+hex.charAt(0);
-rgb[1]=hex.charAt(1)+hex.charAt(1);
-rgb[2]=hex.charAt(2)+hex.charAt(2);
-}else{
-rgb[0]=hex.substring(0,2);
-rgb[1]=hex.substring(2,4);
-rgb[2]=hex.substring(4);
-}
-for(var i=0;i<rgb.length;i++){
-rgb[i]=_19.indexOf(rgb[i].charAt(0))*16+_19.indexOf(rgb[i].charAt(1));
-}
-return rgb;
-};
-dojo.gfx.color.rgb2hex=function(r,g,b){
-if(dojo.lang.isArray(r)){
-g=r[1]||0;
-b=r[2]||0;
-r=r[0]||0;
-}
-var ret=dojo.lang.map([r,g,b],function(x){
-x=new Number(x);
-var s=x.toString(16);
-while(s.length<2){
-s="0"+s;
-}
-return s;
-});
-ret.unshift("#");
-return ret.join("");
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/color/hsl.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/color/hsl.js
deleted file mode 100644
index 4703c95..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/color/hsl.js
+++ /dev/null
@@ -1,105 +0,0 @@
-dojo.provide("dojo.gfx.color.hsl");
-dojo.require("dojo.lang.array");
-dojo.lang.extend(dojo.gfx.color.Color,{toHsl:function(){
-return dojo.gfx.color.rgb2hsl(this.toRgb());
-}});
-dojo.gfx.color.rgb2hsl=function(r,g,b){
-if(dojo.lang.isArray(r)){
-b=r[2]||0;
-g=r[1]||0;
-r=r[0]||0;
-}
-r/=255;
-g/=255;
-b/=255;
-var h=null;
-var s=null;
-var l=null;
-var _7=Math.min(r,g,b);
-var _8=Math.max(r,g,b);
-var _9=_8-_7;
-l=(_7+_8)/2;
-s=0;
-if((l>0)&&(l<1)){
-s=_9/((l<0.5)?(2*l):(2-2*l));
-}
-h=0;
-if(_9>0){
-if((_8==r)&&(_8!=g)){
-h+=(g-b)/_9;
-}
-if((_8==g)&&(_8!=b)){
-h+=(2+(b-r)/_9);
-}
-if((_8==b)&&(_8!=r)){
-h+=(4+(r-g)/_9);
-}
-h*=60;
-}
-h=(h==0)?360:Math.ceil((h/360)*255);
-s=Math.ceil(s*255);
-l=Math.ceil(l*255);
-return [h,s,l];
-};
-dojo.gfx.color.hsl2rgb=function(h,s,l){
-if(dojo.lang.isArray(h)){
-l=h[2]||0;
-s=h[1]||0;
-h=h[0]||0;
-}
-h=(h/255)*360;
-if(h==360){
-h=0;
-}
-s=s/255;
-l=l/255;
-while(h<0){
-h+=360;
-}
-while(h>360){
-h-=360;
-}
-var r,g,b;
-if(h<120){
-r=(120-h)/60;
-g=h/60;
-b=0;
-}else{
-if(h<240){
-r=0;
-g=(240-h)/60;
-b=(h-120)/60;
-}else{
-r=(h-240)/60;
-g=0;
-b=(360-h)/60;
-}
-}
-r=Math.min(r,1);
-g=Math.min(g,1);
-b=Math.min(b,1);
-r=2*s*r+(1-s);
-g=2*s*g+(1-s);
-b=2*s*b+(1-s);
-if(l<0.5){
-r=l*r;
-g=l*g;
-b=l*b;
-}else{
-r=(1-l)*r+2*l-1;
-g=(1-l)*g+2*l-1;
-b=(1-l)*b+2*l-1;
-}
-r=Math.ceil(r*255);
-g=Math.ceil(g*255);
-b=Math.ceil(b*255);
-return [r,g,b];
-};
-dojo.gfx.color.hsl2hex=function(h,s,l){
-var rgb=dojo.gfx.color.hsl2rgb(h,s,l);
-return dojo.gfx.color.rgb2hex(rgb[0],rgb[1],rgb[2]);
-};
-dojo.gfx.color.hex2hsl=function(hex){
-var rgb=dojo.gfx.color.hex2rgb(hex);
-return dojo.gfx.color.rgb2hsl(rgb[0],rgb[1],rgb[2]);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/color/hsv.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/color/hsv.js
deleted file mode 100644
index d42c203..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/color/hsv.js
+++ /dev/null
@@ -1,197 +0,0 @@
-dojo.provide("dojo.gfx.color.hsv");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.math");
-dojo.lang.extend(dojo.gfx.color.Color,{toHsv:function(){
-return dojo.gfx.color.rgb2hsv(this.toRgb());
-}});
-dojo.gfx.color.rgb2hsv=function(r,g,b,_4){
-if(dojo.lang.isArray(r)){
-if(g){
-_4=g;
-}
-b=r[2]||0;
-g=r[1]||0;
-r=r[0]||0;
-}
-var _5={inputRange:(_4&&_4.inputRange)?_4.inputRange:255,outputRange:(_4&&_4.outputRange)?_4.outputRange:[255,255,255]};
-var h=null;
-var s=null;
-var v=null;
-switch(_5.inputRange){
-case 1:
-r=(r*255);
-g=(g*255);
-b=(b*255);
-break;
-case 100:
-r=(r/100)*255;
-g=(g/100)*255;
-b=(b/100)*255;
-break;
-default:
-break;
-}
-var _9=Math.min(r,g,b);
-v=Math.max(r,g,b);
-var _a=v-_9;
-s=(v==0)?0:_a/v;
-if(s==0){
-h=0;
-}else{
-if(r==v){
-h=60*(g-b)/_a;
-}else{
-if(g==v){
-h=120+60*(b-r)/_a;
-}else{
-if(b==v){
-h=240+60*(r-g)/_a;
-}
-}
-}
-if(h<=0){
-h+=360;
-}
-}
-switch(_5.outputRange[0]){
-case 360:
-break;
-case 100:
-h=(h/360)*100;
-break;
-case 1:
-h=(h/360);
-break;
-default:
-h=(h/360)*255;
-break;
-}
-switch(_5.outputRange[1]){
-case 100:
-s=s*100;
-case 1:
-break;
-default:
-s=s*255;
-break;
-}
-switch(_5.outputRange[2]){
-case 100:
-v=(v/255)*100;
-break;
-case 1:
-v=(v/255);
-break;
-default:
-break;
-}
-h=dojo.math.round(h);
-s=dojo.math.round(s);
-v=dojo.math.round(v);
-return [h,s,v];
-};
-dojo.gfx.color.hsv2rgb=function(h,s,v,_e){
-if(dojo.lang.isArray(h)){
-if(s){
-_e=s;
-}
-v=h[2]||0;
-s=h[1]||0;
-h=h[0]||0;
-}
-var _f={inputRange:(_e&&_e.inputRange)?_e.inputRange:[255,255,255],outputRange:(_e&&_e.outputRange)?_e.outputRange:255};
-switch(_f.inputRange[0]){
-case 1:
-h=h*360;
-break;
-case 100:
-h=(h/100)*360;
-break;
-case 360:
-h=h;
-break;
-default:
-h=(h/255)*360;
-}
-if(h==360){
-h=0;
-}
-switch(_f.inputRange[1]){
-case 100:
-s/=100;
-break;
-case 255:
-s/=255;
-}
-switch(_f.inputRange[2]){
-case 100:
-v/=100;
-break;
-case 255:
-v/=255;
-}
-var r=null;
-var g=null;
-var b=null;
-if(s==0){
-r=v;
-g=v;
-b=v;
-}else{
-var _13=h/60;
-var i=Math.floor(_13);
-var f=_13-i;
-var p=v*(1-s);
-var q=v*(1-(s*f));
-var t=v*(1-(s*(1-f)));
-switch(i){
-case 0:
-r=v;
-g=t;
-b=p;
-break;
-case 1:
-r=q;
-g=v;
-b=p;
-break;
-case 2:
-r=p;
-g=v;
-b=t;
-break;
-case 3:
-r=p;
-g=q;
-b=v;
-break;
-case 4:
-r=t;
-g=p;
-b=v;
-break;
-case 5:
-r=v;
-g=p;
-b=q;
-break;
-}
-}
-switch(_f.outputRange){
-case 1:
-r=dojo.math.round(r,2);
-g=dojo.math.round(g,2);
-b=dojo.math.round(b,2);
-break;
-case 100:
-r=Math.round(r*100);
-g=Math.round(g*100);
-b=Math.round(b*100);
-break;
-default:
-r=Math.round(r*255);
-g=Math.round(g*255);
-b=Math.round(b*255);
-}
-return [r,g,b];
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/common.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/common.js
deleted file mode 100644
index dd893a9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/common.js
+++ /dev/null
@@ -1,50 +0,0 @@
-dojo.provide("dojo.gfx.common");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.dom");
-dojo.lang.mixin(dojo.gfx,{defaultPath:{type:"path",path:""},defaultPolyline:{type:"polyline",points:[]},defaultRect:{type:"rect",x:0,y:0,width:100,height:100,r:0},defaultEllipse:{type:"ellipse",cx:0,cy:0,rx:200,ry:100},defaultCircle:{type:"circle",cx:0,cy:0,r:100},defaultLine:{type:"line",x1:0,y1:0,x2:100,y2:100},defaultImage:{type:"image",width:0,height:0,src:""},defaultStroke:{color:"black",width:1,cap:"butt",join:4},defaultLinearGradient:{type:"linear",x1:0,y1:0,x2:100,y2:100,colors:[{offset:0,color:"black"},{offset:1,color:"white"}]},defaultRadialGradient:{type:"radial",cx:0,cy:0,r:100,colors:[{offset:0,color:"black"},{offset:1,color:"white"}]},defaultPattern:{type:"pattern",x:0,y:0,width:0,height:0,src:""},normalizeColor:function(_1){
-return (_1 instanceof dojo.gfx.color.Color)?_1:new dojo.gfx.color.Color(_1);
-},normalizeParameters:function(_2,_3){
-if(_3){
-var _4={};
-for(var x in _2){
-if(x in _3&&!(x in _4)){
-_2[x]=_3[x];
-}
-}
-}
-return _2;
-},makeParameters:function(_6,_7){
-if(!_7){
-return dojo.lang.shallowCopy(_6,true);
-}
-var _8={};
-for(var i in _6){
-if(!(i in _8)){
-_8[i]=dojo.lang.shallowCopy((i in _7)?_7[i]:_6[i],true);
-}
-}
-return _8;
-},formatNumber:function(x,_b){
-var _c=x.toString();
-if(_c.indexOf("e")>=0){
-_c=x.toFixed(4);
-}else{
-var _d=_c.indexOf(".");
-if(_d>=0&&_c.length-_d>5){
-_c=x.toFixed(4);
-}
-}
-if(x<0){
-return _c;
-}
-return _b?" "+_c:_c;
-},pathRegExp:/([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g});
-dojo.declare("dojo.gfx.Surface",null,{initializer:function(){
-this.rawNode=null;
-},getEventSource:function(){
-return this.rawNode;
-}});
-dojo.declare("dojo.gfx.Point",null,{});
-dojo.declare("dojo.gfx.Rectangle",null,{});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/matrix.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/matrix.js
deleted file mode 100644
index 3e0e145..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/matrix.js
+++ /dev/null
@@ -1,135 +0,0 @@
-dojo.provide("dojo.gfx.matrix");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.math.*");
-dojo.gfx.matrix.Matrix2D=function(_1){
-if(_1){
-if(_1 instanceof Array){
-if(_1.length>0){
-var m=dojo.gfx.matrix.normalize(_1[0]);
-for(var i=1;i<_1.length;++i){
-var l=m;
-var r=dojo.gfx.matrix.normalize(_1[i]);
-m=new dojo.gfx.matrix.Matrix2D();
-m.xx=l.xx*r.xx+l.xy*r.yx;
-m.xy=l.xx*r.xy+l.xy*r.yy;
-m.yx=l.yx*r.xx+l.yy*r.yx;
-m.yy=l.yx*r.xy+l.yy*r.yy;
-m.dx=l.xx*r.dx+l.xy*r.dy+l.dx;
-m.dy=l.yx*r.dx+l.yy*r.dy+l.dy;
-}
-dojo.mixin(this,m);
-}
-}else{
-dojo.mixin(this,_1);
-}
-}
-};
-dojo.extend(dojo.gfx.matrix.Matrix2D,{xx:1,xy:0,yx:0,yy:1,dx:0,dy:0});
-dojo.mixin(dojo.gfx.matrix,{identity:new dojo.gfx.matrix.Matrix2D(),flipX:new dojo.gfx.matrix.Matrix2D({xx:-1}),flipY:new dojo.gfx.matrix.Matrix2D({yy:-1}),flipXY:new dojo.gfx.matrix.Matrix2D({xx:-1,yy:-1}),translate:function(a,b){
-if(arguments.length>1){
-return new dojo.gfx.matrix.Matrix2D({dx:a,dy:b});
-}
-return new dojo.gfx.matrix.Matrix2D({dx:a.x,dy:a.y});
-},scale:function(a,b){
-if(arguments.length>1){
-return new dojo.gfx.matrix.Matrix2D({xx:a,yy:b});
-}
-if(typeof a=="number"){
-return new dojo.gfx.matrix.Matrix2D({xx:a,yy:a});
-}
-return new dojo.gfx.matrix.Matrix2D({xx:a.x,yy:a.y});
-},rotate:function(_a){
-var c=Math.cos(_a);
-var s=Math.sin(_a);
-return new dojo.gfx.matrix.Matrix2D({xx:c,xy:s,yx:-s,yy:c});
-},rotateg:function(_d){
-return dojo.gfx.matrix.rotate(dojo.math.degToRad(_d));
-},skewX:function(_e){
-return new dojo.gfx.matrix.Matrix2D({xy:Math.tan(_e)});
-},skewXg:function(_f){
-return dojo.gfx.matrix.skewX(dojo.math.degToRad(_f));
-},skewY:function(_10){
-return new dojo.gfx.matrix.Matrix2D({yx:-Math.tan(_10)});
-},skewYg:function(_11){
-return dojo.gfx.matrix.skewY(dojo.math.degToRad(_11));
-},normalize:function(_12){
-return (_12 instanceof dojo.gfx.matrix.Matrix2D)?_12:new dojo.gfx.matrix.Matrix2D(_12);
-},clone:function(_13){
-var obj=new dojo.gfx.matrix.Matrix2D();
-for(var i in _13){
-if(typeof (_13[i])=="number"&&typeof (obj[i])=="number"&&obj[i]!=_13[i]){
-obj[i]=_13[i];
-}
-}
-return obj;
-},invert:function(_16){
-var m=dojo.gfx.matrix.normalize(_16);
-var D=m.xx*m.yy-m.xy*m.yx;
-var M=new dojo.gfx.matrix.Matrix2D({xx:m.yy/D,xy:-m.xy/D,yx:-m.yx/D,yy:m.xx/D,dx:(m.yx*m.dy-m.yy*m.dx)/D,dy:(m.xy*m.dx-m.xx*m.dy)/D});
-return M;
-},_multiplyPoint:function(m,x,y){
-return {x:m.xx*x+m.xy*y+m.dx,y:m.yx*x+m.yy*y+m.dy};
-},multiplyPoint:function(_1d,a,b){
-var m=dojo.gfx.matrix.normalize(_1d);
-if(typeof a=="number"&&typeof b=="number"){
-return dojo.gfx.matrix._multiplyPoint(m,a,b);
-}
-return dojo.gfx.matrix._multiplyPoint(m,a.x,a.y);
-},multiply:function(_21){
-var m=dojo.gfx.matrix.normalize(_21);
-for(var i=1;i<arguments.length;++i){
-var l=m;
-var r=dojo.gfx.matrix.normalize(arguments[i]);
-m=new dojo.gfx.matrix.Matrix2D();
-m.xx=l.xx*r.xx+l.xy*r.yx;
-m.xy=l.xx*r.xy+l.xy*r.yy;
-m.yx=l.yx*r.xx+l.yy*r.yx;
-m.yy=l.yx*r.xy+l.yy*r.yy;
-m.dx=l.xx*r.dx+l.xy*r.dy+l.dx;
-m.dy=l.yx*r.dx+l.yy*r.dy+l.dy;
-}
-return m;
-},_sandwich:function(m,x,y){
-return dojo.gfx.matrix.multiply(dojo.gfx.matrix.translate(x,y),m,dojo.gfx.matrix.translate(-x,-y));
-},scaleAt:function(a,b,c,d){
-switch(arguments.length){
-case 4:
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a,b),c,d);
-case 3:
-if(typeof c=="number"){
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a),b,c);
-}
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a,b),c.x,c.y);
-}
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.scale(a),b.x,b.y);
-},rotateAt:function(_2d,a,b){
-if(arguments.length>2){
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotate(_2d),a,b);
-}
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotate(_2d),a.x,a.y);
-},rotategAt:function(_30,a,b){
-if(arguments.length>2){
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotateg(_30),a,b);
-}
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.rotateg(_30),a.x,a.y);
-},skewXAt:function(_33,a,b){
-if(arguments.length>2){
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewX(_33),a,b);
-}
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewX(_33),a.x,a.y);
-},skewXgAt:function(_36,a,b){
-if(arguments.length>2){
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewXg(_36),a,b);
-}
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewXg(_36),a.x,a.y);
-},skewYAt:function(_39,a,b){
-if(arguments.length>2){
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewY(_39),a,b);
-}
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewY(_39),a.x,a.y);
-},skewYgAt:function(_3c,a,b){
-if(arguments.length>2){
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewYg(_3c),a,b);
-}
-return dojo.gfx.matrix._sandwich(dojo.gfx.matrix.skewYg(_3c),a.x,a.y);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/path.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/path.js
deleted file mode 100644
index af6a364..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/path.js
+++ /dev/null
@@ -1,255 +0,0 @@
-dojo.provide("dojo.gfx.path");
-dojo.require("dojo.math");
-dojo.require("dojo.gfx.shape");
-dojo.declare("dojo.gfx.path.Path",dojo.gfx.Shape,{initializer:function(_1){
-this.shape=dojo.lang.shallowCopy(dojo.gfx.defaultPath,true);
-this.segments=[];
-this.absolute=true;
-this.last={};
-this.attach(_1);
-},setAbsoluteMode:function(_2){
-this.absolute=typeof (_2)=="string"?(_2=="absolute"):_2;
-return this;
-},getAbsoluteMode:function(){
-return this.absolute;
-},getBoundingBox:function(){
-return "l" in this.bbox?{x:this.bbox.l,y:this.bbox.t,width:this.bbox.r-this.bbox.l,height:this.bbox.b-this.bbox.t}:null;
-},getLastPosition:function(){
-return "x" in this.last?this.last:null;
-},_updateBBox:function(x,y){
-if("l" in this.bbox){
-if(this.bbox.l>x){
-this.bbox.l=x;
-}
-if(this.bbox.r<x){
-this.bbox.r=x;
-}
-if(this.bbox.t>y){
-this.bbox.t=y;
-}
-if(this.bbox.b<y){
-this.bbox.b=y;
-}
-}else{
-this.bbox={l:x,b:y,r:x,t:y};
-}
-},_updateWithSegment:function(_5){
-var n=_5.args;
-var l=n.length;
-switch(_5.action){
-case "M":
-case "L":
-case "C":
-case "S":
-case "Q":
-case "T":
-for(var i=0;i<l;i+=2){
-this._updateBBox(this.bbox,n[i],n[i+1]);
-}
-this.last.x=n[l-2];
-this.last.y=n[l-1];
-this.absolute=true;
-break;
-case "H":
-for(var i=0;i<l;++i){
-this._updateBBox(this.bbox,n[i],this.last.y);
-}
-this.last.x=n[l-1];
-this.absolute=true;
-break;
-case "V":
-for(var i=0;i<l;++i){
-this._updateBBox(this.bbox,this.last.x,n[i]);
-}
-this.last.y=n[l-1];
-this.absolute=true;
-break;
-case "m":
-var _9=0;
-if(!("x" in this.last)){
-this._updateBBox(this.bbox,this.last.x=n[0],this.last.y=n[1]);
-_9=2;
-}
-for(var i=_9;i<l;i+=2){
-this._updateBBox(this.bbox,this.last.x+=n[i],this.last.y+=n[i+1]);
-}
-this.absolute=false;
-break;
-case "l":
-case "t":
-for(var i=0;i<l;i+=2){
-this._updateBBox(this.bbox,this.last.x+=n[i],this.last.y+=n[i+1]);
-}
-this.absolute=false;
-break;
-case "h":
-for(var i=0;i<l;++i){
-this._updateBBox(this.bbox,this.last.x+=n[i],this.last.y);
-}
-this.absolute=false;
-break;
-case "v":
-for(var i=0;i<l;++i){
-this._updateBBox(this.bbox,this.last.x,this.last.y+=n[i]);
-}
-this.absolute=false;
-break;
-case "c":
-for(var i=0;i<l;i+=6){
-this._updateBBox(this.bbox,this.last.x+n[i],this.last.y+n[i+1]);
-this._updateBBox(this.bbox,this.last.x+n[i+2],this.last.y+n[i+3]);
-this._updateBBox(this.bbox,this.last.x+=n[i+4],this.last.y+=n[i+5]);
-}
-this.absolute=false;
-break;
-case "s":
-case "q":
-for(var i=0;i<l;i+=4){
-this._updateBBox(this.bbox,this.last.x+n[i],this.last.y+n[i+1]);
-this._updateBBox(this.bbox,this.last.x+=n[i+2],this.last.y+=n[i+3]);
-}
-this.absolute=false;
-break;
-case "A":
-for(var i=0;i<l;i+=7){
-this._updateBBox(this.bbox,n[i+5],n[i+6]);
-}
-this.last.x=n[l-2];
-this.last.y=n[l-1];
-this.absolute=true;
-break;
-case "a":
-for(var i=0;i<l;i+=7){
-this._updateBBox(this.bbox,this.last.x+=n[i+5],this.last.y+=n[i+6]);
-}
-this.absolute=false;
-break;
-}
-var _a=[_5.action];
-for(var i=0;i<l;++i){
-_a.push(dojo.gfx.formatNumber(n[i],true));
-}
-if(typeof (this.shape.path)=="string"){
-this.shape.path+=_a.join("");
-}else{
-this.shape.path=this.shape.path.concat(_a);
-}
-},_validSegments:{m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7,z:0},_pushSegment:function(_b,_c){
-var _d=this._validSegments[_b.toLowerCase()];
-if(typeof (_d)=="number"){
-if(_d){
-if(_c.length>=_d){
-var _e={action:_b,args:_c.slice(0,_c.length-_c.length%_d)};
-this.segments.push(_e);
-this._updateWithSegment(_e);
-}
-}else{
-var _e={action:_b,args:[]};
-this.segments.push(_e);
-this._updateWithSegment(_e);
-}
-}
-},_collectArgs:function(_f,_10){
-for(var i=0;i<_10.length;++i){
-var t=_10[i];
-if(typeof (t)=="boolean"){
-_f.push(t?1:0);
-}else{
-if(typeof (t)=="number"){
-_f.push(t);
-}else{
-if(t instanceof Array){
-this._collectArgs(_f,t);
-}else{
-if("x" in t&&"y" in t){
-_f.push(t.x);
-_f.push(t.y);
-}
-}
-}
-}
-}
-},moveTo:function(){
-var _13=[];
-this._collectArgs(_13,arguments);
-this._pushSegment(this.absolute?"M":"m",_13);
-return this;
-},lineTo:function(){
-var _14=[];
-this._collectArgs(_14,arguments);
-this._pushSegment(this.absolute?"L":"l",_14);
-return this;
-},hLineTo:function(){
-var _15=[];
-this._collectArgs(_15,arguments);
-this._pushSegment(this.absolute?"H":"h",_15);
-return this;
-},vLineTo:function(){
-var _16=[];
-this._collectArgs(_16,arguments);
-this._pushSegment(this.absolute?"V":"v",_16);
-return this;
-},curveTo:function(){
-var _17=[];
-this._collectArgs(_17,arguments);
-this._pushSegment(this.absolute?"C":"c",_17);
-return this;
-},smoothCurveTo:function(){
-var _18=[];
-this._collectArgs(_18,arguments);
-this._pushSegment(this.absolute?"S":"s",_18);
-return this;
-},qCurveTo:function(){
-var _19=[];
-this._collectArgs(_19,arguments);
-this._pushSegment(this.absolute?"Q":"q",_19);
-return this;
-},qSmoothCurveTo:function(){
-var _1a=[];
-this._collectArgs(_1a,arguments);
-this._pushSegment(this.absolute?"T":"t",_1a);
-return this;
-},arcTo:function(){
-var _1b=[];
-this._collectArgs(_1b,arguments);
-for(var i=2;i<_1b.length;i+=7){
-_1b[i]=-_1b[i];
-}
-this._pushSegment(this.absolute?"A":"a",_1b);
-return this;
-},closePath:function(){
-this._pushSegment("Z",[]);
-return this;
-},_setPath:function(_1d){
-var p=_1d.match(dojo.gfx.pathRegExp);
-this.segments=[];
-this.absolute=true;
-this.bbox={};
-this.last={};
-if(!p){
-return;
-}
-var _1f="";
-var _20=[];
-for(var i=0;i<p.length;++i){
-var t=p[i];
-var x=parseFloat(t);
-if(isNaN(x)){
-if(_1f){
-this._pushSegment(_1f,_20);
-}
-_20=[];
-_1f=t;
-}else{
-_20.push(x);
-}
-}
-this._pushSegment(_1f,_20);
-},setShape:function(_24){
-this.shape=dojo.gfx.makeParameters(this.shape,typeof (_24)=="string"?{path:_24}:_24);
-var _25=this.shape.path;
-this.shape.path=[];
-this._setPath(_25);
-this.shape.path=this.shape.path.join("");
-return this;
-},_2PI:Math.PI*2});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/shape.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/shape.js
deleted file mode 100644
index a3940d8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/shape.js
+++ /dev/null
@@ -1,163 +0,0 @@
-dojo.provide("dojo.gfx.shape");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.gfx.common");
-dojo.declare("dojo.gfx.Shape",null,{initializer:function(){
-this.rawNode=null;
-this.shape=null;
-this.matrix=null;
-this.fillStyle=null;
-this.strokeStyle=null;
-this.bbox=null;
-this.parent=null;
-this.parentMatrix=null;
-},getNode:function(){
-return this.rawNode;
-},getShape:function(){
-return this.shape;
-},getTransform:function(){
-return this.matrix;
-},getFill:function(){
-return this.fillStyle;
-},getStroke:function(){
-return this.strokeStyle;
-},getParent:function(){
-return this.parent;
-},getBoundingBox:function(){
-return this.bbox;
-},getEventSource:function(){
-return this.rawNode;
-},setShape:function(_1){
-return this;
-},setFill:function(_2){
-return this;
-},setStroke:function(_3){
-return this;
-},moveToFront:function(){
-return this;
-},moveToBack:function(){
-return this;
-},setTransform:function(_4){
-this.matrix=dojo.gfx.matrix.clone(_4?dojo.gfx.matrix.normalize(_4):dojo.gfx.identity,true);
-return this._applyTransform();
-},applyRightTransform:function(_5){
-return _5?this.setTransform([this.matrix,_5]):this;
-},applyLeftTransform:function(_6){
-return _6?this.setTransform([_6,this.matrix]):this;
-},applyTransform:function(_7){
-return _7?this.setTransform([this.matrix,_7]):this;
-},remove:function(_8){
-if(this.parent){
-this.parent.remove(this,_8);
-}
-return this;
-},_setParent:function(_9,_a){
-this.parent=_9;
-return this._updateParentMatrix(_a);
-},_updateParentMatrix:function(_b){
-this.parentMatrix=_b?dojo.gfx.matrix.clone(_b):null;
-return this._applyTransform();
-},_getRealMatrix:function(){
-return this.parentMatrix?new dojo.gfx.matrix.Matrix2D([this.parentMatrix,this.matrix]):this.matrix;
-}});
-dojo.declare("dojo.gfx.shape.VirtualGroup",dojo.gfx.Shape,{initializer:function(){
-this.children=[];
-},add:function(_c){
-var _d=_c.getParent();
-if(_d){
-_d.remove(_c,true);
-}
-this.children.push(_c);
-return _c._setParent(this,this._getRealMatrix());
-},remove:function(_e,_f){
-for(var i=0;i<this.children.length;++i){
-if(this.children[i]==_e){
-if(_f){
-}else{
-_e._setParent(null,null);
-}
-this.children.splice(i,1);
-break;
-}
-}
-return this;
-},_applyTransform:function(){
-var _11=this._getRealMatrix();
-for(var i=0;i<this.children.length;++i){
-this.children[i]._updateParentMatrix(_11);
-}
-return this;
-}});
-dojo.declare("dojo.gfx.shape.Rect",dojo.gfx.Shape,{initializer:function(_13){
-this.shape=dojo.lang.shallowCopy(dojo.gfx.defaultRect,true);
-this.attach(_13);
-},getBoundingBox:function(){
-return this.shape;
-}});
-dojo.declare("dojo.gfx.shape.Ellipse",dojo.gfx.Shape,{initializer:function(_14){
-this.shape=dojo.lang.shallowCopy(dojo.gfx.defaultEllipse,true);
-this.attach(_14);
-},getBoundingBox:function(){
-if(!this.bbox){
-var _15=this.shape;
-this.bbox={x:_15.cx-_15.rx,y:_15.cy-_15.ry,width:2*_15.rx,height:2*_15.ry};
-}
-return this.bbox;
-}});
-dojo.declare("dojo.gfx.shape.Circle",dojo.gfx.Shape,{initializer:function(_16){
-this.shape=dojo.lang.shallowCopy(dojo.gfx.defaultCircle,true);
-this.attach(_16);
-},getBoundingBox:function(){
-if(!this.bbox){
-var _17=this.shape;
-this.bbox={x:_17.cx-_17.r,y:_17.cy-_17.r,width:2*_17.r,height:2*_17.r};
-}
-return this.bbox;
-}});
-dojo.declare("dojo.gfx.shape.Line",dojo.gfx.Shape,{initializer:function(_18){
-this.shape=dojo.lang.shallowCopy(dojo.gfx.defaultLine,true);
-this.attach(_18);
-},getBoundingBox:function(){
-if(!this.bbox){
-var _19=this.shape;
-this.bbox={x:Math.min(_19.x1,_19.x2),y:Math.min(_19.y1,_19.y2),width:Math.abs(_19.x2-_19.x1),height:Math.abs(_19.y2-_19.y1)};
-}
-return this.bbox;
-}});
-dojo.declare("dojo.gfx.shape.Polyline",dojo.gfx.Shape,{initializer:function(_1a){
-this.shape=dojo.lang.shallowCopy(dojo.gfx.defaultPolyline,true);
-this.attach(_1a);
-},getBoundingBox:function(){
-if(!this.bbox&&this.shape.points.length){
-var p=this.shape.points;
-var l=p.length;
-var t=p[0];
-var _1e={l:t.x,t:t.y,r:t.x,b:t.y};
-for(var i=1;i<l;++i){
-t=p[i];
-if(_1e.l>t.x){
-_1e.l=t.x;
-}
-if(_1e.r<t.x){
-_1e.r=t.x;
-}
-if(_1e.t>t.y){
-_1e.t=t.y;
-}
-if(_1e.b<t.y){
-_1e.b=t.y;
-}
-}
-this.bbox={x:_1e.l,y:_1e.t,width:_1e.r-_1e.l,height:_1e.b-_1e.t};
-}
-return this.bbox;
-}});
-dojo.declare("dojo.gfx.shape.Image",dojo.gfx.Shape,{initializer:function(_20){
-this.shape=dojo.lang.shallowCopy(dojo.gfx.defaultImage,true);
-this.attach(_20);
-},getBoundingBox:function(){
-if(!this.bbox){
-var _21=this.shape;
-this.bbox={x:0,y:0,width:_21.width,height:_21.height};
-}
-return this.bbox;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/svg.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/svg.js
deleted file mode 100644
index 1361df8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/svg.js
+++ /dev/null
@@ -1,460 +0,0 @@
-dojo.provide("dojo.gfx.svg");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.svg");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.gfx.common");
-dojo.require("dojo.gfx.shape");
-dojo.require("dojo.gfx.path");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.gfx.svg");
-dojo.gfx.svg.getRef=function(_1){
-if(!_1||_1=="none"){
-return null;
-}
-if(_1.match(/^url\(#.+\)$/)){
-return dojo.byId(_1.slice(5,-1));
-}
-if(dojo.render.html.opera&&_1.match(/^#dj_unique_.+$/)){
-return dojo.byId(_1.slice(1));
-}
-return null;
-};
-dojo.lang.extend(dojo.gfx.Shape,{setFill:function(_2){
-if(!_2){
-this.fillStyle=null;
-this.rawNode.setAttribute("fill","none");
-this.rawNode.setAttribute("fill-opacity",0);
-return this;
-}
-if(typeof (_2)=="object"&&"type" in _2){
-switch(_2.type){
-case "linear":
-var f=dojo.gfx.makeParameters(dojo.gfx.defaultLinearGradient,_2);
-var _4=this._setFillObject(f,"linearGradient");
-dojo.lang.forEach(["x1","y1","x2","y2"],function(x){
-_4.setAttribute(x,f[x].toFixed(8));
-});
-break;
-case "radial":
-var f=dojo.gfx.makeParameters(dojo.gfx.defaultRadialGradient,_2);
-var _4=this._setFillObject(f,"radialGradient");
-dojo.lang.forEach(["cx","cy","r"],function(x){
-_4.setAttribute(x,f[x].toFixed(8));
-});
-break;
-case "pattern":
-var f=dojo.gfx.makeParameters(dojo.gfx.defaultPattern,_2);
-var _7=this._setFillObject(f,"pattern");
-dojo.lang.forEach(["x","y","width","height"],function(x){
-_7.setAttribute(x,f[x].toFixed(8));
-});
-break;
-}
-return this;
-}
-var f=dojo.gfx.normalizeColor(_2);
-this.fillStyle=f;
-this.rawNode.setAttribute("fill",f.toCss());
-this.rawNode.setAttribute("fill-opacity",f.a);
-return this;
-},setStroke:function(_9){
-if(!_9){
-this.strokeStyle=null;
-this.rawNode.setAttribute("stroke","none");
-this.rawNode.setAttribute("stroke-opacity",0);
-return this;
-}
-this.strokeStyle=dojo.gfx.makeParameters(dojo.gfx.defaultStroke,_9);
-this.strokeStyle.color=dojo.gfx.normalizeColor(this.strokeStyle.color);
-var s=this.strokeStyle;
-var rn=this.rawNode;
-if(s){
-rn.setAttribute("stroke",s.color.toCss());
-rn.setAttribute("stroke-opacity",s.color.a);
-rn.setAttribute("stroke-width",s.width);
-rn.setAttribute("stroke-linecap",s.cap);
-if(typeof (s.join)=="number"){
-rn.setAttribute("stroke-linejoin","miter");
-rn.setAttribute("stroke-miterlimit",s.join);
-}else{
-rn.setAttribute("stroke-linejoin",s.join);
-}
-}
-return this;
-},_setFillObject:function(f,_d){
-var _e=this.rawNode.parentNode.getElementsByTagName("defs");
-if(_e.length==0){
-return this;
-}
-this.fillStyle=f;
-var _f=_e[0];
-var _10=this.rawNode.getAttribute("fill");
-var ref=dojo.gfx.svg.getRef(_10);
-if(ref){
-_10=ref;
-if(_10.tagName.toLowerCase()!=_d.toLowerCase()){
-var id=_10.id;
-_10.parentNode.removeChild(_10);
-_10=document.createElementNS(dojo.svg.xmlns.svg,_d);
-_10.setAttribute("id",id);
-_f.appendChild(_10);
-}else{
-while(_10.childNodes.length){
-_10.removeChild(_10.lastChild);
-}
-}
-}else{
-_10=document.createElementNS(dojo.svg.xmlns.svg,_d);
-_10.setAttribute("id",dojo.dom.getUniqueId());
-_f.appendChild(_10);
-}
-if(_d=="pattern"){
-_10.setAttribute("patternUnits","userSpaceOnUse");
-var img=document.createElementNS(dojo.svg.xmlns.svg,"image");
-img.setAttribute("x",0);
-img.setAttribute("y",0);
-img.setAttribute("width",f.width.toFixed(8));
-img.setAttribute("height",f.height.toFixed(8));
-img.setAttributeNS(dojo.svg.xmlns.xlink,"href",f.src);
-_10.appendChild(img);
-}else{
-_10.setAttribute("gradientUnits","userSpaceOnUse");
-for(var i=0;i<f.colors.length;++i){
-f.colors[i].color=dojo.gfx.normalizeColor(f.colors[i].color);
-var t=document.createElementNS(dojo.svg.xmlns.svg,"stop");
-t.setAttribute("offset",f.colors[i].offset.toFixed(8));
-t.setAttribute("stop-color",f.colors[i].color.toCss());
-_10.appendChild(t);
-}
-}
-this.rawNode.setAttribute("fill","url(#"+_10.getAttribute("id")+")");
-this.rawNode.removeAttribute("fill-opacity");
-return _10;
-},_applyTransform:function(){
-var _16=this._getRealMatrix();
-if(_16){
-var tm=this.matrix;
-this.rawNode.setAttribute("transform","matrix("+tm.xx.toFixed(8)+","+tm.yx.toFixed(8)+","+tm.xy.toFixed(8)+","+tm.yy.toFixed(8)+","+tm.dx.toFixed(8)+","+tm.dy.toFixed(8)+")");
-}else{
-this.rawNode.removeAttribute("transform");
-}
-return this;
-},setRawNode:function(_18){
-with(_18){
-setAttribute("fill","none");
-setAttribute("fill-opacity",0);
-setAttribute("stroke","none");
-setAttribute("stroke-opacity",0);
-setAttribute("stroke-width",1);
-setAttribute("stroke-linecap","butt");
-setAttribute("stroke-linejoin","miter");
-setAttribute("stroke-miterlimit",4);
-}
-this.rawNode=_18;
-},moveToFront:function(){
-this.rawNode.parentNode.appendChild(this.rawNode);
-return this;
-},moveToBack:function(){
-this.rawNode.parentNode.insertBefore(this.rawNode,this.rawNode.parentNode.firstChild);
-return this;
-},setShape:function(_19){
-this.shape=dojo.gfx.makeParameters(this.shape,_19);
-for(var i in this.shape){
-if(i!="type"){
-this.rawNode.setAttribute(i,this.shape[i]);
-}
-}
-return this;
-},attachFill:function(_1b){
-var _1c=null;
-if(_1b){
-var _1d=_1b.getAttribute("fill");
-if(_1d=="none"){
-return;
-}
-var ref=dojo.gfx.svg.getRef(_1d);
-if(ref){
-var _1f=ref;
-switch(_1f.tagName.toLowerCase()){
-case "lineargradient":
-_1c=this._getGradient(dojo.gfx.defaultLinearGradient,_1f);
-dojo.lang.forEach(["x1","y1","x2","y2"],function(x){
-_1c[x]=_1f.getAttribute(x);
-});
-break;
-case "radialgradient":
-_1c=this._getGradient(dojo.gfx.defaultRadialGradient,_1f);
-dojo.lang.forEach(["cx","cy","r"],function(x){
-_1c[x]=_1f.getAttribute(x);
-});
-_1c.cx=_1f.getAttribute("cx");
-_1c.cy=_1f.getAttribute("cy");
-_1c.r=_1f.getAttribute("r");
-break;
-case "pattern":
-_1c=dojo.lang.shallowCopy(dojo.gfx.defaultPattern,true);
-dojo.lang.forEach(["x","y","width","height"],function(x){
-_1c[x]=_1f.getAttribute(x);
-});
-_1c.src=_1f.firstChild.getAttributeNS(dojo.svg.xmlns.xlink,"href");
-break;
-}
-}else{
-_1c=new dojo.gfx.color.Color(_1d);
-var _23=_1b.getAttribute("fill-opacity");
-if(_23!=null){
-_1c.a=_23;
-}
-}
-}
-return _1c;
-},_getGradient:function(_24,_25){
-var _26=dojo.lang.shallowCopy(_24,true);
-_26.colors=[];
-for(var i=0;i<_25.childNodes.length;++i){
-_26.colors.push({offset:_25.childNodes[i].getAttribute("offset"),color:new dojo.gfx.color.Color(_25.childNodes[i].getAttribute("stop-color"))});
-}
-return _26;
-},attachStroke:function(_28){
-if(!_28){
-return;
-}
-var _29=_28.getAttribute("stroke");
-if(_29==null||_29=="none"){
-return null;
-}
-var _2a=dojo.lang.shallowCopy(dojo.gfx.defaultStroke,true);
-var _2b=new dojo.gfx.color.Color(_29);
-if(_2b){
-_2a.color=_2b;
-_2a.color.a=_28.getAttribute("stroke-opacity");
-_2a.width=_28.getAttribute("stroke-width");
-_2a.cap=_28.getAttribute("stroke-linecap");
-_2a.join=_28.getAttribute("stroke-linejoin");
-if(_2a.join=="miter"){
-_2a.join=_28.getAttribute("stroke-miterlimit");
-}
-}
-return _2a;
-},attachTransform:function(_2c){
-var _2d=null;
-if(_2c){
-_2d=_2c.getAttribute("transform");
-if(_2d.match(/^matrix\(.+\)$/)){
-var t=_2d.slice(7,-1).split(",");
-_2d=dojo.gfx.matrix.normalize({xx:parseFloat(t[0]),xy:parseFloat(t[2]),yx:parseFloat(t[1]),yy:parseFloat(t[3]),dx:parseFloat(t[4]),dy:parseFloat(t[5])});
-}
-}
-return _2d;
-},attachShape:function(_2f){
-var _30=null;
-if(_2f){
-_30=dojo.lang.shallowCopy(this.shape,true);
-for(var i in _30){
-_30[i]=_2f.getAttribute(i);
-}
-}
-return _30;
-},attach:function(_32){
-if(_32){
-this.rawNode=_32;
-this.fillStyle=this.attachFill(_32);
-this.strokeStyle=this.attachStroke(_32);
-this.matrix=this.attachTransform(_32);
-this.shape=this.attachShape(_32);
-}
-}});
-dojo.declare("dojo.gfx.Group",dojo.gfx.Shape,{setRawNode:function(_33){
-this.rawNode=_33;
-}});
-dojo.gfx.Group.nodeType="g";
-dojo.declare("dojo.gfx.Rect",dojo.gfx.shape.Rect,{attachShape:function(_34){
-var _35=null;
-if(_34){
-_35=dojo.gfx.Rect.superclass.attachShape.apply(this,arguments);
-_35.r=Math.min(_34.getAttribute("rx"),_34.getAttribute("ry"));
-}
-return _35;
-},setShape:function(_36){
-this.shape=dojo.gfx.makeParameters(this.shape,_36);
-this.bbox=null;
-for(var i in this.shape){
-if(i!="type"&&i!="r"){
-this.rawNode.setAttribute(i,this.shape[i]);
-}
-}
-this.rawNode.setAttribute("rx",this.shape.r);
-this.rawNode.setAttribute("ry",this.shape.r);
-return this;
-}});
-dojo.gfx.Rect.nodeType="rect";
-dojo.gfx.Ellipse=dojo.gfx.shape.Ellipse;
-dojo.gfx.Ellipse.nodeType="ellipse";
-dojo.gfx.Circle=dojo.gfx.shape.Circle;
-dojo.gfx.Circle.nodeType="circle";
-dojo.gfx.Line=dojo.gfx.shape.Line;
-dojo.gfx.Line.nodeType="line";
-dojo.declare("dojo.gfx.Polyline",dojo.gfx.shape.Polyline,{setShape:function(_38){
-if(_38&&_38 instanceof Array){
-this.shape=dojo.gfx.makeParameters(this.shape,{points:_38});
-if(closed&&this.shape.points.length){
-this.shape.points.push(this.shape.points[0]);
-}
-}else{
-this.shape=dojo.gfx.makeParameters(this.shape,_38);
-}
-this.box=null;
-var _39=[];
-var p=this.shape.points;
-for(var i=0;i<p.length;++i){
-_39.push(p[i].x.toFixed(8));
-_39.push(p[i].y.toFixed(8));
-}
-this.rawNode.setAttribute("points",_39.join(" "));
-return this;
-}});
-dojo.gfx.Polyline.nodeType="polyline";
-dojo.declare("dojo.gfx.Image",dojo.gfx.shape.Image,{setShape:function(_3c){
-this.shape=dojo.gfx.makeParameters(this.shape,_3c);
-this.bbox=null;
-var _3d=this.rawNode;
-for(var i in this.shape){
-if(i!="type"&&i!="src"){
-_3d.setAttribute(i,this.shape[i]);
-}
-}
-_3d.setAttributeNS(dojo.svg.xmlns.xlink,"href",this.shape.src);
-return this;
-},setStroke:function(){
-return this;
-},setFill:function(){
-return this;
-},attachStroke:function(_3f){
-return null;
-},attachFill:function(_40){
-return null;
-}});
-dojo.gfx.Image.nodeType="image";
-dojo.declare("dojo.gfx.Path",dojo.gfx.path.Path,{_updateWithSegment:function(_41){
-dojo.gfx.Path.superclass._updateWithSegment.apply(this,arguments);
-if(typeof (this.shape.path)=="string"){
-this.rawNode.setAttribute("d",this.shape.path);
-}
-},setShape:function(_42){
-dojo.gfx.Path.superclass.setShape.apply(this,arguments);
-this.rawNode.setAttribute("d",this.shape.path);
-return this;
-}});
-dojo.gfx.Path.nodeType="path";
-dojo.gfx._creators={createPath:function(_43){
-return this.createObject(dojo.gfx.Path,_43);
-},createRect:function(_44){
-return this.createObject(dojo.gfx.Rect,_44);
-},createCircle:function(_45){
-return this.createObject(dojo.gfx.Circle,_45);
-},createEllipse:function(_46){
-return this.createObject(dojo.gfx.Ellipse,_46);
-},createLine:function(_47){
-return this.createObject(dojo.gfx.Line,_47);
-},createPolyline:function(_48){
-return this.createObject(dojo.gfx.Polyline,_48);
-},createImage:function(_49){
-return this.createObject(dojo.gfx.Image,_49);
-},createGroup:function(){
-return this.createObject(dojo.gfx.Group);
-},createObject:function(_4a,_4b){
-if(!this.rawNode){
-return null;
-}
-var _4c=new _4a();
-var _4d=document.createElementNS(dojo.svg.xmlns.svg,_4a.nodeType);
-_4c.setRawNode(_4d);
-this.rawNode.appendChild(_4d);
-_4c.setShape(_4b);
-this.add(_4c);
-return _4c;
-},add:function(_4e){
-var _4f=_4e.getParent();
-if(_4f){
-_4f.remove(_4e,true);
-}
-_4e._setParent(this,null);
-this.rawNode.appendChild(_4e.rawNode);
-return this;
-},remove:function(_50,_51){
-if(this.rawNode==_50.rawNode.parentNode){
-this.rawNode.removeChild(_50.rawNode);
-}
-_50._setParent(null,null);
-return this;
-}};
-dojo.gfx.attachNode=function(_52){
-if(!_52){
-return null;
-}
-var s=null;
-switch(_52.tagName.toLowerCase()){
-case dojo.gfx.Rect.nodeType:
-s=new dojo.gfx.Rect();
-break;
-case dojo.gfx.Ellipse.nodeType:
-s=new dojo.gfx.Ellipse();
-break;
-case dojo.gfx.Polyline.nodeType:
-s=new dojo.gfx.Polyline();
-break;
-case dojo.gfx.Path.nodeType:
-s=new dojo.gfx.Path();
-break;
-case dojo.gfx.Circle.nodeType:
-s=new dojo.gfx.Circle();
-break;
-case dojo.gfx.Line.nodeType:
-s=new dojo.gfx.Line();
-break;
-case dojo.gfx.Image.nodeType:
-s=new dojo.gfx.Image();
-break;
-default:
-dojo.debug("FATAL ERROR! tagName = "+_52.tagName);
-}
-s.attach(_52);
-return s;
-};
-dojo.lang.extend(dojo.gfx.Surface,{setDimensions:function(_54,_55){
-if(!this.rawNode){
-return this;
-}
-this.rawNode.setAttribute("width",_54);
-this.rawNode.setAttribute("height",_55);
-return this;
-},getDimensions:function(){
-return this.rawNode?{width:this.rawNode.getAttribute("width"),height:this.rawNode.getAttribute("height")}:null;
-}});
-dojo.gfx.createSurface=function(_56,_57,_58){
-var s=new dojo.gfx.Surface();
-s.rawNode=document.createElementNS(dojo.svg.xmlns.svg,"svg");
-s.rawNode.setAttribute("width",_57);
-s.rawNode.setAttribute("height",_58);
-var _5a=new dojo.gfx.svg.Defines();
-var _5b=document.createElementNS(dojo.svg.xmlns.svg,dojo.gfx.svg.Defines.nodeType);
-_5a.setRawNode(_5b);
-s.rawNode.appendChild(_5b);
-dojo.byId(_56).appendChild(s.rawNode);
-return s;
-};
-dojo.gfx.attachSurface=function(_5c){
-var s=new dojo.gfx.Surface();
-s.rawNode=_5c;
-return s;
-};
-dojo.lang.extend(dojo.gfx.Group,dojo.gfx._creators);
-dojo.lang.extend(dojo.gfx.Surface,dojo.gfx._creators);
-delete dojo.gfx._creators;
-dojo.gfx.svg.Defines=function(){
-this.rawNode=null;
-};
-dojo.lang.extend(dojo.gfx.svg.Defines,{setRawNode:function(_5e){
-this.rawNode=_5e;
-}});
-dojo.gfx.svg.Defines.nodeType="defs";
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/vml.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/vml.js
deleted file mode 100644
index cb99c94..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/gfx/vml.js
+++ /dev/null
@@ -1,997 +0,0 @@
-dojo.provide("dojo.gfx.vml");
-dojo.require("dojo.dom");
-dojo.require("dojo.math");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.string.*");
-dojo.require("dojo.html.metrics");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.gfx.common");
-dojo.require("dojo.gfx.shape");
-dojo.require("dojo.gfx.path");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.gfx.vml");
-dojo.gfx.vml.xmlns="urn:schemas-microsoft-com:vml";
-dojo.gfx.vml._parseFloat=function(_1){
-return _1.match(/^\d+f$/i)?parseInt(_1)/65536:parseFloat(_1);
-};
-dojo.gfx.vml.cm_in_pt=72/2.54;
-dojo.gfx.vml.mm_in_pt=7.2/2.54;
-dojo.gfx.vml.px_in_pt=function(){
-return dojo.html.getCachedFontMeasurements()["12pt"]/12;
-};
-dojo.gfx.vml.pt2px=function(_2){
-return _2*this.px_in_pt();
-};
-dojo.gfx.vml.px2pt=function(_3){
-return _3/this.px_in_pt();
-};
-dojo.gfx.vml.normalizedLength=function(_4){
-if(_4.length==0){
-return 0;
-}
-if(_4.length>2){
-var _5=this.px_in_pt();
-var _6=parseFloat(_4);
-switch(_4.slice(-2)){
-case "px":
-return _6;
-case "pt":
-return _6*_5;
-case "in":
-return _6*72*_5;
-case "pc":
-return _6*12*_5;
-case "mm":
-return _6/this.mm_in_pt*_5;
-case "cm":
-return _6/this.cm_in_pt*_5;
-}
-}
-return parseFloat(_4);
-};
-dojo.lang.extend(dojo.gfx.Shape,{setFill:function(_7){
-if(!_7){
-this.fillStyle=null;
-this.rawNode.filled=false;
-return this;
-}
-if(typeof (_7)=="object"&&"type" in _7){
-switch(_7.type){
-case "linear":
-var f=dojo.gfx.makeParameters(dojo.gfx.defaultLinearGradient,_7);
-this.fillStyle=f;
-var s="";
-for(var i=0;i<f.colors.length;++i){
-f.colors[i].color=dojo.gfx.normalizeColor(f.colors[i].color);
-s+=f.colors[i].offset.toFixed(8)+" "+f.colors[i].color.toHex()+";";
-}
-var fo=this.rawNode.fill;
-fo.colors.value=s;
-fo.method="sigma";
-fo.type="gradient";
-fo.angle=(dojo.math.radToDeg(Math.atan2(f.x2-f.x1,f.y2-f.y1))+180)%360;
-fo.on=true;
-break;
-case "radial":
-var f=dojo.gfx.makeParameters(dojo.gfx.defaultRadialGradient,_7);
-this.fillStyle=f;
-var w=parseFloat(this.rawNode.style.width);
-var h=parseFloat(this.rawNode.style.height);
-var c=isNaN(w)?1:2*f.r/w;
-var i=f.colors.length-1;
-f.colors[i].color=dojo.gfx.normalizeColor(f.colors[i].color);
-var s="0 "+f.colors[i].color.toHex();
-for(;i>=0;--i){
-f.colors[i].color=dojo.gfx.normalizeColor(f.colors[i].color);
-s+=(1-c*f.colors[i].offset).toFixed(8)+" "+f.colors[i].color.toHex()+";";
-}
-var fo=this.rawNode.fill;
-fo.colors.value=s;
-fo.method="sigma";
-fo.type="gradientradial";
-if(isNaN(w)||isNaN(h)){
-fo.focusposition="0.5 0.5";
-}else{
-fo.focusposition=(f.cx/w).toFixed(8)+" "+(f.cy/h).toFixed(8);
-}
-fo.focussize="0 0";
-fo.on=true;
-break;
-case "pattern":
-var f=dojo.gfx.makeParameters(dojo.gfx.defaultPattern,_7);
-this.fillStyle=f;
-var fo=this.rawNode.fill;
-fo.type="tile";
-fo.src=f.src;
-if(f.width&&f.height){
-fo.size.x=dojo.gfx.vml.px2pt(f.width);
-fo.size.y=dojo.gfx.vml.px2pt(f.height);
-}
-fo.alignShape=false;
-fo.position.x=0;
-fo.position.y=0;
-fo.origin.x=f.width?f.x/f.width:0;
-fo.origin.y=f.height?f.y/f.height:0;
-fo.on=true;
-break;
-}
-this.rawNode.fill.opacity=1;
-return this;
-}
-this.fillStyle=dojo.gfx.normalizeColor(_7);
-this.rawNode.fillcolor=this.fillStyle.toHex();
-this.rawNode.fill.opacity=this.fillStyle.a;
-this.rawNode.filled=true;
-return this;
-},setStroke:function(_f){
-if(!_f){
-this.strokeStyle=null;
-this.rawNode.stroked=false;
-return this;
-}
-this.strokeStyle=dojo.gfx.makeParameters(dojo.gfx.defaultStroke,_f);
-this.strokeStyle.color=dojo.gfx.normalizeColor(this.strokeStyle.color);
-var s=this.strokeStyle;
-this.rawNode.stroked=true;
-this.rawNode.strokecolor=s.color.toCss();
-this.rawNode.strokeweight=s.width+"px";
-if(this.rawNode.stroke){
-this.rawNode.stroke.opacity=s.color.a;
-this.rawNode.stroke.endcap=this._translate(this._capMap,s.cap);
-if(typeof (s.join)=="number"){
-this.rawNode.stroke.joinstyle="miter";
-this.rawNode.stroke.miterlimit=s.join;
-}else{
-this.rawNode.stroke.joinstyle=s.join;
-}
-}
-return this;
-},_capMap:{butt:"flat"},_capMapReversed:{flat:"butt"},_translate:function(_11,_12){
-return (_12 in _11)?_11[_12]:_12;
-},_applyTransform:function(){
-var _13=this._getRealMatrix();
-if(!_13){
-return this;
-}
-var _14=this.rawNode.skew;
-if(typeof (_14)=="undefined"){
-for(var i=0;i<this.rawNode.childNodes.length;++i){
-if(this.rawNode.childNodes[i].tagName=="skew"){
-_14=this.rawNode.childNodes[i];
-break;
-}
-}
-}
-if(_14){
-_14.on=false;
-var mt=_13.xx.toFixed(8)+" "+_13.xy.toFixed(8)+" "+_13.yx.toFixed(8)+" "+_13.yy.toFixed(8)+" 0 0";
-var _17=Math.floor(_13.dx).toFixed()+"px "+Math.floor(_13.dy).toFixed()+"px";
-var l=parseFloat(this.rawNode.style.left);
-var t=parseFloat(this.rawNode.style.top);
-var w=parseFloat(this.rawNode.style.width);
-var h=parseFloat(this.rawNode.style.height);
-if(isNaN(l)){
-l=0;
-}
-if(isNaN(t)){
-t=0;
-}
-if(isNaN(w)){
-w=1;
-}
-if(isNaN(h)){
-h=1;
-}
-var _1c=(-l/w-0.5).toFixed(8)+" "+(-t/h-0.5).toFixed(8);
-_14.matrix=mt;
-_14.origin=_1c;
-_14.offset=_17;
-_14.on=true;
-}
-return this;
-},setRawNode:function(_1d){
-_1d.stroked=false;
-_1d.filled=false;
-this.rawNode=_1d;
-},attachFill:function(_1e){
-var _1f=null;
-var fo=_1e.fill;
-if(_1e){
-if(fo.on&&fo.type=="gradient"){
-var _1f=dojo.lang.shallowCopy(dojo.gfx.defaultLinearGradient,true);
-var rad=dojo.math.degToRad(fo.angle);
-_1f.x2=Math.cos(rad);
-_1f.y2=Math.sin(rad);
-_1f.colors=[];
-var _22=fo.colors.value.split(";");
-for(var i=0;i<_22.length;++i){
-var t=_22[i].match(/\S+/g);
-if(!t||t.length!=2){
-continue;
-}
-_1f.colors.push({offset:dojo.gfx.vml._parseFloat(t[0]),color:new dojo.gfx.color.Color(t[1])});
-}
-}else{
-if(fo.on&&fo.type=="gradientradial"){
-var _1f=dojo.lang.shallowCopy(dojo.gfx.defaultRadialGradient,true);
-var w=parseFloat(_1e.style.width);
-var h=parseFloat(_1e.style.height);
-_1f.cx=isNaN(w)?0:fo.focusposition.x*w;
-_1f.cy=isNaN(h)?0:fo.focusposition.y*h;
-_1f.r=isNaN(w)?1:w/2;
-_1f.colors=[];
-var _22=fo.colors.value.split(";");
-for(var i=_22.length-1;i>=0;--i){
-var t=_22[i].match(/\S+/g);
-if(!t||t.length!=2){
-continue;
-}
-_1f.colors.push({offset:dojo.gfx.vml._parseFloat(t[0]),color:new dojo.gfx.color.Color(t[1])});
-}
-}else{
-if(fo.on&&fo.type=="tile"){
-var _1f=dojo.lang.shallowCopy(dojo.gfx.defaultPattern,true);
-_1f.width=dojo.gfx.vml.pt2px(fo.size.x);
-_1f.height=dojo.gfx.vml.pt2px(fo.size.y);
-_1f.x=fo.origin.x*_1f.width;
-_1f.y=fo.origin.y*_1f.height;
-_1f.src=fo.src;
-}else{
-if(fo.on&&_1e.fillcolor){
-_1f=new dojo.gfx.color.Color(_1e.fillcolor+"");
-_1f.a=fo.opacity;
-}
-}
-}
-}
-}
-return _1f;
-},attachStroke:function(_27){
-var _28=dojo.lang.shallowCopy(dojo.gfx.defaultStroke,true);
-if(_27&&_27.stroked){
-_28.color=new dojo.gfx.color.Color(_27.strokecolor.value);
-dojo.debug("We are expecting an .75pt here, instead of strokeweight = "+_27.strokeweight);
-_28.width=dojo.gfx.vml.normalizedLength(_27.strokeweight+"");
-_28.color.a=_27.stroke.opacity;
-_28.cap=this._translate(this._capMapReversed,_27.stroke.endcap);
-_28.join=_27.stroke.joinstyle=="miter"?_27.stroke.miterlimit:_27.stroke.joinstyle;
-}else{
-return null;
-}
-return _28;
-},attachTransform:function(_29){
-var _2a={};
-if(_29){
-var s=_29.skew;
-_2a.xx=s.matrix.xtox;
-_2a.xy=s.matrix.ytox;
-_2a.yx=s.matrix.xtoy;
-_2a.yy=s.matrix.ytoy;
-_2a.dx=dojo.gfx.vml.pt2px(s.offset.x);
-_2a.dy=dojo.gfx.vml.pt2px(s.offset.y);
-}
-return dojo.gfx.matrix.normalize(_2a);
-},attach:function(_2c){
-if(_2c){
-this.rawNode=_2c;
-this.shape=this.attachShape(_2c);
-this.fillStyle=this.attachFill(_2c);
-this.strokeStyle=this.attachStroke(_2c);
-this.matrix=this.attachTransform(_2c);
-}
-}});
-dojo.declare("dojo.gfx.Group",dojo.gfx.shape.VirtualGroup,{add:function(_2d){
-if(this!=_2d.getParent()){
-this.rawNode.appendChild(_2d.rawNode);
-dojo.gfx.Group.superclass.add.apply(this,arguments);
-}
-return this;
-},remove:function(_2e,_2f){
-if(this==_2e.getParent()){
-if(this.rawNode==_2e.rawNode.parentNode){
-this.rawNode.removeChild(_2e.rawNode);
-}
-dojo.gfx.Group.superclass.remove.apply(this,arguments);
-}
-return this;
-},attach:function(_30){
-if(_30){
-this.rawNode=_30;
-this.shape=null;
-this.fillStyle=null;
-this.strokeStyle=null;
-this.matrix=null;
-}
-}});
-dojo.gfx.Group.nodeType="group";
-var zIndex={moveToFront:function(){
-this.rawNode.parentNode.appendChild(this.rawNode);
-return this;
-},moveToBack:function(){
-this.rawNode.parentNode.insertBefore(this.rawNode,this.rawNode.parentNode.firstChild);
-return this;
-}};
-dojo.lang.extend(dojo.gfx.Shape,zIndex);
-dojo.lang.extend(dojo.gfx.Group,zIndex);
-delete zIndex;
-dojo.declare("dojo.gfx.Rect",dojo.gfx.shape.Rect,{attachShape:function(_31){
-var _32=_31.outerHTML.match(/arcsize = \"(\d*\.?\d+[%f]?)\"/)[1];
-_32=(_32.indexOf("%")>=0)?parseFloat(_32)/100:dojo.gfx.vml._parseFloat(_32);
-var _33=_31.style;
-var _34=parseFloat(_33.width);
-var _35=parseFloat(_33.height);
-var o=dojo.gfx.makeParameters(dojo.gfx.defaultRect,{x:parseInt(_33.left),y:parseInt(_33.top),width:_34,height:_35,r:Math.min(_34,_35)*_32});
-return o;
-},setShape:function(_37){
-var _38=this.shape=dojo.gfx.makeParameters(this.shape,_37);
-this.bbox=null;
-var _39=this.rawNode.style;
-_39.left=_38.x.toFixed();
-_39.top=_38.y.toFixed();
-_39.width=(typeof (_38.width)=="string"&&_38.width.indexOf("%")>=0)?_38.width:_38.width.toFixed();
-_39.height=(typeof (_38.width)=="string"&&_38.height.indexOf("%")>=0)?_38.height:_38.height.toFixed();
-var r=Math.min(1,(_38.r/Math.min(parseFloat(_38.width),parseFloat(_38.height)))).toFixed(8);
-var _3b=this.rawNode.parentNode;
-var _3c=null;
-if(_3b){
-if(_3b.lastChild!=this.rawNode){
-for(var i=0;i<_3b.childNodes.length;++i){
-if(_3b.childNodes[i]==this.rawNode){
-_3c=_3b.childNodes[i+1];
-break;
-}
-}
-}
-_3b.removeChild(this.rawNode);
-}
-this.rawNode.arcsize=r;
-if(_3b){
-if(_3c){
-_3b.insertBefore(this.rawNode,_3c);
-}else{
-_3b.appendChild(this.rawNode);
-}
-}
-return this.setTransform(this.matrix);
-}});
-dojo.gfx.Rect.nodeType="roundrect";
-dojo.declare("dojo.gfx.Ellipse",dojo.gfx.shape.Ellipse,{attachShape:function(_3e){
-var _3f=this.rawNode.style;
-var rx=parseInt(_3f.width)/2;
-var ry=parseInt(_3f.height)/2;
-var o=dojo.gfx.makeParameters(dojo.gfx.defaultEllipse,{cx:parseInt(_3f.left)+rx,cy:parseInt(_3f.top)+ry,rx:rx,ry:ry});
-return o;
-},setShape:function(_43){
-var _44=this.shape=dojo.gfx.makeParameters(this.shape,_43);
-this.bbox=null;
-var _45=this.rawNode.style;
-_45.left=(_44.cx-_44.rx).toFixed();
-_45.top=(_44.cy-_44.ry).toFixed();
-_45.width=(_44.rx*2).toFixed();
-_45.height=(_44.ry*2).toFixed();
-return this.setTransform(this.matrix);
-}});
-dojo.gfx.Ellipse.nodeType="oval";
-dojo.declare("dojo.gfx.Circle",dojo.gfx.shape.Circle,{attachShape:function(_46){
-var _47=this.rawNode.style;
-var r=parseInt(_47.width)/2;
-var o=dojo.gfx.makeParameters(dojo.gfx.defaultCircle,{cx:parseInt(_47.left)+r,cy:parseInt(_47.top)+r,r:r});
-return o;
-},setShape:function(_4a){
-var _4b=this.shape=dojo.gfx.makeParameters(this.shape,_4a);
-this.bbox=null;
-var _4c=this.rawNode.style;
-_4c.left=(_4b.cx-_4b.r).toFixed();
-_4c.top=(_4b.cy-_4b.r).toFixed();
-_4c.width=(_4b.r*2).toFixed();
-_4c.height=(_4b.r*2).toFixed();
-return this;
-}});
-dojo.gfx.Circle.nodeType="oval";
-dojo.declare("dojo.gfx.Line",dojo.gfx.shape.Line,function(_4d){
-if(_4d){
-_4d.setAttribute("dojoGfxType","line");
-}
-},{attachShape:function(_4e){
-var p=_4e.path.v.match(dojo.gfx.pathRegExp);
-var _50={};
-do{
-if(p.length<7||p[0]!="m"||p[3]!="l"||p[6]!="e"){
-break;
-}
-_50.x1=parseInt(p[1]);
-_50.y1=parseInt(p[2]);
-_50.x2=parseInt(p[4]);
-_50.y2=parseInt(p[5]);
-}while(false);
-return dojo.gfx.makeParameters(dojo.gfx.defaultLine,_50);
-},setShape:function(_51){
-var _52=this.shape=dojo.gfx.makeParameters(this.shape,_51);
-this.bbox=null;
-this.rawNode.path.v="m"+_52.x1.toFixed()+" "+_52.y1.toFixed()+"l"+_52.x2.toFixed()+" "+_52.y2.toFixed()+"e";
-return this.setTransform(this.matrix);
-}});
-dojo.gfx.Line.nodeType="shape";
-dojo.declare("dojo.gfx.Polyline",dojo.gfx.shape.Polyline,function(_53){
-if(_53){
-_53.setAttribute("dojoGfxType","polyline");
-}
-},{attachShape:function(_54){
-var _55=dojo.lang.shallowCopy(dojo.gfx.defaultPolyline,true);
-var p=_54.path.v.match(dojo.gfx.pathRegExp);
-do{
-if(p.length<3||p[0]!="m"){
-break;
-}
-var x=parseInt(p[0]);
-var y=parseInt(p[1]);
-if(isNaN(x)||isNaN(y)){
-break;
-}
-_55.points.push({x:x,y:y});
-if(p.length<6||p[3]!="l"){
-break;
-}
-for(var i=4;i<p.length;i+=2){
-x=parseInt(p[i]);
-y=parseInt(p[i+1]);
-if(isNaN(x)||isNaN(y)){
-break;
-}
-_55.points.push({x:x,y:y});
-}
-}while(false);
-return _55;
-},setShape:function(_5a,_5b){
-if(_5a&&_5a instanceof Array){
-this.shape=dojo.gfx.makeParameters(this.shape,{points:_5a});
-if(_5b&&this.shape.points.length){
-this.shape.points.push(this.shape.points[0]);
-}
-}else{
-this.shape=dojo.gfx.makeParameters(this.shape,_5a);
-}
-this.bbox=null;
-var _5c=[];
-var p=this.shape.points;
-if(p.length>0){
-_5c.push("m");
-_5c.push(p[0].x.toFixed());
-_5c.push(p[0].y.toFixed());
-if(p.length>1){
-_5c.push("l");
-for(var i=1;i<p.length;++i){
-_5c.push(p[i].x.toFixed());
-_5c.push(p[i].y.toFixed());
-}
-}
-}
-_5c.push("e");
-this.rawNode.path.v=_5c.join(" ");
-return this.setTransform(this.matrix);
-}});
-dojo.gfx.Polyline.nodeType="shape";
-dojo.declare("dojo.gfx.Image",dojo.gfx.shape.Image,{getEventSource:function(){
-return this.rawNode?this.rawNode.firstChild:null;
-},attachShape:function(_5f){
-var _60=dojo.lang.shallowCopy(dojo.gfx.defaultImage,true);
-_60.src=_5f.firstChild.src;
-return _60;
-},setShape:function(_61){
-var _62=this.shape=dojo.gfx.makeParameters(this.shape,_61);
-this.bbox=null;
-var _63=this.rawNode.firstChild;
-_63.src=_62.src;
-if(_62.width||_62.height){
-_63.style.width=_62.width;
-_63.style.height=_62.height;
-}
-return this.setTransform(this.matrix);
-},setStroke:function(){
-return this;
-},setFill:function(){
-return this;
-},attachStroke:function(_64){
-return null;
-},attachFill:function(_65){
-return null;
-},attachTransform:function(_66){
-var _67={};
-if(_66){
-var m=_66.filters["DXImageTransform.Microsoft.Matrix"];
-_67.xx=m.M11;
-_67.xy=m.M12;
-_67.yx=m.M21;
-_67.yy=m.M22;
-_67.dx=m.Dx;
-_67.dy=m.Dy;
-}
-return dojo.gfx.matrix.normalize(_67);
-},_applyTransform:function(){
-var _69=this._getRealMatrix();
-if(!_69){
-return this;
-}
-with(this.rawNode.filters["DXImageTransform.Microsoft.Matrix"]){
-M11=_69.xx;
-M12=_69.xy;
-M21=_69.yx;
-M22=_69.yy;
-Dx=_69.dx;
-Dy=_69.dy;
-}
-return this;
-}});
-dojo.gfx.Image.nodeType="image";
-dojo.gfx.path._calcArc=function(_6a){
-var _6b=Math.cos(_6a);
-var _6c=Math.sin(_6a);
-var p2={x:_6b+(4/3)*(1-_6b),y:_6c-(4/3)*_6b*(1-_6b)/_6c};
-return {s:{x:_6b,y:_6c},c1:p2,c2:{x:p2.x,y:-p2.y},e:{x:_6b,y:-_6c}};
-};
-dojo.declare("dojo.gfx.Path",dojo.gfx.path.Path,function(_6e){
-if(_6e){
-_6e.setAttribute("dojoGfxType","path");
-}
-this.vmlPath="";
-this.lastControl={};
-},{_updateWithSegment:function(_6f){
-var _70=dojo.lang.shallowCopy(this.last);
-dojo.gfx.Path.superclass._updateWithSegment.apply(this,arguments);
-var _71=this[this.renderers[_6f.action]](_6f,_70);
-if(typeof (this.vmlPath)=="string"){
-this.vmlPath+=_71.join("");
-}else{
-this.vmlPath=this.vmlPath.concat(_71);
-}
-if(typeof (this.vmlPath)=="string"){
-this.rawNode.path.v=this.vmlPath+" e";
-}
-},attachShape:function(_72){
-var _73=dojo.lang.shallowCopy(dojo.gfx.defaultPath,true);
-var p=_72.path.v.match(dojo.gfx.pathRegExp);
-var t=[],_76=false;
-for(var i=0;i<p.length;++p){
-var s=p[i];
-if(s in this._pathVmlToSvgMap){
-_76=false;
-t.push(this._pathVmlToSvgMap[s]);
-}else{
-if(!_76){
-var n=parseInt(s);
-if(isNaN(n)){
-_76=true;
-}else{
-t.push(n);
-}
-}
-}
-}
-if(t.length){
-_73.path=t.join(" ");
-}
-return _73;
-},setShape:function(_7a){
-this.vmlPath=[];
-this.lastControl={};
-dojo.gfx.Path.superclass.setShape.apply(this,arguments);
-this.vmlPath=this.vmlPath.join("");
-this.rawNode.path.v=this.vmlPath+" e";
-return this;
-},_pathVmlToSvgMap:{m:"M",l:"L",t:"m",r:"l",c:"C",v:"c",qb:"Q",x:"z",e:""},renderers:{M:"_moveToA",m:"_moveToR",L:"_lineToA",l:"_lineToR",H:"_hLineToA",h:"_hLineToR",V:"_vLineToA",v:"_vLineToR",C:"_curveToA",c:"_curveToR",S:"_smoothCurveToA",s:"_smoothCurveToR",Q:"_qCurveToA",q:"_qCurveToR",T:"_qSmoothCurveToA",t:"_qSmoothCurveToR",A:"_arcTo",a:"_arcTo",Z:"_closePath",z:"_closePath"},_addArgs:function(_7b,_7c,_7d,_7e){
-if(typeof (_7e)=="undefined"){
-_7e=_7c.length;
-}
-if(typeof (_7d)=="undefined"){
-_7d=0;
-}
-for(var i=_7d;i<_7e;++i){
-_7b.push(" ");
-_7b.push(_7c[i].toFixed());
-}
-},_addArgsAdjusted:function(_80,_81,_82,_83,_84){
-if(typeof (_84)=="undefined"){
-_84=_82.length;
-}
-if(typeof (_83)=="undefined"){
-_83=0;
-}
-for(var i=_83;i<_84;i+=2){
-_80.push(" ");
-_80.push((_81.x+_82[i]).toFixed());
-_80.push(" ");
-_80.push((_81.y+_82[i+1]).toFixed());
-}
-},_moveToA:function(_86){
-var p=[" m"];
-var n=_86.args;
-var l=n.length;
-if(l==2){
-this._addArgs(p,n);
-}else{
-this._addArgs(p,n,0,2);
-p.push(" l");
-this._addArgs(p,n,2);
-}
-this.lastControl={};
-return p;
-},_moveToR:function(_8a,_8b){
-var p=["x" in _8b?" t":" m"];
-var n=_8a.args;
-var l=n.length;
-if(l==2){
-this._addArgs(p,n);
-}else{
-this._addArgs(p,n,0,2);
-p.push(" r");
-this._addArgs(p,n,2);
-}
-this.lastControl={};
-return p;
-},_lineToA:function(_8f){
-var p=[" l"];
-this._addArgs(p,_8f.args);
-this.lastControl={};
-return p;
-},_lineToR:function(_91){
-var p=[" r"];
-this._addArgs(p,_91.args);
-this.lastControl={};
-return p;
-},_hLineToA:function(_93,_94){
-var p=[" l"];
-var n=_93.args;
-var l=n.length;
-var y=" "+_94.y.toFixed();
-for(var i=0;i<l;++i){
-p.push(" ");
-p.push(n[i].toFixed());
-p.push(y);
-}
-this.lastControl={};
-return p;
-},_hLineToR:function(_9a){
-var p=[" r"];
-var n=_9a.args;
-var l=n.length;
-for(var i=0;i<l;++i){
-p.push(" ");
-p.push(n[i].toFixed());
-p.push(" 0");
-}
-this.lastControl={};
-return p;
-},_vLineToA:function(_9f,_a0){
-var p=[" l"];
-var n=_9f.args;
-var l=n.length;
-var x=" "+_a0.x.toFixed();
-for(var i=0;i<l;++i){
-p.push(x);
-p.push(" ");
-p.push(n[i].toFixed());
-}
-this.lastControl={};
-return p;
-},_vLineToR:function(_a6){
-var p=[" r"];
-var n=_a6.args;
-var l=n.length;
-for(var i=0;i<l;++i){
-p.push(" 0 ");
-p.push(n[i].toFixed());
-}
-this.lastControl={};
-return p;
-},_curveToA:function(_ab){
-var p=[];
-var n=_ab.args;
-var l=n.length;
-for(var i=0;i<l;i+=6){
-p.push(" c");
-this._addArgs(p,n,i,i+6);
-}
-this.lastControl={x:n[l-4],y:n[l-3],type:"C"};
-return p;
-},_curveToR:function(_b0,_b1){
-var p=[];
-var n=_b0.args;
-var l=n.length;
-for(var i=0;i<l;i+=6){
-p.push(" v");
-this._addArgs(p,n,i,i+6);
-this.lastControl={x:_b1.x+n[i+2],y:_b1.y+n[i+3]};
-_b1.x+=n[i+4];
-_b1.y+=n[i+5];
-}
-this.lastControl.type="C";
-return p;
-},_smoothCurveToA:function(_b6,_b7){
-var p=[];
-var n=_b6.args;
-var l=n.length;
-for(var i=0;i<l;i+=4){
-p.push(" c");
-if(this.lastControl.type=="C"){
-this._addArgs(p,[2*_b7.x-this.lastControl.x,2*_b7.y-this.lastControl.y]);
-}else{
-this._addArgs(p,[_b7.x,_b7.y]);
-}
-this._addArgs(p,n,i,i+4);
-}
-this.lastControl={x:n[l-4],y:n[l-3],type:"C"};
-return p;
-},_smoothCurveToR:function(_bc,_bd){
-var p=[];
-var n=_bc.args;
-var l=n.length;
-for(var i=0;i<l;i+=4){
-p.push(" v");
-if(this.lastControl.type=="C"){
-this._addArgs(p,[_bd.x-this.lastControl.x,_bd.y-this.lastControl.y]);
-}else{
-this._addArgs(p,[0,0]);
-}
-this._addArgs(p,n,i,i+4);
-this.lastControl={x:_bd.x+n[i],y:_bd.y+n[i+1]};
-_bd.x+=n[i+2];
-_bd.y+=n[i+3];
-}
-this.lastControl.type="C";
-return p;
-},_qCurveToA:function(_c2){
-var p=[];
-var n=_c2.args;
-var l=n.length;
-for(var i=0;i<l;i+=4){
-p.push(" qb");
-this._addArgs(p,n,i,i+4);
-}
-this.lastControl={x:n[l-4],y:n[l-3],type:"Q"};
-return p;
-},_qCurveToR:function(_c7,_c8){
-var p=[];
-var n=_c7.args;
-var l=n.length;
-for(var i=0;i<l;i+=4){
-p.push(" qb");
-this._addArgsAdjusted(p,_c8,n,i,i+4);
-this.lastControl={x:_c8.x+n[i],y:_c8.y+n[i+1]};
-_c8.x+=n[i+2];
-_c8.y+=n[i+3];
-}
-this.lastControl.type="Q";
-return p;
-},_qSmoothCurveToA:function(_cd,_ce){
-var p=[];
-var n=_cd.args;
-var l=n.length;
-for(var i=0;i<l;i+=2){
-p.push(" qb");
-if(this.lastControl.type=="Q"){
-this._addArgs(p,[this.lastControl.x=2*_ce.x-this.lastControl.x,this.lastControl.y=2*_ce.y-this.lastControl.y]);
-}else{
-this._addArgs(p,[this.lastControl.x=_ce.x,this.lastControl.y=_ce.y]);
-}
-this._addArgs(p,n,i,i+2);
-}
-this.lastControl.type="Q";
-return p;
-},_qSmoothCurveToR:function(_d3,_d4){
-var p=[];
-var n=_d3.args;
-var l=n.length;
-for(var i=0;i<l;i+=2){
-p.push(" qb");
-if(this.lastControl.type=="Q"){
-this._addArgs(p,[this.lastControl.x=2*_d4.x-this.lastControl.x,this.lastControl.y=2*_d4.y-this.lastControl.y]);
-}else{
-this._addArgs(p,[this.lastControl.x=_d4.x,this.lastControl.y=_d4.y]);
-}
-this._addArgsAdjusted(p,_d4,n,i,i+2);
-}
-this.lastControl.type="Q";
-return p;
-},_PI4:Math.PI/4,_curvePI4:dojo.gfx.path._calcArc(Math.PI/8),_calcArcTo:function(_d9,_da,rx,ry,_dd,_de,cw,x,y){
-var m=dojo.gfx.matrix;
-var _e3=-dojo.math.degToRad(_dd);
-var rx2=rx*rx;
-var ry2=ry*ry;
-var pa=m.multiplyPoint(m.rotate(-_e3),{x:(_da.x-x)/2,y:(_da.y-y)/2});
-var _e7=pa.x*pa.x;
-var _e8=pa.y*pa.y;
-var c1=Math.sqrt((rx2*ry2-rx2*_e8-ry2*_e7)/(rx2*_e8+ry2*_e7));
-var ca={x:c1*rx*pa.y/ry,y:-c1*ry*pa.x/rx};
-if(_de==cw){
-ca={x:-ca.x,y:-ca.y};
-}
-var c=m.multiplyPoint([m.translate((_da.x+x)/2,(_da.y+y)/2),m.rotate(_e3)],ca);
-var _ec=Math.atan2(c.y-_da.y,_da.x-c.x)-_e3;
-var _ed=Math.atan2(c.y-y,x-c.x)-_e3;
-var _ee=cw?_ec-_ed:_ed-_ec;
-if(_ee<0){
-_ee+=this._2PI;
-}else{
-if(_ee>this._2PI){
-_ee=this._2PI;
-}
-}
-var _ef=m.normalize([m.translate(c.x,c.y),m.rotate(_e3),m.scale(rx,ry)]);
-var _f0=this._PI4/2;
-var _f1=this._curvePI4;
-var _f2=cw?-_f0:_f0;
-for(var _f3=_ee;_f3>0;_f3-=this._PI4){
-if(_f3<this._PI4){
-_f0=_f3/2;
-_f1=dojo.gfx.path._calcArc(_f0);
-_f2=cw?-_f0:_f0;
-}
-var c1,c2,e;
-var M=m.normalize([_ef,m.rotate(_ec+_f2)]);
-if(cw){
-c1=m.multiplyPoint(M,_f1.c2);
-c2=m.multiplyPoint(M,_f1.c1);
-e=m.multiplyPoint(M,_f1.s);
-}else{
-c1=m.multiplyPoint(M,_f1.c1);
-c2=m.multiplyPoint(M,_f1.c2);
-e=m.multiplyPoint(M,_f1.e);
-}
-_d9.push(" c");
-this._addArgs(_d9,[c1.x,c1.y,c2.x,c2.y,e.x,e.y]);
-_ec+=2*_f2;
-}
-},_arcTo:function(_f7,_f8){
-var p=[];
-var n=_f7.args;
-var l=n.length;
-var _fc=_f7.action=="a";
-for(var i=0;i<l;i+=7){
-var x1=n[i+5];
-var y1=n[i+6];
-if(_fc){
-x1+=_f8.x;
-y1+=_f8.y;
-}
-this._calcArcTo(p,_f8,n[i],n[i+1],n[i+2],n[i+3]?1:0,n[i+4]?1:0,x1,y1);
-_f8={x:x1,y:y1};
-}
-this.lastControl={};
-return p;
-},_closePath:function(){
-this.lastControl={};
-return ["x"];
-}});
-dojo.gfx.Path.nodeType="shape";
-dojo.gfx._creators={createPath:function(path){
-return this.createObject(dojo.gfx.Path,path,true);
-},createRect:function(rect){
-return this.createObject(dojo.gfx.Rect,rect);
-},createCircle:function(_102){
-return this.createObject(dojo.gfx.Circle,_102);
-},createEllipse:function(_103){
-return this.createObject(dojo.gfx.Ellipse,_103);
-},createLine:function(line){
-return this.createObject(dojo.gfx.Line,line,true);
-},createPolyline:function(_105){
-return this.createObject(dojo.gfx.Polyline,_105,true);
-},createImage:function(_106){
-if(!this.rawNode){
-return null;
-}
-var _107=new dojo.gfx.Image();
-var node=document.createElement("div");
-node.style.position="relative";
-node.style.width=this.rawNode.style.width;
-node.style.height=this.rawNode.style.height;
-node.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11=1, M12=0, M21=0, M22=1, Dx=0, Dy=0)";
-var img=document.createElement("img");
-node.appendChild(img);
-_107.setRawNode(node);
-this.rawNode.appendChild(node);
-_107.setShape(_106);
-this.add(_107);
-return _107;
-},createGroup:function(){
-return this.createObject(dojo.gfx.Group,null,true);
-},createObject:function(_10a,_10b,_10c){
-if(!this.rawNode){
-return null;
-}
-var _10d=new _10a();
-var node=document.createElement("v:"+_10a.nodeType);
-_10d.setRawNode(node);
-this.rawNode.appendChild(node);
-if(_10c){
-this._overrideSize(node);
-}
-_10d.setShape(_10b);
-this.add(_10d);
-return _10d;
-},_overrideSize:function(node){
-node.style.width=this.rawNode.style.width;
-node.style.height=this.rawNode.style.height;
-node.coordsize=parseFloat(node.style.width)+" "+parseFloat(node.style.height);
-}};
-dojo.lang.extend(dojo.gfx.Group,dojo.gfx._creators);
-dojo.lang.extend(dojo.gfx.Surface,dojo.gfx._creators);
-delete dojo.gfx._creators;
-dojo.gfx.attachNode=function(node){
-if(!node){
-return null;
-}
-var s=null;
-switch(node.tagName.toLowerCase()){
-case dojo.gfx.Rect.nodeType:
-s=new dojo.gfx.Rect();
-break;
-case dojo.gfx.Ellipse.nodeType:
-s=(node.style.width==node.style.height)?new dojo.gfx.Circle():new dojo.gfx.Ellipse();
-break;
-case dojo.gfx.Path.nodeType:
-switch(node.getAttribute("dojoGfxType")){
-case "line":
-s=new dojo.gfx.Line();
-break;
-case "polyline":
-s=new dojo.gfx.Polyline();
-break;
-case "path":
-s=new dojo.gfx.Path();
-break;
-}
-break;
-case dojo.gfx.Image.nodeType:
-s=new dojo.gfx.Image();
-break;
-default:
-dojo.debug("FATAL ERROR! tagName = "+node.tagName);
-}
-s.attach(node);
-return s;
-};
-dojo.lang.extend(dojo.gfx.Surface,{setDimensions:function(_112,_113){
-if(!this.rawNode){
-return this;
-}
-this.rawNode.style.width=_112;
-this.rawNode.style.height=_113;
-this.rawNode.coordsize=_112+" "+_113;
-return this;
-},getDimensions:function(){
-return this.rawNode?{width:this.rawNode.style.width,height:this.rawNode.style.height}:null;
-},add:function(_114){
-var _115=_114.getParent();
-if(this!=_115){
-this.rawNode.appendChild(_114.rawNode);
-if(_115){
-_115.remove(_114,true);
-}
-_114._setParent(this,null);
-}
-return this;
-},remove:function(_116,_117){
-if(this==_116.getParent()){
-if(this.rawNode==_116.rawNode.parentNode){
-this.rawNode.removeChild(_116.rawNode);
-}
-_116._setParent(null,null);
-}
-return this;
-}});
-dojo.gfx.createSurface=function(_118,_119,_11a){
-var s=new dojo.gfx.Surface();
-s.rawNode=document.createElement("v:group");
-s.rawNode.style.width=_119?_119:"100%";
-s.rawNode.style.height=_11a?_11a:"100%";
-s.rawNode.coordsize=(_119&&_11a)?(parseFloat(_119)+" "+parseFloat(_11a)):"100% 100%";
-s.rawNode.coordorigin="0 0";
-dojo.byId(_118).appendChild(s.rawNode);
-return s;
-};
-dojo.gfx.attachSurface=function(node){
-var s=new dojo.gfx.Surface();
-s.rawNode=node;
-return s;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/Colorspace.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/Colorspace.js
deleted file mode 100644
index 7c2f2c7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/Colorspace.js
+++ /dev/null
@@ -1,4 +0,0 @@
-dojo.provide("dojo.graphics.Colorspace");
-dojo.require("dojo.gfx.Colorspace");
-dojo.deprecated("dojo.graphics.Colorspace: use dojo.gfx.Colorspace instead.","0.5");
-dojo.graphics.Colorspace=dojo.gfx.Colorspace;
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/__package__.js
deleted file mode 100644
index f905e47..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/__package__.js
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dojo.graphics.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/color.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/color.js
deleted file mode 100644
index 5c48f97..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/color.js
+++ /dev/null
@@ -1,25 +0,0 @@
-dojo.provide("dojo.graphics.color");
-dojo.require("dojo.gfx.color");
-dojo.deprecated("dojo.graphics.color.Color is now dojo.gfx.color.Color.","0.5");
-dojo.graphics.color.Color=dojo.gfx.color.Color;
-dojo.graphics.color.named=dojo.gfx.color.named;
-dojo.graphics.color.blend=function(a,b,_3){
-dojo.deprecated("dojo.graphics.color.blend is now dojo.gfx.color.blend","0.5");
-return dojo.gfx.color.blend(a,b,_3);
-};
-dojo.graphics.color.blendHex=function(a,b,_6){
-dojo.deprecated("dojo.graphics.color.blendHex is now dojo.gfx.color.blendHex","0.5");
-return dojo.gfx.color.rgb2hex(dojo.gfx.color.blend(dojo.gfx.color.hex2rgb(a),dojo.gfx.color.hex2rgb(b),_6));
-};
-dojo.graphics.color.extractRGB=function(_7){
-dojo.deprecated("dojo.graphics.color.extractRGB is now dojo.gfx.color.extractRGB","0.5");
-return dojo.gfx.color.extractRGB(_7);
-};
-dojo.graphics.color.hex2rgb=function(_8){
-dojo.deprecated("dojo.graphics.color.hex2rgb is now dojo.gfx.color.hex2rgb","0.5");
-return dojo.gfx.color.hex2rgb(_8);
-};
-dojo.graphics.color.rgb2hex=function(r,g,b){
-dojo.deprecated("dojo.graphics.color.rgb2hex is now dojo.gfx.color.rgb2hex","0.5");
-return dojo.gfx.color.rgb2hex;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/color/hsl.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/color/hsl.js
deleted file mode 100644
index 57f2c70..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/color/hsl.js
+++ /dev/null
@@ -1,19 +0,0 @@
-dojo.provide("dojo.graphics.color.hsl");
-dojo.require("dojo.gfx.color.hsl");
-dojo.deprecated("dojo.graphics.color.hsl has been replaced with dojo.gfx.color.hsl","0.5");
-dojo.graphics.color.rgb2hsl=function(r,g,b){
-dojo.deprecated("dojo.graphics.color.rgb2hsl has been replaced with dojo.gfx.color.rgb2hsl","0.5");
-return dojo.gfx.color.rgb2hsl(r,g,b);
-};
-dojo.graphics.color.hsl2rgb=function(h,s,l){
-dojo.deprecated("dojo.graphics.color.hsl2rgb has been replaced with dojo.gfx.color.hsl2rgb","0.5");
-return dojo.gfx.color.hsl2rgb(h,s,l);
-};
-dojo.graphics.color.hsl2hex=function(h,s,l){
-dojo.deprecated("dojo.graphics.color.hsl2hex has been replaced with dojo.gfx.color.hsl2hex","0.5");
-return dojo.gfx.color.hsl2hex(h,s,l);
-};
-dojo.graphics.color.hex2hsl=function(_a){
-dojo.deprecated("dojo.graphics.color.hex2hsl has been replaced with dojo.gfx.color.hex2hsl","0.5");
-return dojo.gfx.color.hex2hsl(_a);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/color/hsv.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/color/hsv.js
deleted file mode 100644
index d0802ff..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/graphics/color/hsv.js
+++ /dev/null
@@ -1,11 +0,0 @@
-dojo.provide("dojo.graphics.color.hsv");
-dojo.require("dojo.gfx.color.hsv");
-dojo.deprecated("dojo.graphics.color.hsv has been replaced by dojo.gfx.color.hsv","0.5");
-dojo.graphics.color.rgb2hsv=function(r,g,b){
-dojo.deprecated("dojo.graphics.color.rgb2hsv has been replaced by dojo.gfx.color.rgb2hsv","0.5");
-return dojo.gfx.color.rgb2hsv(r,g,b);
-};
-dojo.graphics.color.hsv2rgb=function(h,s,v){
-dojo.deprecated("dojo.graphics.color.hsv2rgb has been replaced by dojo.gfx.color.hsv2rgb","0.5");
-return dojo.gfx.color.hsv2rgb(h,s,v);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_adobesvg.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_adobesvg.js
deleted file mode 100644
index 3f79e86..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_adobesvg.js
+++ /dev/null
@@ -1,367 +0,0 @@
-if(typeof window=="undefined"){
-dojo.raise("attempt to use adobe svg hostenv when no window object");
-}
-with(dojo.render){
-name=navigator.appName;
-ver=parseFloat(navigator.appVersion,10);
-switch(navigator.platform){
-case "MacOS":
-os.osx=true;
-break;
-case "Linux":
-os.linux=true;
-break;
-case "Windows":
-os.win=true;
-break;
-default:
-os.linux=true;
-break;
-}
-svg.capable=true;
-svg.support.builtin=true;
-svg.adobe=true;
-}
-dojo.hostenv.println=function(s){
-try{
-var ti=document.createElement("text");
-ti.setAttribute("x","50");
-var _3=25+15*document.getElementsByTagName("text").length;
-ti.setAttribute("y",_3);
-var tn=document.createTextNode(s);
-ti.appendChild(tn);
-document.documentElement.appendChild(ti);
-}
-catch(e){
-}
-};
-dojo.debug=function(){
-if(!djConfig.isDebug){
-return;
-}
-var _5=arguments;
-if(typeof dojo.hostenv.println!="function"){
-dojo.raise("attempt to call dojo.debug when there is no dojo.hostenv println implementation (yet?)");
-}
-var _6=dj_global["jum"];
-var s=_6?"":"DEBUG: ";
-for(var i=0;i<_5.length;++i){
-s+=_5[i];
-}
-if(_6){
-jum.debug(s);
-}else{
-dojo.hostenv.println(s);
-}
-};
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.hostenv.name_="adobesvg";
-dojo.hostenv.anonCtr=0;
-dojo.hostenv.anon={};
-dojo.hostenv.nameAnonFunc=function(_9,_a){
-var _b="_"+this.anonCtr++;
-var _c=(_a||this.anon);
-while(typeof _c[_b]!="undefined"){
-_b="_"+this.anonCtr++;
-}
-_c[_b]=_9;
-return _b;
-};
-dojo.hostenv.modulesLoadedFired=false;
-dojo.hostenv.modulesLoadedListeners=[];
-dojo.hostenv.getTextStack=[];
-dojo.hostenv.loadUriStack=[];
-dojo.hostenv.loadedUris=[];
-dojo.hostenv.modulesLoaded=function(){
-if(this.modulesLoadedFired){
-return;
-}
-if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){
-if(this.inFlightCount>0){
-dojo.debug("couldn't initialize, there are files still in flight");
-return;
-}
-this.modulesLoadedFired=true;
-var _d=this.modulesLoadedListeners;
-for(var x=0;x<_d.length;x++){
-_d[x]();
-}
-}
-};
-dojo.hostenv.getNewAnonFunc=function(){
-var _f="_"+this.anonCtr++;
-while(typeof this.anon[_f]!="undefined"){
-_f="_"+this.anonCtr++;
-}
-eval("dojo.nostenv.anon."+_f+" = function(){};");
-return [_f,this.anon[_f]];
-};
-dojo.hostenv.displayStack=function(){
-var oa=[];
-var _11=this.loadUriStack;
-for(var x=0;x<_11.length;x++){
-oa.unshift([_11[x][0],(typeof _11[x][2])]);
-}
-dojo.debug("<pre>"+oa.join("\n")+"</pre>");
-};
-dojo.hostenv.unwindUriStack=function(){
-var _13=this.loadUriStack;
-for(var x in dojo.hostenv.loadedUris){
-for(var y=_13.length-1;y>=0;y--){
-if(_13[y][0]==x){
-_13.splice(y,1);
-}
-}
-}
-var _16=_13.pop();
-if((!_16)&&(_13.length==0)){
-return;
-}
-for(var x=0;x<_13.length;x++){
-if((_13[x][0]==_16[0])&&(_13[x][2])){
-_16[2]==_13[x][2];
-}
-}
-var _17=_16;
-while(dojo.hostenv.loadedUris[_16[0]]){
-_17=_16;
-_16=_13.pop();
-}
-while(typeof _16[2]=="string"){
-try{
-dj_eval(_16[2]);
-_16[1](true);
-}
-catch(e){
-dojo.debug("we got an error when loading "+_16[0]);
-dojo.debug("error: "+e);
-}
-dojo.hostenv.loadedUris[_16[0]]=true;
-dojo.hostenv.loadedUris.push(_16[0]);
-_17=_16;
-_16=_13.pop();
-if((!_16)&&(_13.length==0)){
-break;
-}
-while(dojo.hostenv.loadedUris[_16[0]]){
-_17=_16;
-_16=_13.pop();
-}
-}
-if(_16){
-_13.push(_16);
-dojo.debug("### CHOKED ON: "+_16[0]);
-}
-};
-dojo.hostenv.loadUri=function(uri,cb){
-if(dojo.hostenv.loadedUris[uri]){
-return;
-}
-var _1a=this.loadUriStack;
-_1a.push([uri,cb,null]);
-var tcb=function(_1c){
-if(_1c.content){
-_1c=_1c.content;
-}
-var _1d=_1a.pop();
-if((!_1d)&&(_1a.length==0)){
-dojo.hostenv.modulesLoaded();
-return;
-}
-if(typeof _1c=="string"){
-_1a.push(_1d);
-for(var x=0;x<_1a.length;x++){
-if(_1a[x][0]==uri){
-_1a[x][2]=_1c;
-}
-}
-_1d=_1a.pop();
-}
-if(dojo.hostenv.loadedUris[_1d[0]]){
-dojo.hostenv.unwindUriStack();
-return;
-}
-_1a.push(_1d);
-if(_1d[0]!=uri){
-if(typeof _1d[2]=="string"){
-dojo.hostenv.unwindUriStack();
-}
-}else{
-if(!_1c){
-_1d[1](false);
-}else{
-var _1f=dojo.hostenv.getDepsForEval(_1d[2]);
-if(_1f.length>0){
-eval(_1f.join(";"));
-}else{
-dojo.hostenv.unwindUriStack();
-}
-}
-}
-};
-this.getText(uri,tcb,true);
-};
-dojo.hostenv.loadModule=function(_20,_21,_22){
-var _23=this.findModule(_20,0);
-if(_23){
-return _23;
-}
-if(typeof this.loading_modules_[_20]!=="undefined"){
-dojo.debug("recursive attempt to load module '"+_20+"'");
-}else{
-this.addedToLoadingCount.push(_20);
-}
-this.loading_modules_[_20]=1;
-var _24=_20.replace(/\./g,"/")+".js";
-var _25=_20.split(".");
-var _26=_20.split(".");
-if(_25[0]=="dojo"){
-_25[0]="src";
-}
-var _27=_25.pop();
-_25.push(_27);
-var _28=this;
-var pfn=this.pkgFileName;
-if(_27=="*"){
-_20=(_26.slice(0,-1)).join(".");
-var _23=this.findModule(_20,0);
-if(_23){
-_28.removedFromLoadingCount.push(_20);
-return _23;
-}
-var _2a=function(_2b){
-if(_2b){
-_23=_28.findModule(_20,false);
-if((!_23)&&(_25[_25.length-1]!=pfn)){
-dojo.raise("Module symbol '"+_20+"' is not defined after loading '"+_24+"'");
-}
-if(_23){
-_28.removedFromLoadingCount.push(_20);
-dojo.hostenv.modulesLoaded();
-return;
-}
-}
-_25.pop();
-_25.push(pfn);
-_24=_25.join("/")+".js";
-if(_24.charAt(0)=="/"){
-_24=_24.slice(1);
-}
-_28.loadPath(_24,((!_22)?_20:null),_2a);
-};
-_2a();
-}else{
-_24=_25.join("/")+".js";
-_20=_26.join(".");
-var _2a=function(_2c){
-if(_2c){
-_23=_28.findModule(_20,false);
-if((!_23)&&(_25[_25.length-1]!=pfn)){
-dojo.raise("Module symbol '"+_20+"' is not defined after loading '"+_24+"'");
-}
-if(_23){
-_28.removedFromLoadingCount.push(_20);
-dojo.hostenv.modulesLoaded();
-return;
-}
-}
-var _2d=(_25[_25.length-1]==pfn)?false:true;
-_25.pop();
-if(_2d){
-_25.push(pfn);
-}
-_24=_25.join("/")+".js";
-if(_24.charAt(0)=="/"){
-_24=_24.slice(1);
-}
-_28.loadPath(_24,((!_22)?_20:null),_2a);
-};
-this.loadPath(_24,((!_22)?_20:null),_2a);
-}
-return;
-};
-dojo.hostenv.async_cb=null;
-dojo.hostenv.unWindGetTextStack=function(){
-if(dojo.hostenv.inFlightCount>0){
-setTimeout("dojo.hostenv.unWindGetTextStack()",100);
-return;
-}
-dojo.hostenv.inFlightCount++;
-var _2e=dojo.hostenv.getTextStack.pop();
-if((!_2e)&&(dojo.hostenv.getTextStack.length==0)){
-dojo.hostenv.inFlightCount--;
-dojo.hostenv.async_cb=function(){
-};
-return;
-}
-dojo.hostenv.async_cb=_2e[1];
-window.getURL(_2e[0],function(_2f){
-dojo.hostenv.inFlightCount--;
-dojo.hostenv.async_cb(_2f.content);
-dojo.hostenv.unWindGetTextStack();
-});
-};
-dojo.hostenv.getText=function(uri,_31,_32){
-try{
-if(_31){
-dojo.hostenv.getTextStack.push([uri,_31,_32]);
-dojo.hostenv.unWindGetTextStack();
-}else{
-return dojo.raise("No synchronous XMLHTTP implementation available, for uri "+uri);
-}
-}
-catch(e){
-return dojo.raise("No XMLHTTP implementation available, for uri "+uri);
-}
-};
-dojo.hostenv.postText=function(uri,_34,_35,_36,_37,_38){
-var _39=null;
-var _3a=function(_3b){
-if(!_3b.success){
-dojo.raise("Request for uri '"+uri+"' resulted in "+_3b.status);
-}
-if(!_3b.content){
-if(!_36){
-dojo.raise("Request for uri '"+uri+"' resulted in no content");
-}
-return null;
-}
-_34(_3b.content);
-};
-try{
-if(_34){
-_39=window.postURL(uri,_35,_3a,mimeType,_38);
-}else{
-return dojo.raise("No synchronous XMLHTTP post implementation available, for uri "+uri);
-}
-}
-catch(e){
-return dojo.raise("No XMLHTTP post implementation available, for uri "+uri);
-}
-};
-function dj_last_script_src(){
-var _3c=window.document.getElementsByTagName("script");
-if(_3c.length<1){
-dojo.raise("No script elements in window.document, so can't figure out my script src");
-}
-var li=_3c.length-1;
-var _3e="http://www.w3.org/1999/xlink";
-var src=null;
-var _40=null;
-while(!src){
-_40=_3c.item(li);
-src=_40.getAttributeNS(_3e,"href");
-li--;
-if(li<0){
-break;
-}
-}
-if(!src){
-dojo.raise("Last script element (out of "+_3c.length+") has no src");
-}
-return src;
-}
-if(!dojo.hostenv["library_script_uri_"]){
-dojo.hostenv.library_script_uri_=dj_last_script_src();
-}
-dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_browser.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_browser.js
deleted file mode 100644
index efbe0ca..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_browser.js
+++ /dev/null
@@ -1,404 +0,0 @@
-if(typeof window!="undefined"){
-(function(){
-if(djConfig.allowQueryConfig){
-var _1=document.location.toString();
-var _2=_1.split("?",2);
-if(_2.length>1){
-var _3=_2[1];
-var _4=_3.split("&");
-for(var x in _4){
-var sp=_4[x].split("=");
-if((sp[0].length>9)&&(sp[0].substr(0,9)=="djConfig.")){
-var _7=sp[0].substr(9);
-try{
-djConfig[_7]=eval(sp[1]);
-}
-catch(e){
-djConfig[_7]=sp[1];
-}
-}
-}
-}
-}
-if(((djConfig["baseScriptUri"]=="")||(djConfig["baseRelativePath"]==""))&&(document&&document.getElementsByTagName)){
-var _8=document.getElementsByTagName("script");
-var _9=/(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-for(var i=0;i<_8.length;i++){
-var _b=_8[i].getAttribute("src");
-if(!_b){
-continue;
-}
-var m=_b.match(_9);
-if(m){
-var _d=_b.substring(0,m.index);
-if(_b.indexOf("bootstrap1")>-1){
-_d+="../";
-}
-if(!this["djConfig"]){
-djConfig={};
-}
-if(djConfig["baseScriptUri"]==""){
-djConfig["baseScriptUri"]=_d;
-}
-if(djConfig["baseRelativePath"]==""){
-djConfig["baseRelativePath"]=_d;
-}
-break;
-}
-}
-}
-var dr=dojo.render;
-var _f=dojo.render.html;
-var drs=dojo.render.svg;
-var dua=(_f.UA=navigator.userAgent);
-var dav=(_f.AV=navigator.appVersion);
-var t=true;
-var f=false;
-_f.capable=t;
-_f.support.builtin=t;
-dr.ver=parseFloat(_f.AV);
-dr.os.mac=dav.indexOf("Macintosh")>=0;
-dr.os.win=dav.indexOf("Windows")>=0;
-dr.os.linux=dav.indexOf("X11")>=0;
-_f.opera=dua.indexOf("Opera")>=0;
-_f.khtml=(dav.indexOf("Konqueror")>=0)||(dav.indexOf("Safari")>=0);
-_f.safari=dav.indexOf("Safari")>=0;
-var _15=dua.indexOf("Gecko");
-_f.mozilla=_f.moz=(_15>=0)&&(!_f.khtml);
-if(_f.mozilla){
-_f.geckoVersion=dua.substring(_15+6,_15+14);
-}
-_f.ie=(document.all)&&(!_f.opera);
-_f.ie50=_f.ie&&dav.indexOf("MSIE 5.0")>=0;
-_f.ie55=_f.ie&&dav.indexOf("MSIE 5.5")>=0;
-_f.ie60=_f.ie&&dav.indexOf("MSIE 6.0")>=0;
-_f.ie70=_f.ie&&dav.indexOf("MSIE 7.0")>=0;
-var cm=document["compatMode"];
-_f.quirks=(cm=="BackCompat")||(cm=="QuirksMode")||_f.ie55||_f.ie50;
-dojo.locale=dojo.locale||(_f.ie?navigator.userLanguage:navigator.language).toLowerCase();
-dr.vml.capable=_f.ie;
-drs.capable=f;
-drs.support.plugin=f;
-drs.support.builtin=f;
-var _17=window["document"];
-var tdi=_17["implementation"];
-if((tdi)&&(tdi["hasFeature"])&&(tdi.hasFeature("org.w3c.dom.svg","1.0"))){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-if(_f.safari){
-var tmp=dua.split("AppleWebKit/")[1];
-var ver=parseFloat(tmp.split(" ")[0]);
-if(ver>=420){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-}else{
-}
-})();
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.render.name=dojo.hostenv.name_="browser";
-dojo.hostenv.searchIds=[];
-dojo.hostenv._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
-dojo.hostenv.getXmlhttpObject=function(){
-var _1b=null;
-var _1c=null;
-try{
-_1b=new XMLHttpRequest();
-}
-catch(e){
-}
-if(!_1b){
-for(var i=0;i<3;++i){
-var _1e=dojo.hostenv._XMLHTTP_PROGIDS[i];
-try{
-_1b=new ActiveXObject(_1e);
-}
-catch(e){
-_1c=e;
-}
-if(_1b){
-dojo.hostenv._XMLHTTP_PROGIDS=[_1e];
-break;
-}
-}
-}
-if(!_1b){
-return dojo.raise("XMLHTTP not available",_1c);
-}
-return _1b;
-};
-dojo.hostenv._blockAsync=false;
-dojo.hostenv.getText=function(uri,_20,_21){
-if(!_20){
-this._blockAsync=true;
-}
-var _22=this.getXmlhttpObject();
-function isDocumentOk(_23){
-var _24=_23["status"];
-return Boolean((!_24)||((200<=_24)&&(300>_24))||(_24==304));
-}
-if(_20){
-var _25=this,_26=null,gbl=dojo.global();
-var xhr=dojo.evalObjPath("dojo.io.XMLHTTPTransport");
-_22.onreadystatechange=function(){
-if(_26){
-gbl.clearTimeout(_26);
-_26=null;
-}
-if(_25._blockAsync||(xhr&&xhr._blockAsync)){
-_26=gbl.setTimeout(function(){
-_22.onreadystatechange.apply(this);
-},10);
-}else{
-if(4==_22.readyState){
-if(isDocumentOk(_22)){
-_20(_22.responseText);
-}
-}
-}
-};
-}
-_22.open("GET",uri,_20?true:false);
-try{
-_22.send(null);
-if(_20){
-return null;
-}
-if(!isDocumentOk(_22)){
-var err=Error("Unable to load "+uri+" status:"+_22.status);
-err.status=_22.status;
-err.responseText=_22.responseText;
-throw err;
-}
-}
-catch(e){
-this._blockAsync=false;
-if((_21)&&(!_20)){
-return null;
-}else{
-throw e;
-}
-}
-this._blockAsync=false;
-return _22.responseText;
-};
-dojo.hostenv.defaultDebugContainerId="dojoDebug";
-dojo.hostenv._println_buffer=[];
-dojo.hostenv._println_safe=false;
-dojo.hostenv.println=function(_2a){
-if(!dojo.hostenv._println_safe){
-dojo.hostenv._println_buffer.push(_2a);
-}else{
-try{
-var _2b=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId);
-if(!_2b){
-_2b=dojo.body();
-}
-var div=document.createElement("div");
-div.appendChild(document.createTextNode(_2a));
-_2b.appendChild(div);
-}
-catch(e){
-try{
-document.write("<div>"+_2a+"</div>");
-}
-catch(e2){
-window.status=_2a;
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-dojo.hostenv._println_safe=true;
-while(dojo.hostenv._println_buffer.length>0){
-dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-}
-});
-function dj_addNodeEvtHdlr(_2d,_2e,fp){
-var _30=_2d["on"+_2e]||function(){
-};
-_2d["on"+_2e]=function(){
-fp.apply(_2d,arguments);
-_30.apply(_2d,arguments);
-};
-return true;
-}
-dojo.hostenv._djInitFired=false;
-function dj_load_init(e){
-dojo.hostenv._djInitFired=true;
-var _32=(e&&e.type)?e.type.toLowerCase():"load";
-if(arguments.callee.initialized||(_32!="domcontentloaded"&&_32!="load")){
-return;
-}
-arguments.callee.initialized=true;
-if(typeof (_timer)!="undefined"){
-clearInterval(_timer);
-delete _timer;
-}
-var _33=function(){
-if(dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-};
-if(dojo.hostenv.inFlightCount==0){
-_33();
-dojo.hostenv.modulesLoaded();
-}else{
-dojo.hostenv.modulesLoadedListeners.unshift(_33);
-}
-}
-if(document.addEventListener){
-if(dojo.render.html.opera||(dojo.render.html.moz&&(djConfig["enableMozDomContentLoaded"]===true))){
-document.addEventListener("DOMContentLoaded",dj_load_init,null);
-}
-window.addEventListener("load",dj_load_init,null);
-}
-if(dojo.render.html.ie&&dojo.render.os.win){
-document.attachEvent("onreadystatechange",function(e){
-if(document.readyState=="complete"){
-dj_load_init();
-}
-});
-}
-if(/(WebKit|khtml)/i.test(navigator.userAgent)){
-var _timer=setInterval(function(){
-if(/loaded|complete/.test(document.readyState)){
-dj_load_init();
-}
-},10);
-}
-if(dojo.render.html.ie){
-dj_addNodeEvtHdlr(window,"beforeunload",function(){
-dojo.hostenv._unloading=true;
-window.setTimeout(function(){
-dojo.hostenv._unloading=false;
-},0);
-});
-}
-dj_addNodeEvtHdlr(window,"unload",function(){
-dojo.hostenv.unloaded();
-if((!dojo.render.html.ie)||(dojo.render.html.ie&&dojo.hostenv._unloading)){
-dojo.hostenv.unloaded();
-}
-});
-dojo.hostenv.makeWidgets=function(){
-var _35=[];
-if(djConfig.searchIds&&djConfig.searchIds.length>0){
-_35=_35.concat(djConfig.searchIds);
-}
-if(dojo.hostenv.searchIds&&dojo.hostenv.searchIds.length>0){
-_35=_35.concat(dojo.hostenv.searchIds);
-}
-if((djConfig.parseWidgets)||(_35.length>0)){
-if(dojo.evalObjPath("dojo.widget.Parse")){
-var _36=new dojo.xml.Parse();
-if(_35.length>0){
-for(var x=0;x<_35.length;x++){
-var _38=document.getElementById(_35[x]);
-if(!_38){
-continue;
-}
-var _39=_36.parseElement(_38,null,true);
-dojo.widget.getParser().createComponents(_39);
-}
-}else{
-if(djConfig.parseWidgets){
-var _39=_36.parseElement(dojo.body(),null,true);
-dojo.widget.getParser().createComponents(_39);
-}
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-if(!dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-});
-try{
-if(dojo.render.html.ie){
-document.namespaces.add("v","urn:schemas-microsoft-com:vml");
-document.createStyleSheet().addRule("v\\:*","behavior:url(#default#VML)");
-}
-}
-catch(e){
-}
-dojo.hostenv.writeIncludes=function(){
-};
-if(!dj_undef("document",this)){
-dj_currentDocument=this.document;
-}
-dojo.doc=function(){
-return dj_currentDocument;
-};
-dojo.body=function(){
-return dojo.doc().body||dojo.doc().getElementsByTagName("body")[0];
-};
-dojo.byId=function(id,doc){
-if((id)&&((typeof id=="string")||(id instanceof String))){
-if(!doc){
-doc=dj_currentDocument;
-}
-var ele=doc.getElementById(id);
-if(ele&&(ele.id!=id)&&doc.all){
-ele=null;
-eles=doc.all[id];
-if(eles){
-if(eles.length){
-for(var i=0;i<eles.length;i++){
-if(eles[i].id==id){
-ele=eles[i];
-break;
-}
-}
-}else{
-ele=eles;
-}
-}
-}
-return ele;
-}
-return id;
-};
-dojo.setContext=function(_3e,_3f){
-dj_currentContext=_3e;
-dj_currentDocument=_3f;
-};
-dojo._fireCallback=function(_40,_41,_42){
-if((_41)&&((typeof _40=="string")||(_40 instanceof String))){
-_40=_41[_40];
-}
-return (_41?_40.apply(_41,_42||[]):_40());
-};
-dojo.withGlobal=function(_43,_44,_45,_46){
-var _47;
-var _48=dj_currentContext;
-var _49=dj_currentDocument;
-try{
-dojo.setContext(_43,_43.document);
-_47=dojo._fireCallback(_44,_45,_46);
-}
-finally{
-dojo.setContext(_48,_49);
-}
-return _47;
-};
-dojo.withDoc=function(_4a,_4b,_4c,_4d){
-var _4e;
-var _4f=dj_currentDocument;
-try{
-dj_currentDocument=_4a;
-_4e=dojo._fireCallback(_4b,_4c,_4d);
-}
-finally{
-dj_currentDocument=_4f;
-}
-return _4e;
-};
-}
-dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
-dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&!djConfig["useXDomain"],"dojo.browser_debug");
-dojo.requireIf(djConfig["debugAtAllCosts"]&&!window.widget&&djConfig["useXDomain"],"dojo.browser_debug_xd");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_dashboard.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_dashboard.js
deleted file mode 100644
index 0adc46d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_dashboard.js
+++ /dev/null
@@ -1,167 +0,0 @@
-dojo.render.name=dojo.hostenv.name_="dashboard";
-dojo.hostenv.println=function(_1){
-return alert(_1);
-};
-dojo.hostenv.getXmlhttpObject=function(_2){
-if(widget.system&&_2){
-if((_2.contentType&&_2.contentType.indexOf("text/")!=0)||(_2.headers&&_2.headers["content-type"]&&_2.headers["content-type"].indexOf("text/")!=0)){
-var _3=new dojo.hostenv.CurlRequest;
-_3._save=true;
-return _3;
-}else{
-if(_2.method&&_2.method.toUpperCase()=="HEAD"){
-return new dojo.hostenv.CurlRequest;
-}else{
-if(_2.headers&&_2.header.referer){
-return new dojo.hostenv.CurlRequest;
-}
-}
-}
-}
-return new XMLHttpRequest;
-};
-dojo.hostenv.CurlRequest=function(){
-this.onreadystatechange=null;
-this.readyState=0;
-this.responseText="";
-this.responseXML=null;
-this.status=0;
-this.statusText="";
-this._method="";
-this._url="";
-this._async=true;
-this._referrer="";
-this._headers=[];
-this._save=false;
-this._responseHeader="";
-this._responseHeaders={};
-this._fileName="";
-this._username="";
-this._password="";
-};
-dojo.hostenv.CurlRequest.prototype.open=function(_4,_5,_6,_7,_8){
-this._method=_4;
-this._url=_5;
-if(_6){
-this._async=_6;
-}
-if(_7){
-this._username=_7;
-}
-if(_8){
-this._password=_8;
-}
-};
-dojo.hostenv.CurlRequest.prototype.setRequestHeader=function(_9,_a){
-switch(_9){
-case "Referer":
-this._referrer=_a;
-break;
-case "content-type":
-break;
-default:
-this._headers.push(_9+"="+_a);
-break;
-}
-};
-dojo.hostenv.CurlRequest.prototype.getAllResponseHeaders=function(){
-return this._responseHeader;
-};
-dojo.hostenv.CurlRequest.prototype.getResponseHeader=function(_b){
-return this._responseHeaders[_b];
-};
-dojo.hostenv.CurlRequest.prototype.send=function(_c){
-this.readyState=1;
-if(this.onreadystatechange){
-this.onreadystatechange.call(this);
-}
-var _d={sS:""};
-if(this._referrer){
-_d.e=this._referrer;
-}
-if(this._headers.length){
-_d.H=this._headers.join("&");
-}
-if(this._username){
-if(this._password){
-_d.u=this._username+":"+this._password;
-}else{
-_d.u=this._username;
-}
-}
-if(_c){
-_d.d=this.content;
-if(this._method!="POST"){
-_d.G="";
-}
-}
-if(this._method=="HEAD"){
-_d.I="";
-}else{
-if(this._save){
-_d.I="";
-}else{
-_d.i="";
-}
-}
-var _e=widget.system(dojo.hostenv.CurlRequest._formatCall(_d,this._url),null);
-this.readyState=2;
-if(this.onreadystatechange){
-this.onreadystatechange.call(this);
-}
-if(_e.errorString){
-this.responseText=_e.errorString;
-this.status=0;
-}else{
-if(this._save){
-this._responseHeader=_e.outputString;
-}else{
-var _f=_e.outputString.replace(/\r/g,"").split("\n\n",2);
-this._responseHeader=_f[0];
-this.responseText=_f[1];
-}
-_f=this._responseHeader.split("\n");
-this.statusText=_f.shift();
-this.status=this.statusText.split(" ")[1];
-for(var i=0,_11;_11=_f[i];i++){
-var _12=_11.split(": ",2);
-this._responseHeaders[_12[0]]=_12[1];
-}
-if(this._save){
-widget.system("/bin/mkdir cache",null);
-this._fileName=this._url.split("/").pop().replace(/\W/g,"");
-this._fileName+="."+this._responseHeaders["Content-Type"].replace(/[\r\n]/g,"").split("/").pop();
-delete _d.I;
-_d.o="cache/"+this._fileName;
-_e=widget.system(dojo.hostenv.CurlRequest._formatCall(_d,this._url),null);
-if(!_e.errorString){
-this.responseText="cache/"+this._fileName;
-}
-}else{
-if(this._method=="HEAD"){
-this.responseText=this._responseHeader;
-}
-}
-}
-this.readyState=4;
-if(this.onreadystatechange){
-this.onreadystatechange.call(this);
-}
-};
-dojo.hostenv.CurlRequest._formatCall=function(_13,url){
-var _15=["/usr/bin/curl"];
-for(var key in _13){
-if(_13[key]!=""){
-_15.push("-"+key+" '"+_13[key].replace(/'/g,"'")+"'");
-}else{
-_15.push("-"+key);
-}
-}
-_15.push("'"+url.replace(/'/g,"'")+"'");
-return _15.join(" ");
-};
-dojo.hostenv.exit=function(){
-if(widget.system){
-widget.system("/bin/rm -rf cache/*",null);
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_jsc.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_jsc.js
deleted file mode 100644
index 06ef101..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_jsc.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
- * JScript .NET jsc
- *
- */
-
-dojo.hostenv.name_ = 'jsc';
-
-// Sanity check this is the right hostenv.
-// See the Rotor source code jscript/engine/globalobject.cs for what globals
-// are available.
-if((typeof ScriptEngineMajorVersion != 'function')||(ScriptEngineMajorVersion() < 7)){
-	dojo.raise("attempt to use JScript .NET host environment with inappropriate ScriptEngine"); 
-}
-
-// for more than you wanted to know about why this import is required even if
-// we fully qualify all symbols, see
-// http://groups.google.com/groups?th=f050c7aeefdcbde2&rnum=12
-import System;
-
-dojo.hostenv.getText = function(uri){
-	if(!System.IO.File.Exists(uri)){
-		// dojo.raise("No such file '" + uri + "'");
-		return 0;
-	}
-	var reader = new System.IO.StreamReader(uri);
-	var contents : String = reader.ReadToEnd();
-	return contents;
-}
-
-dojo.hostenv.loadUri = function(uri){
-	var contents = this.getText(uri);
-	if(!contents){
-		dojo.raise("got no back contents from uri '" + uri + "': " + contents);
-	}
-	// TODO: in JScript .NET, eval will not affect the symbol table of the current code?
-	var value = dj_eval(contents);
-	dojo.debug("jsc eval of contents returned: ", value);
-	return 1;
-
-	// for an example doing runtime code compilation, see:
-	// http://groups.google.com/groups?selm=eQ1aeciCBHA.1644%40tkmsftngp05&rnum=6
-	// Microsoft.JScript or System.CodeDom.Compiler ?
-	// var engine = new Microsoft.JScript.Vsa.VsaEngine()
-	// what about loading a js file vs. a dll?
-	// GetObject("script:" . uri);
-}
-
-/* The System.Environment object is useful:
-    print ("CommandLine='" + System.Environment.CommandLine + "' " +
-	   "program name='" + System.Environment.GetCommandLineArgs()[0] + "' " +
-	   "CurrentDirectory='" + System.Environment.CurrentDirectory + "' " +
-	   "StackTrace='" + System.Environment.StackTrace + "'");
-*/
-
-// same as System.Console.WriteLine
-// sigh; Rotor treats symbol "print" at parse time without actually putting it
-// in the builtin symbol table.
-// Note that the print symbol is not available if jsc is run with the "/print-"
-// option.
-dojo.hostenv.println = function(s){
-	print(s); // = print
-}
-
-dojo.hostenv.getLibraryScriptUri = function(){
-	return System.Environment.GetCommandLineArgs()[0];
-}
-
-dojo.requireIf((djConfig["isDebug"] || djConfig["debugAtAllCosts"]), "dojo.debug");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_rhino.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_rhino.js
deleted file mode 100644
index 0be10bc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_rhino.js
+++ /dev/null
@@ -1,150 +0,0 @@
-dojo.hostenv.println=function(_1){
-if(arguments.length>0){
-print(arguments[0]);
-for(var i=1;i<arguments.length;i++){
-var _3=false;
-for(var p in arguments[i]){
-_3=true;
-break;
-}
-if(_3){
-dojo.debugShallow(arguments[i]);
-}
-}
-}else{
-print(_1);
-}
-};
-dojo.locale=dojo.locale||java.util.Locale.getDefault().toString().replace("_","-").toLowerCase();
-dojo.render.name=dojo.hostenv.name_="rhino";
-dojo.hostenv.getVersion=function(){
-return version();
-};
-if(dj_undef("byId")){
-dojo.byId=function(id,_6){
-if(id&&(typeof id=="string"||id instanceof String)){
-if(!_6){
-_6=document;
-}
-return _6.getElementById(id);
-}
-return id;
-};
-}
-dojo.hostenv.loadUri=function(_7,cb){
-try{
-var _9=(new java.io.File(_7)).exists();
-if(!_9){
-try{
-var _a=(new java.net.URL(_7)).openStream();
-_a.close();
-}
-catch(e){
-return false;
-}
-}
-if(cb){
-var _b=(_9?readText:readUri)(_7,"UTF-8");
-cb(eval("("+_b+")"));
-}else{
-load(_7);
-}
-return true;
-}
-catch(e){
-dojo.debug("rhino load('"+_7+"') failed. Exception: "+e);
-return false;
-}
-};
-dojo.hostenv.exit=function(_c){
-quit(_c);
-};
-function dj_rhino_current_script_via_java(_d){
-var _e=Packages.org.mozilla.javascript.Context.getCurrentContext().getOptimizationLevel();
-var _f=new java.io.CharArrayWriter();
-var pw=new java.io.PrintWriter(_f);
-var exc=new java.lang.Exception();
-var s=_f.toString();
-var _13=s.match(/[^\(]*\.js\)/gi);
-if(!_13){
-throw Error("cannot parse printStackTrace output: "+s);
-}
-var _14=((typeof _d!="undefined")&&(_d))?_13[_d+1]:_13[_13.length-1];
-var _14=_13[3];
-if(!_14){
-_14=_13[1];
-}
-if(!_14){
-throw Error("could not find js file in printStackTrace output: "+s);
-}
-return _14;
-}
-function readText(_15,_16){
-_16=_16||"utf-8";
-var jf=new java.io.File(_15);
-var is=new java.io.FileInputStream(jf);
-return dj_readInputStream(is,_16);
-}
-function readUri(uri,_1a){
-var _1b=(new java.net.URL(uri)).openConnection();
-_1a=_1a||_1b.getContentEncoding()||"utf-8";
-var is=_1b.getInputStream();
-return dj_readInputStream(is,_1a);
-}
-function dj_readInputStream(is,_1e){
-var _1f=new java.io.BufferedReader(new java.io.InputStreamReader(is,_1e));
-try{
-var sb=new java.lang.StringBuffer();
-var _21="";
-while((_21=_1f.readLine())!==null){
-sb.append(_21);
-sb.append(java.lang.System.getProperty("line.separator"));
-}
-return sb.toString();
-}
-finally{
-_1f.close();
-}
-}
-if(!djConfig.libraryScriptUri.length){
-try{
-djConfig.libraryScriptUri=dj_rhino_current_script_via_java(1);
-}
-catch(e){
-if(djConfig["isDebug"]){
-print("\n");
-print("we have no idea where Dojo is located.");
-print("Please try loading rhino in a non-interpreted mode or set a");
-print("\n\tdjConfig.libraryScriptUri\n");
-print("Setting the dojo path to './'");
-print("This is probably wrong!");
-print("\n");
-print("Dojo will try to load anyway");
-}
-djConfig.libraryScriptUri="./";
-}
-}
-dojo.doc=function(){
-return document;
-};
-dojo.body=function(){
-return document.body;
-};
-function setTimeout(_22,_23){
-var def={sleepTime:_23,hasSlept:false,run:function(){
-if(!this.hasSlept){
-this.hasSlept=true;
-java.lang.Thread.currentThread().sleep(this.sleepTime);
-}
-try{
-_22();
-}
-catch(e){
-dojo.debug("Error running setTimeout thread:"+e);
-}
-}};
-var _25=new java.lang.Runnable(def);
-var _26=new java.lang.Thread(_25);
-_26.start();
-}
-dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_spidermonkey.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_spidermonkey.js
deleted file mode 100644
index a6823e0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_spidermonkey.js
+++ /dev/null
@@ -1,37 +0,0 @@
-dojo.hostenv.name_="spidermonkey";
-dojo.hostenv.println=print;
-dojo.hostenv.exit=function(_1){
-quit(_1);
-};
-dojo.hostenv.getVersion=function(){
-return version();
-};
-if(typeof line2pc=="undefined"){
-dojo.raise("attempt to use SpiderMonkey host environment when no 'line2pc' global");
-}
-function dj_spidermonkey_current_file(_2){
-var s="";
-try{
-throw Error("whatever");
-}
-catch(e){
-s=e.stack;
-}
-var _4=s.match(/[^@]*\.js/gi);
-if(!_4){
-dojo.raise("could not parse stack string: '"+s+"'");
-}
-var _5=(typeof _2!="undefined"&&_2)?_4[_2+1]:_4[_4.length-1];
-if(!_5){
-dojo.raise("could not find file name in stack string '"+s+"'");
-}
-return _5;
-}
-if(!dojo.hostenv.library_script_uri_){
-dojo.hostenv.library_script_uri_=dj_spidermonkey_current_file(0);
-}
-dojo.hostenv.loadUri=function(_6){
-var ok=load(_6);
-return 1;
-};
-dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_svg.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_svg.js
deleted file mode 100644
index 8d99852..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_svg.js
+++ /dev/null
@@ -1,234 +0,0 @@
-if(typeof window=="undefined"){
-dojo.raise("attempt to use adobe svg hostenv when no window object");
-}
-dojo.debug=function(){
-if(!djConfig.isDebug){
-return;
-}
-var _1=arguments;
-var _2=dj_global["jum"];
-var s=_2?"":"DEBUG: ";
-for(var i=0;i<_1.length;++i){
-s+=_1[i];
-}
-if(_2){
-jum.debug(s);
-}else{
-dojo.hostenv.println(s);
-}
-};
-dojo.render.name=navigator.appName;
-dojo.render.ver=parseFloat(navigator.appVersion,10);
-switch(navigator.platform){
-case "MacOS":
-dojo.render.os.osx=true;
-break;
-case "Linux":
-dojo.render.os.linux=true;
-break;
-case "Windows":
-dojo.render.os.win=true;
-break;
-default:
-dojo.render.os.linux=true;
-break;
-}
-dojo.render.svg.capable=true;
-dojo.render.svg.support.builtin=true;
-dojo.render.svg.moz=((navigator.userAgent.indexOf("Gecko")>=0)&&(!((navigator.appVersion.indexOf("Konqueror")>=0)||(navigator.appVersion.indexOf("Safari")>=0))));
-dojo.render.svg.adobe=(window.parseXML!=null);
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.hostenv.println=function(s){
-try{
-var ti=document.createElement("text");
-ti.setAttribute("x","50");
-ti.setAttribute("y",(25+15*document.getElementsByTagName("text").length));
-ti.appendChild(document.createTextNode(s));
-document.documentElement.appendChild(ti);
-}
-catch(e){
-}
-};
-dojo.hostenv.name_="svg";
-dojo.hostenv.setModulePrefix=function(_7,_8){
-};
-dojo.hostenv.getModulePrefix=function(_9){
-};
-dojo.hostenv.getTextStack=[];
-dojo.hostenv.loadUriStack=[];
-dojo.hostenv.loadedUris=[];
-dojo.hostenv.modules_={};
-dojo.hostenv.modulesLoadedFired=false;
-dojo.hostenv.modulesLoadedListeners=[];
-dojo.hostenv.getText=function(_a,cb,_c){
-if(!cb){
-var cb=function(_d){
-window.alert(_d);
-};
-}
-if(!_c){
-window.getUrl(_a,cb);
-}else{
-window.postUrl(_a,_c,cb);
-}
-};
-dojo.hostenv.getLibaryScriptUri=function(){
-};
-dojo.hostenv.loadUri=function(_e){
-};
-dojo.hostenv.loadUriAndCheck=function(_f,_10){
-};
-dojo.hostenv.loadModule=function(_11){
-var a=_11.split(".");
-var _13=window;
-var s=[];
-for(var i=0;i<a.length;i++){
-if(a[i]=="*"){
-continue;
-}
-s.push(a[i]);
-if(!_13[a[i]]){
-dojo.raise("dojo.require('"+_11+"'): module does not exist.");
-}else{
-_13=_13[a[i]];
-}
-}
-return;
-};
-dojo.hostenv.startPackage=function(_16){
-var a=_16.split(".");
-var _18=window;
-var s=[];
-for(var i=0;i<a.length;i++){
-if(a[i]=="*"){
-continue;
-}
-s.push(a[i]);
-if(!_18[a[i]]){
-_18[a[i]]={};
-}
-_18=_18[a[i]];
-}
-return;
-};
-if(window.parseXML){
-window.XMLSerialzer=function(){
-function nodeToString(n,a){
-function fixText(s){
-return String(s).replace(/\&/g,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;");
-}
-function fixAttribute(s){
-return fixText(s).replace(/\"/g,"&quot;");
-}
-switch(n.nodeType){
-case 1:
-var _1f=n.nodeName;
-a.push("<"+_1f);
-for(var i=0;i<n.attributes.length;i++){
-if(n.attributes.item(i).specified){
-a.push(" "+n.attributes.item(i).nodeName.toLowerCase()+"=\""+fixAttribute(n.attributes.item(i).nodeValue)+"\"");
-}
-}
-if(n.canHaveChildren||n.hasChildNodes()){
-a.push(">");
-for(var i=0;i<n.childNodes.length;i++){
-nodeToString(n.childNodes.item(i),a);
-}
-a.push("</"+_1f+">\n");
-}else{
-a.push(" />\n");
-}
-break;
-case 3:
-a.push(fixText(n.nodeValue));
-break;
-case 4:
-a.push("<![CDA"+"TA[\n"+n.nodeValue+"\n]"+"]>");
-break;
-case 7:
-a.push(n.nodeValue);
-if(/(^<\?xml)|(^<\!DOCTYPE)/.test(n.nodeValue)){
-a.push("\n");
-}
-break;
-case 8:
-a.push("<!-- "+n.nodeValue+" -->\n");
-break;
-case 9:
-case 11:
-for(var i=0;i<n.childNodes.length;i++){
-nodeToString(n.childNodes.item(i),a);
-}
-break;
-default:
-a.push("<!--\nNot Supported:\n\n"+"nodeType: "+n.nodeType+"\nnodeName: "+n.nodeName+"\n-->");
-}
-}
-this.serializeToString=function(_21){
-var a=[];
-nodeToString(_21,a);
-return a.join("");
-};
-};
-window.DOMParser=function(){
-this.parseFromString=function(s){
-return parseXML(s,window.document);
-};
-};
-window.XMLHttpRequest=function(){
-var uri=null;
-var _25="POST";
-var _26=true;
-var cb=function(d){
-this.responseText=d.content;
-try{
-this.responseXML=parseXML(this.responseText,window.document);
-}
-catch(e){
-}
-this.status="200";
-this.statusText="OK";
-if(!d.success){
-this.status="500";
-this.statusText="Internal Server Error";
-}
-this.onload();
-this.onreadystatechange();
-};
-this.onload=function(){
-};
-this.readyState=4;
-this.onreadystatechange=function(){
-};
-this.status=0;
-this.statusText="";
-this.responseBody=null;
-this.responseStream=null;
-this.responseXML=null;
-this.responseText=null;
-this.abort=function(){
-return;
-};
-this.getAllResponseHeaders=function(){
-return [];
-};
-this.getResponseHeader=function(n){
-return null;
-};
-this.setRequestHeader=function(nm,val){
-};
-this.open=function(_2c,url,_2e){
-_25=_2c;
-uri=url;
-};
-this.send=function(_2f){
-var d=_2f||null;
-if(_25=="GET"){
-getURL(uri,cb);
-}else{
-postURL(uri,_2f,cb);
-}
-};
-};
-}
-dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_wsh.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_wsh.js
deleted file mode 100644
index 65d1501..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/hostenv_wsh.js
+++ /dev/null
@@ -1,22 +0,0 @@
-dojo.hostenv.name_="wsh";
-if(typeof WScript=="undefined"){
-dojo.raise("attempt to use WSH host environment when no WScript global");
-}
-dojo.hostenv.println=WScript.Echo;
-dojo.hostenv.getCurrentScriptUri=function(){
-return WScript.ScriptFullName();
-};
-dojo.hostenv.getText=function(_1){
-var _2=new ActiveXObject("Scripting.FileSystemObject");
-var _3=_2.OpenTextFile(_1,1);
-if(!_3){
-return null;
-}
-var _4=_3.ReadAll();
-_3.Close();
-return _4;
-};
-dojo.hostenv.exit=function(_5){
-WScript.Quit(_5);
-};
-dojo.requireIf((djConfig["isDebug"]||djConfig["debugAtAllCosts"]),"dojo.debug");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html.js
deleted file mode 100644
index f4c2536..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html.js
+++ /dev/null
@@ -1,3 +0,0 @@
-dojo.provide("dojo.html");
-dojo.require("dojo.html.*");
-dojo.deprecated("dojo.html","replaced by dojo.html.*","0.5");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/__package__.js
deleted file mode 100644
index 3daa294..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.html.common","dojo.html.style"]});
-dojo.provide("dojo.html.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/color.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/color.js
deleted file mode 100644
index 095cbf5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/color.js
+++ /dev/null
@@ -1,25 +0,0 @@
-dojo.require("dojo.html.style");
-dojo.provide("dojo.html.color");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.lang.common");
-dojo.html.getBackgroundColor=function(_1){
-_1=dojo.byId(_1);
-var _2;
-do{
-_2=dojo.html.getStyle(_1,"background-color");
-if(_2.toLowerCase()=="rgba(0, 0, 0, 0)"){
-_2="transparent";
-}
-if(_1==document.getElementsByTagName("body")[0]){
-_1=null;
-break;
-}
-_1=_1.parentNode;
-}while(_1&&dojo.lang.inArray(["transparent",""],_2));
-if(_2=="transparent"){
-_2=[255,255,255,0];
-}else{
-_2=dojo.gfx.color.extractRGB(_2);
-}
-return _2;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/common.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/common.js
deleted file mode 100644
index d910247..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/common.js
+++ /dev/null
@@ -1,169 +0,0 @@
-dojo.provide("dojo.html.common");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.dom");
-dojo.lang.mixin(dojo.html,dojo.dom);
-dojo.html.body=function(){
-dojo.deprecated("dojo.html.body() moved to dojo.body()","0.5");
-return dojo.body();
-};
-dojo.html.getEventTarget=function(_1){
-if(!_1){
-_1=dojo.global().event||{};
-}
-var t=(_1.srcElement?_1.srcElement:(_1.target?_1.target:null));
-while((t)&&(t.nodeType!=1)){
-t=t.parentNode;
-}
-return t;
-};
-dojo.html.getViewport=function(){
-var _3=dojo.global();
-var _4=dojo.doc();
-var w=0;
-var h=0;
-if(dojo.render.html.mozilla){
-w=_4.documentElement.clientWidth;
-h=_3.innerHeight;
-}else{
-if(!dojo.render.html.opera&&_3.innerWidth){
-w=_3.innerWidth;
-h=_3.innerHeight;
-}else{
-if(!dojo.render.html.opera&&dojo.exists(_4,"documentElement.clientWidth")){
-var w2=_4.documentElement.clientWidth;
-if(!w||w2&&w2<w){
-w=w2;
-}
-h=_4.documentElement.clientHeight;
-}else{
-if(dojo.body().clientWidth){
-w=dojo.body().clientWidth;
-h=dojo.body().clientHeight;
-}
-}
-}
-}
-return {width:w,height:h};
-};
-dojo.html.getScroll=function(){
-var _8=dojo.global();
-var _9=dojo.doc();
-var _a=_8.pageYOffset||_9.documentElement.scrollTop||dojo.body().scrollTop||0;
-var _b=_8.pageXOffset||_9.documentElement.scrollLeft||dojo.body().scrollLeft||0;
-return {top:_a,left:_b,offset:{x:_b,y:_a}};
-};
-dojo.html.getParentByType=function(_c,_d){
-var _e=dojo.doc();
-var _f=dojo.byId(_c);
-_d=_d.toLowerCase();
-while((_f)&&(_f.nodeName.toLowerCase()!=_d)){
-if(_f==(_e["body"]||_e["documentElement"])){
-return null;
-}
-_f=_f.parentNode;
-}
-return _f;
-};
-dojo.html.getAttribute=function(_10,_11){
-_10=dojo.byId(_10);
-if((!_10)||(!_10.getAttribute)){
-return null;
-}
-var ta=typeof _11=="string"?_11:new String(_11);
-var v=_10.getAttribute(ta.toUpperCase());
-if((v)&&(typeof v=="string")&&(v!="")){
-return v;
-}
-if(v&&v.value){
-return v.value;
-}
-if((_10.getAttributeNode)&&(_10.getAttributeNode(ta))){
-return (_10.getAttributeNode(ta)).value;
-}else{
-if(_10.getAttribute(ta)){
-return _10.getAttribute(ta);
-}else{
-if(_10.getAttribute(ta.toLowerCase())){
-return _10.getAttribute(ta.toLowerCase());
-}
-}
-}
-return null;
-};
-dojo.html.hasAttribute=function(_14,_15){
-return dojo.html.getAttribute(dojo.byId(_14),_15)?true:false;
-};
-dojo.html.getCursorPosition=function(e){
-e=e||dojo.global().event;
-var _17={x:0,y:0};
-if(e.pageX||e.pageY){
-_17.x=e.pageX;
-_17.y=e.pageY;
-}else{
-var de=dojo.doc().documentElement;
-var db=dojo.body();
-_17.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_17.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
-}
-return _17;
-};
-dojo.html.isTag=function(_1a){
-_1a=dojo.byId(_1a);
-if(_1a&&_1a.tagName){
-for(var i=1;i<arguments.length;i++){
-if(_1a.tagName.toLowerCase()==String(arguments[i]).toLowerCase()){
-return String(arguments[i]).toLowerCase();
-}
-}
-}
-return "";
-};
-if(dojo.render.html.ie&&!dojo.render.html.ie70){
-if(window.location.href.substr(0,6).toLowerCase()!="https:"){
-(function(){
-var _1c=dojo.doc().createElement("script");
-_1c.src="javascript:'dojo.html.createExternalElement=function(doc, tag){ return doc.createElement(tag); }'";
-dojo.doc().getElementsByTagName("head")[0].appendChild(_1c);
-})();
-}
-}else{
-dojo.html.createExternalElement=function(doc,tag){
-return doc.createElement(tag);
-};
-}
-dojo.html._callDeprecated=function(_1f,_20,_21,_22,_23){
-dojo.deprecated("dojo.html."+_1f,"replaced by dojo.html."+_20+"("+(_22?"node, {"+_22+": "+_22+"}":"")+")"+(_23?"."+_23:""),"0.5");
-var _24=[];
-if(_22){
-var _25={};
-_25[_22]=_21[1];
-_24.push(_21[0]);
-_24.push(_25);
-}else{
-_24=_21;
-}
-var ret=dojo.html[_20].apply(dojo.html,_21);
-if(_23){
-return ret[_23];
-}else{
-return ret;
-}
-};
-dojo.html.getViewportWidth=function(){
-return dojo.html._callDeprecated("getViewportWidth","getViewport",arguments,null,"width");
-};
-dojo.html.getViewportHeight=function(){
-return dojo.html._callDeprecated("getViewportHeight","getViewport",arguments,null,"height");
-};
-dojo.html.getViewportSize=function(){
-return dojo.html._callDeprecated("getViewportSize","getViewport",arguments);
-};
-dojo.html.getScrollTop=function(){
-return dojo.html._callDeprecated("getScrollTop","getScroll",arguments,null,"top");
-};
-dojo.html.getScrollLeft=function(){
-return dojo.html._callDeprecated("getScrollLeft","getScroll",arguments,null,"left");
-};
-dojo.html.getScrollOffset=function(){
-return dojo.html._callDeprecated("getScrollOffset","getScroll",arguments,null,"offset");
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/display.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/display.js
deleted file mode 100644
index 0289304..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/display.js
+++ /dev/null
@@ -1,134 +0,0 @@
-dojo.provide("dojo.html.display");
-dojo.require("dojo.html.style");
-dojo.html._toggle=function(_1,_2,_3){
-_1=dojo.byId(_1);
-_3(_1,!_2(_1));
-return _2(_1);
-};
-dojo.html.show=function(_4){
-_4=dojo.byId(_4);
-if(dojo.html.getStyleProperty(_4,"display")=="none"){
-dojo.html.setStyle(_4,"display",(_4.dojoDisplayCache||""));
-_4.dojoDisplayCache=undefined;
-}
-};
-dojo.html.hide=function(_5){
-_5=dojo.byId(_5);
-if(typeof _5["dojoDisplayCache"]=="undefined"){
-var d=dojo.html.getStyleProperty(_5,"display");
-if(d!="none"){
-_5.dojoDisplayCache=d;
-}
-}
-dojo.html.setStyle(_5,"display","none");
-};
-dojo.html.setShowing=function(_7,_8){
-dojo.html[(_8?"show":"hide")](_7);
-};
-dojo.html.isShowing=function(_9){
-return (dojo.html.getStyleProperty(_9,"display")!="none");
-};
-dojo.html.toggleShowing=function(_a){
-return dojo.html._toggle(_a,dojo.html.isShowing,dojo.html.setShowing);
-};
-dojo.html.displayMap={tr:"",td:"",th:"",img:"inline",span:"inline",input:"inline",button:"inline"};
-dojo.html.suggestDisplayByTagName=function(_b){
-_b=dojo.byId(_b);
-if(_b&&_b.tagName){
-var _c=_b.tagName.toLowerCase();
-return (_c in dojo.html.displayMap?dojo.html.displayMap[_c]:"block");
-}
-};
-dojo.html.setDisplay=function(_d,_e){
-dojo.html.setStyle(_d,"display",((_e instanceof String||typeof _e=="string")?_e:(_e?dojo.html.suggestDisplayByTagName(_d):"none")));
-};
-dojo.html.isDisplayed=function(_f){
-return (dojo.html.getComputedStyle(_f,"display")!="none");
-};
-dojo.html.toggleDisplay=function(_10){
-return dojo.html._toggle(_10,dojo.html.isDisplayed,dojo.html.setDisplay);
-};
-dojo.html.setVisibility=function(_11,_12){
-dojo.html.setStyle(_11,"visibility",((_12 instanceof String||typeof _12=="string")?_12:(_12?"visible":"hidden")));
-};
-dojo.html.isVisible=function(_13){
-return (dojo.html.getComputedStyle(_13,"visibility")!="hidden");
-};
-dojo.html.toggleVisibility=function(_14){
-return dojo.html._toggle(_14,dojo.html.isVisible,dojo.html.setVisibility);
-};
-dojo.html.setOpacity=function(_15,_16,_17){
-_15=dojo.byId(_15);
-var h=dojo.render.html;
-if(!_17){
-if(_16>=1){
-if(h.ie){
-dojo.html.clearOpacity(_15);
-return;
-}else{
-_16=0.999999;
-}
-}else{
-if(_16<0){
-_16=0;
-}
-}
-}
-if(h.ie){
-if(_15.nodeName.toLowerCase()=="tr"){
-var tds=_15.getElementsByTagName("td");
-for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_16*100+")";
-}
-}
-_15.style.filter="Alpha(Opacity="+_16*100+")";
-}else{
-if(h.moz){
-_15.style.opacity=_16;
-_15.style.MozOpacity=_16;
-}else{
-if(h.safari){
-_15.style.opacity=_16;
-_15.style.KhtmlOpacity=_16;
-}else{
-_15.style.opacity=_16;
-}
-}
-}
-};
-dojo.html.clearOpacity=function(_1b){
-_1b=dojo.byId(_1b);
-var ns=_1b.style;
-var h=dojo.render.html;
-if(h.ie){
-try{
-if(_1b.filters&&_1b.filters.alpha){
-ns.filter="";
-}
-}
-catch(e){
-}
-}else{
-if(h.moz){
-ns.opacity=1;
-ns.MozOpacity=1;
-}else{
-if(h.safari){
-ns.opacity=1;
-ns.KhtmlOpacity=1;
-}else{
-ns.opacity=1;
-}
-}
-}
-};
-dojo.html.getOpacity=function(_1e){
-_1e=dojo.byId(_1e);
-var h=dojo.render.html;
-if(h.ie){
-var _20=(_1e.filters&&_1e.filters.alpha&&typeof _1e.filters.alpha.opacity=="number"?_1e.filters.alpha.opacity:100)/100;
-}else{
-var _20=_1e.style.opacity||_1e.style.MozOpacity||_1e.style.KhtmlOpacity||1;
-}
-return _20>=0.999999?1:Number(_20);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/iframe.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/iframe.js
deleted file mode 100644
index 2c08d72..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/iframe.js
+++ /dev/null
@@ -1,71 +0,0 @@
-dojo.provide("dojo.html.iframe");
-dojo.require("dojo.html.util");
-dojo.html.iframeContentWindow=function(_1){
-var _2=dojo.html.getDocumentWindow(dojo.html.iframeContentDocument(_1))||dojo.html.iframeContentDocument(_1).__parent__||(_1.name&&document.frames[_1.name])||null;
-return _2;
-};
-dojo.html.iframeContentDocument=function(_3){
-var _4=_3.contentDocument||((_3.contentWindow)&&(_3.contentWindow.document))||((_3.name)&&(document.frames[_3.name])&&(document.frames[_3.name].document))||null;
-return _4;
-};
-dojo.html.BackgroundIframe=function(_5){
-if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _6="<iframe src='javascript:false'"+" style='position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;"+"z-index: -1; filter:Alpha(Opacity=\"0\");' "+">";
-this.iframe=dojo.doc().createElement(_6);
-this.iframe.tabIndex=-1;
-if(_5){
-_5.appendChild(this.iframe);
-this.domNode=_5;
-}else{
-dojo.body().appendChild(this.iframe);
-this.iframe.style.display="none";
-}
-}
-};
-dojo.lang.extend(dojo.html.BackgroundIframe,{iframe:null,onResized:function(){
-if(this.iframe&&this.domNode&&this.domNode.parentNode){
-var _7=dojo.html.getMarginBox(this.domNode);
-if(_7.width==0||_7.height==0){
-dojo.lang.setTimeout(this,this.onResized,100);
-return;
-}
-this.iframe.style.width=_7.width+"px";
-this.iframe.style.height=_7.height+"px";
-}
-},size:function(_8){
-if(!this.iframe){
-return;
-}
-var _9=dojo.html.toCoordinateObject(_8,true,dojo.html.boxSizing.BORDER_BOX);
-with(this.iframe.style){
-width=_9.width+"px";
-height=_9.height+"px";
-left=_9.left+"px";
-top=_9.top+"px";
-}
-},setZIndex:function(_a){
-if(!this.iframe){
-return;
-}
-if(dojo.dom.isNode(_a)){
-this.iframe.style.zIndex=dojo.html.getStyle(_a,"z-index")-1;
-}else{
-if(!isNaN(_a)){
-this.iframe.style.zIndex=_a;
-}
-}
-},show:function(){
-if(this.iframe){
-this.iframe.style.display="block";
-}
-},hide:function(){
-if(this.iframe){
-this.iframe.style.display="none";
-}
-},remove:function(){
-if(this.iframe){
-dojo.html.removeNode(this.iframe,true);
-delete this.iframe;
-this.iframe=null;
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowB.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowB.png
deleted file mode 100644
index 0da8a2a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowB.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowBL.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowBL.png
deleted file mode 100644
index 4926283..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowBL.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowBR.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowBR.png
deleted file mode 100644
index ee704df..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowBR.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowL.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowL.png
deleted file mode 100644
index 67ebc2e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowL.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowR.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowR.png
deleted file mode 100644
index 8d0c99d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowR.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowT.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowT.png
deleted file mode 100644
index ea99436..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowT.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowTL.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowTL.png
deleted file mode 100644
index 388742a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowTL.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowTR.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowTR.png
deleted file mode 100644
index c9d4f04..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/images/shadowTR.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/layout.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/layout.js
deleted file mode 100644
index c051e25..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/layout.js
+++ /dev/null
@@ -1,375 +0,0 @@
-dojo.provide("dojo.html.layout");
-dojo.require("dojo.html.common");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.display");
-dojo.html.sumAncestorProperties=function(_1,_2){
-_1=dojo.byId(_1);
-if(!_1){
-return 0;
-}
-var _3=0;
-while(_1){
-if(dojo.html.getComputedStyle(_1,"position")=="fixed"){
-return 0;
-}
-var _4=_1[_2];
-if(_4){
-_3+=_4-0;
-if(_1==dojo.body()){
-break;
-}
-}
-_1=_1.parentNode;
-}
-return _3;
-};
-dojo.html.setStyleAttributes=function(_5,_6){
-_5=dojo.byId(_5);
-var _7=_6.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_7.length;i++){
-var _9=_7[i].split(":");
-var _a=_9[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _b=_9[1].replace(/\s*$/,"").replace(/^\s*/,"");
-switch(_a){
-case "opacity":
-dojo.html.setOpacity(_5,_b);
-break;
-case "content-height":
-dojo.html.setContentBox(_5,{height:_b});
-break;
-case "content-width":
-dojo.html.setContentBox(_5,{width:_b});
-break;
-case "outer-height":
-dojo.html.setMarginBox(_5,{height:_b});
-break;
-case "outer-width":
-dojo.html.setMarginBox(_5,{width:_b});
-break;
-default:
-_5.style[dojo.html.toCamelCase(_a)]=_b;
-}
-}
-};
-dojo.html.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-dojo.html.getAbsolutePosition=dojo.html.abs=function(_c,_d,_e){
-_c=dojo.byId(_c,_c.ownerDocument);
-var _f={x:0,y:0};
-var bs=dojo.html.boxSizing;
-if(!_e){
-_e=bs.CONTENT_BOX;
-}
-var _11=2;
-var _12;
-switch(_e){
-case bs.MARGIN_BOX:
-_12=3;
-break;
-case bs.BORDER_BOX:
-_12=2;
-break;
-case bs.PADDING_BOX:
-default:
-_12=1;
-break;
-case bs.CONTENT_BOX:
-_12=0;
-break;
-}
-var h=dojo.render.html;
-var db=document["body"]||document["documentElement"];
-if(h.ie){
-with(_c.getBoundingClientRect()){
-_f.x=left-2;
-_f.y=top-2;
-}
-}else{
-if(document.getBoxObjectFor){
-_11=1;
-try{
-var bo=document.getBoxObjectFor(_c);
-_f.x=bo.x-dojo.html.sumAncestorProperties(_c,"scrollLeft");
-_f.y=bo.y-dojo.html.sumAncestorProperties(_c,"scrollTop");
-}
-catch(e){
-}
-}else{
-if(_c["offsetParent"]){
-var _16;
-if((h.safari)&&(_c.style.getPropertyValue("position")=="absolute")&&(_c.parentNode==db)){
-_16=db;
-}else{
-_16=db.parentNode;
-}
-if(_c.parentNode!=db){
-var nd=_c;
-if(dojo.render.html.opera){
-nd=db;
-}
-_f.x-=dojo.html.sumAncestorProperties(nd,"scrollLeft");
-_f.y-=dojo.html.sumAncestorProperties(nd,"scrollTop");
-}
-var _18=_c;
-do{
-var n=_18["offsetLeft"];
-if(!h.opera||n>0){
-_f.x+=isNaN(n)?0:n;
-}
-var m=_18["offsetTop"];
-_f.y+=isNaN(m)?0:m;
-_18=_18.offsetParent;
-}while((_18!=_16)&&(_18!=null));
-}else{
-if(_c["x"]&&_c["y"]){
-_f.x+=isNaN(_c.x)?0:_c.x;
-_f.y+=isNaN(_c.y)?0:_c.y;
-}
-}
-}
-}
-if(_d){
-var _1b=dojo.html.getScroll();
-_f.y+=_1b.top;
-_f.x+=_1b.left;
-}
-var _1c=[dojo.html.getPaddingExtent,dojo.html.getBorderExtent,dojo.html.getMarginExtent];
-if(_11>_12){
-for(var i=_12;i<_11;++i){
-_f.y+=_1c[i](_c,"top");
-_f.x+=_1c[i](_c,"left");
-}
-}else{
-if(_11<_12){
-for(var i=_12;i>_11;--i){
-_f.y-=_1c[i-1](_c,"top");
-_f.x-=_1c[i-1](_c,"left");
-}
-}
-}
-_f.top=_f.y;
-_f.left=_f.x;
-return _f;
-};
-dojo.html.isPositionAbsolute=function(_1e){
-return (dojo.html.getComputedStyle(_1e,"position")=="absolute");
-};
-dojo.html._sumPixelValues=function(_1f,_20,_21){
-var _22=0;
-for(var x=0;x<_20.length;x++){
-_22+=dojo.html.getPixelValue(_1f,_20[x],_21);
-}
-return _22;
-};
-dojo.html.getMargin=function(_24){
-return {width:dojo.html._sumPixelValues(_24,["margin-left","margin-right"],(dojo.html.getComputedStyle(_24,"position")=="absolute")),height:dojo.html._sumPixelValues(_24,["margin-top","margin-bottom"],(dojo.html.getComputedStyle(_24,"position")=="absolute"))};
-};
-dojo.html.getBorder=function(_25){
-return {width:dojo.html.getBorderExtent(_25,"left")+dojo.html.getBorderExtent(_25,"right"),height:dojo.html.getBorderExtent(_25,"top")+dojo.html.getBorderExtent(_25,"bottom")};
-};
-dojo.html.getBorderExtent=function(_26,_27){
-return (dojo.html.getStyle(_26,"border-"+_27+"-style")=="none"?0:dojo.html.getPixelValue(_26,"border-"+_27+"-width"));
-};
-dojo.html.getMarginExtent=function(_28,_29){
-return dojo.html._sumPixelValues(_28,["margin-"+_29],dojo.html.isPositionAbsolute(_28));
-};
-dojo.html.getPaddingExtent=function(_2a,_2b){
-return dojo.html._sumPixelValues(_2a,["padding-"+_2b],true);
-};
-dojo.html.getPadding=function(_2c){
-return {width:dojo.html._sumPixelValues(_2c,["padding-left","padding-right"],true),height:dojo.html._sumPixelValues(_2c,["padding-top","padding-bottom"],true)};
-};
-dojo.html.getPadBorder=function(_2d){
-var pad=dojo.html.getPadding(_2d);
-var _2f=dojo.html.getBorder(_2d);
-return {width:pad.width+_2f.width,height:pad.height+_2f.height};
-};
-dojo.html.getBoxSizing=function(_30){
-var h=dojo.render.html;
-var bs=dojo.html.boxSizing;
-if(((h.ie)||(h.opera))&&_30.nodeName.toLowerCase()!="img"){
-var cm=document["compatMode"];
-if((cm=="BackCompat")||(cm=="QuirksMode")){
-return bs.BORDER_BOX;
-}else{
-return bs.CONTENT_BOX;
-}
-}else{
-if(arguments.length==0){
-_30=document.documentElement;
-}
-var _34;
-if(!h.ie){
-_34=dojo.html.getStyle(_30,"-moz-box-sizing");
-if(!_34){
-_34=dojo.html.getStyle(_30,"box-sizing");
-}
-}
-return (_34?_34:bs.CONTENT_BOX);
-}
-};
-dojo.html.isBorderBox=function(_35){
-return (dojo.html.getBoxSizing(_35)==dojo.html.boxSizing.BORDER_BOX);
-};
-dojo.html.getBorderBox=function(_36){
-_36=dojo.byId(_36);
-return {width:_36.offsetWidth,height:_36.offsetHeight};
-};
-dojo.html.getPaddingBox=function(_37){
-var box=dojo.html.getBorderBox(_37);
-var _39=dojo.html.getBorder(_37);
-return {width:box.width-_39.width,height:box.height-_39.height};
-};
-dojo.html.getContentBox=function(_3a){
-_3a=dojo.byId(_3a);
-var _3b=dojo.html.getPadBorder(_3a);
-return {width:_3a.offsetWidth-_3b.width,height:_3a.offsetHeight-_3b.height};
-};
-dojo.html.setContentBox=function(_3c,_3d){
-_3c=dojo.byId(_3c);
-var _3e=0;
-var _3f=0;
-var _40=dojo.html.isBorderBox(_3c);
-var _41=(_40?dojo.html.getPadBorder(_3c):{width:0,height:0});
-var ret={};
-if(typeof _3d.width!="undefined"){
-_3e=_3d.width+_41.width;
-ret.width=dojo.html.setPositivePixelValue(_3c,"width",_3e);
-}
-if(typeof _3d.height!="undefined"){
-_3f=_3d.height+_41.height;
-ret.height=dojo.html.setPositivePixelValue(_3c,"height",_3f);
-}
-return ret;
-};
-dojo.html.getMarginBox=function(_43){
-var _44=dojo.html.getBorderBox(_43);
-var _45=dojo.html.getMargin(_43);
-return {width:_44.width+_45.width,height:_44.height+_45.height};
-};
-dojo.html.setMarginBox=function(_46,_47){
-_46=dojo.byId(_46);
-var _48=0;
-var _49=0;
-var _4a=dojo.html.isBorderBox(_46);
-var _4b=(!_4a?dojo.html.getPadBorder(_46):{width:0,height:0});
-var _4c=dojo.html.getMargin(_46);
-var ret={};
-if(typeof _47.width!="undefined"){
-_48=_47.width-_4b.width;
-_48-=_4c.width;
-ret.width=dojo.html.setPositivePixelValue(_46,"width",_48);
-}
-if(typeof _47.height!="undefined"){
-_49=_47.height-_4b.height;
-_49-=_4c.height;
-ret.height=dojo.html.setPositivePixelValue(_46,"height",_49);
-}
-return ret;
-};
-dojo.html.getElementBox=function(_4e,_4f){
-var bs=dojo.html.boxSizing;
-switch(_4f){
-case bs.MARGIN_BOX:
-return dojo.html.getMarginBox(_4e);
-case bs.BORDER_BOX:
-return dojo.html.getBorderBox(_4e);
-case bs.PADDING_BOX:
-return dojo.html.getPaddingBox(_4e);
-case bs.CONTENT_BOX:
-default:
-return dojo.html.getContentBox(_4e);
-}
-};
-dojo.html.toCoordinateObject=dojo.html.toCoordinateArray=function(_51,_52,_53){
-if(_51 instanceof Array||typeof _51=="array"){
-dojo.deprecated("dojo.html.toCoordinateArray","use dojo.html.toCoordinateObject({left: , top: , width: , height: }) instead","0.5");
-while(_51.length<4){
-_51.push(0);
-}
-while(_51.length>4){
-_51.pop();
-}
-var ret={left:_51[0],top:_51[1],width:_51[2],height:_51[3]};
-}else{
-if(!_51.nodeType&&!(_51 instanceof String||typeof _51=="string")&&("width" in _51||"height" in _51||"left" in _51||"x" in _51||"top" in _51||"y" in _51)){
-var ret={left:_51.left||_51.x||0,top:_51.top||_51.y||0,width:_51.width||0,height:_51.height||0};
-}else{
-var _55=dojo.byId(_51);
-var pos=dojo.html.abs(_55,_52,_53);
-var _57=dojo.html.getMarginBox(_55);
-var ret={left:pos.left,top:pos.top,width:_57.width,height:_57.height};
-}
-}
-ret.x=ret.left;
-ret.y=ret.top;
-return ret;
-};
-dojo.html.setMarginBoxWidth=dojo.html.setOuterWidth=function(_58,_59){
-return dojo.html._callDeprecated("setMarginBoxWidth","setMarginBox",arguments,"width");
-};
-dojo.html.setMarginBoxHeight=dojo.html.setOuterHeight=function(){
-return dojo.html._callDeprecated("setMarginBoxHeight","setMarginBox",arguments,"height");
-};
-dojo.html.getMarginBoxWidth=dojo.html.getOuterWidth=function(){
-return dojo.html._callDeprecated("getMarginBoxWidth","getMarginBox",arguments,null,"width");
-};
-dojo.html.getMarginBoxHeight=dojo.html.getOuterHeight=function(){
-return dojo.html._callDeprecated("getMarginBoxHeight","getMarginBox",arguments,null,"height");
-};
-dojo.html.getTotalOffset=function(_5a,_5b,_5c){
-return dojo.html._callDeprecated("getTotalOffset","getAbsolutePosition",arguments,null,_5b);
-};
-dojo.html.getAbsoluteX=function(_5d,_5e){
-return dojo.html._callDeprecated("getAbsoluteX","getAbsolutePosition",arguments,null,"x");
-};
-dojo.html.getAbsoluteY=function(_5f,_60){
-return dojo.html._callDeprecated("getAbsoluteY","getAbsolutePosition",arguments,null,"y");
-};
-dojo.html.totalOffsetLeft=function(_61,_62){
-return dojo.html._callDeprecated("totalOffsetLeft","getAbsolutePosition",arguments,null,"left");
-};
-dojo.html.totalOffsetTop=function(_63,_64){
-return dojo.html._callDeprecated("totalOffsetTop","getAbsolutePosition",arguments,null,"top");
-};
-dojo.html.getMarginWidth=function(_65){
-return dojo.html._callDeprecated("getMarginWidth","getMargin",arguments,null,"width");
-};
-dojo.html.getMarginHeight=function(_66){
-return dojo.html._callDeprecated("getMarginHeight","getMargin",arguments,null,"height");
-};
-dojo.html.getBorderWidth=function(_67){
-return dojo.html._callDeprecated("getBorderWidth","getBorder",arguments,null,"width");
-};
-dojo.html.getBorderHeight=function(_68){
-return dojo.html._callDeprecated("getBorderHeight","getBorder",arguments,null,"height");
-};
-dojo.html.getPaddingWidth=function(_69){
-return dojo.html._callDeprecated("getPaddingWidth","getPadding",arguments,null,"width");
-};
-dojo.html.getPaddingHeight=function(_6a){
-return dojo.html._callDeprecated("getPaddingHeight","getPadding",arguments,null,"height");
-};
-dojo.html.getPadBorderWidth=function(_6b){
-return dojo.html._callDeprecated("getPadBorderWidth","getPadBorder",arguments,null,"width");
-};
-dojo.html.getPadBorderHeight=function(_6c){
-return dojo.html._callDeprecated("getPadBorderHeight","getPadBorder",arguments,null,"height");
-};
-dojo.html.getBorderBoxWidth=dojo.html.getInnerWidth=function(){
-return dojo.html._callDeprecated("getBorderBoxWidth","getBorderBox",arguments,null,"width");
-};
-dojo.html.getBorderBoxHeight=dojo.html.getInnerHeight=function(){
-return dojo.html._callDeprecated("getBorderBoxHeight","getBorderBox",arguments,null,"height");
-};
-dojo.html.getContentBoxWidth=dojo.html.getContentWidth=function(){
-return dojo.html._callDeprecated("getContentBoxWidth","getContentBox",arguments,null,"width");
-};
-dojo.html.getContentBoxHeight=dojo.html.getContentHeight=function(){
-return dojo.html._callDeprecated("getContentBoxHeight","getContentBox",arguments,null,"height");
-};
-dojo.html.setContentBoxWidth=dojo.html.setContentWidth=function(_6d,_6e){
-return dojo.html._callDeprecated("setContentBoxWidth","setContentBox",arguments,"width");
-};
-dojo.html.setContentBoxHeight=dojo.html.setContentHeight=function(_6f,_70){
-return dojo.html._callDeprecated("setContentBoxHeight","setContentBox",arguments,"height");
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/metrics.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/metrics.js
deleted file mode 100644
index 5da4b1b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/metrics.js
+++ /dev/null
@@ -1,202 +0,0 @@
-dojo.provide("dojo.html.metrics");
-dojo.require("dojo.html.layout");
-dojo.html.getScrollbar=function(){
-var _1=document.createElement("div");
-_1.style.width="100px";
-_1.style.height="100px";
-_1.style.overflow="scroll";
-_1.style.position="absolute";
-_1.style.top="-300px";
-_1.style.left="0px";
-var _2=document.createElement("div");
-_2.style.width="400px";
-_2.style.height="400px";
-_1.appendChild(_2);
-dojo.body().appendChild(_1);
-var _3=_1.offsetWidth-_1.clientWidth;
-dojo.body().removeChild(_1);
-_1.removeChild(_2);
-_1=_2=null;
-return {width:_3};
-};
-dojo.html.getFontMeasurements=function(){
-var _4={"1em":0,"1ex":0,"100%":0,"12pt":0,"16px":0,"xx-small":0,"x-small":0,"small":0,"medium":0,"large":0,"x-large":0,"xx-large":0};
-if(dojo.render.html.ie){
-document.documentElement.style.fontSize="100%";
-}
-var _5=document.createElement("div");
-_5.style.position="absolute";
-_5.style.left="-100px";
-_5.style.top="0";
-_5.style.width="30px";
-_5.style.height="1000em";
-_5.style.border="0";
-_5.style.margin="0";
-_5.style.padding="0";
-_5.style.outline="0";
-_5.style.lineHeight="1";
-_5.style.overflow="hidden";
-dojo.body().appendChild(_5);
-for(var p in _4){
-_5.style.fontSize=p;
-_4[p]=Math.round(_5.offsetHeight*12/16)*16/12/1000;
-}
-dojo.body().removeChild(_5);
-_5=null;
-return _4;
-};
-dojo.html._fontMeasurements=null;
-dojo.html.getCachedFontMeasurements=function(_7){
-if(_7||!dojo.html._fontMeasurements){
-dojo.html._fontMeasurements=dojo.html.getFontMeasurements();
-}
-return dojo.html._fontMeasurements;
-};
-dojo.html.measureFragment=function(_8,_9,_a){
-var _b=_8.cloneNode(true);
-_b.innerHTML=_9;
-_8.parentNode.appendChild(_b);
-var _c=dojo.html.getElementBox(_b,_a);
-_8.parentNode.removeChild(_b);
-_b=null;
-return _c;
-};
-dojo.html.getFittedFragment=function(_d,_e){
-function cl(_f){
-var _10=document.createElement(_f.tagName);
-_10.id=_f.id+"-clone";
-_10.className=_f.className;
-for(var j=0;j<_f.attributes.length;j++){
-if(_f.attributes[j].specified){
-if(_f.attributes[j].nodeName.toLowerCase()!="style"&&_f.attributes[j].nodeName.toLowerCase()!="edited"&&_f.attributes[j].nodeName.toLowerCase()!="contenteditable"&&_f.attributes[j].nodeName.toLowerCase()!="id"&&_f.attributes[j].nodeName.toLowerCase()!="class"){
-_10.setAttribute(_f.attributes[j].nodeName.toLowerCase(),_f.attributes[j].nodeValue);
-}
-}
-}
-return _10;
-}
-var _12=dojo.html.getFontMeasurements()["16px"];
-var n=cl(_d);
-n.style.width=dojo.html.getBorderBox(_d).width+"px";
-n.style.height=(_12+4)+"px";
-_d.parentNode.appendChild(n);
-var rem=dojo.html.fitToElement(n,_e);
-var ret=n.innerHTML;
-n.parentNode.removeChild(n);
-return ret;
-};
-dojo.html.fitToElement=function(_16,_17){
-function cl(_18){
-var _19=document.createElement(_18.tagName);
-_19.id=_18.id+"-clone";
-_19.className=_18.className;
-for(var j=0;j<_18.attributes.length;j++){
-if(_18.attributes[j].specified){
-if(_18.attributes[j].nodeName.toLowerCase()!="style"&&_18.attributes[j].nodeName.toLowerCase()!="edited"&&_18.attributes[j].nodeName.toLowerCase()!="contenteditable"&&_18.attributes[j].nodeName.toLowerCase()!="id"&&_18.attributes[j].nodeName.toLowerCase()!="class"){
-_19.setAttribute(_18.attributes[j].nodeName.toLowerCase(),_18.attributes[j].nodeValue);
-}
-}
-}
-return _19;
-}
-var _1b=cl(_16);
-_16.parentNode.appendChild(_1b);
-var t=dojo.html.getBorderBox(_16);
-_1b.style.width=t.width+"px";
-var _1d=["br","img","hr","input","!--"];
-var _1e=["<BR>","<br>","<br/>","<br />","<p></p>","<P></P>"];
-var _1f=[];
-var str=_17;
-var i=0;
-var _22=str.length;
-var add=0;
-var _24=true;
-_1b.innerHTML=str;
-while(_24){
-add=Math.round((_22-i)/2);
-if(add<=1){
-_24=false;
-}
-i+=add;
-_1b.innerHTML=str.substr(0,i);
-if(_1b.offsetHeight>t.height){
-_22=i;
-i-=add;
-}
-}
-if(str.substr(0,i)!=str){
-var _25=str.substr(0,i).lastIndexOf(" ");
-var _26=str.substr(0,i).lastIndexOf("\n");
-var _27=str.substr(0,i).lastIndexOf(">");
-var _28=str.substr(0,i).lastIndexOf("<");
-if(_28<=_27&&_26==i-1){
-i=i;
-}else{
-if(_25!=-1&&_25>_27&&_27>_28){
-i=_25+1;
-}else{
-if(_28>_27){
-i=_28;
-}else{
-if(_27!=-1){
-i=_27+1;
-}
-}
-}
-}
-}
-str=str.substr(0,i);
-var ret=_17.substr(str.length);
-var _2a=true;
-var _2b=str.split("<");
-_2b.shift();
-for(var j=0;j<_2b.length;j++){
-_2b[j]=_2b[j].split(">")[0];
-if(_2b[j].charAt(_2b[j].length-1)=="/"){
-continue;
-}
-if(_2b[j].charAt(0)!="/"){
-for(var k=0;k<_1d.length;k++){
-if(_2b[j].split(" ")[0].toLowerCase()==_1d[k]){
-_2a=false;
-}
-}
-if(_2a){
-_1f.push(_2b[j]);
-}
-_2a=true;
-}else{
-_1f.pop();
-}
-}
-for(var j=0;j<_1e.length;j++){
-if(ret.charAt(0)=="\n"){
-ret=ret.substr(1);
-}
-while(ret.indexOf(_1e[j])==0){
-ret=ret.substr(_1e[j].length);
-}
-}
-for(var j=_1f.length-1;j>=0;j--){
-if(str.lastIndexOf(_1f[j])==(str.length-_1f[j].length-1)){
-str=str.substring(0,str.lastIndexOf(_1f[j]));
-}else{
-str+="</"+_1f[j]+">";
-}
-if(ret.length>0){
-ret="<"+_1f[j]+">"+ret;
-}
-}
-for(var j=0;j<_1e.length;j++){
-if(ret.charAt(0)=="\n"){
-ret=ret.substr(1);
-}
-while(ret.indexOf(_1e[j])==0){
-ret=ret.substr(_1e[j].length);
-}
-}
-_16.innerHTML=str;
-_1b.parentNode.removeChild(_1b);
-_1b=null;
-return ret;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/selection.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/selection.js
deleted file mode 100644
index 1ab06f2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/selection.js
+++ /dev/null
@@ -1,326 +0,0 @@
-dojo.require("dojo.html.common");
-dojo.provide("dojo.html.selection");
-dojo.require("dojo.dom");
-dojo.require("dojo.lang.common");
-dojo.html.selectionType={NONE:0,TEXT:1,CONTROL:2};
-dojo.html.clearSelection=function(){
-var _1=dojo.global();
-var _2=dojo.doc();
-try{
-if(_1["getSelection"]){
-if(dojo.render.html.safari){
-_1.getSelection().collapse();
-}else{
-_1.getSelection().removeAllRanges();
-}
-}else{
-if(_2.selection){
-if(_2.selection.empty){
-_2.selection.empty();
-}else{
-if(_2.selection.clear){
-_2.selection.clear();
-}
-}
-}
-}
-return true;
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.html.disableSelection=function(_3){
-_3=dojo.byId(_3)||dojo.body();
-var h=dojo.render.html;
-if(h.mozilla){
-_3.style.MozUserSelect="none";
-}else{
-if(h.safari){
-_3.style.KhtmlUserSelect="none";
-}else{
-if(h.ie){
-_3.unselectable="on";
-}else{
-return false;
-}
-}
-}
-return true;
-};
-dojo.html.enableSelection=function(_5){
-_5=dojo.byId(_5)||dojo.body();
-var h=dojo.render.html;
-if(h.mozilla){
-_5.style.MozUserSelect="";
-}else{
-if(h.safari){
-_5.style.KhtmlUserSelect="";
-}else{
-if(h.ie){
-_5.unselectable="off";
-}else{
-return false;
-}
-}
-}
-return true;
-};
-dojo.html.selectElement=function(_7){
-dojo.deprecated("dojo.html.selectElement","replaced by dojo.html.selection.selectElementChildren",0.5);
-};
-dojo.html.selectInputText=function(_8){
-var _9=dojo.global();
-var _a=dojo.doc();
-_8=dojo.byId(_8);
-if(_a["selection"]&&dojo.body()["createTextRange"]){
-var _b=_8.createTextRange();
-_b.moveStart("character",0);
-_b.moveEnd("character",_8.value.length);
-_b.select();
-}else{
-if(_9["getSelection"]){
-var _c=_9.getSelection();
-_8.setSelectionRange(0,_8.value.length);
-}
-}
-_8.focus();
-};
-dojo.html.isSelectionCollapsed=function(){
-dojo.deprecated("dojo.html.isSelectionCollapsed","replaced by dojo.html.selection.isCollapsed",0.5);
-return dojo.html.selection.isCollapsed();
-};
-dojo.lang.mixin(dojo.html.selection,{getType:function(){
-if(dojo.doc()["selection"]){
-return dojo.html.selectionType[dojo.doc().selection.type.toUpperCase()];
-}else{
-var _d=dojo.html.selectionType.TEXT;
-var _e;
-try{
-_e=dojo.global().getSelection();
-}
-catch(e){
-}
-if(_e&&_e.rangeCount==1){
-var _f=_e.getRangeAt(0);
-if(_f.startContainer==_f.endContainer&&(_f.endOffset-_f.startOffset)==1&&_f.startContainer.nodeType!=dojo.dom.TEXT_NODE){
-_d=dojo.html.selectionType.CONTROL;
-}
-}
-return _d;
-}
-},isCollapsed:function(){
-var _10=dojo.global();
-var _11=dojo.doc();
-if(_11["selection"]){
-return _11.selection.createRange().text=="";
-}else{
-if(_10["getSelection"]){
-var _12=_10.getSelection();
-if(dojo.lang.isString(_12)){
-return _12=="";
-}else{
-return _12.isCollapsed||_12.toString()=="";
-}
-}
-}
-},getSelectedElement:function(){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-if(dojo.doc()["selection"]){
-var _13=dojo.doc().selection.createRange();
-if(_13&&_13.item){
-return dojo.doc().selection.createRange().item(0);
-}
-}else{
-var _14=dojo.global().getSelection();
-return _14.anchorNode.childNodes[_14.anchorOffset];
-}
-}
-},getParentElement:function(){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-var p=dojo.html.selection.getSelectedElement();
-if(p){
-return p.parentNode;
-}
-}else{
-if(dojo.doc()["selection"]){
-return dojo.doc().selection.createRange().parentElement();
-}else{
-var _16=dojo.global().getSelection();
-if(_16){
-var _17=_16.anchorNode;
-while(_17&&_17.nodeType!=dojo.dom.ELEMENT_NODE){
-_17=_17.parentNode;
-}
-return _17;
-}
-}
-}
-},getSelectedText:function(){
-if(dojo.doc()["selection"]){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-return null;
-}
-return dojo.doc().selection.createRange().text;
-}else{
-var _18=dojo.global().getSelection();
-if(_18){
-return _18.toString();
-}
-}
-},getSelectedHtml:function(){
-if(dojo.doc()["selection"]){
-if(dojo.html.selection.getType()==dojo.html.selectionType.CONTROL){
-return null;
-}
-return dojo.doc().selection.createRange().htmlText;
-}else{
-var _19=dojo.global().getSelection();
-if(_19&&_19.rangeCount){
-var _1a=_19.getRangeAt(0).cloneContents();
-var div=document.createElement("div");
-div.appendChild(_1a);
-return div.innerHTML;
-}
-return null;
-}
-},hasAncestorElement:function(_1c){
-return (dojo.html.selection.getAncestorElement.apply(this,arguments)!=null);
-},getAncestorElement:function(_1d){
-var _1e=dojo.html.selection.getSelectedElement()||dojo.html.selection.getParentElement();
-while(_1e){
-if(dojo.html.selection.isTag(_1e,arguments).length>0){
-return _1e;
-}
-_1e=_1e.parentNode;
-}
-return null;
-},isTag:function(_1f,_20){
-if(_1f&&_1f.tagName){
-for(var i=0;i<_20.length;i++){
-if(_1f.tagName.toLowerCase()==String(_20[i]).toLowerCase()){
-return String(_20[i]).toLowerCase();
-}
-}
-}
-return "";
-},selectElement:function(_22){
-var _23=dojo.global();
-var _24=dojo.doc();
-_22=dojo.byId(_22);
-if(_24.selection&&dojo.body().createTextRange){
-try{
-var _25=dojo.body().createControlRange();
-_25.addElement(_22);
-_25.select();
-}
-catch(e){
-dojo.html.selection.selectElementChildren(_22);
-}
-}else{
-if(_23["getSelection"]){
-var _26=_23.getSelection();
-if(_26["removeAllRanges"]){
-var _25=_24.createRange();
-_25.selectNode(_22);
-_26.removeAllRanges();
-_26.addRange(_25);
-}
-}
-}
-},selectElementChildren:function(_27){
-var _28=dojo.global();
-var _29=dojo.doc();
-_27=dojo.byId(_27);
-if(_29.selection&&dojo.body().createTextRange){
-var _2a=dojo.body().createTextRange();
-_2a.moveToElementText(_27);
-_2a.select();
-}else{
-if(_28["getSelection"]){
-var _2b=_28.getSelection();
-if(_2b["setBaseAndExtent"]){
-_2b.setBaseAndExtent(_27,0,_27,_27.innerText.length-1);
-}else{
-if(_2b["selectAllChildren"]){
-_2b.selectAllChildren(_27);
-}
-}
-}
-}
-},getBookmark:function(){
-var _2c;
-var _2d=dojo.doc();
-if(_2d["selection"]){
-var _2e=_2d.selection.createRange();
-_2c=_2e.getBookmark();
-}else{
-var _2f;
-try{
-_2f=dojo.global().getSelection();
-}
-catch(e){
-}
-if(_2f){
-var _2e=_2f.getRangeAt(0);
-_2c=_2e.cloneRange();
-}else{
-dojo.debug("No idea how to store the current selection for this browser!");
-}
-}
-return _2c;
-},moveToBookmark:function(_30){
-var _31=dojo.doc();
-if(_31["selection"]){
-var _32=_31.selection.createRange();
-_32.moveToBookmark(_30);
-_32.select();
-}else{
-var _33;
-try{
-_33=dojo.global().getSelection();
-}
-catch(e){
-}
-if(_33&&_33["removeAllRanges"]){
-_33.removeAllRanges();
-_33.addRange(_30);
-}else{
-dojo.debug("No idea how to restore selection for this browser!");
-}
-}
-},collapse:function(_34){
-if(dojo.global()["getSelection"]){
-var _35=dojo.global().getSelection();
-if(_35.removeAllRanges){
-if(_34){
-_35.collapseToStart();
-}else{
-_35.collapseToEnd();
-}
-}else{
-dojo.global().getSelection().collapse(_34);
-}
-}else{
-if(dojo.doc().selection){
-var _36=dojo.doc().selection.createRange();
-_36.collapse(_34);
-_36.select();
-}
-}
-},remove:function(){
-if(dojo.doc().selection){
-var _37=dojo.doc().selection;
-if(_37.type.toUpperCase()!="NONE"){
-_37.clear();
-}
-return _37;
-}else{
-var _37=dojo.global().getSelection();
-for(var i=0;i<_37.rangeCount;i++){
-_37.getRangeAt(i).deleteContents();
-}
-return _37;
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/shadow.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/shadow.js
deleted file mode 100644
index 2595399..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/shadow.js
+++ /dev/null
@@ -1,4 +0,0 @@
-dojo.provide("dojo.html.shadow");
-dojo.require("dojo.lfx.shadow");
-dojo.deprecated("dojo.html.shadow has been moved to dojo.lfx.","0.5");
-dojo.html.shadow=dojo.lfx.shadow;
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/style.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/style.js
deleted file mode 100644
index 2762611..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/style.js
+++ /dev/null
@@ -1,470 +0,0 @@
-dojo.provide("dojo.html.style");
-dojo.require("dojo.html.common");
-dojo.require("dojo.uri.Uri");
-dojo.html.getClass=function(_1){
-_1=dojo.byId(_1);
-if(!_1){
-return "";
-}
-var cs="";
-if(_1.className){
-cs=_1.className;
-}else{
-if(dojo.html.hasAttribute(_1,"class")){
-cs=dojo.html.getAttribute(_1,"class");
-}
-}
-return cs.replace(/^\s+|\s+$/g,"");
-};
-dojo.html.getClasses=function(_3){
-var c=dojo.html.getClass(_3);
-return (c=="")?[]:c.split(/\s+/g);
-};
-dojo.html.hasClass=function(_5,_6){
-return (new RegExp("(^|\\s+)"+_6+"(\\s+|$)")).test(dojo.html.getClass(_5));
-};
-dojo.html.prependClass=function(_7,_8){
-_8+=" "+dojo.html.getClass(_7);
-return dojo.html.setClass(_7,_8);
-};
-dojo.html.addClass=function(_9,_a){
-if(dojo.html.hasClass(_9,_a)){
-return false;
-}
-_a=(dojo.html.getClass(_9)+" "+_a).replace(/^\s+|\s+$/g,"");
-return dojo.html.setClass(_9,_a);
-};
-dojo.html.setClass=function(_b,_c){
-_b=dojo.byId(_b);
-var cs=new String(_c);
-try{
-if(typeof _b.className=="string"){
-_b.className=cs;
-}else{
-if(_b.setAttribute){
-_b.setAttribute("class",_c);
-_b.className=cs;
-}else{
-return false;
-}
-}
-}
-catch(e){
-dojo.debug("dojo.html.setClass() failed",e);
-}
-return true;
-};
-dojo.html.removeClass=function(_e,_f,_10){
-try{
-if(!_10){
-var _11=dojo.html.getClass(_e).replace(new RegExp("(^|\\s+)"+_f+"(\\s+|$)"),"$1$2");
-}else{
-var _11=dojo.html.getClass(_e).replace(_f,"");
-}
-dojo.html.setClass(_e,_11);
-}
-catch(e){
-dojo.debug("dojo.html.removeClass() failed",e);
-}
-return true;
-};
-dojo.html.replaceClass=function(_12,_13,_14){
-dojo.html.removeClass(_12,_14);
-dojo.html.addClass(_12,_13);
-};
-dojo.html.classMatchType={ContainsAll:0,ContainsAny:1,IsOnly:2};
-dojo.html.getElementsByClass=function(_15,_16,_17,_18,_19){
-_19=false;
-var _1a=dojo.doc();
-_16=dojo.byId(_16)||_1a;
-var _1b=_15.split(/\s+/g);
-var _1c=[];
-if(_18!=1&&_18!=2){
-_18=0;
-}
-var _1d=new RegExp("(\\s|^)(("+_1b.join(")|(")+"))(\\s|$)");
-var _1e=_1b.join(" ").length;
-var _1f=[];
-if(!_19&&_1a.evaluate){
-var _20=".//"+(_17||"*")+"[contains(";
-if(_18!=dojo.html.classMatchType.ContainsAny){
-_20+="concat(' ',@class,' '), ' "+_1b.join(" ') and contains(concat(' ',@class,' '), ' ")+" ')";
-if(_18==2){
-_20+=" and string-length(@class)="+_1e+"]";
-}else{
-_20+="]";
-}
-}else{
-_20+="concat(' ',@class,' '), ' "+_1b.join(" ') or contains(concat(' ',@class,' '), ' ")+" ')]";
-}
-var _21=_1a.evaluate(_20,_16,null,XPathResult.ANY_TYPE,null);
-var _22=_21.iterateNext();
-while(_22){
-try{
-_1f.push(_22);
-_22=_21.iterateNext();
-}
-catch(e){
-break;
-}
-}
-return _1f;
-}else{
-if(!_17){
-_17="*";
-}
-_1f=_16.getElementsByTagName(_17);
-var _23,i=0;
-outer:
-while(_23=_1f[i++]){
-var _25=dojo.html.getClasses(_23);
-if(_25.length==0){
-continue outer;
-}
-var _26=0;
-for(var j=0;j<_25.length;j++){
-if(_1d.test(_25[j])){
-if(_18==dojo.html.classMatchType.ContainsAny){
-_1c.push(_23);
-continue outer;
-}else{
-_26++;
-}
-}else{
-if(_18==dojo.html.classMatchType.IsOnly){
-continue outer;
-}
-}
-}
-if(_26==_1b.length){
-if((_18==dojo.html.classMatchType.IsOnly)&&(_26==_25.length)){
-_1c.push(_23);
-}else{
-if(_18==dojo.html.classMatchType.ContainsAll){
-_1c.push(_23);
-}
-}
-}
-}
-return _1c;
-}
-};
-dojo.html.getElementsByClassName=dojo.html.getElementsByClass;
-dojo.html.toCamelCase=function(_28){
-var arr=_28.split("-"),cc=arr[0];
-for(var i=1;i<arr.length;i++){
-cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
-}
-return cc;
-};
-dojo.html.toSelectorCase=function(_2c){
-return _2c.replace(/([A-Z])/g,"-$1").toLowerCase();
-};
-if(dojo.render.html.ie){
-dojo.html.getComputedStyle=function(_2d,_2e,_2f){
-_2d=dojo.byId(_2d);
-if(!_2d||!_2d.currentStyle){
-return _2f;
-}
-return _2d.currentStyle[dojo.html.toCamelCase(_2e)];
-};
-dojo.html.getComputedStyles=function(_30){
-return _30.currentStyle;
-};
-}else{
-dojo.html.getComputedStyle=function(_31,_32,_33){
-_31=dojo.byId(_31);
-if(!_31||!_31.style){
-return _33;
-}
-var s=document.defaultView.getComputedStyle(_31,null);
-return (s&&s[dojo.html.toCamelCase(_32)])||"";
-};
-dojo.html.getComputedStyles=function(_35){
-return document.defaultView.getComputedStyle(_35,null);
-};
-}
-dojo.html.getStyleProperty=function(_36,_37){
-_36=dojo.byId(_36);
-return (_36&&_36.style?_36.style[dojo.html.toCamelCase(_37)]:undefined);
-};
-dojo.html.getStyle=function(_38,_39){
-var _3a=dojo.html.getStyleProperty(_38,_39);
-return (_3a?_3a:dojo.html.getComputedStyle(_38,_39));
-};
-dojo.html.setStyle=function(_3b,_3c,_3d){
-_3b=dojo.byId(_3b);
-if(_3b&&_3b.style){
-var _3e=dojo.html.toCamelCase(_3c);
-_3b.style[_3e]=_3d;
-}
-};
-dojo.html.setStyleText=function(_3f,_40){
-try{
-_3f.style.cssText=_40;
-}
-catch(e){
-_3f.setAttribute("style",_40);
-}
-};
-dojo.html.copyStyle=function(_41,_42){
-if(!_42.style.cssText){
-_41.setAttribute("style",_42.getAttribute("style"));
-}else{
-_41.style.cssText=_42.style.cssText;
-}
-dojo.html.addClass(_41,dojo.html.getClass(_42));
-};
-dojo.html.getUnitValue=function(_43,_44,_45){
-var s=dojo.html.getComputedStyle(_43,_44);
-if((!s)||((s=="auto")&&(_45))){
-return {value:0,units:"px"};
-}
-var _47=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_47){
-return dojo.html.getUnitValue.bad;
-}
-return {value:Number(_47[1]),units:_47[2].toLowerCase()};
-};
-dojo.html.getUnitValue.bad={value:NaN,units:""};
-if(dojo.render.html.ie){
-dojo.html.toPixelValue=function(_48,_49){
-if(!_49){
-return 0;
-}
-if(_49.slice(-2)=="px"){
-return parseFloat(_49);
-}
-var _4a=0;
-with(_48){
-var _4b=style.left;
-var _4c=runtimeStyle.left;
-runtimeStyle.left=currentStyle.left;
-try{
-style.left=_49||0;
-_4a=style.pixelLeft;
-style.left=_4b;
-runtimeStyle.left=_4c;
-}
-catch(e){
-}
-}
-return _4a;
-};
-}else{
-dojo.html.toPixelValue=function(_4d,_4e){
-return (_4e&&(_4e.slice(-2)=="px")?parseFloat(_4e):0);
-};
-}
-dojo.html.getPixelValue=function(_4f,_50,_51){
-return dojo.html.toPixelValue(_4f,dojo.html.getComputedStyle(_4f,_50));
-};
-dojo.html.setPositivePixelValue=function(_52,_53,_54){
-if(isNaN(_54)){
-return false;
-}
-_52.style[_53]=Math.max(0,_54)+"px";
-return true;
-};
-dojo.html.styleSheet=null;
-dojo.html.insertCssRule=function(_55,_56,_57){
-if(!dojo.html.styleSheet){
-if(document.createStyleSheet){
-dojo.html.styleSheet=document.createStyleSheet();
-}else{
-if(document.styleSheets[0]){
-dojo.html.styleSheet=document.styleSheets[0];
-}else{
-return null;
-}
-}
-}
-if(arguments.length<3){
-if(dojo.html.styleSheet.cssRules){
-_57=dojo.html.styleSheet.cssRules.length;
-}else{
-if(dojo.html.styleSheet.rules){
-_57=dojo.html.styleSheet.rules.length;
-}else{
-return null;
-}
-}
-}
-if(dojo.html.styleSheet.insertRule){
-var _58=_55+" { "+_56+" }";
-return dojo.html.styleSheet.insertRule(_58,_57);
-}else{
-if(dojo.html.styleSheet.addRule){
-return dojo.html.styleSheet.addRule(_55,_56,_57);
-}else{
-return null;
-}
-}
-};
-dojo.html.removeCssRule=function(_59){
-if(!dojo.html.styleSheet){
-dojo.debug("no stylesheet defined for removing rules");
-return false;
-}
-if(dojo.render.html.ie){
-if(!_59){
-_59=dojo.html.styleSheet.rules.length;
-dojo.html.styleSheet.removeRule(_59);
-}
-}else{
-if(document.styleSheets[0]){
-if(!_59){
-_59=dojo.html.styleSheet.cssRules.length;
-}
-dojo.html.styleSheet.deleteRule(_59);
-}
-}
-return true;
-};
-dojo.html._insertedCssFiles=[];
-dojo.html.insertCssFile=function(URI,doc,_5c,_5d){
-if(!URI){
-return;
-}
-if(!doc){
-doc=document;
-}
-var _5e=dojo.hostenv.getText(URI,false,_5d);
-if(_5e===null){
-return;
-}
-_5e=dojo.html.fixPathsInCssText(_5e,URI);
-if(_5c){
-var idx=-1,_60,ent=dojo.html._insertedCssFiles;
-for(var i=0;i<ent.length;i++){
-if((ent[i].doc==doc)&&(ent[i].cssText==_5e)){
-idx=i;
-_60=ent[i].nodeRef;
-break;
-}
-}
-if(_60){
-var _63=doc.getElementsByTagName("style");
-for(var i=0;i<_63.length;i++){
-if(_63[i]==_60){
-return;
-}
-}
-dojo.html._insertedCssFiles.shift(idx,1);
-}
-}
-var _64=dojo.html.insertCssText(_5e,doc);
-dojo.html._insertedCssFiles.push({"doc":doc,"cssText":_5e,"nodeRef":_64});
-if(_64&&djConfig.isDebug){
-_64.setAttribute("dbgHref",URI);
-}
-return _64;
-};
-dojo.html.insertCssText=function(_65,doc,URI){
-if(!_65){
-return;
-}
-if(!doc){
-doc=document;
-}
-if(URI){
-_65=dojo.html.fixPathsInCssText(_65,URI);
-}
-var _68=doc.createElement("style");
-_68.setAttribute("type","text/css");
-var _69=doc.getElementsByTagName("head")[0];
-if(!_69){
-dojo.debug("No head tag in document, aborting styles");
-return;
-}else{
-_69.appendChild(_68);
-}
-if(_68.styleSheet){
-var _6a=function(){
-try{
-_68.styleSheet.cssText=_65;
-}
-catch(e){
-dojo.debug(e);
-}
-};
-if(_68.styleSheet.disabled){
-setTimeout(_6a,10);
-}else{
-_6a();
-}
-}else{
-var _6b=doc.createTextNode(_65);
-_68.appendChild(_6b);
-}
-return _68;
-};
-dojo.html.fixPathsInCssText=function(_6c,URI){
-if(!_6c||!URI){
-return;
-}
-var _6e,str="",url="",_71="[\\t\\s\\w\\(\\)\\/\\.\\\\'\"-:#=&?~]+";
-var _72=new RegExp("url\\(\\s*("+_71+")\\s*\\)");
-var _73=/(file|https?|ftps?):\/\//;
-regexTrim=new RegExp("^[\\s]*(['\"]?)("+_71+")\\1[\\s]*?$");
-if(dojo.render.html.ie55||dojo.render.html.ie60){
-var _74=new RegExp("AlphaImageLoader\\((.*)src=['\"]("+_71+")['\"]");
-while(_6e=_74.exec(_6c)){
-url=_6e[2].replace(regexTrim,"$2");
-if(!_73.exec(url)){
-url=(new dojo.uri.Uri(URI,url).toString());
-}
-str+=_6c.substring(0,_6e.index)+"AlphaImageLoader("+_6e[1]+"src='"+url+"'";
-_6c=_6c.substr(_6e.index+_6e[0].length);
-}
-_6c=str+_6c;
-str="";
-}
-while(_6e=_72.exec(_6c)){
-url=_6e[1].replace(regexTrim,"$2");
-if(!_73.exec(url)){
-url=(new dojo.uri.Uri(URI,url).toString());
-}
-str+=_6c.substring(0,_6e.index)+"url("+url+")";
-_6c=_6c.substr(_6e.index+_6e[0].length);
-}
-return str+_6c;
-};
-dojo.html.setActiveStyleSheet=function(_75){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
-a.disabled=true;
-if(a.getAttribute("title")==_75){
-a.disabled=false;
-}
-}
-}
-};
-dojo.html.getActiveStyleSheet=function(){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")&&!a.disabled){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.getPreferredStyleSheet=function(){
-var i=0,a,els=dojo.doc().getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("rel").indexOf("alt")==-1&&a.getAttribute("title")){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.applyBrowserClass=function(_7f){
-var drh=dojo.render.html;
-var _81={dj_ie:drh.ie,dj_ie55:drh.ie55,dj_ie6:drh.ie60,dj_ie7:drh.ie70,dj_iequirks:drh.ie&&drh.quirks,dj_opera:drh.opera,dj_opera8:drh.opera&&(Math.floor(dojo.render.version)==8),dj_opera9:drh.opera&&(Math.floor(dojo.render.version)==9),dj_khtml:drh.khtml,dj_safari:drh.safari,dj_gecko:drh.mozilla};
-for(var p in _81){
-if(_81[p]){
-dojo.html.addClass(_7f,p);
-}
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/util.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/util.js
deleted file mode 100644
index e8fe470..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/html/util.js
+++ /dev/null
@@ -1,343 +0,0 @@
-dojo.provide("dojo.html.util");
-dojo.require("dojo.html.layout");
-dojo.html.getElementWindow=function(_1){
-return dojo.html.getDocumentWindow(_1.ownerDocument);
-};
-dojo.html.getDocumentWindow=function(_2){
-if(dojo.render.html.safari&&!_2._parentWindow){
-var _3=function(_4){
-_4.document._parentWindow=_4;
-for(var i=0;i<_4.frames.length;i++){
-_3(_4.frames[i]);
-}
-};
-_3(window.top);
-}
-if(dojo.render.html.ie&&window!==document.parentWindow&&!_2._parentWindow){
-_2.parentWindow.execScript("document._parentWindow = window;","Javascript");
-var _6=_2._parentWindow;
-_2._parentWindow=null;
-return _6;
-}
-return _2._parentWindow||_2.parentWindow||_2.defaultView;
-};
-dojo.html.gravity=function(_7,e){
-_7=dojo.byId(_7);
-var _9=dojo.html.getCursorPosition(e);
-with(dojo.html){
-var _a=getAbsolutePosition(_7,true);
-var bb=getBorderBox(_7);
-var _c=_a.x+(bb.width/2);
-var _d=_a.y+(bb.height/2);
-}
-with(dojo.html.gravity){
-return ((_9.x<_c?WEST:EAST)|(_9.y<_d?NORTH:SOUTH));
-}
-};
-dojo.html.gravity.NORTH=1;
-dojo.html.gravity.SOUTH=1<<1;
-dojo.html.gravity.EAST=1<<2;
-dojo.html.gravity.WEST=1<<3;
-dojo.html.overElement=function(_e,e){
-_e=dojo.byId(_e);
-var _10=dojo.html.getCursorPosition(e);
-var bb=dojo.html.getBorderBox(_e);
-var _12=dojo.html.getAbsolutePosition(_e,true,dojo.html.boxSizing.BORDER_BOX);
-var top=_12.y;
-var _14=top+bb.height;
-var _15=_12.x;
-var _16=_15+bb.width;
-return (_10.x>=_15&&_10.x<=_16&&_10.y>=top&&_10.y<=_14);
-};
-dojo.html.renderedTextContent=function(_17){
-_17=dojo.byId(_17);
-var _18="";
-if(_17==null){
-return _18;
-}
-for(var i=0;i<_17.childNodes.length;i++){
-switch(_17.childNodes[i].nodeType){
-case 1:
-case 5:
-var _1a="unknown";
-try{
-_1a=dojo.html.getStyle(_17.childNodes[i],"display");
-}
-catch(E){
-}
-switch(_1a){
-case "block":
-case "list-item":
-case "run-in":
-case "table":
-case "table-row-group":
-case "table-header-group":
-case "table-footer-group":
-case "table-row":
-case "table-column-group":
-case "table-column":
-case "table-cell":
-case "table-caption":
-_18+="\n";
-_18+=dojo.html.renderedTextContent(_17.childNodes[i]);
-_18+="\n";
-break;
-case "none":
-break;
-default:
-if(_17.childNodes[i].tagName&&_17.childNodes[i].tagName.toLowerCase()=="br"){
-_18+="\n";
-}else{
-_18+=dojo.html.renderedTextContent(_17.childNodes[i]);
-}
-break;
-}
-break;
-case 3:
-case 2:
-case 4:
-var _1b=_17.childNodes[i].nodeValue;
-var _1c="unknown";
-try{
-_1c=dojo.html.getStyle(_17,"text-transform");
-}
-catch(E){
-}
-switch(_1c){
-case "capitalize":
-var _1d=_1b.split(" ");
-for(var i=0;i<_1d.length;i++){
-_1d[i]=_1d[i].charAt(0).toUpperCase()+_1d[i].substring(1);
-}
-_1b=_1d.join(" ");
-break;
-case "uppercase":
-_1b=_1b.toUpperCase();
-break;
-case "lowercase":
-_1b=_1b.toLowerCase();
-break;
-default:
-break;
-}
-switch(_1c){
-case "nowrap":
-break;
-case "pre-wrap":
-break;
-case "pre-line":
-break;
-case "pre":
-break;
-default:
-_1b=_1b.replace(/\s+/," ");
-if(/\s$/.test(_18)){
-_1b.replace(/^\s/,"");
-}
-break;
-}
-_18+=_1b;
-break;
-default:
-break;
-}
-}
-return _18;
-};
-dojo.html.createNodesFromText=function(txt,_1f){
-if(_1f){
-txt=txt.replace(/^\s+|\s+$/g,"");
-}
-var tn=dojo.doc().createElement("div");
-tn.style.visibility="hidden";
-dojo.body().appendChild(tn);
-var _21="none";
-if((/^<t[dh][\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table><tbody><tr>"+txt+"</tr></tbody></table>";
-_21="cell";
-}else{
-if((/^<tr[\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table><tbody>"+txt+"</tbody></table>";
-_21="row";
-}else{
-if((/^<(thead|tbody|tfoot)[\s\r\n>]/i).test(txt.replace(/^\s+/))){
-txt="<table>"+txt+"</table>";
-_21="section";
-}
-}
-}
-tn.innerHTML=txt;
-if(tn["normalize"]){
-tn.normalize();
-}
-var _22=null;
-switch(_21){
-case "cell":
-_22=tn.getElementsByTagName("tr")[0];
-break;
-case "row":
-_22=tn.getElementsByTagName("tbody")[0];
-break;
-case "section":
-_22=tn.getElementsByTagName("table")[0];
-break;
-default:
-_22=tn;
-break;
-}
-var _23=[];
-for(var x=0;x<_22.childNodes.length;x++){
-_23.push(_22.childNodes[x].cloneNode(true));
-}
-tn.style.display="none";
-dojo.html.destroyNode(tn);
-return _23;
-};
-dojo.html.placeOnScreen=function(_25,_26,_27,_28,_29,_2a,_2b){
-if(_26 instanceof Array||typeof _26=="array"){
-_2b=_2a;
-_2a=_29;
-_29=_28;
-_28=_27;
-_27=_26[1];
-_26=_26[0];
-}
-if(_2a instanceof String||typeof _2a=="string"){
-_2a=_2a.split(",");
-}
-if(!isNaN(_28)){
-_28=[Number(_28),Number(_28)];
-}else{
-if(!(_28 instanceof Array||typeof _28=="array")){
-_28=[0,0];
-}
-}
-var _2c=dojo.html.getScroll().offset;
-var _2d=dojo.html.getViewport();
-_25=dojo.byId(_25);
-var _2e=_25.style.display;
-_25.style.display="";
-var bb=dojo.html.getBorderBox(_25);
-var w=bb.width;
-var h=bb.height;
-_25.style.display=_2e;
-if(!(_2a instanceof Array||typeof _2a=="array")){
-_2a=["TL"];
-}
-var _32,_33,_34=Infinity,_35;
-for(var _36=0;_36<_2a.length;++_36){
-var _37=_2a[_36];
-var _38=true;
-var _39=_26-(_37.charAt(1)=="L"?0:w)+_28[0]*(_37.charAt(1)=="L"?1:-1);
-var _3a=_27-(_37.charAt(0)=="T"?0:h)+_28[1]*(_37.charAt(0)=="T"?1:-1);
-if(_29){
-_39-=_2c.x;
-_3a-=_2c.y;
-}
-if(_39<0){
-_39=0;
-_38=false;
-}
-if(_3a<0){
-_3a=0;
-_38=false;
-}
-var x=_39+w;
-if(x>_2d.width){
-x=_2d.width-w;
-_38=false;
-}else{
-x=_39;
-}
-x=Math.max(_28[0],x)+_2c.x;
-var y=_3a+h;
-if(y>_2d.height){
-y=_2d.height-h;
-_38=false;
-}else{
-y=_3a;
-}
-y=Math.max(_28[1],y)+_2c.y;
-if(_38){
-_32=x;
-_33=y;
-_34=0;
-_35=_37;
-break;
-}else{
-var _3d=Math.pow(x-_39-_2c.x,2)+Math.pow(y-_3a-_2c.y,2);
-if(_34>_3d){
-_34=_3d;
-_32=x;
-_33=y;
-_35=_37;
-}
-}
-}
-if(!_2b){
-_25.style.left=_32+"px";
-_25.style.top=_33+"px";
-}
-return {left:_32,top:_33,x:_32,y:_33,dist:_34,corner:_35};
-};
-dojo.html.placeOnScreenPoint=function(_3e,_3f,_40,_41,_42){
-dojo.deprecated("dojo.html.placeOnScreenPoint","use dojo.html.placeOnScreen() instead","0.5");
-return dojo.html.placeOnScreen(_3e,_3f,_40,_41,_42,["TL","TR","BL","BR"]);
-};
-dojo.html.placeOnScreenAroundElement=function(_43,_44,_45,_46,_47,_48){
-var _49,_4a=Infinity;
-_44=dojo.byId(_44);
-var _4b=_44.style.display;
-_44.style.display="";
-var mb=dojo.html.getElementBox(_44,_46);
-var _4d=mb.width;
-var _4e=mb.height;
-var _4f=dojo.html.getAbsolutePosition(_44,true,_46);
-_44.style.display=_4b;
-for(var _50 in _47){
-var pos,_52,_53;
-var _54=_47[_50];
-_52=_4f.x+(_50.charAt(1)=="L"?0:_4d);
-_53=_4f.y+(_50.charAt(0)=="T"?0:_4e);
-pos=dojo.html.placeOnScreen(_43,_52,_53,_45,true,_54,true);
-if(pos.dist==0){
-_49=pos;
-break;
-}else{
-if(_4a>pos.dist){
-_4a=pos.dist;
-_49=pos;
-}
-}
-}
-if(!_48){
-_43.style.left=_49.left+"px";
-_43.style.top=_49.top+"px";
-}
-return _49;
-};
-dojo.html.scrollIntoView=function(_55){
-if(!_55){
-return;
-}
-if(dojo.render.html.ie){
-if(dojo.html.getBorderBox(_55.parentNode).height<=_55.parentNode.scrollHeight){
-_55.scrollIntoView(false);
-}
-}else{
-if(dojo.render.html.mozilla){
-_55.scrollIntoView(false);
-}else{
-var _56=_55.parentNode;
-var _57=_56.scrollTop+dojo.html.getBorderBox(_56).height;
-var _58=_55.offsetTop+dojo.html.getMarginBox(_55).height;
-if(_57<_58){
-_56.scrollTop+=(_58-_57);
-}else{
-if(_56.scrollTop>_55.offsetTop){
-_56.scrollTop-=(_56.scrollTop-_55.offsetTop);
-}
-}
-}
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/README b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/README
deleted file mode 100644
index f96be71..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/README
+++ /dev/null
@@ -1,6 +0,0 @@
-All files within this directory and subdirectories were manually derived from http://unicode.org/cldr
-
-See terms of use: http://www.unicode.org/copyright.html#Exhibit1
-
-Eventually, this data should be generated directly from the XML in the CLDR repository to provide
-accurate and full support for the full set of locales.
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/de/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/de/gregorian.js
deleted file mode 100644
index 5f55f27..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/de/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"field-weekday":"Wochentag","dateFormat-medium":"dd.MM.yyyy","field-second":"Sekunde","field-week":"Woche","pm":"nachm.","timeFormat-full":"H:mm' Uhr 'z","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"vorm.","days-standAlone-narrow":["S","M","D","M","D","F","S"],"field-year":"Jahr","eras":["v. Chr.","n. Chr."],"field-hour":"Stunde","dateFormat-long":"d. MMMM yyyy","field-day":"Tag","field-dayperiod":"Tagesh\xe4lfte","field-month":"Monat","dateFormat-short":"dd.MM.yy","months-format-wide":["Januar","Februar","M\xe4rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"field-era":"Epoche","months-format-abbr":["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dateFormat-full":"EEEE, d. MMMM yyyy","field-zone":"Zone","days-format-abbr":["So","Mo","Di","Mi","Do","Fr","Sa"],"field-minute":"Minute","timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/el/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/el/gregorian.js
deleted file mode 100644
index 1c87eaf..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/el/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"field-weekday":"Day of the Week","dateFormat-medium":"yyyy MMM d","field-second":"Second","field-week":"Week","pm":"PM","timeFormat-full":"HH:mm:ss z","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"am":"AM","days-standAlone-narrow":["1","2","3","4","5","6","7"],"field-year":"Year","eras":["BCE","CE"],"field-minute":"Minute","timeFormat-medium":"HH:mm:ss","field-hour":"Hour","dateFormat-long":"yyyy MMMM d","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-era":"Era","timeFormat-short":"HH:mm","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-long":"HH:mm:ss z","days-format-wide":["1","2","3","4","5","6","7"],"dateFormat-full":"EEEE, yyyy MMMM dd","field-zone":"Zone","days-format-abbr":["1","2","3","4","5","6","7"]});

diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/el/gregorianExtras.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/el/gregorianExtras.js
deleted file mode 100644
index 4584000..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/el/gregorianExtras.js
+++ /dev/null
@@ -1 +0,0 @@
-({"dateFormat-yearOnly":"yyyy"});

diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/en/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/en/gregorian.js
deleted file mode 100644
index 5866dd5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/en/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormat-long":"MMMM d, yyyy","timeFormat-full":"h:mm:ss a v","eras":["BC","AD"],"timeFormat-medium":"h:mm:ss a","dateFormat-medium":"MMM d, yyyy","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormat-full":"EEEE, MMMM d, yyyy","days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"timeFormat-long":"h:mm:ss a z","timeFormat-short":"h:mm a","dateFormat-short":"M/d/yy","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"days-standAlone-narrow":["S","M","T","W","T","F","S"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","pm":"PM","am":"AM","field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","field-zone":"Zone"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/es/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/es/gregorian.js
deleted file mode 100644
index 353c368..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/es/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"field-weekday":"d\xeda de la semana","dateFormat-medium":"dd-MMM-yy","field-second":"segundo","field-week":"semana","pm":"p.m.","timeFormat-full":"HH'H'mm''ss\" z","months-standAlone-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"am":"a.m.","days-standAlone-narrow":["D","L","M","M","J","V","S"],"field-year":"a\xf1o","eras":["a.C.","d.C."],"field-minute":"minuto","field-hour":"hora","dateFormat-long":"d' de 'MMMM' de 'yyyy","field-day":"d\xeda","field-dayperiod":"periodo del d\xeda","field-month":"mes","dateFormat-short":"d/MM/yy","months-format-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"field-era":"era","months-format-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"days-format-wide":["domingo","lunes","martes","mi\xe9rcoles","jueves","viernes","s\xe1bado"],"dateFormat-full":"EEEE d' de 'MMMM' de 'yyyy","field-zone":"zona","days-format-abbr":["dom","lun","mar","mi\xe9","jue","vie","s\xe1b"],"timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/fi/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/fi/gregorian.js
deleted file mode 100644
index 49e0c48..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/fi/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"field-weekday":"viikonp\xe4iv\xe4","dateFormat-medium":"d.M.yyyy","field-second":"sekunti","field-week":"viikko","pm":"ip.","timeFormat-full":"H.mm.ss v","months-standAlone-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"am":"ap.","days-standAlone-narrow":["S","M","T","K","T","P","L"],"field-year":"vuosi","eras":["eKr.","jKr."],"field-minute":"minuutti","timeFormat-medium":"H.mm.ss","field-hour":"tunti","dateFormat-long":"d. MMMM'ta 'yyyy","field-day":"p\xe4iv\xe4","field-dayperiod":"ap/ip-valinta","field-month":"kuukausi","dateFormat-short":"d.M.yyyy","months-format-wide":["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kes\xe4kuu","hein\xe4kuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],"field-era":"aikakausi","timeFormat-short":"H.mm","months-format-abbr":["tammi","helmi","maalis","huhti","touko","kes\xe4","hein\xe4","elo","syys","loka","marras","joulu"],"timeFormat-long":"'klo 'H.mm.ss","days-format-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormat-full":"EEEE'na 'd. MMMM'ta 'yyyy","field-zone":"aikavy\xf6hyke","days-format-abbr":["su","ma","ti","ke","to","pe","la"]});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/fr/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/fr/gregorian.js
deleted file mode 100644
index 3187832..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/fr/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"field-weekday":"jour de la semaine","dateFormat-medium":"d MMM yy","field-second":"seconde","field-week":"semaine","pm":"ap. m.","timeFormat-full":"HH' h 'mm z","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"matin","days-standAlone-narrow":["D","L","M","M","J","V","S"],"field-year":"ann\xe9e","eras":["av. J.-C.","apr. J.-C."],"field-minute":"minute","field-hour":"heure","dateFormat-long":"d MMMM yyyy","field-day":"jour","field-dayperiod":"p\xe9riode de la journ\xe9e","field-month":"mois","dateFormat-short":"dd/MM/yy","months-format-wide":["janvier","f\xe9vrier","mars","avril","mai","juin","juillet","ao\xfbt","septembre","octobre","novembre","d\xe9cembre"],"field-era":"\xe9poque","months-format-abbr":["janv.","f\xe9vr.","mars","avr.","mai","juin","juil.","ao\xfbt","sept.","oct.","nov.","d\xe9c."],"days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormat-full":"EEEE d MMMM yyyy","field-zone":"zone","days-format-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/gregorian.js
deleted file mode 100644
index f52a6f1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"field-weekday":"Day of the Week","dateFormat-medium":"yyyy MMM d","field-second":"Second","field-week":"Week","pm":"PM","timeFormat-full":"HH:mm:ss z","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"am":"AM","days-standAlone-narrow":["1","2","3","4","5","6","7"],"field-year":"Year","eras":["BCE","CE"],"field-minute":"Minute","timeFormat-medium":"HH:mm:ss","field-hour":"Hour","dateFormat-long":"yyyy MMMM d","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-era":"Era","timeFormat-short":"HH:mm","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-long":"HH:mm:ss z","days-format-wide":["1","2","3","4","5","6","7"],"dateFormat-full":"EEEE, yyyy MMMM dd","field-zone":"Zone","days-format-abbr":["1","2","3","4","5","6","7"]});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/gregorianExtras.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/gregorianExtras.js
deleted file mode 100644
index 2e6c98a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/gregorianExtras.js
+++ /dev/null
@@ -1 +0,0 @@
-({"dateFormat-yearOnly":"yyyy"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/hu/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/hu/gregorian.js
deleted file mode 100644
index da3e03b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/hu/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"field-weekday":"h\xe9t napja","dateFormat-medium":"yyyy MMM d","field-second":"m\xe1sodperc","field-week":"h\xe9t","pm":"d.u.","timeFormat-full":"h:mm:ss a v","months-standAlone-narrow":["J","F","M","\xc1","M","J","J","A","S","O","N","D"],"am":"d.e.","days-standAlone-narrow":["V","H","K","Sz","Cs","P","Sz"],"field-year":"\xe9v","eras":["k.e.","k.u."],"field-minute":"perc","timeFormat-medium":"h:mm:ss a","field-hour":"\xf3ra","dateFormat-long":"yyyy MMMM d","field-day":"nap","field-dayperiod":"napszak","field-month":"h\xf3nap","dateFormat-short":"yyyy-M-d","months-format-wide":["janu\xe1r","febru\xe1r","m\xe1rcius","\xe1prilis","m\xe1jus","j\xfanius","j\xfalius","augusztus","szeptember","okt\xf3ber","november","december"],"field-era":"\xe9ra","timeFormat-short":"h:mm a","months-format-abbr":["jan","feb","m\xe1r","apr","m\xe1j","j\xfan","j\xfal","aug","sze","okt","nov","dec"],"timeFormat-long":"h:mm:ss a z","days-format-wide":["vas\xe1rnap","h\xe9tf\u0151","kedd","szerda","cs\xfct\xf6rt\xf6k","p\xe9ntek","szombat"],"dateFormat-full":"yyyy MMMM d, EEEE","field-zone":"z\xf3na","days-format-abbr":["Va","H\xe9","Ke","Sze","Cs\xfc","P\xe9","Szo"]});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/it/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/it/gregorian.js
deleted file mode 100644
index 579955d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/it/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"field-weekday":"giorno della settimana","dateFormat-medium":"dd/MMM/yy","field-second":"secondo","field-week":"settimana","pm":"p.","months-standAlone-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"am":"m.","days-standAlone-narrow":["D","L","M","M","G","V","S"],"field-year":"anno","eras":["aC","dC"],"field-minute":"minuto","field-hour":"ora","dateFormat-long":"dd MMMM yyyy","field-day":"giorno","field-dayperiod":"periodo del giorno","field-month":"mese","dateFormat-short":"dd/MM/yy","months-format-wide":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"field-era":"era","months-format-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"days-format-wide":["domenica","luned\xec","marted\xec","mercoled\xec","gioved\xec","venerd\xec","sabato"],"dateFormat-full":"EEEE d MMMM yyyy","field-zone":"zona","days-format-abbr":["dom","lun","mar","mer","gio","ven","sab"],"timeFormat-full":"HH:mm:ss z","timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/ja/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/ja/gregorian.js
deleted file mode 100644
index f3431cc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/ja/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"days-standAlone-narrow":["\u65e5","\u6708","\u706b","\u6c34","\u6728","\u91d1","\u571f"],"timeFormat-full":"H'\u6642'mm'\u5206'ss'\u79d2'z","eras":["\u7d00\u5143\u524d","\u897f\u66a6"],"timeFormat-medium":"H:mm:ss","dateFormat-medium":"yyyy/MM/dd","am":"\u5348\u524d","months-format-abbr":["1 \u6708","2 \u6708","3 \u6708","4 \u6708","5 \u6708","6 \u6708","7 \u6708","8 \u6708","9 \u6708","10 \u6708","11 \u6708","12 \u6708"],"dateFormat-full":"yyyy'\u5e74'M'\u6708'd'\u65e5'EEEE","days-format-abbr":["\u65e5","\u6708","\u706b","\u6c34","\u6728","\u91d1","\u571f"],"timeFormat-long":"H:mm:ss:z","timeFormat-short":"H:mm","pm":"\u5348\u5f8c","months-format-wide":["1 \u6708","2 \u6708","3 \u6708","4 \u6708","5 \u6708","6 \u6708","7 \u6708","8 \u6708","9 \u6708","10 \u6708","11 \u6708","12 \u6708"],"dateFormat-long":"yyyy'\u5e74'M'\u6708'd'\u65e5'","days-format-wide":["\u65e5\u66dc\u65e5","\u6708\u66dc\u65e5","\u706b\u66dc\u65e5","\u6c34\u66dc\u65e5","\u6728\u66dc\u65e5","\u91d1\u66dc\u65e5","\u571f\u66dc\u65e5"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","field-era":"Era","field-zone":"Zone"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/ja/gregorianExtras.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/ja/gregorianExtras.js
deleted file mode 100644
index 680bc49..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/ja/gregorianExtras.js
+++ /dev/null
@@ -1 +0,0 @@
-({"dateFormat-yearOnly":"yyyy\u5e74"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/ko/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/ko/gregorian.js
deleted file mode 100644
index fb7d210..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/ko/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"months-standAlone-narrow":["1\uc6d4","2\uc6d4","3\uc6d4","4\uc6d4","5\uc6d4","6\uc6d4","7\uc6d4","8\uc6d4","9\uc6d4","10\uc6d4","11\uc6d4","12\uc6d4"],"dateFormat-long":"yyyy'\ub144' M'\uc6d4' d'\uc77c'","timeFormat-full":"a hh'\uc2dc' mm'\ubd84' ss'\ucd08' z","eras":["\uae30\uc6d0\uc804","\uc11c\uae30"],"timeFormat-medium":"a hh'\uc2dc' mm'\ubd84'","dateFormat-medium":"yyyy. MM. dd","am":"\uc624\uc804","months-format-abbr":["1\uc6d4","2\uc6d4","3\uc6d4","4\uc6d4","5\uc6d4","6\uc6d4","7\uc6d4","8\uc6d4","9\uc6d4","10\uc6d4","11\uc6d4","12\uc6d4"],"dateFormat-full":"yyyy'\ub144' M'\uc6d4' d'\uc77c' EEEE","days-format-abbr":["\uc77c","\uc6d4","\ud654","\uc218","\ubaa9","\uae08","\ud1a0"],"timeFormat-long":"a hh'\uc2dc' mm'\ubd84' ss'\ucd08'","timeFormat-short":"a hh'\uc2dc' mm'\ubd84'","dateFormat-short":"yy. MM. dd","pm":"\uc624\ud6c4","months-format-wide":["1\uc6d4","2\uc6d4","3\uc6d4","4\uc6d4","5\uc6d4","6\uc6d4","7\uc6d4","8\uc6d4","9\uc6d4","10\uc6d4","11\uc6d4","12\uc6d4"],"days-standAlone-narrow":["\uc77c","\uc6d4","\ud654","\uc218","\ubaa9","\uae08","\ud1a0"],"days-format-wide":["\uc77c\uc694\uc77c","\uc6d4\uc694\uc77c","\ud654\uc694\uc77c","\uc218\uc694\uc77c","\ubaa9\uc694\uc77c","\uae08\uc694\uc77c","\ud1a0\uc694\uc77c"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","field-zone":"Zone"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/nl/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/nl/gregorian.js
deleted file mode 100644
index 65bc85a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/nl/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"dateFormat-medium":"d MMM yyyy","field-second":"Seconde","timeFormat-full":"HH:mm:ss v","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"field-year":"Jaar","eras":["v. Chr.","n. Chr."],"field-minute":"Minuut","field-hour":"Uur","dateFormat-long":"d MMMM yyyy","field-day":"Dag","field-dayperiod":"Dagdeel","field-month":"Maand","dateFormat-short":"dd-MM-yy","months-format-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"field-era":"Tijdperk","months-format-abbr":["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],"days-format-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"dateFormat-full":"EEEE d MMMM yyyy","days-format-abbr":["zo","ma","di","wo","do","vr","za"],"field-weekday":"Dag van de week","field-week":"Week","pm":"PM","am":"AM","timeFormat-medium":"HH:mm:ss","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","field-zone":"Zone"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/pt-br/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/pt-br/gregorian.js
deleted file mode 100644
index 9779ebc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/pt-br/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"field-hour":"Hora","field-dayperiod":"Per\xedodo do dia","field-minute":"Minuto","timeFormat-full":"HH'h'mm'min'ss's' z","field-weekday":"Dia da semana","field-week":"Semana","field-second":"Segundo","dateFormat-medium":"dd/MM/yyyy","field-day":"Dia","timeFormat-long":"H'h'm'min's's' z","field-month":"M\xeas","field-year":"Ano","dateFormat-short":"dd/MM/yy","field-zone":"Fuso","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormat-long":"d' de 'MMMM' de 'yyyy","eras":["a.C.","d.C."],"months-format-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"dateFormat-full":"EEEE, d' de 'MMMM' de 'yyyy","days-format-abbr":["dom","seg","ter","qua","qui","sex","s\xe1b"],"months-format-wide":["janeiro","fevereiro","mar\xe7o","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"days-format-wide":["domingo","segunda-feira","ter\xe7a-feira","quarta-feira","quinta-feira","sexta-feira","s\xe1bado"],"pm":"PM","am":"AM","timeFormat-medium":"HH:mm:ss","field-era":"Era","timeFormat-short":"HH:mm"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/pt/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/pt/gregorian.js
deleted file mode 100644
index 00120f7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/pt/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormat-long":"d' de 'MMMM' de 'yyyy","timeFormat-full":"HH'H'mm'm'ss's' z","eras":["a.C.","d.C."],"dateFormat-medium":"d/MMM/yyyy","months-format-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"dateFormat-full":"EEEE, d' de 'MMMM' de 'yyyy","days-format-abbr":["dom","seg","ter","qua","qui","sex","s\xe1b"],"dateFormat-short":"dd-MM-yyyy","months-format-wide":["janeiro","fevereiro","mar\xe7o","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"days-format-wide":["domingo","segunda-feira","ter\xe7a-feira","quarta-feira","quinta-feira","sexta-feira","s\xe1bado"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","pm":"PM","am":"AM","field-year":"Year","field-minute":"Minute","timeFormat-medium":"HH:mm:ss","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","field-zone":"Zone"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/sv/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/sv/gregorian.js
deleted file mode 100644
index eb864a8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/sv/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"field-weekday":"veckodag","dateFormat-medium":"d MMM yyyy","field-second":"sekund","field-week":"vecka","pm":"em","timeFormat-full":"'kl. 'HH.mm.ss z","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"fm","days-standAlone-narrow":["S","M","T","O","T","F","L"],"field-year":"\xe5r","eras":["f.Kr.","e.Kr."],"field-minute":"minut","timeFormat-medium":"HH.mm.ss","field-hour":"timme","dateFormat-long":"EEEE d MMM yyyy","field-day":"dag","field-dayperiod":"dagsperiod","field-month":"m\xe5nad","dateFormat-short":"yyyy-MM-dd","months-format-wide":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],"field-era":"era","timeFormat-short":"HH.mm","months-format-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"timeFormat-long":"HH.mm.ss z","days-format-wide":["s\xf6ndag","m\xe5ndag","tisdag","onsdag","torsdag","fredag","l\xf6rdag"],"dateFormat-full":"EEEE'en den' d MMMM yyyy","field-zone":"tidszon","days-format-abbr":["s\xf6","m\xe5","ti","on","to","fr","l\xf6"]});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh-cn/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh-cn/gregorian.js
deleted file mode 100644
index 6f91c7b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh-cn/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"dateFormat-medium":"yyyy-M-d","field-second":"\u79d2\u949f","field-week":"\u5468","timeFormat-full":"ahh'\u65f6'mm'\u5206'ss'\u79d2' z","field-year":"\u5e74","field-minute":"\u5206\u949f","timeFormat-medium":"ahh:mm:ss","field-hour":"\u5c0f\u65f6","dateFormat-long":"yyyy'\u5e74'M'\u6708'd'\u65e5'","field-day":"\u65e5","field-dayperiod":"\u4e0a\u5348/\u4e0b\u5348","field-month":"\u6708","dateFormat-short":"yy-M-d","field-era":"\u65f6\u671f","timeFormat-short":"ah:mm","timeFormat-long":"ahh'\u65f6'mm'\u5206'ss'\u79d2'","dateFormat-full":"yyyy'\u5e74'M'\u6708'd'\u65e5'EEEE","field-weekday":"\u5468\u5929","field-zone":"\u533a\u57df","days-standAlone-narrow":["\u65e5","\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d"],"eras":["\u516c\u5143\u524d","\u516c\u5143"],"am":"\u4e0a\u5348","months-format-abbr":["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"],"days-format-abbr":["\u5468\u65e5","\u5468\u4e00","\u5468\u4e8c","\u5468\u4e09","\u5468\u56db","\u5468\u4e94","\u5468\u516d"],"pm":"\u4e0b\u5348","months-format-wide":["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"],"months-standAlone-narrow":["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],"days-format-wide":["\u661f\u671f\u65e5","\u661f\u671f\u4e00","\u661f\u671f\u4e8c","\u661f\u671f\u4e09","\u661f\u671f\u56db","\u661f\u671f\u4e94","\u661f\u671f\u516d"]});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh-hk/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh-hk/gregorian.js
deleted file mode 100644
index 400cb6d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh-hk/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"timeFormat-full":"ahh'\u6642'mm'\u5206'ss'\u79d2' z","eras":["\u897f\u5143\u524d","\u897f\u5143"],"timeFormat-medium":"a h:mm:ss","dateFormat-medium":"yyyy/M/d","dateFormat-full":"yyyy'\u5e74'M'\u6708'd'\u65e5'EEEE","days-format-abbr":["\u9031\u65e5","\u9031\u4e00","\u9031\u4e8c","\u9031\u4e09","\u9031\u56db","\u9031\u4e94","\u9031\u516d"],"timeFormat-long":"ahh'\u6642'mm'\u5206'ss'\u79d2'","timeFormat-short":"a h:mm","dateFormat-short":"yyyy/M/d","dateFormat-long":"yyyy'\u5e74'M'\u6708'd'\u65e5'","days-standAlone-narrow":["\u65e5","\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d"],"am":"\u4e0a\u5348","months-format-abbr":["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"],"pm":"\u4e0b\u5348","months-format-wide":["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"],"months-standAlone-narrow":["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],"days-format-wide":["\u661f\u671f\u65e5","\u661f\u671f\u4e00","\u661f\u671f\u4e8c","\u661f\u671f\u4e09","\u661f\u671f\u56db","\u661f\u671f\u4e94","\u661f\u671f\u516d"],"field-weekday":"Day of the Week","field-second":"Second","field-week":"Week","field-year":"Year","field-minute":"Minute","field-hour":"Hour","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","field-era":"Era","field-zone":"Zone"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh-tw/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh-tw/gregorian.js
deleted file mode 100644
index dd3912c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh-tw/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"dateFormat-medium":"yyyy'\u5e74'M'\u6708'd'\u65e5'","field-second":"\u79d2","field-week":"\u9031","timeFormat-full":"ahh'\u6642'mm'\u5206'ss'\u79d2' z","eras":["\u897f\u5143\u524d","\u897f\u5143"],"field-year":"\u5e74","field-minute":"\u5206\u9418","timeFormat-medium":"ahh:mm:ss","field-hour":"\u5c0f\u6642","dateFormat-long":"yyyy'\u5e74'M'\u6708'd'\u65e5'","field-day":"\u6574\u65e5","field-dayperiod":"\u65e5\u9593","field-month":"\u6708","dateFormat-short":"yy'\u5e74'M'\u6708'd'\u65e5'","field-era":"\u5e74\u4ee3","timeFormat-short":"ah:mm","months-format-abbr":["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],"timeFormat-long":"ahh'\u6642'mm'\u5206'ss'\u79d2'","field-weekday":"\u9031\u5929","dateFormat-full":"yyyy'\u5e74'M'\u6708'd'\u65e5'EEEE","field-zone":"\u5340\u57df","days-standAlone-narrow":["\u65e5","\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d"],"am":"\u4e0a\u5348","days-format-abbr":["\u5468\u65e5","\u5468\u4e00","\u5468\u4e8c","\u5468\u4e09","\u5468\u56db","\u5468\u4e94","\u5468\u516d"],"pm":"\u4e0b\u5348","months-format-wide":["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"],"months-standAlone-narrow":["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],"days-format-wide":["\u661f\u671f\u65e5","\u661f\u671f\u4e00","\u661f\u671f\u4e8c","\u661f\u671f\u4e09","\u661f\u671f\u56db","\u661f\u671f\u4e94","\u661f\u671f\u516d"]});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh/gregorian.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh/gregorian.js
deleted file mode 100644
index 343a21a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh/gregorian.js
+++ /dev/null
@@ -1 +0,0 @@
-({"days-standAlone-narrow":["\u65e5","\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d"],"eras":["\u516c\u5143\u524d","\u516c\u5143"],"am":"\u4e0a\u5348","months-format-abbr":["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"],"days-format-abbr":["\u5468\u65e5","\u5468\u4e00","\u5468\u4e8c","\u5468\u4e09","\u5468\u56db","\u5468\u4e94","\u5468\u516d"],"pm":"\u4e0b\u5348","months-format-wide":["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"],"months-standAlone-narrow":["1\u6708","2\u6708","3\u6708","4\u6708","5\u6708","6\u6708","7\u6708","8\u6708","9\u6708","10\u6708","11\u6708","12\u6708"],"days-format-wide":["\u661f\u671f\u65e5","\u661f\u671f\u4e00","\u661f\u671f\u4e8c","\u661f\u671f\u4e09","\u661f\u671f\u56db","\u661f\u671f\u4e94","\u661f\u671f\u516d"],"field-weekday":"Day of the Week","dateFormat-medium":"yyyy MMM d","field-second":"Second","field-week":"Week","timeFormat-full":"HH:mm:ss z","field-year":"Year","field-minute":"Minute","timeFormat-medium":"HH:mm:ss","field-hour":"Hour","dateFormat-long":"yyyy MMMM d","field-day":"Day","field-dayperiod":"Dayperiod","field-month":"Month","dateFormat-short":"yy/MM/dd","field-era":"Era","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","dateFormat-full":"EEEE, yyyy MMMM dd","field-zone":"Zone"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh/gregorianExtras.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh/gregorianExtras.js
deleted file mode 100644
index dfde322..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/calendar/nls/zh/gregorianExtras.js
+++ /dev/null
@@ -1 +0,0 @@
-({"dateFormat-yearOnly":"yyyy'\u5e74'"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/common.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/common.js
deleted file mode 100644
index 23e5d36..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/common.js
+++ /dev/null
@@ -1,31 +0,0 @@
-dojo.provide("dojo.i18n.common");
-dojo.i18n.getLocalization=function(_1,_2,_3){
-dojo.hostenv.preloadLocalizations();
-_3=dojo.hostenv.normalizeLocale(_3);
-var _4=_3.split("-");
-var _5=[_1,"nls",_2].join(".");
-var _6=dojo.hostenv.findModule(_5,true);
-var _7;
-for(var i=_4.length;i>0;i--){
-var _9=_4.slice(0,i).join("_");
-if(_6[_9]){
-_7=_6[_9];
-break;
-}
-}
-if(!_7){
-_7=_6.ROOT;
-}
-if(_7){
-var _a=function(){
-};
-_a.prototype=_7;
-return new _a();
-}
-dojo.raise("Bundle not found: "+_2+" in "+_1+" , locale="+_3);
-};
-dojo.i18n.isLTR=function(_b){
-var _c=dojo.hostenv.normalizeLocale(_b).split("-")[0];
-var _d={ar:true,fa:true,he:true,ur:true,yi:true};
-return !_d[_c];
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency.js
deleted file mode 100644
index 51fd823..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency.js
+++ /dev/null
@@ -1,125 +0,0 @@
-dojo.provide("dojo.i18n.currency");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.i18n.currency");
-dojo.require("dojo.regexp");
-dojo.require("dojo.i18n.common");
-dojo.require("dojo.i18n.number");
-dojo.require("dojo.lang.common");
-dojo.i18n.currency.format=function(_1,_2,_3,_4){
-_3=(typeof _3=="object")?_3:{};
-var _5=dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE,_2,_4);
-if(typeof _3.places=="undefined"){
-_3.places=_5.places;
-}
-if(typeof _3.places=="undefined"){
-_3.places=2;
-}
-_3.signed=false;
-var _6=dojo.i18n.number.format(_1,_3,_4);
-var _7=_5.symbol;
-if(_5.adjSpace=="symbol"){
-if(_5.placement=="after"){
-_7=" "+_7;
-}else{
-_7=_7+" ";
-}
-}
-if(_1<0){
-if(_5.signPlacement=="before"){
-_7="-"+_7;
-}else{
-if(_5.signPlacement=="after"){
-_7=_7+"-";
-}
-}
-}
-var _8=(_5.adjSpace=="number")?" ":"";
-if(_5.placement=="after"){
-_6=_6+_8+_7;
-}else{
-_6=_7+_8+_6;
-}
-if(_1<0){
-if(_5.signPlacement=="around"){
-_6="("+_6+")";
-}else{
-if(_5.signPlacement=="end"){
-_6=_6+"-";
-}else{
-if(!_5.signPlacement||_5.signPlacement=="begin"){
-_6="-"+_6;
-}
-}
-}
-}
-return _6;
-};
-dojo.i18n.currency.parse=function(_9,_a,_b,_c){
-if(typeof _c.validate=="undefined"){
-_c.validate=true;
-}
-if(_c.validate&&!dojo.i18n.number.isCurrency(_9,_a,_b,_c)){
-return Number.NaN;
-}
-var _d=(_9.indexOf("-")!=-1);
-var _e=_e.replace(/\-/,"");
-var _f=dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE,_a,_b);
-_e=_e.replace(new RegExp("\\"+_f.symbol),"");
-var _10=dojo.i18n.number.parse(_e,_b,_c);
-if(_d){
-_10=_10*-1;
-}
-return _10;
-};
-dojo.i18n.currency.isCurrency=function(_11,iso,_13,_14){
-_14=(typeof _14=="object")?_14:{};
-var _15=dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE,_13);
-if(typeof _14.separator=="undefined"){
-_14.separator=_15[0];
-}else{
-if(dojo.lang.isArray(_14.separator)&&_14.separator.length==0){
-_14.separator=[_15[0],""];
-}
-}
-if(typeof _14.decimal=="undefined"){
-_14.decimal=_15[2];
-}
-if(typeof _14.groupSize=="undefined"){
-_14.groupSize=_15[3];
-}
-if(typeof _14.groupSize2=="undefined"){
-_14.groupSize2=_15[4];
-}
-var _16=dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE,iso,_13);
-if(typeof _14.places=="undefined"){
-_14.places=_16.places;
-}
-if(typeof _14.places=="undefined"){
-_14.places=2;
-}
-if(typeof _14.symbol=="undefined"){
-_14.symbol=_16.symbol;
-}else{
-if(dojo.lang.isArray(_14.symbol)&&_14.symbol.length==0){
-_14.symbol=[_16.symbol,""];
-}
-}
-if(typeof _14.placement=="undefined"){
-_14.placement=_16.placement;
-}
-var re=new RegExp("^"+dojo.regexp.currency(_14)+"$");
-return re.test(_11);
-};
-dojo.i18n.currency._mapToLocalizedFormatData=function(_18,iso,_1a){
-var _1b=dojo.i18n.currency.FORMAT_TABLE[iso];
-if(!dojo.lang.isArray(_1b)){
-return _1b;
-}
-return dojo.i18n.number._mapToLocalizedFormatData(_1b[0],_1a);
-};
-(function(){
-var _1c={symbol:"\u062c",placement:"after",htmlSymbol:"?"};
-var _1d={symbol:"\u20ac",placement:"before",adjSpace:"symbol",htmlSymbol:"&euro;"};
-var _1e={symbol:"\u20ac",placement:"after",htmlSymbol:"&euro;"};
-dojo.i18n.currency.FORMAT_TABLE={AED:{symbol:"\u062c",placement:"after"},ARS:{symbol:"$",signPlacement:"after"},ATS:{symbol:"\u20ac",adjSpace:"number",signPlacement:"after",htmlSymbol:"&euro;"},AUD:{symbol:"$"},BOB:{symbol:"$b"},BRL:{symbol:"R$",adjSpace:"symbol"},BEF:_1e,BHD:_1c,CAD:[{"*":{symbol:"$"},"fr-ca":{symbol:"$",placement:"after",signPlacement:"around"}}],CHF:{symbol:"CHF",adjSpace:"symbol",signPlacement:"after"},CLP:{symbol:"$"},COP:{symbol:"$",signPlacement:"around"},CNY:{symbol:"\xa5",htmlSymbol:"&yen;"},CRC:{symbol:"\u20a1",signPlacement:"after",htmlSymbol:"?"},CZK:{symbol:"Kc",adjSpace:"symbol",signPlacement:"after"},DEM:_1e,DKK:{symbol:"kr.",adjSpace:"symbol",signPlacement:"after"},DOP:{symbol:"$"},DZD:_1c,ECS:{symbol:"$",signPlacement:"after"},EGP:_1c,ESP:_1e,EUR:_1d,FIM:_1e,FRF:_1e,GBP:{symbol:"\xa3",htmlSymbol:"&pound;"},GRD:{symbol:"\u20ac",signPlacement:"end",htmlSymbol:"&euro;"},GTQ:{symbol:"Q",signPlacement:"after"},HKD:{symbol:"HK$"},HNL:{symbol:"L.",signPlacement:"end"},HUF:{symbol:"Ft",placement:"after",adjSpace:"symbol"},IEP:{symbol:"\u20ac",htmlSymbol:"&euro;"},ILS:{symbol:"\u05e9\"\u05d7",placement:"after",htmlSymbol:"?"},INR:{symbol:"Rs."},ITL:{symbol:"\u20ac",signPlacement:"after",htmlSymbol:"&euro;"},JOD:_1c,JPY:{symbol:"\xa5",places:0,htmlSymbol:"&yen;"},KRW:{symbol:"\u20a9",places:0,htmlSymbol:"?"},KWD:_1c,LBP:_1c,LUF:_1e,MAD:_1c,MXN:{symbol:"$",signPlacement:"around"},NIO:{symbol:"C$",adjSpace:"symbol",signPlacement:"after"},NLG:{symbol:"\u20ac",signPlacement:"end",htmlSymbol:"&euro;"},NOK:{symbol:"kr",adjSpace:"symbol",signPlacement:"after"},NZD:{symbol:"$"},OMR:_1c,PAB:{symbol:"B/",adjSpace:"symbol",signPlacement:"after"},PEN:{symbol:"S/",signPlacement:"after"},PLN:{symbol:"z",placement:"after"},PTE:_1e,PYG:{symbol:"Gs.",signPlacement:"after"},QAR:_1c,RUR:{symbol:"rub.",placement:"after"},SAR:_1c,SEK:{symbol:"kr",placement:"after",adjSpace:"symbol"},SGD:{symbol:"$"},SVC:{symbol:"\u20a1",signPlacement:"after",adjSpace:"symbol"},SYP:_1c,TND:_1c,TRL:{symbol:"TL",placement:"after"},TWD:{symbol:"NT$"},USD:{symbol:"$"},UYU:{symbol:"$U",signplacement:"after",adjSpace:"symbol"},VEB:{symbol:"Bs",signplacement:"after",adjSpace:"symbol"},YER:_1c,ZAR:{symbol:"R",signPlacement:"around"}};
-})();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/common.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/common.js
deleted file mode 100644
index cb36e00..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/common.js
+++ /dev/null
@@ -1,125 +0,0 @@
-dojo.provide("dojo.i18n.currency.common");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.i18n.currency");
-dojo.require("dojo.regexp");
-dojo.require("dojo.i18n.common");
-dojo.require("dojo.i18n.number");
-dojo.require("dojo.lang.common");
-dojo.i18n.currency.format=function(_1,_2,_3,_4){
-_3=(typeof _3=="object")?_3:{};
-var _5=dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE,_2,_4);
-if(typeof _3.places=="undefined"){
-_3.places=_5.places;
-}
-if(typeof _3.places=="undefined"){
-_3.places=2;
-}
-_3.signed=false;
-var _6=dojo.i18n.number.format(_1,_3,_4);
-var _7=_5.symbol;
-if(_5.adjSpace=="symbol"){
-if(_5.placement=="after"){
-_7=" "+_7;
-}else{
-_7=_7+" ";
-}
-}
-if(_1<0){
-if(_5.signPlacement=="before"){
-_7="-"+_7;
-}else{
-if(_5.signPlacement=="after"){
-_7=_7+"-";
-}
-}
-}
-var _8=(_5.adjSpace=="number")?" ":"";
-if(_5.placement=="after"){
-_6=_6+_8+_7;
-}else{
-_6=_7+_8+_6;
-}
-if(_1<0){
-if(_5.signPlacement=="around"){
-_6="("+_6+")";
-}else{
-if(_5.signPlacement=="end"){
-_6=_6+"-";
-}else{
-if(!_5.signPlacement||_5.signPlacement=="begin"){
-_6="-"+_6;
-}
-}
-}
-}
-return _6;
-};
-dojo.i18n.currency.parse=function(_9,_a,_b,_c){
-if(typeof _c.validate=="undefined"){
-_c.validate=true;
-}
-if(_c.validate&&!dojo.i18n.number.isCurrency(_9,_a,_b,_c)){
-return Number.NaN;
-}
-var _d=(_9.indexOf("-")!=-1);
-var _e=_e.replace(/\-/,"");
-var _f=dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE,_a,_b);
-_e=_e.replace(new RegExp("\\"+_f.symbol),"");
-var _10=dojo.i18n.number.parse(_e,_b,_c);
-if(_d){
-_10=_10*-1;
-}
-return _10;
-};
-dojo.i18n.currency.isCurrency=function(_11,iso,_13,_14){
-_14=(typeof _14=="object")?_14:{};
-var _15=dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE,_13);
-if(typeof _14.separator=="undefined"){
-_14.separator=_15[0];
-}else{
-if(dojo.lang.isArray(_14.separator)&&_14.separator.length==0){
-_14.separator=[_15[0],""];
-}
-}
-if(typeof _14.decimal=="undefined"){
-_14.decimal=_15[2];
-}
-if(typeof _14.groupSize=="undefined"){
-_14.groupSize=_15[3];
-}
-if(typeof _14.groupSize2=="undefined"){
-_14.groupSize2=_15[4];
-}
-var _16=dojo.i18n.currency._mapToLocalizedFormatData(dojo.i18n.currency.FORMAT_TABLE,iso,_13);
-if(typeof _14.places=="undefined"){
-_14.places=_16.places;
-}
-if(typeof _14.places=="undefined"){
-_14.places=2;
-}
-if(typeof _14.symbol=="undefined"){
-_14.symbol=_16.symbol;
-}else{
-if(dojo.lang.isArray(_14.symbol)&&_14.symbol.length==0){
-_14.symbol=[_16.symbol,""];
-}
-}
-if(typeof _14.placement=="undefined"){
-_14.placement=_16.placement;
-}
-var re=new RegExp("^"+dojo.regexp.currency(_14)+"$");
-return re.test(_11);
-};
-dojo.i18n.currency._mapToLocalizedFormatData=function(_18,iso,_1a){
-var _1b=dojo.i18n.currency.FORMAT_TABLE[iso];
-if(!dojo.lang.isArray(_1b)){
-return _1b;
-}
-return dojo.i18n.number._mapToLocalizedFormatData(_1b[0],_1a);
-};
-(function(){
-var _1c={symbol:"\u062c",placement:"after",htmlSymbol:"?"};
-var _1d={symbol:"\u20ac",placement:"before",adjSpace:"symbol",htmlSymbol:"&euro;"};
-var _1e={symbol:"\u20ac",placement:"after",htmlSymbol:"&euro;"};
-dojo.i18n.currency.FORMAT_TABLE={AED:{symbol:"\u062c",placement:"after"},ARS:{symbol:"$",signPlacement:"after"},ATS:{symbol:"\u20ac",adjSpace:"number",signPlacement:"after",htmlSymbol:"&euro;"},AUD:{symbol:"$"},BOB:{symbol:"$b"},BRL:{symbol:"R$",adjSpace:"symbol"},BEF:_1e,BHD:_1c,CAD:[{"*":{symbol:"$"},"fr-ca":{symbol:"$",placement:"after",signPlacement:"around"}}],CHF:{symbol:"CHF",adjSpace:"symbol",signPlacement:"after"},CLP:{symbol:"$"},COP:{symbol:"$",signPlacement:"around"},CNY:{symbol:"\xa5",htmlSymbol:"&yen;"},CRC:{symbol:"\u20a1",signPlacement:"after",htmlSymbol:"?"},CZK:{symbol:"Kc",adjSpace:"symbol",signPlacement:"after"},DEM:_1e,DKK:{symbol:"kr.",adjSpace:"symbol",signPlacement:"after"},DOP:{symbol:"$"},DZD:_1c,ECS:{symbol:"$",signPlacement:"after"},EGP:_1c,ESP:_1e,EUR:_1d,FIM:_1e,FRF:_1e,GBP:{symbol:"\xa3",htmlSymbol:"&pound;"},GRD:{symbol:"\u20ac",signPlacement:"end",htmlSymbol:"&euro;"},GTQ:{symbol:"Q",signPlacement:"after"},HKD:{symbol:"HK$"},HNL:{symbol:"L.",signPlacement:"end"},HUF:{symbol:"Ft",placement:"after",adjSpace:"symbol"},IEP:{symbol:"\u20ac",htmlSymbol:"&euro;"},ILS:{symbol:"\u05e9\"\u05d7",placement:"after",htmlSymbol:"?"},INR:{symbol:"Rs."},ITL:{symbol:"\u20ac",signPlacement:"after",htmlSymbol:"&euro;"},JOD:_1c,JPY:{symbol:"\xa5",places:0,htmlSymbol:"&yen;"},KRW:{symbol:"\u20a9",places:0,htmlSymbol:"?"},KWD:_1c,LBP:_1c,LUF:_1e,MAD:_1c,MXN:{symbol:"$",signPlacement:"around"},NIO:{symbol:"C$",adjSpace:"symbol",signPlacement:"after"},NLG:{symbol:"\u20ac",signPlacement:"end",htmlSymbol:"&euro;"},NOK:{symbol:"kr",adjSpace:"symbol",signPlacement:"after"},NZD:{symbol:"$"},OMR:_1c,PAB:{symbol:"B/",adjSpace:"symbol",signPlacement:"after"},PEN:{symbol:"S/",signPlacement:"after"},PLN:{symbol:"z",placement:"after"},PTE:_1e,PYG:{symbol:"Gs.",signPlacement:"after"},QAR:_1c,RUR:{symbol:"rub.",placement:"after"},SAR:_1c,SEK:{symbol:"kr",placement:"after",adjSpace:"symbol"},SGD:{symbol:"$"},SVC:{symbol:"\u20a1",signPlacement:"after",adjSpace:"symbol"},SYP:_1c,TND:_1c,TRL:{symbol:"TL",placement:"after"},TWD:{symbol:"NT$"},USD:{symbol:"$"},UYU:{symbol:"$U",signplacement:"after",adjSpace:"symbol"},VEB:{symbol:"Bs",signplacement:"after",adjSpace:"symbol"},YER:_1c,ZAR:{symbol:"R",signPlacement:"around"}};
-})();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/EUR.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/EUR.js
deleted file mode 100644
index 268ad1a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/EUR.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"EUR","symbol":"\u20ac"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/GBP.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/GBP.js
deleted file mode 100644
index 2a0152e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/GBP.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"GBP","symbol":"\xa3"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/INR.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/INR.js
deleted file mode 100644
index d52cf23..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/INR.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"INR"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ITL.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ITL.js
deleted file mode 100644
index 19c0bad..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ITL.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"ITL","symbol":"\u20a4"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/JPY.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/JPY.js
deleted file mode 100644
index 9064282..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/JPY.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"JPY","symbol":"\xa5"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/README b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/README
deleted file mode 100644
index f96be71..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/README
+++ /dev/null
@@ -1,6 +0,0 @@
-All files within this directory and subdirectories were manually derived from http://unicode.org/cldr
-
-See terms of use: http://www.unicode.org/copyright.html#Exhibit1
-
-Eventually, this data should be generated directly from the XML in the CLDR repository to provide
-accurate and full support for the full set of locales.
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/USD.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/USD.js
deleted file mode 100644
index 1eef587..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/USD.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"USD","symbol":"$"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en-us/USD.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en-us/USD.js
deleted file mode 100644
index 741e519..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en-us/USD.js
+++ /dev/null
@@ -1 +0,0 @@
-({"symbol":"$","displayName":"US Dollar"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/EUR.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/EUR.js
deleted file mode 100644
index d959b09..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/EUR.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"Euro","symbol":"\u20ac"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/GBP.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/GBP.js
deleted file mode 100644
index 429cf13..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/GBP.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"British Pound Sterling","symbol":"\xa3"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/INR.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/INR.js
deleted file mode 100644
index 62d81eb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/INR.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"Indian Rupee"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/ITL.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/ITL.js
deleted file mode 100644
index 401d1f3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/ITL.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"Italian Lira","symbol":"\u20a4"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/JPY.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/JPY.js
deleted file mode 100644
index 6ab7668..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/JPY.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"Japanese Yen","symbol":"\xa5"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/USD.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/USD.js
deleted file mode 100644
index abb2bec..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/en/USD.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"US Dollar","symbol":"US$"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/EUR.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/EUR.js
deleted file mode 100644
index 9b61b19..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/EUR.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u092f\u0941\u0930\u094b","symbol":"\u20ac"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/GBP.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/GBP.js
deleted file mode 100644
index f883b62..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/GBP.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u092c\u094d\u0930\u093f\u0924\u0928 \u0915\u093e \u092a\u094c\u0928\u094d\u0921 \u0938\u094d\u091f\u0930\u094d\u0932\u093f\u0917","symbol":"\xa3"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/INR.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/INR.js
deleted file mode 100644
index ec57396..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/INR.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u092d\u093e\u0930\u0924\u0940\u092f  \u0930\u0942\u092a\u092f\u093e","symbol":"\u0930\u0941."});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/ITL.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/ITL.js
deleted file mode 100644
index 0372f19..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/ITL.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u0907\u0924\u0932\u0940 \u0915\u093e \u0932\u0940\u0930\u093e","symbol":"\u20a4"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/JPY.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/JPY.js
deleted file mode 100644
index 83304cd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/JPY.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u091c\u093e\u092a\u093e\u0928\u0940 \u092f\u0947\u0928","symbol":"\xa5"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/USD.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/USD.js
deleted file mode 100644
index db592d4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/hi/USD.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u0905\u092e\u0930\u0940\u0915\u0940 \u0921\u093e\u0932\u0930","symbol":"$"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/EUR.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/EUR.js
deleted file mode 100644
index 9f39ea6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/EUR.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u30e6\u30fc\u30ed","symbol":"\u20ac"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/GBP.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/GBP.js
deleted file mode 100644
index 3769e2f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/GBP.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u82f1\u56fd\u30dd\u30f3\u30c9","symbol":"\xa3"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/INR.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/INR.js
deleted file mode 100644
index 689122f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/INR.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u30a4\u30f3\u30c9 \u30eb\u30d4\u30fc","symbol":"INR"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/ITL.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/ITL.js
deleted file mode 100644
index 8f3dfff..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/ITL.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u30a4\u30bf\u30ea\u30a2 \u30ea\u30e9","symbol":"\u20a4"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/JPY.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/JPY.js
deleted file mode 100644
index 8571afd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/JPY.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u65e5\u672c\u5186","symbol":"\uffe5"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/USD.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/USD.js
deleted file mode 100644
index aebaaed..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/currency/nls/ja/USD.js
+++ /dev/null
@@ -1 +0,0 @@
-({"displayName":"\u7c73\u30c9\u30eb","symbol":"$"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/number.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/number.js
deleted file mode 100644
index 80d76a9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/i18n/number.js
+++ /dev/null
@@ -1,142 +0,0 @@
-dojo.provide("dojo.i18n.number");
-dojo.require("dojo.experimental");
-dojo.require("dojo.regexp");
-dojo.require("dojo.i18n.common");
-dojo.require("dojo.lang.common");
-dojo.i18n.number.format=function(_1,_2,_3){
-_2=(typeof _2=="object")?_2:{};
-var _4=dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE,_3);
-if(typeof _2.separator=="undefined"){
-_2.separator=_4[1];
-}
-if(typeof _2.decimal=="undefined"){
-_2.decimal=_4[2];
-}
-if(typeof _2.groupSize=="undefined"){
-_2.groupSize=_4[3];
-}
-if(typeof _2.groupSize2=="undefined"){
-_2.groupSize2=_4[4];
-}
-if(typeof _2.round=="undefined"){
-_2.round=true;
-}
-if(typeof _2.signed=="undefined"){
-_2.signed=true;
-}
-var _5=(_2.signed&&(_1<0))?"-":"";
-_1=Math.abs(_1);
-var _6=String((((_2.places>0)||!_2.round)?Math.floor:Math.round)(_1));
-function splitSubstrings(_7,_8){
-for(var _9=[];_7.length>=_8;_7=_7.substr(0,_7.length-_8)){
-_9.push(_7.substr(-_8));
-}
-if(_7.length>0){
-_9.push(_7);
-}
-return _9.reverse();
-}
-if(_2.groupSize2&&(_6.length>_2.groupSize)){
-var _a=splitSubstrings(_6.substr(0,_6.length-_2.groupSize),_2.groupSize2);
-_a.push(_6.substr(-_2.groupSize));
-_5=_5+_a.join(_2.separator);
-}else{
-if(_2.groupSize){
-_5=_5+splitSubstrings(_6,_2.groupSize).join(_2.separator);
-}else{
-_5=_5+_6;
-}
-}
-if(_2.places>0){
-var _b=_1-Math.floor(_1);
-_b=(_2.round?Math.round:Math.floor)(_b*Math.pow(10,_2.places));
-_5=_5+_2.decimal+_b;
-}
-return _5;
-};
-dojo.i18n.number.parse=function(_c,_d,_e){
-_e=(typeof _e=="object")?_e:{};
-var _f=dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE,_d);
-if(typeof _e.separator=="undefined"){
-_e.separator=_f[1];
-}
-if(typeof _e.decimal=="undefined"){
-_e.decimal=_f[2];
-}
-if(typeof _e.groupSize=="undefined"){
-_e.groupSize=_f[3];
-}
-if(typeof _e.groupSize2=="undefined"){
-_e.groupSize2=_f[4];
-}
-if(typeof _e.validate=="undefined"){
-_e.validate=true;
-}
-if(_e.validate&&!dojo.i18n.number.isReal(_c,_d,_e)){
-return Number.NaN;
-}
-var _10=_c.split(_e.decimal);
-if(_10.length>2){
-return Number.NaN;
-}
-var _11;
-if(_e.separator!=""){
-_11=Number(_10[0].replace(new RegExp("\\"+_e.separator,"g"),""));
-}else{
-_11=Number(_10[0]);
-}
-var _12=(_10.length==1)?0:Number(_10[1])/Math.pow(10,String(_10[1]).length);
-return _11+_12;
-};
-dojo.i18n.number.isInteger=function(_13,_14,_15){
-_15=(typeof _15=="object")?_15:{};
-var _16=dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE,_14);
-if(typeof _15.separator=="undefined"){
-_15.separator=_16[1];
-}else{
-if(dojo.lang.isArray(_15.separator)&&_15.separator.length===0){
-_15.separator=[_16[1],""];
-}
-}
-if(typeof _15.groupSize=="undefined"){
-_15.groupSize=_16[3];
-}
-if(typeof _15.groupSize2=="undefined"){
-_15.groupSize2=_16[4];
-}
-var re=new RegExp("^"+dojo.regexp.integer(_15)+"$");
-return re.test(_13);
-};
-dojo.i18n.number.isReal=function(_18,_19,_1a){
-_1a=(typeof _1a=="object")?_1a:{};
-var _1b=dojo.i18n.number._mapToLocalizedFormatData(dojo.i18n.number.FORMAT_TABLE,_19);
-if(typeof _1a.separator=="undefined"){
-_1a.separator=_1b[1];
-}else{
-if(dojo.lang.isArray(_1a.separator)&&_1a.separator.length===0){
-_1a.separator=[_1b[1],""];
-}
-}
-if(typeof _1a.decimal=="undefined"){
-_1a.decimal=_1b[2];
-}
-if(typeof _1a.groupSize=="undefined"){
-_1a.groupSize=_1b[3];
-}
-if(typeof _1a.groupSize2=="undefined"){
-_1a.groupSize2=_1b[4];
-}
-var re=new RegExp("^"+dojo.regexp.realNumber(_1a)+"$");
-return re.test(_18);
-};
-(function(){
-dojo.i18n.number.FORMAT_TABLE={"ar-ae":["","",",",1],"ar-bh":["","",",",1],"ar-dz":["","",",",1],"ar-eg":["","",",",1],"ar-jo":["","",",",1],"ar-kw":["","",",",1],"ar-lb":["","",",",1],"ar-ma":["","",",",1],"ar-om":["","",",",1],"ar-qa":["","",",",1],"ar-sa":["","",",",1],"ar-sy":["","",",",1],"ar-tn":["","",",",1],"ar-ye":["","",",",1],"cs-cz":[".",".",",",3],"da-dk":[".",".",",",3],"de-at":[".",".",",",3],"de-de":[".",".",",",3],"de-lu":[".",".",",",3],"de-ch":["'","'",".",3],"el-gr":[".",".",",",3],"en-au":[",",",",".",3],"en-ca":[",",",",".",3],"en-gb":[",",",",".",3],"en-hk":[",",",",".",3],"en-ie":[",",",",".",3],"en-in":[",",",",".",3,2],"en-nz":[",",",",".",3],"en-us":[",",",",".",3],"en-za":[",",",",".",3],"es-ar":[".",".",",",3],"es-bo":[".",".",",",3],"es-cl":[".",".",",",3],"es-co":[".",".",",",3],"es-cr":[".",".",",",3],"es-do":[".",".",",",3],"es-ec":[".",".",",",3],"es-es":[".",".",",",3],"es-gt":[",",",",".",3],"es-hn":[",",",",".",3],"es-mx":[",",",",".",3],"es-ni":[",",",",".",3],"es-pa":[",",",",".",3],"es-pe":[",",",",".",3],"es-pr":[",",",",".",3],"es-py":[".",".",",",3],"es-sv":[",",",",".",3],"es-uy":[".",".",",",3],"es-ve":[".",".",",",3],"fi-fi":[" "," ",",",3],"fr-be":[".",".",",",3],"fr-ca":[" "," ",",",3],"fr-ch":[" "," ",".",3],"fr-fr":[" "," ",",",3],"fr-lu":[".",".",",",3],"he-il":[",",",",".",3],"hu-hu":[" "," ",",",3],"it-ch":[" "," ",".",3],"it-it":[".",".",",",3],"ja-jp":[",",",",".",3],"ko-kr":[",",",",".",3],"no-no":[".",".",",",3],"nl-be":[" "," ",",",3],"nl-nl":[".",".",",",3],"pl-pl":[".",".",",",3],"pt-br":[".",".",",",3],"pt-pt":[".",".","$",3],"ru-ru":[" "," ",",",3],"sv-se":["."," ",",",3],"tr-tr":[".",".",",",3],"zh-cn":[",",",",".",3],"zh-hk":[",",",",".",3],"zh-tw":[",",",",".",3],"*":[",",",",".",3]};
-})();
-dojo.i18n.number._mapToLocalizedFormatData=function(_1d,_1e){
-_1e=dojo.hostenv.normalizeLocale(_1e);
-var _1f=_1d[_1e];
-if(typeof _1f=="undefined"){
-_1f=_1d["*"];
-}
-return _1f;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/iCalendar.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/iCalendar.js
deleted file mode 100644
index 11ea5e3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/iCalendar.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.require("dojo.cal.iCalendar");
-dojo.deprecated("dojo.icalendar","use dojo.cal.iCalendar isntead","0.5");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io.js
deleted file mode 100644
index ed7cf2e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io.js
+++ /dev/null
@@ -1,3 +0,0 @@
-dojo.provide("dojo.io");
-dojo.require("dojo.io.*");
-dojo.deprecated("dojo.io","replaced by dojo.io.*","0.5");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/BrowserIO.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/BrowserIO.js
deleted file mode 100644
index e600a1c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/BrowserIO.js
+++ /dev/null
@@ -1,482 +0,0 @@
-dojo.provide("dojo.io.BrowserIO");
-dojo.require("dojo.io.common");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.string.extras");
-dojo.require("dojo.dom");
-dojo.require("dojo.undo.browser");
-if(!dj_undef("window")){
-dojo.io.checkChildrenForFile=function(_1){
-var _2=false;
-var _3=_1.getElementsByTagName("input");
-dojo.lang.forEach(_3,function(_4){
-if(_2){
-return;
-}
-if(_4.getAttribute("type")=="file"){
-_2=true;
-}
-});
-return _2;
-};
-dojo.io.formHasFile=function(_5){
-return dojo.io.checkChildrenForFile(_5);
-};
-dojo.io.updateNode=function(_6,_7){
-_6=dojo.byId(_6);
-var _8=_7;
-if(dojo.lang.isString(_7)){
-_8={url:_7};
-}
-_8.mimetype="text/html";
-_8.load=function(t,d,e){
-while(_6.firstChild){
-dojo.dom.destroyNode(_6.firstChild);
-}
-_6.innerHTML=d;
-};
-dojo.io.bind(_8);
-};
-dojo.io.formFilter=function(_c){
-var _d=(_c.type||"").toLowerCase();
-return !_c.disabled&&_c.name&&!dojo.lang.inArray(["file","submit","image","reset","button"],_d);
-};
-dojo.io.encodeForm=function(_e,_f,_10){
-if((!_e)||(!_e.tagName)||(!_e.tagName.toLowerCase()=="form")){
-dojo.raise("Attempted to encode a non-form element.");
-}
-if(!_10){
-_10=dojo.io.formFilter;
-}
-var enc=/utf/i.test(_f||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _12=[];
-for(var i=0;i<_e.elements.length;i++){
-var elm=_e.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_10(elm)){
-continue;
-}
-var _15=enc(elm.name);
-var _16=elm.type.toLowerCase();
-if(_16=="select-multiple"){
-for(var j=0;j<elm.options.length;j++){
-if(elm.options[j].selected){
-_12.push(_15+"="+enc(elm.options[j].value));
-}
-}
-}else{
-if(dojo.lang.inArray(["radio","checkbox"],_16)){
-if(elm.checked){
-_12.push(_15+"="+enc(elm.value));
-}
-}else{
-_12.push(_15+"="+enc(elm.value));
-}
-}
-}
-var _18=_e.getElementsByTagName("input");
-for(var i=0;i<_18.length;i++){
-var _19=_18[i];
-if(_19.type.toLowerCase()=="image"&&_19.form==_e&&_10(_19)){
-var _15=enc(_19.name);
-_12.push(_15+"="+enc(_19.value));
-_12.push(_15+".x=0");
-_12.push(_15+".y=0");
-}
-}
-return _12.join("&")+"&";
-};
-dojo.io.FormBind=function(_1a){
-this.bindArgs={};
-if(_1a&&_1a.formNode){
-this.init(_1a);
-}else{
-if(_1a){
-this.init({formNode:_1a});
-}
-}
-};
-dojo.lang.extend(dojo.io.FormBind,{form:null,bindArgs:null,clickedButton:null,init:function(_1b){
-var _1c=dojo.byId(_1b.formNode);
-if(!_1c||!_1c.tagName||_1c.tagName.toLowerCase()!="form"){
-throw new Error("FormBind: Couldn't apply, invalid form");
-}else{
-if(this.form==_1c){
-return;
-}else{
-if(this.form){
-throw new Error("FormBind: Already applied to a form");
-}
-}
-}
-dojo.lang.mixin(this.bindArgs,_1b);
-this.form=_1c;
-this.connect(_1c,"onsubmit","submit");
-for(var i=0;i<_1c.elements.length;i++){
-var _1e=_1c.elements[i];
-if(_1e&&_1e.type&&dojo.lang.inArray(["submit","button"],_1e.type.toLowerCase())){
-this.connect(_1e,"onclick","click");
-}
-}
-var _1f=_1c.getElementsByTagName("input");
-for(var i=0;i<_1f.length;i++){
-var _20=_1f[i];
-if(_20.type.toLowerCase()=="image"&&_20.form==_1c){
-this.connect(_20,"onclick","click");
-}
-}
-},onSubmit:function(_21){
-return true;
-},submit:function(e){
-e.preventDefault();
-if(this.onSubmit(this.form)){
-dojo.io.bind(dojo.lang.mixin(this.bindArgs,{formFilter:dojo.lang.hitch(this,"formFilter")}));
-}
-},click:function(e){
-var _24=e.currentTarget;
-if(_24.disabled){
-return;
-}
-this.clickedButton=_24;
-},formFilter:function(_25){
-var _26=(_25.type||"").toLowerCase();
-var _27=false;
-if(_25.disabled||!_25.name){
-_27=false;
-}else{
-if(dojo.lang.inArray(["submit","button","image"],_26)){
-if(!this.clickedButton){
-this.clickedButton=_25;
-}
-_27=_25==this.clickedButton;
-}else{
-_27=!dojo.lang.inArray(["file","submit","reset","button"],_26);
-}
-}
-return _27;
-},connect:function(_28,_29,_2a){
-if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_28,_29,this,_2a);
-}else{
-var fcn=dojo.lang.hitch(this,_2a);
-_28[_29]=function(e){
-if(!e){
-e=window.event;
-}
-if(!e.currentTarget){
-e.currentTarget=e.srcElement;
-}
-if(!e.preventDefault){
-e.preventDefault=function(){
-window.event.returnValue=false;
-};
-}
-fcn(e);
-};
-}
-}});
-dojo.io.XMLHTTPTransport=new function(){
-var _2d=this;
-var _2e={};
-this.useCache=false;
-this.preventCache=false;
-function getCacheKey(url,_30,_31){
-return url+"|"+_30+"|"+_31.toLowerCase();
-}
-function addToCache(url,_33,_34,_35){
-_2e[getCacheKey(url,_33,_34)]=_35;
-}
-function getFromCache(url,_37,_38){
-return _2e[getCacheKey(url,_37,_38)];
-}
-this.clearCache=function(){
-_2e={};
-};
-function doLoad(_39,_3a,url,_3c,_3d){
-if(((_3a.status>=200)&&(_3a.status<300))||(_3a.status==304)||(_3a.status==1223)||(location.protocol=="file:"&&(_3a.status==0||_3a.status==undefined))||(location.protocol=="chrome:"&&(_3a.status==0||_3a.status==undefined))){
-var ret;
-if(_39.method.toLowerCase()=="head"){
-var _3f=_3a.getAllResponseHeaders();
-ret={};
-ret.toString=function(){
-return _3f;
-};
-var _40=_3f.split(/[\r\n]+/g);
-for(var i=0;i<_40.length;i++){
-var _42=_40[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-if(_42){
-ret[_42[1]]=_42[2];
-}
-}
-}else{
-if(_39.mimetype=="text/javascript"){
-try{
-ret=dj_eval(_3a.responseText);
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(_3a.responseText);
-ret=null;
-}
-}else{
-if(_39.mimetype.substr(0,9)=="text/json"||_39.mimetype.substr(0,16)=="application/json"){
-try{
-ret=dj_eval("("+_39.jsonFilter(_3a.responseText)+")");
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(_3a.responseText);
-ret=false;
-}
-}else{
-if((_39.mimetype=="application/xml")||(_39.mimetype=="text/xml")){
-ret=_3a.responseXML;
-if(!ret||typeof ret=="string"||!_3a.getResponseHeader("Content-Type")){
-ret=dojo.dom.createDocumentFromText(_3a.responseText);
-}
-}else{
-ret=_3a.responseText;
-}
-}
-}
-}
-if(_3d){
-addToCache(url,_3c,_39.method,_3a);
-}
-_39[(typeof _39.load=="function")?"load":"handle"]("load",ret,_3a,_39);
-}else{
-var _43=new dojo.io.Error("XMLHttpTransport Error: "+_3a.status+" "+_3a.statusText);
-_39[(typeof _39.error=="function")?"error":"handle"]("error",_43,_3a,_39);
-}
-}
-function setHeaders(_44,_45){
-if(_45["headers"]){
-for(var _46 in _45["headers"]){
-if(_46.toLowerCase()=="content-type"&&!_45["contentType"]){
-_45["contentType"]=_45["headers"][_46];
-}else{
-_44.setRequestHeader(_46,_45["headers"][_46]);
-}
-}
-}
-}
-this.inFlight=[];
-this.inFlightTimer=null;
-this.startWatchingInFlight=function(){
-if(!this.inFlightTimer){
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-}
-};
-this.watchInFlight=function(){
-var now=null;
-if(!dojo.hostenv._blockAsync&&!_2d._blockAsync){
-for(var x=this.inFlight.length-1;x>=0;x--){
-try{
-var tif=this.inFlight[x];
-if(!tif||tif.http._aborted||!tif.http.readyState){
-this.inFlight.splice(x,1);
-continue;
-}
-if(4==tif.http.readyState){
-this.inFlight.splice(x,1);
-doLoad(tif.req,tif.http,tif.url,tif.query,tif.useCache);
-}else{
-if(tif.startTime){
-if(!now){
-now=(new Date()).getTime();
-}
-if(tif.startTime+(tif.req.timeoutSeconds*1000)<now){
-if(typeof tif.http.abort=="function"){
-tif.http.abort();
-}
-this.inFlight.splice(x,1);
-tif.req[(typeof tif.req.timeout=="function")?"timeout":"handle"]("timeout",null,tif.http,tif.req);
-}
-}
-}
-}
-catch(e){
-try{
-var _4a=new dojo.io.Error("XMLHttpTransport.watchInFlight Error: "+e);
-tif.req[(typeof tif.req.error=="function")?"error":"handle"]("error",_4a,tif.http,tif.req);
-}
-catch(e2){
-dojo.debug("XMLHttpTransport error callback failed: "+e2);
-}
-}
-}
-}
-clearTimeout(this.inFlightTimer);
-if(this.inFlight.length==0){
-this.inFlightTimer=null;
-return;
-}
-this.inFlightTimer=setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-};
-var _4b=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_4c){
-var mlc=_4c["mimetype"].toLowerCase()||"";
-return _4b&&((dojo.lang.inArray(["text/plain","text/html","application/xml","text/xml","text/javascript"],mlc))||(mlc.substr(0,9)=="text/json"||mlc.substr(0,16)=="application/json"))&&!(_4c["formNode"]&&dojo.io.formHasFile(_4c["formNode"]));
-};
-this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_4e){
-if(!_4e["url"]){
-if(!_4e["formNode"]&&(_4e["backButton"]||_4e["back"]||_4e["changeUrl"]||_4e["watchForURL"])&&(!djConfig.preventBackButtonFix)){
-dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_4e);
-return true;
-}
-}
-var url=_4e.url;
-var _50="";
-if(_4e["formNode"]){
-var ta=_4e.formNode.getAttribute("action");
-if((ta)&&(!_4e["url"])){
-url=ta;
-}
-var tp=_4e.formNode.getAttribute("method");
-if((tp)&&(!_4e["method"])){
-_4e.method=tp;
-}
-_50+=dojo.io.encodeForm(_4e.formNode,_4e.encoding,_4e["formFilter"]);
-}
-if(url.indexOf("#")>-1){
-dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
-url=url.split("#")[0];
-}
-if(_4e["file"]){
-_4e.method="post";
-}
-if(!_4e["method"]){
-_4e.method="get";
-}
-if(_4e.method.toLowerCase()=="get"){
-_4e.multipart=false;
-}else{
-if(_4e["file"]){
-_4e.multipart=true;
-}else{
-if(!_4e["multipart"]){
-_4e.multipart=false;
-}
-}
-}
-if(_4e["backButton"]||_4e["back"]||_4e["changeUrl"]){
-dojo.undo.browser.addToHistory(_4e);
-}
-var _53=_4e["content"]||{};
-if(_4e.sendTransport){
-_53["dojo.transport"]="xmlhttp";
-}
-do{
-if(_4e.postContent){
-_50=_4e.postContent;
-break;
-}
-if(_53){
-_50+=dojo.io.argsFromMap(_53,_4e.encoding);
-}
-if(_4e.method.toLowerCase()=="get"||!_4e.multipart){
-break;
-}
-var t=[];
-if(_50.length){
-var q=_50.split("&");
-for(var i=0;i<q.length;++i){
-if(q[i].length){
-var p=q[i].split("=");
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+p[0]+"\"","",p[1]);
-}
-}
-}
-if(_4e.file){
-if(dojo.lang.isArray(_4e.file)){
-for(var i=0;i<_4e.file.length;++i){
-var o=_4e.file[i];
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}else{
-var o=_4e.file;
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}
-if(t.length){
-t.push("--"+this.multipartBoundary+"--","");
-_50=t.join("\r\n");
-}
-}while(false);
-var _59=_4e["sync"]?false:true;
-var _5a=_4e["preventCache"]||(this.preventCache==true&&_4e["preventCache"]!=false);
-var _5b=_4e["useCache"]==true||(this.useCache==true&&_4e["useCache"]!=false);
-if(!_5a&&_5b){
-var _5c=getFromCache(url,_50,_4e.method);
-if(_5c){
-doLoad(_4e,_5c,url,_50,false);
-return;
-}
-}
-var _5d=dojo.hostenv.getXmlhttpObject(_4e);
-var _5e=false;
-if(_59){
-var _5f=this.inFlight.push({"req":_4e,"http":_5d,"url":url,"query":_50,"useCache":_5b,"startTime":_4e.timeoutSeconds?(new Date()).getTime():0});
-this.startWatchingInFlight();
-}else{
-_2d._blockAsync=true;
-}
-if(_4e.method.toLowerCase()=="post"){
-if(!_4e.user){
-_5d.open("POST",url,_59);
-}else{
-_5d.open("POST",url,_59,_4e.user,_4e.password);
-}
-setHeaders(_5d,_4e);
-_5d.setRequestHeader("Content-Type",_4e.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_4e.contentType||"application/x-www-form-urlencoded"));
-try{
-_5d.send(_50);
-}
-catch(e){
-if(typeof _5d.abort=="function"){
-_5d.abort();
-}
-doLoad(_4e,{status:404},url,_50,_5b);
-}
-}else{
-var _60=url;
-if(_50!=""){
-_60+=(_60.indexOf("?")>-1?"&":"?")+_50;
-}
-if(_5a){
-_60+=(dojo.string.endsWithAny(_60,"?","&")?"":(_60.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
-}
-if(!_4e.user){
-_5d.open(_4e.method.toUpperCase(),_60,_59);
-}else{
-_5d.open(_4e.method.toUpperCase(),_60,_59,_4e.user,_4e.password);
-}
-setHeaders(_5d,_4e);
-try{
-_5d.send(null);
-}
-catch(e){
-if(typeof _5d.abort=="function"){
-_5d.abort();
-}
-doLoad(_4e,{status:404},url,_50,_5b);
-}
-}
-if(!_59){
-doLoad(_4e,_5d,url,_50,_5b);
-_2d._blockAsync=false;
-}
-_4e.abort=function(){
-try{
-_5d._aborted=true;
-}
-catch(e){
-}
-return _5d.abort();
-};
-return;
-};
-dojo.io.transports.addTransport("XMLHTTPTransport");
-};
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/IframeIO.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/IframeIO.js
deleted file mode 100644
index 8ff923c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/IframeIO.js
+++ /dev/null
@@ -1,201 +0,0 @@
-dojo.provide("dojo.io.IframeIO");
-dojo.require("dojo.io.BrowserIO");
-dojo.require("dojo.uri.*");
-dojo.io.createIFrame=function(_1,_2,_3){
-if(window[_1]){
-return window[_1];
-}
-if(window.frames[_1]){
-return window.frames[_1];
-}
-var r=dojo.render.html;
-var _5=null;
-var _6=_3;
-if(!_6){
-if(djConfig["useXDomain"]&&!djConfig["dojoIframeHistoryUrl"]){
-dojo.debug("dojo.io.createIFrame: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
-}
-_6=(djConfig["dojoIframeHistoryUrl"]||dojo.uri.moduleUri("dojo","../iframe_history.html"))+"#noInit=true";
-}
-var _7=((r.ie)&&(dojo.render.os.win))?"<iframe name=\""+_1+"\" src=\""+_6+"\" onload=\""+_2+"\">":"iframe";
-_5=document.createElement(_7);
-with(_5){
-name=_1;
-setAttribute("name",_1);
-id=_1;
-}
-dojo.body().appendChild(_5);
-window[_1]=_5;
-with(_5.style){
-if(!r.safari){
-position="absolute";
-}
-left=top="0px";
-height=width="1px";
-visibility="hidden";
-}
-if(!r.ie){
-dojo.io.setIFrameSrc(_5,_6,true);
-_5.onload=new Function(_2);
-}
-return _5;
-};
-dojo.io.IframeTransport=new function(){
-var _8=this;
-this.currentRequest=null;
-this.requestQueue=[];
-this.iframeName="dojoIoIframe";
-this.fireNextRequest=function(){
-try{
-if((this.currentRequest)||(this.requestQueue.length==0)){
-return;
-}
-var cr=this.currentRequest=this.requestQueue.shift();
-cr._contentToClean=[];
-var fn=cr["formNode"];
-var _b=cr["content"]||{};
-if(cr.sendTransport){
-_b["dojo.transport"]="iframe";
-}
-if(fn){
-if(_b){
-for(var x in _b){
-if(!fn[x]){
-var tn;
-if(dojo.render.html.ie){
-tn=document.createElement("<input type='hidden' name='"+x+"' value='"+_b[x]+"'>");
-fn.appendChild(tn);
-}else{
-tn=document.createElement("input");
-fn.appendChild(tn);
-tn.type="hidden";
-tn.name=x;
-tn.value=_b[x];
-}
-cr._contentToClean.push(x);
-}else{
-fn[x].value=_b[x];
-}
-}
-}
-if(cr["url"]){
-cr._originalAction=fn.getAttribute("action");
-fn.setAttribute("action",cr.url);
-}
-if(!fn.getAttribute("method")){
-fn.setAttribute("method",(cr["method"])?cr["method"]:"post");
-}
-cr._originalTarget=fn.getAttribute("target");
-fn.setAttribute("target",this.iframeName);
-fn.target=this.iframeName;
-fn.submit();
-}else{
-var _e=dojo.io.argsFromMap(this.currentRequest.content);
-var _f=cr.url+(cr.url.indexOf("?")>-1?"&":"?")+_e;
-dojo.io.setIFrameSrc(this.iframe,_f,true);
-}
-}
-catch(e){
-this.iframeOnload(e);
-}
-};
-this.canHandle=function(_10){
-return ((dojo.lang.inArray(["text/plain","text/html","text/javascript","text/json","application/json"],_10["mimetype"]))&&(dojo.lang.inArray(["post","get"],_10["method"].toLowerCase()))&&(!((_10["sync"])&&(_10["sync"]==true))));
-};
-this.bind=function(_11){
-if(!this["iframe"]){
-this.setUpIframe();
-}
-this.requestQueue.push(_11);
-this.fireNextRequest();
-return;
-};
-this.setUpIframe=function(){
-this.iframe=dojo.io.createIFrame(this.iframeName,"dojo.io.IframeTransport.iframeOnload();");
-};
-this.iframeOnload=function(_12){
-if(!_8.currentRequest){
-_8.fireNextRequest();
-return;
-}
-var req=_8.currentRequest;
-if(req.formNode){
-var _14=req._contentToClean;
-for(var i=0;i<_14.length;i++){
-var key=_14[i];
-if(dojo.render.html.safari){
-var _17=req.formNode;
-for(var j=0;j<_17.childNodes.length;j++){
-var _19=_17.childNodes[j];
-if(_19.name==key){
-var _1a=_19.parentNode;
-_1a.removeChild(_19);
-break;
-}
-}
-}else{
-var _1b=req.formNode[key];
-req.formNode.removeChild(_1b);
-req.formNode[key]=null;
-}
-}
-if(req["_originalAction"]){
-req.formNode.setAttribute("action",req._originalAction);
-}
-if(req["_originalTarget"]){
-req.formNode.setAttribute("target",req._originalTarget);
-req.formNode.target=req._originalTarget;
-}
-}
-var _1c=function(_1d){
-var doc=_1d.contentDocument||((_1d.contentWindow)&&(_1d.contentWindow.document))||((_1d.name)&&(document.frames[_1d.name])&&(document.frames[_1d.name].document))||null;
-return doc;
-};
-var _1f;
-var _20=false;
-if(_12){
-this._callError(req,"IframeTransport Request Error: "+_12);
-}else{
-var ifd=_1c(_8.iframe);
-try{
-var cmt=req.mimetype;
-if((cmt=="text/javascript")||(cmt=="text/json")||(cmt=="application/json")){
-var js=ifd.getElementsByTagName("textarea")[0].value;
-if(cmt=="text/json"||cmt=="application/json"){
-js="("+js+")";
-}
-_1f=dj_eval(js);
-}else{
-if(cmt=="text/html"){
-_1f=ifd;
-}else{
-_1f=ifd.getElementsByTagName("textarea")[0].value;
-}
-}
-_20=true;
-}
-catch(e){
-this._callError(req,"IframeTransport Error: "+e);
-}
-}
-try{
-if(_20&&dojo.lang.isFunction(req["load"])){
-req.load("load",_1f,req);
-}
-}
-catch(e){
-throw e;
-}
-finally{
-_8.currentRequest=null;
-_8.fireNextRequest();
-}
-};
-this._callError=function(req,_25){
-var _26=new dojo.io.Error(_25);
-if(dojo.lang.isFunction(req["error"])){
-req.error("error",_26,req);
-}
-};
-dojo.io.transports.addTransport("IframeTransport");
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/RepubsubIO.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/RepubsubIO.js
deleted file mode 100644
index 0356225..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/RepubsubIO.js
+++ /dev/null
@@ -1,324 +0,0 @@
-dojo.require("dojo.event.*");
-dojo.require("dojo.io.BrowserIO");
-dojo.provide("dojo.io.RepubsubIO");
-dojo.io.repubsubTranport=new function(){
-var _1=dojo.io.repubsub;
-this.canHandle=function(_2){
-if((_2["mimetype"]=="text/javascript")&&(_2["method"]=="repubsub")){
-return true;
-}
-return false;
-};
-this.bind=function(_3){
-if(!_1.isInitialized){
-_1.init();
-}
-if(!_1.topics[_3.url]){
-_3.rpsLoad=function(_4){
-_3.load("load",_4);
-};
-_1.subscribe(_3.url,_3,"rpsLoad");
-}
-if(_3["content"]){
-var _5=dojo.io.repubsubEvent.initFromProperties(_3.content);
-_1.publish(_3.url,_5);
-}
-};
-dojo.io.transports.addTransport("repubsubTranport");
-};
-dojo.io.repubsub=new function(){
-this.initDoc="init.html";
-this.isInitialized=false;
-this.subscriptionBacklog=[];
-this.debug=true;
-this.rcvNodeName=null;
-this.sndNodeName=null;
-this.rcvNode=null;
-this.sndNode=null;
-this.canRcv=false;
-this.canSnd=false;
-this.canLog=false;
-this.sndTimer=null;
-this.windowRef=window;
-this.backlog=[];
-this.tunnelInitCount=0;
-this.tunnelFrameKey="tunnel_frame";
-this.serverBaseURL=location.protocol+"//"+location.host+location.pathname;
-this.logBacklog=[];
-this.getRandStr=function(){
-return Math.random().toString().substring(2,10);
-};
-this.userid="guest";
-this.tunnelID=this.getRandStr();
-this.attachPathList=[];
-this.topics=[];
-this.parseGetStr=function(){
-var _6=document.location.toString();
-var _7=_6.split("?",2);
-if(_7.length>1){
-var _8=_7[1];
-var _9=_8.split("&");
-var _a=[];
-for(var x in _9){
-var sp=_9[x].split("=");
-try{
-_a[sp[0]]=eval(sp[1]);
-}
-catch(e){
-_a[sp[0]]=sp[1];
-}
-}
-return _a;
-}else{
-return [];
-}
-};
-var _d=this.parseGetStr();
-for(var x in _d){
-this[x]=_d[x];
-}
-if(!this["tunnelURI"]){
-this.tunnelURI=["/who/",escape(this.userid),"/s/",this.getRandStr(),"/kn_journal"].join("");
-}
-if(window["repubsubOpts"]||window["rpsOpts"]){
-var _f=window["repubsubOpts"]||window["rpsOpts"];
-for(var x in _f){
-this[x]=_f[x];
-}
-}
-this.tunnelCloseCallback=function(){
-dojo.io.setIFrameSrc(this.rcvNode,this.initDoc+"?callback=repubsub.rcvNodeReady&domain="+document.domain);
-};
-this.receiveEventFromTunnel=function(evt,_11){
-if(!evt["elements"]){
-this.log("bailing! event received without elements!","error");
-return;
-}
-var e={};
-for(var i=0;i<evt.elements.length;i++){
-var ee=evt.elements[i];
-e[ee.name||ee.nameU]=(ee.value||ee.valueU);
-this.log("[event]: "+(ee.name||ee.nameU)+": "+e[ee.name||ee.nameU]);
-}
-this.dispatch(e);
-};
-this.widenDomain=function(_15){
-var cd=_15||document.domain;
-if(cd.indexOf(".")==-1){
-return;
-}
-var dps=cd.split(".");
-if(dps.length<=2){
-return;
-}
-dps=dps.slice(dps.length-2);
-document.domain=dps.join(".");
-};
-this.parseCookie=function(){
-var cs=document.cookie;
-var _19=cs.split(";");
-for(var x=0;x<_19.length;x++){
-_19[x]=_19[x].split("=");
-if(x!=_19.length-1){
-cs+=";";
-}
-}
-return _19;
-};
-this.setCookie=function(_1b,_1c){
-if((_1c)&&(_1c==true)){
-document.cookie="";
-}
-var cs="";
-for(var x=0;x<_1b.length;x++){
-cs+=_1b[x][0]+"="+_1b[x][1];
-if(x!=_1b.length-1){
-cs+=";";
-}
-}
-document.cookie=cs;
-};
-this.log=function(str,lvl){
-if(!this.debug){
-return;
-}
-while(this.logBacklog.length>0){
-if(!this.canLog){
-break;
-}
-var blo=this.logBacklog.shift();
-this.writeLog("["+blo[0]+"]: "+blo[1],blo[2]);
-}
-this.writeLog(str,lvl);
-};
-this.writeLog=function(str,lvl){
-dojo.debug(((new Date()).toLocaleTimeString())+": "+str);
-};
-this.init=function(){
-this.widenDomain();
-this.openTunnel();
-this.isInitialized=true;
-while(this.subscriptionBacklog.length){
-this.subscribe.apply(this,this.subscriptionBacklog.shift());
-}
-};
-this.clobber=function(){
-if(this.rcvNode){
-this.setCookie([[this.tunnelFrameKey,"closed"],["path","/"]],false);
-}
-};
-this.openTunnel=function(){
-this.rcvNodeName="rcvIFrame_"+this.getRandStr();
-this.setCookie([[this.tunnelFrameKey,this.rcvNodeName],["path","/"]],false);
-this.rcvNode=dojo.io.createIFrame(this.rcvNodeName);
-dojo.io.setIFrameSrc(this.rcvNode,this.initDoc+"?callback=repubsub.rcvNodeReady&domain="+document.domain);
-this.sndNodeName="sndIFrame_"+this.getRandStr();
-this.sndNode=dojo.io.createIFrame(this.sndNodeName);
-dojo.io.setIFrameSrc(this.sndNode,this.initDoc+"?callback=repubsub.sndNodeReady&domain="+document.domain);
-};
-this.rcvNodeReady=function(){
-var _24=[this.tunnelURI,"/kn_status/",this.getRandStr(),"_",String(this.tunnelInitCount++)].join("");
-this.log("rcvNodeReady");
-var _25=[this.serverBaseURL,"/kn?kn_from=",escape(this.tunnelURI),"&kn_id=",escape(this.tunnelID),"&kn_status_from=",escape(_24)];
-dojo.io.setIFrameSrc(this.rcvNode,_25.join(""));
-this.subscribe(_24,this,"statusListener",true);
-this.log(_25.join(""));
-};
-this.sndNodeReady=function(){
-this.canSnd=true;
-this.log("sndNodeReady");
-this.log(this.backlog.length);
-if(this.backlog.length>0){
-this.dequeueEvent();
-}
-};
-this.statusListener=function(evt){
-this.log("status listener called");
-this.log(evt.status,"info");
-};
-this.dispatch=function(evt){
-if(evt["to"]||evt["kn_routed_from"]){
-var rf=evt["to"]||evt["kn_routed_from"];
-var _29=rf.split(this.serverBaseURL,2)[1];
-if(!_29){
-_29=rf;
-}
-this.log("[topic] "+_29);
-if(_29.length>3){
-if(_29.slice(0,3)=="/kn"){
-_29=_29.slice(3);
-}
-}
-if(this.attachPathList[_29]){
-this.attachPathList[_29](evt);
-}
-}
-};
-this.subscribe=function(_2a,_2b,_2c,_2d){
-if(!this.isInitialized){
-this.subscriptionBacklog.push([_2a,_2b,_2c,_2d]);
-return;
-}
-if(!this.attachPathList[_2a]){
-this.attachPathList[_2a]=function(){
-return true;
-};
-this.log("subscribing to: "+_2a);
-this.topics.push(_2a);
-}
-var _2e=new dojo.io.repubsubEvent(this.tunnelURI,_2a,"route");
-var _2f=[this.serverBaseURL+"/kn",_2e.toGetString()].join("");
-dojo.event.kwConnect({once:true,srcObj:this.attachPathList,srcFunc:_2a,adviceObj:_2b,adviceFunc:_2c});
-if(!this.rcvNode){
-}
-if(_2d){
-return;
-}
-this.log("sending subscription to: "+_2a);
-this.sendTopicSubToServer(_2a,_2f);
-};
-this.sendTopicSubToServer=function(_30,str){
-if(!this.attachPathList[_30]["subscriptions"]){
-this.enqueueEventStr(str);
-this.attachPathList[_30].subscriptions=0;
-}
-this.attachPathList[_30].subscriptions++;
-};
-this.unSubscribe=function(_32,_33,_34){
-dojo.event.kwDisconnect({srcObj:this.attachPathList,srcFunc:_32,adviceObj:_33,adviceFunc:_34});
-};
-this.publish=function(_35,_36){
-var evt=dojo.io.repubsubEvent.initFromProperties(_36);
-evt.to=_35;
-var _38=[];
-_38.push(this.serverBaseURL+"/kn");
-_38.push(evt.toGetString());
-this.enqueueEventStr(_38.join(""));
-};
-this.enqueueEventStr=function(_39){
-this.log("enqueueEventStr");
-this.backlog.push(_39);
-this.dequeueEvent();
-};
-this.dequeueEvent=function(_3a){
-this.log("dequeueEvent");
-if(this.backlog.length<=0){
-return;
-}
-if((this.canSnd)||(_3a)){
-dojo.io.setIFrameSrc(this.sndNode,this.backlog.shift()+"&callback=repubsub.sndNodeReady");
-this.canSnd=false;
-}else{
-this.log("sndNode not available yet!","debug");
-}
-};
-};
-dojo.io.repubsubEvent=function(to,_3c,_3d,id,_3f,_40,_41,uid){
-this.to=to;
-this.from=_3c;
-this.method=_3d||"route";
-this.id=id||repubsub.getRandStr();
-this.uri=_3f;
-this.displayname=_41||repubsub.displayname;
-this.userid=uid||repubsub.userid;
-this.payload=_40||"";
-this.flushChars=4096;
-this.initFromProperties=function(evt){
-if(evt.constructor=dojo.io.repubsubEvent){
-for(var x in evt){
-this[x]=evt[x];
-}
-}else{
-for(var x in evt){
-if(typeof this.forwardPropertiesMap[x]=="string"){
-this[this.forwardPropertiesMap[x]]=evt[x];
-}else{
-this[x]=evt[x];
-}
-}
-}
-};
-this.toGetString=function(_45){
-var qs=[((_45)?"":"?")];
-for(var x=0;x<this.properties.length;x++){
-var tp=this.properties[x];
-if(this[tp[0]]){
-qs.push(tp[1]+"="+encodeURIComponent(String(this[tp[0]])));
-}
-}
-return qs.join("&");
-};
-};
-dojo.io.repubsubEvent.prototype.properties=[["from","kn_from"],["to","kn_to"],["method","do_method"],["id","kn_id"],["uri","kn_uri"],["displayname","kn_displayname"],["userid","kn_userid"],["payload","kn_payload"],["flushChars","kn_response_flush"],["responseFormat","kn_response_format"]];
-dojo.io.repubsubEvent.prototype.forwardPropertiesMap={};
-dojo.io.repubsubEvent.prototype.reversePropertiesMap={};
-for(var x=0;x<dojo.io.repubsubEvent.prototype.properties.length;x++){
-var tp=dojo.io.repubsubEvent.prototype.properties[x];
-dojo.io.repubsubEvent.prototype.reversePropertiesMap[tp[0]]=tp[1];
-dojo.io.repubsubEvent.prototype.forwardPropertiesMap[tp[1]]=tp[0];
-}
-dojo.io.repubsubEvent.initFromProperties=function(evt){
-var _4a=new dojo.io.repubsubEvent();
-_4a.initFromProperties(evt);
-return _4a;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/RhinoIO.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/RhinoIO.js
deleted file mode 100644
index d0e0b0d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/RhinoIO.js
+++ /dev/null
@@ -1,103 +0,0 @@
-dojo.provide("dojo.io.RhinoIO");
-dojo.require("dojo.io.common");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.string.extras");
-dojo.io.RhinoHTTPTransport=new function(){
-this.canHandle=function(_1){
-if(dojo.lang.find(["text/plain","text/html","text/xml","text/javascript","text/json","application/json"],(_1.mimetype.toLowerCase()||""))<0){
-return false;
-}
-if(_1.url.substr(0,7)!="http://"){
-return false;
-}
-return true;
-};
-function doLoad(_2,_3){
-var _4;
-if(_2.method.toLowerCase()=="head"){
-}else{
-var _5=_3.getContent();
-var _6=new java.io.BufferedReader(new java.io.InputStreamReader(_5));
-var _7="";
-var _8=null;
-while((_8=_6.readLine())!=null){
-_7+=_8;
-}
-if(_2.mimetype=="text/javascript"){
-try{
-_4=dj_eval(_7);
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(_7);
-_4=null;
-}
-}else{
-if(_2.mimetype=="text/json"||_2.mimetype=="application/json"){
-try{
-_4=dj_eval("("+_7+")");
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(_7);
-_4=false;
-}
-}else{
-_4=_7;
-}
-}
-}
-_2.load("load",_4,_2);
-}
-function connect(_9){
-var _a=_9.content||{};
-var _b;
-if(_9.sendTransport){
-_a["dojo.transport"]="rhinohttp";
-}
-if(_9.postContent){
-_b=_9.postContent;
-}else{
-_b=dojo.io.argsFromMap(_a,_9.encoding);
-}
-var _c=_9.url;
-if(_9.method.toLowerCase()=="get"&&_b!=""){
-_c=_c+"?"+_b;
-}
-var _d=new java.net.URL(_c);
-var _e=_d.openConnection();
-_e.setRequestMethod(_9.method.toUpperCase());
-if(_9.headers){
-for(var _f in _9.headers){
-if(_f.toLowerCase()=="content-type"&&!_9.contentType){
-_9.contentType=_9.headers[_f];
-}else{
-_e.setRequestProperty(_f,_9.headers[_f]);
-}
-}
-}
-if(_9.contentType){
-_e.setRequestProperty("Content-Type",_9.contentType);
-}
-if(_9.method.toLowerCase()=="post"){
-_e.setDoOutput(true);
-var _10=_e.getOutputStream();
-var _11=(new java.lang.String(_b)).getBytes();
-_10.write(_11,0,_11.length);
-}
-_e.connect();
-doLoad(_9,_e);
-}
-this.bind=function(req){
-var _13=req["sync"]?false:true;
-if(_13){
-setTimeout(dojo.lang.hitch(this,function(){
-connect(req);
-}),1);
-}else{
-connect(req);
-}
-};
-dojo.io.transports.addTransport("RhinoHTTPTransport");
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/ScriptSrcIO.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/ScriptSrcIO.js
deleted file mode 100644
index 4a689ca..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/ScriptSrcIO.js
+++ /dev/null
@@ -1,304 +0,0 @@
-dojo.provide("dojo.io.ScriptSrcIO");
-dojo.require("dojo.io.BrowserIO");
-dojo.require("dojo.undo.browser");
-dojo.io.ScriptSrcTransport=new function(){
-this.preventCache=false;
-this.maxUrlLength=1000;
-this.inFlightTimer=null;
-this.DsrStatusCodes={Continue:100,Ok:200,Error:500};
-this.startWatchingInFlight=function(){
-if(!this.inFlightTimer){
-this.inFlightTimer=setInterval("dojo.io.ScriptSrcTransport.watchInFlight();",100);
-}
-};
-this.watchInFlight=function(){
-var _1=0;
-var _2=0;
-for(var _3 in this._state){
-_1++;
-var _4=this._state[_3];
-if(_4.isDone){
-_2++;
-delete this._state[_3];
-}else{
-if(!_4.isFinishing){
-var _5=_4.kwArgs;
-try{
-if(_4.checkString&&eval("typeof("+_4.checkString+") != 'undefined'")){
-_4.isFinishing=true;
-this._finish(_4,"load");
-_2++;
-delete this._state[_3];
-}else{
-if(_5.timeoutSeconds&&_5.timeout){
-if(_4.startTime+(_5.timeoutSeconds*1000)<(new Date()).getTime()){
-_4.isFinishing=true;
-this._finish(_4,"timeout");
-_2++;
-delete this._state[_3];
-}
-}else{
-if(!_5.timeoutSeconds){
-_2++;
-}
-}
-}
-}
-catch(e){
-_4.isFinishing=true;
-this._finish(_4,"error",{status:this.DsrStatusCodes.Error,response:e});
-}
-}
-}
-}
-if(_2>=_1){
-clearInterval(this.inFlightTimer);
-this.inFlightTimer=null;
-}
-};
-this.canHandle=function(_6){
-return dojo.lang.inArray(["text/javascript","text/json","application/json"],(_6["mimetype"].toLowerCase()))&&(_6["method"].toLowerCase()=="get")&&!(_6["formNode"]&&dojo.io.formHasFile(_6["formNode"]))&&(!_6["sync"]||_6["sync"]==false)&&!_6["file"]&&!_6["multipart"];
-};
-this.removeScripts=function(){
-var _7=document.getElementsByTagName("script");
-for(var i=0;_7&&i<_7.length;i++){
-var _9=_7[i];
-if(_9.className=="ScriptSrcTransport"){
-var _a=_9.parentNode;
-_a.removeChild(_9);
-i--;
-}
-}
-};
-this.bind=function(_b){
-var _c=_b.url;
-var _d="";
-if(_b["formNode"]){
-var ta=_b.formNode.getAttribute("action");
-if((ta)&&(!_b["url"])){
-_c=ta;
-}
-var tp=_b.formNode.getAttribute("method");
-if((tp)&&(!_b["method"])){
-_b.method=tp;
-}
-_d+=dojo.io.encodeForm(_b.formNode,_b.encoding,_b["formFilter"]);
-}
-if(_c.indexOf("#")>-1){
-dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",_c);
-_c=_c.split("#")[0];
-}
-var _10=_c.split("?");
-if(_10&&_10.length==2){
-_c=_10[0];
-_d+=(_d?"&":"")+_10[1];
-}
-if(_b["backButton"]||_b["back"]||_b["changeUrl"]){
-dojo.undo.browser.addToHistory(_b);
-}
-var id=_b["apiId"]?_b["apiId"]:"id"+this._counter++;
-var _12=_b["content"];
-var _13=_b.jsonParamName;
-if(_b.sendTransport||_13){
-if(!_12){
-_12={};
-}
-if(_b.sendTransport){
-_12["dojo.transport"]="scriptsrc";
-}
-if(_13){
-_12[_13]="dojo.io.ScriptSrcTransport._state."+id+".jsonpCall";
-}
-}
-if(_b.postContent){
-_d=_b.postContent;
-}else{
-if(_12){
-_d+=((_d)?"&":"")+dojo.io.argsFromMap(_12,_b.encoding,_13);
-}
-}
-if(_b["apiId"]){
-_b["useRequestId"]=true;
-}
-var _14={"id":id,"idParam":"_dsrid="+id,"url":_c,"query":_d,"kwArgs":_b,"startTime":(new Date()).getTime(),"isFinishing":false};
-if(!_c){
-this._finish(_14,"error",{status:this.DsrStatusCodes.Error,statusText:"url.none"});
-return;
-}
-if(_12&&_12[_13]){
-_14.jsonp=_12[_13];
-_14.jsonpCall=function(_15){
-if(_15["Error"]||_15["error"]){
-if(dojo["json"]&&dojo["json"]["serialize"]){
-dojo.debug(dojo.json.serialize(_15));
-}
-dojo.io.ScriptSrcTransport._finish(this,"error",_15);
-}else{
-dojo.io.ScriptSrcTransport._finish(this,"load",_15);
-}
-};
-}
-if(_b["useRequestId"]||_b["checkString"]||_14["jsonp"]){
-this._state[id]=_14;
-}
-if(_b["checkString"]){
-_14.checkString=_b["checkString"];
-}
-_14.constantParams=(_b["constantParams"]==null?"":_b["constantParams"]);
-if(_b["preventCache"]||(this.preventCache==true&&_b["preventCache"]!=false)){
-_14.nocacheParam="dojo.preventCache="+new Date().valueOf();
-}else{
-_14.nocacheParam="";
-}
-var _16=_14.url.length+_14.query.length+_14.constantParams.length+_14.nocacheParam.length+this._extraPaddingLength;
-if(_b["useRequestId"]){
-_16+=_14.idParam.length;
-}
-if(!_b["checkString"]&&_b["useRequestId"]&&!_14["jsonp"]&&!_b["forceSingleRequest"]&&_16>this.maxUrlLength){
-if(_c>this.maxUrlLength){
-this._finish(_14,"error",{status:this.DsrStatusCodes.Error,statusText:"url.tooBig"});
-return;
-}else{
-this._multiAttach(_14,1);
-}
-}else{
-var _17=[_14.constantParams,_14.nocacheParam,_14.query];
-if(_b["useRequestId"]&&!_14["jsonp"]){
-_17.unshift(_14.idParam);
-}
-var _18=this._buildUrl(_14.url,_17);
-_14.finalUrl=_18;
-this._attach(_14.id,_18);
-}
-this.startWatchingInFlight();
-};
-this._counter=1;
-this._state={};
-this._extraPaddingLength=16;
-this._buildUrl=function(url,_1a){
-var _1b=url;
-var _1c="?";
-for(var i=0;i<_1a.length;i++){
-if(_1a[i]){
-_1b+=_1c+_1a[i];
-_1c="&";
-}
-}
-return _1b;
-};
-this._attach=function(id,url){
-var _20=document.createElement("script");
-_20.type="text/javascript";
-_20.src=url;
-_20.id=id;
-_20.className="ScriptSrcTransport";
-document.getElementsByTagName("head")[0].appendChild(_20);
-};
-this._multiAttach=function(_21,_22){
-if(_21.query==null){
-this._finish(_21,"error",{status:this.DsrStatusCodes.Error,statusText:"query.null"});
-return;
-}
-if(!_21.constantParams){
-_21.constantParams="";
-}
-var _23=this.maxUrlLength-_21.idParam.length-_21.constantParams.length-_21.url.length-_21.nocacheParam.length-this._extraPaddingLength;
-var _24=_21.query.length<_23;
-var _25;
-if(_24){
-_25=_21.query;
-_21.query=null;
-}else{
-var _26=_21.query.lastIndexOf("&",_23-1);
-var _27=_21.query.lastIndexOf("=",_23-1);
-if(_26>_27||_27==_23-1){
-_25=_21.query.substring(0,_26);
-_21.query=_21.query.substring(_26+1,_21.query.length);
-}else{
-_25=_21.query.substring(0,_23);
-var _28=_25.substring((_26==-1?0:_26+1),_27);
-_21.query=_28+"="+_21.query.substring(_23,_21.query.length);
-}
-}
-var _29=[_25,_21.idParam,_21.constantParams,_21.nocacheParam];
-if(!_24){
-_29.push("_part="+_22);
-}
-var url=this._buildUrl(_21.url,_29);
-this._attach(_21.id+"_"+_22,url);
-};
-this._finish=function(_2b,_2c,_2d){
-if(_2c!="partOk"&&!_2b.kwArgs[_2c]&&!_2b.kwArgs["handle"]){
-if(_2c=="error"){
-_2b.isDone=true;
-throw _2d;
-}
-}else{
-switch(_2c){
-case "load":
-var _2e=_2d?_2d.response:null;
-if(!_2e){
-_2e=_2d;
-}
-_2b.kwArgs[(typeof _2b.kwArgs.load=="function")?"load":"handle"]("load",_2e,_2d,_2b.kwArgs);
-_2b.isDone=true;
-break;
-case "partOk":
-var _2f=parseInt(_2d.response.part,10)+1;
-if(_2d.response.constantParams){
-_2b.constantParams=_2d.response.constantParams;
-}
-this._multiAttach(_2b,_2f);
-_2b.isDone=false;
-break;
-case "error":
-_2b.kwArgs[(typeof _2b.kwArgs.error=="function")?"error":"handle"]("error",_2d.response,_2d,_2b.kwArgs);
-_2b.isDone=true;
-break;
-default:
-_2b.kwArgs[(typeof _2b.kwArgs[_2c]=="function")?_2c:"handle"](_2c,_2d,_2d,_2b.kwArgs);
-_2b.isDone=true;
-}
-}
-};
-dojo.io.transports.addTransport("ScriptSrcTransport");
-};
-window.onscriptload=function(_30){
-var _31=null;
-var _32=dojo.io.ScriptSrcTransport;
-if(_32._state[_30.id]){
-_31=_32._state[_30.id];
-}else{
-var _33;
-for(var _34 in _32._state){
-_33=_32._state[_34];
-if(_33.finalUrl&&_33.finalUrl==_30.id){
-_31=_33;
-break;
-}
-}
-if(_31==null){
-var _35=document.getElementsByTagName("script");
-for(var i=0;_35&&i<_35.length;i++){
-var _37=_35[i];
-if(_37.getAttribute("class")=="ScriptSrcTransport"&&_37.src==_30.id){
-_31=_32._state[_37.id];
-break;
-}
-}
-}
-if(_31==null){
-throw "No matching state for onscriptload event.id: "+_30.id;
-}
-}
-var _38="error";
-switch(_30.status){
-case dojo.io.ScriptSrcTransport.DsrStatusCodes.Continue:
-_38="partOk";
-break;
-case dojo.io.ScriptSrcTransport.DsrStatusCodes.Ok:
-_38="load";
-break;
-}
-_32._finish(_31,_38,_30);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/XhrIframeProxy.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/XhrIframeProxy.js
deleted file mode 100644
index 2acc896..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/XhrIframeProxy.js
+++ /dev/null
@@ -1,139 +0,0 @@
-dojo.provide("dojo.io.XhrIframeProxy");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.io.XhrIframeProxy");
-dojo.require("dojo.io.IframeIO");
-dojo.require("dojo.dom");
-dojo.require("dojo.uri.Uri");
-dojo.io.XhrIframeProxy={xipClientUrl:djConfig["xipClientUrl"]||dojo.uri.moduleUri("dojo.io","xip_client.html"),_state:{},_stateIdCounter:0,needFrameRecursion:function(){
-return (true==dojo.render.html.ie70);
-},send:function(_1){
-var _2="XhrIframeProxy"+(this._stateIdCounter++);
-_1._stateId=_2;
-var _3=this.xipClientUrl+"#0:init:id="+_2+"&server="+encodeURIComponent(_1._ifpServerUrl)+"&fr=false";
-if(this.needFrameRecursion()){
-var _4=window.location.href;
-if((this.xipClientUrl+"").charAt(0)=="/"){
-var _5=_4.indexOf("://");
-_5=_4.indexOf("/",_5+1);
-_4=_4.substring(0,_5);
-}else{
-_4=_4.substring(0,_4.lastIndexOf("/")+1);
-}
-_4+=this.xipClientUrl;
-var _6=_1._ifpServerUrl+(_1._ifpServerUrl.indexOf("?")==-1?"?":"&")+"dojo.fr=1";
-_3=_6+"#0:init:id="+_2+"&client="+encodeURIComponent(_4)+"&fr="+this.needFrameRecursion();
-}
-this._state[_2]={facade:_1,stateId:_2,clientFrame:dojo.io.createIFrame(_2,"",_3)};
-return _2;
-},receive:function(_7,_8){
-var _9={};
-var _a=_8.split("&");
-for(var i=0;i<_a.length;i++){
-if(_a[i]){
-var _c=_a[i].split("=");
-_9[decodeURIComponent(_c[0])]=decodeURIComponent(_c[1]);
-}
-}
-var _d=this._state[_7];
-var _e=_d.facade;
-_e._setResponseHeaders(_9.responseHeaders);
-if(_9.status==0||_9.status){
-_e.status=parseInt(_9.status,10);
-}
-if(_9.statusText){
-_e.statusText=_9.statusText;
-}
-if(_9.responseText){
-_e.responseText=_9.responseText;
-var _f=_e.getResponseHeader("Content-Type");
-if(_f&&(_f=="application/xml"||_f=="text/xml")){
-_e.responseXML=dojo.dom.createDocumentFromText(_9.responseText,_f);
-}
-}
-_e.readyState=4;
-this.destroyState(_7);
-},clientFrameLoaded:function(_10){
-var _11=this._state[_10];
-var _12=_11.facade;
-if(this.needFrameRecursion()){
-var _13=window.open("",_11.stateId+"_clientEndPoint");
-}else{
-var _13=_11.clientFrame.contentWindow;
-}
-var _14=[];
-for(var _15 in _12._requestHeaders){
-_14.push(_15+": "+_12._requestHeaders[_15]);
-}
-var _16={uri:_12._uri};
-if(_14.length>0){
-_16.requestHeaders=_14.join("\r\n");
-}
-if(_12._method){
-_16.method=_12._method;
-}
-if(_12._bodyData){
-_16.data=_12._bodyData;
-}
-_13.send(dojo.io.argsFromMap(_16,"utf8"));
-},destroyState:function(_17){
-var _18=this._state[_17];
-if(_18){
-delete this._state[_17];
-var _19=_18.clientFrame.parentNode;
-_19.removeChild(_18.clientFrame);
-_18.clientFrame=null;
-_18=null;
-}
-},createFacade:function(){
-if(arguments&&arguments[0]&&arguments[0]["iframeProxyUrl"]){
-return new dojo.io.XhrIframeFacade(arguments[0]["iframeProxyUrl"]);
-}else{
-return dojo.io.XhrIframeProxy.oldGetXmlhttpObject.apply(dojo.hostenv,arguments);
-}
-}};
-dojo.io.XhrIframeProxy.oldGetXmlhttpObject=dojo.hostenv.getXmlhttpObject;
-dojo.hostenv.getXmlhttpObject=dojo.io.XhrIframeProxy.createFacade;
-dojo.io.XhrIframeFacade=function(_1a){
-this._requestHeaders={};
-this._allResponseHeaders=null;
-this._responseHeaders={};
-this._method=null;
-this._uri=null;
-this._bodyData=null;
-this.responseText=null;
-this.responseXML=null;
-this.status=null;
-this.statusText=null;
-this.readyState=0;
-this._ifpServerUrl=_1a;
-this._stateId=null;
-};
-dojo.lang.extend(dojo.io.XhrIframeFacade,{open:function(_1b,uri){
-this._method=_1b;
-this._uri=uri;
-this.readyState=1;
-},setRequestHeader:function(_1d,_1e){
-this._requestHeaders[_1d]=_1e;
-},send:function(_1f){
-this._bodyData=_1f;
-this._stateId=dojo.io.XhrIframeProxy.send(this);
-this.readyState=2;
-},abort:function(){
-dojo.io.XhrIframeProxy.destroyState(this._stateId);
-},getAllResponseHeaders:function(){
-return this._allResponseHeaders;
-},getResponseHeader:function(_20){
-return this._responseHeaders[_20];
-},_setResponseHeaders:function(_21){
-if(_21){
-this._allResponseHeaders=_21;
-_21=_21.replace(/\r/g,"");
-var _22=_21.split("\n");
-for(var i=0;i<_22.length;i++){
-if(_22[i]){
-var _24=_22[i].split(": ");
-this._responseHeaders[_24[0]]=_24[1];
-}
-}
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/__package__.js
deleted file mode 100644
index 070e126..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.io.common"],rhino:["dojo.io.RhinoIO"],browser:["dojo.io.BrowserIO","dojo.io.cookie"],dashboard:["dojo.io.BrowserIO","dojo.io.cookie"]});
-dojo.provide("dojo.io.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/cometd.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/cometd.js
deleted file mode 100644
index 7d0ffed..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/cometd.js
+++ /dev/null
@@ -1,517 +0,0 @@
-dojo.require("dojo.io.common");
-dojo.provide("dojo.io.cometd");
-dojo.require("dojo.AdapterRegistry");
-dojo.require("dojo.json");
-dojo.require("dojo.io.BrowserIO");
-dojo.require("dojo.io.IframeIO");
-dojo.require("dojo.io.ScriptSrcIO");
-dojo.require("dojo.io.cookie");
-dojo.require("dojo.event.*");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.func");
-cometd=new function(){
-this.initialized=false;
-this.connected=false;
-this.connectionTypes=new dojo.AdapterRegistry(true);
-this.version=0.1;
-this.minimumVersion=0.1;
-this.clientId=null;
-this._isXD=false;
-this.handshakeReturn=null;
-this.currentTransport=null;
-this.url=null;
-this.lastMessage=null;
-this.globalTopicChannels={};
-this.backlog=[];
-this.tunnelInit=function(_1,_2){
-};
-this.tunnelCollapse=function(){
-dojo.debug("tunnel collapsed!");
-};
-this.init=function(_3,_4,_5){
-_3=_3||{};
-_3.version=this.version;
-_3.minimumVersion=this.minimumVersion;
-_3.channel="/meta/handshake";
-this.url=_4||djConfig["cometdRoot"];
-if(!this.url){
-dojo.debug("no cometd root specified in djConfig and no root passed");
-return;
-}
-var _6={url:this.url,method:"POST",mimetype:"text/json",load:dojo.lang.hitch(this,"finishInit"),content:{"message":dojo.json.serialize([_3])}};
-var _7="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-var r=(""+window.location).match(new RegExp(_7));
-if(r[4]){
-var _9=r[4].split(":");
-var _a=_9[0];
-var _b=_9[1]||"80";
-r=this.url.match(new RegExp(_7));
-if(r[4]){
-_9=r[4].split(":");
-var _c=_9[0];
-var _d=_9[1]||"80";
-if((_c!=_a)||(_d!=_b)){
-dojo.debug(_a,_c);
-dojo.debug(_b,_d);
-this._isXD=true;
-_6.transport="ScriptSrcTransport";
-_6.jsonParamName="jsonp";
-_6.method="GET";
-}
-}
-}
-if(_5){
-dojo.lang.mixin(_6,_5);
-}
-return dojo.io.bind(_6);
-};
-this.finishInit=function(_e,_f,evt,_11){
-_f=_f[0];
-this.handshakeReturn=_f;
-if(_f["authSuccessful"]==false){
-dojo.debug("cometd authentication failed");
-return;
-}
-if(_f.version<this.minimumVersion){
-dojo.debug("cometd protocol version mismatch. We wanted",this.minimumVersion,"but got",_f.version);
-return;
-}
-this.currentTransport=this.connectionTypes.match(_f.supportedConnectionTypes,_f.version,this._isXD);
-this.currentTransport.version=_f.version;
-this.clientId=_f.clientId;
-this.tunnelInit=dojo.lang.hitch(this.currentTransport,"tunnelInit");
-this.tunnelCollapse=dojo.lang.hitch(this.currentTransport,"tunnelCollapse");
-this.initialized=true;
-this.currentTransport.startup(_f);
-while(this.backlog.length!=0){
-var cur=this.backlog.shift();
-var fn=cur.shift();
-this[fn].apply(this,cur);
-}
-};
-this._getRandStr=function(){
-return Math.random().toString().substring(2,10);
-};
-this.deliver=function(_14){
-dojo.lang.forEach(_14,this._deliver,this);
-};
-this._deliver=function(_15){
-if(!_15["channel"]){
-dojo.debug("cometd error: no channel for message!");
-return;
-}
-if(!this.currentTransport){
-this.backlog.push(["deliver",_15]);
-return;
-}
-this.lastMessage=_15;
-if((_15.channel.length>5)&&(_15.channel.substr(0,5)=="/meta")){
-switch(_15.channel){
-case "/meta/subscribe":
-if(!_15.successful){
-dojo.debug("cometd subscription error for channel",_15.channel,":",_15.error);
-return;
-}
-this.subscribed(_15.subscription,_15);
-break;
-case "/meta/unsubscribe":
-if(!_15.successful){
-dojo.debug("cometd unsubscription error for channel",_15.channel,":",_15.error);
-return;
-}
-this.unsubscribed(_15.subscription,_15);
-break;
-}
-}
-this.currentTransport.deliver(_15);
-if(_15.data){
-var _16=(this.globalTopicChannels[_15.channel])?_15.channel:"/cometd"+_15.channel;
-dojo.event.topic.publish(_16,_15);
-}
-};
-this.disconnect=function(){
-if(!this.currentTransport){
-dojo.debug("no current transport to disconnect from");
-return;
-}
-this.currentTransport.disconnect();
-};
-this.publish=function(_17,_18,_19){
-if(!this.currentTransport){
-this.backlog.push(["publish",_17,_18,_19]);
-return;
-}
-var _1a={data:_18,channel:_17};
-if(_19){
-dojo.lang.mixin(_1a,_19);
-}
-return this.currentTransport.sendMessage(_1a);
-};
-this.subscribe=function(_1b,_1c,_1d,_1e){
-if(!this.currentTransport){
-this.backlog.push(["subscribe",_1b,_1c,_1d,_1e]);
-return;
-}
-if(_1d){
-var _1f=(_1c)?_1b:"/cometd"+_1b;
-if(_1c){
-this.globalTopicChannels[_1b]=true;
-}
-dojo.event.topic.subscribe(_1f,_1d,_1e);
-}
-return this.currentTransport.sendMessage({channel:"/meta/subscribe",subscription:_1b});
-};
-this.subscribed=function(_20,_21){
-dojo.debug(_20);
-dojo.debugShallow(_21);
-};
-this.unsubscribe=function(_22,_23,_24,_25){
-if(!this.currentTransport){
-this.backlog.push(["unsubscribe",_22,_23,_24,_25]);
-return;
-}
-if(_24){
-var _26=(_23)?_22:"/cometd"+_22;
-dojo.event.topic.unsubscribe(_26,_24,_25);
-}
-return this.currentTransport.sendMessage({channel:"/meta/unsubscribe",subscription:_22});
-};
-this.unsubscribed=function(_27,_28){
-dojo.debug(_27);
-dojo.debugShallow(_28);
-};
-};
-cometd.iframeTransport=new function(){
-this.connected=false;
-this.connectionId=null;
-this.rcvNode=null;
-this.rcvNodeName="";
-this.phonyForm=null;
-this.authToken=null;
-this.lastTimestamp=null;
-this.lastId=null;
-this.backlog=[];
-this.check=function(_29,_2a,_2b){
-return ((!_2b)&&(!dojo.render.html.safari)&&(dojo.lang.inArray(_29,"iframe")));
-};
-this.tunnelInit=function(){
-this.postToIframe({message:dojo.json.serialize([{channel:"/meta/connect",clientId:cometd.clientId,connectionType:"iframe"}])});
-};
-this.tunnelCollapse=function(){
-if(this.connected){
-this.connected=false;
-this.postToIframe({message:dojo.json.serialize([{channel:"/meta/reconnect",clientId:cometd.clientId,connectionId:this.connectionId,timestamp:this.lastTimestamp,id:this.lastId}])});
-}
-};
-this.deliver=function(_2c){
-if(_2c["timestamp"]){
-this.lastTimestamp=_2c.timestamp;
-}
-if(_2c["id"]){
-this.lastId=_2c.id;
-}
-if((_2c.channel.length>5)&&(_2c.channel.substr(0,5)=="/meta")){
-switch(_2c.channel){
-case "/meta/connect":
-if(!_2c.successful){
-dojo.debug("cometd connection error:",_2c.error);
-return;
-}
-this.connectionId=_2c.connectionId;
-this.connected=true;
-this.processBacklog();
-break;
-case "/meta/reconnect":
-if(!_2c.successful){
-dojo.debug("cometd reconnection error:",_2c.error);
-return;
-}
-this.connected=true;
-break;
-case "/meta/subscribe":
-if(!_2c.successful){
-dojo.debug("cometd subscription error for channel",_2c.channel,":",_2c.error);
-return;
-}
-dojo.debug(_2c.channel);
-break;
-}
-}
-};
-this.widenDomain=function(_2d){
-var cd=_2d||document.domain;
-if(cd.indexOf(".")==-1){
-return;
-}
-var dps=cd.split(".");
-if(dps.length<=2){
-return;
-}
-dps=dps.slice(dps.length-2);
-document.domain=dps.join(".");
-return document.domain;
-};
-this.postToIframe=function(_30,url){
-if(!this.phonyForm){
-if(dojo.render.html.ie){
-this.phonyForm=document.createElement("<form enctype='application/x-www-form-urlencoded' method='POST' style='display: none;'>");
-dojo.body().appendChild(this.phonyForm);
-}else{
-this.phonyForm=document.createElement("form");
-this.phonyForm.style.display="none";
-dojo.body().appendChild(this.phonyForm);
-this.phonyForm.enctype="application/x-www-form-urlencoded";
-this.phonyForm.method="POST";
-}
-}
-this.phonyForm.action=url||cometd.url;
-this.phonyForm.target=this.rcvNodeName;
-this.phonyForm.setAttribute("target",this.rcvNodeName);
-while(this.phonyForm.firstChild){
-this.phonyForm.removeChild(this.phonyForm.firstChild);
-}
-for(var x in _30){
-var tn;
-if(dojo.render.html.ie){
-tn=document.createElement("<input type='hidden' name='"+x+"' value='"+_30[x]+"'>");
-this.phonyForm.appendChild(tn);
-}else{
-tn=document.createElement("input");
-this.phonyForm.appendChild(tn);
-tn.type="hidden";
-tn.name=x;
-tn.value=_30[x];
-}
-}
-this.phonyForm.submit();
-};
-this.processBacklog=function(){
-while(this.backlog.length>0){
-this.sendMessage(this.backlog.shift(),true);
-}
-};
-this.sendMessage=function(_34,_35){
-if((_35)||(this.connected)){
-_34.connectionId=this.connectionId;
-_34.clientId=cometd.clientId;
-var _36={url:cometd.url||djConfig["cometdRoot"],method:"POST",mimetype:"text/json",content:{message:dojo.json.serialize([_34])}};
-return dojo.io.bind(_36);
-}else{
-this.backlog.push(_34);
-}
-};
-this.startup=function(_37){
-dojo.debug("startup!");
-dojo.debug(dojo.json.serialize(_37));
-if(this.connected){
-return;
-}
-this.rcvNodeName="cometdRcv_"+cometd._getRandStr();
-var _38=cometd.url+"/?tunnelInit=iframe";
-if(false&&dojo.render.html.ie){
-this.rcvNode=new ActiveXObject("htmlfile");
-this.rcvNode.open();
-this.rcvNode.write("<html>");
-this.rcvNode.write("<script>document.domain = '"+document.domain+"'");
-this.rcvNode.write("</html>");
-this.rcvNode.close();
-var _39=this.rcvNode.createElement("div");
-this.rcvNode.appendChild(_39);
-this.rcvNode.parentWindow.dojo=dojo;
-_39.innerHTML="<iframe src='"+_38+"'></iframe>";
-}else{
-this.rcvNode=dojo.io.createIFrame(this.rcvNodeName,"",_38);
-}
-};
-};
-cometd.mimeReplaceTransport=new function(){
-this.connected=false;
-this.connectionId=null;
-this.xhr=null;
-this.authToken=null;
-this.lastTimestamp=null;
-this.lastId=null;
-this.backlog=[];
-this.check=function(_3a,_3b,_3c){
-return ((!_3c)&&(dojo.render.html.mozilla)&&(dojo.lang.inArray(_3a,"mime-message-block")));
-};
-this.tunnelInit=function(){
-if(this.connected){
-return;
-}
-this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/connect",clientId:cometd.clientId,connectionType:"mime-message-block"}])});
-this.connected=true;
-};
-this.tunnelCollapse=function(){
-if(this.connected){
-this.connected=false;
-this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/reconnect",clientId:cometd.clientId,connectionId:this.connectionId,timestamp:this.lastTimestamp,id:this.lastId}])});
-}
-};
-this.deliver=cometd.iframeTransport.deliver;
-this.handleOnLoad=function(_3d){
-cometd.deliver(dojo.json.evalJson(this.xhr.responseText));
-};
-this.openTunnelWith=function(_3e,url){
-this.xhr=dojo.hostenv.getXmlhttpObject();
-this.xhr.multipart=true;
-if(dojo.render.html.mozilla){
-this.xhr.addEventListener("load",dojo.lang.hitch(this,"handleOnLoad"),false);
-}else{
-if(dojo.render.html.safari){
-dojo.debug("Webkit is broken with multipart responses over XHR = (");
-this.xhr.onreadystatechange=dojo.lang.hitch(this,"handleOnLoad");
-}else{
-this.xhr.onload=dojo.lang.hitch(this,"handleOnLoad");
-}
-}
-this.xhr.open("POST",(url||cometd.url),true);
-this.xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
-dojo.debug(dojo.json.serialize(_3e));
-this.xhr.send(dojo.io.argsFromMap(_3e,"utf8"));
-};
-this.processBacklog=function(){
-while(this.backlog.length>0){
-this.sendMessage(this.backlog.shift(),true);
-}
-};
-this.sendMessage=function(_40,_41){
-if((_41)||(this.connected)){
-_40.connectionId=this.connectionId;
-_40.clientId=cometd.clientId;
-var _42={url:cometd.url||djConfig["cometdRoot"],method:"POST",mimetype:"text/json",content:{message:dojo.json.serialize([_40])}};
-return dojo.io.bind(_42);
-}else{
-this.backlog.push(_40);
-}
-};
-this.startup=function(_43){
-dojo.debugShallow(_43);
-if(this.connected){
-return;
-}
-this.tunnelInit();
-};
-};
-cometd.longPollTransport=new function(){
-this.connected=false;
-this.connectionId=null;
-this.authToken=null;
-this.lastTimestamp=null;
-this.lastId=null;
-this.backlog=[];
-this.check=function(_44,_45,_46){
-return ((!_46)&&(dojo.lang.inArray(_44,"long-polling")));
-};
-this.tunnelInit=function(){
-if(this.connected){
-return;
-}
-this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/connect",clientId:cometd.clientId,connectionType:"long-polling"}])});
-this.connected=true;
-};
-this.tunnelCollapse=function(){
-if(!this.connected){
-this.connected=false;
-dojo.debug("clientId:",cometd.clientId);
-this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/reconnect",connectionType:"long-polling",clientId:cometd.clientId,connectionId:this.connectionId,timestamp:this.lastTimestamp,id:this.lastId}])});
-}
-};
-this.deliver=cometd.iframeTransport.deliver;
-this.openTunnelWith=function(_47,url){
-dojo.io.bind({url:(url||cometd.url),method:"post",content:_47,mimetype:"text/json",load:dojo.lang.hitch(this,function(_49,_4a,evt,_4c){
-cometd.deliver(_4a);
-this.connected=false;
-this.tunnelCollapse();
-}),error:function(){
-dojo.debug("tunnel opening failed");
-}});
-this.connected=true;
-};
-this.processBacklog=function(){
-while(this.backlog.length>0){
-this.sendMessage(this.backlog.shift(),true);
-}
-};
-this.sendMessage=function(_4d,_4e){
-if((_4e)||(this.connected)){
-_4d.connectionId=this.connectionId;
-_4d.clientId=cometd.clientId;
-var _4f={url:cometd.url||djConfig["cometdRoot"],method:"post",mimetype:"text/json",content:{message:dojo.json.serialize([_4d])},load:dojo.lang.hitch(this,function(_50,_51,evt,_53){
-cometd.deliver(_51);
-})};
-return dojo.io.bind(_4f);
-}else{
-this.backlog.push(_4d);
-}
-};
-this.startup=function(_54){
-if(this.connected){
-return;
-}
-this.tunnelInit();
-};
-};
-cometd.callbackPollTransport=new function(){
-this.connected=false;
-this.connectionId=null;
-this.authToken=null;
-this.lastTimestamp=null;
-this.lastId=null;
-this.backlog=[];
-this.check=function(_55,_56,_57){
-return dojo.lang.inArray(_55,"callback-polling");
-};
-this.tunnelInit=function(){
-if(this.connected){
-return;
-}
-this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/connect",clientId:cometd.clientId,connectionType:"callback-polling"}])});
-this.connected=true;
-};
-this.tunnelCollapse=function(){
-if(!this.connected){
-this.connected=false;
-this.openTunnelWith({message:dojo.json.serialize([{channel:"/meta/reconnect",connectionType:"long-polling",clientId:cometd.clientId,connectionId:this.connectionId,timestamp:this.lastTimestamp,id:this.lastId}])});
-}
-};
-this.deliver=cometd.iframeTransport.deliver;
-this.openTunnelWith=function(_58,url){
-var req=dojo.io.bind({url:(url||cometd.url),content:_58,mimetype:"text/json",transport:"ScriptSrcTransport",jsonParamName:"jsonp",load:dojo.lang.hitch(this,function(_5b,_5c,evt,_5e){
-cometd.deliver(_5c);
-this.connected=false;
-this.tunnelCollapse();
-}),error:function(){
-dojo.debug("tunnel opening failed");
-}});
-this.connected=true;
-};
-this.processBacklog=function(){
-while(this.backlog.length>0){
-this.sendMessage(this.backlog.shift(),true);
-}
-};
-this.sendMessage=function(_5f,_60){
-if((_60)||(this.connected)){
-_5f.connectionId=this.connectionId;
-_5f.clientId=cometd.clientId;
-var _61={url:cometd.url||djConfig["cometdRoot"],mimetype:"text/json",transport:"ScriptSrcTransport",jsonParamName:"jsonp",content:{message:dojo.json.serialize([_5f])},load:dojo.lang.hitch(this,function(_62,_63,evt,_65){
-cometd.deliver(_63);
-})};
-return dojo.io.bind(_61);
-}else{
-this.backlog.push(_5f);
-}
-};
-this.startup=function(_66){
-if(this.connected){
-return;
-}
-this.tunnelInit();
-};
-};
-cometd.connectionTypes.register("mime-message-block",cometd.mimeReplaceTransport.check,cometd.mimeReplaceTransport);
-cometd.connectionTypes.register("long-polling",cometd.longPollTransport.check,cometd.longPollTransport);
-cometd.connectionTypes.register("callback-polling",cometd.callbackPollTransport.check,cometd.callbackPollTransport);
-cometd.connectionTypes.register("iframe",cometd.iframeTransport.check,cometd.iframeTransport);
-dojo.io.cometd=cometd;
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/common.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/common.js
deleted file mode 100644
index 99b1180..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/common.js
+++ /dev/null
@@ -1,219 +0,0 @@
-dojo.provide("dojo.io.common");
-dojo.require("dojo.string");
-dojo.require("dojo.lang.extras");
-dojo.io.transports=[];
-dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(_1,_2,_3,_4){
-if((arguments.length==1)&&(arguments[0].constructor==Object)){
-this.fromKwArgs(arguments[0]);
-}else{
-this.url=_1;
-if(_2){
-this.mimetype=_2;
-}
-if(_3){
-this.transport=_3;
-}
-if(arguments.length>=4){
-this.changeUrl=_4;
-}
-}
-};
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,jsonFilter:function(_5){
-if((this.mimetype=="text/json-comment-filtered")||(this.mimetype=="application/json-comment-filtered")){
-var _6=_5.indexOf("/*");
-var _7=_5.lastIndexOf("*/");
-if((_6==-1)||(_7==-1)){
-dojo.debug("your JSON wasn't comment filtered!");
-return "";
-}
-return _5.substring(_6+2,_7);
-}
-dojo.debug("please consider using a mimetype of text/json-comment-filtered to avoid potential security issues with JSON endpoints");
-return _5;
-},load:function(_8,_9,_a,_b){
-},error:function(_c,_d,_e,_f){
-},timeout:function(_10,_11,_12,_13){
-},handle:function(_14,_15,_16,_17){
-},timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_18){
-if(_18["url"]){
-_18.url=_18.url.toString();
-}
-if(_18["formNode"]){
-_18.formNode=dojo.byId(_18.formNode);
-}
-if(!_18["method"]&&_18["formNode"]&&_18["formNode"].method){
-_18.method=_18["formNode"].method;
-}
-if(!_18["handle"]&&_18["handler"]){
-_18.handle=_18.handler;
-}
-if(!_18["load"]&&_18["loaded"]){
-_18.load=_18.loaded;
-}
-if(!_18["changeUrl"]&&_18["changeURL"]){
-_18.changeUrl=_18.changeURL;
-}
-_18.encoding=dojo.lang.firstValued(_18["encoding"],djConfig["bindEncoding"],"");
-_18.sendTransport=dojo.lang.firstValued(_18["sendTransport"],djConfig["ioSendTransport"],false);
-var _19=dojo.lang.isFunction;
-for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
-var fn=dojo.io.hdlrFuncNames[x];
-if(_18[fn]&&_19(_18[fn])){
-continue;
-}
-if(_18["handle"]&&_19(_18["handle"])){
-_18[fn]=_18.handle;
-}
-}
-dojo.lang.mixin(this,_18);
-}});
-dojo.io.Error=function(msg,_1d,num){
-this.message=msg;
-this.type=_1d||"unknown";
-this.number=num||0;
-};
-dojo.io.transports.addTransport=function(_1f){
-this.push(_1f);
-this[_1f]=dojo.io[_1f];
-};
-dojo.io.bind=function(_20){
-if(!(_20 instanceof dojo.io.Request)){
-try{
-_20=new dojo.io.Request(_20);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _21="";
-if(_20["transport"]){
-_21=_20["transport"];
-if(!this[_21]){
-dojo.io.sendBindError(_20,"No dojo.io.bind() transport with name '"+_20["transport"]+"'.");
-return _20;
-}
-if(!this[_21].canHandle(_20)){
-dojo.io.sendBindError(_20,"dojo.io.bind() transport with name '"+_20["transport"]+"' cannot handle this type of request.");
-return _20;
-}
-}else{
-for(var x=0;x<dojo.io.transports.length;x++){
-var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_20))){
-_21=tmp;
-break;
-}
-}
-if(_21==""){
-dojo.io.sendBindError(_20,"None of the loaded transports for dojo.io.bind()"+" can handle the request.");
-return _20;
-}
-}
-this[_21].bind(_20);
-_20.bindSuccess=true;
-return _20;
-};
-dojo.io.sendBindError=function(_24,_25){
-if((typeof _24.error=="function"||typeof _24.handle=="function")&&(typeof setTimeout=="function"||typeof setTimeout=="object")){
-var _26=new dojo.io.Error(_25);
-setTimeout(function(){
-_24[(typeof _24.error=="function")?"error":"handle"]("error",_26,null,_24);
-},50);
-}else{
-dojo.raise(_25);
-}
-};
-dojo.io.queueBind=function(_27){
-if(!(_27 instanceof dojo.io.Request)){
-try{
-_27=new dojo.io.Request(_27);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _28=_27.load;
-_27.load=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_28.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-var _2a=_27.error;
-_27.error=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_2a.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-dojo.io._bindQueue.push(_27);
-dojo.io._dispatchNextQueueBind();
-return _27;
-};
-dojo.io._dispatchNextQueueBind=function(){
-if(!dojo.io._queueBindInFlight){
-dojo.io._queueBindInFlight=true;
-if(dojo.io._bindQueue.length>0){
-dojo.io.bind(dojo.io._bindQueue.shift());
-}else{
-dojo.io._queueBindInFlight=false;
-}
-}
-};
-dojo.io._bindQueue=[];
-dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_2d,_2e){
-var enc=/utf/i.test(_2d||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _30=[];
-var _31=new Object();
-for(var _32 in map){
-var _33=function(elt){
-var val=enc(_32)+"="+enc(elt);
-_30[(_2e==_32)?"push":"unshift"](val);
-};
-if(!_31[_32]){
-var _36=map[_32];
-if(dojo.lang.isArray(_36)){
-dojo.lang.forEach(_36,_33);
-}else{
-_33(_36);
-}
-}
-}
-return _30.join("&");
-};
-dojo.io.setIFrameSrc=function(_37,src,_39){
-try{
-var r=dojo.render.html;
-if(!_39){
-if(r.safari){
-_37.location=src;
-}else{
-frames[_37.name].location=src;
-}
-}else{
-var _3b;
-if(r.ie){
-_3b=_37.contentWindow.document;
-}else{
-if(r.safari){
-_3b=_37.document;
-}else{
-_3b=_37.contentWindow;
-}
-}
-if(!_3b){
-_37.location=src;
-return;
-}else{
-_3b.location.replace(src);
-}
-}
-}
-catch(e){
-dojo.debug(e);
-dojo.debug("setIFrameSrc: "+e);
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/cookie.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/cookie.js
deleted file mode 100644
index 02b1901..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/cookie.js
+++ /dev/null
@@ -1,91 +0,0 @@
-dojo.provide("dojo.io.cookie");
-dojo.io.cookie.setCookie=function(_1,_2,_3,_4,_5,_6){
-var _7=-1;
-if((typeof _3=="number")&&(_3>=0)){
-var d=new Date();
-d.setTime(d.getTime()+(_3*24*60*60*1000));
-_7=d.toGMTString();
-}
-_2=escape(_2);
-document.cookie=_1+"="+_2+";"+(_7!=-1?" expires="+_7+";":"")+(_4?"path="+_4:"")+(_5?"; domain="+_5:"")+(_6?"; secure":"");
-};
-dojo.io.cookie.set=dojo.io.cookie.setCookie;
-dojo.io.cookie.getCookie=function(_9){
-var _a=document.cookie.lastIndexOf(_9+"=");
-if(_a==-1){
-return null;
-}
-var _b=document.cookie.substring(_a+_9.length+1);
-var _c=_b.indexOf(";");
-if(_c==-1){
-_c=_b.length;
-}
-_b=_b.substring(0,_c);
-_b=unescape(_b);
-return _b;
-};
-dojo.io.cookie.get=dojo.io.cookie.getCookie;
-dojo.io.cookie.deleteCookie=function(_d){
-dojo.io.cookie.setCookie(_d,"-",0);
-};
-dojo.io.cookie.setObjectCookie=function(_e,_f,_10,_11,_12,_13,_14){
-if(arguments.length==5){
-_14=_12;
-_12=null;
-_13=null;
-}
-var _15=[],_16,_17="";
-if(!_14){
-_16=dojo.io.cookie.getObjectCookie(_e);
-}
-if(_10>=0){
-if(!_16){
-_16={};
-}
-for(var _18 in _f){
-if(_f[_18]==null){
-delete _16[_18];
-}else{
-if((typeof _f[_18]=="string")||(typeof _f[_18]=="number")){
-_16[_18]=_f[_18];
-}
-}
-}
-_18=null;
-for(var _18 in _16){
-_15.push(escape(_18)+"="+escape(_16[_18]));
-}
-_17=_15.join("&");
-}
-dojo.io.cookie.setCookie(_e,_17,_10,_11,_12,_13);
-};
-dojo.io.cookie.getObjectCookie=function(_19){
-var _1a=null,_1b=dojo.io.cookie.getCookie(_19);
-if(_1b){
-_1a={};
-var _1c=_1b.split("&");
-for(var i=0;i<_1c.length;i++){
-var _1e=_1c[i].split("=");
-var _1f=_1e[1];
-if(isNaN(_1f)){
-_1f=unescape(_1e[1]);
-}
-_1a[unescape(_1e[0])]=_1f;
-}
-}
-return _1a;
-};
-dojo.io.cookie.isSupported=function(){
-if(typeof navigator.cookieEnabled!="boolean"){
-dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed",90,null);
-var _20=dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");
-navigator.cookieEnabled=(_20=="CookiesAllowed");
-if(navigator.cookieEnabled){
-this.deleteCookie("__TestingYourBrowserForCookieSupport__");
-}
-}
-return navigator.cookieEnabled;
-};
-if(!dojo.io.cookies){
-dojo.io.cookies=dojo.io.cookie;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/xip_client.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/xip_client.html
deleted file mode 100644
index 1ed6ea4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/xip_client.html
+++ /dev/null
@@ -1,267 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-	<title></title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
-	<!-- Security protection: uncomment the script tag to enable. -->
-	<!-- script type="text/javascript" -->
-	// <!--
-	/*
-	This file is really focused on just sending one message to the server, and
-	receiving one response. The code does not expect to be re-used for multiple messages.
-	This might be reworked later if performance indicates a need for it.
-	
-	xip fragment identifier/hash values have the form:
-	#id:cmd:realEncodedMessage
-
-	id: some ID that should be unique among messages. No inherent meaning,
-	        just something to make sure the hash value is unique so the message
-	        receiver knows a new message is available.
-	        
-	cmd: command to the receiver. Valid values are:
-	         - init: message used to init the frame. Sent as the first URL when loading
-	                 the page. Contains some config parameters.
-	         - loaded: the remote frame is loaded. Only sent from server to client.
-	         - ok: the message that this page sent was received OK. The next message may
-	               now be sent.
-	         - start: the start message of a block of messages (a complete message may
-	                  need to be segmented into many messages to get around the limitiations
-	                  of the size of an URL that a browser accepts.
-	         - part: indicates this is a part of a message.
-	         - end: the end message of a block of messages. The message can now be acted upon.
-	                If the message is small enough that it doesn't need to be segmented, then
-	                just one hash value message can be sent with "end" as the command.
-	
-	To reassemble a segmented message, the realEncodedMessage parts just have to be concatenated
-	together.
-	*/
-
-	//MSIE has the lowest limit for URLs with fragment identifiers,
-	//at around 4K. Choosing a slightly smaller number for good measure.
-	xipUrlLimit = 4000;
-	xipIdCounter = 1;
-
-	function xipInit(){
-		xipStateId = "";
-		xipIsSending = false;
-		xipServerUrl = null;
-		xipStateId = null;
-		xipRequestData = null;
-		xipCurrentHash = "";
-		xipResponseMessage = "";
-		xipRequestParts = [];
-		xipPartIndex = 0;
-		xipServerWindow = null;
-		xipUseFrameRecursion = false;
-	}
-	xipInit();
-	
-	function send(encodedData){
-		if(xipUseFrameRecursion == "true"){
-			var clientEndPoint = window.open(xipStateId + "_clientEndPoint");
-			clientEndPoint.send(encodedData);
-		}else{
-			if(!xipIsSending){
-				xipIsSending = true;
-	
-				xipRequestData = encodedData || "";
-
-				//Get a handle to the server iframe.
-				xipServerWindow = frames[xipStateId + "_frame"];
-				if (!xipServerWindow){
-					xipServerWindow = document.getElementById(xipStateId + "_frame").contentWindow;
-				}
-	
-				sendRequestStart();
-			}
-		}
-	}
-
-	//Modify the server URL if it is a local path and 
-	//This is done for local/same domain testing.
-	function fixServerUrl(ifpServerUrl){
-		if(ifpServerUrl.indexOf("..") == 0){
-			var parts = ifpServerUrl.split("/");
-			ifpServerUrl = parts[parts.length - 1];
-		}
-		return ifpServerUrl;
-	}
-	
-	
-	function pollHash(){
-		//Can't use location.hash because at least Firefox does a decodeURIComponent on it.
-		var urlParts = window.location.href.split("#");
-		if(urlParts.length == 2){
-			var newHash = urlParts[1];
-			if(newHash != xipCurrentHash){
-				try{
-					messageReceived(newHash);
-				}catch(e){
-					//Make sure to not keep processing the error hash value.
-					xipCurrentHash = newHash;
-					throw e;
-				}
-				xipCurrentHash = newHash;
-			}
-		}
-	}
-
-	function messageReceived(encodedData){
-		var msg = unpackMessage(encodedData);
-
-		switch(msg.command){
-			case "loaded":
-				xipMasterFrame.dojo.io.XhrIframeProxy.clientFrameLoaded(xipStateId);
-				break;
-			case "ok":
-				sendRequestPart();
-				break;
-			case "start":
-				xipResponseMessage = "";
-				xipResponseMessage += msg.message;
-				setServerUrl("ok");
-				break;
-			case "part":
-				xipResponseMessage += msg.message;			
-				setServerUrl("ok");
-				break;
-			case "end":
-				setServerUrl("ok");
-				xipResponseMessage += msg.message;
-				xipMasterFrame.dojo.io.XhrIframeProxy.receive(xipStateId, xipResponseMessage);
-				break;
-		}
-	}
-	
-	function sendRequestStart(){
-		//Break the message into parts, if necessary.
-		xipRequestParts = [];
-		var reqData = xipRequestData;
-		var urlLength = xipServerUrl.length;
-		var partLength = xipUrlLimit - urlLength;
-		var reqIndex = 0;
-
-		while((reqData.length - reqIndex) + urlLength > xipUrlLimit){
-			var part = reqData.substring(reqIndex, reqIndex + partLength);
-			//Safari will do some extra hex escaping unless we keep the original hex
-			//escaping complete.
-			var percentIndex = part.lastIndexOf("%");
-			if(percentIndex == part.length - 1 || percentIndex == part.length - 2){
-				part = part.substring(0, percentIndex);
-			}
-			xipRequestParts.push(part);
-			reqIndex += part.length;
-		}
-		xipRequestParts.push(reqData.substring(reqIndex, reqData.length));
-		
-		xipPartIndex = 0;
-		sendRequestPart();
-		
-	}
-	
-	function sendRequestPart(){
-		if(xipPartIndex < xipRequestParts.length){
-			//Get the message part.
-			var partData = xipRequestParts[xipPartIndex];
-
-			//Get the command.
-			var cmd = "part";
-			if(xipPartIndex + 1 == xipRequestParts.length){
-				cmd = "end";
-			}else if (xipPartIndex == 0){
-				cmd = "start";
-			}
-			
-			setServerUrl(cmd, partData);
-			xipPartIndex++;
-		}
-	}
-	
-	function setServerUrl(cmd, message){
-		var serverUrl = makeServerUrl(cmd, message);
-
-		//Safari won't let us replace across domains.
-		if(navigator.userAgent.indexOf("Safari") == -1){
-			xipServerWindow.location.replace(serverUrl);
-		}else{
-			xipServerWindow.location = serverUrl;
-		}
-	}
-	
-	function makeServerUrl(cmd, message){
-		var serverUrl = xipServerUrl + "#" + (xipIdCounter++) + ":" + cmd;
-		if(message){
-			serverUrl += ":" + message;
-		}
-		return serverUrl;
-	}
-
-	function unpackMessage(encodedMessage){
-		var parts = encodedMessage.split(":");
-		var command = parts[1];
-		encodedMessage = parts[2] || "";
-
-		var config = null;
-		if(command == "init"){
-			var configParts = encodedMessage.split("&");
-			config = {};
-			for(var i = 0; i < configParts.length; i++){
-				var nameValue = configParts[i].split("=");
-				config[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
-			}
-		}
-		return {command: command, message: encodedMessage, config: config};
-	}
-
-	function onClientLoad(){
-		//Decode the init params
-		var config = unpackMessage(window.location.href.split("#")[1]).config;
-
-		xipStateId = config.id;
-
-		//Remove the query param for the IE7 recursive case.
-		xipServerUrl = fixServerUrl(config.server).replace(/(\?|\&)dojo\.fr\=1/, "");
-		
-		//Make sure we don't have a javascript: url, just for good measure.
-		if(xipServerUrl.split(":")[0].match(/javascript/i)){
-			throw "Invalid server URL";
-		}
-
-		xipUseFrameRecursion = config["fr"];
-		
-		if(xipUseFrameRecursion == "endpoint"){
-			xipMasterFrame = parent.parent;
-		}else{
-			xipMasterFrame = parent;
-		}
-		
-		//Start counter to inspect hash value.
-		setInterval(pollHash, 10);
-
-		var clientUrl = window.location.href.split("#")[0];
-		var iframeNode = document.getElementsByTagName("iframe")[0];
-		iframeNode.id = xipStateId + "_frame";
-		iframeNode.src = makeServerUrl("init", 'id=' + xipStateId + '&client='
-			+ encodeURIComponent(clientUrl) + '&fr=' + xipUseFrameRecursion);
-	}
-
-	if(typeof(window.addEventListener) == "undefined"){
-		window.attachEvent("onload", onClientLoad);
-	}else{
-		window.addEventListener('load', onClientLoad, false);
-	}
-	
-	// -->
-	</script>
-</head>
-<body>
-	<h4>The Dojo Toolkit -- xip_client.html</h4>
-
-	<p>This file is used for Dojo's XMLHttpRequest Iframe Proxy. This is the "client" file used
-	internally by dojo.io.XhrIframeProxy.</p>
-	
-	<iframe src="javascript:false"></iframe>
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/xip_server.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/xip_server.html
deleted file mode 100644
index d5b3fcde..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/io/xip_server.html
+++ /dev/null
@@ -1,386 +0,0 @@
-<!--
-	/*
-		Copyright (c) 2004-2006, The Dojo Foundation
-		All Rights Reserved.
-	
-		Licensed under the Academic Free License version 2.1 or above OR the
-		modified BSD license. For more information on Dojo licensing, see:
-	
-			http://dojotoolkit.org/community/licensing.shtml
-	*/
-	Pieces taken from Dojo source to make this file stand-alone
--->
-<html>
-<head>
-	<title></title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
-	<script type="text/javascript" src="isAllowed.js"></script>
-	<!--
-	BY DEFAULT THIS FILE DOES NOT WORK SO THAT YOU DON'T ACCIDENTALLY EXPOSE
-	ALL OF YOUR XHR-ENABLED SERVICES ON YOUR SITE. 
-	
-	In order for this file to work, you need to uncomment the script element,
-	and you should define a function with the following signature:
-	
-	function isAllowedRequest(request){
-		return false;	
-	}
-	
-	Return true out of the function if you want to allow the cross-domain request.
-	
-	DON'T DEFINE THIS FUNCTION IN THIS FILE! Define it in a separate file called isAllowed.js
-	and include it in this page with a script tag that has a src attribute pointing to the file.
-	See the very first script tag in this file for an example. You do not have to place the
-	script file in the same directory as this file, just update the path above if you move it
-	somewhere else.
-	
-	Customize the isAllowedRequest function to restrict what types of requests are allowed
-	for this server. The request object has the following properties:
-	- requestHeaders: an object with the request headers that are to be added to
-	                  the XHR request.
-	- method: the HTTP method (GET, POST, etc...)
-	- uri: The URI for the request.
-	- data: The URL-encoded data for the request. For a GET request, this would
-	        be the querystring parameters. For a POST request, it wll be the
-	        body data.
-	        
-	See xip_client.html for more info on the xip fragment identifier protocol.	
-	-->
-	
-	<!-- Security protection: uncomment the script tag to enable. -->
-	<!-- script type="text/javascript" -->
-	// <!--
-		//Core XHR handling taken from Dojo IO code.
-		dojo = {};
-		dojo.hostenv = {};
-		// These are in order of decreasing likelihood; this will change in time.
-		dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
-		
-		dojo.hostenv.getXmlhttpObject = function(){
-				var http = null;
-			var last_e = null;
-			try{ http = new XMLHttpRequest(); }catch(e){}
-				if(!http){
-				for(var i=0; i<3; ++i){
-					var progid = dojo.hostenv._XMLHTTP_PROGIDS[i];
-					try{
-						http = new ActiveXObject(progid);
-					}catch(e){
-						last_e = e;
-					}
-		
-					if(http){
-						dojo.hostenv._XMLHTTP_PROGIDS = [progid];  // so faster next time
-						break;
-					}
-				}
-		
-				/*if(http && !http.toString) {
-					http.toString = function() { "[object XMLHttpRequest]"; }
-				}*/
-			}
-		
-			if(!http){
-				throw "xip_server.html: XMLHTTP not available: " + last_e;
-			}
-		
-			return http;
-		}
-
-		dojo.setHeaders = function(http, headers){
-			if(headers) {
-				for(var header in headers) {
-					var headerValue = headers[header];
-					http.setRequestHeader(header, headerValue);
-				}
-			}
-		}
-
-	//MSIE has the lowest limit for URLs with fragment identifiers,
-	//at around 4K. Choosing a slightly smaller number for good measure.
-	xipUrlLimit = 4000;
-	xipIdCounter = 1;
-
-	function xipServerInit(){
-		xipStateId = "";
-		xipCurrentHash = "";
-		xipRequestMessage = "";
-		xipResponseParts = [];
-		xipPartIndex = 0;
-	}
-
-	function pollHash(){
-		//Can't use location.hash because at least Firefox does a decodeURIComponent on it.
-		var urlParts = window.location.href.split("#");
-		if(urlParts.length == 2){
-			var newHash = urlParts[1];
-			if(newHash != xipCurrentHash){
-				try{
-					messageReceived(newHash);
-				}catch(e){
-					//Make sure to not keep processing the error hash value.
-					xipCurrentHash = newHash;
-					throw e;
-				}
-				xipCurrentHash = newHash;
-			}
-		}
-	}
-
-	function messageReceived(encodedData){
-		var msg = unpackMessage(encodedData);
-		
-		switch(msg.command){
-			case "ok":
-				sendResponsePart();
-				break;
-			case "start":
-				xipRequestMessage = "";
-				xipRequestMessage += msg.message;
-				setClientUrl("ok");
-				break;
-			case "part":
-				xipRequestMessage += msg.message;			
-				setClientUrl("ok");
-				break;
-			case "end":
-				setClientUrl("ok");
-				xipRequestMessage += msg.message;
-				sendXhr();
-				break;
-		}
-	}
-
-	function sendResponse(encodedData){
-		//Break the message into parts, if necessary.
-		xipResponseParts = [];
-		var resData = encodedData;
-		var urlLength = xipClientUrl.length;
-		var partLength = xipUrlLimit - urlLength;
-		var resIndex = 0;
-
-		while((resData.length - resIndex) + urlLength > xipUrlLimit){
-			var part = resData.substring(resIndex, resIndex + partLength);
-			//Safari will do some extra hex escaping unless we keep the original hex
-			//escaping complete.
-			var percentIndex = part.lastIndexOf("%");
-			if(percentIndex == part.length - 1 || percentIndex == part.length - 2){
-				part = part.substring(0, percentIndex);
-			}
-			xipResponseParts.push(part);
-			resIndex += part.length;
-		}
-		xipResponseParts.push(resData.substring(resIndex, resData.length));
-		
-		xipPartIndex = 0;
-		sendResponsePart();
-	}
-	
-	function sendResponsePart(){
-		if(xipPartIndex < xipResponseParts.length){
-			//Get the message part.
-			var partData = xipResponseParts[xipPartIndex];
-			
-			//Get the command.
-			var cmd = "part";
-			if(xipPartIndex + 1 == xipResponseParts.length){
-				cmd = "end";
-			}else if (xipPartIndex == 0){
-				cmd = "start";
-			}
-
-			setClientUrl(cmd, partData);
-			xipPartIndex++;
-		}else{
-			xipServerInit();
-		}
-	}
-
-	function setClientUrl(cmd, message){
-		var clientUrl = makeClientUrl(cmd, message);
-		//Safari won't let us replace across domains.
-		if(navigator.userAgent.indexOf("Safari") == -1){
-			parent.location.replace(clientUrl);
-		}else{
-			parent.location = clientUrl;
-		}
-	}
-
-	function makeClientUrl(cmd, message){
-		var clientUrl = xipClientUrl + "#" + (xipIdCounter++) + ":" + cmd;
-		if(message){
-			clientUrl += ":" + message;
-		}
-		return clientUrl
-	}
-
-	function xhrDone(xhr){
-		/* Need to pull off and return the following data:
-			- responseHeaders
-			- status
-			- statusText
-			- responseText
-		*/
-		var response = {};
-	
-		if(typeof(xhr.getAllResponseHeaders) != "undefined"){
-			var allHeaders = xhr.getAllResponseHeaders();
-			if(allHeaders){
-				response.responseHeaders = allHeaders;
-			}
-		}
-		
-		if(xhr.status == 0 || xhr.status){
-			response.status = xhr.status;
-		}
-		
-		if(xhr.statusText){
-			response.statusText = xhr.statusText;
-		}
-		
-		if(xhr.responseText){
-			response.responseText = xhr.responseText;
-		}
-	
-		//Build a string of the response object.
-		var result = "";
-		var isFirst = true;
-		for (var param in response){
-			if(isFirst){
-				isFirst = false;
-			}else{
-				result += "&";
-			}
-			result += param + "=" + encodeURIComponent(response[param]);
-		}
-		sendResponse(result);
-	}
-
-	function sendXhr(){
-		var request = {};
-		var nvPairs = xipRequestMessage.split("&");
-		var i = 0;
-		var nameValue = null;
-		for(i = 0; i < nvPairs.length; i++){
-			if(nvPairs[i]){
-				var nameValue = nvPairs[i].split("=");
-				request[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
-			}
-		}
-
-		//Split up the request headers, if any.
-		var headers = {};
-		if(request.requestHeaders){
-			nvPairs = request.requestHeaders.split("\r\n");
-			for(i = 0; i < nvPairs.length; i++){
-				if(nvPairs[i]){
-					nameValue = nvPairs[i].split(": ");
-					headers[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
-				}
-			}
-
-			request.requestHeaders = headers;
-		}
-		
-		if(isAllowedRequest(request)){
-		
-			//The request is allowed, so set up the XHR object.
-			var xhr = dojo.hostenv.getXmlhttpObject();
-			
-			//Start timer to look for readyState.
-			var xhrIntervalId = setInterval(function(){
-			
-				if(xhr.readyState == 4){
-					clearInterval(xhrIntervalId);
-					xhrDone(xhr);
-				}
-			}, 10);
-
-			//Actually start up the XHR request.
-			xhr.open(request.method, request.uri, true);
-			dojo.setHeaders(xhr, request.requestHeaders);
-			
-			var content = "";
-			if(request.data){
-				content = request.data;
-			}
-
-			try{
-				xhr.send(content);
-			}catch(e){
-				if(typeof xhr.abort == "function"){
-					xhr.abort();
-					xhrDone({status: 404, statusText: "xip_server.html error: " + e});
-				}
-			}
-		}
-	}
-
-	function unpackMessage(encodedMessage){
-		var parts = encodedMessage.split(":");
-		var command = parts[1];
-		encodedMessage = parts[2] || "";
-
-		var config = null;
-		if(command == "init"){
-			var configParts = encodedMessage.split("&");
-			config = {};
-			for(var i = 0; i < configParts.length; i++){
-				var nameValue = configParts[i].split("=");
-				config[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
-			}
-		}
-		return {command: command, message: encodedMessage, config: config};
-	}
-
-	function onServerLoad(){
-		xipServerInit();
-
-		//Decode the init params
-		var config = unpackMessage(window.location.href.split("#")[1]).config;
-
-		xipStateId = config.id;
-		xipClientUrl = config.client;
-		
-		//Make sure we don't have a javascript: url, just for good measure.
-		if(xipClientUrl.split(":")[0].match(/javascript/i)){
-			throw "Invalid client URL";
-		}
-		if(!xipStateId.match(/^XhrIframeProxy[0-9]+$/)){
-			throw "Invalid state ID";
-		}
-
-		xipUseFrameRecursion = config["fr"];
-
-		setInterval(pollHash, 10);
-		
-		if(xipUseFrameRecursion == "true"){
-			var serverUrl = window.location.href.split("#")[0];
-			document.getElementById("iframeHolder").innerHTML = '<iframe name="'
-				+ xipStateId + '_clientEndPoint'
-				+ '" src="javascript:false">'
-				+ '</iframe>';
-			var iframeNode = document.getElementsByTagName("iframe")[0];
-			iframeNode.src = makeClientUrl("init", 'id=' + xipStateId + '&server='
-				+ encodeURIComponent(serverUrl) + '&fr=endpoint');
-		}else{
-			setClientUrl("loaded");
-		}
-	}
-
-	if(typeof(window.addEventListener) == "undefined"){
-		window.attachEvent("onload", onServerLoad);
-	}else{
-		window.addEventListener('load', onServerLoad, false);
-	}
-	// -->
-	</script>
-</head>
-<body>
-	<h4>The Dojo Toolkit -- xip_server.html</h4>
-
-	<p>This file is used for Dojo's XMLHttpRequest Iframe Proxy. This is the the file
-	that should go on the server that will actually be doing the XHR request.</p>
-	<div id="iframeHolder"></div>
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/json.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/json.js
deleted file mode 100644
index 5da57da..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/json.js
+++ /dev/null
@@ -1,85 +0,0 @@
-dojo.provide("dojo.json");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.string.extras");
-dojo.require("dojo.AdapterRegistry");
-dojo.json={jsonRegistry:new dojo.AdapterRegistry(),register:function(_1,_2,_3,_4){
-dojo.json.jsonRegistry.register(_1,_2,_3,_4);
-},evalJson:function(_5){
-try{
-return eval("("+_5+")");
-}
-catch(e){
-dojo.debug(e);
-return _5;
-}
-},serialize:function(o){
-var _7=typeof (o);
-if(_7=="undefined"){
-return "undefined";
-}else{
-if((_7=="number")||(_7=="boolean")){
-return o+"";
-}else{
-if(o===null){
-return "null";
-}
-}
-}
-if(_7=="string"){
-return dojo.string.escapeString(o);
-}
-var me=arguments.callee;
-var _9;
-if(typeof (o.__json__)=="function"){
-_9=o.__json__();
-if(o!==_9){
-return me(_9);
-}
-}
-if(typeof (o.json)=="function"){
-_9=o.json();
-if(o!==_9){
-return me(_9);
-}
-}
-if(_7!="function"&&typeof (o.length)=="number"){
-var _a=[];
-for(var i=0;i<o.length;i++){
-var _c=me(o[i]);
-if(typeof (_c)!="string"){
-_c="undefined";
-}
-_a.push(_c);
-}
-return "["+_a.join(",")+"]";
-}
-try{
-window.o=o;
-_9=dojo.json.jsonRegistry.match(o);
-return me(_9);
-}
-catch(e){
-}
-if(_7=="function"){
-return null;
-}
-_a=[];
-for(var k in o){
-var _e;
-if(typeof (k)=="number"){
-_e="\""+k+"\"";
-}else{
-if(typeof (k)=="string"){
-_e=dojo.string.escapeString(k);
-}else{
-continue;
-}
-}
-_c=me(o[k]);
-if(typeof (_c)!="string"){
-continue;
-}
-_a.push(_e+":"+_c);
-}
-return "{"+_a.join(",")+"}";
-}};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang.js
deleted file mode 100644
index 9d0e178..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang.js
+++ /dev/null
@@ -1,3 +0,0 @@
-dojo.provide("dojo.lang");
-dojo.require("dojo.lang.common");
-dojo.deprecated("dojo.lang","replaced by dojo.lang.common","0.5");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/__package__.js
deleted file mode 100644
index 914edd6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.lang.common","dojo.lang.assert","dojo.lang.array","dojo.lang.type","dojo.lang.func","dojo.lang.extras","dojo.lang.repr","dojo.lang.declare"]});
-dojo.provide("dojo.lang.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/array.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/array.js
deleted file mode 100644
index 6ed54e8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/array.js
+++ /dev/null
@@ -1,163 +0,0 @@
-dojo.provide("dojo.lang.array");
-dojo.require("dojo.lang.common");
-dojo.lang.mixin(dojo.lang,{has:function(_1,_2){
-try{
-return typeof _1[_2]!="undefined";
-}
-catch(e){
-return false;
-}
-},isEmpty:function(_3){
-if(dojo.lang.isObject(_3)){
-var _4={};
-var _5=0;
-for(var x in _3){
-if(_3[x]&&(!_4[x])){
-_5++;
-break;
-}
-}
-return _5==0;
-}else{
-if(dojo.lang.isArrayLike(_3)||dojo.lang.isString(_3)){
-return _3.length==0;
-}
-}
-},map:function(_7,_8,_9){
-var _a=dojo.lang.isString(_7);
-if(_a){
-_7=_7.split("");
-}
-if(dojo.lang.isFunction(_8)&&(!_9)){
-_9=_8;
-_8=dj_global;
-}else{
-if(dojo.lang.isFunction(_8)&&_9){
-var _b=_8;
-_8=_9;
-_9=_b;
-}
-}
-if(Array.map){
-var _c=Array.map(_7,_9,_8);
-}else{
-var _c=[];
-for(var i=0;i<_7.length;++i){
-_c.push(_9.call(_8,_7[i]));
-}
-}
-if(_a){
-return _c.join("");
-}else{
-return _c;
-}
-},reduce:function(_e,_f,obj,_11){
-var _12=_f;
-if(arguments.length==2){
-_11=_f;
-_12=_e[0];
-_e=_e.slice(1);
-}else{
-if(arguments.length==3){
-if(dojo.lang.isFunction(obj)){
-_11=obj;
-obj=null;
-}
-}else{
-if(dojo.lang.isFunction(obj)){
-var tmp=_11;
-_11=obj;
-obj=tmp;
-}
-}
-}
-var ob=obj||dj_global;
-dojo.lang.map(_e,function(val){
-_12=_11.call(ob,_12,val);
-});
-return _12;
-},forEach:function(_16,_17,_18){
-if(dojo.lang.isString(_16)){
-_16=_16.split("");
-}
-if(Array.forEach){
-Array.forEach(_16,_17,_18);
-}else{
-if(!_18){
-_18=dj_global;
-}
-for(var i=0,l=_16.length;i<l;i++){
-_17.call(_18,_16[i],i,_16);
-}
-}
-},_everyOrSome:function(_1b,arr,_1d,_1e){
-if(dojo.lang.isString(arr)){
-arr=arr.split("");
-}
-if(Array.every){
-return Array[_1b?"every":"some"](arr,_1d,_1e);
-}else{
-if(!_1e){
-_1e=dj_global;
-}
-for(var i=0,l=arr.length;i<l;i++){
-var _21=_1d.call(_1e,arr[i],i,arr);
-if(_1b&&!_21){
-return false;
-}else{
-if((!_1b)&&(_21)){
-return true;
-}
-}
-}
-return Boolean(_1b);
-}
-},every:function(arr,_23,_24){
-return this._everyOrSome(true,arr,_23,_24);
-},some:function(arr,_26,_27){
-return this._everyOrSome(false,arr,_26,_27);
-},filter:function(arr,_29,_2a){
-var _2b=dojo.lang.isString(arr);
-if(_2b){
-arr=arr.split("");
-}
-var _2c;
-if(Array.filter){
-_2c=Array.filter(arr,_29,_2a);
-}else{
-if(!_2a){
-if(arguments.length>=3){
-dojo.raise("thisObject doesn't exist!");
-}
-_2a=dj_global;
-}
-_2c=[];
-for(var i=0;i<arr.length;i++){
-if(_29.call(_2a,arr[i],i,arr)){
-_2c.push(arr[i]);
-}
-}
-}
-if(_2b){
-return _2c.join("");
-}else{
-return _2c;
-}
-},unnest:function(){
-var out=[];
-for(var i=0;i<arguments.length;i++){
-if(dojo.lang.isArrayLike(arguments[i])){
-var add=dojo.lang.unnest.apply(this,arguments[i]);
-out=out.concat(add);
-}else{
-out.push(arguments[i]);
-}
-}
-return out;
-},toArray:function(_31,_32){
-var _33=[];
-for(var i=_32||0;i<_31.length;i++){
-_33.push(_31[i]);
-}
-return _33;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/assert.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/assert.js
deleted file mode 100644
index 3886249..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/assert.js
+++ /dev/null
@@ -1,46 +0,0 @@
-dojo.provide("dojo.lang.assert");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.type");
-dojo.lang.assert=function(_1,_2){
-if(!_1){
-var _3="An assert statement failed.\n"+"The method dojo.lang.assert() was called with a 'false' value.\n";
-if(_2){
-_3+="Here's the assert message:\n"+_2+"\n";
-}
-throw new Error(_3);
-}
-};
-dojo.lang.assertType=function(_4,_5,_6){
-if(dojo.lang.isString(_6)){
-dojo.deprecated("dojo.lang.assertType(value, type, \"message\")","use dojo.lang.assertType(value, type) instead","0.5");
-}
-if(!dojo.lang.isOfType(_4,_5,_6)){
-if(!dojo.lang.assertType._errorMessage){
-dojo.lang.assertType._errorMessage="Type mismatch: dojo.lang.assertType() failed.";
-}
-dojo.lang.assert(false,dojo.lang.assertType._errorMessage);
-}
-};
-dojo.lang.assertValidKeywords=function(_7,_8,_9){
-var _a;
-if(!_9){
-if(!dojo.lang.assertValidKeywords._errorMessage){
-dojo.lang.assertValidKeywords._errorMessage="In dojo.lang.assertValidKeywords(), found invalid keyword:";
-}
-_9=dojo.lang.assertValidKeywords._errorMessage;
-}
-if(dojo.lang.isArray(_8)){
-for(_a in _7){
-if(!dojo.lang.inArray(_8,_a)){
-dojo.lang.assert(false,_9+" "+_a);
-}
-}
-}else{
-for(_a in _7){
-if(!(_a in _8)){
-dojo.lang.assert(false,_9+" "+_a);
-}
-}
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/common.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/common.js
deleted file mode 100644
index 203a2ce..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/common.js
+++ /dev/null
@@ -1,143 +0,0 @@
-dojo.provide("dojo.lang.common");
-dojo.lang.inherits=function(_1,_2){
-if(!dojo.lang.isFunction(_2)){
-dojo.raise("dojo.inherits: superclass argument ["+_2+"] must be a function (subclass: ["+_1+"']");
-}
-_1.prototype=new _2();
-_1.prototype.constructor=_1;
-_1.superclass=_2.prototype;
-_1["super"]=_2.prototype;
-};
-dojo.lang._mixin=function(_3,_4){
-var _5={};
-for(var x in _4){
-if((typeof _5[x]=="undefined")||(_5[x]!=_4[x])){
-_3[x]=_4[x];
-}
-}
-if(dojo.render.html.ie&&(typeof (_4["toString"])=="function")&&(_4["toString"]!=_3["toString"])&&(_4["toString"]!=_5["toString"])){
-_3.toString=_4.toString;
-}
-return _3;
-};
-dojo.lang.mixin=function(_7,_8){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_7,arguments[i]);
-}
-return _7;
-};
-dojo.lang.extend=function(_b,_c){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_b.prototype,arguments[i]);
-}
-return _b;
-};
-dojo.inherits=dojo.lang.inherits;
-dojo.mixin=dojo.lang.mixin;
-dojo.extend=dojo.lang.extend;
-dojo.lang.find=function(_f,_10,_11,_12){
-if(!dojo.lang.isArrayLike(_f)&&dojo.lang.isArrayLike(_10)){
-dojo.deprecated("dojo.lang.find(value, array)","use dojo.lang.find(array, value) instead","0.5");
-var _13=_f;
-_f=_10;
-_10=_13;
-}
-var _14=dojo.lang.isString(_f);
-if(_14){
-_f=_f.split("");
-}
-if(_12){
-var _15=-1;
-var i=_f.length-1;
-var end=-1;
-}else{
-var _15=1;
-var i=0;
-var end=_f.length;
-}
-if(_11){
-while(i!=end){
-if(_f[i]===_10){
-return i;
-}
-i+=_15;
-}
-}else{
-while(i!=end){
-if(_f[i]==_10){
-return i;
-}
-i+=_15;
-}
-}
-return -1;
-};
-dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(_18,_19,_1a){
-return dojo.lang.find(_18,_19,_1a,true);
-};
-dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(_1b,_1c){
-return dojo.lang.find(_1b,_1c)>-1;
-};
-dojo.lang.isObject=function(it){
-if(typeof it=="undefined"){
-return false;
-}
-return (typeof it=="object"||it===null||dojo.lang.isArray(it)||dojo.lang.isFunction(it));
-};
-dojo.lang.isArray=function(it){
-return (it&&it instanceof Array||typeof it=="array");
-};
-dojo.lang.isArrayLike=function(it){
-if((!it)||(dojo.lang.isUndefined(it))){
-return false;
-}
-if(dojo.lang.isString(it)){
-return false;
-}
-if(dojo.lang.isFunction(it)){
-return false;
-}
-if(dojo.lang.isArray(it)){
-return true;
-}
-if((it.tagName)&&(it.tagName.toLowerCase()=="form")){
-return false;
-}
-if(dojo.lang.isNumber(it.length)&&isFinite(it.length)){
-return true;
-}
-return false;
-};
-dojo.lang.isFunction=function(it){
-return (it instanceof Function||typeof it=="function");
-};
-(function(){
-if((dojo.render.html.capable)&&(dojo.render.html["safari"])){
-dojo.lang.isFunction=function(it){
-if((typeof (it)=="function")&&(it=="[object NodeList]")){
-return false;
-}
-return (it instanceof Function||typeof it=="function");
-};
-}
-})();
-dojo.lang.isString=function(it){
-return (typeof it=="string"||it instanceof String);
-};
-dojo.lang.isAlien=function(it){
-if(!it){
-return false;
-}
-return !dojo.lang.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));
-};
-dojo.lang.isBoolean=function(it){
-return (it instanceof Boolean||typeof it=="boolean");
-};
-dojo.lang.isNumber=function(it){
-return (it instanceof Number||typeof it=="number");
-};
-dojo.lang.isUndefined=function(it){
-return ((typeof (it)=="undefined")&&(it==undefined));
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/declare.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/declare.js
deleted file mode 100644
index 31ab01c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/declare.js
+++ /dev/null
@@ -1,96 +0,0 @@
-dojo.provide("dojo.lang.declare");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.extras");
-dojo.lang.declare=function(_1,_2,_3,_4){
-if((dojo.lang.isFunction(_4))||((!_4)&&(!dojo.lang.isFunction(_3)))){
-var _5=_4;
-_4=_3;
-_3=_5;
-}
-var _6=[];
-if(dojo.lang.isArray(_2)){
-_6=_2;
-_2=_6.shift();
-}
-if(!_3){
-_3=dojo.evalObjPath(_1,false);
-if((_3)&&(!dojo.lang.isFunction(_3))){
-_3=null;
-}
-}
-var _7=dojo.lang.declare._makeConstructor();
-var _8=(_2?_2.prototype:null);
-if(_8){
-_8.prototyping=true;
-_7.prototype=new _2();
-_8.prototyping=false;
-}
-_7.superclass=_8;
-_7.mixins=_6;
-for(var i=0,l=_6.length;i<l;i++){
-dojo.lang.extend(_7,_6[i].prototype);
-}
-_7.prototype.initializer=null;
-_7.prototype.declaredClass=_1;
-if(dojo.lang.isArray(_4)){
-dojo.lang.extend.apply(dojo.lang,[_7].concat(_4));
-}else{
-dojo.lang.extend(_7,(_4)||{});
-}
-dojo.lang.extend(_7,dojo.lang.declare._common);
-_7.prototype.constructor=_7;
-_7.prototype.initializer=(_7.prototype.initializer)||(_3)||(function(){
-});
-var _b=dojo.parseObjPath(_1,null,true);
-_b.obj[_b.prop]=_7;
-return _7;
-};
-dojo.lang.declare._makeConstructor=function(){
-return function(){
-var _c=this._getPropContext();
-var s=_c.constructor.superclass;
-if((s)&&(s.constructor)){
-if(s.constructor==arguments.callee){
-this._inherited("constructor",arguments);
-}else{
-this._contextMethod(s,"constructor",arguments);
-}
-}
-var ms=(_c.constructor.mixins)||([]);
-for(var i=0,m;(m=ms[i]);i++){
-(((m.prototype)&&(m.prototype.initializer))||(m)).apply(this,arguments);
-}
-if((!this.prototyping)&&(_c.initializer)){
-_c.initializer.apply(this,arguments);
-}
-};
-};
-dojo.lang.declare._common={_getPropContext:function(){
-return (this.___proto||this);
-},_contextMethod:function(_11,_12,_13){
-var _14,_15=this.___proto;
-this.___proto=_11;
-try{
-_14=_11[_12].apply(this,(_13||[]));
-}
-catch(e){
-throw e;
-}
-finally{
-this.___proto=_15;
-}
-return _14;
-},_inherited:function(_16,_17){
-var p=this._getPropContext();
-do{
-if((!p.constructor)||(!p.constructor.superclass)){
-return;
-}
-p=p.constructor.superclass;
-}while(!(_16 in p));
-return (dojo.lang.isFunction(p[_16])?this._contextMethod(p,_16,_17):p[_16]);
-},inherited:function(_19,_1a){
-dojo.deprecated("'inherited' method is dangerous, do not up-call! 'inherited' is slated for removal in 0.5; name your super class (or use superclass property) instead.","0.5");
-this._inherited(_19,_1a);
-}};
-dojo.declare=dojo.lang.declare;
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/extras.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/extras.js
deleted file mode 100644
index 6e5341b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/extras.js
+++ /dev/null
@@ -1,83 +0,0 @@
-dojo.provide("dojo.lang.extras");
-dojo.require("dojo.lang.common");
-dojo.lang.setTimeout=function(_1,_2){
-var _3=window,_4=2;
-if(!dojo.lang.isFunction(_1)){
-_3=_1;
-_1=_2;
-_2=arguments[2];
-_4++;
-}
-if(dojo.lang.isString(_1)){
-_1=_3[_1];
-}
-var _5=[];
-for(var i=_4;i<arguments.length;i++){
-_5.push(arguments[i]);
-}
-return dojo.global().setTimeout(function(){
-_1.apply(_3,_5);
-},_2);
-};
-dojo.lang.clearTimeout=function(_7){
-dojo.global().clearTimeout(_7);
-};
-dojo.lang.getNameInObj=function(ns,_9){
-if(!ns){
-ns=dj_global;
-}
-for(var x in ns){
-if(ns[x]===_9){
-return new String(x);
-}
-}
-return null;
-};
-dojo.lang.shallowCopy=function(_b,_c){
-var i,_e;
-if(_b===null){
-return null;
-}
-if(dojo.lang.isObject(_b)){
-_e=new _b.constructor();
-for(i in _b){
-if(dojo.lang.isUndefined(_e[i])){
-_e[i]=_c?dojo.lang.shallowCopy(_b[i],_c):_b[i];
-}
-}
-}else{
-if(dojo.lang.isArray(_b)){
-_e=[];
-for(i=0;i<_b.length;i++){
-_e[i]=_c?dojo.lang.shallowCopy(_b[i],_c):_b[i];
-}
-}else{
-_e=_b;
-}
-}
-return _e;
-};
-dojo.lang.firstValued=function(){
-for(var i=0;i<arguments.length;i++){
-if(typeof arguments[i]!="undefined"){
-return arguments[i];
-}
-}
-return undefined;
-};
-dojo.lang.getObjPathValue=function(_10,_11,_12){
-with(dojo.parseObjPath(_10,_11,_12)){
-return dojo.evalProp(prop,obj,_12);
-}
-};
-dojo.lang.setObjPathValue=function(_13,_14,_15,_16){
-dojo.deprecated("dojo.lang.setObjPathValue","use dojo.parseObjPath and the '=' operator","0.6");
-if(arguments.length<4){
-_16=true;
-}
-with(dojo.parseObjPath(_13,_15,_16)){
-if(obj&&(_16||(prop in obj))){
-obj[prop]=_14;
-}
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/func.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/func.js
deleted file mode 100644
index 74cab45..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/func.js
+++ /dev/null
@@ -1,122 +0,0 @@
-dojo.provide("dojo.lang.func");
-dojo.require("dojo.lang.common");
-dojo.lang.hitch=function(_1,_2){
-var _3=[];
-for(var x=2;x<arguments.length;x++){
-_3.push(arguments[x]);
-}
-var _5=(dojo.lang.isString(_2)?_1[_2]:_2)||function(){
-};
-return function(){
-var ta=_3.concat([]);
-for(var x=0;x<arguments.length;x++){
-ta.push(arguments[x]);
-}
-return _5.apply(_1,ta);
-};
-};
-dojo.lang.anonCtr=0;
-dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_8,_9,_a){
-var _b=(_9||dojo.lang.anon);
-if((_a)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
-for(var x in _b){
-try{
-if(_b[x]===_8){
-return x;
-}
-}
-catch(e){
-}
-}
-}
-var _d="__"+dojo.lang.anonCtr++;
-while(typeof _b[_d]!="undefined"){
-_d="__"+dojo.lang.anonCtr++;
-}
-_b[_d]=_8;
-return _d;
-};
-dojo.lang.forward=function(_e){
-return function(){
-return this[_e].apply(this,arguments);
-};
-};
-dojo.lang.curry=function(_f,_10){
-var _11=[];
-_f=_f||dj_global;
-if(dojo.lang.isString(_10)){
-_10=_f[_10];
-}
-for(var x=2;x<arguments.length;x++){
-_11.push(arguments[x]);
-}
-var _13=(_10["__preJoinArity"]||_10.length)-_11.length;
-function gather(_14,_15,_16){
-var _17=_16;
-var _18=_15.slice(0);
-for(var x=0;x<_14.length;x++){
-_18.push(_14[x]);
-}
-_16=_16-_14.length;
-if(_16<=0){
-var res=_10.apply(_f,_18);
-_16=_17;
-return res;
-}else{
-return function(){
-return gather(arguments,_18,_16);
-};
-}
-}
-return gather([],_11,_13);
-};
-dojo.lang.curryArguments=function(_1b,_1c,_1d,_1e){
-var _1f=[];
-var x=_1e||0;
-for(x=_1e;x<_1d.length;x++){
-_1f.push(_1d[x]);
-}
-return dojo.lang.curry.apply(dojo.lang,[_1b,_1c].concat(_1f));
-};
-dojo.lang.tryThese=function(){
-for(var x=0;x<arguments.length;x++){
-try{
-if(typeof arguments[x]=="function"){
-var ret=(arguments[x]());
-if(ret){
-return ret;
-}
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-dojo.lang.delayThese=function(_23,cb,_25,_26){
-if(!_23.length){
-if(typeof _26=="function"){
-_26();
-}
-return;
-}
-if((typeof _25=="undefined")&&(typeof cb=="number")){
-_25=cb;
-cb=function(){
-};
-}else{
-if(!cb){
-cb=function(){
-};
-if(!_25){
-_25=0;
-}
-}
-}
-setTimeout(function(){
-(_23.shift())();
-cb();
-dojo.lang.delayThese(_23,cb,_25,_26);
-},_25);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/repr.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/repr.js
deleted file mode 100644
index 01303f7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/repr.js
+++ /dev/null
@@ -1,55 +0,0 @@
-dojo.provide("dojo.lang.repr");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.AdapterRegistry");
-dojo.require("dojo.string.extras");
-dojo.lang.reprRegistry=new dojo.AdapterRegistry();
-dojo.lang.registerRepr=function(_1,_2,_3,_4){
-dojo.lang.reprRegistry.register(_1,_2,_3,_4);
-};
-dojo.lang.repr=function(_5){
-if(typeof (_5)=="undefined"){
-return "undefined";
-}else{
-if(_5===null){
-return "null";
-}
-}
-try{
-if(typeof (_5["__repr__"])=="function"){
-return _5["__repr__"]();
-}else{
-if((typeof (_5["repr"])=="function")&&(_5.repr!=arguments.callee)){
-return _5["repr"]();
-}
-}
-return dojo.lang.reprRegistry.match(_5);
-}
-catch(e){
-if(typeof (_5.NAME)=="string"&&(_5.toString==Function.prototype.toString||_5.toString==Object.prototype.toString)){
-return _5.NAME;
-}
-}
-if(typeof (_5)=="function"){
-_5=(_5+"").replace(/^\s+/,"");
-var _6=_5.indexOf("{");
-if(_6!=-1){
-_5=_5.substr(0,_6)+"{...}";
-}
-}
-return _5+"";
-};
-dojo.lang.reprArrayLike=function(_7){
-try{
-var na=dojo.lang.map(_7,dojo.lang.repr);
-return "["+na.join(", ")+"]";
-}
-catch(e){
-}
-};
-(function(){
-var m=dojo.lang;
-m.registerRepr("arrayLike",m.isArrayLike,m.reprArrayLike);
-m.registerRepr("string",m.isString,m.reprString);
-m.registerRepr("numbers",m.isNumber,m.reprNumber);
-m.registerRepr("boolean",m.isBoolean,m.reprNumber);
-})();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/timing/Streamer.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/timing/Streamer.js
deleted file mode 100644
index 8c0bb4f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/timing/Streamer.js
+++ /dev/null
@@ -1,54 +0,0 @@
-dojo.provide("dojo.lang.timing.Streamer");
-dojo.require("dojo.lang.timing.Timer");
-dojo.lang.timing.Streamer=function(_1,_2,_3,_4,_5){
-var _6=this;
-var _7=[];
-this.interval=_3||1000;
-this.minimumSize=_4||10;
-this.inputFunction=_1||function(q){
-};
-this.outputFunction=_2||function(_9){
-};
-var _a=new dojo.lang.timing.Timer(this.interval);
-var _b=function(){
-_6.onTick(_6);
-if(_7.length<_6.minimumSize){
-_6.inputFunction(_7);
-}
-var _c=_7.shift();
-while(typeof (_c)=="undefined"&&_7.length>0){
-_c=_7.shift();
-}
-if(typeof (_c)=="undefined"){
-_6.stop();
-return;
-}
-_6.outputFunction(_c);
-};
-this.setInterval=function(ms){
-this.interval=ms;
-_a.setInterval(ms);
-};
-this.onTick=function(_e){
-};
-this.start=function(){
-if(typeof (this.inputFunction)=="function"&&typeof (this.outputFunction)=="function"){
-_a.start();
-return;
-}
-dojo.raise("You cannot start a Streamer without an input and an output function.");
-};
-this.onStart=function(){
-};
-this.stop=function(){
-_a.stop();
-};
-this.onStop=function(){
-};
-_a.onTick=this.tick;
-_a.onStart=this.onStart;
-_a.onStop=this.onStop;
-if(_5){
-_7.concat(_5);
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/timing/Timer.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/timing/Timer.js
deleted file mode 100644
index 51d42c6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/timing/Timer.js
+++ /dev/null
@@ -1,31 +0,0 @@
-dojo.provide("dojo.lang.timing.Timer");
-dojo.require("dojo.lang.func");
-dojo.lang.timing.Timer=function(_1){
-this.timer=null;
-this.isRunning=false;
-this.interval=_1;
-this.onStart=null;
-this.onStop=null;
-};
-dojo.extend(dojo.lang.timing.Timer,{onTick:function(){
-},setInterval:function(_2){
-if(this.isRunning){
-dj_global.clearInterval(this.timer);
-}
-this.interval=_2;
-if(this.isRunning){
-this.timer=dj_global.setInterval(dojo.lang.hitch(this,"onTick"),this.interval);
-}
-},start:function(){
-if(typeof this.onStart=="function"){
-this.onStart();
-}
-this.isRunning=true;
-this.timer=dj_global.setInterval(dojo.lang.hitch(this,"onTick"),this.interval);
-},stop:function(){
-if(typeof this.onStop=="function"){
-this.onStop();
-}
-this.isRunning=false;
-dj_global.clearInterval(this.timer);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/timing/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/timing/__package__.js
deleted file mode 100644
index 3f4a607..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/timing/__package__.js
+++ /dev/null
@@ -1 +0,0 @@
-dojo.provide("dojo.lang.timing.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/type.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/type.js
deleted file mode 100644
index 3106f71..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lang/type.js
+++ /dev/null
@@ -1,132 +0,0 @@
-dojo.provide("dojo.lang.type");
-dojo.require("dojo.lang.common");
-dojo.lang.whatAmI=function(_1){
-dojo.deprecated("dojo.lang.whatAmI","use dojo.lang.getType instead","0.5");
-return dojo.lang.getType(_1);
-};
-dojo.lang.whatAmI.custom={};
-dojo.lang.getType=function(_2){
-try{
-if(dojo.lang.isArray(_2)){
-return "array";
-}
-if(dojo.lang.isFunction(_2)){
-return "function";
-}
-if(dojo.lang.isString(_2)){
-return "string";
-}
-if(dojo.lang.isNumber(_2)){
-return "number";
-}
-if(dojo.lang.isBoolean(_2)){
-return "boolean";
-}
-if(dojo.lang.isAlien(_2)){
-return "alien";
-}
-if(dojo.lang.isUndefined(_2)){
-return "undefined";
-}
-for(var _3 in dojo.lang.whatAmI.custom){
-if(dojo.lang.whatAmI.custom[_3](_2)){
-return _3;
-}
-}
-if(dojo.lang.isObject(_2)){
-return "object";
-}
-}
-catch(e){
-}
-return "unknown";
-};
-dojo.lang.isNumeric=function(_4){
-return (!isNaN(_4)&&isFinite(_4)&&(_4!=null)&&!dojo.lang.isBoolean(_4)&&!dojo.lang.isArray(_4)&&!/^\s*$/.test(_4));
-};
-dojo.lang.isBuiltIn=function(_5){
-return (dojo.lang.isArray(_5)||dojo.lang.isFunction(_5)||dojo.lang.isString(_5)||dojo.lang.isNumber(_5)||dojo.lang.isBoolean(_5)||(_5==null)||(_5 instanceof Error)||(typeof _5=="error"));
-};
-dojo.lang.isPureObject=function(_6){
-return ((_6!=null)&&dojo.lang.isObject(_6)&&_6.constructor==Object);
-};
-dojo.lang.isOfType=function(_7,_8,_9){
-var _a=false;
-if(_9){
-_a=_9["optional"];
-}
-if(_a&&((_7===null)||dojo.lang.isUndefined(_7))){
-return true;
-}
-if(dojo.lang.isArray(_8)){
-var _b=_8;
-for(var i in _b){
-var _d=_b[i];
-if(dojo.lang.isOfType(_7,_d)){
-return true;
-}
-}
-return false;
-}else{
-if(dojo.lang.isString(_8)){
-_8=_8.toLowerCase();
-}
-switch(_8){
-case Array:
-case "array":
-return dojo.lang.isArray(_7);
-case Function:
-case "function":
-return dojo.lang.isFunction(_7);
-case String:
-case "string":
-return dojo.lang.isString(_7);
-case Number:
-case "number":
-return dojo.lang.isNumber(_7);
-case "numeric":
-return dojo.lang.isNumeric(_7);
-case Boolean:
-case "boolean":
-return dojo.lang.isBoolean(_7);
-case Object:
-case "object":
-return dojo.lang.isObject(_7);
-case "pureobject":
-return dojo.lang.isPureObject(_7);
-case "builtin":
-return dojo.lang.isBuiltIn(_7);
-case "alien":
-return dojo.lang.isAlien(_7);
-case "undefined":
-return dojo.lang.isUndefined(_7);
-case null:
-case "null":
-return (_7===null);
-case "optional":
-dojo.deprecated("dojo.lang.isOfType(value, [type, \"optional\"])","use dojo.lang.isOfType(value, type, {optional: true} ) instead","0.5");
-return ((_7===null)||dojo.lang.isUndefined(_7));
-default:
-if(dojo.lang.isFunction(_8)){
-return (_7 instanceof _8);
-}else{
-dojo.raise("dojo.lang.isOfType() was passed an invalid type");
-}
-}
-}
-dojo.raise("If we get here, it means a bug was introduced above.");
-};
-dojo.lang.getObject=function(_e){
-var _f=_e.split("."),i=0,obj=dj_global;
-do{
-obj=obj[_f[i++]];
-}while(i<_f.length&&obj);
-return (obj!=dj_global)?obj:null;
-};
-dojo.lang.doesObjectExist=function(str){
-var _13=str.split("."),i=0,obj=dj_global;
-do{
-obj=obj[_13[i++]];
-}while(i<_13.length&&obj);
-return (obj&&obj!=dj_global);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/Animation.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/Animation.js
deleted file mode 100644
index 3f9451c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/Animation.js
+++ /dev/null
@@ -1,391 +0,0 @@
-dojo.provide("dojo.lfx.Animation");
-dojo.require("dojo.lang.func");
-dojo.lfx.Line=function(_1,_2){
-this.start=_1;
-this.end=_2;
-if(dojo.lang.isArray(_1)){
-var _3=[];
-dojo.lang.forEach(this.start,function(s,i){
-_3[i]=this.end[i]-s;
-},this);
-this.getValue=function(n){
-var _7=[];
-dojo.lang.forEach(this.start,function(s,i){
-_7[i]=(_3[i]*n)+s;
-},this);
-return _7;
-};
-}else{
-var _3=_2-_1;
-this.getValue=function(n){
-return (_3*n)+this.start;
-};
-}
-};
-if((dojo.render.html.khtml)&&(!dojo.render.html.safari)){
-dojo.lfx.easeDefault=function(n){
-return (parseFloat("0.5")+((Math.sin((n+parseFloat("1.5"))*Math.PI))/2));
-};
-}else{
-dojo.lfx.easeDefault=function(n){
-return (0.5+((Math.sin((n+1.5)*Math.PI))/2));
-};
-}
-dojo.lfx.easeIn=function(n){
-return Math.pow(n,3);
-};
-dojo.lfx.easeOut=function(n){
-return (1-Math.pow(1-n,3));
-};
-dojo.lfx.easeInOut=function(n){
-return ((3*Math.pow(n,2))-(2*Math.pow(n,3)));
-};
-dojo.lfx.IAnimation=function(){
-};
-dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:10,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,connect:function(evt,_11,_12){
-if(!_12){
-_12=_11;
-_11=this;
-}
-_12=dojo.lang.hitch(_11,_12);
-var _13=this[evt]||function(){
-};
-this[evt]=function(){
-var ret=_13.apply(this,arguments);
-_12.apply(this,arguments);
-return ret;
-};
-return this;
-},fire:function(evt,_16){
-if(this[evt]){
-this[evt].apply(this,(_16||[]));
-}
-return this;
-},repeat:function(_17){
-this.repeatCount=_17;
-return this;
-},_active:false,_paused:false});
-dojo.lfx.Animation=function(_18,_19,_1a,_1b,_1c,_1d){
-dojo.lfx.IAnimation.call(this);
-if(dojo.lang.isNumber(_18)||(!_18&&_19.getValue)){
-_1d=_1c;
-_1c=_1b;
-_1b=_1a;
-_1a=_19;
-_19=_18;
-_18=null;
-}else{
-if(_18.getValue||dojo.lang.isArray(_18)){
-_1d=_1b;
-_1c=_1a;
-_1b=_19;
-_1a=_18;
-_19=null;
-_18=null;
-}
-}
-if(dojo.lang.isArray(_1a)){
-this.curve=new dojo.lfx.Line(_1a[0],_1a[1]);
-}else{
-this.curve=_1a;
-}
-if(_19!=null&&_19>0){
-this.duration=_19;
-}
-if(_1c){
-this.repeatCount=_1c;
-}
-if(_1d){
-this.rate=_1d;
-}
-if(_18){
-dojo.lang.forEach(["handler","beforeBegin","onBegin","onEnd","onPlay","onStop","onAnimate"],function(_1e){
-if(_18[_1e]){
-this.connect(_1e,_18[_1e]);
-}
-},this);
-}
-if(_1b&&dojo.lang.isFunction(_1b)){
-this.easing=_1b;
-}
-};
-dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_1f,_20){
-if(_20){
-clearTimeout(this._timer);
-this._active=false;
-this._paused=false;
-this._percent=0;
-}else{
-if(this._active&&!this._paused){
-return this;
-}
-}
-this.fire("handler",["beforeBegin"]);
-this.fire("beforeBegin");
-if(_1f>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_20);
-}),_1f);
-return this;
-}
-this._startTime=new Date().valueOf();
-if(this._paused){
-this._startTime-=(this.duration*this._percent/100);
-}
-this._endTime=this._startTime+this.duration;
-this._active=true;
-this._paused=false;
-var _21=this._percent/100;
-var _22=this.curve.getValue(_21);
-if(this._percent==0){
-if(!this._startRepeatCount){
-this._startRepeatCount=this.repeatCount;
-}
-this.fire("handler",["begin",_22]);
-this.fire("onBegin",[_22]);
-}
-this.fire("handler",["play",_22]);
-this.fire("onPlay",[_22]);
-this._cycle();
-return this;
-},pause:function(){
-clearTimeout(this._timer);
-if(!this._active){
-return this;
-}
-this._paused=true;
-var _23=this.curve.getValue(this._percent/100);
-this.fire("handler",["pause",_23]);
-this.fire("onPause",[_23]);
-return this;
-},gotoPercent:function(pct,_25){
-clearTimeout(this._timer);
-this._active=true;
-this._paused=true;
-this._percent=pct;
-if(_25){
-this.play();
-}
-return this;
-},stop:function(_26){
-clearTimeout(this._timer);
-var _27=this._percent/100;
-if(_26){
-_27=1;
-}
-var _28=this.curve.getValue(_27);
-this.fire("handler",["stop",_28]);
-this.fire("onStop",[_28]);
-this._active=false;
-this._paused=false;
-return this;
-},status:function(){
-if(this._active){
-return this._paused?"paused":"playing";
-}else{
-return "stopped";
-}
-return this;
-},_cycle:function(){
-clearTimeout(this._timer);
-if(this._active){
-var _29=new Date().valueOf();
-var _2a=(_29-this._startTime)/(this._endTime-this._startTime);
-if(_2a>=1){
-_2a=1;
-this._percent=100;
-}else{
-this._percent=_2a*100;
-}
-if((this.easing)&&(dojo.lang.isFunction(this.easing))){
-_2a=this.easing(_2a);
-}
-var _2b=this.curve.getValue(_2a);
-this.fire("handler",["animate",_2b]);
-this.fire("onAnimate",[_2b]);
-if(_2a<1){
-this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
-}else{
-this._active=false;
-this.fire("handler",["end"]);
-this.fire("onEnd");
-if(this.repeatCount>0){
-this.repeatCount--;
-this.play(null,true);
-}else{
-if(this.repeatCount==-1){
-this.play(null,true);
-}else{
-if(this._startRepeatCount){
-this.repeatCount=this._startRepeatCount;
-this._startRepeatCount=0;
-}
-}
-}
-}
-}
-return this;
-}});
-dojo.lfx.Combine=function(_2c){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._animsEnded=0;
-var _2d=arguments;
-if(_2d.length==1&&(dojo.lang.isArray(_2d[0])||dojo.lang.isArrayLike(_2d[0]))){
-_2d=_2d[0];
-}
-dojo.lang.forEach(_2d,function(_2e){
-this._anims.push(_2e);
-_2e.connect("onEnd",dojo.lang.hitch(this,"_onAnimsEnded"));
-},this);
-};
-dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_2f,_30){
-if(!this._anims.length){
-return this;
-}
-this.fire("beforeBegin");
-if(_2f>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_30);
-}),_2f);
-return this;
-}
-if(_30||this._anims[0].percent==0){
-this.fire("onBegin");
-}
-this.fire("onPlay");
-this._animsCall("play",null,_30);
-return this;
-},pause:function(){
-this.fire("onPause");
-this._animsCall("pause");
-return this;
-},stop:function(_31){
-this.fire("onStop");
-this._animsCall("stop",_31);
-return this;
-},_onAnimsEnded:function(){
-this._animsEnded++;
-if(this._animsEnded>=this._anims.length){
-this.fire("onEnd");
-}
-return this;
-},_animsCall:function(_32){
-var _33=[];
-if(arguments.length>1){
-for(var i=1;i<arguments.length;i++){
-_33.push(arguments[i]);
-}
-}
-var _35=this;
-dojo.lang.forEach(this._anims,function(_36){
-_36[_32](_33);
-},_35);
-return this;
-}});
-dojo.lfx.Chain=function(_37){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._currAnim=-1;
-var _38=arguments;
-if(_38.length==1&&(dojo.lang.isArray(_38[0])||dojo.lang.isArrayLike(_38[0]))){
-_38=_38[0];
-}
-var _39=this;
-dojo.lang.forEach(_38,function(_3a,i,_3c){
-this._anims.push(_3a);
-if(i<_3c.length-1){
-_3a.connect("onEnd",dojo.lang.hitch(this,"_playNext"));
-}else{
-_3a.connect("onEnd",dojo.lang.hitch(this,function(){
-this.fire("onEnd");
-}));
-}
-},this);
-};
-dojo.inherits(dojo.lfx.Chain,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_3d,_3e){
-if(!this._anims.length){
-return this;
-}
-if(_3e||!this._anims[this._currAnim]){
-this._currAnim=0;
-}
-var _3f=this._anims[this._currAnim];
-this.fire("beforeBegin");
-if(_3d>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_3e);
-}),_3d);
-return this;
-}
-if(_3f){
-if(this._currAnim==0){
-this.fire("handler",["begin",this._currAnim]);
-this.fire("onBegin",[this._currAnim]);
-}
-this.fire("onPlay",[this._currAnim]);
-_3f.play(null,_3e);
-}
-return this;
-},pause:function(){
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].pause();
-this.fire("onPause",[this._currAnim]);
-}
-return this;
-},playPause:function(){
-if(this._anims.length==0){
-return this;
-}
-if(this._currAnim==-1){
-this._currAnim=0;
-}
-var _40=this._anims[this._currAnim];
-if(_40){
-if(!_40._active||_40._paused){
-this.play();
-}else{
-this.pause();
-}
-}
-return this;
-},stop:function(){
-var _41=this._anims[this._currAnim];
-if(_41){
-_41.stop();
-this.fire("onStop",[this._currAnim]);
-}
-return _41;
-},_playNext:function(){
-if(this._currAnim==-1||this._anims.length==0){
-return this;
-}
-this._currAnim++;
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].play(null,true);
-}
-return this;
-}});
-dojo.lfx.combine=function(_42){
-var _43=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_43=arguments[0];
-}
-if(_43.length==1){
-return _43[0];
-}
-return new dojo.lfx.Combine(_43);
-};
-dojo.lfx.chain=function(_44){
-var _45=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_45=arguments[0];
-}
-if(_45.length==1){
-return _45[0];
-}
-return new dojo.lfx.Chain(_45);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/__package__.js
deleted file mode 100644
index e716a1c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({browser:["dojo.lfx.html"],dashboard:["dojo.lfx.html"]});
-dojo.provide("dojo.lfx.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/extras.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/extras.js
deleted file mode 100644
index fa4bbd1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/extras.js
+++ /dev/null
@@ -1,67 +0,0 @@
-dojo.provide("dojo.lfx.extras");
-dojo.require("dojo.lfx.html");
-dojo.require("dojo.lfx.Animation");
-dojo.lfx.html.fadeWipeIn=function(_1,_2,_3,_4){
-_1=dojo.lfx.html._byId(_1);
-var _5=dojo.lfx.combine(dojo.lfx.fadeIn(_1,_2,_3),dojo.lfx.wipeIn(_1,_2,_3));
-if(_4){
-_5.connect("onEnd",function(){
-_4(_1,_5);
-});
-}
-return _5;
-};
-dojo.lfx.html.fadeWipeOut=function(_6,_7,_8,_9){
-_6=dojo.lfx.html._byId(_6);
-var _a=dojo.lfx.combine(dojo.lfx.fadeOut(_6,_7,_8),dojo.lfx.wipeOut(_6,_7,_8));
-if(_9){
-_a.connect("onEnd",function(){
-_9(_6,_a);
-});
-}
-return _a;
-};
-dojo.lfx.html.scale=function(_b,_c,_d,_e,_f,_10,_11){
-_b=dojo.lfx.html._byId(_b);
-var _12=[];
-dojo.lang.forEach(_b,function(_13){
-var _14=dojo.html.getMarginBox(_13);
-var _15=_c/100;
-var _16=[{property:"width",start:_14.width,end:_14.width*_15},{property:"height",start:_14.height,end:_14.height*_15}];
-if(_d){
-var _17=dojo.html.getStyle(_13,"font-size");
-var _18=null;
-if(!_17){
-_17=parseFloat("100%");
-_18="%";
-}else{
-dojo.lang.some(["em","px","%"],function(_19,_1a,arr){
-if(_17.indexOf(_19)>0){
-_17=parseFloat(_17);
-_18=_19;
-return true;
-}
-});
-}
-_16.push({property:"font-size",start:_17,end:_17*_15,units:_18});
-}
-if(_e){
-var _1c=dojo.html.getStyle(_13,"position");
-var _1d=_13.offsetTop;
-var _1e=_13.offsetLeft;
-var _1f=((_14.height*_15)-_14.height)/2;
-var _20=((_14.width*_15)-_14.width)/2;
-_16.push({property:"top",start:_1d,end:(_1c=="absolute"?_1d-_1f:(-1*_1f))});
-_16.push({property:"left",start:_1e,end:(_1c=="absolute"?_1e-_20:(-1*_20))});
-}
-var _21=dojo.lfx.propertyAnimation(_13,_16,_f,_10);
-if(_11){
-_21.connect("onEnd",function(){
-_11(_13,_21);
-});
-}
-_12.push(_21);
-});
-return dojo.lfx.combine(_12);
-};
-dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/html.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/html.js
deleted file mode 100644
index 3cba02c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/html.js
+++ /dev/null
@@ -1,496 +0,0 @@
-dojo.provide("dojo.lfx.html");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.lfx.Animation");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.html.display");
-dojo.require("dojo.html.color");
-dojo.require("dojo.html.layout");
-dojo.lfx.html._byId=function(_1){
-if(!_1){
-return [];
-}
-if(dojo.lang.isArrayLike(_1)){
-if(!_1.alreadyChecked){
-var n=[];
-dojo.lang.forEach(_1,function(_3){
-n.push(dojo.byId(_3));
-});
-n.alreadyChecked=true;
-return n;
-}else{
-return _1;
-}
-}else{
-var n=[];
-n.push(dojo.byId(_1));
-n.alreadyChecked=true;
-return n;
-}
-};
-dojo.lfx.html.propertyAnimation=function(_4,_5,_6,_7,_8){
-_4=dojo.lfx.html._byId(_4);
-var _9={"propertyMap":_5,"nodes":_4,"duration":_6,"easing":_7||dojo.lfx.easeDefault};
-var _a=function(_b){
-if(_b.nodes.length==1){
-var pm=_b.propertyMap;
-if(!dojo.lang.isArray(_b.propertyMap)){
-var _d=[];
-for(var _e in pm){
-pm[_e].property=_e;
-_d.push(pm[_e]);
-}
-pm=_b.propertyMap=_d;
-}
-dojo.lang.forEach(pm,function(_f){
-if(dj_undef("start",_f)){
-if(_f.property!="opacity"){
-_f.start=parseInt(dojo.html.getComputedStyle(_b.nodes[0],_f.property));
-}else{
-_f.start=dojo.html.getOpacity(_b.nodes[0]);
-}
-}
-});
-}
-};
-var _10=function(_11){
-var _12=[];
-dojo.lang.forEach(_11,function(c){
-_12.push(Math.round(c));
-});
-return _12;
-};
-var _14=function(n,_16){
-n=dojo.byId(n);
-if(!n||!n.style){
-return;
-}
-for(var s in _16){
-try{
-if(s=="opacity"){
-dojo.html.setOpacity(n,_16[s]);
-}else{
-n.style[s]=_16[s];
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-var _18=function(_19){
-this._properties=_19;
-this.diffs=new Array(_19.length);
-dojo.lang.forEach(_19,function(_1a,i){
-if(dojo.lang.isFunction(_1a.start)){
-_1a.start=_1a.start(_1a,i);
-}
-if(dojo.lang.isFunction(_1a.end)){
-_1a.end=_1a.end(_1a,i);
-}
-if(dojo.lang.isArray(_1a.start)){
-this.diffs[i]=null;
-}else{
-if(_1a.start instanceof dojo.gfx.color.Color){
-_1a.startRgb=_1a.start.toRgb();
-_1a.endRgb=_1a.end.toRgb();
-}else{
-this.diffs[i]=_1a.end-_1a.start;
-}
-}
-},this);
-this.getValue=function(n){
-var ret={};
-dojo.lang.forEach(this._properties,function(_1e,i){
-var _20=null;
-if(dojo.lang.isArray(_1e.start)){
-}else{
-if(_1e.start instanceof dojo.gfx.color.Color){
-_20=(_1e.units||"rgb")+"(";
-for(var j=0;j<_1e.startRgb.length;j++){
-_20+=Math.round(((_1e.endRgb[j]-_1e.startRgb[j])*n)+_1e.startRgb[j])+(j<_1e.startRgb.length-1?",":"");
-}
-_20+=")";
-}else{
-_20=((this.diffs[i])*n)+_1e.start+(_1e.property!="opacity"?_1e.units||"px":"");
-}
-}
-ret[dojo.html.toCamelCase(_1e.property)]=_20;
-},this);
-return ret;
-};
-};
-var _22=new dojo.lfx.Animation({beforeBegin:function(){
-_a(_9);
-_22.curve=new _18(_9.propertyMap);
-},onAnimate:function(_23){
-dojo.lang.forEach(_9.nodes,function(_24){
-_14(_24,_23);
-});
-}},_9.duration,null,_9.easing);
-if(_8){
-for(var x in _8){
-if(dojo.lang.isFunction(_8[x])){
-_22.connect(x,_22,_8[x]);
-}
-}
-}
-return _22;
-};
-dojo.lfx.html._makeFadeable=function(_26){
-var _27=function(_28){
-if(dojo.render.html.ie){
-if((_28.style.zoom.length==0)&&(dojo.html.getStyle(_28,"zoom")=="normal")){
-_28.style.zoom="1";
-}
-if((_28.style.width.length==0)&&(dojo.html.getStyle(_28,"width")=="auto")){
-_28.style.width="auto";
-}
-}
-};
-if(dojo.lang.isArrayLike(_26)){
-dojo.lang.forEach(_26,_27);
-}else{
-_27(_26);
-}
-};
-dojo.lfx.html.fade=function(_29,_2a,_2b,_2c,_2d){
-_29=dojo.lfx.html._byId(_29);
-var _2e={property:"opacity"};
-if(!dj_undef("start",_2a)){
-_2e.start=_2a.start;
-}else{
-_2e.start=function(){
-return dojo.html.getOpacity(_29[0]);
-};
-}
-if(!dj_undef("end",_2a)){
-_2e.end=_2a.end;
-}else{
-dojo.raise("dojo.lfx.html.fade needs an end value");
-}
-var _2f=dojo.lfx.propertyAnimation(_29,[_2e],_2b,_2c);
-_2f.connect("beforeBegin",function(){
-dojo.lfx.html._makeFadeable(_29);
-});
-if(_2d){
-_2f.connect("onEnd",function(){
-_2d(_29,_2f);
-});
-}
-return _2f;
-};
-dojo.lfx.html.fadeIn=function(_30,_31,_32,_33){
-return dojo.lfx.html.fade(_30,{end:1},_31,_32,_33);
-};
-dojo.lfx.html.fadeOut=function(_34,_35,_36,_37){
-return dojo.lfx.html.fade(_34,{end:0},_35,_36,_37);
-};
-dojo.lfx.html.fadeShow=function(_38,_39,_3a,_3b){
-_38=dojo.lfx.html._byId(_38);
-dojo.lang.forEach(_38,function(_3c){
-dojo.html.setOpacity(_3c,0);
-});
-var _3d=dojo.lfx.html.fadeIn(_38,_39,_3a,_3b);
-_3d.connect("beforeBegin",function(){
-if(dojo.lang.isArrayLike(_38)){
-dojo.lang.forEach(_38,dojo.html.show);
-}else{
-dojo.html.show(_38);
-}
-});
-return _3d;
-};
-dojo.lfx.html.fadeHide=function(_3e,_3f,_40,_41){
-var _42=dojo.lfx.html.fadeOut(_3e,_3f,_40,function(){
-if(dojo.lang.isArrayLike(_3e)){
-dojo.lang.forEach(_3e,dojo.html.hide);
-}else{
-dojo.html.hide(_3e);
-}
-if(_41){
-_41(_3e,_42);
-}
-});
-return _42;
-};
-dojo.lfx.html.wipeIn=function(_43,_44,_45,_46){
-_43=dojo.lfx.html._byId(_43);
-var _47=[];
-dojo.lang.forEach(_43,function(_48){
-var _49={};
-var _4a,_4b,_4c;
-with(_48.style){
-_4a=top;
-_4b=left;
-_4c=position;
-top="-9999px";
-left="-9999px";
-position="absolute";
-display="";
-}
-var _4d=dojo.html.getBorderBox(_48).height;
-with(_48.style){
-top=_4a;
-left=_4b;
-position=_4c;
-display="none";
-}
-var _4e=dojo.lfx.propertyAnimation(_48,{"height":{start:1,end:function(){
-return _4d;
-}}},_44,_45);
-_4e.connect("beforeBegin",function(){
-_49.overflow=_48.style.overflow;
-_49.height=_48.style.height;
-with(_48.style){
-overflow="hidden";
-height="1px";
-}
-dojo.html.show(_48);
-});
-_4e.connect("onEnd",function(){
-with(_48.style){
-overflow=_49.overflow;
-height=_49.height;
-}
-if(_46){
-_46(_48,_4e);
-}
-});
-_47.push(_4e);
-});
-return dojo.lfx.combine(_47);
-};
-dojo.lfx.html.wipeOut=function(_4f,_50,_51,_52){
-_4f=dojo.lfx.html._byId(_4f);
-var _53=[];
-dojo.lang.forEach(_4f,function(_54){
-var _55={};
-var _56=dojo.lfx.propertyAnimation(_54,{"height":{start:function(){
-return dojo.html.getContentBox(_54).height;
-},end:1}},_50,_51,{"beforeBegin":function(){
-_55.overflow=_54.style.overflow;
-_55.height=_54.style.height;
-with(_54.style){
-overflow="hidden";
-}
-dojo.html.show(_54);
-},"onEnd":function(){
-dojo.html.hide(_54);
-with(_54.style){
-overflow=_55.overflow;
-height=_55.height;
-}
-if(_52){
-_52(_54,_56);
-}
-}});
-_53.push(_56);
-});
-return dojo.lfx.combine(_53);
-};
-dojo.lfx.html.slideTo=function(_57,_58,_59,_5a,_5b){
-_57=dojo.lfx.html._byId(_57);
-var _5c=[];
-var _5d=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_58)){
-dojo.deprecated("dojo.lfx.html.slideTo(node, array)","use dojo.lfx.html.slideTo(node, {top: value, left: value});","0.5");
-_58={top:_58[0],left:_58[1]};
-}
-dojo.lang.forEach(_57,function(_5e){
-var top=null;
-var _60=null;
-var _61=(function(){
-var _62=_5e;
-return function(){
-var pos=_5d(_62,"position");
-top=(pos=="absolute"?_5e.offsetTop:parseInt(_5d(_5e,"top"))||0);
-_60=(pos=="absolute"?_5e.offsetLeft:parseInt(_5d(_5e,"left"))||0);
-if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_62,true);
-dojo.html.setStyleAttributes(_62,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-_60=ret.x;
-}
-};
-})();
-_61();
-var _65=dojo.lfx.propertyAnimation(_5e,{"top":{start:top,end:(_58.top||0)},"left":{start:_60,end:(_58.left||0)}},_59,_5a,{"beforeBegin":_61});
-if(_5b){
-_65.connect("onEnd",function(){
-_5b(_57,_65);
-});
-}
-_5c.push(_65);
-});
-return dojo.lfx.combine(_5c);
-};
-dojo.lfx.html.slideBy=function(_66,_67,_68,_69,_6a){
-_66=dojo.lfx.html._byId(_66);
-var _6b=[];
-var _6c=dojo.html.getComputedStyle;
-if(dojo.lang.isArray(_67)){
-dojo.deprecated("dojo.lfx.html.slideBy(node, array)","use dojo.lfx.html.slideBy(node, {top: value, left: value});","0.5");
-_67={top:_67[0],left:_67[1]};
-}
-dojo.lang.forEach(_66,function(_6d){
-var top=null;
-var _6f=null;
-var _70=(function(){
-var _71=_6d;
-return function(){
-var pos=_6c(_71,"position");
-top=(pos=="absolute"?_6d.offsetTop:parseInt(_6c(_6d,"top"))||0);
-_6f=(pos=="absolute"?_6d.offsetLeft:parseInt(_6c(_6d,"left"))||0);
-if(!dojo.lang.inArray(["absolute","relative"],pos)){
-var ret=dojo.html.abs(_71,true);
-dojo.html.setStyleAttributes(_71,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-_6f=ret.x;
-}
-};
-})();
-_70();
-var _74=dojo.lfx.propertyAnimation(_6d,{"top":{start:top,end:top+(_67.top||0)},"left":{start:_6f,end:_6f+(_67.left||0)}},_68,_69).connect("beforeBegin",_70);
-if(_6a){
-_74.connect("onEnd",function(){
-_6a(_66,_74);
-});
-}
-_6b.push(_74);
-});
-return dojo.lfx.combine(_6b);
-};
-dojo.lfx.html.explode=function(_75,_76,_77,_78,_79){
-var h=dojo.html;
-_75=dojo.byId(_75);
-_76=dojo.byId(_76);
-var _7b=h.toCoordinateObject(_75,true);
-var _7c=document.createElement("div");
-h.copyStyle(_7c,_76);
-if(_76.explodeClassName){
-_7c.className=_76.explodeClassName;
-}
-with(_7c.style){
-position="absolute";
-display="none";
-var _7d=h.getStyle(_75,"background-color");
-backgroundColor=_7d?_7d.toLowerCase():"transparent";
-backgroundColor=(backgroundColor=="transparent")?"rgb(221, 221, 221)":backgroundColor;
-}
-dojo.body().appendChild(_7c);
-with(_76.style){
-visibility="hidden";
-display="block";
-}
-var _7e=h.toCoordinateObject(_76,true);
-with(_76.style){
-display="none";
-visibility="visible";
-}
-var _7f={opacity:{start:0.5,end:1}};
-dojo.lang.forEach(["height","width","top","left"],function(_80){
-_7f[_80]={start:_7b[_80],end:_7e[_80]};
-});
-var _81=new dojo.lfx.propertyAnimation(_7c,_7f,_77,_78,{"beforeBegin":function(){
-h.setDisplay(_7c,"block");
-},"onEnd":function(){
-h.setDisplay(_76,"block");
-_7c.parentNode.removeChild(_7c);
-}});
-if(_79){
-_81.connect("onEnd",function(){
-_79(_76,_81);
-});
-}
-return _81;
-};
-dojo.lfx.html.implode=function(_82,end,_84,_85,_86){
-var h=dojo.html;
-_82=dojo.byId(_82);
-end=dojo.byId(end);
-var _88=dojo.html.toCoordinateObject(_82,true);
-var _89=dojo.html.toCoordinateObject(end,true);
-var _8a=document.createElement("div");
-dojo.html.copyStyle(_8a,_82);
-if(_82.explodeClassName){
-_8a.className=_82.explodeClassName;
-}
-dojo.html.setOpacity(_8a,0.3);
-with(_8a.style){
-position="absolute";
-display="none";
-backgroundColor=h.getStyle(_82,"background-color").toLowerCase();
-}
-dojo.body().appendChild(_8a);
-var _8b={opacity:{start:1,end:0.5}};
-dojo.lang.forEach(["height","width","top","left"],function(_8c){
-_8b[_8c]={start:_88[_8c],end:_89[_8c]};
-});
-var _8d=new dojo.lfx.propertyAnimation(_8a,_8b,_84,_85,{"beforeBegin":function(){
-dojo.html.hide(_82);
-dojo.html.show(_8a);
-},"onEnd":function(){
-_8a.parentNode.removeChild(_8a);
-}});
-if(_86){
-_8d.connect("onEnd",function(){
-_86(_82,_8d);
-});
-}
-return _8d;
-};
-dojo.lfx.html.highlight=function(_8e,_8f,_90,_91,_92){
-_8e=dojo.lfx.html._byId(_8e);
-var _93=[];
-dojo.lang.forEach(_8e,function(_94){
-var _95=dojo.html.getBackgroundColor(_94);
-var bg=dojo.html.getStyle(_94,"background-color").toLowerCase();
-var _97=dojo.html.getStyle(_94,"background-image");
-var _98=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
-while(_95.length>3){
-_95.pop();
-}
-var rgb=new dojo.gfx.color.Color(_8f);
-var _9a=new dojo.gfx.color.Color(_95);
-var _9b=dojo.lfx.propertyAnimation(_94,{"background-color":{start:rgb,end:_9a}},_90,_91,{"beforeBegin":function(){
-if(_97){
-_94.style.backgroundImage="none";
-}
-_94.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")";
-},"onEnd":function(){
-if(_97){
-_94.style.backgroundImage=_97;
-}
-if(_98){
-_94.style.backgroundColor="transparent";
-}
-if(_92){
-_92(_94,_9b);
-}
-}});
-_93.push(_9b);
-});
-return dojo.lfx.combine(_93);
-};
-dojo.lfx.html.unhighlight=function(_9c,_9d,_9e,_9f,_a0){
-_9c=dojo.lfx.html._byId(_9c);
-var _a1=[];
-dojo.lang.forEach(_9c,function(_a2){
-var _a3=new dojo.gfx.color.Color(dojo.html.getBackgroundColor(_a2));
-var rgb=new dojo.gfx.color.Color(_9d);
-var _a5=dojo.html.getStyle(_a2,"background-image");
-var _a6=dojo.lfx.propertyAnimation(_a2,{"background-color":{start:_a3,end:rgb}},_9e,_9f,{"beforeBegin":function(){
-if(_a5){
-_a2.style.backgroundImage="none";
-}
-_a2.style.backgroundColor="rgb("+_a3.toRgb().join(",")+")";
-},"onEnd":function(){
-if(_a0){
-_a0(_a2,_a6);
-}
-}});
-_a1.push(_a6);
-});
-return dojo.lfx.combine(_a1);
-};
-dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/rounded.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/rounded.js
deleted file mode 100644
index 4014b13..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/rounded.js
+++ /dev/null
@@ -1,431 +0,0 @@
-dojo.provide("dojo.lfx.rounded");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.html.common");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.display");
-dojo.require("dojo.html.layout");
-dojo.lfx.rounded=function(_1){
-var _2={validTags:_1.validTags||["div"],autoPad:_1.autoPad!=null?_1.autoPad:true,antiAlias:_1.antiAlias!=null?_1.antiAlias:true,radii:{tl:(_1.tl&&_1.tl.radius!=null)?_1.tl.radius:5,tr:(_1.tr&&_1.tr.radius!=null)?_1.tr.radius:5,bl:(_1.bl&&_1.bl.radius!=null)?_1.bl.radius:5,br:(_1.br&&_1.br.radius!=null)?_1.br.radius:5}};
-var _3;
-if(typeof (arguments[1])=="string"){
-_3=dojo.html.getElementsByClass(arguments[1]);
-}else{
-if(dojo.lang.isArrayLike(arguments[1])){
-_3=arguments[1];
-for(var i=0;i<_3.length;i++){
-_3[i]=dojo.byId(_3[i]);
-}
-}
-}
-if(_3.length==0){
-return;
-}
-for(var i=0;i<_3.length;i++){
-dojo.lfx.rounded.applyCorners(_2,_3[i]);
-}
-};
-dojo.lfx.rounded.applyCorners=function(_5,_6){
-var _7=null;
-var _8=null;
-var _9=null;
-var _a=dojo.lfx.rounded._fns;
-var _b=_6.offsetWidth;
-var _c=_6.offsetHeight;
-var _d=parseInt(dojo.html.getComputedStyle(_6,"border-top-width"));
-var _e=dojo.html.getComputedStyle(_6,"border-top-color");
-var _f=dojo.html.getComputedStyle(_6,"background-color");
-var _10=dojo.html.getComputedStyle(_6,"background-image");
-var _11=dojo.html.getComputedStyle(_6,"position");
-var _12=parseInt(dojo.html.getComputedStyle(_6,"padding-top"));
-var _13={height:_c,width:_b,borderWidth:_d,color:_a.getRGB(_f),padding:_12,borderColor:_a.getRGB(_e),borderString:_d+"px"+" solid "+_a.getRGB(_e),bgImage:((_10!="none")?_10:""),content:_6.innerHTML};
-if(!dojo.html.isPositionAbsolute(_6)){
-_6.style.position="relative";
-}
-_6.style.padding="0px";
-if(dojo.render.html.ie&&_b=="auto"&&_c=="auto"){
-_6.style.width="100%";
-}
-if(_5.autoPad&&_13.padding>0){
-_6.innerHTML="";
-}
-var _14=Math.max(_5.radii.tl,_5.radii.tr);
-var _15=Math.max(_5.radii.bl,_5.radii.br);
-if(_5.radii.tl||_5.radii.tr){
-_7=document.createElement("div");
-_7.style.width="100%";
-_7.style.fontSize="1px";
-_7.style.overflow="hidden";
-_7.style.position="absolute";
-_7.style.paddingLeft=_13.borderWidth+"px";
-_7.style.paddingRight=_13.borderWidth+"px";
-_7.style.height=_14+"px";
-_7.style.top=(0-_14)+"px";
-_7.style.left=(0-_13.borderWidth)+"px";
-_6.appendChild(_7);
-}
-if(_5.radii.bl||_5.radii.br){
-_8=document.createElement("div");
-_8.style.width="100%";
-_8.style.fontSize="1px";
-_8.style.overflow="hidden";
-_8.style.position="absolute";
-_8.style.paddingLeft=_13.borderWidth+"px";
-_8.style.paddingRight=_13.borderWidth+"px";
-_8.style.height=_15+"px";
-_8.style.bottom=(0-_15)+"px";
-_8.style.left=(0-_13.borderWidth)+"px";
-_6.appendChild(_8);
-}
-if(_7){
-_6.style.borderTopWidth="0px";
-}
-if(_8){
-_6.style.borderBottomWidth="0px";
-}
-var _16=["tr","tl","br","bl"];
-for(var i=0;i<_16.length;i++){
-var cc=_16[i];
-if(_5.radii[cc]==0){
-if((cc.charAt(0)=="t"&&_7)||(cc.charAt(0)=="b"&&_8)){
-var _19=document.createElement("div");
-_19.style.position="relative";
-_19.style.fontSize="1px;";
-_19.style.overflow="hidden";
-if(_13.bgImage==""){
-_19.style.backgroundColor=_13.color;
-}else{
-_19.style.backgroundImage=_13.bgImage;
-}
-switch(cc){
-case "tl":
-_19.style.height=_14-_13.borderWidth+"px";
-_19.style.marginRight=_5.radii[cc]-(_13.borderWidth*2)+"px";
-_19.style.borderLeft=_13.borderString;
-_19.style.borderTop=_13.borderString;
-_19.style.left=-_13.borderWidth+"px";
-break;
-case "tr":
-_19.style.height=_14-_13.borderWidth+"px";
-_19.style.marginLeft=_5.radii[cc]-(_13.borderWidth*2)+"px";
-_19.style.borderRight=_13.borderString;
-_19.style.borderTop=_13.borderString;
-_19.style.backgroundPosition="-"+(_14-_13.borderWidth)+"px 0px";
-_19.style.left=_13.borderWidth+"px";
-break;
-case "bl":
-_19.style.height=_15-_13.borderWidth+"px";
-_19.style.marginRight=_5.radii[cc]-(_13.borderWidth*2)+"px";
-_19.style.borderLeft=_13.borderString;
-_19.style.borderBottom=_13.borderString;
-_19.style.left=_13.borderWidth+"px";
-_19.style.backgroundPosition="-"+_13.borderWidth+"px -"+(_13.height+(_15+_13.borderWidth))+"px";
-break;
-case "br":
-_19.style.height=_15-_13.borderWidth+"px";
-_19.style.marginLeft=_5.radii[cc]-(_13.borderWidth*2)+"px";
-_19.style.borderRight=_13.borderString;
-_19.style.borderBottom=_13.borderString;
-_19.style.left=_13.borderWidth+"px";
-_19.style.backgroundPosition="-"+(_15+_13.borderWidth)+"px -"+(_13.height+(_15+_13.borderWidth))+"px";
-break;
-}
-}
-}else{
-var _19=document.createElement("div");
-_19.style.height=_5.radii[cc]+"px";
-_19.style.width=_5.radii[cc]+"px";
-_19.style.position="absolute";
-_19.style.fontSize="1px";
-_19.style.overflow="hidden";
-var _1a=Math.floor(_5.radii[cc]-_13.borderWidth);
-for(var x=0,j=_5.radii[cc];x<j;x++){
-var y1=Math.floor(Math.sqrt(Math.pow(_1a,2)-Math.pow((x+1),2)))-1;
-if((x+1)>=_1a){
-var y1=-1;
-}
-var y2=Math.ceil(Math.sqrt(Math.pow(_1a,2)-Math.pow(x,2)));
-if(x>=_1a){
-y2=-1;
-}
-var y3=Math.floor(Math.sqrt(Math.pow(j,2)-Math.pow((x+1),2)))-1;
-if((x+1)>=j){
-y3=-1;
-}
-var y4=Math.ceil(Math.sqrt(Math.pow(j,2)-Math.pow(x,2)));
-if(x>=j){
-y4=-1;
-}
-if(y1>-1){
-_a.draw(x,0,_13.color,100,(y1+1),_19,-1,j,_14,_13);
-}
-for(var y=(y1+1);y<y2;y++){
-if(_5.antiAlias){
-if(_13.bgImage!=""){
-var _22=_a.fraction(x,y,_1a)*100;
-if(_22<30){
-_a.draw(x,y,_13.borderColor,100,1,_19,0,_5.radii[cc],_14,_13);
-}else{
-_a.draw(x,y,_13.borderColor,100,1,_19,-1,_5.radii[cc],_14,_13);
-}
-}else{
-var clr=_a.blend(_13.color,_13.borderColor,_a.fraction(x,y,_1a));
-_a.draw(x,y,clr,100,1,_19,0,_5.radii[cc],_14,_13);
-}
-}
-}
-if(_5.antiAlias){
-if(y3>=y2){
-if(y2==-1){
-y2=0;
-}
-_a.draw(x,y2,_13.borderColor,100,(y3-y2+1),_19,0,0,_14,_13);
-}else{
-if(y3>=y1){
-_a.draw(x,(y1+1),_13.borderColor,100,(y3-y1),_19,0,0,_14,_13);
-}
-}
-for(var y=(y3+1);y<y4;y++){
-_a.draw(x,y,_13.borderColor,(_a.fraction(x,y,j)*100),1,_19,(_13.borderWidth>0?0:-1),_5.radii[cc],_14,_13);
-}
-}else{
-y3=y1;
-}
-}
-if(cc!="br"){
-for(var t=0,k=_19.childNodes.length;t<k;t++){
-var bar=_19.childNodes[t];
-var _27=parseInt(dojo.html.getComputedStyle(bar,"top"));
-var _28=parseInt(dojo.html.getComputedStyle(bar,"left"));
-var _29=parseInt(dojo.html.getComputedStyle(bar,"height"));
-if(cc.charAt(1)=="l"){
-bar.style.left=(_5.radii[cc]-_28-1)+"px";
-}
-if(cc=="tr"){
-bar.style.top=(_5.radii[cc]-_29-_27)+"px";
-bar.style.backgroundPosition="-"+Math.abs((_13.width-_5.radii[cc]+_13.borderWidth)+_28)+"px -"+Math.abs(_5.radii[cc]-_29-_27-_13.borderWidth)+"px";
-}else{
-if(cc=="tl"){
-bar.style.top=(_5.radii[cc]-_29-_27)+"px";
-bar.style.backgroundPosition="-"+Math.abs((_5.radii[cc]-_28-1)-_13.borderWidth)+"px -"+Math.abs(_5.radii[cc]-_29-_27-_13.borderWidth)+"px";
-}else{
-bar.style.backgroundPosition="-"+Math.abs((_5.radii[cc]+_28)+_13.borderWidth)+"px -"+Math.abs((_13.height+_5.radii[cc]+_27)-_13.borderWidth)+"px";
-}
-}
-}
-}
-}
-if(_19){
-var psn=[];
-if(cc.charAt(0)=="t"){
-psn.push("top");
-}else{
-psn.push("bottom");
-}
-if(cc.charAt(1)=="l"){
-psn.push("left");
-}else{
-psn.push("right");
-}
-if(_19.style.position=="absolute"){
-for(var z=0;z<psn.length;z++){
-_19.style[psn[z]]="0px";
-}
-}
-if(psn[0]=="top"){
-if(_7){
-_7.appendChild(_19);
-}
-}else{
-if(_8){
-_8.appendChild(_19);
-}
-}
-}
-}
-var _2c={t:Math.abs(_5.radii.tl-_5.radii.tr),b:Math.abs(_5.radii.bl-_5.radii.br)};
-for(var z in _2c){
-var _2d=(_5.radii[z+"l"]<_5.radii[z+"r"]?z+"l":z+"r");
-var _2e=document.createElement("div");
-_2e.style.height=_2c[z]+"px";
-_2e.style.width=_5.radii[_2d]+"px";
-_2e.style.position="absolute";
-_2e.style.fontSize="1px";
-_2e.style.overflow="hidden";
-_2e.style.backgroundColor=_13.color;
-switch(_2d){
-case "tl":
-_2e.style.bottom="0px";
-_2e.style.left="0px";
-_2e.style.borderLeft=_13.borderString;
-_7.appendChild(_2e);
-break;
-case "tr":
-_2e.style.bottom="0px";
-_2e.style.right="0px";
-_2e.style.borderRight=_13.borderString;
-_7.appendChild(_2e);
-break;
-case "bl":
-_2e.style.top="0px";
-_2e.style.left="0px";
-_2e.style.borderLeft=_13.borderString;
-_8.appendChild(_2e);
-break;
-case "br":
-_2e.style.top="0px";
-_2e.style.right="0px";
-_2e.style.borderRight=_13.borderString;
-_8.appendChild(_2e);
-break;
-}
-var _2f=document.createElement("div");
-_2f.style.position="relative";
-_2f.style.fontSize="1px";
-_2f.style.overflow="hidden";
-_2f.style.backgroundColor=_13.color;
-_2f.style.backgroundImage=_13.bgImage;
-if(z=="t"){
-if(_7){
-if(_5.radii.tl&&_5.radii.tr){
-_2f.style.height=(_14-_13.borderWidth)+"px";
-_2f.style.marginLeft=(_5.radii.tl-_13.borderWidth)+"px";
-_2f.style.marginRight=(_5.radii.tr-_13.borderWidth)+"px";
-_2f.style.borderTop=_13.borderString;
-if(_13.bgImage!=""){
-_2f.style.backgroundPosition="-"+(_14+_13.borderWidth)+"px 0px";
-}
-}
-_7.appendChild(_2f);
-}
-}else{
-if(_8){
-if(_5.radii.bl&&_5.radii.br){
-_2f.style.height=(_15-_13.borderWidth)+"px";
-_2f.style.marginLeft=(_5.radii.bl-_13.borderWidth)+"px";
-_2f.style.marginRight=(_5.radii.br-_13.borderWidth)+"px";
-_2f.style.borderBottom=_13.borderString;
-if(_13.bgImage!=""){
-_2f.style.backgroundPosition="-"+(_15+_13.borderWidth)+"px -"+(_13.height+(_14+_13.borderWidth))+"px";
-}
-}
-_8.appendChild(_2f);
-}
-}
-}
-if(_5.autoPad&&_13.padding>0){
-var _30=document.createElement("div");
-_30.style.position="relative";
-_30.innerHTML=_13.content;
-_30.className="autoPadDiv";
-if(_14<_13.padding){
-_30.style.paddingTop=Math.abs(_14-_13.padding)+"px";
-}
-if(_15<_13.padding){
-_30.style.paddingBottom=Math.abs(_15-_13.padding)+"px";
-}
-_30.style.paddingLeft=_13.padding+"px";
-_30.style.paddingRight=_13.padding+"px";
-_6.appendChild(_30);
-}
-};
-var count=0;
-dojo.lfx.rounded._fns={blend:function(_31,_32,_33){
-var c1={r:parseInt(_31.substr(1,2),16),g:parseInt(_31.substr(3,2),16),b:parseInt(_31.substr(5,2),16)};
-var c2={r:parseInt(_32.substr(1,2),16),g:parseInt(_32.substr(3,2),16),b:parseInt(_32.substr(5,2),16)};
-if(_33>1||_33<0){
-_33=1;
-}
-var ret=[Math.min(Math.max(Math.round((c1.r*_33)+(c2.r*(1-_33))),0),255),Math.min(Math.max(Math.round((c1.g*_33)+(c2.g*(1-_33))),0),255),Math.min(Math.max(Math.round((c1.b*_33)+(c2.b*(1-_33))),0),255)];
-for(var i=0;i<ret.length;i++){
-var n=ret[i].toString(16);
-if(n.length<2){
-n="0"+n;
-}
-ret[i]=n;
-}
-return "#"+ret.join("");
-},fraction:function(x,y,r){
-var _3c=0;
-var _3d=[];
-var _3e=[];
-var _3f=0;
-var _40="";
-var _41=Math.sqrt((Math.pow(r,2)-Math.pow(x,2)));
-if(_41>=y&&_41<(y+1)){
-_40="Left";
-_3d[_3f]=0;
-_3e[_3f++]=_41-y;
-}
-_41=Math.sqrt((Math.pow(r,2)-Math.pow(y+1,2)));
-if(_41>=x&&_41<(x+1)){
-_40+="Top";
-_3d[_3f]=_41-x;
-_3e[_3f++]=1;
-}
-_41=Math.sqrt((Math.pow(r,2)-Math.pow(x+1,2)));
-if(_41>=y&&_41<(y+1)){
-_40+="Right";
-_3d[_3f]=1;
-_3e[_3f++]=_41-y;
-}
-_41=Math.sqrt((Math.pow(r,2)-Math.pow(y,2)));
-if(_41>=x&&_41<(x+1)){
-_40+="Bottom";
-_3d[_3f]=_41-x;
-_3e[_3f]=1;
-}
-switch(_40){
-case "LeftRight":
-return Math.min(_3e[0],_3e[1])+((Math.max(_3e[0],_3e[1])-Math.min(_3e[0],_3e[1]))/2);
-case "TopRight":
-return 1-(((1-_3d[0])*(1-_3e[1]))/2);
-case "TopBottom":
-return Math.min(_3d[0],_3d[1])+((Math.max(_3d[0],_3d[1])-Math.min(_3d[0],_3d[1]))/2);
-case "LeftBottom":
-return (_3e[0]*_3d[1])/2;
-default:
-return 1;
-}
-},draw:function(x,y,_44,_45,_46,_47,_48,_49,top,_4b){
-var px=document.createElement("div");
-px.style.height=_46+"px";
-px.style.width="1px";
-px.style.position="absolute";
-px.style.fontSize="1px";
-px.style.overflow="hidden";
-if(_48==-1&&_4b.bgImage!=""){
-px.style.backgroundImage=_4b.bgImage;
-px.style.backgroundPosition="-"+(_4b.width-(_49-x)+_4b.borderWidth)+"px -"+((_4b.height+top+y)-_4b.borderWidth)+"px";
-}else{
-px.style.backgroundColor=_44;
-}
-if(_45!=100){
-dojo.html.setOpacity(px,(_45/100));
-}
-px.style.top=y+"px";
-px.style.left=x+"px";
-_47.appendChild(px);
-},getRGB:function(clr){
-var ret="#ffffff";
-if(clr!=""&&clr!="transparent"){
-if(clr.substr(0,3)=="rgb"){
-var t=clr.substring(4,clr.indexOf(")"));
-t=t.split(",");
-for(var i=0;i<t.length;i++){
-var n=parseInt(t[i]).toString(16);
-if(n.length<2){
-n="0"+n;
-}
-t[i]=n;
-}
-ret="#"+t.join("");
-}else{
-if(clr.length==4){
-ret="#"+clr.substring(1,2)+clr.substring(1,2)+clr.substring(2,3)+clr.substring(2,3)+clr.substring(3,4)+clr.substring(3,4);
-}else{
-ret=clr;
-}
-}
-}
-return ret;
-}};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/shadow.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/shadow.js
deleted file mode 100644
index 5adbcba..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/shadow.js
+++ /dev/null
@@ -1,62 +0,0 @@
-dojo.provide("dojo.lfx.shadow");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.uri.Uri");
-dojo.lfx.shadow=function(_1){
-this.shadowPng=dojo.uri.moduleUri("dojo.html","images/shadow");
-this.shadowThickness=8;
-this.shadowOffset=15;
-this.init(_1);
-};
-dojo.extend(dojo.lfx.shadow,{init:function(_2){
-this.node=_2;
-this.pieces={};
-var x1=-1*this.shadowThickness;
-var y0=this.shadowOffset;
-var y1=this.shadowOffset+this.shadowThickness;
-this._makePiece("tl","top",y0,"left",x1);
-this._makePiece("l","top",y1,"left",x1,"scale");
-this._makePiece("tr","top",y0,"left",0);
-this._makePiece("r","top",y1,"left",0,"scale");
-this._makePiece("bl","top",0,"left",x1);
-this._makePiece("b","top",0,"left",0,"crop");
-this._makePiece("br","top",0,"left",0);
-},_makePiece:function(_6,_7,_8,_9,_a,_b){
-var _c;
-var _d=this.shadowPng+_6.toUpperCase()+".png";
-if(dojo.render.html.ie55||dojo.render.html.ie60){
-_c=dojo.doc().createElement("div");
-_c.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+_d+"'"+(_b?", sizingMethod='"+_b+"'":"")+")";
-}else{
-_c=dojo.doc().createElement("img");
-_c.src=_d;
-}
-_c.style.position="absolute";
-_c.style[_7]=_8+"px";
-_c.style[_9]=_a+"px";
-_c.style.width=this.shadowThickness+"px";
-_c.style.height=this.shadowThickness+"px";
-this.pieces[_6]=_c;
-this.node.appendChild(_c);
-},size:function(_e,_f){
-var _10=_f-(this.shadowOffset+this.shadowThickness+1);
-if(_10<0){
-_10=0;
-}
-if(_f<1){
-_f=1;
-}
-if(_e<1){
-_e=1;
-}
-with(this.pieces){
-l.style.height=_10+"px";
-r.style.height=_10+"px";
-b.style.width=(_e-1)+"px";
-bl.style.top=(_f-1)+"px";
-b.style.top=(_f-1)+"px";
-br.style.top=(_f-1)+"px";
-tr.style.left=(_e-1)+"px";
-r.style.left=(_e-1)+"px";
-br.style.left=(_e-1)+"px";
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/toggle.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/toggle.js
deleted file mode 100644
index 4cc31b9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/lfx/toggle.js
+++ /dev/null
@@ -1,28 +0,0 @@
-dojo.provide("dojo.lfx.toggle");
-dojo.require("dojo.lfx.*");
-dojo.lfx.toggle.plain={show:function(_1,_2,_3,_4){
-dojo.html.show(_1);
-if(dojo.lang.isFunction(_4)){
-_4();
-}
-},hide:function(_5,_6,_7,_8){
-dojo.html.hide(_5);
-if(dojo.lang.isFunction(_8)){
-_8();
-}
-}};
-dojo.lfx.toggle.fade={show:function(_9,_a,_b,_c){
-dojo.lfx.fadeShow(_9,_a,_b,_c).play();
-},hide:function(_d,_e,_f,_10){
-dojo.lfx.fadeHide(_d,_e,_f,_10).play();
-}};
-dojo.lfx.toggle.wipe={show:function(_11,_12,_13,_14){
-dojo.lfx.wipeIn(_11,_12,_13,_14).play();
-},hide:function(_15,_16,_17,_18){
-dojo.lfx.wipeOut(_15,_16,_17,_18).play();
-}};
-dojo.lfx.toggle.explode={show:function(_19,_1a,_1b,_1c,_1d){
-dojo.lfx.explode(_1d||{x:0,y:0,width:0,height:0},_19,_1a,_1b,_1c).play();
-},hide:function(_1e,_1f,_20,_21,_22){
-dojo.lfx.implode(_1e,_22||{x:0,y:0,width:0,height:0},_1f,_20,_21).play();
-}};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/loader.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/loader.js
deleted file mode 100644
index 4cec071..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/loader.js
+++ /dev/null
@@ -1,432 +0,0 @@
-(function(){
-var _1={pkgFileName:"__package__",loading_modules_:{},loaded_modules_:{},addedToLoadingCount:[],removedFromLoadingCount:[],inFlightCount:0,modulePrefixes_:{dojo:{name:"dojo",value:"src"}},setModulePrefix:function(_2,_3){
-this.modulePrefixes_[_2]={name:_2,value:_3};
-},moduleHasPrefix:function(_4){
-var mp=this.modulePrefixes_;
-return Boolean(mp[_4]&&mp[_4].value);
-},getModulePrefix:function(_6){
-if(this.moduleHasPrefix(_6)){
-return this.modulePrefixes_[_6].value;
-}
-return _6;
-},getTextStack:[],loadUriStack:[],loadedUris:[],post_load_:false,modulesLoadedListeners:[],unloadListeners:[],loadNotifying:false};
-for(var _7 in _1){
-dojo.hostenv[_7]=_1[_7];
-}
-})();
-dojo.hostenv.loadPath=function(_8,_9,cb){
-var _b;
-if(_8.charAt(0)=="/"||_8.match(/^\w+:/)){
-_b=_8;
-}else{
-_b=this.getBaseScriptUri()+_8;
-}
-if(djConfig.cacheBust&&dojo.render.html.capable){
-_b+="?"+String(djConfig.cacheBust).replace(/\W+/g,"");
-}
-try{
-return !_9?this.loadUri(_b,cb):this.loadUriAndCheck(_b,_9,cb);
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.hostenv.loadUri=function(_c,cb){
-if(this.loadedUris[_c]){
-return true;
-}
-var _e=this.getText(_c,null,true);
-if(!_e){
-return false;
-}
-this.loadedUris[_c]=true;
-var _f=dj_eval(_e);
-if(cb){
-cb(_f);
-}
-return true;
-};
-dojo.hostenv.loadUriAndCheck=function(uri,_11,cb){
-var ok=true;
-try{
-ok=this.loadUri(uri,cb);
-}
-catch(e){
-dojo.debug("failed loading ",uri," with error: ",e);
-}
-return Boolean(ok&&this.findModule(_11,false));
-};
-dojo.loaded=function(){
-};
-dojo.unloaded=function(){
-};
-dojo.hostenv.loaded=function(){
-this.loadNotifying=true;
-this.post_load_=true;
-var mll=this.modulesLoadedListeners;
-for(var x=0;x<mll.length;x++){
-mll[x]();
-}
-this.modulesLoadedListeners=[];
-this.loadNotifying=false;
-dojo.loaded();
-};
-dojo.hostenv.unloaded=function(){
-var mll=this.unloadListeners;
-while(mll.length){
-(mll.pop())();
-}
-dojo.unloaded();
-};
-dojo.addOnLoad=function(obj,_18){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.modulesLoadedListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.modulesLoadedListeners.push(function(){
-obj[_18]();
-});
-}
-}
-if(dh.post_load_&&dh.inFlightCount==0&&!dh.loadNotifying){
-dh.callLoaded();
-}
-};
-dojo.addOnUnload=function(obj,_1b){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.unloadListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.unloadListeners.push(function(){
-obj[_1b]();
-});
-}
-}
-};
-dojo.hostenv.modulesLoaded=function(){
-if(this.post_load_){
-return;
-}
-if(this.loadUriStack.length==0&&this.getTextStack.length==0){
-if(this.inFlightCount>0){
-dojo.debug("files still in flight!");
-return;
-}
-dojo.hostenv.callLoaded();
-}
-};
-dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"||(djConfig["useXDomain"]&&dojo.render.html.opera)){
-setTimeout("dojo.hostenv.loaded();",0);
-}else{
-dojo.hostenv.loaded();
-}
-};
-dojo.hostenv.getModuleSymbols=function(_1d){
-var _1e=_1d.split(".");
-for(var i=_1e.length;i>0;i--){
-var _20=_1e.slice(0,i).join(".");
-if((i==1)&&!this.moduleHasPrefix(_20)){
-_1e[0]="../"+_1e[0];
-}else{
-var _21=this.getModulePrefix(_20);
-if(_21!=_20){
-_1e.splice(0,i,_21);
-break;
-}
-}
-}
-return _1e;
-};
-dojo.hostenv._global_omit_module_check=false;
-dojo.hostenv.loadModule=function(_22,_23,_24){
-if(!_22){
-return;
-}
-_24=this._global_omit_module_check||_24;
-var _25=this.findModule(_22,false);
-if(_25){
-return _25;
-}
-if(dj_undef(_22,this.loading_modules_)){
-this.addedToLoadingCount.push(_22);
-}
-this.loading_modules_[_22]=1;
-var _26=_22.replace(/\./g,"/")+".js";
-var _27=_22.split(".");
-var _28=this.getModuleSymbols(_22);
-var _29=((_28[0].charAt(0)!="/")&&!_28[0].match(/^\w+:/));
-var _2a=_28[_28.length-1];
-var ok;
-if(_2a=="*"){
-_22=_27.slice(0,-1).join(".");
-while(_28.length){
-_28.pop();
-_28.push(this.pkgFileName);
-_26=_28.join("/")+".js";
-if(_29&&_26.charAt(0)=="/"){
-_26=_26.slice(1);
-}
-ok=this.loadPath(_26,!_24?_22:null);
-if(ok){
-break;
-}
-_28.pop();
-}
-}else{
-_26=_28.join("/")+".js";
-_22=_27.join(".");
-var _2c=!_24?_22:null;
-ok=this.loadPath(_26,_2c);
-if(!ok&&!_23){
-_28.pop();
-while(_28.length){
-_26=_28.join("/")+".js";
-ok=this.loadPath(_26,_2c);
-if(ok){
-break;
-}
-_28.pop();
-_26=_28.join("/")+"/"+this.pkgFileName+".js";
-if(_29&&_26.charAt(0)=="/"){
-_26=_26.slice(1);
-}
-ok=this.loadPath(_26,_2c);
-if(ok){
-break;
-}
-}
-}
-if(!ok&&!_24){
-dojo.raise("Could not load '"+_22+"'; last tried '"+_26+"'");
-}
-}
-if(!_24&&!this["isXDomain"]){
-_25=this.findModule(_22,false);
-if(!_25){
-dojo.raise("symbol '"+_22+"' is not defined after loading '"+_26+"'");
-}
-}
-return _25;
-};
-dojo.hostenv.startPackage=function(_2d){
-var _2e=String(_2d);
-var _2f=_2e;
-var _30=_2d.split(/\./);
-if(_30[_30.length-1]=="*"){
-_30.pop();
-_2f=_30.join(".");
-}
-var _31=dojo.evalObjPath(_2f,true);
-this.loaded_modules_[_2e]=_31;
-this.loaded_modules_[_2f]=_31;
-return _31;
-};
-dojo.hostenv.findModule=function(_32,_33){
-var lmn=String(_32);
-if(this.loaded_modules_[lmn]){
-return this.loaded_modules_[lmn];
-}
-if(_33){
-dojo.raise("no loaded module named '"+_32+"'");
-}
-return null;
-};
-dojo.kwCompoundRequire=function(_35){
-var _36=_35["common"]||[];
-var _37=_35[dojo.hostenv.name_]?_36.concat(_35[dojo.hostenv.name_]||[]):_36.concat(_35["default"]||[]);
-for(var x=0;x<_37.length;x++){
-var _39=_37[x];
-if(_39.constructor==Array){
-dojo.hostenv.loadModule.apply(dojo.hostenv,_39);
-}else{
-dojo.hostenv.loadModule(_39);
-}
-}
-};
-dojo.require=function(_3a){
-dojo.hostenv.loadModule.apply(dojo.hostenv,arguments);
-};
-dojo.requireIf=function(_3b,_3c){
-var _3d=arguments[0];
-if((_3d===true)||(_3d=="common")||(_3d&&dojo.render[_3d].capable)){
-var _3e=[];
-for(var i=1;i<arguments.length;i++){
-_3e.push(arguments[i]);
-}
-dojo.require.apply(dojo,_3e);
-}
-};
-dojo.requireAfterIf=dojo.requireIf;
-dojo.provide=function(_40){
-return dojo.hostenv.startPackage.apply(dojo.hostenv,arguments);
-};
-dojo.registerModulePath=function(_41,_42){
-return dojo.hostenv.setModulePrefix(_41,_42);
-};
-if(djConfig["modulePaths"]){
-for(var param in djConfig["modulePaths"]){
-dojo.registerModulePath(param,djConfig["modulePaths"][param]);
-}
-}
-dojo.setModulePrefix=function(_43,_44){
-dojo.deprecated("dojo.setModulePrefix(\""+_43+"\", \""+_44+"\")","replaced by dojo.registerModulePath","0.5");
-return dojo.registerModulePath(_43,_44);
-};
-dojo.exists=function(obj,_46){
-var p=_46.split(".");
-for(var i=0;i<p.length;i++){
-if(!obj[p[i]]){
-return false;
-}
-obj=obj[p[i]];
-}
-return true;
-};
-dojo.hostenv.normalizeLocale=function(_49){
-var _4a=_49?_49.toLowerCase():dojo.locale;
-if(_4a=="root"){
-_4a="ROOT";
-}
-return _4a;
-};
-dojo.hostenv.searchLocalePath=function(_4b,_4c,_4d){
-_4b=dojo.hostenv.normalizeLocale(_4b);
-var _4e=_4b.split("-");
-var _4f=[];
-for(var i=_4e.length;i>0;i--){
-_4f.push(_4e.slice(0,i).join("-"));
-}
-_4f.push(false);
-if(_4c){
-_4f.reverse();
-}
-for(var j=_4f.length-1;j>=0;j--){
-var loc=_4f[j]||"ROOT";
-var _53=_4d(loc);
-if(_53){
-break;
-}
-}
-};
-dojo.hostenv.localesGenerated;
-dojo.hostenv.registerNlsPrefix=function(){
-dojo.registerModulePath("nls","nls");
-};
-dojo.hostenv.preloadLocalizations=function(){
-if(dojo.hostenv.localesGenerated){
-dojo.hostenv.registerNlsPrefix();
-function preload(_54){
-_54=dojo.hostenv.normalizeLocale(_54);
-dojo.hostenv.searchLocalePath(_54,true,function(loc){
-for(var i=0;i<dojo.hostenv.localesGenerated.length;i++){
-if(dojo.hostenv.localesGenerated[i]==loc){
-dojo["require"]("nls.dojo_"+loc);
-return true;
-}
-}
-return false;
-});
-}
-preload();
-var _57=djConfig.extraLocale||[];
-for(var i=0;i<_57.length;i++){
-preload(_57[i]);
-}
-}
-dojo.hostenv.preloadLocalizations=function(){
-};
-};
-dojo.requireLocalization=function(_59,_5a,_5b,_5c){
-dojo.hostenv.preloadLocalizations();
-var _5d=dojo.hostenv.normalizeLocale(_5b);
-var _5e=[_59,"nls",_5a].join(".");
-var _5f="";
-if(_5c){
-var _60=_5c.split(",");
-for(var i=0;i<_60.length;i++){
-if(_5d.indexOf(_60[i])==0){
-if(_60[i].length>_5f.length){
-_5f=_60[i];
-}
-}
-}
-if(!_5f){
-_5f="ROOT";
-}
-}
-var _62=_5c?_5f:_5d;
-var _63=dojo.hostenv.findModule(_5e);
-var _64=null;
-if(_63){
-if(djConfig.localizationComplete&&_63._built){
-return;
-}
-var _65=_62.replace("-","_");
-var _66=_5e+"."+_65;
-_64=dojo.hostenv.findModule(_66);
-}
-if(!_64){
-_63=dojo.hostenv.startPackage(_5e);
-var _67=dojo.hostenv.getModuleSymbols(_59);
-var _68=_67.concat("nls").join("/");
-var _69;
-dojo.hostenv.searchLocalePath(_62,_5c,function(loc){
-var _6b=loc.replace("-","_");
-var _6c=_5e+"."+_6b;
-var _6d=false;
-if(!dojo.hostenv.findModule(_6c)){
-dojo.hostenv.startPackage(_6c);
-var _6e=[_68];
-if(loc!="ROOT"){
-_6e.push(loc);
-}
-_6e.push(_5a);
-var _6f=_6e.join("/")+".js";
-_6d=dojo.hostenv.loadPath(_6f,null,function(_70){
-var _71=function(){
-};
-_71.prototype=_69;
-_63[_6b]=new _71();
-for(var j in _70){
-_63[_6b][j]=_70[j];
-}
-});
-}else{
-_6d=true;
-}
-if(_6d&&_63[_6b]){
-_69=_63[_6b];
-}else{
-_63[_6b]=_69;
-}
-if(_5c){
-return true;
-}
-});
-}
-if(_5c&&_5d!=_5f){
-_63[_5d.replace("-","_")]=_63[_5f.replace("-","_")];
-}
-};
-(function(){
-var _73=djConfig.extraLocale;
-if(_73){
-if(!_73 instanceof Array){
-_73=[_73];
-}
-var req=dojo.requireLocalization;
-dojo.requireLocalization=function(m,b,_77,_78){
-req(m,b,_77,_78);
-if(_77){
-return;
-}
-for(var i=0;i<_73.length;i++){
-req(m,b,_73[i],_78);
-}
-};
-}
-})();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/loader_xd.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/loader_xd.js
deleted file mode 100644
index 78d7bc7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/loader_xd.js
+++ /dev/null
@@ -1,395 +0,0 @@
-dojo.hostenv.resetXd=function(){
-this.isXDomain=djConfig.useXDomain||false;
-this.xdTimer=0;
-this.xdInFlight={};
-this.xdOrderedReqs=[];
-this.xdDepMap={};
-this.xdContents=[];
-this.xdDefList=[];
-};
-dojo.hostenv.resetXd();
-dojo.hostenv.createXdPackage=function(_1,_2,_3){
-var _4=[];
-var _5=/dojo.(requireLocalization|require|requireIf|requireAll|provide|requireAfterIf|requireAfter|kwCompoundRequire|conditionalRequire|hostenv\.conditionalLoadModule|.hostenv\.loadModule|hostenv\.moduleLoaded)\(([\w\W]*?)\)/mg;
-var _6;
-while((_6=_5.exec(_1))!=null){
-if(_6[1]=="requireLocalization"){
-eval(_6[0]);
-}else{
-_4.push("\""+_6[1]+"\", "+_6[2]);
-}
-}
-var _7=[];
-_7.push("dojo.hostenv.packageLoaded({\n");
-if(_4.length>0){
-_7.push("depends: [");
-for(var i=0;i<_4.length;i++){
-if(i>0){
-_7.push(",\n");
-}
-_7.push("["+_4[i]+"]");
-}
-_7.push("],");
-}
-_7.push("\ndefinePackage: function(dojo){");
-_7.push(_1);
-_7.push("\n}, resourceName: '"+_2+"', resourcePath: '"+_3+"'});");
-return _7.join("");
-};
-dojo.hostenv.loadPath=function(_9,_a,cb){
-var _c=_9.indexOf(":");
-var _d=_9.indexOf("/");
-var _e;
-var _f=false;
-if(_c>0&&_c<_d){
-_e=_9;
-this.isXDomain=_f=true;
-}else{
-_e=this.getBaseScriptUri()+_9;
-_c=_e.indexOf(":");
-_d=_e.indexOf("/");
-if(_c>0&&_c<_d&&(!location.host||_e.indexOf("http://"+location.host)!=0)){
-this.isXDomain=_f=true;
-}
-}
-if(djConfig.cacheBust&&dojo.render.html.capable){
-_e+="?"+String(djConfig.cacheBust).replace(/\W+/g,"");
-}
-try{
-return ((!_a||this.isXDomain)?this.loadUri(_e,cb,_f,_a):this.loadUriAndCheck(_e,_a,cb));
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.hostenv.loadUri=function(uri,cb,_12,_13){
-if(this.loadedUris[uri]){
-return 1;
-}
-if(this.isXDomain&&_13){
-if(uri.indexOf("__package__")!=-1){
-_13+=".*";
-}
-this.xdOrderedReqs.push(_13);
-if(_12||uri.indexOf("/nls/")==-1){
-this.xdInFlight[_13]=true;
-this.inFlightCount++;
-}
-if(!this.xdTimer){
-this.xdTimer=setInterval("dojo.hostenv.watchInFlightXDomain();",100);
-}
-this.xdStartTime=(new Date()).getTime();
-}
-if(_12){
-var _14=uri.lastIndexOf(".");
-if(_14<=0){
-_14=uri.length-1;
-}
-var _15=uri.substring(0,_14)+".xd";
-if(_14!=uri.length-1){
-_15+=uri.substring(_14,uri.length);
-}
-var _16=document.createElement("script");
-_16.type="text/javascript";
-_16.src=_15;
-if(!this.headElement){
-this.headElement=document.getElementsByTagName("head")[0];
-if(!this.headElement){
-this.headElement=document.getElementsByTagName("html")[0];
-}
-}
-this.headElement.appendChild(_16);
-}else{
-var _17=this.getText(uri,null,true);
-if(_17==null){
-return 0;
-}
-if(this.isXDomain&&uri.indexOf("/nls/")==-1){
-var pkg=this.createXdPackage(_17,_13,uri);
-dj_eval(pkg);
-}else{
-if(cb){
-_17="("+_17+")";
-}
-var _19=dj_eval(_17);
-if(cb){
-cb(_19);
-}
-}
-}
-this.loadedUris[uri]=true;
-return 1;
-};
-dojo.hostenv.packageLoaded=function(pkg){
-var _1b=pkg.depends;
-var _1c=null;
-var _1d=null;
-var _1e=[];
-if(_1b&&_1b.length>0){
-var dep=null;
-var _20=0;
-var _21=false;
-for(var i=0;i<_1b.length;i++){
-dep=_1b[i];
-if(dep[0]=="provide"||dep[0]=="hostenv.moduleLoaded"){
-_1e.push(dep[1]);
-}else{
-if(!_1c){
-_1c=[];
-}
-if(!_1d){
-_1d=[];
-}
-var _23=this.unpackXdDependency(dep);
-if(_23.requires){
-_1c=_1c.concat(_23.requires);
-}
-if(_23.requiresAfter){
-_1d=_1d.concat(_23.requiresAfter);
-}
-}
-var _24=dep[0];
-var _25=_24.split(".");
-if(_25.length==2){
-dojo[_25[0]][_25[1]].apply(dojo[_25[0]],dep.slice(1));
-}else{
-dojo[_24].apply(dojo,dep.slice(1));
-}
-}
-var _26=this.xdContents.push({content:pkg.definePackage,resourceName:pkg["resourceName"],resourcePath:pkg["resourcePath"],isDefined:false})-1;
-for(var i=0;i<_1e.length;i++){
-this.xdDepMap[_1e[i]]={requires:_1c,requiresAfter:_1d,contentIndex:_26};
-}
-for(var i=0;i<_1e.length;i++){
-this.xdInFlight[_1e[i]]=false;
-}
-}
-};
-dojo.hostenv.xdLoadFlattenedBundle=function(_27,_28,_29,_2a){
-_29=_29||"root";
-var _2b=dojo.hostenv.normalizeLocale(_29).replace("-","_");
-var _2c=[_27,"nls",_28].join(".");
-var _2d=dojo.hostenv.startPackage(_2c);
-_2d[_2b]=_2a;
-var _2e=[_27,_2b,_28].join(".");
-var _2f=dojo.hostenv.xdBundleMap[_2e];
-if(_2f){
-for(var _30 in _2f){
-_2d[_30]=_2a;
-}
-}
-};
-dojo.hostenv.xdBundleMap={};
-dojo.xdRequireLocalization=function(_31,_32,_33,_34){
-var _35=_34.split(",");
-var _36=dojo.hostenv.normalizeLocale(_33);
-var _37="";
-for(var i=0;i<_35.length;i++){
-if(_36.indexOf(_35[i])==0){
-if(_35[i].length>_37.length){
-_37=_35[i];
-}
-}
-}
-var _39=_37.replace("-","_");
-var _3a=dojo.evalObjPath([_31,"nls",_32].join("."));
-if(_3a&&_3a[_39]){
-bundle[_36.replace("-","_")]=_3a[_39];
-}else{
-var _3b=[_31,(_39||"root"),_32].join(".");
-var _3c=dojo.hostenv.xdBundleMap[_3b];
-if(!_3c){
-_3c=dojo.hostenv.xdBundleMap[_3b]={};
-}
-_3c[_36.replace("-","_")]=true;
-dojo.require(_31+".nls"+(_37?"."+_37:"")+"."+_32);
-}
-};
-(function(){
-var _3d=djConfig.extraLocale;
-if(_3d){
-if(!_3d instanceof Array){
-_3d=[_3d];
-}
-dojo._xdReqLoc=dojo.xdRequireLocalization;
-dojo.xdRequireLocalization=function(m,b,_40,_41){
-dojo._xdReqLoc(m,b,_40,_41);
-if(_40){
-return;
-}
-for(var i=0;i<_3d.length;i++){
-dojo._xdReqLoc(m,b,_3d[i],_41);
-}
-};
-}
-})();
-dojo.hostenv.unpackXdDependency=function(dep){
-var _44=null;
-var _45=null;
-switch(dep[0]){
-case "requireIf":
-case "requireAfterIf":
-case "conditionalRequire":
-if((dep[1]===true)||(dep[1]=="common")||(dep[1]&&dojo.render[dep[1]].capable)){
-_44=[{name:dep[2],content:null}];
-}
-break;
-case "requireAll":
-dep.shift();
-_44=dep;
-dojo.hostenv.flattenRequireArray(_44);
-break;
-case "kwCompoundRequire":
-case "hostenv.conditionalLoadModule":
-var _46=dep[1];
-var _47=_46["common"]||[];
-var _44=(_46[dojo.hostenv.name_])?_47.concat(_46[dojo.hostenv.name_]||[]):_47.concat(_46["default"]||[]);
-dojo.hostenv.flattenRequireArray(_44);
-break;
-case "require":
-case "requireAfter":
-case "hostenv.loadModule":
-_44=[{name:dep[1],content:null}];
-break;
-}
-if(dep[0]=="requireAfterIf"||dep[0]=="requireIf"){
-_45=_44;
-_44=null;
-}
-return {requires:_44,requiresAfter:_45};
-};
-dojo.hostenv.xdWalkReqs=function(){
-var _48=null;
-var req;
-for(var i=0;i<this.xdOrderedReqs.length;i++){
-req=this.xdOrderedReqs[i];
-if(this.xdDepMap[req]){
-_48=[req];
-_48[req]=true;
-this.xdEvalReqs(_48);
-}
-}
-};
-dojo.hostenv.xdEvalReqs=function(_4b){
-while(_4b.length>0){
-var req=_4b[_4b.length-1];
-var pkg=this.xdDepMap[req];
-if(pkg){
-var _4e=pkg.requires;
-if(_4e&&_4e.length>0){
-var _4f;
-for(var i=0;i<_4e.length;i++){
-_4f=_4e[i].name;
-if(_4f&&!_4b[_4f]){
-_4b.push(_4f);
-_4b[_4f]=true;
-this.xdEvalReqs(_4b);
-}
-}
-}
-var _51=this.xdContents[pkg.contentIndex];
-if(!_51.isDefined){
-var _52=_51.content;
-_52["resourceName"]=_51["resourceName"];
-_52["resourcePath"]=_51["resourcePath"];
-this.xdDefList.push(_52);
-_51.isDefined=true;
-}
-this.xdDepMap[req]=null;
-var _4e=pkg.requiresAfter;
-if(_4e&&_4e.length>0){
-var _4f;
-for(var i=0;i<_4e.length;i++){
-_4f=_4e[i].name;
-if(_4f&&!_4b[_4f]){
-_4b.push(_4f);
-_4b[_4f]=true;
-this.xdEvalReqs(_4b);
-}
-}
-}
-}
-_4b.pop();
-}
-};
-dojo.hostenv.clearXdInterval=function(){
-clearInterval(this.xdTimer);
-this.xdTimer=0;
-};
-dojo.hostenv.watchInFlightXDomain=function(){
-var _53=(djConfig.xdWaitSeconds||15)*1000;
-if(this.xdStartTime+_53<(new Date()).getTime()){
-this.clearXdInterval();
-var _54="";
-for(var _55 in this.xdInFlight){
-if(this.xdInFlight[_55]){
-_54+=_55+" ";
-}
-}
-dojo.raise("Could not load cross-domain packages: "+_54);
-}
-for(var _55 in this.xdInFlight){
-if(this.xdInFlight[_55]){
-return;
-}
-}
-this.clearXdInterval();
-this.xdWalkReqs();
-var _56=this.xdDefList.length;
-for(var i=0;i<_56;i++){
-var _58=dojo.hostenv.xdDefList[i];
-if(djConfig["debugAtAllCosts"]&&_58["resourceName"]){
-if(!this["xdDebugQueue"]){
-this.xdDebugQueue=[];
-}
-this.xdDebugQueue.push({resourceName:_58.resourceName,resourcePath:_58.resourcePath});
-}else{
-_58(dojo);
-}
-}
-for(var i=0;i<this.xdContents.length;i++){
-var _59=this.xdContents[i];
-if(_59.content&&!_59.isDefined){
-_59.content(dojo);
-}
-}
-this.resetXd();
-if(this["xdDebugQueue"]&&this.xdDebugQueue.length>0){
-this.xdDebugFileLoaded();
-}else{
-this.xdNotifyLoaded();
-}
-};
-dojo.hostenv.xdNotifyLoaded=function(){
-this.inFlightCount=0;
-if(this._djInitFired&&!this.loadNotifying){
-this.callLoaded();
-}
-};
-dojo.hostenv.flattenRequireArray=function(_5a){
-if(_5a){
-for(var i=0;i<_5a.length;i++){
-if(_5a[i] instanceof Array){
-_5a[i]={name:_5a[i][0],content:null};
-}else{
-_5a[i]={name:_5a[i],content:null};
-}
-}
-}
-};
-dojo.hostenv.xdHasCalledPreload=false;
-dojo.hostenv.xdRealCallLoaded=dojo.hostenv.callLoaded;
-dojo.hostenv.callLoaded=function(){
-if(this.xdHasCalledPreload||dojo.hostenv.getModulePrefix("dojo")=="src"||!this.localesGenerated){
-this.xdRealCallLoaded();
-}else{
-if(this.localesGenerated){
-this.registerNlsPrefix=function(){
-dojo.registerModulePath("nls",dojo.hostenv.getModulePrefix("dojo")+"/../nls");
-};
-this.preloadLocalizations();
-}
-}
-this.xdHasCalledPreload=true;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/logging/ConsoleLogger.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/logging/ConsoleLogger.js
deleted file mode 100644
index c7104b3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/logging/ConsoleLogger.js
+++ /dev/null
@@ -1,73 +0,0 @@
-dojo.provide("dojo.logging.ConsoleLogger");
-dojo.require("dojo.logging.Logger");
-dojo.lang.extend(dojo.logging.MemoryLogHandler,{debug:function(){
-dojo.hostenv.println.apply(this,arguments);
-},info:function(){
-dojo.hostenv.println.apply(this,arguments);
-},warn:function(){
-dojo.hostenv.println.apply(this,arguments);
-},error:function(){
-dojo.hostenv.println.apply(this,arguments);
-},critical:function(){
-dojo.hostenv.println.apply(this,arguments);
-},emit:function(_1){
-if(!djConfig.isDebug){
-return;
-}
-var _2=null;
-switch(_1.level){
-case 1:
-_2="debug";
-break;
-case 2:
-_2="info";
-break;
-case 3:
-_2="warn";
-break;
-case 4:
-_2="error";
-break;
-case 5:
-_2="critical";
-break;
-default:
-_2="debug";
-}
-var _3=String(dojo.log.getLevelName(_1.level)+": "+_1.time.toLocaleTimeString())+": "+_1.message;
-if(_1.msgArgs&&_1.msgArgs.length>0){
-this[_2].call(this,_3,_1.msgArgs);
-}else{
-this[_2].call(this,_3);
-}
-this.data.push(_1);
-if(this.numRecords!=-1){
-while(this.data.length>this.numRecords){
-this.data.shift();
-}
-}
-}});
-if(!dj_undef("console")&&!dj_undef("info",console)){
-dojo.lang.extend(dojo.logging.MemoryLogHandler,{debug:function(){
-console.debug.apply(this,arguments);
-},info:function(){
-console.info.apply(this,arguments);
-},warn:function(){
-console.warn.apply(this,arguments);
-},error:function(){
-console.error.apply(this,arguments);
-},critical:function(){
-console.error.apply(this,arguments);
-}});
-dojo.lang.extend(dojo.logging.Logger,{exception:function(_4,e,_6){
-var _7=[_4];
-if(e){
-_4+=" : "+e.name+" "+(e.description||e.message);
-_7.push(e);
-}
-this.logType("ERROR",_7);
-if(!_6){
-throw e;
-}
-}});
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/logging/Logger.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/logging/Logger.js
deleted file mode 100644
index 78c4ad7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/logging/Logger.js
+++ /dev/null
@@ -1,203 +0,0 @@
-dojo.provide("dojo.logging.Logger");
-dojo.provide("dojo.logging.LogFilter");
-dojo.provide("dojo.logging.Record");
-dojo.provide("dojo.log");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.declare");
-dojo.logging.Record=function(_1,_2){
-this.level=_1;
-this.message="";
-this.msgArgs=[];
-this.time=new Date();
-if(dojo.lang.isArray(_2)){
-if(_2.length>0&&dojo.lang.isString(_2[0])){
-this.message=_2.shift();
-}
-this.msgArgs=_2;
-}else{
-this.message=_2;
-}
-};
-dojo.logging.LogFilter=function(_3){
-this.passChain=_3||"";
-this.filter=function(_4){
-return true;
-};
-};
-dojo.logging.Logger=function(){
-this.cutOffLevel=0;
-this.propagate=true;
-this.parent=null;
-this.data=[];
-this.filters=[];
-this.handlers=[];
-};
-dojo.extend(dojo.logging.Logger,{_argsToArr:function(_5){
-var _6=[];
-for(var x=0;x<_5.length;x++){
-_6.push(_5[x]);
-}
-return _6;
-},setLevel:function(_8){
-this.cutOffLevel=parseInt(_8);
-},isEnabledFor:function(_9){
-return parseInt(_9)>=this.cutOffLevel;
-},getEffectiveLevel:function(){
-if((this.cutOffLevel==0)&&(this.parent)){
-return this.parent.getEffectiveLevel();
-}
-return this.cutOffLevel;
-},addFilter:function(_a){
-this.filters.push(_a);
-return this.filters.length-1;
-},removeFilterByIndex:function(_b){
-if(this.filters[_b]){
-delete this.filters[_b];
-return true;
-}
-return false;
-},removeFilter:function(_c){
-for(var x=0;x<this.filters.length;x++){
-if(this.filters[x]===_c){
-delete this.filters[x];
-return true;
-}
-}
-return false;
-},removeAllFilters:function(){
-this.filters=[];
-},filter:function(_e){
-for(var x=0;x<this.filters.length;x++){
-if((this.filters[x]["filter"])&&(!this.filters[x].filter(_e))||(_e.level<this.cutOffLevel)){
-return false;
-}
-}
-return true;
-},addHandler:function(_10){
-this.handlers.push(_10);
-return this.handlers.length-1;
-},handle:function(rec){
-if((!this.filter(rec))||(rec.level<this.cutOffLevel)){
-return false;
-}
-for(var x=0;x<this.handlers.length;x++){
-if(this.handlers[x]["handle"]){
-this.handlers[x].handle(rec);
-}
-}
-return true;
-},log:function(lvl,msg){
-if((this.propagate)&&(this.parent)&&(this.parent.rec.level>=this.cutOffLevel)){
-this.parent.log(lvl,msg);
-return false;
-}
-this.handle(new dojo.logging.Record(lvl,msg));
-return true;
-},debug:function(msg){
-return this.logType("DEBUG",this._argsToArr(arguments));
-},info:function(msg){
-return this.logType("INFO",this._argsToArr(arguments));
-},warning:function(msg){
-return this.logType("WARNING",this._argsToArr(arguments));
-},error:function(msg){
-return this.logType("ERROR",this._argsToArr(arguments));
-},critical:function(msg){
-return this.logType("CRITICAL",this._argsToArr(arguments));
-},exception:function(msg,e,_1c){
-if(e){
-var _1d=[e.name,(e.description||e.message)];
-if(e.fileName){
-_1d.push(e.fileName);
-_1d.push("line "+e.lineNumber);
-}
-msg+=" "+_1d.join(" : ");
-}
-this.logType("ERROR",msg);
-if(!_1c){
-throw e;
-}
-},logType:function(_1e,_1f){
-return this.log.apply(this,[dojo.logging.log.getLevel(_1e),_1f]);
-},warn:function(){
-this.warning.apply(this,arguments);
-},err:function(){
-this.error.apply(this,arguments);
-},crit:function(){
-this.critical.apply(this,arguments);
-}});
-dojo.logging.LogHandler=function(_20){
-this.cutOffLevel=(_20)?_20:0;
-this.formatter=null;
-this.data=[];
-this.filters=[];
-};
-dojo.lang.extend(dojo.logging.LogHandler,{setFormatter:function(_21){
-dojo.unimplemented("setFormatter");
-},flush:function(){
-},close:function(){
-},handleError:function(){
-dojo.deprecated("dojo.logging.LogHandler.handleError","use handle()","0.6");
-},handle:function(_22){
-if((this.filter(_22))&&(_22.level>=this.cutOffLevel)){
-this.emit(_22);
-}
-},emit:function(_23){
-dojo.unimplemented("emit");
-}});
-void (function(){
-var _24=["setLevel","addFilter","removeFilterByIndex","removeFilter","removeAllFilters","filter"];
-var tgt=dojo.logging.LogHandler.prototype;
-var src=dojo.logging.Logger.prototype;
-for(var x=0;x<_24.length;x++){
-tgt[_24[x]]=src[_24[x]];
-}
-})();
-dojo.logging.log=new dojo.logging.Logger();
-dojo.logging.log.levels=[{"name":"DEBUG","level":1},{"name":"INFO","level":2},{"name":"WARNING","level":3},{"name":"ERROR","level":4},{"name":"CRITICAL","level":5}];
-dojo.logging.log.loggers={};
-dojo.logging.log.getLogger=function(_28){
-if(!this.loggers[_28]){
-this.loggers[_28]=new dojo.logging.Logger();
-this.loggers[_28].parent=this;
-}
-return this.loggers[_28];
-};
-dojo.logging.log.getLevelName=function(lvl){
-for(var x=0;x<this.levels.length;x++){
-if(this.levels[x].level==lvl){
-return this.levels[x].name;
-}
-}
-return null;
-};
-dojo.logging.log.getLevel=function(_2b){
-for(var x=0;x<this.levels.length;x++){
-if(this.levels[x].name.toUpperCase()==_2b.toUpperCase()){
-return this.levels[x].level;
-}
-}
-return null;
-};
-dojo.declare("dojo.logging.MemoryLogHandler",dojo.logging.LogHandler,{initializer:function(_2d,_2e,_2f,_30){
-dojo.logging.LogHandler.call(this,_2d);
-this.numRecords=(typeof djConfig["loggingNumRecords"]!="undefined")?djConfig["loggingNumRecords"]:((_2e)?_2e:-1);
-this.postType=(typeof djConfig["loggingPostType"]!="undefined")?djConfig["loggingPostType"]:(_2f||-1);
-this.postInterval=(typeof djConfig["loggingPostInterval"]!="undefined")?djConfig["loggingPostInterval"]:(_2f||-1);
-},emit:function(_31){
-if(!djConfig.isDebug){
-return;
-}
-var _32=String(dojo.log.getLevelName(_31.level)+": "+_31.time.toLocaleTimeString())+": "+_31.message;
-if(!dj_undef("println",dojo.hostenv)){
-dojo.hostenv.println(_32,_31.msgArgs);
-}
-this.data.push(_31);
-if(this.numRecords!=-1){
-while(this.data.length>this.numRecords){
-this.data.shift();
-}
-}
-}});
-dojo.logging.logQueueHandler=new dojo.logging.MemoryLogHandler(0,50,0,10000);
-dojo.logging.log.addHandler(dojo.logging.logQueueHandler);
-dojo.log=dojo.logging.log;
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/logging/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/logging/__package__.js
deleted file mode 100644
index 2137449..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/logging/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:[["dojo.logging.Logger",false,false]],rhino:["dojo.logging.RhinoLogger"]});
-dojo.provide("dojo.logging.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math.js
deleted file mode 100644
index a89ce86..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math.js
+++ /dev/null
@@ -1,95 +0,0 @@
-dojo.provide("dojo.math");
-dojo.math.degToRad=function(x){
-return (x*Math.PI)/180;
-};
-dojo.math.radToDeg=function(x){
-return (x*180)/Math.PI;
-};
-dojo.math.factorial=function(n){
-if(n<1){
-return 0;
-}
-var _4=1;
-for(var i=1;i<=n;i++){
-_4*=i;
-}
-return _4;
-};
-dojo.math.permutations=function(n,k){
-if(n==0||k==0){
-return 1;
-}
-return (dojo.math.factorial(n)/dojo.math.factorial(n-k));
-};
-dojo.math.combinations=function(n,r){
-if(n==0||r==0){
-return 1;
-}
-return (dojo.math.factorial(n)/(dojo.math.factorial(n-r)*dojo.math.factorial(r)));
-};
-dojo.math.bernstein=function(t,n,i){
-return (dojo.math.combinations(n,i)*Math.pow(t,i)*Math.pow(1-t,n-i));
-};
-dojo.math.gaussianRandom=function(){
-var k=2;
-do{
-var i=2*Math.random()-1;
-var j=2*Math.random()-1;
-k=i*i+j*j;
-}while(k>=1);
-k=Math.sqrt((-2*Math.log(k))/k);
-return i*k;
-};
-dojo.math.mean=function(){
-var _10=dojo.lang.isArray(arguments[0])?arguments[0]:arguments;
-var _11=0;
-for(var i=0;i<_10.length;i++){
-_11+=_10[i];
-}
-return _11/_10.length;
-};
-dojo.math.round=function(_13,_14){
-if(!_14){
-var _15=1;
-}else{
-var _15=Math.pow(10,_14);
-}
-return Math.round(_13*_15)/_15;
-};
-dojo.math.sd=dojo.math.standardDeviation=function(){
-var _16=dojo.lang.isArray(arguments[0])?arguments[0]:arguments;
-return Math.sqrt(dojo.math.variance(_16));
-};
-dojo.math.variance=function(){
-var _17=dojo.lang.isArray(arguments[0])?arguments[0]:arguments;
-var _18=0,_19=0;
-for(var i=0;i<_17.length;i++){
-_18+=_17[i];
-_19+=Math.pow(_17[i],2);
-}
-return (_19/_17.length)-Math.pow(_18/_17.length,2);
-};
-dojo.math.range=function(a,b,_1d){
-if(arguments.length<2){
-b=a;
-a=0;
-}
-if(arguments.length<3){
-_1d=1;
-}
-var _1e=[];
-if(_1d>0){
-for(var i=a;i<b;i+=_1d){
-_1e.push(i);
-}
-}else{
-if(_1d<0){
-for(var i=a;i>b;i+=_1d){
-_1e.push(i);
-}
-}else{
-throw new Error("dojo.math.range: step must be non-zero");
-}
-}
-return _1e;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/__package__.js
deleted file mode 100644
index 98d9221..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:[["dojo.math",false,false],["dojo.math.curves",false,false],["dojo.math.points",false,false]]});
-dojo.provide("dojo.math.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/curves.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/curves.js
deleted file mode 100644
index 374dfb7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/curves.js
+++ /dev/null
@@ -1,171 +0,0 @@
-dojo.provide("dojo.math.curves");
-dojo.require("dojo.math");
-dojo.math.curves={Line:function(_1,_2){
-this.start=_1;
-this.end=_2;
-this.dimensions=_1.length;
-for(var i=0;i<_1.length;i++){
-_1[i]=Number(_1[i]);
-}
-for(var i=0;i<_2.length;i++){
-_2[i]=Number(_2[i]);
-}
-this.getValue=function(n){
-var _5=new Array(this.dimensions);
-for(var i=0;i<this.dimensions;i++){
-_5[i]=((this.end[i]-this.start[i])*n)+this.start[i];
-}
-return _5;
-};
-return this;
-},Bezier:function(_7){
-this.getValue=function(_8){
-if(_8>=1){
-return this.p[this.p.length-1];
-}
-if(_8<=0){
-return this.p[0];
-}
-var _9=new Array(this.p[0].length);
-for(var k=0;j<this.p[0].length;k++){
-_9[k]=0;
-}
-for(var j=0;j<this.p[0].length;j++){
-var C=0;
-var D=0;
-for(var i=0;i<this.p.length;i++){
-C+=this.p[i][j]*this.p[this.p.length-1][0]*dojo.math.bernstein(_8,this.p.length,i);
-}
-for(var l=0;l<this.p.length;l++){
-D+=this.p[this.p.length-1][0]*dojo.math.bernstein(_8,this.p.length,l);
-}
-_9[j]=C/D;
-}
-return _9;
-};
-this.p=_7;
-return this;
-},CatmullRom:function(_10,c){
-this.getValue=function(_12){
-var _13=_12*(this.p.length-1);
-var _14=Math.floor(_13);
-var _15=_13-_14;
-var i0=_14-1;
-if(i0<0){
-i0=0;
-}
-var i=_14;
-var i1=_14+1;
-if(i1>=this.p.length){
-i1=this.p.length-1;
-}
-var i2=_14+2;
-if(i2>=this.p.length){
-i2=this.p.length-1;
-}
-var u=_15;
-var u2=_15*_15;
-var u3=_15*_15*_15;
-var _1d=new Array(this.p[0].length);
-for(var k=0;k<this.p[0].length;k++){
-var x1=(-this.c*this.p[i0][k])+((2-this.c)*this.p[i][k])+((this.c-2)*this.p[i1][k])+(this.c*this.p[i2][k]);
-var x2=(2*this.c*this.p[i0][k])+((this.c-3)*this.p[i][k])+((3-2*this.c)*this.p[i1][k])+(-this.c*this.p[i2][k]);
-var x3=(-this.c*this.p[i0][k])+(this.c*this.p[i1][k]);
-var x4=this.p[i][k];
-_1d[k]=x1*u3+x2*u2+x3*u+x4;
-}
-return _1d;
-};
-if(!c){
-this.c=0.7;
-}else{
-this.c=c;
-}
-this.p=_10;
-return this;
-},Arc:function(_23,end,ccw){
-var _26=dojo.math.points.midpoint(_23,end);
-var _27=dojo.math.points.translate(dojo.math.points.invert(_26),_23);
-var rad=Math.sqrt(Math.pow(_27[0],2)+Math.pow(_27[1],2));
-var _29=dojo.math.radToDeg(Math.atan(_27[1]/_27[0]));
-if(_27[0]<0){
-_29-=90;
-}else{
-_29+=90;
-}
-dojo.math.curves.CenteredArc.call(this,_26,rad,_29,_29+(ccw?-180:180));
-},CenteredArc:function(_2a,_2b,_2c,end){
-this.center=_2a;
-this.radius=_2b;
-this.start=_2c||0;
-this.end=end;
-this.getValue=function(n){
-var _2f=new Array(2);
-var _30=dojo.math.degToRad(this.start+((this.end-this.start)*n));
-_2f[0]=this.center[0]+this.radius*Math.sin(_30);
-_2f[1]=this.center[1]-this.radius*Math.cos(_30);
-return _2f;
-};
-return this;
-},Circle:function(_31,_32){
-dojo.math.curves.CenteredArc.call(this,_31,_32,0,360);
-return this;
-},Path:function(){
-var _33=[];
-var _34=[];
-var _35=[];
-var _36=0;
-this.add=function(_37,_38){
-if(_38<0){
-dojo.raise("dojo.math.curves.Path.add: weight cannot be less than 0");
-}
-_33.push(_37);
-_34.push(_38);
-_36+=_38;
-computeRanges();
-};
-this.remove=function(_39){
-for(var i=0;i<_33.length;i++){
-if(_33[i]==_39){
-_33.splice(i,1);
-_36-=_34.splice(i,1)[0];
-break;
-}
-}
-computeRanges();
-};
-this.removeAll=function(){
-_33=[];
-_34=[];
-_36=0;
-};
-this.getValue=function(n){
-var _3c=false,_3d=0;
-for(var i=0;i<_35.length;i++){
-var r=_35[i];
-if(n>=r[0]&&n<r[1]){
-var _40=(n-r[0])/r[2];
-_3d=_33[i].getValue(_40);
-_3c=true;
-break;
-}
-}
-if(!_3c){
-_3d=_33[_33.length-1].getValue(1);
-}
-for(var j=0;j<i;j++){
-_3d=dojo.math.points.translate(_3d,_33[j].getValue(1));
-}
-return _3d;
-};
-function computeRanges(){
-var _42=0;
-for(var i=0;i<_34.length;i++){
-var end=_42+_34[i]/_36;
-var len=end-_42;
-_35[i]=[_42,end,len];
-_42=end;
-}
-}
-return this;
-}};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/matrix.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/matrix.js
deleted file mode 100644
index 63c48a0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/matrix.js
+++ /dev/null
@@ -1,290 +0,0 @@
-dojo.provide("dojo.math.matrix");
-dojo.math.matrix.iDF=0;
-dojo.math.matrix.ALMOST_ZERO=1e-10;
-dojo.math.matrix.multiply=function(a,b){
-var ay=a.length;
-var ax=a[0].length;
-var by=b.length;
-var bx=b[0].length;
-if(ax!=by){
-dojo.debug("Can't multiply matricies of sizes "+ax+","+ay+" and "+bx+","+by);
-return [[0]];
-}
-var c=[];
-for(var k=0;k<ay;k++){
-c[k]=[];
-for(var i=0;i<bx;i++){
-c[k][i]=0;
-for(var m=0;m<ax;m++){
-c[k][i]+=a[k][m]*b[m][i];
-}
-}
-}
-return c;
-};
-dojo.math.matrix.product=function(){
-if(arguments.length==0){
-dojo.debug("can't multiply 0 matrices!");
-return 1;
-}
-var _b=arguments[0];
-for(var i=1;i<arguments.length;i++){
-_b=dojo.math.matrix.multiply(_b,arguments[i]);
-}
-return _b;
-};
-dojo.math.matrix.sum=function(){
-if(arguments.length==0){
-dojo.debug("can't sum 0 matrices!");
-return 0;
-}
-var _d=dojo.math.matrix.copy(arguments[0]);
-var _e=_d.length;
-if(_e==0){
-dojo.debug("can't deal with matrices of 0 rows!");
-return 0;
-}
-var _f=_d[0].length;
-if(_f==0){
-dojo.debug("can't deal with matrices of 0 cols!");
-return 0;
-}
-for(var i=1;i<arguments.length;++i){
-var arg=arguments[i];
-if(arg.length!=_e||arg[0].length!=_f){
-dojo.debug("can't add matrices of different dimensions: first dimensions were "+_e+"x"+_f+", current dimensions are "+arg.length+"x"+arg[0].length);
-return 0;
-}
-for(var r=0;r<_e;r++){
-for(var c=0;c<_f;c++){
-_d[r][c]+=arg[r][c];
-}
-}
-}
-return _d;
-};
-dojo.math.matrix.inverse=function(a){
-if(a.length==1&&a[0].length==1){
-return [[1/a[0][0]]];
-}
-var tms=a.length;
-var m=dojo.math.matrix.create(tms,tms);
-var mm=dojo.math.matrix.adjoint(a);
-var det=dojo.math.matrix.determinant(a);
-var dd=0;
-if(det==0){
-dojo.debug("Determinant Equals 0, Not Invertible.");
-return [[0]];
-}else{
-dd=1/det;
-}
-for(var i=0;i<tms;i++){
-for(var j=0;j<tms;j++){
-m[i][j]=dd*mm[i][j];
-}
-}
-return m;
-};
-dojo.math.matrix.determinant=function(a){
-if(a.length!=a[0].length){
-dojo.debug("Can't calculate the determiant of a non-squre matrix!");
-return 0;
-}
-var tms=a.length;
-var det=1;
-var b=dojo.math.matrix.upperTriangle(a);
-for(var i=0;i<tms;i++){
-var bii=b[i][i];
-if(Math.abs(bii)<dojo.math.matrix.ALMOST_ZERO){
-return 0;
-}
-det*=bii;
-}
-det=det*dojo.math.matrix.iDF;
-return det;
-};
-dojo.math.matrix.upperTriangle=function(m){
-m=dojo.math.matrix.copy(m);
-var f1=0;
-var _24=0;
-var tms=m.length;
-var v=1;
-dojo.math.matrix.iDF=1;
-for(var col=0;col<tms-1;col++){
-if(typeof m[col][col]!="number"){
-dojo.debug("non-numeric entry found in a numeric matrix: m["+col+"]["+col+"]="+m[col][col]);
-}
-v=1;
-var _28=0;
-while((m[col][col]==0)&&!_28){
-if(col+v>=tms){
-dojo.math.matrix.iDF=0;
-_28=1;
-}else{
-for(var r=0;r<tms;r++){
-_24=m[col][r];
-m[col][r]=m[col+v][r];
-m[col+v][r]=_24;
-}
-v++;
-dojo.math.matrix.iDF*=-1;
-}
-}
-for(var row=col+1;row<tms;row++){
-if(typeof m[row][col]!="number"){
-dojo.debug("non-numeric entry found in a numeric matrix: m["+row+"]["+col+"]="+m[row][col]);
-}
-if(typeof m[col][row]!="number"){
-dojo.debug("non-numeric entry found in a numeric matrix: m["+col+"]["+row+"]="+m[col][row]);
-}
-if(m[col][col]!=0){
-var f1=(-1)*m[row][col]/m[col][col];
-for(var i=col;i<tms;i++){
-m[row][i]=f1*m[col][i]+m[row][i];
-}
-}
-}
-}
-return m;
-};
-dojo.math.matrix.create=function(a,b,_2e){
-if(!_2e){
-_2e=0;
-}
-var m=[];
-for(var i=0;i<b;i++){
-m[i]=[];
-for(var j=0;j<a;j++){
-m[i][j]=_2e;
-}
-}
-return m;
-};
-dojo.math.matrix.ones=function(a,b){
-return dojo.math.matrix.create(a,b,1);
-};
-dojo.math.matrix.zeros=function(a,b){
-return dojo.math.matrix.create(a,b,0);
-};
-dojo.math.matrix.identity=function(_36,_37){
-if(!_37){
-_37=1;
-}
-var m=[];
-for(var i=0;i<_36;i++){
-m[i]=[];
-for(var j=0;j<_36;j++){
-m[i][j]=(i==j?_37:0);
-}
-}
-return m;
-};
-dojo.math.matrix.adjoint=function(a){
-var tms=a.length;
-if(tms<=1){
-dojo.debug("Can't find the adjoint of a matrix with a dimension less than 2");
-return [[0]];
-}
-if(a.length!=a[0].length){
-dojo.debug("Can't find the adjoint of a non-square matrix");
-return [[0]];
-}
-var m=dojo.math.matrix.create(tms,tms);
-var ii=0;
-var jj=0;
-var ia=0;
-var ja=0;
-var det=0;
-var ap=dojo.math.matrix.create(tms-1,tms-1);
-for(var i=0;i<tms;i++){
-for(var j=0;j<tms;j++){
-ia=0;
-for(ii=0;ii<tms;ii++){
-if(ii==i){
-continue;
-}
-ja=0;
-for(jj=0;jj<tms;jj++){
-if(jj==j){
-continue;
-}
-ap[ia][ja]=a[ii][jj];
-ja++;
-}
-ia++;
-}
-det=dojo.math.matrix.determinant(ap);
-m[i][j]=Math.pow(-1,(i+j))*det;
-}
-}
-m=dojo.math.matrix.transpose(m);
-return m;
-};
-dojo.math.matrix.transpose=function(a){
-var m=dojo.math.matrix.create(a.length,a[0].length);
-for(var i=0;i<a.length;i++){
-for(var j=0;j<a[i].length;j++){
-m[j][i]=a[i][j];
-}
-}
-return m;
-};
-dojo.math.matrix.format=function(a,_4b){
-if(arguments.length<=1){
-_4b=5;
-}
-function format_int(x,dp){
-var fac=Math.pow(10,dp);
-var a=Math.round(x*fac)/fac;
-var b=a.toString();
-if(b.charAt(0)!="-"){
-b=" "+b;
-}
-var _51=0;
-for(var i=1;i<b.length;i++){
-if(b.charAt(i)=="."){
-_51=1;
-}
-}
-if(!_51){
-b+=".";
-}
-while(b.length<dp+3){
-b+="0";
-}
-return b;
-}
-var ya=a.length;
-var xa=ya>0?a[0].length:0;
-var _55="";
-for(var y=0;y<ya;y++){
-_55+="| ";
-for(var x=0;x<xa;x++){
-_55+=format_int(a[y][x],_4b)+" ";
-}
-_55+="|\n";
-}
-return _55;
-};
-dojo.math.matrix.copy=function(a){
-var ya=a.length;
-var xa=a[0].length;
-var m=dojo.math.matrix.create(xa,ya);
-for(var y=0;y<ya;y++){
-for(var x=0;x<xa;x++){
-m[y][x]=a[y][x];
-}
-}
-return m;
-};
-dojo.math.matrix.scale=function(k,a){
-a=dojo.math.matrix.copy(a);
-var ya=a.length;
-var xa=a[0].length;
-for(var y=0;y<ya;y++){
-for(var x=0;x<xa;x++){
-a[y][x]*=k;
-}
-}
-return a;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/points.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/points.js
deleted file mode 100644
index f4faa40..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/math/points.js
+++ /dev/null
@@ -1,29 +0,0 @@
-dojo.provide("dojo.math.points");
-dojo.require("dojo.math");
-dojo.math.points={translate:function(a,b){
-if(a.length!=b.length){
-dojo.raise("dojo.math.translate: points not same size (a:["+a+"], b:["+b+"])");
-}
-var c=new Array(a.length);
-for(var i=0;i<a.length;i++){
-c[i]=a[i]+b[i];
-}
-return c;
-},midpoint:function(a,b){
-if(a.length!=b.length){
-dojo.raise("dojo.math.midpoint: points not same size (a:["+a+"], b:["+b+"])");
-}
-var c=new Array(a.length);
-for(var i=0;i<a.length;i++){
-c[i]=(a[i]+b[i])/2;
-}
-return c;
-},invert:function(a){
-var b=new Array(a.length);
-for(var i=0;i<a.length;i++){
-b[i]=-a[i];
-}
-return b;
-},distance:function(a,b){
-return Math.sqrt(Math.pow(b[0]-a[0],2)+Math.pow(b[1]-a[1],2));
-}};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/namespaces/dojo.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/namespaces/dojo.js
deleted file mode 100644
index d4c7f10..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/namespaces/dojo.js
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.namespaces.dojo");
-dojo.require("dojo.ns");
-
-(function(){
-	// Mapping of all widget short names to their full package names
-	// This is used for widget autoloading - no dojo.require() is necessary.
-	// If you use a widget in markup or create one dynamically, then this
-	// mapping is used to find and load any dependencies not already loaded.
-	// You should use your own namespace for any custom widgets.
-	// For extra widgets you use, dojo.declare() may be used to explicitly load them.
-	// Experimental and deprecated widgets are not included in this table
-	var map = {
-		html: {
-			"accordioncontainer": "dojo.widget.AccordionContainer",
-			"animatedpng": "dojo.widget.AnimatedPng",
-			"button": "dojo.widget.Button",
-			"chart": "dojo.widget.Chart",
-			"checkbox": "dojo.widget.Checkbox",
-			"clock": "dojo.widget.Clock",
-			"colorpalette": "dojo.widget.ColorPalette",
-			"combobox": "dojo.widget.ComboBox",
-			"combobutton": "dojo.widget.Button",
-			"contentpane": "dojo.widget.ContentPane",
-			"currencytextbox": "dojo.widget.CurrencyTextbox",
-			"datepicker": "dojo.widget.DatePicker",
-			"datetextbox": "dojo.widget.DateTextbox",
-			"debugconsole": "dojo.widget.DebugConsole",
-			"dialog": "dojo.widget.Dialog",
-			"dropdownbutton": "dojo.widget.Button",
-			"dropdowndatepicker": "dojo.widget.DropdownDatePicker",
-			"dropdowntimepicker": "dojo.widget.DropdownTimePicker",
-			"emaillisttextbox": "dojo.widget.InternetTextbox",
-			"emailtextbox": "dojo.widget.InternetTextbox",
-			"editor": "dojo.widget.Editor",
-			"editor2": "dojo.widget.Editor2",
-			"filteringtable": "dojo.widget.FilteringTable",
-			"fisheyelist": "dojo.widget.FisheyeList",
-			"fisheyelistitem": "dojo.widget.FisheyeList",
-			"floatingpane": "dojo.widget.FloatingPane",
-			"modalfloatingpane": "dojo.widget.FloatingPane",
-			"form": "dojo.widget.Form",
-			"googlemap": "dojo.widget.GoogleMap",
-			"inlineeditbox": "dojo.widget.InlineEditBox",
-			"integerspinner": "dojo.widget.Spinner",
-			"integertextbox": "dojo.widget.IntegerTextbox",
-			"ipaddresstextbox": "dojo.widget.InternetTextbox",
-			"layoutcontainer": "dojo.widget.LayoutContainer",
-			"linkpane": "dojo.widget.LinkPane",
-			"popupmenu2": "dojo.widget.Menu2",
-			"menuitem2": "dojo.widget.Menu2",
-			"menuseparator2": "dojo.widget.Menu2",
-			"menubar2": "dojo.widget.Menu2",
-			"menubaritem2": "dojo.widget.Menu2",
-			"pagecontainer": "dojo.widget.PageContainer",
-			"pagecontroller": "dojo.widget.PageContainer",
-			"popupcontainer": "dojo.widget.PopupContainer",
-			"progressbar": "dojo.widget.ProgressBar",
-			"radiogroup": "dojo.widget.RadioGroup",
-			"realnumbertextbox": "dojo.widget.RealNumberTextbox",
-			"regexptextbox": "dojo.widget.RegexpTextbox",
-			"repeater": "dojo.widget.Repeater", 
-			"resizabletextarea": "dojo.widget.ResizableTextarea",
-			"richtext": "dojo.widget.RichText",
-			"select": "dojo.widget.Select",
-			"show": "dojo.widget.Show",
-			"showaction": "dojo.widget.ShowAction",
-			"showslide": "dojo.widget.ShowSlide",
-			"slidervertical": "dojo.widget.Slider",
-			"sliderhorizontal": "dojo.widget.Slider",
-			"slider":"dojo.widget.Slider",
-			"slideshow": "dojo.widget.SlideShow",
-			"sortabletable": "dojo.widget.SortableTable",
-			"splitcontainer": "dojo.widget.SplitContainer",
-			"tabcontainer": "dojo.widget.TabContainer",
-			"tabcontroller": "dojo.widget.TabContainer",
-			"taskbar": "dojo.widget.TaskBar",
-			"textbox": "dojo.widget.Textbox",
-			"timepicker": "dojo.widget.TimePicker",
-			"timetextbox": "dojo.widget.DateTextbox",
-			"titlepane": "dojo.widget.TitlePane",
-			"toaster": "dojo.widget.Toaster",
-			"toggler": "dojo.widget.Toggler",
-			"toolbar": "dojo.widget.Toolbar",
-			"toolbarcontainer": "dojo.widget.Toolbar",
-			"toolbaritem": "dojo.widget.Toolbar",
-			"toolbarbuttongroup": "dojo.widget.Toolbar",
-			"toolbarbutton": "dojo.widget.Toolbar",
-			"toolbardialog": "dojo.widget.Toolbar",
-			"toolbarmenu": "dojo.widget.Toolbar",
-			"toolbarseparator": "dojo.widget.Toolbar",
-			"toolbarspace": "dojo.widget.Toolbar",
-			"toolbarselect": "dojo.widget.Toolbar",
-			"toolbarcolordialog": "dojo.widget.Toolbar",
-			"tooltip": "dojo.widget.Tooltip",
-			"tree": "dojo.widget.Tree",
-			"treebasiccontroller": "dojo.widget.TreeBasicController",
-			"treecontextmenu": "dojo.widget.TreeContextMenu",
-			"treedisablewrapextension": "dojo.widget.TreeDisableWrapExtension",
-			"treedociconextension": "dojo.widget.TreeDocIconExtension",
-			"treeeditor": "dojo.widget.TreeEditor",
-			"treeemphasizeonselect": "dojo.widget.TreeEmphasizeOnSelect",
-			"treeexpandtonodeonselect": "dojo.widget.TreeExpandToNodeOnSelect",
-			"treelinkextension": "dojo.widget.TreeLinkExtension",
-			"treeloadingcontroller": "dojo.widget.TreeLoadingController",
-			"treemenuitem": "dojo.widget.TreeContextMenu",
-			"treenode": "dojo.widget.TreeNode",
-			"treerpccontroller": "dojo.widget.TreeRPCController",
-			"treeselector": "dojo.widget.TreeSelector",
-			"treetoggleonselect": "dojo.widget.TreeToggleOnSelect",
-			"treev3": "dojo.widget.TreeV3",
-			"treebasiccontrollerv3": "dojo.widget.TreeBasicControllerV3",
-			"treecontextmenuv3": "dojo.widget.TreeContextMenuV3",
-			"treedndcontrollerv3": "dojo.widget.TreeDndControllerV3",
-			"treeloadingcontrollerv3": "dojo.widget.TreeLoadingControllerV3",
-			"treemenuitemv3": "dojo.widget.TreeContextMenuV3",
-			"treerpccontrollerv3": "dojo.widget.TreeRpcControllerV3",
-			"treeselectorv3": "dojo.widget.TreeSelectorV3",
-			"urltextbox": "dojo.widget.InternetTextbox",
-			"usphonenumbertextbox": "dojo.widget.UsTextbox",
-			"ussocialsecuritynumbertextbox": "dojo.widget.UsTextbox",
-			"usstatetextbox": "dojo.widget.UsTextbox",
-			"usziptextbox": "dojo.widget.UsTextbox",
-			"validationtextbox": "dojo.widget.ValidationTextbox",
-			"treeloadingcontroller": "dojo.widget.TreeLoadingController",
-			"wizardcontainer": "dojo.widget.Wizard",
-			"wizardpane": "dojo.widget.Wizard",
-			"yahoomap": "dojo.widget.YahooMap"
-		},
-		svg: {
-			"chart": "dojo.widget.svg.Chart"
-		},
-		vml: {
-			"chart": "dojo.widget.vml.Chart"
-		}
-	};
-
-	dojo.addDojoNamespaceMapping = function(/*String*/shortName, /*String*/packageName){
-	// summary:
-	//	Add an entry to the mapping table for the dojo: namespace
-	//
-	// shortName: the name to be used as the widget's tag name in the dojo: namespace
-	// packageName: the path to the Javascript module in dotted package notation
-		map[shortName]=packageName;    
-	};
-	
-	function dojoNamespaceResolver(name, domain){
-		if(!domain){ domain="html"; }
-		if(!map[domain]){ return null; }
-		return map[domain][name];    
-	}
-
-	dojo.registerNamespaceResolver("dojo", dojoNamespaceResolver);
-})();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/ns.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/ns.js
deleted file mode 100644
index ea4d38d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/ns.js
+++ /dev/null
@@ -1,87 +0,0 @@
-dojo.provide("dojo.ns");
-dojo.ns={namespaces:{},failed:{},loading:{},loaded:{},register:function(_1,_2,_3,_4){
-if(!_4||!this.namespaces[_1]){
-this.namespaces[_1]=new dojo.ns.Ns(_1,_2,_3);
-}
-},allow:function(_5){
-if(this.failed[_5]){
-return false;
-}
-if((djConfig.excludeNamespace)&&(dojo.lang.inArray(djConfig.excludeNamespace,_5))){
-return false;
-}
-return ((_5==this.dojo)||(!djConfig.includeNamespace)||(dojo.lang.inArray(djConfig.includeNamespace,_5)));
-},get:function(_6){
-return this.namespaces[_6];
-},require:function(_7){
-var ns=this.namespaces[_7];
-if((ns)&&(this.loaded[_7])){
-return ns;
-}
-if(!this.allow(_7)){
-return false;
-}
-if(this.loading[_7]){
-dojo.debug("dojo.namespace.require: re-entrant request to load namespace \""+_7+"\" must fail.");
-return false;
-}
-var _9=dojo.require;
-this.loading[_7]=true;
-try{
-if(_7=="dojo"){
-_9("dojo.namespaces.dojo");
-}else{
-if(!dojo.hostenv.moduleHasPrefix(_7)){
-dojo.registerModulePath(_7,"../"+_7);
-}
-_9([_7,"manifest"].join("."),false,true);
-}
-if(!this.namespaces[_7]){
-this.failed[_7]=true;
-}
-}
-finally{
-this.loading[_7]=false;
-}
-return this.namespaces[_7];
-}};
-dojo.ns.Ns=function(_a,_b,_c){
-this.name=_a;
-this.module=_b;
-this.resolver=_c;
-this._loaded=[];
-this._failed=[];
-};
-dojo.ns.Ns.prototype.resolve=function(_d,_e,_f){
-if(!this.resolver||djConfig["skipAutoRequire"]){
-return false;
-}
-var _10=this.resolver(_d,_e);
-if((_10)&&(!this._loaded[_10])&&(!this._failed[_10])){
-var req=dojo.require;
-req(_10,false,true);
-if(dojo.hostenv.findModule(_10,false)){
-this._loaded[_10]=true;
-}else{
-if(!_f){
-dojo.raise("dojo.ns.Ns.resolve: module '"+_10+"' not found after loading via namespace '"+this.name+"'");
-}
-this._failed[_10]=true;
-}
-}
-return Boolean(this._loaded[_10]);
-};
-dojo.registerNamespace=function(_12,_13,_14){
-dojo.ns.register.apply(dojo.ns,arguments);
-};
-dojo.registerNamespaceResolver=function(_15,_16){
-var n=dojo.ns.namespaces[_15];
-if(n){
-n.resolver=_16;
-}
-};
-dojo.registerNamespaceManifest=function(_18,_19,_1a,_1b,_1c){
-dojo.registerModulePath(_1a,_19);
-dojo.registerNamespace(_1a,_1b,_1c);
-};
-dojo.registerNamespace("dojo","dojo.widget");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/profile.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/profile.js
deleted file mode 100644
index e6fec27..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/profile.js
+++ /dev/null
@@ -1,91 +0,0 @@
-dojo.provide("dojo.profile");
-dojo.profile={_profiles:{},_pns:[],start:function(_1){
-if(!this._profiles[_1]){
-this._profiles[_1]={iters:0,total:0};
-this._pns[this._pns.length]=_1;
-}else{
-if(this._profiles[_1]["start"]){
-this.end(_1);
-}
-}
-this._profiles[_1].end=null;
-this._profiles[_1].start=new Date();
-},end:function(_2){
-var ed=new Date();
-if((this._profiles[_2])&&(this._profiles[_2]["start"])){
-with(this._profiles[_2]){
-end=ed;
-total+=(end-start);
-start=null;
-iters++;
-}
-}else{
-return true;
-}
-},dump:function(_4){
-var _5=document.createElement("table");
-with(_5.style){
-border="1px solid black";
-borderCollapse="collapse";
-}
-var _6=_5.createTHead();
-var _7=_6.insertRow(0);
-var _8=["Identifier","Calls","Total","Avg"];
-for(var x=0;x<_8.length;x++){
-var _a=_7.insertCell(x);
-with(_a.style){
-backgroundColor="#225d94";
-color="white";
-borderBottom="1px solid black";
-borderRight="1px solid black";
-fontFamily="tahoma";
-fontWeight="bolder";
-paddingLeft=paddingRight="5px";
-}
-_a.appendChild(document.createTextNode(_8[x]));
-}
-for(var x=0;x<this._pns.length;x++){
-var _b=this._profiles[this._pns[x]];
-this.end(this._pns[x]);
-if(_b.iters>0){
-var _c=_5.insertRow(true);
-var _d=[this._pns[x],_b.iters,_b.total,parseInt(_b.total/_b.iters)];
-for(var y=0;y<_d.length;y++){
-var cc=_c.insertCell(y);
-cc.appendChild(document.createTextNode(_d[y]));
-with(cc.style){
-borderBottom="1px solid gray";
-paddingLeft=paddingRight="5px";
-if(x%2){
-backgroundColor="#e1f1ff";
-}
-if(y>0){
-textAlign="right";
-borderRight="1px solid gray";
-}else{
-borderRight="1px solid black";
-}
-}
-}
-}
-}
-if(_4){
-var ne=document.createElement("div");
-ne.id="profileOutputTable";
-with(ne.style){
-fontFamily="Courier New, monospace";
-fontSize="12px";
-lineHeight="16px";
-borderTop="1px solid black";
-padding="10px";
-}
-if(document.getElementById("profileOutputTable")){
-dojo.body().replaceChild(ne,document.getElementById("profileOutputTable"));
-}else{
-dojo.body().appendChild(ne);
-}
-ne.appendChild(_5);
-}
-return _5;
-}};
-dojo.profile.stop=dojo.profile.end;
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/regexp.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/regexp.js
deleted file mode 100644
index 95014a0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/regexp.js
+++ /dev/null
@@ -1,352 +0,0 @@
-dojo.provide("dojo.regexp");
-dojo.evalObjPath("dojo.regexp.us",true);
-dojo.regexp.tld=function(_1){
-_1=(typeof _1=="object")?_1:{};
-if(typeof _1.allowCC!="boolean"){
-_1.allowCC=true;
-}
-if(typeof _1.allowInfra!="boolean"){
-_1.allowInfra=true;
-}
-if(typeof _1.allowGeneric!="boolean"){
-_1.allowGeneric=true;
-}
-var _2="arpa";
-var _3="aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|xxx|jobs|mobi|post";
-var _4="ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|"+"bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|"+"ec|ee|eg|er|eu|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|"+"gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|"+"la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|"+"my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|"+"re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sk|sl|sm|sn|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|"+"tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw";
-var a=[];
-if(_1.allowInfra){
-a.push(_2);
-}
-if(_1.allowGeneric){
-a.push(_3);
-}
-if(_1.allowCC){
-a.push(_4);
-}
-var _6="";
-if(a.length>0){
-_6="("+a.join("|")+")";
-}
-return _6;
-};
-dojo.regexp.ipAddress=function(_7){
-_7=(typeof _7=="object")?_7:{};
-if(typeof _7.allowDottedDecimal!="boolean"){
-_7.allowDottedDecimal=true;
-}
-if(typeof _7.allowDottedHex!="boolean"){
-_7.allowDottedHex=true;
-}
-if(typeof _7.allowDottedOctal!="boolean"){
-_7.allowDottedOctal=true;
-}
-if(typeof _7.allowDecimal!="boolean"){
-_7.allowDecimal=true;
-}
-if(typeof _7.allowHex!="boolean"){
-_7.allowHex=true;
-}
-if(typeof _7.allowIPv6!="boolean"){
-_7.allowIPv6=true;
-}
-if(typeof _7.allowHybrid!="boolean"){
-_7.allowHybrid=true;
-}
-var _8="((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
-var _9="(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]";
-var _a="(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]";
-var _b="(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|"+"4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])";
-var _c="0[xX]0*[\\da-fA-F]{1,8}";
-var _d="([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}";
-var _e="([\\da-fA-F]{1,4}\\:){6}"+"((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
-var a=[];
-if(_7.allowDottedDecimal){
-a.push(_8);
-}
-if(_7.allowDottedHex){
-a.push(_9);
-}
-if(_7.allowDottedOctal){
-a.push(_a);
-}
-if(_7.allowDecimal){
-a.push(_b);
-}
-if(_7.allowHex){
-a.push(_c);
-}
-if(_7.allowIPv6){
-a.push(_d);
-}
-if(_7.allowHybrid){
-a.push(_e);
-}
-var _10="";
-if(a.length>0){
-_10="("+a.join("|")+")";
-}
-return _10;
-};
-dojo.regexp.host=function(_11){
-_11=(typeof _11=="object")?_11:{};
-if(typeof _11.allowIP!="boolean"){
-_11.allowIP=true;
-}
-if(typeof _11.allowLocal!="boolean"){
-_11.allowLocal=false;
-}
-if(typeof _11.allowPort!="boolean"){
-_11.allowPort=true;
-}
-var _12="([0-9a-zA-Z]([-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?\\.)+"+dojo.regexp.tld(_11);
-var _13=(_11.allowPort)?"(\\:"+dojo.regexp.integer({signed:false})+")?":"";
-var _14=_12;
-if(_11.allowIP){
-_14+="|"+dojo.regexp.ipAddress(_11);
-}
-if(_11.allowLocal){
-_14+="|localhost";
-}
-return "("+_14+")"+_13;
-};
-dojo.regexp.url=function(_15){
-_15=(typeof _15=="object")?_15:{};
-if(typeof _15.scheme=="undefined"){
-_15.scheme=[true,false];
-}
-var _16=dojo.regexp.buildGroupRE(_15.scheme,function(q){
-if(q){
-return "(https?|ftps?)\\://";
-}
-return "";
-});
-var _18="(/([^?#\\s/]+/)*)?([^?#\\s/]+(\\?[^?#\\s/]*)?(#[A-Za-z][\\w.:-]*)?)?";
-return _16+dojo.regexp.host(_15)+_18;
-};
-dojo.regexp.emailAddress=function(_19){
-_19=(typeof _19=="object")?_19:{};
-if(typeof _19.allowCruft!="boolean"){
-_19.allowCruft=false;
-}
-_19.allowPort=false;
-var _1a="([\\da-z]+[-._+&'])*[\\da-z]+";
-var _1b=_1a+"@"+dojo.regexp.host(_19);
-if(_19.allowCruft){
-_1b="<?(mailto\\:)?"+_1b+">?";
-}
-return _1b;
-};
-dojo.regexp.emailAddressList=function(_1c){
-_1c=(typeof _1c=="object")?_1c:{};
-if(typeof _1c.listSeparator!="string"){
-_1c.listSeparator="\\s;,";
-}
-var _1d=dojo.regexp.emailAddress(_1c);
-var _1e="("+_1d+"\\s*["+_1c.listSeparator+"]\\s*)*"+_1d+"\\s*["+_1c.listSeparator+"]?\\s*";
-return _1e;
-};
-dojo.regexp.integer=function(_1f){
-_1f=(typeof _1f=="object")?_1f:{};
-if(typeof _1f.signed=="undefined"){
-_1f.signed=[true,false];
-}
-if(typeof _1f.separator=="undefined"){
-_1f.separator="";
-}else{
-if(typeof _1f.groupSize=="undefined"){
-_1f.groupSize=3;
-}
-}
-var _20=dojo.regexp.buildGroupRE(_1f.signed,function(q){
-return q?"[-+]":"";
-});
-var _22=dojo.regexp.buildGroupRE(_1f.separator,function(sep){
-if(sep==""){
-return "(0|[1-9]\\d*)";
-}
-var grp=_1f.groupSize,_25=_1f.groupSize2;
-if(typeof _25!="undefined"){
-var _26="(0|[1-9]\\d{0,"+(_25-1)+"}(["+sep+"]\\d{"+_25+"})*["+sep+"]\\d{"+grp+"})";
-return ((grp-_25)>0)?"("+_26+"|(0|[1-9]\\d{0,"+(grp-1)+"}))":_26;
-}
-return "(0|[1-9]\\d{0,"+(grp-1)+"}(["+sep+"]\\d{"+grp+"})*)";
-});
-return _20+_22;
-};
-dojo.regexp.realNumber=function(_27){
-_27=(typeof _27=="object")?_27:{};
-if(typeof _27.places!="number"){
-_27.places=Infinity;
-}
-if(typeof _27.decimal!="string"){
-_27.decimal=".";
-}
-if(typeof _27.fractional=="undefined"){
-_27.fractional=[true,false];
-}
-if(typeof _27.exponent=="undefined"){
-_27.exponent=[true,false];
-}
-if(typeof _27.eSigned=="undefined"){
-_27.eSigned=[true,false];
-}
-var _28=dojo.regexp.integer(_27);
-var _29=dojo.regexp.buildGroupRE(_27.fractional,function(q){
-var re="";
-if(q&&(_27.places>0)){
-re="\\"+_27.decimal;
-if(_27.places==Infinity){
-re="("+re+"\\d+)?";
-}else{
-re=re+"\\d{"+_27.places+"}";
-}
-}
-return re;
-});
-var _2c=dojo.regexp.buildGroupRE(_27.exponent,function(q){
-if(q){
-return "([eE]"+dojo.regexp.integer({signed:_27.eSigned})+")";
-}
-return "";
-});
-return _28+_29+_2c;
-};
-dojo.regexp.currency=function(_2e){
-_2e=(typeof _2e=="object")?_2e:{};
-if(typeof _2e.signed=="undefined"){
-_2e.signed=[true,false];
-}
-if(typeof _2e.symbol=="undefined"){
-_2e.symbol="$";
-}
-if(typeof _2e.placement!="string"){
-_2e.placement="before";
-}
-if(typeof _2e.signPlacement!="string"){
-_2e.signPlacement="before";
-}
-if(typeof _2e.separator=="undefined"){
-_2e.separator=",";
-}
-if(typeof _2e.fractional=="undefined"&&typeof _2e.cents!="undefined"){
-dojo.deprecated("dojo.regexp.currency: flags.cents","use flags.fractional instead","0.5");
-_2e.fractional=_2e.cents;
-}
-if(typeof _2e.decimal!="string"){
-_2e.decimal=".";
-}
-var _2f=dojo.regexp.buildGroupRE(_2e.signed,function(q){
-if(q){
-return "[-+]";
-}
-return "";
-});
-var _31=dojo.regexp.buildGroupRE(_2e.symbol,function(_32){
-return "\\s?"+_32.replace(/([.$?*!=:|\\\/^])/g,"\\$1")+"\\s?";
-});
-switch(_2e.signPlacement){
-case "before":
-_31=_2f+_31;
-break;
-case "after":
-_31=_31+_2f;
-break;
-}
-var _33=_2e;
-_33.signed=false;
-_33.exponent=false;
-var _34=dojo.regexp.realNumber(_33);
-var _35;
-switch(_2e.placement){
-case "before":
-_35=_31+_34;
-break;
-case "after":
-_35=_34+_31;
-break;
-}
-switch(_2e.signPlacement){
-case "around":
-_35="("+_35+"|"+"\\("+_35+"\\)"+")";
-break;
-case "begin":
-_35=_2f+_35;
-break;
-case "end":
-_35=_35+_2f;
-break;
-}
-return _35;
-};
-dojo.regexp.us.state=function(_36){
-_36=(typeof _36=="object")?_36:{};
-if(typeof _36.allowTerritories!="boolean"){
-_36.allowTerritories=true;
-}
-if(typeof _36.allowMilitary!="boolean"){
-_36.allowMilitary=true;
-}
-var _37="AL|AK|AZ|AR|CA|CO|CT|DE|DC|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|"+"NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY";
-var _38="AS|FM|GU|MH|MP|PW|PR|VI";
-var _39="AA|AE|AP";
-if(_36.allowTerritories){
-_37+="|"+_38;
-}
-if(_36.allowMilitary){
-_37+="|"+_39;
-}
-return "("+_37+")";
-};
-dojo.regexp.time=function(_3a){
-dojo.deprecated("dojo.regexp.time","Use dojo.date.parse instead","0.5");
-_3a=(typeof _3a=="object")?_3a:{};
-if(typeof _3a.format=="undefined"){
-_3a.format="h:mm:ss t";
-}
-if(typeof _3a.amSymbol!="string"){
-_3a.amSymbol="AM";
-}
-if(typeof _3a.pmSymbol!="string"){
-_3a.pmSymbol="PM";
-}
-var _3b=function(_3c){
-_3c=_3c.replace(/([.$?*!=:|{}\(\)\[\]\\\/^])/g,"\\$1");
-var _3d=_3a.amSymbol.replace(/([.$?*!=:|{}\(\)\[\]\\\/^])/g,"\\$1");
-var _3e=_3a.pmSymbol.replace(/([.$?*!=:|{}\(\)\[\]\\\/^])/g,"\\$1");
-_3c=_3c.replace("hh","(0[1-9]|1[0-2])");
-_3c=_3c.replace("h","([1-9]|1[0-2])");
-_3c=_3c.replace("HH","([01][0-9]|2[0-3])");
-_3c=_3c.replace("H","([0-9]|1[0-9]|2[0-3])");
-_3c=_3c.replace("mm","([0-5][0-9])");
-_3c=_3c.replace("m","([1-5][0-9]|[0-9])");
-_3c=_3c.replace("ss","([0-5][0-9])");
-_3c=_3c.replace("s","([1-5][0-9]|[0-9])");
-_3c=_3c.replace("t","\\s?("+_3d+"|"+_3e+")\\s?");
-return _3c;
-};
-return dojo.regexp.buildGroupRE(_3a.format,_3b);
-};
-dojo.regexp.numberFormat=function(_3f){
-_3f=(typeof _3f=="object")?_3f:{};
-if(typeof _3f.format=="undefined"){
-_3f.format="###-###-####";
-}
-var _40=function(_41){
-_41=_41.replace(/([.$*!=:|{}\(\)\[\]\\\/^])/g,"\\$1");
-_41=_41.replace(/\?/g,"\\d?");
-_41=_41.replace(/#/g,"\\d");
-return _41;
-};
-return dojo.regexp.buildGroupRE(_3f.format,_40);
-};
-dojo.regexp.buildGroupRE=function(a,re){
-if(!(a instanceof Array)){
-return re(a);
-}
-var b=[];
-for(var i=0;i<a.length;i++){
-b.push(re(a[i]));
-}
-return "("+b.join("|")+")";
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/Deferred.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/Deferred.js
deleted file mode 100644
index b166b8c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/Deferred.js
+++ /dev/null
@@ -1,5 +0,0 @@
-dojo.provide("dojo.rpc.Deferred");
-dojo.require("dojo.Deferred");
-dojo.deprecated("dojo.rpc.Deferred","replaced by dojo.Deferred","0.6");
-dojo.rpc.Deferred=dojo.Deferred;
-dojo.rpc.Deferred.prototype=dojo.Deferred.prototype;
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/JotService.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/JotService.js
deleted file mode 100644
index d91ca53..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/JotService.js
+++ /dev/null
@@ -1,14 +0,0 @@
-dojo.provide("dojo.rpc.JotService");
-dojo.require("dojo.rpc.RpcService");
-dojo.require("dojo.rpc.JsonService");
-dojo.require("dojo.json");
-dojo.rpc.JotService=function(){
-this.serviceUrl="/_/jsonrpc";
-};
-dojo.inherits(dojo.rpc.JotService,dojo.rpc.JsonService);
-dojo.lang.extend(dojo.rpc.JotService,{bind:function(_1,_2,_3,_4){
-dojo.io.bind({url:_4||this.serviceUrl,content:{json:this.createRequest(_1,_2)},method:"POST",mimetype:"text/json",load:this.resultCallback(_3),error:this.errorCallback(_3),preventCache:true});
-},createRequest:function(_5,_6){
-var _7={"params":_6,"method":_5,"id":this.lastSubmissionId++};
-return dojo.json.serialize(_7);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/JsonService.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/JsonService.js
deleted file mode 100644
index 6b326da..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/JsonService.js
+++ /dev/null
@@ -1,58 +0,0 @@
-dojo.provide("dojo.rpc.JsonService");
-dojo.require("dojo.rpc.RpcService");
-dojo.require("dojo.io.*");
-dojo.require("dojo.json");
-dojo.require("dojo.lang.common");
-dojo.rpc.JsonService=function(_1){
-if(_1){
-if(dojo.lang.isString(_1)){
-this.connect(_1);
-}else{
-if(_1["smdUrl"]){
-this.connect(_1.smdUrl);
-}
-if(_1["smdStr"]){
-this.processSmd(dj_eval("("+_1.smdStr+")"));
-}
-if(_1["smdObj"]){
-this.processSmd(_1.smdObj);
-}
-if(_1["serviceUrl"]){
-this.serviceUrl=_1.serviceUrl;
-}
-if(typeof _1["strictArgChecks"]!="undefined"){
-this.strictArgChecks=_1.strictArgChecks;
-}
-}
-}
-};
-dojo.inherits(dojo.rpc.JsonService,dojo.rpc.RpcService);
-dojo.extend(dojo.rpc.JsonService,{bustCache:false,contentType:"application/json-rpc",lastSubmissionId:0,callRemote:function(_2,_3){
-var _4=new dojo.Deferred();
-this.bind(_2,_3,_4);
-return _4;
-},bind:function(_5,_6,_7,_8){
-dojo.io.bind({url:_8||this.serviceUrl,postContent:this.createRequest(_5,_6),method:"POST",contentType:this.contentType,mimetype:"text/json",load:this.resultCallback(_7),error:this.errorCallback(_7),preventCache:this.bustCache});
-},createRequest:function(_9,_a){
-var _b={"params":_a,"method":_9,"id":++this.lastSubmissionId};
-var _c=dojo.json.serialize(_b);
-dojo.debug("JsonService: JSON-RPC Request: "+_c);
-return _c;
-},parseResults:function(_d){
-if(!_d){
-return;
-}
-if(_d["Result"]!=null){
-return _d["Result"];
-}else{
-if(_d["result"]!=null){
-return _d["result"];
-}else{
-if(_d["ResultSet"]){
-return _d["ResultSet"];
-}else{
-return _d;
-}
-}
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/RpcService.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/RpcService.js
deleted file mode 100644
index e320656..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/RpcService.js
+++ /dev/null
@@ -1,61 +0,0 @@
-dojo.provide("dojo.rpc.RpcService");
-dojo.require("dojo.io.*");
-dojo.require("dojo.json");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.Deferred");
-dojo.rpc.RpcService=function(_1){
-if(_1){
-this.connect(_1);
-}
-};
-dojo.lang.extend(dojo.rpc.RpcService,{strictArgChecks:true,serviceUrl:"",parseResults:function(_2){
-return _2;
-},errorCallback:function(_3){
-return function(_4,e){
-_3.errback(new Error(e.message));
-};
-},resultCallback:function(_6){
-var tf=dojo.lang.hitch(this,function(_8,_9,e){
-if(_9["error"]!=null){
-var _b=new Error(_9.error);
-_b.id=_9.id;
-_6.errback(_b);
-}else{
-var _c=this.parseResults(_9);
-_6.callback(_c);
-}
-});
-return tf;
-},generateMethod:function(_d,_e,_f){
-return dojo.lang.hitch(this,function(){
-var _10=new dojo.Deferred();
-if((this.strictArgChecks)&&(_e!=null)&&(arguments.length!=_e.length)){
-dojo.raise("Invalid number of parameters for remote method.");
-}else{
-this.bind(_d,arguments,_10,_f);
-}
-return _10;
-});
-},processSmd:function(_11){
-dojo.debug("RpcService: Processing returned SMD.");
-if(_11.methods){
-dojo.lang.forEach(_11.methods,function(m){
-if(m&&m["name"]){
-dojo.debug("RpcService: Creating Method: this.",m.name,"()");
-this[m.name]=this.generateMethod(m.name,m.parameters,m["url"]||m["serviceUrl"]||m["serviceURL"]);
-if(dojo.lang.isFunction(this[m.name])){
-dojo.debug("RpcService: Successfully created",m.name,"()");
-}else{
-dojo.debug("RpcService: Failed to create",m.name,"()");
-}
-}
-},this);
-}
-this.serviceUrl=_11.serviceUrl||_11.serviceURL;
-dojo.debug("RpcService: Dojo RpcService is ready for use.");
-},connect:function(_13){
-dojo.debug("RpcService: Attempting to load SMD document from:",_13);
-dojo.io.bind({url:_13,mimetype:"text/json",load:dojo.lang.hitch(this,function(_14,_15,e){
-return this.processSmd(_15);
-}),sync:true});
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/YahooService.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/YahooService.js
deleted file mode 100644
index 775703f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/YahooService.js
+++ /dev/null
@@ -1,28 +0,0 @@
-dojo.provide("dojo.rpc.YahooService");
-dojo.require("dojo.rpc.RpcService");
-dojo.require("dojo.rpc.JsonService");
-dojo.require("dojo.json");
-dojo.require("dojo.uri.*");
-dojo.require("dojo.io.ScriptSrcIO");
-dojo.rpc.YahooService=function(_1){
-this.appId=_1;
-if(!_1){
-this.appId="dojotoolkit";
-dojo.debug("please initialize the YahooService class with your own","application ID. Using the default may cause problems during","deployment of your application");
-}
-if(djConfig["useXDomain"]&&!djConfig["yahooServiceSmdUrl"]){
-dojo.debug("dojo.rpc.YahooService: When using cross-domain Dojo builds,"+" please save yahoo.smd to your domain and set djConfig.yahooServiceSmdUrl"+" to the path on your domain to yahoo.smd");
-}
-this.connect(djConfig["yahooServiceSmdUrl"]||dojo.uri.moduleUri("dojo.rpc","yahoo.smd"));
-this.strictArgChecks=false;
-};
-dojo.inherits(dojo.rpc.YahooService,dojo.rpc.JsonService);
-dojo.lang.extend(dojo.rpc.YahooService,{strictArgChecks:false,bind:function(_2,_3,_4,_5){
-var _6=_3;
-if((dojo.lang.isArrayLike(_3))&&(_3.length==1)){
-_6=_3[0];
-}
-_6.output="json";
-_6.appid=this.appId;
-dojo.io.bind({url:_5||this.serviceUrl,transport:"ScriptSrcTransport",content:_6,jsonParamName:"callback",mimetype:"text/json",load:this.resultCallback(_4),error:this.errorCallback(_4),preventCache:true});
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/__package__.js
deleted file mode 100644
index 8cdaaf6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:[["dojo.rpc.JsonService",false,false]]});
-dojo.provide("dojo.rpc.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/yahoo.smd b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/yahoo.smd
deleted file mode 100644
index 0a305ca..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/rpc/yahoo.smd
+++ /dev/null
@@ -1,289 +0,0 @@
-{
-	"SMDVersion":".1",
-	"objectName":"yahoo",
-	"serviceType":"JSON-P",
-	"methods":[
-		//
-		// MAPS 
-		//
-		{
-			// http://developer.yahoo.com/maps/rest/V1/mapImage.html
-			"name":"mapImage",
-			"serviceURL": "http://api.local.yahoo.com/MapsService/V1/mapImage",
-			"parameters":[
-				{ "name":"street", "type":"STRING" },
-				{ "name":"city", "type":"STRING" },
-				{ "name":"zip", "type":"INTEGER" },
-				{ "name":"location", "type":"STRING" },
-				{ "name":"longitude", "type":"FLOAT" },
-				{ "name":"latitude", "type":"FLOAT" },
-				{ "name":"image_type", "type":"STRING" },
-				{ "name":"image_width", "type":"INTEGER" },
-				{ "name":"image_height", "type":"INTEGER" },
-				{ "name":"zoom", "type":"INTEGER" },
-				{ "name":"radius", "type":"INTEGER" }
-			]
-		},
-		{
-			// http://developer.yahoo.com/traffic/rest/V1/index.html
-			"name":"trafficData",
-			"serviceURL": "http://api.local.yahoo.com/MapsService/V1/trafficData",
-			"parameters":[
-				{ "name":"street", "type":"STRING" },
-				{ "name":"city", "type":"STRING" },
-				{ "name":"zip", "type":"INTEGER" },
-				{ "name":"location", "type":"STRING" },
-				{ "name":"longitude", "type":"FLOAT" },
-				{ "name":"latitude", "type":"FLOAT" },
-				{ "name":"severity", "type":"INTEGER" },
-				{ "name":"include_map", "type":"INTEGER" },
-				{ "name":"image_type", "type":"STRING" },
-				{ "name":"image_width", "type":"INTEGER" },
-				{ "name":"image_height", "type":"INTEGER" },
-				{ "name":"zoom", "type":"INTEGER" },
-				{ "name":"radius", "type":"INTEGER" }
-			]
-		},
-		/*
-			// Yahoo's geocoding service is f'd for JSON and Y! advises that it
-			// may not be returning
-		{
-			// http://developer.yahoo.com/maps/rest/V1/geocode.html
-			"name":"geocode",
-			"serviceURL": "http://api.local.yahoo.com/MapsService/V1/geocode",
-			"parameters":[
-				{ "name":"street", "type":"STRING" },
-				{ "name":"city", "type":"STRING" },
-				{ "name":"zip", "type":"INTEGER" },
-				{ "name":"location", "type":"STRING" }
-			]
-		},
-		*/
-		//
-		// LOCAL SEARCH
-		//
-		{
-			// http://developer.yahoo.com/search/local/V3/localSearch.html
-			"name":"localSearch",
-			"serviceURL": "http://api.local.yahoo.com/LocalSearchService/V3/localSearch",
-			"parameters":[
-				{ "name":"street", "type":"STRING" },
-				{ "name":"city", "type":"STRING" },
-				{ "name":"zip", "type":"INTEGER" },
-				{ "name":"location", "type":"STRING" },
-				{ "name":"listing_id", "type":"STRING" },
-				{ "name":"sort", "type":"STRING" }, // "relevence", "title", "distance", or "rating"
-				{ "name":"start", "type":"INTEGER" },
-				{ "name":"radius", "type":"FLOAT" },
-				{ "name":"results", "type":"INTEGER" }, // 1-50, defaults to 10
-				{ "name":"longitude", "type":"FLOAT" },
-				{ "name":"latitude", "type":"FLOAT" },
-				{ "name":"category", "type":"INTEGER" },
-				{ "name":"omit_category", "type":"INTEGER" },
-				{ "name":"minimum_rating", "type":"INTEGER" }
-			]
-		},
-		//
-		// WEB SEARCH
-		//
-		{
-			// http://developer.yahoo.com/search/web/V1/webSearch.html 
-			"name":"webSearch",
-			"serviceURL": "http://api.search.yahoo.com/WebSearchService/V1/webSearch",
-			"parameters":[
-				{ "name":"query", "type":"STRING" },
-				{ "name":"type", "type":"STRING" }, // defaults to "all"
-				{ "name":"region", "type":"STRING" }, // defaults to "us"
-				{ "name":"results", "type":"INTEGER" }, // defaults to 10
-				{ "name":"start", "type":"INTEGER" }, // defaults to 1
-				{ "name":"format", "type":"STRING" }, // defaults to "any", can be "html", "msword", "pdf", "ppt", "rst", "txt", or "xls"
-				{ "name":"adult_ok", "type":"INTEGER" }, // defaults to null
-				{ "name":"similar_ok", "type":"INTEGER" }, // defaults to null
-				{ "name":"language", "type":"STRING" }, // defaults to null
-				{ "name":"country", "type":"STRING" }, // defaults to null
-				{ "name":"site", "type":"STRING" }, // defaults to null
-				{ "name":"subscription", "type":"STRING" }, // defaults to null
-				{ "name":"license", "type":"STRING" } // defaults to "any"
-			]
-		},
-		{
-			// http://developer.yahoo.com/search/web/V1/spellingSuggestion.html
-			"name":"spellingSuggestion",
-			"serviceURL": "http://api.search.yahoo.com/WebSearchService/V1/spellingSuggestion",
-			"parameters":[ { "name":"query", "type":"STRING" } ]
-		},
-		{
-			// http://developer.yahoo.com/search/web/V1/relatedSuggestion.html
-			"name":"spellingSuggestion",
-			"serviceURL": "http://api.search.yahoo.com/WebSearchService/V1/relatedSuggestion",
-			"parameters":[
-				{ "name":"query", "type":"STRING" },
-				{ "name":"results", "type":"INTEGER" } // 1-50, defaults to 10
-			]
-		},
-		{
-			// http://developer.yahoo.com/search/content/V1/termExtraction.html
-			"name":"termExtraction",
-			"serviceURL": "http://search.yahooapis.com/ContentAnalysisService/V1/termExtraction",
-			"parameters":[
-				{ "name":"query", "type":"STRING" },
-				{ "name":"context", "type":"STRING" },
-				{ "name":"results", "type":"INTEGER" } // 1-50, defaults to 10
-			]
-		},
-		{
-			// http://developer.yahoo.com/search/web/V1/contextSearch.html
-			"name":"contextSearch",
-			"serviceURL": "http://search.yahooapis.com/WebSearchService/V1/contextSearch",
-			"parameters":[
-				{ "name":"query", "type":"STRING" },
-				{ "name":"context", "type":"STRING" },
-				{ "name":"type", "type":"STRING" }, // defaults to "all"
-				{ "name":"results", "type":"INTEGER" }, // defaults to 10
-				{ "name":"start", "type":"INTEGER" }, // defaults to 1
-				{ "name":"format", "type":"STRING" }, // defaults to "any", can be "html", "msword", "pdf", "ppt", "rst", "txt", or "xls"
-				{ "name":"adult_ok", "type":"INTEGER" }, // defaults to null
-				{ "name":"similar_ok", "type":"INTEGER" }, // defaults to null
-				{ "name":"language", "type":"STRING" }, // defaults to null
-				{ "name":"country", "type":"STRING" }, // defaults to null
-				{ "name":"site", "type":"STRING" }, // defaults to null
-				{ "name":"license", "type":"STRING" } // defaults to "any", could be "cc_any", "cc_commercial", "cc_modifiable"
-			]
-		},
-		//
-		// IMAGE SEARCH
-		//
-		{
-			// http://developer.yahoo.com/search/image/V1/imageSearch.html
-			"name":"imageSearch",
-			"serviceURL": "http://api.search.yahoo.com/ImageSearchService/V1/imageSearch",
-			"parameters":[
-				{ "name":"query", "type":"STRING" },
-				{ "name":"type", "type":"STRING" }, // defaults to "all", can by "any" or "phrase"
-				{ "name":"results", "type":"INTEGER" }, // defaults to 10
-				{ "name":"start", "type":"INTEGER" }, // defaults to 1
-				{ "name":"format", "type":"STRING" }, // defaults to "any", can be "bmp", "gif", "jpeg", or "png"
-				{ "name":"adult_ok", "type":"INTEGER" }, // defaults to null
-				{ "name":"coloration", "type":"STRING" }, // "any", "color", or "bw"
-				{ "name":"site", "type":"STRING" } // defaults to null
-			]
-		},
-		//
-		// SITE EXPLORER
-		//
-		{
-			// http://developer.yahoo.com/search/siteexplorer/V1/inlinkData.html 
-			"name":"inlinkData",
-			"serviceURL": "http://api.search.yahoo.com/SiteExplorerService/V1/inlinkData",
-			"parameters":[
-				{ "name":"query", "type":"STRING" },
-				{ "name":"type", "type":"STRING" }, // defaults to "all", can by "any" or "phrase"
-				{ "name":"entire_site", "type":"INTEGER" }, // defaults to null
-				{ "name":"omit_inlinks", "type":"STRING" }, // "domain" or "subdomain", defaults to null
-				{ "name":"results", "type":"INTEGER" }, // defaults to 50
-				{ "name":"start", "type":"INTEGER" }, // defaults to 1
-				{ "name":"site", "type":"STRING" } // defaults to null
-			]
-		},
-		{
-			// http://developer.yahoo.com/search/siteexplorer/V1/pageData.html
-			"name":"pageData",
-			"serviceURL": "http://api.search.yahoo.com/SiteExplorerService/V1/pageData",
-			"parameters":[
-				{ "name":"query", "type":"STRING" },
-				{ "name":"type", "type":"STRING" }, // defaults to "all", can by "any" or "phrase"
-				{ "name":"domain_only", "type":"INTEGER" }, // defaults to null
-				{ "name":"results", "type":"INTEGER" }, // defaults to 50
-				{ "name":"start", "type":"INTEGER" }, // defaults to 1
-				{ "name":"site", "type":"STRING" } // defaults to null
-			]
-		},
-		//
-		// MUSIC SEARCH
-		//
-		{
-			// http://developer.yahoo.com/search/audio/V1/artistSearch.html
-			"name":"artistSearch",
-			"serviceURL": "http://api.search.yahoo.com/AudioSearchService/V1/artistSearch",
-			"parameters":[
-				{ "name":"artist", "type":"STRING" },
-				{ "name":"artistid", "type":"STRING" },
-				{ "name":"type", "type":"STRING" }, // "all", "any", or "phrase"
-				{ "name":"results", "type":"INTEGER" }, // 1-50, defaults to 10
-				{ "name":"start", "type":"INTEGER" } // defaults to 1
-			]
-		},
-		{
-			// http://developer.yahoo.com/search/audio/V1/albumSearch.html
-			"name":"albumSearch",
-			"serviceURL": "http://api.search.yahoo.com/AudioSearchService/V1/albumSearch",
-			"parameters":[
-				{ "name":"artist", "type":"STRING" },
-				{ "name":"artistid", "type":"STRING" },
-				{ "name":"album", "type":"STRING" },
-				{ "name":"type", "type":"STRING" }, // "all", "any", or "phrase"
-				{ "name":"results", "type":"INTEGER" }, // 1-50, defaults to 10
-				{ "name":"start", "type":"INTEGER" } // defaults to 1
-			]
-		},
-		{
-			// http://developer.yahoo.com/search/audio/V1/songSearch.html
-			"name":"songSearch",
-			"serviceURL": "http://api.search.yahoo.com/AudioSearchService/V1/songSearch",
-			"parameters":[
-				{ "name":"artist", "type":"STRING" },
-				{ "name":"artistid", "type":"STRING" },
-				{ "name":"album", "type":"STRING" },
-				{ "name":"albumid", "type":"STRING" },
-				{ "name":"song", "type":"STRING" },
-				{ "name":"songid", "type":"STRING" },
-				{ "name":"type", "type":"STRING" }, // "all", "any", or "phrase"
-				{ "name":"results", "type":"INTEGER" }, // 1-50, defaults to 10
-				{ "name":"start", "type":"INTEGER" } // defaults to 1
-			]
-		},
-		{
-			// http://developer.yahoo.com/search/audio/V1/songDownloadLocation.html
-			"name":"songDownloadLocation",
-			"serviceURL": "http://api.search.yahoo.com/AudioSearchService/V1/songDownloadLocation",
-			"parameters":[
-				{ "name":"songid", "type":"STRING" },
-				// "source" can contain:
-				//	audiolunchbox artistdirect buymusic dmusic
-				//	emusic epitonic garageband itunes yahoo
-				//	livedownloads mp34u msn musicmatch mapster passalong
-				//	rhapsody soundclick theweb
-				{ "name":"source", "type":"STRING" },
-				{ "name":"results", "type":"INTEGER" }, // 1-50, defaults to 10
-				{ "name":"start", "type":"INTEGER" } // defaults to 1
-			]
-		},
-		//
-		// NEWS SEARCH
-		//
-		{
-			// http://developer.yahoo.com/search/news/V1/newsSearch.html
-			"name":"newsSearch",
-			"serviceURL": "http://api.search.yahoo.com/NewsSearchService/V1/newsSearch",
-			"parameters":[
-				{ "name":"query", "type":"STRING" },
-				{ "name":"type", "type":"STRING" }, // defaults to "all"
-				{ "name":"results", "type":"INTEGER" }, // defaults to 10
-				{ "name":"start", "type":"INTEGER" }, // defaults to 1
-				{ "name":"sort", "type":"STRING" }, // "rank" or "date"
-				{ "name":"language", "type":"STRING" }, // defaults to null
-				{ "name":"site", "type":"STRING" } // defaults to null
-			]
-		}
-		/*
-		{
-			// 
-			"name":"",
-			"serviceURL": "",
-			"parameters":[
-				{ "name":"street", "type":"STRING" },
-			]
-		}
-		*/
-	]
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/selection/Selection.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/selection/Selection.js
deleted file mode 100644
index 8827384..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/selection/Selection.js
+++ /dev/null
@@ -1,303 +0,0 @@
-dojo.provide("dojo.selection.Selection");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.math");
-dojo.declare("dojo.selection.Selection",null,{initializer:function(_1,_2){
-this.items=[];
-this.selection=[];
-this._pivotItems=[];
-this.clearItems();
-if(_1){
-if(_2){
-this.setItemsCollection(_1);
-}else{
-this.setItems(_1);
-}
-}
-},items:null,selection:null,lastSelected:null,allowImplicit:true,length:0,isGrowable:true,_pivotItems:null,_pivotItem:null,onSelect:function(_3){
-},onDeselect:function(_4){
-},onSelectChange:function(_5,_6){
-},_find:function(_7,_8){
-if(_8){
-return dojo.lang.find(this.selection,_7);
-}else{
-return dojo.lang.find(this.items,_7);
-}
-},isSelectable:function(_9){
-return true;
-},setItems:function(){
-this.clearItems();
-this.addItems.call(this,arguments);
-},setItemsCollection:function(_a){
-this.items=_a;
-},addItems:function(){
-var _b=dojo.lang.unnest(arguments);
-for(var i=0;i<_b.length;i++){
-this.items.push(_b[i]);
-}
-},addItemsAt:function(_d,_e){
-if(this.items.length==0){
-return this.addItems(dojo.lang.toArray(arguments,2));
-}
-if(!this.isItem(_d)){
-_d=this.items[_d];
-}
-if(!_d){
-throw new Error("addItemsAt: item doesn't exist");
-}
-var _f=this._find(_d);
-if(_f>0&&_e){
-_f--;
-}
-for(var i=2;i<arguments.length;i++){
-if(!this.isItem(arguments[i])){
-this.items.splice(_f++,0,arguments[i]);
-}
-}
-},removeItem:function(_11){
-var idx=this._find(_11);
-if(idx>-1){
-this.items.splice(idx,1);
-}
-idx=this._find(_11,true);
-if(idx>-1){
-this.selection.splice(idx,1);
-}
-},clearItems:function(){
-this.items=[];
-this.deselectAll();
-},isItem:function(_13){
-return this._find(_13)>-1;
-},isSelected:function(_14){
-return this._find(_14,true)>-1;
-},selectFilter:function(_15,_16,add,_18){
-return true;
-},update:function(_19,add,_1b,_1c){
-if(!this.isItem(_19)){
-return false;
-}
-if(this.isGrowable&&_1b){
-if((!this.isSelected(_19))&&this.selectFilter(_19,this.selection,false,true)){
-this.grow(_19);
-this.lastSelected=_19;
-}
-}else{
-if(add){
-if(this.selectFilter(_19,this.selection,true,false)){
-if(_1c){
-if(this.select(_19)){
-this.lastSelected=_19;
-}
-}else{
-if(this.toggleSelected(_19)){
-this.lastSelected=_19;
-}
-}
-}
-}else{
-this.deselectAll();
-this.select(_19);
-}
-}
-this.length=this.selection.length;
-return true;
-},grow:function(_1d,_1e){
-if(!this.isGrowable){
-return;
-}
-if(arguments.length==1){
-_1e=this._pivotItem;
-if(!_1e&&this.allowImplicit){
-_1e=this.items[0];
-}
-}
-if(!_1d||!_1e){
-return false;
-}
-var _1f=this._find(_1e);
-var _20={};
-var _21=-1;
-if(this.lastSelected){
-_21=this._find(this.lastSelected);
-var _22=_1f<_21?-1:1;
-var _23=dojo.math.range(_21,_1f,_22);
-for(var i=0;i<_23.length;i++){
-_20[_23[i]]=true;
-}
-}
-var _25=this._find(_1d);
-var _22=_1f<_25?-1:1;
-var _26=_21>=0&&_22==1?_21<_25:_21>_25;
-var _23=dojo.math.range(_25,_1f,_22);
-if(_23.length){
-for(var i=_23.length-1;i>=0;i--){
-var _27=this.items[_23[i]];
-if(this.selectFilter(_27,this.selection,false,true)){
-if(this.select(_27,true)||_26){
-this.lastSelected=_27;
-}
-if(_23[i] in _20){
-delete _20[_23[i]];
-}
-}
-}
-}else{
-this.lastSelected=_1e;
-}
-for(var i in _20){
-if(this.items[i]==this.lastSelected){
-}
-this.deselect(this.items[i]);
-}
-this._updatePivot();
-},growUp:function(){
-if(!this.isGrowable){
-return;
-}
-var idx=this._find(this.lastSelected)-1;
-while(idx>=0){
-if(this.selectFilter(this.items[idx],this.selection,false,true)){
-this.grow(this.items[idx]);
-break;
-}
-idx--;
-}
-},growDown:function(){
-if(!this.isGrowable){
-return;
-}
-var idx=this._find(this.lastSelected);
-if(idx<0&&this.allowImplicit){
-this.select(this.items[0]);
-idx=0;
-}
-idx++;
-while(idx>0&&idx<this.items.length){
-if(this.selectFilter(this.items[idx],this.selection,false,true)){
-this.grow(this.items[idx]);
-break;
-}
-idx++;
-}
-},toggleSelected:function(_2a,_2b){
-if(this.isItem(_2a)){
-if(this.select(_2a,_2b)){
-return 1;
-}
-if(this.deselect(_2a)){
-return -1;
-}
-}
-return 0;
-},select:function(_2c,_2d){
-if(this.isItem(_2c)&&!this.isSelected(_2c)&&this.isSelectable(_2c)){
-this.selection.push(_2c);
-this.lastSelected=_2c;
-this.onSelect(_2c);
-this.onSelectChange(_2c,true);
-if(!_2d){
-this._addPivot(_2c);
-}
-this.length=this.selection.length;
-return true;
-}
-return false;
-},deselect:function(_2e){
-var idx=this._find(_2e,true);
-if(idx>-1){
-this.selection.splice(idx,1);
-this.onDeselect(_2e);
-this.onSelectChange(_2e,false);
-if(_2e==this.lastSelected){
-this.lastSelected=null;
-}
-this._removePivot(_2e);
-this.length=this.selection.length;
-return true;
-}
-return false;
-},selectAll:function(){
-for(var i=0;i<this.items.length;i++){
-this.select(this.items[i]);
-}
-},deselectAll:function(){
-while(this.selection&&this.selection.length){
-this.deselect(this.selection[0]);
-}
-},selectNext:function(){
-var idx=this._find(this.lastSelected);
-while(idx>-1&&++idx<this.items.length){
-if(this.isSelectable(this.items[idx])){
-this.deselectAll();
-this.select(this.items[idx]);
-return true;
-}
-}
-return false;
-},selectPrevious:function(){
-var idx=this._find(this.lastSelected);
-while(idx-->0){
-if(this.isSelectable(this.items[idx])){
-this.deselectAll();
-this.select(this.items[idx]);
-return true;
-}
-}
-return false;
-},selectFirst:function(){
-this.deselectAll();
-var idx=0;
-while(this.items[idx]&&!this.select(this.items[idx])){
-idx++;
-}
-return this.items[idx]?true:false;
-},selectLast:function(){
-this.deselectAll();
-var idx=this.items.length-1;
-while(this.items[idx]&&!this.select(this.items[idx])){
-idx--;
-}
-return this.items[idx]?true:false;
-},_addPivot:function(_35,_36){
-this._pivotItem=_35;
-if(_36){
-this._pivotItems=[_35];
-}else{
-this._pivotItems.push(_35);
-}
-},_removePivot:function(_37){
-var i=dojo.lang.find(this._pivotItems,_37);
-if(i>-1){
-this._pivotItems.splice(i,1);
-this._pivotItem=this._pivotItems[this._pivotItems.length-1];
-}
-this._updatePivot();
-},_updatePivot:function(){
-if(this._pivotItems.length==0){
-if(this.lastSelected){
-this._addPivot(this.lastSelected);
-}
-}
-},sorted:function(){
-return dojo.lang.toArray(this.selection).sort(dojo.lang.hitch(this,function(a,b){
-var A=this._find(a),B=this._find(b);
-if(A>B){
-return 1;
-}else{
-if(A<B){
-return -1;
-}else{
-return 0;
-}
-}
-}));
-},updateSelected:function(){
-for(var i=0;i<this.selection.length;i++){
-if(this._find(this.selection[i])<0){
-var _3e=this.selection.splice(i,1);
-this._removePivot(_3e[0]);
-}
-}
-this.length=this.selection.length;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage.js
deleted file mode 100644
index 4c37655..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage.js
+++ /dev/null
@@ -1,114 +0,0 @@
-dojo.provide("dojo.storage");
-dojo.require("dojo.lang.*");
-dojo.require("dojo.event.*");
-dojo.storage=new function(){
-};
-dojo.declare("dojo.storage",null,{SUCCESS:"success",FAILED:"failed",PENDING:"pending",SIZE_NOT_AVAILABLE:"Size not available",SIZE_NO_LIMIT:"No size limit",namespace:"default",onHideSettingsUI:null,initialize:function(){
-dojo.unimplemented("dojo.storage.initialize");
-},isAvailable:function(){
-dojo.unimplemented("dojo.storage.isAvailable");
-},put:function(_1,_2,_3){
-dojo.unimplemented("dojo.storage.put");
-},get:function(_4){
-dojo.unimplemented("dojo.storage.get");
-},hasKey:function(_5){
-return (this.get(_5)!=null);
-},getKeys:function(){
-dojo.unimplemented("dojo.storage.getKeys");
-},clear:function(){
-dojo.unimplemented("dojo.storage.clear");
-},remove:function(_6){
-dojo.unimplemented("dojo.storage.remove");
-},isPermanent:function(){
-dojo.unimplemented("dojo.storage.isPermanent");
-},getMaximumSize:function(){
-dojo.unimplemented("dojo.storage.getMaximumSize");
-},hasSettingsUI:function(){
-return false;
-},showSettingsUI:function(){
-dojo.unimplemented("dojo.storage.showSettingsUI");
-},hideSettingsUI:function(){
-dojo.unimplemented("dojo.storage.hideSettingsUI");
-},getType:function(){
-dojo.unimplemented("dojo.storage.getType");
-},isValidKey:function(_7){
-if((_7==null)||(typeof _7=="undefined")){
-return false;
-}
-return /^[0-9A-Za-z_]*$/.test(_7);
-}});
-dojo.storage.manager=new function(){
-this.currentProvider=null;
-this.available=false;
-this._initialized=false;
-this._providers=[];
-this.namespace="default";
-this.initialize=function(){
-this.autodetect();
-};
-this.register=function(_8,_9){
-this._providers[this._providers.length]=_9;
-this._providers[_8]=_9;
-};
-this.setProvider=function(_a){
-};
-this.autodetect=function(){
-if(this._initialized==true){
-return;
-}
-var _b=null;
-for(var i=0;i<this._providers.length;i++){
-_b=this._providers[i];
-if(dojo.lang.isUndefined(djConfig["forceStorageProvider"])==false&&_b.getType()==djConfig["forceStorageProvider"]){
-_b.isAvailable();
-break;
-}else{
-if(dojo.lang.isUndefined(djConfig["forceStorageProvider"])==true&&_b.isAvailable()){
-break;
-}
-}
-}
-if(_b==null){
-this._initialized=true;
-this.available=false;
-this.currentProvider=null;
-dojo.raise("No storage provider found for this platform");
-}
-this.currentProvider=_b;
-for(var i in _b){
-dojo.storage[i]=_b[i];
-}
-dojo.storage.manager=this;
-dojo.storage.initialize();
-this._initialized=true;
-this.available=true;
-};
-this.isAvailable=function(){
-return this.available;
-};
-this.isInitialized=function(){
-if(this.currentProvider.getType()=="dojo.storage.browser.FlashStorageProvider"&&dojo.flash.ready==false){
-return false;
-}else{
-return this._initialized;
-}
-};
-this.supportsProvider=function(_d){
-try{
-var _e=eval("new "+_d+"()");
-var _f=_e.isAvailable();
-if(_f==null||typeof _f=="undefined"){
-return false;
-}
-return _f;
-}
-catch(exception){
-return false;
-}
-};
-this.getProvider=function(){
-return this.currentProvider;
-};
-this.loaded=function(){
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/Storage.as b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/Storage.as
deleted file mode 100644
index 831a1aa..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/Storage.as
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-import DojoExternalInterface;
-
-class Storage {
-	public static var SUCCESS = "success";
-	public static var FAILED = "failed";
-	public static var PENDING = "pending";
-	
-	public var so;
-	
-	public function Storage(){
-		//getURL("javascript:dojo.debug('FLASH:Storage constructor')");
-		DojoExternalInterface.initialize();
-		DojoExternalInterface.addCallback("put", this, put);
-		DojoExternalInterface.addCallback("get", this, get);
-		DojoExternalInterface.addCallback("showSettings", this, showSettings);
-		DojoExternalInterface.addCallback("clear", this, clear);
-		DojoExternalInterface.addCallback("getKeys", this, getKeys);
-		DojoExternalInterface.addCallback("remove", this, remove);
-		DojoExternalInterface.loaded();
-		
-		// preload the System Settings finished button movie for offline
-		// access so it is in the cache
-		_root.createEmptyMovieClip("_settingsBackground", 1);
-		// getURL("javascript:alert('"+DojoExternalInterface.dojoPath+"');");
-		_root._settingsBackground.loadMovie(DojoExternalInterface.dojoPath + "storage_dialog.swf");
-	}
-
-	public function put(keyName, keyValue, namespace){
-		// Get the SharedObject for these values and save it
-		so = SharedObject.getLocal(namespace);
-		
-		// prepare a storage status handler
-		var self = this;
-		so.onStatus = function(infoObject:Object){
-			//getURL("javascript:dojo.debug('FLASH: onStatus, infoObject="+infoObject.code+"')");
-			
-			// delete the data value if the request was denied
-			if (infoObject.code == "SharedObject.Flush.Failed"){
-				delete self.so.data[keyName];
-			}
-			
-			var statusResults;
-			if(infoObject.code == "SharedObject.Flush.Failed"){
-				statusResults = Storage.FAILED;
-			}else if(infoObject.code == "SharedObject.Flush.Pending"){
-				statusResults = Storage.PENDING;
-			}else if(infoObject.code == "SharedObject.Flush.Success"){
-				statusResults = Storage.SUCCESS;
-			}
-			//getURL("javascript:dojo.debug('FLASH: onStatus, statusResults="+statusResults+"')");
-			
-			// give the status results to JavaScript
-			DojoExternalInterface.call("dojo.storage._onStatus", null, statusResults, 
-																 keyName);
-		}
-		
-		// save the key and value
-		so.data[keyName] = keyValue;
-		var flushResults = so.flush();
-		
-		// return results of this command to JavaScript
-		var statusResults;
-		if(flushResults == true){
-			statusResults = Storage.SUCCESS;
-		}else if(flushResults == "pending"){
-			statusResults = Storage.PENDING;
-		}else{
-			statusResults = Storage.FAILED;
-		}
-		
-		DojoExternalInterface.call("dojo.storage._onStatus", null, statusResults, 
-															 keyName);
-	}
-
-	public function get(keyName, namespace){
-		// Get the SharedObject for these values and save it
-		so = SharedObject.getLocal(namespace);
-		var results = so.data[keyName];
-		
-		return results;
-	}
-	
-	public function showSettings(){
-		// Show the configuration options for the Flash player, opened to the
-		// section for local storage controls (pane 1)
-		System.showSettings(1);
-		
-		// there is no way we can intercept when the Close button is pressed, allowing us
-		// to hide the Flash dialog. Instead, we need to load a movie in the
-		// background that we can show a close button on.
-		_root.createEmptyMovieClip("_settingsBackground", 1);
-		_root._settingsBackground.loadMovie(DojoExternalInterface.dojoPath + "storage_dialog.swf");
-	}
-	
-	public function clear(namespace){
-		so = SharedObject.getLocal(namespace);
-		so.clear();
-		so.flush();
-	}
-	
-	public function getKeys(namespace){
-		// Returns a list of the available keys in this namespace
-		
-		// get the storage object
-		so = SharedObject.getLocal(namespace);
-		
-		// get all of the keys
-		var results = new Array();
-		for(var i in so.data)
-			results.push(i);	
-		
-		// join the keys together in a comma seperated string
-		results = results.join(",");
-		
-		return results;
-	}
-	
-	public function remove(keyName, namespace){
-		// Removes a key
-
-		// get the storage object
-		so = SharedObject.getLocal(namespace);
-		
-		// delete this value
-		delete so.data[keyName];
-		
-		// save the changes
-		so.flush();
-	}
-
-	static function main(mc){
-		//getURL("javascript:dojo.debug('FLASH: storage loaded')");
-		_root.app = new Storage(); 
-	}
-}
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/__package__.js
deleted file mode 100644
index b4cb292..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.storage"],browser:["dojo.storage.browser"]});
-dojo.provide("dojo.storage.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/browser.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/browser.js
deleted file mode 100644
index 8835e4f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/browser.js
+++ /dev/null
@@ -1,537 +0,0 @@
-dojo.provide("dojo.storage.browser");
-dojo.require("dojo.storage");
-dojo.require("dojo.flash");
-dojo.require("dojo.json");
-dojo.require("dojo.uri.*");
-dojo.storage.browser.FileStorageProvider=function(){
-};
-dojo.inherits(dojo.storage.browser.FileStorageProvider,dojo.storage);
-dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME="__dojoAllKeys";
-dojo.storage.browser.FileStorageProvider._APPLET_ID="__dojoFileJavaObj";
-dojo.lang.extend(dojo.storage.browser.FileStorageProvider,{namespace:"default",initialized:false,_available:null,_statusHandler:null,_keyIndex:new Array(),initialize:function(){
-if(djConfig["disableFileStorage"]==true){
-return;
-}
-this._loadKeyIndex();
-this.initialized=true;
-dojo.storage.manager.loaded();
-},isAvailable:function(){
-this._available=false;
-var _1=window.location.protocol;
-if(_1.indexOf("file")!=-1||_1.indexOf("chrome")!=-1){
-this._available=this._isAvailableXPCOM();
-if(this._available==false){
-this._available=this._isAvailableActiveX();
-}
-}
-return this._available;
-},put:function(_2,_3,_4){
-if(this.isValidKey(_2)==false){
-dojo.raise("Invalid key given: "+_2);
-}
-this._statusHandler=_4;
-try{
-this._save(_2,_3);
-_4.call(null,dojo.storage.SUCCESS,_2);
-}
-catch(e){
-this._statusHandler.call(null,dojo.storage.FAILED,_2,e.toString());
-}
-},get:function(_5){
-if(this.isValidKey(_5)==false){
-dojo.raise("Invalid key given: "+_5);
-}
-var _6=this._load(_5);
-return _6;
-},getKeys:function(){
-return this._keyIndex;
-},hasKey:function(_7){
-if(this.isValidKey(_7)==false){
-dojo.raise("Invalid key given: "+_7);
-}
-this._loadKeyIndex();
-var _8=false;
-for(var i=0;i<this._keyIndex.length;i++){
-if(this._keyIndex[i]==_7){
-_8=true;
-}
-}
-return _8;
-},clear:function(){
-this._loadKeyIndex();
-var _a=new Array();
-for(var i=0;i<this._keyIndex.length;i++){
-_a[_a.length]=new String(this._keyIndex[i]);
-}
-for(var i=0;i<_a.length;i++){
-this.remove(_a[i]);
-}
-},remove:function(_c){
-if(this.isValidKey(_c)==false){
-dojo.raise("Invalid key given: "+_c);
-}
-this._loadKeyIndex();
-for(var i=0;i<this._keyIndex.length;i++){
-if(this._keyIndex[i]==_c){
-this._keyIndex.splice(i,1);
-break;
-}
-}
-this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME,this._keyIndex,false);
-var _e=this._getPagePath()+_c+".txt";
-if(this._isAvailableXPCOM()){
-this._removeXPCOM(_e);
-}else{
-if(this._isAvailableActiveX()){
-this._removeActiveX(_e);
-}
-}
-},isPermanent:function(){
-return true;
-},getMaximumSize:function(){
-return dojo.storage.SIZE_NO_LIMIT;
-},hasSettingsUI:function(){
-return false;
-},showSettingsUI:function(){
-dojo.raise(this.getType()+" does not support a storage settings user-interface");
-},hideSettingsUI:function(){
-dojo.raise(this.getType()+" does not support a storage settings user-interface");
-},getType:function(){
-return "dojo.storage.browser.FileStorageProvider";
-},_save:function(_f,_10,_11){
-if(typeof _11=="undefined"){
-_11=true;
-}
-if(dojo.lang.isString(_10)==false){
-_10=dojo.json.serialize(_10);
-_10="/* JavaScript */\n"+_10+"\n\n";
-}
-var _12=this._getPagePath()+_f+".txt";
-if(this._isAvailableXPCOM()){
-this._saveFileXPCOM(_12,_10);
-}else{
-if(this._isAvailableActiveX()){
-this._saveFileActiveX(_12,_10);
-}
-}
-if(_11){
-this._updateKeyIndex(_f);
-}
-},_load:function(key){
-var _14=this._getPagePath()+key+".txt";
-var _15=null;
-if(this._isAvailableXPCOM()){
-_15=this._loadFileXPCOM(_14);
-}else{
-if(this._isAvailableActiveX()){
-_15=this._loadFileActiveX(_14);
-}else{
-if(this._isAvailableJava()){
-_15=this._loadFileJava(_14);
-}
-}
-}
-if(_15==null){
-return null;
-}
-if(!dojo.lang.isUndefined(_15)&&_15!=null&&/^\/\* JavaScript \*\//.test(_15)){
-_15=dojo.json.evalJson(_15);
-}
-return _15;
-},_updateKeyIndex:function(key){
-this._loadKeyIndex();
-var _17=false;
-for(var i=0;i<this._keyIndex.length;i++){
-if(this._keyIndex[i]==key){
-_17=true;
-break;
-}
-}
-if(_17==false){
-this._keyIndex[this._keyIndex.length]=key;
-}
-this._save(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME,this._keyIndex,false);
-},_loadKeyIndex:function(){
-var _19=this._load(dojo.storage.browser.FileStorageProvider._KEY_INDEX_FILENAME);
-if(_19==null){
-this._keyIndex=new Array();
-}else{
-this._keyIndex=_19;
-}
-},_saveFileXPCOM:function(_1a,_1b){
-try{
-netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
-f.initWithPath(_1a);
-var _1d=Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
-_1d.init(f,32|4|8,256+128,null);
-_1d.write(_1b,_1b.length);
-_1d.close();
-}
-catch(e){
-var msg=e.toString();
-if(e.name&&e.message){
-msg=e.name+": "+e.message;
-}
-dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileXPCOM(): "+msg);
-}
-},_loadFileXPCOM:function(_1f){
-try{
-netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
-f.initWithPath(_1f);
-if(f.exists()==false){
-return null;
-}
-var inp=Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
-inp.init(f,1,4,null);
-var _22=Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
-_22.init(inp);
-var _23=_22.read(_22.available());
-return _23;
-}
-catch(e){
-var msg=e.toString();
-if(e.name&&e.message){
-msg=e.name+": "+e.message;
-}
-dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileXPCOM(): "+msg);
-}
-return null;
-},_saveFileActiveX:function(_25,_26){
-try{
-var _27=new ActiveXObject("Scripting.FileSystemObject");
-var f=_27.OpenTextFile(_25,2,true);
-f.Write(_26);
-f.Close();
-}
-catch(e){
-var msg=e.toString();
-if(e.name&&e.message){
-msg=e.name+": "+e.message;
-}
-dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileActiveX(): "+msg);
-}
-},_loadFileActiveX:function(_2a){
-try{
-var _2b=new ActiveXObject("Scripting.FileSystemObject");
-if(_2b.FileExists(_2a)==false){
-return null;
-}
-var f=_2b.OpenTextFile(_2a,1);
-var _2d=f.ReadAll();
-f.Close();
-return _2d;
-}
-catch(e){
-var msg=e.toString();
-if(e.name&&e.message){
-msg=e.name+": "+e.message;
-}
-dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileActiveX(): "+msg);
-}
-},_saveFileJava:function(_2f,_30){
-try{
-var _31=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);
-_31.save(_2f,_30);
-}
-catch(e){
-var msg=e.toString();
-if(e.name&&e.message){
-msg=e.name+": "+e.message;
-}
-dojo.raise("dojo.storage.browser.FileStorageProvider._saveFileJava(): "+msg);
-}
-},_loadFileJava:function(_33){
-try{
-var _34=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);
-var _35=_34.load(_33);
-return _35;
-}
-catch(e){
-var msg=e.toString();
-if(e.name&&e.message){
-msg=e.name+": "+e.message;
-}
-dojo.raise("dojo.storage.browser.FileStorageProvider._loadFileJava(): "+msg);
-}
-},_isAvailableActiveX:function(){
-try{
-if(window.ActiveXObject){
-var _37=new window.ActiveXObject("Scripting.FileSystemObject");
-return true;
-}
-}
-catch(e){
-dojo.debug(e);
-}
-return false;
-},_isAvailableXPCOM:function(){
-try{
-if(window.Components){
-netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
-return true;
-}
-}
-catch(e){
-dojo.debug(e);
-}
-return false;
-},_isAvailableJava:function(){
-try{
-if(dojo.render.html.safari==true||dojo.render.html.opera==true()){
-if(navigator.javaEnabled()==true){
-return true;
-}
-}
-}
-catch(e){
-dojo.debug(e);
-}
-return false;
-},_getPagePath:function(){
-var _38=window.location.pathname;
-if(/\.html?$/i.test(_38)){
-_38=_38.replace(/(?:\/|\\)?[^\.\/\\]*\.html?$/,"");
-}
-if(/^\/?[a-z]+\:/i.test(_38)){
-_38=_38.replace(/^\/?/,"");
-_38=_38.replace(/\//g,"\\");
-}else{
-if(/^[\/\\]{2,3}[^\/]/.test(_38)){
-_38=_38.replace(/^[\/\\]{2,3}/,"");
-_38=_38.replace(/\//g,"\\");
-_38="\\\\"+_38;
-}
-}
-if(/\/$/.test(_38)==false&&/\\$/.test(_38)==false){
-if(/\//.test(_38)){
-_38+="/";
-}else{
-_38+="\\";
-}
-}
-_38=unescape(_38);
-return _38;
-},_removeXPCOM:function(_39){
-try{
-netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-var f=Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
-f.initWithPath(_39);
-if(f.exists()==false||f.isDirectory()){
-return;
-}
-if(f.isFile()){
-f.remove(false);
-}
-}
-catch(e){
-dojo.raise("dojo.storage.browser.FileStorageProvider.remove(): "+e.toString());
-}
-},_removeActiveX:function(_3b){
-try{
-var _3c=new ActiveXObject("Scripting.FileSystemObject");
-_3c.DeleteFile(_3b);
-}
-catch(e){
-dojo.raise("dojo.storage.browser.FileStorageProvider.remove(): "+e.toString());
-}
-},_removeJava:function(_3d){
-try{
-var _3e=dojo.byId(dojo.storage.browser.FileStorageProvider._APPLET_ID);
-_3e.remove(_3d);
-}
-catch(e){
-var msg=e.toString();
-if(e.name&&e.message){
-msg=e.name+": "+e.message;
-}
-dojo.raise("dojo.storage.browser.FileStorageProvider._removeJava(): "+msg);
-}
-},_writeApplet:function(){
-var _40=dojo.uri.moduleUri("dojo","../DojoFileStorageProvider.jar").toString();
-var tag="<applet "+"id='"+dojo.storage.browser.FileStorageProvider._APPLET_ID+"' "+"style='position: absolute; top: -500px; left: -500px; width: 1px; height: 1px;' "+"code='DojoFileStorageProvider.class' "+"archive='"+_40+"' "+"width='1' "+"height='1' "+">"+"</applet>";
-document.writeln(tag);
-}});
-dojo.storage.browser.WhatWGStorageProvider=function(){
-};
-dojo.inherits(dojo.storage.browser.WhatWGStorageProvider,dojo.storage);
-dojo.lang.extend(dojo.storage.browser.WhatWGStorageProvider,{namespace:"default",initialized:false,_domain:null,_available:null,_statusHandler:null,initialize:function(){
-if(djConfig["disableWhatWGStorage"]==true){
-return;
-}
-this._domain=location.hostname;
-this.initialized=true;
-dojo.storage.manager.loaded();
-},isAvailable:function(){
-try{
-var _42=globalStorage[location.hostname];
-}
-catch(e){
-this._available=false;
-return this._available;
-}
-this._available=true;
-return this._available;
-},put:function(key,_44,_45){
-if(this.isValidKey(key)==false){
-dojo.raise("Invalid key given: "+key);
-}
-this._statusHandler=_45;
-if(dojo.lang.isString(_44)){
-_44="string:"+_44;
-}else{
-_44=dojo.json.serialize(_44);
-}
-window.addEventListener("storage",function(evt){
-_45.call(null,dojo.storage.SUCCESS,key);
-},false);
-try{
-var _47=globalStorage[this._domain];
-_47.setItem(key,_44);
-}
-catch(e){
-this._statusHandler.call(null,dojo.storage.FAILED,key,e.toString());
-}
-},get:function(key){
-if(this.isValidKey(key)==false){
-dojo.raise("Invalid key given: "+key);
-}
-var _49=globalStorage[this._domain];
-var _4a=_49.getItem(key);
-if(_4a==null){
-return null;
-}
-_4a=_4a.value;
-if(!dojo.lang.isUndefined(_4a)&&_4a!=null&&/^string:/.test(_4a)){
-_4a=_4a.substring("string:".length);
-}else{
-_4a=dojo.json.evalJson(_4a);
-}
-return _4a;
-},getKeys:function(){
-var _4b=globalStorage[this._domain];
-var _4c=new Array();
-for(i=0;i<_4b.length;i++){
-_4c[i]=_4b.key(i);
-}
-return _4c;
-},clear:function(){
-var _4d=globalStorage[this._domain];
-var _4e=new Array();
-for(var i=0;i<_4d.length;i++){
-_4e[_4e.length]=_4d.key(i);
-}
-for(var i=0;i<_4e.length;i++){
-_4d.removeItem(_4e[i]);
-}
-},remove:function(key){
-var _51=globalStorage[this._domain];
-_51.removeItem(key);
-},isPermanent:function(){
-return true;
-},getMaximumSize:function(){
-return dojo.storage.SIZE_NO_LIMIT;
-},hasSettingsUI:function(){
-return false;
-},showSettingsUI:function(){
-dojo.raise(this.getType()+" does not support a storage settings user-interface");
-},hideSettingsUI:function(){
-dojo.raise(this.getType()+" does not support a storage settings user-interface");
-},getType:function(){
-return "dojo.storage.browser.WhatWGProvider";
-}});
-dojo.storage.browser.FlashStorageProvider=function(){
-};
-dojo.inherits(dojo.storage.browser.FlashStorageProvider,dojo.storage);
-dojo.lang.extend(dojo.storage.browser.FlashStorageProvider,{namespace:"default",initialized:false,_available:null,_statusHandler:null,initialize:function(){
-if(djConfig["disableFlashStorage"]==true){
-return;
-}
-var _52=function(){
-dojo.storage._flashLoaded();
-};
-dojo.flash.addLoadedListener(_52);
-var _53=dojo.uri.moduleUri("dojo","../Storage_version6.swf").toString();
-var _54=dojo.uri.moduleUri("dojo","../Storage_version8.swf").toString();
-dojo.flash.setSwf({flash6:_53,flash8:_54,visible:false});
-},isAvailable:function(){
-if(djConfig["disableFlashStorage"]==true){
-this._available=false;
-}else{
-this._available=true;
-}
-return this._available;
-},put:function(key,_56,_57){
-if(this.isValidKey(key)==false){
-dojo.raise("Invalid key given: "+key);
-}
-this._statusHandler=_57;
-if(dojo.lang.isString(_56)){
-_56="string:"+_56;
-}else{
-_56=dojo.json.serialize(_56);
-}
-dojo.flash.comm.put(key,_56,this.namespace);
-},get:function(key){
-if(this.isValidKey(key)==false){
-dojo.raise("Invalid key given: "+key);
-}
-var _59=dojo.flash.comm.get(key,this.namespace);
-if(_59==""){
-return null;
-}
-if(!dojo.lang.isUndefined(_59)&&_59!=null&&/^string:/.test(_59)){
-_59=_59.substring("string:".length);
-}else{
-_59=dojo.json.evalJson(_59);
-}
-return _59;
-},getKeys:function(){
-var _5a=dojo.flash.comm.getKeys(this.namespace);
-if(_5a==""){
-return [];
-}
-return _5a.split(",");
-},clear:function(){
-dojo.flash.comm.clear(this.namespace);
-},remove:function(key){
-dojo.unimplemented("dojo.storage.browser.FlashStorageProvider.remove");
-},isPermanent:function(){
-return true;
-},getMaximumSize:function(){
-return dojo.storage.SIZE_NO_LIMIT;
-},hasSettingsUI:function(){
-return true;
-},showSettingsUI:function(){
-dojo.flash.comm.showSettings();
-dojo.flash.obj.setVisible(true);
-dojo.flash.obj.center();
-},hideSettingsUI:function(){
-dojo.flash.obj.setVisible(false);
-if(dojo.storage.onHideSettingsUI!=null&&!dojo.lang.isUndefined(dojo.storage.onHideSettingsUI)){
-dojo.storage.onHideSettingsUI.call(null);
-}
-},getType:function(){
-return "dojo.storage.browser.FlashStorageProvider";
-},_flashLoaded:function(){
-this._initialized=true;
-dojo.storage.manager.loaded();
-},_onStatus:function(_5c,key){
-var ds=dojo.storage;
-var dfo=dojo.flash.obj;
-if(_5c==ds.PENDING){
-dfo.center();
-dfo.setVisible(true);
-}else{
-dfo.setVisible(false);
-}
-if((!dj_undef("_statusHandler",ds))&&(ds._statusHandler!=null)){
-ds._statusHandler.call(null,_5c,key);
-}
-}});
-dojo.storage.manager.register("dojo.storage.browser.FileStorageProvider",new dojo.storage.browser.FileStorageProvider());
-dojo.storage.manager.register("dojo.storage.browser.WhatWGStorageProvider",new dojo.storage.browser.WhatWGStorageProvider());
-dojo.storage.manager.register("dojo.storage.browser.FlashStorageProvider",new dojo.storage.browser.FlashStorageProvider());
-dojo.storage.manager.initialize();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/java/DojoFileStorageProvider.class b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/java/DojoFileStorageProvider.class
deleted file mode 100644
index f138f3a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/java/DojoFileStorageProvider.class
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/java/DojoFileStorageProvider.java b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/java/DojoFileStorageProvider.java
deleted file mode 100644
index c66eff7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/java/DojoFileStorageProvider.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
-	This is a simple class that can load, save, and remove 
-	files from the native file system. It is needed by Safari and Opera
-	for the dojo.storage.browser.FileStorageProvider, since both of
-	these platforms have no native way to talk to the file system
-	for file:// URLs. Safari supports LiveConnect, but only for talking
-	to an applet, not for generic scripting by JavaScript, so we must
-	have an applet.
-
-	@author Brad Neuberg, bkn3@columbia.edu
-*/
-
-import java.io.*;
-import java.util.*;
-
-public class DojoFileStorageProvider{
-	public String load(String filePath) 
-			throws IOException, FileNotFoundException{
-		StringBuffer results = new StringBuffer();
-		BufferedReader reader = new BufferedReader(
-					new FileReader(filePath));	
-		String line = null;
-		while((line = reader.readLine()) != null){
-			results.append(line);
-		}
-
-		reader.close();
-
-		return results.toString();
-	}
-
-	public void save(String filePath, String content) 
-			throws IOException, FileNotFoundException{
-		PrintWriter writer = new PrintWriter(
-					new BufferedWriter(
-						new FileWriter(filePath, false)));
-		writer.print(content);
-
-		writer.close();
-	}
-
-	public void remove(String filePath)
-			throws IOException, FileNotFoundException{
-		File f = new File(filePath);
-
-		if(f.exists() == false || f.isDirectory()){
-			return;
-		}
-
-		if(f.exists() && f.isFile()){
-			f.delete();
-		}
-	}
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/storage_dialog.fla b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/storage_dialog.fla
deleted file mode 100644
index 1273c10..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/storage/storage_dialog.fla
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string.js
deleted file mode 100644
index 8a470e6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.provide("dojo.string");
-dojo.require("dojo.string.common");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/Builder.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/Builder.js
deleted file mode 100644
index cc2c1b8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/Builder.js
+++ /dev/null
@@ -1,91 +0,0 @@
-dojo.provide("dojo.string.Builder");
-dojo.require("dojo.string");
-dojo.require("dojo.lang.common");
-dojo.string.Builder=function(_1){
-this.arrConcat=(dojo.render.html.capable&&dojo.render.html["ie"]);
-var a=[];
-var b="";
-var _4=this.length=b.length;
-if(this.arrConcat){
-if(b.length>0){
-a.push(b);
-}
-b="";
-}
-this.toString=this.valueOf=function(){
-return (this.arrConcat)?a.join(""):b;
-};
-this.append=function(){
-for(var x=0;x<arguments.length;x++){
-var s=arguments[x];
-if(dojo.lang.isArrayLike(s)){
-this.append.apply(this,s);
-}else{
-if(this.arrConcat){
-a.push(s);
-}else{
-b+=s;
-}
-_4+=s.length;
-this.length=_4;
-}
-}
-return this;
-};
-this.clear=function(){
-a=[];
-b="";
-_4=this.length=0;
-return this;
-};
-this.remove=function(f,l){
-var s="";
-if(this.arrConcat){
-b=a.join("");
-}
-a=[];
-if(f>0){
-s=b.substring(0,(f-1));
-}
-b=s+b.substring(f+l);
-_4=this.length=b.length;
-if(this.arrConcat){
-a.push(b);
-b="";
-}
-return this;
-};
-this.replace=function(o,n){
-if(this.arrConcat){
-b=a.join("");
-}
-a=[];
-b=b.replace(o,n);
-_4=this.length=b.length;
-if(this.arrConcat){
-a.push(b);
-b="";
-}
-return this;
-};
-this.insert=function(_c,s){
-if(this.arrConcat){
-b=a.join("");
-}
-a=[];
-if(_c==0){
-b=s+b;
-}else{
-var t=b.split("");
-t.splice(_c,0,s);
-b=t.join("");
-}
-_4=this.length=b.length;
-if(this.arrConcat){
-a.push(b);
-b="";
-}
-return this;
-};
-this.append.apply(this,arguments);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/__package__.js
deleted file mode 100644
index 23bead5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.string","dojo.string.common","dojo.string.extras","dojo.string.Builder"]});
-dojo.provide("dojo.string.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/common.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/common.js
deleted file mode 100644
index 006eac7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/common.js
+++ /dev/null
@@ -1,50 +0,0 @@
-dojo.provide("dojo.string.common");
-dojo.string.trim=function(_1,wh){
-if(!_1.replace){
-return _1;
-}
-if(!_1.length){
-return _1;
-}
-var re=(wh>0)?(/^\s+/):(wh<0)?(/\s+$/):(/^\s+|\s+$/g);
-return _1.replace(re,"");
-};
-dojo.string.trimStart=function(_4){
-return dojo.string.trim(_4,1);
-};
-dojo.string.trimEnd=function(_5){
-return dojo.string.trim(_5,-1);
-};
-dojo.string.repeat=function(_6,_7,_8){
-var _9="";
-for(var i=0;i<_7;i++){
-_9+=_6;
-if(_8&&i<_7-1){
-_9+=_8;
-}
-}
-return _9;
-};
-dojo.string.pad=function(_b,_c,c,_e){
-var _f=String(_b);
-if(!c){
-c="0";
-}
-if(!_e){
-_e=1;
-}
-while(_f.length<_c){
-if(_e>0){
-_f=c+_f;
-}else{
-_f+=c;
-}
-}
-return _f;
-};
-dojo.string.padLeft=function(str,len,c){
-return dojo.string.pad(str,len,c,1);
-};
-dojo.string.padRight=function(str,len,c){
-return dojo.string.pad(str,len,c,-1);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/extras.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/extras.js
deleted file mode 100644
index d84c2f4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/string/extras.js
+++ /dev/null
@@ -1,165 +0,0 @@
-dojo.provide("dojo.string.extras");
-dojo.require("dojo.string.common");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.array");
-dojo.string.substituteParams=function(_1,_2){
-var _3=(typeof _2=="object")?_2:dojo.lang.toArray(arguments,1);
-return _1.replace(/\%\{(\w+)\}/g,function(_4,_5){
-if(typeof (_3[_5])!="undefined"&&_3[_5]!=null){
-return _3[_5];
-}
-dojo.raise("Substitution not found: "+_5);
-});
-};
-dojo.string.capitalize=function(_6){
-if(!dojo.lang.isString(_6)){
-return "";
-}
-if(arguments.length==0){
-_6=this;
-}
-var _7=_6.split(" ");
-for(var i=0;i<_7.length;i++){
-_7[i]=_7[i].charAt(0).toUpperCase()+_7[i].substring(1);
-}
-return _7.join(" ");
-};
-dojo.string.isBlank=function(_9){
-if(!dojo.lang.isString(_9)){
-return true;
-}
-return (dojo.string.trim(_9).length==0);
-};
-dojo.string.encodeAscii=function(_a){
-if(!dojo.lang.isString(_a)){
-return _a;
-}
-var _b="";
-var _c=escape(_a);
-var _d,re=/%u([0-9A-F]{4})/i;
-while((_d=_c.match(re))){
-var _f=Number("0x"+_d[1]);
-var _10=escape("&#"+_f+";");
-_b+=_c.substring(0,_d.index)+_10;
-_c=_c.substring(_d.index+_d[0].length);
-}
-_b+=_c.replace(/\+/g,"%2B");
-return _b;
-};
-dojo.string.escape=function(_11,str){
-var _13=dojo.lang.toArray(arguments,1);
-switch(_11.toLowerCase()){
-case "xml":
-case "html":
-case "xhtml":
-return dojo.string.escapeXml.apply(this,_13);
-case "sql":
-return dojo.string.escapeSql.apply(this,_13);
-case "regexp":
-case "regex":
-return dojo.string.escapeRegExp.apply(this,_13);
-case "javascript":
-case "jscript":
-case "js":
-return dojo.string.escapeJavaScript.apply(this,_13);
-case "ascii":
-return dojo.string.encodeAscii.apply(this,_13);
-default:
-return str;
-}
-};
-dojo.string.escapeXml=function(str,_15){
-str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_15){
-str=str.replace(/'/gm,"&#39;");
-}
-return str;
-};
-dojo.string.escapeSql=function(str){
-return str.replace(/'/gm,"''");
-};
-dojo.string.escapeRegExp=function(str){
-return str.replace(/\\/gm,"\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm,"\\$1");
-};
-dojo.string.escapeJavaScript=function(str){
-return str.replace(/(["'\f\b\n\t\r])/gm,"\\$1");
-};
-dojo.string.escapeString=function(str){
-return ("\""+str.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");
-};
-dojo.string.summary=function(str,len){
-if(!len||str.length<=len){
-return str;
-}
-return str.substring(0,len).replace(/\.+$/,"")+"...";
-};
-dojo.string.endsWith=function(str,end,_1e){
-if(_1e){
-str=str.toLowerCase();
-end=end.toLowerCase();
-}
-if((str.length-end.length)<0){
-return false;
-}
-return str.lastIndexOf(end)==str.length-end.length;
-};
-dojo.string.endsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.endsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.startsWith=function(str,_22,_23){
-if(_23){
-str=str.toLowerCase();
-_22=_22.toLowerCase();
-}
-return str.indexOf(_22)==0;
-};
-dojo.string.startsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.startsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.has=function(str){
-for(var i=1;i<arguments.length;i++){
-if(str.indexOf(arguments[i])>-1){
-return true;
-}
-}
-return false;
-};
-dojo.string.normalizeNewlines=function(_28,_29){
-if(_29=="\n"){
-_28=_28.replace(/\r\n/g,"\n");
-_28=_28.replace(/\r/g,"\n");
-}else{
-if(_29=="\r"){
-_28=_28.replace(/\r\n/g,"\r");
-_28=_28.replace(/\n/g,"\r");
-}else{
-_28=_28.replace(/([^\r])\n/g,"$1\r\n").replace(/\r([^\n])/g,"\r\n$1");
-}
-}
-return _28;
-};
-dojo.string.splitEscaped=function(str,_2b){
-var _2c=[];
-for(var i=0,_2e=0;i<str.length;i++){
-if(str.charAt(i)=="\\"){
-i++;
-continue;
-}
-if(str.charAt(i)==_2b){
-_2c.push(str.substring(_2e,i));
-_2e=i+1;
-}
-}
-_2c.push(str.substr(_2e));
-return _2c;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/style.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/style.js
deleted file mode 100644
index dc49969..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/style.js
+++ /dev/null
@@ -1,5 +0,0 @@
-dojo.provide("dojo.style");
-dojo.require("dojo.lang.common");
-dojo.kwCompoundRequire({browser:["dojo.html.style"]});
-dojo.deprecated("dojo.style","replaced by dojo.html.style","0.5");
-dojo.lang.mixin(dojo.style,dojo.html);
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/svg.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/svg.js
deleted file mode 100644
index 5451fcf..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/svg.js
+++ /dev/null
@@ -1,246 +0,0 @@
-dojo.provide("dojo.svg");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.dom");
-dojo.mixin(dojo.svg,dojo.dom);
-dojo.svg.graphics=dojo.svg.g=new function(d){
-this.suspend=function(){
-try{
-d.documentElement.suspendRedraw(0);
-}
-catch(e){
-}
-};
-this.resume=function(){
-try{
-d.documentElement.unsuspendRedraw(0);
-}
-catch(e){
-}
-};
-this.force=function(){
-try{
-d.documentElement.forceRedraw();
-}
-catch(e){
-}
-};
-}(document);
-dojo.svg.animations=dojo.svg.anim=new function(d){
-this.arePaused=function(){
-try{
-return d.documentElement.animationsPaused();
-}
-catch(e){
-return false;
-}
-};
-this.pause=function(){
-try{
-d.documentElement.pauseAnimations();
-}
-catch(e){
-}
-};
-this.resume=function(){
-try{
-d.documentElement.unpauseAnimations();
-}
-catch(e){
-}
-};
-}(document);
-dojo.svg.toCamelCase=function(_3){
-var _4=_3.split("-"),cc=_4[0];
-for(var i=1;i<_4.length;i++){
-cc+=_4[i].charAt(0).toUpperCase()+_4[i].substring(1);
-}
-return cc;
-};
-dojo.svg.toSelectorCase=function(_7){
-return _7.replace(/([A-Z])/g,"-$1").toLowerCase();
-};
-dojo.svg.getStyle=function(_8,_9){
-return document.defaultView.getComputedStyle(_8,_9);
-};
-dojo.svg.getNumericStyle=function(_a,_b){
-return parseFloat(dojo.svg.getStyle(_a,_b));
-};
-dojo.svg.getOpacity=function(_c){
-return Math.min(1,dojo.svg.getNumericStyle(_c,"fill-opacity"));
-};
-dojo.svg.setOpacity=function(_d,_e){
-_d.setAttributeNS(this.xmlns.svg,"fill-opacity",_e);
-_d.setAttributeNS(this.xmlns.svg,"stroke-opacity",_e);
-};
-dojo.svg.clearOpacity=function(_f){
-_f.setAttributeNS(this.xmlns.svg,"fill-opacity","1.0");
-_f.setAttributeNS(this.xmlns.svg,"stroke-opacity","1.0");
-};
-dojo.svg.getCoords=function(_10){
-if(_10.getBBox){
-var box=_10.getBBox();
-return {x:box.x,y:box.y};
-}
-return null;
-};
-dojo.svg.setCoords=function(_12,_13){
-var p=dojo.svg.getCoords();
-if(!p){
-return;
-}
-var dx=p.x-_13.x;
-var dy=p.y-_13.y;
-dojo.svg.translate(_12,dx,dy);
-};
-dojo.svg.getDimensions=function(_17){
-if(_17.getBBox){
-var box=_17.getBBox();
-return {width:box.width,height:box.height};
-}
-return null;
-};
-dojo.svg.setDimensions=function(_19,dim){
-if(_19.width){
-_19.width.baseVal.value=dim.width;
-_19.height.baseVal.value=dim.height;
-}else{
-if(_19.r){
-_19.r.baseVal.value=Math.min(dim.width,dim.height)/2;
-}else{
-if(_19.rx){
-_19.rx.baseVal.value=dim.width/2;
-_19.ry.baseVal.value=dim.height/2;
-}
-}
-}
-};
-dojo.svg.translate=function(_1b,dx,dy){
-if(_1b.transform&&_1b.ownerSVGElement&&_1b.ownerSVGElement.createSVGTransform){
-var t=_1b.ownerSVGElement.createSVGTransform();
-t.setTranslate(dx,dy);
-_1b.transform.baseVal.appendItem(t);
-}
-};
-dojo.svg.scale=function(_1f,_20,_21){
-if(!_21){
-var _21=_20;
-}
-if(_1f.transform&&_1f.ownerSVGElement&&_1f.ownerSVGElement.createSVGTransform){
-var t=_1f.ownerSVGElement.createSVGTransform();
-t.setScale(_20,_21);
-_1f.transform.baseVal.appendItem(t);
-}
-};
-dojo.svg.rotate=function(_23,ang,cx,cy){
-if(_23.transform&&_23.ownerSVGElement&&_23.ownerSVGElement.createSVGTransform){
-var t=_23.ownerSVGElement.createSVGTransform();
-if(cx==null){
-t.setMatrix(t.matrix.rotate(ang));
-}else{
-t.setRotate(ang,cx,cy);
-}
-_23.transform.baseVal.appendItem(t);
-}
-};
-dojo.svg.skew=function(_28,ang,_2a){
-var dir=_2a||"x";
-if(_28.transform&&_28.ownerSVGElement&&_28.ownerSVGElement.createSVGTransform){
-var t=_28.ownerSVGElement.createSVGTransform();
-if(dir!="x"){
-t.setSkewY(ang);
-}else{
-t.setSkewX(ang);
-}
-_28.transform.baseVal.appendItem(t);
-}
-};
-dojo.svg.flip=function(_2d,_2e){
-var dir=_2e||"x";
-if(_2d.transform&&_2d.ownerSVGElement&&_2d.ownerSVGElement.createSVGTransform){
-var t=_2d.ownerSVGElement.createSVGTransform();
-t.setMatrix((dir!="x")?t.matrix.flipY():t.matrix.flipX());
-_2d.transform.baseVal.appendItem(t);
-}
-};
-dojo.svg.invert=function(_31){
-if(_31.transform&&_31.ownerSVGElement&&_31.ownerSVGElement.createSVGTransform){
-var t=_31.ownerSVGElement.createSVGTransform();
-t.setMatrix(t.matrix.inverse());
-_31.transform.baseVal.appendItem(t);
-}
-};
-dojo.svg.applyMatrix=function(_33,a,b,c,d,e,f){
-if(_33.transform&&_33.ownerSVGElement&&_33.ownerSVGElement.createSVGTransform){
-var m;
-if(b){
-var m=_33.ownerSVGElement.createSVGMatrix();
-m.a=a;
-m.b=b;
-m.c=c;
-m.d=d;
-m.e=e;
-m.f=f;
-}else{
-m=a;
-}
-var t=_33.ownerSVGElement.createSVGTransform();
-t.setMatrix(m);
-_33.transform.baseVal.appendItem(t);
-}
-};
-dojo.svg.group=function(_3c){
-var p=_3c.item(0).parentNode;
-var g=document.createElementNS(this.xmlns.svg,"g");
-for(var i=0;i<_3c.length;i++){
-g.appendChild(_3c.item(i));
-}
-p.appendChild(g);
-return g;
-};
-dojo.svg.ungroup=function(g){
-var p=g.parentNode;
-while(g.childNodes.length>0){
-p.appendChild(g.childNodes.item(0));
-}
-p.removeChild(g);
-};
-dojo.svg.getGroup=function(_42){
-var a=this.getAncestors(_42);
-for(var i=0;i<a.length;i++){
-if(a[i].nodeType==this.ELEMENT_NODE&&a[i].nodeName.toLowerCase()=="g"){
-return a[i];
-}
-}
-return null;
-};
-dojo.svg.bringToFront=function(_45){
-var n=this.getGroup(_45)||_45;
-n.ownerSVGElement.appendChild(n);
-};
-dojo.svg.sendToBack=function(_47){
-var n=this.getGroup(_47)||_47;
-n.ownerSVGElement.insertBefore(n,n.ownerSVGElement.firstChild);
-};
-dojo.svg.bringForward=function(_49){
-var n=this.getGroup(_49)||_49;
-if(this.getLastChildElement(n.parentNode)!=n){
-this.insertAfter(n,this.getNextSiblingElement(n),true);
-}
-};
-dojo.svg.sendBackward=function(_4b){
-var n=this.getGroup(_4b)||_4b;
-if(this.getFirstChildElement(n.parentNode)!=n){
-this.insertBefore(n,this.getPreviousSiblingElement(n),true);
-}
-};
-dojo.svg.createNodesFromText=function(txt,_4e){
-var _4f=(new DOMParser()).parseFromString(txt,"text/xml").normalize();
-if(_4e){
-return [_4f.firstChild.cloneNode(true)];
-}
-var _50=[];
-for(var x=0;x<_4f.childNodes.length;x++){
-_50.push(_4f.childNodes.item(x).cloneNode(true));
-}
-return _50;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/text/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/text/__package__.js
deleted file mode 100644
index 28a38cc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/text/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.text.String","dojo.text.Builder"]});
-dojo.deprecated("dojo.text","textDirectory moved to cal, text.String and text.Builder havne't been here for awhile","0.5");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/text/textDirectory.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/text/textDirectory.js
deleted file mode 100644
index 864e954..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/text/textDirectory.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.require("dojo.cal.textDirectory");
-dojo.deprecate("dojo.text.textDirectory","use dojo.cal.textDirectory","0.5");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/tlocale.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/tlocale.js
deleted file mode 100644
index 6c76e93..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/tlocale.js
+++ /dev/null
@@ -1,8 +0,0 @@
-dojo.provide("dojo.tlocale");
-dojo.require("dojo.i18n.common");
-dojo.requireLocalization("dojo.i18n.calendar","gregorian",null,"zh-cn,zh-hk,de,ko,zh-tw,zh,ja,fi,pt-br,fr,es,ROOT,hu,en,it,sv,nl,pt");
-dojo.requireLocalization("dojo.i18n.calendar","gregorianExtras",null,"zh,ja,ROOT");
-dojo.requireLocalization("dojo.widget","DatePicker",null,"");
-dojo.requireLocalization("dojo.widget","TimePicker",null,"ROOT");
-dojo.requireLocalization("dojo.widget","DropdownDatePicker",null,"ROOT");
-dojo.requireLocalization("dojo.widget","DropdownTimePicker",null,"ROOT");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/undo/Manager.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/undo/Manager.js
deleted file mode 100644
index 1a33a9f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/undo/Manager.js
+++ /dev/null
@@ -1,137 +0,0 @@
-dojo.provide("dojo.undo.Manager");
-dojo.require("dojo.lang.common");
-dojo.undo.Manager=function(_1){
-this.clear();
-this._parent=_1;
-};
-dojo.extend(dojo.undo.Manager,{_parent:null,_undoStack:null,_redoStack:null,_currentManager:null,canUndo:false,canRedo:false,isUndoing:false,isRedoing:false,onUndo:function(_2,_3){
-},onRedo:function(_4,_5){
-},onUndoAny:function(_6,_7){
-},onRedoAny:function(_8,_9){
-},_updateStatus:function(){
-this.canUndo=this._undoStack.length>0;
-this.canRedo=this._redoStack.length>0;
-},clear:function(){
-this._undoStack=[];
-this._redoStack=[];
-this._currentManager=this;
-this.isUndoing=false;
-this.isRedoing=false;
-this._updateStatus();
-},undo:function(){
-if(!this.canUndo){
-return false;
-}
-this.endAllTransactions();
-this.isUndoing=true;
-var _a=this._undoStack.pop();
-if(_a instanceof dojo.undo.Manager){
-_a.undoAll();
-}else{
-_a.undo();
-}
-if(_a.redo){
-this._redoStack.push(_a);
-}
-this.isUndoing=false;
-this._updateStatus();
-this.onUndo(this,_a);
-if(!(_a instanceof dojo.undo.Manager)){
-this.getTop().onUndoAny(this,_a);
-}
-return true;
-},redo:function(){
-if(!this.canRedo){
-return false;
-}
-this.isRedoing=true;
-var _b=this._redoStack.pop();
-if(_b instanceof dojo.undo.Manager){
-_b.redoAll();
-}else{
-_b.redo();
-}
-this._undoStack.push(_b);
-this.isRedoing=false;
-this._updateStatus();
-this.onRedo(this,_b);
-if(!(_b instanceof dojo.undo.Manager)){
-this.getTop().onRedoAny(this,_b);
-}
-return true;
-},undoAll:function(){
-while(this._undoStack.length>0){
-this.undo();
-}
-},redoAll:function(){
-while(this._redoStack.length>0){
-this.redo();
-}
-},push:function(_c,_d,_e){
-if(!_c){
-return;
-}
-if(this._currentManager==this){
-this._undoStack.push({undo:_c,redo:_d,description:_e});
-}else{
-this._currentManager.push.apply(this._currentManager,arguments);
-}
-this._redoStack=[];
-this._updateStatus();
-},concat:function(_f){
-if(!_f){
-return;
-}
-if(this._currentManager==this){
-for(var x=0;x<_f._undoStack.length;x++){
-this._undoStack.push(_f._undoStack[x]);
-}
-if(_f._undoStack.length>0){
-this._redoStack=[];
-}
-this._updateStatus();
-}else{
-this._currentManager.concat.apply(this._currentManager,arguments);
-}
-},beginTransaction:function(_11){
-if(this._currentManager==this){
-var mgr=new dojo.undo.Manager(this);
-mgr.description=_11?_11:"";
-this._undoStack.push(mgr);
-this._currentManager=mgr;
-return mgr;
-}else{
-this._currentManager=this._currentManager.beginTransaction.apply(this._currentManager,arguments);
-}
-},endTransaction:function(_13){
-if(this._currentManager==this){
-if(this._parent){
-this._parent._currentManager=this._parent;
-if(this._undoStack.length==0||_13){
-var idx=dojo.lang.find(this._parent._undoStack,this);
-if(idx>=0){
-this._parent._undoStack.splice(idx,1);
-if(_13){
-for(var x=0;x<this._undoStack.length;x++){
-this._parent._undoStack.splice(idx++,0,this._undoStack[x]);
-}
-this._updateStatus();
-}
-}
-}
-return this._parent;
-}
-}else{
-this._currentManager=this._currentManager.endTransaction.apply(this._currentManager,arguments);
-}
-},endAllTransactions:function(){
-while(this._currentManager!=this){
-this.endTransaction();
-}
-},getTop:function(){
-if(this._parent){
-return this._parent.getTop();
-}else{
-return this;
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/undo/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/undo/__package__.js
deleted file mode 100644
index c5f6e36..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/undo/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.require("dojo.undo.Manager");
-dojo.provide("dojo.undo.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/undo/browser.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/undo/browser.js
deleted file mode 100644
index ed9392c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/undo/browser.js
+++ /dev/null
@@ -1,190 +0,0 @@
-dojo.provide("dojo.undo.browser");
-dojo.require("dojo.io.common");
-try{
-if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
-}
-}
-catch(e){
-}
-if(dojo.render.html.opera){
-dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work.");
-}
-dojo.undo.browser={initialHref:(!dj_undef("window"))?window.location.href:"",initialHash:(!dj_undef("window"))?window.location.hash:"",moveForward:false,historyStack:[],forwardStack:[],historyIframe:null,bookmarkAnchor:null,locationTimer:null,setInitialState:function(_1){
-this.initialState=this._createState(this.initialHref,_1,this.initialHash);
-},addToHistory:function(_2){
-this.forwardStack=[];
-var _3=null;
-var _4=null;
-if(!this.historyIframe){
-if(djConfig["useXDomain"]&&!djConfig["dojoIframeHistoryUrl"]){
-dojo.debug("dojo.undo.browser: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
-}
-this.historyIframe=window.frames["djhistory"];
-}
-if(!this.bookmarkAnchor){
-this.bookmarkAnchor=document.createElement("a");
-dojo.body().appendChild(this.bookmarkAnchor);
-this.bookmarkAnchor.style.display="none";
-}
-if(_2["changeUrl"]){
-_3="#"+((_2["changeUrl"]!==true)?_2["changeUrl"]:(new Date()).getTime());
-if(this.historyStack.length==0&&this.initialState.urlHash==_3){
-this.initialState=this._createState(_4,_2,_3);
-return;
-}else{
-if(this.historyStack.length>0&&this.historyStack[this.historyStack.length-1].urlHash==_3){
-this.historyStack[this.historyStack.length-1]=this._createState(_4,_2,_3);
-return;
-}
-}
-this.changingUrl=true;
-setTimeout("window.location.href = '"+_3+"'; dojo.undo.browser.changingUrl = false;",1);
-this.bookmarkAnchor.href=_3;
-if(dojo.render.html.ie){
-_4=this._loadIframeHistory();
-var _5=_2["back"]||_2["backButton"]||_2["handle"];
-var _6=function(_7){
-if(window.location.hash!=""){
-setTimeout("window.location.href = '"+_3+"';",1);
-}
-_5.apply(this,[_7]);
-};
-if(_2["back"]){
-_2.back=_6;
-}else{
-if(_2["backButton"]){
-_2.backButton=_6;
-}else{
-if(_2["handle"]){
-_2.handle=_6;
-}
-}
-}
-var _8=_2["forward"]||_2["forwardButton"]||_2["handle"];
-var _9=function(_a){
-if(window.location.hash!=""){
-window.location.href=_3;
-}
-if(_8){
-_8.apply(this,[_a]);
-}
-};
-if(_2["forward"]){
-_2.forward=_9;
-}else{
-if(_2["forwardButton"]){
-_2.forwardButton=_9;
-}else{
-if(_2["handle"]){
-_2.handle=_9;
-}
-}
-}
-}else{
-if(dojo.render.html.moz){
-if(!this.locationTimer){
-this.locationTimer=setInterval("dojo.undo.browser.checkLocation();",200);
-}
-}
-}
-}else{
-_4=this._loadIframeHistory();
-}
-this.historyStack.push(this._createState(_4,_2,_3));
-},checkLocation:function(){
-if(!this.changingUrl){
-var _b=this.historyStack.length;
-if((window.location.hash==this.initialHash||window.location.href==this.initialHref)&&(_b==1)){
-this.handleBackButton();
-return;
-}
-if(this.forwardStack.length>0){
-if(this.forwardStack[this.forwardStack.length-1].urlHash==window.location.hash){
-this.handleForwardButton();
-return;
-}
-}
-if((_b>=2)&&(this.historyStack[_b-2])){
-if(this.historyStack[_b-2].urlHash==window.location.hash){
-this.handleBackButton();
-return;
-}
-}
-}
-},iframeLoaded:function(_c,_d){
-if(!dojo.render.html.opera){
-var _e=this._getUrlQuery(_d.href);
-if(_e==null){
-if(this.historyStack.length==1){
-this.handleBackButton();
-}
-return;
-}
-if(this.moveForward){
-this.moveForward=false;
-return;
-}
-if(this.historyStack.length>=2&&_e==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
-this.handleBackButton();
-}else{
-if(this.forwardStack.length>0&&_e==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
-this.handleForwardButton();
-}
-}
-}
-},handleBackButton:function(){
-var _f=this.historyStack.pop();
-if(!_f){
-return;
-}
-var _10=this.historyStack[this.historyStack.length-1];
-if(!_10&&this.historyStack.length==0){
-_10=this.initialState;
-}
-if(_10){
-if(_10.kwArgs["back"]){
-_10.kwArgs["back"]();
-}else{
-if(_10.kwArgs["backButton"]){
-_10.kwArgs["backButton"]();
-}else{
-if(_10.kwArgs["handle"]){
-_10.kwArgs.handle("back");
-}
-}
-}
-}
-this.forwardStack.push(_f);
-},handleForwardButton:function(){
-var _11=this.forwardStack.pop();
-if(!_11){
-return;
-}
-if(_11.kwArgs["forward"]){
-_11.kwArgs.forward();
-}else{
-if(_11.kwArgs["forwardButton"]){
-_11.kwArgs.forwardButton();
-}else{
-if(_11.kwArgs["handle"]){
-_11.kwArgs.handle("forward");
-}
-}
-}
-this.historyStack.push(_11);
-},_createState:function(url,_13,_14){
-return {"url":url,"kwArgs":_13,"urlHash":_14};
-},_getUrlQuery:function(url){
-var _16=url.split("?");
-if(_16.length<2){
-return null;
-}else{
-return _16[1];
-}
-},_loadIframeHistory:function(){
-var url=(djConfig["dojoIframeHistoryUrl"]||dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"?"+(new Date()).getTime();
-this.moveForward=true;
-dojo.io.setIFrameSrc(this.historyIframe,url,false);
-return url;
-}};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uri/Uri.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uri/Uri.js
deleted file mode 100644
index bfc4fad..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uri/Uri.js
+++ /dev/null
@@ -1,79 +0,0 @@
-dojo.provide("dojo.uri.Uri");
-dojo.uri=new function(){
-var _1=new RegExp("^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$");
-var _2=new RegExp("(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$");
-var _3=new RegExp("/(\\w+.css)");
-this.dojoUri=function(_4){
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),_4);
-};
-this.moduleUri=function(_5,_6){
-var _7=dojo.hostenv.getModuleSymbols(_5).join("/");
-if(!_7){
-return null;
-}
-if(_7.lastIndexOf("/")!=_7.length-1){
-_7+="/";
-}
-var _8=_7.indexOf(":");
-var _9=_7.indexOf("/");
-if(_7.charAt(0)!="/"&&(_8==-1||_8>_9)){
-_7=dojo.hostenv.getBaseScriptUri()+_7;
-}
-return new dojo.uri.Uri(_7,_6);
-};
-this.Uri=function(){
-var _a=arguments[0];
-if(_a&&arguments.length>1){
-var _b=_3.exec(_a);
-if(_b){
-_a=_a.toString().replace(_b[1],"");
-}
-}
-for(var i=1;i<arguments.length;i++){
-if(!arguments[i]){
-continue;
-}
-var _d=new dojo.uri.Uri(arguments[i].toString());
-var _e=new dojo.uri.Uri(_a.toString());
-if((_d.path=="")&&(_d.scheme==null)&&(_d.authority==null)&&(_d.query==null)){
-if(_d.fragment!=null){
-_e.fragment=_d.fragment;
-}
-_d=_e;
-}
-if(_d.scheme!=null&&_d.authority!=null){
-_a="";
-}
-if(_d.scheme!=null){
-_a+=_d.scheme+":";
-}
-if(_d.authority!=null){
-_a+="//"+_d.authority;
-}
-_a+=_d.path;
-if(_d.query!=null){
-_a+="?"+_d.query;
-}
-if(_d.fragment!=null){
-_a+="#"+_d.fragment;
-}
-}
-this.uri=_a.toString();
-var r=this.uri.match(_2);
-this.scheme=r[2]||(r[1]?"":null);
-this.authority=r[4]||(r[3]?"":null);
-this.path=r[5];
-this.query=r[7]||(r[6]?"":null);
-this.fragment=r[9]||(r[8]?"":null);
-if(this.authority!=null){
-r=this.authority.match(_1);
-this.user=r[3]||null;
-this.password=r[4]||null;
-this.host=r[5];
-this.port=r[7]||null;
-}
-this.toString=function(){
-return this.uri;
-};
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uri/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uri/__package__.js
deleted file mode 100644
index 373a77d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uri/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:[["dojo.uri.Uri",false,false]]});
-dojo.provide("dojo.uri.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uri/cache.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uri/cache.js
deleted file mode 100644
index 46bb5c4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uri/cache.js
+++ /dev/null
@@ -1,19 +0,0 @@
-dojo.provide("dojo.uri.cache");
-dojo.uri.cache={_cache:{},set:function(_1,_2){
-this._cache[_1.toString()]=_2;
-return _1;
-},remove:function(_3){
-delete this._cache[_3.toString()];
-},get:function(_4){
-var _5=_4.toString();
-var _6=this._cache[_5];
-if(!_6){
-_6=dojo.hostenv.getText(_5);
-if(_6){
-this._cache[_5]=_6;
-}
-}
-return _6;
-},allow:function(_7){
-return _7;
-}};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/LightweightGenerator.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/LightweightGenerator.js
deleted file mode 100644
index edd5bd5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/LightweightGenerator.js
+++ /dev/null
@@ -1,29 +0,0 @@
-dojo.provide("dojo.uuid.LightweightGenerator");
-dojo.uuid.LightweightGenerator=new function(){
-var _1=16;
-function _generateRandomEightCharacterHexString(){
-var _2=Math.floor((Math.random()%1)*Math.pow(2,32));
-var _3=_2.toString(_1);
-while(_3.length<8){
-_3="0"+_3;
-}
-return _3;
-}
-this.generate=function(_4){
-var _5="-";
-var _6="4";
-var _7="8";
-var a=_generateRandomEightCharacterHexString();
-var b=_generateRandomEightCharacterHexString();
-b=b.substring(0,4)+_5+_6+b.substring(5,8);
-var c=_generateRandomEightCharacterHexString();
-c=_7+c.substring(1,4)+_5+c.substring(4,8);
-var d=_generateRandomEightCharacterHexString();
-var _c=a+_5+b+_5+c+d;
-_c=_c.toLowerCase();
-if(_4&&(_4!=String)){
-_c=new _4(_c);
-}
-return _c;
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/NameBasedGenerator.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/NameBasedGenerator.js
deleted file mode 100644
index 1583822..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/NameBasedGenerator.js
+++ /dev/null
@@ -1,11 +0,0 @@
-dojo.provide("dojo.uuid.NameBasedGenerator");
-dojo.uuid.NameBasedGenerator=new function(){
-this.generate=function(_1){
-dojo.unimplemented("dojo.uuid.NameBasedGenerator.generate");
-var _2="00000000-0000-0000-0000-000000000000";
-if(_1&&(_1!=String)){
-_2=new _1(_2);
-}
-return _2;
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/NilGenerator.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/NilGenerator.js
deleted file mode 100644
index 927749c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/NilGenerator.js
+++ /dev/null
@@ -1,10 +0,0 @@
-dojo.provide("dojo.uuid.NilGenerator");
-dojo.uuid.NilGenerator=new function(){
-this.generate=function(_1){
-var _2="00000000-0000-0000-0000-000000000000";
-if(_1&&(_1!=String)){
-_2=new _1(_2);
-}
-return _2;
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/RandomGenerator.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/RandomGenerator.js
deleted file mode 100644
index f0487d4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/RandomGenerator.js
+++ /dev/null
@@ -1,11 +0,0 @@
-dojo.provide("dojo.uuid.RandomGenerator");
-dojo.uuid.RandomGenerator=new function(){
-this.generate=function(_1){
-dojo.unimplemented("dojo.uuid.RandomGenerator.generate");
-var _2="00000000-0000-0000-0000-000000000000";
-if(_1&&(_1!=String)){
-_2=new _1(_2);
-}
-return _2;
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/TimeBasedGenerator.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/TimeBasedGenerator.js
deleted file mode 100644
index f63cd5b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/TimeBasedGenerator.js
+++ /dev/null
@@ -1,232 +0,0 @@
-dojo.provide("dojo.uuid.TimeBasedGenerator");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.type");
-dojo.require("dojo.lang.assert");
-dojo.uuid.TimeBasedGenerator=new function(){
-this.GREGORIAN_CHANGE_OFFSET_IN_HOURS=3394248;
-var _1=null;
-var _2=null;
-var _3=null;
-var _4=0;
-var _5=null;
-var _6=null;
-var _7=null;
-var _8=16;
-function _carry(_9){
-_9[2]+=_9[3]>>>16;
-_9[3]&=65535;
-_9[1]+=_9[2]>>>16;
-_9[2]&=65535;
-_9[0]+=_9[1]>>>16;
-_9[1]&=65535;
-dojo.lang.assert((_9[0]>>>16)===0);
-}
-function _get64bitArrayFromFloat(x){
-var _b=new Array(0,0,0,0);
-_b[3]=x%65536;
-x-=_b[3];
-x/=65536;
-_b[2]=x%65536;
-x-=_b[2];
-x/=65536;
-_b[1]=x%65536;
-x-=_b[1];
-x/=65536;
-_b[0]=x;
-return _b;
-}
-function _addTwo64bitArrays(_c,_d){
-dojo.lang.assertType(_c,Array);
-dojo.lang.assertType(_d,Array);
-dojo.lang.assert(_c.length==4);
-dojo.lang.assert(_d.length==4);
-var _e=new Array(0,0,0,0);
-_e[3]=_c[3]+_d[3];
-_e[2]=_c[2]+_d[2];
-_e[1]=_c[1]+_d[1];
-_e[0]=_c[0]+_d[0];
-_carry(_e);
-return _e;
-}
-function _multiplyTwo64bitArrays(_f,_10){
-dojo.lang.assertType(_f,Array);
-dojo.lang.assertType(_10,Array);
-dojo.lang.assert(_f.length==4);
-dojo.lang.assert(_10.length==4);
-var _11=false;
-if(_f[0]*_10[0]!==0){
-_11=true;
-}
-if(_f[0]*_10[1]!==0){
-_11=true;
-}
-if(_f[0]*_10[2]!==0){
-_11=true;
-}
-if(_f[1]*_10[0]!==0){
-_11=true;
-}
-if(_f[1]*_10[1]!==0){
-_11=true;
-}
-if(_f[2]*_10[0]!==0){
-_11=true;
-}
-dojo.lang.assert(!_11);
-var _12=new Array(0,0,0,0);
-_12[0]+=_f[0]*_10[3];
-_carry(_12);
-_12[0]+=_f[1]*_10[2];
-_carry(_12);
-_12[0]+=_f[2]*_10[1];
-_carry(_12);
-_12[0]+=_f[3]*_10[0];
-_carry(_12);
-_12[1]+=_f[1]*_10[3];
-_carry(_12);
-_12[1]+=_f[2]*_10[2];
-_carry(_12);
-_12[1]+=_f[3]*_10[1];
-_carry(_12);
-_12[2]+=_f[2]*_10[3];
-_carry(_12);
-_12[2]+=_f[3]*_10[2];
-_carry(_12);
-_12[3]+=_f[3]*_10[3];
-_carry(_12);
-return _12;
-}
-function _padWithLeadingZeros(_13,_14){
-while(_13.length<_14){
-_13="0"+_13;
-}
-return _13;
-}
-function _generateRandomEightCharacterHexString(){
-var _15=Math.floor((Math.random()%1)*Math.pow(2,32));
-var _16=_15.toString(_8);
-while(_16.length<8){
-_16="0"+_16;
-}
-return _16;
-}
-function _generateUuidString(_17){
-dojo.lang.assertType(_17,String,{optional:true});
-if(_17){
-dojo.lang.assert(_17.length==12);
-}else{
-if(_7){
-_17=_7;
-}else{
-if(!_1){
-var _18=32768;
-var _19=Math.floor((Math.random()%1)*Math.pow(2,15));
-var _1a=(_18|_19).toString(_8);
-_1=_1a+_generateRandomEightCharacterHexString();
-}
-_17=_1;
-}
-}
-if(!_2){
-var _1b=32768;
-var _1c=Math.floor((Math.random()%1)*Math.pow(2,14));
-_2=(_1b|_1c).toString(_8);
-}
-var now=new Date();
-var _1e=now.valueOf();
-var _1f=_get64bitArrayFromFloat(_1e);
-if(!_5){
-var _20=_get64bitArrayFromFloat(60*60);
-var _21=_get64bitArrayFromFloat(dojo.uuid.TimeBasedGenerator.GREGORIAN_CHANGE_OFFSET_IN_HOURS);
-var _22=_multiplyTwo64bitArrays(_21,_20);
-var _23=_get64bitArrayFromFloat(1000);
-_5=_multiplyTwo64bitArrays(_22,_23);
-_6=_get64bitArrayFromFloat(10000);
-}
-var _24=_1f;
-var _25=_addTwo64bitArrays(_5,_24);
-var _26=_multiplyTwo64bitArrays(_25,_6);
-if(now.valueOf()==_3){
-_26[3]+=_4;
-_carry(_26);
-_4+=1;
-if(_4==10000){
-while(now.valueOf()==_3){
-now=new Date();
-}
-}
-}else{
-_3=now.valueOf();
-_4=1;
-}
-var _27=_26[2].toString(_8);
-var _28=_26[3].toString(_8);
-var _29=_padWithLeadingZeros(_27,4)+_padWithLeadingZeros(_28,4);
-var _2a=_26[1].toString(_8);
-_2a=_padWithLeadingZeros(_2a,4);
-var _2b=_26[0].toString(_8);
-_2b=_padWithLeadingZeros(_2b,3);
-var _2c="-";
-var _2d="1";
-var _2e=_29+_2c+_2a+_2c+_2d+_2b+_2c+_2+_2c+_17;
-_2e=_2e.toLowerCase();
-return _2e;
-}
-this.setNode=function(_2f){
-dojo.lang.assert((_2f===null)||(_2f.length==12));
-_7=_2f;
-};
-this.getNode=function(){
-return _7;
-};
-this.generate=function(_30){
-var _31=null;
-var _32=null;
-if(_30){
-if(dojo.lang.isObject(_30)&&!dojo.lang.isBuiltIn(_30)){
-var _33=_30;
-dojo.lang.assertValidKeywords(_33,["node","hardwareNode","pseudoNode","returnType"]);
-var _34=_33["node"];
-var _35=_33["hardwareNode"];
-var _36=_33["pseudoNode"];
-_31=(_34||_36||_35);
-if(_31){
-var _37=_31.charAt(0);
-var _38=parseInt(_37,_8);
-if(_35){
-dojo.lang.assert((_38>=0)&&(_38<=7));
-}
-if(_36){
-dojo.lang.assert((_38>=8)&&(_38<=15));
-}
-}
-_32=_33["returnType"];
-dojo.lang.assertType(_32,Function,{optional:true});
-}else{
-if(dojo.lang.isString(_30)){
-_31=_30;
-_32=null;
-}else{
-if(dojo.lang.isFunction(_30)){
-_31=null;
-_32=_30;
-}
-}
-}
-if(_31){
-dojo.lang.assert(_31.length==12);
-var _39=parseInt(_31,_8);
-dojo.lang.assert(isFinite(_39));
-}
-dojo.lang.assertType(_32,Function,{optional:true});
-}
-var _3a=_generateUuidString(_31);
-var _3b;
-if(_32&&(_32!=String)){
-_3b=new _32(_3a);
-}else{
-_3b=_3a;
-}
-return _3b;
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/Uuid.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/Uuid.js
deleted file mode 100644
index c0a3fda..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/Uuid.js
+++ /dev/null
@@ -1,202 +0,0 @@
-dojo.provide("dojo.uuid.Uuid");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.assert");
-dojo.uuid.Uuid=function(_1){
-this._uuidString=dojo.uuid.Uuid.NIL_UUID;
-if(_1){
-if(dojo.lang.isString(_1)){
-this._uuidString=_1.toLowerCase();
-dojo.lang.assert(this.isValid());
-}else{
-if(dojo.lang.isObject(_1)&&_1.generate){
-var _2=_1;
-this._uuidString=_2.generate();
-dojo.lang.assert(this.isValid());
-}else{
-dojo.lang.assert(false,"The dojo.uuid.Uuid() constructor must be initializated with a UUID string.");
-}
-}
-}else{
-var _3=dojo.uuid.Uuid.getGenerator();
-if(_3){
-this._uuidString=_3.generate();
-dojo.lang.assert(this.isValid());
-}
-}
-};
-dojo.uuid.Uuid.NIL_UUID="00000000-0000-0000-0000-000000000000";
-dojo.uuid.Uuid.Version={UNKNOWN:0,TIME_BASED:1,DCE_SECURITY:2,NAME_BASED_MD5:3,RANDOM:4,NAME_BASED_SHA1:5};
-dojo.uuid.Uuid.Variant={NCS:"0",DCE:"10",MICROSOFT:"110",UNKNOWN:"111"};
-dojo.uuid.Uuid.HEX_RADIX=16;
-dojo.uuid.Uuid.compare=function(_4,_5){
-var _6=_4.toString();
-var _7=_5.toString();
-if(_6>_7){
-return 1;
-}
-if(_6<_7){
-return -1;
-}
-return 0;
-};
-dojo.uuid.Uuid.setGenerator=function(_8){
-dojo.lang.assert(!_8||(dojo.lang.isObject(_8)&&_8.generate));
-dojo.uuid.Uuid._ourGenerator=_8;
-};
-dojo.uuid.Uuid.getGenerator=function(){
-return dojo.uuid.Uuid._ourGenerator;
-};
-dojo.uuid.Uuid.prototype.toString=function(_9){
-if(_9){
-switch(_9){
-case "{}":
-return "{"+this._uuidString+"}";
-break;
-case "()":
-return "("+this._uuidString+")";
-break;
-case "\"\"":
-return "\""+this._uuidString+"\"";
-break;
-case "''":
-return "'"+this._uuidString+"'";
-break;
-case "urn":
-return "urn:uuid:"+this._uuidString;
-break;
-case "!-":
-return this._uuidString.split("-").join("");
-break;
-default:
-dojo.lang.assert(false,"The toString() method of dojo.uuid.Uuid was passed a bogus format.");
-}
-}else{
-return this._uuidString;
-}
-};
-dojo.uuid.Uuid.prototype.compare=function(_a){
-return dojo.uuid.Uuid.compare(this,_a);
-};
-dojo.uuid.Uuid.prototype.isEqual=function(_b){
-return (this.compare(_b)==0);
-};
-dojo.uuid.Uuid.prototype.isValid=function(){
-try{
-dojo.lang.assertType(this._uuidString,String);
-dojo.lang.assert(this._uuidString.length==36);
-dojo.lang.assert(this._uuidString==this._uuidString.toLowerCase());
-var _c=this._uuidString.split("-");
-dojo.lang.assert(_c.length==5);
-dojo.lang.assert(_c[0].length==8);
-dojo.lang.assert(_c[1].length==4);
-dojo.lang.assert(_c[2].length==4);
-dojo.lang.assert(_c[3].length==4);
-dojo.lang.assert(_c[4].length==12);
-for(var i in _c){
-var _e=_c[i];
-var _f=parseInt(_e,dojo.uuid.Uuid.HEX_RADIX);
-dojo.lang.assert(isFinite(_f));
-}
-return true;
-}
-catch(e){
-return false;
-}
-};
-dojo.uuid.Uuid.prototype.getVariant=function(){
-var _10=this._uuidString.charAt(19);
-var _11=parseInt(_10,dojo.uuid.Uuid.HEX_RADIX);
-dojo.lang.assert((_11>=0)&&(_11<=16));
-if(!dojo.uuid.Uuid._ourVariantLookupTable){
-var _12=dojo.uuid.Uuid.Variant;
-var _13=[];
-_13[0]=_12.NCS;
-_13[1]=_12.NCS;
-_13[2]=_12.NCS;
-_13[3]=_12.NCS;
-_13[4]=_12.NCS;
-_13[5]=_12.NCS;
-_13[6]=_12.NCS;
-_13[7]=_12.NCS;
-_13[8]=_12.DCE;
-_13[9]=_12.DCE;
-_13[10]=_12.DCE;
-_13[11]=_12.DCE;
-_13[12]=_12.MICROSOFT;
-_13[13]=_12.MICROSOFT;
-_13[14]=_12.UNKNOWN;
-_13[15]=_12.UNKNOWN;
-dojo.uuid.Uuid._ourVariantLookupTable=_13;
-}
-return dojo.uuid.Uuid._ourVariantLookupTable[_11];
-};
-dojo.uuid.Uuid.prototype.getVersion=function(){
-if(!this._versionNumber){
-var _14="Called getVersion() on a dojo.uuid.Uuid that was not a DCE Variant UUID.";
-dojo.lang.assert(this.getVariant()==dojo.uuid.Uuid.Variant.DCE,_14);
-var _15=this._uuidString.charAt(14);
-this._versionNumber=parseInt(_15,dojo.uuid.Uuid.HEX_RADIX);
-}
-return this._versionNumber;
-};
-dojo.uuid.Uuid.prototype.getNode=function(){
-if(!this._nodeString){
-var _16="Called getNode() on a dojo.uuid.Uuid that was not a TIME_BASED UUID.";
-dojo.lang.assert(this.getVersion()==dojo.uuid.Uuid.Version.TIME_BASED,_16);
-var _17=this._uuidString.split("-");
-this._nodeString=_17[4];
-}
-return this._nodeString;
-};
-dojo.uuid.Uuid.prototype.getTimestamp=function(_18){
-var _19="Called getTimestamp() on a dojo.uuid.Uuid that was not a TIME_BASED UUID.";
-dojo.lang.assert(this.getVersion()==dojo.uuid.Uuid.Version.TIME_BASED,_19);
-if(!_18){
-_18=null;
-}
-switch(_18){
-case "string":
-case String:
-return this.getTimestamp(Date).toUTCString();
-break;
-case "hex":
-if(!this._timestampAsHexString){
-var _1a=this._uuidString.split("-");
-var _1b=_1a[0];
-var _1c=_1a[1];
-var _1d=_1a[2];
-_1d=_1d.slice(1);
-this._timestampAsHexString=_1d+_1c+_1b;
-dojo.lang.assert(this._timestampAsHexString.length==15);
-}
-return this._timestampAsHexString;
-break;
-case null:
-case "date":
-case Date:
-if(!this._timestampAsDate){
-var _1e=3394248;
-var _1f=this._uuidString.split("-");
-var _20=parseInt(_1f[0],dojo.uuid.Uuid.HEX_RADIX);
-var _21=parseInt(_1f[1],dojo.uuid.Uuid.HEX_RADIX);
-var _22=parseInt(_1f[2],dojo.uuid.Uuid.HEX_RADIX);
-var _23=_22&4095;
-_23<<=16;
-_23+=_21;
-_23*=4294967296;
-_23+=_20;
-var _24=_23/10000;
-var _25=60*60;
-var _26=_1e;
-var _27=_26*_25;
-var _28=_27*1000;
-var _29=_24-_28;
-this._timestampAsDate=new Date(_29);
-}
-return this._timestampAsDate;
-break;
-default:
-dojo.lang.assert(false,"The getTimestamp() method dojo.uuid.Uuid was passed a bogus returnType: "+_18);
-break;
-}
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/__package__.js
deleted file mode 100644
index 4fa3a51..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/uuid/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.uuid.Uuid","dojo.uuid.LightweightGenerator","dojo.uuid.RandomGenerator","dojo.uuid.TimeBasedGenerator","dojo.uuid.NameBasedGenerator","dojo.uuid.NilGenerator"]});
-dojo.provide("dojo.uuid.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate.js
deleted file mode 100644
index dc912eb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.provide("dojo.validate");
-dojo.require("dojo.validate.common");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/__package__.js
deleted file mode 100644
index 9745090..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/__package__.js
+++ /dev/null
@@ -1,3 +0,0 @@
-dojo.require("dojo.validate");
-dojo.kwCompoundRequire({common:["dojo.validate.check","dojo.validate.datetime","dojo.validate.de","dojo.validate.jp","dojo.validate.us","dojo.validate.web"]});
-dojo.provide("dojo.validate.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/check.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/check.js
deleted file mode 100644
index 7e8a346..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/check.js
+++ /dev/null
@@ -1,221 +0,0 @@
-dojo.provide("dojo.validate.check");
-dojo.require("dojo.validate.common");
-dojo.require("dojo.lang.common");
-dojo.validate.check=function(_1,_2){
-var _3=[];
-var _4=[];
-var _5={isSuccessful:function(){
-return (!this.hasInvalid()&&!this.hasMissing());
-},hasMissing:function(){
-return (_3.length>0);
-},getMissing:function(){
-return _3;
-},isMissing:function(_6){
-for(var i=0;i<_3.length;i++){
-if(_6==_3[i]){
-return true;
-}
-}
-return false;
-},hasInvalid:function(){
-return (_4.length>0);
-},getInvalid:function(){
-return _4;
-},isInvalid:function(_8){
-for(var i=0;i<_4.length;i++){
-if(_8==_4[i]){
-return true;
-}
-}
-return false;
-}};
-if(_2.trim instanceof Array){
-for(var i=0;i<_2.trim.length;i++){
-var _b=_1[_2.trim[i]];
-if(dj_undef("type",_b)||_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
-continue;
-}
-_b.value=_b.value.replace(/(^\s*|\s*$)/g,"");
-}
-}
-if(_2.uppercase instanceof Array){
-for(var i=0;i<_2.uppercase.length;i++){
-var _b=_1[_2.uppercase[i]];
-if(dj_undef("type",_b)||_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
-continue;
-}
-_b.value=_b.value.toUpperCase();
-}
-}
-if(_2.lowercase instanceof Array){
-for(var i=0;i<_2.lowercase.length;i++){
-var _b=_1[_2.lowercase[i]];
-if(dj_undef("type",_b)||_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
-continue;
-}
-_b.value=_b.value.toLowerCase();
-}
-}
-if(_2.ucfirst instanceof Array){
-for(var i=0;i<_2.ucfirst.length;i++){
-var _b=_1[_2.ucfirst[i]];
-if(dj_undef("type",_b)||_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
-continue;
-}
-_b.value=_b.value.replace(/\b\w+\b/g,function(_c){
-return _c.substring(0,1).toUpperCase()+_c.substring(1).toLowerCase();
-});
-}
-}
-if(_2.digit instanceof Array){
-for(var i=0;i<_2.digit.length;i++){
-var _b=_1[_2.digit[i]];
-if(dj_undef("type",_b)||_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
-continue;
-}
-_b.value=_b.value.replace(/\D/g,"");
-}
-}
-if(_2.required instanceof Array){
-for(var i=0;i<_2.required.length;i++){
-if(!dojo.lang.isString(_2.required[i])){
-continue;
-}
-var _b=_1[_2.required[i]];
-if(!dj_undef("type",_b)&&(_b.type=="text"||_b.type=="textarea"||_b.type=="password"||_b.type=="file")&&/^\s*$/.test(_b.value)){
-_3[_3.length]=_b.name;
-}else{
-if(!dj_undef("type",_b)&&(_b.type=="select-one"||_b.type=="select-multiple")&&(_b.selectedIndex==-1||/^\s*$/.test(_b.options[_b.selectedIndex].value))){
-_3[_3.length]=_b.name;
-}else{
-if(dojo.lang.isArrayLike(_b)){
-var _d=false;
-for(var j=0;j<_b.length;j++){
-if(_b[j].checked){
-_d=true;
-}
-}
-if(!_d){
-_3[_3.length]=_b[0].name;
-}
-}
-}
-}
-}
-}
-if(_2.required instanceof Array){
-for(var i=0;i<_2.required.length;i++){
-if(!dojo.lang.isObject(_2.required[i])){
-continue;
-}
-var _b,_f;
-for(var _10 in _2.required[i]){
-_b=_1[_10];
-_f=_2.required[i][_10];
-}
-if(dojo.lang.isArrayLike(_b)){
-var _d=0;
-for(var j=0;j<_b.length;j++){
-if(_b[j].checked){
-_d++;
-}
-}
-if(_d<_f){
-_3[_3.length]=_b[0].name;
-}
-}else{
-if(!dj_undef("type",_b)&&_b.type=="select-multiple"){
-var _11=0;
-for(var j=0;j<_b.options.length;j++){
-if(_b.options[j].selected&&!/^\s*$/.test(_b.options[j].value)){
-_11++;
-}
-}
-if(_11<_f){
-_3[_3.length]=_b.name;
-}
-}
-}
-}
-}
-if(dojo.lang.isObject(_2.dependencies)||dojo.lang.isObject(_2.dependancies)){
-if(_2["dependancies"]){
-dojo.deprecated("dojo.validate.check","profile 'dependancies' is deprecated, please use "+"'dependencies'","0.5");
-_2.dependencies=_2.dependancies;
-}
-for(_10 in _2.dependencies){
-var _b=_1[_10];
-if(dj_undef("type",_b)){
-continue;
-}
-if(_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
-continue;
-}
-if(/\S+/.test(_b.value)){
-continue;
-}
-if(_5.isMissing(_b.name)){
-continue;
-}
-var _12=_1[_2.dependencies[_10]];
-if(_12.type!="text"&&_12.type!="textarea"&&_12.type!="password"){
-continue;
-}
-if(/^\s*$/.test(_12.value)){
-continue;
-}
-_3[_3.length]=_b.name;
-}
-}
-if(dojo.lang.isObject(_2.constraints)){
-for(_10 in _2.constraints){
-var _b=_1[_10];
-if(!_b){
-continue;
-}
-if(!dj_undef("tagName",_b)&&(_b.tagName.toLowerCase().indexOf("input")>=0||_b.tagName.toLowerCase().indexOf("textarea")>=0)&&/^\s*$/.test(_b.value)){
-continue;
-}
-var _13=true;
-if(dojo.lang.isFunction(_2.constraints[_10])){
-_13=_2.constraints[_10](_b.value);
-}else{
-if(dojo.lang.isArray(_2.constraints[_10])){
-if(dojo.lang.isArray(_2.constraints[_10][0])){
-for(var i=0;i<_2.constraints[_10].length;i++){
-_13=dojo.validate.evaluateConstraint(_2,_2.constraints[_10][i],_10,_b);
-if(!_13){
-break;
-}
-}
-}else{
-_13=dojo.validate.evaluateConstraint(_2,_2.constraints[_10],_10,_b);
-}
-}
-}
-if(!_13){
-_4[_4.length]=_b.name;
-}
-}
-}
-if(dojo.lang.isObject(_2.confirm)){
-for(_10 in _2.confirm){
-var _b=_1[_10];
-var _12=_1[_2.confirm[_10]];
-if(dj_undef("type",_b)||dj_undef("type",_12)||(_b.type!="text"&&_b.type!="textarea"&&_b.type!="password")||(_12.type!=_b.type)||(_12.value==_b.value)||(_5.isInvalid(_b.name))||(/^\s*$/.test(_12.value))){
-continue;
-}
-_4[_4.length]=_b.name;
-}
-}
-return _5;
-};
-dojo.validate.evaluateConstraint=function(_14,_15,_16,_17){
-var _18=_15[0];
-var _19=_15.slice(1);
-_19.unshift(_17.value);
-if(typeof _18!="undefined"){
-return _18.apply(null,_19);
-}
-return false;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/common.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/common.js
deleted file mode 100644
index 3ad0316..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/common.js
+++ /dev/null
@@ -1,83 +0,0 @@
-dojo.provide("dojo.validate.common");
-dojo.require("dojo.regexp");
-dojo.validate.isText=function(_1,_2){
-_2=(typeof _2=="object")?_2:{};
-if(/^\s*$/.test(_1)){
-return false;
-}
-if(typeof _2.length=="number"&&_2.length!=_1.length){
-return false;
-}
-if(typeof _2.minlength=="number"&&_2.minlength>_1.length){
-return false;
-}
-if(typeof _2.maxlength=="number"&&_2.maxlength<_1.length){
-return false;
-}
-return true;
-};
-dojo.validate.isInteger=function(_3,_4){
-var re=new RegExp("^"+dojo.regexp.integer(_4)+"$");
-return re.test(_3);
-};
-dojo.validate.isRealNumber=function(_6,_7){
-var re=new RegExp("^"+dojo.regexp.realNumber(_7)+"$");
-return re.test(_6);
-};
-dojo.validate.isCurrency=function(_9,_a){
-var re=new RegExp("^"+dojo.regexp.currency(_a)+"$");
-return re.test(_9);
-};
-dojo.validate._isInRangeCache={};
-dojo.validate.isInRange=function(_c,_d){
-_c=_c.replace(dojo.lang.has(_d,"separator")?_d.separator:",","","g").replace(dojo.lang.has(_d,"symbol")?_d.symbol:"$","");
-if(isNaN(_c)){
-return false;
-}
-_d=(typeof _d=="object")?_d:{};
-var _e=(typeof _d.max=="number")?_d.max:Infinity;
-var _f=(typeof _d.min=="number")?_d.min:-Infinity;
-var dec=(typeof _d.decimal=="string")?_d.decimal:".";
-var _11=dojo.validate._isInRangeCache;
-var _12=_c+"max"+_e+"min"+_f+"dec"+dec;
-if(typeof _11[_12]!="undefined"){
-return _11[_12];
-}
-var _13="[^"+dec+"\\deE+-]";
-_c=_c.replace(RegExp(_13,"g"),"");
-_c=_c.replace(/^([+-]?)(\D*)/,"$1");
-_c=_c.replace(/(\D*)$/,"");
-_13="(\\d)["+dec+"](\\d)";
-_c=_c.replace(RegExp(_13,"g"),"$1.$2");
-_c=Number(_c);
-if(_c<_f||_c>_e){
-_11[_12]=false;
-return false;
-}
-_11[_12]=true;
-return true;
-};
-dojo.validate.isNumberFormat=function(_14,_15){
-var re=new RegExp("^"+dojo.regexp.numberFormat(_15)+"$","i");
-return re.test(_14);
-};
-dojo.validate.isValidLuhn=function(_17){
-var sum,_19,_1a;
-if(typeof _17!="string"){
-_17=String(_17);
-}
-_17=_17.replace(/[- ]/g,"");
-_19=_17.length%2;
-sum=0;
-for(var i=0;i<_17.length;i++){
-_1a=parseInt(_17.charAt(i));
-if(i%2==_19){
-_1a*=2;
-}
-if(_1a>9){
-_1a-=9;
-}
-sum+=_1a;
-}
-return !(sum%10);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/creditCard.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/creditCard.js
deleted file mode 100644
index 8c9fd91..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/creditCard.js
+++ /dev/null
@@ -1,51 +0,0 @@
-dojo.provide("dojo.validate.creditCard");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.validate.common");
-dojo.validate.isValidCreditCard=function(_1,_2){
-if(_1&&_2&&((_2.toLowerCase()=="er"||dojo.validate.isValidLuhn(_1))&&(dojo.validate.isValidCreditCardNumber(_1,_2.toLowerCase())))){
-return true;
-}
-return false;
-};
-dojo.validate.isValidCreditCardNumber=function(_3,_4){
-if(typeof _3!="string"){
-_3=String(_3);
-}
-_3=_3.replace(/[- ]/g,"");
-var _5=[];
-var _6={"mc":"5[1-5][0-9]{14}","ec":"5[1-5][0-9]{14}","vi":"4([0-9]{12}|[0-9]{15})","ax":"3[47][0-9]{13}","dc":"3(0[0-5][0-9]{11}|[68][0-9]{12})","bl":"3(0[0-5][0-9]{11}|[68][0-9]{12})","di":"6011[0-9]{12}","jcb":"(3[0-9]{15}|(2131|1800)[0-9]{11})","er":"2(014|149)[0-9]{11}"};
-if(_4&&dojo.lang.has(_6,_4.toLowerCase())){
-return Boolean(_3.match(_6[_4.toLowerCase()]));
-}else{
-for(var p in _6){
-if(_3.match("^"+_6[p]+"$")!=null){
-_5.push(p);
-}
-}
-return (_5.length)?_5.join("|"):false;
-}
-};
-dojo.validate.isValidCvv=function(_8,_9){
-if(typeof _8!="string"){
-_8=String(_8);
-}
-var _a;
-switch(_9.toLowerCase()){
-case "mc":
-case "ec":
-case "vi":
-case "di":
-_a="###";
-break;
-case "ax":
-_a="####";
-break;
-default:
-return false;
-}
-var _b={format:_a};
-if((_8.length==_a.length)&&(dojo.validate.isNumberFormat(_8,_b))){
-return true;
-}
-return false;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/datetime.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/datetime.js
deleted file mode 100644
index 54b95e4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/datetime.js
+++ /dev/null
@@ -1,79 +0,0 @@
-dojo.provide("dojo.validate.datetime");
-dojo.require("dojo.validate.common");
-dojo.validate.isValidTime=function(_1,_2){
-dojo.deprecated("dojo.validate.datetime","use dojo.date.parse instead","0.5");
-var re=new RegExp("^"+dojo.regexp.time(_2)+"$","i");
-return re.test(_1);
-};
-dojo.validate.is12HourTime=function(_4){
-dojo.deprecated("dojo.validate.datetime","use dojo.date.parse instead","0.5");
-return dojo.validate.isValidTime(_4,{format:["h:mm:ss t","h:mm t"]});
-};
-dojo.validate.is24HourTime=function(_5){
-dojo.deprecated("dojo.validate.datetime","use dojo.date.parse instead","0.5");
-return dojo.validate.isValidTime(_5,{format:["HH:mm:ss","HH:mm"]});
-};
-dojo.validate.isValidDate=function(_6,_7){
-dojo.deprecated("dojo.validate.datetime","use dojo.date.parse instead","0.5");
-if(typeof _7=="object"&&typeof _7.format=="string"){
-_7=_7.format;
-}
-if(typeof _7!="string"){
-_7="MM/DD/YYYY";
-}
-var _8=_7.replace(/([$^.*+?=!:|\/\\\(\)\[\]\{\}])/g,"\\$1");
-_8=_8.replace("YYYY","([0-9]{4})");
-_8=_8.replace("MM","(0[1-9]|10|11|12)");
-_8=_8.replace("M","([1-9]|10|11|12)");
-_8=_8.replace("DDD","(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])");
-_8=_8.replace("DD","(0[1-9]|[12][0-9]|30|31)");
-_8=_8.replace("D","([1-9]|[12][0-9]|30|31)");
-_8=_8.replace("ww","(0[1-9]|[1-4][0-9]|5[0-3])");
-_8=_8.replace("d","([1-7])");
-_8="^"+_8+"$";
-var re=new RegExp(_8);
-if(!re.test(_6)){
-return false;
-}
-var _a=0,_b=1,_c=1,_d=1,_e=1,_f=1;
-var _10=_7.match(/(YYYY|MM|M|DDD|DD|D|ww|d)/g);
-var _11=re.exec(_6);
-for(var i=0;i<_10.length;i++){
-switch(_10[i]){
-case "YYYY":
-_a=Number(_11[i+1]);
-break;
-case "M":
-case "MM":
-_b=Number(_11[i+1]);
-break;
-case "D":
-case "DD":
-_c=Number(_11[i+1]);
-break;
-case "DDD":
-_d=Number(_11[i+1]);
-break;
-case "ww":
-_e=Number(_11[i+1]);
-break;
-case "d":
-_f=Number(_11[i+1]);
-break;
-}
-}
-var _13=(_a%4==0&&(_a%100!=0||_a%400==0));
-if(_c==31&&(_b==4||_b==6||_b==9||_b==11)){
-return false;
-}
-if(_c>=30&&_b==2){
-return false;
-}
-if(_c==29&&_b==2&&!_13){
-return false;
-}
-if(_d==366&&!_13){
-return false;
-}
-return true;
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/de.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/de.js
deleted file mode 100644
index 7a52442..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/de.js
+++ /dev/null
@@ -1,6 +0,0 @@
-dojo.provide("dojo.validate.de");
-dojo.require("dojo.validate.common");
-dojo.validate.isGermanCurrency=function(_1){
-var _2={symbol:"\u20ac",placement:"after",signPlacement:"begin",decimal:",",separator:"."};
-return dojo.validate.isCurrency(_1,_2);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/jp.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/jp.js
deleted file mode 100644
index 16e62d1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/jp.js
+++ /dev/null
@@ -1,6 +0,0 @@
-dojo.provide("dojo.validate.jp");
-dojo.require("dojo.validate.common");
-dojo.validate.isJapaneseCurrency=function(_1){
-var _2={symbol:"\xa5",fractional:false};
-return dojo.validate.isCurrency(_1,_2);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/us.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/us.js
deleted file mode 100644
index 6c85631..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/us.js
+++ /dev/null
@@ -1,21 +0,0 @@
-dojo.provide("dojo.validate.us");
-dojo.require("dojo.validate.common");
-dojo.validate.us.isCurrency=function(_1,_2){
-return dojo.validate.isCurrency(_1,_2);
-};
-dojo.validate.us.isState=function(_3,_4){
-var re=new RegExp("^"+dojo.regexp.us.state(_4)+"$","i");
-return re.test(_3);
-};
-dojo.validate.us.isPhoneNumber=function(_6){
-var _7={format:["###-###-####","(###) ###-####","(###) ### ####","###.###.####","###/###-####","### ### ####","###-###-#### x#???","(###) ###-#### x#???","(###) ### #### x#???","###.###.#### x#???","###/###-#### x#???","### ### #### x#???","##########"]};
-return dojo.validate.isNumberFormat(_6,_7);
-};
-dojo.validate.us.isSocialSecurityNumber=function(_8){
-var _9={format:["###-##-####","### ## ####","#########"]};
-return dojo.validate.isNumberFormat(_8,_9);
-};
-dojo.validate.us.isZipCode=function(_a){
-var _b={format:["#####-####","##### ####","#########","#####"]};
-return dojo.validate.isNumberFormat(_a,_b);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/web.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/web.js
deleted file mode 100644
index 120ea09..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/validate/web.js
+++ /dev/null
@@ -1,30 +0,0 @@
-dojo.provide("dojo.validate.web");
-dojo.require("dojo.validate.common");
-dojo.validate.isIpAddress=function(_1,_2){
-var re=new RegExp("^"+dojo.regexp.ipAddress(_2)+"$","i");
-return re.test(_1);
-};
-dojo.validate.isUrl=function(_4,_5){
-var re=new RegExp("^"+dojo.regexp.url(_5)+"$","i");
-return re.test(_4);
-};
-dojo.validate.isEmailAddress=function(_7,_8){
-var re=new RegExp("^"+dojo.regexp.emailAddress(_8)+"$","i");
-return re.test(_7);
-};
-dojo.validate.isEmailAddressList=function(_a,_b){
-var re=new RegExp("^"+dojo.regexp.emailAddressList(_b)+"$","i");
-return re.test(_a);
-};
-dojo.validate.getEmailAddressList=function(_d,_e){
-if(!_e){
-_e={};
-}
-if(!_e.listSeparator){
-_e.listSeparator="\\s;,";
-}
-if(dojo.validate.isEmailAddressList(_d,_e)){
-return _d.split(new RegExp("\\s*["+_e.listSeparator+"]\\s*"));
-}
-return [];
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/AccordionContainer.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/AccordionContainer.js
deleted file mode 100644
index 0d08c41..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/AccordionContainer.js
+++ /dev/null
@@ -1,115 +0,0 @@
-dojo.provide("dojo.widget.AccordionContainer");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.html.*");
-dojo.require("dojo.lfx.html");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.widget.html.layout");
-dojo.require("dojo.widget.PageContainer");
-dojo.widget.defineWidget("dojo.widget.AccordionContainer",dojo.widget.HtmlWidget,{isContainer:true,labelNodeClass:"label",containerNodeClass:"accBody",duration:250,fillInTemplate:function(){
-with(this.domNode.style){
-if(position!="absolute"){
-position="relative";
-}
-overflow="hidden";
-}
-},addChild:function(_1){
-var _2=this._addChild(_1);
-this._setSizes();
-return _2;
-},_addChild:function(_3){
-if(_3.open){
-dojo.deprecated("open parameter deprecated, use 'selected=true' instead will be removed in ","0.5");
-dojo.debug(_3.widgetId+": open == "+_3.open);
-_3.selected=true;
-}
-if(_3.widgetType!="AccordionPane"){
-var _4=dojo.widget.createWidget("AccordionPane",{label:_3.label,selected:_3.selected,labelNodeClass:this.labelNodeClass,containerNodeClass:this.containerNodeClass,allowCollapse:this.allowCollapse});
-_4.addChild(_3);
-this.addWidgetAsDirectChild(_4);
-this.registerChild(_4,this.children.length);
-return _4;
-}else{
-dojo.html.addClass(_3.containerNode,this.containerNodeClass);
-dojo.html.addClass(_3.labelNode,this.labelNodeClass);
-this.addWidgetAsDirectChild(_3);
-this.registerChild(_3,this.children.length);
-return _3;
-}
-},postCreate:function(){
-var _5=this.children;
-this.children=[];
-dojo.html.removeChildren(this.domNode);
-dojo.lang.forEach(_5,dojo.lang.hitch(this,"_addChild"));
-this._setSizes();
-},removeChild:function(_6){
-dojo.widget.AccordionContainer.superclass.removeChild.call(this,_6);
-this._setSizes();
-},onResized:function(){
-this._setSizes();
-},_setSizes:function(){
-var _7=0;
-var _8=0;
-dojo.lang.forEach(this.children,function(_9,_a){
-_7+=_9.getLabelHeight();
-if(_9.selected){
-_8=_a;
-}
-});
-var _b=dojo.html.getContentBox(this.domNode);
-var y=0;
-dojo.lang.forEach(this.children,function(_d,_e){
-var _f=_d.getLabelHeight();
-_d.resizeTo(_b.width,_b.height-_7+_f);
-_d.domNode.style.zIndex=_e+1;
-_d.domNode.style.position="absolute";
-_d.domNode.style.top=y+"px";
-y+=(_e==_8)?dojo.html.getBorderBox(_d.domNode).height:_f;
-});
-},selectChild:function(_10){
-dojo.lang.forEach(this.children,function(_11){
-_11.setSelected(_11==_10);
-});
-var y=0;
-var _13=[];
-dojo.lang.forEach(this.children,function(_14,idx){
-if(_14.domNode.style.top!=(y+"px")){
-_13.push(dojo.lfx.html.slideTo(_14.domNode,{top:y,left:0},this.duration));
-}
-y+=_14.selected?dojo.html.getBorderBox(_14.domNode).height:_14.getLabelHeight();
-},this);
-dojo.lfx.combine(_13).play();
-}});
-dojo.widget.defineWidget("dojo.widget.AccordionPane",dojo.widget.HtmlWidget,{label:"","class":"dojoAccordionPane",labelNodeClass:"label",containerNodeClass:"accBody",selected:false,templateString:"<div dojoAttachPoint=\"domNode\">\n<div dojoAttachPoint=\"labelNode\" dojoAttachEvent=\"onclick: onLabelClick\" class=\"${this.labelNodeClass}\">${this.label}</div>\n<div dojoAttachPoint=\"containerNode\" style=\"overflow: hidden;\" class=\"${this.containerNodeClass}\"></div>\n</div>\n",templateCssString:".dojoAccordionPane .label {\n\tcolor: #000;\n\tfont-weight: bold;\n\tbackground: url(\"images/soriaAccordionOff.gif\") repeat-x top left #85aeec;\n\tborder:1px solid #d9d9d9;\n\tfont-size:0.9em;\n}\n\n.dojoAccordionPane-selected .label {\n\tbackground: url(\"images/soriaAccordionSelected.gif\") repeat-x top left #85aeec;\n\tborder:1px solid #84a3d1;\n}\n\n.dojoAccordionPane .label:hover {\n\tcursor: pointer;\n}\n\n.dojoAccordionPane .accBody {\n\tbackground: #fff;\n\toverflow: auto;\n\tborder:1px solid #84a3d1;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/AccordionPane.css"),isContainer:true,fillInTemplate:function(){
-dojo.html.addClass(this.domNode,this["class"]);
-dojo.widget.AccordionPane.superclass.fillInTemplate.call(this);
-dojo.html.disableSelection(this.labelNode);
-this.setSelected(this.selected);
-},setLabel:function(_16){
-this.labelNode.innerHTML=_16;
-},resizeTo:function(_17,_18){
-dojo.html.setMarginBox(this.domNode,{width:_17,height:_18});
-var _19=[{domNode:this.labelNode,layoutAlign:"top"},{domNode:this.containerNode,layoutAlign:"client"}];
-dojo.widget.html.layout(this.domNode,_19);
-var _1a=dojo.html.getContentBox(this.containerNode);
-this.children[0].resizeTo(_1a.width,_1a.height);
-},getLabelHeight:function(){
-return dojo.html.getMarginBox(this.labelNode).height;
-},onLabelClick:function(){
-this.parent.selectChild(this);
-},setSelected:function(_1b){
-this.selected=_1b;
-(_1b?dojo.html.addClass:dojo.html.removeClass)(this.domNode,this["class"]+"-selected");
-var _1c=this.children[0];
-if(_1c){
-if(_1b){
-if(!_1c.isShowing()){
-_1c.show();
-}else{
-_1c.onShow();
-}
-}else{
-_1c.onHide();
-}
-}
-}});
-dojo.lang.extend(dojo.widget.Widget,{open:false});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/AnimatedPng.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/AnimatedPng.js
deleted file mode 100644
index edf4a7d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/AnimatedPng.js
+++ /dev/null
@@ -1,34 +0,0 @@
-dojo.provide("dojo.widget.AnimatedPng");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.widget.defineWidget("dojo.widget.AnimatedPng",dojo.widget.HtmlWidget,{isContainer:false,width:0,height:0,aniSrc:"",interval:100,_blankSrc:dojo.uri.moduleUri("dojo.widget","templates/images/blank.gif"),templateString:"<img class=\"dojoAnimatedPng\" />",postCreate:function(){
-this.cellWidth=this.width;
-this.cellHeight=this.height;
-var _1=new Image();
-var _2=this;
-_1.onload=function(){
-_2._initAni(_1.width,_1.height);
-};
-_1.src=this.aniSrc;
-},_initAni:function(w,h){
-this.domNode.src=this._blankSrc;
-this.domNode.width=this.cellWidth;
-this.domNode.height=this.cellHeight;
-this.domNode.style.backgroundImage="url("+this.aniSrc+")";
-this.domNode.style.backgroundRepeat="no-repeat";
-this.aniCols=Math.floor(w/this.cellWidth);
-this.aniRows=Math.floor(h/this.cellHeight);
-this.aniCells=this.aniCols*this.aniRows;
-this.aniFrame=0;
-window.setInterval(dojo.lang.hitch(this,"_tick"),this.interval);
-},_tick:function(){
-this.aniFrame++;
-if(this.aniFrame==this.aniCells){
-this.aniFrame=0;
-}
-var _5=this.aniFrame%this.aniCols;
-var _6=Math.floor(this.aniFrame/this.aniCols);
-var bx=-1*_5*this.cellWidth;
-var by=-1*_6*this.cellHeight;
-this.domNode.style.backgroundPosition=bx+"px "+by+"px";
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Button.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Button.js
deleted file mode 100644
index 7a2a3af..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Button.js
+++ /dev/null
@@ -1,246 +0,0 @@
-dojo.provide("dojo.widget.Button");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.html.*");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.widget.*");
-dojo.widget.defineWidget("dojo.widget.Button",dojo.widget.HtmlWidget,{isContainer:true,caption:"",templateString:"<div dojoAttachPoint=\"buttonNode\" class=\"dojoButton\" style=\"position:relative;\" dojoAttachEvent=\"onMouseOver; onMouseOut; onMouseDown; onMouseUp; onClick:buttonClick; onKey:onKey; onFocus;\">\n  <div class=\"dojoButtonContents\" align=center dojoAttachPoint=\"containerNode\" style=\"position:absolute;z-index:2;\"></div>\n  <img dojoAttachPoint=\"leftImage\" style=\"position:absolute;left:0px;\">\n  <img dojoAttachPoint=\"centerImage\" style=\"position:absolute;z-index:1;\">\n  <img dojoAttachPoint=\"rightImage\" style=\"position:absolute;top:0px;right:0px;\">\n</div>\n",templateCssString:"/* ---- button --- */\n.dojoButton {\n\tpadding: 0 0 0 0;\n\tfont-size: 8pt;\n\twhite-space: nowrap;\n\tcursor: pointer;\n\tfont-family: Myriad, Tahoma, Verdana, sans-serif;\n}\n\n.dojoButton .dojoButtonContents {\n\tpadding: 2px 2px 2px 2px;\n\ttext-align: center;\t\t/* if icon and label are split across two lines, center icon */\n\tcolor: white;\n}\n\n.dojoButtonLeftPart .dojoButtonContents {\n\tpadding-right: 8px;\n}\n\n.dojoButtonDisabled {\n\tcursor: url(\"images/no.gif\"), default;\n}\n\n\n.dojoButtonContents img {\n\tvertical-align: middle;\t/* if icon and label are on same line, center them */\n}\n\n/* -------- colors ------------ */\n\n.dojoButtonHover .dojoButtonContents {\n}\n\n.dojoButtonDepressed .dojoButtonContents {\n\tcolor: #293a4b;\n}\n\n.dojoButtonDisabled .dojoButtonContents {\n\tcolor: #aaa;\n}\n\n\n/* ---------- drop down button specific ---------- */\n\n/* border between label and arrow (for drop down buttons */\n.dojoButton .border {\n\twidth: 1px;\n\tbackground: gray;\n}\n\n/* button arrow */\n.dojoButton .downArrow {\n\tpadding-left: 10px;\n\ttext-align: center;\n}\n\n.dojoButton.disabled .downArrow {\n\tcursor : default;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/ButtonTemplate.css"),inactiveImg:"templates/images/soriaButton-",activeImg:"templates/images/soriaActive-",pressedImg:"templates/images/soriaPressed-",disabledImg:"templates/images/soriaDisabled-",width2height:1/3,fillInTemplate:function(){
-if(this.caption){
-this.containerNode.appendChild(document.createTextNode(this.caption));
-}
-dojo.html.disableSelection(this.containerNode);
-},postCreate:function(){
-this._sizeMyself();
-},_sizeMyself:function(){
-if(this.domNode.parentNode){
-var _1=document.createElement("span");
-dojo.html.insertBefore(_1,this.domNode);
-}
-dojo.body().appendChild(this.domNode);
-this._sizeMyselfHelper();
-if(_1){
-dojo.html.insertBefore(this.domNode,_1);
-dojo.html.removeNode(_1);
-}
-},_sizeMyselfHelper:function(){
-var mb=dojo.html.getMarginBox(this.containerNode);
-this.height=mb.height;
-this.containerWidth=mb.width;
-var _3=this.height*this.width2height;
-this.containerNode.style.left=_3+"px";
-this.leftImage.height=this.rightImage.height=this.centerImage.height=this.height;
-this.leftImage.width=this.rightImage.width=_3+1;
-this.centerImage.width=this.containerWidth;
-this.centerImage.style.left=_3+"px";
-this._setImage(this.disabled?this.disabledImg:this.inactiveImg);
-if(this.disabled){
-dojo.html.prependClass(this.domNode,"dojoButtonDisabled");
-this.domNode.removeAttribute("tabIndex");
-dojo.widget.wai.setAttr(this.domNode,"waiState","disabled",true);
-}else{
-dojo.html.removeClass(this.domNode,"dojoButtonDisabled");
-this.domNode.setAttribute("tabIndex","0");
-dojo.widget.wai.setAttr(this.domNode,"waiState","disabled",false);
-}
-this.domNode.style.height=this.height+"px";
-this.domNode.style.width=(this.containerWidth+2*_3)+"px";
-},onMouseOver:function(e){
-if(this.disabled){
-return;
-}
-if(!dojo.html.hasClass(this.buttonNode,"dojoButtonHover")){
-dojo.html.prependClass(this.buttonNode,"dojoButtonHover");
-}
-this._setImage(this.activeImg);
-},onMouseDown:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.prependClass(this.buttonNode,"dojoButtonDepressed");
-dojo.html.removeClass(this.buttonNode,"dojoButtonHover");
-this._setImage(this.pressedImg);
-},onMouseUp:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.prependClass(this.buttonNode,"dojoButtonHover");
-dojo.html.removeClass(this.buttonNode,"dojoButtonDepressed");
-this._setImage(this.activeImg);
-},onMouseOut:function(e){
-if(this.disabled){
-return;
-}
-if(e.toElement&&dojo.html.isDescendantOf(e.toElement,this.buttonNode)){
-return;
-}
-dojo.html.removeClass(this.buttonNode,"dojoButtonHover");
-dojo.html.removeClass(this.buttonNode,"dojoButtonDepressed");
-this._setImage(this.inactiveImg);
-},onKey:function(e){
-if(!e.key){
-return;
-}
-var _9=dojo.widget.getWidgetById(this.menuId);
-if(e.key==e.KEY_ENTER||e.key==" "){
-this.onMouseDown(e);
-this.buttonClick(e);
-dojo.lang.setTimeout(this,"onMouseUp",75,e);
-dojo.event.browser.stopEvent(e);
-}
-if(_9&&_9.isShowingNow&&e.key==e.KEY_DOWN_ARROW){
-dojo.event.disconnect(this.domNode,"onblur",this,"onBlur");
-}
-},onFocus:function(e){
-var _b=dojo.widget.getWidgetById(this.menuId);
-if(_b){
-dojo.event.connectOnce(this.domNode,"onblur",this,"onBlur");
-}
-},onBlur:function(e){
-var _d=dojo.widget.getWidgetById(this.menuId);
-if(!_d){
-return;
-}
-if(_d.close&&_d.isShowingNow){
-_d.close();
-}
-},buttonClick:function(e){
-if(!this.disabled){
-try{
-this.domNode.focus();
-}
-catch(e2){
-}
-this.onClick(e);
-}
-},onClick:function(e){
-},_setImage:function(_10){
-this.leftImage.src=dojo.uri.moduleUri("dojo.widget",_10+"l.gif");
-this.centerImage.src=dojo.uri.moduleUri("dojo.widget",_10+"c.gif");
-this.rightImage.src=dojo.uri.moduleUri("dojo.widget",_10+"r.gif");
-},_toggleMenu:function(_11){
-var _12=dojo.widget.getWidgetById(_11);
-if(!_12){
-return;
-}
-if(_12.open&&!_12.isShowingNow){
-var pos=dojo.html.getAbsolutePosition(this.domNode,false);
-_12.open(pos.x,pos.y+this.height,this);
-dojo.event.disconnect(this.domNode,"onblur",this,"onBlur");
-}else{
-if(_12.close&&_12.isShowingNow){
-_12.close();
-}else{
-_12.toggle();
-}
-}
-},setCaption:function(_14){
-this.caption=_14;
-this.containerNode.innerHTML=_14;
-this._sizeMyself();
-},setDisabled:function(_15){
-this.disabled=_15;
-this._sizeMyself();
-}});
-dojo.widget.defineWidget("dojo.widget.DropDownButton",dojo.widget.Button,{menuId:"",downArrow:"templates/images/whiteDownArrow.gif",disabledDownArrow:"templates/images/whiteDownArrow.gif",fillInTemplate:function(){
-dojo.widget.DropDownButton.superclass.fillInTemplate.apply(this,arguments);
-this.arrow=document.createElement("img");
-dojo.html.setClass(this.arrow,"downArrow");
-dojo.widget.wai.setAttr(this.domNode,"waiState","haspopup",this.menuId);
-},_sizeMyselfHelper:function(){
-this.arrow.src=dojo.uri.moduleUri("dojo.widget",this.disabled?this.disabledDownArrow:this.downArrow);
-this.containerNode.appendChild(this.arrow);
-dojo.widget.DropDownButton.superclass._sizeMyselfHelper.call(this);
-},onClick:function(e){
-this._toggleMenu(this.menuId);
-}});
-dojo.widget.defineWidget("dojo.widget.ComboButton",dojo.widget.Button,{menuId:"",templateString:"<div class=\"dojoButton\" style=\"position:relative;top:0px;left:0px; text-align:none;\" dojoAttachEvent=\"onKey;onFocus\">\n\n\t<div dojoAttachPoint=\"buttonNode\" class=\"dojoButtonLeftPart\" style=\"position:absolute;left:0px;top:0px;\"\n\t\tdojoAttachEvent=\"onMouseOver; onMouseOut; onMouseDown; onMouseUp; onClick:buttonClick;\">\n\t\t<div class=\"dojoButtonContents\" dojoAttachPoint=\"containerNode\" style=\"position:absolute;top:0px;right:0px;z-index:2;\"></div>\n\t\t<img dojoAttachPoint=\"leftImage\" style=\"position:absolute;left:0px;top:0px;\">\n\t\t<img dojoAttachPoint=\"centerImage\" style=\"position:absolute;right:0px;top:0px;z-index:1;\">\n\t</div>\n\n\t<div dojoAttachPoint=\"rightPart\" class=\"dojoButtonRightPart\" style=\"position:absolute;top:0px;right:0px;\"\n\t\tdojoAttachEvent=\"onMouseOver:rightOver; onMouseOut:rightOut; onMouseDown:rightDown; onMouseUp:rightUp; onClick:rightClick;\">\n\t\t<img dojoAttachPoint=\"arrowBackgroundImage\" style=\"position:absolute;top:0px;left:0px;z-index:1;\">\n\t\t<img src=\"${dojoWidgetModuleUri}templates/images/whiteDownArrow.gif\"\n\t\t  \t\tstyle=\"z-index:2;position:absolute;left:3px;top:50%;\">\n\t\t<img dojoAttachPoint=\"rightImage\" style=\"position:absolute;top:0px;right:0px;\">\n\t</div>\n\n</div>\n",splitWidth:2,arrowWidth:5,_sizeMyselfHelper:function(e){
-var mb=dojo.html.getMarginBox(this.containerNode);
-this.height=mb.height;
-this.containerWidth=mb.width;
-var _19=this.height/3;
-if(this.disabled){
-dojo.widget.wai.setAttr(this.domNode,"waiState","disabled",true);
-this.domNode.removeAttribute("tabIndex");
-}else{
-dojo.widget.wai.setAttr(this.domNode,"waiState","disabled",false);
-this.domNode.setAttribute("tabIndex","0");
-}
-this.leftImage.height=this.rightImage.height=this.centerImage.height=this.arrowBackgroundImage.height=this.height;
-this.leftImage.width=_19+1;
-this.centerImage.width=this.containerWidth;
-this.buttonNode.style.height=this.height+"px";
-this.buttonNode.style.width=_19+this.containerWidth+"px";
-this._setImage(this.disabled?this.disabledImg:this.inactiveImg);
-this.arrowBackgroundImage.width=this.arrowWidth;
-this.rightImage.width=_19+1;
-this.rightPart.style.height=this.height+"px";
-this.rightPart.style.width=this.arrowWidth+_19+"px";
-this._setImageR(this.disabled?this.disabledImg:this.inactiveImg);
-this.domNode.style.height=this.height+"px";
-var _1a=this.containerWidth+this.splitWidth+this.arrowWidth+2*_19;
-this.domNode.style.width=_1a+"px";
-},_setImage:function(_1b){
-this.leftImage.src=dojo.uri.moduleUri("dojo.widget",_1b+"l.gif");
-this.centerImage.src=dojo.uri.moduleUri("dojo.widget",_1b+"c.gif");
-},rightOver:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.prependClass(this.rightPart,"dojoButtonHover");
-this._setImageR(this.activeImg);
-},rightDown:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.prependClass(this.rightPart,"dojoButtonDepressed");
-dojo.html.removeClass(this.rightPart,"dojoButtonHover");
-this._setImageR(this.pressedImg);
-},rightUp:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.prependClass(this.rightPart,"dojoButtonHover");
-dojo.html.removeClass(this.rightPart,"dojoButtonDepressed");
-this._setImageR(this.activeImg);
-},rightOut:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.removeClass(this.rightPart,"dojoButtonHover");
-dojo.html.removeClass(this.rightPart,"dojoButtonDepressed");
-this._setImageR(this.inactiveImg);
-},rightClick:function(e){
-if(this.disabled){
-return;
-}
-try{
-this.domNode.focus();
-}
-catch(e2){
-}
-this._toggleMenu(this.menuId);
-},_setImageR:function(_21){
-this.arrowBackgroundImage.src=dojo.uri.moduleUri("dojo.widget",_21+"c.gif");
-this.rightImage.src=dojo.uri.moduleUri("dojo.widget",_21+"r.gif");
-},onKey:function(e){
-if(!e.key){
-return;
-}
-var _23=dojo.widget.getWidgetById(this.menuId);
-if(e.key==e.KEY_ENTER||e.key==" "){
-this.onMouseDown(e);
-this.buttonClick(e);
-dojo.lang.setTimeout(this,"onMouseUp",75,e);
-dojo.event.browser.stopEvent(e);
-}else{
-if(e.key==e.KEY_DOWN_ARROW&&e.altKey){
-this.rightDown(e);
-this.rightClick(e);
-dojo.lang.setTimeout(this,"rightUp",75,e);
-dojo.event.browser.stopEvent(e);
-}else{
-if(_23&&_23.isShowingNow&&e.key==e.KEY_DOWN_ARROW){
-dojo.event.disconnect(this.domNode,"onblur",this,"onBlur");
-}
-}
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Chart.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Chart.js
deleted file mode 100644
index 1df2842..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Chart.js
+++ /dev/null
@@ -1,220 +0,0 @@
-dojo.provide("dojo.widget.Chart");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.gfx.color.hsl");
-dojo.declare("dojo.widget.Chart",null,function(){
-this.series=[];
-},{isContainer:false,assignColors:function(){
-var _1=30;
-var _2=120;
-var _3=120;
-var _4=Math.round(330/this.series.length);
-for(var i=0;i<this.series.length;i++){
-var c=dojo.gfx.color.hsl2rgb(_1,_2,_3);
-if(!this.series[i].color){
-this.series[i].color=dojo.gfx.color.rgb2hex(c[0],c[1],c[2]);
-}
-_1+=_4;
-}
-},parseData:function(_7){
-var _8=_7.getElementsByTagName("thead")[0];
-var _9=_7.getElementsByTagName("tbody")[0];
-if(!(_8&&_9)){
-dojo.raise("dojo.widget.Chart: supplied table must define a head and a body.");
-}
-var _a=_8.getElementsByTagName("tr")[0].getElementsByTagName("th");
-for(var i=1;i<_a.length;i++){
-var _c="column"+i;
-var _d=_a[i].innerHTML;
-var _e=_a[i].getAttribute("plotType")||"line";
-var _f=_a[i].getAttribute("color");
-var ds=new dojo.widget.Chart.DataSeries(_c,_d,_e,_f);
-this.series.push(ds);
-}
-var _11=_9.rows;
-var _12=Number.MAX_VALUE,_13=Number.MIN_VALUE;
-var _14=Number.MAX_VALUE,_15=Number.MIN_VALUE;
-var _16=["accesskey","align","bgcolor","class","colspan","height","id","nowrap","rowspan","style","tabindex","title","valign","width"];
-for(var i=0;i<_11.length;i++){
-var row=_11[i];
-var _18=row.cells;
-var x=Number.MIN_VALUE;
-for(var j=0;j<_18.length;j++){
-if(j==0){
-x=parseFloat(_18[j].innerHTML);
-_12=Math.min(_12,x);
-_13=Math.max(_13,x);
-}else{
-var ds=this.series[j-1];
-var y=parseFloat(_18[j].innerHTML);
-_14=Math.min(_14,y);
-_15=Math.max(_15,y);
-var o={x:x,value:y};
-var _1d=_18[j].attributes;
-for(var k=0;k<_1d.length;k++){
-var _1f=_1d.item(k);
-var _20=false;
-for(var l=0;l<_16.length;l++){
-if(_1f.nodeName.toLowerCase()==_16[l]){
-_20=true;
-break;
-}
-}
-if(!_20){
-o[_1f.nodeName]=_1f.nodeValue;
-}
-}
-ds.add(o);
-}
-}
-}
-return {x:{min:_12,max:_13},y:{min:_14,max:_15}};
-}});
-dojo.declare("dojo.widget.Chart.DataSeries",null,function(key,_23,_24,_25){
-this.id="DataSeries"+dojo.widget.Chart.DataSeries.count++;
-this.key=key;
-this.label=_23||this.id;
-this.plotType=_24||"line";
-this.color=_25;
-this.values=[];
-},{add:function(v){
-if(v.x==null||v.value==null){
-dojo.raise("dojo.widget.Chart.DataSeries.add: v must have both an 'x' and 'value' property.");
-}
-this.values.push(v);
-},clear:function(){
-this.values=[];
-},createRange:function(len){
-var idx=this.values.length-1;
-var _29=(len||this.values.length);
-return {"index":idx,"length":_29,"start":Math.max(idx-_29,0)};
-},getMean:function(len){
-var _2b=this.createRange(len);
-if(_2b.index<0){
-return 0;
-}
-var t=0;
-var c=0;
-for(var i=_2b.index;i>=_2b.start;i--){
-var n=parseFloat(this.values[i].value);
-if(!isNaN(n)){
-t+=n;
-c++;
-}
-}
-t/=Math.max(c,1);
-return t;
-},getMovingAverage:function(len){
-var _31=this.createRange(len);
-if(_31.index<0){
-return 0;
-}
-var t=0;
-var c=0;
-for(var i=_31.index;i>=_31.start;i--){
-var n=parseFloat(this.values[i].value);
-if(!isNaN(n)){
-t+=n;
-c++;
-}
-}
-t/=Math.max(c,1);
-return t;
-},getVariance:function(len){
-var _37=this.createRange(len);
-if(_37.index<0){
-return 0;
-}
-var t=0;
-var s=0;
-var c=0;
-for(var i=_37.index;i>=_37.start;i--){
-var n=parseFloat(this.values[i].value);
-if(!isNaN(n)){
-t+=n;
-s+=Math.pow(n,2);
-c++;
-}
-}
-return (s/c)-Math.pow(t/c,2);
-},getStandardDeviation:function(len){
-return Math.sqrt(this.getVariance(len));
-},getMax:function(len){
-var _3f=this.createRange(len);
-if(_3f.index<0){
-return 0;
-}
-var t=0;
-for(var i=_3f.index;i>=_3f.start;i--){
-var n=parseFloat(this.values[i].value);
-if(!isNaN(n)){
-t=Math.max(n,t);
-}
-}
-return t;
-},getMin:function(len){
-var _44=this.createRange(len);
-if(_44.index<0){
-return 0;
-}
-var t=0;
-for(var i=_44.index;i>=_44.start;i--){
-var n=parseFloat(this.values[i].value);
-if(!isNaN(n)){
-t=Math.min(n,t);
-}
-}
-return t;
-},getMedian:function(len){
-var _49=this.createRange(len);
-if(_49.index<0){
-return 0;
-}
-var a=[];
-for(var i=_49.index;i>=_49.start;i--){
-var n=parseFloat(this.values[i].value);
-if(!isNaN(n)){
-var b=false;
-for(var j=0;j<a.length&&!b;j++){
-if(n==a[j]){
-b=true;
-}
-}
-if(!b){
-a.push(n);
-}
-}
-}
-a.sort();
-if(a.length>0){
-return a[Math.ceil(a.length/2)];
-}
-return 0;
-},getMode:function(len){
-var _50=this.createRange(len);
-if(_50.index<0){
-return 0;
-}
-var o={};
-var ret=0;
-var m=0;
-for(var i=_50.index;i>=_50.start;i--){
-var n=parseFloat(this.values[i].value);
-if(!isNaN(n)){
-if(!o[this.values[i].value]){
-o[this.values[i].value]=1;
-}else{
-o[this.values[i].value]++;
-}
-}
-}
-for(var p in o){
-if(m<o[p]){
-m=o[p];
-ret=p;
-}
-}
-return parseFloat(ret);
-}});
-dojo.requireIf(dojo.render.svg.capable,"dojo.widget.svg.Chart");
-dojo.requireIf(!dojo.render.svg.capable&&dojo.render.vml.capable,"dojo.widget.vml.Chart");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Checkbox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Checkbox.js
deleted file mode 100644
index b524d20..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Checkbox.js
+++ /dev/null
@@ -1,90 +0,0 @@
-dojo.provide("dojo.widget.Checkbox");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.selection");
-dojo.widget.defineWidget("dojo.widget.Checkbox",dojo.widget.HtmlWidget,{templateString:"<span style=\"display: inline-block;\" tabIndex=\"${this.tabIndex}\" waiRole=\"checkbox\" id=\"${this.id}\">\n\t<img dojoAttachPoint=\"imageNode\" class=\"dojoHtmlCheckbox\" src=\"${dojoWidgetModuleUri}templates/images/blank.gif\" alt=\"\" />\n\t<input type=\"checkbox\" name=\"${this.name}\" style=\"display: none\" value=\"${this.value}\"\n\t\tdojoAttachPoint=\"inputNode\">\n</span>\n",templateCssString:".dojoHtmlCheckbox {\n\tborder: 0px;\n\twidth: 16px;\n\theight: 16px;\n\tmargin: 2px;\n\tvertical-align: middle;\n}\n\n.dojoHtmlCheckboxOn {\n\tbackground: url(check.gif) 0px 0px;\n}\n.dojoHtmlCheckboxOff {\n\tbackground: url(check.gif) -16px 0px;\n}\n.dojoHtmlCheckboxDisabledOn {\n\tbackground: url(check.gif) -32px 0px;\n}\n.dojoHtmlCheckboxDisabledOff {\n\tbackground: url(check.gif) -48px 0px;\n}\n.dojoHtmlCheckboxOnHover {\n\tbackground: url(check.gif) -64px 0px;\n}\n.dojoHtmlCheckboxOffHover {\n\tbackground: url(check.gif) -80px 0px;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/Checkbox.css"),name:"",id:"",checked:false,tabIndex:"",value:"on",postMixInProperties:function(){
-dojo.widget.Checkbox.superclass.postMixInProperties.apply(this,arguments);
-if(!this.disabled&&this.tabIndex==""){
-this.tabIndex="0";
-}
-},fillInTemplate:function(){
-this._setInfo();
-},postCreate:function(){
-var _1=true;
-this.id=this.id!=""?this.id:this.widgetId;
-if(this.id!=""){
-var _2=document.getElementsByTagName("label");
-if(_2!=null&&_2.length>0){
-for(var i=0;i<_2.length;i++){
-if(_2[i].htmlFor==this.id){
-_2[i].id=(_2[i].htmlFor+"label");
-this._connectEvents(_2[i]);
-dojo.widget.wai.setAttr(this.domNode,"waiState","labelledby",_2[i].id);
-break;
-}
-}
-}
-}
-this._connectEvents(this.domNode);
-this.inputNode.checked=this.checked;
-},_connectEvents:function(_4){
-dojo.event.connect(_4,"onmouseover",this,"mouseOver");
-dojo.event.connect(_4,"onmouseout",this,"mouseOut");
-dojo.event.connect(_4,"onkey",this,"onKey");
-dojo.event.connect(_4,"onclick",this,"_onClick");
-dojo.html.disableSelection(_4);
-},_onClick:function(e){
-if(this.disabled==false){
-this.checked=!this.checked;
-this._setInfo();
-}
-e.preventDefault();
-e.stopPropagation();
-this.onClick();
-},setValue:function(_6){
-if(this.disabled==false){
-this.checked=_6;
-this._setInfo();
-}
-},onClick:function(){
-},onKey:function(e){
-var k=dojo.event.browser.keys;
-if(e.key==" "){
-this._onClick(e);
-}
-},mouseOver:function(e){
-this._hover(e,true);
-},mouseOut:function(e){
-this._hover(e,false);
-},_hover:function(e,_c){
-if(this.disabled==false){
-var _d=this.checked?"On":"Off";
-var _e="dojoHtmlCheckbox"+_d+"Hover";
-if(_c){
-dojo.html.addClass(this.imageNode,_e);
-}else{
-dojo.html.removeClass(this.imageNode,_e);
-}
-}
-},_setInfo:function(){
-var _f="dojoHtmlCheckbox"+(this.disabled?"Disabled":"")+(this.checked?"On":"Off");
-dojo.html.setClass(this.imageNode,"dojoHtmlCheckbox "+_f);
-this.inputNode.checked=this.checked;
-if(this.disabled){
-this.inputNode.setAttribute("disabled",true);
-}else{
-this.inputNode.removeAttribute("disabled");
-}
-dojo.widget.wai.setAttr(this.domNode,"waiState","checked",this.checked);
-}});
-dojo.widget.defineWidget("dojo.widget.a11y.Checkbox",dojo.widget.Checkbox,{templateString:"<span class='dojoHtmlCheckbox'>\n\t<input type=\"checkbox\" name=\"${this.name}\" tabIndex=\"${this.tabIndex}\" id=\"${this.id}\" value=\"${this.value}\"\n\t\t dojoAttachEvent=\"onClick: _onClick;\" dojoAttachPoint=\"inputNode\"> \n</span>\n",fillInTemplate:function(){
-},postCreate:function(_10,_11){
-this.inputNode.checked=this.checked;
-if(this.disabled){
-this.inputNode.setAttribute("disabled",true);
-}
-},_onClick:function(){
-this.onClick();
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Clock.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Clock.js
deleted file mode 100644
index 7d5194b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Clock.js
+++ /dev/null
@@ -1,129 +0,0 @@
-dojo.provide("dojo.widget.Clock");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.gfx.*");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.timing.Timer");
-dojo.widget.defineWidget("dojo.widget.Clock",dojo.widget.HtmlWidget,function(){
-var _1=this;
-this.timeZoneOffset=0;
-this.label="";
-this.date=new Date();
-this.handColor="#788598";
-this.handStroke="#6f7b8c";
-this.secondHandColor=[201,4,5,0.8];
-this.topLabelColor="#efefef";
-this.labelColor="#fff";
-this.timer=new dojo.lang.timing.Timer(1000);
-this.center={x:75,y:75};
-this.hands={hour:null,minute:null,second:null};
-this.shadows={hour:{shadow:null,shift:{dx:2,dy:2}},minute:{shadow:null,shift:{dx:2,dy:3}},second:{shadow:null,shift:{dx:4,dy:4}}};
-this.image=dojo.uri.moduleUri("dojo.widget","templates/images/clock.png");
-this.surface=null;
-this.labelNode=null;
-this.topLabelNode=null;
-this.draw=function(){
-_1.date=new Date();
-var h=(_1.date.getHours()+_1.timeZoneOffset)%12;
-var m=_1.date.getMinutes();
-var s=_1.date.getSeconds();
-_1.placeHour(h,m,s);
-_1.placeMinute(m,s);
-_1.placeSecond(s);
-_1.topLabelNode.innerHTML=((_1.date.getHours()+_1.timeZoneOffset)>11)?"PM":"AM";
-};
-this.timer.onTick=_1.draw;
-},{set:function(dt){
-this.date=dt;
-if(!this.timer.isRunning){
-this.draw();
-}
-},start:function(){
-this.timer.start();
-},stop:function(){
-this.timer.stop();
-},_initPoly:function(_6,_7){
-var _8=_6.createPath();
-var _9=true;
-dojo.lang.forEach(_7,function(c){
-if(_9){
-_8.moveTo(c.x,c.y);
-_9=false;
-}else{
-_8.lineTo(c.x,c.y);
-}
-});
-return _8;
-},_placeHand:function(_b,_c,_d){
-var _e={dx:this.center.x+(_d?_d.dx:0),dy:this.center.y+(_d?_d.dy:0)};
-return _b.setTransform([_e,dojo.gfx.matrix.rotateg(-_c)]);
-},placeHour:function(h,m,s){
-var _12=30*(h+m/60+s/3600);
-this._placeHand(this.hands.hour,_12);
-this._placeHand(this.shadows.hour.shadow,_12,this.shadows.hour.shift);
-},placeMinute:function(m,s){
-var _15=6*(m+s/60);
-this._placeHand(this.hands.minute,_15);
-this._placeHand(this.shadows.minute.shadow,_15,this.shadows.minute.shift);
-},placeSecond:function(s){
-var _17=6*s;
-this._placeHand(this.hands.second,_17);
-this._placeHand(this.shadows.second.shadow,_17,this.shadows.second.shift);
-},init:function(){
-if(this.domNode.style.position!="absolute"){
-this.domNode.style.position="relative";
-}
-while(this.domNode.childNodes.length>0){
-this.domNode.removeChild(this.domNode.childNodes[0]);
-}
-this.domNode.style.width="150px";
-this.domNode.style.height="150px";
-this.surface=dojo.gfx.createSurface(this.domNode,150,150);
-this.surface.createRect({width:150,height:150});
-this.surface.createImage({width:150,height:150,src:this.image+""});
-var hP=[{x:-3,y:-4},{x:3,y:-4},{x:1,y:-27},{x:-1,y:-27},{x:-3,y:-4}];
-var mP=[{x:-3,y:-4},{x:3,y:-4},{x:1,y:-38},{x:-1,y:-38},{x:-3,y:-4}];
-var sP=[{x:-2,y:-2},{x:2,y:-2},{x:1,y:-45},{x:-1,y:-45},{x:-2,y:-2}];
-this.shadows.hour.shadow=this._initPoly(this.surface,hP).setFill([0,0,0,0.1]);
-this.hands.hour=this._initPoly(this.surface,hP).setStroke({color:this.handStroke,width:1}).setFill({type:"linear",x1:0,y1:0,x2:0,y2:-27,colors:[{offset:0,color:"#fff"},{offset:0.33,color:this.handColor}]});
-this.shadows.minute.shadow=this._initPoly(this.surface,mP).setFill([0,0,0,0.1]);
-this.hands.minute=this._initPoly(this.surface,mP).setStroke({color:this.handStroke,width:1}).setFill({type:"linear",x1:0,y1:0,x2:0,y2:-38,colors:[{offset:0,color:"#fff"},{offset:0.33,color:this.handColor}]});
-this.surface.createCircle({r:6}).setStroke({color:this.handStroke,width:2}).setFill("#fff").setTransform({dx:75,dy:75});
-this.shadows.second.shadow=this._initPoly(this.surface,sP).setFill([0,0,0,0.1]);
-this.hands.second=this._initPoly(this.surface,sP).setFill(this.secondHandColor);
-this.surface.createCircle({r:4}).setFill(this.secondHandColor).setTransform({dx:75,dy:75});
-this.topLabelNode=document.createElement("div");
-with(this.topLabelNode.style){
-position="absolute";
-top="3px";
-left="0px";
-color=this.topLabelColor;
-textAlign="center";
-width="150px";
-fontFamily="sans-serif";
-fontSize="11px";
-textTransform="uppercase";
-fontWeight="bold";
-}
-this.topLabelNode.innerHTML=((this.date.getHours()+this.timeZoneOffset)>11)?"PM":"AM";
-this.domNode.appendChild(this.topLabelNode);
-this.labelNode=document.createElement("div");
-with(this.labelNode.style){
-position="absolute";
-top="134px";
-left="0px";
-color=this.labelColor;
-textAlign="center";
-width="150px";
-fontFamily="sans-serif";
-fontSize="10px";
-textTransform="uppercase";
-fontWeight="bold";
-}
-this.labelNode.innerHTML=this.label||"&nbsp;";
-this.domNode.appendChild(this.labelNode);
-this.draw();
-},postCreate:function(){
-this.init();
-this.start();
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ColorPalette.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ColorPalette.js
deleted file mode 100644
index 73dac8e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ColorPalette.js
+++ /dev/null
@@ -1,47 +0,0 @@
-dojo.provide("dojo.widget.ColorPalette");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.html.display");
-dojo.require("dojo.html.selection");
-dojo.widget.defineWidget("dojo.widget.ColorPalette",dojo.widget.HtmlWidget,{palette:"7x10",_palettes:{"7x10":[["fff","fcc","fc9","ff9","ffc","9f9","9ff","cff","ccf","fcf"],["ccc","f66","f96","ff6","ff3","6f9","3ff","6ff","99f","f9f"],["c0c0c0","f00","f90","fc6","ff0","3f3","6cc","3cf","66c","c6c"],["999","c00","f60","fc3","fc0","3c0","0cc","36f","63f","c3c"],["666","900","c60","c93","990","090","399","33f","60c","939"],["333","600","930","963","660","060","366","009","339","636"],["000","300","630","633","330","030","033","006","309","303"]],"3x4":[["ffffff","00ff00","008000","0000ff"],["c0c0c0","ffff00","ff00ff","000080"],["808080","ff0000","800080","000000"]]},buildRendering:function(){
-this.domNode=document.createElement("table");
-dojo.html.disableSelection(this.domNode);
-dojo.event.connect(this.domNode,"onmousedown",function(e){
-e.preventDefault();
-});
-with(this.domNode){
-cellPadding="0";
-cellSpacing="1";
-border="1";
-style.backgroundColor="white";
-}
-var _2=this._palettes[this.palette];
-for(var i=0;i<_2.length;i++){
-var tr=this.domNode.insertRow(-1);
-for(var j=0;j<_2[i].length;j++){
-if(_2[i][j].length==3){
-_2[i][j]=_2[i][j].replace(/(.)(.)(.)/,"$1$1$2$2$3$3");
-}
-var td=tr.insertCell(-1);
-with(td.style){
-backgroundColor="#"+_2[i][j];
-border="1px solid gray";
-width=height="15px";
-fontSize="1px";
-}
-td.color="#"+_2[i][j];
-td.onmouseover=function(e){
-this.style.borderColor="white";
-};
-td.onmouseout=function(e){
-this.style.borderColor="gray";
-};
-dojo.event.connect(td,"onmousedown",this,"onClick");
-td.innerHTML="&nbsp;";
-}
-}
-},onClick:function(e){
-this.onColorSelect(e.currentTarget.color);
-e.currentTarget.style.borderColor="gray";
-},onColorSelect:function(_a){
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ComboBox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ComboBox.js
deleted file mode 100644
index 9430a66..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ComboBox.js
+++ /dev/null
@@ -1,545 +0,0 @@
-dojo.provide("dojo.widget.ComboBox");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.io.*");
-dojo.require("dojo.html.*");
-dojo.require("dojo.string");
-dojo.require("dojo.widget.html.stabile");
-dojo.require("dojo.widget.PopupContainer");
-dojo.declare("dojo.widget.incrementalComboBoxDataProvider",null,function(_1){
-this.searchUrl=_1.dataUrl;
-this._cache={};
-this._inFlight=false;
-this._lastRequest=null;
-this.allowCache=false;
-},{_addToCache:function(_2,_3){
-if(this.allowCache){
-this._cache[_2]=_3;
-}
-},startSearch:function(_4,_5){
-if(this._inFlight){
-}
-var _6=encodeURIComponent(_4);
-var _7=dojo.string.substituteParams(this.searchUrl,{"searchString":_6});
-var _8=this;
-var _9=this._lastRequest=dojo.io.bind({url:_7,method:"get",mimetype:"text/json",load:function(_a,_b,_c){
-_8._inFlight=false;
-if(!dojo.lang.isArray(_b)){
-var _d=[];
-for(var _e in _b){
-_d.push([_b[_e],_e]);
-}
-_b=_d;
-}
-_8._addToCache(_4,_b);
-if(_9==_8._lastRequest){
-_5(_b);
-}
-}});
-this._inFlight=true;
-}});
-dojo.declare("dojo.widget.basicComboBoxDataProvider",null,function(_f,_10){
-this._data=[];
-this.searchLimit=30;
-this.searchType="STARTSTRING";
-this.caseSensitive=false;
-if(!dj_undef("dataUrl",_f)&&!dojo.string.isBlank(_f.dataUrl)){
-this._getData(_f.dataUrl);
-}else{
-if((_10)&&(_10.nodeName.toLowerCase()=="select")){
-var _11=_10.getElementsByTagName("option");
-var ol=_11.length;
-var _13=[];
-for(var x=0;x<ol;x++){
-var _15=_11[x].textContent||_11[x].innerText||_11[x].innerHTML;
-var _16=[String(_15),String(_11[x].value)];
-_13.push(_16);
-if(_11[x].selected){
-_f.setAllValues(_16[0],_16[1]);
-}
-}
-this.setData(_13);
-}
-}
-},{_getData:function(url){
-dojo.io.bind({url:url,load:dojo.lang.hitch(this,function(_18,_19,evt){
-if(!dojo.lang.isArray(_19)){
-var _1b=[];
-for(var key in _19){
-_1b.push([_19[key],key]);
-}
-_19=_1b;
-}
-this.setData(_19);
-}),mimetype:"text/json"});
-},startSearch:function(_1d,_1e){
-this._performSearch(_1d,_1e);
-},_performSearch:function(_1f,_20){
-var st=this.searchType;
-var ret=[];
-if(!this.caseSensitive){
-_1f=_1f.toLowerCase();
-}
-for(var x=0;x<this._data.length;x++){
-if((this.searchLimit>0)&&(ret.length>=this.searchLimit)){
-break;
-}
-var _24=new String((!this.caseSensitive)?this._data[x][0].toLowerCase():this._data[x][0]);
-if(_24.length<_1f.length){
-continue;
-}
-if(st=="STARTSTRING"){
-if(_1f==_24.substr(0,_1f.length)){
-ret.push(this._data[x]);
-}
-}else{
-if(st=="SUBSTRING"){
-if(_24.indexOf(_1f)>=0){
-ret.push(this._data[x]);
-}
-}else{
-if(st=="STARTWORD"){
-var idx=_24.indexOf(_1f);
-if(idx==0){
-ret.push(this._data[x]);
-}
-if(idx<=0){
-continue;
-}
-var _26=false;
-while(idx!=-1){
-if(" ,/(".indexOf(_24.charAt(idx-1))!=-1){
-_26=true;
-break;
-}
-idx=_24.indexOf(_1f,idx+1);
-}
-if(!_26){
-continue;
-}else{
-ret.push(this._data[x]);
-}
-}
-}
-}
-}
-_20(ret);
-},setData:function(_27){
-this._data=_27;
-}});
-dojo.widget.defineWidget("dojo.widget.ComboBox",dojo.widget.HtmlWidget,{forceValidOption:false,searchType:"stringstart",dataProvider:null,autoComplete:true,searchDelay:100,dataUrl:"",fadeTime:200,maxListLength:8,mode:"local",selectedResult:null,dataProviderClass:"",buttonSrc:dojo.uri.moduleUri("dojo.widget","templates/images/combo_box_arrow.png"),dropdownToggle:"fade",templateString:"<span _=\"whitespace and CR's between tags adds &nbsp; in FF\"\n\tclass=\"dojoComboBoxOuter\"\n\t><input style=\"display:none\"  tabindex=\"-1\" name=\"\" value=\"\" \n\t\tdojoAttachPoint=\"comboBoxValue\"\n\t><input style=\"display:none\"  tabindex=\"-1\" name=\"\" value=\"\" \n\t\tdojoAttachPoint=\"comboBoxSelectionValue\"\n\t><input type=\"text\" autocomplete=\"off\" class=\"dojoComboBox\"\n\t\tdojoAttachEvent=\"key:_handleKeyEvents; keyUp: onKeyUp; compositionEnd; onResize;\"\n\t\tdojoAttachPoint=\"textInputNode\"\n\t><img hspace=\"0\"\n\t\tvspace=\"0\"\n\t\tclass=\"dojoComboBox\"\n\t\tdojoAttachPoint=\"downArrowNode\"\n\t\tdojoAttachEvent=\"onMouseUp: handleArrowClick; onResize;\"\n\t\tsrc=\"${this.buttonSrc}\"\n></span>\n",templateCssString:".dojoComboBoxOuter {\n\tborder: 0px !important;\n\tmargin: 0px !important;\n\tpadding: 0px !important;\n\tbackground: transparent !important;\n\twhite-space: nowrap !important;\n}\n\n.dojoComboBox {\n\tborder: 1px inset #afafaf;\n\tmargin: 0px;\n\tpadding: 0px;\n\tvertical-align: middle !important;\n\tfloat: none !important;\n\tposition: static !important;\n\tdisplay: inline !important;\n}\n\n/* the input box */\ninput.dojoComboBox {\n\tborder-right-width: 0px !important; \n\tmargin-right: 0px !important;\n\tpadding-right: 0px !important;\n}\n\n/* the down arrow */\nimg.dojoComboBox {\n\tborder-left-width: 0px !important;\n\tpadding-left: 0px !important;\n\tmargin-left: 0px !important;\n}\n\n/* IE vertical-alignment calculations can be off by +-1 but these margins are collapsed away */\n.dj_ie img.dojoComboBox {\n\tmargin-top: 1px; \n\tmargin-bottom: 1px; \n}\n\n/* the drop down */\n.dojoComboBoxOptions {\n\tfont-family: Verdana, Helvetica, Garamond, sans-serif;\n\t/* font-size: 0.7em; */\n\tbackground-color: white;\n\tborder: 1px solid #afafaf;\n\tposition: absolute;\n\tz-index: 1000; \n\toverflow: auto;\n\tcursor: default;\n}\n\n.dojoComboBoxItem {\n\tpadding-left: 2px;\n\tpadding-top: 2px;\n\tmargin: 0px;\n}\n\n.dojoComboBoxItemEven {\n\tbackground-color: #f4f4f4;\n}\n\n.dojoComboBoxItemOdd {\n\tbackground-color: white;\n}\n\n.dojoComboBoxItemHighlight {\n\tbackground-color: #63709A;\n\tcolor: white;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/ComboBox.css"),setValue:function(_28){
-this.comboBoxValue.value=_28;
-if(this.textInputNode.value!=_28){
-this.textInputNode.value=_28;
-dojo.widget.html.stabile.setState(this.widgetId,this.getState(),true);
-this.onValueChanged(_28);
-}
-},onValueChanged:function(_29){
-},getValue:function(){
-return this.comboBoxValue.value;
-},getState:function(){
-return {value:this.getValue()};
-},setState:function(_2a){
-this.setValue(_2a.value);
-},enable:function(){
-this.disabled=false;
-this.textInputNode.removeAttribute("disabled");
-},disable:function(){
-this.disabled=true;
-this.textInputNode.setAttribute("disabled",true);
-},_getCaretPos:function(_2b){
-if(dojo.lang.isNumber(_2b.selectionStart)){
-return _2b.selectionStart;
-}else{
-if(dojo.render.html.ie){
-var tr=document.selection.createRange().duplicate();
-var ntr=_2b.createTextRange();
-tr.move("character",0);
-ntr.move("character",0);
-try{
-ntr.setEndPoint("EndToEnd",tr);
-return String(ntr.text).replace(/\r/g,"").length;
-}
-catch(e){
-return 0;
-}
-}
-}
-},_setCaretPos:function(_2e,_2f){
-_2f=parseInt(_2f);
-this._setSelectedRange(_2e,_2f,_2f);
-},_setSelectedRange:function(_30,_31,end){
-if(!end){
-end=_30.value.length;
-}
-if(_30.setSelectionRange){
-_30.focus();
-_30.setSelectionRange(_31,end);
-}else{
-if(_30.createTextRange){
-var _33=_30.createTextRange();
-with(_33){
-collapse(true);
-moveEnd("character",end);
-moveStart("character",_31);
-select();
-}
-}else{
-_30.value=_30.value;
-_30.blur();
-_30.focus();
-var _34=parseInt(_30.value.length)-end;
-var _35=String.fromCharCode(37);
-var tcc=_35.charCodeAt(0);
-for(var x=0;x<_34;x++){
-var te=document.createEvent("KeyEvents");
-te.initKeyEvent("keypress",true,true,null,false,false,false,false,tcc,tcc);
-_30.dispatchEvent(te);
-}
-}
-}
-},_handleKeyEvents:function(evt){
-if(evt.ctrlKey||evt.altKey||!evt.key){
-return;
-}
-this._prev_key_backspace=false;
-this._prev_key_esc=false;
-var k=dojo.event.browser.keys;
-var _3b=true;
-switch(evt.key){
-case k.KEY_DOWN_ARROW:
-if(!this.popupWidget.isShowingNow){
-this._startSearchFromInput();
-}
-this._highlightNextOption();
-dojo.event.browser.stopEvent(evt);
-return;
-case k.KEY_UP_ARROW:
-this._highlightPrevOption();
-dojo.event.browser.stopEvent(evt);
-return;
-case k.KEY_TAB:
-if(!this.autoComplete&&this.popupWidget.isShowingNow&&this._highlighted_option){
-dojo.event.browser.stopEvent(evt);
-this._selectOption({"target":this._highlighted_option,"noHide":false});
-this._setSelectedRange(this.textInputNode,this.textInputNode.value.length,null);
-}else{
-this._selectOption();
-return;
-}
-break;
-case k.KEY_ENTER:
-if(this.popupWidget.isShowingNow){
-dojo.event.browser.stopEvent(evt);
-}
-if(this.autoComplete){
-this._selectOption();
-return;
-}
-case " ":
-if(this.popupWidget.isShowingNow&&this._highlighted_option){
-dojo.event.browser.stopEvent(evt);
-this._selectOption();
-this._hideResultList();
-return;
-}
-break;
-case k.KEY_ESCAPE:
-this._hideResultList();
-this._prev_key_esc=true;
-return;
-case k.KEY_BACKSPACE:
-this._prev_key_backspace=true;
-if(!this.textInputNode.value.length){
-this.setAllValues("","");
-this._hideResultList();
-_3b=false;
-}
-break;
-case k.KEY_RIGHT_ARROW:
-case k.KEY_LEFT_ARROW:
-_3b=false;
-break;
-default:
-if(evt.charCode==0){
-_3b=false;
-}
-}
-if(this.searchTimer){
-clearTimeout(this.searchTimer);
-}
-if(_3b){
-this._blurOptionNode();
-this.searchTimer=setTimeout(dojo.lang.hitch(this,this._startSearchFromInput),this.searchDelay);
-}
-},compositionEnd:function(evt){
-evt.key=evt.keyCode;
-this._handleKeyEvents(evt);
-},onKeyUp:function(evt){
-this.setValue(this.textInputNode.value);
-},setSelectedValue:function(_3e){
-this.comboBoxSelectionValue.value=_3e;
-},setAllValues:function(_3f,_40){
-this.setSelectedValue(_40);
-this.setValue(_3f);
-},_focusOptionNode:function(_41){
-if(this._highlighted_option!=_41){
-this._blurOptionNode();
-this._highlighted_option=_41;
-dojo.html.addClass(this._highlighted_option,"dojoComboBoxItemHighlight");
-}
-},_blurOptionNode:function(){
-if(this._highlighted_option){
-dojo.html.removeClass(this._highlighted_option,"dojoComboBoxItemHighlight");
-this._highlighted_option=null;
-}
-},_highlightNextOption:function(){
-if((!this._highlighted_option)||!this._highlighted_option.parentNode){
-this._focusOptionNode(this.optionsListNode.firstChild);
-}else{
-if(this._highlighted_option.nextSibling){
-this._focusOptionNode(this._highlighted_option.nextSibling);
-}
-}
-dojo.html.scrollIntoView(this._highlighted_option);
-},_highlightPrevOption:function(){
-if(this._highlighted_option&&this._highlighted_option.previousSibling){
-this._focusOptionNode(this._highlighted_option.previousSibling);
-}else{
-this._highlighted_option=null;
-this._hideResultList();
-return;
-}
-dojo.html.scrollIntoView(this._highlighted_option);
-},_itemMouseOver:function(evt){
-if(evt.target===this.optionsListNode){
-return;
-}
-this._focusOptionNode(evt.target);
-dojo.html.addClass(this._highlighted_option,"dojoComboBoxItemHighlight");
-},_itemMouseOut:function(evt){
-if(evt.target===this.optionsListNode){
-return;
-}
-this._blurOptionNode();
-},onResize:function(){
-var _44=dojo.html.getContentBox(this.textInputNode);
-if(_44.height<=0){
-dojo.lang.setTimeout(this,"onResize",100);
-return;
-}
-var _45={width:_44.height,height:_44.height};
-dojo.html.setContentBox(this.downArrowNode,_45);
-},fillInTemplate:function(_46,_47){
-dojo.html.applyBrowserClass(this.domNode);
-var _48=this.getFragNodeRef(_47);
-if(!this.name&&_48.name){
-this.name=_48.name;
-}
-this.comboBoxValue.name=this.name;
-this.comboBoxSelectionValue.name=this.name+"_selected";
-dojo.html.copyStyle(this.domNode,_48);
-dojo.html.copyStyle(this.textInputNode,_48);
-dojo.html.copyStyle(this.downArrowNode,_48);
-with(this.downArrowNode.style){
-width="0px";
-height="0px";
-}
-var _49;
-if(this.dataProviderClass){
-if(typeof this.dataProviderClass=="string"){
-_49=dojo.evalObjPath(this.dataProviderClass);
-}else{
-_49=this.dataProviderClass;
-}
-}else{
-if(this.mode=="remote"){
-_49=dojo.widget.incrementalComboBoxDataProvider;
-}else{
-_49=dojo.widget.basicComboBoxDataProvider;
-}
-}
-this.dataProvider=new _49(this,this.getFragNodeRef(_47));
-this.popupWidget=new dojo.widget.createWidget("PopupContainer",{toggle:this.dropdownToggle,toggleDuration:this.toggleDuration});
-dojo.event.connect(this,"destroy",this.popupWidget,"destroy");
-this.optionsListNode=this.popupWidget.domNode;
-this.domNode.appendChild(this.optionsListNode);
-dojo.html.addClass(this.optionsListNode,"dojoComboBoxOptions");
-dojo.event.connect(this.optionsListNode,"onclick",this,"_selectOption");
-dojo.event.connect(this.optionsListNode,"onmouseover",this,"_onMouseOver");
-dojo.event.connect(this.optionsListNode,"onmouseout",this,"_onMouseOut");
-dojo.event.connect(this.optionsListNode,"onmouseover",this,"_itemMouseOver");
-dojo.event.connect(this.optionsListNode,"onmouseout",this,"_itemMouseOut");
-},_openResultList:function(_4a){
-if(this.disabled){
-return;
-}
-this._clearResultList();
-if(!_4a.length){
-this._hideResultList();
-}
-if((this.autoComplete)&&(_4a.length)&&(!this._prev_key_backspace)&&(this.textInputNode.value.length>0)){
-var _4b=this._getCaretPos(this.textInputNode);
-if((_4b+1)>this.textInputNode.value.length){
-this.textInputNode.value+=_4a[0][0].substr(_4b);
-this._setSelectedRange(this.textInputNode,_4b,this.textInputNode.value.length);
-}
-}
-var _4c=true;
-while(_4a.length){
-var tr=_4a.shift();
-if(tr){
-var td=document.createElement("div");
-td.appendChild(document.createTextNode(tr[0]));
-td.setAttribute("resultName",tr[0]);
-td.setAttribute("resultValue",tr[1]);
-td.className="dojoComboBoxItem "+((_4c)?"dojoComboBoxItemEven":"dojoComboBoxItemOdd");
-_4c=(!_4c);
-this.optionsListNode.appendChild(td);
-}
-}
-this._showResultList();
-},_onFocusInput:function(){
-this._hasFocus=true;
-},_onBlurInput:function(){
-this._hasFocus=false;
-this._handleBlurTimer(true,500);
-},_handleBlurTimer:function(_4f,_50){
-if(this.blurTimer&&(_4f||_50)){
-clearTimeout(this.blurTimer);
-}
-if(_50){
-this.blurTimer=dojo.lang.setTimeout(this,"_checkBlurred",_50);
-}
-},_onMouseOver:function(evt){
-if(!this._mouseover_list){
-this._handleBlurTimer(true,0);
-this._mouseover_list=true;
-}
-},_onMouseOut:function(evt){
-var _53=evt.relatedTarget;
-try{
-if(!_53||_53.parentNode!=this.optionsListNode){
-this._mouseover_list=false;
-this._handleBlurTimer(true,100);
-this._tryFocus();
-}
-}
-catch(e){
-}
-},_isInputEqualToResult:function(_54){
-var _55=this.textInputNode.value;
-if(!this.dataProvider.caseSensitive){
-_55=_55.toLowerCase();
-_54=_54.toLowerCase();
-}
-return (_55==_54);
-},_isValidOption:function(){
-var tgt=dojo.html.firstElement(this.optionsListNode);
-var _57=false;
-while(!_57&&tgt){
-if(this._isInputEqualToResult(tgt.getAttribute("resultName"))){
-_57=true;
-}else{
-tgt=dojo.html.nextElement(tgt);
-}
-}
-return _57;
-},_checkBlurred:function(){
-if(!this._hasFocus&&!this._mouseover_list){
-this._hideResultList();
-if(!this.textInputNode.value.length){
-this.setAllValues("","");
-return;
-}
-var _58=this._isValidOption();
-if(this.forceValidOption&&!_58){
-this.setAllValues("","");
-return;
-}
-if(!_58){
-this.setSelectedValue("");
-}
-}
-},_selectOption:function(evt){
-var tgt=null;
-if(!evt){
-evt={target:this._highlighted_option};
-}
-if(!dojo.html.isDescendantOf(evt.target,this.optionsListNode)){
-if(!this.textInputNode.value.length){
-return;
-}
-tgt=dojo.html.firstElement(this.optionsListNode);
-if(!tgt||!this._isInputEqualToResult(tgt.getAttribute("resultName"))){
-return;
-}
-}else{
-tgt=evt.target;
-}
-while((tgt.nodeType!=1)||(!tgt.getAttribute("resultName"))){
-tgt=tgt.parentNode;
-if(tgt===dojo.body()){
-return false;
-}
-}
-this.selectedResult=[tgt.getAttribute("resultName"),tgt.getAttribute("resultValue")];
-this.setAllValues(tgt.getAttribute("resultName"),tgt.getAttribute("resultValue"));
-if(!evt.noHide){
-this._hideResultList();
-this._setSelectedRange(this.textInputNode,0,null);
-}
-this._tryFocus();
-},_clearResultList:function(){
-if(this.optionsListNode.innerHTML){
-this.optionsListNode.innerHTML="";
-}
-},_hideResultList:function(){
-this.popupWidget.close();
-},_showResultList:function(){
-var _5b=this.optionsListNode.childNodes;
-if(_5b.length){
-var _5c=Math.min(_5b.length,this.maxListLength);
-with(this.optionsListNode.style){
-display="";
-if(_5c==_5b.length){
-height="";
-}else{
-height=_5c*dojo.html.getMarginBox(_5b[0]).height+"px";
-}
-width=(dojo.html.getMarginBox(this.domNode).width-2)+"px";
-}
-this.popupWidget.open(this.domNode,this,this.downArrowNode);
-}else{
-this._hideResultList();
-}
-},handleArrowClick:function(){
-this._handleBlurTimer(true,0);
-this._tryFocus();
-if(this.popupWidget.isShowingNow){
-this._hideResultList();
-}else{
-this._startSearch("");
-}
-},_tryFocus:function(){
-try{
-this.textInputNode.focus();
-}
-catch(e){
-}
-},_startSearchFromInput:function(){
-this._startSearch(this.textInputNode.value);
-},_startSearch:function(key){
-this.dataProvider.startSearch(key,dojo.lang.hitch(this,"_openResultList"));
-},postCreate:function(){
-this.onResize();
-dojo.event.connect(this.textInputNode,"onblur",this,"_onBlurInput");
-dojo.event.connect(this.textInputNode,"onfocus",this,"_onFocusInput");
-if(this.disabled){
-this.disable();
-}
-var s=dojo.widget.html.stabile.getState(this.widgetId);
-if(s){
-this.setState(s);
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ContentPane.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ContentPane.js
deleted file mode 100644
index c2edd33..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ContentPane.js
+++ /dev/null
@@ -1,428 +0,0 @@
-dojo.provide("dojo.widget.ContentPane");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.string");
-dojo.require("dojo.string.extras");
-dojo.require("dojo.html.style");
-dojo.widget.defineWidget("dojo.widget.ContentPane",dojo.widget.HtmlWidget,function(){
-this._styleNodes=[];
-this._onLoadStack=[];
-this._onUnloadStack=[];
-this._callOnUnload=false;
-this._ioBindObj;
-this.scriptScope;
-this.bindArgs={};
-},{isContainer:true,adjustPaths:true,href:"",extractContent:true,parseContent:true,cacheContent:true,preload:false,refreshOnShow:false,handler:"",executeScripts:false,scriptSeparation:true,loadingMessage:"Loading...",isLoaded:false,postCreate:function(_1,_2,_3){
-if(this.handler!==""){
-this.setHandler(this.handler);
-}
-if(this.isShowing()||this.preload){
-this.loadContents();
-}
-},show:function(){
-if(this.refreshOnShow){
-this.refresh();
-}else{
-this.loadContents();
-}
-dojo.widget.ContentPane.superclass.show.call(this);
-},refresh:function(){
-this.isLoaded=false;
-this.loadContents();
-},loadContents:function(){
-if(this.isLoaded){
-return;
-}
-if(dojo.lang.isFunction(this.handler)){
-this._runHandler();
-}else{
-if(this.href!=""){
-this._downloadExternalContent(this.href,this.cacheContent&&!this.refreshOnShow);
-}
-}
-},setUrl:function(_4){
-this.href=_4;
-this.isLoaded=false;
-if(this.preload||this.isShowing()){
-this.loadContents();
-}
-},abort:function(){
-var _5=this._ioBindObj;
-if(!_5||!_5.abort){
-return;
-}
-_5.abort();
-delete this._ioBindObj;
-},_downloadExternalContent:function(_6,_7){
-this.abort();
-this._handleDefaults(this.loadingMessage,"onDownloadStart");
-var _8=this;
-this._ioBindObj=dojo.io.bind(this._cacheSetting({url:_6,mimetype:"text/html",handler:function(_9,_a,_b){
-delete _8._ioBindObj;
-if(_9=="load"){
-_8.onDownloadEnd.call(_8,_6,_a);
-}else{
-var e={responseText:_b.responseText,status:_b.status,statusText:_b.statusText,responseHeaders:_b.getAllResponseHeaders(),text:"Error loading '"+_6+"' ("+_b.status+" "+_b.statusText+")"};
-_8._handleDefaults.call(_8,e,"onDownloadError");
-_8.onLoad();
-}
-}},_7));
-},_cacheSetting:function(_d,_e){
-for(var x in this.bindArgs){
-if(dojo.lang.isUndefined(_d[x])){
-_d[x]=this.bindArgs[x];
-}
-}
-if(dojo.lang.isUndefined(_d.useCache)){
-_d.useCache=_e;
-}
-if(dojo.lang.isUndefined(_d.preventCache)){
-_d.preventCache=!_e;
-}
-if(dojo.lang.isUndefined(_d.mimetype)){
-_d.mimetype="text/html";
-}
-return _d;
-},onLoad:function(e){
-this._runStack("_onLoadStack");
-this.isLoaded=true;
-},onUnLoad:function(e){
-dojo.deprecated(this.widgetType+".onUnLoad, use .onUnload (lowercased load)",0.5);
-},onUnload:function(e){
-this._runStack("_onUnloadStack");
-delete this.scriptScope;
-if(this.onUnLoad!==dojo.widget.ContentPane.prototype.onUnLoad){
-this.onUnLoad.apply(this,arguments);
-}
-},_runStack:function(_13){
-var st=this[_13];
-var err="";
-var _16=this.scriptScope||window;
-for(var i=0;i<st.length;i++){
-try{
-st[i].call(_16);
-}
-catch(e){
-err+="\n"+st[i]+" failed: "+e.description;
-}
-}
-this[_13]=[];
-if(err.length){
-var _18=(_13=="_onLoadStack")?"addOnLoad":"addOnUnLoad";
-this._handleDefaults(_18+" failure\n "+err,"onExecError","debug");
-}
-},addOnLoad:function(obj,_1a){
-this._pushOnStack(this._onLoadStack,obj,_1a);
-},addOnUnload:function(obj,_1c){
-this._pushOnStack(this._onUnloadStack,obj,_1c);
-},addOnUnLoad:function(){
-dojo.deprecated(this.widgetType+".addOnUnLoad, use addOnUnload instead. (lowercased Load)",0.5);
-this.addOnUnload.apply(this,arguments);
-},_pushOnStack:function(_1d,obj,_1f){
-if(typeof _1f=="undefined"){
-_1d.push(obj);
-}else{
-_1d.push(function(){
-obj[_1f]();
-});
-}
-},destroy:function(){
-this.onUnload();
-dojo.widget.ContentPane.superclass.destroy.call(this);
-},onExecError:function(e){
-},onContentError:function(e){
-},onDownloadError:function(e){
-},onDownloadStart:function(e){
-},onDownloadEnd:function(url,_25){
-_25=this.splitAndFixPaths(_25,url);
-this.setContent(_25);
-},_handleDefaults:function(e,_27,_28){
-if(!_27){
-_27="onContentError";
-}
-if(dojo.lang.isString(e)){
-e={text:e};
-}
-if(!e.text){
-e.text=e.toString();
-}
-e.toString=function(){
-return this.text;
-};
-if(typeof e.returnValue!="boolean"){
-e.returnValue=true;
-}
-if(typeof e.preventDefault!="function"){
-e.preventDefault=function(){
-this.returnValue=false;
-};
-}
-this[_27](e);
-if(e.returnValue){
-switch(_28){
-case true:
-case "alert":
-alert(e.toString());
-break;
-case "debug":
-dojo.debug(e.toString());
-break;
-default:
-if(this._callOnUnload){
-this.onUnload();
-}
-this._callOnUnload=false;
-if(arguments.callee._loopStop){
-dojo.debug(e.toString());
-}else{
-arguments.callee._loopStop=true;
-this._setContent(e.toString());
-}
-}
-}
-arguments.callee._loopStop=false;
-},splitAndFixPaths:function(s,url){
-var _2b=[],_2c=[],tmp=[];
-var _2e=[],_2f=[],_30=[],_31=[];
-var str="",_33="",fix="",_35="",tag="",_37="";
-if(!url){
-url="./";
-}
-if(s){
-var _38=/<title[^>]*>([\s\S]*?)<\/title>/i;
-while(_2e=_38.exec(s)){
-_2b.push(_2e[1]);
-s=s.substring(0,_2e.index)+s.substr(_2e.index+_2e[0].length);
-}
-if(this.adjustPaths){
-var _39=/<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i;
-var _3a=/\s(src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i;
-var _3b=/^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
-while(tag=_39.exec(s)){
-str+=s.substring(0,tag.index);
-s=s.substring((tag.index+tag[0].length),s.length);
-tag=tag[0];
-_35="";
-while(_30=_3a.exec(tag)){
-_33="";
-_37=_30[3];
-switch(_30[1].toLowerCase()){
-case "src":
-case "href":
-if(_3b.exec(_37)){
-_33=_37;
-}else{
-_33=(new dojo.uri.Uri(url,_37).toString());
-}
-break;
-case "style":
-_33=dojo.html.fixPathsInCssText(_37,url);
-break;
-default:
-_33=_37;
-}
-fix=" "+_30[1]+"="+_30[2]+_33+_30[2];
-_35+=tag.substring(0,_30.index)+fix;
-tag=tag.substring((_30.index+_30[0].length),tag.length);
-}
-str+=_35+tag;
-}
-s=str+s;
-}
-_38=/(?:<(style)[^>]*>([\s\S]*?)<\/style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
-while(_2e=_38.exec(s)){
-if(_2e[1]&&_2e[1].toLowerCase()=="style"){
-_31.push(dojo.html.fixPathsInCssText(_2e[2],url));
-}else{
-if(_30=_2e[3].match(/href=(['"]?)([^'">]*)\1/i)){
-_31.push({path:_30[2]});
-}
-}
-s=s.substring(0,_2e.index)+s.substr(_2e.index+_2e[0].length);
-}
-var _38=/<script([^>]*)>([\s\S]*?)<\/script>/i;
-var _3c=/src=(['"]?)([^"']*)\1/i;
-var _3d=/.*(\bdojo\b\.js(?:\.uncompressed\.js)?)$/;
-var _3e=/(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo\.hostenv\.writeIncludes\(\s*\);?/g;
-var _3f=/dojo\.(?:(?:require(?:After)?(?:If)?)|(?:widget\.(?:manager\.)?registerWidgetPackage)|(?:(?:hostenv\.)?setModulePrefix|registerModulePath)|defineNamespace)\((['"]).*?\1\)\s*;?/;
-while(_2e=_38.exec(s)){
-if(this.executeScripts&&_2e[1]){
-if(_30=_3c.exec(_2e[1])){
-if(_3d.exec(_30[2])){
-dojo.debug("Security note! inhibit:"+_30[2]+" from  being loaded again.");
-}else{
-_2c.push({path:_30[2]});
-}
-}
-}
-if(_2e[2]){
-var sc=_2e[2].replace(_3e,"");
-if(!sc){
-continue;
-}
-while(tmp=_3f.exec(sc)){
-_2f.push(tmp[0]);
-sc=sc.substring(0,tmp.index)+sc.substr(tmp.index+tmp[0].length);
-}
-if(this.executeScripts){
-_2c.push(sc);
-}
-}
-s=s.substr(0,_2e.index)+s.substr(_2e.index+_2e[0].length);
-}
-if(this.extractContent){
-_2e=s.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_2e){
-s=_2e[1];
-}
-}
-if(this.executeScripts&&this.scriptSeparation){
-var _38=/(<[a-zA-Z][a-zA-Z0-9]*\s[^>]*?\S=)((['"])[^>]*scriptScope[^>]*>)/;
-var _41=/([\s'";:\(])scriptScope(.*)/;
-str="";
-while(tag=_38.exec(s)){
-tmp=((tag[3]=="'")?"\"":"'");
-fix="";
-str+=s.substring(0,tag.index)+tag[1];
-while(_30=_41.exec(tag[2])){
-tag[2]=tag[2].substring(0,_30.index)+_30[1]+"dojo.widget.byId("+tmp+this.widgetId+tmp+").scriptScope"+_30[2];
-}
-str+=tag[2];
-s=s.substr(tag.index+tag[0].length);
-}
-s=str+s;
-}
-}
-return {"xml":s,"styles":_31,"titles":_2b,"requires":_2f,"scripts":_2c,"url":url};
-},_setContent:function(_42){
-this.destroyChildren();
-for(var i=0;i<this._styleNodes.length;i++){
-if(this._styleNodes[i]&&this._styleNodes[i].parentNode){
-this._styleNodes[i].parentNode.removeChild(this._styleNodes[i]);
-}
-}
-this._styleNodes=[];
-try{
-var _44=this.containerNode||this.domNode;
-while(_44.firstChild){
-dojo.html.destroyNode(_44.firstChild);
-}
-if(typeof _42!="string"){
-_44.appendChild(_42);
-}else{
-_44.innerHTML=_42;
-}
-}
-catch(e){
-e.text="Couldn't load content:"+e.description;
-this._handleDefaults(e,"onContentError");
-}
-},setContent:function(_45){
-this.abort();
-if(this._callOnUnload){
-this.onUnload();
-}
-this._callOnUnload=true;
-if(!_45||dojo.html.isNode(_45)){
-this._setContent(_45);
-this.onResized();
-this.onLoad();
-}else{
-if(typeof _45.xml!="string"){
-this.href="";
-_45=this.splitAndFixPaths(_45);
-}
-this._setContent(_45.xml);
-for(var i=0;i<_45.styles.length;i++){
-if(_45.styles[i].path){
-this._styleNodes.push(dojo.html.insertCssFile(_45.styles[i].path,dojo.doc(),false,true));
-}else{
-this._styleNodes.push(dojo.html.insertCssText(_45.styles[i]));
-}
-}
-if(this.parseContent){
-for(var i=0;i<_45.requires.length;i++){
-try{
-eval(_45.requires[i]);
-}
-catch(e){
-e.text="ContentPane: error in package loading calls, "+(e.description||e);
-this._handleDefaults(e,"onContentError","debug");
-}
-}
-}
-var _47=this;
-function asyncParse(){
-if(_47.executeScripts){
-_47._executeScripts(_45.scripts);
-}
-if(_47.parseContent){
-var _48=_47.containerNode||_47.domNode;
-var _49=new dojo.xml.Parse();
-var _4a=_49.parseElement(_48,null,true);
-dojo.widget.getParser().createSubComponents(_4a,_47);
-}
-_47.onResized();
-_47.onLoad();
-}
-if(dojo.hostenv.isXDomain&&_45.requires.length){
-dojo.addOnLoad(asyncParse);
-}else{
-asyncParse();
-}
-}
-},setHandler:function(_4b){
-var fcn=dojo.lang.isFunction(_4b)?_4b:window[_4b];
-if(!dojo.lang.isFunction(fcn)){
-this._handleDefaults("Unable to set handler, '"+_4b+"' not a function.","onExecError",true);
-return;
-}
-this.handler=function(){
-return fcn.apply(this,arguments);
-};
-},_runHandler:function(){
-var ret=true;
-if(dojo.lang.isFunction(this.handler)){
-this.handler(this,this.domNode);
-ret=false;
-}
-this.onLoad();
-return ret;
-},_executeScripts:function(_4e){
-var _4f=this;
-var tmp="",_51="";
-for(var i=0;i<_4e.length;i++){
-if(_4e[i].path){
-dojo.io.bind(this._cacheSetting({"url":_4e[i].path,"load":function(_53,_54){
-dojo.lang.hitch(_4f,tmp=";"+_54);
-},"error":function(_55,_56){
-_56.text=_55+" downloading remote script";
-_4f._handleDefaults.call(_4f,_56,"onExecError","debug");
-},"mimetype":"text/plain","sync":true},this.cacheContent));
-_51+=tmp;
-}else{
-_51+=_4e[i];
-}
-}
-try{
-if(this.scriptSeparation){
-delete this.scriptScope;
-this.scriptScope=new (new Function("_container_",_51+"; return this;"))(_4f);
-}else{
-var djg=dojo.global();
-if(djg.execScript){
-djg.execScript(_51);
-}else{
-var djd=dojo.doc();
-var sc=djd.createElement("script");
-sc.appendChild(djd.createTextNode(_51));
-(this.containerNode||this.domNode).appendChild(sc);
-}
-}
-}
-catch(e){
-e.text="Error running scripts from content:\n"+e.description;
-this._handleDefaults(e,"onExecError","debug");
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/CurrencyTextbox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/CurrencyTextbox.js
deleted file mode 100644
index a5ccf85..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/CurrencyTextbox.js
+++ /dev/null
@@ -1,27 +0,0 @@
-dojo.provide("dojo.widget.CurrencyTextbox");
-dojo.require("dojo.widget.IntegerTextbox");
-dojo.require("dojo.validate.common");
-dojo.widget.defineWidget("dojo.widget.CurrencyTextbox",dojo.widget.IntegerTextbox,{mixInProperties:function(_1,_2){
-dojo.widget.CurrencyTextbox.superclass.mixInProperties.apply(this,arguments);
-if(_1.fractional){
-this.flags.fractional=(_1.fractional=="true");
-}else{
-if(_1.cents){
-dojo.deprecated("dojo.widget.IntegerTextbox","use fractional attr instead of cents","0.5");
-this.flags.fractional=(_1.cents=="true");
-}
-}
-if(_1.symbol){
-this.flags.symbol=_1.symbol;
-}
-if(_1.min){
-this.flags.min=parseFloat(_1.min);
-}
-if(_1.max){
-this.flags.max=parseFloat(_1.max);
-}
-},isValid:function(){
-return dojo.validate.isCurrency(this.textbox.value,this.flags);
-},isInRange:function(){
-return dojo.validate.isInRange(this.textbox.value,this.flags);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DatePicker.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DatePicker.js
deleted file mode 100644
index ab412bd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DatePicker.js
+++ /dev/null
@@ -1,345 +0,0 @@
-dojo.provide("dojo.widget.DatePicker");
-dojo.require("dojo.date.common");
-dojo.require("dojo.date.format");
-dojo.require("dojo.date.serialize");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.event.*");
-dojo.require("dojo.dom");
-dojo.require("dojo.html.style");
-dojo.widget.defineWidget("dojo.widget.DatePicker",dojo.widget.HtmlWidget,{value:"",name:"",displayWeeks:6,adjustWeeks:false,startDate:"1492-10-12",endDate:"2941-10-12",weekStartsOn:"",staticDisplay:false,dayWidth:"narrow",classNames:{previous:"previousMonth",disabledPrevious:"previousMonthDisabled",current:"currentMonth",disabledCurrent:"currentMonthDisabled",next:"nextMonth",disabledNext:"nextMonthDisabled",currentDate:"currentDate",selectedDate:"selectedDate"},templateString:"<div class=\"datePickerContainer\" dojoAttachPoint=\"datePickerContainerNode\">\n\t<table cellspacing=\"0\" cellpadding=\"0\" class=\"calendarContainer\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<td class=\"monthWrapper\" valign=\"top\">\n\t\t\t\t\t<table class=\"monthContainer\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td class=\"monthCurve monthCurveTL\" valign=\"top\"></td>\n\t\t\t\t\t\t\t<td class=\"monthLabelContainer\" valign=\"top\">\n\t\t\t\t\t\t\t\t<span dojoAttachPoint=\"increaseWeekNode\" \n\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementWeek;\" \n\t\t\t\t\t\t\t\t\tclass=\"incrementControl increase\">\n\t\t\t\t\t\t\t\t\t<img src=\"${dojoWidgetModuleUri}templates/images/incrementMonth.png\" \n\t\t\t\t\t\t\t\t\talt=\"&darr;\" style=\"width:7px;height:5px;\" />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span \n\t\t\t\t\t\t\t\t\tdojoAttachPoint=\"increaseMonthNode\" \n\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementMonth;\" class=\"incrementControl increase\">\n\t\t\t\t\t\t\t\t\t<img src=\"${dojoWidgetModuleUri}templates/images/incrementMonth.png\" \n\t\t\t\t\t\t\t\t\t\talt=\"&darr;\"  dojoAttachPoint=\"incrementMonthImageNode\">\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span \n\t\t\t\t\t\t\t\t\tdojoAttachPoint=\"decreaseWeekNode\" \n\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementWeek;\" \n\t\t\t\t\t\t\t\t\tclass=\"incrementControl decrease\">\n\t\t\t\t\t\t\t\t\t<img src=\"${dojoWidgetModuleUri}templates/images/decrementMonth.png\" alt=\"&uarr;\" style=\"width:7px;height:5px;\" />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span \n\t\t\t\t\t\t\t\t\tdojoAttachPoint=\"decreaseMonthNode\" \n\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementMonth;\" class=\"incrementControl decrease\">\n\t\t\t\t\t\t\t\t\t<img src=\"${dojoWidgetModuleUri}templates/images/decrementMonth.png\" \n\t\t\t\t\t\t\t\t\t\talt=\"&uarr;\" dojoAttachPoint=\"decrementMonthImageNode\">\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span dojoAttachPoint=\"monthLabelNode\" class=\"month\"></span>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td class=\"monthCurve monthCurveTR\" valign=\"top\"></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td colspan=\"3\">\n\t\t\t\t\t<table class=\"calendarBodyContainer\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr dojoAttachPoint=\"dayLabelsRow\">\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t<tbody dojoAttachPoint=\"calendarDatesContainerNode\" \n\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: _handleUiClick;\">\n\t\t\t\t\t\t\t<tr dojoAttachPoint=\"calendarWeekTemplate\">\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t\t<td></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\t<tr>\n\t\t\t\t<td colspan=\"3\" class=\"yearWrapper\">\n\t\t\t\t\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" class=\"yearContainer\">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td class=\"curveBL\" valign=\"top\"></td>\n\t\t\t\t\t\t\t<td valign=\"top\">\n\t\t\t\t\t\t\t\t<h3 class=\"yearLabel\">\n\t\t\t\t\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\"\n\t\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementYear;\" class=\"previousYear\"></span>\n\t\t\t\t\t\t\t\t\t<span class=\"selectedYear\" dojoAttachPoint=\"currentYearLabelNode\"></span>\n\t\t\t\t\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" \n\t\t\t\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onIncrementYear;\" class=\"nextYear\"></span>\n\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td class=\"curveBR\" valign=\"top\"></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tfoot>\n\t</table>\n\t\n</div>\n",templateCssString:".datePickerContainer {\n\twidth:164px; /* needed for proper user styling */\n}\n\n.calendarContainer {\n/*\tborder:1px solid #566f8f;*/\n}\n\n.calendarBodyContainer {\n\twidth:100%; /* needed for the explode effect (explain?) */\n\tbackground: #7591bc url(\"images/dpBg.gif\") top left repeat-x;\n}\n\n.calendarBodyContainer thead tr td {\n\tcolor:#293a4b;\n\tfont:bold 0.75em Helvetica, Arial, Verdana, sans-serif;\n\ttext-align:center;\n\tpadding:0.25em;\n\tbackground: url(\"images/dpHorizLine.gif\") bottom left repeat-x;\n}\n\n.calendarBodyContainer tbody tr td {\n\tcolor:#fff;\n\tfont:bold 0.7em Helvetica, Arial, Verdana, sans-serif;\n\ttext-align:center;\n\tpadding:0.4em;\n\tbackground: url(\"images/dpVertLine.gif\") top right repeat-y;\n\tcursor:pointer;\n\tcursor:hand;\n}\n\n\n.monthWrapper {\n\tpadding-bottom:2px;\n\tbackground: url(\"images/dpHorizLine.gif\") bottom left repeat-x;\n}\n\n.monthContainer {\n\twidth:100%;\n}\n\n.monthLabelContainer {\n\ttext-align:center;\n\tfont:bold 0.75em Helvetica, Arial, Verdana, sans-serif;\n\tbackground: url(\"images/dpMonthBg.png\") repeat-x top left !important;\n\tcolor:#293a4b;\n\tpadding:0.25em;\n}\n\n.monthCurve {\n\twidth:12px;\n}\n\n.monthCurveTL {\n\tbackground: url(\"images/dpCurveTL.png\") no-repeat top left !important;\n}\n\n.monthCurveTR {\n\t\tbackground: url(\"images/dpCurveTR.png\") no-repeat top right !important;\n}\n\n\n.yearWrapper {\n\tbackground: url(\"images/dpHorizLineFoot.gif\") top left repeat-x;\n\tpadding-top:2px;\n}\n\n.yearContainer {\n\twidth:100%;\n}\n\n.yearContainer td {\n\tbackground:url(\"images/dpYearBg.png\") top left repeat-x;\n}\n\n.yearContainer .yearLabel {\n\tmargin:0;\n\tpadding:0.45em 0 0.45em 0;\n\tcolor:#fff;\n\tfont:bold 0.75em Helvetica, Arial, Verdana, sans-serif;\n\ttext-align:center;\n}\n\n.curveBL {\n\tbackground: url(\"images/dpCurveBL.png\") bottom left no-repeat !important;\n\twidth:9px !important;\n\tpadding:0;\n\tmargin:0;\n}\n\n.curveBR {\n\tbackground: url(\"images/dpCurveBR.png\") bottom right no-repeat !important;\n\twidth:9px !important;\n\tpadding:0;\n\tmargin:0;\n}\n\n\n.previousMonth {\n\tbackground-color:#6782a8 !important;\n}\n\n.previousMonthDisabled {\n\tbackground-color:#a4a5a6 !important;\n\tcursor:default !important\n}\n.currentMonth {\n}\n\n.currentMonthDisabled {\n\tbackground-color:#bbbbbc !important;\n\tcursor:default !important\n}\n.nextMonth {\n\tbackground-color:#6782a8 !important;\n}\n.nextMonthDisabled {\n\tbackground-color:#a4a5a6 !important;\n\tcursor:default !important;\n}\n\n.currentDate {\n\ttext-decoration:underline;\n\tfont-style:italic;\n}\n\n.selectedDate {\n\tbackground-color:#fff !important;\n\tcolor:#6782a8 !important;\n}\n\n.yearLabel .selectedYear {\n\tpadding:0.2em;\n\tbackground-color:#9ec3fb !important;\n}\n\n.nextYear, .previousYear {\n\tcursor:pointer;cursor:hand;\n\tpadding:0;\n}\n\n.nextYear {\n\tmargin:0 0 0 0.55em;\n}\n\n.previousYear {\n\tmargin:0 0.55em 0 0;\n}\n\n.incrementControl {\n\tcursor:pointer;cursor:hand;\n\twidth:1em;\n}\n\n.increase {\n\tfloat:right;\n}\n\n.decrease {\n\tfloat:left;\n}\n\n.lastColumn {\n\tbackground-image:none !important;\n}\n\n\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/DatePicker.css"),postMixInProperties:function(){
-dojo.widget.DatePicker.superclass.postMixInProperties.apply(this,arguments);
-if(!this.weekStartsOn){
-this.weekStartsOn=dojo.date.getFirstDayOfWeek(this.lang);
-}
-this.today=new Date();
-this.today.setHours(0,0,0,0);
-if(typeof (this.value)=="string"&&this.value.toLowerCase()=="today"){
-this.value=new Date();
-}else{
-if(this.value&&(typeof this.value=="string")&&(this.value.split("-").length>2)){
-this.value=dojo.date.fromRfc3339(this.value);
-this.value.setHours(0,0,0,0);
-}
-}
-},fillInTemplate:function(_1,_2){
-dojo.widget.DatePicker.superclass.fillInTemplate.apply(this,arguments);
-var _3=this.getFragNodeRef(_2);
-dojo.html.copyStyle(this.domNode,_3);
-this.weekTemplate=dojo.dom.removeNode(this.calendarWeekTemplate);
-this._preInitUI(this.value?this.value:this.today,false,true);
-var _4=dojo.lang.unnest(dojo.date.getNames("days",this.dayWidth,"standAlone",this.lang));
-if(this.weekStartsOn>0){
-for(var i=0;i<this.weekStartsOn;i++){
-_4.push(_4.shift());
-}
-}
-var _6=this.dayLabelsRow.getElementsByTagName("td");
-for(i=0;i<7;i++){
-_6.item(i).innerHTML=_4[i];
-}
-if(this.value){
-this.setValue(this.value);
-}
-},getValue:function(){
-return dojo.date.toRfc3339(new Date(this.value),"dateOnly");
-},getDate:function(){
-return this.value;
-},setValue:function(_7){
-this.setDate(_7);
-},setDate:function(_8){
-var d=_8;
-if(typeof (d)=="string"&&d!=""){
-var t=dojo.date.fromRfc3339(d);
-}else{
-if(typeof (d)=="object"){
-var t=new Date(d);
-}else{
-t="";
-}
-}
-if(typeof (t)=="object"){
-this.value=new Date(t);
-this.value.setHours(0,0,0,0);
-}else{
-this.value="";
-}
-if(this.selectedNode!=null){
-dojo.html.removeClass(this.selectedNode,this.classNames.selectedDate);
-}
-if(this.clickedNode!=null){
-dojo.html.addClass(this.clickedNode,this.classNames.selectedDate);
-this.selectedNode=this.clickedNode;
-}else{
-this._preInitUI((this.value=="")?this.curMonth:this.value,false,true);
-}
-this.clickedNode=null;
-this.onValueChanged(this.value);
-},_preInitUI:function(_b,_c,_d){
-function checkDate(d,s){
-if(typeof (d)=="string"){
-var t=dojo.date.fromRfc3339(d);
-if(t==null&&typeof (s)=="string"){
-var t=dojo.date.fromRfc3339(s);
-}
-return t;
-}
-return d;
-}
-this.startDate=checkDate(this.startDate,"1492-10-12");
-this.endDate=checkDate(this.endDate,"2941-10-12");
-this.startDate.setHours(0,0,0,0);
-this.endDate.setHours(24,0,0,-1);
-if(_b<this.startDate||_b>this.endDate){
-_b=new Date((_b<this.startDate)?this.startDate:this.endDate);
-}
-this.firstDay=this._initFirstDay(_b,_c);
-this.selectedIsUsed=false;
-this.currentIsUsed=false;
-var _11=new Date(this.firstDay);
-var _12=_11.getMonth();
-this.curMonth=new Date(_11);
-this.curMonth.setDate(_11.getDate()+6);
-this.curMonth.setDate(1);
-if(this.displayWeeks==""||this.adjustWeeks){
-this.adjustWeeks=true;
-this.displayWeeks=Math.ceil((dojo.date.getDaysInMonth(this.curMonth)+this._getAdjustedDay(this.curMonth))/7);
-}
-var _13=this.displayWeeks*7;
-if(dojo.date.diff(this.startDate,this.endDate,dojo.date.dateParts.DAY)<_13){
-this.staticDisplay=true;
-if(dojo.date.diff(_11,this.endDate,dojo.date.dateParts.DAY)>_13){
-this._preInitUI(this.startDate,true,false);
-_11=new Date(this.firstDay);
-}
-this.curMonth=new Date(_11);
-this.curMonth.setDate(_11.getDate()+6);
-this.curMonth.setDate(1);
-var _14=(_11.getMonth()==this.curMonth.getMonth())?"current":"previous";
-}
-if(_d){
-this._initUI(_13);
-}
-},_initUI:function(_15){
-dojo.dom.removeChildren(this.calendarDatesContainerNode);
-for(var i=0;i<this.displayWeeks;i++){
-this.calendarDatesContainerNode.appendChild(this.weekTemplate.cloneNode(true));
-}
-var _17=new Date(this.firstDay);
-this._setMonthLabel(this.curMonth.getMonth());
-this._setYearLabels(this.curMonth.getFullYear());
-var _18=this.calendarDatesContainerNode.getElementsByTagName("td");
-var _19=this.calendarDatesContainerNode.getElementsByTagName("tr");
-var _1a;
-for(i=0;i<_15;i++){
-_1a=_18.item(i);
-_1a.innerHTML=_17.getDate();
-_1a.setAttribute("djDateValue",_17.valueOf());
-var _1b=(_17.getMonth()!=this.curMonth.getMonth()&&Number(_17)<Number(this.curMonth))?"previous":(_17.getMonth()==this.curMonth.getMonth())?"current":"next";
-var _1c=_1b;
-if(this._isDisabledDate(_17)){
-var _1d={previous:"disabledPrevious",current:"disabledCurrent",next:"disabledNext"};
-_1c=_1d[_1b];
-}
-dojo.html.setClass(_1a,this._getDateClassName(_17,_1c));
-if(dojo.html.hasClass(_1a,this.classNames.selectedDate)){
-this.selectedNode=_1a;
-}
-_17=dojo.date.add(_17,dojo.date.dateParts.DAY,1);
-}
-this.lastDay=dojo.date.add(_17,dojo.date.dateParts.DAY,-1);
-this._initControls();
-},_initControls:function(){
-var d=this.firstDay;
-var d2=this.lastDay;
-var _20,_21,_22,_23,_24,_25;
-_20=_21=_22=_23=_24=_25=!this.staticDisplay;
-with(dojo.date.dateParts){
-var add=dojo.date.add;
-if(_20&&add(d,DAY,(-1*(this._getAdjustedDay(d)+1)))<this.startDate){
-_20=_22=_24=false;
-}
-if(_21&&d2>this.endDate){
-_21=_23=_25=false;
-}
-if(_22&&add(d,DAY,-1)<this.startDate){
-_22=_24=false;
-}
-if(_23&&add(d2,DAY,1)>this.endDate){
-_23=_25=false;
-}
-if(_24&&add(d2,YEAR,-1)<this.startDate){
-_24=false;
-}
-if(_25&&add(d,YEAR,1)>this.endDate){
-_25=false;
-}
-}
-function enableControl(_27,_28){
-dojo.html.setVisibility(_27,_28?"":"hidden");
-}
-enableControl(this.decreaseWeekNode,_20);
-enableControl(this.increaseWeekNode,_21);
-enableControl(this.decreaseMonthNode,_22);
-enableControl(this.increaseMonthNode,_23);
-enableControl(this.previousYearLabelNode,_24);
-enableControl(this.nextYearLabelNode,_25);
-},_incrementWeek:function(evt){
-var d=new Date(this.firstDay);
-switch(evt.target){
-case this.increaseWeekNode.getElementsByTagName("img").item(0):
-case this.increaseWeekNode:
-var _2b=dojo.date.add(d,dojo.date.dateParts.WEEK,1);
-if(_2b<this.endDate){
-d=dojo.date.add(d,dojo.date.dateParts.WEEK,1);
-}
-break;
-case this.decreaseWeekNode.getElementsByTagName("img").item(0):
-case this.decreaseWeekNode:
-if(d>=this.startDate){
-d=dojo.date.add(d,dojo.date.dateParts.WEEK,-1);
-}
-break;
-}
-this._preInitUI(d,true,true);
-},_incrementMonth:function(evt){
-var d=new Date(this.curMonth);
-var _2e=new Date(this.firstDay);
-switch(evt.currentTarget){
-case this.increaseMonthNode.getElementsByTagName("img").item(0):
-case this.increaseMonthNode:
-_2e=dojo.date.add(_2e,dojo.date.dateParts.DAY,this.displayWeeks*7);
-if(_2e<this.endDate){
-d=dojo.date.add(d,dojo.date.dateParts.MONTH,1);
-}else{
-var _2f=true;
-}
-break;
-case this.decreaseMonthNode.getElementsByTagName("img").item(0):
-case this.decreaseMonthNode:
-if(_2e>this.startDate){
-d=dojo.date.add(d,dojo.date.dateParts.MONTH,-1);
-}else{
-var _30=true;
-}
-break;
-}
-if(_30){
-d=new Date(this.startDate);
-}else{
-if(_2f){
-d=new Date(this.endDate);
-}
-}
-this._preInitUI(d,false,true);
-},_incrementYear:function(evt){
-var _32=this.curMonth.getFullYear();
-var _33=new Date(this.firstDay);
-switch(evt.target){
-case this.nextYearLabelNode:
-_33=dojo.date.add(_33,dojo.date.dateParts.YEAR,1);
-if(_33<this.endDate){
-_32++;
-}else{
-var _34=true;
-}
-break;
-case this.previousYearLabelNode:
-_33=dojo.date.add(_33,dojo.date.dateParts.YEAR,-1);
-if(_33>this.startDate){
-_32--;
-}else{
-var _35=true;
-}
-break;
-}
-var d;
-if(_35){
-d=new Date(this.startDate);
-}else{
-if(_34){
-d=new Date(this.endDate);
-}else{
-d=new Date(_32,this.curMonth.getMonth(),1);
-}
-}
-this._preInitUI(d,false,true);
-},onIncrementWeek:function(evt){
-evt.stopPropagation();
-if(!this.staticDisplay){
-this._incrementWeek(evt);
-}
-},onIncrementMonth:function(evt){
-evt.stopPropagation();
-if(!this.staticDisplay){
-this._incrementMonth(evt);
-}
-},onIncrementYear:function(evt){
-evt.stopPropagation();
-if(!this.staticDisplay){
-this._incrementYear(evt);
-}
-},_setMonthLabel:function(_3a){
-this.monthLabelNode.innerHTML=dojo.date.getNames("months","wide","standAlone",this.lang)[_3a];
-},_setYearLabels:function(_3b){
-var y=_3b-1;
-var _3d=this;
-function f(n){
-_3d[n+"YearLabelNode"].innerHTML=dojo.date.format(new Date(y++,0),{selector:"yearOnly",locale:_3d.lang});
-}
-f("previous");
-f("current");
-f("next");
-},_getDateClassName:function(_3f,_40){
-var _41=this.classNames[_40];
-if((!this.selectedIsUsed&&this.value)&&(Number(_3f)==Number(this.value))){
-_41=this.classNames.selectedDate+" "+_41;
-this.selectedIsUsed=true;
-}
-if((!this.currentIsUsed)&&(Number(_3f)==Number(this.today))){
-_41=_41+" "+this.classNames.currentDate;
-this.currentIsUsed=true;
-}
-return _41;
-},onClick:function(evt){
-dojo.event.browser.stopEvent(evt);
-},_handleUiClick:function(evt){
-var _44=evt.target;
-if(_44.nodeType!=dojo.dom.ELEMENT_NODE){
-_44=_44.parentNode;
-}
-dojo.event.browser.stopEvent(evt);
-this.selectedIsUsed=this.todayIsUsed=false;
-if(dojo.html.hasClass(_44,this.classNames["disabledPrevious"])||dojo.html.hasClass(_44,this.classNames["disabledCurrent"])||dojo.html.hasClass(_44,this.classNames["disabledNext"])){
-return;
-}
-this.clickedNode=_44;
-this.setDate(new Date(Number(dojo.html.getAttribute(_44,"djDateValue"))));
-},onValueChanged:function(_45){
-},_isDisabledDate:function(_46){
-if(_46<this.startDate||_46>this.endDate){
-return true;
-}
-return this.isDisabledDate(_46,this.lang);
-},isDisabledDate:function(_47,_48){
-return false;
-},_initFirstDay:function(_49,adj){
-var d=new Date(_49);
-if(!adj){
-d.setDate(1);
-}
-d.setDate(d.getDate()-this._getAdjustedDay(d,this.weekStartsOn));
-d.setHours(0,0,0,0);
-return d;
-},_getAdjustedDay:function(_4c){
-var _4d=[0,1,2,3,4,5,6];
-if(this.weekStartsOn>0){
-for(var i=0;i<this.weekStartsOn;i++){
-_4d.unshift(_4d.pop());
-}
-}
-return _4d[_4c.getDay()];
-},destroy:function(){
-dojo.widget.DatePicker.superclass.destroy.apply(this,arguments);
-dojo.html.destroyNode(this.weekTemplate);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DateTextbox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DateTextbox.js
deleted file mode 100644
index 0badcd2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DateTextbox.js
+++ /dev/null
@@ -1,34 +0,0 @@
-dojo.provide("dojo.widget.DateTextbox");
-dojo.require("dojo.widget.ValidationTextbox");
-dojo.require("dojo.date.format");
-dojo.require("dojo.validate.datetime");
-dojo.widget.defineWidget("dojo.widget.DateTextbox",dojo.widget.ValidationTextbox,{displayFormat:"",formatLength:"short",mixInProperties:function(_1){
-dojo.widget.DateTextbox.superclass.mixInProperties.apply(this,arguments);
-if(_1.format){
-this.flags.format=_1.format;
-}
-},isValid:function(){
-if(this.flags.format){
-dojo.deprecated("dojo.widget.DateTextbox","format attribute is deprecated; use displayFormat or formatLength instead","0.5");
-return dojo.validate.isValidDate(this.textbox.value,this.flags.format);
-}
-return dojo.date.parse(this.textbox.value,{formatLength:this.formatLength,selector:"dateOnly",locale:this.lang,datePattern:this.displayFormat});
-}});
-dojo.widget.defineWidget("dojo.widget.TimeTextbox",dojo.widget.ValidationTextbox,{displayFormat:"",formatLength:"short",mixInProperties:function(_2){
-dojo.widget.TimeTextbox.superclass.mixInProperties.apply(this,arguments);
-if(_2.format){
-this.flags.format=_2.format;
-}
-if(_2.amsymbol){
-this.flags.amSymbol=_2.amsymbol;
-}
-if(_2.pmsymbol){
-this.flags.pmSymbol=_2.pmsymbol;
-}
-},isValid:function(){
-if(this.flags.format){
-dojo.deprecated("dojo.widget.TimeTextbox","format attribute is deprecated; use displayFormat or formatLength instead","0.5");
-return dojo.validate.isValidTime(this.textbox.value,this.flags);
-}
-return dojo.date.parse(this.textbox.value,{formatLength:this.formatLength,selector:"timeOnly",locale:this.lang,timePattern:this.displayFormat});
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DebugConsole.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DebugConsole.js
deleted file mode 100644
index 56fa89c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DebugConsole.js
+++ /dev/null
@@ -1,10 +0,0 @@
-dojo.provide("dojo.widget.DebugConsole");
-dojo.require("dojo.widget.Widget");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.FloatingPane");
-dojo.widget.defineWidget("dojo.widget.DebugConsole",dojo.widget.FloatingPane,{fillInTemplate:function(){
-dojo.widget.DebugConsole.superclass.fillInTemplate.apply(this,arguments);
-this.containerNode.id="debugConsoleClientPane";
-djConfig.isDebug=true;
-djConfig.debugContainerId=this.containerNode.id;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Dialog.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Dialog.js
deleted file mode 100644
index 9099db6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Dialog.js
+++ /dev/null
@@ -1,287 +0,0 @@
-dojo.provide("dojo.widget.Dialog");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.ContentPane");
-dojo.require("dojo.event.*");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.html.display");
-dojo.require("dojo.html.iframe");
-dojo.declare("dojo.widget.ModalDialogBase",null,{isContainer:true,focusElement:"",bgColor:"black",bgOpacity:0.4,followScroll:true,closeOnBackgroundClick:false,trapTabs:function(e){
-if(e.target==this.tabStartOuter){
-if(this._fromTrap){
-this.tabStart.focus();
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabEnd.focus();
-}
-}else{
-if(e.target==this.tabStart){
-if(this._fromTrap){
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabEnd.focus();
-}
-}else{
-if(e.target==this.tabEndOuter){
-if(this._fromTrap){
-this.tabEnd.focus();
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabStart.focus();
-}
-}else{
-if(e.target==this.tabEnd){
-if(this._fromTrap){
-this._fromTrap=false;
-}else{
-this._fromTrap=true;
-this.tabStart.focus();
-}
-}
-}
-}
-}
-},clearTrap:function(e){
-var _3=this;
-setTimeout(function(){
-_3._fromTrap=false;
-},100);
-},postCreate:function(){
-with(this.domNode.style){
-position="absolute";
-zIndex=999;
-display="none";
-overflow="visible";
-}
-var b=dojo.body();
-b.appendChild(this.domNode);
-this.bg=document.createElement("div");
-this.bg.className="dialogUnderlay";
-with(this.bg.style){
-position="absolute";
-left=top="0px";
-zIndex=998;
-display="none";
-}
-b.appendChild(this.bg);
-this.setBackgroundColor(this.bgColor);
-this.bgIframe=new dojo.html.BackgroundIframe();
-if(this.bgIframe.iframe){
-with(this.bgIframe.iframe.style){
-position="absolute";
-left=top="0px";
-zIndex=90;
-display="none";
-}
-}
-if(this.closeOnBackgroundClick){
-dojo.event.kwConnect({srcObj:this.bg,srcFunc:"onclick",adviceObj:this,adviceFunc:"onBackgroundClick",once:true});
-}
-},uninitialize:function(){
-this.bgIframe.remove();
-dojo.html.removeNode(this.bg,true);
-},setBackgroundColor:function(_5){
-if(arguments.length>=3){
-_5=new dojo.gfx.color.Color(arguments[0],arguments[1],arguments[2]);
-}else{
-_5=new dojo.gfx.color.Color(_5);
-}
-this.bg.style.backgroundColor=_5.toString();
-return this.bgColor=_5;
-},setBackgroundOpacity:function(op){
-if(arguments.length==0){
-op=this.bgOpacity;
-}
-dojo.html.setOpacity(this.bg,op);
-try{
-this.bgOpacity=dojo.html.getOpacity(this.bg);
-}
-catch(e){
-this.bgOpacity=op;
-}
-return this.bgOpacity;
-},_sizeBackground:function(){
-if(this.bgOpacity>0){
-var _7=dojo.html.getViewport();
-var h=_7.height;
-var w=_7.width;
-with(this.bg.style){
-width=w+"px";
-height=h+"px";
-}
-var _a=dojo.html.getScroll().offset;
-this.bg.style.top=_a.y+"px";
-this.bg.style.left=_a.x+"px";
-var _7=dojo.html.getViewport();
-if(_7.width!=w){
-this.bg.style.width=_7.width+"px";
-}
-if(_7.height!=h){
-this.bg.style.height=_7.height+"px";
-}
-}
-this.bgIframe.size(this.bg);
-},_showBackground:function(){
-if(this.bgOpacity>0){
-this.bg.style.display="block";
-}
-if(this.bgIframe.iframe){
-this.bgIframe.iframe.style.display="block";
-}
-},placeModalDialog:function(){
-var _b=dojo.html.getScroll().offset;
-var _c=dojo.html.getViewport();
-var mb;
-if(this.isShowing()){
-mb=dojo.html.getMarginBox(this.domNode);
-}else{
-dojo.html.setVisibility(this.domNode,false);
-dojo.html.show(this.domNode);
-mb=dojo.html.getMarginBox(this.domNode);
-dojo.html.hide(this.domNode);
-dojo.html.setVisibility(this.domNode,true);
-}
-var x=_b.x+(_c.width-mb.width)/2;
-var y=_b.y+(_c.height-mb.height)/2;
-with(this.domNode.style){
-left=x+"px";
-top=y+"px";
-}
-},_onKey:function(evt){
-if(evt.key){
-var _11=evt.target;
-while(_11!=null){
-if(_11==this.domNode){
-return;
-}
-_11=_11.parentNode;
-}
-if(evt.key!=evt.KEY_TAB){
-dojo.event.browser.stopEvent(evt);
-}else{
-if(!dojo.render.html.opera){
-try{
-this.tabStart.focus();
-}
-catch(e){
-}
-}
-}
-}
-},showModalDialog:function(){
-if(this.followScroll&&!this._scrollConnected){
-this._scrollConnected=true;
-dojo.event.connect(window,"onscroll",this,"_onScroll");
-}
-dojo.event.connect(document.documentElement,"onkey",this,"_onKey");
-this.placeModalDialog();
-this.setBackgroundOpacity();
-this._sizeBackground();
-this._showBackground();
-this._fromTrap=true;
-setTimeout(dojo.lang.hitch(this,function(){
-try{
-this.tabStart.focus();
-}
-catch(e){
-}
-}),50);
-},hideModalDialog:function(){
-if(this.focusElement){
-dojo.byId(this.focusElement).focus();
-dojo.byId(this.focusElement).blur();
-}
-this.bg.style.display="none";
-this.bg.style.width=this.bg.style.height="1px";
-if(this.bgIframe.iframe){
-this.bgIframe.iframe.style.display="none";
-}
-dojo.event.disconnect(document.documentElement,"onkey",this,"_onKey");
-if(this._scrollConnected){
-this._scrollConnected=false;
-dojo.event.disconnect(window,"onscroll",this,"_onScroll");
-}
-},_onScroll:function(){
-var _12=dojo.html.getScroll().offset;
-this.bg.style.top=_12.y+"px";
-this.bg.style.left=_12.x+"px";
-this.placeModalDialog();
-},checkSize:function(){
-if(this.isShowing()){
-this._sizeBackground();
-this.placeModalDialog();
-this.onResized();
-}
-},onBackgroundClick:function(){
-if(this.lifetime-this.timeRemaining>=this.blockDuration){
-return;
-}
-this.hide();
-}});
-dojo.widget.defineWidget("dojo.widget.Dialog",[dojo.widget.ContentPane,dojo.widget.ModalDialogBase],{templateString:"<div id=\"${this.widgetId}\" class=\"dojoDialog\" dojoattachpoint=\"wrapper\">\n\t<span dojoattachpoint=\"tabStartOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\"\ttabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabStart\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoattachpoint=\"containerNode\" style=\"position: relative; z-index: 2;\"></div>\n\t<span dojoattachpoint=\"tabEnd\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabEndOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n</div>\n",blockDuration:0,lifetime:0,closeNode:"",postMixInProperties:function(){
-dojo.widget.Dialog.superclass.postMixInProperties.apply(this,arguments);
-if(this.closeNode){
-this.setCloseControl(this.closeNode);
-}
-},postCreate:function(){
-dojo.widget.Dialog.superclass.postCreate.apply(this,arguments);
-dojo.widget.ModalDialogBase.prototype.postCreate.apply(this,arguments);
-},show:function(){
-if(this.lifetime){
-this.timeRemaining=this.lifetime;
-if(this.timerNode){
-this.timerNode.innerHTML=Math.ceil(this.timeRemaining/1000);
-}
-if(this.blockDuration&&this.closeNode){
-if(this.lifetime>this.blockDuration){
-this.closeNode.style.visibility="hidden";
-}else{
-this.closeNode.style.display="none";
-}
-}
-if(this.timer){
-clearInterval(this.timer);
-}
-this.timer=setInterval(dojo.lang.hitch(this,"_onTick"),100);
-}
-this.showModalDialog();
-dojo.widget.Dialog.superclass.show.call(this);
-},onLoad:function(){
-this.placeModalDialog();
-dojo.widget.Dialog.superclass.onLoad.call(this);
-},fillInTemplate:function(){
-},hide:function(){
-this.hideModalDialog();
-dojo.widget.Dialog.superclass.hide.call(this);
-if(this.timer){
-clearInterval(this.timer);
-}
-},setTimerNode:function(_13){
-this.timerNode=_13;
-},setCloseControl:function(_14){
-this.closeNode=dojo.byId(_14);
-dojo.event.connect(this.closeNode,"onclick",this,"hide");
-},setShowControl:function(_15){
-_15=dojo.byId(_15);
-dojo.event.connect(_15,"onclick",this,"show");
-},_onTick:function(){
-if(this.timer){
-this.timeRemaining-=100;
-if(this.lifetime-this.timeRemaining>=this.blockDuration){
-if(this.closeNode){
-this.closeNode.style.visibility="visible";
-}
-}
-if(!this.timeRemaining){
-clearInterval(this.timer);
-this.hide();
-}else{
-if(this.timerNode){
-this.timerNode.innerHTML=Math.ceil(this.timeRemaining/1000);
-}
-}
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DocPane.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DocPane.js
deleted file mode 100644
index 8ce6d11..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DocPane.js
+++ /dev/null
@@ -1,249 +0,0 @@
-dojo.provide("dojo.widget.DocPane");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.io.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.Editor2");
-dojo.require("dojo.widget.Dialog");
-dojo.require("dojo.html.common");
-dojo.require("dojo.html.display");
-dojo.widget.DocPane=function(){
-dojo.event.topic.subscribe("/docs/function/results",this,"onDocResults");
-dojo.event.topic.subscribe("/docs/package/results",this,"onPkgResults");
-dojo.event.topic.subscribe("/docs/function/detail",this,"onDocSelectFunction");
-};
-dojo.widget.defineWidget("dojo.widget.DocPane",dojo.widget.HtmlWidget,{dialog:null,dialogBg:null,dialogFg:null,logIn:null,edit:null,save:null,cancel:null,detail:null,result:null,packag:null,fn:null,fnLink:null,count:null,row:null,summary:null,description:null,variables:null,vRow:null,vLink:null,vDesc:null,methods:null,mRow:null,mLink:null,mDesc:null,requires:null,rRow:null,rRow2:null,rH3:null,rLink:null,parameters:null,pRow:null,pLink:null,pDesc:null,pOpt:null,pType:null,sType:null,sName:null,sParams:null,sPType:null,sPTypeSave:null,sPName:null,sPNameSave:null,pkgDescription:null,_appends:[],templateString:"<div class=\"dojoDocPane\">\n\t<div dojoAttachPoint=\"containerNode\" class=\"container\"></div>\n\n\t<div dojoAttachPoint=\"dialog\" class=\"dialog\">\n\t\t<div class=\"container\" dojoAttachPoint=\"dialogBg\">\n\t\t\t<div class=\"docDialog\" dojoAttachPoint=\"dialogFg\">\n\t\t\t\t<h2>Log In</h2>\n\t\t\t\t<p><input id=\"dojoDocUserName\" dojoAttachPoint=\"userName\"><label for=\"dojoDocUserName\">User Name:</label></p>\n\t\t\t\t<p><input id=\"dojoDocPassword\" dojoAttachPoint=\"password\" type=\"password\"><label for=\"dojoDocPassword\">Password:</label></p>\n\t\t\t\t<p><input type=\"button\" dojoAttachPoint=\"cancel\" value=\"cancel\"> <input type=\"button\" dojoAttachPoint=\"logIn\" value=\"Log In\"></p>\n\t\t\t\t<p></p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div dojoAttachPoint=\"nav\" class=\"nav\"><span>Detail</span> | <span>Source</span> | <span>Examples</span> | <span>Walkthrough</span></div>\n\n\t<div dojoAttachPoint=\"detail\" class=\"detail\">\n\t\t<h1>Detail: <span class=\"fn\" dojoAttachPoint=\"fn\">dojo.select</span></h1>\n\t\t<div class=\"description\" dojoAttachPoint=\"description\">Description</div>\n\t\t<div class=\"params\" dojoAttachPoint=\"parameters\">\n\t\t\t<h2>Parameters</h2>\n\t\t\t<div class=\"row\" dojoAttachPoint=\"pRow\">\n\t\t\t\t<span dojoAttachPoint=\"pOpt\"><em>optional</em> </span>\n\t\t\t\t<span><span dojoAttachPoint=\"pType\">type</span> </span>\n\t\t\t\t<a href=\"#\" dojoAttachPoint=\"pLink\">variable</a>\n\t\t\t\t<span> - <span dojoAttachPoint=\"pDesc\"></span></span>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"variables\" dojoAttachPoint=\"variables\">\n\t\t\t<h2>Variables</h2>\n\t\t\t<div class\"row\" dojoAttachPoint=\"vRow\">\n\t\t\t\t<a href=\"#\" dojoAttachPoint=\"vLink\">variable</a><span> - <span dojoAttachPoint=\"vDesc\"></span></span>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"signature\">\n\t\t\t<h2>Signature</h2>\n\t\t\t<div class=\"source\">\n\t\t\t\t<span class=\"return\" dojoAttachPoint=\"sType\">returnType</span> \n\t\t\t\t<span class=\"function\" dojoAttachPoint=\"sName\">foo</span>\n\t\t\t\t(<span class=\"params\" dojoAttachPoint=\"sParams\">\n\t\t\t\t\t<span class=\"type\" dojoAttachPoint=\"sPType\">type </span>\n\t\t\t\t\t<span class=\"name\" dojoAttachPoint=\"sPName\">paramName</span>\n\t\t\t\t</span>)\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t\n\t<div dojoAttachPoint=\"result\" class=\"result\">\n\t\t<h1>Search Results: <span dojoAttachPoint=\"count\">0</span> matches</h1>\n\t\t<div class=\"row\" dojoAttachPoint=\"row\">\n\t\t\t<a href=\"#\" dojoAttachPoint=\"fnLink\">dojo.fnLink</a>\n\t\t\t<span> - <span class=\"summary\" dojoAttachPoint=\"summary\">summary</span></span>\n\t\t</div>\n\t</div>\n\n\t<div dojoAttachPoint=\"packag\" class=\"package\">\n\t\t<h1>Package: \n\t\t\t<span class=\"pkg\" dojoAttachPoint=\"pkg\">dojo.package</span> \n\t\t\t<span class=\"edit\" dojoAttachPoint=\"edit\">[edit]</span> \n\t\t\t<span class=\"save\" dojoAttachPoint=\"save\">[save]</span>\n\t\t</h1>\n\t\t<div dojoAttachPoint=\"pkgDescription\" class=\"description\">Description</div>\n\t\t<div class=\"methods\" dojoAttachPoint=\"methods\">\n\t\t\t<h2>Methods</h2>\n\t\t\t<div class=\"row\" dojoAttachPoint=\"mRow\">\n\t\t\t\t<a href=\"#\" dojoAttachPoint=\"mLink\">method</a>\n\t\t\t\t<span> - <span class=\"description\" dojoAttachPoint=\"mDesc\"></span></span>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"requires\" dojoAttachPoint=\"requires\">\n\t\t\t<h2>Requires</h2>\n\t\t\t<div class=\"row\" dojoAttachPoint=\"rRow\">\n\t\t\t\t<h3 dojoAttachPoint=\"rH3\">Environment</h3>\n\t\t\t\t<div dojoAttachPoint=\"rRow2\"><a href=\"#\" dojoAttachPoint=\"rLink\" class=\"package\">require</a></div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n",templateCssString:".dojoDocPane { padding:1em; font: 1em Georgia,Times,\"Times New Roman\",serif; }\n\n.dojoDocPane .container{ }\n\n.dojoDocPane .dialog{ }\n.dojoDocPane .dialog .container{ padding: 0.5em; background: #fff; border: 2px solid #333; }\n.dojoDocPane .dialog .docDialog{ background: transparent; width: 20em; }\n.dojoDocPane .dialog .docDialog h2{ margin-top: 0; padding-top: 0; }\n.dojoDocPane .dialog .docDialog input { float: right; margin-right: 1em; }\n.dojoDocPane .dialog .docDialog p{ clear: both; }\n#dojoDocUserName, #dojoDocPassword { width: 10em; }\n\n.dojoDocPane .nav{ }\n.dojoDocPane .nav span{ }\n\n.dojoDocPane .detail{ }\n.dojoDocPane .detail h1{ }\n.dojoDocPane .detail h1 span.fn{ }\n.dojoDocPane .detail .description{ }\n.dojoDocPane .detail .params{ }\n.dojoDocPane .detail .params .row{ }\n.dojoDocPane .detail .params .row span{ }\n.dojoDocPane .detail .variables{ }\n.dojoDocPane .detail .variables .row{ }\n.dojoDocPane .detail .signature{ }\n.dojoDocPane .detail .signature .source{ white-space: pre; font: 0.8em Monaco, Courier, \"Courier New\", monospace; }\n.dojoDocPane .detail .signature .source .return{ color:#369; }\n.dojoDocPane .detail .signature .source .function{ color: #98543F; font-weight: bold; }\n.dojoDocPane .detail .signature .source .params{ }\n.dojoDocPane .detail .signature .source .params .type{ font-style: italic; color: #d17575; }\n.dojoDocPane .detail .signature .source .params .name{ color: #d14040; }\n\n.dojoDocPane .result{ }\n.dojoDocPane .result h1{ }\n.dojoDocPane .result .row{ }\n.dojoDocPane .result .row .summary{ }\n\n.dojoDocPane .package{ }\n.dojoDocPane .package h1{ }\n.dojoDocPane .package .row{ }\n.dojoDocPane .package .row .summary{ }\n.dojoDocPane .package .description{ }\n.dojoDocPane .package .methods{ }\n.dojoDocPane .package .methods h2{ }\n.dojoDocPane .package .methods .row{ }\n.dojoDocPane .package .methods .row .description{ }\n.dojoDocPane .package .requires{ }\n.dojoDocPane .package .requires h2{ }\n.dojoDocPane .package .requires .row{ }\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/DocPane.css"),isContainer:true,fillInTemplate:function(){
-this.requires=dojo.html.removeNode(this.requires);
-this.rRow.style.display="none";
-this.rRow2.style.display="none";
-this.methods=dojo.html.removeNode(this.methods);
-this.mRow.style.display="none";
-this.dialog=dojo.widget.createWidget("dialog",{},this.dialog);
-this.dialog.setCloseControl(this.cancel);
-dojo.html.setOpacity(this.dialogBg,0.8);
-dojo.html.setOpacity(this.dialogFg,1);
-dojo.event.connect(this.edit,"onclick",dojo.lang.hitch(this,function(){
-if(!this._isLoggedIn){
-this.dialog.show();
-}
-}));
-dojo.event.connect(this.logIn,"onclick",this,"_logIn");
-dojo.event.connect(this.save,"onclick",this,"_save");
-dojo.event.connect(dojo.docs,"logInSuccess",this,"_loggedIn");
-this.homeSave=this.containerNode.cloneNode(true);
-this.detailSave=dojo.html.removeNode(this.detail);
-this.resultSave=dojo.html.removeNode(this.result);
-this.packageSave=dojo.html.removeNode(this.packag);
-this.results=dojo.html.removeNode(this.results);
-this.rowParent=this.row.parentNode;
-this.rowSave=dojo.html.removeNode(this.row);
-this.vParent=this.vRow.parentNode;
-this.vSave=dojo.html.removeNode(this.vRow);
-this.pParent=this.pRow.parentNode;
-this.pSave=dojo.html.removeNode(this.pRow);
-this.sPTypeSave=dojo.html.removeNode(this.sPType);
-this.sPNameSave=dojo.html.removeNode(this.sPName);
-this.navSave=dojo.html.removeNode(this.nav);
-},_logIn:function(){
-dojo.docs.setUserName(this.userName.value);
-dojo.docs.setPassword(this.password.value);
-},_loggedIn:function(){
-this._isLoggedIn=true;
-this.dialog.hide();
-this.pkgEditor=dojo.widget.createWidget("editor2",{toolbarAlwaysVisible:true},this.pkgDescription);
-},_save:function(){
-if(this.pkgEditor){
-dojo.docs.savePackage(this._pkgPath,{description:this.pkgEditor.getEditorContent()});
-}
-},onDocSelectFunction:function(_1){
-dojo.debug("onDocSelectFunction()");
-for(var _2 in _1){
-dojo.debug(_2+": "+dojo.json.serialize(_1[_2]));
-}
-var _3=_1.meta;
-if(_3){
-var _4=_3.variables;
-var _5=_3.this_variables;
-var _6=_3.child_variables;
-var _7=_3.parameters;
-}
-var _8=_1.doc;
-dojo.debug(dojo.json.serialize(_8));
-var _9=this._appends;
-dojo.html.removeChildren(this.domNode);
-this.fn.innerHTML=_1.name;
-this.variables.style.display="block";
-var _a=[];
-if(_4){
-_a=_4;
-}
-if(_5){
-_a=_a.concat(_5);
-}
-if(_6){
-_a=_a.concat(_6);
-}
-if(!_a.length){
-this.variables.style.display="none";
-}else{
-for(var i=0,_c;_c=_a[i];i++){
-this.vLink.innerHTML=_c;
-this.vDesc.parentNode.style.display="none";
-_9.push(this.vParent.appendChild(this.vSave.cloneNode(true)));
-}
-}
-this.sParams.innerHTML="";
-var _d=true;
-for(var _e in _7){
-var _f=_7[_e].type;
-var _10=_7[_e].summary;
-var _11=_e;
-this.parameters.style.display="block";
-this.pLink.innerHTML=_11;
-this.pOpt.style.display="none";
-if(_7[_e].opt){
-this.pOpt.style.display="inline";
-}
-this.pType.parentNode.style.display="none";
-if(_7[_e][0]){
-this.pType.parentNode.style.display="inline";
-this.pType.innerHTML=_f;
-}
-this.pDesc.parentNode.style.display="none";
-if(_10){
-this.pDesc.parentNode.style.display="inline";
-this.pDesc.innerHTML=_10;
-}
-_9.push(this.pParent.appendChild(this.pSave.cloneNode(true)));
-if(!_d){
-this.sParams.appendChild(document.createTextNode(", "));
-}
-_d=false;
-if(_f){
-dojo.debug(this.sPTypeSave);
-this.sPTypeSave.innerHTML=_f;
-this.sParams.appendChild(this.sPTypeSave.cloneNode(true));
-this.sParams.appendChild(document.createTextNode(" "));
-}
-dojo.debug(this.sPNameSave);
-this.sPNameSave.innerHTML=_11;
-this.sParams.appendChild(this.sPNameSave.cloneNode(true));
-}
-if(_1.returns){
-this.sType.innerHTML=_1.returns;
-}else{
-this.sType.innerHTML="void";
-}
-this.sName.innerHTML=_1.name;
-this.domNode.appendChild(this.navSave);
-this.domNode.appendChild(this.detailSave.cloneNode(true));
-for(var i=0,_12;_12=_9[i];i++){
-dojo.html.removeNode(_12);
-}
-},onPkgResult:function(_13){
-if(this.pkgEditor){
-this.pkgEditor.close(true);
-dojo.debug(this.pkgDescription);
-}
-var _14=_13.methods;
-var _15=_13.requires;
-var _16=_13.description;
-this._pkgPath=_13.path;
-var _17=[];
-var _18=this._appends;
-while(_18.length){
-dojo.html.removeNode(_18.shift());
-}
-dojo.html.removeChildren(this.domNode);
-this.pkg.innerHTML=_13.pkg;
-var _19=false;
-for(var env in _15){
-_19=true;
-this.rH3.style.display="none";
-if(env!="common"){
-this.rH3.style.display="";
-this.rH3.innerHTML=env;
-}
-for(var i=0,_1c;_1c=_15[env][i];i++){
-_17.push({name:_1c});
-this.rLink.innerHTML=_1c;
-this.rLink.href="#"+_1c;
-var _1d=this.rRow2.parentNode.insertBefore(this.rRow2.cloneNode(true),this.rRow2);
-_1d.style.display="";
-_18.push(_1d);
-}
-var _1e=this.rRow.parentNode.insertBefore(this.rRow.cloneNode(true),this.rRow);
-_1e.style.display="";
-_18.push(_1e);
-}
-if(_19){
-_18.push(this.packageSave.appendChild(this.requires.cloneNode(true)));
-}
-if(_13.size){
-for(var i=0,_1f;_1f=_14[i];i++){
-this.mLink.innerHTML=_1f.name;
-this.mLink.href="#"+_1f.name;
-this.mDesc.parentNode.style.display="none";
-if(_1f.summary){
-this.mDesc.parentNode.style.display="inline";
-this.mDesc.innerHTML=_1f.summary;
-}
-var _20=this.mRow.parentNode.insertBefore(this.mRow.cloneNode(true),this.mRow);
-_20.style.display="";
-_18.push(_20);
-}
-_18.push(this.packageSave.appendChild(this.methods.cloneNode(true)));
-}
-this.domNode.appendChild(this.packageSave);
-this.pkgDescription.innerHTML=_16;
-function makeSelect(_21,x){
-return function(e){
-dojo.event.topic.publish("/docs/"+_21+"/select",x);
-};
-}
-var as=this.domNode.getElementsByTagName("a");
-for(var i=0,a;a=as[i];i++){
-if(a.className=="docMLink"){
-dojo.event.connect(a,"onclick",makeSelect("function",_14[i]));
-}else{
-if(a.className=="docRLink"){
-dojo.event.connect(a,"onclick",makeSelect("package",_17[i]));
-}
-}
-}
-},onDocResults:function(fns){
-dojo.debug("onDocResults(): called");
-if(fns.length==1){
-dojo.event.topic.publish("/docs/function/select",fns[0]);
-return;
-}
-dojo.html.removeChildren(this.domNode);
-this.count.innerHTML=fns.length;
-var _27=[];
-for(var i=0,fn;fn=fns[i];i++){
-this.fnLink.innerHTML=fn.name;
-this.fnLink.href="#"+fn.name;
-if(fn.id){
-this.fnLink.href=this.fnLink.href+","+fn.id;
-}
-this.summary.parentNode.style.display="none";
-if(fn.summary){
-this.summary.parentNode.style.display="inline";
-this.summary.innerHTML=fn.summary;
-}
-_27.push(this.rowParent.appendChild(this.rowSave.cloneNode(true)));
-}
-function makeSelect(x){
-return function(e){
-dojo.event.topic.publish("/docs/function/select",x);
-};
-}
-this.domNode.appendChild(this.resultSave.cloneNode(true));
-var as=this.domNode.getElementsByTagName("a");
-for(var i=0,a;a=as[i];i++){
-dojo.event.connect(a,"onclick",makeSelect(fns[i]));
-}
-for(var i=0,_2e;_2e=_27[i];i++){
-this.rowParent.removeChild(_2e);
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DomWidget.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DomWidget.js
deleted file mode 100644
index bbda384..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DomWidget.js
+++ /dev/null
@@ -1,494 +0,0 @@
-dojo.provide("dojo.widget.DomWidget");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.Widget");
-dojo.require("dojo.dom");
-dojo.require("dojo.html.style");
-dojo.require("dojo.xml.Parse");
-dojo.require("dojo.uri.*");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.extras");
-dojo.widget._cssFiles={};
-dojo.widget._cssStrings={};
-dojo.widget._templateCache={};
-dojo.widget.defaultStrings={dojoRoot:dojo.hostenv.getBaseScriptUri(),dojoWidgetModuleUri:dojo.uri.moduleUri("dojo.widget"),baseScriptUri:dojo.hostenv.getBaseScriptUri()};
-dojo.widget.fillFromTemplateCache=function(_1,_2,_3,_4){
-var _5=_2||_1.templatePath;
-var _6=dojo.widget._templateCache;
-if(!_5&&!_1["widgetType"]){
-do{
-var _7="__dummyTemplate__"+dojo.widget._templateCache.dummyCount++;
-}while(_6[_7]);
-_1.widgetType=_7;
-}
-var wt=_5?_5.toString():_1.widgetType;
-var ts=_6[wt];
-if(!ts){
-_6[wt]={"string":null,"node":null};
-if(_4){
-ts={};
-}else{
-ts=_6[wt];
-}
-}
-if((!_1.templateString)&&(!_4)){
-_1.templateString=_3||ts["string"];
-}
-if(_1.templateString){
-_1.templateString=this._sanitizeTemplateString(_1.templateString);
-}
-if((!_1.templateNode)&&(!_4)){
-_1.templateNode=ts["node"];
-}
-if((!_1.templateNode)&&(!_1.templateString)&&(_5)){
-var _a=this._sanitizeTemplateString(dojo.hostenv.getText(_5));
-_1.templateString=_a;
-if(!_4){
-_6[wt]["string"]=_a;
-}
-}
-if((!ts["string"])&&(!_4)){
-ts.string=_1.templateString;
-}
-};
-dojo.widget._sanitizeTemplateString=function(_b){
-if(_b){
-_b=_b.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
-var _c=_b.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_c){
-_b=_c[1];
-}
-}else{
-_b="";
-}
-return _b;
-};
-dojo.widget._templateCache.dummyCount=0;
-dojo.widget.attachProperties=["dojoAttachPoint","id"];
-dojo.widget.eventAttachProperty="dojoAttachEvent";
-dojo.widget.onBuildProperty="dojoOnBuild";
-dojo.widget.waiNames=["waiRole","waiState"];
-dojo.widget.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(_d,ns,_f,_10){
-if(dojo.render.html.ie){
-_d.setAttribute(this[ns].alias+":"+_f,this[ns].prefix+_10);
-}else{
-_d.setAttributeNS(this[ns]["namespace"],_f,this[ns].prefix+_10);
-}
-},getAttr:function(_11,ns,_13){
-if(dojo.render.html.ie){
-return _11.getAttribute(this[ns].alias+":"+_13);
-}else{
-return _11.getAttributeNS(this[ns]["namespace"],_13);
-}
-},removeAttr:function(_14,ns,_16){
-var _17=true;
-if(dojo.render.html.ie){
-_17=_14.removeAttribute(this[ns].alias+":"+_16);
-}else{
-_14.removeAttributeNS(this[ns]["namespace"],_16);
-}
-return _17;
-}};
-dojo.widget.attachTemplateNodes=function(_18,_19,_1a){
-var _1b=dojo.dom.ELEMENT_NODE;
-function trim(str){
-return str.replace(/^\s+|\s+$/g,"");
-}
-if(!_18){
-_18=_19.domNode;
-}
-if(_18.nodeType!=_1b){
-return;
-}
-var _1d=_18.all||_18.getElementsByTagName("*");
-var _1e=_19;
-for(var x=-1;x<_1d.length;x++){
-var _20=(x==-1)?_18:_1d[x];
-var _21=[];
-if(!_19.widgetsInTemplate||!_20.getAttribute("dojoType")){
-for(var y=0;y<this.attachProperties.length;y++){
-var _23=_20.getAttribute(this.attachProperties[y]);
-if(_23){
-_21=_23.split(";");
-for(var z=0;z<_21.length;z++){
-if(dojo.lang.isArray(_19[_21[z]])){
-_19[_21[z]].push(_20);
-}else{
-_19[_21[z]]=_20;
-}
-}
-break;
-}
-}
-var _25=_20.getAttribute(this.eventAttachProperty);
-if(_25){
-var _26=_25.split(";");
-for(var y=0;y<_26.length;y++){
-if((!_26[y])||(!_26[y].length)){
-continue;
-}
-var _27=null;
-var _28=trim(_26[y]);
-if(_26[y].indexOf(":")>=0){
-var _29=_28.split(":");
-_28=trim(_29[0]);
-_27=trim(_29[1]);
-}
-if(!_27){
-_27=_28;
-}
-var tf=function(){
-var ntf=new String(_27);
-return function(evt){
-if(_1e[ntf]){
-_1e[ntf](dojo.event.browser.fixEvent(evt,this));
-}
-};
-}();
-dojo.event.browser.addListener(_20,_28,tf,false,true);
-}
-}
-for(var y=0;y<_1a.length;y++){
-var _2d=_20.getAttribute(_1a[y]);
-if((_2d)&&(_2d.length)){
-var _27=null;
-var _2e=_1a[y].substr(4);
-_27=trim(_2d);
-var _2f=[_27];
-if(_27.indexOf(";")>=0){
-_2f=dojo.lang.map(_27.split(";"),trim);
-}
-for(var z=0;z<_2f.length;z++){
-if(!_2f[z].length){
-continue;
-}
-var tf=function(){
-var ntf=new String(_2f[z]);
-return function(evt){
-if(_1e[ntf]){
-_1e[ntf](dojo.event.browser.fixEvent(evt,this));
-}
-};
-}();
-dojo.event.browser.addListener(_20,_2e,tf,false,true);
-}
-}
-}
-}
-var _32=_20.getAttribute(this.templateProperty);
-if(_32){
-_19[_32]=_20;
-}
-dojo.lang.forEach(dojo.widget.waiNames,function(_33){
-var wai=dojo.widget.wai[_33];
-var val=_20.getAttribute(wai.name);
-if(val){
-if(val.indexOf("-")==-1){
-dojo.widget.wai.setAttr(_20,wai.name,"role",val);
-}else{
-var _36=val.split("-");
-dojo.widget.wai.setAttr(_20,wai.name,_36[0],_36[1]);
-}
-}
-},this);
-var _37=_20.getAttribute(this.onBuildProperty);
-if(_37){
-eval("var node = baseNode; var widget = targetObj; "+_37);
-}
-}
-};
-dojo.widget.getDojoEventsFromStr=function(str){
-var re=/(dojoOn([a-z]+)(\s?))=/gi;
-var _3a=str?str.match(re)||[]:[];
-var ret=[];
-var lem={};
-for(var x=0;x<_3a.length;x++){
-if(_3a[x].length<1){
-continue;
-}
-var cm=_3a[x].replace(/\s/,"");
-cm=(cm.slice(0,cm.length-1));
-if(!lem[cm]){
-lem[cm]=true;
-ret.push(cm);
-}
-}
-return ret;
-};
-dojo.declare("dojo.widget.DomWidget",dojo.widget.Widget,function(){
-if((arguments.length>0)&&(typeof arguments[0]=="object")){
-this.create(arguments[0]);
-}
-},{templateNode:null,templateString:null,templateCssString:null,preventClobber:false,domNode:null,containerNode:null,widgetsInTemplate:false,addChild:function(_3f,_40,pos,ref,_43){
-if(!this.isContainer){
-dojo.debug("dojo.widget.DomWidget.addChild() attempted on non-container widget");
-return null;
-}else{
-if(_43==undefined){
-_43=this.children.length;
-}
-this.addWidgetAsDirectChild(_3f,_40,pos,ref,_43);
-this.registerChild(_3f,_43);
-}
-return _3f;
-},addWidgetAsDirectChild:function(_44,_45,pos,ref,_48){
-if((!this.containerNode)&&(!_45)){
-this.containerNode=this.domNode;
-}
-var cn=(_45)?_45:this.containerNode;
-if(!pos){
-pos="after";
-}
-if(!ref){
-if(!cn){
-cn=dojo.body();
-}
-ref=cn.lastChild;
-}
-if(!_48){
-_48=0;
-}
-_44.domNode.setAttribute("dojoinsertionindex",_48);
-if(!ref){
-cn.appendChild(_44.domNode);
-}else{
-if(pos=="insertAtIndex"){
-dojo.dom.insertAtIndex(_44.domNode,ref.parentNode,_48);
-}else{
-if((pos=="after")&&(ref===cn.lastChild)){
-cn.appendChild(_44.domNode);
-}else{
-dojo.dom.insertAtPosition(_44.domNode,cn,pos);
-}
-}
-}
-},registerChild:function(_4a,_4b){
-_4a.dojoInsertionIndex=_4b;
-var idx=-1;
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].dojoInsertionIndex<=_4b){
-idx=i;
-}
-}
-this.children.splice(idx+1,0,_4a);
-_4a.parent=this;
-_4a.addedTo(this,idx+1);
-delete dojo.widget.manager.topWidgets[_4a.widgetId];
-},removeChild:function(_4e){
-dojo.dom.removeNode(_4e.domNode);
-return dojo.widget.DomWidget.superclass.removeChild.call(this,_4e);
-},getFragNodeRef:function(_4f){
-if(!_4f){
-return null;
-}
-if(!_4f[this.getNamespacedType()]){
-dojo.raise("Error: no frag for widget type "+this.getNamespacedType()+", id "+this.widgetId+" (maybe a widget has set it's type incorrectly)");
-}
-return _4f[this.getNamespacedType()]["nodeRef"];
-},postInitialize:function(_50,_51,_52){
-var _53=this.getFragNodeRef(_51);
-if(_52&&(_52.snarfChildDomOutput||!_53)){
-_52.addWidgetAsDirectChild(this,"","insertAtIndex","",_50["dojoinsertionindex"],_53);
-}else{
-if(_53){
-if(this.domNode&&(this.domNode!==_53)){
-this._sourceNodeRef=dojo.dom.replaceNode(_53,this.domNode);
-}
-}
-}
-if(_52){
-_52.registerChild(this,_50.dojoinsertionindex);
-}else{
-dojo.widget.manager.topWidgets[this.widgetId]=this;
-}
-if(this.widgetsInTemplate){
-var _54=new dojo.xml.Parse();
-var _55;
-var _56=this.domNode.getElementsByTagName("*");
-for(var i=0;i<_56.length;i++){
-if(_56[i].getAttribute("dojoAttachPoint")=="subContainerWidget"){
-_55=_56[i];
-}
-if(_56[i].getAttribute("dojoType")){
-_56[i].setAttribute("isSubWidget",true);
-}
-}
-if(this.isContainer&&!this.containerNode){
-if(_55){
-var src=this.getFragNodeRef(_51);
-if(src){
-dojo.dom.moveChildren(src,_55);
-_51["dojoDontFollow"]=true;
-}
-}else{
-dojo.debug("No subContainerWidget node can be found in template file for widget "+this);
-}
-}
-var _59=_54.parseElement(this.domNode,null,true);
-dojo.widget.getParser().createSubComponents(_59,this);
-var _5a=[];
-var _5b=[this];
-var w;
-while((w=_5b.pop())){
-for(var i=0;i<w.children.length;i++){
-var _5d=w.children[i];
-if(_5d._processedSubWidgets||!_5d.extraArgs["issubwidget"]){
-continue;
-}
-_5a.push(_5d);
-if(_5d.isContainer){
-_5b.push(_5d);
-}
-}
-}
-for(var i=0;i<_5a.length;i++){
-var _5e=_5a[i];
-if(_5e._processedSubWidgets){
-dojo.debug("This should not happen: widget._processedSubWidgets is already true!");
-return;
-}
-_5e._processedSubWidgets=true;
-if(_5e.extraArgs["dojoattachevent"]){
-var _5f=_5e.extraArgs["dojoattachevent"].split(";");
-for(var j=0;j<_5f.length;j++){
-var _61=null;
-var _62=dojo.string.trim(_5f[j]);
-if(_62.indexOf(":")>=0){
-var _63=_62.split(":");
-_62=dojo.string.trim(_63[0]);
-_61=dojo.string.trim(_63[1]);
-}
-if(!_61){
-_61=_62;
-}
-if(dojo.lang.isFunction(_5e[_62])){
-dojo.event.kwConnect({srcObj:_5e,srcFunc:_62,targetObj:this,targetFunc:_61});
-}else{
-alert(_62+" is not a function in widget "+_5e);
-}
-}
-}
-if(_5e.extraArgs["dojoattachpoint"]){
-this[_5e.extraArgs["dojoattachpoint"]]=_5e;
-}
-}
-}
-if(this.isContainer&&!_51["dojoDontFollow"]){
-dojo.widget.getParser().createSubComponents(_51,this);
-}
-},buildRendering:function(_64,_65){
-var ts=dojo.widget._templateCache[this.widgetType];
-if(_64["templatecsspath"]){
-_64["templateCssPath"]=_64["templatecsspath"];
-}
-var _67=_64["templateCssPath"]||this.templateCssPath;
-if(_67&&!dojo.widget._cssFiles[_67.toString()]){
-if((!this.templateCssString)&&(_67)){
-this.templateCssString=dojo.hostenv.getText(_67);
-this.templateCssPath=null;
-}
-dojo.widget._cssFiles[_67.toString()]=true;
-}
-if((this["templateCssString"])&&(!dojo.widget._cssStrings[this.templateCssString])){
-dojo.html.insertCssText(this.templateCssString,null,_67);
-dojo.widget._cssStrings[this.templateCssString]=true;
-}
-if((!this.preventClobber)&&((this.templatePath)||(this.templateNode)||((this["templateString"])&&(this.templateString.length))||((typeof ts!="undefined")&&((ts["string"])||(ts["node"]))))){
-this.buildFromTemplate(_64,_65);
-}else{
-this.domNode=this.getFragNodeRef(_65);
-}
-this.fillInTemplate(_64,_65);
-},buildFromTemplate:function(_68,_69){
-var _6a=false;
-if(_68["templatepath"]){
-_68["templatePath"]=_68["templatepath"];
-}
-dojo.widget.fillFromTemplateCache(this,_68["templatePath"],null,_6a);
-var ts=dojo.widget._templateCache[this.templatePath?this.templatePath.toString():this.widgetType];
-if((ts)&&(!_6a)){
-if(!this.templateString.length){
-this.templateString=ts["string"];
-}
-if(!this.templateNode){
-this.templateNode=ts["node"];
-}
-}
-var _6c=false;
-var _6d=null;
-var _6e=this.templateString;
-if((!this.templateNode)&&(this.templateString)){
-_6c=this.templateString.match(/\$\{([^\}]+)\}/g);
-if(_6c){
-var _6f=this.strings||{};
-for(var key in dojo.widget.defaultStrings){
-if(dojo.lang.isUndefined(_6f[key])){
-_6f[key]=dojo.widget.defaultStrings[key];
-}
-}
-for(var i=0;i<_6c.length;i++){
-var key=_6c[i];
-key=key.substring(2,key.length-1);
-var _72=(key.substring(0,5)=="this.")?dojo.lang.getObjPathValue(key.substring(5),this):_6f[key];
-var _73;
-if((_72)||(dojo.lang.isString(_72))){
-_73=new String((dojo.lang.isFunction(_72))?_72.call(this,key,this.templateString):_72);
-while(_73.indexOf("\"")>-1){
-_73=_73.replace("\"","&quot;");
-}
-_6e=_6e.replace(_6c[i],_73);
-}
-}
-}else{
-this.templateNode=this.createNodesFromText(this.templateString,true)[0];
-if(!_6a){
-ts.node=this.templateNode;
-}
-}
-}
-if((!this.templateNode)&&(!_6c)){
-dojo.debug("DomWidget.buildFromTemplate: could not create template");
-return false;
-}else{
-if(!_6c){
-_6d=this.templateNode.cloneNode(true);
-if(!_6d){
-return false;
-}
-}else{
-_6d=this.createNodesFromText(_6e,true)[0];
-}
-}
-this.domNode=_6d;
-this.attachTemplateNodes();
-if(this.isContainer&&this.containerNode){
-var src=this.getFragNodeRef(_69);
-if(src){
-dojo.dom.moveChildren(src,this.containerNode);
-}
-}
-},attachTemplateNodes:function(_75,_76){
-if(!_75){
-_75=this.domNode;
-}
-if(!_76){
-_76=this;
-}
-return dojo.widget.attachTemplateNodes(_75,_76,dojo.widget.getDojoEventsFromStr(this.templateString));
-},fillInTemplate:function(){
-},destroyRendering:function(){
-try{
-dojo.dom.destroyNode(this.domNode);
-delete this.domNode;
-}
-catch(e){
-}
-if(this._sourceNodeRef){
-try{
-dojo.dom.destroyNode(this._sourceNodeRef);
-}
-catch(e){
-}
-}
-},createNodesFromText:function(){
-dojo.unimplemented("dojo.widget.DomWidget.createNodesFromText");
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DropdownContainer.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DropdownContainer.js
deleted file mode 100644
index 986e088..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DropdownContainer.js
+++ /dev/null
@@ -1,52 +0,0 @@
-dojo.provide("dojo.widget.DropdownContainer");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.PopupContainer");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.html.display");
-dojo.require("dojo.html.iframe");
-dojo.require("dojo.html.util");
-dojo.widget.defineWidget("dojo.widget.DropdownContainer",dojo.widget.HtmlWidget,{inputWidth:"7em",id:"",inputId:"",inputName:"",iconURL:dojo.uri.moduleUri("dojo.widget","templates/images/combo_box_arrow.png"),copyClasses:false,iconAlt:"",containerToggle:"plain",containerToggleDuration:150,templateString:"<span style=\"white-space:nowrap\"><input type=\"hidden\" name=\"\" value=\"\" dojoAttachPoint=\"valueNode\" /><input name=\"\" type=\"text\" value=\"\" style=\"vertical-align:middle;\" dojoAttachPoint=\"inputNode\" autocomplete=\"off\" /> <img src=\"${this.iconURL}\" alt=\"${this.iconAlt}\" dojoAttachEvent=\"onclick:onIconClick\" dojoAttachPoint=\"buttonNode\" style=\"vertical-align:middle; cursor:pointer; cursor:hand\" /></span>",templateCssPath:"",isContainer:true,attachTemplateNodes:function(){
-dojo.widget.DropdownContainer.superclass.attachTemplateNodes.apply(this,arguments);
-this.popup=dojo.widget.createWidget("PopupContainer",{toggle:this.containerToggle,toggleDuration:this.containerToggleDuration});
-this.containerNode=this.popup.domNode;
-},fillInTemplate:function(_1,_2){
-this.domNode.appendChild(this.popup.domNode);
-if(this.id){
-this.domNode.id=this.id;
-}
-if(this.inputId){
-this.inputNode.id=this.inputId;
-}
-if(this.inputName){
-this.inputNode.name=this.inputName;
-}
-this.inputNode.style.width=this.inputWidth;
-this.inputNode.disabled=this.disabled;
-if(this.copyClasses){
-this.inputNode.style="";
-this.inputNode.className=this.getFragNodeRef(_2).className;
-}
-dojo.event.connect(this.inputNode,"onchange",this,"onInputChange");
-},onIconClick:function(_3){
-if(this.disabled){
-return;
-}
-if(!this.popup.isShowingNow){
-this.popup.open(this.inputNode,this,this.buttonNode);
-}else{
-this.popup.close();
-}
-},hideContainer:function(){
-if(this.popup.isShowingNow){
-this.popup.close();
-}
-},onInputChange:function(){
-},enable:function(){
-this.inputNode.disabled=false;
-dojo.widget.DropdownContainer.superclass.enable.apply(this,arguments);
-},disable:function(){
-this.inputNode.disabled=true;
-dojo.widget.DropdownContainer.superclass.disable.apply(this,arguments);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DropdownDatePicker.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DropdownDatePicker.js
deleted file mode 100644
index 18e17a0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DropdownDatePicker.js
+++ /dev/null
@@ -1,95 +0,0 @@
-dojo.provide("dojo.widget.DropdownDatePicker");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.DropdownContainer");
-dojo.require("dojo.widget.DatePicker");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.*");
-dojo.require("dojo.date.format");
-dojo.require("dojo.date.serialize");
-dojo.require("dojo.string.common");
-dojo.require("dojo.i18n.common");
-dojo.requireLocalization("dojo.widget","DropdownDatePicker",null,"ROOT");
-dojo.widget.defineWidget("dojo.widget.DropdownDatePicker",dojo.widget.DropdownContainer,{iconURL:dojo.uri.moduleUri("dojo.widget","templates/images/dateIcon.gif"),formatLength:"short",displayFormat:"",saveFormat:"",value:"",name:"",displayWeeks:6,adjustWeeks:false,startDate:"1492-10-12",endDate:"2941-10-12",weekStartsOn:"",staticDisplay:false,postMixInProperties:function(_1,_2){
-dojo.widget.DropdownDatePicker.superclass.postMixInProperties.apply(this,arguments);
-var _3=dojo.i18n.getLocalization("dojo.widget","DropdownDatePicker",this.lang);
-this.iconAlt=_3.selectDate;
-if(typeof (this.value)=="string"&&this.value.toLowerCase()=="today"){
-this.value=new Date();
-}else{
-if(this.value&&isNaN(this.value)){
-var _4=this.value;
-this.value=dojo.date.fromRfc3339(this.value);
-}else{
-if(this.value&&!isNaN(this.value)){
-this.value=new Date(this.value);
-}
-}
-}
-},fillInTemplate:function(_5,_6){
-dojo.widget.DropdownDatePicker.superclass.fillInTemplate.call(this,_5,_6);
-var _7={widgetContainerId:this.widgetId,lang:this.lang,value:this.value,startDate:this.startDate,endDate:this.endDate,displayWeeks:this.displayWeeks,weekStartsOn:this.weekStartsOn,adjustWeeks:this.adjustWeeks,staticDisplay:this.staticDisplay};
-this.datePicker=dojo.widget.createWidget("DatePicker",_7,this.containerNode,"child");
-dojo.event.connect(this.datePicker,"onValueChanged",this,"_updateText");
-dojo.event.connect(this.inputNode,"onChange",this,"_updateText");
-if(this.value){
-this._updateText();
-}
-this.containerNode.explodeClassName="calendarBodyContainer";
-this.valueNode.name=this.name;
-},getValue:function(){
-return this.valueNode.value;
-},getDate:function(){
-return this.datePicker.value;
-},setValue:function(_8){
-this.setDate(_8);
-},setDate:function(_9){
-this.datePicker.setDate(_9);
-this._syncValueNode();
-},_updateText:function(){
-this.inputNode.value=this.datePicker.value?dojo.date.format(this.datePicker.value,{formatLength:this.formatLength,datePattern:this.displayFormat,selector:"dateOnly",locale:this.lang}):"";
-if(this.datePicker.value<this.datePicker.startDate||this.value>this.datePicker.endDate){
-this.inputNode.value="";
-}
-this._syncValueNode();
-this.onValueChanged(this.getDate());
-this.hideContainer();
-},onValueChanged:function(_a){
-},onInputChange:function(){
-var _b=dojo.string.trim(this.inputNode.value);
-if(_b){
-var _c=dojo.date.parse(_b,{formatLength:this.formatLength,datePattern:this.displayFormat,selector:"dateOnly",locale:this.lang});
-if(!this.datePicker._isDisabledDate(_c)){
-this.setDate(_c);
-}
-}else{
-if(_b==""){
-this.datePicker.setDate("");
-}
-this.valueNode.value=_b;
-}
-if(_b){
-this._updateText();
-}
-},_syncValueNode:function(){
-var _d=this.datePicker.value;
-var _e="";
-switch(this.saveFormat.toLowerCase()){
-case "rfc":
-case "iso":
-case "":
-_e=dojo.date.toRfc3339(_d,"dateOnly");
-break;
-case "posix":
-case "unix":
-_e=Number(_d);
-break;
-default:
-if(_d){
-_e=dojo.date.format(_d,{datePattern:this.saveFormat,selector:"dateOnly",locale:this.lang});
-}
-}
-this.valueNode.value=_e;
-},destroy:function(_f){
-this.datePicker.destroy(_f);
-dojo.widget.DropdownDatePicker.superclass.destroy.apply(this,arguments);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DropdownTimePicker.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DropdownTimePicker.js
deleted file mode 100644
index 23ad258..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/DropdownTimePicker.js
+++ /dev/null
@@ -1,143 +0,0 @@
-dojo.provide("dojo.widget.DropdownTimePicker");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.DropdownContainer");
-dojo.require("dojo.widget.TimePicker");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.*");
-dojo.require("dojo.date.format");
-dojo.require("dojo.date.serialize");
-dojo.require("dojo.i18n.common");
-dojo.requireLocalization("dojo.widget","DropdownTimePicker",null,"ROOT");
-dojo.widget.defineWidget("dojo.widget.DropdownTimePicker",dojo.widget.DropdownContainer,{iconURL:dojo.uri.moduleUri("dojo.widget","templates/images/timeIcon.gif"),formatLength:"short",displayFormat:"",timeFormat:"",saveFormat:"",value:"",name:"",postMixInProperties:function(){
-dojo.widget.DropdownTimePicker.superclass.postMixInProperties.apply(this,arguments);
-var _1=dojo.i18n.getLocalization("dojo.widget","DropdownTimePicker",this.lang);
-this.iconAlt=_1.selectTime;
-if(typeof (this.value)=="string"&&this.value.toLowerCase()=="today"){
-this.value=new Date();
-}
-if(this.value&&isNaN(this.value)){
-var _2=this.value;
-this.value=dojo.date.fromRfc3339(this.value);
-if(!this.value){
-var d=dojo.date.format(new Date(),{selector:"dateOnly",datePattern:"yyyy-MM-dd"});
-var c=_2.split(":");
-for(var i=0;i<c.length;++i){
-if(c[i].length==1){
-c[i]="0"+c[i];
-}
-}
-_2=c.join(":");
-this.value=dojo.date.fromRfc3339(d+"T"+_2);
-dojo.deprecated("dojo.widget.DropdownTimePicker","time attributes must be passed in Rfc3339 format","0.5");
-}
-}
-if(this.value&&!isNaN(this.value)){
-this.value=new Date(this.value);
-}
-},fillInTemplate:function(){
-dojo.widget.DropdownTimePicker.superclass.fillInTemplate.apply(this,arguments);
-var _6="";
-if(this.value instanceof Date){
-_6=this.value;
-}else{
-if(this.value){
-var _7=this.value;
-var d=dojo.date.format(new Date(),{selector:"dateOnly",datePattern:"yyyy-MM-dd"});
-var c=_7.split(":");
-for(var i=0;i<c.length;++i){
-if(c[i].length==1){
-c[i]="0"+c[i];
-}
-}
-_7=c.join(":");
-_6=dojo.date.fromRfc3339(d+"T"+_7);
-}
-}
-var _b={widgetContainerId:this.widgetId,lang:this.lang,value:_6};
-this.timePicker=dojo.widget.createWidget("TimePicker",_b,this.containerNode,"child");
-dojo.event.connect(this.timePicker,"onValueChanged",this,"_updateText");
-if(this.value){
-this._updateText();
-}
-this.containerNode.style.zIndex=this.zIndex;
-this.containerNode.explodeClassName="timeContainer";
-this.valueNode.name=this.name;
-},getValue:function(){
-return this.valueNode.value;
-},getTime:function(){
-return this.timePicker.storedTime;
-},setValue:function(_c){
-this.setTime(_c);
-},setTime:function(_d){
-var _e="";
-if(_d instanceof Date){
-_e=_d;
-}else{
-if(this.value){
-var _f=this.value;
-var d=dojo.date.format(new Date(),{selector:"dateOnly",datePattern:"yyyy-MM-dd"});
-var c=_f.split(":");
-for(var i=0;i<c.length;++i){
-if(c[i].length==1){
-c[i]="0"+c[i];
-}
-}
-_f=c.join(":");
-_e=dojo.date.fromRfc3339(d+"T"+_f);
-}
-}
-this.timePicker.setTime(_e);
-this._syncValueNode();
-},_updateText:function(){
-if(this.timePicker.selectedTime.anyTime){
-this.inputNode.value="";
-}else{
-if(this.timeFormat){
-dojo.deprecated("dojo.widget.DropdownTimePicker","Must use displayFormat attribute instead of timeFormat.  See dojo.date.format for specification.","0.5");
-this.inputNode.value=dojo.date.strftime(this.timePicker.time,this.timeFormat,this.lang);
-}else{
-this.inputNode.value=dojo.date.format(this.timePicker.time,{formatLength:this.formatLength,timePattern:this.displayFormat,selector:"timeOnly",locale:this.lang});
-}
-}
-this._syncValueNode();
-this.onValueChanged(this.getTime());
-this.hideContainer();
-},onValueChanged:function(_13){
-},onInputChange:function(){
-if(this.dateFormat){
-dojo.deprecated("dojo.widget.DropdownTimePicker","Cannot parse user input.  Must use displayFormat attribute instead of dateFormat.  See dojo.date.format for specification.","0.5");
-}else{
-var _14=dojo.string.trim(this.inputNode.value);
-if(_14){
-var _15=dojo.date.parse(_14,{formatLength:this.formatLength,timePattern:this.displayFormat,selector:"timeOnly",locale:this.lang});
-if(_15){
-this.setTime(_15);
-}
-}else{
-this.valueNode.value=_14;
-}
-}
-if(_14){
-this._updateText();
-}
-},_syncValueNode:function(){
-var _16=this.timePicker.time;
-var _17;
-switch(this.saveFormat.toLowerCase()){
-case "rfc":
-case "iso":
-case "":
-_17=dojo.date.toRfc3339(_16,"timeOnly");
-break;
-case "posix":
-case "unix":
-_17=Number(_16);
-break;
-default:
-_17=dojo.date.format(_16,{datePattern:this.saveFormat,selector:"timeOnly",locale:this.lang});
-}
-this.valueNode.value=_17;
-},destroy:function(_18){
-this.timePicker.destroy(_18);
-dojo.widget.DropdownTimePicker.superclass.destroy.apply(this,arguments);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor.js
deleted file mode 100644
index 954c35f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor.js
+++ /dev/null
@@ -1,377 +0,0 @@
-dojo.provide("dojo.widget.Editor");
-dojo.deprecated("dojo.widget.Editor","is replaced by dojo.widget.Editor2","0.5");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.Toolbar");
-dojo.require("dojo.widget.RichText");
-dojo.require("dojo.widget.ColorPalette");
-dojo.require("dojo.string.extras");
-dojo.widget.tags.addParseTreeHandler("dojo:Editor");
-dojo.widget.Editor=function(){
-dojo.widget.HtmlWidget.call(this);
-this.contentFilters=[];
-this._toolbars=[];
-};
-dojo.inherits(dojo.widget.Editor,dojo.widget.HtmlWidget);
-dojo.widget.Editor.itemGroups={textGroup:["bold","italic","underline","strikethrough"],blockGroup:["formatBlock","fontName","fontSize"],justifyGroup:["justifyleft","justifycenter","justifyright"],commandGroup:["save","cancel"],colorGroup:["forecolor","hilitecolor"],listGroup:["insertorderedlist","insertunorderedlist"],indentGroup:["outdent","indent"],linkGroup:["createlink","insertimage","inserthorizontalrule"]};
-dojo.widget.Editor.formatBlockValues={"Normal":"p","Main heading":"h2","Sub heading":"h3","Sub sub heading":"h4","Preformatted":"pre"};
-dojo.widget.Editor.fontNameValues={"Arial":"Arial, Helvetica, sans-serif","Verdana":"Verdana, sans-serif","Times New Roman":"Times New Roman, serif","Courier":"Courier New, monospace"};
-dojo.widget.Editor.fontSizeValues={"1 (8 pt)":"1","2 (10 pt)":"2","3 (12 pt)":"3","4 (14 pt)":"4","5 (18 pt)":"5","6 (24 pt)":"6","7 (36 pt)":"7"};
-dojo.widget.Editor.defaultItems=["commandGroup","|","blockGroup","|","textGroup","|","colorGroup","|","justifyGroup","|","listGroup","indentGroup","|","linkGroup"];
-dojo.widget.Editor.supportedCommands=["save","cancel","|","-","/"," "];
-dojo.lang.extend(dojo.widget.Editor,{widgetType:"Editor",saveUrl:"",saveMethod:"post",saveArgName:"editorContent",closeOnSave:false,items:dojo.widget.Editor.defaultItems,formatBlockItems:dojo.lang.shallowCopy(dojo.widget.Editor.formatBlockValues),fontNameItems:dojo.lang.shallowCopy(dojo.widget.Editor.fontNameValues),fontSizeItems:dojo.lang.shallowCopy(dojo.widget.Editor.fontSizeValues),getItemProperties:function(_1){
-var _2={};
-switch(_1.toLowerCase()){
-case "bold":
-case "italic":
-case "underline":
-case "strikethrough":
-_2.toggleItem=true;
-break;
-case "justifygroup":
-_2.defaultButton="justifyleft";
-_2.preventDeselect=true;
-_2.buttonGroup=true;
-break;
-case "listgroup":
-_2.buttonGroup=true;
-break;
-case "save":
-case "cancel":
-_2.label=dojo.string.capitalize(_1);
-break;
-case "forecolor":
-case "hilitecolor":
-_2.name=_1;
-_2.toggleItem=true;
-_2.icon=this.getCommandImage(_1);
-break;
-case "formatblock":
-_2.name="formatBlock";
-_2.values=this.formatBlockItems;
-break;
-case "fontname":
-_2.name="fontName";
-_2.values=this.fontNameItems;
-case "fontsize":
-_2.name="fontSize";
-_2.values=this.fontSizeItems;
-}
-return _2;
-},validateItems:true,focusOnLoad:true,minHeight:"1em",_richText:null,_richTextType:"RichText",_toolbarContainer:null,_toolbarContainerType:"ToolbarContainer",_toolbars:[],_toolbarType:"Toolbar",_toolbarItemType:"ToolbarItem",buildRendering:function(_3,_4){
-var _5=_4["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
-var _6=dojo.widget.createWidget(this._richTextType,{focusOnLoad:this.focusOnLoad,minHeight:this.minHeight},_5);
-var _7=this;
-setTimeout(function(){
-_7.setRichText(_6);
-_7.initToolbar();
-_7.fillInTemplate(_3,_4);
-},0);
-},setRichText:function(_8){
-if(this._richText&&this._richText==_8){
-dojo.debug("Already set the richText to this richText!");
-return;
-}
-if(this._richText&&!this._richText.isClosed){
-dojo.debug("You are switching richTexts yet you haven't closed the current one. Losing reference!");
-}
-this._richText=_8;
-dojo.event.connect(this._richText,"close",this,"onClose");
-dojo.event.connect(this._richText,"onLoad",this,"onLoad");
-dojo.event.connect(this._richText,"onDisplayChanged",this,"updateToolbar");
-if(this._toolbarContainer){
-this._toolbarContainer.enable();
-this.updateToolbar(true);
-}
-},initToolbar:function(){
-if(this._toolbarContainer){
-return;
-}
-this._toolbarContainer=dojo.widget.createWidget(this._toolbarContainerType);
-var tb=this.addToolbar();
-var _a=true;
-for(var i=0;i<this.items.length;i++){
-if(this.items[i]=="\n"){
-tb=this.addToolbar();
-}else{
-if((this.items[i]=="|")&&(!_a)){
-_a=true;
-}else{
-_a=this.addItem(this.items[i],tb);
-}
-}
-}
-this.insertToolbar(this._toolbarContainer.domNode,this._richText.domNode);
-},insertToolbar:function(_c,_d){
-dojo.html.insertBefore(_c,_d);
-},addToolbar:function(_e){
-this.initToolbar();
-if(!(_e instanceof dojo.widget.Toolbar)){
-_e=dojo.widget.createWidget(this._toolbarType);
-}
-this._toolbarContainer.addChild(_e);
-this._toolbars.push(_e);
-return _e;
-},addItem:function(_f,tb,_11){
-if(!tb){
-tb=this._toolbars[0];
-}
-var cmd=((_f)&&(!dojo.lang.isUndefined(_f["getValue"])))?cmd=_f["getValue"]():_f;
-var _13=dojo.widget.Editor.itemGroups;
-if(_f instanceof dojo.widget.ToolbarItem){
-tb.addChild(_f);
-}else{
-if(_13[cmd]){
-var _14=_13[cmd];
-var _15=true;
-if(cmd=="justifyGroup"||cmd=="listGroup"){
-var _16=[cmd];
-for(var i=0;i<_14.length;i++){
-if(_11||this.isSupportedCommand(_14[i])){
-_16.push(this.getCommandImage(_14[i]));
-}else{
-_15=false;
-}
-}
-if(_16.length){
-var btn=tb.addChild(_16,null,this.getItemProperties(cmd));
-dojo.event.connect(btn,"onClick",this,"_action");
-dojo.event.connect(btn,"onChangeSelect",this,"_action");
-}
-return _15;
-}else{
-for(var i=0;i<_14.length;i++){
-if(!this.addItem(_14[i],tb)){
-_15=false;
-}
-}
-return _15;
-}
-}else{
-if((!_11)&&(!this.isSupportedCommand(cmd))){
-return false;
-}
-if(_11||this.isSupportedCommand(cmd)){
-cmd=cmd.toLowerCase();
-if(cmd=="formatblock"){
-var _19=dojo.widget.createWidget("ToolbarSelect",{name:"formatBlock",values:this.formatBlockItems});
-tb.addChild(_19);
-var _1a=this;
-dojo.event.connect(_19,"onSetValue",function(_1b,_1c){
-_1a.onAction("formatBlock",_1c);
-});
-}else{
-if(cmd=="fontname"){
-var _19=dojo.widget.createWidget("ToolbarSelect",{name:"fontName",values:this.fontNameItems});
-tb.addChild(_19);
-dojo.event.connect(_19,"onSetValue",dojo.lang.hitch(this,function(_1d,_1e){
-this.onAction("fontName",_1e);
-}));
-}else{
-if(cmd=="fontsize"){
-var _19=dojo.widget.createWidget("ToolbarSelect",{name:"fontSize",values:this.fontSizeItems});
-tb.addChild(_19);
-dojo.event.connect(_19,"onSetValue",dojo.lang.hitch(this,function(_1f,_20){
-this.onAction("fontSize",_20);
-}));
-}else{
-if(dojo.lang.inArray(cmd,["forecolor","hilitecolor"])){
-var btn=tb.addChild(dojo.widget.createWidget("ToolbarColorDialog",this.getItemProperties(cmd)));
-dojo.event.connect(btn,"onSetValue",this,"_setValue");
-}else{
-var btn=tb.addChild(this.getCommandImage(cmd),null,this.getItemProperties(cmd));
-if(cmd=="save"){
-dojo.event.connect(btn,"onClick",this,"_save");
-}else{
-if(cmd=="cancel"){
-dojo.event.connect(btn,"onClick",this,"_close");
-}else{
-dojo.event.connect(btn,"onClick",this,"_action");
-dojo.event.connect(btn,"onChangeSelect",this,"_action");
-}
-}
-}
-}
-}
-}
-}
-}
-}
-return true;
-},enableToolbar:function(){
-if(this._toolbarContainer){
-this._toolbarContainer.domNode.style.display="";
-this._toolbarContainer.enable();
-}
-},disableToolbar:function(_21){
-if(_21){
-if(this._toolbarContainer){
-this._toolbarContainer.domNode.style.display="none";
-}
-}else{
-if(this._toolbarContainer){
-this._toolbarContainer.disable();
-}
-}
-},_updateToolbarLastRan:null,_updateToolbarTimer:null,_updateToolbarFrequency:500,updateToolbar:function(_22){
-if(!this._toolbarContainer){
-return;
-}
-var _23=new Date()-this._updateToolbarLastRan;
-if(!_22&&this._updateToolbarLastRan&&(_23<this._updateToolbarFrequency)){
-clearTimeout(this._updateToolbarTimer);
-var _24=this;
-this._updateToolbarTimer=setTimeout(function(){
-_24.updateToolbar();
-},this._updateToolbarFrequency/2);
-return;
-}else{
-this._updateToolbarLastRan=new Date();
-}
-var _25=this._toolbarContainer.getItems();
-for(var i=0;i<_25.length;i++){
-var _27=_25[i];
-if(_27 instanceof dojo.widget.ToolbarSeparator){
-continue;
-}
-var cmd=_27._name;
-if(cmd=="save"||cmd=="cancel"){
-continue;
-}else{
-if(cmd=="justifyGroup"){
-try{
-if(!this._richText.queryCommandEnabled("justifyleft")){
-_27.disable(false,true);
-}else{
-_27.enable(false,true);
-var _29=_27.getItems();
-for(var j=0;j<_29.length;j++){
-var _2b=_29[j]._name;
-var _2c=this._richText.queryCommandValue(_2b);
-if(typeof _2c=="boolean"&&_2c){
-_2c=_2b;
-break;
-}else{
-if(typeof _2c=="string"){
-_2c="justify"+_2c;
-}else{
-_2c=null;
-}
-}
-}
-if(!_2c){
-_2c="justifyleft";
-}
-_27.setValue(_2c,false,true);
-}
-}
-catch(err){
-}
-}else{
-if(cmd=="listGroup"){
-var _2d=_27.getItems();
-for(var j=0;j<_2d.length;j++){
-this.updateItem(_2d[j]);
-}
-}else{
-this.updateItem(_27);
-}
-}
-}
-}
-},updateItem:function(_2e){
-try{
-var cmd=_2e._name;
-var _30=this._richText.queryCommandEnabled(cmd);
-_2e.setEnabled(_30,false,true);
-var _31=this._richText.queryCommandState(cmd);
-if(_31&&cmd=="underline"){
-_31=!this._richText.queryCommandEnabled("unlink");
-}
-_2e.setSelected(_31,false,true);
-return true;
-}
-catch(err){
-return false;
-}
-},supportedCommands:dojo.widget.Editor.supportedCommands.concat(),isSupportedCommand:function(cmd){
-var yes=dojo.lang.inArray(cmd,this.supportedCommands);
-if(!yes){
-try{
-var _34=this._richText||dojo.widget.HtmlRichText.prototype;
-yes=_34.queryCommandAvailable(cmd);
-}
-catch(E){
-}
-}
-return yes;
-},getCommandImage:function(cmd){
-if(cmd=="|"){
-return cmd;
-}else{
-return dojo.uri.moduleUri("dojo.widget","templates/buttons/"+cmd+".gif");
-}
-},_action:function(e){
-this._fire("onAction",e.getValue());
-},_setValue:function(a,b){
-this._fire("onAction",a.getValue(),b);
-},_save:function(e){
-if(!this._richText.isClosed){
-if(this.saveUrl.length){
-var _3a={};
-_3a[this.saveArgName]=this.getHtml();
-dojo.io.bind({method:this.saveMethod,url:this.saveUrl,content:_3a});
-}else{
-dojo.debug("please set a saveUrl for the editor");
-}
-if(this.closeOnSave){
-this._richText.close(e.getName().toLowerCase()=="save");
-}
-}
-},_close:function(e){
-if(!this._richText.isClosed){
-this._richText.close(e.getName().toLowerCase()=="save");
-}
-},onAction:function(cmd,_3d){
-switch(cmd){
-case "createlink":
-if(!(_3d=prompt("Please enter the URL of the link:","http://"))){
-return;
-}
-break;
-case "insertimage":
-if(!(_3d=prompt("Please enter the URL of the image:","http://"))){
-return;
-}
-break;
-}
-this._richText.execCommand(cmd,_3d);
-},fillInTemplate:function(_3e,_3f){
-},_fire:function(_40){
-if(dojo.lang.isFunction(this[_40])){
-var _41=[];
-if(arguments.length==1){
-_41.push(this);
-}else{
-for(var i=1;i<arguments.length;i++){
-_41.push(arguments[i]);
-}
-}
-this[_40].apply(this,_41);
-}
-},getHtml:function(){
-this._richText.contentFilters=this._richText.contentFilters.concat(this.contentFilters);
-return this._richText.getEditorContent();
-},getEditorContent:function(){
-return this.getHtml();
-},onClose:function(_43,_44){
-this.disableToolbar(_44);
-if(_43){
-this._fire("onSave");
-}else{
-this._fire("onCancel");
-}
-},onLoad:function(){
-},onSave:function(){
-},onCancel:function(){
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2.js
deleted file mode 100644
index aa20540..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2.js
+++ /dev/null
@@ -1,399 +0,0 @@
-dojo.provide("dojo.widget.Editor2");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.RichText");
-dojo.require("dojo.widget.Editor2Toolbar");
-dojo.require("dojo.uri.cache");
-dojo.widget.Editor2Manager=new dojo.widget.HandlerManager;
-dojo.lang.mixin(dojo.widget.Editor2Manager,{_currentInstance:null,commandState:{Disabled:0,Latched:1,Enabled:2},getCurrentInstance:function(){
-return this._currentInstance;
-},setCurrentInstance:function(_1){
-this._currentInstance=_1;
-},getCommand:function(_2,_3){
-var _4;
-_3=_3.toLowerCase();
-for(var i=0;i<this._registeredHandlers.length;i++){
-_4=this._registeredHandlers[i](_2,_3);
-if(_4){
-return _4;
-}
-}
-switch(_3){
-case "htmltoggle":
-_4=new dojo.widget.Editor2BrowserCommand(_2,_3);
-break;
-case "formatblock":
-_4=new dojo.widget.Editor2FormatBlockCommand(_2,_3);
-break;
-case "anchor":
-_4=new dojo.widget.Editor2Command(_2,_3);
-break;
-case "createlink":
-_4=new dojo.widget.Editor2DialogCommand(_2,_3,{contentFile:"dojo.widget.Editor2Plugin.CreateLinkDialog",contentClass:"Editor2CreateLinkDialog",title:"Insert/Edit Link",width:"300px",height:"200px"});
-break;
-case "insertimage":
-_4=new dojo.widget.Editor2DialogCommand(_2,_3,{contentFile:"dojo.widget.Editor2Plugin.InsertImageDialog",contentClass:"Editor2InsertImageDialog",title:"Insert/Edit Image",width:"400px",height:"270px"});
-break;
-default:
-var _6=this.getCurrentInstance();
-if((_6&&_6.queryCommandAvailable(_3))||(!_6&&dojo.widget.Editor2.prototype.queryCommandAvailable(_3))){
-_4=new dojo.widget.Editor2BrowserCommand(_2,_3);
-}else{
-dojo.debug("dojo.widget.Editor2Manager.getCommand: Unknown command "+_3);
-return;
-}
-}
-return _4;
-},destroy:function(){
-this._currentInstance=null;
-dojo.widget.HandlerManager.prototype.destroy.call(this);
-}});
-dojo.addOnUnload(dojo.widget.Editor2Manager,"destroy");
-dojo.lang.declare("dojo.widget.Editor2Command",null,function(_7,_8){
-this._editor=_7;
-this._updateTime=0;
-this._name=_8;
-},{_text:"Unknown",execute:function(_9){
-dojo.unimplemented("dojo.widget.Editor2Command.execute");
-},getText:function(){
-return this._text;
-},getState:function(){
-return dojo.widget.Editor2Manager.commandState.Enabled;
-},destroy:function(){
-}});
-dojo.widget.Editor2BrowserCommandNames={"bold":"Bold","copy":"Copy","cut":"Cut","Delete":"Delete","indent":"Indent","inserthorizontalrule":"Horizental Rule","insertorderedlist":"Numbered List","insertunorderedlist":"Bullet List","italic":"Italic","justifycenter":"Align Center","justifyfull":"Justify","justifyleft":"Align Left","justifyright":"Align Right","outdent":"Outdent","paste":"Paste","redo":"Redo","removeformat":"Remove Format","selectall":"Select All","strikethrough":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline","undo":"Undo","unlink":"Remove Link","createlink":"Create Link","insertimage":"Insert Image","htmltoggle":"HTML Source","forecolor":"Foreground Color","hilitecolor":"Background Color","plainformatblock":"Paragraph Style","formatblock":"Paragraph Style","fontsize":"Font Size","fontname":"Font Name"};
-dojo.lang.declare("dojo.widget.Editor2BrowserCommand",dojo.widget.Editor2Command,function(_a,_b){
-var _c=dojo.widget.Editor2BrowserCommandNames[_b.toLowerCase()];
-if(_c){
-this._text=_c;
-}
-},{execute:function(_d){
-this._editor.execCommand(this._name,_d);
-},getState:function(){
-if(this._editor._lastStateTimestamp>this._updateTime||this._state==undefined){
-this._updateTime=this._editor._lastStateTimestamp;
-try{
-if(this._editor.queryCommandEnabled(this._name)){
-if(this._editor.queryCommandState(this._name)){
-this._state=dojo.widget.Editor2Manager.commandState.Latched;
-}else{
-this._state=dojo.widget.Editor2Manager.commandState.Enabled;
-}
-}else{
-this._state=dojo.widget.Editor2Manager.commandState.Disabled;
-}
-}
-catch(e){
-this._state=dojo.widget.Editor2Manager.commandState.Enabled;
-}
-}
-return this._state;
-},getValue:function(){
-try{
-return this._editor.queryCommandValue(this._name);
-}
-catch(e){
-}
-}});
-dojo.lang.declare("dojo.widget.Editor2FormatBlockCommand",dojo.widget.Editor2BrowserCommand,{});
-dojo.require("dojo.widget.FloatingPane");
-dojo.widget.defineWidget("dojo.widget.Editor2Dialog",[dojo.widget.HtmlWidget,dojo.widget.FloatingPaneBase,dojo.widget.ModalDialogBase],{templateString:"<div id=\"${this.widgetId}\" class=\"dojoFloatingPane\">\n\t<span dojoattachpoint=\"tabStartOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\"\ttabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabStart\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoAttachPoint=\"titleBar\" class=\"dojoFloatingPaneTitleBar\"  style=\"display:none\">\n\t  \t<img dojoAttachPoint=\"titleBarIcon\"  class=\"dojoFloatingPaneTitleBarIcon\">\n\t\t<div dojoAttachPoint=\"closeAction\" dojoAttachEvent=\"onClick:hide\"\n   \t  \t\tclass=\"dojoFloatingPaneCloseIcon\"></div>\n\t\t<div dojoAttachPoint=\"restoreAction\" dojoAttachEvent=\"onClick:restoreWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneRestoreIcon\"></div>\n\t\t<div dojoAttachPoint=\"maximizeAction\" dojoAttachEvent=\"onClick:maximizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMaximizeIcon\"></div>\n\t\t<div dojoAttachPoint=\"minimizeAction\" dojoAttachEvent=\"onClick:minimizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMinimizeIcon\"></div>\n\t  \t<div dojoAttachPoint=\"titleBarText\" class=\"dojoFloatingPaneTitleText\">${this.title}</div>\n\t</div>\n\n\t<div id=\"${this.widgetId}_container\" dojoAttachPoint=\"containerNode\" class=\"dojoFloatingPaneClient\"></div>\n\t<span dojoattachpoint=\"tabEnd\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabEndOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoAttachPoint=\"resizeBar\" class=\"dojoFloatingPaneResizebar\" style=\"display:none\"></div>\n</div>\n",modal:true,width:"",height:"",windowState:"minimized",displayCloseAction:true,contentFile:"",contentClass:"",fillInTemplate:function(_e,_f){
-this.fillInFloatingPaneTemplate(_e,_f);
-dojo.widget.Editor2Dialog.superclass.fillInTemplate.call(this,_e,_f);
-},postCreate:function(){
-if(this.contentFile){
-dojo.require(this.contentFile);
-}
-if(this.modal){
-dojo.widget.ModalDialogBase.prototype.postCreate.call(this);
-}else{
-with(this.domNode.style){
-zIndex=999;
-display="none";
-}
-}
-dojo.widget.FloatingPaneBase.prototype.postCreate.apply(this,arguments);
-dojo.widget.Editor2Dialog.superclass.postCreate.call(this);
-if(this.width&&this.height){
-with(this.domNode.style){
-width=this.width;
-height=this.height;
-}
-}
-},createContent:function(){
-if(!this.contentWidget&&this.contentClass){
-this.contentWidget=dojo.widget.createWidget(this.contentClass);
-this.addChild(this.contentWidget);
-}
-},show:function(){
-if(!this.contentWidget){
-dojo.widget.Editor2Dialog.superclass.show.apply(this,arguments);
-this.createContent();
-dojo.widget.Editor2Dialog.superclass.hide.call(this);
-}
-if(!this.contentWidget||!this.contentWidget.loadContent()){
-return;
-}
-this.showFloatingPane();
-dojo.widget.Editor2Dialog.superclass.show.apply(this,arguments);
-if(this.modal){
-this.showModalDialog();
-}
-if(this.modal){
-this.bg.style.zIndex=this.domNode.style.zIndex-1;
-}
-},onShow:function(){
-dojo.widget.Editor2Dialog.superclass.onShow.call(this);
-this.onFloatingPaneShow();
-},closeWindow:function(){
-this.hide();
-dojo.widget.Editor2Dialog.superclass.closeWindow.apply(this,arguments);
-},hide:function(){
-if(this.modal){
-this.hideModalDialog();
-}
-dojo.widget.Editor2Dialog.superclass.hide.call(this);
-},checkSize:function(){
-if(this.isShowing()){
-if(this.modal){
-this._sizeBackground();
-}
-this.placeModalDialog();
-this.onResized();
-}
-}});
-dojo.widget.defineWidget("dojo.widget.Editor2DialogContent",dojo.widget.HtmlWidget,{widgetsInTemplate:true,loadContent:function(){
-return true;
-},cancel:function(){
-this.parent.hide();
-}});
-dojo.lang.declare("dojo.widget.Editor2DialogCommand",dojo.widget.Editor2BrowserCommand,function(_10,_11,_12){
-this.dialogParas=_12;
-},{execute:function(){
-if(!this.dialog){
-if(!this.dialogParas.contentFile||!this.dialogParas.contentClass){
-alert("contentFile and contentClass should be set for dojo.widget.Editor2DialogCommand.dialogParas!");
-return;
-}
-this.dialog=dojo.widget.createWidget("Editor2Dialog",this.dialogParas);
-dojo.body().appendChild(this.dialog.domNode);
-dojo.event.connect(this,"destroy",this.dialog,"destroy");
-}
-this.dialog.show();
-},getText:function(){
-return this.dialogParas.title||dojo.widget.Editor2DialogCommand.superclass.getText.call(this);
-}});
-dojo.widget.Editor2ToolbarGroups={};
-dojo.widget.defineWidget("dojo.widget.Editor2",dojo.widget.RichText,function(){
-this._loadedCommands={};
-},{toolbarAlwaysVisible:false,toolbarWidget:null,scrollInterval:null,toolbarTemplatePath:dojo.uri.cache.set(dojo.uri.moduleUri("dojo.widget","templates/EditorToolbarOneline.html"),"<div class=\"EditorToolbarDomNode EditorToolbarSmallBg\">\n\t<table cellpadding=\"1\" cellspacing=\"0\" border=\"0\">\n\t\t<tbody>\n\t\t\t<tr valign=\"top\" align=\"left\">\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"htmltoggle\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon\" \n\t\t\t\t\t\tstyle=\"background-image: none; width: 30px;\" >&lt;h&gt;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"copy\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Copy\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"paste\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Paste\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"undo\">\n\t\t\t\t\t\t<!-- FIXME: should we have the text \"undo\" here? -->\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Undo\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"redo\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Redo\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\"\tstyle=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"createlink\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Link\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"insertimage\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Image\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"inserthorizontalrule\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_HorizontalLine \">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"bold\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Bold\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"italic\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Italic\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"underline\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Underline\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"strikethrough\">\n\t\t\t\t\t\t<span \n\t\t\t\t\t\t\tclass=\"dojoE2TBIcon dojoE2TBIcon_StrikeThrough\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" \n\t\t\t\t\t\t\tstyle=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"insertunorderedlist\">\n\t\t\t\t\t\t<span \n\t\t\t\t\t\t\tclass=\"dojoE2TBIcon dojoE2TBIcon_BulletedList\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"insertorderedlist\">\n\t\t\t\t\t\t<span \n\t\t\t\t\t\t\tclass=\"dojoE2TBIcon dojoE2TBIcon_NumberedList\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" style=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"indent\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Indent\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"outdent\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Outdent\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" style=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"forecolor\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_TextColor\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"hilitecolor\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_BackgroundColor\" \n\t\t\t\t\t\t\tunselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td isSpacer=\"true\">\n\t\t\t\t\t<span class=\"iconContainer\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Sep\" style=\"width: 5px; min-width: 5px;\"></span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifyleft\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_LeftJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifycenter\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_CenterJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifyright\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_RightJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"justifyfull\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_BlockJustify\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\t\n\t\t\t\t<td>\n\t\t\t\t\t<select class=\"dojoEditorToolbarItem\" dojoETItemName=\"plainformatblock\">\n\t\t\t\t\t\t<!-- FIXME: using \"p\" here inserts a paragraph in most cases! -->\n\t\t\t\t\t\t<option value=\"\">-- format --</option>\n\t\t\t\t\t\t<option value=\"p\">Normal</option>\n\t\t\t\t\t\t<option value=\"pre\">Fixed Font</option>\n\t\t\t\t\t\t<option value=\"h1\">Main Heading</option>\n\t\t\t\t\t\t<option value=\"h2\">Section Heading</option>\n\t\t\t\t\t\t<option value=\"h3\">Sub-Heading</option>\n\t\t\t\t\t\t<!-- <option value=\"blockquote\">Block Quote</option> -->\n\t\t\t\t\t</select>\n\t\t\t\t</td>\n\t\t\t\t<td><!-- uncomment to enable save button -->\n\t\t\t\t\t<!-- save -->\n\t\t\t\t\t<!--span class=\"iconContainer dojoEditorToolbarItem\" dojoETItemName=\"save\">\n\t\t\t\t\t\t<span class=\"dojoE2TBIcon dojoE2TBIcon_Save\">&nbsp;</span>\n\t\t\t\t\t</span-->\n\t\t\t\t</td>\n\t\t\t\t<td width=\"*\">&nbsp;</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n"),toolbarTemplateCssPath:null,toolbarPlaceHolder:"",_inSourceMode:false,_htmlEditNode:null,toolbarGroup:"",shareToolbar:false,contextMenuGroupSet:"",editorOnLoad:function(){
-dojo.event.topic.publish("dojo.widget.Editor2::preLoadingToolbar",this);
-if(this.toolbarAlwaysVisible){
-dojo.require("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
-}
-if(this.toolbarWidget){
-this.toolbarWidget.show();
-dojo.html.insertBefore(this.toolbarWidget.domNode,this.domNode.firstChild);
-}else{
-if(this.shareToolbar){
-dojo.deprecated("Editor2:shareToolbar is deprecated in favor of toolbarGroup","0.5");
-this.toolbarGroup="defaultDojoToolbarGroup";
-}
-if(this.toolbarGroup){
-if(dojo.widget.Editor2ToolbarGroups[this.toolbarGroup]){
-this.toolbarWidget=dojo.widget.Editor2ToolbarGroups[this.toolbarGroup];
-}
-}
-if(!this.toolbarWidget){
-var _13={shareGroup:this.toolbarGroup,parent:this};
-_13.templateString=dojo.uri.cache.get(this.toolbarTemplatePath);
-if(this.toolbarTemplateCssPath){
-_13.templateCssPath=this.toolbarTemplateCssPath;
-_13.templateCssString=dojo.uri.cache.get(this.toolbarTemplateCssPath);
-}
-if(this.toolbarPlaceHolder){
-this.toolbarWidget=dojo.widget.createWidget("Editor2Toolbar",_13,dojo.byId(this.toolbarPlaceHolder),"after");
-}else{
-this.toolbarWidget=dojo.widget.createWidget("Editor2Toolbar",_13,this.domNode.firstChild,"before");
-}
-if(this.toolbarGroup){
-dojo.widget.Editor2ToolbarGroups[this.toolbarGroup]=this.toolbarWidget;
-}
-dojo.event.connect(this,"close",this.toolbarWidget,"hide");
-this.toolbarLoaded();
-}
-}
-dojo.event.topic.registerPublisher("Editor2.clobberFocus",this,"clobberFocus");
-dojo.event.topic.subscribe("Editor2.clobberFocus",this,"setBlur");
-dojo.event.topic.publish("dojo.widget.Editor2::onLoad",this);
-},toolbarLoaded:function(){
-},registerLoadedPlugin:function(obj){
-if(!this.loadedPlugins){
-this.loadedPlugins=[];
-}
-this.loadedPlugins.push(obj);
-},unregisterLoadedPlugin:function(obj){
-for(var i in this.loadedPlugins){
-if(this.loadedPlugins[i]===obj){
-delete this.loadedPlugins[i];
-return;
-}
-}
-dojo.debug("dojo.widget.Editor2.unregisterLoadedPlugin: unknow plugin object: "+obj);
-},execCommand:function(_17,_18){
-switch(_17.toLowerCase()){
-case "htmltoggle":
-this.toggleHtmlEditing();
-break;
-default:
-dojo.widget.Editor2.superclass.execCommand.apply(this,arguments);
-}
-},queryCommandEnabled:function(_19,_1a){
-switch(_19.toLowerCase()){
-case "htmltoggle":
-return true;
-default:
-if(this._inSourceMode){
-return false;
-}
-return dojo.widget.Editor2.superclass.queryCommandEnabled.apply(this,arguments);
-}
-},queryCommandState:function(_1b,_1c){
-switch(_1b.toLowerCase()){
-case "htmltoggle":
-return this._inSourceMode;
-default:
-return dojo.widget.Editor2.superclass.queryCommandState.apply(this,arguments);
-}
-},onClick:function(e){
-dojo.widget.Editor2.superclass.onClick.call(this,e);
-if(dojo.widget.PopupManager){
-if(!e){
-e=this.window.event;
-}
-dojo.widget.PopupManager.onClick(e);
-}
-},clobberFocus:function(){
-},toggleHtmlEditing:function(){
-if(this===dojo.widget.Editor2Manager.getCurrentInstance()){
-if(!this._inSourceMode){
-var _1e=this.getEditorContent();
-this._inSourceMode=true;
-if(!this._htmlEditNode){
-this._htmlEditNode=dojo.doc().createElement("textarea");
-dojo.html.insertAfter(this._htmlEditNode,this.editorObject);
-}
-this._htmlEditNode.style.display="";
-this._htmlEditNode.style.width="100%";
-this._htmlEditNode.style.height=dojo.html.getBorderBox(this.editNode).height+"px";
-this._htmlEditNode.value=_1e;
-with(this.editorObject.style){
-position="absolute";
-left="-2000px";
-top="-2000px";
-}
-}else{
-this._inSourceMode=false;
-this._htmlEditNode.blur();
-with(this.editorObject.style){
-position="";
-left="";
-top="";
-}
-var _1e=this._htmlEditNode.value;
-dojo.lang.setTimeout(this,"replaceEditorContent",1,_1e);
-this._htmlEditNode.style.display="none";
-this.focus();
-}
-this.onDisplayChanged(null,true);
-}
-},setFocus:function(){
-if(dojo.widget.Editor2Manager.getCurrentInstance()===this){
-return;
-}
-this.clobberFocus();
-dojo.widget.Editor2Manager.setCurrentInstance(this);
-},setBlur:function(){
-},saveSelection:function(){
-this._bookmark=null;
-this._bookmark=dojo.withGlobal(this.window,dojo.html.selection.getBookmark);
-},restoreSelection:function(){
-if(this._bookmark){
-this.focus();
-dojo.withGlobal(this.window,"moveToBookmark",dojo.html.selection,[this._bookmark]);
-this._bookmark=null;
-}else{
-dojo.debug("restoreSelection: no saved selection is found!");
-}
-},_updateToolbarLastRan:null,_updateToolbarTimer:null,_updateToolbarFrequency:500,updateToolbar:function(_1f){
-if((!this.isLoaded)||(!this.toolbarWidget)){
-return;
-}
-var _20=new Date()-this._updateToolbarLastRan;
-if((!_1f)&&(this._updateToolbarLastRan)&&((_20<this._updateToolbarFrequency))){
-clearTimeout(this._updateToolbarTimer);
-var _21=this;
-this._updateToolbarTimer=setTimeout(function(){
-_21.updateToolbar();
-},this._updateToolbarFrequency/2);
-return;
-}else{
-this._updateToolbarLastRan=new Date();
-}
-if(dojo.widget.Editor2Manager.getCurrentInstance()!==this){
-return;
-}
-this.toolbarWidget.update();
-},destroy:function(_22){
-this._htmlEditNode=null;
-dojo.event.disconnect(this,"close",this.toolbarWidget,"hide");
-if(!_22){
-this.toolbarWidget.destroy();
-}
-dojo.widget.Editor2.superclass.destroy.call(this);
-},_lastStateTimestamp:0,onDisplayChanged:function(e,_24){
-this._lastStateTimestamp=(new Date()).getTime();
-dojo.widget.Editor2.superclass.onDisplayChanged.call(this,e);
-this.updateToolbar(_24);
-},onLoad:function(){
-try{
-dojo.widget.Editor2.superclass.onLoad.call(this);
-}
-catch(e){
-dojo.debug(e);
-}
-this.editorOnLoad();
-},onFocus:function(){
-dojo.widget.Editor2.superclass.onFocus.call(this);
-this.setFocus();
-},getEditorContent:function(){
-if(this._inSourceMode){
-return this._htmlEditNode.value;
-}
-return dojo.widget.Editor2.superclass.getEditorContent.call(this);
-},replaceEditorContent:function(_25){
-if(this._inSourceMode){
-this._htmlEditNode.value=_25;
-return;
-}
-dojo.widget.Editor2.superclass.replaceEditorContent.apply(this,arguments);
-},getCommand:function(_26){
-if(this._loadedCommands[_26]){
-return this._loadedCommands[_26];
-}
-var cmd=dojo.widget.Editor2Manager.getCommand(this,_26);
-this._loadedCommands[_26]=cmd;
-return cmd;
-},shortcuts:[["bold"],["italic"],["underline"],["selectall","a"],["insertunorderedlist","\\"]],setupDefaultShortcuts:function(){
-var _28=function(cmd){
-return function(){
-cmd.execute();
-};
-};
-var _2a=this;
-dojo.lang.forEach(this.shortcuts,function(_2b){
-var cmd=_2a.getCommand(_2b[0]);
-if(cmd){
-_2a.addKeyHandler(_2b[1]?_2b[1]:_2b[0].charAt(0),_2b[2]==undefined?_2a.KEY_CTRL:_2b[2],_28(cmd));
-}
-});
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/AlwaysShowToolbar.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/AlwaysShowToolbar.js
deleted file mode 100644
index fd307ee..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/AlwaysShowToolbar.js
+++ /dev/null
@@ -1,105 +0,0 @@
-dojo.provide("dojo.widget.Editor2Plugin.AlwaysShowToolbar");
-dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad",function(_1){
-if(_1.toolbarAlwaysVisible){
-var p=new dojo.widget.Editor2Plugin.AlwaysShowToolbar(_1);
-}
-});
-dojo.declare("dojo.widget.Editor2Plugin.AlwaysShowToolbar",null,function(_3){
-this.editor=_3;
-this.editor.registerLoadedPlugin(this);
-this.setup();
-},{_scrollSetUp:false,_fixEnabled:false,_scrollThreshold:false,_handleScroll:true,setup:function(){
-var _4=this.editor.toolbarWidget;
-if(!_4.tbBgIframe){
-_4.tbBgIframe=new dojo.html.BackgroundIframe(_4.domNode);
-_4.tbBgIframe.onResized();
-}
-this.scrollInterval=setInterval(dojo.lang.hitch(this,"globalOnScrollHandler"),100);
-dojo.event.connect("before",this.editor.toolbarWidget,"destroy",this,"destroy");
-},globalOnScrollHandler:function(){
-var _5=dojo.render.html.ie;
-if(!this._handleScroll){
-return;
-}
-var dh=dojo.html;
-var _7=this.editor.toolbarWidget.domNode;
-var db=dojo.body();
-if(!this._scrollSetUp){
-this._scrollSetUp=true;
-var _9=dh.getMarginBox(this.editor.domNode).width;
-this._scrollThreshold=dh.abs(_7,true).y;
-if((_5)&&(db)&&(dh.getStyle(db,"background-image")=="none")){
-with(db.style){
-backgroundImage="url("+dojo.uri.moduleUri("dojo.widget","templates/images/blank.gif")+")";
-backgroundAttachment="fixed";
-}
-}
-}
-var _a=(window["pageYOffset"])?window["pageYOffset"]:(document["documentElement"]||document["body"]).scrollTop;
-if(_a>this._scrollThreshold){
-if(!this._fixEnabled){
-var _b=dojo.html.getMarginBox(_7);
-this.editor.editorObject.style.marginTop=_b.height+"px";
-if(_5){
-_7.style.left=dojo.html.abs(_7,dojo.html.boxSizing.MARGIN_BOX).x;
-if(_7.previousSibling){
-this._IEOriginalPos=["after",_7.previousSibling];
-}else{
-if(_7.nextSibling){
-this._IEOriginalPos=["before",_7.nextSibling];
-}else{
-this._IEOriginalPos=["",_7.parentNode];
-}
-}
-dojo.body().appendChild(_7);
-dojo.html.addClass(_7,"IEFixedToolbar");
-}else{
-with(_7.style){
-position="fixed";
-top="0px";
-}
-}
-_7.style.width=_b.width+"px";
-_7.style.zIndex=1000;
-this._fixEnabled=true;
-}
-if(!dojo.render.html.safari){
-var _c=(this.height)?parseInt(this.editor.height):this.editor._lastHeight;
-if(_a>(this._scrollThreshold+_c)){
-_7.style.display="none";
-}else{
-_7.style.display="";
-}
-}
-}else{
-if(this._fixEnabled){
-(this.editor.object||this.editor.iframe).style.marginTop=null;
-with(_7.style){
-position="";
-top="";
-zIndex="";
-display="";
-}
-if(_5){
-_7.style.left="";
-dojo.html.removeClass(_7,"IEFixedToolbar");
-if(this._IEOriginalPos){
-dojo.html.insertAtPosition(_7,this._IEOriginalPos[1],this._IEOriginalPos[0]);
-this._IEOriginalPos=null;
-}else{
-dojo.html.insertBefore(_7,this.editor.object||this.editor.iframe);
-}
-}
-_7.style.width="";
-this._fixEnabled=false;
-}
-}
-},destroy:function(){
-this._IEOriginalPos=null;
-this._handleScroll=false;
-clearInterval(this.scrollInterval);
-this.editor.unregisterLoadedPlugin(this);
-if(dojo.render.html.ie){
-dojo.html.removeClass(this.editor.toolbarWidget.domNode,"IEFixedToolbar");
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/ContextMenu.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/ContextMenu.js
deleted file mode 100644
index 629d1b5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/ContextMenu.js
+++ /dev/null
@@ -1,190 +0,0 @@
-dojo.provide("dojo.widget.Editor2Plugin.ContextMenu");
-dojo.require("dojo.widget.Menu2");
-dojo.event.topic.subscribe("dojo.widget.Editor2::onLoad",function(_1){
-dojo.widget.Editor2Plugin.ContextMenuManager.getContextMenu(_1);
-});
-dojo.widget.Editor2Plugin.ContextMenuManager={menuGroups:["Generic","Link","Anchor","Image","List","Table"],_contextMenuGroupSets:{},_registeredGroups:{},_menus:{},registerGroup:function(_2,_3){
-if(this._registeredGroups[_2]){
-alert("dojo.widget.Editor2Plugin.ContextMenuManager.registerGroup: menu group "+_2+"is already registered. Ignored.");
-return;
-}
-this._registeredGroups[_2]=_3;
-},removeGroup:function(_4){
-delete this._registeredGroups[_4];
-},getGroup:function(_5,_6){
-if(this._registeredGroups[_5]){
-var _7=this._registeredGroups[_5](_5,_6);
-if(_7){
-return _7;
-}
-}
-switch(_5){
-case "Generic":
-case "Link":
-case "Image":
-return new dojo.widget.Editor2Plugin[_5+"ContextMenuGroup"](_6);
-case "Anchor":
-case "List":
-}
-},registerGroupSet:function(_8,_9){
-this._contextMenuGroupSets[_8]=_9;
-},removeGroupSet:function(_a){
-var _b=this._contextMenuGroupSets[_a];
-delete this._contextMenuGroupSets[_a];
-return _b;
-},getContextMenu:function(_c){
-var _d=_c.contextMenuGroupSet||"defaultDojoEditor2MenuGroupSet";
-if(this._menus[_d]){
-this._menus[_d].bindEditor(_c);
-return this._menus[_d];
-}
-var gs=(_c.contextMenuGroupSet&&this._contextMenuGroupSets[_c.contextMenuGroupSet])||this.menuGroups;
-var _f=new dojo.widget.Editor2Plugin.ContextMenu(_c,gs);
-this._menus[_d]=_f;
-return _f;
-}};
-dojo.declare("dojo.widget.Editor2Plugin.ContextMenu",null,function(_10,gs){
-this.groups=[];
-this.separators=[];
-this.editor=_10;
-this.editor.registerLoadedPlugin(this);
-this.contextMenu=dojo.widget.createWidget("PopupMenu2",{});
-dojo.body().appendChild(this.contextMenu.domNode);
-this.bindEditor(this.editor);
-dojo.event.connect(this.contextMenu,"aboutToShow",this,"aboutToShow");
-dojo.event.connect(this.editor,"destroy",this,"destroy");
-this.setup(gs);
-},{bindEditor:function(_12){
-this.contextMenu.bindDomNode(_12.document.body);
-},setup:function(gs){
-for(var i in gs){
-var g=dojo.widget.Editor2Plugin.ContextMenuManager.getGroup(gs[i],this);
-if(g){
-this.groups.push(g);
-}
-}
-},aboutToShow:function(){
-var _16=true;
-for(var i in this.groups){
-if(i>0&&this.separators.length!=this.groups.length-1){
-this.separators.push(dojo.widget.createWidget("MenuSeparator2",{}));
-this.contextMenu.addChild(this.separators[this.separators.length-1]);
-}
-if(this.groups[i].refresh()){
-if(i>0){
-if(_16){
-this.separators[i-1].hide();
-}else{
-this.separators[i-1].show();
-}
-}
-if(_16){
-_16=false;
-}
-}else{
-if(i>0){
-this.separators[i-1].hide();
-}
-}
-}
-},destroy:function(){
-this.editor.unregisterLoadedPlugin(this);
-delete this.groups;
-delete this.separators;
-this.contextMenu.destroy();
-delete this.contextMenu;
-}});
-dojo.widget.defineWidget("dojo.widget.Editor2ContextMenuItem",dojo.widget.MenuItem2,{command:"",buildRendering:function(){
-var _18=dojo.widget.Editor2Manager.getCurrentInstance();
-this.caption=_18.getCommand(this.command).getText();
-dojo.widget.Editor2ContextMenuItem.superclass.buildRendering.apply(this,arguments);
-},onClick:function(){
-var _19=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_19){
-var _1a=_19.getCommand(this.command);
-if(_1a){
-_1a.execute();
-}
-}
-},refresh:function(){
-var _1b=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_1b){
-var _1c=_1b.getCommand(this.command);
-if(_1c){
-if(_1c.getState()==dojo.widget.Editor2Manager.commandState.Disabled){
-this.disable();
-return false;
-}else{
-this.enable();
-return true;
-}
-}
-}
-},hide:function(){
-this.domNode.style.display="none";
-},show:function(){
-this.domNode.style.display="";
-}});
-dojo.declare("dojo.widget.Editor2Plugin.SimpleContextMenuGroup",null,function(_1d){
-this.contextMenu=_1d.contextMenu;
-this.items=[];
-dojo.event.connect(_1d,"destroy",this,"destroy");
-},{refresh:function(){
-if(!this.items.length){
-this.createItems();
-for(var i in this.items){
-this.contextMenu.addChild(this.items[i]);
-}
-}
-return this.checkVisibility();
-},destroy:function(){
-this.contextmenu=null;
-delete this.items;
-delete this.contextMenu;
-},createItems:function(){
-},checkVisibility:function(){
-var _1f=false;
-for(var i in this.items){
-_1f=_1f||this.items[i].refresh();
-}
-var _21=_1f?"show":"hide";
-for(var i in this.items){
-this.items[i][_21]();
-}
-return _1f;
-}});
-dojo.declare("dojo.widget.Editor2Plugin.GenericContextMenuGroup",dojo.widget.Editor2Plugin.SimpleContextMenuGroup,{createItems:function(){
-this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem",{command:"cut",iconClass:"dojoE2TBIcon dojoE2TBIcon_Cut"}));
-this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem",{command:"copy",iconClass:"dojoE2TBIcon dojoE2TBIcon_Copy"}));
-this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem",{command:"paste",iconClass:"dojoE2TBIcon dojoE2TBIcon_Paste"}));
-}});
-dojo.declare("dojo.widget.Editor2Plugin.LinkContextMenuGroup",dojo.widget.Editor2Plugin.SimpleContextMenuGroup,{createItems:function(){
-this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem",{command:"createlink",iconClass:"dojoE2TBIcon dojoE2TBIcon_Link"}));
-this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem",{command:"unlink",iconClass:"dojoE2TBIcon dojoE2TBIcon_UnLink"}));
-},checkVisibility:function(){
-var _22=this.items[1].refresh();
-if(_22){
-this.items[0].refresh();
-for(var i in this.items){
-this.items[i].show();
-}
-}else{
-for(var i in this.items){
-this.items[i].hide();
-}
-}
-return _22;
-}});
-dojo.declare("dojo.widget.Editor2Plugin.ImageContextMenuGroup",dojo.widget.Editor2Plugin.SimpleContextMenuGroup,{createItems:function(){
-this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem",{command:"insertimage",iconClass:"dojoE2TBIcon dojoE2TBIcon_Image"}));
-},checkVisibility:function(){
-var _24=dojo.widget.Editor2Manager.getCurrentInstance();
-var img=dojo.withGlobal(_24.window,"getSelectedElement",dojo.html.selection);
-if(img&&img.tagName.toLowerCase()=="img"){
-this.items[0].show();
-return true;
-}else{
-this.items[0].hide();
-return false;
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/CreateLinkDialog.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/CreateLinkDialog.js
deleted file mode 100644
index 2988610..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/CreateLinkDialog.js
+++ /dev/null
@@ -1,50 +0,0 @@
-dojo.provide("dojo.widget.Editor2Plugin.CreateLinkDialog");
-dojo.widget.defineWidget("dojo.widget.Editor2CreateLinkDialog",dojo.widget.Editor2DialogContent,{templateString:"<table>\n<tr><td>URL</td><td> <input type=\"text\" dojoAttachPoint=\"link_href\" name=\"dojo_createLink_href\"/></td></tr>\n<tr><td>Target </td><td><select dojoAttachPoint=\"link_target\">\n\t<option value=\"\">Self</option>\n\t<option value=\"_blank\">New Window</option>\n\t<option value=\"_top\">Top Window</option>\n\t</select></td></tr>\n<tr><td>Class </td><td><input type=\"text\" dojoAttachPoint=\"link_class\" /></td></tr>\n<tr><td colspan=\"2\">\n\t<table><tr>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:ok'>OK</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Cancel</button></td>\n\t</tr></table>\n\t</td></tr>\n</table>\n",editableAttributes:["href","target","class"],loadContent:function(){
-var _1=dojo.widget.Editor2Manager.getCurrentInstance();
-_1.saveSelection();
-this.linkNode=dojo.withGlobal(_1.window,"getAncestorElement",dojo.html.selection,["a"]);
-var _2={};
-this.extraAttribText="";
-if(this.linkNode){
-var _3=this.linkNode.attributes;
-for(var i=0;i<_3.length;i++){
-if(dojo.lang.find(this.editableAttributes,_3[i].name.toLowerCase())>-1){
-_2[_3[i].name]=_3[i].value;
-}else{
-if(_3[i].specified==undefined||_3[i].specified){
-this.extraAttribText+=_3[i].name+"=\""+_3[i].value+"\" ";
-}
-}
-}
-}else{
-var _5=dojo.withGlobal(_1.window,"getSelectedText",dojo.html.selection);
-if(_5==null||_5.length==0){
-alert("Please select some text to create a link.");
-return false;
-}
-}
-for(var i=0;i<this.editableAttributes.length;++i){
-name=this.editableAttributes[i];
-this["link_"+name].value=(_2[name]==undefined)?"":_2[name];
-}
-return true;
-},ok:function(){
-var _6=dojo.widget.Editor2Manager.getCurrentInstance();
-_6.restoreSelection();
-if(!this.linkNode){
-var _7=dojo.withGlobal(_6.window,"getSelectedHtml",dojo.html.selection);
-}else{
-var _7=this.linkNode.innerHTML;
-dojo.withGlobal(_6.window,"selectElement",dojo.html.selection,[this.linkNode]);
-}
-var _8="";
-for(var i=0;i<this.editableAttributes.length;++i){
-name=this.editableAttributes[i];
-var _a=this["link_"+name].value;
-if(_a.length>0){
-_8+=name+"=\""+_a+"\" ";
-}
-}
-_6.execCommand("inserthtml","<a "+_8+this.extraAttribText+">"+_7+"</a>");
-this.cancel();
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/FindReplace.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/FindReplace.js
deleted file mode 100644
index cc3c3e6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/FindReplace.js
+++ /dev/null
@@ -1,48 +0,0 @@
-dojo.provide("dojo.widget.Editor2Plugin.FindReplace");
-dojo.require("dojo.widget.Editor2");
-dojo.declare("dojo.widget.Editor2Plugin.FindCommand",dojo.widget.Editor2DialogCommand,{SearchOption:{CaseSensitive:4,SearchBackwards:64,WholeWord:2,WrapSearch:128},find:function(_1,_2){
-this._editor.focus();
-if(window.find){
-this._editor.window.find(_1,_2&this.SearchOption.CaseSensitive?true:false,_2&this.SearchOption.SearchBackwards?true:false,_2&this.SearchOption.WrapSearch?true:false,_2&this.SearchOption.WholeWord?true:false);
-}else{
-if(dojo.body().createTextRange){
-var _3=this._editor.document.body.createTextRange();
-var _4=_3.findText(_1,(_2&this.SearchOption.SearchBackwards)?1:-1,_2);
-if(_4){
-_3.scrollIntoView();
-_3.select();
-}else{
-alert("Can not find "+_1+" in the document");
-}
-}else{
-alert("No idea how to search in this browser. Please submit patch if you know.");
-}
-}
-},getText:function(){
-return "Find";
-}});
-dojo.widget.Editor2Plugin.FindReplace={getCommand:function(_5,_6){
-var _6=_6.toLowerCase();
-var _7;
-if(_6=="find"){
-_7=new dojo.widget.Editor2Plugin.FindCommand(_5,"find",{contentFile:"dojo.widget.Editor2Plugin.FindReplaceDialog",contentClass:"Editor2FindDialog",title:"Find",width:"350px",height:"150px",modal:false});
-}else{
-if(_6=="replace"){
-_7=new dojo.widget.Editor2DialogCommand(_5,"replace",{contentFile:"dojo.widget.Editor2Plugin.FindReplaceDialog",contentClass:"Editor2ReplaceDialog",href:dojo.uri.cache.set(dojo.uri.moduleUri("dojo.widget","templates/Editor2/Dialog/replace.html"),"<table style=\"white-space: nowrap;\">\n<tr><td>Find: </td><td> <input type=\"text\" dojoAttachPoint=\"replace_text\" /></td></tr>\n<tr><td>Replace with: </td><td> <input type=\"text\" dojoAttachPoint=\"replace_text\" /></td></tr>\n<tr><td colspan='2'><table><tr><td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"replace_option_casesens\" id=\"dojo_replace_option_casesens\" />\n\t\t<label for=\"dojo_replace_option_casesens\">Case Sensitive</label></td>\n\t\t\t<td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"replace_option_backwards\" id=\"dojo_replace_option_backwards\" />\n\t\t<label for=\"dojo_replace_option_backwards\">Search Backwards</label></td></tr></table></td></tr>\n<tr><td colspan=2\">\n\t<table><tr>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:replace'>Replace</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:replaceAll'>Replace All</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Close</button></td>\n\t</tr></table>\n\t</td></tr>\n</table>\n"),title:"Replace",width:"350px",height:"200px",modal:false});
-}
-}
-return _7;
-},getToolbarItem:function(_8){
-var _8=_8.toLowerCase();
-var _9;
-if(_8=="replace"){
-_9=new dojo.widget.Editor2ToolbarButton("Replace");
-}else{
-if(_8=="find"){
-_9=new dojo.widget.Editor2ToolbarButton("Find");
-}
-}
-return _9;
-}};
-dojo.widget.Editor2Manager.registerHandler(dojo.widget.Editor2Plugin.FindReplace.getCommand);
-dojo.widget.Editor2ToolbarItemManager.registerHandler(dojo.widget.Editor2Plugin.FindReplace.getToolbarItem);
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/FindReplaceDialog.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/FindReplaceDialog.js
deleted file mode 100644
index f6c2871..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/FindReplaceDialog.js
+++ /dev/null
@@ -1,21 +0,0 @@
-dojo.provide("dojo.widget.Editor2Plugin.FindReplaceDialog");
-dojo.widget.defineWidget("dojo.widget.Editor2FindDialog",dojo.widget.Editor2DialogContent,{templateString:"<table style=\"white-space: nowrap;\">\n<tr><td colspan='2'>Find: <input type=\"text\" dojoAttachPoint=\"find_text\" /></td></tr>\n<tr><td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"find_option_casesens\" />\n\t\t<label for=\"find_option_casesens\">Case Sensitive</label></td>\n\t\t\t<td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"find_option_backwards\" />\n\t\t<label for=\"find_option_backwards\">Search Backwards</label></td></tr>\n<tr><td style=\"display: none;\"><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"find_option_wholeword\" />\n\t\t<label for=\"find_option_wholeword\">Whole Word</label></td>\n<tr><td colspan=\"1\">\n\t<table><tr>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:find'>Find</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Close</button></td>\n\t</tr></table>\n\t</td></tr>\n</table>\n",find:function(){
-var _1=dojo.widget.Editor2Manager.getCurrentInstance();
-var _2=_1.getCommand("find");
-var _3=0;
-if(this["find_option_casesens"].checked){
-_3|=_2.SearchOption.CaseSensitive;
-}
-if(this["find_option_backwards"].checked){
-_3|=_2.SearchOption.SearchBackwards;
-}
-if(this["find_option_wholeword"].checked){
-_3|=_2.SearchOption.WholeWord;
-}
-_2.find(this["find_text"].value,_3);
-}});
-dojo.widget.defineWidget("dojo.widget.Editor2ReplaceDialog",dojo.widget.Editor2DialogContent,{templateString:"<table style=\"white-space: nowrap;\">\n<tr><td>Find: </td><td> <input type=\"text\" dojoAttachPoint=\"replace_text\" /></td></tr>\n<tr><td>Replace with: </td><td> <input type=\"text\" dojoAttachPoint=\"replace_text\" /></td></tr>\n<tr><td colspan='2'><table><tr><td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"replace_option_casesens\" id=\"dojo_replace_option_casesens\" />\n\t\t<label for=\"dojo_replace_option_casesens\">Case Sensitive</label></td>\n\t\t\t<td><input type=\"checkbox\" dojoType=\"CheckBox\" dojoAttachPoint=\"replace_option_backwards\" id=\"dojo_replace_option_backwards\" />\n\t\t<label for=\"dojo_replace_option_backwards\">Search Backwards</label></td></tr></table></td></tr>\n<tr><td colspan=2\">\n\t<table><tr>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:replace'>Replace</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:replaceAll'>Replace All</button></td>\n\t<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Close</button></td>\n\t</tr></table>\n\t</td></tr>\n</table>\n",replace:function(){
-alert("not implemented yet");
-},replaceAll:function(){
-alert("not implemented yet");
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/InsertImageDialog.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/InsertImageDialog.js
deleted file mode 100644
index 31ce30c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/InsertImageDialog.js
+++ /dev/null
@@ -1,42 +0,0 @@
-dojo.provide("dojo.widget.Editor2Plugin.InsertImageDialog");
-dojo.widget.defineWidget("dojo.widget.Editor2InsertImageDialog",dojo.widget.Editor2DialogContent,{templateString:"<table cellspacing=\"1\" cellpadding=\"1\" border=\"0\" width=\"100%\" height=\"100%\">\n\t<tr>\n\t\t<td>\n\t\t\t<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" border=\"0\">\n\t\t\t\t<tr>\n\t\t\t\t\t<td width=\"100%\">\n\t\t\t\t\t\t<span>URL</span>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td style=\"display: none\" nowrap=\"nowrap\" rowspan=\"2\">\n\t\t\t\t\t\t<!--input id=\"btnBrowse\" onclick=\"BrowseServer();\" type=\"button\" value=\"Browse Server\"/-->\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td valign=\"top\">\n\t\t\t\t\t\t<input dojoAttachPoint=\"image_src\" style=\"width: 100%\" type=\"text\" />\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</td>\n\t</tr>\n\t<tr>\n\t\t<td>\n\t\t\t<span>Alternative Text</span><br />\n\t\t\t<input dojoAttachPoint=\"image_alt\" style=\"width: 100%\" type=\"text\" /><br />\n\t\t</td>\n\t</tr>\n\t<tr>\n\t\t<td valign=\"top\">\n\t\t\t<table><tr><td>\n\t\t\t\t\t\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span>Width</span>&nbsp;</td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" size=\"3\" dojoAttachPoint=\"image_width\" /></td>\n\n\t\t\t\t\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t\t\t\t\t<!--div id=\"btnLockSizes\" class=\"BtnLocked\" onmouseover=\"this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ) + ' BtnOver';\"\n\t\t\t\t\t\t\t\t\t\tonmouseout=\"this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' );\" title=\"Lock Sizes\"\n\t\t\t\t\t\t\t\t\t\tonclick=\"SwitchLock(this);\">\n\t\t\t\t\t\t\t\t\t</div-->\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t\t\t\t\t<!--div id=\"btnResetSize\" class=\"BtnReset\" onmouseover=\"this.className='BtnReset BtnOver';\"\n\t\t\t\t\t\t\t\t\t\tonmouseout=\"this.className='BtnReset';\" title=\"Reset Size\" onclick=\"ResetSizes();\">\n\t\t\t\t\t\t\t\t\t</div-->\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span>Height</span>&nbsp;</td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" size=\"3\" dojoAttachPoint=\"image_height\" /></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</td><td>\n\n\t\t\t\t\t\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t\t<tr>\n\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span >HSpace</span>&nbsp;</td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" size=\"2\" dojoAttachPoint=\"image_hspace\"/></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span >VSpace</span>&nbsp;</td>\n\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" size=\"2\" dojoAttachPoint=\"image_vspace\" /></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</td></tr>\n\t\t\t\t\t<tr><td colspan=\"2\">\n\t\t\t\t\t\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span>Border</span>&nbsp;</td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<input type=\"text\" size=\"2\" value=\"\" dojoAttachPoint=\"image_border\" /></td>\n\t\t\t\t\t\t\t\t<td>&nbsp;&nbsp;&nbsp;</td>\n\t\t\t\t\t\t\t\t<td nowrap=\"nowrap\">\n\t\t\t\t\t\t\t\t\t<span >Align</span>&nbsp;</td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<select dojoAttachPoint=\"image_align\">\n\n\t\t\t\t\t\t\t\t\t\t<option value=\"\" selected=\"selected\"></option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"left\">Left</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"absBottom\">Abs Bottom</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"absMiddle\">Abs Middle</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"baseline\">Baseline</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"bottom\">Bottom</option>\n\n\t\t\t\t\t\t\t\t\t\t<option value=\"middle\">Middle</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"right\">Right</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"textTop\">Text Top</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"top\">Top</option>\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</td>\n\t\t\t\t</tr></table>\n\t\t</td>\n\t</tr>\n\t<tr><td>\n\t\t<table><tr>\n\t\t<td><button dojoType='Button' dojoAttachEvent='onClick:ok'>OK</button></td>\n\t\t<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Cancel</button></td>\n\t\t</tr></table>\n\t</td></tr>\n</table>\n",editableAttributes:["src","alt","width","height","hspace","vspace","border","align"],loadContent:function(){
-var _1=dojo.widget.Editor2Manager.getCurrentInstance();
-this.imageNode=dojo.withGlobal(_1.window,"getSelectedElement",dojo.html.selection);
-if(!this.imageNode){
-this.imageNode=dojo.withGlobal(_1.window,"getAncestorElement",dojo.html.selection,["img"]);
-}
-var _2={};
-this.extraAttribText="";
-if(this.imageNode){
-var _3=this.imageNode.attributes;
-for(var i=0;i<_3.length;i++){
-if(dojo.lang.find(this.editableAttributes,_3[i].name.toLowerCase())>-1){
-_2[_3[i].name]=_3[i].value;
-}else{
-this.extraAttribText+=_3[i].name+"=\""+_3[i].value+"\" ";
-}
-}
-}
-for(var i=0;i<this.editableAttributes.length;++i){
-name=this.editableAttributes[i];
-this["image_"+name].value=(_2[name]==undefined)?"":_2[name];
-}
-return true;
-},ok:function(){
-var _5=dojo.widget.Editor2Manager.getCurrentInstance();
-var _6=_5.getCommand("inserthtml");
-var _7=0;
-var _8="";
-for(var i=0;i<this.editableAttributes.length;++i){
-name=this.editableAttributes[i];
-var _a=this["image_"+name].value;
-if(_a.length>0){
-_8+=name+"=\""+_a+"\" ";
-}
-}
-if(this.imageNode){
-dojo.withGlobal(_5.window,"selectElement",dojo.html.selection,[this.imageNode]);
-}
-_6.execute("<img "+_8+this.extraAttribText+"/>");
-this.cancel();
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/InsertTableDialog.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/InsertTableDialog.js
deleted file mode 100644
index 2cca214..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/InsertTableDialog.js
+++ /dev/null
@@ -1,118 +0,0 @@
-dojo.provide("dojo.widget.Editor2Plugin.InsertTableDialog");
-dojo.widget.defineWidget("dojo.widget.Editor2InsertTableDialog",dojo.widget.Editor2DialogContent,{templateString:"<div>\n<table cellSpacing=\"1\" cellPadding=\"1\" width=\"100%\" border=\"0\">\n\t<tr>\n\t\t<td valign=\"top\">\n\t\t\t<table cellSpacing=\"0\" cellPadding=\"0\" border=\"0\">\n\t\t\t\t<tr>\n\n\t\t\t\t\t<td><span>Rows</span>:</td>\n\t\t\t\t\t<td>&nbsp;<input dojoAttachPoint=\"table_rows\" type=\"text\" maxLength=\"3\" size=\"2\" value=\"3\"></td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td><span>Columns</span>:</td>\n\t\t\t\t\t<td>&nbsp;<input dojoAttachPoint=\"table_cols\" type=\"text\" maxLength=\"2\" size=\"2\" value=\"2\"></td>\n\t\t\t\t</tr>\n\n\t\t\t\t<tr>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td><span>Border size</span>:</td>\n\t\t\t\t\t<td>&nbsp;<INPUT dojoAttachPoint=\"table_border\" type=\"text\" maxLength=\"2\" size=\"2\" value=\"1\"></td>\n\t\t\t\t</tr>\n\n\t\t\t\t<tr>\n\t\t\t\t\t<td><span>Alignment</span>:</td>\n\t\t\t\t\t<td>&nbsp;<select dojoAttachPoint=\"table_align\">\n\t\t\t\t\t\t\t<option value=\"\" selected>&lt;Not set&gt;</option>\n\t\t\t\t\t\t\t<option value=\"left\">Left</option>\n\t\t\t\t\t\t\t<option value=\"center\">Center</option>\n\t\t\t\t\t\t\t<option value=\"right\">Right</option>\n\t\t\t\t\t\t</select></td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</td>\n\t\t<td>&nbsp;&nbsp;&nbsp;</td>\n\t\t<td align=\"right\" valign=\"top\">\n\t\t\t<table cellSpacing=\"0\" cellPadding=\"0\" border=\"0\">\n\t\t\t\t<tr>\n\t\t\t\t\t<td><span>Width</span>:</td>\n\t\t\t\t\t<td>&nbsp;<input dojoAttachPoint=\"table_width\" type=\"text\" maxLength=\"4\" size=\"3\"></td>\n\t\t\t\t\t<td>&nbsp;<select dojoAttachPoint=\"table_widthtype\">\n\t\t\t\t\t\t\t<option value=\"percent\" selected>percent</option>\n\t\t\t\t\t\t\t<option value=\"pixels\">pixels</option>\n\t\t\t\t\t\t</select></td>\n\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td><span>Height</span>:</td>\n\t\t\t\t\t<td>&nbsp;<INPUT dojoAttachPoint=\"table_height\" type=\"text\" maxLength=\"4\" size=\"3\"></td>\n\t\t\t\t\t<td>&nbsp;<span>pixels</span></td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td nowrap><span>Cell spacing</span>:</td>\n\t\t\t\t\t<td>&nbsp;<input dojoAttachPoint=\"table_cellspacing\" type=\"text\" maxLength=\"2\" size=\"2\" value=\"1\"></td>\n\t\t\t\t\t<td>&nbsp;</td>\n\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td nowrap><span>Cell padding</span>:</td>\n\t\t\t\t\t<td>&nbsp;<input dojoAttachPoint=\"table_cellpadding\" type=\"text\" maxLength=\"2\" size=\"2\" value=\"1\"></td>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</td>\n\t</tr>\n</table>\n<table cellSpacing=\"0\" cellPadding=\"0\" width=\"100%\" border=\"0\">\n\t<tr>\n\t\t<td nowrap><span>Caption</span>:</td>\n\t\t<td>&nbsp;</td>\n\t\t<td width=\"100%\" nowrap>&nbsp;\n\t\t\t<input dojoAttachPoint=\"table_caption\" type=\"text\" style=\"WIDTH: 90%\"></td>\n\t</tr>\n\t<tr>\n\t\t<td nowrap><span>Summary</span>:</td>\n\t\t<td>&nbsp;</td>\n\t\t<td width=\"100%\" nowrap>&nbsp;\n\t\t\t<input dojoAttachPoint=\"table_summary\" type=\"text\" style=\"WIDTH: 90%\"></td>\n\t</tr>\n</table>\n<table><tr>\n<td><button dojoType='Button' dojoAttachEvent='onClick:ok'>Ok</button></td>\n<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Cancel</button></td>\n</tr></table>\n</div>\n",editableAttributes:["summary","height","cellspacing","cellpadding","border","align"],loadContent:function(){
-var _1=dojo.widget.Editor2Manager.getCurrentInstance();
-_1.saveSelection();
-this.tableNode=dojo.withGlobal(_1.window,"getSelectedElement",dojo.html.selection);
-if(!this.tableNode||this.tableNode.tagName.toLowerCase()!="table"){
-this.tableNode=dojo.withGlobal(_1.window,"getAncestorElement",dojo.html.selection,["table"]);
-}
-var _2={};
-this.extraAttribText="";
-if(this.tableNode){
-this["table_rows"].value=this.tableNode.rows.length;
-this["table_rows"].disabled=true;
-this["table_cols"].value=this.tableNode.rows[0].cells.length;
-this["table_cols"].disabled=true;
-if(this.tableNode.caption){
-this["table_caption"].value=this.tableNode.caption.innerHTML;
-}else{
-this["table_caption"].value="";
-}
-var _3=this.tableNode.style.width||this.tableNode.width;
-if(_3){
-this["table_width"].value=parseInt(_3);
-if(_3.indexOf("%")>-1){
-this["table_widthtype"].value="percent";
-}else{
-this["table_widthtype"].value="pixels";
-}
-}else{
-this["table_width"].value="100";
-}
-var _4=this.tableNode.style.height||this.tableNode.height;
-if(_4){
-this["table_height"].value=parseInt(_3);
-}else{
-this["table_height"].value="";
-}
-var _5=this.tableNode.attributes;
-for(var i=0;i<_5.length;i++){
-if(dojo.lang.find(this.editableAttributes,_5[i].name.toLowerCase())>-1){
-_2[_5[i].name]=_5[i].value;
-}else{
-this.extraAttribText+=_5[i].name+"=\""+_5[i].value+"\" ";
-}
-}
-}else{
-this["table_rows"].value=3;
-this["table_rows"].disabled=false;
-this["table_cols"].value=2;
-this["table_cols"].disabled=false;
-this["table_width"].value=100;
-this["table_widthtype"].value="percent";
-this["table_height"].value="";
-}
-for(var i=0;i<this.editableAttributes.length;++i){
-name=this.editableAttributes[i];
-this["table_"+name].value=(_2[name]==undefined)?"":_2[name];
-if(name=="height"&&_2[name]!=undefined){
-this["table_"+name].value=_2[name];
-}
-}
-return true;
-},ok:function(){
-var _7=dojo.widget.Editor2Manager.getCurrentInstance();
-var _8={};
-_8["rows"]=this["table_rows"].value;
-_8["cols"]=this["table_cols"].value;
-_8["caption"]=this["table_caption"].value;
-_8["tableattrs"]="";
-if(this["table_widthtype"].value=="percent"){
-_8["tableattrs"]+="width=\""+this["table_width"].value+"%\" ";
-}else{
-_8["tableattrs"]+="width=\""+this["table_width"].value+"px\" ";
-}
-for(var i=0;i<this.editableAttributes.length;++i){
-var _a=this.editableAttributes[i];
-var _b=this["table_"+_a].value;
-if(_b.length>0){
-_8["tableattrs"]+=_a+"=\""+_b+"\" ";
-}
-}
-if(!_8["tableattrs"]){
-_8["tableattrs"]="";
-}
-if(dojo.render.html.ie&&!this["table_border"].value){
-_8["tableattrs"]+="class=\"dojoShowIETableBorders\" ";
-}
-var _c="<table "+_8["tableattrs"]+">";
-if(_8["caption"]){
-_c+="<caption>"+_8["caption"]+"</caption>";
-}
-var _d="<tbody>";
-if(this.tableNode){
-var _e=this.tableNode.getElementsByTagName("tbody")[0];
-_d=_e.outerHTML;
-if(!_d){
-var _f=_e.cloneNode(true);
-var _10=_e.ownerDocument.createElement("div");
-_10.appendChild(_f);
-_d=_10.innerHTML;
-}
-dojo.withGlobal(_7.window,"selectElement",dojo.html.selection,[this.tableNode]);
-}else{
-var _11="<tr>";
-for(var i=0;i<+_8.cols;i++){
-_11+="<td></td>";
-}
-_11+="</tr>";
-for(var i=0;i<_8.rows;i++){
-_d+=_11;
-}
-_d+="</tbody>";
-}
-_c+=_d+"</table>";
-_7.restoreSelection();
-_7.execCommand("inserthtml",_c);
-this.cancel();
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/SimpleSignalCommands.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/SimpleSignalCommands.js
deleted file mode 100644
index 8041f83..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/SimpleSignalCommands.js
+++ /dev/null
@@ -1,39 +0,0 @@
-dojo.provide("dojo.widget.Editor2Plugin.SimpleSignalCommands");
-dojo.require("dojo.widget.Editor2");
-dojo.declare("dojo.widget.Editor2Plugin.SimpleSignalCommand",dojo.widget.Editor2Command,function(_1,_2){
-if(dojo.widget.Editor2.prototype[_2]==undefined){
-dojo.widget.Editor2.prototype[_2]=function(){
-};
-}
-},{execute:function(){
-this._editor[this._name]();
-}});
-if(dojo.widget.Editor2Plugin["SimpleSignalCommands"]){
-dojo.widget.Editor2Plugin["_SimpleSignalCommands"]=dojo.widget.Editor2Plugin["SimpleSignalCommands"];
-}
-dojo.widget.Editor2Plugin.SimpleSignalCommands={signals:["save","insertImage"],Handler:function(_3){
-if(_3.toLowerCase()=="save"){
-return new dojo.widget.Editor2ToolbarButton("Save");
-}else{
-if(_3.toLowerCase()=="insertimage"){
-return new dojo.widget.Editor2ToolbarButton("InsertImage");
-}
-}
-},getCommand:function(_4,_5){
-var _6;
-dojo.lang.every(this.signals,function(s){
-if(s.toLowerCase()==_5.toLowerCase()){
-_6=s;
-return false;
-}
-return true;
-});
-if(_6){
-return new dojo.widget.Editor2Plugin.SimpleSignalCommand(_4,_6);
-}
-}};
-if(dojo.widget.Editor2Plugin["_SimpleSignalCommands"]){
-dojo.lang.mixin(dojo.widget.Editor2Plugin.SimpleSignalCommands,dojo.widget.Editor2Plugin["_SimpleSignalCommands"]);
-}
-dojo.widget.Editor2Manager.registerHandler(dojo.widget.Editor2Plugin.SimpleSignalCommands,"getCommand");
-dojo.widget.Editor2ToolbarItemManager.registerHandler(dojo.widget.Editor2Plugin.SimpleSignalCommands.Handler);
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/TableOperation.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/TableOperation.js
deleted file mode 100644
index 4dd2ff2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/TableOperation.js
+++ /dev/null
@@ -1,107 +0,0 @@
-dojo.provide("dojo.widget.Editor2Plugin.TableOperation");
-dojo.require("dojo.widget.Editor2");
-dojo.event.topic.subscribe("dojo.widget.RichText::init",function(_1){
-if(dojo.render.html.ie){
-_1.contentDomPreFilters.push(dojo.widget.Editor2Plugin.TableOperation.showIETableBorder);
-_1.contentDomPostFilters.push(dojo.widget.Editor2Plugin.TableOperation.removeIEFakeClass);
-}
-_1.getCommand("toggletableborder");
-});
-dojo.lang.declare("dojo.widget.Editor2Plugin.deleteTableCommand",dojo.widget.Editor2Command,{execute:function(){
-var _2=dojo.withGlobal(this._editor.window,"getAncestorElement",dojo.html.selection,["table"]);
-if(_2){
-dojo.withGlobal(this._editor.window,"selectElement",dojo.html.selection,[_2]);
-this._editor.execCommand("inserthtml"," ");
-}
-},getState:function(){
-if(this._editor._lastStateTimestamp>this._updateTime||this._state==undefined){
-this._updateTime=this._editor._lastStateTimestamp;
-var _3=dojo.withGlobal(this._editor.window,"hasAncestorElement",dojo.html.selection,["table"]);
-this._state=_3?dojo.widget.Editor2Manager.commandState.Enabled:dojo.widget.Editor2Manager.commandState.Disabled;
-}
-return this._state;
-},getText:function(){
-return "Delete Table";
-}});
-dojo.lang.declare("dojo.widget.Editor2Plugin.toggleTableBorderCommand",dojo.widget.Editor2Command,function(){
-this._showTableBorder=false;
-dojo.event.connect(this._editor,"editorOnLoad",this,"execute");
-},{execute:function(){
-if(this._showTableBorder){
-this._showTableBorder=false;
-if(dojo.render.html.moz){
-this._editor.removeStyleSheet(dojo.uri.moduleUri("dojo.widget","templates/Editor2/showtableborder_gecko.css"));
-}else{
-if(dojo.render.html.ie){
-this._editor.removeStyleSheet(dojo.uri.moduleUri("dojo.widget","templates/Editor2/showtableborder_ie.css"));
-}
-}
-}else{
-this._showTableBorder=true;
-if(dojo.render.html.moz){
-this._editor.addStyleSheet(dojo.uri.moduleUri("dojo.widget","templates/Editor2/showtableborder_gecko.css"));
-}else{
-if(dojo.render.html.ie){
-this._editor.addStyleSheet(dojo.uri.moduleUri("dojo.widget","templates/Editor2/showtableborder_ie.css"));
-}
-}
-}
-},getText:function(){
-return "Toggle Table Border";
-},getState:function(){
-return this._showTableBorder?dojo.widget.Editor2Manager.commandState.Latched:dojo.widget.Editor2Manager.commandState.Enabled;
-}});
-dojo.widget.Editor2Plugin.TableOperation={getCommand:function(_4,_5){
-switch(_5.toLowerCase()){
-case "toggletableborder":
-return new dojo.widget.Editor2Plugin.toggleTableBorderCommand(_4,_5);
-case "inserttable":
-return new dojo.widget.Editor2DialogCommand(_4,"inserttable",{contentFile:"dojo.widget.Editor2Plugin.InsertTableDialog",contentClass:"Editor2InsertTableDialog",title:"Insert/Edit Table",width:"450px",height:"250px"});
-case "deletetable":
-return new dojo.widget.Editor2Plugin.deleteTableCommand(_4,_5);
-}
-},getToolbarItem:function(_6){
-var _6=_6.toLowerCase();
-var _7;
-switch(_6){
-case "inserttable":
-case "toggletableborder":
-_7=new dojo.widget.Editor2ToolbarButton(_6);
-}
-return _7;
-},getContextMenuGroup:function(_8,_9){
-return new dojo.widget.Editor2Plugin.TableContextMenuGroup(_9);
-},showIETableBorder:function(_a){
-var _b=_a.getElementsByTagName("table");
-dojo.lang.forEach(_b,function(t){
-dojo.html.addClass(t,"dojoShowIETableBorders");
-});
-return _a;
-},removeIEFakeClass:function(_d){
-var _e=_d.getElementsByTagName("table");
-dojo.lang.forEach(_e,function(t){
-dojo.html.removeClass(t,"dojoShowIETableBorders");
-});
-return _d;
-}};
-dojo.widget.Editor2Manager.registerHandler(dojo.widget.Editor2Plugin.TableOperation.getCommand);
-dojo.widget.Editor2ToolbarItemManager.registerHandler(dojo.widget.Editor2Plugin.TableOperation.getToolbarItem);
-if(dojo.widget.Editor2Plugin.ContextMenuManager){
-dojo.widget.Editor2Plugin.ContextMenuManager.registerGroup("Table",dojo.widget.Editor2Plugin.TableOperation.getContextMenuGroup);
-dojo.declare("dojo.widget.Editor2Plugin.TableContextMenuGroup",dojo.widget.Editor2Plugin.SimpleContextMenuGroup,{createItems:function(){
-this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem",{caption:"Delete Table",command:"deletetable"}));
-this.items.push(dojo.widget.createWidget("Editor2ContextMenuItem",{caption:"Table Property",command:"inserttable",iconClass:"TB_Button_Icon TB_Button_Table"}));
-},checkVisibility:function(){
-var _10=dojo.widget.Editor2Manager.getCurrentInstance();
-var _11=dojo.withGlobal(_10.window,"hasAncestorElement",dojo.html.selection,["table"]);
-if(dojo.withGlobal(_10.window,"hasAncestorElement",dojo.html.selection,["table"])){
-this.items[0].show();
-this.items[1].show();
-return true;
-}else{
-this.items[0].hide();
-this.items[1].hide();
-return false;
-}
-}});
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/ToolbarDndSupport.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/ToolbarDndSupport.js
deleted file mode 100644
index 0a642b0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/ToolbarDndSupport.js
+++ /dev/null
@@ -1,33 +0,0 @@
-dojo.provide("dojo.widget.Editor2Plugin.ToolbarDndSupport");
-dojo.require("dojo.dnd.*");
-dojo.event.topic.subscribe("dojo.widget.Editor2::preLoadingToolbar",function(_1){
-dojo.dnd.dragManager.nestedTargets=true;
-var p=new dojo.widget.Editor2Plugin.ToolbarDndSupport(_1);
-});
-dojo.declare("dojo.widget.Editor2Plugin.ToolbarDndSupport",null,{lookForClass:"dojoEditorToolbarDnd TB_ToolbarSet TB_Toolbar",initializer:function(_3){
-this.editor=_3;
-dojo.event.connect(this.editor,"toolbarLoaded",this,"setup");
-this.editor.registerLoadedPlugin(this);
-},setup:function(){
-dojo.event.disconnect(this.editor,"toolbarLoaded",this,"setup");
-var _4=this.editor.toolbarWidget;
-dojo.event.connect("before",_4,"destroy",this,"destroy");
-var _5=dojo.html.getElementsByClass(this.lookForClass,_4.domNode,null,dojo.html.classMatchType.ContainsAny);
-if(!_5){
-dojo.debug("dojo.widget.Editor2Plugin.ToolbarDndSupport: No dom node with class in "+this.lookForClass);
-return;
-}
-for(var i=0;i<_5.length;i++){
-var _7=_5[i];
-var _8=_7.getAttribute("dojoETDropTarget");
-if(_8){
-(new dojo.dnd.HtmlDropTarget(_7,[_8+_4.widgetId])).vertical=true;
-}
-var _9=_7.getAttribute("dojoETDragSource");
-if(_9){
-new dojo.dnd.HtmlDragSource(_7,_9+_4.widgetId);
-}
-}
-},destroy:function(){
-this.editor.unregisterLoadedPlugin(this);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/__package__.js
deleted file mode 100644
index d1e918f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Plugin/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.widget.Editor2","dojo.widget.Editor2Toolbar"]});
-dojo.provide("dojo.widget.Editor2Plugin.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Toolbar.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Toolbar.js
deleted file mode 100644
index 8c49829..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Editor2Toolbar.js
+++ /dev/null
@@ -1,483 +0,0 @@
-dojo.provide("dojo.widget.Editor2Toolbar");
-dojo.require("dojo.lang.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.html.display");
-dojo.require("dojo.widget.RichText");
-dojo.require("dojo.widget.PopupContainer");
-dojo.require("dojo.widget.ColorPalette");
-dojo.lang.declare("dojo.widget.HandlerManager",null,function(){
-this._registeredHandlers=[];
-},{registerHandler:function(_1,_2){
-if(arguments.length==2){
-this._registeredHandlers.push(function(){
-return _1[_2].apply(_1,arguments);
-});
-}else{
-this._registeredHandlers.push(_1);
-}
-},removeHandler:function(_3){
-for(var i=0;i<this._registeredHandlers.length;i++){
-if(_3===this._registeredHandlers[i]){
-delete this._registeredHandlers[i];
-return;
-}
-}
-dojo.debug("HandlerManager handler "+_3+" is not registered, can not remove.");
-},destroy:function(){
-for(var i=0;i<this._registeredHandlers.length;i++){
-delete this._registeredHandlers[i];
-}
-}});
-dojo.widget.Editor2ToolbarItemManager=new dojo.widget.HandlerManager;
-dojo.lang.mixin(dojo.widget.Editor2ToolbarItemManager,{getToolbarItem:function(_6){
-var _7;
-_6=_6.toLowerCase();
-for(var i=0;i<this._registeredHandlers.length;i++){
-_7=this._registeredHandlers[i](_6);
-if(_7){
-return _7;
-}
-}
-switch(_6){
-case "bold":
-case "copy":
-case "cut":
-case "delete":
-case "indent":
-case "inserthorizontalrule":
-case "insertorderedlist":
-case "insertunorderedlist":
-case "italic":
-case "justifycenter":
-case "justifyfull":
-case "justifyleft":
-case "justifyright":
-case "outdent":
-case "paste":
-case "redo":
-case "removeformat":
-case "selectall":
-case "strikethrough":
-case "subscript":
-case "superscript":
-case "underline":
-case "undo":
-case "unlink":
-case "createlink":
-case "insertimage":
-case "htmltoggle":
-_7=new dojo.widget.Editor2ToolbarButton(_6);
-break;
-case "forecolor":
-case "hilitecolor":
-_7=new dojo.widget.Editor2ToolbarColorPaletteButton(_6);
-break;
-case "plainformatblock":
-_7=new dojo.widget.Editor2ToolbarFormatBlockPlainSelect("formatblock");
-break;
-case "formatblock":
-_7=new dojo.widget.Editor2ToolbarFormatBlockSelect("formatblock");
-break;
-case "fontsize":
-_7=new dojo.widget.Editor2ToolbarFontSizeSelect("fontsize");
-break;
-case "fontname":
-_7=new dojo.widget.Editor2ToolbarFontNameSelect("fontname");
-break;
-case "inserttable":
-case "insertcell":
-case "insertcol":
-case "insertrow":
-case "deletecells":
-case "deletecols":
-case "deleterows":
-case "mergecells":
-case "splitcell":
-dojo.debug(_6+" is implemented in dojo.widget.Editor2Plugin.TableOperation, please require it first.");
-break;
-case "inserthtml":
-case "blockdirltr":
-case "blockdirrtl":
-case "dirltr":
-case "dirrtl":
-case "inlinedirltr":
-case "inlinedirrtl":
-dojo.debug("Not yet implemented toolbar item: "+_6);
-break;
-default:
-dojo.debug("dojo.widget.Editor2ToolbarItemManager.getToolbarItem: Unknown toolbar item: "+_6);
-}
-return _7;
-}});
-dojo.addOnUnload(dojo.widget.Editor2ToolbarItemManager,"destroy");
-dojo.declare("dojo.widget.Editor2ToolbarButton",null,function(_9){
-this._name=_9;
-},{create:function(_a,_b,_c){
-this._domNode=_a;
-var _d=_b.parent.getCommand(this._name);
-if(_d){
-this._domNode.title=_d.getText();
-}
-this.disableSelection(this._domNode);
-this._parentToolbar=_b;
-dojo.event.connect(this._domNode,"onclick",this,"onClick");
-if(!_c){
-dojo.event.connect(this._domNode,"onmouseover",this,"onMouseOver");
-dojo.event.connect(this._domNode,"onmouseout",this,"onMouseOut");
-}
-},disableSelection:function(_e){
-dojo.html.disableSelection(_e);
-var _f=_e.all||_e.getElementsByTagName("*");
-for(var x=0;x<_f.length;x++){
-dojo.html.disableSelection(_f[x]);
-}
-},onMouseOver:function(){
-var _11=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_11){
-var _12=_11.getCommand(this._name);
-if(_12&&_12.getState()!=dojo.widget.Editor2Manager.commandState.Disabled){
-this.highlightToolbarItem();
-}
-}
-},onMouseOut:function(){
-this.unhighlightToolbarItem();
-},destroy:function(){
-this._domNode=null;
-this._parentToolbar=null;
-},onClick:function(e){
-if(this._domNode&&!this._domNode.disabled&&this._parentToolbar.checkAvailability()){
-e.preventDefault();
-e.stopPropagation();
-var _14=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_14){
-var _15=_14.getCommand(this._name);
-if(_15){
-_15.execute();
-}
-}
-}
-},refreshState:function(){
-var _16=dojo.widget.Editor2Manager.getCurrentInstance();
-var em=dojo.widget.Editor2Manager;
-if(_16){
-var _18=_16.getCommand(this._name);
-if(_18){
-var _19=_18.getState();
-if(_19!=this._lastState){
-switch(_19){
-case em.commandState.Latched:
-this.latchToolbarItem();
-break;
-case em.commandState.Enabled:
-this.enableToolbarItem();
-break;
-case em.commandState.Disabled:
-default:
-this.disableToolbarItem();
-}
-this._lastState=_19;
-}
-}
-}
-return em.commandState.Enabled;
-},latchToolbarItem:function(){
-this._domNode.disabled=false;
-this.removeToolbarItemStyle(this._domNode);
-dojo.html.addClass(this._domNode,this._parentToolbar.ToolbarLatchedItemStyle);
-},enableToolbarItem:function(){
-this._domNode.disabled=false;
-this.removeToolbarItemStyle(this._domNode);
-dojo.html.addClass(this._domNode,this._parentToolbar.ToolbarEnabledItemStyle);
-},disableToolbarItem:function(){
-this._domNode.disabled=true;
-this.removeToolbarItemStyle(this._domNode);
-dojo.html.addClass(this._domNode,this._parentToolbar.ToolbarDisabledItemStyle);
-},highlightToolbarItem:function(){
-dojo.html.addClass(this._domNode,this._parentToolbar.ToolbarHighlightedItemStyle);
-},unhighlightToolbarItem:function(){
-dojo.html.removeClass(this._domNode,this._parentToolbar.ToolbarHighlightedItemStyle);
-},removeToolbarItemStyle:function(){
-dojo.html.removeClass(this._domNode,this._parentToolbar.ToolbarEnabledItemStyle);
-dojo.html.removeClass(this._domNode,this._parentToolbar.ToolbarLatchedItemStyle);
-dojo.html.removeClass(this._domNode,this._parentToolbar.ToolbarDisabledItemStyle);
-this.unhighlightToolbarItem();
-}});
-dojo.declare("dojo.widget.Editor2ToolbarDropDownButton",dojo.widget.Editor2ToolbarButton,{onClick:function(){
-if(this._domNode&&!this._domNode.disabled&&this._parentToolbar.checkAvailability()){
-if(!this._dropdown){
-this._dropdown=dojo.widget.createWidget("PopupContainer",{});
-this._domNode.appendChild(this._dropdown.domNode);
-}
-if(this._dropdown.isShowingNow){
-this._dropdown.close();
-}else{
-this.onDropDownShown();
-this._dropdown.open(this._domNode,null,this._domNode);
-}
-}
-},destroy:function(){
-this.onDropDownDestroy();
-if(this._dropdown){
-this._dropdown.destroy();
-}
-dojo.widget.Editor2ToolbarDropDownButton.superclass.destroy.call(this);
-},onDropDownShown:function(){
-},onDropDownDestroy:function(){
-}});
-dojo.declare("dojo.widget.Editor2ToolbarColorPaletteButton",dojo.widget.Editor2ToolbarDropDownButton,{onDropDownShown:function(){
-if(!this._colorpalette){
-this._colorpalette=dojo.widget.createWidget("ColorPalette",{});
-this._dropdown.addChild(this._colorpalette);
-this.disableSelection(this._dropdown.domNode);
-this.disableSelection(this._colorpalette.domNode);
-dojo.event.connect(this._colorpalette,"onColorSelect",this,"setColor");
-dojo.event.connect(this._dropdown,"open",this,"latchToolbarItem");
-dojo.event.connect(this._dropdown,"close",this,"enableToolbarItem");
-}
-},setColor:function(_1a){
-this._dropdown.close();
-var _1b=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_1b){
-var _1c=_1b.getCommand(this._name);
-if(_1c){
-_1c.execute(_1a);
-}
-}
-}});
-dojo.declare("dojo.widget.Editor2ToolbarFormatBlockPlainSelect",dojo.widget.Editor2ToolbarButton,{create:function(_1d,_1e){
-this._domNode=_1d;
-this._parentToolbar=_1e;
-this._domNode=_1d;
-this.disableSelection(this._domNode);
-dojo.event.connect(this._domNode,"onchange",this,"onChange");
-},destroy:function(){
-this._domNode=null;
-},onChange:function(){
-if(this._parentToolbar.checkAvailability()){
-var sv=this._domNode.value.toLowerCase();
-var _20=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_20){
-var _21=_20.getCommand(this._name);
-if(_21){
-_21.execute(sv);
-}
-}
-}
-},refreshState:function(){
-if(this._domNode){
-dojo.widget.Editor2ToolbarFormatBlockPlainSelect.superclass.refreshState.call(this);
-var _22=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_22){
-var _23=_22.getCommand(this._name);
-if(_23){
-var _24=_23.getValue();
-if(!_24){
-_24="";
-}
-dojo.lang.forEach(this._domNode.options,function(_25){
-if(_25.value.toLowerCase()==_24.toLowerCase()){
-_25.selected=true;
-}
-});
-}
-}
-}
-}});
-dojo.declare("dojo.widget.Editor2ToolbarComboItem",dojo.widget.Editor2ToolbarDropDownButton,{href:null,create:function(_26,_27){
-dojo.widget.Editor2ToolbarComboItem.superclass.create.apply(this,arguments);
-if(!this._contentPane){
-dojo.require("dojo.widget.ContentPane");
-this._contentPane=dojo.widget.createWidget("ContentPane",{preload:"true"});
-this._contentPane.addOnLoad(this,"setup");
-this._contentPane.setUrl(this.href);
-}
-},onMouseOver:function(e){
-if(this._lastState!=dojo.widget.Editor2Manager.commandState.Disabled){
-dojo.html.addClass(e.currentTarget,this._parentToolbar.ToolbarHighlightedSelectStyle);
-}
-},onMouseOut:function(e){
-dojo.html.removeClass(e.currentTarget,this._parentToolbar.ToolbarHighlightedSelectStyle);
-},onDropDownShown:function(){
-if(!this._dropdown.__addedContentPage){
-this._dropdown.addChild(this._contentPane);
-this._dropdown.__addedContentPage=true;
-}
-},setup:function(){
-},onChange:function(e){
-if(this._parentToolbar.checkAvailability()){
-var _2b=e.currentTarget.getAttribute("dropDownItemName");
-var _2c=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_2c){
-var _2d=_2c.getCommand(this._name);
-if(_2d){
-_2d.execute(_2b);
-}
-}
-}
-this._dropdown.close();
-},onMouseOverItem:function(e){
-dojo.html.addClass(e.currentTarget,this._parentToolbar.ToolbarHighlightedSelectItemStyle);
-},onMouseOutItem:function(e){
-dojo.html.removeClass(e.currentTarget,this._parentToolbar.ToolbarHighlightedSelectItemStyle);
-}});
-dojo.declare("dojo.widget.Editor2ToolbarFormatBlockSelect",dojo.widget.Editor2ToolbarComboItem,{href:dojo.uri.moduleUri("dojo.widget","templates/Editor2/EditorToolbar_FormatBlock.html"),setup:function(){
-dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.setup.call(this);
-var _30=this._contentPane.domNode.all||this._contentPane.domNode.getElementsByTagName("*");
-this._blockNames={};
-this._blockDisplayNames={};
-for(var x=0;x<_30.length;x++){
-var _32=_30[x];
-dojo.html.disableSelection(_32);
-var _33=_32.getAttribute("dropDownItemName");
-if(_33){
-this._blockNames[_33]=_32;
-var _34=_32.getElementsByTagName(_33);
-this._blockDisplayNames[_33]=_34[_34.length-1].innerHTML;
-}
-}
-for(var _33 in this._blockNames){
-dojo.event.connect(this._blockNames[_33],"onclick",this,"onChange");
-dojo.event.connect(this._blockNames[_33],"onmouseover",this,"onMouseOverItem");
-dojo.event.connect(this._blockNames[_33],"onmouseout",this,"onMouseOutItem");
-}
-},onDropDownDestroy:function(){
-if(this._blockNames){
-for(var _35 in this._blockNames){
-delete this._blockNames[_35];
-delete this._blockDisplayNames[_35];
-}
-}
-},refreshState:function(){
-dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.refreshState.call(this);
-if(this._lastState!=dojo.widget.Editor2Manager.commandState.Disabled){
-var _36=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_36){
-var _37=_36.getCommand(this._name);
-if(_37){
-var _38=_37.getValue();
-if(_38==this._lastSelectedFormat&&this._blockDisplayNames){
-return this._lastState;
-}
-this._lastSelectedFormat=_38;
-var _39=this._domNode.getElementsByTagName("label")[0];
-var _3a=false;
-if(this._blockDisplayNames){
-for(var _3b in this._blockDisplayNames){
-if(_3b==_38){
-_39.innerHTML=this._blockDisplayNames[_3b];
-_3a=true;
-break;
-}
-}
-if(!_3a){
-_39.innerHTML="&nbsp;";
-}
-}
-}
-}
-}
-return this._lastState;
-}});
-dojo.declare("dojo.widget.Editor2ToolbarFontSizeSelect",dojo.widget.Editor2ToolbarComboItem,{href:dojo.uri.moduleUri("dojo.widget","templates/Editor2/EditorToolbar_FontSize.html"),setup:function(){
-dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.setup.call(this);
-var _3c=this._contentPane.domNode.all||this._contentPane.domNode.getElementsByTagName("*");
-this._fontsizes={};
-this._fontSizeDisplayNames={};
-for(var x=0;x<_3c.length;x++){
-var _3e=_3c[x];
-dojo.html.disableSelection(_3e);
-var _3f=_3e.getAttribute("dropDownItemName");
-if(_3f){
-this._fontsizes[_3f]=_3e;
-this._fontSizeDisplayNames[_3f]=_3e.getElementsByTagName("font")[0].innerHTML;
-}
-}
-for(var _3f in this._fontsizes){
-dojo.event.connect(this._fontsizes[_3f],"onclick",this,"onChange");
-dojo.event.connect(this._fontsizes[_3f],"onmouseover",this,"onMouseOverItem");
-dojo.event.connect(this._fontsizes[_3f],"onmouseout",this,"onMouseOutItem");
-}
-},onDropDownDestroy:function(){
-if(this._fontsizes){
-for(var _40 in this._fontsizes){
-delete this._fontsizes[_40];
-delete this._fontSizeDisplayNames[_40];
-}
-}
-},refreshState:function(){
-dojo.widget.Editor2ToolbarFormatBlockSelect.superclass.refreshState.call(this);
-if(this._lastState!=dojo.widget.Editor2Manager.commandState.Disabled){
-var _41=dojo.widget.Editor2Manager.getCurrentInstance();
-if(_41){
-var _42=_41.getCommand(this._name);
-if(_42){
-var _43=_42.getValue();
-if(_43==this._lastSelectedSize&&this._fontSizeDisplayNames){
-return this._lastState;
-}
-this._lastSelectedSize=_43;
-var _44=this._domNode.getElementsByTagName("label")[0];
-var _45=false;
-if(this._fontSizeDisplayNames){
-for(var _46 in this._fontSizeDisplayNames){
-if(_46==_43){
-_44.innerHTML=this._fontSizeDisplayNames[_46];
-_45=true;
-break;
-}
-}
-if(!_45){
-_44.innerHTML="&nbsp;";
-}
-}
-}
-}
-}
-return this._lastState;
-}});
-dojo.declare("dojo.widget.Editor2ToolbarFontNameSelect",dojo.widget.Editor2ToolbarFontSizeSelect,{href:dojo.uri.moduleUri("dojo.widget","templates/Editor2/EditorToolbar_FontName.html")});
-dojo.widget.defineWidget("dojo.widget.Editor2Toolbar",dojo.widget.HtmlWidget,function(){
-dojo.event.connect(this,"fillInTemplate",dojo.lang.hitch(this,function(){
-if(dojo.render.html.ie){
-this.domNode.style.zoom=1;
-}
-}));
-},{templateString:"<div dojoAttachPoint=\"domNode\" class=\"EditorToolbarDomNode\" unselectable=\"on\">\n\t<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\">\n\t\t<!--\n\t\t\tour toolbar should look something like:\n\n\t\t\t+=======+=======+=======+=============================================+\n\t\t\t| w   w | style | copy  | bo | it | un | le | ce | ri |\n\t\t\t| w w w | style |=======|==============|==============|\n\t\t\t|  w w  | style | paste |  undo | redo | change style |\n\t\t\t+=======+=======+=======+=============================================+\n\t\t-->\n\t\t<tbody>\n\t\t\t<tr valign=\"top\">\n\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t<div class=\"bigIcon\" dojoAttachPoint=\"wikiWordButton\"\n\t\t\t\t\t\tdojoOnClick=\"wikiWordClick; buttonClick;\">\n\t\t\t\t\t\t<span style=\"font-size: 30px; margin-left: 5px;\">\n\t\t\t\t\t\t\tW\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t<div class=\"bigIcon\" dojoAttachPoint=\"styleDropdownButton\"\n\t\t\t\t\t\tdojoOnClick=\"styleDropdownClick; buttonClick;\">\n\t\t\t\t\t\t<span unselectable=\"on\"\n\t\t\t\t\t\t\tstyle=\"font-size: 30px; margin-left: 5px;\">\n\t\t\t\t\t\t\tS\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"StyleDropdownContainer\" style=\"display: none;\"\n\t\t\t\t\t\tdojoAttachPoint=\"styleDropdownContainer\">\n\t\t\t\t\t\t<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"\n\t\t\t\t\t\t\theight=\"100%\" width=\"100%\">\n\t\t\t\t\t\t\t<tr valign=\"top\">\n\t\t\t\t\t\t\t\t<td rowspan=\"2\">\n\t\t\t\t\t\t\t\t\t<div style=\"height: 245px; overflow: auto;\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"normalTextClick\">normal</div>\n\t\t\t\t\t\t\t\t\t\t<h1 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h1TextClick\">Heading 1</h1>\n\t\t\t\t\t\t\t\t\t\t<h2 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h2TextClick\">Heading 2</h2>\n\t\t\t\t\t\t\t\t\t\t<h3 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h3TextClick\">Heading 3</h3>\n\t\t\t\t\t\t\t\t\t\t<h4 class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"h4TextClick\">Heading 4</h4>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"blahTextClick\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"blahTextClick\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\"\n\t\t\t\t\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\t\t\t\t\tdojoOnClick=\"blahTextClick\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"headingContainer\">blah</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<!--\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifyleft\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifycenter\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifyright\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"iconContainer\" dojoOnClick=\"buttonClick;\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon justifyfull\" \n\t\t\t\t\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t-->\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr valign=\"top\">\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\tthud\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<!-- copy -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"copyButton\"\n\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\tdojoOnClick=\"copyClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon copy\" \n\t\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\t\tstyle=\"float: left;\">&nbsp;</span> copy\n\t\t\t\t\t</span>\n\t\t\t\t\t<!-- \"droppable\" options -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"boldButton\"\n\t\t\t\t\t\tunselectable=\"on\"\n\t\t\t\t\t\tdojoOnClick=\"boldClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon bold\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"italicButton\"\n\t\t\t\t\t\tdojoOnClick=\"italicClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon italic\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"underlineButton\"\n\t\t\t\t\t\tdojoOnClick=\"underlineClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon underline\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"leftButton\"\n\t\t\t\t\t\tdojoOnClick=\"leftClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon justifyleft\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"fullButton\"\n\t\t\t\t\t\tdojoOnClick=\"fullClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon justifyfull\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"rightButton\"\n\t\t\t\t\t\tdojoOnClick=\"rightClick; buttonClick;\">\n\t\t\t\t\t\t<span class=\"icon justifyright\" unselectable=\"on\">&nbsp;</span>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>\n\t\t\t\t\t<!-- paste -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"pasteButton\"\n\t\t\t\t\t\tdojoOnClick=\"pasteClick; buttonClick;\" unselectable=\"on\">\n\t\t\t\t\t\t<span class=\"icon paste\" style=\"float: left;\" unselectable=\"on\">&nbsp;</span> paste\n\t\t\t\t\t</span>\n\t\t\t\t\t<!-- \"droppable\" options -->\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"undoButton\"\n\t\t\t\t\t\tdojoOnClick=\"undoClick; buttonClick;\" unselectable=\"on\">\n\t\t\t\t\t\t<span class=\"icon undo\" style=\"float: left;\" unselectable=\"on\">&nbsp;</span> undo\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"iconContainer\" dojoAttachPoint=\"redoButton\"\n\t\t\t\t\t\tdojoOnClick=\"redoClick; buttonClick;\" unselectable=\"on\">\n\t\t\t\t\t\t<span class=\"icon redo\" style=\"float: left;\" unselectable=\"on\">&nbsp;</span> redo\n\t\t\t\t\t</span>\n\t\t\t\t</td>\t\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n",templateCssString:".StyleDropdownContainer {\n\tposition: absolute;\n\tz-index: 1000;\n\toverflow: auto;\n\tcursor: default;\n\twidth: 250px;\n\theight: 250px;\n\tbackground-color: white;\n\tborder: 1px solid black;\n}\n\n.ColorDropdownContainer {\n\tposition: absolute;\n\tz-index: 1000;\n\toverflow: auto;\n\tcursor: default;\n\twidth: 250px;\n\theight: 150px;\n\tbackground-color: white;\n\tborder: 1px solid black;\n}\n\n.EditorToolbarDomNode {\n\tbackground-image: url(buttons/bg-fade.png);\n\tbackground-repeat: repeat-x;\n\tbackground-position: 0px -50px;\n}\n\n.EditorToolbarSmallBg {\n\tbackground-image: url(images/toolbar-bg.gif);\n\tbackground-repeat: repeat-x;\n\tbackground-position: 0px 0px;\n}\n\n/*\nbody {\n\tbackground:url(images/blank.gif) fixed;\n}*/\n\n.IEFixedToolbar {\n\tposition:absolute;\n\t/* top:0; */\n\ttop: expression(eval((document.documentElement||document.body).scrollTop));\n}\n\ndiv.bigIcon {\n\twidth: 40px;\n\theight: 40px; \n\t/* background-color: white; */\n\t/* border: 1px solid #a6a7a3; */\n\tfont-family: Verdana, Trebuchet, Tahoma, Arial;\n}\n\n.iconContainer {\n\tfont-family: Verdana, Trebuchet, Tahoma, Arial;\n\tfont-size: 13px;\n\tfloat: left;\n\theight: 18px;\n\tdisplay: block;\n\t/* background-color: white; */\n\tcursor: pointer;\n\tpadding: 1px 4px 1px 1px; /* almost the same as a transparent border */\n\tborder: 0px;\n}\n\n.dojoE2TBIcon {\n\tdisplay: block;\n\ttext-align: center;\n\tmin-width: 18px;\n\twidth: 18px;\n\theight: 18px;\n\t/* background-color: #a6a7a3; */\n\tbackground-repeat: no-repeat;\n\tbackground-image: url(buttons/aggregate.gif);\n}\n\n\n.dojoE2TBIcon[class~=dojoE2TBIcon] {\n}\n\n.ToolbarButtonLatched {\n    border: #316ac5 1px solid; !important;\n    padding: 0px 3px 0px 0px; !important; /* make room for border */\n    background-color: #c1d2ee;\n}\n\n.ToolbarButtonHighlighted {\n    border: #316ac5 1px solid; !important;\n    padding: 0px 3px 0px 0px; !important; /* make room for border */\n    background-color: #dff1ff;\n}\n\n.ToolbarButtonDisabled{\n    filter: gray() alpha(opacity=30); /* IE */\n    opacity: 0.30; /* Safari, Opera and Mozilla */\n}\n\n.headingContainer {\n\twidth: 150px;\n\theight: 30px;\n\tmargin: 0px;\n\t/* padding-left: 5px; */\n\toverflow: hidden;\n\tline-height: 25px;\n\tborder-bottom: 1px solid black;\n\tborder-top: 1px solid white;\n}\n\n.EditorToolbarDomNode select {\n\tfont-size: 14px;\n}\n \n.dojoE2TBIcon_Sep { width: 5px; min-width: 5px; max-width: 5px; background-position: 0px 0px}\n.dojoE2TBIcon_Backcolor { background-position: -18px 0px}\n.dojoE2TBIcon_Bold { background-position: -36px 0px}\n.dojoE2TBIcon_Cancel { background-position: -54px 0px}\n.dojoE2TBIcon_Copy { background-position: -72px 0px}\n.dojoE2TBIcon_Link { background-position: -90px 0px}\n.dojoE2TBIcon_Cut { background-position: -108px 0px}\n.dojoE2TBIcon_Delete { background-position: -126px 0px}\n.dojoE2TBIcon_TextColor { background-position: -144px 0px}\n.dojoE2TBIcon_BackgroundColor { background-position: -162px 0px}\n.dojoE2TBIcon_Indent { background-position: -180px 0px}\n.dojoE2TBIcon_HorizontalLine { background-position: -198px 0px}\n.dojoE2TBIcon_Image { background-position: -216px 0px}\n.dojoE2TBIcon_NumberedList { background-position: -234px 0px}\n.dojoE2TBIcon_Table { background-position: -252px 0px}\n.dojoE2TBIcon_BulletedList { background-position: -270px 0px}\n.dojoE2TBIcon_Italic { background-position: -288px 0px}\n.dojoE2TBIcon_CenterJustify { background-position: -306px 0px}\n.dojoE2TBIcon_BlockJustify { background-position: -324px 0px}\n.dojoE2TBIcon_LeftJustify { background-position: -342px 0px}\n.dojoE2TBIcon_RightJustify { background-position: -360px 0px}\n.dojoE2TBIcon_left_to_right { background-position: -378px 0px}\n.dojoE2TBIcon_list_bullet_indent { background-position: -396px 0px}\n.dojoE2TBIcon_list_bullet_outdent { background-position: -414px 0px}\n.dojoE2TBIcon_list_num_indent { background-position: -432px 0px}\n.dojoE2TBIcon_list_num_outdent { background-position: -450px 0px}\n.dojoE2TBIcon_Outdent { background-position: -468px 0px}\n.dojoE2TBIcon_Paste { background-position: -486px 0px}\n.dojoE2TBIcon_Redo { background-position: -504px 0px}\ndojoE2TBIcon_RemoveFormat { background-position: -522px 0px}\n.dojoE2TBIcon_right_to_left { background-position: -540px 0px}\n.dojoE2TBIcon_Save { background-position: -558px 0px}\n.dojoE2TBIcon_Space { background-position: -576px 0px}\n.dojoE2TBIcon_StrikeThrough { background-position: -594px 0px}\n.dojoE2TBIcon_Subscript { background-position: -612px 0px}\n.dojoE2TBIcon_Superscript { background-position: -630px 0px}\n.dojoE2TBIcon_Underline { background-position: -648px 0px}\n.dojoE2TBIcon_Undo { background-position: -666px 0px}\n.dojoE2TBIcon_WikiWord { background-position: -684px 0px}\n\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/EditorToolbar.css"),ToolbarLatchedItemStyle:"ToolbarButtonLatched",ToolbarEnabledItemStyle:"ToolbarButtonEnabled",ToolbarDisabledItemStyle:"ToolbarButtonDisabled",ToolbarHighlightedItemStyle:"ToolbarButtonHighlighted",ToolbarHighlightedSelectStyle:"ToolbarSelectHighlighted",ToolbarHighlightedSelectItemStyle:"ToolbarSelectHighlightedItem",postCreate:function(){
-var _47=dojo.html.getElementsByClass("dojoEditorToolbarItem",this.domNode);
-this.items={};
-for(var x=0;x<_47.length;x++){
-var _49=_47[x];
-var _4a=_49.getAttribute("dojoETItemName");
-if(_4a){
-var _4b=dojo.widget.Editor2ToolbarItemManager.getToolbarItem(_4a);
-if(_4b){
-_4b.create(_49,this);
-this.items[_4a.toLowerCase()]=_4b;
-}else{
-_49.style.display="none";
-}
-}
-}
-},update:function(){
-for(var cmd in this.items){
-this.items[cmd].refreshState();
-}
-},shareGroup:"",checkAvailability:function(){
-if(!this.shareGroup){
-this.parent.focus();
-return true;
-}
-var _4d=dojo.widget.Editor2Manager.getCurrentInstance();
-if(this.shareGroup==_4d.toolbarGroup){
-return true;
-}
-return false;
-},destroy:function(){
-for(var it in this.items){
-this.items[it].destroy();
-delete this.items[it];
-}
-dojo.widget.Editor2Toolbar.superclass.destroy.call(this);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/FilteringTable.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/FilteringTable.js
deleted file mode 100644
index 787c0ac..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/FilteringTable.js
+++ /dev/null
@@ -1,697 +0,0 @@
-dojo.provide("dojo.widget.FilteringTable");
-dojo.require("dojo.date.format");
-dojo.require("dojo.math");
-dojo.require("dojo.collections.Store");
-dojo.require("dojo.html.*");
-dojo.require("dojo.html.util");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.widget.defineWidget("dojo.widget.FilteringTable",dojo.widget.HtmlWidget,function(){
-this.store=new dojo.collections.Store();
-this.valueField="Id";
-this.multiple=false;
-this.maxSelect=0;
-this.maxSortable=1;
-this.minRows=0;
-this.defaultDateFormat="%D";
-this.isInitialized=false;
-this.alternateRows=false;
-this.columns=[];
-this.sortInformation=[{index:0,direction:0}];
-this.headClass="";
-this.tbodyClass="";
-this.headerClass="";
-this.headerUpClass="selectedUp";
-this.headerDownClass="selectedDown";
-this.rowClass="";
-this.rowAlternateClass="alt";
-this.rowSelectedClass="selected";
-this.columnSelected="sorted-column";
-},{isContainer:false,templatePath:null,templateCssPath:null,getTypeFromString:function(s){
-var _2=s.split("."),i=0,_4=dj_global;
-do{
-_4=_4[_2[i++]];
-}while(i<_2.length&&_4);
-return (_4!=dj_global)?_4:null;
-},getByRow:function(_5){
-return this.store.getByKey(dojo.html.getAttribute(_5,"value"));
-},getDataByRow:function(_6){
-return this.store.getDataByKey(dojo.html.getAttribute(_6,"value"));
-},getRow:function(_7){
-var _8=this.domNode.tBodies[0].rows;
-for(var i=0;i<_8.length;i++){
-if(this.store.getDataByKey(dojo.html.getAttribute(_8[i],"value"))==_7){
-return _8[i];
-}
-}
-return null;
-},getColumnIndex:function(_a){
-for(var i=0;i<this.columns.length;i++){
-if(this.columns[i].getField()==_a){
-return i;
-}
-}
-return -1;
-},getSelectedData:function(){
-var _c=this.store.get();
-var a=[];
-for(var i=0;i<_c.length;i++){
-if(_c[i].isSelected){
-a.push(_c[i].src);
-}
-}
-if(this.multiple){
-return a;
-}else{
-return a[0];
-}
-},isSelected:function(_f){
-var _10=this.store.get();
-for(var i=0;i<_10.length;i++){
-if(_10[i].src==_f){
-return true;
-}
-}
-return false;
-},isValueSelected:function(val){
-var v=this.store.getByKey(val);
-if(v){
-return v.isSelected;
-}
-return false;
-},isIndexSelected:function(idx){
-var v=this.store.getByIndex(idx);
-if(v){
-return v.isSelected;
-}
-return false;
-},isRowSelected:function(row){
-var v=this.getByRow(row);
-if(v){
-return v.isSelected;
-}
-return false;
-},reset:function(){
-this.store.clearData();
-this.columns=[];
-this.sortInformation=[{index:0,direction:0}];
-this.resetSelections();
-this.isInitialized=false;
-this.onReset();
-},resetSelections:function(){
-this.store.forEach(function(_18){
-_18.isSelected=false;
-});
-},onReset:function(){
-},select:function(obj){
-var _1a=this.store.get();
-for(var i=0;i<_1a.length;i++){
-if(_1a[i].src==obj){
-_1a[i].isSelected=true;
-break;
-}
-}
-this.onDataSelect(obj);
-},selectByValue:function(val){
-this.select(this.store.getDataByKey(val));
-},selectByIndex:function(idx){
-this.select(this.store.getDataByIndex(idx));
-},selectByRow:function(row){
-this.select(this.getDataByRow(row));
-},selectAll:function(){
-this.store.forEach(function(_1f){
-_1f.isSelected=true;
-});
-},onDataSelect:function(obj){
-},toggleSelection:function(obj){
-var _22=this.store.get();
-for(var i=0;i<_22.length;i++){
-if(_22[i].src==obj){
-_22[i].isSelected=!_22[i].isSelected;
-break;
-}
-}
-this.onDataToggle(obj);
-},toggleSelectionByValue:function(val){
-this.toggleSelection(this.store.getDataByKey(val));
-},toggleSelectionByIndex:function(idx){
-this.toggleSelection(this.store.getDataByIndex(idx));
-},toggleSelectionByRow:function(row){
-this.toggleSelection(this.getDataByRow(row));
-},toggleAll:function(){
-this.store.forEach(function(_27){
-_27.isSelected=!_27.isSelected;
-});
-},onDataToggle:function(obj){
-},_meta:{field:null,format:null,filterer:null,noSort:false,sortType:"String",dataType:String,sortFunction:null,filterFunction:null,label:null,align:"left",valign:"middle",getField:function(){
-return this.field||this.label;
-},getType:function(){
-return this.dataType;
-}},createMetaData:function(obj){
-for(var p in this._meta){
-if(!obj[p]){
-obj[p]=this._meta[p];
-}
-}
-if(!obj.label){
-obj.label=obj.field;
-}
-if(!obj.filterFunction){
-obj.filterFunction=this._defaultFilter;
-}
-return obj;
-},parseMetadata:function(_2b){
-this.columns=[];
-this.sortInformation=[];
-var row=_2b.getElementsByTagName("tr")[0];
-var _2d=row.getElementsByTagName("td");
-if(_2d.length==0){
-_2d=row.getElementsByTagName("th");
-}
-for(var i=0;i<_2d.length;i++){
-var o=this.createMetaData({});
-if(dojo.html.hasAttribute(_2d[i],"align")){
-o.align=dojo.html.getAttribute(_2d[i],"align");
-}
-if(dojo.html.hasAttribute(_2d[i],"valign")){
-o.valign=dojo.html.getAttribute(_2d[i],"valign");
-}
-if(dojo.html.hasAttribute(_2d[i],"nosort")){
-o.noSort=(dojo.html.getAttribute(_2d[i],"nosort")=="true");
-}
-if(dojo.html.hasAttribute(_2d[i],"sortusing")){
-var _30=dojo.html.getAttribute(_2d[i],"sortusing");
-var f=this.getTypeFromString(_30);
-if(f!=null&&f!=window&&typeof (f)=="function"){
-o.sortFunction=f;
-}
-}
-o.label=dojo.html.renderedTextContent(_2d[i]);
-if(dojo.html.hasAttribute(_2d[i],"field")){
-o.field=dojo.html.getAttribute(_2d[i],"field");
-}else{
-if(o.label.length>0){
-o.field=o.label;
-}else{
-o.field="field"+i;
-}
-}
-if(dojo.html.hasAttribute(_2d[i],"format")){
-o.format=dojo.html.getAttribute(_2d[i],"format");
-}
-if(dojo.html.hasAttribute(_2d[i],"dataType")){
-var _32=dojo.html.getAttribute(_2d[i],"dataType");
-if(_32.toLowerCase()=="html"||_32.toLowerCase()=="markup"){
-o.sortType="__markup__";
-}else{
-var _33=this.getTypeFromString(_32);
-if(_33){
-o.sortType=_32;
-o.dataType=_33;
-}
-}
-}
-if(dojo.html.hasAttribute(_2d[i],"filterusing")){
-var _30=dojo.html.getAttribute(_2d[i],"filterusing");
-var f=this.getTypeFromString(_30);
-if(f!=null&&f!=window&&typeof (f)=="function"){
-o.filterFunction=f;
-}
-}
-this.columns.push(o);
-if(dojo.html.hasAttribute(_2d[i],"sort")){
-var _34={index:i,direction:0};
-var dir=dojo.html.getAttribute(_2d[i],"sort");
-if(!isNaN(parseInt(dir))){
-dir=parseInt(dir);
-_34.direction=(dir!=0)?1:0;
-}else{
-_34.direction=(dir.toLowerCase()=="desc")?1:0;
-}
-this.sortInformation.push(_34);
-}
-}
-if(this.sortInformation.length==0){
-this.sortInformation.push({index:0,direction:0});
-}else{
-if(this.sortInformation.length>this.maxSortable){
-this.sortInformation.length=this.maxSortable;
-}
-}
-},parseData:function(_36){
-if(_36.rows.length==0&&this.columns.length==0){
-return;
-}
-var _37=this;
-this["__selected__"]=[];
-var arr=this.store.getFromHtml(this.columns,_36,function(obj,row){
-if(typeof (obj[_37.valueField])=="undefined"||obj[_37.valueField]==null){
-obj[_37.valueField]=dojo.html.getAttribute(row,"value");
-}
-if(dojo.html.getAttribute(row,"selected")=="true"){
-_37["__selected__"].push(obj);
-}
-});
-this.store.setData(arr,true);
-this.render();
-for(var i=0;i<this["__selected__"].length;i++){
-this.select(this["__selected__"][i]);
-}
-this.renderSelections();
-delete this["__selected__"];
-this.isInitialized=true;
-},onSelect:function(e){
-var row=dojo.html.getParentByType(e.target,"tr");
-if(dojo.html.hasAttribute(row,"emptyRow")){
-return;
-}
-var _3e=dojo.html.getParentByType(row,"tbody");
-if(this.multiple){
-if(e.shiftKey){
-var _3f;
-var _40=_3e.rows;
-for(var i=0;i<_40.length;i++){
-if(_40[i]==row){
-break;
-}
-if(this.isRowSelected(_40[i])){
-_3f=_40[i];
-}
-}
-if(!_3f){
-_3f=row;
-for(;i<_40.length;i++){
-if(this.isRowSelected(_40[i])){
-row=_40[i];
-break;
-}
-}
-}
-this.resetSelections();
-if(_3f==row){
-this.toggleSelectionByRow(row);
-}else{
-var _42=false;
-for(var i=0;i<_40.length;i++){
-if(_40[i]==_3f){
-_42=true;
-}
-if(_42){
-this.selectByRow(_40[i]);
-}
-if(_40[i]==row){
-_42=false;
-}
-}
-}
-}else{
-this.toggleSelectionByRow(row);
-}
-}else{
-this.resetSelections();
-this.toggleSelectionByRow(row);
-}
-this.renderSelections();
-},onSort:function(e){
-var _44=this.sortIndex;
-var _45=this.sortDirection;
-var _46=e.target;
-var row=dojo.html.getParentByType(_46,"tr");
-var _48="td";
-if(row.getElementsByTagName(_48).length==0){
-_48="th";
-}
-var _49=row.getElementsByTagName(_48);
-var _4a=dojo.html.getParentByType(_46,_48);
-for(var i=0;i<_49.length;i++){
-dojo.html.setClass(_49[i],this.headerClass);
-if(_49[i]==_4a){
-if(this.sortInformation[0].index!=i){
-this.sortInformation.unshift({index:i,direction:0});
-}else{
-this.sortInformation[0]={index:i,direction:(~this.sortInformation[0].direction)&1};
-}
-}
-}
-this.sortInformation.length=Math.min(this.sortInformation.length,this.maxSortable);
-for(var i=0;i<this.sortInformation.length;i++){
-var idx=this.sortInformation[i].index;
-var dir=(~this.sortInformation[i].direction)&1;
-dojo.html.setClass(_49[idx],dir==0?this.headerDownClass:this.headerUpClass);
-}
-this.render();
-},onFilter:function(){
-},_defaultFilter:function(obj){
-return true;
-},setFilter:function(_4f,fn){
-for(var i=0;i<this.columns.length;i++){
-if(this.columns[i].getField()==_4f){
-this.columns[i].filterFunction=fn;
-break;
-}
-}
-this.applyFilters();
-},setFilterByIndex:function(idx,fn){
-this.columns[idx].filterFunction=fn;
-this.applyFilters();
-},clearFilter:function(_54){
-for(var i=0;i<this.columns.length;i++){
-if(this.columns[i].getField()==_54){
-this.columns[i].filterFunction=this._defaultFilter;
-break;
-}
-}
-this.applyFilters();
-},clearFilterByIndex:function(idx){
-this.columns[idx].filterFunction=this._defaultFilter;
-this.applyFilters();
-},clearFilters:function(){
-for(var i=0;i<this.columns.length;i++){
-this.columns[i].filterFunction=this._defaultFilter;
-}
-var _58=this.domNode.tBodies[0].rows;
-for(var i=0;i<_58.length;i++){
-_58[i].style.display="";
-if(this.alternateRows){
-dojo.html[((i%2==1)?"addClass":"removeClass")](_58[i],this.rowAlternateClass);
-}
-}
-this.onFilter();
-},applyFilters:function(){
-var alt=0;
-var _5a=this.domNode.tBodies[0].rows;
-for(var i=0;i<_5a.length;i++){
-var b=true;
-var row=_5a[i];
-for(var j=0;j<this.columns.length;j++){
-var _5f=this.store.getField(this.getDataByRow(row),this.columns[j].getField());
-if(this.columns[j].getType()==Date&&_5f!=null&&!_5f.getYear){
-_5f=new Date(_5f);
-}
-if(!this.columns[j].filterFunction(_5f)){
-b=false;
-break;
-}
-}
-row.style.display=(b?"":"none");
-if(b&&this.alternateRows){
-dojo.html[((alt++%2==1)?"addClass":"removeClass")](row,this.rowAlternateClass);
-}
-}
-this.onFilter();
-},createSorter:function(_60){
-var _61=this;
-var _62=[];
-function createSortFunction(_63,dir){
-var _65=_61.columns[_63];
-var _66=_65.getField();
-return function(_67,_68){
-if(dojo.html.hasAttribute(_67,"emptyRow")){
-return 1;
-}
-if(dojo.html.hasAttribute(_68,"emptyRow")){
-return -1;
-}
-var a=_61.store.getField(_61.getDataByRow(_67),_66);
-var b=_61.store.getField(_61.getDataByRow(_68),_66);
-var ret=0;
-if(a>b){
-ret=1;
-}
-if(a<b){
-ret=-1;
-}
-return dir*ret;
-};
-}
-var _6c=0;
-var max=Math.min(_60.length,this.maxSortable,this.columns.length);
-while(_6c<max){
-var _6e=(_60[_6c].direction==0)?1:-1;
-_62.push(createSortFunction(_60[_6c].index,_6e));
-_6c++;
-}
-return function(_6f,_70){
-var idx=0;
-while(idx<_62.length){
-var ret=_62[idx++](_6f,_70);
-if(ret!=0){
-return ret;
-}
-}
-return 0;
-};
-},createRow:function(obj){
-var row=document.createElement("tr");
-dojo.html.disableSelection(row);
-if(obj.key!=null){
-row.setAttribute("value",obj.key);
-}
-for(var j=0;j<this.columns.length;j++){
-var _76=document.createElement("td");
-_76.setAttribute("align",this.columns[j].align);
-_76.setAttribute("valign",this.columns[j].valign);
-dojo.html.disableSelection(_76);
-var val=this.store.getField(obj.src,this.columns[j].getField());
-if(typeof (val)=="undefined"){
-val="";
-}
-this.fillCell(_76,this.columns[j],val);
-row.appendChild(_76);
-}
-return row;
-},fillCell:function(_78,_79,val){
-if(_79.sortType=="__markup__"){
-_78.innerHTML=val;
-}else{
-if(_79.getType()==Date){
-val=new Date(val);
-if(!isNaN(val)){
-var _7b=this.defaultDateFormat;
-if(_79.format){
-_7b=_79.format;
-}
-_78.innerHTML=dojo.date.strftime(val,_7b);
-}else{
-_78.innerHTML=val;
-}
-}else{
-if("Number number int Integer float Float".indexOf(_79.getType())>-1){
-if(val.length==0){
-val="0";
-}
-var n=parseFloat(val,10)+"";
-if(n.indexOf(".")>-1){
-n=dojo.math.round(parseFloat(val,10),2);
-}
-_78.innerHTML=n;
-}else{
-_78.innerHTML=val;
-}
-}
-}
-},prefill:function(){
-this.isInitialized=false;
-var _7d=this.domNode.tBodies[0];
-while(_7d.childNodes.length>0){
-_7d.removeChild(_7d.childNodes[0]);
-}
-if(this.minRows>0){
-for(var i=0;i<this.minRows;i++){
-var row=document.createElement("tr");
-if(this.alternateRows){
-dojo.html[((i%2==1)?"addClass":"removeClass")](row,this.rowAlternateClass);
-}
-row.setAttribute("emptyRow","true");
-for(var j=0;j<this.columns.length;j++){
-var _81=document.createElement("td");
-_81.innerHTML="&nbsp;";
-row.appendChild(_81);
-}
-_7d.appendChild(row);
-}
-}
-},init:function(){
-this.isInitialized=false;
-var _82=this.domNode.getElementsByTagName("thead")[0];
-if(_82.getElementsByTagName("tr").length==0){
-var row=document.createElement("tr");
-for(var i=0;i<this.columns.length;i++){
-var _85=document.createElement("td");
-_85.setAttribute("align",this.columns[i].align);
-_85.setAttribute("valign",this.columns[i].valign);
-dojo.html.disableSelection(_85);
-_85.innerHTML=this.columns[i].label;
-row.appendChild(_85);
-if(!this.columns[i].noSort){
-dojo.event.connect(_85,"onclick",this,"onSort");
-}
-}
-dojo.html.prependChild(row,_82);
-}
-if(this.store.get().length==0){
-return false;
-}
-var idx=this.domNode.tBodies[0].rows.length;
-if(!idx||idx==0||this.domNode.tBodies[0].rows[0].getAttribute("emptyRow")=="true"){
-idx=0;
-var _87=this.domNode.tBodies[0];
-while(_87.childNodes.length>0){
-_87.removeChild(_87.childNodes[0]);
-}
-var _88=this.store.get();
-for(var i=0;i<_88.length;i++){
-var row=this.createRow(_88[i]);
-_87.appendChild(row);
-idx++;
-}
-}
-if(this.minRows>0&&idx<this.minRows){
-idx=this.minRows-idx;
-for(var i=0;i<idx;i++){
-row=document.createElement("tr");
-row.setAttribute("emptyRow","true");
-for(var j=0;j<this.columns.length;j++){
-_85=document.createElement("td");
-_85.innerHTML="&nbsp;";
-row.appendChild(_85);
-}
-_87.appendChild(row);
-}
-}
-var row=this.domNode.getElementsByTagName("thead")[0].rows[0];
-var _8a="td";
-if(row.getElementsByTagName(_8a).length==0){
-_8a="th";
-}
-var _8b=row.getElementsByTagName(_8a);
-for(var i=0;i<_8b.length;i++){
-dojo.html.setClass(_8b[i],this.headerClass);
-}
-for(var i=0;i<this.sortInformation.length;i++){
-var idx=this.sortInformation[i].index;
-var dir=(~this.sortInformation[i].direction)&1;
-dojo.html.setClass(_8b[idx],dir==0?this.headerDownClass:this.headerUpClass);
-}
-this.isInitialized=true;
-return this.isInitialized;
-},render:function(){
-if(!this.isInitialized){
-var b=this.init();
-if(!b){
-this.prefill();
-return;
-}
-}
-var _8e=[];
-var _8f=this.domNode.tBodies[0];
-var _90=-1;
-for(var i=0;i<_8f.rows.length;i++){
-_8e.push(_8f.rows[i]);
-}
-var _92=this.createSorter(this.sortInformation);
-if(_92){
-_8e.sort(_92);
-}
-for(var i=0;i<_8e.length;i++){
-if(this.alternateRows){
-dojo.html[((i%2==1)?"addClass":"removeClass")](_8e[i],this.rowAlternateClass);
-}
-dojo.html[(this.isRowSelected(_8f.rows[i])?"addClass":"removeClass")](_8f.rows[i],this.rowSelectedClass);
-_8f.appendChild(_8e[i]);
-}
-},renderSelections:function(){
-var _93=this.domNode.tBodies[0];
-for(var i=0;i<_93.rows.length;i++){
-dojo.html[(this.isRowSelected(_93.rows[i])?"addClass":"removeClass")](_93.rows[i],this.rowSelectedClass);
-}
-},initialize:function(){
-var _95=this;
-dojo.event.connect(this.store,"onSetData",function(){
-_95.store.forEach(function(_96){
-_96.isSelected=false;
-});
-_95.isInitialized=false;
-var _97=_95.domNode.tBodies[0];
-if(_97){
-while(_97.childNodes.length>0){
-_97.removeChild(_97.childNodes[0]);
-}
-}
-_95.render();
-});
-dojo.event.connect(this.store,"onClearData",function(){
-_95.isInitialized=false;
-_95.render();
-});
-dojo.event.connect(this.store,"onAddData",function(_98){
-var row=_95.createRow(_98);
-_95.domNode.tBodies[0].appendChild(row);
-_95.render();
-});
-dojo.event.connect(this.store,"onAddDataRange",function(arr){
-for(var i=0;i<arr.length;i++){
-arr[i].isSelected=false;
-var row=_95.createRow(arr[i]);
-_95.domNode.tBodies[0].appendChild(row);
-}
-_95.render();
-});
-dojo.event.connect(this.store,"onRemoveData",function(_9d){
-var _9e=_95.domNode.tBodies[0].rows;
-for(var i=0;i<_9e.length;i++){
-if(_95.getDataByRow(_9e[i])==_9d.src){
-_9e[i].parentNode.removeChild(_9e[i]);
-break;
-}
-}
-_95.render();
-});
-dojo.event.connect(this.store,"onUpdateField",function(obj,_a1,val){
-var row=_95.getRow(obj);
-var idx=_95.getColumnIndex(_a1);
-if(row&&row.cells[idx]&&_95.columns[idx]){
-_95.fillCell(row.cells[idx],_95.columns[idx],val);
-}
-});
-},postCreate:function(){
-this.store.keyField=this.valueField;
-if(this.domNode){
-if(this.domNode.nodeName.toLowerCase()!="table"){
-}
-if(this.domNode.getElementsByTagName("thead")[0]){
-var _a5=this.domNode.getElementsByTagName("thead")[0];
-if(this.headClass.length>0){
-_a5.className=this.headClass;
-}
-dojo.html.disableSelection(this.domNode);
-this.parseMetadata(_a5);
-var _a6="td";
-if(_a5.getElementsByTagName(_a6).length==0){
-_a6="th";
-}
-var _a7=_a5.getElementsByTagName(_a6);
-for(var i=0;i<_a7.length;i++){
-if(!this.columns[i].noSort){
-dojo.event.connect(_a7[i],"onclick",this,"onSort");
-}
-}
-}else{
-this.domNode.appendChild(document.createElement("thead"));
-}
-if(this.domNode.tBodies.length<1){
-var _a9=document.createElement("tbody");
-this.domNode.appendChild(_a9);
-}else{
-var _a9=this.domNode.tBodies[0];
-}
-if(this.tbodyClass.length>0){
-_a9.className=this.tbodyClass;
-}
-dojo.event.connect(_a9,"onclick",this,"onSelect");
-this.parseData(_a9);
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/FisheyeList.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/FisheyeList.js
deleted file mode 100644
index 3beaf5b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/FisheyeList.js
+++ /dev/null
@@ -1,433 +0,0 @@
-dojo.provide("dojo.widget.FisheyeList");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.html.util");
-dojo.require("dojo.event.*");
-dojo.widget.defineWidget("dojo.widget.FisheyeList",dojo.widget.HtmlWidget,function(){
-this.pos={x:-1,y:-1};
-this.EDGE={CENTER:0,LEFT:1,RIGHT:2,TOP:3,BOTTOM:4};
-this.timerScale=1;
-},{templateString:"<div class=\"dojoHtmlFisheyeListBar\"></div>",templateCssString:".dojoHtmlFisheyeListItemLabel {\n\tfont-family: Arial, Helvetica, sans-serif;\n\tbackground-color: #eee;\n\tborder: 2px solid #666;\n\tpadding: 2px;\n\ttext-align: center;\n\tposition: absolute;\n\tdisplay: none;\n}\n\n.dojoHtmlFisheyeListItemLabel.selected {\n\tdisplay: block;\n}\n\n.dojoHtmlFisheyeListItemImage {\n\tborder: 0px;\n\tposition: absolute;\n}\n\n.dojoHtmlFisheyeListItem {\n\tposition: absolute;\n\tz-index: 2;\n}\n\n.dojoHtmlFisheyeListBar {\n\tposition: relative;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/FisheyeList.css"),isContainer:true,snarfChildDomOutput:true,itemWidth:40,itemHeight:40,itemMaxWidth:150,itemMaxHeight:150,orientation:"horizontal",conservativeTrigger:false,effectUnits:2,itemPadding:10,attachEdge:"center",labelEdge:"bottom",enableCrappySvgSupport:false,fillInTemplate:function(){
-dojo.html.disableSelection(this.domNode);
-this.isHorizontal=(this.orientation=="horizontal");
-this.selectedNode=-1;
-this.isOver=false;
-this.hitX1=-1;
-this.hitY1=-1;
-this.hitX2=-1;
-this.hitY2=-1;
-this.anchorEdge=this._toEdge(this.attachEdge,this.EDGE.CENTER);
-this.labelEdge=this._toEdge(this.labelEdge,this.EDGE.TOP);
-if(this.isHorizontal&&(this.anchorEdge==this.EDGE.LEFT)){
-this.anchorEdge=this.EDGE.CENTER;
-}
-if(this.isHorizontal&&(this.anchorEdge==this.EDGE.RIGHT)){
-this.anchorEdge=this.EDGE.CENTER;
-}
-if(!this.isHorizontal&&(this.anchorEdge==this.EDGE.TOP)){
-this.anchorEdge=this.EDGE.CENTER;
-}
-if(!this.isHorizontal&&(this.anchorEdge==this.EDGE.BOTTOM)){
-this.anchorEdge=this.EDGE.CENTER;
-}
-if(this.labelEdge==this.EDGE.CENTER){
-this.labelEdge=this.EDGE.TOP;
-}
-if(this.isHorizontal&&(this.labelEdge==this.EDGE.LEFT)){
-this.labelEdge=this.EDGE.TOP;
-}
-if(this.isHorizontal&&(this.labelEdge==this.EDGE.RIGHT)){
-this.labelEdge=this.EDGE.TOP;
-}
-if(!this.isHorizontal&&(this.labelEdge==this.EDGE.TOP)){
-this.labelEdge=this.EDGE.LEFT;
-}
-if(!this.isHorizontal&&(this.labelEdge==this.EDGE.BOTTOM)){
-this.labelEdge=this.EDGE.LEFT;
-}
-this.proximityLeft=this.itemWidth*(this.effectUnits-0.5);
-this.proximityRight=this.itemWidth*(this.effectUnits-0.5);
-this.proximityTop=this.itemHeight*(this.effectUnits-0.5);
-this.proximityBottom=this.itemHeight*(this.effectUnits-0.5);
-if(this.anchorEdge==this.EDGE.LEFT){
-this.proximityLeft=0;
-}
-if(this.anchorEdge==this.EDGE.RIGHT){
-this.proximityRight=0;
-}
-if(this.anchorEdge==this.EDGE.TOP){
-this.proximityTop=0;
-}
-if(this.anchorEdge==this.EDGE.BOTTOM){
-this.proximityBottom=0;
-}
-if(this.anchorEdge==this.EDGE.CENTER){
-this.proximityLeft/=2;
-this.proximityRight/=2;
-this.proximityTop/=2;
-this.proximityBottom/=2;
-}
-},postCreate:function(){
-this._initializePositioning();
-if(!this.conservativeTrigger){
-dojo.event.connect(document.documentElement,"onmousemove",this,"_onMouseMove");
-}
-dojo.event.connect(document.documentElement,"onmouseout",this,"_onBodyOut");
-dojo.event.connect(this,"addChild",this,"_initializePositioning");
-},_initializePositioning:function(){
-this.itemCount=this.children.length;
-this.barWidth=(this.isHorizontal?this.itemCount:1)*this.itemWidth;
-this.barHeight=(this.isHorizontal?1:this.itemCount)*this.itemHeight;
-this.totalWidth=this.proximityLeft+this.proximityRight+this.barWidth;
-this.totalHeight=this.proximityTop+this.proximityBottom+this.barHeight;
-for(var i=0;i<this.children.length;i++){
-this.children[i].posX=this.itemWidth*(this.isHorizontal?i:0);
-this.children[i].posY=this.itemHeight*(this.isHorizontal?0:i);
-this.children[i].cenX=this.children[i].posX+(this.itemWidth/2);
-this.children[i].cenY=this.children[i].posY+(this.itemHeight/2);
-var _2=this.isHorizontal?this.itemWidth:this.itemHeight;
-var r=this.effectUnits*_2;
-var c=this.isHorizontal?this.children[i].cenX:this.children[i].cenY;
-var _5=this.isHorizontal?this.proximityLeft:this.proximityTop;
-var _6=this.isHorizontal?this.proximityRight:this.proximityBottom;
-var _7=this.isHorizontal?this.barWidth:this.barHeight;
-var _8=r;
-var _9=r;
-if(_8>c+_5){
-_8=c+_5;
-}
-if(_9>(_7-c+_6)){
-_9=_7-c+_6;
-}
-this.children[i].effectRangeLeft=_8/_2;
-this.children[i].effectRangeRght=_9/_2;
-}
-this.domNode.style.width=this.barWidth+"px";
-this.domNode.style.height=this.barHeight+"px";
-for(var i=0;i<this.children.length;i++){
-var _a=this.children[i];
-var _b=_a.domNode;
-_b.style.left=_a.posX+"px";
-_b.style.top=_a.posY+"px";
-_b.style.width=this.itemWidth+"px";
-_b.style.height=this.itemHeight+"px";
-if(_a.svgNode){
-_a.svgNode.style.position="absolute";
-_a.svgNode.style.left=this.itemPadding+"%";
-_a.svgNode.style.top=this.itemPadding+"%";
-_a.svgNode.style.width=(100-2*this.itemPadding)+"%";
-_a.svgNode.style.height=(100-2*this.itemPadding)+"%";
-_a.svgNode.style.zIndex=1;
-_a.svgNode.setSize(this.itemWidth,this.itemHeight);
-}else{
-_a.imgNode.style.left=this.itemPadding+"%";
-_a.imgNode.style.top=this.itemPadding+"%";
-_a.imgNode.style.width=(100-2*this.itemPadding)+"%";
-_a.imgNode.style.height=(100-2*this.itemPadding)+"%";
-}
-}
-this._calcHitGrid();
-},_onBodyOut:function(e){
-if(dojo.html.overElement(dojo.body(),e)){
-return;
-}
-this._setDormant(e);
-},_setDormant:function(e){
-if(!this.isOver){
-return;
-}
-this.isOver=false;
-if(this.conservativeTrigger){
-dojo.event.disconnect(document.documentElement,"onmousemove",this,"_onMouseMove");
-}
-this._onGridMouseMove(-1,-1);
-},_setActive:function(e){
-if(this.isOver){
-return;
-}
-this.isOver=true;
-if(this.conservativeTrigger){
-dojo.event.connect(document.documentElement,"onmousemove",this,"_onMouseMove");
-this.timerScale=0;
-this._onMouseMove(e);
-this._expandSlowly();
-}
-},_onMouseMove:function(e){
-if((e.pageX>=this.hitX1)&&(e.pageX<=this.hitX2)&&(e.pageY>=this.hitY1)&&(e.pageY<=this.hitY2)){
-if(!this.isOver){
-this._setActive(e);
-}
-this._onGridMouseMove(e.pageX-this.hitX1,e.pageY-this.hitY1);
-}else{
-if(this.isOver){
-this._setDormant(e);
-}
-}
-},onResized:function(){
-this._calcHitGrid();
-},_onGridMouseMove:function(x,y){
-this.pos={x:x,y:y};
-this._paint();
-},_paint:function(){
-var x=this.pos.x;
-var y=this.pos.y;
-if(this.itemCount<=0){
-return;
-}
-var pos=this.isHorizontal?x:y;
-var prx=this.isHorizontal?this.proximityLeft:this.proximityTop;
-var siz=this.isHorizontal?this.itemWidth:this.itemHeight;
-var sim=this.isHorizontal?(1-this.timerScale)*this.itemWidth+this.timerScale*this.itemMaxWidth:(1-this.timerScale)*this.itemHeight+this.timerScale*this.itemMaxHeight;
-var cen=((pos-prx)/siz)-0.5;
-var _19=(sim/siz)-0.5;
-if(_19>this.effectUnits){
-_19=this.effectUnits;
-}
-var _1a=0;
-if(this.anchorEdge==this.EDGE.BOTTOM){
-var _1b=(y-this.proximityTop)/this.itemHeight;
-_1a=(_1b>0.5)?1:y/(this.proximityTop+(this.itemHeight/2));
-}
-if(this.anchorEdge==this.EDGE.TOP){
-var _1b=(y-this.proximityTop)/this.itemHeight;
-_1a=(_1b<0.5)?1:(this.totalHeight-y)/(this.proximityBottom+(this.itemHeight/2));
-}
-if(this.anchorEdge==this.EDGE.RIGHT){
-var _1b=(x-this.proximityLeft)/this.itemWidth;
-_1a=(_1b>0.5)?1:x/(this.proximityLeft+(this.itemWidth/2));
-}
-if(this.anchorEdge==this.EDGE.LEFT){
-var _1b=(x-this.proximityLeft)/this.itemWidth;
-_1a=(_1b<0.5)?1:(this.totalWidth-x)/(this.proximityRight+(this.itemWidth/2));
-}
-if(this.anchorEdge==this.EDGE.CENTER){
-if(this.isHorizontal){
-_1a=y/(this.totalHeight);
-}else{
-_1a=x/(this.totalWidth);
-}
-if(_1a>0.5){
-_1a=1-_1a;
-}
-_1a*=2;
-}
-for(var i=0;i<this.itemCount;i++){
-var _1d=this._weighAt(cen,i);
-if(_1d<0){
-_1d=0;
-}
-this._setItemSize(i,_1d*_1a);
-}
-var _1e=Math.round(cen);
-var _1f=0;
-if(cen<0){
-_1e=0;
-}else{
-if(cen>this.itemCount-1){
-_1e=this.itemCount-1;
-}else{
-_1f=(cen-_1e)*((this.isHorizontal?this.itemWidth:this.itemHeight)-this.children[_1e].sizeMain);
-}
-}
-this._positionElementsFrom(_1e,_1f);
-},_weighAt:function(cen,i){
-var _22=Math.abs(cen-i);
-var _23=((cen-i)>0)?this.children[i].effectRangeRght:this.children[i].effectRangeLeft;
-return (_22>_23)?0:(1-_22/_23);
-},_setItemSize:function(p,_25){
-_25*=this.timerScale;
-var w=Math.round(this.itemWidth+((this.itemMaxWidth-this.itemWidth)*_25));
-var h=Math.round(this.itemHeight+((this.itemMaxHeight-this.itemHeight)*_25));
-if(this.isHorizontal){
-this.children[p].sizeW=w;
-this.children[p].sizeH=h;
-this.children[p].sizeMain=w;
-this.children[p].sizeOff=h;
-var y=0;
-if(this.anchorEdge==this.EDGE.TOP){
-y=(this.children[p].cenY-(this.itemHeight/2));
-}else{
-if(this.anchorEdge==this.EDGE.BOTTOM){
-y=(this.children[p].cenY-(h-(this.itemHeight/2)));
-}else{
-y=(this.children[p].cenY-(h/2));
-}
-}
-this.children[p].usualX=Math.round(this.children[p].cenX-(w/2));
-this.children[p].domNode.style.top=y+"px";
-this.children[p].domNode.style.left=this.children[p].usualX+"px";
-}else{
-this.children[p].sizeW=w;
-this.children[p].sizeH=h;
-this.children[p].sizeOff=w;
-this.children[p].sizeMain=h;
-var x=0;
-if(this.anchorEdge==this.EDGE.LEFT){
-x=this.children[p].cenX-(this.itemWidth/2);
-}else{
-if(this.anchorEdge==this.EDGE.RIGHT){
-x=this.children[p].cenX-(w-(this.itemWidth/2));
-}else{
-x=this.children[p].cenX-(w/2);
-}
-}
-this.children[p].domNode.style.left=x+"px";
-this.children[p].usualY=Math.round(this.children[p].cenY-(h/2));
-this.children[p].domNode.style.top=this.children[p].usualY+"px";
-}
-this.children[p].domNode.style.width=w+"px";
-this.children[p].domNode.style.height=h+"px";
-if(this.children[p].svgNode){
-this.children[p].svgNode.setSize(w,h);
-}
-},_positionElementsFrom:function(p,_2b){
-var pos=0;
-if(this.isHorizontal){
-pos=Math.round(this.children[p].usualX+_2b);
-this.children[p].domNode.style.left=pos+"px";
-}else{
-pos=Math.round(this.children[p].usualY+_2b);
-this.children[p].domNode.style.top=pos+"px";
-}
-this._positionLabel(this.children[p]);
-var _2d=pos;
-for(var i=p-1;i>=0;i--){
-_2d-=this.children[i].sizeMain;
-if(this.isHorizontal){
-this.children[i].domNode.style.left=_2d+"px";
-}else{
-this.children[i].domNode.style.top=_2d+"px";
-}
-this._positionLabel(this.children[i]);
-}
-var _2f=pos;
-for(var i=p+1;i<this.itemCount;i++){
-_2f+=this.children[i-1].sizeMain;
-if(this.isHorizontal){
-this.children[i].domNode.style.left=_2f+"px";
-}else{
-this.children[i].domNode.style.top=_2f+"px";
-}
-this._positionLabel(this.children[i]);
-}
-},_positionLabel:function(itm){
-var x=0;
-var y=0;
-var mb=dojo.html.getMarginBox(itm.lblNode);
-if(this.labelEdge==this.EDGE.TOP){
-x=Math.round((itm.sizeW/2)-(mb.width/2));
-y=-mb.height;
-}
-if(this.labelEdge==this.EDGE.BOTTOM){
-x=Math.round((itm.sizeW/2)-(mb.width/2));
-y=itm.sizeH;
-}
-if(this.labelEdge==this.EDGE.LEFT){
-x=-mb.width;
-y=Math.round((itm.sizeH/2)-(mb.height/2));
-}
-if(this.labelEdge==this.EDGE.RIGHT){
-x=itm.sizeW;
-y=Math.round((itm.sizeH/2)-(mb.height/2));
-}
-itm.lblNode.style.left=x+"px";
-itm.lblNode.style.top=y+"px";
-},_calcHitGrid:function(){
-var pos=dojo.html.getAbsolutePosition(this.domNode,true);
-this.hitX1=pos.x-this.proximityLeft;
-this.hitY1=pos.y-this.proximityTop;
-this.hitX2=this.hitX1+this.totalWidth;
-this.hitY2=this.hitY1+this.totalHeight;
-},_toEdge:function(inp,def){
-return this.EDGE[inp.toUpperCase()]||def;
-},_expandSlowly:function(){
-if(!this.isOver){
-return;
-}
-this.timerScale+=0.2;
-this._paint();
-if(this.timerScale<1){
-dojo.lang.setTimeout(this,"_expandSlowly",10);
-}
-},destroy:function(){
-dojo.event.disconnect(document.documentElement,"onmouseout",this,"_onBodyOut");
-dojo.event.disconnect(document.documentElement,"onmousemove",this,"_onMouseMove");
-dojo.widget.FisheyeList.superclass.destroy.call(this);
-}});
-dojo.widget.defineWidget("dojo.widget.FisheyeListItem",dojo.widget.HtmlWidget,{iconSrc:"",svgSrc:"",caption:"",id:"",_blankImgPath:dojo.uri.moduleUri("dojo.widget","templates/images/blank.gif"),templateString:"<div class=\"dojoHtmlFisheyeListItem\">"+"  <img class=\"dojoHtmlFisheyeListItemImage\" dojoAttachPoint=\"imgNode\" dojoAttachEvent=\"onMouseOver;onMouseOut;onClick\">"+"  <div class=\"dojoHtmlFisheyeListItemLabel\" dojoAttachPoint=\"lblNode\"></div>"+"</div>",fillInTemplate:function(){
-if(this.svgSrc!=""){
-this.svgNode=this._createSvgNode(this.svgSrc);
-this.domNode.appendChild(this.svgNode);
-this.imgNode.style.display="none";
-}else{
-if((this.iconSrc.toLowerCase().substring(this.iconSrc.length-4)==".png")&&(dojo.render.html.ie)&&(!dojo.render.html.ie70)){
-if(dojo.dom.hasParent(this.imgNode)&&this.id!=""){
-var _37=this.imgNode.parentNode;
-_37.setAttribute("id",this.id);
-}
-this.imgNode.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.iconSrc+"', sizingMethod='scale')";
-this.imgNode.src=this._blankImgPath.toString();
-}else{
-if(dojo.dom.hasParent(this.imgNode)&&this.id!=""){
-var _37=this.imgNode.parentNode;
-_37.setAttribute("id",this.id);
-}
-this.imgNode.src=this.iconSrc;
-}
-}
-if(this.lblNode){
-this.lblNode.appendChild(document.createTextNode(this.caption));
-}
-dojo.html.disableSelection(this.domNode);
-},_createSvgNode:function(src){
-var elm=document.createElement("embed");
-elm.src=src;
-elm.type="image/svg+xml";
-elm.style.width="1px";
-elm.style.height="1px";
-elm.loaded=0;
-elm.setSizeOnLoad=false;
-elm.onload=function(){
-this.svgRoot=this.getSVGDocument().rootElement;
-this.svgDoc=this.getSVGDocument().documentElement;
-this.zeroWidth=this.svgRoot.width.baseVal.value;
-this.zeroHeight=this.svgRoot.height.baseVal.value;
-this.loaded=true;
-if(this.setSizeOnLoad){
-this.setSize(this.setWidth,this.setHeight);
-}
-};
-elm.setSize=function(w,h){
-if(!this.loaded){
-this.setWidth=w;
-this.setHeight=h;
-this.setSizeOnLoad=true;
-return;
-}
-this.style.width=w+"px";
-this.style.height=h+"px";
-this.svgRoot.width.baseVal.value=w;
-this.svgRoot.height.baseVal.value=h;
-var _3c=w/this.zeroWidth;
-var _3d=h/this.zeroHeight;
-for(var i=0;i<this.svgDoc.childNodes.length;i++){
-if(this.svgDoc.childNodes[i].setAttribute){
-this.svgDoc.childNodes[i].setAttribute("transform","scale("+_3c+","+_3d+")");
-}
-}
-};
-return elm;
-},onMouseOver:function(e){
-if(!this.parent.isOver){
-this.parent._setActive(e);
-}
-if(this.caption!=""){
-dojo.html.addClass(this.lblNode,"selected");
-this.parent._positionLabel(this);
-}
-},onMouseOut:function(e){
-dojo.html.removeClass(this.lblNode,"selected");
-},onClick:function(e){
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/FloatingPane.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/FloatingPane.js
deleted file mode 100644
index 43a6729..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/FloatingPane.js
+++ /dev/null
@@ -1,236 +0,0 @@
-dojo.provide("dojo.widget.FloatingPane");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.Manager");
-dojo.require("dojo.html.*");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.html.iframe");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.lfx.shadow");
-dojo.require("dojo.widget.html.layout");
-dojo.require("dojo.widget.ContentPane");
-dojo.require("dojo.dnd.HtmlDragMove");
-dojo.require("dojo.widget.Dialog");
-dojo.require("dojo.widget.ResizeHandle");
-dojo.declare("dojo.widget.FloatingPaneBase",null,{title:"",iconSrc:"",hasShadow:false,constrainToContainer:false,taskBarId:"",resizable:true,titleBarDisplay:true,windowState:"normal",displayCloseAction:false,displayMinimizeAction:false,displayMaximizeAction:false,_max_taskBarConnectAttempts:5,_taskBarConnectAttempts:0,templateString:"<div id=\"${this.widgetId}\" dojoAttachEvent=\"onMouseDown\" class=\"dojoFloatingPane\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dojoFloatingPaneTitleBar\"  style=\"display:none\">\n\t  \t<img dojoAttachPoint=\"titleBarIcon\"  class=\"dojoFloatingPaneTitleBarIcon\">\n\t\t<div dojoAttachPoint=\"closeAction\" dojoAttachEvent=\"onClick:closeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneCloseIcon\"></div>\n\t\t<div dojoAttachPoint=\"restoreAction\" dojoAttachEvent=\"onClick:restoreWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneRestoreIcon\"></div>\n\t\t<div dojoAttachPoint=\"maximizeAction\" dojoAttachEvent=\"onClick:maximizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMaximizeIcon\"></div>\n\t\t<div dojoAttachPoint=\"minimizeAction\" dojoAttachEvent=\"onClick:minimizeWindow\"\n   \t  \t\tclass=\"dojoFloatingPaneMinimizeIcon\"></div>\n\t  \t<div dojoAttachPoint=\"titleBarText\" class=\"dojoFloatingPaneTitleText\">${this.title}</div>\n\t</div>\n\n\t<div id=\"${this.widgetId}_container\" dojoAttachPoint=\"containerNode\" class=\"dojoFloatingPaneClient\"></div>\n\n\t<div dojoAttachPoint=\"resizeBar\" class=\"dojoFloatingPaneResizebar\" style=\"display:none\"></div>\n</div>\n",templateCssString:"\n/********** Outer Window ***************/\n\n.dojoFloatingPane {\n\t/* essential css */\n\tposition: absolute;\n\toverflow: visible;\t\t/* so drop shadow is displayed */\n\tz-index: 10;\n\n\t/* styling css */\n\tborder: 1px solid;\n\tborder-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;\n\tbackground-color: ThreeDFace;\n}\n\n\n/********** Title Bar ****************/\n\n.dojoFloatingPaneTitleBar {\n\tvertical-align: top;\n\tmargin: 2px 2px 2px 2px;\n\tz-index: 10;\n\tbackground-color: #7596c6;\n\tcursor: default;\n\toverflow: hidden;\n\tborder-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;\n\tvertical-align: middle;\n}\n\n.dojoFloatingPaneTitleText {\n\tfloat: left;\n\tpadding: 2px 4px 2px 2px;\n\twhite-space: nowrap;\n\tcolor: CaptionText;\n\tfont: small-caption;\n}\n\n.dojoTitleBarIcon {\n\tfloat: left;\n\theight: 22px;\n\twidth: 22px;\n\tvertical-align: middle;\n\tmargin-right: 5px;\n\tmargin-left: 5px;\n}\n\n.dojoFloatingPaneActions{\n\tfloat: right;\n\tposition: absolute;\n\tright: 2px;\n\ttop: 2px;\n\tvertical-align: middle;\n}\n\n\n.dojoFloatingPaneActionItem {\n\tvertical-align: middle;\n\tmargin-right: 1px;\n\theight: 22px;\n\twidth: 22px;\n}\n\n\n.dojoFloatingPaneTitleBarIcon {\n\t/* essential css */\n\tfloat: left;\n\n\t/* styling css */\n\tmargin-left: 2px;\n\tmargin-right: 4px;\n\theight: 22px;\n}\n\n/* minimize/maximize icons are specified by CSS only */\n.dojoFloatingPaneMinimizeIcon,\n.dojoFloatingPaneMaximizeIcon,\n.dojoFloatingPaneRestoreIcon,\n.dojoFloatingPaneCloseIcon {\n\tvertical-align: middle;\n\theight: 22px;\n\twidth: 22px;\n\tfloat: right;\n}\n.dojoFloatingPaneMinimizeIcon {\n\tbackground-image: url(images/floatingPaneMinimize.gif);\n}\n.dojoFloatingPaneMaximizeIcon {\n\tbackground-image: url(images/floatingPaneMaximize.gif);\n}\n.dojoFloatingPaneRestoreIcon {\n\tbackground-image: url(images/floatingPaneRestore.gif);\n}\n.dojoFloatingPaneCloseIcon {\n\tbackground-image: url(images/floatingPaneClose.gif);\n}\n\n/* bar at bottom of window that holds resize handle */\n.dojoFloatingPaneResizebar {\n\tz-index: 10;\n\theight: 13px;\n\tbackground-color: ThreeDFace;\n}\n\n/************* Client Area ***************/\n\n.dojoFloatingPaneClient {\n\tposition: relative;\n\tz-index: 10;\n\tborder: 1px solid;\n\tborder-color: ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow;\n\tmargin: 2px;\n\tbackground-color: ThreeDFace;\n\tpadding: 8px;\n\tfont-family: Verdana, Helvetica, Garamond, sans-serif;\n\tfont-size: 12px;\n\toverflow: auto;\n}\n\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/FloatingPane.css"),fillInFloatingPaneTemplate:function(_1,_2){
-var _3=this.getFragNodeRef(_2);
-dojo.html.copyStyle(this.domNode,_3);
-dojo.body().appendChild(this.domNode);
-if(!this.isShowing()){
-this.windowState="minimized";
-}
-if(this.iconSrc==""){
-dojo.html.removeNode(this.titleBarIcon);
-}else{
-this.titleBarIcon.src=this.iconSrc.toString();
-}
-if(this.titleBarDisplay){
-this.titleBar.style.display="";
-dojo.html.disableSelection(this.titleBar);
-this.titleBarIcon.style.display=(this.iconSrc==""?"none":"");
-this.minimizeAction.style.display=(this.displayMinimizeAction?"":"none");
-this.maximizeAction.style.display=(this.displayMaximizeAction&&this.windowState!="maximized"?"":"none");
-this.restoreAction.style.display=(this.displayMaximizeAction&&this.windowState=="maximized"?"":"none");
-this.closeAction.style.display=(this.displayCloseAction?"":"none");
-this.drag=new dojo.dnd.HtmlDragMoveSource(this.domNode);
-if(this.constrainToContainer){
-this.drag.constrainTo();
-}
-this.drag.setDragHandle(this.titleBar);
-var _4=this;
-dojo.event.topic.subscribe("dragMove",function(_5){
-if(_5.source.domNode==_4.domNode){
-dojo.event.topic.publish("floatingPaneMove",{source:_4});
-}
-});
-}
-if(this.resizable){
-this.resizeBar.style.display="";
-this.resizeHandle=dojo.widget.createWidget("ResizeHandle",{targetElmId:this.widgetId,id:this.widgetId+"_resize"});
-this.resizeBar.appendChild(this.resizeHandle.domNode);
-}
-if(this.hasShadow){
-this.shadow=new dojo.lfx.shadow(this.domNode);
-}
-this.bgIframe=new dojo.html.BackgroundIframe(this.domNode);
-if(this.taskBarId){
-this._taskBarSetup();
-}
-dojo.body().removeChild(this.domNode);
-},postCreate:function(){
-if(dojo.hostenv.post_load_){
-this._setInitialWindowState();
-}else{
-dojo.addOnLoad(this,"_setInitialWindowState");
-}
-},maximizeWindow:function(_6){
-var mb=dojo.html.getMarginBox(this.domNode);
-this.previous={width:mb.width||this.width,height:mb.height||this.height,left:this.domNode.style.left,top:this.domNode.style.top,bottom:this.domNode.style.bottom,right:this.domNode.style.right};
-if(this.domNode.parentNode.style.overflow.toLowerCase()!="hidden"){
-this.parentPrevious={overflow:this.domNode.parentNode.style.overflow};
-dojo.debug(this.domNode.parentNode.style.overflow);
-this.domNode.parentNode.style.overflow="hidden";
-}
-this.domNode.style.left=dojo.html.getPixelValue(this.domNode.parentNode,"padding-left",true)+"px";
-this.domNode.style.top=dojo.html.getPixelValue(this.domNode.parentNode,"padding-top",true)+"px";
-if((this.domNode.parentNode.nodeName.toLowerCase()=="body")){
-var _8=dojo.html.getViewport();
-var _9=dojo.html.getPadding(dojo.body());
-this.resizeTo(_8.width-_9.width,_8.height-_9.height);
-}else{
-var _a=dojo.html.getContentBox(this.domNode.parentNode);
-this.resizeTo(_a.width,_a.height);
-}
-this.maximizeAction.style.display="none";
-this.restoreAction.style.display="";
-if(this.resizeHandle){
-this.resizeHandle.domNode.style.display="none";
-}
-this.drag.setDragHandle(null);
-this.windowState="maximized";
-},minimizeWindow:function(_b){
-this.hide();
-for(var _c in this.parentPrevious){
-this.domNode.parentNode.style[_c]=this.parentPrevious[_c];
-}
-this.lastWindowState=this.windowState;
-this.windowState="minimized";
-},restoreWindow:function(_d){
-if(this.windowState=="minimized"){
-this.show();
-if(this.lastWindowState=="maximized"){
-this.domNode.parentNode.style.overflow="hidden";
-this.windowState="maximized";
-}else{
-this.windowState="normal";
-}
-}else{
-if(this.windowState=="maximized"){
-for(var _e in this.previous){
-this.domNode.style[_e]=this.previous[_e];
-}
-for(var _e in this.parentPrevious){
-this.domNode.parentNode.style[_e]=this.parentPrevious[_e];
-}
-this.resizeTo(this.previous.width,this.previous.height);
-this.previous=null;
-this.parentPrevious=null;
-this.restoreAction.style.display="none";
-this.maximizeAction.style.display=this.displayMaximizeAction?"":"none";
-if(this.resizeHandle){
-this.resizeHandle.domNode.style.display="";
-}
-this.drag.setDragHandle(this.titleBar);
-this.windowState="normal";
-}else{
-}
-}
-},toggleDisplay:function(){
-if(this.windowState=="minimized"){
-this.restoreWindow();
-}else{
-this.minimizeWindow();
-}
-},closeWindow:function(_f){
-dojo.html.removeNode(this.domNode);
-this.destroy();
-},onMouseDown:function(evt){
-this.bringToTop();
-},bringToTop:function(){
-var _11=dojo.widget.manager.getWidgetsByType(this.widgetType);
-var _12=[];
-for(var x=0;x<_11.length;x++){
-if(this.widgetId!=_11[x].widgetId){
-_12.push(_11[x]);
-}
-}
-_12.sort(function(a,b){
-return a.domNode.style.zIndex-b.domNode.style.zIndex;
-});
-_12.push(this);
-var _16=100;
-for(x=0;x<_12.length;x++){
-_12[x].domNode.style.zIndex=_16+x*2;
-}
-},_setInitialWindowState:function(){
-if(this.isShowing()){
-this.width=-1;
-var mb=dojo.html.getMarginBox(this.domNode);
-this.resizeTo(mb.width,mb.height);
-}
-if(this.windowState=="maximized"){
-this.maximizeWindow();
-this.show();
-return;
-}
-if(this.windowState=="normal"){
-this.show();
-return;
-}
-if(this.windowState=="minimized"){
-this.hide();
-return;
-}
-this.windowState="minimized";
-},_taskBarSetup:function(){
-var _18=dojo.widget.getWidgetById(this.taskBarId);
-if(!_18){
-if(this._taskBarConnectAttempts<this._max_taskBarConnectAttempts){
-dojo.lang.setTimeout(this,this._taskBarSetup,50);
-this._taskBarConnectAttempts++;
-}else{
-dojo.debug("Unable to connect to the taskBar");
-}
-return;
-}
-_18.addChild(this);
-},showFloatingPane:function(){
-this.bringToTop();
-},onFloatingPaneShow:function(){
-var mb=dojo.html.getMarginBox(this.domNode);
-this.resizeTo(mb.width,mb.height);
-},resizeTo:function(_1a,_1b){
-dojo.html.setMarginBox(this.domNode,{width:_1a,height:_1b});
-dojo.widget.html.layout(this.domNode,[{domNode:this.titleBar,layoutAlign:"top"},{domNode:this.resizeBar,layoutAlign:"bottom"},{domNode:this.containerNode,layoutAlign:"client"}]);
-dojo.widget.html.layout(this.containerNode,this.children,"top-bottom");
-this.bgIframe.onResized();
-if(this.shadow){
-this.shadow.size(_1a,_1b);
-}
-this.onResized();
-},checkSize:function(){
-},destroyFloatingPane:function(){
-if(this.resizeHandle){
-this.resizeHandle.destroy();
-this.resizeHandle=null;
-}
-}});
-dojo.widget.defineWidget("dojo.widget.FloatingPane",[dojo.widget.ContentPane,dojo.widget.FloatingPaneBase],{fillInTemplate:function(_1c,_1d){
-this.fillInFloatingPaneTemplate(_1c,_1d);
-dojo.widget.FloatingPane.superclass.fillInTemplate.call(this,_1c,_1d);
-},postCreate:function(){
-dojo.widget.FloatingPaneBase.prototype.postCreate.apply(this,arguments);
-dojo.widget.FloatingPane.superclass.postCreate.apply(this,arguments);
-},show:function(){
-dojo.widget.FloatingPane.superclass.show.apply(this,arguments);
-this.showFloatingPane();
-},onShow:function(){
-dojo.widget.FloatingPane.superclass.onShow.call(this);
-this.onFloatingPaneShow();
-},destroy:function(){
-this.destroyFloatingPane();
-dojo.widget.FloatingPane.superclass.destroy.apply(this,arguments);
-}});
-dojo.widget.defineWidget("dojo.widget.ModalFloatingPane",[dojo.widget.FloatingPane,dojo.widget.ModalDialogBase],{windowState:"minimized",displayCloseAction:true,postCreate:function(){
-dojo.widget.ModalDialogBase.prototype.postCreate.call(this);
-dojo.widget.ModalFloatingPane.superclass.postCreate.call(this);
-},show:function(){
-this.showModalDialog();
-dojo.widget.ModalFloatingPane.superclass.show.apply(this,arguments);
-this.bg.style.zIndex=this.domNode.style.zIndex-1;
-},hide:function(){
-this.hideModalDialog();
-dojo.widget.ModalFloatingPane.superclass.hide.apply(this,arguments);
-},closeWindow:function(){
-this.hide();
-dojo.widget.ModalFloatingPane.superclass.closeWindow.apply(this,arguments);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Form.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Form.js
deleted file mode 100644
index dd098f7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Form.js
+++ /dev/null
@@ -1,254 +0,0 @@
-dojo.provide("dojo.widget.Form");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.widget.defineWidget("dojo.widget.Form",dojo.widget.HtmlWidget,{isContainer:true,templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onSubmit:onSubmit'></form>",formElements:[],ignoreNullValues:false,postCreate:function(_1,_2){
-for(var _3 in _1){
-if(_3=="dojotype"){
-continue;
-}
-var _4=document.createAttribute(_3);
-_4.nodeValue=_1[_3];
-this.containerNode.setAttributeNode(_4);
-}
-},_createRepeaters:function(_5,_6){
-for(var i=0;i<_6.children.length;++i){
-if(_6.children[i].widgetType=="RepeaterContainer"){
-var _8=_6.children[i].index;
-var _9=_8.indexOf("%{index}");
-_8=_8.substr(0,_9-1);
-var _a=this._getObject(_5,_8);
-if(typeof (_a)=="object"&&_a.length==0){
-_a=new Array();
-}
-var _b=_6.children[i].getRowCount();
-for(var j=0,_d=_b;j<_d;++j){
-_6.children[i].deleteRow(0);
-}
-for(var j=0;j<_a.length;j++){
-_6.children[i].addRow(false);
-}
-}
-if(_6.children[i].isContainer){
-this._createRepeaters(_5,_6.children[i]);
-}
-}
-},_createFormElements:function(){
-if(dojo.render.html.safari){
-this.formElements=[];
-var _e=["INPUT","SELECT","TEXTAREA"];
-for(var k=0;k<_e.length;k++){
-var _10=this.containerNode.getElementsByTagName(_e[k]);
-for(var j=0,_12=_10.length;j<_12;j++){
-this.formElements.push(_10[j]);
-}
-}
-}else{
-this.formElements=this.containerNode.elements;
-}
-},onSubmit:function(e){
-e.preventDefault();
-},submit:function(){
-this.containerNode.submit();
-},_getFormElement:function(_14){
-if(dojo.render.html.ie){
-for(var i=0,len=this.formElements.length;i<len;i++){
-var _17=this.formElements[i];
-if(_17.name==_14){
-return _17;
-}
-}
-}else{
-var _18=this.formElements[_14];
-if(typeof (_18)!="undefined"){
-return _18;
-}
-}
-return null;
-},_getObject:function(obj,_1a){
-var _1b=[];
-_1b=_1a.split(".");
-var _1c=obj;
-var _1d=_1b[_1b.length-1];
-for(var j=0,len=_1b.length;j<len;++j){
-var p=_1b[j];
-if(typeof (_1c[p])=="undefined"){
-_1c[p]={};
-}
-_1c=_1c[p];
-}
-return _1c;
-},_setToContainers:function(obj,_22){
-for(var i=0,len=_22.children.length;i<len;++i){
-var _25=_22.children[i];
-if(_25.widgetType=="Repeater"){
-for(var j=0,len=_25.getRowCount();j<len;++j){
-_25._initRow(j);
-}
-}
-if(_25.isContainer){
-this._setToContainers(obj,_25);
-continue;
-}
-switch(_25.widgetType){
-case "Checkbox":
-_25.setValue(_25.inputNode.checked);
-break;
-case "DropdownDatePicker":
-_25.setValue(_25.getValue());
-break;
-case "Select":
-continue;
-break;
-case "ComboBox":
-continue;
-break;
-default:
-break;
-}
-}
-},setValues:function(obj){
-this._createFormElements();
-this._createRepeaters(obj,this);
-for(var i=0,len=this.formElements.length;i<len;i++){
-var _2a=this.formElements[i];
-if(_2a.name==""){
-continue;
-}
-var _2b=new Array();
-_2b=_2a.name.split(".");
-var _2c=obj;
-var _2d=_2b[_2b.length-1];
-for(var j=1,_2f=_2b.length;j<_2f;++j){
-var p=_2b[j-1];
-if(typeof (_2c[p])=="undefined"){
-_2c=undefined;
-break;
-}
-_2c=_2c[p];
-}
-if(typeof (_2c)=="undefined"){
-continue;
-}
-if(typeof (_2c[_2d])=="undefined"&&this.ignoreNullValues){
-continue;
-}
-var _31=_2a.type;
-if(_31=="hidden"||_31=="text"||_31=="textarea"||_31=="password"){
-_31="text";
-}
-switch(_31){
-case "checkbox":
-_2a.checked=false;
-if(typeof (_2c[_2d])=="undefined"){
-continue;
-}
-for(var j=0,_2f=_2c[_2d].length;j<_2f;++j){
-if(_2a.value==_2c[_2d][j]){
-_2a.checked=true;
-}
-}
-break;
-case "radio":
-_2a.checked=false;
-if(typeof (_2c[_2d])=="undefined"){
-continue;
-}
-if(_2c[_2d]==_2a.value){
-_2a.checked=true;
-}
-break;
-case "select-multiple":
-_2a.selectedIndex=-1;
-for(var j=0,_2f=_2a.options.length;j<_2f;++j){
-for(var k=0,_33=_2c[_2d].length;k<_33;++k){
-if(_2a.options[j].value==_2c[_2d][k]){
-_2a.options[j].selected=true;
-}
-}
-}
-break;
-case "select-one":
-_2a.selectedIndex="0";
-for(var j=0,_2f=_2a.options.length;j<_2f;++j){
-if(_2a.options[j].value==_2c[_2d]){
-_2a.options[j].selected=true;
-}else{
-}
-}
-break;
-case "text":
-var _34="";
-if(typeof (_2c[_2d])!="undefined"){
-_34=_2c[_2d];
-}
-_2a.value=_34;
-break;
-default:
-dojo.debug("Not supported type ("+_31+")");
-break;
-}
-}
-this._setToContainers(obj,this);
-},getValues:function(){
-this._createFormElements();
-var obj={};
-for(var i=0,len=this.formElements.length;i<len;i++){
-var elm=this.formElements[i];
-var _39=[];
-if(elm.name==""){
-continue;
-}
-_39=elm.name.split(".");
-var _3a=obj;
-var _3b=_39[_39.length-1];
-for(var j=1,_3d=_39.length;j<_3d;++j){
-var _3e=null;
-var p=_39[j-1];
-var _40=p.split("[");
-if(_40.length>1){
-if(typeof (_3a[_40[0]])=="undefined"){
-_3a[_40[0]]=[];
-}
-_3e=parseInt(_40[1]);
-if(typeof (_3a[_40[0]][_3e])=="undefined"){
-_3a[_40[0]][_3e]={};
-}
-}else{
-if(typeof (_3a[_40[0]])=="undefined"){
-_3a[_40[0]]={};
-}
-}
-if(_40.length==1){
-_3a=_3a[_40[0]];
-}else{
-_3a=_3a[_40[0]][_3e];
-}
-}
-if((elm.type!="select-multiple"&&elm.type!="checkbox"&&elm.type!="radio")||(elm.type=="radio"&&elm.checked)){
-if(_3b==_3b.split("[")[0]){
-_3a[_3b]=elm.value;
-}else{
-}
-}else{
-if(elm.type=="checkbox"&&elm.checked){
-if(typeof (_3a[_3b])=="undefined"){
-_3a[_3b]=[];
-}
-_3a[_3b].push(elm.value);
-}else{
-if(elm.type=="select-multiple"){
-if(typeof (_3a[_3b])=="undefined"){
-_3a[_3b]=[];
-}
-for(var jdx=0,_42=elm.options.length;jdx<_42;++jdx){
-if(elm.options[jdx].selected){
-_3a[_3b].push(elm.options[jdx].value);
-}
-}
-}
-}
-}
-_3b=undefined;
-}
-return obj;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/GoogleMap.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/GoogleMap.js
deleted file mode 100644
index f8745e9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/GoogleMap.js
+++ /dev/null
@@ -1,156 +0,0 @@
-dojo.provide("dojo.widget.GoogleMap");
-dojo.require("dojo.event.*");
-dojo.require("dojo.math");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.widget.HtmlWidget");
-(function(){
-var _1=djConfig["gMapKey"]||djConfig["googleMapKey"];
-var _2=new dojo.uri.Uri(window.location.href);
-if(_2.host=="www.dojotoolkit.org"){
-_1="ABQIAAAACUNdgv_7FGOmUslbm9l6_hRqjp7ri2mNiOEYqetD3xnFHpt5rBSjszDd1sdufPyQKUTyCf_YxoIxvw";
-}else{
-if(_2.host=="blog.dojotoolkit.org"){
-_1="ABQIAAAACUNdgv_7FGOmUslbm9l6_hSkep6Av1xaMhVn3yCLkorJeXeLARQ6fammI_P3qSGleTJhoI5_1JmP_Q";
-}else{
-if(_2.host=="archive.dojotoolkit.org"){
-_1="ABQIAAAACUNdgv_7FGOmUslbm9l6_hTaQpDt0dyGLIHbXMPTzg1kWeAfwRTwZNyrUfbfxYE9yIvRivEjcXoDTg";
-}else{
-if(_2.host=="dojotoolkit.org"){
-_1="ABQIAAAACUNdgv_7FGOmUslbm9l6_hSaOaO_TgJ5c3mtQFnk5JO2zD5dZBRZk-ieqVs7BORREYNzAERmcJoEjQ";
-}
-}
-}
-}
-if(!dojo.hostenv.post_load_){
-if(!_1||_1==""){
-dojo.raise("dojo.widget.GoogleMap: The Google Map widget requires a proper API key in order to be used.");
-}
-var _3="<scr"+"ipt src='http://maps.google.com/maps?file=api&amp;v=2&amp;key="+_1+"'></scri"+"pt>";
-if(!dj_global["GMap2"]){
-document.write(_3);
-}
-}else{
-dojo.debug("Cannot initialize Google Map system after the page has been loaded! Please either manually include the script block provided by Google in your page or require() the GoogleMap widget before onload has fired.");
-}
-})();
-dojo.widget.defineWidget("dojo.widget.GoogleMap",dojo.widget.HtmlWidget,function(){
-this.map=null;
-this.geocoder=null;
-this.data=[];
-this.datasrc="";
-this.controls=["largemap","scale","maptype"];
-},{templatePath:null,templateCssPath:null,isContainer:false,_defaultPoint:{lat:39.10662,lng:-94.578209},setControls:function(){
-var _4={largemap:GLargeMapControl,smallmap:GSmallMapControl,smallzoom:GSmallZoomControl,scale:GScaleControl,maptype:GMapTypeControl,overview:GOverviewMapControl};
-for(var i=0;i<this.controls.length;i++){
-this.map.addControl(new (_4[this.controls[i].toLowerCase()])());
-}
-},findCenter:function(_6){
-if(this.data.length==1){
-return (new GLatLng(this.data[0].lat,this.data[0].lng));
-}
-var _7=(_6.getNorthEast().lat()+_6.getSouthWest().lat())/2;
-var _8=(_6.getNorthEast().lng()+_6.getSouthWest().lng())/2;
-return (new GLatLng(_7,_8));
-},createPinpoint:function(pt,_a){
-var m=new GMarker(pt);
-if(_a){
-GEvent.addListener(m,"click",function(){
-m.openInfoWindowHtml("<div>"+_a+"</div>");
-});
-}
-return m;
-},plot:function(_c){
-var p=new GLatLng(_c.lat,_c.lng);
-var d=_c.description||null;
-var m=this.createPinpoint(p,d);
-this.map.addOverlay(m);
-},plotAddress:function(_10){
-var _11=this;
-this.geocoder.getLocations(_10,function(_12){
-if(!_12||_12.Status.code!=200){
-alert("The address \""+_10+"\" was not found.");
-return;
-}
-var obj={lat:_12.Placemark[0].Point.coordinates[1],lng:_12.Placemark[0].Point.coordinates[0],description:_12.Placemark[0].address};
-_11.data.push(obj);
-_11.render();
-});
-},parse:function(_14){
-this.data=[];
-var h=_14.getElementsByTagName("thead")[0];
-if(!h){
-return;
-}
-var a=[];
-var _17=h.getElementsByTagName("td");
-if(_17.length==0){
-_17=h.getElementsByTagName("th");
-}
-for(var i=0;i<_17.length;i++){
-var c=_17[i].innerHTML.toLowerCase();
-if(c=="long"){
-c="lng";
-}
-a.push(c);
-}
-var b=_14.getElementsByTagName("tbody")[0];
-if(!b){
-return;
-}
-for(var i=0;i<b.childNodes.length;i++){
-if(!(b.childNodes[i].nodeName&&b.childNodes[i].nodeName.toLowerCase()=="tr")){
-continue;
-}
-var _1b=b.childNodes[i].getElementsByTagName("td");
-var o={};
-for(var j=0;j<a.length;j++){
-var col=a[j];
-if(col=="lat"||col=="lng"){
-o[col]=parseFloat(_1b[j].innerHTML);
-}else{
-o[col]=_1b[j].innerHTML;
-}
-}
-this.data.push(o);
-}
-},render:function(){
-if(this.data.length==0){
-this.map.setCenter(new GLatLng(this._defaultPoint.lat,this._defaultPoint.lng),4);
-return;
-}
-this.map.clearOverlays();
-var _1f=new GLatLngBounds();
-var d=this.data;
-for(var i=0;i<d.length;i++){
-_1f.extend(new GLatLng(d[i].lat,d[i].lng));
-}
-var _22=Math.min((this.map.getBoundsZoomLevel(_1f)-1),14);
-this.map.setCenter(this.findCenter(_1f),_22);
-for(var i=0;i<this.data.length;i++){
-this.plot(this.data[i]);
-}
-},initialize:function(_23,_24){
-if(this.datasrc){
-this.parse(dojo.byId(this.datasrc));
-}else{
-if(this.domNode.getElementsByTagName("table")[0]){
-this.parse(this.domNode.getElementsByTagName("table")[0]);
-}
-}
-},postCreate:function(){
-while(this.domNode.childNodes.length>0){
-this.domNode.removeChild(this.domNode.childNodes[0]);
-}
-if(this.domNode.style.position!="absolute"){
-this.domNode.style.position="relative";
-}
-this.map=new GMap2(this.domNode);
-try{
-this.geocoder=new GClientGeocoder();
-}
-catch(ex){
-}
-this.render();
-this.setControls();
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/HslColorPicker.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/HslColorPicker.js
deleted file mode 100644
index 125ee0d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/HslColorPicker.js
+++ /dev/null
@@ -1,97 +0,0 @@
-dojo.provide("dojo.widget.svg.HslColorPicker");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.HslColorPicker");
-dojo.require("dojo.math");
-dojo.require("dojo.svg");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.gfx.color.hsl");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.widget.svg.HslColorPicker");
-dojo.widget.defineWidget("dojo.widget.svg.HslColorPicker",dojo.widget.HtmlWidget,function(){
-dojo.debug("warning: the HslColorPicker is not a finished widget, and is not yet ready for general use");
-this.filterObject={};
-},{hue:"0",saturation:"0",light:"0",storedColor:"#0054aa",templateString:"<svg xmlns=\"http://www.w3.org/2000/svg\"\n\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\tversion=\"1.1\" baseProfile=\"full\" width=\"170\" height=\"131\" xmlns:html=\"http://www.w3.org/1999/xhtml\">\n\t<defs>\n\t<linearGradient id=\"colorGradient\" dojoAttachPoint=\"colorGradientNode\" x1=\"0\" x2=\"131\" y1=\"0\" y2=\"0\" gradientUnits=\"userSpaceOnUse\">\n\t\t<stop id=\"leftGradientColor\" dojoAttachPoint=\"leftGradientColorNode\" offset=\"0%\" stop-color=\"#828282\"/>\n\t\t<stop id=\"rightGradientColor\" dojoAttachPoint=\"rightGradientColorNode\" offset=\"100%\" stop-color=\"#053fff\"/>\n\t</linearGradient>\n\t<linearGradient id=\"verticalGradient\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"131\" gradientUnits=\"userSpaceOnUse\">\n\t\t<stop offset=\"0%\" style=\"stop-color:#000000;\"/>\n\t\t<stop offset=\"50%\" style=\"stop-color:#000000;stop-opacity:0;\"/>\n\t\t<stop offset=\"50%\" style=\"stop-color:#ffffff;stop-opacity:0;\"/>\n\t\t<stop offset=\"100%\" style=\"stop-color:#ffffff;\"/>\n\t</linearGradient>\n\t<linearGradient id=\"sliderGradient\">\n\t\t<stop offset=\"0%\" style=\"stop-color:#000000;\"/>\n\t\t<stop offset=\"15%\" style=\"stop-color:#ffffff;\"/>\n\t\t<stop offset=\"30%\" style=\"stop-color:#000000;\"/>\n\t\t<stop offset=\"45%\" style=\"stop-color:#ffffff;\"/>\n\t\t<stop offset=\"60%\" style=\"stop-color:#000000;\"/>\n\t\t<stop offset=\"75%\" style=\"stop-color:#ffffff;\"/>\n\t\t<stop offset=\"90%\" style=\"stop-color:#000000;\"/>\n\t</linearGradient>\n</defs>\n\t<rect x=\"0\" y=\"0\" width=\"131px\" height=\"131px\" fill=\"url(#colorGradient)\"/>\n\t<rect x=\"0\" y=\"0\" width=\"131px\" height=\"131px\" style=\"fill:url(#verticalGradient);\"/>\n\t<rect id=\"saturationLightSlider\" dojoAttachPoint=\"saturationLightSliderNode\" x=\"100\" y=\"100\" width=\"5px\" height=\"5px\" style=\"stroke:url(#sliderGradient);stroke-width:1px;fill-opacity:0;\"/>\n\t<image xlink:href=\"images/hue.png\" dojoAttachPoint=\"hueNode\" x=\"140px\" y=\"0px\" width=\"21px\" height=\"131px\" dojoAttachEvent=\"onclick: onHueClick;\"/>\n\t<rect dojoAttachPoint=\"hueSliderNode\" x=\"139px\" y=\"40px\" width=\"24px\" height=\"4px\" style=\"stroke-opacity:1;fill-opacity:0;stroke:black;\"/>\n</svg>\n",fillInTemplate:function(){
-this.height="131px";
-this.svgDoc=this.hueNode.ownerDocument;
-this.leftGradientColorNode=this.hueNode.ownerDocument.getElementById("leftGradientColor");
-this.rightGradientColorNode=this.hueNode.ownerDocument.getElementById("rightGradientColor");
-this.hueNode.setAttributeNS(dojo.dom.xmlns.xlink,"href",dojo.uri.moduleUri("dojo.widget","templates/images/hue.png"));
-var _1=dojo.gfx.color.hex2hsl(this.storedColor);
-this.hue=_1[0];
-this.saturation=_1[1];
-this.light=_1[2];
-this.setSaturationStopColors();
-},setSaturationStopColors:function(){
-this.leftGradientStopColor=dojo.gfx.color.rgb2hex(this.hsl2rgb(this.hue,0,50));
-this.rightGradientStopColor=dojo.gfx.color.rgb2hex(this.hsl2rgb(this.hue,100,50));
-this.leftGradientColorNode.setAttributeNS(null,"stop-color",this.leftGradientStopColor);
-this.rightGradientColorNode.setAttributeNS(null,"stop-color",this.rightGradientStopColor);
-},setHue:function(_2){
-this.hue=_2;
-},setHueSlider:function(){
-this.hueSliderNode.setAttribute("y",parseInt((this.hue/360)*parseInt(this.height)-2)+"px");
-},setSaturationLight:function(_3,_4){
-this.saturation=_3;
-this.light=_4;
-},setSaturationLightSlider:function(){
-},onHueClick:function(_5){
-var _6=parseInt(_5.clientY)-parseInt(_5.target.getAttribute("y"));
-this.setHue(360-parseInt(_6*(360/parseInt(this.height))));
-this.setSaturationStopColors();
-this.setStoredColor(dojo.gfx.color.hsl2hex(this.hue,this.saturation,this.light));
-},onHueDrag:function(_7){
-},onSaturationLightClick:function(_8){
-var _9=parseInt(_8.clientX)-parseInt(_8.target.getAttribute("y"));
-var _a=parseInt(_8.clientY)-parseInt(_8.target.getAttribute("y"));
-var _b=parseInt(parseInt(_9)*(101/106));
-var _c=parseInt(parseInt(_a)*(101/106));
-this.setSaturationLight(_b,_c);
-this.setStoredColor(dojo.gfx.color.hsl2hex(this.hue,this.saturation,this.light));
-},onSaturationLightDrag:function(_d){
-},getStoredColor:function(){
-return this.storedColor;
-},setStoredColor:function(_e){
-this.storedColor=_e;
-dojo.event.topic.publish("/"+this.widgetId+"/setStoredColor",this.filterObject);
-},hsl2rgb:function(_f,_10,_11){
-function rgb(q1,q2,hue){
-if(hue>360){
-hue=hue-360;
-}
-if(hue<0){
-hue=hue+360;
-}
-if(hue<60){
-return (q1+(q2-q1)*hue/60);
-}else{
-if(hue<180){
-return (q2);
-}else{
-if(hue<240){
-return (q1+(q2-q1)*(240-hue)/60);
-}else{
-return (q1);
-}
-}
-}
-}
-this.rgb=rgb;
-if(_10==0){
-return [Math.round(_11*255/100),Math.round(_11*255/100),Math.round(_11*255/100)];
-}else{
-_11=_11/100;
-_10=_10/100;
-if((_11)<0.5){
-var _15=(_11)*(1+_10);
-}else{
-var _15=(_11+_10-(_11*_10));
-}
-var _16=2*_11-_15;
-var _17=[];
-_17[0]=Math.round(rgb(_16,_15,parseInt(_f)+120)*255);
-_17[1]=Math.round(rgb(_16,_15,_f)*255);
-_17[2]=Math.round(rgb(_16,_15,parseInt(_f)-120)*255);
-return _17;
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/HtmlWidget.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/HtmlWidget.js
deleted file mode 100644
index abedf5b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/HtmlWidget.js
+++ /dev/null
@@ -1,88 +0,0 @@
-dojo.provide("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.DomWidget");
-dojo.require("dojo.html.util");
-dojo.require("dojo.html.display");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lfx.toggle");
-dojo.declare("dojo.widget.HtmlWidget",dojo.widget.DomWidget,{templateCssPath:null,templatePath:null,lang:"",toggle:"plain",toggleDuration:150,initialize:function(_1,_2){
-},postMixInProperties:function(_3,_4){
-if(this.lang===""){
-this.lang=null;
-}
-this.toggleObj=dojo.lfx.toggle[this.toggle.toLowerCase()]||dojo.lfx.toggle.plain;
-},createNodesFromText:function(_5,_6){
-return dojo.html.createNodesFromText(_5,_6);
-},destroyRendering:function(_7){
-try{
-if(this.bgIframe){
-this.bgIframe.remove();
-delete this.bgIframe;
-}
-if(!_7&&this.domNode){
-dojo.event.browser.clean(this.domNode);
-}
-dojo.widget.HtmlWidget.superclass.destroyRendering.call(this);
-}
-catch(e){
-}
-},isShowing:function(){
-return dojo.html.isShowing(this.domNode);
-},toggleShowing:function(){
-if(this.isShowing()){
-this.hide();
-}else{
-this.show();
-}
-},show:function(){
-if(this.isShowing()){
-return;
-}
-this.animationInProgress=true;
-this.toggleObj.show(this.domNode,this.toggleDuration,null,dojo.lang.hitch(this,this.onShow),this.explodeSrc);
-},onShow:function(){
-this.animationInProgress=false;
-this.checkSize();
-},hide:function(){
-if(!this.isShowing()){
-return;
-}
-this.animationInProgress=true;
-this.toggleObj.hide(this.domNode,this.toggleDuration,null,dojo.lang.hitch(this,this.onHide),this.explodeSrc);
-},onHide:function(){
-this.animationInProgress=false;
-},_isResized:function(w,h){
-if(!this.isShowing()){
-return false;
-}
-var wh=dojo.html.getMarginBox(this.domNode);
-var _b=w||wh.width;
-var _c=h||wh.height;
-if(this.width==_b&&this.height==_c){
-return false;
-}
-this.width=_b;
-this.height=_c;
-return true;
-},checkSize:function(){
-if(!this._isResized()){
-return;
-}
-this.onResized();
-},resizeTo:function(w,h){
-dojo.html.setMarginBox(this.domNode,{width:w,height:h});
-if(this.isShowing()){
-this.onResized();
-}
-},resizeSoon:function(){
-if(this.isShowing()){
-dojo.lang.setTimeout(this,this.onResized,0);
-}
-},onResized:function(){
-dojo.lang.forEach(this.children,function(_f){
-if(_f.checkSize){
-_f.checkSize();
-}
-});
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/InlineEditBox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/InlineEditBox.js
deleted file mode 100644
index 1d185c9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/InlineEditBox.js
+++ /dev/null
@@ -1,143 +0,0 @@
-dojo.provide("dojo.widget.InlineEditBox");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.lfx.*");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.string");
-dojo.require("dojo.html.*");
-dojo.require("dojo.html.layout");
-dojo.widget.defineWidget("dojo.widget.InlineEditBox",dojo.widget.HtmlWidget,function(){
-this.history=[];
-},{templateString:"<form class=\"inlineEditBox\" style=\"display: none\" dojoAttachPoint=\"form\" dojoAttachEvent=\"onSubmit:saveEdit; onReset:cancelEdit; onKeyUp: checkForValueChange;\">\n\t<input type=\"text\" dojoAttachPoint=\"text\" style=\"display: none;\" />\n\t<textarea dojoAttachPoint=\"textarea\" style=\"display: none;\"></textarea>\n\t<input type=\"submit\" value=\"Save\" dojoAttachPoint=\"submitButton\" />\n\t<input type=\"reset\" value=\"Cancel\" dojoAttachPoint=\"cancelButton\" />\n</form>\n",templateCssString:".editLabel {\n\tfont-size : small;\n\tpadding : 0 5px;\n\tdisplay : none;\n}\n\n.editableRegionDisabled {\n\tcursor : pointer;\n\t_cursor : hand;\n}\n\n.editableRegion {\n\tbackground-color : #ffc !important;\n\tcursor : pointer;\n\t_cursor : hand;\n}\n\n.editableRegion .editLabel {\n\tdisplay : inline;\n}\n\n.editableTextareaRegion .editLabel {\n\tdisplay : block;\n}\n\n.inlineEditBox {\n\t/*background-color : #ffc;*/\n\tdisplay : inline;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/InlineEditBox.css"),mode:"text",name:"",minWidth:100,minHeight:200,editing:false,value:"",textValue:"",defaultText:"",postMixInProperties:function(){
-if(this.textValue){
-dojo.deprecated("InlineEditBox: Use value parameter instead of textValue; will be removed in 0.5");
-this.value=this.textValue;
-}
-if(this.defaultText){
-dojo.deprecated("InlineEditBox: Use value parameter instead of defaultText; will be removed in 0.5");
-this.value=this.defaultText;
-}
-},postCreate:function(_1,_2){
-this.editable=this.getFragNodeRef(_2);
-dojo.html.insertAfter(this.editable,this.form);
-dojo.event.connect(this.editable,"onmouseover",this,"onMouseOver");
-dojo.event.connect(this.editable,"onmouseout",this,"onMouseOut");
-dojo.event.connect(this.editable,"onclick",this,"_beginEdit");
-if(this.value){
-this.editable.innerHTML=this.value;
-return;
-}else{
-this.value=dojo.string.trim(this.editable.innerHTML);
-this.editable.innerHTML=this.value;
-}
-},onMouseOver:function(){
-if(!this.editing){
-if(this.disabled){
-dojo.html.addClass(this.editable,"editableRegionDisabled");
-}else{
-dojo.html.addClass(this.editable,"editableRegion");
-if(this.mode=="textarea"){
-dojo.html.addClass(this.editable,"editableTextareaRegion");
-}
-}
-}
-},onMouseOut:function(){
-if(!this.editing){
-dojo.html.removeClass(this.editable,"editableRegion");
-dojo.html.removeClass(this.editable,"editableTextareaRegion");
-dojo.html.removeClass(this.editable,"editableRegionDisabled");
-}
-},_beginEdit:function(e){
-if(this.editing||this.disabled){
-return;
-}
-this.onMouseOut();
-this.editing=true;
-var ee=this[this.mode.toLowerCase()];
-ee.value=dojo.string.trim(this.value);
-ee.style.fontSize=dojo.html.getStyle(this.editable,"font-size");
-ee.style.fontWeight=dojo.html.getStyle(this.editable,"font-weight");
-ee.style.fontStyle=dojo.html.getStyle(this.editable,"font-style");
-var bb=dojo.html.getBorderBox(this.editable);
-ee.style.width=Math.max(bb.width,this.minWidth)+"px";
-if(this.mode.toLowerCase()=="textarea"){
-ee.style.display="block";
-ee.style.height=Math.max(bb.height,this.minHeight)+"px";
-}else{
-ee.style.display="";
-}
-this.form.style.display="";
-this.editable.style.display="none";
-ee.focus();
-ee.select();
-this.submitButton.disabled=true;
-},saveEdit:function(e){
-e.preventDefault();
-e.stopPropagation();
-var ee=this[this.mode.toLowerCase()];
-if((this.value!=ee.value)&&(dojo.string.trim(ee.value)!="")){
-this.doFade=true;
-this.history.push(this.value);
-this.onSave(ee.value,this.value,this.name);
-this.value=ee.value;
-this.editable.innerHTML="";
-var _8=document.createTextNode(this.value);
-this.editable.appendChild(_8);
-}else{
-this.doFade=false;
-}
-this._finishEdit(e);
-},_stopEditing:function(){
-this.editing=false;
-this.form.style.display="none";
-this.editable.style.display="";
-return true;
-},cancelEdit:function(e){
-this._stopEditing();
-this.onCancel();
-return true;
-},_finishEdit:function(e){
-this._stopEditing();
-if(this.doFade){
-dojo.lfx.highlight(this.editable,dojo.gfx.color.hex2rgb("#ffc"),700).play(300);
-}
-this.doFade=false;
-},setText:function(_b){
-dojo.deprecated("setText() is deprecated, call setValue() instead, will be removed in 0.5");
-this.setValue(_b);
-},setValue:function(_c){
-_c=""+_c;
-var tt=dojo.string.trim(_c);
-this.value=tt;
-this.editable.innerHTML=tt;
-},undo:function(){
-if(this.history.length>0){
-var _e=this.value;
-var _f=this.history.pop();
-this.editable.innerHTML=_f;
-this.value=_f;
-this.onUndo(_f);
-this.onSave(_f,_e,this.name);
-}
-},onChange:function(_10,_11){
-},onSave:function(_12,_13,_14){
-},onCancel:function(){
-},checkForValueChange:function(){
-var ee=this[this.mode.toLowerCase()];
-if((this.value!=ee.value)&&(dojo.string.trim(ee.value)!="")){
-this.submitButton.disabled=false;
-}
-this.onChange(this.value,ee.value);
-},disable:function(){
-this.submitButton.disabled=true;
-this.cancelButton.disabled=true;
-var ee=this[this.mode.toLowerCase()];
-ee.disabled=true;
-dojo.widget.InlineEditBox.superclass.disable.apply(this,arguments);
-},enable:function(){
-this.checkForValueChange();
-this.cancelButton.disabled=false;
-var ee=this[this.mode.toLowerCase()];
-ee.disabled=false;
-dojo.widget.InlineEditBox.superclass.enable.apply(this,arguments);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/IntegerTextbox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/IntegerTextbox.js
deleted file mode 100644
index 06e6c2a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/IntegerTextbox.js
+++ /dev/null
@@ -1,29 +0,0 @@
-dojo.provide("dojo.widget.IntegerTextbox");
-dojo.require("dojo.widget.ValidationTextbox");
-dojo.require("dojo.validate.common");
-dojo.widget.defineWidget("dojo.widget.IntegerTextbox",dojo.widget.ValidationTextbox,{mixInProperties:function(_1,_2){
-dojo.widget.IntegerTextbox.superclass.mixInProperties.apply(this,arguments);
-if((_1.signed=="true")||(_1.signed=="always")){
-this.flags.signed=true;
-}else{
-if((_1.signed=="false")||(_1.signed=="never")){
-this.flags.signed=false;
-this.flags.min=0;
-}else{
-this.flags.signed=[true,false];
-}
-}
-if(_1.separator){
-this.flags.separator=_1.separator;
-}
-if(_1.min){
-this.flags.min=parseInt(_1.min);
-}
-if(_1.max){
-this.flags.max=parseInt(_1.max);
-}
-},isValid:function(){
-return dojo.validate.isInteger(this.textbox.value,this.flags);
-},isInRange:function(){
-return dojo.validate.isInRange(this.textbox.value,this.flags);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/InternetTextbox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/InternetTextbox.js
deleted file mode 100644
index 67dcf37..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/InternetTextbox.js
+++ /dev/null
@@ -1,65 +0,0 @@
-dojo.provide("dojo.widget.InternetTextbox");
-dojo.require("dojo.widget.ValidationTextbox");
-dojo.require("dojo.validate.web");
-dojo.widget.defineWidget("dojo.widget.IpAddressTextbox",dojo.widget.ValidationTextbox,{mixInProperties:function(_1){
-dojo.widget.IpAddressTextbox.superclass.mixInProperties.apply(this,arguments);
-if(_1.allowdotteddecimal){
-this.flags.allowDottedDecimal=(_1.allowdotteddecimal=="true");
-}
-if(_1.allowdottedhex){
-this.flags.allowDottedHex=(_1.allowdottedhex=="true");
-}
-if(_1.allowdottedoctal){
-this.flags.allowDottedOctal=(_1.allowdottedoctal=="true");
-}
-if(_1.allowdecimal){
-this.flags.allowDecimal=(_1.allowdecimal=="true");
-}
-if(_1.allowhex){
-this.flags.allowHex=(_1.allowhex=="true");
-}
-if(_1.allowipv6){
-this.flags.allowIPv6=(_1.allowipv6=="true");
-}
-if(_1.allowhybrid){
-this.flags.allowHybrid=(_1.allowhybrid=="true");
-}
-},isValid:function(){
-return dojo.validate.isIpAddress(this.textbox.value,this.flags);
-}});
-dojo.widget.defineWidget("dojo.widget.UrlTextbox",dojo.widget.IpAddressTextbox,{mixInProperties:function(_2){
-dojo.widget.UrlTextbox.superclass.mixInProperties.apply(this,arguments);
-if(_2.scheme){
-this.flags.scheme=(_2.scheme=="true");
-}
-if(_2.allowip){
-this.flags.allowIP=(_2.allowip=="true");
-}
-if(_2.allowlocal){
-this.flags.allowLocal=(_2.allowlocal=="true");
-}
-if(_2.allowcc){
-this.flags.allowCC=(_2.allowcc=="true");
-}
-if(_2.allowgeneric){
-this.flags.allowGeneric=(_2.allowgeneric=="true");
-}
-},isValid:function(){
-return dojo.validate.isUrl(this.textbox.value,this.flags);
-}});
-dojo.widget.defineWidget("dojo.widget.EmailTextbox",dojo.widget.UrlTextbox,{mixInProperties:function(_3){
-dojo.widget.EmailTextbox.superclass.mixInProperties.apply(this,arguments);
-if(_3.allowcruft){
-this.flags.allowCruft=(_3.allowcruft=="true");
-}
-},isValid:function(){
-return dojo.validate.isEmailAddress(this.textbox.value,this.flags);
-}});
-dojo.widget.defineWidget("dojo.widget.EmailListTextbox",dojo.widget.EmailTextbox,{mixInProperties:function(_4){
-dojo.widget.EmailListTextbox.superclass.mixInProperties.apply(this,arguments);
-if(_4.listseparator){
-this.flags.listSeparator=_4.listseparator;
-}
-},isValid:function(){
-return dojo.validate.isEmailAddressList(this.textbox.value,this.flags);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/LayoutContainer.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/LayoutContainer.js
deleted file mode 100644
index f3380e7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/LayoutContainer.js
+++ /dev/null
@@ -1,21 +0,0 @@
-dojo.provide("dojo.widget.LayoutContainer");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.html.layout");
-dojo.widget.defineWidget("dojo.widget.LayoutContainer",dojo.widget.HtmlWidget,{isContainer:true,layoutChildPriority:"top-bottom",postCreate:function(){
-dojo.widget.html.layout(this.domNode,this.children,this.layoutChildPriority);
-},addChild:function(_1,_2,_3,_4,_5){
-dojo.widget.LayoutContainer.superclass.addChild.call(this,_1,_2,_3,_4,_5);
-dojo.widget.html.layout(this.domNode,this.children,this.layoutChildPriority);
-},removeChild:function(_6){
-dojo.widget.LayoutContainer.superclass.removeChild.call(this,_6);
-dojo.widget.html.layout(this.domNode,this.children,this.layoutChildPriority);
-},onResized:function(){
-dojo.widget.html.layout(this.domNode,this.children,this.layoutChildPriority);
-},show:function(){
-this.domNode.style.display="";
-this.checkSize();
-this.domNode.style.display="none";
-this.domNode.style.visibility="";
-dojo.widget.LayoutContainer.superclass.show.call(this);
-}});
-dojo.lang.extend(dojo.widget.Widget,{layoutAlign:"none"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/LinkPane.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/LinkPane.js
deleted file mode 100644
index 2fb6a4f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/LinkPane.js
+++ /dev/null
@@ -1,10 +0,0 @@
-dojo.provide("dojo.widget.LinkPane");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.ContentPane");
-dojo.require("dojo.html.style");
-dojo.widget.defineWidget("dojo.widget.LinkPane",dojo.widget.ContentPane,{templateString:"<div class=\"dojoLinkPane\"></div>",fillInTemplate:function(_1,_2){
-var _3=this.getFragNodeRef(_2);
-this.label+=_3.innerHTML;
-var _3=this.getFragNodeRef(_2);
-dojo.html.copyStyle(this.domNode,_3);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Manager.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Manager.js
deleted file mode 100644
index c82373e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Manager.js
+++ /dev/null
@@ -1,275 +0,0 @@
-dojo.provide("dojo.widget.Manager");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.event.*");
-dojo.widget.manager=new function(){
-this.widgets=[];
-this.widgetIds=[];
-this.topWidgets={};
-var _1={};
-var _2=[];
-this.getUniqueId=function(_3){
-var _4;
-do{
-_4=_3+"_"+(_1[_3]!=undefined?++_1[_3]:_1[_3]=0);
-}while(this.getWidgetById(_4));
-return _4;
-};
-this.add=function(_5){
-this.widgets.push(_5);
-if(!_5.extraArgs["id"]){
-_5.extraArgs["id"]=_5.extraArgs["ID"];
-}
-if(_5.widgetId==""){
-if(_5["id"]){
-_5.widgetId=_5["id"];
-}else{
-if(_5.extraArgs["id"]){
-_5.widgetId=_5.extraArgs["id"];
-}else{
-_5.widgetId=this.getUniqueId(_5.ns+"_"+_5.widgetType);
-}
-}
-}
-if(this.widgetIds[_5.widgetId]){
-dojo.debug("widget ID collision on ID: "+_5.widgetId);
-}
-this.widgetIds[_5.widgetId]=_5;
-};
-this.destroyAll=function(){
-for(var x=this.widgets.length-1;x>=0;x--){
-try{
-this.widgets[x].destroy(true);
-delete this.widgets[x];
-}
-catch(e){
-}
-}
-};
-this.remove=function(_7){
-if(dojo.lang.isNumber(_7)){
-var tw=this.widgets[_7].widgetId;
-delete this.topWidgets[tw];
-delete this.widgetIds[tw];
-this.widgets.splice(_7,1);
-}else{
-this.removeById(_7);
-}
-};
-this.removeById=function(id){
-if(!dojo.lang.isString(id)){
-id=id["widgetId"];
-if(!id){
-dojo.debug("invalid widget or id passed to removeById");
-return;
-}
-}
-for(var i=0;i<this.widgets.length;i++){
-if(this.widgets[i].widgetId==id){
-this.remove(i);
-break;
-}
-}
-};
-this.getWidgetById=function(id){
-if(dojo.lang.isString(id)){
-return this.widgetIds[id];
-}
-return id;
-};
-this.getWidgetsByType=function(_c){
-var lt=_c.toLowerCase();
-var _e=(_c.indexOf(":")<0?function(x){
-return x.widgetType.toLowerCase();
-}:function(x){
-return x.getNamespacedType();
-});
-var ret=[];
-dojo.lang.forEach(this.widgets,function(x){
-if(_e(x)==lt){
-ret.push(x);
-}
-});
-return ret;
-};
-this.getWidgetsByFilter=function(_13,_14){
-var ret=[];
-dojo.lang.every(this.widgets,function(x){
-if(_13(x)){
-ret.push(x);
-if(_14){
-return false;
-}
-}
-return true;
-});
-return (_14?ret[0]:ret);
-};
-this.getAllWidgets=function(){
-return this.widgets.concat();
-};
-this.getWidgetByNode=function(_17){
-var w=this.getAllWidgets();
-_17=dojo.byId(_17);
-for(var i=0;i<w.length;i++){
-if(w[i].domNode==_17){
-return w[i];
-}
-}
-return null;
-};
-this.byId=this.getWidgetById;
-this.byType=this.getWidgetsByType;
-this.byFilter=this.getWidgetsByFilter;
-this.byNode=this.getWidgetByNode;
-var _1a={};
-var _1b=["dojo.widget"];
-for(var i=0;i<_1b.length;i++){
-_1b[_1b[i]]=true;
-}
-this.registerWidgetPackage=function(_1d){
-if(!_1b[_1d]){
-_1b[_1d]=true;
-_1b.push(_1d);
-}
-};
-this.getWidgetPackageList=function(){
-return dojo.lang.map(_1b,function(elt){
-return (elt!==true?elt:undefined);
-});
-};
-this.getImplementation=function(_1f,_20,_21,ns){
-var _23=this.getImplementationName(_1f,ns);
-if(_23){
-var ret=_20?new _23(_20):new _23();
-return ret;
-}
-};
-function buildPrefixCache(){
-for(var _25 in dojo.render){
-if(dojo.render[_25]["capable"]===true){
-var _26=dojo.render[_25].prefixes;
-for(var i=0;i<_26.length;i++){
-_2.push(_26[i].toLowerCase());
-}
-}
-}
-}
-var _28=function(_29,_2a){
-if(!_2a){
-return null;
-}
-for(var i=0,l=_2.length,_2d;i<=l;i++){
-_2d=(i<l?_2a[_2[i]]:_2a);
-if(!_2d){
-continue;
-}
-for(var _2e in _2d){
-if(_2e.toLowerCase()==_29){
-return _2d[_2e];
-}
-}
-}
-return null;
-};
-var _2f=function(_30,_31){
-var _32=dojo.evalObjPath(_31,false);
-return (_32?_28(_30,_32):null);
-};
-this.getImplementationName=function(_33,ns){
-var _35=_33.toLowerCase();
-ns=ns||"dojo";
-var _36=_1a[ns]||(_1a[ns]={});
-var _37=_36[_35];
-if(_37){
-return _37;
-}
-if(!_2.length){
-buildPrefixCache();
-}
-var _38=dojo.ns.get(ns);
-if(!_38){
-dojo.ns.register(ns,ns+".widget");
-_38=dojo.ns.get(ns);
-}
-if(_38){
-_38.resolve(_33);
-}
-_37=_2f(_35,_38.module);
-if(_37){
-return (_36[_35]=_37);
-}
-_38=dojo.ns.require(ns);
-if((_38)&&(_38.resolver)){
-_38.resolve(_33);
-_37=_2f(_35,_38.module);
-if(_37){
-return (_36[_35]=_37);
-}
-}
-dojo.deprecated("dojo.widget.Manager.getImplementationName","Could not locate widget implementation for \""+_33+"\" in \""+_38.module+"\" registered to namespace \""+_38.name+"\". "+"Developers must specify correct namespaces for all non-Dojo widgets","0.5");
-for(var i=0;i<_1b.length;i++){
-_37=_2f(_35,_1b[i]);
-if(_37){
-return (_36[_35]=_37);
-}
-}
-throw new Error("Could not locate widget implementation for \""+_33+"\" in \""+_38.module+"\" registered to namespace \""+_38.name+"\"");
-};
-this.resizing=false;
-this.onWindowResized=function(){
-if(this.resizing){
-return;
-}
-try{
-this.resizing=true;
-for(var id in this.topWidgets){
-var _3b=this.topWidgets[id];
-if(_3b.checkSize){
-_3b.checkSize();
-}
-}
-}
-catch(e){
-}
-finally{
-this.resizing=false;
-}
-};
-if(typeof window!="undefined"){
-dojo.addOnLoad(this,"onWindowResized");
-dojo.event.connect(window,"onresize",this,"onWindowResized");
-}
-};
-(function(){
-var dw=dojo.widget;
-var dwm=dw.manager;
-var h=dojo.lang.curry(dojo.lang,"hitch",dwm);
-var g=function(_40,_41){
-dw[(_41||_40)]=h(_40);
-};
-g("add","addWidget");
-g("destroyAll","destroyAllWidgets");
-g("remove","removeWidget");
-g("removeById","removeWidgetById");
-g("getWidgetById");
-g("getWidgetById","byId");
-g("getWidgetsByType");
-g("getWidgetsByFilter");
-g("getWidgetsByType","byType");
-g("getWidgetsByFilter","byFilter");
-g("getWidgetByNode","byNode");
-dw.all=function(n){
-var _43=dwm.getAllWidgets.apply(dwm,arguments);
-if(arguments.length>0){
-return _43[n];
-}
-return _43;
-};
-g("registerWidgetPackage");
-g("getImplementation","getWidgetImplementation");
-g("getImplementationName","getWidgetImplementationName");
-dw.widgets=dwm.widgets;
-dw.widgetIds=dwm.widgetIds;
-dw.root=dwm.root;
-})();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Menu2.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Menu2.js
deleted file mode 100644
index 6c0d512..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Menu2.js
+++ /dev/null
@@ -1,442 +0,0 @@
-dojo.provide("dojo.widget.Menu2");
-dojo.require("dojo.widget.PopupContainer");
-dojo.declare("dojo.widget.MenuBase",null,function(){
-this.eventNames={open:""};
-},{isContainer:true,isMenu:true,eventNaming:"default",templateCssString:"\n.dojoPopupMenu2 {\n\tposition: absolute;\n\tborder: 1px solid #7298d0;\n\tbackground:#85aeec url(images/soriaMenuBg.gif) repeat-x bottom left !important;\n\tpadding: 1px;\n\tmargin-top: 1px;\n\tmargin-bottom: 1px;\n}\n\n.dojoMenuItem2{\n\twhite-space: nowrap;\n\tfont: menu;\n\tmargin: 0;\n}\n\n.dojoMenuItem2Hover {\n\tbackground-color: #D2E4FD;\n\tcursor:pointer;\n\tcursor:hand;\n}\n\n.dojoMenuItem2Icon {\n\tposition: relative;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n\twidth: 16px;\n\theight: 16px;\n\tpadding-right: 3px;\n}\n\n.dojoMenuItem2Label {\n\tposition: relative;\n\tvertical-align: middle;\n}\n\n/* main label text */\n.dojoMenuItem2Label {\n\tposition: relative;\n\tvertical-align: middle;\n}\n\n.dojoMenuItem2Accel {\n\tposition: relative;\n\tvertical-align: middle;\n\tpadding-left: 3px;\n}\n\n.dojoMenuItem2Disabled .dojoMenuItem2Label,\n.dojoMenuItem2Disabled .dojoMenuItem2Accel {\n\tcolor: #607a9e;\n}\n\n.dojoMenuItem2Submenu {\n\tposition: relative;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n\tbackground-image: url(images/submenu_off.gif);\n\twidth: 5px;\n\theight: 9px;\n\tpadding-left: 3px;\n}\n.dojoMenuItem2Hover .dojoMenuItem2Submenu {\n\tbackground-image: url(images/submenu_on.gif);\n}\n\n.dojoMenuItem2Disabled .dojoMenuItem2Submenu {\n\tbackground-image: url(images/submenu_disabled.gif);\n}\n\n.dojoMenuSeparator2 {\n\tfont-size: 1px;\n\tmargin: 0;\n}\n\n.dojoMenuSeparator2Top {\n\theight: 50%;\n\tborder-bottom: 1px solid #7a98c4;\n\tmargin: 0px 2px;\n\tfont-size: 1px;\n}\n\n.dojoMenuSeparator2Bottom {\n\theight: 50%;\n\tborder-top: 1px solid #c9deff;\n\tmargin: 0px 2px;\n\tfont-size: 1px;\n}\n\n.dojoMenuBar2 {\n\tbackground:#85aeec url(images/soriaBarBg.gif) repeat-x top left;\n\t/*border-bottom:1px solid #6b9fec;*/\n\tpadding: 1px;\n}\n\n.dojoMenuBar2 .dojoMenuItem2 {\n\twhite-space: nowrap;\n\tfont: menu;\n\tmargin: 0;\n\tposition: relative;\n\tvertical-align: middle;\n\tz-index: 1;\n\tpadding: 3px 8px;\n\tdisplay: inline;/* needed in khtml to display correctly */\n\tdisplay: -moz-inline-box;/* needed in firefox */\n\tcursor:pointer;\n\tcursor:hand;\n}\n\n.dojoMenuBar2 .dojoMenuItem2Hover {\n\tbackground-color:#d2e4fd;\n}\n\n.dojoMenuBar2 .dojoMenuItem2Disabled span {\n\tcolor: #4f6582;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/Menu2.css"),submenuDelay:500,initialize:function(_1,_2){
-if(this.eventNaming=="default"){
-for(var _3 in this.eventNames){
-this.eventNames[_3]=this.widgetId+"/"+_3;
-}
-}
-},_moveToNext:function(_4){
-this._highlightOption(1);
-return true;
-},_moveToPrevious:function(_5){
-this._highlightOption(-1);
-return true;
-},_moveToParentMenu:function(_6){
-if(this._highlighted_option&&this.parentMenu){
-if(_6._menu2UpKeyProcessed){
-return true;
-}else{
-this._highlighted_option.onUnhover();
-this.closeSubmenu();
-_6._menu2UpKeyProcessed=true;
-}
-}
-return false;
-},_moveToChildMenu:function(_7){
-if(this._highlighted_option&&this._highlighted_option.submenuId){
-this._highlighted_option._onClick(true);
-return true;
-}
-return false;
-},_selectCurrentItem:function(_8){
-if(this._highlighted_option){
-this._highlighted_option._onClick();
-return true;
-}
-return false;
-},processKey:function(_9){
-if(_9.ctrlKey||_9.altKey||!_9.key){
-return false;
-}
-var _a=false;
-switch(_9.key){
-case _9.KEY_DOWN_ARROW:
-_a=this._moveToNext(_9);
-break;
-case _9.KEY_UP_ARROW:
-_a=this._moveToPrevious(_9);
-break;
-case _9.KEY_RIGHT_ARROW:
-_a=this._moveToChildMenu(_9);
-break;
-case _9.KEY_LEFT_ARROW:
-_a=this._moveToParentMenu(_9);
-break;
-case " ":
-case _9.KEY_ENTER:
-if(_a=this._selectCurrentItem(_9)){
-break;
-}
-case _9.KEY_ESCAPE:
-case _9.KEY_TAB:
-this.close(true);
-_a=true;
-break;
-}
-return _a;
-},_findValidItem:function(_b,_c){
-if(_c){
-_c=_b>0?_c.getNextSibling():_c.getPreviousSibling();
-}
-for(var i=0;i<this.children.length;++i){
-if(!_c){
-_c=_b>0?this.children[0]:this.children[this.children.length-1];
-}
-if(_c.onHover&&_c.isShowing()){
-return _c;
-}
-_c=_b>0?_c.getNextSibling():_c.getPreviousSibling();
-}
-},_highlightOption:function(_e){
-var _f;
-if((!this._highlighted_option)){
-_f=this._findValidItem(_e);
-}else{
-_f=this._findValidItem(_e,this._highlighted_option);
-}
-if(_f){
-if(this._highlighted_option){
-this._highlighted_option.onUnhover();
-}
-_f.onHover();
-dojo.html.scrollIntoView(_f.domNode);
-try{
-var _10=dojo.html.getElementsByClass("dojoMenuItem2Label",_f.domNode)[0];
-_10.focus();
-}
-catch(e){
-}
-}
-},onItemClick:function(_11){
-},closeSubmenu:function(_12){
-if(this.currentSubmenu==null){
-return;
-}
-this.currentSubmenu.close(_12);
-this.currentSubmenu=null;
-this.currentSubmenuTrigger.is_open=false;
-this.currentSubmenuTrigger._closedSubmenu(_12);
-this.currentSubmenuTrigger=null;
-}});
-dojo.widget.defineWidget("dojo.widget.PopupMenu2",[dojo.widget.HtmlWidget,dojo.widget.PopupContainerBase,dojo.widget.MenuBase],function(){
-this.targetNodeIds=[];
-},{templateString:"<table class=\"dojoPopupMenu2\" border=0 cellspacing=0 cellpadding=0 style=\"display: none; position: absolute;\">"+"<tbody dojoAttachPoint=\"containerNode\"></tbody>"+"</table>",submenuOverlap:5,contextMenuForWindow:false,parentMenu:null,postCreate:function(){
-if(this.contextMenuForWindow){
-var doc=dojo.body();
-this.bindDomNode(doc);
-}else{
-if(this.targetNodeIds.length>0){
-dojo.lang.forEach(this.targetNodeIds,this.bindDomNode,this);
-}
-}
-this._subscribeSubitemsOnOpen();
-},_subscribeSubitemsOnOpen:function(){
-var _14=this.getChildrenOfType(dojo.widget.MenuItem2);
-for(var i=0;i<_14.length;i++){
-dojo.event.topic.subscribe(this.eventNames.open,_14[i],"menuOpen");
-}
-},getTopOpenEvent:function(){
-var _16=this;
-while(_16.parentMenu){
-_16=_16.parentMenu;
-}
-return _16.openEvent;
-},bindDomNode:function(_17){
-_17=dojo.byId(_17);
-var win=dojo.html.getElementWindow(_17);
-if(dojo.html.isTag(_17,"iframe")=="iframe"){
-win=dojo.html.iframeContentWindow(_17);
-_17=dojo.withGlobal(win,dojo.body);
-}
-dojo.widget.Menu2.OperaAndKonqFixer.fixNode(_17);
-dojo.event.kwConnect({srcObj:_17,srcFunc:"oncontextmenu",targetObj:this,targetFunc:"onOpen",once:true});
-if(dojo.render.html.moz&&win.document.designMode.toLowerCase()=="on"){
-dojo.event.browser.addListener(_17,"contextmenu",dojo.lang.hitch(this,"onOpen"));
-}
-dojo.widget.PopupManager.registerWin(win);
-},unBindDomNode:function(_19){
-var _1a=dojo.byId(_19);
-dojo.event.kwDisconnect({srcObj:_1a,srcFunc:"oncontextmenu",targetObj:this,targetFunc:"onOpen",once:true});
-dojo.widget.Menu2.OperaAndKonqFixer.cleanNode(_1a);
-},_openAsSubmenu:function(_1b,_1c,_1d){
-if(this.isShowingNow){
-return;
-}
-this.parentMenu=_1b;
-this.open(_1c,_1b,_1c,_1d);
-},close:function(_1e){
-if(this.animationInProgress){
-dojo.widget.PopupContainerBase.prototype.close.call(this,_1e);
-return;
-}
-if(this._highlighted_option){
-this._highlighted_option.onUnhover();
-}
-dojo.widget.PopupContainerBase.prototype.close.call(this,_1e);
-this.parentMenu=null;
-},closeAll:function(_1f){
-if(this.parentMenu){
-this.parentMenu.closeAll(_1f);
-}else{
-this.close(_1f);
-}
-},_openSubmenu:function(_20,_21){
-_20._openAsSubmenu(this,_21.arrow,{"TR":"TL","TL":"TR"});
-this.currentSubmenu=_20;
-this.currentSubmenuTrigger=_21;
-this.currentSubmenuTrigger.is_open=true;
-},focus:function(){
-if(this.currentSubmenuTrigger){
-if(this.currentSubmenuTrigger.caption){
-try{
-this.currentSubmenuTrigger.caption.focus();
-}
-catch(e){
-}
-}else{
-try{
-this.currentSubmenuTrigger.domNode.focus();
-}
-catch(e){
-}
-}
-}
-},onOpen:function(e){
-this.openEvent=e;
-if(e["target"]){
-this.openedForWindow=dojo.html.getElementWindow(e.target);
-}else{
-this.openedForWindow=null;
-}
-var x=e.pageX,y=e.pageY;
-var win=dojo.html.getElementWindow(e.target);
-var _26=win._frameElement||win.frameElement;
-if(_26){
-var _27=dojo.html.abs(_26,true);
-x+=_27.x-dojo.withGlobal(win,dojo.html.getScroll).left;
-y+=_27.y-dojo.withGlobal(win,dojo.html.getScroll).top;
-}
-this.open(x,y,null,[x,y]);
-dojo.event.browser.stopEvent(e);
-}});
-dojo.widget.defineWidget("dojo.widget.MenuItem2",dojo.widget.HtmlWidget,function(){
-this.eventNames={engage:""};
-},{templateString:"<tr class=\"dojoMenuItem2\" dojoAttachEvent=\"onMouseOver: onHover; onMouseOut: onUnhover; onClick: _onClick; onKey:onKey;\">"+"<td><div class=\"${this.iconClass}\" style=\"${this.iconStyle}\"></div></td>"+"<td tabIndex=\"-1\" class=\"dojoMenuItem2Label\" dojoAttachPoint=\"caption\">${this.caption}</td>"+"<td class=\"dojoMenuItem2Accel\">${this.accelKey}</td>"+"<td><div class=\"dojoMenuItem2Submenu\" style=\"display:${this.arrowDisplay};\" dojoAttachPoint=\"arrow\"></div></td>"+"</tr>",is_hovering:false,hover_timer:null,is_open:false,topPosition:0,caption:"Untitled",accelKey:"",iconSrc:"",disabledClass:"dojoMenuItem2Disabled",iconClass:"dojoMenuItem2Icon",submenuId:"",eventNaming:"default",highlightClass:"dojoMenuItem2Hover",postMixInProperties:function(){
-this.iconStyle="";
-if(this.iconSrc){
-if((this.iconSrc.toLowerCase().substring(this.iconSrc.length-4)==".png")&&(dojo.render.html.ie55||dojo.render.html.ie60)){
-this.iconStyle="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.iconSrc+"', sizingMethod='image')";
-}else{
-this.iconStyle="background-image: url("+this.iconSrc+")";
-}
-}
-this.arrowDisplay=this.submenuId?"block":"none";
-dojo.widget.MenuItem2.superclass.postMixInProperties.apply(this,arguments);
-},fillInTemplate:function(){
-dojo.html.disableSelection(this.domNode);
-if(this.disabled){
-this.setDisabled(true);
-}
-if(this.eventNaming=="default"){
-for(var _28 in this.eventNames){
-this.eventNames[_28]=this.widgetId+"/"+_28;
-}
-}
-},onHover:function(){
-this.onUnhover();
-if(this.is_hovering){
-return;
-}
-if(this.is_open){
-return;
-}
-if(this.parent._highlighted_option){
-this.parent._highlighted_option.onUnhover();
-}
-this.parent.closeSubmenu();
-this.parent._highlighted_option=this;
-dojo.widget.PopupManager.setFocusedMenu(this.parent);
-this._highlightItem();
-if(this.is_hovering){
-this._stopSubmenuTimer();
-}
-this.is_hovering=true;
-this._startSubmenuTimer();
-},onUnhover:function(){
-if(!this.is_open){
-this._unhighlightItem();
-}
-this.is_hovering=false;
-this.parent._highlighted_option=null;
-if(this.parent.parentMenu){
-dojo.widget.PopupManager.setFocusedMenu(this.parent.parentMenu);
-}
-this._stopSubmenuTimer();
-},_onClick:function(_29){
-var _2a=false;
-if(this.disabled){
-return false;
-}
-if(this.submenuId){
-if(!this.is_open){
-this._stopSubmenuTimer();
-this._openSubmenu();
-}
-_2a=true;
-}else{
-this.onUnhover();
-this.parent.closeAll(true);
-}
-this.onClick();
-dojo.event.topic.publish(this.eventNames.engage,this);
-if(_2a&&_29){
-dojo.widget.getWidgetById(this.submenuId)._highlightOption(1);
-}
-return;
-},onClick:function(){
-this.parent.onItemClick(this);
-},_highlightItem:function(){
-dojo.html.addClass(this.domNode,this.highlightClass);
-},_unhighlightItem:function(){
-dojo.html.removeClass(this.domNode,this.highlightClass);
-},_startSubmenuTimer:function(){
-this._stopSubmenuTimer();
-if(this.disabled){
-return;
-}
-var _2b=this;
-var _2c=function(){
-return function(){
-_2b._openSubmenu();
-};
-}();
-this.hover_timer=dojo.lang.setTimeout(_2c,this.parent.submenuDelay);
-},_stopSubmenuTimer:function(){
-if(this.hover_timer){
-dojo.lang.clearTimeout(this.hover_timer);
-this.hover_timer=null;
-}
-},_openSubmenu:function(){
-if(this.disabled){
-return;
-}
-this.parent.closeSubmenu();
-var _2d=dojo.widget.getWidgetById(this.submenuId);
-if(_2d){
-this.parent._openSubmenu(_2d,this);
-}
-},_closedSubmenu:function(){
-this.onUnhover();
-},setDisabled:function(_2e){
-this.disabled=_2e;
-if(this.disabled){
-dojo.html.addClass(this.domNode,this.disabledClass);
-}else{
-dojo.html.removeClass(this.domNode,this.disabledClass);
-}
-},enable:function(){
-this.setDisabled(false);
-},disable:function(){
-this.setDisabled(true);
-},menuOpen:function(_2f){
-}});
-dojo.widget.defineWidget("dojo.widget.MenuSeparator2",dojo.widget.HtmlWidget,{templateString:"<tr class=\"dojoMenuSeparator2\"><td colspan=4>"+"<div class=\"dojoMenuSeparator2Top\"></div>"+"<div class=\"dojoMenuSeparator2Bottom\"></div>"+"</td></tr>",postCreate:function(){
-dojo.html.disableSelection(this.domNode);
-}});
-dojo.widget.defineWidget("dojo.widget.MenuBar2",[dojo.widget.HtmlWidget,dojo.widget.MenuBase],{menuOverlap:2,templateString:"<div class=\"dojoMenuBar2\" dojoAttachPoint=\"containerNode\" tabIndex=\"0\"></div>",close:function(_30){
-if(this._highlighted_option){
-this._highlighted_option.onUnhover();
-}
-this.closeSubmenu(_30);
-},closeAll:function(_31){
-this.close(_31);
-},processKey:function(evt){
-if(evt.ctrlKey||evt.altKey){
-return false;
-}
-var _33=false;
-switch(evt.key){
-case evt.KEY_DOWN_ARROW:
-_33=this._moveToChildMenu(evt);
-break;
-case evt.KEY_UP_ARROW:
-_33=this._moveToParentMenu(evt);
-break;
-case evt.KEY_RIGHT_ARROW:
-_33=this._moveToNext(evt);
-break;
-case evt.KEY_LEFT_ARROW:
-_33=this._moveToPrevious(evt);
-break;
-default:
-_33=dojo.widget.MenuBar2.superclass.processKey.apply(this,arguments);
-break;
-}
-return _33;
-},postCreate:function(){
-dojo.widget.MenuBar2.superclass.postCreate.apply(this,arguments);
-this.isShowingNow=true;
-},_openSubmenu:function(_34,_35){
-_34._openAsSubmenu(this,_35.domNode,{"BL":"TL","TL":"BL"});
-this.currentSubmenu=_34;
-this.currentSubmenuTrigger=_35;
-this.currentSubmenuTrigger.is_open=true;
-}});
-dojo.widget.defineWidget("dojo.widget.MenuBarItem2",dojo.widget.MenuItem2,{templateString:"<span class=\"dojoMenuItem2\" dojoAttachEvent=\"onMouseOver: onHover; onMouseOut: onUnhover; onClick: _onClick;\">${this.caption}</span>"});
-dojo.widget.Menu2.OperaAndKonqFixer=new function(){
-var _36=true;
-var _37=false;
-if(!dojo.lang.isFunction(dojo.doc().oncontextmenu)){
-dojo.doc().oncontextmenu=function(){
-_36=false;
-_37=true;
-};
-}
-if(dojo.doc().createEvent){
-try{
-var e=dojo.doc().createEvent("MouseEvents");
-e.initMouseEvent("contextmenu",1,1,dojo.global(),1,0,0,0,0,0,0,0,0,0,null);
-dojo.doc().dispatchEvent(e);
-}
-catch(e){
-}
-}else{
-_36=false;
-}
-if(_37){
-delete dojo.doc().oncontextmenu;
-}
-this.fixNode=function(_39){
-if(_36){
-if(!dojo.lang.isFunction(_39.oncontextmenu)){
-_39.oncontextmenu=function(e){
-};
-}
-if(dojo.render.html.opera){
-_39._menufixer_opera=function(e){
-if(e.ctrlKey){
-this.oncontextmenu(e);
-}
-};
-dojo.event.connect(_39,"onclick",_39,"_menufixer_opera");
-}else{
-_39._menufixer_konq=function(e){
-if(e.button==2){
-e.preventDefault();
-this.oncontextmenu(e);
-}
-};
-dojo.event.connect(_39,"onmousedown",_39,"_menufixer_konq");
-}
-}
-};
-this.cleanNode=function(_3d){
-if(_36){
-if(_3d._menufixer_opera){
-dojo.event.disconnect(_3d,"onclick",_3d,"_menufixer_opera");
-delete _3d._menufixer_opera;
-}else{
-if(_3d._menufixer_konq){
-dojo.event.disconnect(_3d,"onmousedown",_3d,"_menufixer_konq");
-delete _3d._menufixer_konq;
-}
-}
-if(_3d.oncontextmenu){
-delete _3d.oncontextmenu;
-}
-}
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/MonthlyCalendar.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/MonthlyCalendar.js
deleted file mode 100644
index 4a3d5c3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/MonthlyCalendar.js
+++ /dev/null
@@ -1,136 +0,0 @@
-dojo.provide("dojo.widget.MonthlyCalendar");
-dojo.require("dojo.date.common");
-dojo.require("dojo.date.format");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.DatePicker");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.*");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.widget.MonthlyCalendar");
-dojo.widget.defineWidget("dojo.widget.MonthlyCalendar",dojo.widget.DatePicker,{dayWidth:"wide",templateString:"<div class=\"datePickerContainer\" dojoAttachPoint=\"datePickerContainerNode\">\n\t<h3 class=\"monthLabel\">\n\t<!--\n\t<span \n\t\tdojoAttachPoint=\"decreaseWeekNode\" \n\t\tdojoAttachEvent=\"onClick: onIncrementWeek;\" \n\t\tclass=\"incrementControl\">\n\t\t<img src=\"${dojoWidgetModuleUri}templates/decrementWeek.gif\" alt=\"&uarr;\" />\n\t</span>\n\t-->\n\t<span \n\t\tdojoAttachPoint=\"decreaseMonthNode\" \n\t\tdojoAttachEvent=\"onClick: onIncrementMonth;\" class=\"incrementControl\">\n\t\t<img src=\"${dojoWidgetModuleUri}templates/decrementMonth.gif\" \n\t\t\talt=\"&uarr;\" dojoAttachPoint=\"decrementMonthImageNode\">\n\t</span>\n\t<span dojoAttachPoint=\"monthLabelNode\" class=\"month\">July</span>\n\t<span \n\t\tdojoAttachPoint=\"increaseMonthNode\" \n\t\tdojoAttachEvent=\"onClick: onIncrementMonth;\" class=\"incrementControl\">\n\t\t<img src=\"${dojoWidgetModuleUri}templates/incrementMonth.gif\" \n\t\t\talt=\"&darr;\"  dojoAttachPoint=\"incrementMonthImageNode\">\n\t</span>\n\t<!--\n\t\t<span dojoAttachPoint=\"increaseWeekNode\" \n\t\t\tdojoAttachEvent=\"onClick: onIncrementWeek;\" \n\t\t\tclass=\"incrementControl\">\n\t\t\t<img src=\"${dojoWidgetModuleUri}templates/incrementWeek.gif\" \n\t\t\talt=\"&darr;\" />\n\t\t</span>\n\t-->\n\t</h3>\n\t<table class=\"calendarContainer\">\n\t\t<thead>\n\t\t\t<tr dojoAttachPoint=\"dayLabelsRow\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody dojoAttachPoint=\"calendarDatesContainerNode\" \n\t\t\tdojoAttachEvent=\"onClick: onSetDate;\">\n\t\t\t<tr dojoAttachPoint=\"calendarRow0\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t\t<tr dojoAttachPoint=\"calendarRow1\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t\t<tr dojoAttachPoint=\"calendarRow2\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t\t<tr dojoAttachPoint=\"calendarRow3\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t\t<tr dojoAttachPoint=\"calendarRow4\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t\t<tr dojoAttachPoint=\"calendarRow5\">\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t\t<td></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\t<h3 class=\"yearLabel\">\n\t\t<span dojoAttachPoint=\"previousYearLabelNode\"\n\t\t\tdojoAttachEvent=\"onClick: onIncrementYear;\" class=\"previousYear\"></span>\n\t\t<span class=\"selectedYear\" dojoAttachPoint=\"currentYearLabelNode\"></span>\n\t\t<span dojoAttachPoint=\"nextYearLabelNode\" \n\t\t\tdojoAttachEvent=\"onClick: onIncrementYear;\" class=\"nextYear\"></span>\n\t</h3>\n</div>\n",templateCssString:".datePickerContainer {\n\tmargin:0.5em 2em 0.5em 0;\n\t/*width:10em;*/\n\tfloat:left;\n}\n\n.previousMonth {\n\tbackground-color:#bbbbbb;\n}\n\n.currentMonth {\n\tbackground-color:#8f8f8f;\n}\n\n.nextMonth {\n\tbackground-color:#eeeeee;\n}\n\n.currentDate {\n\ttext-decoration:underline;\n\tfont-style:italic;\n}\n\n.selectedItem {\n\tbackground-color:#3a3a3a;\n\tcolor:#ffffff;\n}\n\n.calendarContainer {\n\tborder-collapse:collapse;\n\tborder-spacing:0;\n\tborder-bottom:1px solid #e6e6e6;\n\toverflow: hidden;\n\ttext-align: right;\n}\n\n.calendarContainer thead{\n\tborder-bottom:1px solid #e6e6e6;\n}\n\n.calendarContainer tbody * td {\n        height: 100px;\n        border: 1px solid gray;\n}\n\n.calendarContainer td {\n        width: 100px;\n        padding: 2px;\n\tvertical-align: top;\n}\n\n.monthLabel {\n\tfont-size:0.9em;\n\tfont-weight:400;\n\tmargin:0;\n\ttext-align:center;\n}\n\n.monthLabel .month {\n\tpadding:0 0.4em 0 0.4em;\n}\n\n.yearLabel {\n\tfont-size:0.9em;\n\tfont-weight:400;\n\tmargin:0.25em 0 0 0;\n\ttext-align:right;\n\tcolor:#a3a3a3;\n}\n\n.yearLabel .selectedYear {\n\tcolor:#000;\n\tpadding:0 0.2em;\n}\n\n.nextYear, .previousYear {\n\tcursor:pointer;cursor:hand;\n}\n\n.incrementControl {\n\tcursor:pointer;cursor:hand;\n\twidth:1em;\n}\n\n.dojoMonthlyCalendarEvent {\n\tfont-size:0.7em;\n\toverflow: hidden;\n\tfont-color: grey;\n\twhite-space: nowrap;\n\ttext-align: left;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/MonthlyCalendar.css"),initializer:function(){
-this.iCalendars=[];
-},addCalendar:function(_1){
-dojo.debug("Adding Calendar");
-this.iCalendars.push(_1);
-dojo.debug("Starting init");
-this.initUI();
-dojo.debug("done init");
-},createDayContents:function(_2,_3){
-dojo.html.removeChildren(_2);
-_2.appendChild(document.createTextNode(_3.getDate()));
-for(var x=0;x<this.iCalendars.length;x++){
-var _5=this.iCalendars[x].getEvents(_3);
-if((dojo.lang.isArray(_5))&&(_5.length>0)){
-for(var y=0;y<_5.length;y++){
-var el=document.createElement("div");
-dojo.html.addClass(el,"dojoMonthlyCalendarEvent");
-el.appendChild(document.createTextNode(_5[y].summary.value));
-el.width=dojo.html.getContentBox(_2).width;
-_2.appendChild(el);
-}
-}
-}
-},initUI:function(){
-var _8=dojo.date.getNames("days",this.dayWidth,"standAlone",this.lang);
-var _9=this.dayLabelsRow.getElementsByTagName("td");
-for(var i=0;i<7;i++){
-_9.item(i).innerHTML=_8[i];
-}
-this.selectedIsUsed=false;
-this.currentIsUsed=false;
-var _b="";
-var _c=new Date();
-var _d=this.calendarDatesContainerNode.getElementsByTagName("td");
-var _e;
-_c.setHours(8);
-var _f=new Date(this.firstSaturday.year,this.firstSaturday.month,this.firstSaturday.date,8);
-var _10=new Date(this.firstSaturday.year,this.firstSaturday.month,this.firstSaturday.date+42,8);
-if(this.iCalendars.length>0){
-for(var x=0;x<this.iCalendars.length;x++){
-this.iCalendars[x].preComputeRecurringEvents(_10);
-}
-}
-if(this.firstSaturday.date<7){
-var _12=6;
-for(var i=this.firstSaturday.date;i>0;i--){
-_e=_d.item(_12);
-this.createDayContents(_e,_f);
-dojo.html.setClass(_e,this.getDateClassName(_f,"current"));
-_12--;
-_c=_f;
-_f=this.incrementDate(_f,false);
-}
-for(var i=_12;i>-1;i--){
-_e=_d.item(i);
-this.createDayContents(_e,_f);
-dojo.html.setClass(_e,this.getDateClassName(_f,"previous"));
-_c=_f;
-_f=this.incrementDate(_f,false);
-}
-}else{
-_f.setDate(1);
-for(var i=0;i<7;i++){
-_e=_d.item(i);
-this.createDayContents(_e,_f);
-dojo.html.setClass(_e,this.getDateClassName(_f,"current"));
-_c=_f;
-_f=this.incrementDate(_f,true);
-}
-}
-_c.setDate(this.firstSaturday.date);
-_c.setMonth(this.firstSaturday.month);
-_c.setFullYear(this.firstSaturday.year);
-_f=this.incrementDate(_c,true);
-var _13=7;
-_e=_d.item(_13);
-while((_f.getMonth()==_c.getMonth())&&(_13<42)){
-this.createDayContents(_e,_f);
-dojo.html.setClass(_e,this.getDateClassName(_f,"current"));
-_e=_d.item(++_13);
-_c=_f;
-_f=this.incrementDate(_f,true);
-}
-while(_13<42){
-this.createDayContents(_e,_f);
-dojo.html.setClass(_e,this.getDateClassName(_f,"next"));
-_e=_d.item(++_13);
-_c=_f;
-_f=this.incrementDate(_f,true);
-}
-this.setMonthLabel(this.firstSaturday.month);
-this.setYearLabels(this.firstSaturday.year);
-}});
-dojo.widget.MonthlyCalendar.util=new function(){
-this.toRfcDate=function(_14){
-if(!_14){
-_14=this.today;
-}
-var _15=_14.getFullYear();
-var _16=_14.getMonth()+1;
-if(_16<10){
-_16="0"+_16.toString();
-}
-var _17=_14.getDate();
-if(_17<10){
-_17="0"+_17.toString();
-}
-return _15+"-"+_16+"-"+_17+"T00:00:00+00:00";
-};
-this.fromRfcDate=function(_18){
-var _19=_18.split("-");
-if(_19.length<3){
-return new Date();
-}
-return new Date(parseInt(_19[0]),(parseInt(_19[1],10)-1),parseInt(_19[2].substr(0,2),10));
-};
-this.initFirstSaturday=function(_1a,_1b){
-if(!_1a){
-_1a=this.date.getMonth();
-}
-if(!_1b){
-_1b=this.date.getFullYear();
-}
-var _1c=new Date(_1b,_1a,1);
-return {year:_1b,month:_1a,date:7-_1c.getDay()};
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/PageContainer.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/PageContainer.js
deleted file mode 100644
index 3cc38d5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/PageContainer.js
+++ /dev/null
@@ -1,189 +0,0 @@
-dojo.provide("dojo.widget.PageContainer");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.selection");
-dojo.widget.defineWidget("dojo.widget.PageContainer",dojo.widget.HtmlWidget,{isContainer:true,doLayout:true,templateString:"<div dojoAttachPoint='containerNode'></div>",selectedChild:"",fillInTemplate:function(_1,_2){
-var _3=this.getFragNodeRef(_2);
-dojo.html.copyStyle(this.domNode,_3);
-dojo.widget.PageContainer.superclass.fillInTemplate.apply(this,arguments);
-},postCreate:function(_4,_5){
-if(this.children.length){
-dojo.lang.forEach(this.children,this._setupChild,this);
-var _6;
-if(this.selectedChild){
-this.selectChild(this.selectedChild);
-}else{
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].selected){
-this.selectChild(this.children[i]);
-break;
-}
-}
-if(!this.selectedChildWidget){
-this.selectChild(this.children[0]);
-}
-}
-}
-},addChild:function(_8){
-dojo.widget.PageContainer.superclass.addChild.apply(this,arguments);
-this._setupChild(_8);
-this.onResized();
-if(!this.selectedChildWidget){
-this.selectChild(_8);
-}
-},_setupChild:function(_9){
-_9.hide();
-_9.domNode.style.position="relative";
-dojo.event.topic.publish(this.widgetId+"-addChild",_9);
-},removeChild:function(_a){
-dojo.widget.PageContainer.superclass.removeChild.apply(this,arguments);
-if(this._beingDestroyed){
-return;
-}
-dojo.event.topic.publish(this.widgetId+"-removeChild",_a);
-this.onResized();
-if(this.selectedChildWidget===_a){
-this.selectedChildWidget=undefined;
-if(this.children.length>0){
-this.selectChild(this.children[0],true);
-}
-}
-},selectChild:function(_b,_c){
-_b=dojo.widget.byId(_b);
-this.correspondingPageButton=_c;
-if(this.selectedChildWidget){
-this._hideChild(this.selectedChildWidget);
-}
-this.selectedChildWidget=_b;
-this.selectedChild=_b.widgetId;
-this._showChild(_b);
-_b.isFirstChild=(_b==this.children[0]);
-_b.isLastChild=(_b==this.children[this.children.length-1]);
-dojo.event.topic.publish(this.widgetId+"-selectChild",_b);
-},forward:function(){
-var _d=dojo.lang.find(this.children,this.selectedChildWidget);
-this.selectChild(this.children[_d+1]);
-},back:function(){
-var _e=dojo.lang.find(this.children,this.selectedChildWidget);
-this.selectChild(this.children[_e-1]);
-},onResized:function(){
-if(this.doLayout&&this.selectedChildWidget){
-with(this.selectedChildWidget.domNode.style){
-top=dojo.html.getPixelValue(this.containerNode,"padding-top",true);
-left=dojo.html.getPixelValue(this.containerNode,"padding-left",true);
-}
-var _f=dojo.html.getContentBox(this.containerNode);
-this.selectedChildWidget.resizeTo(_f.width,_f.height);
-}
-},_showChild:function(_10){
-if(this.doLayout){
-var _11=dojo.html.getContentBox(this.containerNode);
-_10.resizeTo(_11.width,_11.height);
-}
-_10.selected=true;
-_10.show();
-},_hideChild:function(_12){
-_12.selected=false;
-_12.hide();
-},closeChild:function(_13){
-var _14=_13.onClose(this,_13);
-if(_14){
-this.removeChild(_13);
-_13.destroy();
-}
-},destroy:function(){
-this._beingDestroyed=true;
-dojo.event.topic.destroy(this.widgetId+"-addChild");
-dojo.event.topic.destroy(this.widgetId+"-removeChild");
-dojo.event.topic.destroy(this.widgetId+"-selectChild");
-dojo.widget.PageContainer.superclass.destroy.apply(this,arguments);
-}});
-dojo.widget.defineWidget("dojo.widget.PageController",dojo.widget.HtmlWidget,{templateString:"<span wairole='tablist' dojoAttachEvent='onKey'></span>",isContainer:true,containerId:"",buttonWidget:"PageButton","class":"dojoPageController",fillInTemplate:function(){
-dojo.html.addClass(this.domNode,this["class"]);
-dojo.widget.wai.setAttr(this.domNode,"waiRole","role","tablist");
-},postCreate:function(){
-this.pane2button={};
-var _15=dojo.widget.byId(this.containerId);
-if(_15){
-dojo.lang.forEach(_15.children,this.onAddChild,this);
-}
-dojo.event.topic.subscribe(this.containerId+"-addChild",this,"onAddChild");
-dojo.event.topic.subscribe(this.containerId+"-removeChild",this,"onRemoveChild");
-dojo.event.topic.subscribe(this.containerId+"-selectChild",this,"onSelectChild");
-},destroy:function(){
-dojo.event.topic.unsubscribe(this.containerId+"-addChild",this,"onAddChild");
-dojo.event.topic.unsubscribe(this.containerId+"-removeChild",this,"onRemoveChild");
-dojo.event.topic.unsubscribe(this.containerId+"-selectChild",this,"onSelectChild");
-dojo.widget.PageController.superclass.destroy.apply(this,arguments);
-},onAddChild:function(_16){
-var _17=dojo.widget.createWidget(this.buttonWidget,{label:_16.label,closeButton:_16.closable});
-this.addChild(_17);
-this.domNode.appendChild(_17.domNode);
-this.pane2button[_16]=_17;
-_16.controlButton=_17;
-var _18=this;
-dojo.event.connect(_17,"onClick",function(){
-_18.onButtonClick(_16);
-});
-dojo.event.connect(_17,"onCloseButtonClick",function(){
-_18.onCloseButtonClick(_16);
-});
-},onRemoveChild:function(_19){
-if(this._currentChild==_19){
-this._currentChild=null;
-}
-var _1a=this.pane2button[_19];
-if(_1a){
-_1a.destroy();
-}
-this.pane2button[_19]=null;
-},onSelectChild:function(_1b){
-if(this._currentChild){
-var _1c=this.pane2button[this._currentChild];
-_1c.clearSelected();
-}
-var _1d=this.pane2button[_1b];
-_1d.setSelected();
-this._currentChild=_1b;
-},onButtonClick:function(_1e){
-var _1f=dojo.widget.byId(this.containerId);
-_1f.selectChild(_1e,false,this);
-},onCloseButtonClick:function(_20){
-var _21=dojo.widget.byId(this.containerId);
-_21.closeChild(_20);
-},onKey:function(evt){
-if((evt.keyCode==evt.KEY_RIGHT_ARROW)||(evt.keyCode==evt.KEY_LEFT_ARROW)){
-var _23=0;
-var _24=null;
-var _23=dojo.lang.find(this.children,this.pane2button[this._currentChild]);
-if(evt.keyCode==evt.KEY_RIGHT_ARROW){
-_24=this.children[(_23+1)%this.children.length];
-}else{
-_24=this.children[(_23+(this.children.length-1))%this.children.length];
-}
-dojo.event.browser.stopEvent(evt);
-_24.onClick();
-}
-}});
-dojo.widget.defineWidget("dojo.widget.PageButton",dojo.widget.HtmlWidget,{templateString:"<span class='item'>"+"<span dojoAttachEvent='onClick' dojoAttachPoint='titleNode' class='selectButton'>${this.label}</span>"+"<span dojoAttachEvent='onClick:onCloseButtonClick' class='closeButton'>[X]</span>"+"</span>",label:"foo",closeButton:false,onClick:function(){
-this.focus();
-},onCloseButtonMouseOver:function(){
-dojo.html.addClass(this.closeButtonNode,"closeHover");
-},onCloseButtonMouseOut:function(){
-dojo.html.removeClass(this.closeButtonNode,"closeHover");
-},onCloseButtonClick:function(evt){
-},setSelected:function(){
-dojo.html.addClass(this.domNode,"current");
-this.titleNode.setAttribute("tabIndex","0");
-},clearSelected:function(){
-dojo.html.removeClass(this.domNode,"current");
-this.titleNode.setAttribute("tabIndex","-1");
-},focus:function(){
-if(this.titleNode.focus){
-this.titleNode.focus();
-}
-}});
-dojo.lang.extend(dojo.widget.Widget,{label:"",selected:false,closable:false,onClose:function(){
-return true;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Parse.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Parse.js
deleted file mode 100644
index e612d91..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Parse.js
+++ /dev/null
@@ -1,214 +0,0 @@
-dojo.provide("dojo.widget.Parse");
-dojo.require("dojo.widget.Manager");
-dojo.require("dojo.dom");
-dojo.widget.Parse=function(_1){
-this.propertySetsList=[];
-this.fragment=_1;
-this.createComponents=function(_2,_3){
-var _4=[];
-var _5=false;
-try{
-if(_2&&_2.tagName&&(_2!=_2.nodeRef)){
-var _6=dojo.widget.tags;
-var _7=String(_2.tagName).split(";");
-for(var x=0;x<_7.length;x++){
-var _9=_7[x].replace(/^\s+|\s+$/g,"").toLowerCase();
-_2.tagName=_9;
-var _a;
-if(_6[_9]){
-_5=true;
-_a=_6[_9](_2,this,_3,_2.index);
-_4.push(_a);
-}else{
-if(_9.indexOf(":")==-1){
-_9="dojo:"+_9;
-}
-_a=dojo.widget.buildWidgetFromParseTree(_9,_2,this,_3,_2.index);
-if(_a){
-_5=true;
-_4.push(_a);
-}
-}
-}
-}
-}
-catch(e){
-dojo.debug("dojo.widget.Parse: error:",e);
-}
-if(!_5){
-_4=_4.concat(this.createSubComponents(_2,_3));
-}
-return _4;
-};
-this.createSubComponents=function(_b,_c){
-var _d,_e=[];
-for(var _f in _b){
-_d=_b[_f];
-if(_d&&typeof _d=="object"&&(_d!=_b.nodeRef)&&(_d!=_b.tagName)&&(!dojo.dom.isNode(_d))){
-_e=_e.concat(this.createComponents(_d,_c));
-}
-}
-return _e;
-};
-this.parsePropertySets=function(_10){
-return [];
-};
-this.parseProperties=function(_11){
-var _12={};
-for(var _13 in _11){
-if((_11[_13]==_11.tagName)||(_11[_13]==_11.nodeRef)){
-}else{
-var _14=_11[_13];
-if(_14.tagName&&dojo.widget.tags[_14.tagName.toLowerCase()]){
-}else{
-if(_14[0]&&_14[0].value!=""&&_14[0].value!=null){
-try{
-if(_13.toLowerCase()=="dataprovider"){
-var _15=this;
-this.getDataProvider(_15,_14[0].value);
-_12.dataProvider=this.dataProvider;
-}
-_12[_13]=_14[0].value;
-var _16=this.parseProperties(_14);
-for(var _17 in _16){
-_12[_17]=_16[_17];
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-}
-switch(_13.toLowerCase()){
-case "checked":
-case "disabled":
-if(typeof _12[_13]!="boolean"){
-_12[_13]=true;
-}
-break;
-}
-}
-}
-return _12;
-};
-this.getDataProvider=function(_18,_19){
-dojo.io.bind({url:_19,load:function(_1a,_1b){
-if(_1a=="load"){
-_18.dataProvider=_1b;
-}
-},mimetype:"text/javascript",sync:true});
-};
-this.getPropertySetById=function(_1c){
-for(var x=0;x<this.propertySetsList.length;x++){
-if(_1c==this.propertySetsList[x]["id"][0].value){
-return this.propertySetsList[x];
-}
-}
-return "";
-};
-this.getPropertySetsByType=function(_1e){
-var _1f=[];
-for(var x=0;x<this.propertySetsList.length;x++){
-var cpl=this.propertySetsList[x];
-var _22=cpl.componentClass||cpl.componentType||null;
-var _23=this.propertySetsList[x]["id"][0].value;
-if(_22&&(_23==_22[0].value)){
-_1f.push(cpl);
-}
-}
-return _1f;
-};
-this.getPropertySets=function(_24){
-var ppl="dojo:propertyproviderlist";
-var _26=[];
-var _27=_24.tagName;
-if(_24[ppl]){
-var _28=_24[ppl].value.split(" ");
-for(var _29 in _28){
-if((_29.indexOf("..")==-1)&&(_29.indexOf("://")==-1)){
-var _2a=this.getPropertySetById(_29);
-if(_2a!=""){
-_26.push(_2a);
-}
-}else{
-}
-}
-}
-return this.getPropertySetsByType(_27).concat(_26);
-};
-this.createComponentFromScript=function(_2b,_2c,_2d,ns){
-_2d.fastMixIn=true;
-var ltn=(ns||"dojo")+":"+_2c.toLowerCase();
-if(dojo.widget.tags[ltn]){
-return [dojo.widget.tags[ltn](_2d,this,null,null,_2d)];
-}
-return [dojo.widget.buildWidgetFromParseTree(ltn,_2d,this,null,null,_2d)];
-};
-};
-dojo.widget._parser_collection={"dojo":new dojo.widget.Parse()};
-dojo.widget.getParser=function(_30){
-if(!_30){
-_30="dojo";
-}
-if(!this._parser_collection[_30]){
-this._parser_collection[_30]=new dojo.widget.Parse();
-}
-return this._parser_collection[_30];
-};
-dojo.widget.createWidget=function(_31,_32,_33,_34){
-var _35=false;
-var _36=(typeof _31=="string");
-if(_36){
-var pos=_31.indexOf(":");
-var ns=(pos>-1)?_31.substring(0,pos):"dojo";
-if(pos>-1){
-_31=_31.substring(pos+1);
-}
-var _39=_31.toLowerCase();
-var _3a=ns+":"+_39;
-_35=(dojo.byId(_31)&&!dojo.widget.tags[_3a]);
-}
-if((arguments.length==1)&&(_35||!_36)){
-var xp=new dojo.xml.Parse();
-var tn=_35?dojo.byId(_31):_31;
-return dojo.widget.getParser().createComponents(xp.parseElement(tn,null,true))[0];
-}
-function fromScript(_3d,_3e,_3f,ns){
-_3f[_3a]={dojotype:[{value:_39}],nodeRef:_3d,fastMixIn:true};
-_3f.ns=ns;
-return dojo.widget.getParser().createComponentFromScript(_3d,_3e,_3f,ns);
-}
-_32=_32||{};
-var _41=false;
-var tn=null;
-var h=dojo.render.html.capable;
-if(h){
-tn=document.createElement("span");
-}
-if(!_33){
-_41=true;
-_33=tn;
-if(h){
-dojo.body().appendChild(_33);
-}
-}else{
-if(_34){
-dojo.dom.insertAtPosition(tn,_33,_34);
-}else{
-tn=_33;
-}
-}
-var _43=fromScript(tn,_31.toLowerCase(),_32,ns);
-if((!_43)||(!_43[0])||(typeof _43[0].widgetType=="undefined")){
-throw new Error("createWidget: Creation of \""+_31+"\" widget failed.");
-}
-try{
-if(_41&&_43[0].domNode.parentNode){
-_43[0].domNode.parentNode.removeChild(_43[0].domNode);
-}
-}
-catch(e){
-dojo.debug(e);
-}
-return _43[0];
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/PopupContainer.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/PopupContainer.js
deleted file mode 100644
index 26657c5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/PopupContainer.js
+++ /dev/null
@@ -1,284 +0,0 @@
-dojo.provide("dojo.widget.PopupContainer");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.html.iframe");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.declare("dojo.widget.PopupContainerBase",null,function(){
-this.queueOnAnimationFinish=[];
-},{isShowingNow:false,currentSubpopup:null,beginZIndex:1000,parentPopup:null,parent:null,popupIndex:0,aroundBox:dojo.html.boxSizing.BORDER_BOX,openedForWindow:null,processKey:function(_1){
-return false;
-},applyPopupBasicStyle:function(){
-with(this.domNode.style){
-display="none";
-position="absolute";
-}
-},aboutToShow:function(){
-},open:function(x,y,_4,_5,_6,_7){
-if(this.isShowingNow){
-return;
-}
-if(this.animationInProgress){
-this.queueOnAnimationFinish.push(this.open,arguments);
-return;
-}
-this.aboutToShow();
-var _8=false,_9,_a;
-if(typeof x=="object"){
-_9=x;
-_a=_5;
-_5=_4;
-_4=y;
-_8=true;
-}
-this.parent=_4;
-dojo.body().appendChild(this.domNode);
-_5=_5||_4["domNode"]||[];
-var _b=null;
-this.isTopLevel=true;
-while(_4){
-if(_4!==this&&(_4.setOpenedSubpopup!=undefined&&_4.applyPopupBasicStyle!=undefined)){
-_b=_4;
-this.isTopLevel=false;
-_b.setOpenedSubpopup(this);
-break;
-}
-_4=_4.parent;
-}
-this.parentPopup=_b;
-this.popupIndex=_b?_b.popupIndex+1:1;
-if(this.isTopLevel){
-var _c=dojo.html.isNode(_5)?_5:null;
-dojo.widget.PopupManager.opened(this,_c);
-}
-if(this.isTopLevel&&!dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.isCollapsed)){
-this._bookmark=dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.getBookmark);
-}else{
-this._bookmark=null;
-}
-if(_5 instanceof Array){
-_5={left:_5[0],top:_5[1],width:0,height:0};
-}
-with(this.domNode.style){
-display="";
-zIndex=this.beginZIndex+this.popupIndex;
-}
-if(_8){
-this.move(_9,_7,_a);
-}else{
-this.move(x,y,_7,_6);
-}
-this.domNode.style.display="none";
-this.explodeSrc=_5;
-this.show();
-this.isShowingNow=true;
-},move:function(x,y,_f,_10){
-var _11=(typeof x=="object");
-if(_11){
-var _12=_f;
-var _13=x;
-_f=y;
-if(!_12){
-_12={"BL":"TL","TL":"BL"};
-}
-dojo.html.placeOnScreenAroundElement(this.domNode,_13,_f,this.aroundBox,_12);
-}else{
-if(!_10){
-_10="TL,TR,BL,BR";
-}
-dojo.html.placeOnScreen(this.domNode,x,y,_f,true,_10);
-}
-},close:function(_14){
-if(_14){
-this.domNode.style.display="none";
-}
-if(this.animationInProgress){
-this.queueOnAnimationFinish.push(this.close,[]);
-return;
-}
-this.closeSubpopup(_14);
-this.hide();
-if(this.bgIframe){
-this.bgIframe.hide();
-this.bgIframe.size({left:0,top:0,width:0,height:0});
-}
-if(this.isTopLevel){
-dojo.widget.PopupManager.closed(this);
-}
-this.isShowingNow=false;
-if(this.parent){
-setTimeout(dojo.lang.hitch(this,function(){
-try{
-if(this.parent["focus"]){
-this.parent.focus();
-}else{
-this.parent.domNode.focus();
-}
-}
-catch(e){
-dojo.debug("No idea how to focus to parent",e);
-}
-}),10);
-}
-if(this._bookmark&&dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.isCollapsed)){
-if(this.openedForWindow){
-this.openedForWindow.focus();
-}
-try{
-dojo.withGlobal(this.openedForWindow||dojo.global(),"moveToBookmark",dojo.html.selection,[this._bookmark]);
-}
-catch(e){
-}
-}
-this._bookmark=null;
-},closeAll:function(_15){
-if(this.parentPopup){
-this.parentPopup.closeAll(_15);
-}else{
-this.close(_15);
-}
-},setOpenedSubpopup:function(_16){
-this.currentSubpopup=_16;
-},closeSubpopup:function(_17){
-if(this.currentSubpopup==null){
-return;
-}
-this.currentSubpopup.close(_17);
-this.currentSubpopup=null;
-},onShow:function(){
-dojo.widget.PopupContainer.superclass.onShow.apply(this,arguments);
-this.openedSize={w:this.domNode.style.width,h:this.domNode.style.height};
-if(dojo.render.html.ie){
-if(!this.bgIframe){
-this.bgIframe=new dojo.html.BackgroundIframe();
-this.bgIframe.setZIndex(this.domNode);
-}
-this.bgIframe.size(this.domNode);
-this.bgIframe.show();
-}
-this.processQueue();
-},processQueue:function(){
-if(!this.queueOnAnimationFinish.length){
-return;
-}
-var _18=this.queueOnAnimationFinish.shift();
-var _19=this.queueOnAnimationFinish.shift();
-_18.apply(this,_19);
-},onHide:function(){
-dojo.widget.HtmlWidget.prototype.onHide.call(this);
-if(this.openedSize){
-with(this.domNode.style){
-width=this.openedSize.w;
-height=this.openedSize.h;
-}
-}
-this.processQueue();
-}});
-dojo.widget.defineWidget("dojo.widget.PopupContainer",[dojo.widget.HtmlWidget,dojo.widget.PopupContainerBase],{isContainer:true,fillInTemplate:function(){
-this.applyPopupBasicStyle();
-dojo.widget.PopupContainer.superclass.fillInTemplate.apply(this,arguments);
-}});
-dojo.widget.PopupManager=new function(){
-this.currentMenu=null;
-this.currentButton=null;
-this.currentFocusMenu=null;
-this.focusNode=null;
-this.registeredWindows=[];
-this.registerWin=function(win){
-if(!win.__PopupManagerRegistered){
-dojo.event.connect(win.document,"onmousedown",this,"onClick");
-dojo.event.connect(win,"onscroll",this,"onClick");
-dojo.event.connect(win.document,"onkey",this,"onKey");
-win.__PopupManagerRegistered=true;
-this.registeredWindows.push(win);
-}
-};
-this.registerAllWindows=function(_1b){
-if(!_1b){
-_1b=dojo.html.getDocumentWindow(window.top&&window.top.document||window.document);
-}
-this.registerWin(_1b);
-for(var i=0;i<_1b.frames.length;i++){
-try{
-var win=dojo.html.getDocumentWindow(_1b.frames[i].document);
-if(win){
-this.registerAllWindows(win);
-}
-}
-catch(e){
-}
-}
-};
-this.unRegisterWin=function(win){
-if(win.__PopupManagerRegistered){
-dojo.event.disconnect(win.document,"onmousedown",this,"onClick");
-dojo.event.disconnect(win,"onscroll",this,"onClick");
-dojo.event.disconnect(win.document,"onkey",this,"onKey");
-win.__PopupManagerRegistered=false;
-}
-};
-this.unRegisterAllWindows=function(){
-for(var i=0;i<this.registeredWindows.length;++i){
-this.unRegisterWin(this.registeredWindows[i]);
-}
-this.registeredWindows=[];
-};
-dojo.addOnLoad(this,"registerAllWindows");
-dojo.addOnUnload(this,"unRegisterAllWindows");
-this.closed=function(_20){
-if(this.currentMenu==_20){
-this.currentMenu=null;
-this.currentButton=null;
-this.currentFocusMenu=null;
-}
-};
-this.opened=function(_21,_22){
-if(_21==this.currentMenu){
-return;
-}
-if(this.currentMenu){
-this.currentMenu.close();
-}
-this.currentMenu=_21;
-this.currentFocusMenu=_21;
-this.currentButton=_22;
-};
-this.setFocusedMenu=function(_23){
-this.currentFocusMenu=_23;
-};
-this.onKey=function(e){
-if(!e.key){
-return;
-}
-if(!this.currentMenu||!this.currentMenu.isShowingNow){
-return;
-}
-var m=this.currentFocusMenu;
-while(m){
-if(m.processKey(e)){
-e.preventDefault();
-e.stopPropagation();
-break;
-}
-m=m.parentPopup||m.parentMenu;
-}
-},this.onClick=function(e){
-if(!this.currentMenu){
-return;
-}
-var _27=dojo.html.getScroll().offset;
-var m=this.currentMenu;
-while(m){
-if(dojo.html.overElement(m.domNode,e)||dojo.html.isDescendantOf(e.target,m.domNode)){
-return;
-}
-m=m.currentSubpopup;
-}
-if(this.currentButton&&dojo.html.overElement(this.currentButton,e)){
-return;
-}
-this.currentMenu.closeAll(true);
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ProgressBar.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ProgressBar.js
deleted file mode 100644
index 5999a31..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ProgressBar.js
+++ /dev/null
@@ -1,174 +0,0 @@
-dojo.provide("dojo.widget.ProgressBar");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event");
-dojo.require("dojo.dom");
-dojo.require("dojo.html.style");
-dojo.require("dojo.string.*");
-dojo.require("dojo.lfx.*");
-dojo.widget.defineWidget("dojo.widget.ProgressBar",dojo.widget.HtmlWidget,{progressValue:0,maxProgressValue:100,width:300,height:30,frontPercentClass:"frontPercent",backPercentClass:"backPercent",frontBarClass:"frontBar",backBarClass:"backBar",hasText:false,isVertical:false,showOnlyIntegers:false,dataSource:"",pollInterval:3000,duration:1000,templateString:"<div dojoAttachPoint=\"containerNode\" style=\"position:relative;overflow:hidden\">\n\t<div style=\"position:absolute;display:none;width:100%;text-align:center\" dojoAttachPoint=\"backPercentLabel\" class=\"dojoBackPercentLabel\"></div>\n\t<div style=\"position:absolute;overflow:hidden;width:100%;height:100%\" dojoAttachPoint=\"internalProgress\">\n\t<div style=\"position:absolute;display:none;width:100%;text-align:center\" dojoAttachPoint=\"frontPercentLabel\" class=\"dojoFrontPercentLabel\"></div></div>\n</div>\n",templateCssString:".backBar{\n\tborder:1px solid #84a3d1;\n}\n.frontBar{\n\tbackground:url(\"images/bar.gif\") repeat bottom left;\n\tbackground-attachment: fixed;\n}\n.h-frontBar{\n\tbackground:url(\"images/h-bar.gif\") repeat bottom left;\n\tbackground-attachment: fixed;\n}\n.simpleFrontBar{\n\tbackground: red;\n}\n.frontPercent,.backPercent{\n\tfont:bold 13px helvetica;\n}\n.backPercent{\n\tcolor:#293a4b;\n}\n.frontPercent{\n\tcolor:#fff;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/ProgressBar.css"),containerNode:null,internalProgress:null,_pixelUnitRatio:0,_pixelPercentRatio:0,_unitPercentRatio:0,_unitPixelRatio:0,_floatDimension:0,_intDimension:0,_progressPercentValue:"0%",_floatMaxProgressValue:0,_dimension:"width",_pixelValue:0,_oInterval:null,_animation:null,_animationStopped:true,_progressValueBak:false,_hasTextBak:false,fillInTemplate:function(_1,_2){
-this.internalProgress.className=this.frontBarClass;
-this.containerNode.className=this.backBarClass;
-if(this.isVertical){
-this.internalProgress.style.bottom="0px";
-this.internalProgress.style.left="0px";
-this._dimension="height";
-}else{
-this.internalProgress.style.top="0px";
-this.internalProgress.style.left="0px";
-this._dimension="width";
-}
-this.frontPercentLabel.className=this.frontPercentClass;
-this.backPercentLabel.className=this.backPercentClass;
-this.progressValue=""+this.progressValue;
-this.domNode.style.height=this.height+"px";
-this.domNode.style.width=this.width+"px";
-this._intDimension=parseInt("0"+eval("this."+this._dimension));
-this._floatDimension=parseFloat("0"+eval("this."+this._dimension));
-this._pixelPercentRatio=this._floatDimension/100;
-this.setMaxProgressValue(this.maxProgressValue,true);
-this.setProgressValue(dojo.string.trim(this.progressValue),true);
-dojo.debug("float dimension: "+this._floatDimension);
-dojo.debug("this._unitPixelRatio: "+this._unitPixelRatio);
-this.showText(this.hasText);
-},showText:function(_3){
-if(_3){
-this.backPercentLabel.style.display="block";
-this.frontPercentLabel.style.display="block";
-}else{
-this.backPercentLabel.style.display="none";
-this.frontPercentLabel.style.display="none";
-}
-this.hasText=_3;
-},postCreate:function(_4,_5){
-this.render();
-},_backupValues:function(){
-this._progressValueBak=this.progressValue;
-this._hasTextBak=this.hasText;
-},_restoreValues:function(){
-this.setProgressValue(this._progressValueBak);
-this.showText(this._hasTextBak);
-},_setupAnimation:function(){
-var _6=this;
-dojo.debug("internalProgress width: "+this.internalProgress.style.width);
-this._animation=dojo.lfx.html.slideTo(this.internalProgress,{top:0,left:parseInt(this.width)-parseInt(this.internalProgress.style.width)},parseInt(this.duration),null,function(){
-var _7=dojo.lfx.html.slideTo(_6.internalProgress,{top:0,left:0},parseInt(_6.duration));
-dojo.event.connect(_7,"onEnd",function(){
-if(!_6._animationStopped){
-_6._animation.play();
-}
-});
-if(!_6._animationStopped){
-_7.play();
-}
-_7=null;
-});
-},getMaxProgressValue:function(){
-return this.maxProgressValue;
-},setMaxProgressValue:function(_8,_9){
-if(!this._animationStopped){
-return;
-}
-this.maxProgressValue=_8;
-this._floatMaxProgressValue=parseFloat("0"+this.maxProgressValue);
-this._pixelUnitRatio=this._floatDimension/this.maxProgressValue;
-this._unitPercentRatio=this._floatMaxProgressValue/100;
-this._unitPixelRatio=this._floatMaxProgressValue/this._floatDimension;
-this.setProgressValue(this.progressValue,true);
-if(!_9){
-this.render();
-}
-},setProgressValue:function(_a,_b){
-if(!this._animationStopped){
-return;
-}
-this._progressPercentValue="0%";
-var _c=dojo.string.trim(""+_a);
-var _d=parseFloat("0"+_c);
-var _e=parseInt("0"+_c);
-var _f=0;
-if(dojo.string.endsWith(_c,"%",false)){
-this._progressPercentValue=Math.min(_d.toFixed(1),100)+"%";
-_c=Math.min((_d)*this._unitPercentRatio,this.maxProgressValue);
-_f=Math.min((_d)*this._pixelPercentRatio,eval("this."+this._dimension));
-}else{
-this.progressValue=Math.min(_d,this.maxProgressValue);
-this._progressPercentValue=Math.min((_d/this._unitPercentRatio).toFixed(1),100)+"%";
-_f=Math.min(_d/this._unitPixelRatio,eval("this."+this._dimension));
-}
-this.progressValue=dojo.string.trim(_c);
-this._pixelValue=_f;
-if(!_b){
-this.render();
-}
-},getProgressValue:function(){
-return this.progressValue;
-},getProgressPercentValue:function(){
-return this._progressPercentValue;
-},setDataSource:function(_10){
-this.dataSource=_10;
-},setPollInterval:function(_11){
-this.pollInterval=_11;
-},start:function(){
-var _12=dojo.lang.hitch(this,this._showRemoteProgress);
-this._oInterval=setInterval(_12,this.pollInterval);
-},startAnimation:function(){
-if(this._animationStopped){
-this._backupValues();
-this.setProgressValue("10%");
-this._animationStopped=false;
-this._setupAnimation();
-this.showText(false);
-this.internalProgress.style.height="105%";
-this._animation.play();
-}
-},stopAnimation:function(){
-if(this._animation){
-this._animationStopped=true;
-this._animation.stop();
-this.internalProgress.style.height="100%";
-this.internalProgress.style.left="0px";
-this._restoreValues();
-this._setLabelPosition();
-}
-},_showRemoteProgress:function(){
-var _13=this;
-if((this.getMaxProgressValue()==this.getProgressValue())&&this._oInterval){
-clearInterval(this._oInterval);
-this._oInterval=null;
-this.setProgressValue("100%");
-return;
-}
-var _14={url:_13.dataSource,method:"POST",mimetype:"text/json",error:function(_15,_16){
-dojo.debug("[ProgressBar] showRemoteProgress error");
-},load:function(_17,_18,evt){
-_13.setProgressValue((_13._oInterval?_18["progress"]:"100%"));
-}};
-dojo.io.bind(_14);
-},render:function(){
-this._setPercentLabel(dojo.string.trim(this._progressPercentValue));
-this._setPixelValue(this._pixelValue);
-this._setLabelPosition();
-},_setLabelPosition:function(){
-var _1a=dojo.html.getContentBox(this.frontPercentLabel).width;
-var _1b=dojo.html.getContentBox(this.frontPercentLabel).height;
-var _1c=dojo.html.getContentBox(this.backPercentLabel).width;
-var _1d=dojo.html.getContentBox(this.backPercentLabel).height;
-var _1e=(parseInt(this.width)-_1a)/2+"px";
-var _1f=(parseInt(this.height)-parseInt(_1b))/2+"px";
-var _20=(parseInt(this.width)-_1c)/2+"px";
-var _21=(parseInt(this.height)-parseInt(_1d))/2+"px";
-this.frontPercentLabel.style.left=_1e;
-this.backPercentLabel.style.left=_20;
-this.frontPercentLabel.style.bottom=_1f;
-this.backPercentLabel.style.bottom=_21;
-},_setPercentLabel:function(_22){
-dojo.dom.removeChildren(this.frontPercentLabel);
-dojo.dom.removeChildren(this.backPercentLabel);
-var _23=this.showOnlyIntegers==false?_22:parseInt(_22)+"%";
-this.frontPercentLabel.appendChild(document.createTextNode(_23));
-this.backPercentLabel.appendChild(document.createTextNode(_23));
-},_setPixelValue:function(_24){
-eval("this.internalProgress.style."+this._dimension+" = "+_24+" + 'px'");
-this.onChange();
-},onChange:function(){
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RadioGroup.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RadioGroup.js
deleted file mode 100644
index a8348e4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RadioGroup.js
+++ /dev/null
@@ -1,109 +0,0 @@
-dojo.provide("dojo.widget.RadioGroup");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.event.browser");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.widget.defineWidget("dojo.widget.RadioGroup",dojo.widget.HtmlWidget,function(){
-this.selectedItem=null;
-this.items=[];
-this.selected=[];
-this.groupCssClass="radioGroup";
-this.selectedCssClass="selected";
-this.itemContentCssClass="itemContent";
-},{isContainer:false,templatePath:null,templateCssPath:null,postCreate:function(){
-this._parseStructure();
-dojo.html.addClass(this.domNode,this.groupCssClass);
-this._setupChildren();
-dojo.event.browser.addListener(this.domNode,"onclick",dojo.lang.hitch(this,"onSelect"));
-if(this.selectedItem){
-this._selectItem(this.selectedItem);
-}
-},_parseStructure:function(){
-if(this.domNode.tagName.toLowerCase()!="ul"&&this.domNode.tagName.toLowerCase()!="ol"){
-dojo.raise("RadioGroup: Expected ul or ol content.");
-return;
-}
-this.items=[];
-var nl=this.domNode.getElementsByTagName("li");
-for(var i=0;i<nl.length;i++){
-if(nl[i].parentNode==this.domNode){
-this.items.push(nl[i]);
-}
-}
-},add:function(_3){
-if(_3.parentNode!=this.domNode){
-this.domNode.appendChild(_3);
-}
-this.items.push(_3);
-this._setup(_3);
-},remove:function(_4){
-var _5=-1;
-for(var i=0;i<this.items.length;i++){
-if(this.items[i]==_4){
-_5=i;
-break;
-}
-}
-if(_5<0){
-return;
-}
-this.items.splice(_5,1);
-_4.parentNode.removeChild(_4);
-},clear:function(){
-for(var i=0;i<this.items.length;i++){
-this.domNode.removeChild(this.items[i]);
-}
-this.items=[];
-},clearSelections:function(){
-for(var i=0;i<this.items.length;i++){
-dojo.html.removeClass(this.items[i],this.selectedCssClass);
-}
-this.selectedItem=null;
-},_setup:function(_9){
-var _a=document.createElement("span");
-dojo.html.disableSelection(_a);
-dojo.html.addClass(_a,this.itemContentCssClass);
-dojo.dom.moveChildren(_9,_a);
-_9.appendChild(_a);
-if(this.selected.length>0){
-var _b=dojo.html.getAttribute(_9,"id");
-if(_b&&_b==this.selected){
-this.selectedItem=_9;
-}
-}
-dojo.event.browser.addListener(_9,"onclick",dojo.lang.hitch(this,"onItemSelect"));
-if(dojo.html.hasAttribute(_9,"onitemselect")){
-var tn=dojo.lang.nameAnonFunc(new Function(dojo.html.getAttribute(_9,"onitemselect")),this);
-dojo.event.browser.addListener(_9,"onclick",dojo.lang.hitch(this,tn));
-}
-},_setupChildren:function(){
-for(var i=0;i<this.items.length;i++){
-this._setup(this.items[i]);
-}
-},_selectItem:function(_e,_f,_10){
-if(this.selectedItem){
-dojo.html.removeClass(this.selectedItem,this.selectedCssClass);
-}
-this.selectedItem=_e;
-dojo.html.addClass(this.selectedItem,this.selectedCssClass);
-if(!dj_undef("currentTarget",_f)){
-return;
-}
-if(!_10){
-if(dojo.render.html.ie){
-this.selectedItem.fireEvent("onclick");
-}else{
-var e=document.createEvent("MouseEvents");
-e.initEvent("click",true,false);
-this.selectedItem.dispatchEvent(e);
-}
-}
-},getValue:function(){
-return this.selectedItem;
-},onSelect:function(e){
-},onItemSelect:function(e){
-if(!dj_undef("currentTarget",e)){
-this._selectItem(e.currentTarget,e);
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RealNumberTextbox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RealNumberTextbox.js
deleted file mode 100644
index ae08a99..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RealNumberTextbox.js
+++ /dev/null
@@ -1,37 +0,0 @@
-dojo.provide("dojo.widget.RealNumberTextbox");
-dojo.require("dojo.widget.IntegerTextbox");
-dojo.require("dojo.validate.common");
-dojo.widget.defineWidget("dojo.widget.RealNumberTextbox",dojo.widget.IntegerTextbox,{mixInProperties:function(_1,_2){
-dojo.widget.RealNumberTextbox.superclass.mixInProperties.apply(this,arguments);
-if(_1.places){
-this.flags.places=Number(_1.places);
-}
-if((_1.exponent=="true")||(_1.exponent=="always")){
-this.flags.exponent=true;
-}else{
-if((_1.exponent=="false")||(_1.exponent=="never")){
-this.flags.exponent=false;
-}else{
-this.flags.exponent=[true,false];
-}
-}
-if((_1.esigned=="true")||(_1.esigned=="always")){
-this.flags.eSigned=true;
-}else{
-if((_1.esigned=="false")||(_1.esigned=="never")){
-this.flags.eSigned=false;
-}else{
-this.flags.eSigned=[true,false];
-}
-}
-if(_1.min){
-this.flags.min=parseFloat(_1.min);
-}
-if(_1.max){
-this.flags.max=parseFloat(_1.max);
-}
-},isValid:function(){
-return dojo.validate.isRealNumber(this.textbox.value,this.flags);
-},isInRange:function(){
-return dojo.validate.isInRange(this.textbox.value,this.flags);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RegexpTextbox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RegexpTextbox.js
deleted file mode 100644
index 21abc2c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RegexpTextbox.js
+++ /dev/null
@@ -1,14 +0,0 @@
-dojo.provide("dojo.widget.RegexpTextbox");
-dojo.require("dojo.widget.ValidationTextbox");
-dojo.widget.defineWidget("dojo.widget.RegexpTextbox",dojo.widget.ValidationTextbox,{mixInProperties:function(_1,_2){
-dojo.widget.RegexpTextbox.superclass.mixInProperties.apply(this,arguments);
-if(_1.regexp){
-this.flags.regexp=_1.regexp;
-}
-if(_1.flags){
-this.flags.flags=_1.flags;
-}
-},isValid:function(){
-var _3=new RegExp(this.flags.regexp,this.flags.flags);
-return _3.test(this.textbox.value);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RemoteTabController.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RemoteTabController.js
deleted file mode 100644
index cd75b13..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RemoteTabController.js
+++ /dev/null
@@ -1,15 +0,0 @@
-dojo.provide("dojo.widget.RemoteTabController");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.TabContainer");
-dojo.require("dojo.event.*");
-dojo.deprecated("dojo.widget.RemoteTabController is slated for removal in 0.5; use PageController or TabController instead.","0.5");
-dojo.widget.defineWidget("dojo.widget.RemoteTabController",dojo.widget.TabController,{templateCssString:".dojoRemoteTabController {\n\tposition: relative;\n}\n\n.dojoRemoteTab {\n\tposition : relative;\n\tfloat : left;\n\tpadding-left : 9px;\n\tborder-bottom : 1px solid #6290d2;\n\tbackground : url(images/tab_left.gif) no-repeat left top;\n\tcursor: pointer;\n\twhite-space: nowrap;\n\tz-index: 3;\n}\n\n.dojoRemoteTab div {\n\tdisplay : block;\n\tpadding : 4px 15px 4px 6px;\n\tbackground : url(images/tab_top_right.gif) no-repeat right top;\n\tcolor : #333;\n\tfont-size : 90%;\n}\n\n.dojoRemoteTabPaneClose {\n\tposition : absolute;\n\tbottom : 0px;\n\tright : 6px;\n\theight : 12px;\n\twidth : 12px;\n\tbackground : url(images/tab_close.gif) no-repeat right top;\n}\n\n.dojoRemoteTabPaneCloseHover {\n\tbackground-image : url(images/tab_close_h.gif);\n}\n\n.dojoRemoteTabClose {\n\tdisplay : inline-block;\n\theight : 12px;\n\twidth : 12px;\n\tpadding : 0 12px 0 0;\n\tmargin : 0 -10px 0 10px;\n\tbackground : url(images/tab_close.gif) no-repeat right top;\n\tcursor : default;\n}\n\n.dojoRemoteTabCloseHover {\n\tbackground-image : url(images/tab_close_h.gif);\n}\n\n.dojoRemoteTab.current {\n\tpadding-bottom : 1px;\n\tborder-bottom : 0;\n\tbackground-position : 0 -150px;\n}\n\n.dojoRemoteTab.current div {\n\tpadding-bottom : 5px;\n\tmargin-bottom : -1px;\n\tbackground-position : 100% -150px;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/RemoteTabControl.css"),templateString:"<div dojoAttachPoint=\"domNode\" wairole=\"tablist\"></div>","class":"dojoRemoteTabController",tabContainer:"",postMixInProperties:function(){
-this.containerId=this.tabContainer;
-dojo.widget.RemoteTabController.superclass.postMixInProperties.apply(this,arguments);
-},fillInTemplate:function(){
-dojo.html.addClass(this.domNode,this["class"]);
-if(this.tabContainer){
-dojo.addOnLoad(dojo.lang.hitch(this,"setupTabs"));
-}
-dojo.widget.RemoteTabController.superclass.fillInTemplate.apply(this,arguments);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Repeater.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Repeater.js
deleted file mode 100644
index 7c18654..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Repeater.js
+++ /dev/null
@@ -1,115 +0,0 @@
-dojo.provide("dojo.widget.Repeater");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.string");
-dojo.require("dojo.event.*");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.widget.Repeater");
-dojo.widget.defineWidget("dojo.widget.Repeater",dojo.widget.HtmlWidget,{name:"",rowTemplate:"",myObject:null,pattern:"",useDnd:false,isContainer:true,initialize:function(_1,_2){
-var _3=this.getFragNodeRef(_2);
-_3.removeAttribute("dojotype");
-this.setRow(dojo.string.trim(_3.innerHTML),{});
-_3.innerHTML="";
-_2=null;
-},postCreate:function(_4,_5){
-if(this.useDnd){
-dojo.require("dojo.dnd.*");
-var _6=new dojo.dnd.HtmlDropTarget(this.domNode,[this.widgetId]);
-}
-},_reIndexRows:function(){
-for(var i=0,_8=this.domNode.childNodes.length;i<_8;i++){
-var _9=["INPUT","SELECT","TEXTAREA"];
-for(var k=0;k<_9.length;k++){
-var _b=this.domNode.childNodes[i].getElementsByTagName(_9[k]);
-for(var j=0,_d=_b.length;j<_d;j++){
-var _e=_b[j].name;
-var _f=dojo.string.escape("regexp",this.pattern);
-_f=_f.replace(/(%\\\{index\\\})/g,"%{index}");
-var _10=dojo.string.substituteParams(_f,{"index":"[0-9]*"});
-var _11=dojo.string.substituteParams(this.pattern,{"index":""+i});
-var re=new RegExp(_10,"g");
-_b[j].name=_e.replace(re,_11);
-}
-}
-}
-},onDeleteRow:function(e){
-var _14=dojo.string.escape("regexp",this.pattern);
-_14=_14.replace(/%\\\{index\\\}/g,"%{index}");
-var _15=dojo.string.substituteParams(_14,{"index":"([0-9]*)"});
-var re=new RegExp(_15,"g");
-this.deleteRow(re.exec(e.target.name)[1]);
-},hasRows:function(){
-if(this.domNode.childNodes.length>0){
-return true;
-}
-return false;
-},getRowCount:function(){
-return this.domNode.childNodes.length;
-},deleteRow:function(idx){
-this.domNode.removeChild(this.domNode.childNodes[idx]);
-this._reIndexRows();
-},_changeRowPosition:function(e){
-if(e.dragStatus=="dropFailure"){
-this.domNode.removeChild(e["dragSource"].domNode);
-}else{
-if(e.dragStatus=="dropSuccess"){
-}
-}
-this._reIndexRows();
-},setRow:function(_19,_1a){
-_19=_19.replace(/\%\{(index)\}/g,"0");
-this.rowTemplate=_19;
-this.myObject=_1a;
-},getRow:function(){
-return this.rowTemplate;
-},_initRow:function(_1b){
-if(typeof (_1b)=="number"){
-_1b=this.domNode.childNodes[_1b];
-}
-var _1c=["INPUT","SELECT","IMG"];
-for(var k=0;k<_1c.length;k++){
-var _1e=_1b.getElementsByTagName(_1c[k]);
-for(var i=0,len=_1e.length;i<len;i++){
-var _21=_1e[i];
-if(_21.nodeType!=1){
-continue;
-}
-if(_21.getAttribute("rowFunction")!=null){
-if(typeof (this.myObject[_21.getAttribute("rowFunction")])=="undefined"){
-dojo.debug("Function "+_21.getAttribute("rowFunction")+" not found");
-}else{
-this.myObject[_21.getAttribute("rowFunction")](_21);
-}
-}else{
-if(_21.getAttribute("rowAction")!=null){
-if(_21.getAttribute("rowAction")=="delete"){
-_21.name=dojo.string.substituteParams(this.pattern,{"index":""+(this.getRowCount()-1)});
-dojo.event.connect(_21,"onclick",this,"onDeleteRow");
-}
-}
-}
-}
-}
-},onAddRow:function(e){
-},addRow:function(_23){
-if(typeof (_23)=="undefined"){
-_23=true;
-}
-var _24=document.createElement("span");
-_24.innerHTML=this.getRow();
-if(_24.childNodes.length==1){
-_24=_24.childNodes[0];
-}
-this.domNode.appendChild(_24);
-var _25=new dojo.xml.Parse();
-var _26=_25.parseElement(_24,null,true);
-dojo.widget.getParser().createSubComponents(_26,this);
-this._reIndexRows();
-if(_23){
-this._initRow(_24);
-}
-if(this.useDnd){
-_24=new dojo.dnd.HtmlDragSource(_24,this.widgetId);
-dojo.event.connect(_24,"onDragEnd",this,"_changeRowPosition");
-}
-this.onAddRow(_24);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ResizableTextarea.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ResizableTextarea.js
deleted file mode 100644
index 94dcac5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ResizableTextarea.js
+++ /dev/null
@@ -1,22 +0,0 @@
-dojo.provide("dojo.widget.ResizableTextarea");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.LayoutContainer");
-dojo.require("dojo.widget.ResizeHandle");
-dojo.widget.defineWidget("dojo.widget.ResizableTextarea",dojo.widget.HtmlWidget,{templateString:"<div>\n\t<div style=\"border: 2px solid black; width: 90%; height: 200px;\"\n\t\tdojoAttachPoint=\"rootLayoutNode\">\n\t\t<div dojoAttachPoint=\"textAreaContainerNode\" \n\t\t\tstyle=\"border: 0px; margin: 0px; overflow: hidden;\">\n\t\t</div>\n\t\t<div dojoAttachPoint=\"statusBarContainerNode\" class=\"statusBar\">\n\t\t\t<div dojoAttachPoint=\"statusLabelNode\" \n\t\t\t\tclass=\"statusPanel\"\n\t\t\t\tstyle=\"padding-right: 0px; z-index: 1;\">drag to resize</div>\n\t\t\t<div dojoAttachPoint=\"resizeHandleNode\"></div>\n\t\t</div>\n\t</div>\n</div>\n",templateCssString:"div.statusBar {\n\tbackground-color: ThreeDFace;\n\theight: 28px;\n\tpadding: 1px;\n\toverflow: hidden;\n\tfont-size: 12px;\n}\n\ndiv.statusPanel {\n\tbackground-color: ThreeDFace;\n\tborder: 1px solid;\n\tborder-color: ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow;\n\tmargin: 1px;\n\tpadding: 2px 6px;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/ResizableTextarea.css"),fillInTemplate:function(_1,_2){
-this.textAreaNode=this.getFragNodeRef(_2).cloneNode(true);
-dojo.body().appendChild(this.domNode);
-this.rootLayout=dojo.widget.createWidget("LayoutContainer",{minHeight:50,minWidth:100},this.rootLayoutNode);
-this.textAreaContainer=dojo.widget.createWidget("LayoutContainer",{layoutAlign:"client"},this.textAreaContainerNode);
-this.rootLayout.addChild(this.textAreaContainer);
-this.textAreaContainer.domNode.appendChild(this.textAreaNode);
-with(this.textAreaNode.style){
-width="100%";
-height="100%";
-}
-this.statusBar=dojo.widget.createWidget("LayoutContainer",{layoutAlign:"bottom",minHeight:28},this.statusBarContainerNode);
-this.rootLayout.addChild(this.statusBar);
-this.statusLabel=dojo.widget.createWidget("LayoutContainer",{layoutAlign:"client",minWidth:50},this.statusLabelNode);
-this.statusBar.addChild(this.statusLabel);
-this.resizeHandle=dojo.widget.createWidget("ResizeHandle",{targetElmId:this.rootLayout.widgetId},this.resizeHandleNode);
-this.statusBar.addChild(this.resizeHandle);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ResizeHandle.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ResizeHandle.js
deleted file mode 100644
index e744e42..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ResizeHandle.js
+++ /dev/null
@@ -1,55 +0,0 @@
-dojo.provide("dojo.widget.ResizeHandle");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.event.*");
-dojo.widget.defineWidget("dojo.widget.ResizeHandle",dojo.widget.HtmlWidget,{targetElmId:"",templateCssString:".dojoHtmlResizeHandle {\n\tfloat: right;\n\tposition: absolute;\n\tright: 2px;\n\tbottom: 2px;\n\twidth: 13px;\n\theight: 13px;\n\tz-index: 20;\n\tcursor: nw-resize;\n\tbackground-image: url(grabCorner.gif);\n\tline-height: 0px;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/ResizeHandle.css"),templateString:"<div class=\"dojoHtmlResizeHandle\"><div></div></div>",postCreate:function(){
-dojo.event.connect(this.domNode,"onmousedown",this,"_beginSizing");
-},_beginSizing:function(e){
-if(this._isSizing){
-return false;
-}
-this.targetWidget=dojo.widget.byId(this.targetElmId);
-this.targetDomNode=this.targetWidget?this.targetWidget.domNode:dojo.byId(this.targetElmId);
-if(!this.targetDomNode){
-return;
-}
-this._isSizing=true;
-this.startPoint={"x":e.clientX,"y":e.clientY};
-var mb=dojo.html.getMarginBox(this.targetDomNode);
-this.startSize={"w":mb.width,"h":mb.height};
-dojo.event.kwConnect({srcObj:dojo.body(),srcFunc:"onmousemove",targetObj:this,targetFunc:"_changeSizing",rate:25});
-dojo.event.connect(dojo.body(),"onmouseup",this,"_endSizing");
-e.preventDefault();
-},_changeSizing:function(e){
-try{
-if(!e.clientX||!e.clientY){
-return;
-}
-}
-catch(e){
-return;
-}
-var dx=this.startPoint.x-e.clientX;
-var dy=this.startPoint.y-e.clientY;
-var _6=this.startSize.w-dx;
-var _7=this.startSize.h-dy;
-if(this.minSize){
-var mb=dojo.html.getMarginBox(this.targetDomNode);
-if(_6<this.minSize.w){
-_6=mb.width;
-}
-if(_7<this.minSize.h){
-_7=mb.height;
-}
-}
-if(this.targetWidget){
-this.targetWidget.resizeTo(_6,_7);
-}else{
-dojo.html.setMarginBox(this.targetDomNode,{width:_6,height:_7});
-}
-e.preventDefault();
-},_endSizing:function(e){
-dojo.event.disconnect(dojo.body(),"onmousemove",this,"_changeSizing");
-dojo.event.disconnect(dojo.body(),"onmouseup",this,"_endSizing");
-this._isSizing=false;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RichText.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RichText.js
deleted file mode 100644
index d466095..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/RichText.js
+++ /dev/null
@@ -1,1154 +0,0 @@
-dojo.provide("dojo.widget.RichText");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.html.*");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.event.*");
-dojo.require("dojo.string.extras");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.Deferred");
-if(!djConfig["useXDomain"]||djConfig["allowXdRichTextSave"]){
-if(dojo.hostenv.post_load_){
-(function(){
-var _1=dojo.doc().createElement("textarea");
-_1.id="dojo.widget.RichText.savedContent";
-_1.style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;";
-dojo.body().appendChild(_1);
-})();
-}else{
-try{
-dojo.doc().write("<textarea id=\"dojo.widget.RichText.savedContent\" "+"style=\"display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;\"></textarea>");
-}
-catch(e){
-}
-}
-}
-dojo.widget.defineWidget("dojo.widget.RichText",dojo.widget.HtmlWidget,function(){
-this.contentPreFilters=[];
-this.contentPostFilters=[];
-this.contentDomPreFilters=[];
-this.contentDomPostFilters=[];
-this.editingAreaStyleSheets=[];
-if(dojo.render.html.moz){
-this.contentPreFilters.push(this._fixContentForMoz);
-}
-this._keyHandlers={};
-if(dojo.Deferred){
-this.onLoadDeferred=new dojo.Deferred();
-}
-},{inheritWidth:false,focusOnLoad:false,saveName:"",styleSheets:"",_content:"",height:"",minHeight:"1em",isClosed:true,isLoaded:false,useActiveX:false,relativeImageUrls:false,_SEPARATOR:"@@**%%__RICHTEXTBOUNDRY__%%**@@",onLoadDeferred:null,fillInTemplate:function(){
-dojo.event.topic.publish("dojo.widget.RichText::init",this);
-this.open();
-dojo.event.connect(this,"onKeyPressed",this,"afterKeyPress");
-dojo.event.connect(this,"onKeyPress",this,"keyPress");
-dojo.event.connect(this,"onKeyDown",this,"keyDown");
-dojo.event.connect(this,"onKeyUp",this,"keyUp");
-this.setupDefaultShortcuts();
-},setupDefaultShortcuts:function(){
-var _2=this.KEY_CTRL;
-var _3=function(_4,_5){
-return arguments.length==1?function(){
-this.execCommand(_4);
-}:function(){
-this.execCommand(_4,_5);
-};
-};
-this.addKeyHandler("b",_2,_3("bold"));
-this.addKeyHandler("i",_2,_3("italic"));
-this.addKeyHandler("u",_2,_3("underline"));
-this.addKeyHandler("a",_2,_3("selectall"));
-this.addKeyHandler("s",_2,function(){
-this.save(true);
-});
-this.addKeyHandler("1",_2,_3("formatblock","h1"));
-this.addKeyHandler("2",_2,_3("formatblock","h2"));
-this.addKeyHandler("3",_2,_3("formatblock","h3"));
-this.addKeyHandler("4",_2,_3("formatblock","h4"));
-this.addKeyHandler("\\",_2,_3("insertunorderedlist"));
-if(!dojo.render.html.ie){
-this.addKeyHandler("Z",_2,_3("redo"));
-}
-},events:["onBlur","onFocus","onKeyPress","onKeyDown","onKeyUp","onClick"],open:function(_6){
-if(this.onLoadDeferred.fired>=0){
-this.onLoadDeferred=new dojo.Deferred();
-}
-var h=dojo.render.html;
-if(!this.isClosed){
-this.close();
-}
-dojo.event.topic.publish("dojo.widget.RichText::open",this);
-this._content="";
-if((arguments.length==1)&&(_6["nodeName"])){
-this.domNode=_6;
-}
-if((this.domNode["nodeName"])&&(this.domNode.nodeName.toLowerCase()=="textarea")){
-this.textarea=this.domNode;
-var _8=this._preFilterContent(this.textarea.value);
-this.domNode=dojo.doc().createElement("div");
-dojo.html.copyStyle(this.domNode,this.textarea);
-var _9=dojo.lang.hitch(this,function(){
-with(this.textarea.style){
-display="block";
-position="absolute";
-left=top="-1000px";
-if(h.ie){
-this.__overflow=overflow;
-overflow="hidden";
-}
-}
-});
-if(h.ie){
-setTimeout(_9,10);
-}else{
-_9();
-}
-if(!h.safari){
-dojo.html.insertBefore(this.domNode,this.textarea);
-}
-if(this.textarea.form){
-dojo.event.connect("before",this.textarea.form,"onsubmit",dojo.lang.hitch(this,function(){
-this.textarea.value=this.getEditorContent();
-}));
-}
-var _a=this;
-dojo.event.connect(this,"postCreate",function(){
-dojo.html.insertAfter(_a.textarea,_a.domNode);
-});
-}else{
-var _8=this._preFilterContent(dojo.string.trim(this.domNode.innerHTML));
-}
-if(_8==""){
-_8="&nbsp;";
-}
-var _b=dojo.html.getContentBox(this.domNode);
-this._oldHeight=_b.height;
-this._oldWidth=_b.width;
-this._firstChildContributingMargin=this._getContributingMargin(this.domNode,"top");
-this._lastChildContributingMargin=this._getContributingMargin(this.domNode,"bottom");
-this.savedContent=_8;
-this.domNode.innerHTML="";
-this.editingArea=dojo.doc().createElement("div");
-this.domNode.appendChild(this.editingArea);
-if((this.domNode["nodeName"])&&(this.domNode.nodeName=="LI")){
-this.domNode.innerHTML=" <br>";
-}
-if(this.saveName!=""&&(!djConfig["useXDomain"]||djConfig["allowXdRichTextSave"])){
-var _c=dojo.doc().getElementById("dojo.widget.RichText.savedContent");
-if(_c.value!=""){
-var _d=_c.value.split(this._SEPARATOR);
-for(var i=0;i<_d.length;i++){
-var _f=_d[i].split(":");
-if(_f[0]==this.saveName){
-_8=_f[1];
-_d.splice(i,1);
-break;
-}
-}
-}
-dojo.event.connect("before",window,"onunload",this,"_saveContent");
-}
-if(h.ie70&&this.useActiveX){
-dojo.debug("activeX in ie70 is not currently supported, useActiveX is ignored for now.");
-this.useActiveX=false;
-}
-if(this.useActiveX&&h.ie){
-var _10=this;
-setTimeout(function(){
-_10._drawObject(_8);
-},0);
-}else{
-if(h.ie||this._safariIsLeopard()||h.opera){
-this.iframe=dojo.doc().createElement("iframe");
-this.iframe.src="javascript:void(0)";
-this.editorObject=this.iframe;
-with(this.iframe.style){
-border="0";
-width="100%";
-}
-this.iframe.frameBorder=0;
-this.editingArea.appendChild(this.iframe);
-this.window=this.iframe.contentWindow;
-this.document=this.window.document;
-this.document.open();
-this.document.write("<html><head><style>body{margin:0;padding:0;border:0;overflow:hidden;}</style></head><body><div></div></body></html>");
-this.document.close();
-this.editNode=this.document.body.firstChild;
-this.editNode.contentEditable=true;
-with(this.iframe.style){
-if(h.ie70){
-if(this.height){
-height=this.height;
-}
-if(this.minHeight){
-minHeight=this.minHeight;
-}
-}else{
-height=this.height?this.height:this.minHeight;
-}
-}
-var _11=["p","pre","address","h1","h2","h3","h4","h5","h6","ol","div","ul"];
-var _12="";
-for(var i in _11){
-if(_11[i].charAt(1)!="l"){
-_12+="<"+_11[i]+"><span>content</span></"+_11[i]+">";
-}else{
-_12+="<"+_11[i]+"><li>content</li></"+_11[i]+">";
-}
-}
-with(this.editNode.style){
-position="absolute";
-left="-2000px";
-top="-2000px";
-}
-this.editNode.innerHTML=_12;
-var _13=this.editNode.firstChild;
-while(_13){
-dojo.withGlobal(this.window,"selectElement",dojo.html.selection,[_13.firstChild]);
-var _14=_13.tagName.toLowerCase();
-this._local2NativeFormatNames[_14]=this.queryCommandValue("formatblock");
-this._native2LocalFormatNames[this._local2NativeFormatNames[_14]]=_14;
-_13=_13.nextSibling;
-}
-with(this.editNode.style){
-position="";
-left="";
-top="";
-}
-this.editNode.innerHTML=_8;
-if(this.height){
-this.document.body.style.overflowY="scroll";
-}
-dojo.lang.forEach(this.events,function(e){
-dojo.event.connect(this.editNode,e.toLowerCase(),this,e);
-},this);
-this.onLoad();
-}else{
-this._drawIframe(_8);
-this.editorObject=this.iframe;
-}
-}
-if(this.domNode.nodeName=="LI"){
-this.domNode.lastChild.style.marginTop="-1.2em";
-}
-dojo.html.addClass(this.domNode,"RichTextEditable");
-this.isClosed=false;
-},_hasCollapseableMargin:function(_16,_17){
-if(dojo.html.getPixelValue(_16,"border-"+_17+"-width",false)){
-return false;
-}else{
-if(dojo.html.getPixelValue(_16,"padding-"+_17,false)){
-return false;
-}else{
-return true;
-}
-}
-},_getContributingMargin:function(_18,_19){
-if(_19=="top"){
-var _1a="previousSibling";
-var _1b="nextSibling";
-var _1c="firstChild";
-var _1d="margin-top";
-var _1e="margin-bottom";
-}else{
-var _1a="nextSibling";
-var _1b="previousSibling";
-var _1c="lastChild";
-var _1d="margin-bottom";
-var _1e="margin-top";
-}
-var _1f=dojo.html.getPixelValue(_18,_1d,false);
-function isSignificantNode(_20){
-return !(_20.nodeType==3&&dojo.string.isBlank(_20.data))&&dojo.html.getStyle(_20,"display")!="none"&&!dojo.html.isPositionAbsolute(_20);
-}
-var _21=0;
-var _22=_18[_1c];
-while(_22){
-while((!isSignificantNode(_22))&&_22[_1b]){
-_22=_22[_1b];
-}
-_21=Math.max(_21,dojo.html.getPixelValue(_22,_1d,false));
-if(!this._hasCollapseableMargin(_22,_19)){
-break;
-}
-_22=_22[_1c];
-}
-if(!this._hasCollapseableMargin(_18,_19)){
-return parseInt(_21);
-}
-var _23=0;
-var _24=_18[_1a];
-while(_24){
-if(isSignificantNode(_24)){
-_23=dojo.html.getPixelValue(_24,_1e,false);
-break;
-}
-_24=_24[_1a];
-}
-if(!_24){
-_23=dojo.html.getPixelValue(_18.parentNode,_1d,false);
-}
-if(_21>_1f){
-return parseInt(Math.max((_21-_1f)-_23,0));
-}else{
-return 0;
-}
-},_drawIframe:function(_25){
-var _26=Boolean(dojo.render.html.moz&&(typeof window.XML=="undefined"));
-if(!this.iframe){
-var _27=(new dojo.uri.Uri(dojo.doc().location)).host;
-this.iframe=dojo.doc().createElement("iframe");
-with(this.iframe){
-style.border="none";
-style.lineHeight="0";
-style.verticalAlign="bottom";
-scrolling=this.height?"auto":"no";
-}
-}
-if(djConfig["useXDomain"]&&!djConfig["dojoRichTextFrameUrl"]){
-dojo.debug("dojo.widget.RichText: When using cross-domain Dojo builds,"+" please save src/widget/templates/richtextframe.html to your domain and set djConfig.dojoRichTextFrameUrl"+" to the path on your domain to richtextframe.html");
-}
-this.iframe.src=(djConfig["dojoRichTextFrameUrl"]||dojo.uri.moduleUri("dojo.widget","templates/richtextframe.html"))+((dojo.doc().domain!=_27)?("#"+dojo.doc().domain):"");
-this.iframe.width=this.inheritWidth?this._oldWidth:"100%";
-if(this.height){
-this.iframe.style.height=this.height;
-}else{
-var _28=this._oldHeight;
-if(this._hasCollapseableMargin(this.domNode,"top")){
-_28+=this._firstChildContributingMargin;
-}
-if(this._hasCollapseableMargin(this.domNode,"bottom")){
-_28+=this._lastChildContributingMargin;
-}
-this.iframe.height=_28;
-}
-var _29=dojo.doc().createElement("div");
-_29.innerHTML=_25;
-this.editingArea.appendChild(_29);
-if(this.relativeImageUrls){
-var _2a=_29.getElementsByTagName("img");
-for(var i=0;i<_2a.length;i++){
-_2a[i].src=(new dojo.uri.Uri(dojo.global().location,_2a[i].src)).toString();
-}
-_25=_29.innerHTML;
-}
-var _2c=dojo.html.firstElement(_29);
-var _2d=dojo.html.lastElement(_29);
-if(_2c){
-_2c.style.marginTop=this._firstChildContributingMargin+"px";
-}
-if(_2d){
-_2d.style.marginBottom=this._lastChildContributingMargin+"px";
-}
-this.editingArea.appendChild(this.iframe);
-if(dojo.render.html.safari){
-this.iframe.src=this.iframe.src;
-}
-var _2e=false;
-var _2f=dojo.lang.hitch(this,function(){
-if(!_2e){
-_2e=true;
-}else{
-return;
-}
-if(!this.editNode){
-if(this.iframe.contentWindow){
-this.window=this.iframe.contentWindow;
-this.document=this.iframe.contentWindow.document;
-}else{
-if(this.iframe.contentDocument){
-this.window=this.iframe.contentDocument.window;
-this.document=this.iframe.contentDocument;
-}
-}
-var _30=(function(_31){
-return function(_32){
-return dojo.html.getStyle(_31,_32);
-};
-})(this.domNode);
-var _33=_30("font-weight")+" "+_30("font-size")+" "+_30("font-family");
-var _34="1.0";
-var _35=dojo.html.getUnitValue(this.domNode,"line-height");
-if(_35.value&&_35.units==""){
-_34=_35.value;
-}
-dojo.html.insertCssText("body,html{background:transparent;padding:0;margin:0;}"+"body{top:0;left:0;right:0;"+(((this.height)||(dojo.render.html.opera))?"":"position:fixed;")+"font:"+_33+";"+"min-height:"+this.minHeight+";"+"line-height:"+_34+"}"+"p{margin: 1em 0 !important;}"+"body > *:first-child{padding-top:0 !important;margin-top:"+this._firstChildContributingMargin+"px !important;}"+"body > *:last-child{padding-bottom:0 !important;margin-bottom:"+this._lastChildContributingMargin+"px !important;}"+"li > ul:-moz-first-node, li > ol:-moz-first-node{padding-top:1.2em;}\n"+"li{min-height:1.2em;}"+"",this.document);
-dojo.html.removeNode(_29);
-this.document.body.innerHTML=_25;
-if(_26||dojo.render.html.safari){
-this.document.designMode="on";
-}
-this.onLoad();
-}else{
-dojo.html.removeNode(_29);
-this.editNode.innerHTML=_25;
-this.onDisplayChanged();
-}
-});
-if(this.editNode){
-_2f();
-}else{
-if(dojo.render.html.moz){
-this.iframe.onload=function(){
-setTimeout(_2f,250);
-};
-}else{
-this.iframe.onload=_2f;
-}
-}
-},_applyEditingAreaStyleSheets:function(){
-var _36=[];
-if(this.styleSheets){
-_36=this.styleSheets.split(";");
-this.styleSheets="";
-}
-_36=_36.concat(this.editingAreaStyleSheets);
-this.editingAreaStyleSheets=[];
-if(_36.length>0){
-for(var i=0;i<_36.length;i++){
-var url=_36[i];
-if(url){
-this.addStyleSheet(dojo.uri.dojoUri(url));
-}
-}
-}
-},addStyleSheet:function(uri){
-var url=uri.toString();
-if(dojo.lang.find(this.editingAreaStyleSheets,url)>-1){
-dojo.debug("dojo.widget.RichText.addStyleSheet: Style sheet "+url+" is already applied to the editing area!");
-return;
-}
-if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){
-url=(new dojo.uri.Uri(dojo.global().location,url)).toString();
-}
-this.editingAreaStyleSheets.push(url);
-if(this.document.createStyleSheet){
-this.document.createStyleSheet(url);
-}else{
-var _3b=this.document.getElementsByTagName("head")[0];
-var _3c=this.document.createElement("link");
-with(_3c){
-rel="stylesheet";
-type="text/css";
-href=url;
-}
-_3b.appendChild(_3c);
-}
-},removeStyleSheet:function(uri){
-var url=uri.toString();
-if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){
-url=(new dojo.uri.Uri(dojo.global().location,url)).toString();
-}
-var _3f=dojo.lang.find(this.editingAreaStyleSheets,url);
-if(_3f==-1){
-dojo.debug("dojo.widget.RichText.removeStyleSheet: Style sheet "+url+" is not applied to the editing area so it can not be removed!");
-return;
-}
-delete this.editingAreaStyleSheets[_3f];
-var _40=this.document.getElementsByTagName("link");
-for(var i=0;i<_40.length;i++){
-if(_40[i].href==url){
-if(dojo.render.html.ie){
-_40[i].href="";
-}
-dojo.html.removeNode(_40[i]);
-break;
-}
-}
-},_drawObject:function(_42){
-this.object=dojo.html.createExternalElement(dojo.doc(),"object");
-with(this.object){
-classid="clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A";
-width=this.inheritWidth?this._oldWidth:"100%";
-style.height=this.height?this.height:(this._oldHeight+"px");
-Scrollbars=this.height?true:false;
-Appearance=this._activeX.appearance.flat;
-}
-this.editorObject=this.object;
-this.editingArea.appendChild(this.object);
-this.object.attachEvent("DocumentComplete",dojo.lang.hitch(this,"onLoad"));
-dojo.lang.forEach(this.events,function(e){
-this.object.attachEvent(e.toLowerCase(),dojo.lang.hitch(this,e));
-},this);
-this.object.DocumentHTML="<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">"+"<html><title></title>"+"<style type=\"text/css\">"+"    body,html { padding: 0; margin: 0; }"+(this.height?"":"    body,  { overflow: hidden; }")+"</style>"+"<body><div>"+_42+"<div></body></html>";
-this._cacheLocalBlockFormatNames();
-},_local2NativeFormatNames:{},_native2LocalFormatNames:{},_cacheLocalBlockFormatNames:function(){
-if(!this._native2LocalFormatNames["p"]){
-var obj=this.object;
-var _45=false;
-if(!obj){
-try{
-obj=dojo.html.createExternalElement(dojo.doc(),"object");
-obj.classid="clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A";
-dojo.body().appendChild(obj);
-obj.DocumentHTML="<html><head></head><body></body></html>";
-}
-catch(e){
-_45=true;
-}
-}
-try{
-var _46=new ActiveXObject("DEGetBlockFmtNamesParam.DEGetBlockFmtNamesParam");
-obj.ExecCommand(this._activeX.command["getblockformatnames"],0,_46);
-var _47=new VBArray(_46.Names);
-var _48=_47.toArray();
-var _49=["p","pre","address","h1","h2","h3","h4","h5","h6","ol","ul","","","","","div"];
-for(var i=0;i<_49.length;++i){
-if(_49[i].length>0){
-this._local2NativeFormatNames[_48[i]]=_49[i];
-this._native2LocalFormatNames[_49[i]]=_48[i];
-}
-}
-}
-catch(e){
-_45=true;
-}
-if(obj&&!this.object){
-dojo.body().removeChild(obj);
-}
-}
-return !_45;
-},_isResized:function(){
-return false;
-},onLoad:function(e){
-this.isLoaded=true;
-if(this.object){
-this.document=this.object.DOM;
-this.window=this.document.parentWindow;
-this.editNode=this.document.body.firstChild;
-this.editingArea.style.height=this.height?this.height:this.minHeight;
-if(!this.height){
-this.connect(this,"onDisplayChanged","_updateHeight");
-}
-this.window._frameElement=this.object;
-}else{
-if(this.iframe&&!dojo.render.html.ie){
-this.editNode=this.document.body;
-if(!this.height){
-this.connect(this,"onDisplayChanged","_updateHeight");
-}
-try{
-this.document.execCommand("useCSS",false,true);
-this.document.execCommand("styleWithCSS",false,false);
-}
-catch(e2){
-}
-if(dojo.render.html.safari){
-this.connect(this.editNode,"onblur","onBlur");
-this.connect(this.editNode,"onfocus","onFocus");
-this.connect(this.editNode,"onclick","onFocus");
-this.interval=setInterval(dojo.lang.hitch(this,"onDisplayChanged"),750);
-}else{
-if(dojo.render.html.mozilla||dojo.render.html.opera){
-var doc=this.document;
-var _4d=dojo.event.browser.addListener;
-var _4e=this;
-dojo.lang.forEach(this.events,function(e){
-var l=_4d(_4e.document,e.substr(2).toLowerCase(),dojo.lang.hitch(_4e,e));
-if(e=="onBlur"){
-var _51={unBlur:function(e){
-dojo.event.browser.removeListener(doc,"blur",l);
-}};
-dojo.event.connect("before",_4e,"close",_51,"unBlur");
-}
-});
-}
-}
-}else{
-if(dojo.render.html.ie){
-if(!this.height){
-this.connect(this,"onDisplayChanged","_updateHeight");
-}
-this.editNode.style.zoom=1;
-}
-}
-}
-this._applyEditingAreaStyleSheets();
-if(this.focusOnLoad){
-this.focus();
-}
-this.onDisplayChanged(e);
-if(this.onLoadDeferred){
-this.onLoadDeferred.callback(true);
-}
-},onKeyDown:function(e){
-if((!e)&&(this.object)){
-e=dojo.event.browser.fixEvent(this.window.event);
-}
-if((dojo.render.html.ie)&&(e.keyCode==e.KEY_TAB)){
-e.preventDefault();
-e.stopPropagation();
-this.execCommand((e.shiftKey?"outdent":"indent"));
-}else{
-if(dojo.render.html.ie){
-if((65<=e.keyCode)&&(e.keyCode<=90)){
-e.charCode=e.keyCode;
-this.onKeyPress(e);
-}
-}
-}
-},onKeyUp:function(e){
-return;
-},KEY_CTRL:1,onKeyPress:function(e){
-if((!e)&&(this.object)){
-e=dojo.event.browser.fixEvent(this.window.event);
-}
-var _56=e.ctrlKey?this.KEY_CTRL:0;
-if(this._keyHandlers[e.key]){
-var _57=this._keyHandlers[e.key],i=0,_59;
-while(_59=_57[i++]){
-if(_56==_59.modifiers){
-e.preventDefault();
-_59.handler.call(this);
-break;
-}
-}
-}
-dojo.lang.setTimeout(this,this.onKeyPressed,1,e);
-},addKeyHandler:function(key,_5b,_5c){
-if(!(this._keyHandlers[key] instanceof Array)){
-this._keyHandlers[key]=[];
-}
-this._keyHandlers[key].push({modifiers:_5b||0,handler:_5c});
-},onKeyPressed:function(e){
-this.onDisplayChanged();
-},onClick:function(e){
-this.onDisplayChanged(e);
-},onBlur:function(e){
-},_initialFocus:true,onFocus:function(e){
-if((dojo.render.html.mozilla)&&(this._initialFocus)){
-this._initialFocus=false;
-if(dojo.string.trim(this.editNode.innerHTML)=="&nbsp;"){
-this.placeCursorAtStart();
-}
-}
-},blur:function(){
-if(this.iframe){
-this.window.blur();
-}else{
-if(this.object){
-this.document.body.blur();
-}else{
-if(this.editNode){
-this.editNode.blur();
-}
-}
-}
-},focus:function(){
-if(this.iframe&&!dojo.render.html.ie){
-this.window.focus();
-}else{
-if(this.object){
-this.document.focus();
-}else{
-if(this.editNode&&this.editNode.focus){
-this.editNode.focus();
-}else{
-dojo.debug("Have no idea how to focus into the editor!");
-}
-}
-}
-},onDisplayChanged:function(e){
-},_activeX:{command:{bold:5000,italic:5023,underline:5048,justifycenter:5024,justifyleft:5025,justifyright:5026,cut:5003,copy:5002,paste:5032,"delete":5004,undo:5049,redo:5033,removeformat:5034,selectall:5035,unlink:5050,indent:5018,outdent:5031,insertorderedlist:5030,insertunorderedlist:5051,inserttable:5022,insertcell:5019,insertcol:5020,insertrow:5021,deletecells:5005,deletecols:5006,deleterows:5007,mergecells:5029,splitcell:5047,setblockformat:5043,getblockformat:5011,getblockformatnames:5012,setfontname:5044,getfontname:5013,setfontsize:5045,getfontsize:5014,setbackcolor:5042,getbackcolor:5010,setforecolor:5046,getforecolor:5015,findtext:5008,font:5009,hyperlink:5016,image:5017,lockelement:5027,makeabsolute:5028,sendbackward:5036,bringforward:5037,sendbelowtext:5038,bringabovetext:5039,sendtoback:5040,bringtofront:5041,properties:5052},ui:{"default":0,prompt:1,noprompt:2},status:{notsupported:0,disabled:1,enabled:3,latched:7,ninched:11},appearance:{flat:0,inset:1},state:{unchecked:0,checked:1,gray:2}},_normalizeCommand:function(cmd){
-var drh=dojo.render.html;
-var _64=cmd.toLowerCase();
-if(_64=="formatblock"){
-if(drh.safari){
-_64="heading";
-}
-}else{
-if(this.object){
-switch(_64){
-case "createlink":
-_64="hyperlink";
-break;
-case "insertimage":
-_64="image";
-break;
-}
-}else{
-if(_64=="hilitecolor"&&!drh.mozilla){
-_64="backcolor";
-}
-}
-}
-return _64;
-},_safariIsLeopard:function(){
-var _65=false;
-if(dojo.render.html.safari){
-var tmp=dojo.render.html.UA.split("AppleWebKit/")[1];
-var ver=parseFloat(tmp.split(" ")[0]);
-if(ver>=420){
-_65=true;
-}
-}
-return _65;
-},queryCommandAvailable:function(_68){
-var ie=1;
-var _6a=1<<1;
-var _6b=1<<2;
-var _6c=1<<3;
-var _6d=1<<4;
-var _6e=this._safariIsLeopard();
-function isSupportedBy(_6f){
-return {ie:Boolean(_6f&ie),mozilla:Boolean(_6f&_6a),safari:Boolean(_6f&_6b),safari420:Boolean(_6f&_6d),opera:Boolean(_6f&_6c)};
-}
-var _70=null;
-switch(_68.toLowerCase()){
-case "bold":
-case "italic":
-case "underline":
-case "subscript":
-case "superscript":
-case "fontname":
-case "fontsize":
-case "forecolor":
-case "hilitecolor":
-case "justifycenter":
-case "justifyfull":
-case "justifyleft":
-case "justifyright":
-case "delete":
-case "selectall":
-_70=isSupportedBy(_6a|ie|_6b|_6c);
-break;
-case "createlink":
-case "unlink":
-case "removeformat":
-case "inserthorizontalrule":
-case "insertimage":
-case "insertorderedlist":
-case "insertunorderedlist":
-case "indent":
-case "outdent":
-case "formatblock":
-case "inserthtml":
-case "undo":
-case "redo":
-case "strikethrough":
-_70=isSupportedBy(_6a|ie|_6c|_6d);
-break;
-case "blockdirltr":
-case "blockdirrtl":
-case "dirltr":
-case "dirrtl":
-case "inlinedirltr":
-case "inlinedirrtl":
-_70=isSupportedBy(ie);
-break;
-case "cut":
-case "copy":
-case "paste":
-_70=isSupportedBy(ie|_6a|_6d);
-break;
-case "inserttable":
-_70=isSupportedBy(_6a|(this.object?ie:0));
-break;
-case "insertcell":
-case "insertcol":
-case "insertrow":
-case "deletecells":
-case "deletecols":
-case "deleterows":
-case "mergecells":
-case "splitcell":
-_70=isSupportedBy(this.object?ie:0);
-break;
-default:
-return false;
-}
-return (dojo.render.html.ie&&_70.ie)||(dojo.render.html.mozilla&&_70.mozilla)||(dojo.render.html.safari&&_70.safari)||(_6e&&_70.safari420)||(dojo.render.html.opera&&_70.opera);
-},execCommand:function(_71,_72){
-var _73;
-this.focus();
-_71=this._normalizeCommand(_71);
-if(_72!=undefined){
-if(_71=="heading"){
-throw new Error("unimplemented");
-}else{
-if(_71=="formatblock"){
-if(this.object){
-_72=this._native2LocalFormatNames[_72];
-}else{
-if(dojo.render.html.ie){
-_72="<"+_72+">";
-}
-}
-}
-}
-}
-if(this.object){
-switch(_71){
-case "hilitecolor":
-_71="setbackcolor";
-break;
-case "forecolor":
-case "backcolor":
-case "fontsize":
-case "fontname":
-_71="set"+_71;
-break;
-case "formatblock":
-_71="setblockformat";
-}
-if(_71=="strikethrough"){
-_71="inserthtml";
-var _74=this.document.selection.createRange();
-if(!_74.htmlText){
-return;
-}
-_72=_74.htmlText.strike();
-}else{
-if(_71=="inserthorizontalrule"){
-_71="inserthtml";
-_72="<hr>";
-}
-}
-if(_71=="inserthtml"){
-var _74=this.document.selection.createRange();
-if(this.document.selection.type.toUpperCase()=="CONTROL"){
-for(var i=0;i<_74.length;i++){
-_74.item(i).outerHTML=_72;
-}
-}else{
-_74.pasteHTML(_72);
-_74.select();
-}
-_73=true;
-}else{
-if(arguments.length==1){
-_73=this.object.ExecCommand(this._activeX.command[_71],this._activeX.ui.noprompt);
-}else{
-_73=this.object.ExecCommand(this._activeX.command[_71],this._activeX.ui.noprompt,_72);
-}
-}
-}else{
-if(_71=="inserthtml"){
-if(dojo.render.html.ie){
-var _76=this.document.selection.createRange();
-_76.pasteHTML(_72);
-_76.select();
-return true;
-}else{
-return this.document.execCommand(_71,false,_72);
-}
-}else{
-if((_71=="unlink")&&(this.queryCommandEnabled("unlink"))&&(dojo.render.html.mozilla)){
-var _77=this.window.getSelection();
-var _78=_77.getRangeAt(0);
-var _79=_78.startContainer;
-var _7a=_78.startOffset;
-var _7b=_78.endContainer;
-var _7c=_78.endOffset;
-var a=dojo.withGlobal(this.window,"getAncestorElement",dojo.html.selection,["a"]);
-dojo.withGlobal(this.window,"selectElement",dojo.html.selection,[a]);
-_73=this.document.execCommand("unlink",false,null);
-var _78=this.document.createRange();
-_78.setStart(_79,_7a);
-_78.setEnd(_7b,_7c);
-_77.removeAllRanges();
-_77.addRange(_78);
-return _73;
-}else{
-if((_71=="hilitecolor")&&(dojo.render.html.mozilla)){
-this.document.execCommand("useCSS",false,false);
-_73=this.document.execCommand(_71,false,_72);
-this.document.execCommand("useCSS",false,true);
-}else{
-if((dojo.render.html.ie)&&((_71=="backcolor")||(_71=="forecolor"))){
-_72=arguments.length>1?_72:null;
-_73=this.document.execCommand(_71,false,_72);
-}else{
-_72=arguments.length>1?_72:null;
-if(_72||_71!="createlink"){
-_73=this.document.execCommand(_71,false,_72);
-}
-}
-}
-}
-}
-}
-this.onDisplayChanged();
-return _73;
-},queryCommandEnabled:function(_7e){
-_7e=this._normalizeCommand(_7e);
-if(this.object){
-switch(_7e){
-case "hilitecolor":
-_7e="setbackcolor";
-break;
-case "forecolor":
-case "backcolor":
-case "fontsize":
-case "fontname":
-_7e="set"+_7e;
-break;
-case "formatblock":
-_7e="setblockformat";
-break;
-case "strikethrough":
-_7e="bold";
-break;
-case "inserthorizontalrule":
-return true;
-}
-if(typeof this._activeX.command[_7e]=="undefined"){
-return false;
-}
-var _7f=this.object.QueryStatus(this._activeX.command[_7e]);
-return ((_7f!=this._activeX.status.notsupported)&&(_7f!=this._activeX.status.disabled));
-}else{
-if(dojo.render.html.mozilla){
-if(_7e=="unlink"){
-return dojo.withGlobal(this.window,"hasAncestorElement",dojo.html.selection,["a"]);
-}else{
-if(_7e=="inserttable"){
-return true;
-}
-}
-}
-var _80=(dojo.render.html.ie)?this.document.selection.createRange():this.document;
-return _80.queryCommandEnabled(_7e);
-}
-},queryCommandState:function(_81){
-_81=this._normalizeCommand(_81);
-if(this.object){
-if(_81=="forecolor"){
-_81="setforecolor";
-}else{
-if(_81=="backcolor"){
-_81="setbackcolor";
-}else{
-if(_81=="strikethrough"){
-return dojo.withGlobal(this.window,"hasAncestorElement",dojo.html.selection,["strike"]);
-}else{
-if(_81=="inserthorizontalrule"){
-return false;
-}
-}
-}
-}
-if(typeof this._activeX.command[_81]=="undefined"){
-return null;
-}
-var _82=this.object.QueryStatus(this._activeX.command[_81]);
-return ((_82==this._activeX.status.latched)||(_82==this._activeX.status.ninched));
-}else{
-return this.document.queryCommandState(_81);
-}
-},queryCommandValue:function(_83){
-_83=this._normalizeCommand(_83);
-if(this.object){
-switch(_83){
-case "forecolor":
-case "backcolor":
-case "fontsize":
-case "fontname":
-_83="get"+_83;
-return this.object.execCommand(this._activeX.command[_83],this._activeX.ui.noprompt);
-case "formatblock":
-var _84=this.object.execCommand(this._activeX.command["getblockformat"],this._activeX.ui.noprompt);
-if(_84){
-return this._local2NativeFormatNames[_84];
-}
-}
-}else{
-if(dojo.render.html.ie&&_83=="formatblock"){
-return this._local2NativeFormatNames[this.document.queryCommandValue(_83)]||this.document.queryCommandValue(_83);
-}
-return this.document.queryCommandValue(_83);
-}
-},placeCursorAtStart:function(){
-this.focus();
-if(dojo.render.html.moz&&this.editNode.firstChild&&this.editNode.firstChild.nodeType!=dojo.dom.TEXT_NODE){
-dojo.withGlobal(this.window,"selectElementChildren",dojo.html.selection,[this.editNode.firstChild]);
-}else{
-dojo.withGlobal(this.window,"selectElementChildren",dojo.html.selection,[this.editNode]);
-}
-dojo.withGlobal(this.window,"collapse",dojo.html.selection,[true]);
-},placeCursorAtEnd:function(){
-this.focus();
-if(dojo.render.html.moz&&this.editNode.lastChild&&this.editNode.lastChild.nodeType!=dojo.dom.TEXT_NODE){
-dojo.withGlobal(this.window,"selectElementChildren",dojo.html.selection,[this.editNode.lastChild]);
-}else{
-dojo.withGlobal(this.window,"selectElementChildren",dojo.html.selection,[this.editNode]);
-}
-dojo.withGlobal(this.window,"collapse",dojo.html.selection,[false]);
-},replaceEditorContent:function(_85){
-_85=this._preFilterContent(_85);
-if(this.isClosed){
-this.domNode.innerHTML=_85;
-}else{
-if(this.window&&this.window.getSelection&&!dojo.render.html.moz){
-this.editNode.innerHTML=_85;
-}else{
-if((this.window&&this.window.getSelection)||(this.document&&this.document.selection)){
-this.execCommand("selectall");
-if(dojo.render.html.moz&&!_85){
-_85="&nbsp;";
-}
-this.execCommand("inserthtml",_85);
-}
-}
-}
-},_preFilterContent:function(_86){
-var ec=_86;
-dojo.lang.forEach(this.contentPreFilters,function(ef){
-ec=ef(ec);
-});
-if(this.contentDomPreFilters.length>0){
-var dom=dojo.doc().createElement("div");
-dom.style.display="none";
-dojo.body().appendChild(dom);
-dom.innerHTML=ec;
-dojo.lang.forEach(this.contentDomPreFilters,function(ef){
-dom=ef(dom);
-});
-ec=dom.innerHTML;
-dojo.body().removeChild(dom);
-}
-return ec;
-},_postFilterContent:function(_8b){
-var ec=_8b;
-if(this.contentDomPostFilters.length>0){
-var dom=this.document.createElement("div");
-dom.innerHTML=ec;
-dojo.lang.forEach(this.contentDomPostFilters,function(ef){
-dom=ef(dom);
-});
-ec=dom.innerHTML;
-}
-dojo.lang.forEach(this.contentPostFilters,function(ef){
-ec=ef(ec);
-});
-return ec;
-},_lastHeight:0,_updateHeight:function(){
-if(!this.isLoaded){
-return;
-}
-if(this.height){
-return;
-}
-var _90=dojo.html.getBorderBox(this.editNode).height;
-if(!_90){
-_90=dojo.html.getBorderBox(this.document.body).height;
-}
-if(_90==0){
-dojo.debug("Can not figure out the height of the editing area!");
-return;
-}
-this._lastHeight=_90;
-this.editorObject.style.height=this._lastHeight+"px";
-this.window.scrollTo(0,0);
-},_saveContent:function(e){
-var _92=dojo.doc().getElementById("dojo.widget.RichText.savedContent");
-_92.value+=this._SEPARATOR+this.saveName+":"+this.getEditorContent();
-},getEditorContent:function(){
-var ec="";
-try{
-ec=(this._content.length>0)?this._content:this.editNode.innerHTML;
-if(dojo.string.trim(ec)=="&nbsp;"){
-ec="";
-}
-}
-catch(e){
-}
-if(dojo.render.html.ie&&!this.object){
-var re=new RegExp("(?:<p>&nbsp;</p>[\n\r]*)+$","i");
-ec=ec.replace(re,"");
-}
-ec=this._postFilterContent(ec);
-if(this.relativeImageUrls){
-var _95=dojo.global().location.protocol+"//"+dojo.global().location.host;
-var _96=dojo.global().location.pathname;
-if(_96.match(/\/$/)){
-}else{
-var _97=_96.split("/");
-if(_97.length){
-_97.pop();
-}
-_96=_97.join("/")+"/";
-}
-var _98=new RegExp("(<img[^>]* src=[\"'])("+_95+"("+_96+")?)","ig");
-ec=ec.replace(_98,"$1");
-}
-return ec;
-},close:function(_99,_9a){
-if(this.isClosed){
-return false;
-}
-if(arguments.length==0){
-_99=true;
-}
-this._content=this._postFilterContent(this.editNode.innerHTML);
-var _9b=(this.savedContent!=this._content);
-if(this.interval){
-clearInterval(this.interval);
-}
-if(dojo.render.html.ie&&!this.object){
-dojo.event.browser.clean(this.editNode);
-}
-if(this.iframe){
-delete this.iframe;
-}
-if(this.textarea){
-with(this.textarea.style){
-position="";
-left=top="";
-if(dojo.render.html.ie){
-overflow=this.__overflow;
-this.__overflow=null;
-}
-}
-if(_99){
-this.textarea.value=this._content;
-}else{
-this.textarea.value=this.savedContent;
-}
-dojo.html.removeNode(this.domNode);
-this.domNode=this.textarea;
-}else{
-if(_99){
-if(dojo.render.html.moz){
-var nc=dojo.doc().createElement("span");
-this.domNode.appendChild(nc);
-nc.innerHTML=this.editNode.innerHTML;
-}else{
-this.domNode.innerHTML=this._content;
-}
-}else{
-this.domNode.innerHTML=this.savedContent;
-}
-}
-dojo.html.removeClass(this.domNode,"RichTextEditable");
-this.isClosed=true;
-this.isLoaded=false;
-delete this.editNode;
-if(this.window._frameElement){
-this.window._frameElement=null;
-}
-this.window=null;
-this.document=null;
-this.object=null;
-this.editingArea=null;
-this.editorObject=null;
-return _9b;
-},destroyRendering:function(){
-},destroy:function(){
-this.destroyRendering();
-if(!this.isClosed){
-this.close(false);
-}
-dojo.widget.RichText.superclass.destroy.call(this);
-},connect:function(_9d,_9e,_9f){
-dojo.event.connect(_9d,_9e,this,_9f);
-},disconnect:function(_a0,_a1,_a2){
-dojo.event.disconnect(_a0,_a1,this,_a2);
-},disconnectAllWithRoot:function(_a3){
-dojo.deprecated("disconnectAllWithRoot","is deprecated. No need to disconnect manually","0.5");
-},_fixContentForMoz:function(_a4){
-_a4=_a4.replace(/<strong([ \>])/gi,"<b$1");
-_a4=_a4.replace(/<\/strong>/gi,"</b>");
-_a4=_a4.replace(/<em([ \>])/gi,"<i$1");
-_a4=_a4.replace(/<\/em>/gi,"</i>");
-return _a4;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Rounded.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Rounded.js
deleted file mode 100644
index 5aeb533..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Rounded.js
+++ /dev/null
@@ -1,516 +0,0 @@
-dojo.provide("dojo.widget.Rounded");
-dojo.widget.tags.addParseTreeHandler("dojo:rounded");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.ContentPane");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.display");
-dojo.require("dojo.gfx.color");
-dojo.deprecated("dojo.widget.Rounded will be removed in version 0.5; you can now apply rounded corners to any block element using dojo.lfx.rounded.","0.5");
-dojo.widget.defineWidget("dojo.widget.Rounded",dojo.widget.ContentPane,{isSafari:dojo.render.html.safari,boxMargin:"50px",radius:14,domNode:"",corners:"TR,TL,BR,BL",antiAlias:true,fillInTemplate:function(_1,_2){
-dojo.widget.Rounded.superclass.fillInTemplate.call(this,_1,_2);
-dojo.html.insertCssFile(this.templateCssPath);
-if(this.domNode.style.height<=0){
-var _3=(this.radius*1)+this.domNode.clientHeight;
-this.domNode.style.height=_3+"px";
-}
-if(this.domNode.style.width<=0){
-var _4=(this.radius*1)+this.domNode.clientWidth;
-this.domNode.style.width=_4+"px";
-}
-var _5=["TR","TL","BR","BL"];
-var _6=this.corners.split(",");
-this.settings={antiAlias:this.antiAlias};
-var _7=function(_8){
-var _9=_8.toLowerCase();
-if(dojo.lang.inArray(_6,_8)){
-this.settings[_9]={radius:this.radius,enabled:true};
-}else{
-this.settings[_9]={radius:0};
-}
-};
-dojo.lang.forEach(_5,_7,this);
-this.domNode.style.margin=this.boxMargin;
-this.curvyCorners(this.settings);
-this.applyCorners();
-},curvyCorners:function(_a){
-this.box=this.domNode;
-this.topContainer=null;
-this.bottomContainer=null;
-this.masterCorners=[];
-var _b=dojo.html.getStyle(this.box,"height");
-if(_b==""){
-_b="0px";
-}
-var _c=dojo.html.getStyle(this.box,"width");
-var _d=dojo.html.getStyle(this.box,"borderTopWidth");
-if(_d==""){
-_d="0px";
-}
-var _e=dojo.html.getStyle(this.box,"borderTopColor");
-if(_d>0){
-this.antiAlias=true;
-}
-var _f=dojo.html.getStyle(this.box,"backgroundColor");
-var _10=dojo.html.getStyle(this.box,"backgroundImage");
-var _11=dojo.html.getStyle(this.box,"position");
-this.boxHeight=parseInt(((_b!=""&&_b!="auto"&&_b.indexOf("%")==-1)?_b.substring(0,_b.indexOf("px")):this.box.scrollHeight));
-this.boxWidth=parseInt(((_c!=""&&_c!="auto"&&_c.indexOf("%")==-1)?_c.substring(0,_c.indexOf("px")):this.box.scrollWidth));
-this.borderWidth=parseInt(((_d!=""&&_d.indexOf("px")!==-1)?_d.slice(0,_d.indexOf("px")):0));
-var _12=new dojo.gfx.color.Color(_f);
-this.boxColour=((_f!=""&&_f!="transparent")?((_f.substr(0,3)=="rgb")?this.rgb2Hex(_f):_f):"#ffffff");
-this.borderColour=((_e!=""&&_e!="transparent"&&this.borderWidth>0)?((_e.substr(0,3)=="rgb")?this.rgb2Hex(_e):_e):this.boxColour);
-this.borderString=this.borderWidth+"px"+" solid "+this.borderColour;
-this.backgroundImage=((_10!="none")?_10:"");
-if(_11!="absolute"){
-this.box.style.position="relative";
-}
-this.applyCorners=function(){
-for(var t=0;t<2;t++){
-switch(t){
-case 0:
-if(this.settings.tl.enabled||this.settings.tr.enabled){
-var _14=document.createElement("DIV");
-with(_14.style){
-width="100%";
-fontSize="1px";
-overflow="hidden";
-position="absolute";
-paddingLeft=this.borderWidth+"px";
-paddingRight=this.borderWidth+"px";
-var _15=Math.max(this.settings.tl?this.settings.tl.radius:0,this.settings.tr?this.settings.tr.radius:0);
-height=_15+"px";
-top=0-_15+"px";
-left=0-this.borderWidth+"px";
-}
-this.topContainer=this.box.appendChild(_14);
-}
-break;
-case 1:
-if(this.settings.bl.enabled||this.settings.br.enabled){
-var _14=document.createElement("DIV");
-with(_14.style){
-width="100%";
-fontSize="1px";
-overflow="hidden";
-position="absolute";
-paddingLeft=this.borderWidth+"px";
-paddingRight=this.borderWidth+"px";
-var _16=Math.max(this.settings.bl?this.settings.bl.radius:0,this.settings.br?this.settings.br.radius:0);
-height=_16+"px";
-bottom=0-_16+"px";
-left=0-this.borderWidth+"px";
-}
-this.bottomContainer=this.box.appendChild(_14);
-}
-break;
-}
-}
-if(this.topContainer){
-this.box.style.borderTopWidth="0px";
-}
-if(this.bottomContainer){
-this.box.style.borderBottomWidth="0px";
-}
-var _17=["tr","tl","br","bl"];
-for(var i in _17){
-var cc=_17[i];
-if(!this.settings[cc]){
-if(((cc=="tr"||cc=="tl")&&this.topContainer!=null)||((cc=="br"||cc=="bl")&&this.bottomContainer!=null)){
-var _1a=document.createElement("DIV");
-_1a.style.position="relative";
-_1a.style.fontSize="1px";
-_1a.style.overflow="hidden";
-if(this.backgroundImage==""){
-_1a.style.backgroundColor=this.boxColour;
-}else{
-_1a.style.backgroundImage=this.backgroundImage;
-}
-switch(cc){
-case "tl":
-with(_1a.style){
-height=_15-this.borderWidth+"px";
-marginRight=this.settings.tr.radius-(this.borderWidth*2)+"px";
-borderLeft=this.borderString;
-borderTop=this.borderString;
-left=-this.borderWidth+"px";
-}
-break;
-case "tr":
-with(_1a.style){
-height=_15-this.borderWidth+"px";
-marginLeft=this.settings.tl.radius-(this.borderWidth*2)+"px";
-borderRight=this.borderString;
-borderTop=this.borderString;
-backgroundPosition="-"+this.boxWidth+"px 0px";
-left=this.borderWidth+"px";
-}
-break;
-case "bl":
-with(_1a.style){
-height=_16-this.borderWidth+"px";
-marginRight=this.settings.br.radius-(this.borderWidth*2)+"px";
-borderLeft=this.borderString;
-borderBottom=this.borderString;
-left=-this.borderWidth+"px";
-}
-break;
-case "br":
-with(_1a.style){
-height=_16-this.borderWidth+"px";
-marginLeft=this.settings.bl.radius-(this.borderWidth*2)+"px";
-borderRight=this.borderString;
-borderBottom=this.borderString;
-left=this.borderWidth+"px";
-}
-break;
-}
-}
-}else{
-if(this.masterCorners[this.settings[cc].radius]){
-var _1a=this.masterCorners[this.settings[cc].radius].cloneNode(true);
-}else{
-var _1a=document.createElement("DIV");
-with(_1a.style){
-height=this.settings[cc].radius+"px";
-width=this.settings[cc].radius+"px";
-position="absolute";
-fontSize="1px";
-overflow="hidden";
-}
-var _1b=parseInt(this.settings[cc].radius-this.borderWidth);
-for(var _1c=0,j=this.settings[cc].radius;_1c<j;_1c++){
-if((_1c+1)>=_1b){
-var y1=-1;
-}else{
-var y1=(Math.floor(Math.sqrt(Math.pow(_1b,2)-Math.pow((_1c+1),2)))-1);
-}
-if(_1b!=j){
-if((_1c)>=_1b){
-var y2=-1;
-}else{
-var y2=Math.ceil(Math.sqrt(Math.pow(_1b,2)-Math.pow(_1c,2)));
-}
-if((_1c+1)>=j){
-var y3=-1;
-}else{
-var y3=(Math.floor(Math.sqrt(Math.pow(j,2)-Math.pow((_1c+1),2)))-1);
-}
-}
-if((_1c)>=j){
-var y4=-1;
-}else{
-var y4=Math.ceil(Math.sqrt(Math.pow(j,2)-Math.pow(_1c,2)));
-}
-if(y1>-1){
-this.drawPixel(_1c,0,this.boxColour,100,(y1+1),_1a,-1,this.settings[cc].radius);
-}
-if(_1b!=j){
-if(this.antiAlias){
-for(var _22=(y1+1);_22<y2;_22++){
-if(this.backgroundImage!=""){
-var _23=(this.pixelFraction(_1c,_22,_1b)*100);
-if(_23<30){
-this.drawPixel(_1c,_22,this.borderColour,100,1,_1a,0,this.settings[cc].radius);
-}else{
-this.drawPixel(_1c,_22,this.borderColour,100,1,_1a,-1,this.settings[cc].radius);
-}
-}else{
-var _24=dojo.gfx.color.blend(this.boxColour,this.borderColour,this.pixelFraction(_1c,_22,_1b));
-this.drawPixel(_1c,_22,_24,100,1,_1a,0,this.settings[cc].radius);
-}
-}
-}
-if(y3>=y2){
-if(y1==-1){
-y1=0;
-}
-this.drawPixel(_1c,y2,this.borderColour,100,(y3-y2+1),_1a,0,this.settings[cc].radius);
-}
-var _25=this.borderColour;
-}else{
-var _25=this.boxColour;
-var y3=y1;
-}
-if(this.antiAlias){
-for(var _22=(y3+1);_22<y4;_22++){
-this.drawPixel(_1c,_22,_25,(this.pixelFraction(_1c,_22,j)*100),1,_1a,((this.borderWidth>0)?0:-1),this.settings[cc].radius);
-}
-}
-}
-this.masterCorners[this.settings[cc].radius]=_1a.cloneNode(true);
-}
-if(cc!="br"){
-for(var t=0,k=_1a.childNodes.length;t<k;t++){
-var _27=_1a.childNodes[t];
-var _28=parseInt(_27.style.top.substring(0,_27.style.top.indexOf("px")));
-var _29=parseInt(_27.style.left.substring(0,_27.style.left.indexOf("px")));
-var _2a=parseInt(_27.style.height.substring(0,_27.style.height.indexOf("px")));
-if(cc=="tl"||cc=="bl"){
-_27.style.left=this.settings[cc].radius-_29-1+"px";
-}
-if(cc=="tr"||cc=="tl"){
-_27.style.top=this.settings[cc].radius-_2a-_28+"px";
-}
-var _2b;
-switch(cc){
-case "tr":
-_2b=(-1*(Math.abs((this.boxWidth-this.settings[cc].radius+this.borderWidth)+_29)-(Math.abs(this.settings[cc].radius-_2a-_28-this.borderWidth))));
-_27.style.backgroundPosition=_2b+"px";
-break;
-case "tl":
-_2b=(-1*(Math.abs((this.settings[cc].radius-_29-1)-this.borderWidth)-(Math.abs(this.settings[cc].radius-_2a-_28-this.borderWidth))));
-_27.style.backgroundPosition=_2b+"px";
-break;
-case "bl":
-_2b=(-1*(Math.abs((this.settings[cc].radius-_29-1)-this.borderWidth)-(Math.abs((this.boxHeight+this.settings[cc].radius+_28)-this.borderWidth))));
-_27.style.backgroundPosition=_2b+"px";
-break;
-}
-}
-}
-}
-if(_1a){
-switch(cc){
-case "tl":
-if(_1a.style.position=="absolute"){
-_1a.style.top="0px";
-}
-if(_1a.style.position=="absolute"){
-_1a.style.left="0px";
-}
-if(this.topContainer){
-this.topContainer.appendChild(_1a);
-}
-break;
-case "tr":
-if(_1a.style.position=="absolute"){
-_1a.style.top="0px";
-}
-if(_1a.style.position=="absolute"){
-_1a.style.right="0px";
-}
-if(this.topContainer){
-this.topContainer.appendChild(_1a);
-}
-break;
-case "bl":
-if(_1a.style.position=="absolute"){
-_1a.style.bottom="0px";
-}
-if(_1a.style.position=="absolute"){
-_1a.style.left="0px";
-}
-if(this.bottomContainer){
-this.bottomContainer.appendChild(_1a);
-}
-break;
-case "br":
-if(_1a.style.position=="absolute"){
-_1a.style.bottom="0px";
-}
-if(_1a.style.position=="absolute"){
-_1a.style.right="0px";
-}
-if(this.bottomContainer){
-this.bottomContainer.appendChild(_1a);
-}
-break;
-}
-}
-}
-var _2c=[];
-_2c["t"]=this.settings.tl.enabled&&this.settings.tr.enabled?Math.abs(this.settings.tl.radius-this.settings.tr.radius):0;
-_2c["b"]=this.settings.bl.enabled&&this.settings.br.enabled?Math.abs(this.settings.bl.radius-this.settings.br.radius):0;
-for(var z in _2c){
-if(_2c[z]){
-var _2e=((this.settings[z+"l"].radius<this.settings[z+"r"].radius)?z+"l":z+"r");
-var _2f=document.createElement("DIV");
-with(_2f.style){
-height=_2c[z]+"px";
-width=this.settings[_2e].radius+"px";
-position="absolute";
-fontSize="1px";
-overflow="hidden";
-backgroundColor=this.boxColour;
-}
-switch(_2e){
-case "tl":
-with(_2f.style){
-bottom="0px";
-left="0px";
-borderLeft=this.borderString;
-}
-this.topContainer.appendChild(_2f);
-break;
-case "tr":
-with(_2f.style){
-bottom="0px";
-right="0px";
-borderRight=this.borderString;
-}
-this.topContainer.appendChild(_2f);
-break;
-case "bl":
-with(_2f.style){
-top="0px";
-left="0px";
-borderLeft=this.borderString;
-}
-this.bottomContainer.appendChild(_2f);
-break;
-case "br":
-with(_2f.style){
-top="0px";
-right="0px";
-borderRight=this.borderString;
-}
-this.bottomContainer.appendChild(_2f);
-break;
-}
-}
-var _30=document.createElement("DIV");
-with(_30.style){
-position="relative";
-fontSize="1px";
-overflow="hidden";
-backgroundColor=this.boxColour;
-}
-switch(z){
-case "t":
-if(this.topContainer){
-with(_30.style){
-height=_15-this.borderWidth+"px";
-marginLeft=this.settings.tl.radius-this.borderWidth+"px";
-marginRight=this.settings.tr.radius-this.borderWidth+"px";
-borderTop=this.borderString;
-}
-this.topContainer.appendChild(_30);
-}
-break;
-case "b":
-if(this.bottomContainer){
-with(_30.style){
-height=_16-this.borderWidth+"px";
-marginLeft=this.settings.bl.radius-this.borderWidth+"px";
-marginRight=this.settings.br.radius-this.borderWidth+"px";
-borderBottom=this.borderString;
-}
-this.bottomContainer.appendChild(_30);
-}
-break;
-}
-}
-};
-this.drawPixel=function(_31,_32,_33,_34,_35,_36,_37,_38){
-var _39=document.createElement("DIV");
-_39.style.height=_35+"px";
-_39.style.width="1px";
-_39.style.position="absolute";
-_39.style.fontSize="1px";
-_39.style.overflow="hidden";
-if(_37==-1&&this.backgroundImage!=""){
-_39.style.backgroundImage=this.backgroundImage;
-_39.style.backgroundPosition="-"+(this.boxWidth-(_38-_31)+this.borderWidth)+"px -"+((this.boxHeight+_38+_32)-this.borderWidth)+"px";
-}else{
-_39.style.backgroundColor=_33;
-}
-if(_34!=100){
-dojo.html.setOpacity(_39,_34);
-}
-_39.style.top=_32+"px";
-_39.style.left=_31+"px";
-_36.appendChild(_39);
-};
-},pixelFraction:function(x,y,r){
-var _3d=0;
-var _3e=[];
-var _3f=[];
-var _40=0;
-var _41="";
-var _42=Math.sqrt((Math.pow(r,2)-Math.pow(x,2)));
-if((_42>=y)&&(_42<(y+1))){
-_41="Left";
-_3e[_40]=0;
-_3f[_40]=_42-y;
-_40=_40+1;
-}
-var _42=Math.sqrt((Math.pow(r,2)-Math.pow(y+1,2)));
-if((_42>=x)&&(_42<(x+1))){
-_41=_41+"Top";
-_3e[_40]=_42-x;
-_3f[_40]=1;
-_40=_40+1;
-}
-var _42=Math.sqrt((Math.pow(r,2)-Math.pow(x+1,2)));
-if((_42>=y)&&(_42<(y+1))){
-_41=_41+"Right";
-_3e[_40]=1;
-_3f[_40]=_42-y;
-_40=_40+1;
-}
-var _42=Math.sqrt((Math.pow(r,2)-Math.pow(y,2)));
-if((_42>=x)&&(_42<(x+1))){
-_41=_41+"Bottom";
-_3e[_40]=_42-x;
-_3f[_40]=0;
-}
-switch(_41){
-case "LeftRight":
-_3d=Math.min(_3f[0],_3f[1])+((Math.max(_3f[0],_3f[1])-Math.min(_3f[0],_3f[1]))/2);
-break;
-case "TopRight":
-_3d=1-(((1-_3e[0])*(1-_3f[1]))/2);
-break;
-case "TopBottom":
-_3d=Math.min(_3e[0],_3e[1])+((Math.max(_3e[0],_3e[1])-Math.min(_3e[0],_3e[1]))/2);
-break;
-case "LeftBottom":
-_3d=(_3f[0]*_3e[1])/2;
-break;
-default:
-_3d=1;
-}
-return _3d;
-},rgb2Hex:function(_43){
-try{
-var _44=this.rgb2Array(_43);
-var red=parseInt(_44[0]);
-var _46=parseInt(_44[1]);
-var _47=parseInt(_44[2]);
-var _48="#"+this.intToHex(red)+this.intToHex(_46)+this.intToHex(_47);
-}
-catch(e){
-alert("There was an error converting the RGB value to Hexadecimal in function rgb2Hex");
-}
-return _48;
-},intToHex:function(_49){
-var _4a=_49/16;
-var rem=_49%16;
-var _4a=_4a-(rem/16);
-var _4c=this.makeHex(_4a);
-var _4d=this.makeHex(rem);
-return _4c+""+_4d;
-},makeHex:function(x){
-if((x>=0)&&(x<=9)){
-return x;
-}else{
-switch(x){
-case 10:
-return "A";
-case 11:
-return "B";
-case 12:
-return "C";
-case 13:
-return "D";
-case 14:
-return "E";
-case 15:
-return "F";
-}
-}
-},rgb2Array:function(_4f){
-var _50=_4f.substring(4,_4f.indexOf(")"));
-var _51=_50.split(", ");
-return _51;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Select.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Select.js
deleted file mode 100644
index 14053d5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Select.js
+++ /dev/null
@@ -1,26 +0,0 @@
-dojo.provide("dojo.widget.Select");
-dojo.require("dojo.widget.ComboBox");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.html.stabile");
-dojo.widget.defineWidget("dojo.widget.Select",dojo.widget.ComboBox,{forceValidOption:true,setValue:function(_1){
-this.comboBoxValue.value=_1;
-dojo.widget.html.stabile.setState(this.widgetId,this.getState(),true);
-this.onValueChanged(_1);
-},setLabel:function(_2){
-this.comboBoxSelectionValue.value=_2;
-if(this.textInputNode.value!=_2){
-this.textInputNode.value=_2;
-}
-},getLabel:function(){
-return this.comboBoxSelectionValue.value;
-},getState:function(){
-return {value:this.getValue(),label:this.getLabel()};
-},onKeyUp:function(_3){
-this.setLabel(this.textInputNode.value);
-},setState:function(_4){
-this.setValue(_4.value);
-this.setLabel(_4.label);
-},setAllValues:function(_5,_6){
-this.setLabel(_5);
-this.setValue(_6);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Show.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Show.js
deleted file mode 100644
index 9771853..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Show.js
+++ /dev/null
@@ -1,198 +0,0 @@
-dojo.provide("dojo.widget.Show");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.event.*");
-dojo.require("dojo.lfx.*");
-dojo.require("dojo.math.curves");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.func");
-dojo.widget.defineWidget("dojo.widget.Show",dojo.widget.HtmlWidget,function(){
-this._slides=[];
-},{isContainer:true,_slide:-1,body:null,nav:null,hider:null,select:null,option:null,inNav:false,debugPane:null,noClick:false,templateString:"<div class=\"dojoShow\">\n\t<div dojoAttachPoint=\"contentNode\"></div>\n\t<div class=\"dojoShowNav\" dojoAttachPoint=\"nav\">\n\t\t<div class=\"dojoShowHider\" dojoAttachPoint=\"hider\"></div>\n\t\t<span unselectable=\"on\" style=\"cursor: default;\" dojoAttachEvent=\"onClick:previousSlide\">&lt;</span>\n\t\t<select dojoAttachEvent=\"onClick:gotoSlideByEvent\" dojoAttachPoint=\"select\">\n\t\t\t<option dojoAttachPoint=\"option\">Title</option>\n\t\t</select>\n\t\t<span unselectable=\"on\" style=\"cursor: default;\" dojoAttachEvent=\"onClick:nextSlide\">&gt;</span>\n\t</div>\n</div>\n",templateCssString:"@media screen {\n\thtml, body {\n\t\tmargin: 0px;\n\t\tpadding: 0px;\n\t\twidth: 100%;\n\t}\n\th1 {\n\t\tfont-size: 50px;\n\t}\n\tp, li {\n\t\tfont-size: 30px;\n\t}\n\t.dojoShowNav {\n\t\tbackground: #369;\n\t\toverflow: hidden;\n\t\tposition: absolute;\n\t\theight: 5px;\n\t\tbottom: 0px;\n\t\tleft: 0px;\n\t\twidth: 100%;\n\t\ttext-align: center;\n\t}\n\t.dojoShowNav input {\n\t\tmargin: 0px;\n\t}\n\t.dojoShowHider {\n\t\theight: 5px;\n\t\toverflow: hidden;\n\t\twidth: 100%;\n\t}\n\t.dojoShowPrint {\n\t\tposition: absolute;\n\t\tleft: 5px;\n\t\ttop: 0px;\n\t}\n\t.dojoShow {\n\t\tdisplay: none;\n\t}\n}\n@media print {\n\t.dojoShow {\n\t\tdisplay: none !important;\n\t}\n\t.dojoShowPrint {\n\t\tdisplay: block !important;\n\t}\n\t.dojoShowPrintSlide {\n\t\tborder: 1px solid #aaa;\n\t\tpadding: 10px;\n\t\tmargin-bottom: 15px;\n\t}\n\t.dojoShowPrintSlide, ul {\n\tpage-break-inside: avoid;\n\t}\n\th1 {\n\t\tmargin-top: 0;\n\t\tpage-break-after: avoid;\n\t}\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/Show.css"),fillInTemplate:function(_1,_2){
-if(_1.debugPane){
-var dp=this.debugPane=dojo.widget.byId(_1.debugPane);
-dp.hide();
-dojo.event.connect(dp,"closeWindow",dojo.lang.hitch(this,function(){
-this.debugPane=false;
-}));
-}
-var _4=this.getFragNodeRef(_2);
-this.sourceNode=dojo.body().appendChild(_4.cloneNode(true));
-for(var i=0,_6;_6=this.sourceNode.childNodes[i];i++){
-if(_6.tagName&&_6.getAttribute("dojotype").toLowerCase()=="showslide"){
-_6.className="dojoShowPrintSlide";
-_6.innerHTML="<h1>"+_6.title+"</h1>"+_6.innerHTML;
-}
-}
-this.sourceNode.className="dojoShowPrint";
-this.sourceNode.style.display="none";
-dojo.event.connect(document,"onclick",this,"gotoSlideByEvent");
-if(dojo.render.html.ie){
-dojo.event.connect(document,"onkeydown",this,"gotoSlideByEvent");
-}else{
-dojo.event.connect(document,"onkeypress",this,"gotoSlideByEvent");
-}
-dojo.event.connect(window,"onresize",this,"resizeWindow");
-dojo.event.connect(this.nav,"onmousemove",this,"popUpNav");
-},postCreate:function(){
-this._slides=[];
-for(var i=0,_8;_8=this.children[i];i++){
-if(_8.widgetType=="ShowSlide"){
-this._slides.push(_8);
-this.option.text=_8.title+" ("+(i+1)+")";
-this.option.parentNode.insertBefore(this.option.cloneNode(true),this.option);
-}
-}
-this.option.parentNode.removeChild(this.option);
-this.domNode.style.display="block";
-this.resizeWindow();
-this.gotoSlide(0,true);
-dojo.addOnLoad(dojo.lang.hitch(this,function(){
-var th=window.location.hash;
-if(th.length){
-var _a=(""+window.location).split(this.widgetId+"_SlideNo_");
-if(_a.length>1){
-setTimeout(dojo.lang.hitch(this,function(){
-this.gotoSlide(parseInt(_a[1]),true);
-}),300);
-}
-}
-}));
-},gotoSlide:function(_b,_c){
-if(_b==this._slide){
-return;
-}
-if(!this._slides[_b]){
-for(var i=0,_e;_e=this._slides[i];i++){
-if(_e.title==_b){
-_b=i;
-break;
-}
-}
-}
-if(!this._slides[_b]){
-return;
-}
-if(this.debugPane){
-if(this._slides[_b].debug){
-this.debugPane.show();
-}else{
-this.debugPane.hide();
-}
-}
-if(this._slide!=-1){
-while(this._slides[this._slide].previousAction()){
-}
-}
-if(!_c){
-window.location.href="#"+this.widgetId+"_SlideNo_"+_b;
-}
-if(this._slides[this._slide]){
-this._slides[this._slide].hide();
-}
-this._slide=_b;
-this.select.selectedIndex=_b;
-var cn=this.contentNode;
-while(cn.firstChild){
-cn.removeChild(cn.firstChild);
-}
-cn.appendChild(this._slides[_b].domNode);
-this._slides[_b].show();
-},gotoSlideByEvent:function(_10){
-var _11=_10.target;
-var _12=_10.type;
-if(_12=="click"){
-if(_11.tagName=="OPTION"&&_11.parentNode==this.select){
-this.gotoSlide(_11.index);
-}else{
-if(_11==this.select){
-this.gotoSlide(_11.selectedIndex);
-}else{
-this.nextSlide(_10);
-}
-}
-}else{
-if(_12=="keydown"||_12=="keypress"){
-var key=_10.keyCode;
-var ch=_10.charCode;
-if(key==63234||key==37){
-this.previousSlide(_10);
-}else{
-if(key==63235||key==39||ch==32){
-this.nextSlide(_10);
-}
-}
-}
-}
-},nextSlide:function(_15){
-if(!this.stopEvent(_15)){
-return false;
-}
-if(!this._slides[this._slide].nextAction(_15)){
-if((this._slide+1)!=this._slides.length){
-this.gotoSlide(this._slide+1);
-return true;
-}
-return false;
-}
-},previousSlide:function(_16){
-if(!this.stopEvent(_16)){
-return false;
-}
-if(!this._slides[this._slide].previousAction(_16)){
-if((this._slide-1)!=-1){
-this.gotoSlide(this._slide-1);
-return true;
-}
-return false;
-}
-},stopEvent:function(ev){
-if(!ev){
-return true;
-}
-if(ev.type=="click"&&(this._slides[this._slide].noClick||this.noClick)){
-return false;
-}
-var _18=ev.target;
-while(_18!=null){
-if(_18==this.domNode){
-_18=ev.target;
-break;
-}
-_18=_18.parentNode;
-}
-if(!dojo.dom.isDescendantOf(_18,this.nav)){
-while(_18&&_18!=this.domNode){
-if(_18.tagName=="A"||_18.tagName=="INPUT"||_18.tagName=="TEXTAREA"||_18.tagName=="SELECT"){
-return false;
-}
-if(typeof _18.onclick=="function"||typeof _18.onkeypress=="function"){
-return false;
-}
-_18=_18.parentNode;
-}
-}
-if(window.event){
-ev.returnValue=false;
-ev.cancelBubble=true;
-}else{
-ev.preventDefault();
-ev.stopPropagation();
-}
-return true;
-},popUpNav:function(){
-if(!this.inNav){
-dojo.lfx.propertyAnimation(this.nav,{"height":{start:5,end:30}},250).play();
-}
-clearTimeout(this.inNav);
-this.inNav=setTimeout(dojo.lang.hitch(this,"hideNav"),2000);
-},hideNav:function(){
-clearTimeout(this.inNav);
-this.inNav=false;
-dojo.lfx.propertyAnimation(this.nav,{"height":{start:30,end:5}},250).play();
-},resizeWindow:function(ev){
-dojo.body().style.height="auto";
-var h=Math.max(document.documentElement.scrollHeight||dojo.body().scrollHeight,dojo.html.getViewport().height);
-dojo.body().style.height=h+"px";
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ShowAction.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ShowAction.js
deleted file mode 100644
index 03716bd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ShowAction.js
+++ /dev/null
@@ -1,7 +0,0 @@
-dojo.provide("dojo.widget.ShowAction");
-dojo.require("dojo.widget.*");
-dojo.widget.defineWidget("dojo.widget.ShowAction",dojo.widget.HtmlWidget,{on:"",action:"fade",duration:350,from:"",to:"",auto:"false",postMixInProperties:function(){
-if(dojo.render.html.opera){
-this.action=this.action.split("/").pop();
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ShowSlide.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ShowSlide.js
deleted file mode 100644
index 5edde03..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ShowSlide.js
+++ /dev/null
@@ -1,188 +0,0 @@
-dojo.provide("dojo.widget.ShowSlide");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.lfx.html");
-dojo.require("dojo.html.display");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.animation.Animation");
-dojo.require("dojo.gfx.color");
-dojo.widget.defineWidget("dojo.widget.ShowSlide",dojo.widget.HtmlWidget,{title:"",_action:-1,isContainer:true,_components:{},_actions:[],gotoAction:function(_1){
-this._action=_1;
-},_nextAction:function(_2){
-if((this._action+1)!=this._actions.length){
-++this._action;
-return true;
-}
-return false;
-},_previousAction:function(_3){
-if((this._action-1)!=-1){
---this._action;
-return true;
-}
-return false;
-},htmlTitle:null,debug:false,noClick:false,templateString:"<div class=\"dojoShowSlide\">\n\t<div class=\"dojoShowSlideTitle\">\n\t\t<h1 dojoAttachPoint=\"htmlTitle\">Title</h1>\n\t</div>\n\t<div class=\"dojoShowSlideBody\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n",templateCssString:".dojoShowSlideTitle {\n\theight: 100px;\n\tbackground: #369;\n}\n.dojoShowSlideTitle h1 {\n\tmargin-top: 0;\n\tline-height: 100px;\n\tmargin-left: 30px;\n}\n.dojoShowSlideBody {\n\tmargin: 15px;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/ShowSlide.css"),postCreate:function(){
-this.htmlTitle.innerHTML=this.title;
-var _4=this.getChildrenOfType("ShowAction",false);
-var _5={};
-dojo.lang.forEach(_4,function(_6){
-_5[_6.on]=true;
-});
-this._components={};
-var cn=this.containerNode;
-var _8=dojo.render.html.ie?cn.all:cn.getElementsByTagName("*");
-dojo.lang.forEach(_8,function(_9){
-var as=_9.getAttribute("as");
-if(as){
-if(!this._components[as]){
-this._components[as]=[];
-}
-this._components[as].push(_9);
-if(!_5[as]){
-var _b=dojo.widget.createWidget("ShowAction",{on:as});
-this.addChild(_b);
-_5[as]=true;
-}
-}
-},this);
-this._actions=[];
-_4=this.getChildrenOfType("ShowAction",false);
-dojo.lang.forEach(_4,function(_c){
-this._actions.push(_c);
-var _d=this._components[_c.on];
-for(var j=0,_f;_f=_d[j];j++){
-if(_c["action"]&&((_c.action!="remove")&&(_c.action!="fadeout")&&(_c.action!="wipeout"))){
-this.hideComponent(_f);
-}
-}
-},this);
-},previousAction:function(_10){
-if(!this.parent.stopEvent(_10)){
-return false;
-}
-var _11=this._actions[this._action];
-if(!_11){
-return false;
-}
-var on=_11.on;
-while(_11.on==on){
-var _13=this._components[on];
-for(var i=0,_15;_15=_13[i];i++){
-if((_11.action=="remove")||(_11.action=="fadeout")||(_11.action=="wipeout")){
-if(_15.style.display=="none"){
-_15.style.display="";
-_15.style.visibility="visible";
-var _16=true;
-}
-dojo.html.setOpacity(_15,1);
-}else{
-if(_11.action){
-this.hideComponent(_15);
-}
-}
-}
---this._action;
-if(_16){
-return true;
-}
-if(_11.auto=="true"){
-on=this._actions[this._action].on;
-}
-_11=this._actions[this._action];
-if(!_11){
-return false;
-}
-}
-return true;
-},hideComponent:function(_17){
-_17.style.visibility="hidden";
-_17.style.backgroundColor="transparent";
-var _18=_17.parentNode;
-if((_18)&&(_18.tagName.toLowerCase()=="li")){
-_18.oldType=_18.style.listStyleType;
-_18.style.listStyleType="none";
-}
-},nextAction:function(_19){
-if(!this.parent.stopEvent(_19)){
-return false;
-}
-if(!this._nextAction(this)){
-return false;
-}
-var _1a=this._actions[this._action];
-if(!_1a){
-return false;
-}
-var _1b=_1a["action"];
-var _1c=this._components[_1a.on];
-for(var i=0,_1e;_1e=_1c[i];i++){
-if(_1b){
-var _1f=_1a.duration||1000;
-if((_1b=="fade")||(_1b=="fadeIn")){
-dojo.html.setOpacity(_1e,0);
-dojo.lfx.html.fadeShow(_1e,_1f).play(true);
-}else{
-if(_1b=="fadeout"){
-dojo.lfx.html.fadeHide(_1e,_1f).play(true);
-}else{
-if(_1b=="fly"){
-var _20=dojo.html.getMarginBox(_1e).width;
-var _21=dojo.html.getAbsolutePosition(_1e);
-_1e.style.position="relative";
-_1e.style.left=-(_20+_21.x)+"px";
-dojo.lfx.html.slideBy(_1e,{top:0,left:(_20+_21.x)},_1f,-1,this.callWith).play(true);
-}else{
-if((_1b=="wipe")||(_1b=="wipein")){
-dojo.lfx.html.wipeIn(_1e,_1f).play();
-}else{
-if(_1b=="wipeout"){
-dojo.lfx.html.wipeOut(_1e,_1f).play();
-}else{
-if(_1b=="color"){
-var _22=new dojo.gfx.color.Color(_1a.from).toRgb();
-var to=new dojo.gfx.color.Color(_1a.to).toRgb();
-var _24=new dojo.animation.Animation(new dojo.math.curves.Line(_22,to),_1f,0);
-var _25=_1e;
-dojo.event.connect(_24,"onAnimate",function(e){
-_25.style.color="rgb("+e.coordsAsInts().join(",")+")";
-});
-_24.play(true);
-}else{
-if(_1b=="bgcolor"){
-dojo.lfx.html.unhighlight(_1e,_1a.to,_1f).play();
-}else{
-if(_1b=="remove"){
-_1e.style.display="none";
-}
-}
-}
-}
-}
-}
-}
-}
-if(_1b=="hide"){
-_1e.style.visibility="hidden";
-}else{
-_1e.style.visibility="visible";
-}
-}
-}
-_1a=this._actions[this._action+1];
-if(_1a&&_1a.auto=="true"){
-this.nextAction();
-}
-return true;
-},callWith:function(_27){
-if(!_27){
-return;
-}
-if(dojo.lang.isArray(_27)){
-dojo.lang.forEach(_27,arguments.callee);
-return;
-}
-var _28=_27.parentNode;
-if((_28)&&(_28.tagName.toLowerCase()=="li")){
-_28.style.listStyleType=_28.oldType;
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SlideShow.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SlideShow.js
deleted file mode 100644
index 08b88b0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SlideShow.js
+++ /dev/null
@@ -1,64 +0,0 @@
-dojo.provide("dojo.widget.SlideShow");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.lfx.*");
-dojo.require("dojo.html.display");
-dojo.widget.defineWidget("dojo.widget.SlideShow",dojo.widget.HtmlWidget,{templateString:"<div style=\"position: relative; padding: 3px;\">\n\t\t<div>\n\t\t\t<input type=\"button\" value=\"pause\" \n\t\t\t\tdojoAttachPoint=\"startStopButton\"\n\t\t\t\tdojoAttachEvent=\"onClick: togglePaused;\">\n\t\t</div>\n\t\t<div style=\"position: relative; width: ${this.width}; height: ${this.height};\"\n\t\t\tdojoAttachPoint=\"imagesContainer\"\n\t\t\tdojoAttachEvent=\"onClick: togglePaused;\">\n\t\t\t<img dojoAttachPoint=\"img1\" class=\"slideShowImg\" \n\t\t\t\tstyle=\"z-index: 1; width: ${this.width}; height: ${this.height};\"  />\n\t\t\t<img dojoAttachPoint=\"img2\" class=\"slideShowImg\" \n\t\t\t\tstyle=\"z-index: 0; width: ${this.width}; height: ${this.height};\" />\n\t\t</div>\t\n</div>\n",templateCssString:".slideShowImg {\n\tposition: absolute;\n\tleft: 0px;\n\ttop: 0px; \n\tborder: 2px solid #4d4d4d;\n\tpadding: 0px;\n\tmargin: 0px;\n}\n\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/SlideShow.css"),imgUrls:[],imgUrlBase:"",delay:4000,transitionInterval:2000,imgWidth:800,imgHeight:600,preventCache:false,stopped:false,_urlsIdx:0,_background:"img2",_foreground:"img1",fadeAnim:null,startStopButton:null,img1:null,img2:null,postMixInProperties:function(){
-this.width=this.imgWidth+"px";
-this.height=this.imgHeight+"px";
-},fillInTemplate:function(){
-if(dojo.render.html.safari&&this.imgUrls.length==2){
-this.preventCache=true;
-}
-dojo.html.setOpacity(this.img1,0.9999);
-dojo.html.setOpacity(this.img2,0.9999);
-if(this.imgUrls.length>1){
-this.img2.src=this.imgUrlBase+this.imgUrls[this._urlsIdx++]+this._getUrlSuffix();
-this._endTransition();
-}else{
-this.img1.src=this.imgUrlBase+this.imgUrls[this._urlsIdx++]+this._getUrlSuffix();
-}
-},_getUrlSuffix:function(){
-if(this.preventCache){
-return "?ts="+(new Date()).getTime();
-}else{
-return "";
-}
-},togglePaused:function(){
-if(this.stopped){
-this.stopped=false;
-this._backgroundImageLoaded();
-this.startStopButton.value="pause";
-}else{
-this.stopped=true;
-this.startStopButton.value="play";
-}
-},_backgroundImageLoaded:function(){
-if(this.stopped){
-return;
-}
-if(this.fadeAnim){
-this.fadeAnim.stop();
-}
-this.fadeAnim=dojo.lfx.fadeOut(this[this._foreground],this.transitionInterval,null);
-dojo.event.connect(this.fadeAnim,"onEnd",this,"_endTransition");
-this.fadeAnim.play();
-},_endTransition:function(){
-with(this[this._background].style){
-zIndex=parseInt(zIndex)+1;
-}
-with(this[this._foreground].style){
-zIndex=parseInt(zIndex)-1;
-}
-var _1=this._foreground;
-this._foreground=this._background;
-this._background=_1;
-this._loadNextImage();
-},_loadNextImage:function(){
-dojo.event.kwConnect({srcObj:this[this._background],srcFunc:"onload",adviceObj:this,adviceFunc:"_backgroundImageLoaded",once:true,delay:this.delay});
-dojo.html.setOpacity(this[this._background],1);
-this[this._background].src=this.imgUrlBase+this.imgUrls[this._urlsIdx++];
-if(this._urlsIdx>(this.imgUrls.length-1)){
-this._urlsIdx=0;
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Slider.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Slider.js
deleted file mode 100644
index d4bc20f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Slider.js
+++ /dev/null
@@ -1,462 +0,0 @@
-dojo.provide("dojo.widget.Slider");
-dojo.require("dojo.event.*");
-dojo.require("dojo.dnd.*");
-dojo.require("dojo.dnd.HtmlDragMove");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.html.layout");
-dojo.widget.defineWidget("dojo.widget.Slider",dojo.widget.HtmlWidget,{minimumX:0,minimumY:0,maximumX:10,maximumY:10,snapValuesX:0,snapValuesY:0,_snapToGrid:true,isEnableX:true,isEnableY:true,_valueSizeX:0,_valueSizeY:0,_minX:0,_minY:0,_constraintWidth:0,_constraintHeight:0,_clipLeft:0,_clipRight:0,_clipTop:0,_clipBottom:0,_clipXdelta:0,_clipYdelta:0,initialValueX:0,initialValueY:0,flipX:false,flipY:false,clickSelect:true,activeDrag:false,templateCssString:".sliderMain {\n  border: 0px !important;\n  border-spacing: 0px !important;\n  line-height: 0px !important;\n  padding: 0px !important;\n  display: -moz-inline-table !important;\n  display: inline !important;\n  -moz-user-focus: normal !important;\n}\n\n.sliderComponent {\n  border: 0px;\n  padding: 0px;\n  margin: 0px;\n}\n\n.sliderHandle { \n  top: 0px;\n  left: 0px;\n  z-index: 1000;\n  position: absolute !important;\n}\n\n.sliderOutsetButton { \n  border-style: outset;\n  border-width: 0px 1px 1px 0px;\n  border-color: black;\n}\n\n.sliderInsetButton { \n  border-style: inset;\n  border-width: 1px 0px 0px 1px;\n  border-color: black;\n}\n\n.sliderButtonY {\n  margin: 0px;\n  padding: 0px;\n  z-index: 900;\n}\n\n.sliderButtonX {\n  margin: 0px;\n  padding: 0px;\n  z-index: 900;\n}\n\n.sliderBackground { \n  z-index: 0;\n  display: block !important;\n  position: relative !important;\n}\n\n.sliderProgressBackground { \n  z-index: 800;\n  position: absolute !important;\n  clip: rect(0px,0px,0px,0px);\n}\n\n.sliderBackgroundSizeOnly { \n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/Slider.css"),templateString:"<table _=\"weird end tag formatting is to prevent whitespace from becoming &nbsp;\" \n\tclass=\"sliderMain\" \n\tdojoAttachPoint=\"focusNode\" \n\tdojoAttachEvent=\"onmousedown:_setFocus; onkey:_handleKeyEvents; onkeyup:_buttonReleased; onmouseup:_buttonReleased; onmousewheel:_mouseWheeled;\"\n\ttabindex=\"0\" cols=3 cellpadding=0 cellspacing=0 style=\"\">\n\t<tr valign=middle align=center>\n\t\t<td class=\"sliderComponent\" colspan=3 dojoAttachPoint=topBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonY\"\n\t\t\t\tdojoAttachPoint=topButtonNode \n\t\t\t\tdojoAttachEvent=\"onmousedown:_topButtonPressed; onmousemove:_discardEvent; ondblclick:_topButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.topButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleY}\"\n\t\t></td>\n\t</tr>\n\t<tr valign=middle align=center>\n\t\t<td class=\"sliderComponent\" dojoAttachPoint=leftBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonX\"\n\t\t\t\tdojoAttachPoint=leftButtonNode\n\t\t\t\tdojoAttachEvent=\"onmousedown:_leftButtonPressed; onmousemove:_discardEvent; ondblclick:_leftButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.leftButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleX}\"\n\t\t></td>\n\t\t<td dojoAttachPoint=constrainingContainerNode \n\t\t\tclass=\"sliderComponent sliderBackground\"\n\t\t\tstyle=\"${this.backgroundStyle}\"\n\t\t\t><img src=\"${this.handleSrc}\" \n\t\t\t\tclass=sliderHandle\n\t\t\t\tdojoAttachPoint=sliderHandleNode\n\t\t\t\tstyle=\"${this.handleStyle}\"\n\t\t\t><img src=\"${this.progressBackgroundSrc}\"\n\t\t\t\tclass=\"sliderBackgroundSizeOnly sliderProgressBackground\"\n\t\t\t\tdojoAttachPoint=progressBackgroundNode\n\t\t\t\tstyle=\"${this.backgroundSize}\"\n\t\t\t><img src=\"${this.backgroundSrc}\" \n\t\t\t\tclass=sliderBackgroundSizeOnly\n\t\t\t\tdojoAttachPoint=sliderBackgroundNode\n\t\t\t\tstyle=\"${this.backgroundSize}\"\n\t\t></td>\n\t\t<td class=\"sliderComponent\" dojoAttachPoint=rightBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonX\"\n\t\t\t\tdojoAttachPoint=rightButtonNode\n\t\t\t\tdojoAttachEvent=\"onmousedown:_rightButtonPressed; onmousemove:_discardEvent; ondblclick:_rightButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.rightButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleX}\"\n\t\t></td>\n\t</tr>\n\t<tr valign=middle align=center>\n\t\t<td class=\"sliderComponent\" colspan=3 dojoAttachPoint=bottomBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonY\"\n\t\t\t\tdojoAttachPoint=bottomButtonNode \n\t\t\t\tdojoAttachEvent=\"onmousedown:_bottomButtonPressed; onmousemove:_discardEvent; ondblclick:_bottomButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.bottomButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleY}\"\n\t\t></td>\n\t</tr>\n</table>\n",_isDragInProgress:false,bottomButtonSrc:dojo.uri.moduleUri("dojo.widget","templates/images/slider_down_arrow.png"),topButtonSrc:dojo.uri.moduleUri("dojo.widget","templates/images/slider_up_arrow.png"),leftButtonSrc:dojo.uri.moduleUri("dojo.widget","templates/images/slider_left_arrow.png"),rightButtonSrc:dojo.uri.moduleUri("dojo.widget","templates/images/slider_right_arrow.png"),backgroundSrc:dojo.uri.moduleUri("dojo.widget","templates/images/blank.gif"),progressBackgroundSrc:dojo.uri.moduleUri("dojo.widget","templates/images/blank.gif"),backgroundSize:"width:200px;height:200px;",backgroundStyle:"",buttonStyleX:"",buttonStyleY:"",handleStyle:"",handleSrc:dojo.uri.moduleUri("dojo.widget","templates/images/slider-button.png"),showButtons:true,_eventCount:0,_typamaticTimer:null,_typamaticFunction:null,defaultTimeout:500,timeoutChangeRate:0.9,_currentTimeout:this.defaultTimeout,_handleKeyEvents:function(_1){
-if(!_1.key){
-return;
-}
-if(!_1.ctrlKey&&!_1.altKey){
-switch(_1.key){
-case _1.KEY_LEFT_ARROW:
-dojo.event.browser.stopEvent(_1);
-this._leftButtonPressed(_1);
-return;
-case _1.KEY_RIGHT_ARROW:
-dojo.event.browser.stopEvent(_1);
-this._rightButtonPressed(_1);
-return;
-case _1.KEY_DOWN_ARROW:
-dojo.event.browser.stopEvent(_1);
-this._bottomButtonPressed(_1);
-return;
-case _1.KEY_UP_ARROW:
-dojo.event.browser.stopEvent(_1);
-this._topButtonPressed(_1);
-return;
-}
-}
-this._eventCount++;
-},_pressButton:function(_2){
-_2.className=_2.className.replace("Outset","Inset");
-},_releaseButton:function(_3){
-_3.className=_3.className.replace("Inset","Outset");
-},_buttonPressed:function(_4,_5){
-this._setFocus();
-if(typeof _4=="object"){
-if(this._typamaticTimer!=null){
-if(this._typamaticNode==_5){
-return;
-}
-clearTimeout(this._typamaticTimer);
-}
-this._buttonReleased(null);
-this._eventCount++;
-this._typamaticTimer=null;
-this._currentTimeout=this.defaultTimeout;
-dojo.event.browser.stopEvent(_4);
-}else{
-if(_4!=this._eventCount){
-this._buttonReleased(null);
-return false;
-}
-}
-if(_5==this.leftButtonNode&&this.isEnableX){
-this._snapX(dojo.html.getPixelValue(this.sliderHandleNode,"left")-this._valueSizeX);
-}else{
-if(_5==this.rightButtonNode&&this.isEnableX){
-this._snapX(dojo.html.getPixelValue(this.sliderHandleNode,"left")+this._valueSizeX);
-}else{
-if(_5==this.topButtonNode&&this.isEnableY){
-this._snapY(dojo.html.getPixelValue(this.sliderHandleNode,"top")-this._valueSizeY);
-}else{
-if(_5==this.bottomButtonNode&&this.isEnableY){
-this._snapY(dojo.html.getPixelValue(this.sliderHandleNode,"top")+this._valueSizeY);
-}else{
-return false;
-}
-}
-}
-}
-this._pressButton(_5);
-this.notifyListeners();
-this._typamaticNode=_5;
-this._typamaticTimer=dojo.lang.setTimeout(this,"_buttonPressed",this._currentTimeout,this._eventCount,_5);
-this._currentTimeout=Math.round(this._currentTimeout*this.timeoutChangeRate);
-return false;
-},_bottomButtonPressed:function(_6){
-return this._buttonPressed(_6,this.bottomButtonNode);
-},_bottomButtonDoubleClicked:function(_7){
-var rc=this._bottomButtonPressed(_7);
-dojo.lang.setTimeout(this,"_buttonReleased",50,null);
-return rc;
-},_topButtonPressed:function(_9){
-return this._buttonPressed(_9,this.topButtonNode);
-},_topButtonDoubleClicked:function(_a){
-var rc=this._topButtonPressed(_a);
-dojo.lang.setTimeout(this,"_buttonReleased",50,null);
-return rc;
-},_leftButtonPressed:function(_c){
-return this._buttonPressed(_c,this.leftButtonNode);
-},_leftButtonDoubleClicked:function(_d){
-var rc=this._leftButtonPressed(_d);
-dojo.lang.setTimeout(this,"_buttonReleased",50,null);
-return rc;
-},_rightButtonPressed:function(_f){
-return this._buttonPressed(_f,this.rightButtonNode);
-},_rightButtonDoubleClicked:function(evt){
-var rc=this._rightButtonPressed(evt);
-dojo.lang.setTimeout(this,"_buttonReleased",50,null);
-return rc;
-},_buttonReleased:function(evt){
-if(typeof evt=="object"&&evt!=null&&typeof evt.keyCode!="undefined"&&evt.keyCode!=null){
-var _13=evt.keyCode;
-switch(_13){
-case evt.KEY_LEFT_ARROW:
-case evt.KEY_RIGHT_ARROW:
-case evt.KEY_DOWN_ARROW:
-case evt.KEY_UP_ARROW:
-dojo.event.browser.stopEvent(evt);
-break;
-}
-}
-this._releaseButton(this.topButtonNode);
-this._releaseButton(this.bottomButtonNode);
-this._releaseButton(this.leftButtonNode);
-this._releaseButton(this.rightButtonNode);
-this._eventCount++;
-if(this._typamaticTimer!=null){
-clearTimeout(this._typamaticTimer);
-}
-this._typamaticTimer=null;
-this._currentTimeout=this.defaultTimeout;
-},_mouseWheeled:function(evt){
-var _15=0;
-if(typeof evt.wheelDelta=="number"){
-_15=evt.wheelDelta;
-}else{
-if(typeof evt.detail=="number"){
-_15=-evt.detail;
-}
-}
-if(this.isEnableY){
-if(_15>0){
-this._topButtonPressed(evt);
-this._buttonReleased(evt);
-}else{
-if(_15<0){
-this._bottomButtonPressed(evt);
-this._buttonReleased(evt);
-}
-}
-}else{
-if(this.isEnableX){
-if(_15>0){
-this._rightButtonPressed(evt);
-this._buttonReleased(evt);
-}else{
-if(_15<0){
-this._leftButtonPressed(evt);
-this._buttonReleased(evt);
-}
-}
-}
-}
-},_discardEvent:function(evt){
-dojo.event.browser.stopEvent(evt);
-},_setFocus:function(){
-if(this.focusNode.focus){
-this.focusNode.focus();
-}
-},fillInTemplate:function(_17,_18){
-var _19=this.getFragNodeRef(_18);
-dojo.html.copyStyle(this.domNode,_19);
-var _1a=this.domNode.style.padding;
-if(dojo.lang.isString(_1a)&&_1a!=""&&_1a!="0px"&&_1a!="0px 0px 0px 0px"){
-this.topBorderNode.style.padding=this.bottomBorderNode.style.padding=_1a;
-this.topBorderNode.style.paddingBottom="0px";
-this.bottomBorderNode.style.paddingTop="0px";
-this.rightBorderNode.style.paddingRight=this.domNode.style.paddingRight;
-this.leftBorderNode.style.paddingLeft=this.domNode.style.paddingLeft;
-this.domNode.style.padding="0px 0px 0px 0px";
-}
-var _1b=this.domNode.style.borderWidth;
-if(dojo.lang.isString(_1b)&&_1b!=""&&_1b!="0px"&&_1b!="0px 0px 0px 0px"){
-this.topBorderNode.style.borderStyle=this.rightBorderNode.style.borderStyle=this.bottomBorderNode.style.borderStyle=this.leftBorderNode.style.borderStyle=this.domNode.style.borderStyle;
-this.topBorderNode.style.borderColor=this.rightBorderNode.style.borderColor=this.bottomBorderNode.style.borderColor=this.leftBorderNode.style.borderColor=this.domNode.style.borderColor;
-this.topBorderNode.style.borderWidth=this.bottomBorderNode.style.borderWidth=_1b;
-this.topBorderNode.style.borderBottomWidth="0px";
-this.bottomBorderNode.style.borderTopWidth="0px";
-this.rightBorderNode.style.borderRightWidth=this.domNode.style.borderRightWidth;
-this.leftBorderNode.style.borderLeftWidth=this.domNode.style.borderLeftWidth;
-this.domNode.style.borderWidth="0px 0px 0px 0px";
-}
-this._handleMove=new dojo.widget._SliderDragMoveSource(this.sliderHandleNode);
-this._handleMove.setParent(this);
-if(this.clickSelect){
-dojo.event.connect(this.constrainingContainerNode,"onmousedown",this,"_onClick");
-}
-if(this.isEnableX){
-this.setValueX(!isNaN(this.initialValueX)?this.initialValueX:(!isNaN(this.minimumX)?this.minimumX:0));
-}
-if(!this.isEnableX||!this.showButtons){
-this.rightButtonNode.style.width="1px";
-this.rightButtonNode.style.visibility="hidden";
-this.leftButtonNode.style.width="1px";
-this.leftButtonNode.style.visibility="hidden";
-}
-if(this.isEnableY){
-this.setValueY(!isNaN(this.initialValueY)?this.initialValueY:(!isNaN(this.minimumY)?this.minimumY:0));
-}
-if(!this.isEnableY||!this.showButtons){
-this.bottomButtonNode.style.width="1px";
-this.bottomButtonNode.style.visibility="hidden";
-this.topButtonNode.style.width="1px";
-this.topButtonNode.style.visibility="hidden";
-}
-if(this.focusNode.addEventListener){
-this.focusNode.addEventListener("DOMMouseScroll",dojo.lang.hitch(this,"_mouseWheeled"),false);
-}
-},_snapX:function(x){
-if(x<0){
-x=0;
-}else{
-if(x>this._constraintWidth){
-x=this._constraintWidth;
-}else{
-var _1d=Math.round(x/this._valueSizeX);
-x=Math.round(_1d*this._valueSizeX);
-}
-}
-this.sliderHandleNode.style.left=x+"px";
-if(this.flipX){
-this._clipLeft=x+this._clipXdelta;
-}else{
-this._clipRight=x+this._clipXdelta;
-}
-this.progressBackgroundNode.style.clip="rect("+this._clipTop+"px,"+this._clipRight+"px,"+this._clipBottom+"px,"+this._clipLeft+"px)";
-},_calc_valueSizeX:function(){
-var _1e=dojo.html.getContentBox(this.constrainingContainerNode);
-var _1f=dojo.html.getContentBox(this.sliderHandleNode);
-if(isNaN(_1e.width)||isNaN(_1f.width)||_1e.width<=0||_1f.width<=0){
-return false;
-}
-this._constraintWidth=_1e.width+dojo.html.getPadding(this.constrainingContainerNode).width-_1f.width;
-if(this.flipX){
-this._clipLeft=this._clipRight=_1e.width;
-}else{
-this._clipLeft=this._clipRight=0;
-}
-this._clipXdelta=_1f.width>>1;
-if(!this.isEnableY){
-this._clipTop=0;
-this._clipBottom=_1e.height;
-}
-if(this._constraintWidth<=0){
-return false;
-}
-if(this.snapValuesX==0){
-this.snapValuesX=this._constraintWidth+1;
-}
-this._valueSizeX=this._constraintWidth/(this.snapValuesX-1);
-return true;
-},setValueX:function(_20){
-if(0==this._valueSizeX){
-if(this._calc_valueSizeX()==false){
-dojo.lang.setTimeout(this,"setValueX",100,_20);
-return;
-}
-}
-if(isNaN(_20)){
-_20=0;
-}
-if(_20>this.maximumX){
-_20=this.maximumX;
-}else{
-if(_20<this.minimumX){
-_20=this.minimumX;
-}
-}
-var _21=(_20-this.minimumX)/(this.maximumX-this.minimumX);
-if(this.flipX){
-_21=1-_21;
-}
-this._snapX(_21*this._constraintWidth);
-this.notifyListeners();
-},getValueX:function(){
-var _22=dojo.html.getPixelValue(this.sliderHandleNode,"left")/this._constraintWidth;
-if(this.flipX){
-_22=1-_22;
-}
-return Math.round(_22*(this.snapValuesX-1))*((this.maximumX-this.minimumX)/(this.snapValuesX-1))+this.minimumX;
-},_snapY:function(y){
-if(y<0){
-y=0;
-}else{
-if(y>this._constraintHeight){
-y=this._constraintHeight;
-}else{
-var _24=Math.round(y/this._valueSizeY);
-y=Math.round(_24*this._valueSizeY);
-}
-}
-this.sliderHandleNode.style.top=y+"px";
-if(this.flipY){
-this._clipTop=y+this._clipYdelta;
-}else{
-this._clipBottom=y+this._clipYdelta;
-}
-this.progressBackgroundNode.style.clip="rect("+this._clipTop+"px,"+this._clipRight+"px,"+this._clipBottom+"px,"+this._clipLeft+"px)";
-},_calc_valueSizeY:function(){
-var _25=dojo.html.getContentBox(this.constrainingContainerNode);
-var _26=dojo.html.getContentBox(this.sliderHandleNode);
-if(isNaN(_25.height)||isNaN(_26.height)||_25.height<=0||_26.height<=0){
-return false;
-}
-this._constraintHeight=_25.height+dojo.html.getPadding(this.constrainingContainerNode).height-_26.height;
-if(this.flipY){
-this._clipTop=this._clipBottom=_25.height;
-}else{
-this._clipTop=this._clipBottom=0;
-}
-this._clipYdelta=_26.height>>1;
-if(!this.isEnableX){
-this._clipLeft=0;
-this._clipRight=_25.width;
-}
-if(this._constraintHeight<=0){
-return false;
-}
-if(this.snapValuesY==0){
-this.snapValuesY=this._constraintHeight+1;
-}
-this._valueSizeY=this._constraintHeight/(this.snapValuesY-1);
-return true;
-},setValueY:function(_27){
-if(0==this._valueSizeY){
-if(this._calc_valueSizeY()==false){
-dojo.lang.setTimeout(this,"setValueY",100,_27);
-return;
-}
-}
-if(isNaN(_27)){
-_27=0;
-}
-if(_27>this.maximumY){
-_27=this.maximumY;
-}else{
-if(_27<this.minimumY){
-_27=this.minimumY;
-}
-}
-var _28=(_27-this.minimumY)/(this.maximumY-this.minimumY);
-if(this.flipY){
-_28=1-_28;
-}
-this._snapY(_28*this._constraintHeight);
-this.notifyListeners();
-},getValueY:function(){
-var _29=dojo.html.getPixelValue(this.sliderHandleNode,"top")/this._constraintHeight;
-if(this.flipY){
-_29=1-_29;
-}
-return Math.round(_29*(this.snapValuesY-1))*((this.maximumY-this.minimumY)/(this.snapValuesY-1))+this.minimumY;
-},_onClick:function(evt){
-if(this._isDragInProgress){
-return;
-}
-var _2b=dojo.html.getAbsolutePosition(this.constrainingContainerNode,true,dojo.html.boxSizing.MARGIN_BOX);
-var _2c=dojo.html.getContentBox(this._handleMove.domNode);
-if(this.isEnableX){
-var x=evt.pageX-_2b.x-(_2c.width>>1);
-this._snapX(x);
-}
-if(this.isEnableY){
-var y=evt.pageY-_2b.y-(_2c.height>>1);
-this._snapY(y);
-}
-this.notifyListeners();
-},notifyListeners:function(){
-this.onValueChanged(this.getValueX(),this.getValueY());
-},onValueChanged:function(x,y){
-}});
-dojo.widget.defineWidget("dojo.widget.SliderHorizontal",dojo.widget.Slider,{isEnableX:true,isEnableY:false,initialValue:"",snapValues:"",minimum:"",maximum:"",buttonStyle:"",backgroundSize:"height:10px;width:200px;",backgroundSrc:dojo.uri.moduleUri("dojo.widget","templates/images/slider-bg.gif"),flip:false,postMixInProperties:function(){
-dojo.widget.SliderHorizontal.superclass.postMixInProperties.apply(this,arguments);
-if(!isNaN(parseFloat(this.initialValue))){
-this.initialValueX=parseFloat(this.initialValue);
-}
-if(!isNaN(parseFloat(this.minimum))){
-this.minimumX=parseFloat(this.minimum);
-}
-if(!isNaN(parseFloat(this.maximum))){
-this.maximumX=parseFloat(this.maximum);
-}
-if(!isNaN(parseInt(this.snapValues))){
-this.snapValuesX=parseInt(this.snapValues);
-}
-if(dojo.lang.isString(this.buttonStyle)&&this.buttonStyle!=""){
-this.buttonStyleX=this.buttonStyle;
-}
-if(dojo.lang.isBoolean(this.flip)){
-this.flipX=this.flip;
-}
-},notifyListeners:function(){
-this.onValueChanged(this.getValueX());
-},getValue:function(){
-return this.getValueX();
-},setValue:function(_31){
-this.setValueX(_31);
-},onValueChanged:function(_32){
-}});
-dojo.widget.defineWidget("dojo.widget.SliderVertical",dojo.widget.Slider,{isEnableX:false,isEnableY:true,initialValue:"",snapValues:"",minimum:"",maximum:"",buttonStyle:"",backgroundSize:"width:10px;height:200px;",backgroundSrc:dojo.uri.moduleUri("dojo.widget","templates/images/slider-bg-vert.gif"),flip:false,postMixInProperties:function(){
-dojo.widget.SliderVertical.superclass.postMixInProperties.apply(this,arguments);
-if(!isNaN(parseFloat(this.initialValue))){
-this.initialValueY=parseFloat(this.initialValue);
-}
-if(!isNaN(parseFloat(this.minimum))){
-this.minimumY=parseFloat(this.minimum);
-}
-if(!isNaN(parseFloat(this.maximum))){
-this.maximumY=parseFloat(this.maximum);
-}
-if(!isNaN(parseInt(this.snapValues))){
-this.snapValuesY=parseInt(this.snapValues);
-}
-if(dojo.lang.isString(this.buttonStyle)&&this.buttonStyle!=""){
-this.buttonStyleY=this.buttonStyle;
-}
-if(dojo.lang.isBoolean(this.flip)){
-this.flipY=this.flip;
-}
-},notifyListeners:function(){
-this.onValueChanged(this.getValueY());
-},getValue:function(){
-return this.getValueY();
-},setValue:function(_33){
-this.setValueY(_33);
-},onValueChanged:function(_34){
-}});
-dojo.declare("dojo.widget._SliderDragMoveSource",dojo.dnd.HtmlDragMoveSource,{slider:null,onDragStart:function(evt){
-this.slider._isDragInProgress=true;
-var _36=this.createDragMoveObject();
-this.slider.notifyListeners();
-return _36;
-},onDragEnd:function(evt){
-this.slider._isDragInProgress=false;
-this.slider.notifyListeners();
-},createDragMoveObject:function(){
-var _38=new dojo.widget._SliderDragMoveObject(this.dragObject,this.type);
-_38.slider=this.slider;
-if(this.dragClass){
-_38.dragClass=this.dragClass;
-}
-return _38;
-},setParent:function(_39){
-this.slider=_39;
-}});
-dojo.declare("dojo.widget._SliderDragMoveObject",dojo.dnd.HtmlDragMoveObject,{slider:null,onDragMove:function(evt){
-this.updateDragOffset();
-if(this.slider.isEnableX){
-var x=this.dragOffset.x+evt.pageX;
-this.slider._snapX(x);
-}
-if(this.slider.isEnableY){
-var y=this.dragOffset.y+evt.pageY;
-this.slider._snapY(y);
-}
-if(this.slider.activeDrag){
-this.slider.notifyListeners();
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SortableTable.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SortableTable.js
deleted file mode 100644
index 59d9976..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SortableTable.js
+++ /dev/null
@@ -1,487 +0,0 @@
-dojo.provide("dojo.widget.SortableTable");
-dojo.deprecated("SortableTable will be removed in favor of FilteringTable.","0.5");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.date.format");
-dojo.require("dojo.html.*");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.html.util");
-dojo.require("dojo.html.style");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.widget.defineWidget("dojo.widget.SortableTable",dojo.widget.HtmlWidget,function(){
-this.data=[];
-this.selected=[];
-this.columns=[];
-},{enableMultipleSelect:false,maximumNumberOfSelections:0,enableAlternateRows:false,minRows:0,defaultDateFormat:"%D",sortIndex:0,sortDirection:0,valueField:"Id",headClass:"",tbodyClass:"",headerClass:"",headerSortUpClass:"selected",headerSortDownClass:"selected",rowClass:"",rowAlternateClass:"alt",rowSelectedClass:"selected",columnSelected:"sorted-column",isContainer:false,templatePath:null,templateCssPath:null,getTypeFromString:function(s){
-var _2=s.split("."),i=0,_4=dj_global;
-do{
-_4=_4[_2[i++]];
-}while(i<_2.length&&_4);
-return (_4!=dj_global)?_4:null;
-},compare:function(o1,o2){
-for(var p in o1){
-if(!(p in o2)){
-return false;
-}
-if(o1[p].valueOf()!=o2[p].valueOf()){
-return false;
-}
-}
-return true;
-},isSelected:function(o){
-for(var i=0;i<this.selected.length;i++){
-if(this.compare(this.selected[i],o)){
-return true;
-}
-}
-return false;
-},removeFromSelected:function(o){
-var _b=-1;
-for(var i=0;i<this.selected.length;i++){
-if(this.compare(this.selected[i],o)){
-_b=i;
-break;
-}
-}
-if(_b>=0){
-this.selected.splice(_b,1);
-}
-},getSelection:function(){
-return this.selected;
-},getValue:function(){
-var a=[];
-for(var i=0;i<this.selected.length;i++){
-if(this.selected[i][this.valueField]){
-a.push(this.selected[i][this.valueField]);
-}
-}
-return a.join();
-},reset:function(){
-this.columns=[];
-this.data=[];
-this.resetSelections(this.domNode.getElementsByTagName("tbody")[0]);
-},resetSelections:function(_f){
-this.selected=[];
-var idx=0;
-var _11=_f.getElementsByTagName("tr");
-for(var i=0;i<_11.length;i++){
-if(_11[i].parentNode==_f){
-_11[i].removeAttribute("selected");
-if(this.enableAlternateRows&&idx%2==1){
-_11[i].className=this.rowAlternateClass;
-}else{
-_11[i].className="";
-}
-idx++;
-}
-}
-},getObjectFromRow:function(row){
-var _14=row.getElementsByTagName("td");
-var o={};
-for(var i=0;i<this.columns.length;i++){
-if(this.columns[i].sortType=="__markup__"){
-o[this.columns[i].getField()]=_14[i].innerHTML;
-}else{
-var _17=dojo.html.renderedTextContent(_14[i]);
-var val=_17;
-if(this.columns[i].getType()!=String){
-var val=new (this.columns[i].getType())(_17);
-}
-o[this.columns[i].getField()]=val;
-}
-}
-if(dojo.html.hasAttribute(row,"value")){
-o[this.valueField]=dojo.html.getAttribute(row,"value");
-}
-return o;
-},setSelectionByRow:function(row){
-var o=this.getObjectFromRow(row);
-var b=false;
-for(var i=0;i<this.selected.length;i++){
-if(this.compare(this.selected[i],o)){
-b=true;
-break;
-}
-}
-if(!b){
-this.selected.push(o);
-}
-},parseColumns:function(_1d){
-this.reset();
-var row=_1d.getElementsByTagName("tr")[0];
-var _1f=row.getElementsByTagName("td");
-if(_1f.length==0){
-_1f=row.getElementsByTagName("th");
-}
-for(var i=0;i<_1f.length;i++){
-var o={field:null,format:null,noSort:false,sortType:"String",dataType:String,sortFunction:null,label:null,align:"left",valign:"middle",getField:function(){
-return this.field||this.label;
-},getType:function(){
-return this.dataType;
-}};
-if(dojo.html.hasAttribute(_1f[i],"align")){
-o.align=dojo.html.getAttribute(_1f[i],"align");
-}
-if(dojo.html.hasAttribute(_1f[i],"valign")){
-o.valign=dojo.html.getAttribute(_1f[i],"valign");
-}
-if(dojo.html.hasAttribute(_1f[i],"nosort")){
-o.noSort=dojo.html.getAttribute(_1f[i],"nosort")=="true";
-}
-if(dojo.html.hasAttribute(_1f[i],"sortusing")){
-var _22=dojo.html.getAttribute(_1f[i],"sortusing");
-var f=this.getTypeFromString(_22);
-if(f!=null&&f!=window&&typeof (f)=="function"){
-o.sortFunction=f;
-}
-}
-if(dojo.html.hasAttribute(_1f[i],"field")){
-o.field=dojo.html.getAttribute(_1f[i],"field");
-}
-if(dojo.html.hasAttribute(_1f[i],"format")){
-o.format=dojo.html.getAttribute(_1f[i],"format");
-}
-if(dojo.html.hasAttribute(_1f[i],"dataType")){
-var _24=dojo.html.getAttribute(_1f[i],"dataType");
-if(_24.toLowerCase()=="html"||_24.toLowerCase()=="markup"){
-o.sortType="__markup__";
-o.noSort=true;
-}else{
-var _25=this.getTypeFromString(_24);
-if(_25){
-o.sortType=_24;
-o.dataType=_25;
-}
-}
-}
-o.label=dojo.html.renderedTextContent(_1f[i]);
-this.columns.push(o);
-if(dojo.html.hasAttribute(_1f[i],"sort")){
-this.sortIndex=i;
-var dir=dojo.html.getAttribute(_1f[i],"sort");
-if(!isNaN(parseInt(dir))){
-dir=parseInt(dir);
-this.sortDirection=(dir!=0)?1:0;
-}else{
-this.sortDirection=(dir.toLowerCase()=="desc")?1:0;
-}
-}
-}
-},parseData:function(_27){
-this.data=[];
-this.selected=[];
-for(var i=0;i<_27.length;i++){
-var o={};
-for(var j=0;j<this.columns.length;j++){
-var _2b=this.columns[j].getField();
-if(this.columns[j].sortType=="__markup__"){
-o[_2b]=String(_27[i][_2b]);
-}else{
-var _2c=this.columns[j].getType();
-var val=_27[i][_2b];
-var t=this.columns[j].sortType.toLowerCase();
-if(_2c==String){
-o[_2b]=val;
-}else{
-if(val!=null){
-o[_2b]=new _2c(val);
-}else{
-o[_2b]=new _2c();
-}
-}
-}
-}
-if(_27[i][this.valueField]&&!o[this.valueField]){
-o[this.valueField]=_27[i][this.valueField];
-}
-this.data.push(o);
-}
-},parseDataFromTable:function(_2f){
-this.data=[];
-this.selected=[];
-var _30=_2f.getElementsByTagName("tr");
-for(var i=0;i<_30.length;i++){
-if(dojo.html.getAttribute(_30[i],"ignoreIfParsed")=="true"){
-continue;
-}
-var o={};
-var _33=_30[i].getElementsByTagName("td");
-for(var j=0;j<this.columns.length;j++){
-var _35=this.columns[j].getField();
-if(this.columns[j].sortType=="__markup__"){
-o[_35]=_33[j].innerHTML;
-}else{
-var _36=this.columns[j].getType();
-var val=dojo.html.renderedTextContent(_33[j]);
-if(_36==String){
-o[_35]=val;
-}else{
-if(val!=null){
-o[_35]=new _36(val);
-}else{
-o[_35]=new _36();
-}
-}
-}
-}
-if(dojo.html.hasAttribute(_30[i],"value")&&!o[this.valueField]){
-o[this.valueField]=dojo.html.getAttribute(_30[i],"value");
-}
-this.data.push(o);
-if(dojo.html.getAttribute(_30[i],"selected")=="true"){
-this.selected.push(o);
-}
-}
-},showSelections:function(){
-var _38=this.domNode.getElementsByTagName("tbody")[0];
-var _39=_38.getElementsByTagName("tr");
-var idx=0;
-for(var i=0;i<_39.length;i++){
-if(_39[i].parentNode==_38){
-if(dojo.html.getAttribute(_39[i],"selected")=="true"){
-_39[i].className=this.rowSelectedClass;
-}else{
-if(this.enableAlternateRows&&idx%2==1){
-_39[i].className=this.rowAlternateClass;
-}else{
-_39[i].className="";
-}
-}
-idx++;
-}
-}
-},render:function(_3c){
-var _3d=[];
-var _3e=this.domNode.getElementsByTagName("tbody")[0];
-if(!_3c){
-this.parseDataFromTable(_3e);
-}
-for(var i=0;i<this.data.length;i++){
-_3d.push(this.data[i]);
-}
-var col=this.columns[this.sortIndex];
-if(!col.noSort){
-var _41=col.getField();
-if(col.sortFunction){
-var _42=col.sortFunction;
-}else{
-var _42=function(a,b){
-if(a[_41]>b[_41]){
-return 1;
-}
-if(a[_41]<b[_41]){
-return -1;
-}
-return 0;
-};
-}
-_3d.sort(_42);
-if(this.sortDirection!=0){
-_3d.reverse();
-}
-}
-while(_3e.childNodes.length>0){
-_3e.removeChild(_3e.childNodes[0]);
-}
-for(var i=0;i<_3d.length;i++){
-var row=document.createElement("tr");
-dojo.html.disableSelection(row);
-if(_3d[i][this.valueField]){
-row.setAttribute("value",_3d[i][this.valueField]);
-}
-if(this.isSelected(_3d[i])){
-row.className=this.rowSelectedClass;
-row.setAttribute("selected","true");
-}else{
-if(this.enableAlternateRows&&i%2==1){
-row.className=this.rowAlternateClass;
-}
-}
-for(var j=0;j<this.columns.length;j++){
-var _47=document.createElement("td");
-_47.setAttribute("align",this.columns[j].align);
-_47.setAttribute("valign",this.columns[j].valign);
-dojo.html.disableSelection(_47);
-if(this.sortIndex==j){
-_47.className=this.columnSelected;
-}
-if(this.columns[j].sortType=="__markup__"){
-_47.innerHTML=_3d[i][this.columns[j].getField()];
-for(var k=0;k<_47.childNodes.length;k++){
-var _49=_47.childNodes[k];
-if(_49&&_49.nodeType==dojo.html.ELEMENT_NODE){
-dojo.html.disableSelection(_49);
-}
-}
-}else{
-if(this.columns[j].getType()==Date){
-var _4a=this.defaultDateFormat;
-if(this.columns[j].format){
-_4a=this.columns[j].format;
-}
-_47.appendChild(document.createTextNode(dojo.date.strftime(_3d[i][this.columns[j].getField()],_4a)));
-}else{
-_47.appendChild(document.createTextNode(_3d[i][this.columns[j].getField()]));
-}
-}
-row.appendChild(_47);
-}
-_3e.appendChild(row);
-dojo.event.connect(row,"onclick",this,"onUISelect");
-}
-var _4b=parseInt(this.minRows);
-if(!isNaN(_4b)&&_4b>0&&_3d.length<_4b){
-var mod=0;
-if(_3d.length%2==0){
-mod=1;
-}
-var _4d=_4b-_3d.length;
-for(var i=0;i<_4d;i++){
-var row=document.createElement("tr");
-row.setAttribute("ignoreIfParsed","true");
-if(this.enableAlternateRows&&i%2==mod){
-row.className=this.rowAlternateClass;
-}
-for(var j=0;j<this.columns.length;j++){
-var _47=document.createElement("td");
-_47.appendChild(document.createTextNode("\xa0"));
-row.appendChild(_47);
-}
-_3e.appendChild(row);
-}
-}
-},onSelect:function(e){
-},onUISelect:function(e){
-var row=dojo.html.getParentByType(e.target,"tr");
-var _51=dojo.html.getParentByType(row,"tbody");
-if(this.enableMultipleSelect){
-if(e.metaKey||e.ctrlKey){
-if(this.isSelected(this.getObjectFromRow(row))){
-this.removeFromSelected(this.getObjectFromRow(row));
-row.removeAttribute("selected");
-}else{
-this.setSelectionByRow(row);
-row.setAttribute("selected","true");
-}
-}else{
-if(e.shiftKey){
-var _52;
-var _53=_51.getElementsByTagName("tr");
-for(var i=0;i<_53.length;i++){
-if(_53[i].parentNode==_51){
-if(_53[i]==row){
-break;
-}
-if(dojo.html.getAttribute(_53[i],"selected")=="true"){
-_52=_53[i];
-}
-}
-}
-if(!_52){
-_52=row;
-for(;i<_53.length;i++){
-if(dojo.html.getAttribute(_53[i],"selected")=="true"){
-row=_53[i];
-break;
-}
-}
-}
-this.resetSelections(_51);
-if(_52==row){
-row.setAttribute("selected","true");
-this.setSelectionByRow(row);
-}else{
-var _55=false;
-for(var i=0;i<_53.length;i++){
-if(_53[i].parentNode==_51){
-_53[i].removeAttribute("selected");
-if(_53[i]==_52){
-_55=true;
-}
-if(_55){
-this.setSelectionByRow(_53[i]);
-_53[i].setAttribute("selected","true");
-}
-if(_53[i]==row){
-_55=false;
-}
-}
-}
-}
-}else{
-this.resetSelections(_51);
-row.setAttribute("selected","true");
-this.setSelectionByRow(row);
-}
-}
-}else{
-this.resetSelections(_51);
-row.setAttribute("selected","true");
-this.setSelectionByRow(row);
-}
-this.showSelections();
-this.onSelect(e);
-e.stopPropagation();
-e.preventDefault();
-},onHeaderClick:function(e){
-var _57=this.sortIndex;
-var _58=this.sortDirection;
-var _59=e.target;
-var row=dojo.html.getParentByType(_59,"tr");
-var _5b="td";
-if(row.getElementsByTagName(_5b).length==0){
-_5b="th";
-}
-var _5c=row.getElementsByTagName(_5b);
-var _5d=dojo.html.getParentByType(_59,_5b);
-for(var i=0;i<_5c.length;i++){
-if(_5c[i]==_5d){
-if(i!=_57){
-this.sortIndex=i;
-this.sortDirection=0;
-_5c[i].className=this.headerSortDownClass;
-}else{
-this.sortDirection=(_58==0)?1:0;
-if(this.sortDirection==0){
-_5c[i].className=this.headerSortDownClass;
-}else{
-_5c[i].className=this.headerSortUpClass;
-}
-}
-}else{
-_5c[i].className=this.headerClass;
-}
-}
-this.render();
-},postCreate:function(){
-var _5f=this.domNode.getElementsByTagName("thead")[0];
-if(this.headClass.length>0){
-_5f.className=this.headClass;
-}
-dojo.html.disableSelection(this.domNode);
-this.parseColumns(_5f);
-var _60="td";
-if(_5f.getElementsByTagName(_60).length==0){
-_60="th";
-}
-var _61=_5f.getElementsByTagName(_60);
-for(var i=0;i<_61.length;i++){
-if(!this.columns[i].noSort){
-dojo.event.connect(_61[i],"onclick",this,"onHeaderClick");
-}
-if(this.sortIndex==i){
-if(this.sortDirection==0){
-_61[i].className=this.headerSortDownClass;
-}else{
-_61[i].className=this.headerSortUpClass;
-}
-}
-}
-var _63=this.domNode.getElementsByTagName("tbody")[0];
-if(this.tbodyClass.length>0){
-_63.className=this.tbodyClass;
-}
-this.parseDataFromTable(_63);
-this.render(true);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Spinner.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Spinner.js
deleted file mode 100644
index 7844798..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Spinner.js
+++ /dev/null
@@ -1,513 +0,0 @@
-dojo.provide("dojo.widget.Spinner");
-dojo.require("dojo.io.*");
-dojo.require("dojo.lfx.*");
-dojo.require("dojo.html.*");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.string");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.IntegerTextbox");
-dojo.require("dojo.widget.RealNumberTextbox");
-dojo.require("dojo.widget.DateTextbox");
-dojo.require("dojo.experimental");
-dojo.declare("dojo.widget.Spinner",null,{_typamaticTimer:null,_typamaticFunction:null,_currentTimeout:this.defaultTimeout,_eventCount:0,defaultTimeout:500,timeoutChangeRate:0.9,templateString:"<span _=\"weird end tag formatting is to prevent whitespace from becoming &nbsp;\"\n\tstyle='float:${this.htmlfloat};'\n\t><table cellpadding=0 cellspacing=0 class=\"dojoSpinner\">\n\t\t<tr>\n\t\t\t<td\n\t\t\t\t><input\n\t\t\t\t\tdojoAttachPoint='textbox' type='${this.type}'\n\t\t\t\t\tdojoAttachEvent='onblur;onfocus;onkey:_handleKeyEvents;onKeyUp:_onSpinnerKeyUp;onresize:_resize'\n\t\t\t\t\tid='${this.widgetId}' name='${this.name}' size='${this.size}' maxlength='${this.maxlength}'\n\t\t\t\t\tvalue='${this.value}' class='${this.className}' autocomplete=\"off\"\n\t\t\t></td>\n\t\t\t<td\n\t\t\t\t><img dojoAttachPoint=\"upArrowNode\"\n\t\t\t\t\tdojoAttachEvent=\"onDblClick: _upArrowDoubleClicked;  onMouseDown: _upArrowPressed; onMouseUp: _arrowReleased; onMouseOut: _arrowReleased; onMouseMove: _discardEvent;\"\n\t\t\t\t\tsrc=\"${this.incrementSrc}\" style=\"width: ${this.buttonSize.width}px; height: ${this.buttonSize.height}px;\"\n\t\t\t\t><img dojoAttachPoint=\"downArrowNode\"\n\t\t\t\t\tdojoAttachEvent=\"onDblClick: _downArrowDoubleClicked;  onMouseDown: _downArrowPressed; onMouseUp: _arrowReleased; onMouseOut: _arrowReleased; onMouseMove: _discardEvent;\"\n\t\t\t\t\tsrc=\"${this.decrementSrc}\" style=\"width: ${this.buttonSize.width}px; height: ${this.buttonSize.height}px;\"\n\t\t\t></td>\n\t\t</tr>\n\t</table\n\t><span dojoAttachPoint='invalidSpan' class='${this.invalidClass}'>${this.messages.invalidMessage}</span\n\t><span dojoAttachPoint='missingSpan' class='${this.missingClass}'>${this.messages.missingMessage}</span\n\t><span dojoAttachPoint='rangeSpan' class='${this.rangeClass}'>${this.messages.rangeMessage}</span\n></span>\n",templateCssString:"/* inline the table holding the <input> and buttons (method varies by browser) */\n.ie .dojoSpinner, .safari .dojoSpinner {\n\tdisplay: inline;\n}\n\n.moz .dojoSpinner {\n\tdisplay: -moz-inline-box;\n}\n\n.opera .dojoSpinner {\n\tdisplay: inline-table;\n}\n\n/* generic stuff for the table */\n.dojoSpinner td {\n\tpadding:0px;\n\tmargin:0px;\n\tvertical-align: middle;\n}\ntable.dojoSpinner {\n\tborder:0px;\n\tborder-spacing:0px;\n\tline-height:0px;\n\tpadding:0px;\n\tmargin: 0px;\n\tvertical-align: middle;\n}\n\n/* the buttons */\n.dojoSpinner img {\n\tdisplay: block;\n\tborder-width:0px 1px 1px 0px;\n\tborder-style:outset;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/Spinner.css"),incrementSrc:dojo.uri.moduleUri("dojo.widget","templates/images/spinnerIncrement.gif"),decrementSrc:dojo.uri.moduleUri("dojo.widget","templates/images/spinnerDecrement.gif"),_handleKeyEvents:function(_1){
-if(!_1.key){
-return;
-}
-if(!_1.ctrlKey&&!_1.altKey){
-switch(_1.key){
-case _1.KEY_DOWN_ARROW:
-dojo.event.browser.stopEvent(_1);
-this._downArrowPressed(_1);
-return;
-case _1.KEY_UP_ARROW:
-dojo.event.browser.stopEvent(_1);
-this._upArrowPressed(_1);
-return;
-}
-}
-this._eventCount++;
-},_onSpinnerKeyUp:function(_2){
-this._arrowReleased(_2);
-this.onkeyup(_2);
-},_resize:function(){
-var _3=dojo.html.getBorderBox(this.textbox);
-this.buttonSize={width:_3.height/2,height:_3.height/2};
-if(this.upArrowNode){
-dojo.html.setMarginBox(this.upArrowNode,this.buttonSize);
-dojo.html.setMarginBox(this.downArrowNode,this.buttonSize);
-}
-},_pressButton:function(_4){
-_4.style.borderWidth="1px 0px 0px 1px";
-_4.style.borderStyle="inset";
-},_releaseButton:function(_5){
-_5.style.borderWidth="0px 1px 1px 0px";
-_5.style.borderStyle="outset";
-},_arrowPressed:function(_6,_7){
-var _8=(_7==-1)?this.downArrowNode:this.upArrowNode;
-var _9=(_7==+1)?this.downArrowNode:this.upArrowNode;
-if(typeof _6!="number"){
-if(this._typamaticTimer!=null){
-if(this._typamaticNode==_8){
-return;
-}
-dojo.lang.clearTimeout(this._typamaticTimer);
-}
-this._releaseButton(_9);
-this._eventCount++;
-this._typamaticTimer=null;
-this._currentTimeout=this.defaultTimeout;
-}else{
-if(_6!=this._eventCount){
-this._releaseButton(_8);
-return;
-}
-}
-this._pressButton(_8);
-this._setCursorX(this.adjustValue(_7,this._getCursorX()));
-this._typamaticNode=_8;
-this._typamaticTimer=dojo.lang.setTimeout(this,"_arrowPressed",this._currentTimeout,this._eventCount,_7);
-this._currentTimeout=Math.round(this._currentTimeout*this.timeoutChangeRate);
-},_downArrowPressed:function(_a){
-return this._arrowPressed(_a,-1);
-},_downArrowDoubleClicked:function(_b){
-var rc=this._downArrowPressed(_b);
-dojo.lang.setTimeout(this,"_arrowReleased",50,null);
-return rc;
-},_upArrowPressed:function(_d){
-return this._arrowPressed(_d,+1);
-},_upArrowDoubleClicked:function(_e){
-var rc=this._upArrowPressed(_e);
-dojo.lang.setTimeout(this,"_arrowReleased",50,null);
-return rc;
-},_arrowReleased:function(evt){
-this.textbox.focus();
-if(evt!=null&&typeof evt=="object"&&evt.keyCode&&evt.keyCode!=null){
-var _11=evt.keyCode;
-var k=dojo.event.browser.keys;
-switch(_11){
-case k.KEY_DOWN_ARROW:
-case k.KEY_UP_ARROW:
-dojo.event.browser.stopEvent(evt);
-break;
-}
-}
-this._releaseButton(this.upArrowNode);
-this._releaseButton(this.downArrowNode);
-this._eventCount++;
-if(this._typamaticTimer!=null){
-dojo.lang.clearTimeout(this._typamaticTimer);
-}
-this._typamaticTimer=null;
-this._currentTimeout=this.defaultTimeout;
-},_mouseWheeled:function(evt){
-var _14=0;
-if(typeof evt.wheelDelta=="number"){
-_14=evt.wheelDelta;
-}else{
-if(typeof evt.detail=="number"){
-_14=-evt.detail;
-}
-}
-if(_14>0){
-this._upArrowPressed(evt);
-this._arrowReleased(evt);
-}else{
-if(_14<0){
-this._downArrowPressed(evt);
-this._arrowReleased(evt);
-}
-}
-},_discardEvent:function(evt){
-dojo.event.browser.stopEvent(evt);
-},_getCursorX:function(){
-var x=-1;
-try{
-this.textbox.focus();
-if(typeof this.textbox.selectionEnd=="number"){
-x=this.textbox.selectionEnd;
-}else{
-if(document.selection&&document.selection.createRange){
-var _17=document.selection.createRange().duplicate();
-if(_17.parentElement()==this.textbox){
-_17.moveStart("textedit",-1);
-x=_17.text.length;
-}
-}
-}
-}
-catch(e){
-}
-return x;
-},_setCursorX:function(x){
-try{
-this.textbox.focus();
-if(!x){
-x=0;
-}
-if(typeof this.textbox.selectionEnd=="number"){
-this.textbox.selectionEnd=x;
-}else{
-if(this.textbox.createTextRange){
-var _19=this.textbox.createTextRange();
-_19.collapse(true);
-_19.moveEnd("character",x);
-_19.moveStart("character",x);
-_19.select();
-}
-}
-}
-catch(e){
-}
-},_spinnerPostMixInProperties:function(_1a,_1b){
-var _1c=this.getFragNodeRef(_1b);
-var _1d=dojo.html.getBorderBox(_1c);
-this.buttonSize={width:_1d.height/2-1,height:_1d.height/2-1};
-},_spinnerPostCreate:function(_1e,_1f){
-if(this.textbox.addEventListener){
-this.textbox.addEventListener("DOMMouseScroll",dojo.lang.hitch(this,"_mouseWheeled"),false);
-}else{
-dojo.event.connect(this.textbox,"onmousewheel",this,"_mouseWheeled");
-}
-}});
-dojo.widget.defineWidget("dojo.widget.IntegerSpinner",[dojo.widget.IntegerTextbox,dojo.widget.Spinner],{delta:"1",postMixInProperties:function(_20,_21){
-dojo.widget.IntegerSpinner.superclass.postMixInProperties.apply(this,arguments);
-this._spinnerPostMixInProperties(_20,_21);
-},postCreate:function(_22,_23){
-dojo.widget.IntegerSpinner.superclass.postCreate.apply(this,arguments);
-this._spinnerPostCreate(_22,_23);
-},adjustValue:function(_24,x){
-var val=this.getValue().replace(/[^\-+\d]/g,"");
-if(val.length==0){
-return;
-}
-var num=Math.min(Math.max((parseInt(val)+(parseInt(this.delta)*_24)),(this.flags.min?this.flags.min:-Infinity)),(this.flags.max?this.flags.max:+Infinity));
-val=num.toString();
-if(num>=0){
-val=((this.flags.signed==true)?"+":" ")+val;
-}
-if(this.flags.separator.length>0){
-for(var i=val.length-3;i>1;i-=3){
-val=val.substr(0,i)+this.flags.separator+val.substr(i);
-}
-}
-if(val.substr(0,1)==" "){
-val=val.substr(1);
-}
-this.setValue(val);
-return val.length;
-}});
-dojo.widget.defineWidget("dojo.widget.RealNumberSpinner",[dojo.widget.RealNumberTextbox,dojo.widget.Spinner],function(){
-dojo.experimental("dojo.widget.RealNumberSpinner");
-},{delta:"1e1",postMixInProperties:function(_29,_2a){
-dojo.widget.RealNumberSpinner.superclass.postMixInProperties.apply(this,arguments);
-this._spinnerPostMixInProperties(_29,_2a);
-},postCreate:function(_2b,_2c){
-dojo.widget.RealNumberSpinner.superclass.postCreate.apply(this,arguments);
-this._spinnerPostCreate(_2b,_2c);
-},adjustValue:function(_2d,x){
-var val=this.getValue().replace(/[^\-+\.eE\d]/g,"");
-if(!val.length){
-return;
-}
-var num=parseFloat(val);
-if(isNaN(num)){
-return;
-}
-var _31=this.delta.split(/[eE]/);
-if(!_31.length){
-_31=[1,1];
-}else{
-_31[0]=parseFloat(_31[0].replace(/[^\-+\.\d]/g,""));
-if(isNaN(_31[0])){
-_31[0]=1;
-}
-if(_31.length>1){
-_31[1]=parseInt(_31[1]);
-}
-if(isNaN(_31[1])){
-_31[1]=1;
-}
-}
-val=this.getValue().split(/[eE]/);
-if(!val.length){
-return;
-}
-var _32=parseFloat(val[0].replace(/[^\-+\.\d]/g,""));
-if(val.length==1){
-var _33=0;
-}else{
-var _33=parseInt(val[1].replace(/[^\-+\d]/g,""));
-}
-if(x<=val[0].length){
-x=0;
-_32+=_31[0]*_2d;
-}else{
-x=Number.MAX_VALUE;
-_33+=_31[1]*_2d;
-if(this.flags.eSigned==false&&_33<0){
-_33=0;
-}
-}
-num=Math.min(Math.max((_32*Math.pow(10,_33)),(this.flags.min?this.flags.min:-Infinity)),(this.flags.max?this.flags.max:+Infinity));
-if((this.flags.exponent==true||(this.flags.exponent!=false&&x!=0))&&num.toExponential){
-if(isNaN(this.flags.places)||this.flags.places==Infinity){
-val=num.toExponential();
-}else{
-val=num.toExponential(this.flags.places);
-}
-}else{
-if(num.toFixed&&num.toPrecision){
-if(isNaN(this.flags.places)||this.flags.places==Infinity){
-val=num.toPrecision((1/3).toString().length-1);
-}else{
-val=num.toFixed(this.flags.places);
-}
-}else{
-val=num.toString();
-}
-}
-if(num>=0){
-if(this.flags.signed==true){
-val="+"+val;
-}
-}
-val=val.split(/[eE]/);
-if(this.flags.separator.length>0){
-if(num>=0&&val[0].substr(0,1)!="+"){
-val[0]=" "+val[0];
-}
-var i=val[0].lastIndexOf(".");
-if(i>=0){
-i-=3;
-}else{
-i=val[0].length-3;
-}
-for(;i>1;i-=3){
-val[0]=val[0].substr(0,i)+this.flags.separator+val[0].substr(i);
-}
-if(val[0].substr(0,1)==" "){
-val[0]=val[0].substr(1);
-}
-}
-if(val.length>1){
-if((this.flags.eSigned==true)&&(val[1].substr(0,1)!="+")){
-val[1]="+"+val[1];
-}else{
-if((!this.flags.eSigned)&&(val[1].substr(0,1)=="+")){
-val[1]=val[1].substr(1);
-}else{
-if((!this.flags.eSigned)&&(val[1].substr(0,1)=="-")&&(num.toFixed&&num.toPrecision)){
-if(isNaN(this.flags.places)){
-val[0]=num.toPrecision((1/3).toString().length-1);
-}else{
-val[0]=num.toFixed(this.flags.places).toString();
-}
-val[1]="0";
-}
-}
-}
-val[0]+="e"+val[1];
-}
-this.setValue(val[0]);
-if(x>val[0].length){
-x=val[0].length;
-}
-return x;
-}});
-dojo.widget.defineWidget("dojo.widget.TimeSpinner",[dojo.widget.TimeTextbox,dojo.widget.Spinner],function(){
-dojo.experimental("dojo.widget.TimeSpinner");
-},{postMixInProperties:function(_35,_36){
-dojo.widget.TimeSpinner.superclass.postMixInProperties.apply(this,arguments);
-this._spinnerPostMixInProperties(_35,_36);
-},postCreate:function(_37,_38){
-dojo.widget.TimeSpinner.superclass.postCreate.apply(this,arguments);
-this._spinnerPostCreate(_37,_38);
-},adjustValue:function(_39,x){
-var val=this.getValue();
-var _3c=(this.flags.format&&this.flags.format.search(/[Hhmst]/)>=0)?this.flags.format:"hh:mm:ss t";
-if(_39==0||!val.length||!this.isValid()){
-return;
-}
-if(!this.flags.amSymbol){
-this.flags.amSymbol="AM";
-}
-if(!this.flags.pmSymbol){
-this.flags.pmSymbol="PM";
-}
-var re=dojo.regexp.time(this.flags);
-var _3e=_3c.replace(/H/g,"h").replace(/[^hmst]/g,"").replace(/([hmst])\1/g,"$1");
-var _3f=_3e.indexOf("h")+1;
-var _40=_3e.indexOf("m")+1;
-var _41=_3e.indexOf("s")+1;
-var _42=_3e.indexOf("t")+1;
-var _43=_3c;
-var _44="";
-if(_42>0){
-_44=val.replace(new RegExp(re),"$"+_42);
-_43=_43.replace(/t+/,_44.replace(/./g,"t"));
-}
-var _45=0;
-var _46=1;
-if(_3f>0){
-_45=val.replace(new RegExp(re),"$"+_3f);
-if(dojo.lang.isString(this.delta)){
-_46=this.delta.replace(new RegExp(re),"$"+_3f);
-}
-if(isNaN(_46)){
-_46=1;
-}else{
-_46=parseInt(_46);
-}
-if(_45.length==2){
-_43=_43.replace(/([Hh])+/,"$1$1");
-}else{
-_43=_43.replace(/([Hh])+/,"$1");
-}
-if(isNaN(_45)){
-_45=0;
-}else{
-_45=parseInt(_45.replace(/^0(\d)/,"$1"));
-}
-}
-var min=0;
-var _48=1;
-if(_40>0){
-min=val.replace(new RegExp(re),"$"+_40);
-if(dojo.lang.isString(this.delta)){
-_48=this.delta.replace(new RegExp(re),"$"+_40);
-}
-if(isNaN(_48)){
-_48=1;
-}else{
-_48=parseInt(_48);
-}
-_43=_43.replace(/m+/,min.replace(/./g,"m"));
-if(isNaN(min)){
-min=0;
-}else{
-min=parseInt(min.replace(/^0(\d)/,"$1"));
-}
-}
-var sec=0;
-var _4a=1;
-if(_41>0){
-sec=val.replace(new RegExp(re),"$"+_41);
-if(dojo.lang.isString(this.delta)){
-_4a=this.delta.replace(new RegExp(re),"$"+_41);
-}
-if(isNaN(_4a)){
-_4a=1;
-}else{
-_4a=parseInt(_4a);
-}
-_43=_43.replace(/s+/,sec.replace(/./g,"s"));
-if(isNaN(sec)){
-sec=0;
-}else{
-sec=parseInt(sec.replace(/^0(\d)/,"$1"));
-}
-}
-if(isNaN(x)||x>=_43.length){
-x=_43.length-1;
-}
-var _4b=_43.charAt(x);
-switch(_4b){
-case "t":
-if(_44==this.flags.amSymbol){
-_44=this.flags.pmSymbol;
-}else{
-if(_44==this.flags.pmSymbol){
-_44=this.flags.amSymbol;
-}
-}
-break;
-default:
-if(_45>=1&&_45<12&&_44==this.flags.pmSymbol){
-_45+=12;
-}
-if(_45==12&&_44==this.flags.amSymbol){
-_45=0;
-}
-switch(_4b){
-case "s":
-sec+=_4a*_39;
-while(sec<0){
-min--;
-sec+=60;
-}
-while(sec>=60){
-min++;
-sec-=60;
-}
-case "m":
-if(_4b=="m"){
-min+=_48*_39;
-}
-while(min<0){
-_45--;
-min+=60;
-}
-while(min>=60){
-_45++;
-min-=60;
-}
-case "h":
-case "H":
-if(_4b=="h"||_4b=="H"){
-_45+=_46*_39;
-}
-while(_45<0){
-_45+=24;
-}
-while(_45>=24){
-_45-=24;
-}
-break;
-default:
-return;
-}
-if(_45>=12){
-_44=this.flags.pmSymbol;
-if(_3c.indexOf("h")>=0&&_45>=13){
-_45-=12;
-}
-}else{
-_44=this.flags.amSymbol;
-if(_3c.indexOf("h")>=0&&_45==0){
-_45=12;
-}
-}
-}
-_43=_3c;
-if(_45>=0&&_45<10&&_3c.search(/[hH]{2}/)>=0){
-_45="0"+_45.toString();
-}
-if(_45>=10&&_43.search(/[hH]{2}/)<0){
-_43=_43.replace(/(h|H)/,"$1$1");
-}
-if(min>=0&&min<10&&_43.search(/mm/)>=0){
-min="0"+min.toString();
-}
-if(min>=10&&_43.search(/mm/)<0){
-_43=_43.replace(/m/,"$1$1");
-}
-if(sec>=0&&sec<10&&_43.search(/ss/)>=0){
-sec="0"+sec.toString();
-}
-if(sec>=10&&_43.search(/ss/)<0){
-_43=_43.replace(/s/,"$1$1");
-}
-x=_43.indexOf(_4b);
-if(x==-1){
-x=_3c.length;
-}
-_3c=_3c.replace(/[hH]+/,_45);
-_3c=_3c.replace(/m+/,min);
-_3c=_3c.replace(/s+/,sec);
-_3c=_3c.replace(/t/,_44);
-this.setValue(_3c);
-if(x>_3c.length){
-x=_3c.length;
-}
-return x;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SplitContainer.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SplitContainer.js
deleted file mode 100644
index 704f20b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SplitContainer.js
+++ /dev/null
@@ -1,312 +0,0 @@
-dojo.provide("dojo.widget.SplitContainer");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.ContentPane");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.io.cookie");
-dojo.widget.defineWidget("dojo.widget.SplitContainer",dojo.widget.HtmlWidget,function(){
-this.sizers=[];
-},{isContainer:true,templateCssString:".dojoSplitContainer{\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: block;\n}\n\n.dojoSplitPane{\n\tposition: absolute;\n}\n\n.dojoSplitContainerSizerH,\n.dojoSplitContainerSizerV {\n\tfont-size: 1px;\n\tcursor: move;\n\tcursor: w-resize;\n\tbackground-color: ThreeDFace;\n\tborder: 1px solid;\n\tborder-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;\n\tmargin: 0;\n}\n\n.dojoSplitContainerSizerV {\n\tcursor: n-resize;\n}\n\n.dojoSplitContainerVirtualSizerH,\n.dojoSplitContainerVirtualSizerV {\n\tfont-size: 1px;\n\tcursor: move;\n\tcursor: w-resize;\n\tbackground-color: ThreeDShadow;\n\t-moz-opacity: 0.5;\n\topacity: 0.5;\n\tfilter: Alpha(Opacity=50);\n\tmargin: 0;\n}\n\n.dojoSplitContainerVirtualSizerV {\n\tcursor: n-resize;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/SplitContainer.css"),activeSizing:false,sizerWidth:15,orientation:"horizontal",persist:true,postMixInProperties:function(){
-dojo.widget.SplitContainer.superclass.postMixInProperties.apply(this,arguments);
-this.isHorizontal=(this.orientation=="horizontal");
-},fillInTemplate:function(){
-dojo.widget.SplitContainer.superclass.fillInTemplate.apply(this,arguments);
-dojo.html.addClass(this.domNode,"dojoSplitContainer");
-if(dojo.render.html.moz){
-this.domNode.style.overflow="-moz-scrollbars-none";
-}
-var _1=dojo.html.getContentBox(this.domNode);
-this.paneWidth=_1.width;
-this.paneHeight=_1.height;
-},onResized:function(e){
-var _3=dojo.html.getContentBox(this.domNode);
-this.paneWidth=_3.width;
-this.paneHeight=_3.height;
-this._layoutPanels();
-},postCreate:function(_4,_5,_6){
-dojo.widget.SplitContainer.superclass.postCreate.apply(this,arguments);
-for(var i=0;i<this.children.length;i++){
-with(this.children[i].domNode.style){
-position="absolute";
-}
-dojo.html.addClass(this.children[i].domNode,"dojoSplitPane");
-if(i==this.children.length-1){
-break;
-}
-this._addSizer();
-}
-if(typeof this.sizerWidth=="object"){
-try{
-this.sizerWidth=parseInt(this.sizerWidth.toString());
-}
-catch(e){
-this.sizerWidth=15;
-}
-}
-this.virtualSizer=document.createElement("div");
-this.virtualSizer.style.position="absolute";
-this.virtualSizer.style.display="none";
-this.virtualSizer.style.zIndex=10;
-this.virtualSizer.className=this.isHorizontal?"dojoSplitContainerVirtualSizerH":"dojoSplitContainerVirtualSizerV";
-this.domNode.appendChild(this.virtualSizer);
-dojo.html.disableSelection(this.virtualSizer);
-if(this.persist){
-this._restoreState();
-}
-this.resizeSoon();
-},_injectChild:function(_8){
-with(_8.domNode.style){
-position="absolute";
-}
-dojo.html.addClass(_8.domNode,"dojoSplitPane");
-},_addSizer:function(){
-var i=this.sizers.length;
-this.sizers[i]=document.createElement("div");
-this.sizers[i].style.position="absolute";
-this.sizers[i].className=this.isHorizontal?"dojoSplitContainerSizerH":"dojoSplitContainerSizerV";
-var _a=this;
-var _b=(function(){
-var _c=i;
-return function(e){
-_a.beginSizing(e,_c);
-};
-})();
-dojo.event.connect(this.sizers[i],"onmousedown",_b);
-this.domNode.appendChild(this.sizers[i]);
-dojo.html.disableSelection(this.sizers[i]);
-},removeChild:function(_e){
-if(this.sizers.length>0){
-for(var x=0;x<this.children.length;x++){
-if(this.children[x]===_e){
-var i=this.sizers.length-1;
-this.domNode.removeChild(this.sizers[i]);
-this.sizers.length=i;
-break;
-}
-}
-}
-dojo.widget.SplitContainer.superclass.removeChild.call(this,_e,arguments);
-this.onResized();
-},addChild:function(_11){
-dojo.widget.SplitContainer.superclass.addChild.apply(this,arguments);
-this._injectChild(_11);
-if(this.children.length>1){
-this._addSizer();
-}
-this._layoutPanels();
-},_layoutPanels:function(){
-if(this.children.length==0){
-return;
-}
-var _12=this.isHorizontal?this.paneWidth:this.paneHeight;
-if(this.children.length>1){
-_12-=this.sizerWidth*(this.children.length-1);
-}
-var _13=0;
-for(var i=0;i<this.children.length;i++){
-_13+=this.children[i].sizeShare;
-}
-var _15=_12/_13;
-var _16=0;
-for(var i=0;i<this.children.length-1;i++){
-var _17=Math.round(_15*this.children[i].sizeShare);
-this.children[i].sizeActual=_17;
-_16+=_17;
-}
-this.children[this.children.length-1].sizeActual=_12-_16;
-this._checkSizes();
-var pos=0;
-var _17=this.children[0].sizeActual;
-this._movePanel(this.children[0],pos,_17);
-this.children[0].position=pos;
-pos+=_17;
-for(var i=1;i<this.children.length;i++){
-this._moveSlider(this.sizers[i-1],pos,this.sizerWidth);
-this.sizers[i-1].position=pos;
-pos+=this.sizerWidth;
-_17=this.children[i].sizeActual;
-this._movePanel(this.children[i],pos,_17);
-this.children[i].position=pos;
-pos+=_17;
-}
-},_movePanel:function(_19,pos,_1b){
-if(this.isHorizontal){
-_19.domNode.style.left=pos+"px";
-_19.domNode.style.top=0;
-_19.resizeTo(_1b,this.paneHeight);
-}else{
-_19.domNode.style.left=0;
-_19.domNode.style.top=pos+"px";
-_19.resizeTo(this.paneWidth,_1b);
-}
-},_moveSlider:function(_1c,pos,_1e){
-if(this.isHorizontal){
-_1c.style.left=pos+"px";
-_1c.style.top=0;
-dojo.html.setMarginBox(_1c,{width:_1e,height:this.paneHeight});
-}else{
-_1c.style.left=0;
-_1c.style.top=pos+"px";
-dojo.html.setMarginBox(_1c,{width:this.paneWidth,height:_1e});
-}
-},_growPane:function(_1f,_20){
-if(_1f>0){
-if(_20.sizeActual>_20.sizeMin){
-if((_20.sizeActual-_20.sizeMin)>_1f){
-_20.sizeActual=_20.sizeActual-_1f;
-_1f=0;
-}else{
-_1f-=_20.sizeActual-_20.sizeMin;
-_20.sizeActual=_20.sizeMin;
-}
-}
-}
-return _1f;
-},_checkSizes:function(){
-var _21=0;
-var _22=0;
-for(var i=0;i<this.children.length;i++){
-_22+=this.children[i].sizeActual;
-_21+=this.children[i].sizeMin;
-}
-if(_21<=_22){
-var _24=0;
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].sizeActual<this.children[i].sizeMin){
-_24+=this.children[i].sizeMin-this.children[i].sizeActual;
-this.children[i].sizeActual=this.children[i].sizeMin;
-}
-}
-if(_24>0){
-if(this.isDraggingLeft){
-for(var i=this.children.length-1;i>=0;i--){
-_24=this._growPane(_24,this.children[i]);
-}
-}else{
-for(var i=0;i<this.children.length;i++){
-_24=this._growPane(_24,this.children[i]);
-}
-}
-}
-}else{
-for(var i=0;i<this.children.length;i++){
-this.children[i].sizeActual=Math.round(_22*(this.children[i].sizeMin/_21));
-}
-}
-},beginSizing:function(e,i){
-this.paneBefore=this.children[i];
-this.paneAfter=this.children[i+1];
-this.isSizing=true;
-this.sizingSplitter=this.sizers[i];
-this.originPos=dojo.html.getAbsolutePosition(this.children[0].domNode,true,dojo.html.boxSizing.MARGIN_BOX);
-if(this.isHorizontal){
-var _27=(e.layerX?e.layerX:e.offsetX);
-var _28=e.pageX;
-this.originPos=this.originPos.x;
-}else{
-var _27=(e.layerY?e.layerY:e.offsetY);
-var _28=e.pageY;
-this.originPos=this.originPos.y;
-}
-this.startPoint=this.lastPoint=_28;
-this.screenToClientOffset=_28-_27;
-this.dragOffset=this.lastPoint-this.paneBefore.sizeActual-this.originPos-this.paneBefore.position;
-if(!this.activeSizing){
-this._showSizingLine();
-}
-dojo.event.connect(document.documentElement,"onmousemove",this,"changeSizing");
-dojo.event.connect(document.documentElement,"onmouseup",this,"endSizing");
-dojo.event.browser.stopEvent(e);
-},changeSizing:function(e){
-this.lastPoint=this.isHorizontal?e.pageX:e.pageY;
-if(this.activeSizing){
-this.movePoint();
-this._updateSize();
-}else{
-this.movePoint();
-this._moveSizingLine();
-}
-dojo.event.browser.stopEvent(e);
-},endSizing:function(e){
-if(!this.activeSizing){
-this._hideSizingLine();
-}
-this._updateSize();
-this.isSizing=false;
-dojo.event.disconnect(document.documentElement,"onmousemove",this,"changeSizing");
-dojo.event.disconnect(document.documentElement,"onmouseup",this,"endSizing");
-if(this.persist){
-this._saveState(this);
-}
-},movePoint:function(){
-var p=this.lastPoint-this.screenToClientOffset;
-var a=p-this.dragOffset;
-a=this.legaliseSplitPoint(a);
-p=a+this.dragOffset;
-this.lastPoint=p+this.screenToClientOffset;
-},legaliseSplitPoint:function(a){
-a+=this.sizingSplitter.position;
-this.isDraggingLeft=(a>0)?true:false;
-if(!this.activeSizing){
-if(a<this.paneBefore.position+this.paneBefore.sizeMin){
-a=this.paneBefore.position+this.paneBefore.sizeMin;
-}
-if(a>this.paneAfter.position+(this.paneAfter.sizeActual-(this.sizerWidth+this.paneAfter.sizeMin))){
-a=this.paneAfter.position+(this.paneAfter.sizeActual-(this.sizerWidth+this.paneAfter.sizeMin));
-}
-}
-a-=this.sizingSplitter.position;
-this._checkSizes();
-return a;
-},_updateSize:function(){
-var pos=this.lastPoint-this.dragOffset-this.originPos;
-var _2f=this.paneBefore.position;
-var _30=this.paneAfter.position+this.paneAfter.sizeActual;
-this.paneBefore.sizeActual=pos-_2f;
-this.paneAfter.position=pos+this.sizerWidth;
-this.paneAfter.sizeActual=_30-this.paneAfter.position;
-for(var i=0;i<this.children.length;i++){
-this.children[i].sizeShare=this.children[i].sizeActual;
-}
-this._layoutPanels();
-},_showSizingLine:function(){
-this._moveSizingLine();
-if(this.isHorizontal){
-dojo.html.setMarginBox(this.virtualSizer,{width:this.sizerWidth,height:this.paneHeight});
-}else{
-dojo.html.setMarginBox(this.virtualSizer,{width:this.paneWidth,height:this.sizerWidth});
-}
-this.virtualSizer.style.display="block";
-},_hideSizingLine:function(){
-this.virtualSizer.style.display="none";
-},_moveSizingLine:function(){
-var pos=this.lastPoint-this.startPoint+this.sizingSplitter.position;
-if(this.isHorizontal){
-this.virtualSizer.style.left=pos+"px";
-}else{
-var pos=(this.lastPoint-this.startPoint)+this.sizingSplitter.position;
-this.virtualSizer.style.top=pos+"px";
-}
-},_getCookieName:function(i){
-return this.widgetId+"_"+i;
-},_restoreState:function(){
-for(var i=0;i<this.children.length;i++){
-var _35=this._getCookieName(i);
-var _36=dojo.io.cookie.getCookie(_35);
-if(_36!=null){
-var pos=parseInt(_36);
-if(typeof pos=="number"){
-this.children[i].sizeShare=pos;
-}
-}
-}
-},_saveState:function(){
-for(var i=0;i<this.children.length;i++){
-var _39=this._getCookieName(i);
-dojo.io.cookie.setCookie(_39,this.children[i].sizeShare,null,null,null,null);
-}
-}});
-dojo.lang.extend(dojo.widget.Widget,{sizeMin:10,sizeShare:10});
-dojo.widget.defineWidget("dojo.widget.SplitContainerPanel",dojo.widget.ContentPane,{});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SvgButton.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SvgButton.js
deleted file mode 100644
index 2e61aa1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SvgButton.js
+++ /dev/null
@@ -1,87 +0,0 @@
-dojo.provide("dojo.widget.SvgButton");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.widget.SvgButton");
-dojo.widget.SvgButton=function(){
-dojo.widget.DomButton.call(this);
-dojo.widget.SvgWidget.call(this);
-this.onFoo=function(){
-alert("bar");
-};
-this.label="huzzah!";
-this.setLabel=function(x,y,_3,_4,_5){
-var _6=dojo.widget.SvgButton.prototype.coordinates(x,y,_3,_4,_5);
-var _7="";
-switch(_5){
-case "ellipse":
-_7="<text x='"+_6[6]+"' y='"+_6[7]+"'>"+_4+"</text>";
-break;
-case "rectangle":
-_7="";
-break;
-case "circle":
-_7="";
-break;
-}
-return _7;
-};
-this.fillInTemplate=function(x,y,_a,_b,_c){
-this.textSize=_a||12;
-this.label=_b;
-var _d=this.label.length*this.textSize;
-};
-};
-dojo.inherits(dojo.widget.SvgButton,dojo.widget.DomButton);
-dojo.widget.SvgButton.prototype.shapeString=function(x,y,_10,_11,_12){
-switch(_12){
-case "ellipse":
-var _13=dojo.widget.SvgButton.prototype.coordinates(x,y,_10,_11,_12);
-return "<ellipse cx='"+_13[4]+"' cy='"+_13[5]+"' rx='"+_13[2]+"' ry='"+_13[3]+"'/>";
-break;
-case "rect":
-return "";
-break;
-case "circle":
-return "";
-break;
-}
-};
-dojo.widget.SvgButton.prototype.coordinates=function(x,y,_16,_17,_18){
-switch(_18){
-case "ellipse":
-var _19=_17.length*_16;
-var _1a=_16*2.5;
-var rx=_19/2;
-var ry=_1a/2;
-var cx=rx+x;
-var cy=ry+y;
-var _1f=cx-rx*_16/25;
-var _20=cy*1.1;
-return [_19,_1a,rx,ry,cx,cy,_1f,_20];
-break;
-case "rectangle":
-return "";
-break;
-case "circle":
-return "";
-break;
-}
-};
-dojo.widget.SvgButton.prototype.labelString=function(x,y,_23,_24,_25){
-var _26="";
-var _27=dojo.widget.SvgButton.prototype.coordinates(x,y,_23,_24,_25);
-switch(_25){
-case "ellipse":
-_26="<text x='"+_27[6]+"' y='"+_27[7]+"'>"+_24+"</text>";
-break;
-case "rectangle":
-_26="";
-break;
-case "circle":
-_26="";
-break;
-}
-return _26;
-};
-dojo.widget.SvgButton.prototype.templateString=function(x,y,_2a,_2b,_2c){
-return "<g class='dojoButton' dojoAttachEvent='onClick; onMouseMove: onFoo;' dojoAttachPoint='labelNode'>"+dojo.widgets.SVGButton.prototype.shapeString(x,y,_2a,_2b,_2c)+dojo.widget.SVGButton.prototype.labelString(x,y,_2a,_2b,_2c)+"</g>";
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SvgWidget.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SvgWidget.js
deleted file mode 100644
index 331b10c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SvgWidget.js
+++ /dev/null
@@ -1,58 +0,0 @@
-dojo.require("dojo.widget.DomWidget");
-dojo.provide("dojo.widget.SvgWidget");
-dojo.provide("dojo.widget.SVGWidget");
-dojo.require("dojo.dom");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.widget.SvgWidget");
-dojo.widget.declare("dojo.widget.SvgWidget",dojo.widget.DomWidget,{createNodesFromText:function(_1,_2){
-return dojo.svg.createNodesFromText(_1,_2);
-}});
-dojo.widget.SVGWidget=dojo.widget.SvgWidget;
-try{
-(function(){
-var tf=function(){
-var rw=new function(){
-dojo.widget.SvgWidget.call(this);
-this.buildRendering=function(){
-return;
-};
-this.destroyRendering=function(){
-return;
-};
-this.postInitialize=function(){
-return;
-};
-this.widgetType="SVGRootWidget";
-this.domNode=document.documentElement;
-};
-var wm=dojo.widget.manager;
-wm.root=rw;
-wm.add(rw);
-wm.getWidgetFromNode=function(_6){
-var _7=function(x){
-if(x.domNode==_6){
-return true;
-}
-};
-var _9=[];
-while((_6)&&(_9.length<1)){
-_9=this.getWidgetsByFilter(_7);
-_6=_6.parentNode;
-}
-if(_9.length>0){
-return _9[0];
-}else{
-return null;
-}
-};
-wm.getWidgetFromEvent=function(_a){
-return this.getWidgetFromNode(_a.target);
-};
-wm.getWidgetFromPrimitive=wm.getWidgetFromNode;
-};
-dojo.event.connect(dojo.hostenv,"loaded",tf);
-})();
-}
-catch(e){
-alert(e);
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SwtWidget.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SwtWidget.js
deleted file mode 100644
index 1b2c334..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/SwtWidget.js
+++ /dev/null
@@ -1,41 +0,0 @@
-dojo.provide("dojo.widget.SwtWidget");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.widget.SwtWidget");
-dojo.require("dojo.event.*");
-dojo.require("dojo.widget.Widget");
-dojo.require("dojo.uri.*");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.extras");
-try{
-importPackage(Packages.org.eclipse.swt.widgets);
-dojo.declare("dojo.widget.SwtWidget",dojo.widget.Widget,function(){
-if((arguments.length>0)&&(typeof arguments[0]=="object")){
-this.create(arguments[0]);
-}
-},{display:null,shell:null,show:function(){
-},hide:function(){
-},addChild:function(){
-},registerChild:function(){
-},addWidgetAsDirectChild:function(){
-},removeChild:function(){
-},destroyRendering:function(){
-},postInitialize:function(){
-}});
-dojo.widget.SwtWidget.prototype.display=new Display();
-dojo.widget.SwtWidget.prototype.shell=new Shell(dojo.widget.SwtWidget.prototype.display);
-dojo.widget.manager.startShell=function(){
-var sh=dojo.widget.SwtWidget.prototype.shell;
-var d=dojo.widget.SwtWidget.prototype.display;
-sh.open();
-while(!sh.isDisposed()){
-dojo.widget.manager.doNext();
-if(!d.readAndDispatch()){
-d.sleep();
-}
-}
-d.dispose();
-};
-}
-catch(e){
-dojo.debug("dojo.widget.SwtWidget not loaded. SWT classes not available");
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TabContainer.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TabContainer.js
deleted file mode 100644
index b7a0d2a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TabContainer.js
+++ /dev/null
@@ -1,76 +0,0 @@
-dojo.provide("dojo.widget.TabContainer");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.PageContainer");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.selection");
-dojo.require("dojo.widget.html.layout");
-dojo.widget.defineWidget("dojo.widget.TabContainer",dojo.widget.PageContainer,{labelPosition:"top",closeButton:"none",templateString:null,templateString:"<div id=\"${this.widgetId}\" class=\"dojoTabContainer\">\n\t<div dojoAttachPoint=\"tablistNode\"></div>\n\t<div class=\"dojoTabPaneWrapper\" dojoAttachPoint=\"containerNode\" dojoAttachEvent=\"onKey\" waiRole=\"tabpanel\"></div>\n</div>\n",templateCssString:".dojoTabContainer {\n\tposition : relative;\n}\n\n.dojoTabPaneWrapper {\n\tborder : 1px solid #6290d2;\n\t_zoom: 1; /* force IE6 layout mode so top border doesnt disappear */\n\tdisplay: block;\n\tclear: both;\n\toverflow: hidden;\n}\n\n.dojoTabLabels-top {\n\tposition : relative;\n\ttop : 0px;\n\tleft : 0px;\n\toverflow : visible;\n\tmargin-bottom : -1px;\n\twidth : 100%;\n\tz-index: 2;\t/* so the bottom of the tab label will cover up the border of dojoTabPaneWrapper */\n}\n\n.dojoTabNoLayout.dojoTabLabels-top .dojoTab {\n\tmargin-bottom: -1px;\n\t_margin-bottom: 0px; /* IE filter so top border lines up correctly */\n}\n\n.dojoTab {\n\tposition : relative;\n\tfloat : left;\n\tpadding-left : 9px;\n\tborder-bottom : 1px solid #6290d2;\n\tbackground : url(images/tab_left.gif) no-repeat left top;\n\tcursor: pointer;\n\twhite-space: nowrap;\n\tz-index: 3;\n}\n\n.dojoTab div {\n\tdisplay : block;\n\tpadding : 4px 15px 4px 6px;\n\tbackground : url(images/tab_top_right.gif) no-repeat right top;\n\tcolor : #333;\n\tfont-size : 90%;\n}\n\n.dojoTab .close {\n\tdisplay : inline-block;\n\theight : 12px;\n\twidth : 12px;\n\tpadding : 0 12px 0 0;\n\tmargin : 0 -10px 0 10px;\n\tcursor : default;\n\tfont-size: small;\n}\n\n.dojoTab .closeImage {\n\tbackground : url(images/tab_close.gif) no-repeat right top;\n}\n\n.dojoTab .closeHover {\n\tbackground-image : url(images/tab_close_h.gif);\n}\n\n.dojoTab.current {\n\tpadding-bottom : 1px;\n\tborder-bottom : 0;\n\tbackground-position : 0 -150px;\n}\n\n.dojoTab.current div {\n\tpadding-bottom : 5px;\n\tmargin-bottom : -1px;\n\tbackground-position : 100% -150px;\n}\n\n/* bottom tabs */\n\n.dojoTabLabels-bottom {\n\tposition : relative;\n\tbottom : 0px;\n\tleft : 0px;\n\toverflow : visible;\n\tmargin-top : -1px;\n\twidth : 100%;\n\tz-index: 2;\n}\n\n.dojoTabNoLayout.dojoTabLabels-bottom {\n\tposition : relative;\n}\n\n.dojoTabLabels-bottom .dojoTab {\n\tborder-top :  1px solid #6290d2;\n\tborder-bottom : 0;\n\tbackground : url(images/tab_bot_left.gif) no-repeat left bottom;\n}\n\n.dojoTabLabels-bottom .dojoTab div {\n\tbackground : url(images/tab_bot_right.gif) no-repeat right bottom;\n}\n\n.dojoTabLabels-bottom .dojoTab.current {\n\tborder-top : 0;\n\tbackground : url(images/tab_bot_left_curr.gif) no-repeat left bottom;\n}\n\n.dojoTabLabels-bottom .dojoTab.current div {\n\tpadding-top : 4px;\n\tbackground : url(images/tab_bot_right_curr.gif) no-repeat right bottom;\n}\n\n/* right-h tabs */\n\n.dojoTabLabels-right-h {\n\toverflow : visible;\n\tmargin-left : -1px;\n\tz-index: 2;\n}\n\n.dojoTabLabels-right-h .dojoTab {\n\tpadding-left : 0;\n\tborder-left :  1px solid #6290d2;\n\tborder-bottom : 0;\n\tbackground : url(images/tab_bot_right.gif) no-repeat right bottom;\n\tfloat : none;\n}\n\n.dojoTabLabels-right-h .dojoTab div {\n\tpadding : 4px 15px 4px 15px;\n}\n\n.dojoTabLabels-right-h .dojoTab.current {\n\tborder-left :  0;\n\tborder-bottom :  1px solid #6290d2;\n}\n\n/* left-h tabs */\n\n.dojoTabLabels-left-h {\n\toverflow : visible;\n\tmargin-right : -1px;\n\tz-index: 2;\n}\n\n.dojoTabLabels-left-h .dojoTab {\n\tborder-right :  1px solid #6290d2;\n\tborder-bottom : 0;\n\tfloat : none;\n\tbackground : url(images/tab_top_left.gif) no-repeat left top;\n}\n\n.dojoTabLabels-left-h .dojoTab.current {\n\tborder-right : 0;\n\tborder-bottom :  1px solid #6290d2;\n\tpadding-bottom : 0;\n\tbackground : url(images/tab_top_left.gif) no-repeat 0 -150px;\n}\n\n.dojoTabLabels-left-h .dojoTab div {\n\tbackground : 0;\n\tborder-bottom :  1px solid #6290d2;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/TabContainer.css"),selectedTab:"",postMixInProperties:function(){
-if(this.selectedTab){
-dojo.deprecated("selectedTab deprecated, use selectedChild instead, will be removed in","0.5");
-this.selectedChild=this.selectedTab;
-}
-if(this.closeButton!="none"){
-dojo.deprecated("closeButton deprecated, use closable='true' on each child instead, will be removed in","0.5");
-}
-dojo.widget.TabContainer.superclass.postMixInProperties.apply(this,arguments);
-},fillInTemplate:function(){
-this.tablist=dojo.widget.createWidget("TabController",{id:this.widgetId+"_tablist",labelPosition:this.labelPosition,doLayout:this.doLayout,containerId:this.widgetId},this.tablistNode);
-dojo.widget.TabContainer.superclass.fillInTemplate.apply(this,arguments);
-},postCreate:function(_1,_2){
-dojo.widget.TabContainer.superclass.postCreate.apply(this,arguments);
-this.onResized();
-},_setupChild:function(_3){
-if(this.closeButton=="tab"||this.closeButton=="pane"){
-_3.closable=true;
-}
-dojo.html.addClass(_3.domNode,"dojoTabPane");
-dojo.widget.TabContainer.superclass._setupChild.apply(this,arguments);
-},onResized:function(){
-if(!this.doLayout){
-return;
-}
-var _4=this.labelPosition.replace(/-h/,"");
-var _5=[{domNode:this.tablist.domNode,layoutAlign:_4},{domNode:this.containerNode,layoutAlign:"client"}];
-dojo.widget.html.layout(this.domNode,_5);
-if(this.selectedChildWidget){
-var _6=dojo.html.getContentBox(this.containerNode);
-this.selectedChildWidget.resizeTo(_6.width,_6.height);
-}
-},selectTab:function(_7,_8){
-dojo.deprecated("use selectChild() rather than selectTab(), selectTab() will be removed in","0.5");
-this.selectChild(_7,_8);
-},onKey:function(e){
-if(e.keyCode==e.KEY_UP_ARROW&&e.ctrlKey){
-var _a=this.correspondingTabButton||this.selectedTabWidget.tabButton;
-_a.focus();
-dojo.event.browser.stopEvent(e);
-}else{
-if(e.keyCode==e.KEY_DELETE&&e.altKey){
-if(this.selectedChildWidget.closable){
-this.closeChild(this.selectedChildWidget);
-dojo.event.browser.stopEvent(e);
-}
-}
-}
-},destroy:function(){
-this.tablist.destroy();
-dojo.widget.TabContainer.superclass.destroy.apply(this,arguments);
-}});
-dojo.widget.defineWidget("dojo.widget.TabController",dojo.widget.PageController,{templateString:"<div wairole='tablist' dojoAttachEvent='onKey'></div>",labelPosition:"top",doLayout:true,"class":"",buttonWidget:"TabButton",postMixInProperties:function(){
-if(!this["class"]){
-this["class"]="dojoTabLabels-"+this.labelPosition+(this.doLayout?"":" dojoTabNoLayout");
-}
-dojo.widget.TabController.superclass.postMixInProperties.apply(this,arguments);
-}});
-dojo.widget.defineWidget("dojo.widget.TabButton",dojo.widget.PageButton,{templateString:"<div class='dojoTab' dojoAttachEvent='onClick'>"+"<div dojoAttachPoint='innerDiv'>"+"<span dojoAttachPoint='titleNode' tabIndex='-1' waiRole='tab'>${this.label}</span>"+"<span dojoAttachPoint='closeButtonNode' class='close closeImage' style='${this.closeButtonStyle}'"+"    dojoAttachEvent='onMouseOver:onCloseButtonMouseOver; onMouseOut:onCloseButtonMouseOut; onClick:onCloseButtonClick'></span>"+"</div>"+"</div>",postMixInProperties:function(){
-this.closeButtonStyle=this.closeButton?"":"display: none";
-dojo.widget.TabButton.superclass.postMixInProperties.apply(this,arguments);
-},fillInTemplate:function(){
-dojo.html.disableSelection(this.titleNode);
-dojo.widget.TabButton.superclass.fillInTemplate.apply(this,arguments);
-},onCloseButtonClick:function(_b){
-_b.stopPropagation();
-dojo.widget.TabButton.superclass.onCloseButtonClick.apply(this,arguments);
-}});
-dojo.widget.defineWidget("dojo.widget.a11y.TabButton",dojo.widget.TabButton,{imgPath:dojo.uri.moduleUri("dojo.widget","templates/images/tab_close.gif"),templateString:"<div class='dojoTab' dojoAttachEvent='onClick;onKey'>"+"<div dojoAttachPoint='innerDiv'>"+"<span dojoAttachPoint='titleNode' tabIndex='-1' waiRole='tab'>${this.label}</span>"+"<img class='close' src='${this.imgPath}' alt='[x]' style='${this.closeButtonStyle}'"+"    dojoAttachEvent='onClick:onCloseButtonClick'>"+"</div>"+"</div>"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TaskBar.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TaskBar.js
deleted file mode 100644
index d7cca7b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TaskBar.js
+++ /dev/null
@@ -1,36 +0,0 @@
-dojo.provide("dojo.widget.TaskBar");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.FloatingPane");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.selection");
-dojo.widget.defineWidget("dojo.widget.TaskBarItem",dojo.widget.HtmlWidget,{iconSrc:"",caption:"Untitled",templateString:"<div class=\"dojoTaskBarItem\" dojoAttachEvent=\"onClick\">\n</div>\n",templateCssString:".dojoTaskBarItem {\n\tdisplay: inline-block;\n\tbackground-color: ThreeDFace;\n\tborder: outset 2px;\n\tmargin-right: 5px;\n\tcursor: pointer;\n\theight: 35px;\n\twidth: 100px;\n\tfont-size: 10pt;\n\twhite-space: nowrap;\n\ttext-align: center;\n\tfloat: left;\n\toverflow: hidden;\n}\n\n.dojoTaskBarItem img {\n\tvertical-align: middle;\n\tmargin-right: 5px;\n\tmargin-left: 5px;\t\n\theight: 32px;\n\twidth: 32px;\n}\n\n.dojoTaskBarItem a {\n\t color: black;\n\ttext-decoration: none;\n}\n\n\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/TaskBar.css"),fillInTemplate:function(){
-if(this.iconSrc){
-var _1=document.createElement("img");
-_1.src=this.iconSrc;
-this.domNode.appendChild(_1);
-}
-this.domNode.appendChild(document.createTextNode(this.caption));
-dojo.html.disableSelection(this.domNode);
-},postCreate:function(){
-this.window=dojo.widget.getWidgetById(this.windowId);
-this.window.explodeSrc=this.domNode;
-dojo.event.connect(this.window,"destroy",this,"destroy");
-},onClick:function(){
-this.window.toggleDisplay();
-}});
-dojo.widget.defineWidget("dojo.widget.TaskBar",dojo.widget.FloatingPane,function(){
-this._addChildStack=[];
-},{resizable:false,titleBarDisplay:false,addChild:function(_2){
-if(!this.containerNode){
-this._addChildStack.push(_2);
-}else{
-if(this._addChildStack.length>0){
-var _3=this._addChildStack;
-this._addChildStack=[];
-dojo.lang.forEach(_3,this.addChild,this);
-}
-}
-var _4=dojo.widget.createWidget("TaskBarItem",{windowId:_2.widgetId,caption:_2.title,iconSrc:_2.iconSrc});
-dojo.widget.TaskBar.superclass.addChild.call(this,_4);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Textbox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Textbox.js
deleted file mode 100644
index fcf80e9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Textbox.js
+++ /dev/null
@@ -1,39 +0,0 @@
-dojo.provide("dojo.widget.Textbox");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.Manager");
-dojo.require("dojo.widget.Parse");
-dojo.require("dojo.xml.Parse");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.i18n.common");
-dojo.requireLocalization("dojo.widget","validate",null,"zh-cn,ja,fr,ROOT");
-dojo.widget.defineWidget("dojo.widget.Textbox",dojo.widget.HtmlWidget,{className:"",name:"",value:"",type:"",trim:false,uppercase:false,lowercase:false,ucFirst:false,digit:false,htmlfloat:"none",templateString:"<span style='float:${this.htmlfloat};'>\n\t<input dojoAttachPoint='textbox' dojoAttachEvent='onblur;onfocus'\n\t\tid='${this.widgetId}' name='${this.name}'\n\t\tclass='${this.className}' type='${this.type}' >\n</span>\n",textbox:null,fillInTemplate:function(){
-this.textbox.value=this.value;
-},filter:function(){
-if(this.trim){
-this.textbox.value=this.textbox.value.replace(/(^\s*|\s*$)/g,"");
-}
-if(this.uppercase){
-this.textbox.value=this.textbox.value.toUpperCase();
-}
-if(this.lowercase){
-this.textbox.value=this.textbox.value.toLowerCase();
-}
-if(this.ucFirst){
-this.textbox.value=this.textbox.value.replace(/\b\w+\b/g,function(_1){
-return _1.substring(0,1).toUpperCase()+_1.substring(1).toLowerCase();
-});
-}
-if(this.digit){
-this.textbox.value=this.textbox.value.replace(/\D/g,"");
-}
-},onfocus:function(){
-},onblur:function(){
-this.filter();
-},mixInProperties:function(_2,_3){
-dojo.widget.Textbox.superclass.mixInProperties.apply(this,arguments);
-if(_2["class"]){
-this.className=_2["class"];
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TimePicker.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TimePicker.js
deleted file mode 100644
index 0ccc787..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TimePicker.js
+++ /dev/null
@@ -1,265 +0,0 @@
-dojo.provide("dojo.widget.TimePicker");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.event.*");
-dojo.require("dojo.date.serialize");
-dojo.require("dojo.date.format");
-dojo.require("dojo.dom");
-dojo.require("dojo.html.style");
-dojo.requireLocalization("dojo.i18n.calendar","gregorian",null,"zh-cn,zh-hk,de,ko,zh-tw,zh,ja,fi,pt-br,fr,es,ROOT,hu,en,it,sv,nl,pt");
-dojo.requireLocalization("dojo.widget","TimePicker",null,"ROOT");
-dojo.widget.defineWidget("dojo.widget.TimePicker",dojo.widget.HtmlWidget,function(){
-this.time="";
-this.useDefaultTime=false;
-this.useDefaultMinutes=false;
-this.storedTime="";
-this.currentTime={};
-this.classNames={selectedTime:"selectedItem"};
-this.any="any";
-this.selectedTime={hour:"",minute:"",amPm:"",anyTime:false};
-this.hourIndexMap=["",2,4,6,8,10,1,3,5,7,9,11,0];
-this.minuteIndexMap=[0,2,4,6,8,10,1,3,5,7,9,11];
-},{isContainer:false,templateString:"<div class=\"timePickerContainer\" dojoAttachPoint=\"timePickerContainerNode\">\n\t<table class=\"timeContainer\" cellspacing=\"0\" >\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<td class=\"timeCorner cornerTopLeft\" valign=\"top\">&nbsp;</td>\n\t\t\t\t<td class=\"timeLabelContainer hourSelector\">${this.calendar.field-hour}</td>\n\t\t\t\t<td class=\"timeLabelContainer minutesHeading\">${this.calendar.field-minute}</td>\n\t\t\t\t<td class=\"timeCorner cornerTopRight\" valign=\"top\">&nbsp;</td>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td valign=\"top\" colspan=\"2\" class=\"hours\">\n\t\t\t\t\t<table align=\"center\">\n\t\t\t\t\t\t<tbody dojoAttachPoint=\"hourContainerNode\"  \n\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onSetSelectedHour;\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>12</td>\n\t\t\t\t\t\t\t\t<td>6</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>1</td>\n\t\t\t\t\t\t\t\t<td>7</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>2</td>\n\t\t\t\t\t\t\t\t<td>8</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>3</td>\n\t\t\t\t\t\t\t\t<td>9</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>4</td>\n\t\t\t\t\t\t\t\t<td>10</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>5</td>\n\t\t\t\t\t\t\t\t<td>11</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t\t<td valign=\"top\" class=\"minutes\" colspan=\"2\">\n\t\t\t\t\t<table align=\"center\">\n\t\t\t\t\t\t<tbody dojoAttachPoint=\"minuteContainerNode\" \n\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onSetSelectedMinute;\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>00</td>\n\t\t\t\t\t\t\t\t<td>30</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>05</td>\n\t\t\t\t\t\t\t\t<td>35</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>10</td>\n\t\t\t\t\t\t\t\t<td>40</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>15</td>\n\t\t\t\t\t\t\t\t<td>45</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>20</td>\n\t\t\t\t\t\t\t\t<td>50</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>25</td>\n\t\t\t\t\t\t\t\t<td>55</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td class=\"cornerBottomLeft\">&nbsp;</td>\n\t\t\t\t<td valign=\"top\" class=\"timeOptions\">\n\t\t\t\t\t<table class=\"amPmContainer\">\n\t\t\t\t\t\t<tbody dojoAttachPoint=\"amPmContainerNode\" \n\t\t\t\t\t\t\tdojoAttachEvent=\"onClick: onSetSelectedAmPm;\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td id=\"am\">${this.calendar.am}</td>\n\t\t\t\t\t\t\t\t<td id=\"pm\">${this.calendar.pm}</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t\t<td class=\"timeOptions\">\n\t\t\t\t\t<div dojoAttachPoint=\"anyTimeContainerNode\" \n\t\t\t\t\t\tdojoAttachEvent=\"onClick: onSetSelectedAnyTime;\" \n\t\t\t\t\t\tclass=\"anyTimeContainer\">${this.widgetStrings.any}</div>\n\t\t\t\t</td>\n\t\t\t\t<td class=\"cornerBottomRight\">&nbsp;</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n",templateCssString:"/*Time Picker */\n.timePickerContainer {\n\twidth:122px;\n\tfont-family:Tahoma, Myriad, Helvetica, Arial, Verdana, sans-serif;\n\tfont-size:16px;\n}\n\n.timeContainer {\n\tborder-collapse:collapse;\n\tborder-spacing:0;\n}\n\n.timeContainer thead {\n\tcolor:#293a4b;\n\tfont-size:0.9em;\n\tfont-weight:700;\n}\n\n.timeContainer thead td {\n\tpadding:0.25em;\n\tfont-size:0.80em;\n\tborder-bottom:1px solid #6782A8;\n}\n\n.timeCorner {\n\twidth:10px;\n}\n\n.cornerTopLeft {\n\tbackground: url(\"images/dpCurveTL.png\") top left no-repeat;\n}\n\n.cornerTopRight {\n\tbackground: url(\"images/dpCurveTR.png\") top right no-repeat;\n}\n\n.timeLabelContainer {\n\tbackground: url(\"images/dpMonthBg.png\") top left repeat-x;\n}\n\n.hours, .minutes, .timeBorder {\n\tbackground: #7591bc url(\"images/dpBg.gif\") top left repeat-x;\n\n}\n\n.hours td, .minutes td {\n\tpadding:0.2em;\n\ttext-align:center;\n\tfont-size:0.7em;\n\tfont-weight:bold;\n\tcursor:pointer;\n\tcursor:hand;\n\tcolor:#fff;\n}\n\n.minutes {\n\tborder-left:1px solid #f5d1db;\n}\n\n.hours {\n\tborder-right:1px solid #6782A8;\n}\n\n.hourSelector {\n\tborder-right:1px solid #6782A8;\n\tpadding:5px;\n\tpadding-right:10px;\n}\n\n.minutesSelector {\n\tpadding:5px;\n\tborder-left:1px solid #f5c7d4;\n\ttext-align:center;\n}\n\n.minutesHeading {\n\tpadding-left:9px !important;\n}\n\n.timeOptions {\n\tbackground-color:#F9C9D7;\n}\n\n.timeContainer .cornerBottomLeft, .timeContainer .cornerBottomRight, .timeContainer .timeOptions {\n\tborder-top:1px solid #6782A8;\n}\n\n.timeContainer .cornerBottomLeft {\n\tbackground: url(\"images/dpCurveBL.png\") bottom left no-repeat !important;\n\twidth:9px !important;\n\tpadding:0;\n\tmargin:0;\n}\n\n.timeContainer .cornerBottomRight {\n\tbackground: url(\"images/dpCurveBR.png\") bottom right no-repeat !important;\n\twidth:9px !important;\n\tpadding:0;\n\tmargin:0;\n}\n\n.timeOptions {\n\tcolor:#fff;\n\tbackground:url(\"images/dpYearBg.png\") top left repeat-x;\n\n}\n\n.selectedItem {\n\tbackground-color:#fff;\n\tcolor:#6782a8 !important;\n}\n\n.timeOptions .selectedItem {\n\tcolor:#fff !important;\n\tbackground-color:#9ec3fb !important;\n}\n\n.anyTimeContainer {\n\ttext-align:center;\n\tfont-weight:bold;\n\tfont-size:0.7em;\n\tpadding:0.1em;\n\tcursor:pointer;\n\tcursor:hand;\n\tcolor:#fff !important;\n}\n\n.amPmContainer {\n\twidth:100%;\n}\n\n.amPmContainer td {\n\ttext-align:center;\n\tfont-size:0.7em;\n\tfont-weight:bold;\n\tcursor:pointer;\n\tcursor:hand;\n\tcolor:#fff;\n}\n\n\n\n/*.timePickerContainer {\n\tmargin:1.75em 0 0.5em 0;\n\twidth:10em;\n\tfloat:left;\n}\n\n.timeContainer {\n\tborder-collapse:collapse;\n\tborder-spacing:0;\n}\n\n.timeContainer thead td{\n\tborder-bottom:1px solid #e6e6e6;\n\tpadding:0 0.4em 0.2em 0.4em;\n}\n\n.timeContainer td {\n\tfont-size:0.9em;\n\tpadding:0 0.25em 0 0.25em;\n\ttext-align:left;\n\tcursor:pointer;cursor:hand;\n}\n\n.timeContainer td.minutesHeading {\n\tborder-left:1px solid #e6e6e6;\n\tborder-right:1px solid #e6e6e6;\t\n}\n\n.timeContainer .minutes {\n\tborder-left:1px solid #e6e6e6;\n\tborder-right:1px solid #e6e6e6;\n}\n\n.selectedItem {\n\tbackground-color:#3a3a3a;\n\tcolor:#ffffff;\n}*/\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/TimePicker.css"),postMixInProperties:function(_1,_2){
-dojo.widget.TimePicker.superclass.postMixInProperties.apply(this,arguments);
-this.calendar=dojo.i18n.getLocalization("dojo.i18n.calendar","gregorian",this.lang);
-this.widgetStrings=dojo.i18n.getLocalization("dojo.widget","TimePicker",this.lang);
-},fillInTemplate:function(_3,_4){
-var _5=this.getFragNodeRef(_4);
-dojo.html.copyStyle(this.domNode,_5);
-if(_3.value){
-if(_3.value instanceof Date){
-this.storedTime=dojo.date.toRfc3339(_3.value);
-}else{
-this.storedTime=_3.value;
-}
-}
-this.initData();
-this.initUI();
-},initData:function(){
-if(this.storedTime.indexOf("T")!=-1&&this.storedTime.split("T")[1]&&this.storedTime!=" "&&this.storedTime.split("T")[1]!="any"){
-this.time=dojo.widget.TimePicker.util.fromRfcDateTime(this.storedTime,this.useDefaultMinutes,this.selectedTime.anyTime);
-}else{
-if(this.useDefaultTime){
-this.time=dojo.widget.TimePicker.util.fromRfcDateTime("",this.useDefaultMinutes,this.selectedTime.anyTime);
-}else{
-this.selectedTime.anyTime=true;
-this.time=dojo.widget.TimePicker.util.fromRfcDateTime("",0,1);
-}
-}
-},initUI:function(){
-if(!this.selectedTime.anyTime&&this.time){
-var _6=dojo.widget.TimePicker.util.toAmPmHour(this.time.getHours());
-var _7=_6[0];
-var _8=_6[1];
-var _9=this.time.getMinutes();
-var _a=parseInt(_9/5);
-this.onSetSelectedHour(this.hourIndexMap[_7]);
-this.onSetSelectedMinute(this.minuteIndexMap[_a]);
-this.onSetSelectedAmPm(_8);
-}else{
-this.onSetSelectedAnyTime();
-}
-},setTime:function(_b){
-if(_b){
-this.selectedTime.anyTime=false;
-this.setDateTime(dojo.date.toRfc3339(_b));
-}else{
-this.selectedTime.anyTime=true;
-}
-this.initData();
-this.initUI();
-},setDateTime:function(_c){
-this.storedTime=_c;
-},onClearSelectedHour:function(_d){
-this.clearSelectedHour();
-},onClearSelectedMinute:function(_e){
-this.clearSelectedMinute();
-},onClearSelectedAmPm:function(_f){
-this.clearSelectedAmPm();
-},onClearSelectedAnyTime:function(evt){
-this.clearSelectedAnyTime();
-if(this.selectedTime.anyTime){
-this.selectedTime.anyTime=false;
-this.time=dojo.widget.TimePicker.util.fromRfcDateTime("",this.useDefaultMinutes);
-this.initUI();
-}
-},clearSelectedHour:function(){
-var _11=this.hourContainerNode.getElementsByTagName("td");
-for(var i=0;i<_11.length;i++){
-dojo.html.setClass(_11.item(i),"");
-}
-},clearSelectedMinute:function(){
-var _13=this.minuteContainerNode.getElementsByTagName("td");
-for(var i=0;i<_13.length;i++){
-dojo.html.setClass(_13.item(i),"");
-}
-},clearSelectedAmPm:function(){
-var _15=this.amPmContainerNode.getElementsByTagName("td");
-for(var i=0;i<_15.length;i++){
-dojo.html.setClass(_15.item(i),"");
-}
-},clearSelectedAnyTime:function(){
-dojo.html.setClass(this.anyTimeContainerNode,"anyTimeContainer");
-},onSetSelectedHour:function(evt){
-this.onClearSelectedAnyTime();
-this.onClearSelectedHour();
-this.setSelectedHour(evt);
-this.onSetTime();
-},setSelectedHour:function(evt){
-if(evt&&evt.target){
-if(evt.target.nodeType==dojo.dom.ELEMENT_NODE){
-var _19=evt.target;
-}else{
-var _19=evt.target.parentNode;
-}
-dojo.event.browser.stopEvent(evt);
-dojo.html.setClass(_19,this.classNames.selectedTime);
-this.selectedTime["hour"]=_19.innerHTML;
-}else{
-if(!isNaN(evt)){
-var _1a=this.hourContainerNode.getElementsByTagName("td");
-if(_1a.item(evt)){
-dojo.html.setClass(_1a.item(evt),this.classNames.selectedTime);
-this.selectedTime["hour"]=_1a.item(evt).innerHTML;
-}
-}
-}
-this.selectedTime.anyTime=false;
-},onSetSelectedMinute:function(evt){
-this.onClearSelectedAnyTime();
-this.onClearSelectedMinute();
-this.setSelectedMinute(evt);
-this.selectedTime.anyTime=false;
-this.onSetTime();
-},setSelectedMinute:function(evt){
-if(evt&&evt.target){
-if(evt.target.nodeType==dojo.dom.ELEMENT_NODE){
-var _1d=evt.target;
-}else{
-var _1d=evt.target.parentNode;
-}
-dojo.event.browser.stopEvent(evt);
-dojo.html.setClass(_1d,this.classNames.selectedTime);
-this.selectedTime["minute"]=_1d.innerHTML;
-}else{
-if(!isNaN(evt)){
-var _1e=this.minuteContainerNode.getElementsByTagName("td");
-if(_1e.item(evt)){
-dojo.html.setClass(_1e.item(evt),this.classNames.selectedTime);
-this.selectedTime["minute"]=_1e.item(evt).innerHTML;
-}
-}
-}
-},onSetSelectedAmPm:function(evt){
-this.onClearSelectedAnyTime();
-this.onClearSelectedAmPm();
-this.setSelectedAmPm(evt);
-this.selectedTime.anyTime=false;
-this.onSetTime();
-},setSelectedAmPm:function(evt){
-var _21=evt.target;
-if(evt&&_21){
-if(_21.nodeType!=dojo.dom.ELEMENT_NODE){
-_21=_21.parentNode;
-}
-dojo.event.browser.stopEvent(evt);
-this.selectedTime.amPm=_21.id;
-dojo.html.setClass(_21,this.classNames.selectedTime);
-}else{
-evt=evt?0:1;
-var _22=this.amPmContainerNode.getElementsByTagName("td");
-if(_22.item(evt)){
-this.selectedTime.amPm=_22.item(evt).id;
-dojo.html.setClass(_22.item(evt),this.classNames.selectedTime);
-}
-}
-},onSetSelectedAnyTime:function(evt){
-this.onClearSelectedHour();
-this.onClearSelectedMinute();
-this.onClearSelectedAmPm();
-this.setSelectedAnyTime();
-this.onSetTime();
-},setSelectedAnyTime:function(evt){
-this.selectedTime.anyTime=true;
-dojo.html.setClass(this.anyTimeContainerNode,this.classNames.selectedTime+" "+"anyTimeContainer");
-},onClick:function(evt){
-dojo.event.browser.stopEvent(evt);
-},onSetTime:function(){
-if(this.selectedTime.anyTime){
-this.time=new Date();
-var _26=dojo.widget.TimePicker.util.toRfcDateTime(this.time);
-this.setDateTime(_26.split("T")[0]);
-}else{
-var _27=12;
-var _28=0;
-var _29=false;
-if(this.selectedTime["hour"]){
-_27=parseInt(this.selectedTime["hour"],10);
-}
-if(this.selectedTime["minute"]){
-_28=parseInt(this.selectedTime["minute"],10);
-}
-if(this.selectedTime["amPm"]){
-_29=(this.selectedTime["amPm"].toLowerCase()=="am");
-}
-this.time=new Date();
-this.time.setHours(dojo.widget.TimePicker.util.fromAmPmHour(_27,_29));
-this.time.setMinutes(_28);
-this.setDateTime(dojo.widget.TimePicker.util.toRfcDateTime(this.time));
-}
-this.onValueChanged(this.time);
-},onValueChanged:function(_2a){
-}});
-dojo.widget.TimePicker.util=new function(){
-this.toRfcDateTime=function(_2b){
-if(!_2b){
-_2b=new Date();
-}
-_2b.setSeconds(0);
-return dojo.date.strftime(_2b,"%Y-%m-%dT%H:%M:00%z");
-};
-this.fromRfcDateTime=function(_2c,_2d,_2e){
-var _2f=new Date();
-if(!_2c||_2c.indexOf("T")==-1){
-if(_2d){
-_2f.setMinutes(Math.floor(_2f.getMinutes()/5)*5);
-}else{
-_2f.setMinutes(0);
-}
-}else{
-var _30=_2c.split("T")[1].split(":");
-var _2f=new Date();
-_2f.setHours(_30[0]);
-_2f.setMinutes(_30[1]);
-}
-return _2f;
-};
-this.toAmPmHour=function(_31){
-var _32=_31;
-var _33=true;
-if(_32==0){
-_32=12;
-}else{
-if(_32>12){
-_32=_32-12;
-_33=false;
-}else{
-if(_32==12){
-_33=false;
-}
-}
-}
-return [_32,_33];
-};
-this.fromAmPmHour=function(_34,_35){
-var _36=parseInt(_34,10);
-if(_35&&_36==12){
-_36=0;
-}else{
-if(!_35&&_36<12){
-_36=_36+12;
-}
-}
-return _36;
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TitlePane.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TitlePane.js
deleted file mode 100644
index 41f8f0d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TitlePane.js
+++ /dev/null
@@ -1,30 +0,0 @@
-dojo.provide("dojo.widget.TitlePane");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.ContentPane");
-dojo.require("dojo.html.style");
-dojo.require("dojo.lfx.*");
-dojo.widget.defineWidget("dojo.widget.TitlePane",dojo.widget.ContentPane,{labelNodeClass:"",containerNodeClass:"",label:"",open:true,templateString:"<div dojoAttachPoint=\"domNode\">\n<div dojoAttachPoint=\"labelNode\" dojoAttachEvent=\"onclick: onLabelClick\"></div>\n<div dojoAttachPoint=\"containerNode\"></div>\n</div>\n",postCreate:function(){
-if(this.label){
-this.labelNode.appendChild(document.createTextNode(this.label));
-}
-if(this.labelNodeClass){
-dojo.html.addClass(this.labelNode,this.labelNodeClass);
-}
-if(this.containerNodeClass){
-dojo.html.addClass(this.containerNode,this.containerNodeClass);
-}
-if(!this.open){
-dojo.html.hide(this.containerNode);
-}
-dojo.widget.TitlePane.superclass.postCreate.apply(this,arguments);
-},onLabelClick:function(){
-if(this.open){
-dojo.lfx.wipeOut(this.containerNode,250).play();
-this.open=false;
-}else{
-dojo.lfx.wipeIn(this.containerNode,250).play();
-this.open=true;
-}
-},setLabel:function(_1){
-this.labelNode.innerHTML=_1;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Toaster.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Toaster.js
deleted file mode 100644
index 77e36e4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Toaster.js
+++ /dev/null
@@ -1,150 +0,0 @@
-dojo.provide("dojo.widget.Toaster");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.lfx.*");
-dojo.require("dojo.html.iframe");
-dojo.widget.defineWidget("dojo.widget.Toaster",dojo.widget.HtmlWidget,{templateString:"<div dojoAttachPoint=\"clipNode\"><div dojoAttachPoint=\"containerNode\" dojoAttachEvent=\"onClick:onSelect\"><div dojoAttachPoint=\"contentNode\"></div></div></div>",templateCssString:".dojoToasterClip {\n\tposition: absolute;\n\toverflow: hidden;\n}\n\n.dojoToasterContainer {\n\tdisplay: block;\n\tposition: absolute;\n\twidth: 17.5em;\n\tz-index: 5000;\n\tmargin: 0px;\n\tfont:0.75em Tahoma, Helvetica, Verdana, Arial;\n}\n\n.dojoToasterContent{\n\tpadding:1em;\n\tpadding-top:0.25em;\n\tbackground:#73c74a;\n}\n\n.dojoToasterMessage{ \n\tcolor:#fff;\n}\n.dojoToasterWarning{ }\n.dojoToasterError,\n.dojoToasterFatal{\n\tfont-weight:bold;\n\tcolor:#fff;\n}\n\n\n.dojoToasterWarning .dojoToasterContent{\n\tpadding:1em;\n\tpadding-top:0.25em;\n\tbackground:#d4d943;\n} \n\n.dojoToasterError .dojoToasterContent{\n\tpadding:1em;\n\tpadding-top:0.25em;\n\tbackground:#c46600;\n} \n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/Toaster.css"),messageTopic:"",messageTypes:{MESSAGE:"MESSAGE",WARNING:"WARNING",ERROR:"ERROR",FATAL:"FATAL"},defaultType:"MESSAGE",clipCssClass:"dojoToasterClip",containerCssClass:"dojoToasterContainer",contentCssClass:"dojoToasterContent",messageCssClass:"dojoToasterMessage",warningCssClass:"dojoToasterWarning",errorCssClass:"dojoToasterError",fatalCssClass:"dojoToasterFatal",positionDirection:"br-up",positionDirectionTypes:["br-up","br-left","bl-up","bl-right","tr-down","tr-left","tl-down","tl-right"],showDelay:2000,postCreate:function(){
-this.hide();
-dojo.html.setClass(this.clipNode,this.clipCssClass);
-dojo.html.addClass(this.containerNode,this.containerCssClass);
-dojo.html.setClass(this.contentNode,this.contentCssClass);
-if(this.messageTopic){
-dojo.event.topic.subscribe(this.messageTopic,this,"_handleMessage");
-}
-if(!this.positionDirection||!dojo.lang.inArray(this.positionDirectionTypes,this.positionDirection)){
-this.positionDirection=this.positionDirectionTypes.BRU;
-}
-},_handleMessage:function(_1){
-if(dojo.lang.isString(_1)){
-this.setContent(_1);
-}else{
-this.setContent(_1["message"],_1["type"],_1["delay"]);
-}
-},setContent:function(_2,_3,_4){
-var _4=_4||this.showDelay;
-if(this.slideAnim&&this.slideAnim.status()=="playing"){
-dojo.lang.setTimeout(50,dojo.lang.hitch(this,function(){
-this.setContent(_2,_3);
-}));
-return;
-}else{
-if(this.slideAnim){
-this.slideAnim.stop();
-if(this.fadeAnim){
-this.fadeAnim.stop();
-}
-}
-}
-if(!_2){
-dojo.debug(this.widgetId+".setContent() incoming content was null, ignoring.");
-return;
-}
-if(!this.positionDirection||!dojo.lang.inArray(this.positionDirectionTypes,this.positionDirection)){
-dojo.raise(this.widgetId+".positionDirection is an invalid value: "+this.positionDirection);
-}
-dojo.html.removeClass(this.containerNode,this.messageCssClass);
-dojo.html.removeClass(this.containerNode,this.warningCssClass);
-dojo.html.removeClass(this.containerNode,this.errorCssClass);
-dojo.html.removeClass(this.containerNode,this.fatalCssClass);
-dojo.html.clearOpacity(this.containerNode);
-if(_2 instanceof String||typeof _2=="string"){
-this.contentNode.innerHTML=_2;
-}else{
-if(dojo.html.isNode(_2)){
-this.contentNode.innerHTML=dojo.html.getContentAsString(_2);
-}else{
-dojo.raise("Toaster.setContent(): msg is of unknown type:"+_2);
-}
-}
-switch(_3){
-case this.messageTypes.WARNING:
-dojo.html.addClass(this.containerNode,this.warningCssClass);
-break;
-case this.messageTypes.ERROR:
-dojo.html.addClass(this.containerNode,this.errorCssClass);
-break;
-case this.messageTypes.FATAL:
-dojo.html.addClass(this.containerNode,this.fatalCssClass);
-break;
-case this.messageTypes.MESSAGE:
-default:
-dojo.html.addClass(this.containerNode,this.messageCssClass);
-break;
-}
-this.show();
-var _5=dojo.html.getMarginBox(this.containerNode);
-if(this.positionDirection.indexOf("-up")>=0){
-this.containerNode.style.left=0+"px";
-this.containerNode.style.top=_5.height+10+"px";
-}else{
-if(this.positionDirection.indexOf("-left")>=0){
-this.containerNode.style.left=_5.width+10+"px";
-this.containerNode.style.top=0+"px";
-}else{
-if(this.positionDirection.indexOf("-right")>=0){
-this.containerNode.style.left=0-_5.width-10+"px";
-this.containerNode.style.top=0+"px";
-}else{
-if(this.positionDirection.indexOf("-down")>=0){
-this.containerNode.style.left=0+"px";
-this.containerNode.style.top=0-_5.height-10+"px";
-}else{
-dojo.raise(this.widgetId+".positionDirection is an invalid value: "+this.positionDirection);
-}
-}
-}
-}
-this.slideAnim=dojo.lfx.html.slideTo(this.containerNode,{top:0,left:0},450,null,dojo.lang.hitch(this,function(_6,_7){
-dojo.lang.setTimeout(dojo.lang.hitch(this,function(_8){
-if(this.bgIframe){
-this.bgIframe.hide();
-}
-this.fadeAnim=dojo.lfx.html.fadeOut(this.containerNode,1000,null,dojo.lang.hitch(this,function(_9){
-this.hide();
-})).play();
-}),_4);
-})).play();
-},_placeClip:function(){
-var _a=dojo.html.getScroll();
-var _b=dojo.html.getViewport();
-var _c=dojo.html.getMarginBox(this.containerNode);
-this.clipNode.style.height=_c.height+"px";
-this.clipNode.style.width=_c.width+"px";
-if(this.positionDirection.match(/^t/)){
-this.clipNode.style.top=_a.top+"px";
-}else{
-if(this.positionDirection.match(/^b/)){
-this.clipNode.style.top=(_b.height-_c.height-2+_a.top)+"px";
-}
-}
-if(this.positionDirection.match(/^[tb]r-/)){
-this.clipNode.style.left=(_b.width-_c.width-1-_a.left)+"px";
-}else{
-if(this.positionDirection.match(/^[tb]l-/)){
-this.clipNode.style.left=0+"px";
-}
-}
-this.clipNode.style.clip="rect(0px, "+_c.width+"px, "+_c.height+"px, 0px)";
-if(dojo.render.html.ie){
-if(!this.bgIframe){
-this.bgIframe=new dojo.html.BackgroundIframe(this.containerNode);
-this.bgIframe.setZIndex(this.containerNode);
-}
-this.bgIframe.onResized();
-this.bgIframe.show();
-}
-},onSelect:function(e){
-},show:function(){
-dojo.widget.Toaster.superclass.show.call(this);
-this._placeClip();
-if(!this._scrollConnected){
-this._scrollConnected=true;
-dojo.event.connect(window,"onscroll",this,"_placeClip");
-}
-},hide:function(){
-dojo.widget.Toaster.superclass.hide.call(this);
-if(this._scrollConnected){
-this._scrollConnected=false;
-dojo.event.disconnect(window,"onscroll",this,"_placeClip");
-}
-dojo.html.setOpacity(this.containerNode,1);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Toggler.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Toggler.js
deleted file mode 100644
index fc7a883..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Toggler.js
+++ /dev/null
@@ -1,13 +0,0 @@
-dojo.provide("dojo.widget.Toggler");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-dojo.widget.defineWidget("dojo.widget.Toggler",dojo.widget.HtmlWidget,{targetId:"",fillInTemplate:function(){
-dojo.event.connect(this.domNode,"onclick",this,"onClick");
-},onClick:function(){
-var _1=dojo.widget.byId(this.targetId);
-if(!_1){
-return;
-}
-_1.explodeSrc=this.domNode;
-_1.toggleShowing();
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Toolbar.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Toolbar.js
deleted file mode 100644
index 75c8225..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Toolbar.js
+++ /dev/null
@@ -1,711 +0,0 @@
-dojo.provide("dojo.widget.Toolbar");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.html.style");
-dojo.widget.defineWidget("dojo.widget.ToolbarContainer",dojo.widget.HtmlWidget,{isContainer:true,templateString:"<div class=\"toolbarContainer\" dojoAttachPoint=\"containerNode\"></div>",templateCssString:".toolbarContainer {\n\tborder-bottom : 0;\n\tbackground-color : #def;\n\tcolor : ButtonText;\n\tfont : Menu;\n\tbackground-image: url(images/toolbar-bg.gif);\n}\n\n.toolbar {\n\tpadding : 2px 4px;\n\tmin-height : 26px;\n\t_height : 26px;\n}\n\n.toolbarItem {\n\tfloat : left;\n\tpadding : 1px 2px;\n\tmargin : 0 2px 1px 0;\n\tcursor : pointer;\n}\n\n.toolbarItem.selected, .toolbarItem.down {\n\tmargin : 1px 1px 0 1px;\n\tpadding : 0px 1px;\n\tborder : 1px solid #bbf;\n\tbackground-color : #fafaff;\n}\n\n.toolbarButton img {\n\tvertical-align : bottom;\n}\n\n.toolbarButton span {\n\tline-height : 16px;\n\tvertical-align : middle;\n}\n\n.toolbarButton.hover {\n\tpadding : 0px 1px;\n\tborder : 1px solid #99c;\n}\n\n.toolbarItem.disabled {\n\topacity : 0.3;\n\tfilter : alpha(opacity=30);\n\tcursor : default;\n}\n\n.toolbarSeparator {\n\tcursor : default;\n}\n\n.toolbarFlexibleSpace {\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/Toolbar.css"),getItem:function(_1){
-if(_1 instanceof dojo.widget.ToolbarItem){
-return _1;
-}
-for(var i=0;i<this.children.length;i++){
-var _3=this.children[i];
-if(_3 instanceof dojo.widget.Toolbar){
-var _4=_3.getItem(_1);
-if(_4){
-return _4;
-}
-}
-}
-return null;
-},getItems:function(){
-var _5=[];
-for(var i=0;i<this.children.length;i++){
-var _7=this.children[i];
-if(_7 instanceof dojo.widget.Toolbar){
-_5=_5.concat(_7.getItems());
-}
-}
-return _5;
-},enable:function(){
-for(var i=0;i<this.children.length;i++){
-var _9=this.children[i];
-if(_9 instanceof dojo.widget.Toolbar){
-_9.enable.apply(_9,arguments);
-}
-}
-},disable:function(){
-for(var i=0;i<this.children.length;i++){
-var _b=this.children[i];
-if(_b instanceof dojo.widget.Toolbar){
-_b.disable.apply(_b,arguments);
-}
-}
-},select:function(_c){
-for(var i=0;i<this.children.length;i++){
-var _e=this.children[i];
-if(_e instanceof dojo.widget.Toolbar){
-_e.select(arguments);
-}
-}
-},deselect:function(_f){
-for(var i=0;i<this.children.length;i++){
-var _11=this.children[i];
-if(_11 instanceof dojo.widget.Toolbar){
-_11.deselect(arguments);
-}
-}
-},getItemsState:function(){
-var _12={};
-for(var i=0;i<this.children.length;i++){
-var _14=this.children[i];
-if(_14 instanceof dojo.widget.Toolbar){
-dojo.lang.mixin(_12,_14.getItemsState());
-}
-}
-return _12;
-},getItemsActiveState:function(){
-var _15={};
-for(var i=0;i<this.children.length;i++){
-var _17=this.children[i];
-if(_17 instanceof dojo.widget.Toolbar){
-dojo.lang.mixin(_15,_17.getItemsActiveState());
-}
-}
-return _15;
-},getItemsSelectedState:function(){
-var _18={};
-for(var i=0;i<this.children.length;i++){
-var _1a=this.children[i];
-if(_1a instanceof dojo.widget.Toolbar){
-dojo.lang.mixin(_18,_1a.getItemsSelectedState());
-}
-}
-return _18;
-}});
-dojo.widget.defineWidget("dojo.widget.Toolbar",dojo.widget.HtmlWidget,{isContainer:true,templateString:"<div class=\"toolbar\" dojoAttachPoint=\"containerNode\" unselectable=\"on\" dojoOnMouseover=\"_onmouseover\" dojoOnMouseout=\"_onmouseout\" dojoOnClick=\"_onclick\" dojoOnMousedown=\"_onmousedown\" dojoOnMouseup=\"_onmouseup\"></div>",_getItem:function(_1b){
-var _1c=new Date();
-var _1d=null;
-while(_1b&&_1b!=this.domNode){
-if(dojo.html.hasClass(_1b,"toolbarItem")){
-var _1e=dojo.widget.manager.getWidgetsByFilter(function(w){
-return w.domNode==_1b;
-});
-if(_1e.length==1){
-_1d=_1e[0];
-break;
-}else{
-if(_1e.length>1){
-dojo.raise("Toolbar._getItem: More than one widget matches the node");
-}
-}
-}
-_1b=_1b.parentNode;
-}
-return _1d;
-},_onmouseover:function(e){
-var _21=this._getItem(e.target);
-if(_21&&_21._onmouseover){
-_21._onmouseover(e);
-}
-},_onmouseout:function(e){
-var _23=this._getItem(e.target);
-if(_23&&_23._onmouseout){
-_23._onmouseout(e);
-}
-},_onclick:function(e){
-var _25=this._getItem(e.target);
-if(_25&&_25._onclick){
-_25._onclick(e);
-}
-},_onmousedown:function(e){
-var _27=this._getItem(e.target);
-if(_27&&_27._onmousedown){
-_27._onmousedown(e);
-}
-},_onmouseup:function(e){
-var _29=this._getItem(e.target);
-if(_29&&_29._onmouseup){
-_29._onmouseup(e);
-}
-},addChild:function(_2a,pos,_2c){
-var _2d=dojo.widget.ToolbarItem.make(_2a,null,_2c);
-var ret=dojo.widget.Toolbar.superclass.addChild.call(this,_2d,null,pos,null);
-return ret;
-},push:function(){
-for(var i=0;i<arguments.length;i++){
-this.addChild(arguments[i]);
-}
-},getItem:function(_30){
-if(_30 instanceof dojo.widget.ToolbarItem){
-return _30;
-}
-for(var i=0;i<this.children.length;i++){
-var _32=this.children[i];
-if(_32 instanceof dojo.widget.ToolbarItem&&_32._name==_30){
-return _32;
-}
-}
-return null;
-},getItems:function(){
-var _33=[];
-for(var i=0;i<this.children.length;i++){
-var _35=this.children[i];
-if(_35 instanceof dojo.widget.ToolbarItem){
-_33.push(_35);
-}
-}
-return _33;
-},getItemsState:function(){
-var _36={};
-for(var i=0;i<this.children.length;i++){
-var _38=this.children[i];
-if(_38 instanceof dojo.widget.ToolbarItem){
-_36[_38._name]={selected:_38._selected,enabled:!_38.disabled};
-}
-}
-return _36;
-},getItemsActiveState:function(){
-var _39=this.getItemsState();
-for(var _3a in _39){
-_39[_3a]=_39[_3a].enabled;
-}
-return _39;
-},getItemsSelectedState:function(){
-var _3b=this.getItemsState();
-for(var _3c in _3b){
-_3b[_3c]=_3b[_3c].selected;
-}
-return _3b;
-},enable:function(){
-var _3d=arguments.length?arguments:this.children;
-for(var i=0;i<_3d.length;i++){
-var _3f=this.getItem(_3d[i]);
-if(_3f instanceof dojo.widget.ToolbarItem){
-_3f.enable(false,true);
-}
-}
-},disable:function(){
-var _40=arguments.length?arguments:this.children;
-for(var i=0;i<_40.length;i++){
-var _42=this.getItem(_40[i]);
-if(_42 instanceof dojo.widget.ToolbarItem){
-_42.disable();
-}
-}
-},select:function(){
-for(var i=0;i<arguments.length;i++){
-var _44=arguments[i];
-var _45=this.getItem(_44);
-if(_45){
-_45.select();
-}
-}
-},deselect:function(){
-for(var i=0;i<arguments.length;i++){
-var _47=arguments[i];
-var _48=this.getItem(_47);
-if(_48){
-_48.disable();
-}
-}
-},setValue:function(){
-for(var i=0;i<arguments.length;i+=2){
-var _4a=arguments[i],_4b=arguments[i+1];
-var _4c=this.getItem(_4a);
-if(_4c){
-if(_4c instanceof dojo.widget.ToolbarItem){
-_4c.setValue(_4b);
-}
-}
-}
-}});
-dojo.widget.defineWidget("dojo.widget.ToolbarItem",dojo.widget.HtmlWidget,{templateString:"<span unselectable=\"on\" class=\"toolbarItem\"></span>",_name:null,getName:function(){
-return this._name;
-},setName:function(_4d){
-return (this._name=_4d);
-},getValue:function(){
-return this.getName();
-},setValue:function(_4e){
-return this.setName(_4e);
-},_selected:false,isSelected:function(){
-return this._selected;
-},setSelected:function(is,_50,_51){
-if(!this._toggleItem&&!_50){
-return;
-}
-is=Boolean(is);
-if(_50||!this.disabled&&this._selected!=is){
-this._selected=is;
-this.update();
-if(!_51){
-this._fireEvent(is?"onSelect":"onDeselect");
-this._fireEvent("onChangeSelect");
-}
-}
-},select:function(_52,_53){
-return this.setSelected(true,_52,_53);
-},deselect:function(_54,_55){
-return this.setSelected(false,_54,_55);
-},_toggleItem:false,isToggleItem:function(){
-return this._toggleItem;
-},setToggleItem:function(_56){
-this._toggleItem=Boolean(_56);
-},toggleSelected:function(_57){
-return this.setSelected(!this._selected,_57);
-},isEnabled:function(){
-return !this.disabled;
-},setEnabled:function(is,_59,_5a){
-is=Boolean(is);
-if(_59||this.disabled==is){
-this.disabled=!is;
-this.update();
-if(!_5a){
-this._fireEvent(this.disabled?"onDisable":"onEnable");
-this._fireEvent("onChangeEnabled");
-}
-}
-return !this.disabled;
-},enable:function(_5b,_5c){
-return this.setEnabled(true,_5b,_5c);
-},disable:function(_5d,_5e){
-return this.setEnabled(false,_5d,_5e);
-},toggleEnabled:function(_5f,_60){
-return this.setEnabled(this.disabled,_5f,_60);
-},_icon:null,getIcon:function(){
-return this._icon;
-},setIcon:function(_61){
-var _62=dojo.widget.Icon.make(_61);
-if(this._icon){
-this._icon.setIcon(_62);
-}else{
-this._icon=_62;
-}
-var _63=this._icon.getNode();
-if(_63.parentNode!=this.domNode){
-if(this.domNode.hasChildNodes()){
-this.domNode.insertBefore(_63,this.domNode.firstChild);
-}else{
-this.domNode.appendChild(_63);
-}
-}
-return this._icon;
-},_label:"",getLabel:function(){
-return this._label;
-},setLabel:function(_64){
-var ret=(this._label=_64);
-if(!this.labelNode){
-this.labelNode=document.createElement("span");
-this.domNode.appendChild(this.labelNode);
-}
-this.labelNode.innerHTML="";
-this.labelNode.appendChild(document.createTextNode(this._label));
-this.update();
-return ret;
-},update:function(){
-if(this.disabled){
-this._selected=false;
-dojo.html.addClass(this.domNode,"disabled");
-dojo.html.removeClass(this.domNode,"down");
-dojo.html.removeClass(this.domNode,"hover");
-}else{
-dojo.html.removeClass(this.domNode,"disabled");
-if(this._selected){
-dojo.html.addClass(this.domNode,"selected");
-}else{
-dojo.html.removeClass(this.domNode,"selected");
-}
-}
-this._updateIcon();
-},_updateIcon:function(){
-if(this._icon){
-if(this.disabled){
-this._icon.disable();
-}else{
-if(this._cssHover){
-this._icon.hover();
-}else{
-if(this._selected){
-this._icon.select();
-}else{
-this._icon.enable();
-}
-}
-}
-}
-},_fireEvent:function(evt){
-if(typeof this[evt]=="function"){
-var _67=[this];
-for(var i=1;i<arguments.length;i++){
-_67.push(arguments[i]);
-}
-this[evt].apply(this,_67);
-}
-},_onmouseover:function(e){
-if(this.disabled){
-return;
-}
-dojo.html.addClass(this.domNode,"hover");
-this._fireEvent("onMouseOver");
-},_onmouseout:function(e){
-dojo.html.removeClass(this.domNode,"hover");
-dojo.html.removeClass(this.domNode,"down");
-if(!this._selected){
-dojo.html.removeClass(this.domNode,"selected");
-}
-this._fireEvent("onMouseOut");
-},_onclick:function(e){
-if(!this.disabled&&!this._toggleItem){
-this._fireEvent("onClick");
-}
-},_onmousedown:function(e){
-if(e.preventDefault){
-e.preventDefault();
-}
-if(this.disabled){
-return;
-}
-dojo.html.addClass(this.domNode,"down");
-if(this._toggleItem){
-if(this.parent.preventDeselect&&this._selected){
-return;
-}
-this.toggleSelected();
-}
-this._fireEvent("onMouseDown");
-},_onmouseup:function(e){
-dojo.html.removeClass(this.domNode,"down");
-this._fireEvent("onMouseUp");
-},onClick:function(){
-},onMouseOver:function(){
-},onMouseOut:function(){
-},onMouseDown:function(){
-},onMouseUp:function(){
-},fillInTemplate:function(_6e,_6f){
-if(_6e.name){
-this._name=_6e.name;
-}
-if(_6e.selected){
-this.select();
-}
-if(_6e.disabled){
-this.disable();
-}
-if(_6e.label){
-this.setLabel(_6e.label);
-}
-if(_6e.icon){
-this.setIcon(_6e.icon);
-}
-if(_6e.toggleitem||_6e.toggleItem){
-this.setToggleItem(true);
-}
-}});
-dojo.widget.ToolbarItem.make=function(wh,_71,_72){
-var _73=null;
-if(wh instanceof Array){
-_73=dojo.widget.createWidget("ToolbarButtonGroup",_72);
-_73.setName(wh[0]);
-for(var i=1;i<wh.length;i++){
-_73.addChild(wh[i]);
-}
-}else{
-if(wh instanceof dojo.widget.ToolbarItem){
-_73=wh;
-}else{
-if(wh instanceof dojo.uri.Uri){
-_73=dojo.widget.createWidget("ToolbarButton",dojo.lang.mixin(_72||{},{icon:new dojo.widget.Icon(wh.toString())}));
-}else{
-if(_71){
-_73=dojo.widget.createWidget(wh,_72);
-}else{
-if(typeof wh=="string"||wh instanceof String){
-switch(wh.charAt(0)){
-case "|":
-case "-":
-case "/":
-_73=dojo.widget.createWidget("ToolbarSeparator",_72);
-break;
-case " ":
-if(wh.length==1){
-_73=dojo.widget.createWidget("ToolbarSpace",_72);
-}else{
-_73=dojo.widget.createWidget("ToolbarFlexibleSpace",_72);
-}
-break;
-default:
-if(/\.(gif|jpg|jpeg|png)$/i.test(wh)){
-_73=dojo.widget.createWidget("ToolbarButton",dojo.lang.mixin(_72||{},{icon:new dojo.widget.Icon(wh.toString())}));
-}else{
-_73=dojo.widget.createWidget("ToolbarButton",dojo.lang.mixin(_72||{},{label:wh.toString()}));
-}
-}
-}else{
-if(wh&&wh.tagName&&/^img$/i.test(wh.tagName)){
-_73=dojo.widget.createWidget("ToolbarButton",dojo.lang.mixin(_72||{},{icon:wh}));
-}else{
-_73=dojo.widget.createWidget("ToolbarButton",dojo.lang.mixin(_72||{},{label:wh.toString()}));
-}
-}
-}
-}
-}
-}
-return _73;
-};
-dojo.widget.defineWidget("dojo.widget.ToolbarButtonGroup",dojo.widget.ToolbarItem,{isContainer:true,templateString:"<span unselectable=\"on\" class=\"toolbarButtonGroup\" dojoAttachPoint=\"containerNode\"></span>",defaultButton:"",postCreate:function(){
-for(var i=0;i<this.children.length;i++){
-this._injectChild(this.children[i]);
-}
-},addChild:function(_76,pos,_78){
-var _79=dojo.widget.ToolbarItem.make(_76,null,dojo.lang.mixin(_78||{},{toggleItem:true}));
-var ret=dojo.widget.ToolbarButtonGroup.superclass.addChild.call(this,_79,null,pos,null);
-this._injectChild(_79);
-return ret;
-},_injectChild:function(_7b){
-dojo.event.connect(_7b,"onSelect",this,"onChildSelected");
-dojo.event.connect(_7b,"onDeselect",this,"onChildDeSelected");
-if(_7b._name==this.defaultButton||(typeof this.defaultButton=="number"&&this.children.length-1==this.defaultButton)){
-_7b.select(false,true);
-}
-},getItem:function(_7c){
-if(_7c instanceof dojo.widget.ToolbarItem){
-return _7c;
-}
-for(var i=0;i<this.children.length;i++){
-var _7e=this.children[i];
-if(_7e instanceof dojo.widget.ToolbarItem&&_7e._name==_7c){
-return _7e;
-}
-}
-return null;
-},getItems:function(){
-var _7f=[];
-for(var i=0;i<this.children.length;i++){
-var _81=this.children[i];
-if(_81 instanceof dojo.widget.ToolbarItem){
-_7f.push(_81);
-}
-}
-return _7f;
-},onChildSelected:function(e){
-this.select(e._name);
-},onChildDeSelected:function(e){
-this._fireEvent("onChangeSelect",this._value);
-},enable:function(_84,_85){
-for(var i=0;i<this.children.length;i++){
-var _87=this.children[i];
-if(_87 instanceof dojo.widget.ToolbarItem){
-_87.enable(_84,_85);
-if(_87._name==this._value){
-_87.select(_84,_85);
-}
-}
-}
-},disable:function(_88,_89){
-for(var i=0;i<this.children.length;i++){
-var _8b=this.children[i];
-if(_8b instanceof dojo.widget.ToolbarItem){
-_8b.disable(_88,_89);
-}
-}
-},_value:"",getValue:function(){
-return this._value;
-},select:function(_8c,_8d,_8e){
-for(var i=0;i<this.children.length;i++){
-var _90=this.children[i];
-if(_90 instanceof dojo.widget.ToolbarItem){
-if(_90._name==_8c){
-_90.select(_8d,_8e);
-this._value=_8c;
-}else{
-_90.deselect(true,true);
-}
-}
-}
-if(!_8e){
-this._fireEvent("onSelect",this._value);
-this._fireEvent("onChangeSelect",this._value);
-}
-},setValue:this.select,preventDeselect:false});
-dojo.widget.defineWidget("dojo.widget.ToolbarButton",dojo.widget.ToolbarItem,{fillInTemplate:function(_91,_92){
-dojo.widget.ToolbarButton.superclass.fillInTemplate.call(this,_91,_92);
-dojo.html.addClass(this.domNode,"toolbarButton");
-if(this._icon){
-this.setIcon(this._icon);
-}
-if(this._label){
-this.setLabel(this._label);
-}
-if(!this._name){
-if(this._label){
-this.setName(this._label);
-}else{
-if(this._icon){
-var src=this._icon.getSrc("enabled").match(/[\/^]([^\.\/]+)\.(gif|jpg|jpeg|png)$/i);
-if(src){
-this.setName(src[1]);
-}
-}else{
-this._name=this._widgetId;
-}
-}
-}
-}});
-dojo.widget.defineWidget("dojo.widget.ToolbarDialog",dojo.widget.ToolbarButton,{fillInTemplate:function(_94,_95){
-dojo.widget.ToolbarDialog.superclass.fillInTemplate.call(this,_94,_95);
-dojo.event.connect(this,"onSelect",this,"showDialog");
-dojo.event.connect(this,"onDeselect",this,"hideDialog");
-},showDialog:function(e){
-dojo.lang.setTimeout(dojo.event.connect,1,document,"onmousedown",this,"deselect");
-},hideDialog:function(e){
-dojo.event.disconnect(document,"onmousedown",this,"deselect");
-}});
-dojo.widget.defineWidget("dojo.widget.ToolbarMenu",dojo.widget.ToolbarDialog,{});
-dojo.widget.ToolbarMenuItem=function(){
-};
-dojo.widget.defineWidget("dojo.widget.ToolbarSeparator",dojo.widget.ToolbarItem,{templateString:"<span unselectable=\"on\" class=\"toolbarItem toolbarSeparator\"></span>",defaultIconPath:new dojo.uri.moduleUri("dojo.widget","templates/buttons/sep.gif"),fillInTemplate:function(_98,_99,_9a){
-dojo.widget.ToolbarSeparator.superclass.fillInTemplate.call(this,_98,_99);
-this._name=this.widgetId;
-if(!_9a){
-if(!this._icon){
-this.setIcon(this.defaultIconPath);
-}
-this.domNode.appendChild(this._icon.getNode());
-}
-},_onmouseover:null,_onmouseout:null,_onclick:null,_onmousedown:null,_onmouseup:null});
-dojo.widget.defineWidget("dojo.widget.ToolbarSpace",dojo.widget.ToolbarSeparator,{fillInTemplate:function(_9b,_9c,_9d){
-dojo.widget.ToolbarSpace.superclass.fillInTemplate.call(this,_9b,_9c,true);
-if(!_9d){
-dojo.html.addClass(this.domNode,"toolbarSpace");
-}
-}});
-dojo.widget.defineWidget("dojo.widget.ToolbarSelect",dojo.widget.ToolbarItem,{templateString:"<span class=\"toolbarItem toolbarSelect\" unselectable=\"on\"><select dojoAttachPoint=\"selectBox\" dojoOnChange=\"changed\"></select></span>",fillInTemplate:function(_9e,_9f){
-dojo.widget.ToolbarSelect.superclass.fillInTemplate.call(this,_9e,_9f,true);
-var _a0=_9e.values;
-var i=0;
-for(var val in _a0){
-var opt=document.createElement("option");
-opt.setAttribute("value",_a0[val]);
-opt.innerHTML=val;
-this.selectBox.appendChild(opt);
-}
-},changed:function(e){
-this._fireEvent("onSetValue",this.selectBox.value);
-},setEnabled:function(is,_a6,_a7){
-var ret=dojo.widget.ToolbarSelect.superclass.setEnabled.call(this,is,_a6,_a7);
-this.selectBox.disabled=this.disabled;
-return ret;
-},_onmouseover:null,_onmouseout:null,_onclick:null,_onmousedown:null,_onmouseup:null});
-dojo.widget.Icon=function(_a9,_aa,_ab,_ac){
-if(!arguments.length){
-throw new Error("Icon must have at least an enabled state");
-}
-var _ad=["enabled","disabled","hovered","selected"];
-var _ae="enabled";
-var _af=document.createElement("img");
-this.getState=function(){
-return _ae;
-};
-this.setState=function(_b0){
-if(dojo.lang.inArray(_ad,_b0)){
-if(this[_b0]){
-_ae=_b0;
-var img=this[_ae];
-if((dojo.render.html.ie55||dojo.render.html.ie60)&&img.src&&img.src.match(/[.]png$/i)){
-_af.width=img.width||img.offsetWidth;
-_af.height=img.height||img.offsetHeight;
-_af.setAttribute("src",dojo.uri.moduleUri("dojo.widget","templates/images/blank.gif").uri);
-_af.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img.src+"',sizingMethod='image')";
-}else{
-_af.setAttribute("src",img.src);
-}
-}
-}else{
-throw new Error("Invalid state set on Icon (state: "+_b0+")");
-}
-};
-this.setSrc=function(_b2,_b3){
-if(/^img$/i.test(_b3.tagName)){
-this[_b2]=_b3;
-}else{
-if(typeof _b3=="string"||_b3 instanceof String||_b3 instanceof dojo.uri.Uri){
-this[_b2]=new Image();
-this[_b2].src=_b3.toString();
-}
-}
-return this[_b2];
-};
-this.setIcon=function(_b4){
-for(var i=0;i<_ad.length;i++){
-if(_b4[_ad[i]]){
-this.setSrc(_ad[i],_b4[_ad[i]]);
-}
-}
-this.update();
-};
-this.enable=function(){
-this.setState("enabled");
-};
-this.disable=function(){
-this.setState("disabled");
-};
-this.hover=function(){
-this.setState("hovered");
-};
-this.select=function(){
-this.setState("selected");
-};
-this.getSize=function(){
-return {width:_af.width||_af.offsetWidth,height:_af.height||_af.offsetHeight};
-};
-this.setSize=function(w,h){
-_af.width=w;
-_af.height=h;
-return {width:w,height:h};
-};
-this.getNode=function(){
-return _af;
-};
-this.getSrc=function(_b8){
-if(_b8){
-return this[_b8].src;
-}
-return _af.src||"";
-};
-this.update=function(){
-this.setState(_ae);
-};
-for(var i=0;i<_ad.length;i++){
-var arg=arguments[i];
-var _bb=_ad[i];
-this[_bb]=null;
-if(!arg){
-continue;
-}
-this.setSrc(_bb,arg);
-}
-this.enable();
-};
-dojo.widget.Icon.make=function(a,b,c,d){
-for(var i=0;i<arguments.length;i++){
-if(arguments[i] instanceof dojo.widget.Icon){
-return arguments[i];
-}
-}
-return new dojo.widget.Icon(a,b,c,d);
-};
-dojo.widget.defineWidget("dojo.widget.ToolbarColorDialog",dojo.widget.ToolbarDialog,{palette:"7x10",fillInTemplate:function(_c1,_c2){
-dojo.widget.ToolbarColorDialog.superclass.fillInTemplate.call(this,_c1,_c2);
-this.dialog=dojo.widget.createWidget("ColorPalette",{palette:this.palette});
-this.dialog.domNode.style.position="absolute";
-dojo.event.connect(this.dialog,"onColorSelect",this,"_setValue");
-},_setValue:function(_c3){
-this._value=_c3;
-this._fireEvent("onSetValue",_c3);
-},showDialog:function(e){
-dojo.widget.ToolbarColorDialog.superclass.showDialog.call(this,e);
-var abs=dojo.html.getAbsolutePosition(this.domNode,true);
-var y=abs.y+dojo.html.getBorderBox(this.domNode).height;
-this.dialog.showAt(abs.x,y);
-},hideDialog:function(e){
-dojo.widget.ToolbarColorDialog.superclass.hideDialog.call(this,e);
-this.dialog.hide();
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Tooltip.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Tooltip.js
deleted file mode 100644
index cd0ca6f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Tooltip.js
+++ /dev/null
@@ -1,94 +0,0 @@
-dojo.provide("dojo.widget.Tooltip");
-dojo.require("dojo.widget.ContentPane");
-dojo.require("dojo.widget.PopupContainer");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.util");
-dojo.widget.defineWidget("dojo.widget.Tooltip",[dojo.widget.ContentPane,dojo.widget.PopupContainerBase],{caption:"",showDelay:500,hideDelay:100,connectId:"",templateCssString:".dojoTooltip {\n\tborder: solid black 1px;\n\tbackground: beige;\n\tcolor: black;\n\tposition: absolute;\n\tfont-size: small;\n\tpadding: 2px 2px 2px 2px;\n\tz-index: 10;\n\tdisplay: block;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/TooltipTemplate.css"),fillInTemplate:function(_1,_2){
-if(this.caption!=""){
-this.domNode.appendChild(document.createTextNode(this.caption));
-}
-this._connectNode=dojo.byId(this.connectId);
-dojo.widget.Tooltip.superclass.fillInTemplate.call(this,_1,_2);
-this.addOnLoad(this,"_loadedContent");
-dojo.html.addClass(this.domNode,"dojoTooltip");
-var _3=this.getFragNodeRef(_2);
-dojo.html.copyStyle(this.domNode,_3);
-this.applyPopupBasicStyle();
-},postCreate:function(_4,_5){
-dojo.event.connect(this._connectNode,"onmouseover",this,"_onMouseOver");
-dojo.widget.Tooltip.superclass.postCreate.call(this,_4,_5);
-},_onMouseOver:function(e){
-this._mouse={x:e.pageX,y:e.pageY};
-if(!this._tracking){
-dojo.event.connect(document.documentElement,"onmousemove",this,"_onMouseMove");
-this._tracking=true;
-}
-this._onHover(e);
-},_onMouseMove:function(e){
-this._mouse={x:e.pageX,y:e.pageY};
-if(dojo.html.overElement(this._connectNode,e)||dojo.html.overElement(this.domNode,e)){
-this._onHover(e);
-}else{
-this._onUnHover(e);
-}
-},_onHover:function(e){
-if(this._hover){
-return;
-}
-this._hover=true;
-if(this._hideTimer){
-clearTimeout(this._hideTimer);
-delete this._hideTimer;
-}
-if(!this.isShowingNow&&!this._showTimer){
-this._showTimer=setTimeout(dojo.lang.hitch(this,"open"),this.showDelay);
-}
-},_onUnHover:function(e){
-if(!this._hover){
-return;
-}
-this._hover=false;
-if(this._showTimer){
-clearTimeout(this._showTimer);
-delete this._showTimer;
-}
-if(this.isShowingNow&&!this._hideTimer){
-this._hideTimer=setTimeout(dojo.lang.hitch(this,"close"),this.hideDelay);
-}
-if(!this.isShowingNow){
-dojo.event.disconnect(document.documentElement,"onmousemove",this,"_onMouseMove");
-this._tracking=false;
-}
-},open:function(){
-if(this.isShowingNow){
-return;
-}
-dojo.widget.PopupContainerBase.prototype.open.call(this,this._mouse.x,this._mouse.y,null,[this._mouse.x,this._mouse.y],"TL,TR,BL,BR",[10,15]);
-},close:function(){
-if(this.isShowingNow){
-if(this._showTimer){
-clearTimeout(this._showTimer);
-delete this._showTimer;
-}
-if(this._hideTimer){
-clearTimeout(this._hideTimer);
-delete this._hideTimer;
-}
-dojo.event.disconnect(document.documentElement,"onmousemove",this,"_onMouseMove");
-this._tracking=false;
-dojo.widget.PopupContainerBase.prototype.close.call(this);
-}
-},_position:function(){
-this.move(this._mouse.x,this._mouse.y,[10,15],"TL,TR,BL,BR");
-},_loadedContent:function(){
-if(this.isShowingNow){
-this._position();
-}
-},checkSize:function(){
-},uninitialize:function(){
-this.close();
-dojo.event.disconnect(this._connectNode,"onmouseover",this,"_onMouseOver");
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Tree.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Tree.js
deleted file mode 100644
index ea534cc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Tree.js
+++ /dev/null
@@ -1,223 +0,0 @@
-dojo.provide("dojo.widget.Tree");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.TreeNode");
-dojo.require("dojo.html.common");
-dojo.require("dojo.html.selection");
-dojo.widget.defineWidget("dojo.widget.Tree",dojo.widget.HtmlWidget,function(){
-this.eventNames={};
-this.tree=this;
-this.DNDAcceptTypes=[];
-this.actionsDisabled=[];
-},{widgetType:"Tree",eventNamesDefault:{createDOMNode:"createDOMNode",treeCreate:"treeCreate",treeDestroy:"treeDestroy",treeClick:"treeClick",iconClick:"iconClick",titleClick:"titleClick",moveFrom:"moveFrom",moveTo:"moveTo",addChild:"addChild",removeNode:"removeNode",expand:"expand",collapse:"collapse"},isContainer:true,DNDMode:"off",lockLevel:0,strictFolders:true,DNDModes:{BETWEEN:1,ONTO:2},DNDAcceptTypes:"",templateCssString:"\n.dojoTree {\n\tfont: caption;\n\tfont-size: 11px;\n\tfont-weight: normal;\n\toverflow: auto;\n}\n\n\n.dojoTreeNodeLabelTitle {\n\tpadding-left: 2px;\n\tcolor: WindowText;\n}\n\n.dojoTreeNodeLabel {\n\tcursor:hand;\n\tcursor:pointer;\n}\n\n.dojoTreeNodeLabelTitle:hover {\n\ttext-decoration: underline;\n}\n\n.dojoTreeNodeLabelSelected {\n\tbackground-color: Highlight;\n\tcolor: HighlightText;\n}\n\n.dojoTree div {\n\twhite-space: nowrap;\n}\n\n.dojoTree img, .dojoTreeNodeLabel img {\n\tvertical-align: middle;\n}\n\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/Tree.css"),templateString:"<div class=\"dojoTree\"></div>",isExpanded:true,isTree:true,objectId:"",controller:"",selector:"",menu:"",expandLevel:"",blankIconSrc:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_blank.gif"),gridIconSrcT:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_grid_t.gif"),gridIconSrcL:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_grid_l.gif"),gridIconSrcV:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_grid_v.gif"),gridIconSrcP:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_grid_p.gif"),gridIconSrcC:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_grid_c.gif"),gridIconSrcX:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_grid_x.gif"),gridIconSrcY:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_grid_y.gif"),gridIconSrcZ:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_grid_z.gif"),expandIconSrcPlus:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_expand_plus.gif"),expandIconSrcMinus:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_expand_minus.gif"),expandIconSrcLoading:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/treenode_loading.gif"),iconWidth:18,iconHeight:18,showGrid:true,showRootGrid:true,actionIsDisabled:function(_1){
-var _2=this;
-return dojo.lang.inArray(_2.actionsDisabled,_1);
-},actions:{ADDCHILD:"ADDCHILD"},getInfo:function(){
-var _3={widgetId:this.widgetId,objectId:this.objectId};
-return _3;
-},initializeController:function(){
-if(this.controller!="off"){
-if(this.controller){
-this.controller=dojo.widget.byId(this.controller);
-}else{
-dojo.require("dojo.widget.TreeBasicController");
-this.controller=dojo.widget.createWidget("TreeBasicController",{DNDController:(this.DNDMode?"create":""),dieWithTree:true});
-}
-this.controller.listenTree(this);
-}else{
-this.controller=null;
-}
-},initializeSelector:function(){
-if(this.selector!="off"){
-if(this.selector){
-this.selector=dojo.widget.byId(this.selector);
-}else{
-dojo.require("dojo.widget.TreeSelector");
-this.selector=dojo.widget.createWidget("TreeSelector",{dieWithTree:true});
-}
-this.selector.listenTree(this);
-}else{
-this.selector=null;
-}
-},initialize:function(_4,_5){
-var _6=this;
-for(name in this.eventNamesDefault){
-if(dojo.lang.isUndefined(this.eventNames[name])){
-this.eventNames[name]=this.widgetId+"/"+this.eventNamesDefault[name];
-}
-}
-for(var i=0;i<this.actionsDisabled.length;i++){
-this.actionsDisabled[i]=this.actionsDisabled[i].toUpperCase();
-}
-if(this.DNDMode=="off"){
-this.DNDMode=0;
-}else{
-if(this.DNDMode=="between"){
-this.DNDMode=this.DNDModes.ONTO|this.DNDModes.BETWEEN;
-}else{
-if(this.DNDMode=="onto"){
-this.DNDMode=this.DNDModes.ONTO;
-}
-}
-}
-this.expandLevel=parseInt(this.expandLevel);
-this.initializeSelector();
-this.initializeController();
-if(this.menu){
-this.menu=dojo.widget.byId(this.menu);
-this.menu.listenTree(this);
-}
-this.containerNode=this.domNode;
-},postCreate:function(){
-this.createDOMNode();
-},createDOMNode:function(){
-dojo.html.disableSelection(this.domNode);
-for(var i=0;i<this.children.length;i++){
-this.children[i].parent=this;
-var _9=this.children[i].createDOMNode(this,0);
-this.domNode.appendChild(_9);
-}
-if(!this.showRootGrid){
-for(var i=0;i<this.children.length;i++){
-this.children[i].expand();
-}
-}
-dojo.event.topic.publish(this.eventNames.treeCreate,{source:this});
-},destroy:function(){
-dojo.event.topic.publish(this.tree.eventNames.treeDestroy,{source:this});
-return dojo.widget.HtmlWidget.prototype.destroy.apply(this,arguments);
-},addChild:function(_a,_b){
-var _c={child:_a,index:_b,parent:this,domNodeInitialized:_a.domNodeInitialized};
-this.doAddChild.apply(this,arguments);
-dojo.event.topic.publish(this.tree.eventNames.addChild,_c);
-},doAddChild:function(_d,_e){
-if(dojo.lang.isUndefined(_e)){
-_e=this.children.length;
-}
-if(!_d.isTreeNode){
-dojo.raise("You can only add TreeNode widgets to a "+this.widgetType+" widget!");
-return;
-}
-if(this.isTreeNode){
-if(!this.isFolder){
-this.setFolder();
-}
-}
-var _f=this;
-dojo.lang.forEach(_d.getDescendants(),function(_10){
-_10.tree=_f.tree;
-});
-_d.parent=this;
-if(this.isTreeNode){
-this.state=this.loadStates.LOADED;
-}
-if(_e<this.children.length){
-dojo.html.insertBefore(_d.domNode,this.children[_e].domNode);
-}else{
-this.containerNode.appendChild(_d.domNode);
-if(this.isExpanded&&this.isTreeNode){
-this.showChildren();
-}
-}
-this.children.splice(_e,0,_d);
-if(_d.domNodeInitialized){
-var d=this.isTreeNode?this.depth:-1;
-_d.adjustDepth(d-_d.depth+1);
-_d.updateIconTree();
-}else{
-_d.depth=this.isTreeNode?this.depth+1:0;
-_d.createDOMNode(_d.tree,_d.depth);
-}
-var _12=_d.getPreviousSibling();
-if(_d.isLastChild()&&_12){
-_12.updateExpandGridColumn();
-}
-},makeBlankImg:function(){
-var img=document.createElement("img");
-img.style.width=this.iconWidth+"px";
-img.style.height=this.iconHeight+"px";
-img.src=this.blankIconSrc;
-img.style.verticalAlign="middle";
-return img;
-},updateIconTree:function(){
-if(!this.isTree){
-this.updateIcons();
-}
-for(var i=0;i<this.children.length;i++){
-this.children[i].updateIconTree();
-}
-},toString:function(){
-return "["+this.widgetType+" ID:"+this.widgetId+"]";
-},move:function(_15,_16,_17){
-var _18=_15.parent;
-var _19=_15.tree;
-this.doMove.apply(this,arguments);
-var _16=_15.parent;
-var _1a=_15.tree;
-var _1b={oldParent:_18,oldTree:_19,newParent:_16,newTree:_1a,child:_15};
-dojo.event.topic.publish(_19.eventNames.moveFrom,_1b);
-dojo.event.topic.publish(_1a.eventNames.moveTo,_1b);
-},doMove:function(_1c,_1d,_1e){
-_1c.parent.doRemoveNode(_1c);
-_1d.doAddChild(_1c,_1e);
-},removeNode:function(_1f){
-if(!_1f.parent){
-return;
-}
-var _20=_1f.tree;
-var _21=_1f.parent;
-var _22=this.doRemoveNode.apply(this,arguments);
-dojo.event.topic.publish(this.tree.eventNames.removeNode,{child:_22,tree:_20,parent:_21});
-return _22;
-},doRemoveNode:function(_23){
-if(!_23.parent){
-return;
-}
-var _24=_23.parent;
-var _25=_24.children;
-var _26=_23.getParentIndex();
-if(_26<0){
-dojo.raise("Couldn't find node "+_23+" for removal");
-}
-_25.splice(_26,1);
-dojo.html.removeNode(_23.domNode);
-if(_24.children.length==0&&!_24.isTree){
-_24.containerNode.style.display="none";
-}
-if(_26==_25.length&&_26>0){
-_25[_26-1].updateExpandGridColumn();
-}
-if(_24 instanceof dojo.widget.Tree&&_26==0&&_25.length>0){
-_25[0].updateExpandGrid();
-}
-_23.parent=_23.tree=null;
-return _23;
-},markLoading:function(){
-},unMarkLoading:function(){
-},lock:function(){
-!this.lockLevel&&this.markLoading();
-this.lockLevel++;
-},unlock:function(){
-if(!this.lockLevel){
-dojo.raise("unlock: not locked");
-}
-this.lockLevel--;
-!this.lockLevel&&this.unMarkLoading();
-},isLocked:function(){
-var _27=this;
-while(true){
-if(_27.lockLevel){
-return true;
-}
-if(_27 instanceof dojo.widget.Tree){
-break;
-}
-_27=_27.parent;
-}
-return false;
-},flushLock:function(){
-this.lockLevel=0;
-this.unMarkLoading();
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeBasicController.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeBasicController.js
deleted file mode 100644
index 876f2af..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeBasicController.js
+++ /dev/null
@@ -1,141 +0,0 @@
-dojo.provide("dojo.widget.TreeBasicController");
-dojo.require("dojo.event.*");
-dojo.require("dojo.json");
-dojo.require("dojo.io.*");
-dojo.widget.defineWidget("dojo.widget.TreeBasicController",dojo.widget.HtmlWidget,{widgetType:"TreeBasicController",DNDController:"",dieWithTree:false,initialize:function(_1,_2){
-if(this.DNDController=="create"){
-dojo.require("dojo.dnd.TreeDragAndDrop");
-this.DNDController=new dojo.dnd.TreeDNDController(this);
-}
-},listenTree:function(_3){
-dojo.event.topic.subscribe(_3.eventNames.createDOMNode,this,"onCreateDOMNode");
-dojo.event.topic.subscribe(_3.eventNames.treeClick,this,"onTreeClick");
-dojo.event.topic.subscribe(_3.eventNames.treeCreate,this,"onTreeCreate");
-dojo.event.topic.subscribe(_3.eventNames.treeDestroy,this,"onTreeDestroy");
-if(this.DNDController){
-this.DNDController.listenTree(_3);
-}
-},unlistenTree:function(_4){
-dojo.event.topic.unsubscribe(_4.eventNames.createDOMNode,this,"onCreateDOMNode");
-dojo.event.topic.unsubscribe(_4.eventNames.treeClick,this,"onTreeClick");
-dojo.event.topic.unsubscribe(_4.eventNames.treeCreate,this,"onTreeCreate");
-dojo.event.topic.unsubscribe(_4.eventNames.treeDestroy,this,"onTreeDestroy");
-},onTreeDestroy:function(_5){
-var _6=_5.source;
-this.unlistenTree(_6);
-if(this.dieWithTree){
-this.destroy();
-}
-},onCreateDOMNode:function(_7){
-var _8=_7.source;
-if(_8.expandLevel>0){
-this.expandToLevel(_8,_8.expandLevel);
-}
-},onTreeCreate:function(_9){
-var _a=_9.source;
-var _b=this;
-if(_a.expandLevel){
-dojo.lang.forEach(_a.children,function(_c){
-_b.expandToLevel(_c,_a.expandLevel-1);
-});
-}
-},expandToLevel:function(_d,_e){
-if(_e==0){
-return;
-}
-var _f=_d.children;
-var _10=this;
-var _11=function(_12,_13){
-this.node=_12;
-this.expandLevel=_13;
-this.process=function(){
-for(var i=0;i<this.node.children.length;i++){
-var _15=_12.children[i];
-_10.expandToLevel(_15,this.expandLevel);
-}
-};
-};
-var h=new _11(_d,_e-1);
-this.expand(_d,false,h,h.process);
-},onTreeClick:function(_17){
-var _18=_17.source;
-if(_18.isLocked()){
-return false;
-}
-if(_18.isExpanded){
-this.collapse(_18);
-}else{
-this.expand(_18);
-}
-},expand:function(_19,_1a,_1b,_1c){
-_19.expand();
-if(_1c){
-_1c.apply(_1b,[_19]);
-}
-},collapse:function(_1d){
-_1d.collapse();
-},canMove:function(_1e,_1f){
-if(_1e.actionIsDisabled(_1e.actions.MOVE)){
-return false;
-}
-if(_1e.parent!==_1f&&_1f.actionIsDisabled(_1f.actions.ADDCHILD)){
-return false;
-}
-var _20=_1f;
-while(_20.isTreeNode){
-if(_20===_1e){
-return false;
-}
-_20=_20.parent;
-}
-return true;
-},move:function(_21,_22,_23){
-if(!this.canMove(_21,_22)){
-return false;
-}
-var _24=this.doMove(_21,_22,_23);
-if(!_24){
-return _24;
-}
-if(_22.isTreeNode){
-this.expand(_22);
-}
-return _24;
-},doMove:function(_25,_26,_27){
-_25.tree.move(_25,_26,_27);
-return true;
-},canRemoveNode:function(_28){
-if(_28.actionIsDisabled(_28.actions.REMOVE)){
-return false;
-}
-return true;
-},removeNode:function(_29,_2a,_2b){
-if(!this.canRemoveNode(_29)){
-return false;
-}
-return this.doRemoveNode(_29,_2a,_2b);
-},doRemoveNode:function(_2c,_2d,_2e){
-_2c.tree.removeNode(_2c);
-if(_2e){
-_2e.apply(dojo.lang.isUndefined(_2d)?this:_2d,[_2c]);
-}
-},canCreateChild:function(_2f,_30,_31){
-if(_2f.actionIsDisabled(_2f.actions.ADDCHILD)){
-return false;
-}
-return true;
-},createChild:function(_32,_33,_34,_35,_36){
-if(!this.canCreateChild(_32,_33,_34)){
-return false;
-}
-return this.doCreateChild.apply(this,arguments);
-},doCreateChild:function(_37,_38,_39,_3a,_3b){
-var _3c=_39.widgetType?_39.widgetType:"TreeNode";
-var _3d=dojo.widget.createWidget(_3c,_39);
-_37.addChild(_3d,_38);
-this.expand(_37);
-if(_3b){
-_3b.apply(_3a,[_3d]);
-}
-return _3d;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeBasicControllerV3.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeBasicControllerV3.js
deleted file mode 100644
index 56f3c4b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeBasicControllerV3.js
+++ /dev/null
@@ -1,448 +0,0 @@
-dojo.provide("dojo.widget.TreeBasicControllerV3");
-dojo.require("dojo.event.*");
-dojo.require("dojo.json");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.TreeCommon");
-dojo.require("dojo.widget.TreeNodeV3");
-dojo.require("dojo.widget.TreeV3");
-dojo.widget.defineWidget("dojo.widget.TreeBasicControllerV3",[dojo.widget.HtmlWidget,dojo.widget.TreeCommon],function(){
-this.listenedTrees={};
-},{listenTreeEvents:["afterSetFolder","afterTreeCreate","beforeTreeDestroy"],listenNodeFilter:function(_1){
-return _1 instanceof dojo.widget.Widget;
-},editor:null,initialize:function(_2){
-if(_2.editor){
-this.editor=dojo.widget.byId(_2.editor);
-this.editor.controller=this;
-}
-},getInfo:function(_3){
-return _3.getInfo();
-},onBeforeTreeDestroy:function(_4){
-this.unlistenTree(_4.source);
-},onAfterSetFolder:function(_5){
-if(_5.source.expandLevel>0){
-this.expandToLevel(_5.source,_5.source.expandLevel);
-}
-if(_5.source.loadLevel>0){
-this.loadToLevel(_5.source,_5.source.loadLevel);
-}
-},_focusNextVisible:function(_6){
-if(_6.isFolder&&_6.isExpanded&&_6.children.length>0){
-_7=_6.children[0];
-}else{
-while(_6.isTreeNode&&_6.isLastChild()){
-_6=_6.parent;
-}
-if(_6.isTreeNode){
-var _7=_6.parent.children[_6.getParentIndex()+1];
-}
-}
-if(_7&&_7.isTreeNode){
-this._focusLabel(_7);
-return _7;
-}
-},_focusPreviousVisible:function(_8){
-var _9=_8;
-if(!_8.isFirstChild()){
-var _a=_8.parent.children[_8.getParentIndex()-1];
-_8=_a;
-while(_8.isFolder&&_8.isExpanded&&_8.children.length>0){
-_9=_8;
-_8=_8.children[_8.children.length-1];
-}
-}else{
-_8=_8.parent;
-}
-if(_8&&_8.isTreeNode){
-_9=_8;
-}
-if(_9&&_9.isTreeNode){
-this._focusLabel(_9);
-return _9;
-}
-},_focusZoomIn:function(_b){
-var _c=_b;
-if(_b.isFolder&&!_b.isExpanded){
-this.expand(_b);
-}else{
-if(_b.children.length>0){
-_b=_b.children[0];
-}
-}
-if(_b&&_b.isTreeNode){
-_c=_b;
-}
-if(_c&&_c.isTreeNode){
-this._focusLabel(_c);
-return _c;
-}
-},_focusZoomOut:function(_d){
-var _e=_d;
-if(_d.isFolder&&_d.isExpanded){
-this.collapse(_d);
-}else{
-_d=_d.parent;
-}
-if(_d&&_d.isTreeNode){
-_e=_d;
-}
-if(_e&&_e.isTreeNode){
-this._focusLabel(_e);
-return _e;
-}
-},onFocusNode:function(e){
-var _10=this.domElement2TreeNode(e.target);
-if(_10){
-_10.viewFocus();
-dojo.event.browser.stopEvent(e);
-}
-},onBlurNode:function(e){
-var _12=this.domElement2TreeNode(e.target);
-if(!_12){
-return;
-}
-var _13=_12.labelNode;
-_13.setAttribute("tabIndex","-1");
-_12.viewUnfocus();
-dojo.event.browser.stopEvent(e);
-_12.tree.domNode.setAttribute("tabIndex","0");
-},_focusLabel:function(_14){
-var _15=_14.tree.lastFocused;
-var _16;
-if(_15&&_15.labelNode){
-_16=_15.labelNode;
-dojo.event.disconnect(_16,"onblur",this,"onBlurNode");
-_16.setAttribute("tabIndex","-1");
-dojo.html.removeClass(_16,"TreeLabelFocused");
-}
-_16=_14.labelNode;
-_16.setAttribute("tabIndex","0");
-_14.tree.lastFocused=_14;
-dojo.html.addClass(_16,"TreeLabelFocused");
-dojo.event.connectOnce(_16,"onblur",this,"onBlurNode");
-dojo.event.connectOnce(_16,"onfocus",this,"onFocusNode");
-_16.focus();
-},onKey:function(e){
-if(!e.key||e.ctrkKey||e.altKey){
-return;
-}
-var _18=this.domElement2TreeNode(e.target);
-if(!_18){
-return;
-}
-var _19=_18.tree;
-if(_19.lastFocused&&_19.lastFocused.labelNode){
-_18=_19.lastFocused;
-}
-switch(e.key){
-case e.KEY_TAB:
-if(e.shiftKey){
-_19.domNode.setAttribute("tabIndex","-1");
-}
-break;
-case e.KEY_RIGHT_ARROW:
-this._focusZoomIn(_18);
-dojo.event.browser.stopEvent(e);
-break;
-case e.KEY_LEFT_ARROW:
-this._focusZoomOut(_18);
-dojo.event.browser.stopEvent(e);
-break;
-case e.KEY_UP_ARROW:
-this._focusPreviousVisible(_18);
-dojo.event.browser.stopEvent(e);
-break;
-case e.KEY_DOWN_ARROW:
-this._focusNextVisible(_18);
-dojo.event.browser.stopEvent(e);
-break;
-}
-},onFocusTree:function(e){
-if(!e.currentTarget){
-return;
-}
-try{
-var _1b=this.getWidgetByNode(e.currentTarget);
-if(!_1b||!_1b.isTree){
-return;
-}
-var _1c=this.getWidgetByNode(_1b.domNode.firstChild);
-if(_1c&&_1c.isTreeNode){
-if(_1b.lastFocused&&_1b.lastFocused.isTreeNode){
-_1c=_1b.lastFocused;
-}
-this._focusLabel(_1c);
-}
-}
-catch(e){
-}
-},onAfterTreeCreate:function(_1d){
-var _1e=_1d.source;
-dojo.event.browser.addListener(_1e.domNode,"onKey",dojo.lang.hitch(this,this.onKey));
-dojo.event.browser.addListener(_1e.domNode,"onmousedown",dojo.lang.hitch(this,this.onTreeMouseDown));
-dojo.event.browser.addListener(_1e.domNode,"onclick",dojo.lang.hitch(this,this.onTreeClick));
-dojo.event.browser.addListener(_1e.domNode,"onfocus",dojo.lang.hitch(this,this.onFocusTree));
-_1e.domNode.setAttribute("tabIndex","0");
-if(_1e.expandLevel){
-this.expandToLevel(_1e,_1e.expandLevel);
-}
-if(_1e.loadLevel){
-this.loadToLevel(_1e,_1e.loadLevel);
-}
-},onTreeMouseDown:function(e){
-},onTreeClick:function(e){
-var _21=e.target;
-var _22=this.domElement2TreeNode(_21);
-if(!_22||!_22.isTreeNode){
-return;
-}
-var _23=function(el){
-return el===_22.expandNode;
-};
-if(this.checkPathCondition(_21,_23)){
-this.processExpandClick(_22);
-}
-this._focusLabel(_22);
-},processExpandClick:function(_25){
-if(_25.isExpanded){
-this.collapse(_25);
-}else{
-this.expand(_25);
-}
-},batchExpandTimeout:20,expandAll:function(_26){
-return this.expandToLevel(_26,Number.POSITIVE_INFINITY);
-},collapseAll:function(_27){
-var _28=this;
-var _29=function(_2a){
-return (_2a instanceof dojo.widget.Widget)&&_2a.isFolder&&_2a.isExpanded;
-};
-if(_27.isTreeNode){
-this.processDescendants(_27,_29,this.collapse);
-}else{
-if(_27.isTree){
-dojo.lang.forEach(_27.children,function(c){
-_28.processDescendants(c,_29,_28.collapse);
-});
-}
-}
-},expandToNode:function(_2c,_2d){
-n=_2d?_2c:_2c.parent;
-s=[];
-while(!n.isExpanded){
-s.push(n);
-n=n.parent;
-}
-dojo.lang.forEach(s,function(n){
-n.expand();
-});
-},expandToLevel:function(_2f,_30){
-dojo.require("dojo.widget.TreeTimeoutIterator");
-var _31=this;
-var _32=function(_33){
-var res=_33.isFolder||_33.children&&_33.children.length;
-return res;
-};
-var _35=function(_36,_37){
-_31.expand(_36,true);
-_37.forward();
-};
-var _38=new dojo.widget.TreeTimeoutIterator(_2f,_35,this);
-_38.setFilter(_32);
-_38.timeout=this.batchExpandTimeout;
-_38.setMaxLevel(_2f.isTreeNode?_30-1:_30);
-return _38.start(_2f.isTreeNode);
-},getWidgetByNode:function(_39){
-var _3a;
-var _3b=_39;
-while(!(_3a=_3b.widgetId)){
-_3b=_3b.parentNode;
-if(_3b==null){
-break;
-}
-}
-if(_3a){
-return dojo.widget.byId(_3a);
-}else{
-if(_39==null){
-return null;
-}else{
-return dojo.widget.manager.byNode(_39);
-}
-}
-},expand:function(_3c){
-if(_3c.isFolder){
-_3c.expand();
-}
-},collapse:function(_3d){
-if(_3d.isFolder){
-_3d.collapse();
-}
-},canEditLabel:function(_3e){
-if(_3e.actionIsDisabledNow(_3e.actions.EDIT)){
-return false;
-}
-return true;
-},editLabelStart:function(_3f){
-if(!this.canEditLabel(_3f)){
-return false;
-}
-if(!this.editor.isClosed()){
-this.editLabelFinish(this.editor.saveOnBlur);
-}
-this.doEditLabelStart(_3f);
-},editLabelFinish:function(_40){
-this.doEditLabelFinish(_40);
-},doEditLabelStart:function(_41){
-if(!this.editor){
-dojo.raise(this.widgetType+": no editor specified");
-}
-this.editor.open(_41);
-},doEditLabelFinish:function(_42,_43){
-if(!this.editor){
-dojo.raise(this.widgetType+": no editor specified");
-}
-var _44=this.editor.node;
-var _45=this.editor.getContents();
-this.editor.close(_42);
-if(_42){
-var _46={title:_45};
-if(_43){
-dojo.lang.mixin(_46,_43);
-}
-if(_44.isPhantom){
-var _47=_44.parent;
-var _48=_44.getParentIndex();
-_44.destroy();
-dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this,_47,_48,_46);
-}else{
-var _49=_43&&_43.title?_43.title:_45;
-_44.setTitle(_49);
-}
-}else{
-if(_44.isPhantom){
-_44.destroy();
-}
-}
-},makeDefaultNode:function(_4a,_4b){
-var _4c={title:_4a.tree.defaultChildTitle};
-return dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this,_4a,_4b,_4c);
-},runStages:function(_4d,_4e,_4f,_50,_51,_52){
-if(_4d&&!_4d.apply(this,_52)){
-return false;
-}
-if(_4e&&!_4e.apply(this,_52)){
-return false;
-}
-var _53=_4f.apply(this,_52);
-if(_50){
-_50.apply(this,_52);
-}
-if(!_53){
-return _53;
-}
-if(_51){
-_51.apply(this,_52);
-}
-return _53;
-}});
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{createAndEdit:function(_54,_55){
-var _56={title:_54.tree.defaultChildTitle};
-if(!this.canCreateChild(_54,_55,_56)){
-return false;
-}
-var _57=this.doCreateChild(_54,_55,_56);
-if(!_57){
-return false;
-}
-this.exposeCreateChild(_54,_55,_56);
-_57.isPhantom=true;
-if(!this.editor.isClosed()){
-this.editLabelFinish(this.editor.saveOnBlur);
-}
-this.doEditLabelStart(_57);
-}});
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{canClone:function(_58,_59,_5a,_5b){
-return true;
-},clone:function(_5c,_5d,_5e,_5f){
-return this.runStages(this.canClone,this.prepareClone,this.doClone,this.finalizeClone,this.exposeClone,arguments);
-},exposeClone:function(_60,_61){
-if(_61.isTreeNode){
-this.expand(_61);
-}
-},doClone:function(_62,_63,_64,_65){
-var _66=_62.clone(_65);
-_63.addChild(_66,_64);
-return _66;
-}});
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{canDetach:function(_67){
-if(_67.actionIsDisabledNow(_67.actions.DETACH)){
-return false;
-}
-return true;
-},detach:function(_68){
-return this.runStages(this.canDetach,this.prepareDetach,this.doDetach,this.finalizeDetach,this.exposeDetach,arguments);
-},doDetach:function(_69,_6a,_6b){
-_69.detach();
-}});
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{canDestroyChild:function(_6c){
-if(_6c.parent&&!this.canDetach(_6c)){
-return false;
-}
-return true;
-},destroyChild:function(_6d){
-return this.runStages(this.canDestroyChild,this.prepareDestroyChild,this.doDestroyChild,this.finalizeDestroyChild,this.exposeDestroyChild,arguments);
-},doDestroyChild:function(_6e){
-_6e.destroy();
-}});
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{canMoveNotANode:function(_6f,_70){
-if(_6f.treeCanMove){
-return _6f.treeCanMove(_70);
-}
-return true;
-},canMove:function(_71,_72){
-if(!_71.isTreeNode){
-return this.canMoveNotANode(_71,_72);
-}
-if(_71.actionIsDisabledNow(_71.actions.MOVE)){
-return false;
-}
-if(_71.parent!==_72&&_72.actionIsDisabledNow(_72.actions.ADDCHILD)){
-return false;
-}
-var _73=_72;
-while(_73.isTreeNode){
-if(_73===_71){
-return false;
-}
-_73=_73.parent;
-}
-return true;
-},move:function(_74,_75,_76){
-return this.runStages(this.canMove,this.prepareMove,this.doMove,this.finalizeMove,this.exposeMove,arguments);
-},doMove:function(_77,_78,_79){
-_77.tree.move(_77,_78,_79);
-return true;
-},exposeMove:function(_7a,_7b){
-if(_7b.isTreeNode){
-this.expand(_7b);
-}
-}});
-dojo.lang.extend(dojo.widget.TreeBasicControllerV3,{canCreateChild:function(_7c,_7d,_7e){
-if(_7c.actionIsDisabledNow(_7c.actions.ADDCHILD)){
-return false;
-}
-return true;
-},createChild:function(_7f,_80,_81){
-if(!_81){
-_81={title:_7f.tree.defaultChildTitle};
-}
-return this.runStages(this.canCreateChild,this.prepareCreateChild,this.doCreateChild,this.finalizeCreateChild,this.exposeCreateChild,[_7f,_80,_81]);
-},prepareCreateChild:function(){
-return true;
-},finalizeCreateChild:function(){
-},doCreateChild:function(_82,_83,_84){
-var _85=_82.tree.createNode(_84);
-_82.addChild(_85,_83);
-return _85;
-},exposeCreateChild:function(_86){
-return this.expand(_86);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeCommon.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeCommon.js
deleted file mode 100644
index 5ce79d4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeCommon.js
+++ /dev/null
@@ -1,69 +0,0 @@
-dojo.provide("dojo.widget.TreeCommon");
-dojo.require("dojo.widget.*");
-dojo.declare("dojo.widget.TreeCommon",null,{listenTreeEvents:[],listenedTrees:{},listenNodeFilter:null,listenTree:function(_1){
-var _2=this;
-if(this.listenedTrees[_1.widgetId]){
-return;
-}
-dojo.lang.forEach(this.listenTreeEvents,function(_3){
-var _4="on"+_3.charAt(0).toUpperCase()+_3.substr(1);
-dojo.event.topic.subscribe(_1.eventNames[_3],_2,_4);
-});
-var _5;
-if(this.listenNodeFilter){
-this.processDescendants(_1,this.listenNodeFilter,this.listenNode,true);
-}
-this.listenedTrees[_1.widgetId]=true;
-},listenNode:function(){
-},unlistenNode:function(){
-},unlistenTree:function(_6,_7){
-var _8=this;
-if(!this.listenedTrees[_6.widgetId]){
-return;
-}
-dojo.lang.forEach(this.listenTreeEvents,function(_9){
-var _a="on"+_9.charAt(0).toUpperCase()+_9.substr(1);
-dojo.event.topic.unsubscribe(_6.eventNames[_9],_8,_a);
-});
-if(this.listenNodeFilter){
-this.processDescendants(_6,this.listenNodeFilter,this.unlistenNode,true);
-}
-delete this.listenedTrees[_6.widgetId];
-},checkPathCondition:function(_b,_c){
-while(_b&&!_b.widgetId){
-if(_c.call(null,_b)){
-return true;
-}
-_b=_b.parentNode;
-}
-return false;
-},domElement2TreeNode:function(_d){
-while(_d&&!_d.widgetId){
-_d=_d.parentNode;
-}
-if(!_d){
-return null;
-}
-var _e=dojo.widget.byId(_d.widgetId);
-if(!_e.isTreeNode){
-return null;
-}
-return _e;
-},processDescendants:function(_f,_10,_11,_12){
-var _13=this;
-if(!_12){
-if(!_10.call(_13,_f)){
-return;
-}
-_11.call(_13,_f);
-}
-var _14=[_f];
-while(_f=_14.pop()){
-dojo.lang.forEach(_f.children,function(_15){
-if(_10.call(_13,_15)){
-_11.call(_13,_15);
-_14.push(_15);
-}
-});
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeContextMenu.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeContextMenu.js
deleted file mode 100644
index 4175665..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeContextMenu.js
+++ /dev/null
@@ -1,97 +0,0 @@
-dojo.provide("dojo.widget.TreeContextMenu");
-dojo.require("dojo.event.*");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.Menu2");
-dojo.widget.defineWidget("dojo.widget.TreeContextMenu",dojo.widget.PopupMenu2,function(){
-this.listenedTrees=[];
-},{open:function(x,y,_3,_4){
-var _5=dojo.widget.PopupMenu2.prototype.open.apply(this,arguments);
-dojo.event.topic.publish(this.eventNames.open,{menu:this});
-return _5;
-},listenTree:function(_6){
-var _7=_6.getDescendants();
-for(var i=0;i<_7.length;i++){
-if(!_7[i].isTreeNode){
-continue;
-}
-this.bindDomNode(_7[i].labelNode);
-}
-var _9=this;
-dojo.event.topic.subscribe(_6.eventNames.createDOMNode,this,"onCreateDOMNode");
-dojo.event.topic.subscribe(_6.eventNames.moveFrom,this,"onMoveFrom");
-dojo.event.topic.subscribe(_6.eventNames.moveTo,this,"onMoveTo");
-dojo.event.topic.subscribe(_6.eventNames.removeNode,this,"onRemoveNode");
-dojo.event.topic.subscribe(_6.eventNames.addChild,this,"onAddChild");
-dojo.event.topic.subscribe(_6.eventNames.treeDestroy,this,"onTreeDestroy");
-this.listenedTrees.push(_6);
-},unlistenTree:function(_a){
-dojo.event.topic.unsubscribe(_a.eventNames.createDOMNode,this,"onCreateDOMNode");
-dojo.event.topic.unsubscribe(_a.eventNames.moveFrom,this,"onMoveFrom");
-dojo.event.topic.unsubscribe(_a.eventNames.moveTo,this,"onMoveTo");
-dojo.event.topic.unsubscribe(_a.eventNames.removeNode,this,"onRemoveNode");
-dojo.event.topic.unsubscribe(_a.eventNames.addChild,this,"onAddChild");
-dojo.event.topic.unsubscribe(_a.eventNames.treeDestroy,this,"onTreeDestroy");
-for(var i=0;i<this.listenedTrees.length;i++){
-if(this.listenedTrees[i]===_a){
-this.listenedTrees.splice(i,1);
-break;
-}
-}
-},onTreeDestroy:function(_c){
-this.unlistenTree(_c.source);
-},bindTreeNode:function(_d){
-var _e=this;
-dojo.lang.forEach(_d.getDescendants(),function(e){
-_e.bindDomNode(e.labelNode);
-});
-},unBindTreeNode:function(_10){
-var _11=this;
-dojo.lang.forEach(_10.getDescendants(),function(e){
-_11.unBindDomNode(e.labelNode);
-});
-},onCreateDOMNode:function(_13){
-this.bindTreeNode(_13.source);
-},onMoveFrom:function(_14){
-if(!dojo.lang.inArray(this.listenedTrees,_14.newTree)){
-this.unBindTreeNode(_14.child);
-}
-},onMoveTo:function(_15){
-if(dojo.lang.inArray(this.listenedTrees,_15.newTree)){
-this.bindTreeNode(_15.child);
-}
-},onRemoveNode:function(_16){
-this.unBindTreeNode(_16.child);
-},onAddChild:function(_17){
-if(_17.domNodeInitialized){
-this.bindTreeNode(_17.child);
-}
-}});
-dojo.widget.defineWidget("dojo.widget.TreeMenuItem",dojo.widget.MenuItem2,{treeActions:"",initialize:function(_18,_19){
-this.treeActions=this.treeActions.split(",");
-for(var i=0;i<this.treeActions.length;i++){
-this.treeActions[i]=this.treeActions[i].toUpperCase();
-}
-},getTreeNode:function(){
-var _1b=this;
-while(!(_1b instanceof dojo.widget.TreeContextMenu)){
-_1b=_1b.parent;
-}
-var _1c=_1b.getTopOpenEvent().target;
-while(!_1c.getAttribute("treeNode")&&_1c.tagName!="body"){
-_1c=_1c.parentNode;
-}
-if(_1c.tagName=="body"){
-dojo.raise("treeNode not detected");
-}
-var _1d=dojo.widget.manager.getWidgetById(_1c.getAttribute("treeNode"));
-return _1d;
-},menuOpen:function(_1e){
-var _1f=this.getTreeNode();
-this.setDisabled(false);
-var _20=this;
-dojo.lang.forEach(_20.treeActions,function(_21){
-_20.setDisabled(_1f.actionIsDisabled(_21));
-});
-},toString:function(){
-return "["+this.widgetType+" node "+this.getTreeNode()+"]";
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeContextMenuV3.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeContextMenuV3.js
deleted file mode 100644
index 3d1d4fe..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeContextMenuV3.js
+++ /dev/null
@@ -1,61 +0,0 @@
-dojo.provide("dojo.widget.TreeContextMenuV3");
-dojo.require("dojo.event.*");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.Menu2");
-dojo.require("dojo.widget.TreeCommon");
-dojo.widget.defineWidget("dojo.widget.TreeContextMenuV3",[dojo.widget.PopupMenu2,dojo.widget.TreeCommon],function(){
-this.listenedTrees={};
-},{listenTreeEvents:["afterTreeCreate","beforeTreeDestroy"],listenNodeFilter:function(_1){
-return _1 instanceof dojo.widget.Widget;
-},onAfterTreeCreate:function(_2){
-var _3=_2.source;
-this.bindDomNode(_3.domNode);
-},onBeforeTreeDestroy:function(_4){
-this.unBindDomNode(_4.source.domNode);
-},getTreeNode:function(){
-var _5=this.getTopOpenEvent().target;
-var _6=this.domElement2TreeNode(_5);
-return _6;
-},open:function(){
-var _7=dojo.widget.PopupMenu2.prototype.open.apply(this,arguments);
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].menuOpen){
-this.children[i].menuOpen(this.getTreeNode());
-}
-}
-return _7;
-},close:function(){
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].menuClose){
-this.children[i].menuClose(this.getTreeNode());
-}
-}
-var _a=dojo.widget.PopupMenu2.prototype.close.apply(this,arguments);
-return _a;
-}});
-dojo.widget.defineWidget("dojo.widget.TreeMenuItemV3",[dojo.widget.MenuItem2,dojo.widget.TreeCommon],function(){
-this.treeActions=[];
-},{treeActions:"",initialize:function(_b,_c){
-for(var i=0;i<this.treeActions.length;i++){
-this.treeActions[i]=this.treeActions[i].toUpperCase();
-}
-},getTreeNode:function(){
-var _e=this;
-while(!(_e instanceof dojo.widget.TreeContextMenuV3)){
-_e=_e.parent;
-}
-var _f=_e.getTreeNode();
-return _f;
-},menuOpen:function(_10){
-_10.viewEmphasize();
-this.setDisabled(false);
-var _11=this;
-dojo.lang.forEach(_11.treeActions,function(_12){
-_11.setDisabled(_10.actionIsDisabledNow(_12));
-});
-},menuClose:function(_13){
-_13.viewUnemphasize();
-},toString:function(){
-return "["+this.widgetType+" node "+this.getTreeNode()+"]";
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeControllerExtension.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeControllerExtension.js
deleted file mode 100644
index b6f773a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeControllerExtension.js
+++ /dev/null
@@ -1,47 +0,0 @@
-dojo.provide("dojo.widget.TreeControllerExtension");
-dojo.declare("dojo.widget.TreeControllerExtension",null,{saveExpandedIndices:function(_1,_2){
-var _3={};
-for(var i=0;i<_1.children.length;i++){
-if(_1.children[i].isExpanded){
-var _5=dojo.lang.isUndefined(_2)?i:_1.children[i][_2];
-_3[_5]=this.saveExpandedIndices(_1.children[i],_2);
-}
-}
-return _3;
-},restoreExpandedIndices:function(_6,_7,_8){
-var _9=this;
-var _a=function(_b,_c){
-this.node=_b;
-this.savedIndices=_c;
-this.process=function(){
-_9.restoreExpandedIndices(this.node,this.savedIndices,_8);
-};
-};
-for(var i=0;i<_6.children.length;i++){
-var _e=_6.children[i];
-var _f=false;
-var key=-1;
-if(dojo.lang.isUndefined(_8)&&_7[i]){
-_f=true;
-key=i;
-}
-if(_8){
-for(var key in _7){
-if(key==_e[_8]){
-_f=true;
-break;
-}
-}
-}
-if(_f){
-var h=new _a(_e,_7[key]);
-_9.expand(_e,false,h,h.process);
-}else{
-if(_e.isExpanded){
-dojo.lang.forEach(_e.getDescendants(),function(_12){
-_9.collapse(_12);
-});
-}
-}
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDemo.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDemo.js
deleted file mode 100644
index cf78217..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDemo.js
+++ /dev/null
@@ -1,72 +0,0 @@
-dojo.provide("dojo.widget.TreeDemo");
-dojo.require("dojo.Deferred");
-dojo.widget.TreeDemo={reportIfDefered:function(_1){
-if(_1 instanceof dojo.Deferred){
-_1.addCallbacks(function(_2){
-return _2;
-},function(_3){
-dojo.debug("Error");
-dojo.debugShallow(_3);
-});
-}
-},resetRandomChildren:function(_4){
-this.randomChildrenMaxCount=_4;
-this.randomChildrenCount=0;
-this.randomChildrenDepth=0;
-},makeRandomChildren:function(_5){
-this.randomChildrenDepth++;
-var _6=[];
-for(var i=1;i<=5;i++){
-var t=_5+(this.randomChildrenDepth==1?"":".")+i;
-var _9={title:t};
-_6.push(_9);
-this.randomChildrenCount++;
-if(this.randomChildrenCount>=this.randomChildrenMaxCount){
-break;
-}
-}
-var i=1;
-var _a=this;
-dojo.lang.forEach(_6,function(_b){
-var t=_5+(_a.randomChildrenDepth==1?"":".")+i;
-i++;
-if(_a.randomChildrenCount<_a.randomChildrenMaxCount&&(_a.randomChildrenDepth==1&&_b===_6[0]||_a.randomChildrenDepth<5&&Math.random()>0.3)){
-_b.children=_a.makeRandomChildren(t);
-}
-});
-this.randomChildrenDepth--;
-return _6;
-},bindDemoMenu:function(_d){
-var _t=this;
-dojo.event.topic.subscribe("treeContextMenuDestroy/engage",function(_f){
-var _10=_f.getTreeNode();
-_t.reportIfDefered(_d.destroyChild(_10));
-});
-dojo.event.topic.subscribe("treeContextMenuRefresh/engage",function(_11){
-var _12=_11.getTreeNode();
-_t.reportIfDefered(_d.refreshChildren(_12));
-});
-dojo.event.topic.subscribe("treeContextMenuCreate/engage",function(_13){
-var _14=_13.getTreeNode();
-var d=_d.createAndEdit(_14,0);
-_t.reportIfDefered(d);
-});
-dojo.event.topic.subscribe("treeContextMenuUp/engage",function(_16){
-var _17=_16.getTreeNode();
-if(_17.isFirstChild()){
-return;
-}
-_t.reportIfDefered(_d.move(_17,_17.parent,_17.getParentIndex()-1));
-});
-dojo.event.topic.subscribe("treeContextMenuDown/engage",function(_18){
-var _19=_18.getTreeNode();
-if(_19.isLastChild()){
-return;
-}
-_t.reportIfDefered(_d.move(_19,_19.parent,_19.getParentIndex()+1));
-});
-dojo.event.topic.subscribe("treeContextMenuEdit/engage",function(_1a){
-var _1b=_1a.getTreeNode();
-_t.reportIfDefered(_d.editLabelStart(_1b));
-});
-}};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDeselectOnDblselect.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDeselectOnDblselect.js
deleted file mode 100644
index 6b47619..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDeselectOnDblselect.js
+++ /dev/null
@@ -1,10 +0,0 @@
-dojo.provide("dojo.widget.TreeDeselectOnDblselect");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.TreeSelectorV3");
-dojo.deprecated("Does anyone still need this extension? (TreeDeselectOnDblselect)");
-dojo.widget.defineWidget("dojo.widget.TreeDeselectOnDblselect",[dojo.widget.HtmlWidget],{selector:"",initialize:function(){
-this.selector=dojo.widget.byId(this.selector);
-dojo.event.topic.subscribe(this.selector.eventNames.dblselect,this,"onDblselect");
-},onDblselect:function(_1){
-this.selector.deselect(_1.node);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDisableWrapExtension.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDisableWrapExtension.js
deleted file mode 100644
index 5fd1193..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDisableWrapExtension.js
+++ /dev/null
@@ -1,24 +0,0 @@
-dojo.provide("dojo.widget.TreeDisableWrapExtension");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.TreeExtension");
-dojo.widget.defineWidget("dojo.widget.TreeDisableWrapExtension",dojo.widget.TreeExtension,{templateCssString:"\n/* CSS for TreeDisableWrapExtension */\n\n.TreeDisableWrap {\n\twhite-space: nowrap;\n}\n.TreeIEDisableWrap {\n\twidth: expression( 5 + firstChild.offsetWidth );\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/TreeDisableWrap.css"),listenTree:function(_1){
-var _2=document.createElement("div");
-var _3=_1.classPrefix+"DisableWrap";
-if(dojo.render.html.ie){
-_3=_3+" "+_1.classPrefix+"IEDisableWrap";
-}
-dojo.html.setClass(_2,_3);
-var _4=document.createElement("table");
-_2.appendChild(_4);
-var _5=document.createElement("tbody");
-_4.appendChild(_5);
-var tr=document.createElement("tr");
-_5.appendChild(tr);
-var td=document.createElement("td");
-tr.appendChild(td);
-if(_1.domNode.parentNode){
-_1.domNode.parentNode.replaceChild(_2,_1.domNode);
-}
-td.appendChild(_1.domNode);
-_1.domNode=_2;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDndControllerV3.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDndControllerV3.js
deleted file mode 100644
index eac826e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDndControllerV3.js
+++ /dev/null
@@ -1,58 +0,0 @@
-dojo.provide("dojo.widget.TreeDndControllerV3");
-dojo.require("dojo.dnd.TreeDragAndDropV3");
-dojo.require("dojo.experimental");
-dojo.experimental("Tree drag'n'drop' has lots of problems/bugs, it requires dojo drag'n'drop overhaul to work, probably in 0.5");
-dojo.widget.defineWidget("dojo.widget.TreeDndControllerV3",[dojo.widget.HtmlWidget,dojo.widget.TreeCommon],function(){
-this.dragSources={};
-this.dropTargets={};
-this.listenedTrees={};
-},{listenTreeEvents:["afterChangeTree","beforeTreeDestroy","afterAddChild"],listenNodeFilter:function(_1){
-return _1 instanceof dojo.widget.Widget;
-},initialize:function(_2){
-this.treeController=dojo.lang.isString(_2.controller)?dojo.widget.byId(_2.controller):_2.controller;
-if(!this.treeController){
-dojo.raise("treeController must be declared");
-}
-},onBeforeTreeDestroy:function(_3){
-this.unlistenTree(_3.source);
-},onAfterAddChild:function(_4){
-this.listenNode(_4.child);
-},onAfterChangeTree:function(_5){
-if(!_5.oldTree){
-return;
-}
-if(!_5.newTree||!this.listenedTrees[_5.newTree.widgetId]){
-this.processDescendants(_5.node,this.listenNodeFilter,this.unlistenNode);
-}
-if(!this.listenedTrees[_5.oldTree.widgetId]){
-this.processDescendants(_5.node,this.listenNodeFilter,this.listenNode);
-}
-},listenNode:function(_6){
-if(!_6.tree.DndMode){
-return;
-}
-if(this.dragSources[_6.widgetId]||this.dropTargets[_6.widgetId]){
-return;
-}
-var _7=null;
-var _8=null;
-if(!_6.actionIsDisabled(_6.actions.MOVE)){
-var _7=this.makeDragSource(_6);
-this.dragSources[_6.widgetId]=_7;
-}
-var _8=this.makeDropTarget(_6);
-this.dropTargets[_6.widgetId]=_8;
-},makeDragSource:function(_9){
-return new dojo.dnd.TreeDragSourceV3(_9.contentNode,this,_9.tree.widgetId,_9);
-},makeDropTarget:function(_a){
-return new dojo.dnd.TreeDropTargetV3(_a.contentNode,this.treeController,_a.tree.DndAcceptTypes,_a);
-},unlistenNode:function(_b){
-if(this.dragSources[_b.widgetId]){
-dojo.dnd.dragManager.unregisterDragSource(this.dragSources[_b.widgetId]);
-delete this.dragSources[_b.widgetId];
-}
-if(this.dropTargets[_b.widgetId]){
-dojo.dnd.dragManager.unregisterDropTarget(this.dropTargets[_b.widgetId]);
-delete this.dropTargets[_b.widgetId];
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDocIconExtension.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDocIconExtension.js
deleted file mode 100644
index c9e8b4e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeDocIconExtension.js
+++ /dev/null
@@ -1,41 +0,0 @@
-dojo.provide("dojo.widget.TreeDocIconExtension");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.TreeExtension");
-dojo.widget.defineWidget("dojo.widget.TreeDocIconExtension",[dojo.widget.TreeExtension],{templateCssString:"\n/* CSS for TreeDocIconExtension */\n\n\n/* long vertical line under docIcon, connecting w/ children */\n.TreeStateChildrenYes-ExpandOpen .TreeIconContent {\n    background-image : url('../templates/images/TreeV3/i_long.gif');\n    background-repeat : no-repeat;\n    background-position: 18px 9px;\n}\n\n/* close has higher priority */\n.TreeStateChildrenYes-ExpandClosed .TreeIconContent {\n    background-image : url();\n}\n\n/* higher priotity: same length and appear after background-definition */\n.TreeStateChildrenNo-ExpandLeaf .TreeIconContent {\n    background-image : url();\n}\n\n.TreeStateChildrenNo-ExpandClosed .TreeIconContent {\n    background-image : url();\n}\n\n.TreeStateChildrenNo-ExpandOpen .TreeIconContent {\n    background-image : url();\n}\n\n\n/* highest priority */\n.TreeIconDocument {\n    background-image: url('../templates/images/TreeV3/document.gif');\n}\n\n.TreeExpandOpen .TreeIconFolder {\n    background-image: url('../templates/images/TreeV3/open.gif');\n}\n\n.TreeExpandClosed .TreeIconFolder {\n    background-image: url('../templates/images/TreeV3/closed.gif');\n}\n\n/* generic class for docIcon */\n.TreeIcon {\n    width: 18px;\n    height: 18px;\n    float: left;\n    display: inline;\n    background-repeat : no-repeat;\n}\n\ndiv.TreeContent {\n    margin-left: 36px;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/TreeDocIcon.css"),listenTreeEvents:["afterChangeTree","afterSetFolder","afterUnsetFolder"],listenNodeFilter:function(_1){
-return _1 instanceof dojo.widget.Widget;
-},getnodeDocType:function(_2){
-var _3=_2.getnodeDocType();
-if(!_3){
-_3=_2.isFolder?"Folder":"Document";
-}
-return _3;
-},setnodeDocTypeClass:function(_4){
-var _5=new RegExp("(^|\\s)"+_4.tree.classPrefix+"Icon\\w+","g");
-var _6=dojo.html.getClass(_4.iconNode).replace(_5,"")+" "+_4.tree.classPrefix+"Icon"+this.getnodeDocType(_4);
-dojo.html.setClass(_4.iconNode,_6);
-},onAfterSetFolder:function(_7){
-if(_7.source.iconNode){
-this.setnodeDocTypeClass(_7.source);
-}
-},onAfterUnsetFolder:function(_8){
-this.setnodeDocTypeClass(_8.source);
-},listenNode:function(_9){
-_9.contentIconNode=document.createElement("div");
-var _a=_9.tree.classPrefix+"IconContent";
-if(dojo.render.html.ie){
-_a=_a+" "+_9.tree.classPrefix+"IEIconContent";
-}
-dojo.html.setClass(_9.contentIconNode,_a);
-_9.contentNode.parentNode.replaceChild(_9.contentIconNode,_9.expandNode);
-_9.iconNode=document.createElement("div");
-dojo.html.setClass(_9.iconNode,_9.tree.classPrefix+"Icon"+" "+_9.tree.classPrefix+"Icon"+this.getnodeDocType(_9));
-_9.contentIconNode.appendChild(_9.expandNode);
-_9.contentIconNode.appendChild(_9.iconNode);
-dojo.dom.removeNode(_9.contentNode);
-_9.contentIconNode.appendChild(_9.contentNode);
-},onAfterChangeTree:function(_b){
-var _c=this;
-if(!_b.oldTree||!this.listenedTrees[_b.oldTree.widgetId]){
-this.processDescendants(_b.node,this.listenNodeFilter,this.listenNode);
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeEditor.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeEditor.js
deleted file mode 100644
index 7da268e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeEditor.js
+++ /dev/null
@@ -1,54 +0,0 @@
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.RichText");
-dojo.provide("dojo.widget.TreeEditor");
-dojo.widget.defineWidget("dojo.widget.TreeEditor",dojo.widget.HtmlWidget,{singleLineMode:false,saveOnBlur:true,sync:false,selectOnOpen:true,controller:null,node:null,richTextParams:{styleSheets:"src/widget/templates/TreeEditor.css"},getContents:function(){
-return this.richText.getEditorContent();
-},open:function(_1){
-if(!this.richText){
-this.richText=dojo.widget.createWidget("RichText",this.richTextParams,_1.labelNode);
-dojo.event.connect("around",this.richText,"onKeyDown",this,"richText_onKeyDown");
-dojo.event.connect(this.richText,"onBlur",this,"richText_onBlur");
-var _2=this;
-dojo.event.connect(this.richText,"onLoad",function(){
-if(_2.selectOnOpen){
-_2.richText.execCommand("selectall");
-}
-});
-}else{
-this.richText.open(_1.labelNode);
-}
-this.node=_1;
-},close:function(_3){
-this.richText.close(_3);
-this.node=null;
-},isClosed:function(){
-return !this.richText||this.richText.isClosed;
-},execCommand:function(){
-this.richText.execCommand.apply(this.richText,arguments);
-},richText_onKeyDown:function(_4){
-var e=_4.args[0];
-if((!e)&&(this.object)){
-e=dojo.event.browser.fixEvent(this.editor.window.event);
-}
-switch(e.keyCode){
-case e.KEY_ESCAPE:
-this.finish(false);
-dojo.event.browser.stopEvent(e);
-break;
-case e.KEY_ENTER:
-if(e.ctrlKey&&!this.singleLineMode){
-this.execCommand("inserthtml","<br/>");
-}else{
-this.finish(true);
-}
-dojo.event.browser.stopEvent(e);
-break;
-default:
-return _4.proceed();
-}
-},richText_onBlur:function(){
-this.finish(this.saveOnBlur);
-},finish:function(_6){
-return this.controller.editLabelFinish(_6,this.sync);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeEmphasizeOnSelect.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeEmphasizeOnSelect.js
deleted file mode 100644
index 43dd340..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeEmphasizeOnSelect.js
+++ /dev/null
@@ -1,13 +0,0 @@
-dojo.provide("dojo.widget.TreeEmphasizeOnSelect");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.TreeSelectorV3");
-dojo.require("dojo.html.selection");
-dojo.widget.defineWidget("dojo.widget.TreeEmphasizeOnSelect",dojo.widget.HtmlWidget,{selector:"",initialize:function(){
-this.selector=dojo.widget.byId(this.selector);
-dojo.event.topic.subscribe(this.selector.eventNames.select,this,"onSelect");
-dojo.event.topic.subscribe(this.selector.eventNames.deselect,this,"onDeselect");
-},onSelect:function(_1){
-_1.node.viewEmphasize();
-},onDeselect:function(_2){
-_2.node.viewUnemphasize();
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeExpandToNodeOnSelect.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeExpandToNodeOnSelect.js
deleted file mode 100644
index b8a44ca..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeExpandToNodeOnSelect.js
+++ /dev/null
@@ -1,9 +0,0 @@
-dojo.provide("dojo.widget.TreeExpandToNodeOnSelect");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.widget.defineWidget("dojo.widget.TreeExpandToNodeOnSelect",dojo.widget.HtmlWidget,{selector:"",controller:"",withSelected:false,initialize:function(){
-this.selector=dojo.widget.byId(this.selector);
-this.controller=dojo.widget.byId(this.controller);
-dojo.event.topic.subscribe(this.selector.eventNames.select,this,"onSelect");
-},onSelectEvent:function(_1){
-this.controller.expandToNode(_1.node,this.withSelected);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeExtension.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeExtension.js
deleted file mode 100644
index 5f0caf6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeExtension.js
+++ /dev/null
@@ -1,6 +0,0 @@
-dojo.provide("dojo.widget.TreeExtension");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.TreeCommon");
-dojo.widget.defineWidget("dojo.widget.TreeExtension",[dojo.widget.HtmlWidget,dojo.widget.TreeCommon],function(){
-this.listenedTrees={};
-},{});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeLinkExtension.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeLinkExtension.js
deleted file mode 100644
index 1a43f1c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeLinkExtension.js
+++ /dev/null
@@ -1,33 +0,0 @@
-dojo.provide("dojo.widget.TreeLinkExtension");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.TreeExtension");
-dojo.widget.defineWidget("dojo.widget.TreeLinkExtension",dojo.widget.TreeExtension,function(){
-this.params={};
-},{listenTreeEvents:["afterChangeTree"],listenTree:function(_1){
-dojo.widget.TreeCommon.prototype.listenTree.call(this,_1);
-var _2=_1.labelNodeTemplate;
-var _3=this.makeALabel();
-dojo.html.setClass(_3,dojo.html.getClass(_2));
-_2.parentNode.replaceChild(_3,_2);
-},makeALabel:function(){
-var _4=document.createElement("a");
-for(var _5 in this.params){
-if(_5 in {}){
-continue;
-}
-_4.setAttribute(_5,this.params[_5]);
-}
-return _4;
-},onAfterChangeTree:function(_6){
-var _7=this;
-if(!_6.oldTree){
-this.listenNode(_6.node);
-}
-},listenNode:function(_8){
-for(var _9 in _8.object){
-if(_9 in {}){
-continue;
-}
-_8.labelNode.setAttribute(_9,_8.object[_9]);
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeLoadingController.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeLoadingController.js
deleted file mode 100644
index 7b279a5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeLoadingController.js
+++ /dev/null
@@ -1,81 +0,0 @@
-dojo.provide("dojo.widget.TreeLoadingController");
-dojo.require("dojo.widget.TreeBasicController");
-dojo.require("dojo.event.*");
-dojo.require("dojo.json");
-dojo.require("dojo.io.*");
-dojo.widget.defineWidget("dojo.widget.TreeLoadingController",dojo.widget.TreeBasicController,{RPCUrl:"",RPCActionParam:"action",RPCErrorHandler:function(_1,_2,_3){
-alert("RPC Error: "+(_2.message||"no message"));
-},preventCache:true,getRPCUrl:function(_4){
-if(this.RPCUrl=="local"){
-var _5=document.location.href.substr(0,document.location.href.lastIndexOf("/"));
-var _6=_5+"/"+_4;
-return _6;
-}
-if(!this.RPCUrl){
-dojo.raise("Empty RPCUrl: can't load");
-}
-return this.RPCUrl+(this.RPCUrl.indexOf("?")>-1?"&":"?")+this.RPCActionParam+"="+_4;
-},loadProcessResponse:function(_7,_8,_9,_a){
-if(!dojo.lang.isUndefined(_8.error)){
-this.RPCErrorHandler("server",_8.error);
-return false;
-}
-var _b=_8;
-if(!dojo.lang.isArray(_b)){
-dojo.raise("loadProcessResponse: Not array loaded: "+_b);
-}
-for(var i=0;i<_b.length;i++){
-_b[i]=dojo.widget.createWidget(_7.widgetType,_b[i]);
-_7.addChild(_b[i]);
-}
-_7.state=_7.loadStates.LOADED;
-if(dojo.lang.isFunction(_a)){
-_a.apply(dojo.lang.isUndefined(_9)?this:_9,[_7,_b]);
-}
-},getInfo:function(_d){
-return _d.getInfo();
-},runRPC:function(kw){
-var _f=this;
-var _10=function(_11,_12,evt){
-if(kw.lock){
-dojo.lang.forEach(kw.lock,function(t){
-t.unlock();
-});
-}
-if(_11=="load"){
-kw.load.call(this,_12);
-}else{
-this.RPCErrorHandler(_11,_12,evt);
-}
-};
-if(kw.lock){
-dojo.lang.forEach(kw.lock,function(t){
-t.lock();
-});
-}
-dojo.io.bind({url:kw.url,handle:dojo.lang.hitch(this,_10),mimetype:"text/json",preventCache:_f.preventCache,sync:kw.sync,content:{data:dojo.json.serialize(kw.params)}});
-},loadRemote:function(_16,_17,_18,_19){
-var _1a=this;
-var _1b={node:this.getInfo(_16),tree:this.getInfo(_16.tree)};
-this.runRPC({url:this.getRPCUrl("getChildren"),load:function(_1c){
-_1a.loadProcessResponse(_16,_1c,_18,_19);
-},sync:_17,lock:[_16],params:_1b});
-},expand:function(_1d,_1e,_1f,_20){
-if(_1d.state==_1d.loadStates.UNCHECKED&&_1d.isFolder){
-this.loadRemote(_1d,_1e,this,function(_21,_22){
-this.expand(_21,_1e,_1f,_20);
-});
-return;
-}
-dojo.widget.TreeBasicController.prototype.expand.apply(this,arguments);
-},doMove:function(_23,_24,_25){
-if(_24.isTreeNode&&_24.state==_24.loadStates.UNCHECKED){
-this.loadRemote(_24,true);
-}
-return dojo.widget.TreeBasicController.prototype.doMove.apply(this,arguments);
-},doCreateChild:function(_26,_27,_28,_29,_2a){
-if(_26.state==_26.loadStates.UNCHECKED){
-this.loadRemote(_26,true);
-}
-return dojo.widget.TreeBasicController.prototype.doCreateChild.apply(this,arguments);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeLoadingControllerV3.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeLoadingControllerV3.js
deleted file mode 100644
index a1feaae..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeLoadingControllerV3.js
+++ /dev/null
@@ -1,237 +0,0 @@
-dojo.provide("dojo.widget.TreeLoadingControllerV3");
-dojo.require("dojo.widget.TreeBasicControllerV3");
-dojo.require("dojo.event.*");
-dojo.require("dojo.json");
-dojo.require("dojo.io.*");
-dojo.require("dojo.Deferred");
-dojo.require("dojo.DeferredList");
-dojo.declare("dojo.Error",Error,function(_1,_2){
-this.message=_1;
-this.extra=_2;
-this.stack=(new Error()).stack;
-});
-dojo.declare("dojo.CommunicationError",dojo.Error,function(){
-this.name="CommunicationError";
-});
-dojo.declare("dojo.LockedError",dojo.Error,function(){
-this.name="LockedError";
-});
-dojo.declare("dojo.FormatError",dojo.Error,function(){
-this.name="FormatError";
-});
-dojo.declare("dojo.RpcError",dojo.Error,function(){
-this.name="RpcError";
-});
-dojo.widget.defineWidget("dojo.widget.TreeLoadingControllerV3",dojo.widget.TreeBasicControllerV3,{RpcUrl:"",RpcActionParam:"action",preventCache:true,checkValidRpcResponse:function(_3,_4){
-if(_3!="load"){
-var _5={};
-for(var i=1;i<arguments.length;i++){
-dojo.lang.mixin(_5,arguments[i]);
-}
-return new dojo.CommunicationError(_4,_5);
-}
-if(typeof _4!="object"){
-return new dojo.FormatError("Wrong server answer format "+(_4&&_4.toSource?_4.toSource():_4)+" type "+(typeof _4),_4);
-}
-if(!dojo.lang.isUndefined(_4.error)){
-return new dojo.RpcError(_4.error,_4);
-}
-return false;
-},getDeferredBindHandler:function(_7){
-return dojo.lang.hitch(this,function(_8,_9){
-var _a=this.checkValidRpcResponse.apply(this,arguments);
-if(_a){
-_7.errback(_a);
-return;
-}
-_7.callback(_9);
-});
-},getRpcUrl:function(_b){
-if(this.RpcUrl=="local"){
-var _c=document.location.href.substr(0,document.location.href.lastIndexOf("/"));
-var _d=_c+"/local/"+_b;
-return _d;
-}
-if(!this.RpcUrl){
-dojo.raise("Empty RpcUrl: can't load");
-}
-var _e=this.RpcUrl;
-if(_e.indexOf("/")!=0){
-var _f=document.location.href.replace(/:\/\/.*/,"");
-var _10=document.location.href.substring(_f.length+3);
-if(_10.lastIndexOf("/")!=_10.length-1){
-_10=_10.replace(/\/[^\/]+$/,"/");
-}
-if(_10.lastIndexOf("/")!=_10.length-1){
-_10=_10+"/";
-}
-_e=_f+"://"+_10+_e;
-}
-return _e+(_e.indexOf("?")>-1?"&":"?")+this.RpcActionParam+"="+_b;
-},loadProcessResponse:function(_11,_12){
-if(!dojo.lang.isArray(_12)){
-throw new dojo.FormatError("loadProcessResponse: Not array loaded: "+_12);
-}
-_11.setChildren(_12);
-},runRpc:function(kw){
-var _14=this;
-var _15=new dojo.Deferred();
-dojo.io.bind({url:kw.url,handle:this.getDeferredBindHandler(_15),mimetype:"text/javascript",preventCache:this.preventCache,sync:kw.sync,content:{data:dojo.json.serialize(kw.params)}});
-return _15;
-},loadRemote:function(_16,_17){
-var _18=this;
-var _19={node:this.getInfo(_16),tree:this.getInfo(_16.tree)};
-var _1a=this.runRpc({url:this.getRpcUrl("getChildren"),sync:_17,params:_19});
-_1a.addCallback(function(res){
-return _18.loadProcessResponse(_16,res);
-});
-return _1a;
-},batchExpandTimeout:0,recurseToLevel:function(_1c,_1d,_1e,_1f,_20,_21){
-if(_1d==0){
-return;
-}
-if(!_20){
-var _22=_1e.call(_1f,_1c,_21);
-}else{
-var _22=dojo.Deferred.prototype.makeCalled();
-}
-var _23=this;
-var _24=function(){
-var _25=_1c.children;
-var _26=[];
-for(var i=0;i<_25.length;i++){
-_26.push(_23.recurseToLevel(_25[i],_1d-1,_1e,_1f,_21));
-}
-return new dojo.DeferredList(_26);
-};
-_22.addCallback(_24);
-return _22;
-},expandToLevel:function(_28,_29,_2a){
-return this.recurseToLevel(_28,_28.isTree?_29+1:_29,this.expand,this,_28.isTree,_2a);
-},loadToLevel:function(_2b,_2c,_2d){
-return this.recurseToLevel(_2b,_2b.isTree?_2c+1:_2c,this.loadIfNeeded,this,_2b.isTree,_2d);
-},loadAll:function(_2e,_2f){
-return this.loadToLevel(_2e,Number.POSITIVE_INFINITY,_2f);
-},expand:function(_30,_31){
-var _32=this;
-var _33=this.startProcessing(_30);
-_33.addCallback(function(){
-return _32.loadIfNeeded(_30,_31);
-});
-_33.addCallback(function(res){
-dojo.widget.TreeBasicControllerV3.prototype.expand(_30);
-return res;
-});
-_33.addBoth(function(res){
-_32.finishProcessing(_30);
-return res;
-});
-return _33;
-},loadIfNeeded:function(_36,_37){
-var _38;
-if(_36.state==_36.loadStates.UNCHECKED&&_36.isFolder&&!_36.children.length){
-_38=this.loadRemote(_36,_37);
-}else{
-_38=new dojo.Deferred();
-_38.callback();
-}
-return _38;
-},runStages:function(_39,_3a,_3b,_3c,_3d,_3e){
-var _3f=this;
-if(_39&&!_39.apply(this,_3e)){
-return false;
-}
-var _40=dojo.Deferred.prototype.makeCalled();
-if(_3a){
-_40.addCallback(function(){
-return _3a.apply(_3f,_3e);
-});
-}
-if(_3b){
-_40.addCallback(function(){
-var res=_3b.apply(_3f,_3e);
-return res;
-});
-}
-if(_3c){
-_40.addBoth(function(res){
-_3c.apply(_3f,_3e);
-return res;
-});
-}
-if(_3d){
-_40.addCallback(function(res){
-_3d.apply(_3f,_3e);
-return res;
-});
-}
-return _40;
-},startProcessing:function(_44){
-var _45=new dojo.Deferred();
-var _46=dojo.lang.isArray(_44)?_44:arguments;
-for(var i=0;i<_46.length;i++){
-if(_46[i].isLocked()){
-_45.errback(new dojo.LockedError("item locked "+_46[i],_46[i]));
-return _45;
-}
-if(_46[i].isTreeNode){
-_46[i].markProcessing();
-}
-_46[i].lock();
-}
-_45.callback();
-return _45;
-},finishProcessing:function(_48){
-var _49=dojo.lang.isArray(_48)?_48:arguments;
-for(var i=0;i<_49.length;i++){
-if(!_49[i].hasLock()){
-continue;
-}
-_49[i].unlock();
-if(_49[i].isTreeNode){
-_49[i].unmarkProcessing();
-}
-}
-},refreshChildren:function(_4b,_4c){
-return this.runStages(null,this.prepareRefreshChildren,this.doRefreshChildren,this.finalizeRefreshChildren,this.exposeRefreshChildren,arguments);
-},prepareRefreshChildren:function(_4d,_4e){
-var _4f=this.startProcessing(_4d);
-_4d.destroyChildren();
-_4d.state=_4d.loadStates.UNCHECKED;
-return _4f;
-},doRefreshChildren:function(_50,_51){
-return this.loadRemote(_50,_51);
-},finalizeRefreshChildren:function(_52,_53){
-this.finishProcessing(_52);
-},exposeRefreshChildren:function(_54,_55){
-_54.expand();
-},move:function(_56,_57,_58){
-return this.runStages(this.canMove,this.prepareMove,this.doMove,this.finalizeMove,this.exposeMove,arguments);
-},doMove:function(_59,_5a,_5b){
-_59.tree.move(_59,_5a,_5b);
-return true;
-},prepareMove:function(_5c,_5d,_5e,_5f){
-var _60=this.startProcessing(_5d);
-_60.addCallback(dojo.lang.hitch(this,function(){
-return this.loadIfNeeded(_5d,_5f);
-}));
-return _60;
-},finalizeMove:function(_61,_62){
-this.finishProcessing(_62);
-},prepareCreateChild:function(_63,_64,_65,_66){
-var _67=this.startProcessing(_63);
-_67.addCallback(dojo.lang.hitch(this,function(){
-return this.loadIfNeeded(_63,_66);
-}));
-return _67;
-},finalizeCreateChild:function(_68){
-this.finishProcessing(_68);
-},prepareClone:function(_69,_6a,_6b,_6c,_6d){
-var _6e=this.startProcessing(_69,_6a);
-_6e.addCallback(dojo.lang.hitch(this,function(){
-return this.loadIfNeeded(_6a,_6d);
-}));
-return _6e;
-},finalizeClone:function(_6f,_70){
-this.finishProcessing(_6f,_70);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeNode.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeNode.js
deleted file mode 100644
index fe601aa..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeNode.js
+++ /dev/null
@@ -1,233 +0,0 @@
-dojo.provide("dojo.widget.TreeNode");
-dojo.require("dojo.html.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.io.*");
-dojo.widget.defineWidget("dojo.widget.TreeNode",dojo.widget.HtmlWidget,function(){
-this.actionsDisabled=[];
-},{widgetType:"TreeNode",loadStates:{UNCHECKED:"UNCHECKED",LOADING:"LOADING",LOADED:"LOADED"},actions:{MOVE:"MOVE",REMOVE:"REMOVE",EDIT:"EDIT",ADDCHILD:"ADDCHILD"},isContainer:true,lockLevel:0,templateString:("<div class=\"dojoTreeNode\"> "+"<span treeNode=\"${this.widgetId}\" class=\"dojoTreeNodeLabel\" dojoAttachPoint=\"labelNode\"> "+"\t\t<span dojoAttachPoint=\"titleNode\" dojoAttachEvent=\"onClick: onTitleClick\" class=\"dojoTreeNodeLabelTitle\">${this.title}</span> "+"</span> "+"<span class=\"dojoTreeNodeAfterLabel\" dojoAttachPoint=\"afterLabelNode\">${this.afterLabel}</span> "+"<div dojoAttachPoint=\"containerNode\" style=\"display:none\"></div> "+"</div>").replace(/(>|<)\s+/g,"$1"),childIconSrc:"",childIconFolderSrc:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/closed.gif"),childIconDocumentSrc:dojo.uri.moduleUri("dojo.widget","templates/images/Tree/document.gif"),childIcon:null,isTreeNode:true,objectId:"",afterLabel:"",afterLabelNode:null,expandIcon:null,title:"",object:"",isFolder:false,labelNode:null,titleNode:null,imgs:null,expandLevel:"",tree:null,depth:0,isExpanded:false,state:null,domNodeInitialized:false,isFirstChild:function(){
-return this.getParentIndex()==0?true:false;
-},isLastChild:function(){
-return this.getParentIndex()==this.parent.children.length-1?true:false;
-},lock:function(){
-return this.tree.lock.apply(this,arguments);
-},unlock:function(){
-return this.tree.unlock.apply(this,arguments);
-},isLocked:function(){
-return this.tree.isLocked.apply(this,arguments);
-},cleanLock:function(){
-return this.tree.cleanLock.apply(this,arguments);
-},actionIsDisabled:function(_1){
-var _2=this;
-var _3=false;
-if(this.tree.strictFolders&&_1==this.actions.ADDCHILD&&!this.isFolder){
-_3=true;
-}
-if(dojo.lang.inArray(_2.actionsDisabled,_1)){
-_3=true;
-}
-if(this.isLocked()){
-_3=true;
-}
-return _3;
-},getInfo:function(){
-var _4={widgetId:this.widgetId,objectId:this.objectId,index:this.getParentIndex(),isFolder:this.isFolder};
-return _4;
-},initialize:function(_5,_6){
-this.state=this.loadStates.UNCHECKED;
-for(var i=0;i<this.actionsDisabled.length;i++){
-this.actionsDisabled[i]=this.actionsDisabled[i].toUpperCase();
-}
-this.expandLevel=parseInt(this.expandLevel);
-},adjustDepth:function(_8){
-for(var i=0;i<this.children.length;i++){
-this.children[i].adjustDepth(_8);
-}
-this.depth+=_8;
-if(_8>0){
-for(var i=0;i<_8;i++){
-var _a=this.tree.makeBlankImg();
-this.imgs.unshift(_a);
-dojo.html.insertBefore(this.imgs[0],this.domNode.firstChild);
-}
-}
-if(_8<0){
-for(var i=0;i<-_8;i++){
-this.imgs.shift();
-dojo.html.removeNode(this.domNode.firstChild);
-}
-}
-},markLoading:function(){
-this._markLoadingSavedIcon=this.expandIcon.src;
-this.expandIcon.src=this.tree.expandIconSrcLoading;
-},unMarkLoading:function(){
-if(!this._markLoadingSavedIcon){
-return;
-}
-var im=new Image();
-im.src=this.tree.expandIconSrcLoading;
-if(this.expandIcon.src==im.src){
-this.expandIcon.src=this._markLoadingSavedIcon;
-}
-this._markLoadingSavedIcon=null;
-},setFolder:function(){
-dojo.event.connect(this.expandIcon,"onclick",this,"onTreeClick");
-this.expandIcon.src=this.isExpanded?this.tree.expandIconSrcMinus:this.tree.expandIconSrcPlus;
-this.isFolder=true;
-},createDOMNode:function(_c,_d){
-this.tree=_c;
-this.depth=_d;
-this.imgs=[];
-for(var i=0;i<this.depth+1;i++){
-var _f=this.tree.makeBlankImg();
-this.domNode.insertBefore(_f,this.labelNode);
-this.imgs.push(_f);
-}
-this.expandIcon=this.imgs[this.imgs.length-1];
-this.childIcon=this.tree.makeBlankImg();
-this.imgs.push(this.childIcon);
-dojo.html.insertBefore(this.childIcon,this.titleNode);
-if(this.children.length||this.isFolder){
-this.setFolder();
-}else{
-this.state=this.loadStates.LOADED;
-}
-dojo.event.connect(this.childIcon,"onclick",this,"onIconClick");
-for(var i=0;i<this.children.length;i++){
-this.children[i].parent=this;
-var _10=this.children[i].createDOMNode(this.tree,this.depth+1);
-this.containerNode.appendChild(_10);
-}
-if(this.children.length){
-this.state=this.loadStates.LOADED;
-}
-this.updateIcons();
-this.domNodeInitialized=true;
-dojo.event.topic.publish(this.tree.eventNames.createDOMNode,{source:this});
-return this.domNode;
-},onTreeClick:function(e){
-dojo.event.topic.publish(this.tree.eventNames.treeClick,{source:this,event:e});
-},onIconClick:function(e){
-dojo.event.topic.publish(this.tree.eventNames.iconClick,{source:this,event:e});
-},onTitleClick:function(e){
-dojo.event.topic.publish(this.tree.eventNames.titleClick,{source:this,event:e});
-},markSelected:function(){
-dojo.html.addClass(this.titleNode,"dojoTreeNodeLabelSelected");
-},unMarkSelected:function(){
-dojo.html.removeClass(this.titleNode,"dojoTreeNodeLabelSelected");
-},updateExpandIcon:function(){
-if(this.isFolder){
-this.expandIcon.src=this.isExpanded?this.tree.expandIconSrcMinus:this.tree.expandIconSrcPlus;
-}else{
-this.expandIcon.src=this.tree.blankIconSrc;
-}
-},updateExpandGrid:function(){
-if(this.tree.showGrid){
-if(this.depth){
-this.setGridImage(-2,this.isLastChild()?this.tree.gridIconSrcL:this.tree.gridIconSrcT);
-}else{
-if(this.isFirstChild()){
-this.setGridImage(-2,this.isLastChild()?this.tree.gridIconSrcX:this.tree.gridIconSrcY);
-}else{
-this.setGridImage(-2,this.isLastChild()?this.tree.gridIconSrcL:this.tree.gridIconSrcT);
-}
-}
-}else{
-this.setGridImage(-2,this.tree.blankIconSrc);
-}
-},updateChildGrid:function(){
-if((this.depth||this.tree.showRootGrid)&&this.tree.showGrid){
-this.setGridImage(-1,(this.children.length&&this.isExpanded)?this.tree.gridIconSrcP:this.tree.gridIconSrcC);
-}else{
-if(this.tree.showGrid&&!this.tree.showRootGrid){
-this.setGridImage(-1,(this.children.length&&this.isExpanded)?this.tree.gridIconSrcZ:this.tree.blankIconSrc);
-}else{
-this.setGridImage(-1,this.tree.blankIconSrc);
-}
-}
-},updateParentGrid:function(){
-var _14=this.parent;
-for(var i=0;i<this.depth;i++){
-var idx=this.imgs.length-(3+i);
-var img=(this.tree.showGrid&&!_14.isLastChild())?this.tree.gridIconSrcV:this.tree.blankIconSrc;
-this.setGridImage(idx,img);
-_14=_14.parent;
-}
-},updateExpandGridColumn:function(){
-if(!this.tree.showGrid){
-return;
-}
-var _18=this;
-var _19=this.isLastChild()?this.tree.blankIconSrc:this.tree.gridIconSrcV;
-dojo.lang.forEach(_18.getDescendants(),function(_1a){
-_1a.setGridImage(_18.depth,_19);
-});
-this.updateExpandGrid();
-},updateIcons:function(){
-this.imgs[0].style.display=this.tree.showRootGrid?"inline":"none";
-this.buildChildIcon();
-this.updateExpandGrid();
-this.updateChildGrid();
-this.updateParentGrid();
-dojo.profile.stop("updateIcons");
-},buildChildIcon:function(){
-if(this.childIconSrc){
-this.childIcon.src=this.childIconSrc;
-}
-this.childIcon.style.display=this.childIconSrc?"inline":"none";
-},setGridImage:function(idx,src){
-if(idx<0){
-idx=this.imgs.length+idx;
-}
-this.imgs[idx].style.backgroundImage="url("+src+")";
-},updateIconTree:function(){
-this.tree.updateIconTree.call(this);
-},expand:function(){
-if(this.isExpanded){
-return;
-}
-if(this.children.length){
-this.showChildren();
-}
-this.isExpanded=true;
-this.updateExpandIcon();
-dojo.event.topic.publish(this.tree.eventNames.expand,{source:this});
-},collapse:function(){
-if(!this.isExpanded){
-return;
-}
-this.hideChildren();
-this.isExpanded=false;
-this.updateExpandIcon();
-dojo.event.topic.publish(this.tree.eventNames.collapse,{source:this});
-},hideChildren:function(){
-this.tree.toggleObj.hide(this.containerNode,this.toggleDuration,this.explodeSrc,dojo.lang.hitch(this,"onHide"));
-if(dojo.exists(dojo,"dnd.dragManager.dragObjects")&&dojo.dnd.dragManager.dragObjects.length){
-dojo.dnd.dragManager.cacheTargetLocations();
-}
-},showChildren:function(){
-this.tree.toggleObj.show(this.containerNode,this.toggleDuration,this.explodeSrc,dojo.lang.hitch(this,"onShow"));
-if(dojo.exists(dojo,"dnd.dragManager.dragObjects")&&dojo.dnd.dragManager.dragObjects.length){
-dojo.dnd.dragManager.cacheTargetLocations();
-}
-},addChild:function(){
-return this.tree.addChild.apply(this,arguments);
-},doAddChild:function(){
-return this.tree.doAddChild.apply(this,arguments);
-},edit:function(_1d){
-dojo.lang.mixin(this,_1d);
-if(_1d.title){
-this.titleNode.innerHTML=this.title;
-}
-if(_1d.afterLabel){
-this.afterLabelNode.innerHTML=this.afterLabel;
-}
-if(_1d.childIconSrc){
-this.buildChildIcon();
-}
-},removeNode:function(){
-return this.tree.removeNode.apply(this,arguments);
-},doRemoveNode:function(){
-return this.tree.doRemoveNode.apply(this,arguments);
-},toString:function(){
-return "["+this.widgetType+" Tree:"+this.tree+" ID:"+this.widgetId+" Title:"+this.title+"]";
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeNodeV3.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeNodeV3.js
deleted file mode 100644
index ec1bc0d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeNodeV3.js
+++ /dev/null
@@ -1,297 +0,0 @@
-dojo.provide("dojo.widget.TreeNodeV3");
-dojo.require("dojo.html.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.TreeWithNode");
-dojo.widget.defineWidget("dojo.widget.TreeNodeV3",[dojo.widget.HtmlWidget,dojo.widget.TreeWithNode],function(){
-this.actionsDisabled=[];
-this.object={};
-},{tryLazyInit:true,actions:{MOVE:"MOVE",DETACH:"DETACH",EDIT:"EDIT",ADDCHILD:"ADDCHILD",SELECT:"SELECT"},labelClass:"",contentClass:"",expandNode:null,labelNode:null,nodeDocType:"",selected:false,getnodeDocType:function(){
-return this.nodeDocType;
-},cloneProperties:["actionsDisabled","tryLazyInit","nodeDocType","objectId","object","title","isFolder","isExpanded","state"],clone:function(_1){
-var _2=new this.constructor();
-for(var i=0;i<this.cloneProperties.length;i++){
-var _4=this.cloneProperties[i];
-_2[_4]=dojo.lang.shallowCopy(this[_4],true);
-}
-if(this.tree.unsetFolderOnEmpty&&!_1&&this.isFolder){
-_2.isFolder=false;
-}
-_2.toggleObj=this.toggleObj;
-dojo.widget.manager.add(_2);
-_2.tree=this.tree;
-_2.buildRendering({},{});
-_2.initialize({},{});
-if(_1&&this.children.length){
-for(var i=0;i<this.children.length;i++){
-var _5=this.children[i];
-if(_5.clone){
-_2.children.push(_5.clone(_1));
-}else{
-_2.children.push(dojo.lang.shallowCopy(_5,_1));
-}
-}
-_2.setChildren();
-}
-return _2;
-},markProcessing:function(){
-this.markProcessingSavedClass=dojo.html.getClass(this.expandNode);
-dojo.html.setClass(this.expandNode,this.tree.classPrefix+"ExpandLoading");
-},unmarkProcessing:function(){
-dojo.html.setClass(this.expandNode,this.markProcessingSavedClass);
-},buildRendering:function(_6,_7,_8){
-if(_6.tree){
-this.tree=dojo.lang.isString(_6.tree)?dojo.widget.manager.getWidgetById(_6.tree):_6.tree;
-}else{
-if(_8&&_8.tree){
-this.tree=_8.tree;
-}
-}
-if(!this.tree){
-dojo.raise("Can't evaluate tree from arguments or parent");
-}
-this.domNode=this.tree.nodeTemplate.cloneNode(true);
-this.expandNode=this.domNode.firstChild;
-this.contentNode=this.domNode.childNodes[1];
-this.labelNode=this.contentNode.firstChild;
-if(this.labelClass){
-dojo.html.addClass(this.labelNode,this.labelClass);
-}
-if(this.contentClass){
-dojo.html.addClass(this.contentNode,this.contentClass);
-}
-this.domNode.widgetId=this.widgetId;
-this.labelNode.innerHTML=this.title;
-},isTreeNode:true,object:{},title:"",isFolder:null,contentNode:null,expandClass:"",isExpanded:false,containerNode:null,getInfo:function(){
-var _9={widgetId:this.widgetId,objectId:this.objectId,index:this.getParentIndex()};
-return _9;
-},setFolder:function(){
-this.isFolder=true;
-this.viewSetExpand();
-if(!this.containerNode){
-this.viewAddContainer();
-}
-dojo.event.topic.publish(this.tree.eventNames.afterSetFolder,{source:this});
-},initialize:function(_a,_b,_c){
-if(_a.isFolder){
-this.isFolder=true;
-}
-if(this.children.length||this.isFolder){
-this.setFolder();
-}else{
-this.viewSetExpand();
-}
-for(var i=0;i<this.actionsDisabled.length;i++){
-this.actionsDisabled[i]=this.actionsDisabled[i].toUpperCase();
-}
-dojo.event.topic.publish(this.tree.eventNames.afterChangeTree,{oldTree:null,newTree:this.tree,node:this});
-},unsetFolder:function(){
-this.isFolder=false;
-this.viewSetExpand();
-dojo.event.topic.publish(this.tree.eventNames.afterUnsetFolder,{source:this});
-},insertNode:function(_e,_f){
-if(!_f){
-_f=0;
-}
-if(_f==0){
-dojo.html.prependChild(this.domNode,_e.containerNode);
-}else{
-dojo.html.insertAfter(this.domNode,_e.children[_f-1].domNode);
-}
-},updateTree:function(_10){
-if(this.tree===_10){
-return;
-}
-var _11=this.tree;
-dojo.lang.forEach(this.getDescendants(),function(_12){
-_12.tree=_10;
-});
-if(_11.classPrefix!=_10.classPrefix){
-var _13=[this.domNode];
-var _14;
-var reg=new RegExp("(^|\\s)"+_11.classPrefix,"g");
-while(_14=_13.pop()){
-for(var i=0;i<_14.childNodes.length;i++){
-var _17=_14.childNodes[i];
-if(_17.nodeDocType!=1){
-continue;
-}
-dojo.html.setClass(_17,dojo.html.getClass(_17).replace(reg,"$1"+_10.classPrefix));
-_13.push(_17);
-}
-}
-}
-var _18={oldTree:_11,newTree:_10,node:this};
-dojo.event.topic.publish(this.tree.eventNames.afterChangeTree,_18);
-dojo.event.topic.publish(_10.eventNames.afterChangeTree,_18);
-},addedTo:function(_19,_1a,_1b){
-if(this.tree!==_19.tree){
-this.updateTree(_19.tree);
-}
-if(_19.isTreeNode){
-if(!_19.isFolder){
-_19.setFolder();
-_19.state=_19.loadStates.LOADED;
-}
-}
-var _1c=_19.children.length;
-this.insertNode(_19,_1a);
-this.viewAddLayout();
-if(_1c>1){
-if(_1a==0&&_19.children[1] instanceof dojo.widget.Widget){
-_19.children[1].viewUpdateLayout();
-}
-if(_1a==_1c-1&&_19.children[_1c-2] instanceof dojo.widget.Widget){
-_19.children[_1c-2].viewUpdateLayout();
-}
-}else{
-if(_19.isTreeNode){
-_19.viewSetHasChildren();
-}
-}
-if(!_1b){
-var _1d={child:this,index:_1a,parent:_19};
-dojo.event.topic.publish(this.tree.eventNames.afterAddChild,_1d);
-}
-},createSimple:function(_1e,_1f){
-if(_1e.tree){
-var _20=_1e.tree;
-}else{
-if(_1f){
-var _20=_1f.tree;
-}else{
-dojo.raise("createSimple: can't evaluate tree");
-}
-}
-_20=dojo.widget.byId(_20);
-var _21=new _20.defaultChildWidget();
-for(var x in _1e){
-_21[x]=_1e[x];
-}
-_21.toggleObj=dojo.lfx.toggle[_21.toggle.toLowerCase()]||dojo.lfx.toggle.plain;
-dojo.widget.manager.add(_21);
-_21.buildRendering(_1e,{},_1f);
-_21.initialize(_1e,{},_1f);
-if(_21.parent){
-delete dojo.widget.manager.topWidgets[_21.widgetId];
-}
-return _21;
-},viewUpdateLayout:function(){
-this.viewRemoveLayout();
-this.viewAddLayout();
-},viewAddContainer:function(){
-this.containerNode=this.tree.containerNodeTemplate.cloneNode(true);
-this.domNode.appendChild(this.containerNode);
-},viewAddLayout:function(){
-if(this.parent["isTree"]){
-dojo.html.setClass(this.domNode,dojo.html.getClass(this.domNode)+" "+this.tree.classPrefix+"IsRoot");
-}
-if(this.isLastChild()){
-dojo.html.setClass(this.domNode,dojo.html.getClass(this.domNode)+" "+this.tree.classPrefix+"IsLast");
-}
-},viewRemoveLayout:function(){
-dojo.html.removeClass(this.domNode,this.tree.classPrefix+"IsRoot");
-dojo.html.removeClass(this.domNode,this.tree.classPrefix+"IsLast");
-},viewGetExpandClass:function(){
-if(this.isFolder){
-return this.isExpanded?"ExpandOpen":"ExpandClosed";
-}else{
-return "ExpandLeaf";
-}
-},viewSetExpand:function(){
-var _23=this.tree.classPrefix+this.viewGetExpandClass();
-var reg=new RegExp("(^|\\s)"+this.tree.classPrefix+"Expand\\w+","g");
-dojo.html.setClass(this.domNode,dojo.html.getClass(this.domNode).replace(reg,"")+" "+_23);
-this.viewSetHasChildrenAndExpand();
-},viewGetChildrenClass:function(){
-return "Children"+(this.children.length?"Yes":"No");
-},viewSetHasChildren:function(){
-var _25=this.tree.classPrefix+this.viewGetChildrenClass();
-var reg=new RegExp("(^|\\s)"+this.tree.classPrefix+"Children\\w+","g");
-dojo.html.setClass(this.domNode,dojo.html.getClass(this.domNode).replace(reg,"")+" "+_25);
-this.viewSetHasChildrenAndExpand();
-},viewSetHasChildrenAndExpand:function(){
-var _27=this.tree.classPrefix+"State"+this.viewGetChildrenClass()+"-"+this.viewGetExpandClass();
-var reg=new RegExp("(^|\\s)"+this.tree.classPrefix+"State[\\w-]+","g");
-dojo.html.setClass(this.domNode,dojo.html.getClass(this.domNode).replace(reg,"")+" "+_27);
-},viewUnfocus:function(){
-dojo.html.removeClass(this.labelNode,this.tree.classPrefix+"LabelFocused");
-},viewFocus:function(){
-dojo.html.addClass(this.labelNode,this.tree.classPrefix+"LabelFocused");
-},viewEmphasize:function(){
-dojo.html.clearSelection(this.labelNode);
-dojo.html.addClass(this.labelNode,this.tree.classPrefix+"NodeEmphasized");
-},viewUnemphasize:function(){
-dojo.html.removeClass(this.labelNode,this.tree.classPrefix+"NodeEmphasized");
-},detach:function(){
-if(!this.parent){
-return;
-}
-var _29=this.parent;
-var _2a=this.getParentIndex();
-this.doDetach.apply(this,arguments);
-dojo.event.topic.publish(this.tree.eventNames.afterDetach,{child:this,parent:_29,index:_2a});
-},doDetach:function(){
-var _2b=this.parent;
-if(!_2b){
-return;
-}
-var _2c=this.getParentIndex();
-this.viewRemoveLayout();
-dojo.widget.DomWidget.prototype.removeChild.call(_2b,this);
-var _2d=_2b.children.length;
-if(_2d>0){
-if(_2c==0){
-_2b.children[0].viewUpdateLayout();
-}
-if(_2c==_2d){
-_2b.children[_2d-1].viewUpdateLayout();
-}
-}else{
-if(_2b.isTreeNode){
-_2b.viewSetHasChildren();
-}
-}
-if(this.tree.unsetFolderOnEmpty&&!_2b.children.length&&_2b.isTreeNode){
-_2b.unsetFolder();
-}
-this.parent=null;
-},destroy:function(){
-dojo.event.topic.publish(this.tree.eventNames.beforeNodeDestroy,{source:this});
-this.detach();
-return dojo.widget.HtmlWidget.prototype.destroy.apply(this,arguments);
-},expand:function(){
-if(this.isExpanded){
-return;
-}
-if(this.tryLazyInit){
-this.setChildren();
-this.tryLazyInit=false;
-}
-this.isExpanded=true;
-this.viewSetExpand();
-this.showChildren();
-},collapse:function(){
-if(!this.isExpanded){
-return;
-}
-this.isExpanded=false;
-this.hideChildren();
-},hideChildren:function(){
-this.tree.toggleObj.hide(this.containerNode,this.tree.toggleDuration,this.explodeSrc,dojo.lang.hitch(this,"onHideChildren"));
-},showChildren:function(){
-this.tree.toggleObj.show(this.containerNode,this.tree.toggleDuration,this.explodeSrc,dojo.lang.hitch(this,"onShowChildren"));
-},onShowChildren:function(){
-this.onShow();
-dojo.event.topic.publish(this.tree.eventNames.afterExpand,{source:this});
-},onHideChildren:function(){
-this.viewSetExpand();
-this.onHide();
-dojo.event.topic.publish(this.tree.eventNames.afterCollapse,{source:this});
-},setTitle:function(_2e){
-var _2f=this.title;
-this.labelNode.innerHTML=this.title=_2e;
-dojo.event.topic.publish(this.tree.eventNames.afterSetTitle,{source:this,oldTitle:_2f});
-},toString:function(){
-return "["+this.widgetType+", "+this.title+"]";
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeRPCController.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeRPCController.js
deleted file mode 100644
index a0cc771..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeRPCController.js
+++ /dev/null
@@ -1,59 +0,0 @@
-dojo.provide("dojo.widget.TreeRPCController");
-dojo.require("dojo.event.*");
-dojo.require("dojo.json");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.TreeLoadingController");
-dojo.widget.defineWidget("dojo.widget.TreeRPCController",dojo.widget.TreeLoadingController,{doMove:function(_1,_2,_3){
-var _4={child:this.getInfo(_1),childTree:this.getInfo(_1.tree),newParent:this.getInfo(_2),newParentTree:this.getInfo(_2.tree),newIndex:_3};
-var _5;
-this.runRPC({url:this.getRPCUrl("move"),load:function(_6){
-_5=this.doMoveProcessResponse(_6,_1,_2,_3);
-},sync:true,lock:[_1,_2],params:_4});
-return _5;
-},doMoveProcessResponse:function(_7,_8,_9,_a){
-if(!dojo.lang.isUndefined(_7.error)){
-this.RPCErrorHandler("server",_7.error);
-return false;
-}
-var _b=[_8,_9,_a];
-return dojo.widget.TreeLoadingController.prototype.doMove.apply(this,_b);
-},doRemoveNode:function(_c,_d,_e){
-var _f={node:this.getInfo(_c),tree:this.getInfo(_c.tree)};
-this.runRPC({url:this.getRPCUrl("removeNode"),load:function(_10){
-this.doRemoveNodeProcessResponse(_10,_c,_d,_e);
-},params:_f,lock:[_c]});
-},doRemoveNodeProcessResponse:function(_11,_12,_13,_14){
-if(!dojo.lang.isUndefined(_11.error)){
-this.RPCErrorHandler("server",_11.error);
-return false;
-}
-if(!_11){
-return false;
-}
-if(_11==true){
-var _15=[_12,_13,_14];
-dojo.widget.TreeLoadingController.prototype.doRemoveNode.apply(this,_15);
-return;
-}else{
-if(dojo.lang.isObject(_11)){
-dojo.raise(_11.error);
-}else{
-dojo.raise("Invalid response "+_11);
-}
-}
-},doCreateChild:function(_16,_17,_18,_19,_1a){
-var _1b={tree:this.getInfo(_16.tree),parent:this.getInfo(_16),index:_17,data:_18};
-this.runRPC({url:this.getRPCUrl("createChild"),load:function(_1c){
-this.doCreateChildProcessResponse(_1c,_16,_17,_19,_1a);
-},params:_1b,lock:[_16]});
-},doCreateChildProcessResponse:function(_1d,_1e,_1f,_20,_21){
-if(!dojo.lang.isUndefined(_1d.error)){
-this.RPCErrorHandler("server",_1d.error);
-return false;
-}
-if(!dojo.lang.isObject(_1d)){
-dojo.raise("Invalid result "+_1d);
-}
-var _22=[_1e,_1f,_1d,_20,_21];
-dojo.widget.TreeLoadingController.prototype.doCreateChild.apply(this,_22);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeRpcControllerV3.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeRpcControllerV3.js
deleted file mode 100644
index 0b4711f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeRpcControllerV3.js
+++ /dev/null
@@ -1,169 +0,0 @@
-dojo.provide("dojo.widget.TreeRpcControllerV3");
-dojo.require("dojo.event.*");
-dojo.require("dojo.json");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.TreeLoadingControllerV3");
-dojo.widget.defineWidget("dojo.widget.TreeRpcControllerV3",dojo.widget.TreeLoadingControllerV3,{extraRpcOnEdit:false,doMove:function(_1,_2,_3,_4){
-var _5={child:this.getInfo(_1),childTree:this.getInfo(_1.tree),oldParent:this.getInfo(_1.parent),oldParentTree:this.getInfo(_1.parent.tree),newParent:this.getInfo(_2),newParentTree:this.getInfo(_2.tree),newIndex:_3};
-var _6=this.runRpc({url:this.getRpcUrl("move"),sync:_4,params:_5});
-var _7=this;
-var _8=arguments;
-_6.addCallback(function(){
-dojo.widget.TreeBasicControllerV3.prototype.doMove.apply(_7,_8);
-});
-return _6;
-},prepareDetach:function(_9,_a){
-var _b=this.startProcessing(_9);
-return _b;
-},finalizeDetach:function(_c){
-this.finishProcessing(_c);
-},doDetach:function(_d,_e){
-var _f={node:this.getInfo(_d),tree:this.getInfo(_d.tree)};
-var _10=this.runRpc({url:this.getRpcUrl("detach"),sync:_e,params:_f});
-var _11=this;
-var _12=arguments;
-_10.addCallback(function(){
-dojo.widget.TreeBasicControllerV3.prototype.doDetach.apply(_11,_12);
-});
-return _10;
-},requestEditConfirmation:function(_13,_14,_15){
-if(!this.extraRpcOnEdit){
-return dojo.Deferred.prototype.makeCalled();
-}
-var _16=this;
-var _17=this.startProcessing(_13);
-var _18={node:this.getInfo(_13),tree:this.getInfo(_13.tree)};
-_17.addCallback(function(){
-return _16.runRpc({url:_16.getRpcUrl(_14),sync:_15,params:_18});
-});
-_17.addBoth(function(r){
-_16.finishProcessing(_13);
-return r;
-});
-return _17;
-},editLabelSave:function(_1a,_1b,_1c){
-var _1d=this.startProcessing(_1a);
-var _1e=this;
-var _1f={node:this.getInfo(_1a),tree:this.getInfo(_1a.tree),newContent:_1b};
-_1d.addCallback(function(){
-return _1e.runRpc({url:_1e.getRpcUrl("editLabelSave"),sync:_1c,params:_1f});
-});
-_1d.addBoth(function(r){
-_1e.finishProcessing(_1a);
-return r;
-});
-return _1d;
-},editLabelStart:function(_21,_22){
-if(!this.canEditLabel(_21)){
-return false;
-}
-var _23=this;
-if(!this.editor.isClosed()){
-var _24=this.editLabelFinish(this.editor.saveOnBlur,_22);
-_24.addCallback(function(){
-return _23.editLabelStart(_21,_22);
-});
-return _24;
-}
-var _24=this.requestEditConfirmation(_21,"editLabelStart",_22);
-_24.addCallback(function(){
-_23.doEditLabelStart(_21);
-});
-return _24;
-},editLabelFinish:function(_25,_26){
-var _27=this;
-var _28=this.editor.node;
-var _29=dojo.Deferred.prototype.makeCalled();
-if(!_25&&!_28.isPhantom){
-_29=this.requestEditConfirmation(this.editor.node,"editLabelFinishCancel",_26);
-}
-if(_25){
-if(_28.isPhantom){
-_29=this.sendCreateChildRequest(_28.parent,_28.getParentIndex(),{title:this.editor.getContents()},_26);
-}else{
-_29=this.editLabelSave(_28,this.editor.getContents(),_26);
-}
-}
-_29.addCallback(function(_2a){
-_27.doEditLabelFinish(_25,_2a);
-});
-_29.addErrback(function(r){
-_27.doEditLabelFinish(false);
-return false;
-});
-return _29;
-},createAndEdit:function(_2c,_2d,_2e){
-var _2f={title:_2c.tree.defaultChildTitle};
-if(!this.canCreateChild(_2c,_2d,_2f)){
-return false;
-}
-if(!this.editor.isClosed()){
-var _30=this.editLabelFinish(this.editor.saveOnBlur,_2e);
-_30.addCallback(function(){
-return _31.createAndEdit(_2c,_2d,_2e);
-});
-return _30;
-}
-var _31=this;
-var _30=this.prepareCreateChild(_2c,_2d,_2f,_2e);
-_30.addCallback(function(){
-var _32=_31.makeDefaultNode(_2c,_2d);
-_32.isPhantom=true;
-return _32;
-});
-_30.addBoth(function(r){
-_31.finalizeCreateChild(_2c,_2d,_2f,_2e);
-return r;
-});
-_30.addCallback(function(_34){
-var d=_31.exposeCreateChild(_2c,_2d,_2f,_2e);
-d.addCallback(function(){
-return _34;
-});
-return d;
-});
-_30.addCallback(function(_36){
-_31.doEditLabelStart(_36);
-return _36;
-});
-return _30;
-},prepareDestroyChild:function(_37,_38){
-var _39=this.startProcessing(_37);
-return _39;
-},finalizeDestroyChild:function(_3a){
-this.finishProcessing(_3a);
-},doDestroyChild:function(_3b,_3c){
-var _3d={node:this.getInfo(_3b),tree:this.getInfo(_3b.tree)};
-var _3e=this.runRpc({url:this.getRpcUrl("destroyChild"),sync:_3c,params:_3d});
-var _3f=this;
-var _40=arguments;
-_3e.addCallback(function(){
-dojo.widget.TreeBasicControllerV3.prototype.doDestroyChild.apply(_3f,_40);
-});
-return _3e;
-},sendCreateChildRequest:function(_41,_42,_43,_44){
-var _45={tree:this.getInfo(_41.tree),parent:this.getInfo(_41),index:_42,data:_43};
-var _46=this.runRpc({url:this.getRpcUrl("createChild"),sync:_44,params:_45});
-return _46;
-},doCreateChild:function(_47,_48,_49,_4a){
-if(dojo.lang.isUndefined(_49.title)){
-_49.title=_47.tree.defaultChildTitle;
-}
-var _4b=this.sendCreateChildRequest(_47,_48,_49,_4a);
-var _4c=this;
-var _4d=arguments;
-_4b.addCallback(function(_4e){
-dojo.lang.mixin(_49,_4e);
-return dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(_4c,_47,_48,_49);
-});
-return _4b;
-},doClone:function(_4f,_50,_51,_52,_53){
-var _54={child:this.getInfo(_4f),oldParent:this.getInfo(_4f.parent),oldParentTree:this.getInfo(_4f.parent.tree),newParent:this.getInfo(_50),newParentTree:this.getInfo(_50.tree),index:_51,deep:_52?true:false,tree:this.getInfo(_4f.tree)};
-var _55=this.runRpc({url:this.getRpcUrl("clone"),sync:_53,params:_54});
-var _56=this;
-var _57=arguments;
-_55.addCallback(function(){
-dojo.widget.TreeBasicControllerV3.prototype.doClone.apply(_56,_57);
-});
-return _55;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeSelector.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeSelector.js
deleted file mode 100644
index 22c0e92..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeSelector.js
+++ /dev/null
@@ -1,89 +0,0 @@
-dojo.provide("dojo.widget.TreeSelector");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.widget.defineWidget("dojo.widget.TreeSelector",dojo.widget.HtmlWidget,function(){
-this.eventNames={};
-this.listenedTrees=[];
-},{widgetType:"TreeSelector",selectedNode:null,dieWithTree:false,eventNamesDefault:{select:"select",destroy:"destroy",deselect:"deselect",dblselect:"dblselect"},initialize:function(){
-for(var _1 in this.eventNamesDefault){
-if(dojo.lang.isUndefined(this.eventNames[_1])){
-this.eventNames[_1]=this.widgetId+"/"+this.eventNamesDefault[_1];
-}
-}
-},destroy:function(){
-dojo.event.topic.publish(this.eventNames.destroy,{source:this});
-return dojo.widget.HtmlWidget.prototype.destroy.apply(this,arguments);
-},listenTree:function(_2){
-dojo.event.topic.subscribe(_2.eventNames.titleClick,this,"select");
-dojo.event.topic.subscribe(_2.eventNames.iconClick,this,"select");
-dojo.event.topic.subscribe(_2.eventNames.collapse,this,"onCollapse");
-dojo.event.topic.subscribe(_2.eventNames.moveFrom,this,"onMoveFrom");
-dojo.event.topic.subscribe(_2.eventNames.removeNode,this,"onRemoveNode");
-dojo.event.topic.subscribe(_2.eventNames.treeDestroy,this,"onTreeDestroy");
-this.listenedTrees.push(_2);
-},unlistenTree:function(_3){
-dojo.event.topic.unsubscribe(_3.eventNames.titleClick,this,"select");
-dojo.event.topic.unsubscribe(_3.eventNames.iconClick,this,"select");
-dojo.event.topic.unsubscribe(_3.eventNames.collapse,this,"onCollapse");
-dojo.event.topic.unsubscribe(_3.eventNames.moveFrom,this,"onMoveFrom");
-dojo.event.topic.unsubscribe(_3.eventNames.removeNode,this,"onRemoveNode");
-dojo.event.topic.unsubscribe(_3.eventNames.treeDestroy,this,"onTreeDestroy");
-for(var i=0;i<this.listenedTrees.length;i++){
-if(this.listenedTrees[i]===_3){
-this.listenedTrees.splice(i,1);
-break;
-}
-}
-},onTreeDestroy:function(_5){
-this.unlistenTree(_5.source);
-if(this.dieWithTree){
-this.destroy();
-}
-},onCollapse:function(_6){
-if(!this.selectedNode){
-return;
-}
-var _7=_6.source;
-var _8=this.selectedNode.parent;
-while(_8!==_7&&_8.isTreeNode){
-_8=_8.parent;
-}
-if(_8.isTreeNode){
-this.deselect();
-}
-},select:function(_9){
-var _a=_9.source;
-var e=_9.event;
-if(this.selectedNode===_a){
-if(e.ctrlKey||e.shiftKey||e.metaKey){
-this.deselect();
-return;
-}
-dojo.event.topic.publish(this.eventNames.dblselect,{node:_a});
-return;
-}
-if(this.selectedNode){
-this.deselect();
-}
-this.doSelect(_a);
-dojo.event.topic.publish(this.eventNames.select,{node:_a});
-},onMoveFrom:function(_c){
-if(_c.child!==this.selectedNode){
-return;
-}
-if(!dojo.lang.inArray(this.listenedTrees,_c.newTree)){
-this.deselect();
-}
-},onRemoveNode:function(_d){
-if(_d.child!==this.selectedNode){
-return;
-}
-this.deselect();
-},doSelect:function(_e){
-_e.markSelected();
-this.selectedNode=_e;
-},deselect:function(){
-var _f=this.selectedNode;
-this.selectedNode=null;
-_f.unMarkSelected();
-dojo.event.topic.publish(this.eventNames.deselect,{node:_f});
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeSelectorV3.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeSelectorV3.js
deleted file mode 100644
index 2ecb722..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeSelectorV3.js
+++ /dev/null
@@ -1,147 +0,0 @@
-dojo.provide("dojo.widget.TreeSelectorV3");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.TreeCommon");
-dojo.widget.defineWidget("dojo.widget.TreeSelectorV3",[dojo.widget.HtmlWidget,dojo.widget.TreeCommon],function(){
-this.eventNames={};
-this.listenedTrees={};
-this.selectedNodes=[];
-this.lastClicked={};
-},{listenTreeEvents:["afterTreeCreate","afterCollapse","afterChangeTree","afterDetach","beforeTreeDestroy"],listenNodeFilter:function(_1){
-return _1 instanceof dojo.widget.Widget;
-},allowedMulti:true,dblselectTimeout:300,eventNamesDefault:{select:"select",deselect:"deselect",dblselect:"dblselect"},onAfterTreeCreate:function(_2){
-var _3=_2.source;
-dojo.event.browser.addListener(_3.domNode,"onclick",dojo.lang.hitch(this,this.onTreeClick));
-if(dojo.render.html.ie){
-dojo.event.browser.addListener(_3.domNode,"ondblclick",dojo.lang.hitch(this,this.onTreeDblClick));
-}
-dojo.event.browser.addListener(_3.domNode,"onKey",dojo.lang.hitch(this,this.onKey));
-},onKey:function(e){
-if(!e.key||e.ctrkKey||e.altKey){
-return;
-}
-switch(e.key){
-case e.KEY_ENTER:
-var _5=this.domElement2TreeNode(e.target);
-if(_5){
-this.processNode(_5,e);
-}
-}
-},onAfterChangeTree:function(_6){
-if(!_6.oldTree&&_6.node.selected){
-this.select(_6.node);
-}
-if(!_6.newTree||!this.listenedTrees[_6.newTree.widgetId]){
-if(this.selectedNode&&_6.node.children){
-this.deselectIfAncestorMatch(_6.node);
-}
-}
-},initialize:function(_7){
-for(var _8 in this.eventNamesDefault){
-if(dojo.lang.isUndefined(this.eventNames[_8])){
-this.eventNames[_8]=this.widgetId+"/"+this.eventNamesDefault[_8];
-}
-}
-},onBeforeTreeDestroy:function(_9){
-this.unlistenTree(_9.source);
-},onAfterCollapse:function(_a){
-this.deselectIfAncestorMatch(_a.source);
-},onTreeDblClick:function(_b){
-this.onTreeClick(_b);
-},checkSpecialEvent:function(_c){
-return _c.shiftKey||_c.ctrlKey;
-},onTreeClick:function(_d){
-var _e=this.domElement2TreeNode(_d.target);
-if(!_e){
-return;
-}
-var _f=function(_10){
-return _10===_e.labelNode;
-};
-if(this.checkPathCondition(_d.target,_f)){
-this.processNode(_e,_d);
-}
-},processNode:function(_11,_12){
-if(_11.actionIsDisabled(_11.actions.SELECT)){
-return;
-}
-if(dojo.lang.inArray(this.selectedNodes,_11)){
-if(this.checkSpecialEvent(_12)){
-this.deselect(_11);
-return;
-}
-var _13=this;
-var i=0;
-var _15;
-while(this.selectedNodes.length>i){
-_15=this.selectedNodes[i];
-if(_15!==_11){
-this.deselect(_15);
-continue;
-}
-i++;
-}
-var _16=this.checkRecentClick(_11);
-eventName=_16?this.eventNames.dblselect:this.eventNames.select;
-if(_16){
-eventName=this.eventNames.dblselect;
-this.forgetLastClicked();
-}else{
-eventName=this.eventNames.select;
-this.setLastClicked(_11);
-}
-dojo.event.topic.publish(eventName,{node:_11});
-return;
-}
-this.deselectIfNoMulti(_12);
-this.setLastClicked(_11);
-this.select(_11);
-},forgetLastClicked:function(){
-this.lastClicked={};
-},setLastClicked:function(_17){
-this.lastClicked.date=new Date();
-this.lastClicked.node=_17;
-},checkRecentClick:function(_18){
-var _19=new Date()-this.lastClicked.date;
-if(this.lastClicked.node&&_19<this.dblselectTimeout){
-return true;
-}else{
-return false;
-}
-},deselectIfNoMulti:function(_1a){
-if(!this.checkSpecialEvent(_1a)||!this.allowedMulti){
-this.deselectAll();
-}
-},deselectIfAncestorMatch:function(_1b){
-var _1c=this;
-dojo.lang.forEach(this.selectedNodes,function(_1d){
-var _1e=_1d;
-_1d=_1d.parent;
-while(_1d&&_1d.isTreeNode){
-if(_1d===_1b){
-_1c.deselect(_1e);
-return;
-}
-_1d=_1d.parent;
-}
-});
-},onAfterDetach:function(_1f){
-this.deselectIfAncestorMatch(_1f.child);
-},select:function(_20){
-var _21=dojo.lang.find(this.selectedNodes,_20,true);
-if(_21>=0){
-return;
-}
-this.selectedNodes.push(_20);
-dojo.event.topic.publish(this.eventNames.select,{node:_20});
-},deselect:function(_22){
-var _23=dojo.lang.find(this.selectedNodes,_22,true);
-if(_23<0){
-return;
-}
-this.selectedNodes.splice(_23,1);
-dojo.event.topic.publish(this.eventNames.deselect,{node:_22});
-},deselectAll:function(){
-while(this.selectedNodes.length){
-this.deselect(this.selectedNodes[0]);
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeTimeoutIterator.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeTimeoutIterator.js
deleted file mode 100644
index 52ea019..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeTimeoutIterator.js
+++ /dev/null
@@ -1,75 +0,0 @@
-dojo.provide("dojo.widget.TreeTimeoutIterator");
-dojo.require("dojo.event.*");
-dojo.require("dojo.json");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.TreeCommon");
-dojo.declare("dojo.widget.TreeTimeoutIterator",null,function(_1,_2,_3){
-var _4=this;
-this.currentParent=_1;
-this.callFunc=_2;
-this.callObj=_3?_3:this;
-this.stack=[];
-},{maxStackDepth:Number.POSITIVE_INFINITY,stack:null,currentParent:null,currentIndex:0,filterFunc:function(){
-return true;
-},finishFunc:function(){
-return true;
-},setFilter:function(_5,_6){
-this.filterFunc=_5;
-this.filterObj=_6;
-},setMaxLevel:function(_7){
-this.maxStackDepth=_7-2;
-},forward:function(_8){
-var _9=this;
-if(this.timeout){
-var _a=setTimeout(function(){
-_9.processNext();
-clearTimeout(_a);
-},_9.timeout);
-}else{
-return this.processNext();
-}
-},start:function(_b){
-if(_b){
-return this.callFunc.call(this.callObj,this.currentParent,this);
-}
-return this.processNext();
-},processNext:function(){
-var _c;
-var _d=this;
-var _e;
-var _f;
-if(this.maxStackDepth==-2){
-return;
-}
-while(true){
-var _10=this.currentParent.children;
-if(_10&&_10.length){
-do{
-_f=_10[this.currentIndex];
-}while(this.currentIndex++<_10.length&&!(_e=this.filterFunc.call(this.filterObj,_f)));
-if(_e){
-if(_f.isFolder&&this.stack.length<=this.maxStackDepth){
-this.moveParent(_f,0);
-}
-return this.callFunc.call(this.callObj,_f,this);
-}
-}
-if(this.stack.length){
-this.popParent();
-continue;
-}
-break;
-}
-return this.finishFunc.call(this.finishObj);
-},setFinish:function(_11,obj){
-this.finishFunc=_11;
-this.finishObj=obj;
-},popParent:function(){
-var p=this.stack.pop();
-this.currentParent=p[0];
-this.currentIndex=p[1];
-},moveParent:function(_14,_15){
-this.stack.push([this.currentParent,this.currentIndex]);
-this.currentParent=_14;
-this.currentIndex=_15;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeToggleOnSelect.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeToggleOnSelect.js
deleted file mode 100644
index 6247c97..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeToggleOnSelect.js
+++ /dev/null
@@ -1,10 +0,0 @@
-dojo.provide("dojo.widget.TreeToggleOnSelect");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.widget.defineWidget("dojo.widget.TreeToggleOnSelect",dojo.widget.HtmlWidget,{selector:"",controller:"",selectEvent:"select",initialize:function(){
-this.selector=dojo.widget.byId(this.selector);
-this.controller=dojo.widget.byId(this.controller);
-dojo.event.topic.subscribe(this.selector.eventNames[this.selectEvent],this,"onSelectEvent");
-},onSelectEvent:function(_1){
-var _2=_1.node;
-_2.isExpanded?this.controller.collapse(_2):this.controller.expand(_2);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeV3.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeV3.js
deleted file mode 100644
index a5dcd94..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeV3.js
+++ /dev/null
@@ -1,122 +0,0 @@
-dojo.provide("dojo.widget.TreeV3");
-dojo.require("dojo.widget.TreeWithNode");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.io.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.TreeNodeV3");
-dojo.widget.defineWidget("dojo.widget.TreeV3",[dojo.widget.HtmlWidget,dojo.widget.TreeWithNode],function(){
-this.eventNames={};
-this.DndAcceptTypes=[];
-this.actionsDisabled=[];
-this.listeners=[];
-this.tree=this;
-},{DndMode:"",defaultChildWidget:null,defaultChildTitle:"New Node",eagerWidgetInstantiation:false,eventNamesDefault:{afterTreeCreate:"afterTreeCreate",beforeTreeDestroy:"beforeTreeDestroy",beforeNodeDestroy:"beforeNodeDestroy",afterChangeTree:"afterChangeTree",afterSetFolder:"afterSetFolder",afterUnsetFolder:"afterUnsetFolder",beforeMoveFrom:"beforeMoveFrom",beforeMoveTo:"beforeMoveTo",afterMoveFrom:"afterMoveFrom",afterMoveTo:"afterMoveTo",afterAddChild:"afterAddChild",afterDetach:"afterDetach",afterExpand:"afterExpand",beforeExpand:"beforeExpand",afterSetTitle:"afterSetTitle",afterCollapse:"afterCollapse",beforeCollapse:"beforeCollapse"},classPrefix:"Tree",style:"",allowAddChildToLeaf:true,unsetFolderOnEmpty:true,DndModes:{BETWEEN:1,ONTO:2},DndAcceptTypes:"",templateCssString:"/* indent for all tree children excepts root */\n.TreeNode {\n    background-image : url('../templates/images/TreeV3/i.gif');\n    background-position : top left;\n    background-repeat : repeat-y;\n    margin-left: 19px;\n    zoom: 1;\n}\n.TreeIsRoot {\n    margin-left: 0;\n}\n \n/* left vertical line (grid) for all nodes */\n.TreeIsLast {\n    background-image: url('../templates/images/TreeV3/i_half.gif');\n    background-repeat : no-repeat;\n}\n \n.TreeExpandOpen .TreeExpand {\n    background-image: url('../templates/images/TreeV3/expand_minus.gif');\n}\n \n/* closed is higher priority than open */\n.TreeExpandClosed .TreeExpand {\n    background-image: url('../templates/images/TreeV3/expand_plus.gif');\n}\n \n/* highest priority */\n.TreeExpandLeaf .TreeExpand {\n    background-image: url('../templates/images/TreeV3/expand_leaf.gif');\n}\n\n/* \nshould always override any expand setting, but do not touch children.\nif I add .TreeExpand .TreeExpandLoading same time and put it to top/bottom, then it will take precedence over +- for all descendants or always fail\nso I have to remove TreeExpand and process this one specifically\n*/\n\n.TreeExpandLoading   {\n    width: 18px;\n    height: 18px;\n    float: left;\n    display: inline;\n    background-repeat : no-repeat;\n    background-image: url('../templates/images/TreeV3/expand_loading.gif');\n}\n \n.TreeContent {\n    min-height: 18px;\n    min-width: 18px;\n    margin-left:18px;\n    cursor: default;\n    /* can't make inline - multiline bugs */\n}\n\n.TreeIEContent {\n\theight: 18px;\n}\n \n.TreeExpand {\n    width: 18px;\n    height: 18px;\n    float: left;\n    display: inline;\n    background-repeat : no-repeat;\n}\n \n/* same style as IE selection */\n.TreeNodeEmphasized {\n    background-color: Highlight;\n    color: HighlightText;\n}\n \n.TreeContent .RichTextEditable, .TreeContent .RichTextEditable iframe {\n      background-color: #ffc;\n      color: black;\n}\n\n/* don't use :focus due to opera's lack of support on div's */\n.TreeLabelFocused {\n      outline: 1px invert dotted;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/TreeV3.css"),templateString:"<div style=\"${this.style}\">\n</div>",isExpanded:true,isTree:true,createNode:function(_1){
-_1.tree=this.widgetId;
-if(_1.widgetName){
-return dojo.widget.createWidget(_1.widgetName,_1);
-}else{
-if(this.defaultChildWidget.prototype.createSimple){
-return this.defaultChildWidget.prototype.createSimple(_1);
-}else{
-var ns=this.defaultChildWidget.prototype.ns;
-var wt=this.defaultChildWidget.prototype.widgetType;
-return dojo.widget.createWidget(ns+":"+wt,_1);
-}
-}
-},makeNodeTemplate:function(){
-var _4=document.createElement("div");
-dojo.html.setClass(_4,this.classPrefix+"Node "+this.classPrefix+"ExpandLeaf "+this.classPrefix+"ChildrenNo");
-this.nodeTemplate=_4;
-var _5=document.createElement("div");
-var _6=this.classPrefix+"Expand";
-if(dojo.render.html.ie){
-_6=_6+" "+this.classPrefix+"IEExpand";
-}
-dojo.html.setClass(_5,_6);
-this.expandNodeTemplate=_5;
-var _7=document.createElement("span");
-dojo.html.setClass(_7,this.classPrefix+"Label");
-this.labelNodeTemplate=_7;
-var _8=document.createElement("div");
-var _6=this.classPrefix+"Content";
-if(dojo.render.html.ie&&!dojo.render.html.ie70){
-_6=_6+" "+this.classPrefix+"IEContent";
-}
-dojo.html.setClass(_8,_6);
-this.contentNodeTemplate=_8;
-_4.appendChild(_5);
-_4.appendChild(_8);
-_8.appendChild(_7);
-},makeContainerNodeTemplate:function(){
-var _9=document.createElement("div");
-_9.style.display="none";
-dojo.html.setClass(_9,this.classPrefix+"Container");
-this.containerNodeTemplate=_9;
-},actions:{ADDCHILD:"ADDCHILD"},getInfo:function(){
-var _a={widgetId:this.widgetId,objectId:this.objectId};
-return _a;
-},adjustEventNames:function(){
-for(var _b in this.eventNamesDefault){
-if(dojo.lang.isUndefined(this.eventNames[_b])){
-this.eventNames[_b]=this.widgetId+"/"+this.eventNamesDefault[_b];
-}
-}
-},adjustDndMode:function(){
-var _c=this;
-var _d=0;
-dojo.lang.forEach(this.DndMode.split(";"),function(_e){
-var _f=_c.DndModes[dojo.string.trim(_e).toUpperCase()];
-if(_f){
-_d=_d|_f;
-}
-});
-this.DndMode=_d;
-},destroy:function(){
-dojo.event.topic.publish(this.tree.eventNames.beforeTreeDestroy,{source:this});
-return dojo.widget.HtmlWidget.prototype.destroy.apply(this,arguments);
-},initialize:function(_10){
-this.domNode.widgetId=this.widgetId;
-for(var i=0;i<this.actionsDisabled.length;i++){
-this.actionsDisabled[i]=this.actionsDisabled[i].toUpperCase();
-}
-if(!_10.defaultChildWidget){
-this.defaultChildWidget=dojo.widget.TreeNodeV3;
-}else{
-this.defaultChildWidget=dojo.lang.getObjPathValue(_10.defaultChildWidget);
-}
-this.adjustEventNames();
-this.adjustDndMode();
-this.makeNodeTemplate();
-this.makeContainerNodeTemplate();
-this.containerNode=this.domNode;
-dojo.html.setClass(this.domNode,this.classPrefix+"Container");
-var _12=this;
-dojo.lang.forEach(this.listeners,function(_13){
-var t=dojo.lang.isString(_13)?dojo.widget.byId(_13):_13;
-t.listenTree(_12);
-});
-},postCreate:function(){
-dojo.event.topic.publish(this.eventNames.afterTreeCreate,{source:this});
-},move:function(_15,_16,_17){
-if(!_15.parent){
-dojo.raise(this.widgetType+": child can be moved only while it's attached");
-}
-var _18=_15.parent;
-var _19=_15.tree;
-var _1a=_15.getParentIndex();
-var _1b=_16.tree;
-var _16=_16;
-var _1c=_17;
-var _1d={oldParent:_18,oldTree:_19,oldIndex:_1a,newParent:_16,newTree:_1b,newIndex:_1c,child:_15};
-dojo.event.topic.publish(_19.eventNames.beforeMoveFrom,_1d);
-dojo.event.topic.publish(_1b.eventNames.beforeMoveTo,_1d);
-this.doMove.apply(this,arguments);
-dojo.event.topic.publish(_19.eventNames.afterMoveFrom,_1d);
-dojo.event.topic.publish(_1b.eventNames.afterMoveTo,_1d);
-},doMove:function(_1e,_1f,_20){
-_1e.doDetach();
-_1f.doAddChild(_1e,_20);
-},toString:function(){
-return "["+this.widgetType+" ID:"+this.widgetId+"]";
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeWithNode.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeWithNode.js
deleted file mode 100644
index 37f2c8b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/TreeWithNode.js
+++ /dev/null
@@ -1,102 +0,0 @@
-dojo.require("dojo.lang.declare");
-dojo.provide("dojo.widget.TreeWithNode");
-dojo.declare("dojo.widget.TreeWithNode",null,function(){
-},{loadStates:{UNCHECKED:"UNCHECKED",LOADING:"LOADING",LOADED:"LOADED"},state:"UNCHECKED",objectId:"",isContainer:true,lockLevel:0,lock:function(){
-this.lockLevel++;
-},unlock:function(){
-if(!this.lockLevel){
-dojo.raise(this.widgetType+" unlock: not locked");
-}
-this.lockLevel--;
-},expandLevel:0,loadLevel:0,hasLock:function(){
-return this.lockLevel>0;
-},isLocked:function(){
-var _1=this;
-while(true){
-if(_1.lockLevel){
-return true;
-}
-if(!_1.parent||_1.isTree){
-break;
-}
-_1=_1.parent;
-}
-return false;
-},flushLock:function(){
-this.lockLevel=0;
-},actionIsDisabled:function(_2){
-var _3=false;
-if(dojo.lang.inArray(this.actionsDisabled,_2)){
-_3=true;
-}
-if(this.isTreeNode){
-if(!this.tree.allowAddChildToLeaf&&_2==this.actions.ADDCHILD&&!this.isFolder){
-_3=true;
-}
-}
-return _3;
-},actionIsDisabledNow:function(_4){
-return this.actionIsDisabled(_4)||this.isLocked();
-},setChildren:function(_5){
-if(this.isTreeNode&&!this.isFolder){
-this.setFolder();
-}else{
-if(this.isTreeNode){
-this.state=this.loadStates.LOADED;
-}
-}
-var _6=this.children.length>0;
-if(_6&&_5){
-this.destroyChildren();
-}
-if(_5){
-this.children=_5;
-}
-var _7=this.children.length>0;
-if(this.isTreeNode&&_7!=_6){
-this.viewSetHasChildren();
-}
-for(var i=0;i<this.children.length;i++){
-var _9=this.children[i];
-if(!(_9 instanceof dojo.widget.Widget)){
-_9=this.children[i]=this.tree.createNode(_9);
-var _a=true;
-}else{
-var _a=false;
-}
-if(!_9.parent){
-_9.parent=this;
-if(this.tree!==_9.tree){
-_9.updateTree(this.tree);
-}
-_9.viewAddLayout();
-this.containerNode.appendChild(_9.domNode);
-var _b={child:_9,index:i,parent:this,childWidgetCreated:_a};
-delete dojo.widget.manager.topWidgets[_9.widgetId];
-dojo.event.topic.publish(this.tree.eventNames.afterAddChild,_b);
-}
-if(this.tree.eagerWidgetInstantiation){
-dojo.lang.forEach(this.children,function(_c){
-_c.setChildren();
-});
-}
-}
-},doAddChild:function(_d,_e){
-return this.addChild(_d,_e,true);
-},addChild:function(_f,_10,_11){
-if(dojo.lang.isUndefined(_10)){
-_10=this.children.length;
-}
-if(!_f.isTreeNode){
-dojo.raise("You can only add TreeNode widgets to a "+this.widgetType+" widget!");
-return;
-}
-this.children.splice(_10,0,_f);
-_f.parent=this;
-_f.addedTo(this,_10,_11);
-delete dojo.widget.manager.topWidgets[_f.widgetId];
-},onShow:function(){
-this.animationInProgress=false;
-},onHide:function(){
-this.animationInProgress=false;
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/UsTextbox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/UsTextbox.js
deleted file mode 100644
index 03e587d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/UsTextbox.js
+++ /dev/null
@@ -1,23 +0,0 @@
-dojo.provide("dojo.widget.UsTextbox");
-dojo.require("dojo.widget.ValidationTextbox");
-dojo.require("dojo.validate.us");
-dojo.widget.defineWidget("dojo.widget.UsStateTextbox",dojo.widget.ValidationTextbox,{mixInProperties:function(_1){
-dojo.widget.UsStateTextbox.superclass.mixInProperties.apply(this,arguments);
-if(_1.allowterritories){
-this.flags.allowTerritories=(_1.allowterritories=="true");
-}
-if(_1.allowmilitary){
-this.flags.allowMilitary=(_1.allowmilitary=="true");
-}
-},isValid:function(){
-return dojo.validate.us.isState(this.textbox.value,this.flags);
-}});
-dojo.widget.defineWidget("dojo.widget.UsZipTextbox",dojo.widget.ValidationTextbox,{isValid:function(){
-return dojo.validate.us.isZipCode(this.textbox.value);
-}});
-dojo.widget.defineWidget("dojo.widget.UsSocialSecurityNumberTextbox",dojo.widget.ValidationTextbox,{isValid:function(){
-return dojo.validate.us.isSocialSecurityNumber(this.textbox.value);
-}});
-dojo.widget.defineWidget("dojo.widget.UsPhoneNumberTextbox",dojo.widget.ValidationTextbox,{isValid:function(){
-return dojo.validate.us.isPhoneNumber(this.textbox.value);
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ValidationTextbox.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ValidationTextbox.js
deleted file mode 100644
index c37beab..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/ValidationTextbox.js
+++ /dev/null
@@ -1,111 +0,0 @@
-dojo.provide("dojo.widget.ValidationTextbox");
-dojo.require("dojo.widget.Textbox");
-dojo.require("dojo.i18n.common");
-dojo.widget.defineWidget("dojo.widget.ValidationTextbox",dojo.widget.Textbox,function(){
-this.flags={};
-},{required:false,rangeClass:"range",invalidClass:"invalid",missingClass:"missing",classPrefix:"dojoValidate",size:"",maxlength:"",promptMessage:"",invalidMessage:"",missingMessage:"",rangeMessage:"",listenOnKeyPress:true,htmlfloat:"none",lastCheckedValue:null,templateString:"<span style='float:${this.htmlfloat};'>\n\t<input dojoAttachPoint='textbox' type='${this.type}' dojoAttachEvent='onblur;onfocus;onkeyup'\n\t\tid='${this.widgetId}' name='${this.name}' size='${this.size}' maxlength='${this.maxlength}'\n\t\tclass='${this.className}' style=''>\n\t<span dojoAttachPoint='invalidSpan' class='${this.invalidClass}'>${this.messages.invalidMessage}</span>\n\t<span dojoAttachPoint='missingSpan' class='${this.missingClass}'>${this.messages.missingMessage}</span>\n\t<span dojoAttachPoint='rangeSpan' class='${this.rangeClass}'>${this.messages.rangeMessage}</span>\n</span>\n",templateCssString:".dojoValidateEmpty{\n\tbackground-color: #00FFFF;\n}\n.dojoValidateValid{\n\tbackground-color: #cfc;\n}\n.dojoValidateInvalid{\n\tbackground-color: #fcc;\n}\n.dojoValidateRange{\n\tbackground-color: #ccf;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/Validate.css"),invalidSpan:null,missingSpan:null,rangeSpan:null,getValue:function(){
-return this.textbox.value;
-},setValue:function(_1){
-this.textbox.value=_1;
-this.update();
-},isValid:function(){
-return true;
-},isInRange:function(){
-return true;
-},isEmpty:function(){
-return (/^\s*$/.test(this.textbox.value));
-},isMissing:function(){
-return (this.required&&this.isEmpty());
-},update:function(){
-this.lastCheckedValue=this.textbox.value;
-this.missingSpan.style.display="none";
-this.invalidSpan.style.display="none";
-this.rangeSpan.style.display="none";
-var _2=this.isEmpty();
-var _3=true;
-if(this.promptMessage!=this.textbox.value){
-_3=this.isValid();
-}
-var _4=this.isMissing();
-if(_4){
-this.missingSpan.style.display="";
-}else{
-if(!_2&&!_3){
-this.invalidSpan.style.display="";
-}else{
-if(!_2&&!this.isInRange()){
-this.rangeSpan.style.display="";
-}
-}
-}
-this.highlight();
-},updateClass:function(_5){
-var _6=this.classPrefix;
-dojo.html.removeClass(this.textbox,_6+"Empty");
-dojo.html.removeClass(this.textbox,_6+"Valid");
-dojo.html.removeClass(this.textbox,_6+"Invalid");
-dojo.html.addClass(this.textbox,_6+_5);
-},highlight:function(){
-if(this.isEmpty()){
-this.updateClass("Empty");
-}else{
-if(this.isValid()&&this.isInRange()){
-this.updateClass("Valid");
-}else{
-if(this.textbox.value!=this.promptMessage){
-this.updateClass("Invalid");
-}else{
-this.updateClass("Empty");
-}
-}
-}
-},onfocus:function(_7){
-if(!this.listenOnKeyPress){
-this.updateClass("Empty");
-}
-},onblur:function(_8){
-this.filter();
-this.update();
-},onkeyup:function(_9){
-if(this.listenOnKeyPress){
-this.update();
-}else{
-if(this.textbox.value!=this.lastCheckedValue){
-this.updateClass("Empty");
-}
-}
-},postMixInProperties:function(_a,_b){
-dojo.widget.ValidationTextbox.superclass.postMixInProperties.apply(this,arguments);
-this.messages=dojo.i18n.getLocalization("dojo.widget","validate",this.lang);
-dojo.lang.forEach(["invalidMessage","missingMessage","rangeMessage"],function(_c){
-if(this[_c]){
-this.messages[_c]=this[_c];
-}
-},this);
-},fillInTemplate:function(){
-dojo.widget.ValidationTextbox.superclass.fillInTemplate.apply(this,arguments);
-this.textbox.isValid=function(){
-this.isValid.call(this);
-};
-this.textbox.isMissing=function(){
-this.isMissing.call(this);
-};
-this.textbox.isInRange=function(){
-this.isInRange.call(this);
-};
-dojo.html.setClass(this.invalidSpan,this.invalidClass);
-this.update();
-this.filter();
-if(dojo.render.html.ie){
-dojo.html.addClass(this.domNode,"ie");
-}
-if(dojo.render.html.moz){
-dojo.html.addClass(this.domNode,"moz");
-}
-if(dojo.render.html.opera){
-dojo.html.addClass(this.domNode,"opera");
-}
-if(dojo.render.html.safari){
-dojo.html.addClass(this.domNode,"safari");
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Widget.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Widget.js
deleted file mode 100644
index f11e471..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Widget.js
+++ /dev/null
@@ -1,297 +0,0 @@
-dojo.provide("dojo.widget.Widget");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lang.declare");
-dojo.require("dojo.ns");
-dojo.require("dojo.widget.Manager");
-dojo.require("dojo.event.*");
-dojo.declare("dojo.widget.Widget",null,function(){
-this.children=[];
-this.extraArgs={};
-},{parent:null,isTopLevel:false,disabled:false,isContainer:false,widgetId:"",widgetType:"Widget",ns:"dojo",getNamespacedType:function(){
-return (this.ns?this.ns+":"+this.widgetType:this.widgetType).toLowerCase();
-},toString:function(){
-return "[Widget "+this.getNamespacedType()+", "+(this.widgetId||"NO ID")+"]";
-},repr:function(){
-return this.toString();
-},enable:function(){
-this.disabled=false;
-},disable:function(){
-this.disabled=true;
-},onResized:function(){
-this.notifyChildrenOfResize();
-},notifyChildrenOfResize:function(){
-for(var i=0;i<this.children.length;i++){
-var _2=this.children[i];
-if(_2.onResized){
-_2.onResized();
-}
-}
-},create:function(_3,_4,_5,ns){
-if(ns){
-this.ns=ns;
-}
-this.satisfyPropertySets(_3,_4,_5);
-this.mixInProperties(_3,_4,_5);
-this.postMixInProperties(_3,_4,_5);
-dojo.widget.manager.add(this);
-this.buildRendering(_3,_4,_5);
-this.initialize(_3,_4,_5);
-this.postInitialize(_3,_4,_5);
-this.postCreate(_3,_4,_5);
-return this;
-},destroy:function(_7){
-if(this.parent){
-this.parent.removeChild(this);
-}
-this.destroyChildren();
-this.uninitialize();
-this.destroyRendering(_7);
-dojo.widget.manager.removeById(this.widgetId);
-},destroyChildren:function(){
-var _8;
-var i=0;
-while(this.children.length>i){
-_8=this.children[i];
-if(_8 instanceof dojo.widget.Widget){
-this.removeChild(_8);
-_8.destroy();
-continue;
-}
-i++;
-}
-},getChildrenOfType:function(_a,_b){
-var _c=[];
-var _d=dojo.lang.isFunction(_a);
-if(!_d){
-_a=_a.toLowerCase();
-}
-for(var x=0;x<this.children.length;x++){
-if(_d){
-if(this.children[x] instanceof _a){
-_c.push(this.children[x]);
-}
-}else{
-if(this.children[x].widgetType.toLowerCase()==_a){
-_c.push(this.children[x]);
-}
-}
-if(_b){
-_c=_c.concat(this.children[x].getChildrenOfType(_a,_b));
-}
-}
-return _c;
-},getDescendants:function(){
-var _f=[];
-var _10=[this];
-var _11;
-while((_11=_10.pop())){
-_f.push(_11);
-if(_11.children){
-dojo.lang.forEach(_11.children,function(_12){
-_10.push(_12);
-});
-}
-}
-return _f;
-},isFirstChild:function(){
-return this===this.parent.children[0];
-},isLastChild:function(){
-return this===this.parent.children[this.parent.children.length-1];
-},satisfyPropertySets:function(_13){
-return _13;
-},mixInProperties:function(_14,_15){
-if((_14["fastMixIn"])||(_15["fastMixIn"])){
-for(var x in _14){
-this[x]=_14[x];
-}
-return;
-}
-var _17;
-var _18=dojo.widget.lcArgsCache[this.widgetType];
-if(_18==null){
-_18={};
-for(var y in this){
-_18[((new String(y)).toLowerCase())]=y;
-}
-dojo.widget.lcArgsCache[this.widgetType]=_18;
-}
-var _1a={};
-for(var x in _14){
-if(!this[x]){
-var y=_18[(new String(x)).toLowerCase()];
-if(y){
-_14[y]=_14[x];
-x=y;
-}
-}
-if(_1a[x]){
-continue;
-}
-_1a[x]=true;
-if((typeof this[x])!=(typeof _17)){
-if(typeof _14[x]!="string"){
-this[x]=_14[x];
-}else{
-if(dojo.lang.isString(this[x])){
-this[x]=_14[x];
-}else{
-if(dojo.lang.isNumber(this[x])){
-this[x]=new Number(_14[x]);
-}else{
-if(dojo.lang.isBoolean(this[x])){
-this[x]=(_14[x].toLowerCase()=="false")?false:true;
-}else{
-if(dojo.lang.isFunction(this[x])){
-if(_14[x].search(/[^\w\.]+/i)==-1){
-this[x]=dojo.evalObjPath(_14[x],false);
-}else{
-var tn=dojo.lang.nameAnonFunc(new Function(_14[x]),this);
-dojo.event.kwConnect({srcObj:this,srcFunc:x,adviceObj:this,adviceFunc:tn});
-}
-}else{
-if(dojo.lang.isArray(this[x])){
-this[x]=_14[x].split(";");
-}else{
-if(this[x] instanceof Date){
-this[x]=new Date(Number(_14[x]));
-}else{
-if(typeof this[x]=="object"){
-if(this[x] instanceof dojo.uri.Uri){
-this[x]=dojo.uri.dojoUri(_14[x]);
-}else{
-var _1c=_14[x].split(";");
-for(var y=0;y<_1c.length;y++){
-var si=_1c[y].indexOf(":");
-if((si!=-1)&&(_1c[y].length>si)){
-this[x][_1c[y].substr(0,si).replace(/^\s+|\s+$/g,"")]=_1c[y].substr(si+1);
-}
-}
-}
-}else{
-this[x]=_14[x];
-}
-}
-}
-}
-}
-}
-}
-}
-}else{
-this.extraArgs[x.toLowerCase()]=_14[x];
-}
-}
-},postMixInProperties:function(_1e,_1f,_20){
-},initialize:function(_21,_22,_23){
-return false;
-},postInitialize:function(_24,_25,_26){
-return false;
-},postCreate:function(_27,_28,_29){
-return false;
-},uninitialize:function(){
-return false;
-},buildRendering:function(_2a,_2b,_2c){
-dojo.unimplemented("dojo.widget.Widget.buildRendering, on "+this.toString()+", ");
-return false;
-},destroyRendering:function(){
-dojo.unimplemented("dojo.widget.Widget.destroyRendering");
-return false;
-},addedTo:function(_2d){
-},addChild:function(_2e){
-dojo.unimplemented("dojo.widget.Widget.addChild");
-return false;
-},removeChild:function(_2f){
-for(var x=0;x<this.children.length;x++){
-if(this.children[x]===_2f){
-this.children.splice(x,1);
-_2f.parent=null;
-break;
-}
-}
-return _2f;
-},getPreviousSibling:function(){
-var idx=this.getParentIndex();
-if(idx<=0){
-return null;
-}
-return this.parent.children[idx-1];
-},getSiblings:function(){
-return this.parent.children;
-},getParentIndex:function(){
-return dojo.lang.indexOf(this.parent.children,this,true);
-},getNextSibling:function(){
-var idx=this.getParentIndex();
-if(idx==this.parent.children.length-1){
-return null;
-}
-if(idx<0){
-return null;
-}
-return this.parent.children[idx+1];
-}});
-dojo.widget.lcArgsCache={};
-dojo.widget.tags={};
-dojo.widget.tags.addParseTreeHandler=function(_33){
-dojo.deprecated("addParseTreeHandler",". ParseTreeHandlers are now reserved for components. Any unfiltered DojoML tag without a ParseTreeHandler is assumed to be a widget","0.5");
-};
-dojo.widget.tags["dojo:propertyset"]=function(_34,_35,_36){
-var _37=_35.parseProperties(_34["dojo:propertyset"]);
-};
-dojo.widget.tags["dojo:connect"]=function(_38,_39,_3a){
-var _3b=_39.parseProperties(_38["dojo:connect"]);
-};
-dojo.widget.buildWidgetFromParseTree=function(_3c,_3d,_3e,_3f,_40,_41){
-var _42=_3c.split(":");
-_42=(_42.length==2)?_42[1]:_3c;
-var _43=_41||_3e.parseProperties(_3d[_3d["ns"]+":"+_42]);
-var _44=dojo.widget.manager.getImplementation(_42,null,null,_3d["ns"]);
-if(!_44){
-throw new Error("cannot find \""+_3c+"\" widget");
-}else{
-if(!_44.create){
-throw new Error("\""+_3c+"\" widget object has no \"create\" method and does not appear to implement *Widget");
-}
-}
-_43["dojoinsertionindex"]=_40;
-var ret=_44.create(_43,_3d,_3f,_3d["ns"]);
-return ret;
-};
-dojo.widget.defineWidget=function(_46,_47,_48,_49,_4a){
-if(dojo.lang.isString(arguments[3])){
-dojo.widget._defineWidget(arguments[0],arguments[3],arguments[1],arguments[4],arguments[2]);
-}else{
-var _4b=[arguments[0]],p=3;
-if(dojo.lang.isString(arguments[1])){
-_4b.push(arguments[1],arguments[2]);
-}else{
-_4b.push("",arguments[1]);
-p=2;
-}
-if(dojo.lang.isFunction(arguments[p])){
-_4b.push(arguments[p],arguments[p+1]);
-}else{
-_4b.push(null,arguments[p]);
-}
-dojo.widget._defineWidget.apply(this,_4b);
-}
-};
-dojo.widget.defineWidget.renderers="html|svg|vml";
-dojo.widget._defineWidget=function(_4d,_4e,_4f,_50,_51){
-var _52=_4d.split(".");
-var _53=_52.pop();
-var _54="\\.("+(_4e?_4e+"|":"")+dojo.widget.defineWidget.renderers+")\\.";
-var r=_4d.search(new RegExp(_54));
-_52=(r<0?_52.join("."):_4d.substr(0,r));
-dojo.widget.manager.registerWidgetPackage(_52);
-var pos=_52.indexOf(".");
-var _57=(pos>-1)?_52.substring(0,pos):_52;
-_51=(_51)||{};
-_51.widgetType=_53;
-if((!_50)&&(_51["classConstructor"])){
-_50=_51.classConstructor;
-delete _51.classConstructor;
-}
-dojo.declare(_4d,_4f,_50,_51);
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Wizard.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Wizard.js
deleted file mode 100644
index d357532..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/Wizard.js
+++ /dev/null
@@ -1,114 +0,0 @@
-dojo.provide("dojo.widget.Wizard");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.LayoutContainer");
-dojo.require("dojo.widget.ContentPane");
-dojo.require("dojo.event.*");
-dojo.require("dojo.html.style");
-dojo.widget.defineWidget("dojo.widget.WizardContainer",dojo.widget.LayoutContainer,{templateString:"<div class=\"WizardContainer\" dojoAttachPoint=\"wizardNode\">\n    <div class=\"WizardText\" dojoAttachPoint=\"wizardPanelContainerNode\">\n    </div>\n    <div class=\"WizardButtonHolder\" dojoAttachPoint=\"wizardControlContainerNode\">\n        <input class=\"WizardButton\" type=\"button\" dojoAttachPoint=\"previousButton\"/>\n        <input class=\"WizardButton\" type=\"button\" dojoAttachPoint=\"nextButton\"/>\n        <input class=\"WizardButton\" type=\"button\" dojoAttachPoint=\"doneButton\" style=\"display:none\"/>\n        <input class=\"WizardButton\" type=\"button\" dojoAttachPoint=\"cancelButton\"/>\n    </div>\n</div>\n",templateCssString:".WizardContainer {\n\tbackground: #EEEEEE;\n\tborder: #798EC5 1px solid;\n\tpadding: 2px;\n}\n\n.WizardTitle {\n\tcolor: #003366;\n\tpadding: 8px 5px 15px 2px;\n\tfont-weight: bold;\n\tfont-size: x-small;\n\tfont-style: normal;\n\tfont-family: Verdana, Arial, Helvetica;\n\ttext-align: left;\n}\n\n.WizardText {\n\tcolor: #000033;\n\tfont-weight: normal;\n\tfont-size: xx-small;\n\tfont-family: Verdana, Arial, Helvetica;\n\tpadding: 2 50; text-align: justify;\n}\n\n.WizardLightText {\n\tcolor: #666666;\n\tfont-weight: normal;\n\tfont-size: xx-small;\n\tfont-family: verdana, arial, helvetica;\n\tpadding: 2px 50px;\n\ttext-align: justify;\n}\n\n.WizardButtonHolder {\n\ttext-align: right;\n\tpadding: 10px 5px;\n}\n\n.WizardButton {\n\tcolor: #ffffff;\n\tbackground: #798EC5;\n\tfont-size: xx-small;\n\tfont-family: verdana, arial, helvetica, sans-serif;\n\tborder-right: #000000 1px solid;\n\tborder-bottom: #000000 1px solid;\n\tborder-left: #666666 1px solid;\n\tborder-top: #666666 1px solid;\n\tpadding-right: 4px;\n\tpadding-left: 4px;\n\ttext-decoration: none; height: 18px;\n}\n\n.WizardButton:hover {\n\tcursor: pointer;\n}\n\n.WizardButtonDisabled {\n\tcolor: #eeeeee;\n\tbackground-color: #999999;\n\tfont-size: xx-small;\n\tFONT-FAMILY: verdana, arial, helvetica, sans-serif;\n\tborder-right: #000000 1px solid;\n\tborder-bottom: #000000 1px solid;\n\tborder-left: #798EC5 1px solid;\n\tborder-top: #798EC5 1px solid;\n\tpadding-right: 4px;\n\tpadding-left: 4px;\n\ttext-decoration: none;\n\theight: 18px;\n}\n\n\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","templates/Wizard.css"),selected:null,nextButtonLabel:"next",previousButtonLabel:"previous",cancelButtonLabel:"cancel",doneButtonLabel:"done",cancelFunction:"",hideDisabledButtons:false,fillInTemplate:function(_1,_2){
-dojo.event.connect(this.nextButton,"onclick",this,"_onNextButtonClick");
-dojo.event.connect(this.previousButton,"onclick",this,"_onPreviousButtonClick");
-if(this.cancelFunction){
-dojo.event.connect(this.cancelButton,"onclick",this.cancelFunction);
-}else{
-this.cancelButton.style.display="none";
-}
-dojo.event.connect(this.doneButton,"onclick",this,"done");
-this.nextButton.value=this.nextButtonLabel;
-this.previousButton.value=this.previousButtonLabel;
-this.cancelButton.value=this.cancelButtonLabel;
-this.doneButton.value=this.doneButtonLabel;
-},_checkButtons:function(){
-var _3=!this.hasNextPanel();
-this.nextButton.disabled=_3;
-this._setButtonClass(this.nextButton);
-if(this.selected.doneFunction){
-this.doneButton.style.display="";
-if(_3){
-this.nextButton.style.display="none";
-}
-}else{
-this.doneButton.style.display="none";
-}
-this.previousButton.disabled=((!this.hasPreviousPanel())||(!this.selected.canGoBack));
-this._setButtonClass(this.previousButton);
-},_setButtonClass:function(_4){
-if(!this.hideDisabledButtons){
-_4.style.display="";
-dojo.html.setClass(_4,_4.disabled?"WizardButtonDisabled":"WizardButton");
-}else{
-_4.style.display=_4.disabled?"none":"";
-}
-},registerChild:function(_5,_6){
-dojo.widget.WizardContainer.superclass.registerChild.call(this,_5,_6);
-this.wizardPanelContainerNode.appendChild(_5.domNode);
-_5.hide();
-if(!this.selected){
-this.onSelected(_5);
-}
-this._checkButtons();
-},onSelected:function(_7){
-if(this.selected){
-if(this.selected._checkPass()){
-this.selected.hide();
-}else{
-return;
-}
-}
-_7.show();
-this.selected=_7;
-},getPanels:function(){
-return this.getChildrenOfType("WizardPane",false);
-},selectedIndex:function(){
-if(this.selected){
-return dojo.lang.indexOf(this.getPanels(),this.selected);
-}
-return -1;
-},_onNextButtonClick:function(){
-var _8=this.selectedIndex();
-if(_8>-1){
-var _9=this.getPanels();
-if(_9[_8+1]){
-this.onSelected(_9[_8+1]);
-}
-}
-this._checkButtons();
-},_onPreviousButtonClick:function(){
-var _a=this.selectedIndex();
-if(_a>-1){
-var _b=this.getPanels();
-if(_b[_a-1]){
-this.onSelected(_b[_a-1]);
-}
-}
-this._checkButtons();
-},hasNextPanel:function(){
-var _c=this.selectedIndex();
-return (_c<(this.getPanels().length-1));
-},hasPreviousPanel:function(){
-var _d=this.selectedIndex();
-return (_d>0);
-},done:function(){
-this.selected.done();
-}});
-dojo.widget.defineWidget("dojo.widget.WizardPane",dojo.widget.ContentPane,{canGoBack:true,passFunction:"",doneFunction:"",postMixInProperties:function(_e,_f){
-if(this.passFunction){
-this.passFunction=dj_global[this.passFunction];
-}
-if(this.doneFunction){
-this.doneFunction=dj_global[this.doneFunction];
-}
-dojo.widget.WizardPane.superclass.postMixInProperties.apply(this,arguments);
-},_checkPass:function(){
-if(this.passFunction&&dojo.lang.isFunction(this.passFunction)){
-var _10=this.passFunction();
-if(_10){
-alert(_10);
-return false;
-}
-}
-return true;
-},done:function(){
-if(this.doneFunction&&dojo.lang.isFunction(this.doneFunction)){
-this.doneFunction();
-}
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/YahooMap.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/YahooMap.js
deleted file mode 100644
index 11e4fc5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/YahooMap.js
+++ /dev/null
@@ -1,132 +0,0 @@
-dojo.provide("dojo.widget.YahooMap");
-dojo.require("dojo.event.*");
-dojo.require("dojo.math");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-(function(){
-var _1=djConfig["yAppId"]||djConfig["yahooAppId"]||"dojotoolkit";
-if(!dojo.hostenv.post_load_){
-if(_1=="dojotoolkit"){
-dojo.debug("please provide a unique Yahoo App ID in djConfig.yahooAppId when using the map widget");
-}
-var _2="<scr"+"ipt src='http://api.maps.yahoo.com/ajaxymap?v=3.0&appid="+_1+"'></scri"+"pt>";
-if(!dj_global["YMap"]){
-document.write(_2);
-}
-}else{
-dojo.debug("cannot initialize map system after the page has been loaded! Please either manually include the script block provided by Yahoo in your page or require() the YahooMap widget before onload has fired");
-}
-})();
-dojo.widget.defineWidget("dojo.widget.YahooMap",dojo.widget.HtmlWidget,function(){
-this.map=null;
-this.datasrc="";
-this.data=[];
-this.width=0;
-this.height=0;
-this.controls=["zoomlong","maptype","pan"];
-},{isContainer:false,templatePath:null,templateCssPath:null,findCenter:function(_3){
-var _4=new YGeoPoint(37,-90);
-if(_3.length==0){
-return _4;
-}
-var _5,_6,_7,_8,_9,_a;
-_5=_6=_3[0].Lat;
-_7=_8=_3[0].Lon;
-for(var i=0;i<_3.length;i++){
-_5=Math.min(_5,_3[i].Lat);
-_6=Math.max(_6,_3[i].Lat);
-_7=Math.min(_7,_3[i].Lon);
-_8=Math.max(_8,_3[i].Lon);
-}
-_9=dojo.math.round((_5+_6)/2,6);
-_a=dojo.math.round((_7+_8)/2,6);
-return new YGeoPoint(_9,_a);
-},setControls:function(){
-var _c={maptype:"addTypeControl",pan:"addPanControl",zoomlong:"addZoomLong",zoomshort:"addZoomShort"};
-var c=this.controls;
-for(var i=0;i<c.length;i++){
-var _f=_c[c[i].toLowerCase()];
-if(this.map[_f]){
-this.map[_f]();
-}
-}
-},parse:function(_10){
-this.data=[];
-var h=_10.getElementsByTagName("thead")[0];
-if(!h){
-return;
-}
-var a=[];
-var _13=h.getElementsByTagName("td");
-if(_13.length==0){
-_13=h.getElementsByTagName("th");
-}
-for(var i=0;i<_13.length;i++){
-var c=_13[i].innerHTML.toLowerCase();
-if(c=="long"){
-c="lng";
-}
-a.push(c);
-}
-var b=_10.getElementsByTagName("tbody")[0];
-if(!b){
-return;
-}
-for(var i=0;i<b.childNodes.length;i++){
-if(!(b.childNodes[i].nodeName&&b.childNodes[i].nodeName.toLowerCase()=="tr")){
-continue;
-}
-var _17=b.childNodes[i].getElementsByTagName("td");
-var o={};
-for(var j=0;j<a.length;j++){
-var col=a[j];
-if(col=="lat"||col=="lng"){
-o[col]=parseFloat(_17[j].innerHTML);
-}else{
-o[col]=_17[j].innerHTML;
-}
-}
-this.data.push(o);
-}
-},render:function(){
-var pts=[];
-var d=this.data;
-for(var i=0;i<d.length;i++){
-var pt=new YGeoPoint(d[i].lat,d[i].lng);
-pts.push(pt);
-var _1f=d[i].icon||null;
-if(_1f){
-_1f=new YImage(_1f);
-}
-var m=new YMarker(pt,_1f);
-if(d[i].description){
-m.addAutoExpand("<div>"+d[i].description+"</div>");
-}
-this.map.addOverlay(m);
-}
-var c=this.findCenter(pts);
-var z=this.map.getZoomLevel(pts);
-this.map.drawZoomAndCenter(c,z);
-},initialize:function(_23,_24){
-if(!YMap||!YGeoPoint){
-dojo.raise("dojo.widget.YahooMap: The Yahoo Map script must be included in order to use this widget.");
-}
-if(this.datasrc){
-this.parse(dojo.byId(this.datasrc));
-}else{
-if(this.domNode.getElementsByTagName("table")[0]){
-this.parse(this.domNode.getElementsByTagName("table")[0]);
-}
-}
-},postCreate:function(){
-while(this.domNode.childNodes.length>0){
-this.domNode.removeChild(this.domNode.childNodes[0]);
-}
-if(this.width>0&&this.height>0){
-this.map=new YMap(this.domNode,YAHOO_MAP_REG,new YSize(this.width,this.height));
-}else{
-this.map=new YMap(this.domNode);
-}
-this.setControls();
-this.render();
-}});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/__package__.js
deleted file mode 100644
index 61276b2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({common:["dojo.xml.Parse","dojo.widget.Widget","dojo.widget.Parse","dojo.widget.Manager"],browser:["dojo.widget.DomWidget","dojo.widget.HtmlWidget"],dashboard:["dojo.widget.DomWidget","dojo.widget.HtmlWidget"],svg:["dojo.widget.SvgWidget"],rhino:["dojo.widget.SwtWidget"]});
-dojo.provide("dojo.widget.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoContainer.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoContainer.js
deleted file mode 100644
index ebf936e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoContainer.js
+++ /dev/null
@@ -1,62 +0,0 @@
-dojo.provide("dojo.widget.demoEngine.DemoContainer");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.demoEngine.DemoPane");
-dojo.require("dojo.widget.demoEngine.SourcePane");
-dojo.require("dojo.widget.TabContainer");
-dojo.widget.defineWidget("my.widget.demoEngine.DemoContainer",dojo.widget.HtmlWidget,{templateString:"<div dojoAttachPoint=\"domNode\">\n\t<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\">\n\t\t<tbody>\n\t\t\t<tr dojoAttachPoint=\"headerNode\">\n\t\t\t\t<td dojoAttachPoint=\"returnNode\" valign=\"middle\" width=\"1%\">\n\t\t\t\t\t<img dojoAttachPoint=\"returnImageNode\" dojoAttachEvent=\"onclick: returnToDemos\"/>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<h1 dojoAttachPoint=\"demoNameNode\"></h1>\n\t\t\t\t\t<p dojoAttachPoint=\"summaryNode\"></p>\n\t\t\t\t</td>\n\t\t\t\t<td dojoAttachPoint=\"tabControlNode\" valign=\"middle\" align=\"right\" nowrap>\n\t\t\t\t\t<span dojoAttachPoint=\"sourceButtonNode\" dojoAttachEvent=\"onclick: showSource\">source</span>\n\t\t\t\t\t<span dojoAttachPoint=\"demoButtonNode\" dojoAttachEvent=\"onclick: showDemo\">demo</span>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td colspan=\"3\">\n\t\t\t\t\t<div dojoAttachPoint=\"tabNode\">\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n",templateCssString:".demoContainer{\n\twidth: 100%;\n\theight: 100%;\n\tpadding: 0px;\n\tmargin: 0px;\n}\n\n.demoContainer .return {\n\tcursor: pointer;\n}\n\n.demoContainer span {\n\tmargin-right: 10px;\n\tcursor: pointer;\n}\n\n.demoContainer .selected {\n\tborder-bottom: 5px solid #95bfff;\n}\n\n.demoContainer table {\n\tbackground: #f5f5f5;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.demoContainerTabs {\n\twidth: 100%;\n\theight: 400px;\n}\n\n.demoContainerTabs .dojoTabLabels-top {\n\tdisplay: none;\n}\n\n.demoContainerTabs .dojoTabPaneWrapper {\n\tborder: 0px;\n}\n\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","demoEngine/templates/DemoContainer.css"),postCreate:function(){
-dojo.html.addClass(this.domNode,this.domNodeClass);
-dojo.html.addClass(this.tabNode,this.tabClass);
-dojo.html.addClass(this.returnImageNode,this.returnClass);
-this.returnImageNode.src=this.returnImage;
-this.tabContainer=dojo.widget.createWidget("TabContainer",{},this.tabNode);
-this.demoTab=dojo.widget.createWidget("DemoPane",{});
-this.tabContainer.addChild(this.demoTab);
-this.sourceTab=dojo.widget.createWidget("SourcePane",{});
-this.tabContainer.addChild(this.sourceTab);
-dojo.html.setOpacity(this.domNode,0);
-dojo.html.hide(this.domNode);
-},loadDemo:function(_1){
-this.demoTab.setHref(_1);
-this.sourceTab.setHref(_1);
-this.showDemo();
-},setName:function(_2){
-dojo.html.removeChildren(this.demoNameNode);
-this.demoNameNode.appendChild(document.createTextNode(_2));
-},setSummary:function(_3){
-dojo.html.removeChildren(this.summaryNode);
-this.summaryNode.appendChild(document.createTextNode(_3));
-},showSource:function(){
-dojo.html.removeClass(this.demoButtonNode,this.selectedButtonClass);
-dojo.html.addClass(this.sourceButtonNode,this.selectedButtonClass);
-this.tabContainer.selectTab(this.sourceTab);
-},showDemo:function(){
-dojo.html.removeClass(this.sourceButtonNode,this.selectedButtonClass);
-dojo.html.addClass(this.demoButtonNode,this.selectedButtonClass);
-this.tabContainer.selectTab(this.demoTab);
-},returnToDemos:function(){
-dojo.debug("Return To Demos");
-},show:function(){
-dojo.html.setOpacity(this.domNode,1);
-dojo.html.show(this.domNode);
-this.tabContainer.checkSize();
-}},"",function(){
-dojo.debug("DemoPane Init");
-this.domNodeClass="demoContainer";
-this.tabContainer="";
-this.sourceTab="";
-this.demoTab="";
-this.headerNode="";
-this.returnNode="";
-this.returnImageNode="";
-this.returnImage="images/dojoDemos.gif";
-this.returnClass="return";
-this.summaryNode="";
-this.demoNameNode="";
-this.tabControlNode="";
-this.tabNode="";
-this.tabClass="demoContainerTabs";
-this.sourceButtonNode="";
-this.demoButtonNode="";
-this.selectedButtonClass="selected";
-});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoItem.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoItem.js
deleted file mode 100644
index 3aa3b5d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoItem.js
+++ /dev/null
@@ -1,39 +0,0 @@
-dojo.provide("dojo.widget.demoEngine.DemoItem");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.widget.defineWidget("my.widget.demoEngine.DemoItem",dojo.widget.HtmlWidget,{templateString:"<div dojoAttachPoint=\"domNode\">\n\t<div dojoAttachPoint=\"summaryBoxNode\">\n\t\t<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n\t\t\t<tbody>\n\t\t\t\t<tr>\n\t\t\t\t\t<td dojoAttachPoint=\"screenshotTdNode\" valign=\"top\" width=\"1%\">\n\t\t\t\t\t\t<img dojoAttachPoint=\"thumbnailImageNode\" dojoAttachEvent=\"onclick: onSelectDemo\" />\n\t\t\t\t\t</td>\n\t\t\t\t\t<td dojoAttachPoint=\"summaryContainerNode\" valign=\"top\">\n\t\t\t\t\t\t<h1 dojoAttachPoint=\"nameNode\">\n\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t<div dojoAttachPoint=\"summaryNode\">\n\t\t\t\t\t\t\t<p dojoAttachPoint=\"descriptionNode\"></p>\n\t\t\t\t\t\t\t<div dojoAttachPoint=\"viewDemoLinkNode\"><img dojoAttachPoint=\"viewDemoImageNode\"/ dojoAttachEvent=\"onclick: onSelectDemo\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</div>\n",templateCssString:".demoItemSummaryBox {\n\tbackground: #efefef;\n\tborder:1px solid #dae3ee;\n}\n\n.demoItemScreenshot {\n\tpadding:0.65em;\n\twidth:175px;\n\tborder-right:1px solid #fafafa;\n\ttext-align:center;\n\tcursor: pointer;\n}\n\n.demoItemWrapper{\n\tmargin-bottom:1em;\n}\n\n.demoItemWrapper a:link, .demoItemWrapper a:visited {\n\tcolor:#a6238f;\n\ttext-decoration:none;\n}\n\n.demoItemSummaryContainer {\n\tborder-left:1px solid #ddd;\n}\n\n.demoItemSummaryContainer h1 {\n\tbackground-color:#e8e8e8;\n\tborder-bottom: 1px solid #e6e6e6;\n\tcolor:#738fb9;\n\tmargin:1px;\n\tpadding:0.5em;\n\tfont-family:\"Lucida Grande\", \"Tahoma\", serif;\n\tfont-size:1.25em;\n\tfont-weight:normal;\n}\n\n.demoItemSummaryContainer h1 .packageSummary {\n\tdisplay:block;\n\tcolor:#000;\n\tfont-size:10px;\n\tmargin-top:2px;\n}\n\n.demoItemSummaryContainer .demoItemSummary{\n\tpadding:1em;\n}\n\n.demoItemSummaryContainer .demoItemSummary p {\n\tfont-size:0.85em;\n\tpadding:0;\n\tmargin:0;\n}\n\n.demoItemView {\n\ttext-align:right;\n\tcursor: pointer;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","demoEngine/templates/DemoItem.css"),postCreate:function(){
-dojo.html.addClass(this.domNode,this.domNodeClass);
-dojo.html.addClass(this.summaryBoxNode,this.summaryBoxClass);
-dojo.html.addClass(this.screenshotTdNode,this.screenshotTdClass);
-dojo.html.addClass(this.summaryContainerNode,this.summaryContainerClass);
-dojo.html.addClass(this.summaryNode,this.summaryClass);
-dojo.html.addClass(this.viewDemoLinkNode,this.viewDemoLinkClass);
-this.nameNode.appendChild(document.createTextNode(this.name));
-this.descriptionNode.appendChild(document.createTextNode(this.description));
-this.thumbnailImageNode.src=this.thumbnail;
-this.thumbnailImageNode.name=this.name;
-this.viewDemoImageNode.src=this.viewDemoImage;
-this.viewDemoImageNode.name=this.name;
-},onSelectDemo:function(){
-}},"",function(){
-this.demo="";
-this.domNodeClass="demoItemWrapper";
-this.summaryBoxNode="";
-this.summaryBoxClass="demoItemSummaryBox";
-this.nameNode="";
-this.thumbnailImageNode="";
-this.viewDemoImageNode="";
-this.screenshotTdNode="";
-this.screenshotTdClass="demoItemScreenshot";
-this.summaryContainerNode="";
-this.summaryContainerClass="demoItemSummaryContainer";
-this.summaryNode="";
-this.summaryClass="demoItemSummary";
-this.viewDemoLinkNode="";
-this.viewDemoLinkClass="demoItemView";
-this.descriptionNode="";
-this.name="Some Demo";
-this.description="This is the description of this demo.";
-this.thumbnail="images/test_thumb.gif";
-this.viewDemoImage="images/viewDemo.png";
-});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoNavigator.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoNavigator.js
deleted file mode 100644
index 8c9aa45..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoNavigator.js
+++ /dev/null
@@ -1,121 +0,0 @@
-dojo.provide("dojo.widget.demoEngine.DemoNavigator");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.Button");
-dojo.require("dojo.widget.demoEngine.DemoItem");
-dojo.require("dojo.io.*");
-dojo.require("dojo.lfx.*");
-dojo.require("dojo.lang.common");
-dojo.widget.defineWidget("my.widget.demoEngine.DemoNavigator",dojo.widget.HtmlWidget,{templateString:"<div dojoAttachPoint=\"domNode\">\n\t<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\">\n\t\t<tbody>\n\t\t\t<tr dojoAttachPoint=\"navigationContainer\">\n\t\t\t\t<td dojoAttachPoint=\"categoriesNode\" valign=\"top\" width=\"1%\">\n\t\t\t\t\t<h1>Categories</h1>\n\t\t\t\t\t<div dojoAttachPoint=\"categoriesButtonsNode\"></div>\n\t\t\t\t</td>\n\n\t\t\t\t<td dojoAttachPoint=\"demoListNode\" valign=\"top\">\n\t\t\t\t\t<div dojoAttachPoint=\"demoListWrapperNode\">\n\t\t\t\t\t\t<div dojoAttachPoint=\"demoListContainerNode\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td colspan=\"2\">\n\t\t\t\t\t<div dojoAttachPoint=\"demoNode\"></div>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n",templateCssString:".demoNavigatorListWrapper {\n\tborder:1px solid #dcdbdb;\n\tbackground-color:#f8f8f8;\n\tpadding:2px;\n}\n\n.demoNavigatorListContainer {\n\tborder:1px solid #f0f0f0;\n\tbackground-color:#fff;\n\tpadding:1em;\n}\n\n.demoNavigator h1 {\n\tmargin-top: 0px;\n\tmargin-bottom: 10px;\n\tfont-size: 1.2em;\n\tborder-bottom:1px dotted #a9ccf5;\n}\n\n.demoNavigator .dojoButton {\n\tmargin-bottom: 5px;\n}\n\n.demoNavigator .dojoButton .dojoButtonContents {\n\tfont-size: 1.1em;\n\twidth: 100px;\n\tcolor: black;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","demoEngine/templates/DemoNavigator.css"),postCreate:function(){
-dojo.html.addClass(this.domNode,this.domNodeClass);
-dojo.html.addClass(this.demoListWrapperNode,this.demoListWrapperClass);
-dojo.html.addClass(this.demoListContainerNode,this.demoListContainerClass);
-if(dojo.render.html.ie){
-dojo.debug("render ie");
-dojo.html.hide(this.demoListWrapperNode);
-}else{
-dojo.debug("render non-ie");
-dojo.lfx.html.fadeHide(this.demoListWrapperNode,0).play();
-}
-this.getRegistry(this.demoRegistryUrl);
-this.demoContainer=dojo.widget.createWidget("DemoContainer",{returnImage:this.returnImage},this.demoNode);
-dojo.event.connect(this.demoContainer,"returnToDemos",this,"returnToDemos");
-this.demoContainer.hide();
-},returnToDemos:function(){
-this.demoContainer.hide();
-if(dojo.render.html.ie){
-dojo.debug("render ie");
-dojo.html.show(this.navigationContainer);
-}else{
-dojo.debug("render non-ie");
-dojo.lfx.html.fadeShow(this.navigationContainer,250).play();
-}
-dojo.lang.forEach(this.categoriesChildren,dojo.lang.hitch(this,function(_1){
-_1.checkSize();
-}));
-dojo.lang.forEach(this.demoListChildren,dojo.lang.hitch(this,function(_2){
-_2.checkSize();
-}));
-},show:function(){
-dojo.html.show(this.domNode);
-dojo.html.setOpacity(this.domNode,1);
-dojo.html.setOpacity(this.navigationContainer,1);
-dojo.lang.forEach(this.categoriesChildren,dojo.lang.hitch(this,function(_3){
-_3.checkSize();
-}));
-dojo.lang.forEach(this.demoListChildren,dojo.lang.hitch(this,function(_4){
-_4.checkSize();
-}));
-},getRegistry:function(_5){
-dojo.io.bind({url:_5,load:dojo.lang.hitch(this,this.processRegistry),mimetype:"text/json"});
-},processRegistry:function(_6,_7,e){
-dojo.debug("Processing Registry");
-this.registry=_7;
-dojo.lang.forEach(this.registry.navigation,dojo.lang.hitch(this,this.addCategory));
-},addCategory:function(_9){
-var _a=dojo.widget.createWidget("Button",{caption:_9.name});
-if(!dojo.lang.isObject(this.registry.categories)){
-this.registry.categories=function(){
-};
-}
-this.registry.categories[_9.name]=_9;
-this.categoriesChildren.push(_a);
-this.categoriesButtonsNode.appendChild(_a.domNode);
-_a.domNode.categoryName=_9.name;
-dojo.event.connect(_a,"onClick",this,"onSelectCategory");
-},addDemo:function(_b){
-var _c=this.registry.definitions[_b];
-if(dojo.render.html.ie){
-dojo.html.show(this.demoListWrapperNode);
-}else{
-dojo.lfx.html.fadeShow(this.demoListWrapperNode,250).play();
-}
-var _d=dojo.widget.createWidget("DemoItem",{viewDemoImage:this.viewDemoImage,name:_b,description:_c.description,thumbnail:_c.thumbnail});
-this.demoListChildren.push(_d);
-this.demoListContainerNode.appendChild(_d.domNode);
-dojo.event.connect(_d,"onSelectDemo",this,"onSelectDemo");
-},onSelectCategory:function(e){
-catName=e.currentTarget.categoryName;
-dojo.debug("Selected Category: "+catName);
-dojo.lang.forEach(this.demoListChildren,function(_f){
-_f.destroy();
-});
-this.demoListChildren=[];
-dojo.lang.forEach(this.registry.categories[catName].demos,dojo.lang.hitch(this,function(_10){
-this.addDemo(_10);
-}));
-},onSelectDemo:function(e){
-dojo.debug("Demo Selected: "+e.target.name);
-if(dojo.render.html.ie){
-dojo.debug("render ie");
-dojo.html.hide(this.navigationContainer);
-this.demoContainer.show();
-this.demoContainer.showDemo();
-}else{
-dojo.debug("render non-ie");
-dojo.lfx.html.fadeHide(this.navigationContainer,250,null,dojo.lang.hitch(this,function(){
-this.demoContainer.show();
-this.demoContainer.showDemo();
-})).play();
-}
-this.demoContainer.loadDemo(this.registry.definitions[e.target.name].url);
-this.demoContainer.setName(e.target.name);
-this.demoContainer.setSummary(this.registry.definitions[e.target.name].description);
-}},"",function(){
-this.demoRegistryUrl="demoRegistry.json";
-this.registry=function(){
-};
-this.categoriesNode="";
-this.categoriesButtonsNode="";
-this.navigationContainer="";
-this.domNodeClass="demoNavigator";
-this.demoNode="";
-this.demoContainer="";
-this.demoListWrapperNode="";
-this.demoListWrapperClass="demoNavigatorListWrapper";
-this.demoListContainerClass="demoNavigatorListContainer";
-this.returnImage="images/dojoDemos.gif";
-this.viewDemoImage="images/viewDemo.png";
-this.demoListChildren=[];
-this.categoriesChildren=[];
-});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoPane.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoPane.js
deleted file mode 100644
index a133ec2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/DemoPane.js
+++ /dev/null
@@ -1,20 +0,0 @@
-dojo.provide("dojo.widget.demoEngine.DemoPane");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.widget.defineWidget("my.widget.demoEngine.DemoPane",dojo.widget.HtmlWidget,{templateString:"<div dojoAttachPoint=\"domNode\">\n\t<iframe dojoAttachPoint=\"demoNode\"></iframe>\n</div>\n",templateCssString:".demoPane {\n\twidth: 100%;\n\theight: 100%;\n\tpadding: 0px;\n\tmargin: 0px;\n\toverflow: hidden;\n}\n\n.demoPane iframe {\n\twidth: 100%;\n\theight: 100%;\n\tborder: 0px;\n\tborder: none;\n\toverflow: auto;\n\tpadding: 0px;\n\tmargin:0px;\n\tbackground: #ffffff;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","demoEngine/templates/DemoPane.css"),postCreate:function(){
-dojo.html.addClass(this.domNode,this.domNodeClass);
-dojo.debug("PostCreate");
-this._launchDemo();
-},_launchDemo:function(){
-dojo.debug("Launching Demo");
-dojo.debug(this.demoNode);
-this.demoNode.src=this.href;
-},setHref:function(_1){
-this.href=_1;
-this._launchDemo();
-}},"",function(){
-dojo.debug("DemoPane Init");
-this.domNodeClass="demoPane";
-this.demoNode="";
-this.href="";
-});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/SourcePane.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/SourcePane.js
deleted file mode 100644
index 04158d9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/SourcePane.js
+++ /dev/null
@@ -1,22 +0,0 @@
-dojo.provide("dojo.widget.demoEngine.SourcePane");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.io.*");
-dojo.widget.defineWidget("my.widget.demoEngine.SourcePane",dojo.widget.HtmlWidget,{templateString:"<div dojoAttachPoint=\"domNode\">\n\t<textarea dojoAttachPoint=\"sourceNode\" rows=\"100%\"></textarea>\n</div>\n",templateCssString:".sourcePane {\n\twidth: 100%;\n\theight: 100%;\n\tpadding: 0px;\n\tmargin: 0px;\n\toverflow: hidden;\n}\n\n.sourcePane textarea{\n\twidth: 100%;\n\theight: 100%;\n\tborder: 0px;\n\toverflow: auto;\n\tpadding: 0px;\n\tmargin:0px;\n}\n\n* html .sourcePane {\n\toverflow: auto;\n}\n",templateCssPath:dojo.uri.moduleUri("dojo.widget","demoEngine/templates/SourcePane.css"),postCreate:function(){
-dojo.html.addClass(this.domNode,this.domNodeClass);
-dojo.debug("PostCreate");
-},getSource:function(){
-if(this.href){
-dojo.io.bind({url:this.href,load:dojo.lang.hitch(this,"fillInSource"),mimetype:"text/plain"});
-}
-},fillInSource:function(_1,_2,e){
-this.sourceNode.value=_2;
-},setHref:function(_4){
-this.href=_4;
-this.getSource();
-}},"",function(){
-dojo.debug("SourcePane Init");
-this.domNodeClass="sourcePane";
-this.sourceNode="";
-this.href="";
-});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/__package__.js
deleted file mode 100644
index db2b7ca..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/__package__.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.kwCompoundRequire({browser:["dojo.widget.demoEngine.DemoItem","dojo.widget.demoEngine.DemoNavigator","dojo.widget.demoEngine.DemoPane","dojo.widget.demoEngine.SourcePane","dojo.widget.demoEngine.DemoContainer"]});
-dojo.provide("dojo.widget.demoEngine.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoContainer.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoContainer.css
deleted file mode 100644
index 07d97c0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoContainer.css
+++ /dev/null
@@ -1,39 +0,0 @@
-.demoContainer{
-	width: 100%;
-	height: 100%;
-	padding: 0px;
-	margin: 0px;
-}
-
-.demoContainer .return {
-	cursor: pointer;
-}
-
-.demoContainer span {
-	margin-right: 10px;
-	cursor: pointer;
-}
-
-.demoContainer .selected {
-	border-bottom: 5px solid #95bfff;
-}
-
-.demoContainer table {
-	background: #f5f5f5;
-	width: 100%;
-	height: 100%;
-}
-
-.demoContainerTabs {
-	width: 100%;
-	height: 400px;
-}
-
-.demoContainerTabs .dojoTabLabels-top {
-	display: none;
-}
-
-.demoContainerTabs .dojoTabPaneWrapper {
-	border: 0px;
-}
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoContainer.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoContainer.html
deleted file mode 100644
index 08ee83a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoContainer.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<div dojoAttachPoint="domNode">
-	<table width="100%" cellspacing="0" cellpadding="5">
-		<tbody>
-			<tr dojoAttachPoint="headerNode">
-				<td dojoAttachPoint="returnNode" valign="middle" width="1%">
-					<img dojoAttachPoint="returnImageNode" dojoAttachEvent="onclick: returnToDemos"/>
-				</td>
-				<td>
-					<h1 dojoAttachPoint="demoNameNode"></h1>
-					<p dojoAttachPoint="summaryNode"></p>
-				</td>
-				<td dojoAttachPoint="tabControlNode" valign="middle" align="right" nowrap>
-					<span dojoAttachPoint="sourceButtonNode" dojoAttachEvent="onclick: showSource">source</span>
-					<span dojoAttachPoint="demoButtonNode" dojoAttachEvent="onclick: showDemo">demo</span>
-				</td>
-			</tr>
-			<tr>
-				<td colspan="3">
-					<div dojoAttachPoint="tabNode">
-					</div>
-				</td>
-			</tr>
-		</tbody>
-	</table>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoItem.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoItem.css
deleted file mode 100644
index 6e99158..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoItem.css
+++ /dev/null
@@ -1,58 +0,0 @@
-.demoItemSummaryBox {
-	background: #efefef;
-	border:1px solid #dae3ee;
-}
-
-.demoItemScreenshot {
-	padding:0.65em;
-	width:175px;
-	border-right:1px solid #fafafa;
-	text-align:center;
-	cursor: pointer;
-}
-
-.demoItemWrapper{
-	margin-bottom:1em;
-}
-
-.demoItemWrapper a:link, .demoItemWrapper a:visited {
-	color:#a6238f;
-	text-decoration:none;
-}
-
-.demoItemSummaryContainer {
-	border-left:1px solid #ddd;
-}
-
-.demoItemSummaryContainer h1 {
-	background-color:#e8e8e8;
-	border-bottom: 1px solid #e6e6e6;
-	color:#738fb9;
-	margin:1px;
-	padding:0.5em;
-	font-family:"Lucida Grande", "Tahoma", serif;
-	font-size:1.25em;
-	font-weight:normal;
-}
-
-.demoItemSummaryContainer h1 .packageSummary {
-	display:block;
-	color:#000;
-	font-size:10px;
-	margin-top:2px;
-}
-
-.demoItemSummaryContainer .demoItemSummary{
-	padding:1em;
-}
-
-.demoItemSummaryContainer .demoItemSummary p {
-	font-size:0.85em;
-	padding:0;
-	margin:0;
-}
-
-.demoItemView {
-	text-align:right;
-	cursor: pointer;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoItem.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoItem.html
deleted file mode 100644
index db03791..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoItem.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<div dojoAttachPoint="domNode">
-	<div dojoAttachPoint="summaryBoxNode">
-		<table width="100%" cellspacing="0" cellpadding="0">
-			<tbody>
-				<tr>
-					<td dojoAttachPoint="screenshotTdNode" valign="top" width="1%">
-						<img dojoAttachPoint="thumbnailImageNode" dojoAttachEvent="onclick: onSelectDemo" />
-					</td>
-					<td dojoAttachPoint="summaryContainerNode" valign="top">
-						<h1 dojoAttachPoint="nameNode">
-						</h1>
-						<div dojoAttachPoint="summaryNode">
-							<p dojoAttachPoint="descriptionNode"></p>
-							<div dojoAttachPoint="viewDemoLinkNode"><img dojoAttachPoint="viewDemoImageNode"/ dojoAttachEvent="onclick: onSelectDemo"></div>
-						</div>
-					</td>
-				</tr>
-			</tbody>
-		</table>
-	</div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoNavigator.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoNavigator.css
deleted file mode 100644
index 612aaf3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoNavigator.css
+++ /dev/null
@@ -1,28 +0,0 @@
-.demoNavigatorListWrapper {
-	border:1px solid #dcdbdb;
-	background-color:#f8f8f8;
-	padding:2px;
-}
-
-.demoNavigatorListContainer {
-	border:1px solid #f0f0f0;
-	background-color:#fff;
-	padding:1em;
-}
-
-.demoNavigator h1 {
-	margin-top: 0px;
-	margin-bottom: 10px;
-	font-size: 1.2em;
-	border-bottom:1px dotted #a9ccf5;
-}
-
-.demoNavigator .dojoButton {
-	margin-bottom: 5px;
-}
-
-.demoNavigator .dojoButton .dojoButtonContents {
-	font-size: 1.1em;
-	width: 100px;
-	color: black;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoNavigator.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoNavigator.html
deleted file mode 100644
index dd04406..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoNavigator.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<div dojoAttachPoint="domNode">
-	<table width="100%" cellspacing="0" cellpadding="5">
-		<tbody>
-			<tr dojoAttachPoint="navigationContainer">
-				<td dojoAttachPoint="categoriesNode" valign="top" width="1%">
-					<h1>Categories</h1>
-					<div dojoAttachPoint="categoriesButtonsNode"></div>
-				</td>
-
-				<td dojoAttachPoint="demoListNode" valign="top">
-					<div dojoAttachPoint="demoListWrapperNode">
-						<div dojoAttachPoint="demoListContainerNode">
-						</div>
-					</div>
-				</td>
-			</tr>
-			<tr>
-				<td colspan="2">
-					<div dojoAttachPoint="demoNode"></div>
-				</td>
-			</tr>
-		</tbody>
-	</table>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoPane.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoPane.css
deleted file mode 100644
index dd68365..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoPane.css
+++ /dev/null
@@ -1,18 +0,0 @@
-.demoPane {
-	width: 100%;
-	height: 100%;
-	padding: 0px;
-	margin: 0px;
-	overflow: hidden;
-}
-
-.demoPane iframe {
-	width: 100%;
-	height: 100%;
-	border: 0px;
-	border: none;
-	overflow: auto;
-	padding: 0px;
-	margin:0px;
-	background: #ffffff;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoPane.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoPane.html
deleted file mode 100644
index 482f3d1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/DemoPane.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div dojoAttachPoint="domNode">
-	<iframe dojoAttachPoint="demoNode"></iframe>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/SourcePane.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/SourcePane.css
deleted file mode 100644
index 8e78c80..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/SourcePane.css
+++ /dev/null
@@ -1,20 +0,0 @@
-.sourcePane {
-	width: 100%;
-	height: 100%;
-	padding: 0px;
-	margin: 0px;
-	overflow: hidden;
-}
-
-.sourcePane textarea{
-	width: 100%;
-	height: 100%;
-	border: 0px;
-	overflow: auto;
-	padding: 0px;
-	margin:0px;
-}
-
-* html .sourcePane {
-	overflow: auto;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/SourcePane.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/SourcePane.html
deleted file mode 100644
index b55b540..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/SourcePane.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div dojoAttachPoint="domNode">
-	<textarea dojoAttachPoint="sourceNode" rows="100%"></textarea>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/general.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/general.css
deleted file mode 100644
index 45dae86..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/general.css
+++ /dev/null
@@ -1,73 +0,0 @@
-.demoListWrapper {
-	border:1px solid #dcdbdb;
-	background-color:#f8f8f8;
-	padding:2px;
-}
-
-.demoListContainer {
-	border:1px solid #f0f0f0;
-	background-color:#fff;
-	padding:1em;
-}
-
-.demoSummaryBox {
-	background: #efefef;
-	border:1px solid #dae3ee;
-}
-
-.screenshot {
-	padding:0.65em;
-	width:175px;
-	border-right:1px solid #fafafa;
-	text-align:center;
-}
-
-.demoSummary {
-	margin-bottom:1em;
-}
-
-.demoSummary a:link, .demoSummary a:visited {
-	color:#a6238f;
-	text-decoration:none;
-}
-
-.summaryContainer {
-	border-left:1px solid #ddd;
-}
-
-.summaryContainer h1 {
-	background-color:#e8e8e8;
-	border-bottom: 1px solid #e6e6e6;
-	color:#738fb9;
-	margin:1px;
-	padding:0.5em;
-	font-family:"Lucida Grande", "Tahoma", serif;
-	font-size:1.25em;
-	font-weight:normal;
-}
-
-.summaryContainer h1 .packageSummary {
-	display:block;
-	color:#000;
-	font-size:10px;
-	margin-top:2px;
-}
-
-.summaryContainer .summary {
-	padding:1em;
-}
-
-.summaryContainer .summary p {
-	font-size:0.85em;
-	padding:0;
-	margin:0;
-}
-
-.reflection {
-	background: url("images/demoBoxReflection.gif") repeat-x top left;
-	height:25px;
-}
-
-.view {
-	text-align:right;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/images/test_thumb.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/images/test_thumb.gif
deleted file mode 100644
index 8bf85e9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/images/test_thumb.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/images/viewDemo.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/images/viewDemo.png
deleted file mode 100644
index 07c6ff9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/demoEngine/templates/images/viewDemo.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/html/layout.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/html/layout.js
deleted file mode 100644
index 2714e16..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/html/layout.js
+++ /dev/null
@@ -1,81 +0,0 @@
-dojo.provide("dojo.widget.html.layout");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.string.extras");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.layout");
-dojo.widget.html.layout=function(_1,_2,_3){
-dojo.html.addClass(_1,"dojoLayoutContainer");
-_2=dojo.lang.filter(_2,function(_4,_5){
-_4.idx=_5;
-return dojo.lang.inArray(["top","bottom","left","right","client","flood"],_4.layoutAlign);
-});
-if(_3&&_3!="none"){
-var _6=function(_7){
-switch(_7.layoutAlign){
-case "flood":
-return 1;
-case "left":
-case "right":
-return (_3=="left-right")?2:3;
-case "top":
-case "bottom":
-return (_3=="left-right")?3:2;
-default:
-return 4;
-}
-};
-_2.sort(function(a,b){
-return (_6(a)-_6(b))||(a.idx-b.idx);
-});
-}
-var f={top:dojo.html.getPixelValue(_1,"padding-top",true),left:dojo.html.getPixelValue(_1,"padding-left",true)};
-dojo.lang.mixin(f,dojo.html.getContentBox(_1));
-dojo.lang.forEach(_2,function(_b){
-var _c=_b.domNode;
-var _d=_b.layoutAlign;
-with(_c.style){
-left=f.left+"px";
-top=f.top+"px";
-bottom="auto";
-right="auto";
-}
-dojo.html.addClass(_c,"dojoAlign"+dojo.string.capitalize(_d));
-if((_d=="top")||(_d=="bottom")){
-dojo.html.setMarginBox(_c,{width:f.width});
-var h=dojo.html.getMarginBox(_c).height;
-f.height-=h;
-if(_d=="top"){
-f.top+=h;
-}else{
-_c.style.top=f.top+f.height+"px";
-}
-if(_b.onResized){
-_b.onResized();
-}
-}else{
-if(_d=="left"||_d=="right"){
-var w=dojo.html.getMarginBox(_c).width;
-if(_b.resizeTo){
-_b.resizeTo(w,f.height);
-}else{
-dojo.html.setMarginBox(_c,{width:w,height:f.height});
-}
-f.width-=w;
-if(_d=="left"){
-f.left+=w;
-}else{
-_c.style.left=f.left+f.width+"px";
-}
-}else{
-if(_d=="flood"||_d=="client"){
-if(_b.resizeTo){
-_b.resizeTo(f.width,f.height);
-}else{
-dojo.html.setMarginBox(_c,{width:f.width,height:f.height});
-}
-}
-}
-}
-});
-};
-dojo.html.insertCssText(".dojoLayoutContainer{ position: relative; display: block; overflow: hidden; }\n"+"body .dojoAlignTop, body .dojoAlignBottom, body .dojoAlignLeft, body .dojoAlignRight { position: absolute; overflow: hidden; }\n"+"body .dojoAlignClient { position: absolute }\n"+".dojoAlignClient { overflow: auto; }\n");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/html/loader.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/html/loader.js
deleted file mode 100644
index 8c84e0f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/html/loader.js
+++ /dev/null
@@ -1,609 +0,0 @@
-dojo.provide("dojo.widget.html.loader");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.io.*");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.widget.html.loader");
-dojo.widget.html.loader=new (function(){
-this.toString=function(){
-return "dojo.widget.html.loader";
-};
-var _1=this;
-dojo.addOnLoad(function(){
-dojo.experimental(_1.toString());
-var _2=dojo.evalObjPath("dojo.undo.browser");
-if(djConfig["preventBackButtonFix"]&&_2&&!_2.initialState){
-_2.setInitialState(new _3);
-}
-});
-var _4={};
-var _3=function(id,_6){
-this.id=id;
-this.data=_6;
-};
-_3.prototype.handle=function(_7){
-if(typeof dojo=="undefined"){
-return;
-}
-var wg=dojo.widget.byId(this.id);
-if(wg){
-wg.setContent(this.data,true);
-}
-};
-this._log=function(_9,_a){
-if(_9.trackHistory){
-if(!_4[_9.widgetId]){
-_4[_9.widgetId]={childrenIds:[],stack:[_a]};
-}
-var _b=_4[_9.widgetId].childrenIds;
-while(_b&&_b.length){
-delete _4[_b.pop()];
-}
-for(var _c in _9.children){
-_4[_9.widgetId].childrenIds=_c.widgetId;
-}
-dojo.undo.browser.addToHistory(new _3(_9.widgetId,dojo.lang.shallowCopy(_a,true)));
-}
-};
-var _d=dojo.lang.isUndefined;
-var _e=dojo.lang.isFunction;
-function handleDefaults(e,_10,_11){
-if(!_10){
-_10="onContentError";
-}
-if(dojo.lang.isString(e)){
-e={_text:e};
-}
-if(!e._text){
-e._text=e.toString();
-}
-e.toString=function(){
-return this._text;
-};
-if(typeof e.returnValue!="boolean"){
-e.returnValue=true;
-}
-if(typeof e.preventDefault!="function"){
-e.preventDefault=function(){
-this.returnValue=false;
-};
-}
-this[_10](e);
-if(e.returnValue){
-if(_11){
-alert(e.toString());
-}else{
-this.loader.callOnUnLoad.call(this,false);
-this.onSetContent(e.toString());
-}
-}
-}
-function downloader(_12){
-for(var x in this.bindArgs){
-_12[x]=(_d(_12[x])?this.bindArgs[x]:undefined);
-}
-var _14=this.cacheContent;
-if(_d(_12.useCache)){
-_12.useCache=_14;
-}
-if(_d(_12.preventCache)){
-_12.preventCache=!_14;
-}
-if(_d(_12.mimetype)){
-_12.mimetype="text/html";
-}
-this.loader.bindObj=dojo.io.bind(_12);
-}
-function stackRunner(st){
-var err="",_17=null;
-var _18=this.scriptScope||dojo.global();
-while(st.length){
-_17=st.shift();
-try{
-_17.call(_18);
-}
-catch(e){
-err+="\n"+_17+" failed: "+e;
-}
-}
-if(err.length){
-var _19=(st==this.loader.addOnLoads)?"addOnLoad":"addOnUnLoad";
-handleDefaults.call(this,_19+" failure\n "+err,"onExecError",true);
-}
-}
-function stackPusher(st,obj,_1c){
-if(typeof _1c=="undefined"){
-st.push(obj);
-}else{
-st.push(function(){
-obj[_1c]();
-});
-}
-}
-function refreshed(){
-this.onResized();
-this.onLoad();
-this.isLoaded=true;
-}
-function asyncParse(_1d){
-if(this.executeScripts){
-this.onExecScript.call(this,_1d.scripts);
-}
-if(this.parseContent){
-this.onContentParse.call(this);
-}
-refreshed.call(this);
-}
-function runHandler(){
-if(dojo.lang.isFunction(this.handler)){
-this.handler(this,this.containerNode||this.domNode);
-refreshed.call(this);
-return false;
-}
-return true;
-}
-this.htmlContentBasicFix=function(s,url){
-var _20=[],_21=[];
-var _22=/<title[^>]*>([\s\S]*?)<\/title>/i;
-var _23,_24;
-while(_23=_22.exec(s)){
-_20.push(_23[1]);
-s=s.substring(0,_23.index)+s.substr(_23.index+_23[0].length);
-}
-_22=/(?:<(style)[^>]*>([\s\S]*?)<\/style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
-while(_23=_22.exec(s)){
-if(_23[1]&&_23[1].toLowerCase()=="style"){
-_21.push(dojo.html.fixPathsInCssText(_23[2],url));
-}else{
-if(_24=_23[3].match(/href=(['"]?)([^'">]*)\1/i)){
-_21.push({path:_24[2]});
-}
-}
-s=s.substring(0,_23.index)+s.substr(_23.index+_23[0].length);
-}
-return {"s":s,"titles":_20,"styles":_21};
-};
-this.htmlContentAdjustPaths=function(s,url){
-var tag="",str="",_29="",_2a="";
-var _2b=[],_2c="",fix="";
-var _2e=/<[a-z][a-z0-9]*[^>]*\s(?:(?:src|href|style)=[^>])+[^>]*>/i;
-var _2f=/\s(src|href|style)=(['"]?)([\w()\[\]\/.,\\'"-:;#=&?\s@]+?)\2/i;
-var _30=/^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
-while(tag=_2e.exec(s)){
-str+=s.substring(0,tag.index);
-s=s.substring((tag.index+tag[0].length),s.length);
-tag=tag[0];
-_29="";
-while(_2b=_2f.exec(tag)){
-_2a="";
-_2c=_2b[3];
-switch(_2b[1].toLowerCase()){
-case "src":
-case "href":
-if(_30.exec(_2c)){
-_2a=_2c;
-}else{
-_2a=(new dojo.uri.Uri(url,_2c).toString());
-}
-break;
-case "style":
-_2a=dojo.html.fixPathsInCssText(_2c,url);
-break;
-default:
-_2a=_2c;
-}
-fix=" "+_2b[1]+"="+_2b[2]+_2a+_2b[2];
-_29+=tag.substring(0,_2b.index)+fix;
-tag=tag.substring((_2b.index+_2b[0].length),tag.length);
-}
-str+=_29+tag;
-}
-return str+s;
-};
-this.htmlContentScripts=function(s,_32){
-var _33=[],_34=[],_35=[];
-var _36="",tmp=null,tag="",sc="",str="";
-var _3b=/<script([^>]*)>([\s\S]*?)<\/script>/i;
-var _3c=/src=(['"]?)([^"']*)\1/i;
-var _3d=/.*(\bdojo\b\.js(?:\.uncompressed\.js)?)$/;
-var _3e=/(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo\.hostenv\.writeIncludes\(\s*\);?/g;
-var _3f=/dojo\.(?:(?:require(?:After)?(?:If)?)|(?:widget\.(?:manager\.)?registerWidgetPackage)|(?:(?:hostenv\.)?setModulePrefix)|defineNamespace)\((['"]).*?\1\)\s*;?/;
-while(_35=_3b.exec(s)){
-if(this.executeScripts&&_35[1]){
-if(_36=_3c.exec(_35[1])){
-if(_3d.exec(_36[2])){
-dojo.debug("Security note! inhibit:"+_36[2]+" from  beeing loaded again.");
-}else{
-_33.push({path:_36[2]});
-}
-}
-}
-if(_35[2]){
-sc=_35[2].replace(_3e,"");
-if(!sc){
-continue;
-}
-while(tmp=_3f.exec(sc)){
-_34.push(tmp[0]);
-sc=sc.substring(0,tmp.index)+sc.substr(tmp.index+tmp[0].length);
-}
-if(_32){
-_33.push(sc);
-}
-}
-s=s.substr(0,_35.index)+s.substr(_35.index+_35[0].length);
-}
-if(_32){
-var _3b=/(<[a-zA-Z][a-zA-Z0-9]*\s[^>]*\S=(['"])[^>]*[^\.\]])scriptScope([^>]*>)/;
-str="";
-while(tag=_3b.exec(s)){
-tmp=((tag[2]=="'")?"\"":"'");
-str+=s.substring(0,tag.index);
-s=s.substr(tag.index).replace(_3b,"$1dojo.widget.byId("+tmp+this.widgetId+tmp+").scriptScope$3");
-}
-s=str+s;
-}
-return {"s":s,"requires":_34,"scripts":_33};
-};
-this.splitAndFixPaths=function(_40){
-if(!_40.url){
-_40.url="./";
-}
-url=new dojo.uri.Uri(location,_40.url).toString();
-var ret={"xml":"","styles":[],"titles":[],"requires":[],"scripts":[],"url":url};
-if(_40.content){
-var tmp=null,_43=_40.content;
-if(_40.adjustPaths){
-_43=_1.htmlContentAdjustPaths.call(this,_43,url);
-}
-tmp=_1.htmlContentBasicFix.call(this,_43,url);
-_43=tmp.s;
-ret.styles=tmp.styles;
-ret.titles=tmp.titles;
-if(_40.collectRequires||_40.collectScripts){
-tmp=_1.htmlContentScripts.call(this,_43,_40.collectScripts);
-_43=tmp.s;
-ret.requires=tmp.requires;
-ret.scripts=tmp.scripts;
-}
-var _44=[];
-if(_40.bodyExtract){
-_44=_43.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
-if(_44){
-_43=_44[1];
-}
-}
-ret.xml=_43;
-}
-return ret;
-};
-this.hookUp=function(_45){
-var _46=_45.widget;
-if(dojo.lang.isString(_46)){
-if(_45.mixin){
-dojo.raise(this.toString()+", cant use mixin when widget is a string");
-}
-_46=dojo.evalObjPath(_46);
-}
-if(!_46||!(_46 instanceof dojo.widget.HtmlWidget)){
-dojo.raise(this.toString()+" Widget isn't defined or isn't a HtmlWidget instance");
-}
-if(_46.loader&&_46.setUrl){
-return;
-}
-var _47=(_45.mixin)?_46:_46.constructor.prototype;
-_46.loader={isLoaded:false,styleNodes:[],addOnLoads:[],addOnUnLoads:[],callOnUnLoad:(function(_48){
-return function(_49){
-this.abort();
-if(_48){
-this.onUnLoad();
-}
-_48=_49;
-};
-})(false),bindObj:null,unHook:(function(w,wg){
-var _4c={isContainer:w.isContainer,adjustPats:w.adjustPaths,href:w.href,extractContent:w.extractContent,parseContent:w.parseContent,cacheContent:w.cacheContent,bindArgs:w.bindArgs,preload:w.preload,refreshOnShow:w.refreshOnShow,handler:w.handler,trackHistory:w.trackHistory,executeScripts:w.executeScripts,scriptScope:w.scriptScope,postCreate:w.postCreate,show:w.show,refresh:w.refresh,loadContents:w.loadContents,abort:w.abort,destroy:w.destroy,onLoad:w.onLoad,onUnLoad:w.onUnLoad,addOnLoad:w.addOnLoad,addOnUnLoad:w.addOnUnLoad,onDownloadStart:w.onDownloadStart,onDownloadEnd:w.onDownloadEnd,onDownloadError:w.onDownloadError,onContentError:w.onContentError,onExecError:w.onExecError,onSetContent:w.onSetContent,setUrl:w.setUrl,setContent:w.setContent,onContentParse:w.onContentParse,onExecScript:w.onExecScript,setHandler:w.setHandler};
-return function(){
-if(wg.abort){
-wg.abort();
-}
-if((w!=wg)&&(dojo.widget.byType(wg.widgetType).length>1)){
-return;
-}
-for(var x in _4c){
-if(_4c[x]===undefined){
-delete w[x];
-continue;
-}
-w[x]=_4c[x];
-}
-delete wg._loader_defined;
-delete wg.loader;
-};
-})(_47,_46)};
-if(_47._loader_defined||_46._loader_defined){
-return;
-}
-dojo.mixin(_47,{isContainer:true,adjustPaths:_d(_47.adjustPaths)?true:_47.adjustPaths,href:_d(_47.href)?"":_47.href,extractContent:_d(_47.extractContent)?true:_47.extractContent,parseContent:_d(_47.parseContent)?true:_47.parseContent,cacheContent:_d(_47.cacheContent)?true:_47.cacheContent,bindArgs:_d(_47.bindArgs)?{}:_47.bindArgs,preload:_d(_47.preload)?false:_47.preload,refreshOnShow:_d(_47.refreshOnShow)?false:_47.refreshOnShow,handler:_d(_47.handler)?"":_47.handler,executeScripts:_d(_47.executeScripts)?false:_47.executeScripts,trackHistory:_d(_47.tracHistory)?false:_47.trackHistory,scriptScope:null});
-_47.postCreate=(function(_4e){
-return function(){
-if(_47.constructor.superclass.postCreate!=_4e){
-_4e.apply(this,arguments);
-}else{
-_47.constructor.superclass.postCreate.apply(this,arguments);
-}
-if(this.handler!==""){
-this.setHandler(this.handler);
-}
-if(this.isShowing()||this.preload){
-this.loadContents();
-if(!this.href){
-_1._log(this,(this.domNode||this.containerNode).innerHTML);
-}
-}
-};
-})(_47.postCreate);
-_47.show=(function(_4f){
-return function(){
-if(this.refreshOnShow){
-this.refresh();
-}else{
-this.loadContents();
-}
-if((_47.constructor.superclass.show==_4f)||!_e(_4f)){
-_47.constructor.superclass.show.apply(this,arguments);
-}else{
-_4f.apply(this,arguments);
-}
-};
-})(_47.show);
-_47.destroy=(function(_50){
-return function(_51){
-this.onUnLoad();
-this.abort();
-this.loader.unHook();
-if((_47.constructor.superclass.destroy!=_51)&&_e(_51)){
-_51.apply(this,arguments);
-}else{
-_47.constructor.superclass.destroy.apply(this,arguments);
-}
-};
-})(_47.destroy);
-if(!_47.refresh){
-_47.refresh=function(){
-this.loader.isLoaded=false;
-this.loadContents();
-};
-}
-if(!_47.loadContents){
-_47.loadContents=function(){
-if(this.loader.isLoaded){
-return;
-}
-if(_e(this.handler)){
-runHandler.call(this);
-}else{
-if(this.href!==""){
-handleDefaults.call(this,"Loading...","onDownloadStart");
-var _52=this,url=this.href;
-downloader.call(this,{url:url,load:function(_54,_55,xhr){
-_52.onDownloadEnd.call(_52,url,_55);
-},error:function(_57,err,xhr){
-var e={responseText:xhr.responseText,status:xhr.status,statusText:xhr.statusText,responseHeaders:(xhr.getAllResponseHeaders)?xhr.getAllResponseHeaders():[],_text:"Error loading '"+url+"' ("+xhr.status+" "+xhr.statusText+")"};
-handleDefaults.call(_52,e,"onDownloadError");
-_52.onLoad();
-}});
-}
-}
-};
-}
-if(!_47.abort){
-_47.abort=function(){
-if(!this.loader||!this.loader.bindObj||!this.loader.bindObj.abort){
-return;
-}
-this.loader.bindObj.abort();
-this.loader.bindObj=null;
-};
-}
-if(!_47.onLoad){
-_47.onLoad=function(){
-stackRunner.call(this,this.loader.addOnLoads);
-this.loader.isLoaded=true;
-};
-}
-if(!_47.onUnLoad){
-_47.onUnLoad=function(){
-stackRunner.call(this,this.loader.addOnUnLoads);
-delete this.scriptScope;
-};
-}
-if(!_47.addOnLoad){
-_47.addOnLoad=function(obj,_5c){
-stackPusher.call(this,this.loader.addOnLoads,obj,_5c);
-};
-}
-if(!_47.addOnUnLoad){
-_47.addOnUnLoad=function(obj,_5e){
-stackPusher.call(this,this.loader.addOnUnLoads,obj,_5e);
-};
-}
-if(!_47.onExecError){
-_47.onExecError=function(){
-};
-}
-if(!_47.onContentError){
-_47.onContentError=function(){
-};
-}
-if(!_47.onDownloadError){
-_47.onDownloadError=function(){
-};
-}
-if(!_47.onDownloadStart){
-_47.onDownloadStart=function(_5f){
-};
-}
-if(!_47.onDownloadEnd){
-_47.onDownloadEnd=function(url,_61){
-var _62={content:_61,url:url,adjustPaths:this.adjustPaths,collectScripts:this.executeScripts,collectRequires:this.parseContent,bodyExtract:this.extractContent};
-_61=_1.splitAndFixPaths.call(this,_62);
-this.setContent(_61);
-};
-}
-if(!_47.onSetContent){
-_47.onSetContent=function(_63){
-this.destroyChildren();
-var _64=this.loader.styleNodes;
-while(_64.length){
-var st=_64.pop();
-if(st&&st.parentNode){
-st.parentNode.removeChild(st);
-}
-}
-var _66=this.containerNode||this.domNode;
-while(_66.firstChild){
-try{
-dojo.event.browser.clean(_66.firstChild);
-}
-catch(e){
-}
-_66.removeChild(_66.firstChild);
-}
-try{
-if(typeof _63!="string"){
-_66.appendChild(_63);
-}else{
-try{
-_66.innerHTML=_63;
-}
-catch(e){
-var tmp;
-(tmp=dojo.doc().createElement("div")).innerHTML=_63;
-while(tmp.firstChild){
-_66.appendChild(tmp.removeChild(tmp.firstChild));
-}
-}
-}
-}
-catch(e){
-e._text="Could'nt load content: "+e;
-var _68=(this.loader._onSetContent_err==e._text);
-this.loader._onSetContent_err=e._text;
-handleDefaults.call(this,e,"onContentError",_68);
-}
-};
-}
-if(!_47.setUrl){
-_47.setUrl=function(url){
-this.href=url;
-this.loader.isLoaded=false;
-if(this.preload||this.isShowing()){
-this.loadContents();
-}
-};
-}
-if(!_47.setContent){
-_47.setContent=function(_6a,_6b){
-this.loader.callOnUnLoad.call(this,true);
-if(!_6a||dojo.html.isNode(_6a)){
-this.onSetContent(_6a);
-refreshed.call(this);
-}else{
-if(typeof _6a.xml!="string"){
-this.href="";
-var _6c={content:_6a,url:this.href,adjustPaths:this.adjustPaths,collectScripts:this.executeScripts,collectRequires:this.parseContent,bodyExtract:this.extractContent};
-_6a=_1.splitAndFixPaths.call(this,_6c);
-}else{
-if(_6a.url!="./"){
-this.url=_6a.url;
-}
-}
-this.onSetContent(_6a.xml);
-for(var i=0,_6e=_6a.styles;i<_6e.length;i++){
-if(_6e[i].path){
-this.loader.styleNodes.push(dojo.html.insertCssFile(_6e[i].path));
-}else{
-this.loader.styleNodes.push(dojo.html.insertCssText(_6e[i]));
-}
-}
-if(this.parseContent){
-for(var i=0,_6f=_6a.requires;i<_6f.length;i++){
-try{
-eval(_6f[i]);
-}
-catch(e){
-e._text="dojo.widget.html.loader.hookUp: error in package loading calls, "+(e.description||e);
-handleDefaults.call(this,e,"onContentError",true);
-}
-}
-}
-if(dojo.hostenv.isXDomain&&_6a.requires.length){
-dojo.addOnLoad(function(){
-asyncParse.call(this,_6a);
-if(!_6b){
-_1._log(this,_6a);
-}
-});
-_6b=true;
-}else{
-asyncParse.call(this,_6a);
-}
-}
-if(!_6b){
-}
-};
-}
-if(!_47.onContentParse){
-_47.onContentParse=function(){
-var _70=this.containerNode||this.domNode;
-var _71=new dojo.xml.Parse();
-var _72=_71.parseElement(_70,null,true);
-dojo.widget.getParser().createSubComponents(_72,this);
-};
-}
-if(!_47.onExecScript){
-_47.onExecScript=function(_73){
-var _74=this,tmp="",_76="";
-for(var i=0;i<_73.length;i++){
-if(_73[i].path){
-var url=_73[i].path;
-downloader.call(this,{"url":url,"load":function(_79,_7a){
-(function(){
-tmp=_7a;
-_73[i]=_7a;
-}).call(_74);
-},"error":function(_7b,_7c){
-_7c._text=_7b+" downloading remote script";
-handleDefaults.call(_74,_7c,"onExecError",true);
-},"mimetype":"text/plain","sync":true});
-_76+=tmp;
-}else{
-_76+=_73[i];
-}
-}
-try{
-delete this.scriptScope;
-this.scriptScope=new (new Function("_container_",_76+"; return this;"))(_74);
-}
-catch(e){
-e._text="Error running scripts from content:\n"+(e.description||e.toString());
-handleDefaults.call(this,e,"onExecError",true);
-}
-};
-}
-if(!_47.setHandler){
-_47.setHandler=function(_7d){
-var fcn=dojo.lang.isFunction(_7d)?_7d:window[_7d];
-if(!_e(fcn)){
-handleDefaults.call(this,"Unable to set handler, '"+_7d+"' not a function.","onExecError",true);
-return;
-}
-this.handler=function(){
-return fcn.apply(this,arguments);
-};
-};
-}
-_47._loader_defined=true;
-};
-})();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/html/stabile.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/html/stabile.js
deleted file mode 100644
index cacbec8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/html/stabile.js
+++ /dev/null
@@ -1,115 +0,0 @@
-dojo.provide("dojo.widget.html.stabile");
-dojo.widget.html.stabile={_sqQuotables:new RegExp("([\\\\'])","g"),_depth:0,_recur:false,depthLimit:2};
-dojo.widget.html.stabile.getState=function(id){
-dojo.widget.html.stabile.setup();
-return dojo.widget.html.stabile.widgetState[id];
-};
-dojo.widget.html.stabile.setState=function(id,_3,_4){
-dojo.widget.html.stabile.setup();
-dojo.widget.html.stabile.widgetState[id]=_3;
-if(_4){
-dojo.widget.html.stabile.commit(dojo.widget.html.stabile.widgetState);
-}
-};
-dojo.widget.html.stabile.setup=function(){
-if(!dojo.widget.html.stabile.widgetState){
-var _5=dojo.widget.html.stabile._getStorage().value;
-dojo.widget.html.stabile.widgetState=_5?dj_eval("("+_5+")"):{};
-}
-};
-dojo.widget.html.stabile.commit=function(_6){
-dojo.widget.html.stabile._getStorage().value=dojo.widget.html.stabile.description(_6);
-};
-dojo.widget.html.stabile.description=function(v,_8){
-var _9=dojo.widget.html.stabile._depth;
-var _a=function(){
-return this.description(this,true);
-};
-try{
-if(v===void (0)){
-return "undefined";
-}
-if(v===null){
-return "null";
-}
-if(typeof (v)=="boolean"||typeof (v)=="number"||v instanceof Boolean||v instanceof Number){
-return v.toString();
-}
-if(typeof (v)=="string"||v instanceof String){
-var v1=v.replace(dojo.widget.html.stabile._sqQuotables,"\\$1");
-v1=v1.replace(/\n/g,"\\n");
-v1=v1.replace(/\r/g,"\\r");
-return "'"+v1+"'";
-}
-if(v instanceof Date){
-return "new Date("+d.getFullYear+","+d.getMonth()+","+d.getDate()+")";
-}
-var d;
-if(v instanceof Array||v.push){
-if(_9>=dojo.widget.html.stabile.depthLimit){
-return "[ ... ]";
-}
-d="[";
-var _d=true;
-dojo.widget.html.stabile._depth++;
-for(var i=0;i<v.length;i++){
-if(_d){
-_d=false;
-}else{
-d+=",";
-}
-d+=arguments.callee(v[i],_8);
-}
-return d+"]";
-}
-if(v.constructor==Object||v.toString==_a){
-if(_9>=dojo.widget.html.stabile.depthLimit){
-return "{ ... }";
-}
-if(typeof (v.hasOwnProperty)!="function"&&v.prototype){
-throw new Error("description: "+v+" not supported by script engine");
-}
-var _d=true;
-d="{";
-dojo.widget.html.stabile._depth++;
-for(var _f in v){
-if(v[_f]==void (0)||typeof (v[_f])=="function"){
-continue;
-}
-if(_d){
-_d=false;
-}else{
-d+=", ";
-}
-var kd=_f;
-if(!kd.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/)){
-kd=arguments.callee(_f,_8);
-}
-d+=kd+": "+arguments.callee(v[_f],_8);
-}
-return d+"}";
-}
-if(_8){
-if(dojo.widget.html.stabile._recur){
-var _11=Object.prototype.toString;
-return _11.apply(v,[]);
-}else{
-dojo.widget.html.stabile._recur=true;
-return v.toString();
-}
-}else{
-throw new Error("Unknown type: "+v);
-return "'unknown'";
-}
-}
-finally{
-dojo.widget.html.stabile._depth=_9;
-}
-};
-dojo.widget.html.stabile._getStorage=function(){
-if(dojo.widget.html.stabile.dataField){
-return dojo.widget.html.stabile.dataField;
-}
-var _12=document.forms._dojo_form;
-return dojo.widget.html.stabile.dataField=_12?_12.stabile:{value:""};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/DropdownDatePicker.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/DropdownDatePicker.js
deleted file mode 100644
index 205bca0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/DropdownDatePicker.js
+++ /dev/null
@@ -1 +0,0 @@
-({"selectDate":"Select a date"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/DropdownTimePicker.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/DropdownTimePicker.js
deleted file mode 100644
index 656721b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/DropdownTimePicker.js
+++ /dev/null
@@ -1 +0,0 @@
-({"selectTime":"Select time"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/TimePicker.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/TimePicker.js
deleted file mode 100644
index 0054264..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/TimePicker.js
+++ /dev/null
@@ -1 +0,0 @@
-({"any":"any"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/fr/validate.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/fr/validate.js
deleted file mode 100644
index e734535..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/fr/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"* Cette valeur est hors limites.","invalidMessage":"* La valeur saisie est incorrecte.","missingMessage":"* Cette valeur est obligatoire."});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/ja/validate.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/ja/validate.js
deleted file mode 100644
index 7a54383..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/ja/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"* \u5165\u529b\u3057\u305f\u6570\u5024\u306f\u9078\u629e\u7bc4\u56f2\u5916\u3067\u3059\u3002","invalidMessage":"* \u5165\u529b\u3057\u305f\u30c7\u30fc\u30bf\u306b\u8a72\u5f53\u3059\u308b\u3082\u306e\u304c\u3042\u308a\u307e\u305b\u3093\u3002","missingMessage":"* \u5165\u529b\u304c\u5fc5\u9808\u3067\u3059\u3002"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/validate.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/validate.js
deleted file mode 100644
index ae50d14..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"* This value is out of range.","invalidMessage":"* The value entered is not valid.","missingMessage":"* This value is required."});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/zh-cn/validate.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/zh-cn/validate.js
deleted file mode 100644
index e2d66d4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/nls/zh-cn/validate.js
+++ /dev/null
@@ -1 +0,0 @@
-({"rangeMessage":"* \u8f93\u5165\u6570\u636e\u8d85\u51fa\u503c\u57df\u3002","invalidMessage":"* \u975e\u6cd5\u7684\u8f93\u5165\u503c\u3002","missingMessage":"* \u6b64\u503c\u662f\u5fc5\u987b\u7684\u3002"});
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/svg/Chart.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/svg/Chart.js
deleted file mode 100644
index 8a7343e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/svg/Chart.js
+++ /dev/null
@@ -1,459 +0,0 @@
-dojo.provide("dojo.widget.svg.Chart");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.Chart");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.math");
-dojo.require("dojo.svg");
-dojo.require("dojo.gfx.color");
-dojo.require("dojo.json");
-dojo.widget.defineWidget("dojo.widget.svg.Chart",[dojo.widget.HtmlWidget,dojo.widget.Chart],function(){
-this.templatePath=null;
-this.templateCssPath=null;
-this._isInitialize=false;
-this.hasData=false;
-this.vectorNode=null;
-this.plotArea=null;
-this.dataGroup=null;
-this.axisGroup=null;
-this.properties={height:0,width:0,defaultWidth:600,defaultHeight:400,plotType:null,padding:{top:10,bottom:2,left:60,right:30},axes:{x:{plotAt:0,label:"",unitLabel:"",unitType:Number,nUnitsToShow:10,range:{min:0,max:200}},y:{plotAt:0,label:"",unitLabel:"",unitType:Number,nUnitsToShow:10,range:{min:0,max:200}}}};
-},{parseProperties:function(_1){
-var _2=false;
-var _3=false;
-if(_1.getAttribute("width")){
-this.properties.width=_1.getAttribute("width");
-}
-if(_1.getAttribute("height")){
-this.properties.height=_1.getAttribute("height");
-}
-if(_1.getAttribute("plotType")){
-this.properties.plotType=_1.getAttribute("plotType");
-}
-if(_1.getAttribute("padding")){
-if(_1.getAttribute("padding").indexOf(",")>-1){
-var p=_1.getAttribute("padding").split(",");
-}else{
-var p=_1.getAttribute("padding").split(" ");
-}
-if(p.length==1){
-var _5=parseFloat(p[0]);
-this.properties.padding.top=_5;
-this.properties.padding.right=_5;
-this.properties.padding.bottom=_5;
-this.properties.padding.left=_5;
-}else{
-if(p.length==2){
-var _6=parseFloat(p[0]);
-var _7=parseFloat(p[1]);
-this.properties.padding.top=_6;
-this.properties.padding.right=_7;
-this.properties.padding.bottom=_6;
-this.properties.padding.left=_7;
-}else{
-if(p.length==4){
-this.properties.padding.top=parseFloat(p[0]);
-this.properties.padding.right=parseFloat(p[1]);
-this.properties.padding.bottom=parseFloat(p[2]);
-this.properties.padding.left=parseFloat(p[3]);
-}
-}
-}
-}
-if(_1.getAttribute("rangeX")){
-var p=_1.getAttribute("rangeX");
-if(p.indexOf(",")>-1){
-p=p.split(",");
-}else{
-p=p.split(" ");
-}
-this.properties.axes.x.range.min=parseFloat(p[0]);
-this.properties.axes.x.range.max=parseFloat(p[1]);
-_2=true;
-}
-if(_1.getAttribute("rangeY")){
-var p=_1.getAttribute("rangeY");
-if(p.indexOf(",")>-1){
-p=p.split(",");
-}else{
-p=p.split(" ");
-}
-this.properties.axes.y.range.min=parseFloat(p[0]);
-this.properties.axes.y.range.max=parseFloat(p[1]);
-_3=true;
-}
-return {rangeX:_2,rangeY:_3};
-},setAxesPlot:function(_8){
-if(_8.getAttribute("axisAt")){
-var p=_8.getAttribute("axisAt");
-if(p.indexOf(",")>-1){
-p=p.split(",");
-}else{
-p=p.split(" ");
-}
-if(!isNaN(parseFloat(p[0]))){
-this.properties.axes.x.plotAt=parseFloat(p[0]);
-}else{
-if(p[0].toLowerCase()=="ymin"){
-this.properties.axes.x.plotAt=this.properties.axes.y.range.min;
-}else{
-if(p[0].toLowerCase()=="ymax"){
-this.properties.axes.x.plotAt=this.properties.axes.y.range.max;
-}
-}
-}
-if(!isNaN(parseFloat(p[1]))){
-this.properties.axes.y.plotAt=parseFloat(p[1]);
-}else{
-if(p[1].toLowerCase()=="xmin"){
-this.properties.axes.y.plotAt=this.properties.axes.x.range.min;
-}else{
-if(p[1].toLowerCase()=="xmax"){
-this.properties.axes.y.plotAt=this.properties.axes.x.range.max;
-}
-}
-}
-}else{
-this.properties.axes.x.plotAt=this.properties.axes.y.range.min;
-this.properties.axes.y.plotAt=this.properties.axes.x.range.min;
-}
-},drawVectorNode:function(){
-dojo.svg.g.suspend();
-if(this.vectorNode){
-this.destroy();
-}
-this.vectorNode=document.createElementNS(dojo.svg.xmlns.svg,"svg");
-this.vectorNode.setAttribute("width",this.properties.width);
-this.vectorNode.setAttribute("height",this.properties.height);
-dojo.svg.g.resume();
-},drawPlotArea:function(){
-dojo.svg.g.suspend();
-if(this.plotArea){
-this.plotArea.parentNode.removeChild(this.plotArea);
-this.plotArea=null;
-}
-var _a=document.createElementNS(dojo.svg.xmlns.svg,"defs");
-var _b=document.createElementNS(dojo.svg.xmlns.svg,"clipPath");
-_b.setAttribute("id","plotClip"+this.widgetId);
-var _c=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-_c.setAttribute("x",this.properties.padding.left);
-_c.setAttribute("y",this.properties.padding.top);
-_c.setAttribute("width",this.properties.width-this.properties.padding.left-this.properties.padding.right);
-_c.setAttribute("height",this.properties.height-this.properties.padding.top-this.properties.padding.bottom);
-_b.appendChild(_c);
-_a.appendChild(_b);
-this.vectorNode.appendChild(_a);
-this.plotArea=document.createElementNS(dojo.svg.xmlns.svg,"g");
-this.vectorNode.appendChild(this.plotArea);
-var _c=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-_c.setAttribute("x",this.properties.padding.left);
-_c.setAttribute("y",this.properties.padding.top);
-_c.setAttribute("width",this.properties.width-this.properties.padding.left-this.properties.padding.right);
-_c.setAttribute("height",this.properties.height-this.properties.padding.top-this.properties.padding.bottom);
-_c.setAttribute("fill","#fff");
-this.plotArea.appendChild(_c);
-dojo.svg.g.resume();
-},drawDataGroup:function(){
-dojo.svg.g.suspend();
-if(this.dataGroup){
-this.dataGroup.parentNode.removeChild(this.dataGroup);
-this.dataGroup=null;
-}
-this.dataGroup=document.createElementNS(dojo.svg.xmlns.svg,"g");
-this.dataGroup.setAttribute("style","clip-path:url(#plotClip"+this.widgetId+");");
-this.plotArea.appendChild(this.dataGroup);
-dojo.svg.g.resume();
-},drawAxes:function(){
-dojo.svg.g.suspend();
-if(this.axisGroup){
-this.axisGroup.parentNode.removeChild(this.axisGroup);
-this.axisGroup=null;
-}
-this.axisGroup=document.createElementNS(dojo.svg.xmlns.svg,"g");
-this.plotArea.appendChild(this.axisGroup);
-var _d=1;
-var _e=document.createElementNS(dojo.svg.xmlns.svg,"line");
-var y=dojo.widget.svg.Chart.Plotter.getY(this.properties.axes.x.plotAt,this);
-_e.setAttribute("y1",y);
-_e.setAttribute("y2",y);
-_e.setAttribute("x1",this.properties.padding.left-_d);
-_e.setAttribute("x2",this.properties.width-this.properties.padding.right);
-_e.setAttribute("style","stroke:#000;stroke-width:"+_d+";");
-this.axisGroup.appendChild(_e);
-var _10=10;
-var _11=document.createElementNS(dojo.svg.xmlns.svg,"text");
-_11.setAttribute("x",this.properties.padding.left);
-_11.setAttribute("y",this.properties.height-this.properties.padding.bottom+_10+2);
-_11.setAttribute("style","text-anchor:middle;font-size:"+_10+"px;fill:#000;");
-_11.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.x.range.min),2)));
-this.axisGroup.appendChild(_11);
-var _11=document.createElementNS(dojo.svg.xmlns.svg,"text");
-_11.setAttribute("x",this.properties.width-this.properties.padding.right-(_10/2));
-_11.setAttribute("y",this.properties.height-this.properties.padding.bottom+_10+2);
-_11.setAttribute("style","text-anchor:middle;font-size:"+_10+"px;fill:#000;");
-_11.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.x.range.max),2)));
-this.axisGroup.appendChild(_11);
-var _e=document.createElementNS(dojo.svg.xmlns.svg,"line");
-var x=dojo.widget.svg.Chart.Plotter.getX(this.properties.axes.y.plotAt,this);
-_e.setAttribute("x1",x);
-_e.setAttribute("x2",x);
-_e.setAttribute("y1",this.properties.padding.top);
-_e.setAttribute("y2",this.properties.height-this.properties.padding.bottom);
-_e.setAttribute("style","stroke:#000;stroke-width:"+_d+";");
-this.axisGroup.appendChild(_e);
-var _11=document.createElementNS(dojo.svg.xmlns.svg,"text");
-_11.setAttribute("x",this.properties.padding.left-4);
-_11.setAttribute("y",this.properties.height-this.properties.padding.bottom);
-_11.setAttribute("style","text-anchor:end;font-size:"+_10+"px;fill:#000;");
-_11.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.y.range.min),2)));
-this.axisGroup.appendChild(_11);
-var _11=document.createElementNS(dojo.svg.xmlns.svg,"text");
-_11.setAttribute("x",this.properties.padding.left-4);
-_11.setAttribute("y",this.properties.padding.top+(_10/2));
-_11.setAttribute("style","text-anchor:end;font-size:"+_10+"px;fill:#000;");
-_11.appendChild(document.createTextNode(dojo.math.round(parseFloat(this.properties.axes.y.range.max),2)));
-this.axisGroup.appendChild(_11);
-dojo.svg.g.resume();
-},init:function(){
-if(!this.properties.width||!this.properties.height){
-var box=dojo.html.getContentBox(this.domNode);
-if(!this.properties.width){
-this.properties.width=(box.width<32)?this.properties.defaultWidth:box.width;
-}
-if(!this.properties.height){
-this.properties.height=(box.height<32)?this.properties.defaultHeight:box.height;
-}
-}
-this.drawVectorNode();
-this.drawPlotArea();
-this.drawDataGroup();
-this.drawAxes();
-this.domNode.appendChild(this.vectorNode);
-this.assignColors();
-this._isInitialized=true;
-},destroy:function(){
-while(this.domNode.childNodes.length>0){
-this.domNode.removeChild(this.domNode.childNodes.item(0));
-}
-this.vectorNode=this.plotArea=this.dataGroup=this.axisGroup=null;
-},render:function(){
-dojo.svg.g.suspend();
-if(this.dataGroup){
-while(this.dataGroup.childNodes.length>0){
-this.dataGroup.removeChild(this.dataGroup.childNodes.item(0));
-}
-}else{
-this.init();
-}
-for(var i=0;i<this.series.length;i++){
-dojo.widget.svg.Chart.Plotter.plot(this.series[i],this);
-}
-dojo.svg.g.resume();
-},postCreate:function(){
-var _15=this.domNode.getElementsByTagName("table")[0];
-if(_15){
-var _16=this.parseProperties(_15);
-var _17=false;
-var _18=false;
-var _19=this.parseData(_15);
-if(!_17){
-this.properties.axes.x.range={min:_19.x.min,max:_19.x.max};
-}
-if(!_18){
-this.properties.axes.y.range={min:_19.y.min,max:_19.y.max};
-}
-this.setAxesPlot(_15);
-this.domNode.removeChild(_15);
-}
-if(this.series.length>0){
-this.render();
-}
-}});
-dojo.widget.svg.Chart.Plotter=new function(){
-var _1a=this;
-var _1b={};
-var _1c=dojo.widget.Chart.PlotTypes;
-this.getX=function(_1d,_1e){
-var v=parseFloat(_1d);
-var min=_1e.properties.axes.x.range.min;
-var max=_1e.properties.axes.x.range.max;
-var _22=0-min;
-min+=_22;
-max+=_22;
-v+=_22;
-var _23=_1e.properties.padding.left;
-var _24=_1e.properties.width-_1e.properties.padding.right;
-var x=(v*((_24-_23)/max))+_23;
-return x;
-};
-this.getY=function(_26,_27){
-var v=parseFloat(_26);
-var max=_27.properties.axes.y.range.max;
-var min=_27.properties.axes.y.range.min;
-var _2b=0;
-if(min<0){
-_2b+=Math.abs(min);
-}
-min+=_2b;
-max+=_2b;
-v+=_2b;
-var _2c=_27.properties.height-_27.properties.padding.bottom;
-var _2d=_27.properties.padding.top;
-var y=(((_2c-_2d)/(max-min))*(max-v))+_2d;
-return y;
-};
-this.addPlotter=function(_2f,_30){
-_1b[_2f]=_30;
-};
-this.plot=function(_31,_32){
-if(_31.values.length==0){
-return;
-}
-if(_31.plotType&&_1b[_31.plotType]){
-return _1b[_31.plotType](_31,_32);
-}else{
-if(_32.plotType&&_1b[_32.plotType]){
-return _1b[_32.plotType](_31,_32);
-}
-}
-};
-_1b["bar"]=function(_33,_34){
-var _35=1;
-var _36=0;
-for(var i=0;i<_33.values.length;i++){
-var x=_1a.getX(_33.values[i].x,_34);
-var w;
-if(i==_33.values.length-1){
-w=_36;
-}else{
-w=_1a.getX(_33.values[i+1].x,_34)-x-_35;
-_36=w;
-}
-x-=(w/2);
-var yA=_1a.getY(_34.properties.axes.x.plotAt,_34);
-var y=_1a.getY(_33.values[i].value,_34);
-var h=Math.abs(yA-y);
-if(parseFloat(_33.values[i].value)<_34.properties.axes.x.plotAt){
-var oy=yA;
-yA=y;
-y=oy;
-}
-var bar=document.createElementNS(dojo.svg.xmlns.svg,"rect");
-bar.setAttribute("fill",_33.color);
-bar.setAttribute("title",_33.label+": "+_33.values[i].value);
-bar.setAttribute("stroke-width","0");
-bar.setAttribute("x",x);
-bar.setAttribute("y",y);
-bar.setAttribute("width",w);
-bar.setAttribute("height",h);
-bar.setAttribute("fill-opacity","0.9");
-_34.dataGroup.appendChild(bar);
-}
-};
-_1b["line"]=function(_3f,_40){
-var _41=1.5;
-var _42=document.createElementNS(dojo.svg.xmlns.svg,"path");
-_42.setAttribute("fill","none");
-_42.setAttribute("stroke",_3f.color);
-_42.setAttribute("stroke-width","2");
-_42.setAttribute("stroke-opacity","0.85");
-_42.setAttribute("title",_3f.label);
-_40.dataGroup.appendChild(_42);
-var _43=[];
-for(var i=0;i<_3f.values.length;i++){
-var x=_1a.getX(_3f.values[i].x,_40);
-var y=_1a.getY(_3f.values[i].value,_40);
-var dx=_40.properties.padding.left+1;
-var dy=_40.properties.height-_40.properties.padding.bottom;
-if(i>0){
-dx=x-_1a.getX(_3f.values[i-1].x,_40);
-dy=_1a.getY(_3f.values[i-1].value,_40);
-}
-if(i==0){
-_43.push("M");
-}else{
-_43.push("C");
-var cx=x-(_41-1)*(dx/_41);
-_43.push(cx+","+dy);
-cx=x-(dx/_41);
-_43.push(cx+","+y);
-}
-_43.push(x+","+y);
-}
-_42.setAttribute("d",_43.join(" "));
-};
-_1b["area"]=function(_4a,_4b){
-var _4c=1.5;
-var _4d=document.createElementNS(dojo.svg.xmlns.svg,"path");
-_4d.setAttribute("fill",_4a.color);
-_4d.setAttribute("fill-opacity","0.4");
-_4d.setAttribute("stroke",_4a.color);
-_4d.setAttribute("stroke-width","1");
-_4d.setAttribute("stroke-opacity","0.8");
-_4d.setAttribute("title",_4a.label);
-_4b.dataGroup.appendChild(_4d);
-var _4e=[];
-for(var i=0;i<_4a.values.length;i++){
-var x=_1a.getX(_4a.values[i].x,_4b);
-var y=_1a.getY(_4a.values[i].value,_4b);
-var dx=_4b.properties.padding.left+1;
-var dy=_4b.properties.height-_4b.properties.padding.bottom;
-if(i>0){
-dx=x-_1a.getX(_4a.values[i-1].x,_4b);
-dy=_1a.getY(_4a.values[i-1].value,_4b);
-}
-if(i==0){
-_4e.push("M");
-}else{
-_4e.push("C");
-var cx=x-(_4c-1)*(dx/_4c);
-_4e.push(cx+","+dy);
-cx=x-(dx/_4c);
-_4e.push(cx+","+y);
-}
-_4e.push(x+","+y);
-}
-_4e.push("L");
-_4e.push(x+","+_1a.getY(0,_4b));
-_4e.push("L");
-_4e.push(_1a.getX(0,_4b)+","+_1a.getY(0,_4b));
-_4e.push("Z");
-_4d.setAttribute("d",_4e.join(" "));
-},_1b["scatter"]=function(_55,_56){
-var r=7;
-for(var i=0;i<_55.values.length;i++){
-var x=_1a.getX(_55.values[i].x,_56);
-var y=_1a.getY(_55.values[i].value,_56);
-var _5b=document.createElementNS(dojo.svg.xmlns.svg,"path");
-_5b.setAttribute("fill",_55.color);
-_5b.setAttribute("stroke-width","0");
-_5b.setAttribute("title",_55.label+": "+_55.values[i].value);
-_5b.setAttribute("d","M "+x+","+(y-r)+" "+"Q "+x+","+y+" "+(x+r)+","+y+" "+"Q "+x+","+y+" "+x+","+(y+r)+" "+"Q "+x+","+y+" "+(x-r)+","+y+" "+"Q "+x+","+y+" "+x+","+(y-r)+" "+"Z");
-_56.dataGroup.appendChild(_5b);
-}
-};
-_1b["bubble"]=function(_5c,_5d){
-var _5e=1;
-var min=_5d.properties.axes.x.range.min;
-var max=_5d.properties.axes.x.range.max;
-var _61=0-min;
-min+=_61;
-max+=_61;
-var _62=_5d.properties.padding.left;
-var _63=_5d.properties.width-_5d.properties.padding.right;
-var _64=(max-min)/(_63-_62)*25;
-for(var i=0;i<_5c.values.length;i++){
-var _66=_5c.values[i].size;
-if(isNaN(parseFloat(_66))){
-_66=_5e;
-}
-var _67=document.createElementNS(dojo.svg.xmlns.svg,"circle");
-_67.setAttribute("stroke-width",0);
-_67.setAttribute("fill",_5c.color);
-_67.setAttribute("fill-opacity","0.8");
-_67.setAttribute("r",(parseFloat(_66)*_64)/2);
-_67.setAttribute("cx",_1a.getX(_5c.values[i].x,_5d));
-_67.setAttribute("cy",_1a.getY(_5c.values[i].value,_5d));
-_67.setAttribute("title",_5c.label+": "+_5c.values[i].value+" ("+_66+")");
-_5d.dataGroup.appendChild(_67);
-}
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/AccordionPane.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/AccordionPane.css
deleted file mode 100644
index 935629c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/AccordionPane.css
+++ /dev/null
@@ -1,22 +0,0 @@
-.dojoAccordionPane .label {
-	color: #000;
-	font-weight: bold;
-	background: url("images/soriaAccordionOff.gif") repeat-x top left #85aeec;
-	border:1px solid #d9d9d9;
-	font-size:0.9em;
-}
-
-.dojoAccordionPane-selected .label {
-	background: url("images/soriaAccordionSelected.gif") repeat-x top left #85aeec;
-	border:1px solid #84a3d1;
-}
-
-.dojoAccordionPane .label:hover {
-	cursor: pointer;
-}
-
-.dojoAccordionPane .accBody {
-	background: #fff;
-	overflow: auto;
-	border:1px solid #84a3d1;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/AccordionPane.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/AccordionPane.html
deleted file mode 100644
index 43ab389..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/AccordionPane.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div dojoAttachPoint="domNode">
-<div dojoAttachPoint="labelNode" dojoAttachEvent="onclick: onLabelClick" class="${this.labelNodeClass}">${this.label}</div>
-<div dojoAttachPoint="containerNode" style="overflow: hidden;" class="${this.containerNodeClass}"></div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ButtonTemplate.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ButtonTemplate.css
deleted file mode 100644
index 2b4631e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ButtonTemplate.css
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ---- button --- */
-.dojoButton {
-	padding: 0 0 0 0;
-	font-size: 8pt;
-	white-space: nowrap;
-	cursor: pointer;
-	font-family: Myriad, Tahoma, Verdana, sans-serif;
-}
-
-.dojoButton .dojoButtonContents {
-	padding: 2px 2px 2px 2px;
-	text-align: center;		/* if icon and label are split across two lines, center icon */
-	color: white;
-}
-
-.dojoButtonLeftPart .dojoButtonContents {
-	padding-right: 8px;
-}
-
-.dojoButtonDisabled {
-	cursor: url("images/no.gif"), default;
-}
-
-
-.dojoButtonContents img {
-	vertical-align: middle;	/* if icon and label are on same line, center them */
-}
-
-/* -------- colors ------------ */
-
-.dojoButtonHover .dojoButtonContents {
-}
-
-.dojoButtonDepressed .dojoButtonContents {
-	color: #293a4b;
-}
-
-.dojoButtonDisabled .dojoButtonContents {
-	color: #aaa;
-}
-
-
-/* ---------- drop down button specific ---------- */
-
-/* border between label and arrow (for drop down buttons */
-.dojoButton .border {
-	width: 1px;
-	background: gray;
-}
-
-/* button arrow */
-.dojoButton .downArrow {
-	padding-left: 10px;
-	text-align: center;
-}
-
-.dojoButton.disabled .downArrow {
-	cursor : default;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ButtonTemplate.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ButtonTemplate.html
deleted file mode 100644
index adb4ee8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ButtonTemplate.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<div dojoAttachPoint="buttonNode" class="dojoButton" style="position:relative;" dojoAttachEvent="onMouseOver; onMouseOut; onMouseDown; onMouseUp; onClick:buttonClick; onKey:onKey; onFocus;">
-  <div class="dojoButtonContents" align=center dojoAttachPoint="containerNode" style="position:absolute;z-index:2;"></div>
-  <img dojoAttachPoint="leftImage" style="position:absolute;left:0px;">
-  <img dojoAttachPoint="centerImage" style="position:absolute;z-index:1;">
-  <img dojoAttachPoint="rightImage" style="position:absolute;top:0px;right:0px;">
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Checkbox.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Checkbox.css
deleted file mode 100644
index 9d8887a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Checkbox.css
+++ /dev/null
@@ -1,26 +0,0 @@
-.dojoHtmlCheckbox {
-	border: 0px;
-	width: 16px;
-	height: 16px;
-	margin: 2px;
-	vertical-align: middle;
-}
-
-.dojoHtmlCheckboxOn {
-	background: url(check.gif) 0px 0px;
-}
-.dojoHtmlCheckboxOff {
-	background: url(check.gif) -16px 0px;
-}
-.dojoHtmlCheckboxDisabledOn {
-	background: url(check.gif) -32px 0px;
-}
-.dojoHtmlCheckboxDisabledOff {
-	background: url(check.gif) -48px 0px;
-}
-.dojoHtmlCheckboxOnHover {
-	background: url(check.gif) -64px 0px;
-}
-.dojoHtmlCheckboxOffHover {
-	background: url(check.gif) -80px 0px;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Checkbox.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Checkbox.html
deleted file mode 100644
index e343683..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Checkbox.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<span style="display: inline-block;" tabIndex="${this.tabIndex}" waiRole="checkbox" id="${this.id}">
-	<img dojoAttachPoint="imageNode" class="dojoHtmlCheckbox" src="${dojoWidgetModuleUri}templates/images/blank.gif" alt="" />
-	<input type="checkbox" name="${this.name}" style="display: none" value="${this.value}"
-		dojoAttachPoint="inputNode">
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/CheckboxA11y.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/CheckboxA11y.html
deleted file mode 100644
index f0c0af3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/CheckboxA11y.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<span class='dojoHtmlCheckbox'>
-	<input type="checkbox" name="${this.name}" tabIndex="${this.tabIndex}" id="${this.id}" value="${this.value}"
-		 dojoAttachEvent="onClick: _onClick;" dojoAttachPoint="inputNode"> 
-</span>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/CiviCrmDatePicker.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/CiviCrmDatePicker.html
deleted file mode 100644
index ba60d39..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/CiviCrmDatePicker.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<table cellpadding="0" cellspacing="0" border="0" width="400">
-	<tr>
-		<td id="dateHolderTd" width="200">
-		</td>
-		<td id="timeHolderTd" width="200">
-		</td>
-	</tr>
-	<tr style="display: none;" id="formItemsTr">
-		<td id="formItemsTd">&nbsp;</td>
-		<td>&nbsp;</td>
-	</tr>
-</table>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ComboBox.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ComboBox.css
deleted file mode 100644
index f6c8479..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ComboBox.css
+++ /dev/null
@@ -1,68 +0,0 @@
-.dojoComboBoxOuter {
-	border: 0px !important;
-	margin: 0px !important;
-	padding: 0px !important;
-	background: transparent !important;
-	white-space: nowrap !important;
-}
-
-.dojoComboBox {
-	border: 1px inset #afafaf;
-	margin: 0px;
-	padding: 0px;
-	vertical-align: middle !important;
-	float: none !important;
-	position: static !important;
-	display: inline !important;
-}
-
-/* the input box */
-input.dojoComboBox {
-	border-right-width: 0px !important; 
-	margin-right: 0px !important;
-	padding-right: 0px !important;
-}
-
-/* the down arrow */
-img.dojoComboBox {
-	border-left-width: 0px !important;
-	padding-left: 0px !important;
-	margin-left: 0px !important;
-}
-
-/* IE vertical-alignment calculations can be off by +-1 but these margins are collapsed away */
-.dj_ie img.dojoComboBox {
-	margin-top: 1px; 
-	margin-bottom: 1px; 
-}
-
-/* the drop down */
-.dojoComboBoxOptions {
-	font-family: Verdana, Helvetica, Garamond, sans-serif;
-	/* font-size: 0.7em; */
-	background-color: white;
-	border: 1px solid #afafaf;
-	position: absolute;
-	z-index: 1000; 
-	overflow: auto;
-	cursor: default;
-}
-
-.dojoComboBoxItem {
-	padding-left: 2px;
-	padding-top: 2px;
-	margin: 0px;
-}
-
-.dojoComboBoxItemEven {
-	background-color: #f4f4f4;
-}
-
-.dojoComboBoxItemOdd {
-	background-color: white;
-}
-
-.dojoComboBoxItemHighlight {
-	background-color: #63709A;
-	color: white;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ComboBox.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ComboBox.html
deleted file mode 100644
index fe1eda7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ComboBox.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<span _="whitespace and CR's between tags adds &nbsp; in FF"
-	class="dojoComboBoxOuter"
-	><input style="display:none"  tabindex="-1" name="" value="" 
-		dojoAttachPoint="comboBoxValue"
-	><input style="display:none"  tabindex="-1" name="" value="" 
-		dojoAttachPoint="comboBoxSelectionValue"
-	><input type="text" autocomplete="off" class="dojoComboBox"
-		dojoAttachEvent="key:_handleKeyEvents; keyUp: onKeyUp; compositionEnd; onResize;"
-		dojoAttachPoint="textInputNode"
-	><img hspace="0"
-		vspace="0"
-		class="dojoComboBox"
-		dojoAttachPoint="downArrowNode"
-		dojoAttachEvent="onMouseUp: handleArrowClick; onResize;"
-		src="${this.buttonSrc}"
-></span>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ComboButtonTemplate.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ComboButtonTemplate.html
deleted file mode 100644
index c945bb4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ComboButtonTemplate.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<div class="dojoButton" style="position:relative;top:0px;left:0px; text-align:none;" dojoAttachEvent="onKey;onFocus">
-
-	<div dojoAttachPoint="buttonNode" class="dojoButtonLeftPart" style="position:absolute;left:0px;top:0px;"
-		dojoAttachEvent="onMouseOver; onMouseOut; onMouseDown; onMouseUp; onClick:buttonClick;">
-		<div class="dojoButtonContents" dojoAttachPoint="containerNode" style="position:absolute;top:0px;right:0px;z-index:2;"></div>
-		<img dojoAttachPoint="leftImage" style="position:absolute;left:0px;top:0px;">
-		<img dojoAttachPoint="centerImage" style="position:absolute;right:0px;top:0px;z-index:1;">
-	</div>
-
-	<div dojoAttachPoint="rightPart" class="dojoButtonRightPart" style="position:absolute;top:0px;right:0px;"
-		dojoAttachEvent="onMouseOver:rightOver; onMouseOut:rightOut; onMouseDown:rightDown; onMouseUp:rightUp; onClick:rightClick;">
-		<img dojoAttachPoint="arrowBackgroundImage" style="position:absolute;top:0px;left:0px;z-index:1;">
-		<img src="${dojoWidgetModuleUri}templates/images/whiteDownArrow.gif"
-		  		style="z-index:2;position:absolute;left:3px;top:50%;">
-		<img dojoAttachPoint="rightImage" style="position:absolute;top:0px;right:0px;">
-	</div>
-
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DatePicker.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DatePicker.css
deleted file mode 100644
index a15b1b6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DatePicker.css
+++ /dev/null
@@ -1,167 +0,0 @@
-.datePickerContainer {
-	width:164px; /* needed for proper user styling */
-}
-
-.calendarContainer {
-/*	border:1px solid #566f8f;*/
-}
-
-.calendarBodyContainer {
-	width:100%; /* needed for the explode effect (explain?) */
-	background: #7591bc url("images/dpBg.gif") top left repeat-x;
-}
-
-.calendarBodyContainer thead tr td {
-	color:#293a4b;
-	font:bold 0.75em Helvetica, Arial, Verdana, sans-serif;
-	text-align:center;
-	padding:0.25em;
-	background: url("images/dpHorizLine.gif") bottom left repeat-x;
-}
-
-.calendarBodyContainer tbody tr td {
-	color:#fff;
-	font:bold 0.7em Helvetica, Arial, Verdana, sans-serif;
-	text-align:center;
-	padding:0.4em;
-	background: url("images/dpVertLine.gif") top right repeat-y;
-	cursor:pointer;
-	cursor:hand;
-}
-
-
-.monthWrapper {
-	padding-bottom:2px;
-	background: url("images/dpHorizLine.gif") bottom left repeat-x;
-}
-
-.monthContainer {
-	width:100%;
-}
-
-.monthLabelContainer {
-	text-align:center;
-	font:bold 0.75em Helvetica, Arial, Verdana, sans-serif;
-	background: url("images/dpMonthBg.png") repeat-x top left !important;
-	color:#293a4b;
-	padding:0.25em;
-}
-
-.monthCurve {
-	width:12px;
-}
-
-.monthCurveTL {
-	background: url("images/dpCurveTL.png") no-repeat top left !important;
-}
-
-.monthCurveTR {
-		background: url("images/dpCurveTR.png") no-repeat top right !important;
-}
-
-
-.yearWrapper {
-	background: url("images/dpHorizLineFoot.gif") top left repeat-x;
-	padding-top:2px;
-}
-
-.yearContainer {
-	width:100%;
-}
-
-.yearContainer td {
-	background:url("images/dpYearBg.png") top left repeat-x;
-}
-
-.yearContainer .yearLabel {
-	margin:0;
-	padding:0.45em 0 0.45em 0;
-	color:#fff;
-	font:bold 0.75em Helvetica, Arial, Verdana, sans-serif;
-	text-align:center;
-}
-
-.curveBL {
-	background: url("images/dpCurveBL.png") bottom left no-repeat !important;
-	width:9px !important;
-	padding:0;
-	margin:0;
-}
-
-.curveBR {
-	background: url("images/dpCurveBR.png") bottom right no-repeat !important;
-	width:9px !important;
-	padding:0;
-	margin:0;
-}
-
-
-.previousMonth {
-	background-color:#6782a8 !important;
-}
-
-.previousMonthDisabled {
-	background-color:#a4a5a6 !important;
-	cursor:default !important
-}
-.currentMonth {
-}
-
-.currentMonthDisabled {
-	background-color:#bbbbbc !important;
-	cursor:default !important
-}
-.nextMonth {
-	background-color:#6782a8 !important;
-}
-.nextMonthDisabled {
-	background-color:#a4a5a6 !important;
-	cursor:default !important;
-}
-
-.currentDate {
-	text-decoration:underline;
-	font-style:italic;
-}
-
-.selectedDate {
-	background-color:#fff !important;
-	color:#6782a8 !important;
-}
-
-.yearLabel .selectedYear {
-	padding:0.2em;
-	background-color:#9ec3fb !important;
-}
-
-.nextYear, .previousYear {
-	cursor:pointer;cursor:hand;
-	padding:0;
-}
-
-.nextYear {
-	margin:0 0 0 0.55em;
-}
-
-.previousYear {
-	margin:0 0.55em 0 0;
-}
-
-.incrementControl {
-	cursor:pointer;cursor:hand;
-	width:1em;
-}
-
-.increase {
-	float:right;
-}
-
-.decrease {
-	float:left;
-}
-
-.lastColumn {
-	background-image:none !important;
-}
-
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DatePicker.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DatePicker.html
deleted file mode 100644
index 983d42b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DatePicker.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<div class="datePickerContainer" dojoAttachPoint="datePickerContainerNode">
-	<table cellspacing="0" cellpadding="0" class="calendarContainer">
-		<thead>
-			<tr>
-				<td class="monthWrapper" valign="top">
-					<table class="monthContainer" cellspacing="0" cellpadding="0" border="0">
-						<tr>
-							<td class="monthCurve monthCurveTL" valign="top"></td>
-							<td class="monthLabelContainer" valign="top">
-								<span dojoAttachPoint="increaseWeekNode" 
-									dojoAttachEvent="onClick: onIncrementWeek;" 
-									class="incrementControl increase">
-									<img src="${dojoWidgetModuleUri}templates/images/incrementMonth.png" 
-									alt="&darr;" style="width:7px;height:5px;" />
-								</span>
-								<span 
-									dojoAttachPoint="increaseMonthNode" 
-									dojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl increase">
-									<img src="${dojoWidgetModuleUri}templates/images/incrementMonth.png" 
-										alt="&darr;"  dojoAttachPoint="incrementMonthImageNode">
-								</span>
-								<span 
-									dojoAttachPoint="decreaseWeekNode" 
-									dojoAttachEvent="onClick: onIncrementWeek;" 
-									class="incrementControl decrease">
-									<img src="${dojoWidgetModuleUri}templates/images/decrementMonth.png" alt="&uarr;" style="width:7px;height:5px;" />
-								</span>
-								<span 
-									dojoAttachPoint="decreaseMonthNode" 
-									dojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl decrease">
-									<img src="${dojoWidgetModuleUri}templates/images/decrementMonth.png" 
-										alt="&uarr;" dojoAttachPoint="decrementMonthImageNode">
-								</span>
-								<span dojoAttachPoint="monthLabelNode" class="month"></span>
-							</td>
-							<td class="monthCurve monthCurveTR" valign="top"></td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-		</thead>
-		<tbody>
-			<tr>
-				<td colspan="3">
-					<table class="calendarBodyContainer" cellspacing="0" cellpadding="0" border="0">
-						<thead>
-							<tr dojoAttachPoint="dayLabelsRow">
-								<td></td>
-								<td></td>
-								<td></td>
-								<td></td>
-								<td></td>
-								<td></td>
-								<td></td>
-							</tr>
-						</thead>
-						<tbody dojoAttachPoint="calendarDatesContainerNode" 
-							dojoAttachEvent="onClick: _handleUiClick;">
-							<tr dojoAttachPoint="calendarWeekTemplate">
-								<td></td>
-								<td></td>
-								<td></td>
-								<td></td>
-								<td></td>
-								<td></td>
-								<td></td>
-							</tr>
-						</tbody>
-					</table>
-				</td>
-			</tr>
-		</tbody>
-		<tfoot>
-			<tr>
-				<td colspan="3" class="yearWrapper">
-					<table cellspacing="0" cellpadding="0" border="0" class="yearContainer">
-						<tr>
-							<td class="curveBL" valign="top"></td>
-							<td valign="top">
-								<h3 class="yearLabel">
-									<span dojoAttachPoint="previousYearLabelNode"
-										dojoAttachEvent="onClick: onIncrementYear;" class="previousYear"></span>
-									<span class="selectedYear" dojoAttachPoint="currentYearLabelNode"></span>
-									<span dojoAttachPoint="nextYearLabelNode" 
-										dojoAttachEvent="onClick: onIncrementYear;" class="nextYear"></span>
-								</h3>
-							</td>
-							<td class="curveBR" valign="top"></td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-		</tfoot>
-	</table>
-	
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DemoEngine.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DemoEngine.html
deleted file mode 100644
index 0ecc7de..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DemoEngine.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<div dojoAttachPoint="domNode">
-	<div dojoAttachPoint="navigationNode">
-		<table border="0" cellspacing="0" cellpadding="0">
-			<tr>
-				<td width="1%" valign="top" class="navigationCell"><h1>Categories</h1><div dojoAttachPoint="menuNavigationNode"></div></td>
-				<td width="99%" valign="top">
-					<div dojoAttachPoint="demoNavigationNode">
-					</div>
-				</td>
-			</tr>
-		</table>
-	</div>
-
-	<div dojoAttachPoint="demoContainerNode">
-
-		<div dojoAttachPoint="demoPaneNode">
-		</div>
-
-		<div dojoAttachPoint="demoHeaderNode">
-			<span dojoAttachPoint="collapsedMenuNode" dojoAttachEvent="onclick: expandDemoNavigation"></span>
-			<div dojoAttachPoint="aboutNode">About this Demo</div>
-		</div>
-	</div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Dialog.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Dialog.html
deleted file mode 100644
index fadfa69..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Dialog.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div id="${this.widgetId}" class="dojoDialog" dojoattachpoint="wrapper">
-	<span dojoattachpoint="tabStartOuter" dojoonfocus="trapTabs" dojoonblur="clearTrap"	tabindex="0"></span>
-	<span dojoattachpoint="tabStart" dojoonfocus="trapTabs" dojoonblur="clearTrap" tabindex="0"></span>
-	<div dojoattachpoint="containerNode" style="position: relative; z-index: 2;"></div>
-	<span dojoattachpoint="tabEnd" dojoonfocus="trapTabs" dojoonblur="clearTrap" tabindex="0"></span>
-	<span dojoattachpoint="tabEndOuter" dojoonfocus="trapTabs" dojoonblur="clearTrap" tabindex="0"></span>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DocPane.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DocPane.css
deleted file mode 100644
index e824775..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DocPane.css
+++ /dev/null
@@ -1,49 +0,0 @@
-.dojoDocPane { padding:1em; font: 1em Georgia,Times,"Times New Roman",serif; }
-
-.dojoDocPane .container{ }
-
-.dojoDocPane .dialog{ }
-.dojoDocPane .dialog .container{ padding: 0.5em; background: #fff; border: 2px solid #333; }
-.dojoDocPane .dialog .docDialog{ background: transparent; width: 20em; }
-.dojoDocPane .dialog .docDialog h2{ margin-top: 0; padding-top: 0; }
-.dojoDocPane .dialog .docDialog input { float: right; margin-right: 1em; }
-.dojoDocPane .dialog .docDialog p{ clear: both; }
-#dojoDocUserName, #dojoDocPassword { width: 10em; }
-
-.dojoDocPane .nav{ }
-.dojoDocPane .nav span{ }
-
-.dojoDocPane .detail{ }
-.dojoDocPane .detail h1{ }
-.dojoDocPane .detail h1 span.fn{ }
-.dojoDocPane .detail .description{ }
-.dojoDocPane .detail .params{ }
-.dojoDocPane .detail .params .row{ }
-.dojoDocPane .detail .params .row span{ }
-.dojoDocPane .detail .variables{ }
-.dojoDocPane .detail .variables .row{ }
-.dojoDocPane .detail .signature{ }
-.dojoDocPane .detail .signature .source{ white-space: pre; font: 0.8em Monaco, Courier, "Courier New", monospace; }
-.dojoDocPane .detail .signature .source .return{ color:#369; }
-.dojoDocPane .detail .signature .source .function{ color: #98543F; font-weight: bold; }
-.dojoDocPane .detail .signature .source .params{ }
-.dojoDocPane .detail .signature .source .params .type{ font-style: italic; color: #d17575; }
-.dojoDocPane .detail .signature .source .params .name{ color: #d14040; }
-
-.dojoDocPane .result{ }
-.dojoDocPane .result h1{ }
-.dojoDocPane .result .row{ }
-.dojoDocPane .result .row .summary{ }
-
-.dojoDocPane .package{ }
-.dojoDocPane .package h1{ }
-.dojoDocPane .package .row{ }
-.dojoDocPane .package .row .summary{ }
-.dojoDocPane .package .description{ }
-.dojoDocPane .package .methods{ }
-.dojoDocPane .package .methods h2{ }
-.dojoDocPane .package .methods .row{ }
-.dojoDocPane .package .methods .row .description{ }
-.dojoDocPane .package .requires{ }
-.dojoDocPane .package .requires h2{ }
-.dojoDocPane .package .requires .row{ }
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DocPane.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DocPane.html
deleted file mode 100644
index 06134e8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DocPane.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<div class="dojoDocPane">
-	<div dojoAttachPoint="containerNode" class="container"></div>
-
-	<div dojoAttachPoint="dialog" class="dialog">
-		<div class="container" dojoAttachPoint="dialogBg">
-			<div class="docDialog" dojoAttachPoint="dialogFg">
-				<h2>Log In</h2>
-				<p><input id="dojoDocUserName" dojoAttachPoint="userName"><label for="dojoDocUserName">User Name:</label></p>
-				<p><input id="dojoDocPassword" dojoAttachPoint="password" type="password"><label for="dojoDocPassword">Password:</label></p>
-				<p><input type="button" dojoAttachPoint="cancel" value="cancel"> <input type="button" dojoAttachPoint="logIn" value="Log In"></p>
-				<p></p>
-			</div>
-		</div>
-	</div>
-
-	<div dojoAttachPoint="nav" class="nav"><span>Detail</span> | <span>Source</span> | <span>Examples</span> | <span>Walkthrough</span></div>
-
-	<div dojoAttachPoint="detail" class="detail">
-		<h1>Detail: <span class="fn" dojoAttachPoint="fn">dojo.select</span></h1>
-		<div class="description" dojoAttachPoint="description">Description</div>
-		<div class="params" dojoAttachPoint="parameters">
-			<h2>Parameters</h2>
-			<div class="row" dojoAttachPoint="pRow">
-				<span dojoAttachPoint="pOpt"><em>optional</em> </span>
-				<span><span dojoAttachPoint="pType">type</span> </span>
-				<a href="#" dojoAttachPoint="pLink">variable</a>
-				<span> - <span dojoAttachPoint="pDesc"></span></span>
-			</div>
-		</div>
-		<div class="variables" dojoAttachPoint="variables">
-			<h2>Variables</h2>
-			<div class"row" dojoAttachPoint="vRow">
-				<a href="#" dojoAttachPoint="vLink">variable</a><span> - <span dojoAttachPoint="vDesc"></span></span>
-			</div>
-		</div>
-		<div class="signature">
-			<h2>Signature</h2>
-			<div class="source">
-				<span class="return" dojoAttachPoint="sType">returnType</span> 
-				<span class="function" dojoAttachPoint="sName">foo</span>
-				(<span class="params" dojoAttachPoint="sParams">
-					<span class="type" dojoAttachPoint="sPType">type </span>
-					<span class="name" dojoAttachPoint="sPName">paramName</span>
-				</span>)
-			</div>
-		</div>
-	</div>
-	
-	<div dojoAttachPoint="result" class="result">
-		<h1>Search Results: <span dojoAttachPoint="count">0</span> matches</h1>
-		<div class="row" dojoAttachPoint="row">
-			<a href="#" dojoAttachPoint="fnLink">dojo.fnLink</a>
-			<span> - <span class="summary" dojoAttachPoint="summary">summary</span></span>
-		</div>
-	</div>
-
-	<div dojoAttachPoint="packag" class="package">
-		<h1>Package: 
-			<span class="pkg" dojoAttachPoint="pkg">dojo.package</span> 
-			<span class="edit" dojoAttachPoint="edit">[edit]</span> 
-			<span class="save" dojoAttachPoint="save">[save]</span>
-		</h1>
-		<div dojoAttachPoint="pkgDescription" class="description">Description</div>
-		<div class="methods" dojoAttachPoint="methods">
-			<h2>Methods</h2>
-			<div class="row" dojoAttachPoint="mRow">
-				<a href="#" dojoAttachPoint="mLink">method</a>
-				<span> - <span class="description" dojoAttachPoint="mDesc"></span></span>
-			</div>
-		</div>
-		<div class="requires" dojoAttachPoint="requires">
-			<h2>Requires</h2>
-			<div class="row" dojoAttachPoint="rRow">
-				<h3 dojoAttachPoint="rH3">Environment</h3>
-				<div dojoAttachPoint="rRow2"><a href="#" dojoAttachPoint="rLink" class="package">require</a></div>
-			</div>
-		</div>
-	</div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DropDownButtonTemplate.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DropDownButtonTemplate.html
deleted file mode 100644
index a14822e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/DropDownButtonTemplate.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<button dojoAttachPoint="button" class="dojoButton dojoButtonNoHover" dojoAttachEvent="onMouseOver: ; onMouseOut: ; onClick: ;">
-  <table dojoAttachPoint="table" style="margin:0 0 0 0;"><tr>
-    <td class="label" dojoAttachPoint="labelCell"></td>
-    <td class="border" dojoAttachPoint="borderCell"></td>
-    <td class="downArrow" dojoAttachPoint="arrowCell">
-      <img dojoAttachPoint="arrow">
-    </td>
-  </tr></table>
-</button>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/createlink.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/createlink.html
deleted file mode 100644
index 38c06e9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/createlink.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<table>
-<tr><td>URL</td><td> <input type="text" dojoAttachPoint="link_href" name="dojo_createLink_href"/></td></tr>
-<tr><td>Target </td><td><select dojoAttachPoint="link_target">
-	<option value="">Self</option>
-	<option value="_blank">New Window</option>
-	<option value="_top">Top Window</option>
-	</select></td></tr>
-<tr><td>Class </td><td><input type="text" dojoAttachPoint="link_class" /></td></tr>
-<tr><td colspan="2">
-	<table><tr>
-	<td><button dojoType='Button' dojoAttachEvent='onClick:ok'>OK</button></td>
-	<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Cancel</button></td>
-	</tr></table>
-	</td></tr>
-</table>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/find.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/find.html
deleted file mode 100644
index 6413059..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/find.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<table style="white-space: nowrap;">
-<tr><td colspan='2'>Find: <input type="text" dojoAttachPoint="find_text" /></td></tr>
-<tr><td><input type="checkbox" dojoType="CheckBox" dojoAttachPoint="find_option_casesens" />
-		<label for="find_option_casesens">Case Sensitive</label></td>
-			<td><input type="checkbox" dojoType="CheckBox" dojoAttachPoint="find_option_backwards" />
-		<label for="find_option_backwards">Search Backwards</label></td></tr>
-<tr><td style="display: none;"><input type="checkbox" dojoType="CheckBox" dojoAttachPoint="find_option_wholeword" />
-		<label for="find_option_wholeword">Whole Word</label></td>
-<tr><td colspan="1">
-	<table><tr>
-	<td><button dojoType='Button' dojoAttachEvent='onClick:find'>Find</button></td>
-	<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Close</button></td>
-	</tr></table>
-	</td></tr>
-</table>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/insertimage.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/insertimage.html
deleted file mode 100644
index a14dde8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/insertimage.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<table cellspacing="1" cellpadding="1" border="0" width="100%" height="100%">
-	<tr>
-		<td>
-			<table cellspacing="0" cellpadding="0" width="100%" border="0">
-				<tr>
-					<td width="100%">
-						<span>URL</span>
-					</td>
-					<td style="display: none" nowrap="nowrap" rowspan="2">
-						<!--input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server"/-->
-					</td>
-				</tr>
-				<tr>
-					<td valign="top">
-						<input dojoAttachPoint="image_src" style="width: 100%" type="text" />
-					</td>
-				</tr>
-			</table>
-		</td>
-	</tr>
-	<tr>
-		<td>
-			<span>Alternative Text</span><br />
-			<input dojoAttachPoint="image_alt" style="width: 100%" type="text" /><br />
-		</td>
-	</tr>
-	<tr>
-		<td valign="top">
-			<table><tr><td>
-						<table cellspacing="0" cellpadding="0" border="0">
-							<tr>
-								<td nowrap="nowrap">
-									<span>Width</span>&nbsp;</td>
-								<td>
-									<input type="text" size="3" dojoAttachPoint="image_width" /></td>
-
-								<td rowspan="2">
-									<!--div id="btnLockSizes" class="BtnLocked" onmouseover="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ) + ' BtnOver';"
-										onmouseout="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' );" title="Lock Sizes"
-										onclick="SwitchLock(this);">
-									</div-->
-								</td>
-								<td rowspan="2">
-									<!--div id="btnResetSize" class="BtnReset" onmouseover="this.className='BtnReset BtnOver';"
-										onmouseout="this.className='BtnReset';" title="Reset Size" onclick="ResetSizes();">
-									</div-->
-								</td>
-							</tr>
-
-							<tr>
-								<td nowrap="nowrap">
-									<span>Height</span>&nbsp;</td>
-								<td>
-									<input type="text" size="3" dojoAttachPoint="image_height" /></td>
-							</tr>
-						</table>
-					</td><td>
-
-						<table cellspacing="0" cellpadding="0" border="0">
-							<tr>
-
-								<td nowrap="nowrap">
-									<span >HSpace</span>&nbsp;</td>
-								<td>
-									<input type="text" size="2" dojoAttachPoint="image_hspace"/></td>
-							</tr>
-							<tr>
-								<td nowrap="nowrap">
-									<span >VSpace</span>&nbsp;</td>
-
-								<td>
-									<input type="text" size="2" dojoAttachPoint="image_vspace" /></td>
-							</tr>
-						</table>
-					</td></tr>
-					<tr><td colspan="2">
-						<table cellspacing="0" cellpadding="0" border="0">
-							<tr>
-								<td nowrap="nowrap">
-									<span>Border</span>&nbsp;</td>
-								<td>
-									<input type="text" size="2" value="" dojoAttachPoint="image_border" /></td>
-								<td>&nbsp;&nbsp;&nbsp;</td>
-								<td nowrap="nowrap">
-									<span >Align</span>&nbsp;</td>
-								<td>
-									<select dojoAttachPoint="image_align">
-
-										<option value="" selected="selected"></option>
-										<option value="left">Left</option>
-										<option value="absBottom">Abs Bottom</option>
-										<option value="absMiddle">Abs Middle</option>
-										<option value="baseline">Baseline</option>
-										<option value="bottom">Bottom</option>
-
-										<option value="middle">Middle</option>
-										<option value="right">Right</option>
-										<option value="textTop">Text Top</option>
-										<option value="top">Top</option>
-									</select>
-								</td>
-							</tr>
-						</table>
-					</td>
-				</tr></table>
-		</td>
-	</tr>
-	<tr><td>
-		<table><tr>
-		<td><button dojoType='Button' dojoAttachEvent='onClick:ok'>OK</button></td>
-		<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Cancel</button></td>
-		</tr></table>
-	</td></tr>
-</table>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/inserttable.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/inserttable.html
deleted file mode 100644
index ec1fe3e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/inserttable.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<div>
-<table cellSpacing="1" cellPadding="1" width="100%" border="0">
-	<tr>
-		<td valign="top">
-			<table cellSpacing="0" cellPadding="0" border="0">
-				<tr>
-
-					<td><span>Rows</span>:</td>
-					<td>&nbsp;<input dojoAttachPoint="table_rows" type="text" maxLength="3" size="2" value="3"></td>
-				</tr>
-				<tr>
-					<td><span>Columns</span>:</td>
-					<td>&nbsp;<input dojoAttachPoint="table_cols" type="text" maxLength="2" size="2" value="2"></td>
-				</tr>
-
-				<tr>
-					<td>&nbsp;</td>
-					<td>&nbsp;</td>
-				</tr>
-				<tr>
-					<td><span>Border size</span>:</td>
-					<td>&nbsp;<INPUT dojoAttachPoint="table_border" type="text" maxLength="2" size="2" value="1"></td>
-				</tr>
-
-				<tr>
-					<td><span>Alignment</span>:</td>
-					<td>&nbsp;<select dojoAttachPoint="table_align">
-							<option value="" selected>&lt;Not set&gt;</option>
-							<option value="left">Left</option>
-							<option value="center">Center</option>
-							<option value="right">Right</option>
-						</select></td>
-				</tr>
-			</table>
-		</td>
-		<td>&nbsp;&nbsp;&nbsp;</td>
-		<td align="right" valign="top">
-			<table cellSpacing="0" cellPadding="0" border="0">
-				<tr>
-					<td><span>Width</span>:</td>
-					<td>&nbsp;<input dojoAttachPoint="table_width" type="text" maxLength="4" size="3"></td>
-					<td>&nbsp;<select dojoAttachPoint="table_widthtype">
-							<option value="percent" selected>percent</option>
-							<option value="pixels">pixels</option>
-						</select></td>
-
-				</tr>
-				<tr>
-					<td><span>Height</span>:</td>
-					<td>&nbsp;<INPUT dojoAttachPoint="table_height" type="text" maxLength="4" size="3"></td>
-					<td>&nbsp;<span>pixels</span></td>
-				</tr>
-				<tr>
-					<td>&nbsp;</td>
-					<td>&nbsp;</td>
-					<td>&nbsp;</td>
-				</tr>
-				<tr>
-					<td nowrap><span>Cell spacing</span>:</td>
-					<td>&nbsp;<input dojoAttachPoint="table_cellspacing" type="text" maxLength="2" size="2" value="1"></td>
-					<td>&nbsp;</td>
-
-				</tr>
-				<tr>
-					<td nowrap><span>Cell padding</span>:</td>
-					<td>&nbsp;<input dojoAttachPoint="table_cellpadding" type="text" maxLength="2" size="2" value="1"></td>
-					<td>&nbsp;</td>
-				</tr>
-			</table>
-		</td>
-	</tr>
-</table>
-<table cellSpacing="0" cellPadding="0" width="100%" border="0">
-	<tr>
-		<td nowrap><span>Caption</span>:</td>
-		<td>&nbsp;</td>
-		<td width="100%" nowrap>&nbsp;
-			<input dojoAttachPoint="table_caption" type="text" style="WIDTH: 90%"></td>
-	</tr>
-	<tr>
-		<td nowrap><span>Summary</span>:</td>
-		<td>&nbsp;</td>
-		<td width="100%" nowrap>&nbsp;
-			<input dojoAttachPoint="table_summary" type="text" style="WIDTH: 90%"></td>
-	</tr>
-</table>
-<table><tr>
-<td><button dojoType='Button' dojoAttachEvent='onClick:ok'>Ok</button></td>
-<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Cancel</button></td>
-</tr></table>
-</div>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/replace.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/replace.html
deleted file mode 100644
index 708e21c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/Dialog/replace.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<table style="white-space: nowrap;">
-<tr><td>Find: </td><td> <input type="text" dojoAttachPoint="replace_text" /></td></tr>
-<tr><td>Replace with: </td><td> <input type="text" dojoAttachPoint="replace_text" /></td></tr>
-<tr><td colspan='2'><table><tr><td><input type="checkbox" dojoType="CheckBox" dojoAttachPoint="replace_option_casesens" id="dojo_replace_option_casesens" />
-		<label for="dojo_replace_option_casesens">Case Sensitive</label></td>
-			<td><input type="checkbox" dojoType="CheckBox" dojoAttachPoint="replace_option_backwards" id="dojo_replace_option_backwards" />
-		<label for="dojo_replace_option_backwards">Search Backwards</label></td></tr></table></td></tr>
-<tr><td colspan=2">
-	<table><tr>
-	<td><button dojoType='Button' dojoAttachEvent='onClick:replace'>Replace</button></td>
-	<td><button dojoType='Button' dojoAttachEvent='onClick:replaceAll'>Replace All</button></td>
-	<td><button dojoType='Button' dojoAttachEvent='onClick:cancel'>Close</button></td>
-	</tr></table>
-	</td></tr>
-</table>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorDialog.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorDialog.html
deleted file mode 100644
index ec1919b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorDialog.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<div id="${this.widgetId}" class="dojoFloatingPane">
-	<span dojoattachpoint="tabStartOuter" dojoonfocus="trapTabs" dojoonblur="clearTrap"	tabindex="0"></span>
-	<span dojoattachpoint="tabStart" dojoonfocus="trapTabs" dojoonblur="clearTrap" tabindex="0"></span>
-	<div dojoAttachPoint="titleBar" class="dojoFloatingPaneTitleBar"  style="display:none">
-	  	<img dojoAttachPoint="titleBarIcon"  class="dojoFloatingPaneTitleBarIcon">
-		<div dojoAttachPoint="closeAction" dojoAttachEvent="onClick:hide"
-   	  		class="dojoFloatingPaneCloseIcon"></div>
-		<div dojoAttachPoint="restoreAction" dojoAttachEvent="onClick:restoreWindow"
-   	  		class="dojoFloatingPaneRestoreIcon"></div>
-		<div dojoAttachPoint="maximizeAction" dojoAttachEvent="onClick:maximizeWindow"
-   	  		class="dojoFloatingPaneMaximizeIcon"></div>
-		<div dojoAttachPoint="minimizeAction" dojoAttachEvent="onClick:minimizeWindow"
-   	  		class="dojoFloatingPaneMinimizeIcon"></div>
-	  	<div dojoAttachPoint="titleBarText" class="dojoFloatingPaneTitleText">${this.title}</div>
-	</div>
-
-	<div id="${this.widgetId}_container" dojoAttachPoint="containerNode" class="dojoFloatingPaneClient"></div>
-	<span dojoattachpoint="tabEnd" dojoonfocus="trapTabs" dojoonblur="clearTrap" tabindex="0"></span>
-	<span dojoattachpoint="tabEndOuter" dojoonfocus="trapTabs" dojoonblur="clearTrap" tabindex="0"></span>
-	<div dojoAttachPoint="resizeBar" class="dojoFloatingPaneResizebar" style="display:none"></div>
-</div>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorToolbar_FontName.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorToolbar_FontName.html
deleted file mode 100644
index 2bb33d0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorToolbar_FontName.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<div class="SC_Panel" style="width: 150px; height: 150px;">
-	<div class="SC_Item" dropDownItemName="Arial">
-		<font face="Arial" style="font-size: 12px;">Arial</font>
-	</div>
-	<div class="SC_Item" dropDownItemName="Comic Sans MS">
-		<font face="Comic Sans MS" style="font-size: 12px;">Comic Sans MS</font>
-	</div>
-	<div class="SC_Item" dropDownItemName="Courier New">
-		<font face="Courier New" style="font-size: 12px;">Courier New</font>
-	</div>
-	<div class="SC_Item" dropDownItemName="Tahoma">
-		<font face="Tahoma" style="font-size: 12px;">Tahoma</font>
-	</div>
-	<div class="SC_Item" dropDownItemName="Times New Roman">
-		<font face="Times New Roman" style="font-size: 12px;">Times New Roman</font>
-	</div>
-	<div class="SC_Item" dropDownItemName="Verdana">
-		<font face="Verdana" style="font-size: 12px;">Verdana</font>
-	</div>
-</div>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorToolbar_FontSize.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorToolbar_FontSize.html
deleted file mode 100644
index f236b97..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorToolbar_FontSize.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<div class="SC_Panel" style="width: 150px; height: 150px;">
-<table width="100%" cellspacing="0" cellpadding="0" style="table-layout: fixed;">
-<tbody>
-<tr>
-<td nowrap="">
-	<div class="SC_Item" dropDownItemName="1">
-	<font size="1">xx-small</font>
-	</div>
-	<div class="SC_Item" dropDownItemName="2">
-	<font size="2">x-small</font>
-	</div>
-	<div class="SC_Item" dropDownItemName="3">
-	<font size="3">small</font>
-	</div>
-	<div class="SC_Item" dropDownItemName="4">
-	<font size="4">medium</font>
-	</div>
-	<div class="SC_Item" dropDownItemName="5">
-	<font size="5">large</font>
-	</div>
-	<div class="SC_Item" dropDownItemName="6">
-	<font size="6">x-large</font>
-	</div>
-	<div class="SC_Item" dropDownItemName="7">
-	<font size="7">xx-large</font>
-	</div>
-</td>
-</tr>
-</tbody>
-</table>
-</div>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorToolbar_FormatBlock.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorToolbar_FormatBlock.html
deleted file mode 100644
index 34c7dbf..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/EditorToolbar_FormatBlock.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<div class="SC_Panel" style="width: 190px; height: 150px;">
-	<div class="SC_Item" dropDownItemName="p">
-		<div class="BaseFont">
-			<p>Normal</p>
-		</div>
-	</div>
-	<div class="SC_Item" dropDownItemName="div">
-		<div class="BaseFont">
-			<div>Normal (DIV)</div>
-		</div>
-	</div>
-	<div class="SC_Item" dropDownItemName="pre">
-		<div class="BaseFont">
-			<pre>Formatted</pre>
-		</div>
-	</div>
-	<div class="SC_Item" dropDownItemName="address">
-		<div class="BaseFont">
-			<address>Address</address>
-		</div>
-	</div>
-	<div class="SC_Item" dropDownItemName="h1">
-		<div class="BaseFont">
-			<h1>Heading 1</h1>
-		</div>
-	</div>
-	<div class="SC_Item" dropDownItemName="h2">
-		<div class="BaseFont">
-			<h2>Heading 2</h2>
-		</div>
-	</div>
-	<div class="SC_Item" dropDownItemName="h3">
-		<div class="BaseFont">
-			<h3>Heading 3</h3>
-		</div>
-	</div>
-	<div class="SC_Item" dropDownItemName="h4">
-		<div class="BaseFont">
-			<h4>Heading 4</h4>
-		</div>
-	</div>
-	<div class="SC_Item" dropDownItemName="h5">
-		<div class="BaseFont">
-			<h5>Heading 5</h5>
-		</div>
-	</div>
-	<div class="SC_Item" dropDownItemName="h6">
-		<div class="BaseFont">
-			<h6>Heading 6</h6>
-		</div>
-	</div>
-</div>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/showtableborder_gecko.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/showtableborder_gecko.css
deleted file mode 100644
index 75d362a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/showtableborder_gecko.css
+++ /dev/null
@@ -1,19 +0,0 @@
-/* For tables with the "border" attribute set to "0" */
-table[border="0"], 
-table[border="0"] > tr > td, table[border="0"] > tr > th, 
-table[border="0"] > tbody > tr > td, table[border="0"] > tbody > tr > th, 
-table[border="0"] > thead > tr > td, table[border="0"] > thead > tr > th, 
-table[border="0"] > tfoot > tr > td, table[border="0"] > tfoot > tr > th
-{
-	border: #d3d3d3 1px dotted ;
-}
-
-/* For tables with no "border" attribute set */
-table:not([border]), 
-table:not([border]) > tr > td, table:not([border]) > tr > th,
-table:not([border]) > tbody > tr > td, table:not([border]) > tbody > tr > th,
-table:not([border]) > thead > tr > td, table:not([border]) > thead > tr > th,
-table:not([border]) > tfoot > tr > td, table:not([border]) > tfoot > tr > th
-{
-	border: #d3d3d3 1px dotted ;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/showtableborder_ie.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/showtableborder_ie.css
deleted file mode 100644
index ebea1b9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Editor2/showtableborder_ie.css
+++ /dev/null
@@ -1,4 +0,0 @@
-table.dojoShowIETableBorders, table.dojoShowIETableBorders td, table.dojoShowIETableBorders th
-{
-	border: #d3d3d3 1px solid;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/EditorToolbar.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/EditorToolbar.css
deleted file mode 100644
index 3490fbb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/EditorToolbar.css
+++ /dev/null
@@ -1,152 +0,0 @@
-.StyleDropdownContainer {
-	position: absolute;
-	z-index: 1000;
-	overflow: auto;
-	cursor: default;
-	width: 250px;
-	height: 250px;
-	background-color: white;
-	border: 1px solid black;
-}
-
-.ColorDropdownContainer {
-	position: absolute;
-	z-index: 1000;
-	overflow: auto;
-	cursor: default;
-	width: 250px;
-	height: 150px;
-	background-color: white;
-	border: 1px solid black;
-}
-
-.EditorToolbarDomNode {
-	background-image: url(buttons/bg-fade.png);
-	background-repeat: repeat-x;
-	background-position: 0px -50px;
-}
-
-.EditorToolbarSmallBg {
-	background-image: url(images/toolbar-bg.gif);
-	background-repeat: repeat-x;
-	background-position: 0px 0px;
-}
-
-/*
-body {
-	background:url(images/blank.gif) fixed;
-}*/
-
-.IEFixedToolbar {
-	position:absolute;
-	/* top:0; */
-	top: expression(eval((document.documentElement||document.body).scrollTop));
-}
-
-div.bigIcon {
-	width: 40px;
-	height: 40px; 
-	/* background-color: white; */
-	/* border: 1px solid #a6a7a3; */
-	font-family: Verdana, Trebuchet, Tahoma, Arial;
-}
-
-.iconContainer {
-	font-family: Verdana, Trebuchet, Tahoma, Arial;
-	font-size: 13px;
-	float: left;
-	height: 18px;
-	display: block;
-	/* background-color: white; */
-	cursor: pointer;
-	padding: 1px 4px 1px 1px; /* almost the same as a transparent border */
-	border: 0px;
-}
-
-.dojoE2TBIcon {
-	display: block;
-	text-align: center;
-	min-width: 18px;
-	width: 18px;
-	height: 18px;
-	/* background-color: #a6a7a3; */
-	background-repeat: no-repeat;
-	background-image: url(buttons/aggregate.gif);
-}
-
-
-.dojoE2TBIcon[class~=dojoE2TBIcon] {
-}
-
-.ToolbarButtonLatched {
-    border: #316ac5 1px solid; !important;
-    padding: 0px 3px 0px 0px; !important; /* make room for border */
-    background-color: #c1d2ee;
-}
-
-.ToolbarButtonHighlighted {
-    border: #316ac5 1px solid; !important;
-    padding: 0px 3px 0px 0px; !important; /* make room for border */
-    background-color: #dff1ff;
-}
-
-.ToolbarButtonDisabled{
-    filter: gray() alpha(opacity=30); /* IE */
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-}
-
-.headingContainer {
-	width: 150px;
-	height: 30px;
-	margin: 0px;
-	/* padding-left: 5px; */
-	overflow: hidden;
-	line-height: 25px;
-	border-bottom: 1px solid black;
-	border-top: 1px solid white;
-}
-
-.EditorToolbarDomNode select {
-	font-size: 14px;
-}
- 
-.dojoE2TBIcon_Sep { width: 5px; min-width: 5px; max-width: 5px; background-position: 0px 0px}
-.dojoE2TBIcon_Backcolor { background-position: -18px 0px}
-.dojoE2TBIcon_Bold { background-position: -36px 0px}
-.dojoE2TBIcon_Cancel { background-position: -54px 0px}
-.dojoE2TBIcon_Copy { background-position: -72px 0px}
-.dojoE2TBIcon_Link { background-position: -90px 0px}
-.dojoE2TBIcon_Cut { background-position: -108px 0px}
-.dojoE2TBIcon_Delete { background-position: -126px 0px}
-.dojoE2TBIcon_TextColor { background-position: -144px 0px}
-.dojoE2TBIcon_BackgroundColor { background-position: -162px 0px}
-.dojoE2TBIcon_Indent { background-position: -180px 0px}
-.dojoE2TBIcon_HorizontalLine { background-position: -198px 0px}
-.dojoE2TBIcon_Image { background-position: -216px 0px}
-.dojoE2TBIcon_NumberedList { background-position: -234px 0px}
-.dojoE2TBIcon_Table { background-position: -252px 0px}
-.dojoE2TBIcon_BulletedList { background-position: -270px 0px}
-.dojoE2TBIcon_Italic { background-position: -288px 0px}
-.dojoE2TBIcon_CenterJustify { background-position: -306px 0px}
-.dojoE2TBIcon_BlockJustify { background-position: -324px 0px}
-.dojoE2TBIcon_LeftJustify { background-position: -342px 0px}
-.dojoE2TBIcon_RightJustify { background-position: -360px 0px}
-.dojoE2TBIcon_left_to_right { background-position: -378px 0px}
-.dojoE2TBIcon_list_bullet_indent { background-position: -396px 0px}
-.dojoE2TBIcon_list_bullet_outdent { background-position: -414px 0px}
-.dojoE2TBIcon_list_num_indent { background-position: -432px 0px}
-.dojoE2TBIcon_list_num_outdent { background-position: -450px 0px}
-.dojoE2TBIcon_Outdent { background-position: -468px 0px}
-.dojoE2TBIcon_Paste { background-position: -486px 0px}
-.dojoE2TBIcon_Redo { background-position: -504px 0px}
-dojoE2TBIcon_RemoveFormat { background-position: -522px 0px}
-.dojoE2TBIcon_right_to_left { background-position: -540px 0px}
-.dojoE2TBIcon_Save { background-position: -558px 0px}
-.dojoE2TBIcon_Space { background-position: -576px 0px}
-.dojoE2TBIcon_StrikeThrough { background-position: -594px 0px}
-.dojoE2TBIcon_Subscript { background-position: -612px 0px}
-.dojoE2TBIcon_Superscript { background-position: -630px 0px}
-.dojoE2TBIcon_Underline { background-position: -648px 0px}
-.dojoE2TBIcon_Undo { background-position: -666px 0px}
-.dojoE2TBIcon_WikiWord { background-position: -684px 0px}
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/EditorToolbar.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/EditorToolbar.html
deleted file mode 100644
index 5401344..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/EditorToolbar.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<div dojoAttachPoint="domNode" class="EditorToolbarDomNode" unselectable="on">
-	<table cellpadding="3" cellspacing="0" border="0">
-		<!--
-			our toolbar should look something like:
-
-			+=======+=======+=======+=============================================+
-			| w   w | style | copy  | bo | it | un | le | ce | ri |
-			| w w w | style |=======|==============|==============|
-			|  w w  | style | paste |  undo | redo | change style |
-			+=======+=======+=======+=============================================+
-		-->
-		<tbody>
-			<tr valign="top">
-				<td rowspan="2">
-					<div class="bigIcon" dojoAttachPoint="wikiWordButton"
-						dojoOnClick="wikiWordClick; buttonClick;">
-						<span style="font-size: 30px; margin-left: 5px;">
-							W
-						</span>
-					</div>
-				</td>
-				<td rowspan="2">
-					<div class="bigIcon" dojoAttachPoint="styleDropdownButton"
-						dojoOnClick="styleDropdownClick; buttonClick;">
-						<span unselectable="on"
-							style="font-size: 30px; margin-left: 5px;">
-							S
-						</span>
-					</div>
-					<div class="StyleDropdownContainer" style="display: none;"
-						dojoAttachPoint="styleDropdownContainer">
-						<table cellpadding="0" cellspacing="0" border="0"
-							height="100%" width="100%">
-							<tr valign="top">
-								<td rowspan="2">
-									<div style="height: 245px; overflow: auto;">
-										<div class="headingContainer"
-											unselectable="on"
-											dojoOnClick="normalTextClick">normal</div>
-										<h1 class="headingContainer"
-											unselectable="on"
-											dojoOnClick="h1TextClick">Heading 1</h1>
-										<h2 class="headingContainer"
-											unselectable="on"
-											dojoOnClick="h2TextClick">Heading 2</h2>
-										<h3 class="headingContainer"
-											unselectable="on"
-											dojoOnClick="h3TextClick">Heading 3</h3>
-										<h4 class="headingContainer"
-											unselectable="on"
-											dojoOnClick="h4TextClick">Heading 4</h4>
-										<div class="headingContainer"
-											unselectable="on"
-											dojoOnClick="blahTextClick">blah</div>
-										<div class="headingContainer"
-											unselectable="on"
-											dojoOnClick="blahTextClick">blah</div>
-										<div class="headingContainer"
-											unselectable="on"
-											dojoOnClick="blahTextClick">blah</div>
-										<div class="headingContainer">blah</div>
-										<div class="headingContainer">blah</div>
-										<div class="headingContainer">blah</div>
-										<div class="headingContainer">blah</div>
-									</div>
-								</td>
-								<!--
-								<td>
-									<span class="iconContainer" dojoOnClick="buttonClick;">
-										<span class="icon justifyleft" 
-											style="float: left;">&nbsp;</span>
-									</span>
-									<span class="iconContainer" dojoOnClick="buttonClick;">
-										<span class="icon justifycenter" 
-											style="float: left;">&nbsp;</span>
-									</span>
-									<span class="iconContainer" dojoOnClick="buttonClick;">
-										<span class="icon justifyright" 
-											style="float: left;">&nbsp;</span>
-									</span>
-									<span class="iconContainer" dojoOnClick="buttonClick;">
-										<span class="icon justifyfull" 
-											style="float: left;">&nbsp;</span>
-									</span>
-								</td>
-								-->
-							</tr>
-							<tr valign="top">
-								<td>
-									thud
-								</td>
-							</tr>
-						</table>
-					</div>
-				</td>
-				<td>
-					<!-- copy -->
-					<span class="iconContainer" dojoAttachPoint="copyButton"
-						unselectable="on"
-						dojoOnClick="copyClick; buttonClick;">
-						<span class="icon copy" 
-							unselectable="on"
-							style="float: left;">&nbsp;</span> copy
-					</span>
-					<!-- "droppable" options -->
-					<span class="iconContainer" dojoAttachPoint="boldButton"
-						unselectable="on"
-						dojoOnClick="boldClick; buttonClick;">
-						<span class="icon bold" unselectable="on">&nbsp;</span>
-					</span>
-					<span class="iconContainer" dojoAttachPoint="italicButton"
-						dojoOnClick="italicClick; buttonClick;">
-						<span class="icon italic" unselectable="on">&nbsp;</span>
-					</span>
-					<span class="iconContainer" dojoAttachPoint="underlineButton"
-						dojoOnClick="underlineClick; buttonClick;">
-						<span class="icon underline" unselectable="on">&nbsp;</span>
-					</span>
-					<span class="iconContainer" dojoAttachPoint="leftButton"
-						dojoOnClick="leftClick; buttonClick;">
-						<span class="icon justifyleft" unselectable="on">&nbsp;</span>
-					</span>
-					<span class="iconContainer" dojoAttachPoint="fullButton"
-						dojoOnClick="fullClick; buttonClick;">
-						<span class="icon justifyfull" unselectable="on">&nbsp;</span>
-					</span>
-					<span class="iconContainer" dojoAttachPoint="rightButton"
-						dojoOnClick="rightClick; buttonClick;">
-						<span class="icon justifyright" unselectable="on">&nbsp;</span>
-					</span>
-				</td>
-			</tr>
-			<tr>
-				<td>
-					<!-- paste -->
-					<span class="iconContainer" dojoAttachPoint="pasteButton"
-						dojoOnClick="pasteClick; buttonClick;" unselectable="on">
-						<span class="icon paste" style="float: left;" unselectable="on">&nbsp;</span> paste
-					</span>
-					<!-- "droppable" options -->
-					<span class="iconContainer" dojoAttachPoint="undoButton"
-						dojoOnClick="undoClick; buttonClick;" unselectable="on">
-						<span class="icon undo" style="float: left;" unselectable="on">&nbsp;</span> undo
-					</span>
-					<span class="iconContainer" dojoAttachPoint="redoButton"
-						dojoOnClick="redoClick; buttonClick;" unselectable="on">
-						<span class="icon redo" style="float: left;" unselectable="on">&nbsp;</span> redo
-					</span>
-				</td>	
-			</tr>
-		</tbody>
-	</table>
-</div>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/EditorToolbarOneline.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/EditorToolbarOneline.html
deleted file mode 100644
index b496218..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/EditorToolbarOneline.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<div class="EditorToolbarDomNode EditorToolbarSmallBg">
-	<table cellpadding="1" cellspacing="0" border="0">
-		<tbody>
-			<tr valign="top" align="left">
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="htmltoggle">
-						<span class="dojoE2TBIcon" 
-						style="background-image: none; width: 30px;" >&lt;h&gt;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="copy">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Copy">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="paste">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Paste">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="undo">
-						<!-- FIXME: should we have the text "undo" here? -->
-						<span class="dojoE2TBIcon dojoE2TBIcon_Undo">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="redo">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Redo">&nbsp;</span>
-					</span>
-				</td>
-				<td isSpacer="true">
-					<span class="iconContainer">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Sep"	style="width: 5px; min-width: 5px;"></span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="createlink">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Link">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="insertimage">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Image">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="inserthorizontalrule">
-						<span class="dojoE2TBIcon dojoE2TBIcon_HorizontalLine ">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="bold">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Bold">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="italic">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Italic">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="underline">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Underline">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="strikethrough">
-						<span 
-							class="dojoE2TBIcon dojoE2TBIcon_StrikeThrough">&nbsp;</span>
-					</span>
-				</td>
-				<td isSpacer="true">
-					<span class="iconContainer">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Sep" 
-							style="width: 5px; min-width: 5px;"></span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="insertunorderedlist">
-						<span 
-							class="dojoE2TBIcon dojoE2TBIcon_BulletedList">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="insertorderedlist">
-						<span 
-							class="dojoE2TBIcon dojoE2TBIcon_NumberedList">&nbsp;</span>
-					</span>
-				</td>
-				<td isSpacer="true">
-					<span class="iconContainer">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Sep" style="width: 5px; min-width: 5px;"></span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="indent">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Indent" 
-							unselectable="on">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="outdent">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Outdent" 
-							unselectable="on">&nbsp;</span>
-					</span>
-				</td>
-				<td isSpacer="true">
-					<span class="iconContainer">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Sep" style="width: 5px; min-width: 5px;"></span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="forecolor">
-						<span class="dojoE2TBIcon dojoE2TBIcon_TextColor" 
-							unselectable="on">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="hilitecolor">
-						<span class="dojoE2TBIcon dojoE2TBIcon_BackgroundColor" 
-							unselectable="on">&nbsp;</span>
-					</span>
-				</td>
-				<td isSpacer="true">
-					<span class="iconContainer">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Sep" style="width: 5px; min-width: 5px;"></span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="justifyleft">
-						<span class="dojoE2TBIcon dojoE2TBIcon_LeftJustify">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="justifycenter">
-						<span class="dojoE2TBIcon dojoE2TBIcon_CenterJustify">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="justifyright">
-						<span class="dojoE2TBIcon dojoE2TBIcon_RightJustify">&nbsp;</span>
-					</span>
-				</td>
-				<td>
-					<span class="iconContainer dojoEditorToolbarItem" dojoETItemName="justifyfull">
-						<span class="dojoE2TBIcon dojoE2TBIcon_BlockJustify">&nbsp;</span>
-					</span>
-				</td>	
-				<td>
-					<select class="dojoEditorToolbarItem" dojoETItemName="plainformatblock">
-						<!-- FIXME: using "p" here inserts a paragraph in most cases! -->
-						<option value="">-- format --</option>
-						<option value="p">Normal</option>
-						<option value="pre">Fixed Font</option>
-						<option value="h1">Main Heading</option>
-						<option value="h2">Section Heading</option>
-						<option value="h3">Sub-Heading</option>
-						<!-- <option value="blockquote">Block Quote</option> -->
-					</select>
-				</td>
-				<td><!-- uncomment to enable save button -->
-					<!-- save -->
-					<!--span class="iconContainer dojoEditorToolbarItem" dojoETItemName="save">
-						<span class="dojoE2TBIcon dojoE2TBIcon_Save">&nbsp;</span>
-					</span-->
-				</td>
-				<td width="*">&nbsp;</td>
-			</tr>
-		</tbody>
-	</table>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/FisheyeList.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/FisheyeList.css
deleted file mode 100644
index 749141e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/FisheyeList.css
+++ /dev/null
@@ -1,27 +0,0 @@
-.dojoHtmlFisheyeListItemLabel {
-	font-family: Arial, Helvetica, sans-serif;
-	background-color: #eee;
-	border: 2px solid #666;
-	padding: 2px;
-	text-align: center;
-	position: absolute;
-	display: none;
-}
-
-.dojoHtmlFisheyeListItemLabel.selected {
-	display: block;
-}
-
-.dojoHtmlFisheyeListItemImage {
-	border: 0px;
-	position: absolute;
-}
-
-.dojoHtmlFisheyeListItem {
-	position: absolute;
-	z-index: 2;
-}
-
-.dojoHtmlFisheyeListBar {
-	position: relative;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/FloatingPane.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/FloatingPane.css
deleted file mode 100644
index 1042a19..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/FloatingPane.css
+++ /dev/null
@@ -1,118 +0,0 @@
-
-/********** Outer Window ***************/
-
-.dojoFloatingPane {
-	/* essential css */
-	position: absolute;
-	overflow: visible;		/* so drop shadow is displayed */
-	z-index: 10;
-
-	/* styling css */
-	border: 1px solid;
-	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
-	background-color: ThreeDFace;
-}
-
-
-/********** Title Bar ****************/
-
-.dojoFloatingPaneTitleBar {
-	vertical-align: top;
-	margin: 2px 2px 2px 2px;
-	z-index: 10;
-	background-color: #7596c6;
-	cursor: default;
-	overflow: hidden;
-	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
-	vertical-align: middle;
-}
-
-.dojoFloatingPaneTitleText {
-	float: left;
-	padding: 2px 4px 2px 2px;
-	white-space: nowrap;
-	color: CaptionText;
-	font: small-caption;
-}
-
-.dojoTitleBarIcon {
-	float: left;
-	height: 22px;
-	width: 22px;
-	vertical-align: middle;
-	margin-right: 5px;
-	margin-left: 5px;
-}
-
-.dojoFloatingPaneActions{
-	float: right;
-	position: absolute;
-	right: 2px;
-	top: 2px;
-	vertical-align: middle;
-}
-
-
-.dojoFloatingPaneActionItem {
-	vertical-align: middle;
-	margin-right: 1px;
-	height: 22px;
-	width: 22px;
-}
-
-
-.dojoFloatingPaneTitleBarIcon {
-	/* essential css */
-	float: left;
-
-	/* styling css */
-	margin-left: 2px;
-	margin-right: 4px;
-	height: 22px;
-}
-
-/* minimize/maximize icons are specified by CSS only */
-.dojoFloatingPaneMinimizeIcon,
-.dojoFloatingPaneMaximizeIcon,
-.dojoFloatingPaneRestoreIcon,
-.dojoFloatingPaneCloseIcon {
-	vertical-align: middle;
-	height: 22px;
-	width: 22px;
-	float: right;
-}
-.dojoFloatingPaneMinimizeIcon {
-	background-image: url(images/floatingPaneMinimize.gif);
-}
-.dojoFloatingPaneMaximizeIcon {
-	background-image: url(images/floatingPaneMaximize.gif);
-}
-.dojoFloatingPaneRestoreIcon {
-	background-image: url(images/floatingPaneRestore.gif);
-}
-.dojoFloatingPaneCloseIcon {
-	background-image: url(images/floatingPaneClose.gif);
-}
-
-/* bar at bottom of window that holds resize handle */
-.dojoFloatingPaneResizebar {
-	z-index: 10;
-	height: 13px;
-	background-color: ThreeDFace;
-}
-
-/************* Client Area ***************/
-
-.dojoFloatingPaneClient {
-	position: relative;
-	z-index: 10;
-	border: 1px solid;
-	border-color: ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow;
-	margin: 2px;
-	background-color: ThreeDFace;
-	padding: 8px;
-	font-family: Verdana, Helvetica, Garamond, sans-serif;
-	font-size: 12px;
-	overflow: auto;
-}
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/FloatingPane.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/FloatingPane.html
deleted file mode 100644
index 07e81ed..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/FloatingPane.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<div id="${this.widgetId}" dojoAttachEvent="onMouseDown" class="dojoFloatingPane">
-	<div dojoAttachPoint="titleBar" class="dojoFloatingPaneTitleBar"  style="display:none">
-	  	<img dojoAttachPoint="titleBarIcon"  class="dojoFloatingPaneTitleBarIcon">
-		<div dojoAttachPoint="closeAction" dojoAttachEvent="onClick:closeWindow"
-   	  		class="dojoFloatingPaneCloseIcon"></div>
-		<div dojoAttachPoint="restoreAction" dojoAttachEvent="onClick:restoreWindow"
-   	  		class="dojoFloatingPaneRestoreIcon"></div>
-		<div dojoAttachPoint="maximizeAction" dojoAttachEvent="onClick:maximizeWindow"
-   	  		class="dojoFloatingPaneMaximizeIcon"></div>
-		<div dojoAttachPoint="minimizeAction" dojoAttachEvent="onClick:minimizeWindow"
-   	  		class="dojoFloatingPaneMinimizeIcon"></div>
-	  	<div dojoAttachPoint="titleBarText" class="dojoFloatingPaneTitleText">${this.title}</div>
-	</div>
-
-	<div id="${this.widgetId}_container" dojoAttachPoint="containerNode" class="dojoFloatingPaneClient"></div>
-
-	<div dojoAttachPoint="resizeBar" class="dojoFloatingPaneResizebar" style="display:none"></div>
-</div>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/HslColorPicker.svg b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/HslColorPicker.svg
deleted file mode 100644
index ce22964..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/HslColorPicker.svg
+++ /dev/null
@@ -1,30 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"
-	xmlns:xlink="http://www.w3.org/1999/xlink"
-	version="1.1" baseProfile="full" width="170" height="131" xmlns:html="http://www.w3.org/1999/xhtml">
-	<defs>
-	<linearGradient id="colorGradient" dojoAttachPoint="colorGradientNode" x1="0" x2="131" y1="0" y2="0" gradientUnits="userSpaceOnUse">
-		<stop id="leftGradientColor" dojoAttachPoint="leftGradientColorNode" offset="0%" stop-color="#828282"/>
-		<stop id="rightGradientColor" dojoAttachPoint="rightGradientColorNode" offset="100%" stop-color="#053fff"/>
-	</linearGradient>
-	<linearGradient id="verticalGradient" x1="0" x2="0" y1="0" y2="131" gradientUnits="userSpaceOnUse">
-		<stop offset="0%" style="stop-color:#000000;"/>
-		<stop offset="50%" style="stop-color:#000000;stop-opacity:0;"/>
-		<stop offset="50%" style="stop-color:#ffffff;stop-opacity:0;"/>
-		<stop offset="100%" style="stop-color:#ffffff;"/>
-	</linearGradient>
-	<linearGradient id="sliderGradient">
-		<stop offset="0%" style="stop-color:#000000;"/>
-		<stop offset="15%" style="stop-color:#ffffff;"/>
-		<stop offset="30%" style="stop-color:#000000;"/>
-		<stop offset="45%" style="stop-color:#ffffff;"/>
-		<stop offset="60%" style="stop-color:#000000;"/>
-		<stop offset="75%" style="stop-color:#ffffff;"/>
-		<stop offset="90%" style="stop-color:#000000;"/>
-	</linearGradient>
-</defs>
-	<rect x="0" y="0" width="131px" height="131px" fill="url(#colorGradient)"/>
-	<rect x="0" y="0" width="131px" height="131px" style="fill:url(#verticalGradient);"/>
-	<rect id="saturationLightSlider" dojoAttachPoint="saturationLightSliderNode" x="100" y="100" width="5px" height="5px" style="stroke:url(#sliderGradient);stroke-width:1px;fill-opacity:0;"/>
-	<image xlink:href="images/hue.png" dojoAttachPoint="hueNode" x="140px" y="0px" width="21px" height="131px" dojoAttachEvent="onclick: onHueClick;"/>
-	<rect dojoAttachPoint="hueSliderNode" x="139px" y="40px" width="24px" height="4px" style="stroke-opacity:1;fill-opacity:0;stroke:black;"/>
-</svg>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/InlineEditBox.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/InlineEditBox.css
deleted file mode 100644
index 31f0d06..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/InlineEditBox.css
+++ /dev/null
@@ -1,29 +0,0 @@
-.editLabel {
-	font-size : small;
-	padding : 0 5px;
-	display : none;
-}
-
-.editableRegionDisabled {
-	cursor : pointer;
-	_cursor : hand;
-}
-
-.editableRegion {
-	background-color : #ffc !important;
-	cursor : pointer;
-	_cursor : hand;
-}
-
-.editableRegion .editLabel {
-	display : inline;
-}
-
-.editableTextareaRegion .editLabel {
-	display : block;
-}
-
-.inlineEditBox {
-	/*background-color : #ffc;*/
-	display : inline;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/InlineEditBox.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/InlineEditBox.html
deleted file mode 100644
index 7eb0227..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/InlineEditBox.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<form class="inlineEditBox" style="display: none" dojoAttachPoint="form" dojoAttachEvent="onSubmit:saveEdit; onReset:cancelEdit; onKeyUp: checkForValueChange;">
-	<input type="text" dojoAttachPoint="text" style="display: none;" />
-	<textarea dojoAttachPoint="textarea" style="display: none;"></textarea>
-	<input type="submit" value="Save" dojoAttachPoint="submitButton" />
-	<input type="reset" value="Cancel" dojoAttachPoint="cancelButton" />
-</form>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Menu.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Menu.css
deleted file mode 100644
index 1419f6d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Menu.css
+++ /dev/null
@@ -1,60 +0,0 @@
-.dojoMenu {
-	border:1px solid #000000;
-	list-style-type:none;
-	margin:0;
-	padding:0;
-	padding-bottom: 1px;
-	background-color:#f4f4f4;
-	font-size: 8pt;
-}
-
-.dojoMenuSeparator {
-	list-style-type:none;
-	margin:0;
-	padding:1px 0;
-	border-bottom:1px solid #000000;
-	line-height:1px;
-	height:1px;
-}
-
-li:hover.dojoMenuSeparator {
-	background-color:#e5e5e5;
-	cursor:default;
-}
-
-
-
-
-.dojoContextMenu {
-	position: absolute;
-	display: none;
-	border: 2px solid;
-	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
-	list-style-type: none;
-	margin: 0;
-	padding: 1px;
-	background-color: ThreeDFace;
-	font-size: 8pt;
-}
-
-.dojoMenuItem {
-	white-space: nowrap;
-	padding: 2px;
-	font: menu;
-	color: WindowText;
-}
-
-.dojoMenuItem a {
-	text-decoration: none;
-	color: WindowText;
-	font: inherit;
-}
-
-.dojoMenuItemHover {
-	padding: 2px;
-	background-color: blue;
-	cursor: pointer;
-	_cursor: hand;
-	background-color: Highlight;
-	color: HighlightText;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Menu2.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Menu2.css
deleted file mode 100644
index 053cf9f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Menu2.css
+++ /dev/null
@@ -1,116 +0,0 @@
-
-.dojoPopupMenu2 {
-	position: absolute;
-	border: 1px solid #7298d0;
-	background:#85aeec url(images/soriaMenuBg.gif) repeat-x bottom left !important;
-	padding: 1px;
-	margin-top: 1px;
-	margin-bottom: 1px;
-}
-
-.dojoMenuItem2{
-	white-space: nowrap;
-	font: menu;
-	margin: 0;
-}
-
-.dojoMenuItem2Hover {
-	background-color: #D2E4FD;
-	cursor:pointer;
-	cursor:hand;
-}
-
-.dojoMenuItem2Icon {
-	position: relative;
-	background-position: center center;
-	background-repeat: no-repeat;
-	width: 16px;
-	height: 16px;
-	padding-right: 3px;
-}
-
-.dojoMenuItem2Label {
-	position: relative;
-	vertical-align: middle;
-}
-
-/* main label text */
-.dojoMenuItem2Label {
-	position: relative;
-	vertical-align: middle;
-}
-
-.dojoMenuItem2Accel {
-	position: relative;
-	vertical-align: middle;
-	padding-left: 3px;
-}
-
-.dojoMenuItem2Disabled .dojoMenuItem2Label,
-.dojoMenuItem2Disabled .dojoMenuItem2Accel {
-	color: #607a9e;
-}
-
-.dojoMenuItem2Submenu {
-	position: relative;
-	background-position: center center;
-	background-repeat: no-repeat;
-	background-image: url(images/submenu_off.gif);
-	width: 5px;
-	height: 9px;
-	padding-left: 3px;
-}
-.dojoMenuItem2Hover .dojoMenuItem2Submenu {
-	background-image: url(images/submenu_on.gif);
-}
-
-.dojoMenuItem2Disabled .dojoMenuItem2Submenu {
-	background-image: url(images/submenu_disabled.gif);
-}
-
-.dojoMenuSeparator2 {
-	font-size: 1px;
-	margin: 0;
-}
-
-.dojoMenuSeparator2Top {
-	height: 50%;
-	border-bottom: 1px solid #7a98c4;
-	margin: 0px 2px;
-	font-size: 1px;
-}
-
-.dojoMenuSeparator2Bottom {
-	height: 50%;
-	border-top: 1px solid #c9deff;
-	margin: 0px 2px;
-	font-size: 1px;
-}
-
-.dojoMenuBar2 {
-	background:#85aeec url(images/soriaBarBg.gif) repeat-x top left;
-	/*border-bottom:1px solid #6b9fec;*/
-	padding: 1px;
-}
-
-.dojoMenuBar2 .dojoMenuItem2 {
-	white-space: nowrap;
-	font: menu;
-	margin: 0;
-	position: relative;
-	vertical-align: middle;
-	z-index: 1;
-	padding: 3px 8px;
-	display: inline;/* needed in khtml to display correctly */
-	display: -moz-inline-box;/* needed in firefox */
-	cursor:pointer;
-	cursor:hand;
-}
-
-.dojoMenuBar2 .dojoMenuItem2Hover {
-	background-color:#d2e4fd;
-}
-
-.dojoMenuBar2 .dojoMenuItem2Disabled span {
-	color: #4f6582;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/MonthlyCalendar.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/MonthlyCalendar.css
deleted file mode 100644
index c646902..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/MonthlyCalendar.css
+++ /dev/null
@@ -1,91 +0,0 @@
-.datePickerContainer {
-	margin:0.5em 2em 0.5em 0;
-	/*width:10em;*/
-	float:left;
-}
-
-.previousMonth {
-	background-color:#bbbbbb;
-}
-
-.currentMonth {
-	background-color:#8f8f8f;
-}
-
-.nextMonth {
-	background-color:#eeeeee;
-}
-
-.currentDate {
-	text-decoration:underline;
-	font-style:italic;
-}
-
-.selectedItem {
-	background-color:#3a3a3a;
-	color:#ffffff;
-}
-
-.calendarContainer {
-	border-collapse:collapse;
-	border-spacing:0;
-	border-bottom:1px solid #e6e6e6;
-	overflow: hidden;
-	text-align: right;
-}
-
-.calendarContainer thead{
-	border-bottom:1px solid #e6e6e6;
-}
-
-.calendarContainer tbody * td {
-        height: 100px;
-        border: 1px solid gray;
-}
-
-.calendarContainer td {
-        width: 100px;
-        padding: 2px;
-	vertical-align: top;
-}
-
-.monthLabel {
-	font-size:0.9em;
-	font-weight:400;
-	margin:0;
-	text-align:center;
-}
-
-.monthLabel .month {
-	padding:0 0.4em 0 0.4em;
-}
-
-.yearLabel {
-	font-size:0.9em;
-	font-weight:400;
-	margin:0.25em 0 0 0;
-	text-align:right;
-	color:#a3a3a3;
-}
-
-.yearLabel .selectedYear {
-	color:#000;
-	padding:0 0.2em;
-}
-
-.nextYear, .previousYear {
-	cursor:pointer;cursor:hand;
-}
-
-.incrementControl {
-	cursor:pointer;cursor:hand;
-	width:1em;
-}
-
-.dojoMonthlyCalendarEvent {
-	font-size:0.7em;
-	overflow: hidden;
-	font-color: grey;
-	white-space: nowrap;
-	text-align: left;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/MonthlyCalendar.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/MonthlyCalendar.html
deleted file mode 100644
index 2cb9fbc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/MonthlyCalendar.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<div class="datePickerContainer" dojoAttachPoint="datePickerContainerNode">
-	<h3 class="monthLabel">
-	<!--
-	<span 
-		dojoAttachPoint="decreaseWeekNode" 
-		dojoAttachEvent="onClick: onIncrementWeek;" 
-		class="incrementControl">
-		<img src="${dojoWidgetModuleUri}templates/decrementWeek.gif" alt="&uarr;" />
-	</span>
-	-->
-	<span 
-		dojoAttachPoint="decreaseMonthNode" 
-		dojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl">
-		<img src="${dojoWidgetModuleUri}templates/decrementMonth.gif" 
-			alt="&uarr;" dojoAttachPoint="decrementMonthImageNode">
-	</span>
-	<span dojoAttachPoint="monthLabelNode" class="month">July</span>
-	<span 
-		dojoAttachPoint="increaseMonthNode" 
-		dojoAttachEvent="onClick: onIncrementMonth;" class="incrementControl">
-		<img src="${dojoWidgetModuleUri}templates/incrementMonth.gif" 
-			alt="&darr;"  dojoAttachPoint="incrementMonthImageNode">
-	</span>
-	<!--
-		<span dojoAttachPoint="increaseWeekNode" 
-			dojoAttachEvent="onClick: onIncrementWeek;" 
-			class="incrementControl">
-			<img src="${dojoWidgetModuleUri}templates/incrementWeek.gif" 
-			alt="&darr;" />
-		</span>
-	-->
-	</h3>
-	<table class="calendarContainer">
-		<thead>
-			<tr dojoAttachPoint="dayLabelsRow">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-		</thead>
-		<tbody dojoAttachPoint="calendarDatesContainerNode" 
-			dojoAttachEvent="onClick: onSetDate;">
-			<tr dojoAttachPoint="calendarRow0">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-			<tr dojoAttachPoint="calendarRow1">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-			<tr dojoAttachPoint="calendarRow2">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-			<tr dojoAttachPoint="calendarRow3">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-			<tr dojoAttachPoint="calendarRow4">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-			<tr dojoAttachPoint="calendarRow5">
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-				<td></td>
-			</tr>
-		</tbody>
-	</table>
-	<h3 class="yearLabel">
-		<span dojoAttachPoint="previousYearLabelNode"
-			dojoAttachEvent="onClick: onIncrementYear;" class="previousYear"></span>
-		<span class="selectedYear" dojoAttachPoint="currentYearLabelNode"></span>
-		<span dojoAttachPoint="nextYearLabelNode" 
-			dojoAttachEvent="onClick: onIncrementYear;" class="nextYear"></span>
-	</h3>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/PopUpButton.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/PopUpButton.css
deleted file mode 100644
index 37c5581..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/PopUpButton.css
+++ /dev/null
@@ -1,35 +0,0 @@
-.PopUpButton {
-	padding : 2px 6px 2px 9px;
-	border : 1px outset #ccc;
-	background : #f4f4f4;
-	color : #333;
-	text-decoration : none;
-}
-
-.PopUpButton .downArrow {
-	margin-left: 0.5em;
-	margin-bottom: 2px;
-}
-
-.downArrow.disabled {
-	background-image : url(images/dropdownButtonsArrow-disabled.gif);
-	cursor : default;
-}
-
-ul.dropdownButtons li a:hover,
-ul.dropdownButtons li span.downArrow:hover {
-	color : black;
-	background-color : #ddd;
-}
-
-ul.dropdownButtons li .downArrow.pressed, ul.dropdownButtons li .downArrow:focus {
-	border-style : inset;
-	background-position : 5px 10px;
-	padding : 2px 4px;
-}
-
-ul.dropdownButtons li a.disabled:hover,
-ul.dropdownButtons li span.downArrow.disabled:hover {
-	color : #999;
-	background-color : #d2e4fd;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ProgressBar.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ProgressBar.css
deleted file mode 100644
index a7f5307..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ProgressBar.css
+++ /dev/null
@@ -1,23 +0,0 @@
-.backBar{
-	border:1px solid #84a3d1;
-}
-.frontBar{
-	background:url("images/bar.gif") repeat bottom left;
-	background-attachment: fixed;
-}
-.h-frontBar{
-	background:url("images/h-bar.gif") repeat bottom left;
-	background-attachment: fixed;
-}
-.simpleFrontBar{
-	background: red;
-}
-.frontPercent,.backPercent{
-	font:bold 13px helvetica;
-}
-.backPercent{
-	color:#293a4b;
-}
-.frontPercent{
-	color:#fff;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ProgressBar.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ProgressBar.html
deleted file mode 100644
index 0438fad..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ProgressBar.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<div dojoAttachPoint="containerNode" style="position:relative;overflow:hidden">
-	<div style="position:absolute;display:none;width:100%;text-align:center" dojoAttachPoint="backPercentLabel" class="dojoBackPercentLabel"></div>
-	<div style="position:absolute;overflow:hidden;width:100%;height:100%" dojoAttachPoint="internalProgress">
-	<div style="position:absolute;display:none;width:100%;text-align:center" dojoAttachPoint="frontPercentLabel" class="dojoFrontPercentLabel"></div></div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/RemoteTabControl.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/RemoteTabControl.css
deleted file mode 100644
index c9f54e6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/RemoteTabControl.css
+++ /dev/null
@@ -1,61 +0,0 @@
-.dojoRemoteTabController {
-	position: relative;
-}
-
-.dojoRemoteTab {
-	position : relative;
-	float : left;
-	padding-left : 9px;
-	border-bottom : 1px solid #6290d2;
-	background : url(images/tab_left.gif) no-repeat left top;
-	cursor: pointer;
-	white-space: nowrap;
-	z-index: 3;
-}
-
-.dojoRemoteTab div {
-	display : block;
-	padding : 4px 15px 4px 6px;
-	background : url(images/tab_top_right.gif) no-repeat right top;
-	color : #333;
-	font-size : 90%;
-}
-
-.dojoRemoteTabPaneClose {
-	position : absolute;
-	bottom : 0px;
-	right : 6px;
-	height : 12px;
-	width : 12px;
-	background : url(images/tab_close.gif) no-repeat right top;
-}
-
-.dojoRemoteTabPaneCloseHover {
-	background-image : url(images/tab_close_h.gif);
-}
-
-.dojoRemoteTabClose {
-	display : inline-block;
-	height : 12px;
-	width : 12px;
-	padding : 0 12px 0 0;
-	margin : 0 -10px 0 10px;
-	background : url(images/tab_close.gif) no-repeat right top;
-	cursor : default;
-}
-
-.dojoRemoteTabCloseHover {
-	background-image : url(images/tab_close_h.gif);
-}
-
-.dojoRemoteTab.current {
-	padding-bottom : 1px;
-	border-bottom : 0;
-	background-position : 0 -150px;
-}
-
-.dojoRemoteTab.current div {
-	padding-bottom : 5px;
-	margin-bottom : -1px;
-	background-position : 100% -150px;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ResizableTextarea.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ResizableTextarea.css
deleted file mode 100644
index 8f0cf23..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ResizableTextarea.css
+++ /dev/null
@@ -1,15 +0,0 @@
-div.statusBar {
-	background-color: ThreeDFace;
-	height: 28px;
-	padding: 1px;
-	overflow: hidden;
-	font-size: 12px;
-}
-
-div.statusPanel {
-	background-color: ThreeDFace;
-	border: 1px solid;
-	border-color: ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow;
-	margin: 1px;
-	padding: 2px 6px;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ResizableTextarea.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ResizableTextarea.html
deleted file mode 100644
index 88827f7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ResizableTextarea.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<div>
-	<div style="border: 2px solid black; width: 90%; height: 200px;"
-		dojoAttachPoint="rootLayoutNode">
-		<div dojoAttachPoint="textAreaContainerNode" 
-			style="border: 0px; margin: 0px; overflow: hidden;">
-		</div>
-		<div dojoAttachPoint="statusBarContainerNode" class="statusBar">
-			<div dojoAttachPoint="statusLabelNode" 
-				class="statusPanel"
-				style="padding-right: 0px; z-index: 1;">drag to resize</div>
-			<div dojoAttachPoint="resizeHandleNode"></div>
-		</div>
-	</div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ResizeHandle.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ResizeHandle.css
deleted file mode 100644
index 661a86a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ResizeHandle.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.dojoHtmlResizeHandle {
-	float: right;
-	position: absolute;
-	right: 2px;
-	bottom: 2px;
-	width: 13px;
-	height: 13px;
-	z-index: 20;
-	cursor: nw-resize;
-	background-image: url(grabCorner.gif);
-	line-height: 0px;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Show.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Show.css
deleted file mode 100644
index 2251cdd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Show.css
+++ /dev/null
@@ -1,59 +0,0 @@
-@media screen {
-	html, body {
-		margin: 0px;
-		padding: 0px;
-		width: 100%;
-	}
-	h1 {
-		font-size: 50px;
-	}
-	p, li {
-		font-size: 30px;
-	}
-	.dojoShowNav {
-		background: #369;
-		overflow: hidden;
-		position: absolute;
-		height: 5px;
-		bottom: 0px;
-		left: 0px;
-		width: 100%;
-		text-align: center;
-	}
-	.dojoShowNav input {
-		margin: 0px;
-	}
-	.dojoShowHider {
-		height: 5px;
-		overflow: hidden;
-		width: 100%;
-	}
-	.dojoShowPrint {
-		position: absolute;
-		left: 5px;
-		top: 0px;
-	}
-	.dojoShow {
-		display: none;
-	}
-}
-@media print {
-	.dojoShow {
-		display: none !important;
-	}
-	.dojoShowPrint {
-		display: block !important;
-	}
-	.dojoShowPrintSlide {
-		border: 1px solid #aaa;
-		padding: 10px;
-		margin-bottom: 15px;
-	}
-	.dojoShowPrintSlide, ul {
-	page-break-inside: avoid;
-	}
-	h1 {
-		margin-top: 0;
-		page-break-after: avoid;
-	}
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Show.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Show.html
deleted file mode 100644
index bc87cdc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Show.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<div class="dojoShow">
-	<div dojoAttachPoint="contentNode"></div>
-	<div class="dojoShowNav" dojoAttachPoint="nav">
-		<div class="dojoShowHider" dojoAttachPoint="hider"></div>
-		<span unselectable="on" style="cursor: default;" dojoAttachEvent="onClick:previousSlide">&lt;</span>
-		<select dojoAttachEvent="onClick:gotoSlideByEvent" dojoAttachPoint="select">
-			<option dojoAttachPoint="option">Title</option>
-		</select>
-		<span unselectable="on" style="cursor: default;" dojoAttachEvent="onClick:nextSlide">&gt;</span>
-	</div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ShowSlide.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ShowSlide.css
deleted file mode 100644
index 6e55c82..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ShowSlide.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.dojoShowSlideTitle {
-	height: 100px;
-	background: #369;
-}
-.dojoShowSlideTitle h1 {
-	margin-top: 0;
-	line-height: 100px;
-	margin-left: 30px;
-}
-.dojoShowSlideBody {
-	margin: 15px;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ShowSlide.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ShowSlide.html
deleted file mode 100644
index 5a49586..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ShowSlide.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<div class="dojoShowSlide">
-	<div class="dojoShowSlideTitle">
-		<h1 dojoAttachPoint="htmlTitle">Title</h1>
-	</div>
-	<div class="dojoShowSlideBody" dojoAttachPoint="containerNode"></div>
-</div>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SlideShow.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SlideShow.css
deleted file mode 100644
index 02e97cd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SlideShow.css
+++ /dev/null
@@ -1,9 +0,0 @@
-.slideShowImg {
-	position: absolute;
-	left: 0px;
-	top: 0px; 
-	border: 2px solid #4d4d4d;
-	padding: 0px;
-	margin: 0px;
-}
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SlideShow.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SlideShow.html
deleted file mode 100644
index 8865214..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SlideShow.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<div style="position: relative; padding: 3px;">
-		<div>
-			<input type="button" value="pause" 
-				dojoAttachPoint="startStopButton"
-				dojoAttachEvent="onClick: togglePaused;">
-		</div>
-		<div style="position: relative; width: ${this.width}; height: ${this.height};"
-			dojoAttachPoint="imagesContainer"
-			dojoAttachEvent="onClick: togglePaused;">
-			<img dojoAttachPoint="img1" class="slideShowImg" 
-				style="z-index: 1; width: ${this.width}; height: ${this.height};"  />
-			<img dojoAttachPoint="img2" class="slideShowImg" 
-				style="z-index: 0; width: ${this.width}; height: ${this.height};" />
-		</div>	
-</div>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Slider.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Slider.css
deleted file mode 100644
index 7407aac..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Slider.css
+++ /dev/null
@@ -1,61 +0,0 @@
-.sliderMain {
-  border: 0px !important;
-  border-spacing: 0px !important;
-  line-height: 0px !important;
-  padding: 0px !important;
-  display: -moz-inline-table !important;
-  display: inline !important;
-  -moz-user-focus: normal !important;
-}
-
-.sliderComponent {
-  border: 0px;
-  padding: 0px;
-  margin: 0px;
-}
-
-.sliderHandle { 
-  top: 0px;
-  left: 0px;
-  z-index: 1000;
-  position: absolute !important;
-}
-
-.sliderOutsetButton { 
-  border-style: outset;
-  border-width: 0px 1px 1px 0px;
-  border-color: black;
-}
-
-.sliderInsetButton { 
-  border-style: inset;
-  border-width: 1px 0px 0px 1px;
-  border-color: black;
-}
-
-.sliderButtonY {
-  margin: 0px;
-  padding: 0px;
-  z-index: 900;
-}
-
-.sliderButtonX {
-  margin: 0px;
-  padding: 0px;
-  z-index: 900;
-}
-
-.sliderBackground { 
-  z-index: 0;
-  display: block !important;
-  position: relative !important;
-}
-
-.sliderProgressBackground { 
-  z-index: 800;
-  position: absolute !important;
-  clip: rect(0px,0px,0px,0px);
-}
-
-.sliderBackgroundSizeOnly { 
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Slider.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Slider.html
deleted file mode 100644
index c3823fd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Slider.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<table _="weird end tag formatting is to prevent whitespace from becoming &nbsp;" 
-	class="sliderMain" 
-	dojoAttachPoint="focusNode" 
-	dojoAttachEvent="onmousedown:_setFocus; onkey:_handleKeyEvents; onkeyup:_buttonReleased; onmouseup:_buttonReleased; onmousewheel:_mouseWheeled;"
-	tabindex="0" cols=3 cellpadding=0 cellspacing=0 style="">
-	<tr valign=middle align=center>
-		<td class="sliderComponent" colspan=3 dojoAttachPoint=topBorderNode style=""
-			><img class="sliderOutsetButton sliderButtonY"
-				dojoAttachPoint=topButtonNode 
-				dojoAttachEvent="onmousedown:_topButtonPressed; onmousemove:_discardEvent; ondblclick:_topButtonDoubleClicked;"
-				src="${this.topButtonSrc}" 
-				style="${this.buttonStyleY}"
-		></td>
-	</tr>
-	<tr valign=middle align=center>
-		<td class="sliderComponent" dojoAttachPoint=leftBorderNode style=""
-			><img class="sliderOutsetButton sliderButtonX"
-				dojoAttachPoint=leftButtonNode
-				dojoAttachEvent="onmousedown:_leftButtonPressed; onmousemove:_discardEvent; ondblclick:_leftButtonDoubleClicked;"
-				src="${this.leftButtonSrc}" 
-				style="${this.buttonStyleX}"
-		></td>
-		<td dojoAttachPoint=constrainingContainerNode 
-			class="sliderComponent sliderBackground"
-			style="${this.backgroundStyle}"
-			><img src="${this.handleSrc}" 
-				class=sliderHandle
-				dojoAttachPoint=sliderHandleNode
-				style="${this.handleStyle}"
-			><img src="${this.progressBackgroundSrc}"
-				class="sliderBackgroundSizeOnly sliderProgressBackground"
-				dojoAttachPoint=progressBackgroundNode
-				style="${this.backgroundSize}"
-			><img src="${this.backgroundSrc}" 
-				class=sliderBackgroundSizeOnly
-				dojoAttachPoint=sliderBackgroundNode
-				style="${this.backgroundSize}"
-		></td>
-		<td class="sliderComponent" dojoAttachPoint=rightBorderNode style=""
-			><img class="sliderOutsetButton sliderButtonX"
-				dojoAttachPoint=rightButtonNode
-				dojoAttachEvent="onmousedown:_rightButtonPressed; onmousemove:_discardEvent; ondblclick:_rightButtonDoubleClicked;"
-				src="${this.rightButtonSrc}" 
-				style="${this.buttonStyleX}"
-		></td>
-	</tr>
-	<tr valign=middle align=center>
-		<td class="sliderComponent" colspan=3 dojoAttachPoint=bottomBorderNode style=""
-			><img class="sliderOutsetButton sliderButtonY"
-				dojoAttachPoint=bottomButtonNode 
-				dojoAttachEvent="onmousedown:_bottomButtonPressed; onmousemove:_discardEvent; ondblclick:_bottomButtonDoubleClicked;"
-				src="${this.bottomButtonSrc}" 
-				style="${this.buttonStyleY}"
-		></td>
-	</tr>
-</table>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SliderHorizontal.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SliderHorizontal.html
deleted file mode 100644
index 0b6da69..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SliderHorizontal.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div class="sliderMainHorizontal">
-    <div class="sliderHandleHorizontal" dojoAttachPoint="sliderHandle"></div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SliderVertical.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SliderVertical.html
deleted file mode 100644
index d077d33..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SliderVertical.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div class="sliderMainVertical">
-    <div class="sliderHandleVertical" dojoAttachPoint="sliderHandle"></div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Spinner.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Spinner.css
deleted file mode 100644
index 7c22315..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Spinner.css
+++ /dev/null
@@ -1,34 +0,0 @@
-/* inline the table holding the <input> and buttons (method varies by browser) */
-.ie .dojoSpinner, .safari .dojoSpinner {
-	display: inline;
-}
-
-.moz .dojoSpinner {
-	display: -moz-inline-box;
-}
-
-.opera .dojoSpinner {
-	display: inline-table;
-}
-
-/* generic stuff for the table */
-.dojoSpinner td {
-	padding:0px;
-	margin:0px;
-	vertical-align: middle;
-}
-table.dojoSpinner {
-	border:0px;
-	border-spacing:0px;
-	line-height:0px;
-	padding:0px;
-	margin: 0px;
-	vertical-align: middle;
-}
-
-/* the buttons */
-.dojoSpinner img {
-	display: block;
-	border-width:0px 1px 1px 0px;
-	border-style:outset;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Spinner.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Spinner.html
deleted file mode 100644
index c8b2e73..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Spinner.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<span _="weird end tag formatting is to prevent whitespace from becoming &nbsp;"
-	style='float:${this.htmlfloat};'
-	><table cellpadding=0 cellspacing=0 class="dojoSpinner">
-		<tr>
-			<td
-				><input
-					dojoAttachPoint='textbox' type='${this.type}'
-					dojoAttachEvent='onblur;onfocus;onkey:_handleKeyEvents;onKeyUp:_onSpinnerKeyUp;onresize:_resize'
-					id='${this.widgetId}' name='${this.name}' size='${this.size}' maxlength='${this.maxlength}'
-					value='${this.value}' class='${this.className}' autocomplete="off"
-			></td>
-			<td
-				><img dojoAttachPoint="upArrowNode"
-					dojoAttachEvent="onDblClick: _upArrowDoubleClicked;  onMouseDown: _upArrowPressed; onMouseUp: _arrowReleased; onMouseOut: _arrowReleased; onMouseMove: _discardEvent;"
-					src="${this.incrementSrc}" style="width: ${this.buttonSize.width}px; height: ${this.buttonSize.height}px;"
-				><img dojoAttachPoint="downArrowNode"
-					dojoAttachEvent="onDblClick: _downArrowDoubleClicked;  onMouseDown: _downArrowPressed; onMouseUp: _arrowReleased; onMouseOut: _arrowReleased; onMouseMove: _discardEvent;"
-					src="${this.decrementSrc}" style="width: ${this.buttonSize.width}px; height: ${this.buttonSize.height}px;"
-			></td>
-		</tr>
-	</table
-	><span dojoAttachPoint='invalidSpan' class='${this.invalidClass}'>${this.messages.invalidMessage}</span
-	><span dojoAttachPoint='missingSpan' class='${this.missingClass}'>${this.messages.missingMessage}</span
-	><span dojoAttachPoint='rangeSpan' class='${this.rangeClass}'>${this.messages.rangeMessage}</span
-></span>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SplitContainer.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SplitContainer.css
deleted file mode 100644
index 61814c2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/SplitContainer.css
+++ /dev/null
@@ -1,40 +0,0 @@
-.dojoSplitContainer{
-	position: relative;
-	overflow: hidden;
-	display: block;
-}
-
-.dojoSplitPane{
-	position: absolute;
-}
-
-.dojoSplitContainerSizerH,
-.dojoSplitContainerSizerV {
-	font-size: 1px;
-	cursor: move;
-	cursor: w-resize;
-	background-color: ThreeDFace;
-	border: 1px solid;
-	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
-	margin: 0;
-}
-
-.dojoSplitContainerSizerV {
-	cursor: n-resize;
-}
-
-.dojoSplitContainerVirtualSizerH,
-.dojoSplitContainerVirtualSizerV {
-	font-size: 1px;
-	cursor: move;
-	cursor: w-resize;
-	background-color: ThreeDShadow;
-	-moz-opacity: 0.5;
-	opacity: 0.5;
-	filter: Alpha(Opacity=50);
-	margin: 0;
-}
-
-.dojoSplitContainerVirtualSizerV {
-	cursor: n-resize;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TabContainer.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TabContainer.css
deleted file mode 100644
index 57cf0bd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TabContainer.css
+++ /dev/null
@@ -1,163 +0,0 @@
-.dojoTabContainer {
-	position : relative;
-}
-
-.dojoTabPaneWrapper {
-	border : 1px solid #6290d2;
-	_zoom: 1; /* force IE6 layout mode so top border doesnt disappear */
-	display: block;
-	clear: both;
-	overflow: hidden;
-}
-
-.dojoTabLabels-top {
-	position : relative;
-	top : 0px;
-	left : 0px;
-	overflow : visible;
-	margin-bottom : -1px;
-	width : 100%;
-	z-index: 2;	/* so the bottom of the tab label will cover up the border of dojoTabPaneWrapper */
-}
-
-.dojoTabNoLayout.dojoTabLabels-top .dojoTab {
-	margin-bottom: -1px;
-	_margin-bottom: 0px; /* IE filter so top border lines up correctly */
-}
-
-.dojoTab {
-	position : relative;
-	float : left;
-	padding-left : 9px;
-	border-bottom : 1px solid #6290d2;
-	background : url(images/tab_left.gif) no-repeat left top;
-	cursor: pointer;
-	white-space: nowrap;
-	z-index: 3;
-}
-
-.dojoTab div {
-	display : block;
-	padding : 4px 15px 4px 6px;
-	background : url(images/tab_top_right.gif) no-repeat right top;
-	color : #333;
-	font-size : 90%;
-}
-
-.dojoTab .close {
-	display : inline-block;
-	height : 12px;
-	width : 12px;
-	padding : 0 12px 0 0;
-	margin : 0 -10px 0 10px;
-	cursor : default;
-	font-size: small;
-}
-
-.dojoTab .closeImage {
-	background : url(images/tab_close.gif) no-repeat right top;
-}
-
-.dojoTab .closeHover {
-	background-image : url(images/tab_close_h.gif);
-}
-
-.dojoTab.current {
-	padding-bottom : 1px;
-	border-bottom : 0;
-	background-position : 0 -150px;
-}
-
-.dojoTab.current div {
-	padding-bottom : 5px;
-	margin-bottom : -1px;
-	background-position : 100% -150px;
-}
-
-/* bottom tabs */
-
-.dojoTabLabels-bottom {
-	position : relative;
-	bottom : 0px;
-	left : 0px;
-	overflow : visible;
-	margin-top : -1px;
-	width : 100%;
-	z-index: 2;
-}
-
-.dojoTabNoLayout.dojoTabLabels-bottom {
-	position : relative;
-}
-
-.dojoTabLabels-bottom .dojoTab {
-	border-top :  1px solid #6290d2;
-	border-bottom : 0;
-	background : url(images/tab_bot_left.gif) no-repeat left bottom;
-}
-
-.dojoTabLabels-bottom .dojoTab div {
-	background : url(images/tab_bot_right.gif) no-repeat right bottom;
-}
-
-.dojoTabLabels-bottom .dojoTab.current {
-	border-top : 0;
-	background : url(images/tab_bot_left_curr.gif) no-repeat left bottom;
-}
-
-.dojoTabLabels-bottom .dojoTab.current div {
-	padding-top : 4px;
-	background : url(images/tab_bot_right_curr.gif) no-repeat right bottom;
-}
-
-/* right-h tabs */
-
-.dojoTabLabels-right-h {
-	overflow : visible;
-	margin-left : -1px;
-	z-index: 2;
-}
-
-.dojoTabLabels-right-h .dojoTab {
-	padding-left : 0;
-	border-left :  1px solid #6290d2;
-	border-bottom : 0;
-	background : url(images/tab_bot_right.gif) no-repeat right bottom;
-	float : none;
-}
-
-.dojoTabLabels-right-h .dojoTab div {
-	padding : 4px 15px 4px 15px;
-}
-
-.dojoTabLabels-right-h .dojoTab.current {
-	border-left :  0;
-	border-bottom :  1px solid #6290d2;
-}
-
-/* left-h tabs */
-
-.dojoTabLabels-left-h {
-	overflow : visible;
-	margin-right : -1px;
-	z-index: 2;
-}
-
-.dojoTabLabels-left-h .dojoTab {
-	border-right :  1px solid #6290d2;
-	border-bottom : 0;
-	float : none;
-	background : url(images/tab_top_left.gif) no-repeat left top;
-}
-
-.dojoTabLabels-left-h .dojoTab.current {
-	border-right : 0;
-	border-bottom :  1px solid #6290d2;
-	padding-bottom : 0;
-	background : url(images/tab_top_left.gif) no-repeat 0 -150px;
-}
-
-.dojoTabLabels-left-h .dojoTab div {
-	background : 0;
-	border-bottom :  1px solid #6290d2;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TabContainer.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TabContainer.html
deleted file mode 100644
index 8963232..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TabContainer.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div id="${this.widgetId}" class="dojoTabContainer">
-	<div dojoAttachPoint="tablistNode"></div>
-	<div class="dojoTabPaneWrapper" dojoAttachPoint="containerNode" dojoAttachEvent="onKey" waiRole="tabpanel"></div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TabContainerA11y.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TabContainerA11y.css
deleted file mode 100644
index e186d02..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TabContainerA11y.css
+++ /dev/null
@@ -1,175 +0,0 @@
-.dojoTabContainer {
-	position : relative;
-}
-
-.dojoTabPaneWrapper {
-	position : relative;
-	border : 1px solid #6290d2;
-	clear: both;
-	_zoom: 1; /* force IE6 layout mode so top border doesnt disappear */
-}
-
-.dojoTabLabels-top {
-	position : absolute;
-	top : 0px;
-	left : 0px;
-	overflow : visible;
-	margin-bottom : -1px;
-	width : 100%;
-	z-index: 2;	/* so the bottom of the tab label will cover up the border of dojoTabPaneWrapper */
-}
-
-.dojoTabNoLayout.dojoTabLabels-top {
-	position : relative;
-}
-
-.dojoTabNoLayout.dojoTabLabels-top .dojoTab {
-	margin-bottom: -1px;
-	_margin-bottom: 0px; /* IE filter so top border lines up correctly */
-}
-
-.dojoTab {
-	position : relative;
-	float : left;
-	padding-left : 9px;
-	border-bottom : 1px solid #6290d2;
-	cursor: pointer;
-	white-space: nowrap;
-	z-index: 3;
-}
-
-.dojoTab div {
-	display : block;
-	padding : 4px 15px 4px 6px;
-	color : #333;
-	font-size : 90%;
-}
-
-.dojoTabPanePaneClose {
-	position : absolute;
-	bottom : 0px;
-	right : 6px;
-	height : 12px;
-	width : 12px;
-	font-size : small;
-}
-.dojoTabPanePaneCloseImage {
-}
-
-.dojoTabPanePaneCloseHover {
-}
-
-.dojoTabClose {
-	display : inline-block;
-	height : 12px;
-	width : 12px;
-	padding : 0 12px 0 0;
-	margin : 0 -10px 0 10px;
-	cursor : default;
-	font-size: small;
-}
-
-.dojoTabCloseImage {
-}
-
-.dojoTabCloseHover {
-}
-
-.dojoTab.current {
-	padding-bottom : 1px;
-	border-bottom : 0;
-	background-position : 0 -150px;
-}
-
-.dojoTab.current div {
-	padding-bottom : 5px;
-	margin-bottom : -1px;
-	background-position : 100% -150px;
-}
-
-/* bottom tabs */
-
-.dojoTabLabels-bottom {
-	position : absolute;
-	bottom : 0px;
-	left : 0px;
-	overflow : visible;
-	margin-top : -1px;
-	width : 100%;
-	z-index: 2;
-}
-
-.dojoTabNoLayout.dojoTabLabels-bottom {
-	position : relative;
-}
-
-.dojoTabLabels-bottom .dojoTab {
-	border-top :  1px solid #6290d2;
-	border-bottom : 0;
-}
-
-.dojoTabLabels-bottom .dojoTab div {
-}
-
-.dojoTabLabels-bottom .dojoTab.current {
-	border-top : 0;
-}
-
-.dojoTabLabels-bottom .dojoTab.current div {
-	padding-top : 4px;
-}
-
-/* right-h tabs */
-
-.dojoTabLabels-right-h {
-	position : absolute;
-	top : 0px;
-	right : 0px;
-	overflow : visible;
-	margin-left : -1px;
-	z-index: 2;
-}
-
-.dojoTabLabels-right-h .dojoTab {
-	padding-left : 0;
-	border-left :  1px solid #6290d2;
-	border-bottom : 0;
-	float : none;
-}
-
-.dojoTabLabels-right-h .dojoTab div {
-	padding : 4px 15px 4px 15px;
-}
-
-.dojoTabLabels-right-h .dojoTab.current {
-	border-left :  0;
-	border-bottom :  1px solid #6290d2;
-}
-
-/* left-h tabs */
-
-.dojoTabLabels-left-h {
-	position : absolute;
-	top : 0px;
-	left : 0px;
-	overflow : visible;
-	margin-right : -1px;
-	z-index: 2;
-}
-
-.dojoTabLabels-left-h .dojoTab {
-	border-right :  1px solid #6290d2;
-	border-bottom : 0;
-	float : none;
-}
-
-.dojoTabLabels-left-h .dojoTab.current {
-	border-right : 0;
-	border-bottom :  1px solid #6290d2;
-	padding-bottom : 0;
-}
-
-.dojoTabLabels-left-h .dojoTab div {
-	background : 0;
-	border-bottom :  1px solid #6290d2;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TaskBar.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TaskBar.css
deleted file mode 100644
index 5f55a7c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TaskBar.css
+++ /dev/null
@@ -1,29 +0,0 @@
-.dojoTaskBarItem {
-	display: inline-block;
-	background-color: ThreeDFace;
-	border: outset 2px;
-	margin-right: 5px;
-	cursor: pointer;
-	height: 35px;
-	width: 100px;
-	font-size: 10pt;
-	white-space: nowrap;
-	text-align: center;
-	float: left;
-	overflow: hidden;
-}
-
-.dojoTaskBarItem img {
-	vertical-align: middle;
-	margin-right: 5px;
-	margin-left: 5px;	
-	height: 32px;
-	width: 32px;
-}
-
-.dojoTaskBarItem a {
-	 color: black;
-	text-decoration: none;
-}
-
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TaskBarItemTemplate.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TaskBarItemTemplate.html
deleted file mode 100644
index aeb19d6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TaskBarItemTemplate.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<div class="dojoTaskBarItem" dojoAttachEvent="onClick">
-</div>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Textbox.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Textbox.html
deleted file mode 100644
index 04eb341..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Textbox.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<span style='float:${this.htmlfloat};'>
-	<input dojoAttachPoint='textbox' dojoAttachEvent='onblur;onfocus'
-		id='${this.widgetId}' name='${this.name}'
-		class='${this.className}' type='${this.type}' >
-</span>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TimePicker.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TimePicker.css
deleted file mode 100644
index 3da5c39..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TimePicker.css
+++ /dev/null
@@ -1,179 +0,0 @@
-/*Time Picker */
-.timePickerContainer {
-	width:122px;
-	font-family:Tahoma, Myriad, Helvetica, Arial, Verdana, sans-serif;
-	font-size:16px;
-}
-
-.timeContainer {
-	border-collapse:collapse;
-	border-spacing:0;
-}
-
-.timeContainer thead {
-	color:#293a4b;
-	font-size:0.9em;
-	font-weight:700;
-}
-
-.timeContainer thead td {
-	padding:0.25em;
-	font-size:0.80em;
-	border-bottom:1px solid #6782A8;
-}
-
-.timeCorner {
-	width:10px;
-}
-
-.cornerTopLeft {
-	background: url("images/dpCurveTL.png") top left no-repeat;
-}
-
-.cornerTopRight {
-	background: url("images/dpCurveTR.png") top right no-repeat;
-}
-
-.timeLabelContainer {
-	background: url("images/dpMonthBg.png") top left repeat-x;
-}
-
-.hours, .minutes, .timeBorder {
-	background: #7591bc url("images/dpBg.gif") top left repeat-x;
-
-}
-
-.hours td, .minutes td {
-	padding:0.2em;
-	text-align:center;
-	font-size:0.7em;
-	font-weight:bold;
-	cursor:pointer;
-	cursor:hand;
-	color:#fff;
-}
-
-.minutes {
-	border-left:1px solid #f5d1db;
-}
-
-.hours {
-	border-right:1px solid #6782A8;
-}
-
-.hourSelector {
-	border-right:1px solid #6782A8;
-	padding:5px;
-	padding-right:10px;
-}
-
-.minutesSelector {
-	padding:5px;
-	border-left:1px solid #f5c7d4;
-	text-align:center;
-}
-
-.minutesHeading {
-	padding-left:9px !important;
-}
-
-.timeOptions {
-	background-color:#F9C9D7;
-}
-
-.timeContainer .cornerBottomLeft, .timeContainer .cornerBottomRight, .timeContainer .timeOptions {
-	border-top:1px solid #6782A8;
-}
-
-.timeContainer .cornerBottomLeft {
-	background: url("images/dpCurveBL.png") bottom left no-repeat !important;
-	width:9px !important;
-	padding:0;
-	margin:0;
-}
-
-.timeContainer .cornerBottomRight {
-	background: url("images/dpCurveBR.png") bottom right no-repeat !important;
-	width:9px !important;
-	padding:0;
-	margin:0;
-}
-
-.timeOptions {
-	color:#fff;
-	background:url("images/dpYearBg.png") top left repeat-x;
-
-}
-
-.selectedItem {
-	background-color:#fff;
-	color:#6782a8 !important;
-}
-
-.timeOptions .selectedItem {
-	color:#fff !important;
-	background-color:#9ec3fb !important;
-}
-
-.anyTimeContainer {
-	text-align:center;
-	font-weight:bold;
-	font-size:0.7em;
-	padding:0.1em;
-	cursor:pointer;
-	cursor:hand;
-	color:#fff !important;
-}
-
-.amPmContainer {
-	width:100%;
-}
-
-.amPmContainer td {
-	text-align:center;
-	font-size:0.7em;
-	font-weight:bold;
-	cursor:pointer;
-	cursor:hand;
-	color:#fff;
-}
-
-
-
-/*.timePickerContainer {
-	margin:1.75em 0 0.5em 0;
-	width:10em;
-	float:left;
-}
-
-.timeContainer {
-	border-collapse:collapse;
-	border-spacing:0;
-}
-
-.timeContainer thead td{
-	border-bottom:1px solid #e6e6e6;
-	padding:0 0.4em 0.2em 0.4em;
-}
-
-.timeContainer td {
-	font-size:0.9em;
-	padding:0 0.25em 0 0.25em;
-	text-align:left;
-	cursor:pointer;cursor:hand;
-}
-
-.timeContainer td.minutesHeading {
-	border-left:1px solid #e6e6e6;
-	border-right:1px solid #e6e6e6;	
-}
-
-.timeContainer .minutes {
-	border-left:1px solid #e6e6e6;
-	border-right:1px solid #e6e6e6;
-}
-
-.selectedItem {
-	background-color:#3a3a3a;
-	color:#ffffff;
-}*/
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TimePicker.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TimePicker.html
deleted file mode 100644
index 0b1e5a5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TimePicker.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<div class="timePickerContainer" dojoAttachPoint="timePickerContainerNode">
-	<table class="timeContainer" cellspacing="0" >
-		<thead>
-			<tr>
-				<td class="timeCorner cornerTopLeft" valign="top">&nbsp;</td>
-				<td class="timeLabelContainer hourSelector">${this.calendar.field-hour}</td>
-				<td class="timeLabelContainer minutesHeading">${this.calendar.field-minute}</td>
-				<td class="timeCorner cornerTopRight" valign="top">&nbsp;</td>
-			</tr>
-		</thead>
-		<tbody>
-			<tr>
-				<td valign="top" colspan="2" class="hours">
-					<table align="center">
-						<tbody dojoAttachPoint="hourContainerNode"  
-							dojoAttachEvent="onClick: onSetSelectedHour;">
-							<tr>
-								<td>12</td>
-								<td>6</td>
-							</tr>
-							<tr>
-								<td>1</td>
-								<td>7</td>
-							</tr>
-							<tr>
-								<td>2</td>
-								<td>8</td>
-							</tr>
-							<tr>
-								<td>3</td>
-								<td>9</td>
-							</tr>
-							<tr>
-								<td>4</td>
-								<td>10</td>
-							</tr>
-							<tr>
-								<td>5</td>
-								<td>11</td>
-							</tr>
-						</tbody>
-					</table>
-				</td>
-				<td valign="top" class="minutes" colspan="2">
-					<table align="center">
-						<tbody dojoAttachPoint="minuteContainerNode" 
-							dojoAttachEvent="onClick: onSetSelectedMinute;">
-							<tr>
-								<td>00</td>
-								<td>30</td>
-							</tr>
-							<tr>
-								<td>05</td>
-								<td>35</td>
-							</tr>
-							<tr>
-								<td>10</td>
-								<td>40</td>
-							</tr>
-							<tr>
-								<td>15</td>
-								<td>45</td>
-							</tr>
-							<tr>
-								<td>20</td>
-								<td>50</td>
-							</tr>
-							<tr>
-								<td>25</td>
-								<td>55</td>
-							</tr>
-						</tbody>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td class="cornerBottomLeft">&nbsp;</td>
-				<td valign="top" class="timeOptions">
-					<table class="amPmContainer">
-						<tbody dojoAttachPoint="amPmContainerNode" 
-							dojoAttachEvent="onClick: onSetSelectedAmPm;">
-							<tr>
-								<td id="am">${this.calendar.am}</td>
-								<td id="pm">${this.calendar.pm}</td>
-							</tr>
-						</tbody>
-					</table>
-				</td>
-				<td class="timeOptions">
-					<div dojoAttachPoint="anyTimeContainerNode" 
-						dojoAttachEvent="onClick: onSetSelectedAnyTime;" 
-						class="anyTimeContainer">${this.widgetStrings.any}</div>
-				</td>
-				<td class="cornerBottomRight">&nbsp;</td>
-			</tr>
-		</tbody>
-	</table>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TitlePane.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TitlePane.html
deleted file mode 100644
index 4d57fe5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TitlePane.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div dojoAttachPoint="domNode">
-<div dojoAttachPoint="labelNode" dojoAttachEvent="onclick: onLabelClick"></div>
-<div dojoAttachPoint="containerNode"></div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Toaster.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Toaster.css
deleted file mode 100644
index b768002..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Toaster.css
+++ /dev/null
@@ -1,42 +0,0 @@
-.dojoToasterClip {
-	position: absolute;
-	overflow: hidden;
-}
-
-.dojoToasterContainer {
-	display: block;
-	position: absolute;
-	width: 17.5em;
-	z-index: 5000;
-	margin: 0px;
-	font:0.75em Tahoma, Helvetica, Verdana, Arial;
-}
-
-.dojoToasterContent{
-	padding:1em;
-	padding-top:0.25em;
-	background:#73c74a;
-}
-
-.dojoToasterMessage{ 
-	color:#fff;
-}
-.dojoToasterWarning{ }
-.dojoToasterError,
-.dojoToasterFatal{
-	font-weight:bold;
-	color:#fff;
-}
-
-
-.dojoToasterWarning .dojoToasterContent{
-	padding:1em;
-	padding-top:0.25em;
-	background:#d4d943;
-} 
-
-.dojoToasterError .dojoToasterContent{
-	padding:1em;
-	padding-top:0.25em;
-	background:#c46600;
-} 
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Toolbar.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Toolbar.css
deleted file mode 100644
index b5fe8d5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Toolbar.css
+++ /dev/null
@@ -1,54 +0,0 @@
-.toolbarContainer {
-	border-bottom : 0;
-	background-color : #def;
-	color : ButtonText;
-	font : Menu;
-	background-image: url(images/toolbar-bg.gif);
-}
-
-.toolbar {
-	padding : 2px 4px;
-	min-height : 26px;
-	_height : 26px;
-}
-
-.toolbarItem {
-	float : left;
-	padding : 1px 2px;
-	margin : 0 2px 1px 0;
-	cursor : pointer;
-}
-
-.toolbarItem.selected, .toolbarItem.down {
-	margin : 1px 1px 0 1px;
-	padding : 0px 1px;
-	border : 1px solid #bbf;
-	background-color : #fafaff;
-}
-
-.toolbarButton img {
-	vertical-align : bottom;
-}
-
-.toolbarButton span {
-	line-height : 16px;
-	vertical-align : middle;
-}
-
-.toolbarButton.hover {
-	padding : 0px 1px;
-	border : 1px solid #99c;
-}
-
-.toolbarItem.disabled {
-	opacity : 0.3;
-	filter : alpha(opacity=30);
-	cursor : default;
-}
-
-.toolbarSeparator {
-	cursor : default;
-}
-
-.toolbarFlexibleSpace {
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TooltipTemplate.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TooltipTemplate.css
deleted file mode 100644
index 030be2a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TooltipTemplate.css
+++ /dev/null
@@ -1,10 +0,0 @@
-.dojoTooltip {
-	border: solid black 1px;
-	background: beige;
-	color: black;
-	position: absolute;
-	font-size: small;
-	padding: 2px 2px 2px 2px;
-	z-index: 10;
-	display: block;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Tree.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Tree.css
deleted file mode 100644
index 0af721d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Tree.css
+++ /dev/null
@@ -1,29 +0,0 @@
-.dojoTree {
-	font: caption;
-	font-size: 11px;
-	font-weight: normal;
-	overflow: auto;
-}
-
-.dojoTreeNodeLabel {
-	padding: 1px 2px;
-	color: WindowText;
-	cursor: default;
-}
-
-.dojoTreeNodeLabel:hover {
-	text-decoration: underline;
-}
-
-.dojoTreeNodeLabelSelected {
-	background-color: Highlight;
-	color: HighlightText;
-}
-
-.dojoTree div {
-	white-space: nowrap;
-}
-
-.dojoTree img {
-	vertical-align: middle;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeDisableWrap.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeDisableWrap.css
deleted file mode 100644
index b50dbdc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeDisableWrap.css
+++ /dev/null
@@ -1,9 +0,0 @@
-
-/* CSS for TreeDisableWrapExtension */
-
-.TreeDisableWrap {
-	white-space: nowrap;
-}
-.TreeIEDisableWrap {
-	width: expression( 5 + firstChild.offsetWidth );
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeDocIcon.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeDocIcon.css
deleted file mode 100644
index 603b992..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeDocIcon.css
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/* CSS for TreeDocIconExtension */
-
-
-/* long vertical line under docIcon, connecting w/ children */
-.TreeStateChildrenYes-ExpandOpen .TreeIconContent {
-    background-image : url('../templates/images/TreeV3/i_long.gif');
-    background-repeat : no-repeat;
-    background-position: 18px 9px;
-}
-
-/* close has higher priority */
-.TreeStateChildrenYes-ExpandClosed .TreeIconContent {
-    background-image : url();
-}
-
-/* higher priotity: same length and appear after background-definition */
-.TreeStateChildrenNo-ExpandLeaf .TreeIconContent {
-    background-image : url();
-}
-
-.TreeStateChildrenNo-ExpandClosed .TreeIconContent {
-    background-image : url();
-}
-
-.TreeStateChildrenNo-ExpandOpen .TreeIconContent {
-    background-image : url();
-}
-
-
-/* highest priority */
-.TreeIconDocument {
-    background-image: url('../templates/images/TreeV3/document.gif');
-}
-
-.TreeExpandOpen .TreeIconFolder {
-    background-image: url('../templates/images/TreeV3/open.gif');
-}
-
-.TreeExpandClosed .TreeIconFolder {
-    background-image: url('../templates/images/TreeV3/closed.gif');
-}
-
-/* generic class for docIcon */
-.TreeIcon {
-    width: 18px;
-    height: 18px;
-    float: left;
-    display: inline;
-    background-repeat : no-repeat;
-}
-
-div.TreeContent {
-    margin-left: 36px;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeEditor.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeEditor.css
deleted file mode 100644
index b8f09a6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeEditor.css
+++ /dev/null
@@ -1,4 +0,0 @@
-html, body {
-      background-color: #ffc;
-      color: black;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeV3.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeV3.css
deleted file mode 100644
index 6f15fbd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/TreeV3.css
+++ /dev/null
@@ -1,82 +0,0 @@
-/* indent for all tree children excepts root */
-.TreeNode {
-    background-image : url('../templates/images/TreeV3/i.gif');
-    background-position : top left;
-    background-repeat : repeat-y;
-    margin-left: 19px;
-    zoom: 1;
-}
-.TreeIsRoot {
-    margin-left: 0;
-}
- 
-/* left vertical line (grid) for all nodes */
-.TreeIsLast {
-    background-image: url('../templates/images/TreeV3/i_half.gif');
-    background-repeat : no-repeat;
-}
- 
-.TreeExpandOpen .TreeExpand {
-    background-image: url('../templates/images/TreeV3/expand_minus.gif');
-}
- 
-/* closed is higher priority than open */
-.TreeExpandClosed .TreeExpand {
-    background-image: url('../templates/images/TreeV3/expand_plus.gif');
-}
- 
-/* highest priority */
-.TreeExpandLeaf .TreeExpand {
-    background-image: url('../templates/images/TreeV3/expand_leaf.gif');
-}
-
-/* 
-should always override any expand setting, but do not touch children.
-if I add .TreeExpand .TreeExpandLoading same time and put it to top/bottom, then it will take precedence over +- for all descendants or always fail
-so I have to remove TreeExpand and process this one specifically
-*/
-
-.TreeExpandLoading   {
-    width: 18px;
-    height: 18px;
-    float: left;
-    display: inline;
-    background-repeat : no-repeat;
-    background-image: url('../templates/images/TreeV3/expand_loading.gif');
-}
- 
-.TreeContent {
-    min-height: 18px;
-    min-width: 18px;
-    margin-left:18px;
-    cursor: default;
-    /* can't make inline - multiline bugs */
-}
-
-.TreeIEContent {
-	height: 18px;
-}
- 
-.TreeExpand {
-    width: 18px;
-    height: 18px;
-    float: left;
-    display: inline;
-    background-repeat : no-repeat;
-}
- 
-/* same style as IE selection */
-.TreeNodeEmphasized {
-    background-color: Highlight;
-    color: HighlightText;
-}
- 
-.TreeContent .RichTextEditable, .TreeContent .RichTextEditable iframe {
-      background-color: #ffc;
-      color: black;
-}
-
-/* don't use :focus due to opera's lack of support on div's */
-.TreeLabelFocused {
-      outline: 1px invert dotted;
-}
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Validate.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Validate.css
deleted file mode 100644
index 77b0fe2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Validate.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.dojoValidateEmpty{
-	background-color: #00FFFF;
-}
-.dojoValidateValid{
-	background-color: #cfc;
-}
-.dojoValidateInvalid{
-	background-color: #fcc;
-}
-.dojoValidateRange{
-	background-color: #ccf;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ValidationTextbox.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ValidationTextbox.html
deleted file mode 100644
index 04adba9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/ValidationTextbox.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<span style='float:${this.htmlfloat};'>
-	<input dojoAttachPoint='textbox' type='${this.type}' dojoAttachEvent='onblur;onfocus;onkeyup'
-		id='${this.widgetId}' name='${this.name}' size='${this.size}' maxlength='${this.maxlength}'
-		class='${this.className}' style=''>
-	<span dojoAttachPoint='invalidSpan' class='${this.invalidClass}'>${this.messages.invalidMessage}</span>
-	<span dojoAttachPoint='missingSpan' class='${this.missingClass}'>${this.messages.missingMessage}</span>
-	<span dojoAttachPoint='rangeSpan' class='${this.rangeClass}'>${this.messages.rangeMessage}</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Wizard.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Wizard.css
deleted file mode 100644
index ff12ef9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Wizard.css
+++ /dev/null
@@ -1,72 +0,0 @@
-.WizardContainer {
-	background: #EEEEEE;
-	border: #798EC5 1px solid;
-	padding: 2px;
-}
-
-.WizardTitle {
-	color: #003366;
-	padding: 8px 5px 15px 2px;
-	font-weight: bold;
-	font-size: x-small;
-	font-style: normal;
-	font-family: Verdana, Arial, Helvetica;
-	text-align: left;
-}
-
-.WizardText {
-	color: #000033;
-	font-weight: normal;
-	font-size: xx-small;
-	font-family: Verdana, Arial, Helvetica;
-	padding: 2 50; text-align: justify;
-}
-
-.WizardLightText {
-	color: #666666;
-	font-weight: normal;
-	font-size: xx-small;
-	font-family: verdana, arial, helvetica;
-	padding: 2px 50px;
-	text-align: justify;
-}
-
-.WizardButtonHolder {
-	text-align: right;
-	padding: 10px 5px;
-}
-
-.WizardButton {
-	color: #ffffff;
-	background: #798EC5;
-	font-size: xx-small;
-	font-family: verdana, arial, helvetica, sans-serif;
-	border-right: #000000 1px solid;
-	border-bottom: #000000 1px solid;
-	border-left: #666666 1px solid;
-	border-top: #666666 1px solid;
-	padding-right: 4px;
-	padding-left: 4px;
-	text-decoration: none; height: 18px;
-}
-
-.WizardButton:hover {
-	cursor: pointer;
-}
-
-.WizardButtonDisabled {
-	color: #eeeeee;
-	background-color: #999999;
-	font-size: xx-small;
-	FONT-FAMILY: verdana, arial, helvetica, sans-serif;
-	border-right: #000000 1px solid;
-	border-bottom: #000000 1px solid;
-	border-left: #798EC5 1px solid;
-	border-top: #798EC5 1px solid;
-	padding-right: 4px;
-	padding-left: 4px;
-	text-decoration: none;
-	height: 18px;
-}
-
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Wizard.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Wizard.html
deleted file mode 100644
index b41460a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/Wizard.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<div class="WizardContainer" dojoAttachPoint="wizardNode">
-    <div class="WizardText" dojoAttachPoint="wizardPanelContainerNode">
-    </div>
-    <div class="WizardButtonHolder" dojoAttachPoint="wizardControlContainerNode">
-        <input class="WizardButton" type="button" dojoAttachPoint="previousButton"/>
-        <input class="WizardButton" type="button" dojoAttachPoint="nextButton"/>
-        <input class="WizardButton" type="button" dojoAttachPoint="doneButton" style="display:none"/>
-        <input class="WizardButton" type="button" dojoAttachPoint="cancelButton"/>
-    </div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/aggregate.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/aggregate.gif
deleted file mode 100644
index 7fe7052..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/aggregate.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/backcolor.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/backcolor.gif
deleted file mode 100644
index ef4d2fb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/backcolor.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/bg-fade.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/bg-fade.png
deleted file mode 100644
index 5d74aad..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/bg-fade.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/bold.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/bold.gif
deleted file mode 100644
index 738ec1a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/bold.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/cancel.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/cancel.gif
deleted file mode 100644
index 6bc9973..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/cancel.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/copy.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/copy.gif
deleted file mode 100644
index 4df29cc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/copy.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/createlink.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/createlink.gif
deleted file mode 100644
index c214076..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/createlink.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/cut.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/cut.gif
deleted file mode 100644
index 9bdbf4a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/cut.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/delete.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/delete.gif
deleted file mode 100644
index dee61c2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/delete.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/forecolor.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/forecolor.gif
deleted file mode 100644
index db60b27..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/forecolor.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/hilitecolor.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/hilitecolor.gif
deleted file mode 100644
index ef4d2fb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/hilitecolor.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/indent.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/indent.gif
deleted file mode 100644
index efd4dec..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/indent.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/inserthorizontalrule.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/inserthorizontalrule.gif
deleted file mode 100644
index 6115b55..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/inserthorizontalrule.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/insertimage.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/insertimage.gif
deleted file mode 100644
index 7f22be3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/insertimage.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/insertorderedlist.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/insertorderedlist.gif
deleted file mode 100644
index 6c2031a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/insertorderedlist.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/inserttable.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/inserttable.gif
deleted file mode 100644
index 93a77f5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/inserttable.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/insertunorderedlist.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/insertunorderedlist.gif
deleted file mode 100644
index c6007302..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/insertunorderedlist.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/italic.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/italic.gif
deleted file mode 100644
index 13ab00c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/italic.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifycenter.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifycenter.gif
deleted file mode 100644
index 39c93e1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifycenter.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifyfull.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifyfull.gif
deleted file mode 100644
index 9c9d859..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifyfull.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifyleft.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifyleft.gif
deleted file mode 100644
index dbb859e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifyleft.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifyright.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifyright.gif
deleted file mode 100644
index f156278..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/justifyright.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/left_to_right.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/left_to_right.gif
deleted file mode 100644
index 2cbac68..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/left_to_right.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_bullet_indent.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_bullet_indent.gif
deleted file mode 100644
index 56306cf..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_bullet_indent.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_bullet_outdent.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_bullet_outdent.gif
deleted file mode 100644
index 7350525..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_bullet_outdent.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_num_indent.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_num_indent.gif
deleted file mode 100644
index f73741a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_num_indent.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_num_outdent.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_num_outdent.gif
deleted file mode 100644
index 7ee50e5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/list_num_outdent.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/outdent.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/outdent.gif
deleted file mode 100644
index 40cb465..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/outdent.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/paste.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/paste.gif
deleted file mode 100644
index f236cbe..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/paste.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/redo.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/redo.gif
deleted file mode 100644
index aff00e7..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/redo.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/removeformat.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/removeformat.gif
deleted file mode 100644
index 30bb618..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/removeformat.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/right_to_left.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/right_to_left.gif
deleted file mode 100644
index 0662cd2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/right_to_left.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/save.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/save.gif
deleted file mode 100644
index 61dc4e1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/save.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/sep.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/sep.gif
deleted file mode 100644
index 60b65f6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/sep.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/space.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/space.gif
deleted file mode 100644
index 5bfd67a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/space.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/strikethrough.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/strikethrough.gif
deleted file mode 100644
index e941ffd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/strikethrough.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/subscript.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/subscript.gif
deleted file mode 100644
index 173d340..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/subscript.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/superscript.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/superscript.gif
deleted file mode 100644
index 9eb24da..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/superscript.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/underline.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/underline.gif
deleted file mode 100644
index 8323876..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/underline.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/undo.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/undo.gif
deleted file mode 100644
index 382eba0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/undo.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/wikiword.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/wikiword.gif
deleted file mode 100644
index 24741d1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/buttons/wikiword.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/check.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/check.gif
deleted file mode 100644
index fcebdf4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/check.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/decrementMonth.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/decrementMonth.gif
deleted file mode 100644
index da5d869..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/decrementMonth.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/decrementWeek.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/decrementWeek.gif
deleted file mode 100644
index 1f2b8a0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/decrementWeek.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/grabCorner.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/grabCorner.gif
deleted file mode 100644
index 31453c4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/grabCorner.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/Tree.css b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/Tree.css
deleted file mode 100644
index 5719563..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/Tree.css
+++ /dev/null
@@ -1,36 +0,0 @@
-
-.dojoTree {
-	font: caption;
-	font-size: 11px;
-	font-weight: normal;
-	overflow: auto;
-}
-
-
-.dojoTreeNodeLabelTitle {
-	padding-left: 2px;
-	color: WindowText;
-}
-
-.dojoTreeNodeLabel {
-	cursor:hand;
-	cursor:pointer;
-}
-
-.dojoTreeNodeLabelTitle:hover {
-	text-decoration: underline;
-}
-
-.dojoTreeNodeLabelSelected {
-	background-color: Highlight;
-	color: HighlightText;
-}
-
-.dojoTree div {
-	white-space: nowrap;
-}
-
-.dojoTree img, .dojoTreeNodeLabel img {
-	vertical-align: middle;
-}
-
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/blank.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/blank.gif
deleted file mode 100644
index d90ab95..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/blank.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/closed.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/closed.gif
deleted file mode 100644
index 820bd19..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/closed.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/document.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/document.gif
deleted file mode 100644
index 3d57afb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/document.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/minus.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/minus.gif
deleted file mode 100644
index f2b5863..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/minus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/plus.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/plus.gif
deleted file mode 100644
index bf60022..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/plus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/transparent.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/transparent.gif
deleted file mode 100644
index 350cc27..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_blank.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_blank.gif
deleted file mode 100644
index 80848bb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_blank.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_child.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_child.gif
deleted file mode 100644
index a9da6db..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_child.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_expand_minus.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_expand_minus.gif
deleted file mode 100644
index 0e8f8d9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_expand_minus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_expand_plus.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_expand_plus.gif
deleted file mode 100644
index 00f90ae..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_expand_plus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_c.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_c.gif
deleted file mode 100644
index a377cea..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_c.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_l.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_l.gif
deleted file mode 100644
index 480ae8d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_l.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_p.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_p.gif
deleted file mode 100644
index 3d06760..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_p.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_t.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_t.gif
deleted file mode 100644
index 029c588..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_t.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_v.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_v.gif
deleted file mode 100644
index dd3aa4f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_v.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_x.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_x.gif
deleted file mode 100644
index c49ee9c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_x.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_y.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_y.gif
deleted file mode 100644
index 1f3efbc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_y.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_z.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_z.gif
deleted file mode 100644
index 3b23b35..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_grid_z.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_loading.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_loading.gif
deleted file mode 100644
index 7b9860f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_loading.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_loading.jpg b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_loading.jpg
deleted file mode 100644
index 7ec914b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/Tree/treenode_loading.jpg
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/closed.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/closed.gif
deleted file mode 100644
index b84d644..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/closed.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/document.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/document.gif
deleted file mode 100644
index 64f5f8b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/document.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_leaf.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_leaf.gif
deleted file mode 100644
index 1a09ebe..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_leaf.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_loading.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_loading.gif
deleted file mode 100644
index b6d53b9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_loading.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_minus.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_minus.gif
deleted file mode 100644
index c8b6cf2..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_minus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_plus.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_plus.gif
deleted file mode 100644
index f42a84b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/expand_plus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i.gif
deleted file mode 100644
index 1336a9b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i_bhalf.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i_bhalf.gif
deleted file mode 100644
index c29f8aa..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i_bhalf.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i_half.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i_half.gif
deleted file mode 100644
index add395b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i_half.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i_long.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i_long.gif
deleted file mode 100644
index 9732787..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/i_long.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/l.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/l.gif
deleted file mode 100644
index 8d7c5ca..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/l.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/minus.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/minus.gif
deleted file mode 100644
index dbeb239..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/minus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/open.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/open.gif
deleted file mode 100644
index 12cf930..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/open.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/plus.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/plus.gif
deleted file mode 100644
index d49ebd1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/plus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/t.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/t.gif
deleted file mode 100644
index e772201..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/t.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/x.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/x.gif
deleted file mode 100644
index 1a09ebe..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/TreeV3/x.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/bar.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/bar.gif
deleted file mode 100644
index 921bd59..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/bar.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/bdYearBg.1.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/bdYearBg.1.gif
deleted file mode 100644
index e69de29..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/bdYearBg.1.gif
+++ /dev/null
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/bdYearBg.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/bdYearBg.gif
deleted file mode 100644
index 95ff97a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/bdYearBg.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/blank.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/blank.gif
deleted file mode 100644
index e565824..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/blank.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/clock.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/clock.png
deleted file mode 100644
index ecd5336..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/clock.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/combo_box_arrow.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/combo_box_arrow.png
deleted file mode 100644
index d294f55..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/combo_box_arrow.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dateIcon.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dateIcon.gif
deleted file mode 100644
index dc1f31c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dateIcon.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/decrementMonth.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/decrementMonth.gif
deleted file mode 100644
index b370e82..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/decrementMonth.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/decrementMonth.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/decrementMonth.png
deleted file mode 100644
index d98016a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/decrementMonth.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpBg.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpBg.gif
deleted file mode 100644
index 3eaccf3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpBg.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveBL.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveBL.png
deleted file mode 100644
index aecfe80..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveBL.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveBR.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveBR.png
deleted file mode 100644
index b5cc369..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveBR.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveTL.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveTL.png
deleted file mode 100644
index 6d966b4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveTL.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveTR.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveTR.png
deleted file mode 100644
index 9cfb0aa..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpCurveTR.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpHorizLine.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpHorizLine.gif
deleted file mode 100644
index 67bf681..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpHorizLine.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpHorizLineFoot.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpHorizLineFoot.gif
deleted file mode 100644
index 4499aeb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpHorizLineFoot.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpMonthBg.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpMonthBg.gif
deleted file mode 100644
index 0348a91..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpMonthBg.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpMonthBg.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpMonthBg.png
deleted file mode 100644
index 6063812..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpMonthBg.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpMonthBg2.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpMonthBg2.png
deleted file mode 100644
index 6063812..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpMonthBg2.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpVertLine.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpVertLine.gif
deleted file mode 100644
index dd3af2f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpVertLine.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpYearBg.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpYearBg.gif
deleted file mode 100644
index 95ff97a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpYearBg.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpYearBg.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpYearBg.png
deleted file mode 100644
index e41f750..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dpYearBg.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dropdownButtonsArrow-disabled.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dropdownButtonsArrow-disabled.gif
deleted file mode 100644
index a164440..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dropdownButtonsArrow-disabled.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dropdownButtonsArrow.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dropdownButtonsArrow.gif
deleted file mode 100644
index 5264181..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/dropdownButtonsArrow.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneClose.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneClose.gif
deleted file mode 100644
index 4e7658e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneClose.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneMaximize.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneMaximize.gif
deleted file mode 100644
index d75cec0..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneMaximize.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneMinimize.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneMinimize.gif
deleted file mode 100644
index 79e0b32..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneMinimize.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneRestore.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneRestore.gif
deleted file mode 100644
index dd204f5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/floatingPaneRestore.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/h-bar.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/h-bar.gif
deleted file mode 100644
index 4ebbdf3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/h-bar.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/hue.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/hue.png
deleted file mode 100644
index f84ec73..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/hue.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/incrementMonth.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/incrementMonth.gif
deleted file mode 100644
index 9710e3b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/incrementMonth.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/incrementMonth.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/incrementMonth.png
deleted file mode 100644
index 5d39913..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/incrementMonth.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/no.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/no.gif
deleted file mode 100644
index 9021a14..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/no.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/no.svg b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/no.svg
deleted file mode 100644
index d53549b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/no.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 12.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 51448)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_svg "http://www.w3.org/2000/svg">
-	<!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
-]>
-<svg  version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="15.433" height="15.433"
-	 viewBox="0 0 15.433 15.433" overflow="visible" enable-background="new 0 0 15.433 15.433" xml:space="preserve">
-<circle fill="none" stroke="#D02026" stroke-width="2" cx="7.716" cy="7.716" r="6.716"/>
-<line fill="none" stroke="#D02026" stroke-width="2" x1="3.02" y1="12.352" x2="12.639" y2="2.732"/>
-</svg>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/scBackground.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/scBackground.gif
deleted file mode 100644
index 22d1289..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/scBackground.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-bg-progress-vert.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-bg-progress-vert.gif
deleted file mode 100644
index 3e86c88..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-bg-progress-vert.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-bg-vert.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-bg-vert.gif
deleted file mode 100644
index 189f4a6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-bg-vert.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-bg.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-bg.gif
deleted file mode 100644
index f98175d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-bg.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-button-horz.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-button-horz.png
deleted file mode 100644
index 628cb1d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-button-horz.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-button-vert.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-button-vert.png
deleted file mode 100644
index db90bfe..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-button-vert.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-button.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-button.png
deleted file mode 100644
index c2dfa1b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider-button.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider.gif
deleted file mode 100644
index a4cf32e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_down_arrow.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_down_arrow.png
deleted file mode 100644
index 68ff366..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_down_arrow.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_left_arrow.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_left_arrow.png
deleted file mode 100644
index 9b6a63d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_left_arrow.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_right_arrow.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_right_arrow.png
deleted file mode 100644
index 3231ffd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_right_arrow.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_up_arrow.png b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_up_arrow.png
deleted file mode 100644
index dfa197e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/slider_up_arrow.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaAccordionOff.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaAccordionOff.gif
deleted file mode 100644
index d9b2ebe..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaAccordionOff.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaAccordionSelected.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaAccordionSelected.gif
deleted file mode 100644
index c1cd5a1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaAccordionSelected.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaActive-c.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaActive-c.gif
deleted file mode 100644
index d469cc1..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaActive-c.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaActive-l.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaActive-l.gif
deleted file mode 100644
index f548db5..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaActive-l.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaActive-r.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaActive-r.gif
deleted file mode 100644
index 9a3d5ee..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaActive-r.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaBarBg.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaBarBg.gif
deleted file mode 100644
index 54a7b56..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaBarBg.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaButton-c.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaButton-c.gif
deleted file mode 100644
index f5e0825..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaButton-c.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaButton-l.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaButton-l.gif
deleted file mode 100644
index de07dc6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaButton-l.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaButton-r.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaButton-r.gif
deleted file mode 100644
index 1f9cb3e..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaButton-r.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaDisabled-c.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaDisabled-c.gif
deleted file mode 100644
index 13db43a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaDisabled-c.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaDisabled-l.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaDisabled-l.gif
deleted file mode 100644
index 870ad56..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaDisabled-l.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaDisabled-r.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaDisabled-r.gif
deleted file mode 100644
index 9fb3f52..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaDisabled-r.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaMenuBg.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaMenuBg.gif
deleted file mode 100644
index 596a95b..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaMenuBg.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaPressed-c.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaPressed-c.gif
deleted file mode 100644
index cde16c4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaPressed-c.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaPressed-l.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaPressed-l.gif
deleted file mode 100644
index fc59bbf..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaPressed-l.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaPressed-r.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaPressed-r.gif
deleted file mode 100644
index cbdee28..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/soriaPressed-r.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/spinnerDecrement.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/spinnerDecrement.gif
deleted file mode 100644
index 80c9fd3..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/spinnerDecrement.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/spinnerIncrement.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/spinnerIncrement.gif
deleted file mode 100644
index 2fc237d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/spinnerIncrement.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/submenu_disabled.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/submenu_disabled.gif
deleted file mode 100644
index 100f45f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/submenu_disabled.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/submenu_off.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/submenu_off.gif
deleted file mode 100644
index fa759b6..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/submenu_off.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/submenu_on.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/submenu_on.gif
deleted file mode 100644
index bfa57c4..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/submenu_on.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_left.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_left.gif
deleted file mode 100644
index 0dfab38..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_left.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_left_curr.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_left_curr.gif
deleted file mode 100644
index 9279d24..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_left_curr.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_right.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_right.gif
deleted file mode 100644
index 6bc0795..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_right.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_right_curr.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_right_curr.gif
deleted file mode 100644
index a661efd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_bot_right_curr.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_close.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_close.gif
deleted file mode 100644
index 24b0cb8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_close.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_close_h.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_close_h.gif
deleted file mode 100644
index a71004d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_close_h.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_left.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_left.gif
deleted file mode 100644
index d14099f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_left.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_left_r.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_left_r.gif
deleted file mode 100644
index 0dfab38..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_left_r.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_left_r_curr.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_left_r_curr.gif
deleted file mode 100644
index 9279d24..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_left_r_curr.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_right.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_right.gif
deleted file mode 100644
index fcab384..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_right.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_right_r.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_right_r.gif
deleted file mode 100644
index 6bc0795..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_right_r.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_right_r_curr.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_right_r_curr.gif
deleted file mode 100644
index a661efd..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_right_r_curr.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_top_left.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_top_left.gif
deleted file mode 100644
index 6cffcad..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_top_left.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_top_right.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_top_right.gif
deleted file mode 100644
index fcab384..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/tab_top_right.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/timeIcon.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/timeIcon.gif
deleted file mode 100644
index 3911a66..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/timeIcon.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/toolbar-bg.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/toolbar-bg.gif
deleted file mode 100644
index 6bccd43..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/toolbar-bg.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/transparent.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/transparent.gif
deleted file mode 100644
index 350cc27..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_blank.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_blank.gif
deleted file mode 100644
index 80848bb..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_blank.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_child.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_child.gif
deleted file mode 100644
index a9da6db..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_child.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_expand_minus.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_expand_minus.gif
deleted file mode 100644
index 0e8f8d9..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_expand_minus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_expand_plus.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_expand_plus.gif
deleted file mode 100644
index 00f90ae..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_expand_plus.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_c.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_c.gif
deleted file mode 100644
index a377cea..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_c.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_l.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_l.gif
deleted file mode 100644
index 480ae8d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_l.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_p.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_p.gif
deleted file mode 100644
index 3d06760..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_p.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_t.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_t.gif
deleted file mode 100644
index 029c588..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_t.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_v.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_v.gif
deleted file mode 100644
index dd3aa4f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_v.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_x.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_x.gif
deleted file mode 100644
index c49ee9c..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_x.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_y.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_y.gif
deleted file mode 100644
index 1f3efbc..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_y.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_z.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_z.gif
deleted file mode 100644
index 3b23b35..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_grid_z.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_node.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_node.gif
deleted file mode 100644
index 7ac7e19..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/treenode_node.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/verticalbar.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/verticalbar.gif
deleted file mode 100644
index e2a44ab..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/verticalbar.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/whiteDownArrow.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/whiteDownArrow.gif
deleted file mode 100644
index c83982f..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/images/whiteDownArrow.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/incrementMonth.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/incrementMonth.gif
deleted file mode 100644
index 42fe20d..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/incrementMonth.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/incrementWeek.gif b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/incrementWeek.gif
deleted file mode 100644
index 76f1b25..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/incrementWeek.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/richtextframe.html b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/richtextframe.html
deleted file mode 100644
index ce30620..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/templates/richtextframe.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!-- <?xml version="1.0" encoding="UTF-8"?> -->
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
-	"DTD/xhtml1-strict.dtd">
-<html>
-	<head>
-		<title></title>
-		<script type="text/javascript">
-			function init(){
-				document.designMode = 'on';
-				try{
-					parentPageDomain = document.location.href.split('#')[1];
-					if(parentPageDomain){
-						document.domain = parentPageDomain;
-					}
-				}catch(e){ }
-			}
-			window.onload = init;
-		</script>
-	</head>
-	<body>
-		<br />
-	</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/validate.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/validate.js
deleted file mode 100644
index 377a35a..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/validate.js
+++ /dev/null
@@ -1,2 +0,0 @@
-dojo.provide("dojo.widget.validate");
-dojo.deprecated("dojo.widget.validate","use one of the specific widgets in dojo.widget.<name>Textbox instead","0.5");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/vml/Chart.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/vml/Chart.js
deleted file mode 100644
index ca8cf32..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/widget/vml/Chart.js
+++ /dev/null
@@ -1,514 +0,0 @@
-dojo.provide("dojo.widget.vml.Chart");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.Chart");
-dojo.require("dojo.math");
-dojo.require("dojo.html.layout");
-dojo.require("dojo.gfx.color");
-dojo.widget.defineWidget("dojo.widget.vml.Chart",[dojo.widget.HtmlWidget,dojo.widget.Chart],function(){
-this.templatePath=null;
-this.templateCssPath=null;
-this._isInitialize=false;
-this.hasData=false;
-this.vectorNode=null;
-this.plotArea=null;
-this.dataGroup=null;
-this.axisGroup=null;
-this.properties={height:0,width:0,defaultWidth:600,defaultHeight:400,plotType:null,padding:{top:10,bottom:2,left:60,right:30},axes:{x:{plotAt:0,label:"",unitLabel:"",unitType:Number,nUnitsToShow:10,range:{min:0,max:200}},y:{plotAt:0,label:"",unitLabel:"",unitType:Number,nUnitsToShow:10,range:{min:0,max:200}}}};
-},{parseProperties:function(_1){
-var _2=false;
-var _3=false;
-if(_1.getAttribute("width")){
-this.properties.width=_1.getAttribute("width");
-}
-if(_1.getAttribute("height")){
-this.properties.height=_1.getAttribute("height");
-}
-if(_1.getAttribute("plotType")){
-this.properties.plotType=_1.getAttribute("plotType");
-}
-if(_1.getAttribute("padding")){
-if(_1.getAttribute("padding").indexOf(",")>-1){
-var p=_1.getAttribute("padding").split(",");
-}else{
-var p=_1.getAttribute("padding").split(" ");
-}
-if(p.length==1){
-var _5=parseFloat(p[0]);
-this.properties.padding.top=_5;
-this.properties.padding.right=_5;
-this.properties.padding.bottom=_5;
-this.properties.padding.left=_5;
-}else{
-if(p.length==2){
-var _6=parseFloat(p[0]);
-var _7=parseFloat(p[1]);
-this.properties.padding.top=_6;
-this.properties.padding.right=_7;
-this.properties.padding.bottom=_6;
-this.properties.padding.left=_7;
-}else{
-if(p.length==4){
-this.properties.padding.top=parseFloat(p[0]);
-this.properties.padding.right=parseFloat(p[1]);
-this.properties.padding.bottom=parseFloat(p[2]);
-this.properties.padding.left=parseFloat(p[3]);
-}
-}
-}
-}
-if(_1.getAttribute("rangeX")){
-var p=_1.getAttribute("rangeX");
-if(p.indexOf(",")>-1){
-p=p.split(",");
-}else{
-p=p.split(" ");
-}
-this.properties.axes.x.range.min=parseFloat(p[0]);
-this.properties.axes.x.range.max=parseFloat(p[1]);
-_2=true;
-}
-if(_1.getAttribute("rangeY")){
-var p=_1.getAttribute("rangeY");
-if(p.indexOf(",")>-1){
-p=p.split(",");
-}else{
-p=p.split(" ");
-}
-this.properties.axes.y.range.min=parseFloat(p[0]);
-this.properties.axes.y.range.max=parseFloat(p[1]);
-_3=true;
-}
-return {rangeX:_2,rangeY:_3};
-},setAxesPlot:function(_8){
-if(_8.getAttribute("axisAt")){
-var p=_8.getAttribute("axisAt");
-if(p.indexOf(",")>-1){
-p=p.split(",");
-}else{
-p=p.split(" ");
-}
-if(!isNaN(parseFloat(p[0]))){
-this.properties.axes.x.plotAt=parseFloat(p[0]);
-}else{
-if(p[0].toLowerCase()=="ymin"){
-this.properties.axes.x.plotAt=this.properties.axes.y.range.min;
-}else{
-if(p[0].toLowerCase()=="ymax"){
-this.properties.axes.x.plotAt=this.properties.axes.y.range.max;
-}
-}
-}
-if(!isNaN(parseFloat(p[1]))){
-this.properties.axes.y.plotAt=parseFloat(p[1]);
-}else{
-if(p[1].toLowerCase()=="xmin"){
-this.properties.axes.y.plotAt=this.properties.axes.x.range.min;
-}else{
-if(p[1].toLowerCase()=="xmax"){
-this.properties.axes.y.plotAt=this.properties.axes.x.range.max;
-}
-}
-}
-}else{
-this.properties.axes.x.plotAt=this.properties.axes.y.range.min;
-this.properties.axes.y.plotAt=this.properties.axes.x.range.min;
-}
-},drawVectorNode:function(){
-if(this.vectorNode){
-this.destroy();
-}
-this.vectorNode=document.createElement("div");
-this.vectorNode.style.width=this.properties.width+"px";
-this.vectorNode.style.height=this.properties.height+"px";
-this.vectorNode.style.position="relative";
-this.domNode.appendChild(this.vectorNode);
-},drawPlotArea:function(){
-var _a=this.properties.width-this.properties.padding.left-this.properties.padding.right;
-var _b=this.properties.height-this.properties.padding.top-this.properties.padding.bottom;
-if(this.plotArea){
-this.plotArea.parentNode.removeChild(this.plotArea);
-this.plotArea=null;
-}
-this.plotArea=document.createElement("div");
-this.plotArea.style.position="absolute";
-this.plotArea.style.backgroundColor="#fff";
-this.plotArea.style.top=(this.properties.padding.top)-2+"px";
-this.plotArea.style.left=(this.properties.padding.left-1)+"px";
-this.plotArea.style.width=_a+"px";
-this.plotArea.style.height=_b+"px";
-this.plotArea.style.clip="rect(0 "+_a+" "+_b+" 0)";
-this.vectorNode.appendChild(this.plotArea);
-},drawDataGroup:function(){
-var _c=this.properties.width-this.properties.padding.left-this.properties.padding.right;
-var _d=this.properties.height-this.properties.padding.top-this.properties.padding.bottom;
-if(this.dataGroup){
-this.dataGroup.parentNode.removeChild(this.dataGroup);
-this.dataGroup=null;
-}
-this.dataGroup=document.createElement("div");
-this.dataGroup.style.position="absolute";
-this.dataGroup.setAttribute("title","Data Group");
-this.dataGroup.style.top="0px";
-this.dataGroup.style.left="0px";
-this.dataGroup.style.width=_c+"px";
-this.dataGroup.style.height=_d+"px";
-this.plotArea.appendChild(this.dataGroup);
-},drawAxes:function(){
-var _e=this.properties.width-this.properties.padding.left-this.properties.padding.right;
-var _f=this.properties.height-this.properties.padding.top-this.properties.padding.bottom;
-if(this.axisGroup){
-this.axisGroup.parentNode.removeChild(this.axisGroup);
-this.axisGroup=null;
-}
-this.axisGroup=document.createElement("div");
-this.axisGroup.style.position="absolute";
-this.axisGroup.setAttribute("title","Axis Group");
-this.axisGroup.style.top="0px";
-this.axisGroup.style.left="0px";
-this.axisGroup.style.width=_e+"px";
-this.axisGroup.style.height=_f+"px";
-this.plotArea.appendChild(this.axisGroup);
-var _10=1;
-var _11=document.createElement("v:line");
-var y=dojo.widget.vml.Chart.Plotter.getY(this.properties.axes.x.plotAt,this);
-_11.setAttribute("from","0px,"+y+"px");
-_11.setAttribute("to",_e+"px,"+y+"px");
-_11.style.position="absolute";
-_11.style.top="0px";
-_11.style.left="0px";
-_11.style.antialias="false";
-_11.setAttribute("strokecolor","#666");
-_11.setAttribute("strokeweight",_10*2+"px");
-this.axisGroup.appendChild(_11);
-var _11=document.createElement("v:line");
-var x=dojo.widget.vml.Chart.Plotter.getX(this.properties.axes.y.plotAt,this);
-_11.setAttribute("from",x+"px,0px");
-_11.setAttribute("to",x+"px,"+_f+"px");
-_11.style.position="absolute";
-_11.style.top="0px";
-_11.style.left="0px";
-_11.style.antialias="false";
-_11.setAttribute("strokecolor","#666");
-_11.setAttribute("strokeweight",_10*2+"px");
-this.axisGroup.appendChild(_11);
-var _14=10;
-var t=document.createElement("div");
-t.style.position="absolute";
-t.style.top=(this.properties.height-this.properties.padding.bottom)+"px";
-t.style.left=this.properties.padding.left+"px";
-t.style.fontFamily="sans-serif";
-t.style.fontSize=_14+"px";
-t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.x.range.min),2);
-this.vectorNode.appendChild(t);
-t=document.createElement("div");
-t.style.position="absolute";
-t.style.top=(this.properties.height-this.properties.padding.bottom)+"px";
-t.style.left=(this.properties.width-this.properties.padding.right-_14)+"px";
-t.style.fontFamily="sans-serif";
-t.style.fontSize=_14+"px";
-t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.x.range.max),2);
-this.vectorNode.appendChild(t);
-t=document.createElement("div");
-t.style.position="absolute";
-t.style.top=(_14/2)+"px";
-t.style.left="0px";
-t.style.width=this.properties.padding.left+"px";
-t.style.textAlign="right";
-t.style.paddingRight="4px";
-t.style.fontFamily="sans-serif";
-t.style.fontSize=_14+"px";
-t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.y.range.max),2);
-this.vectorNode.appendChild(t);
-t=document.createElement("div");
-t.style.position="absolute";
-t.style.top=(this.properties.height-this.properties.padding.bottom-_14)+"px";
-t.style.left="0px";
-t.style.width=this.properties.padding.left+"px";
-t.style.textAlign="right";
-t.style.paddingRight="4px";
-t.style.fontFamily="sans-serif";
-t.style.fontSize=_14+"px";
-t.innerHTML=dojo.math.round(parseFloat(this.properties.axes.y.range.min),2);
-this.vectorNode.appendChild(t);
-},init:function(){
-if(!this.properties.width||!this.properties.height){
-var box=dojo.html.getContentBox(this.domNode);
-if(!this.properties.width){
-this.properties.width=(box.width<32)?this.properties.defaultWidth:box.width;
-}
-if(!this.properties.height){
-this.properties.height=(box.height<32)?this.properties.defaultHeight:box.height;
-}
-}
-this.drawVectorNode();
-this.drawPlotArea();
-this.drawDataGroup();
-this.drawAxes();
-this.assignColors();
-this._isInitialized=true;
-},destroy:function(){
-while(this.domNode.childNodes.length>0){
-this.domNode.removeChild(this.domNode.childNodes[0]);
-}
-this.vectorNode=this.plotArea=this.dataGroup=this.axisGroup=null;
-},render:function(){
-if(this.dataGroup){
-while(this.dataGroup.childNodes.length>0){
-this.dataGroup.removeChild(this.dataGroup.childNodes[0]);
-}
-}else{
-this.init();
-}
-for(var i=0;i<this.series.length;i++){
-dojo.widget.vml.Chart.Plotter.plot(this.series[i],this);
-}
-},postCreate:function(){
-var _18=this.domNode.getElementsByTagName("table")[0];
-if(_18){
-var _19=this.parseProperties(_18);
-var _1a=false;
-var _1b=false;
-var _1c=this.parseData(_18);
-if(!_1a){
-this.properties.axes.x.range={min:_1c.x.min,max:_1c.x.max};
-}
-if(!_1b){
-this.properties.axes.y.range={min:_1c.y.min,max:_1c.y.max};
-}
-this.setAxesPlot(_18);
-this.domNode.removeChild(_18);
-}
-if(this.series.length>0){
-this.render();
-}
-}});
-dojo.widget.vml.Chart.Plotter=new function(){
-var _1d=this;
-var _1e={};
-var _1f=dojo.widget.Chart.PlotTypes;
-this.getX=function(_20,_21){
-var v=parseFloat(_20);
-var min=_21.properties.axes.x.range.min;
-var max=_21.properties.axes.x.range.max;
-var _25=0-min;
-min+=_25;
-max+=_25;
-v+=_25;
-var _26=0;
-var _27=_21.properties.width-_21.properties.padding.left-_21.properties.padding.right;
-var x=(v*((_27-_26)/max))+_26;
-return x;
-};
-this.getY=function(_29,_2a){
-var v=parseFloat(_29);
-var max=_2a.properties.axes.y.range.max;
-var min=_2a.properties.axes.y.range.min;
-var _2e=0;
-if(min<0){
-_2e+=Math.abs(min);
-}
-min+=_2e;
-max+=_2e;
-v+=_2e;
-var _2f=_2a.properties.height-_2a.properties.padding.top-_2a.properties.padding.bottom;
-var _30=0;
-var y=(((_2f-_30)/(max-min))*(max-v))+_30;
-return y;
-};
-this.addPlotter=function(_32,_33){
-_1e[_32]=_33;
-};
-this.plot=function(_34,_35){
-if(_34.values.length==0){
-return;
-}
-if(_34.plotType&&_1e[_34.plotType]){
-return _1e[_34.plotType](_34,_35);
-}else{
-if(_35.plotType&&_1e[_35.plotType]){
-return _1e[_35.plotType](_34,_35);
-}
-}
-};
-_1e["bar"]=function(_36,_37){
-var _38=1;
-var _39=0;
-var ys=[];
-var _3b=_1d.getY(_37.properties.axes.x.plotAt,_37);
-var yA=_3b;
-for(var i=0;i<_36.values.length;i++){
-var x=_1d.getX(_36.values[i].x,_37);
-var w;
-if(i==_36.values.length-1){
-w=_39;
-}else{
-w=_1d.getX(_36.values[i+1].x,_37)-x-_38;
-_39=w;
-}
-x-=(w/2);
-var y=_1d.getY(_36.values[i].value,_37);
-var h=Math.abs(yA-y);
-if(parseFloat(_36.values[i].value)<_37.properties.axes.x.plotAt){
-y=yA;
-}
-var bar=document.createElement("v:rect");
-bar.style.position="absolute";
-bar.style.top=y+"px";
-bar.style.left=x+"px";
-bar.style.width=w+"px";
-bar.style.height=h+"px";
-bar.setAttribute("fillColor",_36.color);
-bar.setAttribute("stroked","false");
-bar.style.antialias="false";
-bar.setAttribute("title",_36.label+" ("+i+"): "+_36.values[i].value);
-var _43=document.createElement("v:fill");
-_43.setAttribute("opacity","0.9");
-bar.appendChild(_43);
-_37.dataGroup.appendChild(bar);
-}
-};
-_1e["line"]=function(_44,_45){
-var _46=1.5;
-var _47=document.createElement("v:shape");
-_47.setAttribute("strokeweight","2px");
-_47.setAttribute("strokecolor",_44.color);
-_47.setAttribute("fillcolor","none");
-_47.setAttribute("filled","false");
-_47.setAttribute("title",_44.label);
-_47.setAttribute("coordsize",_45.properties.width+","+_45.properties.height);
-_47.style.position="absolute";
-_47.style.top="0px";
-_47.style.left="0px";
-_47.style.width=_45.properties.width+"px";
-_47.style.height=_45.properties.height+"px";
-var _48=document.createElement("v:stroke");
-_48.setAttribute("opacity","0.85");
-_47.appendChild(_48);
-var _49=[];
-for(var i=0;i<_44.values.length;i++){
-var x=Math.round(_1d.getX(_44.values[i].x,_45));
-var y=Math.round(_1d.getY(_44.values[i].value,_45));
-if(i==0){
-_49.push("m");
-_49.push(x+","+y);
-}else{
-var _4d=Math.round(_1d.getX(_44.values[i-1].x,_45));
-var _4e=Math.round(_1d.getY(_44.values[i-1].value,_45));
-var dx=x-_4d;
-var dy=y-_4e;
-_49.push("c");
-var cx=Math.round((x-(_46-1)*(dx/_46)));
-_49.push(cx+","+_4e);
-cx=Math.round((x-(dx/_46)));
-_49.push(cx+","+y);
-_49.push(x+","+y);
-}
-}
-_47.setAttribute("path",_49.join(" ")+" e");
-_45.dataGroup.appendChild(_47);
-};
-_1e["area"]=function(_52,_53){
-var _54=1.5;
-var _55=document.createElement("v:shape");
-_55.setAttribute("strokeweight","1px");
-_55.setAttribute("strokecolor",_52.color);
-_55.setAttribute("fillcolor",_52.color);
-_55.setAttribute("title",_52.label);
-_55.setAttribute("coordsize",_53.properties.width+","+_53.properties.height);
-_55.style.position="absolute";
-_55.style.top="0px";
-_55.style.left="0px";
-_55.style.width=_53.properties.width+"px";
-_55.style.height=_53.properties.height+"px";
-var _56=document.createElement("v:stroke");
-_56.setAttribute("opacity","0.8");
-_55.appendChild(_56);
-var _57=document.createElement("v:fill");
-_57.setAttribute("opacity","0.4");
-_55.appendChild(_57);
-var _58=[];
-for(var i=0;i<_52.values.length;i++){
-var x=Math.round(_1d.getX(_52.values[i].x,_53));
-var y=Math.round(_1d.getY(_52.values[i].value,_53));
-if(i==0){
-_58.push("m");
-_58.push(x+","+y);
-}else{
-var _5c=Math.round(_1d.getX(_52.values[i-1].x,_53));
-var _5d=Math.round(_1d.getY(_52.values[i-1].value,_53));
-var dx=x-_5c;
-var dy=y-_5d;
-_58.push("c");
-var cx=Math.round((x-(_54-1)*(dx/_54)));
-_58.push(cx+","+_5d);
-cx=Math.round((x-(dx/_54)));
-_58.push(cx+","+y);
-_58.push(x+","+y);
-}
-}
-_58.push("l");
-_58.push(x+","+_1d.getY(0,_53));
-_58.push("l");
-_58.push(_1d.getX(0,_53)+","+_1d.getY(0,_53));
-_55.setAttribute("path",_58.join(" ")+" x e");
-_53.dataGroup.appendChild(_55);
-};
-_1e["scatter"]=function(_61,_62){
-var r=6;
-for(var i=0;i<_61.values.length;i++){
-var x=_1d.getX(_61.values[i].x,_62);
-var y=_1d.getY(_61.values[i].value,_62);
-var mod=r/2;
-var _68=document.createElement("v:rect");
-_68.setAttribute("fillcolor",_61.color);
-_68.setAttribute("strokecolor",_61.color);
-_68.setAttribute("title",_61.label+": "+_61.values[i].value);
-_68.style.position="absolute";
-_68.style.rotation="45";
-_68.style.top=(y-mod)+"px";
-_68.style.left=(x-mod)+"px";
-_68.style.width=r+"px";
-_68.style.height=r+"px";
-var _69=document.createElement("v:fill");
-_69.setAttribute("opacity","0.6");
-_68.appendChild(_69);
-_62.dataGroup.appendChild(_68);
-}
-};
-_1e["bubble"]=function(_6a,_6b){
-var _6c=1;
-var min=_6b.properties.axes.x.range.min;
-var max=_6b.properties.axes.x.range.max;
-var _6f=0-min;
-min+=_6f;
-max+=_6f;
-var _70=_6b.properties.padding.left;
-var _71=_6b.properties.width-_6b.properties.padding.right;
-var _72=(max-min)/(_71-_70)*25;
-for(var i=0;i<_6a.values.length;i++){
-var _74=_6a.values[i].size;
-if(isNaN(parseFloat(_74))){
-_74=_6c;
-}
-var _75=(parseFloat(_74)*_72)/2;
-var _76=_75*2;
-var cx=_1d.getX(_6a.values[i].x,_6b);
-var cy=_1d.getY(_6a.values[i].value,_6b);
-var top=cy-_75;
-var _7a=cx-_75;
-var _7b=document.createElement("v:oval");
-_7b.setAttribute("fillcolor",_6a.color);
-_7b.setAttribute("title",_6a.label+": "+_6a.values[i].value+" ("+_74+")");
-_7b.setAttribute("stroked","false");
-_7b.style.position="absolute";
-_7b.style.top=top+"px";
-_7b.style.left=_7a+"px";
-_7b.style.width=_76+"px";
-_7b.style.height=_76+"px";
-var _7c=document.createElement("v:fill");
-_7c.setAttribute("opacity","0.8");
-_7b.appendChild(_7c);
-_6b.dataGroup.appendChild(_7b);
-}
-};
-}();
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/xml/Parse.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/xml/Parse.js
deleted file mode 100644
index f2a9439..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/xml/Parse.js
+++ /dev/null
@@ -1,152 +0,0 @@
-dojo.provide("dojo.xml.Parse");
-dojo.require("dojo.dom");
-dojo.xml.Parse=function(){
-var _1=((dojo.render.html.capable)&&(dojo.render.html.ie));
-function getTagName(_2){
-try{
-return _2.tagName.toLowerCase();
-}
-catch(e){
-return "";
-}
-}
-function getDojoTagName(_3){
-var _4=getTagName(_3);
-if(!_4){
-return "";
-}
-if((dojo.widget)&&(dojo.widget.tags[_4])){
-return _4;
-}
-var p=_4.indexOf(":");
-if(p>=0){
-return _4;
-}
-if(_4.substr(0,5)=="dojo:"){
-return _4;
-}
-if(dojo.render.html.capable&&dojo.render.html.ie&&_3.scopeName!="HTML"){
-return _3.scopeName.toLowerCase()+":"+_4;
-}
-if(_4.substr(0,4)=="dojo"){
-return "dojo:"+_4.substring(4);
-}
-var _6=_3.getAttribute("dojoType")||_3.getAttribute("dojotype");
-if(_6){
-if(_6.indexOf(":")<0){
-_6="dojo:"+_6;
-}
-return _6.toLowerCase();
-}
-_6=_3.getAttributeNS&&_3.getAttributeNS(dojo.dom.dojoml,"type");
-if(_6){
-return "dojo:"+_6.toLowerCase();
-}
-try{
-_6=_3.getAttribute("dojo:type");
-}
-catch(e){
-}
-if(_6){
-return "dojo:"+_6.toLowerCase();
-}
-if((dj_global["djConfig"])&&(!djConfig["ignoreClassNames"])){
-var _7=_3.className||_3.getAttribute("class");
-if((_7)&&(_7.indexOf)&&(_7.indexOf("dojo-")!=-1)){
-var _8=_7.split(" ");
-for(var x=0,c=_8.length;x<c;x++){
-if(_8[x].slice(0,5)=="dojo-"){
-return "dojo:"+_8[x].substr(5).toLowerCase();
-}
-}
-}
-}
-return "";
-}
-this.parseElement=function(_b,_c,_d,_e){
-var _f=getTagName(_b);
-if(_1&&_f.indexOf("/")==0){
-return null;
-}
-try{
-var _10=_b.getAttribute("parseWidgets");
-if(_10&&_10.toLowerCase()=="false"){
-return {};
-}
-}
-catch(e){
-}
-var _11=true;
-if(_d){
-var _12=getDojoTagName(_b);
-_f=_12||_f;
-_11=Boolean(_12);
-}
-var _13={};
-_13[_f]=[];
-var pos=_f.indexOf(":");
-if(pos>0){
-var ns=_f.substring(0,pos);
-_13["ns"]=ns;
-if((dojo.ns)&&(!dojo.ns.allow(ns))){
-_11=false;
-}
-}
-if(_11){
-var _16=this.parseAttributes(_b);
-for(var _10 in _16){
-if((!_13[_f][_10])||(typeof _13[_f][_10]!="array")){
-_13[_f][_10]=[];
-}
-_13[_f][_10].push(_16[_10]);
-}
-_13[_f].nodeRef=_b;
-_13.tagName=_f;
-_13.index=_e||0;
-}
-var _17=0;
-for(var i=0;i<_b.childNodes.length;i++){
-var tcn=_b.childNodes.item(i);
-switch(tcn.nodeType){
-case dojo.dom.ELEMENT_NODE:
-var ctn=getDojoTagName(tcn)||getTagName(tcn);
-if(!_13[ctn]){
-_13[ctn]=[];
-}
-_13[ctn].push(this.parseElement(tcn,true,_d,_17));
-if((tcn.childNodes.length==1)&&(tcn.childNodes.item(0).nodeType==dojo.dom.TEXT_NODE)){
-_13[ctn][_13[ctn].length-1].value=tcn.childNodes.item(0).nodeValue;
-}
-_17++;
-break;
-case dojo.dom.TEXT_NODE:
-if(_b.childNodes.length==1){
-_13[_f].push({value:_b.childNodes.item(0).nodeValue});
-}
-break;
-default:
-break;
-}
-}
-return _13;
-};
-this.parseAttributes=function(_1b){
-var _1c={};
-var _1d=_1b.attributes;
-var _1e,i=0;
-while((_1e=_1d[i++])){
-if(_1){
-if(!_1e){
-continue;
-}
-if((typeof _1e=="object")&&(typeof _1e.nodeValue=="undefined")||(_1e.nodeValue==null)||(_1e.nodeValue=="")){
-continue;
-}
-}
-var nn=_1e.nodeName.split(":");
-nn=(nn.length==2)?nn[1]:_1e.nodeName;
-_1c[nn]={value:_1e.nodeValue};
-}
-return _1c;
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/xml/XslTransform.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/xml/XslTransform.js
deleted file mode 100644
index 6c1b626..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/xml/XslTransform.js
+++ /dev/null
@@ -1,146 +0,0 @@
-dojo.provide("dojo.xml.XslTransform");
-dojo.xml.XslTransform=function(_1){
-dojo.debug("XslTransform is supported by Internet Explorer and Mozilla, with limited support in Opera 9 (no document function support).");
-var _2=dojo.render.html.ie;
-var _3=["Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","Msxml2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XMLDOM"];
-var _4=["Msxml2.FreeThreadedDOMDocument.5.0","MSXML2.FreeThreadedDOMDocument.4.0","MSXML2.FreeThreadedDOMDocument.3.0"];
-var _5=["Msxml2.XSLTemplate.5.0","Msxml2.XSLTemplate.4.0","MSXML2.XSLTemplate.3.0"];
-function getActiveXImpl(_6){
-for(var i=0;i<_6.length;i++){
-try{
-var _8=new ActiveXObject(_6[i]);
-if(_8){
-return _6[i];
-}
-}
-catch(e){
-}
-}
-dojo.raise("Could not find an ActiveX implementation in:\n\n "+_6);
-}
-if(_1==null||_1==undefined){
-dojo.raise("You must pass the URI String for the XSL file to be used!");
-return false;
-}
-var _9=null;
-var _a=null;
-if(_2){
-_9=new ActiveXObject(getActiveXImpl(_4));
-_9.async=false;
-}else{
-_a=new XSLTProcessor();
-_9=document.implementation.createDocument("","",null);
-_9.addEventListener("load",onXslLoad,false);
-}
-_9.load(_1);
-if(_2){
-var _b=new ActiveXObject(getActiveXImpl(_5));
-_b.stylesheet=_9;
-_a=_b.createProcessor();
-}
-function onXslLoad(){
-_a.importStylesheet(_9);
-}
-function getResultDom(_c,_d){
-if(_2){
-addIeParams(_d);
-var _e=getIeResultDom(_c);
-removeIeParams(_d);
-return _e;
-}else{
-return getMozillaResultDom(_c,_d);
-}
-}
-function addIeParams(_f){
-if(!_f){
-return;
-}
-for(var i=0;i<_f.length;i++){
-_a.addParameter(_f[i][0],_f[i][1]);
-}
-}
-function removeIeParams(_11){
-if(!_11){
-return;
-}
-for(var i=0;i<_11.length;i++){
-_a.addParameter(_11[i][0],"");
-}
-}
-function getIeResultDom(_13){
-_a.input=_13;
-var _14=new ActiveXObject(getActiveXImpl(_3));
-_14.async=false;
-_14.validateOnParse=false;
-_a.output=_14;
-_a.transform();
-if(_14.parseError.errorCode!=0){
-var err=_14.parseError;
-dojo.raise("err.errorCode: "+err.errorCode+"\n\nerr.reason: "+err.reason+"\n\nerr.url: "+err.url+"\n\nerr.srcText: "+err.srcText);
-}
-return _14;
-}
-function getIeResultStr(_16,_17){
-_a.input=_16;
-_a.transform();
-return _a.output;
-}
-function addMozillaParams(_18){
-if(!_18){
-return;
-}
-for(var i=0;i<_18.length;i++){
-_a.setParameter(null,_18[i][0],_18[i][1]);
-}
-}
-function getMozillaResultDom(_1a,_1b){
-addMozillaParams(_1b);
-var _1c=_a.transformToDocument(_1a);
-_a.clearParameters();
-return _1c;
-}
-function getMozillaResultStr(_1d,_1e,_1f){
-addMozillaParams(_1e);
-var _20=_a.transformToFragment(_1d,_1f);
-var _21=new XMLSerializer();
-_a.clearParameters();
-return _21.serializeToString(_20);
-}
-this.getResultString=function(_22,_23,_24){
-var _25=null;
-if(_2){
-addIeParams(_23);
-_25=getIeResultStr(_22,_23);
-removeIeParams(_23);
-}else{
-_25=getMozillaResultStr(_22,_23,_24);
-}
-return _25;
-};
-this.transformToContentPane=function(_26,_27,_28,_29){
-var _2a=this.getResultString(_26,_27,_29);
-_28.setContent(_2a);
-};
-this.transformToRegion=function(_2b,_2c,_2d,_2e){
-try{
-var _2f=this.getResultString(_2b,_2c,_2e);
-_2d.innerHTML=_2f;
-}
-catch(e){
-dojo.raise(e.message+"\n\n xsltUri: "+_1);
-}
-};
-this.transformToDocument=function(_30,_31){
-return getResultDom(_30,_31);
-};
-this.transformToWindow=function(_32,_33,_34,_35){
-try{
-_34.open();
-_34.write(this.getResultString(_32,_33,_35));
-_34.close();
-}
-catch(e){
-dojo.raise(e.message+"\n\n xsltUri: "+_1);
-}
-};
-};
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/xml/__package__.js b/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/xml/__package__.js
deleted file mode 100644
index 2cef286..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/src/xml/__package__.js
+++ /dev/null
@@ -1,3 +0,0 @@
-dojo.require("dojo.xml.Parse");
-dojo.kwCompoundRequire({common:["dojo.dom"],browser:["dojo.html.*"],dashboard:["dojo.html.*"]});
-dojo.provide("dojo.xml.*");
diff --git a/tapestry/tapestry-framework/src/js/dojo-0.4.3/storage_dialog.swf b/tapestry/tapestry-framework/src/js/dojo-0.4.3/storage_dialog.swf
deleted file mode 100644
index cb15ec8..0000000
--- a/tapestry/tapestry-framework/src/js/dojo-0.4.3/storage_dialog.swf
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/lib/ant-dojotest.jar b/tapestry/tapestry-framework/src/js/lib/ant-dojotest.jar
deleted file mode 100644
index cf5e6c5..0000000
--- a/tapestry/tapestry-framework/src/js/lib/ant-dojotest.jar
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/MIT-LICENSE b/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/MIT-LICENSE
deleted file mode 100644
index b5e74b4..0000000
--- a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/MIT-LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/builder.js b/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/builder.js
deleted file mode 100644
index 5b4ce87..0000000
--- a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/builder.js
+++ /dev/null
@@ -1,136 +0,0 @@
-// script.aculo.us builder.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Builder = {
-  NODEMAP: {
-    AREA: 'map',
-    CAPTION: 'table',
-    COL: 'table',
-    COLGROUP: 'table',
-    LEGEND: 'fieldset',
-    OPTGROUP: 'select',
-    OPTION: 'select',
-    PARAM: 'object',
-    TBODY: 'table',
-    TD: 'table',
-    TFOOT: 'table',
-    TH: 'table',
-    THEAD: 'table',
-    TR: 'table'
-  },
-  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
-  //       due to a Firefox bug
-  node: function(elementName) {
-    elementName = elementName.toUpperCase();
-    
-    // try innerHTML approach
-    var parentTag = this.NODEMAP[elementName] || 'div';
-    var parentElement = document.createElement(parentTag);
-    try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
-      parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
-    } catch(e) {}
-    var element = parentElement.firstChild || null;
-      
-    // see if browser added wrapping tags
-    if(element && (element.tagName.toUpperCase() != elementName))
-      element = element.getElementsByTagName(elementName)[0];
-    
-    // fallback to createElement approach
-    if(!element) element = document.createElement(elementName);
-    
-    // abort if nothing could be created
-    if(!element) return;
-
-    // attributes (or text)
-    if(arguments[1])
-      if(this._isStringOrNumber(arguments[1]) ||
-        (arguments[1] instanceof Array) ||
-        arguments[1].tagName) {
-          this._children(element, arguments[1]);
-        } else {
-          var attrs = this._attributes(arguments[1]);
-          if(attrs.length) {
-            try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
-              parentElement.innerHTML = "<" +elementName + " " +
-                attrs + "></" + elementName + ">";
-            } catch(e) {}
-            element = parentElement.firstChild || null;
-            // workaround firefox 1.0.X bug
-            if(!element) {
-              element = document.createElement(elementName);
-              for(attr in arguments[1]) 
-                element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
-            }
-            if(element.tagName.toUpperCase() != elementName)
-              element = parentElement.getElementsByTagName(elementName)[0];
-          }
-        } 
-
-    // text, or array of children
-    if(arguments[2])
-      this._children(element, arguments[2]);
-
-     return element;
-  },
-  _text: function(text) {
-     return document.createTextNode(text);
-  },
-
-  ATTR_MAP: {
-    'className': 'class',
-    'htmlFor': 'for'
-  },
-
-  _attributes: function(attributes) {
-    var attrs = [];
-    for(attribute in attributes)
-      attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
-          '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
-    return attrs.join(" ");
-  },
-  _children: function(element, children) {
-    if(children.tagName) {
-      element.appendChild(children);
-      return;
-    }
-    if(typeof children=='object') { // array can hold nodes and text
-      children.flatten().each( function(e) {
-        if(typeof e=='object')
-          element.appendChild(e)
-        else
-          if(Builder._isStringOrNumber(e))
-            element.appendChild(Builder._text(e));
-      });
-    } else
-      if(Builder._isStringOrNumber(children))
-        element.appendChild(Builder._text(children));
-  },
-  _isStringOrNumber: function(param) {
-    return(typeof param=='string' || typeof param=='number');
-  },
-  build: function(html) {
-    var element = this.node('div');
-    $(element).update(html.strip());
-    return element.down();
-  },
-  dump: function(scope) { 
-    if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope 
-  
-    var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
-      "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
-      "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
-      "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
-      "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
-      "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
-  
-    tags.each( function(tag){ 
-      scope[tag] = function() { 
-        return Builder.node.apply(Builder, [tag].concat($A(arguments)));  
-      } 
-    });
-  }
-}
diff --git a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/controls.js b/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/controls.js
deleted file mode 100644
index 6783bd0..0000000
--- a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/controls.js
+++ /dev/null
@@ -1,875 +0,0 @@
-// script.aculo.us controls.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005-2007 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
-//           (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)
-// Contributors:
-//  Richard Livsey
-//  Rahul Bhargava
-//  Rob Wills
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// Autocompleter.Base handles all the autocompletion functionality 
-// that's independent of the data source for autocompletion. This
-// includes drawing the autocompletion menu, observing keyboard
-// and mouse events, and similar.
-//
-// Specific autocompleters need to provide, at the very least, 
-// a getUpdatedChoices function that will be invoked every time
-// the text inside the monitored textbox changes. This method 
-// should get the text for which to provide autocompletion by
-// invoking this.getToken(), NOT by directly accessing
-// this.element.value. This is to allow incremental tokenized
-// autocompletion. Specific auto-completion logic (AJAX, etc)
-// belongs in getUpdatedChoices.
-//
-// Tokenized incremental autocompletion is enabled automatically
-// when an autocompleter is instantiated with the 'tokens' option
-// in the options parameter, e.g.:
-// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
-// will incrementally autocomplete with a comma as the token.
-// Additionally, ',' in the above example can be replaced with
-// a token array, e.g. { tokens: [',', '\n'] } which
-// enables autocompletion on multiple tokens. This is most 
-// useful when one of the tokens is \n (a newline), as it 
-// allows smart autocompletion after linebreaks.
-
-if(typeof Effect == 'undefined')
-  throw("controls.js requires including script.aculo.us' effects.js library");
-
-var Autocompleter = {}
-Autocompleter.Base = function() {};
-Autocompleter.Base.prototype = {
-  baseInitialize: function(element, update, options) {
-    element          = $(element)
-    this.element     = element; 
-    this.update      = $(update);  
-    this.hasFocus    = false; 
-    this.changed     = false; 
-    this.active      = false; 
-    this.index       = 0;     
-    this.entryCount  = 0;
-
-    if(this.setOptions)
-      this.setOptions(options);
-    else
-      this.options = options || {};
-
-    this.options.paramName    = this.options.paramName || this.element.name;
-    this.options.tokens       = this.options.tokens || [];
-    this.options.frequency    = this.options.frequency || 0.4;
-    this.options.minChars     = this.options.minChars || 1;
-    this.options.onShow       = this.options.onShow || 
-      function(element, update){ 
-        if(!update.style.position || update.style.position=='absolute') {
-          update.style.position = 'absolute';
-          Position.clone(element, update, {
-            setHeight: false, 
-            offsetTop: element.offsetHeight
-          });
-        }
-        Effect.Appear(update,{duration:0.15});
-      };
-    this.options.onHide = this.options.onHide || 
-      function(element, update){ new Effect.Fade(update,{duration:0.15}) };
-
-    if(typeof(this.options.tokens) == 'string') 
-      this.options.tokens = new Array(this.options.tokens);
-
-    this.observer = null;
-    
-    this.element.setAttribute('autocomplete','off');
-
-    Element.hide(this.update);
-
-    Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
-    Event.observe(this.element, 'keypress', this.onKeyPress.bindAsEventListener(this));
-
-    // Turn autocomplete back on when the user leaves the page, so that the
-    // field's value will be remembered on Mozilla-based browsers.
-    Event.observe(window, 'beforeunload', function(){ 
-      element.setAttribute('autocomplete', 'on'); 
-    });
-  },
-
-  show: function() {
-    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
-    if(!this.iefix && 
-      (Prototype.Browser.IE) &&
-      (Element.getStyle(this.update, 'position')=='absolute')) {
-      new Insertion.After(this.update, 
-       '<iframe id="' + this.update.id + '_iefix" '+
-       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
-       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
-      this.iefix = $(this.update.id+'_iefix');
-    }
-    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
-  },
-  
-  fixIEOverlapping: function() {
-    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
-    this.iefix.style.zIndex = 1;
-    this.update.style.zIndex = 2;
-    Element.show(this.iefix);
-  },
-
-  hide: function() {
-    this.stopIndicator();
-    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
-    if(this.iefix) Element.hide(this.iefix);
-  },
-
-  startIndicator: function() {
-    if(this.options.indicator) Element.show(this.options.indicator);
-  },
-
-  stopIndicator: function() {
-    if(this.options.indicator) Element.hide(this.options.indicator);
-  },
-
-  onKeyPress: function(event) {
-    if(this.active)
-      switch(event.keyCode) {
-       case Event.KEY_TAB:
-       case Event.KEY_RETURN:
-         this.selectEntry();
-         Event.stop(event);
-       case Event.KEY_ESC:
-         this.hide();
-         this.active = false;
-         Event.stop(event);
-         return;
-       case Event.KEY_LEFT:
-       case Event.KEY_RIGHT:
-         return;
-       case Event.KEY_UP:
-         this.markPrevious();
-         this.render();
-         if(Prototype.Browser.WebKit) Event.stop(event);
-         return;
-       case Event.KEY_DOWN:
-         this.markNext();
-         this.render();
-         if(Prototype.Browser.WebKit) Event.stop(event);
-         return;
-      }
-     else 
-       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || 
-         (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
-
-    this.changed = true;
-    this.hasFocus = true;
-
-    if(this.observer) clearTimeout(this.observer);
-      this.observer = 
-        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
-  },
-
-  activate: function() {
-    this.changed = false;
-    this.hasFocus = true;
-    this.getUpdatedChoices();
-  },
-
-  onHover: function(event) {
-    var element = Event.findElement(event, 'LI');
-    if(this.index != element.autocompleteIndex) 
-    {
-        this.index = element.autocompleteIndex;
-        this.render();
-    }
-    Event.stop(event);
-  },
-  
-  onClick: function(event) {
-    var element = Event.findElement(event, 'LI');
-    this.index = element.autocompleteIndex;
-    this.selectEntry();
-    this.hide();
-  },
-  
-  onBlur: function(event) {
-    // needed to make click events working
-    setTimeout(this.hide.bind(this), 250);
-    this.hasFocus = false;
-    this.active = false;     
-  }, 
-  
-  render: function() {
-    if(this.entryCount > 0) {
-      for (var i = 0; i < this.entryCount; i++)
-        this.index==i ? 
-          Element.addClassName(this.getEntry(i),"selected") : 
-          Element.removeClassName(this.getEntry(i),"selected");
-      if(this.hasFocus) { 
-        this.show();
-        this.active = true;
-      }
-    } else {
-      this.active = false;
-      this.hide();
-    }
-  },
-  
-  markPrevious: function() {
-    if(this.index > 0) this.index--
-      else this.index = this.entryCount-1;
-    this.getEntry(this.index).scrollIntoView(true);
-  },
-  
-  markNext: function() {
-    if(this.index < this.entryCount-1) this.index++
-      else this.index = 0;
-    this.getEntry(this.index).scrollIntoView(false);
-  },
-  
-  getEntry: function(index) {
-    return this.update.firstChild.childNodes[index];
-  },
-  
-  getCurrentEntry: function() {
-    return this.getEntry(this.index);
-  },
-  
-  selectEntry: function() {
-    this.active = false;
-    this.updateElement(this.getCurrentEntry());
-  },
-
-  updateElement: function(selectedElement) {
-    if (this.options.updateElement) {
-      this.options.updateElement(selectedElement);
-      return;
-    }
-    var value = '';
-    if (this.options.select) {
-      var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];
-      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
-    } else
-      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
-    
-    var lastTokenPos = this.findLastToken();
-    if (lastTokenPos != -1) {
-      var newValue = this.element.value.substr(0, lastTokenPos + 1);
-      var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
-      if (whitespace)
-        newValue += whitespace[0];
-      this.element.value = newValue + value;
-    } else {
-      this.element.value = value;
-    }
-    this.element.focus();
-    
-    if (this.options.afterUpdateElement)
-      this.options.afterUpdateElement(this.element, selectedElement);
-  },
-
-  updateChoices: function(choices) {
-    if(!this.changed && this.hasFocus) {
-      this.update.innerHTML = choices;
-      Element.cleanWhitespace(this.update);
-      Element.cleanWhitespace(this.update.down());
-
-      if(this.update.firstChild && this.update.down().childNodes) {
-        this.entryCount = 
-          this.update.down().childNodes.length;
-        for (var i = 0; i < this.entryCount; i++) {
-          var entry = this.getEntry(i);
-          entry.autocompleteIndex = i;
-          this.addObservers(entry);
-        }
-      } else { 
-        this.entryCount = 0;
-      }
-
-      this.stopIndicator();
-      this.index = 0;
-      
-      if(this.entryCount==1 && this.options.autoSelect) {
-        this.selectEntry();
-        this.hide();
-      } else {
-        this.render();
-      }
-    }
-  },
-
-  addObservers: function(element) {
-    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
-    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
-  },
-
-  onObserverEvent: function() {
-    this.changed = false;   
-    if(this.getToken().length>=this.options.minChars) {
-      this.getUpdatedChoices();
-    } else {
-      this.active = false;
-      this.hide();
-    }
-  },
-
-  getToken: function() {
-    var tokenPos = this.findLastToken();
-    if (tokenPos != -1)
-      var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,'');
-    else
-      var ret = this.element.value;
-
-    return /\n/.test(ret) ? '' : ret;
-  },
-
-  findLastToken: function() {
-    var lastTokenPos = -1;
-
-    for (var i=0; i<this.options.tokens.length; i++) {
-      var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);
-      if (thisTokenPos > lastTokenPos)
-        lastTokenPos = thisTokenPos;
-    }
-    return lastTokenPos;
-  }
-}
-
-Ajax.Autocompleter = Class.create();
-Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
-  initialize: function(element, update, url, options) {
-    this.baseInitialize(element, update, options);
-    this.options.asynchronous  = true;
-    this.options.onComplete    = this.onComplete.bind(this);
-    this.options.defaultParams = this.options.parameters || null;
-    this.url                   = url;
-  },
-
-  getUpdatedChoices: function() {
-    this.startIndicator();
-    
-    var entry = encodeURIComponent(this.options.paramName) + '=' + 
-      encodeURIComponent(this.getToken());
-
-    this.options.parameters = this.options.callback ?
-      this.options.callback(this.element, entry) : entry;
-
-    if(this.options.defaultParams) 
-      this.options.parameters += '&' + this.options.defaultParams;
-    
-    new Ajax.Request(this.url, this.options);
-  },
-
-  onComplete: function(request) {
-    this.updateChoices(request.responseText);
-  }
-
-});
-
-// The local array autocompleter. Used when you'd prefer to
-// inject an array of autocompletion options into the page, rather
-// than sending out Ajax queries, which can be quite slow sometimes.
-//
-// The constructor takes four parameters. The first two are, as usual,
-// the id of the monitored textbox, and id of the autocompletion menu.
-// The third is the array you want to autocomplete from, and the fourth
-// is the options block.
-//
-// Extra local autocompletion options:
-// - choices - How many autocompletion choices to offer
-//
-// - partialSearch - If false, the autocompleter will match entered
-//                    text only at the beginning of strings in the 
-//                    autocomplete array. Defaults to true, which will
-//                    match text at the beginning of any *word* in the
-//                    strings in the autocomplete array. If you want to
-//                    search anywhere in the string, additionally set
-//                    the option fullSearch to true (default: off).
-//
-// - fullSsearch - Search anywhere in autocomplete array strings.
-//
-// - partialChars - How many characters to enter before triggering
-//                   a partial match (unlike minChars, which defines
-//                   how many characters are required to do any match
-//                   at all). Defaults to 2.
-//
-// - ignoreCase - Whether to ignore case when autocompleting.
-//                 Defaults to true.
-//
-// It's possible to pass in a custom function as the 'selector' 
-// option, if you prefer to write your own autocompletion logic.
-// In that case, the other options above will not apply unless
-// you support them.
-
-Autocompleter.Local = Class.create();
-Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
-  initialize: function(element, update, array, options) {
-    this.baseInitialize(element, update, options);
-    this.options.array = array;
-  },
-
-  getUpdatedChoices: function() {
-    this.updateChoices(this.options.selector(this));
-  },
-
-  setOptions: function(options) {
-    this.options = Object.extend({
-      choices: 10,
-      partialSearch: true,
-      partialChars: 2,
-      ignoreCase: true,
-      fullSearch: false,
-      selector: function(instance) {
-        var ret       = []; // Beginning matches
-        var partial   = []; // Inside matches
-        var entry     = instance.getToken();
-        var count     = 0;
-
-        for (var i = 0; i < instance.options.array.length &&  
-          ret.length < instance.options.choices ; i++) { 
-
-          var elem = instance.options.array[i];
-          var foundPos = instance.options.ignoreCase ? 
-            elem.toLowerCase().indexOf(entry.toLowerCase()) : 
-            elem.indexOf(entry);
-
-          while (foundPos != -1) {
-            if (foundPos == 0 && elem.length != entry.length) { 
-              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" + 
-                elem.substr(entry.length) + "</li>");
-              break;
-            } else if (entry.length >= instance.options.partialChars && 
-              instance.options.partialSearch && foundPos != -1) {
-              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
-                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
-                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
-                  foundPos + entry.length) + "</li>");
-                break;
-              }
-            }
-
-            foundPos = instance.options.ignoreCase ? 
-              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : 
-              elem.indexOf(entry, foundPos + 1);
-
-          }
-        }
-        if (partial.length)
-          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
-        return "<ul>" + ret.join('') + "</ul>";
-      }
-    }, options || {});
-  }
-});
-
-// AJAX in-place editor
-//
-// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor
-
-// Use this if you notice weird scrolling problems on some browsers,
-// the DOM might be a bit confused when this gets called so do this
-// waits 1 ms (with setTimeout) until it does the activation
-Field.scrollFreeActivate = function(field) {
-  setTimeout(function() {
-    Field.activate(field);
-  }, 1);
-}
-
-Ajax.InPlaceEditor = Class.create();
-Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
-Ajax.InPlaceEditor.prototype = {
-  initialize: function(element, url, options) {
-    this.url = url;
-    this.element = $(element);
-
-    this.options = Object.extend({
-      paramName: "value",
-      okButton: true,
-      okLink: false,
-      okText: "ok",
-      cancelButton: false,
-      cancelLink: true,
-      cancelText: "cancel",
-      textBeforeControls: '',
-      textBetweenControls: '',
-      textAfterControls: '',
-      savingText: "Saving...",
-      clickToEditText: "Click to edit",
-      okText: "ok",
-      rows: 1,
-      onComplete: function(transport, element) {
-        new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
-      },
-      onFailure: function(transport) {
-        alert("Error communicating with the server: " + transport.responseText.stripTags());
-      },
-      callback: function(form) {
-        return Form.serialize(form);
-      },
-      handleLineBreaks: true,
-      loadingText: 'Loading...',
-      savingClassName: 'inplaceeditor-saving',
-      loadingClassName: 'inplaceeditor-loading',
-      formClassName: 'inplaceeditor-form',
-      highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
-      highlightendcolor: "#FFFFFF",
-      externalControl: null,
-      submitOnBlur: false,
-      ajaxOptions: {},
-      evalScripts: false
-    }, options || {});
-
-    if(!this.options.formId && this.element.id) {
-      this.options.formId = this.element.id + "-inplaceeditor";
-      if ($(this.options.formId)) {
-        // there's already a form with that name, don't specify an id
-        this.options.formId = null;
-      }
-    }
-    
-    if (this.options.externalControl) {
-      this.options.externalControl = $(this.options.externalControl);
-    }
-    
-    this.originalBackground = Element.getStyle(this.element, 'background-color');
-    if (!this.originalBackground) {
-      this.originalBackground = "transparent";
-    }
-    
-    this.element.title = this.options.clickToEditText;
-    
-    this.onclickListener = this.enterEditMode.bindAsEventListener(this);
-    this.mouseoverListener = this.enterHover.bindAsEventListener(this);
-    this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
-    Event.observe(this.element, 'click', this.onclickListener);
-    Event.observe(this.element, 'mouseover', this.mouseoverListener);
-    Event.observe(this.element, 'mouseout', this.mouseoutListener);
-    if (this.options.externalControl) {
-      Event.observe(this.options.externalControl, 'click', this.onclickListener);
-      Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
-      Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);
-    }
-  },
-  enterEditMode: function(evt) {
-    if (this.saving) return;
-    if (this.editing) return;
-    this.editing = true;
-    this.onEnterEditMode();
-    if (this.options.externalControl) {
-      Element.hide(this.options.externalControl);
-    }
-    Element.hide(this.element);
-    this.createForm();
-    this.element.parentNode.insertBefore(this.form, this.element);
-    if (!this.options.loadTextURL) Field.scrollFreeActivate(this.editField);
-    // stop the event to avoid a page refresh in Safari
-    if (evt) {
-      Event.stop(evt);
-    }
-    return false;
-  },
-  createForm: function() {
-    this.form = document.createElement("form");
-    this.form.id = this.options.formId;
-    Element.addClassName(this.form, this.options.formClassName)
-    this.form.onsubmit = this.onSubmit.bind(this);
-
-    this.createEditField();
-
-    if (this.options.textarea) {
-      var br = document.createElement("br");
-      this.form.appendChild(br);
-    }
-    
-    if (this.options.textBeforeControls)
-      this.form.appendChild(document.createTextNode(this.options.textBeforeControls));
-
-    if (this.options.okButton) {
-      var okButton = document.createElement("input");
-      okButton.type = "submit";
-      okButton.value = this.options.okText;
-      okButton.className = 'editor_ok_button';
-      this.form.appendChild(okButton);
-    }
-    
-    if (this.options.okLink) {
-      var okLink = document.createElement("a");
-      okLink.href = "#";
-      okLink.appendChild(document.createTextNode(this.options.okText));
-      okLink.onclick = this.onSubmit.bind(this);
-      okLink.className = 'editor_ok_link';
-      this.form.appendChild(okLink);
-    }
-    
-    if (this.options.textBetweenControls && 
-      (this.options.okLink || this.options.okButton) && 
-      (this.options.cancelLink || this.options.cancelButton))
-      this.form.appendChild(document.createTextNode(this.options.textBetweenControls));
-      
-    if (this.options.cancelButton) {
-      var cancelButton = document.createElement("input");
-      cancelButton.type = "submit";
-      cancelButton.value = this.options.cancelText;
-      cancelButton.onclick = this.onclickCancel.bind(this);
-      cancelButton.className = 'editor_cancel_button';
-      this.form.appendChild(cancelButton);
-    }
-
-    if (this.options.cancelLink) {
-      var cancelLink = document.createElement("a");
-      cancelLink.href = "#";
-      cancelLink.appendChild(document.createTextNode(this.options.cancelText));
-      cancelLink.onclick = this.onclickCancel.bind(this);
-      cancelLink.className = 'editor_cancel editor_cancel_link';      
-      this.form.appendChild(cancelLink);
-    }
-    
-    if (this.options.textAfterControls)
-      this.form.appendChild(document.createTextNode(this.options.textAfterControls));
-  },
-  hasHTMLLineBreaks: function(string) {
-    if (!this.options.handleLineBreaks) return false;
-    return string.match(/<br/i) || string.match(/<p>/i);
-  },
-  convertHTMLLineBreaks: function(string) {
-    return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
-  },
-  createEditField: function() {
-    var text;
-    if(this.options.loadTextURL) {
-      text = this.options.loadingText;
-    } else {
-      text = this.getText();
-    }
-
-    var obj = this;
-    
-    if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
-      this.options.textarea = false;
-      var textField = document.createElement("input");
-      textField.obj = this;
-      textField.type = "text";
-      textField.name = this.options.paramName;
-      textField.value = text;
-      textField.style.backgroundColor = this.options.highlightcolor;
-      textField.className = 'editor_field';
-      var size = this.options.size || this.options.cols || 0;
-      if (size != 0) textField.size = size;
-      if (this.options.submitOnBlur)
-        textField.onblur = this.onSubmit.bind(this);
-      this.editField = textField;
-    } else {
-      this.options.textarea = true;
-      var textArea = document.createElement("textarea");
-      textArea.obj = this;
-      textArea.name = this.options.paramName;
-      textArea.value = this.convertHTMLLineBreaks(text);
-      textArea.rows = this.options.rows;
-      textArea.cols = this.options.cols || 40;
-      textArea.className = 'editor_field';      
-      if (this.options.submitOnBlur)
-        textArea.onblur = this.onSubmit.bind(this);
-      this.editField = textArea;
-    }
-    
-    if(this.options.loadTextURL) {
-      this.loadExternalText();
-    }
-    this.form.appendChild(this.editField);
-  },
-  getText: function() {
-    return this.element.innerHTML;
-  },
-  loadExternalText: function() {
-    Element.addClassName(this.form, this.options.loadingClassName);
-    this.editField.disabled = true;
-    new Ajax.Request(
-      this.options.loadTextURL,
-      Object.extend({
-        asynchronous: true,
-        onComplete: this.onLoadedExternalText.bind(this)
-      }, this.options.ajaxOptions)
-    );
-  },
-  onLoadedExternalText: function(transport) {
-    Element.removeClassName(this.form, this.options.loadingClassName);
-    this.editField.disabled = false;
-    this.editField.value = transport.responseText.stripTags();
-    Field.scrollFreeActivate(this.editField);
-  },
-  onclickCancel: function() {
-    this.onComplete();
-    this.leaveEditMode();
-    return false;
-  },
-  onFailure: function(transport) {
-    this.options.onFailure(transport);
-    if (this.oldInnerHTML) {
-      this.element.innerHTML = this.oldInnerHTML;
-      this.oldInnerHTML = null;
-    }
-    return false;
-  },
-  onSubmit: function() {
-    // onLoading resets these so we need to save them away for the Ajax call
-    var form = this.form;
-    var value = this.editField.value;
-    
-    // do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
-    // which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
-    // to be displayed indefinitely
-    this.onLoading();
-    
-    if (this.options.evalScripts) {
-      new Ajax.Request(
-        this.url, Object.extend({
-          parameters: this.options.callback(form, value),
-          onComplete: this.onComplete.bind(this),
-          onFailure: this.onFailure.bind(this),
-          asynchronous:true, 
-          evalScripts:true
-        }, this.options.ajaxOptions));
-    } else  {
-      new Ajax.Updater(
-        { success: this.element,
-          // don't update on failure (this could be an option)
-          failure: null }, 
-        this.url, Object.extend({
-          parameters: this.options.callback(form, value),
-          onComplete: this.onComplete.bind(this),
-          onFailure: this.onFailure.bind(this)
-        }, this.options.ajaxOptions));
-    }
-    // stop the event to avoid a page refresh in Safari
-    if (arguments.length > 1) {
-      Event.stop(arguments[0]);
-    }
-    return false;
-  },
-  onLoading: function() {
-    this.saving = true;
-    this.removeForm();
-    this.leaveHover();
-    this.showSaving();
-  },
-  showSaving: function() {
-    this.oldInnerHTML = this.element.innerHTML;
-    this.element.innerHTML = this.options.savingText;
-    Element.addClassName(this.element, this.options.savingClassName);
-    this.element.style.backgroundColor = this.originalBackground;
-    Element.show(this.element);
-  },
-  removeForm: function() {
-    if(this.form) {
-      if (this.form.parentNode) Element.remove(this.form);
-      this.form = null;
-    }
-  },
-  enterHover: function() {
-    if (this.saving) return;
-    this.element.style.backgroundColor = this.options.highlightcolor;
-    if (this.effect) {
-      this.effect.cancel();
-    }
-    Element.addClassName(this.element, this.options.hoverClassName)
-  },
-  leaveHover: function() {
-    if (this.options.backgroundColor) {
-      this.element.style.backgroundColor = this.oldBackground;
-    }
-    Element.removeClassName(this.element, this.options.hoverClassName)
-    if (this.saving) return;
-    this.effect = new Effect.Highlight(this.element, {
-      startcolor: this.options.highlightcolor,
-      endcolor: this.options.highlightendcolor,
-      restorecolor: this.originalBackground
-    });
-  },
-  leaveEditMode: function() {
-    Element.removeClassName(this.element, this.options.savingClassName);
-    this.removeForm();
-    this.leaveHover();
-    this.element.style.backgroundColor = this.originalBackground;
-    Element.show(this.element);
-    if (this.options.externalControl) {
-      Element.show(this.options.externalControl);
-    }
-    this.editing = false;
-    this.saving = false;
-    this.oldInnerHTML = null;
-    this.onLeaveEditMode();
-  },
-  onComplete: function(transport) {
-    this.leaveEditMode();
-    this.options.onComplete.bind(this)(transport, this.element);
-  },
-  onEnterEditMode: function() {},
-  onLeaveEditMode: function() {},
-  dispose: function() {
-    if (this.oldInnerHTML) {
-      this.element.innerHTML = this.oldInnerHTML;
-    }
-    this.leaveEditMode();
-    Event.stopObserving(this.element, 'click', this.onclickListener);
-    Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
-    Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
-    if (this.options.externalControl) {
-      Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
-      Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
-      Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
-    }
-  }
-};
-
-Ajax.InPlaceCollectionEditor = Class.create();
-Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
-Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
-  createEditField: function() {
-    if (!this.cached_selectTag) {
-      var selectTag = document.createElement("select");
-      var collection = this.options.collection || [];
-      var optionTag;
-      collection.each(function(e,i) {
-        optionTag = document.createElement("option");
-        optionTag.value = (e instanceof Array) ? e[0] : e;
-        if((typeof this.options.value == 'undefined') && 
-          ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true;
-        if(this.options.value==optionTag.value) optionTag.selected = true;
-        optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));
-        selectTag.appendChild(optionTag);
-      }.bind(this));
-      this.cached_selectTag = selectTag;
-    }
-
-    this.editField = this.cached_selectTag;
-    if(this.options.loadTextURL) this.loadExternalText();
-    this.form.appendChild(this.editField);
-    this.options.callback = function(form, value) {
-      return "value=" + encodeURIComponent(value);
-    }
-  }
-});
-
-// Delayed observer, like Form.Element.Observer, 
-// but waits for delay after last key input
-// Ideal for live-search fields
-
-Form.Element.DelayedObserver = Class.create();
-Form.Element.DelayedObserver.prototype = {
-  initialize: function(element, delay, callback) {
-    this.delay     = delay || 0.5;
-    this.element   = $(element);
-    this.callback  = callback;
-    this.timer     = null;
-    this.lastValue = $F(this.element); 
-    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
-  },
-  delayedListener: function(event) {
-    if(this.lastValue == $F(this.element)) return;
-    if(this.timer) clearTimeout(this.timer);
-    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
-    this.lastValue = $F(this.element);
-  },
-  onTimerEvent: function() {
-    this.timer = null;
-    this.callback(this.element, $F(this.element));
-  }
-};
diff --git a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/dragdrop.js b/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/dragdrop.js
deleted file mode 100644
index 108dd66..0000000
--- a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/dragdrop.js
+++ /dev/null
@@ -1,970 +0,0 @@
-// script.aculo.us dragdrop.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005-2007 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-if(typeof Effect == 'undefined')
-  throw("dragdrop.js requires including script.aculo.us' effects.js library");
-
-var Droppables = {
-  drops: [],
-
-  remove: function(element) {
-    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
-  },
-
-  add: function(element) {
-    element = $(element);
-    var options = Object.extend({
-      greedy:     true,
-      hoverclass: null,
-      tree:       false
-    }, arguments[1] || {});
-
-    // cache containers
-    if(options.containment) {
-      options._containers = [];
-      var containment = options.containment;
-      if((typeof containment == 'object') && 
-        (containment.constructor == Array)) {
-        containment.each( function(c) { options._containers.push($(c)) });
-      } else {
-        options._containers.push($(containment));
-      }
-    }
-    
-    if(options.accept) options.accept = [options.accept].flatten();
-
-    Element.makePositioned(element); // fix IE
-    options.element = element;
-
-    this.drops.push(options);
-  },
-  
-  findDeepestChild: function(drops) {
-    deepest = drops[0];
-      
-    for (i = 1; i < drops.length; ++i)
-      if (Element.isParent(drops[i].element, deepest.element))
-        deepest = drops[i];
-    
-    return deepest;
-  },
-
-  isContained: function(element, drop) {
-    var containmentNode;
-    if(drop.tree) {
-      containmentNode = element.treeNode; 
-    } else {
-      containmentNode = element.parentNode;
-    }
-    return drop._containers.detect(function(c) { return containmentNode == c });
-  },
-  
-  isAffected: function(point, element, drop) {
-    return (
-      (drop.element!=element) &&
-      ((!drop._containers) ||
-        this.isContained(element, drop)) &&
-      ((!drop.accept) ||
-        (Element.classNames(element).detect( 
-          function(v) { return drop.accept.include(v) } ) )) &&
-      Position.within(drop.element, point[0], point[1]) );
-  },
-
-  deactivate: function(drop) {
-    if(drop.hoverclass)
-      Element.removeClassName(drop.element, drop.hoverclass);
-    this.last_active = null;
-  },
-
-  activate: function(drop) {
-    if(drop.hoverclass)
-      Element.addClassName(drop.element, drop.hoverclass);
-    this.last_active = drop;
-  },
-
-  show: function(point, element) {
-    if(!this.drops.length) return;
-    var affected = [];
-    
-    if(this.last_active) this.deactivate(this.last_active);
-    this.drops.each( function(drop) {
-      if(Droppables.isAffected(point, element, drop))
-        affected.push(drop);
-    });
-        
-    if(affected.length>0) {
-      drop = Droppables.findDeepestChild(affected);
-      Position.within(drop.element, point[0], point[1]);
-      if(drop.onHover)
-        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
-      
-      Droppables.activate(drop);
-    }
-  },
-
-  fire: function(event, element) {
-    if(!this.last_active) return;
-    Position.prepare();
-
-    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
-      if (this.last_active.onDrop) {
-        this.last_active.onDrop(element, this.last_active.element, event); 
-        return true; 
-      }
-  },
-
-  reset: function() {
-    if(this.last_active)
-      this.deactivate(this.last_active);
-  }
-}
-
-var Draggables = {
-  drags: [],
-  observers: [],
-  
-  register: function(draggable) {
-    if(this.drags.length == 0) {
-      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
-      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
-      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
-      
-      Event.observe(document, "mouseup", this.eventMouseUp);
-      Event.observe(document, "mousemove", this.eventMouseMove);
-      Event.observe(document, "keypress", this.eventKeypress);
-    }
-    this.drags.push(draggable);
-  },
-  
-  unregister: function(draggable) {
-    this.drags = this.drags.reject(function(d) { return d==draggable });
-    if(this.drags.length == 0) {
-      Event.stopObserving(document, "mouseup", this.eventMouseUp);
-      Event.stopObserving(document, "mousemove", this.eventMouseMove);
-      Event.stopObserving(document, "keypress", this.eventKeypress);
-    }
-  },
-  
-  activate: function(draggable) {
-    if(draggable.options.delay) { 
-      this._timeout = setTimeout(function() { 
-        Draggables._timeout = null; 
-        window.focus(); 
-        Draggables.activeDraggable = draggable; 
-      }.bind(this), draggable.options.delay); 
-    } else {
-      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
-      this.activeDraggable = draggable;
-    }
-  },
-  
-  deactivate: function() {
-    this.activeDraggable = null;
-  },
-  
-  updateDrag: function(event) {
-    if(!this.activeDraggable) return;
-    var pointer = [Event.pointerX(event), Event.pointerY(event)];
-    // Mozilla-based browsers fire successive mousemove events with
-    // the same coordinates, prevent needless redrawing (moz bug?)
-    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
-    this._lastPointer = pointer;
-    
-    this.activeDraggable.updateDrag(event, pointer);
-  },
-  
-  endDrag: function(event) {
-    if(this._timeout) { 
-      clearTimeout(this._timeout); 
-      this._timeout = null; 
-    }
-    if(!this.activeDraggable) return;
-    this._lastPointer = null;
-    this.activeDraggable.endDrag(event);
-    this.activeDraggable = null;
-  },
-  
-  keyPress: function(event) {
-    if(this.activeDraggable)
-      this.activeDraggable.keyPress(event);
-  },
-  
-  addObserver: function(observer) {
-    this.observers.push(observer);
-    this._cacheObserverCallbacks();
-  },
-  
-  removeObserver: function(element) {  // element instead of observer fixes mem leaks
-    this.observers = this.observers.reject( function(o) { return o.element==element });
-    this._cacheObserverCallbacks();
-  },
-  
-  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
-    if(this[eventName+'Count'] > 0)
-      this.observers.each( function(o) {
-        if(o[eventName]) o[eventName](eventName, draggable, event);
-      });
-    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
-  },
-  
-  _cacheObserverCallbacks: function() {
-    ['onStart','onEnd','onDrag'].each( function(eventName) {
-      Draggables[eventName+'Count'] = Draggables.observers.select(
-        function(o) { return o[eventName]; }
-      ).length;
-    });
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Draggable = Class.create();
-Draggable._dragging    = {};
-
-Draggable.prototype = {
-  initialize: function(element) {
-    var defaults = {
-      handle: false,
-      reverteffect: function(element, top_offset, left_offset) {
-        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
-        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
-          queue: {scope:'_draggable', position:'end'}
-        });
-      },
-      endeffect: function(element) {
-        var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0;
-        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, 
-          queue: {scope:'_draggable', position:'end'},
-          afterFinish: function(){ 
-            Draggable._dragging[element] = false 
-          }
-        }); 
-      },
-      zindex: 1000,
-      revert: false,
-      quiet: false,
-      scroll: false,
-      scrollSensitivity: 20,
-      scrollSpeed: 15,
-      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
-      delay: 0
-    };
-    
-    if(!arguments[1] || typeof arguments[1].endeffect == 'undefined')
-      Object.extend(defaults, {
-        starteffect: function(element) {
-          element._opacity = Element.getOpacity(element);
-          Draggable._dragging[element] = true;
-          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); 
-        }
-      });
-    
-    var options = Object.extend(defaults, arguments[1] || {});
-
-    this.element = $(element);
-    
-    if(options.handle && (typeof options.handle == 'string'))
-      this.handle = this.element.down('.'+options.handle, 0);
-    
-    if(!this.handle) this.handle = $(options.handle);
-    if(!this.handle) this.handle = this.element;
-    
-    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
-      options.scroll = $(options.scroll);
-      this._isScrollChild = Element.childOf(this.element, options.scroll);
-    }
-
-    Element.makePositioned(this.element); // fix IE    
-
-    this.delta    = this.currentDelta();
-    this.options  = options;
-    this.dragging = false;   
-
-    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
-    Event.observe(this.handle, "mousedown", this.eventMouseDown);
-    
-    Draggables.register(this);
-  },
-  
-  destroy: function() {
-    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
-    Draggables.unregister(this);
-  },
-  
-  currentDelta: function() {
-    return([
-      parseInt(Element.getStyle(this.element,'left') || '0'),
-      parseInt(Element.getStyle(this.element,'top') || '0')]);
-  },
-  
-  initDrag: function(event) {
-    if(typeof Draggable._dragging[this.element] != 'undefined' &&
-      Draggable._dragging[this.element]) return;
-    if(Event.isLeftClick(event)) {    
-      // abort on form elements, fixes a Firefox issue
-      var src = Event.element(event);
-      if((tag_name = src.tagName.toUpperCase()) && (
-        tag_name=='INPUT' ||
-        tag_name=='SELECT' ||
-        tag_name=='OPTION' ||
-        tag_name=='BUTTON' ||
-        tag_name=='TEXTAREA')) return;
-        
-      var pointer = [Event.pointerX(event), Event.pointerY(event)];
-      var pos     = Position.cumulativeOffset(this.element);
-      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
-      
-      Draggables.activate(this);
-      Event.stop(event);
-    }
-  },
-  
-  startDrag: function(event) {
-    this.dragging = true;
-    
-    if(this.options.zindex) {
-      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
-      this.element.style.zIndex = this.options.zindex;
-    }
-    
-    if(this.options.ghosting) {
-      this._clone = this.element.cloneNode(true);
-      Position.absolutize(this.element);
-      this.element.parentNode.insertBefore(this._clone, this.element);
-    }
-    
-    if(this.options.scroll) {
-      if (this.options.scroll == window) {
-        var where = this._getWindowScroll(this.options.scroll);
-        this.originalScrollLeft = where.left;
-        this.originalScrollTop = where.top;
-      } else {
-        this.originalScrollLeft = this.options.scroll.scrollLeft;
-        this.originalScrollTop = this.options.scroll.scrollTop;
-      }
-    }
-    
-    Draggables.notify('onStart', this, event);
-        
-    if(this.options.starteffect) this.options.starteffect(this.element);
-  },
-  
-  updateDrag: function(event, pointer) {
-    if(!this.dragging) this.startDrag(event);
-    
-    if(!this.options.quiet){
-      Position.prepare();
-      Droppables.show(pointer, this.element);
-    }
-    
-    Draggables.notify('onDrag', this, event);
-    
-    this.draw(pointer);
-    if(this.options.change) this.options.change(this);
-    
-    if(this.options.scroll) {
-      this.stopScrolling();
-      
-      var p;
-      if (this.options.scroll == window) {
-        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
-      } else {
-        p = Position.page(this.options.scroll);
-        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
-        p[1] += this.options.scroll.scrollTop + Position.deltaY;
-        p.push(p[0]+this.options.scroll.offsetWidth);
-        p.push(p[1]+this.options.scroll.offsetHeight);
-      }
-      var speed = [0,0];
-      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
-      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
-      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
-      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
-      this.startScrolling(speed);
-    }
-    
-    // fix AppleWebKit rendering
-    if(Prototype.Browser.WebKit) window.scrollBy(0,0);
-    
-    Event.stop(event);
-  },
-  
-  finishDrag: function(event, success) {
-    this.dragging = false;
-    
-    if(this.options.quiet){
-      Position.prepare();
-      var pointer = [Event.pointerX(event), Event.pointerY(event)];
-      Droppables.show(pointer, this.element);
-    }
-
-    if(this.options.ghosting) {
-      Position.relativize(this.element);
-      Element.remove(this._clone);
-      this._clone = null;
-    }
-
-    var dropped = false; 
-    if(success) { 
-      dropped = Droppables.fire(event, this.element); 
-      if (!dropped) dropped = false; 
-    }
-    if(dropped && this.options.onDropped) this.options.onDropped(this.element);
-    Draggables.notify('onEnd', this, event);
-
-    var revert = this.options.revert;
-    if(revert && typeof revert == 'function') revert = revert(this.element);
-    
-    var d = this.currentDelta();
-    if(revert && this.options.reverteffect) {
-      if (dropped == 0 || revert != 'failure')
-        this.options.reverteffect(this.element,
-          d[1]-this.delta[1], d[0]-this.delta[0]);
-    } else {
-      this.delta = d;
-    }
-
-    if(this.options.zindex)
-      this.element.style.zIndex = this.originalZ;
-
-    if(this.options.endeffect) 
-      this.options.endeffect(this.element);
-      
-    Draggables.deactivate(this);
-    Droppables.reset();
-  },
-  
-  keyPress: function(event) {
-    if(event.keyCode!=Event.KEY_ESC) return;
-    this.finishDrag(event, false);
-    Event.stop(event);
-  },
-  
-  endDrag: function(event) {
-    if(!this.dragging) return;
-    this.stopScrolling();
-    this.finishDrag(event, true);
-    Event.stop(event);
-  },
-  
-  draw: function(point) {
-    var pos = Position.cumulativeOffset(this.element);
-    if(this.options.ghosting) {
-      var r   = Position.realOffset(this.element);
-      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
-    }
-    
-    var d = this.currentDelta();
-    pos[0] -= d[0]; pos[1] -= d[1];
-    
-    if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
-      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
-      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
-    }
-    
-    var p = [0,1].map(function(i){ 
-      return (point[i]-pos[i]-this.offset[i]) 
-    }.bind(this));
-    
-    if(this.options.snap) {
-      if(typeof this.options.snap == 'function') {
-        p = this.options.snap(p[0],p[1],this);
-      } else {
-      if(this.options.snap instanceof Array) {
-        p = p.map( function(v, i) {
-          return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
-      } else {
-        p = p.map( function(v) {
-          return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
-      }
-    }}
-    
-    var style = this.element.style;
-    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
-      style.left = p[0] + "px";
-    if((!this.options.constraint) || (this.options.constraint=='vertical'))
-      style.top  = p[1] + "px";
-    
-    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
-  },
-  
-  stopScrolling: function() {
-    if(this.scrollInterval) {
-      clearInterval(this.scrollInterval);
-      this.scrollInterval = null;
-      Draggables._lastScrollPointer = null;
-    }
-  },
-  
-  startScrolling: function(speed) {
-    if(!(speed[0] || speed[1])) return;
-    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
-    this.lastScrolled = new Date();
-    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
-  },
-  
-  scroll: function() {
-    var current = new Date();
-    var delta = current - this.lastScrolled;
-    this.lastScrolled = current;
-    if(this.options.scroll == window) {
-      with (this._getWindowScroll(this.options.scroll)) {
-        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
-          var d = delta / 1000;
-          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
-        }
-      }
-    } else {
-      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
-      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
-    }
-    
-    Position.prepare();
-    Droppables.show(Draggables._lastPointer, this.element);
-    Draggables.notify('onDrag', this);
-    if (this._isScrollChild) {
-      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
-      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
-      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
-      if (Draggables._lastScrollPointer[0] < 0)
-        Draggables._lastScrollPointer[0] = 0;
-      if (Draggables._lastScrollPointer[1] < 0)
-        Draggables._lastScrollPointer[1] = 0;
-      this.draw(Draggables._lastScrollPointer);
-    }
-    
-    if(this.options.change) this.options.change(this);
-  },
-  
-  _getWindowScroll: function(w) {
-    var T, L, W, H;
-    with (w.document) {
-      if (w.document.documentElement && documentElement.scrollTop) {
-        T = documentElement.scrollTop;
-        L = documentElement.scrollLeft;
-      } else if (w.document.body) {
-        T = body.scrollTop;
-        L = body.scrollLeft;
-      }
-      if (w.innerWidth) {
-        W = w.innerWidth;
-        H = w.innerHeight;
-      } else if (w.document.documentElement && documentElement.clientWidth) {
-        W = documentElement.clientWidth;
-        H = documentElement.clientHeight;
-      } else {
-        W = body.offsetWidth;
-        H = body.offsetHeight
-      }
-    }
-    return { top: T, left: L, width: W, height: H };
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var SortableObserver = Class.create();
-SortableObserver.prototype = {
-  initialize: function(element, observer) {
-    this.element   = $(element);
-    this.observer  = observer;
-    this.lastValue = Sortable.serialize(this.element);
-  },
-  
-  onStart: function() {
-    this.lastValue = Sortable.serialize(this.element);
-  },
-  
-  onEnd: function() {
-    Sortable.unmark();
-    if(this.lastValue != Sortable.serialize(this.element))
-      this.observer(this.element)
-  }
-}
-
-var Sortable = {
-  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
-  
-  sortables: {},
-  
-  _findRootElement: function(element) {
-    while (element.tagName.toUpperCase() != "BODY") {  
-      if(element.id && Sortable.sortables[element.id]) return element;
-      element = element.parentNode;
-    }
-  },
-
-  options: function(element) {
-    element = Sortable._findRootElement($(element));
-    if(!element) return;
-    return Sortable.sortables[element.id];
-  },
-  
-  destroy: function(element){
-    var s = Sortable.options(element);
-    
-    if(s) {
-      Draggables.removeObserver(s.element);
-      s.droppables.each(function(d){ Droppables.remove(d) });
-      s.draggables.invoke('destroy');
-      
-      delete Sortable.sortables[s.element.id];
-    }
-  },
-
-  create: function(element) {
-    element = $(element);
-    var options = Object.extend({ 
-      element:     element,
-      tag:         'li',       // assumes li children, override with tag: 'tagname'
-      dropOnEmpty: false,
-      tree:        false,
-      treeTag:     'ul',
-      overlap:     'vertical', // one of 'vertical', 'horizontal'
-      constraint:  'vertical', // one of 'vertical', 'horizontal', false
-      containment: element,    // also takes array of elements (or id's); or false
-      handle:      false,      // or a CSS class
-      only:        false,
-      delay:       0,
-      hoverclass:  null,
-      ghosting:    false,
-      quiet:       false, 
-      scroll:      false,
-      scrollSensitivity: 20,
-      scrollSpeed: 15,
-      format:      this.SERIALIZE_RULE,
-      
-      // these take arrays of elements or ids and can be 
-      // used for better initialization performance
-      elements:    false,
-      handles:     false,
-      
-      onChange:    Prototype.emptyFunction,
-      onUpdate:    Prototype.emptyFunction
-    }, arguments[1] || {});
-
-    // clear any old sortable with same element
-    this.destroy(element);
-
-    // build options for the draggables
-    var options_for_draggable = {
-      revert:      true,
-      quiet:       options.quiet,
-      scroll:      options.scroll,
-      scrollSpeed: options.scrollSpeed,
-      scrollSensitivity: options.scrollSensitivity,
-      delay:       options.delay,
-      ghosting:    options.ghosting,
-      constraint:  options.constraint,
-      handle:      options.handle };
-
-    if(options.starteffect)
-      options_for_draggable.starteffect = options.starteffect;
-
-    if(options.reverteffect)
-      options_for_draggable.reverteffect = options.reverteffect;
-    else
-      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
-        element.style.top  = 0;
-        element.style.left = 0;
-      };
-
-    if(options.endeffect)
-      options_for_draggable.endeffect = options.endeffect;
-
-    if(options.zindex)
-      options_for_draggable.zindex = options.zindex;
-
-    // build options for the droppables  
-    var options_for_droppable = {
-      overlap:     options.overlap,
-      containment: options.containment,
-      tree:        options.tree,
-      hoverclass:  options.hoverclass,
-      onHover:     Sortable.onHover
-    }
-    
-    var options_for_tree = {
-      onHover:      Sortable.onEmptyHover,
-      overlap:      options.overlap,
-      containment:  options.containment,
-      hoverclass:   options.hoverclass
-    }
-
-    // fix for gecko engine
-    Element.cleanWhitespace(element); 
-
-    options.draggables = [];
-    options.droppables = [];
-
-    // drop on empty handling
-    if(options.dropOnEmpty || options.tree) {
-      Droppables.add(element, options_for_tree);
-      options.droppables.push(element);
-    }
-
-    (options.elements || this.findElements(element, options) || []).each( function(e,i) {
-      var handle = options.handles ? $(options.handles[i]) :
-        (options.handle ? $(e).getElementsByClassName(options.handle)[0] : e); 
-      options.draggables.push(
-        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
-      Droppables.add(e, options_for_droppable);
-      if(options.tree) e.treeNode = element;
-      options.droppables.push(e);      
-    });
-    
-    if(options.tree) {
-      (Sortable.findTreeElements(element, options) || []).each( function(e) {
-        Droppables.add(e, options_for_tree);
-        e.treeNode = element;
-        options.droppables.push(e);
-      });
-    }
-
-    // keep reference
-    this.sortables[element.id] = options;
-
-    // for onupdate
-    Draggables.addObserver(new SortableObserver(element, options.onUpdate));
-
-  },
-
-  // return all suitable-for-sortable elements in a guaranteed order
-  findElements: function(element, options) {
-    return Element.findChildren(
-      element, options.only, options.tree ? true : false, options.tag);
-  },
-  
-  findTreeElements: function(element, options) {
-    return Element.findChildren(
-      element, options.only, options.tree ? true : false, options.treeTag);
-  },
-
-  onHover: function(element, dropon, overlap) {
-    if(Element.isParent(dropon, element)) return;
-
-    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
-      return;
-    } else if(overlap>0.5) {
-      Sortable.mark(dropon, 'before');
-      if(dropon.previousSibling != element) {
-        var oldParentNode = element.parentNode;
-        element.style.visibility = "hidden"; // fix gecko rendering
-        dropon.parentNode.insertBefore(element, dropon);
-        if(dropon.parentNode!=oldParentNode) 
-          Sortable.options(oldParentNode).onChange(element);
-        Sortable.options(dropon.parentNode).onChange(element);
-      }
-    } else {
-      Sortable.mark(dropon, 'after');
-      var nextElement = dropon.nextSibling || null;
-      if(nextElement != element) {
-        var oldParentNode = element.parentNode;
-        element.style.visibility = "hidden"; // fix gecko rendering
-        dropon.parentNode.insertBefore(element, nextElement);
-        if(dropon.parentNode!=oldParentNode) 
-          Sortable.options(oldParentNode).onChange(element);
-        Sortable.options(dropon.parentNode).onChange(element);
-      }
-    }
-  },
-  
-  onEmptyHover: function(element, dropon, overlap) {
-    var oldParentNode = element.parentNode;
-    var droponOptions = Sortable.options(dropon);
-        
-    if(!Element.isParent(dropon, element)) {
-      var index;
-      
-      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
-      var child = null;
-            
-      if(children) {
-        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
-        
-        for (index = 0; index < children.length; index += 1) {
-          if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
-            offset -= Element.offsetSize (children[index], droponOptions.overlap);
-          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
-            child = index + 1 < children.length ? children[index + 1] : null;
-            break;
-          } else {
-            child = children[index];
-            break;
-          }
-        }
-      }
-      
-      dropon.insertBefore(element, child);
-      
-      Sortable.options(oldParentNode).onChange(element);
-      droponOptions.onChange(element);
-    }
-  },
-
-  unmark: function() {
-    if(Sortable._marker) Sortable._marker.hide();
-  },
-
-  mark: function(dropon, position) {
-    // mark on ghosting only
-    var sortable = Sortable.options(dropon.parentNode);
-    if(sortable && !sortable.ghosting) return; 
-
-    if(!Sortable._marker) {
-      Sortable._marker = 
-        ($('dropmarker') || Element.extend(document.createElement('DIV'))).
-          hide().addClassName('dropmarker').setStyle({position:'absolute'});
-      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
-    }    
-    var offsets = Position.cumulativeOffset(dropon);
-    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
-    
-    if(position=='after')
-      if(sortable.overlap == 'horizontal') 
-        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
-      else
-        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
-    
-    Sortable._marker.show();
-  },
-  
-  _tree: function(element, options, parent) {
-    var children = Sortable.findElements(element, options) || [];
-  
-    for (var i = 0; i < children.length; ++i) {
-      var match = children[i].id.match(options.format);
-
-      if (!match) continue;
-      
-      var child = {
-        id: encodeURIComponent(match ? match[1] : null),
-        element: element,
-        parent: parent,
-        children: [],
-        position: parent.children.length,
-        container: $(children[i]).down(options.treeTag)
-      }
-      
-      /* Get the element containing the children and recurse over it */
-      if (child.container)
-        this._tree(child.container, options, child)
-      
-      parent.children.push (child);
-    }
-
-    return parent; 
-  },
-
-  tree: function(element) {
-    element = $(element);
-    var sortableOptions = this.options(element);
-    var options = Object.extend({
-      tag: sortableOptions.tag,
-      treeTag: sortableOptions.treeTag,
-      only: sortableOptions.only,
-      name: element.id,
-      format: sortableOptions.format
-    }, arguments[1] || {});
-    
-    var root = {
-      id: null,
-      parent: null,
-      children: [],
-      container: element,
-      position: 0
-    }
-    
-    return Sortable._tree(element, options, root);
-  },
-
-  /* Construct a [i] index for a particular node */
-  _constructIndex: function(node) {
-    var index = '';
-    do {
-      if (node.id) index = '[' + node.position + ']' + index;
-    } while ((node = node.parent) != null);
-    return index;
-  },
-
-  sequence: function(element) {
-    element = $(element);
-    var options = Object.extend(this.options(element), arguments[1] || {});
-    
-    return $(this.findElements(element, options) || []).map( function(item) {
-      return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
-    });
-  },
-
-  setSequence: function(element, new_sequence) {
-    element = $(element);
-    var options = Object.extend(this.options(element), arguments[2] || {});
-    
-    var nodeMap = {};
-    this.findElements(element, options).each( function(n) {
-        if (n.id.match(options.format))
-            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
-        n.parentNode.removeChild(n);
-    });
-   
-    new_sequence.each(function(ident) {
-      var n = nodeMap[ident];
-      if (n) {
-        n[1].appendChild(n[0]);
-        delete nodeMap[ident];
-      }
-    });
-  },
-  
-  serialize: function(element) {
-    element = $(element);
-    var options = Object.extend(Sortable.options(element), arguments[1] || {});
-    var name = encodeURIComponent(
-      (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
-    
-    if (options.tree) {
-      return Sortable.tree(element, arguments[1]).children.map( function (item) {
-        return [name + Sortable._constructIndex(item) + "[id]=" + 
-                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
-      }).flatten().join('&');
-    } else {
-      return Sortable.sequence(element, arguments[1]).map( function(item) {
-        return name + "[]=" + encodeURIComponent(item);
-      }).join('&');
-    }
-  }
-}
-
-// Returns true if child is contained within element
-Element.isParent = function(child, element) {
-  if (!child.parentNode || child == element) return false;
-  if (child.parentNode == element) return true;
-  return Element.isParent(child.parentNode, element);
-}
-
-Element.findChildren = function(element, only, recursive, tagName) {   
-  if(!element.hasChildNodes()) return null;
-  tagName = tagName.toUpperCase();
-  if(only) only = [only].flatten();
-  var elements = [];
-  $A(element.childNodes).each( function(e) {
-    if(e.tagName && e.tagName.toUpperCase()==tagName &&
-      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
-        elements.push(e);
-    if(recursive) {
-      var grandchildren = Element.findChildren(e, only, recursive, tagName);
-      if(grandchildren) elements.push(grandchildren);
-    }
-  });
-
-  return (elements.length>0 ? elements.flatten() : []);
-}
-
-Element.offsetSize = function (element, type) {
-  return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
-}
diff --git a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/effects.js b/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/effects.js
deleted file mode 100644
index 70d0752..0000000
--- a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/effects.js
+++ /dev/null
@@ -1,1094 +0,0 @@
-// script.aculo.us effects.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// Contributors:
-//  Justin Palmer (http://encytemedia.com/)
-//  Mark Pilgrim (http://diveintomark.org/)
-//  Martin Bialasinki
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/ 
-
-// converts rgb() and #xxx to #xxxxxx format,  
-// returns self (or first argument) if not convertable  
-String.prototype.parseColor = function() {  
-  var color = '#';
-  if(this.slice(0,4) == 'rgb(') {  
-    var cols = this.slice(4,this.length-1).split(',');  
-    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
-  } else {  
-    if(this.slice(0,1) == '#') {  
-      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
-      if(this.length==7) color = this.toLowerCase();  
-    }  
-  }  
-  return(color.length==7 ? color : (arguments[0] || this));  
-}
-
-/*--------------------------------------------------------------------------*/
-
-Element.collectTextNodes = function(element) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
-  }).flatten().join('');
-}
-
-Element.collectTextNodesIgnoreClass = function(element, className) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
-        Element.collectTextNodesIgnoreClass(node, className) : ''));
-  }).flatten().join('');
-}
-
-Element.setContentZoom = function(element, percent) {
-  element = $(element);  
-  element.setStyle({fontSize: (percent/100) + 'em'});   
-  if(Prototype.Browser.WebKit) window.scrollBy(0,0);
-  return element;
-}
-
-Element.getInlineOpacity = function(element){
-  return $(element).style.opacity || '';
-}
-
-Element.forceRerendering = function(element) {
-  try {
-    element = $(element);
-    var n = document.createTextNode(' ');
-    element.appendChild(n);
-    element.removeChild(n);
-  } catch(e) { }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Array.prototype.call = function() {
-  var args = arguments;
-  this.each(function(f){ f.apply(this, args) });
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Effect = {
-  _elementDoesNotExistError: {
-    name: 'ElementDoesNotExistError',
-    message: 'The specified DOM element does not exist, but is required for this effect to operate'
-  },
-  tagifyText: function(element) {
-    if(typeof Builder == 'undefined')
-      throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
-      
-    var tagifyStyle = 'position:relative';
-    if(Prototype.Browser.IE) tagifyStyle += ';zoom:1';
-    
-    element = $(element);
-    $A(element.childNodes).each( function(child) {
-      if(child.nodeType==3) {
-        child.nodeValue.toArray().each( function(character) {
-          element.insertBefore(
-            Builder.node('span',{style: tagifyStyle},
-              character == ' ' ? String.fromCharCode(160) : character), 
-              child);
-        });
-        Element.remove(child);
-      }
-    });
-  },
-  multiple: function(element, effect) {
-    var elements;
-    if(((typeof element == 'object') || 
-        (typeof element == 'function')) && 
-       (element.length))
-      elements = element;
-    else
-      elements = $(element).childNodes;
-      
-    var options = Object.extend({
-      speed: 0.1,
-      delay: 0.0
-    }, arguments[2] || {});
-    var masterDelay = options.delay;
-
-    $A(elements).each( function(element, index) {
-      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
-    });
-  },
-  PAIRS: {
-    'slide':  ['SlideDown','SlideUp'],
-    'blind':  ['BlindDown','BlindUp'],
-    'appear': ['Appear','Fade']
-  },
-  toggle: function(element, effect) {
-    element = $(element);
-    effect = (effect || 'appear').toLowerCase();
-    var options = Object.extend({
-      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
-    }, arguments[2] || {});
-    Effect[element.visible() ? 
-      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
-  }
-};
-
-var Effect2 = Effect; // deprecated
-
-/* ------------- transitions ------------- */
-
-Effect.Transitions = {
-  linear: Prototype.K,
-  sinoidal: function(pos) {
-    return (-Math.cos(pos*Math.PI)/2) + 0.5;
-  },
-  reverse: function(pos) {
-    return 1-pos;
-  },
-  flicker: function(pos) {
-    var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
-    return (pos > 1 ? 1 : pos);
-  },
-  wobble: function(pos) {
-    return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
-  },
-  pulse: function(pos, pulses) { 
-    pulses = pulses || 5; 
-    return (
-      Math.round((pos % (1/pulses)) * pulses) == 0 ? 
-            ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 
-        1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))
-      );
-  },
-  none: function(pos) {
-    return 0;
-  },
-  full: function(pos) {
-    return 1;
-  }
-};
-
-/* ------------- core effects ------------- */
-
-Effect.ScopedQueue = Class.create();
-Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
-  initialize: function() {
-    this.effects  = [];
-    this.interval = null;    
-  },
-  _each: function(iterator) {
-    this.effects._each(iterator);
-  },
-  add: function(effect) {
-    var timestamp = new Date().getTime();
-    
-    var position = (typeof effect.options.queue == 'string') ? 
-      effect.options.queue : effect.options.queue.position;
-    
-    switch(position) {
-      case 'front':
-        // move unstarted effects after this effect  
-        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
-            e.startOn  += effect.finishOn;
-            e.finishOn += effect.finishOn;
-          });
-        break;
-      case 'with-last':
-        timestamp = this.effects.pluck('startOn').max() || timestamp;
-        break;
-      case 'end':
-        // start effect after last queued effect has finished
-        timestamp = this.effects.pluck('finishOn').max() || timestamp;
-        break;
-    }
-    
-    effect.startOn  += timestamp;
-    effect.finishOn += timestamp;
-
-    if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
-      this.effects.push(effect);
-    
-    if(!this.interval)
-      this.interval = setInterval(this.loop.bind(this), 15);
-  },
-  remove: function(effect) {
-    this.effects = this.effects.reject(function(e) { return e==effect });
-    if(this.effects.length == 0) {
-      clearInterval(this.interval);
-      this.interval = null;
-    }
-  },
-  loop: function() {
-    var timePos = new Date().getTime();
-    for(var i=0, len=this.effects.length;i<len;i++) 
-      this.effects[i] && this.effects[i].loop(timePos);
-  }
-});
-
-Effect.Queues = {
-  instances: $H(),
-  get: function(queueName) {
-    if(typeof queueName != 'string') return queueName;
-    
-    if(!this.instances[queueName])
-      this.instances[queueName] = new Effect.ScopedQueue();
-      
-    return this.instances[queueName];
-  }
-}
-Effect.Queue = Effect.Queues.get('global');
-
-Effect.DefaultOptions = {
-  transition: Effect.Transitions.sinoidal,
-  duration:   1.0,   // seconds
-  fps:        100,   // 100= assume 66fps max.
-  sync:       false, // true for combining
-  from:       0.0,
-  to:         1.0,
-  delay:      0.0,
-  queue:      'parallel'
-}
-
-Effect.Base = function() {};
-Effect.Base.prototype = {
-  position: null,
-  start: function(options) {
-    function codeForEvent(options,eventName){
-      return (
-        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
-        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
-      );
-    }
-    if(options.transition === false) options.transition = Effect.Transitions.linear;
-    this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
-    this.currentFrame = 0;
-    this.state        = 'idle';
-    this.startOn      = this.options.delay*1000;
-    this.finishOn     = this.startOn+(this.options.duration*1000);
-    this.fromToDelta  = this.options.to-this.options.from;
-    this.totalTime    = this.finishOn-this.startOn;
-    this.totalFrames  = this.options.fps*this.options.duration;
-    
-    eval('this.render = function(pos){ '+
-      'if(this.state=="idle"){this.state="running";'+
-      codeForEvent(options,'beforeSetup')+
-      (this.setup ? 'this.setup();':'')+ 
-      codeForEvent(options,'afterSetup')+
-      '};if(this.state=="running"){'+
-      'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
-      'this.position=pos;'+
-      codeForEvent(options,'beforeUpdate')+
-      (this.update ? 'this.update(pos);':'')+
-      codeForEvent(options,'afterUpdate')+
-      '}}');
-    
-    this.event('beforeStart');
-    if(!this.options.sync)
-      Effect.Queues.get(typeof this.options.queue == 'string' ? 
-        'global' : this.options.queue.scope).add(this);
-  },
-  loop: function(timePos) {
-    if(timePos >= this.startOn) {
-      if(timePos >= this.finishOn) {
-        this.render(1.0);
-        this.cancel();
-        this.event('beforeFinish');
-        if(this.finish) this.finish(); 
-        this.event('afterFinish');
-        return;  
-      }
-      var pos   = (timePos - this.startOn) / this.totalTime,
-          frame = Math.round(pos * this.totalFrames);
-      if(frame > this.currentFrame) {
-        this.render(pos);
-        this.currentFrame = frame;
-      }
-    }
-  },
-  cancel: function() {
-    if(!this.options.sync)
-      Effect.Queues.get(typeof this.options.queue == 'string' ? 
-        'global' : this.options.queue.scope).remove(this);
-    this.state = 'finished';
-  },
-  event: function(eventName) {
-    if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
-    if(this.options[eventName]) this.options[eventName](this);
-  },
-  inspect: function() {
-    var data = $H();
-    for(property in this)
-      if(typeof this[property] != 'function') data[property] = this[property];
-    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
-  }
-}
-
-Effect.Parallel = Class.create();
-Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
-  initialize: function(effects) {
-    this.effects = effects || [];
-    this.start(arguments[1]);
-  },
-  update: function(position) {
-    this.effects.invoke('render', position);
-  },
-  finish: function(position) {
-    this.effects.each( function(effect) {
-      effect.render(1.0);
-      effect.cancel();
-      effect.event('beforeFinish');
-      if(effect.finish) effect.finish(position);
-      effect.event('afterFinish');
-    });
-  }
-});
-
-Effect.Event = Class.create();
-Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), {
-  initialize: function() {
-    var options = Object.extend({
-      duration: 0
-    }, arguments[0] || {});
-    this.start(options);
-  },
-  update: Prototype.emptyFunction
-});
-
-Effect.Opacity = Class.create();
-Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    // make this work on IE on elements without 'layout'
-    if(Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
-      this.element.setStyle({zoom: 1});
-    var options = Object.extend({
-      from: this.element.getOpacity() || 0.0,
-      to:   1.0
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  update: function(position) {
-    this.element.setOpacity(position);
-  }
-});
-
-Effect.Move = Class.create();
-Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      x:    0,
-      y:    0,
-      mode: 'relative'
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function() {
-    // Bug in Opera: Opera returns the "real" position of a static element or
-    // relative element that does not have top/left explicitly set.
-    // ==> Always set top and left for position relative elements in your stylesheets 
-    // (to 0 if you do not need them) 
-    this.element.makePositioned();
-    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
-    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
-    if(this.options.mode == 'absolute') {
-      // absolute movement, so we need to calc deltaX and deltaY
-      this.options.x = this.options.x - this.originalLeft;
-      this.options.y = this.options.y - this.originalTop;
-    }
-  },
-  update: function(position) {
-    this.element.setStyle({
-      left: Math.round(this.options.x  * position + this.originalLeft) + 'px',
-      top:  Math.round(this.options.y  * position + this.originalTop)  + 'px'
-    });
-  }
-});
-
-// for backwards compatibility
-Effect.MoveBy = function(element, toTop, toLeft) {
-  return new Effect.Move(element, 
-    Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
-};
-
-Effect.Scale = Class.create();
-Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
-  initialize: function(element, percent) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      scaleX: true,
-      scaleY: true,
-      scaleContent: true,
-      scaleFromCenter: false,
-      scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
-      scaleFrom: 100.0,
-      scaleTo:   percent
-    }, arguments[2] || {});
-    this.start(options);
-  },
-  setup: function() {
-    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
-    this.elementPositioning = this.element.getStyle('position');
-    
-    this.originalStyle = {};
-    ['top','left','width','height','fontSize'].each( function(k) {
-      this.originalStyle[k] = this.element.style[k];
-    }.bind(this));
-      
-    this.originalTop  = this.element.offsetTop;
-    this.originalLeft = this.element.offsetLeft;
-    
-    var fontSize = this.element.getStyle('font-size') || '100%';
-    ['em','px','%','pt'].each( function(fontSizeType) {
-      if(fontSize.indexOf(fontSizeType)>0) {
-        this.fontSize     = parseFloat(fontSize);
-        this.fontSizeType = fontSizeType;
-      }
-    }.bind(this));
-    
-    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
-    
-    this.dims = null;
-    if(this.options.scaleMode=='box')
-      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
-    if(/^content/.test(this.options.scaleMode))
-      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
-    if(!this.dims)
-      this.dims = [this.options.scaleMode.originalHeight,
-                   this.options.scaleMode.originalWidth];
-  },
-  update: function(position) {
-    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
-    if(this.options.scaleContent && this.fontSize)
-      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
-    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
-  },
-  finish: function(position) {
-    if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
-  },
-  setDimensions: function(height, width) {
-    var d = {};
-    if(this.options.scaleX) d.width = Math.round(width) + 'px';
-    if(this.options.scaleY) d.height = Math.round(height) + 'px';
-    if(this.options.scaleFromCenter) {
-      var topd  = (height - this.dims[0])/2;
-      var leftd = (width  - this.dims[1])/2;
-      if(this.elementPositioning == 'absolute') {
-        if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
-        if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
-      } else {
-        if(this.options.scaleY) d.top = -topd + 'px';
-        if(this.options.scaleX) d.left = -leftd + 'px';
-      }
-    }
-    this.element.setStyle(d);
-  }
-});
-
-Effect.Highlight = Class.create();
-Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function() {
-    // Prevent executing on elements not in the layout flow
-    if(this.element.getStyle('display')=='none') { this.cancel(); return; }
-    // Disable background image during the effect
-    this.oldStyle = {};
-    if (!this.options.keepBackgroundImage) {
-      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
-      this.element.setStyle({backgroundImage: 'none'});
-    }
-    if(!this.options.endcolor)
-      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
-    if(!this.options.restorecolor)
-      this.options.restorecolor = this.element.getStyle('background-color');
-    // init color calculations
-    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
-    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
-  },
-  update: function(position) {
-    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
-      return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
-  },
-  finish: function() {
-    this.element.setStyle(Object.extend(this.oldStyle, {
-      backgroundColor: this.options.restorecolor
-    }));
-  }
-});
-
-Effect.ScrollTo = Class.create();
-Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    this.start(arguments[1] || {});
-  },
-  setup: function() {
-    Position.prepare();
-    var offsets = Position.cumulativeOffset(this.element);
-    if(this.options.offset) offsets[1] += this.options.offset;
-    var max = window.innerHeight ? 
-      window.height - window.innerHeight :
-      document.body.scrollHeight - 
-        (document.documentElement.clientHeight ? 
-          document.documentElement.clientHeight : document.body.clientHeight);
-    this.scrollStart = Position.deltaY;
-    this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
-  },
-  update: function(position) {
-    Position.prepare();
-    window.scrollTo(Position.deltaX, 
-      this.scrollStart + (position*this.delta));
-  }
-});
-
-/* ------------- combination effects ------------- */
-
-Effect.Fade = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  var options = Object.extend({
-  from: element.getOpacity() || 1.0,
-  to:   0.0,
-  afterFinishInternal: function(effect) { 
-    if(effect.options.to!=0) return;
-    effect.element.hide().setStyle({opacity: oldOpacity}); 
-  }}, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Appear = function(element) {
-  element = $(element);
-  var options = Object.extend({
-  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
-  to:   1.0,
-  // force Safari to render floated elements properly
-  afterFinishInternal: function(effect) {
-    effect.element.forceRerendering();
-  },
-  beforeSetup: function(effect) {
-    effect.element.setOpacity(effect.options.from).show(); 
-  }}, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Puff = function(element) {
-  element = $(element);
-  var oldStyle = { 
-    opacity: element.getInlineOpacity(), 
-    position: element.getStyle('position'),
-    top:  element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height
-  };
-  return new Effect.Parallel(
-   [ new Effect.Scale(element, 200, 
-      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
-     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
-     Object.extend({ duration: 1.0, 
-      beforeSetupInternal: function(effect) {
-        Position.absolutize(effect.effects[0].element)
-      },
-      afterFinishInternal: function(effect) {
-         effect.effects[0].element.hide().setStyle(oldStyle); }
-     }, arguments[1] || {})
-   );
-}
-
-Effect.BlindUp = function(element) {
-  element = $(element);
-  element.makeClipping();
-  return new Effect.Scale(element, 0,
-    Object.extend({ scaleContent: false, 
-      scaleX: false, 
-      restoreAfterFinish: true,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping();
-      } 
-    }, arguments[1] || {})
-  );
-}
-
-Effect.BlindDown = function(element) {
-  element = $(element);
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false,
-    scaleFrom: 0,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping();
-    }
-  }, arguments[1] || {}));
-}
-
-Effect.SwitchOff = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  return new Effect.Appear(element, Object.extend({
-    duration: 0.4,
-    from: 0,
-    transition: Effect.Transitions.flicker,
-    afterFinishInternal: function(effect) {
-      new Effect.Scale(effect.element, 1, { 
-        duration: 0.3, scaleFromCenter: true,
-        scaleX: false, scaleContent: false, restoreAfterFinish: true,
-        beforeSetup: function(effect) { 
-          effect.element.makePositioned().makeClipping();
-        },
-        afterFinishInternal: function(effect) {
-          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
-        }
-      })
-    }
-  }, arguments[1] || {}));
-}
-
-Effect.DropOut = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left'),
-    opacity: element.getInlineOpacity() };
-  return new Effect.Parallel(
-    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
-      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
-    Object.extend(
-      { duration: 0.5,
-        beforeSetup: function(effect) {
-          effect.effects[0].element.makePositioned(); 
-        },
-        afterFinishInternal: function(effect) {
-          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
-        } 
-      }, arguments[1] || {}));
-}
-
-Effect.Shake = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left') };
-    return new Effect.Move(element, 
-      { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-        effect.element.undoPositioned().setStyle(oldStyle);
-  }}) }}) }}) }}) }}) }});
-}
-
-Effect.SlideDown = function(element) {
-  element = $(element).cleanWhitespace();
-  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
-  var oldInnerBottom = element.down().getStyle('bottom');
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false, 
-    scaleFrom: window.opera ? 0 : 1,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if(window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping().undoPositioned();
-      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
-    }, arguments[1] || {})
-  );
-}
-
-Effect.SlideUp = function(element) {
-  element = $(element).cleanWhitespace();
-  var oldInnerBottom = element.down().getStyle('bottom');
-  return new Effect.Scale(element, window.opera ? 0 : 1,
-   Object.extend({ scaleContent: false, 
-    scaleX: false, 
-    scaleMode: 'box',
-    scaleFrom: 100,
-    restoreAfterFinish: true,
-    beforeStartInternal: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if(window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().show();
-    },  
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' });
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
-      effect.element.down().undoPositioned();
-    }
-   }, arguments[1] || {})
-  );
-}
-
-// Bug in opera makes the TD containing this element expand for a instance after finish 
-Effect.Squish = function(element) {
-  return new Effect.Scale(element, window.opera ? 1 : 0, { 
-    restoreAfterFinish: true,
-    beforeSetup: function(effect) {
-      effect.element.makeClipping(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping(); 
-    }
-  });
-}
-
-Effect.Grow = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.full
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();    
-  var initialMoveX, initialMoveY;
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      initialMoveX = initialMoveY = moveX = moveY = 0; 
-      break;
-    case 'top-right':
-      initialMoveX = dims.width;
-      initialMoveY = moveY = 0;
-      moveX = -dims.width;
-      break;
-    case 'bottom-left':
-      initialMoveX = moveX = 0;
-      initialMoveY = dims.height;
-      moveY = -dims.height;
-      break;
-    case 'bottom-right':
-      initialMoveX = dims.width;
-      initialMoveY = dims.height;
-      moveX = -dims.width;
-      moveY = -dims.height;
-      break;
-    case 'center':
-      initialMoveX = dims.width / 2;
-      initialMoveY = dims.height / 2;
-      moveX = -dims.width / 2;
-      moveY = -dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Move(element, {
-    x: initialMoveX,
-    y: initialMoveY,
-    duration: 0.01, 
-    beforeSetup: function(effect) {
-      effect.element.hide().makeClipping().makePositioned();
-    },
-    afterFinishInternal: function(effect) {
-      new Effect.Parallel(
-        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
-          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
-          new Effect.Scale(effect.element, 100, {
-            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
-            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
-        ], Object.extend({
-             beforeSetup: function(effect) {
-               effect.effects[0].element.setStyle({height: '0px'}).show(); 
-             },
-             afterFinishInternal: function(effect) {
-               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
-             }
-           }, options)
-      )
-    }
-  });
-}
-
-Effect.Shrink = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.none
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      moveX = moveY = 0;
-      break;
-    case 'top-right':
-      moveX = dims.width;
-      moveY = 0;
-      break;
-    case 'bottom-left':
-      moveX = 0;
-      moveY = dims.height;
-      break;
-    case 'bottom-right':
-      moveX = dims.width;
-      moveY = dims.height;
-      break;
-    case 'center':  
-      moveX = dims.width / 2;
-      moveY = dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Parallel(
-    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
-      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
-      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
-    ], Object.extend({            
-         beforeStartInternal: function(effect) {
-           effect.effects[0].element.makePositioned().makeClipping(); 
-         },
-         afterFinishInternal: function(effect) {
-           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
-       }, options)
-  );
-}
-
-Effect.Pulsate = function(element) {
-  element = $(element);
-  var options    = arguments[1] || {};
-  var oldOpacity = element.getInlineOpacity();
-  var transition = options.transition || Effect.Transitions.sinoidal;
-  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
-  reverser.bind(transition);
-  return new Effect.Opacity(element, 
-    Object.extend(Object.extend({  duration: 2.0, from: 0,
-      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
-    }, options), {transition: reverser}));
-}
-
-Effect.Fold = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height };
-  element.makeClipping();
-  return new Effect.Scale(element, 5, Object.extend({   
-    scaleContent: false,
-    scaleX: false,
-    afterFinishInternal: function(effect) {
-    new Effect.Scale(element, 1, { 
-      scaleContent: false, 
-      scaleY: false,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping().setStyle(oldStyle);
-      } });
-  }}, arguments[1] || {}));
-};
-
-Effect.Morph = Class.create();
-Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      style: {}
-    }, arguments[1] || {});
-    if (typeof options.style == 'string') {
-      if(options.style.indexOf(':') == -1) {
-        var cssText = '', selector = '.' + options.style;
-        $A(document.styleSheets).reverse().each(function(styleSheet) {
-          if (styleSheet.cssRules) cssRules = styleSheet.cssRules;
-          else if (styleSheet.rules) cssRules = styleSheet.rules;
-          $A(cssRules).reverse().each(function(rule) {
-            if (selector == rule.selectorText) {
-              cssText = rule.style.cssText;
-              throw $break;
-            }
-          });
-          if (cssText) throw $break;
-        });
-        this.style = cssText.parseStyle();
-        options.afterFinishInternal = function(effect){
-          effect.element.addClassName(effect.options.style);
-          effect.transforms.each(function(transform) {
-            if(transform.style != 'opacity')
-              effect.element.style[transform.style] = '';
-          });
-        }
-      } else this.style = options.style.parseStyle();
-    } else this.style = $H(options.style)
-    this.start(options);
-  },
-  setup: function(){
-    function parseColor(color){
-      if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
-      color = color.parseColor();
-      return $R(0,2).map(function(i){
-        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
-      });
-    }
-    this.transforms = this.style.map(function(pair){
-      var property = pair[0], value = pair[1], unit = null;
-
-      if(value.parseColor('#zzzzzz') != '#zzzzzz') {
-        value = value.parseColor();
-        unit  = 'color';
-      } else if(property == 'opacity') {
-        value = parseFloat(value);
-        if(Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
-          this.element.setStyle({zoom: 1});
-      } else if(Element.CSS_LENGTH.test(value)) {
-          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
-          value = parseFloat(components[1]);
-          unit = (components.length == 3) ? components[2] : null;
-      }
-
-      var originalValue = this.element.getStyle(property);
-      return { 
-        style: property.camelize(), 
-        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
-        targetValue: unit=='color' ? parseColor(value) : value,
-        unit: unit
-      };
-    }.bind(this)).reject(function(transform){
-      return (
-        (transform.originalValue == transform.targetValue) ||
-        (
-          transform.unit != 'color' &&
-          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
-        )
-      )
-    });
-  },
-  update: function(position) {
-    var style = {}, transform, i = this.transforms.length;
-    while(i--)
-      style[(transform = this.transforms[i]).style] = 
-        transform.unit=='color' ? '#'+
-          (Math.round(transform.originalValue[0]+
-            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
-          (Math.round(transform.originalValue[1]+
-            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
-          (Math.round(transform.originalValue[2]+
-            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
-        transform.originalValue + Math.round(
-          ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit;
-    this.element.setStyle(style, true);
-  }
-});
-
-Effect.Transform = Class.create();
-Object.extend(Effect.Transform.prototype, {
-  initialize: function(tracks){
-    this.tracks  = [];
-    this.options = arguments[1] || {};
-    this.addTracks(tracks);
-  },
-  addTracks: function(tracks){
-    tracks.each(function(track){
-      var data = $H(track).values().first();
-      this.tracks.push($H({
-        ids:     $H(track).keys().first(),
-        effect:  Effect.Morph,
-        options: { style: data }
-      }));
-    }.bind(this));
-    return this;
-  },
-  play: function(){
-    return new Effect.Parallel(
-      this.tracks.map(function(track){
-        var elements = [$(track.ids) || $$(track.ids)].flatten();
-        return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
-      }).flatten(),
-      this.options
-    );
-  }
-});
-
-Element.CSS_PROPERTIES = $w(
-  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
-  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
-  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
-  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
-  'fontSize fontWeight height left letterSpacing lineHeight ' +
-  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
-  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
-  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
-  'right textIndent top width wordSpacing zIndex');
-  
-Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
-
-String.prototype.parseStyle = function(){
-  var element = document.createElement('div');
-  element.innerHTML = '<div style="' + this + '"></div>';
-  var style = element.childNodes[0].style, styleRules = $H();
-  
-  Element.CSS_PROPERTIES.each(function(property){
-    if(style[property]) styleRules[property] = style[property]; 
-  });
-  if(Prototype.Browser.IE && this.indexOf('opacity') > -1) {
-    styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];
-  }
-  return styleRules;
-};
-
-Element.morph = function(element, style) {
-  new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {}));
-  return element;
-};
-
-['getInlineOpacity','forceRerendering','setContentZoom',
- 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( 
-  function(f) { Element.Methods[f] = Element[f]; }
-);
-
-Element.Methods.visualEffect = function(element, effect, options) {
-  s = effect.dasherize().camelize();
-  effect_class = s.charAt(0).toUpperCase() + s.substring(1);
-  new Effect[effect_class](element, options);
-  return $(element);
-};
-
-Element.addMethods();
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/prototype.js b/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/prototype.js
deleted file mode 100644
index fc40193..0000000
--- a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/prototype.js
+++ /dev/null
@@ -1,3274 +0,0 @@
-/*  Prototype JavaScript framework, version 1.5.1
- *  (c) 2005-2007 Sam Stephenson
- *
- *  Prototype is freely distributable under the terms of an MIT-style license.
- *  For details, see the Prototype web site: http://www.prototypejs.org/
- *
-/*--------------------------------------------------------------------------*/
-
-var Prototype = {
-  Version: '1.5.1',
-
-  Browser: {
-    IE:     !!(window.attachEvent && !window.opera),
-    Opera:  !!window.opera,
-    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
-    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1
-  },
-
-  BrowserFeatures: {
-    XPath: !!document.evaluate,
-    ElementExtensions: !!window.HTMLElement,
-    SpecificElementExtensions:
-      (document.createElement('div').__proto__ !==
-       document.createElement('form').__proto__)
-  },
-
-  ScriptFragment: '<script[^>]*>([\u0001-\uFFFF]*?)</script>',
-  JSONFilter: /^\/\*-secure-\s*(.*)\s*\*\/\s*$/,
-
-  emptyFunction: function() { },
-  K: function(x) { return x }
-}
-
-var Class = {
-  create: function() {
-    return function() {
-      this.initialize.apply(this, arguments);
-    }
-  }
-}
-
-var Abstract = new Object();
-
-Object.extend = function(destination, source) {
-  for (var property in source) {
-    destination[property] = source[property];
-  }
-  return destination;
-}
-
-Object.extend(Object, {
-  inspect: function(object) {
-    try {
-      if (object === undefined) return 'undefined';
-      if (object === null) return 'null';
-      return object.inspect ? object.inspect() : object.toString();
-    } catch (e) {
-      if (e instanceof RangeError) return '...';
-      throw e;
-    }
-  },
-
-  toJSON: function(object) {
-    var type = typeof object;
-    switch(type) {
-      case 'undefined':
-      case 'function':
-      case 'unknown': return;
-      case 'boolean': return object.toString();
-    }
-    if (object === null) return 'null';
-    if (object.toJSON) return object.toJSON();
-    if (object.ownerDocument === document) return;
-    var results = [];
-    for (var property in object) {
-      var value = Object.toJSON(object[property]);
-      if (value !== undefined)
-        results.push(property.toJSON() + ': ' + value);
-    }
-    return '{' + results.join(', ') + '}';
-  },
-
-  keys: function(object) {
-    var keys = [];
-    for (var property in object)
-      keys.push(property);
-    return keys;
-  },
-
-  values: function(object) {
-    var values = [];
-    for (var property in object)
-      values.push(object[property]);
-    return values;
-  },
-
-  clone: function(object) {
-    return Object.extend({}, object);
-  }
-});
-
-Function.prototype.bind = function() {
-  var __method = this, args = $A(arguments), object = args.shift();
-  return function() {
-    return __method.apply(object, args.concat($A(arguments)));
-  }
-}
-
-Function.prototype.bindAsEventListener = function(object) {
-  var __method = this, args = $A(arguments), object = args.shift();
-  return function(event) {
-    return __method.apply(object, [event || window.event].concat(args));
-  }
-}
-
-Object.extend(Number.prototype, {
-  toColorPart: function() {
-    return this.toPaddedString(2, 16);
-  },
-
-  succ: function() {
-    return this + 1;
-  },
-
-  times: function(iterator) {
-    $R(0, this, true).each(iterator);
-    return this;
-  },
-
-  toPaddedString: function(length, radix) {
-    var string = this.toString(radix || 10);
-    return '0'.times(length - string.length) + string;
-  },
-
-  toJSON: function() {
-    return isFinite(this) ? this.toString() : 'null';
-  }
-});
-
-Date.prototype.toJSON = function() {
-  return '"' + this.getFullYear() + '-' +
-    (this.getMonth() + 1).toPaddedString(2) + '-' +
-    this.getDate().toPaddedString(2) + 'T' +
-    this.getHours().toPaddedString(2) + ':' +
-    this.getMinutes().toPaddedString(2) + ':' +
-    this.getSeconds().toPaddedString(2) + '"';
-};
-
-var Try = {
-  these: function() {
-    var returnValue;
-
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      var lambda = arguments[i];
-      try {
-        returnValue = lambda();
-        break;
-      } catch (e) {}
-    }
-
-    return returnValue;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var PeriodicalExecuter = Class.create();
-PeriodicalExecuter.prototype = {
-  initialize: function(callback, frequency) {
-    this.callback = callback;
-    this.frequency = frequency;
-    this.currentlyExecuting = false;
-
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  stop: function() {
-    if (!this.timer) return;
-    clearInterval(this.timer);
-    this.timer = null;
-  },
-
-  onTimerEvent: function() {
-    if (!this.currentlyExecuting) {
-      try {
-        this.currentlyExecuting = true;
-        this.callback(this);
-      } finally {
-        this.currentlyExecuting = false;
-      }
-    }
-  }
-}
-Object.extend(String, {
-  interpret: function(value) {
-    return value == null ? '' : String(value);
-  },
-  specialChar: {
-    '\b': '\\b',
-    '\t': '\\t',
-    '\n': '\\n',
-    '\f': '\\f',
-    '\r': '\\r',
-    '\\': '\\\\'
-  }
-});
-
-Object.extend(String.prototype, {
-  gsub: function(pattern, replacement) {
-    var result = '', source = this, match;
-    replacement = arguments.callee.prepareReplacement(replacement);
-
-    while (source.length > 0) {
-      if (match = source.match(pattern)) {
-        result += source.slice(0, match.index);
-        result += String.interpret(replacement(match));
-        source  = source.slice(match.index + match[0].length);
-      } else {
-        result += source, source = '';
-      }
-    }
-    return result;
-  },
-
-  sub: function(pattern, replacement, count) {
-    replacement = this.gsub.prepareReplacement(replacement);
-    count = count === undefined ? 1 : count;
-
-    return this.gsub(pattern, function(match) {
-      if (--count < 0) return match[0];
-      return replacement(match);
-    });
-  },
-
-  scan: function(pattern, iterator) {
-    this.gsub(pattern, iterator);
-    return this;
-  },
-
-  truncate: function(length, truncation) {
-    length = length || 30;
-    truncation = truncation === undefined ? '...' : truncation;
-    return this.length > length ?
-      this.slice(0, length - truncation.length) + truncation : this;
-  },
-
-  strip: function() {
-    return this.replace(/^\s+/, '').replace(/\s+$/, '');
-  },
-
-  stripTags: function() {
-    return this.replace(/<\/?[^>]+>/gi, '');
-  },
-
-  stripScripts: function() {
-    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
-  },
-
-  extractScripts: function() {
-    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
-    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
-    return (this.match(matchAll) || []).map(function(scriptTag) {
-      return (scriptTag.match(matchOne) || ['', ''])[1];
-    });
-  },
-
-  evalScripts: function() {
-    return this.extractScripts().map(function(script) { return eval(script) });
-  },
-
-  escapeHTML: function() {
-    var self = arguments.callee;
-    self.text.data = this;
-    return self.div.innerHTML;
-  },
-
-  unescapeHTML: function() {
-    var div = document.createElement('div');
-    div.innerHTML = this.stripTags();
-    return div.childNodes[0] ? (div.childNodes.length > 1 ?
-      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
-      div.childNodes[0].nodeValue) : '';
-  },
-
-  toQueryParams: function(separator) {
-    var match = this.strip().match(/([^?#]*)(#.*)?$/);
-    if (!match) return {};
-
-    return match[1].split(separator || '&').inject({}, function(hash, pair) {
-      if ((pair = pair.split('='))[0]) {
-        var key = decodeURIComponent(pair.shift());
-        var value = pair.length > 1 ? pair.join('=') : pair[0];
-        if (value != undefined) value = decodeURIComponent(value);
-
-        if (key in hash) {
-          if (hash[key].constructor != Array) hash[key] = [hash[key]];
-          hash[key].push(value);
-        }
-        else hash[key] = value;
-      }
-      return hash;
-    });
-  },
-
-  toArray: function() {
-    return this.split('');
-  },
-
-  succ: function() {
-    return this.slice(0, this.length - 1) +
-      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
-  },
-
-  times: function(count) {
-    var result = '';
-    for (var i = 0; i < count; i++) result += this;
-    return result;
-  },
-
-  camelize: function() {
-    var parts = this.split('-'), len = parts.length;
-    if (len == 1) return parts[0];
-
-    var camelized = this.charAt(0) == '-'
-      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
-      : parts[0];
-
-    for (var i = 1; i < len; i++)
-      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
-
-    return camelized;
-  },
-
-  capitalize: function() {
-    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
-  },
-
-  underscore: function() {
-    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
-  },
-
-  dasherize: function() {
-    return this.gsub(/_/,'-');
-  },
-
-  inspect: function(useDoubleQuotes) {
-    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
-      var character = String.specialChar[match[0]];
-      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
-    });
-    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
-    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
-  },
-
-  toJSON: function() {
-    return this.inspect(true);
-  },
-
-  unfilterJSON: function(filter) {
-    return this.sub(filter || Prototype.JSONFilter, '#{1}');
-  },
-
-  evalJSON: function(sanitize) {
-    var json = this.unfilterJSON();
-    try {
-      if (!sanitize || (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(json)))
-        return eval('(' + json + ')');
-    } catch (e) { }
-    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
-  },
-
-  include: function(pattern) {
-    return this.indexOf(pattern) > -1;
-  },
-
-  startsWith: function(pattern) {
-    return this.indexOf(pattern) === 0;
-  },
-
-  endsWith: function(pattern) {
-    var d = this.length - pattern.length;
-    return d >= 0 && this.lastIndexOf(pattern) === d;
-  },
-
-  empty: function() {
-    return this == '';
-  },
-
-  blank: function() {
-    return /^\s*$/.test(this);
-  }
-});
-
-if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
-  escapeHTML: function() {
-    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
-  },
-  unescapeHTML: function() {
-    return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
-  }
-});
-
-String.prototype.gsub.prepareReplacement = function(replacement) {
-  if (typeof replacement == 'function') return replacement;
-  var template = new Template(replacement);
-  return function(match) { return template.evaluate(match) };
-}
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-Object.extend(String.prototype.escapeHTML, {
-  div:  document.createElement('div'),
-  text: document.createTextNode('')
-});
-
-with (String.prototype.escapeHTML) div.appendChild(text);
-
-var Template = Class.create();
-Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
-Template.prototype = {
-  initialize: function(template, pattern) {
-    this.template = template.toString();
-    this.pattern  = pattern || Template.Pattern;
-  },
-
-  evaluate: function(object) {
-    return this.template.gsub(this.pattern, function(match) {
-      var before = match[1];
-      if (before == '\\') return match[2];
-      return before + String.interpret(object[match[3]]);
-    });
-  }
-}
-
-var $break = {}, $continue = new Error('"throw $continue" is deprecated, use "return" instead');
-
-var Enumerable = {
-  each: function(iterator) {
-    var index = 0;
-    try {
-      this._each(function(value) {
-        iterator(value, index++);
-      });
-    } catch (e) {
-      if (e != $break) throw e;
-    }
-    return this;
-  },
-
-  eachSlice: function(number, iterator) {
-    var index = -number, slices = [], array = this.toArray();
-    while ((index += number) < array.length)
-      slices.push(array.slice(index, index+number));
-    return slices.map(iterator);
-  },
-
-  all: function(iterator) {
-    var result = true;
-    this.each(function(value, index) {
-      result = result && !!(iterator || Prototype.K)(value, index);
-      if (!result) throw $break;
-    });
-    return result;
-  },
-
-  any: function(iterator) {
-    var result = false;
-    this.each(function(value, index) {
-      if (result = !!(iterator || Prototype.K)(value, index))
-        throw $break;
-    });
-    return result;
-  },
-
-  collect: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push((iterator || Prototype.K)(value, index));
-    });
-    return results;
-  },
-
-  detect: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      if (iterator(value, index)) {
-        result = value;
-        throw $break;
-      }
-    });
-    return result;
-  },
-
-  findAll: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  grep: function(pattern, iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      var stringValue = value.toString();
-      if (stringValue.match(pattern))
-        results.push((iterator || Prototype.K)(value, index));
-    })
-    return results;
-  },
-
-  include: function(object) {
-    var found = false;
-    this.each(function(value) {
-      if (value == object) {
-        found = true;
-        throw $break;
-      }
-    });
-    return found;
-  },
-
-  inGroupsOf: function(number, fillWith) {
-    fillWith = fillWith === undefined ? null : fillWith;
-    return this.eachSlice(number, function(slice) {
-      while(slice.length < number) slice.push(fillWith);
-      return slice;
-    });
-  },
-
-  inject: function(memo, iterator) {
-    this.each(function(value, index) {
-      memo = iterator(memo, value, index);
-    });
-    return memo;
-  },
-
-  invoke: function(method) {
-    var args = $A(arguments).slice(1);
-    return this.map(function(value) {
-      return value[method].apply(value, args);
-    });
-  },
-
-  max: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (result == undefined || value >= result)
-        result = value;
-    });
-    return result;
-  },
-
-  min: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (result == undefined || value < result)
-        result = value;
-    });
-    return result;
-  },
-
-  partition: function(iterator) {
-    var trues = [], falses = [];
-    this.each(function(value, index) {
-      ((iterator || Prototype.K)(value, index) ?
-        trues : falses).push(value);
-    });
-    return [trues, falses];
-  },
-
-  pluck: function(property) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push(value[property]);
-    });
-    return results;
-  },
-
-  reject: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (!iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  sortBy: function(iterator) {
-    return this.map(function(value, index) {
-      return {value: value, criteria: iterator(value, index)};
-    }).sort(function(left, right) {
-      var a = left.criteria, b = right.criteria;
-      return a < b ? -1 : a > b ? 1 : 0;
-    }).pluck('value');
-  },
-
-  toArray: function() {
-    return this.map();
-  },
-
-  zip: function() {
-    var iterator = Prototype.K, args = $A(arguments);
-    if (typeof args.last() == 'function')
-      iterator = args.pop();
-
-    var collections = [this].concat(args).map($A);
-    return this.map(function(value, index) {
-      return iterator(collections.pluck(index));
-    });
-  },
-
-  size: function() {
-    return this.toArray().length;
-  },
-
-  inspect: function() {
-    return '#<Enumerable:' + this.toArray().inspect() + '>';
-  }
-}
-
-Object.extend(Enumerable, {
-  map:     Enumerable.collect,
-  find:    Enumerable.detect,
-  select:  Enumerable.findAll,
-  member:  Enumerable.include,
-  entries: Enumerable.toArray
-});
-var $A = Array.from = function(iterable) {
-  if (!iterable) return [];
-  if (iterable.toArray) {
-    return iterable.toArray();
-  } else {
-    var results = [];
-    for (var i = 0, length = iterable.length; i < length; i++)
-      results.push(iterable[i]);
-    return results;
-  }
-}
-
-if (Prototype.Browser.WebKit) {
-  $A = Array.from = function(iterable) {
-    if (!iterable) return [];
-    if (!(typeof iterable == 'function' && iterable == '[object NodeList]') &&
-      iterable.toArray) {
-      return iterable.toArray();
-    } else {
-      var results = [];
-      for (var i = 0, length = iterable.length; i < length; i++)
-        results.push(iterable[i]);
-      return results;
-    }
-  }
-}
-
-Object.extend(Array.prototype, Enumerable);
-
-if (!Array.prototype._reverse)
-  Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
-  _each: function(iterator) {
-    for (var i = 0, length = this.length; i < length; i++)
-      iterator(this[i]);
-  },
-
-  clear: function() {
-    this.length = 0;
-    return this;
-  },
-
-  first: function() {
-    return this[0];
-  },
-
-  last: function() {
-    return this[this.length - 1];
-  },
-
-  compact: function() {
-    return this.select(function(value) {
-      return value != null;
-    });
-  },
-
-  flatten: function() {
-    return this.inject([], function(array, value) {
-      return array.concat(value && value.constructor == Array ?
-        value.flatten() : [value]);
-    });
-  },
-
-  without: function() {
-    var values = $A(arguments);
-    return this.select(function(value) {
-      return !values.include(value);
-    });
-  },
-
-  indexOf: function(object) {
-    for (var i = 0, length = this.length; i < length; i++)
-      if (this[i] == object) return i;
-    return -1;
-  },
-
-  reverse: function(inline) {
-    return (inline !== false ? this : this.toArray())._reverse();
-  },
-
-  reduce: function() {
-    return this.length > 1 ? this : this[0];
-  },
-
-  uniq: function(sorted) {
-    return this.inject([], function(array, value, index) {
-      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
-        array.push(value);
-      return array;
-    });
-  },
-
-  clone: function() {
-    return [].concat(this);
-  },
-
-  size: function() {
-    return this.length;
-  },
-
-  inspect: function() {
-    return '[' + this.map(Object.inspect).join(', ') + ']';
-  },
-
-  toJSON: function() {
-    var results = [];
-    this.each(function(object) {
-      var value = Object.toJSON(object);
-      if (value !== undefined) results.push(value);
-    });
-    return '[' + results.join(', ') + ']';
-  }
-});
-
-Array.prototype.toArray = Array.prototype.clone;
-
-function $w(string) {
-  string = string.strip();
-  return string ? string.split(/\s+/) : [];
-}
-
-if (Prototype.Browser.Opera){
-  Array.prototype.concat = function() {
-    var array = [];
-    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      if (arguments[i].constructor == Array) {
-        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
-          array.push(arguments[i][j]);
-      } else {
-        array.push(arguments[i]);
-      }
-    }
-    return array;
-  }
-}
-var Hash = function(object) {
-  if (object instanceof Hash) this.merge(object);
-  else Object.extend(this, object || {});
-};
-
-Object.extend(Hash, {
-  toQueryString: function(obj) {
-    var parts = [];
-    parts.add = arguments.callee.addPair;
-
-    this.prototype._each.call(obj, function(pair) {
-      if (!pair.key) return;
-      var value = pair.value;
-
-      if (value && typeof value == 'object') {
-        if (value.constructor == Array) value.each(function(value) {
-          parts.add(pair.key, value);
-        });
-        return;
-      }
-      parts.add(pair.key, value);
-    });
-
-    return parts.join('&');
-  },
-
-  toJSON: function(object) {
-    var results = [];
-    this.prototype._each.call(object, function(pair) {
-      var value = Object.toJSON(pair.value);
-      if (value !== undefined) results.push(pair.key.toJSON() + ': ' + value);
-    });
-    return '{' + results.join(', ') + '}';
-  }
-});
-
-Hash.toQueryString.addPair = function(key, value, prefix) {
-  key = encodeURIComponent(key);
-  if (value === undefined) this.push(key);
-  else this.push(key + '=' + (value == null ? '' : encodeURIComponent(value)));
-}
-
-Object.extend(Hash.prototype, Enumerable);
-Object.extend(Hash.prototype, {
-  _each: function(iterator) {
-    for (var key in this) {
-      var value = this[key];
-      if (value && value == Hash.prototype[key]) continue;
-
-      var pair = [key, value];
-      pair.key = key;
-      pair.value = value;
-      iterator(pair);
-    }
-  },
-
-  keys: function() {
-    return this.pluck('key');
-  },
-
-  values: function() {
-    return this.pluck('value');
-  },
-
-  merge: function(hash) {
-    return $H(hash).inject(this, function(mergedHash, pair) {
-      mergedHash[pair.key] = pair.value;
-      return mergedHash;
-    });
-  },
-
-  remove: function() {
-    var result;
-    for(var i = 0, length = arguments.length; i < length; i++) {
-      var value = this[arguments[i]];
-      if (value !== undefined){
-        if (result === undefined) result = value;
-        else {
-          if (result.constructor != Array) result = [result];
-          result.push(value)
-        }
-      }
-      delete this[arguments[i]];
-    }
-    return result;
-  },
-
-  toQueryString: function() {
-    return Hash.toQueryString(this);
-  },
-
-  inspect: function() {
-    return '#<Hash:{' + this.map(function(pair) {
-      return pair.map(Object.inspect).join(': ');
-    }).join(', ') + '}>';
-  },
-
-  toJSON: function() {
-    return Hash.toJSON(this);
-  }
-});
-
-function $H(object) {
-  if (object instanceof Hash) return object;
-  return new Hash(object);
-};
-
-// Safari iterates over shadowed properties
-if (function() {
-  var i = 0, Test = function(value) { this.key = value };
-  Test.prototype.key = 'foo';
-  for (var property in new Test('bar')) i++;
-  return i > 1;
-}()) Hash.prototype._each = function(iterator) {
-  var cache = [];
-  for (var key in this) {
-    var value = this[key];
-    if ((value && value == Hash.prototype[key]) || cache.include(key)) continue;
-    cache.push(key);
-    var pair = [key, value];
-    pair.key = key;
-    pair.value = value;
-    iterator(pair);
-  }
-};
-ObjectRange = Class.create();
-Object.extend(ObjectRange.prototype, Enumerable);
-Object.extend(ObjectRange.prototype, {
-  initialize: function(start, end, exclusive) {
-    this.start = start;
-    this.end = end;
-    this.exclusive = exclusive;
-  },
-
-  _each: function(iterator) {
-    var value = this.start;
-    while (this.include(value)) {
-      iterator(value);
-      value = value.succ();
-    }
-  },
-
-  include: function(value) {
-    if (value < this.start)
-      return false;
-    if (this.exclusive)
-      return value < this.end;
-    return value <= this.end;
-  }
-});
-
-var $R = function(start, end, exclusive) {
-  return new ObjectRange(start, end, exclusive);
-}
-
-var Ajax = {
-  getTransport: function() {
-    return Try.these(
-      function() {return new XMLHttpRequest()},
-      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
-      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
-    ) || false;
-  },
-
-  activeRequestCount: 0
-}
-
-Ajax.Responders = {
-  responders: [],
-
-  _each: function(iterator) {
-    this.responders._each(iterator);
-  },
-
-  register: function(responder) {
-    if (!this.include(responder))
-      this.responders.push(responder);
-  },
-
-  unregister: function(responder) {
-    this.responders = this.responders.without(responder);
-  },
-
-  dispatch: function(callback, request, transport, json) {
-    this.each(function(responder) {
-      if (typeof responder[callback] == 'function') {
-        try {
-          responder[callback].apply(responder, [request, transport, json]);
-        } catch (e) {}
-      }
-    });
-  }
-};
-
-Object.extend(Ajax.Responders, Enumerable);
-
-Ajax.Responders.register({
-  onCreate: function() {
-    Ajax.activeRequestCount++;
-  },
-  onComplete: function() {
-    Ajax.activeRequestCount--;
-  }
-});
-
-Ajax.Base = function() {};
-Ajax.Base.prototype = {
-  setOptions: function(options) {
-    this.options = {
-      method:       'post',
-      asynchronous: true,
-      contentType:  'application/x-www-form-urlencoded',
-      encoding:     'UTF-8',
-      parameters:   ''
-    }
-    Object.extend(this.options, options || {});
-
-    this.options.method = this.options.method.toLowerCase();
-    if (typeof this.options.parameters == 'string')
-      this.options.parameters = this.options.parameters.toQueryParams();
-  }
-}
-
-Ajax.Request = Class.create();
-Ajax.Request.Events =
-  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
-  _complete: false,
-
-  initialize: function(url, options) {
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-    this.request(url);
-  },
-
-  request: function(url) {
-    this.url = url;
-    this.method = this.options.method;
-    var params = Object.clone(this.options.parameters);
-
-    if (!['get', 'post'].include(this.method)) {
-      // simulate other verbs over post
-      params['_method'] = this.method;
-      this.method = 'post';
-    }
-
-    this.parameters = params;
-
-    if (params = Hash.toQueryString(params)) {
-      // when GET, append parameters to URL
-      if (this.method == 'get')
-        this.url += (this.url.include('?') ? '&' : '?') + params;
-      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
-        params += '&_=';
-    }
-
-    try {
-      if (this.options.onCreate) this.options.onCreate(this.transport);
-      Ajax.Responders.dispatch('onCreate', this, this.transport);
-
-      this.transport.open(this.method.toUpperCase(), this.url,
-        this.options.asynchronous);
-
-      if (this.options.asynchronous)
-        setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);
-
-      this.transport.onreadystatechange = this.onStateChange.bind(this);
-      this.setRequestHeaders();
-
-      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
-      this.transport.send(this.body);
-
-      /* Force Firefox to handle ready state 4 for synchronous requests */
-      if (!this.options.asynchronous && this.transport.overrideMimeType)
-        this.onStateChange();
-
-    }
-    catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  onStateChange: function() {
-    var readyState = this.transport.readyState;
-    if (readyState > 1 && !((readyState == 4) && this._complete))
-      this.respondToReadyState(this.transport.readyState);
-  },
-
-  setRequestHeaders: function() {
-    var headers = {
-      'X-Requested-With': 'XMLHttpRequest',
-      'X-Prototype-Version': Prototype.Version,
-      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
-    };
-
-    if (this.method == 'post') {
-      headers['Content-type'] = this.options.contentType +
-        (this.options.encoding ? '; charset=' + this.options.encoding : '');
-
-      /* Force "Connection: close" for older Mozilla browsers to work
-       * around a bug where XMLHttpRequest sends an incorrect
-       * Content-length header. See Mozilla Bugzilla #246651.
-       */
-      if (this.transport.overrideMimeType &&
-          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
-            headers['Connection'] = 'close';
-    }
-
-    // user-defined headers
-    if (typeof this.options.requestHeaders == 'object') {
-      var extras = this.options.requestHeaders;
-
-      if (typeof extras.push == 'function')
-        for (var i = 0, length = extras.length; i < length; i += 2)
-          headers[extras[i]] = extras[i+1];
-      else
-        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
-    }
-
-    for (var name in headers)
-      this.transport.setRequestHeader(name, headers[name]);
-  },
-
-  success: function() {
-    return !this.transport.status
-        || (this.transport.status >= 200 && this.transport.status < 300);
-  },
-
-  respondToReadyState: function(readyState) {
-    var state = Ajax.Request.Events[readyState];
-    var transport = this.transport, json = this.evalJSON();
-
-    if (state == 'Complete') {
-      try {
-        this._complete = true;
-        (this.options['on' + this.transport.status]
-         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
-         || Prototype.emptyFunction)(transport, json);
-      } catch (e) {
-        this.dispatchException(e);
-      }
-
-      var contentType = this.getHeader('Content-type');
-      if (contentType && contentType.strip().
-        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
-          this.evalResponse();
-    }
-
-    try {
-      (this.options['on' + state] || Prototype.emptyFunction)(transport, json);
-      Ajax.Responders.dispatch('on' + state, this, transport, json);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-
-    if (state == 'Complete') {
-      // avoid memory leak in MSIE: clean up
-      this.transport.onreadystatechange = Prototype.emptyFunction;
-    }
-  },
-
-  getHeader: function(name) {
-    try {
-      return this.transport.getResponseHeader(name);
-    } catch (e) { return null }
-  },
-
-  evalJSON: function() {
-    try {
-      var json = this.getHeader('X-JSON');
-      return json ? json.evalJSON() : null;
-    } catch (e) { return null }
-  },
-
-  evalResponse: function() {
-    try {
-      return eval((this.transport.responseText || '').unfilterJSON());
-    } catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  dispatchException: function(exception) {
-    (this.options.onException || Prototype.emptyFunction)(this, exception);
-    Ajax.Responders.dispatch('onException', this, exception);
-  }
-});
-
-Ajax.Updater = Class.create();
-
-Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
-  initialize: function(container, url, options) {
-    this.container = {
-      success: (container.success || container),
-      failure: (container.failure || (container.success ? null : container))
-    }
-
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-
-    var onComplete = this.options.onComplete || Prototype.emptyFunction;
-    this.options.onComplete = (function(transport, param) {
-      this.updateContent();
-      onComplete(transport, param);
-    }).bind(this);
-
-    this.request(url);
-  },
-
-  updateContent: function() {
-    var receiver = this.container[this.success() ? 'success' : 'failure'];
-    var response = this.transport.responseText;
-
-    if (!this.options.evalScripts) response = response.stripScripts();
-
-    if (receiver = $(receiver)) {
-      if (this.options.insertion)
-        new this.options.insertion(receiver, response);
-      else
-        receiver.update(response);
-    }
-
-    if (this.success()) {
-      if (this.onComplete)
-        setTimeout(this.onComplete.bind(this), 10);
-    }
-  }
-});
-
-Ajax.PeriodicalUpdater = Class.create();
-Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
-  initialize: function(container, url, options) {
-    this.setOptions(options);
-    this.onComplete = this.options.onComplete;
-
-    this.frequency = (this.options.frequency || 2);
-    this.decay = (this.options.decay || 1);
-
-    this.updater = {};
-    this.container = container;
-    this.url = url;
-
-    this.start();
-  },
-
-  start: function() {
-    this.options.onComplete = this.updateComplete.bind(this);
-    this.onTimerEvent();
-  },
-
-  stop: function() {
-    this.updater.options.onComplete = undefined;
-    clearTimeout(this.timer);
-    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
-  },
-
-  updateComplete: function(request) {
-    if (this.options.decay) {
-      this.decay = (request.responseText == this.lastText ?
-        this.decay * this.options.decay : 1);
-
-      this.lastText = request.responseText;
-    }
-    this.timer = setTimeout(this.onTimerEvent.bind(this),
-      this.decay * this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    this.updater = new Ajax.Updater(this.container, this.url, this.options);
-  }
-});
-function $(element) {
-  if (arguments.length > 1) {
-    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
-      elements.push($(arguments[i]));
-    return elements;
-  }
-  if (typeof element == 'string')
-    element = document.getElementById(element);
-  return Element.extend(element);
-}
-
-if (Prototype.BrowserFeatures.XPath) {
-  document._getElementsByXPath = function(expression, parentElement) {
-    var results = [];
-    var query = document.evaluate(expression, $(parentElement) || document,
-      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
-    for (var i = 0, length = query.snapshotLength; i < length; i++)
-      results.push(query.snapshotItem(i));
-    return results;
-  };
-
-  document.getElementsByClassName = function(className, parentElement) {
-    var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
-    return document._getElementsByXPath(q, parentElement);
-  }
-
-} else document.getElementsByClassName = function(className, parentElement) {
-  var children = ($(parentElement) || document.body).getElementsByTagName('*');
-  var elements = [], child;
-  for (var i = 0, length = children.length; i < length; i++) {
-    child = children[i];
-    if (Element.hasClassName(child, className))
-      elements.push(Element.extend(child));
-  }
-  return elements;
-};
-
-/*--------------------------------------------------------------------------*/
-
-if (!window.Element) var Element = {};
-
-Element.extend = function(element) {
-  var F = Prototype.BrowserFeatures;
-  if (!element || !element.tagName || element.nodeType == 3 ||
-   element._extended || F.SpecificElementExtensions || element == window)
-    return element;
-
-  var methods = {}, tagName = element.tagName, cache = Element.extend.cache,
-   T = Element.Methods.ByTag;
-
-  // extend methods for all tags (Safari doesn't need this)
-  if (!F.ElementExtensions) {
-    Object.extend(methods, Element.Methods),
-    Object.extend(methods, Element.Methods.Simulated);
-  }
-
-  // extend methods for specific tags
-  if (T[tagName]) Object.extend(methods, T[tagName]);
-
-  for (var property in methods) {
-    var value = methods[property];
-    if (typeof value == 'function' && !(property in element))
-      element[property] = cache.findOrStore(value);
-  }
-
-  element._extended = Prototype.emptyFunction;
-  return element;
-};
-
-Element.extend.cache = {
-  findOrStore: function(value) {
-    return this[value] = this[value] || function() {
-      return value.apply(null, [this].concat($A(arguments)));
-    }
-  }
-};
-
-Element.Methods = {
-  visible: function(element) {
-    return $(element).style.display != 'none';
-  },
-
-  toggle: function(element) {
-    element = $(element);
-    Element[Element.visible(element) ? 'hide' : 'show'](element);
-    return element;
-  },
-
-  hide: function(element) {
-    $(element).style.display = 'none';
-    return element;
-  },
-
-  show: function(element) {
-    $(element).style.display = '';
-    return element;
-  },
-
-  remove: function(element) {
-    element = $(element);
-    element.parentNode.removeChild(element);
-    return element;
-  },
-
-  update: function(element, html) {
-    html = typeof html == 'undefined' ? '' : html.toString();
-    $(element).innerHTML = html.stripScripts();
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  },
-
-  replace: function(element, html) {
-    element = $(element);
-    html = typeof html == 'undefined' ? '' : html.toString();
-    if (element.outerHTML) {
-      element.outerHTML = html.stripScripts();
-    } else {
-      var range = element.ownerDocument.createRange();
-      range.selectNodeContents(element);
-      element.parentNode.replaceChild(
-        range.createContextualFragment(html.stripScripts()), element);
-    }
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  },
-
-  inspect: function(element) {
-    element = $(element);
-    var result = '<' + element.tagName.toLowerCase();
-    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
-      var property = pair.first(), attribute = pair.last();
-      var value = (element[property] || '').toString();
-      if (value) result += ' ' + attribute + '=' + value.inspect(true);
-    });
-    return result + '>';
-  },
-
-  recursivelyCollect: function(element, property) {
-    element = $(element);
-    var elements = [];
-    while (element = element[property])
-      if (element.nodeType == 1)
-        elements.push(Element.extend(element));
-    return elements;
-  },
-
-  ancestors: function(element) {
-    return $(element).recursivelyCollect('parentNode');
-  },
-
-  descendants: function(element) {
-    return $A($(element).getElementsByTagName('*')).each(Element.extend);
-  },
-
-  firstDescendant: function(element) {
-    element = $(element).firstChild;
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    return $(element);
-  },
-
-  immediateDescendants: function(element) {
-    if (!(element = $(element).firstChild)) return [];
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    if (element) return [element].concat($(element).nextSiblings());
-    return [];
-  },
-
-  previousSiblings: function(element) {
-    return $(element).recursivelyCollect('previousSibling');
-  },
-
-  nextSiblings: function(element) {
-    return $(element).recursivelyCollect('nextSibling');
-  },
-
-  siblings: function(element) {
-    element = $(element);
-    return element.previousSiblings().reverse().concat(element.nextSiblings());
-  },
-
-  match: function(element, selector) {
-    if (typeof selector == 'string')
-      selector = new Selector(selector);
-    return selector.match($(element));
-  },
-
-  up: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(element.parentNode);
-    var ancestors = element.ancestors();
-    return expression ? Selector.findElement(ancestors, expression, index) :
-      ancestors[index || 0];
-  },
-
-  down: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return element.firstDescendant();
-    var descendants = element.descendants();
-    return expression ? Selector.findElement(descendants, expression, index) :
-      descendants[index || 0];
-  },
-
-  previous: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
-    var previousSiblings = element.previousSiblings();
-    return expression ? Selector.findElement(previousSiblings, expression, index) :
-      previousSiblings[index || 0];
-  },
-
-  next: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
-    var nextSiblings = element.nextSiblings();
-    return expression ? Selector.findElement(nextSiblings, expression, index) :
-      nextSiblings[index || 0];
-  },
-
-  getElementsBySelector: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element, args);
-  },
-
-  getElementsByClassName: function(element, className) {
-    return document.getElementsByClassName(className, element);
-  },
-
-  readAttribute: function(element, name) {
-    element = $(element);
-    if (Prototype.Browser.IE) {
-      if (!element.attributes) return null;
-      var t = Element._attributeTranslations;
-      if (t.values[name]) return t.values[name](element, name);
-      if (t.names[name])  name = t.names[name];
-      var attribute = element.attributes[name];
-      return attribute ? attribute.nodeValue : null;
-    }
-    return element.getAttribute(name);
-  },
-
-  getHeight: function(element) {
-    return $(element).getDimensions().height;
-  },
-
-  getWidth: function(element) {
-    return $(element).getDimensions().width;
-  },
-
-  classNames: function(element) {
-    return new Element.ClassNames(element);
-  },
-
-  hasClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    var elementClassName = element.className;
-    if (elementClassName.length == 0) return false;
-    if (elementClassName == className ||
-        elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
-      return true;
-    return false;
-  },
-
-  addClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element).add(className);
-    return element;
-  },
-
-  removeClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element).remove(className);
-    return element;
-  },
-
-  toggleClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className);
-    return element;
-  },
-
-  observe: function() {
-    Event.observe.apply(Event, arguments);
-    return $A(arguments).first();
-  },
-
-  stopObserving: function() {
-    Event.stopObserving.apply(Event, arguments);
-    return $A(arguments).first();
-  },
-
-  // removes whitespace-only text node children
-  cleanWhitespace: function(element) {
-    element = $(element);
-    var node = element.firstChild;
-    while (node) {
-      var nextNode = node.nextSibling;
-      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
-        element.removeChild(node);
-      node = nextNode;
-    }
-    return element;
-  },
-
-  empty: function(element) {
-    return $(element).innerHTML.blank();
-  },
-
-  descendantOf: function(element, ancestor) {
-    element = $(element), ancestor = $(ancestor);
-    while (element = element.parentNode)
-      if (element == ancestor) return true;
-    return false;
-  },
-
-  scrollTo: function(element) {
-    element = $(element);
-    var pos = Position.cumulativeOffset(element);
-    window.scrollTo(pos[0], pos[1]);
-    return element;
-  },
-
-  getStyle: function(element, style) {
-    element = $(element);
-    style = style == 'float' ? 'cssFloat' : style.camelize();
-    var value = element.style[style];
-    if (!value) {
-      var css = document.defaultView.getComputedStyle(element, null);
-      value = css ? css[style] : null;
-    }
-    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
-    return value == 'auto' ? null : value;
-  },
-
-  getOpacity: function(element) {
-    return $(element).getStyle('opacity');
-  },
-
-  setStyle: function(element, styles, camelized) {
-    element = $(element);
-    var elementStyle = element.style;
-
-    for (var property in styles)
-      if (property == 'opacity') element.setOpacity(styles[property])
-      else
-        elementStyle[(property == 'float' || property == 'cssFloat') ?
-          (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
-          (camelized ? property : property.camelize())] = styles[property];
-
-    return element;
-  },
-
-  setOpacity: function(element, value) {
-    element = $(element);
-    element.style.opacity = (value == 1 || value === '') ? '' :
-      (value < 0.00001) ? 0 : value;
-    return element;
-  },
-
-  getDimensions: function(element) {
-    element = $(element);
-    var display = $(element).getStyle('display');
-    if (display != 'none' && display != null) // Safari bug
-      return {width: element.offsetWidth, height: element.offsetHeight};
-
-    // All *Width and *Height properties give 0 on elements with display none,
-    // so enable the element temporarily
-    var els = element.style;
-    var originalVisibility = els.visibility;
-    var originalPosition = els.position;
-    var originalDisplay = els.display;
-    els.visibility = 'hidden';
-    els.position = 'absolute';
-    els.display = 'block';
-    var originalWidth = element.clientWidth;
-    var originalHeight = element.clientHeight;
-    els.display = originalDisplay;
-    els.position = originalPosition;
-    els.visibility = originalVisibility;
-    return {width: originalWidth, height: originalHeight};
-  },
-
-  makePositioned: function(element) {
-    element = $(element);
-    var pos = Element.getStyle(element, 'position');
-    if (pos == 'static' || !pos) {
-      element._madePositioned = true;
-      element.style.position = 'relative';
-      // Opera returns the offset relative to the positioning context, when an
-      // element is position relative but top and left have not been defined
-      if (window.opera) {
-        element.style.top = 0;
-        element.style.left = 0;
-      }
-    }
-    return element;
-  },
-
-  undoPositioned: function(element) {
-    element = $(element);
-    if (element._madePositioned) {
-      element._madePositioned = undefined;
-      element.style.position =
-        element.style.top =
-        element.style.left =
-        element.style.bottom =
-        element.style.right = '';
-    }
-    return element;
-  },
-
-  makeClipping: function(element) {
-    element = $(element);
-    if (element._overflow) return element;
-    element._overflow = element.style.overflow || 'auto';
-    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
-      element.style.overflow = 'hidden';
-    return element;
-  },
-
-  undoClipping: function(element) {
-    element = $(element);
-    if (!element._overflow) return element;
-    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
-    element._overflow = null;
-    return element;
-  }
-};
-
-Object.extend(Element.Methods, {
-  childOf: Element.Methods.descendantOf,
-  childElements: Element.Methods.immediateDescendants
-});
-
-if (Prototype.Browser.Opera) {
-  Element.Methods._getStyle = Element.Methods.getStyle;
-  Element.Methods.getStyle = function(element, style) {
-    switch(style) {
-      case 'left':
-      case 'top':
-      case 'right':
-      case 'bottom':
-        if (Element._getStyle(element, 'position') == 'static') return null;
-      default: return Element._getStyle(element, style);
-    }
-  };
-}
-else if (Prototype.Browser.IE) {
-  Element.Methods.getStyle = function(element, style) {
-    element = $(element);
-    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
-    var value = element.style[style];
-    if (!value && element.currentStyle) value = element.currentStyle[style];
-
-    if (style == 'opacity') {
-      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
-        if (value[1]) return parseFloat(value[1]) / 100;
-      return 1.0;
-    }
-
-    if (value == 'auto') {
-      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
-        return element['offset'+style.capitalize()] + 'px';
-      return null;
-    }
-    return value;
-  };
-
-  Element.Methods.setOpacity = function(element, value) {
-    element = $(element);
-    var filter = element.getStyle('filter'), style = element.style;
-    if (value == 1 || value === '') {
-      style.filter = filter.replace(/alpha\([^\)]*\)/gi,'');
-      return element;
-    } else if (value < 0.00001) value = 0;
-    style.filter = filter.replace(/alpha\([^\)]*\)/gi, '') +
-      'alpha(opacity=' + (value * 100) + ')';
-    return element;
-  };
-
-  // IE is missing .innerHTML support for TABLE-related elements
-  Element.Methods.update = function(element, html) {
-    element = $(element);
-    html = typeof html == 'undefined' ? '' : html.toString();
-    var tagName = element.tagName.toUpperCase();
-    if (['THEAD','TBODY','TR','TD'].include(tagName)) {
-      var div = document.createElement('div');
-      switch (tagName) {
-        case 'THEAD':
-        case 'TBODY':
-          div.innerHTML = '<table><tbody>' +  html.stripScripts() + '</tbody></table>';
-          depth = 2;
-          break;
-        case 'TR':
-          div.innerHTML = '<table><tbody><tr>' +  html.stripScripts() + '</tr></tbody></table>';
-          depth = 3;
-          break;
-        case 'TD':
-          div.innerHTML = '<table><tbody><tr><td>' +  html.stripScripts() + '</td></tr></tbody></table>';
-          depth = 4;
-      }
-      $A(element.childNodes).each(function(node) { element.removeChild(node) });
-      depth.times(function() { div = div.firstChild });
-      $A(div.childNodes).each(function(node) { element.appendChild(node) });
-    } else {
-      element.innerHTML = html.stripScripts();
-    }
-    setTimeout(function() { html.evalScripts() }, 10);
-    return element;
-  }
-}
-else if (Prototype.Browser.Gecko) {
-  Element.Methods.setOpacity = function(element, value) {
-    element = $(element);
-    element.style.opacity = (value == 1) ? 0.999999 :
-      (value === '') ? '' : (value < 0.00001) ? 0 : value;
-    return element;
-  };
-}
-
-Element._attributeTranslations = {
-  names: {
-    colspan:   "colSpan",
-    rowspan:   "rowSpan",
-    valign:    "vAlign",
-    datetime:  "dateTime",
-    accesskey: "accessKey",
-    tabindex:  "tabIndex",
-    enctype:   "encType",
-    maxlength: "maxLength",
-    readonly:  "readOnly",
-    longdesc:  "longDesc"
-  },
-  values: {
-    _getAttr: function(element, attribute) {
-      return element.getAttribute(attribute, 2);
-    },
-    _flag: function(element, attribute) {
-      return $(element).hasAttribute(attribute) ? attribute : null;
-    },
-    style: function(element) {
-      return element.style.cssText.toLowerCase();
-    },
-    title: function(element) {
-      var node = element.getAttributeNode('title');
-      return node.specified ? node.nodeValue : null;
-    }
-  }
-};
-
-(function() {
-  Object.extend(this, {
-    href: this._getAttr,
-    src:  this._getAttr,
-    type: this._getAttr,
-    disabled: this._flag,
-    checked:  this._flag,
-    readonly: this._flag,
-    multiple: this._flag
-  });
-}).call(Element._attributeTranslations.values);
-
-Element.Methods.Simulated = {
-  hasAttribute: function(element, attribute) {
-    var t = Element._attributeTranslations, node;
-    attribute = t.names[attribute] || attribute;
-    node = $(element).getAttributeNode(attribute);
-    return node && node.specified;
-  }
-};
-
-Element.Methods.ByTag = {};
-
-Object.extend(Element, Element.Methods);
-
-if (!Prototype.BrowserFeatures.ElementExtensions &&
- document.createElement('div').__proto__) {
-  window.HTMLElement = {};
-  window.HTMLElement.prototype = document.createElement('div').__proto__;
-  Prototype.BrowserFeatures.ElementExtensions = true;
-}
-
-Element.hasAttribute = function(element, attribute) {
-  if (element.hasAttribute) return element.hasAttribute(attribute);
-  return Element.Methods.Simulated.hasAttribute(element, attribute);
-};
-
-Element.addMethods = function(methods) {
-  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
-
-  if (!methods) {
-    Object.extend(Form, Form.Methods);
-    Object.extend(Form.Element, Form.Element.Methods);
-    Object.extend(Element.Methods.ByTag, {
-      "FORM":     Object.clone(Form.Methods),
-      "INPUT":    Object.clone(Form.Element.Methods),
-      "SELECT":   Object.clone(Form.Element.Methods),
-      "TEXTAREA": Object.clone(Form.Element.Methods)
-    });
-  }
-
-  if (arguments.length == 2) {
-    var tagName = methods;
-    methods = arguments[1];
-  }
-
-  if (!tagName) Object.extend(Element.Methods, methods || {});
-  else {
-    if (tagName.constructor == Array) tagName.each(extend);
-    else extend(tagName);
-  }
-
-  function extend(tagName) {
-    tagName = tagName.toUpperCase();
-    if (!Element.Methods.ByTag[tagName])
-      Element.Methods.ByTag[tagName] = {};
-    Object.extend(Element.Methods.ByTag[tagName], methods);
-  }
-
-  function copy(methods, destination, onlyIfAbsent) {
-    onlyIfAbsent = onlyIfAbsent || false;
-    var cache = Element.extend.cache;
-    for (var property in methods) {
-      var value = methods[property];
-      if (!onlyIfAbsent || !(property in destination))
-        destination[property] = cache.findOrStore(value);
-    }
-  }
-
-  function findDOMClass(tagName) {
-    var klass;
-    var trans = {
-      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
-      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
-      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
-      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
-      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
-      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
-      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
-      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
-      "FrameSet", "IFRAME": "IFrame"
-    };
-    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
-    if (window[klass]) return window[klass];
-    klass = 'HTML' + tagName + 'Element';
-    if (window[klass]) return window[klass];
-    klass = 'HTML' + tagName.capitalize() + 'Element';
-    if (window[klass]) return window[klass];
-
-    window[klass] = {};
-    window[klass].prototype = document.createElement(tagName).__proto__;
-    return window[klass];
-  }
-
-  if (F.ElementExtensions) {
-    copy(Element.Methods, HTMLElement.prototype);
-    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
-  }
-
-  if (F.SpecificElementExtensions) {
-    for (var tag in Element.Methods.ByTag) {
-      var klass = findDOMClass(tag);
-      if (typeof klass == "undefined") continue;
-      copy(T[tag], klass.prototype);
-    }
-  }
-
-  Object.extend(Element, Element.Methods);
-  delete Element.ByTag;
-};
-
-var Toggle = { display: Element.toggle };
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.Insertion = function(adjacency) {
-  this.adjacency = adjacency;
-}
-
-Abstract.Insertion.prototype = {
-  initialize: function(element, content) {
-    this.element = $(element);
-    this.content = content.stripScripts();
-
-    if (this.adjacency && this.element.insertAdjacentHTML) {
-      try {
-        this.element.insertAdjacentHTML(this.adjacency, this.content);
-      } catch (e) {
-        var tagName = this.element.tagName.toUpperCase();
-        if (['TBODY', 'TR'].include(tagName)) {
-          this.insertContent(this.contentFromAnonymousTable());
-        } else {
-          throw e;
-        }
-      }
-    } else {
-      this.range = this.element.ownerDocument.createRange();
-      if (this.initializeRange) this.initializeRange();
-      this.insertContent([this.range.createContextualFragment(this.content)]);
-    }
-
-    setTimeout(function() {content.evalScripts()}, 10);
-  },
-
-  contentFromAnonymousTable: function() {
-    var div = document.createElement('div');
-    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
-    return $A(div.childNodes[0].childNodes[0].childNodes);
-  }
-}
-
-var Insertion = new Object();
-
-Insertion.Before = Class.create();
-Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
-  initializeRange: function() {
-    this.range.setStartBefore(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment, this.element);
-    }).bind(this));
-  }
-});
-
-Insertion.Top = Class.create();
-Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(true);
-  },
-
-  insertContent: function(fragments) {
-    fragments.reverse(false).each((function(fragment) {
-      this.element.insertBefore(fragment, this.element.firstChild);
-    }).bind(this));
-  }
-});
-
-Insertion.Bottom = Class.create();
-Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.appendChild(fragment);
-    }).bind(this));
-  }
-});
-
-Insertion.After = Class.create();
-Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
-  initializeRange: function() {
-    this.range.setStartAfter(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment,
-        this.element.nextSibling);
-    }).bind(this));
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
-  initialize: function(element) {
-    this.element = $(element);
-  },
-
-  _each: function(iterator) {
-    this.element.className.split(/\s+/).select(function(name) {
-      return name.length > 0;
-    })._each(iterator);
-  },
-
-  set: function(className) {
-    this.element.className = className;
-  },
-
-  add: function(classNameToAdd) {
-    if (this.include(classNameToAdd)) return;
-    this.set($A(this).concat(classNameToAdd).join(' '));
-  },
-
-  remove: function(classNameToRemove) {
-    if (!this.include(classNameToRemove)) return;
-    this.set($A(this).without(classNameToRemove).join(' '));
-  },
-
-  toString: function() {
-    return $A(this).join(' ');
-  }
-};
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
- * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
- * license.  Please see http://www.yui-ext.com/ for more information. */
-
-var Selector = Class.create();
-
-Selector.prototype = {
-  initialize: function(expression) {
-    this.expression = expression.strip();
-    this.compileMatcher();
-  },
-
-  compileMatcher: function() {
-    // Selectors with namespaced attributes can't use the XPath version
-    if (Prototype.BrowserFeatures.XPath && !(/\[[\w-]*?:/).test(this.expression))
-      return this.compileXPathMatcher();
-
-    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
-        c = Selector.criteria, le, p, m;
-
-    if (Selector._cache[e]) {
-      this.matcher = Selector._cache[e]; return;
-    }
-    this.matcher = ["this.matcher = function(root) {",
-                    "var r = root, h = Selector.handlers, c = false, n;"];
-
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        p = ps[i];
-        if (m = e.match(p)) {
-          this.matcher.push(typeof c[i] == 'function' ? c[i](m) :
-    	      new Template(c[i]).evaluate(m));
-          e = e.replace(m[0], '');
-          break;
-        }
-      }
-    }
-
-    this.matcher.push("return h.unique(n);\n}");
-    eval(this.matcher.join('\n'));
-    Selector._cache[this.expression] = this.matcher;
-  },
-
-  compileXPathMatcher: function() {
-    var e = this.expression, ps = Selector.patterns,
-        x = Selector.xpath, le,  m;
-
-    if (Selector._cache[e]) {
-      this.xpath = Selector._cache[e]; return;
-    }
-
-    this.matcher = ['.//*'];
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        if (m = e.match(ps[i])) {
-          this.matcher.push(typeof x[i] == 'function' ? x[i](m) :
-            new Template(x[i]).evaluate(m));
-          e = e.replace(m[0], '');
-          break;
-        }
-      }
-    }
-
-    this.xpath = this.matcher.join('');
-    Selector._cache[this.expression] = this.xpath;
-  },
-
-  findElements: function(root) {
-    root = root || document;
-    if (this.xpath) return document._getElementsByXPath(this.xpath, root);
-    return this.matcher(root);
-  },
-
-  match: function(element) {
-    return this.findElements(document).include(element);
-  },
-
-  toString: function() {
-    return this.expression;
-  },
-
-  inspect: function() {
-    return "#<Selector:" + this.expression.inspect() + ">";
-  }
-};
-
-Object.extend(Selector, {
-  _cache: {},
-
-  xpath: {
-    descendant:   "//*",
-    child:        "/*",
-    adjacent:     "/following-sibling::*[1]",
-    laterSibling: '/following-sibling::*',
-    tagName:      function(m) {
-      if (m[1] == '*') return '';
-      return "[local-name()='" + m[1].toLowerCase() +
-             "' or local-name()='" + m[1].toUpperCase() + "']";
-    },
-    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
-    id:           "[@id='#{1}']",
-    attrPresence: "[@#{1}]",
-    attr: function(m) {
-      m[3] = m[5] || m[6];
-      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
-    },
-    pseudo: function(m) {
-      var h = Selector.xpath.pseudos[m[1]];
-      if (!h) return '';
-      if (typeof h === 'function') return h(m);
-      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
-    },
-    operators: {
-      '=':  "[@#{1}='#{3}']",
-      '!=': "[@#{1}!='#{3}']",
-      '^=': "[starts-with(@#{1}, '#{3}')]",
-      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
-      '*=': "[contains(@#{1}, '#{3}')]",
-      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
-      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
-    },
-    pseudos: {
-      'first-child': '[not(preceding-sibling::*)]',
-      'last-child':  '[not(following-sibling::*)]',
-      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
-      'empty':       "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
-      'checked':     "[@checked]",
-      'disabled':    "[@disabled]",
-      'enabled':     "[not(@disabled)]",
-      'not': function(m) {
-        var e = m[6], p = Selector.patterns,
-            x = Selector.xpath, le, m, v;
-
-        var exclusion = [];
-        while (e && le != e && (/\S/).test(e)) {
-          le = e;
-          for (var i in p) {
-            if (m = e.match(p[i])) {
-              v = typeof x[i] == 'function' ? x[i](m) : new Template(x[i]).evaluate(m);
-              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
-              e = e.replace(m[0], '');
-              break;
-            }
-          }
-        }
-        return "[not(" + exclusion.join(" and ") + ")]";
-      },
-      'nth-child':      function(m) {
-        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
-      },
-      'nth-last-child': function(m) {
-        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
-      },
-      'nth-of-type':    function(m) {
-        return Selector.xpath.pseudos.nth("position() ", m);
-      },
-      'nth-last-of-type': function(m) {
-        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
-      },
-      'first-of-type':  function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
-      },
-      'last-of-type':   function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
-      },
-      'only-of-type':   function(m) {
-        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
-      },
-      nth: function(fragment, m) {
-        var mm, formula = m[6], predicate;
-        if (formula == 'even') formula = '2n+0';
-        if (formula == 'odd')  formula = '2n+1';
-        if (mm = formula.match(/^(\d+)$/)) // digit only
-          return '[' + fragment + "= " + mm[1] + ']';
-        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-          if (mm[1] == "-") mm[1] = -1;
-          var a = mm[1] ? Number(mm[1]) : 1;
-          var b = mm[2] ? Number(mm[2]) : 0;
-          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
-          "((#{fragment} - #{b}) div #{a} >= 0)]";
-          return new Template(predicate).evaluate({
-            fragment: fragment, a: a, b: b });
-        }
-      }
-    }
-  },
-
-  criteria: {
-    tagName:      'n = h.tagName(n, r, "#{1}", c);   c = false;',
-    className:    'n = h.className(n, r, "#{1}", c); c = false;',
-    id:           'n = h.id(n, r, "#{1}", c);        c = false;',
-    attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
-    attr: function(m) {
-      m[3] = (m[5] || m[6]);
-      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
-    },
-    pseudo:       function(m) {
-      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
-      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
-    },
-    descendant:   'c = "descendant";',
-    child:        'c = "child";',
-    adjacent:     'c = "adjacent";',
-    laterSibling: 'c = "laterSibling";'
-  },
-
-  patterns: {
-    // combinators must be listed first
-    // (and descendant needs to be last combinator)
-    laterSibling: /^\s*~\s*/,
-    child:        /^\s*>\s*/,
-    adjacent:     /^\s*\+\s*/,
-    descendant:   /^\s/,
-
-    // selectors follow
-    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
-    id:           /^#([\w\-\*]+)(\b|$)/,
-    className:    /^\.([\w\-\*]+)(\b|$)/,
-    pseudo:       /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|\s|(?=:))/,
-    attrPresence: /^\[([\w]+)\]/,
-    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\]]*?)\4|([^'"][^\]]*?)))?\]/
-  },
-
-  handlers: {
-    // UTILITY FUNCTIONS
-    // joins two collections
-    concat: function(a, b) {
-      for (var i = 0, node; node = b[i]; i++)
-        a.push(node);
-      return a;
-    },
-
-    // marks an array of nodes for counting
-    mark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._counted = true;
-      return nodes;
-    },
-
-    unmark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._counted = undefined;
-      return nodes;
-    },
-
-    // mark each child node with its position (for nth calls)
-    // "ofType" flag indicates whether we're indexing for nth-of-type
-    // rather than nth-child
-    index: function(parentNode, reverse, ofType) {
-      parentNode._counted = true;
-      if (reverse) {
-        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
-          node = nodes[i];
-          if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
-        }
-      } else {
-        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
-          if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
-      }
-    },
-
-    // filters out duplicates and extends all nodes
-    unique: function(nodes) {
-      if (nodes.length == 0) return nodes;
-      var results = [], n;
-      for (var i = 0, l = nodes.length; i < l; i++)
-        if (!(n = nodes[i])._counted) {
-          n._counted = true;
-          results.push(Element.extend(n));
-        }
-      return Selector.handlers.unmark(results);
-    },
-
-    // COMBINATOR FUNCTIONS
-    descendant: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, node.getElementsByTagName('*'));
-      return results;
-    },
-
-    child: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
-          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
-      }
-      return results;
-    },
-
-    adjacent: function(nodes) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        var next = this.nextElementSibling(node);
-        if (next) results.push(next);
-      }
-      return results;
-    },
-
-    laterSibling: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, Element.nextSiblings(node));
-      return results;
-    },
-
-    nextElementSibling: function(node) {
-      while (node = node.nextSibling)
-	      if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    previousElementSibling: function(node) {
-      while (node = node.previousSibling)
-        if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    // TOKEN FUNCTIONS
-    tagName: function(nodes, root, tagName, combinator) {
-      tagName = tagName.toUpperCase();
-      var results = [], h = Selector.handlers;
-      if (nodes) {
-        if (combinator) {
-          // fastlane for ordinary descendant combinators
-          if (combinator == "descendant") {
-            for (var i = 0, node; node = nodes[i]; i++)
-              h.concat(results, node.getElementsByTagName(tagName));
-            return results;
-          } else nodes = this[combinator](nodes);
-          if (tagName == "*") return nodes;
-        }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.tagName.toUpperCase() == tagName) results.push(node);
-        return results;
-      } else return root.getElementsByTagName(tagName);
-    },
-
-    id: function(nodes, root, id, combinator) {
-      var targetNode = $(id), h = Selector.handlers;
-      if (!nodes && root == document) return targetNode ? [targetNode] : [];
-      if (nodes) {
-        if (combinator) {
-          if (combinator == 'child') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (targetNode.parentNode == node) return [targetNode];
-          } else if (combinator == 'descendant') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Element.descendantOf(targetNode, node)) return [targetNode];
-          } else if (combinator == 'adjacent') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Selector.handlers.previousElementSibling(targetNode) == node)
-                return [targetNode];
-          } else nodes = h[combinator](nodes);
-        }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node == targetNode) return [targetNode];
-        return [];
-      }
-      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
-    },
-
-    className: function(nodes, root, className, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      return Selector.handlers.byClassName(nodes, root, className);
-    },
-
-    byClassName: function(nodes, root, className) {
-      if (!nodes) nodes = Selector.handlers.descendant([root]);
-      var needle = ' ' + className + ' ';
-      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
-        nodeClassName = node.className;
-        if (nodeClassName.length == 0) continue;
-        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
-          results.push(node);
-      }
-      return results;
-    },
-
-    attrPresence: function(nodes, root, attr) {
-      var results = [];
-      for (var i = 0, node; node = nodes[i]; i++)
-        if (Element.hasAttribute(node, attr)) results.push(node);
-      return results;
-    },
-
-    attr: function(nodes, root, attr, value, operator) {
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      var handler = Selector.operators[operator], results = [];
-      for (var i = 0, node; node = nodes[i]; i++) {
-        var nodeValue = Element.readAttribute(node, attr);
-        if (nodeValue === null) continue;
-        if (handler(nodeValue, value)) results.push(node);
-      }
-      return results;
-    },
-
-    pseudo: function(nodes, name, value, root, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      return Selector.pseudos[name](nodes, value, root);
-    }
-  },
-
-  pseudos: {
-    'first-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.previousElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'last-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.nextElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'only-child': function(nodes, value, root) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
-          results.push(node);
-      return results;
-    },
-    'nth-child':        function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root);
-    },
-    'nth-last-child':   function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true);
-    },
-    'nth-of-type':      function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, false, true);
-    },
-    'nth-last-of-type': function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true, true);
-    },
-    'first-of-type':    function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, false, true);
-    },
-    'last-of-type':     function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, true, true);
-    },
-    'only-of-type':     function(nodes, formula, root) {
-      var p = Selector.pseudos;
-      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
-    },
-
-    // handles the an+b logic
-    getIndices: function(a, b, total) {
-      if (a == 0) return b > 0 ? [b] : [];
-      return $R(1, total).inject([], function(memo, i) {
-        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
-        return memo;
-      });
-    },
-
-    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
-    nth: function(nodes, formula, root, reverse, ofType) {
-      if (nodes.length == 0) return [];
-      if (formula == 'even') formula = '2n+0';
-      if (formula == 'odd')  formula = '2n+1';
-      var h = Selector.handlers, results = [], indexed = [], m;
-      h.mark(nodes);
-      for (var i = 0, node; node = nodes[i]; i++) {
-        if (!node.parentNode._counted) {
-          h.index(node.parentNode, reverse, ofType);
-          indexed.push(node.parentNode);
-        }
-      }
-      if (formula.match(/^\d+$/)) { // just a number
-        formula = Number(formula);
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.nodeIndex == formula) results.push(node);
-      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-        if (m[1] == "-") m[1] = -1;
-        var a = m[1] ? Number(m[1]) : 1;
-        var b = m[2] ? Number(m[2]) : 0;
-        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
-        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
-          for (var j = 0; j < l; j++)
-            if (node.nodeIndex == indices[j]) results.push(node);
-        }
-      }
-      h.unmark(nodes);
-      h.unmark(indexed);
-      return results;
-    },
-
-    'empty': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        // IE treats comments as element nodes
-        if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
-        results.push(node);
-      }
-      return results;
-    },
-
-    'not': function(nodes, selector, root) {
-      var h = Selector.handlers, selectorType, m;
-      var exclusions = new Selector(selector).findElements(root);
-      h.mark(exclusions);
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node._counted) results.push(node);
-      h.unmark(exclusions);
-      return results;
-    },
-
-    'enabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node.disabled) results.push(node);
-      return results;
-    },
-
-    'disabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.disabled) results.push(node);
-      return results;
-    },
-
-    'checked': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.checked) results.push(node);
-      return results;
-    }
-  },
-
-  operators: {
-    '=':  function(nv, v) { return nv == v; },
-    '!=': function(nv, v) { return nv != v; },
-    '^=': function(nv, v) { return nv.startsWith(v); },
-    '$=': function(nv, v) { return nv.endsWith(v); },
-    '*=': function(nv, v) { return nv.include(v); },
-    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
-    '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
-  },
-
-  matchElements: function(elements, expression) {
-    var matches = new Selector(expression).findElements(), h = Selector.handlers;
-    h.mark(matches);
-    for (var i = 0, results = [], element; element = elements[i]; i++)
-      if (element._counted) results.push(element);
-    h.unmark(matches);
-    return results;
-  },
-
-  findElement: function(elements, expression, index) {
-    if (typeof expression == 'number') {
-      index = expression; expression = false;
-    }
-    return Selector.matchElements(elements, expression || '*')[index || 0];
-  },
-
-  findChildElements: function(element, expressions) {
-    var exprs = expressions.join(','), expressions = [];
-    exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
-      expressions.push(m[1].strip());
-    });
-    var results = [], h = Selector.handlers;
-    for (var i = 0, l = expressions.length, selector; i < l; i++) {
-      selector = new Selector(expressions[i].strip());
-      h.concat(results, selector.findElements(element));
-    }
-    return (l > 1) ? h.unique(results) : results;
-  }
-});
-
-function $$() {
-  return Selector.findChildElements(document, $A(arguments));
-}
-var Form = {
-  reset: function(form) {
-    $(form).reset();
-    return form;
-  },
-
-  serializeElements: function(elements, getHash) {
-    var data = elements.inject({}, function(result, element) {
-      if (!element.disabled && element.name) {
-        var key = element.name, value = $(element).getValue();
-        if (value != null) {
-         	if (key in result) {
-            if (result[key].constructor != Array) result[key] = [result[key]];
-            result[key].push(value);
-          }
-          else result[key] = value;
-        }
-      }
-      return result;
-    });
-
-    return getHash ? data : Hash.toQueryString(data);
-  }
-};
-
-Form.Methods = {
-  serialize: function(form, getHash) {
-    return Form.serializeElements(Form.getElements(form), getHash);
-  },
-
-  getElements: function(form) {
-    return $A($(form).getElementsByTagName('*')).inject([],
-      function(elements, child) {
-        if (Form.Element.Serializers[child.tagName.toLowerCase()])
-          elements.push(Element.extend(child));
-        return elements;
-      }
-    );
-  },
-
-  getInputs: function(form, typeName, name) {
-    form = $(form);
-    var inputs = form.getElementsByTagName('input');
-
-    if (!typeName && !name) return $A(inputs).map(Element.extend);
-
-    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
-      var input = inputs[i];
-      if ((typeName && input.type != typeName) || (name && input.name != name))
-        continue;
-      matchingInputs.push(Element.extend(input));
-    }
-
-    return matchingInputs;
-  },
-
-  disable: function(form) {
-    form = $(form);
-    Form.getElements(form).invoke('disable');
-    return form;
-  },
-
-  enable: function(form) {
-    form = $(form);
-    Form.getElements(form).invoke('enable');
-    return form;
-  },
-
-  findFirstElement: function(form) {
-    return $(form).getElements().find(function(element) {
-      return element.type != 'hidden' && !element.disabled &&
-        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
-    });
-  },
-
-  focusFirstElement: function(form) {
-    form = $(form);
-    form.findFirstElement().activate();
-    return form;
-  },
-
-  request: function(form, options) {
-    form = $(form), options = Object.clone(options || {});
-
-    var params = options.parameters;
-    options.parameters = form.serialize(true);
-
-    if (params) {
-      if (typeof params == 'string') params = params.toQueryParams();
-      Object.extend(options.parameters, params);
-    }
-
-    if (form.hasAttribute('method') && !options.method)
-      options.method = form.method;
-
-    return new Ajax.Request(form.readAttribute('action'), options);
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element = {
-  focus: function(element) {
-    $(element).focus();
-    return element;
-  },
-
-  select: function(element) {
-    $(element).select();
-    return element;
-  }
-}
-
-Form.Element.Methods = {
-  serialize: function(element) {
-    element = $(element);
-    if (!element.disabled && element.name) {
-      var value = element.getValue();
-      if (value != undefined) {
-        var pair = {};
-        pair[element.name] = value;
-        return Hash.toQueryString(pair);
-      }
-    }
-    return '';
-  },
-
-  getValue: function(element) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    return Form.Element.Serializers[method](element);
-  },
-
-  clear: function(element) {
-    $(element).value = '';
-    return element;
-  },
-
-  present: function(element) {
-    return $(element).value != '';
-  },
-
-  activate: function(element) {
-    element = $(element);
-    try {
-      element.focus();
-      if (element.select && (element.tagName.toLowerCase() != 'input' ||
-        !['button', 'reset', 'submit'].include(element.type)))
-        element.select();
-    } catch (e) {}
-    return element;
-  },
-
-  disable: function(element) {
-    element = $(element);
-    element.blur();
-    element.disabled = true;
-    return element;
-  },
-
-  enable: function(element) {
-    element = $(element);
-    element.disabled = false;
-    return element;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Field = Form.Element;
-var $F = Form.Element.Methods.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element.Serializers = {
-  input: function(element) {
-    switch (element.type.toLowerCase()) {
-      case 'checkbox':
-      case 'radio':
-        return Form.Element.Serializers.inputSelector(element);
-      default:
-        return Form.Element.Serializers.textarea(element);
-    }
-  },
-
-  inputSelector: function(element) {
-    return element.checked ? element.value : null;
-  },
-
-  textarea: function(element) {
-    return element.value;
-  },
-
-  select: function(element) {
-    return this[element.type == 'select-one' ?
-      'selectOne' : 'selectMany'](element);
-  },
-
-  selectOne: function(element) {
-    var index = element.selectedIndex;
-    return index >= 0 ? this.optionValue(element.options[index]) : null;
-  },
-
-  selectMany: function(element) {
-    var values, length = element.length;
-    if (!length) return null;
-
-    for (var i = 0, values = []; i < length; i++) {
-      var opt = element.options[i];
-      if (opt.selected) values.push(this.optionValue(opt));
-    }
-    return values;
-  },
-
-  optionValue: function(opt) {
-    // extend element because hasAttribute may not be native
-    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = function() {}
-Abstract.TimedObserver.prototype = {
-  initialize: function(element, frequency, callback) {
-    this.frequency = frequency;
-    this.element   = $(element);
-    this.callback  = callback;
-
-    this.lastValue = this.getValue();
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    var value = this.getValue();
-    var changed = ('string' == typeof this.lastValue && 'string' == typeof value
-      ? this.lastValue != value : String(this.lastValue) != String(value));
-    if (changed) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  }
-}
-
-Form.Element.Observer = Class.create();
-Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.Observer = Class.create();
-Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = function() {}
-Abstract.EventObserver.prototype = {
-  initialize: function(element, callback) {
-    this.element  = $(element);
-    this.callback = callback;
-
-    this.lastValue = this.getValue();
-    if (this.element.tagName.toLowerCase() == 'form')
-      this.registerFormCallbacks();
-    else
-      this.registerCallback(this.element);
-  },
-
-  onElementEvent: function() {
-    var value = this.getValue();
-    if (this.lastValue != value) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  },
-
-  registerFormCallbacks: function() {
-    Form.getElements(this.element).each(this.registerCallback.bind(this));
-  },
-
-  registerCallback: function(element) {
-    if (element.type) {
-      switch (element.type.toLowerCase()) {
-        case 'checkbox':
-        case 'radio':
-          Event.observe(element, 'click', this.onElementEvent.bind(this));
-          break;
-        default:
-          Event.observe(element, 'change', this.onElementEvent.bind(this));
-          break;
-      }
-    }
-  }
-}
-
-Form.Element.EventObserver = Class.create();
-Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.EventObserver = Class.create();
-Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-if (!window.Event) {
-  var Event = new Object();
-}
-
-Object.extend(Event, {
-  KEY_BACKSPACE: 8,
-  KEY_TAB:       9,
-  KEY_RETURN:   13,
-  KEY_ESC:      27,
-  KEY_LEFT:     37,
-  KEY_UP:       38,
-  KEY_RIGHT:    39,
-  KEY_DOWN:     40,
-  KEY_DELETE:   46,
-  KEY_HOME:     36,
-  KEY_END:      35,
-  KEY_PAGEUP:   33,
-  KEY_PAGEDOWN: 34,
-
-  element: function(event) {
-    return $(event.target || event.srcElement);
-  },
-
-  isLeftClick: function(event) {
-    return (((event.which) && (event.which == 1)) ||
-            ((event.button) && (event.button == 1)));
-  },
-
-  pointerX: function(event) {
-    return event.pageX || (event.clientX +
-      (document.documentElement.scrollLeft || document.body.scrollLeft));
-  },
-
-  pointerY: function(event) {
-    return event.pageY || (event.clientY +
-      (document.documentElement.scrollTop || document.body.scrollTop));
-  },
-
-  stop: function(event) {
-    if (event.preventDefault) {
-      event.preventDefault();
-      event.stopPropagation();
-    } else {
-      event.returnValue = false;
-      event.cancelBubble = true;
-    }
-  },
-
-  // find the first node with the given tagName, starting from the
-  // node the event was triggered on; traverses the DOM upwards
-  findElement: function(event, tagName) {
-    var element = Event.element(event);
-    while (element.parentNode && (!element.tagName ||
-        (element.tagName.toUpperCase() != tagName.toUpperCase())))
-      element = element.parentNode;
-    return element;
-  },
-
-  observers: false,
-
-  _observeAndCache: function(element, name, observer, useCapture) {
-    if (!this.observers) this.observers = [];
-    if (element.addEventListener) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.addEventListener(name, observer, useCapture);
-    } else if (element.attachEvent) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.attachEvent('on' + name, observer);
-    }
-  },
-
-  unloadCache: function() {
-    if (!Event.observers) return;
-    for (var i = 0, length = Event.observers.length; i < length; i++) {
-      Event.stopObserving.apply(this, Event.observers[i]);
-      Event.observers[i][0] = null;
-    }
-    Event.observers = false;
-  },
-
-  observe: function(element, name, observer, useCapture) {
-    element = $(element);
-    useCapture = useCapture || false;
-
-    /* if (name == 'keypress' &&
-      (Prototype.Browser.WebKit || element.attachEvent))
-      name = 'keydown';*/
-    if (name == 'keypress' &&
-        ((element.attachEvent && !window.opera) || Prototype.Browser.WebKit))
-        name = 'keydown';
-
-    Event._observeAndCache(element, name, observer, useCapture);
-  },
-
-  stopObserving: function(element, name, observer, useCapture) {
-    element = $(element);
-    useCapture = useCapture || false;
-
-    if (name == 'keypress' &&
-        ((element.attachEvent && !window.opera) || Prototype.Browser.WebKit))
-      name = 'keydown';
-
-    if (element.removeEventListener) {
-      element.removeEventListener(name, observer, useCapture);
-    } else if (element.detachEvent) {
-      try {
-        element.detachEvent('on' + name, observer);
-      } catch (e) {}
-    }
-  }
-});
-
-/* prevent memory leaks in IE */
-if (Prototype.Browser.IE)
-  Event.observe(window, 'unload', Event.unloadCache, false);
-var Position = {
-  // set to true if needed, warning: firefox performance problems
-  // NOT neeeded for page scrolling, only if draggable contained in
-  // scrollable elements
-  includeScrollOffsets: false,
-
-  // must be called before calling withinIncludingScrolloffset, every time the
-  // page is scrolled
-  prepare: function() {
-    this.deltaX =  window.pageXOffset
-                || document.documentElement.scrollLeft
-                || document.body.scrollLeft
-                || 0;
-    this.deltaY =  window.pageYOffset
-                || document.documentElement.scrollTop
-                || document.body.scrollTop
-                || 0;
-  },
-
-  realOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.scrollTop  || 0;
-      valueL += element.scrollLeft || 0;
-      element = element.parentNode;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  cumulativeOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  positionedOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-      if (element) {
-        if(element.tagName=='BODY') break;
-        var p = Element.getStyle(element, 'position');
-        if (p == 'relative' || p == 'absolute') break;
-      }
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  offsetParent: function(element) {
-    if (element.offsetParent) return element.offsetParent;
-    if (element == document.body) return element;
-
-    while ((element = element.parentNode) && element != document.body)
-      if (Element.getStyle(element, 'position') != 'static')
-        return element;
-
-    return document.body;
-  },
-
-  // caches x/y coordinate pair to use with overlap
-  within: function(element, x, y) {
-    if (this.includeScrollOffsets)
-      return this.withinIncludingScrolloffsets(element, x, y);
-    this.xcomp = x;
-    this.ycomp = y;
-    this.offset = this.cumulativeOffset(element);
-
-    return (y >= this.offset[1] &&
-            y <  this.offset[1] + element.offsetHeight &&
-            x >= this.offset[0] &&
-            x <  this.offset[0] + element.offsetWidth);
-  },
-
-  withinIncludingScrolloffsets: function(element, x, y) {
-    var offsetcache = this.realOffset(element);
-
-    this.xcomp = x + offsetcache[0] - this.deltaX;
-    this.ycomp = y + offsetcache[1] - this.deltaY;
-    this.offset = this.cumulativeOffset(element);
-
-    return (this.ycomp >= this.offset[1] &&
-            this.ycomp <  this.offset[1] + element.offsetHeight &&
-            this.xcomp >= this.offset[0] &&
-            this.xcomp <  this.offset[0] + element.offsetWidth);
-  },
-
-  // within must be called directly before
-  overlap: function(mode, element) {
-    if (!mode) return 0;
-    if (mode == 'vertical')
-      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
-        element.offsetHeight;
-    if (mode == 'horizontal')
-      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
-        element.offsetWidth;
-  },
-
-  page: function(forElement) {
-    var valueT = 0, valueL = 0;
-
-    var element = forElement;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-
-      // Safari fix
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element,'position')=='absolute') break;
-
-    } while (element = element.offsetParent);
-
-    element = forElement;
-    do {
-      if (!window.opera || element.tagName=='BODY') {
-        valueT -= element.scrollTop  || 0;
-        valueL -= element.scrollLeft || 0;
-      }
-    } while (element = element.parentNode);
-
-    return [valueL, valueT];
-  },
-
-  clone: function(source, target) {
-    var options = Object.extend({
-      setLeft:    true,
-      setTop:     true,
-      setWidth:   true,
-      setHeight:  true,
-      offsetTop:  0,
-      offsetLeft: 0
-    }, arguments[2] || {})
-
-    // find page position of source
-    source = $(source);
-    var p = Position.page(source);
-
-    // find coordinate system to use
-    target = $(target);
-    var delta = [0, 0];
-    var parent = null;
-    // delta [0,0] will do fine with position: fixed elements,
-    // position:absolute needs offsetParent deltas
-    if (Element.getStyle(target,'position') == 'absolute') {
-      parent = Position.offsetParent(target);
-      delta = Position.page(parent);
-    }
-
-    // correct by body offsets (fixes Safari)
-    if (parent == document.body) {
-      delta[0] -= document.body.offsetLeft;
-      delta[1] -= document.body.offsetTop;
-    }
-
-    // set position
-    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
-    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
-    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
-    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
-  },
-
-  absolutize: function(element) {
-    element = $(element);
-    if (element.style.position == 'absolute') return;
-    Position.prepare();
-
-    var offsets = Position.positionedOffset(element);
-    var top     = offsets[1];
-    var left    = offsets[0];
-    var width   = element.clientWidth;
-    var height  = element.clientHeight;
-
-    element._originalLeft   = left - parseFloat(element.style.left  || 0);
-    element._originalTop    = top  - parseFloat(element.style.top || 0);
-    element._originalWidth  = element.style.width;
-    element._originalHeight = element.style.height;
-
-    element.style.position = 'absolute';
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.width  = width + 'px';
-    element.style.height = height + 'px';
-  },
-
-  relativize: function(element) {
-    element = $(element);
-    if (element.style.position == 'relative') return;
-    Position.prepare();
-
-    element.style.position = 'relative';
-    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
-    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.height = element._originalHeight;
-    element.style.width  = element._originalWidth;
-  }
-}
-
-// Safari returns margins on body which is incorrect if the child is absolutely
-// positioned.  For performance reasons, redefine Position.cumulativeOffset for
-// KHTML/WebKit only.
-if (Prototype.Browser.WebKit) {
-  Position.cumulativeOffset = function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element, 'position') == 'absolute') break;
-
-      element = element.offsetParent;
-    } while (element);
-
-    return [valueL, valueT];
-  }
-}
-
-Element.addMethods();
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/scriptaculous.js b/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/scriptaculous.js
deleted file mode 100644
index 7c472a6..0000000
--- a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/scriptaculous.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// script.aculo.us scriptaculous.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// 
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Scriptaculous = {
-  Version: '1.7.1_beta3',
-  require: function(libraryName) {
-    // inserting via DOM fails in Safari 2.0, so brute force approach
-    document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
-  },
-  REQUIRED_PROTOTYPE: '1.5.1',
-  load: function() {
-    function convertVersionString(versionString){
-      var r = versionString.split('.');
-      return parseInt(r[0])*100000 + parseInt(r[1])*1000 + parseInt(r[2]);
-    }
- 
-    if((typeof Prototype=='undefined') || 
-       (typeof Element == 'undefined') || 
-       (typeof Element.Methods=='undefined') ||
-       (convertVersionString(Prototype.Version) < 
-        convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
-       throw("script.aculo.us requires the Prototype JavaScript framework >= " +
-        Scriptaculous.REQUIRED_PROTOTYPE);
-    
-    $A(document.getElementsByTagName("script")).findAll( function(s) {
-      return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))
-    }).each( function(s) {
-      var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,'');
-      var includes = s.src.match(/\?.*load=([a-z,]*)/);
-      (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
-       function(include) { Scriptaculous.require(path+include+'.js') });
-    });
-  }
-}
-
-Scriptaculous.load();
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/slider.js b/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/slider.js
deleted file mode 100644
index c1a84eb..0000000
--- a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/slider.js
+++ /dev/null
@@ -1,277 +0,0 @@
-// script.aculo.us slider.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
-
-// Copyright (c) 2005-2007 Marty Haught, Thomas Fuchs 
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-if(!Control) var Control = {};
-Control.Slider = Class.create();
-
-// options:
-//  axis: 'vertical', or 'horizontal' (default)
-//
-// callbacks:
-//  onChange(value)
-//  onSlide(value)
-Control.Slider.prototype = {
-  initialize: function(handle, track, options) {
-    var slider = this;
-    
-    if(handle instanceof Array) {
-      this.handles = handle.collect( function(e) { return $(e) });
-    } else {
-      this.handles = [$(handle)];
-    }
-    
-    this.track   = $(track);
-    this.options = options || {};
-
-    this.axis      = this.options.axis || 'horizontal';
-    this.increment = this.options.increment || 1;
-    this.step      = parseInt(this.options.step || '1');
-    this.range     = this.options.range || $R(0,1);
-    
-    this.value     = 0; // assure backwards compat
-    this.values    = this.handles.map( function() { return 0 });
-    this.spans     = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
-    this.options.startSpan = $(this.options.startSpan || null);
-    this.options.endSpan   = $(this.options.endSpan || null);
-
-    this.restricted = this.options.restricted || false;
-
-    this.maximum   = this.options.maximum || this.range.end;
-    this.minimum   = this.options.minimum || this.range.start;
-
-    // Will be used to align the handle onto the track, if necessary
-    this.alignX = parseInt(this.options.alignX || '0');
-    this.alignY = parseInt(this.options.alignY || '0');
-    
-    this.trackLength = this.maximumOffset() - this.minimumOffset();
-
-    this.handleLength = this.isVertical() ? 
-      (this.handles[0].offsetHeight != 0 ? 
-        this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) : 
-      (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth : 
-        this.handles[0].style.width.replace(/px$/,""));
-
-    this.active   = false;
-    this.dragging = false;
-    this.disabled = false;
-
-    if(this.options.disabled) this.setDisabled();
-
-    // Allowed values array
-    this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
-    if(this.allowedValues) {
-      this.minimum = this.allowedValues.min();
-      this.maximum = this.allowedValues.max();
-    }
-
-    this.eventMouseDown = this.startDrag.bindAsEventListener(this);
-    this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
-    this.eventMouseMove = this.update.bindAsEventListener(this);
-
-    // Initialize handles in reverse (make sure first handle is active)
-    this.handles.each( function(h,i) {
-      i = slider.handles.length-1-i;
-      slider.setValue(parseFloat(
-        (slider.options.sliderValue instanceof Array ? 
-          slider.options.sliderValue[i] : slider.options.sliderValue) || 
-         slider.range.start), i);
-      Element.makePositioned(h); // fix IE
-      Event.observe(h, "mousedown", slider.eventMouseDown);
-    });
-    
-    Event.observe(this.track, "mousedown", this.eventMouseDown);
-    Event.observe(document, "mouseup", this.eventMouseUp);
-    Event.observe(document, "mousemove", this.eventMouseMove);
-    
-    this.initialized = true;
-  },
-  dispose: function() {
-    var slider = this;    
-    Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
-    Event.stopObserving(document, "mouseup", this.eventMouseUp);
-    Event.stopObserving(document, "mousemove", this.eventMouseMove);
-    this.handles.each( function(h) {
-      Event.stopObserving(h, "mousedown", slider.eventMouseDown);
-    });
-  },
-  setDisabled: function(){
-    this.disabled = true;
-  },
-  setEnabled: function(){
-    this.disabled = false;
-  },  
-  getNearestValue: function(value){
-    if(this.allowedValues){
-      if(value >= this.allowedValues.max()) return(this.allowedValues.max());
-      if(value <= this.allowedValues.min()) return(this.allowedValues.min());
-      
-      var offset = Math.abs(this.allowedValues[0] - value);
-      var newValue = this.allowedValues[0];
-      this.allowedValues.each( function(v) {
-        var currentOffset = Math.abs(v - value);
-        if(currentOffset <= offset){
-          newValue = v;
-          offset = currentOffset;
-        } 
-      });
-      return newValue;
-    }
-    if(value > this.range.end) return this.range.end;
-    if(value < this.range.start) return this.range.start;
-    return value;
-  },
-  setValue: function(sliderValue, handleIdx){
-    if(!this.active) {
-      this.activeHandleIdx = handleIdx || 0;
-      this.activeHandle    = this.handles[this.activeHandleIdx];
-      this.updateStyles();
-    }
-    handleIdx = handleIdx || this.activeHandleIdx || 0;
-    if(this.initialized && this.restricted) {
-      if((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
-        sliderValue = this.values[handleIdx-1];
-      if((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
-        sliderValue = this.values[handleIdx+1];
-    }
-    sliderValue = this.getNearestValue(sliderValue);
-    this.values[handleIdx] = sliderValue;
-    this.value = this.values[0]; // assure backwards compat
-    
-    this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = 
-      this.translateToPx(sliderValue);
-    
-    this.drawSpans();
-    if(!this.dragging || !this.event) this.updateFinished();
-  },
-  setValueBy: function(delta, handleIdx) {
-    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, 
-      handleIdx || this.activeHandleIdx || 0);
-  },
-  translateToPx: function(value) {
-    return Math.round(
-      ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) * 
-      (value - this.range.start)) + "px";
-  },
-  translateToValue: function(offset) {
-    return ((offset/(this.trackLength-this.handleLength) * 
-      (this.range.end-this.range.start)) + this.range.start);
-  },
-  getRange: function(range) {
-    var v = this.values.sortBy(Prototype.K); 
-    range = range || 0;
-    return $R(v[range],v[range+1]);
-  },
-  minimumOffset: function(){
-    return(this.isVertical() ? this.alignY : this.alignX);
-  },
-  maximumOffset: function(){
-    return(this.isVertical() ? 
-      (this.track.offsetHeight != 0 ? this.track.offsetHeight :
-        this.track.style.height.replace(/px$/,"")) - this.alignY : 
-      (this.track.offsetWidth != 0 ? this.track.offsetWidth : 
-        this.track.style.width.replace(/px$/,"")) - this.alignY);
-  },  
-  isVertical:  function(){
-    return (this.axis == 'vertical');
-  },
-  drawSpans: function() {
-    var slider = this;
-    if(this.spans)
-      $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
-    if(this.options.startSpan)
-      this.setSpan(this.options.startSpan,
-        $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
-    if(this.options.endSpan)
-      this.setSpan(this.options.endSpan, 
-        $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
-  },
-  setSpan: function(span, range) {
-    if(this.isVertical()) {
-      span.style.top = this.translateToPx(range.start);
-      span.style.height = this.translateToPx(range.end - range.start + this.range.start);
-    } else {
-      span.style.left = this.translateToPx(range.start);
-      span.style.width = this.translateToPx(range.end - range.start + this.range.start);
-    }
-  },
-  updateStyles: function() {
-    this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
-    Element.addClassName(this.activeHandle, 'selected');
-  },
-  startDrag: function(event) {
-    if(Event.isLeftClick(event)) {
-      if(!this.disabled){
-        this.active = true;
-        
-        var handle = Event.element(event);
-        var pointer  = [Event.pointerX(event), Event.pointerY(event)];
-        var track = handle;
-        if(track==this.track) {
-          var offsets  = Position.cumulativeOffset(this.track); 
-          this.event = event;
-          this.setValue(this.translateToValue( 
-           (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
-          ));
-          var offsets  = Position.cumulativeOffset(this.activeHandle);
-          this.offsetX = (pointer[0] - offsets[0]);
-          this.offsetY = (pointer[1] - offsets[1]);
-        } else {
-          // find the handle (prevents issues with Safari)
-          while((this.handles.indexOf(handle) == -1) && handle.parentNode) 
-            handle = handle.parentNode;
-            
-          if(this.handles.indexOf(handle)!=-1) {
-            this.activeHandle    = handle;
-            this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
-            this.updateStyles();
-            
-            var offsets  = Position.cumulativeOffset(this.activeHandle);
-            this.offsetX = (pointer[0] - offsets[0]);
-            this.offsetY = (pointer[1] - offsets[1]);
-          }
-        }
-      }
-      Event.stop(event);
-    }
-  },
-  update: function(event) {
-   if(this.active) {
-      if(!this.dragging) this.dragging = true;
-      this.draw(event);
-      if(Prototype.Browser.WebKit) window.scrollBy(0,0);
-      Event.stop(event);
-   }
-  },
-  draw: function(event) {
-    var pointer = [Event.pointerX(event), Event.pointerY(event)];
-    var offsets = Position.cumulativeOffset(this.track);
-    pointer[0] -= this.offsetX + offsets[0];
-    pointer[1] -= this.offsetY + offsets[1];
-    this.event = event;
-    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
-    if(this.initialized && this.options.onSlide)
-      this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
-  },
-  endDrag: function(event) {
-    if(this.active && this.dragging) {
-      this.finishDrag(event, true);
-      Event.stop(event);
-    }
-    this.active = false;
-    this.dragging = false;
-  },  
-  finishDrag: function(event, success) {
-    this.active = false;
-    this.dragging = false;
-    this.updateFinished();
-  },
-  updateFinished: function() {
-    if(this.initialized && this.options.onChange) 
-      this.options.onChange(this.values.length>1 ? this.values : this.value, this);
-    this.event = null;
-  }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/sound.js b/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/sound.js
deleted file mode 100644
index 164c79a..0000000
--- a/tapestry/tapestry-framework/src/js/scriptaculous-1.7.1/sound.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// script.aculo.us sound.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// Based on code created by Jules Gravinese (http://www.webveteran.com/)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-Sound = {
-  tracks: {},
-  _enabled: true,
-  template:
-    new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),
-  enable: function(){
-    Sound._enabled = true;
-  },
-  disable: function(){
-    Sound._enabled = false;
-  },
-  play: function(url){
-    if(!Sound._enabled) return;
-    var options = Object.extend({
-      track: 'global', url: url, replace: false
-    }, arguments[1] || {});
-    
-    if(options.replace && this.tracks[options.track]) {
-      $R(0, this.tracks[options.track].id).each(function(id){
-        var sound = $('sound_'+options.track+'_'+id);
-        sound.Stop && sound.Stop();
-        sound.remove();
-      })
-      this.tracks[options.track] = null;
-    }
-      
-    if(!this.tracks[options.track])
-      this.tracks[options.track] = { id: 0 }
-    else
-      this.tracks[options.track].id++;
-      
-    options.id = this.tracks[options.track].id;
-    if (Prototype.Browser.IE) {
-      var sound = document.createElement('bgsound');
-      sound.setAttribute('id','sound_'+options.track+'_'+options.id);
-      sound.setAttribute('src',options.url);
-      sound.setAttribute('loop','1');
-      sound.setAttribute('autostart','true');
-      $$('body')[0].appendChild(sound);
-    }  
-    else
-      new Insertion.Bottom($$('body')[0], Sound.template.evaluate(options));
-  }
-};
-
-if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){
-  if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1 }))
-    Sound.template = new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>')
-  else
-    Sound.play = function(){}
-}
diff --git a/tapestry/tapestry-framework/src/js/tapestry.profile.js b/tapestry/tapestry-framework/src/js/tapestry.profile.js
deleted file mode 100644
index 3936a78..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry.profile.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// pull in the dependency list and define it in the var "dependencies". This
-// over-rides the default built into getDependencyList.js. The bootstrap and
-// hostenv files are included by default and don't need to be included here,
-// but you can change the hostenv file that's included by setting the value of
-// the variable "hostenvType" (defaults to "browser").
-var dependencies = [ 
-	"dojo.event.browser",
-    "dojo.dom",
-    "dojo.lang.common",
-    "dojo.io.common",
-    "dojo.io.BrowserIO",
-    "dojo.io.cookie",
-    "dojo.date.common",
-    "dojo.date.format",
-	"dojo.widget.*"
-];
-
-// NOTE: this MUST be included or a list of files must be output via print()
-// manually.
-load("getDependencyList.js");
diff --git a/tapestry/tapestry-framework/src/js/tapestry/core.js b/tapestry/tapestry-framework/src/js/tapestry/core.js
deleted file mode 100644
index 0081dfe..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/core.js
+++ /dev/null
@@ -1,841 +0,0 @@
-dojo.provide("tapestry.core");
-dojo.provide("tapestry.html");
-dojo.provide("tapestry.event");
-dojo.provide("tapestry.lang");
-
-dojo.provide("dojo.AdapterRegistry");
-dojo.provide("dojo.json");
-
-dojo.require("dojo.lang.common");
-dojo.require("dojo.io.BrowserIO");
-dojo.require("dojo.event.browser");
-dojo.require("dojo.html.style");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.string.extras");
-
-
-// redirect logging calls to standard debug if logging not enabled
-if (dj_undef("logging", dojo)) {
-    dojo.log = {
-        debug:function(){
-            dojo.debug.apply(this, arguments);
-        },
-        info:function(){
-            dojo.debug.apply(this, arguments);
-        },
-        warn:function(){
-            dojo.debug.apply(this, arguments);
-        },
-        err:function(){
-            dojo.debug.apply(this, arguments);
-        },
-        exception:function(){
-            dojo.debug.apply(this, arguments);
-        }
-    }
-}
-
-/**
- * package: tapestry
- * Provides the core functionality for the Tapestry javascript package libraries. 
- * 
- * Most of the functions in here are related to initiating and parsing IO 
- * requests. 
- */
-var tapestry={
-
-	// property: version
-	// The current client side library version, usually matching the current java library version. (ie 4.1, etc..)
-	version:"4.1.2",
-	scriptInFlight:false, // whether or not javascript is currently being eval'd, default false
-	ScriptFragment:new RegExp('(?:<script.*?>)((\n|.|\r)*?)(?:<\/script>)', 'im'), // regexp for script elements
-    GlobalScriptFragment:new RegExp('(?:<script.*?>)((\n|.|\r)*?)(?:<\/script>)', 'img'), // regexp for global script fragments
-    requestsInFlight:0, // how many ajax requests are currently in progress
-    isIE:dojo.render.html.ie,
-	// property: requestEncoding
-	// Defines the encoding that will be used in all Tapestry initiated XHR requests to encode
-	// URL or form data. Gets set by AjaxShellDelegate class on server on most requests by default.
-	requestEncoding:"UTF-8",
-
-	/**
-	 * Function: bind
-	 *
-	 * Core XHR bind function for tapestry internals. The
-	 * <error>/<load> functions defined in this package are used to handle
-	 * load/error of dojo.io.bind.
-	 *
-	 * Parameters:
-	 *
-	 * 	url - The url to bind the request to.
-	 * 	content - A properties map of optional extra content to send.
-	 *  json - Boolean, optional parameter specifying whether or not to create a
-	 * 		   json request. If not specified the default is to use XHR.
-	 */
-	bind:function(url, content, json){
-		var parms = {
-			url:url,
-			content:content,
-            useCache:true,
-            preventCache:true,
-			encoding: tapestry.requestEncoding,
-			error: (function(){tapestry.error.apply(this, arguments);})
-		};
-
-		// setup content type
-		if (typeof json != "undefined" && json) {
-			parms.mimetype = "text/json";
-			parms.headers={"json":true};
-			parms.load=(function(){tapestry.loadJson.apply(this, arguments);});
-		} else {
-			parms.headers={"dojo-ajax-request":true};
-			parms.mimetype="text/xml";
-			parms.load=(function(){tapestry.load.apply(this, arguments);});
-		}
-
-        tapestry.requestsInFlight++;
-        dojo.io.queueBind(parms);
-	},
-
-	/**
-	 * Function: error
-	 *
-	 * Global error handling function for dojo.io.bind requests. This function is mapped
-	 * as the "error:functionName" part of a request in the dojo.io.bind arguments
-	 * in <tapestry.bind> calls.
-	 *
-	 * See Also:
-	 * 	<tapestry.bind>, <tapestry.load>
-	 */
-	error:function(type, exception, http, kwArgs){
-        tapestry.requestsInFlight--;
-        dojo.log.exception("Error received in IO response.", exception);
-	},
-
-	/**
-	 * Function: load
-	 *
-	 * Global load handling function for dojo.io.bind requests. This isn't typically
-	 * called directly by anything, but passed in as the "load" argument to
-	 * dojo.io.bind when making IO requests as the function that will handle the
-	 * return response.
-	 *
-	 * Parameters:
-	 * 	type - Type of request.
-	 * 	data - The data returned, depending on the request type might be an xml document /
-	 * 			plaintext / json / etc.
-	 * 	http - The http object used in request, like XmlHttpRequest.
-	 * 	kwArgs - The original set of arguments passed into dojo.io.bind({arg:val,arg1:val2}).
-	 *
-	 */
-	load:function(type, data, http, kwArgs){
-		dojo.log.debug("tapestry.load() Response received.", data);
-        tapestry.requestsInFlight--;
-        if (!data) {
-			dojo.log.warn("No data received in response.");
-			return;
-		}
-
-		var resp=data.getElementsByTagName("ajax-response");
-		if (!resp || resp.length < 1 || !resp[0].childNodes) {
-			dojo.log.warn("No ajax-response elements received.");
-			return;
-		}
-
-		var elms=resp[0].childNodes;
-		var bodyScripts=[];
-		var initScripts=[];
-		var rawData=[];
-		for (var i=0; i<elms.length; i++) {
-			var elmType=elms[i].getAttribute("type");
-			var id=elms[i].getAttribute("id");
-
-			if (elmType == "exception") {
-				dojo.log.err("Remote server exception received.");
-				tapestry.presentException(elms[i], kwArgs);
-				return;
-			} else if (elmType == "page") {
-                window.location=elms[i].getAttribute("url");
-                return;
-            } else if (elmType == "status") {
-                dojo.event.topic.publish(id, {message: tapestry.html.getContentAsString(elms[i])});
-                continue;
-            }
-
-			// handle javascript evaluations
-			if (elmType == "script") {
-
-				if (id == "initializationscript") {
-					initScripts.push(elms[i]);
-					continue;
-				} else if (id == "bodyscript") {
-					bodyScripts.push(elms[i]);
-					continue;
-				} else if (id == "includescript") {
-					// includes get processed immediately (synchronously)
-					var includes=elms[i].getElementsByTagName("include");
-					if (!includes){continue;}
-					for (var e=0; e<includes.length;e++) {
-						tapestry.loadScriptFromUrl(includes[e].getAttribute("url"));
-					}
-					continue;
-				}
-			} else {
-				rawData.push(elms[i]);
-			}
-
-			if (!id){
-				dojo.log.warn("No element id found in ajax-response node.");
-				continue;
-			}
-
-			var node=dojo.byId(id);
-			if (!node) {
-				dojo.log.warn("No node could be found to update content in with id " + id);
-				continue;
-			}
-
-			tapestry.loadContent(id, node, elms[i]);
-		}
-
-		// load body scripts before initialization
-		for (var i=0; i<bodyScripts.length; i++) {
-			tapestry.loadScriptContent(bodyScripts[i], true);
-		}
-
-		for (var i=0; i<rawData.length; i++) {
-			tapestry.loadScriptContent(rawData[i], true);
-		}
-
-		for (var i=0; i<initScripts.length; i++) {
-			tapestry.loadScriptContent(initScripts[i], true);
-		}
-	},
-
-	/**
- 	 * Function: loadJson
- 	 *
- 	 * Executed by default during JSON requests - default implementation does nothing but decrement
- 	 * the <tapestry.requestsInFlight> global variable.
- 	 *
- 	 * Parameters:
- 	 * 	type - Type of request.
-	 * 	data - The data returned, depending on the request type might be an xml document /
-	 * 			plaintext / json / etc.
-	 * 	http - The http object used in request, like XmlHttpRequest.
-	 * 	kwArgs - The original set of arguments passed into dojo.io.bind({arg:val,arg1:val2}).
- 	 */
-	loadJson:function(type, data, http, kwArgs) {
-		dojo.log.debug("tapestry.loadJson() Response received.", data);
-		tapestry.requestsInFlight--;
-	},
-
-	/**
-	 * Function: loadContent
-	 *
-	 * Used by <tapestry.load> when handling xml responses to iterate over the tapestry
-	 * specific xml response and appropriately load all content types / perform animations /
-	 * execute scripts in the proper order / etc..
-	 *
-	 * Parameters:
-	 * 	id - The element id that this content should be applied to in the existing document.
-	 * 	node - The node that this new content will be applied to.
-	 * 	element - The incoming xml node containing rules/content to apply to this node.
-	 *
-	 */
-	loadContent:function(id, node, element){
-        if (typeof element.childNodes != "undefined" && element.childNodes.length > 0) {
-            for (var i = 0; i < element.childNodes.length; i++) {
-                if (element.childNodes[i].nodeType != 1) { continue; }
-
-                var nodeId = element.childNodes[i].getAttribute("id");
-                if (nodeId) {
-                    element=element.childNodes[i];
-                    break;
-                }
-            }
-        }
-
-    	dojo.event.browser.clean(node); // prevent mem leaks in ie
-
-    	var content=tapestry.html.getContentAsString(element);
-    	if (djConfig["isDebug"]) {
-    		dojo.log.debug("Received element content for id <" + id + "> of: " + content);
-    	}
-
-        // fix for IE - setting innerHTML does not work for SELECTs
-        if (tapestry.isIE && node.outerHTML && node.nodeName == "SELECT") {
-            node.outerHTML = node.outerHTML.replace(/(<SELECT[^<]*>).*(<\/SELECT>)/, '$1' + content + '$2');
-            node=dojo.byId(id);
-        } else {
-            if (content && content.length > 0) {
-                node.innerHTML=content;
-            }
-        }
-
-        // copy attributes
-		var atts=element.attributes;
-		var attnode, i=0;
-		while((attnode=atts[i++])){
-			if(tapestry.isIE){
-				if(!attnode){ continue; }
-				if((typeof attnode == "object")&&
-					(typeof attnode.nodeValue == 'undefined')||
-					(attnode.nodeValue == null)||
-					(attnode.nodeValue == '')){
-					continue;
-				}
-			}
-
-			var nn = attnode.nodeName;
-			var nv = attnode.nodeValue;
-			if (nn == "id" || nn == "type" || nn == "name"){continue;}
-
-			if (nn == "style") {
-				dojo.html.setStyleText(node, nv);
-			} else if (nn == "class") {
-				dojo.html.setClass(node, nv);
-			} else {
-				node.setAttribute(nn, nv);
-			}
-		}
-
-    	// apply disabled/not disabled
-    	var disabled = element.getAttribute("disabled");
-        if (!disabled && node["disabled"]) {
-            node.disabled = false;
-        } else if (disabled) {
-    		node.disabled = true;
-        }
-	},
-
-	/**
-	 * Function: loadScriptContent
-	 *
-	 * Manages loading javascript content for a specific incoming xml element.
-	 *
-	 * Parameters:
-	 * 	element - The element to parse javascript statements from and execute.
-	 * 	async - Whether or not to process the script content asynchronously, meaning
-	 * 			whether or not to execute the script in a block done in a setTimeout call
-	 * 			so as to avoid IE specific issues.
-	 */
-	loadScriptContent:function(element, async){
-		if (typeof async == "undefined") { async = true; }
-        async = this.isIE;
-
-        if (tapestry.scriptInFlight) {
-			dojo.log.debug("loadScriptContent(): scriptInFlight is true, sleeping");
-			setTimeout(function() { tapestry.loadScriptContent(element, async);}, 5);
-			return;
-		}
-
-		var text=tapestry.html.getContentAsString(element);
-	    text.replace(this.GlobalScriptFragment, '');
-	    var scripts = text.match(this.GlobalScriptFragment);
-
-		if (!scripts) { return; }
-
-        if (async) {
-        	setTimeout(function() {
-        		tapestry.evaluateScripts(scripts);
-        	}, 60);
-        } else {
-        	tapestry.evaluateScripts(scripts);
-        }
-	},
-
-	evaluateScripts:function(scripts){
-		tapestry.scriptInFlight = true;
-
-        for (var i=0; i<scripts.length; i++) {
-            var scr = scripts[i].match(this.ScriptFragment)[1];
-            if(!scr || scr.length <= 0){continue;}
-            try {
-                dojo.log.debug("evaluating script:", scr);
-                eval(scr);
-            } catch (e) {
-            	tapestry.scriptInFlight = false;
-                dojo.log.exception("Error evaluating script: " + scr, e, false);
-            }
-        }
-
-        tapestry.scriptInFlight = false;
-	},
-
-	/**
-	 * Function: loadScriptFromUrl
-	 *
-	 * Takes a url string and loads the javascript it points to as a normal
-	 * document head script include section. ie:
-	 *
-	 * : <script type="text/javascript" src="http://localhost/js/foo.js"></script>
-	 *
-	 * Parameters:
-	 * 	url - The url to the script to load into this documents head.
-	 */
-	loadScriptFromUrl:function(url){
-	    var scripts = window.document.getElementsByTagName("script");
-	    if (scripts){
-		    for (var i = 0; i < scripts.length; i++) {
-		        var src = scripts[i].src;
-		        if (src && src.length > 0 && src.indexOf(url)>=0 ) {
-		            return;
-		        }
-		    }
-	    }
-
-	    if (djConfig.isDebug) {
-	    	dojo.log.debug("loadScriptFromUrl: " + url + " success?: " + dojo.hostenv.loadUri(url));
-	    } else {
-	    	dojo.hostenv.loadUri(url);
-	    }
-	},
-
-	/**
-	 * Function: presentException
-	 *
-	 * When remote exceptions are caught on the server special xml blocks are returned to
-	 * the client when the requests are initiated via async IO. This function takes the incoming
-	 * Tapestry exception page content and dumps it into a modal dialog that is presented to the user.
-	 *
-	 * Parameters:
-	 * 	node - The incoming xml exception node.
-	 * 	kwArgs - The kwArgs used to initiate the original IO request.
-	 */
-	presentException:function(node, kwArgs) {
-        dojo.require("dojo.widget.*");
-        dojo.require("dojo.widget.Dialog");
-
-        var excnode=document.createElement("div");
-		excnode.setAttribute("id", "exceptiondialog");
-		document.body.appendChild(excnode);
-
-		var contentnode=document.createElement("div");
-		contentnode.innerHTML=tapestry.html.getContentAsString(node);
-		dojo.html.setClass(contentnode, "exceptionDialog");
-
-		var navnode=document.createElement("div");
-		navnode.setAttribute("id", "exceptionDialogHandle");
-		dojo.html.setClass(navnode, "exceptionCloseLink");
-		navnode.appendChild(document.createTextNode("Close"));
-
-		excnode.appendChild(navnode);
-		excnode.appendChild(contentnode);
-
-		var dialog=dojo.widget.createWidget("Dialog", {widgetId:"exception"}, excnode);
-		dojo.event.connect(navnode, "onclick", dialog, "hide");
-		dojo.event.connect(dialog, "hide", dialog, "destroy");
-
-        setTimeout(function(){
-            dialog.show();
-        }, 100);
-    },
-
-	/**
-	 * Function: cleanConnect
-	 *
-	 * Utility used to disconnect a previously connected event/function.
-	 *
-	 * This assumes that the incoming function name is being attached to
-	 * the global namespace "tapestry".
-	 */
-	cleanConnect:function(target, event, funcName){
-		if (!dj_undef(funcName, tapestry)){
-        	dojo.event.disconnect(target, event, tapestry, funcName);
-        }
-	},
-
-	linkOnClick:function(url, id, isJson){
-		var content={beventname:"onClick"};
-		content["beventtarget.id"]=id;
-
-		tapestry.bind(url, content, isJson);
-		return false;
-	},
-
-    /**
-	 * Function: isServingRequests
-	 *
-	 * Utility used to find out if there are any ajax requests in progress.
-	 */
-    isServingRequests:function(){
-	    return (tapestry.requestsInFlight > 0);
-    }
-}
-
-/**
- * package: tapestry.html
- * Provides functionality related to parsing and rendering dom nodes.
- */
-tapestry.html={
-
-    CompactElementRegexp:/<([a-zA-Z](?!nput)[a-zA-Z]*)([^>]*?)\/>/g, // regexp for compact html elements
-    CompactElementReplacer:'<$1$2></$1>', // replace pattern for compact html elements
-
-    /**
-	 * Function: getContentAsString
-	 *
-	 * Takes a dom node and returns its contents rendered in a string.
-     *
-     * The resulting string does NOT contain any markup (or attributes) of
-     * the given node - only child nodes are rendered and returned.Content
-     *
-     * Implementation Note: This function tries to make use of browser
-     * specific features (the xml attribute of nodes in IE and the XMLSerializer
-     * object in Mozilla derivatives) - if those fails, a generic implementation
-     * is used that is guaranteed to work in all platforms.
-	 *
-	 * Parameters:
-	 *
-	 *	node - The dom node.
-	 * Returns:
-	 *
-	 * The string representation of the given node's contents.
-	 */
-	getContentAsString:function(node){
-		if (typeof node.xml != "undefined") {
-			return this._getContentAsStringIE(node);
-		} else if (typeof XMLSerializer != "undefined" ) {
-			return this._getContentAsStringMozilla(node);
-		} else {
-			return this._getContentAsStringGeneric(node);
-		}
-	},
-
-   /**
-	 * Function: getElementAsString
-	 *
-	 * Takes a dom node and returns itself and its contents rendered in a string.
-     *
-     * Implementation Note: This function uses a generic implementation in order
-     * to generate the returned string.
-	 *
-	 * Parameters:
-	 *
-	 *	node - The dom node.
-	 * Returns:
-	 *
-	 * The string representation of the given node.
-	 */
-	getElementAsString:function(node){
-		if (!node) { return ""; }
-
-		var s='<' + node.nodeName;
-		// add attributes
-		if (node.attributes && node.attributes.length > 0) {
-			for (var i=0; i < node.attributes.length; i++) {
-				s += " " + node.attributes[i].name + "=\"" + node.attributes[i].value + "\"";
-			}
-		}
-		// close start tag
-		s += '>';
-		// content of tag
-		s += this._getContentAsStringGeneric(node);
-		// end tag
-		s += '</' + node.nodeName + '>';
-		return s;
-	},
-
-	_getContentAsStringIE:function(node){
-		var s=" "; //blank works around an IE-bug
-    	for (var i = 0; i < node.childNodes.length; i++){
-        	s += node.childNodes[i].xml;
-    	}
-    	return s;
-	},
-
-	_getContentAsStringMozilla:function(node){
-        if (!this.xmlSerializer){ this.xmlSerializer = new XMLSerializer();}
-
-	    var s = "";
-        for (var i = 0; i < node.childNodes.length; i++) {
-	        s += this.xmlSerializer.serializeToString(node.childNodes[i]);
-	        if (s == "undefined")
-		        return this._getContentAsStringGeneric(node);
-        }
-
-        return this._processCompactElements(s);
-	},
-
-	_getContentAsStringGeneric:function(node){
-		var s="";
-		if (node == null) { return s; }
-		for (var i = 0; i < node.childNodes.length; i++) {
-			switch (node.childNodes[i].nodeType) {
-				case 1: // ELEMENT_NODE
-				case 5: // ENTITY_REFERENCE_NODE
-					s += this.getElementAsString(node.childNodes[i]);
-					break;
-				case 3: // TEXT_NODE
-				case 2: // ATTRIBUTE_NODE
-				case 4: // CDATA_SECTION_NODE
-					s += node.childNodes[i].nodeValue;
-					break;
-				default:
-					break;
-			}
-		}
-		return s;
-	},
-
-	_processCompactElements:function(htmlData)
- 	{
-		 return htmlData.replace(this.CompactElementRegexp, this.CompactElementReplacer);
- 	}
-}
-
-/**
- * package: tapestry.event
- * 
- * Utility functions that handle converting javascript event objects into 
- * a name/value pair format that can be sent to the remote server.
- */
-tapestry.event={
-
-	/**
-	 * Function: buildEventProperties
-	 *
-	 * Takes an incoming browser generated event (like key/mouse events) and
-	 * creates a js object holding the basic values of the event in order for
-	 * it to be submitted to the server.
-	 *
-	 * Parameters:
-	 *
-	 *	event - The javascript event method is based on, if it isn't a valid
-	 * 				browser event it will be ignored.
-	 *	props - The existing property object to set the values on, if it doesn't
-	 * 				exist one will be created.
-	 *  args  - The arguments from an method-call interception 
-	 * Returns:
-	 *
-	 * The desired event properties bound to an object. Ie obj.target,obj.charCode, etc..
-	 */
-	buildEventProperties:function(event, props, args){
-		if (!props) props={};
-		
-		if (dojo.event.browser.isEvent(event)) {
-			if(event["type"]) props.beventtype=event.type;
-			if(event["keys"]) props.beventkeys=event.keys;
-			if(event["charCode"]) props.beventcharCode=event.charCode;
-			if(event["pageX"]) props.beventpageX=event.pageX;
-			if(event["pageY"]) props.beventpageY=event.pageY;
-			if(event["layerX"]) props.beventlayerX=event.layerX;
-			if(event["layerY"]) props.beventlayerY=event.layerY;
-
-			if (event["target"]) this.buildTargetProperties(props, event.target);
-		}
-
-		props.methodArguments = dojo.json.serialize( args );
-		
-		return props;
-	},
-	
-	
-
-	/**
-	 * Function: buildTargetProperties
-	 *
-	 * Generic function to build a properties object populated with
-	 * relevent target data.
-	 *
-	 * Parameters:
-	 *
-	 * 	props - The object that event properties are being set on to return to
-	 * 			the server.
-	 * 	target - The javscript Event.target object that the original event was targeted for.
-	 *
-	 * Returns:
-	 * 	The original props object passed in, populated with any data found.
-	 */
-	buildTargetProperties:function(props, target){
-		if(!target) { return; }
-
-		if (dojo.dom.isNode(target)) {
-			return this.buildNodeProperties(props, target);
-		} else {
-			dojo.raise("buildTargetProperties() Unknown target type:" + target);
-		}
-	},
-
-	/**
-	 * Function: buildNodeProperties
-	 *
-	 * Builds needed target node properties, like the node's id.
-	 *
-	 * Parameters:
-	 * 	props - The object that event properties are being set on to return to
-	 * 			the server.
-	 * 	node - The dom node specified as the Event.target in a javascript event.
-	 */
-	buildNodeProperties:function(props, node) {
-		if (node.getAttribute("id")) {
-			props["beventtarget.id"]=node.getAttribute("id");
-		}
-	}
-}
-
-tapestry.lang = {
-
-	/**
-	 * Searches the specified list for an object with a matching propertyName/value pair.
-	 * @param list 			The array of objects to search.
-	 * @param properyName	The object property key to match on. (ie object[propertyName])
-	 * 			Can also be a template object to match in the form of {key:{key:value}} nested
-	 * 			as deeply as you like.
-	 * @param value 		The value to be matched against
-	 * @return The matching array object found, or null.
-	 */
-	find:function(list, property, value){
-		if (!list || !property || list.length < 1) return null;
-
-		// if not propMatch then template object was passed in
-		var propMatch=dojo.lang.isString(property);
-		if (propMatch && !value) return null; //if doing string/other non template match and no value
-
-		for (var i=0; i < list.length; i++) {
-			if (!list[i]) continue;
-			if (propMatch) {
-				if (list[i] && list[i][property] && list[i][property] == value) return list[i];
-			} else {
-				if (this.matchProperty(property, list[i])) return list[i];
-			}
-		}
-		return null;
-	},
-
-	// called recursively to match object properties
-	// partially stolen logic from dojo.widget.html.SortableTable.sort
-	matchProperty:function(template, object){
-		if(!dojo.lang.isObject(template) || !dojo.lang.isObject(object))
-			return template.valueOf() == object.valueOf();
-
-		for(var p in template){
-			if(!(p in object)) return false;	//	boolean
-			if (!this.matchProperty(template[p], object[p])) return false;
-		}
-		return true;
-	}
-}
-
-dojo.AdapterRegistry = function (returnWrappers) {
-	this.pairs = [];
-	this.returnWrappers = returnWrappers || false;
-};
-dojo.lang.extend(dojo.AdapterRegistry, {register:function (name, check, wrap, directReturn, override) {
-	var type = (override) ? "unshift" : "push";
-	this.pairs[type]([name, check, wrap, directReturn]);
-}, match:function () {
-	for (var i = 0; i < this.pairs.length; i++) {
-		var pair = this.pairs[i];
-		if (pair[1].apply(this, arguments)) {
-			if ((pair[3]) || (this.returnWrappers)) {
-				return pair[2];
-			} else {
-				return pair[2].apply(this, arguments);
-			}
-		}
-	}
-	throw new Error("No match found");
-}, unregister:function (name) {
-	for (var i = 0; i < this.pairs.length; i++) {
-		var pair = this.pairs[i];
-		if (pair[0] == name) {
-			this.pairs.splice(i, 1);
-			return true;
-		}
-	}
-	return false;
-}});
-
-
-dojo.json = {
-	jsonRegistry:new dojo.AdapterRegistry(),
-	register:function (name, check, wrap, override) {
-		dojo.json.jsonRegistry.register(name, check, wrap, override);
-	},
-
-	evalJson:function (json) {
-	try {
-		return eval("(" + json + ")");
-	}
-	catch (e) {
-		dojo.debug(e);
-		return json;
-	}
-	},
-
-	serialize:function (o) {
-	var objtype = typeof (o);
-	if (objtype == "undefined") {
-		return "undefined";
-	} else {
-		if ((objtype == "number") || (objtype == "boolean")) {
-			return o + "";
-		} else {
-			if (o === null) {
-				return "null";
-			}
-		}
-	}
-	if (objtype == "string") {
-		return dojo.string.escapeString(o);
-	}
-	var me = arguments.callee;
-	var newObj;
-	if (typeof (o.__json__) == "function") {
-		newObj = o.__json__();
-		if (o !== newObj) {
-			return me(newObj);
-		}
-	}
-
-	if (typeof (o.json) == "function") {
-		newObj = o.json();
-		if (o !== newObj) {
-			return me(newObj);
-		}
-	}
-
-	if (objtype != "function" && typeof (o.length) == "number") {
-		var res = [];
-		for (var i = 0; i < o.length; i++) {
-			if (dojo.event.browser.isEvent(o[i]) || o[i]["stopPropagation"]){continue;}
-			var val = me(o[i]);
-			if (typeof (val) != "string") {
-				val = "undefined";
-			}
-			res.push(val);
-		}
-		return "[" + res.join(",") + "]";
-	}
-	try {
-		window.o = o;
-		newObj = dojo.json.jsonRegistry.match(o);
-		return me(newObj);
-	}
-	catch (e) {
-	}
-	if (objtype == "function") {
-		return null;
-	}
-
-	res = [];
-	for (var k in o) {
-		var useKey;
-		if (typeof (k) == "number") {
-			useKey = "\"" + k + "\"";
-		} else {
-			if (typeof (k) == "string") {
-				useKey = dojo.string.escapeString(k);
-			} else {
-				continue;
-			}
-		}
-		val = me(o[k]);
-		if (typeof (val) != "string") {
-			continue;
-		}
-		res.push(useKey + ":" + val);
-	}
-	return "{" + res.join(",") + "}";
-}};
diff --git a/tapestry/tapestry-framework/src/js/tapestry/form.js b/tapestry/tapestry-framework/src/js/tapestry/form.js
deleted file mode 100644
index ede4f90..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/form.js
+++ /dev/null
@@ -1,938 +0,0 @@
-dojo.provide("tapestry.form");
-dojo.provide("tapestry.form.datetime");
-dojo.provide("tapestry.form.validation");
-dojo.provide("tapestry.form_compat");
-dojo.provide("Tapestry");
-
-dojo.require("dojo.event.browser");
-dojo.require("dojo.dom");
-dojo.require("dojo.html.selection");
-dojo.require("tapestry.core");
-dojo.require("dojo.date.format");
-dojo.require("dojo.validate.datetime");
-dojo.require("dojo.validate.check");
-dojo.require("dojo.html.style");
-
-/**
- * package: tapestry.form
- * Provides central handling of all client side form related logic.
- */
-tapestry.form={
-	
-	// property: forms
-	// Contains a reference to all registered Tapestry forms in the current document.
-	forms:{}, // registered form references
-	// property: currentFocus 
-	// Reference to form element/element id of field that should currently recieve focus, if any
-	currentFocus:null,
-	
-	/**
-	 * Function: focusField
-	 * If possible, brings keyboard input focus to the specified field.
-	 * 
-	 * Parameters:
-	 * 	field - The field(field id) of the field to focus.
-	 * 
-	 * Note:
-	 * 	Function deprecated in favor of dojo equivalent, like 
-	 *  dojo.html.selectInputText(node).
-	 */
-	focusField:function(field){
-		if (arguments.length < 1) {return;}
-		
-		var f=dojo.widget.byId(field);
-		if(f && !dj_undef("focus", f)){
-			if (dojo.html.isVisible(f)){
-				f.focus();
-			}
-			return;
-		} else {
-			f = dojo.byId(field);
-		}
-		
-		if (!f) { return; }
-        if (field.disabled || field.clientWidth < 1) {
-			return;
-		}
-        
-        if(!dj_undef("focus", f) && dojo.html.isShowing(f)){
-            f.focus();
-			return;
-		}
-		
-        dojo.html.selectInputText(field);
-	},
-	
-	/**
-	 * Used by AlertDialog to focus the highest priority form field 
-	 * that failed validation. This happens because the field needs to 
-	 * be focused ~after~ the dialog is hidden.
-	 */
-	_focusCurrentField:function(){
-		if(!this.currentFocus){return;}
-		
-		this.focusField(this.currentFocus);
-	},
-	
-	/**
-	 * Function: registerForm
-	 * 
-	 * Registers the form with the local <forms> property so 
-	 * that there is a central reference of all tapestry forms.
-	 * 
-	 * Parameters:
-	 * 
-	 *	id		-	The form(form id) to register.
-	 *  async	-	Boolean, if true causes form submission to be asynchronous.
-	 *  json	-	Boolean, if true causes form submission to be asyncrhronous with an 
-	 * 				expected JSON response.
-	 */
-	registerForm:function(id, async, json){
-		var form=dojo.byId(id);
-		if (!form) {
-			dojo.raise("Form not found with id " + id);
-			return;
-		}
-		
-		// make sure id is correct just in case node passed in has only name
-		id=form.getAttribute("id");
-		
-		// if previously connected, cleanup and reconnect
-		if (this.forms[id]) {
-			dojo.event.disconnect(form, "onsubmit", this, "onFormSubmit");
-			for(var i = 0; i < form.elements.length; i++) {
-				var node = form.elements[i];
-				if(node && node.type && dojo.lang.inArray(["submit", "button"],node.type.toLowerCase())) {
-					dojo.event.disconnect(node, "onclick", tapestry.form, "inputClicked");
-				}
-			}
-			
-			var inputs = form.getElementsByTagName("input");
-			for(var i = 0; i < inputs.length; i++) {
-				var input = inputs[i];
-				if(input.type.toLowerCase() == "image" && input.form == form) {
-					dojo.event.disconnect(input, "onclick", tapestry.form, "inputClicked");
-				}
-			}
-			
-			dojo.event.disconnect(form, "onsubmit", this, "overrideSubmit");
-			delete this.forms[id];
-		}
-		
-		this.forms[id]={};
-		this.forms[id].validateForm=true;
-		this.forms[id].profiles=[];
-		this.forms[id].async=(typeof async != "undefined") ? async : false;
-		this.forms[id].json=(typeof json != "undefined") ? json : false;
-		
-		if (!this.forms[id].async) {
-			dojo.event.connect(form, "onsubmit", this, "onFormSubmit");
-		} else {
-			for(var i = 0; i < form.elements.length; i++) {
-				var node = form.elements[i];
-				if(node && node.type && dojo.lang.inArray(["submit", "button"],node.type.toLowerCase())) {
-					dojo.event.connect(node, "onclick", tapestry.form, "inputClicked");
-				}
-			}
-			
-			var inputs = form.getElementsByTagName("input");
-			for(var i = 0; i < inputs.length; i++) {
-				var input = inputs[i];
-				if(input.type.toLowerCase() == "image" && input.form == form) {
-					dojo.event.connect(input, "onclick", tapestry.form, "inputClicked");
-				}
-			}
-			
-			dojo.event.connect(form, "onsubmit", this, "overrideSubmit");
-		}
-	},
-	
-	overrideSubmit:function(e){
-        dojo.event.browser.stopEvent(e);
-        var elm = e.target;
-        if (!dj_undef("form", elm)){
-            dojo.log.debug("Submit event was generated from element: ", elm);
-            elm = elm.form;
-        }
-        tapestry.form.submitAsync(elm);
-	},
-	
-	/**
-	 * Function: registerProfile
-	 * 
-	 * Registers a form validation/translation profile. There
-	 * can potentially be more than one profile registered with
-	 * a form.
-	 * 
-	 * The profiles will be consulted at various points in the forms
-	 * life, which currently only involves running the profile checks
-	 * before form submission. (more points to be determined in the future)
-	 * 
-	 * See Also:
-	 * 	<dojo.validate.check>
-	 * 
-	 * Parameters:
-	 * 
-	 *	id		-	The form(form id) to register profile with.
-	 *	profile	-	The object containing all of the validation/value constraints for the form. 
-	 */
-	registerProfile:function(id, profile){
-		if (!this.forms[id]) {
-			dojo.raise("registerProfile(" + id + ") No form previously registered with that id.");
-			return;
-		}
-		
-		this.forms[id].profiles.push(profile);
-	},
-
-	/**
-	 * Function: clearProfiles
-	 * 
-	 * Clears any previously registered validation profiles 
-	 * on the specified form. Normally called during XHR requests
-	 * by returned JS response to ensure new validation logic coming
-	 * in from potentially new form fields is accounted for.
-	 * 
-	 * Parameters:
-	 * 
-	 *	id - The form id to clear profiles for.
-	 */
-	clearProfiles:function(id){
-		if (!this.forms[id]) return;
-		
-		for (var i=0; i < this.forms[id].profiles.length; i++) {
-			delete this.forms[id].profiles[i];
-		}
-		this.forms[id].profiles=[];
-	},
-	
-	inputClicked:function(e){
-		var node = e.currentTarget;
-		if(node.disabled || dj_undef("form", node)) { return; }
-		this.forms[node.form.getAttribute("id")].clickedButton = node;
-	},
-	
-	/**
-	 * Function: setFormValidating
-	 * 
-	 * If a form registered with the specified formId
-	 * exists a local property will be set that causes
-	 * validation to be turned on/off depending on the argument.
-	 * 
-	 * Parameters:
-	 * 
-	 * formId - The id of the form to turn validation on/off for.
-	 * validate - Boolean for whether or not to validate form, if not specified assumes true.
-	 */
-	setFormValidating:function(formId, validate){
-		if (this.forms[formId]){
-			this.forms[formId].validateForm = validate;
-        }
-	},
-	
-	/**
-	 * Event connected function that is invoked when a form
-	 * is submitted.
-	 */
-	onFormSubmit:function(evt){
-		if(!evt || dj_undef("target", evt)) {
-			dojo.raise("No valid form event found with argument: " + evt);
-			return;
-		}
-
-        var id=evt.target.getAttribute("id");
-		if (!id) {
-			dojo.raise("Form had no id attribute.");
-			return;
-		}
-		var form = dojo.byId(id);
-		
-		if (!dj_undef("value", form.submitmode)
-			&& (form.submitmode.value == "cancel" || form.submitmode.value == "refresh")) {
-			return;
-		}
-		
-		if (!tapestry.form.validation.validateForm(form, this.forms[id])) {
-			dojo.event.browser.stopEvent(evt);
-		}
-	},
-	
-	/**
-	 * Function: submit
-	 * 
-	 * Submits the form specified, optionally setting the submitname
-	 * hidden input field to the value of submitName to let the Form 
-	 * component on server know which button caused the submission. (For
-	 * the case of submit button listeners).
-	 * 
-	 * Parameters:
-	 * 
-	 * form			-	The form(form id) to submit.
-	 * submitName	- 	Optional submit name string to use when submitting. This is used
-	 * 					to associate a form submission with a particular component, like a
-	 * 					Submit/LinkSubmit/etc..
-	 * parms		-	Optional extra set of arguments that can control the form submission semantics
-	 * 					such as url/async/json/etc. 
-	 */
-	submit:function(form, submitName, parms){
-		form=dojo.byId(form);
-		if (!form) {
-			dojo.raise("Form not found with id " + form);
-			return;
-		}
-		var id=form.getAttribute("id");
-		if (submitName){
-			form.submitname.value=submitName;
-		}
-
-        if (!dj_undef("value", form.submitmode)
-                && (form.submitmode.value == "cancel" || form.submitmode.value == "refresh")
-                && !parms) {
-            form.submit();
-            return;
-        }
-
-        if (!tapestry.form.validation.validateForm(form, this.forms[id])) {
-			return;
-		}
-		
-		if (parms && !dj_undef("async", parms) && parms.async) {
-			tapestry.form.submitAsync(form, null, submitName, parms);
-			return;
-		} else if(!dj_undef(id, this.forms) && this.forms[id].async){
-			tapestry.form.submitAsync(form);
-			return;
-		}
-        
-        form.submit();
-	},
-	
-	/**
-	 * Function: cancel
-	 * 
-	 * Submits the form to the server in "cancel" mode, invoking any cancel listeners
-	 * registered to the server side equivalent to the form passed in.
-	 * 
-	 * Parameters:
-	 * 	
-	 * 	form 		-	The form(form id) to cancel.
-	 * 	submitName	- 	Optional submit name string to use when submitting. This is used
-	 * 					to associate a form submission with a particular component, like a
-	 * 					Submit/LinkSubmit/etc..
-	 *  parms       -   Optional object parms passed through to tapestry.form.submit().
-	 */
-	cancel:function(form, submitName, parms){
-		form=dojo.byId(form);
-		if (!form){
-			dojo.raise("Form not found with id " + form);
-			return;
-		}
-
-        var formName=form.getAttribute("id");
-        var validateState=tapestry.form.forms[formName].validateForm;
-        tapestry.form.setFormValidating(formName, false);
-        
-        form.submitmode.value="cancel";
-
-        if (parms && !dj_undef("async", parms) && parms.async){
-            this.submitAsync(form, null, submitName, parms);
-        } else {
-            this.submit(form, submitName, parms);
-        }
-        
-        tapestry.form.setFormValidating(formName, validateState);
-	},
-	
-	/**
-	 * Function: refresh
-	 * 
-	 * Submits the form to the server in "refresh" mode, invoking any refresh listeners
-	 * registered to the server side equivalent to the form passed in.
-	 * 
-	 * Parameters:
-	 * 	
-	 * 	form 		-	The form(form id) to refresh.
-	 * 	submitName	- 	Optional submit name string to use when submitting. This is used
-	 * 					to associate a form submission with a particular component, like a
-	 * 					Submit/LinkSubmit/etc..
-	 *  parms       -   Optional object parms passed through to tapestry.form.submit().
-	 */
-	refresh:function(form, submitName, parms){
-		form=dojo.byId(form);
-		if (!form){
-			dojo.raise("Form not found with id " + form);
-			return;
-		}
-
-        var formName=form.getAttribute("id");
-        var validateState=tapestry.form.forms[formName].validateForm;
-        tapestry.form.setFormValidating(formName, false);
-        
-        form.submitmode.value="refresh";
-
-        if (parms && !dj_undef("async", parms) && parms.async){
-            this.submitAsync(form, null, submitName, parms);
-        } else {
-            this.submit(form, submitName, parms);
-        }
-        
-        tapestry.form.setFormValidating(formName, validateState);
-    },
-	
-	/**
-	 * Function: submitAsync
-	 * 
-	 * Does almost the same thing as <tapestry.form.submit>, 
-	 * but submits the request via XHR to the server asynchronously.
-	 * 
-	 * Parameters:
-	 * 
-	 *	form		-	The form(form id) to submit.
-	 *	content		-	Optional content map, mainly used to pass in browser
-	 * 					event parameters to form submission, but can be any
-	 * 					typical form/value pair.
-	 *	submitName	-	Optional submit name string to use when submitting.
-	 *	parms		-	Optional set of extra parms that can override the defautls for 
-	 * 					this specific form submission, like the url/async/json behaviour of 
-	 * 					the submission.
-	 */
-	submitAsync:function(form, content, submitName, parms){
-		form=dojo.byId(form);
-		if (!form) {
-			dojo.raise("Form not found with id " + id);
-			return;
-		}
-		var formId=form.getAttribute("id");
-
-        if (!tapestry.form.validation.validateForm(form, this.forms[formId])) {
-			dojo.log.debug("Form validation failed for form with id " + formId);
-			return;
-		}
-		
-		if (submitName){
-			form.submitname.value=submitName;
-			if(!content){ content={}; }
-			if(form[submitName]){
-				content[submitName]=form[submitName].value;
-			}
-		}
-		
-		// handle submissions from input buttons
-		if (!dj_undef("clickedButton", this.forms[formId])) {
-			if (!content) { content={}; }
-			content[this.forms[formId].clickedButton.getAttribute("name")]=this.forms[formId].clickedButton.getAttribute("value");
-		}
-
-		var kwArgs={
-			formNode:form,
-			content:content,
-            useCache:true,
-            preventCache:true,
-            error: (function(){tapestry.error.apply(this, arguments);}),
-            encoding: tapestry.requestEncoding
-		};
-		
-		// check for override
-		if (parms){
-			if (!dj_undef("url", parms)) { kwArgs.url=parms.url; }
-		}
-
-		if (this.forms[formId].json || parms && parms.json) {
-			kwArgs.headers={"json":true};
-			kwArgs.mimetype="text/json";
-            kwArgs.load=(function(){tapestry.loadJson.apply(this, arguments);});
-        } else {
-			kwArgs.headers={"dojo-ajax-request":true};
-			kwArgs.mimetype="text/xml";
-			kwArgs.load=(function(){tapestry.load.apply(this, arguments);});
-		}
-		tapestry.requestsInFlight++;
-        dojo.io.queueBind(kwArgs);
-	}
-}
-
-tapestry.form.validation={
-
-	missingClass:"fieldMissing", // default css class that will be applied to fields missing a value
-	invalidClass:"fieldInvalid", // default css class applied to fields with invalid data
-
-	dialogName:"tapestry:AlertDialog",
-
-	/**
-	 * Main entry point for running form validation. The
-	 * props object passed in contains a number of fields that
-	 * are managed by tapestry.form:
-	 *
-	 * 		props = {
-	 * 			validateForm:[true|false] // whether to run validation at all
-	 * 			profiles:[profile1, profile2] // set of dojo.validate.check() style profiles
-	 * 										  // that may have been registered with form
-	 * 		}
-	 *
-	 * The individual profiles will contain any of the data described by the dojo documentation
-	 * for dojo.validate.check(). In addition to that, each profile will also have a corresponding
-	 * string message to display if the specified condition has been met. For example, if you have
-	 * specified that a select field named "select1" was required your profile would look something
-	 * like:
-	 *
-	 * 		profile = {
-	 * 			"required":["select1"], // normal dojo.validate.check data
-	 * 			"select1":{ // tapestry field/error type specific data
-	 * 				"required":"You must select a value for select1."
-	 * 			}
-	 * 		}
-	 *
-	 * It is intended for you to call dojo.validate.check(form, profile) for each profile
-	 * stored in the "profiles" field, as well as deciding how to display errors / warnings.
-	 *
-	 * @return Boolean indicating if form submission should continue. If false the form
-	 * 			will ~not~ be submitted.
-	 */
-	validateForm:function(form, props){
-		if (typeof form == "undefined") {return false;}
-		if (typeof props == "undefined") {return true;} // form exists but no profile? just submit I guess..
-		if (!props.validateForm) {return true;}
-
-		try {
-			this.clearValidationDecorations(form, props);
-
-			for (var i=0; i < props.profiles.length; i++) {
-				var results=dojo.validate.check(form, props.profiles[i]);
-
-				if (!this.processResults(form, results, props.profiles[i])) {
-					this.summarizeErrors(form, results, props.profiles[i]);
-					return false;
-				}
-			}
-		} catch (e) {
-			// since so many dynamic function calls may happen in here it's best that we
-			// catch all of them and log them or else peoples forms might still get submitted
-			// and they'd never be able to figure out what was wrong
-			dojo.log.exception("Error validating", e, true);
-			return false;
-		}
-
-		return true;
-	},
-
-	/**
-	 * Called for each registered profile on a form after
-	 * dojo.validate.check() has been called. This function is
-	 * expected to do UI related notifications of fields in error.
-	 *
-	 * @param form The form that was validated.
-	 * @param results The result of calling dojo.validate.check(form,profile)
-	 * @param profile The original profile used to validate form, also holds
-	 * 				  validation error messages to be used for each field.
-	 *
-	 * @return Boolean, if false form should not be submitted and all validation
-	 * 		   should be stopped. If true validation will continue and eventually
-	 * 		   form will be submitted.
-	 */
-	processResults:function(form, results, profile){
-		if (results.isSuccessful()) { return true; }
-
-		var formValid=true;
-		if (results.hasMissing()) {
-			var missing=results.getMissing();
-			for (var i=0; i < missing.length; i++) {
-				this.handleMissingField(missing[i], profile);
-			}
-
-			formValid=false;
-		}
-
-		if (results.hasInvalid()) {
-			var invalid=results.getInvalid();
-			for (var i=0; i < invalid.length; i++) {
-				this.handleInvalidField(invalid[i], profile);
-			}
-
-			formValid=false;
-		}
-
-		return formValid; // if got past successful everything is invalid
-	},
-
-	/**
-	 * Default field decorator for missing fields.
-	 *
-	 * @param field The field element that was missing data.
-	 * @param profile The form validation profile.
-	 */
-	handleMissingField:function(field, profile){
-		field=dojo.byId(field);
-		if (dj_undef("type", field)) {return;}
-		dojo.html.removeClass(field, this.invalidClass);
-
-		if (!dojo.html.hasClass(field, this.missingClass)){
-			dojo.html.prependClass(field, this.missingClass);
-		}
-	},
-
-	/**
-	 * Default field decorator for invalid fields.
-	 *
-	 * @param field The field element that had invalid data.
-	 * @param profile The form validation profile.
-	 */
-	handleInvalidField:function(field, profile){
-		field=dojo.byId(field);
-		if (dj_undef("type", field)) {return;}
-		dojo.html.removeClass(field, this.missingClass);
-
-		if (!dojo.html.hasClass(field, this.invalidClass)){
-			dojo.html.prependClass(field, this.invalidClass);
-		}
-	},
-
-	/**
-	 * Clears out previous css classes set on fields
-	 * in error.
-	 */
-	clearValidationDecorations:function(form, props){
-
-        for (var i=0; i < props.profiles.length; i++) {
-
-            for (var fieldName in props.profiles[i]) {
-                if (dj_undef("type", form.elements[fieldName]) || typeof form.elements[fieldName].type == "undefined"
-                        || form.elements[fieldName].type == "submit"
-                        || form.elements[fieldName].type == "hidden") { continue; }
-
-                dojo.html.removeClass(form.elements[fieldName], this.missingClass);
-                dojo.html.removeClass(form.elements[fieldName], this.invalidClass);
-            }
-        }
-	},
-
-	/**
-	 * Optionally allows an alert dialog/dhtml dialog/etc to
-	 * be displayed to user to alert them to the invalid state
-	 * of their form if validation errors have occurred.
-	 *
-	 * @param form The form being validated.
-	 * @param results Returned value of dojo.validate.check(form, profile)
-	 * @param profile Validation profile definition
-	 */
-	summarizeErrors:function(form, results, profile){
-		var merrs=[];
-		var ierrs=[];
-		tapestry.form.currentFocus=null;
-
-		if (results.hasMissing()){
-			var fields=results.getMissing();
-			for (var i=0; i<fields.length; i++){
-				if(i==0 && !tapestry.form.currentFocus){
-					tapestry.form.currentFocus=fields[i];
-				}
-				if (profile[fields[i]] && profile[fields[i]]["required"]){
-					if (dojo.lang.isArray(profile[fields[i]]["required"])) {
-						for (var z=0; z < profile[fields[i]]["required"].length; z++)
-							merrs.push(profile[fields[i]]["required"][z]);
-					} else
-						merrs.push(profile[fields[i]]["required"]);
-				}
-			}
-		}
-		if (results.hasInvalid()){
-			var fields=results.getInvalid();
-			for (var i=0; i<fields.length; i++){
-				if(i==0 && !tapestry.form.currentFocus){
-					tapestry.form.currentFocus=fields[i];
-				}
-				if (profile[fields[i]] && profile[fields[i]]["constraints"]){
-					if (dojo.lang.isArray(profile[fields[i]]["constraints"])) {
-						for (var z=0; z < profile[fields[i]]["constraints"].length; z++)
-							ierrs.push(profile[fields[i]]["constraints"][z]);
-					} else
-						ierrs.push(profile[fields[i]]["constraints"]);
-				}
-			}
-		}
-
-		var msg="";
-		if (merrs.length > 0) {
-			msg+='<ul class="missingList">';
-			for (var i=0; i<merrs.length;i++) {
-				msg+="<li>"+merrs[i]+"</li>";
-			}
-			msg+="</ul>";
-		}
-		if (ierrs.length > 0) {
-			msg+='<ul class="invalidList">';
-			for (var i=0; i<ierrs.length;i++) {
-				msg+="<li>"+ierrs[i]+"</li>";
-			}
-			msg+="</ul>";
-		}
-
-        dojo.require("dojo.widget.*");
-        dojo.require("tapestry.widget.AlertDialog");
-
-        var ad=dojo.widget.byId("validationDialog");
-		if (ad) {
-			ad.setMessage(msg);
-			ad.show();
-			return;
-		}
-
-		var node=document.createElement("span");
-		document.body.appendChild(node);
-		var dialog=dojo.widget.createWidget(this.dialogName,
-						{
-							widgetId:"validationDialog",
-							message:msg
-						}, node);
-		dialog.show();
-	},
-
-	/**
-	 * Validates that the input value matches the given
-	 * regexp pattern.
-	 *
-	 * @param value The string value to be evaluated.
-	 * @param pattern The regexp pattern used to match against value.
-	 */
-	isValidPattern:function(value, pattern){
-		if (typeof value != "string" || typeof pattern != "string") { return false; }
-
-		var re = new RegExp(pattern);
-		return re.test(value);
-	},
-
-	isPalleteSelected:function(elem){
-		return elem.length > 0;
-	},
-
-   /**
-    * Validates that the input value is equal with the value of the given input control.
-    */
-    isEqual:function(value, other){
-        var otherValue = dojo.byId(other).value;
-        return value == otherValue;
-    },
-
-   /**
-    * Validates that the input value is not equal with the value of the given input control.
-    */
-    isNotEqual:function(value, other){
-        return !tapestry.form.validation.isEqual(value, other);
-    },
-
-   /**
-    *  Checks that the value given is greater than or equal to the value of
-    *  minString. Uses dojo.i18n.number.parse() to parse out the values using
-    *  the locale settings configured for the current page.
-    */
-    greaterThanOrEqual:function(value, minString, flags){
-        flags.validate=false;
-        var min = dojo.i18n.number.parse(minString, null, flags);
-        var num = dojo.i18n.number.parse(value, null, flags);
-        if (Number.NaN == num) { return false; }
-
-        return num >= min;
-    },
-
-   /**
-    *  Checks that the value given is less than or equal to the value of
-    *  maxString. Uses dojo.i18n.number.parse() to parse out the values using
-    *  the locale settings configured for the current page.
-    */
-    lessThanOrEqual:function(value, maxString, flags){
-        flags.validate=false;
-        var max = dojo.i18n.number.parse(maxString, null, flags);
-        var num = dojo.i18n.number.parse(value, null, flags);
-        if (Number.NaN == num) { return false; }
-
-        return num <= max;
-    }
-}
-
-tapestry.form.datetime={
-
-	/**
-	 * Checks if the specified value is a valid date, according to
-	 * the flags passed in.
-	 *
-	 * @param value The string value of the date being validated.
-	 * @param flags An object.
-	 * 		flags.format 	A string format pattern that will be used to validate
-	 * 						the incoming value via @link dojo.validate.isValidDate(value, format).
-	 * 		flags.max		A string date value representing the maximum date that can be selected.
-	 * 		flags.min		A string date value representing the minimum date that can be selected.
-	 * @return Boolean. True if valid, false otherwise.
-	 */
-	isValidDate:function(value, flags){
-		if(!value){return false;}
-
-		if (!flags){
-			dojo.raise("isValidDate: value and flags must be specified");
-			return;
-		}
-
-		// parse date value
-		var dateValue=null;
-		try {
-			dateValue = dojo.date.parse(value, flags);
-		} catch (e) {
-			dojo.log.exception("Error parsing input date.", e, true);
-			return false;
-		}
-
-		if(dateValue == null) { return false; }
-
-		// convert to format that is validatable
-		value=dojo.date.format(dateValue, flags);
-
-		// TODO: This is totally useless right now, doesn't even accept formats with string equivs
-		// See a better method http://www.mattkruse.com/javascript/date/source.html
-		// basic format validation
-		// if (!dojo.validate.isValidDate(value, flags.format))
-		//	return false;
-
-		// max date
-		if (!dj_undef("max", flags)){
-			if (typeof flags.max == "string"){
-				flags.max=dojo.date.parse(flags.max, flags);
-			}
-			if (dojo.date.compare(dateValue, flags.max, dojo.date.compareTypes.DATE) > 0)
-				return false;
-		}
-
-		// min date
-		if (!dj_undef("min", flags)){
-			if (typeof flags.min == "string"){
-				flags.min=dojo.date.parse(flags.min, flags);
-			}
-			if (dojo.date.compare(dateValue, flags.min, dojo.date.compareTypes.DATE) < 0)
-				return false;
-		}
-
-		return true;
-	}
-
-}
-
-// package: tapestry.form_compat
-// Backwards compatibility functions, to be removed in 4.1.1 js version. Contains all of
-// the functions found in the old Form.js provided by previous Tapestry releases.
-// Should only be included by tapestry.form, don't dojo.require() this module.
-
-// global used to deprecate old event connection methods
-tapestry.form.deprecateConnect=function(formName, fnc, event, advice){
-	dojo.deprecated("Tapestry.on"+event,
-					"use dojo.event.connect instead",
-					"4.1.1");
-
-	if (advice) {
-		dojo.event.connect(advice, dojo.byId(formName), event, fnc);
-	} else {
-		dojo.event.connect(dojo.byId(formName), event, fnc);
-	}
-}
-
-// BEGIN old function definitions
-
-Tapestry.default_invalid_field_handler=function(event, field, message){
-	dojo.deprecated("Tapestry.default_invalid_field_handler",
-					"use tapestry.form.validation.validateForm instead",
-					"4.1.1");
-	if (field.disabled) return;
-
-    if (typeof window != "undefined"){
-    	window.alert(message);
-    } else {
-    	dojo.debug("Invalid field : " + message);
-    }
-    tapestry.form.focusField(field);
-}
-
-Tapestry.invalid_field=function(field, message){
-	Tapestry.default_invalid_field_handler(null, field, message);
-}
-
-Tapestry.find=function(id){
-	dojo.deprecated("Tapestry.find",
-					"use dojo.byId instead",
-					"4.1.1");
-	return dojo.byId(id);
-}
-
-Tapestry.register_form=function(formId){
-	dojo.deprecated("Tapestry.register_form",
-					"use tapestry.form.registerForm instead register_form(" + formId + ")",
-					"4.1.1");
-	tapestry.form.registerForm(formId);
-}
-
-Tapestry.onpresubmit=function(formName, fnc){ tapestry.form.deprecateConnect(formName, fnc, "onsubmit", "before"); };
-Tapestry.onsubmit=function(formName, fnc){ tapestry.form.deprecateConnect(formName, fnc, "onsubmit"); };
-Tapestry.onpostsubmit=function(formName, fnc){ tapestry.form.deprecateConnect(formName, fnc, "onsubmit", "after"); };
-Tapestry.onreset=function(formName, fnc){ tapestry.form.deprecateConnect(formName, fnc, "onreset"); };
-Tapestry.onrefresh=function(formName, fnc){ tapestry.form.deprecateConnect(formName, fnc, "onrefresh"); };
-Tapestry.oncancel=function(formName, fnc){ tapestry.form.deprecateConnect(formName, fnc, "oncancel"); };
-
-Tapestry.set_focus=function (field){
-	dojo.deprecated("Tapestry.set_focus",
-					"use tapestry.form.focusField instead",
-					"4.1.1");
-	tapestry.form.focusField(field);
-}
-
-Tapestry.trim_field_value = function(fieldId)
-{
-	dojo.deprecated("Tapestry.trim_field_value",
-					"use dojo.html instead",
-					"4.1.1");
-
-	if (arguments.length < 1) return;
-
-	var elm=dojo.byId(id);
-	if (!elm) {return;}
-	if ( elm.type != "text" && elm.type != "textarea"
-		&& elm.type != "password" ) { return; }
-
-	elm.value = elm.value.replace(/(^\s*|\s*$)/g, "");
-}
-
-Tapestry.require_field = function(event, field, message)
-{
-	dojo.deprecated("Tapestry.require_field",
-					"use tapestry.form.validation.validateForm instead",
-					"4.1.1");
-	if (arguments.length < 1) return;
-
-	var elem=dojo.byId(field);
-	if (!elem) { return; }
-
-	// Are textbox, textarea, or password fields blank.
-	if ( (elem.type == "text" || elem.type == "textarea" || elem.type == "password")
-		&& /^\s*$/.test(elem.value) ) {
-		Tapestry.default_invalid_field_handler(elem, message);
-		return;
-	}
-	// Does drop-down box have option selected.
-	else if ( (elem.type == "select-one" || elem.type == "select-multiple")
-			&& elem.selectedIndex == -1 ) {
-		Tapestry.default_invalid_field_handler(elem, message);
-		return;
-	} else if ( elem instanceof Array )  {
-		// Does radio button group (or check box group) have option checked.
-		var checked = false;
-		for (var j = 0; j < elem.length; j++) {
-			if (elem[j].checked) { checked = true; }
-		}
-		if ( !checked ) {
-			Tapestry.default_invalid_field_handler(elem, message);
-			return;
-		}
-	}
-}
-
-Tapestry.submit_form = function(form_id, field_name)
-{
-	dojo.deprecated("Tapestry.submit_form",
-					"use tapestry.form.submit instead (" + form_id + ", " + field_name + ")",
-					"4.1.1");
-	tapestry.form.submit(form_id, field_name);
-}
diff --git a/tapestry/tapestry-framework/src/js/tapestry/fx.js b/tapestry/tapestry-framework/src/js/tapestry/fx.js
deleted file mode 100644
index 7f07621..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/fx.js
+++ /dev/null
@@ -1,166 +0,0 @@
-dojo.provide("tapestry.fx");
-dojo.require("tapestry.core");
-
-/**
- * package: tapestry.fx
- * Provides handling of effects applied before, during or after an XHR request/response.
- */
-tapestry.fx={
-    
-    // property: preEffects
-    // Contains a reference to all registered pre-effects, i.e. effects that are
-    // executed before an XHR request.
-    preEffects:{},
-    // property: postEffects
-    // Contains a reference to all registered post-effects, i.e. effects that are
-    // executed when new content arrives through an XHR response.
-    postEffects:{},
-    // property: ajaxStatusAction
-    ajaxStatusAction:'loading',
-    
-    /**
-     * Function: attachPreEffect
-     * Schedules the execution of an effect when the specified link
-     * is clicked (and thus an XHR request begins).
-     * 
-     * See Also:
-     * 	<tapestry.fx.attachPostEffect>  
-     *  <dojo.lfx.IAnimation> 
-     *
-     * Parameters:
-     * 	triggerId - The clientId of the DirectLink that triggers the effect.
-     *  animationFunc - A function that returns the animation to execute. 
-     *  async - Boolean for whether to execute the effect in parallel to the
-     *          XHR request. Defaults to false, i.e. the XHR is blocked until
-     *          the effect ends.
-     * 
-     * Note:
-     * 	Here's an example usage:
-     *      tapestry.fx.attachPreEffect("DirectLink",
-     *          function(){return dojo.lfx.wipeOut("entry", 800, dojo.lfx.easeDefault) });
-     */   
-    attachPreEffect:function(triggerId, animationFunc, async){
-        if (dojo.lang.isEmpty(this.preEffects))
-            this._initPreEffects();
-        this.preEffects[triggerId] = {async:async, animation:animationFunc};        
-    },
-    
-    /**
-     * Function: attachPostEffect
-     * Schedules the execution of an effect when the specified content
-     * is returned through an XHR response.
-     * 
-     * See Also:
-     * 	<tapestry.fx.attachPreEffect>  
-     *  <dojo.lfx.IAnimation> 
-     *
-     * Parameters:
-     * 	updateId - The id of a dom node that (when updated) triggers the effect.
-     *  animationFunc - A function that returns the animation to execute. 
-     * 
-     * Note:
-     * 	Here's an example usage:
-     *      tapestry.fx.attachPostEffect("entry",
-     *          function(){return dojo.lfx.wipeIn("entry", 1500, dojo.lfx.easeDefault) });
-     */       
-    attachPostEffect:function(updateId, animationFunc){
-        if (dojo.lang.isEmpty(this.postEffects))
-            this._initPostEffects();        
-        this.postEffects[updateId] = {animation:animationFunc};
-    },
-    
-    /**
-     * Function: removeAll
-     * Removes all registered effects (preEffects and postEffects).
-     */       
-    removeAll:function(){
-        this.preEffects={};
-        this.postEffects={};
-    },
-
-    /**
-     * Function: attachAjaxStatus
-     * Allows specifying a dom node that will be shown or hidden while ajax requests
-     * are in progress or have finished.
-     * Alternatively, one can specify a custom
-     * function which will get invoked when an ajax request starts or ends - the first
-     * argument to that function will be a boolean corresponding to wheather the status
-     * element should be showing or not.
-     *
-     * Parameters:
-     *  a1 - The dom id to show - hide, or the function to invoke when ajax starts or ends.
-     */
-    attachAjaxStatus:function(a1){
-        dojo.log.debug("Attaching ajax status listener");
-        if (dojo.lang.isString(a1)) {
-            tapestry.fx.ajaxStatusAction =
-                function(bShow){if (bShow) dojo.html.show(a1); else dojo.html.hide(a1);};
-        }
-        else if (dojo.lang.isFunction(a1)) {
-            tapestry.fx.ajaxStatusAction = a1;
-        }
-        else {
-            dojo.log.warn("Argument to tapestry.fx.attachAjaxStatus should be either a string or a function");
-            return;
-        }
-        dojo.event.connectOnce(dojo.io, "queueBind", tapestry.fx._processAjaxStatus);
-        dojo.event.connectOnce(tapestry, "error", tapestry.fx._processAjaxStatus);
-        dojo.event.connectOnce(tapestry, "load", tapestry.fx._processAjaxStatus);
-        dojo.event.connectOnce(tapestry, "loadJson", tapestry.fx._processAjaxStatus);        
-    },
-
-    _processAjaxStatus:function(){
-        tapestry.fx.ajaxStatusAction.apply(this, [tapestry.isServingRequests()]);
-    },
-    
-    _initPreEffects:function(){
-        dojo.log.debug("Advising tapestry.linkOnClick");
-        dojo.event.connectAround(tapestry, "linkOnClick", tapestry.fx, "_applyPreEffects");
-    },
-    
-    _initPostEffects:function(){
-        dojo.log.debug("Advising tapestry.loadContent");
-        dojo.event.connectAround(tapestry, "loadContent", tapestry.fx, "_applyPostEffects");
-    },
-    
-    _applyPreEffects:function(miObj){
-        var id = miObj.args[1];        
-        var effect = this.preEffects[id];
-        if (effect){
-            dojo.log.debug("Found pre-effect:", effect, id);
-                       
-            var anim = effect.animation();
-            
-            if (effect.async){          
-                anim.play();
-                return miObj.proceed();                
-            }
-            else{
-                anim.connect("onEnd", function(){ miObj.proceed(); });
-                anim.play();
-                return false;
-            }
-        }
-        else{
-            return miObj.proceed();
-        }        
-    },
-    
-    _applyPostEffects:function(miObj){
-        var id = miObj.args[0];
-        var effect = this.postEffects[id];
-        if (effect){
-            dojo.log.debug("Found post-effect:", effect, id);
-            
-            var ret = miObj.proceed();
-            
-            var anim = effect.animation();
-            anim.play();
-            
-            return ret;
-        }
-        else{            
-            return miObj.proceed();
-        }        
-    }
-}
diff --git a/tapestry/tapestry-framework/src/js/tapestry/namespace.js b/tapestry/tapestry-framework/src/js/tapestry/namespace.js
deleted file mode 100644
index 782e3a6..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/namespace.js
+++ /dev/null
@@ -1,28 +0,0 @@
-dojo.provide("tapestry.namespace");
-
-dojo.require("dojo.ns");
-
-(function(){
-	
-	var map = {
-		html: {
-			"alertdialog": "tapestry.widget.AlertDialog",
-			"timepicker": "tapestry.widget.TimePicker"
-		}
-	};
-	
-	function resolveNamespace(name, domain){
-		if(!domain){ domain="html"; }
-		if(!map[domain]){ return null; }
-		return map[domain][name];
-	}
-	
-	var tpath;
-	if (dojo.hostenv.moduleHasPrefix("tapestry")){
-		tpath=dojo.hostenv.getModulePrefix("tapestry");
-	} else {
-		tpath="../tapestry";
-	}
-	dojo.registerNamespaceManifest("tapestry", tpath, "tapestry", "tapestry.widget");
-	dojo.registerNamespaceResolver("tapestry", resolveNamespace);
-})();
diff --git a/tapestry/tapestry-framework/src/js/tapestry/test.js b/tapestry/tapestry-framework/src/js/tapestry/test.js
deleted file mode 100644
index 47dff8c..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/test.js
+++ /dev/null
@@ -1,33 +0,0 @@
-dojo.provide("tapestry.test");
-
-dojo.require("dojo.logging.Logger");
-dojo.require("dojo.event.browser");
-
-djConfig.locale="en_US";
-
-// override to make sure our fake events pass
-dojo.event.browser.isEvent=function() { return true; }
-
-function lastMsgContains(str){
-	if (arguments.length < 1) return false;
-	
-	var last=dojo.logging.logQueueHandler.data.pop();
-	if (!last || !last.message) return false;
-	
-	return last.message.toUpperCase().indexOf(str.toUpperCase()) > -1;
-}
-
-// helper object for logging method calls
-function mock(){
-	this.mockArgs=arguments;
-	this.called=false;
-	
-	this.intercept=function(){
-		this.called=true;
-		jum.assertEquals("mockArgLength", this.mockArgs.length, arguments.length);
-
-		for (var i=0; i < this.mockArgs.length; i++) {
-			jum.assertEquals("mockArgument", this.mockArgs[i], arguments[i]);
-		}
-	}
-}
diff --git a/tapestry/tapestry-framework/src/js/tapestry/widget/AlertDialog.js b/tapestry/tapestry-framework/src/js/tapestry/widget/AlertDialog.js
deleted file mode 100644
index 306b8b9..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/widget/AlertDialog.js
+++ /dev/null
@@ -1,102 +0,0 @@
-dojo.provide("tapestry.widget.AlertDialog");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.Dialog");
-dojo.require("dojo.event.common");
-dojo.require("dojo.html.common");
-
-/**
- * Script:  tapestry.widget.AlertDialog
- * 
- * The modal dialog used to display client side validation errors / informational
- * messages.
- * 
- * Inherits from:
- * 		<dojo.widget.Dialog>
- * 
- */
-dojo.widget.defineWidget(
-	"tapestry.widget.AlertDialog",
-	dojo.widget.Dialog,
-	{
-		bgColor: "white",
-		bgOpacity: 0.6,
-		okButton:null,
-		messageNode:null,
-		message:"",
-		
-		dialogClass:"alertDialog",
-		contentClass:"alertContent",
-		buttonClass:"alertButton",
-		buttonText:"OK",
-		
-		/**
-		 * Function: postCreate
-		 * 
-		 * Called after widget constructed.
-		 */
-		postCreate: function(args, frag, parentComp) {
-			dojo.widget.Dialog.prototype.postCreate.call(this, args, frag, parentComp);
-			
-			var content=document.createElement("div");
-			dojo.html.setClass(content, this.contentClass);
-			this.containerNode.appendChild(content);
-			dojo.html.addClass(this.containerNode, this.dialogClass);
-			
-			this.messageNode=document.createElement("div");
-			this.messageNode.innerHTML=this.message;
-			content.appendChild(this.messageNode);
-			
-			var buttNode=document.createElement("button");
-			dojo.html.setClass(buttNode, this.buttonClass);
-			buttNode.setAttribute("id", "alertButton");
-			buttNode.innerHTML = this.buttonText;
-			content.appendChild(buttNode);
-			
-			this.okButton=buttNode;
-			this.tabStart=this.okButton;
-			this.tabEnd=this.okButton;
-			this.show();
-			dojo.event.connect(this.okButton, "onclick", this, "hideDialog");
-			this.okButton.focus();
-			dojo.event.connect(this.wrapper, 'onkeyup', this, 'dialogKeys');
-			dojo.event.connect(document.body, 'onkeyup', this, 'bodyKeys'); 
-		},
-		
-		dialogKeys:function(e) {
-			if (e.keyCode == e.KEY_ESCAPE) {
-				this.hideDialog(e);
-			}
-			// allow default behavior, but don't let the event keep bubbling/propagating
-			if (e.stopPropagation) {
-				e.stopPropagation();
-			} else { 
-				e.cancelBubble = true; 
-			}
-		},
-		
-		bodyKeys:function(e) {
-			if (e.keyCode == e.KEY_ESCAPE) {
-				this.hideDialog(e);
-			} else if ( ! dojo.dom.isDescendantOf(e.target, this.wrapper, true) ) {
-				dojo.event.browser.stopEvent(e);
-				this.tabStart.focus();
-			}
-		},
-		
-		setMessage:function(str){
-			this.messageNode.innerHTML=str;
-		},
-		
-		hideDialog:function(e){
-			dojo.event.disconnect(this.wrapper, 'onkeyup', this, 'dialogKeys');
-			dojo.event.disconnect(document.body, 'onkeyup', this, 'bodyKeys');
-			this.hideModalDialog();
-			dojo.dom.removeNode(this.okButton);
-			tapestry.widget.AlertDialog.prototype.destroy.call(this);
-			dojo.dom.removeNode(this.bg); 
-			tapestry.form._focusCurrentField();
-		}
-	},
-	"html"
-);
diff --git a/tapestry/tapestry-framework/src/js/tapestry/widget/TDebugConsole.js b/tapestry/tapestry-framework/src/js/tapestry/widget/TDebugConsole.js
deleted file mode 100644
index 9328d5c..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/widget/TDebugConsole.js
+++ /dev/null
@@ -1,61 +0,0 @@
-dojo.provide("tapestry.widget.TDebugConsole");
-
-dojo.require("dojo.widget.*");
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.widget.Menu2");
-dojo.require("dojo.lang");
-dojo.require("dojo.html");
-dojo.require("dojo.event.*");
-dojo.widget.tags.addParseTreeHandler("dojo:tdebugConsole");
-
-tapestry.widget.TDebugConsole=function(){
-	dojo.widget.HtmlWidget.call(this);
-	this.widgetType="TDebugConsole";
-	this.isContainer=false;
-};
-
-dojo.inherits(tapestry.widget.TDebugConsole, dojo.widget.HtmlWidget);
-
-/**
- * Script: tapestry.widget.TDebugConsole
- * 
- * The modal dialog used to display client side validation errors / informational
- * messages.
- * 
- * Inherits from:
- * 		<dojo.widget.HtmlWidget>
- */
-dojo.lang.extend(tapestry.widget.TDebugConsole, {
-	templatePath:dojo.uri.dojoUri("../tapestry/widget/templates/TDebugConsole.html"),
-	templateCssPath:null,
-	
-	/**
-	 * Function: fillInTemplate
-	 * 
-	 * Remarks:
-	 * Called during widget creation.
-	 */
-	fillInTemplate:function(){
-		document.getElementById("debug").appendChild(this.domNode);
-		
-		var mbar = dojo.widget.createWidget("MenuBar2", 
-											{widgetId:"mbar"}, 
-											this.menuBar);
-		var mbaritem1 = dojo.widget.createWidget("MenuBarItem2", 
-												{submenuId:"submenu1",
-												caption:"View",widgetId:"mainFile"}, 
-												this.menuBarItem1);
-		mbar.addChild(mbaritem1);
-		
-		var popup = dojo.widget.createWidget("PopupMenu2", 
-											{widgetId:"submenu1"}, 
-											this.popupMenu2);
-		var mitem = dojo.widget.createWidget("MenuItem2", 
-											{widgetId:"mitem1",
-											caption:"INFO"}, 
-											this.popupMenuItem1);
-		popup.addChild(mitem);
-		
-		dojo.event.connect(mitem, "onClick", function(e){alert('hello world');});
-	}
-});
diff --git a/tapestry/tapestry-framework/src/js/tapestry/widget/TimePicker.js b/tapestry/tapestry-framework/src/js/tapestry/widget/TimePicker.js
deleted file mode 100644
index 814b93f..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/widget/TimePicker.js
+++ /dev/null
@@ -1,321 +0,0 @@
-dojo.provide("tapestry.widget.TimePicker");
-
-dojo.require("dojo.widget.HtmlWidget");
-dojo.require("dojo.html.style");
-dojo.require("dojo.html.util");
-dojo.require("dojo.html.metrics");
-dojo.require("dojo.html.iframe");
-
-tapestry.widget.currentTimePicker=null;
-
-dojo.widget.defineWidget(
-        "tapestry.widget.TimePicker",
-        dojo.widget.HtmlWidget,
-{
-    inputNodeId:null, // unique element id of form input text field
-    optionValues:[], // param of 12 hour clock selection values
-    selectedIndex:null, // param of what the default selected index should be
-    dropdownClass:"dropdownCombobox",
-    dropdownOptionClass:"dropdownOption",
-    optionHoverClass:"optionHover",
-
-    inputNode:null, // form input text node
-    selectedNode:null, // currently selected node
-    hoveredNode:null, // current node being hovered over with mouse - ie has background color changed
-    dropdownNode:null, // drop down div container
-    bgIframe:null,
-    options:[], // option div nodes
-    showing:false,
-    preventBlur:false,
-    hasFocus:false,
-    dropdownDim:{height:0, width:0},
-
-    postCreate: function() {
-        this.inputNode = dojo.byId(this.inputNodeId);
-
-        this.dropdownNode = document.createElement("div");
-        this.dropdownNode.setAttribute("id", this.widgetId + "dropdown");
-        this.dropdownNode.style["display"] = "none";
-        dojo.html.setClass(this.dropdownNode, this.dropdownClass);
-
-        var contDiv = document.createElement("div");
-        this.dropdownNode.appendChild(contDiv);
-        
-        for (var i=0; i < this.optionValues.length; i++){
-            var option = document.createElement("div");
-            option.setAttribute("id", "combooption-" + i);
-            dojo.html.setClass(option, this.dropdownOptionClass);
-            option.appendChild(document.createTextNode(this.optionValues[i]));
-            
-            contDiv.appendChild(option);
-            this.options.push(option);
-
-            if (this.selectedIndex && i == this.selectedIndex){
-                this.selectedNode = option;
-
-                if (!this.inputNode.value || this.inputNode.value.length < 1){
-                    this.inputNode.value=this.optionValues[i];
-                }
-            }
-
-            dojo.event.connect(option, "onmouseover", this, "onOptionMouseOver");
-            dojo.event.connect(option, "onmouseout", this, "onOptionMouseOut");
-            dojo.event.connect(option, "onmousedown", this, "onOptionClicked");
-        }
-
-        var m = dojo.html.getCachedFontMeasurements();
-        this.dropdownDim.width = m["1em"] * 6;
-        this.dropdownDim.height = m["1em"] * 11;
-
-        var st=this.dropdownNode.style;
-        st["overflow"]="auto";
-        st["zIndex"]=9000;
-        st["position"]="absolute";
-        st["width"]=this.dropdownDim.width + "px"
-        st["height"]=this.dropdownDim.height + "px";
-
-        dojo.body().appendChild(this.dropdownNode);
-
-        if(dojo.render.html.ie55||dojo.render.html.ie60){
-            this.bgIframe = new dojo.html.BackgroundIframe();
-            this.bgIframe.setZIndex(this.dropdownNode);
-        }
-        
-        dojo.event.connect(this.inputNode, "onclick", this, "onInputClick");
-        dojo.event.connect(this.inputNode, "onblur", this, "onInputBlur");
-        dojo.event.connect(this.inputNode, "onkeyup", this, "onInputKeyUp");
-        dojo.event.connect(this.inputNode, "onkeydown", this, "onInputKeyDown");
-        
-        dojo.event.connect(this.dropdownNode, "onmouseover", this, "onDropdownMouseOver");
-        dojo.event.connect(this.dropdownNode, "onmouseout", this, "onDropdownMouseOut");
-        
-        dojo.event.connect(dojo.body(), "onkeyup", this, "onKeyUp");
-    },
-
-    onOptionMouseOver: function(evt) {
-        this._selectOption(evt.target);
-    },
-
-    onOptionMouseOut: function(evt) {
-        this._clearOptionSelection(evt.target);
-    },
-
-    onChange:function() {},
-
-    onOptionClicked: function(evt) {
-        this.selectedNode=evt.target;
-        
-        this.inputNode.value=tapestry.html.getContentAsString(this.selectedNode);
-        this.hide(evt);
-        dojo.html.removeClass(this.selectedNode, this.optionHoverClass);
-
-        this.onChange(evt);
-    },
-
-    onInputClick: function() {
-        if (this.showing){
-            this.hide();
-            return;
-        }
-
-        this.show();
-
-        if (this.selectedNode){
-            this.selectedNode.scrollIntoView(true);
-        }
-    },
-
-    onInputBlur: function(evt) {
-        this.hasFocus=false;
-        if (this.preventBlur){
-            return;
-        }
-
-        this.hide();
-    },
-
-    onDropdownMouseOver: function(evt) {
-        this.preventBlur=true;
-    },
-
-    onDropdownMouseOut: function(evt) {
-        if (!this.showing){return;}
-        this.preventBlur=false;
-
-        if (this.isWidgetNode(evt["relatedTarget"])){
-            return;
-        }
-        if (!this.hasFocus){
-            this.hide(evt);
-        }
-    },
-
-    onKeyUp: function(evt) {
-        if (evt.keyCode == evt.KEY_ESCAPE) {
-            this.hide(evt);
-        }
-    },
-
-    onInputKeyUp: function(evt) {
-        switch(evt.keyCode){
-            case evt.KEY_TAB:
-                this.show();
-                break;
-           /* case evt.KEY_UP_ARROW:
-                this.inputNode.focus();
-                this._selectPreviousOption();
-                break;
-            case evt.KEY_DOWN_ARROW:
-                this.inputNode.focus();
-                this._selectNextOption();
-                break;
-                */
-        }
-    },
-
-    onInputKeyDown: function(evt) {
-        switch(evt.keyCode){
-            case evt.KEY_TAB:
-                if (this.showing){this.hide();}
-        }
-    },
-
-    hide: function() {
-        dojo.html.hide(this.dropdownNode);
-
-        if (this.bgIframe){
-            this.bgIframe.hide();
-        }
-
-        this.hasFocus=false;
-        this.preventBlur=false;
-        this.showing=false;
-        this.hoveredNode=null;
-    },
-
-    show: function() {
-
-        if (tapestry.widget.currentTimePicker &&
-                tapestry.widget.currentTimePicker != this){
-            tapestry.widget.currentTimePicker.hide();
-        }
-
-        var oldDisplay = this.inputNode.style.display;
-        var mb = dojo.html.getElementBox(this.inputNode, dojo.html.boxSizing.BORDER_BOX);
-        var inputPos = dojo.html.getAbsolutePosition(this.inputNode, true, dojo.html.boxSizing.BORDER_BOX);
-	    this.inputNode.style.display=oldDisplay;
-
-        var view=dojo.html.getViewport();
-        var scroll=dojo.html.getScroll();
-
-        var ddX = inputPos.x + mb.width - this.dropdownDim.width;
-        if (ddX < 0){
-            ddX = inputPos.x;
-        }
-
-        var ddY;
-        if ((inputPos.y + mb.height + this.dropdownDim.height) > view.height){
-            ddY = inputPos.y - this.dropdownDim.height - 1;
-        } else {
-            ddY = inputPos.y + mb.height;
-        }
-
-        if (dojo.render.html.ie && scroll.top > 0){
-            ddY -= scroll.top;
-        }
-
-        this.dropdownNode.style["top"]=ddY+'px';
-        this.dropdownNode.style["left"]=ddX+'px';
-        
-        dojo.html.show(this.dropdownNode);
-        
-        if (this.bgIframe){
-            this.bgIframe.size(this.dropdownNode);
-            this.bgIframe.show();
-        }
-
-        this.showing=true;
-        this.hasFocus=true;
-        this.preventBlur=true;
-        tapestry.widget.currentTimePicker=this;
-    },
-
-    getValue:function(){
-        return this.inputNode.value;
-    },
-
-    isWidgetNode: function(node){
-        if (!node){return false;}
-        
-        return dojo.html.hasClass(node, this.dropdownOptionClass)
-            || dojo.html.hasClass(node, this.dropdownClass);
-    },
-
-    destroyRendering: function(finalize){
-        try{
-            dojo.widget.HtmlWidget.prototype.destroyRendering.call(this, finalize);
-
-            dojo.event.disconnect(this.inputNode, "onclick", this, "onInputClick");
-            dojo.event.disconnect(this.inputNode, "onblur", this, "onInputBlur");
-            dojo.event.disconnect(this.inputNode, "onkeyup", this, "onInputKeyUp");
-            dojo.event.disconnect(this.inputNode, "onkeydown", this, "onInputKeyDown");
-            dojo.event.browser.clean(this.inputNode);
-
-            dojo.event.disconnect(this.dropdownNode, "onmouseover", this, "onDropdownMouseOver");
-            dojo.event.disconnect(this.dropdownNode, "onmouseout", this, "onDropdownMouseOut");
-
-            dojo.dom.destroyNode(this.dropdownNode);
-            delete this.dropdownNode;
-
-            dojo.event.disconnect(dojo.body(), "onkeyup", this, "onKeyUp");
-
-             if (this.bgIframe){
-                this.bgIframe.remove();
-            }
-        } catch (e) { }
-    },
-
-    _selectOption:function(node){
-        if (!node) { return; }
-        
-        this.preventBlur=true;
-        if (!dojo.html.hasClass(node, this.optionHoverClass)) {
-            dojo.html.addClass(node, this.optionHoverClass);
-        }
-
-        this.hoveredNode=node;
-    },
-
-    _clearOptionSelection:function(node){
-        dojo.html.removeClass(node, this.optionHoverClass);
-    },
-
-    _selectPreviousOption:function(){
-        var prevNode;
-        if (!this.hoveredNode){
-            this.hoveredNode=this.options[0];
-            prevNode = this.hoveredNode;
-        } else {
-            prevNode = this.hoveredNode.previousSibling;
-        }
-
-        prevNode.scrollIntoView(true);
-        this._clearOptionSelection(this.hoveredNode);
-        this._selectOption(prevNode);
-    },
-
-    _selectNextOption:function() {
-        var nextNode;
-        if (!this.hoveredNode){
-            this.hoveredNode=this.options[0];
-            nextNode = this.hoveredNode;
-        } else {
-            nextNode = this.hoveredNode.nextSibling;
-        }
-
-        nextNode.scrollIntoView(true);
-        this._clearOptionSelection(this.hoveredNode);
-        this._selectOption(nextNode);
-    }
-}
-);
diff --git a/tapestry/tapestry-framework/src/js/tapestry/widget/Widget.js b/tapestry/tapestry-framework/src/js/tapestry/widget/Widget.js
deleted file mode 100644
index dc8682c..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/widget/Widget.js
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-dojo.provide("tapestry.widget");
-dojo.provide("tapestry.widget.Widget");
-dojo.require("dojo.widget.*");
-
-// Define core widget management methods
-tapestry.widget = {
-	
-	/**
-	 * Ensures that the widget specified currently exists, 
-	 * and if not creates a new widget via dojo.widget.createWidget().
-	 * 
-	 * @param widgetId 
-	 * 			The unique widgetId to search for, will also be
-	 * 			used to locate and create the widget via the corresponding
-	 * 			dom node id if the widget doesn't already exist.
-	 * @param type 
-	 * 			The dojo widget type string. Ie "dialog" / "combobox" / etc..
-	 * @param props 
-	 * 			The js properties object to create the widget with.
-	 * @param destroy
-	 * 			If true causes the current widget(if any) to be destroyed and re-created.
-	 * @param position
-	 * 			The position to insert this widget's node relative to the
-	 *			dom node specified by widgetId (optional)
-	 */
-	synchronizeWidgetState : function(widgetId, type, props, destroy, position){
-		if(typeof destroy == "undefined"){
-			destroy=true;
-		}
-		var widget = dojo.widget.byId(widgetId);
-		
-		if (!widget) {
-			this.createWidget(widgetId, type, props, position);
-		} else if (destroy){
-			widget.destroy();
-			this.createWidget(widgetId, type, props, position);
-		} else {
-			this.setWidgetProperties(widget, props);
-		}
-	},
-	
-	/**
-	 * Creates a new widget (if possible) via dojo.widget.createWidget()
-	 */
-	createWidget : function(widgetId, type, props, position) {
-		var node = dojo.byId(widgetId);
-		if (!node) {
-			dojo.raise("createWidget() Node not found with specified id of '" + widgetId + "'.");
-			return;
-		}
-		
-		if (!props["widgetId"]) {
-			props["widgetId"]=widgetId;
-		}
-		
-		// handle disabling widgets
-		var w = dojo.widget.createWidget(type, props, node, position);
-		this.setWidgetProperties(w, props);
-	},
-	
-	setWidgetProperties: function(w, props){
-		if (!dj_undef("disabled",props) && props.disabled == true 
-			&& dojo.lang.isFunction(w["disable"])){
-			w.disable();
-		}
-	}
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/tapestry/widget/templates/TDebugConsole.html b/tapestry/tapestry-framework/src/js/tapestry/widget/templates/TDebugConsole.html
deleted file mode 100644
index ec8f365..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/widget/templates/TDebugConsole.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<div dojoAttachPoint="menuBar" >
-	<div dojoAttachPoint="menuBarItem1" ></div>
-	<div dojoAttachPoint="menuBarItem2" ></div>
-	<div dojoAttachPoint="menuBarItem3" ></div>
-</div>
-
-<div dojoAttachPoint="popupMenu2" >
-	<div dojoAttachPoint="popupMenuItem1" ></div>
-</div>
diff --git a/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/dateIcon.gif b/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/dateIcon.gif
deleted file mode 100644
index dc1f31c..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/dateIcon.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/domain_down.gif b/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/domain_down.gif
deleted file mode 100644
index 90cf5a0..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/domain_down.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/domain_up.gif b/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/domain_up.gif
deleted file mode 100644
index 080f3d3..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/domain_up.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/timeIcon.gif b/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/timeIcon.gif
deleted file mode 100644
index 418d512..0000000
--- a/tapestry/tapestry-framework/src/js/tapestry/widget/templates/images/timeIcon.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/js/tests/form/test_datetime.js b/tapestry/tapestry-framework/src/js/tests/form/test_datetime.js
deleted file mode 100644
index bbc480c..0000000
--- a/tapestry/tapestry-framework/src/js/tests/form/test_datetime.js
+++ /dev/null
@@ -1,72 +0,0 @@
-dojo.registerModulePath("tapestry", "../tapestry");
-
-djConfig.locale="fr";
-
-dojo.require("dojo.widget.*");
-dojo.require("tapestry.test");
-dojo.require("tapestry.core");
-dojo.require("tapestry.form");
-dojo.require("tapestry.form.datetime");
-
-function test_datetime_validDate(){
-	var value = "08/15/1999";
-	// jum.assertFalse(value, tapestry.form.datetime.isValidDate(value, {}));
-	jum.assertTrue(value, tapestry.form.datetime.isValidDate(value,
-				{datePattern:"MM/dd/yyyy",selector:"dateOnly"}));
-
-	// value = "12112/12/23434"; "08 Sep 2006"
-	// jum.assertFalse(value, tapestry.form.datetime.isValidDate(value));
-	// jum.assertFalse("null value", tapestry.form.datetime.isValidDate());
-	jum.assertTrue("verbose date valid", tapestry.form.datetime.isValidDate("08 Sep 2006",
-					{strict:true, datePattern: "d MMM yyyy", selector:"dateOnly"} ));
-}
-
-function test_datetime_maxDate(){
-	var maxValue = "09/28/2020";
-
-	var value = "08/15/2021";
-	jum.assertFalse(value, tapestry.form.datetime.isValidDate(value,
-					{strict:true,max:maxValue,datePattern:"MM/dd/yyyy",selector:"dateOnly"}));
-
-	jum.assertTrue("08/15/2020", tapestry.form.datetime.isValidDate("08/15/2020",
-						{strict:true, max:maxValue, datePattern:"MM/dd/yyyy",selector:"dateOnly"}));
-
-	value = "08/15/2020";
-	jum.assertTrue(value, tapestry.form.datetime.isValidDate(value,
-									{strict:true, max:maxValue, datePattern:"MM/dd/yyyy",selector:"dateOnly"}));
-
-	jum.assertTrue("09/28/2020", tapestry.form.datetime.isValidDate(
-			"09/28/2020",
-			{strict:true, max:maxValue, datePattern:"MM/dd/yyyy",selector:"dateOnly"})
-	);
-}
-
-function test_datetime_minDate(){
-	var minValue = "09/28/2000";
-
-	var value = "09/27/2000";
-	jum.assertFalse(value, tapestry.form.datetime.isValidDate(value,
-				{strict:true, min:minValue,selector:"dateOnly",datePattern:"MM/dd/yyyy"}));
-
-	jum.assertTrue("11/27/2000", tapestry.form.datetime.isValidDate("11/27/2000",
-									{strict:true,min:minValue, datePattern:"MM/dd/yyyy",selector:"dateOnly"}));
-
-	value = "09/28/2000";
-	jum.assertTrue(value, tapestry.form.datetime.isValidDate(value,
-									{strict:true,min:minValue, datePattern:"MM/dd/yyyy",selector:"dateOnly"}));
-}
-
-
-function test_datetime_LongFormat(){
-	var value = "18 Aug 2006";
-
-	jum.assertFalse(value, tapestry.form.datetime.isValidDate(value,
-			{strict:true,max:"06 Aug 2006",datePattern:"dd MMM yyyy",selector:"dateOnly"}));
-
-	jum.assertTrue(value, tapestry.form.datetime.isValidDate(value,
-			{strict:true,max:"19 Aug 2006",datePattern:"dd MMM yyyy",selector:"dateOnly"}));
-
-	value = "4 Nov 2006";
-	jum.assertTrue(value, tapestry.form.datetime.isValidDate(value,
-			{max:"04 Nov 2006",datePattern:"dd MMM yyyy"}));
-}
diff --git a/tapestry/tapestry-framework/src/js/tests/test_debug.js b/tapestry/tapestry-framework/src/js/tests/test_debug.js
deleted file mode 100644
index 9b4e6d5..0000000
--- a/tapestry/tapestry-framework/src/js/tests/test_debug.js
+++ /dev/null
@@ -1,25 +0,0 @@
-dojo.require("dojo.logging.Logger");
-dojo.require("dojo.io.RhinoIO");
-
-function test_debug_log(){
-	dojo.log.debug("Debug message.");
-	dojo.log.info("Info message");
-	dojo.log.err("Error message.");
-	dojo.log.warn("Warning message");
-	dojo.log.crit("Critical message");
-}
-
-function test_debug_logLevel(){
-	dojo.log.info("info msg");
-
-	dojo.log.setLevel(dojo.log.getLevel("WARNING"));
-	dojo.log.info("SHOULD NOT SEE THIS");
-	var last = dojo.logging.logQueueHandler.data.pop();
-	jum.assertEquals("info msg", last.message);
-
-	var currLength = dojo.logging.logQueueHandler.data.length;
-	dojo.log.debug("DEFINITELY SHOULDNT see this");
-	jum.assertEquals("logmsglength", currLength, dojo.logging.logQueueHandler.data.length);
-
-	dojo.log.setLevel(dojo.log.getLevel("DEBUG"));
-}
diff --git a/tapestry/tapestry-framework/src/js/tests/test_event.js b/tapestry/tapestry-framework/src/js/tests/test_event.js
deleted file mode 100644
index 419b25d..0000000
--- a/tapestry/tapestry-framework/src/js/tests/test_event.js
+++ /dev/null
@@ -1,21 +0,0 @@
-dojo.registerModulePath("tapestry", "../tapestry");
-
-dojo.require("tapestry.test");
-dojo.require("tapestry.lang");
-dojo.require("tapestry.event");
-
-function test_eventCapture_props(){
-	var fevent=document.createEvent('UIEvents');
-	fevent.type="testType";
-
-	var tnode = document.createElement("div");
-	tnode.setAttribute("id", "testid");
-	fevent.target=tnode;
-
-	var props = tapestry.event.buildEventProperties(fevent);
-
-	jum.assertTrue("evType", dojo.event.browser.isEvent(fevent));
-	jum.assertTrue("testNullProp", tapestry.event.buildEventProperties({}));
-	jum.assertTrue("type", props.beventtype != "undefined");
-	jum.assertEquals("targetprops", "testid", props["beventtarget.id"]);
-}
diff --git a/tapestry/tapestry-framework/src/js/tests/test_eventConnections.html b/tapestry/tapestry-framework/src/js/tests/test_eventConnections.html
deleted file mode 100644
index 50fef64..0000000
--- a/tapestry/tapestry-framework/src/js/tests/test_eventConnections.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>TimePicker Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
-
-<script type="text/javascript">
-var djConfig = {
-    isDebug: true,
-    parseWidgets: false
-};
-</script>
-<script type="text/javascript" src="../dojo-0.4.2/dojo.js"></script>
-<script type="text/javascript" src="../tapestry/core.js"></script>
-
-</head>
-
-<body>
-<script type="text/javascript">
-    dojo.require("dojo.event");
-    dojo.require("tapestry.core");
-    
-    dojo.event.connect(window, "onload", function(){
-    	
-    	tapestry.cleanConnect(dojo.byId("testDiv"), "onclick", "eventtestDivonclick");
-    	tapestry.eventtestDivonclick=function(e){
-    		dojo.debug("Test div clicked.");
-    	};
-    	dojo.event.connect(dojo.byId("testDiv"), "onclick", tapestry, "eventtestDivonclick");
-    	
-    	tapestry.cleanConnect(dojo.byId("testDiv"), "onclick", "eventtestDivonclick");
-    	tapestry.eventtestDivonclick=function(e){
-    		dojo.debug("Test div clicked.");
-    	};
-    	dojo.event.connect(dojo.byId("testDiv"), "onclick", tapestry, "eventtestDivonclick");
-    });
-</script>
-
-<p>
-<div id="testDiv" >This is textual <b>content</b>.</div>
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/tests/test_form.js b/tapestry/tapestry-framework/src/js/tests/test_form.js
deleted file mode 100644
index 61d1b47..0000000
--- a/tapestry/tapestry-framework/src/js/tests/test_form.js
+++ /dev/null
@@ -1,134 +0,0 @@
-dojo.registerModulePath("tapestry", "../tapestry");
-
-dojo.require("tapestry.core");
-dojo.require("tapestry.test");
-dojo.require("tapestry.form");
-
-tapestry.form.invalidField=function(field, message){
-}
-
-function test_form_find(){
-	var node = document.createElement("div");
-	node.setAttribute("id", "testid");
-
-	jum.assertTrue(Tapestry.find(node));
-	jum.assertTrue(Tapestry.find("testid"));
-}
-
-function test_last_msg(){
-	jum.assertFalse(lastMsgContains());
-}
-
-function test_form_deprecated(){
-	try {
-		Tapestry.register_form();
-		throw new JUMAssertFailure("Previous test should have failed.");
-	} catch (e) { jum.assertTrue("testFormDepre", e instanceof Error); return; }
-	
-	jum.assertTrue("deprecated", lastMsgContains("deprecated"));
-	Tapestry.onpresubmit();
-	jum.assertTrue("deprecated", lastMsgContains("deprecated"));
-	Tapestry.onsubmit();
-	jum.assertTrue("deprecated", lastMsgContains("deprecated"));
-	Tapestry.onpostsubmit();
-	jum.assertTrue("deprecated", lastMsgContains("deprecated"));
-	Tapestry.onreset();
-	jum.assertTrue("deprecated", lastMsgContains("deprecated"));
-	Tapestry.onrefresh();
-	jum.assertTrue("deprecated", lastMsgContains("deprecated"));
-	Tapestry.oncancel();
-	jum.assertTrue("deprecated", lastMsgContains("deprecated"));
-}
-
-function test_form_invalidHandler(){
-	Tapestry.default_invalid_field_handler(null, "yo", "yo");
-}
-
-function test_form_requireTextField(){
-	Tapestry.require_field(null, "bs", "invalid");
-
-	var node = document.createElement("input");
-	node.setAttribute("id", "testid");
-	node.type="text";
-	node.value="";
-
-	var mockInvalid=new mock(node, "must have value");
-	dojo.event.connect(Tapestry, "default_invalid_field_handler", mockInvalid, "intercept");
-
-	Tapestry.require_field(null, "testid", "must have value");
-
-	jum.assertTrue("invalidCalled", mockInvalid.called);
-	dojo.event.disconnect(Tapestry, "default_invalid_field_handler", mockInvalid, "intercept");
-}
-
-function test_form_submit(){
-
-	var submitCalled=false;
-	var node = document.createElement("form");
-	node.setAttribute("id", "form1");
-	node.submit=function(){
-		submitCalled=true;
-	}
-	node.submitname={value:""};
-	node.elements=[];
-
-	Tapestry.register_form("form1");
-	Tapestry.submit_form("form1", "testSubmit");
-
-	jum.assertTrue("submitCalled", submitCalled);
-	jum.assertEquals("submitName", node.submitname.value, "testSubmit");
-}
-
-var bindCalled=false;
-
-function test_submit_parms(){
-	bindCalled=false;
-	var node = document.createElement("form");
-	node.setAttribute("id", "formparmtest");
-	node.setAttribute("method", "post");
-	node.setAttribute("action", "/default/url");
-	node.submit=function(){}
-	node.submitname={value:""};
-	node.elements=[];
-	document.body.appendChild(node);
-
-	dojo.event.connect(dojo.io, "queueBind", this, checkSubmitParms);
-
-	tapestry.form.registerForm("formparmtest");
-	tapestry.form.submit("formparmtest", null, {async:true,url:"/a/url"});
-
-	jum.assertTrue("bindCalled", bindCalled);
-
-	dojo.event.disconnect(dojo.io, "queueBind", this, checkSubmitParms);
-}
-
-function checkSubmitParms(kwArgs){
-	bindCalled=true;
-	jum.assertEquals("submitParmUrl", kwArgs["url"], "/a/url");
-}
-
-function test_submit_defaultParms(){
-	bindCalled=false;
-	var node = document.createElement("form");
-	node.setAttribute("id", "formasynctest");
-	node.setAttribute("method", "post");
-	node.setAttribute("action", "/a/url");
-	node.submit=function(){}
-	node.submitname={value:""};
-	node.elements=[];
-	document.body.appendChild(node);
-
-	dojo.event.connect(dojo.io, "queueBind", this, checkDefaultParms);
-
-	tapestry.form.registerForm("formasynctest", true);
-	tapestry.form.submit("formasynctest");
-
-	jum.assertTrue("bindCalled", bindCalled);
-
-	dojo.event.disconnect(dojo.io, "queueBind", this, checkDefaultParms);
-}
-
-function checkDefaultParms(kwArgs){
-	bindCalled=true;
-	jum.assertTrue("submitParmUrl2", typeof kwArgs["url"] == "undefined");
-}
diff --git a/tapestry/tapestry-framework/src/js/tests/test_form_validation.js b/tapestry/tapestry-framework/src/js/tests/test_form_validation.js
deleted file mode 100644
index 8a5241b..0000000
--- a/tapestry/tapestry-framework/src/js/tests/test_form_validation.js
+++ /dev/null
@@ -1,140 +0,0 @@
-dojo.registerModulePath("tapestry", "../tapestry");
-
-dojo.require("tapestry.core");
-dojo.require("tapestry.event");
-dojo.require("tapestry.test");
-dojo.require("tapestry.form");
-dojo.require("dojo.lang.*");
-dojo.require("dojo.validate.check");
-
-function test_register_invalidform(){
-	try {
-		tapestry.form.registerForm("bsid");
-		throw new JUMAssertFailure("Previous test should have failed.");
-	} catch (e) {
-		jum.assertTrue("testFormRegisterInvalid", e instanceof Error);
-	}
-}
-
-function test_register_form(){
-	var form = document.createElement("form");
-	form.setAttribute("id", "regform");
-	form.submit=function(){
-		form.submitCalled=true;
-	}
-	form.submitname={value:""};
-
-	tapestry.form.registerForm("regform");
-	jum.assertTrue("formregForm", dojo.lang.isObject(tapestry.form.forms["regform"]));
-	jum.assertTrue("formregProfiles", dojo.lang.isArray(tapestry.form.forms["regform"].profiles));
-	jum.assertEquals("formregProfileLength", 0, tapestry.form.forms["regform"].profiles.length);
-}
-
-function test_validate_realNumber(){
-	var value="a12";
-	jum.assertFalse(value, dojo.validate.isRealNumber(value, {places:0,decimal:".",separator:","}));
-}
-
-function test_validate_decimals(){
-	var input = "1,124.12";
-	jum.assertTrue(dojo.validate.isRealNumber(input, {decimal:".",separator:","}));
-	jum.assertTrue(dojo.validate.isInRange(input, {min:2.0,decimal:".",separator:",",symbol:"�"}));
-	jum.assertTrue(dojo.validate.isInRange(input, {max:1000000001,decimal:".",separator:",",symbol:"�"}));
-}
-
-function test_validate_required(){
-	// A generic form
-	var f = {
-
-		tx1: {type: "text", value: " 1001 ",  name: "tx1"},
-		tx2: {type: "text", value: " ",  name: "tx2"},
-		tx3: {type: "text", value: "10/19/2005",  name: "tx3"},
-
-	};
-
-	// Profile for form input
-	var profile = {
-	// required fields
-		required: ["tx2"]
-	};
-
-	// results object
-	var results = dojo.validate.check(f, profile);
-
-	jum.assertTrue("missing_tx2", results.isMissing("tx2"));
-}
-
-/*
-dojo.event.browser.stopEvent=function(e){
-	if (e) {
-		if (!e["preventDefault"]) { e.preventDefault(); }
-		if (!e["stopPropogation"]) { e.stopPropagation(); }
-	}
-}
-
-function test_cancel_form(){
-	var form = document.createElement("form");
-	form.setAttribute("id", "canform");
-	form.submit=function(){
-		form.submitCalled=true;
-		this.onsubmit();
-	}
-	form.onsubmit=function(){}
-	form.submitname={value:""};
-	form.submitmode={value:""};
-	
-	jum.assertTrue("regform exists", dojo.byId("canform"));
-	
-	tapestry.form.registerForm(form);
-	jum.assertTrue("formregForm", dojo.lang.isObject(tapestry.form.forms["canform"]));
-	jum.assertTrue("formregProfiles", dojo.lang.isArray(tapestry.form.forms["canform"].profiles));
-	jum.assertEquals("formregProfileLength", 0, tapestry.form.forms["canform"].profiles.length);
-	
-	tapestry.form.registerProfile("canform", {required:["field1"]});
-	jum.assertEquals("formregProfileLength2", 1, tapestry.form.forms["canform"].profiles.length);
-	
-	var formValidated=false;
-	var valObj={
-		intercept:function(){this.formValidated=true;}
-	};
-	dojo.event.connect(tapestry.form.validation, "validateForm", valObj, "intercept");
-	
-	tapestry.form.cancel("canform");
-	
-	jum.assertTrue("canFormSubmitted", form.submitCalled);
-	jum.assertFalse("canFormValidated", valObj.formValidated);
-	
-	dojo.event.disconnect(tapestry.form.validation, "validateForm", valObj, "intercept");
-}
-
-function test_validate_form(){
-	var form = document.createElement("form");
-	form.setAttribute("id", "valform");
-	form.submit=function(){
-		form.submitCalled=true;
-		this.onsubmit();
-	}
-	form.onsubmit=function(){}
-	
-	form.submitname={value:""};
-	form.submitmode={value:""};
-	
-	tapestry.form.registerForm(form);
-	tapestry.form.registerProfile("valform", {required:["field1"]});
-	
-	jum.assertEquals("formValProfiles", 1, tapestry.form.forms["valform"].profiles.length);
-	
-	var formValidated=false;
-	var valObj={
-		intercept:function(){this.formValidated=true;}
-	};
-	dojo.event.connect(tapestry.form.validation, "validateForm", valObj, "intercept");
-	
-	tapestry.form.submit("valform");
-	
-	jum.assertTrue("valFormSubmitted", form.submitCalled);
-	jum.assertTrue("valFormValidated", valObj.formValidated);
-	
-	dojo.event.disconnect(tapestry.form.validation, "validateForm", valObj, "intercept");
-}
-*/
diff --git a/tapestry/tapestry-framework/src/js/tests/test_fx.js b/tapestry/tapestry-framework/src/js/tests/test_fx.js
deleted file mode 100644
index ace4056..0000000
--- a/tapestry/tapestry-framework/src/js/tests/test_fx.js
+++ /dev/null
@@ -1,31 +0,0 @@
-dojo.registerModulePath("tapestry", "../tapestry");
-
-dojo.require("tapestry.fx");
-dojo.require("dojo.lfx.html");
-
-function test_preEffects(){
-
-	tapestry.fx.removeAll();
-
-	jum.assertTrue(dojo.lang.isEmpty(tapestry.fx.preEffects));
-
-	var animation = dojo.lfx.html.wipeIn();
-
-	tapestry.fx.attachPreEffect("div1", animation);
-
-	jum.assertFalse(dojo.lang.isEmpty(tapestry.fx.preEffects));
-
-	jum.assertEquals(animation, tapestry.fx.preEffects["div1"].animation);
-
-}
-
-function test_postEffects(){
-
-	tapestry.fx.removeAll();
-
-	jum.assertTrue(dojo.lang.isEmpty(tapestry.fx.postEffects));
-
-	tapestry.fx.attachPostEffect("div1", dojo.lfx.html.wipeIn());
-
-	jum.assertFalse(dojo.lang.isEmpty(tapestry.fx.postEffects));
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/tests/test_html.js b/tapestry/tapestry-framework/src/js/tests/test_html.js
deleted file mode 100644
index 0626e16..0000000
--- a/tapestry/tapestry-framework/src/js/tests/test_html.js
+++ /dev/null
@@ -1,90 +0,0 @@
-dojo.registerModulePath("tapestry", "../tapestry");
-
-dojo.require("tapestry.core");
-dojo.require("tapestry.test");
-dojo.require("tapestry.html");
-
-
-function test_html_getContentAsString(){
-
-	var node = _createTestNode();
-
-	var data = tapestry.html.getContentAsString(node).toLowerCase();
-	jum.assertEquals("<div id=\"testid2\">content</div>", data);
-}
-
-function test_html_textarea(){
-
-	var node = _createTestNode("textarea", true);
-
-	var data = tapestry.html.getContentAsString(node).toLowerCase();
-	jum.assertEquals("<textarea id=\"testid2\"></textarea>", data);
-	// cannot test Mozilla's getContentAsString from here...
-	// only browser based tests will show if this is working
-}
-
-function test_html_getElementAsString(){
-
-	var node = _createTestNode();
-
-	var data = tapestry.html.getElementAsString(node).toLowerCase();
-	jum.assertEquals("<div id=\"testid\"><div id=\"testid2\">content</div></div>", data);
-}
-
-function test_html_processTextareas(){
-	var initial = "start<textarea id='2' rows=4/>22<input type='text'/><textarea/><div id=1/>";
-	var expected = "start<textarea id='2' rows=4></textarea>22<input type='text'/><textarea></textarea><div id=1></div>";
-
-	jum.assertEquals(expected, tapestry.html._processCompactElements(initial));
-	jum.assertEquals(expected + expected,
-			tapestry.html._processCompactElements(initial+initial));
-}
-
-function test_html_processResponse(){
-	var initial = '<div id="editTopic"><form method="post" action="Topics,topicList.$Form.sdirect" id="Form"> '
-			+'<div style="display:none;" id="Formhidden"><input type="hidden" name="formids" value="topicName,shortDescriptiveText,descriptiveText,If,If_0,updateTopic" /> '
-			+'<input type="hidden" name="updateParts" value="list" /> <input type="hidden" name="updateParts" value="edit" /> <input type="hidden" name="reservedids" '
-			+'value="updateParts" /> <input type="hidden" name="submitmode" value="" /> <input type="hidden" name="submitname" value="" /> <input type="hidden" name="If" value="T" /> '
-			+'<input type="hidden" name="If_0" value="F" /> </div> Make the desired changes to this topic. <fieldset> <div> <label for="topicName" class="required">Topic Name</label> '
-			+'<input type="text" name="name" value="Uncategorized" id="tName" /> </div> <div> <label for="shortDescriptiveText" class="required">Short Description</label> '
-			+'<textarea name="shortDescriptiveText" id="shortDescriptiveText" cols="40" rows="4">Information</textarea> </div> <div> <label for="descriptiveText">Additional '
-			+'Description</label> <textarea name="descriptiveText" id="descriptiveText" cols="40" rows="4"/> </div> <div> <label for="pUrlField" class="required">Home '
-			+'Url</label> <input type="text" name="pUrlField" value="ba.org" id="pUrlField" size="40" /> Verified </div> <div></div> </fieldset> <div> '
-			+'<input type="submit" name="uTopic" id="uTopic" value="Save Changes"/> <!--input type="submit" jwcid="cancelTopic@Submit" '
-			+'listener="listener:doCancel" value="message:label.cancel-changes" async="true"/--></div> </form> </div>';
-	var expected = '<div id="editTopic"><form method="post" action="Topics,topicList.$Form.sdirect" id="Form"> '
-			+'<div style="display:none;" id="Formhidden"><input type="hidden" name="formids" value="topicName,shortDescriptiveText,descriptiveText,If,If_0,updateTopic" /> '
-			+'<input type="hidden" name="updateParts" value="list" /> <input type="hidden" name="updateParts" value="edit" /> <input type="hidden" name="reservedids" '
-			+'value="updateParts" /> <input type="hidden" name="submitmode" value="" /> <input type="hidden" name="submitname" value="" /> <input type="hidden" name="If" value="T" /> '
-			+'<input type="hidden" name="If_0" value="F" /> </div> Make the desired changes to this topic. <fieldset> <div> <label for="topicName" class="required">Topic Name</label> '
-			+'<input type="text" name="name" value="Uncategorized" id="tName" /> </div> <div> <label for="shortDescriptiveText" class="required">Short Description</label> '
-			+'<textarea name="shortDescriptiveText" id="shortDescriptiveText" cols="40" rows="4">Information</textarea> </div> <div> <label for="descriptiveText">Additional '
-			+'Description</label> <textarea name="descriptiveText" id="descriptiveText" cols="40" rows="4"></textarea> </div> <div> <label for="pUrlField" class="required">Home '
-			+'Url</label> <input type="text" name="pUrlField" value="ba.org" id="pUrlField" size="40" /> Verified </div> <div></div> </fieldset> <div> '
-			+'<input type="submit" name="uTopic" id="uTopic" value="Save Changes"/> <!--input type="submit" jwcid="cancelTopic@Submit" '
-			+'listener="listener:doCancel" value="message:label.cancel-changes" async="true"/--></div> </form> </div>';
-
-	jum.assertEquals(expected, tapestry.html._processCompactElements(initial));
-	jum.assertEquals(expected + expected,
-			tapestry.html._processCompactElements(initial+initial));
-}
-
-function _createTestNode(element, empty){
-	var node = document.createElement("div");
-	node.setAttribute("id", "testid");
-
-	if (!element)
-		element="div";
-
-	var node2 = document.createElement(element);
-	node2.setAttribute("id", "testid2");
-
-	if (!empty){
-		var content = document.createTextNode("content");
-		node2.appendChild(content);
-	}
-
-	node.appendChild(node2);
-
-	return node;
-}
diff --git a/tapestry/tapestry-framework/src/js/tests/widget/test_AlertDialog.html b/tapestry/tapestry-framework/src/js/tests/widget/test_AlertDialog.html
deleted file mode 100644
index 66f1106..0000000
--- a/tapestry/tapestry-framework/src/js/tests/widget/test_AlertDialog.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title>AlertDialog Test</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
-    <script type="text/javascript">
-        var djConfig = {
-            isDebug: true
-        };
-    </script>
-    <script type="text/javascript" src="../../dojo-0.4.3/dojo.js"></script>
-    <script type="text/javascript" src="../../dojo-0.4.3/dojo2.js"></script>
-    <script type="text/javascript" src="../../dojo-0.4.3/dojo3.js"></script>
-    <script type="text/javascript" src="../../tapestry/core.js"></script>
-
-</head>
-
-<body>
-<style>
-
-    .alertDialog {
-        width:260px;
-        border:2px solid #ff660a;
-        padding:1em;
-        padding-bottom:1.7em;
-    }
-
-    .alertDialog .dojoButton {
-        float:right;
-    }
-</style>
-
-<script type="text/javascript">
-    dojo.require("tapestry.form");
-    dojo.require("tapestry.namespace");
-
-    dojo.addOnLoad(function() {
-        dojo.widget.byId("alertDialog").show();
-    });
-</script>
-<p>la la la la lalala lala </p>
-
-
-<p> la ? lalale..... </p>
-<p>
-<div dojoType="tapestry:AlertDialog" widgetId="alertDialog" ></div>
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/tests/widget/test_DropDownDatePicker.html b/tapestry/tapestry-framework/src/js/tests/widget/test_DropDownDatePicker.html
deleted file mode 100644
index f69bbee..0000000
--- a/tapestry/tapestry-framework/src/js/tests/widget/test_DropDownDatePicker.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!--
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>DatePicker Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
-
-<script type="text/javascript">
-var djConfig = {
-    isDebug: true
-};
-</script>
-<script type="text/javascript" src="../../dojo-0.4.2/dojo.js"></script>
-<script type="text/javascript" src="../../tapestry/core.js"></script>
-<style type="text/css">
-body { font-family : sans-serif; }
-
-.datePickerContainer {
-    margin:0.5em 2em 0.5em 0.8em;
-    width:10em;
-    float:left;
-}
-
-.previousMonth {
-    background-color:#f4f9ff;
-}
-
-.currentMonth {
-    background-color:#EAF1F8;
-}
-
-.nextMonth {
-    background-color:#f4f9ff;
-}
-
-.currentDate {
-    text-decoration:underline;
-    font-style:italic;
-}
-
-.selectedItem {
-    background-color:#D6AE33;
-    color:#ffffff;
-    border: 1px solid #8A5E21;
-}
-
-.calendarContainer {
-    width:100%;
-    border-collapse:collapse;
-    border-spacing:0;
-    border-bottom:1px solid #e6e6e6;
-}
-
-.calendarContainer thead{
-    background-color:#2A78B0;
-    border-bottom:1px solid #e6e6e6;
-    color:#fff;
-}
-
-.calendarContainer td {
-    font-size:12px !important;
-    padding:0.15em;
-    text-align:center;
-    cursor:pointer;cursor:hand;
-}
-
-.monthLabel {
-    font-size:15px !important;
-    font-weight:400;
-    margin:0;
-    text-align:center;
-}
-
-.monthLabel .month {
-    padding:0 0.4em 0 0.4em;
-}
-
-.yearLabel {
-    font-size:12px !important;
-    font-weight:400;
-    margin:0.25em 0 0 0;
-    text-align:right;
-    color:#a3a3a3;
-}
-
-.yearLabel .selectedYear {
-    color:#000;
-    padding:0 0.2em;
-}
-
-.nextYear, .previousYear {
-    cursor:pointer;cursor:hand;
-}
-
-.incrementControl {
-    cursor:pointer;cursor:hand;
-    width:1em;
-}
-
-.dropDownContainer {
-    display:none;
-    position:absolute;
-    width:12em;
-    background-color:#fff; 
-    border:1px solid #215E8A;
-    font-size:1.2em;
-}
-</style>
-
-</head>
-<script type="text/javascript">
-	dojo.require("tapestry.widget.*");
-    dojo.require("tapestry.widget.DropdownTimePicker");
-</script>
-<body>
-
-<p>
-<div dojoType="DropdownTimePicker" widgetId="date1" ></div>
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/tests/widget/test_DropDownDateTimePicker.html b/tapestry/tapestry-framework/src/js/tests/widget/test_DropDownDateTimePicker.html
deleted file mode 100644
index 33f77d3..0000000
--- a/tapestry/tapestry-framework/src/js/tests/widget/test_DropDownDateTimePicker.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!--
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>DatePicker Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
-
-<script type="text/javascript">
-var djConfig = {
-    isDebug: true
-};
-</script>
-<script type="text/javascript" src="../../dojo-0.4.2/dojo.js"></script>
-<script type="text/javascript" src="../../tapestry/core.js"></script>
-<style type="text/css">
-body { font-family : sans-serif; }
-
-.datePickerContainer {
-    margin:0.5em 2em 0.5em 0.8em;
-    width:10em;
-    float:left;
-}
-
-.previousMonth {
-    background-color:#f4f9ff;
-}
-
-.currentMonth {
-    background-color:#EAF1F8;
-}
-
-.nextMonth {
-    background-color:#f4f9ff;
-}
-
-.currentDate {
-    text-decoration:underline;
-    font-style:italic;
-}
-
-.selectedItem {
-    background-color:#D6AE33;
-    color:#ffffff;
-    border: 1px solid #8A5E21;
-}
-
-.calendarContainer {
-    width:100%;
-    border-collapse:collapse;
-    border-spacing:0;
-    border-bottom:1px solid #e6e6e6;
-}
-
-.calendarContainer thead{
-    background-color:#2A78B0;
-    border-bottom:1px solid #e6e6e6;
-    color:#fff;
-}
-
-.calendarContainer td {
-    font-size:12px !important;
-    padding:0.15em;
-    text-align:center;
-    cursor:pointer;cursor:hand;
-}
-
-.monthLabel {
-    font-size:15px !important;
-    font-weight:400;
-    margin:0;
-    text-align:center;
-}
-
-.monthLabel .month {
-    padding:0 0.4em 0 0.4em;
-}
-
-.yearLabel {
-    font-size:12px !important;
-    font-weight:400;
-    margin:0.25em 0 0 0;
-    text-align:right;
-    color:#a3a3a3;
-}
-
-.yearLabel .selectedYear {
-    color:#000;
-    padding:0 0.2em;
-}
-
-.nextYear, .previousYear {
-    cursor:pointer;cursor:hand;
-}
-
-.incrementControl {
-    cursor:pointer;cursor:hand;
-    width:1em;
-}
-
-.dropDownContainer {
-    display:none;
-    position:absolute;
-    width:12em;
-    background-color:#fff; 
-    border:1px solid #215E8A;
-    font-size:1.2em;
-}
-</style>
-
-</head>
-<script type="text/javascript">
-	dojo.require("tapestry.widget.*");
-    dojo.require("tapestry.widget.DropdownDateTimePicker");
-</script>
-<body>
-
-<p>
-<div dojoType="DropdownDateTimePicker" widgetId="date1" ></div>
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/tests/widget/test_TDebugConsole.html b/tapestry/tapestry-framework/src/js/tests/widget/test_TDebugConsole.html
deleted file mode 100644
index 0c15297..0000000
--- a/tapestry/tapestry-framework/src/js/tests/widget/test_TDebugConsole.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>DebugConsole Test</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
-
-<script type="text/javascript">
-var djConfig = {
-    isDebug: true
-};
-</script>
-<script type="text/javascript" src="../../dojo-0.4.2/dojo.js"></script>
-<script type="text/javascript" src="../../tapestry/core.js"></script>
-</head>
-
-<body>
-<style>
-:link,:visited { text-decoration:none }
-
-/* no list-markers by default, since lists are used more often for semantics */
-ul,ol { list-style:none }
-
-/* avoid browser default inconsistent heading font-sizes */
-/* and pre/code too */
-h1,h2,h3,h4,h5,h6,pre,code { font-size:1em; }
-
-/* remove the inconsistent (among browsers) default ul,ol padding or margin  */
-/* the default spacing on headings does not match nor align with 
-   normal interline spacing at all, so let's get rid of it. */
-/* zero out the spacing around pre, form, body, html, p, blockquote as well */
-/* form elements are oddly inconsistent, and not quite CSS emulatable. */
-/*  nonetheless strip their margin and padding as well */
-ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,body,html,p,blockquote,fieldset,input
-{ margin:0; padding:0 }
-
-/* whoever thought blue linked image borders were a good idea? */
-a img,:link img,:visited img { border:none }
-
-/* de-italicize address */
-address { font-style:normal }
-
-body { margin:0; padding:0; }
-
-fieldset { border:0; }
-
-#debug {
-    display: block;
-    height: 80px;
-    width: 50%;
-    border-top: 1px solid #ddd;
-    border-right: 1px solid #ddd;
-    position: absolute;
-    overflow: auto;
-    left: 0px;
-    bottom: 0px;
-    text-align: left;
-    padding: 0px;
-    margin-top:0px;
-    padding-right: 0;
-    color: #000;
-    font: 9px lucida grande, Arial, Verdana;
-    opacity: 0.8;
-    filter: alpha(opacity : 80);
-    background: #eef1f8;
-}
-</style>
-
-<script type="text/javascript">
-	dojo.require("tapestry.widget.*");
-    dojo.require("tapestry.widget.TDebugConsole");
-</script>
-
-<div id="debug">
-<div dojoType="TDebugConsole" ></div>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/tests/widget/test_TimePicker.html b/tapestry/tapestry-framework/src/js/tests/widget/test_TimePicker.html
deleted file mode 100644
index 7e14eda..0000000
--- a/tapestry/tapestry-framework/src/js/tests/widget/test_TimePicker.html
+++ /dev/null
@@ -1,183 +0,0 @@
-<!--
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-    <title>TimePicker Test</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
-    <script type="text/javascript">
-        var djConfig = {
-            isDebug: true,
-            parseWidgets: false
-        };
-    </script>
-    <script type="text/javascript" src="../../dojo-0.4.3/dojo.js"></script>
-    <script type="text/javascript" src="../../dojo-0.4.3/dojo2.js"></script>
-    <script type="text/javascript" src="../../dojo-0.4.3/dojo3.js"></script>
-    <script type="text/javascript" src="../../tapestry/core.js"></script>
-
-</head>
-
-<body>
-<script type="text/javascript">
-    dojo.require("tapestry.namespace");
-
-    dojo.addOnLoad(function() {
-
-        dojo.widget.createWidget("tapestry:TimePicker", {
-            widgetId: "test",
-            inputNodeId:"timeInput",
-            optionValues:["12:00am","12:30am","1:00am","1:30am","2:00am","2:30am","3:00am","3:30am","4:00am","4:30am",
-                    "5:00am","5:30am","6:00am","6:30am","7:00am","7:30am","8:00am","8:30am","9:00am","9:30am","10:00am",
-                    "10:30am","11:00am","11:30am","12:00pm","12:30pm","1:00pm","1:30pm","2:00pm","2:30pm","3:00pm","3:30pm",
-                    "4:00pm","4:30pm","5:00pm","5:30pm","6:00pm","6:30pm","7:00pm","7:30pm","8:00pm","8:30pm","9:00pm","9:30pm",
-                    "10:00pm","10:30pm","11:00pm","11:30pm"],
-            selectedIndex:26
-        });
-
-        dojo.widget.createWidget("tapestry:TimePicker", {
-            widgetId: "test2",
-            inputNodeId:"another",
-            optionValues:["12:00am","12:30am","1:00am","1:30am","2:00am","2:30am","3:00am","3:30am","4:00am","4:30am",
-                    "5:00am","5:30am","6:00am","6:30am","7:00am","7:30am","8:00am","8:30am","9:00am","9:30am","10:00am",
-                    "10:30am","11:00am","11:30am","12:00pm","12:30pm","1:00pm","1:30pm","2:00pm","2:30pm","3:00pm","3:30pm",
-                    "4:00pm","4:30pm","5:00pm","5:30pm","6:00pm","6:30pm","7:00pm","7:30pm","8:00pm","8:30pm","9:00pm","9:30pm",
-                    "10:00pm","10:30pm","11:00pm","11:30pm"]
-        });
-
-        dojo.widget.createWidget("tapestry:TimePicker", {
-            widgetId: "test3",
-            inputNodeId:"timeInput2",
-            optionValues:["12:00am","12:30am","1:00am","1:30am","2:00am","2:30am","3:00am","3:30am","4:00am","4:30am",
-                    "5:00am","5:30am","6:00am","6:30am","7:00am","7:30am","8:00am","8:30am","9:00am","9:30am","10:00am",
-                    "10:30am","11:00am","11:30am","12:00pm","12:30pm","1:00pm","1:30pm","2:00pm","2:30pm","3:00pm","3:30pm",
-                    "4:00pm","4:30pm","5:00pm","5:30pm","6:00pm","6:30pm","7:00pm","7:30pm","8:00pm","8:30pm","9:00pm","9:30pm",
-                    "10:00pm","10:30pm","11:00pm","11:30pm"]
-        });
-    });
-</script>
-
-<style type="text/css">
-    .dropdownCombobox {
-        background: #ffffff;
-        border: 1px solid #545454;
-    }
-
-    .dropdownOption {
-        font-family: arial;
-        font-size: 0.8em;
-        padding: 0.1em 0 0.1em 0.2em;
-        cursor:pointer;
-    }
-
-    .optionHover {
-        background-color: cornflowerblue;
-        color: #ffffff;
-    }
-</style>
-
-<form action="#">
-    <fieldset>
-        <table>
-            <tr>
-                <td>
-                    <input id="timeInput" type="text" size="7" value="8:24am" />
-                </td>
-                <td>
-                    <input id="another" type="text" size="11" />
-                </td>
-            </tr>
-        </table>
-    </fieldset>
-
-    <fieldset>
-        <select name="selectEr">
-            <option value="1">1 cat ate grass and puked</option>
-            <option value="1">2 cats ate grass and puked</option>
-            <option value="1">3 cats ate grass and puked</option>
-            <option value="1">5 cats ate grass and puked</option>
-            <option value="1">12 cats ate grass and puked</option>
-            <option value="1">4 cats ate grass and puked</option>
-        </select>
-    </fieldset>
-    <fieldset>
-        <input type="password" size="9" />
-    </fieldset>
-</form>
-
-<p>
-    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut ut eros id velit laoreet pharetra. Fusce sodales ligula vitae arcu. Quisque et neque eu massa bibendum tincidunt. Donec felis. In quam libero, varius at, tempus eget, luctus in, orci. Praesent a leo. Etiam scelerisque massa. Nulla odio ante, eleifend ultrices, sodales ut, volutpat vel, mauris. Vestibulum ultrices laoreet metus. Phasellus tempus eros sit amet felis fringilla posuere. Fusce eu justo. Sed dictum ante vel velit. Aliquam dapibus ante eget tortor.
-</p>
-<p>
-    Vestibulum mattis blandit velit. Vivamus lobortis eros vel magna. Vivamus ligula nisl, vestibulum nec, ornare sit amet, pretium id, erat. Nulla congue. Morbi at nisl et magna mattis pretium. Aliquam erat volutpat. In convallis. Vestibulum in felis. Nam iaculis, leo quis ornare iaculis, diam lacus auctor metus, a aliquet leo erat vitae tellus. Etiam gravida ipsum tincidunt velit. Curabitur auctor suscipit diam. Mauris mauris felis, gravida et, feugiat nec, sodales ut, purus. Donec lobortis pharetra diam. Aliquam non neque. Sed mi. Morbi ornare nisi at magna.
-</p>
-    Fusce aliquet. Nunc porta, arcu sed hendrerit eleifend, erat neque lobortis nulla, eu faucibus massa quam vel justo. Sed suscipit dolor sit amet quam. Sed vel erat. Praesent ullamcorper, nunc consectetuer pulvinar commodo, risus ipsum suscipit leo, quis porta sapien quam eu augue. Nunc eget diam et elit malesuada pulvinar. Donec varius magna eget purus. Suspendisse sollicitudin tellus vitae lacus. Vestibulum purus libero, varius id, vulputate eget, fermentum quis, sem. In libero nibh, fermentum eget, malesuada pharetra, lacinia nec, eros. Aliquam erat volutpat. Ut egestas auctor mauris. Donec euismod venenatis leo.
-<p>
-    Maecenas ipsum. Sed vitae ipsum sit amet odio condimentum pellentesque. Aliquam eros. Nulla facilisis, purus id lacinia condimentum, ligula metus luctus metus, vitae pharetra nibh mi ut turpis. Aliquam condimentum urna quis mi. Nullam porta lacus nec massa. Nulla euismod ligula vitae lectus. Fusce sit amet dolor. Sed ac augue ut augue fermentum tempus. Morbi ut erat a est rhoncus sagittis. Maecenas justo neque, pharetra in, ullamcorper eu, egestas vitae, eros.
-</p>
-<p>
-    Aenean sodales, arcu a iaculis tempor, tortor augue pharetra lectus, a egestas justo diam vel est. Cras neque augue, vehicula in, luctus eget, feugiat elementum, mi. Donec feugiat. Nam euismod porttitor elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur dolor. Nunc ullamcorper viverra nunc. Morbi in purus quis turpis egestas scelerisque. Vivamus suscipit felis vitae est ultrices sagittis. Donec vel nulla sed est vehicula pulvinar.
-</p>
-<p>
-     <input id="timeInput2" type="text" size="7" value="8:24am" />
-</p>
-<!--
-<div id="when-st_combobox" class="CB_menu" style="overflow: auto; display: none; position: absolute; top: 39px; left: 23px; width: 5.5em; height: 120px; z-index: 2;">
-    <div>
-        <div id="when-st_combobox_0" class="CB_option">12:00am</div>
-        <div id="when-st_combobox_1" class="CB_option">12:30am</div>
-        <div id="when-st_combobox_2" class="CB_option">1:00am</div>
-        <div id="when-st_combobox_3" class="CB_option">1:30am</div>
-        <div id="when-st_combobox_4" class="CB_option">2:00am</div>
-        <div id="when-st_combobox_5" class="CB_option">2:30am</div>
-        <div id="when-st_combobox_6" class="CB_option">3:00am</div>
-        <div id="when-st_combobox_7" class="CB_option">3:30am</div>
-        <div id="when-st_combobox_8" class="CB_option">4:00am</div>
-        <div id="when-st_combobox_9" class="CB_option">4:30am</div>
-        <div id="when-st_combobox_10" class="CB_option">5:00am</div>
-        <div id="when-st_combobox_11" class="CB_option">5:30am</div>
-        <div id="when-st_combobox_12" class="CB_option">6:00am</div>
-        <div id="when-st_combobox_13" class="CB_option">6:30am</div>
-        <div id="when-st_combobox_14" class="CB_option">7:00am</div>
-        <div id="when-st_combobox_15" class="CB_option">7:30am</div>
-        <div id="when-st_combobox_16" class="CB_option">8:00am</div>
-        <div id="when-st_combobox_17" class="CB_option">8:30am</div>
-        <div id="when-st_combobox_18" class="CB_option">9:00am</div>
-        <div id="when-st_combobox_19" class="CB_option">9:30am</div>
-        <div id="when-st_combobox_20" class="CB_option">10:00am</div>
-        <div id="when-st_combobox_21" class="CB_option">10:30am</div>
-        <div id="when-st_combobox_22" class="CB_option">11:00am</div>
-        <div id="when-st_combobox_23" class="CB_option">11:30am</div>
-        <div id="when-st_combobox_24" class="CB_option">12:00pm</div>
-        <div id="when-st_combobox_25" class="CB_option">12:30pm</div>
-        <div id="when-st_combobox_26" class="CB_option">1:00pm</div>
-        <div id="when-st_combobox_27" class="CB_option">1:30pm</div>
-        <div id="when-st_combobox_28" class="CB_option">2:00pm</div>
-        <div id="when-st_combobox_29" class="CB_option">2:30pm</div>
-        <div id="when-st_combobox_30" class="CB_option">3:00pm</div>
-        <div id="when-st_combobox_31" class="CB_option">3:30pm</div>
-        <div id="when-st_combobox_32" class="CB_option">4:00pm</div>
-        <div id="when-st_combobox_33" class="CB_option">4:30pm</div>
-        <div id="when-st_combobox_34" class="CB_option">5:00pm</div>
-        <div id="when-st_combobox_35" class="CB_option CB_selected">5:30pm</div>
-        <div id="when-st_combobox_36" class="CB_option">6:00pm</div>
-        <div id="when-st_combobox_37" class="CB_option">6:30pm</div>
-        <div id="when-st_combobox_38" class="CB_option">7:00pm</div>
-        <div id="when-st_combobox_39" class="CB_option">7:30pm</div>
-        <div id="when-st_combobox_40" class="CB_option">8:00pm</div>
-        <div id="when-st_combobox_41" class="CB_option">8:30pm</div>
-        <div id="when-st_combobox_42" class="CB_option">9:00pm</div>
-        <div id="when-st_combobox_43" class="CB_option">9:30pm</div>
-        <div id="when-st_combobox_44" class="CB_option">10:00pm</div>
-        <div id="when-st_combobox_45" class="CB_option">10:30pm</div>
-        <div id="when-st_combobox_46" class="CB_option">11:00pm</div>
-        <div id="when-st_combobox_47" class="CB_option">11:30pm</div>
-    </div>
-</div>
--->
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/js/tests/widget/test_TimePickerDate.js b/tapestry/tapestry-framework/src/js/tests/widget/test_TimePickerDate.js
deleted file mode 100644
index aaa3e78..0000000
--- a/tapestry/tapestry-framework/src/js/tests/widget/test_TimePickerDate.js
+++ /dev/null
@@ -1,15 +0,0 @@
-dojo.registerModulePath("tapestry", "../tapestry");
-
-dojo.require("tapestry.test");
-dojo.require("tapestry.core");
-dojo.require("dojo.date.format");
-
-function test_time_format(){
-	var dt = new Date();
-	var value = dojo.date.format(dt, {timePattern:"h:mm a"});
-	jum.assertTrue(value, value.indexOf("NaN") < 0);
-	
-	dt = new Date("03:00 am");
-	value = dojo.date.format(dt, {timePattern:"h:mm a"});
-	jum.assertFalse(value, value.indexOf("NaN") < 0);
-}
diff --git a/tapestry/tapestry-framework/src/js/tests/widget/test_widgetManager.js b/tapestry/tapestry-framework/src/js/tests/widget/test_widgetManager.js
deleted file mode 100644
index eecb46a..0000000
--- a/tapestry/tapestry-framework/src/js/tests/widget/test_widgetManager.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// dojo.registerModulePath("tapestry", "../tapestry");
-dojo.registerModulePath("tapestry", "../tapestry");
-
-dojo.require("dojo.ns");
-dojo.require("dojo.widget.*");
-dojo.require("tapestry.core");
-dojo.require("tapestry.test");
-dojo.require("tapestry.widget.Widget");
-
-function test_syncfailure_widget(){
-	try {
-		tapestry.widget.synchronizeWidgetState("bs", "NonExistant", {});
-	} catch (e) { jum.assertTrue("test2", e instanceof Error); return; }
-	throw new JUMAssertFailure("Previous test should have failed.");
-}
diff --git a/tapestry/tapestry-framework/src/scripts/TestAssetService.xml b/tapestry/tapestry-framework/src/scripts/TestAssetService.xml
deleted file mode 100644
index d9dbd9f..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestAssetService.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c16" root="context16" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter name="org.apache.tapestry.application-specification"
-  				value="/org/apache/tapestry/junit/mock/c16/app.application" />
-  	</servlet>
-
-	<request>
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Private Assets</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Image Tag">
-<![CDATA[
-<img src="/c16/app?service=asset&amp;path=%2Forg%2Fapache%2Ftapestry%2Fjunit%2Fmock%2Fc16%2Flogo.png" />
-]]>
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="asset" />
-		<parameter name="path" value="/org/apache/tapestry/junit/mock/c16/logo.png" />
-		
-		<assert-output-stream name="Image Content"
-				content-type="image/png"
-				path="src/test/org/apache/tapestry/junit/mock/c16/logo.png" />	
-	</request>
-
-	
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestAssetTemplates.xml b/tapestry/tapestry-framework/src/scripts/TestAssetTemplates.xml
deleted file mode 100644
index ce25645..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestAssetTemplates.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application" />
-  	</servlet>      
-    
-	<request>
-	  	<parameter name="service" value="page" />
-      <parameter name="page" value="PrivateAssetTemplate" />
-		
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Private Asset Template</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Page Content">
-<![CDATA[		
-This page's content comes from a private asset
-]]>
-		</assert-output>
-		
-	</request>
-	
-	<request>
-	  	<parameter name="service" value="page" />
-      <parameter name="page" value="ContextAssetTemplate" />
-		
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Context Asset Template</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Page Content">
-<![CDATA[		
-This page's content comes from a context asset
-]]>
-		</assert-output>
-		
-	</request>	
-	
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestCycleActivatePage.xml b/tapestry/tapestry-framework/src/scripts/TestCycleActivatePage.xml
deleted file mode 100644
index dcf0e1b..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestCycleActivatePage.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c25" root="context25" />
-
-  	<servlet name="cycleActivatePage" class="org.apache.tapestry.ApplicationServlet" />
-
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Three</title>
-]]>
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Four" />
-    <parameter name="component" value="$DirectLink" />    
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Message">
-		A validate cycle during page activation was detected: Six; Five; Six.
-		</assert-output>
-	</request>
-	
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestDefaultParameterValues.xml b/tapestry/tapestry-framework/src/scripts/TestDefaultParameterValues.xml
deleted file mode 100644
index 24674d4..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestDefaultParameterValues.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c27" root="context27" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet" />
-
-	<request>
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Home</title>
-]]>
-		</assert-output>
-  	  	  	
-
-		<assert-output name="bound int value">
-<![CDATA[
-<td>Bound intValue    = 10</td>
-]]>
-		</assert-output>
-
-		<assert-output name="bound double value">
-<![CDATA[
-<td>Bound doubleValue = 2.72</td>
-]]>
-		</assert-output>
-
-		<assert-output name="bound object value">
-<![CDATA[
-<td>Bound objectValue = zh_TW</td>
-]]>
-		</assert-output>
-
-		<assert-output name="bound boolean value">
-<![CDATA[
-<td>Bound booleanValue = true</td>
-]]>
-		</assert-output>
-
-
-		<assert-output name="default int value">
-<![CDATA[
-<td>Default intValue    = 5</td>
-]]>
-		</assert-output>
-
-		<assert-output name="default double value">
-<![CDATA[
-<td>Default doubleValue = 3.14</td>
-]]>
-		</assert-output>
-
-		<assert-output name="default object value">
-<![CDATA[
-<td>Default objectValue = en_US</td>
-]]>
-		</assert-output>
-
-		<assert-output name="default boolean value">
-<![CDATA[
-<td>Default booleanValue = false</td>
-]]>
-		</assert-output>
-
-
-
-
-		<assert-output name="span tag">
-<![CDATA[
-<span id="Any">span tag</span>
-]]>
-		</assert-output>
-
-		<assert-output name="div tag">
-<![CDATA[
-<div id="Any_0">div tag</div>
-]]>
-		</assert-output>
-		
-	</request>
-		
- </mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestFailMissingClass.xml b/tapestry/tapestry-framework/src/scripts/TestFailMissingClass.xml
deleted file mode 100644
index 15d228a..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestFailMissingClass.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="fail" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/fail/Fail.application" />
-  	</servlet>      
-    
-    <request>
-    	<parameter name="service" value="page" />
-      <parameter name="page" value="MissingClass" />
-    	
-    	<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-					
-		<assert-output name="Error">
-Could not load class org.apache.tapestry.junit.mock.fail.MissingClass
-		</assert-output>
-		
-		<assert-output name="Exception">
-java.lang.ClassNotFoundException
-		</assert-output>
-				
-	</request>		
-
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestFailNoHome.xml b/tapestry/tapestry-framework/src/scripts/TestFailNoHome.xml
deleted file mode 100644
index 837c417..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestFailNoHome.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="fail" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/fail/Fail.application" />
-  	</servlet>      
-       
-    <request>
-    	
-    	<assert-output name="Page Title">
-<![CDATA[    	
-<title>Exception</title>
-]]>
-		</assert-output>
-					
-		<assert-output name="Error">
-Page 'Home' not found in application namespace.
-		</assert-output>
-	</request>		
-
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestFailNotComponent.xml b/tapestry/tapestry-framework/src/scripts/TestFailNotComponent.xml
deleted file mode 100644
index 2992b97..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestFailNotComponent.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="fail" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/fail/Fail.application" />
-  	</servlet>      
-    
-    <request>
-    	<parameter name="service" value="page" />
-      <parameter name="page" value="NotComponent" />
-    	
-    	<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-				
-			
-		<assert-output name="Error">
-does not implement the IComponent interface.
-		</assert-output>
-								
-	</request>		
-
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestFailNotPage.xml b/tapestry/tapestry-framework/src/scripts/TestFailNotPage.xml
deleted file mode 100644
index 401f145..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestFailNotPage.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="fail" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/fail/Fail.application" />
-  	</servlet>      
-    
-    <request>
-    	<parameter name="service" value="page" />
-      <parameter name="page" value="NotPage" />
-    	
-    	<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-					
-				
-		<assert-regexp name="Error">
-Class .* does not implement the IPage interface\.
-		</assert-regexp>
-								
-	</request>		
-
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestFor.xml b/tapestry/tapestry-framework/src/scripts/TestFor.xml
deleted file mode 100644
index e9208b9..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestFor.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c34" root="context34" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet" />
-    
-    <request>
-
-		<assert-output name="Test If 1">
-Show text!
-		</assert-output>
-
-		<assert-no-output name="Test If 2">
-Do not show this
-		</assert-no-output>
-
-		<assert-no-output name="Test If 3">
-Do not show this either
-		</assert-no-output>
-
-		<assert-output name="Test If 4">
-But show this too!
-		</assert-output>
-
-		<assert-output name="Test Form If 1">
-Show form text!
-		</assert-output>
-
-		<assert-no-output name="Test Form If 2">
-Do not show form text
-		</assert-no-output>
-
-		<assert-no-output name="Test Form If 3">
-Do not show this form text either
-		</assert-no-output>
-
-		<assert-output name="Test If 4">
-But show this form text too!
-		</assert-output>
-    
-    <assert-output name="Test tags For">
-&lt;li informal="informal-value" id="tags"&gt;Render tag&lt;/li&gt;
-    </assert-output>
-        
-    <assert-no-output name="Test no Tags For">
-&lt;li informal="informal-value"&gt;Do not render tag&lt;/li&gt;
-    </assert-no-output>
-
-	</request>		
-
-	<request>
-	  	<parameter name="formids" value="If_1,If_2,for2,for3,for4,for5,for6" />
-	  	<parameter name="component" value="$Form" />
-	  	<parameter name="page" value="Home" />
-	  	<parameter name="service" value="direct" />
-	  	<parameter name="submitmode" value="" />
-	  	<parameter name="If_1" value="T" />
-	  	<parameter name="If_2" value="F" />
-	  	<parameter name="for2">
-              <value>VSuno</value>
-              <value>VSdue</value>
-        </parameter>
-	  	<parameter name="for3">
-              <value>PSbg_BG</value>
-              <value>PSde_DE</value>
-        </parameter>
-	  	<parameter name="for4">
-              <value>PSen_US</value>
-              <value>PSbg_BG</value>
-        </parameter>
-	  	<parameter name="for5">
-              <value>VOrO0ABXNyACdvcmcuYXBhY2hlLnRhcGVzdHJ5Lmp1bml0Lm1vY2suYzM0Lkl0ZW0AAAAAAAAAAQIAAUwABl92YWx1ZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwdAAGdmFsdWUx</value>
-              <value>VOrO0ABXNyACdvcmcuYXBhY2hlLnRhcGVzdHJ5Lmp1bml0Lm1vY2suYzM0Lkl0ZW0AAAAAAAAAAQIAAUwABl92YWx1ZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwdAAGdmFsdWUz</value>
-              <value>VOrO0ABXNyACdvcmcuYXBhY2hlLnRhcGVzdHJ5Lmp1bml0Lm1vY2suYzM0Lkl0ZW0AAAAAAAAAAQIAAUwABl92YWx1ZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwdAAGdmFsdWU2</value>
-        </parameter>
-	  	<parameter name="for6">
-              <value>VOrO0ABXNyACdvcmcuYXBhY2hlLnRhcGVzdHJ5Lmp1bml0Lm1vY2suYzM0Lkl0ZW0AAAAAAAAAAQIAAUwABl92YWx1ZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwdAAGdmFsdWUx</value>
-              <value>VOrO0ABXNyACdvcmcuYXBhY2hlLnRhcGVzdHJ5Lmp1bml0Lm1vY2suYzM0Lkl0ZW0AAAAAAAAAAQIAAUwABl92YWx1ZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwdAAGdmFsdWUz</value>
-        </parameter>
-
-		<assert-output name="Test If 1">
-Show text!
-		</assert-output>
-
-		<assert-no-output name="Test If 2">
-Do not show this
-		</assert-no-output>
-
-		<assert-no-output name="Test If 3">
-Do not show this either
-		</assert-no-output>
-
-		<assert-output name="Test If 4">
-But show this too!
-		</assert-output>
-
-		<assert-output name="Test Form If 1">
-Show form text!
-		</assert-output>
-
-		<assert-no-output name="Test Form If 2">
-Do not show form text
-		</assert-no-output>
-
-		<assert-no-output name="Test Form If 3">
-Do not show this form text either
-		</assert-no-output>
-
-		<assert-output name="Test If 4">
-But show this form text too!
-		</assert-output>
-        
-		<assert-output name="Test For index count">
-Rewinded index count: 11
-		</assert-output>
-                  
-		<assert-output name="Test For index 0">
-Rewinded index 0 is 0
-		</assert-output>
-                  
-		<assert-output name="Test For index 1">
-Rewinded index 1 is 1
-		</assert-output>
-                  
-		<assert-output name="Test For index 2">
-Rewinded index 2 is 0
-		</assert-output>
-                  
-		<assert-output name="Test For index 3">
-Rewinded index 3 is 1
-		</assert-output>
-                  
-		<assert-output name="Test For index 4">
-Rewinded index 4 is 0
-		</assert-output>
-                  
-		<assert-output name="Test For index 5">
-Rewinded index 5 is 1
-		</assert-output>
-                  
-		<assert-output name="Test For index 6">
-Rewinded index 6 is 0
-		</assert-output>
-                  
-		<assert-output name="Test For index 7">
-Rewinded index 7 is 1
-		</assert-output>
-                  
-		<assert-output name="Test For index 8">
-Rewinded index 8 is 2
-		</assert-output>
-                  
-		<assert-output name="Test For index 9">
-Rewinded index 9 is 0
-		</assert-output>
-                  
-		<assert-output name="Test For index 10">
-Rewinded index 10 is 1
-		</assert-output>
-                  
-		<assert-output name="Test For value count">
-Rewinded value count: 11
-		</assert-output>
-                  
-		<assert-output name="Test For value 0">
-Rewinded value 0 is uno
-		</assert-output>
-                  
-		<assert-output name="Test For value 1">
-Rewinded value 1 is due
-		</assert-output>
-                  
-		<assert-output name="Test For value 2">
-Rewinded value 2 is bg_BG
-		</assert-output>
-                  
-		<assert-output name="Test For value 3">
-Rewinded value 3 is de_DE
-		</assert-output>
-                  
-		<assert-output name="Test For value 4">
-Rewinded value 4 is en_US
-		</assert-output>
-                  
-		<assert-output name="Test For value 5">
-Rewinded value 5 is en
-		</assert-output>
-                  
-		<assert-output name="Test For value 6">
-Rewinded value 6 is Item[id1 : value1]
-		</assert-output>
-                  
-		<assert-output name="Test For value 7">
-Rewinded value 7 is Item[id3 : value3]
-		</assert-output>
-                  
-		<assert-output name="Test For value 8">
-Rewinded value 8 is Item[null : value6]
-		</assert-output>
-                  
-		<assert-output name="Test For value 9">
-Rewinded value 9 is Item[null : value1]
-		</assert-output>
-                  
-		<assert-output name="Test For value 10">
-Rewinded value 10 is Item[null : value3]
-		</assert-output>
-                  
-	</request>		
-    
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestHidden.xml b/tapestry/tapestry-framework/src/scripts/TestHidden.xml
deleted file mode 100644
index 43683c0..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestHidden.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c31" root="context31" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet" />
-
-	<request>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-
-		<assert-output name="Hidden">
-<![CDATA[
-<input type="hidden" name="hidden" id="hidden" value="1234567890" />
-]]>	
-		</assert-output>
-		
-		<assert-output name="HiddenWithID">
-<![CDATA[
-<input type="hidden" name="0987654321" id="0987654321" value="1234567890-with id" />
-]]>	
-		</assert-output>
-
-		<assert-output name="HiddenWithEncoding">
-<![CDATA[
-<input type="hidden" name="hiddenWithEncoding" id="hiddenWithEncoding" value="S1234567890-with encoding" />
-]]>	
-		</assert-output>
-
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$Form" />
-		<parameter name="hidden" value="updated-1234567890" />
-		<parameter name="0987654321" value="updated-1234567890-with id" />
-		<parameter name="hiddenWithEncoding" value="Supdated-1234567890-with encoding" />
-		<parameter name="hiddenBoolean" value="T" />
-		<parameter name="formids" value="hidden,0987654321,hiddenWithEncoding,hiddenBoolean" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-			
-		<assert-output name="Value">
-Value: [updated-1234567890]
-		</assert-output>
-		
-		<assert-output name="Hidden">
-HiddenID: [0987654321]
-		</assert-output>
-		
-		<assert-output name="Hidden">
-HiddenWithEncoding: [updated-1234567890-with encoding]
-		</assert-output>
-	</request>
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestHome.xml b/tapestry/tapestry-framework/src/scripts/TestHome.xml
deleted file mode 100644
index 7c309e0..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestHome.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application" />
-  	</servlet>      
-    
-    <!-- Check that the home service is the default service. -->
-    
-    <request>
-    			
-		<assert-output name="English Blurb">
-If it's not Scottish, it's crap!
-		</assert-output>
-	</request>		
-
-	<request>
-	  	<parameter name="service" value="page" />
-      <parameter name="page" value="Assets" />
-		
-		<assert-output name="Home Link">
-<![CDATA[		
-href="/mock/app?service=home"		
-]]>
-		</assert-output>
-	
-	</request>
-	
-<!-- Double check that home service works when named. -->
-	
-	<request>
-	  	<parameter name="service" value="home" />
-		
-		<assert-output name="English Blurb">
-If it's not Scottish, it's crap!
-		</assert-output>
-				
-	</request>	
-			 	 	 
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestImplicitComponents.xml b/tapestry/tapestry-framework/src/scripts/TestImplicitComponents.xml
deleted file mode 100644
index 42637d3..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestImplicitComponents.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application" />
-  	</servlet>
-       
-    <request>
-    	<parameter name="service" value="page" />
-      <parameter name="page" value="ImplicitComponents" />
- 	
- 	
- 		<assert-output name="Implicit Body component">
-<![CDATA[
-<title>Implicit Components</title>
-]]> 		
- 		</assert-output>
- 		
- 	
-	  	<assert-output name="Implicit Insert component">
-<![CDATA[
-Application Name: JUnit Mock Application	
-]]>
-		</assert-output> 	
-					
- 	    <assert-output-matches name="Foreach output" subgroup="1">
-<![CDATA[
->\s*(.*?)\s*</li>
-]]>
-			<match>Alpha</match>
-			<match>Beta</match>
-			<match>Gamma</match>					
-		</assert-output-matches>
-	</request>
-			
-
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestInheritInformalParameters.xml b/tapestry/tapestry-framework/src/scripts/TestInheritInformalParameters.xml
deleted file mode 100644
index 30ac065..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestInheritInformalParameters.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c24" root="context24" />
-
-  	<servlet name="inheritInformal" class="org.apache.tapestry.ApplicationServlet" />
-
-	<request>
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="src">
-		src="http://the.wall/"
-		</assert-output>
-		
-		<assert-output name="width">
-		width="250"
-		</assert-output>
-		
-		<assert-output name="height">
-		height="150"
-		</assert-output>
-		
-		<assert-output name="length">
-		length="350"
-		</assert-output>
-
-		<assert-output name="no-border">
-		border="7"
-		</assert-output>
-
-		<assert-no-output name="no-src">
-		src="testSrc"
-		</assert-no-output>
-
-		<assert-no-output name="no-class">
-		class="testClass"
-		</assert-no-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="Two" />	
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Message">
-		Component Two/$BadBlock.block allows only formal parameters, but has inherit-informal-parameters set.	
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="Three" />	
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Message">
-		Component Three/$BadImage allows only formal parameters, but it contains component Three/$BadImage.image that has inherit-informal-parameters set.
-		</assert-output>
-	</request>
-	
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestLibrary.xml b/tapestry/tapestry-framework/src/scripts/TestLibrary.xml
deleted file mode 100644
index fa41dba..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestLibrary.xml
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="junit" />
-
-  	<servlet name="mock" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application" />
-      <init-parameter name="org.apache.tapestry.servlet-path" value="/mock" />
-  	</servlet>
-  	
-  	<request>
-	  	
-  	  <assert-output name="Page Title">
-<![CDATA[  	  
-<title>Mock App Home Page</title>
-]]>
-  	  </assert-output>
-  	  	  	
-  	  <assert-output name="DirectLink with parameters">
-<![CDATA[  	  
-  	  <a id="link" href="/junit/mock?component=link&amp;page=Home&amp;service=direct&amp;sp=2&amp;sp=d3.5&amp;sp=SHello">
-]]>
-  	  </assert-output>
-  	  	  	
- 	  <assert-output-matches name="Page structure" subgroup="1">
-<![CDATA[
-<(/?\w+)(\s*\w+=".*")*\s*/?>
-]]>
-		<match>html</match>
-		<match>head</match>
-		<match>meta</match>
-		<match>title</match>
-		<match>/title</match>
-        <match>script</match>
-        <match>/script</match>
-        <match>script</match>
-        <match>/script</match>
-        <match>script</match>
-        <match>/script</match>
-        <match>script</match>
-        <match>/script</match>
-        <match>script</match>
-        <match>/script</match>
-        <match>link</match>
-		<match>/head</match>
-		<match>body</match>	
-        
-		<!-- Generated by the ServiceLink -->
-		
-		<match>a</match>
-		<match>/a</match>
-		
-		<!-- This ugliness is care of TestLocalization, which is why
-			 I started doing lots of little tiny contexts, so the tests
-			 wouldn't interfere with each other.  -->
-			 
-        <match>foo</match>
-        <match>/foo</match>
-		
-		<match>/body</match>
-		<match>/html</match>		
-	  </assert-output-matches>
-  	  	  
- 
-  </request>
-  
-  <request>
-  	<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="link" />
-  	<parameter name="sp">
-  		<value>2</value>
-  		<value>d3.5</value>
-  		<value>Hello</value>
-  	</parameter>
-		
-	<assert-output-matches name="Cells" subgroup="1">
-<![CDATA[
-<td>(.*?)</td>
-]]>
-		<match>0</match>
-		<match>java.lang.Integer</match>
-		<match>2</match>
-		
-		<match>1</match>
-		<match>java.lang.Double</match>
-		<match>3.5</match>
-		
-		<match>2</match>
-		<match>java.lang.String</match>
-		<match>Hello</match>
-	
-	</assert-output-matches>
-	
-  	  <assert-output name="PageLink (for library page).">
-<![CDATA[  	  
-  	  <a id="refresh" href="/junit/mock?page=lib%3ADumper&amp;service=page">
-]]>
-  	  </assert-output>	
-	
-	<assert name="HttpSession created">
-	request.session != null
-	</assert>
-	
-  </request>
-  
-  <!-- Click the "refresh" link and check that the persistent state is still there. -->
-  
-  <request>
-  	<parameter name="service" value="page" />
-    <parameter name="page" value="lib:Dumper" />
-  	
-  	<assert-output-matches name="Cells (after refresh)" subgroup="1">
-<![CDATA[
-<td>(.*?)</td>
-]]>
-		<match>0</match>
-		<match>java.lang.Integer</match>
-		<match>2</match>
-		
-		<match>1</match>
-		<match>java.lang.Double</match>
-		<match>3.5</match>
-		
-		<match>2</match>
-		<match>java.lang.String</match>
-		<match>Hello</match>
-	
-	</assert-output-matches>
-	
-  </request>
-  
-
-  <!-- Return to the Home page, ensure that the DirectLink renders the stateful flag. -->
-  
-  <request>
-	
-  	  <assert-output name="Page Title">
-<![CDATA[  	  
-<title>Mock App Home Page</title>
-]]>
-  	  </assert-output>
-	
-  	  <assert-output name="DirectLink with parameters">
-<![CDATA[  	  
-  	  <a id="link" href="/junit/mock?component=link&amp;page=Home&amp;service=direct&amp;session=T&amp;sp=2&amp;sp=d3.5&amp;sp=SHello">
-]]>
-  	  </assert-output>
-  </request>
-
-  <request>
-  	<parameter name="service" value="page" />
-    <parameter name="page" value="lib:Properties" />
-  	
-  	<assert-output name="Page Name">
-  	Page Name: [lib:Properties]	
-  	</assert-output>
-	
-  </request>	
-  	
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestLibraryInWebInfApplication.xml b/tapestry/tapestry-framework/src/scripts/TestLibraryInWebInfApplication.xml
deleted file mode 100644
index bcc36c2..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestLibraryInWebInfApplication.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c4" root="context4" />
-
-  	<servlet name="foo" class="org.apache.tapestry.ApplicationServlet" />
-       
-    <request>
- 		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>App Spec in WEB-INF</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Application Name">
-Application name: Application foo in WEB-INF
- 		</assert-output>
- 		
- 		<assert-output name="Engine Class">
-Engine class: org.apache.tapestry.junit.mock.c4.C4Engine
-		</assert-output>
-		
- 	</request>
-			
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestListEdit.xml b/tapestry/tapestry-framework/src/scripts/TestListEdit.xml
deleted file mode 100644
index cb13bee..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestListEdit.xml
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c14" root="context14" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet" />
-
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="ListEdit" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>ListEdit</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[
-<input type="hidden" (name="(.*?)" value="(.*?)") />
-]]>
-	   	<match>name="formids" value="e,inputColor,inputColor_0,inputColor_1"</match>			
-	    <match>name="component" value="form"</match>
-      <match>name="page" value="ListEdit"</match>
-			<match>name="service" value="direct"</match>
-	        <match>name="submitmode" value=""</match>
-			<match>name="submitname" value=""</match>			
-			<match>name="e" value="SClothing"</match>
-			<match>name="e" value="SEye Color"</match>
-			<match>name="e" value="SFood"</match>
-		</assert-output-matches>
-
-	
-		<assert-output-matches name="Selected Options">
-<![CDATA[
-<option value=".*?" selected="selected">.*?</option>
-]]>
-			<match><![CDATA[ <option value="4" selected="selected">BLACK</option> ]]></match>
-			<match><![CDATA[ <option value="2" selected="selected">BLUE</option> ]]></match>
-			<match><![CDATA[ <option value="0" selected="selected">RED</option> ]]></match>
-				
-		</assert-output-matches>
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="ListEdit" />
-    <parameter name="component" value="form" />
-		<parameter name="e">
-			<value>Clothing</value>
-			<value>SEye Color</value>
-			<value>SFood</value>
-		</parameter>
-		<parameter name="inputColor" value="3" />
-		<parameter name="inputColor_0" value="0" />
-		<parameter name="inputColor_1" value="2" />
-		<parameter name="formids" value="e,inputColor,inputColor_0,inputColor_1" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>ListEdit Results</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Selected Colors" subgroup="1">
-<![CDATA[
-<td>(.*?)</td>
-]]>
-			<match>Yellow</match>
-			<match>Red</match>
-			<match>Blue</match>
-		</assert-output-matches>
-	</request>	
-	
-	<!-- Hack the submission so that one of the values passed up can't be unsqueezed. -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="ListEdit" />
-    <parameter name="component" value="form" />
-		<parameter name="e">
-			<value>3Clothing</value>
-			<value>SEye Color</value>
-			<value>SFood</value>
-		</parameter>
-		<parameter name="inputColor" value="3" />
-		<parameter name="inputColor_0" value="0" />
-		<parameter name="inputColor_1" value="2" />
-		<parameter name="formids" value="e,inputColor,inputColor_0,inputColor_1" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Exception">
-		org.apache.hivemind.ApplicationRuntimeException
-		</assert-output>
-		
-		<!-- JDK 1.4 changes this message to:
-			   		For input string: "3Clothing"	
-			   -->
-		<assert-output name="Outer Message">
-		3Clothing	
-		</assert-output>
-		
-		<assert-output name="Inner Exception">
-		java.lang.NumberFormatException			
-		</assert-output>
-
-	</request>		
-	
-	<!-- Test the index and listener parameters, and using an array
-		 as the source. -->
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="ListEditArray" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>ListEdit Array</title>
-]]>				
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[
-<input type="hidden" (name="(.*?)" value="(.*?)") />
-]]>
-			<match>name="formids" value="e"</match>			
-      <match>name="component" value="$ListEditForm.$Form"</match>
-      <match>name="page" value="ListEditArray"</match>
-			<match>name="service" value="direct"</match>
-      <match>name="submitmode" value=""</match>
-			<match>name="submitname" value=""</match>
-			<match>name="e" value="SFred"</match>
-			<match>name="e" value="SDino"</match>
-			<match>name="e" value="SWilma"</match>
-		</assert-output-matches>			
-	</request>
-	
-	<!-- Test where the ListEdit gets a null source. -->
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="ListEditNull" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>ListEdit Null</title>
-]]>				
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[
-<input type="hidden" (name="(.*?)" value="(.*?)") />
-]]>
-			<match>name="formids" value="e"</match>
-      <match>name="component" value="$ListEditForm.$Form"</match>
-      <match>name="page" value="ListEditNull"</match>
-			<match>name="service" value="direct"</match>
-      <match>name="submitmode" value=""</match>
-			<match>name="submitname" value=""</match>
-			
-		</assert-output-matches>			
-	</request>	
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestLocalization.xml b/tapestry/tapestry-framework/src/scripts/TestLocalization.xml
deleted file mode 100644
index a26332f..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestLocalization.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application" />
-  	</servlet>      
-    
-    <request>
-    	
-	  	<assert-output name="English Language Check">
--- in English
-		</assert-output>
-		
-		<assert-output name="English Blurb">
-If it's not Scottish, it's crap!
-		</assert-output>
-		
-		<assert-output name="English Foo-Bar">
-<![CDATA[
-<foo bar="Totally Screwed!" id="Any"></foo>
-]]>	
-		</assert-output>
-	</request>		
-
-    <request locale="fr">
-    	
-	  	<assert-output name="French Language Check">
--- in French
-		</assert-output>
-		
-		<assert-output name="French Blurb">
-Zees ees nawt cheeze!
-		</assert-output>
-		
-		<assert-output name="French Foo-Bar">
-<![CDATA[
-<foo bar="Merde!" id="Any"></foo>
-]]>	
-		</assert-output>
-		
-	</request>
-
-	<request>
-	  	<parameter name="service" value="page" />
-      <parameter name="page" value="Assets" />
-		
-		<assert-output name="English Home image">
-<![CDATA[		
-/mock/app?service=asset&amp;path=%2Forg%2Fapache%2Ftapestry%2Fjunit%2Fmock%2Fapp%2Fhome.png
-]]>
-		</assert-output>
-		
-		<assert-output name="English Back image">
-/mock/images/back.png
-		</assert-output>	
-		
-		<assert-output name="DirectLink switch URL">
-<![CDATA[		
-href="/mock/app?component=switch&amp;page=Assets&amp;service=direct"
-]]>
-		</assert-output>	
-	</request>
-	
-	<request locale="fr">
-	  	<parameter name="service" value="page" />
-      <parameter name="page" value="Assets" />
-		
-		<assert-output name="French Home image">
-<![CDATA[		
-/mock/app?service=asset&amp;path=%2Forg%2Fapache%2Ftapestry%2Fjunit%2Fmock%2Fapp%2Fhome_fr.png
-]]>
-		</assert-output>
-		
-		<assert-output name="French Back image">
-/mock/images/back_fr.png
-		</assert-output>	
-		
-		<assert-output name="DirectLink switch URL still stateless">
-<![CDATA[		
-href="/mock/app?component=switch&amp;page=Assets&amp;service=direct"
-]]>
-		</assert-output>							
-	</request>	
-	
-	
-	<!-- Test ability to switch locales and store a cookie descrbing
-	 	 the locale. -->
-	 	 
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Assets" />
-    <parameter name="component" value="switch" />
-		
-		<!-- Switch sends us back to the Home page, but in French. -->
-		
-		<assert-output name="French Blurb">
-Zees ees nawt cheeze!
-		</assert-output>
-		
-		<assert-output name="DirectLink switch URL still stateless">
-<![CDATA[		
-id="link" href="/mock/app?component=link&amp;page=Home&amp;service=direct&amp;sp=2&amp;sp=d3.5&amp;sp=SHello"
-]]>
-		</assert-output>			
-	</request>			
-			 	 	 
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestMissingAppSpec.xml b/tapestry/tapestry-framework/src/scripts/TestMissingAppSpec.xml
deleted file mode 100644
index f92fa00..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestMissingAppSpec.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c3" root="context3" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.engine-class"
-  			value="org.apache.tapestry.junit.mock.c3.C3Engine" />
-  	</servlet>
-       
-    <request>
- 		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>No Application Spec</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Application Name">
-Application name: app 		
- 		</assert-output>
- 		
- 		<assert-output name="Engine Class">
-Engine class: org.apache.tapestry.junit.mock.c3.C3Engine
-		</assert-output>
-		
- 	</request>
-			
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestOutputEncoding.xml b/tapestry/tapestry-framework/src/scripts/TestOutputEncoding.xml
deleted file mode 100644
index 42da451..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestOutputEncoding.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c28" root="context28" />
-
-  	<servlet name="latin1" class="org.apache.tapestry.ApplicationServlet">
-      <init-parameter name="org.apache.tapestry.servlet-path" value="/latin1" />
-  	</servlet>
-
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-    	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Ses</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Charset">
-<![CDATA[
-charset=ISO-8859-1
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-Espa&#241;a
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-    	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sfr</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Charset">
-<![CDATA[
-charset=ISO-8859-1
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-<![CDATA[
-Fran&#231;ais
-]]>
-		</assert-output>
-
-		<assert-output name="External Link">
-<![CDATA[
-<a id="ExternalLink" href="/c28/latin1?page=Two&amp;service=external&amp;sp=SFran%E7ais">
-]]>
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-    	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sbg</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-<![CDATA[
-&#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080;
-]]>
-		</assert-output>
-
-		<assert-output name="Language Word">
-<![CDATA[
-&#1045;&#1079;&#1080;&#1082;
-]]>
-		</assert-output>
-	</request>
-
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestParameterOverrides.xml b/tapestry/tapestry-framework/src/scripts/TestParameterOverrides.xml
deleted file mode 100644
index b5797e6..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestParameterOverrides.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c32" root="context32" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet" />
-
-	<request>
-		
-		<assert-output name="Static Over Static">
-Static over Static: Pablo Picasso
-		</assert-output>
-
-	</request>
-	
-<!-- Page Two has a component with the same id in the template and in the specification. That 
-	   is an error to be checked for. -->
-	   
-	<request>
-	    	<parameter name="service" value="page" />
-        <parameter name="page" value="Two" />
-        
-	    	<assert-output name="Page Title">
-<![CDATA[<title>Exception</title>]]>	    		
-	    	</assert-output>
-	    	
-	    	<assert-regexp name="Error Message">
-<![CDATA[
-Component insertPageName conflicts with a prior declaration in the specification \(at context:/WEB-INF/Two\.page.*\)\.
-]]>	    		
-	    	</assert-regexp>
-	</request>
-	
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestProtectedLink.xml b/tapestry/tapestry-framework/src/scripts/TestProtectedLink.xml
deleted file mode 100644
index 68c34f4..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestProtectedLink.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" />
-  	
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application" />
-  	</servlet>
-  		
-  	<!--  Get a view of the page -->
-  	
-	<request>
-  		<parameter name="service" value="page" />
-      <parameter name="page" value="ProtectedLink" />
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>ProtectedLink</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Link URL">
-<![CDATA[
-href="/mock/app?component=link&amp;page=ProtectedLink&amp;service=direct&amp;sp=6&amp;sp=13&amp;sp=1999"
-]]>
-		</assert-output>
-  		
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="ProtectedLink" />
-    <parameter name="component" value="link" />
-		<parameter name="sp">
-			<value>6</value>
-			<value>13</value>
-			<value>1999</value>
-		</parameter>  		
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>Guard</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Link URL">
-<![CDATA[
-href="/mock/app?component=link&amp;page=Guard&amp;service=direct&amp;session=T"
-]]>
-		</assert-output>
-		
-		<assert-output name="Callback">
-<![CDATA[
-Callback: DirectCallback[ProtectedLink/link 6, 13, 1999]
-]]>		
-		</assert-output>		
-  	</request>
-  	
-  	<!-- Simulate clicking the Guard page link, which should send the
-  	     user to the Protected page.  -->
-  	     
-  	<request>
-  		<parameter name="service" value="direct" />
-      <parameter name="session" value="T" />
-      <parameter name="page" value="Guard" />
-      <parameter name="component" value="link" />
-         
-  		<assert-output name="Title">
-<![CDATA[
-<title>ProtectedLink: Result</title>
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Parameters" subgroup="1">
-<![CDATA[
->(.*?)</li>
-]]>
-			<match>6</match>
-			<match>13</match>
-			<match>1999</match>
-		</assert-output-matches>
-
-	</request>
-		  	
-	<!-- Go back and click the original link now that the Guard
-	 	 page has been visited. -->		  	
-		  	
-  	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="session" value="T" />
-    <parameter name="page" value="ProtectedLink" />
-    <parameter name="component" value="link" />
-		<parameter name="sp">
-			<value>6</value>
-			<value>13</value>
-			<value>1999</value>
-		</parameter>  
-		  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>ProtectedLink: Result</title>
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Parameters" subgroup="1">
-<![CDATA[
->(.*?)</li>
-]]>
-			<match>6</match>
-			<match>13</match>
-			<match>1999</match>
-		</assert-output-matches>
-
-	</request>		  	
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestRadio.xml b/tapestry/tapestry-framework/src/scripts/TestRadio.xml
deleted file mode 100644
index d558122..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestRadio.xml
+++ /dev/null
@@ -1,422 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c18" root="context18" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet" />
-
-	<request>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup0" value="0" /> Small]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup1" checked="checked" value="1" /> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup2" value="2" /> Large]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup3" disabled="disabled" value="3" /> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-
-	</request>
-	
-	<!-- Pretend to click the "Large" button. -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$Form" />
-		<parameter name="RadioGroup" value="2" />
-		<parameter name="formids" value="RadioGroup" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup0" value="0" /> Small]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup1" value="1" /> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup2" checked="checked" value="2" /> Large]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup3" disabled="disabled" value="3" /> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [30]	
-		</assert-output>
-
-	</request>
-
-	<!-- Submit with no option selected. -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$Form" />
-		<parameter name="formids" value="RadioGroup" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup0" value="0" /> Small]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup1" checked="checked" value="1" /> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup2" value="2" /> Large]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup3" disabled="disabled" value="3" /> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-
-	</request>
-
-	<!-- Pretend to click the "Gargantuan" button (even though it is disabled). -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$Form" />
-		<parameter name="RadioGroup" value="3" />
-		<parameter name="formids" value="RadioGroup" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup0" value="0" /> Small]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup1" checked="checked" value="1" /> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup2" value="2" /> Large]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup3" disabled="disabled" value="3" /> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-
-	</request>
-
-	<!-- Click the dummy form (using action service). -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="direct" value="1" />
-    <parameter name="component" value="dummy" />
-		<parameter name="formids" value="" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup0" value="0" /> Small]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup1" checked="checked" value="1" /> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup2" value="2" /> Large]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup3" disabled="disabled" value="3" /> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-
-	</request>
-
-	<!-- Click the link to disable the group. -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-    
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup0" disabled="disabled" value="0" /> Small]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup1" checked="checked" disabled="disabled" value="1" /> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup2" disabled="disabled" value="2" /> Large]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup3" disabled="disabled" value="3" /> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-			
-	</request>
-	
-	<!-- Select the (now disabled) large value. -->
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$Form" />
-		<parameter name="RadioGroup" value="2" />
-		<parameter name="formids" value="RadioGroup" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup0" disabled="disabled" value="0" /> Small]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup1" checked="checked" disabled="disabled" value="1" /> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup2" disabled="disabled" value="2" /> Large]]></match>
-			<match><![CDATA[<input type="radio" name="RadioGroup" id="RadioGroup3" disabled="disabled" value="3" /> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="NestedGroups" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Exception Name">
-		org.apache.hivemind.ApplicationRuntimeException
-		</assert-output>
-		
-		<assert-output name="Exception Messge">
-		RadioGroup components may not be nested.
-		</assert-output>
-		
-		<assert-output name="Component Id">
-		[NestedGroups/inner]
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="NoGroup" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Exception Name">
-		org.apache.hivemind.ApplicationRuntimeException
-		</assert-output>
-		
-		<assert-output name="Exception Messge">
-		Radio component must be contained within a RadioGroup.
-		</assert-output>
-		
-		<assert-output name="Component Id">
-		[NoGroup/orphan]
-		</assert-output>
-	</request>
-	
-<!-- Now some tests to check for handling of null as the current selection of a RadioGroup. -->
-
-	<request>
-			<parameter name="service" value="page" />
-      <parameter name="page" value="NullSelection" />
-			
-			<assert-output name="Page Title">
-<![CDATA[<title>NullSelection</title>]]>	
-			</assert-output>
-			
-			<assert-output name="No Choice">
-<![CDATA[<input type="radio" name="group" id="group0" checked="checked" value="0" /> No Choice]]>				
-			</assert-output>
-			
-			<assert-output name="Tapestry">
-<![CDATA[<input type="radio" name="group" id="group1" value="1" /> Tapestry]]>				
-			</assert-output>
-
-			<assert-output name="Struts">
-<![CDATA[<input type="radio" name="group" id="group2" value="2" /> Struts]]>				
-			</assert-output>
-			
-			<assert-output name="WebWork">
-<![CDATA[<input type="radio" name="group" id="group3" value="3" /> WebWork]]>				
-			</assert-output>
-			
-			<assert-output name="Selection">
-Framework: []
-			</assert-output>
-					
-	</request>
-	
-	<!-- Submit the form. -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="session" value="T" />
-    <parameter name="page" value="NullSelection" />
-    <parameter name="component" value="$Form" />
-		<parameter name="formids" value="group" />
-		<parameter name="group" value="1" />
-		
-			<assert-output name="No Choice">
-<![CDATA[<input type="radio" name="group" id="group0" value="0" /> No Choice]]>				
-			</assert-output>
-					
-			<assert-output name="Tapestry">
-<![CDATA[<input type="radio" name="group" id="group1" checked="checked" value="1" /> Tapestry]]>				
-			</assert-output>
-
-			<assert-output name="Struts">
-<![CDATA[<input type="radio" name="group" id="group2" value="2" /> Struts]]>				
-			</assert-output>
-			
-			<assert-output name="WebWork">
-<![CDATA[<input type="radio" name="group" id="group3" value="3" /> WebWork]]>				
-			</assert-output>
-			
-			<assert-output name="Selection">
-Framework: [tapestry]
-			</assert-output>		
-	</request>
-	
-	<!-- Submit the form with *no* selection for group. -->
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="session" value="T" />
-    <parameter name="page" value="NullSelection" />
-    <parameter name="component" value="$Form" />
-		<parameter name="formids" value="group" />	
-
-			<assert-output name="No Choice">
-<![CDATA[<input type="radio" name="group" id="group0" checked="checked" value="0" /> No Choice]]>				
-			</assert-output>
-			
-			<assert-output name="Tapestry">
-<![CDATA[<input type="radio" name="group" id="group1" value="1" /> Tapestry]]>				
-			</assert-output>
-
-			<assert-output name="Struts">
-<![CDATA[<input type="radio" name="group" id="group2" value="2" /> Struts]]>				
-			</assert-output>
-			
-			<assert-output name="WebWork">
-<![CDATA[<input type="radio" name="group" id="group3" value="3" /> WebWork]]>				
-			</assert-output>
-			
-			<assert-output name="Selection">
-Framework: []
-			</assert-output>
-		
-		</request>			
-		
-		<request>
-			<parameter name="service" value="page" />
-      <parameter name="page" value="LanguageSelection" />
-			
-		<assert-output name="Selected Language">
-		Selected Language: []
-		</assert-output>
-		
-		<assert-output name="Java">
-<![CDATA[<input type="radio" name="group" id="group0" value="0" /> Java]]>					
-		</assert-output>
-
-		<assert-output name="C#">
-<![CDATA[<input type="radio" name="group" id="group1" value="1" /> C#]]>					
-		</assert-output>
-			
-		<assert-output name="C#">
-<![CDATA[<input type="radio" name="group" id="group2" value="2" /> Python]]>					
-		</assert-output>			
-		</request>
-		
-		<request>
-			<parameter name="service" value="direct" />
-      <parameter name="session" value="T" />
-      <parameter name="page" value="LanguageSelection" />
-      <parameter name="component" value="form" />      
-			<parameter name="formids" value="group" />
-			<parameter name="group" value="2" />
-			
-
-		<assert-output name="Selected Language">
-		Selected Language: [Language[PYTHON]]
-		</assert-output>
-		
-		<assert-output name="Java">
-<![CDATA[<input type="radio" name="group" id="group0" value="0" /> Java]]>					
-		</assert-output>
-
-		<assert-output name="C#">
-<![CDATA[<input type="radio" name="group" id="group1" value="1" /> C#]]>					
-		</assert-output>
-			
-		<assert-output name="C#">
-<![CDATA[<input type="radio" name="group" id="group2" checked="checked" value="2" /> Python]]>					
-		</assert-output>			
-		</request>
-			
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestRelativeAssets.xml b/tapestry/tapestry-framework/src/scripts/TestRelativeAssets.xml
deleted file mode 100644
index de8138e..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestRelativeAssets.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application" />
-  	</servlet>      
-    
- 
-	<request>
-	  	<parameter name="service" value="page" />
-      <parameter name="page" value="RelativeAssets" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Relative Assets</title>
-]]>		
-		</assert-output>
-		
-		<assert-output name="Private Asset">
-<![CDATA[
-/mock/app?service=asset&amp;path=%2Forg%2Fapache%2Ftapestry%2Fjunit%2Fmock%2Fapp%2Fimages%2FPrivateAsset.gif		
-]]>
-		</assert-output>
-		
-		<assert-output name="Context Asset">
-/mock/images/ContextAsset.gif
-		</assert-output>		
-	</request>
-	
-			 	 	 
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestSelectOption.xml b/tapestry/tapestry-framework/src/scripts/TestSelectOption.xml
deleted file mode 100644
index 73b8cf5..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestSelectOption.xml
+++ /dev/null
@@ -1,358 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="selopt" root="context11" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet" />
-
-	<request>
-	
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Form">
-<![CDATA[
-<form method="post" action="/selopt/app" id="Form">
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[			
-<input type="hidden" (name="(.*?)" value="(.*?)") />
-]]>
-			<match>name="formids" value="Select"</match>
-      <match>name="component" value="$Form"</match>
-      <match>name="page" value="Home"</match>
-			<match>name="service" value="direct"</match>
-      <match>name="submitmode" value=""</match>
-			<match>name="submitname" value=""</match>			
-		</assert-output-matches>
-
-		<assert-regexp name="Select Tag">
-<![CDATA[
-<select name="Select" id="Select">\s+<option/>
-]]>
-		</assert-regexp>
-
-		<assert-output-matches name="Option Tags">
-<![CDATA[
-<option value="(.*?)">(.*?)</option>
-]]>
-			<match><![CDATA[<option value="0">Animal</option>]]></match>
-			<match><![CDATA[<option value="1">Vegetable</option>]]></match>			
-			<match><![CDATA[<option value="2">Mineral (or unknown)</option>]]></match>
-		</assert-output-matches>
-		
-	</request>
-	
-	<!-- Submit the form, and specify nothing. -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$Form" />
-		<parameter name="formids" value="Select" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Result</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Selections">
-Selections: none.
-		</assert-output>
-			
-	</request>
-	
-	<!-- Select one of the items. -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$Form" />
-		<parameter name="formids" value="Select" />
-		<parameter name="Select" value="1" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Result</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Selections">
-Selections: vegetable.
-		</assert-output>
-			
-	</request>
-			
-
-	<!-- Go to the page with the persistent multiple options. -->
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="Two" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Form">
-<![CDATA[
-<form method="post" action="/selopt/app" id="Form">
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[			
-<input type="hidden" (name="(.*?)" value="(.*?)") />
-]]>
-			<match>name="formids" value="Select"</match>
-      <match>name="component" value="$Form"</match>
-      <match>name="page" value="Two"</match>
-			<match>name="service" value="direct"</match>
-      <match>name="submitmode" value=""</match>
-			<match>name="submitname" value=""</match>
-		</assert-output-matches>
-
-		<assert-output name="Select Tag">
-<![CDATA[
-<select name="Select" multiple="multiple" id="Select">
-]]>
-		</assert-output>
-
-		<assert-output-matches name="Option Tags">
-<![CDATA[
-<option value="(.*?)"(.*?)>(.*?)</option>
-]]>
-			<match><![CDATA[<option value="0">Animal</option>]]></match>
-			<match><![CDATA[<option value="1">Vegetable</option>]]></match>			
-			<match><![CDATA[<option value="2">Mineral (or unknown)</option>]]></match>
-		</assert-output-matches>
-		
-	</request>
-
-	
-	
-	<!-- Select two items. -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Two" />
-    <parameter name="component" value="$Form" />
-		<parameter name="formids" value="Select" />
-		<parameter name="Select">
-				<value>1</value>
-				<value>2</value>
-		</parameter>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Result</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Selections">
-Selections: vegetable, mineral.
-		</assert-output>
-			
-	</request>		
-	
-	<!-- Back to the page, see if the tags reflect right values. -->
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="Two" />
-		
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>		
-		</assert-output>
-				
-		<assert-output-matches name="Option Tags">
-<![CDATA[
-<option value="(.*?)"(.*?)>(.*?)</option>
-]]>
-			<match><![CDATA[<option value="0">Animal</option>]]></match>
-			<match><![CDATA[<option value="1" selected="selected">Vegetable</option>]]></match>			
-			<match><![CDATA[<option value="2" selected="selected">Mineral (or unknown)</option>]]></match>
-		</assert-output-matches>		
-	</request>
-
-	<!-- Next up, a page that has a disabled Select. -->
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="Three" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Three</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Form">
-<![CDATA[
-<form method="post" action="/selopt/app" id="Form">
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[			
-<input type="hidden" (name="(.*?)" value="(.*?)") />
-]]>
-
-			<!-- Remember the persistent properties?  Those made the app go stateful. -->
-
-			<match>name="formids" value="Select"</match>
-      <match>name="component" value="$Form"</match>
-      <match>name="page" value="Three"</match>
-			<match>name="service" value="direct"</match>
-      <match>name="session" value="T"</match>
-      <match>name="submitmode" value=""</match>
-			<match>name="submitname" value=""</match>
-		</assert-output-matches>
-
-		<assert-output name="Select Tag">
-<![CDATA[
-<select name="Select" disabled="disabled" id="Select">
-]]>
-		</assert-output>
-
-		<assert-output-matches name="Option Tags">
-<![CDATA[
-<option value="(.*?)"(.*?)>(.*?)</option>
-]]>
-			<match><![CDATA[<option value="0">Animal</option>]]></match>
-			<match><![CDATA[<option value="1">Vegetable</option>]]></match>			
-			<match><![CDATA[<option value="2">Mineral (or unknown)</option>]]></match>
-		</assert-output-matches>
-		
-	</request>	
-	
-	<!-- Pretend to be a browser that ignores the disabled flag on the select.
-		 Check that the values are ignored. -->
-		 
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="session" value="T" />
-    <parameter name="page" value="Three" />
-    <parameter name="component" value="$Form" />
-		<parameter name="formids" value="Select" />
-		<parameter name="Select" value="1" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Result</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Selections">
-Selections: none.
-		</assert-output>
-			
-	</request>
-	
-	<!-- Page Four has a second form that uses the action service.   We check
-		 that the form containing the Select ignores the request property. -->
-		 
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="Four" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Four</title>
-]]>		
-		</assert-output>
-		
-		<assert-output name="Second Form">
-<![CDATA[
-<form method="post" action="/selopt/app" id="Form_0" direct="false">
-]]>	
-		</assert-output>
-	</request>
-	
-	<!-- Submit the second form. -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="direct" value="1" />
-    <parameter name="session" value="1" />
-    <parameter name="page" value="Four" />
-    <parameter name="component" value="$Form_0" />
-		<parameter name="formids" value="" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Result</title>
-]]>				
-		</assert-output>
-		
-		<assert-output name="Message">
-Second form triggered.
-		</assert-output>
-		
-	</request>
-	
-	<!-- And on to the degenerate cases. -->
-	
-	<!-- #1 Select not in a Form (removed) -->
-	
-	<!-- #2 Nested Selects. -->
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="Six" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>				
-		</assert-output>
-			
-		<assert-output name="Message">
-		Select components may not be nested.
-		</assert-output>
-	</request>	
-	
-	<!-- #3:  Option not in a Select -->
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="Seven" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>				
-		</assert-output>
-			
-		<assert-output name="Message">
-		Option component must be contained within a Select.
-		</assert-output>
-	</request>		
-	
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestShellAndRelation.xml b/tapestry/tapestry-framework/src/scripts/TestShellAndRelation.xml
deleted file mode 100644
index cf4b0aa..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestShellAndRelation.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application" />
-  	</servlet>      
-    
-    <!-- Check that Relation component correctly adds a stylesheet in head. -->    	
-
-	<request>
-	  	<parameter name="service" value="page" />
-      <parameter name="page" value="Styled" />
-		
-		<assert-output name="Added stylesheet">
-<![CDATA[		
-<link rel="stylesheet" type="text/css" href="dummy.css" />
-]]>
-		</assert-output>
-		
-		<assert-output name="Inline styles">
-<![CDATA[		
-<style type="text/css" media="all">
-a {background:yellow;}
-</style>
-]]>
-		</assert-output>
-
-		<assert-no-output name="Drop style if no body">
-<![CDATA[
-<style type="text/css" media="unknown"></style>
-]]>
-		</assert-no-output>
-
-    </request>
-			 	 	 
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestSimple.xml b/tapestry/tapestry-framework/src/scripts/TestSimple.xml
deleted file mode 100644
index 71551ed..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestSimple.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="junit" />
-
-    <servlet name="simple" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/simple/Simple.application" />
-      <init-parameter name="org.apache.tapestry.servlet-path" value="/simple" />
-  	</servlet>
-  	
-  	<request>
-  	
-  	  	
-  	  <assert-output name="Insert render">
-The start of the JUnit test suite: JUnit Simple Application.
-  	  </assert-output>
-  	  
-  	  <assert-output-matches name="Page structure" subgroup="1">
-<![CDATA[
-<(/?\w+)(\s*\w+=".*")*\s*/?>
-]]>
-		<match>html</match>
-		<match>head</match>
-		<match>meta</match>
-		<match>title</match>
-		<match>/title</match>
-        <match>script</match>
-        <match>/script</match>
-        <match>script</match>
-        <match>/script</match>
-        <match>script</match>
-        <match>/script</match>
-        <match>script</match>
-        <match>/script</match>
-        <match>script</match>
-        <match>/script</match>
-        <match>/head</match>
-		<match>body</match>	
-		<match>br</match>	
-		<match>a</match>
-		<match>/a</match>
-		<match>/body</match>
-		<match>/html</match>		
-	  </assert-output-matches>
-  	  	  
-  	  <assert-output name="Shell DOCTYPE render">
-<![CDATA[    	  
-  	  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-]]>  	  
-  	  </assert-output>
-  	  
- 
-  	  <assert-output name="Shell title render">
-<![CDATA[    	  
-  	  <title>JUnit Simple Home Page</title>
-]]>  	  
-  	  </assert-output>
-  	  
-  
-  	 <assert-output name="Link to page Two">
-<![CDATA[
-	<a id="link" href="/junit/simple?page=Two&amp;service=page">to page Two</a>
-]]>
-  	 </assert-output>
-  
-  	  <assert name="Session not created">
-  	  request.session == null
-  	  </assert>
-  	  
-  	</request>
-  	
-<!-- Request #2 simulates the user clicking the PageLink URL on the Home page. -->
-
-  <request>
-  	<parameter name="service" value="page" />
-    <parameter name="page" value="Two" />	
-  	
-  	<assert-output name="Page Two Title">
-<![CDATA[
-	<title>Page Two</title>
-]]>
-	</assert-output>
-	
-	<assert-output name="Page Two Shell DOCTYPE render">
-<![CDATA[    	  
-	<!DOCTYPE math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd">
-]]>  	  
-	</assert-output>
-
-	<assert-regexp name="Page Two: No message, yet">
-<![CDATA[
-	<body(\s*\w+=".*")*\s*>\s*<p>This page
-]]>
-	</assert-regexp>
-	
-	<assert-output name="Page Two: DirectLink">
-<![CDATA[
-	DirectLink: <a id="link" href="/junit/simple?component=link&amp;page=Two&amp;service=direct">click it</a>
-]]>	
-	</assert-output>	
-
-	
-  </request>
-  
-<!-- Request #3: Simulate clicking the DirectLink. -->
-  
-  <request>
-  	<parameter name="service" value="direct" />
-    <parameter name="page" value="Two" />
-    <parameter name="component" value="link" />	
-  	
-	<assert-regexp name="Third request, message displayed">
-<![CDATA[
-	<body(\s*\w+=".*")*\s*>\s*Note: You clicked the link!\s*<p>This page
-]]>
-	</assert-regexp>	
-
-  </request>
-		
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestStrings.xml b/tapestry/tapestry-framework/src/scripts/TestStrings.xml
deleted file mode 100644
index 5b0f3bd..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestStrings.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" />
-    
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application" />
-  	</servlet>  	
-  	
-  	     
-  	<request>
-  		<parameter name="service" value="page" />
-      <parameter name="page" value="Strings" />
-  		
-	
-		<assert-output name="Normal">
-<![CDATA[
-Normal: &lt;b&gt;Important Message&lt;/b&gt;
-]]>	
-		</assert-output>
-		  	
-		<assert-output name="Raw">
-<![CDATA[
-Raw: <b>Important Message</b>
-]]>	
-		</assert-output>
-	
-		<assert-output name="Span">
-<![CDATA[
-Style: <span class="custom"><b>Important Message</b></span>
-]]>	
-		</assert-output>
-	
-        <assert-output name="Whitespace">
-<![CDATA[
-Whitespace: Hello World
-]]> 
-        </assert-output>
-    
-	</request>
-		  	
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestTemplateEncoding.xml b/tapestry/tapestry-framework/src/scripts/TestTemplateEncoding.xml
deleted file mode 100644
index 8c5c211..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestTemplateEncoding.xml
+++ /dev/null
@@ -1,229 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c28" root="context28" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet" />
-
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sfr</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-		<assert-output name="Language Name">
-Fran&#231;ais
-		</assert-output>
-
-		<assert-output name="External Link">
-<![CDATA[
-<a id="ExternalLink" href="/c28/app?page=Two&amp;service=external&amp;sp=SFran%C3%A7ais">
-]]>
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sfr_FR</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-Fran&#231;ais
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sbg</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-&#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080;
-		</assert-output>
-
-		<assert-output name="Language Word">
-&#1045;&#1079;&#1080;&#1082;
-		</assert-output>
-	</request>
-	
-
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sbg_BG</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-&#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080;
-		</assert-output>
-
-		<assert-output name="Language Word">
-&#1045;&#1079;&#1080;&#1082;
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sde</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-<![CDATA[
-Default
-]]>
-		</assert-output>
-        
-		<assert-output name="Language Word">
-<![CDATA[
-sprache
-]]>
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sde_DE</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-<![CDATA[
-Default
-]]>
-		</assert-output>
-        
-		<assert-output name="Language Word">
-<![CDATA[
-sprache
-]]>
-		</assert-output>
-	</request>
-
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Szh_TW</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-<![CDATA[
-Default
-]]>
-		</assert-output>
-        
-		<assert-output name="Language Word">
-&#35486;&#35328;
-		</assert-output>
-	</request>
-    
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Szh</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-<![CDATA[
-Default
-]]>
-		</assert-output>
-        
-		<assert-output name="Language Word">
-&#35821;&#35328;
-		</assert-output>
-	</request>
-    
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestTemplateExpr.xml b/tapestry/tapestry-framework/src/scripts/TestTemplateExpr.xml
deleted file mode 100644
index cf3d87c..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestTemplateExpr.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application" />
-  	</servlet>
-       
-    <request>
-    	<parameter name="service" value="page" />
-      <parameter name="page" value="TemplateExpr" />
- 	
-	  	<assert-output name="Valid use of template expression">
-<![CDATA[
-Application Name: JUnit Mock Application	
-]]>
-		</assert-output> 	
-		
-	  	<assert-output name="Specifying informal parameters">
-<![CDATA[
-Second example: <span class="styleClass" id="insertAppName2">JUnit Mock Application</span>
-]]>
-		</assert-output> 	
-	</request>
-			
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="TemplateExprConflict" />
-		
-	  	<assert-output name="Page Title">
-<![CDATA[
-	<title>Exception</title>
-]]>
-		</assert-output>	
-	
-		<assert-output name="Error Message">
-A binding for parameter 'value' of component TemplateExprConflict/insertApplicationName in the template for TemplateExprConflict conflicts with an existing binding in the specification.
-		</assert-output>	
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="TemplateExprInformal" />
-		
-	  	<assert-output name="Page Title">
-<![CDATA[
-	<title>Exception</title>
-]]>
-		</assert-output>	
-	
-		<assert-output name="Error Message">
-The template for TemplateExprInformal contains a binding for parameter 'informal' of component TemplateExprInformal/block, which does not allow informal parameters.      
-		</assert-output>	
-		
-	</request>	
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="TemplateExprReserved" />
-		
-	  	<assert-output name="Page Title">
-<![CDATA[
-	<title>Exception</title>
-]]>
-		</assert-output>	
-	
-		<assert-output name="Error Message">
-The template for TemplateExprReserved contains a binding for parameter 'href' of component TemplateExprReserved/link, which is a reserved parameter name.
-		</assert-output>	
-		
-	</request>	
-</mock-test>
-    	
diff --git a/tapestry/tapestry-framework/src/scripts/TestTemplateExtension.xml b/tapestry/tapestry-framework/src/scripts/TestTemplateExtension.xml
deleted file mode 100644
index f791fbd..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestTemplateExtension.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c8" root="context8" />
-
-  	<servlet name="ext" class="org.apache.tapestry.ApplicationServlet" />
-  	
-
-	<request>
-  	  	  	
-		<assert-output name="Home Page Content">		
-This is the Home page, with template Home.thtml.
-		</assert-output>
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="Two" />
-		
-		<assert-output name="Page Two Content">		
-This is the Two page, with template Two.phtml.
-		</assert-output>
-	</request>  	  
-		  	
-
- </mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestUpload.xml b/tapestry/tapestry-framework/src/scripts/TestUpload.xml
deleted file mode 100644
index 12908bf..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestUpload.xml
+++ /dev/null
@@ -1,224 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c19" root="context19" />
-    
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet" />
-
-	<request>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		
-		<assert-output name="Upload Field">
-<![CDATA[
-<input type="file" name="Upload" id="Upload" />
-]]>	
-		</assert-output>
-	</request>
-
-	<!-- The upload itself. -->
-	
-	<request 
-		content-type="multipart/form-data; boundary=---------------------------7d33212e1c03e2" 
-		content-path="context19/upload-message.request">
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Content Type">
-		Content Type: [text/plain]
-		</assert-output>
-		
-		<assert-output name="Path">
-		Path: [context19/message.txt]
-		</assert-output>
-		
-		<assert-output name="Name">
-		Name: [message.txt]
-		</assert-output>
-		
-		<assert-output name="Size">
-		Size: [157]
-		</assert-output>		
-		
-		<assert-output name="In Memory">
-		In Memory: [true]
-		</assert-output>	
-		
-		<assert-output name="Match Confirmation">
-		Contents match.
-		</assert-output>
-		
-	</request>
-	
-	<request 
-		content-type="multipart/form-data; boundary=---------------------------xyzzyx" 
-		content-path="context19/upload-long.request">
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Content Type">
-		Content Type: [text/html]
-		</assert-output>
-		
-		<assert-output name="Path">
-		Path: [context19/long.html]
-		</assert-output>
-		
-		<assert-output name="Name">
-		Name: [long.html]
-		</assert-output>
-		
-		<assert-output name="Size">
-		Size: [5207]
-		</assert-output>		
-		
-		<assert-output name="In Memory">
-		In Memory: [false]
-		</assert-output>	
-		
-		<assert-output name="Match Confirmation">
-		Contents match.
-		</assert-output>
-		
-	</request>
-	
-	<!-- IMPORTANT NOTE: commons-fileupload-1.1 has a bug that converts file path and
-	     file name to lowercase. This is accounted for in the next test: the name
-	     of the file should be Tapestry-Banner.png.
-	     When this bug is fixed (fileupload 1.2), this test should be updated accordingly
-	  -->
-	<request 
-		content-type="multipart/form-data; boundary=---------------------------9d33212e1c03e3" 
-		content-path="context19/upload-image.request">
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Content Type">
-		Content Type: [image/x-png]
-		</assert-output>
-		
-		<assert-output name="Path">
-		Path: [context19/Tapestry-Banner.png]
-		</assert-output>
-		
-		<assert-output name="Name">
-		Name: [Tapestry-Banner.png]
-		</assert-output>
-		
-		<assert-output name="Match Confirmation">
-		Contents match.
-		</assert-output>
-		
-	</request>
-	
-	<!-- Test a disabled Upload component. -->
-	
-	<request>
-		<parameter name="service" value="direct" />
-    <parameter name="page" value="Home" />
-    <parameter name="component" value="$DirectLink" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		
-		<assert-output name="Upload Field">
-<![CDATA[
-<input type="file" name="Upload" disabled="disabled" id="Upload" />
-]]>	
-		</assert-output>			
-	</request>
-	
-	<!-- Do the upload with the Upload component disabled.  -->
-	
-	<request 
-		content-type="multipart/form-data; boundary=---------------------------7d33212e1c03e2" 
-		content-path="context19/upload-message.request">
-			
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Three</title>
-]]>
-</assert-output>
-
-	</request>
-	
-	<!-- Now test some stuff in multipart decoder that detects multiple values for the
-		 same element name. -->
-		 
-	<request>
-		<parameter name="service" value="page" />
-    <parameter name="page" value="Four" />
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Four</title>
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Options">
-<![CDATA[
-<option.*?/option>
-]]>	
-			<match><![CDATA[<option value="0">Lights on</option>]]></match>
-			<match><![CDATA[<option value="1">Nobody Home</option>]]></match>			
-		</assert-output-matches>	
-	</request>
-	
-	<!-- Do the form submission -->
-	<request 
-		content-type="multipart/form-data; boundary=---------------------------eldorado" 
-		content-path="context19/form-four.request">
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Four</title>
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Options">
-<![CDATA[
-<option.*?/option>
-]]>	
-			<match><![CDATA[<option value="0" selected="selected">Lights on</option>]]></match>
-			<match><![CDATA[<option value="1" selected="selected">Nobody Home</option>]]></match>			
-		</assert-output-matches>
-		
-	</request>	
-	
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestValidate.xml b/tapestry/tapestry-framework/src/scripts/TestValidate.xml
deleted file mode 100644
index 925aad5..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestValidate.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" />
-    
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application" />
-  	</servlet> 
-  	  	
-	<request>
-  		<parameter name="service" value="page" />
-      <parameter name="page" value="Protected" />
-  		
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>Guard</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Link URL">
-<![CDATA[
-href="/mock/app?component=link&amp;page=Guard&amp;service=direct&amp;session=T"
-]]>
-		</assert-output>
-		
-		<assert-output name="Callback">
-<![CDATA[
-Callback: PageCallback[Protected]
-]]>		
-		</assert-output>		
-  	</request>
-  	
-  	<!-- Simulate clicking the link, which should send the
-  	     user to the Protected page.  -->
-  	     
-  	<request>
-  		<parameter name="service" value="direct" />
-      <parameter name="session" value="T" />
-      <parameter name="page" value="Guard" />
-      <parameter name="component" value="link" />
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>Protected</title>
-]]>
-		</assert-output>
-		
-	</request>
-	
-
-	<!-- Now, try the original request again, now that the Guard
-		 page has had its say. -->
-
-	<request>
-  		<parameter name="service" value="page" />
-      <parameter name="page" value="Protected" />
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>Protected</title>
-]]>
-		</assert-output>
-				
-	</request>
-	  	
-</mock-test>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/scripts/TestWMLComponents.xml b/tapestry/tapestry-framework/src/scripts/TestWMLComponents.xml
deleted file mode 100644
index 770cd20..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestWMLComponents.xml
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" root="context51" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/wml/Mock.application" />
-      <init-parameter
-        name="org.apache.tapestry.application-mode" value="wml" />
-  	</servlet>
-
-    <request>
-        <parameter name="service" value="home" />
-
-        <assert-output name="Do component">
-            <![CDATA[
-            <do type="prev" label="Prev">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Card Ids" subgroup="1">
-            <![CDATA[
-            <card .*?id="(.*?)".*?>
-            ]]>
-            <match>logo</match>
-            <match>main</match>
-            <match>anotherCard</match>
-        </assert-output-matches>
-
-        <assert-output name="Timer">
-            <![CDATA[
-            <timer name="timer" value="20" />
-            ]]>
-        </assert-output>
-
-        <assert-output name="Image URL">
-            <![CDATA[
-            <img src="/mock/images/image.wbmp" alt="Image" align="middle" />
-            ]]>
-        </assert-output>
-
-        <assert-output name="Onevent component">
-            <![CDATA[
-            <onevent type="onenterforward">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Setvat component">
-            <![CDATA[
-            <setvar name="u" value="newbie" />
-            ]]>
-        </assert-output>
-
-        <assert-output name="Setvat component">
-            <![CDATA[
-            <setvar name="l" value="" />
-            ]]>
-        </assert-output>
-
-        <assert-output name="ServiceLink component">
-            <![CDATA[
-            <go id="ServiceLink" href="/mock/app?service=home" />
-            ]]>
-        </assert-output>
-
-        <!--  PropertySelection -->
-        <assert-output name="Select">
-            <![CDATA[
-            <select name="l">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Option values" subgroup="1">
-            <![CDATA[
-            <option value="(.*?)">
-            ]]>
-            <match>0</match>
-            <match>1</match>
-            <match>2</match>
-        </assert-output-matches>
-
-        <assert-output-matches name="Option bodies" subgroup="1">
-            <![CDATA[
-            <option .*?>(.*?)</option>
-            ]]>
-            <match>option_one</match>
-            <match>option_two</match>
-            <match>option_three</match>
-        </assert-output-matches>
-
-        <assert-output-matches name="Go Parameter Names" subgroup="1">
-            <![CDATA[
-            <postfield name="(.*?)".*?/>
-            ]]>
-            <match>u</match>
-            <match>formids</match>
-            <match>component</match>
-            <match>page</match>
-            <match>service</match>
-            <match>submitmode</match>       
-            <match>submitname</match>
-            <match>l</match>
-        </assert-output-matches>
-
-        <assert-output-matches name="Go Parameter Values" subgroup="1">
-            <![CDATA[
-            <postfield .*?value="(.*?)" />
-            ]]>
-            <match>u,l</match>
-            <match>0</match>
-            <match>go</match>
-            <match>Home</match>
-            <match>direct</match>
-            <match></match>
-            <match>$(username)</match>
-            <match>$(l)</match>
-        </assert-output-matches>
-
-    </request>
-
-    <request>
-        <parameter name="service" value="direct" />
-        <parameter name="page" value="Home" />
-        <parameter name="direct" value="0" />
-        <parameter name="component" value="go" />
-        <parameter name="formids" value="u,l" />
-        <parameter name="reservedids" value="direct" />
-        <parameter name="u" value="newbie" />
-        <parameter name="l" value="0" />
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card title="Result" id="Result">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Result Values" subgroup="1">
-            <![CDATA[
-            <strong>(.*?)</strong>
-            ]]>
-            <match>newbie</match>
-            <match>option_one</match>
-        </assert-output-matches>
-
-    </request>
-
-</mock-test>
-
diff --git a/tapestry/tapestry-framework/src/scripts/TestWMLContentType.xml b/tapestry/tapestry-framework/src/scripts/TestWMLContentType.xml
deleted file mode 100644
index a93c325..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestWMLContentType.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" root="context51" />
-
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-        <init-parameter
-            name="org.apache.tapestry.application-specification"
-            value="/org/apache/tapestry/junit/mock/wml/Mock.application" />
-        <init-parameter
-            name="org.apache.tapestry.application-mode" value="wml" />            
-    </servlet>
-
-    <request>
-        <parameter name="service" value="page" />
-        <parameter name="page" value="ContentType" />
-
-        <assert-output-stream name="Image Content"
-                content-type="text/vnd.wap.wml;charset=UTF-8"
-                path="src/test/org/apache/tapestry/junit/mock/wml/ContentType.wml" />
-
-    </request>
-
-</mock-test>
-
diff --git a/tapestry/tapestry-framework/src/scripts/TestWMLFormComponents.xml b/tapestry/tapestry-framework/src/scripts/TestWMLFormComponents.xml
deleted file mode 100644
index bab14e4..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestWMLFormComponents.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" root="context51" />
-
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-        <init-parameter
-            name="org.apache.tapestry.application-specification"
-            value="/org/apache/tapestry/junit/mock/wml/Mock.application" />
-        <init-parameter
-            name="org.apache.tapestry.application-mode" value="wml" />                 
-    </servlet>
-
-    <request>
-        <parameter name="service" value="page" />
-        <parameter name="page" value="Input" />
-
-        <assert-output name="Input component">
-            <![CDATA[
-            <input type="text" name="fname" title="FName" value="Ronnie" />
-            ]]>
-        </assert-output>
-
-        <assert-output name="Input component">
-            <![CDATA[
-            <input type="text" name="lname" title="LName" />
-            ]]>
-        </assert-output>
-
-    </request>
-
-    <request>
-        <parameter name="service" value="page" />
-        <parameter name="page" value="NoGo" />
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="Exception" title="Exception">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Exception Name">
-        org.apache.hivemind.ApplicationRuntimeException
-        </assert-output>
-
-        <assert-output name="Exception Messge">
-		Component NoGo/orphan must be enclosed by a form, but no Form component has been stored into the request cycle.
-        </assert-output>
-
-    </request>
-
-    <request>
-        <parameter name="service" value="direct" />
-        <parameter name="page" value="Rewind" />
-        <parameter name="direct" value="1" />
-        <parameter name="component" value="h" />
-        <parameter name="formids" value="v" />
-        <parameter name="reservedids" value="direct" />
-        <parameter name="v" value="VVV" />
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card title="Result" id="Result">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Result Values" subgroup="1">
-            <![CDATA[
-            <strong>(.*?)</strong>
-            ]]>
-            <match>VVV</match>
-            <match>VVV</match>
-        </assert-output-matches>
-
-    </request>
-
-    <request>
-        <parameter name="service" value="direct" />
-        <parameter name="page" value="Rewind" />
-        <parameter name="component" value="g" />
-
-        <parameter name="formids" value="v" />
-        <parameter name="u" value="VVV" />
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="StaleLink" title="StaleLink">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Cause">
-        Rewind of form Rewind/g expected allocated id #1 to be 'v', but was 'u' (requested by component Rewind/u).
-        </assert-output>
-
-    </request>
-
-</mock-test>
-
diff --git a/tapestry/tapestry-framework/src/scripts/TestWMLNestedCard.xml b/tapestry/tapestry-framework/src/scripts/TestWMLNestedCard.xml
deleted file mode 100644
index c71f046..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestWMLNestedCard.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" root="context51" />
-
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-        <init-parameter
-            name="org.apache.tapestry.application-specification"
-            value="/org/apache/tapestry/junit/mock/wml/Mock.application" />
-        <init-parameter
-            name="org.apache.tapestry.application-mode" value="wml" />                 
-    </servlet>
-
-    <request>
-        <parameter name="service" value="page" />
-        <parameter name="page" value="NestedCard" />
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="Exception" title="Exception">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Exception Name">
-        org.apache.hivemind.ApplicationRuntimeException
-        </assert-output>
-
-        <assert-output name="Exception Messge">
-        Cards may not be nested.
-        </assert-output>
-
-        <assert-output name="Component Id">
-        [NestedCard/nestedCard]
-        </assert-output>
-
-    </request>
-
-</mock-test>
-
diff --git a/tapestry/tapestry-framework/src/scripts/TestWMLSelect.xml b/tapestry/tapestry-framework/src/scripts/TestWMLSelect.xml
deleted file mode 100644
index bd25559..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestWMLSelect.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" root="context51" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/wml/Mock.application" />
-      <init-parameter
-          name="org.apache.tapestry.application-mode" value="wml" />             
-  	</servlet>
-
-    <request>
-        <parameter name="service" value="page" />
-        <parameter name="page" value="NestedSelect" />
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="Exception" title="Exception">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Exception Name">
-        org.apache.hivemind.ApplicationRuntimeException
-        </assert-output>
-
-        <assert-output name="Exception Messge">
-        Select components may not be nested.
-        </assert-output>
-
-        <assert-output name="Component Id">
-        [NestedSelect/nestedSelect]
-        </assert-output>
-    </request>
-
-    <request>
-        <parameter name="service" value="page" />
-        <parameter name="page" value="Select" />
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="Select">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Onpick values" subgroup="1">
-            <![CDATA[
-            <option .*?onpick="(.*?)".*?>
-            ]]>
-            <match>#sexcard</match>
-            <match>#incomecard</match>
-            <match>#hobbiescard</match>
-        </assert-output-matches>
-    </request>
-
-    <request>
-
-        <parameter name="service" value="direct" />
-        <parameter name="direct" value="0" />
-        <parameter name="page" value="Select" />
-        <parameter name="component" value="go" />
-
-        <parameter name="formids" value="sex,income,hobbies" />
-        <parameter name="sex" value="Male" />
-        <parameter name="income" value="Over $100K" />
-        <parameter name="hobbies" value="Skiing,Book,Traveling" />
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card title="Result" id="Result">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Result Values" subgroup="1">
-            <![CDATA[
-            <strong>(.*?)</strong>
-            ]]>
-            <match>Male Over $$100K</match>
-            <match>Skiing,Book,Traveling</match>
-        </assert-output-matches>
-
-    </request>
-
-</mock-test>
diff --git a/tapestry/tapestry-framework/src/scripts/TestWMLStaleSession.xml b/tapestry/tapestry-framework/src/scripts/TestWMLStaleSession.xml
deleted file mode 100644
index 0c0bd55..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestWMLStaleSession.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" root="context51" />
-
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-        <init-parameter
-            name="org.apache.tapestry.application-specification"
-            value="/org/apache/tapestry/junit/mock/wml/Mock.application" />
-        <init-parameter
-            name="org.apache.tapestry.application-mode" value="wml" />                 
-    </servlet>
-
-    <request>
-        <parameter name="service" value="page" />
-        <parameter name="page" value="Stale" />
- 
-        <assert-output name="Do component">
-            <![CDATA[
-            <do type="prev">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="StaleSession">
-            ]]>
-        </assert-output>
-
-        <assert-output name="DirectLink URL">
-            <![CDATA[
-            href="/mock/app?component=directLink&amp;page=Stale&amp;service=direct"
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Go Parameter Names" subgroup="1">
-            <![CDATA[
-            <postfield name="(.*?)".*?/>
-            ]]>
-            <match>formids</match>
-            <match>component</match>
-            <match>page</match>
-            <match>service</match>
-            <match>submitmode</match>
-            <match>submitname</match>
-        </assert-output-matches>
-
-        <assert-output-matches name="Go Parameter Values" subgroup="1">
-            <![CDATA[
-            <postfield .*?value="(.*?)" />
-            ]]>
-            <match></match>
-            <match>go</match>
-            <match>Stale</match>
-            <match>direct</match>
-            <match></match>
-            <match></match>
-        </assert-output-matches>
-
-    </request>
-
-    <request>
-        <parameter name="service" value="direct" />
-        <parameter name="session" value="T" />
-        <parameter name="page" value="Stale" />
-        <parameter name="component" value="directLink" />
-
-
-        <assert-output name="StaleSession (DirectLink)">
-            <![CDATA[
-            <card id="StaleSession" title="StaleSession">
-            ]]>
-        </assert-output>
-    </request>
-
-    <request>
-        <parameter name="service" value="direct" />
-        <parameter name="session" value="T" />
-        <parameter name="page" value="Stale" />
-        <parameter name="component" value="go" />
-
-        <parameter name="formids" value="" />
-
-        <assert-output name="StaleSession (Go)">
-            <![CDATA[
-            <card id="StaleSession" title="StaleSession">
-            ]]>
-        </assert-output>
-    </request>
-
-</mock-test>
-
diff --git a/tapestry/tapestry-framework/src/scripts/TestWMLTimer.xml b/tapestry/tapestry-framework/src/scripts/TestWMLTimer.xml
deleted file mode 100644
index 9b9a6be..0000000
--- a/tapestry/tapestry-framework/src/scripts/TestWMLTimer.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock" root="context51" />
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/wml/Mock.application" />
-      <init-parameter
-          name="org.apache.tapestry.application-mode" value="wml" />             
-  	</servlet>
-
-    <request>
-        <parameter name="service" value="page" />
-        <parameter name="page" value="Timer" />
-
-        <assert-output name="Timer component">
-            <![CDATA[
-            <timer name="timer_one" value="20" />
-            ]]>
-        </assert-output>
-
-        <assert-output name="Timer component">
-            <![CDATA[
-            <timer name="timer_two" value="0" />
-            ]]>
-        </assert-output>
-
-    </request>
-
-</mock-test>
diff --git a/tapestry/tapestry-framework/src/site/apt/index.apt b/tapestry/tapestry-framework/src/site/apt/index.apt
deleted file mode 100644
index 08d67cf..0000000
--- a/tapestry/tapestry-framework/src/site/apt/index.apt
+++ /dev/null
@@ -1,12 +0,0 @@
- ------
-Tapestry Framework
- ------
-Jesse Kuhnert
- ------
-15 July 2006
- ------
- 
-Tapestry Framework
-
-  This site is still in the process of being generated. Please see any of the automated build reports on 
-  the left, like JavaDocs/Clover/etc.
diff --git a/tapestry/tapestry-framework/src/site/site.xml b/tapestry/tapestry-framework/src/site/site.xml
deleted file mode 100644
index 8f126fc..0000000
--- a/tapestry/tapestry-framework/src/site/site.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<project name="Tapestry">
-    <bannerLeft>
-        <name>Tapestry Web Application Framework</name>
-        <href>http://tapestry.apache.org/</href>
-        <src>images/tapestry_banner.gif</src>
-    </bannerLeft>
-    <bannerRight>
-        <name>Apache Software Foundation</name>
-        <href>http://www.apache.org</href>
-        <src>images/asf_logo_wide.gif</src>
-    </bannerRight>
-    
-    <skin>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>maven-skin</artifactId>
-        <version>1.1</version>
-    </skin>
-    
-    <publishDate format="dd MMM yyyy" />
-    
-    <body>
-        <links>
-            <item name="Tapestry" href="http://tapestry.apache.org/" />
-            <item name="Hivemind" href="http://jakarta.apache.org/hivemind/" />
-            <item name="Apache" href="http://www.apache.org/" />
-        </links>
-        
-        <head>
-            <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
-            <script type="text/javascript">_uacct = "UA-400821-1"; urchinTracker();</script>
-            <link rel="shortcut icon" href="http://tapestry.apache.org/tapestry4.1/favicon.ico" />
-        </head>
-        
-        <menu ref="parent" />
-        
-        <menu name="Hivedoc" >
-            <item name="Index" href="/hivedoc/index.html" />
-        </menu>
-        
-        ${reports} 
-    </body>
-    
-</project>
diff --git a/tapestry/tapestry-framework/src/test-data/app1/Home.html b/tapestry/tapestry-framework/src/test-data/app1/Home.html
deleted file mode 100644
index 7b705a8..0000000
--- a/tapestry/tapestry-framework/src/test-data/app1/Home.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html jwcid="@Shell" title="In-Browser Tests">
-    <body jwcid="@Body">    
-        <ul>
-            <li><a jwcid="@PageLink" page="Tap1129">TAPESTRY-1129</a></li>
-            <li><a jwcid="@PageLink" page="Tap1141">TAPESTRY-1141</a></li>            
-        </ul>        
-    </body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/app1/Tap1129.html b/tapestry/tapestry-framework/src/test-data/app1/Tap1129.html
deleted file mode 100644
index 7770d5a..0000000
--- a/tapestry/tapestry-framework/src/test-data/app1/Tap1129.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html jwcid="@Shell" title="TAPESTRY-1129">
-    <body jwcid="@Body">    
-        <h2>AJAX page update problem in Firefox</h2>
-        <h3>textareas issue</h3>
-        
-        <a jwcid="@DirectLink" listener="listener:doRefresh" 
-           updateComponents="testme" async="ognl:true">refresh</a>
-        
-        <div jwcid="@Any" id="testme">
-            <div id="flag"><span jwcid="@Insert" value="ognl:flag"/></div>
-            <form jwcid="@Form" listener="listener:doNothing">
-                <textarea jwcid="@TextArea" value="ognl:text"/>
-            </form>            
-        </div> 
-        
-    </body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/app1/Tap1141.html b/tapestry/tapestry-framework/src/test-data/app1/Tap1141.html
deleted file mode 100644
index dfdeac9..0000000
--- a/tapestry/tapestry-framework/src/test-data/app1/Tap1141.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html jwcid="@Shell" title="TAPESTRY-1141">
-    <body jwcid="@Body">    
-        <h2>Async form fails if keyboard is used to trigger the submit...</h2>
-        <form jwcid="@Form" async="ognl:true" json="ognl:false" listener="listener:doProcess"
-              updateComponents="testme">
-            <span jwcid="@For" source="ognl:{'1','2','3'}" value="ognl:num">
-                <input jwcid="test@TextField" value="ognl:num" id="num"/>
-            </span>
-            <br />
-            <input jwcid="@Submit" value="Go!"/>
-        </form>
-        
-        <div jwcid="@Any" id="testme">[<span jwcid="@Insert" value="ognl:text"/>]</div> 
-        
-    </body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/app1/WEB-INF/test1.application b/tapestry/tapestry-framework/src/test-data/app1/WEB-INF/test1.application
deleted file mode 100644
index 0651606..0000000
--- a/tapestry/tapestry-framework/src/test-data/app1/WEB-INF/test1.application
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2006 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<application name="Testing browser specific issues">
-    
-    <meta key="org.apache.tapestry.page-class-packages" 
-    	value="org.apache.tapestry.integration.app1.pages"/>
-    <meta key="org.apache.tapestry.component-class-packages" 
-    	value="org.apache.tapestry.integration.app1.components"/>
-   
-    
-</application>	
diff --git a/tapestry/tapestry-framework/src/test-data/app1/WEB-INF/web.xml b/tapestry/tapestry-framework/src/test-data/app1/WEB-INF/web.xml
deleted file mode 100644
index 425deeb..0000000
--- a/tapestry/tapestry-framework/src/test-data/app1/WEB-INF/web.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2004, 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

-"http://java.sun.com/dtd/web-app_2_3.dtd">

-    

-<web-app>

-	<display-name>test1</display-name>

-	<description>Browser tests</description>

-	<filter>

-		<filter-name>redirect</filter-name>

-		<filter-class>org.apache.tapestry.RedirectFilter</filter-class>

-	</filter>

-	<filter-mapping>

-		<filter-name>redirect</filter-name>

-		<url-pattern>/</url-pattern>

-	</filter-mapping>

-	

-	<servlet>

-		<servlet-name>test1</servlet-name>

-		<servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>

-		<load-on-startup>0</load-on-startup>

-	</servlet>	

-	

-	<servlet-mapping>

-		<servlet-name>test1</servlet-name>

-		<url-pattern>/app</url-pattern>

-	</servlet-mapping>	

-	<session-config>

-		<session-timeout>15</session-timeout>

-	</session-config>		

-</web-app>

diff --git a/tapestry/tapestry-framework/src/test-data/conf/webdefault.xml b/tapestry/tapestry-framework/src/test-data/conf/webdefault.xml
deleted file mode 100644
index c3ccdf3..0000000
--- a/tapestry/tapestry-framework/src/test-data/conf/webdefault.xml
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>

-<!-- 

-   Copyright 2006 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<web-app 

-   xmlns="http://java.sun.com/xml/ns/j2ee" 

-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

-   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 

-   version="2.4"> 

-

-  <description>

-    Default web.xml file.  

-    This file is applied to a Web application before it's own WEB_INF/web.xml file

-  </description>

-

-

-

-  <!-- ==================================================================== -->

-  <!-- Context params to control Session Cookies                            -->

-  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

-  <!-- UNCOMMENT TO ACTIVATE

-  <context-param>

-    <param-name>org.mortbay.jetty.servlet.SessionDomain</param-name>

-    <param-value>127.0.0.1</param-value>

-  </context-param>

-

-  <context-param>

-    <param-name>org.mortbay.jetty.servlet.SessionPath</param-name>

-    <param-value>/</param-value>

-  </context-param>

-

-  <context-param>

-    <param-name>org.mortbay.jetty.servlet.MaxAge</param-name>

-    <param-value>-1</param-value>

-  </context-param>

-  -->

-

-

-

-  <!-- ==================================================================== -->

-  <!-- The default servlet.                                                 -->

-  <!-- This servlet, normally mapped to /, provides the handling for static -->

-  <!-- content, OPTIONS and TRACE methods for the context.                  -->

-  <!-- The following initParameters are supported:                          -->

-  <!--                                                                      -->

-  <!--   acceptRanges     If true, range requests and responses are         -->

-  <!--                    supported                                         -->

-  <!--                                                                      -->

-  <!--   dirAllowed       If true, directory listings are returned if no    -->

-  <!--                    welcome file is found. Else 403 Forbidden.        -->

-  <!--                                                                      -->

-  <!--   putAllowed       If true, the PUT method is allowed                -->

-  <!--                                                                      -->

-  <!--   delAllowed       If true, the DELETE method is allowed             -->

-  <!--                                                                      -->

-  <!--   redirectWelcome  If true, redirect welcome file requests           -->

-  <!--                    else use request dispatcher forwards              -->

-  <!--                                                                      -->

-  <!--   minGzipLength    If set to a positive integer, then static content -->

-  <!--                    larger than this will be served as gzip content   -->

-  <!--                    encoded if a matching resource is found ending    -->

-  <!--                    with ".gz"                                        -->

-  <!--                                                                      -->

-  <!--   resoureBase      Can be set to replace the context resource base   -->

-  <!--                                                                      -->

-  <!--   relativeResourceBase                                               -->

-  <!--                    Set with a pathname relative to the base of the   -->

-  <!--                    servlet context root. Useful for only serving     -->

-  <!--                    static content from only specific subdirectories. -->

-  <!--                                                                      -->

-  <!-- The MOVE method is allowed if PUT and DELETE are allowed             -->

-  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->

-  <servlet>

-    <servlet-name>default</servlet-name>

-    <servlet-class>org.mortbay.jetty.servlet.Default</servlet-class>

-    <init-param>

-      <param-name>acceptRanges</param-name>

-      <param-value>true</param-value>

-    </init-param>

-    <init-param>

-      <param-name>dirAllowed</param-name>

-      <param-value>true</param-value>

-    </init-param>

-    <init-param>

-      <param-name>putAllowed</param-name>

-      <param-value>false</param-value>

-    </init-param>

-    <init-param>

-      <param-name>delAllowed</param-name>

-      <param-value>false</param-value>

-    </init-param>

-    <init-param>

-      <param-name>redirectWelcome</param-name>

-      <param-value>false</param-value>

-    </init-param>

-    <init-param>

-      <param-name>minGzipLength</param-name>

-      <param-value>8192</param-value>

-    </init-param>

-    <load-on-startup>0</load-on-startup>

-  </servlet> 

-

-

-  <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

-

-  <!-- ==================================================================== -->

-  <session-config>

-    <session-timeout>30</session-timeout>

-  </session-config>

-

-

-  <!-- ==================================================================== -->

-  <welcome-file-list>

-    <welcome-file>index.html</welcome-file>

-    <welcome-file>index.htm</welcome-file>

-  </welcome-file-list>

-

-  <!-- ==================================================================== -->

-  <locale-encoding-mapping-list>

-    <locale-encoding-mapping><locale>ar</locale><encoding>ISO-8859-6</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>be</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>bg</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>ca</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>cs</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>da</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>de</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>el</locale><encoding>ISO-8859-7</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>en</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>es</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>et</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>fi</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>fr</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>hr</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>hu</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>is</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>it</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>iw</locale><encoding>ISO-8859-8</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>ja</locale><encoding>Shift_JIS</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>ko</locale><encoding>EUC-KR</encoding></locale-encoding-mapping>     

-    <locale-encoding-mapping><locale>lt</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>lv</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>mk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>nl</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>no</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>pl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>pt</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>ro</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>ru</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>sh</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>sk</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>sl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>sq</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>sr</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>sv</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>tr</locale><encoding>ISO-8859-9</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>uk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>zh</locale><encoding>GB2312</encoding></locale-encoding-mapping>

-    <locale-encoding-mapping><locale>zh_TW</locale><encoding>Big5</encoding></locale-encoding-mapping>   

-  </locale-encoding-mapping-list>

-

-  

-

-</web-app>

-

diff --git a/tapestry/tapestry-framework/src/test-data/context/ContextAssetTemplate.html b/tapestry/tapestry-framework/src/test-data/context/ContextAssetTemplate.html
deleted file mode 100644
index 8a19565..0000000
--- a/tapestry/tapestry-framework/src/test-data/context/ContextAssetTemplate.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-This page's content comes from a context asset.
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test-data/context/images/ContextAsset.gif b/tapestry/tapestry-framework/src/test-data/context/images/ContextAsset.gif
deleted file mode 100644
index 8bbac04..0000000
--- a/tapestry/tapestry-framework/src/test-data/context/images/ContextAsset.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test-data/context/images/back.png b/tapestry/tapestry-framework/src/test-data/context/images/back.png
deleted file mode 100644
index 85e0b4b..0000000
--- a/tapestry/tapestry-framework/src/test-data/context/images/back.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test-data/context/images/back_fr.png b/tapestry/tapestry-framework/src/test-data/context/images/back_fr.png
deleted file mode 100644
index 958672a..0000000
--- a/tapestry/tapestry-framework/src/test-data/context/images/back_fr.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test-data/context11/Five.html b/tapestry/tapestry-framework/src/test-data/context11/Five.html
deleted file mode 100644
index 1e8e2e6..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/Five.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-	<select jwcid="@Select">
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context11/Four.html b/tapestry/tapestry-framework/src/test-data/context11/Four.html
deleted file mode 100644
index 8acd651..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/Four.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html jwcid="@Shell" title="Four">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="listener:formSubmit">
-
-	<select jwcid="@Select">
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-</form>
-
-<form jwcid="@Form" direct="ognl:false " listener="listener:secondFormListener "/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context11/Home.html b/tapestry/tapestry-framework/src/test-data/context11/Home.html
deleted file mode 100644
index 48634ca..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/Home.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="listener:formSubmit">
-
-	<select jwcid="@Select">
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context11/README b/tapestry/tapestry-framework/src/test-data/context11/README
deleted file mode 100644
index 499c451..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/README
+++ /dev/null
@@ -1 +0,0 @@
-This context exists to test the Select and Option form components.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context11/Result.html b/tapestry/tapestry-framework/src/test-data/context11/Result.html
deleted file mode 100644
index 21541fb..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/Result.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html jwcid="@Shell" title="Result">
-<body>
-
-
-<span jwcid="@Insert" value="ognl:message">Application message.</span>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context11/Seven.html b/tapestry/tapestry-framework/src/test-data/context11/Seven.html
deleted file mode 100644
index 0797907..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/Seven.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html jwcid="@Shell" title="Seven">
-<body jwcid="@Body">
-
-<form jwcid="@Form">
-
-	<select>
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context11/Six.html b/tapestry/tapestry-framework/src/test-data/context11/Six.html
deleted file mode 100644
index eed514b..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/Six.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html jwcid="@Shell" title="Six">
-<body jwcid="@Body">
-
-<form jwcid="@Form">
-
-	<select jwcid="outer@Select">
-	<select jwcid="inner@Select">
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	</select>
-	<input type="submit" value="Go"/>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context11/Three.html b/tapestry/tapestry-framework/src/test-data/context11/Three.html
deleted file mode 100644
index 39abd9c..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/Three.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="listener:formSubmit">
-
-	<select jwcid="@Select" disabled="ognl:true">
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context11/Two.html b/tapestry/tapestry-framework/src/test-data/context11/Two.html
deleted file mode 100644
index 5211436..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/Two.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="listener:formSubmit">
-
-	<select jwcid="@Select" multiple="ognl:true">
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Four.page b/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Four.page
deleted file mode 100644
index 0e1e370..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Four.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.junit.mock.c11.Four"/>
diff --git a/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Home.page b/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Home.page
deleted file mode 100644
index 579c476..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Home.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.junit.mock.c11.SelectPage"/>
diff --git a/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Result.page b/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Result.page
deleted file mode 100644
index 2487ad3..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Result.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.junit.mock.c11.Result">
-
-	<property-specification name="message" type="java.lang.String"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Three.page b/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Three.page
deleted file mode 100644
index 579c476..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Three.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.junit.mock.c11.SelectPage"/>
diff --git a/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Two.page b/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Two.page
deleted file mode 100644
index e82a774..0000000
--- a/tapestry/tapestry-framework/src/test-data/context11/WEB-INF/Two.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.junit.mock.c11.SelectPage">
-    
-    <property name="animal" persist="session"/>
-    <property name="mineral" persist="session"/>
-    <property name="vegetable" persist="session"/>
-    
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context14/ListEdit.html b/tapestry/tapestry-framework/src/test-data/context14/ListEdit.html
deleted file mode 100644
index 7017302..0000000
--- a/tapestry/tapestry-framework/src/test-data/context14/ListEdit.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<html jwcid="@Shell" title="ListEdit">
-<body jwcid="@Body">
-
-
-<form jwcid="form@Form" listener="listener:formSubmit">
-
-<p>Enter favorite colors:</p>
-	
-<table>
-<tr jwcid="e@ListEdit" element="tr" source="ognl:sortedColorKeys" value="ognl:colorKey">
-	<th><span jwcid="@Insert" value="ognl:colorKey">Color Label</span>:</th>
-	<td>
-		<select jwcid="inputColor@PropertySelection" 
-			value="ognl:color" 
-			model="ognl:colorModel">
-		<option>Red</option> <option>Green</option> <option>Blue</option>
-		</select>
-	</td>
-</tr>	
-<tr>
-	<td><input type="submit" value="Continue"/></td>
-</tr>
-</table>	
-	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context14/ListEditArray.html b/tapestry/tapestry-framework/src/test-data/context14/ListEditArray.html
deleted file mode 100644
index 4d7369a..0000000
--- a/tapestry/tapestry-framework/src/test-data/context14/ListEditArray.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="ListEdit Array">
-<body jwcid="@Body">
-
-<span jwcid="@ListEditForm" source="ognl:items"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context14/ListEditNull.html b/tapestry/tapestry-framework/src/test-data/context14/ListEditNull.html
deleted file mode 100644
index 54c0ff1..0000000
--- a/tapestry/tapestry-framework/src/test-data/context14/ListEditNull.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="ListEdit Null">
-<body jwcid="@Body">
-
-<span jwcid="@ListEditForm" source="ognl:null"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context14/ListEditResults.html b/tapestry/tapestry-framework/src/test-data/context14/ListEditResults.html
deleted file mode 100644
index 1d5c18e..0000000
--- a/tapestry/tapestry-framework/src/test-data/context14/ListEditResults.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html jwcid="@Shell" title="ListEdit Results">
-<body jwcid="@Body">
-
-<table>
-<tr jwcid="@For" element="tr" source="ognl:sortedColorKeys" value="ognl:colorKey">
-<th><span jwcid="@Insert" value="ognl:colorKey">Color</span>:</th>
-<td><span jwcid="@Insert" value="ognl:colorName">Mauve</span></td>	
-</tr>	
-</table>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context14/README b/tapestry/tapestry-framework/src/test-data/context14/README
deleted file mode 100644
index 16f07d0..0000000
--- a/tapestry/tapestry-framework/src/test-data/context14/README
+++ /dev/null
@@ -1 +0,0 @@
-This context is used for testing Form and other form-related components.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEdit.page b/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEdit.page
deleted file mode 100644
index 401ba90..0000000
--- a/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEdit.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c14.ListEdit">
-	
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditArray.page b/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditArray.page
deleted file mode 100644
index d87b07e..0000000
--- a/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditArray.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c14.ListEditArray"/>
diff --git a/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditForm.html b/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditForm.html
deleted file mode 100644
index a2f71a0..0000000
--- a/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditForm.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-<form jwcid="@Form">
-
-<span jwcid="e@ListEdit" source="ognl:source" value="ognl:value" index="ognl:index" 
-		listener="listener:synchronizeItem">
-<br/>
-[<span jwcid="@Insert" value="ognl:value">Value</span> #<span jwcid="@Insert" value="ognl:index">0</span>]
-</span>
-
-<br/>
-Synchronized <span jwcid="@Insert" value="ognl:syncCount">0</span> times.
-	
-</form>
diff --git a/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditForm.jwc b/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditForm.jwc
deleted file mode 100644
index c74b07b..0000000
--- a/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditForm.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.junit.mock.c14.ListEditForm">
-	
-	<parameter name="source" type="java.lang.Object" required="yes" direction="in"/>
-	
-	<property-specification name="value" type="java.lang.String"/>
-	<property-specification name="index" type="int"/>
-	
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditResults.page b/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditResults.page
deleted file mode 100644
index 5010045..0000000
--- a/tapestry/tapestry-framework/src/test-data/context14/WEB-INF/ListEditResults.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c14.ListEditResults">
-	
-	<property-specification name="colorMap" type="java.util.Map"/>
-	<property-specification name="colorKey" type="java.lang.String"/>
-	
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context16/Home.html b/tapestry/tapestry-framework/src/test-data/context16/Home.html
deleted file mode 100644
index a17783d..0000000
--- a/tapestry/tapestry-framework/src/test-data/context16/Home.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Private Assets">
-<body jwcid="@Body">
-
-<img jwcid="@Image" image="asset:logo"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context16/README b/tapestry/tapestry-framework/src/test-data/context16/README
deleted file mode 100644
index d16b290..0000000
--- a/tapestry/tapestry-framework/src/test-data/context16/README
+++ /dev/null
@@ -1 +0,0 @@
-This context is used to test the download, via the external service, of private assets.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context17/Four.html b/tapestry/tapestry-framework/src/test-data/context17/Four.html
deleted file mode 100644
index ea27e97..0000000
--- a/tapestry/tapestry-framework/src/test-data/context17/Four.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Four">
-<body jwcid="@Body">
-
-<form jwcid="outer@Form">
-	<form jwcid="inner@Form"/>	
-</form>	
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context17/Home.html b/tapestry/tapestry-framework/src/test-data/context17/Home.html
deleted file mode 100644
index 422b2a8..0000000
--- a/tapestry/tapestry-framework/src/test-data/context17/Home.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="listener:formSubmit">
-Normal: <input jwcid="normal@TextField" value="ognl:normal"/>
-<br/>
-Disabled: <input jwcid="disabled@TextField" value="ognl:disabled" disabled="ognl:true"/>
-<br/>
-Hidden: <input jwcid="hidden@TextField" value="ognl:hidden" hidden="ognl:true"/>
-</form>
-
-
-<br/>
-
-<form jwcid="@Form" />
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context17/README b/tapestry/tapestry-framework/src/test-data/context17/README
deleted file mode 100644
index b0a9991..0000000
--- a/tapestry/tapestry-framework/src/test-data/context17/README
+++ /dev/null
@@ -1 +0,0 @@
-Test cases for the Form and TextField components.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context17/Three.html b/tapestry/tapestry-framework/src/test-data/context17/Three.html
deleted file mode 100644
index 9bc3899..0000000
--- a/tapestry/tapestry-framework/src/test-data/context17/Three.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body jwcid="@Body">
-
-<input jwcid="@TextField" value="ognl:visit.foo"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context17/Two.html b/tapestry/tapestry-framework/src/test-data/context17/Two.html
deleted file mode 100644
index 15912b3..0000000
--- a/tapestry/tapestry-framework/src/test-data/context17/Two.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-Normal: [<span jwcid="@Insert" value="ognl:normal"/>]
-<br/>
-Disabled: [<span jwcid="@Insert" value="ognl:disabled"/>]
-<br/>
-Hidden: [<span jwcid="@Insert" value="ognl:hidden"/>]
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context17/WEB-INF/Home.page b/tapestry/tapestry-framework/src/test-data/context17/WEB-INF/Home.page
deleted file mode 100644
index e1f6adc..0000000
--- a/tapestry/tapestry-framework/src/test-data/context17/WEB-INF/Home.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c17.Home">
-  <property-specification name="normal" type="java.lang.String"/>
-  <property-specification name="disabled" type="java.lang.String"/>
-  <property-specification name="hidden" type="java.lang.String"/>
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context17/WEB-INF/Two.page b/tapestry/tapestry-framework/src/test-data/context17/WEB-INF/Two.page
deleted file mode 100644
index 0f838b8..0000000
--- a/tapestry/tapestry-framework/src/test-data/context17/WEB-INF/Two.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c17.Two">
-  <property-specification name="normal" type="java.lang.String"/>
-  <property-specification name="disabled" type="java.lang.String"/>
-  <property-specification name="hidden" type="java.lang.String"/>
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context18/Home.html b/tapestry/tapestry-framework/src/test-data/context18/Home.html
deleted file mode 100644
index aecd1b3..0000000
--- a/tapestry/tapestry-framework/src/test-data/context18/Home.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<form jwcid="@Form">
-	
-<span jwcid="@RadioGroup" selected="ognl:size" disabled="ognl:groupDisabled">
-	<input type="radio" jwcid="@Radio" value="ognl:10"/> Small
-	<br/>
-	<input type="radio" jwcid="@Radio" value="ognl:20"/> Medium
-	<br/>
-	<input type="radio" jwcid="@Radio" value="ognl:30"/> Large
-	<br/>
-	<input type="radio" jwcid="@Radio" value="ognl:100" disabled="ognl:true"/> Gargantuan
-</span>
-
-</form>
-
-Size: [<span jwcid="@Insert" value="ognl:size"/>]
-
-<br/>
-
-<form jwcid="dummy@Form" direct="ognl:false"/>
-
-<br/>
-
-<a href="#" jwcid="@DirectLink" listener="listener:disableGroup">disable group</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context18/LanguageSelection.html b/tapestry/tapestry-framework/src/test-data/context18/LanguageSelection.html
deleted file mode 100644
index ee1eaf0..0000000
--- a/tapestry/tapestry-framework/src/test-data/context18/LanguageSelection.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="$content$">
-<html jwcid="@Shell" title="Language Selection">
-<body jwcid="@Body">
-
-<form jwcid="form@Form">
-	
-<span jwcid="group@RadioGroup" selected="ognl:selectedLanguage">
-	<input type="radio" jwcid="@Radio" value="ognl:@org.apache.tapestry.junit.mock.c18.Language@JAVA"/> Java
-	<br/>
-	<input type="radio" jwcid="@Radio" value="ognl:@org.apache.tapestry.junit.mock.c18.Language@C_SHARP"/> C#
-	<br/>
-	<input type="radio" jwcid="@Radio" value="ognl:@org.apache.tapestry.junit.mock.c18.Language@PYTHON"/> Python
-</span>
-
-</form>
-
-Selected Language: [<span jwcid="@Insert" value="ognl:selectedLanguage"/>]
-
-</body>
-</html>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context18/NestedGroups.html b/tapestry/tapestry-framework/src/test-data/context18/NestedGroups.html
deleted file mode 100644
index 7e1158d..0000000
--- a/tapestry/tapestry-framework/src/test-data/context18/NestedGroups.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Nested Groups">
-<body jwcid="@Body">
-	
-<form jwcid="@Form">
-<span jwcid="outer@RadioGroup" selected="ognl:'foo'">
-<span jwcid="inner@RadioGroup" selected="ognl:'bar'"/>	
-</span>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context18/NoForm.html b/tapestry/tapestry-framework/src/test-data/context18/NoForm.html
deleted file mode 100644
index ffa2af1..0000000
--- a/tapestry/tapestry-framework/src/test-data/context18/NoForm.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html jwcid="@Shell" title="NoForm">
-<body jwcid="@Body">
-
-<form>
-	
-<span jwcid="orphan@RadioGroup" selected="ognl:visit.foo">
-	<input type="radio" jwcid="@Radio" value="ognl:10"/> 
-</span>
-
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context18/NoGroup.html b/tapestry/tapestry-framework/src/test-data/context18/NoGroup.html
deleted file mode 100644
index f4597e1..0000000
--- a/tapestry/tapestry-framework/src/test-data/context18/NoGroup.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Nested Groups">
-<body jwcid="@Body">
-	
-<form jwcid="@Form">
-
-<input type="radio" jwcid="orphan@Radio" value="foo"/>
-
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context18/NullSelection.html b/tapestry/tapestry-framework/src/test-data/context18/NullSelection.html
deleted file mode 100644
index 8b15e5f..0000000
--- a/tapestry/tapestry-framework/src/test-data/context18/NullSelection.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<html jwcid="@Shell" title="NullSelection">
-<body jwcid="@Body">
-
-<form jwcid="@Form">
-	
-<span jwcid="group@RadioGroup" selected="ognl:framework">
-	
-	<input type="radio" jwcid="r0@Radio"/> No Choice
-	<input type="radio" jwcid="r1@Radio" value="tapestry"/> Tapestry
-	<br/>
-	<input type="radio" jwcid="r2@Radio" value="struts"/> Struts
-	<br/>
-	<input type="radio" jwcid="r3@Radio" value="webwork"/> WebWork
-</span>
-
-</form>
-
-Framework: [<span jwcid="@Insert" value="ognl:framework"/>]
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context18/README b/tapestry/tapestry-framework/src/test-data/context18/README
deleted file mode 100644
index 3f13acd..0000000
--- a/tapestry/tapestry-framework/src/test-data/context18/README
+++ /dev/null
@@ -1 +0,0 @@
-Tests the RadioGroup and Radio components.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context18/WEB-INF/Home.page b/tapestry/tapestry-framework/src/test-data/context18/WEB-INF/Home.page
deleted file mode 100644
index a21e7b3..0000000
--- a/tapestry/tapestry-framework/src/test-data/context18/WEB-INF/Home.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c18.Home">
-  <property-specification name="size" type="int" initial-value="20"/>
-  <property-specification name="groupDisabled" type="boolean" persistent="yes"/>
-  
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context18/WEB-INF/LanguageSelection.page b/tapestry/tapestry-framework/src/test-data/context18/WEB-INF/LanguageSelection.page
deleted file mode 100644
index b826570..0000000
--- a/tapestry/tapestry-framework/src/test-data/context18/WEB-INF/LanguageSelection.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-	
-  <property-specification name="selectedLanguage"
-  		type="org.apache.tapestry.junit.mock.c18.Language"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context18/WEB-INF/NullSelection.page b/tapestry/tapestry-framework/src/test-data/context18/WEB-INF/NullSelection.page
deleted file mode 100644
index 0f85dbf..0000000
--- a/tapestry/tapestry-framework/src/test-data/context18/WEB-INF/NullSelection.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-  <property-specification name="framework" type="java.lang.String"/>
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context19/Four.html b/tapestry/tapestry-framework/src/test-data/context19/Four.html
deleted file mode 100644
index 0ac15a8..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/Four.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html jwcid="@Shell" title="Four">
-<body jwcid="@Body">
-
-<form jwcid="@Form" enctype="multipart/form-data">
-
-<select jwcid="@Select" multiple="ognl:true">
-<option jwcid="@Option" selected="ognl:lightsOn" label="Lights on"/>
-<option jwcid="@Option" selected="ognl:nobodyHome" label="Nobody Home"/>
-</select>
-	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context19/Home.html b/tapestry/tapestry-framework/src/test-data/context19/Home.html
deleted file mode 100644
index 91b739f..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/Home.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="listener:formSubmit">
-
-<input type="file" jwcid="@Upload" file="ognl:uploadFile" disabled="ognl:uploadDisabled"/>
-	
-</form>
-
-<br/>
-
-<a href="#" jwcid="@DirectLink" listener="listener:disableUpload">click to disable Upload</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context19/README b/tapestry/tapestry-framework/src/test-data/context19/README
deleted file mode 100644
index 5d1efab..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/README
+++ /dev/null
@@ -1 +0,0 @@
-Context for tests related to file uploads and the Upload component.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context19/Tapestry-Banner.png b/tapestry/tapestry-framework/src/test-data/context19/Tapestry-Banner.png
deleted file mode 100644
index a986059..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/Tapestry-Banner.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test-data/context19/Three.html b/tapestry/tapestry-framework/src/test-data/context19/Three.html
deleted file mode 100644
index c77c430..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/Three.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body>
-
-No file uploaded.	
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context19/Two.html b/tapestry/tapestry-framework/src/test-data/context19/Two.html
deleted file mode 100644
index 9d267fe..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/Two.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-Content Type: [<span jwcid="@Insert" value="ognl:file.contentType"/>]
-<br/>
-Path: [<span jwcid="@Insert" value="ognl:file.filePath"/>]
-<br/>
-Name: [<span jwcid="@Insert" value="ognl:file.fileName"/>]
-<br/>
-Size: [<span jwcid="@Insert" value="ognl:file.size"/>]
-<br/>
-In Memory: [<span jwcid="@Insert" value="ognl:file.inMemory"/>]
-
-<span jwcid="@Conditional" condition="ognl:uploadMatch">
-<br/>
-Contents match.
-</span>
-
-</body> 
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/Four.page b/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/Four.page
deleted file mode 100644
index a28679d..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/Four.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-  <property-specification name="lightsOn" type="boolean" persistent="yes"/>
-  <property-specification name="nobodyHome" type="boolean" persistent="yes"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/Home.page b/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/Home.page
deleted file mode 100644
index f743aa6..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/Home.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c19.Home">
-
-  <property-specification name="uploadFile" type="org.apache.tapestry.request.IUploadFile"/>
-  <property-specification name="uploadDisabled" type="boolean" persistent="yes"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/Two.page b/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/Two.page
deleted file mode 100644
index 31b742c..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/Two.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c19.Two">
-
-  <property-specification name="file" type="org.apache.tapestry.request.IUploadFile"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/app.application b/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/app.application
deleted file mode 100644
index 5b7d61a..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/WEB-INF/app.application
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-
-	<extension name="org.apache.tapestry.multipart-decoder" 
-		 class="org.apache.tapestry.multipart.DefaultMultipartDecoder">
-		<configure property-name="thresholdSize" type="long" value="1000"/>
-	</extension>
-
-</application>
diff --git a/tapestry/tapestry-framework/src/test-data/context19/form-four.request b/tapestry/tapestry-framework/src/test-data/context19/form-four.request
deleted file mode 100644
index bd50588..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/form-four.request
+++ /dev/null
@@ -1,29 +0,0 @@
------------------------------eldorado

-Content-Disposition: form-data; name="service"

-

-direct

------------------------------eldorado

-Content-Disposition: form-data; name="page"

-

-Four

------------------------------eldorado

-Content-Disposition: form-data; name="component"

-

-$Form

------------------------------eldorado

-Content-Disposition: form-data; name="session"

-

-T

------------------------------eldorado

-Content-Disposition: form-data; name="Select"

-

-0

------------------------------eldorado

-Content-Disposition: form-data; name="Select"

-

-1

------------------------------eldorado

-Content-Disposition: form-data; name="formids"

-

-Select

------------------------------eldorado--

diff --git a/tapestry/tapestry-framework/src/test-data/context19/long.html b/tapestry/tapestry-framework/src/test-data/context19/long.html
deleted file mode 100644
index 23379b0..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/long.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<html><head>
-      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-   <title>Manual Persistent Component Properties</title><link rel="stylesheet" href="Tapestry.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.59.2"><link rel="home" href="TapestryUsersGuide.html" title="Tapestry User's Guide"><link rel="up" href="state.html" title="Chapter&nbsp;2.&nbsp;Managing Server-Side State"><link rel="previous" href="state.manual-page-properties.html" title="Implementing Persistent Page Properties Manually"><link rel="next" href="state.stateless.html" title="Stateless Applications"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Manual Persistent Component Properties</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="state.manual-page-properties.html"><img src="common-images/prev.png" alt="Prev"></a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Managing Server-Side State</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="state.stateless.html"><img src="common-images/next.png" alt="Next"></a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="state.manual-component-properties"></a>Manual Persistent Component Properties</h2></div></div><p>
-Implementing transient and persistent properties inside components involves more work. 
-The <tt>fireObservedChange()</tt>
-method is available to components as well as pages, but the initialization of
-the component is more complicated.
-</p><p>
-Components do not have the equivalent of the <tt>initialize()</tt> method.  Instead,
-they must register for an event notification to tell them when the page is being <span class="emphasis"><em>detached</em></span>
-from the engine (prior to be stored back into the page pool).  This event is generated by the page itself.
-</p><p>
-The Java interface <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a> is the event listener interface for this purpose.  
-By simply implementing this interface, Tapestry will register the component as a listener and ensure that
-it receives event notifications at the right time (this works for the two other
-page event interfaces, <a href="../api/net/sf/tapestry/event/PageRenderListener.html" target="_self"><tt>PageRenderListener</tt></a> and <a href="../api/net/sf/tapestry/event/PageCleanupListener.html" target="_self"><tt>PageCleanupListener</tt></a> as well; simply
-implement the interface and leave the rest to the framework).
-</p><p>
-Tapestry provides a method, <tt>finishLoad()</tt>, for just this purpose: late initialization.
-</p><div class="example"><a name="d0e593"></a><p class="title"><b>Example&nbsp;2.7.&nbsp;Manual Persistent Component Properties</b></p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="programlisting">
-public class MyComponent extends <a href="../api/net/sf/tapestry/BaseComponent.html" target="_self"><tt>BaseComponent</tt></a> implements <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a>
-{
-    private String _myProperty;
-    
-    public void setMyProperty(String myProperty)
-    {
-        _myProperty = myProperty;
-        
-        fireObservedChange("myProperty", myProperty);
-    }
-    
-    public String getMyProperty()
-    {
-        return _myProperty;
-    }
-    
-    protected void initialize()
-    {
-        _myProperty = "<span class="emphasis"><em>a default value</em></span>";
-    }
-    
-    protected void finishLoad()
-    {
-        initialize();
-    }
-    
-    /**
-     *  The method specified by <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a>.
-     *
-     **/
-    
-    public void pageDetached(PageEvent event)
-    {
-        initialize();
-    }
-}
-</pre></td></tr></table></div><p>
-Again, there is no particular need to do all this; using the
-<a href="spec.property-specification.html" title="property-specification element"><tt class="sgmltag-starttag">&lt;property-specification&gt;</tt></a> element is far, far simpler.	
-</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="state.manual-page-properties.html"><img src="common-images/prev.png" alt="Prev"></a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="state.html"><img src="common-images/up.png" alt="Up"></a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="state.stateless.html"><img src="common-images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Implementing Persistent Page Properties Manually&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="TapestryUsersGuide.html"><img src="common-images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top">&nbsp;Stateless Applications</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context19/message.txt b/tapestry/tapestry-framework/src/test-data/context19/message.txt
deleted file mode 100644
index 165d4d0..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/message.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Now is the time for all good men to come to the aid of their country.
-She sells sea shells by the sea shore.
-The quick brown fox jumps over the lazy dog.
diff --git a/tapestry/tapestry-framework/src/test-data/context19/upload-image.request b/tapestry/tapestry-framework/src/test-data/context19/upload-image.request
deleted file mode 100644
index 4651a30..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/upload-image.request
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test-data/context19/upload-image.request.prefix b/tapestry/tapestry-framework/src/test-data/context19/upload-image.request.prefix
deleted file mode 100644
index 4a00298..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/upload-image.request.prefix
+++ /dev/null
@@ -1,16 +0,0 @@
------------------------------9d33212e1c03e3

-Content-Disposition: form-data; name="service"

-

-direct

------------------------------9d33212e1c03e3

-Content-Disposition: form-data; name="page"

-

-Home

------------------------------9d33212e1c03e3

-Content-Disposition: form-data; name="component"

-

-$Form

------------------------------9d33212e1c03e3

-Content-Disposition: form-data; name="Upload"; filename="context19/Tapestry-Banner.png"

-Content-Type: image/x-png

-

diff --git a/tapestry/tapestry-framework/src/test-data/context19/upload-image.request.suffix b/tapestry/tapestry-framework/src/test-data/context19/upload-image.request.suffix
deleted file mode 100644
index f8962a9..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/upload-image.request.suffix
+++ /dev/null
@@ -1,6 +0,0 @@
-

------------------------------9d33212e1c03e3

-Content-Disposition: form-data; name="formids"

-

-Upload

------------------------------9d33212e1c03e3--

diff --git a/tapestry/tapestry-framework/src/test-data/context19/upload-long.request b/tapestry/tapestry-framework/src/test-data/context19/upload-long.request
deleted file mode 100644
index 46037d8..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/upload-long.request
+++ /dev/null
@@ -1,81 +0,0 @@
------------------------------xyzzyx

-Content-Disposition: form-data; name="service"

-

-direct

------------------------------xyzzyx

-Content-Disposition: form-data; name="page"

-

-Home

------------------------------xyzzyx

-Content-Disposition: form-data; name="component"

-

-$Form

------------------------------xyzzyx

-Content-Disposition: form-data; name="Upload"; filename="context19/long.html"

-Content-Type: text/html

-

-<html><head>

-      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

-   <title>Manual Persistent Component Properties</title><link rel="stylesheet" href="Tapestry.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.59.2"><link rel="home" href="TapestryUsersGuide.html" title="Tapestry User's Guide"><link rel="up" href="state.html" title="Chapter&nbsp;2.&nbsp;Managing Server-Side State"><link rel="previous" href="state.manual-page-properties.html" title="Implementing Persistent Page Properties Manually"><link rel="next" href="state.stateless.html" title="Stateless Applications"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Manual Persistent Component Properties</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="state.manual-page-properties.html"><img src="common-images/prev.png" alt="Prev"></a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Managing Server-Side State</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="state.stateless.html"><img src="common-images/next.png" alt="Next"></a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="state.manual-component-properties"></a>Manual Persistent Component Properties</h2></div></div><p>

-Implementing transient and persistent properties inside components involves more work. 

-The <tt>fireObservedChange()</tt>

-method is available to components as well as pages, but the initialization of

-the component is more complicated.

-</p><p>

-Components do not have the equivalent of the <tt>initialize()</tt> method.  Instead,

-they must register for an event notification to tell them when the page is being <span class="emphasis"><em>detached</em></span>

-from the engine (prior to be stored back into the page pool).  This event is generated by the page itself.

-</p><p>

-The Java interface <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a> is the event listener interface for this purpose.  

-By simply implementing this interface, Tapestry will register the component as a listener and ensure that

-it receives event notifications at the right time (this works for the two other

-page event interfaces, <a href="../api/net/sf/tapestry/event/PageRenderListener.html" target="_self"><tt>PageRenderListener</tt></a> and <a href="../api/net/sf/tapestry/event/PageCleanupListener.html" target="_self"><tt>PageCleanupListener</tt></a> as well; simply

-implement the interface and leave the rest to the framework).

-</p><p>

-Tapestry provides a method, <tt>finishLoad()</tt>, for just this purpose: late initialization.

-</p><div class="example"><a name="d0e593"></a><p class="title"><b>Example&nbsp;2.7.&nbsp;Manual Persistent Component Properties</b></p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="programlisting">

-public class MyComponent extends <a href="../api/net/sf/tapestry/BaseComponent.html" target="_self"><tt>BaseComponent</tt></a> implements <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a>

-{

-    private String _myProperty;

-    

-    public void setMyProperty(String myProperty)

-    {

-        _myProperty = myProperty;

-        

-        fireObservedChange("myProperty", myProperty);

-    }

-    

-    public String getMyProperty()

-    {

-        return _myProperty;

-    }

-    

-    protected void initialize()

-    {

-        _myProperty = "<span class="emphasis"><em>a default value</em></span>";

-    }

-    

-    protected void finishLoad()

-    {

-        initialize();

-    }

-    

-    /**

-     *  The method specified by <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a>.

-     *

-     **/

-    

-    public void pageDetached(PageEvent event)

-    {

-        initialize();

-    }

-}

-</pre></td></tr></table></div><p>

-Again, there is no particular need to do all this; using the

-<a href="spec.property-specification.html" title="property-specification element"><tt class="sgmltag-starttag">&lt;property-specification&gt;</tt></a> element is far, far simpler.	

-</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="state.manual-page-properties.html"><img src="common-images/prev.png" alt="Prev"></a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="state.html"><img src="common-images/up.png" alt="Up"></a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="state.stateless.html"><img src="common-images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Implementing Persistent Page Properties Manually&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="TapestryUsersGuide.html"><img src="common-images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top">&nbsp;Stateless Applications</td></tr></table></div></body></html>

------------------------------xyzzyx

-Content-Disposition: form-data; name="formids"

-

-Upload

------------------------------xyzzyx--

diff --git a/tapestry/tapestry-framework/src/test-data/context19/upload-message.request b/tapestry/tapestry-framework/src/test-data/context19/upload-message.request
deleted file mode 100644
index 2520b07..0000000
--- a/tapestry/tapestry-framework/src/test-data/context19/upload-message.request
+++ /dev/null
@@ -1,25 +0,0 @@
------------------------------7d33212e1c03e2

-Content-Disposition: form-data; name="service"

-

-direct

------------------------------7d33212e1c03e2

-Content-Disposition: form-data; name="page"

-

-Home

------------------------------7d33212e1c03e2

-Content-Disposition: form-data; name="component"

-

-$Form

------------------------------7d33212e1c03e2

-Content-Disposition: form-data; name="Upload"; filename="context19/message.txt"

-Content-Type: text/plain

-

-Now is the time for all good men to come to the aid of their country.

-She sells sea shells by the sea shore.

-The quick brown fox jumps over the lazy dog.

-

------------------------------7d33212e1c03e2

-Content-Disposition: form-data; name="formids"

-

-Upload

------------------------------7d33212e1c03e2--

diff --git a/tapestry/tapestry-framework/src/test-data/context21/README b/tapestry/tapestry-framework/src/test-data/context21/README
deleted file mode 100644
index 7357531..0000000
--- a/tapestry/tapestry-framework/src/test-data/context21/README
+++ /dev/null
@@ -1 +0,0 @@
-This is a catch-all context where we'll test more of the error conditions.

diff --git a/tapestry/tapestry-framework/src/test-data/context21/WEB-INF/app.application b/tapestry/tapestry-framework/src/test-data/context21/WEB-INF/app.application
deleted file mode 100644
index 96298e2..0000000
--- a/tapestry/tapestry-framework/src/test-data/context21/WEB-INF/app.application
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-	<extension name="org.apache.tapestry.property-source"
-			class="org.apache.tapestry.junit.mock.c21.NullPropertySource"/>
-	
-</application>
diff --git a/tapestry/tapestry-framework/src/test-data/context21/WEB-INF/missing-engine.application b/tapestry/tapestry-framework/src/test-data/context21/WEB-INF/missing-engine.application
deleted file mode 100644
index 5af8e87..0000000
--- a/tapestry/tapestry-framework/src/test-data/context21/WEB-INF/missing-engine.application
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application engine-class="MissingEngineClass">
-	
-</application>
diff --git a/tapestry/tapestry-framework/src/test-data/context24/Home.html b/tapestry/tapestry-framework/src/test-data/context24/Home.html
deleted file mode 100644
index fadd17a..0000000
--- a/tapestry/tapestry-framework/src/test-data/context24/Home.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body>
-
-<span jwcid="superImage" border="7" src="testSrc" class="testClass" height="150"/>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context24/README b/tapestry/tapestry-framework/src/test-data/context24/README
deleted file mode 100644
index d852052..0000000
--- a/tapestry/tapestry-framework/src/test-data/context24/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests the inherit-informal-parameters directive.

-

-See TestInheritInformalParameters.xml

diff --git a/tapestry/tapestry-framework/src/test-data/context24/Three.html b/tapestry/tapestry-framework/src/test-data/context24/Three.html
deleted file mode 100644
index d4c1ca6..0000000
--- a/tapestry/tapestry-framework/src/test-data/context24/Three.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body>
-
-<span jwcid="@BadImage"/>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context24/Two.html b/tapestry/tapestry-framework/src/test-data/context24/Two.html
deleted file mode 100644
index e38d1e2..0000000
--- a/tapestry/tapestry-framework/src/test-data/context24/Two.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body>
-
-<span jwcid="@BadBlock" color="none" />
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadBlock.html b/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadBlock.html
deleted file mode 100644
index 1c88e6f..0000000
--- a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadBlock.html
+++ /dev/null
@@ -1 +0,0 @@
-<span jwcid="block"/>
diff --git a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadBlock.jwc b/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadBlock.jwc
deleted file mode 100644
index 02e1138..0000000
--- a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadBlock.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification>
-	
-	<!-- this has to boom: Insert does not allow informal parameters -->
-	<component id="block" type="Block" inherit-informal-parameters="yes"/>
-	
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadImage.html b/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadImage.html
deleted file mode 100644
index 92378c0..0000000
--- a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadImage.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<!-- length=350		 	must be passed down to Image as an informal parameter -->
-<span jwcid="image" length="350"/>
diff --git a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadImage.jwc b/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadImage.jwc
deleted file mode 100644
index f16851a..0000000
--- a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/BadImage.jwc
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification allow-informal-parameters="no">
-	
-	<parameter name="image" required="yes" type="org.apache.tapestry.IAsset"/>
-	<reserved-parameter name="class"/>
-	
-	<component id="image" type="Image" inherit-informal-parameters="yes">
-		<inherited-binding name="image" parameter-name="image"/>
-	</component>
-	
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/Home.page b/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/Home.page
deleted file mode 100644
index 08b7b31..0000000
--- a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/Home.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-	
-	<component id="superImage" type="SuperImage">
-	  <binding name="image" expression="assets.imageAsset"/>
-
-	  <!-- this has to be passed down to Image as an informal parameter -->
-	  <binding name="width" expression="250"/>
-	</component>
-	
-	<external-asset name="imageAsset" URL="http://the.wall/" />
-	
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/SuperImage.html b/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/SuperImage.html
deleted file mode 100644
index 92378c0..0000000
--- a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/SuperImage.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<!-- length=350		 	must be passed down to Image as an informal parameter -->
-<span jwcid="image" length="350"/>
diff --git a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/SuperImage.jwc b/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/SuperImage.jwc
deleted file mode 100644
index 9d22101..0000000
--- a/tapestry/tapestry-framework/src/test-data/context24/WEB-INF/SuperImage.jwc
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification>
-	
-	<parameter name="image" required="yes" type="org.apache.tapestry.IAsset"/>
-	<reserved-parameter name="class"/>
-	
-	<component id="image" type="Image" inherit-informal-parameters="yes">
-		<inherited-binding name="image" parameter-name="image"/>
-	</component>
-	
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context25/Five.html b/tapestry/tapestry-framework/src/test-data/context25/Five.html
deleted file mode 100644
index a6d3eca..0000000
--- a/tapestry/tapestry-framework/src/test-data/context25/Five.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Five">
-<body>
-
-This is page 'Five' with a validating component.
-
-<span jwcid="@RedirectingComponent" page="Six"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context25/Four.html b/tapestry/tapestry-framework/src/test-data/context25/Four.html
deleted file mode 100644
index 54559ed..0000000
--- a/tapestry/tapestry-framework/src/test-data/context25/Four.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Four">
-<body>
-
-This is page 'Four'.
-
-<a jwcid="@DirectLink" listener="listener:directListener">A link to page Five</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context25/Home.html b/tapestry/tapestry-framework/src/test-data/context25/Home.html
deleted file mode 100644
index 874602b..0000000
--- a/tapestry/tapestry-framework/src/test-data/context25/Home.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body>
-
-This is page 'Home'
-
-<p>
-
-<a jwcid="@DirectLink" listener="listener:directListener">A link to page Two</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context25/README b/tapestry/tapestry-framework/src/test-data/context25/README
deleted file mode 100644
index c4a5e54..0000000
--- a/tapestry/tapestry-framework/src/test-data/context25/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests the cycle.activate(page) method and the page validation listeners.

-

-See TestCycleActivatePage.xml

diff --git a/tapestry/tapestry-framework/src/test-data/context25/Six.html b/tapestry/tapestry-framework/src/test-data/context25/Six.html
deleted file mode 100644
index a88dc68..0000000
--- a/tapestry/tapestry-framework/src/test-data/context25/Six.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Six">
-<body>
-
-This is page 'Six' with a validating component.
-
-<span jwcid="@RedirectingComponent" page="Five"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context25/Three.html b/tapestry/tapestry-framework/src/test-data/context25/Three.html
deleted file mode 100644
index a4a924b..0000000
--- a/tapestry/tapestry-framework/src/test-data/context25/Three.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body>
-
-This is page 'Three'
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context25/Two.html b/tapestry/tapestry-framework/src/test-data/context25/Two.html
deleted file mode 100644
index 324d905..0000000
--- a/tapestry/tapestry-framework/src/test-data/context25/Two.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body>
-
-This is page 'Two' with a validating component.
-
-<span jwcid="@RedirectingComponent" page="Three"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/Four.page b/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/Four.page
deleted file mode 100644
index 6161b3c..0000000
--- a/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/Four.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c25.Four"/>
diff --git a/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/Home.page b/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/Home.page
deleted file mode 100644
index 25cd4c3..0000000
--- a/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/Home.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c25.Home"/>
diff --git a/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/RedirectingComponent.html b/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/RedirectingComponent.html
deleted file mode 100644
index ddeb646..0000000
--- a/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/RedirectingComponent.html
+++ /dev/null
@@ -1 +0,0 @@
-<!-- RedirectingComponent has empty template -->
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/RedirectingComponent.jwc b/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/RedirectingComponent.jwc
deleted file mode 100644
index bbaaf2f..0000000
--- a/tapestry/tapestry-framework/src/test-data/context25/WEB-INF/RedirectingComponent.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<component-specification class="org.apache.tapestry.junit.mock.c25.RedirectingComponent">
-
-	<parameter name="page" required="yes" property="targetPage"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context27/Home.html b/tapestry/tapestry-framework/src/test-data/context27/Home.html
deleted file mode 100644
index 8d00885..0000000
--- a/tapestry/tapestry-framework/src/test-data/context27/Home.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body>
-
-	<span jwcid="@Good"/>
-
-	<span jwcid="@Good" 
-		prefix="Bound"
-		intValue="ognl:10" 
-		doubleValue="ognl:2.72" 
-		objectValue="ognl:@java.util.Locale@TAIWAN"
-		booleanValue1="ognl:true"
-	/>
-
-	<div jwcid="@Any" element="span">span tag</div>
-
-	<div jwcid="@Any">div tag</div>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/test-data/context27/README b/tapestry/tapestry-framework/src/test-data/context27/README
deleted file mode 100644
index c027372..0000000
--- a/tapestry/tapestry-framework/src/test-data/context27/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests the parameter default values

-

-See TestDefaultParameterValues.xml

diff --git a/tapestry/tapestry-framework/src/test-data/context27/WEB-INF/Good.html b/tapestry/tapestry-framework/src/test-data/context27/WEB-INF/Good.html
deleted file mode 100644
index 8c39976..0000000
--- a/tapestry/tapestry-framework/src/test-data/context27/WEB-INF/Good.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<table>
-	<tr>
-		<td><span jwcid="@Insert" value="ognl:prefix"/> intValue    = <span jwcid="@Insert" value="ognl:intValue"/></td>
-		<td><span jwcid="@Insert" value="ognl:prefix"/> doubleValue = <span jwcid="@Insert" value="ognl:doubleValue"/></td>
-		<td><span jwcid="@Insert" value="ognl:prefix"/> objectValue = <span jwcid="@Insert" value="ognl:objectValue"/></td>
-		<td><span jwcid="@Insert" value="ognl:prefix"/> booleanValue = <span jwcid="@Insert" value="ognl:booleanValue2"/></td>
-	</tr>
-</table>		
-		
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context27/WEB-INF/Good.jwc b/tapestry/tapestry-framework/src/test-data/context27/WEB-INF/Good.jwc
deleted file mode 100644
index 34d1524..0000000
--- a/tapestry/tapestry-framework/src/test-data/context27/WEB-INF/Good.jwc
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.junit.mock.c27.Good">
-	
-	<parameter name="prefix" type="java.lang.String" direction="auto" default-value='defaultPrefix'/>
-
-	<parameter name="intValue" type="int" direction="auto" default-value="5"/>
-	<parameter name="doubleValue" type="double" direction="in" default-value="3.14"/>
-	<parameter name="objectValue" type="java.util.Locale" direction="in" default-value="defaultLocale"/>
-
-	<parameter name="booleanValue1" type="boolean" direction="auto" default-value="false"/>
-	<parameter name="booleanValue2" type="boolean" direction="auto" default-value="isBooleanValue1()"/>
-
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context27/WEB-INF/Home.page b/tapestry/tapestry-framework/src/test-data/context27/WEB-INF/Home.page
deleted file mode 100644
index a744718..0000000
--- a/tapestry/tapestry-framework/src/test-data/context27/WEB-INF/Home.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context28/Home.html b/tapestry/tapestry-framework/src/test-data/context28/Home.html
deleted file mode 100644
index e9cf0a6..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/Home.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body>
-
-<a jwcid="@DirectLink" listener="listener:changeLocale">A link for locale change</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/test-data/context28/README b/tapestry/tapestry-framework/src/test-data/context28/README
deleted file mode 100644
index 4aa0d6f..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests the features for configuring and working with various charsets.

-

-See TestCharsets.xml

diff --git a/tapestry/tapestry-framework/src/test-data/context28/Two.html b/tapestry/tapestry-framework/src/test-data/context28/Two.html
deleted file mode 100644
index 81db90d..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/Two.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body>
-
-<span jwcid="@Charset"/>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset.html b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset.html
deleted file mode 100644
index 3d2f24a..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset.html
+++ /dev/null
@@ -1 +0,0 @@
-Default <span key="language"/>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset.jwc b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset.jwc
deleted file mode 100644
index abc5f6c..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset.jwc
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification>
-
-	<property name="org.apache.tapestry.template-encoding_bg" value="ISO-8859-5"/>
-	<property name="org.apache.tapestry.template-encoding_bg_BG" value="UTF-8"/>
-
-	<property name="org.apache.tapestry.template-encoding_fr" value="UTF-8"/>
-	<property name="org.apache.tapestry.template-encoding_fr_FR" value="ISO-8859-1"/>
-
-	<property name="org.apache.tapestry.template-encoding_es" value="UTF-16"/>
-
-    
-	<property name="org.apache.tapestry.messages-encoding_zh" value="UTF-8"/>
-	<property name="org.apache.tapestry.messages-encoding_zh_TW" value="Big5"/>
-    
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_bg.html b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_bg.html
deleted file mode 100644
index a6b519f..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_bg.html
+++ /dev/null
@@ -1 +0,0 @@
-<span jwcid="@Insert" value="literal:±êÛÓÐàáÚØ"/> <span key="language"/>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_bg.properties b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_bg.properties
deleted file mode 100644
index 1dfffcf..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_bg.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-language=µ×ØÚ
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_de.properties b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_de.properties
deleted file mode 100644
index 5e7ec57..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_de.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-language=sprache
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_es.html b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_es.html
deleted file mode 100644
index d0452c2..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_es.html
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_fr.html b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_fr.html
deleted file mode 100644
index 2622c85..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_fr.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<span jwcid="@Insert" value="literal:Français"/>
-
-<span jwcid="@ExternalLink" page="Two" parameters="Français">A test link</span>
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_fr_FR.html b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_fr_FR.html
deleted file mode 100644
index 6537145..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_fr_FR.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<span jwcid="@Insert" value="literal:Français"/>
-
-<span jwcid="@ExternalLink" page="Two" parameters="Français">A test link</span>
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_zh.properties b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_zh.properties
deleted file mode 100644
index ac4fef6..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_zh.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-language=语言
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_zh_TW.properties b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_zh_TW.properties
deleted file mode 100644
index 5b442a2..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Charset_zh_TW.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-language=»y¨¥
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Home.page b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Home.page
deleted file mode 100644
index 4254da7..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Home.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c28.Home"/>
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Two.page b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Two.page
deleted file mode 100644
index 5f76120..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/Two.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification>
-
-	<meta key="org.apache.tapestry.output-encoding" value="UTF-8"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/latin1.application b/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/latin1.application
deleted file mode 100644
index 042809a..0000000
--- a/tapestry/tapestry-framework/src/test-data/context28/WEB-INF/latin1.application
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-
-	<property name="org.apache.tapestry.output-encoding" value="ISO-8859-1"/>
-	
-</application>
diff --git a/tapestry/tapestry-framework/src/test-data/context3/Home.html b/tapestry/tapestry-framework/src/test-data/context3/Home.html
deleted file mode 100644
index bf45493..0000000
--- a/tapestry/tapestry-framework/src/test-data/context3/Home.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html jwcid="@Shell" title="No Application Spec">
-<body jwcid="@Body">
-
-<p>
-This application can run without an application specification.
-
-<p>
-Application name: <span jwcid="@Insert" value="ognl:engine.specification.name">Application Name</span>
-<p>
-Engine class: <span jwcid="@Insert" value="ognl:engine.class.getName()">Engine Class</span>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context3/README b/tapestry/tapestry-framework/src/test-data/context3/README
deleted file mode 100644
index 18e2a5a..0000000
--- a/tapestry/tapestry-framework/src/test-data/context3/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This context is used inside JUnit testing to handle applications that run without an

-application specification.

diff --git a/tapestry/tapestry-framework/src/test-data/context31/Home.html b/tapestry/tapestry-framework/src/test-data/context31/Home.html
deleted file mode 100644
index 54d7441..0000000
--- a/tapestry/tapestry-framework/src/test-data/context31/Home.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="listener:formSubmit">
-Hidden: <input jwcid="hidden@Hidden" value="ognl:value" encode="ognl:encode"/>
-<br>
-HiddenWithID: <input jwcid="hiddenWithID@Hidden" value="ognl:valueWithID" id="ognl:hiddenID" encode="ognl:encode"/>
-<br>
-HiddenWithEncoding: <input jwcid="hiddenWithEncoding@Hidden" value="ognl:valueWithEncoding"/>
-<br>
-HiddenBoolean: <input jwcid="hiddenBoolean@Hidden" value="ognl:booleanValue" listener="listener:hiddenListener"/>
-
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context31/README b/tapestry/tapestry-framework/src/test-data/context31/README
deleted file mode 100644
index 08246dd..0000000
--- a/tapestry/tapestry-framework/src/test-data/context31/README
+++ /dev/null
@@ -1 +0,0 @@
-Test cases for the Form and Hidden components.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context31/Two.html b/tapestry/tapestry-framework/src/test-data/context31/Two.html
deleted file mode 100644
index b66bf4e..0000000
--- a/tapestry/tapestry-framework/src/test-data/context31/Two.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-Value: [<span jwcid="@Insert" value="ognl:value"/>]
-<br/>
-HiddenID: [<span jwcid="@Insert" value="ognl:hiddenID"/>]
-
-HiddenWithEncoding: [<span jwcid="@Insert" value="ognl:valueWithEncoding"/>]
-
-</body>
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context31/WEB-INF/Home.page b/tapestry/tapestry-framework/src/test-data/context31/WEB-INF/Home.page
deleted file mode 100644
index 8797d38..0000000
--- a/tapestry/tapestry-framework/src/test-data/context31/WEB-INF/Home.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c31.Home">
-  <property-specification name="value" type="java.lang.String"/>
-  <property-specification name="hiddenID" type="java.lang.String"/>
-  <property-specification name="valueWithID" type="java.lang.String"/>
-  <property-specification name="valueWithEncoding" type="java.lang.String"/>
-  <property-specification name="booleanValue" type="java.lang.Boolean"/>
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context31/WEB-INF/Two.page b/tapestry/tapestry-framework/src/test-data/context31/WEB-INF/Two.page
deleted file mode 100644
index 35413bb..0000000
--- a/tapestry/tapestry-framework/src/test-data/context31/WEB-INF/Two.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c31.Two">
-  <property-specification name="value" type="java.lang.String"/>
-  <property-specification name="hiddenID" type="java.lang.String"/>
-  <property-specification name="valueWithEncoding" type="java.lang.String"/>
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context32/Home.html b/tapestry/tapestry-framework/src/test-data/context32/Home.html
deleted file mode 100644
index 758ca59..0000000
--- a/tapestry/tapestry-framework/src/test-data/context32/Home.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html>
-<body>
-
-<p>
-Check that values in the HTML template do not override
-bindings in the specification.
-</p>
-
-<!-- TAPESTRY-291 as made this more complicated; the Insert component now considers
-     simple values, even in the HTML template, as OGNL expressions.  For this test,
-     where we check that non-literal bindings in the spec override literal bindings from
-     the HTML template, we have to work a little harder than before. -->
-Static over Static: <span jwcid="insertArtist" value="literal:M. C. Escher"/>
-	
-
-</body>	
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context32/README b/tapestry/tapestry-framework/src/test-data/context32/README
deleted file mode 100644
index fbf102e..0000000
--- a/tapestry/tapestry-framework/src/test-data/context32/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Test case for bug 20932 Specification ignored in a hybrid declaration 

-

-http://issues.apache.org/bugzilla/show_bug.cgi?id=20932
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context32/Two.html b/tapestry/tapestry-framework/src/test-data/context32/Two.html
deleted file mode 100644
index f413cc2..0000000
--- a/tapestry/tapestry-framework/src/test-data/context32/Two.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>
-<body>
-
-<p>
-Check that values in the HTML template do not override
-bindings in the specification.
-</p>
-
-
-Dynamic over Static: <span jwcid="insertPageName@Insert" value="ognl:pageName"/>
-	
-
-</body>	
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context32/WEB-INF/Home.page b/tapestry/tapestry-framework/src/test-data/context32/WEB-INF/Home.page
deleted file mode 100644
index 99087fe..0000000
--- a/tapestry/tapestry-framework/src/test-data/context32/WEB-INF/Home.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-  <component id="insertArtist" type="Insert">
-  	<static-binding name="value" value="Pablo Picasso"/>
-  </component>
-  
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context32/WEB-INF/Two.page b/tapestry/tapestry-framework/src/test-data/context32/WEB-INF/Two.page
deleted file mode 100644
index 606fd75..0000000
--- a/tapestry/tapestry-framework/src/test-data/context32/WEB-INF/Two.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-  <component id="insertPageName" type="Insert">
-  	<static-binding name="value" value="SPECIFICATION-VALUE"/>
-  </component>
-  
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context34/Home.html b/tapestry/tapestry-framework/src/test-data/context34/Home.html
deleted file mode 100644
index 1d48ed4..0000000
--- a/tapestry/tapestry-framework/src/test-data/context34/Home.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<html>
-<body>
-
-<p>
-Check the behavior of If, Else, and For.
-</p>
-
-	<span jwcid="@If" condition="ognl: !false">Show text!</span>
-	<span jwcid="@Else">Do not show this</span>
-
-	<span jwcid="@If" condition="false">Do not show this either</span>
-	<span jwcid="@Else">But show this too!</span>
-    
-
-	<span jwcid="for1@For" source="ognl: { 'one', 'two' }">
-        for1 <span jwcid="@Insert" value="ognl: components.for1.index"/> : <span jwcid="@Insert" value="ognl: components.for1.value"/>
-    </span>
-
-    <p>Rewinded index count: <span jwcid="@Insert" value="ognl: rewindedIndexes.size()"/></p>
-    <span jwcid="inds@For" source="ognl: rewindedIndexes" element="p">
-        Rewinded index <span jwcid="@Insert" value="ognl: components.inds.index"/> is <span jwcid="@Insert" value="ognl: components.inds.value"/>
-    </span>
-    
-    <p>Rewinded value count: <span jwcid="@Insert" value="ognl: rewindedValues.size()"/></p>
-    <span jwcid="vals@For" source="ognl: rewindedValues" element="p">
-        Rewinded value <span jwcid="@Insert" value="ognl: components.vals.index"/> is <span jwcid="@Insert" value="ognl: components.vals.value"/>
-    </span>
-    
-    <ul>
-      <li jwcid="tags@For" source="ognl: { '1' }" renderTag="true" informal="informal-value">Render tag</li>
-    </ul>
-
-    <ul>
-      <li jwcid="noTags@For" source="ognl: { '1' }" renderTag="false" informal="informal-value">Do not render tag</li>
-    </ul>
-
-    <span jwcid="@Form">
-		<span jwcid="@If" condition="ognl: !false">Show form text!</span>
-		<span jwcid="@Else">Do not show form text</span>
-	
-		<span jwcid="@If" condition="false">Do not show this form text either</span>
-		<span jwcid="@Else">But show this form text too!</span>
-	    
-	
-		<span jwcid="for2@For" source="ognl: { 'uno', 'due' }" 
-            index="ognl: index" value="ognl: value">
-	        for2 <span jwcid="@Insert" value="ognl: components.for2.index"/> : <span jwcid="@Insert" value="ognl: components.for2.value"/>
-	    </span>
-	
-		<span jwcid="for3@For" source="ognl: { @java.util.Locale@US, @java.util.Locale@GERMANY }" 
-            fullSource="ognl: @java.util.Locale@getAvailableLocales()" keyExpression="toString()"
-            index="ognl: index" value="ognl: value">
-	        for3 <span jwcid="@Insert" value="ognl: components.for3.index"/> : <span jwcid="@Insert" value="ognl: components.for3.value"/>
-	    </span>
-	
-		<span jwcid="for4@For" source="ognl: { @java.util.Locale@US, @java.util.Locale@GERMANY }" keyExpression="toString()" 
-            defaultValue="ognl: @java.util.Locale@ENGLISH"
-            index="ognl: index" value="ognl: value">
-	        for4 <span jwcid="@Insert" value="ognl: components.for4.index"/> : <span jwcid="@Insert" value="ognl: components.for4.value"/>
-	    </span>
-	
-		<span jwcid="for5@For" source="ognl: items" fullSource="ognl: allItems" index="ognl: index" value="ognl: value">
-	        for5 <span jwcid="@Insert" value="ognl: components.for5.index"/> : <span jwcid="@Insert" value="ognl: components.for5.value"/>
-	    </span>
-        
-		<span jwcid="for6@For" source="ognl: items" match="false" index="ognl: index" value="ognl: value">
-	        for6 <span jwcid="@Insert" value="ognl: components.for6.index"/> : <span jwcid="@Insert" value="ognl: components.for6.value"/>
-	    </span>
-	</span>        
-    
-    
-</body>	
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context34/WEB-INF/Home.page b/tapestry/tapestry-framework/src/test-data/context34/WEB-INF/Home.page
deleted file mode 100644
index 58febf8..0000000
--- a/tapestry/tapestry-framework/src/test-data/context34/WEB-INF/Home.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c34.Home">
-
-  <property name="rewindedIndexes" initial-value="new java.util.ArrayList()"/>
-  <property name="rewindedValues" initial-value="new java.util.ArrayList()"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context4/Home.html b/tapestry/tapestry-framework/src/test-data/context4/Home.html
deleted file mode 100644
index 1f18c65..0000000
--- a/tapestry/tapestry-framework/src/test-data/context4/Home.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html jwcid="@lib:Border" title="App Spec in WEB-INF">
-
-<p>
-This application specification is in the WEB-INF.
-
-<p>
-Application name: <span jwcid="@Insert" value="ognl:engine.specification.name">Application Name</span>
-<p>
-Engine class: <span jwcid="@Insert" value="ognl:engine.class.getName()">Engine Class</span>
-
-
-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context4/README b/tapestry/tapestry-framework/src/test-data/context4/README
deleted file mode 100644
index 82d4900..0000000
--- a/tapestry/tapestry-framework/src/test-data/context4/README
+++ /dev/null
@@ -1,2 +0,0 @@
-Used in JUnit testing to support an important case where an application specification

-in the context references a library.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context4/WEB-INF/foo.application b/tapestry/tapestry-framework/src/test-data/context4/WEB-INF/foo.application
deleted file mode 100644
index a3c01f6..0000000
--- a/tapestry/tapestry-framework/src/test-data/context4/WEB-INF/foo.application
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Application foo in WEB-INF"
-	engine-class="org.apache.tapestry.junit.mock.c4.C4Engine">
-		
-	<library id="lib" specification-path="/org/apache/tapestry/junit/mock/lib/MockLibrary.library"/>
-	
-</application>	
diff --git a/tapestry/tapestry-framework/src/test-data/context51/images/image.wbmp b/tapestry/tapestry-framework/src/test-data/context51/images/image.wbmp
deleted file mode 100644
index a1f252a..0000000
--- a/tapestry/tapestry-framework/src/test-data/context51/images/image.wbmp
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test-data/context8/Home.thtml b/tapestry/tapestry-framework/src/test-data/context8/Home.thtml
deleted file mode 100644
index dbc805a..0000000
--- a/tapestry/tapestry-framework/src/test-data/context8/Home.thtml
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Home">

-<body jwcid="@Body">

-

-This is the Home page, with template Home.thtml.

-

-</body>

-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context8/README b/tapestry/tapestry-framework/src/test-data/context8/README
deleted file mode 100644
index 77f3097..0000000
--- a/tapestry/tapestry-framework/src/test-data/context8/README
+++ /dev/null
@@ -1 +0,0 @@
-This context contains tests use to check that the default template extension may be overriden.
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context8/Two.phtml b/tapestry/tapestry-framework/src/test-data/context8/Two.phtml
deleted file mode 100644
index 183bf29..0000000
--- a/tapestry/tapestry-framework/src/test-data/context8/Two.phtml
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Home">

-<body jwcid="@Body">

-

-This is the Two page, with template Two.phtml.

-

-</body>

-</html>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test-data/context8/WEB-INF/Two.page b/tapestry/tapestry-framework/src/test-data/context8/WEB-INF/Two.page
deleted file mode 100644
index 890d2cf..0000000
--- a/tapestry/tapestry-framework/src/test-data/context8/WEB-INF/Two.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification>
-	<property name="org.apache.tapestry.template-extension" value="phtml"/>
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test-data/context8/WEB-INF/ext.application b/tapestry/tapestry-framework/src/test-data/context8/WEB-INF/ext.application
deleted file mode 100644
index bb34c9d..0000000
--- a/tapestry/tapestry-framework/src/test-data/context8/WEB-INF/ext.application
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application>
-	<property name="org.apache.tapestry.template-extension" value="thtml"/>
-</application>
diff --git a/tapestry/tapestry-framework/src/test-data/i18n/Home.html b/tapestry/tapestry-framework/src/test-data/i18n/Home.html
deleted file mode 100644
index 0aa4646..0000000
--- a/tapestry/tapestry-framework/src/test-data/i18n/Home.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html jwcid="@Shell" title="i18n Tests">
-    <body jwcid="@Body">    
-        Hello <span key="name"/>.  
-    </body>
-</html>
diff --git a/tapestry/tapestry-framework/src/test-data/i18n/WEB-INF/i18n.application b/tapestry/tapestry-framework/src/test-data/i18n/WEB-INF/i18n.application
deleted file mode 100644
index 7b7a38d..0000000
--- a/tapestry/tapestry-framework/src/test-data/i18n/WEB-INF/i18n.application
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2006 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<application name="Various i18n tests">
-    
-    <meta key="org.apache.tapestry.page-class-packages" 
-    	value="org.apache.tapestry.integration.i18n.pages"/>
-    <meta key="org.apache.tapestry.component-class-packages" 
-    	value="org.apache.tapestry.integration.i18n.components"/>
-   
-    <meta key="org.apache.tapestry.namespace-properties-name"
-        value="random" />
-    
-</application>	
diff --git a/tapestry/tapestry-framework/src/test-data/i18n/WEB-INF/random.properties b/tapestry/tapestry-framework/src/test-data/i18n/WEB-INF/random.properties
deleted file mode 100644
index c8d3b22..0000000
--- a/tapestry/tapestry-framework/src/test-data/i18n/WEB-INF/random.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-
-name=Random!
diff --git a/tapestry/tapestry-framework/src/test-data/i18n/WEB-INF/web.xml b/tapestry/tapestry-framework/src/test-data/i18n/WEB-INF/web.xml
deleted file mode 100644
index 0b44372..0000000
--- a/tapestry/tapestry-framework/src/test-data/i18n/WEB-INF/web.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2004, 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

-"http://java.sun.com/dtd/web-app_2_3.dtd">

-

-<web-app>

-	<display-name>i18n</display-name>

-	<description>i18n Tests</description>

-	<filter>

-		<filter-name>redirect</filter-name>

-		<filter-class>org.apache.tapestry.RedirectFilter</filter-class>

-	</filter>

-	<filter-mapping>

-		<filter-name>redirect</filter-name>

-		<url-pattern>/</url-pattern>

-	</filter-mapping>

-	

-	<servlet>

-		<servlet-name>i18n</servlet-name>

-		<servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>

-		<load-on-startup>0</load-on-startup>

-	</servlet>	

-	

-	<servlet-mapping>

-		<servlet-name>i18n</servlet-name>

-		<url-pattern>/app</url-pattern>

-	</servlet-mapping>
-    

-	<session-config>

-		<session-timeout>15</session-timeout>

-	</session-config>		

-</web-app>
diff --git a/tapestry/tapestry-framework/src/test-data/spring-1.1.jar b/tapestry/tapestry-framework/src/test-data/spring-1.1.jar
deleted file mode 100644
index f8e52b5..0000000
--- a/tapestry/tapestry-framework/src/test-data/spring-1.1.jar
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test/Fred.application b/tapestry/tapestry-framework/src/test/Fred.application
deleted file mode 100644
index 23bf32f..0000000
--- a/tapestry/tapestry-framework/src/test/Fred.application
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application
-      PUBLIC "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-      "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-
-<application name="Fred"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/IgnoreMatcher.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/IgnoreMatcher.java
deleted file mode 100644
index befbdd1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/IgnoreMatcher.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-/**

- * 

- */

-package org.apache.tapestry;

-

-import org.apache.hivemind.test.ArgumentMatcher;

-

-/**

- * Argument matcher that is always true; useful when there's no easy to directly compare a parameter

- * to an expectation.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class IgnoreMatcher implements ArgumentMatcher

-{

-    public boolean compareArguments(Object arg0, Object arg1)

-    {

-        return true;

-    }

-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/TapestryUtilsTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/TapestryUtilsTest.java
deleted file mode 100644
index 06c208c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/TapestryUtilsTest.java
+++ /dev/null
@@ -1,337 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.TapestryUtils}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TapestryUtilsTest extends BaseComponentTestCase
-{
-
-    private IRequestCycle newCycle(String key, Object attribute)
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        trainGetAttribute(cycle, key, attribute);
-
-        return cycle;
-    }
-
-    public void testStoreUniqueAttributeSuccess()
-    {
-        Object newInstance = new Object();
-        IRequestCycle cycle = newCycle();
-
-        String key = "foo.bar.Baz";
-
-        expect(cycle.getAttribute(key)).andReturn(null);
-
-        cycle.setAttribute(key, newInstance);
-
-        replay();
-
-        TapestryUtils.storeUniqueAttribute(cycle, key, newInstance);
-
-        verify();
-    }
-
-    public void testStoreUniqueAttributeFailure()
-    {
-        Object existing = "*EXISTING*";
-        Object newInstance = "*NEW*";
-
-        String key = "foo.bar.Baz";
-
-        IRequestCycle cycle = newCycle(key, existing);
-
-        replay();
-
-        try
-        {
-            TapestryUtils.storeUniqueAttribute(cycle, key, newInstance);
-            unreachable();
-        }
-        catch (IllegalStateException ex)
-        {
-            assertEquals(TapestryMessages.nonUniqueAttribute(newInstance, key, existing), ex
-                    .getMessage());
-        }
-
-        verify();
-    }
-
-    public void testGetPageRenderSupportSuccess()
-    {
-        IComponent component = newComponent();
-        PageRenderSupport support = newPageRenderSupport();
-        IRequestCycle cycle = newCycle(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE, support);
-
-        replay();
-
-        PageRenderSupport actual = TapestryUtils.getPageRenderSupport(cycle, component);
-
-        assertSame(support, actual);
-
-        verify();
-    }
-
-    public void testRemovePageRenderSupport()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        cycle.removeAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE);
-
-        replay();
-
-        TapestryUtils.removePageRenderSupport(cycle);
-
-        verify();
-    }
-
-    public void testRemoveForm()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        cycle.removeAttribute(TapestryUtils.FORM_ATTRIBUTE);
-
-        replay();
-
-        TapestryUtils.removeForm(cycle);
-
-        verify();
-    }
-
-    public void testGetFormSuccess()
-    {
-        IComponent component = newComponent();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle(TapestryUtils.FORM_ATTRIBUTE, form);
-
-        replay();
-
-        IForm actual = TapestryUtils.getForm(cycle, component);
-
-        assertSame(form, actual);
-
-        verify();
-    }
-
-    public void testGetPageRenderSupportFailure()
-    {
-        IComponent component = newMock(IComponent.class);
-        IRequestCycle cycle = newCycle(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE, null);
-        
-        expect(component.getExtendedId()).andReturn("Foo/bar").anyTimes();
-        
-        Location l = newLocation();
-        expect(component.getLocation()).andReturn(l);
-
-        replay();
-
-        try
-        {
-            TapestryUtils.getPageRenderSupport(cycle, component);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(TapestryMessages.noPageRenderSupport(component), ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    public void testGetFormFailure()
-    {
-        Location l = newLocation();
-        IComponent component = newMock(IComponent.class);
-        
-        IRequestCycle cycle = newCycle(TapestryUtils.FORM_ATTRIBUTE, null);
-        
-        expect(component.getExtendedId()).andReturn("Foo/bar").anyTimes();        
-        expect(component.getLocation()).andReturn(l);
-
-        replay();
-
-        try
-        {
-            TapestryUtils.getForm(cycle, component);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(TapestryMessages.noForm(component), ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    public void testSplitBlank()
-    {
-        assertListEquals(new String[0], TapestryUtils.split(null));
-        assertListEquals(new String[0], TapestryUtils.split(""));
-    }
-
-    public void testSplitWithDelimiter()
-    {
-        assertListEquals(new String[]
-        { "fred", "barney" }, TapestryUtils.split("fred|barney", '|'));
-    }
-
-    public void testSplitNormal()
-    {
-        assertListEquals(new String[]
-        { "fred", "barney" }, TapestryUtils.split("fred,barney"));
-    }
-
-    public void testSplitNoDelimiter()
-    {
-        assertListEquals(new String[]
-        { "no-delimiter" }, TapestryUtils.split("no-delimiter"));
-    }
-
-    public void testTrailingDelimiter()
-    {
-        assertListEquals(new String[]
-        { "fred", "barney", "" }, TapestryUtils.split("fred,barney,"));
-    }
-
-    public void testEveryDelimiterCounts()
-    {
-        assertListEquals(new String[]
-        { "", "fred", "", "barney", "", "" }, TapestryUtils.split(",fred,,barney,,"));
-    }
-
-	public void testCapitalizeNothing()
-	{
-		assertEquals(null, TapestryUtils.capitalize(null));
-		assertEquals("", TapestryUtils.capitalize(""));
-	}
-
-	public void testCapitalizeNormal()
-	{
-		assertEquals("Test", TapestryUtils.capitalize("test"));
-		assertEquals("Test", TapestryUtils.capitalize("Test"));
-		assertEquals("123abc", TapestryUtils.capitalize("123abc"));
-	}
-
-    public void testEnquote()
-    {
-        assertEquals("'simple'", TapestryUtils.enquote("simple"));
-
-        assertEquals("'this is a \\\\backslash\\\\'", TapestryUtils
-                .enquote("this is a \\backslash\\"));
-
-        assertEquals("'this is a \\'single quote\\''", TapestryUtils
-                .enquote("this is a 'single quote'"));
-    }
-
-    public void testEnquoteNull()
-    {
-        assertEquals("''", TapestryUtils.enquote(null));
-    }
-
-    public void testConvertTapestryIdToNMToken()
-    {
-        assertEquals("abc", TapestryUtils.convertTapestryIdToNMToken("abc"));
-        assertEquals("abc", TapestryUtils.convertTapestryIdToNMToken("$abc"));
-        assertEquals("a_b_c", TapestryUtils.convertTapestryIdToNMToken("$a$b$c"));
-    }
-
-    public void testBuildClientElementReference()
-    {
-        assertEquals("document.getElementById('foo')", TapestryUtils
-                .buildClientElementReference("foo"));
-    }
-
-    public void testGetComponent()
-    {
-        IComponent container = newComponent();
-        IComponent containee = newComponent();
-
-        trainGetComponent(container, "fred", containee);
-
-        replay();
-
-        assertSame(containee, TapestryUtils.getComponent(container, "fred", IComponent.class, null));
-
-        verify();
-    }
-
-    public void testGetComponentWrongType()
-    {
-        IComponent container = newComponent();
-        IComponent containee = newComponent();
-        Location l = newLocation();
-
-        trainGetComponent(container, "fred", containee);
-        trainGetExtendedId(containee, "Flintstone/fred");
-
-        replay();
-
-        try
-        {
-            TapestryUtils.getComponent(container, "fred", String.class, l);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Component Flintstone/fred is not assignable to type java.lang.String.",
-                    ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-
-    }
-
-    public void testGetComponentDoesNotExist()
-    {
-        IComponent container = newComponent();
-        Location l = newLocation();
-
-        Throwable t = new RuntimeException("Poof!");
-
-        expect(container.getComponent("fred")).andThrow(t);
-
-        replay();
-
-        try
-        {
-            TapestryUtils.getComponent(container, "fred", IComponent.class, l);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Poof!", ex.getMessage());
-            assertSame(l, ex.getLocation());
-            assertSame(t, ex.getRootCause());
-        }
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/TestAbstractComponent.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/TestAbstractComponent.java
deleted file mode 100644
index cec1efe..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/TestAbstractComponent.java
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.spec.IContainedComponent;
-import org.apache.tapestry.test.Creator;
-import org.testng.annotations.Test;
-
-/**
- * Tests a few new features of {@link org.apache.tapestry.AbstractComponent}&nbsp;added in release
- * 4.0.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestAbstractComponent extends BaseComponentTestCase
-{
-    private static class ConcreteComponent extends AbstractComponent
-    {
-
-        protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-        {
-        }
-        
-        public void setClientId(String id)
-        {
-        }
-        
-        public String getClientId()
-        {
-            return null;
-        }
-    }
-    
-    public void testUnimplementedMethods()
-    {
-        IComponent component = new ConcreteComponent();
-
-        try
-        {
-            component.getMessages();
-            unreachable();
-        }
-        catch (IllegalStateException ex)
-        {
-            assertEquals(
-                    "Method getMessages() is not implemented. An implementation of this method should be provided via runtime class enhancement.",
-                    ex.getMessage());
-        }
-
-        try
-        {
-            component.getSpecification();
-            unreachable();
-        }
-        catch (IllegalStateException ex)
-        {
-            assertEquals(TapestryMessages.providedByEnhancement("getSpecification"), ex
-                    .getMessage());
-        }
-    }
-    
-    public void testContainedComponent()
-    {
-        Creator creator = new Creator();
-
-        IContainedComponent cc = newContainedComponent();
-
-        replay();
-
-        IComponent component = (IComponent) creator.newInstance(BaseComponent.class);
-
-        component.setContainedComponent(cc);
-
-        assertSame(cc, component.getContainedComponent());
-
-        verify();
-    }
-    
-    public void testContainedComponentConflict()
-    {
-        Creator creator = new Creator();
-
-        IContainedComponent cc1 = newContainedComponent();
-        IContainedComponent cc2 = newContainedComponent();
-
-        IPage page = newPage("Fred");
-
-        trainGetIdPath(page, null);
-        
-        replay();
-        
-        IComponent component = (IComponent) creator.newInstance(BaseComponent.class, new Object[]
-        { "page", page, "container", page, "id", "barney" });
-        
-        component.setContainedComponent(cc1);
-
-        try
-        {
-            component.setContainedComponent(cc2);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Attempt to change containedComponent property of component Fred/barney, which is not allowed.",
-                    ex.getMessage());
-        }
-
-        verify();
-    }
-
-    private IContainedComponent newContainedComponent()
-    {
-        return newMock(IContainedComponent.class);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/TestBaseSessionStoreOptimized.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/TestBaseSessionStoreOptimized.java
deleted file mode 100644
index 52c0273..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/TestBaseSessionStoreOptimized.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry;

-

-import org.testng.annotations.Test;

-

-import javax.servlet.http.HttpSession;

-import javax.servlet.http.HttpSessionBindingEvent;

-

-/**

- * Tests for {@link org.apache.tapestry.BaseSessionStoreOptimized}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class TestBaseSessionStoreOptimized extends BaseComponentTestCase

-{

-    @Test

-    public void testMarkDirty()

-    {

-        BaseSessionStoreOptimized object = new BaseSessionStoreOptimized();

-

-        assertEquals(false, object.isStoreToSessionNeeded());

-

-        object.markSessionStoreNeeded();

-

-        assertEquals(true, object.isStoreToSessionNeeded());

-    }

-

-    @Test

-    public void testMarkClean()

-    {

-        HttpSession session = newMock(HttpSession.class);

-

-        BaseSessionStoreOptimized object = new BaseSessionStoreOptimized();

-

-        object.markSessionStoreNeeded();

-

-        replay();

-

-        object.valueBound(new HttpSessionBindingEvent(session, "sessionid", object));

-

-        assertEquals(false, object.isStoreToSessionNeeded());

-

-        verify();

-    }

-

-    @Test

-    public void testUnboundDoesNothing()

-    {

-        HttpSession session = newMock(HttpSession.class);

-

-        BaseSessionStoreOptimized object = new BaseSessionStoreOptimized();

-

-        object.markSessionStoreNeeded();

-

-        replay();

-

-        object.valueUnbound(new HttpSessionBindingEvent(session, "sessionid", object));

-

-        assertEquals(true, object.isStoreToSessionNeeded());

-

-        verify();

-

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/TestComponentMessageAccess.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/TestComponentMessageAccess.java
deleted file mode 100644
index 89e47c3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/TestComponentMessageAccess.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.Messages;
-import org.apache.tapestry.test.Creator;
-import org.testng.annotations.Test;
-
-/**
- * Tests support for several deprecated methods on {@link org.apache.tapestry.AbstractComponent}
- * related to accessing localized messages. This test case may be removed in 4.1, when the
- * corresponding methods are removed.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestComponentMessageAccess extends BaseComponentTestCase
-{
-    private AbstractComponent newComponent(Messages messages)
-    {
-        Creator c = new Creator();
-
-        return (AbstractComponent) c.newInstance(AbstractComponent.class, new Object[]
-        { "messages", messages });
-    }
-
-    @Test
-    public void testGetMessage()
-    {
-        Messages m = newMock(Messages.class);
-
-        expect(m.getMessage("fred")).andReturn("flintstone");
-
-        AbstractComponent ac = newComponent(m);
-
-        replay();
-
-        assertEquals("flintstone", ac.getMessages().getMessage("fred"));
-
-        verify();
-    }
-
-    @Test
-    public void testFormat()
-    {
-        Messages m = newMock(Messages.class);
-
-        expect(m.format("fred", "flintstone")).andReturn("Fred Flintstone");
-
-        AbstractComponent ac = newComponent(m);
-
-        replay();
-
-        assertEquals("Fred Flintstone", ac.getMessages().format("fred", "flintstone"));
-
-        verify();
-
-        expect(m.format("fred", "wilma", "dino")).andReturn("flintstone family");
-
-        replay();
-
-        assertEquals("flintstone family", ac.getMessages().format("fred", "wilma", "dino"));
-
-        verify();
-
-        expect(m.format("fred", "wilma", "dino", "pebbles")).andReturn("flintstone family 2");
-
-        replay();
-
-        assertEquals("flintstone family 2", ac.getMessages().format("fred", "wilma", "dino", "pebbles"));
-
-        verify();
-
-        Object[] arguments = new String[]
-        { "flinstone" };
-
-        expect(m.format("fred", arguments)).andReturn("flintstone family 3");
-
-        replay();
-
-        assertEquals("flintstone family 3", ac.getMessages().format("fred", arguments));
-
-        verify();
-
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/ClasspathAssetFactoryTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/ClasspathAssetFactoryTest.java
deleted file mode 100644
index f4b784b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/ClasspathAssetFactoryTest.java
+++ /dev/null
@@ -1,290 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.asset;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.Location;

-import org.apache.hivemind.Resource;

-import org.apache.hivemind.impl.LocationImpl;

-import org.apache.hivemind.util.ClasspathResource;

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.IAsset;

-import org.apache.tapestry.engine.IEngineService;

-import org.apache.tapestry.l10n.DefaultResourceLocalizer;

-import org.apache.tapestry.spec.IComponentSpecification;

-import org.testng.annotations.Test;

-

-import java.util.Locale;

-

-/**

- * Tests for {@link org.apache.tapestry.asset.ClasspathAssetFactory}.

- * 

- * @author Howard M. Lewis Ship

- */

-@Test

-public class ClasspathAssetFactoryTest extends BaseComponentTestCase

-{

-    public void test_Create_Asset()

-    {

-        IEngineService assetService = newService();

-        Location l = newLocation();

-        IComponentSpecification spec = newSpec();

-        

-        replay();

-

-        ClasspathAssetFactory factory = new ClasspathAssetFactory();

-        factory.setClassResolver(getClassResolver());

-        factory.setAssetService(assetService);

-        factory.setLocalizer(new DefaultResourceLocalizer());

-

-        Resource base = newBaseResource();

-

-        IAsset asset = factory.createAsset(base, spec, "relative-resource.txt", Locale.FRENCH, l);

-

-        assertTrue(asset instanceof PrivateAsset);

-        assertEquals("/org/apache/tapestry/asset/relative-resource_fr.txt", asset.getResourceLocation().getPath());

-        assertSame(l, asset.getLocation());

-

-        verify();

-    }

-

-    public void test_Absolute_Asset_Exists()

-    {

-        String path = "/org/apache/tapestry/html/Shell.jwc";

-

-        IEngineService assetService = newService();

-        IComponentSpecification spec = newSpec();

-        

-        replay();

-

-        ClasspathAssetFactory factory = new ClasspathAssetFactory();

-        factory.setClassResolver(getClassResolver());

-        factory.setAssetService(assetService);

-        factory.setLocalizer(new DefaultResourceLocalizer());

-

-        Resource base = newBaseResource();

-

-        assert factory.assetExists(spec, base, path, null);

-

-        verify();

-    }

-

-    public void test_Create_Asset_Missing()

-    {

-        IEngineService assetService = newService();

-        Location l = newLocation();

-        IComponentSpecification spec = newSpec();

-

-        replay();

-

-        ClasspathAssetFactory factory = new ClasspathAssetFactory();

-        factory.setClassResolver(getClassResolver());

-        factory.setAssetService(assetService);

-        factory.setLocalizer(new DefaultResourceLocalizer());

-

-        Resource base = newBaseResource();

-

-        try

-        {

-            factory.createAsset(base, spec, "does-not-exist.txt", Locale.ENGLISH, l);

-            unreachable();

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertEquals(

-                    "Unable to locate resource 'does-not-exist.txt' relative to classpath:/org/apache/tapestry/asset/base-resource.txt.",

-                    ex.getMessage());

-            assertSame(l, ex.getLocation());

-        }

-

-        verify();

-    }

-

-    public void test_Create_Absolute_Asset()

-    {

-        IEngineService assetService = newService();

-        Location l = newLocation();

-        replay();

-

-        ClasspathAssetFactory factory = new ClasspathAssetFactory();

-        factory.setClassResolver(getClassResolver());

-        factory.setAssetService(assetService);

-        factory.setLocalizer(new DefaultResourceLocalizer());

-

-        IAsset asset = factory.createAbsoluteAsset(

-                "/org/apache/tapestry/asset/relative-resource.txt",

-                Locale.FRENCH,

-                l);

-

-        assertTrue(asset instanceof PrivateAsset);

-        assertEquals("/org/apache/tapestry/asset/relative-resource_fr.txt", asset

-                .getResourceLocation().getPath());

-        assertSame(l, asset.getLocation());

-

-        verify();

-    }

-

-    public void test_Create_Absolute_Asset_Missing()

-    {

-        IEngineService assetService = newService();

-        Location l = newLocation();

-

-        replay();

-

-        ClasspathAssetFactory factory = new ClasspathAssetFactory();

-        factory.setClassResolver(getClassResolver());

-        factory.setAssetService(assetService);

-        factory.setLocalizer(new DefaultResourceLocalizer());

-

-        try

-        {

-            factory.createAbsoluteAsset(

-                    "/org/apache/tapestry/asset/does-not-exist.txt",

-                    Locale.ENGLISH,

-                    l);

-            unreachable();

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertEquals(

-                    "Missing classpath resource '/org/apache/tapestry/asset/does-not-exist.txt'.",

-                    ex.getMessage());

-            assertSame(l, ex.getLocation());

-        }

-

-        verify();

-    }

-

-    public void test_Create_Directory_Asset()

-    {

-        IEngineService assetService = newService();

-        Location l = newLocation();

-        

-        replay();

-        

-        ClasspathAssetFactory factory = new ClasspathAssetFactory();

-        factory.setClassResolver(getClassResolver());

-        factory.setAssetService(assetService);

-        factory.setLocalizer(new DefaultResourceLocalizer());

-        

-        String path = "/org/apache/tapestry/html/dojo";

-        

-        Resource subResource = new ClasspathResource(getClassResolver(), path);

-        IAsset asset = factory.createAsset(subResource, l);

-        

-        assertTrue(asset instanceof PrivateAsset);

-        assertEquals(path, asset

-                .getResourceLocation().getPath());

-        assertSame(l, asset.getLocation());

-        

-        verify();

-    }

-    

-    public void test_Create_Relative_Directory_Asset()

-    {

-        IEngineService assetService = newService();

-        Resource shell = new ClasspathResource(getClassResolver(),

-            "/org/apache/tapestry/html/Shell.jwc");

-        Location l = new LocationImpl(shell);

-        IComponentSpecification spec = newSpec();

-        

-        replay();

-        

-        ClasspathAssetFactory factory = new ClasspathAssetFactory();

-        factory.setClassResolver(getClassResolver());

-        factory.setAssetService(assetService);

-        factory.setLocalizer(new DefaultResourceLocalizer());

-        

-        String path = "/dojo-0.4.3/dojo.js";

-        

-        IAsset asset = factory.createAsset(shell, spec, path, 

-                Locale.getDefault(),

-                l);

-        

-        assertTrue(asset instanceof PrivateAsset);

-        assertEquals(path, asset

-                .getResourceLocation().getPath());

-        assertSame(l, asset.getLocation());

-        

-        verify();

-    }

-    

-    public void test_Create_Relative_Directory_Missing_Asset()

-    {

-        IEngineService assetService = newService();

-        Resource shell = new ClasspathResource(getClassResolver(),

-            "/org/apache/tapestry/html/Shell.jwc");

-        Location l = new LocationImpl(shell);

-        IComponentSpecification spec = newSpec();

-        

-        replay();

-        

-        ClasspathAssetFactory factory = new ClasspathAssetFactory();

-        factory.setClassResolver(getClassResolver());

-        factory.setAssetService(assetService);

-        factory.setLocalizer(new DefaultResourceLocalizer());

-        

-        String path = "/dojo-0.4.3/";

-        

-        IAsset asset = factory.createAsset(shell, spec, path, 

-                Locale.getDefault(),

-                l);

-        

-        assertTrue(asset instanceof PrivateAsset);

-        assertEquals(path, asset

-                .getResourceLocation().getPath());

-        assertSame(l, asset.getLocation());

-        

-        verify();

-    }

-    

-    /**

-     * Tests relative sub-directory paths.

-     */

-    public void test_Relative_Directory_Path()

-    {

-        IEngineService assetService = newService();

-        Location l = newLocation();

-        

-        replay();

-        

-        ClasspathAssetFactory factory = new ClasspathAssetFactory();

-        factory.setClassResolver(getClassResolver());

-        factory.setAssetService(assetService);

-        factory.setLocalizer(new DefaultResourceLocalizer());

-        

-        Resource subResource = new ClasspathResource(getClassResolver(),

-                "/org/apache/tapestry/asset/subresource/sub-resource.txt");

-        IAsset asset = factory.createAsset(subResource, l);

-        

-        assertTrue(asset instanceof PrivateAsset);

-        assertEquals("/org/apache/tapestry/asset/subresource/sub-resource.txt",

-                asset.getResourceLocation().getPath());

-        assertSame(l, asset.getLocation());

-        

-        verify();

-    }

-    

-    private ClasspathResource newBaseResource()

-    {

-        return new ClasspathResource(getClassResolver(),

-                "/org/apache/tapestry/asset/base-resource.txt");

-    }

-

-    private IEngineService newService()

-    {

-        return newMock(IEngineService.class);

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/ContextAssetFactoryTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/ContextAssetFactoryTest.java
deleted file mode 100644
index 086450b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/ContextAssetFactoryTest.java
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.l10n.DefaultResourceLocalizer;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.web.WebContext;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.net.URL;
-import java.util.Locale;
-
-@Test
-public class ContextAssetFactoryTest extends BaseComponentTestCase
-{
-    protected Resource newResource()
-    {
-        return newMock(Resource.class);
-    }
-
-    protected URL newURL()
-    {
-        return getClass().getResource("base-resource.txt");
-    }
-
-    public void test_Create_Asset()
-    {
-        Resource base = newResource();
-        Resource relative = newResource();
-        Resource localized = newResource();
-        Location l = newLocation();
-        URL url = newURL();
-        IComponentSpecification spec = newSpec();
-
-        trainGetRelativeResource(base, "/", base);
-        trainGetRelativeResource(base, "asset.png", relative);
-        trainGetLocalization(relative, Locale.FRENCH, localized);
-        expect(localized.getResourceURL()).andReturn(url).anyTimes();
-        
-        replay();
-
-        ContextAssetFactory factory = new ContextAssetFactory();
-        factory.setLocalizer(new DefaultResourceLocalizer());
-
-        factory.setContextPath("/context");
-
-        IAsset asset = factory.createAsset(base, spec, "asset.png", Locale.FRENCH, l);
-
-        assertTrue(asset instanceof ContextAsset);
-        assertSame(localized, asset.getResourceLocation());
-        assertSame(l, asset.getLocation());
-
-        verify();
-    }
-
-    public void test_Absolute_Asset_Exists()
-    {
-        Resource base = newResource();
-        Resource relative = newResource();
-        Resource localized = newResource();
-        Location l = newLocation();
-        URL url = newURL();
-        IComponentSpecification spec = newSpec();
-
-        trainGetRelativeResource(base, "/", base);
-        trainGetRelativeResource(base, "/images/asset.png", relative);
-        trainGetLocalization(relative, Locale.FRENCH, localized);
-        expect(localized.getResourceURL()).andReturn(url).anyTimes();
-
-        replay();
-
-        ContextAssetFactory factory = new ContextAssetFactory();
-        factory.setLocalizer(new DefaultResourceLocalizer());
-
-        factory.setContextPath("/context");
-
-        assert factory.assetExists(spec, base, "/images/asset.png", Locale.FRENCH);
-
-        verify();
-    }
-
-    public void test_Create_Asset_Missing()
-    {
-        Resource base = newResource();
-        Resource relative = newResource();
-        Location l = newLocation();
-        IComponentSpecification spec = newMock(IComponentSpecification.class);
-        WebContext context = newMock(WebContext.class);
-
-        trainGetRelativeResource(base, "/", base);
-        trainGetRelativeResource(base, "asset.png", relative);
-        trainGetLocalization(relative, Locale.FRENCH, null);
-
-        trainGetRelativeResource(base, "asset.png", relative);
-        trainGetLocalization(relative, Locale.FRENCH, null);
-        expect(spec.getLocation()).andReturn(l);
-        expect(l.getResource()).andReturn(null);
-
-        expect(context.getResource("/asset_fr.png")).andReturn(null);
-        expect(context.getResource("/asset.png")).andReturn(null);
-
-        replay();
-
-        ContextAssetFactory factory = new ContextAssetFactory();
-        factory.setLocalizer(new DefaultResourceLocalizer());
-        factory.setContextPath("/context");
-        factory.setWebContext(context);
-
-        try
-        {
-            factory.createAsset(base, spec, "asset.png", Locale.FRENCH, l);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Unable to locate resource 'asset.png' relative to EasyMock for interface org.apache.hivemind.Resource.",
-                    ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-    
-    public void test_Create_Absolute_Asset()
-    {
-        Location l = newLocation();
-        URL url = newURL();
-        WebContext context = newMock(WebContext.class);
-        trainGetResource(context, "/asset_fr.png", url);
-
-        replay();
-
-        ContextAssetFactory factory = new ContextAssetFactory();
-        factory.setLocalizer(new DefaultResourceLocalizer());
-        factory.setContextPath("/context");
-        factory.setWebContext(context);
-
-        IAsset asset = factory.createAbsoluteAsset("/asset.png", Locale.FRENCH, l);
-
-        assertTrue(asset instanceof ContextAsset);
-        assertEquals("/asset_fr.png", asset.getResourceLocation().getPath());
-        assertSame(l, asset.getLocation());
-
-        verify();
-    }
-
-    public void test_Create_Absolute_Asset_Missing()
-    {
-        Location l = newLocation();
-        WebContext context = newMock(WebContext.class);
-
-        trainGetResource(context, "/asset_fr.png", null);
-        trainGetResource(context, "/asset.png", null);
-
-        replay();
-
-        ContextAssetFactory factory = new ContextAssetFactory();
-        factory.setLocalizer(new DefaultResourceLocalizer());
-        factory.setContextPath("/context");
-        factory.setWebContext(context);
-
-        try
-        {
-            factory.createAbsoluteAsset("/asset.png", Locale.FRENCH, l);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Missing context resource '/asset.png'.", ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-        verify();
-    }
-    
-    public void test_Create_Asset_Encode_URL()
-    {
-        Location l = newLocation();
-        URL url = newURL();
-        WebContext context = newMock(WebContext.class);
-        IRequestCycle rc = newMock(IRequestCycle.class);
-
-        trainGetResource(context, "/asset_fr.png", url);
-        
-        replay();
-
-        ContextAssetFactory factory = new ContextAssetFactory();
-        factory.setLocalizer(new DefaultResourceLocalizer());
-        factory.setContextPath("/context");
-        factory.setWebContext(context);
-        factory.setRequestCycle(rc);
-
-        String assetUrl = factory.createAbsoluteAsset("/asset.png", Locale.FRENCH, l).buildURL();
-
-        assertEquals(assetUrl, "/context/asset_fr.png");
-
-        verify();
-    }
-
-    private void trainGetLocalization(Resource resource, Locale locale, Resource localized)
-    {
-        expect(resource.getLocalization(locale)).andReturn(localized);
-    }
-
-    protected void trainGetResourceURL(Resource resource, URL url)
-    {
-        expect(resource.getResourceURL()).andReturn(url);
-    }
-
-    protected void trainGetResource(WebContext context, String path, URL url)
-    {
-        expect(context.getResource(path)).andReturn(url);
-    }
-
-    protected void trainGetRelativeResource(Resource base, String path, Resource relative)
-    {
-        expect(base.getRelativeResource(path)).andReturn(relative);
-    }
-
-    protected void trainEncodeURL(IRequestCycle rc, String URL, String encodedURL)
-    {
-        expect(rc.encodeURL(URL)).andReturn(encodedURL);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestAssetService.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestAssetService.java
deleted file mode 100644
index 95c22b2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestAssetService.java
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.asset;
-
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.TestBase;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.web.WebContext;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.ByteArrayOutputStream;
-import java.net.URLConnection;
-
-
-/**
- * Tests functionality of {@link AssetService}. 
- *
- * @author jkuhnert
- */
-@Test(sequential=true)
-public class TestAssetService extends TestBase {
-    
-    public void test_Cached_Resource_Null_Modified()
-    {
-        WebRequest request = newMock(WebRequest.class);
-        checkOrder(request, false);
-        
-        AssetService service = new AssetService();
-        service.setRequest(request);
-        service.setLog(LogFactory.getLog("test"));
-
-        expect(request.getDateHeader("If-Modified-Since")).andReturn(-1l);
-        
-        replay();
-
-        assertFalse(service.cachedResource(null));
-        
-        verify();
-    }
-    
-    public void test_Cached_Resource_Stale()
-    {
-        WebRequest request = newMock(WebRequest.class);
-        checkOrder(request, false);
-        
-        AssetService service = new AssetService();
-        service.setRequest(request);
-        service.setLog(LogFactory.getLog("test"));
-        
-        URLConnection url = org.easymock.classextension.EasyMock.createMock(URLConnection.class);
-
-        long modifiedSince = System.currentTimeMillis() - 1000;
-
-        expect(request.getDateHeader("If-Modified-Since")).andReturn(modifiedSince);
-        expect(url.getLastModified()).andReturn(System.currentTimeMillis());
-        
-        replay();
-        org.easymock.classextension.EasyMock.replay(url);
-        
-        assertFalse(service.cachedResource(url));
-        
-        verify();
-        org.easymock.classextension.EasyMock.verify(url);
-    }
-    
-    public void test_Cached_Resource_Good()
-    throws Exception
-    {
-        WebRequest request = newMock(WebRequest.class);
-        checkOrder(request, false);
-        WebResponse response = newMock(WebResponse.class);
-        
-        AssetService service = new AssetService();
-        service.setRequest(request);
-        service.setResponse(response);
-        service.setLog(LogFactory.getLog("test"));
-        
-        URLConnection url = org.easymock.classextension.EasyMock.createMock(URLConnection.class);
-
-        long lastModified = System.currentTimeMillis() - 4000;
-        long modifiedSince = System.currentTimeMillis();
-
-        expect(request.getDateHeader("If-Modified-Since")).andReturn(modifiedSince);
-        expect(url.getLastModified()).andReturn(lastModified);
-        
-        response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-        
-        replay();
-        org.easymock.classextension.EasyMock.replay(url);
-        
-        assertTrue(service.cachedResource(url));
-        
-        verify();
-        org.easymock.classextension.EasyMock.verify(url);
-    }
-
-    public void test_ETag_Header_Response()
-            throws Exception
-    {
-        WebRequest request = newMock(WebRequest.class);
-        checkOrder(request, false);
-        WebResponse response = newMock(WebResponse.class);
-        WebContext context = newMock(WebContext.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        ResourceMatcher matcher = newMock(ResourceMatcher.class);
-        
-        ClassResolver resolver = new DefaultClassResolver();
-        URLConnection url = resolver.getResource("/org/apache/tapestry/asset/tapestry-in-action.png").openConnection();
-
-        AssetService service = new AssetService();
-        service.setRequest(request);
-        service.setResponse(response);
-        service.setLog(LogFactory.getLog("test"));
-        service.setUnprotectedMatcher(matcher);
-        service.setClassResolver(resolver);
-        service.setContext(context);
-
-        expect(cycle.getParameter("path")).andReturn("/org/apache/tapestry/asset/tapestry-in-action.png");
-        expect(cycle.getParameter("digest")).andReturn(null);
-
-        expect(matcher.containsResource("/org/apache/tapestry/asset/tapestry-in-action.png")).andReturn(true);
-
-        expect(request.getDateHeader("If-Modified-Since")).andReturn(-1L);
-        expect(context.getMimeType("/org/apache/tapestry/asset/tapestry-in-action.png")).andReturn("image/png");
-
-        response.setDateHeader("Last-Modified", url.getLastModified());
-        response.setDateHeader("Expires", service._expireTime);
-        response.setHeader("Cache-Control", "public, max-age=" + (AssetService.MONTH_SECONDS * 3));
-
-        expect(request.getHeader("User-Agent")).andReturn("Mozilla").anyTimes();
-
-        response.setHeader("ETag", "W/\"" + url.getContentLength() + "-" + url.getLastModified() + "\"");
-        response.setContentLength(url.getContentLength());
-
-        expect(response.getOutputStream(new ContentType("image/png"))).andReturn(new ByteArrayOutputStream());
-
-        replay();
-
-        service.service(cycle);
-
-        verify();        
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestAssetSource.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestAssetSource.java
deleted file mode 100644
index dc7ba7c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestAssetSource.java
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IAsset;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Tests for {@link org.apache.tapestry.asset.AssetSourceImpl}.
- *
- */
-@Test
-public class TestAssetSource extends BaseComponentTestCase
-{
-    private AssetFactoryContribution newContribution(String prefix, AssetFactory factory)
-    {
-        AssetFactoryContribution c = new AssetFactoryContribution();
-        c.setPrefix(prefix);
-        c.setFactory(factory);
-
-        return c;
-    }
-
-    private List newContributions(String prefix, AssetFactory factory)
-    {
-        return Collections.singletonList(newContribution(prefix, factory));
-    }
-
-    private AssetFactory newAssetFactory(Resource base, String path, Locale locale, Location location, IAsset asset)
-    {
-        AssetFactory f = newMock(AssetFactory.class);
-
-        expect(f.createAsset(base, null, path, locale, location)).andReturn(asset);
-
-        return f;
-    }
-
-    public void test_Known_Prefix()
-    {
-        Location l = newLocation();
-
-        Resource r = newResource();
-        IAsset asset = newAsset();
-
-        List contributions = newContributions("known", newAssetFactory(
-          r,
-          "path/to/asset",
-          Locale.ENGLISH,
-          l,
-          asset));
-
-        replay();
-
-        AssetSourceImpl as = new AssetSourceImpl();
-        as.setContributions(contributions);
-
-        as.initializeService();
-
-        IAsset actual = as.findAsset(r, "known:path/to/asset", Locale.ENGLISH, l);
-
-        assertSame(actual, asset);
-
-        verify();
-    }
-
-    public void test_Unknown_Prefix()
-    {
-        Location l = fabricateLocation(17);
-
-        Resource r = newResource();
-        IAsset asset = newAsset();
-
-        AssetFactory f = newAssetFactory(r, "unknown:path/to/asset", Locale.ENGLISH, l, asset);
-
-        replay();
-
-        AssetSourceImpl as = new AssetSourceImpl();
-        as.setDefaultAssetFactory(f);
-
-        IAsset actual = as.findAsset(r, "unknown:path/to/asset", Locale.ENGLISH, l);
-
-        assertSame(actual, asset);
-
-        verify();
-    }
-
-    public void test_No_Prefix()
-    {
-        Location l = fabricateLocation(17);
-
-        Resource r = newResource();
-        IAsset asset = newAsset();
-
-        AssetFactory classFactory = newAssetFactory(r, "path/to/asset", Locale.ENGLISH, l, asset);
-
-        expect(classFactory.assetExists(null, r, "path/to/asset", Locale.ENGLISH)).andReturn(true);
-
-        replay();
-
-        AssetSourceImpl as = new AssetSourceImpl();
-        as.setClasspathAssetFactory(classFactory);
-
-        IAsset actual = as.findAsset(r, "path/to/asset", Locale.ENGLISH, l);
-
-        assertSame(actual, asset);
-
-        verify();
-    }
-
-    public void test_Known_Prefix_Null_Base()
-    {
-        Location l = newLocation();
-        IAsset asset = newAsset();
-
-        List contributions = newContributions("known", newAssetFactory(
-          null,
-          "path/to/asset",
-          Locale.ENGLISH,
-          l,
-          asset));
-
-        replay();
-
-        AssetSourceImpl as = new AssetSourceImpl();
-        as.setContributions(contributions);
-
-        as.initializeService();
-
-        IAsset actual = as.findAsset(null, "known:path/to/asset", Locale.ENGLISH, l);
-
-        assertSame(actual, asset);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestDefaultAssetFactory.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestDefaultAssetFactory.java
deleted file mode 100644
index ab2be46..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestDefaultAssetFactory.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.asset.DefaultAssetFactory}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestDefaultAssetFactory extends BaseComponentTestCase
-{
-    public void testCreateAssetFull()
-    {
-        Location l = newLocation();
-        replay();
-
-        AssetFactory factory = new DefaultAssetFactory();
-
-        ExternalAsset asset = (ExternalAsset) factory.createAsset(null, null, "/foo/bar/baz", null, l);
-
-        assertEquals("ExternalAsset[/foo/bar/baz]", asset.toString());
-        assertSame(l, asset.getLocation());
-        
-        verify();
-    }
-
-    public void testCreateAssetFromResource()
-    {
-        Location l = newLocation();
-
-        replay();
-
-        AssetFactory factory = new DefaultAssetFactory();
-
-        ExternalAsset asset = (ExternalAsset) factory.createAsset(null, null, "/foo/bar/baz", null, l);
-
-        assertEquals("ExternalAsset[/foo/bar/baz]", asset.toString());
-        assertSame(l, asset.getLocation());
-        
-        verify();
-
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestExternalResource.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestExternalResource.java
deleted file mode 100644
index 521adfa..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestExternalResource.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.asset.ExternalResource}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestExternalResource extends BaseComponentTestCase
-{
-    public void testGetResourceURL()
-    {
-        ExternalResource resource = new ExternalResource("/foo", null);
-
-        try
-        {
-            resource.getResourceURL();
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Expected.
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestResourceDigestSource.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestResourceDigestSource.java
deleted file mode 100644
index 8e640ff..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestResourceDigestSource.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import static org.easymock.EasyMock.expect;
-
-import java.net.URL;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.asset.ResourceDigestSourceImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestResourceDigestSource extends BaseComponentTestCase
-{
-    public void testSuccess()
-    {
-        ResourceDigestSourceImpl s = new ResourceDigestSourceImpl();
-        s.setClassResolver(new DefaultClassResolver());
-
-        assertEquals("a5f4663532ea3efe22084df086482290", s
-                .getDigestForResource("/org/apache/tapestry/asset/tapestry-in-action.png"));
-    }
-
-    public void testMissing()
-    {
-        ResourceDigestSourceImpl s = new ResourceDigestSourceImpl();
-        s.setClassResolver(new DefaultClassResolver());
-
-        try
-        {
-            s.getDigestForResource("/foo/bar/baz");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Classpath resource '/foo/bar/baz' does not exist.", ex.getMessage());
-        }
-    }
-
-    public void testCache()
-    {
-        ClassResolver resolver = newMock(ClassResolver.class);
-
-        URL url = getClass().getResource("tapestry-in-action.png");
-
-        expect(resolver.getResource("/foo")).andReturn(url);
-
-        replay();
-
-        ResourceDigestSourceImpl s = new ResourceDigestSourceImpl();
-        s.setClassResolver(resolver);
-
-        assertEquals("a5f4663532ea3efe22084df086482290", s.getDigestForResource("/foo"));
-
-        // Try it in the cache; note that the class resolver is not
-        // invoked this time.
-
-        assertEquals("a5f4663532ea3efe22084df086482290", s.getDigestForResource("/foo"));
-
-        verify();
-
-        expect(resolver.getResource("/foo")).andReturn(url);
-
-        replay();
-
-        // This clears the cache
-
-        s.resetEventDidOccur();
-
-        // So this goes to the ClassResolver
-
-        assertEquals("a5f4663532ea3efe22084df086482290", s.getDigestForResource("/foo"));
-
-        verify();
-
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java
deleted file mode 100644
index 89284e2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2004, 2005, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.oro.text.regex.*;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ServiceConstants;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-/**
- * Tests for unprotected resource contributions.
- * 
- * @author jkuhnert
- */
-@Test(sequential=true)
-public class TestUnprotectedAsset extends BaseComponentTestCase
-{
-
-    PatternCompiler compiler = new Perl5Compiler();
-    PatternMatcher matcher = new Perl5Matcher();
-
-    /**
-     * Tests for regexp patterns describing unprotected resources.
-     */
-    public void test_Protected_Pattern_Match()
-    {
-        Pattern pr = newPattern("org/apache/tapestry/asset/.*.txt");
-        
-        assertFalse(matcher.contains("org/apache/tapestry/foobar.png", pr));
-        assertTrue(matcher.contains("org/apache/tapestry/asset/base-resource.txt", pr));
-        assertFalse(matcher.contains("org/apache/tapestry/asset/foobar.png", pr));
-    }
-
-    /**
-     * Creates {@link Pattern} objects for regexp matching.
-     * 
-     * @param pattern
-     */
-    protected Pattern newPattern(String pattern)
-    {
-        Pattern pr = null;
-        try
-        {
-            pr = compiler.compile("org/apache/tapestry/asset/.*.txt", Perl5Compiler.READ_ONLY_MASK
-                    | Perl5Compiler.CASE_INSENSITIVE_MASK | Perl5Compiler.MULTILINE_MASK);
-        }
-        catch (MalformedPatternException e)
-        {
-            unreachable();
-        }
-
-        return pr;
-    }
-
-    /**
-     * Tests and asserts that it doesn't take ~longer~ to work with undigested
-     * resources using patterns than normal digested resources.
-     */
-    public void test_Resource_Performance_Comparison()
-    {
-        Pattern pr = newPattern("/org/apache/tapestry/asset/tapestry-in-action.png");
-
-        ResourceDigestSourceImpl s = new ResourceDigestSourceImpl();
-        s.setClassResolver(new DefaultClassResolver());
-        
-        // call methods once to be sure things get cached properly
-        
-        assertEquals("a5f4663532ea3efe22084df086482290", s
-                .getDigestForResource("/org/apache/tapestry/asset/tapestry-in-action.png"));
-        
-        matcher.contains("/org/apache/tapestry/asset/tapestry-in-action.png", pr);
-        
-        long currTime = System.currentTimeMillis();
-        s.getDigestForResource("/org/apache/tapestry/asset/tapestry-in-action.png");
-        long drtime = System.currentTimeMillis() - currTime;
-
-        currTime = System.currentTimeMillis();
-        matcher.contains("/org/apache/tapestry/asset/tapestry-in-action.png", pr);
-        long urtime = System.currentTimeMillis() - currTime;
-
-        assertFalse(urtime < drtime, "Urtime > drtime: " + urtime + " > " + drtime);
-    }
-    
-    /**
-     * Tests new path ordering encoding.
-     */
-    public void test_Path_Comparator()
-    {
-        Map parameters = new TreeMap(new AssetComparator());
-        
-        parameters.put(ServiceConstants.SERVICE, "test");
-        parameters.put("PATH", "value");
-        parameters.put("digest", "digvalue");
-        
-        assertEquals("test", parameters.get(ServiceConstants.SERVICE));
-        assertEquals("value", parameters.get("PATH"));
-        assertEquals("digvalue", parameters.get("digest"));
-        
-        int count = parameters.size();
-        String[] result = (String[]) parameters.keySet().toArray(new String[count]);
-        assertEquals(3, result.length);
-        
-        assertEquals("PATH", result[2]);
-    }
-    
-    /**
-     * Tests the implementation of {@link ResourceMatcher}.
-     */
-    public void test_Resource_Matcher()
-    {
-        ResourceMatcherImpl rm = new ResourceMatcherImpl();
-        List patterns = new ArrayList();
-        patterns.add("/org/apache/tapestry/asset/.*.txt");
-        patterns.add("/org/apache/tapestry/asset/.*.css");
-        patterns.add("/org/apache/tapestry/asset/.*.js");
-        patterns.add("/org/apache/tapestry/html/dojo*");
-        patterns.add("org/apache/tapestry/html/dojo/*/*.png");
-        rm.setContributions(patterns);
-        rm.initializeService();
-        
-        assertFalse(rm.containsResource("/org/apache/tapestry/asset/AbstractAsset.class"));
-        assertFalse(rm.containsResource("/org/apache/tapestry/.*.class"));
-        assertTrue(rm.containsResource("/org/apache/tapestry/asset/assetBuilder.js"));
-        assertTrue(rm.containsResource("/org/apache/tapestry/asset/foo.txt"));
-        assertFalse(rm.containsResource("/org/apache/tapestry/asset/foo.TXT"));
-        assertTrue(rm.containsResource("/org/apache/tapestry/asset/subdirectory/foo.css"));
-        assertTrue(rm.containsResource("/org/apache/tapestry/html/dojo/"));
-        assertTrue(rm.containsResource("/org/apache/tapestry/html/dojo/dojo.js"));
-        assertTrue(rm.containsResource("/org/apache/tapestry/html/dojo/src/json.js"));
-        assertTrue(rm.containsResource("/org/apache/tapestry/html/dojo/src/test.png"));
-    }
-    
-    public void test_Configured_Paths()
-    {
-        ResourceMatcherImpl rm = new ResourceMatcherImpl();
-        List patterns = new ArrayList();
-        patterns.add("^/tapestry/");
-        patterns.add("^/dojo/");
-        patterns.add("^/org/apache/tapestry/.*.css");
-        patterns.add("^/org/apache/tapestry/.*.gif");
-        patterns.add("^/org/apache/tapestry/.*.png");
-        patterns.add("^/org/apache/tapestry/.*.jpg");
-        patterns.add("^/org/apache/tapestry/.*.js");
-        patterns.add("^/org/apache/tapestry/.*.htm");
-        patterns.add("^/org/apache/tapestry/.*.html");
-        
-        rm.setContributions(patterns);
-        rm.initializeService();
-        
-        assertTrue(rm.containsResource("/dojo/src/widget/templates/DatePicker.css"));
-        assertTrue(rm.containsResource("/tapestry/core.js"));
-        
-        assertFalse(rm.containsResource("/com/foo/tapestry/foo.properties"));
-        assertFalse(rm.containsResource("/com/foo/tapestry/Bar.class"));
-        
-        assertTrue(rm.containsResource("/org/apache/tapestry/asset/subdirectory/foo.css"));
-        assertTrue(rm.containsResource("/org/apache/tapestry/html/dojo/dojo.js"));
-        assertTrue(rm.containsResource("/org/apache/tapestry/html/dojo/src/json.js"));
-    }
-
-    public void test_Relative_Paths()
-    {
-        AssetService service = new AssetService();
-        
-        assertEquals("/src", service.translatePath("/dojo/../src"));
-        assertEquals("src", service.translatePath("dojo/../src"));
-        assertEquals("/src", service.translatePath("/dojo/blah/../../src"));
-        assertEquals("src", service.translatePath("dojo/blah/../../src"));
-        assertEquals("/src", service.translatePath("/dojo/../blah/../src"));
-        assertEquals("src", service.translatePath("dojo/../blah/../src"));
-        assertEquals("/src/", service.translatePath("/dojo/../src/"));
-        assertEquals("src/", service.translatePath("dojo/../src/"));
-        assertEquals("/", service.translatePath("/dojo/../"));
-        assertEquals("", service.translatePath("dojo/../"));
-    }
-
-    public void test_Resource_Link_Paths()
-    {
-        LinkFactory factory = newMock(LinkFactory.class);
-        ILink link = newMock(ILink.class);
-        
-        AssetService service = new AssetService();
-        
-        ResourceMatcherImpl rm = new ResourceMatcherImpl();
-        List patterns = new ArrayList();
-        patterns.add("tapestry/*");
-        patterns.add("dojo/*");
-        rm.setContributions(patterns);
-        rm.initializeService();
-        
-        service.setUnprotectedMatcher(rm);
-        service.setLinkFactory(factory);
-        
-        expect(factory.constructLink(eq(service), eq(false), isA(Map.class), eq(false))).andReturn(link);
-        
-        replay();
-        
-        service.getLink(false, "dojo/src/html.js");
-        
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/base-resource.txt b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/base-resource.txt
deleted file mode 100644
index e69de29..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/base-resource.txt
+++ /dev/null
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/base-resource_fr.txt b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/base-resource_fr.txt
deleted file mode 100644
index e69de29..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/base-resource_fr.txt
+++ /dev/null
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/relative-resource.txt b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/relative-resource.txt
deleted file mode 100644
index e69de29..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/relative-resource.txt
+++ /dev/null
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/relative-resource_fr.txt b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/relative-resource_fr.txt
deleted file mode 100644
index e69de29..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/relative-resource_fr.txt
+++ /dev/null
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/subresource/sub-resource.txt b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/subresource/sub-resource.txt
deleted file mode 100644
index 4cbcc42..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/subresource/sub-resource.txt
+++ /dev/null
@@ -1 +0,0 @@
-sub-resource value
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/tapestry-in-action.png b/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/tapestry-in-action.png
deleted file mode 100644
index 98c73ea..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/asset/tapestry-in-action.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/InstantiateFailureBean.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/InstantiateFailureBean.java
deleted file mode 100644
index d431bc7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/InstantiateFailureBean.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.bean;

-

-/**

- * Used by {@link org.apache.tapestry.bean.TestBeanProvider} to check logic that reports errors

- * instantiating beans.

- * 

- * @author Howard M. Lewis Ship

- */

-public class InstantiateFailureBean

-{

-

-    public InstantiateFailureBean()

-    {

-        throw new RuntimeException("Boom!");

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/TargetBean.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/TargetBean.java
deleted file mode 100644
index 47cae6c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/TargetBean.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-/**
- * Used by {@link org.apache.tapestry.bean.TestLightweightBeanInitializer} to verify that
- * initialization does occur.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class TargetBean
-{
-    private boolean _required;
-
-    private int _minLength;
-
-    public int getMinLength()
-    {
-        return _minLength;
-    }
-
-    public void setMinLength(int minLength)
-    {
-        _minLength = minLength;
-    }
-
-    public boolean isRequired()
-    {
-        return _required;
-    }
-
-    public void setRequired(boolean required)
-    {
-        _required = required;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/TestBeanProvider.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/TestBeanProvider.java
deleted file mode 100644
index 91e9320..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/TestBeanProvider.java
+++ /dev/null
@@ -1,253 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.bean;

-

-import static org.easymock.EasyMock.expect;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.ClassResolver;

-import org.apache.hivemind.Location;

-import org.apache.hivemind.impl.DefaultClassResolver;

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.IBeanProvider;

-import org.apache.tapestry.IComponent;

-import org.apache.tapestry.INamespace;

-import org.apache.tapestry.IPage;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.services.ClassFinder;

-import org.apache.tapestry.services.Infrastructure;

-import org.apache.tapestry.spec.BeanSpecification;

-import org.apache.tapestry.spec.IBeanSpecification;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.bean.BeanProvider} (mostly new features added in release

- * 4.0).

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class TestBeanProvider extends BaseComponentTestCase

-{

-    public static class BeanInitializerFixture extends AbstractBeanInitializer

-    {

-        private final RuntimeException _exception;

-

-        public BeanInitializerFixture(String propertyName, RuntimeException exception)

-        {

-            setPropertyName(propertyName);

-            _exception = exception;

-        }

-

-        public void setBeanProperty(IBeanProvider provider, Object bean)

-        {

-            throw _exception;

-        }

-

-    }

-

-    protected IBeanSpecification newBeanSpec()

-    {

-        return newMock(IBeanSpecification.class);

-    }

-

-    protected void trainGetClassName(IBeanSpecification spec, String className)

-    {

-        expect(spec.getClassName()).andReturn(className);

-    }

-

-    public void testResolveClassFailure()

-    {

-        ClassResolver resolver = newResolver();

-        IPage page = newPage();

-        IComponent component = newComponent();

-        ClassFinder finder = newClassFinder();

-

-        trainForConstructor(page, component, resolver, finder);

-

-        replay();

-

-        BeanProvider bp = new BeanProvider(component);

-

-        verify();

-

-        IBeanSpecification bs = newBeanSpec();

-

-        trainGetClassName(bs, "org.foo.Bar");

-

-        trainFindClass(finder, "org.foo.Bar", null);

-

-        trainGetExtendedId(component, "Fred/barney");

-

-        Location l = newLocation();

-

-        trainGetLocation(bs, l);

-

-        replay();

-

-        try

-        {

-            bp.instantiateBean("wilma", bs);

-            unreachable();

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertEquals(

-                    "Unable to instantiate bean 'wilma' of component Fred/barney: Unable to find class org.foo.Bar within package list 'mypackage'.",

-                    ex.getMessage());

-            assertSame(component, ex.getComponent());

-            assertSame(l, ex.getLocation());

-        }

-

-        verify();

-    }

-

-    public void testInstantiateBeanFailure()

-    {

-        ClassResolver resolver = newResolver();

-        IPage page = newPage();

-        IComponent component = newComponent();

-        ClassFinder finder = newClassFinder();

-

-        trainForConstructor(page, component, resolver, finder);

-

-        replay();

-

-        BeanProvider bp = new BeanProvider(component);

-

-        verify();

-

-        IBeanSpecification bs = newBeanSpec();

-

-        trainGetClassName(bs, "org.foo.Bar");

-

-        trainFindClass(finder, "org.foo.Bar", InstantiateFailureBean.class);

-

-        trainGetExtendedId(component, "Fred/barney");

-

-        Location l = newLocation();

-

-        trainGetLocation(bs, l);

-

-        replay();

-

-        try

-        {

-            bp.instantiateBean("wilma", bs);

-            unreachable();

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertEquals(

-                    "Unable to instantiate bean 'wilma' (for component Fred/barney) as class org.apache.tapestry.bean.InstantiateFailureBean: Boom!",

-                    ex.getMessage());

-            assertSame(component, ex.getComponent());

-            assertSame(l, ex.getLocation());

-        }

-

-        verify();

-    }

-

-    private void trainForConstructor(IPage page, IComponent component, ClassResolver resolver,

-            ClassFinder classFinder)

-    {

-        IRequestCycle cycle = newCycle();

-        Infrastructure infrastructure = newMock(Infrastructure.class);

-        INamespace namespace = newMock(INamespace.class);

-

-        trainGetPage(component, page);

-

-        expect(page.getRequestCycle()).andReturn(cycle);

-

-        expect(cycle.getInfrastructure()).andReturn(infrastructure);

-

-        expect(infrastructure.getClassResolver()).andReturn(resolver);

-

-        expect(component.getNamespace()).andReturn(namespace);

-

-        expect(namespace.getPropertyValue("org.apache.tapestry.bean-class-packages"))

-        .andReturn("mypackage");

-

-        expect(infrastructure.getClassFinder()).andReturn(classFinder);

-    }

-

-    protected ClassFinder newClassFinder()

-    {

-        return newMock(ClassFinder.class);

-    }

-

-    private ClassResolver newResolver()

-    {

-        return newMock(ClassResolver.class);

-    }

-

-    public void testInitializeFailure()

-    {

-        ClassResolver resolver = new DefaultClassResolver();

-        IPage page = newPage();

-        IComponent component = newComponent();

-        ClassFinder finder = newClassFinder();

-

-        trainForConstructor(page, component, resolver, finder);

-

-        replay();

-

-        BeanProvider bp = new BeanProvider(component);

-

-        verify();

-

-        String className = TargetBean.class.getName();

-

-        trainFindClass(finder, className, TargetBean.class);

-

-        IBeanSpecification spec = new BeanSpecification();

-        spec.setClassName(className);

-

-        RuntimeException t = new RuntimeException("Blat!");

-

-        Location l = newLocation();

-

-        IBeanInitializer bi = new BeanInitializerFixture("foo", t);

-        bi.setLocation(l);

-

-        spec.addInitializer(bi);

-

-        trainGetExtendedId(component, "Fred/barney");

-

-        replay();

-

-        try

-        {

-            bp.instantiateBean("wilma", spec);

-            unreachable();

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertEquals(

-                    "Error initializing property foo of bean 'wilma' (of component Fred/barney): Blat!",

-                    ex.getMessage());

-            assertSame(TargetBean.class, ex.getComponent().getClass());

-            assertSame(l, ex.getLocation());

-            assertSame(t, ex.getRootCause());

-        }

-

-    }

-

-    private void trainFindClass(ClassFinder finder, String className, Class clazz)

-    {

-        expect(finder.findClass("mypackage", className)).andReturn(clazz);

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/TestLightweightBeanInitializer.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/TestLightweightBeanInitializer.java
deleted file mode 100644
index ab615ae..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/bean/TestLightweightBeanInitializer.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.bean.LightweightBeanInitializer}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestLightweightBeanInitializer extends BaseComponentTestCase
-{
-    public void testSuccess()
-    {
-        String initializer = "required,minLength=10";
-        TargetBean bean = new TargetBean();
-
-        assertEquals(false, bean.isRequired());
-        assertEquals(0, bean.getMinLength());
-
-        IBeanInitializer bi = new LightweightBeanInitializer(initializer);
-
-        assertEquals(initializer, bi.getPropertyName());
-
-        bi.setBeanProperty(null, bean);
-
-        assertEquals(true, bean.isRequired());
-        assertEquals(10, bean.getMinLength());
-    }
-
-    public void testFailure()
-    {
-        Location l = newLocation();
-
-        IBeanInitializer bi = new LightweightBeanInitializer("zip=zap");
-        bi.setLocation(l);
-
-        TargetBean bean = new TargetBean();
-
-        try
-        {
-            bi.setBeanProperty(null, bean);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Class org.apache.tapestry.bean.TargetBean "
-                    + "does not contain a property named 'zip'.", ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/BindingTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/BindingTestCase.java
deleted file mode 100644
index 1d1b590..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/BindingTestCase.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * Base class for building tests for {@link org.apache.tapestry.IBinding}implementations.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class BindingTestCase extends BaseComponentTestCase
-{
-    protected IComponent newComponent(String extendedId)
-    {
-        IComponent component = newMock(IComponent.class);
-
-        expect(component.getExtendedId()).andReturn(extendedId);
-
-        return component;
-    }
-
-    protected ValueConverter newValueConverter()
-    {
-        return newMock(ValueConverter.class);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/StateBindingTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/StateBindingTest.java
deleted file mode 100644
index 36b9d8c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/StateBindingTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.engine.state.ApplicationStateManager;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.binding.StateBinding}and
- * {@link org.apache.tapestry.binding.StateBindingFactory}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class StateBindingTest extends BaseComponentTestCase
-{
-
-    private ValueConverter newValueConverter()
-    {
-        return newMock(ValueConverter.class);
-    }
-
-    private IBinding newBinding(String objectName, ValueConverter vc, ApplicationStateManager asm,
-            Location location)
-    {
-        StateBindingFactory f = new StateBindingFactory();
-        f.setValueConverter(vc);
-        f.setApplicationStateManager(asm);
-
-        return f.createBinding(null, "binding description", objectName, location);
-    }
-
-    public void testSuccess()
-    {
-        ApplicationStateManager asm = newMock(ApplicationStateManager.class);
-        
-        expect(asm.exists("fred")).andReturn(true);
-        
-        ValueConverter vc = newValueConverter();
-
-        replay();
-
-        IBinding b = newBinding("fred", vc, asm, null);
-
-        assertEquals(Boolean.TRUE, b.getObject());
-        assertEquals(false, b.isInvariant());
-
-        verify();
-    }
-
-    public void testFailure()
-    {
-        Location l = fabricateLocation(22);
-
-        Throwable t = new RuntimeException("Nested exception.");
-        ApplicationStateManager asm = newMock(ApplicationStateManager.class);
-
-        expect(asm.exists("fred")).andThrow(t);
-        
-        ValueConverter vc = newValueConverter();
-
-        replay();
-
-        IBinding b = newBinding("fred", vc, asm, l);
-
-        try
-        {
-            b.getObject();
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Nested exception.", ex.getMessage());
-            assertSame(l, ex.getLocation());
-            assertSame(t, ex.getRootCause());
-        }
-
-        verify();
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestAssetBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestAssetBinding.java
deleted file mode 100644
index 2042454..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestAssetBinding.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestAssetBinding extends BindingTestCase
-{
-
-    public void testGetObject()
-    {
-        IAsset asset = newMock(IAsset.class);
-        IComponent component = newMock(IComponent.class);
-
-        expect(component.getAsset("fred")).andReturn(asset);
-
-        Location l = fabricateLocation(22);
-
-        ValueConverter vc = newValueConverter();
-
-        replay();
-
-        AssetBinding b = new AssetBinding("parameterName", vc, l, component, "fred");
-
-        assertSame(asset, b.getObject());
-
-        assertSame(l, b.getLocation());
-        assertEquals("fred", b.getDescription());
-
-        assertSame(component, b.getComponent());
-
-        verify();
-    }
-
-    public void testAssetMissing()
-    {
-        IComponent component = newMock(IComponent.class);
-
-        expect(component.getAsset("fred")).andReturn(null);
-
-        expect(component.getExtendedId()).andReturn("Home/foo");
-
-        Location l = fabricateLocation(22);
-
-        ValueConverter vc = newValueConverter();
-
-        replay();
-
-        IBinding b = new AssetBinding("parameterName", vc, l, component, "fred");
-
-        try
-        {
-            b.getObject();
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Component Home/foo does not contain an asset named 'fred'.", ex
-                    .getMessage());
-            assertSame(l, ex.getLocation());
-            assertSame(component, ex.getComponent());
-            assertSame(b, ex.getBinding());
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestBeanBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestBeanBinding.java
deleted file mode 100644
index 9d28d33..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestBeanBinding.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBeanProvider;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.testng.annotations.Test;
-
-/**
- * @author Howard M. Lewis Ship
- */
-@Test
-public class TestBeanBinding extends BaseComponentTestCase
-{
-    public void testCreate()
-    {
-        ValueConverter vc = newMock(ValueConverter.class);
-        
-        IComponent component = newComponent();
-        
-        IBeanProvider beanProvider = newMock(IBeanProvider.class);
-
-        Location l = fabricateLocation(21);
-
-        Object bean = new Object();
-
-        expect(component.getBeans()).andReturn(beanProvider);
-
-        expect(beanProvider.getBean("fred")).andReturn(bean);
-
-        replay();
-
-        BeanBinding binding = new BeanBinding("param", vc, l, component, "fred");
-
-        assertSame(bean, binding.getObject());
-
-        verify();
-
-        assertSame(component, binding.getComponent());
-        assertSame(l, binding.getLocation());
-        assertEquals("param", binding.getDescription());
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestClientIdBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestClientIdBinding.java
deleted file mode 100644
index 8512e3e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestClientIdBinding.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.binding.ClientIdBinding}. 
- */
-@Test
-public class TestClientIdBinding extends BindingTestCase
-{
-    public void test_Get_Object()
-    {
-        IComponent nested = newComponent();
-        IComponent component = newMock(IComponent.class);
-        
-        expect(component.getComponent("foo")).andReturn(nested);
-        expect(nested.getClientId()).andReturn("id");
-
-        ValueConverter vc = newValueConverter();
-
-        Location l = newLocation();
-
-        replay();
-
-        ClientIdBinding b = new ClientIdBinding("param", vc, l, component, "foo");
-
-        assertSame(component, b.getComponent());
-        assertSame("id", b.getObject());
-
-        verify();
-    }
-
-    public void test_Get_Object_Failure()
-    {
-        IComponent component = newMock(IComponent.class);
-
-        Throwable t = new ApplicationRuntimeException("No such component.");
-
-        expect(component.getComponent("foo")).andThrow(t);
-
-        ValueConverter vc = newValueConverter();
-
-        Location l = newLocation();
-
-        replay();
-
-        ClientIdBinding b = new ClientIdBinding("param", vc, l, component, "foo");
-
-        try
-        {
-            b.getObject();
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(t.getMessage(), ex.getMessage());
-            assertSame(t, ex.getRootCause());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestClientIdListBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestClientIdListBinding.java
deleted file mode 100644
index 5b0dc66..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestClientIdListBinding.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Tests functionality of {@link ClientIdListBinding}. 
- */
-@Test
-public class TestClientIdListBinding extends BindingTestCase {
-
-    public void test_Single_Component()
-    {
-        IComponent nested = newComponent();
-        IComponent component = newMock(IComponent.class);
-        ValueConverter vc = newValueConverter();
-
-        Map comps = new HashMap();
-        comps.put("foo", nested);
-        
-        expect(component.getComponents()).andReturn(comps);
-        expect(component.getComponent("foo")).andReturn(nested);
-        expect(nested.getClientId()).andReturn("fooClientId");
-
-        List clientIds = Arrays.asList("fooClientId");
-        
-        expect(vc.coerceValue(clientIds, List.class)).andReturn(clientIds);
-
-        Location l = newLocation();
-
-        replay();
-
-        ClientIdListBinding b = new ClientIdListBinding("param", vc, l, component, new String[]{"foo"});
-
-        assert component == b.getComponent();
-        assertEquals(b.getObject(List.class), Arrays.asList("fooClientId"));
-        
-        verify();
-    }
-
-    public void test_Multiple_Components()
-    {
-        IComponent compA = newComponent();
-        IComponent compB = newComponent();
-        ValueConverter vc = newValueConverter();
-        
-        IComponent component = newMock(IComponent.class);
-        checkOrder(component, false);
-        
-        Map comps = new HashMap();
-        comps.put("fred", compA);
-        comps.put("barney", compB);
-
-        expect(component.getComponents()).andReturn(comps).anyTimes();
-        expect(component.getComponent("fred")).andReturn(compA);
-        expect(compA.getClientId()).andReturn("comp_1");
-
-        expect(component.getComponent("barney")).andReturn(compB);
-        expect(compB.getClientId()).andReturn("comp_0");
-
-        List clientIds = Arrays.asList("comp_1", "comp_0");
-
-        expect(vc.coerceValue(clientIds, List.class)).andReturn(clientIds);
-
-        Location l = newLocation();
-
-        replay();
-
-        ClientIdListBinding b = new ClientIdListBinding("param", vc, l, component, new String[]{"fred", "barney"});
-
-        assert component == b.getComponent();
-        assertEquals(b.getObject(List.class), Arrays.asList("comp_1", "comp_0"));
-
-        verify();
-    }
-
-    public void test_Get_Object_Failure()
-    {
-        IComponent component = newMock(IComponent.class);
-        Map comps = new HashMap();
-        
-        expect(component.getComponents()).andReturn(comps);
-        expect(component.getPage()).andReturn(null);
-
-        ValueConverter vc = newValueConverter();
-
-        Location l = newLocation();
-
-        replay();
-
-        ClientIdListBinding b = new ClientIdListBinding("param", vc, l, component, new String[]{"foo"});
-
-        try
-        {
-            b.getObject();
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assert ex.getMessage().indexOf("id foo not found in container") > -1;
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestComponentBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestComponentBinding.java
deleted file mode 100644
index 346d946..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestComponentBinding.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.binding.ComponentBinding}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestComponentBinding extends BindingTestCase
-{
-    public void testGetObject()
-    {
-        IComponent nested = newComponent();
-        IComponent component = newMock(IComponent.class);
-        
-        expect(component.getComponent("foo")).andReturn(nested);
-
-        ValueConverter vc = newValueConverter();
-
-        Location l = newLocation();
-
-        replay();
-
-        ComponentBinding b = new ComponentBinding("param", vc, l, component, "foo");
-
-        assertSame(component, b.getComponent());
-        assertSame(nested, b.getObject());
-
-        verify();
-    }
-
-    public void testGetObjectFailure()
-    {
-        IComponent component = newMock(IComponent.class);
-
-        Throwable t = new ApplicationRuntimeException("No such component.");
-
-        expect(component.getComponent("foo")).andThrow(t);
-
-        ValueConverter vc = newValueConverter();
-
-        Location l = newLocation();
-
-        replay();
-
-        ComponentBinding b = new ComponentBinding("param", vc, l, component, "foo");
-
-        try
-        {
-            b.getObject();
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(t.getMessage(), ex.getMessage());
-            assertSame(t, ex.getRootCause());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestExpressionBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestExpressionBinding.java
deleted file mode 100644
index def64d0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestExpressionBinding.java
+++ /dev/null
@@ -1,305 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import ognl.Node;
-import ognl.enhance.ExpressionAccessor;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.ExpressionCache;
-import org.apache.tapestry.services.ExpressionEvaluator;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.binding.ExpressionBinding}.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestExpressionBinding extends BindingTestCase
-{
-
-    public void test_Invariant()
-    {
-        ExpressionEvaluator ev = newMock(ExpressionEvaluator.class);
-        ExpressionCache ec = newMock(ExpressionCache.class);
-        IComponent component = newMock(IComponent.class);
-        Location l = fabricateLocation(1);
-
-        Node compiled = newMock(Node.class);
-        //ExpressionAccessor accessor = newMock(ExpressionAccessor.class);
-
-        Object expressionValue = "EXPRESSION-VALUE";
-
-        ValueConverter vc = newValueConverter();
-
-        expect(ec.getCompiledExpression("exp")).andReturn(compiled);
-
-        expect(compiled.getAccessor()).andReturn(null);
-
-        expect(ev.isConstant("exp")).andReturn(true);
-
-        expect(ec.getCompiledExpression(component, "exp")).andReturn(compiled);
-
-        expect(ev.readCompiled(component, compiled)).andReturn(expressionValue);
-
-        expect(component.getExtendedId()).andReturn("Foo/bar");
-
-        replay();
-
-        ExpressionBinding b = new ExpressionBinding("param", l, vc, component, "exp", ev, ec);
-
-        assertEquals(true, b.isInvariant());
-
-        // A second time, to test the 'already initialized'
-        // code path.
-
-        assertEquals(true, b.isInvariant());
-
-        // Get the object, which should be cached.
-
-        assertSame(expressionValue, b.getObject());
-
-        assertSame(component, b.getComponent());
-
-        assertEquals(b.toString(), "ExpressionBinding[Foo/bar exp]");
-
-        verify();
-    }
-
-    public void test_Variant()
-    {
-        ExpressionEvaluator ev = newMock(ExpressionEvaluator.class);
-        ExpressionCache ec = newMock(ExpressionCache.class);
-        Location l = fabricateLocation(1);
-
-        IComponent component = newComponent();
-        Node compiled = newMock(Node.class);
-        ExpressionAccessor accessor = newMock(ExpressionAccessor.class);
-
-        Object expressionValue1 = new Object();
-        Object expressionValue2 = new Object();
-
-        ValueConverter vc = newValueConverter();
-
-        expect(ec.getCompiledExpression("exp")).andReturn(compiled);
-
-        expect(ev.isConstant("exp")).andReturn(false);
-
-        expect(ec.getCompiledExpression(component, "exp")).andReturn(compiled);
-
-        expect(compiled.getAccessor()).andReturn(accessor);
-
-        expect(ev.read(component, accessor)).andReturn(expressionValue1);
-        expect(ev.read(component, accessor)).andReturn(expressionValue2);
-
-        replay();
-
-        ExpressionBinding b = new ExpressionBinding("param", l, vc, component,
-                                                    "exp", ev, ec);
-
-        assertEquals(false, b.isInvariant());
-
-        // Check that the expression is re-evaluated on
-        // each call to getObject().
-
-        assertSame(expressionValue1, b.getObject());
-        assertSame(expressionValue2, b.getObject());
-
-        verify();
-    }
-
-    public void test_Set_Object()
-    {
-        ExpressionEvaluator ev = newMock(ExpressionEvaluator.class);
-        ExpressionCache ec = newMock(ExpressionCache.class);
-        Location l = fabricateLocation(1);
-
-        IComponent component = newComponent();
-        Node compiled = newMock(Node.class);
-        ValueConverter vc = newValueConverter();
-
-        expect(ec.getCompiledExpression("exp")).andReturn(compiled);
-
-        expect(ev.isConstant("exp")).andReturn(false);
-
-        Object newValue = new Object();
-
-        ev.writeCompiled(component, compiled, newValue);
-
-        expect(ec.getCompiledExpression(component, "exp")).andReturn(compiled);
-        expect(compiled.getAccessor()).andReturn(null);
-
-        replay();
-
-        ExpressionBinding b = new ExpressionBinding("param", l, vc, component,
-                                                    "exp", ev, ec);
-
-        b.setObject(newValue);
-
-        verify();
-    }
-
-    public void test_Set_Object_Invariant()
-    {
-        ExpressionEvaluator ev = newMock(ExpressionEvaluator.class);
-        ExpressionCache ec = newMock(ExpressionCache.class);
-        Location l = fabricateLocation(1);
-
-        IComponent component = newComponent();
-        Node compiled = newMock(Node.class);
-
-        ValueConverter vc = newValueConverter();
-
-        expect(ec.getCompiledExpression("exp")).andReturn(compiled);
-        expect(ev.isConstant("exp")).andReturn(true);
-
-        expect(component.getExtendedId()).andReturn("Foo/bar.baz");
-
-        replay();
-
-        ExpressionBinding b = new ExpressionBinding("parameter foo", l, vc, component,
-                                                    "exp", ev, ec);
-
-        try
-        {
-            b.setObject(new Object());
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Binding with value exp (ExpressionBinding[Foo/bar.baz exp]) may not be updated.",
-                         ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void test_Set_Object_Failure()
-    {
-        ExpressionEvaluator ev = newMock(ExpressionEvaluator.class);
-        ExpressionCache ec = newMock(ExpressionCache.class);
-        Location l = fabricateLocation(1);
-
-        IComponent component = newComponent();
-        Node compiled = newMock(Node.class);
-
-        ValueConverter vc = newValueConverter();
-
-        expect(ec.getCompiledExpression("exp")).andReturn(compiled);
-
-        expect(ev.isConstant("exp")).andReturn(false);
-
-        Object newValue = new Object();
-
-        RuntimeException innerException = new RuntimeException("Failure");
-
-        ev.writeCompiled(component, compiled, newValue);
-        expectLastCall().andThrow(innerException);
-
-        replay();
-
-        ExpressionBinding b = new ExpressionBinding("param", l, vc, component,
-                                                    "exp", ev, ec);
-
-        try
-        {
-            b.setObject(newValue);
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals(ex.getMessage(), "Failure");
-            assertSame(innerException, ex.getRootCause());
-        }
-
-        verify();
-    }
-
-    public void test_Compile_Expression_Failure()
-    {
-        ExpressionEvaluator ev = newMock(ExpressionEvaluator.class);
-        ExpressionCache ec = newMock(ExpressionCache.class);
-        Location l = fabricateLocation(1);
-
-        IComponent component = newComponent();
-        ValueConverter vc = newValueConverter();
-
-        Throwable innerException = new RuntimeException("Failure");
-
-        expect(ec.getCompiledExpression("exp")).andThrow(innerException);
-
-        replay();
-
-        ExpressionBinding b = new ExpressionBinding("param", l, vc, component,
-                                                    "exp", ev, ec);
-
-        try
-        {
-            b.isInvariant();
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Failure", ex.getMessage());
-            assertSame(innerException, ex.getRootCause());
-        }
-
-        verify();
-    }
-
-    public void test_Resolve_Expression_Failure()
-    {
-        ExpressionEvaluator ev = newMock(ExpressionEvaluator.class);
-        ExpressionCache ec = newMock(ExpressionCache.class);
-        Location l = fabricateLocation(1);
-
-        IComponent component = newComponent();
-        Node compiled = newMock(Node.class);
-        ValueConverter vc = newValueConverter();
-
-        expect(ec.getCompiledExpression("exp")).andReturn(compiled);
-
-        expect(ev.isConstant("exp")).andReturn(false);
-
-        Throwable innerException = new RuntimeException("Failure");
-
-        ec.getCompiledExpression(component, "exp");
-        expectLastCall().andThrow(innerException);
-
-        replay();
-
-        ExpressionBinding b = new ExpressionBinding("param", l, vc, component,
-                                                    "exp", ev, ec);
-
-        try
-        {
-            b.getObject();
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals(ex.getMessage(), "Failure");
-            assertSame(innerException, ex.getRootCause());
-        }
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestHiveMindBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestHiveMindBinding.java
deleted file mode 100644
index 27023a4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestHiveMindBinding.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.InjectedValueProvider;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.binding.HiveMindBinding}and
- * {@link org.apache.tapestry.binding.HiveMindBindingFactory}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestHiveMindBinding extends BindingTestCase
-{
-    private IBinding newBinding(ValueConverter converter, InjectedValueProvider provider,
-            String objectReference, Location location)
-    {
-        HiveMindBindingFactory factory = new HiveMindBindingFactory();
-
-        factory.setValueConverter(converter);
-        factory.setInjectedValueProvider(provider);
-
-        return factory.createBinding(null, "binding description", objectReference, location);
-    }
-
-    public void testSuccess()
-    {
-        Object injectedValue = new Object();
-        Location l = fabricateLocation(12);
-        
-        InjectedValueProvider provider = newMock(InjectedValueProvider.class);
-
-        expect(provider.obtainValue("spring:bean", l)).andReturn(injectedValue);
-
-        ValueConverter converter = newValueConverter();
-
-        replay();
-
-        IBinding binding = newBinding(converter, provider, "spring:bean", l);
-
-        assertSame(injectedValue, binding.getObject());
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestListenerMethodBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestListenerMethodBinding.java
deleted file mode 100644
index f3b13d0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestListenerMethodBinding.java
+++ /dev/null
@@ -1,257 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.*;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.listener.ListenerMap;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import org.testng.annotations.Test;
-
-/**
- * Test for {@link org.apache.tapestry.binding.ListenerMethodBinding}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestListenerMethodBinding extends BindingTestCase
-{
-    public void test_Invoke_Listener()
-    {
-        IComponent component = newComponent();
-        ListenerMap map = newListenerMap();
-        IActionListener listener = newListener();
-        Location l = newLocation();
-        IComponent sourceComponent = newComponent();
-        IRequestCycle cycle = newCycle();
-        ValueConverter vc = newValueConverter();
-
-        trainGetListener(component, map, listener);
-
-        listener.actionTriggered(sourceComponent, cycle);
-
-        replay();
-
-        ListenerMethodBinding b = new ListenerMethodBinding("param", vc, l, component, "foo");
-
-        assertSame(b, b.getObject());
-        assertSame(component, b.getComponent());
-
-        b.actionTriggered(sourceComponent, cycle);
-
-        verify();
-    }
-
-    public void test_To_String()
-    {
-        IComponent component = newComponent();
-        Location l = newLocation();
-        ValueConverter vc = newValueConverter();
-
-        trainGetExtendedId(component, "Fred/barney");
-        
-        replay();
-        
-        ListenerMethodBinding b = new ListenerMethodBinding("param", vc, l, component, "foo");
-
-        String toString = b.toString();
-        String description = toString.substring(toString.indexOf('[') + 1, toString.length() - 1);
-        
-        assertTrue(description.indexOf("param, component=Fred/barney, methodName=foo, location=") > -1);
-        
-        verify();
-    }
-
-    public void test_Invoke_And_Page_Redirect()
-    {
-        IComponent component = newComponent();
-        ListenerMap map = newListenerMap();
-        IActionListener listener = newListener();
-        Location l = newLocation();
-        ValueConverter vc = newValueConverter();
-        IComponent sourceComponent = newComponent();
-        IRequestCycle cycle = newCycle();
-
-        trainGetListener(component, map, listener);
-
-        listener.actionTriggered(sourceComponent, cycle);
-        
-        Throwable t = new PageRedirectException("TargetPage");
-        expectLastCall().andThrow(t);
-        
-        replay();
-
-        ListenerMethodBinding b = new ListenerMethodBinding("param", vc, l, component, "foo");
-
-        try
-        {
-            b.actionTriggered(sourceComponent, cycle);
-            unreachable();
-        }
-        catch (PageRedirectException ex)
-        {
-            assertSame(t, ex);
-        }
-
-        verify();
-    }
-
-    public void test_Invoke_And_Redirect()
-    {
-        IComponent component = newComponent();
-        ListenerMap map = newListenerMap();
-        IActionListener listener = newListener();
-        Location l = newLocation();
-        ValueConverter vc = newValueConverter();
-        IComponent sourceComponent = newComponent();
-        IRequestCycle cycle = newCycle();
-
-        trainGetListener(component, map, listener);
-
-        listener.actionTriggered(sourceComponent, cycle);
-        
-        Throwable t = new RedirectException("http://foo.bar");
-        expectLastCall().andThrow(t);
-
-        replay();
-
-        ListenerMethodBinding b = new ListenerMethodBinding("param", vc, l, component, "foo");
-
-        try
-        {
-            b.actionTriggered(sourceComponent, cycle);
-            unreachable();
-        }
-        catch (RedirectException ex)
-        {
-            assertSame(t, ex);
-        }
-
-        verify();
-    }
-
-    @Test(expectedExceptions = RenderRewoundException.class)
-    public void test_Invoke_Render_Rewound()
-    {        
-        IComponent component = newMock(IComponent.class);
-        ListenerMap map = newListenerMap();
-        IActionListener listener = newMock(IActionListener.class);
-        ValueConverter vc = newMock(ValueConverter.class);
-        IComponent sourceComponent = newMock(IComponent.class);
-        Location l = newMock(Location.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        trainGetListener(component, map, listener);
-
-        listener.actionTriggered(sourceComponent, cycle);
-
-        ApplicationRuntimeException t = new RenderRewoundException(null);
-        expectLastCall().andThrow(t);
-
-        replay();
-
-        ListenerMethodBinding b = new ListenerMethodBinding("param", vc, l, component, "foo");
-
-        b.actionTriggered(sourceComponent, cycle);
-
-        verify();
-    }
-
-    public void test_Invoke_Listener_Failure()
-    {
-        IComponent component = newComponent();
-        ListenerMap map = newListenerMap();
-        IActionListener listener = newListener();
-        Location l = newLocation();
-        ValueConverter vc = newValueConverter();
-        IComponent sourceComponent = newComponent();
-        IRequestCycle cycle = newCycle();
-
-        trainGetListener(component, map, listener);
-
-        listener.actionTriggered(sourceComponent, cycle);
-
-        Throwable t = new RuntimeException("Failure.");
-        expectLastCall().andThrow(t);
-
-        trainGetExtendedId(component, "Fred/barney");
-
-        replay();
-
-        ListenerMethodBinding b = new ListenerMethodBinding("param", vc, l, component, "foo");
-
-        try
-        {
-            b.actionTriggered(sourceComponent, cycle);
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals(
-                    "Exception invoking listener method foo of component Fred/barney: Failure.",
-                    ex.getMessage());
-            assertSame(component, ex.getComponent());
-            assertSame(l, ex.getLocation());
-            assertSame(b, ex.getBinding());
-        }
-
-        verify();
-    }
-
-    public void test_Get_Method_Name()
-    {
-        IComponent component = newComponent();
-        Location l = newLocation();
-        ValueConverter vc = newValueConverter();
-        
-        replay();
-
-        ListenerMethodBinding b = new ListenerMethodBinding("param", vc, l, component, "foo");
-
-        assertEquals(b.getMethodName(), "foo");
-
-        verify();
-    }
-
-    private void trainGetListener(IComponent component, ListenerMap lm, IActionListener listener)
-    {
-        trainGetListeners(component, lm);
-        trainGetListener(lm, "foo", listener);
-    }
-
-    private void trainGetListener(ListenerMap map, String methodName, IActionListener listener)
-    {
-        expect(map.getListener(methodName)).andReturn(listener);
-    }
-
-    private void trainGetListeners(IComponent component, ListenerMap lm)
-    {
-        expect(component.getListeners()).andReturn(lm);
-    }
-
-    private ListenerMap newListenerMap()
-    {
-        return newMock(ListenerMap.class);
-    }
-
-    private IActionListener newListener()
-    {
-        return newMock(IActionListener.class);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestLiteralBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestLiteralBinding.java
deleted file mode 100644
index 71fe86d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestLiteralBinding.java
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.coerce.ValueConverter;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.Date;
-
-/**
- * Tests for {@link org.apache.tapestry.binding.LiteralBinding}. It also tests some common
- * behaviors provided by {@link org.apache.tapestry.binding.AbstractBinding}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestLiteralBinding extends BindingTestCase
-{
-    public void test_Get_Object()
-    {
-        Location l = fabricateLocation(22);
-        ValueConverter vc = newValueConverter();
-
-        replay();
-
-        LiteralBinding b = new LiteralBinding("parameter foo", vc, l, "literal-value");
-
-        assertSame(l, b.getLocation());
-        assertEquals(b.getDescription(), "literal-value");
-        assertEquals("literal-value", b.getObject());
-
-        assertEquals(true, b.isInvariant());
-        assertNull(b.getComponent());
-
-        verify();
-    }
-
-    public void test_To_String()
-    {
-        Location l = fabricateLocation(22);
-        ValueConverter vc = newValueConverter();
-
-        replay();
-
-        LiteralBinding b = new LiteralBinding("parameter foo", vc, l, "literal-value");
-
-        assertEquals("StaticBinding[literal-value]", b.toString());
-
-        verify();
-    }
-
-    public void test_Get_Object_With_Class()
-    {
-        ValueConverter vc = newMock(ValueConverter.class);
-        Location l = fabricateLocation(99);
-        
-        Date date = new Date();
-
-        expect(vc.coerceValue("my-literal", Date.class)).andReturn(date);
-
-        replay();
-        
-        LiteralBinding b = new LiteralBinding("parameter foo", vc, l, "my-literal");
-
-        assertSame(date, b.getObject(Date.class));
-
-        verify();
-    }
-
-    public void test_Get_Object_Exception()
-    {
-        ValueConverter vc = newMock(ValueConverter.class);
-        Location location = fabricateLocation(99);
-        
-        Exception innerException = new RuntimeException("Failure");
-
-        expect(vc.coerceValue("my-literal", Date.class)).andThrow(innerException);
-        
-        replay();
-        
-        LiteralBinding b = new LiteralBinding("parameter foo", vc, location, "my-literal");
-
-        try
-        {
-            b.getObject(Date.class);
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals(ex.getMessage(), "Error converting value for my-literal: Failure");
-            assertSame(innerException, ex.getRootCause());
-            assertSame(location, ex.getLocation());
-            assertSame(b, ex.getBinding());
-        }
-
-        verify();
-    }
-
-    public void test_Set_Object()
-    {
-        Location l = fabricateLocation(22);
-        ValueConverter vc = newValueConverter();
-
-        replay();
-
-        LiteralBinding b = new LiteralBinding("parameter foo", vc, l, "literal-value");
-
-        try
-        {
-            b.setObject("fred");
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals(ex.getMessage() ,
-                    "Binding with value literal-value (StaticBinding[literal-value]) may not be updated.");
-            assertSame(b, ex.getBinding());
-            assertSame(l, ex.getLocation());
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestMessageBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestMessageBinding.java
deleted file mode 100644
index d7b5307..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestMessageBinding.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Messages;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.binding.MessageBinding}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestMessageBinding extends BindingTestCase
-{
-
-    public void testCreate()
-    {
-        IComponent component = newMock(IComponent.class);
-        ValueConverter vc = newValueConverter();
-        Location l = fabricateLocation(12);
-        
-        replay();
-
-        MessageBinding b = new MessageBinding("param", vc, l, component, "key");
-
-        assertSame(component, b.getComponent());
-        assertEquals("key", b.getKey());
-
-        verify();
-    }
-
-    public void testToString()
-    {
-        IComponent component = newComponent();
-        ValueConverter vc = newValueConverter();
-        Location l = fabricateLocation(12);
-        
-        expect(component.getExtendedId()).andReturn("Foo/bar.baz");
-
-        replay();
-
-        MessageBinding b = new MessageBinding("param", vc, l, component, "key");
-
-        assertEquals("MessageBinding[Foo/bar.baz key]", b.toString());
-
-        verify();
-    }
-
-    public void testGetObject()
-    {
-        Messages m = newMock(Messages.class);
-        IComponent component = newComponent();
-        Location l = fabricateLocation(12);
-        
-        ValueConverter vc = newValueConverter();
-
-        expect(component.getMessages()).andReturn(m);
-        
-        expect(m.getMessage("key")).andReturn("value");
-
-        replay();
-        MessageBinding b = new MessageBinding("param", vc, l, component, "key");
-
-        assertEquals("value", b.getObject());
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestMetaBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestMetaBinding.java
deleted file mode 100644
index 2903982..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/binding/TestMetaBinding.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.binding;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.ComponentPropertySource;
-import org.testng.annotations.Test;
-
-/**
- * Tests functionality of {@link MetaBinding}.
- */
-@Test
-public class TestMetaBinding extends BindingTestCase
-{
-    
-    public void test_Create()
-    {
-        IComponent component = newMock(IComponent.class);
-        ValueConverter vc = newValueConverter();
-        Location l = fabricateLocation(12);
-        ComponentPropertySource src = newMock(ComponentPropertySource.class);
-        
-        expect(src.getComponentProperty(component, "key")).andReturn("wiggle");
-        
-        replay();
-
-        MetaBinding b = new MetaBinding("param", vc, l, component, src, "key");
-        
-        assertSame(component, b.getComponent());
-        assertEquals(b.getObject(), "wiggle");
-
-        verify();
-    }
-
-    public void test_To_String()
-    {
-        IComponent component = newComponent();
-        ValueConverter vc = newValueConverter();
-        Location l = fabricateLocation(12);
-        ComponentPropertySource src = newMock(ComponentPropertySource.class);
-        
-        expect(component.getExtendedId()).andReturn("Foo/bar.baz");
-        
-        replay();
-
-        MetaBinding b = new MetaBinding("param", vc, l, component, src, "key");
-        
-        assertEquals(b.toString(), "MetaBinding[Foo/bar.baz key]");
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/callback/TestDirectCallback.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/callback/TestDirectCallback.java
deleted file mode 100644
index 6639ab6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/callback/TestDirectCallback.java
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.testng.annotations.Test;
-
-/**
- * @author Howard M. Lewis Ship
- */
-@Test
-public class TestDirectCallback extends BaseComponentTestCase
-{
-    public void testNoParams()
-    {
-        IPage page = newMock(IPage.class);
-        IDirect component = newMock(IDirect.class);
-
-        expect(component.getPage()).andReturn(page);
-
-        expect(page.getPageName()).andReturn("Fred");
-
-        expect(component.getIdPath()).andReturn("foo.bar");
-
-        replay();
-
-        DirectCallback callback = new DirectCallback(component, null);
-
-        assertEquals("DirectCallback[Fred/foo.bar]", callback.toString());
-
-        verify();
-
-        IRequestCycle cycle = newCycleGetPage("Fred", page);
-
-        expect(page.getNestedComponent("foo.bar")).andReturn(component);
-
-        cycle.setListenerParameters(null);
-
-        component.trigger(cycle);
-
-        replay();
-
-        callback.performCallback(cycle);
-
-        verify();
-    }
-
-    public void testWithParams()
-    {
-        Object[] params = new Object[]
-        { "p1", "p2" };
-
-        IPage page = newMock(IPage.class);
-        IDirect component = newMock(IDirect.class);
-
-        expect(component.getPage()).andReturn(page);
-
-        expect(page.getPageName()).andReturn("Barney");
-
-        expect(component.getIdPath()).andReturn("foo.bar");
-
-        replay();
-
-        DirectCallback callback = new DirectCallback(component, params);
-
-        assertEquals("DirectCallback[Barney/foo.bar p1, p2]", callback.toString());
-
-        verify();
-
-        IRequestCycle cycle = newCycleGetPage("Barney", page);
-
-        expect(page.getNestedComponent("foo.bar")).andReturn(component);
-
-        cycle.setListenerParameters(params);
-
-        component.trigger(cycle);
-
-        replay();
-
-        callback.performCallback(cycle);
-
-        verify();
-    }
-
-    public void testNotDirect()
-    {
-        IPage page = newMock(IPage.class);
-        IDirect component = newMock(IDirect.class);
-
-        expect(component.getPage()).andReturn(page);
-
-        expect(page.getPageName()).andReturn("Fred");
-        
-        expect(component.getIdPath()).andReturn("foo.bar");
-
-        replay();
-
-        DirectCallback callback = new DirectCallback(component, null);
-
-        assertEquals("DirectCallback[Fred/foo.bar]", callback.toString());
-
-        verify();
-
-        IRequestCycle cycle = newCycleGetPage("Fred", page);
-        
-        Location l = newLocation();
-        IComponent component2 = newComponent("Fred/foo.bar", l);
-        
-        expect(page.getNestedComponent("foo.bar")).andReturn(component2);
-
-        replay();
-
-        try
-        {
-            callback.performCallback(cycle);
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Component Fred/foo.bar does not implement the IDirect interface.", ex
-                    .getMessage());
-            assertSame(component2, ex.getComponent());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/callback/TestExternalCallback.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/callback/TestExternalCallback.java
deleted file mode 100644
index 85b27a9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/callback/TestExternalCallback.java
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.callback.ExternalCallback}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestExternalCallback extends BaseComponentTestCase
-{
-    private IExternalPage newExternalPage()
-    {
-        return newMock(IExternalPage.class);
-    }
-
-    private IExternalPage newExternalPage(String pageName)
-    {
-        IExternalPage page = newMock(IExternalPage.class);
-
-        expect(page.getPageName()).andReturn(pageName);
-
-        return page;
-    }
-
-    public void testByName()
-    {
-        Object[] parameters =
-        { "param1", "param2" };
-
-        IExternalPage page = newExternalPage();
-        IRequestCycle cycle = newCycleGetPage("Fred", page);
-
-        cycle.activate(page);
-
-        page.activateExternalPage(parameters, cycle);
-
-        replay();
-
-        ExternalCallback callback = new ExternalCallback("Fred", parameters);
-
-        assertEquals("ExternalCallback[Fred/param1, param2]", callback.toString());
-
-        callback.performCallback(cycle);
-
-        verify();
-    }
-
-    public void testByNameNoParameters()
-    {
-        IExternalPage page = newExternalPage();
-        IRequestCycle cycle = newCycleGetPage("Fred", page);
-
-        cycle.activate(page);
-
-        page.activateExternalPage(null, cycle);
-
-        replay();
-
-        ExternalCallback callback = new ExternalCallback("Fred", null);
-
-        assertEquals("ExternalCallback[Fred]", callback.toString());
-
-        callback.performCallback(cycle);
-
-        verify();
-    }
-
-    public void testByPage()
-    {
-        Object[] parameters =
-        { "param1", "param2" };
-
-        IExternalPage page = newExternalPage("Barney");
-        IRequestCycle cycle = newCycleGetPage("Barney", page);
-
-        cycle.activate(page);
-
-        page.activateExternalPage(parameters, cycle);
-
-        replay();
-
-        ExternalCallback callback = new ExternalCallback(page, parameters);
-
-        assertEquals("ExternalCallback[Barney/param1, param2]", callback.toString());
-
-        callback.performCallback(cycle);
-
-        verify();
-    }
-
-    public void testNotExternalPage()
-    {
-        IPage page = newPage();
-        IRequestCycle cycle = newCycleGetPage("Barney", page);
-
-        replay();
-
-        ExternalCallback callback = new ExternalCallback("Barney", null);
-
-        try
-        {
-            callback.performCallback(cycle);
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Page Barney does not implement the IExternalPage interface, and may not be used with the external service.",
-                    ex.getMessage());
-        }
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/callback/TestPageCallback.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/callback/TestPageCallback.java
deleted file mode 100644
index 6517827..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/callback/TestPageCallback.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.callback.PageCallback}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPageCallback extends BaseComponentTestCase
-{
-    public void testByString()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        cycle.activate("Fred");
-
-        replay();
-
-        PageCallback callback = new PageCallback("Fred");
-
-        assertEquals("PageCallback[Fred]", callback.toString());
-
-        callback.performCallback(cycle);
-
-        verify();
-    }
-
-    public void testByPage()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IPage page = newPage("Barney");
-
-        cycle.activate("Barney");
-
-        replay();
-
-        PageCallback callback = new PageCallback(page);
-
-        assertEquals("PageCallback[Barney]", callback.toString());
-
-        callback.performCallback(cycle);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/StringToPropertySelectionModelConverterTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/StringToPropertySelectionModelConverterTest.java
deleted file mode 100644
index da95d93..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/StringToPropertySelectionModelConverterTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.coerce;

-

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.form.IPropertySelectionModel;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.coerce.StringToPropertySelectionModelConverter} and

- * {@link org.apache.tapestry.coerce.StringConvertedPropertySelectionModel}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class StringToPropertySelectionModelConverterTest extends BaseComponentTestCase

-{

-    private IPropertySelectionModel newModel(String value)

-    {

-        return (IPropertySelectionModel) new StringToPropertySelectionModelConverter()

-                .convertValue(value);

-    }

-

-    private void assertValues(IPropertySelectionModel model, String... values)

-    {

-        assertEquals(values.length, model.getOptionCount());

-

-        for (int i = 0; i < values.length; i++)

-        {

-            assertEquals(values[i], model.getValue(i));

-            assertEquals(values[i], model.getOption(i));

-        }

-    }

-

-    private void assertLabels(IPropertySelectionModel model, String... labels)

-    {

-        assertEquals(labels.length, model.getOptionCount());

-

-        for (int i = 0; i < labels.length; i++)

-            assertEquals(labels[i], model.getLabel(i));

-    }

-

-    public void testJustLabels()

-    {

-        IPropertySelectionModel model = newModel("Green,Red,Blue");

-

-        assertValues(model, "Green", "Red", "Blue");

-        assertLabels(model, "Green", "Red", "Blue");

-    }

-

-    public void testLabelsAndValues()

-    {

-        IPropertySelectionModel model = newModel("Red=RED,Green=GREEN,Blue=BLUE");

-

-        assertValues(model, "RED", "GREEN", "BLUE");

-        assertLabels(model, "Red", "Green", "Blue");

-    }

-

-    public void testBlankValue()

-    {

-        IPropertySelectionModel model = newModel("--Colors--=,Red=RED,Green=GREEN,Blue=BLUE");

-

-        assertValues(model, "", "RED", "GREEN", "BLUE");

-        assertLabels(model, "--Colors--", "Red", "Green", "Blue");

-    }

-

-    public void testWhiteSpaceTrimmed()

-    {

-        IPropertySelectionModel model = newModel("--Colors--=\t,\n\tRed\t=\tRED\t,\n\tGreen\t=\tGREEN\t,\n\tBlue\t=\tBLUE\n");

-

-        assertValues(model, "", "RED", "GREEN", "BLUE");

-        assertLabels(model, "--Colors--", "Red", "Green", "Blue");

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestBooleanConverters.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestBooleanConverters.java
deleted file mode 100644
index d248673..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestBooleanConverters.java
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests several implementations of {@link org.apache.tapestry.coerce.TypeConverter}that return
- * Boolean values.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestBooleanConverters extends BaseComponentTestCase
-{
-    public void testStringToBoolean()
-    {
-        StringToBooleanConverter c = new StringToBooleanConverter();
-
-        assertSame(Boolean.TRUE, c.convertValue("fred"));
-
-        // The special case
-        assertSame(Boolean.FALSE, c.convertValue("false"));
-
-        assertSame(Boolean.FALSE, c.convertValue(" "));
-        assertSame(Boolean.FALSE, c.convertValue(""));
-
-        // Actually, null will never be passed in, but ..
-
-        assertSame(Boolean.FALSE, c.convertValue(null));
-    }
-
-    public void testMapToBoolean()
-    {
-        Map m = new HashMap();
-
-        TypeConverter c = new MapToBooleanConverter();
-
-        assertSame(Boolean.FALSE, c.convertValue(m));
-
-        m.put("foo", "bar");
-
-        assertSame(Boolean.TRUE, c.convertValue(m));
-    }
-
-    public void testNullToBoolean()
-    {
-        assertSame(Boolean.FALSE, new NullToBooleanConverter().convertValue("doesn't matter"));
-    }
-
-    public void testCollectionToBoolean()
-    {
-        List l = new ArrayList();
-        TypeConverter c = new CollectionToBooleanConverter();
-
-        assertSame(Boolean.FALSE, c.convertValue(l));
-
-        l.add("foo");
-
-        assertSame(Boolean.TRUE, c.convertValue(l));
-    }
-
-    public void testNumberToBoolean()
-    {
-        TypeConverter c = new NumberToBooleanConverter();
-
-        assertSame(Boolean.FALSE, c.convertValue(new Integer(0)));
-        assertSame(Boolean.TRUE, c.convertValue(new Integer(7)));
-    }
-
-    public void testObjectToBoolean()
-    {
-        TypeConverter c = new ObjectToBooleanConverter();
-
-        assertSame(Boolean.TRUE, c.convertValue("foo"));
-    }
-
-    public void testBooleanArrayToIterator()
-    {
-        TypeConverter c = new BooleanArrayToIteratorConverter();
-
-        boolean[] input =
-        { false, true, true, false };
-
-        Iterator i = (Iterator) c.convertValue(input);
-
-        for (int j = 0; j < input.length; j++)
-        {
-            Boolean expected = input[j] ? Boolean.TRUE : Boolean.FALSE;
-
-            assertSame(expected, i.next());
-        }
-
-        assertEquals(false, i.hasNext());
-
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestIteratorConverters.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestIteratorConverters.java
deleted file mode 100644
index c877426..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestIteratorConverters.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestIteratorConverters extends BaseComponentTestCase
-{
-    public void testObjectToIterator()
-    {
-        Object o = new Object();
-        TypeConverter c = new ObjectToIteratorConverter();
-
-        Iterator i = (Iterator) c.convertValue(o);
-
-        assertTrue(i.hasNext());
-        assertSame(o, i.next());
-        assertFalse(i.hasNext());
-    }
-
-    public void testNullToIterator()
-    {
-        TypeConverter c = new NullToIteratorConverter();
-
-        Iterator i = (Iterator) c.convertValue("will be null");
-
-        assertFalse(i.hasNext());
-    }
-
-    public void testCollectionToIterator()
-    {
-        Object o = new Object();
-        List l = Collections.singletonList(o);
-        TypeConverter c = new CollectionToIteratorConverter();
-
-        Iterator i = (Iterator) c.convertValue(l);
-
-        assertTrue(i.hasNext());
-        assertSame(o, i.next());
-        assertFalse(i.hasNext());
-    }
-
-    public void testObjectArrayToIterator()
-    {
-        Object o = new Object();
-        Object[] a = new Object[]
-        { o };
-
-        TypeConverter c = new ObjectArrayToIteratorConverter();
-
-        Iterator i = (Iterator) c.convertValue(a);
-
-        assertTrue(i.hasNext());
-        assertSame(o, i.next());
-        assertFalse(i.hasNext());
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestMisc.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestMisc.java
deleted file mode 100644
index 202f445..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestMisc.java
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for random, simple converters.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestMisc extends BaseComponentTestCase
-{
-    public void testCharArrayToIteratorConverter()
-    {
-        char[] characters = "Good Morning, Tapestry!".toCharArray();
-
-        CharArrayToIteratorConverter c = new CharArrayToIteratorConverter();
-
-        Iterator i = (Iterator) c.convertValue(characters);
-
-        for (int j = 0; j < characters.length; j++)
-        {
-            Character expected = new Character(characters[j]);
-            assertEquals(expected, i.next());
-        }
-        
-        assertEquals(false, i.hasNext());
-    }
-    
-    public void test_Simple_String_To_List_Converter()
-    {
-        String input = "simple";
-        
-        StringToListConverter c = new StringToListConverter();
-        
-        List conv = (List)c.convertValue(input);
-        
-        assert conv != null;
-        assert conv.size() == 1;
-        assert conv.get(0).equals(input);
-    }
-    
-    public void test_Null_String_To_List_Converter()
-    {
-        StringToListConverter c = new StringToListConverter();
-        
-        List conv = (List)c.convertValue(null);
-        
-        assert conv != null;
-        assert conv.size() == 0;
-    }
-    
-    public void test_String_To_List_Converter()
-    {
-        String input = "val1,val2,val3";
-        
-        StringToListConverter c = new StringToListConverter();
-        
-        List conv = (List)c.convertValue(input);
-        
-        assert conv != null;
-        assert conv.size() == 3;
-        assert conv.get(1).equals("val2");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestStringConverters.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestStringConverters.java
deleted file mode 100644
index 59be2b6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestStringConverters.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestStringConverters extends BaseComponentTestCase
-{
-    public void testObjectToString()
-    {
-        TypeConverter c = new ObjectToStringConverter();
-
-        Object o = new Object();
-
-        assertNull(c.convertValue(null));
-        assertEquals(o.toString(), c.convertValue(o));
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestTypeConverterWrapper.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestTypeConverterWrapper.java
deleted file mode 100644
index bbe77e4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestTypeConverterWrapper.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Collections;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.coerce.TypeConverterWrapper}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestTypeConverterWrapper extends BaseComponentTestCase
-{
-    public void testNonNull()
-    {
-        TypeConverter tc = newMock(TypeConverter.class);
-
-        Object expected = "BARNEY";
-
-        expect(tc.convertValue("FRED")).andReturn(expected);
-
-        replay();
-
-        TypeConverterContribution contrib = new TypeConverterContribution();
-        contrib.setSubjectClass(Object.class);
-        contrib.setConverter(tc);
-
-        TypeConverterWrapper w = new TypeConverterWrapper();
-
-        w.setContributions(Collections.singletonList(contrib));
-
-        w.initializeService();
-
-        Object actual = w.convertValue("FRED");
-
-        assertSame(expected, actual);
-
-        verify();
-    }
-
-    public void testNull()
-    {
-        TypeConverter tc = newMock(TypeConverter.class);
-
-        Object expected = "NULL";
-
-        expect(tc.convertValue(null)).andReturn(expected);
-
-        replay();
-
-        TypeConverterWrapper w = new TypeConverterWrapper();
-
-        w.setNullConverter(tc);
-
-        Object actual = w.convertValue(null);
-
-        assertSame(expected, actual);
-
-        verify();
-    }
-
-    public void testNullWithNoNullConverter()
-    {
-        TypeConverterWrapper w = new TypeConverterWrapper();
-
-        assertNull(w.convertValue(null));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestValueConverter.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestValueConverter.java
deleted file mode 100644
index a8838f2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/coerce/TestValueConverter.java
+++ /dev/null
@@ -1,225 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.coerce;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Collections;
-import java.util.Date;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.coerce.ValueConverterImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestValueConverter extends BaseComponentTestCase
-{
-
-    public void testAlreadyCorrectType()
-    {
-        ValueConverter v = new ValueConverterImpl();
-
-        Object input = new Integer(7);
-
-        assertSame(input, v.coerceValue(input, Integer.class));
-        assertSame(input, v.coerceValue(input, Number.class));
-    }
-
-    /**
-     * Check that primitive types are converted to equivalent wrapper classes for the assignable
-     * check. Ok, maybe we should check all the primitive types.
-     */
-
-    public void testAlreadyCorrectPrimitiveType()
-    {
-        ValueConverter v = new ValueConverterImpl();
-
-        Object input = new Integer(9);
-
-        assertSame(input, v.coerceValue(input, int.class));
-    }
-
-    public void testNoConverter()
-    {
-        ValueConverter v = new ValueConverterImpl();
-
-        try
-        {
-            v.coerceValue("FRED", Date.class);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(CoerceMessages.noConverter(String.class, Date.class), ex.getMessage());
-        }
-    }
-
-    /**
-     * Verify that the message generated for a primtive type identifies the wrapper class.
-     */
-
-    public void testNoConverterPrimitive()
-    {
-        ValueConverter v = new ValueConverterImpl();
-
-        try
-        {
-            v.coerceValue(new Object(), int.class);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(CoerceMessages.noConverter(Object.class, Integer.class), ex.getMessage());
-        }
-    }
-
-    public void testConverterFound()
-    {
-        TypeConverter tc = newMock(TypeConverter.class);
-
-        Object input = new Integer(7);
-        Object output = "SEVEN";
-
-        expect(tc.convertValue(input)).andReturn(output);
-
-        replay();
-
-        ValueConverterImpl v = new ValueConverterImpl();
-
-        TypeConverterContribution contrib = new TypeConverterContribution();
-
-        contrib.setSubjectClass(String.class);
-        contrib.setConverter(tc);
-
-        v.setContributions(Collections.singletonList(contrib));
-
-        v.initializeService();
-
-        assertSame(output, v.coerceValue(input, String.class));
-
-        verify();
-    }
-
-    public void testConverterFoundForNullValue()
-    {
-        TypeConverter tc = newMock(TypeConverter.class);
-
-        Object output = "NULL";
-
-        expect(tc.convertValue(null)).andReturn(output);
-
-        replay();
-
-        ValueConverterImpl v = new ValueConverterImpl();
-
-        TypeConverterContribution contrib = new TypeConverterContribution();
-
-        contrib.setSubjectClass(String.class);
-        contrib.setConverter(tc);
-
-        v.setContributions(Collections.singletonList(contrib));
-
-        v.initializeService();
-
-        assertSame(output, v.coerceValue(null, String.class));
-
-        verify();
-    }
-
-    public void testNoConverterFoundForNullValue()
-    {
-        ValueConverterImpl v = new ValueConverterImpl();
-
-        assertNull(v.coerceValue(null, Date.class));
-    }
-
-    public void testStringToNumberPrimitive()
-    {
-        ValueConverterImpl v = new ValueConverterImpl();
-
-        Object result = v.coerceValue("123", int.class);
-
-        assertEquals(new Integer(123), result);
-    }
-
-    public void testStringToNumberWrapper()
-    {
-        ValueConverterImpl v = new ValueConverterImpl();
-
-        Object result = v.coerceValue("47347437", Long.class);
-
-        assertEquals(new Long(47347437), result);
-    }
-
-    public void testInvalidStringToNumber()
-    {
-        ValueConverterImpl v = new ValueConverterImpl();
-
-        try
-        {
-            v.coerceValue("fred12345", double.class);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertExceptionSubstring(
-                    ex,
-                    "Unable to convert 'fred12345' to an instance of java.lang.Double");
-        }
-
-    }
-
-    public void testStringToNonNumericPrimitive()
-    {
-        TypeConverter tc = newMock(TypeConverter.class);
-
-        Object input = "false";
-        Object output = Boolean.FALSE;
-
-        expect(tc.convertValue(input)).andReturn(output);
-
-        replay();
-
-        ValueConverterImpl v = new ValueConverterImpl();
-
-        TypeConverterContribution contrib = new TypeConverterContribution();
-
-        contrib.setSubjectClass(Boolean.class);
-        contrib.setConverter(tc);
-
-        v.setContributions(Collections.singletonList(contrib));
-
-        v.initializeService();
-
-        assertSame(output, v.coerceValue(input, Boolean.class));
-
-        verify();
-    }
-
-    public void testNumberToNumber()
-    {
-        ValueConverterImpl v = new ValueConverterImpl();
-
-        Object result = v.coerceValue(new Integer(123), long.class);
-
-        assertEquals(new Long(123), result);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestAny.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestAny.java
deleted file mode 100644
index 33d1f58..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestAny.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.spec.ComponentSpecification;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for the {@link org.apache.tapestry.components.Any} component.
- * 
- */
-@Test
-public class TestAny extends BaseComponentTestCase
-{
-
-    public void testRender()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false, writer);
-        
-        Any any = newInstance(Any.class, new Object[] { "templateTagName", "span" });
-        
-        expect(cycle.renderStackPush(any)).andReturn(any);
-        
-        writer.begin("span");
-        
-        IRender body = newRender();
-        body.render(writer, cycle);
-
-        writer.end();
-        
-        expect(cycle.renderStackPop()).andReturn(any);
-        
-        replay();
-        
-        any.addBody(body);
-
-        any.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderWithInformalParameters()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false, writer);
-        IRender body = newRender();
-        IBinding binding = newBinding("fred");
-        
-        Any any = newInstance(Any.class, "templateTagName", "span", "specification", new ComponentSpecification());
-        
-        expect(cycle.renderStackPush(any)).andReturn(any);
-        
-        writer.begin("span");
-        writer.attribute("class", "fred");
-
-        body.render(writer, cycle);
-
-        writer.end();
-        
-        expect(cycle.renderStackPop()).andReturn(any);
-        
-        replay();
-
-        any.addBody(body);
-        any.setBinding("class", binding);
-
-        any.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRewind()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(true, writer);
-        IRender body = newRender();
-        
-        Any any = newInstance(Any.class, new Object[] { "templateTagName", "span" });
-        
-        expect(cycle.renderStackPush(any)).andReturn(any);
-        
-        body.render(writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(any);
-        
-        replay();
-
-        any.addBody(body);
-
-        any.render(writer, cycle);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestBlock.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestBlock.java
deleted file mode 100644
index aec22a8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestBlock.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.components.Block}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestBlock extends BaseComponentTestCase
-{
-    public void testRender()
-    {
-        final IComponent invoker = newComponent();
-
-        final Block block = (Block) newInstance(Block.class);
-
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(writer);
-
-        replay();
-
-        IRender body = new IRender()
-        {
-            public void render(IMarkupWriter pwriter, IRequestCycle pcycle)
-            {
-                assertSame(block.getInvoker(), invoker);
-            }
-        };
-
-        assertNull(block.getInvoker());
-
-        block.addBody(body);
-
-        block.renderForComponent(writer, cycle, invoker);
-
-        assertNull(block.getInvoker());
-
-        verify();
-    }
-
-    public void testGetParameter()
-    {
-        Object parameterValue = new Object();
-
-        IBinding binding = newBinding(parameterValue);
-        IComponent component = newComponent();
-        
-        expect(component.getBinding("fred")).andReturn(binding);
-        
-        replay();
-        
-        Block block = (Block) newInstance(Block.class);
-        
-        block.setInvoker(component);
-        
-        assertSame(parameterValue, block.getParameter("fred"));
-
-        verify();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestConditional.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestConditional.java
deleted file mode 100644
index e37d315..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestConditional.java
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.components.Conditional}&nbsp; component.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestConditional extends BaseComponentTestCase
-{
-    private IRender newRender(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IRender render = newMock(IRender.class);
-        
-        render.render(writer, cycle);
-
-        return render;
-    }
-
-    public void testFalseAndFalse()
-    {
-        Conditional conditional = newInstance(Conditional.class, new Object[]
-        { "condition", Boolean.FALSE, "invert", Boolean.FALSE });
-
-        conditional.renderComponent(null, null);
-    }
-
-    public void testTrueAndTrue()
-    {
-        Conditional conditional = newInstance(Conditional.class, new Object[]
-        { "condition", Boolean.TRUE, "invert", Boolean.TRUE });
-
-        conditional.renderComponent(null, null);
-    }
-
-    public void testRenderSimple()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false, writer);
-        IRender body = newRender(writer, cycle);
-        
-        Conditional conditional = newInstance(Conditional.class, 
-                new Object[] { "condition", Boolean.TRUE });
-        
-        expect(cycle.renderStackPush(conditional)).andReturn(conditional);
-        
-        conditional.addBody(body);
-        
-        expect(cycle.renderStackPop()).andReturn(conditional);
-        
-        replay();
-
-        conditional.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testIgnoreElementWhenRewinding()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IRender body = newMock(IRender.class);
-        
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        
-        Conditional conditional = newInstance(Conditional.class, 
-                new Object[] { "condition", Boolean.TRUE, "element", "div" });
-        
-        expect(cycle.renderStackPush(conditional)).andReturn(conditional);
-        
-        expect(cycle.isRewinding()).andReturn(true);
-        
-        expect(cycle.getResponseBuilder()).andReturn(builder);
-        
-        builder.render(writer, body, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(conditional);
-        
-        replay();
-        
-        conditional.addBody(body);
-        
-        conditional.render(writer, cycle);
-        
-        verify();
-    }
-
-    public void testElement()
-    {   
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false, null);
-        
-        IComponentSpecification spec = newSpec("informal", null);
-        IBinding informal = newBinding("informal-value");
-        
-        IRender body = newRender(writer, cycle);
-        
-        Conditional conditional = newInstance(Conditional.class, 
-                new Object[] { 
-            "condition", Boolean.TRUE, 
-            "element", "div", 
-            "specification", spec 
-        });
-        
-        conditional.addBody(body);
-        conditional.setBinding("informal", informal);
-        
-        expect(cycle.renderStackPush(conditional)).andReturn(conditional);
-        
-        writer.begin("div");
-        
-        writer.attribute("informal", "informal-value");
-
-        // We've trained body, but there's no way to ensure,
-        // using EasyMock, that methods are invoked in the correct
-        // order. But sometimes you have to trust the code (
-        // and trust that future developers won't break something
-        // that obvious!).
-        
-        trainResponseBuilder(cycle, writer);
-        
-        writer.end("div");
-        
-        expect(cycle.renderStackPop()).andReturn(conditional);
-        
-        replay();
-
-        conditional.render(writer, cycle);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java
deleted file mode 100644
index f5a09ea..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestForBean.java
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.components;
-
-import static org.easymock.EasyMock.*;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-import org.apache.tapestry.util.io.DataSqueezerImpl;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link ForBean} .
- *
- */
-@Test(sequential = true)
-public class TestForBean extends BaseComponentTestCase
-{   
-    public void test_Render()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IMarkupWriter writer = newBufferWriter();
-        ValueConverter conv = newMock(ValueConverter.class);
-        ResponseBuilder resp = newMock(ResponseBuilder.class);
-        IComponentSpecification spec = newSpec();
-        IParameterSpecification pspec = newMock(IParameterSpecification.class);
-        
-        List src = new ArrayList();
-        src.add("Test1");
-        src.add("Test2");
-        
-        IBinding source = newBinding(src);
-        
-        ForBean bean = newInstance(ForBean.class, new Object[] {
-            "valueConverter", conv,
-            "responseBuilder", resp,
-            "templateTagName", "div",
-            "renderTag", true,
-            "specification", spec
-            });
-        
-        expect(cycle.renderStackPush(bean)).andReturn(bean);
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(null);
-        
-        expect(spec.getParameter("source")).andReturn(pspec).anyTimes();
-        
-        expect(conv.coerceValue(src, Iterator.class)).andReturn(src.iterator());
-        
-        expect(resp.isDynamic()).andReturn(false).anyTimes();
-        
-        expect(cycle.getResponseBuilder()).andReturn(resp).anyTimes();
-        
-        IRender body = newMock(IRender.class);
-        
-        resp.render(writer, body, cycle);
-        expectLastCall().anyTimes();
-        
-        expect(cycle.renderStackPop()).andReturn(bean);
-        
-        replay();
-        
-        bean.addBody(body);
-        bean.setBinding("source", source);
-        
-        bean.render(writer, cycle);
-        
-        verify();
-        
-        assertBuffer("<div></div><div></div>");
-    }
-    
-    public void test_Rewind_Missing_Converter()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IMarkupWriter writer = newWriter();
-        ValueConverter conv = newMock(ValueConverter.class);
-        ResponseBuilder resp = newMock(ResponseBuilder.class);
-        IForm form = newMock(IForm.class);
-        IComponentSpecification spec = newSpec();
-       // IParameterSpecification pspec = newMock(IParameterSpecification.class);
-        
-        List src = new ArrayList();
-        src.add("Test1");
-        src.add("Test2");
-        
-        IBinding source = newBinding(src);
-        
-        ForBean bean = newInstance(ForBean.class, new Object[] {
-            "valueConverter", conv,
-            "responseBuilder", resp,
-            "templateTagName", "div",
-            "renderTag", true,
-            "specification", spec
-            });
-        
-        expect(cycle.renderStackPush(bean)).andReturn(bean);
-        
-        expect(cycle.isRewinding()).andReturn(true).anyTimes();
-        
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form);
-        
-        expect(form.isRewinding()).andReturn(true);
-        
-        expect(form.getElementId(bean)).andReturn("foo");
-        
-        String[] parms = (String[])src.toArray((new String[src.size()]));
-        
-        expect(cycle.getParameters("foo")).andReturn(parms);
-        
-        expect(conv.coerceValue(src, Iterator.class)).andReturn(src.iterator());
-        
-        expect(resp.isDynamic()).andReturn(false).anyTimes();
-        
-        expect(cycle.renderStackPop()).andReturn(bean);
-        
-        replay();
-        
-        // bean.addBody(body);
-        bean.setBinding("source", source);
-        
-        bean.render(writer, cycle);
-        
-        verify();
-    }
-    
-    class NotSerializable {
-        
-        String _value;
-        
-        public NotSerializable(String value)
-        {
-            _value = value;
-        }
-        
-        public String toString()
-        {
-            return "NotSerializable[" + _value + "]";
-        }
-    }
-    
-    public void test_Render_Line_Precise_Error()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IMarkupWriter writer = newBufferWriter();
-        ValueConverter conv = newMock(ValueConverter.class);
-        ResponseBuilder resp = newMock(ResponseBuilder.class);
-        IComponentSpecification spec = newSpec();
-        IParameterSpecification pspec = newMock(IParameterSpecification.class);
-        IForm form = newMock(IForm.class);
-        
-        List src = new ArrayList();
-        src.add(new NotSerializable("Test1"));
-        src.add(new NotSerializable("Test2"));
-        
-        IBinding source = newBinding(src);
-        
-        ForBean bean = newInstance(ForBean.class, new Object[] {
-            "valueConverter", conv,
-            "responseBuilder", resp,
-            "templateTagName", "div",
-            "renderTag", true,
-            "specification", spec,
-            "dataSqueezer", new DataSqueezerImpl()
-            });
-        
-        expect(cycle.renderStackPush(bean)).andReturn(bean);
-        
-        expect(cycle.isRewinding()).andReturn(false).anyTimes();
-        
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form);
-        
-        expect(form.getElementId(bean)).andReturn("For_1");
-        
-        expect(spec.getParameter("source")).andReturn(pspec).anyTimes();
-        
-        expect(conv.coerceValue(src, Iterator.class)).andReturn(src.iterator());
-        
-        expect(resp.isDynamic()).andReturn(false).anyTimes();
-        
-        expect(cycle.getResponseBuilder()).andReturn(resp).anyTimes();
-        
-        IRender body = newMock(IRender.class);
-        
-        resp.render(writer, body, cycle);
-        expectLastCall().anyTimes();
-        
-        form.setFormFieldUpdating(true);
-        
-        expect(cycle.renderStackPop()).andReturn(bean);
-        
-        replay();
-        
-        bean.addBody(body);
-        bean.setBinding("source", source);
-        
-        try {
-            
-            bean.render(writer, cycle);
-            fail("Exception should have been thrown");
-        } catch (ApplicationRuntimeException ex) {
-            
-            assertExceptionSubstring(ex, "error squeezing primary key value");
-        }
-        
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestIfElse.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestIfElse.java
deleted file mode 100644
index 16422b8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestIfElse.java
+++ /dev/null
@@ -1,419 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.services.DataSqueezer;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.io.DataSqueezerUtil;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.components.IfBean}&nbsp;
- * and {@link ElseBean}&nbsp;
- * components.
- * 
- * @author Mindbridge
- * @since 4.0
- */
-@Test
-public class TestIfElse extends BaseComponentTestCase
-{
-    private IRender newRender(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IRender render = newMock(IRender.class);
-        
-        render.render(writer, cycle);
-        
-        return render;
-    }
-
-    public void test_Render_Plain_True()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        IMarkupWriter writer = newWriter();
-        
-        IfBean conditional = newInstance(IfBean.class, 
-                new Object[] { "condition", Boolean.TRUE });
-        
-        ElseBean reverse = (ElseBean) newInstance(ElseBean.class);
-        
-        expect(cycle.renderStackPush(conditional)).andReturn(conditional);
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(null);
-        
-        trainResponseBuilder(cycle, writer);
-        
-        IRender body = newRender(writer, cycle);
-        
-        cycle.setAttribute(IfBean.IF_VALUE_ATTRIBUTE, Boolean.TRUE);
-        
-        expect(cycle.renderStackPop()).andReturn(conditional);
-        expect(cycle.renderStackPush(reverse)).andReturn(reverse);
-        expect(cycle.getAttribute(IfBean.IF_VALUE_ATTRIBUTE)).andReturn(Boolean.TRUE);
-        expect(cycle.renderStackPop()).andReturn(reverse);
-        
-        IRender body2 = newRender();
-        
-        replay();
-        
-        conditional.addBody(body);
-        
-        conditional.render(writer, cycle);
-        
-        reverse.addBody(body2);
-        reverse.render(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Render_Plain_False()
-    {
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-        
-        IfBean conditional = newInstance(IfBean.class, 
-                new Object[] { "condition", Boolean.FALSE });
-        
-        ElseBean reverse = (ElseBean) newInstance(ElseBean.class);
-        
-        expect(cycle.renderStackPush(conditional)).andReturn(conditional);
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(null);
-        
-        cycle.setAttribute(IfBean.IF_VALUE_ATTRIBUTE, Boolean.FALSE);
-        
-        expect(cycle.renderStackPop()).andReturn(conditional);
-        expect(cycle.renderStackPush(reverse)).andReturn(reverse);
-        expect(cycle.getAttribute(IfBean.IF_VALUE_ATTRIBUTE)).andReturn(Boolean.FALSE);
-        expect(cycle.isRewinding()).andReturn(false);
-        
-        trainResponseBuilder(cycle, writer);
-        
-        IRender body = newRender();
-        IRender body2 = newRender(writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(reverse);
-        
-        replay();
-        
-        conditional.addBody(body);
-        conditional.render(writer, cycle);
-        
-        reverse.addBody(body2);
-        reverse.render(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Render_In_Form_True()
-    {
-        IMarkupWriter writer = newWriter();
-        
-        IfBean conditional = newInstance(TestIfBean.class, 
-        		new Object[] { "condition", Boolean.TRUE });
-        
-        ElseBean reverse = (ElseBean) newInstance(ElseBean.class);
-        
-        IForm form = newMock(IForm.class);
-        IRequestCycle cycle = newCycle();
-        
-        expect(cycle.renderStackPush(conditional)).andReturn(conditional);
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form);
-        
-        expect(form.getElementId(conditional)).andReturn("If");
-        
-        form.addHiddenValue("If", "T");
-        
-        form.setFormFieldUpdating(true);
-        
-        trainResponseBuilder(cycle, writer);
-        
-        IRender body = newRender(writer, cycle);
-        
-        cycle.setAttribute(IfBean.IF_VALUE_ATTRIBUTE, Boolean.TRUE);
-        
-        expect(cycle.renderStackPop()).andReturn(conditional);
-        
-        expect(cycle.renderStackPush(reverse)).andReturn(reverse);
-        
-        expect(cycle.getAttribute(IfBean.IF_VALUE_ATTRIBUTE)).andReturn(Boolean.TRUE);
-        
-        IRender body2 = newRender();
-        
-        expect(cycle.renderStackPop()).andReturn(reverse);
-        
-        replay();
-        
-        conditional.addBody(body);
-        conditional.render(writer, cycle);
-        
-        reverse.addBody(body2);
-        reverse.render(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Render_In_Form_False()
-    {
-        IMarkupWriter writer = newWriter();
-        
-        IfBean conditional = newInstance(TestIfBean.class, 
-        		new Object[] { "condition", Boolean.FALSE });
-
-        ElseBean reverse = (ElseBean) newInstance(ElseBean.class);
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-        
-        expect(cycle.renderStackPush(conditional)).andReturn(conditional);
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form);
-
-        expect(form.getElementId(conditional)).andReturn("If");
-        
-        form.addHiddenValue("If", "F");
-        
-        form.setFormFieldUpdating(true);
-        
-        cycle.setAttribute(IfBean.IF_VALUE_ATTRIBUTE, Boolean.FALSE);
-        
-        expect(cycle.renderStackPop()).andReturn(conditional);
-        
-        expect(cycle.renderStackPush(reverse)).andReturn(reverse);
-        
-        expect(cycle.getAttribute(IfBean.IF_VALUE_ATTRIBUTE)).andReturn(Boolean.FALSE);
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        
-        trainResponseBuilder(cycle, writer);
-        
-        IRender body = newRender();
-        IRender body2 = newRender(writer, cycle);
-
-        expect(cycle.renderStackPop()).andReturn(reverse);
-        
-        replay();
-
-        conditional.addBody(body);
-        conditional.render(writer, cycle);
-        
-        reverse.addBody(body2);
-        reverse.render(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Ignore_Element_When_Rewinding_True()
-    {
-        IMarkupWriter writer = newWriter();
-        
-        IfBean conditional = newInstance(TestIfBean.class, 
-        		new Object[] { "condition", Boolean.TRUE, "element", "div" });
-        
-        ElseBean reverse = (ElseBean) newInstance(ElseBean.class);
-        
-        IForm form = newMock(IForm.class);
-        IRequestCycle cycle = newCycle();
-        
-        expect(cycle.renderStackPush(conditional)).andReturn(conditional);
-        
-        expect(cycle.isRewinding()).andReturn(true);
-        
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form);
-        
-        expect(form.isRewinding()).andReturn(true);
-        
-        expect(form.getElementId(conditional)).andReturn("If");
-        
-        expect(cycle.getParameter("If")).andReturn("T");
-        
-        trainResponseBuilder(cycle, writer);
-        
-        IRender body = newRender(writer, cycle);
-        
-        cycle.setAttribute(IfBean.IF_VALUE_ATTRIBUTE, Boolean.TRUE);
-        
-        expect(cycle.renderStackPop()).andReturn(conditional);
-        
-        expect(cycle.renderStackPush(reverse)).andReturn(reverse);
-        
-        expect(cycle.getAttribute(IfBean.IF_VALUE_ATTRIBUTE)).andReturn(Boolean.TRUE);
-        
-        IRender body2 = newRender();
-
-        expect(cycle.renderStackPop()).andReturn(reverse);
-        
-        replay();
-
-        conditional.addBody(body);
-        conditional.render(writer, cycle);
-        
-        reverse.addBody(body2);
-        reverse.render(writer, cycle);
-        
-        verify();
-    }
-
-    public void test_Ignore_Element_When_Rewinding_False()
-    {
-        IMarkupWriter writer = newWriter();
-        
-        IfBean conditional = newInstance(TestIfBean.class, 
-        		new Object[] { "condition", Boolean.TRUE, "element", "div" });
-        
-        ElseBean reverse = (ElseBean) newInstance(ElseBean.class);
-        
-        IForm form = newMock(IForm.class);
-        IRequestCycle cycle = newCycle();
-        
-        expect(cycle.renderStackPush(conditional)).andReturn(conditional);
-        
-        expect(cycle.isRewinding()).andReturn(true);
-        
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form);
-        
-        expect(form.isRewinding()).andReturn(true);
-        
-        expect(form.getElementId(conditional)).andReturn("If");
-        
-        expect(cycle.getParameter("If")).andReturn("F");
-        
-        cycle.setAttribute(IfBean.IF_VALUE_ATTRIBUTE, Boolean.FALSE);
-        
-        expect(cycle.renderStackPop()).andReturn(conditional);
-        
-        expect(cycle.renderStackPush(reverse)).andReturn(reverse);
-        
-        expect(cycle.getAttribute(IfBean.IF_VALUE_ATTRIBUTE)).andReturn(Boolean.FALSE);
-        
-        expect(cycle.isRewinding()).andReturn(true);
-        
-        trainResponseBuilder(cycle, writer);
-        
-        IRender body = newRender();
-        IRender body2 = newRender(writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(reverse);
-        
-        replay();
-
-        conditional.addBody(body);
-        conditional.render(writer, cycle);
-        
-        reverse.addBody(body2);
-        reverse.render(writer, cycle);
-        
-        verify();
-    }
-
-    public void test_Render_Tag()
-    {
-        IMarkupWriter writer = newWriter();
-        
-		IBinding informal = newBinding("informal-value");
-        IComponentSpecification spec = newSpec("informal", null);
-        
-        IRequestCycle cycle = newCycle();
-
-        IfBean conditional = newInstance(TestIfBean.class,
-                                         "condition", Boolean.TRUE,
-                                         "element", "div",
-                                         "specification", spec,
-                                         "renderTag", Boolean.TRUE,
-                                         "clientId", "testIf");
-        
-        expect(cycle.renderStackPush(conditional)).andReturn(conditional);
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(null);
-        
-        IRender body = newRender(writer, cycle);
-
-        writer.begin("div");
-        writer.attribute("id", "testIf");
-        writer.attribute("informal", "informal-value");
-
-        writer.end("div");
-        
-        trainResponseBuilder(cycle, writer);
-        
-        cycle.setAttribute(IfBean.IF_VALUE_ATTRIBUTE, Boolean.TRUE);
-        
-        expect(cycle.renderStackPop()).andReturn(conditional);
-        
-        replay();
-        
-        conditional.addBody(body);
-        conditional.setBinding("informal", informal);
-        
-        conditional.render(writer, cycle);
-        
-        verify();
-    }
-    
-    public void test_Render_Tag_False()
-    {
-        IMarkupWriter writer = newWriter();
-        IComponentSpecification spec = newSpec();
-        IRequestCycle cycle = newCycle();
-
-        IfBean conditional = newInstance(TestIfBean.class, 
-                new Object[] { 
-            "condition", Boolean.TRUE,
-            "specification", spec,
-            "renderTag", Boolean.FALSE,
-            "templateTagName", "fieldset"
-        });
-        
-        expect(cycle.renderStackPush(conditional)).andReturn(conditional);
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(null);
-        
-        trainResponseBuilder(cycle, writer);
-        
-        IRender body = newRender(writer, cycle);
-        
-        cycle.setAttribute(IfBean.IF_VALUE_ATTRIBUTE, Boolean.TRUE);
-        
-        expect(cycle.renderStackPop()).andReturn(conditional);
-        
-        replay();
-        
-        conditional.addBody(body);
-        
-        conditional.render(writer, cycle);
-        
-        verify();
-    }
-    
-    public static abstract class TestIfBean extends IfBean
-    {
-    	public TestIfBean() {
-    	}
-    	
-    	public DataSqueezer getDataSqueezer() {
-    		return DataSqueezerUtil.createUnitTestSqueezer();
-    	}
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestInsert.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestInsert.java
deleted file mode 100644
index a2d2d96..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestInsert.java
+++ /dev/null
@@ -1,356 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import static org.easymock.EasyMock.expect;
-
-import java.text.DateFormat;
-import java.text.Format;
-import java.util.Date;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for the {@link org.apache.tapestry.components.Insert}&nbsp; component.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInsert extends BaseComponentTestCase
-{
-    /**
-     * Returns a new page instance (not a mock page).
-     */
-
-    private IPage newBasePage(String name)
-    {
-        BasePage page = (BasePage) newInstance(BasePage.class);
-
-        page.setPageName(name);
-
-        return page;
-    }
-
-    public void test_Rewinding()
-    {
-        IRequestCycle cycle = newCycle(true);
-        
-        Insert insert = (Insert) newInstance(Insert.class);
-        
-        expect(cycle.renderStackPush(insert)).andReturn(insert);
-        
-        expect(cycle.renderStackPop()).andReturn(insert);
-        
-        replay();
-
-        insert.render(null, cycle);
-
-        verify();
-    }
-
-    public void test_Null_Value()
-    {
-        IRequestCycle cycle = newCycle(false);
-        
-        Insert insert = newInstance(Insert.class, 
-                new Object[] { "value", null });
-        
-        expect(cycle.renderStackPush(insert)).andReturn(insert);
-        
-        expect(cycle.renderStackPop()).andReturn(insert);
-        
-        replay();
-        
-        insert.render(null, cycle);
-
-        verify();
-    }
-
-    public void test_No_Format()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false);
-        
-        Insert insert = newInstance(Insert.class, 
-                new Object[] { "value", new Integer(42) });
-        
-        expect(cycle.renderStackPush(insert)).andReturn(insert);
-        
-        writer.print("42", false);
-        
-        expect(cycle.renderStackPop()).andReturn(insert);
-        
-        replay();
-        
-        insert.render(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Format()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false);
-        
-        Date date = new Date();
-        DateFormat format = DateFormat.getDateInstance();
-        String expected = format.format(date);
-        
-        Insert insert = newInstance(Insert.class, 
-                new Object[]{ "value", date, "format", format });
-        
-        expect(cycle.renderStackPush(insert)).andReturn(insert);
-        
-        writer.print(expected, false);
-        
-        expect(cycle.renderStackPop()).andReturn(insert);
-        
-        replay();
-
-        insert.render(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Unable_To_Format()
-    {
-        Object value = "xyzzyx";
-        Location l = fabricateLocation(87);
-        IBinding binding = newBinding(l);
-        
-        Format format = DateFormat.getInstance();
-        
-        Insert insert = newInstance(Insert.class, 
-                new Object[] { "value", value, "format", format });
-        
-        IRequestCycle cycle = newCycle(false);
-        IMarkupWriter writer = newWriter();
-        
-        IPage page = newBasePage("Flintstone");
-        
-        expect(cycle.renderStackPush(insert)).andReturn(insert);
-        
-        expect(cycle.renderStackPop()).andReturn(insert);
-        
-        replay();
-        
-        insert.setBinding("format", binding);
-        insert.setId("fred");
-        insert.setPage(page);
-        insert.setContainer(page);
-
-        try
-        {
-            insert.render(writer, cycle);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Flintstone/fred unable to format value 'xyzzyx': Cannot format given Object as a Date",
-                    ex.getMessage());
-            assertSame(insert, ex.getComponent());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    public void test_Raw()
-    {
-        IRequestCycle cycle = newCycle(false);
-        IMarkupWriter writer = newWriter();
-        
-        Insert insert = newInstance(Insert.class, 
-                new Object[] { "value", new Integer(42), "raw", Boolean.TRUE });
-        
-        expect(cycle.renderStackPush(insert)).andReturn(insert);
-        
-        writer.print("42", true);
-        
-        expect(cycle.renderStackPop()).andReturn(insert);
-        
-        replay();
-
-        insert.render(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Style_Class()
-    {
-        IBinding informal = newBinding("informal-value");
-        IBinding classBinding = newBinding("paisley");
-        
-        IRequestCycle cycle = newCycle(false, false);
-        IMarkupWriter writer = newWriter();
-        
-        IComponentSpecification spec = newSpec("informal", null);
-        
-        Insert insert = newInstance(Insert.class, 
-                new Object[] { 
-            "value", "42", 
-            "specification", spec,
-            "templateTagName", "span"
-        });
-        
-        expect(cycle.renderStackPush(insert)).andReturn(insert);
-        
-        writer.begin("span");
-        
-        expect(spec.getParameter("class")).andReturn(null);
-        
-        writer.attribute("class", "paisley");
-        writer.attribute("informal", "informal-value");
-        
-        writer.print("42", false);
-        writer.end();
-        
-        expect(cycle.renderStackPop()).andReturn(insert);
-        
-        replay();
-        
-        insert.setBinding("class", classBinding);
-        insert.setBinding("informal", informal);
-
-        insert.render(writer, cycle);
-
-        verify();
-    }
-    
-    public void test_Render_Breaks()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false);
-        
-        Insert component = newInstance(Insert.class,
-                new Object[] {
-            "value",
-        "Now is the time\nfor all good men\nto come to the aid of their Tapestry.",
-            "mode", InsertMode.BREAK
-            }
-        );
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        writer.print("Now is the time", false);
-        writer.beginEmpty("br");
-        writer.print("for all good men", false);
-        writer.beginEmpty("br");
-        writer.print("to come to the aid of their Tapestry.", false);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-        
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Render_Paras()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false);
-
-        Insert component = newInstance(Insert.class, 
-                new Object[] { "mode", InsertMode.PARAGRAPH, "value",
-        "Now is the time\nfor all good men\nto come to the aid of their Tapestry." });
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        writer.begin("p");
-        writer.print("Now is the time", false);
-        writer.end();
-
-        writer.begin("p");
-        writer.print("for all good men", false);
-        writer.end();
-
-        writer.begin("p");
-        writer.print("to come to the aid of their Tapestry.", false);
-        writer.end();
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-        
-        component.render(writer, cycle);
-
-        verify();
-    }
-    
-    public void test_Render_Raw()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false);
-
-        Insert component = newInstance(Insert.class, 
-                new Object[] { "value", "output\n<b>raw</b>", 
-            "raw", Boolean.TRUE, "mode", InsertMode.BREAK });
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        writer.print("output", true);
-        writer.beginEmpty("br");
-        writer.print("<b>raw</b>", true);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.finishLoad(cycle, null, null);
-        component.render(writer, cycle);
-
-        verify();
-    }
-    
-    public void test_Render_Nested_Raw()
-    {
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle(false);
-        
-        Insert component = newInstance(Insert.class, 
-                new Object[] { "value", "output\n<b>raw</b>", 
-            "raw", Boolean.TRUE, "mode", InsertMode.BREAK });
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        IMarkupWriter nested = writer.getNestedWriter();
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.finishLoad(cycle, null, null);
-        component.render(nested, cycle);
-        
-        verify();
-        
-        nested.close();
-        
-        assertBuffer("output<br /><b>raw</b>");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestInvokeListener.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestInvokeListener.java
deleted file mode 100644
index 0e2aa4a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestInvokeListener.java
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.components.InvokeListener}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInvokeListener extends BaseComponentTestCase
-{
-    private IActionListener newListener()
-    {
-        return newMock(IActionListener.class);
-    }
-
-    private ListenerInvoker newInvoker()
-    {
-        return newMock(ListenerInvoker.class);
-    }
-
-    public void testSuccess()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        IActionListener listener = newListener();
-        ListenerInvoker invoker = newInvoker();
-
-        Object[] parameters = new Object[0];
-        
-        InvokeListener component = newInstance(InvokeListener.class, 
-                new Object[] { 
-            "listener", listener, 
-            "parameters", parameters, 
-            "listenerInvoker", invoker, 
-        });
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        cycle.setListenerParameters(parameters);
-        invoker.invokeListener(listener, component, cycle);
-        cycle.setListenerParameters(null);
-
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testEnsureParametersClearedAfterException()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        
-        IActionListener listener = newListener();
-        
-        ListenerInvoker invoker = newMock(ListenerInvoker.class);
-
-        Throwable t = new RuntimeException();
-
-        Object[] parameters = new Object[0];
-        
-        InvokeListener component = newInstance(InvokeListener.class, 
-                new Object[] { 
-            "listener", listener, 
-            "parameters", parameters, 
-            "listenerInvoker", invoker, 
-        });
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        cycle.setListenerParameters(parameters);
-
-        invoker.invokeListener(listener, component, cycle);
-        expectLastCall().andThrow(t);
-        
-        cycle.setListenerParameters(null);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        try
-        {
-            component.render(writer, cycle);
-            unreachable();
-        }
-        catch (RuntimeException ex)
-        {
-            assertSame(t, ex);
-        }
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestRenderBlock.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestRenderBlock.java
deleted file mode 100644
index 0da08e4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/components/TestRenderBlock.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.components.RenderBlock} component.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestRenderBlock extends BaseComponentTestCase
-{
-    public void testNullBlock()
-    {
-        RenderBlock rb = (RenderBlock) newInstance(RenderBlock.class);
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        
-        expect(cycle.renderStackPush(rb)).andReturn(rb);
-        
-        expect(cycle.renderStackPop()).andReturn(rb);
-        
-        replay();
-
-        rb.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testNonNullBlock()
-    {
-        Block b = (Block)newInstance(Block.class);
-
-        RenderBlock rb = newInstance(RenderBlock.class, 
-                new Object[] { "block", b });
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        
-        expect(cycle.renderStackPush(rb)).andReturn(rb);
-        
-        b.renderForComponent(writer, cycle, rb);
-
-        expect(cycle.renderStackPop()).andReturn(rb);
-        
-        replay();
-
-        rb.render(writer, cycle);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/data/TestNullDataSqueezerFilter.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/data/TestNullDataSqueezerFilter.java
deleted file mode 100644
index 0ecf7a3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/data/TestNullDataSqueezerFilter.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright May 31, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.data;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.services.DataSqueezer;
-import org.testng.annotations.Test;
-
-
-/**
- * 
- * @author jcarman
- */
-@Test
-public class TestNullDataSqueezerFilter extends BaseComponentTestCase
-{
-    public void testSqueezeNull()
-    {
-        final NullDataSqueezerFilter filter = new NullDataSqueezerFilter();
-        
-        assertNull( filter.unsqueeze( filter.squeeze(( Object )null,null), null ) );
-    }
-    
-    public void testSqueezeNonNull()
-    {
-        final NullDataSqueezerFilter filter = new NullDataSqueezerFilter();
-        DataSqueezer mockSqueezer = newMock(DataSqueezer.class);
-        
-        expect(mockSqueezer.squeeze("Hello")).andReturn("World");
-        
-        replay();
-        
-        assertEquals("World", filter.squeeze("Hello", mockSqueezer));
-        
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/BaseDescribeTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/BaseDescribeTestCase.java
deleted file mode 100644
index 80cf17c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/BaseDescribeTestCase.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Base class for testing implementations of
- * {@link org.apache.tapestry.describe.DescribableStrategy} and
- * {@link org.apache.tapestry.describe.RenderStrategy}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class BaseDescribeTestCase extends BaseComponentTestCase
-{
-
-    protected IMarkupWriter newWriter()
-    {
-        return newMock(IMarkupWriter.class);
-    }
-
-    protected IRequestCycle newCycle()
-    {
-        return newMock(IRequestCycle.class);
-    }
-
-    protected HTMLDescriber newDescriber()
-    {
-        return newMock(HTMLDescriber.class);
-    }
-
-    protected DescriptionReceiver newReceiver()
-    {
-        return newMock(DescriptionReceiver.class);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/CookieStrategyTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/CookieStrategyTest.java
deleted file mode 100644
index dbb8670..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/CookieStrategyTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.describe;

-

-import org.testng.annotations.Test;

-

-import javax.servlet.http.Cookie;

-

-/**

- * Tests for {@link org.apache.tapestry.describe.CookieStrategy}.

- * 

- * @author Howard M. Lewis Ship

- */

-@Test

-public class CookieStrategyTest extends BaseDescribeTestCase

-{

-    public void testDescribeObject()

-    {

-        DescriptionReceiver receiver = newReceiver();

-

-        receiver.title("a-name=some-value");

-

-        replay();

-

-        Cookie cookie = new Cookie("a-name", "some-value");

-

-        CookieStrategy strategy = new CookieStrategy();

-

-        strategy.describeObject(cookie, receiver);

-

-        verify();

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/HTMLDescriptionReceiverTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/HTMLDescriptionReceiverTest.java
deleted file mode 100644
index 34810da..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/HTMLDescriptionReceiverTest.java
+++ /dev/null
@@ -1,481 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.describe.HTMLDescriptionReceiver}and
- * {@link org.apache.tapestry.describe.HTMLDescriberImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential = true)
-public class HTMLDescriptionReceiverTest extends BaseDescribeTestCase
-{
-    protected DescribableStrategy newStrategy()
-    {
-        return newMock(DescribableStrategy.class);
-    }
-
-    private void trainForTitle(IMarkupWriter writer, String title)
-    {
-        writer.begin("div");
-        writer.attribute("class", "described-object-title");
-        writer.print(title);
-        writer.end();
-        writer.println();
-
-        writer.begin("table");
-        writer.attribute("class", "described-object");
-        writer.println();
-    }
-
-    private void trainForSection(IMarkupWriter writer, String section)
-    {
-        writer.begin("tr");
-        writer.attribute("class", "section");
-        writer.begin("th");
-        writer.attribute("colspan", 2);
-        writer.print(section);
-        writer.end("tr");
-        writer.println();
-    }
-
-    private void trainForKeyValue(IMarkupWriter writer, String key, String value, boolean even)
-    {
-        writer.begin("tr");
-        writer.attribute("class", even ? "even" : "odd");
-        writer.begin("th");
-        if (key != null)
-            writer.print(key);
-        writer.end();
-        writer.begin("td");
-        writer.print(value);
-        writer.end("tr");
-        writer.println();
-    }
-
-    private void trainForNestedKeyValue(IMarkupWriter writer, String key, String value, boolean even)
-    {
-        writer.begin("tr");
-        writer.attribute("class", even ? "even" : "odd");
-        writer.begin("th");
-        if (key != null)
-            writer.print(key);
-        writer.end();
-        writer.begin("td");
-        writer.print(value);
-        writer.println();
-        writer.end("tr");
-        writer.println();
-    }
-
-    public void test_Set_Title_Twice_Fails()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy adapter = newStrategy();
-
-        replay();
-
-        DescriptionReceiver dr = new HTMLDescriptionReceiver(writer, adapter);
-
-        dr.title("First Title");
-
-        try
-        {
-            dr.title("Second Title");
-            unreachable();
-
-        }
-        catch (IllegalStateException ex)
-        {
-            assertEquals(DescribeMessages.setTitleOnce(), ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void test_Set_Section_Before_Title_Fails()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy adapter = newStrategy();
-
-        replay();
-
-        DescriptionReceiver dr = new HTMLDescriptionReceiver(writer, adapter);
-
-        try
-        {
-            dr.section("Section");
-            unreachable();
-        }
-        catch (IllegalStateException ex)
-        {
-            assertEquals(DescribeMessages.mustSetTitleBeforeSection(), ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void test_Int_Property()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy adapter = newStrategy();
-
-        trainForTitle(writer, "Object Title");
-        trainForSection(writer, "Section");
-        trainForKeyValue(writer, "intProperty", "97", true);
-
-        replay();
-
-        DescriptionReceiver dr = new HTMLDescriptionReceiver(writer, adapter);
-
-        dr.title("Object Title");
-        dr.section("Section");
-        dr.property("intProperty", 97);
-
-        verify();
-    }
-
-    public void test_Properties_Without_Section()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy adapter = newStrategy();
-
-        trainForTitle(writer, "Object Title");
-        trainForKeyValue(writer, "first", "1", true);
-        trainForKeyValue(writer, "second", "2", false);
-
-        replay();
-
-        DescriptionReceiver dr = new HTMLDescriptionReceiver(writer, adapter);
-
-        dr.title("Object Title");
-        dr.property("first", 1);
-        dr.property("second", 2);
-
-        verify();
-
-        trainForSection(writer, "Section 1");
-        trainForKeyValue(writer, "s1", "1", true);
-        trainForKeyValue(writer, "s2", "2", false);
-
-        replay();
-
-        dr.section("Section 1");
-        dr.property("s1", 1);
-        dr.property("s2", 2);
-
-        verify();
-    }
-
-    public void test_Finish_With_Properties()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy adapter = newStrategy();
-
-        trainForTitle(writer, "Object Title");
-        trainForKeyValue(writer, "first", "1", true);
-
-        replay();
-
-        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, adapter);
-
-        dr.title("Object Title");
-        dr.property("first", 1);
-
-        verify();
-
-        writer.end("table");
-        writer.println();
-
-        replay();
-
-        dr.finishUp(null);
-
-        verify();
-    }
-
-    public void test_Finish_No_Properties_No_Title()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy adapter = newStrategy();
-
-        String object = "Fred";
-
-        writer.print("Fred");
-        writer.println();
-
-        replay();
-
-        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, adapter);
-
-        dr.finishUp(object);
-
-        verify();
-    }
-
-    public void test_Finish_No_Properties_With_Title()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy adapter = newStrategy();
-
-        String object = "Fred";
-
-        writer.print("Fred Title");
-        writer.println();
-
-        replay();
-
-        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, adapter);
-
-        dr.title("Fred Title");
-
-        dr.finishUp(object);
-
-        verify();
-    }
-
-    public void test_Array()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy adapter = new NoOpStrategy();
-
-        Object[] array = new Object[]
-        { "Fred", "Barney" };
-
-        trainForTitle(writer, "Array");
-        trainForNestedKeyValue(writer, "list", "Fred", true);
-        trainForNestedKeyValue(writer, null, "Barney", false);
-
-        replay();
-
-        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, adapter);
-
-        dr.title("Array");
-        dr.array("list", array);
-
-        verify();
-    }
-
-    public void test_Collection()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy adapter = new NoOpStrategy();
-
-        Object[] array = new Object[]
-        { "Fred", "Barney" };
-        Collection collection = Arrays.asList(array);
-
-        trainForTitle(writer, "Collection");
-        trainForNestedKeyValue(writer, "list", "Fred", true);
-        trainForNestedKeyValue(writer, null, "Barney", false);
-
-        replay();
-
-        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, adapter);
-
-        dr.title("Collection");
-        dr.collection("list", collection);
-
-        verify();
-    }
-
-    public void test_Array_Null_And_Empty()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy strategy = newStrategy();
-
-        replay();
-
-        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, strategy);
-
-        dr.title("Array");
-        dr.array("null", null);
-        dr.array("empty", new Object[0]);
-
-        verify();
-    }
-
-    public void test_Collection_Null_And_Empty()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy strategy = newStrategy();
-
-        replay();
-
-        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, strategy);
-
-        dr.title("Collection");
-        dr.collection("null", null);
-        dr.collection("empty", Collections.EMPTY_LIST);
-
-        verify();
-    }
-
-    public void test_Collection_Concurrent_Modification()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy adapter = new NoOpStrategy();
-        
-        final List list = new ArrayList();
-        list.add("Fred");
-        list.add("Barney");
-        
-        trainForTitle(writer, "Collection");
-        trainForNestedKeyValue(writer, "list", "Fred", true);
-        trainForNestedKeyValue(writer, null, "Barney", false);
-        
-        replay();
-        
-        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, adapter);
-        
-        dr.title("Collection");
-        dr.collection("list", list);
-        
-        verify();
-    }
-    
-    public void test_Scalar_Properties()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy strategy = newStrategy();
-
-        trainForTitle(writer, "Scalars");
-        trainForKeyValue(writer, "boolean", "true", true);
-        trainForKeyValue(writer, "byte", "22", false);
-        trainForKeyValue(writer, "char", "*", true);
-        trainForKeyValue(writer, "short", "-8", false);
-        trainForKeyValue(writer, "int", "900", true);
-        trainForKeyValue(writer, "long", "200020", false);
-        trainForKeyValue(writer, "float", "3.14", true);
-        trainForKeyValue(writer, "double", "-2.7", false);
-
-        replay();
-
-        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, strategy);
-
-        dr.title("Scalars");
-        dr.property("boolean", true);
-        dr.property("byte", (byte) 22);
-        dr.property("char", '*');
-        dr.property("short", (short) -8);
-        dr.property("int", 900);
-        dr.property("long", 200020l);
-        dr.property("float", (float) 3.14);
-        dr.property("double", -2.7);
-
-        verify();
-    }
-
-    public void test_Null_Root()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy strategy = newStrategy();
-
-        writer.print(HTMLDescriptionReceiver.NULL_VALUE);
-
-        replay();
-
-        RootDescriptionReciever dr = new HTMLDescriptionReceiver(writer, strategy);
-
-        dr.describe(null);
-
-        verify();
-    }
-
-    public void test_Null_Property()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy strategy = newStrategy();
-
-        trainForTitle(writer, "Null Property");
-        trainForKeyValue(writer, "null", HTMLDescriptionReceiver.NULL_VALUE, true);
-
-        replay();
-
-        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, strategy);
-
-        dr.title("Null Property");
-        dr.property("null", null);
-
-        verify();
-
-    }
-
-    public void test_HTML_Describer()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy strategy = new NoOpStrategy();
-
-        RootDescriptionReceiverFactory factory = newReceiverFactory();
-
-        trainGetReciever(factory, writer, new HTMLDescriptionReceiver(writer, strategy));
-
-        String object = "Tapestry";
-
-        writer.print("Tapestry");
-        writer.println();
-
-        replay();
-
-        HTMLDescriberImpl d = new HTMLDescriberImpl();
-        d.setReceiverFactory(factory);
-
-        d.describeObject(object, writer);
-
-        verify();
-    }
-
-    protected void trainGetReciever(RootDescriptionReceiverFactory factory, IMarkupWriter writer,
-            RootDescriptionReciever receiver)
-    {
-        expect(factory.newRootDescriptionReceiver(writer)).andReturn(receiver);
-    }
-
-    protected RootDescriptionReceiverFactory newReceiverFactory()
-    {
-        return newMock(RootDescriptionReceiverFactory.class);
-    }
-    
-    public void test_Describe_Alternate()
-    {
-        IMarkupWriter writer = newWriter();
-        DescribableStrategy strategy = newStrategy();
-
-        Object alternate = new Object();
-
-        HTMLDescriptionReceiver dr = new HTMLDescriptionReceiver(writer, strategy);
-
-        strategy.describeObject(alternate, dr);
-
-        replay();
-
-        dr.describeAlternate(alternate);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/Long.txt b/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/Long.txt
deleted file mode 100644
index 51ea864..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/Long.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Line One
-Two
-Three
-Four
-Five
-Six
-Seven
-Eight
-Nine
-Ten
-Eleven
-Twelve
-Thirteen
-Fourteen
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/NoOpStrategy.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/NoOpStrategy.java
deleted file mode 100644
index b06fc43..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/NoOpStrategy.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-/**

- * 

- */

-package org.apache.tapestry.describe;

-

-public class NoOpStrategy implements DescribableStrategy

-{

-    public void describeObject(Object object, DescriptionReceiver receiver)

-    {

-        // Does nothing; sufficient for the tests.

-    }

-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/ObjectArrayRenderStrategyTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/ObjectArrayRenderStrategyTest.java
deleted file mode 100644
index 82478ad..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/ObjectArrayRenderStrategyTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.describe;

-

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link ObjectArrayRenderStrategy}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class ObjectArrayRenderStrategyTest extends BaseDescribeTestCase

-{

-    public void testEmpty()

-    {

-        Object[] array = new Object[0];

-

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle();

-

-        writer.begin("em");

-        writer.print("empty list");

-        writer.end();

-

-        replay();

-

-        new ObjectArrayRenderStrategy().renderObject(array, writer, cycle);

-

-        verify();

-    }

-

-    public void testNonEmpty()

-    {

-        Object o1 = new Object();

-        Object o2 = new Object();

-

-        Object array = new Object[]

-        { o1, o2 };

-

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle();

-        RenderStrategy strategy = newMock(RenderStrategy.class);

-

-        // Alas; this doesn't *prove* that the code executes

-        // in the right order, just that the messages for

-        // each mock execute in the right order. We'll

-        // trust that and the code and hope for the best.

-

-        writer.begin("ul");

-        writer.begin("li");

-

-        strategy.renderObject(o1, writer, cycle);

-

-        writer.end();

-        writer.begin("li");

-

-        strategy.renderObject(o2, writer, cycle);

-

-        writer.end();

-        writer.end();

-

-        replay();

-

-        ObjectArrayRenderStrategy subject = new ObjectArrayRenderStrategy();

-

-        subject.setRenderStrategy(strategy);

-

-        subject.renderObject(array, writer, cycle);

-

-        verify();

-    }

-

-    public void testNullInArray()

-    {

-        Object[] array =

-        { null };

-

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle();

-

-        writer.begin("ul");

-        writer.begin("li");

-        writer.begin("em");

-        writer.print("<NULL>");

-        writer.end();

-        writer.end();

-        writer.end();

-

-        replay();

-

-        new ObjectArrayRenderStrategy().renderObject(array, writer, cycle);

-

-        verify();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/PreformattedRenderableStrategyTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/PreformattedRenderableStrategyTest.java
deleted file mode 100644
index 07a4f70..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/PreformattedRenderableStrategyTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.describe;

-

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link PreformattedRenderStrategy}.

- * 

- * @author Howard M. Lewis Ship

- */

-@Test

-public class PreformattedRenderableStrategyTest extends BaseDescribeTestCase

-{

-    public void testRenderObject()

-    {

-        String object = "some verbose object";

-

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle();

-

-        writer.begin("pre");

-        writer.print(object);

-        writer.end();

-

-        replay();

-

-        new PreformattedRenderStrategy().renderObject(object, writer, cycle);

-

-        verify();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/ReportStatusHubTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/ReportStatusHubTest.java
deleted file mode 100644
index 3111d56..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/ReportStatusHubTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.describe;

-

-import static org.easymock.EasyMock.expect;

-

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.event.ReportStatusEvent;

-import org.apache.tapestry.event.ReportStatusListener;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.describe.ReportStatusHubImpl}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class ReportStatusHubTest extends BaseDescribeTestCase

-{

-    private RootDescriptionReceiverFactory newReceiverFactory(IMarkupWriter writer,

-            RootDescriptionReciever receiver)

-    {

-        RootDescriptionReceiverFactory factory = newReceiverFactory();

-

-        expect(factory.newRootDescriptionReceiver(writer)).andReturn(receiver);

-

-        return factory;

-    }

-

-    private RootDescriptionReceiverFactory newReceiverFactory()

-    {

-        return newMock(RootDescriptionReceiverFactory.class);

-    }

-

-    private static class ListenerFixture implements ReportStatusListener

-    {

-

-        public void reportStatus(ReportStatusEvent event)

-        {

-            event.title("Listener Invoked");

-        }

-

-    }

-

-    public void testAddAndFire()

-    {

-        IMarkupWriter writer = newWriter();

-        RootDescriptionReciever receiver = newRootReceiver();

-        RootDescriptionReceiverFactory factory = newReceiverFactory(writer, receiver);

-

-        receiver.title("Listener Invoked");

-

-        receiver.finishUp();

-

-        replay();

-

-        ReportStatusHubImpl hub = new ReportStatusHubImpl();

-

-        hub.setReceiverFactory(factory);

-

-        hub.addReportStatusListener(new ListenerFixture());

-

-        hub.fireReportStatus(writer);

-

-        verify();

-    }

-

-    public void testRemove()

-    {

-        IMarkupWriter writer = newWriter();

-        RootDescriptionReceiverFactory factory = newReceiverFactory();

-

-        replay();

-

-        ReportStatusHubImpl hub = new ReportStatusHubImpl();

-

-        hub.setReceiverFactory(factory);

-

-        ListenerFixture listener = new ListenerFixture();

-        hub.addReportStatusListener(listener);

-        hub.removeReportStatusListener(listener);

-

-        hub.fireReportStatus(writer);

-

-        verify();

-

-    }

-

-    private RootDescriptionReciever newRootReceiver()

-    {

-        return newMock(RootDescriptionReciever.class);

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/Short.txt b/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/Short.txt
deleted file mode 100644
index 2460717..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/Short.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Line One
-Two
-Three
-Four
-Five
-Six
-Seven
-Eight
-Nine
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/TestLocationRenderStrategy.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/TestLocationRenderStrategy.java
deleted file mode 100644
index e692028..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/TestLocationRenderStrategy.java
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.net.URL;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.LocationImpl;
-import org.apache.hivemind.util.URLResource;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.describe.LocationRenderStrategy}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestLocationRenderStrategy extends BaseDescribeTestCase
-{
-    private Resource newResource(URL url)
-    {
-        Resource resource = newMock(Resource.class);
-        checkOrder(resource, false);
-        
-        expect(resource.getResourceURL()).andReturn(url);
-
-        return resource;
-    }
-
-    private Location newLocation(String file, int lineNumber)
-    {
-        URL url = getClass().getResource(file);
-
-        Resource resource = new URLResource(url);
-
-        return new LocationImpl(resource, lineNumber);
-    }
-
-    private void train(IMarkupWriter writer, int startLine, int lineNumber, String[] lines)
-    {
-        writer.beginEmpty("br");
-        writer.begin("table");
-        writer.attribute("class", "location-content");
-
-        for (int i = 0; i < lines.length; i++)
-        {
-            int currentLine = startLine + i;
-
-            writer.begin("tr");
-
-            if (currentLine == lineNumber)
-                writer.attribute("class", "target-line");
-
-            writer.begin("td");
-            writer.attribute("class", "line-number");
-            writer.print(currentLine);
-            writer.end();
-
-            writer.begin("td");
-            writer.print(lines[i]);
-            writer.end("tr");
-            writer.println();
-        }
-
-        writer.end("table");
-    }
-
-    public void testNoLineNumber()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-
-        writer.print(l.toString());
-        
-        expect(l.getLineNumber()).andReturn(0);
-        
-        replay();
-
-        new LocationRenderStrategy().renderObject(l, writer, cycle);
-
-        verify();
-    }
-
-    public void testNoURL()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        Resource resource = newResource(null);
-        Location l = fabricateLocation(99);
-
-        expect(l.getResource()).andReturn(resource);
-
-        writer.print(l.toString());
-
-        replay();
-
-        new LocationRenderStrategy().renderObject(l, writer, cycle);
-
-        verify();
-    }
-
-    /**
-     * Test when the highlight line is close to the end of the document.
-     */
-    public void testShortContent()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation("Short.txt", 7);
-
-        writer.print(l.toString());
-
-        train(writer, 2, 7, new String[]
-        { "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" });
-
-        replay();
-
-        new LocationRenderStrategy().renderObject(l, writer, cycle);
-
-        verify();
-    }
-
-    /**
-     * Test when the highlight line is close to the end of the document.
-     */
-    public void testLongContent()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation("Long.txt", 3);
-
-        writer.print(l.toString());
-
-        train(writer, 1, 3, new String[]
-        { "Line One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight" });
-
-        replay();
-
-        new LocationRenderStrategy().renderObject(l, writer, cycle);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/TestRenderStrategy.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/TestRenderStrategy.java
deleted file mode 100644
index d62e3b2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/describe/TestRenderStrategy.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.describe;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.describe.RenderableAdapterFactoryImpl},
- * {@link org.apache.tapestry.describe.RenderBridge}and
- * {@link org.apache.tapestry.describe.DefaultRenderStrategy}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestRenderStrategy extends BaseDescribeTestCase
-{
-    private RenderStrategy newStrategy()
-    {
-        return newMock(RenderStrategy.class);
-    }
-
-    public void testRenderBridge()
-    {
-        IMarkupWriter writer = newWriter();
-        RenderStrategy strategy = newStrategy();
-        IRequestCycle cycle = newCycle();
-
-        Object object = new Object();
-
-        strategy.renderObject(object, writer, cycle);
-
-        replay();
-
-        new RenderBridge(object, strategy).render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderableAdapterFactory()
-    {
-        IMarkupWriter writer = newWriter();
-        RenderStrategy strategy = newStrategy();
-        IRequestCycle cycle = newCycle();
-
-        Object object = new Object();
-
-        strategy.renderObject(object, writer, cycle);
-
-        replay();
-
-        RenderableAdapterFactoryImpl factory = new RenderableAdapterFactoryImpl();
-        factory.setStrategy(strategy);
-
-        IRender renderable = factory.getRenderableAdaptor(object);
-
-        renderable.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testDefaultRenderableAdapter()
-    {
-        IMarkupWriter writer = newWriter();
-        HTMLDescriber describer = newDescriber();
-        IRequestCycle cycle = newCycle();
-
-        Object object = new Object();
-
-        describer.describeObject(object, writer);
-
-        replay();
-
-        DefaultRenderStrategy strategy = new DefaultRenderStrategy();
-        strategy.setDescriber(describer);
-
-        strategy.renderObject(object, writer, cycle);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java
deleted file mode 100644
index efdf6f8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright Oct 7, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.Locale;
-
-
-/**
- * Tests basic functionality of {@link AjaxShellDelegate}.
- * 
- * @author jkuhnert
- */
-@Test(sequential=true)
-@SuppressWarnings("all")
-public class AjaxShellDelegateTest extends BaseComponentTestCase
-{
-    private static final String SYSTEM_NEWLINE= (String)java.security.AccessController.doPrivileged(
-            new sun.security.action.GetPropertyAction("line.separator"));
-
-    void trainStaticPath(IEngineService engine, IAsset asset, String path)
-    {
-        Resource res = newMock(Resource.class);
-        
-        expect(asset.getResourceLocation()).andReturn(res);
-        expect(res.getPath()).andReturn(path);
-        
-        ILink link = newLink();
-        
-        expect(engine.getLink(Boolean.TRUE, path)).andReturn(link);
-        expect(link.getURL()).andReturn("http://" + path);
-    }
-    
-    void trainPageLocale(IRequestCycle cycle, Locale locale)
-    {
-        IPage page = newMock(IPage.class);        
-        
-        expect(cycle.getPage()).andReturn(page);
-        expect(page.getLocale()).andReturn(locale);
-    }
-    
-    public void test_Default_Render()
-    {
-        IAsset dojoSource = newAsset();
-        IAsset dojoPath = newAsset();
-        IAsset tSource = newAsset();
-        IAsset tPath = newAsset();
-        IPage page = newMock(IPage.class);
-        checkOrder(page, false);
-        IEngine engine = newMock(IEngine.class);
-        
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newBufferWriter();
-
-        expect(cycle.getEngine()).andReturn(engine);
-        expect(engine.getOutputEncoding()).andReturn("utf-foo");
-        expect(cycle.getPage()).andReturn(page);
-        expect(dojoPath.buildURL()).andReturn("http:///dojo/path");
-
-        expect(page.hasFormComponents()).andReturn(false).anyTimes();
-        expect(page.hasWidgets()).andReturn(false).anyTimes();
-
-        trainPageLocale(cycle, Locale.US);
-        
-        expect(dojoSource.buildURL()).andReturn("http:///dojo/path/dojo.js");
-        expect(tPath.buildURL()).andReturn("/tapestry");
-        expect(tSource.buildURL()).andReturn("/tapestry/tapestry.js");
-        
-        AjaxShellDelegate d = new AjaxShellDelegate();
-        d.setDojoPath(dojoPath);
-        d.setDojoSource(dojoSource);
-        d.setTapestrySource(tSource);
-        d.setTapestryPath(tPath);
-        
-        replay();
-        
-        d.render(writer, cycle);
-        
-        verify();
-        
-        assertBuffer("<script type=\"text/javascript\">djConfig = {"
-                + "\"baseRelativePath\":\"http:///dojo/path\","
-                +"\"parseWidgets\":false,\"locale\":\"en-us\"} </script>" + SYSTEM_NEWLINE +
-                SYSTEM_NEWLINE + 
-                "<script type=\"text/javascript\" src=\"http:///dojo/path/dojo.js\"></script>" + SYSTEM_NEWLINE
-                + "<script type=\"text/javascript\">" + SYSTEM_NEWLINE + 
-                "dojo.registerModulePath(\"tapestry\", \"/tapestry\");" + SYSTEM_NEWLINE +
-                "</script>" + SYSTEM_NEWLINE +
-                "<script type=\"text/javascript\" src=\"/tapestry/tapestry.js\"></script>" + SYSTEM_NEWLINE +
-                "<script type=\"text/javascript\">" + SYSTEM_NEWLINE +
-                "dojo.require(\"tapestry.namespace\");" + SYSTEM_NEWLINE +
-                "tapestry.requestEncoding='utf-foo';" + SYSTEM_NEWLINE + 
-                "</script>" + SYSTEM_NEWLINE);
-    }
-    
-    public void test_Debug_Render()
-    {
-        IAsset dojoSource = newAsset();
-        IAsset dojoPath = newAsset();
-        IAsset tSource = newAsset();
-        IAsset tPath = newAsset();
-        IPage page = newMock(IPage.class);
-        checkOrder(page, false);
-        IEngine engine = newMock(IEngine.class);
-        
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newBufferWriter();
-
-        expect(cycle.getEngine()).andReturn(engine);
-        expect(engine.getOutputEncoding()).andReturn("utf-foo");
-        expect(cycle.getPage()).andReturn(page);
-        expect(dojoPath.buildURL()).andReturn("http:///dojo/path");
-
-        expect(page.hasFormComponents()).andReturn(false).anyTimes();
-        expect(page.hasWidgets()).andReturn(false).anyTimes();
-
-        trainPageLocale(cycle, Locale.UK);
-        
-        expect(dojoSource.buildURL()).andReturn("http:///dojo/path/dojo.js");
-        expect(tPath.buildURL()).andReturn("/tapestry");
-        expect(tSource.buildURL()).andReturn("/tapestry/tapestry.js");
-        
-        AjaxShellDelegate d = new AjaxShellDelegate();
-        d.setDojoPath(dojoPath);
-        d.setDojoSource(dojoSource);
-        d.setTapestrySource(tSource);
-        d.setTapestryPath(tPath);
-        d.setDebug(true);
-        d.setLogLevel(AjaxShellDelegate.BROWSER_LOG_DEBUG);
-        d.setConsoleEnabled(true);
-        
-        replay();
-        
-        d.render(writer, cycle);
-        
-        verify();
-        
-        assertBuffer("<script type=\"text/javascript\">djConfig = {\"isDebug\":true,\"baseRelativePath\":\"http:///dojo/path\"," +
-                     "\"parseWidgets\":false,\"locale\":\"en-gb\"} </script>" + SYSTEM_NEWLINE +
-                     SYSTEM_NEWLINE +
-                     "<script type=\"text/javascript\" src=\"http:///dojo/path/dojo.js\"></script>" + SYSTEM_NEWLINE +
-                     "<script type=\"text/javascript\">" + SYSTEM_NEWLINE +
-                     "dojo.require(\"dojo.debug.console\");" + SYSTEM_NEWLINE +
-                     "dojo.log.setLevel(dojo.log.getLevel(\"DEBUG\"));" + SYSTEM_NEWLINE +
-                     "</script>" + SYSTEM_NEWLINE +
-                     "<script type=\"text/javascript\">" + SYSTEM_NEWLINE +
-                     "dojo.registerModulePath(\"tapestry\", \"/tapestry\");" + SYSTEM_NEWLINE +
-                     "</script>" + SYSTEM_NEWLINE +
-                     "<script type=\"text/javascript\" src=\"/tapestry/tapestry.js\"></script>" + SYSTEM_NEWLINE +
-                     "<script type=\"text/javascript\">" + SYSTEM_NEWLINE +
-                     "dojo.require(\"tapestry.namespace\");" + SYSTEM_NEWLINE +
-                     "tapestry.requestEncoding='utf-foo';" + SYSTEM_NEWLINE + 
-                     "</script>" + SYSTEM_NEWLINE);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/DefaultAutocompleteModelTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/DefaultAutocompleteModelTest.java
deleted file mode 100644
index 9f37d4a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/DefaultAutocompleteModelTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright Jul 30, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.form;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link DefaultAutocompleteModel}.
- * 
- * @author jkuhnert
- */
-@Test
-public class DefaultAutocompleteModelTest extends BaseComponentTestCase
-{
-
-    public void test_Basic_Model()
-    {
-        List values = new ArrayList();
-        
-        SimpleBean s1 = new SimpleBean(new Integer(1), "Simple 1", 100);
-        SimpleBean s2 = new SimpleBean(new Integer(2), "Simple 2", 200);
-        SimpleBean s3 = new SimpleBean(new Integer(3), "Simple 3", 300);
-        
-        values.add(s1);
-        values.add(s2);
-        values.add(s3);
-        
-        IAutocompleteModel model = new DefaultAutocompleteModel(values, "id", "label");
-        
-        // basic checks
-        assert s2.getLabel().equals(model.getLabelFor(s2));
-        assert model.getPrimaryKey(s3).equals(3);
-        assert model.getValue(1) == s1;
-    }
-    
-    public void test_Filtering_Match()
-    {
-        List values = new ArrayList();
-        
-        SimpleBean s1 = new SimpleBean(new Integer(1), "Simple 1", 100);
-        SimpleBean s2 = new SimpleBean(new Integer(2), "Simple 2", 200);
-        SimpleBean s3 = new SimpleBean(new Integer(3), "Simple 3", 300);
-        
-        values.add(s1);
-        values.add(s2);
-        values.add(s3);
-        
-        IAutocompleteModel model = new DefaultAutocompleteModel(values, "id", "label");
-        
-        List results = model.getValues("sim");
-        
-        assert results != null;
-        assert results.size() == 3;
-        
-        assert results.contains(s2);
-        
-        results = model.getValues("simple 1");
-        
-        assert results.size() == 1;
-        assert results.get(0) == s1;
-    }
-    
-    public void test_Filtering_Null()
-    {
-        List values = new ArrayList();
-        
-        SimpleBean s1 = new SimpleBean(new Integer(1), "Simple 1", 100);
-        SimpleBean s2 = new SimpleBean(new Integer(2), "Simple 2", 200);
-        SimpleBean s3 = new SimpleBean(new Integer(3), "Simple 3", 300);
-        
-        values.add(s1);
-        values.add(s2);
-        values.add(s3);
-        
-        IAutocompleteModel model = new DefaultAutocompleteModel(values, "id", "label");
-        
-        List results = model.getValues(null);
-        
-        assert results != null;
-        assert results.size() == 0;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/SimpleBean.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/SimpleBean.java
deleted file mode 100644
index af008e8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/SimpleBean.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright Jul 30, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.form;
-
-
-/**
- * Simple bean style class to test {@link DefaultAutocompleteModel}.
- * 
- * @author jkuhnert
- */
-public class SimpleBean
-{
-
-    private Integer _id;
-    
-    private String _label;
-    
-    private int _value;
-    
-    public SimpleBean(Integer id, String label, int value)
-    {
-        _id = id;
-        _label = label;
-        _value = value;
-    }
-    
-    /**
-     * @return the id
-     */
-    public Integer getId()
-    {
-        return _id;
-    }
-    
-    /**
-     * @return the label
-     */
-    public String getLabel()
-    {
-        return _label;
-    }
-    
-    /**
-     * Returns the value stored.
-     * 
-     * @return The value stored.
-     */
-    public int getValue()
-    {
-        return _value;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode()
-    {
-        final int PRIME = 31;
-        int result = 1;
-        result = PRIME * result + ((_id == null) ? 0 : _id.hashCode());
-        return result;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj)
-    {
-        if (this == obj) return true;
-        if (obj == null) return false;
-        if (getClass() != obj.getClass()) return false;
-        final SimpleBean other = (SimpleBean) obj;
-        if (_id == null) {
-            if (other._id != null) return false;
-        } else if (!_id.equals(other._id)) return false;
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java
deleted file mode 100644
index 0c5d809..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java
+++ /dev/null
@@ -1,294 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.dojo.form;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.DirectServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.form.BaseFormComponentTestCase;
-import org.apache.tapestry.form.MockDelegate;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.json.IJSONWriter;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.services.DataSqueezer;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidatorException;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.form.TextField}.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestAutocompleter extends BaseFormComponentTestCase
-{
-    private IAutocompleteModel createModel()
-    {
-        List values = new ArrayList();
-
-        SimpleBean s1 = new SimpleBean(new Integer(1), "Simple 1", 100);
-        SimpleBean s2 = new SimpleBean(new Integer(2), "Simple 2", 200);
-        SimpleBean s3 = new SimpleBean(new Integer(3), "Simple 3", 300);
-
-        values.add(s1);
-        values.add(s2);
-        values.add(s3);
-
-        return new DefaultAutocompleteModel(values, "id", "label");
-    }
-
-    public void test_Rewind()
-    {
-        IAutocompleteModel model = createModel();
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        DataSqueezer ds = newMock(DataSqueezer.class);
-
-        Autocompleter component = newInstance(Autocompleter.class,
-                                              new Object[] { "model", model, "validatableFieldSupport", vfs,
-                                                             "dataSqueezer", ds});
-
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-
-        IValidationDelegate delegate = newDelegate();
-
-        expect(cycle.renderStackPush(component)).andReturn(component);
-
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "barney", "1");
-
-        expect(ds.unsqueeze("1")).andReturn(new Integer(1));
-
-        SimpleBean match = new SimpleBean(new Integer(1), null, -1);
-
-        try
-        {
-            vfs.validate(component, writer, cycle, match);
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-
-        expect(cycle.renderStackPop()).andReturn(component);
-
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertEquals(match, component.getValue());
-    }
-
-    public void test_Rewind_NotForm()
-    {
-        Autocompleter component = (Autocompleter) newInstance(Autocompleter.class);
-
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-
-        IValidationDelegate delegate = newDelegate();
-
-        expect(cycle.renderStackPush(component)).andReturn(component);
-
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, true);
-
-        expect(cycle.renderStackPop()).andReturn(component);
-
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    @DataProvider(name="renderings")
-    public Object[][] createRenderings() {
-        return new Object[][] {
-          {"<span class=\"prefix\"><select name=\"fred\" autocomplete=\"off\" id=\"fred\" class=\"validation-delegate\"> </select></span>",
-           Boolean.FALSE},
-          {"<span class=\"prefix\"><select name=\"fred\" autocomplete=\"off\" id=\"fred\" class=\"validation-delegate\"> <option " +
-           "value=\"1p\">Simple 1</option><option value=\"2p\" selected=\"selected\">Simple 2</option><option value=\"3p\">Simple 3</option></select></span>",
-           Boolean.TRUE}
-        };
-    }
-
-    @Test(dataProvider = "renderings")
-    public void test_Render(String outcome, Boolean local)
-    {
-        IAutocompleteModel model = createModel();
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        DataSqueezer ds = newMock(DataSqueezer.class);
-        ResponseBuilder resp = newMock(ResponseBuilder.class);
-
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IForm form = newMock(IForm.class);
-        checkOrder(form, false);
-
-        MockDelegate delegate = new MockDelegate();
-
-        IEngineService engine = newEngineService();
-        ILink link = newLink();
-
-        IScript script = newMock(IScript.class);
-
-        SimpleBean match = new SimpleBean(new Integer(2), "Simple 2", 200);
-
-        Autocompleter component = newInstance(Autocompleter.class,
-                                              new Object[] {
-                                                "name", "fred", "model", model,
-                                                "directService", engine,
-                                                "script", script,
-                                                "validatableFieldSupport", vfs,
-                                                "value", match,
-                                                "dataSqueezer", ds, "local", local
-                                              });
-
-        expect(cycle.renderStackPush(component)).andReturn(component);
-
-        expect(form.getName()).andReturn("testform").anyTimes();
-
-        form.setFormFieldUpdating(true);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        DirectServiceParameter dsp =
-          new DirectServiceParameter(component);
-
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        expect(cycle.isRewinding()).andReturn(false).anyTimes();
-
-        delegate.setFormComponent(component);
-
-        expect(cycle.getResponseBuilder()).andReturn(resp).anyTimes();
-        expect(resp.isDynamic()).andReturn(false).anyTimes();
-
-        vfs.renderContributions(component, writer, cycle);
-        if (!local.booleanValue())
-        {
-            trainGetLinkCheckIgnoreParameter(engine, cycle, true, dsp, link);
-            trainGetURL(link, "urlstring");
-        }
-        else
-        {
-            expect(ds.squeeze(1)).andReturn("1p");
-            expect(ds.squeeze(2)).andReturn("2p");
-            expect(ds.squeeze(3)).andReturn("3p");
-        }
-        // for the default value
-        expect(ds.squeeze(2)).andReturn("2p");
-
-        PageRenderSupport prs = newPageRenderSupport();
-        trainGetPageRenderSupport(cycle, prs);
-
-        script.execute(eq(component), eq(cycle), eq(prs), isA(Map.class));
-
-        expect(cycle.renderStackPop()).andReturn(component);
-
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer(outcome);
-    }
-
-    public void test_Render_JSON()
-    {
-        IAutocompleteModel model = createModel();
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        DataSqueezer ds = newMock(DataSqueezer.class);
-        checkOrder(ds, false);
-
-        IJSONWriter writer = newBufferJSONWriter();
-
-        Autocompleter component = newInstance(Autocompleter.class, new Object[]
-          { "name", "fred", "model", model,
-            "filter", "l", "dataSqueezer", ds });
-
-        expect(ds.squeeze(1)).andReturn("1");
-        expect(ds.squeeze(2)).andReturn("2");
-        expect(ds.squeeze(3)).andReturn("3");
-
-        replay();
-
-        component.renderComponent(writer, cycle);
-
-        verify();
-
-        JSONObject json = writer.object();
-
-        assertEquals(json.length(), 3);
-        assertEquals(json.get("1"), "Simple 1");
-        assertEquals(json.get("2"), "Simple 2");
-        assertEquals(json.get("3"), "Simple 3");
-    }
-
-    public void test_Is_Required()
-    {
-        ValidatableFieldSupport support = newMock(ValidatableFieldSupport.class);
-
-        Autocompleter field = newInstance(Autocompleter.class,
-                                          new Object[] { "validatableFieldSupport", support, });
-
-        expect(support.isRequired(field)).andReturn(true);
-
-        replay();
-
-        assert field.isRequired();
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java
deleted file mode 100644
index 97da382..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright Oct 7, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.form;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.form.BaseFormComponentTestCase;
-import org.apache.tapestry.form.MockDelegate;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.form.translator.DateTranslator;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.services.ResponseBuilder;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.util.Date;
-import java.util.Locale;
-import java.util.Map;
-
-
-/**
- * Tests functionality of {@link DropdownTimePicker} component.
- *
- * @author jkuhnert
- */
-@Test
-public class TestDropdownTimePicker extends BaseFormComponentTestCase
-{
-
-    public void test_Render()
-    {
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        DateTranslator translator = new DateTranslator();
-        translator.setPattern("hh:mm a");
-        ResponseBuilder resp = newMock(ResponseBuilder.class);
-
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IForm form = newMock(IForm.class);
-        checkOrder(form, false);
-        IPage page = newPage();
-        Locale locale = Locale.getDefault();
-
-        MockDelegate delegate = new MockDelegate();
-
-        IScript script = newMock(IScript.class);
-
-        Date dtValue = new Date();
-
-        DropdownTimePicker component = newInstance(DropdownTimePicker.class,
-                                                   "name", "fred",
-                                                   "script", script,
-                                                   "validatableFieldSupport", vfs,
-                                                   "translator", translator,
-                                                   "value", dtValue,
-                                                   "page", page);
-
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        expect(form.getName()).andReturn("testform").anyTimes();
-
-        form.setFormFieldUpdating(true);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        expect(cycle.isRewinding()).andReturn(false).anyTimes();
-
-        delegate.setFormComponent(component);
-
-        expect(cycle.getResponseBuilder()).andReturn(resp).anyTimes();
-        expect(resp.isDynamic()).andReturn(false).anyTimes();
-
-        vfs.renderContributions(component, writer, cycle);
-
-        expect(page.getLocale()).andReturn(locale).anyTimes();
-
-        PageRenderSupport prs = newPageRenderSupport();
-        trainGetPageRenderSupport(cycle, prs);
-
-        script.execute(eq(component), eq(cycle), eq(prs), isA(Map.class));
-
-        expect(cycle.renderStackPop()).andReturn(component);
-
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><div id=\"fred\" class=\"validation-delegate\"> </div></span>");
-    }
-
-    public void test_Json_Time()
-    {
-        long time = System.currentTimeMillis();
-
-        JSONObject json = new JSONObject();
-        json.put("time", time);
-
-        assertEquals(json.toString(), "{\"time\":"+time+"}");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestGTimePicker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestGTimePicker.java
deleted file mode 100644
index 9a822a1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestGTimePicker.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package org.apache.tapestry.dojo.form;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.form.BaseFormComponentTestCase;
-import org.apache.tapestry.form.MockDelegate;
-import org.apache.tapestry.form.TranslatedFieldSupport;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.form.translator.DateTranslator;
-import org.apache.tapestry.services.ResponseBuilder;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.util.Date;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * Tests functionality of {@link GTimePicker} component.
- */
-@Test
-public class TestGTimePicker extends BaseFormComponentTestCase
-{
-
-    public void test_Render()
-    {
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-
-        DateTranslator translator = new DateTranslator();
-        translator.setPattern("hh:mm a");
-        ResponseBuilder resp = newMock(ResponseBuilder.class);
-
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IForm form = newMock(IForm.class);
-        checkOrder(form, false);
-        IPage page = newPage();
-        Locale locale = Locale.getDefault();
-
-        MockDelegate delegate = new MockDelegate();
-
-        IScript script = newMock(IScript.class);
-
-        Date dtValue = new Date();
-
-        GTimePicker component = newInstance(GTimePicker.class,
-                                            "name", "fred",
-                                            "script", script,
-                                            "validatableFieldSupport", vfs,
-                                            "translatedFieldSupport", tfs,
-                                            "translator", translator,
-                                            "value", dtValue,
-                                            "page", page);
-
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        expect(form.getName()).andReturn("testform").anyTimes();
-
-        form.setFormFieldUpdating(true);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        expect(cycle.isRewinding()).andReturn(false).anyTimes();
-
-        delegate.setFormComponent(component);
-
-        expect(cycle.getResponseBuilder()).andReturn(resp).anyTimes();
-        expect(resp.isDynamic()).andReturn(false).anyTimes();
-
-        expect(tfs.format(component, dtValue)).andReturn(dtValue.toString());
-
-        tfs.renderContributions(component, writer, cycle);
-        vfs.renderContributions(component, writer, cycle);
-
-        expect(page.getLocale()).andReturn(locale).anyTimes();
-
-        PageRenderSupport prs = newPageRenderSupport();
-        trainGetPageRenderSupport(cycle, prs);
-
-        script.execute(eq(component), eq(cycle), eq(prs), isA(Map.class));
-
-        expect(cycle.renderStackPop()).andReturn(component);
-
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><input type=\"text\" autocomplete=\"off\" name=\"fred\" "
-                     + "value=\"" + dtValue.toString() + "\" id=\"fred\" class=\"validation-delegate\" /></span>");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/html/TestIncludeScripts.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/html/TestIncludeScripts.java
deleted file mode 100644
index 926bccd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/html/TestIncludeScripts.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.dojo.html;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link ScriptIncludes} component.
- */
-@Test
-public class TestIncludeScripts extends BaseComponentTestCase
-{
-    public void test_Rewinding()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(true);
-        ScriptIncludes comp = newInstance(ScriptIncludes.class, null);
-        
-        expect(cycle.renderStackPush(comp)).andReturn(comp);
-        expect(cycle.renderStackPop()).andReturn(comp);
-        
-        replay();
-
-        comp.render(writer, cycle);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/html/TestInlineEditBox.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/html/TestInlineEditBox.java
deleted file mode 100644
index 52218b4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/dojo/html/TestInlineEditBox.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.apache.tapestry.dojo.html;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.IEngineService;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.util.Map;
-
-/**
- * Tests functionality of {@link InlineEditBox}. 
- */
-@Test
-public class TestInlineEditBox extends BaseComponentTestCase {
-
-    public void test_Render_Widget()
-    {
-        IRequestCycle cycle = newCycle();
-        PageRenderSupport prs = newPageRenderSupport();
-        IScript script = newMock(IScript.class);
-        IEngineService engine = newMock(IEngineService.class);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        InlineEditBox comp = newInstance(InlineEditBox.class,
-                                         "templateTagName", "div",
-                                         "clientId", "inline",
-                                         "value", "Foo",
-                                         "mode", InlineEditBox.TEXT_MODE,
-                                         "stateful", false,
-                                         "disabled", false,
-                                         "doFade", false,
-                                         "minWidth", 100,
-                                         "minHeight", 200,
-                                         "engine", engine,
-                                         "script", script);
-
-        expect(cycle.isRewinding()).andReturn(false).anyTimes();
-        trainGetPageRenderSupport(cycle, prs);
-
-        script.execute(eq(comp), eq(cycle), eq(prs), isA(Map.class));
-        
-        replay();
-
-        comp.renderWidget(writer, cycle);
-
-        verify();
-
-        assertBuffer("<div id=\"inline\"></div>");
-    }
-
-    public void test_Rewind()
-    {
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newMock(IMarkupWriter.class);
-
-        InlineEditBox comp = newInstance(InlineEditBox.class,
-                                         "templateTagName", "div",
-                                         "clientId", "inline",
-                                         "value", "Foo",
-                                         "mode", InlineEditBox.TEXT_MODE);
-
-        expect(cycle.isRewinding()).andReturn(true).anyTimes();
-
-        replay();
-
-        comp.renderWidget(writer, cycle);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/DirectEventServiceTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/DirectEventServiceTest.java
deleted file mode 100644
index e3c3c3c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/DirectEventServiceTest.java
+++ /dev/null
@@ -1,464 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.*;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.DirectService}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class DirectEventServiceTest extends ServiceTestCase
-{
-    private IDirectEvent newDirect()
-    {
-        return newMock(IDirectEvent.class);
-    }
-
-    public void testGetLinkOnSamePage()
-    {
-        IPage page = newPage("ThePage");
-        IDirectEvent c = newDirect();
-        IRequestCycle cycle = newCycle();
-        WebRequest request = newWebRequest(false, null);
-        LinkFactory lf = newLinkFactory();
-        ILink link = newLink();
-
-        trainGetPage(cycle, page);
-        trainGetPage(c, page);
-        trainGetIdPath(c, "fred.barney");
-
-        Object[] serviceParameters = new Object[0];
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.PAGE, "ThePage");
-        parameters.put(ServiceConstants.COMPONENT, "fred.barney");
-        parameters.put(ServiceConstants.CONTAINER, null);
-        parameters.put(ServiceConstants.SESSION, null);
-        parameters.put(ServiceConstants.PARAMETER, serviceParameters);
-
-        DirectEventService ds = new DirectEventService();
-
-        ds.setLinkFactory(lf);
-        ds.setRequest(request);
-        ds.setRequestCycle(cycle);
-
-        trainConstructLink(lf, ds, false, parameters, true, link);
-
-        replay();
-
-        assertSame(link, ds.getLink(false, new DirectEventServiceParameter(c, serviceParameters)));
-
-        verify();
-    }
-
-    public void testGetLinkOnSamePageForPost()
-    {
-        IPage page = newPage("ThePage");
-        IDirectEvent c = newDirect();
-        IRequestCycle cycle = newCycle();
-        WebRequest request = newWebRequest(false, null);
-        LinkFactory lf = newLinkFactory();
-        ILink link = newLink();
-
-        trainGetPage(cycle, page);
-        trainGetPage(c, page);
-        trainGetIdPath(c, "fred.barney");
-
-        Object[] serviceParameters = new Object[0];
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.PAGE, "ThePage");
-        parameters.put(ServiceConstants.COMPONENT, "fred.barney");
-        parameters.put(ServiceConstants.CONTAINER, null);
-        parameters.put(ServiceConstants.SESSION, null);
-        parameters.put(ServiceConstants.PARAMETER, serviceParameters);
-
-        DirectEventService ds = new DirectEventService();
-
-        ds.setLinkFactory(lf);
-        ds.setRequest(request);
-        ds.setRequestCycle(cycle);
-
-        trainConstructLink(lf, ds, true, parameters, true, link);
-
-        replay();
-
-        assertSame(link, ds.getLink(true, new DirectEventServiceParameter(c, serviceParameters)));
-
-        verify();
-    }
-
-    public void testGetLinkOnSamePageStateful()
-    {
-        IPage page = newPage("ThePage");
-        IDirectEvent c = newDirect();
-        IRequestCycle cycle = newCycle();
-        WebSession session = newWebSession();
-        WebRequest request = newWebRequest(false, session);
-        LinkFactory lf = newLinkFactory();
-        ILink link = newLink();
-
-        trainGetPage(cycle, page);
-        trainGetPage(c, page);
-        trainGetIdPath(c, "fred.barney");
-
-        Object[] serviceParameters = new Object[0];
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.PAGE, "ThePage");
-        parameters.put(ServiceConstants.COMPONENT, "fred.barney");
-        parameters.put(ServiceConstants.CONTAINER, null);
-        parameters.put(ServiceConstants.SESSION, "T");
-        parameters.put(ServiceConstants.PARAMETER, serviceParameters);
-
-        DirectEventService ds = new DirectEventService();
-        ds.setLinkFactory(lf);
-        ds.setRequest(request);
-        ds.setRequestCycle(cycle);
-
-        trainConstructLink(lf, ds, false, parameters, true, link);
-
-        replay();
-
-        assertSame(link, ds.getLink(false, new DirectEventServiceParameter(c, serviceParameters)));
-
-        verify();
-    }
-
-    public void testGetLinkOnDifferentPage()
-    {
-        IPage page = newPage("ActivePage");
-        IPage componentPage = newPage("ComponentPage");
-        IDirectEvent c = newDirect();
-        IRequestCycle cycle = newCycle();
-        WebRequest request = newWebRequest(false, null);
-        LinkFactory lf = newLinkFactory();
-        ILink link = newLink();
-
-        trainGetPage(cycle, page);
-        trainGetPage(c, componentPage);
-        trainGetIdPath(c, "fred.barney");
-
-        Object[] serviceParameters = new Object[0];
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.PAGE, "ActivePage");
-        parameters.put(ServiceConstants.COMPONENT, "fred.barney");
-        parameters.put(ServiceConstants.CONTAINER, "ComponentPage");
-        parameters.put(ServiceConstants.SESSION, null);
-        parameters.put(ServiceConstants.PARAMETER, serviceParameters);
-
-        DirectEventService ds = new DirectEventService();
-        ds.setLinkFactory(lf);
-        ds.setRequest(request);
-        ds.setRequestCycle(cycle);
-
-        trainConstructLink(lf, ds, false, parameters, true, link);
-
-        replay();
-
-        assertSame(link, ds.getLink(false, new DirectEventServiceParameter(c, serviceParameters)));
-
-        verify();
-    }
-
-    public void testServiceSimple() throws Exception
-    {
-        Object[] parameters = new Object[0];
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IDirectEvent d = newDirect();
-        LinkFactory lf = newLinkFactory();
-        ResponseRenderer rr = newResponseRenderer();
-
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, null);
-
-        trainGetPage(cycle, "ActivePage", page);
-        cycle.activate(page);
-
-        trainGetNestedComponent(page, "fred.barney", d);
-
-        trainExtractListenerParameters(lf, cycle, parameters);
-
-        trainExtractBrowserEvent(cycle);
-        
-        cycle.setListenerParameters(isA(Object[].class));
-        
-        d.triggerEvent(eq(cycle), isA(BrowserEvent.class));
-        
-        rr.renderResponse(cycle);
-        
-        replay();
-
-        DirectEventService ds = new DirectEventService();
-        ds.setLinkFactory(lf);
-        ds.setResponseRenderer(rr);
-
-        ds.service(cycle);
-
-        verify();
-    }
-
-    /**
-     * The complex case is where the component is contained on a different page than the active (at
-     * the time of render) page.
-     */
-    public void testServiceComplex() throws Exception
-    {
-        Object[] parameters = new Object[0];
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IPage componentPage = newPage();
-        IDirectEvent d = newDirect();
-        LinkFactory lf = newLinkFactory();
-        ResponseRenderer rr = newResponseRenderer();
-
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, "ComponentPage");
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, null);
-        
-        trainGetPage(cycle, "ActivePage", page);
-        cycle.activate(page);
-
-        trainGetPage(cycle, "ComponentPage", componentPage);
-        trainGetNestedComponent(componentPage, "fred.barney", d);
-
-        trainExtractListenerParameters(lf, cycle, parameters);
-        trainExtractBrowserEvent(cycle);
-        
-        cycle.setListenerParameters(isA(Object[].class));
-        
-        d.triggerEvent(eq(cycle), isA(BrowserEvent.class));
-
-        rr.renderResponse(cycle);
-
-        replay();
-
-        DirectEventService ds = new DirectEventService();
-        ds.setLinkFactory(lf);
-        ds.setResponseRenderer(rr);
-
-        ds.service(cycle);
-
-        verify();
-    }
-
-    public void testServiceNotDirect() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IComponent c = newComponent();
-        Location l = newLocation();
-
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, null);
-
-        trainGetPage(cycle, "ActivePage", page);
-        cycle.activate(page);
-
-        trainGetNestedComponent(page, "fred.barney", c);
-
-        trainGetExtendedId(c, "ActivePage/fred.barney");
-        trainGetLocation(c, l);
-
-        replay();
-
-        DirectEventService ds = new DirectEventService();
-
-        try
-        {
-            ds.service(cycle);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Component ActivePage/fred.barney does not implement the org.apache.tapestry.IDirectEvent interface.",
-                    ex.getMessage());
-            assertSame(c, ex.getComponent());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    public void testSessionActiveAndRequired() throws Exception
-    {
-        Object[] parameters = new Object[0];
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IDirectEvent d = newDirect();
-        
-        LinkFactory lf = newLinkFactory();
-        ResponseRenderer rr = newResponseRenderer();
-        
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, "T");
-        
-        trainGetPage(cycle, "ActivePage", page);
-        cycle.activate(page);
-
-        trainGetNestedComponent(page, "fred.barney", d);
-
-        trainIsStateful(d, true);
-
-        WebSession session = newWebSession(false);
-        WebRequest request = newWebRequest(session);
-        
-        trainExtractListenerParameters(lf, cycle, parameters);
-
-        trainExtractBrowserEvent(cycle);
-        
-        cycle.setListenerParameters(isA(Object[].class));
-        
-        d.triggerEvent(eq(cycle), isA(BrowserEvent.class));
-
-        rr.renderResponse(cycle);
-
-        replay();
-
-        DirectEventService ds = new DirectEventService();
-        ds.setLinkFactory(lf);
-        ds.setResponseRenderer(rr);
-        ds.setRequest(request);
-
-        ds.service(cycle);
-
-        verify();
-    }
-    
-    public void testStaleSession() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IDirectEvent d = newDirect();
-        
-        Location l = newLocation();
-
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, "T");
-
-        trainGetPage(cycle, "ActivePage", page);
-        cycle.activate(page);
-
-        trainGetNestedComponent(page, "fred.barney", d);
-
-        trainIsStateful(d, true);
-
-        WebRequest request = newWebRequest(null);
-        
-        trainGetExtendedId(d, "ActivePage/fred.barney");
-        trainGetLocation(page, l);
-        trainGetPageName(page, "ActivePage");
-
-        replay();
-
-        DirectEventService ds = new DirectEventService();
-        ds.setRequest(request);
-
-        try
-        {
-            ds.service(cycle);
-            unreachable();
-        }
-        catch (StaleSessionException ex)
-        {
-            assertEquals(
-                    "Component ActivePage/fred.barney is stateful, but the HttpSession has expired (or has not yet been created).",
-                    ex.getMessage());
-            assertSame(page, ex.getComponent());
-            assertSame(l, ex.getLocation());
-            assertEquals("ActivePage", ex.getPageName());
-            assertSame(page, ex.getPage());
-        }
-
-        verify();
-    }
-    
-    public void testNoBrowserEvent() throws Exception
-    {
-        Object[] parameters = new Object[0];
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IDirectEvent d = newDirect();
-        LinkFactory lf = newLinkFactory();
-        ResponseRenderer rr = newResponseRenderer();
-
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, null);
-
-        trainGetPage(cycle, "ActivePage", page);
-        cycle.activate(page);
-
-        trainGetNestedComponent(page, "fred.barney", d);
-
-        trainExtractListenerParameters(lf, cycle, parameters);
-
-        expect(cycle.getParameter(BrowserEvent.NAME)).andReturn(null);
-        
-        replay();
-        
-        DirectEventService ds = new DirectEventService();
-        ds.setLinkFactory(lf);
-        ds.setResponseRenderer(rr);
-        
-        try {
-            ds.service(cycle);
-            unreachable();
-        } catch (ApplicationRuntimeException e) {
-            assertExceptionSubstring(e, "no browser event was found");
-        }
-        
-        verify();
-    }
-    
-    private void trainIsStateful(IDirectEvent direct, boolean isStateful)
-    {
-        expect(direct.isStateful()).andReturn(isStateful);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java
deleted file mode 100644
index 638c297..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java
+++ /dev/null
@@ -1,481 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.*;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.DirectService}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class DirectServiceTest extends ServiceTestCase
-{
-    protected IDirect newDirect(boolean checkParameters)
-    {
-        IDirect c = newMock(IDirect.class);
-        
-        if (checkParameters) {
-            checkOrder(c, false);
-
-            expect(c.getUpdateComponents()).andReturn(Collections.EMPTY_LIST);
-            expect(c.isJson()).andReturn(false);
-            expect(c.isAsync()).andReturn(false);
-            expect(c.isStateful()).andReturn(true);
-        }
-        
-        return c;
-    }
-
-    public void testGetLinkOnSamePage()
-    {
-        IPage page = newPage("ThePage");
-        IDirect c = newDirect(true);
-        IRequestCycle cycle = newCycle();
-        WebRequest request = newWebRequest(false, null);
-        LinkFactory lf = newLinkFactory();
-        ILink link = newLink();
-
-        trainGetPage(cycle, page);
-        trainGetPage(c, page);
-        trainGetIdPath(c, "fred.barney");
-
-        Object[] serviceParameters = new Object[0];
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.PAGE, "ThePage");
-        parameters.put(ServiceConstants.COMPONENT, "fred.barney");
-        parameters.put(ServiceConstants.CONTAINER, null);
-        parameters.put(ServiceConstants.SESSION, null);
-        parameters.put(ServiceConstants.PARAMETER, serviceParameters);
-
-        DirectService ds = new DirectService();
-
-        ds.setLinkFactory(lf);
-        ds.setRequest(request);
-        ds.setRequestCycle(cycle);
-
-        trainConstructLink(lf, ds, false, parameters, true, link);
-
-        replay();
-
-        assertSame(link, ds.getLink(false, new DirectServiceParameter(c, serviceParameters)));
-
-        verify();
-    }
-
-    public void testGetLinkOnSamePageForPost()
-    {
-        IPage page = newPage("ThePage");
-        IDirect c = newDirect(true);
-        IRequestCycle cycle = newCycle();
-        WebRequest request = newWebRequest(false, null);
-        LinkFactory lf = newLinkFactory();
-        ILink link = newLink();
-
-        trainGetPage(cycle, page);
-        trainGetPage(c, page);
-        trainGetIdPath(c, "fred.barney");
-
-        Object[] serviceParameters = new Object[0];
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.PAGE, "ThePage");
-        parameters.put(ServiceConstants.COMPONENT, "fred.barney");
-        parameters.put(ServiceConstants.CONTAINER, null);
-        parameters.put(ServiceConstants.SESSION, null);
-        parameters.put(ServiceConstants.PARAMETER, serviceParameters);
-
-        DirectService ds = new DirectService();
-
-        ds.setLinkFactory(lf);
-        ds.setRequest(request);
-        ds.setRequestCycle(cycle);
-
-        trainConstructLink(lf, ds, true, parameters, true, link);
-
-        replay();
-
-        assertSame(link, ds.getLink(true, new DirectServiceParameter(c, serviceParameters)));
-
-        verify();
-    }
-
-    public void testGetLinkOnSamePageStateful()
-    {   
-        IDirect c = newDirect(true);
-        
-        IPage page = newPage("ThePage");
-        IRequestCycle cycle = newCycle();
-        WebSession session = newWebSession();
-        WebRequest request = newWebRequest(false, session);
-        LinkFactory lf = newLinkFactory();
-        ILink link = newLink();
-        
-        trainGetPage(cycle, page);
-        trainGetPage(c, page);
-        trainGetIdPath(c, "fred.barney");
-
-        Object[] serviceParameters = new Object[0];
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.PAGE, "ThePage");
-        parameters.put(ServiceConstants.COMPONENT, "fred.barney");
-        parameters.put(ServiceConstants.CONTAINER, null);
-        parameters.put(ServiceConstants.SESSION, "T");
-        parameters.put(ServiceConstants.PARAMETER, serviceParameters);
-
-        DirectService ds = new DirectService();
-        ds.setLinkFactory(lf);
-        ds.setRequest(request);
-        ds.setRequestCycle(cycle);
-        
-        trainConstructLink(lf, ds, false, parameters, true, link);
-        
-        replay();
-        
-        assertSame(link, ds.getLink(false, new DirectServiceParameter(c, serviceParameters)));
-
-        verify();
-    }
-
-    public void testGetLinkOnDifferentPage()
-    {
-        IPage page = newPage("ActivePage");
-        IPage componentPage = newPage("ComponentPage");
-        IDirect c = newDirect(true);
-        IRequestCycle cycle = newCycle();
-        WebRequest request = newWebRequest(false, null);
-        LinkFactory lf = newLinkFactory();
-        ILink link = newLink();
-
-        trainGetPage(cycle, page);
-        trainGetPage(c, componentPage);
-        trainGetIdPath(c, "fred.barney");
-
-        Object[] serviceParameters = new Object[0];
-
-        Map parameters = new HashMap();
-
-        parameters.put(ServiceConstants.PAGE, "ActivePage");
-        parameters.put(ServiceConstants.COMPONENT, "fred.barney");
-        parameters.put(ServiceConstants.CONTAINER, "ComponentPage");
-        parameters.put(ServiceConstants.SESSION, null);
-        parameters.put(ServiceConstants.PARAMETER, serviceParameters);
-
-        DirectService ds = new DirectService();
-        ds.setLinkFactory(lf);
-        ds.setRequest(request);
-        ds.setRequestCycle(cycle);
-
-        trainConstructLink(lf, ds, false, parameters, true, link);
-
-        replay();
-
-        assertSame(link, ds.getLink(false, new DirectServiceParameter(c, serviceParameters)));
-
-        verify();
-    }
-
-    public void testServiceSimple() throws Exception
-    {
-        Object[] parameters = new Object[0];
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IDirect d = newDirect(false);
-        LinkFactory lf = newLinkFactory();
-        ResponseRenderer rr = newResponseRenderer();
-
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, null);
-
-        trainGetPage(cycle, "ActivePage", page);
-        cycle.activate(page);
-
-        trainGetNestedComponent(page, "fred.barney", d);
-
-        trainExtractListenerParameters(lf, cycle, parameters);
-        
-        expect(cycle.getParameter(BrowserEvent.NAME)).andReturn(null);
-        
-        cycle.setListenerParameters(parameters);
-
-        d.trigger(cycle);
-
-        rr.renderResponse(cycle);
-
-        replay();
-
-        DirectService ds = new DirectService();
-        ds.setLinkFactory(lf);
-        ds.setResponseRenderer(rr);
-
-        ds.service(cycle);
-
-        verify();
-    }
-
-    public void test_Service_Simple_Event() throws Exception
-    {
-        Object[] parameters = new Object[0];
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IDirect d = newDirect(false);
-        LinkFactory lf = newLinkFactory();
-        ResponseRenderer rr = newResponseRenderer();
-
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, null);
-
-        trainGetPage(cycle, "ActivePage", page);
-        cycle.activate(page);
-        trainGetNestedComponent(page, "fred.barney", d);
-
-        trainExtractListenerParameters(lf, cycle, parameters);
-        trainExtractBrowserEvent(cycle);
-        
-        cycle.setListenerParameters(isA(Object[].class));
-        
-        d.trigger(cycle);
-
-        rr.renderResponse(cycle);
-
-        replay();
-
-        DirectService ds = new DirectService();
-        ds.setLinkFactory(lf);
-        ds.setResponseRenderer(rr);
-
-        ds.service(cycle);
-
-        verify();
-    }
-    
-    /**
-     * The complex case is where the component is contained on a different page than the active (at
-     * the time of render) page.
-     */
-    public void test_Service_Complex() throws Exception
-    {
-        Object[] parameters = new Object[0];
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IPage componentPage = newPage();
-        IDirect d = newDirect(false);
-        LinkFactory lf = newLinkFactory();
-        ResponseRenderer rr = newResponseRenderer();
-
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, "ComponentPage");
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, null);
-
-        trainGetPage(cycle, "ActivePage", page);
-
-        cycle.activate(page);
-
-        trainGetPage(cycle, "ComponentPage", componentPage);
-
-        trainGetNestedComponent(componentPage, "fred.barney", d);
-
-        trainExtractListenerParameters(lf, cycle, parameters);
-        
-        expect(cycle.getParameter(BrowserEvent.NAME)).andReturn(null);
-        
-        cycle.setListenerParameters(parameters);
-
-        d.trigger(cycle);
-
-        rr.renderResponse(cycle);
-
-        replay();
-
-        DirectService ds = new DirectService();
-        ds.setLinkFactory(lf);
-        ds.setResponseRenderer(rr);
-
-        ds.service(cycle);
-
-        verify();
-    }
-
-    public void test_Service_Not_Direct() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IComponent c = newComponent();
-        Location l = newLocation();
-
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, null);
-
-        trainGetPage(cycle, "ActivePage", page);
-        cycle.activate(page);
-
-        trainGetNestedComponent(page, "fred.barney", c);
-
-        trainGetExtendedId(c, "ActivePage/fred.barney");
-        trainGetLocation(c, l);
-
-        replay();
-
-        DirectService ds = new DirectService();
-
-        try
-        {
-            ds.service(cycle);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Component ActivePage/fred.barney does not implement the org.apache.tapestry.IDirect interface.",
-                    ex.getMessage());
-            assertSame(c, ex.getComponent());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    public void test_Session_Active_And_Required() throws Exception
-    {
-        Object[] parameters = new Object[0];
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IDirect d = newDirect(false);
-        
-        LinkFactory lf = newLinkFactory();
-        ResponseRenderer rr = newResponseRenderer();
-
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, "T");
-
-        trainGetPage(cycle, "ActivePage", page);
-        cycle.activate(page);
-
-        trainGetNestedComponent(page, "fred.barney", d);
-
-        trainIsStateful(d, true);
-
-        WebSession session = newMock(WebSession.class);
-        WebRequest request = newWebRequest(session);
-        
-        expect(session.isNew()).andReturn(false);
-        
-        trainExtractListenerParameters(lf, cycle, parameters);
-        
-        expect(cycle.getParameter(BrowserEvent.NAME)).andReturn(null);
-        
-        cycle.setListenerParameters(parameters);
-
-        d.trigger(cycle);
-
-        rr.renderResponse(cycle);
-
-        replay();
-
-        DirectService ds = new DirectService();
-        ds.setLinkFactory(lf);
-        ds.setResponseRenderer(rr);
-        ds.setRequest(request);
-
-        ds.service(cycle);
-
-        verify();
-    }
-
-    protected void trainIsStateful(IDirect direct, boolean isStateful)
-    {
-        expect(direct.isStateful()).andReturn(isStateful);
-    }
-
-    public void test_Stale_Session() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        IDirect d = newDirect(false);
-        
-        Location l = newLocation();
-
-        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
-        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        trainGetParameter(cycle, ServiceConstants.SESSION, "T");
-
-        trainGetPage(cycle, "ActivePage", page);
-        cycle.activate(page);
-
-        trainGetNestedComponent(page, "fred.barney", d);
-
-        trainIsStateful(d, true);
-        
-        WebRequest request = newWebRequest(null);
-        
-        trainGetExtendedId(d, "ActivePage/fred.barney");
-        trainGetLocation(page, l);
-        trainGetPageName(page, "ActivePage");
-
-        replay();
-
-        DirectService ds = new DirectService();
-        ds.setRequest(request);
-
-        try
-        {
-            ds.service(cycle);
-            unreachable();
-        }
-        catch (StaleSessionException ex)
-        {
-            assertEquals(
-                    "Component ActivePage/fred.barney is stateful, but the HttpSession has expired (or has not yet been created).",
-                    ex.getMessage());
-            assertSame(page, ex.getComponent());
-            assertSame(l, ex.getLocation());
-            assertEquals("ActivePage", ex.getPageName());
-            assertSame(page, ex.getPage());
-        }
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/EngineServiceLinkTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/EngineServiceLinkTest.java
deleted file mode 100644
index 39854af..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/EngineServiceLinkTest.java
+++ /dev/null
@@ -1,212 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.commons.codec.net.URLCodec;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.QueryParameterMap;
-import org.apache.tapestry.web.WebRequest;
-import org.testng.annotations.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.EngineServiceLink}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-@Test
-public class EngineServiceLinkTest extends BaseComponentTestCase
-{
-    private URLCodec _urlCodec = new URLCodec();
-
-    private static final String ENCODING = "utf-8";
-
-    private QueryParameterMap buildParameters(String serviceName, String[] serviceParameters)
-    {
-        Map result = new HashMap();
-
-        result.put(ServiceConstants.SERVICE, serviceName);
-        result.put(ServiceConstants.PARAMETER, serviceParameters);
-
-        return new QueryParameterMap(result);
-    }
-
-    /** @since 4.0 */
-    public void testGetURLWithParameters()
-    {
-        WebRequest request = newRequest();
-
-        EngineServiceLink l = new EngineServiceLink("/context/servlet", ENCODING, _urlCodec,
-                request, buildParameters("myservice", null), true);
-
-        replay();
-
-        assertEquals("/context/servlet?service=myservice", l.getURL());
-
-        verify();
-
-        assertListEquals(new String[]
-        { ServiceConstants.SERVICE, ServiceConstants.PARAMETER }, l.getParameterNames());
-
-    }
-
-    public void testGetURLWithServiceParameters()
-    {
-        WebRequest request = newRequest();
-
-        EngineServiceLink l = new EngineServiceLink("/ctx/app", ENCODING, _urlCodec, request,
-                buildParameters("foo", new String[]
-                { "godzilla", "frodo" }), false);
-        
-        replay();
-
-        assertEquals("/ctx/app?service=foo&sp=godzilla&sp=frodo", l.getURL());
-
-        verify();
-    }
-
-    /** @since 4.0 */
-
-    public void testGetURLSansParameters()
-    {
-        WebRequest request = newRequest();
-
-        EngineServiceLink l = new EngineServiceLink("/context/servlet", ENCODING, _urlCodec,
-                request, buildParameters("myservice", null), true);
-
-        replay();
-        
-        assertEquals("/context/servlet", l.getURL(null, false));
-
-        verify();
-    }
-
-    /** @since 4.0 */
-
-    public void testGetURLWithAnchor()
-    {
-        WebRequest request = newRequest();
-
-        EngineServiceLink l = new EngineServiceLink("/context/servlet", ENCODING, _urlCodec,
-                request, buildParameters("myservice", null), false);
-        
-        replay();
-
-        assertEquals("/context/servlet#anchor", l.getURL("anchor", false));
-
-        verify();
-    }
-
-    public void testGetURLWithAnchorAndParameters() throws Exception
-    {
-        WebRequest request = newRequest();
-
-        EngineServiceLink l = new EngineServiceLink("/context/servlet", ENCODING, _urlCodec,
-                request, buildParameters("myservice", null), false);
-        
-        replay();
-
-        assertEquals("/context/servlet?service=myservice#anchor", l.getURL("anchor", true));
-
-        verify();
-    }
-
-    public void testGetAbsoluteURL() throws Exception
-    {
-        WebRequest request = newRequest();
-
-        EngineServiceLink l = new EngineServiceLink("/ctx/app", ENCODING, _urlCodec, request,
-                buildParameters("myservice", null), false);
-
-        trainGetServerPort(request, 9187);
-        
-        trainGetScheme(request, "HTTP");
-        
-        trainGetServerName(request, "TESTSERVER.COM");
-        
-        replay();
-        
-        assertEquals("HTTP://TESTSERVER.COM:9187/ctx/app?service=myservice", l.getAbsoluteURL());
-
-        verify();
-    }
-
-    public void testGetAbsoluteURLWithOverrides() throws Exception
-    {
-        WebRequest request = newRequest();
-
-        EngineServiceLink l = new EngineServiceLink("/ctx/app", ENCODING, _urlCodec, request,
-                buildParameters("myservice", null), false);
-        
-        replay();
-
-        assertEquals("https://myserver.net:9100/ctx/app?service=myservice", l.getAbsoluteURL(
-                "https",
-                "myserver.net",
-                9100,
-                null,
-                true));
-
-        verify();
-    }
-
-    public void testGetURLNotAbsolute()
-    {
-        WebRequest request = newRequest();
-
-        trainGetScheme(request, "http");
-        trainGetServerName(request, "myserver.net");
-        trainGetServerPort(request, 80);
-        
-        replay();
-
-        EngineServiceLink l = new EngineServiceLink("/ctx/app", ENCODING, _urlCodec, request,
-                buildParameters("myservice", null), false);
-
-        assertEquals("/ctx/app?service=myservice#myanchor", l.getURL(
-                "http",
-                "myserver.net",
-                80,
-                "myanchor",
-                true));
-
-        verify();
-    }
-
-    public void testGetURLAbsolute()
-    {
-        WebRequest request = newRequest();
-
-        trainGetScheme(request, "http");
-        
-        replay();
-
-        EngineServiceLink l = new EngineServiceLink("/ctx/app", ENCODING, _urlCodec, request,
-                buildParameters("myservice", null), false);
-
-        assertEquals("https://override.net:8080/ctx/app?service=myservice#myanchor", l.getURL(
-                "https",
-                "override.net",
-                8080,
-                "myanchor",
-                true));
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/EngineUtilsTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/EngineUtilsTest.java
deleted file mode 100644
index b10c5b3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/EngineUtilsTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.engine;

-

-import org.apache.tapestry.web.WebRequest;

-import org.testng.annotations.Test;

-

-/**

- * Tests for code inside {@link org.apache.tapestry.engine.EngineUtils}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test(sequential = true)

-public class EngineUtilsTest extends ServiceTestCase

-{

-

-    public void testNeedAbsoluteURLForScheme()

-    {

-        WebRequest request = newRequest();

-

-        trainGetScheme(request, "http");

-

-        replay();

-

-        assertEquals(true, EngineUtils.needAbsoluteURL("https", null, 0, request));

-

-        verify();

-    }

-

-    public void testNeedAbsoluteURLForServer()

-    {

-        WebRequest request = newRequest();

-

-        trainGetServerName(request, "someserver.net");

-

-        replay();

-

-        assertEquals(true, EngineUtils.needAbsoluteURL(null, "myserver.com", 0, request));

-

-        verify();

-    }

-

-    public void testNeedAbsoluteURLForServerPort()

-    {

-        WebRequest request = newRequest();

-

-        trainGetServerPort(request, 80);

-

-        replay();

-

-        assertEquals(true, EngineUtils.needAbsoluteURL(null, null, 8197, request));

-

-        verify();

-    }

-

-    public void testDontNeedAbsoluteURL()

-    {

-        WebRequest request = newRequest();

-

-        replay();

-

-        assertEquals(false, EngineUtils.needAbsoluteURL(null, null, 0, request));

-

-        verify();

-

-        trainGetScheme(request, "http");

-

-        trainGetServerName(request, "myserver.com");

-

-        trainGetServerPort(request, 80);

-

-        replay();

-

-        assertEquals(false, EngineUtils.needAbsoluteURL("http", "myserver.com", 80, request));

-

-        verify();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/ExternalServiceTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/ExternalServiceTest.java
deleted file mode 100644
index 77c4f22..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/ExternalServiceTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.ExternalService}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class ExternalServiceTest extends ServiceTestCase
-{
-    public void test_Get_Link()
-    {
-        Object[] serviceParameters = new Object[0];
-        LinkFactory lf = newLinkFactory();
-        ILink link = newLink();
-
-        Map parameters = new HashMap();
-        parameters.put(ServiceConstants.PAGE, "ActivePage");
-        parameters.put(ServiceConstants.PARAMETER, serviceParameters);
-
-        ExternalService es = new ExternalService();
-        es.setLinkFactory(lf);
-
-        trainConstructLink(lf, es, false, parameters, true, link);
-
-        replay();
-
-        ExternalServiceParameter p = new ExternalServiceParameter("ActivePage", serviceParameters);
-
-        assertSame(link, es.getLink(false, p));
-
-        verify();
-    }
-
-    public void test_Service() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        IExternalPage page = newMock(IExternalPage.class);
-        Object[] parameters = new Object[0];
-        LinkFactory lf = newLinkFactory();
-        ResponseRenderer rr = newResponseRenderer();
-        
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-        
-        trainGetPage(cycle, "ActivePage", page);
-        
-        trainExtractListenerParameters(lf, cycle, parameters);
-        
-        cycle.setListenerParameters(parameters);
-        cycle.activate(page);
-        
-        page.activateExternalPage(parameters, cycle);
-        
-        rr.renderResponse(cycle);
-
-        replay();
-
-        ExternalService es = new ExternalService();
-        es.setLinkFactory(lf);
-        es.setResponseRenderer(rr);
-
-        es.service(cycle);
-
-        verify();
-    }
-
-    public void test_Service_Wrong_Type() throws Exception
-    {
-
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        Location l = newLocation();
-
-        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
-
-        trainGetPage(cycle, "ActivePage", page);
-
-        trainGetPageName(page, "ActivePage");
-        trainGetLocation(page, l);
-
-        replay();
-
-        ExternalService es = new ExternalService();
-
-        try
-        {
-            es.service(cycle);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Page ActivePage does not implement the org.apache.tapestry.IExternalPage interface.",
-                    ex.getMessage());
-            assertSame(l, ex.getLocation());
-            assertSame(page, ex.getComponent());
-        }
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/PageServiceTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/PageServiceTest.java
deleted file mode 100644
index 06a52f1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/PageServiceTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-import org.testng.annotations.Test;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class PageServiceTest extends ServiceTestCase
-{
-    public void testGetLink()
-    {
-        LinkFactory lf = newLinkFactory();
-        ILink link = newLink();
-
-        Map parameters = new HashMap();
-        parameters.put(ServiceConstants.PAGE, "TargetPage");
-
-        PageService ps = new PageService();
-        ps.setLinkFactory(lf);
-
-        trainConstructLink(lf, ps, false, parameters, true, link);
-
-        replay();
-
-        assertSame(link, ps.getLink(false, "TargetPage"));
-
-        verify();
-    }
-
-    public void testService() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        ResponseRenderer rr = newResponseRenderer();
-
-        trainGetParameter(cycle, ServiceConstants.PAGE, "TargetPage");
-
-        cycle.activate("TargetPage");
-
-        rr.renderResponse(cycle);
-
-        replay();
-
-        PageService ps = new PageService();
-        ps.setResponseRenderer(rr);
-
-        ps.service(cycle);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/RequestCycleTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/RequestCycleTest.java
deleted file mode 100644
index 6dd33aa..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/RequestCycleTest.java
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ErrorHandler;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.RedirectException;
-import org.apache.tapestry.pageload.PageSource;
-import org.apache.tapestry.record.PropertyPersistenceStrategySource;
-import org.apache.tapestry.services.AbsoluteURLBuilder;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.services.ServiceMap;
-import org.apache.tapestry.util.QueryParameterMap;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.RequestCycle}. Mostly just tests changes for 4.0
- * (3.0 code is still mostly tested via the mock integration tests).
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class RequestCycleTest extends BaseComponentTestCase
-{
-    private IEngine newEngine()
-    {
-        return newMock(IEngine.class);
-    }
-
-    private PropertyPersistenceStrategySource newStrategySource()
-    {
-        return newMock(PropertyPersistenceStrategySource.class);
-    }
-
-    private ErrorHandler newErrorHandler()
-    {
-        return newMock(ErrorHandler.class);
-    }
-
-    private AbsoluteURLBuilder newBuilder()
-    {
-        return newMock(AbsoluteURLBuilder.class);
-    }
-
-    private IEngineService newService()
-    {
-        return newMock(IEngineService.class);
-    }
-
-    public void testGetters()
-    {
-        Infrastructure infrastructure = newMock(Infrastructure.class);
-        PageSource pageSource = new PageSource();
-        
-        expect(infrastructure.getPageSource()).andReturn(pageSource);
-        
-        IEngineService service = newService();
-        ServiceMap map = newServiceMap("fred", service);
-        
-        expect(infrastructure.getServiceMap()).andReturn(map);
-        
-        RequestCycleEnvironment env = new RequestCycleEnvironment(newErrorHandler(),
-                infrastructure, newStrategySource(), newBuilder());
-        
-        IEngine engine = newEngine();
-        
-        replay();
-        
-        IRequestCycle cycle = new RequestCycle(engine, new QueryParameterMap(), "fred", env);
-
-        assertSame(infrastructure, cycle.getInfrastructure());
-        assertSame(service, cycle.getService());
-        assertSame(engine, cycle.getEngine());
-
-        verify();
-    }
-
-    private ServiceMap newServiceMap(String serviceName, IEngineService service)
-    {
-        ServiceMap map = newMock(ServiceMap.class);
-        checkOrder(map, false);
-        
-        expect(map.getService(serviceName)).andReturn(service);
-
-        return map;
-    }
-
-    public void testForgetPage()
-    {
-        Infrastructure infrastructure = newMock(Infrastructure.class);
-        PageSource pageSource = new PageSource();
-        
-        expect(infrastructure.getPageSource()).andReturn(pageSource);
-        
-        PropertyPersistenceStrategySource source = newStrategySource();
-        RequestCycleEnvironment env = new RequestCycleEnvironment(newErrorHandler(),
-                infrastructure, source, newBuilder());
-        IEngine engine = newEngine();
-
-        replay();
-
-        IRequestCycle cycle = new RequestCycle(engine, new QueryParameterMap(), null, env);
-
-        cycle.getEngine();
-
-        verify();
-        
-        source.discardAllStoredChanged("MyPage");
-        
-        replay();
-        
-        cycle.forgetPage("MyPage");
-        
-        verify();
-    }
-
-    public void testSendRedirect()
-    {
-        IRequestCycle cycle = new RequestCycle();
-        
-        try
-        {
-            cycle.sendRedirect("http://foo/bar");
-            unreachable();
-        }
-        catch (RedirectException ex)
-        {
-            assertEquals("http://foo/bar", ex.getRedirectLocation());
-        }
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/ResetServiceTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/ResetServiceTest.java
deleted file mode 100644
index dc9e990..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/ResetServiceTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResetEventHub;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.ResetService}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class ResetServiceTest extends ServiceTestCase
-{
-    public void testGetLink()
-    {
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-        LinkFactory lf = newLinkFactory();
-        ILink link = newLink();
-
-        ResetService s = new ResetService();
-        s.setLinkFactory(lf);
-        s.setRequestCycle(cycle);
-
-        trainGetPage(cycle, page);
-        trainGetPageName(page, "TargetPage");
-
-        Map parameters = new HashMap();
-        parameters.put(ServiceConstants.PAGE, "TargetPage");
-
-        trainConstructLink(lf, s, false, parameters, true, link);
-
-        replay();
-
-        assertSame(link, s.getLink(false, null));
-
-        verify();
-    }
-
-    public void testService() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        ResetEventHub hub = newMock(ResetEventHub.class);
-        ResponseRenderer rr = newResponseRenderer();
-
-        trainGetParameter(cycle, ServiceConstants.PAGE, "TargetPage");
-
-        hub.fireResetEvent();
-
-        cycle.activate("TargetPage");
-
-        rr.renderResponse(cycle);
-
-        replay();
-
-        ResetService rs = new ResetService();
-        rs.setEnabled(true);
-        rs.setResetEventHub(hub);
-        rs.setResponseRenderer(rr);
-
-        rs.service(cycle);
-
-        verify();
-    }
-
-    public void testServiceNotEnabled() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        ResetEventHub hub = newMock(ResetEventHub.class);
-        ResponseRenderer rr = newResponseRenderer();
-
-        trainGetParameter(cycle, ServiceConstants.PAGE, "TargetPage");
-
-        cycle.activate("TargetPage");
-
-        rr.renderResponse(cycle);
-
-        replay();
-
-        ResetService rs = new ResetService();
-        rs.setEnabled(false);
-        rs.setResetEventHub(hub);
-        rs.setResponseRenderer(rr);
-
-        rs.service(cycle);
-
-        verify();
-
-    }
-
-    public void testGetLinkNonNullParameter()
-    {
-        ResetService s = new ResetService();
-
-        try
-        {
-            s.getLink(false, "NonNullValue");
-            unreachable();
-        }
-        catch (IllegalArgumentException ex)
-        {
-            assertEquals(EngineMessages.serviceNoParameter(s), ex.getMessage());
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/RestartServiceTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/RestartServiceTest.java
deleted file mode 100644
index aba52fb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/RestartServiceTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import org.apache.commons.logging.Log;
-import org.apache.tapestry.IRequestCycle;
-import org.testng.annotations.Test;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.RestartService}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class RestartServiceTest extends ServiceTestCase
-{
-    public void testNoSession() throws Exception
-    {
-        HttpServletRequest request = newServletRequest();
-        HttpServletResponse response = newServletResponse();
-        IRequestCycle cycle = newCycle();
-
-        // Training
-
-        trainGetSession(request, false, null);
-        trainGetAbsoluteURL(cycle, "/app", "http://myserver/app");
-
-        response.sendRedirect("http://myserver/app");
-
-        replay();
-
-        RestartService s = new RestartService();
-        s.setRequest(request);
-        s.setResponse(response);
-        s.setServletPath("/app");
-
-        s.service(cycle);
-
-        verify();
-    }
-
-    private void trainGetSession(HttpServletRequest request, boolean create, HttpSession session)
-    {
-        expect(request.getSession(create)).andReturn(session);
-    }
-
-    private HttpServletResponse newServletResponse()
-    {
-        return newMock(HttpServletResponse.class);
-    }
-
-    private HttpServletRequest newServletRequest()
-    {
-        return newMock(HttpServletRequest.class);
-    }
-
-    public void testWithSession() throws Exception
-    {
-        HttpServletRequest request = newServletRequest();
-        HttpServletResponse response = newServletResponse();
-        HttpSession session = newHttpSession();
-
-        IRequestCycle cycle = newCycle();
-
-        // Training
-
-        trainGetSession(request, false, session);
-
-        session.invalidate();
-
-        trainGetAbsoluteURL(cycle, "/app", "http://myserver/app");
-
-        response.sendRedirect("http://myserver/app");
-
-        replay();
-
-        RestartService s = new RestartService();
-        s.setRequest(request);
-        s.setResponse(response);
-        s.setServletPath("/app");
-
-        s.service(cycle);
-
-        verify();
-    }
-
-    private HttpSession newHttpSession()
-    {
-        return newMock(HttpSession.class);
-    }
-
-    public void testErrorInvalidatingSession() throws Exception
-    {
-        HttpServletRequest request = newServletRequest();
-        HttpServletResponse response = newServletResponse();
-        HttpSession session = newHttpSession();
-        Log log = newLog();
-        Throwable ex = new IllegalStateException("Bad state");
-
-        IRequestCycle cycle = newCycle();
-
-        // Training
-
-        trainGetSession(request, false, session);
-
-        session.invalidate();
-        expectLastCall().andThrow(ex);
-
-        log.warn("Exception thrown invalidating HttpSession.", ex);
-
-        trainGetAbsoluteURL(cycle, "/app", "http://myserver/app");
-
-        response.sendRedirect("http://myserver/app");
-
-        replay();
-
-        RestartService s = new RestartService();
-        s.setRequest(request);
-        s.setResponse(response);
-        s.setServletPath("/app");
-        s.setLog(log);
-
-        s.service(cycle);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/ServiceTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/ServiceTestCase.java
deleted file mode 100644
index 69d23bc..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/ServiceTestCase.java
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-/**
- * Common utilities for building tests for {@link org.apache.tapestry.engine.IEngineService}s.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class ServiceTestCase extends BaseComponentTestCase
-{
-
-    protected IPage newPage(String name)
-    {
-        IPage result = newMock(IPage.class);
-        checkOrder(result, false);
-        
-        expect(result.getPageName()).andReturn(name);
-        return result;
-    }
-
-    protected HttpServletRequest newRequest(HttpSession session)
-    {
-        HttpServletRequest result = newMock(HttpServletRequest.class);
-
-        expect(result.getSession()).andReturn(session);
-
-        return result;
-    }
-
-    protected WebRequest newWebRequest(WebSession session)
-    {
-        WebRequest result = newMock(WebRequest.class);
-
-        expect(result.getSession(false)).andReturn(session);
-
-        return result;
-    }
-
-    protected HttpServletRequest newRequest(boolean create, HttpSession session)
-    {
-        HttpServletRequest result = newMock(HttpServletRequest.class);
-
-        expect(result.getSession(create)).andReturn(session);
-
-        return result;
-    }
-
-    protected WebRequest newWebRequest(boolean create, WebSession session)
-    {
-        WebRequest result = newMock(WebRequest.class);
-
-        expect(result.getSession(create)).andReturn(session);
-
-        return result;
-    }
-
-    protected HttpSession newSession(boolean isNew)
-    {
-        HttpSession session = newSession();
-
-        expect(session.isNew()).andReturn(isNew);
-
-        return session;
-    }
-
-    protected WebSession newWebSession(boolean isNew)
-    {
-        WebSession session = newWebSession();
-        checkOrder(session, false);
-        
-        expect(session.isNew()).andReturn(isNew);
-
-        return session;
-    }
-
-    protected HttpSession newSession()
-    {
-        return newMock(HttpSession.class);
-    }
-
-    protected WebSession newWebSession()
-    {
-        return newMock(WebSession.class);
-    }
-
-    protected ILink newLink()
-    {
-        return newMock(ILink.class);
-    }
-
-    protected LinkFactory newLinkFactory(Map parameters, boolean stateful, ILink link)
-    {
-        LinkFactory lf = newMock(LinkFactory.class);
-
-        expect(lf.constructLink(null, false, parameters, stateful)).andReturn(link);
-
-        return lf;
-    }
-
-    protected ResponseRenderer newResponseRenderer()
-    {
-        return newMock(ResponseRenderer.class);
-    }
-
-    protected void trainConstructLink(LinkFactory linkFactory, IEngineService service,
-            boolean post, Map parameters, boolean stateful, ILink link)
-    {
-        expect(linkFactory.constructLink(service, post, parameters, stateful)).andReturn(link);
-    }
-
-    protected LinkFactory newLinkFactory()
-    {
-        return newMock(LinkFactory.class);
-    }
-
-    protected void trainGetPage(IRequestCycle cycle, IPage page)
-    {
-        expect(cycle.getPage()).andReturn(page);
-    }
-
-    protected void trainGetNestedComponent(IPage page, String idPath, IComponent component)
-    {
-        expect(page.getNestedComponent(idPath)).andReturn(component);
-    }
-
-    protected void trainGetPage(IRequestCycle cycle, String pageName, IPage page)
-    {
-        expect(cycle.getPage(pageName)).andReturn(page);
-    }
-
-    protected void trainExtractListenerParameters(LinkFactory factory, IRequestCycle cycle, Object[] parameters)
-    {
-        expect(factory.extractListenerParameters(cycle)).andReturn(parameters);
-    }
-
-    protected void trainGetAbsoluteURL(IRequestCycle cycle, String shortURL, String fullURL)
-    {
-        expect(cycle.getAbsoluteURL(shortURL)).andReturn(fullURL);
-    }
-    
-    protected Log newLog()
-    {
-        return newMock(Log.class);
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/TestNamespaceProperties.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/TestNamespaceProperties.java
deleted file mode 100644
index 268557e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/TestNamespaceProperties.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.TestBase;
-import org.apache.tapestry.spec.ILibrarySpecification;
-import org.apache.tapestry.spec.LibrarySpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests property value getting logic of {@link Namespace}.
- */
-@Test
-public class TestNamespaceProperties extends TestBase {
-
-    public void test_Simple_Get_Property()
-    {
-        ILibrarySpecification spec = new LibrarySpecification();
-        INamespace ns = new Namespace("test", null, spec, null);
-
-        spec.setProperty("key", "value");
-
-        assertEquals(ns.getPropertyValue("key"), "value");
-    }
-
-    public void test_Get_Immediate_Property()
-    {
-        ILibrarySpecification parentSpec = new LibrarySpecification();
-        INamespace parentNs = new Namespace("parent", null, parentSpec, null);
-
-        ILibrarySpecification spec = new LibrarySpecification();
-        INamespace ns = new Namespace("test", parentNs, spec, null);
-
-        parentSpec.setProperty("barney", "rubble");
-        spec.setProperty("barney", "bam bam");
-
-        assertEquals(ns.getPropertyValue("barney"), "bam bam");
-    }
-
-    public void test_Get_Parent_Property()
-    {
-        ILibrarySpecification parentSpec = new LibrarySpecification();
-        INamespace parentNs = new Namespace("parent", null, parentSpec, null);
-
-        ILibrarySpecification spec = new LibrarySpecification();
-        INamespace ns = new Namespace("test", parentNs, spec, null);
-
-        parentSpec.setProperty("barney", "rubble");
-
-        assertEquals(ns.getPropertyValue("barney"), "rubble");
-        assert ns.getPropertyValue("nothere") == null;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/TestServiceEncoding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/TestServiceEncoding.java
deleted file mode 100644
index 87c9ffd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/TestServiceEncoding.java
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.util.QueryParameterMap;
-import org.testng.annotations.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.ServiceEncodingImpl}.
- * 
- * @author Howard M. Lewis Ship
- */
-@Test
-public class TestServiceEncoding extends BaseComponentTestCase
-{
-    public void testSetServletPath()
-    {
-        ServiceEncodingImpl se = new ServiceEncodingImpl("/bar");
-
-        assertEquals("/bar", se.getServletPath());
-        assertEquals(false, se.isModified());
-
-        se.setServletPath("/foo");
-
-        assertEquals("/foo", se.getServletPath());
-        assertEquals(true, se.isModified());
-    }
-
-    public void testCreateWithExistingMap()
-    {
-        Map parameters = new HashMap();
-
-        ServiceEncodingImpl se = new ServiceEncodingImpl("/foo", new QueryParameterMap(parameters));
-
-        se.setParameterValue("foo", "bar");
-
-        assertEquals("bar", parameters.get("foo"));
-    }
-
-    public void testGetParameterValue()
-    {
-        ServiceEncodingImpl se = new ServiceEncodingImpl("/foo");
-
-        se.setParameterValue("foo", "bar");
-
-        assertEquals(true, se.isModified());
-
-        assertEquals("bar", se.getParameterValue("foo"));
-
-        se.setParameterValues("flintstone", new String[]
-        { "fred", "wilma", "dino" });
-
-        assertEquals("fred", se.getParameterValue("flintstone"));
-
-        assertNull(se.getParameterValue("unknown"));
-    }
-
-    public void testGetParameterValues()
-    {
-        ServiceEncodingImpl se = new ServiceEncodingImpl("/foo");
-        se.setParameterValues("flintstone", new String[]
-        { "fred", "wilma", "dino" });
-
-        assertListEquals(new String[]
-        { "fred", "wilma", "dino" }, se.getParameterValues("flintstone"));
-
-        assertEquals(true, se.isModified());
-
-        se.setParameterValue("foo", "bar");
-
-        assertListEquals(new String[]
-        { "bar" }, se.getParameterValues("foo"));
-
-        assertNull(se.getParameterValue("unknown"));
-    }
-
-    public void testResetModified()
-    {
-        ServiceEncodingImpl se = new ServiceEncodingImpl("/bar");
-
-        assertEquals(false, se.isModified());
-
-        se.setServletPath("/foo");
-
-        assertEquals(true, se.isModified());
-
-        se.resetModified();
-
-        assertEquals(false, se.isModified());
-    }
-
-    public void testGetParameterNames()
-    {
-        ServiceEncodingImpl se = new ServiceEncodingImpl("/foo");
-
-        se.setParameterValue("foo", "bar");
-        se.setParameterValue("alpha", "beta");
-
-        assertListEquals(new String[]
-        { "alpha", "foo" }, se.getParameterNames());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java
deleted file mode 100644
index 31b213e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.encoders;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.TestBase;
-import org.apache.tapestry.asset.AssetService;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.services.ServiceConstants;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.encoders.AssetEncoder}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class AssetEncoderTest extends TestBase {
-    public void test_Wrong_Service()
-    {
-        ServiceEncoding encoding = newEncoding();
-
-        trainGetParameterValue(encoding, ServiceConstants.SERVICE, "foo");
-
-        replay();
-
-        new AssetEncoder().encode(encoding);
-
-        verify();
-    }
-
-    protected void trainGetParameterValue(ServiceEncoding encoding, String name, String value)
-    {
-        expect(encoding.getParameterValue(name)).andReturn(value);
-    }
-
-    protected ServiceEncoding newEncoding()
-    {
-        return newMock(ServiceEncoding.class);
-    }
-
-    public void test_Wrong_Path()
-    {
-        ServiceEncoding encoding = newEncoding();
-
-        trainGetServletPath(encoding, "/Home.page");
-
-        replay();
-
-        AssetEncoder encoder = new AssetEncoder();
-        encoder.setPath("/assets");
-
-        encoder.decode(encoding);
-
-        verify();
-    }
-
-    protected void trainGetServletPath(ServiceEncoding encoding, String servletPath)
-    {
-        expect(encoding.getServletPath()).andReturn(servletPath);
-    }
-
-    public void test_Encode()
-    {
-        ServiceEncoding encoding = newEncoding();
-        
-        trainGetParameterValue(encoding, ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
-        trainGetParameterValue(encoding, AssetService.PATH, "/foo/bar/Baz.gif");
-        trainGetParameterValue(encoding, AssetService.DIGEST, "12345");
-        
-        encoding.setServletPath("/assets/12345/foo/bar/Baz.gif");
-        encoding.setParameterValue(AssetService.PATH, null);
-        encoding.setParameterValue(AssetService.DIGEST, null);
-        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-
-        replay();
-
-        AssetEncoder encoder = new AssetEncoder();
-        encoder.setPath("/assets");
-
-        encoder.encode(encoding);
-
-        verify();
-    }
-
-    public void test_Encode_Missing_Path()
-    {
-        ServiceEncoding encoding = newEncoding();
-        
-        trainGetParameterValue(encoding, ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
-        trainGetParameterValue(encoding, AssetService.PATH, "foo/bar/Baz.gif");
-        trainGetParameterValue(encoding, AssetService.DIGEST, "12345");
-        
-        encoding.setServletPath("/assets/12345/foo/bar/Baz.gif");
-        encoding.setParameterValue(AssetService.PATH, null);
-        encoding.setParameterValue(AssetService.DIGEST, null);
-        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-        
-        replay();
-
-        AssetEncoder encoder = new AssetEncoder();
-        encoder.setPath("/assets");
-
-        encoder.encode(encoding);
-
-        verify();
-    }
-    
-    public void test_Decode()
-    {
-        ServiceEncoding encoding = newEncoding();
-
-        trainGetServletPath(encoding, "/assets");
-        trainGetPathInfo(encoding, "/12345/foo/bar/Baz.gif");
-
-        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
-        encoding.setParameterValue(AssetService.DIGEST, "12345");
-        encoding.setParameterValue(AssetService.PATH, "/foo/bar/Baz.gif");
-
-        replay();
-
-        AssetEncoder encoder = new AssetEncoder();
-        encoder.setPath("/assets");
-
-        encoder.decode(encoding);
-
-        verify();
-    }
-
-    protected void trainGetPathInfo(ServiceEncoding encoding, String pathInfo)
-    {
-        expect(encoding.getPathInfo()).andReturn(pathInfo);
-    }
-    
-    public void test_Encode_Unprotected()
-    {
-        ServiceEncoding encoding = newEncoding();
-
-        trainGetParameterValue(encoding, ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
-        trainGetParameterValue(encoding, AssetService.PATH, "/foo/bar/Baz.gif");
-        trainGetParameterValue(encoding, AssetService.DIGEST, null);
-        
-        encoding.setServletPath("/assets/" + AssetEncoder.DIGEST_STATIC + "/foo/bar/Baz.gif");
-        encoding.setParameterValue(AssetService.PATH, null);
-        encoding.setParameterValue(AssetService.DIGEST, null);
-        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-
-        replay();
-
-        AssetEncoder encoder = new AssetEncoder();
-        encoder.setPath("/assets");
-
-        encoder.encode(encoding);
-
-        verify();
-    }
-    
-    public void test_Decode_Unprotected()
-    {
-        ServiceEncoding encoding = newEncoding();
-        
-        trainGetServletPath(encoding, "/assets");
-        trainGetPathInfo(encoding, "/" + AssetEncoder.DIGEST_STATIC + "/foo/bar/Baz.gif");
-        
-        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
-        encoding.setParameterValue(AssetService.DIGEST, AssetEncoder.DIGEST_STATIC);
-        encoding.setParameterValue(AssetService.PATH, "/foo/bar/Baz.gif");
-
-        replay();
-
-        AssetEncoder encoder = new AssetEncoder();
-        encoder.setPath("/assets");
-
-        encoder.decode(encoding);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/PathEncoderTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/PathEncoderTest.java
deleted file mode 100644
index eaa0357..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/PathEncoderTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.apache.tapestry.engine.encoders;
-
-import org.apache.tapestry.TestBase;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.services.ServiceConstants;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests functionality of the {@link PathEncoder} .
- */
-@Test
-public class PathEncoderTest extends TestBase {
-
-    public void test_Wrong_Service()
-    {
-        ServiceEncoding encoding = newEncoding();
-
-        trainGetParameterValue(encoding, ServiceConstants.SERVICE, "foo");
-
-        replay();
-
-        PathEncoder encoder = new PathEncoder();
-        encoder.setService("bar");
-        
-        encoder.encode(encoding);
-
-        verify();
-    }
-
-    protected void trainGetParameterValue(ServiceEncoding encoding, String name, String value)
-    {
-        expect(encoding.getParameterValue(name)).andReturn(value);
-    }
-
-    protected ServiceEncoding newEncoding()
-    {
-        return newMock(ServiceEncoding.class);
-    }
-
-    public void test_Wrong_Path()
-    {
-        ServiceEncoding encoding = newEncoding();
-
-        trainGetServletPath(encoding, "/Home.page");
-
-        replay();
-
-        PathEncoder encoder = new PathEncoder();
-        encoder.setPath("/rounded");
-        encoder.setService("rounded");
-        
-        encoder.decode(encoding);
-
-        verify();
-    }
-
-    protected void trainGetServletPath(ServiceEncoding encoding, String servletPath)
-    {
-        expect(encoding.getServletPath()).andReturn(servletPath);
-    }
-
-    public void test_Encode()
-    {
-        ServiceEncoding encoding = newEncoding();
-
-        trainGetParameterValue(encoding, ServiceConstants.SERVICE, "rounded");
-
-        encoding.setServletPath("/rounded");
-        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-
-        replay();
-
-        PathEncoder encoder = new PathEncoder();
-        encoder.setPath("/rounded");
-        encoder.setService("rounded");
-
-        encoder.encode(encoding);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/TestDirectServiceEncoder.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/TestDirectServiceEncoder.java
deleted file mode 100644
index ba33e2f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/TestDirectServiceEncoder.java
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.encoders;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.services.ServiceConstants;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.encoders.DirectServiceEncoder}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestDirectServiceEncoder extends BaseComponentTestCase
-{
-    private ServiceEncoding newEncoding(String servletPath)
-    {
-        ServiceEncoding encoding = newMock(ServiceEncoding.class);
-
-        expect(encoding.getServletPath()).andReturn(servletPath);
-
-        return encoding;
-    }
-
-    private void train(ServiceEncoding encoding, String parameterName,
-            String parameterValue)
-    {
-        expect(encoding.getParameterValue(parameterName)).andReturn(parameterValue);
-    }
-
-    public void testEncodeWrongService()
-    {
-        ServiceEncoding encoding = newMock(ServiceEncoding.class);
-
-        train(encoding, ServiceConstants.SERVICE, "foo");
-
-        replay();
-
-        DirectServiceEncoder encoder = new DirectServiceEncoder();
-
-        encoder.encode(encoding);
-
-        verify();
-    }
-
-    public void testEncodePageInNamespace()
-    {
-        ServiceEncoding encoding = newMock(ServiceEncoding.class);
-
-        train(encoding, ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
-        train(encoding, ServiceConstants.PAGE, "foo:Bar");
-
-        replay();
-
-        DirectServiceEncoder encoder = new DirectServiceEncoder();
-
-        encoder.encode(encoding);
-
-        verify();
-    }
-
-    public void testEncodeStateless()
-    {
-        ServiceEncoding encoding = newMock(ServiceEncoding.class);
-
-        train(encoding, ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
-        train(encoding, ServiceConstants.PAGE, "admin/Menu");
-        train(encoding, ServiceConstants.SESSION, null);
-        train(encoding, ServiceConstants.COMPONENT, "border.link");
-
-        encoding.setServletPath("/admin/Menu,border.link.direct");
-        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-        encoding.setParameterValue(ServiceConstants.PAGE, null);
-        encoding.setParameterValue(ServiceConstants.SESSION, null);
-        encoding.setParameterValue(ServiceConstants.COMPONENT, null);
-
-        replay();
-
-        DirectServiceEncoder encoder = new DirectServiceEncoder();
-        encoder.setStatelessExtension("direct");
-
-        encoder.encode(encoding);
-
-        verify();
-    }
-
-    public void testEncodeStateful()
-    {
-        ServiceEncoding encoding = newMock(ServiceEncoding.class);
-
-        train(encoding, ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
-        train(encoding, ServiceConstants.PAGE, "admin/Menu");
-        train(encoding, ServiceConstants.SESSION, "T");
-        train(encoding, ServiceConstants.COMPONENT, "border.link");
-
-        encoding.setServletPath("/admin/Menu,border.link.sdirect");
-        encoding.setParameterValue(ServiceConstants.SERVICE, null);
-        encoding.setParameterValue(ServiceConstants.PAGE, null);
-        encoding.setParameterValue(ServiceConstants.SESSION, null);
-        encoding.setParameterValue(ServiceConstants.COMPONENT, null);
-
-        replay();
-
-        DirectServiceEncoder encoder = new DirectServiceEncoder();
-        encoder.setStatefulExtension("sdirect");
-
-        encoder.encode(encoding);
-
-        verify();
-    }
-
-    public void testDecodeWrongExtension()
-    {
-        ServiceEncoding encoding = newEncoding("/foo.svc");
-
-        replay();
-
-        DirectServiceEncoder encoder = new DirectServiceEncoder();
-        encoder.setStatelessExtension("direct");
-        encoder.setStatefulExtension("sdirect");
-
-        encoder.decode(encoding);
-
-        verify();
-    }
-
-    public void testDecodeStateless()
-    {
-        ServiceEncoding encoding = newEncoding("/admin/Menu,border.link.direct");
-
-        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
-        encoding.setParameterValue(ServiceConstants.PAGE, "admin/Menu");
-        encoding.setParameterValue(ServiceConstants.SESSION, null);
-        encoding.setParameterValue(ServiceConstants.COMPONENT, "border.link");
-
-        replay();
-
-        DirectServiceEncoder encoder = new DirectServiceEncoder();
-        encoder.setStatelessExtension("direct");
-        encoder.setStatefulExtension("sdirect");
-
-        encoder.decode(encoding);
-
-        verify();
-    }
-    
-    public void testDecodeStateful()
-    {
-        ServiceEncoding encoding = newEncoding("/admin/Menu,border.link.sdirect");
-
-        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
-        encoding.setParameterValue(ServiceConstants.PAGE, "admin/Menu");
-        encoding.setParameterValue(ServiceConstants.SESSION, "T");
-        encoding.setParameterValue(ServiceConstants.COMPONENT, "border.link");
-
-        replay();
-
-        DirectServiceEncoder encoder = new DirectServiceEncoder();
-        encoder.setStatelessExtension("direct");
-        encoder.setStatefulExtension("sdirect");
-
-        encoder.decode(encoding);
-
-        verify();
-    }    
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/TestPageServiceEncoder.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/TestPageServiceEncoder.java
deleted file mode 100644
index cea0870..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/TestPageServiceEncoder.java
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.encoders;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.services.ServiceConstants;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.encoders.PageServiceEncoder}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPageServiceEncoder extends BaseComponentTestCase
-{
-    public void testEncodeOtherService()
-    {
-        ServiceEncoding e = newMock(ServiceEncoding.class);
-
-        expect(e.getParameterValue(ServiceConstants.SERVICE)).andReturn("foo");
-
-        replay();
-
-        PageServiceEncoder encoder = new PageServiceEncoder();
-        encoder.setServiceName("page");
-
-        encoder.encode(e);
-
-        verify();
-    }
-
-    public void testEncode()
-    {
-        ServiceEncoding e = newMock(ServiceEncoding.class);
-
-        expect(e.getParameterValue(ServiceConstants.SERVICE)).andReturn("page");
-
-        expect(e.getParameterValue(ServiceConstants.PAGE)).andReturn("Home");
-
-        e.setServletPath("/Home.html");
-        e.setParameterValue(ServiceConstants.SERVICE, null);
-        e.setParameterValue(ServiceConstants.PAGE, null);
-
-        replay();
-
-        PageServiceEncoder encoder = new PageServiceEncoder();
-        encoder.setServiceName("page");
-        encoder.setExtension("html");
-
-        encoder.encode(e);
-
-        verify();
-    }
-
-    public void testEncodeHtm()
-    {
-        ServiceEncoding e = newMock(ServiceEncoding.class);
-
-        expect(e.getParameterValue(ServiceConstants.SERVICE)).andReturn("page");
-
-        expect(e.getParameterValue(ServiceConstants.PAGE)).andReturn("Home");
-
-        e.setServletPath("/Home.htm");
-        e.setParameterValue(ServiceConstants.SERVICE, null);
-        e.setParameterValue(ServiceConstants.PAGE, null);
-
-        replay();
-
-        PageServiceEncoder encoder = new PageServiceEncoder();
-        encoder.setServiceName("page");
-        encoder.setExtension("htm");
-
-        encoder.encode(e);
-
-        verify();
-    }
-    
-    public void testEncodeInNamespace()
-    {
-        ServiceEncoding e = newMock(ServiceEncoding.class);
-
-        expect(e.getParameterValue(ServiceConstants.SERVICE)).andReturn("page");
-
-        expect(e.getParameterValue(ServiceConstants.PAGE)).andReturn("contrib:Foo");
-        
-        replay();
-
-        PageServiceEncoder encoder = new PageServiceEncoder();
-        encoder.setServiceName("page");
-
-        encoder.encode(e);
-
-        verify();
-    }
-
-    public void testDecodeNoExtension()
-    {
-        ServiceEncoding e = newMock(ServiceEncoding.class);
-
-        expect(e.getServletPath()).andReturn("/app");
-        
-        replay();
-
-        PageServiceEncoder encoder = new PageServiceEncoder();
-
-        encoder.decode(e);
-
-        verify();
-    }
-
-    public void testDecodeEndsWithDot()
-    {
-        ServiceEncoding e = newMock(ServiceEncoding.class);
-
-        expect(e.getServletPath()).andReturn("/ends.with.dot.");
-
-        replay();
-
-        PageServiceEncoder encoder = new PageServiceEncoder();
-
-        encoder.decode(e);
-
-        verify();
-    }
-
-    public void testDecodeWrongExtension()
-    {
-        ServiceEncoding e = newMock(ServiceEncoding.class);
-
-        expect(e.getServletPath()).andReturn("/Home.direct");
-
-        replay();
-
-        PageServiceEncoder encoder = new PageServiceEncoder();
-
-        encoder.decode(e);
-
-        verify();
-    }
-
-    public void testDecodeSuccess()
-    {
-        ServiceEncoding e = newMock(ServiceEncoding.class);
-
-        expect(e.getServletPath()).andReturn("/Home.html");
-
-        e.setParameterValue(ServiceConstants.SERVICE, "page");
-        e.setParameterValue(ServiceConstants.PAGE, "Home");
-
-        replay();
-
-        PageServiceEncoder encoder = new PageServiceEncoder();
-        encoder.setExtension("html");
-        encoder.setServiceName("page");
-
-        encoder.decode(e);
-
-        verify();
-    }
-    
-    public void testDecodeHtmSuccess()
-    {
-        ServiceEncoding e = newMock(ServiceEncoding.class);
-
-        expect(e.getServletPath()).andReturn("/Home.htm");
-
-        e.setParameterValue(ServiceConstants.SERVICE, "page");
-        e.setParameterValue(ServiceConstants.PAGE, "Home");
-
-        replay();
-
-        PageServiceEncoder encoder = new PageServiceEncoder();
-        encoder.setExtension("htm");
-        encoder.setServiceName("page");
-
-        encoder.decode(e);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/TestServiceExtensionEncoder.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/TestServiceExtensionEncoder.java
deleted file mode 100644
index e5941ed..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/TestServiceExtensionEncoder.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.encoders;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.services.ServiceConstants;
-import org.testng.annotations.Test;
-
-/**
- * Tests {@link org.apache.tapestry.engine.encoders.ServiceExtensionEncoder}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestServiceExtensionEncoder extends BaseComponentTestCase
-{
-    public void testEncode()
-    {
-        ServiceEncoding sec = newMock(ServiceEncoding.class);
-
-        expect(sec.getParameterValue(ServiceConstants.SERVICE)).andReturn("heavy");
-
-        sec.setServletPath("/heavy.svc");
-        sec.setParameterValue(ServiceConstants.SERVICE, null);
-
-        replay();
-
-        ServiceExtensionEncoder e = new ServiceExtensionEncoder();
-        e.setExtension("svc");
-
-        e.encode(sec);
-
-        verify();
-    }
-
-    public void testDecodeWrongExtension()
-    {
-        ServiceEncoding sec = newMock(ServiceEncoding.class);
-
-        expect(sec.getServletPath()).andReturn("/foo/bar/baz.direct");
-
-        replay();
-
-        ServiceExtensionEncoder e = new ServiceExtensionEncoder();
-        e.setExtension("svc");
-
-        e.decode(sec);
-
-        verify();
-    }
-    
-    public void testDecode()
-    {
-        ServiceEncoding sec = newMock(ServiceEncoding.class);
-
-        expect(sec.getServletPath()).andReturn("/hitter.svc");
-
-        sec.setParameterValue(ServiceConstants.SERVICE, "hitter");
-        
-        replay();
-
-        ServiceExtensionEncoder e = new ServiceExtensionEncoder();
-        e.setExtension("svc");
-
-        e.decode(sec);
-
-        verify();     
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestApplicationStateManager.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestApplicationStateManager.java
deleted file mode 100644
index f57869b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestApplicationStateManager.java
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.state.ApplicationStateManagerImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential = true)
-public class TestApplicationStateManager extends BaseComponentTestCase
-{
-    private StateObjectManagerRegistry newRegistry(String name,
-            StateObjectManager manager)
-    {
-        StateObjectManagerRegistry result = newMock(StateObjectManagerRegistry.class);
-        
-        expect(result.get(name)).andReturn(manager);
-
-        return result;
-    }
-
-    public void testExistsInCache()
-    {
-        Object stateObject = new Object();
-        
-        StateObjectManager m = newMock(StateObjectManager.class);
-        
-        StateObjectManagerRegistry r = newRegistry("fred", m);
-        
-        expect(m.get()).andReturn(stateObject);
-        
-        replay();
-        
-        ApplicationStateManagerImpl asm = new ApplicationStateManagerImpl();
-        asm.setRegistry(r);
-
-        assertSame(stateObject, asm.get("fred"));
-
-        assertEquals(true, asm.exists("fred"));
-
-        verify();
-    }
-
-    public void testNotExist()
-    {
-
-        StateObjectManager m = newMock(StateObjectManager.class);
-
-        StateObjectManagerRegistry r = newRegistry("barney", m);
-
-        expect(m.exists()).andReturn(false);
-        
-        replay();
-
-        ApplicationStateManagerImpl asm = new ApplicationStateManagerImpl();
-        asm.setRegistry(r);
-
-        assertEquals(false, asm.exists("barney"));
-
-        verify();
-    }
-
-    public void testGet()
-    {
-        Object stateObject = new Object();
-
-        StateObjectManager m = newMock(StateObjectManager.class);
-        
-        StateObjectManagerRegistry r = newMock(StateObjectManagerRegistry.class);
-        
-        expect(r.get("barney")).andReturn(m);
-        
-        expect(m.get()).andReturn(stateObject);
-        
-        replay();
-
-        ApplicationStateManagerImpl asm = new ApplicationStateManagerImpl();
-        asm.setRegistry(r);
-
-        assertSame(stateObject, asm.get("barney"));
-
-        verify();
-
-        replay();
-
-        // Note: doesn't affect the SOPM
-
-        assertSame(stateObject, asm.get("barney"));
-
-        verify();
-        
-        expect(r.get("barney")).andReturn(m);
-        
-        expect(m.get()).andReturn(stateObject);
-
-        replay();
-
-        // Clear the cache
-        asm.passivateService();
-
-        // This invoked on the SOPM
-        assertSame(stateObject, asm.get("barney"));
-
-        verify();
-    }
-
-    public void testFlush()
-    {
-        Object stateObject = new Object();
-
-        StateObjectManager m = newMock(StateObjectManager.class);
-
-        StateObjectManagerRegistry r = newMock(StateObjectManagerRegistry.class);
-        
-        expect(r.get("barney")).andReturn(m);
-        
-        expect(m.get()).andReturn(stateObject);
-
-        replay();
-
-        ApplicationStateManagerImpl asm = new ApplicationStateManagerImpl();
-        asm.setRegistry(r);
-        
-        assertSame(stateObject, asm.get("barney"));
-        
-        verify();
-
-        expect(r.get("barney")).andReturn(m);
-
-        m.store(stateObject);
-
-        replay();
-
-        asm.flush();
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestInstantiateClassStateObjectFactory.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestInstantiateClassStateObjectFactory.java
deleted file mode 100644
index 39b69dd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestInstantiateClassStateObjectFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import java.util.HashMap;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.state.InstantiateClassStateObjectFactory}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInstantiateClassStateObjectFactory extends BaseComponentTestCase
-{
-    public void testSuccess()
-    {
-        InstantiateClassStateObjectFactory f = new InstantiateClassStateObjectFactory();
-        f.setObjectClass(HashMap.class);
-
-        Object result = f.createStateObject();
-
-        assertTrue(result instanceof HashMap);
-    }
-
-    public void testFailure()
-    {
-        Location l = fabricateLocation(1234);
-
-        InstantiateClassStateObjectFactory f = new InstantiateClassStateObjectFactory();
-
-        f.setLocation(l);
-        f.setObjectClass(Runnable.class);
-
-        try
-        {
-            f.createStateObject();
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertExceptionSubstring(
-                    ex,
-                    "Unable to instantiate an instance of interface java.lang.Runnable");
-
-            assertSame(l, ex.getLocation());
-        }
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestNamedClassStateObjectFactory.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestNamedClassStateObjectFactory.java
deleted file mode 100644
index f2f9f23..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestNamedClassStateObjectFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestNamedClassStateObjectFactory extends BaseComponentTestCase
-{
-    public void testSuccess()
-    {
-        NamedClassStateObjectFactory f = new NamedClassStateObjectFactory();
-        f.setClassResolver(new DefaultClassResolver());
-        f.setClassName(HashMap.class.getName());
-
-        assertTrue(f.createStateObject() instanceof HashMap);
-    }
-
-    public void testFailure()
-    {
-        Location l = fabricateLocation(99);
-
-        NamedClassStateObjectFactory f = new NamedClassStateObjectFactory();
-        f.setClassResolver(new DefaultClassResolver());
-        f.setClassName(Map.class.getName());
-        f.setLocation(l);
-
-        try
-        {
-            f.createStateObject();
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertExceptionSubstring(ex, "Unable to instantiate an instance of java.util.Map");
-
-            assertSame(l, ex.getLocation());
-
-        }
-
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestSOMRegistry.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestSOMRegistry.java
deleted file mode 100644
index c45bc15..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestSOMRegistry.java
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests {@link TestSOMRegistry}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestSOMRegistry extends BaseComponentTestCase
-{
-    public void testInitializeAndGet()
-    {
-        Object stateObject = new Object();
-        
-        StateObjectPersistenceManager pm = newMock(StateObjectPersistenceManager.class);
-
-        StateObjectFactory f = newMock(StateObjectFactory.class);
-
-        expect(pm.get("fred", f)).andReturn(stateObject);
-
-        StateObjectContribution c = new StateObjectContribution();
-        c.setName("fred");
-        c.setScope("wierd");
-        c.setFactory(f);
-
-        Map applicationContributions = new HashMap();
-        applicationContributions.put("fred", c);
-
-        Map persistenceManagers = new HashMap();
-        persistenceManagers.put("wierd", pm);
-
-        replay();
-
-        SOMRegistryImpl r = new SOMRegistryImpl();
-        r.setApplicationContributions(applicationContributions);
-        r.setFactoryContributions(Collections.EMPTY_MAP);
-        r.setPersistenceManagers(persistenceManagers);
-        r.initializeService();
-
-        StateObjectManager som = r.get("fred");
-
-        assertSame(stateObject, som.get());
-
-        verify();
-    }
-
-    public void testInitializeUnknownScope()
-    {
-        Location l = fabricateLocation(55);
-        ErrorLog log = newMock(ErrorLog.class);
-
-        StateObjectContribution c = new StateObjectContribution();
-        c.setName("fred");
-        c.setScope("wierd");
-        c.setLocation(l);
-
-        Map applicationContributions = new HashMap();
-        applicationContributions.put("fred", c);
-
-        log.error(StateMessages.unknownScope("fred", "wierd"), l, null);
-
-        replay();
-
-        SOMRegistryImpl r = new SOMRegistryImpl();
-        r.setApplicationContributions(applicationContributions);
-        r.setFactoryContributions(Collections.EMPTY_MAP);
-        r.setPersistenceManagers(Collections.EMPTY_MAP);
-        r.setErrorLog(log);
-        r.initializeService();
-
-        verify();
-    }
-
-    public void testGetUnknownObjectName()
-    {
-        SOMRegistryImpl r = new SOMRegistryImpl();
-
-        try
-        {
-            r.get("angel");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(StateMessages.unknownStateObjectName("angel"), ex.getMessage());
-        }
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestSessionScopeManager.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestSessionScopeManager.java
deleted file mode 100644
index a2065cf..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/engine/state/TestSessionScopeManager.java
+++ /dev/null
@@ -1,230 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine.state;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.SessionStoreOptimized;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.engine.state.SessionScopeManager}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential = true)
-public class TestSessionScopeManager extends BaseComponentTestCase
-{
-    private WebRequest newRequest(boolean create, WebSession session)
-    {
-        WebRequest request = newMock(WebRequest.class);
-        
-        expect(request.getSession(create)).andReturn(session);
-
-        return request;
-    }
-
-    private WebRequest newRequest(WebSession session)
-    {
-        WebRequest request = newMock(WebRequest.class);
-
-        expect(request.getSession(true)).andReturn(session);
-
-        return request;
-    }
-
-    private WebSession newSession(String key, Object value)
-    {
-        WebSession session = newSession();
-        checkOrder(session, false);
-        
-        trainGetAttribute(session, key, value);
-
-        return session;
-    }
-
-    private StateObjectFactory newFactory(Object stateObject)
-    {
-        StateObjectFactory factory = newMock(StateObjectFactory.class);
-
-        expect(factory.createStateObject()).andReturn(stateObject);
-
-        return factory;
-    }
-
-    public void testExistsNoSession()
-    {
-        WebRequest request = newRequest(false, null);
-
-        replay();
-
-        SessionScopeManager m = new SessionScopeManager();
-        m.setRequest(request);
-
-        assertEquals(false, m.exists("doesn't matter"));
-
-        verify();
-    }
-
-    public void testExistsMissing()
-    {
-        WebSession session = newSession("state:myapp:fred", null);
-        WebRequest request = newRequest(false, session);
-        
-        replay();
-
-        SessionScopeManager m = new SessionScopeManager();
-        m.setRequest(request);
-        m.setApplicationId("myapp");
-
-        assertEquals(false, m.exists("fred"));
-
-        verify();
-    }
-
-    public void testExists()
-    {
-        WebSession session = newSession("state:testapp:fred", "XXX");
-        WebRequest request = newRequest(false, session);
-
-        replay();
-
-        SessionScopeManager m = new SessionScopeManager();
-        m.setRequest(request);
-        m.setApplicationId("testapp");
-
-        assertEquals(true, m.exists("fred"));
-
-        verify();
-    }
-
-    public void testGetExists()
-    {
-        Object stateObject = new Object();
-        WebSession session = newSession("state:testapp:fred", stateObject);
-        WebRequest request = newRequest(session);
-
-        replay();
-
-        SessionScopeManager m = new SessionScopeManager();
-        m.setRequest(request);
-        m.setApplicationId("testapp");
-
-        assertSame(stateObject, m.get("fred", null));
-
-        verify();
-    }
-
-    public void testGetAndCreate()
-    {
-        Object stateObject = new Object();
-        
-        WebSession session = newSession();
-        
-        WebRequest request = newRequest(session);
-        
-        trainGetAttribute(session, "state:myapp:fred", null);
-
-        StateObjectFactory factory = newFactory(stateObject);
-        
-        session.setAttribute("state:myapp:fred", stateObject);
-
-        replay();
-
-        SessionScopeManager m = new SessionScopeManager();
-        m.setRequest(request);
-        m.setApplicationId("myapp");
-
-        assertSame(stateObject, m.get("fred", factory));
-
-        verify();
-    }
-
-    protected void trainGetAttribute(WebSession session, String name, Object attribute)
-    {
-        expect(session.getAttribute(name)).andReturn(attribute);
-    }
-
-    public void testStore()
-    {
-        Object stateObject = new Object();
-
-        WebSession session = newSession();
-        WebRequest request = newRequest(session);
-        
-        session.setAttribute("state:myapp:fred", stateObject);
-
-        replay();
-
-        SessionScopeManager m = new SessionScopeManager();
-        m.setRequest(request);
-        m.setApplicationId("myapp");
-
-        m.store("fred", stateObject);
-
-        verify();
-    }
-
-    protected WebSession newSession()
-    {
-        return newMock(WebSession.class);
-    }
-
-    protected SessionStoreOptimized newOptimized(boolean dirty)
-    {
-        SessionStoreOptimized optimized = newMock(SessionStoreOptimized.class);
-
-        expect(optimized.isStoreToSessionNeeded()).andReturn(dirty);
-
-        return optimized;
-    }
-
-    public void testStoreOptimizedClean()
-    {
-        Object stateObject = newOptimized(false);
-
-        SessionScopeManager m = new SessionScopeManager();
-
-        replay();
-
-        m.store("fred", stateObject);
-
-        verify();
-    }
-
-    public void testStoreOptimizedDirty()
-    {
-        Object stateObject = newOptimized(true);
-
-        WebSession session = newSession();
-        WebRequest request = newRequest(session);
-        
-        session.setAttribute("state:myapp:fred", stateObject);
-
-        replay();
-
-        SessionScopeManager m = new SessionScopeManager();
-        m.setRequest(request);
-        m.setApplicationId("myapp");
-
-        m.store("fred", stateObject);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractBase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractBase.java
deleted file mode 100644
index 69e604f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractBase.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-/**

- * 

- */

-package org.apache.tapestry.enhance;

-

-/**

- * Used by {@link org.apache.tapestry.enhance.EnhancedClassValidatorTest}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public abstract class AbstractBase

-{

-    public abstract void foo();

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractGenericBase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractGenericBase.java
deleted file mode 100644
index deaea2c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractGenericBase.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-
-
-/**
- * Tests generic interfaces functionality.
- */
-public abstract class AbstractGenericBase<E extends SimpleGeneric>
-{
-    
-    public abstract E getValue();
-    
-    public abstract void setSomethingCrazy(E val);
-    
-    public abstract E getOperationValue();
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractRunnable.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractRunnable.java
deleted file mode 100644
index 155f681..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractRunnable.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.enhance;

-

-/**

- * Used by {@link org.apache.tapestry.enhance.EnhancedClassValidatorTest}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public abstract class AbstractRunnable implements Runnable

-{

-

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractRunnableSubclass.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractRunnableSubclass.java
deleted file mode 100644
index 44611fb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/AbstractRunnableSubclass.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.enhance;

-

-/**

- * Used by {@link org.apache.tapestry.enhance.EnhancedClassValidatorTest}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public abstract class AbstractRunnableSubclass extends AbstractRunnable

-{

-

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/BaseAutowire.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/BaseAutowire.java
deleted file mode 100644
index 0fe3bba..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/BaseAutowire.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import org.apache.commons.logging.Log;
-
-
-/**
- * Used to test {@link AutowireWorker}.
- */
-public class BaseAutowire {
-    
-    private Log _log;
-    
-    public final Log getLog()
-    {
-        return _log;
-    }
-    
-    public final void setLog(Log log)
-    {
-        _log = log;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/BaseEnhancementTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/BaseEnhancementTestCase.java
deleted file mode 100644
index 0060901..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/BaseEnhancementTestCase.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.state.ApplicationStateManager;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Base class for common utilities when testing enhancement workers.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class BaseEnhancementTestCase extends BaseComponentTestCase
-{
-    public IComponentSpecification newSpec(Location location)
-    {
-        IComponentSpecification spec = newSpec();
-        checkOrder(spec, false);
-        
-        expect(spec.getLocation()).andReturn(location);
-
-        return spec;
-    }
-
-    protected EnhancementOperation newOp()
-    {
-        return newMock(EnhancementOperation.class);
-    }
-
-    protected void trainAddInjectedField(EnhancementOperation op, String fieldName,
-            Class fieldType, Object injectedValue, String injectedFieldName)
-    {
-        expect(op.addInjectedField(fieldName, fieldType, injectedValue))
-        .andReturn(injectedFieldName);
-
-    }
-
-    protected ApplicationStateManager newApplicationStateManager()
-    {
-        return newMock(ApplicationStateManager.class);
-    }
-
-    protected EnhancementOperation newEnhancementOp()
-    {
-        return newMock(EnhancementOperation.class);
-    }
-
-    protected void trainGetAccessorMethodName(EnhancementOperation op, String propertyName,
-            String methodName)
-    {
-        expect(op.getAccessorMethodName(propertyName)).andReturn(methodName);
-    }
-
-    protected void trainGetPropertyType(EnhancementOperation op, String propertyName,
-            Class propertyType)
-    {
-        expect(op.getPropertyType(propertyName)).andReturn(propertyType);
-    }
-
-    protected void trainGetBaseClass(EnhancementOperation op, Class baseClass)
-    {
-        expect(op.getBaseClass()).andReturn(baseClass);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/BasicObject.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/BasicObject.java
deleted file mode 100644
index 5f8f931..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/BasicObject.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.apache.tapestry.enhance;
-
-/**
- *
- */
-public class BasicObject {
-
-    User _user;
-
-    public String getName()
-    {
-        return "Henry the eith I am.";
-    }
-
-    public User getUser()
-    {
-        return _user;
-    }
-
-    public void setUser(User user)
-    {
-        _user = user;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/Complete.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/Complete.java
deleted file mode 100644
index 3870b8b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/Complete.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-/**

- * 

- */

-package org.apache.tapestry.enhance;

-

-/**

- * Used by {@link org.apache.tapestry.enhance.EnhancedClassValidatorTest}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public class Complete extends AbstractBase

-{

-    public void foo()

-    {

-        //

-    }

-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/EnhancedClassValidatorTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/EnhancedClassValidatorTest.java
deleted file mode 100644
index a278d68..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/EnhancedClassValidatorTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.EnhancedClassValidatorImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class EnhancedClassValidatorTest extends BaseComponentTestCase
-{
-    /**
-     * Test for a class that fulfills its requirements (by implementing all inherited abstract
-     * methods.
-     */
-
-    public void test_Complete()
-    {
-        EnhancedClassValidatorImpl v = new EnhancedClassValidatorImpl();
-        v.setClassInspector(new ClassInspectorImpl());
-        
-        v.validate(AbstractBase.class, Complete.class, new ComponentSpecification());
-    }
-
-    public void test_Generics_Complete()
-    {
-        EnhancedClassValidatorImpl v = new EnhancedClassValidatorImpl();
-        v.setClassInspector(new GenericsClassInspectorImpl());
-
-        v.validate(AbstractGenericBase.class, FooGenericComponent.class, new ComponentSpecification());
-    }
-
-    /**
-     * Pass in an abstract class (with enhancement, its possible that a supposedly concrete class
-     * may omit implementing an inherited abstract method, which is the whole point of the
-     * validator.
-     */
-
-    public void test_Incomplete()
-    {
-        ErrorLog log = newErrorLog();
-        Location l = newLocation();
-
-        IComponentSpecification spec = newSpec();
-
-        trainGetLocation(spec, l);
-
-        log.error("Method 'public abstract void org.apache.tapestry.enhance.AbstractBase.foo()' "
-                  + "(declared in class org.apache.tapestry.enhance.AbstractBase) has no implementation in class "
-                  + "org.apache.tapestry.enhance.AbstractBase (or enhanced subclass org.apache.tapestry.enhance.Incomplete).",
-                  l,
-                  null);
-
-        replay();
-
-        EnhancedClassValidatorImpl v = new EnhancedClassValidatorImpl();
-        v.setClassInspector(new ClassInspectorImpl());
-        v.setErrorLog(log);
-
-        v.validate(AbstractBase.class, Incomplete.class, spec);
-
-        verify();
-    }
-
-    public void test_Inherits_Missing_Method()
-    {
-        ErrorLog log = newErrorLog();
-        Location l = newLocation();
-
-        IComponentSpecification spec = newSpec();
-
-        trainGetLocation(spec, l);
-
-        log.error("Method 'public abstract void java.lang.Runnable.run()' "
-                  + "has no implementation in class org.apache.tapestry.enhance.AbstractRunnable "
-                  + "(or enhanced subclass org.apache.tapestry.enhance.AbstractRunnableSubclass).",
-                  l,
-                  null);
-
-        replay();
-
-        EnhancedClassValidatorImpl v = new EnhancedClassValidatorImpl();
-        v.setErrorLog(log);
-        v.setClassInspector(new ClassInspectorImpl());
-
-        v.validate(AbstractRunnable.class, AbstractRunnableSubclass.class, spec);
-
-        verify();
-    }
-
-    private ErrorLog newErrorLog()
-    {
-        return newMock(ErrorLog.class);
-    }
-
-    /**
-     * Ensures that the code works when passed java.lang.Object (which has different inheritance
-     * than other classes.
-     */
-
-    public void test_Object()
-    {
-        EnhancedClassValidatorImpl v = new EnhancedClassValidatorImpl();
-        v.setClassInspector(new ClassInspectorImpl());
-
-        v.validate(Object.class, Object.class, new ComponentSpecification());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/FooGeneric.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/FooGeneric.java
deleted file mode 100644
index 5e4b3a6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/FooGeneric.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-
-/**
- * 
- */
-public class FooGeneric implements SimpleGeneric
-{
-
-    public boolean isGeneric()
-    {
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/FooGenericComponent.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/FooGenericComponent.java
deleted file mode 100644
index 079cd68..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/FooGenericComponent.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import java.util.Map;
-
-
-/**
- * 
- */
-public abstract class FooGenericComponent extends AbstractGenericBase<FooGeneric>
-{
-    
-    public Map getMap()
-    {
-        return null;
-    }
-    
-    public FooGeneric getOperationValue()
-    {
-        return null;
-    }
-
-    public FooGeneric getValue()
-    {
-        return null;
-    }
-
-    public void setSomethingCrazy(FooGeneric value)
-    {
-
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/GenericService.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/GenericService.java
deleted file mode 100644
index a1b7cb5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/GenericService.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.apache.tapestry.enhance;
-
-/**
- *
- */
-public interface GenericService<E> {
-
-    void doFoo(E bar);
-
-    E getCurrentFoo();
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/GenericServiceImpl.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/GenericServiceImpl.java
deleted file mode 100644
index 3d42175..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/GenericServiceImpl.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.apache.tapestry.enhance;
-
-/**
- *
- */
-public class GenericServiceImpl implements SimpleGenericsInterface {
-
-    private BasicObject _basic = new BasicObject();
-    
-    public String getObjectName()
-    {
-        return _basic.getName();
-    }
-
-    public void doFoo(BasicObject bar)
-    {
-    }
-
-    public BasicObject getCurrentFoo()
-    {
-        return _basic;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/HelloService.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/HelloService.java
deleted file mode 100755
index 9430efe..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/HelloService.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2006 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-package org.apache.tapestry.enhance;

-

-

-/**

- * @author James Carman

- *

- */

-public interface HelloService

-{

-    public String sayHello( String name );

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/HelloServiceImpl.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/HelloServiceImpl.java
deleted file mode 100755
index 68db342..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/HelloServiceImpl.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2006 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-package org.apache.tapestry.enhance;

-

-

-/**

- * @author James Carman

- *

- */

-public class HelloServiceImpl implements HelloService

-{

-    public String sayHello( String name )

-    {

-        return "Hello, " + name + "!";

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/Incomplete.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/Incomplete.java
deleted file mode 100644
index 10855a9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/Incomplete.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-/**

- * 

- */

-package org.apache.tapestry.enhance;

-

-/**

- * Used by {@link org.apache.tapestry.enhance.EnhancedClassValidatorTest}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public abstract class Incomplete extends AbstractBase

-{

-    public void bar()

-    {

-        //

-    }

-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/InjectAssetWorkerTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/InjectAssetWorkerTest.java
deleted file mode 100644
index 2e88146..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/InjectAssetWorkerTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import java.lang.reflect.Modifier;
-import java.util.Collections;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.AssetSpecification;
-import org.apache.tapestry.spec.IAssetSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.InjectAssetWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class InjectAssetWorkerTest extends BaseEnhancementTestCase
-{
-    private IComponentSpecification newSpec(String assetName, String propertyName, Location location)
-    {
-        IAssetSpecification as = new AssetSpecification();
-        as.setPropertyName(propertyName);
-        as.setLocation(location);
-
-        IComponentSpecification spec = newSpec();
-
-        expect(spec.getAssetNames()).andReturn(Collections.singletonList(assetName));
-
-        expect(spec.getAsset(assetName)).andReturn(as);
-
-        return spec;
-    }
-
-    public void testNoWork()
-    {
-        IComponentSpecification spec = newSpec("fred", null, null);
-        EnhancementOperation op = newEnhancementOp();
-
-        replay();
-
-        new InjectAssetWorker().performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testSuccess()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = newSpec("fred", "barney", l);
-        EnhancementOperation op = newEnhancementOp();
-
-        trainGetPropertyType(op, "barney", IAsset.class);
-
-        op.claimReadonlyProperty("barney");
-
-        trainGetAccessorMethodName(op, "barney", "getBarney");
-
-        op.addMethod(
-                Modifier.PUBLIC,
-                new MethodSignature(IAsset.class, "getBarney", null, null),
-                "return getAsset(\"fred\");",
-                l);
-
-        replay();
-
-        new InjectAssetWorker().performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testFailure()
-    {
-        Location l = newLocation();
-        Throwable ex = new ApplicationRuntimeException(EnhanceMessages.claimedProperty("barney"));
-        EnhancementOperation op = newEnhancementOp();
-
-        IComponentSpecification spec = newSpec("fred", "barney", l);
-
-        ErrorLog log = newMock(ErrorLog.class);
-
-        trainGetPropertyType(op, "barney", IComponent.class);
-
-        op.claimReadonlyProperty("barney");
-        expectLastCall().andThrow(ex);
-
-        trainGetBaseClass(op, BaseComponent.class);
-
-        log.error(EnhanceMessages.errorAddingProperty("barney", BaseComponent.class, ex), l, ex);
-
-        replay();
-
-        InjectAssetWorker w = new InjectAssetWorker();
-
-        w.setErrorLog(log);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testWrongPropertyType()
-    {
-        EnhancementOperation op = newEnhancementOp();
-
-        trainGetPropertyType(op, "barney", IComponent.class);
-
-        op.claimReadonlyProperty("barney");
-
-        replay();
-
-        InjectAssetWorker w = new InjectAssetWorker();
-        try
-        {
-            w.injectAsset(op, "fred", "barney", null);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Property barney is type org.apache.tapestry.IComponent, which is not compatible with the expected type, org.apache.tapestry.IAsset.",
-                    ex.getMessage());
-        }
-
-        verify();
-
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/InjectStateFlagWorkerTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/InjectStateFlagWorkerTest.java
deleted file mode 100644
index 960e6d9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/InjectStateFlagWorkerTest.java
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.enhance;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.Location;

-import org.apache.hivemind.service.MethodSignature;

-import org.apache.tapestry.engine.state.ApplicationStateManager;

-import org.apache.tapestry.spec.InjectSpecification;

-import org.apache.tapestry.spec.InjectSpecificationImpl;

-import org.testng.annotations.Test;

-

-import java.lang.reflect.Modifier;

-

-/**

- * Tests for {@link org.apache.tapestry.enhance.InjectStateFlagWorker}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class InjectStateFlagWorkerTest extends BaseEnhancementTestCase

-{

-    public void testNoExistingProperty()

-    {

-        Location l = newLocation();

-        ApplicationStateManager asm = newApplicationStateManager();

-

-        InjectSpecification is = new InjectSpecificationImpl();

-        is.setProperty("fred");

-        is.setObject("fredASO");

-        is.setLocation(l);

-

-        EnhancementOperation op = newOp();

-

-        trainGetPropertyType(op, "fred", null);

-

-        op.claimReadonlyProperty("fred");

-

-        trainAddInjectedField(

-                op,

-                "_$applicationStateManager",

-                ApplicationStateManager.class,

-                asm,

-                "_$asm");

-

-        trainGetAccessorMethodName(op, "fred", "isFred");

-

-        MethodSignature sig = new MethodSignature(boolean.class, "isFred", null, null);

-

-        String code = "{\n  return _$asm.exists(\"fredASO\");\n}\n";

-

-        op.addMethod(Modifier.PUBLIC, sig, code, l);

-

-        replay();

-

-        InjectStateFlagWorker worker = new InjectStateFlagWorker();

-

-        worker.setApplicationStateManager(asm);

-

-        worker.performEnhancement(op, is);

-

-        verify();

-    }

-

-    public void testWithExistingProperty()

-    {

-        Location l = newLocation();

-        ApplicationStateManager asm = newApplicationStateManager();

-

-        InjectSpecification is = new InjectSpecificationImpl();

-        is.setProperty("fred");

-        is.setObject("fredASO");

-        is.setLocation(l);

-

-        EnhancementOperation op = newOp();

-

-        trainGetPropertyType(op, "fred", boolean.class);

-

-        op.claimReadonlyProperty("fred");

-

-        trainAddInjectedField(

-                op,

-                "_$applicationStateManager",

-                ApplicationStateManager.class,

-                asm,

-                "_$asm");

-

-        trainGetAccessorMethodName(op, "fred", "getFred");

-

-        MethodSignature sig = new MethodSignature(boolean.class, "getFred", null, null);

-

-        String code = "{\n  return _$asm.exists(\"fredASO\");\n}\n";

-

-        op.addMethod(Modifier.PUBLIC, sig, code, l);

-

-        replay();

-

-        InjectStateFlagWorker worker = new InjectStateFlagWorker();

-

-        worker.setApplicationStateManager(asm);

-

-        worker.performEnhancement(op, is);

-

-        verify();

-    }

-

-    public void testWithExistingPropertyWrongType()

-    {

-        Location l = newLocation();

-        ApplicationStateManager asm = newApplicationStateManager();

-

-        InjectSpecification is = new InjectSpecificationImpl();

-        is.setProperty("fred");

-        is.setObject("fredASO");

-        is.setLocation(l);

-

-        EnhancementOperation op = newOp();

-

-        trainGetPropertyType(op, "fred", int.class);

-

-        replay();

-

-        InjectStateFlagWorker worker = new InjectStateFlagWorker();

-

-        worker.setApplicationStateManager(asm);

-

-        try

-        {

-            worker.performEnhancement(op, is);

-            unreachable();

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertEquals("Property fred must be type boolean for this type of injection.", ex.getMessage());

-            assertSame(l, ex.getLocation());

-        }

-

-        verify();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/MethodSignatureTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/MethodSignatureTest.java
deleted file mode 100644
index 300f7ce..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/MethodSignatureTest.java
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.TestBase;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Method;
-import java.util.Map;
-
-
-/**
- * Tests functionality of {@link MethodSignature} implementations.
- */
-@Test
-public class MethodSignatureTest extends TestBase {
-    
-    // used for non generic tests
-    class Simple {
-        
-        public String getValue()
-        {
-            return "foo";
-        }
-        
-        public void setMax(Integer val)
-        {
-        }
-    }
-    
-    public void test_Simple_Properties()
-    {
-        ClassInspector ins = new ClassInspectorImpl();
-        
-        MethodSignature sig = ins.getPropertyAccessor(Simple.class, "value");
-        
-        assert sig != null;
-        assertEquals(sig.getReturnType(), String.class);
-        
-        sig = ins.getPropertyAccessor(Simple.class, "max");
-        
-        assert sig != null;
-        assertEquals(sig.getReturnType(), void.class);
-        assertEquals(sig.getParameterTypes().length, 1);
-        assertEquals(sig.getParameterTypes()[0], Integer.class);
-    }
-    
-    public void test_Generic_Properties()
-    {
-        ClassInspector ins = new GenericsClassInspectorImpl();
-        
-        MethodSignature sig = ins.getPropertyAccessor(FooGenericComponent.class, "value");
-        
-        assert sig != null;
-        assertEquals(sig.getReturnType(), FooGeneric.class);
-    }
-    
-    public void test_Generic_Parameters()
-    {
-        ClassInspector ins = new GenericsClassInspectorImpl();
-        
-        MethodSignature sig = ins.getPropertyAccessor(FooGenericComponent.class, "somethingCrazy");
-        
-        assert sig != null;
-        assertEquals(sig.getReturnType(), void.class);
-        assert sig.getParameterTypes() != null && sig.getParameterTypes().length > 0;
-        assertEquals(sig.getParameterTypes()[0], FooGeneric.class);
-        
-        sig = ins.getPropertyAccessor(AbstractGenericBase.class, "somethingCrazy");
-        
-        assert sig != null;
-        assertEquals(sig.getReturnType(), void.class);
-        assert sig.getParameterTypes() != null && sig.getParameterTypes().length > 0;
-        assertEquals(sig.getParameterTypes()[0], SimpleGeneric.class);
-    }
-    
-    public void test_Generic_Simple_Property()
-    {
-        ClassInspector ins = new GenericsClassInspectorImpl();
-        
-        MethodSignature sig = ins.getPropertyAccessor(FooGenericComponent.class, "map");
-        
-        assert sig != null;
-        assertEquals(sig.getReturnType(), Map.class);
-    }
-    
-    public void test_Generic_Inheritance()
-    {
-        ClassInspector ins = new GenericsClassInspectorImpl();
-        
-        MethodSignature child = ins.getPropertyAccessor(FooGenericComponent.class, "operationValue");
-        MethodSignature base = ins.getPropertyAccessor(AbstractGenericBase.class, "operationValue");
-        
-        assert child != null;
-        assert base != null;
-        
-        assert child.isOverridingSignatureOf(base);
-        
-        assert !child.equals(base);
-        assert !base.equals(child);
-    }
-
-    public void test_Generic_Method_Hash()
-    {
-        Class testClass = MyTest.class;
-
-        Method[] methods = testClass.getMethods();
-
-        for (Method method : methods) {
-            
-            MethodSignatureImpl msi = new GenericsMethodSignatureImpl(testClass, method);
-            msi.hashCode();
-        }
-
-        ClassInspector ins = new GenericsClassInspectorImpl();
-        MethodSignature sig = ins.getPropertyAccessor(MyTest.class, "relativeObject");
-
-        assert sig.getReturnType() != null;
-        assertEquals(sig.getReturnType(), BaseTest.class);
-    }
-
-    public void test_Generic_Service_Property()
-            throws Exception
-    {
-        ClassInspector ins = new GenericsClassInspectorImpl();
-        MethodSignature m  = ins.getPropertyAccessor(GenericServiceImpl.class, "currentFoo");
-
-        assertEquals(m.getReturnType(), BasicObject.class);
-    }
-
-    public static abstract class BaseTest<T>{ }
-    
-    public static abstract class MyTest<T,E extends BaseTest<T>> extends BaseTest<T> {
-
-        public abstract E getRelativeObject();
-        public abstract void setRelativeObject(E e);
-    }
-
-    public void test_Find_Type()
-    {
-        Class clazz=TestGeneric.class;
-        Method[] ms = clazz.getMethods();
-        
-        for (Method m : ms) {
-
-            MethodSignature sig = new GenericsMethodSignatureImpl(clazz, m);
-
-            assertEquals(sig.getName(), m.getName());
-            assertEquals(sig.getReturnType(), m.getReturnType());
-            assertEquals(sig.getParameterTypes(), m.getParameterTypes());
-            assertEquals(sig.getExceptionTypes(), m.getExceptionTypes());
-            assertEquals(sig.getReturnType(), m.getReturnType());
-        }
-    }
-
-    public class TestGeneric<T> extends BaseGeneric<T>{
-
-    }
-    public class BaseGeneric<T> {
-        public IPage doDeleteEntityAction(T entity) {
-            return null;
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/SimpleGeneric.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/SimpleGeneric.java
deleted file mode 100644
index fa2d43a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/SimpleGeneric.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-
-/**
- * 
- */
-public interface SimpleGeneric
-{
-    
-    boolean isGeneric();
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/SimpleGenericsInterface.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/SimpleGenericsInterface.java
deleted file mode 100644
index 4c7cde9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/SimpleGenericsInterface.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.apache.tapestry.enhance;
-
-/**
- *
- */
-public interface SimpleGenericsInterface extends GenericService<BasicObject> {
-
-    String getObjectName();
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/SubAutowire.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/SubAutowire.java
deleted file mode 100644
index 50d7ef8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/SubAutowire.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-
-/**
- * Simple subclass.
- *
- * @author jkuhnert
- */
-public class SubAutowire extends BaseAutowire
-{
-    
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestAbstractPropertyWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestAbstractPropertyWorker.java
deleted file mode 100644
index 58d0335..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestAbstractPropertyWorker.java
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.expect;
-
-import java.lang.reflect.Modifier;
-import java.util.Collections;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests {@link org.apache.tapestry.enhance.AbstractPropertyWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestAbstractPropertyWorker extends BaseEnhancementTestCase
-{
-
-    public void testSuccess()
-    {
-        Location l = newLocation();
-
-        IComponentSpecification spec = newSpec(l);
-        EnhancementOperation op = newOp();
-
-        expect(op.findUnclaimedAbstractProperties()).andReturn(Collections.singletonList("fred"));
-
-        expect(op.getPropertyType("fred")).andReturn(String.class);
-
-        op.addField("_$fred", String.class);
-        op.addField("_$fred$defaultValue", String.class);
-
-        expect(op.getAccessorMethodName("fred")).andReturn("getFred");
-
-        op.addMethod(
-                Modifier.PUBLIC,
-                new MethodSignature(String.class, "getFred", null, null),
-                "return _$fred;",
-                l);
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setFred", new Class[]
-        { String.class }, null), "_$fred = $1;", l);
-
-        op.extendMethodImplementation(
-                IComponent.class,
-                EnhanceUtils.FINISH_LOAD_SIGNATURE,
-                "_$fred$defaultValue = _$fred;");
-
-        op.extendMethodImplementation(
-                PageDetachListener.class,
-                EnhanceUtils.PAGE_DETACHED_SIGNATURE,
-                "_$fred = _$fred$defaultValue;");
-
-        op.claimProperty("fred");
-
-        replay();
-
-        new AbstractPropertyWorker().performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testFailure()
-    {
-        EnhancementOperation op = newOp();
-        Location l = fabricateLocation(21);
-        
-        IComponentSpecification spec = newSpec(l);
-
-        ErrorLog log = newMock(ErrorLog.class);
-
-        expect(op.findUnclaimedAbstractProperties()).andReturn(Collections.singletonList("fred"));
-        Throwable ex = new ApplicationRuntimeException("Arbitrary error.");
-
-        expect(op.getPropertyType("fred")).andThrow(ex);
-
-        expect(op.getBaseClass()).andReturn(BaseComponent.class);
-        
-        log.error(EnhanceMessages.errorAddingProperty("fred", BaseComponent.class, ex), l, ex);
-
-        replay();
-
-        AbstractPropertyWorker w = new AbstractPropertyWorker();
-        w.setErrorLog(log);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestAutowireWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestAutowireWorker.java
deleted file mode 100755
index d8118f7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestAutowireWorker.java
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright May 2, 2006 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-package org.apache.tapestry.enhance;

-

-import org.apache.hivemind.Location;

-import org.apache.hivemind.Registry;

-import org.apache.hivemind.impl.RegistryBuilder;

-import org.apache.hivemind.service.MethodSignature;

-import org.apache.tapestry.spec.IComponentSpecification;

-import static org.easymock.EasyMock.expect;

-import org.testng.annotations.Test;

-

-import java.lang.reflect.Modifier;

-import java.util.Collections;

-

-

-/**

- * 

- * @author James Carman

- *

- */

-@Test(sequential = true)

-public class TestAutowireWorker extends BaseEnhancementTestCase

-{

-    

-    private static final String HELLO_SERVICE_PROPERTY = "helloService";

-    

-    public void test_No_Service() throws Exception

-    {

-        assertNotAutowired( RegistryBuilder.constructDefaultRegistry() );

-    }

-    

-    public void test_Many_Services() throws Exception

-    {        

-        assertNotAutowired( buildFrameworkRegistry("autowire-multiple.xml" ) );   

-    }

-    

-    public void test_One_Service() throws Exception

-    {

-        final Registry registry = buildFrameworkRegistry("autowire-single.xml" );

-        Location l = newLocation();

-        EnhancementOperation op = newMock(EnhancementOperation.class);

-        

-        expect(op.findUnclaimedAbstractProperties()).andReturn(Collections.singletonList( HELLO_SERVICE_PROPERTY ));

-        expect(op.getPropertyType( HELLO_SERVICE_PROPERTY )).andReturn(HelloService.class);

-        expect(op.canClaimAsReadOnlyProperty(HELLO_SERVICE_PROPERTY)).andReturn(true);

-        

-        IComponentSpecification spec = newMock(IComponentSpecification.class);

-        

-        expect(spec.getLocation()).andReturn(l);

-        expect(spec.getDescription()).andReturn("Component1");

-        

-        final String fieldName = "_$" + HELLO_SERVICE_PROPERTY;

-        final HelloService proxy = ( HelloService )registry.getService( HelloService.class );

-        

-        expect(op.addInjectedField( fieldName, HelloService.class, proxy )).andReturn( fieldName );

-        expect(op.getAccessorMethodName( HELLO_SERVICE_PROPERTY )).andReturn("getHelloService");

-        

-        op.addMethod(Modifier.PUBLIC, new MethodSignature(HelloService.class, "getHelloService", null,

-                null), "return " + fieldName + ";", l);

-        op.claimReadonlyProperty( HELLO_SERVICE_PROPERTY );

-        

-        replay();

-        

-        final EnhancementWorker worker = ( EnhancementWorker )registry.getService( "tapestry.enhance.AutowireWorker", EnhancementWorker.class );

-        worker.performEnhancement( op, spec );

-        

-        verify();

-    }

-

-    private static final String GENERIC_PROPERTY = "genericService";

-

-    public void test_Generic_Service()

-    throws Exception

-    {

-        final Registry registry = buildFrameworkRegistry("autowire-single.xml" );

-        Location l = newLocation();

-        EnhancementOperation op = newMock(EnhancementOperation.class);

-

-        expect(op.findUnclaimedAbstractProperties()).andReturn(Collections.singletonList( GENERIC_PROPERTY ));

-        expect(op.getPropertyType( GENERIC_PROPERTY )).andReturn(SimpleGenericsInterface.class);

-        expect(op.canClaimAsReadOnlyProperty(GENERIC_PROPERTY)).andReturn(true);

-

-        IComponentSpecification spec = newMock(IComponentSpecification.class);

-

-        expect(spec.getLocation()).andReturn(l);

-        expect(spec.getDescription()).andReturn("Component1");

-

-        final String fieldName = "_$" + GENERIC_PROPERTY;

-        final SimpleGenericsInterface proxy = ( SimpleGenericsInterface )registry.getService( SimpleGenericsInterface.class );

-

-        expect(op.addInjectedField( fieldName, SimpleGenericsInterface.class, proxy )).andReturn( fieldName );

-        expect(op.getAccessorMethodName( GENERIC_PROPERTY )).andReturn("getGenericService");

-

-        op.addMethod(Modifier.PUBLIC, new MethodSignature(SimpleGenericsInterface.class, "getGenericService", null,

-                null), "return " + fieldName + ";", l);

-        op.claimReadonlyProperty( GENERIC_PROPERTY );

-

-        replay();

-

-        final EnhancementWorker worker = ( EnhancementWorker )registry.getService( "tapestry.enhance.AutowireWorker", EnhancementWorker.class );

-        worker.performEnhancement( op, spec );

-

-        verify();

-    }

-

-    private void assertNotAutowired( Registry registry )

-    {

-        EnhancementOperation op = newMock(EnhancementOperation.class);

-        

-        expect(op.findUnclaimedAbstractProperties())

-        .andReturn(Collections.singletonList( HELLO_SERVICE_PROPERTY ));

-        

-        expect(op.getPropertyType( HELLO_SERVICE_PROPERTY )).andReturn(HelloService.class);

-        

-        expect(op.canClaimAsReadOnlyProperty(HELLO_SERVICE_PROPERTY)).andReturn(true);

-        

-        replay();

-        

-        final EnhancementWorker worker = ( EnhancementWorker )registry.getService( "tapestry.enhance.AutowireWorker", EnhancementWorker.class );

-        

-        worker.performEnhancement( op, null);

-        

-        verify();

-    }

-    

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestDeferredScript.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestDeferredScript.java
deleted file mode 100644
index 5b0decb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestDeferredScript.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.engine.IScriptSource;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.DeferredScriptImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestDeferredScript extends BaseComponentTestCase
-{
-    public void testSuccess()
-    {
-        IScriptSource source = newMock(IScriptSource.class);
-
-        Resource r = newMock(Resource.class);
-        IScript script = newMock(IScript.class);
-
-        expect(source.getScript(r)).andReturn(script);
-
-        replay();
-
-        DeferredScript ds = new DeferredScriptImpl(r, source, null);
-
-        assertSame(script, ds.getScript());
-
-        // Cheating a little for code coverage. The script's resource
-        // is part of ds's toString()
-
-        assertTrue(ds.toString().indexOf(r.toString()) > 0);
-
-        verify();
-    }
-
-    public void testFailure()
-    {
-        IScriptSource source = newMock(IScriptSource.class);
-
-        Resource newResource = newMock(Resource.class);
-        Resource r = newResource;
-
-        Location l = newLocation();
-        Throwable t = new RuntimeException("Woops!");
-
-        expect(source.getScript(r)).andThrow(t);
-
-        replay();
-
-        DeferredScript ds = new DeferredScriptImpl(r, source, l);
-
-        try
-        {
-            ds.getScript();
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Woops!", ex.getMessage());
-            assertSame(l, ex.getLocation());
-            assertSame(t, ex.getRootCause());
-        }
-
-        verify();
-
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestDispatchToInjectWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestDispatchToInjectWorker.java
deleted file mode 100644
index 41fc1c5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestDispatchToInjectWorker.java
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.InjectSpecification;
-import org.apache.tapestry.spec.InjectSpecificationImpl;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import org.testng.annotations.Test;
-
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.DispatchToInjectWorker}.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestDispatchToInjectWorker extends BaseComponentTestCase
-{
-    private InjectSpecification newInjectSpecification(String propertyName, String type,
-                                                       String object)
-    {
-        return newInjectSpecification(propertyName, type, object, null);
-    }
-
-    private InjectSpecification newInjectSpecification(String propertyName, String type,
-                                                       String object, Location location)
-    {
-        InjectSpecification result = new InjectSpecificationImpl();
-        result.setProperty(propertyName);
-        result.setType(type);
-        result.setObject(object);
-        result.setLocation(location);
-
-        return result;
-    }
-
-    private IComponentSpecification newSpec(InjectSpecification injectSpec)
-    {
-        IComponentSpecification spec = newSpec();
-
-        expect(spec.getInjectSpecifications()).andReturn(Collections.singletonList(injectSpec));
-
-        return spec;
-    }
-
-    private Map newMap(String key, Object value)
-    {
-        return Collections.singletonMap(key, value);
-    }
-
-    public void test_Success()
-    {
-        EnhancementOperation op = newOp();
-        InjectSpecification is = newInjectSpecification("property", "object", "service:Foo");
-        InjectEnhancementWorker worker = newWorker();
-        Map map = newMap("object", worker);
-        IComponentSpecification spec = newSpec(is);
-
-        worker.performEnhancement(op, is);
-
-        replay();
-
-        DispatchToInjectWorker d = new DispatchToInjectWorker();
-        d.setInjectWorkers(map);
-
-        d.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void test_Unknown_Type()
-    {
-        Location l = newLocation();
-        EnhancementOperation op = newOp();
-        InjectSpecification is = newInjectSpecification(
-          "injectedProperty",
-          "object",
-          "service:Foo",
-          l);
-        IComponentSpecification spec = newSpec(is);
-        ErrorLog log = newErrorLog();
-
-        log.error(EnhanceMessages.unknownInjectType("injectedProperty", "object"), l, null);
-
-        replay();
-
-        DispatchToInjectWorker d = new DispatchToInjectWorker();
-        d.setInjectWorkers(Collections.EMPTY_MAP);
-        d.setErrorLog(log);
-
-        d.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void test_Failure()
-    {
-        Location l = newLocation();
-
-        EnhancementOperation op = newOp();
-        InjectSpecification is = newInjectSpecification("myProperty", "object", "service:Foo", l);
-        InjectEnhancementWorker worker = newMock(InjectEnhancementWorker.class);
-
-        Map map = newMap("object", worker);
-        IComponentSpecification spec = newSpec(is);
-
-        Throwable t = new RuntimeException("Simulated failure.");
-        ErrorLog log = newErrorLog();
-
-        worker.performEnhancement(op, is);
-        expectLastCall().andThrow(t);
-
-        expect(op.getBaseClass()).andReturn(BasePage.class);
-
-        log
-          .error(
-            "Error adding property myProperty to class org.apache.tapestry.html.BasePage: Simulated failure.",
-            l,
-            t);
-
-        replay();
-
-        DispatchToInjectWorker d = new DispatchToInjectWorker();
-        d.setInjectWorkers(map);
-        d.setErrorLog(log);
-
-        d.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    private InjectEnhancementWorker newWorker()
-    {
-        return newMock(InjectEnhancementWorker.class);
-    }
-
-    private ErrorLog newErrorLog()
-    {
-        return newMock(ErrorLog.class);
-    }
-
-    private EnhancementOperation newOp()
-    {
-        return newMock(EnhancementOperation.class);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestEnhanceUtils.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestEnhanceUtils.java
deleted file mode 100644
index 08b10c1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestEnhanceUtils.java
+++ /dev/null
@@ -1,362 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRender;
-import org.testng.annotations.Test;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestEnhanceUtils extends BaseComponentTestCase
-{
-    protected EnhancementOperation newOp()
-    {
-        return newMock(EnhancementOperation.class);
-    }
-    
-    public void testTypeUnspecifiedWithNoExistingProperty()
-    {
-        EnhancementOperation op = newOp();
-        
-        expect(op.getPropertyType("wilma")).andReturn(null);
-
-        replay();
-
-        Class result = EnhanceUtils.extractPropertyType(op, "wilma", null);
-
-        assertEquals(Object.class, result);
-
-        verify();
-    }
-
-    public void testTypeUnspecifiedButExistingProperty()
-    {
-        EnhancementOperation op = newOp();
-
-        expect(op.getPropertyType("fred")).andReturn(Map.class);
-
-        replay();
-
-        Class result = EnhanceUtils.extractPropertyType(op, "fred", null);
-
-        assertEquals(Map.class, result);
-
-        verify();
-    }
-
-    public void testTypeSpecified()
-    {
-        EnhancementOperation op = newOp();
-
-        expect(op.convertTypeName("int[]")).andReturn(int[].class);
-
-        op.validateProperty("betty", int[].class);
-
-        replay();
-
-        Class result = EnhanceUtils.extractPropertyType(op, "betty", "int[]");
-
-        assertEquals(int[].class, result);
-
-        verify();
-    }
-
-    public void testCreateUnwrapForPrimitive()
-    {
-        EnhancementOperation op = newOp();
-
-        replay();
-
-        String result = EnhanceUtils.createUnwrapExpression(op, "mybinding", int.class);
-
-        assertEquals("org.apache.tapestry.enhance.EnhanceUtils.toInt(mybinding)", result);
-
-        verify();
-    }
-
-    public void testCreateUnwrapForObjectType()
-    {
-        EnhancementOperation op = newOp();
-
-        expect(op.getClassReference(String.class)).andReturn("_$class$String");
-
-        replay();
-
-        String result = EnhanceUtils.createUnwrapExpression(op, "thebinding", String.class);
-
-        assertEquals("(java.lang.String) thebinding.getObject(_$class$String)", result);
-
-        verify();
-    }
-
-    public void testVerifyPropertyTypeNoProperty()
-    {
-        EnhancementOperation op = newOp();
-
-        expect(op.getPropertyType("foo")).andReturn(null);
-
-        replay();
-
-        assertEquals(Object.class, EnhanceUtils.verifyPropertyType(op, "foo", String.class));
-
-        verify();
-    }
-
-    public void testVerifyPropertyTypeSuccess()
-    {
-        EnhancementOperation op = newOp();
-
-        expect(op.getPropertyType("foo")).andReturn(Object.class);
-
-        replay();
-
-        assertEquals(Object.class, EnhanceUtils.verifyPropertyType(op, "foo", String.class));
-
-        verify();
-    }
-
-    public void testVerifyPropertyTypeWithDeclaredPropertyType()
-    {
-        EnhancementOperation op = newOp();
-
-        expect(op.getPropertyType("foo")).andReturn(IRender.class);
-
-        replay();
-
-        assertEquals(IRender.class, EnhanceUtils.verifyPropertyType(op, "foo", IComponent.class));
-
-        verify();
-
-    }
-
-    public void testVerifyPropertyTypeFailure()
-    {
-        EnhancementOperation op = newOp();
-
-        expect(op.getPropertyType("foo")).andReturn(String.class);
-
-        replay();
-
-        try
-        {
-            EnhanceUtils.verifyPropertyType(op, "foo", IComponent.class);
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Property foo is type java.lang.String, which is not compatible with org.apache.tapestry.IComponent.",
-                    ex.getMessage());
-        }
-
-        verify();
-    }
-
-    protected IBinding newBinding(Class expectedType, Object value)
-    {
-        IBinding binding = newMock(IBinding.class);
-
-        expect(binding.getObject(expectedType)).andReturn(value);
-
-        return binding;
-    }
-
-    public void testToBooleanNull()
-    {
-        IBinding binding = newBinding(Boolean.class, null);
-
-        replay();
-
-        assertEquals(false, EnhanceUtils.toBoolean(binding));
-
-        verify();
-    }
-
-    public void testToBoolean()
-    {
-        IBinding binding = newBinding(Boolean.class, Boolean.TRUE);
-
-        replay();
-
-        assertEquals(true, EnhanceUtils.toBoolean(binding));
-
-        verify();
-    }
-
-    public void testToByteNull()
-    {
-        IBinding binding = newBinding(Byte.class, null);
-
-        replay();
-
-        assertEquals(0, EnhanceUtils.toByte(binding));
-
-        verify();
-    }
-
-    public void testToByte()
-    {
-        IBinding binding = newBinding(Byte.class, new Byte((byte) 37));
-
-        replay();
-
-        assertEquals(37, EnhanceUtils.toByte(binding));
-
-        verify();
-    }
-
-    public void testToCharNull()
-    {
-        IBinding binding = newBinding(Character.class, null);
-
-        replay();
-
-        assertEquals(0, EnhanceUtils.toChar(binding));
-
-        verify();
-    }
-
-    public void testToChar()
-    {
-        IBinding binding = newBinding(Character.class, new Character('q'));
-
-        replay();
-
-        assertEquals('q', EnhanceUtils.toChar(binding));
-
-        verify();
-    }
-
-    public void testToShortNull()
-    {
-        IBinding binding = newBinding(Short.class, null);
-
-        replay();
-
-        assertEquals(0, EnhanceUtils.toShort(binding));
-
-        verify();
-    }
-
-    public void testToShort()
-    {
-        IBinding binding = newBinding(Short.class, new Short((short) 99));
-
-        replay();
-
-        assertEquals(99, EnhanceUtils.toShort(binding));
-
-        verify();
-    }
-
-    public void testToIntNull()
-    {
-        IBinding binding = newBinding(Integer.class, null);
-
-        replay();
-
-        assertEquals(0, EnhanceUtils.toInt(binding));
-
-        verify();
-    }
-
-    public void testToInt()
-    {
-        IBinding binding = newBinding(Integer.class, new Integer(107));
-
-        replay();
-
-        assertEquals(107, EnhanceUtils.toInt(binding));
-
-        verify();
-    }
-
-    public void testToLongNull()
-    {
-        IBinding binding = newBinding(Long.class, null);
-
-        replay();
-
-        assertEquals(0, EnhanceUtils.toLong(binding));
-
-        verify();
-    }
-
-    public void testToLong()
-    {
-        IBinding binding = newBinding(Long.class, new Long(90000));
-
-        replay();
-
-        assertEquals(90000, EnhanceUtils.toLong(binding));
-
-        verify();
-    }
-
-    public void testToFloatNull()
-    {
-        IBinding binding = newBinding(Float.class, null);
-
-        replay();
-
-        assertEquals(0.0f, EnhanceUtils.toFloat(binding), 0.0f);
-
-        verify();
-    }
-
-    public void testToFloat()
-    {
-        IBinding binding = newBinding(Float.class, new Float(2.5f));
-
-        replay();
-
-        assertEquals(2.5f, EnhanceUtils.toFloat(binding), 0.0f);
-
-        verify();
-    }
-
-    public void testToDoubleNull()
-    {
-        IBinding binding = newBinding(Double.class, null);
-
-        replay();
-
-        assertEquals(0.0d, EnhanceUtils.toDouble(binding), 0.0d);
-
-        verify();
-    }
-
-    public void testToDouble()
-    {
-        IBinding binding = newBinding(Double.class, new Double(2.5d));
-
-        replay();
-
-        assertEquals(2.5d, EnhanceUtils.toDouble(binding), 0.0d);
-
-        verify();
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestEnhancementOperation.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestEnhancementOperation.java
deleted file mode 100644
index 4bc738e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestEnhancementOperation.java
+++ /dev/null
@@ -1,921 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.ClassFab;
-import org.apache.hivemind.service.ClassFactory;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.hivemind.service.impl.ClassFactoryImpl;
-import org.apache.tapestry.*;
-import org.apache.tapestry.components.Insert;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageValidateListener;
-import org.apache.tapestry.link.ServiceLink;
-import org.apache.tapestry.services.ComponentConstructor;
-import org.apache.tapestry.spec.IComponentSpecification;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.EnhancementOperationImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestEnhancementOperation extends BaseComponentTestCase
-{
-    @BeforeMethod(alwaysRun=true)
-    protected void setUp() throws Exception
-    {
-        EnhancementOperationImpl._uid = 97;
-    }
-
-    public abstract static class Fixture
-    {
-        public abstract String getStringProperty();
-
-        public abstract boolean isBooleanProperty();
-
-        public abstract boolean getFlagProperty();
-    }
-
-    public abstract static class ValidatingComponent extends AbstractComponent implements
-            PageValidateListener
-    {
-    }
-
-    public abstract static class GetClassReferenceFixture
-    {
-        public abstract Class getClassReference();
-    }
-
-    public static class MissingConstructorFixture
-    {
-        public MissingConstructorFixture(String foo)
-        {
-            //
-        }
-    }
-
-    public abstract static class UnclaimedAbstractPropertiesFixture
-    {
-        public abstract String getReadOnly();
-
-        public abstract void setWriteOnly(String value);
-
-        public void setConcrete(int i)
-        {
-            //
-        }
-
-        public int getConcrete()
-        {
-            return -1;
-        }
-    }
-
-    public void test_Claimed_Property()
-    {
-        EnhancementOperationImpl eo = new EnhancementOperationImpl();
-
-        eo.claimProperty("foo");
-        eo.claimProperty("bar");
-
-        try
-        {
-            eo.claimProperty("foo");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(EnhanceMessages.claimedProperty("foo"), ex.getMessage());
-        }
-    }
-
-    public void test_Claim_Readonly_Property_Does_Not_Exist()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory();
-
-        replay();
-
-        EnhancementOperationImpl eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, cf, null);
-        
-        assertFalse(eo.canClaimAsReadOnlyProperty("foo"));
-        
-        eo.claimReadonlyProperty("foo");
-        
-        assertFalse(eo.canClaimAsReadOnlyProperty("foo"));
-        
-        verify();
-    }
-
-    public void test_Claim_Readonly_Property_Claimed()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory();
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, cf, null);
-
-        eo.claimReadonlyProperty("foo");
-        eo.claimReadonlyProperty("bar");
-
-        try
-        {
-            eo.claimProperty("foo");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(EnhanceMessages.claimedProperty("foo"), ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void test_Claim_Readonly_Property_Has_Setter()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory();
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, cf, null);
-
-        try
-        {
-            // id is a read/write property (even if it isn't abstract)
-            eo.claimReadonlyProperty("id");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Property id should be read-only; remove method public void org.apache.tapestry.AbstractComponent.setId(java.lang.String).",
-                    ex.getMessage());
-        }
-
-        verify();
-    }
-
-    private ClassFactory newClassFactory()
-    {
-        return newClassFactory(BaseComponent.class);
-    }
-
-    private ClassFactory newClassFactory(Class baseClass)
-    {
-        return newClassFactory(baseClass, newClassFab());
-    }
-
-    private ClassFactory newClassFactory(Class baseClass, ClassFab classFab)
-    {
-        ClassFactory factory = newMock(ClassFactory.class);
-
-        String className = baseClass.getName();
-        int dotx = className.lastIndexOf('.');
-        String baseName = className.substring(dotx + 1);
-
-        expect(factory.newClass(startsWith("$" + baseName), eq(baseClass))).andReturn(classFab);
-
-        return factory;
-    }
-
-    private ClassFab newClassFab()
-    {
-        return newMock(ClassFab.class);
-    }
-
-    public void test_Constructor_And_Accessors()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory();
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, cf, null);
-
-        assertSame(BaseComponent.class, eo.getBaseClass());
-
-        verify();
-    }
-
-    public void test_Check_Implements_No_Interface()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory();
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, cf, null);
-
-        assertEquals(false, eo.implementsInterface(PageValidateListener.class));
-
-        verify();
-    }
-
-    public void test_Check_Implements_Class_Implements()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory(ValidatingComponent.class);
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                ValidatingComponent.class, cf, null);
-
-        assertEquals(true, eo.implementsInterface(PageValidateListener.class));
-
-        verify();
-    }
-
-    public void testCheckImplementsNoMatchForAddedInterfaces()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory factory = newMock(ClassFactory.class);
-        ClassFab classfab = newMock(ClassFab.class);
-
-        expect(factory.newClass(startsWith("$BaseComponent"), eq(BaseComponent.class))).andReturn(classfab);
-
-        classfab.addInterface(PageDetachListener.class);
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, factory, null);
-
-        eo.extendMethodImplementation(
-                PageDetachListener.class,
-                EnhanceUtils.PAGE_DETACHED_SIGNATURE,
-                "foo();");
-
-        assertEquals(false, eo.implementsInterface(PageValidateListener.class));
-
-        verify();
-    }
-
-    public void testCheckImplementsMatchAddedInterfaces()
-    {
-        IComponentSpecification spec = newSpec();
-
-        ClassFactory factory = newMock(ClassFactory.class);
-        ClassFab classfab = newMock(ClassFab.class);
-
-        expect(factory.newClass(startsWith("$BaseComponent"), eq(BaseComponent.class))).andReturn(classfab);
-
-        classfab.addInterface(PageDetachListener.class);
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, factory, null);
-
-        eo.extendMethodImplementation(
-                PageDetachListener.class,
-                EnhanceUtils.PAGE_DETACHED_SIGNATURE,
-                "foo();");
-
-        assertEquals(true, eo.implementsInterface(PageDetachListener.class));
-
-        verify();
-    }
-
-    public void testValidatePropertyNew()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory();
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, cf, null);
-
-        // Validates because BaseComponent doesn't have such a property.
-
-        eo.validateProperty("abraxis", Set.class);
-
-        verify();
-    }
-
-    public void testValidatePropertyMatches()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory();
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, cf, null);
-
-        // Validates because BaseComponent inherits a page property of type IPage
-
-        eo.validateProperty("page", IPage.class);
-
-        verify();
-    }
-
-    public void testValidatePropertyMismatch()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory();
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, cf, null);
-
-        // Validates because BaseComponent inherits a page property of type IPage
-
-        try
-        {
-            eo.validateProperty("page", String.class);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(EnhanceMessages.propertyTypeMismatch(
-                    BaseComponent.class,
-                    "page",
-                    IPage.class,
-                    String.class), ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void testConvertTypeName()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory();
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, cf, null);
-
-        assertSame(boolean.class, eo.convertTypeName("boolean"));
-        assertSame(float[].class, eo.convertTypeName("float[]"));
-        assertSame(double[][].class, eo.convertTypeName("double[][]"));
-
-        assertSame(Set.class, eo.convertTypeName(Set.class.getName()));
-
-        assertSame(List[].class, eo.convertTypeName(List.class.getName() + "[]"));
-
-        try
-        {
-            eo.convertTypeName("package.DoesNotExist");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            // Ignore message, it's from HiveMind anyway.
-        }
-
-        verify();
-
-    }
-
-    public void testAddField()
-    {
-        IComponentSpecification spec = newSpec();
-
-        ClassFactory cf = newMock(ClassFactory.class);
-        ClassFab fab = newMock(ClassFab.class);
-
-        expect(cf.newClass(startsWith("$BaseComponent"), eq(BaseComponent.class))).andReturn(fab);
-
-        fab.addField("fred", String.class);
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, cf, null);
-
-        eo.addField("fred", String.class);
-
-        verify();
-    }
-
-    public void testAddInjectedField()
-    {
-        IComponentSpecification spec = newSpec();
-        
-        ClassFactory cf = newMock(ClassFactory.class);
-        ClassFab fab = newMock(ClassFab.class);
-        
-        expect(cf.newClass(startsWith("$BaseComponent"), eq(BaseComponent.class))).andReturn(fab);
-        
-        // String because "FRED_VALUE" is a String
-
-        fab.addField("fred", String.class);
-        
-        replay();
-        
-        EnhancementOperationImpl eo = new EnhancementOperationImpl(new DefaultClassResolver(),
-                spec, BaseComponent.class, cf, null);
-
-        assertEquals("fred", eo.addInjectedField("fred", String.class, "FRED_VALUE"));
-
-        verify();
-
-        HashMap map = new HashMap();
-
-        fab.addField("fred_0", Map.class);
-        
-        replay();
-
-        assertEquals("fred_0", eo.addInjectedField("fred", Map.class, map));
-
-        verify();
-
-        BodyBuilder body = new BodyBuilder();
-        body.begin();
-        body.addln("fred = $1;");
-        body.addln("fred_0 = $2;");
-        body.end();
-        
-        fab.addConstructor(aryEq(new Class[] { String.class, Map.class }), (Class[])isNull(), 
-                eq(body.toString()));
-        
-        replay();
-
-        eo.finalizeEnhancedClass();
-
-        verify();
-    }
-
-    public void testAddMethod()
-    {
-        Location l = newLocation();
-
-        Class baseClass = Insert.class;
-        MethodSignature sig = new MethodSignature(void.class, "frob", null, null);
-
-        IComponentSpecification spec = newSpec();
-
-        ClassFactory cf = newMock(ClassFactory.class);
-        ClassFab fab = newMock(ClassFab.class);
-
-        // We force the uid to 97 in setUp()
-
-        expect(cf.newClass(startsWith("$Insert"), eq(baseClass))).andReturn(fab);
-        
-        expect(fab.addMethod(Modifier.PUBLIC, sig, "method body")).andReturn(null);
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                baseClass, cf, null);
-
-        eo.addMethod(Modifier.PUBLIC, sig, "method body", l);
-
-        verify();
-    }
-
-    public void testAddMethodDuplicate()
-    {
-        Location firstLocation = newLocation();
-        Location secondLocation = newLocation();
-
-        Class baseClass = Insert.class;
-        MethodSignature sig = new MethodSignature(void.class, "frob", null, null);
-
-        IComponentSpecification spec = newSpec();
-
-        ClassFactory cf = newMock(ClassFactory.class);
-        ClassFab fab = newMock(ClassFab.class);
-
-        // We force the uid to 97 in setUp()
-
-        expect(cf.newClass(startsWith("$Insert"), eq(baseClass))).andReturn(fab);
-
-        expect(fab.addMethod(Modifier.PUBLIC, sig, "method body")).andReturn(null);
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                baseClass, cf, null);
-
-        eo.addMethod(Modifier.PUBLIC, sig, "method body", firstLocation);
-
-        try
-        {
-            eo.addMethod(Modifier.PUBLIC, sig, "second method body", secondLocation);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertTrue(ex.getMessage()
-                    .indexOf("A new implementation of method 'void frob()' conflicts with an existing "
-                            + "implementation") > -1);
-            
-            assertSame(secondLocation, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    public void testGetAccessorMethodName()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory(Fixture.class);
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                Fixture.class, cf, null);
-
-        assertEquals("getStringProperty", eo.getAccessorMethodName("stringProperty"));
-        assertEquals("isBooleanProperty", eo.getAccessorMethodName("booleanProperty"));
-        assertEquals("getFlagProperty", eo.getAccessorMethodName("flagProperty"));
-        assertEquals("getUnknownProperty", eo.getAccessorMethodName("unknownProperty"));
-
-        verify();
-    }
-
-    /**
-     * On this test, instead of mocking up everything, we actually use the raw implementations to
-     * construct a new class; the class gets a class reference passed to it in its constructor.
-     */
-
-    public void test_Get_Class_Reference() throws Exception
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = newSpec();
-
-        expect(spec.getLocation()).andReturn(l);
-
-        replay();
-
-        EnhancementOperationImpl eo = new EnhancementOperationImpl(new DefaultClassResolver(),
-                spec, GetClassReferenceFixture.class, new ClassFactoryImpl(), null);
-
-        // This does two things; it creates a new field, and it sets up a new constructor
-        // parameter to inject the class value (Map.class) into each new instance.
-
-        String ref = eo.getClassReference(Map.class);
-        String ref2 = eo.getClassReference(Map.class);
-
-        eo.addMethod(Modifier.PUBLIC, new MethodSignature(Class.class, "getClassReference", null,
-                null), "return " + ref + ";", l);
-
-        ComponentConstructor cc = eo.getConstructor();
-
-        GetClassReferenceFixture f = (GetClassReferenceFixture) cc.newInstance();
-
-        assertSame(Map.class, f.getClassReference());
-
-        verify();
-
-        assertSame(ref, ref2);
-    }
-
-    public void testGetArrayClassReference() throws Exception
-    {
-        IComponentSpecification spec = newSpec();
-
-        replay();
-
-        EnhancementOperationImpl eo = new EnhancementOperationImpl(new DefaultClassResolver(),
-                spec, GetClassReferenceFixture.class, new ClassFactoryImpl(), null);
-
-        String ref = eo.getClassReference(int[].class);
-
-        assertTrue(ref.indexOf('[') < 0);
-
-        verify();
-    }
-
-    /**
-     * Really a test for {@link org.apache.tapestry.enhance.ComponentConstructorImpl};
-     * {@link #test_Get_Class_Reference()} tests the success case, just want to fill in the failure.
-     */
-
-    public void testComponentConstructorFailure()
-    {
-        Location l = newLocation();
-
-        ComponentConstructor cc = new ComponentConstructorImpl(BaseComponent.class
-                .getConstructors()[0], new Object[]
-        { "unexpected" }, "<classfab>", l);
-
-        try
-        {
-            cc.newInstance();
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertExceptionSubstring(
-                    ex,
-                    "Unable to instantiate instance of class org.apache.tapestry.BaseComponent");
-            assertSame(l, ex.getLocation());
-        }
-    }
-
-    public void test_Get_Property_Type()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory();
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
-                BaseComponent.class, cf, null);
-
-        assertEquals(Map.class, eo.getPropertyType("assets"));
-        assertEquals(IPage.class, eo.getPropertyType("page"));
-
-        // Doesn't exist, so returns null
-
-        assertNull(eo.getPropertyType("foosball"));
-
-        verify();
-    }
-
-    public void test_Find_Unclaimed_Abstract_Properties()
-    {
-        ClassResolver cr = newMock(ClassResolver.class);
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory(UnclaimedAbstractPropertiesFixture.class);
-
-        replay();
-
-        EnhancementOperation eo = new EnhancementOperationImpl(cr, spec,
-                UnclaimedAbstractPropertiesFixture.class, cf, null);
-
-        List l = eo.findUnclaimedAbstractProperties();
-
-        assertEquals(2, l.size());
-        assertEquals(true, l.contains("readOnly"));
-        assertEquals(true, l.contains("writeOnly"));
-
-        eo.claimProperty("readOnly");
-
-        l = eo.findUnclaimedAbstractProperties();
-
-        assertEquals(1, l.size());
-        assertEquals(true, l.contains("writeOnly"));
-
-        eo.claimProperty("writeOnly");
-
-        l = eo.findUnclaimedAbstractProperties();
-
-        assertEquals(true, l.isEmpty());
-
-        verify();
-    }
-
-    public void testGetNewMethod()
-    {
-        ClassResolver cr = new DefaultClassResolver();
-        
-        IComponentSpecification spec = newSpec();
-        
-        ClassFactory cf = newMock(ClassFactory.class);
-        
-        ClassFab fab = newMock(ClassFab.class);
-
-        expect(cf.newClass(startsWith("$BaseComponent"), eq(BaseComponent.class))).andReturn(fab);
-
-        fab.addInterface(PageDetachListener.class);
-        
-        replay();
-
-        EnhancementOperationImpl eo = new EnhancementOperationImpl(cr, spec, BaseComponent.class,
-                cf, null);
-
-        MethodSignature sig = EnhanceUtils.PAGE_DETACHED_SIGNATURE;
-
-        eo.extendMethodImplementation(PageDetachListener.class, sig, "some-code();");
-
-        verify();
-
-        replay();
-
-        // Check that repeated calls do not
-        // keep adding methods.
-
-        eo.extendMethodImplementation(PageDetachListener.class, sig, "more-code();");
-
-        verify();
-
-        expect(fab.addMethod(Modifier.PUBLIC, sig, "{\n  some-code();\n  more-code();\n}\n")).andReturn(null);
-
-        expect(fab.createClass()).andReturn(BaseComponent.class);
-
-        expect(spec.getLocation()).andReturn(null);
-
-        replay();
-
-        eo.getConstructor();
-
-        verify();
-    }
-
-    public void testGetExistingMethod()
-    {
-        ClassResolver cr = new DefaultClassResolver();
-        
-        IComponentSpecification spec = newSpec();
-
-        ClassFactory cf = newMock(ClassFactory.class);
-        
-        ClassFab fab = newMock(ClassFab.class);
-
-        expect(cf.newClass(startsWith("$BaseComponent"), eq(BaseComponent.class))).andReturn(fab);
-
-        replay();
-
-        EnhancementOperationImpl eo = new EnhancementOperationImpl(cr, spec, BaseComponent.class,
-                cf, null);
-
-        MethodSignature sig = EnhanceUtils.FINISH_LOAD_SIGNATURE;
-
-        eo.extendMethodImplementation(IComponent.class, sig, "some-code();");
-
-        verify();
-
-        expect(fab.addMethod(Modifier.PUBLIC, sig, "{\n  super.finishLoad($$);\n  some-code();\n}\n"))
-        .andReturn(null);
-
-        expect(fab.createClass()).andReturn(BaseComponent.class);
-
-        expect(spec.getLocation()).andReturn(null);
-
-        replay();
-
-        eo.getConstructor();
-
-        verify();
-    }
-
-    public void testGetExistingProtectedMethod()
-    {
-        ClassResolver cr = new DefaultClassResolver();
-        IComponentSpecification spec = newSpec();
-
-        ClassFactory cf = newMock(ClassFactory.class);
-        
-        ClassFab fab = newMock(ClassFab.class);
-
-        expect(cf.newClass(startsWith("$BaseComponent"), eq(BaseComponent.class))).andReturn(fab);
-
-        replay();
-
-        EnhancementOperationImpl eo = new EnhancementOperationImpl(cr, spec, BaseComponent.class,
-                cf, null);
-
-        // A protected method
-        MethodSignature sig = EnhanceUtils.CLEANUP_AFTER_RENDER_SIGNATURE;
-
-        eo.extendMethodImplementation(IComponent.class, sig, "some-code();");
-
-        verify();
-
-        expect(fab.addMethod(
-                Modifier.PUBLIC,
-                sig,
-                "{\n  super.cleanupAfterRender($$);\n  some-code();\n}\n"))
-                .andReturn(null);
-
-        expect(fab.createClass()).andReturn(BaseComponent.class);
-
-        expect(spec.getLocation()).andReturn(null);
-
-        replay();
-
-        eo.getConstructor();
-
-        verify();
-    }
-
-    public static abstract class ExistingAbstractMethodFixture extends BaseComponent implements
-            PageDetachListener
-    {
-        //
-    }
-
-    public void getExistingAbstractMethod()
-    {
-        ClassResolver cr = new DefaultClassResolver();
-        IComponentSpecification spec = newSpec();
-
-        ClassFactory cf = newMock(ClassFactory.class);
-        
-        ClassFab fab = newMock(ClassFab.class);
-
-        expect(cf.newClass(startsWith("$TestEnhancementOperation$ExistingAbstractMethodFixture"), eq(TestEnhancementOperation.ExistingAbstractMethodFixture.class)))
-        .andReturn(fab);
-        
-        replay();
-
-        EnhancementOperationImpl eo = new EnhancementOperationImpl(cr, spec,
-                ExistingAbstractMethodFixture.class, cf, null);
-
-        MethodSignature sig = EnhanceUtils.PAGE_DETACHED_SIGNATURE;
-
-        eo.extendMethodImplementation(PageDetachListener.class, sig, "some-code();");
-
-        verify();
-
-        expect(fab.addMethod(Modifier.PUBLIC, sig, "{\n  some-code();\n}\n")).andReturn(null);
-
-        expect(fab.createClass()).andReturn(BaseComponent.class);
-
-        expect(spec.getLocation()).andReturn(null);
-
-        replay();
-
-        eo.getConstructor();
-
-        verify();
-    }
-
-    /**
-     * This seems to pass on the command line, but fail inside Eclipse. I think Eclipse's Java
-     * compiler works a little different from Java's ... in this example (TODO: Create test fixture
-     * classes for this test) the getTarget() method doesn't show up as a declared public method
-     * when Eclipse compiles the code, but does when JDK compiles the code.
-     */
-    public void testPropertyInheritedFromInterface()
-    {
-        IComponentSpecification spec = newSpec();
-        ClassFactory cf = newClassFactory(ServiceLink.class);
-
-        replay();
-        
-        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec, ServiceLink.class, cf, null);
-
-        assertEquals(String.class, eo.getPropertyType("target"));
-
-        verify();
-    }
-
-    public void testConstructorFailure()
-    {
-        IComponentSpecification spec = newSpec();
-        
-        ClassFab classFab = newMock(ClassFab.class);
-
-        ClassFactory cf = newClassFactory(ServiceLink.class, classFab);
-        
-        Throwable t = new RuntimeException("Inconceivable!");
-
-        expect(classFab.createClass()).andThrow(t);
-        
-        replay();
-        
-        EnhancementOperationImpl eo = new EnhancementOperationImpl(new DefaultClassResolver(),
-                spec, ServiceLink.class, cf, null);
-
-        try
-        {
-            eo.getConstructor();
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Failure enhancing class org.apache.tapestry.link.ServiceLink: Inconceivable!",
-                    ex.getMessage());
-            assertSame(classFab, ex.getComponent());
-            assertSame(t, ex.getRootCause());
-        }
-
-        verify();
-    }
-    
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestHiveMindExpressionCompiler.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestHiveMindExpressionCompiler.java
deleted file mode 100644
index 3afad6a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestHiveMindExpressionCompiler.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.apache.tapestry.enhance;
-
-import ognl.Node;
-import ognl.Ognl;
-import ognl.OgnlContext;
-import org.apache.tapestry.TestBase;
-import org.apache.tapestry.services.impl.HiveMindExpressionCompiler;
-import org.testng.annotations.Test;
-
-/**
- * Tests functionality of {@link org.apache.tapestry.services.impl.HiveMindExpressionCompiler}.
- */
-@Test
-public class TestHiveMindExpressionCompiler extends TestBase {
-
-    ClassFactoryImpl _classFactory = new ClassFactoryImpl();
-    HiveMindExpressionCompiler _compiler = new HiveMindExpressionCompiler(_classFactory);
-
-    public void test_Duplicate_Class_Compiler()
-    throws Exception
-    {
-        OgnlContext context = (OgnlContext) Ognl.createDefaultContext(null);
-        BasicObject root = new BasicObject();
-        String expr = "name";
-        Node expression = (Node) Ognl.parseExpression(expr);
-
-        _compiler.compileExpression(context, expression, root);
-        assert expression.getAccessor() != null;
-        assertEquals(expression.getAccessor().get(context, root), root.getName());
-
-        Node expression2 = (Node) Ognl.parseExpression(expr);
-        
-        _compiler.compileExpression(context, expression2, root);
-        assert expression2.getAccessor() != null;
-        assertEquals(expression2.getAccessor().get(context, root), root.getName());
-
-        assertNotSame(expression2.getAccessor().getClass().getName(), expression.getAccessor().getClass().getName());
-    }
-
-    public void test_Divide_By_Zero()
-    throws Exception
-    {
-        OgnlContext context = (OgnlContext) Ognl.createDefaultContext(null);
-        String expr = "true ? 1 : 1/0";
-
-        Node expression = (Node) Ognl.parseExpression(expr);
-        _compiler.compileExpression(context, expression, expr);
-        
-        assertEquals(expression.getAccessor().get(context, null), Integer.valueOf(1));
-    }
-
-    public void test_ClassFab_Generation_Count_With_Uncompilable_Expression()
-            throws Exception
-    {
-        OgnlContext context = (OgnlContext) Ognl.createDefaultContext(null);
-        BasicObject root = new BasicObject();
-
-        String exprStr = "user != null && user.name != null ? user.name : name";
-        Node expression = (Node) Ognl.parseExpression(exprStr);
-
-        int prevCount = _classFactory._classCounter;
-
-        _compiler.compileExpression(context, expression, root);
-        assert expression.getAccessor() == null;
-
-        assertEquals(_classFactory._classCounter, prevCount);
-
-        root.setUser(new User());
-
-        _compiler.compileExpression(context, expression, root);
-        assert expression.getAccessor() != null;
-
-        assertEquals(_classFactory._classCounter, prevCount + 1);
-    }
-
-    public void test_ClassFab_Generation_Count_With_Uncompilable_Expression2()
-            throws Exception
-    {
-        OgnlContext context = (OgnlContext) Ognl.createDefaultContext(null);
-        BasicObject root = new BasicObject();
-
-        String exprStr = "user ? user.name : name";
-        Node expression = (Node) Ognl.parseExpression(exprStr);
-
-        int prevCount = _classFactory._classCounter;
-
-        _compiler.compileExpression(context, expression, root);
-        assert expression.getAccessor() == null;
-
-        assertEquals(_classFactory._classCounter, prevCount);
-
-        root.setUser(new User());
-
-        _compiler.compileExpression(context, expression, root);
-        assert expression.getAccessor() != null;
-
-        assertEquals(_classFactory._classCounter, prevCount + 1);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectBeanWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectBeanWorker.java
deleted file mode 100644
index 2f064e3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectBeanWorker.java
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collections;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.spec.BeanSpecification;
-import org.apache.tapestry.spec.IBeanSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.InjectBeanWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectBeanWorker extends BaseComponentTestCase
-{
-    private IComponentSpecification newSpec(String beanName, String propertyName, Location location)
-    {
-        IBeanSpecification bs = new BeanSpecification();
-        bs.setPropertyName(propertyName);
-        bs.setLocation(location);
-        
-        IComponentSpecification spec = newSpec();
-
-        expect(spec.getBeanNames()).andReturn(Collections.singletonList(beanName));
-
-        expect(spec.getBeanSpecification(beanName)).andReturn(bs);
-
-        return spec;
-    }
-
-    private EnhancementOperation newOp()
-    {
-        return newMock(EnhancementOperation.class);
-    }
-    
-    public void testNoWork()
-    {
-        IComponentSpecification spec = newSpec("fred", null, null);
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        replay();
-
-        new InjectBeanWorker().performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testSuccess()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = newSpec("fred", "barney", l);
-        
-        EnhancementOperation op = newOp();
-
-        op.claimReadonlyProperty("barney");
-
-        expect(op.getPropertyType("barney")).andReturn(ArrayList.class);
-
-        expect(op.getAccessorMethodName("barney")).andReturn("getBarney");
-
-        op.addMethod(
-                Modifier.PUBLIC,
-                new MethodSignature(ArrayList.class, "getBarney", null, null),
-                "return (java.util.ArrayList) getBeans().getBean(\"fred\");",
-                l);
-
-        replay();
-
-        new InjectBeanWorker().performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testFailure()
-    {
-        Location l = fabricateLocation(99);
-        Throwable ex = new ApplicationRuntimeException(EnhanceMessages.claimedProperty("barney"));
-
-        EnhancementOperation op = newOp();
-
-        IComponentSpecification spec = newSpec("fred", "barney", l);
-
-        ErrorLog log = newMock(ErrorLog.class);
-
-        op.claimReadonlyProperty("barney");
-        expectLastCall().andThrow(ex);
-
-        expect(op.getBaseClass()).andReturn(BaseComponent.class);
-
-        log.error(EnhanceMessages.errorAddingProperty("barney", BaseComponent.class, ex), l, ex);
-
-        replay();
-
-        InjectBeanWorker w = new InjectBeanWorker();
-
-        w.setErrorLog(log);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectComponentWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectComponentWorker.java
deleted file mode 100644
index 1aef2bb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectComponentWorker.java
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import java.lang.reflect.Modifier;
-import java.util.Collections;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.ContainedComponent;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.InjectComponentWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectComponentWorker extends BaseComponentTestCase
-{
-    private IComponentSpecification newSpec(String componentId, String propertyName,
-            Location location)
-    {
-        IContainedComponent cc = new ContainedComponent();
-        cc.setPropertyName(propertyName);
-        cc.setLocation(location);
-        
-        IComponentSpecification spec = newSpec();
-
-        expect(spec.getComponentIds()).andReturn(Collections.singletonList(componentId));
-
-        expect(spec.getComponent(componentId)).andReturn(cc);
-
-        return spec;
-    }
-
-    public void testNoWork()
-    {
-        IComponentSpecification spec = newSpec("fred", null, null);
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        replay();
-
-        new InjectComponentWorker().performEnhancement(op, spec);
-
-        verify();
-    }
-
-    protected EnhancementOperation newEnhancementOperation()
-    {
-        return newMock(EnhancementOperation.class);
-    }
-
-    protected void trainGetPropertyType(EnhancementOperation op, String propertyName,
-            Class propertyType)
-    {
-        expect(op.getPropertyType(propertyName)).andReturn(propertyType);
-    }
-
-    protected void trainGetAccessorMethodName(EnhancementOperation op, String propertyName,
-            String methodName)
-    {
-        expect(op.getAccessorMethodName(propertyName)).andReturn(methodName);
-    }
-
-    protected void trainGetClassReference(EnhancementOperation op, Class clazz, String reference)
-    {
-        expect(op.getClassReference(clazz)).andReturn(reference);
-    }
-
-    protected void trainAddInjectedField(EnhancementOperation op, String fieldName,
-            Class fieldType, Object fieldValue, String uniqueFieldName)
-    {
-        expect(op.addInjectedField(fieldName, fieldType, fieldValue)).andReturn(uniqueFieldName);
-    }
-
-    public void testSuccess()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = newSpec("fred", "barney", l);
-        EnhancementOperation op = newEnhancementOperation();
-
-        trainGetPropertyType(op, "barney", IComponent.class);
-
-        op.claimReadonlyProperty("barney");
-
-        trainGetClassReference(op, IComponent.class, "_$IComponent$class");
-        trainAddInjectedField(op, "_$barney$location", Location.class, l, "_$$location");
-
-        op.addField("_$barney", IComponent.class);
-
-        trainGetAccessorMethodName(op, "barney", "getBarney");
-
-        op.addMethod(
-                Modifier.PUBLIC,
-                new MethodSignature(IComponent.class, "getBarney", null, null),
-                "return _$barney;",
-                l);
-
-        op.extendMethodImplementation(
-                IComponent.class,
-                EnhanceUtils.FINISH_LOAD_SIGNATURE,
-                "_$barney = (org.apache.tapestry.IComponent) "
-                        + "org.apache.tapestry.TapestryUtils#getComponent"
-                        + "(this, \"fred\", _$IComponent$class, _$$location);");
-
-        replay();
-
-        new InjectComponentWorker().performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testFailure()
-    {
-        Location l = newLocation();
-        Throwable ex = new ApplicationRuntimeException(EnhanceMessages.claimedProperty("barney"));
-        
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        IComponentSpecification spec = newSpec("fred", "barney", l);
-
-        ErrorLog log = newMock(ErrorLog.class);
-
-        expect(op.getPropertyType("barney")).andReturn(IComponent.class);
-
-        op.claimReadonlyProperty("barney");
-        expectLastCall().andThrow(ex);
-
-        expect(op.getBaseClass()).andReturn(BaseComponent.class);
-
-        log.error(EnhanceMessages.errorAddingProperty("barney", BaseComponent.class, ex), l, ex);
-
-        replay();
-
-        InjectComponentWorker w = new InjectComponentWorker();
-
-        w.setErrorLog(log);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectEventInvokerWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectEventInvokerWorker.java
deleted file mode 100644
index 9c7c299..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectEventInvokerWorker.java
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright May 21, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import java.lang.reflect.Modifier;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.internal.event.IComponentEventInvoker;
-import org.apache.tapestry.internal.event.impl.ComponentEventInvoker;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-
-/**
- * Test functionality of {@link InjectEventInvokerWorker} enhancer.
- * 
- * @author jkuhnert
- */
-@Test
-public class TestInjectEventInvokerWorker extends BaseEnhancementTestCase
-{
-
-    public void testSuccess() throws Exception
-    {
-        EnhancementOperation op = newOp();
-        IComponentEventInvoker invoker = new ComponentEventInvoker();
-        
-        Location l = newLocation();
-        IComponentSpecification spec = newSpec(l);
-        
-        op.claimReadonlyProperty("eventInvoker");
-        
-        expect(op.addInjectedField("_$eventInvoker", IComponentEventInvoker.class, invoker))
-        .andReturn("_$eventInvoker");
-        
-        expect(op.getAccessorMethodName("eventInvoker")).andReturn("getEventInvoker");
-        
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(IComponentEventInvoker.class,
-                "getEventInvoker", null, null), "return _$eventInvoker;", l);
-        
-        replay();
-        
-        InjectEventInvokerWorker worker = new InjectEventInvokerWorker();
-        worker.setComponentEventInvoker(invoker);
-        worker.performEnhancement(op, spec);
-        
-        verify();
-    }
-    
-    public void testFailure()
-    {
-        Location l = newLocation();
-        
-        EnhancementOperation op = newOp();
-        IComponentEventInvoker invoker = new ComponentEventInvoker();
-        
-        ErrorLog log = newMock(ErrorLog.class);
-        
-        Throwable ex = new ApplicationRuntimeException(EnhanceMessages
-                .claimedProperty("eventInvoker"));
-        
-        IComponentSpecification spec = newSpec();
-
-        op.claimReadonlyProperty("eventInvoker");
-        expectLastCall().andThrow(ex);
-
-        expect(op.getBaseClass()).andReturn(BaseComponent.class);
-        
-        expect(spec.getLocation()).andReturn(l);
-
-        log.error(
-                EnhanceMessages.errorAddingProperty("eventInvoker", BaseComponent.class, ex),
-                l,
-                ex);
-
-        replay();
-
-        InjectEventInvokerWorker worker = new InjectEventInvokerWorker();
-        worker.setComponentEventInvoker(invoker);
-        worker.setErrorLog(log);
-        
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-    
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectListenerRegistrationWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectListenerRegistrationWorker.java
deleted file mode 100644
index 84ec331..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectListenerRegistrationWorker.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link TestInjectListenerRegistrationWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectListenerRegistrationWorker extends BaseComponentTestCase
-{
-
-    public void testNonMatch()
-    {
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        IComponentSpecification spec = newSpec();
-
-        expect(op.implementsInterface(Runnable.class)).andReturn(false);
-
-        replay();
-
-        InjectListenerRegistrationWorker w = new InjectListenerRegistrationWorker();
-        w.setListenerInterface(Runnable.class);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testMatch()
-    {
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-        
-        IComponentSpecification spec = newSpec();
-        
-        expect(op.implementsInterface(IComponent.class)).andReturn(true);
-        
-        op.extendMethodImplementation(
-                IComponent.class,
-                EnhanceUtils.FINISH_LOAD_SIGNATURE,
-                "getPage().addThisComponentAsListener(this);");
-        
-        replay();
-        
-        InjectListenerRegistrationWorker w = new InjectListenerRegistrationWorker();
-        w.setListenerInterface(IComponent.class);
-        w.setRegisterMethodName("addThisComponentAsListener");
-        
-        w.performEnhancement(op, spec);
-        
-        verify();
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectMessagesWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectMessagesWorker.java
deleted file mode 100644
index 8e22a06..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectMessagesWorker.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import java.lang.reflect.Modifier;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Messages;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.services.ComponentMessagesSource;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.InjectMessagesWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectMessagesWorker extends BaseEnhancementTestCase
-{
-    private ComponentMessagesSource newSource()
-    {
-        return newMock(ComponentMessagesSource.class);
-    }
-
-    public void testSuccess()
-    {
-        Location l = newLocation();
-        InjectMessagesWorker w = new InjectMessagesWorker();
-
-        IComponentSpecification spec = newSpec(l);
-        ComponentMessagesSource source = newSource();
-        EnhancementOperation op = newOp();
-
-        op.claimReadonlyProperty(w._messagesProperty);
-        expect(op.addInjectedField("_$componentMessagesSource", ComponentMessagesSource.class, source))
-        .andReturn("fred");
-
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("if (_$messages == null)");
-        builder.addln("  _$messages = fred.getMessages(this);");
-        builder.addln("return _$messages;");
-        builder.end();
-
-        op.addField("_$messages", Messages.class);
-        op.addMethod(Modifier.PUBLIC, w._methodSignature, builder.toString(), l);
-
-        replay();
-
-        w.setComponentMessagesSource(source);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testFailure()
-    {
-        Location l = newLocation();
-        InjectMessagesWorker w = new InjectMessagesWorker();
-
-        Throwable ex = new ApplicationRuntimeException(EnhanceMessages
-                .claimedProperty(w._messagesProperty));
-
-        IComponentSpecification spec = newSpec(l);
-        EnhancementOperation op = newOp();
-
-        op.claimReadonlyProperty(w._messagesProperty);
-        expectLastCall().andThrow(ex);
-
-        expect(op.getBaseClass()).andReturn(BaseComponent.class);
-
-        ErrorLog log = newMock(ErrorLog.class);
-
-        log.error(
-                EnhanceMessages.errorAddingProperty(w._messagesProperty, BaseComponent.class, ex),
-                l,
-                ex);
-
-        replay();
-
-        w.setErrorLog(log);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectMetaWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectMetaWorker.java
deleted file mode 100644
index b6cdad0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectMetaWorker.java
+++ /dev/null
@@ -1,260 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.services.ComponentPropertySource;
-import org.apache.tapestry.spec.InjectSpecification;
-import org.apache.tapestry.spec.InjectSpecificationImpl;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Modifier;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.InjectMetaWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectMetaWorker extends BaseComponentTestCase
-{
-    private InjectSpecification newSpec(String propertyName, String object, Location location)
-    {
-        InjectSpecificationImpl result = new InjectSpecificationImpl();
-
-        result.setProperty(propertyName);
-        result.setObject(object);
-        result.setLocation(location);
-
-        return result;
-    }
-
-    private ComponentPropertySource newSource()
-    {
-        return newMock(ComponentPropertySource.class);
-    }
-    
-    public void test_Primitive()
-    {
-        Location l = newLocation();
-        InjectSpecification spec = newSpec("fooBar", "foo.bar", l);
-
-        ComponentPropertySource source = newSource();
-        
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getPropertyType("fooBar")).andReturn(int.class);
-
-        op.claimReadonlyProperty("fooBar");
-
-        MethodSignature sig = new MethodSignature(int.class, "getFooBar", null, null);
-
-        expect(op.addInjectedField(InjectMetaWorker.SOURCE_NAME, ComponentPropertySource.class, source))
-        .andReturn("_source");
-
-        expect(op.getAccessorMethodName("fooBar")).andReturn("getFooBar");
-
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("java.lang.String meta = _source.getComponentProperty(this, \"foo.bar\");");
-        builder.addln("return java.lang.Integer.parseInt(meta);");
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
-
-        replay();
-
-        InjectMetaWorker worker = new InjectMetaWorker();
-
-        worker.setSource(source);
-
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-    
-    public void test_Boolean()
-    {
-        Location l = newLocation();
-        InjectSpecification spec = newSpec("fooBar", "foo.bar", l);
-        
-        ComponentPropertySource source = newSource();
-        
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getPropertyType("fooBar")).andReturn(boolean.class);
-
-        op.claimReadonlyProperty("fooBar");
-
-        MethodSignature sig = new MethodSignature(boolean.class, "getFooBar", null, null);
-
-        expect(op.addInjectedField(InjectMetaWorker.SOURCE_NAME, ComponentPropertySource.class, source)).andReturn("_source");
-        
-        expect(op.getAccessorMethodName("fooBar")).andReturn("getFooBar");
-
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("java.lang.String meta = _source.getComponentProperty(this, \"foo.bar\");");
-        builder.addln("return java.lang.Boolean.valueOf(meta).booleanValue();");
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
-
-        replay();
-
-        InjectMetaWorker worker = new InjectMetaWorker();
-
-        worker.setSource(source);
-
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-    
-    public void test_Character()
-    {
-        Location l = newLocation();
-        InjectSpecification spec = newSpec("fooBar", "foo.bar", l);
-
-        ComponentPropertySource source = newSource();
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getPropertyType("fooBar")).andReturn(char.class);
-
-        op.claimReadonlyProperty("fooBar");
-
-        MethodSignature sig = new MethodSignature(char.class, "getFooBar", null, null);
-
-        expect(op.addInjectedField(InjectMetaWorker.SOURCE_NAME, ComponentPropertySource.class, source))
-        .andReturn("_source");
-
-        expect(op.getAccessorMethodName("fooBar")).andReturn("getFooBar");
-
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("java.lang.String meta = _source.getComponentProperty(this, \"foo.bar\");");
-        builder.addln("return meta.charAt(0);");
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
-
-        replay();
-
-        InjectMetaWorker worker = new InjectMetaWorker();
-
-        worker.setSource(source);
-
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-    
-    public void test_Object()
-    {
-        Location l = newLocation();
-        InjectSpecification spec = newSpec("fooBar", "foo.bar", l);
-
-        ComponentPropertySource source = newSource();
-        ValueConverter converter = newMock(ValueConverter.class);
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getPropertyType("fooBar")).andReturn(Object.class);
-
-        op.claimReadonlyProperty("fooBar");
-
-        MethodSignature sig = new MethodSignature(Object.class, "getFooBar", null, null);
-
-        expect(op.addInjectedField(InjectMetaWorker.SOURCE_NAME, ComponentPropertySource.class, source))
-        .andReturn("_source");
-
-        expect(op.getAccessorMethodName("fooBar")).andReturn("getFooBar");
-
-        expect(op.addInjectedField("_$valueConverter", ValueConverter.class, converter))
-        .andReturn("vc");
-
-        expect(op.getClassReference(Object.class)).andReturn("_$Object");
-
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("java.lang.String meta = _source.getComponentProperty(this, \"foo.bar\");");
-        builder.addln("return (java.lang.Object) vc.coerceValue(meta, _$Object);");
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
-
-        replay();
-
-        InjectMetaWorker worker = new InjectMetaWorker();
-
-        worker.setSource(source);
-        worker.setValueConverter(converter);
-
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-    
-    public void test_Unimplemented_Property()
-    {
-        Location l = newLocation();
-        InjectSpecification spec = newSpec("fooBar", "foo.bar", l);
-        
-        ComponentPropertySource source = newSource();
-        ValueConverter converter = newMock(ValueConverter.class);
-        
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getPropertyType("fooBar")).andReturn(null);
-        
-        op.claimReadonlyProperty("fooBar");
-
-        MethodSignature sig = new MethodSignature(Object.class, "getFooBar", null, null);
-        
-        expect(op.addInjectedField(InjectMetaWorker.SOURCE_NAME, ComponentPropertySource.class, source)).andReturn("_source");
-        
-        expect(op.getAccessorMethodName("fooBar")).andReturn("getFooBar");
-        
-        expect(op.addInjectedField("_$valueConverter", ValueConverter.class, converter)).andReturn("vc");
-        
-        expect(op.getClassReference(Object.class)).andReturn("_$Object");
-        
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("java.lang.String meta = _source.getComponentProperty(this, \"foo.bar\");");
-        builder.addln("return (java.lang.Object) vc.coerceValue(meta, _$Object);");
-        builder.end();
-        
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
-
-        replay();
-
-        InjectMetaWorker worker = new InjectMetaWorker();
-        worker.setSource(source);
-        worker.setValueConverter(converter);
-
-        worker.performEnhancement(op, spec);
-
-        verify();
-    }
-    
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectObjectWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectObjectWorker.java
deleted file mode 100644
index f2facf4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectObjectWorker.java
+++ /dev/null
@@ -1,233 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.HomeService;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.services.InjectedValueProvider;
-import org.apache.tapestry.spec.InjectSpecification;
-import org.apache.tapestry.spec.InjectSpecificationImpl;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.InjectObjectWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectObjectWorker extends BaseComponentTestCase
-{
-    private InjectSpecification newSpec(String name, String locator, Location location)
-    {
-        InjectSpecification is = new InjectSpecificationImpl();
-
-        is.setProperty(name);
-        is.setObject(locator);
-        is.setLocation(location);
-
-        return is;
-    }
-
-    public void testNoExistingProperty()
-    {
-        Location l = newLocation();
-        Object injectedValue = new Object();
-
-        InjectSpecification spec = newSpec("fred", "service:barney", l);
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        InjectedValueProvider p = newMock(InjectedValueProvider.class);
-
-        expect(op.getPropertyType("fred")).andReturn(null);
-
-        op.claimReadonlyProperty("fred");
-
-        expect(p.obtainValue("service:barney", l)).andReturn(injectedValue);
-
-        // When the same bean is injected multiple times, the field name
-        // returned won't match the field name suggested; make sure the code
-        // generation used the correct field name.
-
-        expect(op.addInjectedField("_$fred", Object.class, injectedValue)).andReturn("_$gnarly");
-
-        op.addMethod(
-                Modifier.PUBLIC,
-                new MethodSignature(Object.class, "getFred", null, null),
-                "return _$gnarly;",
-                l);
-
-        replay();
-
-        InjectObjectWorker w = new InjectObjectWorker();
-        w.setProvider(p);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testWithExistingProperty()
-    {
-        Location l = newLocation();
-        Object injectedValue = new HomeService();
-
-        InjectSpecification spec = newSpec("wilma", "service:betty", l);
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        InjectedValueProvider p = newMock(InjectedValueProvider.class);
-
-        expect(op.getPropertyType("wilma")).andReturn(IEngineService.class);
-
-        op.claimReadonlyProperty("wilma");
-
-        expect(p.obtainValue("service:betty", l)).andReturn(injectedValue);
-
-        expect(op.addInjectedField("_$wilma", IEngineService.class, injectedValue)).andReturn("_$wilma");
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(IEngineService.class, "getWilma", null,
-                null), "return _$wilma;", l);
-
-        replay();
-
-        InjectObjectWorker w = new InjectObjectWorker();
-        w.setProvider(p);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    /**
-     * Test what happens when the value to be injected is null (usually indicating an error in the
-     * locator and/or a configuration error inside the HiveMind descriptors).
-     */
-
-    public void testInjectNull()
-    {
-        Location l = newLocation();
-
-        InjectSpecification spec = newSpec("fred", "service:barney", l);
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        InjectedValueProvider p = newMock(InjectedValueProvider.class);
-
-        expect(op.getPropertyType("fred")).andReturn(null);
-
-        op.claimReadonlyProperty("fred");
-
-        expect(p.obtainValue("service:barney", l)).andReturn(null);
-
-        replay();
-
-        InjectObjectWorker w = new InjectObjectWorker();
-        w.setProvider(p);
-
-        try
-        {
-            w.performEnhancement(op, spec);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Value obtained using locator 'service:barney' is null.", ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    public void testInjectedValueWrongType()
-    {
-        Location l = newLocation();
-
-        InjectSpecification spec = newSpec("fred", "service:barney", l);
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        InjectedValueProvider p = newMock(InjectedValueProvider.class);
-
-        expect(op.getPropertyType("fred")).andReturn(IEngineService.class);
-
-        op.claimReadonlyProperty("fred");
-
-        expect(p.obtainValue("service:barney", l)).andReturn("INJECTED-VALUE");
-
-        replay();
-
-        InjectObjectWorker w = new InjectObjectWorker();
-        w.setProvider(p);
-
-        try
-        {
-            w.performEnhancement(op, spec);
-            unreachable();
-
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "The value obtained using locator 'service:barney' (INJECTED-VALUE) is not compatible with the existing property (of type org.apache.tapestry.engine.IEngineService).",
-                    ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-    
-    public void testInjectMap()
-    {
-        Location l = newLocation();
-        Map injectedValue = new HashMap();
-        
-        InjectSpecification spec = newSpec("fred", "service:barney", l);
-        
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-        
-        InjectedValueProvider p = newMock(InjectedValueProvider.class);
-        
-        expect(op.getPropertyType("fred")).andReturn(Map.class);
-        
-        op.claimReadonlyProperty("fred");
-        
-        expect(p.obtainValue("service:barney", l)).andReturn(new HashMap());
-        
-        expect(op.addInjectedField("_$fred", Map.class, injectedValue)).andReturn("_$fred");
-        
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(Map.class, "getFred", null,
-                null), "return _$fred;", l);
-        
-        replay();
-        
-        InjectObjectWorker w = new InjectObjectWorker();
-        w.setProvider(p);
-        
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectPageWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectPageWorker.java
deleted file mode 100644
index 4b349c5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectPageWorker.java
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.spec.InjectSpecification;
-import org.apache.tapestry.spec.InjectSpecificationImpl;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Modifier;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.InjectPageWorker}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestInjectPageWorker extends BaseComponentTestCase
-{
-    public void testPrimitivePropertyType()
-    {
-        Location l = newLocation();
-        
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getPropertyType("somePage")).andReturn(int.class);
-
-        replay();
-
-        InjectSpecification is = newSpec(l);
-
-        try
-        {
-            new InjectPageWorker().performEnhancement(op, is);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Property somePage is type int, which is not compatible with injection. The property type should be Object, IPage, or a specific page class.",
-                    ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    private InjectSpecification newSpec(Location l)
-    {
-        InjectSpecification is = new InjectSpecificationImpl();
-        is.setProperty("somePage");
-        is.setObject("SomePage");
-        is.setLocation(l);
-
-        return is;
-    }
-
-    /**
-     * Test for when there's no existing property.
-     */
-
-    public void testNoPropertyType()
-    {
-        Location l = newLocation();
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getPropertyType("somePage")).andReturn(null);
-
-        op.claimReadonlyProperty("somePage");
-
-        expect(op.getAccessorMethodName("somePage")).andReturn("getSomePage");
-
-        MethodSignature sig = new MethodSignature(Object.class, "getSomePage", null, null);
-
-        op.addMethod(
-                Modifier.PUBLIC,
-                sig,
-                "return getPage().getRequestCycle().getPage(\"SomePage\");",
-                l);
-
-        replay();
-
-        InjectSpecification is = newSpec(l);
-
-        new InjectPageWorker().performEnhancement(op, is);
-
-        verify();
-    }
-
-    public void testExistingPropertyType()
-    {
-        Location l = newLocation();
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getPropertyType("somePage")).andReturn(BasePage.class);
-
-        op.claimReadonlyProperty("somePage");
-
-        expect(op.getAccessorMethodName("somePage")).andReturn("getSomePage");
-
-        MethodSignature sig = new MethodSignature(BasePage.class, "getSomePage", null, null);
-
-        // BasePage is too specific (the getPage() method returns IPage),
-        // so we see a cast.
-
-        op
-                .addMethod(
-                        Modifier.PUBLIC,
-                        sig,
-                        "return (org.apache.tapestry.html.BasePage)getPage().getRequestCycle().getPage(\"SomePage\");",
-                        l);
-
-        replay();
-
-        InjectSpecification is = newSpec(l);
-
-        new InjectPageWorker().performEnhancement(op, is);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectScriptWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectScriptWorker.java
deleted file mode 100644
index 04705cb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectScriptWorker.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.spec.InjectSpecificationImpl;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Modifier;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.InjectScriptWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectScriptWorker extends BaseComponentTestCase
-{
-    public void test_Simple_Inject()
-      throws Exception
-    {
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        final Location injectSpecLocation = newLocation();
-        final IScriptSource source = newMock(IScriptSource.class);
-        Resource scriptResource = newResource();
-        
-        op.claimReadonlyProperty("foo");
-
-        expect(op.getPropertyType("foo")).andReturn(IScript.class);
-        expect(op.getAccessorMethodName("foo")).andReturn("getFoo");
-        expect(injectSpecLocation.getResource()).andReturn(scriptResource);
-        
-        expect(scriptResource.getRelativeResource("bar.script")).andReturn(scriptResource);
-        expect(scriptResource.getResourceURL()).andReturn(getResource("autowire-single.xml").getResourceURL());
-        expect(op.addInjectedField(eq("_$script"), eq(DeferredScript.class), anyObject()))
-        .andReturn("_script");
-        
-        MethodSignature sig = new MethodSignature(IScript.class, "getFoo", null, null);
-
-        op.addMethod(Modifier.PUBLIC, sig, "return _script.getScript();", injectSpecLocation);
-
-        replay();
-
-        InjectSpecificationImpl is = new InjectSpecificationImpl();
-        is.setProperty("foo");
-        is.setObject("bar.script");
-        is.setLocation(injectSpecLocation);
-
-        InjectScriptWorker worker = new InjectScriptWorker();
-        worker.setSource(source);
-
-        worker.performEnhancement(op, is);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectSpecificationWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectSpecificationWorker.java
deleted file mode 100644
index de6315f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectSpecificationWorker.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import java.lang.reflect.Modifier;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.InjectSpecificationWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectSpecificationWorker extends BaseEnhancementTestCase
-{
-
-    public void testSuccess() throws Exception
-    {
-        Location l = newLocation();
-        
-        EnhancementOperation op = newOp();
-
-        IComponentSpecification spec = newSpec(l);
-
-        op.claimReadonlyProperty("specification");
-
-        expect(op.addInjectedField("_$specification", IComponentSpecification.class, spec))
-        .andReturn("_$specification");
-
-        expect(op.getAccessorMethodName("specification")).andReturn("getSpecification");
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(IComponentSpecification.class,
-                "getSpecification", null, null), "return _$specification;", l);
-
-        replay();
-
-        new InjectSpecificationWorker().performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testFailure()
-    {
-        Location l = newLocation();
-        EnhancementOperation op = newOp();
-
-        ErrorLog log = newMock(ErrorLog.class);
-
-        Throwable ex = new ApplicationRuntimeException(EnhanceMessages
-                .claimedProperty("specification"));
-        
-        IComponentSpecification spec = newSpec();
-
-        op.claimReadonlyProperty("specification");
-        expectLastCall().andThrow(ex);
-
-        expect(op.getBaseClass()).andReturn(BaseComponent.class);
-
-        expect(spec.getLocation()).andReturn(l);
-
-        log.error(
-                EnhanceMessages.errorAddingProperty("specification", BaseComponent.class, ex),
-                l,
-                ex);
-
-        replay();
-
-        InjectSpecificationWorker w = new InjectSpecificationWorker();
-        w.setErrorLog(log);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectStateWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectStateWorker.java
deleted file mode 100644
index 071c6a1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestInjectStateWorker.java
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.state.ApplicationStateManager;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.spec.InjectSpecification;
-import org.apache.tapestry.spec.InjectSpecificationImpl;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Modifier;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.InjectStateWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInjectStateWorker extends BaseComponentTestCase
-{
-    private ApplicationStateManager newASM()
-    {
-        return newMock(ApplicationStateManager.class);
-    }
-
-    private InjectSpecification newSpec(String propertyName, String objectName, Location l)
-    {
-        InjectSpecification spec = new InjectSpecificationImpl();
-
-        spec.setProperty(propertyName);
-        spec.setObject(objectName);
-        spec.setLocation(l);
-
-        return spec;
-    }
-
-    public void testSuccess()
-    {
-        Location l = newLocation();
-        InjectSpecification spec = newSpec("fred", "barney", l);
-        
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        ApplicationStateManager asm = newASM();
-
-        expect(op.getPropertyType("fred")).andReturn(Map.class);
-
-        op.claimProperty("fred");
-        op.addField("_$fred", Map.class);
-
-        expect(op.addInjectedField("_$applicationStateManager", ApplicationStateManager.class, asm))
-        .andReturn("_$applicationStateManager");
-
-        expect(op.getAccessorMethodName("fred")).andReturn("getFred");
-
-        BodyBuilder builder = new BodyBuilder();
-
-        // Accessor
-
-        builder.begin();
-        builder.addln("if (_$fred == null)");
-        builder.addln("  _$fred = (java.util.Map) _$applicationStateManager.get(\"barney\");");
-        builder.addln("return _$fred;");
-        builder.end();
-
-        MethodSignature sig = new MethodSignature(Map.class, "getFred", null, null);
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
-
-        builder.clear();
-        builder.begin();
-        builder.addln("_$applicationStateManager.store(\"barney\", $1);");
-        builder.addln("_$fred = $1;");
-        builder.end();
-
-        sig = new MethodSignature(void.class, "setFred", new Class[]
-        { Map.class }, null);
-
-        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
-        op.extendMethodImplementation(
-                PageDetachListener.class,
-                EnhanceUtils.PAGE_DETACHED_SIGNATURE,
-                "_$fred = null;");
-
-        replay();
-
-        InjectStateWorker w = new InjectStateWorker();
-        w.setApplicationStateManager(asm);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestParameterPropertyWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestParameterPropertyWorker.java
deleted file mode 100644
index 43a17dc..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestParameterPropertyWorker.java
+++ /dev/null
@@ -1,432 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-import org.apache.tapestry.spec.ParameterSpecification;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Modifier;
-import java.util.Collections;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.ParameterPropertyWorker}.
- *
- * @author Howard M. Lewis Ship
- */
-@Test
-public class TestParameterPropertyWorker extends BaseComponentTestCase
-{
-
-    private ParameterSpecification buildParameterSpec(String parameterName, String type,
-                                                      Location location)
-    {
-        return buildParameterSpec(parameterName, parameterName, type, location);
-    }
-
-    private ParameterSpecification buildParameterSpec(String parameterName, String propertyName,
-                                                      String type, Location location)
-    {
-        ParameterSpecification ps = new ParameterSpecification();
-
-        ps.setParameterName(parameterName);
-        ps.setPropertyName(propertyName);
-        ps.setType(type);
-        ps.setLocation(location);
-
-        return ps;
-    }
-
-    private IComponentSpecification buildComponentSpecification(String parameterName,
-                                                                IParameterSpecification ps)
-    {
-        IComponentSpecification result = newSpec();
-
-        expect(result.getParameterNames()).andReturn(Collections.singletonList(parameterName));
-
-        expect(result.getParameter(parameterName)).andReturn(ps);
-
-        return result;
-    }
-
-    public void test_Failure() throws Exception
-    {
-        Location l = newLocation();
-
-        IComponentSpecification spec = buildComponentSpecification("wilma", buildParameterSpec(
-          "wilma",
-          "String",
-          l));
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        Throwable ex = new ApplicationRuntimeException("Simulated error.");
-        expect(op.convertTypeName("String")).andThrow(ex);
-
-        expect(op.getBaseClass()).andReturn(BaseComponent.class);
-
-        ErrorLog log = newMock(ErrorLog.class);
-
-        log
-          .error(
-            "Error adding property wilma to class org.apache.tapestry.BaseComponent: Simulated error.",
-            l,
-            ex);
-
-        replay();
-
-        ParameterPropertyWorker w = new ParameterPropertyWorker();
-        w.setErrorLog(log);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void test_Skip_Parameter_Alias()
-    {
-        IComponentSpecification spec = buildComponentSpecification("barney", buildParameterSpec(
-          "fred",
-          null,
-          null));
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        replay();
-
-        ParameterPropertyWorker w = new ParameterPropertyWorker();
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    /**
-     * Tests for ordinary, object type of binding (as opposed to primitive types, which have a
-     * slightly different control flow.
-     */
-
-    public void test_Standard()
-    {
-        IComponentSpecification spec =
-          buildComponentSpecification("fred", buildParameterSpec("fred", null, null));
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getPropertyType("fred")).andReturn(String.class);
-        op.claimProperty("fred");
-
-        String bindingFieldName = "_$fred$Binding";
-        String bindingChecked = bindingFieldName + "Checked";
-
-        op.addField("_$fred", String.class);
-        op.addField("_$fred$Default", String.class);
-        op.addField("_$fred$Cached", boolean.class);
-        op.addField(bindingFieldName, IBinding.class);
-        op.addField(bindingChecked, Boolean.TYPE);
-
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("if (!{0})", bindingChecked);
-        builder.begin();
-        builder.addln("{0} = getBinding(\"{1}\");", bindingFieldName, "fred");
-        builder.addln("{0} = true;", bindingChecked);
-        builder.end();
-        builder.addln("return {0};", bindingFieldName);
-        builder.end();
-
-        String methodName = EnhanceUtils.createAccessorMethodName(bindingFieldName);
-        op.addMethod(Modifier.PUBLIC,
-                     new MethodSignature(IBinding.class, methodName, new Class[0], null),
-                     builder.toString(), null);
-
-        expect(op.getClassReference(String.class)).andReturn("_class$String");
-
-        builder.clear();
-        builder.begin();
-        builder.addln("if (_$fred$Cached) return _$fred;");
-        builder.addln("if (get_$fred$Binding() == null) return _$fred$Default;");
-        builder.add("java.lang.String result = ");
-        builder.addln("(java.lang.String) get_$fred$Binding().getObject(_class$String);");
-        builder.addln("if (isRendering() || get_$fred$Binding().isInvariant())");
-        builder.begin();
-        builder.addln("_$fred = result;");
-        builder.addln("_$fred$Cached = true;");
-        builder.end();
-        builder.addln("return result;");
-        builder.end();
-
-        expect(op.getAccessorMethodName("fred")).andReturn("getFred");
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(String.class, "getFred", null, null),
-                     builder.toString(),
-                     null);
-
-        builder.clear();
-
-        builder.begin();
-        builder.addln("if (! isInActiveState())");
-        builder.begin();
-        builder.addln("_$fred$Default = $1;");
-        builder.addln("return;");
-        builder.end();
-
-        builder.addln("if (get_$fred$Binding() == null)");
-        builder.addln("  throw new org.apache.hivemind.ApplicationRuntimeException(\"Parameter 'fred' is not bound and can not be updated.\");");
-
-        builder.addln("get_$fred$Binding().setObject(($w) $1);");
-
-        builder.addln("if (isRendering())");
-        builder.begin();
-        builder.addln("_$fred = $1;");
-        builder.addln("_$fred$Cached = true;");
-        builder.end();
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setFred", new Class[]
-          { String.class }, null), builder.toString(), null);
-
-        BodyBuilder expectedCleanup = new BodyBuilder();
-
-        expectedCleanup.addln("if (_$fred$Cached && ! get_$fred$Binding().isInvariant())");
-        expectedCleanup.begin();
-        expectedCleanup.addln("_$fred$Cached = false;");
-        expectedCleanup.addln("_$fred = _$fred$Default;");
-        expectedCleanup.end();
-
-        op.extendMethodImplementation(
-          IComponent.class,
-          EnhanceUtils.CLEANUP_AFTER_RENDER_SIGNATURE,
-          expectedCleanup.toString());
-
-        replay();
-
-        ParameterPropertyWorker w = new ParameterPropertyWorker();
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    /**
-     * Test where the parameter name does not equal the property name. The parameter is "barney",
-     * but the binding is "fred".
-     */
-
-    public void test_Different_Property_Name()
-    {
-        Location l = newLocation();
-        IComponentSpecification spec = buildComponentSpecification("myparam", buildParameterSpec("myparam", "fred", null, l));
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.getPropertyType("fred")).andReturn(String.class);
-
-        op.claimProperty("fred");
-
-        String bindingFieldName = "_$fred$Binding";
-        String bindingChecked = bindingFieldName + "Checked";
-
-        op.addField("_$fred", String.class);
-        op.addField("_$fred$Default", String.class);
-        op.addField("_$fred$Cached", boolean.class);
-        op.addField(bindingFieldName, IBinding.class);
-        op.addField(bindingChecked, Boolean.TYPE);
-
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("if (!{0})", bindingChecked);
-        builder.begin();
-        builder.addln("{0} = getBinding(\"{1}\");", bindingFieldName, "myparam");
-        builder.addln("{0} = true;", bindingChecked);
-        builder.end();
-        builder.addln("return {0};", bindingFieldName);
-        builder.end();
-
-        String methodName = EnhanceUtils.createAccessorMethodName(bindingFieldName);
-        op.addMethod(Modifier.PUBLIC,
-                     new MethodSignature(IBinding.class, methodName, new Class[0], null),
-                     builder.toString(), l);
-        
-        expect(op.getClassReference(String.class)).andReturn("_class$String");
-
-        builder.clear();
-        builder.begin();
-        builder.addln("if (_$fred$Cached) return _$fred;");
-        builder.addln("if (get_$fred$Binding() == null) return _$fred$Default;");
-        builder.add("java.lang.String result = ");
-        builder.addln("(java.lang.String) get_$fred$Binding().getObject(_class$String);");
-        builder.addln("if (isRendering() || get_$fred$Binding().isInvariant())");
-        builder.begin();
-        builder.addln("_$fred = result;");
-        builder.addln("_$fred$Cached = true;");
-        builder.end();
-        builder.addln("return result;");
-        builder.end();
-
-        expect(op.getAccessorMethodName("fred")).andReturn("getFred");
-
-        op.addMethod(
-          Modifier.PUBLIC,
-          new MethodSignature(String.class, "getFred", null, null),
-          builder.toString(),
-          l);
-
-        builder.clear();
-
-        builder.begin();
-        builder.addln("if (! isInActiveState())");
-        builder.begin();
-        builder.addln("_$fred$Default = $1;");
-        builder.addln("return;");
-        builder.end();
-
-        builder.addln("if (get_$fred$Binding() == null)");
-        builder
-          .addln("  throw new org.apache.hivemind.ApplicationRuntimeException(\"Parameter 'myparam' is not bound and can not be updated.\");");
-
-        builder.addln("get_$fred$Binding().setObject(($w) $1);");
-
-        builder.addln("if (isRendering())");
-        builder.begin();
-        builder.addln("_$fred = $1;");
-        builder.addln("_$fred$Cached = true;");
-        builder.end();
-        builder.end();
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setFred", new Class[]
-          { String.class }, null), builder.toString(), l);
-
-        BodyBuilder expectedCleanup = new BodyBuilder();
-
-        expectedCleanup.addln("if (_$fred$Cached && ! get_$fred$Binding().isInvariant())");
-        expectedCleanup.begin();
-        expectedCleanup.addln("_$fred$Cached = false;");
-        expectedCleanup.addln("_$fred = _$fred$Default;");
-        expectedCleanup.end();
-
-        op.extendMethodImplementation(
-          IComponent.class,
-          EnhanceUtils.CLEANUP_AFTER_RENDER_SIGNATURE,
-          expectedCleanup.toString());
-
-        replay();
-
-        ParameterPropertyWorker w = new ParameterPropertyWorker();
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void test_Primitive_Type()
-    {
-        Location l = newLocation();
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("if (_$fred$Cached) return _$fred;");
-        builder.addln("if (get_$fred$Binding() == null) return _$fred$Default;");
-        builder.add("boolean result = ");
-        builder.addln(EnhanceUtils.class.getName() + ".toBoolean(get_$fred$Binding());");
-        builder.addln("if (isRendering() || get_$fred$Binding().isInvariant())");
-        builder.begin();
-        builder.addln("_$fred = result;");
-        builder.addln("_$fred$Cached = true;");
-        builder.end();
-        builder.addln("return result;");
-        builder.end();
-
-        expect(op.getAccessorMethodName("fred")).andReturn("isFred");
-
-        op.addMethod(
-          Modifier.PUBLIC,
-          new MethodSignature(boolean.class, "isFred", null, null),
-          builder.toString(),
-          l);
-
-        replay();
-
-        new ParameterPropertyWorker().buildAccessor(
-          op,
-          "fred",
-          boolean.class,
-          "_$fred",
-          "_$fred$Default",
-          "_$fred$Cached",
-          "get_$fred$Binding()",
-          true,
-          l);
-
-        verify();
-    }
-
-    public void test_Parameter_Cache_Disabled()
-    {
-        Location l = newLocation();
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        BodyBuilder builder = new BodyBuilder();
-        builder.begin();
-        builder.addln("if (_$fred$Cached) return _$fred;");
-        builder.addln("if (get_$fred$Binding() == null) return _$fred$Default;");
-        builder.add("boolean result = ");
-        builder.addln(EnhanceUtils.class.getName() + ".toBoolean(get_$fred$Binding());");
-        builder.addln("if (get_$fred$Binding().isInvariant())");
-        builder.begin();
-        builder.addln("_$fred = result;");
-        builder.addln("_$fred$Cached = true;");
-        builder.end();
-        builder.addln("return result;");
-        builder.end();
-
-        expect(op.getAccessorMethodName("fred")).andReturn("isFred");
-
-        op.addMethod(
-          Modifier.PUBLIC,
-          new MethodSignature(boolean.class, "isFred", null, null),
-          builder.toString(),
-          l);
-
-        replay();
-
-        new ParameterPropertyWorker().buildAccessor(
-          op,
-          "fred",
-          boolean.class,
-          "_$fred",
-          "_$fred$Default",
-          "_$fred$Cached",
-          "get_$fred$Binding()",
-          false,
-          l);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestSpecifiedPropertyWorker.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestSpecifiedPropertyWorker.java
deleted file mode 100644
index 4244626..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/TestSpecifiedPropertyWorker.java
+++ /dev/null
@@ -1,329 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.service.BodyBuilder;
-import org.apache.hivemind.service.MethodSignature;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.BindingSource;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IPropertySpecification;
-import org.apache.tapestry.spec.PropertySpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.enhance.SpecifiedPropertyWorker}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestSpecifiedPropertyWorker extends BaseComponentTestCase
-{
-    private List buildPropertySpecs(String name, String type, boolean persistent)
-    {
-        return buildPropertySpecs(name, type, persistent, null, null);
-    }
-
-    private List buildPropertySpecs(String name, String type, boolean persistent,
-            Location location, String initialValue)
-    {
-        PropertySpecification ps = new PropertySpecification();
-        ps.setName(name);
-        ps.setType(type);
-        ps.setPersistence(persistent ? "session" : null);
-        ps.setInitialValue(initialValue);
-        ps.setLocation(location);
-
-        return Collections.singletonList(ps);
-    }
-
-    private IComponentSpecification buildComponentSpecification(List propertySpecs)
-    {
-        List names = new ArrayList();
-        Iterator i = propertySpecs.iterator();
-        while (i.hasNext())
-        {
-            IPropertySpecification ps = (IPropertySpecification) i.next();
-
-            names.add(ps.getName());
-        }
-        
-        IComponentSpecification result = newSpec();
-
-        expect(result.getPropertySpecificationNames()).andReturn(names);
-
-        i = propertySpecs.iterator();
-        while (i.hasNext())
-        {
-            IPropertySpecification ps = (IPropertySpecification) i.next();
-
-            expect(result.getPropertySpecification(ps.getName())).andReturn(ps);
-        }
-
-        return result;
-    }
-
-    private IComponentSpecification buildComponentSpecification(String name, String type,
-            boolean persistent)
-    {
-        return buildComponentSpecification(buildPropertySpecs(name, type, persistent));
-    }
-
-    public enum TestEnum {
-        First,
-        Second
-    }
-    
-    public void test_Can_Proxy_Enum() 
-    {
-        Object obj = TestEnum.First;
-        
-        assert !EnhanceUtils.canProxyPropertyType(obj.getClass());
-        assert EnhanceUtils.canProxyPropertyType(List.class);
-    }
-    
-    public void testAddNormal() throws Exception
-    {
-        Location l = newLocation();
-
-        IComponentSpecification spec = buildComponentSpecification(buildPropertySpecs(
-                "fred",
-                "boolean",
-                false,
-                l,
-                null));
-
-        // Training
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.convertTypeName("boolean")).andReturn(boolean.class);
-
-        op.validateProperty("fred", boolean.class);
-        op.claimProperty("fred");
-        op.addField("_$fred", boolean.class);
-
-        expect(op.getAccessorMethodName("fred")).andReturn("isFred");
-
-        op.addMethod(
-                Modifier.PUBLIC,
-                new MethodSignature(boolean.class, "isFred", null, null),
-                "return _$fred;",
-                l);
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setFred", new Class[]
-        { boolean.class }, null), "{\n  _$fred = $1;\n}\n", l);
-
-        op.addField("_$fred$default", boolean.class);
-
-        op.extendMethodImplementation(
-                IComponent.class,
-                EnhanceUtils.FINISH_LOAD_SIGNATURE,
-                "_$fred$default = _$fred;");
-
-        op.extendMethodImplementation(
-                PageDetachListener.class,
-                EnhanceUtils.PAGE_DETACHED_SIGNATURE,
-                "_$fred = _$fred$default;");
-
-        replay();
-
-        SpecifiedPropertyWorker w = new SpecifiedPropertyWorker();
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testAddWithInitialValue() throws Exception
-    {
-        BindingSource bs = newMock(BindingSource.class);
-        Location l = fabricateLocation(12);
-
-        IComponentSpecification spec = buildComponentSpecification(buildPropertySpecs(
-                "fred",
-                "java.util.List",
-                false,
-                l,
-                "ognl:foo()"));
-
-        InitialValueBindingCreator expectedCreator = new InitialValueBindingCreator(bs,
-                EnhanceMessages.initialValueForProperty("fred"), "ognl:foo()", l);
-
-        // Training
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.convertTypeName("java.util.List")).andReturn(List.class);
-
-        op.validateProperty("fred", List.class);
-        op.claimProperty("fred");
-        op.addField("_$fred", List.class);
-
-        expect(op.getAccessorMethodName("fred")).andReturn("getFred");
-
-        op.addMethod(
-                Modifier.PUBLIC,
-                new MethodSignature(List.class, "getFred", null, null),
-                "return _$fred;",
-                l);
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setFred", new Class[]
-        { List.class }, null), "{\n  _$fred = $1;\n}\n", l);
-
-        expect(op.addInjectedField(
-                "_$fred$initialValueBindingCreator",
-                InitialValueBindingCreator.class,
-                expectedCreator)).andReturn("_$fred$initialValueBindingCreator");
-        
-        op.addField("_$fred$initialValueBinding", IBinding.class);
-        op
-                .extendMethodImplementation(
-                        IComponent.class,
-                        EnhanceUtils.FINISH_LOAD_SIGNATURE,
-                        "_$fred$initialValueBinding = _$fred$initialValueBindingCreator.createBinding(this);\n");
-
-        expect(op.getClassReference(List.class)).andReturn("_$class$java$util$List");
-
-        String code = "_$fred = (java.util.List) _$fred$initialValueBinding.getObject(_$class$java$util$List);\n";
-
-        op.extendMethodImplementation(IComponent.class, EnhanceUtils.FINISH_LOAD_SIGNATURE, code);
-        op.extendMethodImplementation(
-                PageDetachListener.class,
-                EnhanceUtils.PAGE_DETACHED_SIGNATURE,
-                code);
-
-        replay();
-
-        SpecifiedPropertyWorker w = new SpecifiedPropertyWorker();
-        w.setBindingSource(bs);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void test_Add_Persistent() throws Exception
-    {
-        IComponentSpecification spec = buildComponentSpecification(
-                "barney",
-                "java.lang.String",
-                true);
-
-        // Training
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        expect(op.convertTypeName("java.lang.String")).andReturn(String.class);
-
-        op.validateProperty("barney", String.class);
-        op.claimProperty("barney");
-        op.addField("_$barney", String.class);
-
-        expect(op.getAccessorMethodName("barney")).andReturn("getBarney");
-
-        op.addMethod(
-                Modifier.PUBLIC,
-                new MethodSignature(String.class, "getBarney", null, null),
-                "return _$barney;",
-                null);
-
-        BodyBuilder b = new BodyBuilder();
-        b.begin();
-        /*
-        b.addln("if ($1 != null && org.apache.tapestry.record.ObservedProperty.class.isAssignableFrom($1.getClass())) {");
-        b.add(" $1 = (" + ClassFabUtils.getJavaClassName(String.class) + ")((org.apache.tapestry.record.ObservedProperty)$1)");
-        b.addln(".getCGProperty();");
-        b.addln("}");
-        */
-        b.addln("org.apache.tapestry.Tapestry#fireObservedChange(this, \"barney\", ($w) $1);");
-        b.addln("_$barney = $1;");
-        b.end();
-
-        op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setBarney", new Class[]
-        { String.class }, null), b.toString(), null);
-
-        op.addField("_$barney$default", String.class);
-
-        op.extendMethodImplementation(
-                IComponent.class,
-                EnhanceUtils.FINISH_LOAD_SIGNATURE,
-                "_$barney$default = _$barney;");
-
-        op.extendMethodImplementation(
-                PageDetachListener.class,
-                EnhanceUtils.PAGE_DETACHED_SIGNATURE,
-                "_$barney = _$barney$default;");
-
-        replay();
-
-        SpecifiedPropertyWorker w = new SpecifiedPropertyWorker();
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-    public void testFailure() throws Exception
-    {
-        Location l = fabricateLocation(207);
-        // Should be "java.lang.Long"
-        List propertySpecs = buildPropertySpecs("wilma", "Long", false, l, null);
-        IComponentSpecification spec = buildComponentSpecification(propertySpecs);
-
-        EnhancementOperation op = newMock(EnhancementOperation.class);
-
-        op.convertTypeName("Long");
-        Throwable ex = new ApplicationRuntimeException("Simulated error.");
-        expectLastCall().andThrow(ex);
-        
-
-        expect(op.getBaseClass()).andReturn(BaseComponent.class);
-
-        ErrorLog log = newMock(ErrorLog.class);
-
-        log
-                .error(
-                        "Error adding property wilma to class org.apache.tapestry.BaseComponent: Simulated error.",
-                        l,
-                        ex);
-
-        replay();
-
-        SpecifiedPropertyWorker w = new SpecifiedPropertyWorker();
-        w.setErrorLog(log);
-
-        w.performEnhancement(op, spec);
-
-        verify();
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/User.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/User.java
deleted file mode 100644
index e9247a1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/User.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.apache.tapestry.enhance;
-
-/**
- * Simple test class for expression compiling.
- */
-public class User {
-
-    public String getName()
-    {
-        return "A monsterous mistake!";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/autowire-multiple.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/autowire-multiple.xml
deleted file mode 100755
index 8368523..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/autowire-multiple.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2006 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-<module id="autowire.multiple" version="1.0.0">
-

-  <service-point id="Hello1" interface="org.apache.tapestry.enhance.HelloService">

-    <invoke-factory>

-      <construct class="org.apache.tapestry.enhance.HelloServiceImpl" />

-    </invoke-factory>

-  </service-point>

-

-  <service-point id="Hello2" interface="org.apache.tapestry.enhance.HelloService">

-    <invoke-factory>

-      <construct class="org.apache.tapestry.enhance.HelloServiceImpl" />

-    </invoke-factory>

-  </service-point>

-

-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/autowire-single.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/autowire-single.xml
deleted file mode 100755
index 22bcf3e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/enhance/autowire-single.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2006 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<module id="autowire.single" version="1.0.0">

-

-    <service-point id="Hello" interface="org.apache.tapestry.enhance.HelloService">

-        <invoke-factory>

-            <construct class="org.apache.tapestry.enhance.HelloServiceImpl" />

-        </invoke-factory>

-    </service-point>

-

-    <service-point id="SimpleGeneric" interface="org.apache.tapestry.enhance.SimpleGenericsInterface">

-        <invoke-factory>

-            <construct class="org.apache.tapestry.enhance.GenericServiceImpl" />

-        </invoke-factory>

-    </service-point>

-

-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/error/BaseErrorTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/error/BaseErrorTestCase.java
deleted file mode 100644
index 78b6f13..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/error/BaseErrorTestCase.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.error.TestExceptionPresenter.ExceptionFixture;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.test.Creator;
-
-/**
- * Base class for tests of the various error reporting service implementations.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class BaseErrorTestCase extends BaseComponentTestCase
-{
-
-    protected IPage newPage()
-    {
-        Creator c = new Creator();
-    
-        return (IPage) c.newInstance(ExceptionFixture.class);
-    }
-
-    protected IRequestCycle newCycle(String pageName, IPage page)
-    {
-        IRequestCycle cycle = newCycle();
-        checkOrder(cycle, false);
-        
-        expect(cycle.getPage(pageName)).andReturn(page);
-    
-        return cycle;
-    }
-
-    protected ResponseRenderer newRenderer(IRequestCycle cycle, Throwable throwable) throws Exception
-    {
-        ResponseRenderer renderer = newMock(ResponseRenderer.class);
-    
-        renderer.renderResponse(cycle);
-    
-        if (throwable != null)
-            expectLastCall().andThrow(throwable);
-    
-        return renderer;
-    }
-
-    protected RequestExceptionReporter newReporter()
-    {
-        return newMock(RequestExceptionReporter.class);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/error/StaleSessionExceptionPresenterTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/error/StaleSessionExceptionPresenterTest.java
deleted file mode 100644
index e9bafc3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/error/StaleSessionExceptionPresenterTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleSessionException;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.error.StaleSessionExceptionPresenterImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class StaleSessionExceptionPresenterTest extends BaseErrorTestCase
-{
-    public void testSuccess() throws Exception
-    {
-        IPage page = newPage();
-        IRequestCycle cycle = newCycle("StaleSession", page);
-        
-        cycle.activate(page);
-
-        ResponseRenderer renderer = newRenderer(cycle, null);
-        
-        replay();
-
-        StaleSessionExceptionPresenterImpl presenter = new StaleSessionExceptionPresenterImpl();
-
-        presenter.setPageName("StaleSession");
-        presenter.setResponseRenderer(renderer);
-
-        presenter.presentStaleSessionException(cycle, new StaleSessionException());
-
-        verify();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/error/TestExceptionPresenter.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/error/TestExceptionPresenter.java
deleted file mode 100644
index a27bd1f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/error/TestExceptionPresenter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.error;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.error.ExceptionPresenterImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestExceptionPresenter extends BaseErrorTestCase
-{
-    public abstract static class ExceptionFixture extends BasePage
-    {
-        public abstract void setException(Throwable exception);
-    }
-
-    public void testSuccess() throws Exception
-    {
-        Throwable cause = new IllegalArgumentException();
-        IPage page = newPage();
-
-        IRequestCycle cycle = newCycle("Exception", page);
-        ResponseRenderer renderer = newRenderer(cycle, null);
-
-        cycle.activate(page);
-
-        replay();
-
-        ExceptionPresenterImpl ep = new ExceptionPresenterImpl();
-        ep.setExceptionPageName("Exception");
-        ep.setResponseRenderer(renderer);
-
-        ep.presentException(cycle, cause);
-
-        verify();
-
-        assertSame(cause, PropertyUtils.read(page, "exception"));
-    }
-
-    public void testFailure() throws Exception
-    {
-        Throwable cause = new IllegalArgumentException();
-        Throwable renderCause = new ApplicationRuntimeException("Some failure.");
-
-        IPage page = newPage();
-
-        IRequestCycle cycle = newCycle("Exception", page);
-        
-        RequestExceptionReporter reporter = newReporter();
-        
-        cycle.activate(page);
-        
-        reporter.reportRequestException(ErrorMessages.unableToProcessClientRequest(cause), cause);
-        reporter.reportRequestException(ErrorMessages.unableToPresentExceptionPage(renderCause), renderCause);
-        
-        ResponseRenderer renderer = newRenderer(cycle, renderCause);
-        
-        replay();
-
-        ExceptionPresenterImpl ep = new ExceptionPresenterImpl();
-        ep.setExceptionPageName("Exception");
-        ep.setResponseRenderer(renderer);
-        ep.setRequestExceptionReporter(reporter);
-
-        try
-        {
-            ep.presentException(cycle, cause);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertSame(renderCause, ex.getRootCause());
-        }
-
-        verify();
-        
-        assertSame(cause, PropertyUtils.read(page, "exception"));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/event/BrowserEventTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/event/BrowserEventTest.java
deleted file mode 100644
index 5532e50..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/event/BrowserEventTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.event;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IRequestCycle;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests how {@link BrowserEvent} extracts itself from the {@link IRequestCycle}.
- */
-@Test
-public class BrowserEventTest extends BaseComponentTestCase
-{
-    public void test_Construct_And_Read_Method_Arguments()
-    {
-        IRequestCycle cycle = newCycle();
-        trainCycleForStandardBrowserEvent(cycle);
-        
-        expect(cycle.getParameter(BrowserEvent.METHOD_ARGUMENTS)).andReturn("[1,2]");
-
-        replay();
-
-        BrowserEvent event = new BrowserEvent(cycle);
-
-        verify();
-
-        assertEquals(event.getMethodArguments().getInt(0), 1);
-        assertEquals(event.getMethodArguments().getInt(1), 2);
-    }
-
-    @Test(expectedExceptions = ApplicationRuntimeException.class)
-    public void test_Unparseable_JSON_Method_Arguments()
-    {
-        IRequestCycle cycle = newCycle();
-        
-        trainCycleForStandardBrowserEvent(cycle);
-        
-        expect(cycle.getParameter(BrowserEvent.METHOD_ARGUMENTS)).andReturn("*/utterRubb�sh");
-
-        replay();
-
-        BrowserEvent event = new BrowserEvent(cycle);
-
-        verify();
-
-        event.getMethodArguments();
-    }
-
-    private void trainCycleForStandardBrowserEvent(IRequestCycle cycle)
-    {
-        expect(cycle.getParameter(BrowserEvent.NAME)).andReturn("onClick").anyTimes();
-
-        expect(cycle.getParameter(BrowserEvent.TYPE)).andReturn("click");
-        expect(cycle.getParameters(BrowserEvent.KEYS)).andReturn(null);
-        expect(cycle.getParameter(BrowserEvent.CHAR_CODE)).andReturn(null);
-        expect(cycle.getParameter(BrowserEvent.PAGE_X)).andReturn("123");
-        expect(cycle.getParameter(BrowserEvent.PAGE_Y)).andReturn("1243");
-        expect(cycle.getParameter(BrowserEvent.LAYER_X)).andReturn(null);
-        expect(cycle.getParameter(BrowserEvent.LAYER_Y)).andReturn(null);
-        expect(cycle.getParameter(BrowserEvent.COMPONENT_ID)).andReturn(null);
-        
-        expect(cycle.getParameter(BrowserEvent.TARGET + "." + BrowserEvent.TARGET_ATTR_ID)).andReturn("element1");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/event/ReportStatusEventTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/event/ReportStatusEventTest.java
deleted file mode 100644
index e5eae3b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/event/ReportStatusEventTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.event;

-

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.describe.DescriptionReceiver;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.event.ReportStatusEvent}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class ReportStatusEventTest extends BaseComponentTestCase

-{

-    protected DescriptionReceiver newReceiver()

-    {

-        return newMock(DescriptionReceiver.class);

-    }

-

-    public void testConstructor()

-    {

-        DescriptionReceiver receiver = newReceiver();

-

-        replay();

-

-        ReportStatusEvent event = new ReportStatusEvent(this, receiver);

-

-        assertSame(this, event.getSource());

-

-        verify();

-    }

-

-    public void testDelegation()

-    {

-        Object[] values = new Object[]

-        { 1, 2, 3 };

-        Object alternate = new Object();

-

-        DescriptionReceiver receiver = newReceiver();

-

-        receiver.array("array", values);

-        receiver.describeAlternate(alternate);

-        receiver.property("boolean-true", true);

-        receiver.property("boolean-false", false);

-        receiver.property("byte", (byte) 37);

-        receiver.property("char", 'z');

-        receiver.property("double", 3.14);

-        receiver.property("float", (float) 9.99);

-        receiver.property("int", -373);

-        receiver.property("long", 373737l);

-        receiver.property("object", this);

-        receiver.property("short", (short) 99);

-        receiver.section("Section");

-        receiver.title("Title");

-

-        replay();

-

-        ReportStatusEvent event = new ReportStatusEvent(this, receiver);

-

-        event.array("array", values);

-        event.describeAlternate(alternate);

-        event.property("boolean-true", true);

-        event.property("boolean-false", false);

-        event.property("byte", (byte) 37);

-        event.property("char", 'z');

-        event.property("double", 3.14);

-        event.property("float", (float) 9.99);

-        event.property("int", -373);

-        event.property("long", 373737l);

-        event.property("object", this);

-        event.property("short", (short) 99);

-        event.section("Section");

-        event.title("Title");

-

-        verify();

-

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/AbstractFormComponentTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/AbstractFormComponentTest.java
deleted file mode 100644
index f438eac..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/AbstractFormComponentTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.form;

-

-import org.apache.hivemind.util.PropertyUtils;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.form.AbstractFormComponent}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class AbstractFormComponentTest extends BaseFormComponentTestCase

-{

-    public void testCanTakeFocus()

-    {

-        AbstractFormComponent component = (AbstractFormComponent) newInstance(AbstractFormComponent.class);

-

-        assertEquals(true, component.getCanTakeFocus());

-

-        PropertyUtils.write(component, "disabled", true);

-

-        assertEquals(false, component.getCanTakeFocus());

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/BaseFormComponentTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/BaseFormComponentTestCase.java
deleted file mode 100644
index 95868e2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/BaseFormComponentTestCase.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.valid.IValidationDelegate;
-import static org.easymock.EasyMock.*;
-
-/**
- * Base class for tests of implementations of {@link org.apache.tapestry.form.IFormComponent}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class BaseFormComponentTestCase extends BaseComponentTestCase
-{
-
-    protected IValidationDelegate newDelegate()
-    {
-        return newMock(IValidationDelegate.class);
-    }
-
-    protected void trainIsInError(IValidationDelegate delegate, boolean isInError)
-    {
-        expect(delegate.isInError()).andReturn(isInError);
-    }
-
-    protected IForm newForm()
-    {
-        IForm mock = newMock(IForm.class);
-        
-        checkOrder(mock, false);
-        
-        return mock;
-    }
-
-    protected void trainGetForm(IRequestCycle cycle, IForm form)
-    {
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form).anyTimes();
-    }
-
-    protected void trainGetDelegate(IForm form, IValidationDelegate delegate)
-    {
-        expect(form.getDelegate()).andReturn(delegate).anyTimes();
-    }
-
-    protected void trainGetParameter(IRequestCycle cycle, String parameterName,
-            String parameterValue)
-    {
-        expect(cycle.getParameter(parameterName)).andReturn(parameterValue);
-    }
-
-    protected void trainWasPrerendered(IForm form, IMarkupWriter writer, IComponent component,
-            boolean wasPrerendered)
-    {
-        expect(form.wasPrerendered(writer, component)).andReturn(wasPrerendered);
-    }
-
-    protected void trainIsRewinding(IForm form, boolean isRewinding)
-    {
-        expect(form.isRewinding()).andReturn(isRewinding);
-    }
-    
-    protected void trainGetElementId(IForm form, IFormComponent component, String name)
-    {
-        form.getElementId(component);
-        component.setName(name);
-        component.setClientId(name);
-        expectLastCall().andReturn(name);
-    }
-
-    protected IBinding newBinding()
-    {
-        return newMock(IBinding.class);
-    }
-
-    protected IActionListener newListener()
-    {
-        return newMock(IActionListener.class);
-    }
-
-    protected IFormComponent newField()
-    {
-        return newMock(IFormComponent.class);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/BeanPropertySelectionModelTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/BeanPropertySelectionModelTest.java
deleted file mode 100644
index 7699035..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/BeanPropertySelectionModelTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.form;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests the functionality of {@link BeanPropertySelectionModel}.
- *
- * @author jkuhnert
- */
-@Test
-public class BeanPropertySelectionModelTest extends BaseComponentTestCase
-{
-    
-    /**
-     * Tests using a null arg constuctor.
-     */
-    public void testNullModel()
-    {
-        BeanPropertySelectionModel model = new BeanPropertySelectionModel();
-        assertEquals(model.getOptionCount(), 0);
-    }
-    
-    /**
-     * Uses {@link BeanPropertySelectionModelTest} as the 
-     * model.
-     */
-    public void testBasicModel()
-    {
-        List<SimpleBean> list = new ArrayList();
-        list.add(new SimpleBean(1, "Name 1", "Description 1"));
-        list.add(new SimpleBean(2, "Name 2", "Description 2"));
-        list.add(new SimpleBean(3, "Name 3", "Description 3"));
-        
-        BeanPropertySelectionModel model =
-            new BeanPropertySelectionModel(list, "name");
-        
-        assertEquals(model.getOptionCount(), 3);
-        
-        SimpleBean b2 = (SimpleBean)model.getOption(1);
-        assertEquals(b2.getId(), 2);
-        assertEquals(model.getLabel(2), "Name 3");
-        
-        assertEquals(model.translateValue("1"), b2);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormComponentContributorTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormComponentContributorTestCase.java
deleted file mode 100644
index 525c81d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormComponentContributorTestCase.java
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import static org.easymock.EasyMock.aryEq;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-
-import java.util.Locale;
-
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.junit.TapestryTestCase;
-
-/**
- * Abstract test case for {@link FormComponentContributor}.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-public abstract class FormComponentContributorTestCase extends TapestryTestCase
-{
-    // Paul,
-    //
-    // Think you missed the newControl() and newMock() methods inherited from HiveMindTestCase.
-    // Those exist to eliminate the need for all this stuff. Instead, you create newFoo() methods
-    // that
-    // create and initialize a Foo instance.
-    // -- Howard
-    
-    protected IFormComponent _component = newMock(IFormComponent.class);
-    
-    protected IPage _page = newPage();
-    
-    protected IRequestCycle _cycle = newCycle();
-    
-    protected IForm _form = newMock(IForm.class);
-
-    protected IEngine _engine = newMock(IEngine.class);
-
-    protected PageRenderSupport _pageRenderSupport = newPageRenderSupport();
-
-    protected void addScript(String script)
-    {
-        expect(_cycle.getEngine()).andReturn(_engine);
-
-        expect(_cycle.getAttribute("org.apache.tapestry.PageRenderSupport"))
-        .andReturn(_pageRenderSupport);
-        
-        _pageRenderSupport.addExternalScript(new ClasspathResource(null, script));
-    }
-
-    protected IFormComponent newField(String displayName)
-    {
-        IFormComponent field = newMock(IFormComponent.class);
-        
-        checkOrder(field, false);
-        
-        expect(field.getDisplayName()).andReturn(displayName).anyTimes();
-
-        return field;
-    }
-
-    protected IFormComponent newField(String displayName, String clientId, int count)
-    {
-        IFormComponent field = newMock(IFormComponent.class);
-        checkOrder(field, false);
-        
-        expect(field.getDisplayName()).andReturn(displayName);
-        
-        expect(field.getClientId()).andReturn(clientId).anyTimes();
-        
-        return field;
-    }
-    
-    protected IFormComponent newFieldWithClientId(String clientId)
-    {
-        IFormComponent field = newMock(IFormComponent.class);
-        
-        expect(field.getClientId()).andReturn(clientId);
-        
-        return field;        
-    }
-
-
-    protected void trainBuildMessage(ValidationMessages messages,
-            String overrideMessage, String key, Object[] parameters, String result)
-    {
-        expect(messages.formatValidationMessage(eq(overrideMessage), eq(key), aryEq(parameters)))
-        .andReturn(result);
-    }
-
-    protected void trainGetLocale(ValidationMessages messages, Locale locale)
-    {
-        expect(messages.getLocale()).andReturn(locale).anyTimes();
-    }
-
-    protected IFormComponent newField()
-    {
-        return newMock(IFormComponent.class);
-    }
-
-    protected IMarkupWriter newWriter()
-    {
-        return newMock(IMarkupWriter.class);
-    }
-
-    protected IRequestCycle newCycle()
-    {
-        return newMock(IRequestCycle.class);
-    }
-
-    protected ValidationMessages newValidationMessages(Locale locale)
-    {
-        ValidationMessages messages = newMock(ValidationMessages.class);
-
-        expect(messages.getLocale()).andReturn(locale).anyTimes();
-
-        return messages;
-    }
-
-    protected void trainTrim(FormComponentContributorContext context, String fieldId)
-    {
-        context.addSubmitHandler("function (event) { Tapestry.trim_field_value('" + fieldId
-                + "'); }");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormFixture.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormFixture.java
deleted file mode 100644
index 9b89385..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormFixture.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.form;

-

-import static org.testng.AssertJUnit.assertSame;

-

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-

-/**

- * Used to test rendering and rewinding the Form component.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- * @see org.apache.tapestry.form.FormTest

- */

-public abstract class FormFixture extends Form

-{

-    public abstract FormSupport getFormSupport();

-

-    public abstract IMarkupWriter getExpectedWriter();

-

-    public abstract IRequestCycle getExpectedRequestCycle();

-

-    @Override

-    protected FormSupport newFormSupport(IMarkupWriter writer, IRequestCycle cycle)

-    {

-        assertSame(getExpectedWriter(), writer);

-        assertSame(getExpectedRequestCycle(), cycle);

-

-        return getFormSupport();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java
deleted file mode 100644
index 4d1dab0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormSupportTest.java
+++ /dev/null
@@ -1,1530 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.event.EventTarget;
-import org.apache.tapestry.internal.event.impl.ComponentEventInvoker;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.valid.IValidationDelegate;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.form.FormSupportImpl}.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential = true)
-public class FormSupportTest extends BaseComponentTestCase {
-    @DataProvider(name = "allSupports")
-    public Object[][] createAllSupports()
-    {
-        return new Object[][]{
-          {new FormSupportFactoryImpl()},
-          {new MultipleFormSupportFactory()}
-        };
-    }
-
-    @DataProvider(name = "mainSupport")
-    public Object[][] createMainSupport()
-    {
-        return new Object[][]{
-          {new FormSupportFactoryImpl()}
-        };
-    }
-
-    protected FormSupport newFormSupport(IRequestCycle cycle)
-    {
-        return new FormSupportImpl(cycle);
-    }
-
-    private IRender newComponentRenderBody(final FormSupport fs, final IFormComponent component,
-                                           final IMarkupWriter nested)
-    {
-        return newComponentsRenderBody(fs, new IFormComponent[]
-          {component}, nested);
-    }
-
-    private IRender newComponentsRenderBody(final FormSupport fs, final IFormComponent[] component,
-                                            final IMarkupWriter nested)
-    {
-        return new IRender() {
-            public void render(IMarkupWriter writer, IRequestCycle cycle)
-            {
-                assertEquals(nested, writer);
-
-                for (int i = 0; i < component.length; i++)
-                    fs.getElementId(component[i]);
-            }
-        };
-    }
-
-    private IValidationDelegate newDelegate()
-    {
-        return newMock(IValidationDelegate.class);
-    }
-
-    protected IEngine newEngine()
-    {
-        return newMock(IEngine.class);
-    }
-
-    private IFormComponent newField()
-    {
-        return newMock(IFormComponent.class);
-    }
-
-    private IFormComponent newFormComponent(String id, String name)
-    {
-        IFormComponent component = newMock(IFormComponent.class);
-        checkOrder(component, false);
-
-        expect(component.getSpecifiedId()).andReturn(id);
-
-        component.setName(name);
-        component.setClientId(name);
-
-        return component;
-    }
-
-    private IFormComponent newFormComponent(String id, String extendedId, Location location)
-    {
-        IFormComponent component = newMock(IFormComponent.class);
-
-        expect(component.getSpecifiedId()).andReturn(id);
-
-        trainGetExtendedId(component, extendedId);
-        trainGetLocation(component, location);
-
-        return component;
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Cancel_Rewind(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IValidationDelegate delegate = newDelegate();
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, true);
-
-        trainGetPageRenderSupport(cycle, null);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        delegate.clear();
-
-        trainGetParameter(cycle, FormSupportImpl.SUBMIT_MODE, "cancel");
-
-        // Create a body, just to provie it doesn't get invoked.
-
-        IRender body = newMock(IRender.class);
-
-        form.setBody(body);
-
-        replay();
-
-        assertEquals(FormConstants.SUBMIT_CANCEL, fs.rewind());
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Complex_Render(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        IValidationDelegate delegate = newDelegate();
-        ILink link = newLink();
-        IRender render = newRender();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, false);
-
-        PageRenderSupport support = newPageRenderSupport();
-
-        trainGetPageRenderSupport(cycle, support);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        final IFormComponent barney1 = newFormComponent("barney", "barney");
-        final IFormComponent wilma = newFormComponent("wilma", "wilma");
-        final IFormComponent barney2 = newFormComponent("barney", "barney_0");
-
-        IRender body = newComponentsRenderBody(fs, new IFormComponent[]
-          {barney1, wilma, barney2}, nested);
-
-        form.setBody(body);
-
-        trainRegister(support, form, "myform");
-
-        trainGetParameterNames(link, new String[]
-          {"service"});
-        trainGetParameterValues(link, "service", new String[]
-          {"fred"});
-
-        trainGetNestedWriter(writer, nested);
-
-        trainGetURL(link, null, "/app");
-
-        writer.begin("form");
-        writer.attribute("method", "post");
-        writer.attribute("action", "/app");
-
-        writer.attribute("id", "myform");
-
-        render.render(writer, cycle);
-
-        writer.println();
-
-        trainHiddenBlock(cycle, builder, writer, form, "fred", "barney,wilma,barney_0");
-
-        nested.close();
-
-        writer.end();
-
-        trainGetFocusField(delegate, "wilma");
-
-        expect(cycle.isFocusDisabled()).andReturn(false);
-
-        // effectively means someone else has already claimed focus
-
-        trainGetFieldFocus(cycle, null);
-
-        support.addInitializationScript(form, "dojo.require(\"tapestry.form\");");
-        support.addScriptAfterInitialization(form, "tapestry.form.focusField('wilma');");
-        cycle.setAttribute(FormSupportImpl.FIELD_FOCUS_ATTRIBUTE, Boolean.TRUE);
-
-        replay();
-
-        fs.render("post", render, link, null, null);
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Complex_Rewind(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IValidationDelegate delegate = newDelegate();
-        MockForm form = new MockForm(delegate);
-        ListenerInvoker listenerInvoker = newMock(ListenerInvoker.class);
-
-        ComponentEventInvoker invoker = new ComponentEventInvoker();
-        invoker.setInvoker(listenerInvoker);
-
-        trainIsRewound(cycle, form, true);
-        trainGetPageRenderSupport(cycle, null);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        delegate.clear();
-
-        trainCycleForRewind(cycle, "barney,wilma,barney_0", null);
-
-        final IFormComponent barney1 = newFormComponent("barney", "barney");
-        final IFormComponent wilma = newFormComponent("wilma", "wilma");
-        final IFormComponent barney2 = newFormComponent("barney", "barney_0");
-
-        IRender body = newComponentsRenderBody(fs, new IFormComponent[]
-          {barney1, wilma, barney2}, writer);
-
-        form.setBody(body);
-        form.setEventInvoker(invoker);
-
-        trainExtractBrowserEvent(cycle);
-
-        replay();
-
-        Map props = new HashMap();
-        props.put("id", "bsId");
-        BrowserEvent event = new BrowserEvent("onclick", new EventTarget(props));
-
-        invoker.invokeFormListeners(fs, cycle, event);
-
-        assertEquals(FormConstants.SUBMIT_NORMAL, fs.rewind());
-
-        verify();
-    }
-
-    @Test(dataProvider = "allSupports")
-    public void test_Complex_Submit_Event_Handler(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        IValidationDelegate delegate = newDelegate();
-        PageRenderSupport support = newPageRenderSupport();
-        ILink link = newLink();
-        IRender render = newRender();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, false);
-        trainGetPageRenderSupport(cycle, support);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        form.setBody(new IRender() {
-            public void render(IMarkupWriter pwriter, IRequestCycle pcycle)
-            {
-                fs.addEventHandler(FormEventType.SUBMIT, "mySubmit1");
-                fs.addEventHandler(FormEventType.SUBMIT, "mySubmit2");
-                fs.addEventHandler(FormEventType.SUBMIT, "mySubmit3");
-            }
-        });
-
-        trainRegister(support, form, "myform");
-
-        trainGetParameterNames(link, new String[]
-          {"service"});
-
-        trainGetParameterValues(link, "service", new String[]
-          {"fred"});
-
-        trainGetNestedWriter(writer, nested);
-
-        trainGetURL(link, null, "/app");
-
-        writer.begin("form");
-        writer.attribute("method", "post");
-        writer.attribute("action", "/app");
-
-        writer.attribute("id", "myform");
-
-        support.addInitializationScript(form, "Tapestry.onsubmit('myform', function (event)"
-                                              + "\n{\n  mySubmit1();\n  mySubmit2();\n  mySubmit3();\n});\n");
-
-        render.render(writer, cycle);
-
-        writer.println();
-
-        trainHiddenBlock(cycle, builder, writer, form, "fred", "");
-
-        nested.close();
-
-        writer.end();
-
-        // Side test: what if no focus field?
-
-        trainGetFocusField(delegate, null);
-
-        expect(cycle.isFocusDisabled()).andReturn(false);
-
-        replay();
-
-        fs.render("post", render, link, null, null);
-
-        verify();
-    }
-
-    @Test(dataProvider = "allSupports")
-    public void test_Encoding_Type(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        IValidationDelegate delegate = newDelegate();
-        PageRenderSupport support = newPageRenderSupport();
-        ILink link = newLink();
-        IRender render = newRender();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, false);
-
-        trainGetPageRenderSupport(cycle, support);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        form.setBody(new IRender() {
-            public void render(IMarkupWriter pwriter, IRequestCycle pcycle)
-            {
-                fs.setEncodingType("foo/bar");
-            }
-        });
-
-        trainRegister(support, form, "myform");
-
-        trainGetParameterNames(link, new String[]
-          {"service"});
-
-        trainGetParameterValues(link, "service", new String[]
-          {"fred"});
-
-        trainGetNestedWriter(writer, nested);
-
-        trainGetURL(link, null, "/app");
-
-        writer.begin("form");
-        writer.attribute("method", "post");
-        writer.attribute("action", "/app");
-
-        writer.attribute("id", "myform");
-        writer.attribute("enctype", "foo/bar");
-
-        render.render(writer, cycle);
-
-        writer.println();
-
-        trainHiddenBlock(cycle, builder, writer, form, "fred", "");
-
-        nested.close();
-
-        writer.end();
-
-        trainGetFocusField(delegate, null);
-
-        expect(cycle.isFocusDisabled()).andReturn(false);
-
-        replay();
-
-        fs.render("post", render, link, null, null);
-
-        verify();
-    }
-
-    @Test(dataProvider = "allSupports")
-    public void test_Field_Prerender_Twice(FormSupportFactory factory)
-    {
-        IFormComponent field = newField();
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-
-        trainGetExtendedId(field, "foo.bar");
-        trainGetNestedWriter(writer, nested);
-
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
-        cycle.setAttribute(TapestryUtils.FIELD_PRERENDER, field);
-
-        expect(cycle.getResponseBuilder()).andReturn(builder);
-
-        builder.render(nested, field, cycle);
-
-        cycle.removeAttribute(TapestryUtils.FIELD_PRERENDER);
-
-        expect(nested.getBuffer()).andReturn("NESTED CONTENT");
-
-        replay();
-
-        FormSupport fs = newFormSupport(cycle);
-
-        fs.prerenderField(writer, field, l);
-
-        verify();
-
-        trainGetExtendedId(field, "foo.bar");
-
-        replay();
-
-        try
-        {
-            fs.prerenderField(writer, field, l);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex) {
-            assertEquals(
-              "Field EasyMock for interface org.apache.tapestry.form.IFormComponent has already been pre-rendered. "
-              + "This exception may indicate that a FieldLabel rendered, but the corresponding field did not.",
-              ex.getMessage());
-
-            assertSame(l, ex.getLocation());
-            assertSame(field, ex.getComponent());
-        }
-
-        verify();
-
-    }
-
-    @Test(dataProvider = "allSupports")
-    public void test_Hidden_Values(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        IValidationDelegate delegate = newDelegate();
-        PageRenderSupport support = newPageRenderSupport();
-        ILink link = newLink();
-        IRender render = newRender();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, false);
-        trainGetPageRenderSupport(cycle, support);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        form.setBody(new IRender() {
-            public void render(IMarkupWriter pwriter, IRequestCycle pcycle)
-            {
-                fs.addHiddenValue("hidden1", "value1");
-                fs.addHiddenValue("hidden2", "id2", "value2");
-            }
-        });
-
-        trainRegister(support, form, "myform");
-        trainGetParameterNames(link, new String[]{"service"});
-        trainGetParameterValues(link, "service", new String[] {"fred"});
-
-        trainGetNestedWriter(writer, nested);
-
-        trainGetURL(link, null, "/app");
-
-        writer.begin("form");
-        writer.attribute("method", "post");
-        writer.attribute("action", "/app");
-
-        writer.attribute("id", "myform");
-
-        render.render(writer, cycle);
-
-        writer.println();
-
-        expect(cycle.getResponseBuilder()).andReturn(builder);
-
-        expect(builder.contains(form)).andReturn(false);
-
-        trainDiv(writer, form);
-
-        trainHidden(writer, "formids", "");
-        trainHidden(writer, "service", "fred");
-        trainHidden(writer, "submitmode", "");
-        trainHidden(writer, FormConstants.SUBMIT_NAME_PARAMETER, "");
-        trainHidden(writer, "hidden1", "value1");
-        trainHidden(writer, "hidden2", "id2", "value2");
-
-        writer.end();
-
-        nested.close();
-
-        writer.end();
-
-        trainGetFocusField(delegate, null);
-
-        expect(cycle.isFocusDisabled()).andReturn(false);
-
-        replay();
-
-        fs.render("post", render, link, null, null);
-
-        verify();
-    }
-
-    @Test(dataProvider = "allSupports")
-    public void test_Invalid_Encoding_Type(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        IValidationDelegate delegate = newDelegate();
-        PageRenderSupport support = newPageRenderSupport();
-        ILink link = newLink();
-        IRender render = newRender();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, false);
-
-        trainGetPageRenderSupport(cycle, support);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        form.setBody(new IRender() {
-            public void render(IMarkupWriter pwriter, IRequestCycle pcycle)
-            {
-                fs.setEncodingType("foo/bar");
-                fs.setEncodingType("zip/zap");
-            }
-        });
-
-        trainRegister(support, form, "myform");
-
-        trainGetParameterNames(link, new String[]
-          {"service"});
-
-        trainGetParameterValues(link, "service", new String[]
-          {"fred"});
-
-        trainGetNestedWriter(writer, nested);
-
-        replay();
-
-        try {
-            fs.render("post", render, link, null, null);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex) {
-            assertEquals(
-              "Components within form SomePage/myform have requested conflicting encoding types 'foo/bar' and 'zip/zap'.",
-              ex.getMessage());
-            assertSame(form, ex.getComponent());
-        }
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Refresh_Rewind(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IValidationDelegate delegate = newDelegate();
-        MockForm form = new MockForm(delegate);
-        ComponentEventInvoker invoker = org.easymock.classextension.EasyMock.createMock(ComponentEventInvoker.class);
-
-        trainIsRewound(cycle, form, true);
-
-        trainGetPageRenderSupport(cycle, null);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        delegate.clear();
-
-        trainCycleForRewind(cycle, "refresh", "barney", null);
-
-        final IFormComponent component = newFormComponent("barney", "barney");
-
-        IRender body = newComponentRenderBody(fs, component, writer);
-
-        form.setBody(body);
-        form.setEventInvoker(invoker);
-
-        trainExtractBrowserEvent(cycle);
-
-        invoker.invokeFormListeners(eq(fs), eq(cycle), isA(BrowserEvent.class));
-
-        delegate.clearErrors();
-
-        replay();
-
-        assertEquals(FormConstants.SUBMIT_REFRESH, fs.rewind());
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Render_Extra_Reserved_Ids(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        IValidationDelegate delegate = newDelegate();
-        PageRenderSupport support = newPageRenderSupport();
-        ILink link = newLink();
-        IRender render = newRender();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, false);
-
-        trainGetPageRenderSupport(cycle, support);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        final IFormComponent component = newFormComponent("action", "action_0");
-
-        IRender body = newComponentRenderBody(fs, component, nested);
-
-        form.setBody(body);
-
-        trainRegister(support, form, "myform");
-
-        trainGetParameterNames(link, new String[]
-          {"action"});
-
-        trainGetParameterValues(link, "action", new String[]
-          {"fred"});
-
-        trainGetNestedWriter(writer, nested);
-
-        trainGetURL(link, null, "/app");
-
-        writer.begin("form");
-        writer.attribute("method", "post");
-        writer.attribute("action", "/app");
-
-        writer.attribute("id", "myform");
-
-        render.render(writer, cycle);
-
-        writer.println();
-
-        expect(cycle.getResponseBuilder()).andReturn(builder);
-
-        expect(builder.contains(form)).andReturn(false);
-
-        trainDiv(writer, form);
-
-        trainHidden(writer, "formids", "action_0");
-        trainHidden(writer, "action", "fred");
-        trainHidden(writer, "reservedids", "action");
-        trainHidden(writer, "submitmode", "");
-        trainHidden(writer, FormConstants.SUBMIT_NAME_PARAMETER, "");
-
-        writer.end();
-
-        nested.close();
-
-        writer.end();
-
-        trainGetFocusField(delegate, null);
-
-        expect(cycle.isFocusDisabled()).andReturn(false);
-
-        replay();
-
-        fs.render("post", render, link, null, null);
-
-        verify();
-    }
-
-    @Test(dataProvider = "allSupports")
-    public void test_Reset_Event_Handler(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-
-        IValidationDelegate delegate = newDelegate();
-        PageRenderSupport support = newPageRenderSupport();
-        ILink link = newLink();
-        IRender render = newRender();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, false);
-
-        trainGetPageRenderSupport(cycle, support);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        form.setBody(new IRender() {
-            public void render(IMarkupWriter pwriter, IRequestCycle pcycle)
-            {
-                fs.addEventHandler(FormEventType.RESET, "myReset1");
-                fs.addEventHandler(FormEventType.RESET, "myReset2");
-            }
-        });
-
-        trainRegister(support, form, "myform");
-
-        trainGetParameterNames(link, new String[]
-          {"service"});
-
-        trainGetParameterValues(link, "service", new String[]
-          {"fred"});
-
-        trainGetNestedWriter(writer, nested);
-
-        trainGetURL(link, null, "/app");
-
-        writer.begin("form");
-        writer.attribute("method", "post");
-        writer.attribute("action", "/app");
-
-        writer.attribute("id", "myform");
-
-        support.addInitializationScript(form, "Tapestry.onreset('myform', function (event)"
-                                              + "\n{\n  myReset1();\n  myReset2();\n});\n");
-
-        render.render(writer, cycle);
-
-        writer.println();
-
-        trainHiddenBlock(cycle, builder, writer, form, "fred", "");
-
-        nested.close();
-
-        writer.end();
-
-        trainGetFocusField(delegate, null);
-
-        expect(cycle.isFocusDisabled()).andReturn(false);
-
-        replay();
-
-        fs.render("post", render, link, null, null);
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Rewind_Extra_Reserved_Ids(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IValidationDelegate delegate = newDelegate();
-        ComponentEventInvoker invoker =
-          org.easymock.classextension.EasyMock.createMock(ComponentEventInvoker.class);
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, true);
-
-        trainGetPageRenderSupport(cycle, null);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        delegate.clear();
-
-        trainCycleForRewind(cycle, "action_0", "action");
-
-        final IFormComponent component = newFormComponent("action", "action_0");
-
-        IRender body = newComponentRenderBody(fs, component, writer);
-
-        form.setBody(body);
-        form.setEventInvoker(invoker);
-
-        trainExtractBrowserEvent(cycle);
-
-        invoker.invokeFormListeners(eq(fs), eq(cycle), isA(BrowserEvent.class));
-
-        replay();
-
-        assertEquals(FormConstants.SUBMIT_NORMAL, fs.rewind());
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Rewind_Mismatch(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IValidationDelegate delegate = newDelegate();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, true);
-        trainGetPageRenderSupport(cycle, null);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        Location l = newLocation();
-
-        delegate.clear();
-
-        // So, the scenario here is that component "pebbles" was inside
-        // some kind of conditional that evaluated to true during the render,
-        // but is now false on the rewind.
-
-        trainCycleForRewind(cycle, "barney,wilma,pebbles,barney_0", null);
-
-        final IFormComponent barney1 = newFormComponent("barney", "barney");
-        final IFormComponent wilma = newFormComponent("wilma", "wilma");
-        final IFormComponent barney2 = newFormComponent("barney", "SomePage/barney", l);
-
-        IRender body = newComponentsRenderBody(fs, new IFormComponent[]
-          {barney1, wilma, barney2}, writer);
-
-        form.setBody(body);
-
-        replay();
-
-        try {
-            fs.rewind();
-            unreachable();
-        }
-        catch (StaleLinkException ex) {
-            assertEquals(
-              "Rewind of form SomePage/myform expected allocated id #3 to be 'pebbles', but was 'barney_0' (requested by component SomePage/barney).",
-              ex.getMessage());
-            assertSame(barney2, ex.getComponent());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Rewind_Too_Long(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IValidationDelegate delegate = newDelegate();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, true);
-        trainGetPageRenderSupport(cycle, null);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        Location l = newLocation();
-
-        delegate.clear();
-
-        // So, the scenario here is that component "barney" was inside
-        // some kind of loop that executed once on the render, but twice
-        // on the rewind (i.e., an additional object was added in between).
-
-        trainCycleForRewind(cycle, "barney,wilma", null);
-
-        final IFormComponent barney1 = newFormComponent("barney", "barney");
-        final IFormComponent wilma = newFormComponent("wilma", "wilma");
-        final IFormComponent barney2 = newFormComponent("barney", "SomePage/barney", l);
-
-        IRender body = newComponentsRenderBody(fs, new IFormComponent[]
-          {barney1, wilma, barney2}, writer);
-
-        form.setBody(body);
-
-        replay();
-
-        try {
-            fs.rewind();
-            unreachable();
-        }
-        catch (StaleLinkException ex) {
-            assertEquals(
-              "Rewind of form SomePage/myform expected only 2 form elements, but an additional id was requested by component SomePage/barney.",
-              ex.getMessage());
-            assertSame(barney2, ex.getComponent());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Rewind_Too_Short(FormSupportFactory factory)
-    {
-        Location l = newLocation();
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IValidationDelegate delegate = newDelegate();
-        ComponentEventInvoker invoker = org.easymock.classextension.EasyMock.createMock(ComponentEventInvoker.class);
-
-        MockForm form = new MockForm(delegate, l);
-
-        trainIsRewound(cycle, form, true);
-        trainGetPageRenderSupport(cycle, null);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        delegate.clear();
-
-        // So, the scenario here is that component "barney" was inside
-        // some kind of loop that executed twice on the render, but only once
-        // on the rewind (i.e., the object was deleted in between).
-
-        trainCycleForRewind(cycle, "barney,wilma,barney$0", null);
-
-        final IFormComponent barney1 = newFormComponent("barney", "barney");
-        final IFormComponent wilma = newFormComponent("wilma", "wilma");
-
-        IRender body = newComponentsRenderBody(fs, new IFormComponent[]{barney1, wilma}, writer);
-
-        form.setBody(body);
-        form.setEventInvoker(invoker);
-
-        trainExtractBrowserEvent(cycle);
-
-        invoker.invokeFormListeners(eq(fs), eq(cycle), isA(BrowserEvent.class));
-
-        replay();
-
-        try {
-            fs.rewind();
-            unreachable();
-        }
-        catch (StaleLinkException ex) {
-            assertEquals(
-              "Rewind of form SomePage/myform expected 1 more form elements, starting with id 'barney$0'.",
-              ex.getMessage());
-            assertSame(form, ex.getComponent());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Simple_Render(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        IValidationDelegate delegate = newDelegate();
-        ILink link = newLink();
-        IRender render = newRender();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, false);
-
-        PageRenderSupport support = newPageRenderSupport();
-
-        trainGetPageRenderSupport(cycle, support);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        final IFormComponent component = newFormComponent("barney", "barney");
-
-        IRender body = newComponentRenderBody(fs, component, nested);
-
-        form.setBody(body);
-
-        trainRegister(support, form, "myform");
-
-        trainGetParameterNames(link, new String[]
-          {"service"});
-        trainGetParameterValues(link, "service", new String[]
-          {"fred"});
-
-        trainGetNestedWriter(writer, nested);
-
-        trainGetURL(link, null, "/app");
-
-        writer.begin("form");
-        writer.attribute("method", "post");
-        writer.attribute("action", "/app");
-
-        writer.attribute("id", "myform");
-
-        render.render(writer, cycle);
-
-        writer.println();
-
-        trainHiddenBlock(cycle, builder, writer, form, "fred", "barney");
-
-        nested.close();
-
-        writer.end();
-
-        trainGetFocusField(delegate, "barney");
-
-        expect(cycle.isFocusDisabled()).andReturn(false);
-
-        // Side test: check for another form already grabbing focus
-
-        trainGetFieldFocus(cycle, null);
-
-        support.addInitializationScript(form, "dojo.require(\"tapestry.form\");");
-        support.addScriptAfterInitialization(form, "tapestry.form.focusField('barney');");
-        cycle.setAttribute(FormSupportImpl.FIELD_FOCUS_ATTRIBUTE, Boolean.TRUE);
-
-        replay();
-
-        fs.render("post", render, link, null, null);
-
-        verify();
-    }
-
-    @Test(dataProvider = "allSupports")
-    public void test_Simple_Render_With_Deferred_Runnable(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        IValidationDelegate delegate = newDelegate();
-        ILink link = newLink();
-        IRender render = newRender();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, false);
-
-        PageRenderSupport support = newPageRenderSupport();
-
-        trainGetPageRenderSupport(cycle, support);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        IRender body = new IRender() {
-            public void render(final IMarkupWriter pwriter, IRequestCycle pcycle)
-            {
-                fs.addDeferredRunnable(new Runnable() {
-
-                    public void run()
-                    {
-                        pwriter.print("DEFERRED");
-                    }
-
-                });
-            }
-
-        };
-
-        form.setBody(body);
-
-        trainRegister(support, form, "myform");
-
-        trainGetParameterNames(link, new String[]
-          {"service"});
-        trainGetParameterValues(link, "service", new String[]
-          {"fred"});
-
-        trainGetNestedWriter(writer, nested);
-
-        nested.print("DEFERRED");
-
-        trainGetURL(link, null, "/app");
-
-        writer.begin("form");
-        writer.attribute("method", "post");
-        writer.attribute("action", "/app");
-
-        writer.attribute("id", "myform");
-
-        render.render(writer, cycle);
-
-        writer.println();
-
-        trainHiddenBlock(cycle, builder, writer, form, "fred", "");
-
-        nested.close();
-
-        writer.end();
-
-        trainGetFocusField(delegate, null);
-
-        expect(cycle.isFocusDisabled()).andReturn(false);
-
-        replay();
-
-        fs.render("post", render, link, null, null);
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Simple_Render_With_Scheme(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        IValidationDelegate delegate = newDelegate();
-        ILink link = newLink();
-        IRender render = newRender();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, false);
-
-        PageRenderSupport support = newPageRenderSupport();
-
-        trainGetPageRenderSupport(cycle, support);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        final IFormComponent component = newFormComponent("barney", "barney");
-
-        IRender body = newComponentRenderBody(fs, component, nested);
-
-        form.setBody(body);
-
-        trainRegister(support, form, "myform");
-
-        trainGetParameterNames(link, new String[]
-          {"service"});
-        trainGetParameterValues(link, "service", new String[]
-          {"fred"});
-
-        trainGetNestedWriter(writer, nested);
-
-        trainGetURL(link, "https", "https://foo.bar/app", 443);
-
-        writer.begin("form");
-        writer.attribute("method", "post");
-        writer.attribute("action", "https://foo.bar/app");
-
-        writer.attribute("id", "myform");
-
-        render.render(writer, cycle);
-
-        writer.println();
-
-        trainHiddenBlock(cycle, builder, writer, form, "fred", "barney");
-
-        nested.close();
-
-        writer.end();
-
-        trainGetFocusField(delegate, "barney");
-
-        expect(cycle.isFocusDisabled()).andReturn(false);
-
-        // Side test: check for another form already grabbing focus
-
-        trainGetFieldFocus(cycle, Boolean.TRUE);
-
-        // support.addInitializationScript(form, "tapestry.form.focusField('barney');");
-
-        // cycle.setAttribute(FormSupportImpl.FIELD_FOCUS_ATTRIBUTE, true);
-
-        replay();
-
-        fs.render("post", render, link, "https", new Integer(443));
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Simple_Rewind(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IValidationDelegate delegate = newDelegate();
-        MockForm form = new MockForm(delegate);
-        ComponentEventInvoker invoker =
-          org.easymock.classextension.EasyMock.createMock(ComponentEventInvoker.class);
-
-        trainIsRewound(cycle, form, true);
-
-        trainGetPageRenderSupport(cycle, null);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        delegate.clear();
-
-        trainCycleForRewind(cycle, "barney", null);
-
-        final IFormComponent component = newFormComponent("barney", "barney");
-
-        IRender body = newComponentRenderBody(fs, component, writer);
-
-        form.setBody(body);
-        form.setEventInvoker(invoker);
-
-        trainExtractBrowserEvent(cycle);
-
-        invoker.invokeFormListeners(eq(fs), eq(cycle), isA(BrowserEvent.class));
-
-        replay();
-
-        assertEquals(FormConstants.SUBMIT_NORMAL, fs.rewind());
-
-        verify();
-    }
-
-    @Test(dataProvider = "mainSupport")
-    public void test_Simple_Rewind_With_Deferred_Runnable(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IValidationDelegate delegate = newDelegate();
-        MockForm form = new MockForm(delegate);
-        ComponentEventInvoker invoker =
-          org.easymock.classextension.EasyMock.createMock(ComponentEventInvoker.class);
-
-        trainIsRewound(cycle, form, true);
-
-        trainGetPageRenderSupport(cycle, null);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        delegate.clear();
-
-        trainCycleForRewind(cycle, "", null);
-        trainExtractBrowserEvent(cycle);
-
-        writer.print("DEFERRED");
-
-        invoker.invokeFormListeners(eq(fs), eq(cycle), isA(BrowserEvent.class));
-
-        replay();
-
-        IRender body = new IRender() {
-
-            public void render(final IMarkupWriter pwriter, IRequestCycle pcycle)
-            {
-                fs.addDeferredRunnable(new Runnable() {
-                    public void run()
-                    {
-                        pwriter.print("DEFERRED");
-                    }
-
-                });
-            }
-
-        };
-
-        form.setBody(body);
-        form.setEventInvoker(invoker);
-
-        assertEquals(FormConstants.SUBMIT_NORMAL, fs.rewind());
-
-        verify();
-    }
-
-    @Test(dataProvider = "allSupports")
-    public void test_Simple_Submit_Event_Handler(FormSupportFactory factory)
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        IValidationDelegate delegate = newDelegate();
-        ILink link = newLink();
-        IRender render = newRender();
-
-        MockForm form = new MockForm(delegate);
-
-        trainIsRewound(cycle, form, false);
-
-        PageRenderSupport support = newPageRenderSupport();
-
-        trainGetPageRenderSupport(cycle, support);
-
-        replay();
-
-        final FormSupport fs = factory.createFormSupport(writer, cycle, form);
-
-        verify();
-
-        trainRegister(support, form, "myform");
-
-        trainGetParameterNames(link, new String[]
-          {"service"});
-        trainGetParameterValues(link, "service", new String[]
-          {"fred"});
-
-        trainGetNestedWriter(writer, nested);
-
-        trainGetURL(link, null, "/app");
-
-        writer.begin("form");
-        writer.attribute("method", "post");
-        writer.attribute("action", "/app");
-
-        writer.attribute("id", "myform");
-
-        form.setBody(new IRender() {
-            public void render(IMarkupWriter pwriter, IRequestCycle pcycle)
-            {
-                fs.addEventHandler(FormEventType.SUBMIT, "mySubmit()");
-            }
-        });
-
-        support.addInitializationScript(form, "Tapestry.onsubmit('myform', function (event)"
-                                              + "\n{\n  mySubmit();\n});\n");
-
-        render.render(writer, cycle);
-
-        writer.println();
-
-        trainHiddenBlock(cycle, builder, writer, form, "fred", "");
-
-        nested.close();
-
-        writer.end();
-
-        trainGetFocusField(delegate, null);
-
-        expect(cycle.isFocusDisabled()).andReturn(false);
-
-        replay();
-
-        fs.render("post", render, link, null, null);
-
-        verify();
-    }
-
-    private void trainCycleForRewind(IRequestCycle cycle, String allocatedIds, String reservedIds)
-    {
-        trainCycleForRewind(cycle, "submit", allocatedIds, reservedIds);
-    }
-
-    private void trainCycleForRewind(IRequestCycle cycle, String submitMode, String allocatedIds,
-                                     String reservedIds)
-    {
-        trainGetParameter(cycle, FormSupportImpl.SUBMIT_MODE, submitMode);
-        trainGetParameter(cycle, FormSupportImpl.FORM_IDS, allocatedIds);
-        trainGetParameter(cycle, FormSupportImpl.RESERVED_FORM_IDS, reservedIds);
-    }
-
-    protected void trainDiv(IMarkupWriter writer, IForm form)
-    {
-        writer.begin("div");
-        writer.attribute("style", "display:none;");
-        writer.attribute("id", form.getName() + "hidden");
-    }
-
-    private void trainGetFieldFocus(IRequestCycle cycle, Object value)
-    {
-        expect(cycle.getAttribute(FormSupportImpl.FIELD_FOCUS_ATTRIBUTE)).andReturn(value);
-    }
-
-    private void trainGetFocusField(IValidationDelegate delegate, String fieldName)
-    {
-        expect(delegate.getFocusField()).andReturn(fieldName);
-    }
-
-    private void trainGetURL(ILink link, String scheme, String URL, int port)
-    {
-        // This will change shortly, with the new scheme parameter passed into FormSupport.render()
-
-        expect(link.getURL(scheme, null, port, null, false)).andReturn(URL);
-    }
-
-    private void trainGetURL(ILink link, String scheme, String URL)
-    {
-        trainGetURL(link, scheme, URL, 0);
-    }
-
-    private void trainHidden(IMarkupWriter writer, String name, String value)
-    {
-        writer.beginEmpty("input");
-        writer.attribute("type", "hidden");
-        writer.attribute("name", name);
-        writer.attribute("value", value);
-        writer.println();
-    }
-
-    private void trainHidden(IMarkupWriter writer, String name, String id, String value)
-    {
-        writer.beginEmpty("input");
-        writer.attribute("type", "hidden");
-        writer.attribute("name", name);
-        writer.attribute("id", id);
-        writer.attribute("value", value);
-        writer.println();
-    }
-
-    protected void trainHiddenBlock(IRequestCycle cycle, ResponseBuilder builder,
-                                    IMarkupWriter writer, IForm form,
-                                    String serviceName, String formIds)
-    {
-        expect(cycle.getResponseBuilder()).andReturn(builder);
-
-        expect(builder.contains(form)).andReturn(false);
-
-        trainDiv(writer, form);
-
-        trainHidden(writer, "formids", formIds);
-        trainHidden(writer, "service", serviceName);
-        trainHidden(writer, "submitmode", "");
-        trainHidden(writer, FormConstants.SUBMIT_NAME_PARAMETER, "");
-
-        writer.end();
-    }
-
-    protected void trainIsRewound(IRequestCycle cycle, IForm form, boolean isRewound)
-    {
-        expect(cycle.isRewound(form)).andReturn(isRewound);
-    }
-
-    private void trainRegister(PageRenderSupport support, IForm form, String formId)
-    {
-        support.addInitializationScript(form, "dojo.require(\"tapestry.form\");"
-                                              + "tapestry.form.registerForm(\"" + formId + "\");");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormTest.java
deleted file mode 100644
index 619003c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/FormTest.java
+++ /dev/null
@@ -1,389 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.isA;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.RenderRewoundException;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.engine.DirectServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.web.WebResponse;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.Form}. Most of the testing is, still alas, done with
- * mock objects.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class FormTest extends BaseComponentTestCase
-{
-    private IActionListener newListener()
-    {
-        return newMock(IActionListener.class);
-    }
-
-    private FormSupport newFormSupport()
-    {
-        return newMock(FormSupport.class);
-    }
-
-    protected void trainGetUniqueId(IRequestCycle cycle, String baseId, String uniqueId)
-    {
-        expect(cycle.getUniqueId(baseId)).andReturn(uniqueId);
-    }
-
-    protected WebResponse newResponse()
-    {
-        return newMock(WebResponse.class);
-    }
-
-    protected void trainGetNamespace(WebResponse response, String namespace)
-    {
-        expect(response.getNamespace()).andReturn(namespace);
-    }
-
-    protected IValidationDelegate newDelegate()
-    {
-        return newMock(IValidationDelegate.class);
-    }
-
-    public void testRewind()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        FormSupport support = newFormSupport();
-        IValidationDelegate delegate = newDelegate();
-        IActionListener listener = newListener();
-        ListenerInvoker invoker = newListenerInvoker();
-
-        Form form = newInstance(FormFixture.class, new Object[]
-        { "id", "myform", "expectedWriter", writer, "expectedRequestCycle", cycle,
-                "formSupport", support, "listener", listener, "listenerInvoker", invoker,
-                "delegate", delegate });
-
-        expect(cycle.renderStackPush(form)).andReturn(form);
-        
-        trainStoreForm(cycle, form);
-        
-        trainIsRewinding(support, true);
-        
-        expect(support.rewind()).andReturn(FormConstants.SUBMIT_NORMAL);
-        
-        expect(delegate.getHasErrors()).andReturn(false);
-
-        invoker.invokeListener(listener, form, cycle);
-        
-        TapestryUtils.removeForm(cycle);
-        
-        delegate.setFormComponent(null);
-        
-        expect(cycle.renderStackPop()).andReturn(form);
-        
-        replay();
-
-        try
-        {
-            form.render(writer, cycle);
-        }
-        catch (RenderRewoundException ex)
-        {
-            assertSame(form, ex.getComponent());
-        }
-
-        verify();
-    }
-
-    private ListenerInvoker newListenerInvoker()
-    {
-        return newMock(ListenerInvoker.class);
-    }
-
-    public void testBasicRender()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        FormSupport support = newFormSupport();
-        WebResponse response = newResponse();
-        IEngineService direct = newEngineService();
-        ILink link = newLink();
-        IRender render = newRender();
-        IValidationDelegate delegate = newDelegate();
-
-        Form form = newInstance(FormFixture.class, new Object[]
-        { "id", "myform", "expectedWriter", writer, "expectedRequestCycle", cycle,
-                "formSupport", support, "response", response, "directService", direct, "method",
-                "post", "delegate", delegate });
-        
-        expect(cycle.renderStackPush(form)).andReturn(form);
-        
-        trainStoreForm(cycle, form);
-        
-        trainIsRewinding(support, false);
-
-        trainGetNamespace(response, "$ns");
-        
-        trainGetLinkCheckIgnoreParameter(
-                direct,
-                cycle,
-                true,
-                new DirectServiceParameter(form),
-                link);
-
-        trainRender(support, link, render, null, null);
-
-        TapestryUtils.removeForm(cycle);
-
-        delegate.setFormComponent(null);
-            
-        expect(cycle.renderStackPop()).andReturn(form);
-        
-        replay();
-
-        form.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderWithScheme()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        FormSupport support = newFormSupport();
-        WebResponse response = newResponse();
-        IEngineService direct = newEngineService();
-        
-        ILink link = newLink();
-        IRender render = newRender();
-        IValidationDelegate delegate = newDelegate();
-        
-        Form form = newInstance(FormFixture.class, new Object[]
-        { "id", "myform", "expectedWriter", writer, "expectedRequestCycle", cycle,
-                "formSupport", support, "response", response, "directService", direct, "method",
-                "post", "delegate", delegate, "scheme", "https", "port", new Integer(443) });
-        
-        expect(cycle.renderStackPush(form)).andReturn(form);
-        
-        trainStoreForm(cycle, form);
-        
-        trainIsRewinding(support, false);
-        
-        trainGetNamespace(response, "$ns");
-
-        trainGetLinkCheckIgnoreParameter(
-                direct,
-                cycle,
-                true,
-                new DirectServiceParameter(form),
-                link);
-        
-        trainRender(support, link, render, "https", new Integer(443));
-        
-        TapestryUtils.removeForm(cycle);
-        
-        delegate.setFormComponent(null);
-        
-        expect(cycle.renderStackPop()).andReturn(form);
-        
-        replay();
-
-        form.render(writer, cycle);
-
-        verify();
-    }
-
-    protected void trainStoreForm(IRequestCycle cycle, IForm form)
-    {
-        trainGetAttribute(cycle, TapestryUtils.FORM_ATTRIBUTE, null);
-
-        cycle.setAttribute(TapestryUtils.FORM_ATTRIBUTE, form);
-    }
-
-    private void trainRender(FormSupport support, ILink link, IRender render, String scheme, Integer port)
-    {
-        support.render(eq("post"), isA(IRender.class), eq(link), eq(scheme), eq(port));
-    }
-
-    protected void trainIsRewinding(FormSupport support, boolean isRewinding)
-    {
-        expect(support.isRewinding()).andReturn(isRewinding);
-    }
-
-    public void testFindCancelListener()
-    {
-        IActionListener cancel = newListener();
-        IActionListener listener = newListener();
-
-        replay();
-
-        Form form = newInstance(Form.class, new Object[]
-        { "listener", listener, "cancel", cancel });
-
-        assertSame(cancel, form.findListener(FormConstants.SUBMIT_CANCEL));
-
-        verify();
-    }
-
-    public void testFindCancelDefaultListener()
-    {
-        IActionListener listener = newListener();
-
-        replay();
-
-        Form form = (Form) newInstance(Form.class, "listener", listener);
-
-        assertSame(listener, form.findListener(FormConstants.SUBMIT_CANCEL));
-
-        verify();
-    }
-
-    public void testFindRefreshListener()
-    {
-        IActionListener refresh = newListener();
-        IActionListener listener = newListener();
-
-        replay();
-
-        Form form = newInstance(Form.class, new Object[]
-        { "listener", listener, "refresh", refresh });
-
-        assertSame(refresh, form.findListener(FormConstants.SUBMIT_REFRESH));
-
-        verify();
-    }
-
-    public void testFindRefreshListenerDefault()
-    {
-        IActionListener listener = newListener();
-
-        replay();
-
-        Form form = newInstance(Form.class, new Object[]
-        { "listener", listener });
-
-        assertSame(listener, form.findListener(FormConstants.SUBMIT_REFRESH));
-
-        verify();
-    }
-
-    public void testFindListenerSuccess()
-    {
-        IActionListener cancel = newListener();
-        IActionListener refresh = newListener();
-        IActionListener success = newListener();
-        IActionListener listener = newListener();
-
-        IValidationDelegate delegate = newDelegate(false);
-
-        replay();
-
-        Form form = newInstance(Form.class, new Object[]
-        { "delegate", delegate, "success", success, "cancel", cancel, "refresh", refresh,
-                "listener", listener });
-
-        assertSame(success, form.findListener(FormConstants.SUBMIT_NORMAL));
-
-        verify();
-    }
-
-    public void testFindListenerValidationErrors()
-    {
-        IActionListener cancel = newListener();
-        IActionListener refresh = newListener();
-        IActionListener success = newListener();
-        IActionListener listener = newListener();
-
-        IValidationDelegate delegate = newDelegate(true);
-
-        replay();
-        
-        Form form = newInstance(Form.class, new Object[]
-        { "delegate", delegate, "success", success, "cancel", cancel, "refresh", refresh,
-                "listener", listener });
-
-        assertSame(listener, form.findListener(FormConstants.SUBMIT_NORMAL));
-
-        verify();
-    }
-
-    public void test_Focus_Disabled()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        FormSupport support = newFormSupport();
-        WebResponse response = newResponse();
-        IEngineService direct = newEngineService();
-        ILink link = newLink();
-        IRender render = newRender();
-        IValidationDelegate delegate = newDelegate();
-        
-        Form form = newInstance(FormFixture.class, new Object[]
-        { "id", "myform", "expectedWriter", writer, "expectedRequestCycle", cycle,
-                "formSupport", support, "response", response, "directService", direct, "method",
-                "post", "delegate", delegate, "focus", false });
-
-        expect(cycle.renderStackPush(form)).andReturn(form);
-        
-        trainStoreForm(cycle, form);
-        
-        trainIsRewinding(support, false);
-        
-        trainGetNamespace(response, "$ns");
-        
-        trainGetLinkCheckIgnoreParameter(
-                direct,
-                cycle,
-                true,
-                new DirectServiceParameter(form),
-                link);
-        
-        trainRender(support, link, render, null, null);
-        
-        TapestryUtils.removeForm(cycle);
-
-        delegate.setFormComponent(null);
-        
-        expect(cycle.renderStackPop()).andReturn(form);
-        
-        replay();
-
-        form.render(writer, cycle);
-
-        verify();
-    }
-    
-    private IValidationDelegate newDelegate(boolean hasErrors)
-    {
-        IValidationDelegate delegate = newMock(IValidationDelegate.class);
-        
-        expect(delegate.getHasErrors()).andReturn(hasErrors);
-        
-        return delegate;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/LabeledPropertySelectionModelTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/LabeledPropertySelectionModelTest.java
deleted file mode 100644
index b4933fb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/LabeledPropertySelectionModelTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Test case for {@link org.apache.tapestry.form.LabeledPropertySelectionModel}.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-@Test
-public class LabeledPropertySelectionModelTest extends BaseComponentTestCase
-{
-    public void test_Null_Value()
-    {
-        LabeledPropertySelectionModel model = new LabeledPropertySelectionModel();
-        
-        assertEquals(null, model.translateValue(null));
-    }
-
-    public void test_Empty_Model()
-    {
-        LabeledPropertySelectionModel model = new LabeledPropertySelectionModel();
-
-        validateLabel(model, "", null, "");
-
-        assertEquals(model.getOptionCount(), 1);
-    }
-
-    public void test_Default_Labeled_Model()
-    {
-        LabeledPropertySelectionModel model = new LabeledPropertySelectionModel(createInnerModel());
-
-        validateLabel(model, "", null, "");
-
-        validateModel(model);
-    }
-
-    public void test_Labeled_Model()
-    {
-        String label = "Select a value";
-        Object option = null;
-        String value = "-1";
-
-        LabeledPropertySelectionModel model = new LabeledPropertySelectionModel(createInnerModel(),
-                label, option, value);
-
-        assertEquals(label, model.getLabel());
-        assertEquals(option, model.getOption());
-        assertEquals(value, model.getValue());
-
-        validateLabel(model, label, option, value);
-
-        validateModel(model);
-    }
-
-    private void validateLabel(IPropertySelectionModel model, String label, Object option,
-            String value)
-    {
-        assertTrue(model.getOptionCount() > 0);
-
-        assertEquals(model.getLabel(0), label);
-        assertEquals(model.getOption(0), option);
-        assertEquals(model.getValue(0), value);
-        assertEquals(model.translateValue(value), option);
-    }
-
-    private void validateModel(IPropertySelectionModel model)
-    {
-        assertEquals(model.getOptionCount(), 3);
-
-        assertEquals(model.getLabel(1), "true");
-        assertEquals(model.getOption(1), Boolean.TRUE);
-        assertEquals(model.getValue(1), "0");
-        assertEquals(model.translateValue("0"), Boolean.TRUE);
-
-        assertEquals(model.getLabel(2), "false");
-        assertEquals(model.getOption(2), Boolean.FALSE);
-        assertEquals(model.getValue(2), "1");
-        assertEquals(model.translateValue("1"), Boolean.FALSE);
-    }
-
-    private IPropertySelectionModel createInnerModel()
-    {
-        return new IPropertySelectionModel()
-        {
-            private boolean[] values = new boolean[]
-            { true, false };
-
-            public int getOptionCount()
-            {
-                return values.length;
-            }
-
-            public Object getOption(int index)
-            {
-                return Boolean.valueOf(values[index]);
-            }
-
-            public String getLabel(int index)
-            {
-                return Boolean.toString(values[index]);
-            }
-
-            public String getValue(int index)
-            {
-                return Integer.toString(index);
-            }
-
-            public boolean isDisabled(int index)
-            {
-                return false;
-            }
-            
-            public Object translateValue(String value)
-            {
-                return getOption(Integer.parseInt(value));
-            }
-        };
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/LinkSubmitTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/LinkSubmitTest.java
deleted file mode 100644
index a61cac9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/LinkSubmitTest.java
+++ /dev/null
@@ -1,321 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.form;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.Location;

-import org.apache.hivemind.Resource;

-import org.apache.tapestry.*;

-import org.apache.tapestry.engine.DirectServiceParameter;

-import org.apache.tapestry.engine.IEngineService;

-import org.apache.tapestry.engine.ILink;

-import org.apache.tapestry.valid.IValidationDelegate;

-import static org.easymock.EasyMock.*;

-import org.testng.annotations.Test;

-

-import java.util.Arrays;

-import java.util.List;

-import java.util.Map;

-

-/**

- * Tests for {@link org.apache.tapestry.form.LinkSubmit} 

- */

-@Test

-public class LinkSubmitTest extends BaseComponentTestCase

-{

-    private class ScriptFixture implements IScript

-    {

-        public void execute(IRequestCycle cycle, IScriptProcessor processor, Map symbols)

-        {

-            assertNotNull(cycle);

-            assertNotNull(processor);

-            assertNotNull(symbols);

-

-            symbols.put("href", "HREF");

-        }

-

-        public void execute(IComponent target, IRequestCycle cycle, IScriptProcessor processor, Map symbols)

-        {

-            assertNotNull(cycle);

-            assertNotNull(processor);

-            assertNotNull(symbols);

-

-            symbols.put("href", "HREF");

-        }

-        

-        public Resource getScriptResource()

-        {

-            return null;

-        }

-

-    }

-

-    public void test_Render_Normal()

-    {

-        IMarkupWriter writer = newBufferWriter();

-        IRequestCycle cycle = newCycle();

-        IForm form = newForm();

-

-        LinkSubmit linkSubmit = newInstance(LinkSubmit.class,

-                                            "form", form,

-                                            "name", "fred_1",

-                                            "id", "fred_id",

-                                            "clientId", "fred_1", 

-                                            "submitType", FormConstants.SUBMIT_NORMAL);

-

-        expect(form.getClientId()).andReturn("form");

-        trainResponseBuilder(cycle, writer);        

-        linkSubmit.addBody(newBody());

-

-        replay();

-

-        linkSubmit.renderFormComponent(writer, cycle);

-

-        verify();

-

-        assertBuffer("<a href=\"javascript:tapestry.form.submit('form', 'fred_1');\" id=\"fred_1\">BODY</a>");

-    }

-

-    public void test_Render_Disabled()

-    {

-        IMarkupWriter writer = newBufferWriter();

-        IRequestCycle cycle = newCycle();

-

-        IForm form = newForm();

-

-        LinkSubmit linkSubmit = newInstance(LinkSubmit.class,

-                                            "disabled", Boolean.TRUE,

-                                            "form", form,

-                                            "name", "fred_1",

-                                            "id", "fred_id",

-                                            "submitType", FormConstants.SUBMIT_NORMAL);

-        linkSubmit.addBody(newBody());

-

-        trainResponseBuilder(cycle, writer);

-        

-        replay();

-

-        linkSubmit.renderFormComponent(writer, cycle);

-

-        verify();

-

-        assertBuffer("BODY");

-    }

-

-    public void test_Render_Submit_Bindings_True()

-    {

-        IMarkupWriter writer = newBufferWriter();

-        IRequestCycle cycle = newCycle();

-

-        IEngineService engine = newMock(IEngineService.class);

-        ILink link = newMock(ILink.class);

-        

-        IForm form = newForm();

-        List updates = Arrays.asList("comp1", "comp2");

-

-        LinkSubmit linkSubmit = newInstance(LinkSubmit.class,

-                                            "updateComponents", updates,

-                                            "form", form,

-                                            "name", "submitMe",

-                                            "clientId", "submitMe",

-                                            "submitType", FormConstants.SUBMIT_NORMAL,

-                                            "directService", engine);

-

-        expect(form.getClientId()).andReturn("form");

-        linkSubmit.addBody(newBody());

-

-        expect(engine.getLink(eq(true), isA(DirectServiceParameter.class))).andReturn(link);

-        expect(link.getURL()).andReturn("http://submit");

-

-        trainResponseBuilder(cycle, writer);

-

-        replay();

-

-        linkSubmit.renderFormComponent(writer, cycle);

-

-        verify();

-

-        assertBuffer("<a href=\"http://submit\" " +

-                     "onClick=\"tapestry.form.submit('form', 'submitMe'," +

-                     "{async:true,json:false,url:this.href}); return false;\" id=\"submitMe\">BODY</a>");

-    }

-

-    public void test_Prepare_Normal()

-    {

-        IRequestCycle cycle = newCycle();

-

-        trainGetAttribute(cycle, LinkSubmit.ATTRIBUTE_NAME, null);

-

-        LinkSubmit linkSubmit = (LinkSubmit) newInstance(LinkSubmit.class);

-

-        cycle.setAttribute(LinkSubmit.ATTRIBUTE_NAME, linkSubmit);

-

-        replay();

-

-        linkSubmit.prepareForRender(cycle);

-

-        verify();

-    }

-

-    public void test_Prepare_Conflict()

-    {

-        IRequestCycle cycle = newCycle();

-        IPage page = newPage("MyPage");

-        Location bloc = newLocation();

-        Location floc = newLocation();

-        IComponent existing = newComponent("MyPage/barney", bloc);

-

-        trainGetAttribute(cycle, LinkSubmit.ATTRIBUTE_NAME, existing);

-

-        trainGetIdPath(page, null);

-

-        LinkSubmit linkSubmit = newInstance(LinkSubmit.class, "id", "fred", "page", page, "container", page, "location", floc);

-

-        replay();

-

-        try

-        {

-            linkSubmit.prepareForRender(cycle);

-            unreachable();

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assert ex.getMessage()

-            .indexOf("LinkSubmit MyPage/fred may not be enclosed by another LinkSubmit ") > -1;

-            

-            assertSame(linkSubmit, ex.getComponent());

-            assertSame(floc, ex.getLocation());

-        }

-

-        verify();

-    }

-

-    public void test_Cleanup_After_Render()

-    {

-        IRequestCycle cycle = newCycle();

-

-        cycle.removeAttribute(LinkSubmit.ATTRIBUTE_NAME);

-

-        replay();

-

-        LinkSubmit linkSubmit = (LinkSubmit) newInstance(LinkSubmit.class);

-

-        linkSubmit.cleanupAfterRender(cycle);

-

-        verify();

-    }

-

-    public void test_Is_Clicked()

-    {

-        IRequestCycle cycle = newCycle();

-

-        trainGetParameter(cycle, FormConstants.SUBMIT_NAME_PARAMETER, "fred");

-

-        replay();

-

-        LinkSubmit linkSubmit = (LinkSubmit) newInstance(LinkSubmit.class);

-

-        assertEquals(true, linkSubmit.isClicked(cycle, "fred"));

-

-        verify();

-    }

-

-    public void test_Is_Not_Clicked()

-    {

-        IRequestCycle cycle = newCycle();

-

-        trainGetParameter(cycle, FormConstants.SUBMIT_NAME_PARAMETER, null);

-

-        replay();

-

-        LinkSubmit linkSubmit = (LinkSubmit) newInstance(LinkSubmit.class);

-

-        assertEquals(false, linkSubmit.isClicked(cycle, "fred"));

-

-        verify();

-    }

-

-    public void test_Rewind()

-    {

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle();

-        IRender body = newRender();

-        IForm form = newForm();

-        IValidationDelegate delegate = newDelegate();

-

-        LinkSubmit linkSubmit = newInstance(LinkSubmit.class, "name", "fred", "form", form);

-        linkSubmit.addBody(body);

-

-        trainGetForm(cycle, form);

-

-        trainWasPrerendered(form, writer, linkSubmit, false);

-

-        trainGetDelegate(form, delegate);

-

-        delegate.setFormComponent(linkSubmit);

-        

-        trainGetElementId(form, linkSubmit, "fred");

-        

-        trainIsRewinding(form, true);

-        

-        // Finally, code inside LinkSubmit ...

-

-        trainGetParameter(cycle, FormConstants.SUBMIT_NAME_PARAMETER, null);

-

-        // ... and back to AbstractFormComponent

-        

-        trainResponseBuilder(cycle, writer);

-        

-        body.render(writer, cycle);

-

-        replay();

-

-        linkSubmit.renderComponent(writer, cycle);

-

-        verify();

-    }

-

-    private void trainIsRewinding(IForm form, boolean isRewindind)

-    {

-        expect(form.isRewinding()).andReturn(isRewindind);

-    }

-

-    protected void trainGetElementId(IForm form, IFormComponent field, String name)

-    {

-        expect(form.getElementId(field)).andReturn(name);

-    }

-

-    protected void trainGetDelegate(IForm form, IValidationDelegate delegate)

-    {

-        expect(form.getDelegate()).andReturn(delegate);

-    }

-

-    protected void trainWasPrerendered(IForm form, IMarkupWriter writer, IFormComponent field,

-            boolean wasPrendered)

-    {

-        expect(form.wasPrerendered(writer, field)).andReturn(wasPrendered);

-    }

-

-    protected void trainGetForm(IRequestCycle cycle, IForm form)

-    {

-        trainGetAttribute(cycle, TapestryUtils.FORM_ATTRIBUTE, form);

-    }

-

-    protected IValidationDelegate newDelegate()

-    {

-        return newMock(IValidationDelegate.class);

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/MockDelegate.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/MockDelegate.java
deleted file mode 100644
index 2d16330..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/MockDelegate.java
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.util.List;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.valid.IFieldTracking;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.IValidator;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Mock implementation of {@link org.apache.tapestry.valid.IValidationDelegate} used for testing
- * (particularily, to test how the delegate decorates fields and field labels.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class MockDelegate implements IValidationDelegate
-{
-    private static final long serialVersionUID = -1940135823929783031L;
-
-	private IFormComponent _component;
-
-    private String _input;
-
-    private boolean _inError;
-
-    public void registerForFocus(IFormComponent field, int priority)
-    {
-    }
-
-    public MockDelegate()
-    {
-        this(false);
-    }
-
-    public MockDelegate(boolean inError)
-    {
-        _inError = inError;
-    }
-
-    public IFormComponent getFormComponent()
-    {
-        return _component;
-    }
-
-    public void setFormComponent(IFormComponent component)
-    {
-        _component = component;
-    }
-
-    public boolean isInError()
-    {
-        return _inError;
-    }
-
-    public String getFieldInputValue()
-    {
-        return _input;
-    }
-
-    public List getFieldTracking()
-    {
-        return null;
-    }
-
-    public void reset()
-    {
-    }
-
-    public void clear()
-    {
-    }
-
-    public void recordFieldInputValue(String input)
-    {
-        _input = input;
-    }
-
-    public void record(ValidatorException ex)
-    {
-    }
-
-    public void record(String message, ValidationConstraint constraint)
-    {
-    }
-
-    public void record(IRender errorRenderer, ValidationConstraint constraint)
-    {
-    }
-
-    public void writePrefix(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component,
-            IValidator validator)
-    {
-        writer.begin("span");
-        writer.attribute("class", "prefix");
-    }
-
-    public void writeAttributes(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator)
-    {
-        writer.attribute("class", "validation-delegate");
-    }
-
-    public void writeSuffix(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component,
-            IValidator validator)
-    {
-        writer.end();
-    }
-    
-    public void beforeLabelText(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component)
-    {
-    }
-    
-    public void afterLabelText(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component)
-    {
-    }
-    
-    public void writeLabelPrefix(IFormComponent component, IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-    
-    public void writeLabelAttributes(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component) 
-    {
-	}
-
-	public void writeLabelSuffix(IFormComponent component, IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public boolean getHasErrors()
-    {
-        return false;
-    }
-
-    public IFieldTracking getCurrentFieldTracking()
-    {
-        return null;
-    }
-
-    public List getErrorRenderers()
-    {
-        return null;
-    }
-
-    public String getFocusField()
-    {
-        return null;
-    }
-
-    public void clearErrors()
-    {
-    }
-
-    public void record(IFormComponent field, String message)
-    {
-        // TODO Auto-generated method stub
-        
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/MockForm.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/MockForm.java
deleted file mode 100644
index b23a8f9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/MockForm.java
+++ /dev/null
@@ -1,475 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Messages;
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.internal.event.IComponentEventInvoker;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.listener.ListenerMap;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-import java.util.*;
-
-/**
- * Mock object used by the {@link org.apache.tapestry.form.FormSupportTest}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class MockForm implements IForm
-{
-    private Location _location;
-
-    private IRender _body;
-
-    private List _deferredRunnable = new ArrayList();
-
-    private IValidationDelegate _delegate;
-
-    private boolean _focus = true;
-
-    private JSONObject _profile = new JSONObject();
-    
-    private IComponentEventInvoker _invoker;
-    
-    public MockForm()
-    {
-        this(null, null);
-    }
-
-    public MockForm(Location location)
-    {
-        this(null, location);
-    }
-
-    public boolean isPrerendered(IComponent field)
-    {
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void setClientId(String id)
-    {
-    }
-
-    public MockForm(IValidationDelegate delegate)
-    {
-        this(delegate, null);
-    }
-
-    public MockForm(IValidationDelegate delegate, Location location)
-    {
-        _delegate = delegate;
-        _location = location;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getSpecifiedId()
-    {
-        return null;
-    }
-
-    public void rewind(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public void addEventHandler(FormEventType type, String functionName)
-    {
-    }
-
-    public String getElementId(IFormComponent component)
-    {
-        return null;
-    }
-
-    public String getElementId(IFormComponent component, String baseId)
-    {
-        return null;
-    }
-
-    public String peekClientId(IFormComponent component)
-    {
-        return null;
-    }
-    
-    public String getName()
-    {
-        return "myform";
-    }
-
-    public boolean isRewinding()
-    {
-        return false;
-    }
-
-    public IValidationDelegate getDelegate()
-    {
-        return _delegate;
-    }
-
-    public void setEncodingType(String encodingType)
-    {
-    }
-
-    public void addHiddenValue(String name, String value)
-    {
-    }
-
-    public void addHiddenValue(String name, String id, String value)
-    {
-    }
-
-    public boolean getRequiresSession()
-    {
-        return false;
-    }
-
-    public void addAsset(String name, IAsset asset)
-    {
-    }
-
-    public void addComponent(IComponent component)
-    {
-    }
-
-    public void addBody(IRender element)
-    {
-    }
-
-    public String getClientId()
-    {
-        return null;
-    }
-    
-    public Map getAssets()
-    {
-        return null;
-    }
-
-    public IAsset getAsset(String name)
-    {
-        return null;
-    }
-
-    public IBinding getBinding(String name)
-    {
-        return null;
-    }
-
-    public Collection getBindingNames()
-    {
-        return null;
-    }
-
-    public Map getBindings()
-    {
-        return null;
-    }
-
-    public IComponent getComponent(String id)
-    {
-        return null;
-    }
-
-    public IComponent getContainer()
-    {
-        return null;
-    }
-
-    public void setContainer(IComponent value)
-    {
-    }
-
-    public String getExtendedId()
-    {
-        return "SomePage/myform";
-    }
-
-    public String getId()
-    {
-        return null;
-    }
-
-    public void setId(String value)
-    {
-    }
-
-    public String getIdPath()
-    {
-        return null;
-    }
-
-    public IPage getPage()
-    {
-        return null;
-    }
-
-    public void setPage(IPage value)
-    {
-    }
-
-    public IComponentSpecification getSpecification()
-    {
-        return null;
-    }
-
-    public void renderBody(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (_body != null)
-            _body.render(writer, cycle);
-    }
-
-    public void setBinding(String name, IBinding binding)
-    {
-    }
-
-    public Map getComponents()
-    {
-        return null;
-    }
-
-    public void finishLoad(IRequestCycle cycle, IPageLoader loader,
-            IComponentSpecification specification)
-    {
-    }
-
-    public Messages getMessages()
-    {
-        return null;
-    }
-
-    public INamespace getNamespace()
-    {
-        return null;
-    }
-
-    public void setNamespace(INamespace namespace)
-    {
-    }
-
-    public void setProperty(String propertyName, Object value)
-    {
-    }
-
-    public Object getProperty(String propertyName)
-    {
-        return null;
-    }
-
-    public boolean isRendering()
-    {
-        return false;
-    }
-
-    public void enterActiveState()
-    {
-    }
-
-    public IBeanProvider getBeans()
-    {
-        return null;
-    }
-
-    public ListenerMap getListeners()
-    {
-        return null;
-    }
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public void setLocation(Location arg0)
-    {
-    }
-
-    public Location getLocation()
-    {
-        return _location;
-    }
-
-    public void setBody(IRender body)
-    {
-        _body = body;
-    }
-
-    public void prerenderField(IMarkupWriter writer, IComponent field, Location location)
-    {
-    }
-
-    public boolean wasPrerendered(IMarkupWriter writer, IComponent field)
-    {
-        return false;
-    }
-
-    public void addDeferredRunnable(Runnable runnable)
-    {
-        _deferredRunnable.add(runnable);
-    }
-
-    void runDeferred()
-    {
-        Iterator i = _deferredRunnable.iterator();
-        while (i.hasNext())
-        {
-            Runnable r = (Runnable) i.next();
-
-            r.run();
-        }
-    }
-
-    public boolean isClientValidationEnabled()
-    {
-        return false;
-    }
-
-    public String getMessage(String key)
-    {
-        return null;
-    }
-
-    public void registerForFocus(IFormComponent field, int priority)
-    {
-    }
-
-    public boolean getFocus()
-    {
-        return _focus;
-    }
-
-    public void setFocus(boolean focus)
-    {
-        _focus = focus;
-    }
-
-    public IContainedComponent getContainedComponent()
-    {
-        return null;
-    }
-
-    public void setContainedComponent(IContainedComponent containedComponent)
-    {
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public IComponentEventInvoker getEventInvoker()
-    {
-        return _invoker;
-    }
-
-    public void setEventInvoker(IComponentEventInvoker invoker)
-    {
-        _invoker = invoker;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public JSONObject getProfile()
-    {
-        return _profile;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isFormFieldUpdating()
-    {
-        return false;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public void setFormFieldUpdating(boolean value)
-    {
-        
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public List getUpdateComponents()
-    {
-        return Collections.EMPTY_LIST;
-    }
-    
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isAsync()
-    {
-        return false;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isJson()
-    {
-        return false;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public boolean isStateful()
-    {
-        return false;
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public void trigger(IRequestCycle cycle)
-    {
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public String getTemplateTagName()
-    {
-        return "form";
-    }
-    
-    public void setTemplateTagName(String tag)
-    {
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String peekClientId()
-    {
-        return null;
-    }
-
-    public boolean wasPrerendered(IComponent field)
-    {
-        return false;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/SimpleBean.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/SimpleBean.java
deleted file mode 100644
index 08829d6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/SimpleBean.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.form;
-
-
-/**
- * Used by the {@link BeanPropertySelectionModelTest} to test
- * listing/selecting bean properties.
- *
- * @author jkuhnert
- */
-public class SimpleBean
-{
-
-    protected int _id;
-    protected String _name;
-    protected String _description;
-    
-    /** Default constructor. */
-    public SimpleBean() { }
-    
-    /**
-     * Creates a new instance with default values.
-     * @param id
-     * @param name
-     * @param description
-     */
-    public SimpleBean(int id, String name, String description)
-    {
-        _id = id;
-        _name = name;
-        _description = description;
-    }
-    
-    /**
-     * @return Returns the description.
-     */
-    public String getDescription()
-    {
-        return _description;
-    }
-    
-    /**
-     * @return Returns the id.
-     */
-    public int getId()
-    {
-        return _id;
-    }
-    
-    /**
-     * @return Returns the name.
-     */
-    public String getName()
-    {
-        return _name;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestButton.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestButton.java
deleted file mode 100644
index 7177111..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestButton.java
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.testng.annotations.Test;
-
-@Test(sequential=true)
-public class TestButton extends BaseComponentTestCase
-{
-    public void testRender()
-    {
-        Button b = newInstance(Button.class, new Object[]
-        { "name", "assignedName" });
-
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle();
-
-        replay();
-
-        b.renderFormComponent(writer, cycle);
-
-        verify();
-
-        assertBuffer("<button type=\"button\" name=\"assignedName\"></button>");
-    }
-
-    public void testRenderLabel()
-    {
-        Button b = newInstance(Button.class, new Object[]
-        { "name", "assignedName", "label", "Label" });
-
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle();
-
-        replay();
-
-        b.renderFormComponent(writer, cycle);
-
-        verify();
-
-        assertBuffer("<button type=\"button\" name=\"assignedName\">Label</button>");
-    }
-
-    public void testRenderInformalParameters()
-    {
-        Button b = newInstance(Button.class, new Object[]
-        { "name", "assignedName", "specification", new ComponentSpecification() });
-
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle();
-
-        IBinding binding = newBinding("informal-value");
-
-        b.setBinding("informal", binding);
-
-        replay();
-
-        b.renderFormComponent(writer, cycle);
-
-        verify();
-
-        assertBuffer("<button type=\"button\" name=\"assignedName\" informal=\"informal-value\"></button>");
-    }
-
-    public void testRenderWithId()
-    {
-        Button b = newInstance(Button.class, new Object[]
-        { "clientId", "assignedId", "name", "assignedId"});
-        
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle();
-        
-        replay();
-
-        b.renderFormComponent(writer, cycle);
-
-        verify();
-
-        assertBuffer("<button type=\"button\" name=\"assignedId\" id=\"assignedId\"></button>");
-    }
-
-    public void testSubmit()
-    {
-        Button b = (Button) newInstance(Button.class);
-
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-
-        replay();
-
-        b.rewindFormComponent(writer, cycle);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestCheckbox.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestCheckbox.java
deleted file mode 100644
index ecb59ac..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestCheckbox.java
+++ /dev/null
@@ -1,291 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidatorException;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import org.testng.annotations.Test;
-
-/**
- * Tests for the {@link org.apache.tapestry.form.Checkbox} component.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestCheckbox extends BaseFormComponentTestCase
-{
-    
-    public void test_Render_Checked()
-    {
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        
-        Checkbox cb = newInstance(Checkbox.class, 
-                new Object[]{ "name", "assignedName", "value", Boolean.TRUE, 
-            "validatableFieldSupport", vfs });
-        
-        IForm form = newMock(IForm.class);
-        
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle();
-
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(cb)).andReturn(cb);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, cb, false);
-        trainGetDelegate(form, delegate);
-        
-        delegate.setFormComponent(cb);
-        
-        trainGetElementId(form, cb, "barney");
-        
-        trainIsRewinding(form, false);
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        
-        form.setFormFieldUpdating(true);
-
-        delegate.writePrefix(writer, cycle, cb, null);
-        expect(delegate.isInError()).andReturn(false).anyTimes();
-
-        vfs.renderContributions(cb, writer, cycle);
-        delegate.writeSuffix(writer, cycle, cb, null);
-
-        delegate.registerForFocus(cb, ValidationConstants.NORMAL_FIELD);
-        
-        expect(cycle.renderStackPop()).andReturn(cb);
-        
-        replay();
-
-        cb.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<input type=\"checkbox\" name=\"barney\" checked=\"checked\" id=\"barney\" />");
-    }
-
-    public void test_Render_Disabled()
-    {
-        IForm form = newMock(IForm.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        
-        Checkbox cb = newInstance(Checkbox.class, "name", "assignedName", "disabled", Boolean.TRUE,
-                                  "form", form, "validatableFieldSupport", vfs);
-        
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle();
-        
-        IValidationDelegate delegate = newDelegate();
-        
-        trainGetDelegate(form, delegate);
-        delegate.writePrefix(writer, cycle, cb, null);
-        
-        expect(delegate.isInError()).andReturn(false);
-        vfs.renderContributions(cb, writer, cycle);        
-        delegate.writeSuffix(writer, cycle, cb, null);
-        
-        replay();
-
-        cb.renderFormComponent(writer, cycle);
-
-        verify();
-
-        assertBuffer("<input type=\"checkbox\" name=\"assignedName\" disabled=\"disabled\" />");
-    }
-
-    public void test_Render_Informal_Parameters()
-    {
-        IForm form = newMock(IForm.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        
-        Checkbox cb = newInstance(Checkbox.class, "name", "assignedName", "value", Boolean.TRUE, "specification",
-                                  new ComponentSpecification(),
-                                  "form", form, "validatableFieldSupport", vfs);
-        
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle();
-        
-        IBinding binding = newBinding("informal-value");
-
-        cb.setBinding("informal", binding);
-        
-        IValidationDelegate delegate = newDelegate();
-        
-        trainGetDelegate(form, delegate);
-        delegate.writePrefix(writer, cycle, cb, null);
-        
-        expect(delegate.isInError()).andReturn(false).anyTimes();
-        
-        vfs.renderContributions(cb, writer, cycle);
-        
-        delegate.writeSuffix(writer, cycle, cb, null);
-        
-        replay();
-
-        cb.renderFormComponent(writer, cycle);
-
-        verify();
-
-        assertBuffer("<input type=\"checkbox\" name=\"assignedName\" checked=\"checked\" informal=\"informal-value\" />");
-    }
-
-    public void test_Render_With_Id()
-    {
-        IForm form = newMock(IForm.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        
-        Checkbox cb = newInstance(Checkbox.class,
-                                  "id", "foo",
-                                  "clientId", "assignedName",
-                                  "name", "assignedName",
-                                  "value", Boolean.TRUE,
-                                  "form", form,
-                                  "validatableFieldSupport", vfs);
-        
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle();
-        
-        IValidationDelegate delegate = newDelegate();
-        trainGetDelegate(form, delegate);
-        
-        delegate.writePrefix(writer, cycle, cb, null);
-
-        expect(delegate.isInError()).andReturn(false).anyTimes();
-        vfs.renderContributions(cb, writer, cycle);
-        delegate.writeSuffix(writer, cycle, cb, null);
-        
-        replay();
-
-        cb.renderFormComponent(writer, cycle);
-
-        verify();
-        
-        assertBuffer("<input type=\"checkbox\" name=\"assignedName\" checked=\"checked\" id=\"assignedName\" />");
-    }
-
-    public void test_Submit_Null()
-    {
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-    	
-        Checkbox cb = newInstance(Checkbox.class,
-                                  "value", Boolean.TRUE,
-                                  "name", "checkbox",
-                                  "validatableFieldSupport", vfs);
-
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycleGetParameter("checkbox", null);
-
-        try
-        {
-	        vfs.validate(cb, writer, cycle, null);
-        }
-        catch (ValidatorException e)
-        {
-        	unreachable();
-        }
-    	
-        replay();
-
-        cb.rewindFormComponent(writer, cycle);
-        
-        verify();
-
-        assertEquals(false, cb.getValue());
-    }
-
-    @SuppressWarnings("ALL")
-    public void test_Submit_Validate_Failed()
-    {
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        IForm form = newMock(IForm.class);
-        
-        IValidationDelegate delegate = newDelegate();
-        
-        Checkbox cb = newInstance(Checkbox.class,
-                                  "form", form,
-                                  "value", Boolean.FALSE,
-                                  "name", "checkbox",
-                                  "validatableFieldSupport", vfs);
-
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycleGetParameter("checkbox", "foo");
-
-        ValidatorException exception = new ValidatorException("failed");
-        
-        try
-        {
-	        vfs.validate(cb, writer, cycle, "foo");
-            expectLastCall().andThrow(exception);
-	    }
-        catch (ValidatorException e)
-        {
-        	unreachable();
-        }
-        
-        expect(form.getDelegate()).andReturn(delegate);
-        delegate.record(exception);
-        
-        expect(form.getDelegate()).andReturn(delegate);
-        delegate.recordFieldInputValue("false");
-        
-        replay();
-
-        cb.rewindFormComponent(writer, cycle);
-        
-        verify();
-        
-        assertEquals(false, cb.getValue());
-    }
-
-    public void test_Submit_Non_Null()
-    {
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        
-        Checkbox cb = newInstance(Checkbox.class,
-                                  "value", Boolean.FALSE,
-                                  "name", "checkbox",
-                                  "validatableFieldSupport", vfs);
-
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycleGetParameter("checkbox", "foo");
-
-        try
-        {
-        	vfs.validate(cb, writer, cycle, "foo");
-        }
-        catch (ValidatorException e)
-        {
-        	unreachable();
-        }
-        
-        replay();
-
-        cb.rewindFormComponent(writer, cycle);
-
-        verify();
-
-        assertEquals(true, cb.getValue());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestFormComponentContributorContext.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestFormComponentContributorContext.java
deleted file mode 100644
index 08fcf7c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestFormComponentContributorContext.java
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.Locale;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.services.Infrastructure;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.FormComponentContributorContextImpl}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestFormComponentContributorContext extends BaseComponentTestCase
-{
-    private IForm newForm(String name)
-    {
-        IForm form = newMock(IForm.class);
-        checkOrder(form, false);
-        
-        expect(form.getName()).andReturn(name);
-
-        return form;
-    }
-
-    private IFormComponent newField(IForm form)
-    {
-        IFormComponent field = newMock(IFormComponent.class);
-
-        expect(field.getForm()).andReturn(form);
-
-        return field;
-    }
-
-    private ClassResolver newResolver()
-    {
-        return newMock(ClassResolver.class);
-    }
-
-    private Infrastructure newInfrastructure(ClassResolver resolver)
-    {
-        Infrastructure inf = newMock(Infrastructure.class);
-
-        expect(inf.getClassResolver()).andReturn(resolver);
-
-        return inf;
-    }
-
-    public void testIncludeClasspathScript()
-    {
-        IForm form = newForm("myform");
-        IFormComponent field = newField(form);
-        ClassResolver resolver = newResolver();
-
-        IRequestCycle cycle = newCycle();
-
-        Infrastructure inf = newInfrastructure(resolver);
-
-        expect(cycle.getInfrastructure()).andReturn(inf);
-
-        PageRenderSupport prs = newSupport();
-
-        Resource expected = new ClasspathResource(resolver, "/foo.js");
-
-        prs.addExternalScript(form, expected);
-
-        trainGetAttribute(cycle, TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE, prs);
-
-        replay();
-
-        FormComponentContributorContext context = new FormComponentContributorContextImpl(
-                Locale.ENGLISH, cycle, field);
-
-        context.includeClasspathScript("/foo.js");
-
-        verify();
-    }
-
-    public void testAddSubmitHandler()
-    {
-
-        IForm form = newForm("myform");
-        IFormComponent field = newField(form);
-        ClassResolver resolver = newResolver();
-        
-        IRequestCycle cycle = newCycle();
-        Infrastructure inf = newInfrastructure(resolver);
-
-        expect(cycle.getInfrastructure()).andReturn(inf);
-
-        PageRenderSupport prs = newSupport();
-
-        prs.addInitializationScript(form, "Tapestry.onsubmit('myform', foo);");
-
-        trainGetAttribute(cycle, TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE, prs);
-
-        replay();
-
-        FormComponentContributorContext context = new FormComponentContributorContextImpl(
-                Locale.ENGLISH, cycle, field);
-
-        context.addSubmitHandler("foo");
-
-        verify();
-    }
-
-    private PageRenderSupport newSupport()
-    {
-        return newMock(PageRenderSupport.class);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestHidden.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestHidden.java
deleted file mode 100644
index 0fc51e9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestHidden.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright Oct 21, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.form;
-
-import static org.easymock.EasyMock.*;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.DataSqueezer;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link Hidden}.
- */
-@Test
-public class TestHidden extends BaseFormComponentTestCase
-{
-
-    public void test_Render()
-    {   
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-        DataSqueezer squeezer = newMock(DataSqueezer.class);
-        
-        IMarkupWriter writer = newMarkupWriter();
-
-        MockDelegate delegate = new MockDelegate();
-        
-        Hidden component = newInstance(Hidden.class, new Object[]
-        { "name", "fred", "value", new Integer(10), 
-            "encode", Boolean.TRUE, "dataSqueezer", squeezer });
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-        
-        delegate.setFormComponent(component);
-        
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-        
-        form.setFormFieldUpdating(true);
-        
-        expect(squeezer.squeeze(10)).andReturn("i10");
-        
-        delegate.setFormComponent(component);
-        
-        form.addHiddenValue("fred", "fred", "i10");
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestImageSubmit.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestImageSubmit.java
deleted file mode 100644
index bc2e595..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestImageSubmit.java
+++ /dev/null
@@ -1,444 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.awt.Point;
-
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.test.Creator;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.ImageSubmit}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestImageSubmit extends BaseFormComponentTestCase
-{
-    protected IAsset newAsset(IRequestCycle cycle, String imageURL)
-    {
-        IAsset asset = newMock(IAsset.class);
-        checkOrder(asset, false);
-        
-        expect(asset.buildURL()).andReturn(imageURL);
-
-        return asset;
-    }
-
-    public void testPrerendered()
-    {
-        Creator creator = new Creator();
-        ImageSubmit submit = (ImageSubmit) creator.newInstance(ImageSubmit.class);
-
-        IForm form = newMock(IForm.class);
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, true);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void testRender()
-    {
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-        IAsset image = newAsset(cycle, "image-url");
-        
-        Creator creator = new Creator();
-        ImageSubmit submit = (ImageSubmit) creator.newInstance(ImageSubmit.class, new Object[]
-        { "image", image , "submitType", "submit"});
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        trainGetDelegate(form, delegate);
-        
-        delegate.setFormComponent(submit);
-        
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, false);
-
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        writer.beginEmpty("input");
-        writer.attribute("type", "image");
-        writer.attribute("name", "fred");        
-        writer.attribute("src", "image-url");
-        
-        writer.attribute("id", "fred");
-        
-        writer.closeTag();
-        
-        trainIsInError(delegate, false);
-
-        delegate.registerForFocus(submit, ValidationConstants.NORMAL_FIELD);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderDisabled()
-    {
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-        
-        IAsset image = newAsset(cycle, "disabled-image-url");
-
-        Creator creator = new Creator();
-        ImageSubmit submit = (ImageSubmit) creator.newInstance(ImageSubmit.class, new Object[]
-        { "disabledImage", image, "disabled", Boolean.TRUE, "submitType", "submit" });
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        expect(form.getDelegate()).andReturn(delegate);
-        
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, false);
-
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        writer.beginEmpty("input");
-        writer.attribute("type", "image");
-        writer.attribute("name", "fred");
-        writer.attribute("disabled", "disabled");        
-        writer.attribute("src", "disabled-image-url");
-        
-        writer.attribute("id", "fred");
-        
-        writer.closeTag();
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderDisabledNoDisabledImage()
-    {
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-        
-        IAsset image = newAsset(cycle, "image-url");
-
-        Creator creator = new Creator();
-        ImageSubmit submit = (ImageSubmit) creator.newInstance(ImageSubmit.class, new Object[]
-        { "image", image, "disabled", Boolean.TRUE, "submitType", "submit" });
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        expect(form.getDelegate()).andReturn(delegate);
-
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, false);
-
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        writer.beginEmpty("input");
-        writer.attribute("type", "image");
-        writer.attribute("name", "fred");
-        writer.attribute("disabled", "disabled");        
-        writer.attribute("src", "image-url");
-        
-        writer.attribute("id", "fred");
-        
-        writer.closeTag();
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderWithNameOverride()
-    {
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-        
-        IAsset image = newAsset(cycle, "image-url");
-
-        Creator creator = new Creator();
-        ImageSubmit submit = (ImageSubmit) creator.newInstance(ImageSubmit.class, new Object[]
-        { "image", image, "nameOverride", "barney", "submitType", "submit" });
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        expect(form.getDelegate()).andReturn(delegate);
-
-        delegate.setFormComponent(submit);
-
-        expect(form.getElementId(submit, "barney")).andReturn("barney$0");
-        
-        trainIsRewinding(form, false);
-
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        writer.beginEmpty("input");
-        writer.attribute("type", "image");
-        writer.attribute("name", "barney$0");        
-        writer.attribute("src", "image-url");
-        writer.closeTag();
-
-        trainIsInError(delegate, false);
-
-        delegate.registerForFocus(submit, ValidationConstants.NORMAL_FIELD);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void testRewindingDisabled()
-    {
-        Creator creator = new Creator();
-        ImageSubmit submit = (ImageSubmit) creator.newInstance(ImageSubmit.class, new Object[]
-        { "disabled", Boolean.TRUE });
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-        
-        expect(form.getDelegate()).andReturn(delegate);
-
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, true);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void testRewindNotTrigger()
-    {
-        Creator creator = new Creator();
-        ImageSubmit submit = (ImageSubmit) creator.newInstance(ImageSubmit.class);
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        expect(form.getDelegate()).andReturn(delegate);
-
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "fred.x", null);
-        trainGetParameter(cycle, FormConstants.SUBMIT_NAME_PARAMETER, "peebles");
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void testRewindTrigger()
-    {
-        Creator creator = new Creator();
-        ImageSubmit submit = (ImageSubmit) creator.newInstance(ImageSubmit.class, new Object[]
-        { "tag", "clicked" });
-
-        IBinding binding = newBinding();
-        submit.setBinding("selected", binding);
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        expect(form.getDelegate()).andReturn(delegate);
-
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "fred.x", "33");
-        trainGetParameter(cycle, FormConstants.SUBMIT_NAME_PARAMETER, "fred");
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        assertEquals("clicked", PropertyUtils.read(submit, "selected"));
-
-        // Note: we rely on the fact that ImageSubmit subclasses
-        // from Submit to test some of the extra logic about
-        // notifying listeners (deferred or not).
-        // This test "proves" that Submit.handleClick() is invoked.
-
-        verify();
-    }
-    
-    public void testRewindTriggerAsync()
-    {
-        Creator creator = new Creator();
-        ImageSubmit submit = (ImageSubmit) creator.newInstance(ImageSubmit.class, new Object[]
-        { "tag", "clicked" });
-
-        IBinding binding = newBinding();
-        submit.setBinding("selected", binding);
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        expect(form.getDelegate()).andReturn(delegate);
-
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "fred.x", null);
-        trainGetParameter(cycle, FormConstants.SUBMIT_NAME_PARAMETER, "fred");
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        assertEquals("clicked", PropertyUtils.read(submit, "selected"));
-
-        verify();
-    }
-
-    public void testRewindTriggeredWithPointBound()
-    {
-        // Note: because there isn't a real Form to set the name, we'll do it here.
-
-        Creator creator = new Creator();
-        ImageSubmit submit = (ImageSubmit) creator.newInstance(ImageSubmit.class, new Object[]
-        { "tag", "clicked", "name", "fred" });
-
-        IBinding binding = newBinding();
-        submit.setBinding("selected", binding);
-        submit.setBinding("point", binding);
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        expect(form.getDelegate()).andReturn(delegate);
-
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "fred.x", "33");
-        trainGetParameter(cycle, "fred.x", "33");
-        trainGetParameter(cycle, "fred.y", "19");
-        trainGetParameter(cycle, FormConstants.SUBMIT_NAME_PARAMETER, "fred");
-        
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        assertEquals("clicked", PropertyUtils.read(submit, "selected"));
-        assertEquals(new Point(33, 19), PropertyUtils.read(submit, "point"));
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestListEditMap.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestListEditMap.java
deleted file mode 100644
index 13caef5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestListEditMap.java
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.spec.BeanLifecycle;
-import org.testng.annotations.Test;
-
-/**
- * Suite of tests for {@link org.apache.tapestry.form.ListEditMap}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-@Test
-public class TestListEditMap extends TapestryTestCase
-{
-
-    private ListEditMap create()
-    {
-        ListEditMap m = new ListEditMap();
-
-        m.add("request", BeanLifecycle.REQUEST);
-        m.add("page", BeanLifecycle.PAGE);
-        m.add("render", BeanLifecycle.RENDER);
-
-        return m;
-    }
-
-    public void testAdd()
-    {
-        ListEditMap m = create();
-
-        assertEquals("render", m.getKey());
-
-        checkList("keys", new Object[]
-        { "request", "page", "render" }, m.getKeys());
-        checkList("all values", new Object[]
-        { BeanLifecycle.REQUEST, BeanLifecycle.PAGE, BeanLifecycle.RENDER }, m.getAllValues());
-        checkList("all values", new Object[]
-        { BeanLifecycle.REQUEST, BeanLifecycle.PAGE, BeanLifecycle.RENDER }, m.getValues());
-
-        assertTrue(m.getDeletedKeys().isEmpty());
-    }
-
-    public void testGet()
-    {
-        ListEditMap m = create();
-
-        m.setKey("page");
-
-        assertEquals("page", m.getKey());
-        assertSame(BeanLifecycle.PAGE, m.getValue());
-    }
-
-    public void testGetUnknown()
-    {
-        ListEditMap m = create();
-
-        m.setKey("unknown");
-
-        assertNull(m.getValue());
-    }
-
-    public void testMarkDeleted()
-    {
-        ListEditMap m = create();
-
-        m.setKey("page");
-
-        assertEquals(false, m.isDeleted());
-
-        m.setDeleted(true);
-
-        assertEquals(true, m.isDeleted());
-
-        checkList("all values", new Object[]
-        { BeanLifecycle.REQUEST, BeanLifecycle.PAGE, BeanLifecycle.RENDER }, m.getAllValues());
-
-        checkList("undeleted values", new Object[]
-        { BeanLifecycle.REQUEST, BeanLifecycle.RENDER }, m.getValues());
-
-        checkList("deleted keys", new Object[]
-        { "page" }, m.getDeletedKeys());
-    }
-
-    public void testMarkAlreadyDeleted()
-    {
-        ListEditMap m = create();
-
-        m.setKey("page");
-
-        assertEquals(false, m.isDeleted());
-
-        m.setDeleted(false);
-
-        assertEquals(false, m.isDeleted());
-    }
-
-    public void testMarkMultipleDeleted()
-    {
-        ListEditMap m = create();
-
-        m.setKey("page");
-        m.setDeleted(true);
-
-        m.setKey("render");
-        assertEquals(false, m.isDeleted());
-        m.setDeleted(true);
-
-        assertEquals(true, m.isDeleted());
-
-        checkList("undeleted values", new Object[]
-        { BeanLifecycle.REQUEST }, m.getValues());
-    }
-
-    public void testDeleteUndelete()
-    {
-        ListEditMap m = create();
-
-        m.setKey("page");
-        m.setDeleted(true);
-        m.setDeleted(false);
-
-        m.setKey("render");
-        m.setDeleted(true);
-
-        checkList("undeleted values", new Object[]
-        { BeanLifecycle.REQUEST, BeanLifecycle.PAGE }, m.getValues());
-    }
-
-    /** @since 4.0 */
-
-    public void testPurgeDeletedKeys()
-    {
-        ListEditMap m = create();
-
-        m.setKey("render");
-        m.setDeleted(true);
-
-        checkList("deleted keys before purge", new Object[]
-        { "render" }, m.getDeletedKeys());
-
-        m.purgeDeletedKeys();
-
-        checkList("all values after purge", new Object[]
-        { BeanLifecycle.REQUEST, BeanLifecycle.PAGE }, m.getAllValues());
-        checkList("keys after purge", new Object[]
-        { "request", "page" }, m.getKeys());
-
-        assertTrue(m.getDeletedKeys().isEmpty());
-
-        m.purgeDeletedKeys();
-
-        checkList("all values after second purge", new Object[]
-        { BeanLifecycle.REQUEST, BeanLifecycle.PAGE }, m.getAllValues());
-        checkList("keys after second purge", new Object[]
-        { "request", "page" }, m.getKeys());
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestPropertySelection.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestPropertySelection.java
deleted file mode 100644
index 62ba987..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestPropertySelection.java
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidatorException;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests {@link PropertySelection}.
- * 
- */
-@Test(sequential = true)
-public class TestPropertySelection extends BaseFormComponentTestCase
-{
-    private static final String SYSTEM_NEWLINE= (String)java.security.AccessController.doPrivileged(
-            new sun.security.action.GetPropertyAction("line.separator"));
-    
-    public void test_Rewind()
-    {
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-
-        IPropertySelectionModel model = new StringPropertySelectionModel(new String[] { "One", "Two", "Three" });
-        
-        PropertySelection component = newInstance(PropertySelection.class, 
-                new Object[]  { 
-            "validatableFieldSupport", vfs,
-            "model", model
-        });
-        
-        IRequestCycle cycle = newCycle();
-        
-        IForm form = newMock(IForm.class);
-        
-        IMarkupWriter writer = newWriter();
-        
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, true);
-        
-        trainGetParameter(cycle, "barney", "1");
-        
-        try
-        {
-            vfs.validate(component, writer, cycle, model.translateValue("1"));
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-        
-        assertEquals(component.getValue(), "Two");
-    }
-    
-    public void test_Render()
-    {
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-
-        IPropertySelectionModel model = new StringPropertySelectionModel(new String[] { "One", "Two", "Three" }, 
-                new boolean[] {false, false, true});
-        
-        PropertySelection component = newInstance(PropertySelection.class,
-                                                  "id", "hannah",
-                                                  "validatableFieldSupport", vfs,
-                                                  "model", model,
-                                                  "value", "One",
-                                                  "optionRenderer", DefaultOptionRenderer.DEFAULT_INSTANCE);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-        
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "hannah");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-        
-        form.setFormFieldUpdating(true);
-        
-        delegate.setFormComponent(component);
-        vfs.renderContributions(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><select name=\"hannah\" id=\"hannah\" class=\"validation-delegate\">" + SYSTEM_NEWLINE +
-                "<option value=\"0\" selected=\"selected\">One</option>" + SYSTEM_NEWLINE +
-                "<option value=\"1\">Two</option>" + SYSTEM_NEWLINE +
-                "<option value=\"2\" disabled=\"true\">Three</option>" + SYSTEM_NEWLINE +
-                "</select></span>");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java
deleted file mode 100644
index 41bf840..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java
+++ /dev/null
@@ -1,656 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.DirectServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.listener.ListenerInvokerTerminator;
-import org.apache.tapestry.test.Creator;
-import org.apache.tapestry.util.ScriptUtils;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidationConstants;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.util.*;
-
-/**
- * Tests for {@link org.apache.tapestry.form.Submit}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestSubmit extends BaseFormComponentTestCase
-{
-    public void test_Prerendered()
-    {
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class);
-
-        IForm form = newMock(IForm.class);
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, true);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Render()
-    {
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[] {"submitType", "submit"});
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        trainGetDelegate(form, delegate);
-        
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, false);
-
-        trainIsRewinding(cycle, false);
-        
-        form.setFormFieldUpdating(true);
-        
-        writer.beginEmpty("input");
-        writer.attribute("type", "submit");
-        writer.attribute("name", "fred");
-        writer.attribute("id", "fred");
-        writer.closeTag();
-
-        trainIsInError(delegate, false);
-
-        delegate.registerForFocus(submit, ValidationConstants.NORMAL_FIELD);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Render_Function_Hash()
-    {
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[] {"submitType", "submit"});
-        
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        trainGetDelegate(form, delegate);
-        
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, false);
-
-        trainIsRewinding(cycle, false);
-        
-        form.setFormFieldUpdating(true);
-        
-        writer.beginEmpty("input");
-        writer.attribute("type", "submit");
-        writer.attribute("name", "fred");
-        writer.attribute("id", "fred");
-        writer.closeTag();
-
-        trainIsInError(delegate, false);
-
-        delegate.registerForFocus(submit, ValidationConstants.NORMAL_FIELD);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-        
-        String hash = ScriptUtils.functionHash("onchange" + submit.hashCode());
-        
-        assertEquals(ScriptUtils.functionHash("onchange" + submit.hashCode()), hash);
-        
-        verify();
-    }
-    
-    public void test_Render_Disabled()
-    {
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[]
-        { "disabled", Boolean.TRUE, "submitType", "submit" });
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, false);
-
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        writer.beginEmpty("input");
-        writer.attribute("type", "submit");
-        writer.attribute("name", "fred");
-        writer.attribute("disabled", "disabled");
-        writer.attribute("id", "fred");
-        writer.closeTag();
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Render_With_Label()
-    {
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[]
-        { "label", "flintstone", "submitType", "submit" });
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(submit);
-        
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, false);
-        
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        writer.beginEmpty("input");
-        writer.attribute("type", "submit");
-        writer.attribute("name", "fred");
-        writer.attribute("value", "flintstone");
-        writer.attribute("id", "fred");
-        writer.closeTag();
-
-        trainIsInError(delegate, false);
-
-        delegate.registerForFocus(submit, ValidationConstants.NORMAL_FIELD);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void test_SubmitType_OnClick()
-    {
-        IScript script = newMock(IScript.class);
-        Submit submit = newInstance(Submit.class, 
-                new Object[] {"submitType", "cancel", "submitScript", script});
-        
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        trainGetDelegate(form, delegate);
-        
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, false);
-
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        writer.beginEmpty("input");
-        writer.attribute("type", "submit");
-        writer.attribute("name", "fred");
-        writer.attribute("id", "fred");
-        
-        expect(form.getClientId()).andReturn("formtest");
-        
-        writer.attribute("onClick", "tapestry.form.cancel('formtest','fred')");
-        
-        writer.closeTag();
-
-        trainIsInError(delegate, false);
-
-        delegate.registerForFocus(submit, ValidationConstants.NORMAL_FIELD);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-    
-    public void test_SubmitType_OnClick_Disabled()
-    {
-        Submit submit = newInstance(Submit.class, new Object[] {
-            "disabled", Boolean.TRUE
-            });
-        
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        trainGetDelegate(form, delegate);
-        
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, false);
-
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        writer.beginEmpty("input");
-        writer.attribute("type", "submit");
-        writer.attribute("name", "fred");
-        writer.attribute("disabled", "disabled");
-        writer.attribute("id", "fred");
-        writer.closeTag();
-        
-        replay();
-        
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-    
-    public void test_SubmitType_Script_OnClick()
-    {
-        IScript script = newMock(IScript.class);
-        IForm form = newForm();
-        IBinding binding = newMock(IBinding.class);
-        
-        Submit submit = newInstance(Submit.class, 
-                new Object[] {"submitType", "cancel", 
-            "submitScript", script, "form", form});
-        
-        submit.setBinding("onClick", binding);
-        
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-        
-        PageRenderSupport prs = newPageRenderSupport();
-        trainGetPageRenderSupport(cycle, prs);
-        
-        script.execute(eq(submit), eq(cycle), eq(prs), isA(Map.class));
-        
-        replay();
-        
-        submit.renderSubmitBindings(writer, cycle);
-
-        verify();
-    }
-    
-    public void test_Submit_Async()
-    {
-        List updates = new ArrayList();
-        updates.add("bsComponent");
-        
-        IScript script = newMock(IScript.class);
-        IForm form = newForm();
-        IBinding binding = newMock(IBinding.class);
-        
-        IEngineService engine = newEngineService();
-        ILink link = newMock(ILink.class);
-        
-        Submit submit = newInstance(Submit.class,
-                                    "submitType", "cancel",
-                                    "submitScript", script, "form", form,
-                                    "async", true, "updateComponents", updates,
-                                    "directService", engine);
-        
-        submit.setBinding("onClick", binding);
-        
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-        
-        expect(engine.getLink(eq(true), isA(DirectServiceParameter.class))).andReturn(link);
-        expect(link.getURL()).andReturn("/test/url");
-        
-        PageRenderSupport prs = newPageRenderSupport();
-        trainGetPageRenderSupport(cycle, prs);
-        
-        script.execute(eq(submit), eq(cycle), eq(prs), isA(Map.class));
-        
-        replay();
-        
-        submit.renderSubmitBindings(writer, cycle);
-
-        verify();
-    }
-    
-    public void test_Rewinding_Disabled()
-    {
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[]
-        { "disabled", Boolean.TRUE });
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        expect(form.getDelegate()).andReturn(delegate);
-        
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, true);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Rewind_Not_Form()
-    {
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class);
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        expect(form.getDelegate()).andReturn(delegate);
-        
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, true);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Rewind_Not_Trigger()
-    {
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class);
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        expect(form.getDelegate()).andReturn(delegate);
-        
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "fred", null);
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Rewind_Triggered()
-    {
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[]
-        { "tag", "clicked" });
-
-        IBinding binding = newBinding();
-        submit.setBinding("selected", binding);
-
-        IValidationDelegate delegate = newDelegate();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = newWriter();
-
-        trainGetForm(cycle, form);
-
-        trainWasPrerendered(form, writer, submit, false);
-
-        expect(form.getDelegate()).andReturn(delegate);
-
-        delegate.setFormComponent(submit);
-
-        trainGetElementId(form, submit, "fred");
-
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "fred", "flintstone");
-
-        replay();
-
-        submit.renderComponent(writer, cycle);
-
-        assertEquals("clicked", PropertyUtils.read(submit, "selected"));
-
-        verify();
-    }
-
-    public void test_Trigger_With_Listener()
-    {
-        IActionListener listener = newListener();
-        IForm form = newForm();
-        IRequestCycle cycle = newCycle();
-
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[]
-        { "listener", listener, "listenerInvoker", new ListenerInvokerTerminator() });
-
-        listener.actionTriggered(submit, cycle);
-
-        replay();
-
-        submit.handleClick(cycle, form);
-
-        verify();
-    }
-
-    public void test_Trigger_With_Action()
-    {
-        IActionListener action = newListener();
-        MockForm form = new MockForm();
-        IRequestCycle cycle = newCycle();
-
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[]
-        { "action", action, "listenerInvoker",
-                new ListenerInvokerTerminator() });
-
-        replay();
-
-        submit.handleClick(cycle, form);
-
-        verify();
-
-        action.actionTriggered(submit, cycle);
-
-        replay();
-
-        form.runDeferred();
-
-        verify();
-    }
-
-    public void test_Trigger_With_Action_And_Single_Parameter()
-    {
-        IActionListener action = newListener();
-        MockForm form = new MockForm();
-        IRequestCycle cycle = newCycle();
-        
-        Object parameter = new Object();
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[]
-        { "action", action, "parameters", parameter, "listenerInvoker",
-                new ListenerInvokerTerminator() });
-        
-        cycle.setListenerParameters(aryEq(new Object[] { parameter }));
-
-        replay();
-
-        submit.handleClick(cycle, form);
-
-        verify();
-
-        action.actionTriggered(submit, cycle);
-
-        replay();
-
-        form.runDeferred();
-
-        verify();
-    }
-
-    public void test_Trigger_With_Action_And_Multiple_Parameters()
-    {
-        IActionListener action = newListener();
-        MockForm form = new MockForm();
-        IRequestCycle cycle = newCycle();
-
-        Collection parameters = new LinkedList();
-        parameters.add("p1");
-        parameters.add("p2");
-
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[]
-        { "action", action, "parameters", parameters, "listenerInvoker",
-                new ListenerInvokerTerminator() });
-
-        cycle.setListenerParameters(aryEq(new Object[]{ "p1", "p2" }));
-
-        replay();
-
-        submit.handleClick(cycle, form);
-
-        verify();
-
-        action.actionTriggered(submit, cycle);
-
-        replay();
-
-        form.runDeferred();
-
-        verify();
-    }
-    
-    public void test_Trigger_With_Listener_And_Action()
-    {
-        IActionListener listener = newListener();
-        IActionListener action = newListener();
-        
-        MockForm form = new MockForm();
-        IRequestCycle cycle = newCycle();
-
-        Creator creator = new Creator();
-        Submit submit = (Submit) creator.newInstance(Submit.class, new Object[]
-        { "listener", listener, "action", action, "listenerInvoker",
-                new ListenerInvokerTerminator() });
-
-        listener.actionTriggered(submit, cycle);
-        
-        replay();
-
-        submit.handleClick(cycle, form);
-
-        verify();
-
-        action.actionTriggered(submit, cycle);
-
-        replay();
-
-        form.runDeferred();
-
-        verify();
-    }
-   
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestTextArea.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestTextArea.java
deleted file mode 100644
index 9a8653c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestTextArea.java
+++ /dev/null
@@ -1,479 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidatorException;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.TextArea}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestTextArea extends BaseFormComponentTestCase
-{
-    public void testRewind()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-
-        TextArea component = newInstance(TextArea.class, new Object[]
-        { "translatedFieldSupport", tfs, "validatableFieldSupport", vfs });
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "barney", " text area value ");
-
-        try
-        {
-            expect(tfs.parse(component, " text area value ")).andReturn("text area value");
-        
-            vfs.validate(component, writer, cycle, "text area value");
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-        
-        assertEquals("text area value", component.getValue());
-    }
-
-    @SuppressWarnings("ALL")
-    public void testRewindTranslateFailed()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-
-        TextArea component = newInstance(TextArea.class, "translatedFieldSupport", tfs, "validatableFieldSupport", vfs);
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "barney", " text area value ");
-
-        ValidatorException exception = new ValidatorException("test");
-        
-        try
-        {
-            expect(tfs.parse(component, " text area value ")).andThrow(exception);
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        
-        delegate.record(exception);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-        
-        verify();
-        
-        assertNull(component.getValue());
-    }
-
-    @SuppressWarnings("ALL")
-    public void testRewindValidateFailed()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-
-        TextArea component = newInstance(TextArea.class, "translatedFieldSupport", tfs, "validatableFieldSupport", vfs);
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "barney", " text area value ");
-
-        ValidatorException exception = new ValidatorException("test");
-        
-        try
-        {
-            expect(tfs.parse(component, " text area value ")).andReturn("text area value");
-            
-            vfs.validate(component, writer, cycle, "text area value");
-            expectLastCall().andThrow(exception);
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        
-        delegate.record(exception);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-        
-        verify();
-        
-        assertNull(component.getValue());
-    }
-
-    public void testWasPrerendered()
-    {
-        TextArea component = (TextArea) newInstance(TextArea.class);
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, true);
-
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRewindNotForm()
-    {
-        TextArea component = (TextArea) newInstance(TextArea.class);
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, true);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRewindDisabled()
-    {
-        TextArea component = (TextArea) newInstance(TextArea.class, "disabled", Boolean.TRUE);
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, true);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        assertNull(component.getValue());
-
-        verify();
-    }
-
-    public void testRender()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-
-        TextArea component = newInstance(TextArea.class,
-                                         "name", "fred",
-                                         "translatedFieldSupport", tfs,
-                                         "validatableFieldSupport", vfs,
-                                         "value", " text area value ");
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        delegate.setFormComponent(component);
-
-        expect(tfs.format(component, " text area value ")).andReturn("text area value");
-        tfs.renderContributions(component, writer, cycle);
-        vfs.renderContributions(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><textarea name=\"fred\" id=\"fred\" class=\"validation-delegate\">text area value</textarea></span>");
-    }
-
-    public void testRenderDisabled()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-
-        TextArea component = newInstance(TextArea.class,
-                                         "name", "fred",
-                                         "translatedFieldSupport", tfs,
-                                         "validatableFieldSupport", vfs,
-                                         "value", " text area value ",
-                                         "disabled", Boolean.TRUE);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        delegate.setFormComponent(component);
-        
-        expect(tfs.format(component, " text area value ")).andReturn("text area value");
-        tfs.renderContributions(component, writer, cycle);
-        vfs.renderContributions(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><textarea name=\"fred\" disabled=\"disabled\" id=\"fred\" class=\"validation-delegate\">text area value</textarea></span>");
-    }
-
-    public void testRenderWithInformalParameters()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-
-        IBinding binding = newBinding("informal-value");
-
-        TextArea component = newInstance(TextArea.class,
-                                         "name", "fred",
-                                         "translatedFieldSupport", tfs,
-                                         "validatableFieldSupport", vfs,
-                                         "value", " text area value ",
-                                         "specification", new ComponentSpecification());
-
-        component.setBinding("informal", binding);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        delegate.setFormComponent(component);
-
-        expect(tfs.format(component, " text area value ")).andReturn("text area value");
-        
-        tfs.renderContributions(component, writer, cycle);
-        vfs.renderContributions(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><textarea name=\"fred\" id=\"fred\" class=\"validation-delegate\" informal=\"informal-value\">text area value</textarea></span>");
-    }
-
-    public void testRenderNullValue()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-
-        TextArea component = newInstance(TextArea.class,
-                                         "name", "fred",
-                                         "translatedFieldSupport", tfs,
-                                         "validatableFieldSupport", vfs);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        delegate.setFormComponent(component);
-
-        expect(tfs.format(component, null)).andReturn("");        
-        tfs.renderContributions(component, writer, cycle);
-        vfs.renderContributions(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><textarea name=\"fred\" id=\"fred\" class=\"validation-delegate\"></textarea></span>");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestTextField.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestTextField.java
deleted file mode 100644
index 358f7df..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestTextField.java
+++ /dev/null
@@ -1,556 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidatorException;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.TextField}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestTextField extends BaseFormComponentTestCase
-{
-    public void testRewind()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-
-        TextField component = newInstance(TextField.class, new Object[]
-        { "translatedFieldSupport", tfs, "validatableFieldSupport", vfs });
-        
-        IRequestCycle cycle = newCycle();
-        
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-        
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "barney", "10");
-
-        Integer value = new Integer(10);
-        
-        try
-        {
-            expect(tfs.parse(component, "10")).andReturn(value);
-        
-            vfs.validate(component, writer, cycle, value);
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-        
-        assertEquals(value, component.getValue());
-    }
-
-    @SuppressWarnings("ALL")
-    public void testRewindTranslateFailed()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-
-        TextField component = newInstance(TextField.class, "translatedFieldSupport", tfs, "validatableFieldSupport", vfs);
-
-        IRequestCycle cycle = newCycle();
-        
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "barney", "10");
-
-        ValidatorException exception = new ValidatorException("test");
-        
-        try
-        {
-            expect(tfs.parse(component, "10")).andThrow(exception);
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        
-        delegate.record(exception);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-        
-        verify();
-
-        assertNull(component.getValue());
-    }
-
-    @SuppressWarnings("ALL")
-    public void testRewindValidateFailed()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-
-        TextField component = newInstance(TextField.class, "translatedFieldSupport", tfs, "validatableFieldSupport", vfs);
-
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-        IMarkupWriter writer = newWriter();
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, true);
-        trainGetParameter(cycle, "barney", "10");
-
-        ValidatorException exception = new ValidatorException("test");
-        
-        Integer value = new Integer(10);
-        
-        try
-        {
-            expect(tfs.parse(component, "10")).andReturn(value);
-            
-            vfs.validate(component, writer, cycle, value);
-            expectLastCall().andThrow(exception);
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        
-        delegate.record(exception);
-        trainGetDelegate(form, delegate);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-        
-        verify();
-        
-        assertNull(component.getValue());
-    }
-
-    public void testWasPrerendered()
-    {
-        TextField component = (TextField) newInstance(TextField.class);
-
-        IRequestCycle cycle = newCycle();
-        
-        IForm form = newMock(IForm.class);
-        
-        IMarkupWriter writer = newWriter();
-
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, true);
-
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRewindNotForm()
-    {
-        TextField component = (TextField) newInstance(TextField.class);
-
-        IRequestCycle cycle = newCycle();
-        
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, true);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRewindDisabled()
-    {
-        TextField component = (TextField) newInstance(TextField.class, "disabled", Boolean.TRUE);
-
-        IRequestCycle cycle = newCycle();
-        
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "barney");
-        trainIsRewinding(form, true);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        assertNull(PropertyUtils.read(component, "value"));
-
-        verify();
-    }
-
-    public void test_Render()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-
-        TextField component = newInstance(TextField.class,
-                                          "id", "fred",
-                                          "translatedFieldSupport", tfs,
-                                          "validatableFieldSupport", vfs,
-                                          "value", 10);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-        
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-        
-        form.setFormFieldUpdating(true);
-        
-        delegate.setFormComponent(component);
-        
-        expect(tfs.format(component, 10)).andReturn("10");
-
-        tfs.renderContributions(component, writer, cycle);
-        vfs.renderContributions(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><input type=\"text\" name=\"fred\" " +
-                "value=\"10\" id=\"fred\" class=\"validation-delegate\" /></span>");
-    }
-
-    public void testRenderHidden()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-        
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-
-        TextField component = newInstance(TextField.class, "name", "fred", "translatedFieldSupport", tfs,
-                                          "validatableFieldSupport", vfs, "value",
-                                          10, "hidden", Boolean.TRUE);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        delegate.setFormComponent(component);
-
-        expect(tfs.format(component, 10)).andReturn("10");
-        tfs.renderContributions(component, writer, cycle);
-        vfs.renderContributions(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><input type=\"password\" name=\"fred\" " +
-                "value=\"10\" id=\"fred\" class=\"validation-delegate\" /></span>");
-    }
-
-    public void testRenderDisabled()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-
-        TextField component = newInstance(TextField.class, "name", "fred", "translatedFieldSupport", tfs,
-                                          "validatableFieldSupport", vfs, "value", new Integer(10),
-                                          "disabled", Boolean.TRUE);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        delegate.setFormComponent(component);
-
-        expect(tfs.format(component, 10)).andReturn("10");
-        
-        tfs.renderContributions(component, writer, cycle);
-        vfs.renderContributions(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><input type=\"text\" name=\"fred\" disabled=\"disabled\" " +
-                "value=\"10\" id=\"fred\" class=\"validation-delegate\" /></span>");
-    }
-
-    public void testRenderWithInformalParameters()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-
-        IBinding binding = newBinding("informal-value");
-
-        TextField component = newInstance(TextField.class, new Object[]
-        { "name", "fred", "translatedFieldSupport", tfs, 
-            "validatableFieldSupport", vfs, "value", new Integer(10), 
-            "specification", new ComponentSpecification() });
-        
-        component.setBinding("informal", binding);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-        
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-        
-        form.setFormFieldUpdating(true);
-        
-        expect(tfs.format(component, new Integer(10))).andReturn("10");
-        
-        tfs.renderContributions(component, writer, cycle);
-        vfs.renderContributions(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><input type=\"text\" name=\"fred\" " +
-                "value=\"10\" id=\"fred\" class=\"validation-delegate\" informal=\"informal-value\" /></span>");
-    }
-
-    public void testRenderNullValue()
-    {
-        TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class);
-
-        ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
-
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-
-        TextField component = newInstance(TextField.class,
-                                          "name", "fred",
-                                          "translatedFieldSupport", tfs,
-                                          "validatableFieldSupport", vfs);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        delegate.setFormComponent(component);
-        expect(tfs.format(component, null)).andReturn("");
-
-        tfs.renderContributions(component, writer, cycle);
-        vfs.renderContributions(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertBuffer("<span class=\"prefix\"><input type=\"text\" name=\"fred\" " +
-                "value=\"\" id=\"fred\" class=\"validation-delegate\" /></span>");
-    }
-
-    public void testIsRequired()
-    {
-        ValidatableFieldSupport support = newMock(ValidatableFieldSupport.class);
-
-        TextField field = newInstance(TextField.class, new Object[]
-        { "validatableFieldSupport", support, });
-        
-        expect(support.isRequired(field)).andReturn(true);
-
-        replay();
-
-        assertEquals(true, field.isRequired());
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestTranslatedFieldSupportImpl.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestTranslatedFieldSupportImpl.java
deleted file mode 100644
index 03a78d6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestTranslatedFieldSupportImpl.java
+++ /dev/null
@@ -1,289 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.isA;
-
-import java.util.Locale;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.service.ThreadLocale;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.form.translator.Translator;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidatorException;
-import org.testng.annotations.Test;
-
-/**
- * Test case for {@link TranslatedFieldSupportImpl}.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-@Test
-public class TestTranslatedFieldSupportImpl extends BaseComponentTestCase
-{
-    private ThreadLocale newThreadLocale()
-    {
-        ThreadLocale tl = newMock(ThreadLocale.class);
-        checkOrder(tl, false);
-        
-        expect(tl.getLocale()).andReturn(Locale.ENGLISH).anyTimes();
-
-        return tl;
-    }
-
-    private IRequestCycle newCycle(IComponent component)
-    {
-        IRequestCycle cycle = newCycle();
-
-        ClassResolver cr = newMock(ClassResolver.class);
-        Infrastructure infra = newMock(Infrastructure.class);
-
-        PageRenderSupport prs = newMock(PageRenderSupport.class);
-
-        expect(cycle.getInfrastructure()).andReturn(infra);
-
-        expect(infra.getClassResolver()).andReturn(cr);
-
-        trainGetAttribute(cycle, TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE, prs);
-
-        return cycle;
-    }
-
-    public void testRenderContributionsClientValidationDisabled()
-    {
-        TranslatedFieldSupportImpl support = new TranslatedFieldSupportImpl();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.isClientValidationEnabled()).andReturn(false);
-
-        replay();
-
-        support.renderContributions(field, writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderContributionsClientValidationEnabled()
-    {
-        TranslatedFieldSupportImpl support = new TranslatedFieldSupportImpl();
-        support.setThreadLocale(newThreadLocale());
-
-        TranslatedField field = newMock(TranslatedField.class);
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(field);
-        
-        Translator translator = newMock(Translator.class);
-
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.isClientValidationEnabled()).andReturn(true);
-
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.getName()).andReturn("myform");
-
-        expect(field.getTranslator()).andReturn(translator);
-        
-        translator.renderContribution(
-                eq(writer),
-                eq(cycle),
-                isA(FormComponentContributorContextImpl.class),
-                eq(field));
-        
-        replay();
-
-        support.renderContributions(field, writer, cycle);
-
-        verify();
-    }
-
-    public void testFormat() throws Exception
-    {
-        TranslatedFieldSupportImpl support = new TranslatedFieldSupportImpl();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        IForm form = newMock(IForm.class);
-        
-        IValidationDelegate delegate = newMock(IValidationDelegate.class);
-        Translator translator = newMock(Translator.class);
-
-        Object object = new Object();
-        String expected = "result";
-
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.getDelegate()).andReturn(delegate);
-
-        expect(delegate.isInError()).andReturn(false);
-
-        expect(field.getTranslator()).andReturn(translator);
-
-        support.setThreadLocale(newThreadLocale());
-        
-        trainFormat(translator, field, object, expected);
-
-        replay();
-
-        String result = support.format(field, object);
-
-        verify();
-
-        assertSame(expected, result);
-    }
-
-    private void trainFormat(Translator translator, TranslatedField field,
-            Object input, String result)
-    {
-
-        expect(translator.format(field, Locale.ENGLISH, input)).andReturn(result);
-    }
-
-    public void testFormatInError()
-    {
-        TranslatedFieldSupportImpl support = new TranslatedFieldSupportImpl();
-
-        TranslatedField field = newMock(TranslatedField.class);
-        IForm form = newMock(IForm.class);
-        
-        IValidationDelegate delegate = newMock(IValidationDelegate.class);
-
-        String expected = "result";
-
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.getDelegate()).andReturn(delegate);
-
-        expect(delegate.isInError()).andReturn(true);
-
-        expect(delegate.getFieldInputValue()).andReturn(expected);
-
-        replay();
-
-        String result = support.format(field, new Object());
-
-        verify();
-
-        assertSame(expected, result);
-    }
-
-    public void testParse() throws Exception
-    {
-        TranslatedFieldSupportImpl support = new TranslatedFieldSupportImpl();
-
-        TranslatedField field = newMock(TranslatedField.class);
-        IForm form = newMock(IForm.class);
-        
-        IValidationDelegate delegate = newMock(IValidationDelegate.class);
-        Translator translator = newMock(Translator.class);
-
-        String text = "test";
-        Object expected = new Object();
-
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.getDelegate()).andReturn(delegate);
-
-        delegate.recordFieldInputValue(text);
-        
-        support.setThreadLocale(newThreadLocale());
-        
-        expect(field.getTranslator()).andReturn(translator);
-        
-        trainParse(translator, field, text, expected);
-        
-        replay();
-
-        Object result = support.parse(field, text);
-
-        verify();
-
-        assertSame(expected, result);
-
-    }
-
-    private void trainParse(Translator translator, TranslatedField field,
-            String text, Object result) throws ValidatorException
-    {
-        // ValidationMessages messages = new ValidationMessagesImpl(field, Locale.ENGLISH);
-
-        expect(translator.parse(eq(field), isA(ValidationMessages.class), eq(text))).andReturn(result);
-    }
-
-    public void testParseFailed() throws Exception
-    {
-        TranslatedFieldSupportImpl support = new TranslatedFieldSupportImpl();
-
-        support.setThreadLocale(newThreadLocale());
-
-        TranslatedField field = newMock(TranslatedField.class);
-        IForm form = newMock(IForm.class);
-        
-        IValidationDelegate delegate = newMock(IValidationDelegate.class);
-        Translator translator = newMock(Translator.class);
-
-        String text = "test";
-
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.getDelegate()).andReturn(delegate);
-
-        delegate.recordFieldInputValue(text);
-
-        expect(field.getTranslator()).andReturn(translator);
-        
-        ValidatorException expected = new ValidatorException("Failure");
-
-        //ValidationMessages messages = new ValidationMessagesImpl(field, Locale.ENGLISH);
-        
-        expect(translator.parse(isA(TranslatedField.class), 
-                isA(ValidationMessages.class), isA(String.class))).andThrow(expected);
-        
-        replay();
-
-        try
-        {
-            support.parse(field, text);
-
-            unreachable();
-        }
-        catch (ValidatorException e)
-        {
-            verify();
-
-            assertSame(expected, e);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestValidatableFieldSupportImpl.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestValidatableFieldSupportImpl.java
deleted file mode 100644
index 49f1d19..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestValidatableFieldSupportImpl.java
+++ /dev/null
@@ -1,452 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.isA;
-import static org.easymock.EasyMock.isNull;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Locale;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.service.ThreadLocale;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.form.validator.Validator;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.valid.ValidatorException;
-import org.testng.annotations.Test;
-
-/**
- * Test case for {@link ValidatableFieldSupportImpl}.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-@Test
-public class TestValidatableFieldSupportImpl extends BaseComponentTestCase
-{
-    private ThreadLocale newThreadLocale()
-    {
-        ThreadLocale tl = newMock(ThreadLocale.class);
-        checkOrder(tl, false);
-        
-        expect(tl.getLocale()).andReturn(Locale.ENGLISH).anyTimes();
-
-        return tl;
-    }
-    
-    /**
-     * Lots of work to set up the request cycle here, since we have to train it about getting the
-     * ClassResolver and the PageRenderSupport.
-     */
-    private IRequestCycle newCycle(IComponent component)
-    {
-        IRequestCycle cycle = newCycle();
-
-        ClassResolver cr = newMock(ClassResolver.class);
-        
-        Infrastructure infra = newMock(Infrastructure.class);
-
-        PageRenderSupport prs = newMock(PageRenderSupport.class);
-
-        expect(cycle.getInfrastructure()).andReturn(infra);
-
-        expect(infra.getClassResolver()).andReturn(cr);
-
-        trainGetAttribute(cycle, TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE, prs);
-
-        return cycle;
-    }
-
-    public void testRenderContributionsClientValidationDisabled()
-    {
-        ValidatableFieldSupportImpl support = new ValidatableFieldSupportImpl();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        IForm form = newMock(IForm.class);
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.isClientValidationEnabled()).andReturn(false);
-
-        replay();
-
-        support.renderContributions(field, writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderContributionsClientValidationEnabledNoValidators()
-    {
-        ValueConverter converter = newMock(ValueConverter.class);
-        
-        ValidatableFieldSupportImpl support = new ValidatableFieldSupportImpl();
-        support.setThreadLocale(newThreadLocale());
-        support.setValueConverter(converter);
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        
-        IForm form = newMock(IForm.class);
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(field);
-        
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.isClientValidationEnabled()).andReturn(true);
-
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.getName()).andReturn("myform");
-
-        expect(field.getValidators()).andReturn(null);
-        
-        expect(converter.coerceValue(null, Iterator.class)).andReturn(Collections.EMPTY_LIST.iterator());
-        
-        replay();
-
-        support.renderContributions(field, writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderContributionsClientValidationEnabled()
-    {
-        ValueConverter converter = newMock(ValueConverter.class);
-        
-        ValidatableFieldSupportImpl support = new ValidatableFieldSupportImpl();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        
-        IForm form = newMock(IForm.class);
-        
-        IMarkupWriter writer = newWriter();
-        
-        Validator validator = newMock(Validator.class);
-        
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.isClientValidationEnabled()).andReturn(true);
-
-        support.setThreadLocale(newThreadLocale());
-        support.setValueConverter(converter);
-        
-        expect(field.getForm()).andReturn(form);
-
-        expect(form.getName()).andReturn("myform");
-
-        expect(field.getValidators()).andReturn(validator);
-        
-        expect(converter.coerceValue(validator, Iterator.class))
-        .andReturn(Collections.singleton(validator).iterator());
-        
-        IRequestCycle cycle = newCycle(field);
-        
-        validator.renderContribution(eq(writer), eq(cycle), 
-                isA(FormComponentContributorContext.class), eq(field));
-        
-        replay();
-
-        support.renderContributions(field, writer, cycle);
-
-        verify();
-    }
-
-    public void testValidate()
-    {
-        ValueConverter converter = newMock(ValueConverter.class);
-        
-        ValidatableFieldSupportImpl support = new ValidatableFieldSupportImpl();
-        support.setThreadLocale(newThreadLocale());
-        support.setValueConverter(converter);
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        
-        Validator validator = newMock(Validator.class);
-        
-        Object object = new Object();
-
-        expect(field.getValidators()).andReturn(validator);
-        
-        expect(converter.coerceValue(validator, Iterator.class))
-        .andReturn(Collections.singleton(validator).iterator());
-        
-        try
-        {
-            validator.validate(eq(field), isA(ValidationMessages.class), eq(object));
-            
-            replay();
-    
-            support.validate(field, writer, cycle, object);
-    
-            verify();
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-    }
-
-    public void testValidateFailed()
-    {
-        ValueConverter converter = newMock(ValueConverter.class);
-        
-        ValidatableFieldSupportImpl support = new ValidatableFieldSupportImpl();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        
-        Validator validator = newMock(Validator.class);
-        
-        Object object = new Object();
-
-        expect(field.getValidators()).andReturn(validator);
-        
-        expect(converter.coerceValue(validator, Iterator.class))
-        .andReturn(Collections.singleton(validator).iterator());
-        
-        support.setThreadLocale(newThreadLocale());
-        support.setValueConverter(converter);
-        
-        ValidatorException expected = new ValidatorException("test");
-        
-        try
-        {
-            validator.validate(eq(field), isA(ValidationMessages.class), eq(object));
-            expectLastCall().andThrow(expected);
-            
-            replay();
-    
-            support.validate(field, writer, cycle, object);
-    
-            unreachable();
-        }
-        catch (ValidatorException e)
-        {
-            verify();
-            
-            assertSame(expected, e);
-        }
-    }
-
-    public void testValidateNoValidators()
-    {
-        ValueConverter converter = newMock(ValueConverter.class);
-        
-        ValidatableFieldSupportImpl support = new ValidatableFieldSupportImpl();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        
-        Object object = new Object();
-
-        expect(field.getValidators()).andReturn(null);
-        
-        expect(converter.coerceValue(null, Iterator.class))
-        .andReturn(Collections.EMPTY_LIST.iterator());
-        
-        support.setThreadLocale(newThreadLocale());
-        support.setValueConverter(converter);
-        
-        try
-        {
-            replay();
-    
-            support.validate(field, writer, cycle, object);
-    
-            verify();
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-    }
-
-    public void testValidateAcceptNull()
-    {
-        ValueConverter converter = newMock(ValueConverter.class);
-        
-        ValidatableFieldSupportImpl support = new ValidatableFieldSupportImpl();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        
-        IMarkupWriter writer = newWriter();
-        
-        Validator validator = newMock(Validator.class);
-        
-        expect(field.getValidators()).andReturn(validator);
-        
-        expect(converter.coerceValue(validator, Iterator.class))
-        .andReturn(Collections.singleton(validator).iterator());
-
-        support.setThreadLocale(newThreadLocale());
-        support.setValueConverter(converter);
-        
-        expect(validator.getAcceptsNull()).andReturn(true);
-        
-        IRequestCycle cycle = newCycle();
-        
-        try
-        {
-            validator.validate(eq(field), isA(ValidationMessages.class), isNull());
-            
-            replay();
-    
-            support.validate(field, writer, cycle, null);
-    
-            verify();
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-    }
-
-    public void testValidateRejectNull()
-    {
-        ValueConverter converter = newMock(ValueConverter.class);
-        
-        ValidatableFieldSupportImpl support = new ValidatableFieldSupportImpl();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        
-        Validator validator = newMock(Validator.class);
-        
-        expect(field.getValidators()).andReturn(validator);
-        
-        expect(converter.coerceValue(validator, Iterator.class))
-        .andReturn(Collections.singleton(validator).iterator());
-
-        support.setThreadLocale(newThreadLocale());
-        support.setValueConverter(converter);
-        
-        expect(validator.getAcceptsNull()).andReturn(false);
-        
-        try
-        {
-            replay();
-    
-            support.validate(field, writer, cycle, null);
-    
-            verify();
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-    }
-
-    private ValidatableField newFieldGetValidators(Collection validators)
-    {
-        ValidatableField field = newMock(ValidatableField.class);
-
-        expect(field.getValidators()).andReturn(validators);
-
-        return field;
-    }
-
-    private ValueConverter newValueConverter(Collection validators)
-    {
-        ValueConverter converter = newMock(ValueConverter.class);
-
-        expect(converter.coerceValue(validators, Iterator.class)).andReturn(validators.iterator());
-
-        return converter;
-    }
-
-    private Validator newValidator(boolean isRequired)
-    {
-        Validator validator = newMock(Validator.class);
-        checkOrder(validator, false);
-        
-        expect(validator.isRequired()).andReturn(isRequired);
-
-        return validator;
-    }
-
-    public void testIsRequiredNoValidators()
-    {
-        Collection validators = Collections.EMPTY_LIST;
-        ValidatableField field = newFieldGetValidators(validators);
-        ValueConverter converter = newValueConverter(validators);
-
-        replay();
-
-        ValidatableFieldSupportImpl support = new ValidatableFieldSupportImpl();
-        support.setValueConverter(converter);
-
-        assertEquals(false, support.isRequired(field));
-
-        verify();
-    }
-
-    public void testIsRequiredNoRequiredValidators()
-    {
-        Collection validators = Collections.singletonList(newValidator(false));
-        ValidatableField field = newFieldGetValidators(validators);
-        ValueConverter converter = newValueConverter(validators);
-        
-        replay();
-
-        ValidatableFieldSupportImpl support = new ValidatableFieldSupportImpl();
-        support.setValueConverter(converter);
-
-        assertEquals(false, support.isRequired(field));
-
-        verify();
-    }
-
-    public void testIsRequiredWithRequiredValidator()
-    {
-        Collection validators = Collections.singletonList(newValidator(true));
-        ValidatableField field = newFieldGetValidators(validators);
-        ValueConverter converter = newValueConverter(validators);
-
-        replay();
-
-        ValidatableFieldSupportImpl support = new ValidatableFieldSupportImpl();
-        support.setValueConverter(converter);
-
-        assertEquals(true, support.isRequired(field));
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestValidationMessages.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestValidationMessages.java
deleted file mode 100644
index bcb0db4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/TestValidationMessages.java
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.Locale;
-
-import org.apache.hivemind.Messages;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.ValidationMessagesImpl}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestValidationMessages extends BaseComponentTestCase
-{
-    private IFormComponent newField()
-    {
-        return newMock(IFormComponent.class);
-    }
-
-    public void testMessageOverrideNull()
-    {
-        IFormComponent field = newField();
-
-        ValidationMessages m = new ValidationMessagesImpl(field, Locale.ENGLISH);
-
-        replay();
-
-        assertEquals("You must enter a value for My Field.", m.formatValidationMessage(
-                null,
-                ValidationStrings.REQUIRED_FIELD,
-                new Object[]
-                { "My Field" }));
-
-        m = new ValidationMessagesImpl(field, new Locale("es"));
-
-        assertEquals("Tiene que ingresar un valor para My Field.", m.formatValidationMessage(
-                null,
-                ValidationStrings.REQUIRED_FIELD,
-                new Object[]
-                { "My Field" }));
-
-        verify();
-    }
-
-    public void testGetLocale()
-    {
-        IFormComponent field = newField();
-
-        ValidationMessages m = new ValidationMessagesImpl(field, Locale.ENGLISH);
-
-        replay();
-
-        assertSame(Locale.ENGLISH, m.getLocale());
-
-        verify();
-    }
-
-    public void testMessageOverride()
-    {
-        IFormComponent field = newField();
-
-        ValidationMessages m = new ValidationMessagesImpl(field, Locale.ENGLISH);
-
-        replay();
-
-        assertEquals("Gimme data for My Field.", m.formatValidationMessage(
-                "Gimme data for {0}.",
-                ValidationStrings.REQUIRED_FIELD,
-                new Object[]
-                { "My Field" }));
-
-        verify();
-    }
-
-    /**
-     * Test the use of the '%key' construct as the message.
-     */
-
-    public void testMessageOverrideAsReference()
-    {
-        Messages messages = newMessage("myfield-required", "Yo Dawg! Gimme a piece of {0}.");
-        
-        IComponent container = newComponent(messages);
-        
-        IFormComponent field = newField(container);
-        
-        ValidationMessages m = new ValidationMessagesImpl(field, Locale.ENGLISH);
-        
-        replay();
-
-        assertEquals("Yo Dawg! Gimme a piece of My Field.", m.formatValidationMessage(
-                "%myfield-required",
-                ValidationStrings.REQUIRED_FIELD,
-                new Object[]
-                { "My Field" }));
-
-        verify();
-    }
-
-    private IFormComponent newField(IComponent container)
-    {
-        IFormComponent field = newMock(IFormComponent.class);
-
-        expect(field.getContainer()).andReturn(container);
-
-        return field;
-    }
-
-    private IComponent newComponent(Messages messages)
-    {
-        IComponent component = newComponent();
-
-        expect(component.getMessages()).andReturn(messages);
-
-        return component;
-    }
-
-    private Messages newMessage(String key, String message)
-    {
-        Messages messages = newMock(Messages.class);
-        checkOrder(messages, false);
-        
-        expect(messages.getMessage(key)).andReturn(message);
-
-        return messages;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestBigDecimalTranslator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestBigDecimalTranslator.java
deleted file mode 100644
index b428ecb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestBigDecimalTranslator.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package org.apache.tapestry.form.translator;
-
-import org.apache.tapestry.form.FormComponentContributorTestCase;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.math.BigDecimal;
-import java.util.Locale;
-
-/**
- * Tests {@link BigDecimalTranslator}.
- */
-@Test
-public class TestBigDecimalTranslator extends FormComponentContributorTestCase {
-
-    public void test_Default_Format()
-    {
-        BigDecimalTranslator translator = new BigDecimalTranslator();
-
-        testFormat(translator, new BigDecimal("14.1"), "14.1");
-    }
-
-    public void test_Null_Format()
-    {
-        BigDecimalTranslator translator = new BigDecimalTranslator();
-
-        testFormat(translator, null, "");
-    }
-
-    public void test_Parse_Null()
-            throws Exception
-    {
-        IFormComponent field = newField();
-        ValidationMessages messages = newMock(ValidationMessages.class);
-        BigDecimalTranslator translator = new BigDecimalTranslator();
-
-        replay();
-
-        assert translator.parse(field, messages, null) == null;
-
-        verify();
-    }
-
-    @Test(expectedExceptions = ValidatorException.class)
-    public void test_Parse_Invalid()
-            throws Exception
-    {
-        IFormComponent field = newField("fred");
-        ValidationMessages messages = newValidationMessages(Locale.getDefault());
-        BigDecimalTranslator translator = new BigDecimalTranslator();
-
-        expect(messages.formatValidationMessage((String)eq(null), eq(ValidationStrings.INVALID_NUMBER), aryEq(new String[] { "fred"}))).andReturn("msg");
-
-        replay();
-
-        translator.parse(field, messages, "a23");
-
-        verify();
-    }
-
-    public void test_Parse_Simple()
-            throws Exception
-    {
-        IFormComponent field = newField();
-        ValidationMessages messages = newMock(ValidationMessages.class);
-        BigDecimalTranslator translator = new BigDecimalTranslator();
-
-        replay();
-
-        BigDecimal value = (BigDecimal) translator.parse(field, messages, "99999999.9999");
-
-        verify();
-
-        assertEquals(value, new BigDecimal("99999999.9999"));
-    }
-
-    private void testFormat(Translator translator, BigDecimal number, String expected)
-    {
-        IFormComponent field = newField();
-
-        String result = translator.format(field, Locale.ENGLISH, number);
-
-        assertEquals(expected, result);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestDateTranslator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestDateTranslator.java
deleted file mode 100644
index e50a6fd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestDateTranslator.java
+++ /dev/null
@@ -1,315 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Locale;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.FormComponentContributorTestCase;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-
-/**
- * Test case for {@link DateTranslator}.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestDateTranslator extends FormComponentContributorTestCase
-{
-    private Calendar _calendar = Calendar.getInstance();
-    
-    @AfterMethod
-    protected void cleanup()
-    {
-        _calendar.clear();
-    }
-    
-    private Date buildDate(int year, int month, int day)
-    {
-        _calendar.set(Calendar.YEAR, year);
-        _calendar.set(Calendar.MONTH, month);
-        _calendar.set(Calendar.DATE, day);
-
-        return _calendar.getTime();
-    }
-
-    public void testDefaultFormat()
-    {
-        DateTranslator translator = new DateTranslator();
-        trainFormat(translator, buildDate(1976, Calendar.OCTOBER, 29), "10/29/1976");
-    }
-
-    public void testCustomFormat()
-    {
-        DateTranslator translator = new DateTranslator();
-
-        translator.setPattern("yyyy-MM-dd");
-
-        trainFormat(translator, buildDate(1976, Calendar.OCTOBER, 29), "1976-10-29");
-    }
-
-    public void testInitializerFormat()
-    {
-        DateTranslator translator = new DateTranslator("pattern=yyyy-MM-dd");
-
-        trainFormat(translator, buildDate(1976, Calendar.OCTOBER, 29), "1976-10-29");
-    }
-
-    private void trainFormat(DateTranslator translator, Date date, String expected)
-    {
-        IFormComponent field = newField();
-
-        replay();
-
-        String result = translator.format(field, Locale.ENGLISH, date);
-
-        assertEquals(expected, result);
-
-        verify();
-    }
-
-    public void testNullFormat()
-    {
-        DateTranslator translator = new DateTranslator();
-
-        replay();
-
-        String result = translator.format(_component, null, null);
-
-        assertEquals("", result);
-
-        verify();
-    }
-
-    public void testDefaultParse() throws Exception
-    {
-        DateTranslator translator = new DateTranslator();
-
-        testParse(translator, "10/29/1976", buildDate(1976, Calendar.OCTOBER, 29));
-    }
-    
-    public void test_Time_Parse() throws Exception
-    {
-        DateTranslator translator = new DateTranslator();
-        
-        String input = "6:50 pm";
-        
-        translator.setPattern("hh:mm a");
-        
-        IFormComponent field = newField();
-        
-        ValidationMessages messages = newValidationMessages(Locale.ENGLISH);
-        
-        replay();
-        
-        Date result = (Date) translator.parse(field, messages, input);
-        
-        assertEquals(18, result.getHours());
-        assertEquals(50, result.getMinutes());
-        
-        verify();
-    }
-    
-    public void testCustomParse() throws Exception
-    {
-        DateTranslator translator = new DateTranslator();
-
-        translator.setPattern("yyyy-MM-dd");
-
-        testParse(translator, "1976-10-29", buildDate(1976, Calendar.OCTOBER, 29));
-    }
-
-    public void testTrimmedParse() throws Exception
-    {
-        DateTranslator translator = new DateTranslator();
-
-        translator.setTrim(true);
-
-        testParse(translator, " 10/29/1976 ", buildDate(1976, Calendar.OCTOBER, 29));
-    }
-
-    public void testEmptyParse()
-    {
-        DateTranslator translator = new DateTranslator();
-
-        replay();
-
-        try
-        {
-            Date result = (Date) translator.parse(_component, null, "");
-
-            assertEquals(null, result);
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        finally
-        {
-            verify();
-        }
-    }
-
-    private void testParse(DateTranslator translator, String date, Date expected) throws Exception
-    {
-        IFormComponent field = newField();
-
-        ValidationMessages messages = newValidationMessages(Locale.ENGLISH);
-
-        replay();
-
-        Date result = (Date) translator.parse(field, messages, date);
-
-        assertEquals(expected, result);
-
-        verify();
-    }
-
-    public void testFailedParseDefaultMessage() throws Exception
-    {
-        DateTranslator translator = new DateTranslator();
-
-        failedParse(translator, null);
-    }
-
-    public void testFailedParseCustomMessage() throws Exception
-    {
-        DateTranslator translator = new DateTranslator();
-        String message = "Field Name is an invalid date.";
-
-        translator.setMessage(message);
-
-        failedParse(translator, message);
-    }
-
-    private void failedParse(DateTranslator translator, String overrideMessage)
-            throws Exception
-    {   
-        IFormComponent field = newField("My Field");
-        
-        ValidationMessages messages = newValidationMessages(Locale.ENGLISH);
-        
-        trainBuildMessage(
-                messages,
-                overrideMessage,
-                ValidationStrings.INVALID_DATE,
-                new Object[]
-                { "My Field", "MM/DD/YYYY" },
-                "final message");
-        
-        replay();
-
-        try
-        {
-            System.out.println(translator.parse(field, messages, "Bad-Date"));
-
-            unreachable();
-        }
-        catch (ValidatorException e)
-        {
-            assertEquals("final message", e.getMessage());
-            assertEquals(ValidationConstraint.DATE_FORMAT, e.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void test_Render_Contribution()
-    {
-        DateTranslator translator = new DateTranslator();
-        IFormComponent field = newField("Date Field", "dateField", 1);
-        
-        JSONObject json = new JSONObject();
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        trainGetLocale(context, Locale.ENGLISH);
-        
-        trainBuildMessage(context, null, ValidationStrings.INVALID_DATE, 
-                new Object[] { "Date Field", 
-                translator.getDateFormat(Locale.ENGLISH)
-                .toLocalizedPattern().toUpperCase(Locale.ENGLISH)}, "invalid date");
-        
-        context.addInitializationScript(field, "dojo.require(\"tapestry.form.datetime\");");
-        
-        replay();
-        
-        translator.renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals(json.toString(),
-                "{\"constraints\":{\"dateField\":" +
-                "[[tapestry.form.datetime.isValidDate," +
-                "{datePattern:\"MM/dd/yyyy\"}]]},\"dateField\":" +
-                "{\"constraints\":[\"invalid date\"]}}");
-    }
-
-    public void test_Trim_Render_Contribution()
-    {
-        DateTranslator dt = new DateTranslator("!lenient,trim");
-        assertFalse(dt.isLenient());
-        assertTrue(dt.isTrim());
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IFormComponent field = newField("Date Field", "dateField", 1);
-        
-        JSONObject json = new JSONObject();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        expect(context.getProfile()).andReturn(json).anyTimes();
-        
-        trainGetLocale(context, Locale.ENGLISH);
-        
-        trainBuildMessage(context, null, ValidationStrings.INVALID_DATE, 
-                new Object[] { "Date Field", 
-                dt.getDateFormat(Locale.ENGLISH)
-                .toLocalizedPattern().toUpperCase(Locale.ENGLISH)}, "invalid date");
-        
-        context.addInitializationScript(field, "dojo.require(\"tapestry.form.datetime\");");
-        
-        replay();
-
-        dt.renderContribution(writer, cycle, context, field);
-
-        verify();
-        
-        assertEquals(json.toString(),
-                "{\"trim\":[\"dateField\"],\"constraints\":{\"dateField\":" +
-                "[[tapestry.form.datetime.isValidDate,{datePattern:\"MM/dd/yyyy\",strict:true}]]}," +
-                "\"dateField\":{\"constraints\":[\"invalid date\"]}}");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java
deleted file mode 100644
index 69d8350..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java
+++ /dev/null
@@ -1,372 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.FormComponentContributorTestCase;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.text.DecimalFormatSymbols;
-import java.util.Locale;
-
-/**
- * Tests for {@link org.apache.tapestry.form.translator.NumberTranslator}
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestNumberTranslator extends FormComponentContributorTestCase
-{
-    public void test_Default_Format()
-    {
-        NumberTranslator translator = new NumberTranslator();
-
-        testFormat(translator, new Integer(10), "10");
-    }
-
-    public void test_Omit_Zero()
-    {
-        NumberTranslator translator = new NumberTranslator("pattern=0.00,omitZero=true");
-        
-        testFormat(translator, new Integer(0), "");
-        
-        assertEquals(translator.getValueForEmptyInput(), null);
-    }
-
-    public void test_Omit_Zero_Off()
-    {
-        NumberTranslator translator = new NumberTranslator("!omitZero,pattern=0.00");
-        
-        testFormat(translator, new Integer(0), "0.00");
-    }
-
-    public void test_Custom_Format()
-    {
-        NumberTranslator translator = new NumberTranslator();
-
-        translator.setPattern("$#0.00");
-
-        testFormat(translator, new Integer(10), "$10.00");
-    }
-
-    public void test_Initializer_Format()
-    {
-        NumberTranslator translator = new NumberTranslator("pattern=#0%");
-
-        testFormat(translator, new Double(0.10), "10%");
-    }
-
-    private void testFormat(Translator translator, Number number, String expected)
-    {
-        IFormComponent field = newField();
-
-        String result = translator.format(field, Locale.ENGLISH, number);
-
-        assertEquals(result, expected);
-    }
-
-    public void test_Null_Format()
-    throws Exception
-    {
-        NumberTranslator translator = new NumberTranslator("pattern=0.00,omitZero");
-        IFormComponent field = newField();
-        ValidationMessages messages = newMock(ValidationMessages.class);
-        
-        replay();
-        
-        Number num = (Number)translator.parse(field, messages, "");
-        
-        assert num == null;
-        
-        verify();
-    }
-
-    public void test_Null_Format_Pattern()
-    {
-        NumberTranslator translator = new NumberTranslator();
-
-        replay();
-
-        String result = translator.format(_component, null, null);
-
-        assertEquals("", result);
-
-        verify();
-    }
-    
-    public void test_Localized_Format()
-    {
-        IFormComponent field = newField();
-        NumberTranslator translator = new NumberTranslator();
-        translator.setPattern("#,###");
-        
-        replay();
-        
-        Integer input = new Integer(10999999);
-        String result = translator.format(field, Locale.FRENCH, input);
-        DecimalFormatSymbols sym = new DecimalFormatSymbols(Locale.FRENCH);
-        
-        verify();
-        
-        assertEquals(result, "10" + sym.getGroupingSeparator() + "999" + sym.getGroupingSeparator() + "999");
-    }
-    
-    public void test_Default_Parse() throws Exception
-    {
-        NumberTranslator translator = new NumberTranslator();
-
-        testParse(translator, "0.1", new Double(0.1));
-    }
-
-    public void test_Custom_Parse() throws Exception
-    {
-        NumberTranslator translator = new NumberTranslator();
-
-        translator.setPattern("#%");
-
-        testParse(translator, "10%", new Double(0.1));
-    }
-
-    public void test_Trimmed_Parse() throws Exception
-    {
-        NumberTranslator translator = new NumberTranslator();
-
-        translator.setTrim(true);
-
-        testParse(translator, " 100 ", new Long(100));
-    }
-
-    private void testParse(Translator translator, String number, Number expected) throws Exception
-    {
-        IFormComponent field = newField();
-        
-        ValidationMessages messages = newMock(ValidationMessages.class);
-
-        trainGetLocale(messages, Locale.ENGLISH);
-
-        replay();
-
-        Number result = (Number) translator.parse(field, messages, number);
-
-        assertEquals(expected, result);
-
-        verify();
-
-    }
-
-    public void test_Failed_Parse_Default_Message()
-    {
-        NumberTranslator translator = new NumberTranslator();
-        
-        testFailedParse(translator, null);
-    }
-
-    public void test_Failed_Parse_Custom_Message()
-    {
-        NumberTranslator translator = new NumberTranslator();
-
-        String message = "Field Name is an invalid number.";
-
-        translator.setMessage(message);
-
-        testFailedParse(translator, message);
-    }
-
-    private void testFailedParse(Translator translator, String messageOverride)
-    {
-        IFormComponent field = newField("Number Field");
-        
-        ValidationMessages messages = newMock(ValidationMessages.class);
-
-        trainGetLocale(messages, Locale.ENGLISH);
-
-        trainBuildMessage(
-                messages,
-                messageOverride,
-                ValidationStrings.INVALID_NUMBER,
-                new Object[]
-                { "Number Field", "#" },
-                "invalid number");
-
-        replay();
-
-        try
-        {
-            System.out.println(translator.parse(field, messages, "Bad-Number"));
-
-            unreachable();
-        }
-        catch (ValidatorException e)
-        {
-            assertEquals("invalid number", e.getMessage());
-            assertEquals(ValidationConstraint.NUMBER_FORMAT, e.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void test_Render_Contribution()
-    {
-        NumberTranslator translator = new NumberTranslator();
-        IFormComponent field = newField("Number Field", "numberField", 1);
-        
-        JSONObject json = new JSONObject();
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        expect(context.getProfile()).andReturn(json);
-        context.addInitializationScript(field, "dojo.require(\"dojo.i18n.number\");");
-        
-        trainGetLocale(context, Locale.ENGLISH);
-        
-        trainBuildMessage(context, null, ValidationStrings.INVALID_NUMBER, 
-                new Object[] { "Number Field", "#" }, "invalid number message");
-        
-        replay();
-        
-        translator.renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals(json.toString(),
-                "{\"constraints\":{\"numberField\":" +
-                "[[dojo.i18n.number.isReal,null,{places:0,decimal:\".\",separator:\"\"}]]}," +
-                "\"numberField\":{\"constraints\":[\"invalid number message\"]}}");
-    }
-
-    public void test_Render_Grouping_Separator()
-    {
-        NumberTranslator translator = new NumberTranslator();
-        translator.setPattern("###,##");
-        IFormComponent field = newField("Number Field", "numberField", 1);
-
-        JSONObject json = new JSONObject();
-
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-
-        expect(context.getProfile()).andReturn(json);
-        context.addInitializationScript(field, "dojo.require(\"dojo.i18n.number\");");
-
-        trainGetLocale(context, Locale.US);
-
-        trainBuildMessage(context, null, ValidationStrings.INVALID_NUMBER, new String[] { "Number Field", "#,##" },
-                          "invalid number message");
-
-        replay();
-
-        translator.renderContribution(writer, cycle, context, field);
-
-        verify();
-
-        assertEquals(json.toString(),
-                "{\"constraints\":{\"numberField\":" +
-                "[[dojo.i18n.number.isReal,null," +
-                "{places:0,decimal:\".\",separator:\",\",groupSize:2}]]}," +
-                "\"numberField\":{\"constraints\":[\"invalid number message\"]}}");
-    }
-
-    public void test_Message_Render_Contribution()
-    {
-        NumberTranslator translator = new NumberTranslator();
-        IFormComponent field = newField("Number Field", "myfield", 1);
-        
-        String messageOverride = "You entered a bunk value for {0}. I should look like {1}. Watch out for ''this''!";
-
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        
-        JSONObject json = new JSONObject();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-
-        expect(context.getProfile()).andReturn(json);
-        context.addInitializationScript(field, "dojo.require(\"dojo.i18n.number\");");
-        
-        trainGetLocale(context, Locale.ENGLISH);
-        
-        trainBuildMessage(
-                context,
-                messageOverride,
-                ValidationStrings.INVALID_NUMBER,
-                new Object[] { "Number Field", "#" },
-                "Blah Blah 'Field Name' Blah.");
-        
-        replay();
-        
-        translator.setMessage(messageOverride);
-
-        translator.renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals(json.toString(),
-                "{\"constraints\":{\"myfield\":[[dojo.i18n.number.isReal,null," +
-                "{places:0,decimal:\".\",separator:\"\"}]]}," +
-                "\"myfield\":{\"constraints\":[\"Blah Blah 'Field Name' Blah.\"]}}");
-    }
-    
-    public void test_Trim_Render_Contribution()
-    {
-        IFormComponent field = newField("Number Field", "myfield", 2);
-        
-        NumberTranslator translator = new NumberTranslator();
-        JSONObject json = new JSONObject();
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        expect(context.getProfile()).andReturn(json);
-        context.addInitializationScript(field, "dojo.require(\"dojo.i18n.number\");");
-        
-        trainGetLocale(context, Locale.ENGLISH);
-        
-        trainBuildMessage(context, null, ValidationStrings.INVALID_NUMBER, new Object[]
-        { "Number Field", "#" }, "invalid number message");
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        replay();
-
-        translator.setTrim(true);
-        
-        translator.renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals(json.toString(),
-                "{\"trim\":[\"myfield\"]," +
-                "\"constraints\":{\"myfield\":[[dojo.i18n.number.isReal,null," +
-                "{places:0,decimal:\".\",separator:\"\"}]]}," +
-                "\"myfield\":{\"constraints\":[\"invalid number message\"]}}");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestStringTranslator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestStringTranslator.java
deleted file mode 100644
index 61fe5ac..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestStringTranslator.java
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.FormComponentContributorTestCase;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidatorException;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-
-/**
- * Test case for {@link StringTranslator}.
- * 
- * @author Paul Ferraro
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestStringTranslator extends FormComponentContributorTestCase
-{
-    private StringTranslator _translator = new StringTranslator();
-
-    @AfterMethod
-    public void reset()
-    {
-        _translator.setTrim(false);
-        _translator.setEmpty(null);
-        _translator.setMessage(null);
-    }
-    
-    public void test_Format()
-    {
-        replay();
-
-        String result = _translator.format(_component, null, "Test this");
-
-        assertEquals("Test this", result);
-
-        verify();
-    }
-
-    public void test_Null_Format()
-    {
-        replay();
-
-        String result = _translator.format(_component, null, null);
-
-        assertEquals("", result);
-
-        verify();
-    }
-
-    public void test_Parse()
-    {
-        replay();
-
-        try
-        {
-            String result = (String) _translator.parse(_component, null, "Test this");
-
-            assertEquals("Test this", result);
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        finally
-        {
-            verify();
-        }
-    }
-
-    public void test_Trimmed_Parse()
-    {
-        _translator.setTrim(true);
-
-        replay();
-
-        try
-        {
-            String result = (String) _translator.parse(_component, null, " Test this ");
-
-            assertEquals("Test this", result);
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        finally
-        {
-            verify();
-        }
-    }
-
-    public void test_Empty_Parse()
-    {
-        replay();
-
-        try
-        {
-            String result = (String) _translator.parse(_component, null, "");
-
-            assertEquals(null, result);
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        finally
-        {
-            verify();
-        }
-    }
-
-    public void test_Custom_Empty_Parse()
-    {
-        _translator.setEmpty("");
-
-        replay();
-
-        try
-        {
-            String result = (String) _translator.parse(_component, null, "");
-
-            assertEquals("", result);
-        }
-        catch (ValidatorException e)
-        {
-            unreachable();
-        }
-        finally
-        {
-            verify();
-        }
-    }
-
-    public void test_Render_Contribution()
-    {
-        replay();
-
-        _translator.renderContribution(null, _cycle, null, _component);
-
-        verify();
-    }
-
-    public void test_Trim_Render_Contribution()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        
-        JSONObject json = new JSONObject();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        IFormComponent field = newFieldWithClientId("myfield");
-        
-        replay();
-
-        Translator t = new StringTranslator("trim");
-
-        t.renderContribution(writer, cycle, context, field);
-
-        verify();
-        
-        assertEquals("{\"trim\":[\"myfield\"]}",
-                json.toString());
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestTranslatorBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestTranslatorBinding.java
deleted file mode 100644
index 89b7ba1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestTranslatorBinding.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.translator;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.lib.BeanFactory;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.BindingTestCase;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.translator.TranslatorBinding} and
- * {@link org.apache.tapestry.form.translator.TranslatorBindingFactory}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test(sequential = true)
-public class TestTranslatorBinding extends BindingTestCase
-{
-    public void test_Create()
-    {
-        Location l = newLocation();
-        ValueConverter vc = newValueConverter();
-        IComponent component = newComponent();
-        
-        BeanFactory bf = newMock(BeanFactory.class);
-
-        Translator translator =newMock(Translator.class);
-
-        expect(bf.get("string")).andReturn(translator);
-
-        replay();
-
-        TranslatorBindingFactory f = new TranslatorBindingFactory();
-        f.setValueConverter(vc);
-        f.setTranslatorBeanFactory(bf);
-
-        IBinding binding = f.createBinding(component, "description", "string", l);
-
-        assertSame(translator, binding.getObject());
-        assertSame(l, binding.getLocation());
-        assertTrue(binding.isInvariant());
-        assertEquals("description", binding.getDescription());
-
-        verify();
-    }
-
-    public void test_Failure()
-    {
-        Location l = newLocation();
-        IComponent component = newComponent();
-
-        BeanFactory bf = newMock(BeanFactory.class);
-
-        Throwable t = new RuntimeException("Boom!");
-
-        expect(bf.get("string")).andThrow(t);
-
-        replay();
-
-        TranslatorBindingFactory f = new TranslatorBindingFactory();
-        f.setTranslatorBeanFactory(bf);
-
-        try
-        {
-            f.createBinding(component, "description", "string", l);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Boom!", ex.getMessage());
-            assertSame(t, ex.getRootCause());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/BaseValidatorTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/BaseValidatorTestCase.java
deleted file mode 100644
index 8859274..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/BaseValidatorTestCase.java
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import static org.easymock.EasyMock.*;
-
-/**
- * Base class for writing {@link org.apache.tapestry.form.validator.Validator} tests.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public abstract class BaseValidatorTestCase extends BaseComponentTestCase
-{
-    protected IFormComponent newField(String displayName, boolean disabled)
-    {
-        IFormComponent field = newField(disabled);
-        
-        expect(field.getDisplayName()).andReturn(displayName);
-        
-        return field;
-    }
-    
-    protected IFormComponent newField(String displayName)
-    {
-        IFormComponent field = newMock(IFormComponent.class);
-        checkOrder(field, false);
-        
-        expect(field.getDisplayName()).andReturn(displayName);
-        
-        return field;
-    }
-
-    protected IFormComponent newField(String displayName, String clientId)
-    {
-        IFormComponent field = newMock(IFormComponent.class);
-        checkOrder(field, false);
-        
-        expect(field.getClientId()).andReturn(clientId).anyTimes();
-        expect(field.getDisplayName()).andReturn(displayName);
-        
-        return field;
-    }
-    
-    protected IFormComponent newField(String displayName, String clientId, boolean disabled)
-    {
-        IFormComponent field = newField(disabled);
-        
-        checkOrder(field, false);
-        
-        expect(field.getClientId()).andReturn(clientId).anyTimes();
-        expect(field.getDisplayName()).andReturn(displayName);
-        
-        return field;
-    }
-    
-    protected IFormComponent newField(boolean disabled)
-    {
-        IFormComponent field = newField();
-        expect(field.isDisabled()).andReturn(disabled);
-        
-        return field;
-    }
-    
-    protected IFormComponent newField()
-    {
-        return newMock(IFormComponent.class);
-    }
-
-    protected ValidationMessages newMessages()
-    {
-        return newMock(ValidationMessages.class);
-    }
-
-    protected ValidationMessages newMessages(String messageOverride, String messageKey,
-            Object[] parameters, String result)
-    {
-        ValidationMessages messages = newMock(ValidationMessages.class);
-        
-        trainFormatMessage(messages, messageOverride, messageKey, parameters, result);
-
-        return messages;
-    }
-
-    protected void trainFormatMessage(ValidationMessages messages,
-            String messageOverride, String messageKey, Object[] parameters, String result)
-    {
-        expect(messages.formatValidationMessage(eq(messageOverride), eq(messageKey), aryEq(parameters)))
-        .andReturn(result);
-    }
-
-    protected FormComponentContributorContext newContext()
-    {
-        return newMock(FormComponentContributorContext.class);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestEmail.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestEmail.java
deleted file mode 100644
index 19cfa50..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestEmail.java
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.validator.Email}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestEmail extends BaseValidatorTestCase
-{
-    public void test_OK() throws Exception
-    {
-        IFormComponent field = newField();
-        ValidationMessages messages = newMessages();
-
-        replay();
-
-        new Email().validate(field, messages, "hlship@apache.org");
-
-        verify();
-    }
-
-    public void test_Ok_Single_Character() throws Exception
-    {
-        IFormComponent field = newField();
-        ValidationMessages messages = newMessages();
-
-        replay();
-        
-        Email email = new Email();
-        email.validate(field, messages, "j@apache.org");
-        email.validate(field, messages, "jkuhnert@a.org");
-
-        verify();
-    }
-    
-    public void test_Fail()
-    {
-        IFormComponent field = newField("My Email");
-        ValidationMessages messages = newMessages(
-                null,
-                ValidationStrings.INVALID_EMAIL,
-                new Object[]
-                { "My Email" },
-                "default message");
-
-        replay();
-
-        try
-        {
-            new Email().validate(field, messages, "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("default message", ex.getMessage());
-            assertEquals(ValidationConstraint.EMAIL_FORMAT, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void test_Fail_Custom_Message()
-    {
-        IFormComponent field = newField("My Email");
-        ValidationMessages messages = newMessages(
-                "custom",
-                ValidationStrings.INVALID_EMAIL,
-                new Object[]
-                { "My Email" },
-                "custom message");
-
-        replay();
-
-        try
-        {
-            new Email("message=custom").validate(field, messages, "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("custom message", ex.getMessage());
-            assertEquals(ValidationConstraint.EMAIL_FORMAT, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void test_Render_Contribution()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        IFormComponent field = newField("Fred", "myfield");
-        
-        context.addInitializationScript(field, "dojo.require(\"dojo.validate.web\");");
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        trainFormatMessage(context, null, ValidationStrings.INVALID_EMAIL, 
-                new Object[] { "Fred" }, "default\\message");
-        
-        replay();
-
-        new Email().renderContribution(writer, cycle, context, field);
-
-        verify();
-        
-        assertEquals("{\"constraints\":{\"myfield\":[[dojo.validate.isEmailAddress,false,true]]},"
-                +"\"myfield\":{\"constraints\":[\"default\\\\message\"]}}",
-                json.toString());
-    }
-
-    public void test_Render_Contribution_Custom_Message()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        IFormComponent field = newField("Fred", "barney");
-        
-        context.addInitializationScript(field, "dojo.require(\"dojo.validate.web\");");
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        trainFormatMessage(
-                context,
-                "custom",
-                ValidationStrings.INVALID_EMAIL,
-                new Object[]
-                { "Fred" },
-                "custom message");
-        
-        replay();
-        
-        new Email("message=custom").renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals("{\"constraints\":{\"barney\":[[dojo.validate.isEmailAddress,false,true]]},"
-                + "\"barney\":{\"constraints\":[\"custom message\"]}}",
-                json.toString());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestIdentity.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestIdentity.java
deleted file mode 100644
index 0e429a0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestIdentity.java
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2007 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.form.validator;

-

-import java.util.Locale;

-import org.apache.tapestry.IBinding;

-import org.apache.tapestry.IComponent;

-import org.apache.tapestry.form.ValidationMessagesImpl;

-import org.easymock.EasyMock;

-import static org.easymock.EasyMock.expect;

-import static org.easymock.EasyMock.aryEq;

-import static org.easymock.EasyMock.eq;

-import static org.easymock.EasyMock.isNull;

-import static org.easymock.EasyMock.checkOrder;

-

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.form.FormComponentContributorContext;

-import org.apache.tapestry.form.IFormComponent;

-import org.apache.tapestry.form.ValidationMessages;

-import org.apache.tapestry.json.JSONObject;

-import org.apache.tapestry.valid.ValidationConstraint;

-import org.apache.tapestry.valid.ValidationStrings;

-import org.apache.tapestry.valid.ValidatorException;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.form.validator.Identity}.

- * 

- * @since 4.1.2

- */

-@Test

-public class TestIdentity extends BaseValidatorTestCase

-{

-    public void testOK() throws Exception

-    {

-        IFormComponent field = newField();

-        IFormComponent otherField = newField();                

-        

-        trainGetContainerAndComponent(field, "newPass", otherField);

-        trainGetValueBinding(otherField, "pass");        

-        

-        ValidationMessages messages = newMessages();

-

-        replay();

-

-        new Identity("match=newPass").validate(field, messages, "pass");

-

-        verify();

-    }

-

-    public void testFail()

-    {

-        IFormComponent field = newField();

-        IFormComponent otherField = newField();                

-        

-        trainGetContainerAndComponent(field, "newPass", otherField);

-        trainGetValueBinding(otherField, "pass");

-        expect(field.getDisplayName()).andReturn("Password-1");

-        expect(otherField.getDisplayName()).andReturn("Password-2");

-        

-        ValidationMessages messages = newMessages();

-        trainIdentityMessages(messages, null, "Password-1", "Password-2", 1, "err1");        

-

-        replay();

-

-        try

-        {

-            new Identity("match=newPass").validate(field, messages, "passOTHER");

-        }

-        catch (ValidatorException ex)

-        {

-            assertEquals(ex.getMessage(), "err1");

-            assertEquals(ex.getConstraint(), ValidationConstraint.CONSISTENCY);

-        }

-    }

-

-    public void testFailCustomMessage()

-    {

-        IFormComponent field = newField();

-        IFormComponent otherField = newField();                

-        

-        trainGetContainerAndComponent(field, "newPass", otherField);

-        trainGetValueBinding(otherField, "pass");

-        expect(field.getDisplayName()).andReturn("Password-1");

-        expect(otherField.getDisplayName()).andReturn("Password-2");

-        

-        ValidationMessages messages = newMessages();

-        String msgOverride = "Should differ!";

-        trainIdentityMessages(messages, msgOverride, "Password-1", "Password-2", 0, msgOverride);

-

-        replay();

-

-        try

-        {

-            new Identity("differ=newPass,message=Should differ!").validate(field, messages, "pass");

-        }

-        catch (ValidatorException ex)

-        {

-            assertEquals(ex.getMessage(), msgOverride);

-            assertEquals(ex.getConstraint(), ValidationConstraint.CONSISTENCY);

-        }

-    }

-

-    public void test_Render_Contribution()

-    {

-        JSONObject json = new JSONObject();

-        

-        IFormComponent field = newField("Password", "pass1");

-        expect(field.isDisabled()).andReturn(false);

-        

-        IFormComponent otherField = newField("Verify Password", "pass2");

-        trainGetContainerAndComponent(field, "other", otherField);

-        

-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);        

-        expect(context.getProfile()).andReturn(json);        

-                

-        trainIdentityMessages(context, null, "Password", "Verify Password", 1, "Fields must match");        

-        

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle();

-        

-        replay();

-        

-        new Identity("match=other").renderContribution(writer, cycle, context, field);

-        

-        verify();

-        

-        assertEquals("{\"constraints\":{\"pass1\":[[tapestry.form.validation.isEqual,\"pass2\"]]},"

-                + "\"pass1\":{\"constraints\":[\"Fields must match\"]}}",

-                json.toString());

-    }    

-    

-    public void testNotRequired()

-    {

-        assertEquals(false, new Identity().isRequired());

-    }

-    

-    private void trainGetContainerAndComponent(IFormComponent field, String name, IFormComponent other) {

-        IComponent container = newComponent();

-        expect(field.getContainer()).andReturn(container);

-        expect(container.getComponent(name)).andReturn(other);        

-    }

-    

-    private void trainGetValueBinding(IFormComponent field, String value) {

-        IBinding ret = newBinding(value);

-        expect(field.getBinding("value")).andReturn(ret);

-    }   

-

-    private void trainIdentityMessages(ValidationMessages messages, String msgOverride,

-            String name1, String name2, int match, String result)

-    {

-        trainFormatMessage(messages, msgOverride, "invalid-field-equality", 

-                new Object[]{ name1, new Integer(match), name2 }, 

-                result);

-    }    

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java
deleted file mode 100644
index d743aa4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.text.DecimalFormatSymbols;
-import java.util.Locale;
-
-/**
- * Tests for {@link org.apache.tapestry.form.validator.Max}.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestMax extends BaseValidatorTestCase
-{
-
-    public void test_OK() throws Exception
-    {
-        IFormComponent field = newField();
-        ValidationMessages messages = newMessages();
-
-        Integer object = new Integer(10);
-
-        replay();
-
-        new Max("max=50").validate(field, messages, object);
-
-        verify();
-    }
-
-    public void test_Fail()
-    {
-        IFormComponent field = newField("My Field");
-        ValidationMessages messages = newMessages(
-                null,
-                ValidationStrings.VALUE_TOO_LARGE,
-                new Object[]
-                        { "My Field", new Double(10).toString() },
-                "Exception!");
-
-        expect(messages.getLocale()).andReturn(Locale.getDefault()).atLeastOnce();
-
-        replay();
-
-        try
-        {
-            new Max("max=10").validate(field, messages, new Integer(30));
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Exception!", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_LARGE, ex.getConstraint());
-        }
-    }
-
-    public void test_Fail_Custom_Message()
-    {
-        IFormComponent field = newField("My Field");
-        ValidationMessages messages = newMessages(
-                "custom",
-                ValidationStrings.VALUE_TOO_LARGE,
-                new Object[]
-                        { "My Field", new Double(100).toString() },
-                "custom message");
-
-        replay();
-
-        try
-        {
-            new Max("max=10,message=custom").validate(field, messages, new Integer(3));
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("custom message", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_LARGE, ex.getConstraint());
-        }
-    }
-
-    public void test_Render_Contribution()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        IFormComponent field = newField("My Field", "myfield");
-
-        context.addInitializationScript(field, "dojo.require(\"dojo.i18n.number\");");
-
-        Locale locale = Locale.GERMAN;
-        DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
-
-        expect(context.getLocale()).andReturn(locale).anyTimes();
-        expect(context.getProfile()).andReturn(json);
-
-        trainFormatMessage(context, null, ValidationStrings.VALUE_TOO_LARGE,
-                           new Object[] {
-                                   "My Field",
-                                   new Double(20).toString()
-                           }, "default message");
-
-        replay();
-
-        new Max("max=20").renderContribution(writer, cycle, context, field);
-
-        verify();
-
-        assertEquals(json.toString(),
-                     "{\"constraints\":{\"myfield\":" +
-                     "[[tapestry.form.validation.lessThanOrEqual,\"20.0\",{decimal:\",\"}]]}," +
-                     "\"myfield\":{\"constraints\":[\"default message\"]}}");
-    }
-
-    public void test_Render_Contribution_Custom_Message()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        IFormComponent field = newField("My Field", "myfield");
-
-        context.addInitializationScript(field, "dojo.require(\"dojo.i18n.number\");");
-
-        Locale locale = Locale.JAPAN;
-        DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
-
-        expect(context.getLocale()).andReturn(locale).anyTimes();
-        expect(context.getProfile()).andReturn(json);
-
-        trainFormatMessage(
-                context,
-                "custom",
-                ValidationStrings.VALUE_TOO_LARGE,
-                new Object[] {
-                        "My Field",
-                        new Double(20).toString()
-                }, "custom\\message");
-
-        replay();
-
-        new Max("max=20,message=custom").renderContribution(writer, cycle, context, field);
-
-        verify();
-
-        assertEquals(json.toString(),
-                     "{\"constraints\":{\"myfield\":" +
-                     "[[tapestry.form.validation.lessThanOrEqual,\"20.0\",{decimal:\".\"}]]}," +
-                     "\"myfield\":{\"constraints\":[\"custom\\\\message\"]}}");
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMaxDate.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMaxDate.java
deleted file mode 100644
index 03dc451..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMaxDate.java
+++ /dev/null
@@ -1,227 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.Date;
-import java.util.Locale;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.TranslatedField;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.form.translator.DateTranslator;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.validator.MaxDate}
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestMaxDate extends BaseValidatorTestCase
-{
-    private static final long ONE_DAY = 24 * 60 * 60 * 1000l;
-    
-    public void testOK() throws Exception
-    {
-        long now = System.currentTimeMillis();
-
-        Date today = new Date(now);
-        Date yesterday = new Date(now - ONE_DAY);
-
-        IFormComponent field = newField();
-        ValidationMessages message = newMessages();
-
-        replay();
-
-        MaxDate v = new MaxDate();
-        v.setMaxDate(today);
-
-        v.validate(field, message, yesterday);
-
-        verify();
-    }
-
-    public void testFail() throws Exception
-    {
-        long now = System.currentTimeMillis();
-
-        Date today = new Date(now);
-        Date tomorrow = new Date(now + ONE_DAY);
-
-        IFormComponent field = newField("Fred");
-        ValidationMessages message = newMessages(
-                null,
-                ValidationStrings.DATE_TOO_LATE,
-                new Object[]
-                { "Fred", today.toString() },
-                "default message");
-
-        replay();
-
-        MaxDate v = new MaxDate();
-        v.setMaxDate(today);
-
-        try
-        {
-            v.validate(field, message, tomorrow);
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("default message", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_LARGE, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testFailCustomMessage() throws Exception
-    {
-        long now = System.currentTimeMillis();
-
-        Date today = new Date(now);
-        Date tomorrow = new Date(now + ONE_DAY);
-
-        IFormComponent field = newField("Fred");
-        ValidationMessages message = newMessages(
-                "custom",
-                ValidationStrings.DATE_TOO_LATE,
-                new Object[]
-                { "Fred", today.toString() },
-                "custom message");
-
-        replay();
-
-        MaxDate v = new MaxDate("message=custom");
-        v.setMaxDate(today);
-
-        try
-        {
-            v.validate(field, message, tomorrow);
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("custom message", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_LARGE, ex.getConstraint());
-        }
-
-        verify();
-    }
-    
-    public void test_Render_Contribution()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        checkOrder(field, false);
-        
-        Date maxDate = new Date(System.currentTimeMillis() + ONE_DAY);
-        DateTranslator translator = new DateTranslator();
-        
-        expect(field.getTranslator()).andReturn(translator);
-        
-        expect(field.getClientId()).andReturn("myfield").anyTimes();
-        
-        expect(field.getDisplayName()).andReturn("My Field");
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        Locale locale = Locale.ENGLISH;
-        expect(context.getLocale()).andReturn(locale).anyTimes();
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        context.addInitializationScript(field, "dojo.require(\"tapestry.form.datetime\");");
-        
-        String strMax = translator.format(field, locale, maxDate);
-        
-        trainFormatMessage(context, null, ValidationStrings.DATE_TOO_LATE, 
-                new Object[] { "My Field", strMax }, "default message");
-        
-        replay();
-        
-        new MaxDate("maxDate="+strMax).renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals(json.toString(),"{\"constraints\":{\"myfield\":[["
-                + "tapestry.form.datetime.isValidDate,{max:\""
-                + strMax + "\",datePattern:"
-                + JSONObject.quote(translator.getPattern()) 
-                + "}]]},"
-                +"\"myfield\":{\"constraints\":[\"default message\"]}}");
-    }
-    
-    public void test_Render_Contribution_Custom_Message()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        checkOrder(field, false);
-        
-        Date maxDate = new Date(System.currentTimeMillis() + ONE_DAY);
-        DateTranslator translator = new DateTranslator();
-        
-        expect(field.getTranslator()).andReturn(translator);
-        
-        expect(field.getClientId()).andReturn("myfield").anyTimes();
-        
-        expect(field.getDisplayName()).andReturn("My Field");
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        Locale locale = Locale.ENGLISH;
-        expect(context.getLocale()).andReturn(locale).anyTimes();
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        context.addInitializationScript(field, "dojo.require(\"tapestry.form.datetime\");");
-        
-        String strMax = translator.format(field, locale, maxDate);
-        
-        trainFormatMessage(context, "custom", ValidationStrings.DATE_TOO_LATE, 
-                new Object[] { "My Field", strMax }, 
-                "custom\\message");
-        
-        replay();
-        
-        new MaxDate("maxDate=" + strMax + ",message=custom").renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals(json.toString(), "{\"constraints\":{\"myfield\":[["
-                + "tapestry.form.datetime.isValidDate,{max:\""
-                + strMax + "\",datePattern:"
-                + JSONObject.quote(translator.getPattern()) 
-                + "}]]},"
-                + "\"myfield\":{\"constraints\":[\"custom\\\\message\"]}}");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMaxLength.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMaxLength.java
deleted file mode 100644
index e528b37..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMaxLength.java
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import org.testng.annotations.Test;
-
-@Test
-public class TestMaxLength extends BaseValidatorTestCase
-{
-
-    public void testOK() throws Exception
-    {
-        IFormComponent field = newField();
-        ValidationMessages messages = newMessages();
-
-        String object = "short and sweet";
-
-        replay();
-
-        new MaxLength("maxLength=50").validate(field, messages, object);
-
-        verify();
-    }
-
-    public void testFail()
-    {
-        IFormComponent field = newField("My Field");
-        ValidationMessages messages = newMessages(
-                null,
-                ValidationStrings.VALUE_TOO_LONG,
-                new Object[]
-                { new Integer(10), "My Field" },
-                "Exception!");
-
-        replay();
-
-        try
-        {
-            new MaxLength("maxLength=10")
-                    .validate(field, messages, "brevity is the essence of wit");
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Exception!", ex.getMessage());
-            assertEquals(ValidationConstraint.MAXIMUM_WIDTH, ex.getConstraint());
-        }
-    }
-
-    public void testFailCustomMessage()
-    {
-        IFormComponent field = newField("My Field");
-        ValidationMessages messages = newMessages(
-                "Too Long",
-                ValidationStrings.VALUE_TOO_LONG,
-                new Object[]
-                { new Integer(10), "My Field" },
-                "Exception!");
-
-        replay();
-
-        try
-        {
-            new MaxLength("maxLength=10,message=Too Long").validate(
-                    field,
-                    messages,
-                    "this should be more than ten characters");
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Exception!", ex.getMessage());
-            assertEquals(ValidationConstraint.MAXIMUM_WIDTH, ex.getConstraint());
-        }
-    }
-
-    public void test_Render_Contribution()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        IFormComponent field = newField("My Field", "myfield");
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        trainFormatMessage(context, null, ValidationStrings.VALUE_TOO_LONG, 
-                new Object[] { new Integer(20), "My Field" }, "default\\message");
-        
-        replay();
-        
-        new MaxLength("maxLength=20").renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals("{\"constraints\":{\"myfield\":[[dojo.validate.isText,{maxlength:20}]]},"
-                +"\"myfield\":{\"constraints\":[\"default\\\\message\"]}}",
-                json.toString());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java
deleted file mode 100644
index 448aba5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.text.DecimalFormatSymbols;
-import java.util.Locale;
-
-/**
- * Tests for {@link org.apache.tapestry.form.validator.Min}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestMin extends BaseValidatorTestCase
-{
-    public void test_OK() throws Exception
-    {
-        IFormComponent field = newField();
-        ValidationMessages messages = newMessages();
-
-        Integer object = new Integer(10);
-
-        replay();
-
-        new Min("min=5").validate(field, messages, object);
-
-        verify();
-    }
-
-    public void test_Fail()
-    {
-        IFormComponent field = newField("My Field");
-        ValidationMessages messages = newMessages(
-                null,
-                ValidationStrings.VALUE_TOO_SMALL,
-                new Object[]
-                { "My Field", String.valueOf(new Double(10).doubleValue()) },
-                "Exception!");
-
-        expect(messages.getLocale()).andReturn(Locale.getDefault()).atLeastOnce();
-
-        replay();
-
-        try
-        {
-            new Min("min=10").validate(field, messages, new Integer(3));
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Exception!", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_SMALL, ex.getConstraint());
-        }
-    }
-
-    public void test_Fail_Custom_Message()
-    {
-        IFormComponent field = newField("My Field");
-        ValidationMessages messages = newMessages(
-                "custom",
-                ValidationStrings.VALUE_TOO_SMALL,
-                new Object[]
-                { "My Field", String.valueOf(new Double(10).doubleValue()) },
-                "custom message");
-
-        expect(messages.getLocale()).andReturn(Locale.getDefault()).atLeastOnce();
-
-        replay();
-
-        try
-        {
-            new Min("min=10,message=custom").validate(field, messages, new Integer(3));
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ex.getMessage(), "custom message");
-            assertEquals(ValidationConstraint.TOO_SMALL, ex.getConstraint());
-        }
-    }
-
-    public void test_Render_Contribution()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        IFormComponent field = newField("My Field", "myfield");
-
-        context.addInitializationScript(field, "dojo.require(\"dojo.i18n.number\");");
-
-        Locale locale = Locale.FRANCE;
-        DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
-        
-        expect(context.getLocale()).andReturn(locale).atLeastOnce();
-        expect(context.getProfile()).andReturn(json);
-        
-        trainFormatMessage(context, null, ValidationStrings.VALUE_TOO_SMALL, new Object[]
-        { "My Field", String.valueOf(new Double(20).doubleValue())}, "default message");
-        
-        replay();
-        
-        new Min("min=20").renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals(json.toString(), 
-                "{\"constraints\":{\"myfield\":" +
-                "[[tapestry.form.validation.greaterThanOrEqual,\"20.0\",{decimal:\",\"}]]}," +
-                "\"myfield\":{\"constraints\":[\"default message\"]}}");
-    }
-    
-    public void test_Render_Contribution_Custom_Message()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        IFormComponent field = newField("My Field", "myfield");
-
-        context.addInitializationScript(field, "dojo.require(\"dojo.i18n.number\");");
-
-        Locale locale = Locale.FRANCE;
-        DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
-        
-        expect(context.getLocale()).andReturn(locale).atLeastOnce();
-        expect(context.getProfile()).andReturn(json);
-        
-        trainFormatMessage(
-                context,
-                "custom",
-                ValidationStrings.VALUE_TOO_SMALL,
-                new Object[]
-                { "My Field", String.valueOf(new Double(20).doubleValue()) },
-                "custom\\message");
-        
-        replay();
-        
-        new Min("min=20,message=custom").renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals(json.toString(),
-                "{\"constraints\":{\"myfield\":" +
-                "[[tapestry.form.validation.greaterThanOrEqual,\"20.0\",{decimal:\",\"}]]}," +
-                "\"myfield\":{\"constraints\":[\"custom\\\\message\"]}}");
-    }
-    
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMinDate.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMinDate.java
deleted file mode 100644
index 704984e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMinDate.java
+++ /dev/null
@@ -1,227 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.Date;
-import java.util.Locale;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.TranslatedField;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.form.translator.DateTranslator;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.validator.MinDate}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestMinDate extends BaseValidatorTestCase
-{
-    private static final long ONE_DAY = 24 * 60 * 60 * 1000l;
-
-    public void testOK() throws Exception
-    {
-        long now = System.currentTimeMillis();
-
-        Date today = new Date(now);
-        Date yesterday = new Date(now - ONE_DAY);
-
-        IFormComponent field = newField();
-        ValidationMessages message = newMessages();
-
-        replay();
-
-        MinDate v = new MinDate();
-        v.setMinDate(yesterday);
-
-        v.validate(field, message, today);
-
-        verify();
-    }
-
-    public void testFail() throws Exception
-    {
-        long now = System.currentTimeMillis();
-
-        Date today = new Date(now);
-        Date tomorrow = new Date(now + ONE_DAY);
-
-        IFormComponent field = newField("Fred");
-        ValidationMessages message = newMessages(
-                null,
-                ValidationStrings.DATE_TOO_EARLY,
-                new Object[]
-                { "Fred", tomorrow.toString() },
-                "default message");
-
-        replay();
-        
-        MinDate v = new MinDate();
-        v.setMinDate(tomorrow);
-        
-        try
-        {
-            v.validate(field, message, today);
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("default message", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_SMALL, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testFailCustomMessage() throws Exception
-    {
-        long now = System.currentTimeMillis();
-
-        Date today = new Date(now);
-        Date tomorrow = new Date(now + ONE_DAY);
-
-        IFormComponent field = newField("Fred");
-        ValidationMessages message = newMessages(
-                "custom",
-                ValidationStrings.DATE_TOO_EARLY,
-                new Object[]
-                { "Fred", tomorrow.toString() },
-                "custom message");
-
-        replay();
-
-        MinDate v = new MinDate("message=custom");
-        v.setMinDate(tomorrow);
-
-        try
-        {
-            v.validate(field, message, today);
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("custom message", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_SMALL, ex.getConstraint());
-        }
-
-        verify();
-    }
-    
-    public void test_Render_Contribution()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        checkOrder(field, false);
-        
-        Date minDate = new Date(System.currentTimeMillis() + ONE_DAY);
-        DateTranslator translator = new DateTranslator();
-        
-        expect(field.getTranslator()).andReturn(translator);
-        
-        expect(field.getClientId()).andReturn("myfield").anyTimes();
-        
-        expect(field.getDisplayName()).andReturn("My Field");
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        Locale locale = Locale.ENGLISH;
-        expect(context.getLocale()).andReturn(locale).anyTimes();
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        context.addInitializationScript(field, "dojo.require(\"tapestry.form.datetime\");");
-        
-        String strMin = translator.format(field, locale, minDate);
-        
-        trainFormatMessage(context, null, ValidationStrings.DATE_TOO_EARLY, 
-                new Object[] { "My Field", strMin }, "default message");
-        
-        replay();
-        
-        new MinDate("minDate="+strMin).renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals(json.toString(),"{\"constraints\":{\"myfield\":[["
-                + "tapestry.form.datetime.isValidDate,{min:\""
-                + strMin + "\",datePattern:"
-                + JSONObject.quote(translator.getPattern()) 
-                + "}]]},"
-                + "\"myfield\":{\"constraints\":[\"default message\"]}}");
-    }
-    
-    public void test_Render_Contribution_Custom_Message()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        TranslatedField field = newMock(TranslatedField.class);
-        checkOrder(field, false);
-        
-        Date minDate = new Date(System.currentTimeMillis() + ONE_DAY);
-        DateTranslator translator = new DateTranslator();
-        
-        expect(field.getTranslator()).andReturn(translator);
-        
-        expect(field.getClientId()).andReturn("myfield").anyTimes();
-        
-        expect(field.getDisplayName()).andReturn("My Field");
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        Locale locale = Locale.ENGLISH;
-        expect(context.getLocale()).andReturn(locale).anyTimes();
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        context.addInitializationScript(field, "dojo.require(\"tapestry.form.datetime\");");
-        
-        String strMin = translator.format(field, locale, minDate);
-        
-        trainFormatMessage(context, "custom", ValidationStrings.DATE_TOO_EARLY, 
-                new Object[] { "My Field", strMin }, 
-                "custom\\message");
-        
-        replay();
-        
-        new MinDate("minDate=" + strMin + ",message=custom").renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals(json.toString(), "{\"constraints\":{\"myfield\":[["
-                + "tapestry.form.datetime.isValidDate,{min:\""
-                + strMin + "\",datePattern:"
-                + JSONObject.quote(translator.getPattern()) 
-                + "}]]},"
-                +"\"myfield\":{\"constraints\":[\"custom\\\\message\"]}}");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMinLength.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMinLength.java
deleted file mode 100644
index 06b32e3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMinLength.java
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.validator.MinLength}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestMinLength extends BaseValidatorTestCase
-{
-    public void testOK() throws Exception
-    {
-        IFormComponent field = newField();
-        ValidationMessages messages = newMessages();
-
-        String object = "a nice long string";
-
-        replay();
-
-        new MinLength("minLength=5").validate(field, messages, object);
-
-        verify();
-    }
-
-    public void testFail()
-    {
-        IFormComponent field = newField("My Field");
-        ValidationMessages messages = newMessages(
-                null,
-                ValidationStrings.VALUE_TOO_SHORT,
-                new Object[]
-                { new Integer(10), "My Field" },
-                "Exception!");
-
-        replay();
-
-        try
-        {
-            new MinLength("minLength=10").validate(field, messages, "short");
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Exception!", ex.getMessage());
-            assertEquals(ValidationConstraint.MINIMUM_WIDTH, ex.getConstraint());
-        }
-    }
-
-    public void testFailCustomMessage()
-    {
-        IFormComponent field = newField("My Field");
-        ValidationMessages messages = newMessages(
-                "Too Short",
-                ValidationStrings.VALUE_TOO_SHORT,
-                new Object[]
-                { new Integer(10), "My Field" },
-                "Exception!");
-
-        replay();
-
-        try
-        {
-            new MinLength("minLength=10,message=Too Short").validate(field, messages, "short");
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Exception!", ex.getMessage());
-            assertEquals(ValidationConstraint.MINIMUM_WIDTH, ex.getConstraint());
-        }
-    }
-
-    public void test_Render_Contribution()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        IFormComponent field = newField("My Field", "myfield");
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        trainFormatMessage(context, null, ValidationStrings.VALUE_TOO_SHORT, 
-                new Object[] { new Integer(25), "My Field" }, "default\\message");
-        
-        replay();
-        
-        new MinLength("minLength=25").renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals("{\"constraints\":{\"myfield\":[[dojo.validate.isText,{minlength:25}]]},"
-                +"\"myfield\":{\"constraints\":[\"default\\\\message\"]}}",
-                json.toString());
-    }
-    
-    public void test_Render_Contribution_Custom_Message()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        IFormComponent field = newField("My Field", "customField");
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-
-        expect(context.getProfile()).andReturn(json);
-        
-        trainFormatMessage(
-                context,
-                "custom",
-                ValidationStrings.VALUE_TOO_SHORT,
-                new Object[] { new Integer(25), "My Field" },
-                "custom\\message");
-        
-        replay();
-        
-        new MinLength("minLength=25,message=custom").renderContribution(
-                writer,
-                cycle,
-                context,
-                field);
-        
-        verify();
-        
-        assertEquals("{\"constraints\":{\"customField\":[[dojo.validate.isText,{minlength:25}]]},"
-                + "\"customField\":{\"constraints\":[\"custom\\\\message\"]}}",
-                json.toString());
-    }
-    
-    public void testNotRequired()
-    {
-        assertEquals(false, new MinLength().isRequired());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestPattern.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestPattern.java
deleted file mode 100644
index 5c40d16..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestPattern.java
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.util.RegexpMatcher;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.validator.Pattern}
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPattern extends BaseValidatorTestCase
-{
-
-    public void test_OK() throws Exception
-    {
-        IFormComponent field = newField();
-        ValidationMessages messages = newMessages();
-
-        replay();
-
-        new Pattern("pattern=\\d+").validate(field, messages, "1232");
-
-        verify();
-    }
-
-    public void test_Fail()
-    {
-        String pattern = "\\d+";
-        IFormComponent field = newField("My Pattern");
-        ValidationMessages messages = newMessages(
-                null,
-                ValidationStrings.PATTERN_MISMATCH,
-                new Object[]
-                { "My Pattern", pattern },
-                "default message");
-
-        replay();
-
-        try
-        {
-            new Pattern("pattern=\\d+").validate(field, messages, "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("default message", ex.getMessage());
-            assertEquals(ValidationConstraint.PATTERN_MISMATCH, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void test_Fail_Custom_Message()
-    {
-        String pattern = "\\d+";
-        IFormComponent field = newField("My Pattern");
-        ValidationMessages messages = newMessages(
-                "custom",
-                ValidationStrings.PATTERN_MISMATCH,
-                new Object[]
-                { "My Pattern", pattern },
-                "custom message");
-        
-        replay();
-        
-        try
-        {
-            new Pattern("pattern=\\d+,message=custom").validate(field, messages, "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("custom message", ex.getMessage());
-            assertEquals(ValidationConstraint.PATTERN_MISMATCH, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void test_Render_Contribution()
-    {
-        String rawPattern = "\\d+";
-        String pattern = new RegexpMatcher().getEscapedPatternString(rawPattern);
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        IFormComponent field = newField("Fred", "myfield");
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        trainFormatMessage(context, null, ValidationStrings.PATTERN_MISMATCH, 
-                new Object[] { "Fred", rawPattern }, "default message");
-        
-        replay();
-        
-        new Pattern("pattern=\\d+").renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals("{\"constraints\":{\"myfield\":[[tapestry.form.validation.isValidPattern,\""
-                + pattern + "\"]]},"
-                + "\"myfield\":{\"constraints\":[\"default message\"]}}",
-                json.toString());
-    }
-    
-    public void test_Render_Contribution_CustomMessage()
-    {
-        String rawPattern = "\\d+";
-        String pattern = new RegexpMatcher().getEscapedPatternString(rawPattern);
-        
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        IFormComponent field = newField("Fred", "myfield");
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        trainFormatMessage(
-                context,
-                "custom",
-                ValidationStrings.PATTERN_MISMATCH,
-                new Object[] { "Fred", rawPattern },
-                "custom\\message");
-        
-        replay();
-        
-        new Pattern("pattern=\\d+,message=custom").renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals("{\"constraints\":{\"myfield\":[[tapestry.form.validation.isValidPattern,\""
-                + pattern + "\"]]},"
-                +"\"myfield\":{\"constraints\":[\"custom\\\\message\"]}}",
-                json.toString());
-    }
-    
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestRequired.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestRequired.java
deleted file mode 100644
index a8fc76b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestRequired.java
+++ /dev/null
@@ -1,226 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Collections;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.json.JSONObject;
-import org.apache.tapestry.valid.ValidationConstants;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationStrings;
-import org.apache.tapestry.valid.ValidatorException;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.validator.Required}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestRequired extends BaseValidatorTestCase
-{
-    public void test_Validate_Not_Null() throws Exception
-    {
-        IFormComponent field = newField(false);
-        ValidationMessages messages = newMessages();
-
-        replay();
-
-        new Required().validate(field, messages, "not null");
-
-        verify();
-    }
-
-    public void test_Validate_Null() throws Exception
-    {
-        IFormComponent field = newField("Fred", false);
-        ValidationMessages messages = newMessages(
-                null,
-                ValidationStrings.REQUIRED_FIELD,
-                new Object[]
-                { "Fred" },
-                "Default Message for Fred.");
-
-        replay();
-
-        try
-        {
-            new Required().validate(field, messages, null);
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Default Message for Fred.", ex.getMessage());
-            assertSame(ValidationConstraint.REQUIRED, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void test_Validate_Empty_String() throws Exception
-    {
-        IFormComponent field = newField("Fred", false);
-        ValidationMessages messages = newMessages(
-                null,
-                ValidationStrings.REQUIRED_FIELD,
-                new Object[]
-                { "Fred" },
-                "Default Message for Fred.");
-
-        replay();
-
-        try
-        {
-            new Required().validate(field, messages, "");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Default Message for Fred.", ex.getMessage());
-            assertSame(ValidationConstraint.REQUIRED, ex.getConstraint());
-        }
-        
-        verify();
-    }
-
-    public void test_Validate_Empty_Collection() throws Exception
-    {
-        IFormComponent field = newField("Fred", false);
-        ValidationMessages messages = newMessages(
-                null,
-                ValidationStrings.REQUIRED_FIELD,
-                new Object[]
-                { "Fred" },
-                "Default Message for Fred.");
-
-        replay();
-
-        try
-        {
-            new Required().validate(field, messages, Collections.EMPTY_LIST);
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Default Message for Fred.", ex.getMessage());
-            assertSame(ValidationConstraint.REQUIRED, ex.getConstraint());
-        }
-        
-        verify();
-    }
-
-    public void test_Validate_Null_Custom_Message() throws Exception
-    {
-        IFormComponent field = newField("Fred", false);
-        ValidationMessages messages = newMessages(
-                "custom",
-                ValidationStrings.REQUIRED_FIELD,
-                new Object[]
-                { "Fred" },
-                "Custom Message for Fred.");
-
-        replay();
-
-        try
-        {
-            Required required = new Required("message=custom");
-
-            required.validate(field, messages, null);
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Custom Message for Fred.", ex.getMessage());
-            assertSame(ValidationConstraint.REQUIRED, ex.getConstraint());
-        }
-
-        verify();
-    }
-    
-    public void test_Validate_Disabled_Field() throws Exception
-    {
-        IFormComponent field = newField(true);
-        
-        replay();
-        
-        new Required().validate(field, null, null);
-        
-        verify();
-    }
-    
-    public void test_Render_Contribution()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        IFormComponent field = newField("Fred", "fred", false);
-        
-        context.registerForFocus(ValidationConstants.REQUIRED_FIELD);
-        
-        expect(context.getProfile()).andReturn(json);
-        
-        trainFormatMessage(
-                context,
-                null,
-                ValidationStrings.REQUIRED_FIELD,
-                new Object[]
-                { "Fred" },
-                "Default\\Message for Fred.");
-        
-        replay();
-        
-        new Required().renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals("{\"required\":[\"fred\"],\"fred\":{\"required\":[\"Default\\\\Message for Fred.\"]}}",
-                json.toString());
-    }
-    
-    public void test_Render_Contribution_Disabled()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        JSONObject json = new JSONObject();
-        
-        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
-        
-        IFormComponent field = newField(true);
-        
-        replay();
-        
-        new Required().renderContribution(writer, cycle, context, field);
-        
-        verify();
-        
-        assertEquals(json.toString(), "{}");
-    }
-    
-    public void testIsRequired()
-    {
-        assertEquals(true, new Required().isRequired());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java
deleted file mode 100644
index 927e4ad..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestValidatorFactory.java
+++ /dev/null
@@ -1,469 +0,0 @@
-// Copyright 2005, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IBeanProvider;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.junit.TapestryTestCase;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.form.validator.ValidatorFactoryImpl}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestValidatorFactory extends TapestryTestCase
-{
-
-    private Map buildContributions(String name, boolean configurable)
-    {
-        ValidatorContribution vc = newContribution(configurable, ValidatorFixture.class);
-
-        return Collections.singletonMap(name, vc);
-    }
-
-    private ValidatorContribution newContribution(boolean configurable, Class validatorClass)
-    {
-        ValidatorContribution vc = new ValidatorContribution();
-        vc.setConfigurable(configurable);
-        vc.setValidatorClass(validatorClass);
-
-        return vc;
-    }
-
-    public void test_Empty()
-    {
-        IComponent component = newComponent();
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-
-        replay();
-
-        List result = vf.constructValidatorList(component, "");
-
-        assertTrue(result.isEmpty());
-
-        verify();
-    }
-
-    public void test_Single()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(buildContributions("value", true));
-
-        List result = vf.constructValidatorList(component, "value=foo");
-
-        ValidatorFixture fixture = (ValidatorFixture) result.get(0);
-
-        assertEquals("foo", fixture.getValue());
-
-        verify();
-    }
-
-    public void test_Message()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(buildContributions("fred", false));
-
-        List result = vf.constructValidatorList(component, "fred[fred's message]");
-
-        ValidatorFixture fixture = (ValidatorFixture) result.get(0);
-
-        assertEquals("fred's message", fixture.getMessage());
-
-        verify();
-    }
-
-    public void test_Localized_Message()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(buildContributions("value", true));
-
-        List result = vf.constructValidatorList(component, "value=199.9999999999999[%defaultProb-interestRate]");
-
-        ValidatorFixture fixture = (ValidatorFixture) result.get(0);
-
-        assertEquals(fixture.getMessage(), "%defaultProb-interestRate");
-
-        verify();
-    }
-
-    public void test_Configure_And_Message()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(buildContributions("value", true));
-
-        List result = vf.constructValidatorList(component, "value=biff[fred's message]");
-
-        ValidatorFixture fixture = (ValidatorFixture) result.get(0);
-
-        assertEquals(fixture.getValue(), "biff");
-        assertEquals(fixture.getMessage(), "fred's message");
-
-        verify();
-    }
-
-    public void test_Missing_Configuration()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(buildContributions("fred", true));
-
-        try
-        {
-            vf.constructValidatorList(component, "fred");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Validator 'name' must be configured in order to be used. "
-                    + "The value is configured by changing 'name' to 'name=value'.", ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void test_Multiple()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        Map map = new HashMap();
-        map.put("required", newContribution(false, Required.class));
-        map.put("email", newContribution(false, Email.class));
-        map.put("minLength", newContribution(true, MinLength.class));
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(map);
-
-        List result = vf.constructValidatorList(component,
-                "required[EMail is required],email,minLength=10[EMail must be at least ten characters long]");
-
-        assertEquals(3, result.size());
-
-        Required r = (Required) result.get(0);
-        assertEquals("EMail is required", r.getMessage());
-
-        assertTrue(result.get(1) instanceof Email);
-
-        MinLength minLength = (MinLength) result.get(2);
-
-        assertEquals(10, minLength.getMinLength());
-        assertEquals("EMail must be at least ten characters long", minLength.getMessage());
-
-        verify();
-    }
-
-    public void test_Multiple_Localized()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        Map map = new HashMap();
-        map.put("required", newContribution(false, Required.class));
-        map.put("min", newContribution(true, Min.class));
-        map.put("max", newContribution(true, Max.class));
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(map);
-
-        List result = vf.constructValidatorList(component,
-                "required,min=0.000000000001[%defaultProbInterestRate],\n" +
-                "max=199.9999999999999[%defaultProb-interestRate]");
-
-        assertEquals(3, result.size());
-
-        Required r = (Required) result.get(0);
-        assert r.getMessage() == null;
-        assert r.isRequired();
-
-        Min min = (Min) result.get(1);
-        assertEquals(min.getMessage(), "%defaultProbInterestRate");
-        assertEquals(min.getMin(), 0.000000000001);
-
-        Max max = (Max) result.get(2);
-        assertEquals(max.getMessage(), "%defaultProb-interestRate");
-        assertEquals(max.getMax(), 199.9999999999999);
-       
-        verify();
-    }
-
-    public void test_Unparseable()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(buildContributions("fred", false));
-
-        try
-        {
-            vf.constructValidatorList(component, "fred,=foo");
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Unable to parse 'fred,=foo' into a list of validators.", ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void test_Unwanted_Configuration()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(buildContributions("fred", false));
-
-        try
-        {
-            vf.constructValidatorList(component, "fred=biff");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Validator 'fred' is not configurable, " + "'fred=biff' should be changed to just 'fred'.", ex
-                    .getMessage());
-        }
-
-        verify();
-    }
-
-    public void test_Missing_Validator()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(Collections.EMPTY_MAP);
-
-        try
-        {
-            vf.constructValidatorList(component, "missing");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("No validator named 'missing' has been defined.", ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void test_Instantiate_Failure()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        Map map = new HashMap();
-
-        map.put("fred", newContribution(false, Object.class));
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(map);
-
-        try
-        {
-            vf.constructValidatorList(component, "fred");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertTrue(ex.getMessage().startsWith(
-                    "Error initializing validator 'fred' (class java.lang.Object): java.lang.Object"));
-        }
-
-        verify();
-    }
-
-    private Validator newValidator()
-    {
-        return newMock(Validator.class);
-    }
-
-    private IBeanProvider newBeanProvider(String beanName, Object bean)
-    {
-        IBeanProvider provider = newMock(IBeanProvider.class);
-        checkOrder(provider, false);
-        
-        expect(provider.getBean(beanName)).andReturn(bean);
-
-        return provider;
-    }
-
-    private IComponent newComponent(IBeanProvider provider)
-    {
-        IComponent component = newComponent();
-
-        expect(component.getBeans()).andReturn(provider);
-
-        return component;
-    }
-
-    public void test_Bean_Reference()
-        throws Exception
-    {
-        Validator validator = newValidator();
-        IBeanProvider provider = newBeanProvider("fred", validator);
-        IComponent component = newComponent(provider);
-
-        IFormComponent field = newField();
-        ValidationMessages messages = newMessages();
-        Object value = new Object();
-
-        validator.validate(field, messages, value);
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(Collections.EMPTY_MAP);
-
-        List validators = vf.constructValidatorList(component, "$fred");
-
-        assertEquals(1, validators.size());
-
-        Validator wrapper = (Validator) validators.get(0);
-
-        wrapper.validate(field, messages, value);
-
-        verify();
-    }
-
-    private ValidationMessages newMessages()
-    {
-        return newMock(ValidationMessages.class);
-    }
-
-    private IFormComponent newField()
-    {
-        return newMock(IFormComponent.class);
-    }
-
-    public void test_Bean_Reference_Not_Validator()
-    {
-        Object bean = new Object();
-        IBeanProvider provider = newBeanProvider("fred", bean);
-        IComponent component = newComponent(provider);
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(Collections.EMPTY_MAP);
-
-        try
-        {
-            List l = vf.constructValidatorList(component, "$fred");
-
-            Validator wrapper = (Validator) l.get(0);
-
-            wrapper.getAcceptsNull();
-
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Bean 'fred' does not implement the org.apache.tapestry.form.validator.Validator interface.",
-                    ex.getMessage());
-            assertSame(bean, ex.getComponent());
-        }
-
-        verify();
-    }
-
-    public void test_Bean_Reference_With_Value()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(Collections.EMPTY_MAP);
-
-        try
-        {
-            vf.constructValidatorList(component, "$fred=10");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Validator 'fred' is a reference to a managed bean of the component, and may not have a value or a message override specified.",
-                    ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void test_Bean_Reference_With_Message()
-    {
-        IComponent component = newComponent();
-
-        replay();
-
-        ValidatorFactoryImpl vf = new ValidatorFactoryImpl();
-        vf.setValidators(Collections.EMPTY_MAP);
-
-        try
-        {
-            vf.constructValidatorList(component, "$fred[custom message]");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Validator 'fred' is a reference to a managed bean of the component, and may not have a value or a message override specified.",
-                    ex.getMessage());
-        }
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java
deleted file mode 100644
index f763e40..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestValidatorWrapper.java
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.form.validator;

-

-import static org.easymock.EasyMock.expect;

-

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.form.FormComponentContributorContext;

-import org.apache.tapestry.form.IFormComponent;

-import org.apache.tapestry.form.ValidationMessages;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.form.validator.AbstractValidatorWrapper}

- * 

- * @author Howard Lewis Ship

- * @since 4.0

- */

-@Test

-public class TestValidatorWrapper extends BaseValidatorTestCase

-{

-    public static class Fixture extends AbstractValidatorWrapper

-    {

-        private final Validator _delegate;

-

-        public Fixture(Validator delegate)

-        {

-            _delegate = delegate;

-        }

-

-        protected Validator getDelegate()

-        {

-            return _delegate;

-        }

-    }

-

-    private Validator newValidator()

-    {

-        return newMock(Validator.class);

-    }

-

-    public void testValidate() throws Exception

-    {

-        IFormComponent field = newField();

-        ValidationMessages messages = newMessages();

-        Object value = new Object();

-

-        Validator delegate = newValidator();

-

-        delegate.validate(field, messages, value);

-

-        replay();

-

-        new Fixture(delegate).validate(field, messages, value);

-

-        verify();

-    }

-

-    public void testRenderContribution()

-    {

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle();

-        FormComponentContributorContext context = newContext();

-        IFormComponent field = newField();

-

-        Validator delegate = newValidator();

-

-        delegate.renderContribution(writer, cycle, context, field);

-

-        replay();

-

-        new Fixture(delegate).renderContribution(writer, cycle, context, field);

-

-        verify();

-    }

-

-    public void testGetAcceptsNull()

-    {

-        Validator delegate = newMock(Validator.class);

-

-        expect(delegate.getAcceptsNull()).andReturn(true);

-

-        replay();

-

-        Validator wrapper = new Fixture(delegate);

-

-        assertEquals(true, wrapper.getAcceptsNull());

-

-        verify();

-

-        expect(delegate.getAcceptsNull()).andReturn(false);

-

-        replay();

-

-        assertEquals(false, wrapper.getAcceptsNull());

-

-        verify();

-    }

-

-    public void testIsRequired()

-    {

-        Validator delegate = newMock(Validator.class);

-

-        expect(delegate.isRequired()).andReturn(true);

-

-        replay();

-

-        Validator wrapper = new Fixture(delegate);

-

-        assertEquals(true, wrapper.isRequired());

-

-        verify();

-

-        expect(delegate.isRequired()).andReturn(false);

-

-        replay();

-

-        assertEquals(false, wrapper.isRequired());

-

-        verify();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestValidatorsBinding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestValidatorsBinding.java
deleted file mode 100644
index fc79f21..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestValidatorsBinding.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.BindingTestCase;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.form.validator.ValidatorsBinding} and
- * {@link org.apache.tapestry.form.validator.ValidatorsBindingFactory}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestValidatorsBinding extends BindingTestCase
-{
-    public void testSuccess()
-    {
-        IComponent component = newComponent();
-        Location l = newLocation();
-        List validators = newMock(List.class);
-        ValueConverter vc = newValueConverter();
-        
-        ValidatorFactory vf = newMock(ValidatorFactory.class);
-
-        expect(vf.constructValidatorList(component, "required")).andReturn(validators);
-
-        replay();
-
-        ValidatorsBindingFactory factory = new ValidatorsBindingFactory();
-        factory.setValueConverter(vc);
-        factory.setValidatorFactory(vf);
-
-        IBinding binding = factory.createBinding(component, "my desc", "required", l);
-
-        assertSame(validators, binding.getObject());
-        assertSame(l, binding.getLocation());
-        assertEquals("my desc", binding.getDescription());
-
-        verify();
-    }
-
-    public void testFailure()
-    {
-        IComponent component = newComponent();
-        Throwable t = new RuntimeException("Boom!");
-        Location l = newLocation();
-
-        ValueConverter vc = newValueConverter();
-
-        ValidatorFactory vf = newMock(ValidatorFactory.class);
-
-        expect(vf.constructValidatorList(component, "required")).andThrow(t);
-
-        replay();
-
-        ValidatorsBindingFactory factory = new ValidatorsBindingFactory();
-        factory.setValueConverter(vc);
-        factory.setValidatorFactory(vf);
-
-        try
-        {
-            factory.createBinding(component, "my desc", "required", l);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Boom!", ex.getMessage());
-            assertSame(t, ex.getRootCause());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/ValidatorFixture.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/ValidatorFixture.java
deleted file mode 100644
index 1d607b1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/form/validator/ValidatorFixture.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form.validator;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.FormComponentContributorContext;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.ValidationMessages;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Used by {@link org.apache.tapestry.form.validator.TestValidatorFactory}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ValidatorFixture implements Validator
-{
-    private String _value;
-
-    private String _message;
-
-    public void validate(IFormComponent field, ValidationMessages messages, Object object)
-            throws ValidatorException
-    {
-    }
-
-    public boolean getAcceptsNull()
-    {
-        return false;
-    }
-
-    public void renderContribution(IMarkupWriter writer, IRequestCycle cycle,
-            FormComponentContributorContext context, IFormComponent field)
-    {
-    }
-
-    public String getMessage()
-    {
-        return _message;
-    }
-
-    public void setMessage(String message)
-    {
-        _message = message;
-    }
-
-    public String getValue()
-    {
-        return _value;
-    }
-
-    public void setValue(String value)
-    {
-        _value = value;
-    }
-
-    public boolean isRequired()
-    {
-        return false;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/DescribeTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/DescribeTest.java
deleted file mode 100644
index 4005500..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/DescribeTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.html;

-

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.describe.HTMLDescriber;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.html.Describe}.

- * 

- * @author Howard M. Lewis Ship

- */

-@Test

-public class DescribeTest extends BaseComponentTestCase

-{

-    public void testRewinding()

-    {

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle(true, false);

-

-        replay();

-

-        Describe component = (Describe) newInstance(Describe.class);

-

-        component.renderComponent(writer, cycle);

-

-        verify();

-    }

-

-    public void testRender()

-    {

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle(false, false);

-        

-        Object object = new Object();

-        

-        HTMLDescriber describer = newMock(HTMLDescriber.class);

-

-        describer.describeObject(object, writer);

-

-        replay();

-

-        Describe component = newInstance(Describe.class, new Object[]

-        { "object", object, "describer", describer });

-

-        component.renderComponent(writer, cycle);

-

-        verify();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/FrameTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/FrameTest.java
deleted file mode 100644
index f339203..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/FrameTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.html;

-

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.IBinding;

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.engine.IEngineService;

-import org.apache.tapestry.engine.ILink;

-import org.apache.tapestry.spec.ComponentSpecification;

-import org.testng.annotations.Test;

-

-/**

- * Tests for the {@link org.apache.tapestry.html.Frame} component.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class FrameTest extends BaseComponentTestCase

-{

-

-    public void testRender()

-    {

-        IEngineService pageService = newEngineService();

-        ILink link = newLink();

-

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle();

-

-        trainGetLink(pageService, cycle, false, "FramePage", link);

-

-        writer.beginEmpty("frame");

-        

-        trainGetURL(link, "<LinkURL>");

-        

-        writer.attribute("src", "<LinkURL>");

-

-        writer.closeTag();

-

-        replay();

-

-        Frame frame = newInstance(Frame.class, new Object[]

-        { "pageService", pageService, "targetPage", "FramePage" });

-

-        frame.renderComponent(writer, cycle);

-

-        verify();

-    }

-

-    public void testRenderWithInformal()

-    {

-        IEngineService pageService = newEngineService();

-        ILink link = newLink();

-

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle();

-        

-        trainGetLink(pageService, cycle, false, "FramePage", link);

-        

-        writer.beginEmpty("frame");

-        

-        trainGetURL(link, "<LinkURL>");

-        

-        writer.attribute("src", "<LinkURL>");

-        

-        IBinding binding = newBinding("informal");

-        

-        writer.attribute("class", "informal");

-

-        writer.closeTag();

-

-        replay();

-

-        Frame frame = newInstance(Frame.class, new Object[]

-        { "pageService", pageService, "targetPage", "FramePage", "specification",

-                new ComponentSpecification() });

-        frame.setBinding("class", binding);

-

-        frame.renderComponent(writer, cycle);

-

-        verify();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/ListenerFixture.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/ListenerFixture.java
deleted file mode 100644
index daff4d2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/ListenerFixture.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.event.PageAttachListener;
-import org.apache.tapestry.event.PageBeginRenderListener;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEndRenderListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageValidateListener;
-
-/**
- * @author Howard M. Lewis Ship
- */
-public class ListenerFixture implements PageAttachListener, PageBeginRenderListener,
-        PageDetachListener, PageEndRenderListener, PageValidateListener
-{
-    private String _method;
-
-    public String getMethod()
-    {
-        return _method;
-    }
-
-    public void reset()
-    {
-        _method = null;
-    }
-
-    public void pageAttached(PageEvent event)
-    {
-        _method = "pageAttached";
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        _method = "pageBeginRender";
-    }
-
-    public void pageDetached(PageEvent event)
-    {
-        _method = "pageDetached";
-    }
-
-    public void pageEndRender(PageEvent event)
-    {
-        _method = "pageEndRender";
-    }
-
-    public void pageValidate(PageEvent event)
-    {
-        _method = "pageValidate";
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/ScriptTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/ScriptTest.java
deleted file mode 100644
index 08920ec..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/ScriptTest.java
+++ /dev/null
@@ -1,445 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.html;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.Location;

-import org.apache.hivemind.Resource;

-import org.apache.tapestry.*;

-import org.apache.tapestry.asset.AssetSource;

-import org.apache.tapestry.engine.IScriptSource;

-import org.apache.tapestry.spec.ComponentSpecification;

-import org.apache.tapestry.spec.IComponentSpecification;

-import static org.easymock.EasyMock.*;

-import org.testng.annotations.Test;

-

-import java.util.HashMap;

-import java.util.Locale;

-import java.util.Map;

-

-/**

- * Tests for the {@link Script} component.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class ScriptTest extends BaseComponentTestCase

-{

-    private static class MockScript implements IScript

-    {

-        Map _symbols;

-

-        public void execute(IRequestCycle cycle, IScriptProcessor processor, Map symbols)

-        {

-            _symbols = symbols;

-        }

-

-        public void execute(IComponent target, IRequestCycle cycle, IScriptProcessor processor, Map symbols)

-        {

-            _symbols = symbols;

-        }

-        

-        public Resource getScriptResource()

-        {

-            // TODO Auto-generated method stub

-            return null;

-        }

-

-    }

-

-    /**

-     * No input symbols, no informal parameters.

-     */

-    public void test_Minimal_Render()

-    {

-        IScriptSource source = newScriptSource();

-        IScript script = newScript();

-

-        IMarkupWriter writer = newWriter();

-        

-        PageRenderSupport support = newPageRenderSupport();

-        

-        IRequestCycle cycle = newCycle(false, null);

-        AssetSource assetSource = newMock(AssetSource.class);

-        IPage page = newMock(IPage.class);

-        expect(page.getLocale()).andReturn(Locale.getDefault());

-        

-        trainGetPageRenderSupport(cycle, support);

-        

-        Resource scriptLocation = newResource();

-        IRender body = newRender();

-        

-        IComponent container = newComponent();

-

-        String scriptPath = "MyScript.script";

-

-        Script component = newInstance(Script.class,

-                "specification", new ComponentSpecification(),

-                "container", container,

-                "scriptSource", source,

-                "scriptPath", scriptPath,

-                "assetSource", assetSource,

-                "page", page

-        );

-        

-        trainGetScriptLocation(container, scriptPath, scriptLocation, assetSource);

-        

-        trainGetScript(source, scriptLocation, script);

-

-        script.execute(component, cycle, support, new HashMap());

-

-        trainResponseBuilder(cycle, writer);

-        

-        body.render(writer, cycle);

-        

-        replay();

-

-        component.addBody(body);

-

-        component.renderComponent(writer, cycle);

-

-        verify();

-    }

-

-    public void test_With_Symbols_Map()

-    {

-        IScriptSource source = newScriptSource();

-        MockScript script = new MockScript();

-

-        PageRenderSupport support = newPageRenderSupport();

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle(false, null);

-        AssetSource assetSource = newMock(AssetSource.class);

-

-        IPage page = newMock(IPage.class);

-        expect(page.getLocale()).andReturn(Locale.getDefault());

-

-        trainGetPageRenderSupport(cycle, support);

-        

-        Resource scriptLocation = newResource();

-        IRender body = newRender();

-

-        IComponent container = newComponent();

-

-        Map baseSymbols = new HashMap();

-        baseSymbols.put("fred", "barney");

-

-        String scriptPath = "MyScript.script";

-

-        Script component = newInstance(Script.class,

-                "specification", new ComponentSpecification(),

-                "container", container,

-                "scriptSource", source,

-                "scriptPath", scriptPath,

-                "baseSymbols", baseSymbols,

-                "assetSource", assetSource,

-                "page", page

-        );

-

-        trainGetScriptLocation(container, scriptPath, scriptLocation, assetSource);

-

-        trainGetScript(source, scriptLocation, script);

-

-        trainResponseBuilder(cycle, writer);

-        

-        body.render(writer, cycle);

-        

-        replay();

-

-        component.addBody(body);

-

-        component.renderComponent(writer, cycle);

-

-        verify();

-

-        assertEquals(baseSymbols, script._symbols);

-        assertSame(script._symbols, component.getSymbols());

-        assertNotSame(baseSymbols, script._symbols);

-    }

-

-    public void test_With_Symbols_Map_And_Informal_Parameters()

-    {

-        IScriptSource source = newScriptSource();

-        MockScript script = new MockScript();

-

-        PageRenderSupport support = newPageRenderSupport();

-        IRequestCycle cycle = newCycle(false, null);

-        AssetSource assetSource = newMock(AssetSource.class);

-        

-        IPage page = newMock(IPage.class);

-        expect(page.getLocale()).andReturn(Locale.getDefault());

-

-        trainGetPageRenderSupport(cycle, support);

-        

-        IMarkupWriter writer = newWriter();

-        Resource scriptLocation = newResource();

-        IRender body = newRender();

-

-        IComponent container = newComponent();

-

-        Map baseSymbols = new HashMap();

-        baseSymbols.put("fred", "flintstone");

-        baseSymbols.put("flash", "gordon");

-

-        IBinding informal = newBinding("mercury");

-

-        String scriptPath = "MyScript.script";

-

-        Script component = newInstance(Script.class,

-                "specification", new ComponentSpecification(),

-                "container", container,

-                "scriptSource", source,

-                "scriptPath", scriptPath,

-                "baseSymbols", baseSymbols,

-                "assetSource", assetSource,

-                "page", page

-        );

-        component.setBinding("fred", informal);

-

-        trainGetScriptLocation(container, scriptPath, scriptLocation, assetSource);

-

-        trainGetScript(source, scriptLocation, script);

-

-        trainResponseBuilder(cycle, writer);

-        

-        body.render(writer, cycle);

-        

-        replay();

-

-        component.addBody(body);

-

-        component.renderComponent(writer, cycle);

-

-        verify();

-

-        Map expectedSymbols = new HashMap(baseSymbols);

-        expectedSymbols.put("fred", "mercury");

-

-        assertEquals(expectedSymbols, script._symbols);

-        assertSame(script._symbols, component.getSymbols());

-    }

-

-    public void test_Rewinding()

-    {

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle(true, writer);

-        IRender body = newRender();

-

-        body.render(writer, cycle);

-        

-        replay();

-

-        Script component = (Script) newInstance(Script.class);

-

-        component.addBody(body);

-

-        component.renderComponent(writer, cycle);

-

-        verify();

-    }

-

-    public void test_MultiParam_Exception() 

-    {

-    	IScriptSource source = newScriptSource();

-        

-        PageRenderSupport support = newPageRenderSupport();

-        IRequestCycle cycle = newCycle(false, false);

-        IMarkupWriter writer = newWriter();

-        IRender body = newRender();

-        

-        IComponent container = newComponent();

-

-        String scriptPath = "MyScript.script";

-        

-        IAsset scriptAsset = newAsset();

-

-        Script component = newInstance(Script.class,

-                "specification", new ComponentSpecification(),

-                "container", container,

-                "scriptSource", source,

-                "scriptPath", scriptPath,

-                "scriptAsset", scriptAsset

-        );

-

-        trainGetPageRenderSupport(cycle, support);

-        

-        replay();

-        

-        component.addBody(body);

-        

-        try {

-        	component.renderComponent(writer, cycle);

-        } catch (ApplicationRuntimeException ex) {

-        	assertExceptionSubstring(ex, "Script component has both script IAsset");

-        }

-        

-        verify();

-    }

-    

-    public void test_NoParam_Exception() 

-    {

-    	IScriptSource source = newScriptSource();

-        

-        PageRenderSupport support = newPageRenderSupport();

-        IRequestCycle cycle = newCycle(false, false);

-        IMarkupWriter writer = newWriter();

-        IRender body = newRender();

-        

-        IComponent container = newComponent();

-

-        String scriptPath = "MyScript.script";

-        

-        IAsset scriptAsset = newAsset();

-

-        Script component = newInstance(Script.class,

-                "specification", new ComponentSpecification(),

-                "container", container,

-                "scriptSource", source

-        );

-

-        trainGetPageRenderSupport(cycle, support);

-        

-        replay();

-        

-        component.addBody(body);

-        

-        try {

-        	component.renderComponent(writer, cycle);

-        } catch (ApplicationRuntimeException ex) {

-        	assertExceptionSubstring(ex, "neither parameter was set");

-        }

-        

-        verify();

-    }    

-    

-    public void test_IAsset_NotFound_Exception() 

-    {

-        IScriptSource source = newScriptSource();

-        IScript script = newScript();

-        

-        PageRenderSupport support = newPageRenderSupport();

-        

-        IRequestCycle cycle = newCycle(false, null);

-        

-        trainGetPageRenderSupport(cycle, support);

-        

-        IMarkupWriter writer = newWriter();

-        Resource scriptLocation = newResource();

-        IRender body = newRender();

-        

-        IComponent container = newComponent();

-        

-        IAsset scriptAsset = newAsset();

-        

-        expect(scriptAsset.getResourceLocation()).andReturn(scriptLocation);

-

-        Script component = newInstance(Script.class,

-                "specification", new ComponentSpecification(),

-                "container", container,

-                "scriptSource", source,

-                "scriptAsset", scriptAsset

-        );

-        

-        expect(source.getScript(scriptLocation)).andThrow(new RuntimeException());

-        

-        replay();

-        

-        component.addBody(body);

-        

-        try {

-        	component.renderComponent(writer, cycle);

-                unreachable();

-        } catch (ApplicationRuntimeException ex) {

-        }        

-        

-        verify();

-    }      

-    

-    public void test_IAsset_Param_Render()

-    {

-        IScriptSource source = newScriptSource();

-        IScript script = newScript();

-        

-        PageRenderSupport support = newPageRenderSupport();

-        

-        IRequestCycle cycle = newCycle(false, null);

-        

-        trainGetPageRenderSupport(cycle, support);

-        

-        IMarkupWriter writer = newWriter();

-        Resource scriptLocation = newResource();

-        IRender body = newRender();

-        

-        IComponent container = newComponent();

-        

-        IAsset scriptAsset = newAsset();

-        

-        expect(scriptAsset.getResourceLocation()).andReturn(scriptLocation);

-

-        Script component = newInstance(Script.class,

-                "specification", new ComponentSpecification(),

-                "container", container,

-                "scriptSource", source,

-                "scriptAsset", scriptAsset

-        );

-

-        trainGetScript(source, scriptLocation, script);

-        

-        script.execute(component, cycle, support, new HashMap());

-        

-        trainResponseBuilder(cycle, writer);

-        

-        body.render(writer, cycle);

-        

-        replay();

-        

-        component.addBody(body);

-        

-        component.renderComponent(writer, cycle);

-        

-        verify();

-    }

-    

-    protected IScript newScript()

-    {

-        return newMock(IScript.class);

-    }

-

-    protected void trainGetScript(IScriptSource source, Resource scriptLocation, IScript script)

-    {

-        expect(source.getScript(scriptLocation)).andReturn(script);

-    }

-

-    protected IScriptSource newScriptSource()

-    {

-        return newMock(IScriptSource.class);

-    }

-

-    protected void trainGetScriptLocation(IComponent component, String scriptPath,

-            Resource scriptLocation, AssetSource assetSource)

-    {

-        IComponentSpecification spec = newSpec();

-        Resource resource = newResource();

-        IAsset asset = newMock(IAsset.class);

-

-        expect(component.getSpecification()).andReturn(spec).anyTimes();

-        

-        expect(spec.getSpecificationLocation()).andReturn(resource);

-

-        expect(assetSource.findAsset(eq(resource), eq(spec), eq(scriptPath), isA(Locale.class), (Location)isNull())).andReturn(asset);

-        expect(asset.getResourceLocation()).andReturn(scriptLocation);        

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestImage.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestImage.java
deleted file mode 100644
index f15d4e5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestImage.java
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.html;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.hivemind.Location;

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.IAsset;

-import org.apache.tapestry.IBinding;

-import org.apache.tapestry.IMarkupWriter;

-import org.apache.tapestry.IPage;

-import org.apache.tapestry.IRequestCycle;

-import org.apache.tapestry.spec.IComponentSpecification;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.html.Image} component.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test(sequential=true)

-public class TestImage extends BaseComponentTestCase

-{

-    public void testRewinding()

-    {

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle();

-

-        trainIsRewinding(cycle, true);

-

-        Image image = (Image) newInstance(Image.class);

-

-        replay();

-

-        image.renderComponent(writer, cycle);

-

-        verify();

-    }

-

-    public void testNoImage()

-    {

-        Location l = newLocation();

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle();

-        IPage page = newPage();

-

-        trainIsRewinding(cycle, false);

-

-        trainGetPageName(page, "Fred");

-        trainGetIdPath(page, null);

-

-        Image image = newInstance(Image.class, new Object[]

-        { "location", l, "id", "barney", "page", page, "container", page });

-

-        replay();

-

-        try

-        {

-            image.renderComponent(writer, cycle);

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertEquals(

-                    "Value for parameter 'image' in component Fred/barney is null, and a non-null value is required.",

-                    ex.getMessage());

-            assertSame(image, ex.getComponent());

-            assertSame(l, ex.getLocation());

-        }

-

-        verify();

-    }

-

-    public void testRender()

-    {

-        IMarkupWriter writer = newWriter();

-        IRequestCycle cycle = newCycle(false);

-        

-        IAsset asset = newAsset();

-        trainBuildURL(asset, cycle, "/foo.gif");

-        

-        writer.beginEmpty("img");

-        writer.attribute("src", "/foo.gif");

-        

-        IComponentSpecification spec = newSpec("border", null);

-        IBinding informal = newBinding("0");

-        

-        writer.attribute("border", "0");

-

-        writer.closeTag();

-        

-        replay();

-        

-        Image image = newInstance(Image.class, new Object[]

-        { "image", asset, "specification", spec });

-        

-        image.setBinding("border", informal);

-

-        image.renderComponent(writer, cycle);

-

-        verify();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestInsertText.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestInsertText.java
deleted file mode 100644
index 77ef95b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestInsertText.java
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.html.InsertText}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInsertText extends BaseComponentTestCase
-{
-    public void testRewinding()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(true);
-        
-        InsertText component = (InsertText) newInstance(InsertText.class);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderNull()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false);
-
-        InsertText component = (InsertText) newInstance(InsertText.class);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderBreaks()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false);
-
-        InsertText component = (InsertText) newInstance(
-                InsertText.class,
-                "value",
-        "Now is the time\nfor all good men\nto come to the aid of their Tapestry.");
-
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        writer.print("Now is the time", false);
-        writer.beginEmpty("br");
-        writer.print("for all good men", false);
-        writer.beginEmpty("br");
-        writer.print("to come to the aid of their Tapestry.", false);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.finishLoad(cycle, null, null);
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderParas()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false);
-
-        InsertText component = newInstance(InsertText.class, 
-                new Object[] { "mode", InsertTextMode.PARAGRAPH, "value",
-        "Now is the time\nfor all good men\nto come to the aid of their Tapestry." });
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        writer.begin("p");
-        writer.print("Now is the time", false);
-        writer.end();
-
-        writer.begin("p");
-        writer.print("for all good men", false);
-        writer.end();
-
-        writer.begin("p");
-        writer.print("to come to the aid of their Tapestry.", false);
-        writer.end();
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-        
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    public void testRenderRaw()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false);
-
-        InsertText component = newInstance(InsertText.class, 
-                new Object[] { "value", "output\n<b>raw</b>", "raw", Boolean.TRUE });
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        writer.print("output", true);
-        writer.beginEmpty("br");
-        writer.print("<b>raw</b>", true);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.finishLoad(cycle, null, null);
-        component.render(writer, cycle);
-
-        verify();
-    }
-    
-    public void test_Render_Nested_Raw()
-    {
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle(false);
-        
-        InsertText component = newInstance(InsertText.class, 
-                new Object[] { "value", "output\n<b>raw</b>", "raw", Boolean.TRUE });
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        IMarkupWriter nested = writer.getNestedWriter();
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.finishLoad(cycle, null, null);
-        component.render(nested, cycle);
-        
-        verify();
-        
-        nested.close();
-        
-        assertBuffer("output<br /><b>raw</b>");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestPageEvents.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestPageEvents.java
deleted file mode 100644
index 1c472d3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestPageEvents.java
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.test.Creator;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPageEvents extends BaseComponentTestCase
-{
-    private IPage createPage()
-    {
-        Creator creator = new Creator();
-
-        return (IPage) creator.newInstance(BasePage.class);
-    }
-
-    public void testPageDetached()
-    {
-        IPage page = createPage();
-        ListenerFixture l = new ListenerFixture();
-
-        // Code path: no listener list
-
-        page.detach();
-
-        page.addPageDetachListener(l);
-
-        page.detach();
-
-        assertEquals("pageDetached", l.getMethod());
-
-        l.reset();
-
-        page.removePageDetachListener(l);
-
-        page.detach();
-
-        assertNull(l.getMethod());
-    }
-
-    // Cookie-cutter for the remaining listener interfaces
-
-    public void testPageAttached()
-    {
-        IPage page = createPage();
-        ListenerFixture l = new ListenerFixture();
-
-        // Code path: no listener list
-
-        page.attach(null, null);
-
-        page.addPageAttachListener(l);
-
-        page.attach(null, null);
-
-        assertEquals(l.getMethod(), null);
-
-        page.firePageAttached();
-
-        assertEquals(l.getMethod(), "pageAttached");
-
-        l.reset();
-
-        page.removePageAttachListener(l);
-
-        page.attach(null, null);
-
-        assertNull(l.getMethod());
-    }
-
-    public void testPageBeginRender()
-    {
-        IPage page = createPage();
-        ListenerFixture l = new ListenerFixture();
-        
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        
-        expect(cycle.isRewinding()).andReturn(true).anyTimes();
-        
-        builder.render(NullWriter.getSharedInstance(), page, cycle);
-        
-        replay();
-        
-        // Code path: no listener list
-
-        page.renderPage(builder, cycle);
-        
-        verify();
-
-        expect(cycle.isRewinding()).andReturn(true).anyTimes();
-        
-        builder.render(NullWriter.getSharedInstance(), page, cycle);
-        
-        replay();
-
-        page.addPageBeginRenderListener(l);
-
-        page.renderPage(builder, cycle);
-
-        assertEquals("pageBeginRender", l.getMethod());
-
-        l.reset();
-
-        page.removePageBeginRenderListener(l);
-
-        verify();
-
-        expect(cycle.isRewinding()).andReturn(true).anyTimes();
-        
-        builder.render(NullWriter.getSharedInstance(), page, cycle);
-        
-        replay();
-
-        page.renderPage(builder, cycle);
-
-        assertNull(l.getMethod());
-
-        verify();
-    }
-
-    public void testPageEndRender()
-    {
-        IPage page = createPage();
-        ListenerFixture l = new ListenerFixture();
-        
-        IRequestCycle cycle = newCycle();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        
-        expect(cycle.isRewinding()).andReturn(true).anyTimes();
-        
-        builder.render(NullWriter.getSharedInstance(), page, cycle);
-        
-        replay();
-
-        // Code path: no listener list
-
-        page.renderPage(builder, cycle);
-
-        verify();
-
-        expect(cycle.isRewinding()).andReturn(true).anyTimes();
-        
-        builder.render(NullWriter.getSharedInstance(), page, cycle);
-        
-        replay();
-
-        page.addPageEndRenderListener(l);
-
-        page.renderPage(builder, cycle);
-
-        assertEquals("pageEndRender", l.getMethod());
-
-        l.reset();
-
-        page.removePageEndRenderListener(l);
-
-        verify();
-
-        expect(cycle.isRewinding()).andReturn(true).anyTimes();
-        
-        builder.render(NullWriter.getSharedInstance(), page, cycle);
-        
-        replay();
-
-        page.renderPage(builder, cycle);
-
-        assertNull(l.getMethod());
-
-        verify();
-    }
-
-    public void testPageValidate()
-    {
-        IPage page = createPage();
-        ListenerFixture l = new ListenerFixture();
-
-        // Code path: no listener list
-
-        page.validate(null);
-
-        page.addPageValidateListener(l);
-
-        page.validate(null);
-
-        assertEquals("pageValidate", l.getMethod());
-
-        l.reset();
-
-        page.removePageValidateListener(l);
-
-        page.validate(null);
-
-        assertNull(l.getMethod());
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestRelation.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestRelation.java
deleted file mode 100644
index 351ccac..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestRelation.java
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.testng.annotations.Test;
-
-/**
- * Tests for the {@link org.apache.tapestry.html.Relation}&nbsp; component.
- * 
- * @author Andreas Andreou
- * @since 4.1.1
- */
-@Test(sequential=true)
-public class TestRelation extends BaseComponentTestCase
-{
-    
-    /**
-     * Test that Relation does nothing when the entire page is rewinding
-     */
-
-    public void testRewinding()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(true);
-        
-        Relation relation = newInstance(Relation.class, null);
-        
-        expect(cycle.renderStackPush(relation)).andReturn(relation);
-        
-        expect(cycle.renderStackPop()).andReturn(relation);
-        
-        replay();
-
-        relation.render(writer, cycle);
-
-        verify();
-    }
-    
-    /**
-     * Test that exception is thrown when Shell is missing
-     */    
-    public void testShellMissing()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false);
-        Location componentLocation = newMock(Location.class);
-        
-        Relation relation = newInstance(Relation.class, 
-                new Object[] {"location", componentLocation});
-        
-        expect(cycle.renderStackPush(relation)).andReturn(relation);
-        
-        trainGetShellFromCycle(cycle, null);
-
-        expect(cycle.renderStackPop()).andReturn(relation);
-        
-        replay();
-        
-        try {
-            
-            relation.render(writer, cycle);
-            unreachable();
-            
-        } catch (ApplicationRuntimeException ex) {
-            
-            assertEquals(ex.getLocation(), componentLocation);
-        }
-
-        verify();        
-    }
-    
-    /**
-     * Test that exception is thrown for invalid href parameter
-     */      
-    public void testInvalidHrefParameter()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle(false);
-        Location componentLocation = newMock(Location.class);
-        
-        Relation relation = newInstance(Relation.class, 
-                new Object[] {"location", componentLocation, "href", null});
-        
-        Shell shell = newInstance(Shell.class, null);
-        
-        expect(cycle.renderStackPush(relation)).andReturn(relation);
-        
-        trainGetShellFromCycle(cycle, shell);
-
-        expect(cycle.renderStackPop()).andReturn(relation);
-        
-        replay();
-        
-        try {
-            
-            relation.render(writer, cycle);
-            unreachable();
-            
-        } catch (ApplicationRuntimeException ex) {
-            
-            assertEquals(ex.getLocation(), componentLocation);
-        }
-
-        verify();         
-    }    
-    
-    protected void trainGetShellFromCycle(IRequestCycle cycle, Shell shell)
-    {
-        expect(cycle.getAttribute(Shell.SHELL_ATTRIBUTE)).andReturn(shell);
-    }    
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestShell.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestShell.java
deleted file mode 100644
index e1d2454..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/html/TestShell.java
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.services.ResponseBuilder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.List;
-
-/**
- * Tests for the {@link org.apache.tapestry.html.Shell}&nbsp; component.
- * 
- */
-@Test
-public class TestShell extends BaseComponentTestCase
-{
-
-    /**
-     * Test that Shell does very little when the entire page is rewinding (which itself is a
-     * holdback to the action service).
-     */
-
-    public void test_Rewinding()
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        ResponseBuilder builder = newMock(ResponseBuilder.class);
-        IRequestCycle cycle = newCycle(true, writer);
-        IRender body = newRender();
-        
-        Shell shell = (Shell) newInstance(Shell.class, "builder", builder);
-        
-        expect(cycle.renderStackPush(shell)).andReturn(shell);
-        shell.addBody(body);
-
-        trainStoreShellInCycle(cycle, shell);
-        expect(builder.isDynamic()).andReturn(false);
-        trainGetNestedWriter(writer, nested);
-        
-        body.render(nested, cycle);
-        
-        nested.close();
-        
-        trainRemoveShellFromCycle(cycle);
-        expect(cycle.renderStackPop()).andReturn(shell);
-        
-        replay();
-
-        shell.render(writer, cycle);
-
-        verify();
-    }
-    
-    public void test_Add_Relation()
-    {        
-        Shell shell = newInstance(Shell.class, null);
-        RelationBean css1 = new RelationBean();
-        css1.setHref("temp");
-        RelationBean css2 = new RelationBean();
-        css2.setHref("temp");
-        shell.addRelation(css1);
-        shell.addRelation(css2);
-        
-        List all = shell.getRelations();
-        assertEquals(all.size(), 1);   
-    }
-    
-    public void test_Include_Additional_Content_Null()
-    {
-        StringBuffer sb = new StringBuffer();
-        Shell shell = (Shell) newInstance(Shell.class, "contentBuffer", sb);
-        shell.includeAdditionalContent(null);
-        assertEquals(sb.length(), 0);
-    }
-    
-    public void test_Include_Additional_Content()
-    {
-        StringBuffer sb = new StringBuffer();
-        Shell shell = (Shell) newInstance(Shell.class, "contentBuffer", sb);
-        shell.includeAdditionalContent("data");
-        assertEquals(sb.toString(), "data");
-    }    
-
-    protected void trainStoreShellInCycle(IRequestCycle cycle, Shell shell)
-    {
-        expect(cycle.getAttribute(Shell.SHELL_ATTRIBUTE)).andReturn(null);
-        cycle.setAttribute(Shell.SHELL_ATTRIBUTE, shell);
-    }
-
-    protected void trainRemoveShellFromCycle(IRequestCycle cycle)
-    {
-        cycle.removeAttribute(Shell.SHELL_ATTRIBUTE);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/JettyRunner.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/JettyRunner.java
deleted file mode 100644
index 7da8b0d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/JettyRunner.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2006 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.integration;

-

-import static java.lang.String.format;

-

-import java.io.File;

-

-import org.mortbay.http.NCSARequestLog;

-import org.mortbay.http.SocketListener;

-import org.mortbay.jetty.Server;

-import org.mortbay.jetty.servlet.WebApplicationContext;

-

-/**

- * 

- */

-public class JettyRunner

-{

-    public static final String DEFAULT_CONTEXT_PATH = "/";

-

-    public static final int DEFAULT_PORT = 80;

-

-    private static final String DEFAULTS_DESCRIPTOR = "src/test-data/conf/webdefault.xml";

-    

-    private final String _contextPath;

-

-    private final int _port;

-

-    private String _warPath;

-

-    private final Server _jetty;

-    

-    public static void main(String[] args)

-    {

-        new JettyRunner("src/test-data/app1");

-    }

-

-    /** Defaults the context path to "/" and the port to 80. */

-    public JettyRunner(String warPath)

-    {

-        this(DEFAULT_CONTEXT_PATH, DEFAULT_PORT, warPath);

-    }

-

-    /**

-     * Creates and starts a new instance of Jetty. This should be done from a test case setup

-     * method.

-     * 

-     * @param contextPath

-     *            the context path for the deployed application

-     * @param port

-     *            the port number used to access the application

-     * @param warPath

-     *            the path to the exploded web application (typically, "src/main/webapp")

-     */

-    public JettyRunner(String contextPath, int port, String warPath)

-    {

-        _contextPath = contextPath;

-        _port = port;

-        _warPath = warPath;

-        

-        _jetty = createAndStart();

-    }

-

-    /** Stops the Jetty instance. This should be called from a test case tear down method. */

-    public void stop()

-    {

-        try

-        {

-            _jetty.stop();

-        }

-        catch (Exception ex)

-        {

-            throw new RuntimeException("Error stopping Jetty instance: " + ex.toString(), ex);

-        }

-    }

-

-    @Override

-    public String toString()

-    {

-        return format("<JettyRunner %s:%d (%s)>", _contextPath, _port, _warPath);

-    }

-

-    private Server createAndStart()

-    {

-        try

-        {

-            Server server = new Server();

-

-            SocketListener socketListener = new SocketListener();

-            socketListener.setPort(_port);

-            server.addListener(socketListener);

-            

-            NCSARequestLog log = new NCSARequestLog();

-            server.setRequestLog(log);

-            

-            File warPath = new File(_warPath);

-            if (!warPath.exists()) {

-                _warPath = new File("tapestry-framework", _warPath).getPath();

-            }

-            

-            WebApplicationContext context = server.addWebApplication(_contextPath, _warPath);

-            

-            File descPath = new File(DEFAULTS_DESCRIPTOR);

-            String descriptorPath = descPath.getPath();

-            

-            if (!descPath.exists()) {

-                descriptorPath = new File("tapestry-framework", DEFAULTS_DESCRIPTOR).getPath();

-            }

-            

-            context.setDefaultsDescriptor(descriptorPath);

-

-            server.start();

-

-            return server;

-        }

-        catch (Exception ex)

-        {

-            throw new RuntimeException("Failure starting Jetty instance: " + ex.toString(), ex);

-        }

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/TestBrowserIssues.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/TestBrowserIssues.java
deleted file mode 100644
index 5972d77..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/TestBrowserIssues.java
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2006 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.integration;

-

-import org.openqa.selenium.server.SeleniumServer;

-import org.testng.Assert;

-import org.testng.annotations.AfterClass;

-import org.testng.annotations.BeforeClass;

-import org.testng.annotations.Test;

-

-import com.thoughtworks.selenium.DefaultSelenium;

-import com.thoughtworks.selenium.Selenium;

-

-/**

- * Note: If these tests fail with BindException when starting Jetty, it could be Skype. At least on

- * my system, Skype is listening on localhost:80.

- */

-@Test(timeOut = 50000, groups = "integration", sequential=true)

-public class TestBrowserIssues extends Assert

-{

-    private static final int JETTY_PORT = 9999;

-    private static final String BASE_URL = "http://localhost:9999/";

-

-    /** 60 seconds */

-    public static final String PAGE_LOAD_TIMEOUT = "60000";

-

-    private Selenium _selenium;

-

-    private SeleniumServer _server;

-

-    private JettyRunner _jettyRunner;

-

-    @BeforeClass

-    public void startupBackground() throws Exception

-    {

-        _jettyRunner = new JettyRunner("/", JETTY_PORT, "src/test-data/app1");

-

-        _server = new SeleniumServer();

-        

-        _server.start();

-

-        _selenium = new DefaultSelenium("localhost", SeleniumServer.DEFAULT_PORT, "*firefox", BASE_URL);

-

-        _selenium.start();

-    }

-

-    @AfterClass

-    public void shutdownBackground() throws Exception

-    {

-        _selenium.stop();

-        _selenium = null;

-

-        _server.stop();

-        _server = null;

-

-        _jettyRunner.stop();

-        _jettyRunner = null;

-    }

-

-    public void test_issue_1141() throws Exception

-    {

-        _selenium.open(BASE_URL);

-

-        clickAndWait("link=TAPESTRY-1141");

-

-        assertTrue(_selenium.getTitle().contains("TAPESTRY-1141"), _selenium.getHtmlSource());

-

-        String body = _selenium.getBodyText();

-

-        assertTrue(body.contains("[]"));

-        

-        assertTrue(_selenium.isElementPresent("num"));

-        

-        _selenium.type("num_1", "4");

-        

-        _selenium.click("Submit");

-        

-        waitForInnerHTML("testme", "[4]");        

-        

-        _selenium.type("num_1", "5");

-        

-        submitFromTextfield("num_1");

-        

-        waitForInnerHTML("testme", "[5]");        

-        

-        _selenium.type("num_1", "6");

-        

-        _selenium.type("num_0", "2");

-        

-        submitFromTextfield("num_0");

-        

-        waitForInnerHTML("testme", "[6]");

-    }

-    

-    public void test_issue_1129() throws Exception

-    {

-        _selenium.open(BASE_URL);

-

-        clickAndWait("link=TAPESTRY-1129");

-

-        assertTrue(_selenium.getTitle().contains("TAPESTRY-1129"));

-

-        String body = _selenium.getBodyText();

-

-        assertTrue(body.contains("false"));

-        

-        _selenium.click("link=refresh");

-        

-        waitForInnerHTML("flag", "true");

-        

-        assertTrue(_selenium.isElementPresent("TextArea"));

-        

-        assertTrue("".equals(_selenium.getValue("TextArea").trim()));

-    }

-    

-    private void waitForInnerHTML(String elm, String content)

-    {

-        _selenium.waitForCondition("selenium.browserbot.getCurrentWindow().document.getElementById('"

-                + elm + "').innerHTML=='" + content + "'","6000");                

-    }

-    

-    private void submitFromTextfield(String field)

-    {

-        _selenium.keyPress(field, "13");

-        //_selenium.fireEvent(field, "command");

-        /*_selenium.click(field);

-        _selenium.keyDown(field, "13");

-        _selenium.keyPress(field, "0");

-        _selenium.keyUp(field, "13");*/

-    }

-

-    private void clickAndWait(String link)

-    {

-        _selenium.click(link);

-        _selenium.waitForPageToLoad(PAGE_LOAD_TIMEOUT);

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/app1/pages/Home.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/app1/pages/Home.java
deleted file mode 100644
index c8011f2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/app1/pages/Home.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.integration.app1.pages;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Simple page, to be the base class of the integration test pages.
- */
-public abstract class Home extends BasePage {           
-    
-    public void doNothing()
-    {
-    } 
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/app1/pages/Tap1129.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/app1/pages/Tap1129.java
deleted file mode 100644
index 4b175ab..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/app1/pages/Tap1129.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.integration.app1.pages;
-
-public abstract class Tap1129 extends Home { 
-    public abstract String getText();
-    public abstract void setText(String text);
-    
-    public abstract boolean getFlag();
-    public abstract void setFlag(boolean flag);
-    
-    public void doRefresh()
-    {
-        setFlag(!getFlag());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/app1/pages/Tap1141.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/app1/pages/Tap1141.java
deleted file mode 100644
index 729a9df..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/app1/pages/Tap1141.java
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.integration.app1.pages;
-
-public abstract class Tap1141 extends Home {        
-    public abstract String getText();
-    public abstract void setText(String text);
-    public abstract String getNum();
-    public abstract void setNum(String num);    
-    
-    public void doProcess()
-    {
-        setText(getNum());
-    } 
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/i18n/TestI18nResources.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/i18n/TestI18nResources.java
deleted file mode 100644
index 7255505..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/integration/i18n/TestI18nResources.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.integration.i18n;
-
-import org.apache.tapestry.integration.JettyRunner;
-import org.openqa.selenium.server.SeleniumServer;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import com.thoughtworks.selenium.DefaultSelenium;
-import com.thoughtworks.selenium.Selenium;
-
-
-/**
- * Tests the i18n test application. 
- * 
- * Initially created to test TAPESTRY-881 feature enhancement.
- * 
- */
-@Test(timeOut = 50000, groups = "integration", sequential=true)
-public class TestI18nResources
-{
-    private static final int JETTY_PORT = 9999;
-    private static final String BASE_URL = "http://localhost:9999/";
-    
-    /** 60 seconds */
-    public static final String PAGE_LOAD_TIMEOUT = "600000";
-    
-    private Selenium _selenium;
-    
-    private SeleniumServer _server;
-    
-    private JettyRunner _jettyRunner;
-    
-    @BeforeClass
-    public void startupBackground() throws Exception
-    {
-        _jettyRunner = new JettyRunner("/", JETTY_PORT, "src/test-data/i18n");
-        
-        _server = new SeleniumServer();
-
-        _server.start();
-
-        _selenium = new DefaultSelenium("localhost", SeleniumServer.DEFAULT_PORT, "*firefox",
-                BASE_URL);
-
-        _selenium.start();
-    }
-
-    @AfterClass
-    public void shutdownBackground() throws Exception
-    {
-        _selenium.stop();
-        _selenium = null;
-
-        _server.stop();
-        _server = null;
-
-        _jettyRunner.stop();
-        _jettyRunner = null;
-    }
-    
-    public void test_Key_Exists()
-    throws Exception
-    {
-        _selenium.open(BASE_URL);
-        
-        assert _selenium.isTextPresent("Random!");
-    }
-    
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java
deleted file mode 100644
index 0c273a4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java
+++ /dev/null
@@ -1,216 +0,0 @@
-// Copyright Jun 3, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.internal.event;
-
-import org.apache.tapestry.TestBase;
-import org.apache.tapestry.event.BrowserEvent;
-import org.testng.annotations.Test;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-
-/**
- * Tests for {@link ComponentEventProperty} and {@link EventBoundListener}.
- * 
- * @author jkuhnert
- */
-@Test
-public class ComponentEventPropertyTest extends TestBase {
-
-    public void test_Add_Event_Listener()
-    {
-        String[] events = {"onClick", "onFoo"};
-        ComponentEventProperty prop = new ComponentEventProperty("compid");
-        
-        prop.addListener(events, "doFoo", null, false, false, false);
-        
-        assertEquals("compid", prop.getComponentId());
-        assertEquals(2, prop.getEvents().size());
-        assertEquals(0, prop.getFormEvents().size());
-        
-        assertNotNull(prop.getEventListeners("onClick"));
-        
-        List listeners = prop.getEventListeners("onClick");
-        assertEquals(1, listeners.size());
-        
-        EventBoundListener listener = (EventBoundListener)listeners.get(0);
-        assertEquals("compid", listener.getComponentId());
-        assertNull(listener.getFormId());
-        assertEquals("doFoo", listener.getMethodName());
-        assert listener.isAutoSubmit();
-    }
-    
-    public void test_Add_Form_Event_Listener()
-    {
-        String[] events = {"onFoo"};
-        ComponentEventProperty prop = new ComponentEventProperty("compid");
-        
-        prop.addListener(events, "doFoo", "formid", false, true, false);
-        
-        assertEquals("compid", prop.getComponentId());
-        assertEquals(0, prop.getEvents().size());
-        assertEquals(1, prop.getFormEvents().size());
-        
-        assertNotNull(prop.getFormEventListeners("onFoo"));
-        
-        List listeners = prop.getFormEventListeners("onFoo");
-        assertEquals(1, listeners.size());
-        
-        EventBoundListener listener = (EventBoundListener)listeners.get(0);
-        assertEquals("compid", listener.getComponentId());
-        assertEquals("formid", listener.getFormId());
-        assertFalse(listener.isValidateForm());
-        assertTrue(listener.isAsync());
-        
-        assertEquals(1, prop.getFormEvents().size());
-        
-        assertEquals("doFoo", listener.getMethodName());
-        assert listener.isAutoSubmit();
-    }
-    
-    public void test_Add_Multiple_Event_Listener()
-    {
-        String[] events = {"onClick", "onFoo"};
-        ComponentEventProperty prop = new ComponentEventProperty("compid");
-        
-        prop.addListener(events, "doFoo", "form1", false, false, false);
-        prop.addListener(new String[]{"onchange"}, "doBar", "form2", false, false, false);
-        prop.addListener(new String[]{"onchange"}, "secondForm", "form1", false, false, false);
-        
-        assertEquals("compid", prop.getComponentId());
-        assertEquals(prop.getEvents().size(), 0);
-        assertEquals(prop.getFormEvents().size(), 3);
-        
-        Set s = prop.getFormEvents();
-        String[] fevents = (String[])s.toArray(new String[s.size()]);
-        
-        assertEquals(fevents.length, 3);
-        
-        List listeners = prop.getFormEventListeners("onchange");
-        assertEquals(listeners.size(), 2);
-        
-        listeners = prop.getFormEventListeners("onClick");
-        assertEquals(listeners.size(), 1);
-        
-        EventBoundListener listener = (EventBoundListener)listeners.get(0);
-        assertEquals("compid", listener.getComponentId());
-        assertEquals("form1", listener.getFormId());
-        assertEquals("doFoo", listener.getMethodName());
-        
-    }
-    
-    public void test_Get_Form_Events()
-    {
-        String[] events = {"onFoo"};
-        ComponentEventProperty prop = new ComponentEventProperty("compid");
-        BrowserEvent event = new BrowserEvent("onFoo", null);
-        
-        prop.addListener(events, "doFoo", "formid", false, false, true);
-        
-        List listeners = prop.getFormEventListeners("formid", event, null);
-        assertEquals(1, listeners.size());
-        
-        EventBoundListener listener = (EventBoundListener)listeners.get(0);
-        assertEquals("compid", listener.getComponentId());
-        assertEquals("formid", listener.getFormId());
-        assertFalse(listener.isValidateForm());
-        
-        assertEquals("doFoo", listener.getMethodName());
-        assertTrue(listener.shouldFocusForm());
-    }
-
-    public void test_Connect_Auto_Submit_Events()
-    {
-        String[] events = {"onClick"};
-        ComponentEventProperty prop = new ComponentEventProperty("compid");
-        
-        prop.addListener(events, "doFoo", null, false, false, false, true);
-
-        assertEquals("compid", prop.getComponentId());
-        assertEquals(prop.getEvents().size(), 1);
-        assertEquals(prop.getFormEvents().size(), 0);
-        
-        assertNotNull(prop.getEventListeners("onClick"));
-
-        List listeners = prop.getEventListeners("onClick");
-        assertEquals(listeners.size(), 1);
-        
-        EventBoundListener listener = (EventBoundListener)listeners.get(0);
-        assertEquals(listener.getComponentId(), "compid");
-        assertNull(listener.getFormId());
-        assertEquals(listener.getMethodName(), "doFoo");
-        assert listener.isAutoSubmit();
-
-        prop.connectAutoSubmitEvents("form");
-
-        assertEquals(prop.getEvents().size(), 0);
-        assertEquals(prop.getFormEvents().size(), 1);
-
-        listeners = prop.getFormEventListeners("onClick");
-        assertEquals(listeners.size(), 1);
-
-        listener = (EventBoundListener)listeners.get(0);
-        assertEquals(listener.getComponentId(), "compid");
-        assertEquals(listener.getFormId(), "form");
-        assertEquals(listener.getMethodName(), "doFoo");
-    }
-
-    public void test_ReWire_Component_Id()
-    {
-        String[] events = {"onClick", "onFoo"};
-        ComponentEventProperty prop = new ComponentEventProperty("compid");
-
-        prop.addListener(events, "doFoo", null, false, false, false);
-        prop.addListener(new String[]{"onchange"}, "doBar", "form2", false, false, false);
-        prop.addListener(new String[]{"onchange"}, "secondForm", "form1", false, false, false);
-        
-        assertEquals("compid", prop.getComponentId());
-        assertEquals(prop.getEvents().size(), 2);
-        assertEquals(prop.getFormEvents().size(), 1);
-        
-        String path = "new/Path/Id";
-        prop.rewireComponentId(path);
-
-        assertEquals(prop.getComponentId(), path);
-
-
-        Iterator it = prop.getEvents().iterator();
-        while (it.hasNext())
-        {
-            String key = (String) it.next();
-
-            List listeners = prop.getEventListeners(key);
-            for (int i=0; i < listeners.size(); i++) {
-
-                EventBoundListener listener = (EventBoundListener) listeners.get(i);
-                assertEquals(listener.getComponentId(), path);
-            }
-        }
-
-        it = prop.getFormEvents().iterator();
-        while (it.hasNext())
-        {
-            String key = (String) it.next();
-
-            List listeners = prop.getFormEventListeners(key);
-            for (int i=0; i < listeners.size(); i++) {
-
-                EventBoundListener listener = (EventBoundListener) listeners.get(i);
-                assertEquals(listener.getComponentId(), path);
-            }
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java
deleted file mode 100644
index 314ceb2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java
+++ /dev/null
@@ -1,300 +0,0 @@
-// Copyright May 21, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.internal.event.impl;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.event.EventTarget;
-import org.apache.tapestry.form.FormSupport;
-import org.apache.tapestry.internal.event.ComponentEventProperty;
-import org.apache.tapestry.listener.ListenerInvoker;
-import org.apache.tapestry.listener.ListenerMap;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.valid.IValidationDelegate;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * Tests functionality of {@link ComponentEventInvoker}.
- * 
- * @author jkuhnert
- */
-@Test
-public class ComponentEventInvokerTest extends BaseComponentTestCase
-{
-    
-    public void test_Event_Properties()
-    {
-        IComponentSpecification spec = new ComponentSpecification();
-        spec.addEventListener("comp1", new String[] {"onClick"}, "testFoo", null, false, false, false, false);
-        
-        assert spec.getComponentEvents("comp1") != null;
-        assert spec.getComponentEvents("comp1").getEvents().size() == 1;
-        
-        ComponentEventProperty prop = spec.getComponentEvents("comp1");
-        assertNotNull(prop);
-        assertEquals(prop.getEventListeners("onClick").size(), 1);
-        
-        prop = spec.getComponentEvents("comp2");
-        assert prop == null;
-    }
-    
-    public void test_Form_Event_Properties()
-    {
-        IComponentSpecification spec = new ComponentSpecification();
-        spec.addEventListener("comp1", new String[] {"onClick"}, "testFoo", "form", false, true, false, false);
-        spec.addEventListener("comp1", new String[] {"onClick"}, "testBar", "form", false, true, false, false);
-        
-        assert spec.getComponentEvents("comp1") != null;
-        
-        ComponentEventProperty p = spec.getComponentEvents("comp1");
-        
-        // should be only form events bound
-        assertEquals(p.getEvents().size(), 0);
-        assertEquals(p.getEventListeners("onClick").size(), 0);
-        
-        assertEquals(p.getComponentId(), "comp1");
-        assertEquals(p.getFormEventListeners("onClick").size(), 2);
-        assertEquals(p.getFormEvents().size(), 1);
-    }
-
-    public void test_Get_Event_Property_Listeners()
-    {
-        IComponentSpecification spec = new ComponentSpecification();
-        spec.setComponentClassName("first.test");
-        spec.addEventListener("comp1", new String[] {"onClick"}, "testFoo", null, false, true, false, false);
-        spec.addEventListener("comp1", new String[] {"onClick"}, "testBar", null, false, true, false, false);
-
-        IComponentSpecification spec2 = new ComponentSpecification();
-        spec.setComponentClassName("second.test"); // to make .equals unique
-        spec2.addEventListener("comp1", new String[] {"onClick"}, "testFoo", null, false, true, false, false);
-        spec2.addEventListener("comp1", new String[] {"onClick"}, "testBar", null, false, true, false, false);
-
-        ComponentEventInvoker invoker = new ComponentEventInvoker();
-        invoker.addEventListener("comp1", spec);
-        invoker.addEventListener("comp1", spec2);
-
-        ComponentEventProperty[] empty = invoker.getEventPropertyListeners("bogus");
-        assert empty != null;
-        assertEquals(empty.length, 0);
-
-        ComponentEventProperty[] props = invoker.getEventPropertyListeners("comp1");
-        assertEquals(props.length, 2);
-
-        assert invoker.getEventPropertyListeners("comp1") == props;
-    }
-
-    public void test_Invoke_Component_Listener()
-    {
-        IRequestCycle cycle = newCycle();
-        IComponent comp = newComponent();
-        checkOrder(comp, false);
-        
-        IPage page = newMock(IPage.class);
-        ListenerInvoker listenerInvoker = newMock(ListenerInvoker.class);
-        ListenerMap listenerMap = newMock(ListenerMap.class);
-        IActionListener listener1 = newMock(IActionListener.class);
-
-        IComponentSpecification spec = new ComponentSpecification();
-        
-        Map comps = new HashMap();
-        comps.put("testId", comp);
-        
-        Map tprops = new HashMap();
-        tprops.put("id", "testId");
-        BrowserEvent event = new BrowserEvent("onSelect", new EventTarget(tprops));
-        
-        ComponentEventInvoker invoker = new ComponentEventInvoker();
-        invoker.setInvoker(listenerInvoker);
-        
-        spec.addEventListener("testId", new String[] { "onSelect" }, 
-                "fooListener", null, false, false, false, false);
-        invoker.addEventListener("testId", spec);
-
-        expect(comp.getExtendedId()).andReturn("testId").anyTimes();
-        expect(comp.getSpecification()).andReturn(spec).anyTimes();
-        expect(comp.getPage()).andReturn(page);
-
-        expect(page.getComponents()).andReturn(comps);
-        expect(comp.getListeners()).andReturn(listenerMap);
-        
-        expect(listenerMap.getListener("fooListener")).andReturn(listener1);
-        
-        listenerInvoker.invokeListener(listener1, comp, cycle);
-        
-        replay();
-        
-        invoker.invokeListeners(comp, cycle, event);
-        
-        verify();
-    }
-    
-    public void test_Invoke_Element_Listener()
-    {
-        IRequestCycle cycle = newCycle();
-        IComponent comp = newComponent();
-        checkOrder(comp, false);
-        
-        IPage page = newMock(IPage.class);
-        IComponentSpecification spec = new ComponentSpecification();
-        
-        ListenerInvoker listenerInvoker = newMock(ListenerInvoker.class);
-        ListenerMap listenerMap = newMock(ListenerMap.class);
-        IActionListener listener = newMock(IActionListener.class);
-        
-        Map comps = new HashMap();
-        comps.put("testId", comp);
-        
-        Map tprops = new HashMap();
-        tprops.put("id", "testId");
-        BrowserEvent event = new BrowserEvent("onSelect", new EventTarget(tprops));
-        
-        ComponentEventInvoker invoker = new ComponentEventInvoker();
-        invoker.setInvoker(listenerInvoker);
-        
-        spec.addElementEventListener("testId", new String[] { "onSelect" }, 
-                "fooListener", null, false, true, true);
-        invoker.addEventListener("testId", spec);
-        
-        expect(comp.getExtendedId()).andReturn("testId").anyTimes();
-        expect(comp.getSpecification()).andReturn(spec).anyTimes();
-        expect(comp.getPage()).andReturn(page);
-        expect(page.getComponents()).andReturn(comps);
-        expect(comp.getListeners()).andReturn(listenerMap);
-        
-        expect(listenerMap.getListener("fooListener")).andReturn(listener);
-        
-        listenerInvoker.invokeListener(listener, comp, cycle);
-        
-        replay();
-        
-        invoker.invokeListeners(comp, cycle, event);
-        
-        verify();
-    }
-    
-    public void test_Invoke_Form_Listener()
-    {
-        IRequestCycle cycle = newCycle();
-        IForm form = newForm();
-        checkOrder(form, false);
-        FormSupport formSupport = newMock(FormSupport.class);
-        IComponentSpecification spec = new ComponentSpecification();
-        IValidationDelegate delegate = newMock(IValidationDelegate.class);
-        ListenerInvoker listenerInvoker = newMock(ListenerInvoker.class);
-        ListenerMap listenerMap = newMock(ListenerMap.class);
-        IActionListener listener = newMock(IActionListener.class);
-        IPage page = newMock(IPage.class);
-        checkOrder(page, false);
-        
-        Map comps = new HashMap();
-        comps.put("form1", form);
-        
-        Map tprops = new HashMap();
-        tprops.put("id", "form1");
-        BrowserEvent event = new BrowserEvent("onSelect", "form1", new EventTarget(tprops));
-        
-        ComponentEventInvoker invoker = new ComponentEventInvoker();
-        invoker.setInvoker(listenerInvoker);
-        
-        spec.addEventListener("form1", new String[] { "onSelect" }, "fooListener",
-                "form1", false, false, false, false);
-        invoker.addFormEventListener("form1", spec);
-        
-        expect(formSupport.getForm()).andReturn(form);
-        expect(form.getExtendedId()).andReturn("form1").anyTimes();
-        expect(form.getPage()).andReturn(page);
-
-        expect(page.getComponents()).andReturn(comps);
-        
-        expect(form.getSpecification()).andReturn(spec);
-        expect(form.getDelegate()).andReturn(delegate).anyTimes();
-
-        delegate.clearErrors();
-        expectLastCall().anyTimes();
-
-        expect(form.getListeners()).andReturn(listenerMap);
-        
-        expect(listenerMap.getListener("fooListener")).andReturn(listener);
-        
-        form.addDeferredRunnable(isA(Runnable.class));
-        
-        cycle.disableFocus();
-        
-        replay();
-        
-        invoker.invokeFormListeners(formSupport, cycle, event);
-        
-        verify();
-    }
-    
-    public void test_Invoke_Form_Listener_Enabled_Focus()
-    {
-        IRequestCycle cycle = newCycle();
-        IForm form = newForm();
-        checkOrder(form, false);
-        FormSupport formSupport = newMock(FormSupport.class);
-        IComponentSpecification spec = new ComponentSpecification();
-        IValidationDelegate delegate = newMock(IValidationDelegate.class);
-        
-        ListenerInvoker listenerInvoker = newMock(ListenerInvoker.class);
-        ListenerMap listenerMap = newMock(ListenerMap.class);
-        IActionListener listener = newMock(IActionListener.class);
-        IPage page = newMock(IPage.class);
-        checkOrder(page, false);
-        
-        Map comps = new HashMap();
-        comps.put("form1", form);
-        
-        Map tprops = new HashMap();
-        tprops.put("id", "form1");
-        BrowserEvent event = new BrowserEvent("onSelect", "form1", new EventTarget(tprops));
-        
-        ComponentEventInvoker invoker = new ComponentEventInvoker();
-        invoker.setInvoker(listenerInvoker);
-        
-        spec.addEventListener("form1", new String[] { "onSelect" }, "fooListener",
-                "form1", false, false, true, false);
-        invoker.addFormEventListener("form1", spec);
-        
-        expect(formSupport.getForm()).andReturn(form);
-        expect(form.getExtendedId()).andReturn("form1").anyTimes();
-        expect(form.getPage()).andReturn(page);
-        
-        expect(page.getComponents()).andReturn(comps);
-        
-        expect(form.getSpecification()).andReturn(spec);
-        expect(form.getDelegate()).andReturn(delegate).anyTimes();
-
-        delegate.clearErrors();
-        expectLastCall().anyTimes();
-
-        expect(form.getListeners()).andReturn(listenerMap);
-        
-        expect(listenerMap.getListener("fooListener")).andReturn(listener);
-        
-        form.addDeferredRunnable(isA(Runnable.class));
-        
-        replay();
-        
-        invoker.invokeFormListeners(formSupport, cycle, event);
-        
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/json/TestJsonProperties.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/json/TestJsonProperties.java
deleted file mode 100644
index 74f96cb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/json/TestJsonProperties.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.apache.tapestry.json;
-// Copyright Jul 8, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-import java.text.DecimalFormatSymbols;
-import java.util.Locale;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests functionality of the core {@link JSONObject} .
- * 
- * @author jkuhnert
- */
-@Test
-public class TestJsonProperties extends BaseComponentTestCase
-{
- 
-    public void test_Literal_Arrays()
-    {
-        JSONObject json = new JSONObject();
-        
-        json.accumulate("key", new JSONLiteral("[value1]"));
-        json.accumulate("key", new JSONLiteral("[value2]"));
-        json.accumulate("key", new JSONLiteral("[value3]"));
-        
-        assertEquals("{\"key\":[[value1],[value2],[value3]]}",
-                json.toString());
-        
-        JSONObject container = new JSONObject();
-        container.put("container", json);
-        
-        assertEquals("{\"container\":{\"key\":[[value1],[value2],[value3]]}}",
-                container.toString());
-    }
-    
-    public void test_Literal_Array_Container()
-    {
-        JSONObject profile = new JSONObject();
-        profile.put("constraints", new JSONObject());
-        
-        JSONObject cons = profile.getJSONObject("constraints");
-        
-        if (!cons.has("key"))
-            cons.put("key", new JSONArray());
-        
-        Locale locale = Locale.ENGLISH;
-        DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
-        
-        cons.accumulate("key", 
-                new JSONLiteral("[something,value1:{key:\"value\",key2:"
-                        + JSONObject.quote(symbols.getGroupingSeparator()) + "}]"));
-        cons.accumulate("key", new JSONLiteral("[value2]"));
-        cons.accumulate("key", new JSONLiteral("[value3]"));
-        
-        assertEquals("{\"constraints\":{\"key\":[[something,value1:{key:\"value\",key2:\",\"}],[value2],[value3]]}}",
-                profile.toString());
-    }
-    
-    public void test_Multiple_Element_Accumulate()
-    {
-        JSONObject profile = new JSONObject();
-        
-        profile.accumulate("required", "val1");
-        profile.accumulate("required", "val2");
-        
-        assertEquals(profile.toString(), "{\"required\":[\"val1\",\"val2\"]}");
-    }
-    
-    public void test_Single_Element_Accumulate()
-    {
-        JSONObject profile = new JSONObject();
-        
-        profile.accumulate("required", "val1");
-        
-        assertEquals(profile.toString(), "{\"required\":[\"val1\"]}");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Application.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Application.properties
deleted file mode 100644
index 0e4b647..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Application.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-inherited.app.name=Mock Wonder
-
-library-overrides-application=APPLICATION.override
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/BadQuoting1.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/BadQuoting1.properties
deleted file mode 100644
index 40b4ba7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/BadQuoting1.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-invalid\xescape = nop\u0GFE
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/BadQuoting2.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/BadQuoting2.properties
deleted file mode 100644
index 3f4f79f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/BadQuoting2.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-invalid\xescape = nop\u
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/ContentTypeTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/ContentTypeTest.java
deleted file mode 100644
index 2a96787..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/ContentTypeTest.java
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-
-import org.apache.tapestry.util.ContentType;
-import org.testng.annotations.Test;
-
-/**
- * Test the functionality of {@link org.apache.tapestry.util.ContentType}
- * 
- * @author Mindbridge
- * @since 3.0
- */
-@Test
-public class ContentTypeTest extends TapestryTestCase
-{
-    public void testEquals()
-    {
-        ContentType master = new ContentType("text/html");
-
-        assertEquals(false, master.equals(null));
-        assertEquals(false, master.equals(this));
-        assertEquals(true, master.equals(master));
-        assertEquals(true, master.equals(new ContentType("text/html")));
-        assertEquals(false, master.equals(new ContentType("foo/bar")));
-        assertEquals(false, master.equals(new ContentType("text/plain")));
-    }
-
-    public void testEqualsWithParameters()
-    {
-        ContentType master = new ContentType("text/html;charset=utf-8");
-
-        assertEquals(false, master.equals(new ContentType("text/html")));
-        assertEquals(true, master.equals(new ContentType("text/html;charset=utf-8")));
-        assertEquals(false, master.equals(new ContentType("text/html;charset=utf-8;foo=bar")));
-        
-        // Check that keys are case insensitive
-        
-        assertEquals(true, master.equals(new ContentType("text/html;Charset=utf-8")));
-     
-        master = new ContentType("text/html;foo=bar;biff=bazz");
-        
-        assertEquals(true, master.equals(new ContentType("text/html;foo=bar;biff=bazz")));
-        assertEquals(true, master.equals(new ContentType("text/html;Foo=bar;Biff=bazz")));
-        assertEquals(true, master.equals(new ContentType("text/html;biff=bazz;foo=bar")));
-    }
-
-    public void testParsing1() throws Exception
-    {
-        ContentType contentType = new ContentType("text/html;charset=utf-8");
-
-        assertEquals( "text", contentType
-                .getBaseType());
-
-        assertEquals( "html", contentType
-                .getSubType());
-
-        assertEquals( "text/html", contentType
-                .getMimeType());
-
-        String[] parameterNames = contentType.getParameterNames();
-        assertEquals(
-                1,
-                parameterNames.length);
-
-        assertEquals(
-                "charset",
-                parameterNames[0]);
-
-        String charset = contentType.getParameter("charset");
-        assertEquals( "utf-8", charset);
-
-        String nonexistant = contentType.getParameter("nonexistant");
-        assertTrue(
-                nonexistant == null);
-    }
-
-    public void testParsing2() throws Exception
-    {
-        ContentType contentType = new ContentType("text/html");
-
-        assertEquals( "text", contentType
-                .getBaseType());
-
-        assertEquals( "html", contentType
-                .getSubType());
-
-        assertEquals( "text/html", contentType
-                .getMimeType());
-
-        String[] parameterNames = contentType.getParameterNames();
-        assertEquals(
-                0,
-                parameterNames.length);
-
-        String charset = contentType.getParameter("charset");
-        assertTrue(charset == null);
-    }
-
-    public void testUnparsing1() throws Exception
-    {
-        ContentType contentType = new ContentType();
-
-        contentType.setBaseType("text");
-        contentType.setSubType("html");
-        contentType.setParameter("charset", "utf-8");
-
-        assertEquals(
-                "text/html;charset=utf-8",
-                contentType.unparse());
-    }
-
-    public void testUnparsing2() throws Exception
-    {
-        ContentType contentType = new ContentType();
-
-        contentType.setBaseType("text");
-        contentType.setSubType("html");
-
-        assertEquals(
-                "text/html",
-                contentType.unparse());
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/CyrillicProperties.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/CyrillicProperties.properties
deleted file mode 100644
index 5e00563..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/CyrillicProperties.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-Tapestry = ³ÞÑÛÕÝ
-³ÞÑÛÕÝ : Tapestry
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Library.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Library.properties
deleted file mode 100644
index c90d3bc..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Library.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-only-in-namespace=LIBRARY_BASE.only-in-namespace
-
-component-overrides-namespace=LIBRARY_BASE.component-overrides-namespace
-multilocale=multilocale
-
-library-overrides-application=LIBRARY.override
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Library_fr.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Library_fr.properties
deleted file mode 100644
index eb21139..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Library_fr.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-localized-in-namespace=LIBRARY_FR.localized-in-namespace
-localized-component-overrides-namespace=LIBRARY_FR.localized-component-overrides-namespace
-multilocale=multilocale_fr
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1.properties
deleted file mode 100644
index a4eeeaf..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-only-in-base=BASE1
-overwritten-in-language=BASE2
-overwritten-in-country=BASE3
-overwritten-in-variant=BASE4
-
-using-date-format=A formatted date: {0,date,short}
-
-component-overrides-namespace=MOCKPAGE1_BASE.component-overrides-namespace
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_en.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_en.properties
deleted file mode 100644
index e0d5641..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_en.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-overwritten-in-language=LANGUAGE1_en
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_en_US.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_en_US.properties
deleted file mode 100644
index 91bdbbd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_en_US.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-overwritten-in-country=COUNTRY1_en_US
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_en_US_Tapestry.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_en_US_Tapestry.properties
deleted file mode 100644
index 3c753b2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_en_US_Tapestry.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-overwritten-in-variant=VARIANT1_en_US_Tapestry
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_fr.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_fr.properties
deleted file mode 100644
index c5b8a36..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_fr.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-overwritten-in-language=LANGUAGE1_fr
-localized-component-overrides-namespace=MOCKPAGE1_FR.localized-component-overrides-namespace
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_fr_CD.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_fr_CD.properties
deleted file mode 100644
index 9a63ae4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_fr_CD.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-overwritten-in-country=COUNTRY1_fr_CD
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_fr_CD_Foo.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_fr_CD_Foo.properties
deleted file mode 100644
index e7f8c34..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage1_fr_CD_Foo.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-overwritten-in-variant=VARIANT1_fr_CD_Foo
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage2_en.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage2_en.properties
deleted file mode 100644
index 6b2b501..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage2_en.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-language-key=LANGUAGE1
-overwritten-in-variant=LANGUAGE2
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage2_en__Tapestry.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage2_en__Tapestry.properties
deleted file mode 100644
index d5f7299..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/MockPage2_en__Tapestry.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-overwritten-in-variant=VARIANT1_en__Tapestry
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Properties.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Properties.properties
deleted file mode 100644
index 42d5e34..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/Properties.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-fred=flintstone
-barney=rubble
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/StandardCyrillicProperties.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/StandardCyrillicProperties.properties
deleted file mode 100644
index abf0ec5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/StandardCyrillicProperties.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-Tapestry = \u0413\u043e\u0431\u043b\u0435\u043d
-\u0413\u043e\u0431\u043b\u0435\u043d : Tapestry
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/StandardProperties.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/StandardProperties.properties
deleted file mode 100644
index 2e1cc9d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/StandardProperties.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-first=property
-                
-# comment line
-! different comment line
-
-another 	= one
-   other	: one
-just another : one
-and another one
-yet\ another:one
-invalid\xescape = nop\u00D2e
-strange \: test
-weird \ : test  
-long\
-key test
-longvalue = value \
-			test   
-longer\
-# comment in the middle of a continuation
-single
-= empty key
-quoting "quote" 'quote'
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/StandardUTFProperties.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/StandardUTFProperties.properties
deleted file mode 100644
index c82edd8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/StandardUTFProperties.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-Tapestry = \u0413\u043e\u0431\u043b\u0435\u043d
-\u0413\u043e\u0431\u043b\u0435\u043d : \u30bf\u30da\u30b9\u30c8\u30ea\u30fc
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TapestryTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TapestryTestCase.java
deleted file mode 100644
index e7ec9a2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TapestryTestCase.java
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Registry;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.impl.RegistryBuilder;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.binding.BindingSource;
-import org.apache.tapestry.binding.LiteralBinding;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.parse.SpecificationParser;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-import org.apache.tapestry.util.IPropertyHolder;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Base class for Tapestry test cases.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-public abstract class TapestryTestCase extends BaseComponentTestCase
-{
-    protected static final boolean IS_JDK13 = System.getProperty("java.specification.version").equals("1.3");
-
-    private ClassResolver _resolver = new DefaultClassResolver();
-
-    /** @since 4.0 */
-    private ValueConverter _valueConverter = new ValueConverter()
-    {
-        public Object coerceValue(Object value, Class desiredType)
-        {
-            return value;
-        }
-    };
-
-    /** @since 4.0 */
-    private class BindingSourceFixture implements BindingSource
-    {
-
-        public IBinding createBinding(IComponent component, String description, String reference,
-                String defaultBindingType, Location location)
-        {
-            return new LiteralBinding(description, _valueConverter, location, reference);
-        }
-
-        public IBinding createBinding(IComponent component, IParameterSpecification param, String description, String reference,
-                String defaultBindingType, Location location)
-        {
-            return new LiteralBinding(description, _valueConverter, location, reference);
-        }
-    }
-
-    /** @since 4.0 */
-    protected BindingSourceFixture newBindingSource()
-    {
-        return new BindingSourceFixture();
-    }
-
-    protected IComponentSpecification parseComponent(String simpleName) throws Exception
-    {
-        SpecificationParser parser = new SpecificationParser(_resolver);
-
-        Resource location = getSpecificationResourceLocation(simpleName);
-
-        return parser.parseComponentSpecification(location);
-    }
-
-    protected IComponentSpecification parsePage(String simpleName) throws Exception
-    {
-        SpecificationParser parser = new SpecificationParser(_resolver);
-
-        parser.setBindingSource(newBindingSource());
-
-        Resource location = getSpecificationResourceLocation(simpleName);
-
-        return parser.parsePageSpecification(location);
-    }
-
-    protected IApplicationSpecification parseApp(String simpleName) throws Exception
-    {
-        SpecificationParser parser = new SpecificationParser(_resolver);
-
-        parser.setValueConverter(createValueConverter());
-
-        Resource location = getSpecificationResourceLocation(simpleName);
-
-        return parser.parseApplicationSpecification(location);
-    }
-
-    protected Resource getSpecificationResourceLocation(String simpleName)
-    {
-        String adjustedClassName = "/" + getClass().getName().replace('.', '/') + ".class";
-
-        Resource classResource = new ClasspathResource(_resolver, adjustedClassName);
-
-        return classResource.getRelativeResource(simpleName);
-    }
-
-    protected ILibrarySpecification parseLib(String simpleName) throws Exception
-    {
-        SpecificationParser parser = new SpecificationParser(_resolver);
-
-        parser.setValueConverter(createValueConverter());
-
-        Resource location = getSpecificationResourceLocation(simpleName);
-
-        return parser.parseLibrarySpecification(location);
-    }
-
-    public static void checkList(String propertyName, Object[] expected, Object[] actual)
-    {
-        checkList(propertyName, expected, Arrays.asList(actual));
-    }
-
-    public static void checkList(String propertyName, Object[] expected, List actual)
-    {
-        int count = Tapestry.size(actual);
-
-        assertEquals(expected.length, count);
-
-        for (int i = 0; i < count; i++)
-        {
-            assertEquals(expected[i], actual.get(i));
-        }
-    }
-
-    public static void checkProperty(IPropertyHolder h, String propertyName, String expectedValue)
-    {
-        assertEquals(expectedValue, h.getProperty(propertyName));
-    }
-
-    public static void checkException(Throwable ex, String string)
-    {
-        if (ex.getMessage().indexOf(string) >= 0)
-            return;
-
-        throw new AssertionError("Exception " + ex + " does not contain sub-string '"
-                + string + "'.");
-    }
-
-    private static ValueConverter _sharedValueConverter;
-
-    protected ValueConverter createValueConverter()
-    {
-        // Only build the Registry the first time this is called. The same Registry
-        // can then be used for any remaining calls.
-
-        try {
-            
-            if (_sharedValueConverter == null)
-            {
-                Registry r =  RegistryBuilder.constructDefaultRegistry();
-
-                _sharedValueConverter = (ValueConverter) r.getService("tapestry.coerce.ValueConverter", ValueConverter.class);
-            }
-
-            return _sharedValueConverter;
-        } catch (Throwable t) {
-            throw new RuntimeException(t);
-        }
-    }
-
-    protected IComponent newComponent()
-    {
-        return newMock(IComponent.class);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestComponent.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestComponent.java
deleted file mode 100644
index e398719..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestComponent.java
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.impl.DefaultResponseBuilder;
-import org.apache.tapestry.test.Creator;
-import org.testng.annotations.Test;
-
-/**
- * Test a few random things in {@link org.apache.tapestry.AbstractComponent}and
- * {@link  org.apache.tapestry.BaseComponent}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-@Test
-public class TestComponent extends BaseComponentTestCase
-{
-    private static class TestRender implements IRender
-    {
-        private boolean rendered = false;
-
-        public void render(IMarkupWriter writer, IRequestCycle cycle)
-        {
-            rendered = true;
-        }
-
-    }
-
-    public abstract static class FakeComponent extends BaseComponent
-    {
-        void addOuterTest(IRender render)
-        {
-            addOuter(render);
-        }
-
-        void testRenderComponent(IMarkupWriter write, IRequestCycle cycle)
-        {
-            renderComponent(write, cycle);
-        }
-    }
-
-    /**
-     * Test the ability of {@link org.apache.tapestry.BaseComponent#addOuter(IRender)}to add a
-     * large number of objects.
-     */
-
-    public void testOuter() throws Exception
-    {
-        IMarkupWriter writer = new NullWriter();
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        
-        Creator creator = new Creator();
-        
-        FakeComponent c = (FakeComponent) creator.newInstance(FakeComponent.class);
-        
-        TestRender[] list = new TestRender[50];
-        
-        ResponseBuilder builder = 
-            new DefaultResponseBuilder(writer);
-        
-        for (int i = 0; i < list.length; i++)
-        {
-            list[i] = new TestRender();
-            c.addOuterTest(list[i]);
-            
-            expect(cycle.getResponseBuilder()).andReturn(builder);
-        }
-        
-        replay();
-        
-        c.testRenderComponent(writer, cycle);
-        
-        verify();
-        
-        for (int i = 0; i < list.length; i++)
-            assertTrue(list[i].rendered);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestComponentMessages.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestComponentMessages.java
deleted file mode 100644
index 4878cf9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestComponentMessages.java
+++ /dev/null
@@ -1,409 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Messages;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.service.ClassFactory;
-import org.apache.hivemind.service.impl.ClassFactoryImpl;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.engine.Namespace;
-import org.apache.tapestry.enhance.EnhancementOperationImpl;
-import org.apache.tapestry.enhance.InjectMessagesWorker;
-import org.apache.tapestry.enhance.InjectSpecificationWorker;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.resolver.ComponentResourceResolverImpl;
-import org.apache.tapestry.services.ComponentMessagesSource;
-import org.apache.tapestry.services.ComponentPropertySource;
-import org.apache.tapestry.services.impl.ClasspathResourceFactoryImpl;
-import org.apache.tapestry.services.impl.ComponentMessagesSourceImpl;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-import org.apache.tapestry.spec.LibrarySpecification;
-import org.testng.annotations.Test;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.Locale;
-
-/**
- * Tests the class {@link org.apache.tapestry.services.impl.ComponentMessagesSourceImpl}.
- * <p>
- * TODO: Add tests realted to messages encoding (which can be specified as meta-data on the
- * component specification or, ultimately, in the namespace (library specification).
- *
- * @author Howard Lewis Ship
- * @since 2.0.4
- */
-@Test
-public class TestComponentMessages extends TapestryTestCase
-{
-    private Location _locationFixture = new Location()
-    {
-        public Resource getResource()
-        {
-            return null;
-        }
-
-        public int getLineNumber()
-        {
-            return 0;
-        }
-
-        public int getColumnNumber()
-        {
-            return 0;
-        }
-    };
-
-    private static class NullComponentPropertySource implements ComponentPropertySource
-    {
-
-        public String getComponentProperty(IComponent component, String propertyName)
-        {
-            return null;
-        }
-
-        public String getLocalizedComponentProperty(IComponent component, Locale locale,
-                                                    String propertyName)
-        {
-            return null;
-        }
-
-        public String getNamespaceProperty(INamespace namespace, String propertyName)
-        {
-            return null;
-        }
-
-        public String getLocalizedNamespaceProperty(INamespace namespace, Locale locale,
-                                                    String propertyName)
-        {
-            return null;
-        }
-    }
-
-    private void check(Messages messages, String key, String expected)
-    {
-        String actual = messages.getMessage(key);
-
-        assertEquals(actual, expected);
-    }
-
-    private static final String MOCK1 = "/org/apache/tapestry/junit/MockPage1.page";
-
-    private IComponentSpecification newSpec(String path)
-    {
-        Resource resource = new ClasspathResource(new DefaultClassResolver(), path);
-
-        IComponentSpecification spec = new ComponentSpecification();
-        spec.setSpecificationLocation(resource);
-
-        return spec;
-    }
-
-    private ILibrarySpecification newLibrarySpec()
-    {
-        Resource resource = new ClasspathResource(new DefaultClassResolver(), "/org/apache/tapestry/junit/Library.library");
-
-        ILibrarySpecification spec = new LibrarySpecification();
-        spec.setSpecificationLocation(resource);
-
-        return spec;
-    }
-
-    /**
-     * Mocking up the page is too hard ... the relationship between the component messagess source
-     * and the page is too varied and complex. Instead, we use the tools to create the page itself,
-     * much as the full framework would do at runtime.
-     */
-
-    private IPage newPage(IComponentSpecification specification, ComponentMessagesSource source, Locale locale)
-    {
-        ClassFactory classFactory = new ClassFactoryImpl();
-
-        EnhancementOperationImpl op =
-          new EnhancementOperationImpl(new DefaultClassResolver(), specification, BasePage.class, classFactory, null);
-
-        InjectMessagesWorker injectMessages = new InjectMessagesWorker();
-        injectMessages.setComponentMessagesSource(source);
-
-        injectMessages.performEnhancement(op, specification);
-
-        new InjectSpecificationWorker().performEnhancement(op, specification);
-
-        IPage result = (IPage) op.getConstructor().newInstance();
-
-        result.setLocale(locale);
-        result.setPage(result);
-
-        return result;
-    }
-
-    private Messages createFullMessages(String location, Locale locale)
-    {
-        ComponentMessagesSourceImpl source = new ComponentMessagesSourceImpl();
-        source.setClasspathResourceFactory(new ClasspathResourceFactoryImpl(new DefaultClassResolver()));
-        source.setComponentPropertySource(new NullComponentPropertySource());
-        source.setComponentResourceResolver(new ComponentResourceResolverImpl());
-
-        IComponentSpecification spec = newSpec(location);
-        spec.setLocation(_locationFixture);
-
-        IPage page = newPage(spec, source, locale);
-
-        Resource resource = new ClasspathResource(new DefaultClassResolver(), "/org/apache/tapestry/junit/Application.application");
-        ILibrarySpecification pspec = new LibrarySpecification();
-        pspec.setSpecificationLocation(resource);
-
-        INamespace parentNamespace = new Namespace(null, null, pspec, null);
-        INamespace namespace = new Namespace(null, parentNamespace, newLibrarySpec(), null);
-
-        page.setNamespace(namespace);
-
-        return source.getMessages(page);
-    }
-
-    private Messages createMessages(String location, Locale locale)
-    {
-        ComponentMessagesSourceImpl source = new ComponentMessagesSourceImpl();
-        source.setClasspathResourceFactory(new ClasspathResourceFactoryImpl(new DefaultClassResolver()));
-        source.setComponentPropertySource(new NullComponentPropertySource());
-        source.setComponentResourceResolver(new ComponentResourceResolverImpl());
-
-        IComponentSpecification spec = newSpec(location);
-        spec.setLocation(_locationFixture);
-
-        IPage page = newPage(spec, source, locale);
-
-        INamespace namespace = new Namespace(null, null, newLibrarySpec(), null);
-
-        page.setNamespace(namespace);
-
-        return source.getMessages(page);
-    }
-
-    private Messages createMessages(String location, Locale locale, String propname)
-    {
-        ComponentMessagesSourceImpl source = new ComponentMessagesSourceImpl();
-        source.setClasspathResourceFactory(new ClasspathResourceFactoryImpl(new DefaultClassResolver()));
-        source.setComponentPropertySource(new NullComponentPropertySource());
-        source.setComponentResourceResolver(new ComponentResourceResolverImpl());
-
-        IComponentSpecification spec = newSpec(location);
-        spec.setLocation(_locationFixture);
-
-        IPage page = newPage(spec, source, locale);
-
-        ILibrarySpecification lspec = newLibrarySpec();
-        lspec.setProperty(ComponentMessagesSourceImpl.NAMESPACE_PROPERTIES_NAME, propname);
-
-        INamespace namespace = new Namespace(null, null, lspec, null);
-
-        page.setNamespace(namespace);
-
-        return source.getMessages(page);
-    }
-
-    public void test_Only_In_Base()
-    {
-        Messages messages = createMessages(MOCK1, new Locale("en", "US"));
-
-        check(messages, "only-in-base", "BASE1");
-    }
-
-    public void test_Specification_Properties_File_Change()
-    {
-        Messages msgs = createMessages(MOCK1, new Locale("en", "US"), "override");
-
-        check(msgs, "standard-property", "Whispering wind");
-    }
-
-    public void test_Specification_Properties_File_Classpath_Change()
-    {
-        Messages msgs = createMessages(MOCK1, new Locale("en", "US"), "org.apache.tapestry.junit.mock.app.impl.classpath");
-
-        check(msgs, "standard-property", "Here!");
-    }
-
-    /** @since 4.0 */
-    public void test_Only_In_Namespace()
-    {
-        Messages messages = createMessages(MOCK1, new Locale("en", "US"));
-
-        check(messages, "only-in-namespace", "LIBRARY_BASE.only-in-namespace");
-    }
-
-    /** @since 4.0 */
-    public void test_Localized_In_Namespace()
-    {
-        Messages messages = createMessages(MOCK1, new Locale("fr"));
-
-        check(messages, "localized-in-namespace", "LIBRARY_FR.localized-in-namespace");
-    }
-
-    /** @since 4.0 */
-    public void test_Component_Overrides_Namespace()
-    {
-        Messages messages = createMessages(MOCK1, new Locale("en", "US"));
-
-        check(messages, "component-overrides-namespace", "MOCKPAGE1_BASE.component-overrides-namespace");
-    }
-
-    /** @since 4.0 */
-    public void testLocalizedComponentOverridesLocalizedNamespace()
-    {
-        Messages messages = createMessages(MOCK1, new Locale("fr"));
-
-        check(
-          messages,
-          "localized-component-overrides-namespace",
-          "MOCKPAGE1_FR.localized-component-overrides-namespace");
-    }
-
-    public void testMissingKey()
-    {
-        Messages messages = createMessages(MOCK1, new Locale("en", "GB"));
-
-        check(messages, "non-existant-key", "[NON-EXISTANT-KEY]");
-    }
-
-    public void testOverwrittenInLanguage()
-    {
-        Messages messages = createMessages(MOCK1, new Locale("en", "US"));
-
-        check(messages, "overwritten-in-language", "LANGUAGE1_en");
-
-        messages = createMessages(MOCK1, new Locale("fr", ""));
-
-        check(messages, "overwritten-in-language", "LANGUAGE1_fr");
-    }
-
-    public void testOverwrittenInCountry()
-    {
-        Messages messages = createMessages(MOCK1, new Locale("en", "US"));
-
-        check(messages, "overwritten-in-country", "COUNTRY1_en_US");
-
-        messages = createMessages(MOCK1, new Locale("fr", "CD"));
-
-        check(messages, "overwritten-in-country", "COUNTRY1_fr_CD");
-    }
-
-    public void testOverwrittenInVariant()
-    {
-        Messages messages = createMessages(MOCK1, new Locale("en", "US", "Tapestry"));
-
-        check(messages, "overwritten-in-variant", "VARIANT1_en_US_Tapestry");
-
-        messages = createMessages(MOCK1, new Locale("fr", "CD", "Foo"));
-
-        check(messages, "overwritten-in-variant", "VARIANT1_fr_CD_Foo");
-    }
-
-    private static final String MOCK2 = "/org/apache/tapestry/junit/MockPage2.page";
-
-    /**
-     * Tests that the code that locates properties files can deal with the base path (i.e.,
-     * Foo.properties) doesn't exist.
-     */
-
-    public void testMissingBase()
-    {
-        Messages messages = createMessages(MOCK2, new Locale("en", "US"));
-
-        check(messages, "language-key", "LANGUAGE1");
-    }
-
-    /**
-     * Tests that naming and search works correctly for locales that specify language and variant,
-     * but no country.
-     */
-
-    public void testMissingCountry()
-    {
-        Messages messages = createMessages(MOCK2, new Locale("en", "", "Tapestry"));
-
-        check(messages, "overwritten-in-variant", "VARIANT1_en__Tapestry");
-    }
-
-    public void testDateFormatting()
-    {
-        Messages messages = createMessages(MOCK1, Locale.ENGLISH);
-
-        Calendar c = new GregorianCalendar(1966, Calendar.DECEMBER, 24);
-
-        Date d = c.getTime();
-
-        assertEquals("A formatted date: 12/24/66", messages.format("using-date-format", d));
-    }
-
-    public void testDateFormatLocalization()
-    {
-        Messages messages = createMessages(MOCK1, Locale.FRENCH);
-
-        Calendar c = new GregorianCalendar(1966, Calendar.DECEMBER, 24);
-
-        Date d = c.getTime();
-
-        // French formatting puts the day before the month.
-
-        assertEquals("A formatted date: 24/12/66", messages.format("using-date-format", d));
-
-    }
-
-    public void testMultipleLocalesWithNamespace()
-    {
-        ComponentMessagesSourceImpl source = new ComponentMessagesSourceImpl();
-        source.setClasspathResourceFactory(new ClasspathResourceFactoryImpl(new DefaultClassResolver()));
-        source.setComponentPropertySource(new NullComponentPropertySource());
-        source.setComponentResourceResolver(new ComponentResourceResolverImpl());
-
-        IComponentSpecification spec = newSpec(MOCK1);
-        spec.setLocation(_locationFixture);
-
-        INamespace namespace = new Namespace(null, null, newLibrarySpec(), null);
-
-        IPage page = newPage(spec, source, new Locale("fr"));
-        page.setNamespace(namespace);
-
-        assertEquals("multilocale_fr", source.getMessages(page).getMessage("multilocale"));
-
-        page = newPage(spec, source, new Locale("en"));
-        page.setNamespace(namespace);
-
-        assertEquals("multilocale", source.getMessages(page).getMessage("multilocale"));
-    }
-
-    public void test_Component_Property_From_Application()
-    {
-        Messages messages = createFullMessages(MOCK1, new Locale("en", "US"));
-
-        check(messages, "inherited.app.name", "Mock Wonder");
-    }
-
-    public void test_Component_Property_From_Library_Overrides_Application()
-    {
-        Messages messages = createFullMessages(MOCK1, new Locale("en", "US"));
-
-        check(messages, "library-overrides-application", "LIBRARY.override");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestLocalizedProperties.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestLocalizedProperties.java
deleted file mode 100644
index 76b8d66..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestLocalizedProperties.java
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.io.InputStream;
-import java.util.Properties;
-
-import org.apache.tapestry.util.text.LocalizedProperties;
-import org.testng.annotations.Test;
-
-/**
- * Tests to ensure that LocalizedProperties are fully backward compatible with java.util.Properties
- * and that non-latin characters are read correctly.
- * 
- * @author mb
- * @since 4.0
- */
-@Test
-public class TestLocalizedProperties extends TapestryTestCase
-{
-    private void ensureEquivalence(String fileName)
-    {
-        ensureEquivalence(fileName, fileName, "ISO-8859-1");
-    }
-
-    private void ensureEquivalence(String fileName1, String fileName2, String encoding)
-    {
-        InputStream standardIns = getClass().getResourceAsStream(fileName1);
-        Properties standard = new Properties();
-        Exception standardException = null;
-        try
-        {
-            standard.load(standardIns);
-        }
-        catch (Exception e)
-        {
-            standardException = e;
-        }
-
-        InputStream localizedIns = getClass().getResourceAsStream(fileName2);
-        Properties localized = new Properties();
-        LocalizedProperties localizedProperties = new LocalizedProperties(localized);
-        Exception localizedException = null;
-        try
-        {
-            localizedProperties.load(localizedIns, encoding);
-        }
-        catch (Exception e)
-        {
-            localizedException = e;
-        }
-
-        if (standardException == null && localizedException == null)
-            assertEquals(standard, localized, "The property content does not match");
-        else if (standardException == null && localizedException != null)
-            fail("Properties did not throw an exception, but LocalizedProperties did: "
-                    + localizedException);
-        else if (standardException != null && localizedException == null)
-            fail("LocalizedProperties did not throw an exception, but Properties did: "
-                    + localizedException);
-        // this test is disabled because in some cases Properties throws an incorrect exception
-        // probably due to a bug
-        //else if (standardException != null && localizedException != null)
-        //	assertEquals("The exception types do not match", standardException.getClass(),
-        // localizedException.getClass());
-    }
-
-    /**
-     * Test for the equivalence between Properties and LocalizedProperties for latin properties
-     */
-    public void testEquivalence()
-    {
-        ensureEquivalence("StandardProperties.properties");
-        ensureEquivalence("BadQuoting1.properties");
-        ensureEquivalence("BadQuoting2.properties");
-    }
-
-    /**
-     * Tests the reading of files using different encodings. Compare it with the reading of files
-     * that have gone through native2ascii and read using Properties.
-     */
-    public void testEncodings()
-    {
-        ensureEquivalence("StandardUTFProperties.properties", "UTFProperties.properties", "utf-8");
-        ensureEquivalence(
-                "StandardCyrillicProperties.properties",
-                "CyrillicProperties.properties",
-                "ISO-8859-5");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestMultipart.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestMultipart.java
deleted file mode 100644
index 6d52957..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestMultipart.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.tapestry.multipart.ValuePart;
-import org.testng.annotations.Test;
-
-/**
- * A few tests to fill in the code coverage of {@link org.apache.tapestry.multipart.ValuePart}and
- * {@link org.apache.tapestry.multipart.UploadPart}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-@Test
-public class TestMultipart extends TapestryTestCase
-{
-
-    public void testSingle()
-    {
-        ValuePart p = new ValuePart("first");
-
-        assertEquals(1, p.getCount());
-        assertEquals("first", p.getValue());
-
-        checkList("values", new String[]
-        { "first" }, p.getValues());
-    }
-
-    public void testTwo()
-    {
-        ValuePart p = new ValuePart("alpha");
-
-        p.add("beta");
-
-        assertEquals(2, p.getCount());
-        assertEquals("alpha", p.getValue());
-        checkList("values", new String[]
-        { "alpha", "beta" }, p.getValues());
-    }
-
-    public void testThree()
-    {
-        ValuePart p = new ValuePart("moe");
-        p.add("larry");
-        p.add("curly");
-
-        checkList("values", new String[]
-        { "moe", "larry", "curly" }, p.getValues());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestStaticLink.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestStaticLink.java
deleted file mode 100644
index bd4a9a5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestStaticLink.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.link.StaticLink;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.link.StaticLink}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-@Test
-public class TestStaticLink extends TapestryTestCase
-{
-    private static final String URL = "http://host/path";
-
-    ILink l = new StaticLink(URL);
-
-    public void testURL()
-    {
-        assertEquals(URL, l.getURL());
-    }
-
-    public void testAbsoluteURL()
-    {
-        assertEquals(URL, l.getAbsoluteURL());
-    }
-
-    public void testURLWithAnchor()
-    {
-        assertEquals(URL, l.getURL(null, false));
-        assertEquals(URL + "#anchor", l.getURL("anchor", false));
-        assertEquals(URL + "#feeble", l.getURL("feeble", true));
-    }
-
-    public void testAbsoluteURLWithParameters()
-    {
-        assertEquals(URL + "#anchor", l.getAbsoluteURL("scheme", "server", 8080, "anchor", false));
-    }
-
-    public void testGetParameterNames()
-    {
-        assertNull(l.getParameterNames());
-    }
-
-    public void testGetParameterValues()
-    {
-        try
-        {
-            l.getParameterValues("any");
-
-            unreachable();
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestTapestryCheckMethodInvocation.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestTapestryCheckMethodInvocation.java
deleted file mode 100644
index ae8e8b1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/TestTapestryCheckMethodInvocation.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.Tapestry;
-import org.testng.annotations.Test;
-
-/**
- * Tests for the methods
- * {@link org.apache.tapestry.Tapestry#checkMethodInvocation(Object, String, Object)},
- * {@link org.apache.tapestry.Tapestry#addMethodInvocation(Object)}and
- * {@link org.apache.tapestry.Tapestry#clearMethodInvocations()}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-@Test
-public class TestTapestryCheckMethodInvocation extends TapestryTestCase
-{
-
-    public void testSuccess()
-    {
-        Tapestry.clearMethodInvocations();
-        Tapestry.addMethodInvocation("alpha");
-        Tapestry.addMethodInvocation("beta");
-
-        Tapestry.checkMethodInvocation("alpha", "alpha()", this);
-        Tapestry.checkMethodInvocation("beta", "beta()", this);
-    }
-
-    public void testFail()
-    {
-        Tapestry.clearMethodInvocations();
-
-        try
-        {
-            Tapestry.checkMethodInvocation("gamma", "gamma()", this);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Class org.apache.tapestry.junit.TestTapestryCheckMethodInvocation overrides method 'gamma()' but does not invoke the super-class implementation.",
-                    ex.getMessage());
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/UTFProperties.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/UTFProperties.properties
deleted file mode 100644
index 0f8d7ec..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/UTFProperties.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-Tapestry = Гоблен
-Гоблен : タペストリー
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/TestMockApplications.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/TestMockApplications.java
deleted file mode 100644
index 6495f1e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/TestMockApplications.java
+++ /dev/null
@@ -1,965 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import ognl.Ognl;
-import ognl.OgnlException;
-import ognl.OgnlRuntime;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.oro.text.regex.*;
-import org.apache.tapestry.ApplicationServlet;
-import org.apache.tapestry.test.mock.*;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.jdom.Document;
-import org.jdom.Element;
-import org.jdom.input.SAXBuilder;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.Cookie;
-import java.beans.Introspector;
-import java.io.*;
-import java.util.*;
-
-/**
- * A complex class that reads an XML description of a test involving the Mock objects and executes
- * it, pretending to be a running servlet container.
- * <p>
- * The XML format is pretty simple, it contains declarations similar to a web.xml deployment
- * descriptor, a description of the active HttpSession (if any), a description of the HttpRequest,
- * and then a set of expectations for the output stream from the request.
- *
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class TestMockApplications
-{
-    public static final String LOGS_DIR = "target/logs";
-
-    public static final String DEFAULT_BASE_DIR = "./";
-
-    public static final String SCRIPTS_DIR = "src/scripts";
-
-    private static String _baseDir;
-
-    private String _testRootDirectory;
-
-    private String _path;
-
-    private String _fileName;
-
-    private Document _document;
-
-    private MockContext _context;
-
-    private String _servletName;
-
-    private ApplicationServlet _servlet;
-
-    private MockRequest _request;
-
-    private MockResponse _response;
-
-    private int _requestNumber = 0;
-
-    private Map _ognlContext = Ognl.createDefaultContext(this);
-
-    private Throwable _exception;
-
-    /**
-     * Shared cache of compiled patterns.
-     */
-
-    private static Map _patternCache = new HashMap();
-
-    private PatternMatcher _matcher = new Perl5Matcher();
-
-    private PatternCompiler _compiler = new Perl5Compiler();
-
-    private PrintStream _savedOut;
-
-    private PrintStream _savedErr;
-
-    private SAXBuilder _builder = new SAXBuilder();
-
-    /**
-     * Closes System.out and System.err, then restores them to their original values.
-     */
-    @AfterMethod
-    public void tearDown() throws Exception
-    {
-        System.err.close();
-        System.setErr(_savedErr);
-
-        System.out.close();
-        System.setOut(_savedOut);
-
-        _requestNumber = 0;
-        _request = null;
-        _response = null;
-    }
-
-    @DataProvider(name = "mockTestScripts")
-    public Object[][] createTestParameters()
-    {
-        List data = new ArrayList();
-
-        File scriptsDir = new File(getBaseDirectory() + SCRIPTS_DIR);
-
-        String[] names = scriptsDir.list();
-
-        for (int i = 0; i < names.length; i++)
-        {
-            String name = names[i];
-
-            if (name.endsWith(".xml"))
-            {
-                data.add(new Object[] {
-                  getBaseDirectory() + "/src/test-data/",
-                  getBaseDirectory() + SCRIPTS_DIR + "/" + name,
-                  name
-                });
-            }
-        }
-
-        return (Object[][])data.toArray(new Object[data.size()][3]);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("MockTester[");
-
-        if (_document != null)
-            buffer.append(_document);
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /**
-     * Invoked to execute the request cycle.
-     */
-    @Test(dataProvider = "mockTestScripts", enabled = false)
-    public void execute(String testRootDirectory, String path, String fileName)
-      throws Exception
-    {
-        _testRootDirectory = testRootDirectory;
-        _path = path;
-        _fileName = fileName;
-
-        // setup and get environment ready
-        createLogs();
-        parse();
-        setup();
-
-        Element root = _document.getRootElement();
-
-        List l = root.getChildren("request");
-        int count = l.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element request = (Element) l.get(i);
-
-            _requestNumber = i + 1;
-
-            executeRequest(request);
-        }
-
-        _servlet.destroy();
-
-        PropertyUtils.clearCache();
-        OgnlRuntime.clearCache();
-        Introspector.flushCaches();
-    }
-
-    private void executeRequest(Element request) throws IOException, DocumentParseException
-    {
-        Cookie[] oldRequestCookies = (_request == null ? null : _request.getCookies());
-
-        _request = new MockRequest(_context, "/" + _servlet.getServletName());
-
-        String contentType = request.getAttributeValue("content-type");
-        if (contentType != null)
-            _request.setContentType(contentType);
-
-        String contentPath = request.getAttributeValue("content-path");
-        if (contentPath != null)
-            _request.setContentPath(_testRootDirectory + contentPath);
-
-        _request.addCookies(oldRequestCookies);
-
-        if (_response != null)
-            _request.addCookies(_response.getCookies());
-
-        setupRequest(request);
-
-        _exception = null;
-
-        _response = new MockResponse(_request);
-
-        try
-        {
-            _servlet.service(_request, _response);
-        }
-        catch (ServletException ex)
-        {
-            _exception = ex;
-        }
-        catch (IOException ex)
-        {
-            _exception = ex;
-        }
-
-        _response.end();
-
-        System.out.println("=== Response #" + _requestNumber + " ===\n\n");
-        System.out.println(_response.getOutputString());
-        System.out.println("\n\n");
-
-        executeAssertions(request);
-    }
-
-    private void parse()
-      throws Exception
-    {
-        _document = _builder.build(_path);
-    }
-
-    private void setup() throws ServletException
-    {
-        Element root = _document.getRootElement();
-
-        if (!root.getName().equals("mock-test"))
-            throw new RuntimeException("Root element of " + _path + " must be 'mock-test'.");
-
-        System.setProperty("org.apache.tapestry.disable-caching", "false");
-
-        setupContext(root);
-        setupServlet(root);
-    }
-
-    private void setupContext(Element parent)
-    {
-        _context = new MockContext(_testRootDirectory);
-
-        Element context = parent.getChild("context");
-
-        if (context == null)
-            return;
-
-        String name = context.getAttributeValue("name");
-
-        if (name != null)
-            _context.setServletContextName(name);
-
-        String root = context.getAttributeValue("root");
-
-        if (root != null)
-            _context.setRootDirectory(_testRootDirectory + root);
-
-        setInitParameters(context, _context);
-    }
-
-    private void setupServlet(Element parent) throws ServletException
-    {
-        Element servlet = parent.getChild("servlet");
-
-        String className = servlet.getAttributeValue("class");
-        _servletName = servlet.getAttributeValue("name");
-
-        _servlet = createServlet(className);
-
-        MockServletConfig config = new MockServletConfig(_servletName, _context);
-
-        setInitParameters(servlet, config);
-
-        _servlet.init(config);
-    }
-
-    private void setupRequest(Element request)
-    {
-        String method = request.getAttributeValue("method");
-        if (method != null)
-            _request.setMethod(method);
-
-        // It's really just the language from the locale.
-
-        String locale = request.getAttributeValue("locale");
-        if (locale != null)
-            _request.setLocale(new Locale(locale, "", ""));
-
-        List parameters = request.getChildren("parameter");
-        int count = parameters.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element parameter = (Element) parameters.get(i);
-
-            setRequestParameter(parameter);
-        }
-
-        String failover = request.getAttributeValue("failover");
-
-        if (failover != null && failover.equals("true"))
-            _request.simulateFailover();
-
-        // TBD: Headers, etc., etc.
-    }
-
-    private void setRequestParameter(Element parameter)
-    {
-        List values = new ArrayList();
-
-        String name = parameter.getAttributeValue("name");
-
-        String value = parameter.getAttributeValue("value");
-        if (value != null)
-            values.add(value);
-
-        List children = parameter.getChildren("value");
-        int count = children.size();
-        for (int i = 0; i < count; i++)
-        {
-            Element e = (Element) children.get(i);
-            value = e.getTextTrim();
-
-            values.add(value);
-        }
-
-        String[] array = (String[]) values.toArray(new String[values.size()]);
-
-        _request.setParameter(name, array);
-    }
-
-    private void setInitParameters(Element parent, InitParameterHolder holder)
-    {
-        List children = parent.getChildren("init-parameter");
-
-        int count = children.size();
-        for (int i = 0; i < count; i++)
-        {
-            Element e = (Element) children.get(i);
-
-            String name = e.getAttributeValue("name");
-            String value = e.getAttributeValue("value");
-
-            holder.setInitParameter(name, value);
-        }
-    }
-
-    private ApplicationServlet createServlet(String className)
-    {
-        Throwable t = null;
-        try
-        {
-            Class servletClass = Class.forName(className);
-
-            return (ApplicationServlet) servletClass.newInstance();
-        }
-        catch (ClassNotFoundException ex)
-        {
-            t = ex;
-        }
-        catch (InstantiationException ex)
-        {
-            t = ex;
-        }
-        catch (IllegalAccessException ex)
-        {
-            t = ex;
-        }
-
-        // Just a convient wrapper to percolate to the top and
-        // mark this test as an error.
-
-        throw new ApplicationRuntimeException("Unable to instantiate servlet class " + className
-                                              + ".", t);
-    }
-
-    public MockContext getContext()
-    {
-        return _context;
-    }
-
-    public MockRequest getRequest()
-    {
-        return _request;
-    }
-
-    public MockResponse getResponse()
-    {
-        return _response;
-    }
-
-    public ApplicationServlet getServlet()
-    {
-        return _servlet;
-    }
-
-    private void executeAssertions(Element request) throws DocumentParseException
-    {
-        executeOutputAssertions(request);
-        executeNoOutputAssertions(request);
-        executeRegexpAssertions(request);
-        executeExpressionAssertions(request);
-        executeOutputMatchesAssertions(request);
-        executeCookieAssertions(request);
-        executeOutputStreamAssertions(request);
-        executeExceptionAssertions(request);
-    }
-
-    /**
-     * Handles &lt;assert&gt; elements inside &lt;request&gt;. Each assertion is in the form of a
-     * boolean expression which must be true.
-     */
-
-    private void executeExpressionAssertions(Element request) throws DocumentParseException
-    {
-        List l = request.getChildren("assert");
-        int count = l.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element a = (Element) l.get(i);
-
-            String name = a.getAttributeValue("name");
-            String expression = a.getTextTrim();
-
-            checkExpression(name, expression);
-        }
-    }
-
-    private void checkExpression(String name, String expression) throws DocumentParseException
-    {
-
-        boolean result = evaluate(expression);
-
-        if (result)
-            return;
-
-        throw new AssertionError(buildTestName(name) + ": Expression '" + expression
-                                 + "' was not true.");
-
-    }
-
-    private boolean evaluate(String expression) throws DocumentParseException
-    {
-        Object value = null;
-
-        try
-        {
-            value = Ognl.getValue(expression, _ognlContext, this);
-        }
-        catch (OgnlException ex)
-        {
-            throw new DocumentParseException("Expression '" + expression + "' is not valid.", ex);
-        }
-
-        if (value == null)
-            return false;
-
-        if (value instanceof Boolean)
-            return ((Boolean) value).booleanValue();
-
-        if (value instanceof Number)
-            return ((Number) value).longValue() != 0;
-
-        if (value instanceof String)
-            return ((String) value).length() > 0;
-
-        throw new DocumentParseException("Expression '" + expression + "' evaluates to ("
-                                         + value.getClass().getName() + ") " + value
-                                         + ", which cannot be interpreted as a boolean.");
-    }
-
-    /**
-     * Handles &lt;assert-regexp&gt; elements inside &lt;request&gt;. Checks that a regular
-     * expression appears in the output. Content of element is the regular expression.
-     * <p>
-     * Attribute name is used in error messages.
-     */
-
-    private void executeRegexpAssertions(Element request)
-      throws DocumentParseException
-    {
-        String outputString = null;
-
-        List assertions = request.getChildren("assert-regexp");
-        int count = assertions.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element a = (Element) assertions.get(i);
-
-            String name = a.getAttributeValue("name");
-            String pattern = a.getTextTrim();
-
-            if (HiveMind.isBlank(pattern))
-                throw new DocumentParseException("Pattern is null in " + a);
-
-            if (outputString == null)
-                outputString = _response.getOutputString();
-
-            matchRegexp(name, outputString, pattern);
-        }
-
-    }
-
-    /**
-     * Handles &lt;assert-output&gt; elements inside &lt;request&gt;. Checks that a substring
-     * appears in the output. Content of element is the substring to search for.
-     * <p>
-     * Attribute name is used in error messages.
-     */
-
-    private void executeOutputAssertions(Element request)
-      throws DocumentParseException
-    {
-        String outputString = null;
-
-        List assertions = request.getChildren("assert-output");
-        int count = assertions.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element a = (Element) assertions.get(i);
-
-            String name = a.getAttributeValue("name");
-            String substring = a.getTextTrim();
-
-            if (HiveMind.isBlank(substring))
-                throw new DocumentParseException("Substring is null in " + a);
-
-            if (outputString == null)
-                outputString = _response.getOutputString();
-
-            matchSubstring(name, outputString, substring);
-        }
-
-    }
-
-    /**
-     * Handles &lt;assert-no-output&gt; elements inside &lt;request&gt;. Checks that a substring
-     * does not appear in the output. Content of element is the substring to search for.
-     * <p>
-     * Attribute name is used in error messages.
-     */
-
-    private void executeNoOutputAssertions(Element request)
-      throws DocumentParseException
-    {
-        String outputString = null;
-
-        List assertions = request.getChildren("assert-no-output");
-        int count = assertions.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element a = (Element) assertions.get(i);
-
-            String name = a.getAttributeValue("name");
-            String substring = a.getTextTrim();
-
-            if (HiveMind.isBlank(substring))
-                throw new DocumentParseException("Substring is null in " + a, (Resource) null);
-
-            if (outputString == null)
-                outputString = _response.getOutputString();
-
-            matchNoSubstring(name, outputString, substring);
-        }
-
-    }
-
-    private PatternMatcher getMatcher()
-    {
-        return _matcher;
-    }
-
-    private Pattern compile(String pattern)
-      throws DocumentParseException
-    {
-        Pattern result = (Pattern) _patternCache.get(pattern);
-
-        if (result != null)
-            return result;
-
-        try
-        {
-            result = _compiler.compile(pattern, Perl5Compiler.MULTILINE_MASK);
-
-        }
-        catch (MalformedPatternException ex)
-        {
-            throw new ApplicationRuntimeException("Malformed regular expression: " + pattern
-                                                  + " in " + _path + ".", ex);
-        }
-
-        _patternCache.put(pattern, result);
-
-        return result;
-    }
-
-    private void matchRegexp(String name, String text, String pattern)
-      throws DocumentParseException
-    {
-        Pattern compiled = compile(pattern);
-
-        if (getMatcher().contains(text, compiled))
-            return;
-
-        System.err.println(text);
-
-        throw new AssertionError(buildTestName(name)
-                                 + ": Response does not contain regular expression '" + pattern + "'.");
-    }
-
-    private void matchSubstring(String name, String text, String substring)
-    {
-        if (text == null)
-            throw new AssertionError(buildTestName(name) + " : Response is null.");
-
-        if (text.indexOf(substring) >= 0)
-            return;
-
-        System.err.println(text);
-
-        throw new AssertionError(buildTestName(name) + ":" + text + "\n Response does not contain string '"
-                                 + substring + "'.");
-    }
-
-    private void matchNoSubstring(String name, String text, String substring)
-    {
-        if (text == null)
-            throw new AssertionError(buildTestName(name) + " : Response is null.");
-
-        if (text.indexOf(substring) < 0)
-            return;
-
-        System.err.println(text);
-
-        throw new AssertionError(buildTestName(name) + ": Response contains string '"
-                                 + substring + "'.");
-    }
-
-    private void executeOutputMatchesAssertions(Element request) throws DocumentParseException
-    {
-        List l = request.getChildren("assert-output-matches");
-        int count = l.size();
-        String outputString = null;
-
-        for (int i = 0; i < count; i++)
-        {
-            Element e = (Element) l.get(i);
-
-            if (outputString == null)
-                outputString = _response.getOutputString();
-
-            executeOutputMatchAssertion(e, outputString);
-        }
-
-    }
-
-    private void executeOutputMatchAssertion(Element element, String outputString)
-      throws DocumentParseException
-    {
-        String name = element.getAttributeValue("name");
-        String value = element.getAttributeValue("subgroup");
-        int subgroup = (value == null) ? 0 : Integer.parseInt(value);
-
-        String pattern = element.getTextTrim();
-
-        if (HiveMind.isBlank(pattern))
-            throw new DocumentParseException("Pattern is null in " + element);
-
-        PatternMatcherInput input = new PatternMatcherInput(outputString);
-
-        PatternMatcher matcher = getMatcher();
-        Pattern compiled = compile(pattern);
-
-        List<Element> l = element.getChildren("match");
-        int count = l.size();
-        int i = 0;
-
-        while (matcher.contains(input, compiled))
-        {
-            MatchResult match = matcher.getMatch();
-            String actual = match.group(subgroup);
-
-            boolean matched = contentContains(l, actual);
-
-            if (i >= count)
-            {
-                System.err.println(outputString);
-                throw new AssertionError(buildTestName(name) + ": Too many matches for '"
-                                         + pattern + "'.");
-            }
-
-            if (!matched) {
-                System.err.println(outputString);
-                throw new AssertionError(buildTestName(name) + ": No expected match found for "
-                                         + "output of '" + actual + "'. ");
-            }
-
-            i++;
-        }
-
-        if (i < count)
-        {
-            System.err.println(outputString);
-            throw new AssertionError(buildTestName(name) + ": Too few matches for '"
-                                     + pattern + "' (expected " + count + " but got " + i + ").");
-        }
-    }
-
-    private boolean contentContains(List<Element> elements, String text)
-    {
-        for (Element e : elements) {
-            if (e.getTextTrim().equals(text))
-                return true;
-        }
-
-        return false;
-    }
-
-    private void executeExceptionAssertions(Element request)
-    {
-        List l = request.getChildren("assert-exception");
-        int count = l.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element assertion = (Element) l.get(i);
-
-            executeExceptionAssertion(assertion);
-        }
-
-    }
-
-    private void executeExceptionAssertion(Element assertion)
-    {
-        String name = assertion.getAttributeValue("name");
-        String value = assertion.getTextTrim();
-
-        if (_exception == null)
-            throw new AssertionError(buildTestName(name) + " no exception thrown.");
-        String message = _exception.getMessage();
-
-        if (message.indexOf(value) >= 0)
-            return;
-
-        throw new AssertionError(buildTestName(name) + " exception message (" + message
-                                 + ") does not contain '" + value + "'.");
-    }
-
-    private void executeCookieAssertions(Element request)
-    {
-        List l = request.getChildren("assert-cookie");
-        int count = l.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element assertion = (Element) l.get(i);
-
-            executeCookieAssertion(assertion);
-        }
-    }
-
-    private void executeCookieAssertion(Element assertion)
-    {
-        String name = assertion.getAttributeValue("name");
-        String value = assertion.getAttributeValue("value");
-
-        Cookie[] cookies = _response.getCookies();
-
-        for (int i = 0; i < cookies.length; i++)
-        {
-            if (!cookies[i].getName().equals(name))
-                continue;
-
-            if (cookies[i].getValue().equals(value))
-                return;
-
-            throw new AssertionError(buildTestName(name) + ": Response cookie '" + name
-                                     + "': expected '" + value + "', but was '" + cookies[i].getValue() + "'.");
-        }
-
-        throw new AssertionError(buildTestName(name) + ": Could not find cookie named '"
-                                 + name + "' in response.");
-    }
-
-    private String buildTestName(String name)
-    {
-        return "Request #" + _requestNumber + "/" + name;
-    }
-
-    private void executeOutputStreamAssertions(Element request) throws DocumentParseException
-    {
-        List l = request.getChildren("assert-output-stream");
-        int count = l.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element assertion = (Element) l.get(i);
-
-            executeOutputStreamAssertion(assertion);
-        }
-
-    }
-
-    private void executeOutputStreamAssertion(Element element) throws DocumentParseException
-    {
-        String name = element.getAttributeValue("name");
-        String contentType = element.getAttributeValue("content-type");
-        String path = element.getAttributeValue("path");
-
-        String actualContentType = _response.getContentType();
-
-        if (!contentType.equals(actualContentType))
-            throw new AssertionError(buildTestName(name) + " content-type was '"
-                                     + actualContentType + "', expected '" + contentType + "'.");
-
-        byte[] actualContent = _response.getResponseBytes();
-        byte[] expectedContent = getFileContent(getBaseDirectory() + "/" + path);
-
-        if (actualContent.length != expectedContent.length)
-            throw new AssertionError(buildTestName(name) + " actual length of "
-                                     + actualContent.length + " bytes does not match expected length of "
-                                     + expectedContent.length + " bytes.");
-
-        for (int i = 0; i < actualContent.length; i++)
-        {
-            if (actualContent[i] != expectedContent[i])
-                throw new AssertionError(buildTestName(name)
-                                         + " content mismatch at index + " + i + ".");
-
-        }
-    }
-
-    private byte[] getFileContent(String path)
-    {
-        try
-        {
-            InputStream in = new FileInputStream(path);
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-            byte[] buffer = new byte[1000];
-
-            while (true)
-            {
-                int length = in.read(buffer);
-                if (length < 0)
-                    break;
-
-                out.write(buffer, 0, length);
-            }
-
-            in.close();
-            out.close();
-
-            return out.toByteArray();
-        }
-        catch (FileNotFoundException ex)
-        {
-            throw new ApplicationRuntimeException("File '" + path + "' not found.", ex);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException("Unable to read file '" + path + "'.", ex);
-        }
-    }
-
-    private void createLogs()
-      throws Exception
-    {
-        File outDir = new File(getBaseDirectory() + LOGS_DIR);
-
-        if (!outDir.isDirectory())
-            outDir.mkdirs();
-
-        _savedOut = System.out;
-        _savedErr = System.err;
-
-        System.setOut(createPrintStream(outDir.getPath() + "/" + _fileName, "out"));
-        System.setErr(createPrintStream(outDir.getPath() + "/" + _fileName, "err"));
-    }
-
-    private PrintStream createPrintStream(String path, String extension) throws Exception
-    {
-        File file = new File(path + "." + extension);
-
-        // Open and truncate file.
-
-        FileOutputStream fos = new FileOutputStream(file);
-
-        BufferedOutputStream bos = new BufferedOutputStream(fos);
-
-        return new PrintStream(bos, true);
-    }
-
-    @AfterClass
-    public static void deleteDir()
-    {
-        File file = new File(getBaseDirectory() + "/target/.private");
-
-        if (!file.exists())
-            return;
-
-        deleteRecursive(file);
-    }
-
-    private static void deleteRecursive(File file)
-    {
-        if (file.isFile())
-        {
-            file.delete();
-            return;
-        }
-
-        String[] names = file.list();
-
-        for (int i = 0; i < names.length; i++)
-        {
-            File f = new File(file, names[i]);
-            deleteRecursive(f);
-        }
-
-        file.delete();
-    }
-
-    public static String getBaseDirectory()
-    {
-        if (_baseDir == null) {
-            _baseDir = System.getProperty("BASEDIR", DEFAULT_BASE_DIR);
-            File test = new File(_baseDir + SCRIPTS_DIR);
-            if (!test.exists()) {
-                test = new File(_baseDir + "tapestry-framework/" + SCRIPTS_DIR);
-                if (test.exists())
-                    _baseDir = _baseDir + "tapestry-framework/";
-            }
-        }
-
-        return _baseDir;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/AgeRange.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/AgeRange.java
deleted file mode 100644
index 31e168f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/AgeRange.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-/**
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class AgeRange
-{
-    public static final String CHILD = "CHILD";
-
-    public static final String TEEN = "TEEN";
-
-    public static final String ADULT = "ADULT";
-
-    public static final String RETIREE = "RETIREE";
-
-    public static final String ELDERLY = "ELDERLY";
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/AgeRangeStrings.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/AgeRangeStrings.properties
deleted file mode 100644
index 80b164f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/AgeRangeStrings.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-CHILD=Child (0 - 9)
-TEEN=Teen (10 - 17)
-ADULT=Adult (18 - 60)
-RETIREE=Retiree (61 - 75)
-ELDERLY=Elderly (76+)
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Assets.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Assets.html
deleted file mode 100644
index b1ed9e2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Assets.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<span jwcid="$content$">
-<span jwcid="border">
-
-
-Some page.
-
-<a jwcid="home"><img jwcid="@Image" image="ognl:assets.home"/></a>
-
-<p>
-
-<a jwcid="back"><img jwcid="@Image" image="ognl:assets.back"/></a>
-
-
-<p>
-
-<a jwcid="switch@DirectLink" listener="listener:selectFrench">Switch to French</a>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Assets.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Assets.java
deleted file mode 100644
index 8b2838d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Assets.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Provides functionality to switch the locale to French.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class Assets extends BasePage
-{
-    public void selectFrench(IRequestCycle cycle)
-    {
-        IEngine engine = cycle.getEngine();
-
-        engine.setLocale(Locale.FRENCH);
-
-        // Currently, when you change locale there is no way to
-        // reload the current page.
-
-        cycle.activate("Home");
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Assets.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Assets.page
deleted file mode 100644
index b85eeca..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Assets.page
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Assets">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Assets</static-binding>
-  </component>
-
-  <component id="home" type="ServiceLink">
-  	<static-binding name="service">home</static-binding>
-  </component>
-  
-  <component id="back" type="PageLink">
-  	<static-binding name="page">Register</static-binding>
-  </component>
-  
-  <context-asset name="back" path="/images/back.png"/>
-  <private-asset name="home" resource-path="/org/apache/tapestry/junit/mock/app/home.png"/>
-
-</page-specification>	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ContextAssetTemplate.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ContextAssetTemplate.page
deleted file mode 100644
index 4b19d39..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ContextAssetTemplate.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Context Asset Template</static-binding>
-  </component>
-
-  <context-asset name="$template" path="/ContextAssetTemplate.html"/>
-  
-</page-specification>	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Guard.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Guard.html
deleted file mode 100644
index 5f8b894..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Guard.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Click <a jwcid="link">here</a> to continue set the visited flag and continue.
-
-<p>
-Callback: <span jwcid="insertCallback"/>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Guard.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Guard.java
deleted file mode 100644
index b607827..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Guard.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.callback.ICallback;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Guard page for the Protected page. Protected checks the "visited" property of this page and, if
- * false, redirects to this page.
- * 
- * @author Howard Lewis Ship
- * @since 2.3
- */
-
-public abstract class Guard extends BasePage
-{
-    public abstract ICallback getCallback();
-
-    public abstract void setCallback(ICallback callback);
-
-    public abstract void setVisited(boolean visited);
-
-    public abstract boolean isVisited();
-
-    public void linkClicked(IRequestCycle cycle)
-    {
-        setVisited(true);
-
-        ICallback callback = getCallback();
-
-        setCallback(null);
-
-        callback.performCallback(cycle);
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Guard.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Guard.page
deleted file mode 100644
index d059ca4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Guard.page
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Guard">
-
-  <property name="callback" persist="session"/>
-  <property name="visited" persist="session"/>
-  
-  <component id="border" type="lib:Border">
-  	<binding name="title" value="literal:Guard"/>
-  </component>
-  
-  <component id="link" type="DirectLink">
-  	<binding name="listener" value="listener:linkClicked"/>
-  </component>
-   
-  <component id="insertCallback" type="Insert">
-  	<binding name="value" value="callback"/>
-  </component>
-   
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.html
deleted file mode 100644
index 61be188..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Home page content -- in English.
-
-<a jwcid="link"><span key="localized.blurb"/></a>
-
-<span jwcid="@Any" element="foo" bar="message:foo-bar"/>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.java
deleted file mode 100644
index 1a1e1d9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.junit.mock.lib.Dumper;
-
-/**
- * Part of the Mock application test suite.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Home extends BasePage
-{
-    public void linkClicked(IRequestCycle cycle)
-    {
-        Dumper dumper = (Dumper) cycle.getPage("lib:Dumper");
-
-        dumper.setObjects(cycle.getListenerParameters());
-
-        cycle.activate(dumper);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.page
deleted file mode 100644
index a41ba3f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Home">
-
-  <component id="border" type="lib:Border">
-  	<message-binding name="title" key="page.title"/>
-  </component>
-
-  <component id="link" type="DirectLink">
-    <binding name="listener" expression="listeners.linkClicked"/>
-  	<binding name="parameters" expression="{2, 3.5, &quot;Hello&quot; }"/>
-  </component>
-  
-</page-specification>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.properties
deleted file mode 100644
index 710478b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-page.title=Mock App Home Page
-
-localized.blurb=If it's not Scottish, it's crap!
-foo-bar=Totally Screwed!
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home_fr.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home_fr.html
deleted file mode 100644
index 1cbe1ca..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home_fr.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Home page content -- in French!
-
-<a jwcid="link"><span  key="localized.blurb"/></a>
-
-<span jwcid="@Any" element="foo" bar="message:foo-bar"/>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home_fr.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home_fr.properties
deleted file mode 100644
index 7acf9fe..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Home_fr.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-localized.blurb=Zees ees nawt cheeze!
-foo-bar=Merde!
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Mock.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Mock.application
deleted file mode 100644
index 1f9e5a3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Mock.application
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="JUnit Mock Application">
-	
-	<page name="Home" specification-path="Home.page"/>
-	<page name="ServiceTest" specification-path="ServiceTest.page"/>
-	<page name="Register" specification-path="Register.page"/>
-	<page name="RegisterConfirm" specification-path="RegisterConfirm.page"/>
-
-	<page name="Strings" specification-path="Strings.page"/>
-
-	<page name="Protected" specification-path="Protected.page"/>
-	<page name="Guard" specification-path="Guard.page"/>
-
-	<page name="ProtectedLink" specification-path="ProtectedLink.page"/>
-	<page name="ProtectedLinkResult" specification-path="ProtectedLinkResult.page"/>
-
-	<page name="Stale" specification-path="Stale.page"/>
-
-	<page name="FormNoBody" specification-path="FormNoBody.page"/>
-
-	<page name="TemplateExpr" specification-path="expr/TemplateExpr.page"/>
-	<page name="TemplateExprConflict" specification-path="expr/TemplateExprConflict.page"/>
-	<page name="TemplateExprInformal" specification-path="expr/TemplateExprInformal.page"/>
-	<page name="TemplateExprReserved" specification-path="expr/TemplateExprReserved.page"/>
-		
-	<page name="ImplicitComponents" specification-path="impl/ImplicitComponents.page"/>
-		
-	<page name="Assets" specification-path="Assets.page"/>
-					
-	<page name="PrivateAssetTemplate" specification-path="PrivateAssetTemplate.page"/>
-
-	<page name="ContextAssetTemplate" specification-path="ContextAssetTemplate.page"/>
-						
-	<page name="RelativeAssets" specification-path="RelativeAssets.page"/>
-    
-    <page name="Styled" specification-path="Styled.page"/>						
-							
-	<library id="lib" specification-path="/org/apache/tapestry/junit/mock/lib/MockLibrary.library"/>
-	
-</application>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/PrivateAssetTemplate.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/PrivateAssetTemplate.page
deleted file mode 100644
index f22d1cc..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/PrivateAssetTemplate.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="border" type="lib:Border">
-  	<binding name="title" value="literal:Private Asset Template"/>
-  </component>
-
-  <asset name="$template" path="/pages/PrivateAssetTemplate.html"/>
-  
-</page-specification>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Protected.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Protected.html
deleted file mode 100644
index d8905a6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Protected.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-This is a protected page.
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Protected.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Protected.java
deleted file mode 100644
index b825ba9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Protected.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.callback.ICallback;
-import org.apache.tapestry.callback.PageCallback;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageValidateListener;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Part of Mock application. Works with the {@link Guard}page to ensure that the Guard page has
- * been visited before displaying.
- * 
- * @author Howard Lewis Ship
- * @since 2.3
- */
-
-public abstract class Protected extends BasePage implements PageValidateListener
-{
-
-    public void pageValidate(PageEvent event)
-    {
-        Guard guard = (Guard) getRequestCycle().getPage("Guard");
-
-        if (!guard.isVisited())
-        {
-            ICallback callback = new PageCallback(this);
-            guard.setCallback(callback);
-
-            throw new PageRedirectException(guard);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Protected.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Protected.page
deleted file mode 100644
index 88094ae..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Protected.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Protected">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Protected</static-binding>
-  </component>
-   
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLink.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLink.html
deleted file mode 100644
index 12766e6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLink.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-This is a <a jwcid="link">protected link</a>.
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLink.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLink.java
deleted file mode 100644
index 3304d53..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLink.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.callback.DirectCallback;
-import org.apache.tapestry.callback.ICallback;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Tests the ability to "protect" a link with a Guard page. Tests the
- * {@link org.apache.tapestry.callback.DirectCallback}class.
- * 
- * @author Howard Lewis Ship
- * @since 2.3
- */
-
-public abstract class ProtectedLink extends BasePage
-{
-    public void linkClicked(IRequestCycle cycle)
-    {
-        Object[] parameters = cycle.getListenerParameters();
-
-        Guard guard = (Guard) cycle.getPage("Guard");
-
-        if (!guard.isVisited())
-        {
-            ICallback callback = new DirectCallback((IDirect) getComponent("link"), parameters);
-            guard.setCallback(callback);
-            cycle.activate(guard);
-            return;
-        }
-
-        ProtectedLinkResult page = (ProtectedLinkResult) cycle.getPage("ProtectedLinkResult");
-        page.setParameters(parameters);
-
-        cycle.activate(page);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLink.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLink.page
deleted file mode 100644
index 0e9e9b7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLink.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.ProtectedLink">
-
-  <component id="border" type="lib:Border">
-  	<binding name="title" value="literal:ProtectedLink"/>
-  </component>
-  
-  <component id="link" type="DirectLink">
-  	<binding name="listener" value="listeners.linkClicked"/>
-  	<binding name="parameters" value="{ 6, 13, 1999}"/>
-  </component>
-   
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.html
deleted file mode 100644
index f5b2815..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Parameters:
-<ul>
-<li jwcid="foreach"><span jwcid="insertParameter">Parameter</span></li>
-</ul>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.java
deleted file mode 100644
index 00cae5f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Displays the results passed as a parameter to
- * {@link org.apache.tapestry.junit.mock.app.ProtectedLink}page.
- * 
- * @author Howard Lewis Ship
- * @since 2.3
- */
-
-public abstract class ProtectedLinkResult extends BasePage
-{
-    private Object[] _parameters;
-
-    public void detach()
-    {
-        _parameters = null;
-
-        super.detach();
-    }
-
-    public Object[] getParameters()
-    {
-        return _parameters;
-    }
-
-    public void setParameters(Object[] parameters)
-    {
-        _parameters = parameters;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.page
deleted file mode 100644
index d4f2ead..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.page
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.ProtectedLinkResult">
-
-  <component id="border" type="lib:Border">
-  	<binding name="title" value="literal:ProtectedLink: Result" />
-  </component>
-  
-  <component id="foreach" type="For">
-  	<binding name="source" value="parameters"/>
-  </component>
-  
-  <component id="insertParameter" type="Insert">
-  	<binding name="value" value="components.foreach.value"/>
-  </component>
-   
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Register.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Register.html
deleted file mode 100644
index bbaaad9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Register.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-<span jwcid="showError"/>
-
-<form jwcid="form">
-
-<table>
-	<tr>
-		<th><span jwcid="labelFirstName">First Name</span>:</th>
-		<td><input jwcid="inputFirstName" maxlength="100" size="40"/></td>
-	</tr>
-	<tr>
-		<th><span jwcid="labelLastName">Last Name</span>:</th>
-		<td><span jwcid="inputLastName" maxlength="100" size="40"/></td>
-	</tr>
-	
-	<tr>
-		<th>Sex:</th>
-		<td><span jwcid="inputSex">
-		
-		<input jwcid="inputMale"/> Male <br>
-		<input jwcid="inputFemale"/> Female		
-		</span>
-		</td>
-	
-	<tr>
-		<th>Age:</th>
-		<td><select jwcid="inputAgeRange"/></td>
-	</tr>
-	
-	<tr>
-		<td></td>
-		<td><input type="submit" value="Register"/></td>
-	</tr>
-</table>
-
-</form>
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Register.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Register.java
deleted file mode 100644
index 98a08bd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Register.java
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-/**
- * Page used to demonstate basic forms.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public abstract class Register extends BasePage
-{
-    private IPropertySelectionModel _ageRangeModel;
-
-    public IPropertySelectionModel getAgeRangeModel()
-    {
-        if (_ageRangeModel == null)
-            _ageRangeModel = new StringPropertySelectionModel(new String[]
-            {
-
-            AgeRange.CHILD, AgeRange.TEEN, AgeRange.ADULT, AgeRange.RETIREE, AgeRange.ELDERLY
-
-            });
-
-        return _ageRangeModel;
-    }
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        IValidationDelegate delegate = (IValidationDelegate) getBeans().getBean("delegate");
-
-        if (delegate.getHasErrors())
-            return;
-
-        User user = (User) getBeans().getBean("user");
-
-        RegisterConfirm page = (RegisterConfirm) cycle.getPage("RegisterConfirm");
-
-        page.setUser(user);
-        cycle.activate(page);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Register.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Register.page
deleted file mode 100644
index 683d892..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Register.page
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Register">
-
-  <bean name="delegate" class="org.apache.tapestry.valid.ValidationDelegate"/>
-
-  <bean name="requiredString" 
-  	class="org.apache.tapestry.valid.StringValidator" 
-  	lifecycle="page">
-    <set-property name="minimumLength" expression="3"/>
-    <set-property name="required" expression="true"/>
-    <set-property name="clientScriptingEnabled" expression="true"/>
-  </bean>
-  
-  <bean name="user" class="org.apache.tapestry.junit.mock.app.User"/>
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Register</static-binding>
-  </component>
-  
-  <component id="showError" type="lib:ShowError">
-  	<binding name="delegate" expression="beans.delegate"/>
-  </component>
-  
-  <component id="form" type="Form">
-  	<binding name="listener" expression="listeners.formSubmit"/>
-  	<binding name="delegate" expression="beans.delegate"/>
-  </component>
-  
-  <component id="labelFirstName" type="FieldLabel">
-  	<binding name="field" expression="components.inputFirstName"/>
-  </component>
-  
-  <component id="inputFirstName" type="ValidField">
-  	<binding name="value" expression="beans.user.firstName"/>
-  	<binding name="validator" expression="beans.requiredString"/>
-  	<static-binding name="displayName">First Name</static-binding>
-  </component>
-  
-  <component id="labelLastName" type="FieldLabel">
-  	<binding name="field" expression="components.inputLastName"/>
-  </component>
-  
-  <component id="inputLastName" type="ValidField">
-  	<binding name="value" expression="beans.user.lastName"/>
-  	<binding name="validator" expression="beans.requiredString"/>
-  	<static-binding name="displayName">Last Name</static-binding>
-  </component>  
-  
-  <component id="inputSex" type="RadioGroup">
-  	<binding name="selected" expression="beans.user.male"/>
-  </component>
-  
-  <component id="inputMale" type="Radio">
-  	<binding name="value" expression="true"/>
-  </component>
-  
-  <component id="inputFemale" type="Radio">
-  	<binding name="value" expression="false"/>
-  </component>
-  
-  <component id="inputAgeRange" type="PropertySelection">
-  	 <binding name="value" expression="beans.user.ageRange"/>
-  	 <binding name="model" expression="ageRangeModel"/>
-  </component>
-  
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RegisterConfirm.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RegisterConfirm.html
deleted file mode 100644
index 354a1fc..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RegisterConfirm.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<table>
-	<tr>
-		<th>First Name:</th>
-		<td><span jwcid="insertFirstName">First Name</span></td>
-	</tr>
-	<tr>
-		<th>Last Name:</th>
-		<td><span jwcid="insertLastName">Last Name</span></td>
-	</tr>
-	
-	<tr>
-		<th>Sex:</th>
-		<td><span jwcid="insertSex">Male</span></td>
-	
-	<tr>
-		<th>Age:</th>
-		<td><span jwcid="insertAge">Adult</span></td>
-	</tr>
-
-</table>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RegisterConfirm.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RegisterConfirm.java
deleted file mode 100644
index f433017..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RegisterConfirm.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import java.util.ResourceBundle;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Part of Mock application, displays the data input on the Register page.
- * 
- * @author Howard Lewis Ship
- * @since 2.3
- */
-
-public abstract class RegisterConfirm extends BasePage
-{
-    private ResourceBundle _ageRangeStrings;
-
-    private User _user;
-
-    public void detach()
-    {
-        _user = null;
-
-        super.detach();
-    }
-
-    public User getUser()
-    {
-        return _user;
-    }
-
-    public void setUser(User user)
-    {
-        _user = user;
-    }
-
-    public String getFormattedAge()
-    {
-        if (_ageRangeStrings == null)
-            _ageRangeStrings = ResourceBundle.getBundle(
-                    "org.apache.tapestry.junit.mock.app.AgeRangeStrings",
-                    getLocale());
-
-        String key = _user.getAgeRange();
-
-        return _ageRangeStrings.getString(key);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RegisterConfirm.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RegisterConfirm.page
deleted file mode 100644
index 1dc64d7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RegisterConfirm.page
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.RegisterConfirm">
-
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Registration Confirmation</static-binding>
-  </component>
-  
-  <component id="insertFirstName" type="Insert">
-  	<binding name="value" expression="user.firstName"/>
-  </component>
-  
-  <component id="insertLastName" type="Insert">
-  	<binding name="value" expression="user.lastName"/>
-  </component>
-  
-  <component id="insertSex" type="Insert">
-  	<binding name="value" expression="user.male ? &quot;Male&quot; : &quot;Female&quot;"/>
-  </component>
-  
-  <component id="insertAge" type="Insert">
-  	<binding name="value" expression="formattedAge"/>
-  </component>
-    
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RelativeAssets.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RelativeAssets.html
deleted file mode 100644
index 6cde6a1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RelativeAssets.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="@lib:Border" title="Relative Assets">
-
-Some page.
-
-<img jwcid="@Image" image="ognl:assets.private"/>
-
-<p>
-
-<img jwcid="@Image" image="ognl:assets.context"/>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RelativeAssets.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RelativeAssets.page
deleted file mode 100644
index 3b0f2b1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/RelativeAssets.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-
-  <private-asset name="private" resource-path="images/PrivateAsset.gif"/>
-  <context-asset name="context" path="/images/ContextAsset.gif"/>
-    
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ServiceTest.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ServiceTest.html
deleted file mode 100644
index b1413ba..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ServiceTest.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<a jwcid="link">service</a>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ServiceTest.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ServiceTest.page
deleted file mode 100644
index bec4b6f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ServiceTest.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.ServiceTestPage">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">ServiceTest Page</static-binding>
-  </component>
-
-  <component id="link" type="ExternalLink">
-    <static-binding name="page">ServiceTest</static-binding>
-  	<binding name="parameters" expression="serviceParameters"/>
-  </component>
-  
-</page-specification>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ServiceTestPage.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ServiceTestPage.java
deleted file mode 100644
index c2b4d35..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ServiceTestPage.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.junit.mock.lib.Dumper;
-
-public abstract class ServiceTestPage extends BasePage implements IExternalPage
-{
-    public Object[] getServiceParameters()
-    {
-        return new Object[]
-        { "Sopranos", new Integer(20705), new Double(22. / 7.) };
-    }
-
-    public void activateExternalPage(Object[] parameters, IRequestCycle cycle)
-    {
-        Dumper dumper = (Dumper) cycle.getPage("lib:Dumper");
-
-        dumper.setObjects(parameters);
-
-        cycle.activate(dumper);
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Stale.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Stale.html
deleted file mode 100644
index 4f80608..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Stale.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<p>
-A <a jwcid="directLink">DirectLink</a> that will trigger StaleSessionException.
-
-<p>
-A
-<form jwcid="form">
-<input type="submit" value="Form"/>
-</form>
-that will trigger a StaleSessionException.
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Stale.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Stale.java
deleted file mode 100644
index ec82dd1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Stale.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Used to test {@link org.apache.tapestry.StaleSessionException}.
- * 
- * @author Howard Lewis Ship
- * @since 2.3
- */
-
-public abstract class Stale extends BasePage
-{
-    public void noop(IRequestCycle cycle)
-    {
-        throw new ApplicationRuntimeException("noop listener should not be reachable.");
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Stale.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Stale.page
deleted file mode 100644
index a4e1bef..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Stale.page
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Stale">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">StaleSession Test Page</static-binding>
-  </component>
-
-  <component id="directLink" type="DirectLink">
-  	<binding name="listener" expression="listeners.noop"/>
-  </component>
-  
-  <component id="form" type="Form">
-  	<binding name="listener" expression="listeners.noop"/>
-  </component>
-  
-</page-specification>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Strings.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Strings.html
deleted file mode 100644
index 242daa8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Strings.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Normal: <span key="message"/>
-
-<p>
-
-Raw: <span key="message" raw="true"/>
-</p>
-
-<p>
-
-Style: <span key="message" raw="true" class="custom"/>
-</p>
-
-<p>
-
-Whitespace: <span key="hello-key">Hello</span> <span key="world-key">World</span>
-</p>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Strings.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Strings.page
deleted file mode 100644
index e24b8f8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Strings.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification>
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Insert Localized Key Test Page</static-binding>
-  </component>
-
-</page-specification>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Strings.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Strings.properties
deleted file mode 100644
index a1d8f7f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Strings.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-message=<b>Important Message</b>
-hello-key=Hello
-world-key=World
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Styled.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Styled.html
deleted file mode 100644
index a51d0b8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Styled.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<link jwcid="@Relation" href="dummy.css"/>
-Empty page...
-<style jwcid="@Style" media="all">
-a {background:yellow;}
-</style>
-<style jwcid="@Style" media="unknown"/>   
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Styled.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Styled.page
deleted file mode 100644
index f71535b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/Styled.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Home">
-    
-  <component id="border" type="lib:Border">
-  	<message-binding name="title" key="page.title"/>
-  </component>  
-  
-</page-specification>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/User.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/User.java
deleted file mode 100644
index ab08509..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/User.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-/**
- * Contains information about a user.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class User
-{
-    private String _firstName;
-
-    private String _lastName;
-
-    private boolean _male = true;
-
-    private String _ageRange = AgeRange.ADULT;
-
-    public String getAgeRange()
-    {
-        return _ageRange;
-    }
-
-    public String getFirstName()
-    {
-        return _firstName;
-    }
-
-    public String getLastName()
-    {
-        return _lastName;
-    }
-
-    public boolean isMale()
-    {
-        return _male;
-    }
-
-    public void setAgeRange(String ageRange)
-    {
-        _ageRange = ageRange;
-    }
-
-    public void setFirstName(String firstName)
-    {
-        _firstName = firstName;
-    }
-
-    public void setLastName(String lastName)
-    {
-        _lastName = lastName;
-    }
-
-    public void setMale(boolean male)
-    {
-        _male = male;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.java
deleted file mode 100644
index d37be61..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Page for testing a validator, with client side validation, but no Body.
- * 
- * @author Howard Lewis Ship
- * @since 2.3
- */
-
-public abstract class ValidFieldNoBody extends BasePage
-{
-    private int _intValue;
-
-    protected void initialize()
-    {
-        _intValue = 10;
-    }
-
-    public int getIntValue()
-    {
-        return _intValue;
-    }
-
-    public void setIntValue(int intValue)
-    {
-        _intValue = intValue;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.html
deleted file mode 100644
index 3a5b0d8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<span jwcid="$content$">
-<span jwcid="border">
-
-Application Name: <span jwcid="insertApplicationName" value="ognl:engine.specification.name"/>
-
-<p>
-
-Second example: <span jwcid="insertAppName2" class="ognl:&quot;styleClass&quot;" value="ognl:engine.specification.name"/>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.page
deleted file mode 100644
index cc30480..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">TemplateExpr</static-binding>
-  </component>
-  
-  <component id="insertApplicationName" type="Insert"/>
-   
-  <component id="insertAppName2" type="Insert"/>
-   
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.html
deleted file mode 100644
index 3ff0c46..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Application Name: <span jwcid="insertApplicationName" value="ognl:engine.specification.name"/>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.page
deleted file mode 100644
index eaed6cd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification>
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">TemplateExprConflict</static-binding>
-  </component>
-  
-  <component id="insertApplicationName" type="Insert">
-  	<!-- Conflict: specified here and as an expression in the template -->
-  	<static-binding name="value">Application Title</static-binding>
-  </component>
-   
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.html
deleted file mode 100644
index 8d36152..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<span jwcid="block" informal="ognl:engine.visit != null">
-This will never be displayed.
-</span>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.page
deleted file mode 100644
index 7d559c7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification>
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">TemplateExprInformal</static-binding>
-  </component>
-  
-   <component id="block" type="Block"/>
-   
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.html
deleted file mode 100644
index 925041e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<a jwcid="link" href="ognl:computedURL">Link</a>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.page
deleted file mode 100644
index 3ea405f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification>
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">TemplateExprReserved</static-binding>
-  </component>
-  
-   <component id="link" type="PageLink">
-	 <static-binding name="page">Home</static-binding>
-   </component>
-   
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/home.png b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/home.png
deleted file mode 100644
index dbedc8e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/home.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/home_fr.png b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/home_fr.png
deleted file mode 100644
index 8cfd14c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/home_fr.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/images/PrivateAsset.gif b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/images/PrivateAsset.gif
deleted file mode 100644
index 01fe4e2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/images/PrivateAsset.gif
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.html
deleted file mode 100644
index b67be54..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="@lib:Border" title="Implicit Components">
-
-Application Name: <span jwcid="@Insert" value="ognl:engine.specification.name"/>
-
-<ul>
-<li jwcid="loop@For"
-	source="ognl:{ &quot;Alpha&quot;, &quot;Beta&quot;, &quot;Gamma&quot; }"
-	element="li">
-	<span jwcid="@Insert" value="ognl:components.loop.value"/>
-</li>
-</ul>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.page
deleted file mode 100644
index 0d4333c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/impl/classpath.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/impl/classpath.properties
deleted file mode 100644
index c59378c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/app/impl/classpath.properties
+++ /dev/null
@@ -1 +0,0 @@
-standard-property=Here!
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c11/Four.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c11/Four.java
deleted file mode 100644
index ce20779..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c11/Four.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c11;
-
-import org.apache.tapestry.IRequestCycle;
-
-public abstract class Four extends SelectPage
-{
-    public void secondFormListener(IRequestCycle cycle)
-    {
-        Result result = (Result) cycle.getPage("Result");
-
-        result.setMessage("Second form triggered.");
-
-        cycle.activate(result);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c11/Result.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c11/Result.java
deleted file mode 100644
index ecfb292..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c11/Result.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c11;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Displays a message summarizing the results identified by the page.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class Result extends BasePage
-{
-    public abstract String getMessage();
-
-    public abstract void setMessage(String message);
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c11/SelectPage.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c11/SelectPage.java
deleted file mode 100644
index dae51f2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c11/SelectPage.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c11;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Used to test the Select and Option elements.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class SelectPage extends BasePage
-{
-    public abstract boolean isAnimal();
-
-    public abstract boolean isMineral();
-
-    public abstract boolean isVegetable();
-
-    public abstract void setAnimal(boolean animal);
-
-    public abstract void setMineral(boolean mineral);
-
-    public abstract void setVegetable(boolean vegetable);
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        StringBuffer buffer = new StringBuffer("Selections: ");
-        boolean needComma = false;
-
-        if (isAnimal())
-        {
-            buffer.append("animal");
-            needComma = true;
-        }
-
-        if (isVegetable())
-        {
-            if (needComma)
-                buffer.append(", ");
-
-            buffer.append("vegetable");
-
-            needComma = true;
-        }
-
-        if (isMineral())
-        {
-            if (needComma)
-                buffer.append(", ");
-
-            buffer.append("mineral");
-
-            needComma = true;
-        }
-
-        if (!needComma)
-            buffer.append("none");
-
-        buffer.append(".");
-
-        Result result = (Result) cycle.getPage("Result");
-
-        String message = buffer.toString();
-
-        result.setMessage(message);
-
-        cycle.activate(result);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/Color.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/Color.java
deleted file mode 100644
index 2ea3dfe..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/Color.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c14;
-
-public class Color
-{
-    public static final String RED = "RED";
-
-    public static final String GREEN = "GREEN";
-
-    public static final String BLUE = "BLUE";
-
-    public static final String PUECE = "PUECE";
-
-    public static final String YELLOW = "YELLOW";
-
-    public static final String BLACK = "BLACK";
-
-    public static final String WHITE = "WHITE";
-
-    public static final String[] ALL_COLORS =
-    { RED, GREEN, BLUE, YELLOW, BLACK, WHITE, PUECE };
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ColorStrings.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ColorStrings.properties
deleted file mode 100644
index c68d86a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ColorStrings.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-RED=Red
-GREEN=Green
-BLUE=Blue
-PUECE=Puece
-YELLOW=Yellow
-BLACK=Black
-WHITE=White
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEdit.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEdit.java
deleted file mode 100644
index 889bf3b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEdit.java
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c14;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Page for testing the {@link org.apache.tapestry.form.ListEdit} component.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class ListEdit extends BasePage
-{
-    public abstract Map getColorMap();
-
-    public abstract void setColorMap(Map colorMap);
-
-    public abstract String getColorKey();
-
-    private IPropertySelectionModel _colorModel;
-
-    public IPropertySelectionModel getColorModel()
-    {
-        if (_colorModel == null)
-            _colorModel = buildColorModel();
-
-        return _colorModel;
-    }
-
-    private IPropertySelectionModel buildColorModel()
-    {
-        // ResourceBundle bundle = ResourceBundle.getBundle(
-        // Color.class.getName() + "Strings",
-        // getLocale());
-
-        return new StringPropertySelectionModel(Color.ALL_COLORS);
-    }
-
-    public List getSortedColorKeys()
-    {
-        Map map = getColorMap();
-        List result = new ArrayList(map.keySet());
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    protected void finishLoad()
-    {
-        Map colorMap = new HashMap();
-
-        colorMap.put("Food", Color.RED);
-        colorMap.put("Clothing", Color.BLACK);
-        colorMap.put("Eye Color", Color.BLUE);
-
-        setColorMap(colorMap);
-    }
-
-    /**
-     * Had to implement these cause I couldn't remember the OGNL syntax for accessing a Map key.
-     */
-
-    public void setColor(String color)
-    {
-        getColorMap().put(getColorKey(), color);
-    }
-
-    public String getColor()
-    {
-        return (String) getColorMap().get(getColorKey());
-    }
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        ListEditResults results = (ListEditResults) cycle.getPage("ListEditResults");
-
-        results.setColorMap(getColorMap());
-
-        cycle.activate(results);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEditArray.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEditArray.java
deleted file mode 100644
index d1288c5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEditArray.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c14;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Test {@link org.apache.tapestry.form.ListEdit}with an object array as a source.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class ListEditArray extends BasePage
-{
-    public String[] getItems()
-    {
-        return new String[]
-        { "Fred", "Dino", "Wilma" };
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEditForm.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEditForm.java
deleted file mode 100644
index 32dd7f5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEditForm.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c14;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-
-/**
- * Tests the use of the listener and index parameters of {@link org.apache.tapestry.form.ListEdit},
- * as well as using an array (not a list) as a ListEdit source.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class ListEditForm extends BaseComponent implements PageDetachListener
-{
-    private static int _syncCount;
-
-    public int getSyncCount()
-    {
-        return _syncCount;
-    }
-
-    public void synchronizeItem(IRequestCycle cycle)
-    {
-        _syncCount++;
-    }
-
-    public void pageDetached(PageEvent event)
-    {
-        _syncCount = 0;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEditResults.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEditResults.java
deleted file mode 100644
index e6e43bf..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c14/ListEditResults.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c14;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Shows user's selected colors in a new page. A bit of duplication with ListEdit, but such is
- * testing.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-public abstract class ListEditResults extends BasePage
-{
-    public abstract Map getColorMap();
-
-    public abstract void setColorMap(Map colorMap);
-
-    public abstract String getColorKey();
-
-    private ResourceBundle _colorStrings;
-
-    public List getSortedColorKeys()
-    {
-        Map map = getColorMap();
-        List result = new ArrayList(map.keySet());
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    public String getColorName()
-    {
-        String key = getColorKey();
-        String color = (String) getColorMap().get(key);
-
-        return _colorStrings.getString(color);
-    }
-
-    protected void finishLoad()
-    {
-        _colorStrings = ResourceBundle.getBundle(Color.class.getName() + "Strings", getLocale());
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/Home.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/Home.page
deleted file mode 100644
index adc3435..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/Home.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification>
-	  
-  <private-asset name="logo" resource-path="logo.png"/>
-
-</page-specification>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/app.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/app.application
deleted file mode 100644
index b9217f3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/app.application
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application/>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/globe.jpg b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/globe.jpg
deleted file mode 100644
index b4928f8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/globe.jpg
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/logo.png b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/logo.png
deleted file mode 100644
index a986059..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c16/logo.png
+++ /dev/null
Binary files differ
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c18/Home.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c18/Home.java
deleted file mode 100644
index ff98314..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c18/Home.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c18;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Page used to test the Radio and RadioGroup components.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class Home extends BasePage
-{
-    public abstract int getSize();
-
-    public abstract void setGroupDisabled(boolean groupEnabled);
-
-    public void disableGroup(IRequestCycle cycle)
-    {
-        setGroupDisabled(true);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c18/Language.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c18/Language.java
deleted file mode 100644
index a8ee936..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c18/Language.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c18;
-
-/**
- * Identifies different computer languages.
- * 
- * @author Howard Lewis Ship
- */
-public class Language
-{
-    public static final Language JAVA = new Language("JAVA");
-
-    public static final Language C_SHARP = new Language("C_SHARP");
-
-    public static final Language PYTHON = new Language("PYTHON");
-
-    private final String _name;
-
-    private Language(String name)
-    {
-        _name = name;
-    }
-
-    public String toString()
-    {
-        return "Language[" + _name + "]";
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c19/Home.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c19/Home.java
deleted file mode 100644
index f7158f7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c19/Home.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c19;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.request.IUploadFile;
-
-/**
- * Used in tests of upload and the {@link org.apache.tapestry.form.Upload}component.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class Home extends BasePage
-{
-    public abstract IUploadFile getUploadFile();
-
-    public abstract void setUploadDisabled(boolean uploadDisabled);
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        IUploadFile file = getUploadFile();
-
-        if (file == null)
-        {
-            cycle.activate("Three");
-            return;
-        }
-
-        Two page = (Two) cycle.getPage("Two");
-
-        page.setFile(file);
-        cycle.activate(page);
-    }
-
-    public void disableUpload(IRequestCycle cycle)
-    {
-        setUploadDisabled(true);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c19/Two.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c19/Two.java
deleted file mode 100644
index 199e367..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c19/Two.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c19;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.junit.mock.TestMockApplications;
-import org.apache.tapestry.request.IUploadFile;
-
-/**
- * Test page for the {@link org.apache.tapestry.form.Upload}component.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public abstract class Two extends BasePage
-{
-    public abstract IUploadFile getFile();
-
-    public abstract void setFile(IUploadFile file);
-
-    public boolean getUploadMatch()
-    {
-        IUploadFile file = getFile();
-        String path = file.getFilePath();
-
-        InputStream expected = null;
-        InputStream actual = null;
-        
-        String baseDir = TestMockApplications.getBaseDirectory() + "/src/test-data/";
-        
-        try
-        {
-            expected = new FileInputStream(baseDir + path);
-            actual = file.getStream();
-            
-            //this replaced the previous manual compare which didn't work
-            //across different platforms
-            IOUtils.contentEquals(expected, actual);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-        finally
-        {
-            Tapestry.close(expected);
-            Tapestry.close(actual);
-        }
-
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c21/NameMismatchService.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c21/NameMismatchService.java
deleted file mode 100644
index 46a7fc3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c21/NameMismatchService.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c21;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-public class NameMismatchService implements IEngineService
-{
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        return null;
-    }
-
-    public void service(IRequestCycle cycle) throws IOException
-    {
-    }
-
-    public String getName()
-    {
-        return "IncorrectName";
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c21/NullPropertySource.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c21/NullPropertySource.java
deleted file mode 100644
index 6a4b954..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c21/NullPropertySource.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c21;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- * Empty implementation just to exercise some code paths in
- * {@link org.apache.tapestry.engine.AbstractEngine}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class NullPropertySource implements IPropertySource
-{
-
-    public String getPropertyValue(String propertyName)
-    {
-        return null;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c21/PrivateService.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c21/PrivateService.java
deleted file mode 100644
index 17a84d9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c21/PrivateService.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c21;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-/**
- * Test case for service which can't be instantiated.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-public class PrivateService implements IEngineService
-{
-    // Can't be instantiated!
-    private PrivateService()
-    {
-    }
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        return null;
-    }
-
-    public void service(IRequestCycle cycle) throws IOException
-    {
-    }
-
-    public String getName()
-    {
-        return null;
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c25/Four.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c25/Four.java
deleted file mode 100644
index 2ca740f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c25/Four.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c25;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * @author mindbridge
- */
-public abstract class Four extends BasePage
-{
-
-    public void directListener(IRequestCycle cycle)
-    {
-        cycle.activate("Five");
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c25/Home.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c25/Home.java
deleted file mode 100644
index 1df1ec4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c25/Home.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c25;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * @author mindbridge
- */
-public abstract class Home extends BasePage
-{
-
-    public void directListener(IRequestCycle cycle)
-    {
-        cycle.activate("Two");
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c25/RedirectingComponent.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c25/RedirectingComponent.java
deleted file mode 100644
index cb5b670..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c25/RedirectingComponent.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c25;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageValidateListener;
-
-/**
- * @author teo
- */
-public abstract class RedirectingComponent extends BaseComponent implements PageValidateListener
-{
-    public abstract String getTargetPage();
-
-    /**
-     * @see org.apache.tapestry.event.PageValidateListener#pageValidate(org.apache.tapestry.event.PageEvent)
-     */
-    public void pageValidate(PageEvent event)
-    {
-        String pageName = getTargetPage();
-
-        throw new PageRedirectException(pageName);
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c26/Global.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c26/Global.java
deleted file mode 100644
index c243bf8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c26/Global.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c26;
-
-import java.io.Serializable;
-
-public class Global implements Serializable
-{
-    private static final long serialVersionUID = 7284303490795022189L;
-    
-	private String _name = "Osamu Tezuka";
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c27/Good.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c27/Good.java
deleted file mode 100644
index 9083eb8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c27/Good.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c27;
-
-import java.util.Locale;
-
-import org.apache.tapestry.BaseComponent;
-
-public abstract class Good extends BaseComponent
-{
-    public String getDefaultPrefix()
-    {
-        return "Default";
-    }
-
-    public Locale getDefaultLocale()
-    {
-        return Locale.US;
-    }
-
-    public abstract boolean isBooleanValue1();
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c28/Home.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c28/Home.java
deleted file mode 100644
index 26e2099..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c28/Home.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c28;
-
-import java.util.Locale;
-import java.util.StringTokenizer;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-public abstract class Home extends BasePage
-{
-    public void changeLocale(IRequestCycle cycle, String pageName, String localeName)
-    {
-        String[] localeParts = new String[]
-        { "", "", "" };
-        StringTokenizer tokenizer = new StringTokenizer(localeName, "_");
-        for (int i = 0; i < 3 && tokenizer.hasMoreTokens(); i++)
-        {
-            localeParts[i] = tokenizer.nextToken();
-        }
-
-        Locale locale = new Locale(localeParts[0], localeParts[1], localeParts[2]);
-        cycle.getEngine().setLocale(locale);
-        cycle.activate(pageName);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c3/C3Engine.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c3/C3Engine.java
deleted file mode 100644
index 1891e8c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c3/C3Engine.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c3;
-
-import org.apache.tapestry.engine.BaseEngine;
-
-/**
- * Used to demonstrate that specific subclass of BaseEngine can be specified.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class C3Engine extends BaseEngine
-{
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c31/Home.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c31/Home.java
deleted file mode 100644
index 6698c5b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c31/Home.java
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c31;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Tests for the Hidden component.
- * 
- * @author Tsvetelin Saykov
- * @since 3.0
- */
-
-public abstract class Home extends BasePage
-{
-    public abstract String getValue();
-
-    public abstract void setValue(String value);
-
-    public abstract String getHiddenID();
-
-    public abstract void setHiddenID(String hiddenID);
-
-    public abstract String getValueWithID();
-
-    public abstract void setValueWithID(String valueWithID);
-
-    public abstract String getValueWithEncoding();
-
-    public abstract void setValueWithEncoding(String valueWithID);
-
-    public abstract Boolean getBooleanValue();
-
-    public abstract void setBooleanValue(Boolean value);
-
-    protected void finishLoad()
-    {
-        setValue("1234567890");
-        setHiddenID("0987654321");
-        setValueWithID("1234567890-with id");
-        setValueWithEncoding("1234567890-with encoding");
-        setBooleanValue(Boolean.FALSE);
-    }
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        Two page = (Two) cycle.getPage("Two");
-
-        page.setValue(getValue());
-        page.setHiddenID(getHiddenID());
-        page.setValueWithEncoding(getValueWithEncoding());
-
-        cycle.activate(page);
-    }
-
-    public void hiddenListener(IRequestCycle cycle)
-    {
-        //just a test for listener
-    }
-
-    public boolean getEncode()
-    {
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c31/Two.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c31/Two.java
deleted file mode 100644
index 5704f21..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c31/Two.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c31;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Part of tests for the Hidden component.
- * 
- * @author Tsvetelin Saykov
- * @since 3.0
- */
-public abstract class Two extends BasePage
-{
-    public abstract String getValue();
-
-    public abstract void setValue(String normal);
-
-    public abstract String getHiddenID();
-
-    public abstract void setHiddenID(String hidden);
-
-    public abstract String getValueWithEncoding();
-
-    public abstract void setValueWithEncoding(String valueWithID);
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c34/Home.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c34/Home.java
deleted file mode 100644
index 0440bac..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c34/Home.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c34;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Used to test the For and If components.
- * 
- * @author Mindbridge
- */
-public abstract class Home extends BasePage
-{
-	public abstract List getRewindedIndexes();
-	public abstract List getRewindedValues();
-	
-	public void setIndex(int index) {
-		if (getRequestCycle().isRewinding())
-			getRewindedIndexes().add(new Integer(index));
-	}
-	
-	public void setValue(Object value) {
-		if (getRequestCycle().isRewinding())
-			getRewindedValues().add(value);
-	}
-	
-	public List getItems() {
-		List items = new ArrayList();
-		items.add(new Item("id1", "value1"));
-		items.add(new Item("id2", "value2"));
-		return items;
-	}
-	
-	public List getAllItems() {
-		List items = new ArrayList();
-		items.add(new Item("id1", "value1"));
-		items.add(new Item("id2", "value2"));
-		items.add(new Item("id3", "value3"));
-		items.add(new Item("id4", "value4"));
-		items.add(new Item("id5", "value5"));
-		return items;
-	}
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c34/Item.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c34/Item.java
deleted file mode 100644
index 104bb28..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c34/Item.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.junit.mock.c34;

-

-import java.io.Serializable;

-

-/**

- * A serializable Item with one volatile field that is not serialized.

- * 

- * Used to test whether the value string representation is matched,

- * or whether it is unsqueezed instead.

- * 

- * @author Mindbridge

- */

-public class Item implements Serializable

-{

-	private static final long serialVersionUID = 1L;

-	

-	private transient String _id = "unknown";

-	private String _value = "unknown";

-

-	public Item(String id, String value) {

-		_id = id;

-		_value = value;

-	}

-

-	public String getId() {

-		return _id;

-	}

-

-	public String getValue() {

-		return _value;

-	}

-

-	public String toString() {

-		return "Item[" + _id + " : " + _value + "]";

-	}

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c4/C4Engine.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c4/C4Engine.java
deleted file mode 100644
index e06e06d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/c4/C4Engine.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c4;
-
-import org.apache.tapestry.engine.BaseEngine;
-
-/**
- * Used to demonstrate that specific subclass of BaseEngine can be specified.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class C4Engine extends BaseEngine
-{
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/Fail.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/Fail.application
deleted file mode 100644
index d88f72b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/Fail.application
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="JUnit Mock Application -- Failure Testing"
-	engine-class="org.apache.tapestry.engine.BaseEngine">
-		
-	<page name="MissingClass" specification-path="/org/apache/tapestry/junit/mock/fail/MissingClass.page"/>
-	<page name="NotPage" specification-path="/org/apache/tapestry/junit/mock/fail/NotPage.page"/>
-	<page name="NotComponent"
-		specification-path="/org/apache/tapestry/junit/mock/fail/NotComponent.page"/>
-		
-	<component-type type="InvalidComponent" specification-path="/org/apache/tapestry/junit/mock/fail/InvalidComponent.jwc"/>
-		
-</application>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/InvalidComponent.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/InvalidComponent.jwc
deleted file mode 100644
index 58bd64a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/InvalidComponent.jwc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="java.lang.Object"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/MissingClass.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/MissingClass.page
deleted file mode 100644
index 432d2d0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/MissingClass.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.fail.MissingClass"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/NotComponent.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/NotComponent.html
deleted file mode 100644
index 26caf66..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/NotComponent.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-<span jwcid="@InvalidComponent"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/NotComponent.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/NotComponent.page
deleted file mode 100644
index 44919ee..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/NotComponent.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/NotPage.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/NotPage.page
deleted file mode 100644
index e2e5348..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/fail/NotPage.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="java.lang.Object"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Border.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Border.html
deleted file mode 100644
index ac5197b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Border.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<span jwcid="$content$">
-<span jwcid="shell">
-<body jwcid="body">
-
-<span jwcid="renderBody">Page specific content.</span>
-
-</body>
-</span> <!-- shell -->
-</span> <!-- $content$ -->
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Border.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Border.jwc
deleted file mode 100644
index 91f86c5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Border.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification allow-informal-parameters="no">
-	
-  <parameter name="title" required="yes"/>
-	
-  <component id="shell" type="Shell">
-    <binding name="title" value="title"/>
-    <binding name="stylesheet" value="asset:style"/>
-  </component>
-  
-  <component id="body" type="Body"/>
-  
-  <component id="renderBody" type="RenderBody"/>
-  
-  <asset name="style" path="/org/apache/tapestry/junit/mock/lib/style.css"/>
-  
-</component-specification>	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Dumper.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Dumper.html
deleted file mode 100644
index 979dd7e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Dumper.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<span jwcid="$content$">
-<span jwcid="border">
-
-<table>
-<tr jwcid="foreach">
-<td><span jwcid="insertIndex">0</span></td>
-<td><span jwcid="insertClass">java.lang.Double</span></td>
-<td><span jwcid="insertValue">3.14</span></td>
-</tr>
-</table>
-
-<a jwcid="refresh">refresh</a>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Dumper.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Dumper.java
deleted file mode 100644
index 84f43b7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Dumper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.lib;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Dumps out an array of objects.
- * 
- * @author Howard Lewis Ship
- */
-
-public abstract class Dumper extends BasePage
-{
-    public abstract Object[] getObjects();
-
-    public abstract void setObjects(Object[] objects);
-
-    public abstract Object getCurrentObject();
-
-    /**
-     * Returns the class name of the current object. OGNL has trouble getting properties from Class
-     * objects.
-     */
-
-    public String getClassName()
-    {
-        Object current = getCurrentObject();
-
-        if (current == null)
-            return "<Null>";
-
-        return current.getClass().getName();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Dumper.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Dumper.page
deleted file mode 100644
index a254a99..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Dumper.page
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<page-specification
-	class="org.apache.tapestry.junit.mock.lib.Dumper">
-
-    <property name="objects" persist="session"/>
-    
-	<component id="border" type="Border">
-        <binding name="title" value="literal:Dumper"/>
-	</component>
-	
-	<component id="foreach" type="For">
-		<binding name="source" value="objects"/>
-		<binding name="value" value="currentObject"/>
-    <binding name="element" value="literal:tr"/>
-	</component>
-	
-	<component id="insertIndex" type="Insert">
-		<binding name="value" value="components.foreach.index"/>
-	</component>
-	
-	<component id="insertClass" type="Insert">
-		<binding name="value" value="className"/>
-	</component>
-	
-	<component id="insertValue" type="Insert">
-		<binding name="value" value="currentObject"/>
-	</component>
-	
-	<component id="refresh" type="PageLink">
-		<binding name="page" value="literal:Dumper"/>
-		<binding name="namespace" value="namespace"/>
-	</component>
-	
-</page-specification>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/MockLibrary.library b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/MockLibrary.library
deleted file mode 100644
index acafd2b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/MockLibrary.library
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<library-specification>
-	
-	<page name="Dumper" specification-path="Dumper.page"/>
-	
-	<page name="Properties" specification-path="Properties.page"/>
-
-	<component-type type="Border" specification-path="Border.jwc"/>
-	
-	<component-type type="ShowError" specification-path="ShowError.jwc"/>
-		
-</library-specification>	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Properties.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Properties.html
deleted file mode 100644
index 22159cb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Properties.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
-<span jwcid="$content$">
-
-Page Name: [<span jwcid="@Insert" value="ognl:pageName">lib:Properties</span>]
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Properties.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Properties.page
deleted file mode 100644
index 0d4333c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/Properties.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/ShowError.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/ShowError.html
deleted file mode 100644
index 6b55c55..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/ShowError.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="ifError">
-
-<span class="error">
-<span jwcid="insertError"Error message goes here.</span>
-</span>
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/ShowError.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/ShowError.jwc
deleted file mode 100644
index ef4d499..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/ShowError.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification 
-  class="org.apache.tapestry.BaseComponent"
-  allow-informal-parameters="no" allow-body="no">
-  
-  <parameter name="delegate" type="org.apache.tapestry.valid.IValidationDelegate" 
-  	required="yes"/>
-  
-  <component id="ifError" type="Conditional">
-    <binding name="condition" expression="bindings.delegate.object.hasErrors"/>
-  </component>
-  
-  <component id="insertError"  type="Delegator">
-     <binding name="delegate" expression="bindings.delegate.object.firstError"/>
-  </component>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/style.css b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/style.css
deleted file mode 100644
index 23bbcc6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/lib/style.css
+++ /dev/null
@@ -1 +0,0 @@
-/*  $Id$ */
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Home.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Home.html
deleted file mode 100644
index fe562cb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Home.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<span jwcid="shell">
-
-<body jwcid="body">
-
-The start of the JUnit test suite: <span jwcid="insertApplicationName">Application Name</span>.
-
-<br>
-
-PageLink: <a jwcid="link">to page Two</a>
-
-</body>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Home.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Home.page
deleted file mode 100644
index c6a50ae..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Home.page
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-	
-	<component id="shell" type="Shell">
-		<message-binding name="title" key="title"/>
-	</component>
-	
-	<component id="body" type="Body"/>
-	
-	<component id="insertApplicationName" type="Insert">
-		<binding name="value" expression="engine.specification.name"/>
-	</component>
-	
-	<component id="link" type="PageLink">
-		<static-binding name="page">Two</static-binding>
-	</component>
-	
-</page-specification>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Home.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Home.properties
deleted file mode 100644
index 14bd162..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Home.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-title=JUnit Simple Home Page
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Simple.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Simple.application
deleted file mode 100644
index d9c27a2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Simple.application
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="JUnit Simple Application">
-	
-	<page name="Home" specification-path="/org/apache/tapestry/junit/mock/simple/Home.page"/>
-	<page name="Two" specification-path="/org/apache/tapestry/junit/mock/simple/Two.page"/>
-	
-</application>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Two.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Two.html
deleted file mode 100644
index 9b5c17e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Two.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<span jwcid="shell">
-
-<body jwcid="body">
-
-<span jwcid="ifMessage">
-Note: <span jwcid="insertMessage"/>
-</span>
-
-<p>This page contains a DirectLink: <a jwcid="link">click it</a>.
-
-<p>And a ServiceLink to <a jwcid="@ServiceLink" service="reset">reset caching</a>.
-
-</body>
-
-</span>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Two.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Two.java
deleted file mode 100644
index 87b6391..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Two.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.simple;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Part of the test suite.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public abstract class Two extends BasePage
-{
-    private String _message;
-
-    public void detach()
-    {
-        _message = null;
-
-        super.detach();
-    }
-
-    public String getMessage()
-    {
-        return _message;
-    }
-
-    public void setMessage(String message)
-    {
-        _message = message;
-    }
-
-    public void go(IRequestCycle cycle)
-    {
-        setMessage("You clicked the link!");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Two.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Two.page
deleted file mode 100644
index d0178bf..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/simple/Two.page
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.simple.Two">
-	
-	<component id="shell" type="Shell">
-		<static-binding name="title" value="Page Two"/>
-		<static-binding name="doctype">
-			math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd"
-		</static-binding>
-	</component>
-	
-	<component id="body" type="Body"/>
-	
-	<component id="ifMessage" type="Conditional">
-		<binding name="condition" expression="message"/>
-	</component>
-	
-	<component id="insertMessage" type="Insert">
-		<binding name="value" expression="message"/>
-	</component>
-	
-	<component id="link" type="DirectLink">
-		<binding name="listener" expression="listeners.go"/>
-	</component>
-
-	
-</page-specification>	
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/ContentType.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/ContentType.page
deleted file mode 100644
index 8325ce2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/ContentType.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/ContentType.wml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/ContentType.wml
deleted file mode 100644
index 9f18298..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/ContentType.wml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN" "http://www.wapforum.org/DTD/wml12.dtd"><wml><card></card></wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Home.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Home.java
deleted file mode 100644
index 21f851f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Home.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.wml.Deck;
-
-/**
- * Used to test {@link org.apache.tapestry.wml}components.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Home extends Deck
-{
-    public static final IPropertySelectionModel MODEL = new StringPropertySelectionModel(
-            new String[]
-            { "option_one", "option_two", "option_three" });
-
-    public void submit(IRequestCycle cycle)
-    {
-        Result deck = (Result) cycle.getPage("Result");
-        deck.setU(getU());
-        deck.setL(getL());
-        cycle.activate(deck);
-    }
-
-    public abstract String getU();
-
-    public abstract String getL();
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Home.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Home.page
deleted file mode 100644
index 12d19f7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Home.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.Home">
-
-    <context-asset name="image" path="/images/image.wbmp"/>
-
-    <property-specification name="u" type="java.lang.String" persistent="yes" initial-value='"newbie"'/>
-    <property-specification name="l" type="java.lang.String" persistent="yes" initial-value='"option_one"'/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Home.wml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Home.wml
deleted file mode 100644
index f1f13dc..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Home.wml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>

-<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-

-    <template>

-        <do jwcid="@wml:Do" type="prev" label="Prev">

-            <prev/>

-        </do>

-    </template>

-

-    <card jwcid="@wml:Card" id="logo" ontimer="#main">

-        <timer jwcid="@wml:Timer" name="timer" value="20"/>

-        <p align="center">

-            <br/>

-            <img jwcid="@wml:Image" image="ognl:assets.image" alt="Image" align="middle"/>

-        </p>

-    </card>

-

-    <card jwcid="@wml:Card" id="main">

-        <onevent jwcid="@wml:OnEvent" type="onenterforward">

-            <refresh>

-                <setvar jwcid="@wml:Setvar" name="u" value="newbie"/>

-                <setvar jwcid="@wml:Setvar" name="l" value="ognl:null"/>

-            </refresh>

-        </onevent>

-        <p>

-            <input jwcid="uInput@wml:Input" name="username" value="ognl:u" emptyok="ognl:true" tabindex="ognl:1" maxlength="ognl:32" size="ognl:8" format='ognl:"*a"' title='ognl:"user"' />

-            <b jwcid="select@wml:PropertySelection" name="l" model="ognl:@org.apache.tapestry.junit.mock.wml.Home@MODEL"/>

-            <do type="options" label="Home">

-                <go jwcid="@ServiceLink" service="ognl:@org.apache.tapestry.Tapestry@HOME_SERVICE" renderer="ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE" href=""/>

-            </do>

-            <anchor title="Start">Start

-                <go jwcid="go@wml:Go" stateful="ognl:false" listener="listener:submit" >

-                    <postfield jwcid="u@wml:Postfield" name="ognl:components.uInput.name" value="ognl:u"/>

-                    <postfield jwcid="l@wml:SelectionField" name="ognl:components.select.name" value="ognl:l"  model="ognl:components.select.model"/>

-                </go>

-            </anchor>

-        </p>

-    </card>

-    

-    <card jwcid="@Conditional" element="card" id="anotherCard" condition="ognl:true">

-    </card>

-

-</wml>

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Input.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Input.page
deleted file mode 100644
index 8325ce2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Input.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Input.wml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Input.wml
deleted file mode 100644
index cc24d04..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Input.wml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>

-<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-    <card>

-        <p>

-            <input jwcid="@wml:Input" name="fname" value="Ronnie" title="FName"/>

-            <input jwcid="@wml:Input" name="lname" title='ognl: "LName"' format="ognl:null" emptyok="ognl:false" value="ognl:null"/>

-        </p>

-    </card>

-

-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Mock.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Mock.application
deleted file mode 100644
index 1b676e4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Mock.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<application name="JUnit Mock WML Application">
-	
-    <meta key="org.apache.tapestry.template-extension" value="wml"/>
-
-    <library id="wml" specification-path="/org/apache/tapestry/wml/WML.library"/>
-
-</application>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedCard.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedCard.page
deleted file mode 100644
index 8325ce2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedCard.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedCard.wml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedCard.wml
deleted file mode 100644
index c8be2b5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedCard.wml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>

-<!-- $Id: NestedCard.wml,v 1.2 2003/03/25 08:05:15 dsolis Exp $ -->

-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-    <card jwcid="@wml:Card" id="Card">

-        <card jwcid="nestedCard@wml:Card" id="NestedCard">

-        </card>

-    </card>

-

-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedSelect.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedSelect.page
deleted file mode 100644
index 8325ce2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedSelect.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedSelect.wml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedSelect.wml
deleted file mode 100644
index 13820be..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NestedSelect.wml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>

-<!-- $Id: NestedSelect.wml,v 1.2 2003/03/25 08:05:15 dsolis Exp $ -->

-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-    <card>

-        <p>

-            <select jwcid="@wml:Select" name="a">

-                <select jwcid="nestedSelect@wml:Select" name="b">

-                </select>

-            </select>

-        </p>

-    </card>

-

-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NoGo.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NoGo.java
deleted file mode 100644
index a0d99c4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NoGo.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.tapestry.wml.Deck;
-
-/**
- * Used to test {@link org.apache.tapestry.wml.Postfield}components.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class NoGo extends Deck
-{
-    public String getValue()
-    {
-        return "";
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NoGo.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NoGo.page
deleted file mode 100644
index f4e5135..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NoGo.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.NoGo">
-
-    <property-specification name="u" type="java.lang.String" persistent="no"/>
-    <property-specification name="l" type="java.lang.String" persistent="no"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NoGo.wml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NoGo.wml
deleted file mode 100644
index fcf22c4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/NoGo.wml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>

-<!-- $Id: NoGo.wml,v 1.2 2003/03/25 08:05:15 dsolis Exp $ -->

-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-    <card>

-        <p>

-            <postfield jwcid="orphan@wml:Postfield" value="ognl:value" name="a"/>

-        </p>

-    </card>

-

-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Result.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Result.java
deleted file mode 100644
index 27299a6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Result.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.tapestry.wml.Deck;
-
-/**
- * Used to test {@link org.apache.tapestry.wml}components.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Result extends Deck
-{
-    public String getTitle()
-    {
-        return "Result";
-    }
-
-    public abstract void setU(String value);
-
-    public abstract void setL(String value);
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Result.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Result.page
deleted file mode 100644
index e70c05a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Result.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.Result">
-
-    <property-specification name="u" type="java.lang.String" persistent="no"/>
-    <property-specification name="l" type="java.lang.String" persistent="no"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Result.wml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Result.wml
deleted file mode 100644
index 9803e8b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Result.wml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>

-<!-- $Id: Result.wml,v 1.2 2003/03/25 08:05:15 dsolis Exp $ -->

-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-    <card jwcid="@wml:Card" id="Result" title="ognl:title">

-        <p>

-            <strong><b jwcid="@Insert" value="ognl:u">Result 1</b></strong>

-            <strong><b jwcid="@Insert" value="ognl:l">Result 2</b></strong>

-        </p>

-    </card>

-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Rewind.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Rewind.java
deleted file mode 100644
index 4e2110f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Rewind.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.wml.Deck;
-
-/**
- * Used to test {@link org.apache.tapestry.wml.Postfield}component.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Rewind extends Deck
-{
-    public void submit(IRequestCycle cycle)
-    {
-        Result deck = (Result) cycle.getPage("Result");
-        String v = getV();
-        deck.setU(v);
-        deck.setL(v);
-        cycle.activate(deck);
-    }
-
-    public abstract String getV();
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Rewind.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Rewind.page
deleted file mode 100644
index 7aeaca4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Rewind.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.Rewind">
-
-    <property-specification name="u" type="java.lang.String" persistent="yes"/>
-    <property-specification name="v" type="java.lang.String" persistent="yes"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Rewind.wml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Rewind.wml
deleted file mode 100644
index 442dd4c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Rewind.wml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>

-<!-- $Id: Rewind.wml,v 1.2 2003/03/25 08:05:15 dsolis Exp $ -->

-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-    <card id="Postfield">

-        <onevent type="onenterforward">

-            <refresh>

-                <setvar jwcid="@wml:Setvar" name="u" value="UUU"/>

-                <setvar jwcid="@wml:Setvar" name="v" value="VVV"/>

-            </refresh>

-        </onevent>

-        <p>

-            <go jwcid="g@wml:Go" listener="listener:submit" href="">

-                <postfield jwcid="u@wml:Postfield" value="ognl:u" name="u"/>

-            </go>

-            <go jwcid="h@wml:Go" listener="listener:submit" href="">

-                <postfield jwcid="v@wml:Postfield" value="ognl:v" name="v"/>

-            </go>

-        </p>

-    </card>

-

-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Select.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Select.java
deleted file mode 100644
index 028d480..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Select.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.wml.Deck;
-
-/**
- * Used to test {@link org.apache.tapestry.wml}components.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Select extends Deck
-{
-    public static final String MALE_OPTION = "Male";
-
-    public static final String FEMALE_OPTION = "Female";
-
-    public void submit(IRequestCycle cycle)
-    {
-        Result deck = (Result) cycle.getPage("Result");
-        deck.setU(getSex() + " " + getIncome());
-        deck.setL(getHobbies());
-        cycle.activate(deck);
-    }
-
-    public abstract String getSex();
-
-    public abstract String getIncome();
-
-    public abstract String getHobbies();
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Select.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Select.page
deleted file mode 100644
index 78bcfd7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Select.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.Select">
-
-    <property-specification name="sex" type="java.lang.String" persistent="yes"/>
-    <property-specification name="income" type="java.lang.String" persistent="yes"/>
-    <property-specification name="hobbies" type="java.lang.String" persistent="yes"/>
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Select.wml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Select.wml
deleted file mode 100644
index b163fc5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Select.wml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>

-<!-- $Id: Select.wml,v 1.2 2003/03/25 08:05:15 dsolis Exp $ -->

-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-

-<wml>

-

-    <card jwcid="@wml:Card" id="Select">

-        <p>

-            Please tell us about:

-            <select jwcid="select@wml:Select" value="ognl:0" title="main">

-                <p jwcid="@wml:GenericLink" anchor="sexcard" renderer="ognl:@org.apache.tapestry.wml.OptionRenderer@SHARED_INSTANCE" href="" value="0"> Your sex: $sex </p>

-                <p jwcid="@wml:GenericLink" anchor="incomecard" renderer="ognl:@org.apache.tapestry.wml.OptionRenderer@SHARED_INSTANCE" href="" value="1"> Your income: $income </p>

-                <option jwcid="@wml:Option" onpick="#hobbiescard" value="2"> Your hobbies </option>

-            </select>

-        </p>

-        <do type="accept">

-            <go jwcid="go@wml:Go" listener="listener:submit" direct="ognl:false" href="">

-                <postfield jwcid="sex@wml:Postfield" name="sex" value="ognl:sex"/>

-                <postfield jwcid="income@wml:Postfield" name="income" value="ognl:income"/>

-                <postfield jwcid="hobbies@wml:Postfield" name="hobbies" value="ognl:hobbies"/>

-            </go>

-        </do>

-    </card>

-

-    <!-- sex data entry -->

-

-    <card jwcid="@wml:Card" id="sexcard">

-        <p>

-            What is your sex?

-            <select jwcid="sexSelect@wml:Select" name="ognl:components.sex.varName" title="sex">

-                <option jwcid="@wml:Option" value="ognl:@org.apache.tapestry.junit.mock.wml.Select@MALE_OPTION"> Male </option>

-                <option jwcid="@wml:Option" value="ognl:@org.apache.tapestry.junit.mock.wml.Select@FEMALE_OPTION"> Female </option>

-            </select>

-        </p>

-    </card>

-

-    <!-- income data entry -->

-

-    <card jwcid="@wml:Card" id="incomecard">

-        <p>

-            How much do you make?

-            <select jwcid="incomeSelect@wml:Select" name="ognl:components.income.varName" title="income">

-                <option jwcid="@wml:Option" value="$10-50K"> $$10-25K </option>

-                <option jwcid="@wml:Option" value="$25-50K"> $$25-50K </option>

-                <option jwcid="@wml:Option" value="$50-100K"> $$50-100K </option>

-                <option jwcid="@wml:Option" value="Over $100K"> Over $$100K </option>

-            </select>

-        </p>

-    </card>

-

-    <!-- hobbies data entry -->

-

-    <card jwcid="@wml:Card" id="hobbiescard">

-        <p>

-            Do you have hobbies?

-            <select jwcid="hobbiesSelect@wml:Select" name="ognl:components.hobbies.varName" multiple="true" title="hobbies">

-

-                <optgroup title="Sports">

-                    <option jwcid="@wml:Option" value="Skiing">    Skiing </option>

-                    <option jwcid="@wml:Option" value="Tennis">    Tennis </option>

-                    <option jwcid="@wml:Option" value="Skydiving"> Skydiving </option>

-                </optgroup>

-

-                <optgroup title="Culture">

-                    <option jwcid="@wml:Option" value="Books"> Books </option>

-                    <option jwcid="@wml:Option" value="Plays"> Plays </option>

-                    <option jwcid="@wml:Option" value="Opera"> Opera </option>

-                    <option jwcid="@wml:Option" value="Films"> Films </option>

-                </optgroup>

-

-                <optgroup title="Social Activities">

-                    <option jwcid="@wml:Option" value="Food/Wine"> Food/Wine </option>

-                    <option jwcid="@wml:Option" value="Dancing">   Dancing </option>

-                    <option jwcid="@wml:Option" value="Traveling"> Traveling </option>

-                </optgroup>

-            </select>

-        </p>

-    </card>

-

-    <card jwcid="@wml:Card" id="unreachable">

-        <p>

-            <select>

-                <option jwcid="@wml:Option" value="ognl:null"></option>

-            </select>

-        </p>

-    </card>

-</wml>

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Stale.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Stale.java
deleted file mode 100644
index 8298603..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Stale.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.wml.Deck;
-
-/**
- * Used to test {@link org.apache.tapestry.StaleSessionException},
- * {@link org.apache.tapestry.wml.WMLEngine}.
- * 
- * @author David Solis
- * @since 3.0
- */
-
-public abstract class Stale extends Deck
-{
-    public void noop(IRequestCycle cycle)
-    {
-        throw new ApplicationRuntimeException("noop listener should not be reachable.");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Stale.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Stale.page
deleted file mode 100644
index 789a574..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Stale.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.Stale">
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Stale.wml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Stale.wml
deleted file mode 100644
index aa5ad9a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Stale.wml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>

-<!-- $Id: Stale.wml,v 1.2 2003/03/25 08:05:15 dsolis Exp $ -->

-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-    <template>

-        <do jwcid="@wml:Do" type="prev">

-            <prev/>

-        </do>

-    </template>

-

-    <card jwcid="@wml:Card" id="StaleSession">

-    <p>

-        <anchor title="DirectLink"> DirectLink that will trigger a StaleSessionException.

-            <go jwcid="directLink@DirectLink" listener="listener:noop" renderer="ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE" href=""/>

-        </anchor>

-        <anchor title="Go">Go that will trigger a StaleSessionException.

-            <go jwcid="go@wml:Go" listener="listener:noop" href="">

-            </go>

-        </anchor>

-    </p>

-    </card>

-

-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Timer.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Timer.page
deleted file mode 100644
index 8325ce2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Timer.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Timer.wml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Timer.wml
deleted file mode 100644
index fedc301..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/mock/wml/Timer.wml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>

-<!-- $Id: Timer.wml,v 1.2 2003/03/25 08:05:15 dsolis Exp $ -->

-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"

-   "http://www.wapforum.org/DTD/wml12.dtd">

-<wml>

-    <card>

-        <p>

-            <timer jwcid="@wml:Timer" name="timer_one" value="ognl:20"/>

-            <timer jwcid="@wml:Timer" name="timer_two" value="ognl:null"/>

-        </p>

-    </card>

-

-</wml>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/override.properties b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/override.properties
deleted file mode 100644
index 4452df0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/override.properties
+++ /dev/null
@@ -1 +0,0 @@
-standard-property=Whispering wind
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/AllStatic.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/AllStatic.html
deleted file mode 100644
index 0c76a66..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/AllStatic.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!-- Comment at the start! -->
-<html>
-<head>
-<title>All Static</title>
-</head>
-<body>
-This file contains only static HTML.
-
-<!-- Comment in the middle. -->
-</body>
-</html>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Assets.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Assets.page
deleted file mode 100644
index 294665c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Assets.page
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<page-specification>
-    <asset name="myasset" path="path/to/asset" property="myProperty"/>
-</page-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Assets_3_0.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Assets_3_0.page
deleted file mode 100644
index 6ed114b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Assets_3_0.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-    	
-<page-specification>
-
-	<context-asset name="mycontext" path="path/to/context"/>
-    <private-asset name="myprivate" resource-path="path/to/private"/>
-    <external-asset name="myexternal" URL="http://myexternal/asset"/>
-	
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/AttributeAndBody.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/AttributeAndBody.page
deleted file mode 100644
index 1e0b7f4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/AttributeAndBody.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-    	
-<page-specification>
-
-	<component id="c" type="Insert">
-		<static-binding name="fred" value="error">flintstone</static-binding>
-	</component>
-	
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BasicContent.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BasicContent.html
deleted file mode 100644
index 093e8d5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BasicContent.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- A basic test to ensure that the $content$ special id works. -->
-
-<table>
-	<tr>
-		<td jwcid="$content$">
-		
-This is the real content.
-
-Here's a nested component: <span jwcid="nested"/>.
-
-		</td>
-	</tr>
-</table>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BasicLocalization.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BasicLocalization.html
deleted file mode 100644
index 607b15f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BasicLocalization.html
+++ /dev/null
@@ -1,7 +0,0 @@
-Some text before the localization.
-
-<span key="the.localization.key">sample text</span>
-
-Text after the localization.
-
-Whitespace: <span key="hello-key">Hello</span> <span key="world-key">World</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BasicRemove.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BasicRemove.html
deleted file mode 100644
index ae566e6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BasicRemove.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<html>
-<head>
-<title>Basic Remove</title>
-</head>
-<body>
-This is an example of the use of the special jwcid, $remove$.
-
-<table jwcid="$remove$">
-	<tr>
-		<td>Removed!</td>
-	</tr>
-</table>
-
-<p>Next, we remove one row from a table:
-
-<table>
-	<tr>
-		<td>Row 1</td>
-	</tr>
-	<tr jwcid="$Remove$">
-		<td>Row 2 (removed)</td>
-	</tr>
-<span jwcid="e">
-	<tr jwcid="row">
-		<td>Row 3</td>
-	</tr>
-</span>
-</table>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanDescription.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanDescription.jwc
deleted file mode 100644
index 55c1b38..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanDescription.jwc
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<component-specification>
-	<bean name="mybean" class="MyBean">
-		<description>
-			Description of mybean.	
-		</description>	
-		
-		<property name="myproperty" value="myvalue"/>
-		
-	</bean>
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanInitializer.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanInitializer.jwc
deleted file mode 100644
index fb7d8ef..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanInitializer.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-     	
-<component-specification>    
-    <bean name="bean" class="java.util.HashMap,foo=bar"/>
-    
-</component-specification>
-    
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanInject.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanInject.jwc
deleted file mode 100644
index abbcfe4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanInject.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-     	
-<component-specification>    
-    <bean name="bean" class="java.util.HashMap" property="myProperty"/>
-    
-</component-specification>
-    
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanSet.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanSet.page
deleted file mode 100644
index e4b892f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BeanSet.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-     	
-<page-specification>
-    
-    <bean name="target" class="java.util.HashMap">
-        <set name="literal" value="literal-string"/>
-        <set name="expression" value="ognl:an-expression"/>
-        <set name="wrapped">
-            wrapped-literal
-        </set>
-    </bean>
-    
-</page-specification>
-    
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Bedrock.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Bedrock.java
deleted file mode 100644
index ab12474..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Bedrock.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.parse;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class Bedrock
-{
-    private String _fred;
-
-    public String getFred()
-    {
-        return _fred;
-    }
-
-    public void setFred(String fred)
-    {
-        _fred = fred;
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Binding40.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Binding40.jwc
deleted file mode 100644
index 734252d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Binding40.jwc
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification>
-
-  <component id="component" type="SomeComponent">
-    <binding name="simple" value="message:some-key"/>
-    <binding name="enclosed">
-      ognl:zip.zap.zoop
-    </binding>
-  </component>
-  
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BodyRemove.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BodyRemove.html
deleted file mode 100644
index bb04907..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/BodyRemove.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<html>
-<head>
-<title>Body Remove</title>
-</head>
-<body>
-
-Pretty typical; the producer creates a mockup of a PropertySelection component.
-
-<form jwcid="form">
-
-	<select jwcid="inputType">
-		<option>foo
-		<option>bar
-		<option>baz
-	</select>
-</form>
-
-</body>
-</html>
-
-
-
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Complex.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Complex.html
deleted file mode 100644
index 1a97479..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Complex.html
+++ /dev/null
@@ -1,18 +0,0 @@
-A complex mix, simulating what a tabular output table would look like.
-
-<span jwcid="ifData">
-
-<table>
-	<tr>
-		<th>Name</th>
-		<th>Age</th>
-	</tr>
-<span jwcid="e">
-	<tr jwcid="row">
-		<td><span jwcid="insertName"/></td>
-		<td><span jwcid="insertAge"/></td>
-	</tr>
-</span>
-</table>
-
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentBadCopy.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentBadCopy.jwc
deleted file mode 100644
index 83eabd6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentBadCopy.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<component-specification>
-
-  <component id="source" copy-of="missing"/>
- 	
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentCopyOf.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentCopyOf.jwc
deleted file mode 100644
index 9508ff1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentCopyOf.jwc
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<component-specification>
-
-  <component id="source" type="Insert">
-  		<binding name="value" expression="date"/>
-  </component>
-  
-  <component id="copy" copy-of="source">
-  	<binding name="formatter" expression="formatter"/>
-  	<static-binding name="foo" value="bar"/>
-  </component>
-  
-  <component id="override" copy-of="copy">
-  	<binding name="value" expression="tomorrow"/>	
-  </component>
-	
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentInjectProperty.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentInjectProperty.jwc
deleted file mode 100644
index 67ffa90..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentInjectProperty.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-     	
-<component-specification>
-	<component id="body" type="Body" property="myProperty"/>
-    <component id="fred" type="Insert"/>
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentInsideLocalization.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentInsideLocalization.html
deleted file mode 100644
index 51ae0c4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentInsideLocalization.html
+++ /dev/null
@@ -1,14 +0,0 @@
-Test case where a component is inside the removed block of an invisible localization.
-
-<span jwcid="outercomponent">
-
-<span key="danger.will.robinson">
-
-Some text.
-
-<span jwcid="innercomponent"/>
-
-More text.
-
-</span>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentProperty.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentProperty.jwc
deleted file mode 100644
index d767349..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentProperty.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<component-specification>
-	<component id="body" type="Body">
-		<property name="my-property">
-			my-value	
-		</property>	
-	</component>
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentType.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentType.application
deleted file mode 100644
index b423395..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentType.application
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<application>
-
-	<component-type type="Fred" specification-path="/path/Fred.jwc"/>
-	
-</application>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentWithTypeAndCopyOf.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentWithTypeAndCopyOf.jwc
deleted file mode 100644
index 7fde8ba..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentWithTypeAndCopyOf.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<component-specification>
-
-  <component id="bad" type="Insert" copy-of="other"/>
-	
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentWithoutType.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentWithoutType.jwc
deleted file mode 100644
index 003cc86..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ComponentWithoutType.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<component-specification>
-
-  <component id="bad"/>
-	
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ConfigureExtension.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ConfigureExtension.application
deleted file mode 100644
index d319938..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ConfigureExtension.application
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<application>
-	<extension name="my-extension" class="my-extension-class">
-
-		<property name="my-property" value="my-value"/>
-
-		<configure property-name="long"	type="long" value="-227"/>
-		<configure property-name="double" type="double" value="22.7"/>
-		<configure property-name="boolean" type="boolean" value="true"/>
-		<configure property-name="string">
-		
-			An extended string.
-				
-		</configure>
-		
-		
-	</extension>
-</application>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ConfigureValue.library b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ConfigureValue.library
deleted file mode 100644
index 6d72ed3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ConfigureValue.library
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<library-specification>
-
-	<extension name="bedrock" class="org.apache.tapestry.junit.parse.Bedrock">
-		<configure property-name="fred" value="flintstone"/>
-	</extension>
-
-</library-specification>
-	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/DeprecatedComponent.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/DeprecatedComponent.jwc
deleted file mode 100644
index a013766..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/DeprecatedComponent.jwc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-     	
-<component-specification deprecated="true"/>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/DuplicateTagAttribute.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/DuplicateTagAttribute.html
deleted file mode 100644
index 84d6b9b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/DuplicateTagAttribute.html
+++ /dev/null
@@ -1,13 +0,0 @@
-This file tests for a duplicate tag attribute.
-
-<input jwcid="@TextField" value="ognl:emailAddress" type="text" name="emailaddress" id="emailaddress"  size="10" maxlength="25" value='' />
-
-One possible scenario, designer gives developer a page with a long <input> tag.
-Developer adds jwcid and ognl expression for 'value' but misses the fact that
-there is already a 'value' attribute. Unless this case was handled as an error, the TemplateParser
-will silently throw away the first 'value' attribute and bind the parameter statically.
-This hurts in, say, a TextField as Tapestry dumps an exception page when it tries to update
-value's binding, which is static and does not allow this.
-    
-Tough to track down as, in this case, the stack trace shows that AbstractBinding.setString()
-throwing the exception. This kills newbies!
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/DuplicateTagAttributeSingleQuotes.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/DuplicateTagAttributeSingleQuotes.html
deleted file mode 100644
index 4fbe858..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/DuplicateTagAttributeSingleQuotes.html
+++ /dev/null
@@ -1,15 +0,0 @@
-This file tests for a duplicate tag attribute.
-
-<input jwcid="@TextField" value='ognl:emailAddress' type="text" name="emailaddress" id="emailaddress"  size="10" maxlength="25" value="" />
-
-One possible scenario, designer gives developer a page with a long <input> tag.
-Developer adds jwcid and ognl expression for 'value' but misses the fact that
-there is already a 'value' attribute. Unless this case was handled as an error, the TemplateParser
-will silently throw away the first 'value' attribute and bind the parameter statically.
-This hurts in, say, a TextField as Tapestry dumps an exception page when it tries to update
-value's binding, which is static and does not allow this.
-    
-Tough to track down as, in this case, the stack trace shows that AbstractBinding.setString()
-throwing the exception. This kills newbies!
-    
-In case you are wondering...this file is slightly different than the DuplicateTagAttribute.html. Hint: check the quotes for 'value'
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/EmptyLocalization.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/EmptyLocalization.html
deleted file mode 100644
index bef3d3f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/EmptyLocalization.html
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a test for a localization using the abbreviated form.
-
-<span key="empty.localization"/>
-
-More text after the span.
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/EncodedExpressionCharacters.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/EncodedExpressionCharacters.html
deleted file mode 100644
index 21d3939..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/EncodedExpressionCharacters.html
+++ /dev/null
@@ -1 +0,0 @@
-<span jwcid="@Insert" value="ognl: { &quot;&lt;&amp;&gt;&quot;, &quot;Fun!&quot; }  "/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ExpressionBeanInitializer_3_0.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ExpressionBeanInitializer_3_0.page
deleted file mode 100644
index 8ff2058..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ExpressionBeanInitializer_3_0.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-	<bean name="zebean" class="java.util.HashMap">
-		<set-property name="barney" expression="rubble"/>
-    <set-property name="fred">
-      flintstone
-    </set-property>
-	</bean>
-	
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/IgnoredContent.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/IgnoredContent.html
deleted file mode 100644
index f4a0009..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/IgnoredContent.html
+++ /dev/null
@@ -1,15 +0,0 @@
-Test that the content block can't be in an ignored block.
-
-<span Jwcid="$remove$">
-
-<table>
-	<tr>
-		<td jwcId="$Content$">
-		
-		The real content.
-		
-		</td>
-	</tr>
-</table>
-</span>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ImplicitComponents.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ImplicitComponents.html
deleted file mode 100644
index 88769d1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ImplicitComponents.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-<!-- Test for implcit components, named and anonymous. -->
-
-<body jwcid="@Body">
-
-<table>
-<tr jwcid="loop@For"
-	element="tr"
-	source="ognl:items">
-	<td><span jwcid="@Insert" value="ognl:components.loop.value.name"/></td>
-	<td><span jwcid="@Insert" value="ognl:components.loop.value.price"/></td>
-</tr>
-</table>
-
-<span jwcid="@contrib:InspectorButton"/>
-
-</body>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/IncompleteClose.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/IncompleteClose.html
deleted file mode 100644
index 7b4980c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/IncompleteClose.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-<body>
-
-Tests for an incomplete close tag.
-
-</
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Inject.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Inject.jwc
deleted file mode 100644
index 0c6cbe9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Inject.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification>
-
-  <inject property="fred" object="flintstone"/>
-  <inject property="barney" type="state" object="rubble"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidAssetName.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidAssetName.jwc
deleted file mode 100644
index 9a9c64d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidAssetName.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="border" type="Border"/>
-  
-  <private-asset name="validName" resource-path="/foo/bar/Baz.gif"/>
-  <private-asset name="in.valid" resource-path="/foo/bar/Fugo.gif"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidComponentAlias.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidComponentAlias.application
deleted file mode 100644
index 8007402..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidComponentAlias.application
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Tapestry Component Workbench">
-  <property name="org.apache.tapestry.visit-class">tutorial.workbench.Visit</property>
-    
-  <page name="Home" specification-path="/tutorial/workbench/Home.jwc"/>
-  
-  <page name="Palette" specification-path="/tutorial/workbench/palette/Palette.jwc"/>
-  <page name="palette/Results" specification-path="/tutorial/workbench/palette/Results.jwc"/>
-  
-  <page name="Localization" specification-path="/tutorial/workbench/localization/Localization.jwc"/>
-  <page name="localization/Change" 
-  	specification-path="/tutorial/workbench/localization/Change.jwc"/>
-    
-  <page name="Fields" specification-path="/tutorial/workbench/fields/Fields.jwc"/>
-  <page name="fields/Results" specification-path="/tutorial/workbench/fields/Results.jwc"/>
-  
-  <page name="Upload" specification-path="/tutorial/workbench/upload/Upload.jwc"/>
-  <page name="upload/Results" specification-path="/tutorial/workbench/upload/Results.jwc"/>
-
-  <page name="Chart" specification-path="/tutorial/workbench/chart/Chart.jwc"/>
-
-  <page name="Redirect" specification-path="/tutorial/workbench/Redirect.jwc"/>
-
-  <page name="ExceptionTab" specification-path="/tutorial/workbench/ExceptionTab.jwc"/>
-  <page name="ErrorFest" specification-path="/tutorial/workbench/ErrorFest.jwc"/>
-
-  <component-type type="Border" specification-path="/tutorial/workbench/components/Border.jwc"/>
-  <component-type type="Palette" specification-path="/org/apache/tapestry/contrib/palette/Palette.jwc"/>
-  <component-type type="ShowError" specification-path="/tutorial/workbench/components/ShowError.jwc"/>
-  <component-type type="Invalid$Component" specification-path="/it/just/doesnt/matter/Invalid.jwc"/>
-  
-</application>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidComponentId.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidComponentId.jwc
deleted file mode 100644
index ff70d3e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidComponentId.jwc
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="border" type="Border"/>
-  
-  <component id="in.valid" type="Unknown"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidDynamicNesting.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidDynamicNesting.html
deleted file mode 100644
index b7ce6b2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidDynamicNesting.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>
-<title>Invalid dynamic nesting</title>
-</html>
-<body>
-
-Here we're going to test what happens when tags are mis-matched.
-
-<span jwcid="dynamic">
-
-<!-- Note the missing close tag -->
-
-</body>
-</html>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidExtensionName.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidExtensionName.application
deleted file mode 100644
index 7738b99..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidExtensionName.application
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Tapestry Component Workbench">
-  <property name="org.apache.tapestry.visit-class" value="tutorial.workbench.Visit"/>
-  
-  <extension name="Invalid$Extension" class="not.ever.Used"/>
-    
-</application>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidLibraryId.library b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidLibraryId.library
deleted file mode 100644
index 3389bcb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidLibraryId.library
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<!--  Specification used in a series of tests to check successful parsing of a LibrarySpecification. -->
-	
-<library-specification>
-	
-	<page name="FirstPage" specification-path="/FirstPage.page"/>
-	<page name="SecondPage" specification-path="/SecondPage.page"/>
-	
-	<component-type type="FirstComponent" specification-path="/FirstComponent.jwc"/>
-	<component-type type="SecondComponent" specification-path="/SecondComponent.jwc"/>
-	
-	<library id="lib1" specification-path="/Library1.library"/>
-	<library id="in.valid" specification-path="/Library2.library"/>
-
-</library-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidPageName.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidPageName.application
deleted file mode 100644
index bce7c7d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidPageName.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Invalid Page Name">
-	
-  <page name="Home" specification-path="/tutorial/workbench/Home.jwc"/>
-  
-  <page name="in$valid" specification-path="/it/just/doesn't/matter.jwc"/>
-  
-</application>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidParameterName.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidParameterName.jwc
deleted file mode 100644
index d3d107e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidParameterName.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.BaseComponent">
-
-<parameter name="in-valid"/>
-
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidPublicId.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidPublicId.application
deleted file mode 100644
index 146ada2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/InvalidPublicId.application
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Specification 1.2//EN" 
-	"Tapestry_1_2.dtd">
-	
-<application name="Tapestry Component Workbench" engine-class="foo.bar.Baz"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/LibraryDescription.library b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/LibraryDescription.library
deleted file mode 100644
index e6357e1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/LibraryDescription.library
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<library-specification>
-	<description>
-		Often, these are just placeholders.	
-	</description>
-</library-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/LibraryFrameworkNamespace.library b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/LibraryFrameworkNamespace.library
deleted file mode 100644
index 6f38b09..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/LibraryFrameworkNamespace.library
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<library-specification>
-
-	<library id="framework" specification-path="/invalid.library"/>
-	
-</library-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ListenerBinding.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ListenerBinding.page
deleted file mode 100644
index 13bbdca..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ListenerBinding.page
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-  <component id="c" type="DirectLink">
-  	<listener-binding name="listener" language="jython">
-if page.isFormInputValid():
-  cycle.page = "Results"
-else:
-  page.message = "Please fix errors before continuing.";</listener-binding>
-  <static-binding name="foo" value="bar"/>
-  </component>
-  	  	
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/LocalizationAttributes.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/LocalizationAttributes.html
deleted file mode 100644
index f65c6b7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/LocalizationAttributes.html
+++ /dev/null
@@ -1,3 +0,0 @@
-A test to see if attributes for the localization are parsed.
-
-<Span Fred=Wilma Key="localization.with.attributes" alpha="beta"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MalformedXmlTag.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MalformedXmlTag.page
deleted file mode 100644
index defd26f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MalformedXmlTag.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification>
-
-	<component id="foo" type="Insert">
-		<binding name="fred" value="literal:hah" />
-        <binding name="disabled" value="literal:true" 
-    </component>
-
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MessageBeanInitializer.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MessageBeanInitializer.page
deleted file mode 100644
index e86b233..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MessageBeanInitializer.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-	<bean name="fred" class="java.util.HashMap">
-		<set-message-property name="barney" key="rubble"/>
-	</bean>
-	
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Meta.library b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Meta.library
deleted file mode 100644
index 64e24e9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Meta.library
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
-	
-	
-<library-specification>
-	
-  <meta key="foo" value="bar"/>
-  <meta key="long">
-    long value
-  </meta>
-
-</library-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MismatchedCloseTags.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MismatchedCloseTags.html
deleted file mode 100644
index 783e397..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MismatchedCloseTags.html
+++ /dev/null
@@ -1,12 +0,0 @@
-A common error is to not match close tags properly.  You can omit them pretty
-freely, but don't match 'em wrong!
-
-<table>
-	<tr>
-		<th>Heading</th>
-	</tr>
-	<tr>
-		<td>The error --} </th>
-	</tr>
-</table>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MissingAttributeValue.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MissingAttributeValue.html
deleted file mode 100644
index 795060c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MissingAttributeValue.html
+++ /dev/null
@@ -1,11 +0,0 @@
-In this test, we show an attribute and omit the value.
-
-This is valid:
-
-<select multiple>
-
-This is not:
-
-<img src=>
-
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MissingDoctype.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MissingDoctype.application
deleted file mode 100644
index 0a2883e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MissingDoctype.application
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<application name="Tapestry Component Workbench"/>
- 
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MissingRequiredExtendedAttribute.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MissingRequiredExtendedAttribute.page
deleted file mode 100644
index 3e3b703..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MissingRequiredExtendedAttribute.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-	<component id="c" type="Insert">
-		<binding name="fred"/>
-	</component>
-	
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MixedNesting.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MixedNesting.html
deleted file mode 100644
index 60f9cfa..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MixedNesting.html
+++ /dev/null
@@ -1,9 +0,0 @@
-Tests for mixed nesting; that is, the jwc tags are intermixed with other tags.
-
-<table>
-  <span jwcid="row">
-  	<td> Some data. </td>
-  	<td> <img src="/foo/bar/baz.gif"> </td>
-  </span>
-</table>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NamespaceAttributeName.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NamespaceAttributeName.html
deleted file mode 100644
index 8fa498e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NamespaceAttributeName.html
+++ /dev/null
@@ -1,6 +0,0 @@
-Test for alternate, namespaced, component attribute name.
-
-<span t:id="outer">
-    <span t:id="inner"/>
-</span>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NestedLocalizations.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NestedLocalizations.html
deleted file mode 100644
index 25a5391..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NestedLocalizations.html
+++ /dev/null
@@ -1,5 +0,0 @@
-This is some outer text.
-
-<span key="outer">
-	<span key="inner"/>
-</span>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NestedRemove.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NestedRemove.html
deleted file mode 100644
index 0ae5c82..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NestedRemove.html
+++ /dev/null
@@ -1,8 +0,0 @@
-A test to make sure a removed blocks can't be nested.
-
-<span jwcid="$remove$">
-	<span jwcid="$remove$">
-		nested remove content.
-	</span>
-</span>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NulledApplication.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NulledApplication.application
deleted file mode 100644
index dfea2ad..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NulledApplication.application
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<!-- Show that an application specification can omit
-     the name and engine-class attributes. -->
-     	
-<application/>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NulledComponent.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NulledComponent.jwc
deleted file mode 100644
index e5509bb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NulledComponent.jwc
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<component-specification/>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NulledPage.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NulledPage.page
deleted file mode 100644
index 3cfc6ed..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/NulledPage.page
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification/>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/OverrideDefaultAttributeName.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/OverrideDefaultAttributeName.html
deleted file mode 100644
index 9cef784..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/OverrideDefaultAttributeName.html
+++ /dev/null
@@ -1,6 +0,0 @@
-Test for alternate component attribute name.
-
-<span id="outer">
-	<span id="inner"/>
-</span>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/PageDescription.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/PageDescription.page
deleted file mode 100644
index d9d36c3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/PageDescription.page
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-		<description>Description of this page.</description>
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Parameter.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Parameter.jwc
deleted file mode 100644
index 1ae2771..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Parameter.jwc
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-     	
-<component-specification>
-
-    <parameter name="noDefault" required="yes"/>
-    <parameter name="literalDefault" default-value="literal-value"/>
-    <parameter name="expressionDefault" default-value="ognl:an.expression"/>
-    <parameter name="noCache" cache="false"/>
-    <parameter name="withAliases" aliases="fred,barney"/>
-    <parameter name="deprecated" deprecated="aye"/>
-    
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Parameter_3_0.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Parameter_3_0.jwc
deleted file mode 100644
index e509220..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Parameter_3_0.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<component-specification>
-
-    <parameter name="noDefault" type="bar" required="yes"/>
-    <parameter name="withDefault" default-value="an.expression"/>
-    <parameter name="withDescription">
-        <description>
-            A parameter with a description.
-        </description>
-    </parameter>
-    <parameter name="altName" property-name="altNameParameter"/>
-    
-    <parameter name="directionIn" direction="in"/>
-    <parameter name="directionAuto" direction="auto"/>
-    
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Property.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Property.page
deleted file mode 100644
index 6c5f0bd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Property.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-     	
-<page-specification>
-
-  <property name="bool"/>
-  <property name="persist" persist="session"/>
-  <property name="init" initial-value="ognl:pageName"/>
-  <property name="longInit">
-      message:long-init-key
-  </property>
-
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/PropertySpecifications.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/PropertySpecifications.page
deleted file mode 100644
index 0e2eba1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/PropertySpecifications.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-<property-specification name="bool" type="boolean"/>
-<property-specification name="persist" persistent="yes"/>
-<property-specification name="init" initial-value="pageName"/>
-<property-specification name="longInitialValue">
-    long.initial.value
-</property-specification>
-
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/PropertyValue.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/PropertyValue.page
deleted file mode 100644
index d2739bf..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/PropertyValue.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-	<property name="barney" value="rubble"/>
-
-	<property name="wilma" value="flintstone"/>
-	
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/RemovedComponent.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/RemovedComponent.html
deleted file mode 100644
index 03781d2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/RemovedComponent.html
+++ /dev/null
@@ -1,7 +0,0 @@
-A test to make sure a component can't
-be inside a removed block.
-
-<span jwcid="$remove$">
-	<span jwcid="nested"/>
-</span>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ServiceElement.library b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ServiceElement.library
deleted file mode 100644
index 69924d0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ServiceElement.library
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<library-specification>
-	
-	<service name="ignored" class="foo.bar.Baz"/>
-  
-</library-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SimpleNested.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SimpleNested.html
deleted file mode 100644
index 61c19a3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SimpleNested.html
+++ /dev/null
@@ -1,6 +0,0 @@
-Test for simple nesting of span tags.
-
-<span jwcid="outer">
-	<span jwcid="inner"/>
-</span>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SingleEmptyTag.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SingleEmptyTag.html
deleted file mode 100644
index c9ef955..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SingleEmptyTag.html
+++ /dev/null
@@ -1,5 +0,0 @@
-This test contains a single span tag.
-
-<span jwcid="emptyTag"/>
-
-Additional text follows the span tag.
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SingleQuotes.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SingleQuotes.html
deleted file mode 100644
index c69a778..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SingleQuotes.html
+++ /dev/null
@@ -1,14 +0,0 @@
-This test ensures that single quotes work as well as double quotes.
-
-It also checks for some looseness in terms of whitespace inside the JWC tag.
-
-<span jwcid = "first" />
-
-<span jwcid
-=
-
-'second'
-
-/
-
->
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SlashInComponentType.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SlashInComponentType.html
deleted file mode 100644
index 3e61bcd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SlashInComponentType.html
+++ /dev/null
@@ -1,4 +0,0 @@
-Tests for implicit components that have slashes in the component type.
-
-<span jwcid="@foo/Bar"/>
-<span jwcid="baz@biff/bop/Boop"/>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SlashInComponentType.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SlashInComponentType.jwc
deleted file mode 100644
index 939019a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SlashInComponentType.jwc
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<component-specification>
-    <component id="fred" type="rubble/Barney"/>    
-</component-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SlashInComponentType.library b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SlashInComponentType.library
deleted file mode 100644
index a0cc42e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/SlashInComponentType.library
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
-     	
-<library-specification>
-
-  <component-type
-   type="foo/Bar"
-   specification-path="foocomponents/BarComponent.jwc"/>
-
-</library-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/StartWithStaticTag.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/StartWithStaticTag.html
deleted file mode 100644
index 2fc717d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/StartWithStaticTag.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html><head>
-<title>StartWithStaticTag</title>
-</head>
-<body>
-
-Starting with a static tag can mess some things up.  Putting the html and head tags together
-on the first line is a particular case that wasn't originally handled well.
-
-<span jwcid="justBecause"/>
-
-</body>
-</html>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/StaticBindingValue.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/StaticBindingValue.page
deleted file mode 100644
index 86c0be2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/StaticBindingValue.page
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-	<component id="c" type="Insert">
-		<static-binding name="fred">flintstone</static-binding>
-		<static-binding name="barney" value="rubble"/>
-		<static-binding name="rock" value="hudson"/>
-	</component>
-	
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/StringAttributes.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/StringAttributes.html
deleted file mode 100644
index f9b77f2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/StringAttributes.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-  <img jwcid="@Image" image="ognl:assets.logo" alt="message:logo-title"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TagAttributes.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TagAttributes.html
deleted file mode 100644
index b882a59..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TagAttributes.html
+++ /dev/null
@@ -1,6 +0,0 @@
-Tests that attributes for the tag come through.
-
-<span jwcid="tag" class="zip" align="right" color="#ff00ff">
-
-</span>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Tapestry_1_2.dtd b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Tapestry_1_2.dtd
deleted file mode 100644
index eda196e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/Tapestry_1_2.dtd
+++ /dev/null
@@ -1,430 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- $Id$ -->
-<!--
-
-The DTD for Tapestry application and component specifications.
-Associated with the public identifier:
-
-	-//Howard Lewis Ship//Tapestry Specification 1.2//EN
-	
-The canonical location for the DTD is:
-
-	http://tapestry.sf.net/dtd/Tapestry_1_2.dtd
-
-For application specifications, the root element is application.
-
-For component specifications the root element is specification.
-
-This DTD is backwards compatible with the 1.1 DTD, with the following exceptions:
-- Addition of the parameter-name attribute to the parameter element
-- Addition of direction attribute to the parameter element
-- Addition of string-binding element
-
--->
-<!-- =======================================================
-Entity: attribute-flag
-
-For entity attribute that take a boolean value, defines 'yes' and 'no.
--->
-<!ENTITY % attribute-flag "(yes|no)">
-<!-- =======================================================
-Element: application
-Root element
-
-Defines a Tapestry application.
-
-Attributes:
-  name: A textual name used to uniquely identify the application.
-  engine-class:  The Java class to instantiate as the application engine.
--->
-<!ELEMENT application (description*, property*, (page|component-alias|service)*)>
-<!ATTLIST application
-  name CDATA #REQUIRED
-  engine-class CDATA #REQUIRED
->
-<!-- =======================================================
-Element: bean
-Appears in: specification
-
-Defines a JavaBean that will be used in some way by the component.  Beans
-are accessible via the components' beans property (which contains a property
-for each bean).  Beans are created as needed, and are discarded based on
-the lifecycle attribute.  Beans are typically used to extend the
-implementation of a component via aggregation.
-
-Attributes:
-  name: the name of the bean
-  class: the Java class to instantiate
-  lifecycle: when the reference to the bean should be discard
-  	"none" no lifecycle, the bean is created and returned, but not stored
-  	"request" the bean is retained until the end of the request cycle
-  	"page" the bean is retained for the lifespan of the page
-  	
-Nothing prevents a bean for storing state; however, such state will
-not be associated with any particular session (unlike persistant page
-properties).  Further, because of page pooling, subsequent requests
-from the same client may be serviced by different instances of a page and
-(therefore) different bean instances.
-
-Beans that have the "request" lifecycle may be stored into a pool
-for later re-use (in the same or different page).
-
-The bean may have its properties set.  Properties are set on both
-newly instantiated beans, and beans that are retrieved from a pool.
-
--->
-<!ELEMENT bean (description*, set-property*)>
-<!ATTLIST bean
-  name CDATA #REQUIRED
-  class CDATA #REQUIRED
-  lifecycle (none|request|page) "request"
->
-<!-- =======================================================
-Element: binding
-Appears in: component
-
-Binds a parameter of the component to a property of its container.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  property-path: The property path, relative to the container, to obtain
-    the parameter value from.
--->
-<!ELEMENT binding EMPTY>
-<!ATTLIST binding
-  name CDATA #REQUIRED
-  property-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: component
-Contained by: specification
-
-Defines a component contained by the component being specified.
-
-Attribute:
-  id: A unique identifier for the component within the container.
-  type: The type of component, either a well known logical name, or the complete path
-    to the component's specification.
-  copy-of: The id of a previously defined component; this component will be a copy
-    of the other component.
-
-The Tapestry page loader ensures that either type or copy-of is specified, but not both.
--->
-<!ELEMENT component ((binding | field-binding | inherited-binding | static-binding | string-binding)*)>
-<!ATTLIST component
-  id ID #REQUIRED
-  type CDATA #IMPLIED
-  copy-of IDREF #IMPLIED
->
-<!-- =======================================================
-Element: component-alias
-Contained by: application
-
-Establishes a short logic name for a particular component that is used
-within the application.
-
-Attributes:
-  type: The logical name for the component.
-  specification-path:  The complete path to the component's specification.
--->
-<!ELEMENT component-alias EMPTY>
-<!ATTLIST component-alias
-  type CDATA #REQUIRED
-  specification-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: context-asset
-Contained by: specification
-
-An asset located in the same web application context as the running
-application.
-
-Attributes:
-  name: The name of the asset.
-  path: The path, relative to the web application context, of the resource.
--->
-<!ELEMENT context-asset EMPTY>
-<!ATTLIST context-asset
-  name CDATA #REQUIRED
-  path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: description
-Appears in: application bean parameter specification
-
-Several elements may contain descriptions; these descriptions are
-optional.  The eventual goal is to provide help in some form of IDE.
-Currently, descriptions are optional and ignored.
-
-Attributes:
-  xml:lang the language that the description is expressed in.
--->
-<!ELEMENT description (#PCDATA)>
-<!ATTLIST description
-  xml:lang NMTOKEN "en"
->
-<!-- =======================================================
-Element: external-asset
-Contained by: specification
-
-Defines an asset at some external source.
-
-Attributes:
-  name: The name of the asset.
-  URL: The URL used to reference the asset.
--->
-<!ELEMENT external-asset EMPTY>
-<!ATTLIST external-asset
-  name CDATA #REQUIRED
-  URL CDATA #REQUIRED
->
-<!-- =======================================================
-Element: field-binding
-Appears in: component
-
-Binds a parameter of the component to a public static field of
-some Java object.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  field-name:  The name of the field, of the form [package.]class.field.
-    The package may be ommitted if it is "java.lang".
--->
-<!ELEMENT field-binding EMPTY>
-<!ATTLIST field-binding
-  name CDATA #REQUIRED
-  field-name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: field-value
-Appears in: set-property
-
-Allows a helper bean property to be set to the value of
-a static field.
-
-Attributes:
-  field-name: The name of the field, as with field-binding.
-  
--->
-<!ELEMENT field-value EMPTY>
-<!ATTLIST field-value
-  field-name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: inherited-binding
-Appears in: component
-
-Binds a parameter of the component to a parameter of the container.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  parameter-name: The name of the container parameter to bind the
-    component parameter to.
--->
-<!ELEMENT inherited-binding EMPTY>
-<!ATTLIST inherited-binding
-  name CDATA #REQUIRED
-  parameter-name CDATA #REQUIRED
->
-<!-- =======================================================
-Element: page
-Contained by: application
-
-Defines a single page within the application.  Each application will contain
-at least one of these, to define the Home page.
-
-Attributes:
-  name: A unique name for the application.
-  specification-path:  The resource classpath of the component specification
-    for the page.
--->
-<!ELEMENT page EMPTY>
-<!ATTLIST page
-  name CDATA #REQUIRED
-  specification-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: parameter
-Contained by: specification
-
-Defines a formal parameter for the component.
-
-Attributes:
-  name: A unqiue name for the parameter.
-  java-type: The name of a Java class or primitive type expected by the parameter.
-    This is for documentation purposes only, it is not enforced.
-  required: If yes, then the parameter must be bound.  If no (the default),
-    then the parameter is optional.
-  property-name: The name to use, instead of the parameter name, for the
-    JavaBean property connected to this parameter.
-  direction: The normal flow of data through the component.
--->
-<!ELEMENT parameter (description*)>
-<!ATTLIST parameter
-  name CDATA #REQUIRED
-  java-type CDATA #IMPLIED
-  required %attribute-flag; "no"
-  property-name CDATA #IMPLIED
-  direction (in|custom) "custom"
->
-<!-- =======================================================
-Element: private-asset
-Contained by: specification
-
-An asset available within the Java classpath (i.e., bundled inside a JAR or WAR).
-
-Attributes:
-  name: The name of the asset.
-  resource-path: The complete pathname of the resource.
--->
-<!ELEMENT private-asset EMPTY>
-<!ATTLIST private-asset
-  name CDATA #REQUIRED
-  resource-path CDATA #REQUIRED
->
-<!-- =======================================================
-Element: property
-Contained by: application, specification
-
-Defines a key/value pair associated with the application or component specification.  Properties
-are used to capture information that doesn't fit into the DTD.  The value for the property is
-the PCDATA wrapped by the property tag (which is trimmed of leading and trailing whitespace).
--->
-<!ELEMENT property (#PCDATA)>
-<!ATTLIST property
-  name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: property-value
-Appears in: set-parameter
-
-Used to initialize a bean with a property of its containing
-component.
--->
-
-<!ELEMENT property-value EMPTY>
-<!ATTLIST property-value
-  property-path CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: reserved-parameter
-Appears in: specification
-
-Identifies a name which may not be used as an informal parameter.
-Informal parameters are typically HTML attribute names; this
-list identifies HTML attributes that are written exclusively
-by the component and may not be affected by informal parameters.
--->
-
-<!ELEMENT reserved-parameter EMPTY>
-<!ATTLIST reserved-parameter
-  name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: service
-Appears in: application
-
-Defines an engine service.  You may override the default
-set of engine services or provide completely new services.
-
-Attributes:
-  name: The name of the service.
-  class: The Java class to instantiate for the service.
-
--->
-
-<!ELEMENT service EMPTY>
-<!ATTLIST service
-  name CDATA #REQUIRED
-  class CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: set-property
-Appears in: bean
-
-Used to initialize a property of a helper bean.
--->
-
-<!ELEMENT set-property (static-value | property-value | field-value)>
-<!ATTLIST set-property
-  name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: specification
-Root element
-
-A component specification.  It's attributes define the Java class to
-instantiate, whether the component may wrap other elements, and whether
-informal (undeclared) parameters are allowed.
-
-Attributes:
-  class: The Java class to instantiate for the component.
-  allow-body:  If yes (the default), the component may wrap other elements (have a body).
-  allow-informal-parameters:  If yes (the default), informal parameters (parameters that are not
-    explictily defined) are allowed.
--->
-<!ELEMENT specification (description*, parameter*, reserved-parameter*, property*, bean*,
-	component*, (external-asset | context-asset | private-asset)*)>
-<!ATTLIST specification
-  class CDATA #REQUIRED
-  allow-body %attribute-flag; "yes"
-  allow-informal-parameters %attribute-flag; "yes"
->
-<!-- =======================================================
-Element: static-binding
-Appears in: component
-
-Binds a parameter of the component to a static value defined directly
-within this specification. The value is the PCDATA wrapped by the element
-(with leading and trailing whitespace removed).
-
-Attributes:
-  name: The name of the component parameter to bind.
-
--->
-<!ELEMENT static-binding (#PCDATA)>
-<!ATTLIST static-binding
-  name CDATA #REQUIRED
->
-
-<!-- =======================================================
-Element: static-value
-Appears in: set-parameter
-
-A static value, that will be converted to some known type.
-
-The possible types are limited to a few simple scalar types,
-and String.  Additional types will likely be added in the future.
-
--->
-
-<!ELEMENT static-value (#PCDATA)>
-<!ATTLIST static-value
-  type (boolean|int|double|String) "String"
->
-
-<!-- =======================================================
-Element: string-binding
-Appears in: component
-
-Binds a parameter of the component to a localized string of
-its container.
-
-Attributes:
-  name: The name of the component parameter to bind.
-  key: The key used to access a localized string.
-  
--->
-
-<!ELEMENT string-binding EMPTY>
-<!ATTLIST string-binding
-  name CDATA #REQUIRED
-  key CDATA #REQUIRED
->
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestInheritInformal.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestInheritInformal.jwc
deleted file mode 100644
index c37b4d3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestInheritInformal.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.BasePage">
-
-  <!-- inherit-informal-parameters should be false (no) by default -->
-  <component id="border" type="Border"/>
-  
-  <component id="textField" type="TextField" inherit-informal-parameters="yes"/>
-  
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestInheritSpecification.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestInheritSpecification.java
deleted file mode 100644
index 65bc35f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestInheritSpecification.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright Aug 27, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.junit.parse;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.Submit;
-
-
-/**
- * Tests component specification inheritance.
- * 
- * @author jkuhnert
- */
-public abstract class TestInheritSpecification extends Submit
-{
-    
-    protected boolean isClicked(IRequestCycle cycle, String name)
-    {
-        return cycle.getParameter(name + "myclick") != null;
-    }
-    
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestInheritSpecification.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestInheritSpecification.jwc
deleted file mode 100644
index a3a05a5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestInheritSpecification.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-    
-<component-specification class="org.apache.tapestry.form.Submit">
-
-    <property name="basicString" />
-    
-</component-specification>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestMessageBinding.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestMessageBinding.jwc
deleted file mode 100644
index f3ad935..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestMessageBinding.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification>
-
-<component id="hello" type="Insert">
-	<message-binding name="value" key="label.hello"/>
-</component>
-
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestSpecificationParser.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestSpecificationParser.java
deleted file mode 100644
index 80756d8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestSpecificationParser.java
+++ /dev/null
@@ -1,1113 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.parse;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.impl.DefaultErrorHandler;
-import org.apache.tapestry.bean.BindingBeanInitializer;
-import org.apache.tapestry.bean.LightweightBeanInitializer;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.parse.SpecificationParser;
-import org.apache.tapestry.spec.*;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.testng.annotations.Test;
-
-import java.util.List;
-
-/**
- * Tests the specification parser (which reads page and component specifications). Came into being
- * somewhat late, so it just tests new features for the meantime.
- * 
- * @author Howard Lewis Ship
- * @since 2.0.4
- */
-@Test
-public class TestSpecificationParser extends TapestryTestCase
-{
-
-    private void checkLine(Locatable locatable, int line)
-    {
-        assertEquals(line, locatable.getLocation().getLineNumber());
-    }
-
-    /**
-     * Test 3.0 &lt;message-binding&gt; element.
-     */
-
-    public void tes_Message_Binding() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("TestMessageBinding.jwc");
-
-        IBindingSpecification bs = spec.getComponent("hello").getBinding("value");
-
-        assertEquals(BindingType.PREFIXED, bs.getType());
-        assertEquals("message:label.hello", bs.getValue());
-
-        checkLine(bs, 25);
-    }
-
-    /**
-     * Tests the 4.0 style &lt;binding&gt; element.
-     */
-
-    public void testBinding40() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("Binding40.jwc");
-        IContainedComponent cc = spec.getComponent("component");
-
-        IBindingSpecification bs = cc.getBinding("simple");
-
-        assertEquals(BindingType.PREFIXED, bs.getType());
-        assertEquals("message:some-key", bs.getValue());
-
-        bs = cc.getBinding("enclosed");
-
-        assertEquals(BindingType.PREFIXED, bs.getType());
-        assertEquals("ognl:zip.zap.zoop", bs.getValue());
-    }
-
-    /**
-     * Test valid parameter name.
-     * 
-     * @since 2.2
-     */
-
-    public void testValidParameterName() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("ValidParameterName.jwc");
-
-        IParameterSpecification ps = spec.getParameter("valid");
-
-        assertNotNull(ps);
-        checkLine(ps, 24);
-    }
-
-    /**
-     * Test invalid parameter name.
-     * 
-     * @since 2.2
-     */
-
-    public void testInvalidParameterName() throws Exception
-    {
-        try
-        {
-            parseComponent("InvalidParameterName.jwc");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "in-valid");
-            checkException(ex, "Parameter");
-        }
-    }
-
-    /**
-     * Test invalid component id.
-     * 
-     * @since 2.2
-     */
-
-    public void testInvalidComponentId() throws Exception
-    {
-        try
-        {
-            parseComponent("InvalidComponentId.jwc");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "in.valid");
-            checkException(ex, "component id");
-        }
-    }
-
-    /**
-     * Test invalid library id in a library specification.
-     * 
-     * @since 2.2
-     */
-
-    public void testInvalidLibraryId() throws Exception
-    {
-        try
-        {
-            parseLib("InvalidLibraryId.library");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "in.valid");
-            checkException(ex, "library id");
-        }
-    }
-
-    /**
-     * Parse a valid library.
-     * 
-     * @since 2.2
-     */
-
-    public void testValidLibrary() throws Exception
-    {
-        ILibrarySpecification spec = parseLib("ValidLibrary.library");
-
-        checkLine(spec, 24);
-
-        checkList("pageNames", new String[]
-        { "FirstPage", "SecondPage" }, spec.getPageNames());
-
-        checkList("componentAliases", new String[]
-        { "FirstComponent", "SecondComponent" }, spec.getComponentTypes());
-
-        checkList("libraryIds", new String[]
-        { "lib1", "lib2" }, spec.getLibraryIds());
-
-        assertNotNull(spec.getSpecificationLocation());
-    }
-
-    /**
-     * Test invalid parameter name.
-     * 
-     * @since 2.2
-     */
-
-    public void testInvalidAssetName() throws Exception
-    {
-        try
-        {
-            parseComponent("InvalidAssetName.jwc");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "in.valid");
-            checkException(ex, "asset name");
-        }
-    }
-
-    /**
-     * Test invalid page name.
-     * 
-     * @since 2.2
-     */
-
-    public void testInvalidPageName() throws Exception
-    {
-        try
-        {
-            parseApp("InvalidPageName.application");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "in$valid");
-            checkException(ex, "page name");
-        }
-    }
-
-    /**
-     * Test invalid component type ("alias" in older parlance).
-     * 
-     * @since 2.2
-     */
-
-    public void testInvalidComponentAlias() throws Exception
-    {
-        try
-        {
-            parseApp("InvalidComponentAlias.application");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "Invalid$Component");
-            checkException(ex, "type");
-        }
-    }
-
-    /**
-     * Test invalid extension name.
-     * 
-     * @since 2.2
-     */
-
-    public void testInvalidExtensionName() throws Exception
-    {
-        try
-        {
-            parseApp("InvalidExtensionName.application");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "Invalid$Extension");
-            checkException(ex, "extension name");
-        }
-    }
-
-    public void test_Malformed_Xml_Tag() throws Exception
-    {
-        try
-        {
-             parsePage("MalformedXmlTag.page");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "Element type \"binding\" must be followed by either attribute");
-        }
-    }
-
-    /**
-     * Test case where the document does not have a DOCTYPE
-     * 
-     * @since 2.2
-     */
-
-    public void testMissingDoctype() throws Exception
-    {
-        try
-        {
-            parseApp("MissingDoctype.application");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            // XML parsers tend to generate different exception messages,
-            // so make the condition as unspecific as possible
-            checkException(ex, "DOCTYPE");
-        }
-    }
-
-    /**
-     * Test case where the public id of the document is not known.
-     */
-
-    public void testInvalidPublicId() throws Exception
-    {
-        try
-        {
-            parseApp("InvalidPublicId.application");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "has an unexpected public id");
-        }
-    }
-
-    /**
-     * Test an an application specification can omit the name and engine-class attributes.
-     * 
-     * @since 3.0
-     */
-
-    public void testNulledApplication() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("NulledApplication.application");
-
-        assertNull(spec.getEngineClassName());
-        assertNull(spec.getName());
-        checkLine(spec, 25);
-
-        assertNotNull(spec.getSpecificationLocation());
-    }
-
-    /**
-     * Test new DTD 1.4 syntax for declaring components.
-     * 
-     * @since 3.0
-     */
-
-    public void testComponentType() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("ComponentType.application");
-
-        assertEquals("/path/Fred.jwc", spec.getComponentSpecificationPath("Fred"));
-    }
-
-    /**
-     * Test omitting the class name from a component specification (new, in DTD 1.4).
-     */
-
-    public void testNulledComponent() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("NulledComponent.jwc");
-
-        assertNull(spec.getComponentClassName());
-        checkLine(spec, 22);
-
-        assertEquals(false, spec.isPageSpecification());
-        assertNotNull(spec.getSpecificationLocation());
-
-        assertEquals(false, spec.isDeprecated());
-    }
-
-    /**
-     * Test omitting the class name from a component specification (new, in DTD 1.4).
-     */
-
-    public void testNulledPage() throws Exception
-    {
-        IComponentSpecification spec = parsePage("NulledPage.page");
-
-        assertNull(spec.getComponentClassName());
-        checkLine(spec, 22);
-
-        assertEquals(true, spec.isPageSpecification());
-        assertNotNull(spec.getSpecificationLocation());
-    }
-
-    /**
-     * Test the value attribute for the property element (which is new in DTD 1.4).
-     * 
-     * @since 3.0
-     */
-
-    public void testPropertyValue() throws Exception
-    {
-        IComponentSpecification spec = parsePage("PropertyValue.page");
-
-        checkLine(spec, 22);
-
-        assertEquals("rubble", spec.getProperty("barney"));
-        assertEquals("flintstone", spec.getProperty("wilma"));
-    }
-
-    /**
-     * Tests the new (in DTD 1.4) value attribute on static-binding element.
-     * 
-     * @since 3.0
-     */
-
-    public void testStaticBindingValue() throws Exception
-    {
-        IComponentSpecification spec = parsePage("StaticBindingValue.page");
-
-        checkLine(spec, 22);
-
-        IContainedComponent c = spec.getComponent("c");
-
-        checkLine(c, 24);
-
-        IBindingSpecification b = c.getBinding("fred");
-        checkLine(b, 25);
-
-        assertEquals("literal:flintstone", b.getValue());
-
-        b = c.getBinding("barney");
-        checkLine(b, 26);
-
-        assertEquals("literal:rubble", b.getValue());
-
-        b = c.getBinding("rock");
-        checkLine(b, 27);
-        assertEquals("literal:hudson", b.getValue());
-    }
-
-    public void testAttributeAndBody() throws Exception
-    {
-        try
-        {
-            parsePage("AttributeAndBody.page");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(
-                    ex,
-                    "It is not valid to specify a value for attribute 'value' of <static-binding> and provide a value in the body of the element.");
-        }
-    }
-
-    /**
-     * Tests the new (in DTD 1.4) value attribute on a configure element.
-     * 
-     * @since 3.0
-     */
-
-    public void testConfigureValue() throws Exception
-    {
-        ILibrarySpecification spec = parseLib("ConfigureValue.library");
-
-        checkLine(spec, 22);
-        checkLine(spec.getExtensionSpecification("bedrock"), 24);
-
-        Bedrock bedrock = (Bedrock) spec.getExtension("bedrock", Bedrock.class);
-
-        assertEquals("flintstone", bedrock.getFred());
-    }
-
-    /**
-     * Tests the new &lt;listener-binding&gt; element in the 1.4 DTD.
-     * 
-     * @since 3.0
-     */
-
-    public void testListenerBinding() throws Exception
-    {
-        Log log = newMock(Log.class);
-
-        SpecificationParser parser = new SpecificationParser(new DefaultErrorHandler(), log,
-                new DefaultClassResolver(), new SpecFactory());
-
-        parser.setBindingSource(newBindingSource());
-
-        Resource location = getSpecificationResourceLocation("ListenerBinding.page");
-
-        log
-                .warn("The <listener-binding> element is no longer supported (at classpath:/org/apache/tapestry/junit/parse/ListenerBinding.page, line 25, column 56).");
-
-        replay();
-
-        IComponentSpecification spec = parser.parsePageSpecification(location);
-
-        verify();
-
-        IContainedComponent cc = spec.getComponent("c");
-
-        assertNull(cc.getBinding("listener"));
-
-        IBindingSpecification bs = cc.getBinding("foo");
-
-        assertEquals(BindingType.PREFIXED, bs.getType());
-        assertEquals("literal:bar", bs.getValue());
-    }
-
-    /** @since 3.0 * */
-
-    public void testPropertySpecifications() throws Exception
-    {
-        IComponentSpecification spec = parsePage("PropertySpecifications.page");
-
-        checkList("propertySpecificationNames", new String[]
-        { "bool", "init", "longInitialValue", "persist" }, spec.getPropertySpecificationNames());
-
-        IPropertySpecification ps = spec.getPropertySpecification("bool");
-        assertEquals("bool", ps.getName());
-        assertEquals(false, ps.isPersistent());
-        assertEquals("boolean", ps.getType());
-        assertNull(ps.getInitialValue());
-        checkLine(ps, 24);
-
-        ps = spec.getPropertySpecification("init");
-        assertEquals("init", ps.getName());
-        assertEquals(false, ps.isPersistent());
-        assertNull(ps.getType());
-
-        // Starting with release 4.0, the initial value is a binding reference
-        // with an appropriate prefix. In 3.0 it was always an OGNL expression.
-
-        assertEquals("ognl:pageName", ps.getInitialValue());
-        checkLine(ps, 26);
-
-        ps = spec.getPropertySpecification("persist");
-        assertEquals("persist", ps.getName());
-        assertEquals(true, ps.isPersistent());
-        assertNull(ps.getType());
-        assertNull(ps.getInitialValue());
-        checkLine(ps, 25);
-
-        ps = spec.getPropertySpecification("longInitialValue");
-        assertEquals("ognl:long.initial.value", ps.getInitialValue());
-
-        ps = spec.getPropertySpecification("unknown");
-
-        assertNull(ps);
-    }
-
-    /** @since 3.0 * */
-
-    public void testMissingRequiredExtendedAttribute() throws Exception
-    {
-        try
-        {
-            parsePage("MissingRequiredExtendedAttribute.page");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(
-                    ex,
-                    "Element <binding> does not specify a value for attribute 'expression', or contain a body value.");
-        }
-    }
-
-    /** @since 3.0 * */
-
-    public void testMessageBeanInitializer() throws Exception
-    {
-        IComponentSpecification spec = parsePage("MessageBeanInitializer.page");
-
-        IBeanSpecification bs = spec.getBeanSpecification("fred");
-        checkLine(bs, 24);
-        BindingBeanInitializer i = (BindingBeanInitializer) bs.getInitializers().get(0);
-
-        assertEquals("barney", i.getPropertyName());
-        assertEquals("message:rubble", i.getBindingReference());
-        checkLine(i, 25);
-    }
-
-    /**
-     * Tests the DTD 3.0 <set-property>element
-     * 
-     * @since 4.0
-     */
-
-    public void testExpressionBeanInitializer() throws Exception
-    {
-        IComponentSpecification spec = parsePage("ExpressionBeanInitializer_3_0.page");
-
-        IBeanSpecification bs = spec.getBeanSpecification("zebean");
-
-        BindingBeanInitializer i = (BindingBeanInitializer) bs.getInitializers().get(0);
-
-        assertEquals("barney", i.getPropertyName());
-        assertEquals("ognl:rubble", i.getBindingReference());
-
-        i = (BindingBeanInitializer) bs.getInitializers().get(1);
-
-        assertEquals("fred", i.getPropertyName());
-        assertEquals("ognl:flintstone", i.getBindingReference());
-    }
-
-    /** @since 4.0 */
-
-    public void testBeanSet() throws Exception
-    {
-        IComponentSpecification spec = parsePage("BeanSet.page");
-        IBeanSpecification bs = spec.getBeanSpecification("target");
-
-        BindingBeanInitializer i = (BindingBeanInitializer) bs.getInitializers().get(0);
-
-        assertEquals("literal", i.getPropertyName());
-        assertEquals("literal-string", i.getBindingReference());
-
-    }
-
-    public void testInheritInformalParameters() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("TestInheritInformal.jwc");
-
-        IContainedComponent border = spec.getComponent("border");
-        assertEquals(border.getInheritInformalParameters(), false);
-
-        IContainedComponent textField = spec.getComponent("textField");
-        assertEquals(textField.getInheritInformalParameters(), true);
-    }
-
-    /** @since 4.0 */
-
-    public void testConfigureExtension() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("ConfigureExtension.application");
-        IExtensionSpecification es = spec.getExtensionSpecification("my-extension");
-
-        // Note: this is in transition; under 3.0 and earlier, the spec parser was
-        // responsible for converting values into object types ... that is now
-        // done futher down stream.
-
-        assertEquals("-227", es.getConfiguration().get("long"));
-        assertEquals("22.7", es.getConfiguration().get("double"));
-        assertEquals("true", es.getConfiguration().get("boolean"));
-        assertEquals("An extended string.", es.getConfiguration().get("string"));
-    }
-
-    public void testConfigureExtensionProperty() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("ConfigureExtension.application");
-        IExtensionSpecification es = spec.getExtensionSpecification("my-extension");
-
-        assertEquals("my-value", es.getProperty("my-property"));
-    }
-
-    /** @since 4.0 */
-
-    public void testComponentProperty() throws Exception
-    {
-        IComponentSpecification cs = parseComponent("ComponentProperty.jwc");
-
-        IContainedComponent cc = cs.getComponent("body");
-
-        assertEquals("my-value", cc.getProperty("my-property"));
-    }
-
-    /** @since 4.0 */
-
-    public void testComponentInjectProperty() throws Exception
-    {
-        IComponentSpecification cs = parseComponent("ComponentInjectProperty.jwc");
-
-        IContainedComponent cc = cs.getComponent("body");
-
-        assertEquals("myProperty", cc.getPropertyName());
-
-        cc = cs.getComponent("fred");
-
-        assertNull(cc.getPropertyName());
-    }
-
-    /** @since 4.0 */
-
-    public void testBeanDescription() throws Exception
-    {
-        IComponentSpecification cs = parseComponent("BeanDescription.jwc");
-        IBeanSpecification bs = cs.getBeanSpecification("mybean");
-
-        assertEquals("Description of mybean.", bs.getDescription());
-        assertNotNull(bs.getLocation());
-    }
-
-    /** @since 4.0 */
-
-    public void testBeanProperty() throws Exception
-    {
-        IComponentSpecification cs = parseComponent("BeanDescription.jwc");
-        IBeanSpecification bs = cs.getBeanSpecification("mybean");
-
-        assertEquals("myvalue", bs.getProperty("myproperty"));
-    }
-
-    /**
-     * @since 4.0
-     */
-
-    public void testBeanInject() throws Exception
-    {
-        IComponentSpecification cs = parseComponent("BeanInject.jwc");
-        IBeanSpecification bs = cs.getBeanSpecification("bean");
-        assertEquals("myProperty", bs.getPropertyName());
-    }
-
-    /**
-     * @since 4.0
-     */
-
-    public void testBeanInitializer() throws Exception
-    {
-        IComponentSpecification cs = parseComponent("BeanInitializer.jwc");
-        IBeanSpecification bs = cs.getBeanSpecification("bean");
-
-        List l = bs.getInitializers();
-        LightweightBeanInitializer lbi = (LightweightBeanInitializer) l.get(0);
-
-        assertEquals("foo=bar", lbi.getPropertyName());
-    }
-
-    /** @since 4.0 */
-
-    public void testLibraryDescription() throws Exception
-    {
-        ILibrarySpecification ls = parseLib("LibraryDescription.library");
-
-        assertEquals("Often, these are just placeholders.", ls.getDescription());
-    }
-
-    /** @since 4.0 */
-
-    public void testPageDescription() throws Exception
-    {
-        IComponentSpecification spec = parsePage("PageDescription.page");
-
-        assertEquals("Description of this page.", spec.getDescription());
-    }
-
-    /**
-     * Excercies the check that the correct root element is used.
-     * 
-     * @since 4.0
-     */
-
-    public void testRootElementMismatch() throws Exception
-    {
-        try
-        {
-            parseComponent("NulledPage.page");
-            unreachable();
-        }
-        catch (Exception ex)
-        {
-            checkException(
-                    ex,
-                    "Incorrect document type; expected page-specification but received component-specification.");
-        }
-    }
-
-    /**
-     * Checks to make sure that a application or library may not defined a lbirary with id
-     * 'framework'.
-     * 
-     * @since 4.0
-     */
-
-    public void testLibraryFrameworkNamespace() throws Exception
-    {
-        try
-        {
-            parseLib("LibraryFrameworkNamespace.library");
-            unreachable();
-        }
-        catch (Exception ex)
-        {
-            checkException(ex, "The library id 'framework' is reserved and may not be used.");
-        }
-    }
-
-    /**
-     * Tests that a &lt;component&gt; element may not have both type and copy-of attributes.
-     * 
-     * @since 4.0
-     */
-
-    public void testComponentWithTypeAndCopyOf() throws Exception
-    {
-        try
-        {
-            parseComponent("ComponentWithTypeAndCopyOf.jwc");
-            unreachable();
-        }
-        catch (Exception ex)
-        {
-            checkException(ex, "Contained component bad contains both type and copy-of attributes.");
-        }
-    }
-
-    /**
-     * Tests that &lt;component&gt; must have either type or copy-of attribute.
-     * 
-     * @since 4.0
-     */
-
-    public void testComponentWithoutType() throws Exception
-    {
-        try
-        {
-            parseComponent("ComponentWithoutType.jwc");
-            unreachable();
-        }
-        catch (Exception ex)
-        {
-            checkException(
-                    ex,
-                    "Contained component bad does not specify attribute type or copy-of.");
-        }
-    }
-
-    /**
-     * Tests the use of copy-of attribute inside &lt;component&gt;.
-     * 
-     * @since 4.0
-     */
-
-    public void testComponentCopyOf() throws Exception
-    {
-        IComponentSpecification cs = parseComponent("ComponentCopyOf.jwc");
-
-        IContainedComponent source = cs.getComponent("source");
-        IContainedComponent copy = cs.getComponent("copy");
-        IContainedComponent override = cs.getComponent("override");
-
-        assertEquals("Insert", source.getType());
-        assertEquals("Insert", copy.getType());
-        assertEquals("Insert", override.getType());
-
-        IBindingSpecification b = source.getBinding("value");
-
-        assertEquals(BindingType.PREFIXED, b.getType());
-        assertEquals("ognl:date", b.getValue());
-
-        assertSame(b, copy.getBinding("value"));
-
-        IBindingSpecification b2 = override.getBinding("value");
-        assertEquals("ognl:tomorrow", b2.getValue());
-
-        b = copy.getBinding("foo");
-
-        assertSame(b, override.getBinding("foo"));
-
-        b = copy.getBinding("formatter");
-
-        assertSame(b, override.getBinding("formatter"));
-    }
-
-    /**
-     * And here's what happens when copy-of doesn't match a known component.
-     * 
-     * @since 4.0
-     */
-    public void testComponentBadCopy()
-    {
-        try
-        {
-            parseComponent("ComponentBadCopy.jwc");
-            unreachable();
-        }
-        catch (Exception ex)
-        {
-            checkException(ex, "Unable to copy component missing, which does not exist.");
-        }
-    }
-
-    /** @since 4.0 */
-    public void testMeta() throws Exception
-    {
-        ILibrarySpecification spec = parseLib("Meta.library");
-
-        assertEquals("bar", spec.getProperty("foo"));
-        assertEquals("long value", spec.getProperty("long"));
-    }
-
-    /** @since 4.0 */
-    public void testInject() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("Inject.jwc");
-
-        List l = spec.getInjectSpecifications();
-
-        assertEquals(2, l.size());
-
-        InjectSpecification i1 = (InjectSpecification) l.get(0);
-
-        assertEquals("fred", i1.getProperty());
-        assertEquals("object", i1.getType());
-        assertEquals("flintstone", i1.getObject());
-        assertNotNull(i1.getLocation());
-
-        InjectSpecification i2 = (InjectSpecification) l.get(1);
-        assertEquals("barney", i2.getProperty());
-        assertEquals("state", i2.getType());
-        assertEquals("rubble", i2.getObject());
-        assertNotNull(i2.getLocation());
-    }
-
-    /**
-     * Test that the new &lt;property&gt; element (was &lt;property-specification&gt; in release
-     * 3.0) works correctly.
-     * 
-     * @since 4.0
-     */
-
-    public void testProperty() throws Exception
-    {
-        IComponentSpecification spec = parsePage("Property.page");
-
-        checkList("propertySpecificationNames", new String[]
-        { "bool", "init", "longInit", "persist" }, spec.getPropertySpecificationNames());
-
-        IPropertySpecification ps = spec.getPropertySpecification("bool");
-        assertEquals("bool", ps.getName());
-        assertEquals(false, ps.isPersistent());
-
-        // In a 4.0 DTD, type is always null.
-        assertNull(ps.getType());
-
-        // Note that no prefix is added. Initial value will be a string literal,
-        // or have a prefix and be something else.
-
-        assertNull(ps.getInitialValue());
-        checkLine(ps, 24);
-
-        ps = spec.getPropertySpecification("init");
-        assertEquals("init", ps.getName());
-        assertEquals(false, ps.isPersistent());
-
-        assertEquals("ognl:pageName", ps.getInitialValue());
-        checkLine(ps, 26);
-
-        ps = spec.getPropertySpecification("persist");
-        assertEquals("persist", ps.getName());
-        assertEquals(true, ps.isPersistent());
-        assertNull(ps.getInitialValue());
-        checkLine(ps, 25);
-
-        ps = spec.getPropertySpecification("longInit");
-        assertEquals("message:long-init-key", ps.getInitialValue());
-
-        ps = spec.getPropertySpecification("unknown");
-
-        assertNull(ps);
-    }
-
-    /**
-     * Tests parameters specification from a 3.0 DTD
-     * 
-     * @since 4.0
-     */
-
-    public void testParameter_3_0() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("Parameter_3_0.jwc");
-
-        IParameterSpecification ps = spec.getParameter("noDefault");
-
-        assertEquals("noDefault", ps.getPropertyName());
-        assertEquals("noDefault", ps.getParameterName());
-        assertEquals(true, ps.isRequired());
-        assertEquals("bar", ps.getType());
-        assertNull(ps.getDefaultValue());
-        assertEquals(false, ps.isDeprecated());
-
-        ps = spec.getParameter("withDefault");
-        assertEquals("withDefault", ps.getParameterName());
-        assertNull(ps.getType());
-        assertEquals(false, ps.isRequired());
-
-        // For 3.0 DTDs, where the default value was always an OGNL expression,
-        // the parser will provide the "ognl:" prefix.
-
-        assertEquals("ognl:an.expression", ps.getDefaultValue());
-
-        ps = spec.getParameter("withDescription");
-        assertEquals("A parameter with a description.", ps.getDescription());
-
-        ps = spec.getParameter("altName");
-        assertEquals("altNameParameter", ps.getPropertyName());
-
-        ps = spec.getParameter("directionIn");
-        assertEquals(true, ps.getCache());
-
-        ps = spec.getParameter("directionAuto");
-        assertEquals(false, ps.getCache());
-    }
-
-    /**
-     * Tests the new way default-value is interpreted (as a binding-like value, prefixed to indicate
-     * type).
-     * 
-     * @since 4.0
-     */
-
-    public void testParameter() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("Parameter.jwc");
-
-        IParameterSpecification ps = spec.getParameter("noDefault");
-
-        assertNull(ps.getDefaultValue());
-        assertEquals(true, ps.getCache());
-        assertTrue(ps.getAliasNames().isEmpty());
-        assertEquals(false, ps.isDeprecated());
-
-        ps = spec.getParameter("literalDefault");
-
-        assertEquals("literal-value", ps.getDefaultValue());
-
-        ps = spec.getParameter("expressionDefault");
-
-        assertEquals("ognl:an.expression", ps.getDefaultValue());
-
-        ps = spec.getParameter("noCache");
-        assertEquals(false, ps.getCache());
-
-        ps = spec.getParameter("withAliases");
-        assertListEquals(new String[]
-        { "fred", "barney" }, ps.getAliasNames().toArray());
-
-        assertSame(ps, spec.getParameter("fred"));
-        assertSame(ps, spec.getParameter("barney"));
-
-        ps = spec.getParameter("deprecated");
-        assertEquals(true, ps.isDeprecated());
-    }
-
-    /**
-     * Tests that assets read using the 3.0 DTD are converted properly into paths with the proper
-     * prefix.
-     * 
-     * @since 4.0
-     */
-    public void testAssets_3_0() throws Exception
-    {
-        IComponentSpecification cs = parsePage("Assets_3_0.page");
-
-        IAssetSpecification as = cs.getAsset("mycontext");
-
-        assertEquals("context:path/to/context", as.getPath());
-
-        as = cs.getAsset("myprivate");
-
-        assertEquals("classpath:path/to/private", as.getPath());
-
-        as = cs.getAsset("myexternal");
-
-        assertEquals("http://myexternal/asset", as.getPath());
-
-        assertListEquals(new String[]
-        { "mycontext", "myexternal", "myprivate" }, cs.getAssetNames());
-    }
-
-    /** @since 4.0 */
-
-    public void testAssets() throws Exception
-    {
-        IComponentSpecification cs = parsePage("Assets.page");
-
-        IAssetSpecification as = cs.getAsset("myasset");
-
-        assertEquals("path/to/asset", as.getPath());
-        assertEquals("myProperty", as.getPropertyName());
-    }
-
-    /** @since 4.0 */
-
-    public void testDeprecatedComponent() throws Exception
-    {
-        IComponentSpecification cs = parseComponent("DeprecatedComponent.jwc");
-
-        assertEquals(true, cs.isDeprecated());
-    }
-
-    /** @since 4.0 */
-
-    public void testLibrarySlashInComponentType() throws Exception
-    {
-        ILibrarySpecification ls = parseLib("SlashInComponentType.library");
-
-        List types = ls.getComponentTypes();
-
-        assertEquals(1, types.size());
-
-        assertEquals("foo/Bar", types.get(0));
-
-        assertEquals("foocomponents/BarComponent.jwc", ls.getComponentSpecificationPath("foo/Bar"));
-    }
-
-    /** @since 4.0 */
-
-    public void testComponentSlashInComponentType() throws Exception
-    {
-        IComponentSpecification cs = parseComponent("SlashInComponentType.jwc");
-
-        IContainedComponent cc = cs.getComponent("fred");
-
-        assertEquals("rubble/Barney", cc.getType());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestTemplateParser.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestTemplateParser.java
deleted file mode 100644
index 9c65bce..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestTemplateParser.java
+++ /dev/null
@@ -1,688 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.parse;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.parse.ITemplateParserDelegate;
-import org.apache.tapestry.parse.LocalizationToken;
-import org.apache.tapestry.parse.OpenToken;
-import org.apache.tapestry.parse.TemplateParseException;
-import org.apache.tapestry.parse.TemplateParser;
-import org.apache.tapestry.parse.TemplateToken;
-import org.apache.tapestry.parse.TemplateTokenFactory;
-import org.apache.tapestry.parse.TextToken;
-import org.apache.tapestry.parse.TokenType;
-import org.testng.annotations.Test;
-
-/**
- * Tests for the Tapestry HTML template parser.
- * 
- * @author Howard Lewis Ship
- */
-@Test
-public class TestTemplateParser extends BaseComponentTestCase
-{
-    private static class ParserDelegate implements ITemplateParserDelegate
-    {
-        private final String _componentAttributeName;
-
-        public ParserDelegate()
-        {
-            this("jwcid");
-        }
-
-        public ParserDelegate(String componentAttributeName)
-        {
-            _componentAttributeName = componentAttributeName;
-        }
-
-        public boolean getKnownComponent(String componentId)
-        {
-            return true;
-        }
-
-        public boolean getAllowBody(String componentId, Location location)
-        {
-            return true;
-        }
-
-        public boolean getAllowBody(String libraryId, String type, Location location)
-        {
-            return true;
-        }
-
-        public String getComponentAttributeName()
-        {
-            return _componentAttributeName;
-        }
-    }
-
-    protected TemplateToken[] run(char[] templateData, ITemplateParserDelegate delegate,
-            Resource location) throws TemplateParseException
-    {
-        TemplateParser parser = new TemplateParser();
-        
-        parser.setFactory(new TemplateTokenFactory());
-        
-        return parser.parse(templateData, delegate, location);
-    }
-
-    protected TemplateToken[] run(InputStream stream, ITemplateParserDelegate delegate,
-            Resource location) throws TemplateParseException
-    {
-        
-        char[] data = null;
-        
-        try
-        {
-            data = IOUtils.toCharArray(stream, "US-ASCII");
-            
-            stream.close();
-        }
-        catch (IOException ex)
-        {
-            fail("Unable to read from stream.");
-        }
-        
-        return run(data, delegate, location);
-    }
-
-    protected TemplateToken[] run(String file) throws TemplateParseException
-    {
-        return run(file, new ParserDelegate());
-    }
-
-    protected TemplateToken[] run(String file, ITemplateParserDelegate delegate)
-            throws TemplateParseException
-    {
-        String thisClassName = getClass().getName();
-        String thisPath = "/" + thisClassName.replace('.', '/') + "/" + file;
-        
-        Resource location = new ClasspathResource(new DefaultClassResolver(), thisPath);
-        
-        InputStream stream = getClass().getResourceAsStream(file);
-        
-        if (stream == null)
-            throw new TemplateParseException("File " + file + " not found.");
-        
-        return run(stream, delegate, location);
-    }
-
-    private Map buildMap(String[] input)
-    {
-        Map result = new HashMap();
-
-        for (int i = 0; i < input.length; i += 2)
-            result.put(input[i], input[i + 1]);
-
-        return result;
-    }
-
-    // Note: the API of TextToken changed ... from startIndex/endIndex to offset/length.
-    // Rather than change *all* the tests, we'll just adjust here.
-
-    protected void assertTextToken(TemplateToken token, int startIndex, int endIndex)
-    {
-        TextToken t = (TextToken) token;
-        
-        int expectedLength = endIndex - startIndex + 1;
-        
-        assertEquals(TokenType.TEXT, t.getType());
-        assertEquals(startIndex, t.getOffset());
-        assertEquals(expectedLength, t.getLength());
-    }
-    
-    protected void assertText(TextToken token, int offset, int length)
-    {
-        assertEquals(token.getOffset(), offset);
-        assertEquals(token.getLength(), length);
-    }
-    
-    /** @since 3.0 * */
-    
-    protected void checkLine(TemplateToken token, int line)
-    {
-        assertEquals(line, token.getLocation().getLineNumber());
-    }
-
-    /** @since 2.0.4 * */
-
-    protected void assertLocalizationToken(TemplateToken token, String key, Map attributes, int line)
-    {
-        LocalizationToken t = (LocalizationToken) token;
-
-        assertEquals(TokenType.LOCALIZATION, t.getType());
-        assertEquals( key, t.getKey());
-
-        assertEquals(attributes, t.getAttributes());
-
-        checkLine(token, line);
-    }
-
-    protected void assertOpenToken(TemplateToken token, String id, String tag, int line)
-    {
-        assertOpenToken(token, id, null, tag, line);
-    }
-
-    protected void assertOpenToken(TemplateToken token, String id, String componentType,
-            String tag, int line)
-    {
-        OpenToken t = (OpenToken) token;
-
-        assertEquals(t.getType(), TokenType.OPEN);
-        assertEquals(t.getId(), id);
-        assertEquals(t.getComponentType(), componentType);
-        assertEquals(t.getTag(), tag);
-
-        checkLine(token, line);
-    }
-
-    protected void assertTemplateAttributes(TemplateToken token, Map expected)
-    {
-        OpenToken t = (OpenToken) token;
-
-        assertEquals(t.getAttributesMap(), expected);
-    }
-
-    protected void assertCloseToken(TemplateToken token, int line)
-    {
-        assertEquals(token.getType(), TokenType.CLOSE);
-        
-        checkLine(token, line);
-    }
-
-    protected void assertTokenCount(TemplateToken[] tokens, int count)
-    {
-        assertNotNull(tokens);
-        assertEquals(tokens.length, count);
-    }
-
-    private void runFailure(String file, String message)
-    {
-        runFailure(file, new ParserDelegate(), message);
-    }
-
-    private void runFailure(String file, ITemplateParserDelegate delegate, String message)
-    {
-        try
-        {
-            run(file, delegate);
-
-            fail("Invalid document " + file + " parsed without exception.");
-        }
-        catch (TemplateParseException ex)
-        {
-            assertEquals(message, ex.getMessage());
-            assertTrue(ex.getLocation().toString().indexOf(file) > 0);
-        }
-    }
-
-    public void testAllStatic() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("AllStatic.html");
-        
-        assertTokenCount(tokens, 1);
-        assertTextToken(tokens[0], 0, 172);
-    }
-
-    public void testSingleEmptyTag() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("SingleEmptyTag.html");
-
-        assertTokenCount(tokens, 4);
-
-        assertTextToken(tokens[0], 0, 38);
-        assertOpenToken(tokens[1], "emptyTag", "span", 3);
-        assertCloseToken(tokens[2], 3);
-        assertTextToken(tokens[3], 63, 102);
-    }
-
-    public void testSimpleNested() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("SimpleNested.html");
-
-        assertTokenCount(tokens, 8);
-        assertOpenToken(tokens[1], "outer", "span", 3);
-        assertOpenToken(tokens[3], "inner", "span", 4);
-        assertCloseToken(tokens[4], 4);
-        assertCloseToken(tokens[6], 5);
-    }
-
-    public void testMixedNesting() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("MixedNesting.html");
-
-        assertTokenCount(tokens, 5);
-        assertOpenToken(tokens[1], "row", "span", 4);
-        assertCloseToken(tokens[3], 7);
-    }
-
-    public void testSingleQuotes() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("SingleQuotes.html");
-
-        assertTokenCount(tokens, 7);
-        assertOpenToken(tokens[1], "first", "span", 5);
-        assertOpenToken(tokens[4], "second", "span", 7);
-    }
-
-    public void testComplex() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("Complex.html");
-
-        assertTokenCount(tokens, 19);
-
-        // Just pick a few highlights out of it.
-
-        assertOpenToken(tokens[1], "ifData", "span", 3);
-        assertOpenToken(tokens[3], "e", "span", 10);
-        assertOpenToken(tokens[5], "row", "tr", 11);
-    }
-
-    public void testStartWithStaticTag() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("StartWithStaticTag.html");
-
-        assertTokenCount(tokens, 4);
-        assertTextToken(tokens[0], 0, 232);
-        assertOpenToken(tokens[1], "justBecause", "span", 9);
-    }
-
-    public void testUnterminatedCommentFailure()
-    {
-        runFailure("UnterminatedComment.html", "Comment on line 3 did not end.");
-    }
-
-    public void testUnclosedOpenTagFailure()
-    {
-        runFailure("UnclosedOpenTag.html", "Tag <body> on line 4 is never closed.");
-    }
-
-    public void testMissingAttributeValueFailure()
-    {
-        runFailure(
-                "MissingAttributeValue.html",
-                "Tag <img> on line 9 is missing a value for attribute src.");
-    }
-
-    public void testIncompleteCloseFailure()
-    {
-        runFailure("IncompleteClose.html", "Incomplete close tag on line 6.");
-    }
-
-    public void testMismatchedCloseTagsFailure()
-    {
-        runFailure(
-                "MismatchedCloseTags.html",
-                "Closing tag </th> on line 9 does not have a matching open tag.");
-    }
-
-    public void testInvalidDynamicNestingFailure()
-    {
-        runFailure(
-                "InvalidDynamicNesting.html",
-                "Closing tag </body> on line 12 is improperly nested with tag <span> on line 8.");
-    }
-
-    public void testUnknownComponentIdFailure()
-    {
-        ITemplateParserDelegate delegate = new ITemplateParserDelegate()
-        {
-            public boolean getKnownComponent(String componentId)
-            {
-                return !componentId.equals("row");
-            }
-
-            public boolean getAllowBody(String componentId, Location location)
-            {
-                return true;
-            }
-
-            public boolean getAllowBody(String libraryId, String type, Location location)
-            {
-                return true;
-            }
-
-            public String getComponentAttributeName()
-            {
-                return "jwcid";
-            }
-        };
-
-        runFailure(
-                "Complex.html",
-                delegate,
-                "Tag <tr> on line 11 references unknown component id 'row'.");
-    }
-
-    public void testBasicRemove() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("BasicRemove.html");
-
-        assertTokenCount(tokens, 10);
-        assertTextToken(tokens[0], 0, 119);
-        assertTextToken(tokens[1], 188, 268);
-        assertOpenToken(tokens[2], "e", "span", 23);
-        assertTextToken(tokens[3], 341, 342);
-        assertOpenToken(tokens[4], "row", "tr", 24);
-        assertTextToken(tokens[5], 359, 377);
-        assertCloseToken(tokens[6], 26);
-        assertTextToken(tokens[7], 383, 383);
-        assertCloseToken(tokens[8], 27);
-        assertTextToken(tokens[9], 391, 401);
-    }
-
-    public void testBodyRemove() throws TemplateParseException
-    {
-        ITemplateParserDelegate delegate = new ITemplateParserDelegate()
-        {
-            public boolean getKnownComponent(String id)
-            {
-                return true;
-            }
-
-            public boolean getAllowBody(String id, Location location)
-            {
-                return id.equals("form");
-            }
-
-            public boolean getAllowBody(String libraryId, String type, Location location)
-            {
-                return true;
-            }
-
-            public String getComponentAttributeName()
-            {
-                return "jwcid";
-            }
-        };
-
-        TemplateToken[] tokens = run("BodyRemove.html", delegate);
-
-        assertTokenCount(tokens, 8);
-        assertOpenToken(tokens[1], "form", "form", 9);
-        assertOpenToken(tokens[3], "inputType", "select", 11);
-        assertCloseToken(tokens[4], 15);
-        assertCloseToken(tokens[6], 16);
-    }
-
-    public void testRemovedComponentFailure()
-    {
-        runFailure(
-                "RemovedComponent.html",
-                "Tag <span> on line 5 is a dynamic component, and may not appear inside an ignored block.");
-    }
-
-    public void testNestedRemoveFailure()
-    {
-        runFailure(
-                "NestedRemove.html",
-                "Tag <span> on line 4 should be ignored, but is already inside "
-                        + "an ignored block (ignored blocks may not be nested).");
-    }
-
-    public void testBasicContent() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("BasicContent.html");
-
-        assertTokenCount(tokens, 4);
-        assertTextToken(tokens[0], 108, 165);
-        assertOpenToken(tokens[1], "nested", "span", 9);
-        assertCloseToken(tokens[2], 9);
-        assertTextToken(tokens[3], 188, 192);
-    }
-
-    public void testIgnoredContentFailure()
-    {
-        runFailure(
-                "IgnoredContent.html",
-                "Tag <td> on line 7 is the template content, and may not be in an ignored block.");
-    }
-
-    public void testTagAttributes() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("TagAttributes.html");
-
-        assertTokenCount(tokens, 5);
-        assertOpenToken(tokens[1], "tag", null, "span", 3);
-
-        assertTemplateAttributes(tokens[1], buildMap(new String[]
-        { "class", "zip", "align", "right", "color", "#ff00ff" }));
-
-    }
-
-    /**
-     * @since 2.0.4
-     */
-
-    public void test_Basic_Localization() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("BasicLocalization.html");
-        
-        assertTokenCount(tokens, 7);
-        assertTextToken(tokens[0], 0, 35);
-        assertLocalizationToken(tokens[1], "the.localization.key", null, 3);
-        assertText((TextToken)tokens[2], 87, 44);
-        assertLocalizationToken(tokens[3], "hello-key", null, 7);
-        assertText((TextToken)tokens[4], 165, 1);
-        assertLocalizationToken(tokens[5], "world-key", null, 7);
-        assertText((TextToken)tokens[6], 200, 1);
-    }
-
-    /**
-     * Test that the parser fails if a localization block contains a component.
-     * 
-     * @since 2.0.4
-     */
-
-    public void testComponentInsideLocalization()
-    {
-        runFailure(
-                "ComponentInsideLocalization.html",
-                "Tag <span> on line 9 is a dynamic component, and may not appear inside an ignored block.");
-    }
-
-    /**
-     * Test that the parser fails if an invisible localization is nested within another invisible
-     * localization.
-     * 
-     * @since 2.0.4
-     */
-
-    public void testNestedLocalizations()
-    {
-        runFailure(
-                "NestedLocalizations.html",
-                "Tag <span> on line 4 is a dynamic component, and may not appear inside an ignored block.");
-    }
-
-    /**
-     * Test that the abbreviated form (a tag with no body) works.
-     * 
-     * @since 2.0.4
-     */
-
-    public void test_Empty_Localization() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("EmptyLocalization.html");
-
-        assertTokenCount(tokens, 3);
-        assertTextToken(tokens[0], 0, 62);
-        assertLocalizationToken(tokens[1], "empty.localization", null, 3);
-        assertTextToken(tokens[2], 95, 122);
-    }
-
-    /**
-     * Test attributes in the span. Also, checks that the parser caselessly identifies the "key"
-     * attribute and the tag name ("span").
-     * 
-     * @since 2.0.4
-     */
-
-    public void testLocalizationAttributes() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("LocalizationAttributes.html");
-
-        Map attributes = buildMap(new String[] { "alpha", "beta", "Fred", "Wilma" });
-        
-        assertLocalizationToken(tokens[1], "localization.with.attributes", attributes, 3);
-    }
-
-    /**
-     * Tests for implicit components (both named and anonymous).
-     * 
-     * @since 3.0
-     */
-
-    public void testImplicitComponents() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("ImplicitComponents.html");
-
-        assertTokenCount(tokens, 18);
-
-        assertOpenToken(tokens[1], "$Body", "Body", "body", 4);
-        assertOpenToken(tokens[3], "loop", "For", "tr", 7);
-
-        assertTemplateAttributes(tokens[3], buildMap(new String[]
-        { "element", "tr", "source", "ognl:items" }));
-
-        assertOpenToken(tokens[5], "$Insert", "Insert", "span", 10);
-
-        assertTemplateAttributes(tokens[5], buildMap(new String[]
-        { "value", "ognl:components.loop.value.name" }));
-
-        assertOpenToken(tokens[8], "$Insert_0", "Insert", "span", 11);
-
-        assertTemplateAttributes(tokens[8], buildMap(new String[]
-        { "value", "ognl:components.loop.value.price" }));
-
-        assertOpenToken(tokens[13], "$InspectorButton", "contrib:InspectorButton", "span", 15);
-    }
-
-    /**
-     * Test for encoded characters in an expression.
-     * 
-     * @since 3.0
-     */
-
-    public void testEncodedExpressionCharacters() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("EncodedExpressionCharacters.html");
-
-        assertTokenCount(tokens, 3);
-
-        assertOpenToken(tokens[0], "$Insert", "Insert", "span", 1);
-
-        String expression = "ognl: { \"<&>\", \"Fun!\" }";
-
-        assertTemplateAttributes(tokens[0], buildMap(new String[]
-        { "value", expression }));
-
-    }
-
-    /**
-     * Test ability to read string attributes.
-     */
-
-    public void testStringAttributes() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("StringAttributes.html");
-
-        assertTokenCount(tokens, 4);
-
-        assertOpenToken(tokens[1], "$Image", "Image", "img", 2);
-
-        assertTemplateAttributes(tokens[1], buildMap(new String[]
-        { "image", "ognl:assets.logo", "alt", "message:logo-title" }));
-
-    }
-
-    /**
-     * Test ability to use a different attribute name than the default ("jwcid").
-     * 
-     * @since 4.0
-     */
-
-    public void testOverrideDefaultAttributeName() throws Exception
-    {
-        TemplateToken[] tokens = run("OverrideDefaultAttributeName.html", new ParserDelegate("id"));
-
-        assertTokenCount(tokens, 8);
-        assertOpenToken(tokens[1], "outer", "span", 3);
-        assertOpenToken(tokens[3], "inner", "span", 4);
-        assertCloseToken(tokens[4], 4);
-        assertCloseToken(tokens[6], 5);
-    }
-
-    /**
-     * Like {@link #testOverrideDefaultAttributeName()}, but uses a more complicated attribute name
-     * (with a XML-style namespace prefix).
-     */
-
-    public void testNamespaceAttributeName() throws Exception
-    {
-        TemplateToken[] tokens = run("NamespaceAttributeName.html", new ParserDelegate("t:id"));
-        
-        assertTokenCount(tokens, 8);
-        assertOpenToken(tokens[1], "outer", "span", 3);
-        assertOpenToken(tokens[3], "inner", "span", 4);
-        assertCloseToken(tokens[4], 4);
-        assertCloseToken(tokens[6], 5);
-    }
-    
-    /** @since 4.0 */
-    public void testDuplicateTagAttributeFailure()
-    {
-        runFailure(
-                "DuplicateTagAttribute.html",
-                "Tag <input> on line 3 contains more than one 'value' attribute.");
-    }
-
-    /** @since 4.0 */
-    public void testDuplicateTagAttributeFailureSingleQuotes()
-    {
-        runFailure(
-                "DuplicateTagAttributeSingleQuotes.html",
-                "Tag <input> on line 3 contains more than one 'value' attribute.");
-    }
-
-    /** @since 4.0 */
-    public void testSlashInComponentType() throws Exception
-    {
-        TemplateToken[] tokens = run("SlashInComponentType.html", new ParserDelegate());
-
-        assertEquals(6, tokens.length);
-
-        OpenToken token1 = (OpenToken) tokens[1];
-
-        assertEquals("$foo$Bar", token1.getId());
-        assertEquals("foo/Bar", token1.getComponentType());
-
-        OpenToken token2 = (OpenToken) tokens[4];
-
-        assertEquals("baz", token2.getId());
-        assertEquals("biff/bop/Boop", token2.getComponentType());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/UnclosedOpenTag.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/UnclosedOpenTag.html
deleted file mode 100644
index 08315eb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/UnclosedOpenTag.html
+++ /dev/null
@@ -1,4 +0,0 @@
-This test shows how what happens when a tag is never closed.
-
-<html>
-<body
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/UnterminatedComment.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/UnterminatedComment.html
deleted file mode 100644
index d565ac6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/UnterminatedComment.html
+++ /dev/null
@@ -1,8 +0,0 @@
-This file tests for an unterminated comment.
-
-<!-- This is the start of the comment.
-
-<span jwcid="foo"/>
-
-This is still the comment; a typical failure is to forget to close it.
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ValidLibrary.library b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ValidLibrary.library
deleted file mode 100644
index 8ac86f4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ValidLibrary.library
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<!--  Specification used in a series of tests to check successful parsing of a LibrarySpecification. -->
-	
-<library-specification>
-	
-	<page name="FirstPage" specification-path="/FirstPage.page"/>
-	<page name="SecondPage" specification-path="/SecondPage.page"/>
-	
-	<component-type type="FirstComponent" specification-path="/FirstComponent.jwc"/>
-	<component-type type="SecondComponent" specification-path="/SecondComponent.jwc"/>
-	
-	<library id="lib1" specification-path="/Library1.library"/>
-	<library id="lib2" specification-path="/Library2.library"/>
-
-</library-specification>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ValidParameterName.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ValidParameterName.jwc
deleted file mode 100644
index 790e5fd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/parse/ValidParameterName.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification>
-
-	<parameter name="valid"/>
-
-</component-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/MockScriptProcessor.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/MockScriptProcessor.java
deleted file mode 100644
index 454e510..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/MockScriptProcessor.java
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.script;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IScriptProcessor;
-import org.apache.tapestry.util.IdAllocator;
-import org.apache.tapestry.util.PageRenderSupportImpl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Used by {@link org.apache.tapestry.junit.script.TestScript}.
- *
- * @author Howard Lewis Ship
- * @since 3.0
- */
-public class MockScriptProcessor implements IScriptProcessor
-{
-    private StringBuffer _body;
-
-    private StringBuffer _initialization;
-
-    private StringBuffer _postInitialization;
-
-    private List _externalScripts;
-
-    private IdAllocator _idAllocator = new IdAllocator();
-
-    public void reset()
-    {
-        if (_body != null)
-            _body.delete(0, _body.length());
-        if (_initialization != null)
-            _initialization.delete(0, _initialization.length());
-        if (_externalScripts != null)
-            _externalScripts.clear();
-        _idAllocator.clear();
-    }
-
-    public void addBodyScript(String script)
-    {
-        addBodyScript(null, script);
-    }
-
-    public void addBodyScript(IComponent target, String script)
-    {
-        if (_body == null)
-            _body = new StringBuffer();
-
-        _body.append(script);
-    }
-
-    public String getBody()
-    {
-        if (_body == null)
-            return null;
-
-        return _body.toString();
-    }
-
-    public void addInitializationScript(String script)
-    {
-        addInitializationScript(null, script);
-    }
-
-    public void addInitializationScript(IComponent target, String script)
-    {
-        if (_initialization == null)
-            _initialization = new StringBuffer();
-
-        _initialization.append(script);
-    }
-
-    public void addScriptAfterInitialization(IComponent target, String script)
-    {
-        if (_postInitialization == null)
-            _postInitialization = new StringBuffer();
-
-        _postInitialization.append(script);
-    }
-
-    public String getInitialization()
-    {
-        if (_initialization == null && _postInitialization == null)
-            return null;
-
-        return PageRenderSupportImpl.getContent(_initialization)
-               + PageRenderSupportImpl.getContent(_postInitialization);
-    }
-
-    public void addExternalScript(Resource scriptResource)
-    {
-        addExternalScript(null, scriptResource);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isBodyScriptAllowed(IComponent target)
-    {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isExternalScriptAllowed(IComponent target)
-    {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isInitializationScriptAllowed(IComponent target)
-    {
-        return true;
-    }
-
-    public void addExternalScript(IComponent target, Resource scriptResource)
-    {
-        if (_externalScripts == null)
-            _externalScripts = new ArrayList();
-
-        _externalScripts.add(scriptResource);
-    }
-
-    public Resource[] getExternalScripts()
-    {
-        if (_externalScripts == null)
-            return null;
-
-        int count = _externalScripts.size();
-
-        return (Resource[]) _externalScripts.toArray(new Resource[count]);
-    }
-
-    public String getUniqueString(String baseValue)
-    {
-        return _idAllocator.allocateId(baseValue);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/TestScript.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/TestScript.java
deleted file mode 100644
index 155a56b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/TestScript.java
+++ /dev/null
@@ -1,360 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.script;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.RequestCycle;
-import org.apache.tapestry.enhance.ClassFactoryImpl;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.script.ScriptParser;
-import org.apache.tapestry.script.ScriptSession;
-import org.apache.tapestry.script.ScriptSessionImpl;
-import org.apache.tapestry.services.ExpressionEvaluator;
-import org.apache.tapestry.services.impl.ExpressionCacheImpl;
-import org.apache.tapestry.services.impl.ExpressionEvaluatorImpl;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-
-/**
- * A collection of tests for Tapestry scripting.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-@Test(sequential=true)
-public class TestScript extends TapestryTestCase
-{
-    private MockScriptProcessor _processor = new MockScriptProcessor();
-
-    private ExpressionEvaluatorImpl _eval;
-    
-    @AfterMethod
-    public void reset()
-    {
-        _processor.reset();
-    }
-    
-    protected ExpressionEvaluator createExpressionEvaluator()
-    {
-        IApplicationSpecification spec = newMock(IApplicationSpecification.class);
-        
-        expect(spec.checkExtension(Tapestry.OGNL_TYPE_CONVERTER)).andReturn(false);
-        
-        ExpressionCacheImpl cache = new ExpressionCacheImpl();
-        _eval = new ExpressionEvaluatorImpl();
-        _eval.setExpressionCache(cache);
-        _eval.setClassFactory(new ClassFactoryImpl());
-        
-        cache.setEvaluator(_eval);
-        
-        _eval.setApplicationSpecification(spec);
-        _eval.setContributions(Collections.EMPTY_LIST);
-        _eval.setNullHandlerContributions(Collections.EMPTY_LIST);
-        
-        return _eval;
-    }
-
-    private IScript read(String file) throws DocumentParseException
-    {
-        ClassResolver resolver = new DefaultClassResolver();
-        ScriptParser parser = new ScriptParser(resolver, createExpressionEvaluator(), null);
-
-        String classAsPath = "/" + getClass().getName().replace('.', '/');
-
-        Resource classLocation = new ClasspathResource(resolver, classAsPath);
-        Resource scriptLocation = classLocation.getRelativeResource(file);
-
-        return parser.parse(scriptLocation);
-    }
-
-    private IScript execute(String file, Map symbols) throws DocumentParseException
-    {
-        IScript script = read(file);
-
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        
-        replay();
-        
-        _eval.initializeService();
-        
-        script.execute(cycle, _processor, symbols);
-
-        verify();
-
-        return script;
-    }
-
-    private void assertSymbol(Map symbols, String key, Object expected)
-    {
-        Object actual = symbols.get(key);
-
-        assertEquals(expected, actual);
-    }
-
-    /**
-     * Simple test where the body and initialization are static.
-     */
-
-    public void testSimple() throws Exception
-    {
-        execute("simple.script", null);
-        
-        assertEquals("\nBODY\n", _processor.getBody());
-        assertEquals("\nINITIALIZATION\n", _processor.getInitialization());
-        
-        assert _processor.getExternalScripts() == null 
-        || _processor.getExternalScripts().length == 0;
-    }
-
-    /**
-     * Test the &lt;unique&gt; element, new in the 1.3 DTD
-     * 
-     * @since 3.0
-     */
-
-    public void testUnique() throws Exception
-    {
-        IScript script = read("unique.script");
-
-        IRequestCycle cycle = new RequestCycle();
-
-        script.execute(cycle, _processor, null);
-        script.execute(cycle, _processor, null);
-
-        assertEquals("Block1\nBlock2\nNotUnique\n\n\n\nNotUnique", _processor.getBody().trim());
-    }
-
-    /**
-     * Test omitting body and initialization, ensure they return null.
-     */
-
-    public void testEmpty() throws Exception
-    {
-        execute("empty.script", null);
-        
-        assert _processor.getBody() == null || _processor.getBody().length() == 0;
-        assert _processor.getInitialization() == null || _processor.getInitialization().length() == 0;
-    }
-
-    /**
-     * Test the ability of the let element to create an output symbol. Also, test the insert
-     * element.
-     */
-
-    public void testLet() throws Exception
-    {
-        String inputSymbol = Long.toHexString(System.currentTimeMillis());
-        Map symbols = new HashMap();
-        symbols.put("inputSymbol", inputSymbol);
-
-        execute("let.script", symbols);
-
-        // Unlike body, the let element trims whitespace.
-
-        String outputSymbol = "output: " + inputSymbol;
-
-        assertEquals(outputSymbol, symbols.get("outputSymbol"));
-    }
-
-    /**
-     * Test the unique attribute on the &lt;let&gt; element. New in the 1.3 DTD
-     * 
-     * @since 3.0
-     */
-    public void testUniqueLet() throws Exception
-    {
-        Map symbols = new HashMap();
-
-        execute("unique-let.script", symbols);
-
-        assertSymbol(symbols, "alpha", "Alpha");
-        assertSymbol(symbols, "beta", "Alpha_0");
-        assertSymbol(symbols, "gamma", "Alpha_1");
-        
-        assertSymbol(symbols, "id1", "form1_field");
-        assertSymbol(symbols, "id2", "form1_field_0");
-        assertSymbol(symbols, "id3", "form1_field_last_name");
-    }
-
-    public void testIncludeScript() throws Exception
-    {
-        IScript script = execute("include-script.script", null);
-
-        Resource scriptLocation = script.getScriptResource();
-
-        Resource[] expected = new Resource[]
-        { scriptLocation.getRelativeResource("first"),
-                scriptLocation.getRelativeResource("second"),
-                scriptLocation.getRelativeResource("third") };
-
-        assertEquals(Arrays.asList(expected), Arrays.asList(_processor
-                .getExternalScripts()));
-    }
-
-    public void testAntSyntax() throws Exception
-    {
-        Map form = new HashMap();
-
-        form.put("name", "gallahad");
-
-        Map component = new HashMap();
-        component.put("form", form);
-        component.put("name", "lancelot");
-
-        Map symbols = new HashMap();
-        symbols.put("component", component);
-
-        execute("ant-syntax.script", symbols);
-
-        assertSymbol(symbols, "functionName", "gallahad_lancelot");
-        assertSymbol(symbols, "incomplete1", "Incomplete: $");
-        assertSymbol(symbols, "incomplete2", "Incomplete: ${");
-        assertSymbol(symbols, "nopath", "This ${} ends up as literal.");
-        assertSymbol(symbols, "OGNL", "This is a brace: }.");
-    }
-
-    public void testSet() throws Exception
-    {
-        Map symbols = new HashMap();
-
-        execute("set.script", symbols);
-
-        assertSymbol(symbols, "element2", new Character('p'));
-    }
-
-    public void testInvalidKeyLet() throws Exception
-    {
-        try
-        {
-            execute("invalid-key-let.script", new HashMap());
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "key");
-        }
-    }
-
-    public void testInvalidKeySet() throws Exception
-    {
-        try
-        {
-            execute("invalid-key-set.script", new HashMap());
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "key");
-        }
-    }
-
-    public void testInputSymbolClass() throws Exception
-    {
-        try
-        {
-            Map symbols = new HashMap();
-            symbols.put("input", new Integer(20));
-
-            execute("input-symbol-class.script", symbols);
-
-            unreachable();
-        }
-        catch (Exception ex)
-        {
-            checkException(ex, "Integer");
-            checkException(ex, "Long");
-        }
-    }
-
-    public void testInputSymbol() throws Exception
-    {
-        Map symbols = new HashMap();
-        symbols.put("input", new Long(20));
-
-        execute("input-symbol.script", symbols);
-
-        assertSymbol(symbols, "success", "Success");
-    }
-
-    public void testInputSymbolRequired() throws Exception
-    {
-        try
-        {
-            execute("input-symbol-required.script", new HashMap());
-
-            unreachable();
-        }
-        catch (Exception ex)
-        {
-            checkException(ex, "required");
-        }
-    }
-
-    public void testInputSymbolInvalidKey() throws Exception
-    {
-        try
-        {
-            execute("input-symbol-invalid-key.script", new HashMap());
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "key");
-        }
-
-    }
-
-    /** @since 3.0 */
-
-    public void testNameAppend() throws Exception
-    {
-        Map symbols = new HashMap();
-
-        symbols.put("name", "fred");
-        execute("name-append.script", symbols);
-
-        assertSymbol(symbols, "output", "fred$suffix");
-    }
-
-    /**
-     * A bunch of quickies to push up the code coverage numbers.
-     */
-    public void testCheats() throws Exception
-    {
-        IScript script = execute("simple.script", null);
-
-        ScriptSession session = new ScriptSessionImpl(script.getScriptResource(), null, null,
-                createExpressionEvaluator(), null, null);
-        assertEquals("ScriptSession[" + script.getScriptResource() + "]", session.toString());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/ant-syntax.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/ant-syntax.script
deleted file mode 100644
index a7e81f1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/ant-syntax.script
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC 

-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"

-	"http://tapestry.apache.org/dtd/Script_1_2.dtd">

-	

-<script>

-

-<let key="functionName">

-	${component.form.name}_${component.name}

-</let>

-

-<!-- Test a few variations.  -->

-

-<let key="incomplete1">

-Incomplete: $</let>

-

-<let key="incomplete2">

-Incomplete: ${</let>

-

-<let key="nopath">

-This ${} ends up as literal.

-</let>

-

-<let key="OGNL">

-This is a brace: ${"{Hello}".toCharArray()[6]}.

-</let>

-

-</script>

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/empty.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/empty.script
deleted file mode 100644
index b280293..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/empty.script
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC "-//Howard Ship//Tapestry Script 1.1//EN"

-	"http://tapestry.sf.net/dtd/Script_1_1.dtd">

-	

-<script>

-</script>

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/include-script.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/include-script.script
deleted file mode 100644
index 2a28162..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/include-script.script
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC "-//Howard Ship//Tapestry Script 1.1//EN"

-	"http://tapestry.sf.net/dtd/Script_1_1.dtd">

-		

-		

-<script>

-		

-<include-script resource-path="first"/>

-<include-script resource-path="second"/>

-<include-script resource-path="third"/>		

-

-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol-class.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol-class.script
deleted file mode 100644
index da438e6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol-class.script
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC 

-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"

-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">

-	

-<script>

-<input-symbol key="input" class="java.lang.Long"/>

-</script>	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol-invalid-key.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol-invalid-key.script
deleted file mode 100644
index a88b820..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol-invalid-key.script
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<script>

-<input-symbol key="foo$bar" class="java.lang.Long"/>

-</script>	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol-required.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol-required.script
deleted file mode 100644
index 451bddc..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol-required.script
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC 

-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"

-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">

-	

-<script>

-<input-symbol key="input" required="yes"/>

-</script>	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol.script
deleted file mode 100644
index 1d0a0ed..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/input-symbol.script
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC 

-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"

-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">

-	

-<script>

-<input-symbol key="input" class="java.lang.Number"/>

-

-<let key="success">

-Success

-</let>

-

-</script>	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/invalid-key-let.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/invalid-key-let.script
deleted file mode 100644
index ec7bad6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/invalid-key-let.script
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC 

-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"

-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">

-	

-<script>

-

-<let key="foo$bar"/>

-

-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/invalid-key-set.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/invalid-key-set.script
deleted file mode 100644
index ad6bf1f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/invalid-key-set.script
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC 

-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"

-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">

-	

-<script>

-

-<set key="foo$bar" expression="&quot;Tapestry&quot;.toCharArray()[2]"/>

-

-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/let.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/let.script
deleted file mode 100644
index 59b0253..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/let.script
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC "-//Howard Ship//Tapestry Script 1.1//EN"

-	"http://tapestry.sf.net/dtd/Script_1_1.dtd">

-		

-<script>

-<let key="outputSymbol">

-output: <insert property-path="inputSymbol"/>

-</let>

-</script>

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/name-append.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/name-append.script
deleted file mode 100644
index 690e503..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/name-append.script
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC 

-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"

-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">

-	

-<script>

-

-<input-symbol key="name" class="java.lang.String" required="yes"/>

-

-<let key="output">

-	

-	<!-- There was a bug where the last letter ('x') was getting clipped. -->

-	

-	${name}$suffix

-</let>

-

-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/set.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/set.script
deleted file mode 100644
index 81c30b9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/set.script
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC 

-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"

-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">

-	

-<script>

-

-<set key="element2" expression="&quot;Tapestry&quot;.toCharArray()[2]"/>

-

-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/simple.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/simple.script
deleted file mode 100644
index e9c64c9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/simple.script
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC "-//Howard Ship//Tapestry Script 1.1//EN"

-	"http://tapestry.sf.net/dtd/Script_1_1.dtd">

-	

-<script>

-<body>

-BODY

-</body>

-<initialization>

-INITIALIZATION

-</initialization>

-</script>

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/unique-let.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/unique-let.script
deleted file mode 100644
index 0bbe629..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/unique-let.script
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC

-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"

-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">

-

-<script>

-

-<let key="alpha" unique="yes">

-	Alpha	

-</let>

-

-<let key="beta" unique="yes">

-	Alpha	

-</let>

-

-<let key="gamma" unique="yes">

-	Alpha	

-</let>

-

-<let key="id1" unique="yes">

-	form1:field

-</let>

-

-<let key="id2" unique="yes">

-	form1:field	

-</let>

-

-<let key="id3" unique="yes">

-	form1:field-last.name	

-</let>

-

-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/unique.script b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/unique.script
deleted file mode 100644
index 7d2ec6f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/script/unique.script
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>

-<!-- 

-   Copyright 2005 The Apache Software Foundation

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-

-<!DOCTYPE script PUBLIC

-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"

-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">

-

-<script>

-

-<body>

-<unique>Block1</unique>

-<unique>Block2</unique>

-NotUnique

-</body>

-

-

-</script>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/AssetProperty.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/AssetProperty.jwc
deleted file mode 100644
index 0881b6c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/AssetProperty.jwc
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.BaseComponent">
-
-  <private-asset name="private" resource-path="/foo/Bar.gif">
-  	<property name="hugh">grant</property>
-  </private-asset>
-  
-  <external-asset name="external" URL="http://foo.com/images/Bar.gif">
-  	<property name="joan">rivers</property>
-  </external-asset>
-  
-  <context-asset name="context" path="/images/Bar.gif">
-  	<property name="john" value="cusak"/>
-  </context-asset>
-	
-</component-specification>	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/BasicExtension.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/BasicExtension.application
deleted file mode 100644
index c024fcc..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/BasicExtension.application
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_3_0.dtd">
-	
-<application name="Test Basic Extension">
-  
-  <extension name="testBean" class="org.apache.tapestry.junit.spec.PropertyBean">
-  	<configure property-name="booleanProperty" type="boolean">true</configure>
-  	<configure property-name="intProperty" type="int">18</configure>
-  	<configure property-name="longProperty" type="long">383838</configure>
-  	<configure property-name="doubleProperty" type="double">-3.14</configure>
-  	<configure property-name="stringProperty">Tapestry: Java Web Components</configure>
-  </extension>
-    
-</application>
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/BeanProperty.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/BeanProperty.jwc
deleted file mode 100644
index ad937f5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/BeanProperty.jwc
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.BaseComponent">
-
-	<bean name="fred" class="org.apache.tapestry.junit.spec.PropertyBean">
-		<property name="zeta">jones</property>
-		<property name="bruce">wayne</property>
-		<property name="nicole">kidman</property>
-	</bean>
-	
-</component-specification>	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ComponentProperty.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ComponentProperty.jwc
deleted file mode 100644
index a74f4c0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ComponentProperty.jwc
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.BaseComponent">
-
-	<component id="barney" type="Dessert">
-		<property name="chocolate">cake</property>
-		<property name="apple">pie</property>
-		<property name="frozen">yogurt</property>
-	</component>
-	
-</component-specification>	
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ExtensionProperty.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ExtensionProperty.application
deleted file mode 100644
index 6877daf..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ExtensionProperty.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Test Extension Property">
-  
-  <extension name="testBean" class="org.apache.tapestry.junit.spec.PropertyBean">
-		<property name="fred">flintstone</property>
-  </extension>
-    
-</application>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ImmediateExtension.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ImmediateExtension.application
deleted file mode 100644
index 99de4ee..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ImmediateExtension.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Immediate Extension Instantiation">
-  
-  <extension name="immediate" 
-  	class="org.apache.tapestry.junit.spec.ImmediateExtension"
-  	immediate="yes"/>
-    
-</application>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ImmediateExtension.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ImmediateExtension.java
deleted file mode 100644
index 7b74a6a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/ImmediateExtension.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.spec;
-
-/**
- * Tests that immediate extensions are, in fact, instantiated immediately.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class ImmediateExtension
-{
-    private static int _instanceCount = 0;
-
-    public static int getInstanceCount()
-    {
-        return _instanceCount;
-    }
-
-    public ImmediateExtension()
-    {
-        _instanceCount++;
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/PropertyBean.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/PropertyBean.java
deleted file mode 100644
index ea447be..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/PropertyBean.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.spec;
-
-/**
- * Bean used to test extensions.
- * 
- * @author Howard Lewis Ship
- */
-
-public class PropertyBean
-{
-    private boolean _booleanProperty;
-
-    private int _intProperty;
-
-    private long _longProperty;
-
-    private String _stringProperty;
-
-    private double _doubleProperty;
-
-    public boolean getBooleanProperty()
-    {
-        return _booleanProperty;
-    }
-
-    public double getDoubleProperty()
-    {
-        return _doubleProperty;
-    }
-
-    public int getIntProperty()
-    {
-        return _intProperty;
-    }
-
-    public long getLongProperty()
-    {
-        return _longProperty;
-    }
-
-    public String getStringProperty()
-    {
-        return _stringProperty;
-    }
-
-    public void setBooleanProperty(boolean booleanProperty)
-    {
-        _booleanProperty = booleanProperty;
-    }
-
-    public void setDoubleProperty(double doubleProperty)
-    {
-        _doubleProperty = doubleProperty;
-    }
-
-    public void setIntProperty(int intProperty)
-    {
-        _intProperty = intProperty;
-    }
-
-    public void setLongProperty(long longProperty)
-    {
-        _longProperty = longProperty;
-    }
-
-    public void setStringProperty(String stringProperty)
-    {
-        _stringProperty = stringProperty;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/TestApplicationSpecification.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/TestApplicationSpecification.java
deleted file mode 100644
index f19a1d9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/TestApplicationSpecification.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.spec;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IExtensionSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests related to {@link org.apache.tapestry.spec.ApplicationSpecification}.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-@Test
-public class TestApplicationSpecification extends TapestryTestCase
-{
-
-    public void testBasicExtension() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("BasicExtension.application");
-
-        PropertyBean extension = (PropertyBean) spec.getExtension("testBean");
-
-        assertEquals(true, extension.getBooleanProperty());
-        assertEquals(18, extension.getIntProperty());
-        assertEquals(383838L, extension.getLongProperty());
-        assertEquals(-3.14, extension.getDoubleProperty(), 0.0);
-        assertEquals("Tapestry: Java Web Components", extension
-                .getStringProperty());
-    }
-
-    public void testExtensionType() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("BasicExtension.application");
-
-        PropertyBean extension = (PropertyBean) spec.getExtension("testBean", Object.class);
-
-        assertNotNull(extension);
-    }
-
-    public void testExtensionTypeFailClass() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("BasicExtension.application");
-
-        try
-        {
-            spec.getExtension("testBean", Number.class);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            checkException(ex, "does not inherit from class java.lang.Number");
-        }
-
-    }
-
-    public void testExtensionProperty() throws Exception
-    {
-        IApplicationSpecification a = parseApp("ExtensionProperty.application");
-
-        IExtensionSpecification e = a.getExtensionSpecification("testBean");
-
-        assertEquals("flintstone", e.getProperty("fred"));
-    }
-
-    public void testImmediateExtension() throws Exception
-    {
-        assertEquals(0, ImmediateExtension.getInstanceCount());
-
-        parseApp("ImmediateExtension.application");
-
-        assertEquals( 1, ImmediateExtension.getInstanceCount());
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/TestComponentSpecification.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/TestComponentSpecification.java
deleted file mode 100644
index bc6505c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/spec/TestComponentSpecification.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.spec;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.spec.*;
-import org.testng.annotations.Test;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Test cases for page and component specifications.
- *
- * @author Howard Lewis Ship
- * @since 2.2
- */
-@Test
-public class TestComponentSpecification extends TapestryTestCase
-{
-
-    public void test_Bean_Property() throws Exception
-    {
-        IComponentSpecification s = parseComponent("BeanProperty.jwc");
-        IBeanSpecification fred = s.getBeanSpecification("fred");
-
-        checkList("propertyNames",
-                  new String[]{ "bruce", "nicole", "zeta" },
-                  fred.getPropertyNames());
-
-        checkProperty(fred, "bruce", "wayne");
-        checkProperty(fred, "nicole", "kidman");
-        checkProperty(fred, "zeta", "jones");
-
-    }
-
-    public void test_Component_Property() throws Exception
-    {
-        IComponentSpecification s = parseComponent("ComponentProperty.jwc");
-        IContainedComponent c = s.getComponent("barney");
-
-        checkList("propertyNames", new String[]
-          { "apple", "chocolate", "frozen" }, c.getPropertyNames());
-
-        checkProperty(c, "apple", "pie");
-        checkProperty(c, "chocolate", "cake");
-        checkProperty(c, "frozen", "yogurt");
-
-    }
-
-    public void test_Asset_Property() throws Exception
-    {
-        IComponentSpecification s = parseComponent("AssetProperty.jwc");
-
-        checkAsset(s, "private", "hugh", "grant");
-        checkAsset(s, "external", "joan", "rivers");
-        checkAsset(s, "context", "john", "cusak");
-    }
-
-    private void checkAsset(IComponentSpecification s, String assetName, String propertyName,
-                            String expectedValue)
-    {
-        IAssetSpecification a = s.getAsset(assetName);
-
-        assertEquals(expectedValue, a.getProperty(propertyName));
-    }
-
-    /** @since 4.0 */
-
-    public void testGetReservedParameterNames()
-    {
-        IComponentSpecification s = new ComponentSpecification();
-
-        assertEquals(Collections.EMPTY_SET, s.getReservedParameterNames());
-
-        s.addReservedParameterName("Fred");
-
-        Set expected = new HashSet();
-
-        expected.add("fred");
-
-        assertEquals(expected, s.getReservedParameterNames());
-
-        IParameterSpecification ps = new ParameterSpecification();
-
-        ps.setAliases("wilma,barney");
-        ps.setParameterName("bambam");
-
-        s.addParameter(ps);
-
-        expected.add("wilma");
-        expected.add("barney");
-        expected.add("bambam");
-
-        assertEquals(expected, s.getReservedParameterNames());
-
-        try
-        {
-            s.getReservedParameterNames().clear();
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // expected
-        }
-
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/PublicBean.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/PublicBean.java
deleted file mode 100644
index c51b1cc..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/PublicBean.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import java.util.Random;
-
-/**
- * Bean used by bean tester.
- * 
- * @author Howard Lewis Ship
- * @since 2.2
- */
-
-public class PublicBean
-{
-    private static Random r = new Random();
-
-    private static long random()
-    {
-        return r.nextLong();
-    }
-
-    public String stringProperty = Long.toHexString(random());
-
-    public Object objectProperty = new Long(random());
-
-    public long longProperty = random();
-
-    public double getSyntheticProperty()
-    {
-        return 3.14;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/StringHolder.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/StringHolder.java
deleted file mode 100644
index f723554..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/StringHolder.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import java.io.Serializable;
-
-public class StringHolder implements Serializable
-{
-    private static final long serialVersionUID = 2681665795452343714L;
-    
-	private String _string;
-
-    public StringHolder(String string)
-    {
-        _string = string;
-    }
-
-    public String getString()
-    {
-        return _string;
-    }
-
-    public boolean equals(Object other)
-    {
-        return ((StringHolder) other)._string.equals(_string);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/TestDataSqueezer.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/TestDataSqueezer.java
deleted file mode 100644
index bad217e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/TestDataSqueezer.java
+++ /dev/null
@@ -1,444 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import java.io.File;
-import java.io.Serializable;
-import java.lang.reflect.Constructor;
-import java.math.BigDecimal;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.services.DataSqueezer;
-import org.apache.tapestry.util.ComponentAddress;
-import org.apache.tapestry.util.io.DataSqueezerImpl;
-import org.apache.tapestry.util.io.DataSqueezerUtil;
-import org.apache.tapestry.util.io.SerializableAdaptor;
-import org.apache.tapestry.util.io.SqueezeAdaptor;
-import org.testng.annotations.Test;
-
-/**
- * A series of tests for {@link DataSqueezerImpl}&nbsp;and friends.
- * 
- * @author Howard Lewis Ship
- */
-@Test
-public class TestDataSqueezer extends BaseComponentTestCase
-{
-    private DataSqueezerImpl ds = DataSqueezerUtil.createUnitTestSqueezer();
-
-    public TestDataSqueezer(String name)
-    {
-    }
-
-    private void attempt(Object input, String expectedEncoding)
-    {
-        attempt(input, expectedEncoding, ds);
-    }
-
-    private void attempt(Object input, String expectedEncoding, DataSqueezer squeezer)
-
-    {
-        String encoding = squeezer.squeeze(input);
-
-        assertEquals(expectedEncoding, encoding);
-
-        Object output = squeezer.unsqueeze(encoding);
-
-        assertEquals(input, output);
-    }
-
-    public void testBoolean()
-    {
-        attempt(Boolean.TRUE, "T");
-        attempt(Boolean.FALSE, "F");
-    }
-
-    public void testNull()
-    {
-        attempt(null, "X");
-    }
-
-    public void testByte()
-    {
-        attempt(new Byte((byte) 0), "b0");
-        attempt(new Byte((byte) -5), "b-5");
-        attempt(new Byte((byte) 72), "b72");
-    }
-
-    public void testFloat()
-    {
-        attempt(new Float(0), "f0.0");
-        attempt(new Float(3.1459), "f3.1459");
-        attempt(new Float(-37.23), "f-37.23");
-    }
-
-    public void testDouble()
-    {
-        attempt(new Double(0), "d0.0");
-        attempt(new Double(3.1459), "d3.1459");
-        attempt(new Double(-37.23), "d-37.23");
-    }
-
-    public void testInteger()
-    {
-        attempt(new Integer(0), "0");
-        attempt(new Integer(205), "205");
-        attempt(new Integer(-173), "-173");
-    }
-
-    public void testLong()
-    {
-        attempt(new Long(0), "l0");
-        attempt(new Long(800400300l), "l800400300");
-        attempt(new Long(-987654321l), "l-987654321");
-    }
-
-    public void testShort()
-    {
-        attempt(new Short((short) 0), "s0");
-        attempt(new Short((short) -10), "s-10");
-        attempt(new Short((short) 57), "s57");
-    }
-
-    /** @since 2.2 * */
-
-    public void testCharacter()
-    {
-        attempt(new Character('a'), "ca");
-        attempt(new Character('Z'), "cZ");
-    }
-
-    public void test_Empty_Value()
-    {
-        Object output = ds.unsqueeze("");
-        
-        assert output == null;
-    }
-    
-    public void testString()
-    {
-        attempt("Now is the time for all good men ...", "SNow is the time for all good men ...");
-        attempt("X marks the spot!", "SX marks the spot!");
-        attempt("So long, sucker!", "SSo long, sucker!");
-    }
-
-    public void testComponentAddress()
-    {
-        ComponentAddress objAddress = new ComponentAddress("framework:DirectLink",
-                "component.subcomponent");
-        attempt(objAddress, "Aframework:DirectLink,component.subcomponent");
-
-        objAddress = new ComponentAddress("framework:DirectLink", null);
-        attempt(objAddress, "Aframework:DirectLink,");
-    }
-
-    public void testArray()
-    {
-        Object[] input =
-        { new Short((short) -82), "Time to encode an array.", new Long(38383833273789l), null,
-                Boolean.TRUE, new Double(22. / 7.) };
-
-        String[] encoded = ds.squeeze(input);
-
-        assertEquals(input.length, encoded.length);
-
-        Object[] output = ds.unsqueeze(encoded);
-
-        assertEquals(input.length, output.length);
-
-        for (int i = 0; i < input.length; i++)
-        {
-            assertEquals(input[i], output[i]);
-        }
-    }
-
-    public void testNullArray()
-    {
-        Object[] input = null;
-
-        String[] encoded = ds.squeeze(input);
-
-        assertNull(encoded);
-
-        Object[] output = ds.unsqueeze(encoded);
-
-        assertNull(output);
-    }
-
-    private void attempt(Serializable s, DataSqueezer squeezer)
-    {
-        String encoded = squeezer.squeeze(s);
-
-        Object output = squeezer.unsqueeze(encoded);
-
-        assertEquals(s, output);
-    }
-
-    public void testSerializableShort()
-    {
-        attempt(new StringHolder("X"), ds);
-    }
-
-    public void testSerializableLong()
-    {
-
-        Map map = new HashMap();
-
-        map.put("alpha", Boolean.TRUE);
-        map.put("beta", new StringHolder("FredFlintstone"));
-        map.put("gamma", new BigDecimal(
-                "2590742358742358972.234592348957230948578975248972390857490725"));
-
-        attempt((Serializable) map, ds);
-    }
-
-    public static class BooleanHolder
-    {
-        private boolean value;
-
-        public BooleanHolder()
-        {
-        }
-
-        public BooleanHolder(boolean value)
-        {
-            this.value = value;
-        }
-
-        public boolean getValue()
-        {
-            return value;
-        }
-
-        public void setValue(boolean value)
-        {
-            this.value = value;
-        }
-
-        public boolean equals(Object other)
-        {
-            if (other == null)
-                return false;
-
-            if (this == other)
-                return true;
-
-            if (!(other instanceof BooleanHolder))
-                return false;
-
-            BooleanHolder otherHolder = (BooleanHolder) other;
-
-            return value == otherHolder.value;
-        }
-    }
-
-    public static class BHSqueezer implements SqueezeAdaptor
-    {
-        private final String prefix_;
-
-        private final Class dataClass_;
-
-        private static final String TRUE = "BT";
-
-        private static final String FALSE = "BF";
-
-        public BHSqueezer()
-        {
-            this("B", BooleanHolder.class);
-        }
-
-        public BHSqueezer(String prefix)
-        {
-            this(prefix, BooleanHolder.class);
-        }
-
-        public BHSqueezer(String prefix, Class dataClass)
-        {
-            prefix_ = prefix;
-            dataClass_ = dataClass;
-        }
-
-        public String getPrefix()
-        {
-            return prefix_;
-        }
-
-        public Class getDataClass()
-        {
-            return dataClass_;
-        }
-
-        public String squeeze(DataSqueezer squeezer, Object data)
-        {
-            BooleanHolder h = (BooleanHolder) data;
-
-            return h.getValue() ? TRUE : FALSE;
-        }
-
-        public Object unsqueeze(DataSqueezer squeezer, String string)
-        {
-            if (string.equals(TRUE))
-                return new BooleanHolder(true);
-
-            if (string.equals(FALSE))
-                return new BooleanHolder(false);
-
-            throw new ApplicationRuntimeException("Unexpected value.");
-        }
-
-    }
-
-    public void testCustom()
-    {
-        DataSqueezerImpl squeezer = DataSqueezerUtil.createUnitTestSqueezer();
-        squeezer.register(new BHSqueezer());
-
-        attempt(new BooleanHolder(true), "BT", squeezer);
-        attempt(new BooleanHolder(false), "BF", squeezer);
-
-        attempt("BooleanHolder", "SBooleanHolder", squeezer);
-    }
-
-    public void testRegisterShortPrefix()
-    {
-        try
-        {
-            ds.register(new BHSqueezer(""));
-
-            throw new AssertionError("Null prefix should be invalid.");
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-
-    public void testRegisterInvalidPrefix()
-    {
-        try
-        {
-            ds.register(new BHSqueezer("\n"));
-
-            throw new AssertionError("Prefix should be invalid.");
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-
-    public void testRegisterDupePrefix()
-    {
-        try
-        {
-            ds.register(new BHSqueezer("b"));
-
-            throw new AssertionError("Duplicate prefix should be invalid.");
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-
-    public void testRegisterNullClass()
-    {
-        try
-        {
-            ds.register(new BHSqueezer("B", null));
-
-            throw new AssertionError("Null data class should be invalid.");
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-
-    public void testRegisterNullSqueezer()
-    {
-        try
-        {
-            ds.register(null);
-
-            throw new AssertionError("Null squeezer should be invalid.");
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-
-    public void testClassLoader() throws Exception
-    {
-        File springJAR = new File("tapestry-framework/src/test-data/spring-1.1.jar");
-        if (!springJAR.exists())
-            springJAR = new File("src/test-data/spring-1.1.jar");
-        
-        if (!springJAR.exists())
-            throw new RuntimeException("File " + springJAR
-                    + " does not exist; this should have been downloaded by the Ant build scripts.");
-
-        ClassResolver resolver = newClassResolver(springJAR);
-
-        Class propertyValueClass = resolver.findClass("org.springframework.beans.PropertyValue");
-        Constructor constructor = propertyValueClass.getConstructor(new Class[]
-        { String.class, Object.class });
-
-        Serializable instance = (Serializable) constructor.newInstance(new Object[]
-        { "fred", "flintstone" });
-
-        assertEquals("fred", PropertyUtils.read(instance, "name"));
-        assertEquals("flintstone", PropertyUtils.read(instance, "value"));
-
-        DataSqueezer dsq = newDataSqueezer(resolver);
-
-        String encoded = dsq.squeeze(instance);
-
-        // OK; build a whole new class loader & stack to decode that
-        // string back into an object.
-
-        ClassResolver resolver2 = newClassResolver(springJAR);
-
-        DataSqueezer ds2 = newDataSqueezer(resolver2);
-
-        Object output = ds2.unsqueeze(encoded);
-
-        assertEquals("fred", PropertyUtils.read(output, "name"));
-        assertEquals("flintstone", PropertyUtils.read(output, "value"));
-    }
-
-    private ClassResolver newClassResolver(File jarFile) throws Exception
-    {
-        URLClassLoader classLoader = new URLClassLoader(new URL[]
-        { jarFile.toURL() });
-
-        return new DefaultClassResolver(classLoader);
-
-    }
-
-    private DataSqueezer newDataSqueezer(ClassResolver resolver)
-    {
-        DataSqueezerImpl dsq = new DataSqueezerImpl();
-        SerializableAdaptor adaptor = new SerializableAdaptor();
-        adaptor.setResolver(resolver);
-
-        dsq.register(adaptor);
-        return dsq;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/TestIdAllocator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/TestIdAllocator.java
deleted file mode 100644
index ee1a998..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/TestIdAllocator.java
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.util.IdAllocator;
-import org.testng.annotations.Test;
-
-/**
- * Tests the {@link org.apache.tapestry.util.IdAllocator}class.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-@Test
-public class TestIdAllocator extends TapestryTestCase
-{
-    public void testSimple()
-    {
-        IdAllocator a = new IdAllocator();
-
-        assertEquals("name", a.allocateId("name"));
-
-        for (int i = 0; i < 10; i++)
-            assertEquals("name_" + i, a.allocateId("name"));
-    }
-
-    public void testSimpleNamespace()
-    {
-        IdAllocator a = new IdAllocator("_NS");
-
-        assertEquals("name_NS", a.allocateId("name"));
-
-        for (int i = 0; i < 10; i++)
-            assertEquals("name_NS_" + i, a.allocateId("name"));
-
-        // This is current behavior, but is probably something
-        // that could be improved.
-
-        assertEquals("foo_NS_NS", a.allocateId("foo_NS"));
-        assertEquals("foo_NS_NS_0", a.allocateId("foo_NS"));
-    }
-
-    public void testDegenerate()
-    {
-        IdAllocator a = new IdAllocator();
-
-        assertEquals("d_1", a.allocateId("d_1"));
-
-        assertEquals("d", a.allocateId("d"));
-        assertEquals("d_0", a.allocateId("d"));
-        assertEquals("d_2", a.allocateId("d"));
-
-        assertEquals("d_3", a.allocateId("d"));
-        assertEquals("d_1_0", a.allocateId("d_1"));
-    }
-
-    public void testDegenerateNamespace()
-    {
-        IdAllocator a = new IdAllocator("_NS");
-
-        assertEquals("d_1_NS", a.allocateId("d_1"));
-
-        assertEquals("d_NS", a.allocateId("d"));
-        assertEquals("d_NS_0", a.allocateId("d"));
-        assertEquals("d_NS_1", a.allocateId("d"));
-        assertEquals("d_NS_2", a.allocateId("d"));
-        assertEquals("d_NS_3", a.allocateId("d"));
-
-        assertEquals("d_1_NS_0", a.allocateId("d_1"));
-
-        // This is very degenerate, and maybe something that needs fixing.
-
-        assertEquals("d_1_NS_NS", a.allocateId("d_1_NS"));
-    }
-
-    public void testClear()
-    {
-        IdAllocator a = new IdAllocator();
-
-        assertEquals("foo", a.allocateId("foo"));
-        assertEquals("foo_0", a.allocateId("foo_0"));
-
-        a.clear();
-
-        assertEquals("foo", a.allocateId("foo"));
-        assertEquals("foo_0", a.allocateId("foo_0"));
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/TestRegexpMatcher.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/TestRegexpMatcher.java
deleted file mode 100644
index 3bdb497..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/junit/utils/TestRegexpMatcher.java
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.util.RegexpMatch;
-import org.apache.tapestry.util.RegexpMatcher;
-import org.testng.annotations.Test;
-
-/**
- * Simple test case for {@link org.apache.tapestry.util.RegexpMatcher}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-@Test
-public class TestRegexpMatcher extends TapestryTestCase
-{
-
-    public void testMatch()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        assertTrue(m.matches("[a-z]+", "c"));
-        assertTrue(m.matches("foo|foot", "foo"));
-    }
-
-    public void test_Non_Match()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        assert !m.matches("[0-9]+", "q");
-        assert !m.matches("foo|efoot", "foot");
-    }
-
-    public void test_Bad_Pattern()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        try
-        {
-            m.matches("[[[", "x");
-
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            checkException(ex, "Unclosed character class near index 2");
-        }
-    }
-
-    public void testClear()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        m.clear();
-    }
-
-    public void testContains()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        assertTrue(m.contains("[a-z]+", "c"));
-        assertTrue(m.contains("^(\\d{5}(-\\d{4})?)$", "06514"));
-        assertTrue(m.contains("^(\\d{5}(-\\d{4})?)$", "06514-3149"));
-        assertTrue(m.contains("foo|foot", "12foot12"));
-    }
-
-    public void testNotContains()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        assertTrue(!m.contains("[0-9]+", "q"));
-        assertTrue(!m.contains("^(\\d{5}(-\\d{4})?)$", "0651"));
-        assertTrue(!m.contains("^(\\d{5}(-\\d{4})?)$", "065147"));
-        assertTrue(!m.contains("^(\\d{5}(-\\d{4})?)$", "06514-314"));
-        assertTrue(!m.contains("^(\\d{5}(-\\d{4})?)$", "06514-31497"));
-        assertTrue(!m.contains("^(foo|foot)$", "12foot12"));
-    }
-
-    public void testGetEscapedPatternStrings()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        assertEquals(m.getEscapedPatternString("^\\d$"), "\\^\\\\d\\$");
-    }
-
-    /** @since 4.0 */
-
-    public void test_Get_Matches()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        String[] matches = m.getMatches("\\d+", "57,232 89 147", 0);
-
-        assertEquals(new String[] { "57", "232", "89", "147" }, matches);
-    }
-
-    /** @since 4.0 */
-
-    public void testGetMatchesAsObjects()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        RegexpMatch[] matches = m.getMatches("\\w+(=(\\w+))?", "fred,barney=rubble;wilma=flintstone");
-
-        assertEquals(3, matches.length);
-        
-        assertEquals("fred", matches[0].getInput());
-        assertEquals("fred", matches[0].getGroup(0));
-        
-        assertEquals("barney=rubble", matches[1].getInput());
-        assertEquals("rubble", matches[1].getGroup(2));
-        
-        assertEquals("wilma=flintstone", matches[2].getInput());
-        assertEquals("flintstone", matches[2].getGroup(2));        
-    }
-
-    /** @since 4.0 */
-
-    public void testGetMatchesNoMatch()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        String[] matches = m.getMatches("A(B|C)", "aBCAaBA", 0);
-
-        assertEquals(0, matches.length);
-    }
-
-    /** @since 4.0 */
-
-    public void testGetMatchesSubgroup()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        String matches[] = m.getMatches("A(B|C|fred)", "AA AC AB Afred AA AC", 1);
-
-        assertListEquals(new String[]
-        { "C", "B", "fred", "C" }, matches);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/l10n/DefaultResourceLocalizerTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/l10n/DefaultResourceLocalizerTest.java
deleted file mode 100644
index 94c2c51..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/l10n/DefaultResourceLocalizerTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.l10n;

-

-import static org.easymock.EasyMock.expect;

-

-import java.util.Locale;

-

-import org.apache.hivemind.Resource;

-import org.apache.tapestry.BaseComponentTestCase;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.l10n.DefaultResourceLocalizer}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class DefaultResourceLocalizerTest extends BaseComponentTestCase

-{

-    public void testLocalizer()

-    {

-        Resource root = newResource();

-        Resource localized = newResource();

-        Locale locale = Locale.getDefault();

-

-        expect(root.getLocalization(locale)).andReturn(localized);

-

-        replay();

-

-        Resource actual = new DefaultResourceLocalizer().findLocalization(root, locale);

-

-        assertSame(localized, actual);

-

-        verify();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/link/DefaultLinkRendererTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/link/DefaultLinkRendererTest.java
deleted file mode 100644
index 05b3236..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/link/DefaultLinkRendererTest.java
+++ /dev/null
@@ -1,474 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.NestedMarkupWriter;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.engine.ILink;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.link.DefaultLinkRenderer}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class DefaultLinkRendererTest extends BaseComponentTestCase
-{
-    class RendererFixture extends DefaultLinkRenderer
-    {
-        private IMarkupWriter _writer;
-
-        private IRequestCycle _cycle;
-
-        private ILinkComponent _component;
-
-        private String _element;
-
-        private boolean _hasBody;
-
-        private String _targetAttribute;
-
-        private String _urlAttribute;
-
-        public RendererFixture(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent component,
-                String element, boolean body, String targetAttribute, String urlAttribute)
-        {
-            _writer = writer;
-            _cycle = cycle;
-            _component = component;
-            _element = element;
-            _hasBody = body;
-            _targetAttribute = targetAttribute;
-            _urlAttribute = urlAttribute;
-        }
-
-        @Override
-        protected void afterBodyRender(IMarkupWriter writer, IRequestCycle cycle,
-                ILinkComponent link)
-        {
-            assertSame(_writer, writer);
-            assertSame(_cycle, cycle);
-            assertSame(_component, link);
-
-            writer.print("AFTER-BODY-RENDER");
-        }
-
-        @Override
-        protected void beforeBodyRender(IMarkupWriter writer, IRequestCycle cycle,
-                ILinkComponent link)
-        {
-            assertSame(_writer, writer);
-            assertSame(_cycle, cycle);
-            assertSame(_component, link);
-
-            writer.print("BEFORE-BODY-RENDER");
-        }
-
-        @Override
-        protected String getElement()
-        {
-            return _element;
-        }
-
-        @Override
-        protected boolean getHasBody()
-        {
-            return _hasBody;
-        }
-
-        @Override
-        protected String getTargetAttribute()
-        {
-
-            return _targetAttribute;
-        }
-
-        @Override
-        protected String getUrlAttribute()
-        {
-            return _urlAttribute;
-        }
-
-    }
-
-    protected ILinkComponent newComponent()
-    {
-        return newMock(ILinkComponent.class);
-    }
-
-    public void testNoNesting()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        ILinkComponent existing = newComponent();
-        ILinkComponent active = newComponent();
-        Location l = newLocation();
-
-        trainGetAttribute(cycle, Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, existing);
-
-        trainGetLocation(active, l);
-
-        replay();
-
-        try
-        {
-            new DefaultLinkRenderer().renderLink(writer, cycle, active);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(LinkMessages.noNesting(), ex.getMessage());
-            assertSame(active, ex.getComponent());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    public void testStandardNotDisabled()
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ILinkComponent component = newComponent();
-        ILink link = newLink();
-
-        trainGetAttribute(cycle, Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, null);
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, component);
-
-        trainIsDisabled(component, false);
-        trainIsRewinding(cycle, false);
-
-        writer.begin("a");
-        
-        component.renderAdditionalAttributes(writer, cycle);
-        
-        trainGetLink(component, cycle, link);
-
-        trainGetScheme(component, null);
-        trainGetPort(component, null);
-        trainGetAnchor(component, null);
-
-        trainGetURL(link, null, null, "/foo/bar.baz");
-
-        writer.attribute("href", "/foo/bar.baz");
-
-        trainGetTarget(component, null);
-
-        trainGetNestedWriter(writer, nested);
-
-        component.renderBody(nested, cycle);
-
-        nested.close();
-
-        writer.end();
-
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-
-        replay();
-
-        new DefaultLinkRenderer().renderLink(writer, cycle, component);
-
-        verify();
-    }
-
-    protected void trainGetScheme(ILinkComponent component, String scheme)
-    {
-        expect(component.getScheme()).andReturn(scheme);
-    }
-    
-    protected void trainGetPort(ILinkComponent component, Integer port)
-    {
-        expect(component.getPort()).andReturn(port);
-    }
-    
-    public void testStandardWithSchemaAnchorAndTarget()
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ILinkComponent component = newComponent();
-        ILink link = newLink();
-
-        trainGetAttribute(cycle, Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, null);
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, component);
-
-        trainIsDisabled(component, false);
-        trainIsRewinding(cycle, false);
-
-        writer.begin("a");
-        
-        component.renderAdditionalAttributes(writer, cycle);
-        
-        trainGetLink(component, cycle, link);
-
-        trainGetScheme(component, "https");
-
-        trainGetPort(component, null);
-        
-        trainGetAnchor(component, "my-anchor");
-
-        trainGetURL(link, "https", "my-anchor", "http://zap.com/foo/bar.baz#my-anchor");
-
-        writer.attribute("href", "http://zap.com/foo/bar.baz#my-anchor");
-
-        trainGetTarget(component, "some-target");
-
-        writer.attribute("target", "some-target");
-
-        trainGetNestedWriter(writer, nested);
-
-        component.renderBody(nested, cycle);
-        
-        nested.close();
-        
-        writer.end();
-        
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-
-        replay();
-
-        new DefaultLinkRenderer().renderLink(writer, cycle, component);
-
-        verify();
-    }
-
-    public void testDisabled()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        ILinkComponent component = newComponent();
-
-        trainGetAttribute(cycle, Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, null);
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, component);
-
-        trainIsDisabled(component, true);
-
-        component.renderBody(writer, cycle);
-
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-
-        replay();
-
-        new DefaultLinkRenderer().renderLink(writer, cycle, component);
-
-        verify();
-    }
-
-    public void testRewinding()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        ILinkComponent component = newComponent();
-
-        trainGetAttribute(cycle, Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, null);
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, component);
-
-        trainIsDisabled(component, false);
-        trainIsRewinding(cycle, true);
-
-        component.renderBody(writer, cycle);
-
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-
-        replay();
-
-        new DefaultLinkRenderer().renderLink(writer, cycle, component);
-
-        verify();
-    }
-
-    public void testWithSubclass()
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-        IRequestCycle cycle = newCycle();
-        ILinkComponent component = newComponent();
-        ILink link = newLink();
-
-        trainGetAttribute(cycle, Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, null);
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, component);
-
-        trainIsDisabled(component, false);
-        trainIsRewinding(cycle, false);
-
-        writer.begin("xlink");
-        
-        component.renderAdditionalAttributes(writer, cycle);
-        
-        trainGetLink(component, cycle, link);
-
-        trainGetScheme(component, null);
-
-        trainGetPort(component, null);
-        
-        trainGetAnchor(component, "my-anchor");
-
-        trainGetURL(link, null, "my-anchor", "/foo/bar.baz#my-anchor");
-
-        writer.attribute("xurl", "/foo/bar.baz#my-anchor");
-
-        trainGetTarget(component, "some-target");
-
-        writer.attribute("xtarget", "some-target");
-
-        writer.print("BEFORE-BODY-RENDER");
-
-        trainGetNestedWriter(writer, nested);
-
-        component.renderBody(nested, cycle);
-
-        writer.print("AFTER-BODY-RENDER");
-
-        nested.close();
-
-        writer.end();
-
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-
-        replay();
-
-        new RendererFixture(writer, cycle, component, "xlink", true, "xtarget", "xurl").renderLink(
-                writer,
-                cycle,
-                component);
-
-        verify();
-    }
-
-    public void testWithSubclassNoBody()
-    {
-        IMarkupWriter writer = newWriter();
-        NestedMarkupWriter nested = newNestedWriter();
-
-        IRequestCycle cycle = newCycle();
-        ILinkComponent component = newComponent();
-        ILink link = newLink();
-
-        trainGetAttribute(cycle, Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, null);
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, component);
-
-        trainIsDisabled(component, false);
-        trainIsRewinding(cycle, false);
-
-        writer.beginEmpty("xlink");
-        
-        component.renderAdditionalAttributes(writer, cycle);
-        
-        trainGetLink(component, cycle, link);
-
-        trainGetScheme(component, null);
-
-        trainGetPort(component, null);
-        
-        trainGetAnchor(component, "my-anchor");
-
-        trainGetURL(link, null, "my-anchor", "/foo/bar.baz#my-anchor");
-
-        writer.attribute("xurl", "/foo/bar.baz#my-anchor");
-
-        trainGetTarget(component, "some-target");
-
-        writer.attribute("xtarget", "some-target");
-
-        writer.print("BEFORE-BODY-RENDER");
-
-        trainGetNestedWriter(writer, nested);
-
-        writer.print("AFTER-BODY-RENDER");
-        
-        writer.closeTag();
-        
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-
-        replay();
-
-        new RendererFixture(writer, cycle, component, "xlink", false, "xtarget", "xurl")
-                .renderLink(writer, cycle, component);
-
-        verify();
-    }
-
-    public void testWithSubclassDisabled()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        ILinkComponent component = newComponent();
-
-        trainGetAttribute(cycle, Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, null);
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, component);
-
-        trainIsDisabled(component, true);
-
-        component.renderBody(writer, cycle);
-
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-
-        replay();
-
-        new RendererFixture(writer, cycle, component, "xlink", true, "xtarget", "xurl").renderLink(
-                writer,
-                cycle,
-                component);
-
-        verify();
-    }
-
-    public void testWithSubclassDisabledNoBody()
-    {
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        ILinkComponent component = newComponent();
-
-        trainGetAttribute(cycle, Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, null);
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, component);
-
-        trainIsDisabled(component, true);
-
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-
-        replay();
-
-        new RendererFixture(writer, cycle, component, "xlink", false, "xtarget", "xurl")
-                .renderLink(writer, cycle, component);
-
-        verify();
-    }
-
-    protected void trainGetAnchor(ILinkComponent component, String anchor)
-    {
-        expect(component.getAnchor()).andReturn(anchor);
-    }
-
-    protected void trainGetTarget(ILinkComponent component, String target)
-    {
-        expect(component.getTarget()).andReturn(target);
-    }
-
-    protected void trainIsDisabled(ILinkComponent component, boolean isDisabled)
-    {
-        expect(component.isDisabled()).andReturn(isDisabled);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodHolder.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodHolder.java
deleted file mode 100644
index 3507f48..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodHolder.java
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.event.BrowserEvent;
-import org.apache.tapestry.html.BasePage;
-
-import java.util.Map;
-
-/**
- * Used by {@link org.apache.tapestry.listener.TestListenerMapSource}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ListenerMethodHolder
-{
-    private RuntimeException _exception;
-
-    private String _pageName;
-
-    private IPage _page;
-
-    private ILink _link;
-
-    int _stringArgCount;
-
-    public ListenerMethodHolder()
-    {
-    }
-
-    public ListenerMethodHolder(String pageName)
-    {
-        _pageName = pageName;
-    }
-
-    public ListenerMethodHolder(ILink link)
-    {
-        _link = link;
-    }
-
-    public ListenerMethodHolder(IPage page)
-    {
-        _page = page;
-    }
-
-    public void stringArg(String value)
-    {
-        _stringArgCount++;
-    }
-
-    public void wrongTypes(Map map)
-    {
-    }
-
-    public void fred(String string, int count)
-    {
-
-    }
-
-    public void wilma(IRequestCycle cycle, int argument)
-    {
-    }
-
-    public void barneyClicked(BrowserEvent event)
-    {
-        
-    }
-    
-    public void bangbangClicked(IRequestCycle cycle, BrowserEvent event, int argument)
-    {
-        
-    }
-    
-    public void noMatch(String argument1, double argument2, long argument3)
-    {
-
-    }
-
-    public String returnsString()
-    {
-        return null;
-    }
-
-    public BasePage returnsBasePage()
-    {
-        return null;
-    }
-
-    public IPage returnsPage()
-    {
-        return _page;
-    }
-
-    public ILink returnsLink()
-    {
-        return _link;
-    }
-
-    public String returnsPageName()
-    {
-        return _pageName;
-    }
-
-    public Object returnsObject()
-    {
-        return null;
-    }
-
-    public int returnsInt()
-    {
-        return 0;
-    }
-
-    /**
-     * Tapestry 3.0 and earlier style.
-     */
-
-    public void pebbles(IRequestCycle cycle)
-    {
-    }
-
-    public void barney(String string)
-    {
-
-    }
-
-    public void barney()
-    {
-
-    }
-
-    public String toString()
-    {
-        return "ListenerMethodHolder";
-    }
-
-    public void throwsException()
-    {
-        throw _exception;
-    }
-
-    public void setException(RuntimeException ex)
-    {
-        _exception = ex;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodInvokerTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodInvokerTest.java
deleted file mode 100644
index 5d3ea35..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodInvokerTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright Aug 9, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.listener;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.event.BrowserEvent;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link ListenerMethodInvokerImpl}.
- */
-@Test(sequential=true)
-public class ListenerMethodInvokerTest extends BaseComponentTestCase
-{
-
-    public void test_BrowserEvent_Parameter()
-    {
-        IRequestCycle cycle = newCycle();
-        
-        ListenerMethodHolder target = new ListenerMethodHolder();
-        
-        ListenerMethodInvoker invoker = 
-            new ListenerMethodInvokerImpl("bangbangClicked", target.getClass().getMethods());
-        
-        BrowserEvent event = new BrowserEvent("onClick", null);
-        Object[] parms = { 12, event };
-        
-        expect(cycle.getListenerParameters()).andReturn(parms);
-        
-        replay();
-        
-        invoker.invokeListenerMethod(target, cycle);
-        
-        verify();
-    }
-    
-    public void test_Type_Conversion_Parameter()
-    {
-        IRequestCycle cycle = newCycle();
-        
-        ListenerMethodHolder target = new ListenerMethodHolder();
-        
-        ListenerMethodInvoker invoker = 
-            new ListenerMethodInvokerImpl("bangbangClicked", target.getClass().getDeclaredMethods());
-
-        BrowserEvent event = new BrowserEvent("onClick", null);
-        Object[] parms = { new Integer(12), event };
-        
-        expect(cycle.getListenerParameters()).andReturn(parms);
-        
-        replay();
-        
-        invoker.invokeListenerMethod(target, cycle);
-        
-        verify();
-    }
-
-    public void test_Null_Parameter()
-    {
-        IRequestCycle cycle = newCycle();
-
-        ListenerMethodHolder target = new ListenerMethodHolder();
-
-        ListenerMethodInvoker invoker =
-            new ListenerMethodInvokerImpl("stringArg", target.getClass().getDeclaredMethods());
-
-        Object[] parms = { null };
-
-        expect(cycle.getListenerParameters()).andReturn(parms);
-
-        replay();
-
-        invoker.invokeListenerMethod(target, cycle);
-
-        verify();
-
-        assertEquals(target._stringArgCount, 1);
-    }
-
-    public void test_No_Parameters_With_Method_Parameters()
-    {
-        IRequestCycle cycle = newCycle();
-
-        ListenerMethodHolder target = new ListenerMethodHolder();
-
-        ListenerMethodInvoker invoker =
-            new ListenerMethodInvokerImpl("stringArg", target.getClass().getDeclaredMethods());
-
-        Object[] parms = new Object[0];
-
-        expect(cycle.getListenerParameters()).andReturn(parms);
-
-        replay();
-
-        invoker.invokeListenerMethod(target, cycle);
-
-        verify();
-
-        assertEquals(target._stringArgCount, 1);
-    }
-
-    public void test_To_String()
-    {
-        ListenerMethodInvoker invoker =
-            new ListenerMethodInvokerImpl("bangbangClicked", ListenerMethodHolder.class.getDeclaredMethods());
-
-        
-        assertEquals(invoker.toString(), "ListenerMethodInvokerImpl[_name='bangbangClicked']");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/TestListenerMap.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/TestListenerMap.java
deleted file mode 100644
index 7bb59c8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/TestListenerMap.java
+++ /dev/null
@@ -1,196 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.listener.ListenerMapImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestListenerMap extends BaseComponentTestCase
-{
-    public void test_Get_Listener()
-    {
-        Object target = new Object();
-        IRequestCycle cycle = newCycle();
-        ListenerMethodInvoker invoker = newInvoker();
-        Map map = newMap("method", invoker);
-
-        invoker.invokeListenerMethod(target, cycle);
-
-        replay();
-
-        ListenerMap lm = new ListenerMapImpl(target, map);
-
-        IActionListener l1 = lm.getListener("method");
-
-        l1.actionTriggered(null, cycle);
-
-        verify();
-
-        IActionListener l2 = lm.getListener("method");
-
-        assertSame(l1, l2);
-    }
-
-    public void test_GetListener_Names()
-    {
-        Object target = new Object();
-        ListenerMethodInvoker invoker = newInvoker();
-        Map map = newMap("method", invoker);
-
-        replay();
-
-        ListenerMap lm = new ListenerMapImpl(target, map);
-
-        // Copy both collections into ArrayLists for comparison purposes.
-
-        assertEquals(new ArrayList(map.keySet()), new ArrayList(lm.getListenerNames()));
-
-        verify();
-
-        try
-        {
-            lm.getListenerNames().clear();
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Ignore. Expected result.
-        }
-    }
-
-    public void test_Can_Provide_Listener()
-    {
-        Object target = new Object();
-        ListenerMethodInvoker invoker = newInvoker();
-        Map map = newMap("method", invoker);
-
-        replay();
-
-        ListenerMap lm = new ListenerMapImpl(target, map);
-
-        assertEquals(true, lm.canProvideListener("method"));
-        assertEquals(false, lm.canProvideListener("foobar"));
-
-        verify();
-    }
-
-    public void test_Missing_Listener()
-    {
-        Object target = "*TARGET*";
-        ListenerMethodInvoker invoker = newInvoker();
-        Map map = newMap("method", invoker);
-
-        replay();
-
-        ListenerMap lm = new ListenerMapImpl(target, map);
-
-        try
-        {
-            lm.getListener("foobar");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Object *TARGET* does not implement a listener method named 'foobar'.", ex
-                    .getMessage());
-            assertSame(target, ex.getComponent());
-        }
-
-        verify();
-    }
-
-	public void test_Get_Implicit_Listener()
-	{
-		Object target = new Object();
-        IRequestCycle cycle = newCycle();
-        ListenerMethodInvoker invoker = newInvoker();
-		IComponent component = newMock(IComponent.class);
-		expect(component.getId()).andReturn("action").times(2);
-		Map map = newMap("doAction", invoker);
-
-        invoker.invokeListenerMethod(target, cycle);
-
-        replay();
-
-        ListenerMap lm = new ListenerMapImpl(target, map);
-
-        IActionListener l1 = lm.getImplicitListener(component);
-
-        l1.actionTriggered(null, cycle);
-
-		IActionListener l2 = lm.getImplicitListener(component);
-
-		verify();
-
-        assertSame(l1, l2);
-	}
-
-	public void test_Missing_Implicit_Listener()
-    {
-        ListenerMethodInvoker invoker = newInvoker();
-	    IComponent component = newMock(IComponent.class);
-	    expect(component.getLocation()).andReturn(null);
-	    expect(component.getId()).andReturn("action");
-        Map map = newMap("method", invoker);
-
-        replay();
-
-        ListenerMap lm = new ListenerMapImpl("test", map);
-
-        try
-        {
-            lm.getImplicitListener(component);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("No implicit listener method named 'doAction' found in " + component, ex
-                    .getMessage());
-            assertSame(component, ex.getComponent());
-        }
-
-        verify();
-    }
-
-    private Map newMap(Object key, Object value)
-    {
-        Map result = new HashMap();
-
-        result.put(key, value);
-
-        return result;
-    }
-
-    private ListenerMethodInvoker newInvoker()
-    {
-        return newMock(ListenerMethodInvoker.class);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/TestListenerMapSource.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/TestListenerMapSource.java
deleted file mode 100644
index e7bf7d8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/listener/TestListenerMapSource.java
+++ /dev/null
@@ -1,364 +0,0 @@
-// Copyright 2005, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.event.BrowserEvent;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.lang.reflect.Method;
-
-/**
- * Tests for {@link org.apache.tapestry.listener.ListenerMapSourceImpl}&nbsp;and
- * {@link org.apache.tapestry.listener.ListenerMethodInvokerImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestListenerMapSource extends BaseComponentTestCase
-{
-
-    private IRequestCycle newLCycle(Object[] listenerParameters)
-    {
-        IRequestCycle cycle = newCycle();
-
-        expect(cycle.getListenerParameters()).andReturn(listenerParameters);
-
-        return cycle;
-    }
-
-    private Method findMethod(Class clazz, String name)
-    {
-        Method[] methods = clazz.getMethods();
-
-        for(int i = 0; i < methods.length; i++)
-        {
-            if (methods[i].getName().equals(name)) return methods[i];
-        }
-
-        throw new IllegalArgumentException("No method '" + name + "' in " + clazz + ".");
-    }
-
-    private void attemptReturnType(boolean expected, Class clazz, String methodName)
-    {
-        Method m = findMethod(clazz, methodName);
-
-        ListenerMapSourceImpl lms = new ListenerMapSourceImpl();
-
-        assertEquals(expected, lms.isAcceptibleListenerMethodReturnType(m));
-    }
-
-    public void testAcceptibleListenerMethodReturnTypes()
-    {
-        Class clazz = ListenerMethodHolder.class;
-
-        attemptReturnType(true, clazz, "fred");
-        attemptReturnType(true, clazz, "returnsString");
-        attemptReturnType(true, clazz, "returnsBasePage");
-        attemptReturnType(false, clazz, "returnsObject");
-        attemptReturnType(false, clazz, "returnsInt");
-        attemptReturnType(true, clazz, "returnsLink");
-    }
-
-    public void testFoundWithParameters()
-    {
-        IRequestCycle cycle = newLCycle(new Object[] { "Hello", new Integer(7) });
-        ListenerMethodHolder holder = newHolder();
-
-        holder.fred("Hello", 7);
-
-        replay();
-
-        ListenerMapSource source = new ListenerMapSourceImpl();
-
-        ListenerMap map = source.getListenerMapForObject(holder);
-
-        map.getListener("fred").actionTriggered(null, cycle);
-
-        verify();
-    }
-
-    public void testFoundWithCycleAndParameters()
-    {
-        IRequestCycle cycle = newLCycle(new Object[] { new Integer(7) });
-        ListenerMethodHolder holder = newHolder();
-
-        holder.wilma(cycle, 7);
-
-        replay();
-
-        ListenerMapSource source = new ListenerMapSourceImpl();
-
-        ListenerMap map = source.getListenerMapForObject(holder);
-
-        map.getListener("wilma").actionTriggered(null, cycle);
-
-        verify();
-    }
-    
-    public void testFoundWithAllParameters()
-    {
-        BrowserEvent event = new BrowserEvent("onClick", null);
-        IRequestCycle cycle = newLCycle(new Object[] { new Integer(8), event });
-        ListenerMethodHolder holder = newHolder();
-        
-        holder.bangbangClicked(cycle, event, 8);
-        
-        replay();
-        
-        ListenerMapSource source = new ListenerMapSourceImpl();
-        
-        ListenerMap map = source.getListenerMapForObject(holder);
-        
-        map.getListener("bangbangClicked").actionTriggered(null, cycle);
-
-        verify();
-    }
-    
-    /**
-     * No exact match on parameter count, fall through to the no-arguments
-     * method implementation.
-     */
-
-    public void testNoParameterMatch()
-    {
-        IRequestCycle cycle = newLCycle(new Object[] { "Hello", new Integer(7) });
-        ListenerMethodHolder holder = newHolder();
-
-        holder.barney();
-
-        replay();
-
-        ListenerMapSource source = new ListenerMapSourceImpl();
-
-        ListenerMap map = source.getListenerMapForObject(holder);
-
-        map.getListener("barney").actionTriggered(null, cycle);
-
-        verify();
-    }
-
-    public void testFallbackToJustCycle()
-    {
-        IRequestCycle cycle = newLCycle(new Object[] { "Hello", new Integer(7) });
-
-        ListenerMethodHolder holder = newHolder();
-
-        holder.pebbles(cycle);
-
-        replay();
-
-        ListenerMapSource source = new ListenerMapSourceImpl();
-
-        ListenerMap map = source.getListenerMapForObject(holder);
-
-        map.getListener("pebbles").actionTriggered(null, cycle);
-
-        verify();
-    }
-
-    public void testReturnPageName()
-    {
-        IRequestCycle cycle = newLCycle(null);
-        ListenerMethodHolder holder = new ListenerMethodHolder("PageName");
-
-        cycle.activate("PageName");
-
-        replay();
-
-        ListenerMapSource source = new ListenerMapSourceImpl();
-
-        ListenerMap map = source.getListenerMapForObject(holder);
-
-        map.getListener("returnsPageName").actionTriggered(null, cycle);
-
-        verify();
-    }
-
-    public void testReturnLink()
-    {
-        IRequestCycle cycle = newLCycle(null);
-        
-        ILink link = newLink("http://foo/bar");
-        
-        cycle.sendRedirect("http://foo/bar");
-        
-        ListenerMethodHolder holder = new ListenerMethodHolder(link);
-
-        replay();
-
-        ListenerMapSource source = new ListenerMapSourceImpl();
-
-        ListenerMap map = source.getListenerMapForObject(holder);
-
-        map.getListener("returnsLink").actionTriggered(null, cycle);
-
-        verify();
-    }
-
-    private ILink newLink(String absoluteURL)
-    {
-        ILink link = newMock(ILink.class);
-
-        expect(link.getAbsoluteURL()).andReturn(absoluteURL);
-
-        return link;
-    }
-
-    public void testReturnPageInstance()
-    {
-        IPage page = newMock(IPage.class);
-        IRequestCycle cycle = newLCycle(null);
-        ListenerMethodHolder holder = new ListenerMethodHolder(page);
-
-        cycle.activate(page);
-
-        replay();
-
-        ListenerMapSource source = new ListenerMapSourceImpl();
-
-        ListenerMap map = source.getListenerMapForObject(holder);
-
-        map.getListener("returnsPage").actionTriggered(null, cycle);
-
-        verify();
-    }
-
-    @Test(expectedExceptions = ApplicationRuntimeException.class)
-    public void test_No_Match()
-    {
-        IRequestCycle cycle = newLCycle(new Object[] { "Hello", new Integer(7) });
-
-        replay();
-
-        ListenerMethodHolder holder = new ListenerMethodHolder();
-
-        ListenerMapSource source = new ListenerMapSourceImpl();
-
-        ListenerMap map = source.getListenerMapForObject(holder);
-
-        map.getListener("noMatchFound").actionTriggered(null, cycle);
-
-        verify();
-    }
-
-    public void testMismatchedTypes()
-    {
-        IRequestCycle cycle = newLCycle(new Object[] { "Hello" });
-
-        replay();
-
-        ListenerMethodHolder holder = new ListenerMethodHolder();
-
-        ListenerMapSource source = new ListenerMapSourceImpl();
-
-        ListenerMap map = source.getListenerMapForObject(holder);
-
-        try
-        {
-            map.getListener("wrongTypes").actionTriggered(null, cycle);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(IllegalArgumentException.class, ex.getRootCause().getClass());
-            assertTrue(ex.getMessage().startsWith(
-                    "Failure invoking listener method 'public void "
-                            + "org.apache.tapestry.listener.ListenerMethodHolder."
-                            + "wrongTypes(java.util.Map)' on ListenerMethodHolder:"));
-            
-            // TODO: IBM jre doesn't format these messages the same as sun's
-            // jre,
-            // IBM's message has no message string source for the
-            // IllegalArgumentException
-            assertSame(holder, ex.getComponent());
-        }
-
-        verify();
-    }
-
-    public void testInvocationTargetException()
-    {
-        IRequestCycle cycle = newLCycle(new Object[] { "Hello", new Integer(7) });
-
-        ListenerMethodHolder holder = new ListenerMethodHolder();
-
-        RuntimeException exception = new IllegalArgumentException("Just for kicks.");
-
-        holder.setException(exception);
-
-        replay();
-
-        ListenerMapSource source = new ListenerMapSourceImpl();
-
-        ListenerMap map = source.getListenerMapForObject(holder);
-
-        try
-        {
-            map.getListener("throwsException").actionTriggered(null, cycle);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Failure invoking listener method 'public void org.apache.tapestry.listener.ListenerMethodHolder.throwsException()' on ListenerMethodHolder: Just for kicks.",
-                    ex.getMessage());
-            assertSame(holder, ex.getComponent());
-            assertSame(exception, ex.getRootCause());
-        }
-
-        verify();
-    }
-
-    public void testInvocationTargetExceptionForApplicationRuntimeException()
-    {
-        IRequestCycle cycle = newLCycle(new Object[] { "Hello", new Integer(7) });
-
-        ListenerMethodHolder holder = new ListenerMethodHolder();
-
-        RuntimeException exception = new ApplicationRuntimeException("Just for kicks.");
-
-        holder.setException(exception);
-
-        replay();
-
-        ListenerMapSource source = new ListenerMapSourceImpl();
-
-        ListenerMap map = source.getListenerMapForObject(holder);
-
-        try
-        {
-            map.getListener("throwsException").actionTriggered(null, cycle);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertSame(exception, ex);
-        }
-
-        verify();
-    }
-
-    private ListenerMethodHolder newHolder()
-    {
-        return (ListenerMethodHolder)newInstance(ListenerMethodHolder.class);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/markup/TestJSONWriter.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/markup/TestJSONWriter.java
deleted file mode 100644
index 6cd35e8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/markup/TestJSONWriter.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.markup;
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintWriter;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.json.IJSONWriter;
-import org.apache.tapestry.json.JSONObject;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of the {@link IJSONWriter} class.
- * 
- * @author jkuhnert
- */
-@Test
-public class TestJSONWriter extends BaseComponentTestCase
-{
-    
-    /**
-     * Tests creating a list of key/value pairs.
-     */
-    public void testPropertyList() 
-    {
-        IJSONWriter writer = newJSONWriter();
-        
-        JSONObject json = writer.object();
-        
-        json.put("red", "ball");
-        json.put("black", "cat");
-        json.put("orange", "orange");
-        
-        assertEquals(json.get("red"), "ball");
-        assertEquals(json.get("black"), "cat");
-        assertEquals(json.get("orange"), "orange");
-    }
-    
-    /* All writer content is written to this buffer */
-    protected ByteArrayOutputStream outputBuffer;
-    
-    /**
-     * Creates a writer instance that content can be asserted
-     * against.
-     */
-    protected JSONWriterImpl newJSONWriter()
-    {
-        outputBuffer = new ByteArrayOutputStream();
-        PrintWriter pw = 
-            new PrintWriter(outputBuffer);
-        
-        JSONWriterImpl writer = new JSONWriterImpl(pw);
-        
-        return writer;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/markup/TestMarkupWriter.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/markup/TestMarkupWriter.java
deleted file mode 100644
index fb587b6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/markup/TestMarkupWriter.java
+++ /dev/null
@@ -1,824 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.markup;
-
-import java.io.CharArrayWriter;
-import java.io.PrintWriter;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IMarkupWriter;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.markup.MarkupWriterImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestMarkupWriter extends BaseComponentTestCase
-{
-    private static CharArrayWriter _writer;
-
-    private static final String NEWLINE = System.getProperty("line.separator");
-
-    private static class EchoMarkupFilter implements MarkupFilter
-    {
-        public void print(PrintWriter writer, char[] data, int offset, int length,
-                boolean escapeQuotes)
-        {
-            writer.print('{');
-            writer.write(data, offset, length);
-            writer.print('}');
-        }
-    }
-
-    public static class PrintWriterFixture extends PrintWriter
-    {
-
-        public PrintWriterFixture()
-        {
-            super(_writer);
-        }
-    }
-
-    private MarkupFilter newFilter()
-    {
-        return newMock(MarkupFilter.class);
-    }
-
-    private PrintWriter newPrintWriter()
-    {
-        _writer = new CharArrayWriter();
-
-        return new PrintWriter(_writer);
-    }
-
-    @AfterClass
-    protected void tearDown() throws Exception
-    {
-        _writer = null;
-    }
-
-    private void assertOutput(String expected)
-    {
-        assertEquals(_writer.toString(), expected);
-
-        _writer.reset();
-    }
-
-    public void testIntAttribute()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("span");
-        mw.attribute("width", 5);
-        mw.end();
-
-        verify();
-        
-        assertOutput("<span width=\"{5}\"></span>");
-    }
-
-    public void testIntAttributeRequiresTag()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        try
-        {
-            mw.attribute("width", 5);
-            unreachable();
-        }
-        catch (IllegalStateException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void testBooleanAttribute()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        
-        mw.begin("div");
-        mw.attribute("true", true);
-        mw.attribute("false", false);
-        
-        mw.end();
-        
-        verify();
-        
-        assertOutput("<div true=\"{true}\" false=\"{false}\"></div>");
-    }
-
-    public void testBooleanAttributeRequiresTag()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        try
-        {
-            mw.attribute("true", true);
-            unreachable();
-        }
-        catch (IllegalStateException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void testAttribute()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        
-        mw.begin("span");
-        mw.attribute("width", "100%");
-        mw.end();
-        
-        // Braces added by EchoMarkupFilter, to prove its there.
-
-        assertOutput("<span width=\"{100%}\"></span>");
-    }
-
-    public void testAttributeNull()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("span");
-        mw.attribute("width", null);
-        mw.end();
-        
-        // Braces added by EchoMarkupFilter, to prove its there.
-        
-        assertOutput("<span width=\"\"></span>");
-        
-        verify();
-    }
-    
-    public void test_Duplicate_Attributes()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        
-        mw.begin("span");
-        mw.attribute("width", "100%");
-        mw.attribute("width", "80%");
-        mw.end();
-        
-        assertOutput("<span width=\"{80%}\"></span>");
-    }
-    
-    public void testAttributeRequiresTag()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        try
-        {
-            mw.attribute("attribute", "value");
-            unreachable();
-        }
-        catch (IllegalStateException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void test_Append_Attribute()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        
-        mw.begin("span");
-        mw.appendAttribute("class", "fred");
-        mw.appendAttribute("class", "barney");
-        mw.appendAttribute("type", false);
-        mw.end();
-        
-        assertOutput("<span class=\"{fred barney}\" type=\"{false}\"></span>");
-    }
-    
-    public void test_Append_Attribute_Null()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        
-        mw.begin("span");
-        mw.appendAttribute("class", "fred");
-        mw.appendAttribute("class", null);
-        mw.end();
-        
-        assertOutput("<span class=\"{fred}\"></span>");
-    }
-    
-    public void test_Append_Attribute_Raw()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        
-        mw.begin("span");
-        mw.appendAttributeRaw("class", null);
-        mw.appendAttributeRaw("type", "&lt;&gt;");
-        mw.end();
-        
-        assertOutput("<span class=\"\" type=\"&lt;&gt;\"></span>");
-    }
-    
-    public void test_Get_Attribute()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        
-        mw.begin("span");
-        mw.appendAttribute("class", "fred");
-        
-        assertNotNull(mw.getAttribute("class"));
-        assertEquals(mw.getAttribute("class").toString(), "fred");
-        
-        mw.end();
-        
-        assertOutput("<span class=\"{fred}\"></span>");
-    }
-    
-    public void test_Has_Attribute()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        
-        mw.begin("span");
-        mw.appendAttribute("class", "fred");
-        
-        assertTrue(mw.hasAttribute("class"));
-        assertEquals(mw.getAttribute("class").toString(), "fred");
-        
-        mw.end();
-        
-        assertOutput("<span class=\"{fred}\"></span>");
-    }
-    
-    public void test_Remove_Attribute()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        
-        mw.begin("span");
-        mw.appendAttribute("class", "fred");
-        
-        assertTrue(mw.hasAttribute("class"));
-        
-        assertEquals(mw.removeAttribute("class").toString(), "fred");
-        
-        assertFalse(mw.hasAttribute("class"));
-        
-        mw.end();
-        
-        assertOutput("<span></span>");
-    }
-    
-    public void test_Clear_Attributes()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        
-        mw.begin("span");
-        mw.attribute("class", "fred");
-        mw.attribute("barney", "bam bam");
-        
-        assertTrue(mw.hasAttribute("barney"));
-        mw.clearAttributes();
-        
-        assertFalse(mw.hasAttribute("barney"));
-        assertFalse(mw.hasAttribute("class"));
-        
-        mw.end();
-        
-        assertOutput("<span></span>");
-    }
-    
-    public void testEnd()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("div");
-        mw.attribute("width", "100%");
-        mw.end();
-
-        assertOutput("<div width=\"{100%}\"></div>");
-    }
-
-    public void testPrint()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.print("Hello");
-
-        assertOutput("{Hello}");
-    }
-
-    public void testPrintWithRawFlag()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.print("Filtered", false);
-
-        assertOutput("{Filtered}");
-
-        mw.print("Raw", true);
-
-        assertOutput("Raw");
-    }
-
-    public void testPrintClosesCurrentTag()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("div");
-        mw.print("Hello");
-        mw.end();
-
-        assertOutput("<div>{Hello}</div>");
-    }
-
-    public void testPrintNull()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("span");
-        mw.print(null);
-        mw.end();
-
-        assertOutput("<span></span>");
-
-        verify();
-    }
-
-    public void testCloseTag()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("div");
-        mw.closeTag();
-
-        assertOutput("<div>");
-
-        mw.beginEmpty("img");
-        mw.closeTag();
-
-        assertOutput("<img />");
-
-        verify();
-    }
-
-    public void testNestedEnd()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("h1");
-        mw.begin("b");
-        mw.beginEmpty("img");
-        mw.begin("span");
-        mw.closeTag();
-
-        assertOutput("<h1><b><img /><span>");
-
-        mw.end();
-
-        assertOutput("</span>");
-
-        mw.end();
-
-        // Note: skipping the empty <img> tag
-
-        assertOutput("</b>");
-
-        mw.end();
-
-        assertOutput("</h1>");
-
-        verify();
-    }
-
-    public void testEndNamed()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("h1");
-        mw.begin("b");
-        mw.beginEmpty("img");
-        mw.begin("span");
-        mw.closeTag();
-
-        assertOutput("<h1><b><img /><span>");
-
-        // Uses the stack to close elements.
-
-        mw.end("h1");
-
-        assertOutput("</span></b></h1>");
-
-        verify();
-    }
-
-    public void testClose()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("span");
-        mw.begin("div");
-        mw.print("text");
-
-        assertOutput("<span><div>{text}");
-
-        mw.close();
-
-        assertOutput("</div></span>");
-
-        assertEquals(false, writer.checkError());
-
-        writer.println();
-
-        assertEquals(true, writer.checkError());
-    }
-
-    public void testComment()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.comment("Tapestry Rocks!");
-
-        // Note: not filtered
-
-        assertOutput("<!-- Tapestry Rocks! -->" + NEWLINE);
-
-        verify();
-    }
-
-    public void testCommentClosesTag()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("div");
-        mw.comment("Tapestry Rocks!");
-
-        // Note: not filtered
-
-        assertOutput("<div><!-- Tapestry Rocks! -->" + NEWLINE);
-
-        verify();
-    }
-    
-    public void testFlush()
-    {
-        _writer = new CharArrayWriter();
-
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = org.easymock.classextension.EasyMock.createMock(PrintWriterFixture.class);
-
-        writer.flush();
-        
-        replay();
-        org.easymock.classextension.EasyMock.replay(writer);
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.flush();
-
-        verify();
-        org.easymock.classextension.EasyMock.verify(writer);
-    }
-
-    public void testPrintCharArray()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.print(new char[]
-        { 'A', 'j', 'a', 'x', 'i', 'a', 'n' }, 1, 3);
-
-        assertOutput("{jax}");
-    }
-
-    public void testPrintChar()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.print('x');
-
-        assertOutput("{x}");
-    }
-
-    public void testPrintInt()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.print(123);
-
-        assertOutput("123");
-    }
-
-    public void testPrintIntClosesTag()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("span");
-
-        assertOutput("<span");
-
-        mw.print(123);
-
-        assertOutput(">123");
-    }
-
-    public void testPrintLn()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.println();
-
-        assertOutput(NEWLINE);
-
-        verify();
-    }
-
-    public void testPrintLnClosesTag()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("p");
-
-        assertOutput("<p");
-
-        mw.println();
-
-        assertOutput(">" + NEWLINE);
-
-        verify();
-    }
-
-    public void testPrintRawCharArray()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("p");
-
-        assertOutput("<p");
-
-        mw.printRaw(new char[]
-        { 'a', 'b', 'c', 'd' }, 1, 2);
-
-        assertOutput(">bc");
-
-        verify();
-    }
-
-    public void testPrintRawString()
-    {
-        MarkupFilter filter = newFilter();
-        PrintWriter writer = newPrintWriter();
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("p");
-
-        assertOutput("<p");
-
-        mw.print("Fred", true);
-
-        assertOutput(">Fred");
-
-        verify();
-    }
-
-    public void testNestedWriter()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        
-        mw.begin("div");
-        
-        IMarkupWriter nested = mw.getNestedWriter();
-        
-        assertEquals("text/html", nested.getContentType());
-        
-        nested.begin("span");
-        nested.attribute("class", "inner");
-        nested.print("nested content");
-        
-        mw.attribute("class", "outer");
-        
-        nested.close();
-
-        // Close the <div>, then comes the inner/nested content.
-        
-        mw.print("after content");
-        mw.end();
-        
-        assertOutput("<div class=\"{outer}\"><span class=\"{inner}\">{nested content}</span>{after content}</div>");
-    }
-
-    public void testRepeatCloseOnNestedWriter()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        IMarkupWriter nested = mw.getNestedWriter();
-
-        nested.close();
-
-        try
-        {
-            nested.close();
-        }
-        catch (IllegalStateException ex)
-        {
-            // Expected.
-        }
-    }
-
-    public void testEndNamedNotOnStack()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        mw.begin("div");
-        mw.begin("span");
-        mw.begin("b");
-
-        try
-        {
-            mw.end("table");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Can not close to element 'table', because no such element is on the active elements stack (div, span, b).",
-                    ex.getMessage());
-        }
-    }
-
-    public void testEndWithEmptyStack()
-    {
-        MarkupFilter filter = new EchoMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-
-        try
-        {
-            mw.end();
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Can not end most recent element because the stack of active elements is empty.",
-                    ex.getMessage());
-        }
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/multipart/TestMultipartDecoderFilter.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/multipart/TestMultipartDecoderFilter.java
deleted file mode 100644
index 0abf9c3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/multipart/TestMultipartDecoderFilter.java
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import static org.easymock.EasyMock.expect;
-
-import java.io.IOException;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.services.ServletRequestServicer;
-import org.testng.annotations.Test;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Tests for {@link org.apache.tapestry.multipart.MultipartDecoderFilter}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestMultipartDecoderFilter extends BaseComponentTestCase
-{
-    private static class MockServicer implements ServletRequestServicer
-    {
-        HttpServletRequest _request;
-
-        public void service(HttpServletRequest request, HttpServletResponse response)
-                throws IOException, ServletException
-        {
-            _request = request;
-        }
-    }
-
-    private HttpServletRequest newRequest(String contentType)
-    {
-        HttpServletRequest request = newMock(HttpServletRequest.class);
-
-        expect(request.getContentType()).andReturn(contentType);
-
-        return request;
-    }
-
-    private HttpServletResponse newResponse()
-    {
-        return newMock(HttpServletResponse.class);
-    }
-
-    public void testNormalRequest() throws Exception
-    {
-        HttpServletRequest request = newRequest("application/x-www-form-urlencoded");
-        HttpServletResponse response = newResponse();
-
-        MockServicer servicer = new MockServicer();
-
-        replay();
-
-        MultipartDecoderFilter f = new MultipartDecoderFilter();
-
-        f.service(request, response, servicer);
-
-        assertSame(request, servicer._request);
-
-        verify();
-    }
-
-    public void testUploadRequest() throws Exception
-    {
-        HttpServletRequest request = newRequest("multipart/form-data");
-        HttpServletResponse response = newResponse();
-        HttpServletRequest decoded = newMock(HttpServletRequest.class);
-        
-        ServletMultipartDecoder decoder = newMock(ServletMultipartDecoder.class);
-
-        expect(decoder.decode(request)).andReturn(decoded);
-
-        decoder.cleanup();
-
-        MockServicer servicer = new MockServicer();
-
-        replay();
-
-        MultipartDecoderFilter f = new MultipartDecoderFilter();
-        f.setDecoder(decoder);
-
-        f.service(request, response, servicer);
-
-        assertSame(decoded, servicer._request);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/multipart/TestUploadFormParametersWrapper.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/multipart/TestUploadFormParametersWrapper.java
deleted file mode 100644
index 6dac7ca..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/multipart/TestUploadFormParametersWrapper.java
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.multipart.UploadFormParametersWrapper}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestUploadFormParametersWrapper extends BaseComponentTestCase
-{
-    private HttpServletRequest newHttpRequest()
-    {
-        HttpServletRequest req = newMock(HttpServletRequest.class);
-        expect(req.getParameterMap()).andReturn( new HashMap() ).anyTimes();
-        return req;
-    }
-    
-    public void testMapIsNotModifiable()
-    {
-        HttpServletRequest request = newHttpRequest();
-
-        replay();
-
-        Map map = new HashMap();
-
-        map.put("key", new String[] { "value" });
-
-        HttpServletRequest r = new UploadFormParametersWrapper(request, map);
-
-        Map pmap = r.getParameterMap();
-
-        assertNotSame(map, pmap);
-
-        assertSame(map.get("key"), pmap.get("key"));
-
-        try
-        {
-            pmap.put("foo", "bar");
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void testGetSingleParameterWhenNull()
-    {
-        HttpServletRequest request = newHttpRequest();
-
-        replay();
-
-        HttpServletRequest r = new UploadFormParametersWrapper(request, new HashMap());
-
-        assertNull(r.getParameter("unknown-key"));
-
-        verify();
-    }
-
-    public void testGetSingleParameterWhenEmptyArray()
-    {
-        HttpServletRequest request = newHttpRequest();
-
-        replay();
-
-        HashMap params = new HashMap();
-
-        params.put("empty-key", new String[0]);
-
-        HttpServletRequest r = new UploadFormParametersWrapper(request, params);
-
-        assertNull(r.getParameter("empty-key"));
-
-        verify();
-    }
-
-    public void testGetParameterValues()
-    {
-        String[] values =
-        { "fred", "barney" };
-
-        HttpServletRequest request = newHttpRequest();
-
-        replay();
-
-        HashMap params = new HashMap();
-
-        params.put("key", values);
-
-        HttpServletRequest r = new UploadFormParametersWrapper(request, params);
-
-        assertSame(values, r.getParameterValues("key"));
-
-        verify();
-    }
-
-    public void testGetParameterNames()
-    {
-        HttpServletRequest request = newHttpRequest();
-
-        replay();
-
-        HashMap params = new HashMap();
-
-        params.put("key", new String[0]);
-
-        HttpServletRequest r = new UploadFormParametersWrapper(request, params);
-
-        Enumeration e = r.getParameterNames();
-
-        assertEquals(true, e.hasMoreElements());
-        assertEquals("key", e.nextElement());
-        assertEquals(false, e.hasMoreElements());
-
-        verify();
-    }
-    
-    public void testGetUrlParameter()  // Test fix for TAPESTRY-340
-    {
-        HttpServletRequest req = newMock(HttpServletRequest.class);
-        expect(req.getParameterMap()).andReturn(new HashMap(){{put("urlParam", new String[]{"urlParamValue"} );}} ).anyTimes();
-
-        replay();
-        
-        HttpServletRequest r = new UploadFormParametersWrapper(req, new HashMap());
-        
-        assertEquals("urlParamValue", r.getParameter("urlParam") );
-        assertEquals("urlParam", r.getParameterNames().nextElement() );
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/multipart/TestUploadPart.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/multipart/TestUploadPart.java
deleted file mode 100644
index 8b7b4b1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/multipart/TestUploadPart.java
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.multipart;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.tapestry.TestBase;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- *  Tests functionality of {@link UploadPart}.
- */
-@Test
-public class TestUploadPart extends TestBase {
-
-    public void test_Windows_File_Name()
-    {
-        FileItem item = newMock(FileItem.class);
-        
-        expect(item.getName()).andReturn("C:\\\\documents\\things\\image.png");
-        
-        replay();
-        
-        UploadPart part = new UploadPart(item);
-        assertEquals(part.getFileName(), "image.png");
-        
-        verify();
-    }
-    
-    public void test_Windows_File_Path()
-    {
-        FileItem item = newMock(FileItem.class);
-        
-        expect(item.getName()).andReturn("C:\\\\documents\\things\\image.png");
-        
-        replay();
-        
-        UploadPart part = new UploadPart(item);
-        assertEquals(part.getFilePath(), "C:\\\\documents\\things\\image.png");
-        
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/PageLoaderTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/PageLoaderTest.java
deleted file mode 100644
index 8af2240..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/PageLoaderTest.java
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.BindingSource;
-import org.apache.tapestry.services.ComponentPropertySource;
-import org.apache.tapestry.spec.*;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-/**
- * Additional tests for {@link org.apache.tapestry.pageload.PageLoader}. Ultimately, testing this
- * beast without the mock unit test suites is going to take a lot of work and refactoring.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class PageLoaderTest extends BaseComponentTestCase
-{
-
-    public void test_Add_Duplicate_Binding_Fails()
-    {
-        IComponent component = newComponent();
-        Location l1 = newLocation();
-        Location l2 = newLocation();
-        IBinding oldBinding = newBinding(l1);
-        IBinding newBinding = newBinding(l2);
-
-        trainGetBinding(component, "dupe", oldBinding);
-
-        replay();
-
-        try
-        {
-            PageLoader.addBindingToComponent(component, "dupe", newBinding);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assert ex.getMessage()
-            .indexOf("A binding for parameter dupe conflicts with a previous binding") > -1;
-            assertSame(component, ex.getComponent());
-            assertSame(l2, ex.getLocation());
-        }
-    }
-
-    public void test_Bind_Alias()
-    {
-        IComponent container = newComponent();
-        IComponent component = newComponent();
-        Log log = newLog();
-        IBinding binding = newBinding();
-        BindingSource source = newBindingSource();
-
-        ParameterSpecification pspec = new ParameterSpecification();
-        pspec.setParameterName("fred");
-        pspec.setAliases("barney");
-
-        Location l = newLocation();
-
-        BindingSpecification bspec = new BindingSpecification();
-        bspec.setType(BindingType.PREFIXED);
-        bspec.setValue("an-expression");
-        bspec.setLocation(l);
-
-        ContainedComponent contained = new ContainedComponent();
-        contained.setBinding("barney", bspec);
-        contained.setType("FredComponent");
-
-        IComponentSpecification spec = new ComponentSpecification();
-        spec.addParameter(pspec);
-
-        trainGetSpecification(component, spec);
-
-        log.warn(startsWith("Parameter barney (for component FredComponent, at "));
-
-        trainCreateBinding(
-                source,
-                container,
-                pspec,
-                "parameter barney",
-                "an-expression",
-                "ognl",
-                l,
-                binding);
-
-        trainGetBinding(component, "fred", null);
-
-        component.setBinding("fred", binding);
-
-        replay();
-
-        PageLoader loader = new PageLoader();
-        loader.setLog(log);
-        loader.setBindingSource(source);
-
-        loader.bind(container, component, contained, "ognl");
-
-        verify();
-    }
-
-    private void trainCreateBinding(BindingSource source, IComponent container, IParameterSpecification ps, String description,
-            String expression, String defaultBindingPrefix, Location l, IBinding binding)
-    {
-        expect(source.createBinding(container, ps, description, expression, defaultBindingPrefix, l)).andReturn(binding);
-    }
-
-    protected BindingSource newBindingSource()
-    {
-        return newMock(BindingSource.class);
-    }
-
-    public void test_Bind_Deprecated()
-    {
-        IComponent container = newComponent();
-        IComponent component = newComponent();
-        IBinding binding = newBinding();
-        BindingSource source = newBindingSource();
-        Log log = newLog();
-
-        ParameterSpecification pspec = new ParameterSpecification();
-        pspec.setParameterName("fred");
-        pspec.setDeprecated(true);
-
-        Location l = newLocation();
-
-        BindingSpecification bspec = new BindingSpecification();
-        bspec.setType(BindingType.PREFIXED);
-        bspec.setValue("an-expression");
-        bspec.setLocation(l);
-
-        ContainedComponent contained = new ContainedComponent();
-        contained.setBinding("fred", bspec);
-        contained.setType("FredComponent");
-
-        IComponentSpecification spec = new ComponentSpecification();
-        spec.addParameter(pspec);
-
-        trainGetSpecification(component, spec);
-
-        log.warn(endsWith("has been deprecated, "
-                        + "and may be removed in a future release. Consult the documentation for component FredComponent to "
-                        + "determine an appropriate replacement."));
-
-        trainCreateBinding(source, container, pspec, "parameter fred", "an-expression", "ognl", l, binding);
-
-        trainGetBinding(component, "fred", null);
-
-        component.setBinding("fred", binding);
-
-        replay();
-
-        PageLoader loader = new PageLoader();
-        loader.setLog(log);
-        loader.setBindingSource(source);
-
-        loader.bind(container, component, contained, "ognl");
-
-        verify();
-    }
-
-    protected ComponentPropertySource newPropertySource()
-    {
-        return newMock(ComponentPropertySource.class);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java
deleted file mode 100644
index 0ae3014..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/TestEventConnectionVisitor.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.apache.tapestry.pageload;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.internal.event.ComponentEventProperty;
-import org.apache.tapestry.internal.event.IComponentEventInvoker;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Tests functionality of {@link EventConnectionVisitor}.
- */
-@Test
-public class TestEventConnectionVisitor extends BaseComponentTestCase {
-
-    public void test_Wire_Component_Event()
-    {
-        IComponentSpecification spec = new ComponentSpecification();
-        spec.addEventListener("comp1", new String[] {"onClick"}, "testFoo", null, false, false, false, false);
-
-        IComponent comp = newComponent(spec, "comp1", "path/");
-        IComponentEventInvoker invoker = newMock(IComponentEventInvoker.class);
-
-        invoker.addEventListener("path/comp1", spec);
-
-        replay();
-
-        EventConnectionVisitor v = new EventConnectionVisitor();
-        v.setEventInvoker(invoker);
-
-        v.visitComponent(comp);
-
-        verify();
-    }
-
-    public void test_Wire_Element_Form_Events()
-    {
-        IComponentSpecification spec = new ComponentSpecification();
-        spec.addElementEventListener("elem1", new String[] {"onClick"}, "testFoo", "form", false, false, false);
-
-        IComponent comp = newComponent(spec);
-        IPage page = newMock(IPage.class);
-        IForm form = newMock(IForm.class);
-        IComponentEventInvoker invoker = newMock(IComponentEventInvoker.class);
-
-        Map comps = new HashMap();
-        comps.put("form", form);
-
-        expect(comp.getPage()).andReturn(page).anyTimes();
-        expect(page.getComponents()).andReturn(comps).anyTimes();
-        expect(comp.getComponents()).andReturn(Collections.EMPTY_MAP).anyTimes();
-        expect(form.getComponents()).andReturn(Collections.EMPTY_MAP).anyTimes();
-
-        expect(form.getId()).andReturn("form").anyTimes();
-        expect(form.getExtendedId()).andReturn("path/form").anyTimes();
-
-        invoker.addFormEventListener("path/form", spec);
-        invoker.addFormEventListener("path/form", spec);
-
-        replay();
-
-        EventConnectionVisitor v = new EventConnectionVisitor();
-        v.setEventInvoker(invoker);
-
-        v.visitComponent(comp);
-        v.visitComponent(comp);
-
-        verify();
-    }
-
-    public void test_Spec_Rewire_Id()
-    {
-        IComponentSpecification spec = newMock(IComponentSpecification.class);
-        IComponentEventInvoker invoker = newMock(IComponentEventInvoker.class);
-        IComponent comp = newComponent(spec, "comp1", "path/");
-
-        ComponentEventProperty p = new ComponentEventProperty("comp1");
-        p.addListener(new String[] {"onClick"}, "testFoo", null, false, false, false, false);
-
-        Map compEvents = new HashMap();
-        compEvents.put("comp1", p);
-        
-        expect(spec.getComponentEvents()).andReturn(compEvents);
-        expect(spec.getElementEvents()).andReturn(Collections.EMPTY_MAP);
-
-        invoker.addEventListener("path/comp1", spec);
-        spec.rewireComponentId("comp1", "path/comp1");
-
-        replay();
-
-        EventConnectionVisitor v = new EventConnectionVisitor();
-        v.setEventInvoker(invoker);
-
-        v.visitComponent(comp);
-
-        verify();
-    }
-
-    IComponent newComponent(IComponentSpecification spec, String findCompId, Object... args)
-    {
-        IComponent comp = newComponent(spec);
-        IPage page = newMock(IPage.class);
-
-        expect(comp.getPage()).andReturn(page).anyTimes();
-        
-        Map comps = new HashMap();
-        comps.put(findCompId, comp);
-
-        expect(page.getComponents()).andReturn(comps).anyTimes();
-        expect(comp.getComponents()).andReturn(null).anyTimes();
-
-        if (args.length > 0) {
-            
-            expect(comp.getExtendedId()).andReturn(args[0] + findCompId).anyTimes();
-        }
-
-        return comp;
-    }
-
-    IComponent newComponent(IComponentSpecification spec)
-    {
-        IComponent comp = newMock(IComponent.class);
-
-        checkOrder(comp, false);
-        expect(comp.getSpecification()).andReturn(spec).anyTimes();
-
-        return comp;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/TestNamespaceClassSearchComponentClassProvider.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/TestNamespaceClassSearchComponentClassProvider.java
deleted file mode 100644
index 68ad225..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/TestNamespaceClassSearchComponentClassProvider.java
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.services.ClassFinder;
-import org.apache.tapestry.spec.IComponentSpecification;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.pageload.NamespaceClassSearchComponentClassProvider}.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestNamespaceClassSearchComponentClassProvider extends BaseComponentTestCase
-{
-    private INamespace newNamespace(String key, String prefixes)
-    {
-        INamespace namespace = newMock(INamespace.class);
-
-        expect(namespace.getPropertyValue(key)).andReturn(prefixes);
-
-        return namespace;
-    }
-
-    private ClassFinder newClassFinder(String packageList, String className, Class resultClass)
-    {
-        ClassFinder finder = newMock(ClassFinder.class);
-
-        expect(finder.findClass(packageList, className)).andReturn(resultClass);
-
-        return finder;
-    }
-
-    public void testFound()
-    {
-        INamespace namespace = newNamespace("zip", "org.apache.tapestry.pageload");
-        ClassFinder finder = newClassFinder(
-          "org.apache.tapestry.pageload",
-          "bar.Baz",
-          PageLoaderTest.class);
-
-        IComponentSpecification spec = newSpec();
-
-        replay();
-
-        ComponentClassProviderContext context = new ComponentClassProviderContext("bar/Baz", spec,
-                                                                                  namespace);
-
-        NamespaceClassSearchComponentClassProvider provider = new NamespaceClassSearchComponentClassProvider();
-        provider.setClassFinder(finder);
-        provider.setPackagesName("zip");
-
-        assertEquals(PageLoaderTest.class.getName(), provider.provideComponentClassName(context));
-
-        verify();
-    }
-
-    public void testNotFound()
-    {
-        INamespace namespace = newNamespace("zap", "org.foo");
-        ClassFinder finder = newClassFinder("org.foo", "bar.Baz", null);
-
-        IComponentSpecification spec = newSpec();
-
-        replay();
-
-        ComponentClassProviderContext context = new ComponentClassProviderContext("bar/Baz", spec,
-                                                                                  namespace);
-
-        NamespaceClassSearchComponentClassProvider provider = new NamespaceClassSearchComponentClassProvider();
-        provider.setClassFinder(finder);
-        provider.setPackagesName("zap");
-
-        assertNull(provider.provideComponentClassName(context));
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/TestVerifyRequiredParametersVisitor.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/TestVerifyRequiredParametersVisitor.java
deleted file mode 100644
index 7a500f9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/pageload/TestVerifyRequiredParametersVisitor.java
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ParameterSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.pageload.VerifyRequiredParametersVisitor}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestVerifyRequiredParametersVisitor extends BaseComponentTestCase
-{
-    private IComponent newComponent(IComponentSpecification spec)
-    {
-        IComponent component = newComponent();
-
-        expect(component.getSpecification()).andReturn(spec);
-
-        return component;
-    }
-
-    public void testNotRequired()
-    {
-        ParameterSpecification pspec = new ParameterSpecification();
-        pspec.setParameterName("fred");
-
-        ComponentSpecification cspec = new ComponentSpecification();
-        cspec.addParameter(pspec);
-
-        IComponent component = newComponent(cspec);
-
-        replay();
-
-        VerifyRequiredParametersVisitor visitor = new VerifyRequiredParametersVisitor();
-
-        visitor.visitComponent(component);
-
-        verify();
-    }
-
-    public void testRequiredWithAlias()
-    {
-        ParameterSpecification pspec = new ParameterSpecification();
-        pspec.setParameterName("fred");
-        pspec.setAliases("barney");
-        pspec.setRequired(true);
-
-        ComponentSpecification cspec = new ComponentSpecification();
-        cspec.addParameter(pspec);
-
-        IBinding fredBinding = newBinding();
-        IComponent component = newComponent(cspec);
-
-        // Notice that we don't ever check for "barney", just
-        // "fred"
-
-        expect(component.getBinding("fred")).andReturn(fredBinding);
-
-        replay();
-
-        VerifyRequiredParametersVisitor visitor = new VerifyRequiredParametersVisitor();
-
-        visitor.visitComponent(component);
-
-        verify();
-    }
-
-    public void testRequiredNotBound()
-    {
-        ParameterSpecification pspec = new ParameterSpecification();
-        pspec.setParameterName("fred");
-        pspec.setRequired(true);
-
-        ComponentSpecification cspec = new ComponentSpecification();
-        cspec.addParameter(pspec);
-
-        Location l = newLocation();
-        
-        IComponent component = newComponent(cspec);
-
-        expect(component.getBinding("fred")).andReturn(null);
-
-        expect(component.getExtendedId()).andReturn("Fred/flintstone");
-
-        expect(component.getLocation()).andReturn(l);
-
-        replay();
-
-        VerifyRequiredParametersVisitor visitor = new VerifyRequiredParametersVisitor();
-
-        try
-        {
-            visitor.visitComponent(component);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Required parameter fred of component Fred/flintstone is not bound.", ex
-                    .getMessage());
-            assertSame(component, ex.getComponent());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/ClientPropertyPersistenceStrategyTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/ClientPropertyPersistenceStrategyTest.java
deleted file mode 100644
index d000661..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/ClientPropertyPersistenceStrategyTest.java
+++ /dev/null
@@ -1,208 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.web.WebRequest;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.record.ClientPropertyPersistenceStrategy}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class ClientPropertyPersistenceStrategyTest extends BaseComponentTestCase
-{
-    private PersistentPropertyDataEncoder newEncoder()
-    {
-        PersistentPropertyDataEncoderImpl encoder = new PersistentPropertyDataEncoderImpl();
-        encoder.setClassResolver(getClassResolver());
-
-        return encoder;
-    }
-
-    private ClientPropertyPersistenceScope newScope()
-    {
-        return newMock(ClientPropertyPersistenceScope.class);
-    }
-
-    public void testAddParametersForPersistentProperties()
-    {
-        WebRequest request = newRequest();
-
-        ServiceEncoding encoding = newMock(ServiceEncoding.class);
-
-        trainGetParameterNames(request, new String[]
-        { "bar", "appstate:MyPage" });
-
-        trainGetParameterValue(request, "appstate:MyPage", "ENCODED");
-
-        encoding.setParameterValue("appstate:MyPage", "ENCODED");
-
-        replay();
-
-        ClientPropertyPersistenceStrategy strategy = new ClientPropertyPersistenceStrategy();
-        strategy.setRequest(request);
-        strategy.setScope(new AppClientPropertyPersistenceScope());
-        strategy.setEncoder(newEncoder());
-
-        strategy.initializeService();
-
-        strategy.addParametersForPersistentProperties(encoding, false);
-
-        verify();
-    }
-
-    public void testGetChangesUnknownPage()
-    {
-        ClientPropertyPersistenceStrategy strategy = new ClientPropertyPersistenceStrategy();
-
-        assertTrue(strategy.getStoredChanges("UnknownPage").isEmpty());
-    }
-
-    public void testInitialize()
-    {
-        WebRequest request = newRequest();
-        ClientPropertyPersistenceScope scope = newScope();
-        PersistentPropertyDataEncoder encoder = newMock(PersistentPropertyDataEncoder.class);
-
-        trainGetParameterNames(request, new String[]
-        { "foo", "state:MyPage" });
-
-        trainIsParameterForScope(scope, "foo", false);
-        trainIsParameterForScope(scope, "state:MyPage", true);
-
-        trainExtractPageName(scope, "state:MyPage", "MyPage");
-
-        trainGetParameterValue(request, "state:MyPage", "ENCODED");
-
-        List changes = Collections.singletonList(new PropertyChangeImpl("foo", "bar", "baz"));
-
-        trainDecodePageChanges(encoder, "ENCODED", changes);
-
-        replay();
-
-        ClientPropertyPersistenceStrategy strategy = new ClientPropertyPersistenceStrategy();
-        strategy.setRequest(request);
-        strategy.setScope(scope);
-        strategy.setEncoder(encoder);
-
-        strategy.initializeService();
-
-        assertSame(changes, strategy.getStoredChanges("MyPage"));
-
-        verify();
-    }
-
-    public void testPageScope()
-    {
-        WebRequest request = newRequest();
-        IRequestCycle cycle = newCycle();
-        IPage page = newPage();
-
-        ServiceEncoding encoding = newMock(ServiceEncoding.class);
-        
-        trainGetParameterNames(request, new String[] { "foo", "state:MyPage", "state:OtherPage" });
-        
-        trainGetParameterValue(request, "state:MyPage", "ENCODED1");
-        trainGetParameterValue(request, "state:OtherPage", "ENCODED2");
-       
-        trainGetPage(cycle, page);
-        trainGetPageName(page, "MyPage");
-        
-        encoding.setParameterValue("state:MyPage", "ENCODED1");
-
-        trainGetPage(cycle, page);
-        trainGetPageName(page, "MyPage");
-
-
-        replay();
-
-        PageClientPropertyPersistenceScope scope = new PageClientPropertyPersistenceScope();
-        scope.setRequestCycle(cycle);
-
-        ClientPropertyPersistenceStrategy strategy = new ClientPropertyPersistenceStrategy();
-        strategy.setRequest(request);
-        strategy.setScope(scope);
-        strategy.setEncoder(newEncoder());
-
-        strategy.initializeService();
-
-        strategy.addParametersForPersistentProperties(encoding, false);
-
-        verify();
-
-    }
-
-    public void testStoreAndRetrieve()
-    {
-        PropertyChange pc = new PropertyChangeImpl("foo", "bar", "baz");
-
-        ClientPropertyPersistenceStrategy strategy = new ClientPropertyPersistenceStrategy();
-        strategy.setEncoder(newEncoder());
-
-        strategy.store("MyPage", "foo", "bar", "baz");
-
-        assertEquals(Collections.singletonList(pc), strategy.getStoredChanges("MyPage"));
-
-        strategy.discardStoredChanges("MyPage");
-
-        assertEquals(Collections.EMPTY_LIST, strategy.getStoredChanges("MyPage"));
-    }
-
-    private void trainDecodePageChanges(PersistentPropertyDataEncoder encoder, String encoded,
-            List changes)
-    {
-        expect(encoder.decodePageChanges(encoded)).andReturn(changes);
-    }
-
-    private void trainExtractPageName(ClientPropertyPersistenceScope scope, String parameterName,
-            String pageName)
-    {
-        expect(scope.extractPageName(parameterName)).andReturn(pageName);
-    }
-
-    private void trainGetPage(IRequestCycle cycle, IPage page)
-    {
-        expect(cycle.getPage()).andReturn(page);
-    }
-
-    private void trainGetParameterNames(WebRequest request, String[] names)
-    {
-        expect(request.getParameterNames()).andReturn(Arrays.asList(names));
-    }
-
-    private void trainGetParameterValue(WebRequest request, String parameterName, String value)
-    {
-        expect(request.getParameterValue(parameterName)).andReturn(value);
-    }
-
-    private void trainIsParameterForScope(ClientPropertyPersistenceScope scope,
-            String parameterName, boolean result)
-    {
-        expect(scope.isParameterForScope(parameterName)).andReturn(result);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PageClientPropertyPersistenceScopeTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PageClientPropertyPersistenceScopeTest.java
deleted file mode 100644
index 6087df2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PageClientPropertyPersistenceScopeTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.record;

-

-import static org.easymock.EasyMock.expect;

-

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.IPage;

-import org.apache.tapestry.IRequestCycle;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.record.PageClientPropertyPersistenceScope}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class PageClientPropertyPersistenceScopeTest extends BaseComponentTestCase

-{

-    protected IRequestCycle newCycle()

-    {

-        return newMock(IRequestCycle.class);

-    }

-

-    protected IPage newPage()

-    {

-        return newMock(IPage.class);

-    }

-

-    public void testConstructParameterName()

-    {

-        PageClientPropertyPersistenceScope scope = new PageClientPropertyPersistenceScope();

-

-        assertEquals("state:MyPage", scope.constructParameterName("MyPage"));

-    }

-

-    public void testIsParameterForScope()

-    {

-        PageClientPropertyPersistenceScope scope = new PageClientPropertyPersistenceScope();

-

-        assertEquals(true, scope.isParameterForScope("state:MyPage"));

-        assertEquals(false, scope.isParameterForScope("foo"));

-        assertEquals(false, scope.isParameterForScope("appstate:Foo"));

-    }

-

-    public void testExtractPageName()

-    {

-        PageClientPropertyPersistenceScope scope = new PageClientPropertyPersistenceScope();

-

-        assertEquals("MyPage", scope.extractPageName("state:MyPage"));

-    }

-

-    public void testShouldEncodeState()

-    {

-        IRequestCycle cycle = newCycle();

-        IPage page = newPage();

-

-        trainGetPage(cycle, page);

-        trainGetPageName(page, "MyPage");

-

-        replay();

-

-        PageClientPropertyPersistenceScope scope = new PageClientPropertyPersistenceScope();

-

-        scope.setRequestCycle(cycle);

-

-        assertEquals(true, scope.shouldEncodeState(null, "MyPage", null));

-

-        verify();

-    }

-

-    public void testShouldEncodeStateDifferentPage()

-    {

-        IRequestCycle cycle = newCycle();

-        IPage page = newPage();

-

-        trainGetPage(cycle, page);

-        trainGetPageName(page, "MyPage");

-

-        replay();

-

-        PageClientPropertyPersistenceScope scope = new PageClientPropertyPersistenceScope();

-

-        scope.setRequestCycle(cycle);

-

-        assertEquals(false, scope.shouldEncodeState(null, "OtherPage", null));

-

-        verify();

-    }

-

-    public void testShouldEncodeStateNoActivePage()

-    {

-        IRequestCycle cycle = newCycle();

-

-        trainGetPage(cycle, null);

-

-        replay();

-

-        PageClientPropertyPersistenceScope scope = new PageClientPropertyPersistenceScope();

-

-        scope.setRequestCycle(cycle);

-

-        assertEquals(true, scope.shouldEncodeState(null, "MyPage", null));

-

-        verify();

-    }

-

-    private void trainGetPage(IRequestCycle cycle, IPage page)

-    {

-        expect(cycle.getPage()).andReturn(page);

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PageFixture.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PageFixture.java
deleted file mode 100644
index 98cff79..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PageFixture.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public abstract class PageFixture extends BasePage
-{
-    public abstract String getCartoonName();
-
-    public abstract void setCartoonName(String value);
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PersistentPropertyDataEncoderTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PersistentPropertyDataEncoderTest.java
deleted file mode 100644
index 859ff8c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PersistentPropertyDataEncoderTest.java
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-
-import java.io.File;
-import java.io.Serializable;
-import java.lang.reflect.Constructor;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Random;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.record.PersistentPropertyDataEncoderImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class PersistentPropertyDataEncoderTest extends BaseComponentTestCase
-{
-    /**
-     * Test pushing minimal amounts of data, which should favor the non-GZipped version of the
-     * output stream.
-     */
-
-    public void testRoundTripShort() throws Exception
-    {
-        PropertyChange pc = new PropertyChangeImpl(null, "property", "foo");
-        List input = Collections.singletonList(pc);
-
-        PersistentPropertyDataEncoder encoder = newEncoder();
-
-        String encoded = encoder.encodePageChanges(input);
-
-        System.out.println(encoded);
-
-        List output = encoder.decodePageChanges(encoded);
-
-        assertEquals(input, output);
-
-    }
-
-    /**
-     * Test pushing a lot of data, which should trigger the GZip encoding option.
-     */
-
-    public void testRoundTripLong() throws Exception
-    {
-        Random r = new Random();
-
-        List input = new ArrayList();
-
-        for (int i = 0; i < 20; i++)
-        {
-            PropertyChange pc = new PropertyChangeImpl(i % 2 == 0 ? null : "componentId",
-                    "property" + i, new Long(r.nextLong()));
-
-            input.add(pc);
-        }
-
-        PersistentPropertyDataEncoder encoder = newEncoder();
-
-        String encoded = encoder.encodePageChanges(input);
-
-        assertEquals("Z", encoded.substring(0, 1));
-
-        List output = encoder.decodePageChanges(encoded);
-
-        assertEquals(input, output);
-    }
-
-    private PersistentPropertyDataEncoder newEncoder()
-    {
-        return newEncoder(getClassResolver());
-    }
-
-    private PersistentPropertyDataEncoder newEncoder(ClassResolver resolver)
-    {
-        PersistentPropertyDataEncoderImpl encoder = new PersistentPropertyDataEncoderImpl();
-
-        encoder.setClassResolver(resolver);
-
-        return encoder;
-    }
-
-    public void testEmptyEncoding()
-    {
-        PersistentPropertyDataEncoder encoder = newEncoder();
-
-        assertEquals("", encoder.encodePageChanges(Collections.EMPTY_LIST));
-
-        assertEquals(0, encoder.decodePageChanges("").size());
-    }
-
-    public void testEncodeNonSerializable()
-    {
-        PropertyChange pc = new PropertyChangeImpl(null, "property", new Object());
-        List l = Collections.singletonList(pc);
-
-        PersistentPropertyDataEncoder encoder = newEncoder();
-
-        try
-        {
-            encoder.encodePageChanges(l);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "An exception occured encoding the data stream into MIME format: java.lang.Object",
-                    ex.getMessage());
-        }
-    }
-
-    public void testDecodeInvalid()
-    {
-        PersistentPropertyDataEncoder encoder = newEncoder();
-
-        try
-        {
-            encoder.decodePageChanges("ZZZZZZZZZZZZZZZZZZZ");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "An exception occured decoding the MIME data stream: Not in GZIP format",
-                    ex.getMessage());
-        }
-    }
-
-    public void testDecodeUnknownPrefix()
-    {
-        PersistentPropertyDataEncoder encoder = newEncoder();
-
-        try
-        {
-            encoder.decodePageChanges("QQQQQQQQQQQ");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "The prefix of the MIME encoded data stream was 'Q', it should be 'B' or 'Z'.",
-                    ex.getMessage());
-        }
-
-    }
-
-    /**
-     * Test encoding and decoding a class that's only visible through a non-default class loader. We
-     * have to use a lot of reflection on this one.
-     * 
-     * @see org.apache.tapestry.junit.utils.TestDataSqueezer#testClassLoader()
-     */
-    public void testEncodeDecodeCustomClass() throws Exception
-    {
-        File springJAR = new File("tapestry-framework/src/test-data/spring-1.1.jar");
-        if (!springJAR.exists())
-            springJAR = new File("src/test-data/spring-1.1.jar");
-        
-        if (!springJAR.exists())
-            throw new RuntimeException("File " + springJAR
-                    + " does not exist; this should have been downloaded by the Ant build scripts.");
-        
-        ClassResolver resolver1 = newClassResolver(springJAR);
-        
-        Class propertyValueClass = resolver1.findClass("org.springframework.beans.PropertyValue");
-        Constructor constructor = propertyValueClass.getConstructor(new Class[]
-        { String.class, Object.class });
-
-        Serializable instance = (Serializable) constructor.newInstance(new Object[]
-        { "fred", "flintstone" });
-
-        assertEquals("fred", PropertyUtils.read(instance, "name"));
-        assertEquals("flintstone", PropertyUtils.read(instance, "value"));
-
-        PersistentPropertyDataEncoder encoder1 = newEncoder(resolver1);
-
-        PropertyChange pc = new PropertyChangeImpl("foo.bar", "property", instance);
-        List changes = Collections.singletonList(pc);
-
-        String encoded = encoder1.encodePageChanges(changes);
-
-        // OK, to be 100% sure, we create a NEW encoder to decode the string in.
-        ClassResolver resolver2 = newClassResolver(springJAR);
-        PersistentPropertyDataEncoder encoder2 = newEncoder(resolver2);
-
-        changes = encoder2.decodePageChanges(encoded);
-
-        assertEquals(1, changes.size());
-
-        pc = (PropertyChange) changes.get(0);
-
-        assertEquals("property", pc.getPropertyName());
-        assertEquals("foo.bar", pc.getComponentPath());
-
-        Object instance2 = pc.getNewValue();
-
-        assertNotSame(instance, instance2);
-        
-        assertEquals("fred", PropertyUtils.read(instance2, "name"));
-        assertEquals("flintstone", PropertyUtils.read(instance2, "value"));
-    }
-    
-    private ClassResolver newClassResolver(File jarFile) throws Exception
-    {
-        URLClassLoader classLoader = new URLClassLoader(new URL[] { jarFile.toURI().toURL() });
-
-        return new DefaultClassResolver(classLoader);
-
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PropertyPersistenceStrategySourceTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PropertyPersistenceStrategySourceTest.java
deleted file mode 100644
index 9aecd74..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/PropertyPersistenceStrategySourceTest.java
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.record.PropertyPersistenceStrategySourceImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class PropertyPersistenceStrategySourceTest extends BaseComponentTestCase
-{
-    private PropertyPersistenceStrategy newStrategy()
-    {
-        return newMock(PropertyPersistenceStrategy.class);
-    }
-
-    private List newContributions(String name, PropertyPersistenceStrategy strategy)
-    {
-        PropertyPersistenceStrategyContribution c = new PropertyPersistenceStrategyContribution();
-        c.setName(name);
-        c.setStrategy(strategy);
-
-        return Collections.singletonList(c);
-    }
-
-    public void testGetKnownStrategy()
-    {
-        PropertyPersistenceStrategy strategy = newStrategy();
-
-        replay();
-
-        PropertyPersistenceStrategySourceImpl source = new PropertyPersistenceStrategySourceImpl();
-        source.setContributions(newContributions("known", strategy));
-        source.initializeService();
-
-        assertSame(strategy, source.getStrategy("known"));
-
-        verify();
-    }
-
-    public void testGetUnknownStrategy()
-    {
-        PropertyPersistenceStrategySourceImpl source = new PropertyPersistenceStrategySourceImpl();
-        source.setContributions(Collections.EMPTY_LIST);
-
-        try
-        {
-            source.getStrategy("unknown");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(RecordMessages.unknownPersistenceStrategy("unknown"), ex.getMessage());
-        }
-    }
-
-    protected void trainGetStoredChanges(PropertyPersistenceStrategy strategy, String pageName,
-            Collection changes)
-    {
-        expect(strategy.getStoredChanges(pageName)).andReturn(changes);
-    }
-
-    public void testGetAllStoredChanges()
-    {
-        PropertyPersistenceStrategy strategy = newStrategy();
-
-        PropertyChange change = newChange();
-
-        trainGetStoredChanges(strategy, "MyPage", Collections.singleton(change));
-
-        replay();
-
-        PropertyPersistenceStrategySourceImpl source = new PropertyPersistenceStrategySourceImpl();
-        source.setContributions(newContributions("whatever", strategy));
-        source.initializeService();
-
-        Collection result = source.getAllStoredChanges("MyPage");
-
-        assertEquals(1, result.size());
-        assertSame(change, result.iterator().next());
-
-        verify();
-    }
-
-    private PropertyChange newChange()
-    {
-        return newMock(PropertyChange.class);
-    }
-
-    public void testAddParameters()
-    {
-        PropertyPersistenceStrategy strategy = newStrategy();
-        ServiceEncoding encoding = newEncoding();
-
-        strategy.addParametersForPersistentProperties(encoding, false);
-
-        replay();
-
-        PropertyPersistenceStrategySourceImpl source = new PropertyPersistenceStrategySourceImpl();
-        source.setContributions(newContributions("whatever", strategy));
-        source.initializeService();
-
-        source.addParametersForPersistentProperties(encoding, false);
-
-        verify();
-
-        strategy.addParametersForPersistentProperties(encoding, true);
-
-        replay();
-
-        source.addParametersForPersistentProperties(encoding, true);
-    }
-
-    private ServiceEncoding newEncoding()
-    {
-        return newMock(ServiceEncoding.class);
-    }
-
-    public void testDiscardStoredChanges()
-    {
-        PropertyPersistenceStrategy strategy = newStrategy();
-
-        strategy.discardStoredChanges("Home");
-
-        replay();
-
-        PropertyPersistenceStrategySourceImpl source = new PropertyPersistenceStrategySourceImpl();
-        source.setContributions(newContributions("known", strategy));
-        source.initializeService();
-
-        source.discardAllStoredChanged("Home");
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/SessionPropertyPersistenceStrategyTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/SessionPropertyPersistenceStrategyTest.java
deleted file mode 100644
index f7bf330..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/SessionPropertyPersistenceStrategyTest.java
+++ /dev/null
@@ -1,299 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link SessionPropertyPersistenceStrategy}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class SessionPropertyPersistenceStrategyTest extends BaseComponentTestCase
-{
-    private ServiceEncoding newEncoding()
-    {
-        return newMock(ServiceEncoding.class);
-    }
-
-    private WebRequest newRequest(boolean create, WebSession session)
-    {
-        WebRequest request = newMock(WebRequest.class);
-
-        expect(request.getSession(create)).andReturn(session);
-
-        return request;
-    }
-
-    private WebSession newSession()
-    {
-        return newMock(WebSession.class);
-    }
-
-    private WebSession newSession(String attributeName, boolean remove)
-    {
-        WebSession session = newSession();
-        checkOrder(session, false);
-        
-        trainGetAttributeNames(session, Collections.singletonList(attributeName));
-
-        if (remove)
-            session.setAttribute(attributeName, null);
-
-        return session;
-    }
-
-    private WebSession newSession(String attributeName, Object value)
-    {
-        WebSession session = newMock(WebSession.class);
-        checkOrder(session, false);
-        
-        expect(session.getAttributeNames()).andReturn(Collections.singletonList(attributeName));
-        
-        if (value != null)
-            trainGetAttribute(session, attributeName, value);
-
-        return session;
-    }
-
-    public void testAddParametersDoesNothing()
-    {
-        ServiceEncoding encoding = newEncoding();
-
-        replay();
-
-        SessionPropertyPersistenceStrategy strategy = new SessionPropertyPersistenceStrategy();
-
-        strategy.addParametersForPersistentProperties(encoding, false);
-
-        verify();
-    }
-
-    public void testClearPageProperty()
-    {
-        WebSession session = newSession();
-        WebRequest request = newRequest(true, session);
-
-        session.setAttribute("session,myapp,Help,bar", null);
-
-        replay();
-
-        SessionPropertyPersistenceStrategy s = new SessionPropertyPersistenceStrategy();
-
-        s.setApplicationId("myapp");
-        s.setRequest(request);
-
-        s.store("Help", null, "bar", null);
-
-        verify();
-    }
-
-    public void testDiscardChangesNoMatch()
-    {
-        WebSession session = newSession("session,myapp,Home,foo", false);
-        
-        WebRequest request = newRequest();
-        expect(request.getSession(false)).andReturn(session);
-        
-        replay();
-
-        SessionPropertyPersistenceStrategy s = new SessionPropertyPersistenceStrategy();
-        s.setRequest(request);
-        s.setApplicationId("myapp");
-
-        s.discardStoredChanges("Foo");
-        verify();
-    }
-
-    public void testDiscardChangesNoSession()
-    {
-        WebRequest request = newRequest(false, null);
-
-        replay();
-
-        SessionPropertyPersistenceStrategy s = new SessionPropertyPersistenceStrategy();
-        s.setRequest(request);
-
-        s.discardStoredChanges("Foo");
-
-        verify();
-    }
-
-    public void testDiscardChangesWithMatch()
-    {
-        WebSession session = newSession("session,myapp,Home,foo", true);
-        
-        WebRequest request = newRequest();
-        expect(request.getSession(false)).andReturn(session);
-        
-        replay();
-
-        SessionPropertyPersistenceStrategy s = new SessionPropertyPersistenceStrategy();
-        s.setRequest(request);
-        s.setApplicationId("myapp");
-
-        s.discardStoredChanges("Home");
-
-        verify();
-    }
-
-    public void testGetStoreChangesNoMatch()
-    {
-        WebSession session = newSession("session,myapp,Home,foo,bar", null);
-        WebRequest request = newRequest();
-        expect(request.getSession(false)).andReturn(session);
-
-        replay();
-
-        SessionPropertyPersistenceStrategy s = new SessionPropertyPersistenceStrategy();
-        s.setRequest(request);
-        s.setApplicationId("myapp");
-
-        Collection actual = s.getStoredChanges("Help");
-
-        assertTrue(actual.isEmpty());
-
-        verify();
-    }
-
-    public void testGetStoredChangesNoSession()
-    {
-        WebRequest request = newRequest(false, null);
-
-        replay();
-
-        SessionPropertyPersistenceStrategy s = new SessionPropertyPersistenceStrategy();
-        s.setRequest(request);
-
-        assertTrue(s.getStoredChanges("Foo").isEmpty());
-
-        verify();
-    }
-
-    public void testGetStoredComponentProperty()
-    {
-        Object value = new Object();
-        WebSession session = newSession("session,myapp,Help,zap.biff,bar", value);
-        WebRequest request = newRequest(false, session);
-
-        replay();
-
-        SessionPropertyPersistenceStrategy s = new SessionPropertyPersistenceStrategy();
-        s.setRequest(request);
-        s.setApplicationId("myapp");
-
-        Collection actual = s.getStoredChanges("Help");
-
-        assertEquals(1, actual.size());
-
-        PropertyChange pc = (PropertyChange) actual.iterator().next();
-
-        assertEquals("zap.biff", pc.getComponentPath());
-        assertEquals("bar", pc.getPropertyName());
-        assertSame(value, pc.getNewValue());
-
-        verify();
-    }
-
-    public void testGetStoredPageProperty()
-    {
-        Object value = new Object();
-        WebSession session = newSession("session,myapp,Help,bar", value);
-        WebRequest request = newRequest(false, session);
-
-        replay();
-
-        SessionPropertyPersistenceStrategy s = new SessionPropertyPersistenceStrategy();
-        s.setRequest(request);
-        s.setApplicationId("myapp");
-
-        Collection actual = s.getStoredChanges("Help");
-
-        assertEquals(1, actual.size());
-
-        PropertyChange pc = (PropertyChange) actual.iterator().next();
-
-        assertNull(pc.getComponentPath());
-        assertEquals("bar", pc.getPropertyName());
-        assertSame(value, pc.getNewValue());
-
-        verify();
-    }
-
-    public void testStoreComponentProperty()
-    {
-        WebSession session = newSession();
-        WebRequest request = newRequest(true, session);
-
-        Object value = new Object();
-
-        session.setAttribute("session,gloop,Nerf,zip.zap,spaz", value);
-
-        replay();
-
-        SessionPropertyPersistenceStrategy s = new SessionPropertyPersistenceStrategy();
-
-        s.setApplicationId("gloop");
-        s.setRequest(request);
-
-        s.store("Nerf", "zip.zap", "spaz", value);
-
-        verify();
-    }
-
-    public void testStorePageProperty()
-    {
-        WebSession session = newSession();
-        WebRequest request = newRequest(true, session);
-
-        Object value = new Object();
-
-        session.setAttribute("session,myapp,Home,foo", value);
-
-        replay();
-
-        SessionPropertyPersistenceStrategy s = new SessionPropertyPersistenceStrategy();
-
-        s.setApplicationId("myapp");
-        s.setRequest(request);
-
-        s.store("Home", null, "foo", value);
-
-        verify();
-    }
-
-    private void trainGetAttribute(WebSession session, String attributeName, Object value)
-    {
-        expect(session.getAttribute(attributeName)).andReturn(value);
-    }
-
-    private void trainGetAttributeNames(WebSession session, List names)
-    {
-        expect(session.getAttributeNames()).andReturn(names);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/SimpleState.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/SimpleState.java
deleted file mode 100644
index 1c7ca03..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/SimpleState.java
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.record;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-
-
-/**
- * Simple object used for testing object property changes.
- */
-public class SimpleState implements Serializable
-{
-    /** serialVersionUID */
-    private static final long serialVersionUID = 8466422593705479396L;
-
-    long _id;
-    String _name;
-    boolean _isValid;
-    Date _date;
-    Map _keys = new HashMap();
-    
-    public SimpleState() {}
-
-    public SimpleState(long id, String name)
-    {
-        _id = id;
-        _name = name;
-    }
-    
-    public long getId()
-    {
-        return _id;
-    }
-    
-    public void setId(long id)
-    {
-        _id = id;
-    }
-    
-    /**
-     * @return Returns the name.
-     */
-    public String getName()
-    {
-        return _name;
-    }
-    
-    /**
-     * @param name The name to set.
-     */
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    /**
-     * @return Returns the isValid.
-     */
-    public boolean isValid()
-    {
-        return _isValid;
-    }
-
-    /**
-     * @param isValid The isValid to set.
-     */
-    public void setValid(boolean isValid)
-    {
-        _isValid = isValid;
-    }
-   
-    /**
-     * @return Returns the date.
-     */
-    public Date getDate()
-    {
-        return _date;
-    }
-    
-    /**
-     * @param date The date to set.
-     */
-    public void setDate(Date date)
-    {
-        _date = date;
-    }
-    
-    public Map getKeys()
-    {
-        return _keys;
-    }
-    
-    public String toString()
-    {
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-        .append("id", _id)
-        .append("name", _name)
-        .append("isValid", _isValid)
-        .append("date", _date)
-        .toString();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestChangeKey.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestChangeKey.java
deleted file mode 100644
index 8d83283..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestChangeKey.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.record.ChangeKey}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestChangeKey extends BaseComponentTestCase
-{
-    public void testSetters()
-    {
-        ChangeKey key = new ChangeKey("path", "name");
-
-        assertEquals("path", key.getComponentPath());
-        assertEquals("name", key.getPropertyName());
-
-        key = new ChangeKey(null, "foo");
-
-        assertNull(key.getComponentPath());
-        assertEquals("foo", key.getPropertyName());
-    }
-
-    public void testHashCode()
-    {
-        ChangeKey key1 = new ChangeKey("path", "name1");
-        ChangeKey key2 = new ChangeKey("path", "name1");
-        ChangeKey key3 = new ChangeKey(null, "name2");
-
-        assertEquals(key1.hashCode(), key2.hashCode());
-        assertTrue(key1.hashCode() != key3.hashCode());
-    }
-
-    public void testEquals()
-    {
-        ChangeKey key1 = new ChangeKey("path", "name1");
-        ChangeKey key2 = new ChangeKey("path", "name1");
-        ChangeKey key3 = new ChangeKey(null, "name2");
-
-        assertTrue(key1.equals(key2));
-        assertFalse(key1.equals(key3));
-
-        assertFalse(key1.equals(null));
-        assertTrue(key1.equals(key1));
-        assertFalse(key1.equals("foo"));
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestPageRecorder.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestPageRecorder.java
deleted file mode 100644
index 90f442d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestPageRecorder.java
+++ /dev/null
@@ -1,274 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.event.ObservedChangeEvent;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IPropertySpecification;
-import org.apache.tapestry.test.Creator;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.record.PageRecorderImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPageRecorder extends BaseComponentTestCase
-{
-    private ErrorLog newErrorLog()
-    {
-        return newMock(ErrorLog.class);
-    }
-
-    public void testGetChanges()
-    {
-        ErrorLog log = newErrorLog();
-        
-        PropertyPersistenceStrategySource source = newMock(PropertyPersistenceStrategySource.class);
-
-        Collection expected = new ArrayList();
-
-        expect(source.getAllStoredChanges("Foo")).andReturn(expected);
-
-        replay();
-
-        PageRecorderImpl pr = new PageRecorderImpl("Foo", source, log);
-
-        Collection actual = pr.getChanges();
-
-        assertSame(expected, actual);
-
-        verify();
-    }
-
-    private IComponentSpecification newSpec(String propertyName, String persistence)
-    {
-        IComponentSpecification spec = newSpec();
-        
-        IPropertySpecification ps = newMock(IPropertySpecification.class);
-        checkOrder(ps, false);
-        
-        expect(spec.getPropertySpecification(propertyName)).andReturn(ps);
-
-        expect(ps.getPersistence()).andReturn(persistence);
-
-        return spec;
-    }
-
-    public void testObserveChange()
-    {
-        ErrorLog log = newErrorLog();
-        
-        IPage page = newPage();
-
-        IComponentSpecification spec = newSpec("foobar", "session");
-        
-        expect(page.getSpecification()).andReturn(spec);
-
-        expect(page.getIdPath()).andReturn(null);
-
-        PropertyPersistenceStrategySource source = newMock(PropertyPersistenceStrategySource.class);
-
-        PropertyPersistenceStrategy strategy = newMock(PropertyPersistenceStrategy.class);
-
-        expect(source.getStrategy("session")).andReturn(strategy);
-
-        Object newValue = new Object();
-
-        strategy.store("Foo", null, "foobar", newValue);
-
-        replay();
-
-        PageRecorderImpl pr = new PageRecorderImpl("Foo", source, log);
-
-        ObservedChangeEvent event = new ObservedChangeEvent(page, "foobar", newValue);
-
-        pr.observeChange(event);
-
-        verify();
-    }
-
-    public void testUnknownStategy()
-    {
-        Location l = fabricateLocation(12);
-        Throwable inner = new ApplicationRuntimeException("Simulated error.");
-        ErrorLog log = newErrorLog();
-
-        PropertyPersistenceStrategySource source = newMock(PropertyPersistenceStrategySource.class);
-
-        IComponent component = newComponent();
-        
-        IComponentSpecification spec = newSpec();
-        
-        IPropertySpecification ps = newMock(IPropertySpecification.class);
-
-        expect(component.getSpecification()).andReturn(spec);
-
-        expect(spec.getPropertySpecification("zip")).andReturn(ps);
-
-        expect(ps.getPersistence()).andReturn("unknown");
-
-        expect(source.getStrategy("unknown")).andThrow(inner);
-
-        expect(ps.getLocation()).andReturn(l);
-
-        log.error("Simulated error.", l, inner);
-
-        replay();
-
-        PageRecorderImpl pr = new PageRecorderImpl("SomePage", source, log);
-
-        assertNull(pr.findStrategy(component, "zip"));
-
-        verify();
-    }
-
-    public void testRollbackPageProperty()
-    {
-        ErrorLog log = newErrorLog();
-
-        Creator creator = new Creator();
-
-        PageFixture page = (PageFixture) creator.newInstance(PageFixture.class);
-
-        PropertyPersistenceStrategySource source = newMock(PropertyPersistenceStrategySource.class);
-
-        PropertyChange pc = new PropertyChangeImpl(null, "cartoonName", "Dexter's Laboratory");
-
-        expect(source.getAllStoredChanges("MyPage")).andReturn(Collections.singletonList(pc));
-
-        replay();
-
-        PageRecorderImpl pr = new PageRecorderImpl("MyPage", source, log);
-
-        pr.rollback(page);
-
-        assertEquals("Dexter's Laboratory", page.getCartoonName());
-
-        verify();
-    }
-
-    public void testRollbackComponentProperty()
-    {
-        ErrorLog log = newErrorLog();
-        
-        IPage page = newPage();
-
-        IComponent component = newMock(IComponent.class);
-
-        PropertyPersistenceStrategySource source = newMock(PropertyPersistenceStrategySource.class);
-
-        PropertyChange pc = new PropertyChangeImpl("fred.barney", "id", "ziff");
-
-        expect(source.getAllStoredChanges("MyPage")).andReturn(Collections.singletonList(pc));
-
-        expect(page.getNestedComponent("fred.barney")).andReturn(component);
-
-        component.setId("ziff");
-
-        replay();
-
-        PageRecorderImpl pr = new PageRecorderImpl("MyPage", source, log);
-
-        pr.rollback(page);
-
-        verify();
-    }
-
-    public void testChangeWhileLocked()
-    {
-        ErrorLog log = newErrorLog();
-        
-        IPage page = newPage();
-
-        PropertyPersistenceStrategySource source = newMock(PropertyPersistenceStrategySource.class);
-
-        expect(page.getExtendedId()).andReturn("MyPage");
-
-        log
-                .error(
-                        "Change to persistent property foobar of MyPage has been ignored."
-                                + " Persistent properties may only be changed prior to the rendering of the response page.",
-                        null,
-                        null);
-
-        replay();
-
-        PageRecorderImpl pr = new PageRecorderImpl("MyPage", source, log);
-
-        pr.commit();
-
-        ObservedChangeEvent event = new ObservedChangeEvent(page, "foobar", new Object());
-
-        pr.observeChange(event);
-
-        verify();
-    }
-
-    public void testChangeToNonSpecifiedProperty()
-    {
-        Resource r = newResource();
-        
-        ErrorLog log = newErrorLog();
-        
-        IPage page = newPage();
-        
-        IComponentSpecification spec = newSpec();
-
-        PropertyPersistenceStrategySource source = newMock(PropertyPersistenceStrategySource.class);
-
-        expect(page.getSpecification()).andReturn(spec);
-
-        expect(spec.getPropertySpecification("foobar")).andReturn(null);
-
-        expect(page.getExtendedId()).andReturn("TestPage");
-
-        expect(page.getSpecification()).andReturn(spec);
-
-        expect(spec.getSpecificationLocation()).andReturn(r);
-
-        log.error(
-                "A property change event for property foobar of TestPage was observed, "
-                        + "but no such property is identified in the specification (" + r + ").",
-                null,
-                null);
-
-        replay();
-
-        PageRecorderImpl pr = new PageRecorderImpl("TestPage", source, log);
-
-        ObservedChangeEvent event = new ObservedChangeEvent(page, "foobar", new Object());
-
-        pr.observeChange(event);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestPersistentPropertyData.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestPersistentPropertyData.java
deleted file mode 100644
index 5a1e91b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestPersistentPropertyData.java
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.record.PersistentPropertyData}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPersistentPropertyData extends BaseComponentTestCase
-{
-
-    public void testStoreChange()
-    {
-        Object newObject1 = new Object();
-        Object newObject2 = new Object();
-
-        PersistentPropertyDataEncoder encoder = newMock(PersistentPropertyDataEncoder.class);
-
-        replay();
-
-        PersistentPropertyData ppd = new PersistentPropertyData(encoder);
-
-        ppd.store("foo", "bar", newObject1);
-        
-        assertListEquals(new Object[] { new PropertyChangeImpl("foo", "bar", newObject1) }, ppd.getPageChanges());
-
-        // Check for overwriting.
-
-        ppd.store("foo", "bar", newObject2);
-
-        assertListEquals(new Object[]
-        { new PropertyChangeImpl("foo", "bar", newObject2) }, ppd.getPageChanges());
-
-        // We only add the one value, because the output order
-        // is indeterminate.
-
-        verify();
-    }
-
-    public void testDecode()
-    {
-        Object newObject = new Object();
-        String encoded = "ENCODED";
-        List decoded = Collections.singletonList(new PropertyChangeImpl("foo", "bar", newObject));
-        
-        PersistentPropertyDataEncoder encoder = newMock(PersistentPropertyDataEncoder.class);
-        
-        expect(encoder.decodePageChanges(encoded)).andReturn(decoded);
-        
-        replay();
-        
-        PersistentPropertyData ppd = new PersistentPropertyData(encoder);
-        
-        ppd.storeEncoded(encoded);
-        
-        List l1 = ppd.getPageChanges();
-        
-        assertListEquals(new Object[] { new PropertyChangeImpl("foo", "bar", newObject) }, l1);
-
-        List l2 = ppd.getPageChanges();
-
-        assertNotSame(l1, l2);
-
-        assertListEquals(new Object[]
-        { new PropertyChangeImpl("foo", "bar", newObject) }, l2);
-
-        verify();
-    }
-
-    public void testEncode()
-    {
-        String encoded = "ENCODED";
-        Object newObject = new Object();
-        List changes = Collections.singletonList(new PropertyChangeImpl("foo", "bar", newObject));
-
-        PersistentPropertyDataEncoder encoder = newMock(PersistentPropertyDataEncoder.class);
-
-        expect(encoder.encodePageChanges(changes)).andReturn(encoded);
-
-        replay();
-
-        PersistentPropertyData ppd = new PersistentPropertyData(encoder);
-
-        ppd.store("foo", "bar", newObject);
-
-        assertSame(encoded, ppd.getEncoded());
-        assertSame(encoded, ppd.getEncoded());
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestPropertyChange.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestPropertyChange.java
deleted file mode 100644
index acaab76..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/record/TestPropertyChange.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.record.PropertyChangeImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPropertyChange extends BaseComponentTestCase
-{
-    public void testAccessors()
-    {
-        Object newValue = new Object();
-
-        PropertyChangeImpl pc = new PropertyChangeImpl("componentPath", "property", newValue);
-
-        assertEquals("componentPath", pc.getComponentPath());
-        assertEquals("property", pc.getPropertyName());
-        assertSame(newValue, pc.getNewValue());
-    }
-
-    public void testEquals()
-    {
-        PropertyChangeImpl pc1 = new PropertyChangeImpl("foo", "bar", "baz");
-        PropertyChangeImpl pc2 = new PropertyChangeImpl("foo", "bar", "baz");
-        PropertyChangeImpl pc3 = new PropertyChangeImpl(null, "bar", "baz");
-
-        assertTrue(pc1.equals(pc2));
-        assertTrue(pc1.equals(pc1));
-        assertFalse(pc1.equals(pc3));
-        assertFalse(pc1.equals(null));
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/request/TestDecodedRequestInjector.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/request/TestDecodedRequestInjector.java
deleted file mode 100644
index 7c5c5de..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/request/TestDecodedRequestInjector.java
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-import static org.easymock.EasyMock.expect;
-
-import java.io.IOException;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.services.ServletRequestServicer;
-import org.apache.tapestry.spec.ILibrarySpecification;
-import org.testng.annotations.Test;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Tests for {@link org.apache.tapestry.request.DecodedRequestInjector}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestDecodedRequestInjector extends BaseComponentTestCase
-{
-    private static class ServicerFixture implements ServletRequestServicer
-    {
-        HttpServletRequest _request;
-
-        public void service(HttpServletRequest request, HttpServletResponse response)
-                throws IOException, ServletException
-        {
-            _request = request;
-        }
-    }
-
-    private HttpServletRequest newHttpRequest()
-    {
-        return newMock(HttpServletRequest.class);
-    }
-
-    private HttpServletResponse newResponse()
-    {
-        return newMock(HttpServletResponse.class);
-    }
-
-    private ILibrarySpecification newSpec(boolean exists, IRequestDecoder decoder)
-    {
-        ILibrarySpecification spec = newMock(ILibrarySpecification.class);
-
-        expect(spec.checkExtension(Tapestry.REQUEST_DECODER_EXTENSION_NAME)).andReturn(exists);
-
-        if (exists)
-        {
-            expect(spec.getExtension(Tapestry.REQUEST_DECODER_EXTENSION_NAME, IRequestDecoder.class))
-            .andReturn(decoder);
-        }
-
-        return spec;
-    }
-
-    public void testNoExtension() throws Exception
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-        ILibrarySpecification spec = newSpec(false, null);
-
-        ServletRequestServicer servicer = newMock(ServletRequestServicer.class);
-
-        servicer.service(request, response);
-
-        replay();
-
-        DecodedRequestInjector dri = new DecodedRequestInjector();
-
-        dri.setApplicationSpecification(spec);
-        dri.initializeService();
-
-        dri.service(request, response, servicer);
-
-        verify();
-    }
-
-    public void testWithExtension() throws Exception
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-        
-        IRequestDecoder decoder = newMock(IRequestDecoder.class);
-        ILibrarySpecification spec = newSpec(true, decoder);
-
-        ServicerFixture servicer = new ServicerFixture();
-
-        DecodedRequest decoded = new DecodedRequest();
-        decoded.setRequestURI("/foo/bar/baz");
-
-        expect(decoder.decodeRequest(request)).andReturn(decoded);
-
-        replay();
-
-        DecodedRequestInjector dri = new DecodedRequestInjector();
-
-        dri.setApplicationSpecification(spec);
-        dri.initializeService();
-
-        dri.service(request, response, servicer);
-
-        // Prove that the request passed down the pipeline is a wrapper
-
-        assertEquals("/foo/bar/baz", servicer._request.getRequestURI());
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/request/TestDecodedRequestWrapper.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/request/TestDecodedRequestWrapper.java
deleted file mode 100644
index 9ad3fff..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/request/TestDecodedRequestWrapper.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * Tests for {@link org.apache.tapestry.request.DecodedRequestWrapper}and
- * {@link org.apache.tapestry.request.DecodedRequest}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestDecodedRequestWrapper extends BaseComponentTestCase
-{
-    private HttpServletRequest newHttpRequest()
-    {
-        return newMock(HttpServletRequest.class);
-    }
-
-    public void testInterceptedMethods()
-    {
-        DecodedRequest dr = new DecodedRequest();
-
-        dr.setRequestURI("/foo/bar/baz");
-        dr.setScheme("https");
-        dr.setServerPort(2170);
-        dr.setServerName("www.flintstone.com");
-
-        HttpServletRequest request = newHttpRequest();
-
-        replay();
-
-        DecodedRequestWrapper w = new DecodedRequestWrapper(request, dr);
-
-        assertEquals("/foo/bar/baz", w.getRequestURI());
-        assertEquals("https", w.getScheme());
-        assertEquals(2170, w.getServerPort());
-        assertEquals("www.flintstone.com", w.getServerName());
-
-        verify();
-    }
-
-    public void testRequestConstructor()
-    {
-        HttpServletRequest request = newHttpRequest();
-
-        expect(request.getScheme()).andReturn("https");
-
-        expect(request.getServerName()).andReturn("www.flintstone.com");
-
-        expect(request.getRequestURI()).andReturn("/foo/bar/baz");
-
-        expect(request.getServerPort()).andReturn(2170);
-
-        replay();
-
-        DecodedRequest dr = new DecodedRequest(request);
-
-        assertEquals("/foo/bar/baz", dr.getRequestURI());
-        assertEquals("https", dr.getScheme());
-        assertEquals(2170, dr.getServerPort());
-        assertEquals("www.flintstone.com", dr.getServerName());
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/AbstractSpecificationResolverTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/AbstractSpecificationResolverTestCase.java
deleted file mode 100644
index 91cc815..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/AbstractSpecificationResolverTestCase.java
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import static org.easymock.EasyMock.expect;
-
-import java.net.URL;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.URLResource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Base class for testing specification resolvers.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class AbstractSpecificationResolverTestCase extends BaseComponentTestCase
-{
-
-    protected IComponentSpecification newSpecification()
-    {
-        return newMock(IComponentSpecification.class);
-    }
-
-    protected IRequestCycle newCycle()
-    {
-        return newMock(IRequestCycle.class);
-    }
-
-    protected URL newURL(String file)
-    {
-        return getClass().getResource(file);
-    }
-
-    protected Resource newResource(URL url)
-    {
-        Resource resource = newMock(Resource.class);
-
-        expect(resource.getResourceURL()).andReturn(url);
-
-        return resource;
-    }
-
-    protected Resource newResource(String path)
-    {
-        return new URLResource(newURL(path));
-    }
-
-    protected void train(Log log, String message)
-    {
-        expect(log.isDebugEnabled()).andReturn(true);
-
-        log.debug(message);
-    }
-
-    protected Log newLog()
-    {
-        return newMock(Log.class);
-    }
-
-    protected INamespace newNamespace()
-    {
-        return newMock(INamespace.class);
-    }
-
-    protected ISpecificationSource newSource()
-    {
-        return newMock(ISpecificationSource.class);
-    }
-
-    protected void trainContainsPage(INamespace namespace, String pageName, boolean containsPage)
-    {
-        expect(namespace.containsPage(pageName)).andReturn(containsPage);
-    }
-
-    protected void trainFindPageSpecification(ISpecificationResolverDelegate delegate, IRequestCycle cycle, INamespace application, String pageName, IComponentSpecification spec)
-    {
-        expect(delegate.findPageSpecification(cycle, application, pageName)).andReturn(spec);
-    }
-
-    protected void trainGetApplicationNamespace(ISpecificationSource source, INamespace application)
-    {
-        expect(source.getApplicationNamespace()).andReturn(application);
-    }
-
-    protected void trainGetChildNamespace(INamespace child, String name, INamespace application)
-    {
-        expect(application.getChildNamespace(name)).andReturn(child);
-    }
-
-    protected void trainGetFrameworkNamespace(ISpecificationSource source, INamespace framework)
-    {
-        expect(source.getFrameworkNamespace()).andReturn(framework);
-    }
-
-    protected void trainGetNamespaceId(INamespace namespace, String namespaceId)
-    {
-        expect(namespace.getNamespaceId()).andReturn(namespaceId);
-    }
-
-    protected void trainGetSpecificationLocation(INamespace namespace, Resource resource)
-    {
-        expect(namespace.getSpecificationLocation()).andReturn(resource);
-    }
-
-    protected void trainGetSpecificationLocation(INamespace namespace, Resource root, String path)
-    {
-        expect(namespace.getSpecificationLocation()).andReturn(root.getRelativeResource(path));
-    }
-
-    protected void trainIsApplicationNamespace(INamespace namespace, boolean isApplicationNamespace)
-    {
-        expect(namespace.isApplicationNamespace()).andReturn(isApplicationNamespace);
-    }
-
-    protected void trainIsDebugEnabled(Log log, boolean isDebugEnabled)
-    {
-        expect(log.isDebugEnabled()).andReturn(isDebugEnabled);
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/LibraryStandin.library b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/LibraryStandin.library
deleted file mode 100644
index 06d1f39..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/LibraryStandin.library
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE library-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
-	
-<library-specification/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/MyComponent.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/MyComponent.jwc
deleted file mode 100644
index ff2e9f6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/MyComponent.jwc
+++ /dev/null
@@ -1,17 +0,0 @@
-Standin for a component spec found relative to LibraryStandin.library.<!-- 
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/PageSpecificationResolverTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/PageSpecificationResolverTest.java
deleted file mode 100644
index 0ed2a43..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/PageSpecificationResolverTest.java
+++ /dev/null
@@ -1,917 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageNotFoundException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.services.ComponentPropertySource;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.List;
-
-/**
- * Tests for {@link org.apache.tapestry.resolver.PageSpecificationResolverImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class PageSpecificationResolverTest extends AbstractSpecificationResolverTestCase
-{
-    public static class MockApplicationNamespace implements INamespace
-    {
-        String _pageName;
-
-        IComponentSpecification _specification;
-
-        private Resource _specificationLocation;
-
-        MockApplicationNamespace(Resource specificationLocation)
-        {
-            _specificationLocation = specificationLocation;
-        }
-
-        public String constructQualifiedName(String pageName)
-        {
-            return null;
-        }
-
-        public boolean containsComponentType(String type)
-        {
-            return false;
-        }
-
-        public boolean containsPage(String name)
-        {
-            return false;
-        }
-
-        public List getChildIds()
-        {
-            return null;
-        }
-
-        public INamespace getChildNamespace(String id)
-        {
-            return null;
-        }
-
-        public IComponentSpecification getComponentSpecification(String type)
-        {
-            return null;
-        }
-
-        public String getExtendedId()
-        {
-            return null;
-        }
-
-        public String getId()
-        {
-            return null;
-        }
-
-        public Location getLocation()
-        {
-            return null;
-        }
-
-        public String getNamespaceId()
-        {
-            return null;
-        }
-
-        public List getPageNames()
-        {
-            return null;
-        }
-
-        public IComponentSpecification getPageSpecification(String name)
-        {
-            return null;
-        }
-
-        public INamespace getParentNamespace()
-        {
-            return null;
-        }
-
-        public String getPropertyValue(String propertyName)
-        {
-            return null;
-        }
-
-        public ILibrarySpecification getSpecification()
-        {
-            return null;
-        }
-
-        public Resource getSpecificationLocation()
-        {
-            return _specificationLocation;
-        }
-
-        public void installComponentSpecification(String type, IComponentSpecification specification)
-        {
-        }
-
-        public void installPageSpecification(String pageName, IComponentSpecification specification)
-        {
-            _pageName = pageName;
-            _specification = specification;
-        }
-
-        public boolean isApplicationNamespace()
-        {
-            return true;
-        }
-
-    }
-
-    protected ISpecificationResolverDelegate newDelegate()
-    {
-        return newMock(ISpecificationResolverDelegate.class);
-    }
-
-    protected INamespace newNamespace(String pageName, IComponentSpecification spec)
-    {
-        INamespace namespace = newNamespace();
-        checkOrder(namespace, false);
-        
-        trainContainsPage(namespace, pageName, spec != null);
-
-        if (spec != null)
-            trainGetPageSpecification(namespace, pageName, spec);
-
-        return namespace;
-    }
-
-    protected ComponentPropertySource newPropertySource(INamespace namespace)
-    {
-        ComponentPropertySource source = newMock(ComponentPropertySource.class);
-
-        expect(source.getNamespaceProperty(namespace, Tapestry.TEMPLATE_EXTENSION_PROPERTY))
-        .andReturn("html");
-
-        return source;
-    }
-
-    protected ISpecificationSource newSource(INamespace application, INamespace framework)
-    {
-        ISpecificationSource source = newSource();
-
-        trainGetApplicationNamespace(source, application);
-
-        trainGetFrameworkNamespace(source, framework);
-
-        return source;
-    }
-
-    protected ISpecificationSource newSource(INamespace application, INamespace framework,
-            Resource resource, IComponentSpecification pageSpec)
-    {
-        ISpecificationSource source = newSource();
-        checkOrder(source, false);
-        
-        trainGetApplicationNamespace(source, application);
-
-        trainGetFrameworkNamespace(source, framework);
-
-        trainGetPageSpecification(source, resource, pageSpec);
-
-        return source;
-    }
-
-    public void test_Explicitly_In_Application_Namespace()
-    {
-        Resource contextRoot = newResource("context/");
-        IComponentSpecification spec = newSpecification();
-        INamespace application = newNamespace("ExistingPage", spec);
-        INamespace framework = newNamespace();
-
-        ISpecificationSource source = newSource();
-
-        trainGetApplicationNamespace(source, application);
-        trainGetFrameworkNamespace(source, framework);
-
-        IRequestCycle cycle = newCycle();
-
-        trainGetApplicationNamespace(source, application);
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.initializeService();
-
-        resolver.resolve(cycle, "application:ExistingPage");
-
-        assertEquals("ExistingPage", resolver.getSimplePageName());
-        assertSame(spec, resolver.getSpecification());
-        assertSame(application, resolver.getNamespace());
-
-        verify();
-
-    }
-
-    public void test_Explicitly_In_Framework_Namespace()
-    {
-        Resource contextRoot = newResource("context/");
-        IComponentSpecification spec = newSpecification();
-        INamespace application = newNamespace();
-        INamespace framework = newNamespace("ExistingPage", spec);
-        
-        ISpecificationSource source = newSource();
-        
-        trainGetApplicationNamespace(source, application);
-        trainGetFrameworkNamespace(source, framework);
-
-        IRequestCycle cycle = newCycle();
-
-        trainGetFrameworkNamespace(source, framework);
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.initializeService();
-
-        resolver.resolve(cycle, "framework:ExistingPage");
-
-        assertEquals("ExistingPage", resolver.getSimplePageName());
-        assertSame(spec, resolver.getSpecification());
-        assertSame(framework, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_As_Template()
-    {
-        Log log = newLog();
-
-        Resource contextRoot = newResource("context/");
-
-        Resource resource = contextRoot.getRelativeResource("TemplatePage.html");
-
-        MockApplicationNamespace application = new MockApplicationNamespace(contextRoot
-                .getRelativeResource("WEB-INF/"));
-
-        INamespace framework = newNamespace();
-        ISpecificationSource source = newSource(application, framework);
-        IRequestCycle cycle = newCycle();
-        
-        train(log, ResolverMessages.resolvingPage("TemplatePage", application));
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/TemplatePage.page")));
-        
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/myapp/TemplatePage.page")));
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/TemplatePage.page")));
-        
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("TemplatePage.page")));
-        
-        ComponentPropertySource propertySource = newPropertySource(application);
-        
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("TemplatePage.html")));
-        
-        train(log, ResolverMessages.foundHTMLTemplate(resource));
-        
-        IComponentSpecification expectedSpec = new ComponentSpecification();
-        expectedSpec.setPageSpecification(true);
-        expectedSpec.setSpecificationLocation(resource);
-        
-        // The toString() on ComponentSpecification means we can't predict
-        // what the string would be.
-        
-        trainIsDebugEnabled(log, false);
-        
-        replay();
-        
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.setLog(log);
-        resolver.setApplicationId("myapp");
-        resolver.setComponentPropertySource(propertySource);
-
-        resolver.initializeService();
-
-        resolver.resolve(cycle, "TemplatePage");
-
-        IComponentSpecification spec = application._specification;
-
-        assertEquals(true, spec.isPageSpecification());
-
-        // The specification location is used to find relative assets and the like, and is baesd
-        // on the page name and the namespace location.
-
-        assertEquals(contextRoot.getRelativeResource("WEB-INF/TemplatePage.page"), spec
-                .getSpecificationLocation());
-
-        // The Location is used for any error reporting, and should be the actual file
-        // located, the template.
-
-        assertEquals(resource, spec.getLocation().getResource());
-        assertEquals("TemplatePage", resolver.getSimplePageName());
-        assertEquals("TemplatePage", application._pageName);
-
-        assertSame(spec, resolver.getSpecification());
-        assertSame(application, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_In_Application_Namespace()
-    {
-        Resource contextRoot = newResource("context/");
-        IComponentSpecification spec = newSpecification();
-        INamespace application = newNamespace("ExistingPage", spec);
-        INamespace framework = newNamespace();
-        ISpecificationSource source = newSource(application, framework);
-        IRequestCycle cycle = newCycle();
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.initializeService();
-
-        resolver.resolve(cycle, "ExistingPage");
-
-        assertEquals("ExistingPage", resolver.getSimplePageName());
-        assertSame(spec, resolver.getSpecification());
-        assertSame(application, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_In_Child_Namespace()
-    {
-        Resource contextRoot = newResource("context/");
-        IComponentSpecification spec = newSpecification();
-
-        INamespace child = newNamespace("ChildPage", spec);
-        INamespace application = newNamespace();
-
-        trainGetChildNamespace(child, "foo.bar", application);
-
-        INamespace framework = newNamespace();
-        ISpecificationSource source = newSource(application, framework);
-        IRequestCycle cycle = newCycle();
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.initializeService();
-
-        resolver.resolve(cycle, "foo.bar:ChildPage");
-
-        assertEquals("ChildPage", resolver.getSimplePageName());
-        assertSame(spec, resolver.getSpecification());
-        assertSame(child, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_In_ContextRoot_Folder()
-    {
-        Log log = newLog();
-
-        Resource contextRoot = newResource("context/");
-        IComponentSpecification spec = newSpecification();
-        
-        Resource resource = contextRoot.getRelativeResource("ContextRootPage.page");
-        
-        INamespace application = newNamespace();
-        
-        INamespace framework = newNamespace();
-        
-        ISpecificationSource source = newSource(application, framework, resource, spec);
-        
-        trainContainsPage(application, "ContextRootPage", false);
-        
-        IRequestCycle cycle = newCycle();
-
-        train(log, ResolverMessages.resolvingPage("ContextRootPage", application));
-
-        // Pretend the app spec is in the WEB-INF folder
-
-        trainGetSpecificationLocation(application, contextRoot, "WEB-INF/");
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/ContextRootPage.page")));
-
-        trainIsApplicationNamespace(application, true);
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/myapp/ContextRootPage.page")));
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/ContextRootPage.page")));
-        train(log, ResolverMessages.checkingResource(resource));
-
-        train(log, ResolverMessages.installingPage("ContextRootPage", application, spec));
-
-        application.installPageSpecification("ContextRootPage", spec);
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.setLog(log);
-        resolver.setApplicationId("myapp");
-
-        resolver.initializeService();
-
-        resolver.resolve(cycle, "ContextRootPage");
-
-        assertEquals("ContextRootPage", resolver.getSimplePageName());
-        assertSame(spec, resolver.getSpecification());
-        assertSame(application, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_In_Framework()
-    {
-        Log log = newLog();
-        INamespace application = newNamespace();
-
-        Resource contextRoot = newResource("context/");
-        IComponentSpecification spec = newSpecification();
-        
-        INamespace framework = newNamespace("FrameworkPage", spec);
-        
-        ComponentPropertySource propertySource = newPropertySource(application);
-        
-        trainContainsPage(application, "FrameworkPage", false);
-        
-        ISpecificationSource source = newSource(application, framework);
-        IRequestCycle cycle = newCycle();
-
-        train(log, ResolverMessages.resolvingPage("FrameworkPage", application));
-
-        // Pretend the app spec is in the WEB-INF folder
-
-        trainGetSpecificationLocation(application, contextRoot, "WEB-INF/");
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/FrameworkPage.page")));
-
-        trainIsApplicationNamespace(application, true);
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/myapp/FrameworkPage.page")));
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/FrameworkPage.page")));
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("FrameworkPage.page")));
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("FrameworkPage.html")));
-
-        train(log, ResolverMessages.foundFrameworkPage("FrameworkPage"));
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.setLog(log);
-        resolver.setApplicationId("myapp");
-        resolver.setComponentPropertySource(propertySource);
-
-        resolver.initializeService();
-
-        resolver.resolve(cycle, "FrameworkPage");
-
-        assertEquals("FrameworkPage", resolver.getSimplePageName());
-        assertSame(spec, resolver.getSpecification());
-        assertSame(framework, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_In_Namespace_Folder()
-    {
-        Log log = newLog();
-
-        Resource contextRoot = newResource("context/");
-        IComponentSpecification spec = newSpecification();
-
-        Resource resource = contextRoot.getRelativeResource("WEB-INF/NamespacePage.page");
-
-        INamespace application = newNamespace();
-
-        INamespace framework = newNamespace();
-        ISpecificationSource source = newSource(application, framework, resource, spec);
-        IRequestCycle cycle = newCycle();
-
-        trainContainsPage(application, "NamespacePage", false);
-
-        train(log, ResolverMessages.resolvingPage("NamespacePage", application));
-
-        // Pretend the app spec is in the WEB-INF folder
-
-        trainGetSpecificationLocation(application, contextRoot, "WEB-INF/");
-
-        train(log, ResolverMessages.checkingResource(resource));
-
-        train(log, ResolverMessages.installingPage("NamespacePage", application, spec));
-
-        application.installPageSpecification("NamespacePage", spec);
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.initializeService();
-        resolver.setLog(log);
-
-        resolver.resolve(cycle, "NamespacePage");
-
-        assertEquals("NamespacePage", resolver.getSimplePageName());
-        assertSame(spec, resolver.getSpecification());
-        assertSame(application, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_In_WebInf_App_Folder()
-    {
-        Log log = newLog();
-
-        Resource contextRoot = newResource("context/");
-        IComponentSpecification spec = newSpecification();
-
-        Resource resource = contextRoot.getRelativeResource("WEB-INF/myapp/MyAppPage.page");
-
-        INamespace application = newNamespace();
-
-        INamespace framework = newNamespace();
-        ISpecificationSource source = newSource(application, framework, resource, spec);
-        IRequestCycle cycle = newCycle();
-
-        trainContainsPage(application, "MyAppPage", false);
-
-        train(log, ResolverMessages.resolvingPage("MyAppPage", application));
-
-        // Pretend the app spec is in the WEB-INF folder
-
-        trainGetSpecificationLocation(application, contextRoot, "WEB-INF/");
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/MyAppPage.page")));
-
-        trainIsApplicationNamespace(application, true);
-
-        train(log, ResolverMessages.checkingResource(resource));
-
-        train(log, ResolverMessages.installingPage("MyAppPage", application, spec));
-
-        application.installPageSpecification("MyAppPage", spec);
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.setLog(log);
-        resolver.setApplicationId("myapp");
-
-        resolver.initializeService();
-
-        resolver.resolve(cycle, "MyAppPage");
-
-        assertEquals("MyAppPage", resolver.getSimplePageName());
-        assertSame(spec, resolver.getSpecification());
-        assertSame(application, resolver.getNamespace());
-
-        verify();
-    }
-
-    // TODO: Recreate TAPESTRY-1376
-    public void test_Malformed_Found_In_WebInf_App_Folder()
-    {
-        Log log = newLog();
-
-        Resource contextRoot = newResource("context/");
-        IComponentSpecification spec = newSpecification();
-
-        Resource resource = contextRoot.getRelativeResource("WEB-INF/myapp/MalformedXmlTag.page");
-
-        INamespace application = newNamespace();
-
-        INamespace framework = newNamespace();
-        ISpecificationSource source = newSource(application, framework, resource, spec);
-        IRequestCycle cycle = newCycle();
-
-        trainContainsPage(application, "MalformedXmlTag", false);
-
-        train(log, ResolverMessages.resolvingPage("MalformedXmlTag", application));
-
-        // Pretend the app spec is in the WEB-INF folder
-
-        trainGetSpecificationLocation(application, contextRoot, "WEB-INF/");
-
-        train(log, ResolverMessages.checkingResource(contextRoot.getRelativeResource("WEB-INF/MalformedXmlTag.page")));
-
-        trainIsApplicationNamespace(application, true);
-
-        train(log, ResolverMessages.checkingResource(resource));
-
-        train(log, ResolverMessages.installingPage("MalformedXmlTag", application, spec));
-
-        application.installPageSpecification("MalformedXmlTag", spec);
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.setLog(log);
-        resolver.setApplicationId("myapp");
-
-        resolver.initializeService();
-
-        resolver.resolve(cycle, "MalformedXmlTag");
-
-        assertEquals("MalformedXmlTag", resolver.getSimplePageName());
-        assertSame(spec, resolver.getSpecification());
-        assertSame(application, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_In_WebInf_Folder()
-    {
-        Log log = newLog();
-
-        Resource contextRoot = newResource("context/");
-        IComponentSpecification spec = newSpecification();
-
-        Resource resource = contextRoot.getRelativeResource("WEB-INF/MyWebInfPage.page");
-
-        INamespace application = newNamespace();
-
-        INamespace framework = newNamespace();
-        ISpecificationSource source = newSource(application, framework, resource, spec);
-        IRequestCycle cycle = newCycle();
-
-        trainContainsPage(application, "MyWebInfPage", false);
-
-        train(log, ResolverMessages.resolvingPage("MyWebInfPage", application));
-
-        // Pretend the app spec is in the context root folder
-        // Which isn't really something that happens in a real application
-        // but is necessary to keep from finding the file too early.
-
-        trainGetSpecificationLocation(application, contextRoot);
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("MyWebInfPage.page")));
-
-        trainIsApplicationNamespace(application, true);
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/myapp/MyWebInfPage.page")));
-
-        train(log, ResolverMessages.checkingResource(resource));
-
-        train(log, ResolverMessages.installingPage("MyWebInfPage", application, spec));
-
-        application.installPageSpecification("MyWebInfPage", spec);
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.setLog(log);
-        resolver.setApplicationId("myapp");
-
-        resolver.initializeService();
-
-        resolver.resolve(cycle, "MyWebInfPage");
-
-        assertEquals("MyWebInfPage", resolver.getSimplePageName());
-        assertSame(spec, resolver.getSpecification());
-        assertSame(application, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_WebInf()
-    {
-        Log log = newLog();
-        INamespace application = newNamespace();
-        INamespace framework = newNamespace();
-
-        ISpecificationSource source = newSource(application, framework);
-        IRequestCycle cycle = newCycle();
-        Resource contextRoot = newResource("context/");
-
-        trainContainsPage(application, "/WEB-Inf/BadName", false);
-
-        trainIsDebugEnabled(log, false);
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-
-        resolver.setSpecificationSource(source);
-        resolver.setContextRoot(contextRoot);
-        resolver.setLog(log);
-
-        resolver.initializeService();
-
-        try
-        {
-            resolver.resolve(cycle, "/WEB-Inf/BadName");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Page name '/WEB-Inf/BadName' is not valid, as it directly references a file stored in the WEB-INF folder.",
-                    ex.getMessage());
-        }
-
-        verify();
-
-        trainContainsPage(application, "web-inf/BadName", false);
-
-        trainIsDebugEnabled(log, false);
-
-        replay();
-
-        try
-        {
-            resolver.resolve(cycle, "web-inf/BadName");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Page name 'web-inf/BadName' is not valid, as it directly references a file stored in the WEB-INF folder.",
-                    ex.getMessage());
-        }
-
-        verify();
-
-    }
-
-    public void test_NotFound_Anywhere()
-    {
-        Log log = newLog();
-        INamespace application = newNamespace();
-
-        Resource contextRoot = newResource("context/");
-
-        INamespace framework = newNamespace();
-        ISpecificationSource source = newSource(application, framework);
-        IRequestCycle cycle = newCycle();
-
-        trainContainsPage(application, "MissingPage", false);
-
-        train(log, ResolverMessages.resolvingPage("MissingPage", application));
-
-        // Pretend the app spec is in the WEB-INF folder
-
-        trainGetSpecificationLocation(application, contextRoot, "WEB-INF/");
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/MissingPage.page")));
-
-        trainIsApplicationNamespace(application, false);
-
-        ISpecificationResolverDelegate delegate = newDelegate();
-
-        trainFindPageSpecification(delegate, cycle, application, "MissingPage", null);
-
-        trainGetNamespaceId(application, "<application namespace>");
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.setLog(log);
-        resolver.setApplicationId("myapp");
-        resolver.setDelegate(delegate);
-
-        resolver.initializeService();
-
-        try
-        {
-            resolver.resolve(cycle, "MissingPage");
-            unreachable();
-        }
-        catch (PageNotFoundException ex)
-        {
-            assertEquals("Page 'MissingPage' not found in <application namespace>.", ex
-                    .getMessage());
-            assertEquals("MissingPage", ex.getPageName());
-        }
-
-        verify();
-    }
-
-    public void test_Provided_By_Delegate()
-    {
-        Log log = newLog();
-        INamespace application = newNamespace();
-
-        Resource contextRoot = newResource("context/");
-        IComponentSpecification spec = newSpecification();
-
-        INamespace framework = newNamespace();
-        ISpecificationSource source = newSource(application, framework);
-        IRequestCycle cycle = newCycle();
-
-        trainContainsPage(application, "DelegatePage", false);
-
-        train(log, ResolverMessages.resolvingPage("DelegatePage", application));
-
-        // Pretend the app spec is in the WEB-INF folder
-
-        trainGetSpecificationLocation(application, contextRoot, "WEB-INF/");
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/DelegatePage.page")));
-
-        trainIsApplicationNamespace(application, false);
-
-        ISpecificationResolverDelegate delegate = newDelegate();
-
-        trainFindPageSpecification(delegate, cycle, application, "DelegatePage", spec);
-
-        trainIsDebugEnabled(log, false);
-
-        application.installPageSpecification("DelegatePage", spec);
-
-        replay();
-
-        PageSpecificationResolverImpl resolver = new PageSpecificationResolverImpl();
-        resolver.setContextRoot(contextRoot);
-        resolver.setSpecificationSource(source);
-        resolver.setLog(log);
-        resolver.setApplicationId("myapp");
-        resolver.setDelegate(delegate);
-
-        resolver.initializeService();
-
-        resolver.resolve(cycle, "DelegatePage");
-
-        assertEquals("DelegatePage", resolver.getSimplePageName());
-        assertSame(spec, resolver.getSpecification());
-        assertSame(application, resolver.getNamespace());
-
-        verify();
-    }
-    
-    private void trainGetPageSpecification(INamespace namespace, String pageName,
-            IComponentSpecification spec)
-    {
-        expect(namespace.getPageSpecification(pageName)).andReturn(spec);
-    }
-
-    private void trainGetPageSpecification(ISpecificationSource source, Resource resource,
-            IComponentSpecification pageSpec)
-    {
-        expect(source.getPageSpecification(resource)).andReturn(pageSpec);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/TestComponentResourceResolver.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/TestComponentResourceResolver.java
deleted file mode 100644
index 7c1931b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/TestComponentResourceResolver.java
+++ /dev/null
@@ -1,296 +0,0 @@
-package org.apache.tapestry.resolver;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.*;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.web.WebContext;
-import org.apache.tapestry.web.WebContextResource;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.net.URL;
-import java.util.Locale;
-
-/**
- * Tests functionality of {@link ComponentResourceResolverImpl}.
- */
-@Test
-public class TestComponentResourceResolver extends TestBase {
-
-    public void test_Context_Spec_Resource()
-    {
-        IComponent comp = newMock(IComponent.class);
-        checkOrder(comp, false);
-        WebContext context = newMock(WebContext.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        IComponentSpecification spec = new ComponentSpecification();
-        WebContextResource base = new WebContextResource(context, "/WEB-INF/MyComponent.jwc");
-        spec.setSpecificationLocation(base);
-        
-        ComponentResourceResolverImpl resolver = new ComponentResourceResolverImpl();
-
-        expect(comp.getSpecification()).andReturn(spec).anyTimes();
-        expect(context.getResource("/WEB-INF/MyComponent.html")).andReturn(newURL());
-
-        replay();
-
-        Resource resolved = resolver.findComponentResource(comp, cycle, null, ".html", null);
-        assert resolved != null;
-        assert resolved.getResourceURL() != null;
-
-        verify();
-    }
-
-    public void test_Context_Spec_Localized_Resource()
-    {
-        IComponent comp = newMock(IComponent.class);
-        checkOrder(comp, false);
-        WebContext context = newMock(WebContext.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        IComponentSpecification spec = new ComponentSpecification();
-        WebContextResource base = new WebContextResource(context, "/WEB-INF/MyComponent.jwc");
-        spec.setSpecificationLocation(base);
-
-        ComponentResourceResolverImpl resolver = new ComponentResourceResolverImpl();
-
-        expect(comp.getSpecification()).andReturn(spec).anyTimes();
-        expect(context.getResource("/WEB-INF/MyComponent_en.html")).andReturn(newURL()).anyTimes();
-        expect(context.getResource("/WEB-INF/MyComponent_en_US.html")).andReturn(null);
-
-        replay();
-
-        Resource resolved = resolver.findComponentResource(comp, cycle, null, ".html", Locale.US);
-        assert resolved != null;
-        assert resolved.getResourceURL() != null;
-        
-        verify();
-    }
-
-    public void test_Classpath_Spec_Resource_App_Context_Resolved()
-    {
-        IComponent comp = newMock(IComponent.class);
-        checkOrder(comp, false);
-
-        INamespace namespace = newMock(INamespace.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        IComponentSpecification spec = new ComponentSpecification();
-        ClasspathResource base = new ClasspathResource(new DefaultClassResolver(), "/org/apache/tapestry/resolver/MyComponent.jwc");
-        spec.setSpecificationLocation(base);
-        spec.setComponentClassName("org.apache.tapestry.resolver.MyComponent");
-
-        AssetFactory classpathFactory = newMock(AssetFactory.class);
-        AssetFactory contextFactory = newMock(AssetFactory.class);
-        Resource contextRoot = newMock(Resource.class);
-        Resource webinfLocation = newMock(Resource.class);
-        Resource webinfAppLocation = newMock(Resource.class);
-
-        ComponentResourceResolverImpl resolver = new ComponentResourceResolverImpl();
-        resolver.setApplicationId("foo");
-        resolver.setClasspathAssetFactory(classpathFactory);
-        resolver.setContextAssetFactory(contextFactory);
-        resolver.setContextRoot(contextRoot);
-        
-        expect(contextRoot.getRelativeResource("WEB-INF/")).andReturn(webinfLocation);
-        expect(webinfLocation.getRelativeResource("foo/")).andReturn(webinfAppLocation);
-
-        expect(comp.getSpecification()).andReturn(spec).anyTimes();
-        expect(comp.getNamespace()).andReturn(namespace);
-        expect(namespace.getPropertyValue("org.apache.tapestry.component-class-packages")).andReturn("org.apache.tapestry.resolver");
-
-        Location l = newMock(Location.class);
-        IAsset asset = newMock(IAsset.class);
-        Resource resource = newMock(Resource.class);
-        
-        expect(contextFactory.assetExists(spec, webinfAppLocation, "MyComponent.html", null)).andReturn(true);
-        expect(comp.getLocation()).andReturn(l);
-        expect(contextFactory.createAsset(webinfAppLocation, spec, "MyComponent.html", null, l)).andReturn(asset);
-        expect(asset.getResourceLocation()).andReturn(resource);
-
-        replay();
-
-        resolver.initializeService();
-
-        Resource resolved = resolver.findComponentResource(comp, cycle, null, ".html", null);
-        assertEquals(resolved, resource);
-
-        verify();
-    }
-
-    public void test_Classpath_Spec_Resource_WebInf_Context_Resolved()
-    {
-        IComponent comp = newMock(IComponent.class);
-        checkOrder(comp, false);
-
-        INamespace namespace = newMock(INamespace.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        IComponentSpecification spec = new ComponentSpecification();
-        ClasspathResource base = new ClasspathResource(new DefaultClassResolver(), "/org/apache/tapestry/resolver/MyComponent.jwc");
-        spec.setSpecificationLocation(base);
-        spec.setComponentClassName("org.apache.tapestry.resolver.MyComponent");
-
-        AssetFactory classpathFactory = newMock(AssetFactory.class);
-        AssetFactory contextFactory = newMock(AssetFactory.class);
-        Resource contextRoot = newMock(Resource.class);
-        Resource webinfLocation = newMock(Resource.class);
-        Resource webinfAppLocation = newMock(Resource.class);
-
-        ComponentResourceResolverImpl resolver = new ComponentResourceResolverImpl();
-        resolver.setApplicationId("foo");
-        resolver.setClasspathAssetFactory(classpathFactory);
-        resolver.setContextAssetFactory(contextFactory);
-        resolver.setContextRoot(contextRoot);
-
-        expect(contextRoot.getRelativeResource("WEB-INF/")).andReturn(webinfLocation);
-        expect(webinfLocation.getRelativeResource("foo/")).andReturn(webinfAppLocation);
-
-        expect(comp.getSpecification()).andReturn(spec).anyTimes();
-        expect(comp.getNamespace()).andReturn(namespace);
-        expect(namespace.getPropertyValue("org.apache.tapestry.component-class-packages")).andReturn("org.apache.tapestry.resolver");
-
-        Location l = newMock(Location.class);
-        IAsset asset = newMock(IAsset.class);
-        Resource resource = newMock(Resource.class);
-
-        expect(contextFactory.assetExists(spec, webinfAppLocation, "MyComponent.html", null)).andReturn(false);
-        expect(contextFactory.assetExists(spec, webinfLocation, "MyComponent.html", null)).andReturn(true);
-        expect(comp.getLocation()).andReturn(l);
-        expect(contextFactory.createAsset(webinfLocation, spec, "MyComponent.html", null, l)).andReturn(asset);
-        expect(asset.getResourceLocation()).andReturn(resource);
-
-        replay();
-
-        resolver.initializeService();
-
-        Resource resolved = resolver.findComponentResource(comp, cycle, null, ".html", null);
-        assertEquals(resolved, resource);
-
-        verify();
-    }
-
-    public void test_Classpath_Spec_Resource_WebInf_Package_Name_Context_Resolved()
-    {
-        IComponent comp = newMock(IComponent.class);
-        checkOrder(comp, false);
-
-        INamespace namespace = newMock(INamespace.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        IComponentSpecification spec = new ComponentSpecification();
-        ClasspathResource base = new ClasspathResource(new DefaultClassResolver(), "/org/apache/tapestry/resolver/MyComponent.jwc");
-        spec.setSpecificationLocation(base);
-        spec.setComponentClassName("org.apache.tapestry.resolver.MyComponent");
-
-        AssetFactory classpathFactory = newMock(AssetFactory.class);
-        AssetFactory contextFactory = newMock(AssetFactory.class);
-        Resource contextRoot = newMock(Resource.class);
-        Resource webinfLocation = newMock(Resource.class);
-        Resource webinfAppLocation = newMock(Resource.class);
-
-        ComponentResourceResolverImpl resolver = new ComponentResourceResolverImpl();
-        resolver.setApplicationId("foo");
-        resolver.setClasspathAssetFactory(classpathFactory);
-        resolver.setContextAssetFactory(contextFactory);
-        resolver.setContextRoot(contextRoot);
-
-        expect(contextRoot.getRelativeResource("WEB-INF/")).andReturn(webinfLocation);
-        expect(webinfLocation.getRelativeResource("foo/")).andReturn(webinfAppLocation);
-
-        expect(comp.getSpecification()).andReturn(spec).anyTimes();
-        expect(comp.getNamespace()).andReturn(namespace);
-        expect(namespace.getPropertyValue("org.apache.tapestry.component-class-packages")).andReturn("org.apache.tapestry.resolver");
-
-        Location l = newMock(Location.class);
-        IAsset asset = newMock(IAsset.class);
-        Resource resource = newMock(Resource.class);
-
-        expect(contextFactory.assetExists(spec, webinfAppLocation, "MyComponent.html", null)).andReturn(false);
-        expect(contextFactory.assetExists(spec, webinfLocation, "MyComponent.html", null)).andReturn(false);
-        expect(classpathFactory.assetExists(spec, base, "MyComponent.html", null)).andReturn(false);
-
-        expect(contextFactory.assetExists(spec, webinfAppLocation, "resolver/MyComponent.html", null)).andReturn(false);
-        expect(contextFactory.assetExists(spec, webinfLocation, "resolver/MyComponent.html", null)).andReturn(true);
-
-        expect(comp.getLocation()).andReturn(l);
-        expect(contextFactory.createAsset(webinfLocation, spec, "resolver/MyComponent.html", null, l)).andReturn(asset);
-        expect(asset.getResourceLocation()).andReturn(resource);
-
-        replay();
-
-        resolver.initializeService();
-
-        Resource resolved = resolver.findComponentResource(comp, cycle, null, ".html", null);
-        assertEquals(resolved, resource);
-
-        verify();
-    }
-
-     public void test_Classpath_Spec_Resource_Classpath_Resolved()
-    {
-        IComponent comp = newMock(IComponent.class);
-        checkOrder(comp, false);
-
-        INamespace namespace = newMock(INamespace.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-
-        IComponentSpecification spec = new ComponentSpecification();
-        ClasspathResource base = new ClasspathResource(new DefaultClassResolver(), "/org/apache/tapestry/resolver/MyComponent.jwc");
-        spec.setSpecificationLocation(base);
-        spec.setComponentClassName("org.apache.tapestry.resolver.MyComponent");
-
-        AssetFactory classpathFactory = newMock(AssetFactory.class);
-        AssetFactory contextFactory = newMock(AssetFactory.class);
-        Resource contextRoot = newMock(Resource.class);
-        Resource webinfLocation = newMock(Resource.class);
-        Resource webinfAppLocation = newMock(Resource.class);
-
-        ComponentResourceResolverImpl resolver = new ComponentResourceResolverImpl();
-        resolver.setApplicationId("foo");
-        resolver.setClasspathAssetFactory(classpathFactory);
-        resolver.setContextAssetFactory(contextFactory);
-        resolver.setContextRoot(contextRoot);
-
-        expect(contextRoot.getRelativeResource("WEB-INF/")).andReturn(webinfLocation);
-        expect(webinfLocation.getRelativeResource("foo/")).andReturn(webinfAppLocation);
-
-        expect(comp.getSpecification()).andReturn(spec).anyTimes();
-        expect(comp.getNamespace()).andReturn(namespace);
-        expect(namespace.getPropertyValue("org.apache.tapestry.component-class-packages")).andReturn("org.apache.tapestry.resolver");
-
-        Location l = newMock(Location.class);
-        IAsset asset = newMock(IAsset.class);
-        Resource resource = newMock(Resource.class);
-
-        expect(contextFactory.assetExists(spec, webinfAppLocation, "MyComponent.html", null)).andReturn(false);
-        expect(contextFactory.assetExists(spec, webinfLocation, "MyComponent.html", null)).andReturn(false);
-        expect(classpathFactory.assetExists(spec, base, "MyComponent.html", null)).andReturn(true);
-
-        expect(comp.getLocation()).andReturn(l);
-        expect(classpathFactory.createAsset(base, spec, "MyComponent.html", null, l)).andReturn(asset);
-        expect(asset.getResourceLocation()).andReturn(resource);
-
-        replay();
-
-        resolver.initializeService();
-
-        Resource resolved = resolver.findComponentResource(comp, cycle, null, ".html", null);
-        assertEquals(resolved, resource);
-
-        verify();
-    }
-
-    // Returns the same URL object pointing to any arbitrary test classpath resource
-    public URL newURL()
-    {
-        return this.getClass().getResource("MyComponent.jwc");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/TestComponentSpecificationResolver.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/TestComponentSpecificationResolver.java
deleted file mode 100644
index abc6e0f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/TestComponentSpecificationResolver.java
+++ /dev/null
@@ -1,638 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.services.ClassFinder;
-import org.apache.tapestry.spec.IComponentSpecification;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.net.URL;
-
-/**
- * Tests for {@link org.apache.tapestry.resolver.ComponentSpecificationResolverImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestComponentSpecificationResolver extends AbstractSpecificationResolverTestCase
-{
-    private void trainIsDeprecated(IComponentSpecification spec,
-            boolean isDeprecated)
-    {
-        expect(spec.isDeprecated()).andReturn(isDeprecated);
-    }
-
-    protected ISpecificationSource newSource(Resource resource, IComponentSpecification spec)
-    {
-        ISpecificationSource source = newMock(ISpecificationSource.class);
-
-        expect(source.getComponentSpecification(resource)).andReturn(spec);
-
-        return source;
-    }
-
-    protected ISpecificationSource newSource(INamespace framework)
-    {
-        ISpecificationSource source = newMock(ISpecificationSource.class);
-
-        expect(source.getFrameworkNamespace()).andReturn(framework);
-
-        return source;
-    }
-
-    private ISpecificationResolverDelegate newDelegate(IRequestCycle cycle, INamespace namespace,
-            String type, IComponentSpecification spec)
-    {
-        ISpecificationResolverDelegate delegate = newMock(ISpecificationResolverDelegate.class);
-        checkOrder(delegate, false);
-        
-        expect(delegate.findComponentSpecification(cycle, namespace, type)).andReturn(spec).anyTimes();
-
-        return delegate;
-    }
-    
-    public void test_Not_Found_In_Any_Namespace()
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-        
-        INamespace namespace = newMock(INamespace.class);
-        
-        ApplicationRuntimeException exception = new ApplicationRuntimeException("");
-
-        expect(namespace.getChildNamespace("invalid")).andThrow(exception);
-        
-        replay();
-
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-
-        try
-        {
-            resolver.resolve(cycle, namespace, "invalid:MyComponent", l);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertSame(ex.getCause(), exception);
-        }
-
-        verify();
-    }    
-
-    public void test_Found_In_Namespace()
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-        
-        IComponentSpecification spec = newSpec();
-        INamespace namespace = newMock(INamespace.class);
-
-        expect(namespace.containsComponentType("MyComponent")).andReturn(true);
-
-        expect(namespace.getComponentSpecification("MyComponent")).andReturn(spec);
-
-        trainIsDeprecated(spec, false);
-        
-        replay();
-
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-
-        resolver.resolve(cycle, namespace, "MyComponent", l);
-
-        assertSame(spec, resolver.getSpecification());
-        assertSame(namespace, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Deprecated()
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-        
-        IComponentSpecification spec = newSpec();
-        INamespace namespace = newMock(INamespace.class);
-        
-        expect(namespace.containsComponentType("MyComponent")).andReturn(true);
-        
-        expect(namespace.getComponentSpecification("MyComponent")).andReturn(spec);
-        
-        trainIsDeprecated(spec, true);
-
-        Log log = newMock(Log.class);
-        
-        log.warn(startsWith("Component 'MyComponent' ("));
-        // at classpath:/org/apache/tapestry/resolver/TestComponentSpecificationResolver, line 1) is deprecated, and will likely
-        // be removed in a later release. Consult its documentation to find a replacement component.");
-        
-        replay();
-        
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-        resolver.setLog(log);
-        
-        resolver.resolve(cycle, namespace, "MyComponent", l);
-        
-        assertSame(spec, resolver.getSpecification());
-        assertSame(namespace, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_In_Child_Namespace()
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-
-        IComponentSpecification spec = newSpec();
-        INamespace namespace = newMock(INamespace.class);
-        INamespace library = newMock(INamespace.class);
-
-        expect(namespace.getChildNamespace("lib")).andReturn(library);
-
-        expect(library.containsComponentType("MyComponent")).andReturn(true);
-        
-        expect(library.getComponentSpecification("MyComponent")).andReturn(spec);
-
-        trainIsDeprecated(spec, false);
-
-        replay();
-
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-
-        resolver.resolve(cycle, namespace, "lib:MyComponent", l);
-
-        assertSame(spec, resolver.getSpecification());
-        assertSame(library, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Search_Found_Relative()
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-
-        IComponentSpecification spec = newSpec();
-        INamespace namespace = newMock(INamespace.class);
-        
-        Log log = newMock(Log.class);
-
-        Resource namespaceLocation = newResource("LibraryStandin.library");
-        Resource specLocation = namespaceLocation.getRelativeResource("MyComponent.jwc");
-
-        expect(namespace.containsComponentType("MyComponent")).andReturn(false);
-
-        train(log, ResolverMessages.resolvingComponent("MyComponent", namespace));
-
-        expect(namespace.getSpecificationLocation()).andReturn(namespaceLocation);
-
-        train(log, ResolverMessages.checkingResource(specLocation));
-        
-        ISpecificationSource source = newSource(specLocation, spec);
-        
-        train(log, ResolverMessages.installingComponent("MyComponent", namespace, spec));
-
-        namespace.installComponentSpecification("MyComponent", spec);
-
-        trainIsDeprecated(spec, false);
-
-        replay();
-
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-        resolver.setLog(log);
-        resolver.setSpecificationSource(source);
-
-        resolver.resolve(cycle, namespace, "MyComponent", l);
-
-        assertSame(spec, resolver.getSpecification());
-        assertSame(namespace, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_In_Framework_Namespace()
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-
-        IComponentSpecification spec = newSpec();
-        INamespace namespace = newMock(INamespace.class);
-        ISpecificationResolverDelegate delegate = newMock(ISpecificationResolverDelegate.class);
-        
-        Log log = newMock(Log.class);
-        INamespace framework = newMock(INamespace.class);
-
-        Resource namespaceLocation = newResource("LibraryStandin.library");
-
-        expect(namespace.containsComponentType("FrameworkComponent")).andReturn(false);
-
-        train(log, ResolverMessages.resolvingComponent("FrameworkComponent", namespace));
-
-        expect(namespace.getSpecificationLocation()).andReturn(namespaceLocation);
-
-        train(log, ResolverMessages.checkingResource(namespaceLocation
-                .getRelativeResource("FrameworkComponent.jwc")));
-        
-        expect(namespace.isApplicationNamespace()).andReturn(false);
-        
-        expect(delegate.findComponentSpecification(cycle, namespace, "FrameworkComponent")).andReturn(null);
-        
-        trainGetPackages(namespace, "org.foo");
-        
-        ClassFinder finder = newClassFinder("org.foo", "FrameworkComponent", null);
-        
-        ISpecificationSource source = newSource(framework);
-
-        expect(framework.containsComponentType("FrameworkComponent")).andReturn(true);
-
-        expect(framework.getComponentSpecification("FrameworkComponent")).andReturn(spec);
-        
-        train(log, ResolverMessages
-                .installingComponent("FrameworkComponent", namespace, spec));
-        namespace.installComponentSpecification("FrameworkComponent", spec);
-
-        trainIsDeprecated(spec, false);
-
-        replay();
-
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-        resolver.setLog(log);
-        resolver.setSpecificationSource(source);
-        resolver.setClassFinder(finder);
-        resolver.setDelegate(delegate);
-        
-        resolver.resolve(cycle, namespace, "FrameworkComponent", l);
-
-        assertSame(spec, resolver.getSpecification());
-        assertSame(namespace, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Provided_By_Delegate()
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-
-        IComponentSpecification spec = newSpec();
-        INamespace namespace = newMock(INamespace.class);
-        
-        Log log = newMock(Log.class);
-        //INamespace framework = newMock(INamespace.class);
-        
-        ISpecificationResolverDelegate delegate = newDelegate(
-                cycle,
-                namespace,
-                "DelegateComponent",
-                spec);
-        
-        expect(namespace.containsComponentType("DelegateComponent")).andReturn(false);
-
-        train(log, ResolverMessages.resolvingComponent("DelegateComponent", namespace));
-
-        Resource namespaceLocation = newResource("LibraryStandin.library");
-        
-        expect(namespace.getSpecificationLocation()).andReturn(namespaceLocation);
-
-        train(log, ResolverMessages.checkingResource(namespaceLocation
-                .getRelativeResource("DelegateComponent.jwc")));
-
-        expect(namespace.isApplicationNamespace()).andReturn(false);
-        
-        expect(log.isDebugEnabled()).andReturn(false);
-        
-        namespace.installComponentSpecification("DelegateComponent", spec);
-        
-        trainIsDeprecated(spec, false);
-        
-        replay();
-
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-        resolver.setLog(log);
-        resolver.setDelegate(delegate);
-        
-        resolver.resolve(cycle, namespace, "DelegateComponent", l);
-        
-        assertSame(spec, resolver.getSpecification());
-        assertSame(namespace, resolver.getNamespace());
-        
-        verify();
-    }
-
-    private void trainGetPackages(INamespace namespace, String packages)
-    {
-        expect(namespace.getPropertyValue("org.apache.tapestry.component-class-packages"))
-        .andReturn(packages);
-    }
-
-    private ClassFinder newClassFinder(String packages, String className, Class result)
-    {
-        ClassFinder finder = newMock(ClassFinder.class);
-
-        expect(finder.findClass(packages, className)).andReturn(result);
-
-        return finder;
-    }
-
-    public void test_Not_Found()
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-        
-        Log log = newMock(Log.class);
-        
-        INamespace namespace = newMock(INamespace.class);
-        INamespace framework = newMock(INamespace.class);
-        
-        ISpecificationResolverDelegate delegate = newDelegate(
-                cycle,
-                namespace,
-                "NotFoundComponent",
-                null);
-        
-        Resource namespaceLocation = newResource("LibraryStandin.library");
-        
-        expect(namespace.containsComponentType("NotFoundComponent")).andReturn(false);
-
-        train(log, ResolverMessages.resolvingComponent("NotFoundComponent", namespace));
-
-        expect(namespace.getSpecificationLocation()).andReturn(namespaceLocation);
-
-        train(log, ResolverMessages.checkingResource(namespaceLocation
-                .getRelativeResource("NotFoundComponent.jwc")));
-
-        expect(namespace.isApplicationNamespace()).andReturn(false);
-
-        ISpecificationSource source = newSource(framework);
-
-        expect(framework.containsComponentType("NotFoundComponent")).andReturn(false);
-
-        ClassFinder finder = newClassFinder("org.foo", "NotFoundComponent", null);
-        trainGetPackages(namespace, "org.foo");
-
-        replay();
-
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-        resolver.setLog(log);
-        resolver.setSpecificationSource(source);
-        resolver.setDelegate(delegate);
-        resolver.setClassFinder(finder);
-
-        try
-        {
-            resolver.resolve(cycle, namespace, "NotFoundComponent", l);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Component 'NotFoundComponent' not found in EasyMock for interface org.apache.tapestry.INamespace.",
-                    ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    /**
-     * Test for checking inside the WEB-INF/app folder (app is the application id, i.e., the servlet
-     * name).
-     */
-
-    public void test_Found_In_App_Folder()
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-        
-        IComponentSpecification spec = newSpec();
-        Log log = newLog();
-
-        Resource contextRoot = newResource("context/");
-        
-        INamespace namespace = newMock(INamespace.class);
-        
-        Resource namespaceLocation = newResource("LibraryStandin.library");
-        Resource specLocation = contextRoot.getRelativeResource("WEB-INF/myapp/MyAppComponent.jwc");
-        
-        expect(namespace.containsComponentType("MyAppComponent")).andReturn(false);
-
-        train(log, ResolverMessages.resolvingComponent("MyAppComponent", namespace));
-
-        expect(namespace.getSpecificationLocation()).andReturn(namespaceLocation);
-
-        train(log, ResolverMessages.checkingResource(namespaceLocation
-                .getRelativeResource("MyAppComponent.jwc")));
-        
-        expect(namespace.isApplicationNamespace()).andReturn(true);
-
-        train(log, ResolverMessages.checkingResource(specLocation));
-        
-        ISpecificationSource source = newSource(specLocation, spec);
-        
-        train(log, ResolverMessages.installingComponent("MyAppComponent", namespace, spec));
-        
-        namespace.installComponentSpecification("MyAppComponent", spec);
-
-        trainIsDeprecated(spec, false);
-
-        replay();
-
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-        resolver.setLog(log);
-        resolver.setSpecificationSource(source);
-        resolver.setContextRoot(contextRoot);
-        resolver.setApplicationId("myapp");
-        resolver.initializeService();
-
-        resolver.resolve(cycle, namespace, "MyAppComponent", l);
-
-        assertSame(spec, resolver.getSpecification());
-        assertSame(namespace, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_In_Web_Inf_Folder()
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-
-        IComponentSpecification spec = newSpec();
-        Log log = newLog();
-
-        Resource contextRoot = newResource("context/");
-
-        INamespace namespace = newMock(INamespace.class);
-
-        Resource namespaceLocation = newResource("LibraryStandin.library");
-        Resource specLocation = contextRoot.getRelativeResource("WEB-INF/MyWebInfComponent.jwc");
-        
-        expect(namespace.containsComponentType("MyWebInfComponent")).andReturn(false);
-        
-        train(log, ResolverMessages.resolvingComponent("MyWebInfComponent", namespace));
-
-        expect(namespace.getSpecificationLocation()).andReturn(namespaceLocation);
-
-        train(log, ResolverMessages.checkingResource(namespaceLocation
-                .getRelativeResource("MyWebInfComponent.jwc")));
-
-        expect(namespace.isApplicationNamespace()).andReturn(true);
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/myapp/MyWebInfComponent.jwc")));
-        train(log, ResolverMessages.checkingResource(specLocation));
-        
-        ISpecificationSource source = newSource(specLocation, spec);
-        
-        train(log, ResolverMessages.installingComponent("MyWebInfComponent", namespace, spec));
-
-        namespace.installComponentSpecification("MyWebInfComponent", spec);
-        
-        trainIsDeprecated(spec, false);
-        
-        replay();
-
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-        resolver.setLog(log);
-        resolver.setSpecificationSource(source);
-        resolver.setContextRoot(contextRoot);
-        resolver.setApplicationId("myapp");
-        resolver.initializeService();
-
-        resolver.resolve(cycle, namespace, "MyWebInfComponent", l);
-
-        assertSame(spec, resolver.getSpecification());
-        assertSame(namespace, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_In_Context_Root()
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = newLocation();
-
-        IComponentSpecification spec = newSpec();
-        Log log = newLog();
-
-        Resource contextRoot = newResource("context/");
-        
-        INamespace namespace = newMock(INamespace.class);
-        
-        Resource namespaceLocation = newResource("LibraryStandin.library");
-        Resource specLocation = contextRoot.getRelativeResource("ContextRootComponent.jwc");
-        
-        
-
-        expect(namespace.containsComponentType("ContextRootComponent")).andReturn(false);
-
-        train(log, ResolverMessages.resolvingComponent("ContextRootComponent", namespace));
-        
-        expect(namespace.getSpecificationLocation()).andReturn(namespaceLocation);
-
-        train(log, ResolverMessages.checkingResource(namespaceLocation
-                .getRelativeResource("ContextRootComponent.jwc")));
-        
-        expect(namespace.isApplicationNamespace()).andReturn(true);
-
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/myapp/ContextRootComponent.jwc")));
-        train(log, ResolverMessages.checkingResource(contextRoot
-                .getRelativeResource("WEB-INF/ContextRootComponent.jwc")));
-        
-        train(log, ResolverMessages.checkingResource(specLocation));
-        
-        ISpecificationSource source = newSource(specLocation, spec);
-        
-        train(log, ResolverMessages.installingComponent(
-                "ContextRootComponent",
-                namespace,
-                spec));
-
-        namespace.installComponentSpecification("ContextRootComponent", spec);
-
-        trainIsDeprecated(spec, false);
-        
-        replay();
-
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-        resolver.setLog(log);
-        resolver.setSpecificationSource(source);
-        resolver.setContextRoot(contextRoot);
-        resolver.setApplicationId("myapp");
-        resolver.initializeService();
-
-        resolver.resolve(cycle, namespace, "ContextRootComponent", l);
-
-        assertSame(spec, resolver.getSpecification());
-        assertSame(namespace, resolver.getNamespace());
-
-        verify();
-    }
-
-    public void test_Found_Component_Class()
-    {   
-        INamespace namespace = newMock(INamespace.class);
-
-        trainGetPackages(namespace, "org.foo");
-        ClassFinder finder = newClassFinder("org.foo", "folder.MyComponent", BaseComponent.class);
-
-        Resource componentResource = newResource();
-        Resource namespaceResource = newResource("folder/MyComponent.jwc", componentResource);
-        
-        trainGetResource(namespace, namespaceResource);
-
-        URL componentUrl = this.getClass().getResource("MyComponent.jwc");
-        expect(componentResource.getResourceURL()).andReturn(componentUrl);
-
-        replay();
-
-        ComponentSpecificationResolverImpl resolver = new ComponentSpecificationResolverImpl();
-        resolver.setClassFinder(finder);
-
-        IComponentSpecification spec = resolver.searchForComponentClass(namespace, "folder/MyComponent");
-
-        assertEquals(BaseComponent.class.getName(), spec.getComponentClassName());
-        assertSame(componentResource, spec.getSpecificationLocation());
-        assertSame(componentResource, spec.getLocation().getResource());
-
-        verify();
-    }
-
-    private void trainGetResource(INamespace namespace, Resource resource)
-    {
-        expect(namespace.getSpecificationLocation()).andReturn(resource);
-    }
-
-    private Resource newResource(String relativePath, Resource relativeResource)
-    {
-        Resource resource = newMock(Resource.class);
-        checkOrder(resource, false);
-        
-        expect(resource.getRelativeResource(relativePath)).andReturn(relativeResource);
-
-        return resource;
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/ContextRootComponent.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/ContextRootComponent.jwc
deleted file mode 100644
index 9bca74e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/ContextRootComponent.jwc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/ContextRootPage.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/ContextRootPage.page
deleted file mode 100644
index 6fd8658..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/ContextRootPage.page
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<page-specification/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/TemplatePage.html b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/TemplatePage.html
deleted file mode 100644
index e69de29..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/TemplatePage.html
+++ /dev/null
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/MyWebInfComponent.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/MyWebInfComponent.jwc
deleted file mode 100644
index 9bca74e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/MyWebInfComponent.jwc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/MyWebInfPage.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/MyWebInfPage.page
deleted file mode 100644
index 6fd8658..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/MyWebInfPage.page
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<page-specification/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/NamespacePage.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/NamespacePage.page
deleted file mode 100644
index 6fd8658..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/NamespacePage.page
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<page-specification/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/myapp/MalformedXmlTag.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/myapp/MalformedXmlTag.page
deleted file mode 100644
index defd26f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/myapp/MalformedXmlTag.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-
-<page-specification>
-
-	<component id="foo" type="Insert">
-		<binding name="fred" value="literal:hah" />
-        <binding name="disabled" value="literal:true" 
-    </component>
-
-</page-specification>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/myapp/MyAppComponent.jwc b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/myapp/MyAppComponent.jwc
deleted file mode 100644
index 9bca74e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/myapp/MyAppComponent.jwc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-	
-<component-specification/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/myapp/MyAppPage.page b/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/myapp/MyAppPage.page
deleted file mode 100644
index 6fd8658..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/myapp/MyAppPage.page
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
-  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
-<page-specification/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/script/TestForeachToken.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/script/TestForeachToken.java
deleted file mode 100644
index 2075d9e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/script/TestForeachToken.java
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests {@link org.apache.tapestry.script.ForeachToken}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestForeachToken extends BaseComponentTestCase
-{
-    private static class EchoToken extends AbstractToken
-    {
-        private String _key;
-
-        public EchoToken(String key)
-        {
-            super(null);
-
-            _key = key;
-        }
-
-        public void write(StringBuffer buffer, ScriptSession session)
-        {
-            Object value = session.getSymbols().get(_key);
-
-            buffer.append(value);
-            buffer.append("\n");
-        }
-    }
-
-    public void testFull()
-    {
-        Map symbols = new HashMap();
-        
-        ScriptSession s = newMock(ScriptSession.class);
-
-        StringBuffer buffer = new StringBuffer();
-
-        Iterator i = Arrays.asList(new String[]
-        { "buffy", "angel" }).iterator();
-
-        expect(s.evaluate("EXPRESSION", Iterator.class)).andReturn(i);
-
-        expect(s.getSymbols()).andReturn(symbols).times(5);
-
-        replay();
-
-        ForeachToken t = new ForeachToken("value", "index", "EXPRESSION", null);
-        t.addToken(new EchoToken("value"));
-        t.addToken(new EchoToken("index"));
-
-        t.write(buffer, s);
-
-        verify();
-
-        assertEquals("buffy\n0\nangel\n1\n", buffer.toString());
-
-        assertEquals("angel", symbols.get("value"));
-        assertEquals("1", symbols.get("index"));
-    }
-
-    public void testNoIndex()
-    {
-        Map symbols = new HashMap();
-
-        symbols.put("index", "none");
-
-        ScriptSession s = newMock(ScriptSession.class);
-
-        StringBuffer buffer = new StringBuffer();
-
-        Iterator i = Arrays.asList(new String[]
-        { "buffy", "angel" }).iterator();
-
-        expect(s.evaluate("EXPRESSION", Iterator.class)).andReturn(i);
-
-        expect(s.getSymbols()).andReturn(symbols).times(5);
-
-        replay();
-
-        ForeachToken t = new ForeachToken("value", null, "EXPRESSION", null);
-        t.addToken(new EchoToken("value"));
-        t.addToken(new EchoToken("index"));
-
-        t.write(buffer, s);
-
-        verify();
-
-        assertEquals("buffy\nnone\nangel\nnone\n", buffer.toString());
-
-        assertEquals("angel", symbols.get("value"));
-        assertEquals("none", symbols.get("index"));
-    }
-
-    public void testNullIterator()
-    {
-        ScriptSession s = newMock(ScriptSession.class);
-
-        expect(s.evaluate("EXPRESSION", Iterator.class)).andReturn(null);
-
-        IScriptToken inner = newMock(IScriptToken.class);
-
-        replay();
-        ForeachToken t = new ForeachToken("value", "index", "EXPRESSION", null);
-        t.addToken(inner);
-
-        t.write(null, s);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/script/TestIfToken.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/script/TestIfToken.java
deleted file mode 100644
index 8cff3c2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/script/TestIfToken.java
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests {@link org.apache.tapestry.script.IfToken}, the basis for the &lt;if&gt; and
- * &lt;if-not&gt; elements.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestIfToken extends BaseComponentTestCase
-{
-    public void testEvaluateTrue()
-    {
-        ScriptSession s = newMock(ScriptSession.class);
-
-        IScriptToken nested = newMock(IScriptToken.class);
-
-        expect(s.evaluate("EXPRESSION", Boolean.class)).andReturn(Boolean.TRUE);
-
-        StringBuffer buffer = new StringBuffer();
-
-        nested.write(buffer, s);
-
-        replay();
-
-        IfToken t = new IfToken(true, "EXPRESSION", null);
-        t.addToken(nested);
-
-        t.write(buffer, s);
-
-        verify();
-    }
-
-    public void testEvaluateFalse()
-    {
-        ScriptSession s = newMock(ScriptSession.class);
-
-        IScriptToken nested = newMock(IScriptToken.class);
-
-        expect(s.evaluate("EXPRESSION", Boolean.class)).andReturn(Boolean.FALSE);
-
-        StringBuffer buffer = new StringBuffer();
-
-        replay();
-
-        IfToken t = new IfToken(true, "EXPRESSION", null);
-        t.addToken(nested);
-
-        t.write(buffer, s);
-
-        verify();
-    }
-
-    public void testEvaluateMatch()
-    {
-        ScriptSession s = newMock(ScriptSession.class);
-
-        IScriptToken nested = newMock(IScriptToken.class);
-
-        expect(s.evaluate("EXPRESSION", Boolean.class)).andReturn(Boolean.FALSE);
-
-        StringBuffer buffer = new StringBuffer();
-
-        nested.write(buffer, s);
-
-        replay();
-
-        IfToken t = new IfToken(false, "EXPRESSION", null);
-        t.addToken(nested);
-
-        t.write(buffer, s);
-
-        verify();
-    }
-
-    public void testEvaluateFailure()
-    {
-        Location l = fabricateLocation(8);
-        Throwable inner = new ApplicationRuntimeException("Simulated error.");
-
-        ScriptSession s = newMock(ScriptSession.class);
-
-        expect(s.evaluate("EXPRESSION", Boolean.class)).andThrow(inner);
-
-        replay();
-
-        IfToken t = new IfToken(false, "EXPRESSION", l);
-
-        try
-        {
-            t.write(null, s);
-            
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(inner.getMessage(), ex.getMessage());
-            assertSame(l, ex.getLocation());
-            assertSame(inner, ex.getRootCause());
-        }
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/scriptaculous/TestSuggest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/scriptaculous/TestSuggest.java
deleted file mode 100644
index 7c09de3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/scriptaculous/TestSuggest.java
+++ /dev/null
@@ -1,286 +0,0 @@
-package org.apache.tapestry.scriptaculous;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.*;
-import static org.apache.tapestry.Capturer.capture;
-import static org.apache.tapestry.Capturer.newCapturer;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.engine.DirectServiceParameter;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.form.MockForm;
-import org.apache.tapestry.form.TranslatedFieldSupport;
-import org.apache.tapestry.form.ValidatableFieldSupport;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidationDelegate;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Tests core functionality of {@link Suggest} component.
- */
-@Test
-public class TestSuggest extends BaseComponentTestCase {
-
-    public void test_Render_Component()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        checkOrder(cycle, false);
-        
-        ResponseBuilder resp = newMock(ResponseBuilder.class);
-        IEngineService engine = newMock(IEngineService.class);
-        IEngine cengine = newMock(IEngine.class);
-        ILink link = newMock(ILink.class);
-        IScript script = newMock(IScript.class);
-        PageRenderSupport prs = newMock(PageRenderSupport.class);
-
-        TranslatedFieldSupport translator = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport validator = newMock(ValidatableFieldSupport.class);
-
-        IValidationDelegate delegate = new ValidationDelegate();
-        IForm form = newMock(IForm.class);
-        IMarkupWriter writer = newBufferWriter();
-
-        Suggest comp = newInstance(Suggest.class,
-                                   "response", resp,
-                                   "templateTagName", "input",
-                                   "name", "suggest",
-                                   "clientId", "suggest",
-                                   "form", form,
-                                   "translatedFieldSupport", translator,
-                                   "validatableFieldSupport", validator,
-                                   "engineService", engine,
-                                   "script", script);
-
-        expect(cycle.isRewinding()).andReturn(false).anyTimes();
-        expect(resp.isDynamic()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form).anyTimes();
-
-        expect(form.wasPrerendered(writer, comp)).andReturn(false).anyTimes();
-        expect(form.getDelegate()).andReturn(delegate).anyTimes();
-        expect(form.getElementId(comp)).andReturn("suggest");
-        expect(form.isRewinding()).andReturn(false).anyTimes();
-
-        form.setFormFieldUpdating(true);
-        
-        expect(translator.format(comp, null)).andReturn("r2d2");
-        translator.renderContributions(comp, writer, cycle);
-        validator.renderContributions(comp, writer, cycle);
-
-        expect(cycle.getEngine()).andReturn(cengine);
-        expect(cengine.getOutputEncoding()).andReturn("utf-8");
-        expect(engine.getLink(eq(false), isA(DirectServiceParameter.class))).andReturn(link);
-        expect(link.getURL()).andReturn("http://url");
-
-        Capturer<Map> parm = newCapturer(Map.class);
-
-        trainGetAttribute(cycle, TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE, prs);
-        script.execute(eq(comp), eq(cycle), eq(prs), capture(parm));
-
-        replay();
-
-        comp.renderComponent(writer, cycle);
-
-        verify();
-
-        assert parm.getCaptured() != null;
-        Map parms = parm.getCaptured();
-
-        assertEquals(parms.size(), 4);
-        assertEquals(parms.get("inputId"), "suggest");
-        assertEquals(parms.get("updateId"), "suggestchoices");
-        assertEquals(parms.get("options"), "{\"onFailure\":\"tapestry.error\",\"encoding\":\"utf-8\"}");
-        assertEquals(parms.get("updateUrl"), "http://url");
-
-        assertBuffer("<input type=\"text\" autocomplete=\"off\" " +
-                     "id=\"suggest\" name=\"suggest\" value=\"r2d2\" />" +
-                     "<div id=\"suggestchoices\" class=\"\"></div>");
-    }
-
-    public void test_Render_TextArea_Component()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        checkOrder(cycle, false);
-
-        ResponseBuilder resp = newMock(ResponseBuilder.class);
-        IEngineService engine = newMock(IEngineService.class);
-        IEngine cengine = newMock(IEngine.class);
-        ILink link = newMock(ILink.class);
-        IScript script = newMock(IScript.class);
-        PageRenderSupport prs = newMock(PageRenderSupport.class);
-
-        TranslatedFieldSupport translator = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport validator = newMock(ValidatableFieldSupport.class);
-
-        IValidationDelegate delegate = new ValidationDelegate();
-        IForm form = newMock(IForm.class);
-        IMarkupWriter writer = newBufferWriter();
-
-        Suggest comp = newInstance(Suggest.class,
-                                   "response", resp,
-                                   "templateTagName", "textarea",
-                                   "name", "suggest",
-                                   "clientId", "suggest",
-                                   "form", form,
-                                   "translatedFieldSupport", translator,
-                                   "validatableFieldSupport", validator,
-                                   "engineService", engine,
-                                   "script", script);
-
-        expect(cycle.isRewinding()).andReturn(false).anyTimes();
-        expect(resp.isDynamic()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form).anyTimes();
-
-        expect(form.wasPrerendered(writer, comp)).andReturn(false).anyTimes();
-        expect(form.getDelegate()).andReturn(delegate).anyTimes();
-        expect(form.getElementId(comp)).andReturn("suggest");
-        expect(form.isRewinding()).andReturn(false).anyTimes();
-
-        form.setFormFieldUpdating(true);
-
-        expect(translator.format(comp, null)).andReturn("r2d2");
-        translator.renderContributions(comp, writer, cycle);
-        validator.renderContributions(comp, writer, cycle);
-
-        expect(cycle.getEngine()).andReturn(cengine);
-        expect(cengine.getOutputEncoding()).andReturn("utf-8");
-        expect(engine.getLink(eq(false), isA(DirectServiceParameter.class))).andReturn(link);
-        expect(link.getURL()).andReturn("http://url");
-
-        Capturer<Map> parm = newCapturer(Map.class);
-
-        trainGetAttribute(cycle, TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE, prs);
-        script.execute(eq(comp), eq(cycle), eq(prs), capture(parm));
-
-        replay();
-
-        comp.renderComponent(writer, cycle);
-
-        verify();
-
-        assert parm.getCaptured() != null;
-        Map parms = parm.getCaptured();
-
-        assertEquals(parms.size(), 4);
-        assertEquals(parms.get("inputId"), "suggest");
-        assertEquals(parms.get("updateId"), "suggestchoices");
-        assertEquals(parms.get("options"), "{\"onFailure\":\"tapestry.error\",\"encoding\":\"utf-8\"}");
-        assertEquals(parms.get("updateUrl"), "http://url");
-
-        assertBuffer("<textarea id=\"suggest\" name=\"suggest\">r2d2</textarea>" +
-                     "<div id=\"suggestchoices\" class=\"\"></div>");
-    }
-
-    public void test_Render_Invalid_Options_JSON_Syntax()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        checkOrder(cycle, false);
-        ResponseBuilder resp = newMock(ResponseBuilder.class);
-
-        TranslatedFieldSupport translator = newMock(TranslatedFieldSupport.class);
-        ValidatableFieldSupport validator = newMock(ValidatableFieldSupport.class);
-
-        IValidationDelegate delegate = new ValidationDelegate();
-        IForm form = new MockForm(delegate);
-        IMarkupWriter writer = newBufferWriter();
-
-        IBinding binding = newMock(IBinding.class);
-        Location l = newLocation();
-        ComponentSpecification spec = new ComponentSpecification();
-        
-        Suggest comp = newInstance(Suggest.class,
-                                   "response", resp,
-                                   "templateTagName", "input",
-                                   "name", "suggest",
-                                   "clientId", "suggest",
-                                   "form", form,
-                                   "translatedFieldSupport", translator,
-                                   "validatableFieldSupport", validator,
-                                   "options", "{thisisinvalid:true",
-                                   "specification", spec);
-
-        expect(cycle.isRewinding()).andReturn(false).anyTimes();
-        expect(resp.isDynamic()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.FORM_ATTRIBUTE)).andReturn(form).anyTimes();
-
-        expect(translator.format(comp, null)).andReturn("r2d2");
-        translator.renderContributions(comp, writer, cycle);
-        validator.renderContributions(comp, writer, cycle);
-
-        expect(binding.getObject()).andReturn("{thisisinvalid:true");
-        expect(binding.getLocation()).andReturn(l);
-
-        replay();
-
-        try {
-
-            comp.setBinding("options", binding);
-
-            comp.renderComponent(writer, cycle);
-
-            unreachable();
-        } catch (ApplicationRuntimeException ex) {
-
-            assertEquals(ex.getMessage(), "Invalid JSON options string given: {thisisinvalid:true. " +
-                                          "The options parameter must be properly formatted according to JSON object syntax rules. " +
-                                          "Expected a ',' or '}' at character 19 of {thisisinvalid:true>>missing value<<");
-        }
-
-        verify();
-    }
-
-    public void test_Render_List()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        checkOrder(cycle, false);
-        ResponseBuilder resp = newMock(ResponseBuilder.class);
-
-        IValidationDelegate delegate = new ValidationDelegate();
-        IForm form = newMock(IForm.class);
-        IMarkupWriter writer = newBufferWriter();
-
-        ValueConverter converter = newMock(ValueConverter.class);
-
-        List<String> source = new ArrayList<String>();
-        source.add("Foo");
-        source.add("Stimpy");
-        source.add("Cat");
-
-        Suggest comp = newInstance(Suggest.class,
-                                   "response", resp,
-                                   "templateTagName", "input",
-                                   "name", "suggest",
-                                   "clientId", "suggest",
-                                   "form", form,
-                                   "searchTriggered", true,
-                                   "listSource", source,
-                                   "valueConverter", converter,
-                                   "listItemRenderer", DefaultListItemRenderer.SHARED_INSTANCE);
-
-        expect(form.isRewinding()).andReturn(false);
-        expect(cycle.isRewinding()).andReturn(false).anyTimes();
-        expect(resp.isDynamic()).andReturn(true);
-        trainGetAttribute(cycle, TapestryUtils.FORM_ATTRIBUTE, form);
-        expect(form.wasPrerendered(writer, comp)).andReturn(false);
-
-        expect(form.getElementId(comp)).andReturn("suggest");
-        expect(cycle.getParameter("suggest")).andReturn("b");
-        expect(converter.coerceValue(source, Iterator.class)).andReturn(source.iterator());
-
-        replay();
-
-        comp.renderComponent(writer, cycle);
-
-        verify();
-
-        assertBuffer("<ul><li>Foo</li><li>Stimpy</li><li>Cat</li></ul>");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/DummyFilter.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/DummyFilter.java
deleted file mode 100644
index 69514df..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/DummyFilter.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright May 12, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services;
-
-
-/**
- * @author jcarman
- *
- */
-public class DummyFilter implements DataSqueezerFilter
-{
-    public String squeeze(Object data, DataSqueezer dataSqueezer) {
-        return "dummy:" + dataSqueezer.squeeze( data );
-    }
-
-    public String[] squeeze(Object[] data, DataSqueezer dataSqueezer) {
-        return null;
-    }
-
-    public Object unsqueeze(String string, DataSqueezer dataSqueezer) {
-    
-        return null;
-    }
-
-    public Object[] unsqueeze(String[] strings, DataSqueezer dataSqueezer)
-    {
-        return null;
-    }
-    
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/TestDataSqueezer.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/TestDataSqueezer.java
deleted file mode 100644
index 680d4c1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/TestDataSqueezer.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright May 12, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services;
-
-import org.apache.hivemind.Registry;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-
-/**
- * 
- *
- */
-@Test
-public class TestDataSqueezer extends BaseComponentTestCase {
-
-    public void testPipeline() 
-    throws Exception 
-    {
-        final Registry reg = buildFrameworkRegistry( "squeezer-pipeline.xml" );
-        final DataSqueezer squeezer = ( DataSqueezer )reg.getService( DataSqueezer.class );
-        
-        final String squeezedValue = squeezer.squeeze( "Hello, World!" );
-
-        assertTrue( squeezedValue.startsWith( "dummy:" ) );
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/AbstractEngineServiceProxyTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/AbstractEngineServiceProxyTestCase.java
deleted file mode 100644
index b086171..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/AbstractEngineServiceProxyTestCase.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.services.impl;

-

-import static org.easymock.EasyMock.expect;

-

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.engine.IEngineService;

-import org.apache.tapestry.engine.ILink;

-

-/**

- * Base class for test cases of engine service proxies.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-public abstract class AbstractEngineServiceProxyTestCase extends BaseComponentTestCase

-{

-    protected IEngineService newEngineService()

-    {

-        return newMock(IEngineService.class);

-    }

-

-    protected void trainGetLink(IEngineService service, boolean post, Object parameter, ILink link)

-    {

-        expect(service.getLink(post, parameter)).andReturn(link);

-    }

-

-    protected ILink newLink()

-    {

-        return newMock(ILink.class);

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/BasicObject.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/BasicObject.java
deleted file mode 100644
index 0fe5889..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/BasicObject.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-
-/**
- * Basic class for testing ognl expression resolution.
- */
-public class BasicObject
-{
-    private String _stringValue = "foo";
-    
-    public BasicObject(){}
-    
-    public String getValue()
-    {
-        return _stringValue;
-    }
-    
-    public void setValue(String value)
-    {
-        _stringValue = value;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java
deleted file mode 100644
index 6b147d9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java
+++ /dev/null
@@ -1,568 +0,0 @@
-// Copyright May 21, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.*;
-import org.apache.tapestry.dojo.IWidget;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.html.Body;
-import org.apache.tapestry.internal.event.ComponentEventProperty;
-import org.apache.tapestry.internal.event.IComponentEventInvoker;
-import org.apache.tapestry.internal.event.impl.ComponentEventInvoker;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import static org.easymock.EasyMock.*;
-import org.easymock.MockControl;
-import org.easymock.classextension.MockClassControl;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * Test functionality of {@link ComponentEventConnectionWorker}.
- * 
- * @author jkuhnert
- */
-@Test
-public class ComponentEventConnectionWorkerTest extends BaseComponentTestCase
-{
-    public void test_Event_Render_Chain()
-    {   
-        ClassResolver resolver = new DefaultClassResolver();
-        
-        IComponentEventInvoker invoker = new ComponentEventInvoker();
-        IEngineService engine = newMock(IEngineService.class);
-        IRequestCycle cycle = newCycle();
-        checkOrder(cycle, false);
-        
-        IComponentSpecification spec = new ComponentSpecification();
-        IComponentSpecification widgetSpec = new ComponentSpecification();
-        
-        IScriptSource scriptSource = newMock(IScriptSource.class);
-        IScript script = newMock(IScript.class);
-        
-        PageRenderSupport prs = newPageRenderSupport();
-        
-        ILink link = newMock(ILink.class);
-        
-        String elemScript = "/org/apache/tapestry/html/ElementEvent.script";
-        String compScript = "/org/apache/tapestry/ComponentEvent.script";
-        String widScript = "/org/apache/tapestry/dojo/html/WidgetEvent.script";
-        
-        Resource compScriptResource = new ClasspathResource(resolver, compScript);
-        Resource widScriptResource = new ClasspathResource(resolver, widScript);
-        Resource elemScriptResource = new ClasspathResource(resolver, elemScript);
-        
-        ComponentEventConnectionWorker worker = new ComponentEventConnectionWorker();
-        worker.setClassResolver(resolver);
-        worker.setEventInvoker(invoker);
-        worker.setComponentScript(compScript);
-        worker.setWidgetScript(widScript);
-        worker.setElementScript(elemScript);
-        worker.setEventEngine(engine);
-        worker.setScriptSource(scriptSource);
-        
-        IDirectEvent component = newMock(IDirectEvent.class);
-        IWidget widget = newMock(IWidget.class);
-        
-        assertNotNull(worker.getScript(component));
-        assertEquals(compScript, worker.getScript(component).getPath());
-        
-        assertNotNull(worker.getScript(widget));
-        assertEquals(widScript, worker.getScript(widget).getPath());
-        
-        assertNotNull(worker.getElementScript());
-        assertEquals(elemScript, worker.getElementScript().getPath());
-        
-        // now test render
-        invoker.addEventListener("comp1", spec);
-        spec.addEventListener("comp1", new String[] {"onclick"}, "testMethod", null, false, true, false, false);
-        spec.addElementEventListener("elementId", new String[] {"onclick"}, "testMethod", null, false, true, false);
-        
-        /////////////////////////////////
-        
-        Map elmEvents = spec.getElementEvents();
-        Iterator keyIt = elmEvents.keySet().iterator();
-        
-        while (keyIt.hasNext())
-        {
-            String elem = (String)keyIt.next();
-            assertEquals(elem, "elementId");
-            
-            ComponentEventProperty prop = (ComponentEventProperty)elmEvents.get(elem);
-            assertNotNull(prop);
-            
-            Object[][] events = worker.getEvents(prop, elem);
-            
-            assertNotNull(events);
-            assertEquals(events.length, 1);
-            assertEquals(events[0].length, 2);
-        }
-        
-        ////////////////////////////////////////////
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
-        
-        expect(component.getExtendedId()).andReturn("comp1").anyTimes();
-        expect(component.getClientId()).andReturn("comp1").anyTimes();
-        
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs).anyTimes();
-        expect(component.getSpecification()).andReturn(spec);
-        
-        trainGetLinkCheckIgnoreParameter(engine, cycle, false, new Object(), link);
-        trainGetURL(link, "/some/url");
-        
-        expect(scriptSource.getScript(compScriptResource)).andReturn(script);
-        script.execute(eq(component), eq(cycle), eq(prs), isA(Map.class));
-        
-        expect(component.getSpecification()).andReturn(spec);
-        
-        trainGetLinkCheckIgnoreParameter(engine, cycle, false, new Object(), link);
-        trainGetURL(link, "/some/url");
-        
-        expect(scriptSource.getScript(elemScriptResource)).andReturn(script);
-        script.execute(eq(component), eq(cycle), eq(prs), isA(Map.class));
-        
-        replay();
-        
-        worker.renderComponent(cycle, component);
-        
-        verify();
-        
-        assertEquals(0, worker.getDefferedFormConnections().size());
-        
-        // test widget render
-        
-        invoker.addEventListener("wid1", widgetSpec);
-        widgetSpec.addEventListener("wid1", new String[] {"onclick"}, "testMethod", null, false, true, false, false);
-        
-        checkOrder(cycle, false);
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs).anyTimes();
-        
-        expect(widget.getSpecification()).andReturn(widgetSpec);
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
-        
-        expect(widget.getExtendedId()).andReturn("wid1").anyTimes();
-        expect(widget.getClientId()).andReturn("wid1").anyTimes();
-        
-        assert widgetSpec.getComponentEvents("wid1") != null;
-        
-        trainGetLinkCheckIgnoreParameter(engine, cycle, false, new Object(), link);
-        trainGetURL(link, "/some/url2");
-        
-        expect(scriptSource.getScript(widScriptResource)).andReturn(script);
-        
-        script.execute(eq(widget), eq(cycle), eq(prs), isA(Map.class));
-        
-        replay();
-        
-        worker.renderComponent(cycle, widget);
-        
-        verify();
-    }
-    
-    public void test_Rewind_Render()
-    {
-        IRequestCycle cycle = newCycle();
-        
-        ComponentEventConnectionWorker worker = new ComponentEventConnectionWorker();
-        
-        expect(cycle.isRewinding()).andReturn(true);
-        
-        replay();
-        
-        worker.renderComponent(cycle, null);
-        
-        verify();
-    }
-    
-    public void test_Null_PageSupport()
-    {
-        IRequestCycle cycle = newCycle();
-        
-        ComponentEventConnectionWorker worker = new ComponentEventConnectionWorker();
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(null);
-        
-        replay();
-        
-        worker.renderComponent(cycle, null);
-        
-        verify();
-    }
-    
-    
-    public void test_Deferred_Connection()
-    {
-        IComponentEventInvoker invoker = new org.apache.tapestry.internal.event.impl.ComponentEventInvoker();
-        IEngineService engine = newMock(IEngineService.class);
-        IRequestCycle cycle = newCycle();
-        PageRenderSupport prs = newPageRenderSupport();
-        
-        ComponentEventConnectionWorker worker = new ComponentEventConnectionWorker();
-        worker.setEventInvoker(invoker);
-        worker.setEventEngine(engine);
-        
-        IDirectEvent component = newMock(IDirectEvent.class);
-        IComponentSpecification spec = new ComponentSpecification();
-        
-        IDirectEvent comp1 = newMock(IDirectEvent.class);
-        IComponentSpecification comp1Spec = new ComponentSpecification();
-        
-        IDirectEvent comp2 = newMock(IDirectEvent.class);
-        IComponentSpecification comp2Spec = new ComponentSpecification();
-        
-        // now test render
-        spec.addEventListener("comp1", new String[] {"onclick", "onchange"}, "testMethod", "form1", true, true, false, false);
-        invoker.addEventListener("comp1", spec);
-        invoker.addFormEventListener("form1", spec);
-        
-        spec.addEventListener("comp2", new String[] {"onclick"}, "testAnotherMethod", "form1", true, true, false, false);
-        invoker.addEventListener("comp2", spec);
-        invoker.addFormEventListener("form1", spec);
-        
-        // render of comp1
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
-        
-        expect(comp1.getExtendedId()).andReturn("comp1").anyTimes();
-        expect(comp1.getClientId()).andReturn("comp1").anyTimes();
-        
-        expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null).times(2);
-        expect(comp1.getSpecification()).andReturn(comp1Spec);
-        
-        // render of comp2
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
-        
-        expect(comp2.getExtendedId()).andReturn("comp2");
-        expect(comp2.getClientId()).andReturn("comp2");
-
-        expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
-        expect(comp2.getSpecification()).andReturn(comp2Spec);
-
-        // second render of comp2
-
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
-
-        expect(comp2.getExtendedId()).andReturn("comp2");
-        expect(comp2.getClientId()).andReturn("comp2_0");
-
-        expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
-        expect(comp2.getSpecification()).andReturn(comp2Spec);
-
-        // render of component
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
-        
-        expect(component.getExtendedId()).andReturn("comp").anyTimes();
-        expect(component.getSpecification()).andReturn(spec);
-        
-        replay();
-        
-        worker.renderComponent(cycle, comp1);
-        worker.renderComponent(cycle, comp2);
-        worker.renderComponent(cycle, comp2); // to test unique client id connections
-        worker.renderComponent(cycle, component);
-        
-        verify();
-        
-        assertEquals(worker.getDefferedFormConnections().size(), 1);
-        
-        List deferred = (List)worker.getDefferedFormConnections().get("form1");
-        
-        assert deferred != null;
-        assertEquals(deferred.size(), 3);
-
-        ComponentEventConnectionWorker.DeferredFormConnection fConn = (ComponentEventConnectionWorker.DeferredFormConnection)deferred.get(0);
-        
-        // assert async is false
-        assert fConn._async;
-        assert fConn._validate;
-        
-        Map parm = fConn._scriptParms;
-        
-        assert parm.get("clientId") != null;
-        assert parm.get("component") != null;
-        assert parm.get("url") == null;
-        assert parm.get("formEvents") == null;
-        assert parm.get("target") == null;
-        
-        assertEquals("comp1", parm.get("clientId"));
-        assertEquals(comp1, parm.get("component"));
-
-        // test comp2 connections
-
-        fConn = (ComponentEventConnectionWorker.DeferredFormConnection)deferred.get(1);
-        parm = fConn._scriptParms;
-
-        assert fConn._async;
-        assert fConn._validate;
-
-        assert parm.get("clientId") != null;
-        assert parm.get("component") != null;
-        assert parm.get("url") == null;
-        assert parm.get("formEvents") == null;
-        assert parm.get("target") == null;
-        
-        assertEquals(parm.get("clientId"), "comp2");
-        assertEquals(parm.get("component"), comp2);
-
-        // test comp2 second render connections
-
-        fConn = (ComponentEventConnectionWorker.DeferredFormConnection)deferred.get(2);
-        parm = fConn._scriptParms;
-
-        assert fConn._async;
-        assert fConn._validate;
-
-        assert parm.get("clientId") != null;
-        assert parm.get("component") != null;
-        assert parm.get("url") == null;
-        assert parm.get("formEvents") == null;
-        assert parm.get("target") == null;
-
-        assertEquals(parm.get("clientId"), "comp2_0");
-        assertEquals(parm.get("component"), comp2);
-    }
-    
-    public void test_Form_Render_Deffered()
-    {
-        ClassResolver resolver = new DefaultClassResolver();
-        
-        IComponentEventInvoker invoker = new ComponentEventInvoker();
-        IEngineService engine = newMock(IEngineService.class);
-        IRequestCycle cycle = newCycle();
-        IScriptSource scriptSource = newMock(IScriptSource.class);
-        IScript script = newMock(IScript.class);
-        
-        PageRenderSupport prs = newPageRenderSupport();
-        
-        String compScript = "/org/apache/tapestry/ComponentEvent.script";
-        Resource compScriptResource = new ClasspathResource(resolver, compScript);
-        
-        ComponentEventConnectionWorker worker = new ComponentEventConnectionWorker();
-        worker.setClassResolver(resolver);
-        worker.setEventInvoker(invoker);
-        worker.setComponentScript(compScript);
-        worker.setEventEngine(engine);
-        worker.setScriptSource(scriptSource);
-        
-        IDirectEvent component = newMock(IDirectEvent.class);
-        IComponentSpecification spec = new ComponentSpecification();
-        
-        IComponent comp1 = newMock(IComponent.class);
-        IComponentSpecification comp1Spec = new ComponentSpecification();
-        
-        IComponent comp2 = newMock(IComponent.class);
-        IComponentSpecification comp2Spec = new ComponentSpecification();
-        
-        IForm form = newMock(IForm.class);
-        IComponentSpecification formSpec = new ComponentSpecification();
-        
-        // now test render
-        spec.addEventListener("comp1", new String[] {"onclick"}, "testMethod", "form1", false, true, false, false);
-        invoker.addEventListener("comp1", spec);
-        invoker.addFormEventListener("form1", spec);
-        
-        spec.addEventListener("comp2", new String[] {"ondoubleclick"}, "clickMethod", "form1", false, true, false, false);
-        invoker.addEventListener("comp2", spec);
-        invoker.addFormEventListener("form1", spec);
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
-        
-        expect(component.getExtendedId()).andReturn("compListener").anyTimes();
-        expect(component.getClientId()).andReturn("compListener").anyTimes();
-        expect(component.getSpecification()).andReturn(spec);
-        
-        // comp1 render
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
-        
-        expect(comp1.getExtendedId()).andReturn("comp1").anyTimes();
-        expect(comp1.getClientId()).andReturn("comp1").anyTimes();
-        
-        expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
-        expect(comp1.getSpecification()).andReturn(comp1Spec).anyTimes();
-        
-        // comp2 render
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
-        
-        expect(comp2.getExtendedId()).andReturn("comp2").anyTimes();
-        expect(comp2.getClientId()).andReturn("comp2").anyTimes();
-        
-        expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
-        
-        expect(comp2.getSpecification()).andReturn(comp2Spec).anyTimes();
-        
-        replay();
-        
-        worker.renderComponent(cycle, component);
-        worker.renderComponent(cycle, comp1);
-        worker.renderComponent(cycle, comp2);
-        
-        verify();
-        
-        assertEquals(worker.getDefferedFormConnections().size(), 1);
-        assertEquals(((List)worker.getDefferedFormConnections().get("form1")).size(), 2);
-        
-        checkOrder(form, false);
-        checkOrder(component, false);
-        checkOrder(comp1, false);
-        checkOrder(comp2, false);
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
-        
-        expect(form.getSpecification()).andReturn(formSpec);
-        
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
-        
-        expect(form.getExtendedId()).andReturn("form1").anyTimes();
-        
-        expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
-        cycle.setAttribute(eq(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1"), isA(List.class));
-        
-        expect(form.getName()).andReturn("form1_0").anyTimes();
-
-        expect(comp1.getSpecification()).andReturn(comp1Spec);
-        expect(comp1.getExtendedId()).andReturn("comp1").anyTimes();
-        
-        expect(comp2.getSpecification()).andReturn(comp2Spec);
-        expect(comp2.getExtendedId()).andReturn("comp2").anyTimes();
-        
-        List formNames = new ArrayList();
-        formNames.add("form1_0");
-        
-        expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(formNames).anyTimes();
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs).anyTimes();
-        
-        expect(scriptSource.getScript(compScriptResource)).andReturn(script);
-        script.execute(eq(form), eq(cycle), eq(prs), isA(Map.class));
-        
-        expect(scriptSource.getScript(compScriptResource)).andReturn(script);
-        script.execute(eq(form), eq(cycle), eq(prs), isA(Map.class));
-        
-        replay();
-        
-        worker.renderComponent(cycle, form);
-        
-        verify();
-    }
-    
-    
-    public void test_Script_Resource()
-    {   
-        ClassResolver resolver = new DefaultClassResolver();
-        IComponentEventInvoker invoker = new org.apache.tapestry.internal.event.impl.ComponentEventInvoker();
-        
-        String compScript = "/org/apache/tapestry/ComponentEvent.script";
-        String widScript = "/org/apache/tapestry/dojo/html/WidgetEvent.script";
-        String elementScript = "/org/apache/tapestry/html/ElementEvent.script";
-        
-        ComponentEventConnectionWorker worker = new ComponentEventConnectionWorker();
-        worker.setClassResolver(resolver);
-        worker.setEventInvoker(invoker);
-        worker.setComponentScript(compScript);
-        worker.setWidgetScript(widScript);
-        worker.setElementScript(elementScript);
-        
-        IDirectEvent component = newMock(IDirectEvent.class);
-        IWidget widget = newMock(IWidget.class);
-        
-        MockControl bodyControl = MockClassControl.createControl(Body.class);
-        Body body = (Body) bodyControl.getMock();
-        
-        assertNotNull(worker.getScript(component));
-        assertEquals(compScript, worker.getScript(component).getPath());
-        
-        assertNotNull(worker.getScript(widget));
-        assertEquals(widScript, worker.getScript(widget).getPath());
-        
-        assertNotNull(worker.getScript(body));
-        assertEquals(compScript, worker.getScript(body).getPath());
-        
-        replay();
-        
-        verify();
-    }
-    
-    public void test_Prerendered_Field()
-    {   
-        ClassResolver resolver = new DefaultClassResolver();
-        
-        IComponentEventInvoker invoker = new org.apache.tapestry.internal.event.impl.ComponentEventInvoker();
-        IEngineService engine = newMock(IEngineService.class);
-        IRequestCycle cycle = newCycle();
-        checkOrder(cycle, false);
-        
-        PageRenderSupport prs = newPageRenderSupport();
-        
-        IScriptSource scriptSource = newMock(IScriptSource.class);
-        
-        ComponentEventConnectionWorker worker = new ComponentEventConnectionWorker();
-        worker.setClassResolver(resolver);
-        worker.setEventInvoker(invoker);
-        worker.setEventEngine(engine);
-        worker.setScriptSource(scriptSource);
-        
-        IDirectEvent component = newMock(IDirectEvent.class);
-        IComponentSpecification spec = new ComponentSpecification();
-        
-        // now test render
-        invoker.addEventListener("comp1", spec);
-        spec.addEventListener("comp1", new String[] {"onclick"}, "testMethod", "form1", false, false, false, false);
-        
-        expect(cycle.isRewinding()).andReturn(false);
-        
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
-        
-        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(component);
-        
-        replay();
-        
-        worker.renderComponent(cycle, component);
-        
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/CookieSourceTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/CookieSourceTest.java
deleted file mode 100644
index 5aadfbf..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/CookieSourceTest.java
+++ /dev/null
@@ -1,239 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.CookieSourceImpl}. 
- */
-@Test
-public class CookieSourceTest extends BaseComponentTestCase
-{
-    // In seconds
-
-    private static final int ONE_WEEK = 7 * 24 * 60 * 60;
-
-    private static class ComparableCookie extends Cookie
-    {
-        public ComparableCookie(String name, String value, int maxAge)
-        {
-            super(name, value);
-            setMaxAge(maxAge);
-        }
-
-        public boolean equals(Object obj)
-        {
-            Cookie c = (Cookie) obj;
-
-            return equals(getName(), c.getName()) && equals(getValue(), c.getValue())
-                    && equals(getPath(), c.getPath()) && getMaxAge() == c.getMaxAge();
-        }
-
-        private boolean equals(Object value, Object other)
-        {
-            return value == other || (value != null && value.equals(other));
-        }
-    }
-
-    private HttpServletRequest newRequest(String[] nameValues)
-    {
-        Cookie[] cookies = null;
-
-        if (nameValues != null)
-        {
-
-            List l = new ArrayList();
-
-            for (int i = 0; i < nameValues.length; i += 2)
-            {
-                String name = nameValues[i];
-                String value = nameValues[i + 1];
-
-                Cookie c = new Cookie(name, value);
-
-                l.add(c);
-            }
-
-            cookies = (Cookie[]) l.toArray(new Cookie[l.size()]);
-        }
-
-        HttpServletRequest request = newHttpRequest();
-
-        expect(request.getCookies()).andReturn(cookies);
-
-        return request;
-    }
-
-    protected HttpServletRequest newHttpRequest()
-    {
-        return newMock(HttpServletRequest.class);
-    }
-
-    private void attempt(String name, String expected, String[] nameValues)
-    {
-        HttpServletRequest request = newRequest(nameValues);
-
-        CookieSourceImpl cs = new CookieSourceImpl();
-
-        cs.setRequest(request);
-
-        replay();
-
-        String actual = cs.readCookieValue(name);
-
-        assertEquals(actual, expected);
-
-        verify();
-    }
-
-    public void test_No_Cookies()
-    {
-        attempt("foo", null, null);
-    }
-
-    public void test_Match()
-    {
-        attempt("fred", "flintstone", 
-                new String[] { "barney", "rubble", "fred", "flintstone" });
-    }
-
-    public void test_No_Match()
-    {
-        attempt("foo", null, new String[] { "bar", "baz" });
-    }
-
-    public void test_Write_Cookie_Domain()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        // Training
-
-        trainGetContextPath(request, "/context");
-        
-        Cookie cookie = new ComparableCookie("foo", "bar", ONE_WEEK);
-        cookie.setPath("/context/");
-        cookie.setDomain("fobar.com");
-        
-        response.addCookie(cookie);
-        
-        replay();
-        
-        CookieSourceImpl cs = new CookieSourceImpl();
-        cs.setRequest(request);
-        cs.setResponse(response);
-        cs.setDefaultMaxAge(ONE_WEEK);
-        
-        cs.writeDomainCookieValue("foo", "bar", "fobar.com", ONE_WEEK);
-
-        verify();
-    }
-
-    public void test_Write_Cookie_With_Max_Age()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        // Training
-
-        trainGetContextPath(request, "/ctx");
-
-        Cookie cookie = new ComparableCookie("foo", "bar", -1);
-        cookie.setPath("/ctx/");
-
-        response.addCookie(cookie);
-
-        replay();
-
-        CookieSourceImpl cs = new CookieSourceImpl();
-        cs.setRequest(request);
-        cs.setResponse(response);
-        cs.setDefaultMaxAge(ONE_WEEK);
-
-        cs.writeCookieValue("foo", "bar", -1);
-
-        verify();
-    }
-
-    public void test_Write_Cookie()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        // Training
-        
-        trainGetContextPath(request, "/context");
-        
-        Cookie cookie = new ComparableCookie("foo", "bar", ONE_WEEK);
-        cookie.setPath("/context/");
-
-        response.addCookie(cookie);
-
-        replay();
-
-        CookieSourceImpl cs = new CookieSourceImpl();
-        cs.setRequest(request);
-        cs.setResponse(response);
-        cs.setDefaultMaxAge(ONE_WEEK);
-
-        cs.writeCookieValue("foo", "bar");
-
-        verify();
-    }
-    
-    private void trainGetContextPath(HttpServletRequest request, String contextPath)
-    {
-        expect(request.getContextPath()).andReturn(contextPath);
-    }
-
-    private HttpServletResponse newResponse()
-    {
-        return newMock(HttpServletResponse.class);
-    }
-
-    public void test_Remove_Cookie()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        // Training
-
-        trainGetContextPath(request, "/context");
-
-        Cookie cookie = new ComparableCookie("foo", null, 0);
-        cookie.setPath("/context/");
-
-        response.addCookie(cookie);
-
-        replay();
-
-        CookieSourceImpl cs = new CookieSourceImpl();
-        cs.setRequest(request);
-        cs.setResponse(response);
-
-        cs.removeCookieValue("foo");
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/DefaultResponseBuilderTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/DefaultResponseBuilderTest.java
deleted file mode 100644
index 8c33c95..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/DefaultResponseBuilderTest.java
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright May 9, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import java.io.CharArrayWriter;
-import java.io.PrintWriter;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.markup.MarkupFilter;
-import org.apache.tapestry.markup.MarkupWriterImpl;
-import org.apache.tapestry.markup.UTFMarkupFilter;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link DefaultResponseBuilder}.
- * 
- * @author jkuhnert
- */
-@SuppressWarnings("cast")
-@Test(sequential=true)
-public class DefaultResponseBuilderTest extends BaseComponentTestCase
-{
-
-    private static CharArrayWriter _writer;
-    
-    private static String LINE_SEPARATOR = (String)java.security.AccessController.doPrivileged(
-            new sun.security.action.GetPropertyAction("line.separator"));
-    
-    private PrintWriter newPrintWriter()
-    {
-        _writer = new CharArrayWriter();
-
-        return new PrintWriter(_writer);
-    }
-
-    @AfterClass(alwaysRun=true)
-    protected void cleanup() throws Exception
-    {
-        _writer = null;
-    }
-
-    private void assertOutput(String expected)
-    {
-        assertEquals(_writer.toString(), expected);
-        
-        _writer.reset();
-    }
-    
-    public void test_Null_Render() 
-    {
-        IRender render = (IRender)newMock(IRender.class);
-        IRequestCycle cycle = (IRequestCycle)newMock(IRequestCycle.class);
-        
-        ResponseBuilder builder = new DefaultResponseBuilder(null);
-        
-        render.render(null, cycle);
-        
-        replay();
-        
-        builder.render(null, render, cycle);
-        
-        verify();
-        
-        assertSame(builder.getWriter(), NullWriter.getSharedInstance());
-    }
-    
-    public void test_Normal_Render()
-    {
-        IRender render = (IRender)newMock(IRender.class);
-        IRequestCycle cycle = (IRequestCycle)newMock(IRequestCycle.class);
-        IMarkupWriter writer = (IMarkupWriter)newMock(IMarkupWriter.class);
-        
-        ResponseBuilder builder = new DefaultResponseBuilder(writer);
-        
-        render.render(writer, cycle);
-        
-        replay();
-        
-        builder.render(null, render, cycle);
-        
-        verify();
-        
-        assertSame(builder.getWriter(), writer);
-    }
-    
-    public void test_Get_Writer_Type()
-    {
-        IMarkupWriter writer = (IMarkupWriter)newMock(IMarkupWriter.class);
-        ResponseBuilder builder = new DefaultResponseBuilder(writer);
-        
-        assertSame(builder.getWriter("test", "type"), writer);
-    }
-    
-    public void test_Allowed_Scripts()
-    {
-        IComponent component = (IComponent)newMock(IComponent.class);
-        ResponseBuilder builder = new DefaultResponseBuilder(null);
-        
-        assertTrue(builder.isBodyScriptAllowed(component));
-        assertTrue(builder.isExternalScriptAllowed(component));
-        assertTrue(builder.isInitializationScriptAllowed(component));
-    }
-    
-    public void test_Write_Body_Script()
-    {
-        MarkupFilter filter = new UTFMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        IRequestCycle cycle = (IRequestCycle)newMock(IRequestCycle.class);
-        
-        replay();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        ResponseBuilder builder = new DefaultResponseBuilder(mw);
-        
-        String bscript = "var e=4;";
-        String imageInit = "image initializations";
-        String preload = "preloadedvarname";
-        
-        verify();
-        replay();
-        
-        builder.beginBodyScript(mw, cycle);
-        
-        assertOutput("<script type=\"text/javascript\"><!--"+LINE_SEPARATOR);
-        
-        builder.writeImageInitializations(mw, imageInit, preload, cycle);
-        
-        assertOutput(LINE_SEPARATOR
-                + "dojo.addOnLoad(function(e) {\n"
-                + preload + " = [];\n"
-                + "if (document.images)\n"
-                + "{\n" + imageInit + "}\n"
-                + "});");
-        
-        builder.writeBodyScript(mw, bscript, cycle);
-        
-        assertOutput(bscript);
-        
-        builder.endBodyScript(mw, cycle);
-        
-        assertOutput(LINE_SEPARATOR + "// --></script>");
-        
-        verify();
-    }
-    
-    public void test_Write_External_Scripts()
-    {
-        MarkupFilter filter = new UTFMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        IRequestCycle cycle = (IRequestCycle)newMock(IRequestCycle.class);
-        
-        replay();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        ResponseBuilder builder = new DefaultResponseBuilder(mw);
-        
-        String script1 = "http://noname/js/package.js";
-        String script2 = "http://noname/js/package.js";
-        
-        verify();
-        replay();
-        
-        builder.writeExternalScript(mw, script1, cycle);
-        
-        assertOutput("<script type=\"text/javascript\" src=\""
-                + script1 + "\"></script>" + LINE_SEPARATOR);
-        
-        builder.writeExternalScript(mw, script2, cycle);
-        
-        assertOutput("<script type=\"text/javascript\" src=\""
-                + script2 + "\"></script>" + LINE_SEPARATOR);
-        
-        verify();
-    }
-    
-    public void test_Write_Initialization_Script()
-    {
-        MarkupFilter filter = new UTFMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        
-        replay();
-        
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        ResponseBuilder builder = new DefaultResponseBuilder(mw);
-        
-        String script = "doThisInInit();";
-        
-        verify();
-        replay();
-        
-        builder.writeInitializationScript(mw, script);
-        
-        assertOutput("<script type=\"text/javascript\"><!--\n"
-                + "dojo.addOnLoad(function(e) {\n"
-                + script 
-                + "});"
-                + "\n// -->"
-                + "</script>");
-        
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java
deleted file mode 100644
index 5c36959..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java
+++ /dev/null
@@ -1,525 +0,0 @@
-// Copyright May 9, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import java.io.CharArrayWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.NestedMarkupWriter;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.RedirectException;
-import org.apache.tapestry.TapestryUtils;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.markup.MarkupFilter;
-import org.apache.tapestry.markup.MarkupWriterImpl;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.markup.UTFMarkupFilter;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.services.RequestLocaleManager;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.web.WebResponse;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.isA;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link DojoAjaxResponseBuilder}.
- *
- * @author jkuhnert
- */
-@SuppressWarnings("cast")
-@Test(sequential=true)
-public class DojoAjaxResponseBuilderTest extends BaseComponentTestCase
-{
-
-    private static CharArrayWriter _writer;
-
-    private PrintWriter newPrintWriter()
-    {
-        _writer = new CharArrayWriter();
-
-        return new PrintWriter(_writer);
-    }
-
-    @AfterClass
-    protected void cleanup() throws Exception
-    {
-        _writer = null;
-    }
-
-    private void assertOutput(String expected)
-    {
-        assertEquals(_writer.toString(), expected);
-
-        _writer.reset();
-    }
-
-    public void test_Null_Render()
-    {
-        IRender render = newMock(IRender.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IMarkupWriter writer = newWriter();
-
-        ResponseBuilder builder = new DojoAjaxResponseBuilder(cycle, writer, null);
-
-        render.render(NullWriter.getSharedInstance(), cycle);
-
-        replay();
-
-        builder.render(writer, render, cycle);
-
-        verify();
-
-        assertSame(builder.getWriter(), writer);
-    }
-
-    public void test_Normal_Render()
-    {
-        IRender render = newMock(IRender.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IMarkupWriter writer = newMock(IMarkupWriter.class);
-
-        ResponseBuilder builder = new DojoAjaxResponseBuilder(cycle, writer, null);
-
-        render.render(NullWriter.getSharedInstance(), cycle);
-
-        replay();
-
-        builder.render(null, render, cycle);
-
-        verify();
-
-        assertSame(builder.getWriter(), writer);
-    }
-
-    public void test_Null_Contains()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IMarkupWriter writer = newWriter();
-
-        ResponseBuilder builder = new DojoAjaxResponseBuilder(cycle, writer, null);
-
-        replay();
-
-        builder.isBodyScriptAllowed(null);
-
-        verify();
-    }
-
-    public void test_Partial_Render()
-    {
-        IRender render = newMock(IRender.class);
-
-        IComponent comp1 = newMock(IComponent.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IMarkupWriter writer = newMock(IMarkupWriter.class);
-        NestedMarkupWriter nested = newMock(NestedMarkupWriter.class);
-
-        Infrastructure infra = newMock(Infrastructure.class);
-
-        List parts = new ArrayList();
-        parts.add("id1");
-
-        DojoAjaxResponseBuilder builder = new DojoAjaxResponseBuilder(cycle, writer, parts);
-
-        render.render(NullWriter.getSharedInstance(), cycle);
-
-        expect(comp1.getClientId()).andReturn("id1").anyTimes();
-        expect(comp1.peekClientId()).andReturn("id1").anyTimes();
-        expect(cycle.getInfrastructure()).andReturn(infra);
-        expect(infra.getOutputEncoding()).andReturn("UTF-8");
-
-        writer.printRaw("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-        writer.printRaw("<!DOCTYPE html "
-                        + "PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" "
-                        + "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\" [" + NEWLINE
-                        + "<!ENTITY nbsp '&#160;'>" + NEWLINE
-                        + "]>" + NEWLINE);
-        writer.printRaw("<ajax-response>");
-
-        expect(writer.getNestedWriter()).andReturn(nested);
-
-        nested.begin("response");
-        nested.attribute("id", "id1");
-        nested.attribute("type", ResponseBuilder.ELEMENT_TYPE);
-
-        comp1.render(nested, cycle);
-
-        replay();
-
-        builder.render(null, render, cycle);
-
-        assertTrue(builder.contains(comp1));
-        assertTrue(IComponent.class.isInstance(comp1));
-
-        builder.render(null, comp1, cycle);
-
-        verify();
-
-        assertSame(builder.getWriter(), writer);
-    }
-
-    public void test_Page_Render()
-    {
-        IPage page = newMock(IPage.class);
-        checkOrder(page, false);
-
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        RequestLocaleManager rlm = newMock(RequestLocaleManager.class);
-
-        MarkupWriterSource mrs = newMock(MarkupWriterSource.class);
-        WebResponse resp = newMock(WebResponse.class);
-        AssetFactory assetFactory = newMock(AssetFactory.class);
-        IEngineService pageService = newEngineService();
-
-        List errorPages = new ArrayList();
-
-        List parts = new ArrayList();
-        parts.add("id1");
-
-        DojoAjaxResponseBuilder builder =
-          new DojoAjaxResponseBuilder(cycle, rlm, mrs, resp, errorPages, assetFactory, "", pageService);
-
-        expect(page.getPageName()).andReturn("RequestPage").anyTimes();
-        expect(cycle.getParameter(ServiceConstants.PAGE)).andReturn("RequestPage").anyTimes();
-        expect(page.peekClientId()).andReturn("pageId");
-
-        expect(cycle.renderStackIterator()).andReturn(Collections.EMPTY_LIST.iterator());
-
-        page.render(NullWriter.getSharedInstance(), cycle);
-
-        replay();
-
-        builder.render(null, page, cycle);
-
-        verify();
-    }
-
-    public void test_New_Page_Render()
-    {
-        IPage page = newMock(IPage.class);
-        checkOrder(page, false);
-
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IMarkupWriter writer = newMock(IMarkupWriter.class);
-        NestedMarkupWriter nwriter = newNestedWriter();
-
-        ILink link = newMock(ILink.class);
-
-        RequestLocaleManager rlm = newMock(RequestLocaleManager.class);
-        MarkupWriterSource mrs = newMock(MarkupWriterSource.class);
-        WebResponse resp = newMock(WebResponse.class);
-        AssetFactory assetFactory = newMock(AssetFactory.class);
-        IEngineService pageService = newEngineService();
-
-        List errorPages = new ArrayList();
-
-        List parts = new ArrayList();
-        parts.add("id1");
-
-        DojoAjaxResponseBuilder builder =  new DojoAjaxResponseBuilder(cycle, rlm, mrs, resp, errorPages, assetFactory, "", pageService);
-
-        builder.setWriter(writer);
-
-        expect(page.getPageName()).andReturn("RequestPage").anyTimes();
-        expect(cycle.getParameter(ServiceConstants.PAGE)).andReturn("anotherPage").anyTimes();
-
-        expect(writer.getNestedWriter()).andReturn(nwriter);
-        nwriter.begin("response");
-        nwriter.attribute("type", ResponseBuilder.PAGE_TYPE);
-
-        expect(pageService.getLink(true, "RequestPage")).andReturn(link);
-        expect(link.getAbsoluteURL()).andReturn("/new/url");
-
-        nwriter.attribute("url", "/new/url");
-
-        replay();
-
-        builder.render(null, page, cycle);
-
-        verify();
-    }
-
-    private static final String NEWLINE = System.getProperty("line.separator");
-
-    public void test_Render_Response_Already_Started()
-      throws IOException
-    {
-        IPage page = newMock(IPage.class);
-        checkOrder(page, false);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        Infrastructure infra = newMock(Infrastructure.class);
-        IMarkupWriter writer = newBufferWriter();
-        NestedMarkupWriter nwriter = newNestedWriter();
-
-        ILink link = newMock(ILink.class);
-        Location l = newLocation();
-
-        RequestLocaleManager rlm = newMock(RequestLocaleManager.class);
-        MarkupWriterSource mrs = newMock(MarkupWriterSource.class);
-        WebResponse resp = newMock(WebResponse.class);
-        AssetFactory assetFactory = newMock(AssetFactory.class);
-        IEngineService pageService = newEngineService();
-
-        List errorPages = new ArrayList();
-
-        List parts = new ArrayList();
-        parts.add("id1");
-
-        DojoAjaxResponseBuilder builder =  new DojoAjaxResponseBuilder(cycle, rlm, mrs, resp, errorPages, assetFactory, "", pageService);
-
-        PrintWriter pw = newPrintWriter();
-
-        rlm.persistLocale();
-        expect(cycle.getInfrastructure()).andReturn(infra).anyTimes();
-        expect(infra.getOutputEncoding()).andReturn(("UTF-8")).anyTimes();
-        expect(cycle.getParameters("updateParts")).andReturn((String[])parts.toArray(new String[parts.size()]));
-        expect(resp.getPrintWriter(isA(ContentType.class))).andReturn(pw);
-        expect(mrs.newMarkupWriter(eq(pw), isA(ContentType.class))).andReturn(writer);
-
-        expect(cycle.getPage()).andReturn(page);
-        expect(page.getLocation()).andReturn(l);
-        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(null);
-        cycle.setAttribute(eq(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE), isA(PageRenderSupport.class));
-
-        cycle.renderPage(builder);
-        // only done to simulate a caught internal stale link / other exception that would cause a new renderPage() request 
-        expectLastCall().andThrow(new RedirectException("redir"));
-
-        cycle.renderPage(builder);
-        cycle.removeAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE);
-
-        replay();
-
-        try {
-
-            builder.renderResponse(cycle);
-            unreachable();
-        } catch (RedirectException e)
-        {
-            IMarkupWriter fakeWriter = builder.getComponentWriter("fakeComp");
-            fakeWriter.beginEmpty("div");
-            fakeWriter.attribute("id", "fakeComp");
-
-            builder.renderResponse(cycle);
-        }
-
-        verify();
-
-        assertBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " +
-                     "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\" [" + NEWLINE +
-                     "<!ENTITY nbsp '&#160;'>" + NEWLINE +
-                     "]>" + NEWLINE +
-                     "<ajax-response></ajax-response>");
-    }
-
-    public void test_Allowed_Scripts()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IComponent comp = newMock(IComponent.class);
-        IMarkupWriter writer = newWriter();
-
-        List parts = new ArrayList();
-        parts.add("comp1");
-
-        ResponseBuilder builder = new DojoAjaxResponseBuilder(cycle, writer, parts);
-
-        expect(comp.getClientId()).andReturn("comp");
-
-        expect(cycle.renderStackIterator()).andReturn(Collections.EMPTY_LIST.iterator());
-
-        expect(comp.getClientId()).andReturn("comp1");
-        expect(comp.getClientId()).andReturn("comp");
-
-        expect(cycle.renderStackIterator()).andReturn(Collections.EMPTY_LIST.iterator());
-
-        replay();
-
-        assertFalse(builder.isBodyScriptAllowed(comp));
-        assertTrue(builder.isExternalScriptAllowed(comp));
-        assertFalse(builder.isInitializationScriptAllowed(comp));
-
-        verify();
-    }
-
-    public void test_Script_Contains_Stack()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IComponent comp = newMock(IComponent.class);
-        checkOrder(comp, false);
-
-        IMarkupWriter writer = newWriter();
-
-        List parts = new ArrayList();
-        parts.add("comp1");
-
-        List stack = new ArrayList();
-        stack.add(comp);
-
-        ResponseBuilder builder = new DojoAjaxResponseBuilder(cycle, writer, parts);
-
-        expect(comp.getClientId()).andReturn("comp").anyTimes();
-
-        expect(cycle.renderStackIterator()).andReturn(stack.iterator()).anyTimes();
-
-        replay();
-
-        assertFalse(builder.isBodyScriptAllowed(comp));
-        assertFalse(builder.isExternalScriptAllowed(comp));
-        assertFalse(builder.isInitializationScriptAllowed(comp));
-
-        verify();
-    }
-
-    public void test_Write_Body_Script()
-    {
-        MarkupFilter filter = new UTFMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        Infrastructure inf = newMock(Infrastructure.class);
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        DojoAjaxResponseBuilder builder = new DojoAjaxResponseBuilder(cycle, mw, null);
-
-        String bscript = "var e=4;";
-        String imageInit = "image initializations";
-        String preload = "preloadedvarname";
-
-        verify();
-
-        expect(cycle.getInfrastructure()).andReturn(inf);
-        expect(inf.getOutputEncoding()).andReturn("UTF-8");
-
-        replay();
-
-        builder.beginResponse();
-        builder.beginBodyScript(mw, cycle);
-        builder.writeImageInitializations(mw, imageInit, preload, cycle);
-        builder.writeBodyScript(mw, bscript, cycle);
-        builder.endBodyScript(mw, cycle);
-        builder.endResponse();
-
-        assertOutput("<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\" [" + NEWLINE +
-                     "<!ENTITY nbsp \'&#160;\'>" + NEWLINE +
-                     "]>" + NEWLINE +
-                     "<ajax-response><response id=\"bodyscript\" type=\"script\"><script>" + NEWLINE +
-                     "//<![CDATA[" + NEWLINE +
-                     NEWLINE +
-                     "preloadedvarname = [];" + NEWLINE +
-                     "if (document.images) {" + NEWLINE +
-                     "image initializations}" + NEWLINE +
-                     "var e=4;" + NEWLINE +
-                     "//]]>" + NEWLINE +
-                     "</script></response></ajax-response>");
-
-        verify();
-    }
-
-    public void test_Write_External_Scripts()
-    {
-        MarkupFilter filter = new UTFMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        Infrastructure inf = newMock(Infrastructure.class);
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        DojoAjaxResponseBuilder builder = new DojoAjaxResponseBuilder(cycle, mw, null);
-
-        String script1 = "http://noname/js/package.js";
-        String script2 = "http://noname/js/package2.js";
-
-        verify();
-
-        expect(cycle.getInfrastructure()).andReturn(inf);
-        expect(inf.getOutputEncoding()).andReturn("UTF-8");
-
-        replay();
-
-        builder.beginResponse();
-        builder.writeExternalScript(mw, script1, cycle);
-        builder.writeExternalScript(mw, script2, cycle);
-        builder.endResponse();
-
-        assertOutput("<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\" [" + NEWLINE +
-                     "<!ENTITY nbsp \'&#160;\'>" + NEWLINE +
-                     "]>" + NEWLINE +
-                     "<ajax-response><response id=\"includescript\" type=\"script\">"
-                     + "<include url=\"http://noname/js/package.js\" />"
-                     + "<include url=\"http://noname/js/package2.js\" /></response></ajax-response>");
-
-        verify();
-    }
-
-    public void test_Write_Initialization_Script()
-    {
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        MarkupFilter filter = new UTFMarkupFilter();
-        PrintWriter writer = newPrintWriter();
-        Infrastructure inf = newMock(Infrastructure.class);
-
-        replay();
-
-        IMarkupWriter mw = new MarkupWriterImpl("text/html", writer, filter);
-        DojoAjaxResponseBuilder builder = new DojoAjaxResponseBuilder(cycle, mw, null);
-
-        String script = "doThisInInit();";
-
-        verify();
-
-        expect(cycle.getInfrastructure()).andReturn(inf);
-        expect(inf.getOutputEncoding()).andReturn("UTF-8");
-
-        replay();
-
-        builder.beginResponse();
-        builder.writeInitializationScript(mw, script);
-        builder.endResponse();
-
-        assertOutput("<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\" [" + NEWLINE +
-                     "<!ENTITY nbsp \'&#160;\'>" + NEWLINE +
-                     "]>" + NEWLINE +
-                     "<ajax-response><response id=\"initializationscript\" type=\"script\"><script>" + NEWLINE +
-                     "//<![CDATA[" + NEWLINE +
-                     "doThisInInit();" + NEWLINE +
-                     "//]]>" + NEWLINE +
-                     "</script></response></ajax-response>");
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineFactoryTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineFactoryTest.java
deleted file mode 100644
index 59e5363..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineFactoryTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Locale;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.engine.AbstractEngine;
-import org.apache.tapestry.engine.BaseEngine;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.EngineFactoryImpl}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class EngineFactoryTest extends BaseComponentTestCase
-{
-    public void testUseDefault()
-    {
-        IApplicationSpecification spec = newAppSpec();
-
-        // Training
-
-        trainGetEngineClassName(spec, null);
-
-        EngineFactoryImpl f = new EngineFactoryImpl();
-
-        f.setApplicationSpecification(spec);
-        f.setClassResolver(new DefaultClassResolver());
-        f.setDefaultEngineClassName(BaseEngine.class.getName());
-
-        replay();
-
-        f.initializeService();
-
-        IEngine result = f.constructNewEngineInstance(Locale.CANADA_FRENCH);
-
-        assertTrue(result instanceof BaseEngine);
-        assertEquals(Locale.CANADA_FRENCH, result.getLocale());
-
-        verify();
-    }
-
-    private void trainGetEngineClassName(IApplicationSpecification spec, String engineClassName)
-    {
-        expect(spec.getEngineClassName()).andReturn(engineClassName);
-    }
-
-    private IApplicationSpecification newAppSpec()
-    {
-        return newMock(IApplicationSpecification.class);
-    }
-
-    public void testDefinedInSpec()
-    {
-        IApplicationSpecification spec = newAppSpec();
-
-        trainGetEngineClassName(spec, EngineFixture.class.getName());
-
-        EngineFactoryImpl f = new EngineFactoryImpl();
-
-        f.setApplicationSpecification(spec);
-        f.setClassResolver(new DefaultClassResolver());
-
-        replay();
-
-        f.initializeService();
-
-        IEngine result = f.constructNewEngineInstance(Locale.CHINESE);
-
-        assertTrue(result instanceof EngineFixture);
-        assertEquals(Locale.CHINESE, result.getLocale());
-
-        verify();
-    }
-
-    public void testUnableToInstantiate()
-    {
-        IApplicationSpecification spec = newAppSpec();
-
-        // Training
-
-        trainGetEngineClassName(spec, AbstractEngine.class.getName());
-
-        EngineFactoryImpl f = new EngineFactoryImpl();
-
-        f.setApplicationSpecification(spec);
-        f.setClassResolver(new DefaultClassResolver());
-
-        replay();
-
-        f.initializeService();
-
-        try
-        {
-            f.constructNewEngineInstance(Locale.CHINESE);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertExceptionSubstring(
-                    ex,
-                    "Unable to instantiate engine as instance of class org.apache.tapestry.engine.AbstractEngine");
-        }
-
-        verify();
-    }
-
-    public void testInvalidClass()
-    {
-        IApplicationSpecification spec = newAppSpec();
-
-        trainGetEngineClassName(spec, "foo.XyzzYx");
-
-        ErrorLog log = newMock(ErrorLog.class);
-
-        log.error("Engine class 'foo.XyzzYx' not found.", null, null);
-
-        EngineFactoryImpl f = new EngineFactoryImpl();
-
-        f.setApplicationSpecification(spec);
-        f.setClassResolver(new DefaultClassResolver());
-        f.setErrorLog(log);
-        f.setDefaultEngineClassName(BaseEngine.class.getName());
-
-        replay();
-
-        f.initializeService();
-
-        IEngine result = f.constructNewEngineInstance(Locale.CANADA_FRENCH);
-
-        assertTrue(result instanceof BaseEngine);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineFixture.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineFixture.java
deleted file mode 100644
index 245851a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineFixture.java
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.Collection;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.AbstractEngine;
-import org.apache.tapestry.engine.IPageRecorder;
-
-/**
- * Used by {@link org.apache.tapestry.services.impl.EngineFactoryTest}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class EngineFixture extends AbstractEngine
-{
-
-    protected void cleanupAfterRequest(IRequestCycle cycle)
-    {
-
-    }
-
-    public Collection getActivePageNames()
-    {
-        return null;
-    }
-
-    public IPageRecorder getPageRecorder(String pageName, IRequestCycle cycle)
-    {
-        return null;
-    }
-
-    public void forgetPage(String name)
-    {
-
-    }
-
-    public IPageRecorder createPageRecorder(String pageName, IRequestCycle cycle)
-    {
-        return null;
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineServiceInnerProxyTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineServiceInnerProxyTest.java
deleted file mode 100644
index efeb626..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineServiceInnerProxyTest.java
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.EngineServiceInnerProxy}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class EngineServiceInnerProxyTest extends AbstractEngineServiceProxyTestCase
-{
-    private EngineServiceSource newSource(String name, IEngineService service)
-    {
-        EngineServiceSource source = newSource();
-
-        expect(source.resolveEngineService(name)).andReturn(service);
-
-        return source;
-    }
-
-    public void testGetName()
-    {
-        EngineServiceOuterProxy outer = new EngineServiceOuterProxy("Outer");
-        EngineServiceSource source = newSource();
-
-        replay();
-
-        EngineServiceInnerProxy proxy = new EngineServiceInnerProxy("Inner", outer, source);
-
-        assertEquals("Inner", proxy.getName());
-        assertEquals("<InnerProxy for engine service 'Inner'>", proxy.toString());
-
-        verify();
-    }
-
-    protected EngineServiceSource newSource()
-    {
-        return newMock(EngineServiceSource.class);
-    }
-
-    public void testGetLinkNonPost()
-    {
-        ILink link = newLink();
-
-        IEngineService service = newEngineService();
-
-        Object parameter = new Object();
-        
-        EngineServiceSource source = newSource("fred", service);
-
-        trainGetLink(service, false, parameter, link);
-        
-        replay();
-
-        EngineServiceOuterProxy outer = new EngineServiceOuterProxy("fred");
-        EngineServiceInnerProxy inner = new EngineServiceInnerProxy("fred", outer, source);
-
-        outer.installDelegate(inner);
-
-        assertSame(link, outer.getLink(false, parameter));
-
-        assertSame(service, outer.getDelegate());
-
-        verify();
-    }
-
-    public void testGetLinkPost()
-    {
-        ILink link = newLink();
-
-        IEngineService service = newEngineService();
-
-        Object parameter = new Object();
-
-        EngineServiceSource source = newSource("fred", service);
-        
-        trainGetLink(service, true, parameter, link);
-        
-        replay();
-
-        EngineServiceOuterProxy outer = new EngineServiceOuterProxy("fred");
-        EngineServiceInnerProxy inner = new EngineServiceInnerProxy("fred", outer, source);
-
-        outer.installDelegate(inner);
-
-        assertSame(link, outer.getLink(true, parameter));
-
-        assertSame(service, outer.getDelegate());
-
-        verify();
-    }
-    public void testService() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        IEngineService service = newEngineService();
-        
-        EngineServiceSource source = newSource("fred", service);
-        
-        service.service(cycle);
-        
-        replay();
-
-        EngineServiceOuterProxy outer = new EngineServiceOuterProxy("fred");
-        EngineServiceInnerProxy inner = new EngineServiceInnerProxy("fred", outer, source);
-
-        outer.installDelegate(inner);
-
-        outer.service(cycle);
-
-        assertSame(service, outer.getDelegate());
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineServiceOuterProxyTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineServiceOuterProxyTest.java
deleted file mode 100644
index 6663f12..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/EngineServiceOuterProxyTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.EngineServiceOuterProxy}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential = true)
-public class EngineServiceOuterProxyTest extends AbstractEngineServiceProxyTestCase
-{
-    public void testToString()
-    {
-        IEngineService s = new EngineServiceOuterProxy("fred");
-
-        assertEquals("<OuterProxy for engine service 'fred'>", s.toString());
-    }
-
-    public void testGetName()
-    {
-        EngineServiceOuterProxy proxy = new EngineServiceOuterProxy("Fred");
-
-        assertEquals("Fred", proxy.getName());
-    }
-
-    public void testService() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        IEngineService delegate = newEngineService();
-
-        delegate.service(cycle);
-
-        replay();
-
-        EngineServiceOuterProxy proxy = new EngineServiceOuterProxy("xxx");
-        proxy.installDelegate(delegate);
-
-        assertSame(delegate, proxy.getDelegate());
-
-        proxy.service(cycle);
-
-        verify();
-    }
-
-    public void testGetLink() throws Exception
-    {
-        IEngineService delegate = newEngineService();
-        ILink link = newLink();
-        Object parameter = new Object();
-
-        trainGetLink(delegate, false, parameter, link);
-
-        replay();
-
-        EngineServiceOuterProxy proxy = new EngineServiceOuterProxy("xxx");
-        proxy.installDelegate(delegate);
-
-        assertSame(link, proxy.getLink(false, parameter));
-
-        verify();
-
-        trainGetLink(delegate, true, parameter, link);
-
-        replay();
-
-        assertSame(link, proxy.getLink(true, parameter));
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java
deleted file mode 100644
index c0401dc..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java
+++ /dev/null
@@ -1,334 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.engine.ServiceEncoder;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.engine.encoders.PageServiceEncoder;
-import org.apache.tapestry.record.PropertyPersistenceStrategy;
-import org.apache.tapestry.record.PropertyPersistenceStrategySource;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.io.DataSqueezerUtil;
-import org.apache.tapestry.web.WebRequest;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.*;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.LinkFactoryImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class LinkFactoryTest extends BaseComponentTestCase
-{
-    private ErrorLog newErrorLog()
-    {
-        return newMock(ErrorLog.class);
-    }
-
-    private static class NoopEncoder implements ServiceEncoder
-    {
-        public void decode(ServiceEncoding encoding)
-        {
-            //
-        }
-
-        public void encode(ServiceEncoding encoding)
-        {
-            //
-        }
-    }
-
-    private static class MockSource implements PropertyPersistenceStrategySource
-    {
-
-        public PropertyPersistenceStrategy getStrategy(String name)
-        {
-            return null;
-        }
-
-        public Collection getAllStoredChanges(String pageName)
-        {
-            return null;
-        }
-
-        public void discardAllStoredChanged(String pageName)
-        {
-        }
-
-        public void addParametersForPersistentProperties(ServiceEncoding encoding, boolean post)
-        {
-            encoding.setParameterValue("foo", "bar");
-        }
-
-    }
-
-    private ServiceEncoderContribution newContribution(String id, ServiceEncoder encoder)
-    {
-        ServiceEncoderContribution result = new ServiceEncoderContribution();
-
-        result.setId(id);
-        result.setEncoder(encoder);
-
-        return result;
-    }
-
-    private IEngine newEngine()
-    {
-        return newMock(IEngine.class);
-    }
-
-    private void trainGetOutputEncoding(IEngine engine, String outputEncoding)
-    {
-        expect(engine.getOutputEncoding()).andReturn(outputEncoding);
-    }
-
-    protected WebRequest newRequest(String contextPath)
-    {
-        WebRequest request = newRequest();
-        checkOrder(request, false);
-        
-        expect(request.getContextPath()).andReturn(contextPath).anyTimes();
-
-        return request;
-    }
-
-    public void test_No_Encoders()
-    {
-        ErrorLog log = newErrorLog();
-        WebRequest request = newRequest("/context");
-        IEngine engine = newEngine();
-        IRequestCycle cycle = newCycle();
-        IEngineService service = newService("myservice");
-
-        trainGetEngine(cycle, engine);
-        trainGetOutputEncoding(engine, "utf-8");
-        
-        replay();
-
-        LinkFactoryImpl lf = new LinkFactoryImpl();
-
-        lf.setContributions(Collections.EMPTY_LIST);
-        lf.setErrorLog(log);
-        lf.setServletPath("/app");
-        lf.setRequest(request);
-        lf.setRequestCycle(cycle);
-
-        lf.initializeService();
-
-        Map parameters = new HashMap();
-
-        ILink link = lf.constructLink(service, false, parameters, false);
-
-        assertEquals("/context/app?service=myservice", link.getURL());
-        
-        verify();
-    }
-
-    private IEngineService newService(String name)
-    {
-        IEngineService service = newMock(IEngineService.class);
-
-        expect(service.getName()).andReturn(name);
-
-        return service;
-    }
-
-    public void test_Stateful_Request()
-    {
-        ErrorLog log = newErrorLog();
-        WebRequest request = newRequest("/context");
-        IEngine engine = newEngine();
-        IEngineService service = newService("myservice");
-        IRequestCycle cycle = newCycle();
-
-        trainGetEngine(cycle, engine);
-        trainGetOutputEncoding(engine, "utf-8");
-        trainEncodeURL(cycle, "/context/app?foo=bar&service=myservice", "/context/app?foo=bar&service=myservice&jsessionid=124");
-        
-        replay();
-
-        LinkFactoryImpl lf = new LinkFactoryImpl();
-
-        lf.setContributions(Collections.EMPTY_LIST);
-        lf.setErrorLog(log);
-        lf.setServletPath("/app");
-        lf.setRequest(request);
-        lf.setPersistenceStrategySource(new MockSource());
-        lf.setRequestCycle(cycle);
-        
-        lf.initializeService();
-        
-        Map parameters = new HashMap();
-        
-        ILink link = lf.constructLink(service, false, parameters, true);
-        
-        assertEquals("/context/app?foo=bar&service=myservice&jsessionid=124", link.getURL());
-
-        verify();
-    }
-
-    public void test_Noop_Encoders()
-    {
-        WebRequest request = newRequest("/context");
-        IRequestCycle cycle = newCycle();
-        ErrorLog log = newErrorLog();
-        IEngine engine = newEngine();
-        IEngineService service = newService("myservice");
-
-        trainGetEngine(cycle, engine);
-        trainGetOutputEncoding(engine, "utf-8");
-        
-        replay();
-
-        List l = new ArrayList();
-        l.add(newContribution("fred", new NoopEncoder()));
-        l.add(newContribution("barney", new NoopEncoder()));
-
-        LinkFactoryImpl lf = new LinkFactoryImpl();
-
-        lf.setContributions(l);
-        lf.setErrorLog(log);
-        lf.setServletPath("/app");
-        lf.setRequest(request);
-        lf.setRequestCycle(cycle);
-
-        lf.initializeService();
-
-        Map parameters = new HashMap();
-
-        ILink link = lf.constructLink(service, false, parameters, false);
-
-        assertEquals("/context/app?service=myservice", link.getURL());
-        
-        verify();
-    }
-
-    public void test_Active_Encoder()
-    {
-        WebRequest request = newRequest("/context");
-        IRequestCycle cycle = newCycle();
-        ErrorLog log = newErrorLog();
-        IEngineService service = newService("page");
-        IEngine engine = newEngine();
-
-        trainGetEngine(cycle, engine);
-        trainGetOutputEncoding(engine, "utf-8");
-
-        replay();
-
-        PageServiceEncoder e = new PageServiceEncoder();
-        e.setServiceName("page");
-        e.setExtension("html");
-
-        List l = Collections.singletonList(newContribution("encoder", e));
-
-        LinkFactoryImpl lf = new LinkFactoryImpl();
-
-        lf.setContributions(l);
-        lf.setErrorLog(log);
-        lf.setServletPath("/app");
-        lf.setRequest(request);
-        lf.setRequestCycle(cycle);
-
-        lf.initializeService();
-
-        Map parameters = new HashMap();
-        parameters.put(ServiceConstants.PAGE, "Barney");
-
-        ILink link = lf.constructLink(service, false, parameters, false);
-
-        assertEquals("/context/Barney.html", link.getURL());
-
-        verify();
-    }
-
-    public void test_Service_Name_Is_Null()
-    {
-        IEngineService service = newService(null);
-
-        Map parameters = new HashMap();
-
-        replay();
-
-        LinkFactory lf = new LinkFactoryImpl();
-
-        try
-        {
-            lf.constructLink(service, false, parameters, true);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(ImplMessages.serviceNameIsNull(), ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void test_With_Service_Parameters()
-    {
-        WebRequest request = newRequest("/context");
-        IRequestCycle cycle = newCycle();
-        ErrorLog log = newErrorLog();
-        IEngineService service = newService("external");
-        IEngine engine = newEngine();
-
-        trainGetEngine(cycle, engine);
-        trainGetOutputEncoding(engine, "utf-8");
-
-        replay();
-
-        PageServiceEncoder e = new PageServiceEncoder();
-        e.setServiceName("external");
-        e.setExtension("ext");
-
-        List l = Collections.singletonList(newContribution("encoder", e));
-
-        LinkFactoryImpl lf = new LinkFactoryImpl();
-
-        lf.setContributions(l);
-        lf.setErrorLog(log);
-        lf.setServletPath("/app");
-        lf.setDataSqueezer(DataSqueezerUtil.createUnitTestSqueezer());
-        lf.setRequest(request);
-        lf.setRequestCycle(cycle);
-
-        lf.initializeService();
-
-        Map parameters = new HashMap();
-        parameters.put(ServiceConstants.PAGE, "Barney");
-        parameters.put(ServiceConstants.PARAMETER, new Object[]
-        { Boolean.TRUE });
-
-        ILink link = lf.constructLink(service, false, parameters, false);
-
-        assertEquals("/context/Barney.ext?sp=T", link.getURL());
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/ParseApp.application b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/ParseApp.application
deleted file mode 100644
index 73219e0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/ParseApp.application
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!DOCTYPE application
-      PUBLIC "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-      "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-
-<application name="ParseApp"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/PrototypeResponseBuilderTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/PrototypeResponseBuilderTest.java
deleted file mode 100644
index 01cf445..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/PrototypeResponseBuilderTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.apache.tapestry.services.impl;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.services.ResponseBuilder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Tests functionality of {@link PrototypeResponseBuilder}. 
- */
-@Test
-public class PrototypeResponseBuilderTest extends BaseComponentTestCase {
-
-    public void test_Null_Writer_Render()
-    {
-        IRender render = newMock(IRender.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IMarkupWriter writer = newBufferWriter();
-
-        ResponseBuilder builder = new PrototypeResponseBuilder(cycle, writer, null);
-
-        render.render(NullWriter.getSharedInstance(), cycle);
-
-        replay();
-
-        builder.render(writer, render, cycle);
-
-        verify();
-
-        assertSame(builder.getWriter(), writer);
-        assertBuffer("");
-    }
-
-    public void test_Partial_Render()
-    {
-        IRender render = newMock(IRender.class);
-        IComponent comp1 = newMock(IComponent.class);
-        IRequestCycle cycle = newMock(IRequestCycle.class);
-        IMarkupWriter writer = newMock(IMarkupWriter.class);
-        NestedMarkupWriter nested = newMock(NestedMarkupWriter.class);
-
-        List parts = new ArrayList();
-        parts.add("id1");
-
-        PrototypeResponseBuilder builder = new PrototypeResponseBuilder(cycle, writer, parts);
-
-        render.render(NullWriter.getSharedInstance(), cycle);
-
-        expect(comp1.getClientId()).andReturn("id1").anyTimes();
-        expect(comp1.peekClientId()).andReturn("id1").anyTimes();        
-
-        expect(writer.getNestedWriter()).andReturn(nested);
-        
-        comp1.render(nested, cycle);
-
-        replay();
-
-        builder.render(null, render, cycle);
-
-        assertTrue(builder.contains(comp1));
-        assertTrue(IComponent.class.isInstance(comp1));
-
-        builder.render(null, comp1, cycle);
-
-        verify();
-
-        assertSame(builder.getWriter(), writer);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/ServletFixture.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/ServletFixture.java
deleted file mode 100644
index 77776a3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/ServletFixture.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import javax.servlet.http.HttpServlet;
-
-/**
- * Used by a number of tests that require a servlet (that stands in for the real application
- * servlet).
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class ServletFixture extends HttpServlet
-{
-	private static final long serialVersionUID = -1257724425994536494L;
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestAbsoluteURLBuilder.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestAbsoluteURLBuilder.java
deleted file mode 100644
index ecaec34..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestAbsoluteURLBuilder.java
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.services.AbsoluteURLBuilder;
-import org.apache.tapestry.web.WebRequest;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.AbsoluteURLBuilderImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestAbsoluteURLBuilder extends TapestryTestCase
-{
-    private void attempt(String expected, String URI, String scheme, String server, int port)
-    {
-        AbsoluteURLBuilder b = new AbsoluteURLBuilderImpl();
-
-        String actual = b.constructURL(URI, scheme, server, port);
-
-        assertEquals(expected, actual);
-    }
-
-    private void attemptDefault(String expected, String URI, String scheme, String server, int port)
-    {
-        WebRequest request = newMock(WebRequest.class);
-
-        expect(request.getScheme()).andReturn(scheme);
-
-        expect(request.getServerName()).andReturn(server);
-
-        expect(request.getServerPort()).andReturn(port);
-
-        replay();
-
-        AbsoluteURLBuilderImpl b = new AbsoluteURLBuilderImpl();
-        b.setRequest(request);
-
-        String actual = b.constructURL(URI);
-
-        assertEquals(expected, actual);
-
-        verify();
-    }
-
-    public void testURIIncludesServer()
-    {
-        attempt("https://foo/bar/baz", "//foo/bar/baz", "https", "SERVER", 100);
-    }
-
-    public void testPortZero()
-    {
-        attempt("http://foo/bar/baz", "/bar/baz", "http", "foo", 0);
-    }
-
-    public void testNoLeadingSlash()
-    {
-        attempt("http://foo/bar/baz", "bar/baz", "http", "foo", 0);
-    }
-
-    public void testPortNonZero()
-    {
-        attempt("http://foo.com:1024/bar/baz", "/bar/baz", "http", "foo.com", 1024);
-    }
-
-    public void testDefaultsForPort80()
-    {
-        attemptDefault("http://foo/bar/baz", "/bar/baz", "http", "foo", 80);
-    }
-
-    public void testDefault()
-    {
-        attemptDefault("http://foo:8080/bar/baz", "/bar/baz", "http", "foo", 8080);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestApplicationSpecificationInitializer.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestApplicationSpecificationInitializer.java
deleted file mode 100644
index 29cfe92..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestApplicationSpecificationInitializer.java
+++ /dev/null
@@ -1,401 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.*;
-
-import java.net.URL;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.Registry;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.impl.RegistryBuilder;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.hivemind.util.ContextResource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.parse.ISpecificationParser;
-import org.apache.tapestry.services.ApplicationGlobals;
-import org.apache.tapestry.services.ApplicationInitializer;
-import org.apache.tapestry.spec.ApplicationSpecification;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.testng.annotations.Test;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServlet;
-
-/**
- * Tests for the {@link org.apache.tapestry.services.impl.ApplicationSpecificationInitializer}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestApplicationSpecificationInitializer extends BaseComponentTestCase
-{   
-    
-    public void test_On_Classpath() throws Exception
-    {
-        DefaultClassResolver cr = new DefaultClassResolver();
-
-        Resource appSpecResource = new ClasspathResource(cr, "/foo/OnClasspath.application");
-
-        ApplicationSpecificationInitializer i = new ApplicationSpecificationInitializer();
-
-        Log log = newMock(Log.class);
-
-        i.setLog(log);
-
-        ClasspathResourceFactoryImpl cf = new ClasspathResourceFactoryImpl();
-        cf.setClassResolver(cr);
-
-        i.setClasspathResourceFactory(cf);
-        
-        HttpServlet servlet = new ServletFixture();
-        
-        ServletConfig config = newMock(ServletConfig.class);
-        
-        IApplicationSpecification as = new ApplicationSpecification();
-        
-        ISpecificationParser parser = newMock(ISpecificationParser.class);
-        
-        i.setParser(parser);
-        
-        expect(config.getInitParameter(ApplicationSpecificationInitializer.APP_SPEC_PATH_PARAM))
-        .andReturn(appSpecResource.getPath());
-        
-        expect(parser.parseApplicationSpecification(appSpecResource)).andReturn(as);
-        
-        ApplicationGlobals ag = new ApplicationGlobalsImpl();
-
-        i.setGlobals(ag);
-
-        replay();
-
-        servlet.init(config);
-
-        // The real ApplicationServlet will build a Registry and, indirectly, invoke this.
-
-        i.initialize(servlet);
-
-        assertNotNull(ag.getActivator());
-        assertSame(as, ag.getSpecification());
-
-        verify();
-    }
-
-    public void test_Default_On_Classpath() throws Exception
-    {
-        DefaultClassResolver cr = new DefaultClassResolver();
-        Resource appSpecResource = new ClasspathResource(cr, "Fred.application");
-        
-        ApplicationSpecificationInitializer i = new ApplicationSpecificationInitializer();
-        Log log = newMock(Log.class);
-        i.setLog(log);
-        
-        ServletContext context = newMock(ServletContext.class);
-        
-        ClasspathResourceFactoryImpl cf = new ClasspathResourceFactoryImpl();
-        cf.setClassResolver(cr);
-
-        i.setClasspathResourceFactory(cf);
-        
-        HttpServlet servlet = new ServletFixture();
-        
-        ServletConfig config = newMock(ServletConfig.class);
-        checkOrder(config, false);
-        
-        IApplicationSpecification as = new ApplicationSpecification();
-        
-        ISpecificationParser parser = newMock(ISpecificationParser.class);
-        
-        i.setParser(parser);
-        
-        expect(config.getInitParameter(ApplicationSpecificationInitializer.APP_SPEC_PATH_PARAM)).andReturn(null);
-        
-        expect(config.getServletContext()).andReturn(context);
-        
-        expect(config.getServletName()).andReturn("Fred").anyTimes();
-        
-        // begin testing finding spec
-        
-        expect(log.isDebugEnabled()).andReturn(true);
-        
-        Resource r = new ContextResource(context, "/WEB-INF/Fred/Fred.application");
-        
-        log.debug("Checking for existence of " + r);
-        
-        expect(context.getResource(r.getPath())).andReturn(null);
-        
-        expect(log.isDebugEnabled()).andReturn(true);
-        
-        r = new ContextResource(context, "/WEB-INF/Fred.application");
-        
-        log.debug("Checking for existence of " + r);
-        
-        expect(context.getResource(r.getPath())).andReturn(null);
-        
-        expect(parser.parseApplicationSpecification(appSpecResource)).andReturn(as);
-        
-        ApplicationGlobals ag = new ApplicationGlobalsImpl();
-
-        i.setGlobals(ag);
-
-        replay();
-        
-        servlet.init(config);
-        
-        // The real ApplicationServlet will build a Registry and, indirectly, invoke this.
-        
-        i.initialize(servlet);
-        
-        assertNotNull(ag.getActivator());
-        assertSame(as, ag.getSpecification());
-
-        verify();
-    }
-    
-    public void test_In_App_Context_Folder() throws Exception
-    {
-        DefaultClassResolver cr = new DefaultClassResolver();
-
-        ApplicationSpecificationInitializer i = new ApplicationSpecificationInitializer();
-        
-        ServletContext context = newMock(ServletContext.class);
-        Log log = newLog();
-
-        i.setLog(log);
-        
-        ClasspathResourceFactoryImpl cf = new ClasspathResourceFactoryImpl();
-        cf.setClassResolver(cr);
-        
-        i.setClasspathResourceFactory(cf);
-        
-        HttpServlet servlet = new ServletFixture();
-        
-        ServletConfig config = newMock(ServletConfig.class);
-        
-        expect(config.getInitParameter(ApplicationSpecificationInitializer.APP_SPEC_PATH_PARAM))
-        .andReturn(null);
-        
-        expect(config.getServletContext()).andReturn(context);
-
-        expect(config.getServletName()).andReturn("fred");
-
-        expect(log.isDebugEnabled()).andReturn(true);
-
-        Resource r = new ContextResource(context, "/WEB-INF/fred/fred.application");
-
-        log.debug("Checking for existence of " + r);
-
-        expect(context.getResource(r.getPath()))
-        .andReturn(new URL("file:/context" + r.getPath()));
-
-        log.debug("Found " + r);
-
-        IApplicationSpecification as = new ApplicationSpecification();
-        
-        ISpecificationParser parser = newMock(ISpecificationParser.class);
-
-        i.setParser(parser);
-
-        expect(parser.parseApplicationSpecification(r)).andReturn(as);
-
-        ApplicationGlobals ag = new ApplicationGlobalsImpl();
-
-        i.setGlobals(ag);
-
-        replay();
-
-        servlet.init(config);
-
-        // The real ApplicationServlet will build a Registry and, indirectly, invoke this.
-
-        i.initialize(servlet);
-
-        verify();
-    }
-
-    public void test_In_Web_Inf_Folder() throws Exception
-    {
-        DefaultClassResolver cr = new DefaultClassResolver();
-
-        ApplicationSpecificationInitializer i = new ApplicationSpecificationInitializer();
-
-        ServletContext context = newMock(ServletContext.class);
-        Log log = newLog();
-
-        i.setLog(log);
-
-        ClasspathResourceFactoryImpl cf = new ClasspathResourceFactoryImpl();
-        cf.setClassResolver(cr);
-
-        i.setClasspathResourceFactory(cf);
-
-        HttpServlet servlet = new ServletFixture();
-
-        ServletConfig config = newMock(ServletConfig.class);
-        
-        expect(config.getInitParameter(ApplicationSpecificationInitializer.APP_SPEC_PATH_PARAM))
-        .andReturn(null);
-
-        expect(config.getServletContext()).andReturn(context);
-
-        expect(config.getServletName()).andReturn("barney");
-
-        expect(log.isDebugEnabled()).andReturn(false);
-
-        Resource r = new ContextResource(context, "/WEB-INF/barney.application");
-
-        expect(context.getResource("/WEB-INF/barney/barney.application")).andReturn(null);
-
-        expect(log.isDebugEnabled()).andReturn(false);
-
-        expect(context.getResource(r.getPath()))
-        .andReturn(new URL("file:/context" + r.getPath()));
-
-        log.debug("Found " + r);
-
-        IApplicationSpecification as = new ApplicationSpecification();
-        
-        ISpecificationParser parser = newMock(ISpecificationParser.class);
-
-        i.setParser(parser);
-
-        expect(parser.parseApplicationSpecification(r)).andReturn(as);
-
-        ApplicationGlobals ag = new ApplicationGlobalsImpl();
-
-        i.setGlobals(ag);
-
-        replay();
-
-        servlet.init(config);
-
-        // The real ApplicationServlet will build a Registry and, indirectly, invoke this.
-
-        i.initialize(servlet);
-
-        verify();
-    }
-
-    public void test_No_App_Spec() throws Exception
-    {
-        DefaultClassResolver cr = new DefaultClassResolver();
-
-        ApplicationSpecificationInitializer i = new ApplicationSpecificationInitializer();
-
-        ServletContext context = newMock(ServletContext.class);
-        Log log = newLog();
-
-        i.setLog(log);
-
-        ClasspathResourceFactoryImpl cf = new ClasspathResourceFactoryImpl();
-        cf.setClassResolver(cr);
-
-        i.setClasspathResourceFactory(cf);
-
-        HttpServlet servlet = new ServletFixture();
-
-        ServletConfig config = newMock(ServletConfig.class);
-
-        expect(config.getInitParameter(ApplicationSpecificationInitializer.APP_SPEC_PATH_PARAM)).andReturn(null);
-
-        expect(config.getServletContext()).andReturn(context);
-
-        expect(config.getServletName()).andReturn("wilma");
-
-        expect(log.isDebugEnabled()).andReturn(false);
-
-        expect(context.getResource("/WEB-INF/wilma/wilma.application")).andReturn(null);
-
-        expect(log.isDebugEnabled()).andReturn(false);
-
-        expect(context.getResource("/WEB-INF/wilma.application")).andReturn(null);
-
-        expect(config.getServletName()).andReturn("wilma");
-
-        log.warn("Could not find an application specification for application servlet wilma.");
-
-        expect(config.getServletName()).andReturn("wilma");
-
-        expect(config.getServletContext()).andReturn(context);
-
-        ApplicationGlobals ag = new ApplicationGlobalsImpl();
-
-        i.setGlobals(ag);
-
-        replay();
-
-        servlet.init(config);
-
-        // The real ApplicationServlet will build a Registry and, indirectly, invoke this.
-
-        i.initialize(servlet);
-
-        verify();
-
-        IApplicationSpecification as = ag.getSpecification();
-
-        assertEquals("wilma", as.getName());
-        assertEquals(new ContextResource(context, "/WEB-INF/wilma.application"), as
-                .getSpecificationLocation());
-    }
-
-    /**
-     * Test within the Registry, to ensure the module deployment descriptor is well configured.
-     */
-    public void test_Integration() throws Exception
-    {
-        ServletContext context = newMock(ServletContext.class);
-
-        HttpServlet servlet = new ServletFixture();
-        
-        ServletConfig config = newMock(ServletConfig.class);
-        
-        expect(config.getInitParameter(ApplicationSpecificationInitializer.APP_SPEC_PATH_PARAM))
-        .andReturn(null);
-        
-        expect(config.getServletContext()).andReturn(context).anyTimes();
-        
-        expect(config.getServletName()).andReturn("dino").anyTimes();
-        
-        expect(context.getResource("/WEB-INF/dino/dino.application"))
-        .andReturn(getClass().getResource("ParseApp.application")).times(2);
-        
-        replay();
-
-        servlet.init(config);
-
-        Registry registry = RegistryBuilder.constructDefaultRegistry();
-
-        ApplicationInitializer ai = (ApplicationInitializer) registry.getService(
-                "tapestry.init.ApplicationSpecificationInitializer",
-                ApplicationInitializer.class);
-
-        ai.initialize(servlet);
-
-        ApplicationGlobals ag = (ApplicationGlobals) registry.getService(
-                "tapestry.globals.ApplicationGlobals",
-                ApplicationGlobals.class);
-
-        assertEquals("ParseApp", ag.getSpecification().getName());
-
-        verify();
-        
-        registry.shutdown();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestBaseTagWriter.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestBaseTagWriter.java
deleted file mode 100644
index bf458d6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestBaseTagWriter.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.BaseTagWriter}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestBaseTagWriter extends BaseComponentTestCase
-{
-    private IMarkupWriter newWriter(String url)
-    {
-        IMarkupWriter writer = newMock(IMarkupWriter.class);
-
-        writer.beginEmpty("base");
-        writer.attribute("href", url);
-        writer.printRaw("<!--[if IE]></base><![endif]-->");
-        writer.println();
-
-        return writer;
-    }
-
-    private INamespace newNamespace(String id)
-    {
-        INamespace ns = newMock(INamespace.class);
-        checkOrder(ns, false);
-        
-        expect(ns.getId()).andReturn(id);
-
-        return ns;
-    }
-
-    private IPage newPage(INamespace ns, String pageName)
-    {
-        IPage page = newPage();
-
-        expect(page.getNamespace()).andReturn(ns);
-
-        if (pageName != null)
-        {
-            expect(page.getPageName()).andReturn(pageName);
-        }
-
-        return page;
-    }
-
-    private IRequestCycle newRequestCycle(IPage page, String url)
-    {
-        IRequestCycle cycle = newCycle();
-
-        expect(cycle.getPage()).andReturn(page);
-
-        expect(cycle.getAbsoluteURL(url)).andReturn("http://foo.com/context" + url);
-
-        return cycle;
-    }
-
-    private void run(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        replay();
-        
-        new BaseTagWriter().render(writer, cycle);
-
-        verify();
-    }
-    
-    public void testNotApplicationNamespace()
-    {
-        INamespace ns = newNamespace("library");
-        IPage page = newPage(ns, null);
-        IRequestCycle cycle = newRequestCycle(page, "/");
-        IMarkupWriter writer = newWriter("http://foo.com/context/");
-
-        run(writer, cycle);
-    }
-    
-    public void testInRoot()
-    {
-        INamespace ns = newNamespace("library");
-        IPage page = newPage(ns, null);
-        IRequestCycle cycle = newRequestCycle(page, "/");
-        IMarkupWriter writer = newWriter("http://foo.com/context/");
-
-        run(writer, cycle);
-    }
-    
-    public void testInSubFolder()
-    {
-        INamespace ns = newNamespace(null);
-        IPage page = newPage(ns, "admin/AdminMenu");
-        IRequestCycle cycle = newRequestCycle(page, "/admin/");
-        IMarkupWriter writer = newWriter("http://foo.com/context/admin/");
-        
-        run(writer, cycle);   
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestBasicInfrastructure.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestBasicInfrastructure.java
deleted file mode 100644
index 8e09d80..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestBasicInfrastructure.java
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Registry;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.impl.RegistryBuilder;
-import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.services.ClasspathResourceFactory;
-import org.apache.tapestry.services.Infrastructure;
-import org.apache.tapestry.services.ResetEventHub;
-import org.testng.annotations.Test;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Tests for:
- * <ul>
- * <li>{@link org.apache.tapestry.services.impl.ApplicationGlobalsImpl}
- * <li>{@link org.apache.tapestry.services.impl.InfrastructureObjectProvider}
- * </ul>
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestBasicInfrastructure extends BaseComponentTestCase
-{
-    public void testRequestGlobals()
-    {
-        RequestGlobalsImpl si = new RequestGlobalsImpl();
-
-        HttpServletRequest r = newMock(HttpServletRequest.class);
-        HttpServletResponse p = newMock(HttpServletResponse.class);
-
-        replay();
-
-        si.store(r, p);
-
-        assertSame(r, si.getRequest());
-        assertSame(p, si.getResponse());
-
-        verify();
-    }
-
-    public void testClasspathResourceFactory()
-    {
-        ClassResolver cr = new DefaultClassResolver();
-        ClasspathResourceFactoryImpl f = new ClasspathResourceFactoryImpl();
-        f.setClassResolver(cr);
-
-        String path = "/foo/bar";
-
-        ClasspathResource expected = new ClasspathResource(cr, path);
-
-        assertEquals(expected, f.newResource(path));
-    }
-
-    /**
-     * Validate that the factory is declared properly in the module deployment descriptor.
-     */
-    public void testClasspathResourceFactoryIntegrated()
-    {
-        ClassResolver cr = new DefaultClassResolver();
-
-        Registry registry = RegistryBuilder.constructDefaultRegistry();
-
-        ClasspathResourceFactory f = (ClasspathResourceFactory) registry.getService(
-                "tapestry.ClasspathResourceFactory",
-                ClasspathResourceFactory.class);
-
-        String path = "/foo/bar";
-
-        ClasspathResource expected = new ClasspathResource(cr, path);
-
-        assertEquals(expected, f.newResource(path));
-    }
-
-    public void testGlobalPropertyObjectProviderSuccess()
-    {
-        IPropertySource source = newMock(IPropertySource.class);
-
-        // Training
-
-        expect(source.getPropertyValue("foo")).andReturn("bar");
-
-        replay();
-
-        PropertyObjectProvider p = new PropertyObjectProvider();
-        p.setSource(source);
-
-        assertEquals("bar", p.provideObject(null, null, "foo", null));
-
-        verify();
-    }
-
-    public void testGlobalPropertyObjectProviderFailure()
-    {
-        Location l = fabricateLocation(223);
-
-        IPropertySource source = newMock(IPropertySource.class);
-
-        // Training
-
-        expect(source.getPropertyValue("foo")).andThrow(new ApplicationRuntimeException("failure"));
-
-        replay();
-
-        PropertyObjectProvider p = new PropertyObjectProvider();
-        p.setSource(source);
-
-        try
-        {
-            p.provideObject(null, null, "foo", l);
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("failure", ex.getMessage());
-            assertEquals(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    public void testSuccessfulInfrastructureLookup()
-    {
-        Infrastructure ifr = newMock(Infrastructure.class);
-
-        ResetEventHub coord = newMock(ResetEventHub.class);
-
-        expect(ifr.getResetEventHub()).andReturn(coord);
-
-        replay();
-
-        InfrastructureObjectProvider p = new InfrastructureObjectProvider();
-
-        p.setInfrastructure(ifr);
-
-        Object actual = p.provideObject(null, null, "resetEventHub", null);
-
-        assertSame(coord, actual);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestBindingSource.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestBindingSource.java
deleted file mode 100644
index 166f82d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestBindingSource.java
+++ /dev/null
@@ -1,291 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.BindingConstants;
-import org.apache.tapestry.binding.BindingFactory;
-import org.apache.tapestry.spec.IParameterSpecification;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.BindingSourceImpl}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestBindingSource extends BaseComponentTestCase
-{
-    public void test_No_Prefix()
-    {
-        IComponent component = newComponent();
-        IBinding binding = newBinding();
-        BindingFactory factory = newFactory();
-        Location l = newLocation();
-
-        BindingPrefixContribution c = new BindingPrefixContribution();
-        c.setPrefix(BindingConstants.LITERAL_PREFIX);
-        c.setFactory(factory);
-
-        // Training
-
-        expect(factory.createBinding(component, "foo", "a literal value without a prefix", l)).andReturn(binding);
-
-        replay();
-
-        BindingSourceImpl bs = new BindingSourceImpl();
-        bs.setContributions(Collections.singletonList(c));
-
-        bs.initializeService();
-
-        IBinding actual = bs.createBinding(
-                component,
-                "foo",
-                "a literal value without a prefix",
-                BindingConstants.LITERAL_PREFIX,
-                l);
-
-        assertSame(binding, actual);
-
-        verify();
-    }
-
-    public void test_No_Prefix_With_Default()
-    {
-        IComponent component = newComponent();
-        IBinding binding = newBinding();
-        BindingFactory factory = newFactory();
-        Location l = newLocation();
-
-        // Training
-
-        expect(factory.createBinding(component, "foo", "an-expression", l)).andReturn(binding);
-
-        BindingPrefixContribution c = new BindingPrefixContribution();
-        c.setPrefix(BindingConstants.OGNL_PREFIX);
-        c.setFactory(factory);
-
-        replay();
-
-        BindingSourceImpl bs = new BindingSourceImpl();
-        bs.setContributions(Collections.singletonList(c));
-        bs.initializeService();
-
-        IBinding actual = bs.createBinding(
-                component,
-                "foo",
-                "an-expression",
-                BindingConstants.OGNL_PREFIX,
-                l);
-
-        assertSame(binding, actual);
-
-        verify();
-    }
-
-    public void test_No_Prefix_ClientIdList_Binding()
-    {
-        IComponent component = newComponent();
-        IBinding binding = newBinding();
-        BindingFactory factory = newFactory();
-        Location l = newLocation();
-
-        BindingPrefixContribution c = new BindingPrefixContribution();
-        c.setPrefix(BindingConstants.LITERAL_PREFIX);
-        c.setFactory(factory);
-
-        BindingFactory idListFactory = newFactory();
-        Map propertyMap = new HashMap();
-        propertyMap.put("updateComponents", idListFactory);
-
-        IParameterSpecification ps = newMock(IParameterSpecification.class);
-
-        expect(ps.getParameterName()).andReturn("updateComponents").anyTimes();
-
-        // Training
-
-        expect(idListFactory.createBinding(component, "foo", "a literal value without a prefix", l)).andReturn(binding);
-
-        replay();
-
-        BindingSourceImpl bs = new BindingSourceImpl();
-        bs.setContributions(Collections.singletonList(c));
-        bs.setPropertyContributions(propertyMap);
-
-        bs.initializeService();
-
-        IBinding actual = bs.createBinding(
-                component,
-                ps,
-                "foo",
-                "a literal value without a prefix",
-                BindingConstants.LITERAL_PREFIX,
-                l);
-
-        assertSame(binding, actual);
-
-        verify();
-    }
-
-    public void test_Known_Prefix()
-    {
-        IComponent component = newComponent();
-        IBinding binding = newBinding();
-        BindingFactory factory = newFactory();
-        Location l = newLocation();
-
-        // Training
-
-        expect(factory.createBinding(component, "bar", "path part of locator", l)).andReturn(binding);
-
-        BindingPrefixContribution c = new BindingPrefixContribution();
-        c.setPrefix("prefix");
-        c.setFactory(factory);
-
-        replay();
-
-        BindingSourceImpl bs = new BindingSourceImpl();
-        bs.setContributions(Collections.singletonList(c));
-
-        bs.initializeService();
-
-        IBinding actual = bs.createBinding(
-                component,
-                "bar",
-                "prefix:path part of locator",
-                BindingConstants.LITERAL_PREFIX,
-                l);
-
-        assertSame(binding, actual);
-
-        verify();
-    }
-
-    public void test_Prefix_No_Match()
-    {
-        IComponent component = newComponent();
-        IBinding binding = newBinding();
-        BindingFactory factory = newFactory();
-        Location l = newLocation();
-
-        // Training
-
-        expect(factory.createBinding(component, "zip", "unknown:path part of locator", l)).andReturn(binding);
-
-        BindingPrefixContribution c = new BindingPrefixContribution();
-        c.setPrefix(BindingConstants.LITERAL_PREFIX);
-        c.setFactory(factory);
-
-        replay();
-
-        BindingSourceImpl bs = new BindingSourceImpl();
-        bs.setContributions(Collections.singletonList(c));
-
-        bs.initializeService();
-
-        IBinding actual = bs.createBinding(
-                component,
-                "zip",
-                "unknown:path part of locator",
-                BindingConstants.LITERAL_PREFIX,
-                l);
-
-        assertSame(binding, actual);
-
-        verify();
-    }
-
-    public void test_Single_Character_Prefix()
-    {
-        IComponent component = newComponent();
-        IBinding binding = newBinding();
-        BindingFactory factory = newFactory();
-        Location l = newLocation();
-
-        // Training
-
-        expect(factory.createBinding(component, "bar", "path part of locator", l)).andReturn(binding);
-
-        BindingPrefixContribution c = new BindingPrefixContribution();
-        c.setPrefix("c");
-        c.setFactory(factory);
-
-        replay();
-
-        BindingSourceImpl bs = new BindingSourceImpl();
-        bs.setContributions(Collections.singletonList(c));
-
-        bs.initializeService();
-
-        IBinding actual = bs.createBinding(
-                component,
-                "bar",
-                "c:path part of locator",
-                "c",
-                l);
-
-        assertSame(binding, actual);
-
-        verify();
-    }
-
-    public void test_Empty_Character_Prefix()
-    {
-        IComponent component = newComponent();
-        IBinding binding = newBinding();
-        BindingFactory factory = newFactory();
-        Location l = newLocation();
-
-        // Training
-
-        expect(factory.createBinding(component, "bar", "path part of locator", l)).andReturn(binding);
-
-        BindingPrefixContribution c = new BindingPrefixContribution();
-        c.setPrefix("");
-        c.setFactory(factory);
-
-        replay();
-
-        BindingSourceImpl bs = new BindingSourceImpl();
-        bs.setContributions(Collections.singletonList(c));
-
-        bs.initializeService();
-
-        IBinding actual = bs.createBinding(
-                component,
-                "bar",
-                ":path part of locator",
-                "",
-                l);
-
-        assertSame(binding, actual);
-
-        verify();
-    }
-
-    protected BindingFactory newFactory()
-    {
-        return newMock(BindingFactory.class);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestDeferredObjectTranslator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestDeferredObjectTranslator.java
deleted file mode 100644
index bd67716..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestDeferredObjectTranslator.java
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.internal.Module;
-import org.apache.hivemind.schema.Translator;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.DeferredObjectImpl}&nbsp;and
- * {@link org.apache.tapestry.services.impl.DeferredObjectTranslator}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestDeferredObjectTranslator extends BaseComponentTestCase
-{
-    private Module newModule()
-    {
-        return newMock(Module.class);
-    }
-
-    private Translator newTranslator(Module module, String objectReference, Location location,
-            Object result)
-    {
-        Translator translator = newMock(Translator.class);
-
-        expect(translator.translate(module, Object.class, objectReference, location)).andReturn(result);
-
-        return translator;
-    }
-
-    public void testDeferredObject()
-    {
-        Object object = new Object();
-        Module module = newModule();
-        Location l = newLocation();
-        Translator translator = newTranslator(module, "OBJ-REFERENCE", l, object);
-
-        replay();
-
-        DeferredObject deferred = new DeferredObjectImpl(translator, module, "OBJ-REFERENCE", l);
-
-        assertSame(object, deferred.getObject());
-
-        // Check that a second call returns a cached value.
-
-        assertSame(object, deferred.getObject());
-
-        verify();
-
-        assertSame(l, deferred.getLocation());
-    }
-
-    public void testDeferredObjectTranslator()
-    {
-        Object object = new Object();
-        Module module = newModule();
-        Location l = newLocation();
-        Translator objectTranslator = newTranslator(module, "OBJ-REFERENCE", l, object);
-
-        replay();
-
-        DeferredObjectTranslator translator = new DeferredObjectTranslator();
-        translator.setObjectTranslator(objectTranslator);
-
-        DeferredObject deferred = (DeferredObject) translator.translate(
-                module,
-                Object.class,
-                "OBJ-REFERENCE",
-                l);
-
-        assertSame(object, deferred.getObject());
-
-        // Check that a second call returns a cached value.
-
-        assertSame(object, deferred.getObject());
-
-        verify();
-
-        assertSame(l, deferred.getLocation());
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestDisableCachingFilter.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestDisableCachingFilter.java
deleted file mode 100644
index 82c1829..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestDisableCachingFilter.java
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expectLastCall;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.services.ResetEventHub;
-import org.apache.tapestry.services.WebRequestServicer;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.DisableCachingFilter}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestDisableCachingFilter extends BaseComponentTestCase
-{
-    private WebResponse newResponse()
-    {
-        return newMock(WebResponse.class);
-    }
-
-    private WebRequestServicer newServicer()
-    {
-        return newMock(WebRequestServicer.class);
-    }
-
-    private ResetEventHub newREC()
-    {
-        return newMock(ResetEventHub.class);
-    }
-
-    public void test_Normal() throws Exception
-    {
-        WebRequest request = newRequest();
-        WebResponse response = newResponse();
-        WebRequestServicer servicer = newServicer();
-        ResetEventHub rec = newREC();
-
-        servicer.service(request, response);
-        rec.fireResetEvent();
-
-        replay();
-
-        DisableCachingFilter f = new DisableCachingFilter();
-        f.setResetEventHub(rec);
-
-        f.service(request, response, servicer);
-
-        verify();
-    }
-
-    public void test_Reset_Failure() throws Exception
-    {
-        WebRequest request = newRequest();
-        WebResponse response = newResponse();
-        WebRequestServicer servicer = newServicer();
-        
-        ResetEventHub rec = newMock(ResetEventHub.class);
-        ErrorLog log = newMock(ErrorLog.class);
-
-        Location l = fabricateLocation(99);
-
-        Throwable t = new ApplicationRuntimeException("Mock failure.", l, null);
-
-        servicer.service(request, response);
-
-        rec.fireResetEvent();
-        expectLastCall().andThrow(t);
-
-        log.error(ImplMessages.errorResetting(t), l, t);
-
-        replay();
-
-        DisableCachingFilter f = new DisableCachingFilter();
-        f.setResetEventHub(rec);
-        f.setErrorLog(log);
-
-        f.service(request, response, servicer);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestDisableCachingFilterThreaded.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestDisableCachingFilterThreaded.java
deleted file mode 100644
index f508c78..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestDisableCachingFilterThreaded.java
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import java.io.IOException;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.event.ResetEventListener;
-import org.apache.tapestry.services.ResetEventHub;
-import org.apache.tapestry.services.WebRequestServicer;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-import org.testng.annotations.AfterSuite;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests threaded calls on {@link DisableCachingFilter}.
- *
- * @author jkuhnert
- */
-@Test(threadPoolSize=4)
-public class TestDisableCachingFilterThreaded extends BaseComponentTestCase
-{
-    class MockServicer implements WebRequestServicer 
-    {
-        CountingResetListener _listener;
-        
-        public MockServicer(CountingResetListener listener)
-        {
-            _listener = listener;
-        }
-        
-        /**
-         * {@inheritDoc}
-         */
-        public void service(WebRequest request, WebResponse response)
-            throws IOException
-        {
-            _listener.performOperation();
-        }
-        
-    }
-    
-    class CountingResetListener implements ResetEventListener
-    {
-        private int _counter=0;
-        
-        public void performOperation()
-        {
-            _counter++;
-
-            if (_counter != 1)
-                throw new AssertionError("Counter should be 1 but is " + _counter);
-        }
-        
-        public void resetEventDidOccur()
-        {
-            _counter--;
-        }
-        
-        public int getCount()
-        {
-            return _counter;
-        }
-    }
-    
-    private ResetEventHub _resetHub;
-    private CountingResetListener _listener;
-    
-    DisableCachingFilter _filter;
-    WebRequestServicer _servicer;
-    
-    @BeforeClass
-    public void setup_Event_Hub()
-    {
-        _resetHub = new ResetEventHubImpl();
-        
-        _filter = new DisableCachingFilter();
-        _filter.setResetEventHub(_resetHub);
-        
-        _listener = new CountingResetListener();
-        
-        _resetHub.addResetEventListener(_listener);
-        
-        _servicer = new MockServicer(_listener);
-    }
-    
-    @Test(invocationCount = 100, threadPoolSize=4)
-    public void invoke_Listener() throws Exception
-    {
-        _filter.service(null, null, _servicer);
-    }
-    
-    @AfterSuite(alwaysRun=true)
-    public void verify_Reset_Counters()
-    {
-        assertEquals(_listener.getCount(), 0);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestEngineManager.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestEngineManager.java
deleted file mode 100644
index bc4e7bd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestEngineManager.java
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Locale;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.services.EngineFactory;
-import org.apache.tapestry.services.ObjectPool;
-import org.apache.tapestry.services.RequestLocaleManager;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.EngineManagerImpl}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestEngineManager extends BaseComponentTestCase
-{
-
-    public void testGetFromPool()
-    {
-        RequestLocaleManager extractor = newMock(RequestLocaleManager.class);
-        
-        ObjectPool pool = newMock(ObjectPool.class);
-
-        // Training
-
-        expect(extractor.extractLocaleForCurrentRequest()).andReturn(Locale.CHINESE);
-
-        IEngine engine = newMock(IEngine.class);
-
-        expect(pool.get(Locale.CHINESE)).andReturn(engine);
-
-        replay();
-
-        EngineManagerImpl m = new EngineManagerImpl();
-
-        m.setEnginePool(pool);
-        m.setLocaleManager(extractor);
-
-        IEngine actual = m.getEngineInstance();
-
-        assertSame(engine, actual);
-
-        verify();
-    }
-
-    public void testGetNotInPool()
-    {
-        RequestLocaleManager extractor = newMock(RequestLocaleManager.class);
-        
-        ObjectPool pool = newMock(ObjectPool.class);
-
-        // Training
-
-        expect(extractor.extractLocaleForCurrentRequest()).andReturn(Locale.CHINESE);
-
-        IEngine engine = newMock(IEngine.class);
-
-        expect(pool.get(Locale.CHINESE)).andReturn(null);
-        
-        EngineFactory factory = newMock(EngineFactory.class);
-
-        expect(factory.constructNewEngineInstance(Locale.CHINESE)).andReturn(engine);
-
-        replay();
-
-        EngineManagerImpl m = new EngineManagerImpl();
-
-        m.setEnginePool(pool);
-        m.setLocaleManager(extractor);
-        m.setEngineFactory(factory);
-
-        IEngine actual = m.getEngineInstance();
-
-        assertSame(engine, actual);
-
-        verify();
-    }
-
-    public void testStoreNoSession()
-    {
-        IEngine engine = newMock(IEngine.class);
-
-        ObjectPool pool = newMock(ObjectPool.class);
-
-        // Training
-
-        expect(engine.getLocale()).andReturn(Locale.KOREAN);
-
-        pool.store(Locale.KOREAN, engine);
-
-        replay();
-
-        EngineManagerImpl m = new EngineManagerImpl();
-
-        m.setEnginePool(pool);
-
-        m.storeEngineInstance(engine);
-
-        verify();
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestEngineServiceObjectProvider.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestEngineServiceObjectProvider.java
deleted file mode 100644
index ae9335f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestEngineServiceObjectProvider.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.services.ServiceMap;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.EngineServiceObjectProvider}.
- * 
- * @author Howard M. Lewis Ship
- */
-@Test
-public class TestEngineServiceObjectProvider extends BaseComponentTestCase
-{
-    public void testProvideObject()
-    {
-        ServiceMap map = newMock(ServiceMap.class);
-
-        IEngineService service = newMock(IEngineService.class);
-
-        expect(map.getService("page")).andReturn(service);
-
-        replay();
-
-        EngineServiceObjectProvider p = new EngineServiceObjectProvider();
-
-        p.setServiceMap(map);
-
-        assertSame(service, p.provideObject(null, null, "page", null));
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionCache.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionCache.java
deleted file mode 100644
index e918627..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionCache.java
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expect;
-import ognl.Node;
-import ognl.OgnlContext;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.services.ExpressionEvaluator;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.ExpressionCacheImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(enabled = false)
-public class TestExpressionCache extends BaseComponentTestCase
-{
-    public void test_Valid_Expression()
-    {
-        ExpressionCacheImpl ec = new ExpressionCacheImpl();
-
-        Object compiled = ec.getCompiledExpression("foo ? bar : baz");
-
-        assertNotNull(compiled);
-    }
-
-    public void test_Caching()
-    {
-        ExpressionCacheImpl ec = new ExpressionCacheImpl();
-        
-        Object c1 = ec.getCompiledExpression("foo + bar");
-        Object c2 = ec.getCompiledExpression("zip.zap.zoom");
-        Object c3 = ec.getCompiledExpression("foo + bar");
-
-        assertSame(c1, c3);
-        assertNotSame(c1, c2);
-    }
-
-    public void test_Compiled_Caching()
-    {
-        ExpressionEvaluator evaluator = newMock(ExpressionEvaluator.class);
-        ExpressionCacheImpl ec = new ExpressionCacheImpl();
-        ec.setEvaluator(evaluator);
-        
-        BasicObject target = new BasicObject();
-        OgnlContext context = new OgnlContext();
-        
-        expect(evaluator.createContext(target)).andReturn(context);
-        
-        replay();
-        
-        Node e1 = (Node)ec.getCompiledExpression(target, "value");
-        
-        assertNotNull(e1.getAccessor());
-        assertEquals(e1.getAccessor().get(context, target), "foo");
-        
-        Node e2 = (Node)ec.getCompiledExpression(target, "value");
-        
-        assertSame(e1, e2);
-        
-        verify();
-    }
-    
-    public void test_Invalid_Expression()
-    {
-        ExpressionCacheImpl ec = new ExpressionCacheImpl();
-
-        try
-        {
-            ec.getCompiledExpression("foo and bar and");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertExceptionSubstring(ex, "Unable to parse OGNL expression 'foo and bar and'");
-        }
-    }
-    
-    // fails only when running from command line, must be threading issue
-    @Test(enabled = false)
-    public void test_Clear_Cache()
-    {
-        ExpressionEvaluator evaluator = newMock(ExpressionEvaluator.class);
-        ExpressionCacheImpl ec = new ExpressionCacheImpl();
-        ec.setEvaluator(evaluator);
-        
-        BasicObject target = new BasicObject();
-        OgnlContext context = new OgnlContext();
-        
-        expect(evaluator.createContext(target)).andReturn(context).anyTimes();
-        
-        replay();
-        
-        Node e1 = (Node)ec.getCompiledExpression(target, "value");
-        
-        ec.resetEventDidOccur();
-        
-        Node e2 = (Node)ec.getCompiledExpression(target, "value");
-        
-        assertNotSame(e1, e2);
-        
-        verify();
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionEvaluator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionEvaluator.java
deleted file mode 100644
index faba0c6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionEvaluator.java
+++ /dev/null
@@ -1,240 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import ognl.TypeConverter;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.enhance.ClassFactoryImpl;
-import org.apache.tapestry.services.ExpressionEvaluator;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.Collections;
-import java.util.Date;
-
-/**
- */
-@Test
-public class TestExpressionEvaluator extends BaseComponentTestCase
-{
-    private ExpressionEvaluatorImpl create()
-    {
-        ExpressionCacheImpl cache = new ExpressionCacheImpl();
-
-        ExpressionEvaluatorImpl result = new ExpressionEvaluatorImpl();
-        result.setClassFactory(new ClassFactoryImpl());
-
-        result.setExpressionCache(cache);
-        
-        cache.setEvaluator(result);
-
-        return result;
-    }
-
-    public static class Fixture
-    {
-        private String _value;
-
-        public Fixture()
-        {
-        }
-
-        public Fixture(String value)
-        {
-            _value = value;
-        }
-
-        public String getValue()
-        {
-            return _value;
-        }
-
-        public void setValue(String value)
-        {
-            _value = value;
-        }
-    }
-
-    public void test_Read()
-    {
-        Fixture f = new Fixture("Foo");
-
-        ExpressionEvaluator ee = create();
-        trainIntialize(ee);
-
-        assertEquals("Foo", ee.read(f, "value"));
-    }
-
-    public void test_Read_Fail()
-    {
-        Fixture f = new Fixture();
-
-        ExpressionEvaluator ee = create();
-
-        try
-        {
-            ee.read(f, "bar");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertExceptionSubstring(ex, "Unable to parse OGNL expression");
-        }
-    }
-
-    public void test_Write()
-    {
-        Fixture f = new Fixture("Foo");
-
-        ExpressionEvaluator ee = create();
-        trainIntialize(ee);
-        
-        ee.write(f, "value", "Bar");
-
-        assertEquals("Bar", f.getValue());
-    }
-
-    public void test_Write_Fail()
-    {
-        Fixture f = new Fixture();
-
-        ExpressionEvaluator ee = create();
-
-        try
-        {
-            ee.write(f, "class", "Foo");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertExceptionSubstring(ex, "Unable to update OGNL expression");
-            assertSame(f, ex.getComponent());
-        }
-    }
-
-    public void test_Is_Constant()
-    {
-        ExpressionEvaluatorImpl ee = create();
-
-        ee.setApplicationSpecification(newAppSpec());
-        ee.setContributions(Collections.EMPTY_LIST);
-        ee.setNullHandlerContributions(Collections.EMPTY_LIST);
-
-        replay();
-
-        ee.initializeService();
-
-        assertEquals(true, ee.isConstant("true"));
-        assertEquals(true, ee.isConstant("'OGNL'"));
-        assertEquals(false, ee.isConstant("foo.bar"));
-        assertEquals(false, ee.isConstant("bar()"));
-        assertEquals(true, ee.isConstant("@org.apache.tapestry.Tapestry@HOME_SERVICE"));
-
-        verify();
-    }
-
-    private IApplicationSpecification newAppSpec()
-    {
-        IApplicationSpecification spec = newMock(IApplicationSpecification.class);
-
-        expect(spec.checkExtension(Tapestry.OGNL_TYPE_CONVERTER)).andReturn(false);
-
-        return spec;
-    }
-
-    public void test_Is_Constant_Fail()
-    {
-        ExpressionEvaluator ee = create();
-
-        try
-        {
-            ee.isConstant("@foo@BAR");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertExceptionSubstring(ex, "Error evaluating OGNL expression");
-        }
-
-    }
-
-    void trainIntialize(ExpressionEvaluator evaluator)
-    {
-        ExpressionEvaluatorImpl impl = (ExpressionEvaluatorImpl)evaluator;
-        
-        IApplicationSpecification as = newMock(IApplicationSpecification.class);
-
-        expect(as.checkExtension(Tapestry.OGNL_TYPE_CONVERTER)).andReturn(false);
-
-        impl.setApplicationSpecification(as);
-        impl.setContributions(Collections.EMPTY_LIST);
-        impl.setNullHandlerContributions(Collections.EMPTY_LIST);
-        impl.setClassFactory(new ClassFactoryImpl());
-
-        replay();
-
-        impl.initializeService();
-
-        verify();
-    }
-
-    public void test_Type_Converter() throws Exception
-    {
-        IApplicationSpecification as = newMock(IApplicationSpecification.class);
-        
-        TypeConverter tc = newMock(TypeConverter.class);
-
-        // Training
-
-        expect(as.checkExtension(Tapestry.OGNL_TYPE_CONVERTER)).andReturn(true);
-
-        expect(as.getExtension(Tapestry.OGNL_TYPE_CONVERTER, TypeConverter.class)).andReturn(tc);
-
-        replay();
-
-        ExpressionCacheImpl cache = new ExpressionCacheImpl();
-
-        ExpressionEvaluatorImpl ee = new ExpressionEvaluatorImpl();
-        
-        ee.setExpressionCache(cache);
-        ee.setApplicationSpecification(as);
-        ee.setContributions(Collections.EMPTY_LIST);
-        ee.setNullHandlerContributions(Collections.EMPTY_LIST);
-        ee.setClassFactory(new ClassFactoryImpl());
-        
-        ee.initializeService();
-        
-        verify();
-        
-        cache.setEvaluator(ee);
-
-        Fixture f = new Fixture();
-
-        Date d = new Date();
-
-        // Training
-        
-        replay();
-        
-        ee.write(f, "value", d);
-
-        assertEquals(f.getValue(), d.toString());
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExtensionLookupFactory.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExtensionLookupFactory.java
deleted file mode 100644
index ee65add..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExtensionLookupFactory.java
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.ServiceImplementationFactoryParameters;
-import org.apache.hivemind.lib.DefaultImplementationBuilder;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests {@link org.apache.tapestry.services.impl.ExtensionLookupFactory}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestExtensionLookupFactory extends BaseComponentTestCase
-{
-    private List createParameters(String extensionName)
-    {
-        return createParameters(extensionName, null);
-    }
-
-    private List createParameters(String extensionName, Object defaultValue)
-    {
-        ExtensionLookupParameter p = new ExtensionLookupParameter();
-
-        p.setExtensionName(extensionName);
-        p.setDefault(defaultValue);
-
-        return Collections.singletonList(p);
-    }
-
-    public void testInSpecification()
-    {
-        IApplicationSpecification spec = newMock(IApplicationSpecification.class);
-
-        Runnable r = newMock(Runnable.class);
-        
-        ServiceImplementationFactoryParameters fp = newMock(ServiceImplementationFactoryParameters.class);
-
-        // Training
-
-        expect(fp.getParameters()).andReturn(createParameters("foo.bar"));
-
-        expect(fp.getServiceInterface()).andReturn(Runnable.class);
-
-        expect(spec.checkExtension("foo.bar")).andReturn(true);
-
-        expect(spec.getExtension("foo.bar", Runnable.class)).andReturn(r);
-
-        replay();
-
-        ExtensionLookupFactory f = new ExtensionLookupFactory();
-        f.setSpecification(spec);
-
-        Object actual = f.createCoreServiceImplementation(fp);
-
-        assertSame(r, actual);
-
-        verify();
-    }
-
-    public void testSyntheticDefault()
-    {
-        IApplicationSpecification spec = newMock(IApplicationSpecification.class);
-        
-        DefaultImplementationBuilder dib = newMock(DefaultImplementationBuilder.class);
-
-        Runnable r = newMock(Runnable.class);
-
-        ServiceImplementationFactoryParameters fp = newMock(ServiceImplementationFactoryParameters.class);
-
-        // Training
-
-        expect(fp.getParameters()).andReturn(createParameters("foo.bar"));
-
-        expect(fp.getServiceInterface()).andReturn(Runnable.class);
-        
-        expect(spec.checkExtension("foo.bar")).andReturn(false);
-
-        expect(dib.buildDefaultImplementation(Runnable.class)).andReturn(r);
-
-        replay();
-
-        ExtensionLookupFactory f = new ExtensionLookupFactory();
-        f.setSpecification(spec);
-        f.setDefaultBuilder(dib);
-
-        Object actual = f.createCoreServiceImplementation(fp);
-
-        assertSame(r, actual);
-
-        verify();
-    }
-
-    public void testConfigurationDefault()
-    {
-        IApplicationSpecification spec = newMock(IApplicationSpecification.class);
-
-        Runnable r = newMock(Runnable.class);
-
-        ServiceImplementationFactoryParameters fp = newMock(ServiceImplementationFactoryParameters.class);
-
-        // Training
-
-        expect(fp.getParameters()).andReturn(createParameters("foo.bar", r));
-
-        expect(fp.getServiceInterface()).andReturn(Runnable.class);
-
-        expect(spec.checkExtension("foo.bar")).andReturn(false);
-
-        replay();
-
-        ExtensionLookupFactory f = new ExtensionLookupFactory();
-        f.setSpecification(spec);
-
-        Object actual = f.createCoreServiceImplementation(fp);
-
-        assertSame(r, actual);
-
-        verify();
-    }
-
-    public void testFailure()
-    {
-        Location l = fabricateLocation(264);
-        ExtensionLookupParameter p = new ExtensionLookupParameter();
-
-        p.setLocation(l);
-        p.setExtensionName("gnip.gnop");
-
-        ServiceImplementationFactoryParameters fp = newMock(ServiceImplementationFactoryParameters.class);
-
-        expect(fp.getParameters()).andReturn(Collections.singletonList(p));
-
-        expect(fp.getServiceInterface()).andReturn(null);
-
-        ExtensionLookupFactory f = new ExtensionLookupFactory();
-
-        replay();
-
-        try
-        {
-            f.createCoreServiceImplementation(fp);
-
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestInfrastructure.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestInfrastructure.java
deleted file mode 100644
index 45f018d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestInfrastructure.java
+++ /dev/null
@@ -1,233 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.InfrastructureImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestInfrastructure extends BaseComponentTestCase
-{
-    private static class DeferredObjectFixture implements DeferredObject
-    {
-        private Object _object;
-
-        private Location _location;
-
-        public DeferredObjectFixture(Object object, Location location)
-        {
-            _object = object;
-            _location = location;
-        }
-
-        public Location getLocation()
-        {
-            return _location;
-        }
-
-        public Object getObject()
-        {
-            return _object;
-        }
-    }
-
-    private InfrastructureContribution newContribution(String propertyName, String mode,
-            Object object)
-    {
-        return newContribution(propertyName, mode, object, null);
-    }
-
-    private InfrastructureContribution newContribution(String propertyName, String mode,
-            Object object, Location location)
-    {
-        DeferredObject deferred = new DeferredObjectFixture(object, location);
-
-        InfrastructureContribution ic = new InfrastructureContribution();
-        ic.setDeferredObject(deferred);
-        ic.setProperty(propertyName);
-        ic.setMode(mode);
-        ic.setLocation(location);
-
-        return ic;
-    }
-
-    public void testGetPropertyUninitialized()
-    {
-        InfrastructureImpl infra = new InfrastructureImpl();
-
-        try
-        {
-            infra.getProperty("foo");
-            unreachable();
-        }
-        catch (IllegalStateException ex)
-        {
-            assertEquals(ImplMessages.infrastructureNotInitialized(), ex.getMessage());
-        }
-    }
-
-    public void testGetNullProperty()
-    {
-        InfrastructureImpl infra = new InfrastructureImpl();
-
-        infra.setNormalContributions(Collections.EMPTY_LIST);
-        infra.setOverrideContributions(Collections.EMPTY_LIST);
-
-        infra.initialize("test");
-
-        try
-        {
-            infra.getProperty("fred");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(ImplMessages.missingInfrastructureProperty("fred"), ex.getMessage());
-        }
-    }
-
-    public void testReinitalize()
-    {
-        InfrastructureImpl infra = new InfrastructureImpl();
-
-        infra.setNormalContributions(Collections.EMPTY_LIST);
-        infra.setOverrideContributions(Collections.EMPTY_LIST);
-
-        infra.initialize("ONE");
-
-        try
-        {
-            infra.initialize("TWO");
-            unreachable();
-        }
-        catch (IllegalStateException ex)
-        {
-            assertEquals(ImplMessages.infrastructureAlreadyInitialized("TWO", "ONE"), ex
-                    .getMessage());
-        }
-    }
-
-    /**
-     * Test that a contribution for a mode quietly overrides a contribution for the same property
-     * that does not specify a mode.
-     */
-
-    public void testModeOverridesNonMode()
-    {
-        Object fredModal = new Object();
-        Object plainFred = new Object();
-
-        InfrastructureImpl infra = new InfrastructureImpl();
-
-        List l = new ArrayList();
-        l.add(newContribution("fred", "bedrock", fredModal));
-        l.add(newContribution("fred", null, plainFred));
-
-        infra.setNormalContributions(l);
-        infra.setOverrideContributions(Collections.EMPTY_LIST);
-
-        infra.initialize("bedrock");
-
-        assertSame(fredModal, infra.getProperty("fred"));
-    }
-    
-    public void testWrongModeIgnored()
-    {
-        Object fredModal = new Object();
-        Object wrongFred = new Object();
-
-        InfrastructureImpl infra = new InfrastructureImpl();
-
-        List l = new ArrayList();
-        l.add(newContribution("fred", "bedrock", fredModal));
-        l.add(newContribution("fred", "shale", wrongFred));
-
-        infra.setNormalContributions(l);
-        infra.setOverrideContributions(Collections.EMPTY_LIST);
-
-        infra.initialize("bedrock");
-
-        assertSame(fredModal, infra.getProperty("fred"));
-    }
-
-    /**
-     * Test that override contributions trump contributions from the normal path.
-     */
-
-    public void testOverrides()
-    {
-        Object normalFred = new Object();
-        Object overrideFred = new Object();
-
-        InfrastructureImpl infra = new InfrastructureImpl();
-
-        infra.setNormalContributions(Collections.singletonList(newContribution(
-                "fred",
-                null,
-                normalFred)));
-        infra.setOverrideContributions(Collections.singletonList(newContribution(
-                "fred",
-                null,
-                overrideFred)));
-
-        infra.initialize("bedrock");
-
-        assertSame(overrideFred, infra.getProperty("fred"));
-    }
-
-    public void testDuplicate()
-    {
-        ErrorLog log = newMock(ErrorLog.class);
-
-        Location l1 = fabricateLocation(99);
-        Location l2 = fabricateLocation(132);
-
-        Object fredModal = new Object();
-        Object duplicateFred = new Object();
-
-        List l = new ArrayList();
-        l.add(newContribution("fred", "bedrock", fredModal, l1));
-        InfrastructureContribution conflict = newContribution("fred", "bedrock", duplicateFred, l2);
-        l.add(conflict);
-
-        log.error(ImplMessages.duplicateInfrastructureContribution(conflict, l1), l2, null);
-
-        replay();
-
-        InfrastructureImpl infra = new InfrastructureImpl();
-        infra.setNormalContributions(l);
-        infra.setOverrideContributions(Collections.EMPTY_LIST);
-        infra.setErrorLog(log);
-
-        infra.initialize("bedrock");
-
-        assertSame(fredModal, infra.getProperty("fred"));
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestLocalizedPropertySource.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestLocalizedPropertySource.java
deleted file mode 100644
index 07e8ebc..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestLocalizedPropertySource.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Locale;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.IPropertySource;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.LocalizedPropertySource}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestLocalizedPropertySource extends BaseComponentTestCase
-{
-    public void testFound()
-    {
-        IPropertySource ps = newMock(IPropertySource.class);
-
-        expect(ps.getPropertyValue("property-name_en")).andReturn(null);
-
-        expect(ps.getPropertyValue("property-name")).andReturn("fred");
-
-        replay();
-
-        LocalizedPropertySource lps = new LocalizedPropertySource(ps);
-
-        String result = lps.getPropertyValue("property-name", Locale.ENGLISH);
-
-        assertEquals("fred", result);
-
-        verify();
-    }
-
-    public void testNotFound()
-    {
-        IPropertySource ps = newMock(IPropertySource.class);
-
-        expect(ps.getPropertyValue("property-name_fr")).andReturn(null);
-
-        expect(ps.getPropertyValue("property-name")).andReturn(null);
-
-        replay();
-
-        LocalizedPropertySource lps = new LocalizedPropertySource(ps);
-
-        assertNull(lps.getPropertyValue("property-name", Locale.FRENCH));
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestLocalizedStringRender.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestLocalizedStringRender.java
deleted file mode 100644
index ddbccc1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestLocalizedStringRender.java
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.*;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Messages;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.parse.LocalizationToken;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link LocalizedStringRender} .
- *
- * @author jkuhnert
- */
-@Test
-public class TestLocalizedStringRender extends BaseComponentTestCase
-{   
-    protected LocalizationToken newToken(String tag, String key, boolean raw, Map attributes)
-    {
-        Location l = newLocation();
-        return new LocalizationToken(tag, key, raw, attributes, l);
-    }
-    
-    public void test_No_Attributes()
-    {
-        IRequestCycle cycle = newCycle(false);
-        IMarkupWriter writer = newWriter();
-        IComponent c = newComponent();
-        LocalizationToken tok = newToken(null, "hello", false, null);
-        Messages m = newMock(Messages.class);
-        
-        LocalizedStringRender render = new LocalizedStringRender(c, tok);
-        
-        expect(c.getMessages()).andReturn(m);
-        expect(m.getMessage("hello")).andReturn("World");
-        
-        writer.print("World", false);
-        
-        replay();
-        
-        render.render(writer, cycle);
-        
-        verify();
-    }
-    
-    public void test_Attributes()
-    {
-        IRequestCycle cycle = newCycle(false);
-        IMarkupWriter writer = newWriter();
-        IComponent c = newComponent();
-        
-        Map attr = new HashMap();
-        attr.put("class", "feely mcfeels");
-        attr.put("joo", "talkin to me?");
-        
-        LocalizationToken tok = newToken(null, "hello", false, attr);
-        Messages m = newMock(Messages.class);
-        
-        LocalizedStringRender render = new LocalizedStringRender(c, tok);
-        
-        expect(c.getMessages()).andReturn(m);
-        expect(m.getMessage("hello")).andReturn("World");
-        
-        writer.begin("span");
-        writer.attribute("joo", (String)attr.get("joo"));
-        writer.attribute("class", (String)attr.get("class"));
-        writer.print("World", false);
-        writer.end();
-        
-        replay();
-        
-        render.render(writer, cycle);
-        
-        verify();
-    }
-    
-    public void test_Attributes_Tag()
-    {
-        IRequestCycle cycle = newCycle(false);
-        IMarkupWriter writer = newWriter();
-        IComponent c = newComponent();
-        
-        Map attr = new HashMap();
-        attr.put("class", "feely mcfeels");
-        
-        LocalizationToken tok = newToken("div", "hello", false, attr);
-        Messages m = newMock(Messages.class);
-        
-        LocalizedStringRender render = new LocalizedStringRender(c, tok);
-        
-        expect(c.getMessages()).andReturn(m);
-        expect(m.getMessage("hello")).andReturn("World");
-        
-        writer.begin("div");
-        writer.attribute("class", (String)attr.get("class"));
-        writer.print("World", false);
-        writer.end();
-        
-        replay();
-        
-        render.render(writer, cycle);
-        
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestNamespaceResources.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestNamespaceResources.java
deleted file mode 100644
index ec74ddb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestNamespaceResources.java
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.services.impl;

-

-import static org.easymock.EasyMock.expect;

-

-import java.net.URL;

-

-import org.apache.hivemind.Location;

-import org.apache.hivemind.Resource;

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.IAsset;

-import org.apache.tapestry.asset.AssetSource;

-import org.apache.tapestry.engine.ISpecificationSource;

-import org.apache.tapestry.services.NamespaceResources;

-import org.apache.tapestry.spec.IComponentSpecification;

-import org.apache.tapestry.spec.ILibrarySpecification;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.services.impl.NamespaceResourcesImpl}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class TestNamespaceResources extends BaseComponentTestCase

-{

-    protected Resource newResource()

-    {

-        return newMock(Resource.class);

-    }

-

-    protected void trainGetRelativeResource(Resource parent, String path, Resource child)

-    {

-        expect(parent.getRelativeResource(path)).andReturn(child);

-    }

-

-    protected void trainGetResourceURL(Resource resource, URL url)

-    {

-        expect(resource.getResourceURL()).andReturn(url);

-    }

-

-    protected ISpecificationSource newSource()

-    {

-        return newMock(ISpecificationSource.class);

-    }

-

-    protected ILibrarySpecification newLSpec()

-    {

-        return newMock(ILibrarySpecification.class);

-    }

-

-    protected AssetSource newAssetSource()

-    {

-        return newMock(AssetSource.class);

-    }

-

-    public void testFindChildLibrarySpecification()

-    {

-        Resource parent = newResource();

-        Resource child = newResource();

-        ISpecificationSource source = newSource();

-        ILibrarySpecification spec = newLSpec();

-        AssetSource assetSource = newAssetSource();

-        Location l = newLocation();

-

-        trainResolveChildResource(assetSource, parent, "foo/bar.library", l, child);

-

-        trainGetLibrarySpecification(source, child, spec);

-

-        replay();

-

-        NamespaceResources nr = new NamespaceResourcesImpl(source, assetSource);

-

-        assertSame(spec, nr.findChildLibrarySpecification(parent, "foo/bar.library", l));

-

-        verify();

-

-    }

-

-    protected void trainResolveChildResource(AssetSource assetSource, Resource parent,

-            String childPath, Location location, Resource child)

-    {

-        IAsset asset = newAsset();

-

-        expect(assetSource.findAsset(parent, childPath, null, location)).andReturn(asset);

-

-        expect(asset.getResourceLocation()).andReturn(child);

-    }

-

-    protected IAsset newAsset()

-    {

-        return newMock(IAsset.class);

-    }

-

-    protected URL newURL()

-    {

-        return getClass().getResource("TestNamespaceResources.class");

-    }

-

-    protected void trainGetLibrarySpecification(ISpecificationSource source, Resource resource,

-            ILibrarySpecification spec)

-    {

-        expect(source.getLibrarySpecification(resource)).andReturn(spec);

-    }

-

-    protected IComponentSpecification newComponentSpec()

-    {

-        return newMock(IComponentSpecification.class);

-    }

-

-    public void test_Get_Page_Specification()

-    {

-        Resource libraryResource = newResource();

-        Resource specResource = newResource();

-        IComponentSpecification spec = newComponentSpec();

-        ISpecificationSource source = newSource();

-        AssetSource assetSource = newAssetSource();

-        Location l = newLocation();

-

-        trainResolveChildResource(assetSource, libraryResource, "Foo.page", l, specResource);

-

-        expect(source.getPageSpecification(specResource)).andReturn(spec);

-

-        replay();

-

-        NamespaceResources nr = new NamespaceResourcesImpl(source, assetSource);

-

-        assertSame(spec, nr.getPageSpecification(libraryResource, "Foo.page", l));

-

-        verify();

-    }

-

-    public void test_Get_Component_Specification()

-    {

-        Resource libraryResource = newResource();

-        Resource specResource = newResource();

-        IComponentSpecification spec = newComponentSpec();

-        ISpecificationSource source = newSource();

-        AssetSource assetSource = newAssetSource();

-        Location l = newLocation();

-

-        trainResolveChildResource(assetSource, libraryResource, "Foo.jwc", l, specResource);

-

-        expect(source.getComponentSpecification(specResource)).andReturn(spec);

-

-        replay();

-

-        NamespaceResources nr = new NamespaceResourcesImpl(source, assetSource);

-

-        assertSame(spec, nr.getComponentSpecification(libraryResource, "Foo.jwc", l));

-

-        verify();

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestObjectPool.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestObjectPool.java
deleted file mode 100644
index 6cba17e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestObjectPool.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.services.ObjectPool;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.ObjectPoolImpl}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestObjectPool extends BaseComponentTestCase
-{
-    public void testStoreAndGet()
-    {
-        String key = "POOLED-KEY";
-        String pooled = "POOLED";
-        ObjectPool p = new ObjectPoolImpl();
-
-        assertNull(p.get(key));
-
-        p.store(key, pooled);
-
-        assertSame(pooled, p.get(key));
-
-        assertNull(p.get(key));
-    }
-
-    public void testStoreMany()
-    {
-        ObjectPool p = new ObjectPoolImpl();
-
-        Object pooled1 = new Object();
-        Object pooled2 = new Object();
-
-        String key = "POOLED-KEY";
-
-        p.store(key, pooled1);
-        p.store(key, pooled2);
-
-        // No guarantee that we'll get them out in the order they were put in.
-
-        List l = new ArrayList();
-        l.add(pooled1);
-        l.add(pooled2);
-
-        for (int i = 0; i < 2; i++)
-        {
-            Object pooled = p.get(key);
-
-            assertTrue(l.remove(pooled));
-        }
-
-        assertNull(p.get(key));
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestRequestLocaleManager.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestRequestLocaleManager.java
deleted file mode 100644
index 214e8e4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestRequestLocaleManager.java
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import org.apache.hivemind.service.ThreadLocale;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.TapestryConstants;
-import org.apache.tapestry.services.CookieSource;
-import org.apache.tapestry.web.WebRequest;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import java.util.Locale;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.RequestLocaleManagerImpl}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestRequestLocaleManager extends BaseComponentTestCase
-{
-    private ThreadLocale newThreadLocale()
-    {
-        return newMock(ThreadLocale.class);
-    }
-
-    private ThreadLocale newThreadLocale(Locale locale)
-    {
-        ThreadLocale threadLocale = newMock(ThreadLocale.class);
-
-        expect(threadLocale.getLocale()).andReturn(locale);
-
-        return threadLocale;
-    }
-
-    public void test_Supplied_By_Request()
-    {
-        CookieSource source = newMock(CookieSource.class);
-        
-        WebRequest request = newRequest();
-
-        ThreadLocale tl = newThreadLocale();
-
-        // Training
-
-        expect(source.readCookieValue(TapestryConstants.LOCALE_COOKIE_NAME)).andReturn(null);
-
-        expect(request.getLocale()).andReturn(Locale.JAPANESE);
-
-        tl.setLocale(Locale.JAPANESE);
-
-        replay();
-
-        RequestLocaleManagerImpl manager = new RequestLocaleManagerImpl();
-        manager.setCookieSource(source);
-        manager.setRequest(request);
-        manager.setThreadLocale(tl);
-
-        Locale actual = manager.extractLocaleForCurrentRequest();
-
-        assertEquals(Locale.JAPANESE, actual);
-
-        verify();
-    }
-
-    private void attempt(String localeName, Locale expectedLocale)
-    {
-        CookieSource source = newMock(CookieSource.class);
-
-        ThreadLocale tl = newThreadLocale();
-
-        // Training
-
-        expect(source.readCookieValue(TapestryConstants.LOCALE_COOKIE_NAME)).andReturn(localeName);
-
-        tl.setLocale(expectedLocale);
-
-        replay();
-
-        RequestLocaleManagerImpl manager = new RequestLocaleManagerImpl();
-        manager.setCookieSource(source);
-        manager.setThreadLocale(tl);
-
-        Locale actual = manager.extractLocaleForCurrentRequest();
-
-        assertEquals(expectedLocale, actual);
-
-        verify();
-    }
-
-    public void test_Just_Language()
-    {
-        attempt("en", Locale.ENGLISH);
-    }
-
-    public void test_Language_And_Country()
-    {
-        attempt("fr_FR", Locale.FRANCE);
-    }
-
-    public void test_With_Variant()
-    {
-        attempt("en_US_Bahstohn", new Locale("en", "US", "Bahstohn"));
-    }
-
-    public void test_Persist()
-    {
-        Locale locale = Locale.SIMPLIFIED_CHINESE;
-
-        CookieSource source = newMock(CookieSource.class);
-        ThreadLocale threadLocale = newThreadLocale(locale);
-
-        // Training
-
-        source.writeCookieValue(TapestryConstants.LOCALE_COOKIE_NAME, locale.toString());
-
-        replay();
-
-        RequestLocaleManagerImpl m = new RequestLocaleManagerImpl();
-        m.setCookieSource(source);
-        m.setThreadLocale(threadLocale);
-
-        m.persistLocale();
-
-        verify();
-    }
-
-    public void test_Persist_No_Change()
-    {
-        CookieSource source = newMock(CookieSource.class);
-        
-        WebRequest request = newRequest();
-        
-        ThreadLocale tl = newMock(ThreadLocale.class);
-
-        // Training
-
-        expect(source.readCookieValue(TapestryConstants.LOCALE_COOKIE_NAME)).andReturn(null);
-        
-        expect(request.getLocale()).andReturn(Locale.JAPANESE);
-
-        tl.setLocale(Locale.JAPANESE);
-
-        replay();
-
-        RequestLocaleManagerImpl manager = new RequestLocaleManagerImpl();
-        manager.setCookieSource(source);
-        manager.setRequest(request);
-        manager.setThreadLocale(tl);
-
-        Locale actual = manager.extractLocaleForCurrentRequest();
-
-        assertEquals(Locale.JAPANESE, actual);
-
-        verify();
-
-        expect(tl.getLocale()).andReturn(Locale.JAPANESE);
-
-        replay();
-
-        // Should do nothing, beacuse it isn't a change.
-
-        manager.persistLocale();
-
-        verify();
-    }
-
-    public void test_Get_Locale_Values_Are_Cached()
-    {
-        RequestLocaleManagerImpl manager = new RequestLocaleManagerImpl();
-
-        Locale l1 = manager.getLocale("en");
-        Locale l2 = manager.getLocale("en");
-
-        assertSame(l1, l2);
-    }
-
-    /**
-     * Test when filtering of incoming locales is disabled.
-     */
-
-    public void test_Filter_Disabled()
-    {
-        RequestLocaleManagerImpl manager = new RequestLocaleManagerImpl();
-
-        Locale l = manager.filterRequestedLocale("en");
-
-        assertEquals(Locale.ENGLISH, l);
-    }
-
-    /**
-     * Test with filtering enabled.
-     */
-
-    public void test_Filter_Enabled()
-    {
-        RequestLocaleManagerImpl manager = new RequestLocaleManagerImpl();
-        manager.setAcceptedLocales("en,fr");
-        manager.initializeService();
-
-        assertEquals(manager.filterRequestedLocale("en"), Locale.ENGLISH);
-        assertEquals(manager.filterRequestedLocale("en_US"), Locale.ENGLISH);
-        assertEquals(manager.filterRequestedLocale("fr"), Locale.FRENCH);
-        assertEquals(manager.filterRequestedLocale("fr_FR"), Locale.FRENCH);
-
-        // Unrecognized locales filter to the first accepted locale.
-
-        assertEquals(manager.filterRequestedLocale("foo_bar_BAZ"), Locale.ENGLISH);
-    }
-
-    public void test_Filter_Best_Guess()
-    {
-        RequestLocaleManagerImpl manager = new RequestLocaleManagerImpl();
-        manager.setAcceptedLocales("en_US,fr_FR");
-        manager.initializeService();
-
-        assertEquals(manager.filterRequestedLocale("en"), Locale.US);
-        assertEquals(manager.filterRequestedLocale("en_GB"), Locale.US);
-        assertEquals(manager.filterRequestedLocale("fr"), Locale.FRANCE);
-        assertEquals(manager.filterRequestedLocale("fr_FR"), Locale.FRANCE);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestServiceMap.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestServiceMap.java
deleted file mode 100644
index 5894ef6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestServiceMap.java
+++ /dev/null
@@ -1,256 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.ServiceMapImpl}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestServiceMap extends BaseComponentTestCase
-{
-    private IEngineService newService(String name)
-    {
-        IEngineService service = newMock(IEngineService.class);
-        checkOrder(service, false);
-        
-        expect(service.getName()).andReturn(name);
-
-        return service;
-    }
-
-    private IEngineService newService()
-    {
-        return newMock(IEngineService.class);
-    }
-    
-    private EngineServiceContribution constructService(String name, IEngineService service)
-    {
-        EngineServiceContribution result = new EngineServiceContribution();
-        result.setName(name);
-        result.setService(service);
-
-        return result;
-    }
-
-    /**
-     * Gets an application-defined and factory-defined service where there are no naming conflicts.
-     * Because ServiceMap now returns proxies, we have to do a little extra indirection to ensure
-     * that we get what's expected.
-     */
-    public void testGetNoConflict() throws Exception
-    {
-        IRequestCycle cycle1 = newCycle();
-        IRequestCycle cycle2 = newCycle();
-
-        IEngineService factory = newService("factory");
-        IEngineService application = newService("application");
-
-        EngineServiceContribution factoryc = constructService("factory", factory);
-        EngineServiceContribution applicationc = constructService("application", application);
-
-        factory.service(cycle1);
-        application.service(cycle2);
-
-        replay();
-
-        ServiceMapImpl m = new ServiceMapImpl();
-
-        m.setFactoryServices(Collections.singletonList(factoryc));
-        m.setApplicationServices(Collections.singletonList(applicationc));
-
-        m.initializeService();
-
-        assertEquals(true, m.isValid("factory"));
-
-        m.getService("factory").service(cycle1);
-
-        assertEquals(true, m.isValid("application"));
-
-        m.getService("application").service(cycle2);
-
-        verify();
-    }
-
-    public void testNameMismatch() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        Location l = fabricateLocation(1289);
-
-        IEngineService service = newService("actual-name");
-
-        EngineServiceContribution contribution = constructService("expected-name", service);
-        contribution.setLocation(l);
-
-        replay();
-
-        ServiceMapImpl m = new ServiceMapImpl();
-
-        m.setFactoryServices(Collections.singletonList(contribution));
-        m.setApplicationServices(Collections.EMPTY_LIST);
-
-        m.initializeService();
-
-        IEngineService proxy = m.getService("expected-name");
-
-        try
-        {
-            proxy.service(cycle);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Engine service EasyMock for interface org.apache.tapestry.engine.IEngineService is mapped to name 'expected-name' but indicates a name of 'actual-name'.",
-                    ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    public void testGetServiceRepeated()
-    {
-        IEngineService application = newService();
-        EngineServiceContribution applicationc = constructService("application", application);
-
-        replay();
-
-        ServiceMapImpl m = new ServiceMapImpl();
-
-        m.setFactoryServices(Collections.EMPTY_LIST);
-        m.setApplicationServices(Collections.singletonList(applicationc));
-
-        m.initializeService();
-
-        IEngineService service = m.getService("application");
-        assertSame(service, m.getService("application"));
-
-        verify();
-    }
-
-    public void testApplicationOverridesFactory() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        IEngineService factory = newService();
-        IEngineService application = newService("override");
-
-        EngineServiceContribution factoryc = constructService("override", factory);
-        EngineServiceContribution applicationc = constructService("override", application);
-
-        application.service(cycle);
-
-        replay();
-
-        ServiceMapImpl m = new ServiceMapImpl();
-
-        m.setFactoryServices(Collections.singletonList(factoryc));
-        m.setApplicationServices(Collections.singletonList(applicationc));
-
-        m.initializeService();
-
-        m.getService("override").service(cycle);
-
-        verify();
-    }
-
-    public void testUnknownService()
-    {
-        ServiceMapImpl m = new ServiceMapImpl();
-
-        m.setFactoryServices(Collections.EMPTY_LIST);
-        m.setApplicationServices(Collections.EMPTY_LIST);
-
-        m.initializeService();
-
-        assertEquals(false, m.isValid("missing"));
-
-        try
-        {
-            m.getService("missing");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(ImplMessages.noSuchService("missing"), ex.getMessage());
-        }
-
-        try
-        {
-            m.resolveEngineService("resolve-missing");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(ImplMessages.noSuchService("resolve-missing"), ex.getMessage());
-
-        }
-    }
-
-    public void testDuplicateName() throws Exception
-    {
-        Location l = fabricateLocation(37);
-        IRequestCycle cycle = newCycle();
-
-        IEngineService first = newService("duplicate");
-        IEngineService second = newService();
-
-        EngineServiceContribution firstc = constructService("duplicate", first);
-        firstc.setLocation(l);
-        
-        EngineServiceContribution secondc = constructService("duplicate", second);
-        
-        List list = new ArrayList();
-        list.add(firstc);
-        list.add(secondc);
-
-        ErrorLog log = newMock(ErrorLog.class);
-
-        first.service(cycle);
-        
-        log.error(ImplMessages.dupeService("duplicate", firstc), l, null);
-
-        replay();
-
-        ServiceMapImpl m = new ServiceMapImpl();
-
-        m.setFactoryServices(list);
-        m.setApplicationServices(Collections.EMPTY_LIST);
-        m.setErrorLog(log);
-
-        m.initializeService();
-
-        m.getService("duplicate").service(cycle);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestSetupRequestEncoding.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestSetupRequestEncoding.java
deleted file mode 100644
index 338ec54..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestSetupRequestEncoding.java
+++ /dev/null
@@ -1,202 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.services.impl;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import java.io.UnsupportedEncodingException;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.services.ServletRequestServicer;
-import org.testng.annotations.Test;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Tests for {@link org.apache.tapestry.services.impl.SetupRequestEncoding}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestSetupRequestEncoding extends BaseComponentTestCase
-{
-    private HttpServletRequest newRequest(String encoding)
-    {
-        HttpServletRequest request = newMock(HttpServletRequest.class);
-
-        expect(request.getCharacterEncoding()).andReturn(encoding);
-
-        return request;
-    }
-
-    private HttpServletResponse newResponse()
-    {
-        return newMock(HttpServletResponse.class);
-    }
-
-    private ServletRequestServicer newServicer()
-    {
-        return newMock(ServletRequestServicer.class);
-    }
-
-    public void testEncodingNotNull() throws Exception
-    {
-        HttpServletRequest request = newRequest("utf-8");
-        HttpServletResponse response = newResponse();
-        ServletRequestServicer servicer = newServicer();
-
-        servicer.service(request, response);
-
-        replay();
-
-        SetupRequestEncoding sre = new SetupRequestEncoding();
-        sre.setOutputEncoding("output-encoding");
-
-        sre.service(request, response, servicer);
-
-        verify();
-    }
-
-    public void testEncodingNull() throws Exception
-    {
-        HttpServletRequest request = newRequest(null);
-        HttpServletResponse response = newResponse();
-        ServletRequestServicer servicer = newServicer();
-
-        request.setCharacterEncoding("output-encoding");
-
-        servicer.service(request, response);
-
-        replay();
-
-        SetupRequestEncoding sre = new SetupRequestEncoding();
-        sre.setOutputEncoding("output-encoding");
-
-        sre.service(request, response, servicer);
-
-        verify();
-    }
-
-    public void testUnsupportedEncoding() throws Exception
-    {
-        HttpServletRequest request = newMock(HttpServletRequest.class);
-
-        HttpServletResponse response = newResponse();
-        ServletRequestServicer servicer = newServicer();
-
-        Throwable t = new UnsupportedEncodingException("Bad encoding.");
-
-        expect(request.getCharacterEncoding()).andReturn(null);
-
-        request.setCharacterEncoding("output-encoding");
-        expectLastCall().andThrow(t);
-
-        replay();
-
-        SetupRequestEncoding sre = new SetupRequestEncoding();
-        sre.setOutputEncoding("output-encoding");
-
-        try
-        {
-            sre.service(request, response, servicer);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Unable to set request character encoding to 'output-encoding': Bad encoding.",
-                    ex.getMessage());
-            assertSame(t, ex.getRootCause());
-        }
-
-        verify();
-    }
-
-    public void testNoSuchMethodError() throws Exception
-    {
-        HttpServletRequest request = newMock(HttpServletRequest.class);
-
-        HttpServletResponse response = newResponse();
-        ServletRequestServicer servicer = newServicer();
-
-        Throwable t = new NoSuchMethodError();
-
-        expect(request.getCharacterEncoding()).andReturn(null);
-
-        request.setCharacterEncoding("output-encoding");
-        expectLastCall().andThrow(t);
-
-        servicer.service(request, response);
-
-        replay();
-
-        SetupRequestEncoding sre = new SetupRequestEncoding();
-        sre.setOutputEncoding("output-encoding");
-
-        sre.service(request, response, servicer);
-
-        verify();
-
-        // Check that, after such an error, we don't even try to do it again.
-
-        servicer.service(request, response);
-
-        replay();
-
-        sre.service(request, response, servicer);
-
-        verify();
-    }
-    
-    public void testAbstractMethodError() throws Exception
-    {
-        HttpServletRequest request = newMock(HttpServletRequest.class);
-
-        HttpServletResponse response = newResponse();
-        ServletRequestServicer servicer = newServicer();
-
-        Throwable t = new AbstractMethodError();
-
-        expect(request.getCharacterEncoding()).andReturn(null);
-
-        request.setCharacterEncoding("output-encoding");
-        expectLastCall().andThrow(t);
-
-        servicer.service(request, response);
-
-        replay();
-
-        SetupRequestEncoding sre = new SetupRequestEncoding();
-        sre.setOutputEncoding("output-encoding");
-
-        sre.service(request, response, servicer);
-
-        verify();
-
-        // Check that, after such an error, we don't even try to do it again.
-
-        servicer.service(request, response);
-
-        replay();
-
-        sre.service(request, response, servicer);
-
-        verify();
-    }    
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/WebContextInitializerTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/WebContextInitializerTest.java
deleted file mode 100644
index 300774d..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/impl/WebContextInitializerTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.services.impl;

-

-import static org.easymock.EasyMock.expect;

-

-import org.apache.tapestry.BaseComponentTestCase;

-import org.apache.tapestry.services.ApplicationGlobals;

-import org.testng.annotations.Test;

-

-import javax.servlet.ServletConfig;

-import javax.servlet.ServletContext;

-import javax.servlet.http.HttpServlet;

-

-/**

- * Tests for {@link org.apache.tapestry.services.impl.WebContextInitializer}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class WebContextInitializerTest extends BaseComponentTestCase

-{

-

-    public void testInitializer()

-    throws Exception

-    {

-        HttpServlet servlet = new ServletFixture();

-        

-        ServletContext servletContext = newMock(ServletContext.class);

-        

-        ServletConfig config = newMock(ServletConfig.class);

-        

-        expect(config.getServletContext()).andReturn(servletContext);

-        

-        replay();

-        

-        servlet.init(config);

-        

-        ApplicationGlobals globals = new ApplicationGlobalsImpl();

-        

-        WebContextInitializer initializer = new WebContextInitializer();

-        

-        initializer.setGlobals(globals);

-        

-        initializer.initialize(servlet);

-        

-        verify();

-        

-        assertSame(servletContext, globals.getServletContext());

-        assertNotNull(globals.getWebContext());

-    }

-

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/squeezer-pipeline.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/squeezer-pipeline.xml
deleted file mode 100644
index 7a7d61a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/services/squeezer-pipeline.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2006 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="squeezer.pipeline" version="1.0.0">
-  <contribution configuration-id="tapestry.data.DataSqueezerFilters">
-    <filter name="dummy" object="instance:org.apache.tapestry.services.DummyFilter" />
-  </contribution>
-</module>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/spec/TestComponentSpecification.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/spec/TestComponentSpecification.java
deleted file mode 100644
index 38971ef..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/spec/TestComponentSpecification.java
+++ /dev/null
@@ -1,256 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.internal.event.ComponentEventProperty;
-import org.apache.tapestry.internal.event.EventBoundListener;
-import org.testng.annotations.Test;
-
-/**
- * Tests a number of <em>failure</em> cases in
- * {@link org.apache.tapestry.spec.ComponentSpecification}. Success cases are covered by
- * {@link org.apache.tapestry.junit.parse.TestSpecificationParser} and the (ugly and slow) mock
- * integration tests.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestComponentSpecification extends BaseComponentTestCase
-{
-    public void test_Claim_Property_OK()
-    {
-        InjectSpecificationImpl inject1 = new InjectSpecificationImpl();
-        inject1.setProperty("fred");
-
-        InjectSpecificationImpl inject2 = new InjectSpecificationImpl();
-        inject2.setProperty("barney");
-
-        ComponentSpecification cs = new ComponentSpecification();
-
-        cs.addInjectSpecification(inject1);
-        cs.addInjectSpecification(inject2);
-
-        assertEquals(2, cs.getInjectSpecifications().size());
-    }
-
-    public void test_Claim_Property_Conflict()
-    {
-        Location l1 = fabricateLocation(13);
-        Location l2 = fabricateLocation(97);
-
-        InjectSpecificationImpl inject1 = new InjectSpecificationImpl();
-        inject1.setProperty("fred");
-        inject1.setLocation(l1);
-
-        InjectSpecificationImpl inject2 = new InjectSpecificationImpl();
-        inject2.setProperty("fred");
-        inject2.setLocation(l2);
-
-        ComponentSpecification cs = new ComponentSpecification();
-
-        cs.addInjectSpecification(inject1);
-
-        try
-        {
-            cs.addInjectSpecification(inject2);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(SpecMessages.claimedProperty("fred", inject1), ex.getMessage());
-            assertSame(l2, ex.getLocation());
-        }
-
-        assertEquals(1, cs.getInjectSpecifications().size());
-    }
-
-    public void test_Add_Asset_Conflict()
-    {
-        Location l1 = fabricateLocation(13);
-        Location l2 = fabricateLocation(97);
-
-        AssetSpecification asset1 = new AssetSpecification();
-        asset1.setLocation(l1);
-
-        AssetSpecification asset2 = new AssetSpecification();
-        asset2.setLocation(l2);
-
-        ComponentSpecification cs = new ComponentSpecification();
-
-        cs.addAsset("wilma", asset1);
-        try
-        {
-            cs.addAsset("wilma", asset2);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(SpecMessages.duplicateAsset("wilma", asset1), ex.getMessage());
-            assertSame(l2, ex.getLocation());
-        }
-    }
-
-    public void test_Add_Component_Conflict()
-    {
-        Location l1 = fabricateLocation(13);
-        Location l2 = fabricateLocation(97);
-
-        ContainedComponent cc1 = new ContainedComponent();
-        cc1.setLocation(l1);
-
-        ContainedComponent cc2 = new ContainedComponent();
-        cc2.setLocation(l2);
-
-        ComponentSpecification cs = new ComponentSpecification();
-
-        cs.addComponent("fred", cc1);
-        try
-        {
-            cs.addComponent("fred", cc2);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(SpecMessages.duplicateComponent("fred", cc1), ex.getMessage());
-            assertSame(l2, ex.getLocation());
-        }
-    }
-
-    public void test_Add_Parameter_Conflict()
-    {
-        Location l1 = fabricateLocation(13);
-        Location l2 = fabricateLocation(97);
-
-        ParameterSpecification p1 = new ParameterSpecification();
-        p1.setParameterName("dino");
-        p1.setLocation(l1);
-
-        ParameterSpecification p2 = new ParameterSpecification();
-        p2.setParameterName("dino");
-        p2.setLocation(l2);
-
-        ComponentSpecification cs = new ComponentSpecification();
-
-        cs.addParameter(p1);
-
-        try
-        {
-            cs.addParameter(p2);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(SpecMessages.duplicateParameter("dino", p1), ex.getMessage());
-            assertSame(l2, ex.getLocation());
-        }
-    }
-
-    public void test_Add_Bean_Specification_Conflict()
-    {
-        Location l1 = fabricateLocation(13);
-        Location l2 = fabricateLocation(97);
-
-        BeanSpecification b1 = new BeanSpecification();
-        b1.setLocation(l1);
-
-        BeanSpecification b2 = new BeanSpecification();
-        b2.setLocation(l2);
-
-        ComponentSpecification cs = new ComponentSpecification();
-
-        cs.addBeanSpecification("wilma", b1);
-
-        try
-        {
-            cs.addBeanSpecification("wilma", b2);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(SpecMessages.duplicateBean("wilma", b1), ex.getMessage());
-            assertSame(l2, ex.getLocation());
-        }
-    }
-
-    public void test_Get_Required_Parameters_None()
-    {
-        ComponentSpecification cs = new ComponentSpecification();
-
-        assertTrue(cs.getRequiredParameters().isEmpty());
-    }
-
-    public void test_Get_Required_Parameters_Optional()
-    {
-        ComponentSpecification cs = new ComponentSpecification();
-
-        ParameterSpecification ps = new ParameterSpecification();
-        ps.setParameterName("fred");
-        ps.setAliases("barney");
-
-        cs.addParameter(ps);
-
-        assertTrue(cs.getRequiredParameters().isEmpty());
-    }
-
-    public void test_Get_Required_Parameters_Filters_Aliases()
-    {
-        ComponentSpecification cs = new ComponentSpecification();
-
-        ParameterSpecification ps = new ParameterSpecification();
-        ps.setParameterName("fred");
-        ps.setAliases("barney");
-        ps.setRequired(true);
-
-        cs.addParameter(ps);
-
-        assertListEquals(new Object[] { ps }, cs.getRequiredParameters().toArray());
-    }
-
-    public void test_Rewire_Component_Id()
-    {
-        ComponentSpecification cs = new ComponentSpecification();
-        cs.addEventListener("comp", new String[] {"foo"}, "doFoo", null, false, true, false, false);
-
-        assertEquals(cs.getComponentEvents().size(), 1);
-        assert cs.getComponentEvents("comp") != null;
-
-        cs.rewireComponentId("unknown", "new/path");
-
-        assertEquals(cs.getComponentEvents().size(), 1);
-
-        cs.rewireComponentId("comp", "page/comp");
-        cs.rewireComponentId("comp", "page/comp");
-
-        assertEquals(cs.getComponentEvents().size(), 2);
-        assert cs.getComponentEvents("comp") != null;
-        assert cs.getComponentEvents("page/comp") != null;
-
-        ComponentEventProperty prop = cs.getComponentEvents("comp");
-        assertEquals(prop.getComponentId(), "comp");
-        assertEquals(prop.getEvents().size(), 1);
-        EventBoundListener listener = (EventBoundListener)prop.getEventListeners("foo").get(0);
-        assertEquals(listener.getComponentId(), "comp");
-
-        prop = cs.getComponentEvents("page/comp");
-        assertEquals(prop.getComponentId(), "page/comp");
-        assertEquals(prop.getEvents().size(), 1);
-        listener = (EventBoundListener)prop.getEventListeners("foo").get(0);
-        assertEquals(listener.getComponentId(), "page/comp");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/ArraySubject.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/ArraySubject.java
deleted file mode 100644
index 683c9f5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/ArraySubject.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test;
-
-/**
- * Used by {@link org.apache.tapestry.test.TestCreator}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public abstract class ArraySubject
-{
-    public abstract int[] getCounts();
-
-    public abstract void setCounts(int[] value);
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/AssertOutput.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/AssertOutput.xml
deleted file mode 100644
index fa52270..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/AssertOutput.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<test-script context="test-context">
-  <request>
-  	<assert-output>
-<![CDATA[
-<title>Away</title>
-]]>
-    </assert-output>
-  </request>
-</test-script>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/AssertRegexp.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/AssertRegexp.xml
deleted file mode 100644
index d530d7b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/AssertRegexp.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<test-script context="test-context">
-  <request>
-    <assert-regexp>
-<![CDATA[
-<body>.*</body>
-]]>
-    </assert-regexp>
-  </request>
-</test-script>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/AssertRegexpMatch.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/AssertRegexpMatch.xml
deleted file mode 100644
index 3263343..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/AssertRegexpMatch.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<test-script context="test-context">
-  <request>
-    <assert-regexp subgroup="1"> 
-<![CDATA[
-<(.*?)>
-]]> 
-    	<match>title</match>
-      <match>/title</match>
-      <match>body</match>
-      <match>/body</match>
-    </assert-regexp>
-  </request>
-</test-script>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/BooleanSubject.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/BooleanSubject.java
deleted file mode 100644
index 87d3bb9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/BooleanSubject.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test;
-
-/**
- * Used by {@link org.apache.tapestry.test.TestCreator}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public abstract class BooleanSubject
-{
-    public abstract boolean isKnown();
-
-    public abstract void setKnown(boolean value);
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/Empty.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/Empty.xml
deleted file mode 100644
index dca2025..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/Empty.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<test-script context="test-context" directory="root"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/EmptyMissingAttribute.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/EmptyMissingAttribute.xml
deleted file mode 100644
index 9532ee9..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/EmptyMissingAttribute.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<test-script directory="root"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/EmptyUnknownAttribute.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/EmptyUnknownAttribute.xml
deleted file mode 100644
index e42b467..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/EmptyUnknownAttribute.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<test-script cntext="test-context" directory="root"/>
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/InheritedSubject.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/InheritedSubject.java
deleted file mode 100644
index 65a6c67..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/InheritedSubject.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test;
-
-/**
- * Used by {@link org.apache.tapestry.test.TestCreator}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public abstract class InheritedSubject extends IntSubject
-{
-
-    public abstract boolean getFlag();
-
-    public abstract void setFlag(boolean flag);
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/InitParameter.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/InitParameter.xml
deleted file mode 100644
index 29087aa..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/InitParameter.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<test-script context="test-context" directory="root">
-  <servlet name="default" class="MyClass">
-    <init-parameter name="p1" value="v1"/>
-    <init-parameter name="p2" value="v2"/>
-  </servlet>
-    
-  <servlet name="other">
-    <init-parameter name="p3" value="v3"/>
-  </servlet>
-</test-script>
-
-
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/IntSubject.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/IntSubject.java
deleted file mode 100644
index 208e1ff..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/IntSubject.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test;
-
-/**
- * Used by {@link org.apache.tapestry.test.TestCreator}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public abstract class IntSubject
-{
-    public abstract int getPriority();
-
-    public abstract void setPriority(int value);
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/Request.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/Request.xml
deleted file mode 100644
index 5c48ba0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/Request.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<test-script context="test-context" directory="root">
-	<request servlet="alpha"/>
-	
-	<request servlet="beta" servlet-path="/beta"/>
-</test-script>
-
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/RequestParameters.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/RequestParameters.xml
deleted file mode 100644
index d5d0c9e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/RequestParameters.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<test-script context="test-context" directory="root">
-  <servlet name="default"/>
-  
-  <request servlet="alpha">
-  	<parameter name="foo" value="manchu"/>
-  	<parameter name="flintstone" value="fred"/>
-  	<parameter name="flintstone" value="wilma"/>
-  </request>
-  
-  <request>
-    <parameter name="flintstone" value="pebbles"/>
-  </request>
-</test-script>
-
-
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/Servlet.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/Servlet.xml
deleted file mode 100644
index 18967c6..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/Servlet.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<test-script context="test-context" directory="root">
-  <servlet name="default" class="MyClass"/>
-  <servlet name="other"/>
-</test-script>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/ServletDuplicateName.xml b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/ServletDuplicateName.xml
deleted file mode 100644
index bb9732f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/ServletDuplicateName.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2004, 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<test-script context="test-context" directory="root">
-  <servlet name="default"/>
-  <servlet name="default"/>
-</test-script>
-
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/StringSubject.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/StringSubject.java
deleted file mode 100644
index 3c192b7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/StringSubject.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test;
-
-/**
- * Used by {@link org.apache.tapestry.test.TestCreator}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public abstract class StringSubject
-{
-    public abstract String getTitle();
-
-    public abstract void setTitle(String title);
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/TestCreator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/TestCreator.java
deleted file mode 100644
index 4d36af1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/TestCreator.java
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test;
-
-import java.util.List;
-
-import org.apache.hivemind.Messages;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.test.Creator}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestCreator extends BaseComponentTestCase
-{
-
-    public void testInterface() throws Exception
-    {
-
-        try
-        {
-            Creator c = new Creator();
-
-            c.newInstance(List.class);
-            unreachable();
-        }
-        catch (IllegalArgumentException ex)
-        {
-            assertEquals(
-                    ex.getMessage(),
-                    "Can not create instance of java.util.List. Interfaces, arrays and primitive types may not be enhanced.");
-        }
-
-    }
-
-    public void testObjectType()
-    {
-        Creator c = new Creator();
-
-        StringSubject s = (StringSubject) c.newInstance(StringSubject.class);
-
-        s.setTitle("title");
-
-        assertEquals("title", s.getTitle());
-    }
-
-    public void testPrimitiveType()
-    {
-        Creator c = new Creator();
-
-        IntSubject s = (IntSubject) c.newInstance(IntSubject.class);
-
-        s.setPriority(-1);
-
-        assertEquals(-1, s.getPriority());
-    }
-
-    public void testArrayType()
-    {
-        Creator c = new Creator();
-
-        ArraySubject s = (ArraySubject) c.newInstance(ArraySubject.class);
-
-        int[] counts = new int[]
-        { 3, 7, 9 };
-
-        s.setCounts(counts);
-
-        assertSame(counts, s.getCounts());
-    }
-
-    public void testInherited()
-    {
-        Creator c = new Creator();
-
-        InheritedSubject s = (InheritedSubject) c.newInstance(InheritedSubject.class);
-
-        s.setFlag(true);
-        s.setPriority(5);
-
-        assertEquals(true, s.getFlag());
-        assertEquals(5, s.getPriority());
-    }
-
-    public void testMethodNameNotOverriden()
-    {
-        Creator c = new Creator();
-
-        BooleanSubject s = (BooleanSubject) c.newInstance(BooleanSubject.class);
-
-        s.setKnown(true);
-
-        assertEquals(true, s.isKnown());
-    }
-
-    public void testUniqueInstances()
-    {
-        Creator c = new Creator();
-
-        StringSubject s1 = (StringSubject) c.newInstance(StringSubject.class);
-        StringSubject s2 = (StringSubject) c.newInstance(StringSubject.class);
-
-        assertNotSame(s1, s2);
-    }
-
-    public void testInitializer()
-    {
-        Creator c = new Creator();
-
-        StringSubject ss = (StringSubject) c.newInstance(StringSubject.class, new Object[]
-        { "title", "Hitchhiker's Guide" });
-
-        assertEquals("Hitchhiker's Guide", ss.getTitle());
-    }
-
-    public void testSpecificationProperty()
-    {
-        IComponentSpecification spec = newMock(IComponentSpecification.class);
-
-        replay();
-
-        Creator c = new Creator();
-
-        IComponent component = (IComponent) c.newInstance(AbstractComponent.class, new Object[]
-        { "specification", spec });
-
-        assertSame(spec, component.getSpecification());
-
-        verify();
-    }
-
-    public void testMessagesProperty()
-    {
-        Messages messages = newMock(Messages.class);
-
-        replay();
-
-        Creator c = new Creator();
-
-        IComponent component = (IComponent) c.newInstance(AbstractComponent.class, new Object[]
-        { "messages", messages });
-
-        assertSame(messages, component.getMessages());
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/AttributeHolder.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/AttributeHolder.java
deleted file mode 100644
index ac3608f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/AttributeHolder.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test.mock;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-
-/**
- *  
- * Base class for holders of named attributes such as
- * {@link javax.servlet.http.HttpSession}, 
- * {@link javax.servlet.http.HttpServletRequest}
- * and {@link javax.servlet.ServletContext}.
- *
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-public class AttributeHolder
-{
-    private Map _attributes = new HashMap();
-
-    public Object getAttribute(String name)
-    {
-        return _attributes.get(name);
-    }
-
-    public Enumeration getAttributeNames()
-    {
-        return getEnumeration(_attributes);
-    }
-
-    protected Enumeration getEnumeration(Map map)
-    {
-        return Collections.enumeration(map.keySet());
-    }
-
-    public String[] getAttributeNamesArray()
-    {
-        Set keys = _attributes.keySet();
-        int count = keys.size();
-
-        String[] array = new String[count];
-
-        return (String[]) keys.toArray(array);
-    }
-
-    public void setAttribute(String name, Object value)
-    {
-        _attributes.put(name, value);
-    }
-
-    public void removeAttribute(String name)
-    {
-        _attributes.remove(name);
-    }
-
-    /**
-     *  Serializes and then deserializes the {@link Map}
-     *  containing all attributes.
-     * 
-     **/
-
-    public void simulateFailover()
-    {
-        byte[] serialized = serializeAttributes();
-
-        _attributes = null;
-
-        Map restoredAttributes = deserializeAttributes(serialized);
-
-        _attributes = restoredAttributes;
-    }
-
-    private byte[] serializeAttributes()
-    {
-        try
-        {
-            ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            ObjectOutputStream oos = new ObjectOutputStream(bos);
-
-            oos.writeObject(_attributes);
-
-            oos.close();
-
-            return bos.toByteArray();
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException("Unable to serialize attributes.", ex);
-        }
-    }
-
-    private Map deserializeAttributes(byte[] serialized)
-    {
-        try
-        {
-            ByteArrayInputStream bis = new ByteArrayInputStream(serialized);
-            ObjectInputStream ois = new ObjectInputStream(bis);
-
-            Map result = (Map) ois.readObject();
-
-            return result;
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException("Unable to deserialize attributes.", ex);
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/InitParameterHolder.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/InitParameterHolder.java
deleted file mode 100644
index 76960c0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/InitParameterHolder.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test.mock;
-
-import java.util.Enumeration;
-
-/**
- *  Common interface for several mock objects that can contain
- *  initial parameters.
- *
- *
- *  @author Howard Lewis Ship
- *  @since 4.0
- * 
- */
-
-public interface InitParameterHolder
-{
-    public String getInitParameter(String name);
-
-    public Enumeration getInitParameterNames();
-    
-    /**
-     *  Allows Mock objects to have initial parameters set.
-     * 
-     **/
-    
-    public void setInitParameter(String name, String value);
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockContext.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockContext.java
deleted file mode 100644
index 296050f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockContext.java
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test.mock;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.Servlet;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-
-/**
- * Mock implementation of {@link javax.servlet.ServletContext}.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-public class MockContext extends AttributeHolder implements ServletContext, InitParameterHolder
-{
-    private MockSession _session;
-
-    private static final Map _suffixToContentType = new HashMap();
-
-    static {
-        _suffixToContentType.put("html", "text/html");
-        _suffixToContentType.put("gif", "image/gif");
-        _suffixToContentType.put("png", "image/png");
-    }
-
-    private String _rootDirectory;
-    private String _servletContextName = "test";
-    private Map _initParameters = new HashMap();
-
-    public MockContext()
-    {
-    }
-
-    public MockContext(String testDirectory)
-    {
-        _rootDirectory = testDirectory + "/context";
-    }
-
-    public ServletContext getContext(String name)
-    {
-        return null;
-    }
-
-    public int getMajorVersion()
-    {
-        return 2;
-    }
-
-    public int getMinorVersion()
-    {
-        return 1;
-    }
-
-    public String getMimeType(String path)
-    {
-        int lastx = path.lastIndexOf('.');
-        String suffix = path.substring(lastx + 1);
-
-        return (String) _suffixToContentType.get(suffix);
-    }
-
-    public Set getResourcePaths(String arg0)
-    {
-        return null;
-    }
-
-    public URL getResource(String path) throws MalformedURLException
-    {
-        if (path == null || !path.startsWith("/"))
-            throw new MalformedURLException("Not a valid context path.");
-
-        String fullPath = _rootDirectory + path;
-
-        File file = new File(fullPath);
-
-        if (file.exists())
-            return file.toURL();
-
-        return null;
-    }
-
-    public InputStream getResourceAsStream(String path)
-    {
-        try
-        {
-            URL url = getResource(path);
-
-            if (url == null)
-                return null;
-
-            return url.openStream();
-        }
-        catch (MalformedURLException ex)
-        {
-            return null;
-        }
-        catch (IOException ex)
-        {
-            return null;
-        }
-    }
-
-    /**
-     *  Gets a dispatcher for the given path.  Path should be a relative path (relative
-     *  to the context).  A special case:  "NULL" returns null (i.e., when a 
-     *  dispatcher can't be found).
-     * 
-     **/
-
-    public RequestDispatcher getRequestDispatcher(String path)
-    {
-        if (path.endsWith("/NULL"))
-            return null;
-
-        StringBuffer buffer = new StringBuffer(_rootDirectory);
-        buffer.append(path);
-
-        // Simulate the handling of directories by serving the index.html
-        // in the directory.
-
-        if (path.endsWith("/"))
-            buffer.append("index.html");
-
-        return new MockRequestDispatcher(buffer.toString());
-    }
-
-    public RequestDispatcher getNamedDispatcher(String name)
-    {
-        return null;
-    }
-
-    public Servlet getServlet(String name) throws ServletException
-    {
-        return null;
-    }
-
-    public Enumeration getServlets()
-    {
-        return null;
-    }
-
-    public Enumeration getServletNames()
-    {
-        return null;
-    }
-
-    public void log(String message)
-    {
-        log(message, null);
-    }
-
-    public void log(Exception exception, String message)
-    {
-        log(message, exception);
-    }
-
-    public void log(String message, Throwable exception)
-    {
-    }
-
-    public String getRealPath(String arg0)
-    {
-        return null;
-    }
-
-    public String getContextPath()
-    {
-        return null;
-    }
-    
-    public String getServerInfo()
-    {
-        return "Tapestry Mock Objects";
-    }
-
-    public String getInitParameter(String name)
-    {
-        return (String) _initParameters.get(name);
-    }
-
-    public Enumeration getInitParameterNames()
-    {
-        return Collections.enumeration(_initParameters.keySet());
-    }
-
-    public void setInitParameter(String name, String value)
-    {
-        _initParameters.put(name, value);
-    }
-
-    public String getServletContextName()
-    {
-        return _servletContextName;
-    }
-
-    public MockSession createSession()
-    {
-        if (_session == null)
-        {
-            String id = Long.toHexString(System.currentTimeMillis());
-
-            _session = new MockSession(this, id);
-        }
-
-        return _session;
-    }
-
-    public MockSession getSession()
-    {
-        return _session;
-    }
-
-    public void setServletContextName(String servletContextName)
-    {
-        _servletContextName = servletContextName;
-    }
-
-    public String getRootDirectory()
-    {
-        return _rootDirectory;
-    }
-
-    public void setRootDirectory(String rootDirectory)
-    {
-        _rootDirectory = rootDirectory;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockRequest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockRequest.java
deleted file mode 100644
index cd650ec..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockRequest.java
+++ /dev/null
@@ -1,443 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test.mock;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-/**
- * Mock implementation of {@link javax.servlet.http.HttpServletRequest}.
- *
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-public class MockRequest extends AttributeHolder implements HttpServletRequest
-{
-    /**
-     * HTTP content type header name.
-     */
-    private static final String CONTENT_TYPE_HEADER_KEY = "Content-type";
-    /**
-     *  Map of String[].
-     * 
-     */
-
-    private Map _parameters = new HashMap();
-
-    /**
-     *  Map of String[]
-     * 
-     */
-
-    private Map _headers = new HashMap();
-
-    private String _method = "GET";
-
-    private String _contextPath;
-
-    private MockContext _servletContext;
-    private MockSession _session;
-    private String _servletPath;
-    private List _cookies = new ArrayList();
-    private String _contentPath;
-
-    /**
-     *  This can be stored within the header, but doing it this way emulates a browser that 
-     *  does not put the encoding in the request, which appears to be the general case. 
-     */
-    private String _encoding = null;
-
-    public MockRequest(MockContext servletContext, String servletPath)
-    {
-        _servletContext = servletContext;
-
-        _contextPath = "/" + servletContext.getServletContextName();
-        _servletPath = servletPath;
-
-        _session = _servletContext.getSession();
-    }
-
-    public String getAuthType()
-    {
-        return null;
-    }
-
-    public Cookie[] getCookies()
-    {
-        return (Cookie[]) _cookies.toArray(new Cookie[_cookies.size()]);
-    }
-
-    public long getDateHeader(String arg0)
-    {
-        return 0;
-    }
-
-    public String getHeader(String key)
-    {
-        String getHeader = null;
-
-        if (key != null)
-        {
-            getHeader = (String) _headers.get(key.toLowerCase());
-        }
-        return getHeader;
-    }
-
-    public Enumeration getHeaders(String name)
-    {
-        String[] headers = (String[]) _headers.get(name);
-
-        if (headers == null)
-            return Collections.enumeration(Collections.EMPTY_LIST);
-
-        return Collections.enumeration(Arrays.asList(headers));
-    }
-
-    public Enumeration getHeaderNames()
-    {
-        return getEnumeration(_headers);
-    }
-
-    public int getIntHeader(String arg0)
-    {
-        return 0;
-    }
-
-    public String getMethod()
-    {
-        return _method;
-    }
-
-    public String getPathInfo()
-    {
-        return null;
-    }
-
-    public String getPathTranslated()
-    {
-        return null;
-    }
-
-    public String getContextPath()
-    {
-        return _contextPath;
-    }
-
-    public String getQueryString()
-    {
-        return null;
-    }
-
-    public String getRemoteUser()
-    {
-        return null;
-    }
-
-    public boolean isUserInRole(String arg0)
-    {
-        return false;
-    }
-
-    public Principal getUserPrincipal()
-    {
-        return null;
-    }
-
-    public String getRequestedSessionId()
-    {
-        return null;
-    }
-
-    public String getRequestURI()
-    {
-        return null;
-    }
-
-    public StringBuffer getRequestURL()
-    {
-        return null;
-    }
-
-    public String getServletPath()
-    {
-        return _servletPath;
-    }
-
-    public HttpSession getSession(boolean create)
-    {
-        if (create && _session == null)
-            _session = _servletContext.createSession();
-
-        return _session;
-    }
-
-    public HttpSession getSession()
-    {
-        return _session;
-    }
-
-    public boolean isRequestedSessionIdValid()
-    {
-        return false;
-    }
-
-    public boolean isRequestedSessionIdFromCookie()
-    {
-        return false;
-    }
-
-    public boolean isRequestedSessionIdFromURL()
-    {
-        return false;
-    }
-
-    public boolean isRequestedSessionIdFromUrl()
-    {
-        return false;
-    }
-
-    public String getCharacterEncoding()
-    {
-        return _encoding;
-    }
-
-    public void setCharacterEncoding(String arg0) throws UnsupportedEncodingException
-    {
-        _encoding = arg0;
-    }
-
-    public int getContentLength()
-    {
-        return 0;
-    }
-
-    public String getContentType()
-    {
-        return getHeader(CONTENT_TYPE_HEADER_KEY);
-    }
-
-    public void setContentType(String contentType)
-    {
-        setHeader(CONTENT_TYPE_HEADER_KEY, contentType);
-    }
-
-    public ServletInputStream getInputStream() throws IOException
-    {
-        if (_contentPath == null)
-            return null;
-
-        return new MockServletInputStream(_contentPath);
-    }
-
-    public String getParameter(String name)
-    {
-        String[] values = getParameterValues(name);
-
-        if (values == null || values.length == 0)
-            return null;
-
-        return values[0];
-    }
-
-    public Enumeration getParameterNames()
-    {
-        return Collections.enumeration(_parameters.keySet());
-    }
-
-    public String[] getParameterValues(String name)
-    {
-        return (String[]) _parameters.get(name);
-    }
-
-    /** 
-     *  Not part of 2.1 API, not used by Tapestry.
-     * 
-     */
-
-    public Map getParameterMap()
-    {
-        return null;
-    }
-
-    public String getProtocol()
-    {
-        return null;
-    }
-
-    public String getScheme()
-    {
-        return "http";
-    }
-
-    public String getServerName()
-    {
-        return "junit-test";
-    }
-
-    public int getServerPort()
-    {
-        return 80;
-    }
-
-    public BufferedReader getReader() throws IOException
-    {
-        return null;
-    }
-
-    public String getRemoteAddr()
-    {
-        return null;
-    }
-
-    public String getRemoteHost()
-    {
-        return null;
-    }
-
-    private Locale _locale = Locale.ENGLISH;
-
-    public Locale getLocale()
-    {
-        return _locale;
-    }
-
-    public void setLocale(Locale locale)
-    {
-        _locale = locale;
-    }
-
-    public Enumeration getLocales()
-    {
-        return Collections.enumeration(Collections.singleton(_locale));
-    }
-
-    public boolean isSecure()
-    {
-        return false;
-    }
-
-    public RequestDispatcher getRequestDispatcher(String path)
-    {
-        return _servletContext.getRequestDispatcher(path);
-    }
-
-    public String getRealPath(String arg0)
-    {
-        return null;
-    }
-
-    public void setContextPath(String contextPath)
-    {
-        _contextPath = contextPath;
-    }
-
-    public void setMethod(String method)
-    {
-        _method = method;
-    }
-
-    public void setParameter(String name, String[] values)
-    {
-        _parameters.put(name, values);
-    }
-
-    public void setParameter(String name, String value)
-    {
-        setParameter(name, new String[] { value });
-    }
-
-    public void addCookie(Cookie cookie)
-    {
-        _cookies.add(cookie);
-    }
-
-    public void addCookies(Cookie[] cookies)
-    {
-        if (cookies == null)
-            return;
-
-        for (int i = 0; i < cookies.length; i++)
-            addCookie(cookies[i]);
-    }
-
-    private void setHeader(String key, String value)
-    {
-        if (key != null)
-        {
-            _headers.put(key.toLowerCase(), value);
-        }
-    }
-
-    /**
-     *  Delegates this to the {@link MockSession}, if
-     *  it exists.
-     * 
-     */
-
-    public void simulateFailover()
-    {
-        if (_session != null)
-            _session.simulateFailover();
-    }
-
-    public String getContentPath()
-    {
-        return _contentPath;
-    }
-
-    public void setContentPath(String contentPath)
-    {
-        _contentPath = contentPath;
-    }
-
-    public int getRemotePort()
-    {
-        return 0;
-    }
-
-    public String getLocalName()
-    {
-        return null;
-    }
-
-    public String getLocalAddr()
-    {
-        return null;
-    }
-
-    public int getLocalPort()
-    {
-        return 0;
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockRequestDispatcher.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockRequestDispatcher.java
deleted file mode 100644
index a356dfb..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockRequestDispatcher.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test.mock;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-/**
- * Used to enable mock testing of internal request forwarding.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class MockRequestDispatcher implements RequestDispatcher
-{	
-	private String _resourcePath;
-	
-    public MockRequestDispatcher(String resourcePath)
-    {
-    	_resourcePath = resourcePath;
-    }
-
-    public void forward(ServletRequest request, ServletResponse response)
-        throws ServletException, IOException
-    {
-    	if (_resourcePath.endsWith("/FAIL_SERVLET"))
-    		throw new ServletException("Test-directed ServletException from RequestDispatcher forward().");
-    	
-    	// For testing purposes, assume we only forward to static HTML files.
-    	
-     	
-    	InputStream in = new FileInputStream(_resourcePath);
-
-   		response.setContentType("test/html");
-    	
-    	OutputStream out =	response.getOutputStream();
-
-    	
-    	byte[] buffer = new byte[1000];
-    	
-    	while (true)
-    	{
-    		int length = in.read(buffer);
-    		
-    		if (length < 0)
-    			break;
-    			
-    		out.write(buffer, 0, length);
-    	}
-    	
-    	in.close();
-    	out.close();
-    }
-
-    public void include(ServletRequest request, ServletResponse response)
-        throws ServletException, IOException
-    {
-    	throw new ServletException("MockRequestDispatcher.include() not supported.");
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockResponse.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockResponse.java
deleted file mode 100644
index b36098c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockResponse.java
+++ /dev/null
@@ -1,331 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test.mock;
-
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-import org.apache.tapestry.util.ContentType;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Mock implementation of {@link javax.servlet.http.HttpServletResponse}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-public class MockResponse implements HttpServletResponse
-{
-    private MockRequest _request;
-
-    private boolean _commited = false;
-
-    private ByteArrayOutputStream _outputByteStream;
-
-    private ServletOutputStream _outputStream;
-
-    private String _outputString;
-
-    private List _cookies = new ArrayList();
-
-    private String _redirectLocation;
-
-    private String _contentType = "text/html;charset=utf-8";
-
-    private class ServletOutputStreamImpl extends ServletOutputStream
-    {
-        private ServletOutputStreamImpl()
-        {
-        }
-
-        public void close() throws IOException
-        {
-            super.close();
-
-            if (_outputByteStream != null)
-                _outputByteStream.close();
-        }
-
-        public void write(byte[] b, int off, int len) throws IOException
-        {
-            commit();
-
-            _outputByteStream.write(b, off, len);
-        }
-
-        public void write(byte[] b) throws IOException
-        {
-            commit();
-
-            _outputByteStream.write(b);
-        }
-
-        public void write(int b) throws IOException
-        {
-            commit();
-
-            _outputByteStream.write(b);
-        }
-
-        private void commit()
-        {
-            if (!_commited)
-            {
-                _commited = true;
-                _outputByteStream = new ByteArrayOutputStream();
-            }
-        }
-    }
-
-    public MockResponse(MockRequest request)
-    {
-        _request = request;
-    }
-
-    public void addCookie(Cookie cookie)
-    {
-        _cookies.add(cookie);
-    }
-
-    public boolean containsHeader(String arg0)
-    {
-        return false;
-    }
-
-    public String encodeURL(String path)
-    {
-        return path;
-    }
-
-    public String encodeRedirectURL(String path)
-    {
-        return path;
-    }
-
-    public String encodeUrl(String path)
-    {
-        return encodeURL(path);
-    }
-
-    public String encodeRedirectUrl(String path)
-    {
-        return encodeRedirectURL(path);
-    }
-
-    public void sendError(int code, String message) throws IOException
-    {
-        if (_commited)
-            throw new IllegalStateException("sendError() when committed.");
-    }
-
-    public void sendError(int code) throws IOException
-    {
-        sendError(code, null);
-    }
-
-    public void sendRedirect(String location) throws IOException
-    {
-        if (_commited)
-            throw new IllegalStateException("sendRedirect() when committed.");
-
-        if (location.endsWith("/FAIL_IO"))
-            throw new IOException("Forced IOException in MockResponse.sendRedirect().");
-
-        _redirectLocation = location;
-
-        _commited = true;
-
-    }
-
-    public String getRedirectLocation()
-    {
-        return _redirectLocation;
-    }
-
-    public void setDateHeader(String name, long value)
-    {
-    }
-
-    public void addDateHeader(String name, long value)
-    {
-    }
-
-    public void setHeader(String name, String value)
-    {
-    }
-
-    public void addHeader(String name, String value)
-    {
-    }
-
-    public void setIntHeader(String name, int value)
-    {
-    }
-
-    public void addIntHeader(String name, int value)
-    {
-    }
-
-    public void setStatus(int name)
-    {
-    }
-
-    public void setStatus(int name, String arg1)
-    {
-    }
-
-    public String getCharacterEncoding()
-    {
-        return null;
-    }
-
-    public ServletOutputStream getOutputStream() throws IOException
-    {
-        if (_outputStream != null)
-            throw new IllegalStateException("getOutputStream() invoked more than once.");
-
-        _outputStream = new ServletOutputStreamImpl();
-
-        return _outputStream;
-    }
-
-    public PrintWriter getWriter() throws IOException
-    {
-        ContentType ct = new ContentType(_contentType);
-
-        String encoding = ct.getParameter("charset");
-
-        return new PrintWriter(new BufferedWriter(new OutputStreamWriter(getOutputStream(),
-                encoding)));
-    }
-
-    public void setContentLength(int arg0)
-    {
-    }
-
-    public void setContentType(String contentType)
-    {
-        _contentType = contentType;
-    }
-
-    public void setBufferSize(int arg0)
-    {
-    }
-
-    public int getBufferSize()
-    {
-        return 0;
-    }
-
-    public void flushBuffer() throws IOException
-    {
-    }
-
-    public void resetBuffer()
-    {
-    }
-
-    public boolean isCommitted()
-    {
-        return _commited;
-    }
-
-    public void reset()
-    {
-        _outputStream = null;
-    }
-
-    public void setLocale(Locale arg0)
-    {
-    }
-
-    public Locale getLocale()
-    {
-        return null;
-    }
-
-    /**
-     * Invoked by {@link org.apache.tapestry.junit.mock.TestMockApplications}after the test is complete, to
-     * close and otherwise finish up.
-     */
-
-    public void end() throws IOException
-    {
-        // For redirects, we may never open an output stream.
-
-        if (_outputStream != null)
-            _outputStream.close();
-    }
-
-    /**
-     * Converts the binary output stream back into a String.
-     */
-
-    public String getOutputString()
-    {
-        if (_outputString != null)
-            return _outputString;
-
-        if (_outputByteStream == null)
-            return null;
-
-        try
-        {
-            String encoding = _request.getCharacterEncoding();
-
-            if (encoding != null)
-                _outputString = new String(_outputByteStream.toByteArray(), encoding);
-        }
-        catch (UnsupportedEncodingException e)
-        {
-        }
-
-        if (_outputString == null)
-            _outputString = _outputByteStream.toString();
-
-        return _outputString;
-    }
-
-    public byte[] getResponseBytes()
-    {
-        return _outputByteStream.toByteArray();
-    }
-
-    public Cookie[] getCookies()
-    {
-        return (Cookie[]) _cookies.toArray(new Cookie[_cookies.size()]);
-    }
-
-    public String getContentType()
-    {
-        return _contentType;
-    }
-
-    public void setCharacterEncoding(String enc)
-    {
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockServletConfig.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockServletConfig.java
deleted file mode 100644
index 5cd4b47..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockServletConfig.java
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test.mock;
-
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-
-/**
- * An implementation of {@link javax.servlet.ServletConfig} used
- * for Mock testing. 
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-public class MockServletConfig implements ServletConfig, InitParameterHolder
-{
-    private String _name;
-    private ServletContext _context;
-    private Map _initParameters = new HashMap();
-
-    public MockServletConfig(String name, ServletContext context)
-    {
-        _name = name;
-        _context = context;
-    }
-
-    public String getInitParameter(String name)
-    {
-        return (String) _initParameters.get(name);
-    }
-
-    public Enumeration getInitParameterNames()
-    {
-        return Collections.enumeration(_initParameters.keySet());
-    }
-
-    public ServletContext getServletContext()
-    {
-        return _context;
-    }
-
-    public String getServletName()
-    {
-        return _name;
-    }
-
-    public void setInitParameter(String name, String value)
-    {
-        _initParameters.put(name, value);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockServletInputStream.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockServletInputStream.java
deleted file mode 100644
index 5897a29..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockServletInputStream.java
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test.mock;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.servlet.ServletInputStream;
-
-/**
- * Implementation of {@link ServletInputStream} used in mock object testing.
- * The data in the stream is provided by a binary file.  The implemenation
- * wraps around a {@link java.io.FileInputStream} redirecting all method
- * invocations to the inner stream.
- *
- * @author Howard Lewis Ship
- * @since 4.0
- */
-
-public class MockServletInputStream extends ServletInputStream
-{
-    private InputStream _inner;
-
-    public MockServletInputStream(String path) throws IOException
-    {
-        _inner = new FileInputStream(path);
-    }
-
-    public int read() throws IOException
-    {
-        return _inner.read();
-    }
-
-    public int available() throws IOException
-    {
-        return _inner.available();
-    }
-
-    public void close() throws IOException
-    {
-        _inner.close();
-    }
-
-    public synchronized void mark(int readlimit)
-    {
-        _inner.mark(readlimit);
-    }
-
-    public boolean markSupported()
-    {
-        return _inner.markSupported();
-    }
-
-    public int read(byte[] b, int off, int len) throws IOException
-    {
-        return _inner.read(b, off, len);
-    }
-
-    public int read(byte[] b) throws IOException
-    {
-        return _inner.read(b);
-    }
-
-    public synchronized void reset() throws IOException
-    {
-        _inner.reset();
-    }
-
-    public long skip(long n) throws IOException
-    {
-        return _inner.skip(n);
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockSession.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockSession.java
deleted file mode 100644
index 69a1bc3..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/test/mock/MockSession.java
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.test.mock;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionBindingListener;
-import javax.servlet.http.HttpSessionContext;
-
-/**
- *  Mock implementation of {@link javax.servlet.http.HttpSession}.
- *
- *
- *  @author Howard Lewis Ship
- *  @since 4.0
- */
-
-public class MockSession extends AttributeHolder implements HttpSession
-{
-    private MockContext _context;
-    private String _id;
-
-    public MockSession(MockContext context, String id)
-    {
-        _context = context;
-        _id = id;
-    }
-
-    public long getCreationTime()
-    {
-        return 0;
-    }
-
-    public String getId()
-    {
-        return _id;
-    }
-
-    public long getLastAccessedTime()
-    {
-        return 0;
-    }
-
-    public ServletContext getServletContext()
-    {
-        return _context;
-    }
-
-    public void setMaxInactiveInterval(int arg0)
-    {
-    }
-
-    public int getMaxInactiveInterval()
-    {
-        return 0;
-    }
-
-    public HttpSessionContext getSessionContext()
-    {
-        return null;
-    }
-
-    public Object getValue(String name)
-    {
-        return getAttribute(name);
-    }
-
-    public String[] getValueNames()
-    {
-        return getAttributeNamesArray();
-    }
-
-    public void putValue(String name, Object value)
-    {
-        setAttribute(name, value);
-    }
-
-    public void removeValue(String name)
-    {
-        removeAttribute(name);
-    }
-
-    public void invalidate()
-    {
-    }
-
-    public boolean isNew()
-    {
-        return false;
-    }
-
-    public void setAttribute(String name, Object value)
-    {
-        super.setAttribute(name, value);
-
-        if (value instanceof HttpSessionBindingListener)
-        {
-            HttpSessionBindingListener listener = (HttpSessionBindingListener) value;
-            HttpSessionBindingEvent event = new HttpSessionBindingEvent(this, name);
-
-            listener.valueBound(event);
-        }
-    }
-
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/DefaultPrimaryKeyConverterTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/DefaultPrimaryKeyConverterTest.java
deleted file mode 100644
index 88105ce..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/DefaultPrimaryKeyConverterTest.java
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.util;

-

-import java.util.List;

-

-import org.apache.hivemind.ApplicationRuntimeException;

-import org.apache.tapestry.BaseComponentTestCase;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.util.DefaultPrimaryKeyConverter}.

- * 

- * @author Howard M. Lewis Ship

- * @since 4.0

- */

-@Test

-public class DefaultPrimaryKeyConverterTest extends BaseComponentTestCase

-{

-    /**

-     * Test the starting values of a number of properties.

-     */

-    public void testInitialValues()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter();

-

-        assertTrue(cv.getAllValues().isEmpty());

-        assertTrue(cv.getValues().isEmpty());

-        assertTrue(cv.getDeletedValues().isEmpty());

-        assertNull(cv.getLastValue());

-    }

-

-    public void testAdd()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter();

-

-        cv.add("fred", "flintstone");

-

-        assertEquals("flintstone", cv.getLastValue());

-

-        cv.add("barney", "rubble");

-

-        assertEquals("rubble", cv.getLastValue());

-

-        List l = cv.getValues();

-

-        assertEquals("flintstone", l.get(0));

-        assertEquals("rubble", l.get(1));

-    }

-

-    public void testAddDuplicate()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter();

-

-        cv.add("fred", "flintstone");

-        cv.add("barney", "rubble");

-

-        try

-        {

-            cv.add("fred", "macmurray");

-            unreachable();

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertEquals("Key 'fred' already exists in this primary key converter.", ex

-                    .getMessage());

-        }

-    }

-

-    public void testClear()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter();

-

-        cv.add("fred", "flintstone");

-        cv.add("barney", "rubble");

-        cv.setDeleted(true);

-

-        cv.clear();

-

-        assertTrue(cv.getAllValues().isEmpty());

-        assertTrue(cv.getValues().isEmpty());

-        assertTrue(cv.getDeletedValues().isEmpty());

-        assertNull(cv.getLastValue());

-    }

-

-    public void testDelete()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter();

-

-        cv.add("fred", "flintstone");

-        cv.add("barney", "rubble");

-

-        assertEquals("flintstone", cv.getValue("fred"));

-

-        assertEquals(false, cv.isDeleted());

-

-        assertTrue(cv.getDeletedValues().isEmpty());

-

-        assertEquals("flintstone", cv.getLastValue());

-

-        cv.setDeleted(true);

-

-        assertEquals(true, cv.isDeleted());

-

-        assertTrue(cv.getDeletedValues().contains("flintstone"));

-        assertFalse(cv.getValues().contains("flintstone"));

-        assertTrue(cv.getAllValues().contains("flintstone"));

-

-        cv.setDeleted(false);

-

-        assertFalse(cv.isDeleted());

-

-        assertFalse(cv.getDeletedValues().contains("flintstone"));

-        assertTrue(cv.getValues().contains("flintstone"));

-    }

-

-    public void testGetPrimaryKey()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter();

-

-        cv.add("fred", "flintstone");

-        cv.add("barney", "rubble");

-

-        assertEquals("fred", cv.getPrimaryKey("flintstone"));

-        assertEquals("flintstone", cv.getLastValue());

-

-        assertEquals("barney", cv.getPrimaryKey("rubble"));

-        assertEquals("rubble", cv.getLastValue());

-    }

-

-    public void testGetPrimaryKeyNotFound()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter();

-

-        try

-        {

-            cv.getPrimaryKey("flintstone");

-            unreachable();

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertEquals("Value flintstone not found.", ex.getMessage());

-        }

-

-    }

-

-    public void testGetValue()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter();

-

-        cv.add("fred", "flintstone");

-        cv.add("barney", "rubble");

-

-        assertEquals("flintstone", cv.getValue("fred"));

-        assertEquals("flintstone", cv.getLastValue());

-

-        assertEquals("rubble", cv.getValue("barney"));

-        assertEquals("rubble", cv.getLastValue());

-    }

-

-    public void testGetValueNotFound()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter();

-

-        assertEquals(null, cv.getValue("unknown"));

-    }

-

-    public void testGetValueSubclassOverride()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter()

-        {

-            public Object provideMissingValue(Object primaryKey)

-            {

-                assertEquals("fred", primaryKey);

-

-                return "flintstone";

-            }

-        };

-

-        assertEquals("flintstone", cv.getValue("fred"));

-    }

-

-    public void testGetValueSubclassThrowsException()

-    {

-        final RuntimeException re = new ApplicationRuntimeException("flintstone");

-

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter()

-        {

-            public Object provideMissingValue(Object primaryKey)

-            {

-                assertEquals("fred", primaryKey);

-

-                throw re;

-            }

-        };

-

-        try

-        {

-            cv.getValue("fred");

-            unreachable();

-

-        }

-        catch (ApplicationRuntimeException ex)

-        {

-            assertSame(re, ex);

-        }

-    }

-

-    public void testGetDeletedValues()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter();

-

-        cv.add("fred", "flintstone");

-        cv.add("barney", "rubble");

-

-        assertEquals("fred", cv.getPrimaryKey("flintstone"));

-

-        cv.setDeleted(true);

-

-        assertTrue(cv.getDeletedValues().contains("flintstone"));

-    }

-

-    public void testRemoveDeletedValues()

-    {

-        DefaultPrimaryKeyConverter cv = new DefaultPrimaryKeyConverter();

-

-        cv.add("fred", "flintstone");

-        cv.add("barney", "rubble");

-

-        assertEquals("flintstone", cv.getValue("fred"));

-

-        cv.setDeleted(true);

-

-        cv.removeDeletedValues();

-

-        Object[] values = cv.getValues().toArray();

-        assertEquals(1, values.length);

-        assertEquals("rubble", values[0]);

-

-        assertEquals(cv.getAllValues(), cv.getValues());

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/RegexpMatcherTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/RegexpMatcherTest.java
deleted file mode 100644
index a76e8e8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/RegexpMatcherTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.util;
-
-import org.apache.tapestry.TestBase;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link RegexpMatcher}.
- */
-@Test
-public class RegexpMatcherTest extends TestBase {
-    
-    RegexpMatcher _matcher = new RegexpMatcher();
-
-    public void test_Basic_Match()
-    {
-        assertTrue(_matcher.contains("/\\w+.css", "/a/b/FooBar.css"));
-        assertFalse(_matcher.contains("/\\w+.css", "/a/b/FooBar.gif"));
-    }
-
-    public void test_Begin_Line_Match()
-    {
-        assertTrue(_matcher.contains("^/org/apache/tapestry/.*.gif", "/org/apache/tapestry/util/things/wiggle.gif"));
-        assertFalse(_matcher.contains("^/org/apache/tapestry/.*.gif", "apache/tapestry/util/things/wiggle.gif"));
-    }
-
-    public void test_Match_Result()
-    {
-        String input = "value=biff[fred's message]";
-        RegexpMatch[] matches = _matcher.getMatches("^\\s*(\\$?\\w+)\\s*(=\\s*(((?!,|\\[).)*))?", input);
-
-        assertEquals(matches.length, 1);
-        assertEquals(matches[0].getMatchLength(), 10);
-        assertEquals(matches[0].getGroup(1), "value");
-        assertEquals(matches[0].getGroup(3), "biff");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/ScriptUtilsTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/ScriptUtilsTest.java
deleted file mode 100644
index 4a8b590..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/ScriptUtilsTest.java
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright May 9, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.util;
-
-import org.apache.oro.text.perl.Perl5Util;
-import org.apache.oro.text.regex.MatchResult;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link ScriptUtils}.
- * 
- */
-@Test
-public class ScriptUtilsTest extends BaseComponentTestCase
-{
-    protected static final String JAVASCRIPT_NOCOMMENT = 
-        "<script type=\"text/javascript\">"
-        + "if (document.updateObject) {"
-        + " document.updateObject.progressFinished('updateId');"
-        + "}"
-        + "</script>";
-    
-    protected static final String MULTI_JAVASCRIPT_NOCOMMENT = 
-        "<script type=\"text/javascript\">"
-        + "if (document.updateObject) {"
-        + " document.updateObject.progressFinished('updateId');"
-        + "}"
-        + "if (document.updateObject) {"
-        + " document.updateObject.progressFinished('updateId');"
-        + "}"
-        + "</script>"
-        + JAVASCRIPT_NOCOMMENT
-        + JAVASCRIPT_NOCOMMENT;
-    
-    protected static final String TEST_INPUT1 =
-        JAVASCRIPT_NOCOMMENT 
-        + "some text is here";
-    
-    protected static final String TEST_INPUT2 =
-        "beginning text"
-        + JAVASCRIPT_NOCOMMENT 
-        + "some text is here";
-    
-    protected static final String TEST_INPUT3 =
-        JAVASCRIPT_NOCOMMENT 
-        + "Here yee"
-        + JAVASCRIPT_NOCOMMENT
-        + "some text is here";
-    
-    protected static final String TEST_INPUT4 =
-        TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3
-        + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3 + TEST_INPUT3;
-    
-    protected static final String TEST_INPUT_INCLUDE =
-        JAVASCRIPT_NOCOMMENT 
-        + "some text is here"
-        + "<script type=\"text/javascript\" src=\"http://yourmom.js\"></script>";
-    
-    public static final String BEGIN_COMMENT = "//<![CDATA[";
-    public static final String END_COMMENT = "//]]>";
-    
-    /**
-     * Tests finding {@link #JAVASCRIPT_NOCOMMENT} with 
-     * regular expressions.
-     */
-    public void test_Find_Script()
-    {
-        Perl5Util util = new Perl5Util();
-        String expr = "/(?:<script.*?>)((\\n|.)*?)(?:<\\/script>)/";
-        
-        assertTrue(util.match(expr, JAVASCRIPT_NOCOMMENT));
-        
-        MatchResult result = util.getMatch();
-        assertNotNull(result);
-        assertEquals(3, result.groups());
-        assertEquals("if (document.updateObject) { document.updateObject.progressFinished('updateId');}",
-                result.group(1));
-    }
-    
-    /**
-     * Tests finding {@link #JAVASCRIPT_NOCOMMENT} with 
-     * regular expressions.
-     */
-    public void test_Find_Multiple_Scripts()
-    {
-        Perl5Util util = new Perl5Util();
-        String expr = "/(?:<script.*?>)((\\n|.)*?)(?:<\\/script>)/";
-        
-        assertTrue(util.match(expr, MULTI_JAVASCRIPT_NOCOMMENT));
-        
-        MatchResult result = util.getMatch();
-        assertNotNull(result);
-        assertEquals(3, result.groups());
-        assertEquals("if (document.updateObject) { document.updateObject.progressFinished('updateId');}"
-                + "if (document.updateObject) { document.updateObject.progressFinished('updateId');}",
-                result.group(1));
-    }
-    
-    /**
-     * Calls {@link ScriptUtils#ensureValidScriptTags(String)} with 
-     * {@link #JAVASCRIPT_NOCOMMENT} and tests that it returns a validly
-     * marked up content block capable of being embedded in an xml document.
-     */
-    public void test_Ensure_Valid_Script_Tags()
-    {
-        assertEquals(ScriptUtils.ensureValidScriptTags(JAVASCRIPT_NOCOMMENT),
-                ScriptUtils.BEGIN_COMMENT
-                + "if (document.updateObject) { document.updateObject.progressFinished('updateId');}"
-                + ScriptUtils.END_COMMENT);
-        
-        //Test other various non jscript text
-        assertNull(null, ScriptUtils.ensureValidScriptTags(null));
-        assertEquals("", ScriptUtils.ensureValidScriptTags(""));
-        assertEquals(ScriptUtils.ensureValidScriptTags("<html>This is html</html>"),
-                "<html>This is html</html>");
-    }
-
-    public void test_Ensure_Valid_Script_Tags_With_Html_Comments()
-    {  
-        String data = "<!-- some comments1 -->" + TEST_INPUT1 + "<b>test</b><!-- some comments2 -->";
-        data += " <!-- some comments3 -->" + TEST_INPUT1 + "<b>test</b><!-- some comments4 -->";
-        
-        String result = ScriptUtils.ensureValidScriptTags(data);
-        
-        assertTrue(result.indexOf("<!-- some comments1 -->") >= 0);
-        assertTrue(result.indexOf("<!-- some comments2 -->") >= 0);
-        assertTrue(result.indexOf("<!-- some comments3 -->") >= 0);
-        assertTrue(result.indexOf("<!-- some comments4 -->") >= 0);
-    }
-    
-    /**
-     * Tests that the complete string is returned, with 
-     * any js in it "fixed".
-     */
-    public void test_Complete_Return()
-    {
-        assertEquals(ScriptUtils.ensureValidScriptTags(TEST_INPUT1),
-                ScriptUtils.BEGIN_COMMENT
-                + "if (document.updateObject) { document.updateObject.progressFinished('updateId');}"
-                + ScriptUtils.END_COMMENT + "some text is here");
-
-        assertEquals(ScriptUtils.ensureValidScriptTags(TEST_INPUT2),
-                "beginning text" 
-                + ScriptUtils.BEGIN_COMMENT
-                + "if (document.updateObject) { document.updateObject.progressFinished('updateId');}"
-                + ScriptUtils.END_COMMENT + "some text is here");
-        
-        assertEquals(ScriptUtils.ensureValidScriptTags(TEST_INPUT3),
-                ScriptUtils.BEGIN_COMMENT
-                + "if (document.updateObject) { document.updateObject.progressFinished('updateId');}"
-                + ScriptUtils.END_COMMENT
-                + "Here yee" 
-                +  ScriptUtils.BEGIN_COMMENT
-                + "if (document.updateObject) { document.updateObject.progressFinished('updateId');}"
-                + ScriptUtils.END_COMMENT
-                + "some text is here");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/StrftimeTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/StrftimeTest.java
deleted file mode 100644
index 8cb0756..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/StrftimeTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright Jun 10, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.util;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link Strftime}.
- * 
- * @see "http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html"
- * @author jkuhnert
- */
-@Test
-public class StrftimeTest extends BaseComponentTestCase
-{
-
-    public void testPosixFormat()
-    {
-        assertEquals("%m/%d/%Y", Strftime.convertToPosixFormat("MM/dd/yyyy"));
-        assertEquals("%H:%M:%S at %p", Strftime.convertToPosixFormat("HH:mm:ss at a"));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestDescribedLocation.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestDescribedLocation.java
deleted file mode 100644
index cac8dc8..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestDescribedLocation.java
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.util.DescribedLocation}.
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestDescribedLocation extends BaseComponentTestCase
-{
-    public void testLineRowAreZero()
-    {
-        Resource r = newMock(Resource.class);
-
-        replay();
-
-        DescribedLocation l = new DescribedLocation(r, "location description");
-
-        assertEquals(0, l.getLineNumber());
-        assertEquals(0, l.getColumnNumber());
-
-        assertSame(r, l.getResource());
-
-        assertEquals("location description", l.toString());
-
-        verify();
-    }
-
-    public void testEquals()
-    {
-        Resource r = newMock(Resource.class);
-        Resource r2 = newMock(Resource.class);
-
-        replay();
-
-        DescribedLocation l = new DescribedLocation(r, "location description");
-        DescribedLocation l2 = new DescribedLocation(r2, "location description");
-        DescribedLocation l3 = new DescribedLocation(r, "wrong description");
-        DescribedLocation l4 = new DescribedLocation(r, "location description");
-
-        assertEquals(false, l.equals(null));
-        assertEquals(false, l.equals("XYZ"));
-        assertEquals(false, l.equals(l2));
-        assertEquals(false, l.equals(l3));
-        assertEquals(true, l.equals(l4));
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestIdAllocator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestIdAllocator.java
deleted file mode 100644
index bd22d4e..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestIdAllocator.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.util;
-
-import static org.testng.AssertJUnit.*;
-
-import org.testng.annotations.Test;
-
-
-/**
- * Tests functionality of {@link IdAllocator}.
- */
-@Test
-public class TestIdAllocator
-{
-    public void test_Simple_Allocation()
-    {
-        IdAllocator ida = new IdAllocator();
-        
-        assertEquals("name", ida.allocateId("name"));
-        assertEquals("name_0", ida.allocateId("name"));
-        assertEquals("name_1", ida.allocateId("name"));
-    }
-    
-    public void test_Namespace_Allocation()
-    {
-        IdAllocator ida = new IdAllocator("_test");
-        
-        assertEquals("name_test",ida.allocateId("name"));
-        assertEquals("name_test_0", ida.allocateId("name"));
-        assertEquals("name_test_1", ida.allocateId("name"));
-    }
-    
-    public void test_Peek_Allocation()
-    {
-        IdAllocator ida = new IdAllocator();
-        
-        assertEquals("name", ida.allocateId("name"));
-        
-        assertEquals("name_0", ida.peekNextId("name"));
-        assertEquals("name_0", ida.allocateId("name"));
-        
-        assertEquals("name_1", ida.peekNextId("name"));
-        assertEquals("name_1", ida.peekNextId("name"));
-    }
-    
-    public void test_Peek_Allocation_With_PriorId()
-    {
-        IdAllocator ida = new IdAllocator();
-        
-        assertEquals("name", ida.allocateId("name"));
-        
-        assertEquals("name_0", ida.peekNextId("name_0"));
-        assertEquals("name_0", ida.allocateId("name"));
-        
-        assertEquals("name_1", ida.peekNextId("name"));
-        assertEquals("name_1", ida.peekNextId("name"));
-        
-        assertEquals("name_1", ida.peekNextId("name_0"));
-    }
-    
-    public void test_Ignore_Case()
-    {
-        IdAllocator ida = new IdAllocator();
-        
-        assertEquals("name", ida.allocateId("name"));
-        assertEquals("name_0", ida.allocateId("Name"));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestObjectIdentityMap.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestObjectIdentityMap.java
deleted file mode 100644
index b4f8726..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestObjectIdentityMap.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.util.ObjectIdentityMap}
- * 
- * @author Howard Lewis Ship
- * @since 4.0
- */
-public class TestObjectIdentityMap extends BaseComponentTestCase
-{
-    @Test
-    public void testGetNotFound()
-    {
-        ObjectIdentityMap map = new ObjectIdentityMap();
-
-        map.put("fee", "fie");
-
-        assertNull(map.get("foe"));
-    }
-    
-    @Test
-    public void testGetFound()
-    {
-        ObjectIdentityMap map = new ObjectIdentityMap();
-
-        Object value = new Object();
-        Object key = new Object();
-
-        map.put(key, value);
-
-        assertSame(value, map.get(key));
-    }
-
-    @Test
-    public void testGetWhenEmpty()
-    {
-        ObjectIdentityMap map = new ObjectIdentityMap();
-
-        assertNull(map.get(null));
-    }
-
-    @Test
-    public void testStoreNull()
-    {
-        ObjectIdentityMap map = new ObjectIdentityMap();
-
-        Object value = new Object();
-
-        map.put(null, value);
-
-        assertSame(value, map.get(null));
-    }
-
-    @Test
-    public void testStoreMany()
-    {
-        ObjectIdentityMap map = new ObjectIdentityMap();
-
-        int count = 50;
-
-        Object[] keys = new Object[count];
-        Object[] values = new Object[count];
-
-        for (int i = 0; i < count; i++)
-        {
-            keys[i] = new Object();
-            values[i] = new Object();
-
-            map.put(keys[i], values[i]);
-        }
-
-        for (int i = 0; i < count; i++)
-        {
-            assertSame(values[i], map.get(keys[i]));
-        }
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java
deleted file mode 100644
index d33fefd..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java
+++ /dev/null
@@ -1,322 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.io.CharArrayWriter;
-import java.io.PrintWriter;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.markup.AsciiMarkupFilter;
-import org.apache.tapestry.markup.MarkupWriterImpl;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.impl.DefaultResponseBuilder;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.util.PageRenderSupportImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-@SuppressWarnings("all")
-public class TestPageRenderSupport extends BaseComponentTestCase
-{
-    private static final String SYSTEM_NEWLINE= (String)java.security.AccessController.doPrivileged(
-            new sun.security.action.GetPropertyAction("line.separator"));
-    
-    private static final String TEST_NEWLINE= "\n";
-    
-    private AssetFactory newAssetFactory()
-    {
-        return newMock(AssetFactory.class);
-    }
-
-    private IAsset newAsset(String url)
-    {
-        IAsset asset = newMock(IAsset.class);
-        checkOrder(asset, false);
-        
-        expect(asset.buildURL()).andReturn(url);
-
-        return asset;
-    }
-
-    private CharArrayWriter _writer;
-
-    private IMarkupWriter createWriter()
-    {
-        _writer = new CharArrayWriter();
-
-        return new MarkupWriterImpl("text/html", new PrintWriter(_writer), new AsciiMarkupFilter());
-    }
-
-    private ResponseBuilder newBuilder(IMarkupWriter writer)
-    {
-        return new DefaultResponseBuilder(writer);
-    }
-    
-    private void assertOutput(String[] expectedLines)
-    {
-        StringBuffer buffer = new StringBuffer();
-        for (int i = 0; i < expectedLines.length; i++)
-        {
-            // Note: PageRenderSupport is a bit sloppy; a lot of code just uses \n for
-            // a newline seperator, other parts go through IMarkupWriter.println() and get
-            // a proper newline seperator (which may be different).
-
-            if (i > 0)
-                buffer.append("\n");
-
-            buffer.append(expectedLines[i]);
-        }
-
-        assertOutput(buffer.toString());
-    }
-
-    private void assertOutput(String expected)
-    {
-        String actual = _writer.toString();
-        
-        // Replace any system line feeds with \n
-        actual = actual.replaceAll(SYSTEM_NEWLINE, TEST_NEWLINE);
-        
-        assertEquals(actual, expected);
-
-        _writer.reset();
-    }
-
-    public void testGetLocation()
-    {
-        AssetFactory factory = newAssetFactory();
-        Location l = newLocation();
-
-        replay();
-
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l, newBuilder(null));
-
-        assertSame(l, prs.getLocation());
-
-        verify();
-    }
-
-    public void testGetPreloadedImageReference()
-    {
-        AssetFactory factory = newAssetFactory();
-        Location l = newLocation();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = createWriter();
-        
-        IComponent comp = newMock(IComponent.class);
-        IAsset img = newAsset("/zip/zap.png");
-        
-        replay();
-        
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l, newBuilder(writer));
-        
-        assertEquals(prs.getPreloadedImageReference("/foo/bar.gif"), "tapestry.preload[0].src");
-        assertEquals(prs.getPreloadedImageReference(comp, img), "tapestry.preload[1].src");
-        assertEquals(prs.getPreloadedImageReference("/foo/bar.gif"), "tapestry.preload[0].src");
-        
-        prs.addBodyScript("myBodyScript();");
-
-        prs.writeBodyScript(writer, cycle);
-
-        assertOutput(new String[]
-        { "<script type=\"text/javascript\"><!--","",
-                "dojo.addOnLoad(function(e) {",
-                "tapestry.preload = [];", "if (document.images)", "{",
-                "tapestry.preload[0] = new Image();",
-                "  tapestry.preload[0].src = \"/foo/bar.gif\";",
-                "  tapestry.preload[1] = new Image();",
-                "  tapestry.preload[1].src = \"/zip/zap.png\";}", "});myBodyScript();",
-                "// --></script>" });
-
-        verify();
-    }
-
-    public void testPreloadedImagesInNamespace()
-    {
-        AssetFactory factory = newAssetFactory();
-        Location l = newLocation();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = createWriter();
-
-        replay();
-        
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "NAMESPACE.", l, newBuilder(writer));
-        
-        assertEquals(prs.getPreloadedImageReference("/foo/bar.gif"), "NAMESPACE.preload[0].src");
-        
-        prs.writeBodyScript(writer, cycle);
-        
-        assertOutput(new String[]
-        {"<script type=\"text/javascript\"><!--", "",
-                "dojo.addOnLoad(function(e) {",
-                "NAMESPACE.preload = [];", "if (document.images)", "{",
-                "NAMESPACE.preload[0] = new Image();",
-                "  NAMESPACE.preload[0].src = \"/foo/bar.gif\";}",
-                "});",
-                "// --></script>" });
-
-        verify();
-    }
-
-    public void testAddBodyScript()
-    {
-        AssetFactory factory = newAssetFactory();
-        Location l = newLocation();
-        IRequestCycle cycle = newCycle();
-        IMarkupWriter writer = createWriter();
-
-        replay();
-
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l, newBuilder(writer));
-
-        prs.addBodyScript("myBodyScript();");
-
-        prs.writeBodyScript(writer, cycle);
-
-        assertOutput(new String[]
-        { "<script type=\"text/javascript\"><!--",
-                "myBodyScript();",
-                "// --></script>" });
-
-        verify();
-    }
-
-    public void testGetUniqueString()
-    {
-        AssetFactory factory = newAssetFactory();
-        Location l = newLocation();
-
-        replay();
-
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l, newBuilder(null));
-
-        assertEquals("foo", prs.getUniqueString("foo"));
-        assertEquals("foo_0", prs.getUniqueString("foo"));
-        assertEquals("bar", prs.getUniqueString("bar"));
-        assertEquals("foo_1", prs.getUniqueString("foo"));
-
-        verify();
-    }
-
-    public void testGetUniqueStringWithNamespace()
-    {
-        AssetFactory factory = newAssetFactory();
-        Location l = newLocation();
-
-        replay();
-
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "NAMESPACE", l, newBuilder(null));
-
-        assertEquals("fooNAMESPACE", prs.getUniqueString("foo"));
-        assertEquals("fooNAMESPACE_0", prs.getUniqueString("foo"));
-        assertEquals("barNAMESPACE", prs.getUniqueString("bar"));
-        assertEquals("fooNAMESPACE_1", prs.getUniqueString("foo"));
-
-        verify();
-    }
-    
-    public void testAddInitializationScript()
-    {
-        AssetFactory factory = newAssetFactory();
-        Location l = newLocation();
-        IMarkupWriter writer = createWriter();
-
-        replay();
-
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l, newBuilder(writer));
-
-        prs.addInitializationScript("myInitializationScript1();");
-        prs.addInitializationScript("myInitializationScript2();");
-        prs.addInitializationScript("dojo.require(\"dojo.event.*\");");
-        prs.addInitializationScript("dojo.require(\"dojo.widget.*\");dojo.require(\"dojo.event.*\");");
-        prs.addInitializationScript("dojo.require(\"dojo.event.*\");");
-        prs.addInitializationScript("dojo.require(\"tapestry.form\");tapestry.form.registerForm(\"valid\");\n" + 
-                "tapestry.form.focusField(\'inputEnabled\');\n" + 
-                "dojo.require(\"tapestry.form\");tapestry.form.registerForm(\"form\");");
-        
-        prs.writeInitializationScript(writer);
-        
-        assertOutput(new String[]
-        { "<script type=\"text/javascript\"><!--",
-                "dojo.addOnLoad(function(e) {",
-                "myInitializationScript1();", "myInitializationScript2();",
-                "dojo.require(\"dojo.event.*\");","dojo.require(\"dojo.widget.*\");",
-                "",
-                "tapestry.form.registerForm(\"valid\");",
-                "tapestry.form.focusField(\'inputEnabled\');",
-                "dojo.require(\"tapestry.form\");tapestry.form.registerForm(\"form\");});",
-                "// --></script>" });
-
-        verify();
-    }
-
-    public void testAddExternalScript() throws Exception
-    {
-        String newline = TEST_NEWLINE;
-
-        IRequestCycle cycle = newCycle();
-        
-        IMarkupWriter writer = createWriter();
-        
-        AssetFactory assetFactory = newMock(AssetFactory.class);
-        
-        Resource script1 = newResource();
-        IAsset asset1 = newAsset("/script1.js");
-        
-        Resource script2 = newResource();
-        IAsset asset2 = newAsset("/script2.js");
-        
-        expect(assetFactory.createAsset(script1, null)).andReturn(asset1);
-
-        expect(assetFactory.createAsset(script2, null)).andReturn(asset2);
-
-        replay();
-
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(assetFactory, "", null, newBuilder(writer));
-
-        prs.addExternalScript(script1);
-        prs.addExternalScript(script2);
-        prs.addExternalScript(script1);
-
-        prs.writeBodyScript(writer, cycle);
-
-        // PageRenderSupport is a little sloppy about using \n for a newline, vs. using
-        // the property line seperator sequence and it bites us right here.
-
-        assertOutput(scriptTagFor("/script1.js") + newline + scriptTagFor("/script2.js") + newline);
-
-        verify();
-    }
-
-    private String scriptTagFor(String url)
-    {
-        return "<script type=\"text/javascript\" src=\"" + url
-                + "\"></script>";
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestQueryParameterMap.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestQueryParameterMap.java
deleted file mode 100644
index 638610c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/TestQueryParameterMap.java
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.util.QueryParameterMap}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestQueryParameterMap extends BaseComponentTestCase
-{
-    public void testUnknownKey()
-    {
-        QueryParameterMap m = new QueryParameterMap();
-
-        assertNull(m.getParameterValue("unknown"));
-        assertNull(m.getParameterValues("unknown"));
-    }
-
-    public void testGetSingleValue()
-    {
-        QueryParameterMap m = new QueryParameterMap();
-
-        m.setParameterValue("fred", "flintstone");
-
-        assertEquals("flintstone", m.getParameterValue("fred"));
-        assertListEquals(new String[]
-        { "flintstone" }, m.getParameterValues("fred"));
-    }
-
-    public void testGetValuesArray()
-    {
-        QueryParameterMap m = new QueryParameterMap();
-
-        String[] values = new String[]
-        { "fred", "wilma" };
-
-        m.setParameterValues("flintstone", values);
-
-        assertListEquals(values, m.getParameterValues("flintstone"));
-
-        m.setParameterValue("rubble", "barney");
-
-        assertListEquals(new String[]
-        { "barney" }, m.getParameterValues("rubble"));
-    }
-
-    public void testGetParameterNames()
-    {
-        QueryParameterMap m = new QueryParameterMap();
-
-        m.setParameterValue("fred", "flintstone");
-        m.setParameterValue("barney", "rubble");
-
-        assertListEquals(new String[]
-        { "barney", "fred" }, m.getParameterNames());
-    }
-
-    public void testExistingMap()
-    {
-        Map map = new HashMap();
-        QueryParameterMap m = new QueryParameterMap(map);
-
-        m.setParameterValue("fred", "flintstone");
-
-        assertEquals("flintstone", map.get("fred"));
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/Basic.txt b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/Basic.txt
deleted file mode 100644
index 966b3e5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/Basic.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-0000: aced0005 73720013 6a617661 2e757469  |....sr..java.uti|

-0010: 6c2e4172 7261794c 69737478 81d21d99  |l.ArrayListx....|

-0020: c7619d03 00014900 0473697a 65787000  |.a....I..sizexp.|

-0030: 00000377 04000000 0a740005 616c7068  |...w.....t..alph|

-0040: 61740004 62657461 74000b67 61626261  |at..betat..gabba|

-0050: 20676162 626178                      | gabbax         |

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/NoAscii.txt b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/NoAscii.txt
deleted file mode 100644
index 6016621..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/NoAscii.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-0000: aced0005 73720013 6a617661 2e757469
-0010: 6c2e4172 7261794c 69737478 81d21d99
-0020: c7619d03 00014900 0473697a 65787000
-0030: 00000377 04000000 0a740005 616c7068
-0040: 61740004 62657461 74000b67 61626261
-0050: 20676162 626178                    
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/NoOffset.txt b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/NoOffset.txt
deleted file mode 100644
index d63f301..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/NoOffset.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-aced0005 73720013 6a617661 2e757469  |....sr..java.uti|
-6c2e4172 7261794c 69737478 81d21d99  |l.ArrayListx....|
-c7619d03 00014900 0473697a 65787000  |.a....I..sizexp.|
-00000377 04000000 0a740005 616c7068  |...w.....t..alph|
-61740004 62657461 74000b67 61626261  |at..betat..gabba|
-20676162 626178                      | gabbax         |
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/Options.txt b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/Options.txt
deleted file mode 100644
index 14f7212..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/Options.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-0000 = aced000573720013 6a6176612e757469 6c2e41727261794c 6973747881d21d99 c7619d0300014900 0473697a65787000 { ????sr??java.util.ArrayListx?????a????I??sizexp? }

-0030 = 0000037704000000 0a740005616c7068 6174000462657461 74000b6761626261 20676162626178                    { ???w?????t??alphat??betat??gabba gabbax          }

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/SerializableAdaptorTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/SerializableAdaptorTest.java
deleted file mode 100644
index 171b6e2..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/SerializableAdaptorTest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.TestBase;
-import org.testng.annotations.Test;
-
-import java.util.Locale;
-
-/**
- *
- */
-@Test
-public class SerializableAdaptorTest extends TestBase {
-
-    public void test_Squeeze()
-    {
-        SerializableAdaptor squeezer = new SerializableAdaptor();
-
-        String data = squeezer.squeeze(null, Locale.getDefault());
-
-        assert data != null;
-        assert data.length() > 0;
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/TestBinaryDumpOutputStream.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/TestBinaryDumpOutputStream.java
deleted file mode 100644
index b821070..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/TestBinaryDumpOutputStream.java
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2005 The Apache Software Foundation

-//

-// Licensed under the Apache License, Version 2.0 (the "License");

-// you may not use this file except in compliance with the License.

-// You may obtain a copy of the License at

-//

-//     http://www.apache.org/licenses/LICENSE-2.0

-//

-// Unless required by applicable law or agreed to in writing, software

-// distributed under the License is distributed on an "AS IS" BASIS,

-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-// See the License for the specific language governing permissions and

-// limitations under the License.

-

-package org.apache.tapestry.util.io;

-

-import java.io.BufferedInputStream;

-import java.io.BufferedReader;

-import java.io.CharArrayWriter;

-import java.io.InputStream;

-import java.io.InputStreamReader;

-import java.io.LineNumberReader;

-import java.io.ObjectOutputStream;

-import java.io.Reader;

-import java.util.ArrayList;

-import java.util.List;

-

-import org.apache.tapestry.BaseComponentTestCase;

-import org.testng.annotations.Test;

-

-/**

- * Tests for {@link org.apache.tapestry.util.io.BinaryDumpOutputStream}.

- * 

- * @author Howard Lewis Ship

- * @since 4.0

- */

-@Test

-public class TestBinaryDumpOutputStream extends BaseComponentTestCase

-{

-    /**

-     * Reads the content of a file, and forms a string. Converts line-number endings in the file

-     * into the correct platform value (this should help the test run properly on both Windows and

-     * *nix).

-     */

-    private String contentsOf(String path) throws Exception

-    {

-        String sep = System.getProperty("line.separator");

-        

-        InputStream is = getClass().getResourceAsStream(path);

-

-        is = new BufferedInputStream(is);

-

-        Reader ir = new InputStreamReader(is);

-

-        ir = new BufferedReader(ir);

-

-        LineNumberReader lnr = new LineNumberReader(ir);

-

-        StringBuffer buffer = new StringBuffer();

-

-        while (true)

-        {

-            String line = lnr.readLine();

-

-            if (line == null)

-                break;

-

-            buffer.append(line);

-            buffer.append(sep);

-        }

-

-        ir.close();

-

-        return buffer.toString();

-    }

-

-    public void testBasic() throws Exception

-    {

-        CharArrayWriter writer = new CharArrayWriter();

-

-        BinaryDumpOutputStream bdos = new BinaryDumpOutputStream(writer);

-        

-        ObjectOutputStream oos = new ObjectOutputStream(bdos);

-        oos.writeObject(createOutputObject());

-        

-        oos.close();

-        

-        assertEquals(contentsOf("Basic.txt"), writer.toString());

-    }

-

-    /**

-     * Creates and returns the object to be written out to the stream. The tests are dependenent on

-     * the serialization of HashMap and String not changing between JDKs. If such a change does

-     * occur, we'll need to devise an Externalizable object to write to the stream.

-     * 

-     * I've changed this to use a List instead, as ordering of a list shouldn't change while

-     * ordering of a hashmap isn't guaranteed at all.

-     */

-    private List createOutputObject()

-    {

-        List list = new ArrayList();

-        list.add("alpha");

-        list.add("beta");

-        list.add("gabba gabba");

-        return list;

-    }

-

-    public void testOptions() throws Exception

-    {

-

-        CharArrayWriter writer = new CharArrayWriter();

-

-        BinaryDumpOutputStream bdos = new BinaryDumpOutputStream(writer);

-

-        bdos.setAsciiBegin(" { ");

-        bdos.setAsciiEnd(" }");

-        bdos.setOffsetSeperator(" = ");

-        bdos.setSubstituteChar('?');

-        bdos.setBytesPerLine(48);

-        bdos.setSpacingInterval(8);

-

-        ObjectOutputStream oos = new ObjectOutputStream(bdos);

-

-        oos.writeObject(createOutputObject());

-

-        oos.close();

-

-        assertEquals(contentsOf("Options.txt"), writer.toString());

-    }

-

-    public void testNoOffset() throws Exception

-    {

-        CharArrayWriter writer = new CharArrayWriter();

-

-        BinaryDumpOutputStream bdos = new BinaryDumpOutputStream(writer);

-        bdos.setShowOffset(false);

-

-        ObjectOutputStream oos = new ObjectOutputStream(bdos);

-

-        oos.writeObject(createOutputObject());

-

-        oos.close();

-

-        assertEquals(contentsOf("NoOffset.txt"), writer.toString());

-    }

-

-    public void testNoAscii() throws Exception

-    {

-        CharArrayWriter writer = new CharArrayWriter();

-

-        BinaryDumpOutputStream bdos = new BinaryDumpOutputStream(writer);

-        bdos.setShowAscii(false);

-

-        ObjectOutputStream oos = new ObjectOutputStream(bdos);

-

-        oos.writeObject(createOutputObject());

-

-        oos.close();

-

-        assertEquals(contentsOf("NoAscii.txt"), writer.toString());

-    }

-}

diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/TestGzipUtil.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/TestGzipUtil.java
deleted file mode 100644
index 8fe57a1..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/util/io/TestGzipUtil.java
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.util.io;
-
-import org.apache.tapestry.TestBase;
-import org.apache.tapestry.web.WebRequest;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests functionality of {@link GzipUtil} .
- *
- * @author jkuhnert
- */
-@Test
-public class TestGzipUtil extends TestBase {
-    
-    // for more see http://en.wikipedia.org/wiki/User_agent
-    static final String MSIE_5_SUNOS = "Mozilla/4.0 (compatible; MSIE 5.0; SunOS 5.9 sun4u; X11)";
-    static final String MSIE_5_5 = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)";
-    static final String MSIE_6 = "Mozilla/4.0 (compatible; MSIE 6.0; MSN 2.5; Windows 98)";
-    static final String MSIE_6_SP2 = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
-    static final String MSIE_7_BETA_1 = "Mozilla/4.0 (compatible; MSIE 7.0b; Win32)";
-    
-    static final String MOZ_1_5 = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2";
-    static final String MOZ_2_WIN98 = "Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0";
-    
-    static final String OPERA_7 = "Opera/7.23 (Windows 98; U) [en]";
-    
-    static final String SAFARI_125 = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko)";
-    static final String SAFARI_204 = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3";
-    
-    public void test_Gzip_Capable()
-    {
-        WebRequest request = newMock(WebRequest.class);
-        checkOrder(request, false);
-        
-        expect(request.getHeader("Accept-Encoding")).andReturn("gzip").anyTimes();
-        
-        expect(request.getHeader("User-Agent")).andReturn(MSIE_5_SUNOS);
-        expect(request.getHeader("User-Agent")).andReturn(MSIE_5_5);
-        expect(request.getHeader("User-Agent")).andReturn(MSIE_6);
-        
-        expect(request.getHeader("User-Agent")).andReturn(MSIE_6_SP2);
-        expect(request.getHeader("User-Agent")).andReturn(MSIE_7_BETA_1);
-        
-        expect(request.getHeader("User-Agent")).andReturn(MOZ_1_5);
-        expect(request.getHeader("User-Agent")).andReturn(MOZ_2_WIN98);
-        expect(request.getHeader("User-Agent")).andReturn(OPERA_7);
-        expect(request.getHeader("User-Agent")).andReturn(SAFARI_125);
-        expect(request.getHeader("User-Agent")).andReturn(SAFARI_204);
-        
-        replay();
-        
-        assertFalse(GzipUtil.isGzipCapable(request));
-        assertFalse(GzipUtil.isGzipCapable(request));
-        assertFalse(GzipUtil.isGzipCapable(request));
-        
-        assertTrue(GzipUtil.isGzipCapable(request));
-        assertTrue(GzipUtil.isGzipCapable(request));
-        assertTrue(GzipUtil.isGzipCapable(request));
-        assertTrue(GzipUtil.isGzipCapable(request));
-        assertTrue(GzipUtil.isGzipCapable(request));
-        assertTrue(GzipUtil.isGzipCapable(request));
-        assertTrue(GzipUtil.isGzipCapable(request));
-        
-        verify();
-    }
-    
-    public void test_Compress_Content_Type()
-    {
-        assertFalse(GzipUtil.shouldCompressContentType(null));
-        assertTrue(GzipUtil.shouldCompressContentType("javascript"));
-        assertTrue(GzipUtil.shouldCompressContentType("html"));
-        assertTrue(GzipUtil.shouldCompressContentType("css"));
-        
-        assertFalse(GzipUtil.shouldCompressContentType("jpeg"));
-        assertFalse(GzipUtil.shouldCompressContentType("image"));
-        assertFalse(GzipUtil.shouldCompressContentType("png"));
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/BaseValidatorTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/BaseValidatorTestCase.java
deleted file mode 100644
index 2cf8c36..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/BaseValidatorTestCase.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.junit.TapestryTestCase;
-
-/**
- * Base class for tests of different {@link org.apache.tapestry.valid.IValidator}implementations.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class BaseValidatorTestCase extends TapestryTestCase
-{
-
-    protected IFormComponent newField()
-    {
-        return newMock(IFormComponent.class);
-    }
-
-    protected IFormComponent newField(String displayName)
-    {
-        return newField(displayName, 1);
-    }
-
-    protected IFormComponent newField(String displayName, int count)
-    {
-        return newField(displayName, Locale.ENGLISH, count);
-    }
-
-    protected IFormComponent newField(String displayName, Locale locale)
-    {
-        return newField(displayName, locale, 1);
-    }
-
-    protected IFormComponent newField(String displayName, Locale locale, int count)
-    {
-        IPage page = newPage(locale);
-        
-        IFormComponent component = newMock(IFormComponent.class);
-        
-        expect(component.getPage()).andReturn(page).anyTimes();
-        
-        expect(component.getDisplayName()).andReturn(displayName).anyTimes();
-
-        return component;
-    }
-
-    protected IPage newPage(Locale locale)
-    {
-        IPage page = newPage();
-        
-        checkOrder(page, false);
-        
-        expect(page.getLocale()).andReturn(locale).anyTimes();
-
-        return page;
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/FieldLabelTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/FieldLabelTest.java
deleted file mode 100644
index 097441c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/FieldLabelTest.java
+++ /dev/null
@@ -1,323 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.BaseFormComponentTestCase;
-import org.apache.tapestry.form.IFormComponent;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for the {@link org.apache.tapestry.valid.FieldLabel} component.
- *
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class FieldLabelTest extends BaseFormComponentTestCase
-{
-    private IForm newForm(IValidationDelegate delegate)
-    {
-        IForm form = newMock(IForm.class);
-        checkOrder(form, false);
-
-        trainGetDelegate(delegate, form);
-
-        return form;
-    }
-
-    private void trainGetDelegate(IValidationDelegate delegate, IForm form)
-    {
-        expect(form.getDelegate()).andReturn(delegate);
-    }
-
-    private IFormComponent newField(String displayName, String clientId)
-    {
-        IFormComponent field = newMock(IFormComponent.class);
-        checkOrder(field, false);
-
-        trainGetDisplayName(field, displayName);
-        trainGetClientId(clientId, field);
-
-        return field;
-    }
-
-    private void trainGetClientId(String clientId, IFormComponent field)
-    {
-        expect(field.getClientId()).andReturn(clientId).anyTimes();
-    }
-
-    private void trainGetDisplayName(IFormComponent field, String displayName)
-    {
-        expect(field.getDisplayName()).andReturn(displayName).anyTimes();
-    }
-
-    public void test_Rewinding()
-    {
-        Location l = newLocation();
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-        IForm form = newForm();
-        IFormComponent field = newField();
-
-        FieldLabel fl = newInstance(FieldLabel.class, "field", field,
-                                    "location", l, "prerender", true);
-
-        expect(cycle.renderStackPush(fl)).andReturn(fl);
-        trainGetForm(cycle, form);
-        form.prerenderField(writer, field, l);
-        trainIsRewinding(cycle, true);
-
-        expect(cycle.renderStackPop()).andReturn(fl);
-
-        replay();
-
-        fl.render(writer, cycle);
-
-        verify();
-    }
-
-    public void test_Null_Field()
-    {
-        IValidationDelegate delegate = new MockDelegate();
-        IForm form = newForm(delegate);
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle();
-
-        FieldLabel fl = newInstance(FieldLabel.class,
-                                    new Object[] { "displayName", "FredFlintstone" });
-
-        expect(cycle.renderStackPush(fl)).andReturn(fl);
-
-        trainGetForm(cycle, form);
-
-        trainIsRewinding(cycle, false);
-
-        expect(cycle.renderStackPop()).andReturn(fl);
-
-        replay();
-
-        fl.render(writer, cycle);
-
-        assertBuffer("<label>{BEFORE-TEXT}FredFlintstone{AFTER-TEXT}</label>");
-
-        verify();
-    }
-
-    public void test_Null_Field_Raw()
-    {
-        IValidationDelegate delegate = new MockDelegate();
-        IForm form = newForm(delegate);
-        IMarkupWriter writer = newBufferWriter();
-        IRequestCycle cycle = newCycle();
-
-        FieldLabel fl = newInstance(FieldLabel.class, "displayName", "<b>FredFlintstone</b>",
-                                    "raw", Boolean.TRUE);
-
-        expect(cycle.renderStackPush(fl)).andReturn(fl);
-
-        trainGetForm(cycle, form);
-        trainIsRewinding(cycle, false);
-
-        expect(cycle.renderStackPop()).andReturn(fl);
-
-        replay();
-
-        fl.render(writer, cycle);
-
-        assertBuffer("<label>{BEFORE-TEXT}<b>FredFlintstone</b>{AFTER-TEXT}</label>");
-
-        verify();
-    }
-
-    public void test_No_Field_Or_DisplayName()
-    {
-        IForm form = newForm();
-        IMarkupWriter writer = newWriter();
-        IRequestCycle cycle = newCycle();
-
-        FieldLabel fl = newInstance(FieldLabel.class, new Object[] {"id", "label"});
-
-        expect(cycle.renderStackPush(fl)).andReturn(fl);
-
-        trainGetForm(cycle, form);
-        trainIsRewinding(cycle, false);
-
-        expect(cycle.renderStackPop()).andReturn(fl);
-
-        replay();
-
-        try
-        {
-            fl.render(writer, cycle);
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Value for parameter 'field' in component "
-                         + "null is null, and a non-null value is required.",
-                         ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void test_Display_Name_From_Field()
-    {
-        IValidationDelegate delegate = new MockDelegate();
-
-        IForm form = newForm();
-
-        IMarkupWriter writer = newBufferWriter();
-        IFormComponent field = newField("MyLabel", null);
-        Location l = newLocation();
-
-        IRequestCycle cycle = newCycle();
-
-        FieldLabel fl = newInstance(FieldLabel.class, "location", l,
-                                    "field", field, "prerender", true);
-
-        expect(cycle.renderStackPush(fl)).andReturn(fl);
-
-        trainGetForm(cycle, form);
-        trainIsRewinding(cycle, false);
-
-        form.prerenderField(writer, field, l);
-        trainGetDelegate(form, delegate);
-
-        expect(cycle.renderStackPop()).andReturn(fl);
-
-        replay();
-
-        fl.render(writer, cycle);
-
-        assertBuffer("{LABEL-PREFIX}<label>{BEFORE-TEXT}MyLabel{AFTER-TEXT}</label>{LABEL-SUFFIX}");
-
-        verify();
-    }
-
-    public void test_Prerender_Off()
-    {
-        IValidationDelegate delegate = new MockDelegate();
-
-        IForm form = newForm();
-
-        IMarkupWriter writer = newBufferWriter();
-        IFormComponent field = newField("MyLabel", null);
-        Location l = newLocation();
-
-        IRequestCycle cycle = newCycle();
-
-        FieldLabel fl = newInstance(FieldLabel.class, "location", l, "field", field);
-
-        expect(cycle.renderStackPush(fl)).andReturn(fl);
-
-        trainGetForm(cycle, form);
-        trainIsRewinding(cycle, false);
-        trainGetDelegate(form, delegate);
-
-        expect(cycle.renderStackPop()).andReturn(fl);
-
-        replay();
-
-        fl.render(writer, cycle);
-
-        assertBuffer("{LABEL-PREFIX}<label>{BEFORE-TEXT}MyLabel{AFTER-TEXT}</label>{LABEL-SUFFIX}");
-
-        verify();
-    }
-
-    public void test_Field_With_Client_Id()
-    {
-        IValidationDelegate delegate = new MockDelegate();
-
-        IForm form = newForm();
-
-        IMarkupWriter writer = newBufferWriter();
-
-        Location l = newLocation();
-
-        IRequestCycle cycle = newCycle();
-
-        IFormComponent field = newField("MyLabel", "clientId");
-        
-        FieldLabel fl = newInstance(FieldLabel.class, "location", l,
-                                    "field", field, "prerender", true);
-
-        expect(cycle.renderStackPush(fl)).andReturn(fl);
-
-        trainGetForm(cycle, form);
-        form.prerenderField(writer, field, l);
-        trainIsRewinding(cycle, false);
-        trainGetDelegate(form, delegate);
-
-        expect(cycle.renderStackPop()).andReturn(fl);
-
-        replay();
-
-        fl.render(writer, cycle);
-
-        assertBuffer("{LABEL-PREFIX}<label for=\"clientId\">{BEFORE-TEXT}MyLabel{AFTER-TEXT}</label>{LABEL-SUFFIX}");
-
-        verify();
-    }
-
-    public void test_No_Display_Name_In_Field()
-    {
-        IForm form = newForm();
-        IMarkupWriter writer = newBufferWriter();
-        IFormComponent field = newField();
-        Location l = newLocation();
-
-        IRequestCycle cycle = newCycle();
-
-        FieldLabel fl = newInstance(FieldLabel.class, "id", "label",
-                                    "location", l,
-                                    "field", field,
-                                    "prerender", true);
-
-        expect(cycle.renderStackPush(fl)).andReturn(fl);
-
-        trainGetForm(cycle, form);
-        form.prerenderField(writer, field, l);
-        trainIsRewinding(cycle, false);
-        trainGetDisplayName(field, null);
-        trainGetExtendedId(field, "Fred/field");
-
-        expect(cycle.renderStackPop()).andReturn(fl);
-
-        replay();
-
-        try
-        {
-            fl.render(writer, cycle);
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals(
-              "Display name for null was not specified and was not provided by field Fred/field.",
-              ex.getMessage());
-        }
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/MockDelegate.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/MockDelegate.java
deleted file mode 100644
index d3f9cf5..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/MockDelegate.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * Mock implementation of {@link org.apache.tapestry.valid.IValidationDelegate}used to test
- * decoration.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class MockDelegate extends ValidationDelegate
-{
-    private static final long serialVersionUID = -9197298078385854706L;
-
-	public void writeLabelPrefix(IFormComponent component, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.print("{LABEL-PREFIX}");
-    }
-
-    public void writeAttributes(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator)
-    {
-        writer.attribute("class", "mock-delegate");
-    }
-
-    public void writeLabelSuffix(IFormComponent component, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.print("{LABEL-SUFFIX}");
-    }
-
-    public void writePrefix(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component,
-            IValidator validator)
-    {
-        writer.print("{PREFIX}");
-    }
-
-    public void writeSuffix(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component,
-            IValidator validator)
-    {
-        writer.print("{SUFFIX}");
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void beforeLabelText(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component)
-    {
-        writer.print("{BEFORE-TEXT}");
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    public void afterLabelText(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component)
-    {
-        writer.print("{AFTER-TEXT}");
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestDateValidator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestDateValidator.java
deleted file mode 100644
index 7184520..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestDateValidator.java
+++ /dev/null
@@ -1,287 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.text.DateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.Locale;
-
-import org.apache.tapestry.form.IFormComponent;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-
-/**
- * Tests the {@link DateValidator}class.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-@Test(sequential=true)
-public class TestDateValidator extends BaseValidatorTestCase
-{
-    private Calendar calendar = new GregorianCalendar();
-
-    private DateValidator v = new DateValidator();
-
-    @AfterMethod
-    public void reset()
-    {
-        v.setRequired(false);
-        v.setRequiredMessage(null);
-        v.setDateTooEarlyMessage(null);
-        v.setDateTooLateMessage(null);
-        v.setDisplayFormat(DateValidator.DEFAULT_DISPLAY_FORMAT);
-        v.setInvalidDateFormatMessage(null);
-        v.setMaximum(null);
-        v.setMinimum(null);
-        v.setFormat(DateValidator.DEFAULT_DATE_FORMAT);
-    }
-    
-    private Date buildDate(int month, int day, int year)
-    {
-        calendar.clear();
-
-        calendar.set(Calendar.MONTH, month);
-        calendar.set(Calendar.DAY_OF_MONTH, day);
-        calendar.set(Calendar.YEAR, year);
-
-        return calendar.getTime();
-    }
-
-    public void testToStringNull()
-    {
-        String out = v.toString(null, null);
-
-        assertNull(out);
-    }
-
-    public void testToStringValid()
-    {
-        String out = v.toString(null, buildDate(Calendar.DECEMBER, 8, 2001));
-
-        assertEquals("12/08/2001", out);
-    }
-
-    public void testToStringFormat()
-    {
-        if (IS_JDK13)
-            return;
-
-        DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMAN);
-
-        v.setFormat(format);
-
-        String out = v.toString(null, buildDate(Calendar.DECEMBER, 8, 2001));
-
-        assertEquals("08.12.01", out);
-    }
-
-    public void testToObjectNull() throws ValidatorException
-    {
-        IFormComponent field = newField();
-
-        replay();
-
-        Object out = v.toObject(field, null);
-
-        assertNull(out);
-
-        verify();
-    }
-
-    public void testToObjectEmpty() throws ValidatorException
-    {
-        IFormComponent field = newField();
-
-        replay();
-
-        Object out = v.toObject(field, "");
-
-        assertNull(out);
-
-        verify();
-    }
-
-    public void testToObjectInvalid()
-    {
-        IFormComponent field = newField("badDatesIndy");
-
-        replay();
-
-        try
-        {
-            v.toObject(field, "frankenhooker");
-
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Invalid date format for badDatesIndy.  Format is MM/DD/YYYY.".toLowerCase(), ex
-                    .getMessage().toLowerCase());
-            assertEquals(ValidationConstraint.DATE_FORMAT, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testOverrideInvalidDateFormatMessage()
-    {
-
-        IFormComponent field = newField("badDatesIndy");
-
-        replay();
-
-        v.setInvalidDateFormatMessage("Enter a valid date for {0}.");
-
-        try
-        {
-            v.toObject(field, "frankenhooker");
-
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Enter a valid date for badDatesIndy.", ex.getMessage());
-
-        }
-
-        verify();
-    }
-
-    public void testToObjectFormat() throws ValidatorException
-    {
-        if (IS_JDK13)
-            return;
-
-        DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMAN);
-
-        v.setFormat(format);
-
-        // Again, adjust for missing German localization in JDK 1.3
-
-        Object out = v.toObject(null, "08.12.01");
-
-        assertEquals(buildDate(Calendar.DECEMBER, 8, 2001), out, "Result.");
-    }
-
-    public void testToObjectMinimum()
-    {
-        IFormComponent field = newField("toObjectMinimum", Locale.ENGLISH);
-
-        replay();
-
-        v.setMinimum(buildDate(Calendar.DECEMBER, 24, 2001));
-
-        try
-        {
-            v.toObject(field, "12/8/2001");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.TOO_SMALL, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testOverrideDateTooEarlyMessage()
-    {
-        IFormComponent field = newField("inputDate", Locale.ENGLISH);
-
-        replay();
-
-        v.setMinimum(buildDate(Calendar.DECEMBER, 24, 2001));
-        v.setDateTooEarlyMessage("Provide a date for {0} after Dec 24 2001.");
-
-        try
-        {
-            v.toObject(field, "12/8/2001");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Provide a date for inputDate after Dec 24 2001.", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_SMALL, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testToObjectMinimumNull() throws ValidatorException
-    {
-        v.setMinimum(buildDate(Calendar.DECEMBER, 24, 2001));
-
-        Object out = v.toObject(null, null);
-
-        assertNull(out);
-    }
-
-    public void testToObjectMaximum()
-    {
-        IFormComponent field = newField("toObjectMaximum");
-
-        replay();
-
-        v.setMaximum(buildDate(Calendar.DECEMBER, 24, 2001));
-
-        try
-        {
-            v.toObject(field, "12/8/2002");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("toObjectMaximum must be on or before 12/24/2001.", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_LARGE, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testOverrideDateTooLateMessage()
-    {
-        IFormComponent field = newField("toObjectMaximum");
-
-        replay();
-
-        v.setMaximum(buildDate(Calendar.DECEMBER, 24, 2001));
-        v.setDateTooLateMessage("Try again with a date before Dec 24 2001 in {0}.");
-
-        try
-        {
-            v.toObject(field, "12/8/2002");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Try again with a date before Dec 24 2001 in toObjectMaximum.", ex
-                    .getMessage());
-        }
-
-        verify();
-    }
-
-    public void testToObjectMaximumNull() throws ValidatorException
-    {
-        v.setMaximum(buildDate(Calendar.DECEMBER, 24, 2001));
-
-        Object out = v.toObject(null, null);
-
-        assertNull(out);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestEmailValidator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestEmailValidator.java
deleted file mode 100644
index e011a91..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestEmailValidator.java
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.form.IFormComponent;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.valid.EmailValidator}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-@Test(sequential=true)
-public class TestEmailValidator extends BaseValidatorTestCase
-{
-    private EmailValidator v = new EmailValidator();
-
-    @AfterMethod
-    public void reset()
-    {
-        v.setClientScriptingEnabled(false);
-        v.setInvalidEmailFormatMessage(null);
-        v.setMinimumLength(-1);
-        v.setMinimumLengthMessage(null);
-        v.setRequired(false);
-        v.setRequiredMessage(null);
-    }
-    
-    public void testValidEmail() throws ValidatorException
-    {
-        IFormComponent field = newField();
-
-        replay();
-
-        Object result = v.toObject(field, "foo@bar.com");
-
-        assertEquals("foo@bar.com", result);
-
-        verify();
-    }
-
-    public void testInvalidEmail()
-    {
-        IFormComponent field = newField("email");
-
-        replay();
-
-        try
-        {
-            v.toObject(field, "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.EMAIL_FORMAT, ex.getConstraint());
-            assertEquals("Invalid email format for email.  Format is user@hostname.", ex
-                    .getMessage());
-        }
-
-        verify();
-    }
-
-    public void testOverrideInvalidEmailFormatMessage()
-    {
-        IFormComponent field = newField("email");
-
-        replay();
-
-        v
-                .setInvalidEmailFormatMessage("Try a valid e-mail address (for {0}), like ''dick@wad.com.''");
-
-        try
-        {
-            v.toObject(field, "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Try a valid e-mail address (for email), like 'dick@wad.com.'", ex
-                    .getMessage());
-        }
-
-        verify();
-    }
-
-    public void testTooShort()
-    {
-        IFormComponent field = newField("short");
-
-        replay();
-
-        v.setMinimumLength(20);
-
-        try
-        {
-            v.toObject(field, "foo@bar.com");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.MINIMUM_WIDTH, ex.getConstraint());
-            assertEquals("You must enter at least 20 characters for short.", ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void testOverrideMinimumLengthMessage()
-    {
-        IFormComponent field = newField("short");
-
-        replay();
-
-        v.setMinimumLength(20);
-        v.setMinimumLengthMessage("E-mail addresses must be at least 20 characters.");
-
-        try
-        {
-            v.toObject(field, "foo@bar.com");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("E-mail addresses must be at least 20 characters.", ex.getMessage());
-        }
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestIntValidator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestIntValidator.java
deleted file mode 100644
index aeb7576..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestIntValidator.java
+++ /dev/null
@@ -1,235 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.util.Map;
-
-import org.apache.tapestry.form.IFormComponent;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.valid.IntValidator}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestIntValidator extends BaseValidatorTestCase
-{
-    public void testToStringNull()
-    {
-        IValidator validator = new IntValidator();
-
-        assertNull(validator.toString(null, null));
-    }
-
-    public void testToStringNonZero()
-    {
-        Number number = new Integer(37);
-
-        IValidator validator = new IntValidator();
-
-        assertEquals("37", validator.toString(null, number));
-    }
-
-    public void testToStringZero()
-    {
-        Number number = new Integer(0);
-
-        IValidator validator = new IntValidator();
-
-        assertEquals("0", validator.toString(null, number));
-    }
-
-    public void testToStringZeroAsNull()
-    {
-        Number number = new Integer(0);
-
-        IValidator validator = new IntValidator("zeroIsNull");
-
-        assertNull(validator.toString(null, number));
-    }
-
-    public void testToObjectNull() throws Exception
-    {
-        IValidator validator = new IntValidator();
-
-        assertNull(validator.toObject(null, ""));
-    }
-
-    public void testToObjectSucess() throws Exception
-    {
-        IValidator validator = new IntValidator();
-
-        Number expected = new Integer("-12345");
-
-        assertEquals(expected, validator.toObject(null, "-12345"));
-    }
-
-    public void testToObjectFailure()
-    {
-        IFormComponent field = newField("BamBam");
-
-        replay();
-
-        IValidator validator = new IntValidator();
-
-        try
-        {
-            validator.toObject(field, "abcdef");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ex.getMessage(), "BamBam must be a numeric value. ");
-            assertSame(ValidationConstraint.NUMBER_FORMAT, ex.getConstraint());
-        }
-    }
-
-    public void testToObjectTooSmall()
-    {
-        IFormComponent field = newField("Fred");
-
-        replay();
-
-        IValidator validator = new IntValidator("minimum=10");
-
-        try
-        {
-            validator.toObject(field, "9");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Fred must not be smaller than 10.", ex.getMessage());
-            assertSame(ValidationConstraint.TOO_SMALL, ex.getConstraint());
-        }
-    }
-
-    public void testToObjectTooLarge()
-    {
-        IFormComponent field = newField("Barney");
-
-        replay();
-
-        IValidator validator = new IntValidator("maximum=10");
-
-        try
-        {
-            validator.toObject(field, "207");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Barney must not be larger than 10.", ex.getMessage());
-            assertSame(ValidationConstraint.TOO_LARGE, ex.getConstraint());
-        }
-    }
-
-    public void testScriptSymbolsJustFormat()
-    {
-        IFormComponent field = newField("Fred");
-
-        replay();
-
-        IntValidator validator = new IntValidator();
-
-        Map map = validator.buildSymbols(field);
-
-        assertEquals(1, map.size());
-
-        assertEquals(map.get("formatMessage"), "Fred must be an integer value. ");
-
-        verify();
-    }
-
-    public void testScriptSymbolsRequired()
-    {
-        IFormComponent field = newField("Barney", 2);
-
-        replay();
-
-        IntValidator validator = new IntValidator("required");
-
-        Map map = validator.buildSymbols(field);
-
-        assertEquals(2, map.size());
-
-        assertEquals("You must enter a value for Barney.", map.get("requiredMessage"));
-        assertEquals(map.get("formatMessage"), "Barney must be an integer value. ");
-
-        verify();
-    }
-
-    public void testScriptSymbolsMinimum()
-    {
-        IFormComponent field = newField("Barney", 2);
-
-        replay();
-
-        IntValidator validator = new IntValidator("minimum=5");
-
-        Map map = validator.buildSymbols(field);
-
-        assertEquals(4, map.size());
-
-        assertEquals(map.get("minimum"), new Integer(5));
-        assertNull(map.get("maximum"));
-        assertEquals("Barney must not be smaller than 5.", map.get("rangeMessage"));
-        assertEquals(map.get("formatMessage"), "Barney must be an integer value. ");
-
-        verify();
-    }
-    
-    public void testScriptSymbolsMaximum()
-    {
-        IFormComponent field = newField("Barney", 2);
-
-        replay();
-
-        IntValidator validator = new IntValidator("maximum=5");
-
-        Map map = validator.buildSymbols(field);
-
-        assertEquals(4, map.size());
-
-        assertEquals(new Integer(5), map.get("maximum"));
-        assertNull(map.get("minimum"));
-        assertEquals("Barney must not be larger than 5.", map.get("rangeMessage"));
-        assertEquals(map.get("formatMessage"), "Barney must be an integer value. ");
-
-        verify();
-    }    
-    
-    public void testScriptSymbolsRange()
-    {
-        IFormComponent field = newField("Barney", 2);
-
-        replay();
-
-        IntValidator validator = new IntValidator("maximum=5,minimum=1");
-
-        Map map = validator.buildSymbols(field);
-
-        assertEquals(4, map.size());
-
-        assertEquals(new Integer(1), map.get("minimum"));
-        assertEquals(new Integer(5), map.get("maximum"));
-        assertEquals("Barney must be between 1 and 5.", map.get("rangeMessage"));
-        assertEquals(map.get("formatMessage"), "Barney must be an integer value. ");
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestNumberValidator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestNumberValidator.java
deleted file mode 100644
index 08494ef..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestNumberValidator.java
+++ /dev/null
@@ -1,341 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import static org.easymock.EasyMock.expect;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Locale;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.form.IFormComponent;
-import org.testng.annotations.Configuration;
-import org.testng.annotations.Test;
-
-/**
- * Test the {@link NumberValidator}.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-@Test(sequential=true)
-public class TestNumberValidator extends BaseValidatorTestCase
-{
-    private NumberValidator v = new NumberValidator();
-
-    @Configuration(afterTestMethod = true)
-    public void reset()
-    {
-        v.setInvalidIntegerFormatMessage(null);
-        v.setInvalidNumericFormatMessage(null);
-        v.setMaximum(null);
-        v.setMinimum(null);
-        v.setNumberRangeMessage(null);
-        v.setNumberTooLargeMessage(null);
-        v.setNumberTooSmallMessage(null);
-        v.setRequired(false);
-        v.setRequiredMessage(null);
-    }
-    
-    private void testPassThru(Class valueTypeClass, Number input) throws ValidatorException
-    {
-        IFormComponent field = newField();
-        IPage page = newMock(IPage.class);
-        
-        expect(field.getPage()).andReturn(page).anyTimes();
-        
-        expect(page.getLocale()).andReturn(Locale.GERMAN).anyTimes();
-        
-        expect(field.getDisplayName()).andReturn(null).anyTimes();
-        
-        replay();
-        
-        testPassThru(field, valueTypeClass, input);
-
-        verify();
-    }
-
-    private void testPassThru(IFormComponent field, Class valueTypeClass, Number input)
-            throws ValidatorException
-    {
-        v.setValueTypeClass(valueTypeClass);
-
-        String s = v.toString(field, input);
-
-        Object o = v.toObject(field, s);
-        
-        assertEquals(input, o);
-    }
-
-    public void testShort() throws ValidatorException
-    {
-        testPassThru(Short.class, new Short((short) 1000));
-    }
-
-    public void testInteger() throws ValidatorException
-    {
-        testPassThru(Integer.class, new Integer(373));
-    }
-
-    public void testByte() throws ValidatorException
-    {
-        testPassThru(Byte.class, new Byte((byte) 131));
-    }
-
-    public void testFloat() throws ValidatorException
-    {
-        testPassThru(Float.class, new Float(3.1415));
-    }
-
-    public void testDouble() throws ValidatorException
-    {
-        testPassThru(Double.class, new Double(348348.484854848));
-    }
-
-    public void testLong() throws ValidatorException
-    {
-        testPassThru(Long.class, new Long(37373218723l));
-    }
-
-    public void testInRange() throws ValidatorException
-    {
-        v.setMinimum(new Integer(100));
-        v.setMaximum(new Integer(200));
-
-        testPassThru(Integer.class, new Integer(150));
-    }
-
-    public void testUnderMinimum()
-    {
-        IFormComponent field = newField("testUnderMinimum");
-
-        replay();
-
-        v.setMinimum(new Integer(100));
-        v.setMaximum(new Integer(200));
-
-        try
-        {
-            testPassThru(field, Integer.class, new Integer(50));
-
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("testUnderMinimum must not be smaller than 100.", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_SMALL, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testOverrideNumberTooSmallMessage()
-    {
-        IFormComponent field = newField("underMinimum");
-
-        replay();
-
-        v.setMinimum(new Integer(100));
-        v.setNumberTooSmallMessage("Anything under 100 for {0} is worth jack.");
-
-        try
-        {
-            testPassThru(field, Integer.class, new Integer(50));
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Anything under 100 for underMinimum is worth jack.", ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void testOverMaximum()
-    {
-        IFormComponent field = newField("overMaximum");
-
-        replay();
-
-        v.setMinimum(new Integer(100));
-        v.setMaximum(new Integer(200));
-
-        try
-        {
-            testPassThru(field, Integer.class, new Integer(250));
-
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("overMaximum must not be larger than 200.", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_LARGE, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testOverrideNumberTooLargeMessage()
-    {
-        IFormComponent field = newField("overMaximum");
-
-        replay();
-
-        v.setMaximum(new Integer(200));
-        v.setNumberTooLargeMessage("You think I want a value larger than {1} for {0}?");
-
-        try
-        {
-            testPassThru(field, Integer.class, new Integer(1000));
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("You think I want a value larger than 200 for overMaximum?", ex
-                    .getMessage());
-        }
-
-        verify();
-    }
-
-    public void testInvalidFormat()
-    {
-        v.setValueTypeClass(Integer.class);
-        IFormComponent field = newField("invalidFormat");
-
-        replay();
-
-        try
-        {
-            v.toObject(field, "xyz");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ex.getMessage(), "invalidFormat must be a numeric value. ");
-            assertEquals(ValidationConstraint.NUMBER_FORMAT, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testOverrideInvalidNumericFormatMessage()
-    {
-        v.setValueTypeClass(Integer.class);
-        v.setInvalidNumericFormatMessage("Dude, gimme a number for {0}.");
-
-        IFormComponent field = newField("invalidFormat");
-
-        replay();
-
-        try
-        {
-            v.toObject(field, "xyz");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Dude, gimme a number for invalidFormat.", ex.getMessage());
-            assertEquals(ValidationConstraint.NUMBER_FORMAT, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testBigInteger() throws ValidatorException
-    {
-        testPassThru(BigInteger.class, new BigInteger(
-                "234905873490587234905724908252390487590234759023487523489075"));
-    }
-
-    public void testBigDecimal() throws ValidatorException
-    {
-        testPassThru(BigDecimal.class, new BigDecimal(
-                "-29574923857342908744.19058734289734907543289752345897234590872349085"));
-    }
-
-    /** @since 3.0 * */
-
-    private void checkAdaptorType(int expectedType, Class numberType)
-    {
-        NumberValidator.NumberStrategy a = NumberValidator.getStrategy(numberType);
-
-        assertEquals(expectedType, a.getNumberType());
-    }
-
-    /** @since 3.0 * */
-
-    public void testAdaptorTypes() throws Exception
-    {
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_INTEGER, Byte.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_INTEGER, Short.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_INTEGER, Integer.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_INTEGER, Long.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_INTEGER, BigInteger.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_REAL, Float.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_REAL, Double.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_REAL, BigDecimal.class);
-    }
-
-    /** @since 3.0 * */
-
-    private void checkCompare(Number left, Number right)
-    {
-        NumberValidator.NumberStrategy a = NumberValidator.getStrategy(left.getClass());
-
-        assertEquals(0, a.compare(left, right));
-    }
-
-    public void testByteCompare()
-    {
-        checkCompare(new Byte((byte) 3), new Long(3));
-    }
-
-    public void testShortCompare()
-    {
-        checkCompare(new Short((short) 14), new Double(14.0));
-    }
-
-    public void testIntegerCompare()
-    {
-        checkCompare(new Integer(19), new Long(19));
-    }
-
-    public void testLongCompare()
-    {
-        checkCompare(new Long(-22), new Short((short) -22));
-    }
-
-    public void testBigIntegerCompare()
-    {
-        checkCompare(new BigInteger("300"), new Long("300"));
-    }
-
-    public void testFloatCompare()
-    {
-        checkCompare(new Float("0"), new Double("0"));
-    }
-
-    public void testDoubleCompare()
-    {
-        checkCompare(new Double("0"), new Float("0"));
-    }
-
-    public void testBigDecimalCompare()
-    {
-        checkCompare(new BigDecimal("-137.75"), new Double("-137.75"));
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestPatternValidator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestPatternValidator.java
deleted file mode 100644
index 0caf22a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestPatternValidator.java
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.form.IFormComponent;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-
-/**
- * Test cases for PatternValidator.
- * 
- * @author Harish Krishnaswamy
- * @since 3.0
- */
-@Test(sequential=true)
-public class TestPatternValidator extends BaseValidatorTestCase
-{
-    PatternValidator pv = new PatternValidator();
-
-    @AfterMethod
-    public void reset()
-    {
-        pv.setClientScriptingEnabled(false);
-        pv.setPatternDelegate(null);
-        pv.setPatternNotMatchedMessage(null);
-        pv.setPatternString("");
-        pv.setRequired(false);
-        pv.setRequiredMessage(null);
-    }
-    
-    private void positiveTest(IFormComponent field, String input) throws ValidatorException
-    {
-        Object result = pv.toObject(field, input);
-        assertEquals(input, result);
-    }
-
-    public void testFulfillingPatterns() throws ValidatorException
-    {
-        IFormComponent field = newField();
-
-        pv.setPatternString("foo|foot");
-        positiveTest(field, "xfooty");
-
-        pv.setPatternString("^(\\d{5}(-\\d{4})?)$");
-        positiveTest(field, "06514");
-        positiveTest(field, "06514-3149");
-    }
-
-    private void assertValidatorException(ValidatorException e)
-    {
-        assertEquals(ValidationConstraint.PATTERN_MISMATCH, e.getConstraint());
-        assertEquals("PatternField does not fulfill the required pattern " + pv.getPatternString()
-                + ".", e.getMessage());
-    }
-
-    private void negativeTest(String input)
-    {
-        IFormComponent field = newField("PatternField");
-
-        replay();
-
-        try
-        {
-            pv.toObject(field, input);
-            unreachable();
-        }
-        catch (ValidatorException e)
-        {
-            assertValidatorException(e);
-        }
-
-        verify();
-    }
-
-    public void testUnfulfillingPatterns()
-    {
-        pv.setPatternString("foo|foot");
-        negativeTest("fot");
-
-        pv.setPatternString("^(\\d{5}(-\\d{4})?)$");
-        negativeTest("065143");
-        negativeTest("06514-314");
-    }
-
-    public void testMalformedPattern() throws ValidatorException
-    {
-        Location l = fabricateLocation(11);
-        
-        IFormComponent field = newMock(IFormComponent.class);
-
-        expect(field.getDisplayName()).andReturn("badPattern");
-
-        expect(field.getLocation()).andReturn(l);
-
-        replay();
-
-        pv.setPatternString("^(\\d{5}(-\\d{4})?$");
-
-        try
-        {
-            pv.toObject(field, "06514");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException e)
-        {
-            checkException(e, "Unable to match pattern " + pv.getPatternString()
-                    + " for field badPattern.");
-            assertSame(l, e.getLocation());
-        }
-
-        verify();
-    }
-
-    public void testOverridePatternNotMatchedMessage()
-    {
-        IFormComponent field = newField("PatternField");
-        replay();
-
-        pv.setPatternNotMatchedMessage("Field: {0}, Pattern: {1}, you figure!");
-        pv.setPatternString("^(\\d{5}(-\\d{4})?)$");
-
-        try
-        {
-            pv.toObject(field, "xyz");
-            unreachable();
-        }
-        catch (ValidatorException e)
-        {
-            assertEquals(ValidationConstraint.PATTERN_MISMATCH, e.getConstraint());
-            assertEquals("Field: PatternField, Pattern: ^(\\d{5}(-\\d{4})?)$, you figure!", e
-                    .getMessage());
-        }
-
-        verify();
-    }
-
-    public void testOverridePatternMatcher()
-    {
-        class MatcherDelegate implements PatternDelegate
-        {
-            public boolean contains(String value, String patternString)
-            {
-                return false;
-            }
-
-            public String getEscapedPatternString(String patternString)
-            {
-                return null;
-            }
-        }
-
-        pv.setPatternDelegate(new MatcherDelegate());
-        pv.setPatternString("^(\\d{5}(-\\d{4})?)$");
-        negativeTest("06514-3149");
-
-        assertNull(pv.getEscapedPatternString());
-    }
-
-    public void testGetEscapedPatternString()
-    {
-        pv.setPatternString("^(\\d{5}(-\\d{4})?)$");
-        assertEquals("\\^\\(\\\\d\\{5\\}\\(\\-\\\\d\\{4\\}\\)\\?\\)\\$", pv
-                .getEscapedPatternString());
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestStringValidator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestStringValidator.java
deleted file mode 100644
index 4ebb71a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestStringValidator.java
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.form.IFormComponent;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-
-/**
- * Tests the {@link StringValidator}class.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-@Test(sequential=true)
-public class TestStringValidator extends BaseValidatorTestCase
-{
-    private StringValidator v = new StringValidator();
-
-    @AfterMethod
-    public void resetValidator()
-    {
-        v.setMinimumLength(-1);
-        v.setMinimumLengthMessage(null);
-        v.setRequired(false);
-        v.setRequiredMessage(null);
-    }
-    
-    
-    public void testToString()
-    {
-        IFormComponent field = newField();
-
-        replay();
-
-        String in = "Foo";
-        String out = v.toString(field, in);
-
-        assertEquals(in, out);
-
-        verify();
-    }
-
-    public void testToStringNull()
-    {
-        IFormComponent field = newField();
-
-        replay();
-
-        String out = v.toString(field, null);
-
-        assertNull(out);
-
-        verify();
-    }
-
-    public void testToObjectRequiredFail()
-    {
-        IFormComponent field = newField("requiredField");
-
-        replay();
-
-        v.setRequired(true);
-
-        try
-        {
-            v.toObject(field, "");
-
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("You must enter a value for requiredField.", ex.getMessage());
-            assertEquals(ValidationConstraint.REQUIRED, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testOverrideRequiredMessage()
-    {
-        IFormComponent field = newField("overrideMessage");
-
-        replay();
-
-        v.setRequired(true);
-        v.setRequiredMessage("Gimme a value for {0} you bastard.");
-
-        try
-        {
-            v.toObject(field, "");
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Gimme a value for overrideMessage you bastard.", ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void testToObjectRequiredPass() throws ValidatorException
-    {
-        IFormComponent field = newField();
-
-        replay();
-        
-        v.setRequired(true);
-        
-        Object result = v.toObject(field, "stuff");
-
-        assertEquals("stuff", result, "Result.");
-
-        verify();
-    }
-
-    public void testToObjectMinimumFail()
-    {
-        IFormComponent field = newField("minimumLength");
-
-        replay();
-
-        v.setMinimumLength(10);
-
-        try
-        {
-            v.toObject(field, "abc");
-
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("You must enter at least 10 characters for minimumLength.", ex
-                    .getMessage());
-            assertEquals(ValidationConstraint.MINIMUM_WIDTH, ex.getConstraint());
-        }
-
-        verify();
-    }
-
-    public void testOverrideMinimumMessage()
-    {
-        IFormComponent field = newField("overrideMessage");
-
-        replay();
-
-        v.setMinimumLength(10);
-        v
-                .setMinimumLengthMessage("You really think less than 10 characters for {0} is gonna cut it?");
-
-        try
-        {
-            v.toObject(field, "");
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(
-                    "You really think less than 10 characters for overrideMessage is gonna cut it?",
-                    ex.getMessage());
-        }
-    }
-
-    public void testToObjectMinimumPass() throws ValidatorException
-    {
-        IFormComponent field = newField();
-
-        replay();
-
-        v.setMinimumLength(10);
-
-        String in = "ambidexterous";
-
-        Object out = v.toObject(field, in);
-
-        assertEquals(in, out, "Result");
-
-        verify();
-    }
-
-    /**
-     * An empty string is not subject to the minimum length constraint.
-     */
-
-    public void testToObjectMinimumNull() throws ValidatorException
-    {
-        IFormComponent field = newField();
-
-        replay();
-
-        v.setMinimumLength(10);
-
-        String in = "";
-
-        Object out = v.toObject(field, in);
-
-        assertNull(out);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestUrlValidator.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestUrlValidator.java
deleted file mode 100644
index f15e8b0..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestUrlValidator.java
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.form.IFormComponent;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.valid.EmailValidator}.
- * 
- * @author Tsvetelin Saykov
- * @author Jimmy Dyson
- * @since 3.0
- */
-@Test(sequential=true)
-public class TestUrlValidator extends BaseValidatorTestCase
-{
-    private UrlValidator v = new UrlValidator();
-
-    @AfterMethod(alwaysRun=true)
-    public void reset()
-    {
-        v.setClientScriptingEnabled(false);
-        v.setDisallowedProtocolMessage(null);
-        v.setInvalidUrlFormatMessage(null);
-        v.setMinimumLength(-1);
-        v.setMinimumLengthMessage(null);
-        v.setRequired(false);
-        v.setRequiredMessage(null);
-    }
-    
-    public void testValidUrl() throws ValidatorException
-    {
-        IFormComponent field = newField();
-
-        replay();
-
-        Object result = v.toObject(field, "http://www.google.com");
-        assertEquals("http://www.google.com", result);
-
-        verify();
-    }
-
-    public void testInvalidUrl()
-    {
-        IFormComponent field = newField("url");
-
-        replay();
-
-        try
-        {
-            v.toObject(field, "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.URL_FORMAT, ex.getConstraint());
-            assertEquals("Invalid URL.", ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void testOverrideInvalidUrlFormatMessage()
-    {
-        IFormComponent field = newField("url");
-
-        replay();
-
-        v.setInvalidUrlFormatMessage("Try a valid URL (for {0}), like \"http://www.google.com\"");
-
-        try
-        {
-            v.toObject(field, "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Try a valid URL (for url), like \"http://www.google.com\"", ex
-                    .getMessage());
-        }
-
-        verify();
-    }
-
-    public void testTooShort()
-    {
-        IFormComponent field = newField("short");
-
-        replay();
-
-        v.setMinimumLength(20);
-
-        try
-        {
-            v.toObject(field, "http://www.test.com");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.MINIMUM_WIDTH, ex.getConstraint());
-            assertEquals("You must enter at least 20 characters for short.", ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void testOverrideMinimumLengthMessage()
-    {
-        IFormComponent field = newField("short");
-
-        replay();
-
-        v.setMinimumLength(20);
-        v.setMinimumLengthMessage("URLs must be at least 20 characters.");
-
-        try
-        {
-            v.toObject(field, "http://www.test.com");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("URLs must be at least 20 characters.", ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void testDisallowedProtocol()
-    {
-        IPage page = newPage(Locale.ENGLISH);
-        IFormComponent field = newMock(IFormComponent.class);
-
-        expect(field.getPage()).andReturn(page);
-
-        replay();
-
-        v.setAllowedProtocols("http,https");
-
-        try
-        {
-            v.toObject(field, "ftp://ftp.test.com");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.DISALLOWED_PROTOCOL, ex.getConstraint());
-            assertEquals("Disallowed protocol - protocol must be http or https.", ex.getMessage());
-        }
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestValidField.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestValidField.java
deleted file mode 100644
index b757d0a..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestValidField.java
+++ /dev/null
@@ -1,360 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.*;
-import org.apache.tapestry.form.BaseFormComponentTestCase;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.MockDelegate;
-import org.apache.tapestry.html.BasePage;
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.valid.ValidField}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestValidField extends BaseFormComponentTestCase
-{
-
-    public void testWasPrerendered()
-    {
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-        
-        ValidField component = (ValidField) newInstance(ValidField.class);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        
-        trainWasPrerendered(form, writer, component, true);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    /**
-     * Check when the form is not rewinding, but the cycle is rewinding (a whole page rewind care of
-     * the action service).
-     */
-
-    public void testFormNotRewinding()
-    {
-        ValidField component = (ValidField) newInstance(ValidField.class);
-
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, true);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-    }
-
-    private void trainToObject(IValidator validator, IFormComponent component,
-            String fieldValue, Object translatedValue) throws ValidatorException
-    {
-        expect(validator.toObject(component, fieldValue)).andReturn(translatedValue);
-    }
-
-    public void testRewind() throws Exception
-    {
-        Object translatedValue = new Object();
-        
-        IValidator validator = newMock(IValidator.class);
-
-        ValidField component = (ValidField) newInstance(ValidField.class, "validator", validator);
-
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-
-        IMarkupWriter writer = newWriter();
-
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        delegate.setFormComponent(component);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, true);
-
-        trainGetParameter(cycle, "fred", "fred-value");
-
-        delegate.recordFieldInputValue("fred-value");
-
-        trainToObject(validator, component, "fred-value", translatedValue);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertSame(translatedValue, PropertyUtils.read(component, "value"));
-    }
-
-    public void testRewindNoValidator()
-    {   
-        IPage page = (IPage) newInstance(BasePage.class);
-        page.setPageName("Barney");
-        
-        ValidField component = newInstance(ValidField.class, new Object[]
-        { "page", page, "id", "inputFred", "container", page });
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-        
-        IMarkupWriter writer = newWriter();
-        
-        IValidationDelegate delegate = newDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        
-        Location l = newLocation();
-        IBinding binding = newBinding(l);
-        
-        component.setBinding("validator", binding);
-        
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-        
-        delegate.setFormComponent(component);
-        
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, true);
-        
-        trainGetParameter(cycle, "fred", "fred-value");
-
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        try
-        {
-            component.render(writer, cycle);
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals(
-                    "Value for parameter 'validator' in component Barney/inputFred is null, and a non-null value is required.",
-                    ex.getMessage());
-            assertSame(l, ex.getLocation());
-            assertSame(binding, ex.getBinding());
-        }
-
-        verify();
-    }
-
-    public void testRender()
-    {
-        Object value = new Object();
-        
-        IValidator validator = newMock(IValidator.class);
-
-        ValidField component = newInstance(ValidField.class, new Object[]
-        { "value", value, "validator", validator });
-
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-        checkOrder(form, false);
-        
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        trainToString(validator, component, value, "fred value");
-
-        expect(validator.isRequired()).andReturn(false);
-
-        // Would be nice to have this do something so we could check the timing, but ...
-
-        validator.renderValidatorContribution(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertSame(component, delegate.getFormComponent());
-        assertBuffer("<span class=\"prefix\"><input type=\"text\" name=\"fred\" " +
-                "value=\"fred value\" id=\"fred\" class=\"validation-delegate\" /></span>");
-    }
-
-    private void trainToString(IValidator validator,
-            IFormComponent component, Object value, String string)
-    {
-        expect(validator.toString(component, value)).andReturn(string);
-    }
-
-    public void testRenderNull()
-    {
-        IPage page = (IPage) newInstance(BasePage.class);
-        IValidator validator = newMock(IValidator.class);
-
-        ValidField component = newInstance(ValidField.class, new Object[]
-        { "validator", validator, "page", page, "container", page });
-        
-        IRequestCycle cycle = newCycle();
-        
-        page.attach(null, cycle);
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        IForm form = newMock(IForm.class);
-        checkOrder(form, false);
-
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate();
-
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-        
-        form.setFormFieldUpdating(true);
-        
-        trainToString(validator, component, null, null);
-
-        expect(validator.isRequired()).andReturn(false);
-
-        // Would be nice to have this do something so we could check the timing, but ...
-
-        validator.renderValidatorContribution(component, writer, cycle);
-
-        // Short cut this here, so that it appears some other field is
-        // taking the honors ...
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertSame(component, delegate.getFormComponent());
-        assertBuffer("<span class=\"prefix\"><input type=\"text\" name=\"fred\" id=\"fred\" class=\"validation-delegate\" /></span>");
-    }
-
-    public void testRenderWithError()
-    {
-        Object value = new Object();
-        
-        IValidator validator = newMock(IValidator.class);
-        
-        IRequestCycle cycle = newCycle();
-        IForm form = newMock(IForm.class);
-        checkOrder(form, false);
-        
-        ValidField component = newInstance(ValidField.class, new Object[]
-        { "value", value, "validator", validator, "form", form, "name", "fred" });
-        
-        expect(cycle.renderStackPush(component)).andReturn(component);
-        
-        IMarkupWriter writer = newBufferWriter();
-
-        MockDelegate delegate = new MockDelegate(true);
-        delegate.recordFieldInputValue("recorded field value");
-
-        trainGetForm(cycle, form);
-        trainWasPrerendered(form, writer, component, false);
-        trainGetDelegate(form, delegate);
-        
-        trainGetElementId(form, component, "fred");
-        trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
-
-        form.setFormFieldUpdating(true);
-        
-        expect(validator.isRequired()).andReturn(true);
-
-        // Would be nice to have this do something so we could check the timing, but ...
-
-        validator.renderValidatorContribution(component, writer, cycle);
-        
-        expect(cycle.renderStackPop()).andReturn(component);
-        
-        replay();
-
-        component.render(writer, cycle);
-
-        verify();
-
-        assertSame(component, delegate.getFormComponent());
-        assertBuffer("<span class=\"prefix\"><input type=\"text\" name=\"fred\" " +
-                "value=\"recorded field value\" id=\"fred\" class=\"validation-delegate\" /></span>");
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestValidatorBindingFactory.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestValidatorBindingFactory.java
deleted file mode 100644
index d610b04..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/TestValidatorBindingFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.Location;
-import org.apache.hivemind.lib.BeanFactory;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.apache.tapestry.engine.IScriptSource;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.valid.ValidatorBindingFactory}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestValidatorBindingFactory extends BaseComponentTestCase
-{
-    public void testFactory()
-    {
-        IValidator validator = newMock(IValidator.class);
-        ValueConverter vc = newMock(ValueConverter.class);
-        
-        BeanFactory vbf = newMock(BeanFactory.class);
-
-        IScriptSource scriptSource = newMock(IScriptSource.class);
-        
-        expect(vbf.get("foo,bar=baz")).andReturn(validator);
-        
-        Location l = newLocation();
-        
-        validator.setScriptSource(scriptSource);
-        
-        replay();
-
-        ValidatorBindingFactory factory = new ValidatorBindingFactory();
-        factory.setValueConverter(vc);
-        factory.setValidatorBeanFactory(vbf);
-        factory.setScriptSource(scriptSource);
-        
-        IBinding binding = factory.createBinding(null, "validator bean", "foo,bar=baz", l);
-        
-        assertSame(validator, binding.getObject());
-        assertSame(l, binding.getLocation());
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/ValidationDelegateTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/ValidationDelegateTest.java
deleted file mode 100644
index 93e77db..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/valid/ValidationDelegateTest.java
+++ /dev/null
@@ -1,437 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.List;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.form.IFormComponent;
-import org.testng.annotations.Configuration;
-import org.testng.annotations.Test;
-
-/**
- * Test the class {@link ValidationDelegate}.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.8
- */
-@Test(sequential=true)
-public class ValidationDelegateTest extends BaseValidatorTestCase
-{
-    protected IFormComponent newField(String name, int count)
-    {
-        IFormComponent fc = newMock(IFormComponent.class);
-        checkOrder(fc, false);
-        
-        expect(fc.getName()).andReturn(name).anyTimes();
-
-        return fc;
-    }
-
-    private ValidationDelegate d = new ValidationDelegate();
-    
-    @Configuration(afterTestMethod = true)
-    public void resetDelegate()
-    {
-        d.clear();
-    }
-    
-    public void testHasErrorsEmpty()
-    {
-        assertEquals(false, d.getHasErrors());
-    }
-
-    public void testFirstErrorEmpty()
-    {
-        assertNull(d.getFirstError());
-    }
-
-    public void testInvalidInput()
-    {
-        IFormComponent field = newField("testAdd", 3);
-
-        replay();
-
-        String errorMessage = "Need a bigger one.";
-
-        d.setFormComponent(field);
-        d.recordFieldInputValue("Bad Stuff");
-        d.record(new ValidatorException(errorMessage, ValidationConstraint.TOO_LARGE));
-
-        List fieldTracking = d.getFieldTracking();
-
-        assertEquals(1, fieldTracking.size());
-
-        IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
-
-        assertSame(field, t.getComponent());
-        checkRender(errorMessage, t);
-        assertEquals("testAdd", t.getFieldName());
-        assertEquals("Bad Stuff", t.getInput());
-        assertEquals(ValidationConstraint.TOO_LARGE, t.getConstraint());
-
-        assertTrue(d.getHasErrors());
-        assertEquals(errorMessage, ((RenderString) (d.getFirstError())).getString());
-
-        verify();
-    }
-
-    public void testValidatorErrorRenderer()
-    {
-        IFormComponent field = newField("testValidatorErrorRenderer", 3);
-
-        replay();
-
-        IRender errorRenderer = new RenderString("Just don't like it.");
-
-        d.setFormComponent(field);
-        d.recordFieldInputValue("Bad Stuff");
-        d.record(new ValidatorException("Just don't like it.", errorRenderer,
-                ValidationConstraint.CONSISTENCY));
-
-        List fieldTracking = d.getFieldTracking();
-
-        assertEquals(1, fieldTracking.size());
-
-        IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
-
-        assertSame(field, t.getComponent());
-        assertSame(errorRenderer, t.getErrorRenderer());
-        assertEquals("testValidatorErrorRenderer", t.getFieldName());
-        assertEquals("Bad Stuff", t.getInput());
-        assertEquals(ValidationConstraint.CONSISTENCY, t.getConstraint());
-
-        assertTrue(d.getHasErrors());
-        assertSame(errorRenderer, d.getFirstError());
-
-        verify();
-    }
-
-    public void testNoError()
-    {
-        IFormComponent field = newField("input", 2);
-
-        replay();
-
-        d.setFormComponent(field);
-        d.recordFieldInputValue("Futurama");
-
-        List fieldTracking = d.getFieldTracking();
-        assertEquals(1, fieldTracking.size());
-
-        IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
-
-        assertSame(field, t.getComponent());
-        assertNull(t.getErrorRenderer());
-        assertEquals(false, t.isInError());
-        assertEquals("Futurama", t.getInput());
-        assertNull(t.getConstraint());
-
-        assertEquals(false, d.getHasErrors());
-        assertNull(d.getFirstError());
-
-        verify();
-    }
-
-    public void testUnassociatedErrors()
-    {
-        IFormComponent field = newField("input", 2);
-
-        replay();
-
-        d.setFormComponent(field);
-        d.recordFieldInputValue("Bender");
-
-        d.setFormComponent(null);
-        d.record("Overload!", ValidationConstraint.CONSISTENCY);
-
-        assertEquals(true, d.getHasErrors());
-
-        List fieldTracking = d.getFieldTracking();
-        assertEquals(2, fieldTracking.size());
-
-        IFieldTracking t0 = (IFieldTracking) fieldTracking.get(0);
-        assertEquals(false, t0.isInError());
-        assertSame(field, t0.getComponent());
-
-        IFieldTracking t1 = (IFieldTracking) fieldTracking.get(1);
-        assertNull(t1.getComponent());
-        assertEquals(true, t1.isInError());
-        checkRender("Overload!", t1);
-
-        checkRender("Overload!", d.getFirstError());
-
-        List trackings = d.getUnassociatedTrackings();
-        assertEquals(1, trackings.size());
-        assertEquals(t1, trackings.get(0));
-
-        trackings = d.getAssociatedTrackings();
-        assertEquals(1, trackings.size());
-        assertEquals(t0, trackings.get(0));
-
-        verify();
-    }
-
-    private void checkRender(String errorMessage, IFieldTracking tracking)
-    {
-        IRender render = tracking.getErrorRenderer();
-
-        checkRender(errorMessage, render);
-    }
-
-    private void checkRender(String errorMessage, IRender render)
-    {
-        assertEquals(errorMessage, ((RenderString) render).getString());
-    }
-
-    public void testMultipleInvalidInput()
-    {
-        IFormComponent f1 = newField("monty", 3);
-        IFormComponent f2 = newField("python", 3);
-
-        replay();
-
-        String e1 = "And now for something completely different.";
-        String e2 = "A man with three buttocks.";
-
-        d.setFormComponent(f1);
-        d.recordFieldInputValue("Monty");
-        d.record(new ValidatorException(e1, null));
-
-        d.setFormComponent(f2);
-        d.recordFieldInputValue("Python");
-        d.record(new ValidatorException(e2, null));
-
-        List fieldTracking = d.getFieldTracking();
-        assertEquals(2, fieldTracking.size());
-
-        IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
-
-        assertSame(f1, t.getComponent());
-        checkRender(e1, t);
-
-        t = (IFieldTracking) fieldTracking.get(1);
-        assertEquals("Python", t.getInput());
-        checkRender(e2, t);
-        assertSame(f2, t.getComponent());
-
-        verify();
-    }
-
-    public void testReset()
-    {
-        IFormComponent f1 = newField("monty", 4);
-        IFormComponent f2 = newField("python", 3);
-
-        replay();
-
-        String e1 = "And now for something completely different.";
-        String e2 = "A man with three buttocks.";
-
-        d.setFormComponent(f1);
-        d.recordFieldInputValue("Monty");
-        d.record(new ValidatorException(e1, null));
-
-        d.setFormComponent(f2);
-        d.recordFieldInputValue("Python");
-        d.record(new ValidatorException(e2, null));
-
-        // Now, wipe out info on f1
-
-        d.setFormComponent(f1);
-        d.reset();
-
-        List fieldTracking = d.getFieldTracking();
-        assertEquals(1, fieldTracking.size());
-
-        IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
-        assertEquals("Python", t.getInput());
-        checkRender(e2, t);
-        assertEquals(f2, t.getComponent());
-
-        verify();
-    }
-
-    public void testResetAll()
-    {
-        IFormComponent f1 = newField("monty", 3);
-        IFormComponent f2 = newField("python", 3);
-
-        replay();
-
-        String e1 = "And now for something completely different.";
-        String e2 = "A man with three buttocks.";
-
-        d.setFormComponent(f1);
-        d.record(new ValidatorException(e1, null));
-
-        d.setFormComponent(f2);
-        d.record(new ValidatorException(e2, null));
-
-        d.setFormComponent(f1);
-        d.reset();
-
-        d.setFormComponent(f2);
-        d.reset();
-
-        assertNull(d.getFieldTracking());
-
-        assertEquals(false, d.getHasErrors());
-        assertNull(d.getFirstError());
-
-        verify();
-    }
-
-    /** @since 4.0 */
-
-    public void testGetErrorRenderers()
-    {
-        List l = d.getErrorRenderers();
-
-        assertEquals(true, l.isEmpty());
-
-        IFormComponent f1 = newField("monty", 2);
-        IFormComponent f2 = newField("python", 3);
-
-        IRender f2ErrorRenderer = newMock(IRender.class);
-
-        replay();
-
-        d.setFormComponent(f1);
-        d.recordFieldInputValue("f1 input");
-
-        d.setFormComponent(f2);
-        d.recordFieldInputValue("f2 input");
-        d.record(f2ErrorRenderer, null);
-
-        l = d.getErrorRenderers();
-        assertEquals(1, l.size());
-        assertSame(f2ErrorRenderer, l.get(0));
-
-        verify();
-    }
-
-    public void testClearErrors()
-    {
-        IFormComponent f = newField("input", 4);
-
-        replay();
-
-        d.setFormComponent(f);
-        d.recordFieldInputValue("hello");
-        d.record("An error in the input field.", null);
-
-        assertEquals(true, d.getHasErrors());
-
-        assertNotNull(d.getFirstError());
-
-        d.clearErrors();
-
-        assertEquals(false, d.getHasErrors());
-
-        d.setFormComponent(f);
-
-        assertEquals("hello", d.getFieldInputValue());
-
-        verify();
-    }
-
-    public void testRegisterForFocus()
-    {
-        IFormComponent fred = newFieldWithClientId("fred");
-        IFormComponent barney = newFieldWithClientId("barney");
-        IFormComponent wilma = newField();
-
-        ValidationDelegate vd = new ValidationDelegate();
-
-        replay();
-
-        vd.registerForFocus(fred, ValidationConstants.NORMAL_FIELD);
-        vd.registerForFocus(barney, ValidationConstants.REQUIRED_FIELD);
-        vd.registerForFocus(wilma, ValidationConstants.NORMAL_FIELD);
-
-        assertEquals("barney", vd.getFocusField());
-
-        verify();
-    }
-
-    private IFormComponent newFieldWithClientId(String clientId)
-    {
-        IFormComponent field = newMock(IFormComponent.class);
-
-        expect(field.getClientId()).andReturn(clientId);
-
-        return field;
-    }
-
-    /**
-     * Test {@link ValidationDelegate#record(IFormComponent, String)}.
-     * 
-     * @since 4.0
-     */
-    public void testSimpleRecord()
-    {
-        IFormComponent field = newField();
-
-        trainGetName(field, "myField");
-        trainGetName(field, "myField");
-
-        replay();
-
-        ValidationDelegate delegate = new ValidationDelegate();
-
-        delegate.record(field, "My Error Message");
-
-        List list = delegate.getFieldTracking();
-
-        assertEquals(1, list.size());
-
-        IFieldTracking ft = (IFieldTracking) list.get(0);
-
-        assertEquals(true, ft.isInError());
-        assertSame(field, ft.getComponent());
-        assertNull(ft.getConstraint());
-        assertEquals("My Error Message", ft.getErrorRenderer().toString());
-
-        verify();
-    }
-
-    public void testSimpleRecordUnassociated()
-    {
-        ValidationDelegate delegate = new ValidationDelegate();
-
-        delegate.record(null, "My Error Message");
-
-        List list = delegate.getUnassociatedTrackings();
-
-        assertEquals(1, list.size());
-
-        IFieldTracking ft = (IFieldTracking) list.get(0);
-
-        assertEquals(true, ft.isInError());
-        assertNull(ft.getComponent());
-        assertNull(ft.getConstraint());
-        assertEquals("My Error Message", ft.getErrorRenderer().toString());
-
-    }
-
-    protected void trainGetName(IFormComponent field, String name)
-    {
-        expect(field.getName()).andReturn(name);
-    }
-}
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/BaseWebTestCase.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/BaseWebTestCase.java
deleted file mode 100644
index 81b53ca..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/BaseWebTestCase.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-
-/**
- * Common code used when testing the various container adapters.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class BaseWebTestCase extends BaseComponentTestCase
-{
-
-    protected Enumeration newEnumeration()
-    {
-        List l = new ArrayList();
-        l.add("fred");
-        l.add("barney");
-
-        return Collections.enumeration(l);
-    }
-
-    protected void checkList(List l)
-    {
-        assertEquals("barney", l.get(0));
-        assertEquals("fred", l.get(1));
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/ServletWebResponseTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/ServletWebResponseTest.java
deleted file mode 100644
index 1d63c6f..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/ServletWebResponseTest.java
+++ /dev/null
@@ -1,283 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import static org.easymock.EasyMock.expect;
-
-import java.io.CharArrayWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.util.ContentType;
-import org.testng.annotations.Test;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Tests for {@link org.apache.tapestry.web.ServletWebResponse}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class ServletWebResponseTest extends BaseComponentTestCase
-{
-    private static class MockServletOutputStream extends ServletOutputStream
-    {
-        public void write(int b) throws IOException
-        {
-        }
-    }
-
-    public void testGetOutputStream() throws Exception
-    {
-        HttpServletResponse response = newResponse();
-
-        ServletOutputStream stream = new MockServletOutputStream();
-
-        response.setContentType("foo/bar");
-        expect(response.getOutputStream()).andReturn(stream);
-
-        replay();
-
-        ServletWebResponse swr = new ServletWebResponse(response);
-
-        assertSame(stream, swr.getOutputStream(new ContentType("foo/bar")));
-
-        verify();
-    }
-
-    public void testGetOutputStreamFailure() throws Exception
-    {
-        HttpServletResponse response = newResponse();
-
-        Throwable t = new IOException("Simulated failure.");
-
-        response.setContentType("foo/bar");
-        expect(response.getOutputStream()).andThrow(t);
-
-        replay();
-
-        ServletWebResponse swr = new ServletWebResponse(response);
-
-        try
-        {
-            swr.getOutputStream(new ContentType("foo/bar"));
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Error opening response stream for content type foo/bar: Simulated failure.",
-                    ex.getMessage());
-            assertSame(t, ex.getRootCause());
-        }
-    }
-
-    public void testGetPrintWriter() throws Exception
-    {
-        PrintWriter writer = new PrintWriter(new CharArrayWriter());
-
-        HttpServletResponse response = newResponse();
-
-        response.setContentType("foo/bar");
-        
-        trainGetWriter(response, writer);
-
-        replay();
-
-        ServletWebResponse swr = new ServletWebResponse(response);
-
-        assertSame(writer, swr.getPrintWriter(new ContentType("foo/bar")));
-
-        verify();
-    }
-
-    private void trainGetWriter(HttpServletResponse response, PrintWriter writer) throws IOException
-    {
-        expect(response.getWriter()).andReturn(writer);
-    }
-    
-    
-
-    public void testGetSecondPrintWriter() throws Exception
-    {
-        PrintWriter writer1 = new PrintWriter(new CharArrayWriter());
-        PrintWriter writer2 = new PrintWriter(new CharArrayWriter());
-
-        HttpServletResponse response = newResponse();
-
-        response.setContentType("foo/bar");
-        
-        trainGetWriter(response, writer1);
-        
-        replay();
-
-        ServletWebResponse swr = new ServletWebResponse(response);
-
-        assertSame(writer1, swr.getPrintWriter(new ContentType("foo/bar")));
-
-        verify();
-
-        response.reset();
-        response.setContentType("biff/bazz");
-        
-        trainGetWriter(response, writer2);
-        
-        replay();
-
-        assertSame(writer2, swr.getPrintWriter(new ContentType("biff/bazz")));
-
-        verify();
-    }
-    
-    public void testGetSecondPrintWriterTomcatPatch() throws Exception
-    {
-        PrintWriter writer1 = new PrintWriter(new CharArrayWriter());
-        PrintWriter writer2 = new PrintWriter(new CharArrayWriter());
-
-        HttpServletResponse response = newResponse();
-        Log log = newLog();
-
-        response.setContentType("foo/bar");
-        
-        trainGetWriter(response, writer1);
-        
-        replay();
-
-        ServletWebResponse swr = new ServletWebResponse(response, log, true);
-
-        assertSame(writer1, swr.getPrintWriter(new ContentType("foo/bar")));
-
-        verify();
-
-        response.reset();
-
-        trainGetWriter(response, writer2);
-        
-        replay();
-
-        assertSame(writer2, swr.getPrintWriter(new ContentType("foo/bar")));
-
-        verify();
-    }
-    
-    public void testGetSecondPrintWriterDifferentContentTypeTomcatPatch() throws Exception
-    {
-        PrintWriter writer1 = new PrintWriter(new CharArrayWriter());
-        PrintWriter writer2 = new PrintWriter(new CharArrayWriter());
-
-        HttpServletResponse response = newResponse();
-        Log log = newLog();
-
-        response.setContentType("foo/bar");
-        
-        trainGetWriter(response, writer1);
-        
-        replay();
-
-        ServletWebResponse swr = new ServletWebResponse(response, log, true);
-
-        assertSame(writer1, swr.getPrintWriter(new ContentType("foo/bar")));
-
-        verify();
-
-        response.reset();
-        
-        log.warn("Unable to change response content type from 'foo/bar' to 'biff/bazz' (following a reset). See Tapestry issue TAPESTRY-607.");
-        
-        trainGetWriter(response, writer2);
-        
-        replay();
-
-        assertSame(writer2, swr.getPrintWriter(new ContentType("biff/bazz")));
-
-        verify();
-    }    
-
-    public void testGetPrintWriterFailure() throws Exception
-    {
-        HttpServletResponse response = newResponse();
-
-        Throwable t = new IOException("Simulated failure.");
-
-        response.setContentType("foo/bar");
-        expect(response.getWriter()).andThrow(t);
-
-        replay();
-
-        ServletWebResponse swr = new ServletWebResponse(response);
-
-        try
-        {
-            swr.getPrintWriter(new ContentType("foo/bar"));
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Error opening response writer for content type foo/bar: Simulated failure.",
-                    ex.getMessage());
-            assertSame(t, ex.getRootCause());
-        }
-    }
-
-    public void testReset()
-    {
-        HttpServletResponse response = newResponse();
-
-        response.reset();
-
-        replay();
-
-        ServletWebResponse swr = new ServletWebResponse(response);
-
-        swr.reset();
-
-        verify();
-    }
-
-    private HttpServletResponse newResponse()
-    {
-        return newMock(HttpServletResponse.class);
-    }
-
-    public void testSetHeaderMethods() throws Exception
-    {
-        HttpServletResponse response = newResponse();
-
-        response.setHeader("fie", "fie");
-        response.setDateHeader("expires", -1);
-        response.setIntHeader("size", 33);
-        response.sendError(99, "foo!");
-
-        replay();
-
-        ServletWebResponse swr = new ServletWebResponse(response);
-
-        swr.setHeader("fie", "fie");
-        swr.setDateHeader("expires", -1);
-        swr.setIntHeader("size", 33);
-        swr.sendError(99, "foo!");
-
-        verify();
-
-    }
-
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/ServletWebSessionTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/ServletWebSessionTest.java
deleted file mode 100644
index 97e0b4c..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/ServletWebSessionTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.List;
-
-import org.testng.annotations.Test;
-
-import javax.servlet.http.HttpSession;
-
-/**
- * Tests for {@link org.apache.tapestry.web.ServletWebSession}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class ServletWebSessionTest extends BaseWebTestCase
-{
-    public void testGetAttributeNames()
-    {
-        HttpSession session = newSession();
-
-        expect(session.getAttributeNames()).andReturn(newEnumeration());
-
-        replay();
-
-        WebSession ws = new ServletWebSession(session);
-
-        List l = ws.getAttributeNames();
-
-        checkList(l);
-
-        verify();
-    }
-
-    private HttpSession newSession()
-    {
-        return newMock(HttpSession.class);
-    }
-
-    public void testGetAttribute()
-    {
-        Object attribute = new Object();
-
-        HttpSession session = newSession();
-
-        expect(session.getAttribute("attr")).andReturn(attribute);
-
-        replay();
-
-        WebSession ws = new ServletWebSession(session);
-
-        assertSame(attribute, ws.getAttribute("attr"));
-
-        verify();
-    }
-
-    public void testSetAttribute()
-    {
-        Object attribute = new Object();
-
-        HttpSession session = newSession();
-
-        session.setAttribute("name", attribute);
-
-        replay();
-
-        WebSession ws = new ServletWebSession(session);
-
-        ws.setAttribute("name", attribute);
-
-        verify();
-    }
-
-    public void testSetAttributeToNull()
-    {
-        HttpSession session = newSession();
-
-        session.removeAttribute("tonull");
-
-        replay();
-
-        WebSession ws = new ServletWebSession(session);
-
-        ws.setAttribute("tonull", null);
-
-        verify();
-    }
-
-    public void testGetId()
-    {
-        HttpSession session = newSession();
-
-        expect(session.getId()).andReturn("abc");
-
-        replay();
-
-        WebSession ws = new ServletWebSession(session);
-
-        assertEquals("abc", ws.getId());
-
-        verify();
-    }
-
-    public void testInvalidate()
-    {
-        HttpSession session = newSession();
-
-        session.invalidate();
-
-        replay();
-
-        WebSession ws = new ServletWebSession(session);
-
-        ws.invalidate();
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/TestServletWebContext.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/TestServletWebContext.java
deleted file mode 100644
index c263651..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/TestServletWebContext.java
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import static org.easymock.EasyMock.expect;
-import org.testng.annotations.Test;
-
-import javax.servlet.ServletContext;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-
-/**
- * Tests for {@link org.apache.tapestry.web.ServletWebContext}.
- * 
- */
-@Test(sequential = true)
-public class TestServletWebContext extends BaseWebTestCase
-{
-
-    public void testGetInitParameterNames()
-    {
-        ServletContext context = newMock(ServletContext.class);
-
-        expect(context.getInitParameterNames()).andReturn(newEnumeration());
-
-        replay();
-
-        WebContext wc = new ServletWebContext(context);
-
-        List l = wc.getInitParameterNames();
-
-        checkList(l);
-
-        verify();
-    }
-
-    public void testGetInitParameterValue()
-    {
-        String value = "William Orbit";
-
-        ServletContext context = newMock(ServletContext.class);
-
-        expect(context.getInitParameter("artist")).andReturn(value);
-
-        replay();
-
-        WebContext wc = new ServletWebContext(context);
-
-        assertSame(value, wc.getInitParameterValue("artist"));
-
-        verify();
-    }
-
-    public void testGetAttributeNames()
-    {
-        ServletContext context = newMock(ServletContext.class);
-
-        expect(context.getAttributeNames()).andReturn(newEnumeration());
-
-        replay();
-
-        WebContext wc = new ServletWebContext(context);
-
-        List l = wc.getAttributeNames();
-
-        checkList(l);
-
-        verify();
-    }
-
-    public void testGetAttribute()
-    {
-        Object attribute = new Object();
-
-        ServletContext context = newMock(ServletContext.class);
-
-        expect(context.getAttribute("attr")).andReturn(attribute);
-
-        replay();
-
-        WebContext wc = new ServletWebContext(context);
-
-        assertSame(attribute, wc.getAttribute("attr"));
-
-        verify();
-    }
-
-    public void testSetAttribute()
-    {
-        Object attribute = new Object();
-
-        ServletContext context = newMock(ServletContext.class);
-
-        context.setAttribute("name", attribute);
-
-        replay();
-
-        WebContext wc = new ServletWebContext(context);
-
-        wc.setAttribute("name", attribute);
-
-        verify();
-    }
-
-    public void testSetAttributeToNull()
-    {
-        ServletContext context = newMock(ServletContext.class);
-
-        context.removeAttribute("tonull");
-
-        replay();
-
-        WebContext wc = new ServletWebContext(context);
-
-        wc.setAttribute("tonull", null);
-
-        verify();
-    }
-
-    public void testGetResource() throws Exception
-    {
-        URL url = new URL("http://jakarta.apache.org/tapestry");
-
-        ServletContext context = newMock(ServletContext.class);
-
-        expect(context.getResource("/tapestry")).andReturn(url);
-
-        replay();
-
-        WebContext wc = new ServletWebContext(context);
-
-        assertSame(url, wc.getResource("/tapestry"));
-
-        verify();
-    }
-
-    public void testGetResourceFailure() throws Exception
-    {
-        Throwable t = new MalformedURLException("Like this ever happens.");
-
-        ServletContext context = newMock(ServletContext.class);
-
-        expect(context.getResource("/tapestry")).andThrow(t);
-
-        replay();
-
-        // interceptLogging(ServletWebContext.class.getName());
-
-        WebContext wc = new ServletWebContext(context);
-
-        assertNull(wc.getResource("/tapestry"));
-
-        verify();
-        
-        // assertLoggedMessage("Error getting context resource '/tapestry': Like this ever happens.");
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/TestServletWebRequest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/TestServletWebRequest.java
deleted file mode 100644
index d5a0ab4..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/TestServletWebRequest.java
+++ /dev/null
@@ -1,515 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.testng.annotations.Test;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-/**
- * Tests for {@link org.apache.tapestry.web.ServletWebRequest}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestServletWebRequest extends BaseWebTestCase
-{
-    private HttpServletRequest newHttpRequest()
-    {
-        return newMock(HttpServletRequest.class);
-    }
-
-    private HttpServletResponse newResponse()
-    {
-        return newMock(HttpServletResponse.class);
-    }
-
-    private RequestDispatcher newDispatcher()
-    {
-        return newMock(RequestDispatcher.class);
-    }
-
-    public void testGetParameterNames()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        expect(request.getParameterNames()).andReturn(newEnumeration());
-        
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        List l = wr.getParameterNames();
-
-        checkList(l);
-
-        verify();
-    }
-
-    public void testGetParameterValue()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        String value = "William Orbit";
-
-        expect(request.getParameter("artist")).andReturn(value);
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        assertSame(value, wr.getParameterValue("artist"));
-
-        verify();
-    }
-
-    public void testGetParameterValues()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        String[] values =
-        { "William Orbit", "Steely Dan" };
-
-        expect(request.getParameterValues("artist")).andReturn(values);
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        assertSame(values, wr.getParameterValues("artist"));
-
-        verify();
-    }
-
-    public void testGetContextPath()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        expect(request.getContextPath()).andReturn("/foo");
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        assertEquals("/foo", wr.getContextPath());
-
-        verify();
-    }
-
-    public void testGetAttributeNames()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        expect(request.getAttributeNames()).andReturn(newEnumeration());
-        
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        List l = wr.getAttributeNames();
-
-        checkList(l);
-
-        verify();
-    }
-
-    public void testGetAttribute()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        Object attribute = new Object();
-
-        expect(request.getAttribute("attr")).andReturn(attribute);
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        assertSame(attribute, wr.getAttribute("attr"));
-
-        verify();
-    }
-
-    public void testSetAttribute()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        Object attribute = new Object();
-
-        request.setAttribute("name", attribute);
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        wr.setAttribute("name", attribute);
-
-        verify();
-    }
-
-    public void testSetAttributeToNull()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        request.removeAttribute("tonull");
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        wr.setAttribute("tonull", null);
-
-        verify();
-    }
-
-    public void testGetSession()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-        HttpSession session = newSession();
-
-        trainGetSession(request, false, null);
-
-        // Get it, doesn't exist, wreate false
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        assertNull(wr.getSession(false));
-
-        verify();
-
-        trainGetSession(request, true, session);
-
-        // #2: Get it, wreate is true, it is wreated.
-
-        replay();
-
-        WebSession cs = wr.getSession(true);
-
-        verify();
-
-        // #3: Cached in local variable, make sure same
-        // think returned.
-
-        replay();
-
-        assertSame(cs, wr.getSession(false));
-
-        verify();
-    }
-
-    private void trainGetSession(HttpServletRequest request, boolean create, HttpSession session)
-    {
-        expect(request.getSession(create)).andReturn(session);
-    }
-
-    private HttpSession newSession()
-    {
-        return newMock(HttpSession.class);
-    }
-
-    public void testGetScheme()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        expect(request.getScheme()).andReturn("http");
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        assertEquals("http", wr.getScheme());
-
-        verify();
-    }
-
-    public void testGetServerName()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        expect(request.getServerName()).andReturn("www.myhost.com");
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        assertEquals("www.myhost.com", wr.getServerName());
-
-        verify();
-    }
-
-    public void testGetServerPort()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        expect(request.getServerPort()).andReturn(80);
-        
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        assertEquals(80, wr.getServerPort());
-
-        verify();
-    }
-
-    public void testGetRequestURI()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        expect(request.getRequestURI()).andReturn("/foo/bar");
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        assertEquals("/foo/bar", wr.getRequestURI());
-
-        verify();
-    }
-
-    public void testForwardInternal() throws Exception
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-        RequestDispatcher dispatcher = newDispatcher();
-
-        trainGetRequestDispatcher(request, "/local.html", dispatcher);
-
-        dispatcher.forward(request, response);
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        wr.forward("local.html");
-
-        verify();
-    }
-
-    public void testForwardNull() throws Exception
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-        RequestDispatcher dispatcher = newDispatcher();
-
-        trainGetRequestDispatcher(request, "/", dispatcher);
-
-        dispatcher.forward(request, response);
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        wr.forward(null);
-
-        verify();
-    }
-
-    private void trainGetRequestDispatcher(HttpServletRequest request, String path,
-            RequestDispatcher dispatcher)
-    {
-        expect(request.getRequestDispatcher(path)).andReturn(dispatcher);
-    }
-
-    public void testForwardInternalNoDispatcher() throws Exception
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        trainGetRequestDispatcher(request, "/local.html", null);
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        try
-        {
-            wr.forward("local.html");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Unable to find a request dispatcher for local resource '/local.html'.",
-                    ex.getMessage());
-        }
-
-        verify();
-    }
-
-    public void testForwardInternalFailure() throws Exception
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-        RequestDispatcher dispatcher = newDispatcher();
-
-        Throwable t1 = new ServletException("Mock Servlet Exception");
-
-        trainGetRequestDispatcher(request, "/servlet-exception.html", dispatcher);
-
-        dispatcher.forward(request, response);
-        expectLastCall().andThrow(t1);
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        try
-        {
-            wr.forward("servlet-exception.html");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Unable to forward to local resource '/servlet-exception.html': Mock Servlet Exception",
-                    ex.getMessage());
-            assertSame(t1, ex.getRootCause());
-        }
-
-        verify();
-
-        Throwable t2 = new IOException("Mock IO Exception");
-
-        trainGetRequestDispatcher(request, "/io-exception.html", dispatcher);
-
-        dispatcher.forward(request, response);
-        expectLastCall().andThrow(t2);
-
-        replay();
-
-        try
-        {
-            wr.forward("io-exception.html");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                    "Unable to forward to local resource '/io-exception.html': Mock IO Exception",
-                    ex.getMessage());
-            assertSame(t2, ex.getRootCause());
-        }
-
-        verify();
-    }
-
-    public void testForwardExternal() throws Exception
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        expect(response.encodeRedirectURL("http://foo.bar")).andReturn("<encoded: http://foo.bar>");
-        
-        response.sendRedirect("<encoded: http://foo.bar>");
-
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        wr.forward("http://foo.bar");
-
-        verify();
-    }
-
-    public void testForwardExternalFailure() throws Exception
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newMock(HttpServletResponse.class);
-
-        Throwable t = new IOException("Mock IO Exception");
-
-        expect(response.encodeRedirectURL("/")).andReturn("<encoded: http://foo.bar>");
-        
-        response.sendRedirect("<encoded: http://foo.bar>");
-        expectLastCall().andThrow(t);
-        
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        try
-        {
-            wr.forward("/");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals("Unable to redirect to /: Mock IO Exception", ex.getMessage());
-            assertSame(t, ex.getRootCause());
-        }
-
-        verify();
-    }
-
-    public void testGetActivationPath()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        expect(request.getServletPath()).andReturn("/foo");
-        
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        assertEquals("/foo", wr.getActivationPath());
-
-        verify();
-    }
-
-    public void testGetPathInfo()
-    {
-        HttpServletRequest request = newHttpRequest();
-        HttpServletResponse response = newResponse();
-
-        expect(request.getPathInfo()).andReturn("bar/baz");
-        
-        replay();
-
-        WebRequest wr = new ServletWebRequest(request, response);
-
-        assertEquals("bar/baz", wr.getPathInfo());
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/TestWebUtils.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/TestWebUtils.java
deleted file mode 100644
index 07fd5d7..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/TestWebUtils.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.web.WebUtils}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestWebUtils extends BaseComponentTestCase
-{
-    public void testToSortedList()
-    {
-        List l = new ArrayList();
-        l.add("Fred");
-        l.add("Barney");
-        Enumeration e = Collections.enumeration(l);
-
-        l = WebUtils.toSortedList(e);
-
-        assertEquals(2, l.size());
-        assertEquals("Barney", l.get(0));
-        assertEquals("Fred", l.get(1));
-
-        // Make sure its not modifiable.
-
-        try
-        {
-            l.add("Wilma");
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // That's expected.
-        }
-    }
-
-    public void testToSortedListEmpty()
-    {
-        List l = new ArrayList();
-        Enumeration e = Collections.enumeration(l);
-
-        List sorted = WebUtils.toSortedList(e);
-
-        assertSame(Collections.EMPTY_LIST, sorted);
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/WebContextResourceTest.java b/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/WebContextResourceTest.java
deleted file mode 100644
index 4a2c20b..0000000
--- a/tapestry/tapestry-framework/src/test/org/apache/tapestry/web/WebContextResourceTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.web;
-
-import static org.easymock.EasyMock.expect;
-
-import java.net.URL;
-import java.util.Locale;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.web.WebContextResource}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class WebContextResourceTest extends BaseComponentTestCase
-{
-    private WebContext newContext()
-    {
-        return newMock(WebContext.class);
-    }
-
-    public void testConstructor()
-    {
-        WebContext context = newContext();
-
-        replay();
-
-        Resource r = new WebContextResource(context, "/foo/bar/baz_en.html", Locale.ENGLISH);
-
-        assertEquals("context:/foo/bar/baz_en.html", r.toString());
-
-        assertEquals("/foo/bar/baz_en.html", r.getPath());
-
-        assertEquals("baz_en.html", r.getName());
-
-        assertEquals(Locale.ENGLISH, r.getLocale());
-
-        verify();
-    }
-
-    public void testLocalizationExists() throws Exception
-    {
-        WebContext context = newContext();
-
-        trainGetResource(context, "/foo/bar/baz_en.html", new URL("http://foo.com"));
-
-        replay();
-
-        Resource r1 = new WebContextResource(context, "/foo/bar/baz.html");
-
-        Resource r2 = r1.getLocalization(Locale.ENGLISH);
-
-        assertEquals("/foo/bar/baz_en.html", r2.getPath());
-        assertEquals(Locale.ENGLISH, r2.getLocale());
-
-        verify();
-    }
-
-    private void trainGetResource(WebContext context, String path, URL url)
-    {
-        expect(context.getResource(path)).andReturn(url);
-    }
-
-    public void testLocalizationSame() throws Exception
-    {
-        WebContext context = newContext();
-
-        trainGetResource(context, "/foo/bar/baz_en.html", null);
-        trainGetResource(context, "/foo/bar/baz.html", new URL("http://foo.com"));
-
-        replay();
-
-        Resource r1 = new WebContextResource(context, "/foo/bar/baz.html");
-
-        Resource r2 = r1.getLocalization(Locale.ENGLISH);
-
-        assertSame(r2, r1);
-
-        verify();
-    }
-
-    public void testLocalizationMissing() throws Exception
-    {
-        WebContext context = newContext();
-
-        trainGetResource(context, "/foo/bar/baz_en.html", null);
-        trainGetResource(context, "/foo/bar/baz.html", null);
-
-        replay();
-
-        Resource r1 = new WebContextResource(context, "/foo/bar/baz.html");
-
-        assertNull(r1.getLocalization(Locale.ENGLISH));
-
-        verify();
-    }
-
-    public void testGetRelativeResource()
-    {
-        WebContext context = newContext();
-
-        replay();
-
-        Resource r1 = new WebContextResource(context, "/foo/bar/baz.html");
-        Resource r2 = r1.getRelativeResource("baz.gif");
-
-        assertEquals("/foo/bar/baz.gif", r2.getPath());
-
-        verify();
-    }
-
-    public void testGetExtensionlessResource() throws Exception
-    {
-        WebContext context = newContext();
-
-        trainGetResource(context, "/foo/bar/baz_en", new URL("http://foo.com"));
-
-        replay();
-
-        Resource r1 = new WebContextResource(context, "/foo/bar/baz");
-
-        Resource r2 = r1.getLocalization(Locale.ENGLISH);
-
-        assertEquals("/foo/bar/baz_en", r2.getPath());
-        assertEquals(Locale.ENGLISH, r2.getLocale());
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-framework/src/test/pages/PrivateAssetTemplate.html b/tapestry/tapestry-framework/src/test/pages/PrivateAssetTemplate.html
deleted file mode 100644
index 338b0e6..0000000
--- a/tapestry/tapestry-framework/src/test/pages/PrivateAssetTemplate.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-This page's content comes from a private asset.
-
-</span>
-</span>
diff --git a/tapestry/tapestry-portlet/pom.xml b/tapestry/tapestry-portlet/pom.xml
deleted file mode 100644
index 19913f0..0000000
--- a/tapestry/tapestry-portlet/pom.xml
+++ /dev/null
@@ -1,202 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <parent>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>tapestry-project</artifactId>
-        <version>4.1.3</version>
-    </parent>
-    
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.apache.tapestry</groupId>
-    <artifactId>tapestry-portlet</artifactId>
-    <name>Portlet</name>
-    <version>4.1.3</version>
-    <inceptionYear>2006</inceptionYear>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-framework</artifactId>
-            <version>4.1.3</version>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>hivemind</groupId>
-            <artifactId>hivemind-lib</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymockclassextension</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.portlet</groupId>
-            <artifactId>portlet-api</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.9</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>5.1</version>
-            <classifier>jdk15</classifier>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>portlet-api</groupId>
-            <artifactId>portlet-api</artifactId>
-            <version>1.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tapestry</groupId>
-            <artifactId>tapestry-test</artifactId>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <sourceDirectory>src/java</sourceDirectory>
-        <testSourceDirectory>src/test</testSourceDirectory>
-        <resources>
-            <resource>
-                <targetPath>META-INF</targetPath>
-                <directory>src/descriptor/META-INF</directory>
-                <includes>
-                    <include>**</include>
-                </includes>
-            </resource>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-                <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </resource>
-        </resources>
-
-        <testResources>
-            <testResource>
-                <directory>src/test</directory>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-                <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </testResource>
-            <testResource>
-                <directory>src/conf</directory>
-                <includes>
-                    <include>log4j.properties</include>
-                </includes>
-            </testResource>
-        </testResources>
-        
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>2.1</version>
-                <configuration>
-                    <archive>
-                        <compress>true</compress>
-                        <index>true</index>
-                    </archive>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-source-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <version>1.1</version>
-                <inherited>true</inherited>
-                <executions>
-                    <execution>
-                        <phase>compile</phase>
-                        <configuration>
-                            <tasks>
-                                <ant antfile="../support/build.xml" inheritRefs="true">
-                                    <property name="target.dir" value="../target/site/tapestry-portlet" />
-                                    <target name="build"/>
-                                 </ant>
-                            </tasks>
-                        </configuration>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>hivemind</groupId>
-                        <artifactId>hivemind</artifactId>
-                        <version>1.1.1</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>xerces</groupId>
-                        <artifactId>xercesImpl</artifactId>
-                        <version>2.6.2</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>commons-logging</groupId>
-                        <artifactId>commons-logging</artifactId>
-                        <version>1.0.4</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>log4j</groupId>
-                        <artifactId>log4j</artifactId>
-                        <version>1.2.13</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>oro</groupId>
-                        <artifactId>oro</artifactId>
-                        <version>2.0.8</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>ant</groupId>
-                        <artifactId>ant-xslp</artifactId>
-                        <version>1.6.5</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>ant</groupId>
-                        <artifactId>ant-trax</artifactId>
-                        <version>1.6.5</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-        </plugins>
-    </build>
-
-    <reporting>
-        <outputDirectory>../target/site/tapestry-portlet</outputDirectory>
-    </reporting>
-
-</project>
diff --git a/tapestry/tapestry-portlet/src/conf/log4j.properties b/tapestry/tapestry-portlet/src/conf/log4j.properties
deleted file mode 100644
index e22fb54..0000000
--- a/tapestry/tapestry-portlet/src/conf/log4j.properties
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-log4j.rootCategory=WARN, A1
-
-# A1 is set to be a ConsoleAppender. 
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%c{1} [%p] %m%n
-
-log4j.category.org.apache.hivemind=ERROR
-log4j.category.hivemind=ERROR
diff --git a/tapestry/tapestry-portlet/src/descriptor/META-INF/hivemodule.xml b/tapestry/tapestry-portlet/src/descriptor/META-INF/hivemodule.xml
deleted file mode 100644
index 53cec3b..0000000
--- a/tapestry/tapestry-portlet/src/descriptor/META-INF/hivemodule.xml
+++ /dev/null
@@ -1,318 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.portlet" version="4.0.0" package="org.apache.tapestry.portlet">
-  
-  Add on for Tapestry that adds native Portlet support.
-  
-  <dependency module-id="tapestry" version="4.0.0"/>
-  <dependency module-id="hivemind.lib" version="1.1.0"/>
-  
-  <sub-module descriptor="tapestry.portlet.services.xml"/>
-  <sub-module descriptor="tapestry.portlet.resolver.xml"/>
-  <sub-module descriptor="tapestry.portlet.bindings.xml"/>
-  <sub-module descriptor="tapestry.portlet.multipart.xml"/>
-  
-  <configuration-point id="PortletApplicationInitializers" schema-id="hivemind.lib.ChainContribution">
-    
-    Defines the steps for initializing a Tapestry portlet application.
-    
-  </configuration-point>
-  
-  <service-point id="PortletApplicationInitializer" interface="PortletApplicationInitializer">
-    Master startup for the Portlet application; 
-    invokes an ordered series of other ApplicationInitializer instances contributed to
-    the PortletApplicationInitializers configuration point.
-    
-    <invoke-factory service-id="hivemind.lib.ChainFactory">
-      <construct configuration-id="PortletApplicationInitializers"/>
-    </invoke-factory>
-  </service-point>
-  
-  <service-point id="PortletWebContextInitializer" interface="PortletApplicationInitializer">
-    
-    Creates and stores the WebContext (wrapper around the PortletContext)
-    into ApplicationGlobals.
-    
-    <invoke-factory>
-      <construct class="PortletWebContextInitializer">
-        <set-service property="applicationGlobals" service-id="tapestry.globals.ApplicationGlobals"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>  
-  
-  <service-point id="PortletApplicationSpecificationInitializer" interface="PortletApplicationInitializer">
-    
-    Locates and parses the application specification and informs the ApplicationGlobals service about it.
-    
-    <invoke-factory>
-      <construct class="PortletApplicationSpecificationInitializer">
-        <set-service property="globals" service-id="tapestry.globals.ApplicationGlobals"/>
-        <set-service property="parser" service-id="tapestry.parse.SpecificationParser"/>
-        <set-service property="context" service-id="tapestry.globals.WebContext"/>
-      </construct>
-    </invoke-factory>
-  </service-point>  
-  
-  <contribution configuration-id="PortletApplicationInitializers">
-    <command id="PortletWebContextInitializer" object="service:PortletWebContextInitializer" before="*"/>
-    <command id="PortletApplicationSpecificationInitializer" object="service:PortletApplicationSpecificationInitializer"/>
-  </contribution>
-    
-  <configuration-point id="ActionRequestServicerPipeline" schema-id="hivemind.lib.Pipeline">
-    
-    A pipeline for processing an incoming Portlet action request.
-    
-  </configuration-point>   
-      
-  <service-point id="ActionRequestServicer" interface="ActionRequestServicer">  
-    
-    Service for handling Portlet action requests, built around
-    the ActionRequestServicerPipeline configuration.
-    
-    <invoke-factory service-id="hivemind.lib.PipelineFactory">
-      <create-pipeline filter-interface="ActionRequestServicerFilter"
-        configuration-id="ActionRequestServicerPipeline"/>
-    </invoke-factory>  
-  </service-point>
-  
-  <service-point id="ActionRequestServicerToWebRequestServicerBridge" interface="ActionRequestServicer">
-    
-    Bridge from the ActionRequestServicerPipeline to
-    the tapestry.request.WebRequestServicer pipeline.
-    
-    <invoke-factory>
-      <construct class="ActionRequestServicerToWebRequestServicerBridge">
-        <set-service property="portletRequestGlobals" service-id="PortletRequestGlobals"/>
-        <set-service property="webRequestServicer" service-id="tapestry.request.WebRequestServicer"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="ActionRequestServicerPipeline">
-    <terminator object="service:ActionRequestServicerToWebRequestServicerBridge"/>
-  </contribution>
-  
-  <configuration-point id="RenderRequestServicerPipeline" schema-id="hivemind.lib.Pipeline">
-    
-    A pipeline for processing an incoming Portlet action request.
-    
-  </configuration-point>   
-      
-  <service-point id="RenderRequestServicer" interface="RenderRequestServicer">  
-    
-    Service for handling Portlet action requests, built around
-    the RenderRequestServicerPipeline configuration.
-    
-    <invoke-factory service-id="hivemind.lib.PipelineFactory">
-      <create-pipeline filter-interface="RenderRequestServicerFilter"
-        configuration-id="RenderRequestServicerPipeline"/>
-    </invoke-factory>  
-  </service-point>
-  
-  <service-point id="RenderRequestServicerToWebRequestServicerBridge" interface="RenderRequestServicer">
-    
-    Bridge from the RenderRequestServicerPipeline to
-    the tapestry.request.WebRequestServicer pipeline.
-    
-    <invoke-factory>
-      <construct class="RenderRequestServicerToWebRequestServicerBridge">
-        <set-service property="portletRequestGlobals" service-id="PortletRequestGlobals"/>
-        <set-service property="webRequestServicer" service-id="tapestry.request.WebRequestServicer"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="RenderRequestServicerPipeline">
-    <terminator object="service:RenderRequestServicerToWebRequestServicerBridge"/>
-  </contribution>
-
-
-  <service-point id="PortletRequestGlobals" interface="PortletRequestGlobals">
-    
-    Stores the current request and response objects.
-    
-    <create-instance class="PortletRequestGlobalsImpl" model="threaded"/>
-    
-  </service-point>
-  
-  <service-point id="ActionResponse" interface="javax.portlet.ActionResponse">
-    
-    The ActionResponse for the current request.
-    
-    <invoke-factory service-id="hivemind.lib.ServicePropertyFactory">
-      <construct service-id="PortletRequestGlobals" property="actionResponse"/>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <service-point id="PortletRequest" interface="javax.portlet.PortletRequest">
-    
-    The PortletRequest for the current request. This may be either an ActionRequest
-    or a RenderRequest.
-    
-    <invoke-factory service-id="hivemind.lib.ServicePropertyFactory">
-      <construct service-id="PortletRequestGlobals" property="portletRequest"/>
-    </invoke-factory>
-    
-  </service-point>  
-  
-  <service-point id="RenderResponse" interface="javax.portlet.RenderResponse">
-    
-    The RenderResponse for the current request.
-    
-    <invoke-factory service-id="hivemind.lib.ServicePropertyFactory">
-      <construct service-id="PortletRequestGlobals" property="renderResponse"/>
-    </invoke-factory>
-  </service-point>
-         
-  <service-point id="PortletCookieSource" interface="org.apache.tapestry.services.CookieSource">
-    
-    A "default" (no-op) implementation of the CookieSource interface.
-    
-    <invoke-factory service-id="hivemind.lib.PlaceholderFactory"/>
-  </service-point>
-  
-  <service-point id="PortletLinkFactory" interface="org.apache.tapestry.services.LinkFactory">
-    Implementation of LinkFactory for portlets that builds links using
-    the Portlet API's PortletResponse.setRenderParameter() method.
-    
-    <invoke-factory>
-      <construct class="PortletLinkFactoryImpl">
-        <set-object property="dataSqueezer" value="infrastructure:dataSqueezer"/>
-        <set-configuration property="contributions" configuration-id="tapestry.url.ServiceEncoders"/>
-        <set-service property="renderResponse" service-id="RenderResponse"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <service-point id="PortletAssetLinkFactory" interface="org.apache.tapestry.services.LinkFactory">
-    Implementation of LinkFactory for portlet assets. Uses servlet paths to generate asset links
-    as is normally done, but also re encodes the URL's using IRequestCycle.encodeUrl(string).
-    
-    <invoke-factory>
-      <construct class="PortletAssetLinkFactoryImpl">
-        <set-object property="dataSqueezer" value="infrastructure:dataSqueezer"/>
-        <set-configuration property="contributions" configuration-id="tapestry.url.ServiceEncoders"/>
-        <set-object property="servletPath" value="app-property:org.apache.tapestry.servlet-path"/>
-        <set-object property="contextPath" value="infrastructure:contextPath"/>
-        <set-object property="request" value="infrastructure:request"/>
-        <set-object property="requestCycle" value="infrastructure:requestCycle"/>
-        <set-service property="persistenceStrategySource" 
-          service-id="tapestry.persist.PropertyPersistenceStrategySource"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
- <service-point id="SetupPortletApplicationGlobals" interface="PortletApplicationInitializer">
-  
-  Contributed into the tapestry.init.ApplicationInitializers configuration point
-  to install the servlet-specific framework services and configurations into the
-  tapestry.globals.ApplicationGlobals service.
-  
-  <invoke-factory>
-    <construct class="SetupPortletApplicationGlobals">
-      <set-service property="globals" service-id="tapestry.globals.ApplicationGlobals"/>
-      <set-configuration property="factoryServices" configuration-id="tapestry.portlet.services.FactoryServices"/>
-      <set-service property="infrastructure" service-id="tapestry.Infrastructure"/>      
-    </construct>
-  </invoke-factory>
- </service-point>
- 
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="linkFactory" mode="portlet" object="service:PortletLinkFactory"/>
-    <property name="rootDescriptionReceiverFactory " mode="portlet" object="service:PortletRootDescriptionReceiverFactory"/>
-    <property name="exceptionPresenter" mode="portlet" object="service:PortletExceptionPresenter"/>
-    <property name="staleLinkExceptionPresenter" mode="portlet" object="service:PortletStaleLinkExceptionPresenter"/>
-    <property name="staleSessionExceptionPresenter" mode="portlet" object="service:PortletStaleSessionExceptionPresenter"/>
-    <property name="cookieSource" mode="portlet" object="service:PortletCookieSource"/>
-  </contribution>
-   
- <contribution configuration-id="PortletApplicationInitializers">
-  <command id="SetupServletApplicationGlobals" object="service:SetupPortletApplicationGlobals"/>
- </contribution> 
-  
-  
-  <service-point id="PortletRootDescriptionReceiverFactory" interface="org.apache.tapestry.describe.RootDescriptionReceiverFactory">
-    
-    Overrides the standard tapestry.describe.RootDescriptionReceiverFactory  to change
-    the CSS styles used.
-    
-    <invoke-factory>
-      <construct class="org.apache.tapestry.describe.RootDescriptionReceiverFactory Impl">
-        <set-service property="strategy" service-id="tapestry.describe.DescribableStrategy"/>
-        <set property="headerClass" value="portlet-section-header"/>
-        <set property="subheaderClass" value="portlet-section-subheader"/>
-        <set property="tableClass" value="portlet-section-body"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <service-point id="PortletExceptionPresenter" interface="org.apache.tapestry.error.ExceptionPresenter">
-    
-    Displays stack trace and other information when a runtime exception is thrown.
-    If the exception occurs during an action request, the markup rendered and stored
-    in the session until a later render request (using the exception service).
-    
-    <invoke-factory>
-      <construct class="PortletExceptionPresenter">
-        <set-service property="globals" service-id="PortletRequestGlobals"/>
-        <set-object property="request" value="infrastructure:request"/>
-        <set-object property="response" value="infrastructure:response"/>
-        <set-object property="requestExceptionReporter"
-                       value="infrastructure:requestExceptionReporter"/>   
-        <set-object property="renderStrategy" value="service:tapestry.describe.RenderStrategy"/>
-        <set-object property="markupWriterSource" value="infrastructure:markupWriterSource"/>
-     </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <service-point id="PortletStaleSessionExceptionPresenter" interface="org.apache.tapestry.error.StaleSessionExceptionPresenter">
-    
-    Displays a short message announcing that the session has expired.
-    
-    <invoke-factory>
-      <construct class="PortletStaleSessionExceptionPresenter">
-        <set-service property="globals" service-id="PortletRequestGlobals"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <service-point id="PortletStaleLinkExceptionPresenter" interface="org.apache.tapestry.error.StaleLinkExceptionPresenter">
-    
-    Displays the stale link exception's message.
-    
-    <invoke-factory>
-      <construct class="PortletStaleLinkExceptionPresenter">
-        <set-service property="globals" service-id="PortletRequestGlobals"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>  
-  
-	<contribution configuration-id="tapestry.describe.DescribableStrategies" if="class javax.portlet.PortletSession">
-    <strategy class="javax.portlet.PortletSession" object="instance:PortletSessionDescribableStrategy"/>
-    <strategy class="javax.portlet.PortletConfig" object="instance:PortletConfigStrategy"/>
-  </contribution>    
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.bindings.xml b/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.bindings.xml
deleted file mode 100644
index 97516b9..0000000
--- a/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.bindings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.portlet.bindings" version="4.0.0" package="org.apache.tapestry.portlet.bindings">
-  
-  <service-point id="UserAttributeBindingFactory" interface="org.apache.tapestry.binding.BindingFactory">
-    
-    Creates new bindings for Portlet user attributes.
-    
-    <invoke-factory>
-      <construct class="UserAttributeBindingFactory">
-        <set-object property="request" value="service:tapestry.portlet.PortletRequest"/>
-        <set-object property="valueConverter" value="infrastructure:valueConverter"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="tapestry.bindings.BindingFactories" if="class javax.portlet.PortletSession">
-    <binding prefix="user" service-id="UserAttributeBindingFactory"/>
-  </contribution>
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.multipart.xml b/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.multipart.xml
deleted file mode 100644
index 6a75060..0000000
--- a/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.multipart.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.portlet.multipart" version="4.0.0" package="org.apache.tapestry.portlet.multipart">
-  
-  Support for multipart/form-data encoded requests used for file uploads.
-  
-  <service-point id="PortletMultipartDecoder">
-    
-    Service responsible for parsing and decoding multipart form submissions. 
-    
-    <create-instance class="PortletMultipartDecoderImpl" model="threaded"/>
-    
-  </service-point>
-  
-  <service-point id="PortletMultipartDecoderFilter" interface="org.apache.tapestry.portlet.ActionRequestServicerFilter">
-    
-    Identifies upload requests and passes them to the PortletMultipartDecoder service
-    for decoding.
-    
-    <invoke-factory>
-      <construct class="PortletMultipartDecoderFilter">
-        <set-service property="decoder" service-id="PortletMultipartDecoder"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="tapestry.portlet.ActionRequestServicerPipeline">
-    <filter name="PortletMultipartDecoderFilter" 
-      object="service:PortletMultipartDecoderFilter"/>
-  </contribution>
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="multipartDecoder" mode="portlet" object="service:PortletMultipartDecoder"/>
-  </contribution>
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.resolver.xml b/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.resolver.xml
deleted file mode 100644
index 0c95bfd..0000000
--- a/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.resolver.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.portlet.resolver" version="4.0.0" package="org.apache.tapestry.portlet">
-
-  Controls the resolution, based on portlet mode and window state, to a page.
-  This is all used by the Portlet's home engine service.
-
-  <service-point id="PortletPageResolver">
-    
-    A chain of command for determing the correct page.
-    
-    <invoke-factory service-id="hivemind.lib.ChainFactory">
-      <construct configuration-id="PageResolvers"/>
-    </invoke-factory>
-    
-  </service-point>
-
-  <configuration-point id="PageResolvers" schema-id="hivemind.lib.ChainContribution">
-    
-    Defines the series of command steps to try and resolve the page name for
-    the request.
-    
-  </configuration-point>
-  
-  <contribution configuration-id="PageResolvers">
-    <command id="matcher" object="service:MatchingPortletPageResolver"/>
-    <command id="default" after="*" object="service:DefaultPortletPageResolver"/>
-  </contribution>
-  
-  <service-point id="MatchingPortletPageResolver" interface="PortletPageResolver">
-    
-    Uses the PageResolverRules configuration point to find a match
-    against the current request's mime type, portlet mode and/or
-    window state. Best match that corresponds to an actual page wins.
-    
-    <invoke-factory>
-      <construct class="MatchingPortletPageResolver">
-        <set-object property="request" value="service:tapestry.portlet.PortletRequest"/>
-        <set-object property="contributions" value="configuration:PageResolverRules"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <service-point id="DefaultPortletPageResolver" interface="PortletPageResolver">
-    
-    <invoke-factory>
-      <construct class="DefaultPortletPageResolver">
-        <set-object property="pageName" value="app-property:org.apache.tapestry.portlet.home-page"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
-  <configuration-point id="PageResolverRules">
-    
-    Identifies rules for matching an incoming request to a 
-    named page.
-    <schema>
-      <element name="match">
-        <attribute name="portlet-mode">
-          
-          The name of a portlet mode to match against.
-          
-        </attribute>
-        
-        <attribute name="window-state">
-          
-          The name of a window state to match against.
-          
-        </attribute>
-        
-        <attribute name="mime-type">
-          
-          The mime type to match against.
-          
-        </attribute>
-        
-        <attribute name="page" required="true">
-          
-          The name of the page to use. If such a page exists (it may not), it will
-          be activated to render the response.
-          
-        </attribute>
-        
-        <conversion class="PageResolverContribution">
-          <map property="pageName" attribute="page"/>
-        </conversion>
-        
-      </element>
-    </schema>
-    
-  </configuration-point>
-  
-  <contribution configuration-id="PageResolverRules">
-    <match portlet-mode="edit" page="Edit"/>
-    <match portlet-mode="help" page="Help"/>
-  </contribution>
-  
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.services.xml b/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.services.xml
deleted file mode 100644
index 17b5231..0000000
--- a/tapestry/tapestry-portlet/src/descriptor/META-INF/tapestry.portlet.services.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.portlet.services" version="4.0.0" package="org.apache.tapestry.portlet">
-
-  Defines engine services used by Tapestry portlet support.
-  
-  <configuration-point id="FactoryServices" schema-id="tapestry.services.EngineServices">
-    
-    Configuration point for the factory default services. Each contributed service
-    must have a unique name.
-    
-  </configuration-point>
-    
-  <contribution configuration-id="FactoryServices">
-    <service name="home" object="service:Home"/>
-    <service name="action" object="service:tapestry.services.Action"/>
-    <service name="direct" object="service:tapestry.services.Direct"/>
-    <service name="page" object="service:tapestry.services.Page"/>
-    <service name="reset" object="service:tapestry.services.Reset"/>
-    <service name="restart" object="service:tapestry.services.Restart"/>
-    <service name="asset" object="service:PortletAsset"/>
-	  <service name="external" object="service:tapestry.services.External"/>
-    <service name="exception" object="service:Exception"/>
-    
-    <!-- Special one used for handling Portal RenderRequests -->
-    
-    <service name="render" object="service:Render"/>
-  </contribution>    
-  
-  <service-point id="Exception" interface="org.apache.tapestry.engine.IEngineService">
-    
-    Renders a pre-generated exception, stored in the session.
-    
-    <invoke-factory>
-      <construct class="ExceptionService">
-        <set-object property="request" value="infrastructure:request"/>
-        <set-object property="response" value="infrastructure:response"/>
-        <set-service property="globals" service-id="tapestry.portlet.PortletRequestGlobals"/>
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <service-point id="PortletAsset" interface="org.apache.tapestry.engine.IEngineService">
-    
-    Specially wired version of the asset service that routes through the application servlet
-    (rather than the portlet).
-    
-    <invoke-factory>
-      <construct class="org.apache.tapestry.asset.AssetService">
-        <set-object property="exceptionReporter" value="infrastructure:requestExceptionReporter"/>
-        <!-- The big change: use the servlet LinkFactory, not the portlet LinkFactory. -->
-        <set-service property="linkFactory" service-id="tapestry.portlet.PortletAssetLinkFactory"/>
-        <set-service property="context" service-id="tapestry.globals.WebContext"/>
-        <set-object property="response" value="service:tapestry.globals.WebResponse"/>
-        <set-service property="digestSource" service-id="tapestry.asset.ResourceDigestSource"/>
-        <set-service property="unprotectedMatcher" service-id="tapestry.asset.UnprotectedResourceMatcher" />
-        <event-listener service-id="tapestry.ResetEventHub"/>
-      </construct>
-    </invoke-factory>
-  </service-point>  
- 
-  <service-point id="PortletRenderer" interface="PortletRenderer">
-    
-    Service used to render a named page.
-    
-    <invoke-factory>
-      <construct class="PortletRendererImpl">
-        <set-object property="markupWriterSource" value="infrastructure:markupWriterSource"/>
-        <set-object property="response" value="infrastructure:response"/>       
-        <set-object property="assetFactory" value="infrastructure:assetFactory"/>
-        <set-object property="applicationId" value="infrastructure:applicationId"/>
-      </construct>
-    </invoke-factory>
-  </service-point>
-  
- <service-point id="Render" interface="org.apache.tapestry.engine.IEngineService">
-  
-  The single service that should be referenced by a Portlet render request.
-  
-  <invoke-factory>
-    <construct class="RenderService">
-      <set-service property="portletRenderer" service-id="PortletRenderer"/>
-      <set-service property="request" service-id="tapestry.portlet.PortletRequest"/>
-      <set-service property="pageResolver" service-id="tapestry.portlet.resolver.PortletPageResolver"/>
-    </construct>
-  </invoke-factory>  
- </service-point>
- 
-  <service-point id="Home" interface="org.apache.tapestry.engine.IEngineService">
-    <invoke-factory>
-      <construct class="PortletHomeService">
-        <set-object property="responseRenderer" value="infrastructure:responseRenderer"/>
-        <set-object property="linkFactory" value="infrastructure:linkFactory"/>
-        <set-service property="requestGlobals" service-id="tapestry.portlet.PortletRequestGlobals"/>
-        <set-service property="portletRenderer" service-id="PortletRenderer"/>
-        <set-service property="pageResolver" service-id="tapestry.portlet.resolver.PortletPageResolver"/>
-      </construct>
-    </invoke-factory>
-  </service-point> 
- 
- <service-point id="ResponseRenderer" interface="org.apache.tapestry.services.ResponseRenderer">
-  
-  Portal specific implementation of ResponseRender that builds a 
-  Portlet Render URL that references the render engine service.
-  
-  <invoke-factory>
-    <construct class="PortletResponseRenderer">
-      <set-service property="request" service-id="tapestry.portlet.PortletRequest"/>
-      <set-service property="response" service-id="tapestry.portlet.ActionResponse"/>
-    </construct>
-  </invoke-factory>
- </service-point>
-  
-  <contribution configuration-id="tapestry.Infrastructure">
-    <property name="responseRenderer" mode="portlet" object="service:ResponseRenderer"/>
-  </contribution>
-    
-  <contribution configuration-id="hivemind.FactoryDefaults">
-    <default symbol="org.apache.tapestry.portlet.home-page" value="View"/>
-  </contribution>
-</module>
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ActionRequestServicer.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ActionRequestServicer.java
deleted file mode 100644
index 176bfec..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ActionRequestServicer.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletException;
-
-/**
- * Used to define the commands in the <code>tapestry.portlet.ActionRequestServicerPipeline</code>
- * configuration. 
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface ActionRequestServicer
-{
-    void service(ActionRequest request, ActionResponse response) throws IOException,
-            PortletException;
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ActionRequestServicerFilter.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ActionRequestServicerFilter.java
deleted file mode 100644
index 4443fc5..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ActionRequestServicerFilter.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletException;
-
-/**
- * Filter interface used for the commands in the
- * <code>tapestry.portlet.ActionRequestServicerPipeline</code> configuration.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.portlet.ActionRequestServicer
- */
-public interface ActionRequestServicerFilter
-{
-    void service(ActionRequest request, ActionResponse response,
-            ActionRequestServicer servicer) throws IOException, PortletException;
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ActionRequestServicerToWebRequestServicerBridge.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ActionRequestServicerToWebRequestServicerBridge.java
deleted file mode 100644
index e2433d8..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ActionRequestServicerToWebRequestServicerBridge.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletException;
-
-import org.apache.tapestry.services.WebRequestServicer;
-
-/**
- * Bridges from the <code>tapestry.portlet.ActionRequestServicerPipeline</code> to the standard
- * <code>tapestry.request.WebRequestServicerPipeline</code>.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ActionRequestServicerToWebRequestServicerBridge implements ActionRequestServicer
-{
-    private PortletRequestGlobals _portletRequestGlobals;
-
-    private WebRequestServicer _webRequestServicer;
-
-    public void service(ActionRequest request, ActionResponse response) throws IOException,
-            PortletException
-    {
-        _portletRequestGlobals.store(request, response);
-
-        PortletWebRequest webRequest = new PortletWebRequest(request);
-        PortletWebResponse webResponse = new PortletWebResponse(response);
-
-        try
-        {
-            _webRequestServicer.service(webRequest, webResponse);
-        }
-        catch (RuntimeException ex)
-        {
-            throw new PortletException(ex);
-        }
-    }
-
-    public void setPortletRequestGlobals(PortletRequestGlobals portletRequestGlobals)
-    {
-        _portletRequestGlobals = portletRequestGlobals;
-    }
-
-    public void setWebRequestServicer(WebRequestServicer webRequestServicer)
-    {
-        _webRequestServicer = webRequestServicer;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ApplicationPortlet.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ApplicationPortlet.java
deleted file mode 100644
index 96033c2..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ApplicationPortlet.java
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-import java.util.Locale;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.Portlet;
-import javax.portlet.PortletConfig;
-import javax.portlet.PortletException;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Registry;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.impl.RegistryBuilder;
-import org.apache.hivemind.impl.XmlModuleDescriptorProvider;
-import org.apache.tapestry.web.WebContext;
-import org.apache.tapestry.web.WebContextResource;
-
-/**
- * Portlet implementation for Tapestry Portlet applilcations. It's job is to create and manage the
- * HiveMind registry, to use the <code>tapestry.portlet.PortletApplicationInitializer</code>
- * service to initialize HiveMind, and the delegate requests to the
- * <code>tapestry.portlet.ActionRequestServicer</code> and
- * <code>tapestry.portlet.RenderRequestServicer</code> services.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class ApplicationPortlet implements Portlet
-{
-    Registry _registry;
-
-    ActionRequestServicer _actionRequestServicer;
-
-    RenderRequestServicer _renderRequestServicer;
-
-    public void destroy()
-    {
-        try
-        {
-            _registry.shutdown();
-        }
-        finally
-        {
-            _registry = null;
-            _actionRequestServicer = null;
-            _renderRequestServicer = null;
-        }
-    }
-
-    public void init(PortletConfig config) throws PortletException
-    {
-        _registry = constructRegistry(config);
-
-        PortletApplicationInitializer initializer = (PortletApplicationInitializer) _registry.getService(
-                        "tapestry.portlet.PortletApplicationInitializer",
-                        PortletApplicationInitializer.class);
-
-        initializer.initialize(config);
-
-        _actionRequestServicer = (ActionRequestServicer) _registry.getService(
-                "tapestry.portlet.ActionRequestServicer",
-                ActionRequestServicer.class);
-
-        _renderRequestServicer = (RenderRequestServicer) _registry.getService(
-                "tapestry.portlet.RenderRequestServicer",
-                RenderRequestServicer.class);
-    }
-
-    /**
-     * Constructs the Registry. The Registry is constructed from the classpath, plus two optional
-     * files:
-     * <ul>
-     * <li>WEB-INF/ <em>name</em> /hivemodule.xml</li>
-     * <li>WEB-INF/hivemodule.xml</li>
-     * </ul>.
-     * <p>
-     * Where <em>name</em> is the name of the portlet.
-     */
-
-    protected Registry constructRegistry(PortletConfig config)
-    {
-        RegistryBuilder builder = new RegistryBuilder();
-
-        ClassResolver resolver = new DefaultClassResolver();
-
-        builder.addModuleDescriptorProvider(new XmlModuleDescriptorProvider(resolver));
-
-        String name = config.getPortletName();
-        WebContext context = new PortletWebContext(config.getPortletContext());
-
-        addModuleIfExists(builder, resolver, context, "/WEB-INF/" + name + "/hivemodule.xml");
-        addModuleIfExists(builder, resolver, context, "/WEB-INF/hivemodule.xml");
-
-        return builder.constructRegistry(Locale.getDefault());
-    }
-
-    /**
-     * Looks for a file in the context; if it exists, it is expected to be a HiveMind module
-     * descriptor, and is added to the builder.
-     * 
-     * @since 4.0
-     */
-
-    protected void addModuleIfExists(RegistryBuilder builder, ClassResolver resolver,
-            WebContext context, String path)
-    {
-        Resource r = new WebContextResource(context, path);
-
-        if (r.getResourceURL() == null)
-            return;
-
-        builder.addModuleDescriptorProvider(new XmlModuleDescriptorProvider(resolver, r));
-    }
-
-    public void processAction(ActionRequest request, ActionResponse response)
-            throws PortletException, IOException
-    {
-        try
-        {
-            _registry.setupThread();
-
-            _actionRequestServicer.service(request, response);
-        }
-        catch (RuntimeException ex)
-        {
-            throw new PortletException(PortletMessages.errorProcessingAction(ex), ex);
-        }
-        finally
-        {
-            _registry.cleanupThread();
-        }
-    }
-
-    public void render(RenderRequest request, RenderResponse response) throws PortletException,
-            IOException
-    {
-        try
-        {
-            _registry.setupThread();
-
-            _renderRequestServicer.service(request, response);
-        }
-        catch (RuntimeException ex)
-        {
-            throw new PortletException(PortletMessages.errorProcessingRender(ex), ex);
-        }
-        finally
-        {
-            _registry.cleanupThread();
-        }
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/DefaultPortletPageResolver.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/DefaultPortletPageResolver.java
deleted file mode 100644
index 52ab1fd..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/DefaultPortletPageResolver.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The final entry on the tapestry.portlet.resolver.PageResolvers chain; this one returns a fixed,
- * default page name (typically, "View").
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class DefaultPortletPageResolver implements PortletPageResolver
-{
-    private String _pageName;
-
-    public void setPageName(String pageName)
-    {
-        _pageName = pageName;
-    }
-
-    public String getPageNameForRequest(IRequestCycle cycle)
-    {
-        return _pageName;
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ExceptionService.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ExceptionService.java
deleted file mode 100644
index 69d9027..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/ExceptionService.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-import org.apache.tapestry.web.WebSession;
-
-import javax.portlet.PortletURL;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.portlet.PortletConstants#PORTLET_EXCEPTION_MARKUP_ATTRIBUTE
- */
-public class ExceptionService implements IEngineService
-{
-
-    private WebRequest _request;
-
-    private WebResponse _response;
-
-    private PortletRequestGlobals _globals;
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        throw new UnsupportedOperationException(PortletMessages
-                .unsupportedMethod("getLink"));
-    }
-
-    public void service(IRequestCycle cycle)
-        throws IOException
-    {
-        WebSession session = _request.getSession(true);
-        String markup = (String) session
-                .getAttribute(PortletConstants.PORTLET_EXCEPTION_MARKUP_ATTRIBUTE);
-
-        PrintWriter writer = _response.getPrintWriter(new ContentType(
-                "text/html"));
-
-        PortletURL url = _globals.getRenderResponse().createActionURL();
-
-        writer.println("<span class=\"portlet-msg-error\">An exception has occured.</span>");
-        writer.println("<br/>");
-        writer.println("<a href=\"" + url.toString()
-                + "\">Click here to continue</a>");
-        writer.print("<br/><hr/>");
-        writer.println();
-
-        writer.print(markup);
-    }
-
-    public String getName()
-    {
-        return PortletConstants.EXCEPTION_SERVICE;
-    }
-
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-
-    public void setResponse(WebResponse response)
-    {
-        _response = response;
-    }
-
-    public void setGlobals(PortletRequestGlobals globals)
-    {
-        _globals = globals;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/MatchingPortletPageResolver.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/MatchingPortletPageResolver.java
deleted file mode 100644
index ea0984e..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/MatchingPortletPageResolver.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.portlet.PortletRequest;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageNotFoundException;
-
-/**
- * Uses the tapestry.portlet.resolver.PageResolverRules configuration point to find a match.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class MatchingPortletPageResolver implements PortletPageResolver
-{
-    private List _contributions;
-
-    private List _sortedContributions;
-
-    private PortletRequest _request;
-
-    public void initializeService()
-    {
-        _sortedContributions = new ArrayList(_contributions);
-        Collections.sort(_sortedContributions);
-    }
-
-    public String getPageNameForRequest(IRequestCycle cycle)
-    {
-        Iterator i = _sortedContributions.iterator();
-        while (i.hasNext())
-        {
-            PageResolverContribution c = (PageResolverContribution) i.next();
-
-            if (c.match(_request))
-            {
-                String pageName = c.getPageName();
-
-                try
-                {
-                    cycle.getPage(pageName);
-
-                    return pageName;
-                }
-                catch (PageNotFoundException ex)
-                {
-                    // Ignore.
-                }
-            }
-        }
-
-        // No match, or no matches where the page actually exists.
-
-        return null;
-    }
-
-    public void setContributions(List contributions)
-    {
-        _contributions = contributions;
-    }
-
-    public void setRequest(PortletRequest request)
-    {
-        _request = request;
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PageResolverContribution.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PageResolverContribution.java
deleted file mode 100644
index 28b575d..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PageResolverContribution.java
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import javax.portlet.PortletRequest;
-
-import org.apache.hivemind.impl.BaseLocatable;
-import org.apache.hivemind.util.Defense;
-import org.apache.hivemind.util.ToStringBuilder;
-
-/**
- * Contribution used for resolving requests to named pages.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PageResolverContribution extends BaseLocatable implements Comparable
-{
-    private String _portletMode;
-
-    private String _windowState;
-
-    private String _mimeType;
-
-    private String _pageName;
-
-    public void setMimeType(String mimeType)
-    {
-        _mimeType = mimeType;
-    }
-
-    public void setPageName(String pageName)
-    {
-        _pageName = pageName;
-    }
-
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-    public void setPortletMode(String portletMode)
-    {
-        _portletMode = portletMode;
-    }
-
-    public void setWindowState(String windowState)
-    {
-        _windowState = windowState;
-    }
-
-    int sortScore()
-    {
-        int result = 0;
-
-        if (_mimeType != null)
-            result += 4;
-
-        if (_portletMode != null)
-            result += 2;
-
-        if (_windowState != null)
-            result += 1;
-
-        return result;
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("mimeType", _mimeType);
-        builder.append("portletMode", _portletMode);
-        builder.append("windowState", _windowState);
-        builder.append("pageName", _pageName);
-
-        return builder.toString();
-    }
-
-    public int compareTo(Object o)
-    {
-        int thisScore = sortScore();
-        int otherScore = ((PageResolverContribution) o).sortScore();
-
-        // End result: sorted descending by specificity
-
-        return otherScore - thisScore;
-    }
-
-    public boolean match(PortletRequest request)
-    {
-        Defense.notNull(request, "request");
-
-        if (_mimeType != null && !_mimeType.equals(request.getResponseContentType()))
-            return false;
-
-        if (_portletMode != null && !_portletMode.equals(request.getPortletMode().toString()))
-            return false;
-
-        if (_windowState != null && !_windowState.equals(request.getWindowState().toString()))
-            return false;
-
-        return true;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletApplicationInitializer.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletApplicationInitializer.java
deleted file mode 100644
index e25a95f..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletApplicationInitializer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import javax.portlet.PortletConfig;
-
-/**
- * Command interface for the
- * <code>tapestry.portlet.ApplicationInitializer</code> configuration point,
- * which is used by the application portlet to bootstrap the application.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface PortletApplicationInitializer
-{
-
-    void initialize(PortletConfig portletConfig);
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletApplicationSpecificationInitializer.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletApplicationSpecificationInitializer.java
deleted file mode 100644
index f7b5dfd..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletApplicationSpecificationInitializer.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import javax.portlet.PortletConfig;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.parse.ISpecificationParser;
-import org.apache.tapestry.services.ApplicationGlobals;
-import org.apache.tapestry.spec.ApplicationSpecification;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.web.WebContext;
-import org.apache.tapestry.web.WebContextResource;
-
-/**
- * Locates and reads the application specification for the portlet and stores it
- * into {@link org.apache.tapestry.services.ApplicationGlobals}.
- * <p>
- * TODO: Merge this code with
- * {@link org.apache.tapestry.services.impl.ApplicationSpecificationInitializer},
- * they're very similar. This would probably be an additional service that would
- * do the lookup based on the {@link org.apache.tapestry.web.WebActivator}&nbsp;and
- * the {@link org.apache.tapestry.web.WebContext}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.services.impl.ApplicationSpecificationInitializer
- */
-public class PortletApplicationSpecificationInitializer implements
-        PortletApplicationInitializer
-{
-
-    private WebContext _context;
-
-    private ApplicationGlobals _globals;
-
-    private ISpecificationParser _parser;
-
-    public void initialize(PortletConfig portletConfig)
-    {
-        String name = portletConfig.getPortletName();
-
-        Resource resource = findApplicationSpecification(name);
-
-        IApplicationSpecification specification = resource == null ? constructStandinSpecification(name)
-                : _parser.parseApplicationSpecification(resource);
-
-        _globals.storeSpecification(specification);
-    }
-
-    private Resource findApplicationSpecification(String name)
-    {
-        String expectedName = name + ".application";
-
-        Resource webInfLocation = new WebContextResource(_context, "/WEB-INF/");
-        Resource webInfAppLocation = webInfLocation.getRelativeResource(name
-                + "/");
-
-        Resource result = check(webInfAppLocation, expectedName);
-        if (result != null) return result;
-
-        return check(webInfLocation, expectedName);
-    }
-
-    private Resource check(Resource resource, String name)
-    {
-        Resource result = resource.getRelativeResource(name);
-
-        if (result.getResourceURL() != null) return result;
-
-        return null;
-    }
-
-    private IApplicationSpecification constructStandinSpecification(String name)
-    {
-        ApplicationSpecification result = new ApplicationSpecification();
-
-        // Pretend the file exists in the most common expected location.
-
-        Resource virtualLocation = new WebContextResource(_context, "/WEB-INF/"
-                + name + ".application");
-
-        result.setSpecificationLocation(virtualLocation);
-
-        result.setName(name);
-
-        return result;
-    }
-
-    public void setContext(WebContext context)
-    {
-        _context = context;
-    }
-
-    public void setGlobals(ApplicationGlobals globals)
-    {
-        _globals = globals;
-    }
-
-    public void setParser(ISpecificationParser parser)
-    {
-        _parser = parser;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletAssetLinkFactoryImpl.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletAssetLinkFactoryImpl.java
deleted file mode 100644
index a0cde7d..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletAssetLinkFactoryImpl.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright Jul 10, 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.portlet;
-
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.EngineServiceLink;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.engine.ServiceEncoding;
-import org.apache.tapestry.services.impl.LinkFactoryImpl;
-import org.apache.tapestry.util.QueryParameterMap;
-
-import java.util.Map;
-
-
-/**
- * Creates {@link EngineServiceLink}s that will re-encode asset URL's
- * using {@link IRequestCycle#encodeURL(String)}.
- * 
- */
-public class PortletAssetLinkFactoryImpl extends LinkFactoryImpl
-{
-    
-    public ILink constructLink(IEngineService service, boolean post, Map parameters,
-            boolean stateful)
-    {
-        finalizeParameters(service, parameters);
-        
-        IEngine engine = _requestCycle.getEngine();
-
-        QueryParameterMap qmap = new QueryParameterMap(parameters);
-
-        ServiceEncoding serviceEncoding = createServiceEncoding(qmap);
-        
-        // Give persistent property strategies a chance to store extra data
-        // into the link.
-        
-        if (stateful)
-            _persistenceStrategySource.addParametersForPersistentProperties(serviceEncoding, post);
-        
-        String fullServletPath = _request.getContextPath() + serviceEncoding.getServletPath();
-        
-        return new EngineServiceLink(_requestCycle, fullServletPath, engine.getOutputEncoding(),
-                _codec, _request, qmap, stateful);
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletConfigStrategy.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletConfigStrategy.java
deleted file mode 100644
index 94f636d..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletConfigStrategy.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.util.Iterator;
-
-import javax.portlet.PortletConfig;
-
-import org.apache.tapestry.describe.DescribableStrategy;
-import org.apache.tapestry.describe.DescriptionReceiver;
-import org.apache.tapestry.web.WebUtils;
-
-/**
- * Adapts {@link javax.portlet.PortletConfig}&nbsp;for describing.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletConfigStrategy implements DescribableStrategy
-{
-
-    public void describeObject(Object object, DescriptionReceiver receiver)
-    {
-        PortletConfig pc = (PortletConfig) object;
-
-        receiver.title("Portlet Config");
-
-        receiver.property("portletName", pc.getPortletName());
-
-        receiver.section("Init Parameters");
-
-        Iterator i = WebUtils.toSortedList(pc.getInitParameterNames())
-                .iterator();
-
-        while(i.hasNext())
-        {
-            String name = (String) i.next();
-            receiver.property(name, pc.getInitParameter(name));
-        }
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletConstants.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletConstants.java
deleted file mode 100644
index 4ff1f6f..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletConstants.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public final class PortletConstants
-{
-    /**
-     * Name of the render service, whose job is to render a page. The page to render is identified
-     * in the {@link org.apache.tapestry.services.ServiceConstants#PAGE}&nbsp;parameter.
-     */
-    public static final String RENDER_SERVICE = "render";
-
-    /**
-     * Name of the exception service, which renders stored exception markup.
-     */
-
-    public static final String EXCEPTION_SERVICE = "exception";
-
-    /**
-     * Session attribute key used to store markup generated during an action request, so that it can
-     * be displayed during a later render request.
-     */
-
-    public static final String PORTLET_EXCEPTION_MARKUP_ATTRIBUTE = "org.apache.tapestry.portlet.PortletExceptionMarkup";
-
-    /**
-     * Render parameter name storing the portlet mode at the time the render URL was created. This
-     * is necessary for determining when the mode has changed.
-     */
-
-    public static final String PORTLET_MODE = "portlet-mode";
-
-    /**
-     * Render parameter name storing the window state at the time the render URL was created. Again,
-     * this is necessary for determining when the window state has changed.
-     */
-
-    public static final String WINDOW_STATE = "window-state";
-
-    private PortletConstants()
-    {
-        // Prevent instantiation
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletExceptionPresenter.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletExceptionPresenter.java
deleted file mode 100644
index 4c7dc2f..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletExceptionPresenter.java
+++ /dev/null
@@ -1,239 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.CharArrayWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.portlet.ActionResponse;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.describe.RenderStrategy;
-import org.apache.tapestry.error.ErrorMessages;
-import org.apache.tapestry.error.ExceptionPresenter;
-import org.apache.tapestry.error.RequestExceptionReporter;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.services.ServiceConstants;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.util.exception.ExceptionAnalyzer;
-import org.apache.tapestry.util.exception.ExceptionDescription;
-import org.apache.tapestry.util.exception.ExceptionProperty;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-
-/**
- * Service used to present a runtime exception to the user. This is very tricky
- * in the Portlet world because of the split between the action and render
- * requests (much more likely to get an error during the action request than
- * during the render request, but both are possible).
- * <p>
- * During an action request, this code will render the HTML markup for the
- * exception into a buffer that is stored as persistent attribute in the portal
- * session.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletExceptionPresenter implements ExceptionPresenter
-{
-
-    private PortletRequestGlobals _globals;
-
-    private RenderStrategy _renderStrategy;
-
-    private WebRequest _request;
-
-    private RequestExceptionReporter _requestExceptionReporter;
-
-    private WebResponse _response;
-
-    private MarkupWriterSource _markupWriterSource;
-
-    public void presentException(IRequestCycle cycle, Throwable cause)
-    {
-        try
-        {
-            if (_globals.isRenderRequest())
-                reportRenderRequestException(cycle, cause);
-            else reportActionRequestException(cycle, cause);
-        }
-        catch (Exception ex)
-        {
-            // Worst case scenario. The exception page itself is broken, leaving
-            // us with no option but to write the cause to the output.
-
-            // Also, write the exception thrown when redendering the exception
-            // page, so that can get fixed as well.
-
-            _requestExceptionReporter.reportRequestException(PortletMessages
-                    .errorReportingException(ex), ex);
-
-            // And throw the exception.
-
-            throw new ApplicationRuntimeException(ex.getMessage(), ex);
-        }
-
-        _requestExceptionReporter.reportRequestException(ErrorMessages
-                .unableToProcessClientRequest(cause), cause);
-    }
-
-    private void reportActionRequestException(IRequestCycle cycle,
-            Throwable cause)
-    {
-        CharArrayWriter caw = new CharArrayWriter();
-        PrintWriter pw = new PrintWriter(caw);
-
-        IMarkupWriter writer = _markupWriterSource.newMarkupWriter(pw,
-                new ContentType("text/html"));
-
-        writeException(writer, cycle, cause);
-
-        writer.close();
-
-        String markup = caw.toString();
-
-        _request.getSession(true).setAttribute(
-                PortletConstants.PORTLET_EXCEPTION_MARKUP_ATTRIBUTE, markup);
-
-        ActionResponse response = _globals.getActionResponse();
-
-        response.setRenderParameter(ServiceConstants.SERVICE,
-                PortletConstants.EXCEPTION_SERVICE);
-    }
-
-    private void reportRenderRequestException(IRequestCycle cycle,
-            Throwable cause)
-        throws IOException
-    {
-        PrintWriter pw = _response.getPrintWriter(new ContentType("text/html"));
-
-        IMarkupWriter writer = _markupWriterSource.newMarkupWriter(pw,
-                new ContentType("text/html"));
-
-        writeException(writer, cycle, cause);
-    }
-
-    public void setGlobals(PortletRequestGlobals globals)
-    {
-        _globals = globals;
-    }
-
-    public void setRenderStrategy(RenderStrategy renderStrategy)
-    {
-        _renderStrategy = renderStrategy;
-    }
-
-    public void setRequest(WebRequest request)
-    {
-        _request = request;
-    }
-
-    public void setRequestExceptionReporter(
-            RequestExceptionReporter requestExceptionReporter)
-    {
-        _requestExceptionReporter = requestExceptionReporter;
-    }
-
-    public void setResponse(WebResponse response)
-    {
-        _response = response;
-    }
-
-    public void setMarkupWriterSource(MarkupWriterSource markupWriterSource)
-    {
-        _markupWriterSource = markupWriterSource;
-    }
-
-    private void writeException(IMarkupWriter writer, IRequestCycle cycle,
-            ExceptionDescription exception, boolean showStackTrace)
-    {
-        writer.begin("div");
-        writer.attribute("class", "portlet-section-header");
-        writer.print(exception.getExceptionClassName());
-        writer.end();
-        writer.println();
-
-        writer.begin("div");
-        writer.attribute("class", "portlet-msg-error");
-        writer.print(exception.getMessage());
-        writer.end();
-        writer.println();
-
-        ExceptionProperty[] properties = exception.getProperties();
-
-        if (properties.length > 0)
-        {
-
-            writer.begin("table");
-            writer.attribute("class", "portlet-section-subheader");
-
-            for(int i = 0; i < properties.length; i++)
-            {
-                writer.begin("tr");
-
-                writer.attribute("class", i % 2 == 0 ? "portlet-section-body"
-                        : "portlet-section-alternate");
-
-                writer.begin("th");
-                writer.print(properties[i].getName());
-                writer.end();
-                writer.println();
-
-                writer.begin("td");
-
-                _renderStrategy.renderObject(properties[i].getValue(), writer,
-                        cycle);
-                writer.end("tr");
-                writer.println();
-            }
-
-            writer.end();
-            writer.println();
-        }
-
-        if (!showStackTrace) return;
-
-        writer.begin("ul");
-
-        String[] trace = exception.getStackTrace();
-
-        for(int i = 0; i < trace.length; i++)
-        {
-            writer.begin("li");
-            writer.print(trace[i]);
-            writer.end();
-            writer.println();
-        }
-
-        writer.end();
-        writer.println();
-
-    }
-
-    private void writeException(IMarkupWriter writer, IRequestCycle cycle,
-            Throwable cause)
-    {
-        ExceptionDescription[] exceptions = new ExceptionAnalyzer()
-                .analyze(cause);
-
-        for(int i = 0; i < exceptions.length; i++)
-            writeException(writer, cycle, exceptions[i],
-                    i + 1 == exceptions.length);
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletHomeService.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletHomeService.java
deleted file mode 100644
index aaee38a..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletHomeService.java
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.EngineMessages;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-
-/**
- * Replacement for the standard home service, used by Portlets. This exists to
- * handle the special case where a Portlet render request arrives when there is
- * not a Portlet action request prior ... this can happen when a Portlet is
- * first added to a Portal page.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletHomeService implements IEngineService
-{
-
-    private PortletRenderer _portletRenderer;
-
-    private PortletRequestGlobals _requestGlobals;
-
-    private ResponseRenderer _responseRenderer;
-
-    private LinkFactory _linkFactory;
-
-    private PortletPageResolver _pageResolver;
-
-    public String getName()
-    {
-        return Tapestry.HOME_SERVICE;
-    }
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        if (parameter != null)
-            throw new IllegalArgumentException(EngineMessages
-                    .serviceNoParameter(this));
-
-        Map parameters = new HashMap();
-
-        return _linkFactory.constructLink(this, post, parameters, true);
-    }
-
-    public void setLinkFactory(LinkFactory linkFactory)
-    {
-        _linkFactory = linkFactory;
-    }
-
-    public void setResponseRenderer(ResponseRenderer responseRenderer)
-    {
-        _responseRenderer = responseRenderer;
-    }
-
-    public void service(IRequestCycle cycle)
-        throws IOException
-    {
-        String pageName = _pageResolver.getPageNameForRequest(cycle);
-
-        if (_requestGlobals.isRenderRequest())
-        {
-            _portletRenderer.renderPage(cycle, pageName);
-            return;
-        }
-
-        cycle.activate(pageName);
-
-        _responseRenderer.renderResponse(cycle);
-    }
-
-    public void setPortletRenderer(PortletRenderer portletRenderer)
-    {
-        _portletRenderer = portletRenderer;
-    }
-
-    public void setRequestGlobals(PortletRequestGlobals requestGlobals)
-    {
-        _requestGlobals = requestGlobals;
-    }
-
-    public void setPageResolver(PortletPageResolver pageResolver)
-    {
-        _pageResolver = pageResolver;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletLink.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletLink.java
deleted file mode 100644
index 43f8b73..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletLink.java
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import javax.portlet.PortletURL;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.util.QueryParameterMap;
-
-/**
- * Wrapper around {@link javax.portlet.PortletURL}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletLink implements ILink
-{
-
-    private final PortletURL _portletURL;
-
-    private final QueryParameterMap _parameters;
-
-    public PortletLink(PortletURL portletURL, QueryParameterMap parameters)
-    {
-        Defense.notNull(portletURL, "portletURL");
-        Defense.notNull(parameters, "parameters");
-
-        _portletURL = portletURL;
-        _parameters = parameters;
-    }
-
-    public String getURL()
-    {
-        return getURL(null, true);
-    }
-
-    public String getURL(String anchor, boolean includeParameters)
-    {
-        if (includeParameters) loadParameters();
-
-        String url = _portletURL.toString();
-
-        url = unencode(url);
-
-        if (anchor != null) url = url + "#" + anchor;
-
-        return url;
-    }
-
-    /**
-     * The PortletURL class returns a url that's already XML-escaped, ready for
-     * inclusion directly into the response stream. However, the IMarkupWriter
-     * expects to do that encoding too ... and double encoding is bad. So we
-     * back out the most likely encoding (convert '&amp;amp;' to just '&amp;').
-     */
-
-    private String unencode(String url)
-    {
-        StringBuffer buffer = new StringBuffer(url.length());
-        String text = url;
-
-        while(true)
-        {
-            int ampx = text.indexOf("&amp;");
-
-            if (ampx < 0) break;
-
-            // Take up to and including the '&'
-
-            buffer.append(text.substring(0, ampx + 1));
-
-            text = text.substring(ampx + 5);
-        }
-
-        buffer.append(text);
-
-        return buffer.toString();
-    }
-
-    private void loadParameters()
-    {
-        String[] names = _parameters.getParameterNames();
-
-        for(int i = 0; i < names.length; i++)
-        {
-            String name = names[i];
-            String[] values = _parameters.getParameterValues(name);
-
-            if (values != null) _portletURL.setParameter(name, values);
-        }
-    }
-
-    public String getURL(String scheme, String server, int port, String anchor,
-            boolean includeParameters)
-    {
-        // Ignore scheme, server and port ... those are under the control of the
-        // portlet container.
-
-        return getURL(anchor, includeParameters);
-    }
-
-    public String getAbsoluteURL()
-    {
-        throw new UnsupportedOperationException(PortletMessages
-                .unsupportedMethod("getAbsoluteURL"));
-    }
-
-    public String getAbsoluteURL(String scheme, String server, int port,
-            String anchor, boolean includeParameters)
-    {
-        throw new UnsupportedOperationException(PortletMessages
-                .unsupportedMethod("getAbsoluteURL"));
-    }
-
-    public String[] getParameterNames()
-    {
-        return _parameters.getParameterNames();
-    }
-
-    public String[] getParameterValues(String name)
-    {
-        return _parameters.getParameterValues(name);
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletLinkFactoryImpl.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletLinkFactoryImpl.java
deleted file mode 100644
index 4f95a67..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletLinkFactoryImpl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.util.Map;
-
-import javax.portlet.PortletURL;
-import javax.portlet.RenderResponse;
-
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.services.impl.LinkFactoryImpl;
-import org.apache.tapestry.util.QueryParameterMap;
-
-/**
- * Extended version of {@link org.apache.tapestry.services.impl.LinkFactoryImpl}&nbsp;that
- * can create generate Portlet URLs.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletLinkFactoryImpl extends LinkFactoryImpl
-{
-
-    private RenderResponse _renderResponse;
-
-    public void setRenderResponse(RenderResponse renderResponse)
-    {
-        _renderResponse = renderResponse;
-    }
-
-    public ILink constructLink(IEngineService service, boolean post,
-            Map parameters, boolean stateful)
-    {
-        finalizeParameters(service, parameters);
-
-        PortletURL url = _renderResponse.createActionURL();
-
-        return new PortletLink(url, new QueryParameterMap(parameters));
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletMessages.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletMessages.java
deleted file mode 100644
index 76e6738..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletMessages.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class PortletMessages
-{
-
-    private static final MessageFormatter _formatter = new MessageFormatter(
-            PortletMessages.class);
-
-    /* defeat instantiation */
-    private PortletMessages()
-    {
-    }
-
-    static String unsupportedMethod(String methodName)
-    {
-        return _formatter.format("unsupported-method", methodName);
-    }
-
-    static String errorGettingResource(String path, Throwable cause)
-    {
-        return _formatter.format("error-getting-resource", path, cause);
-    }
-
-    static String errorProcessingAction(Throwable cause)
-    {
-        return _formatter.format("error-processing-action", cause);
-    }
-
-    static String errorProcessingRender(Throwable cause)
-    {
-        return _formatter.format("error-processing-render", cause);
-    }
-
-    static String errorReportingException(Throwable cause)
-    {
-        return _formatter.format("error-reporting-exception", cause);
-    }
-
-    static String staleSession()
-    {
-        return _formatter.getMessage("stale-session");
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletPageResolver.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletPageResolver.java
deleted file mode 100644
index 562253c..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletPageResolver.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Used by {@link org.apache.tapestry.portlet.PortletHomeService} to determine the correct page name
- * to use to render a request that does not specify a page (that's what the home service does).
- * 
- * @author Howard M. Lewis Ship
- */
-public interface PortletPageResolver
-{
-    /**
-     * Looks at the current request to determine the correct page name.
-     * 
-     * @returns The page name to activate and render (never null).
-     */
-
-    String getPageNameForRequest(IRequestCycle cycle);
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRenderer.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRenderer.java
deleted file mode 100644
index acc73bc..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRenderer.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Service used to render a page within a portlet.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface PortletRenderer
-{
-
-    void renderPage(IRequestCycle cycle, String pageName)
-        throws IOException;
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java
deleted file mode 100644
index 01a514f..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.services.impl.DefaultResponseBuilder;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.web.WebResponse;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Date;
-
-/**
- * The guts of rendering a page as a portlet response; used by
- * {@link org.apache.tapestry.portlet.RenderService} and
- * {@link org.apache.tapestry.portlet.PortletHomeService}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletRendererImpl implements PortletRenderer
-{
-
-    private WebResponse _response;
-
-    private MarkupWriterSource _markupWriterSource;
-
-    private AssetFactory _assetFactory;
-
-    private String _applicationId;
-
-    public void renderPage(IRequestCycle cycle, String pageName)
-        throws IOException
-    {
-        cycle.activate(pageName);
-
-        IPage page = cycle.getPage();
-        
-        ContentType contentType = page.getResponseContentType();
-        PrintWriter printWriter = _response.getPrintWriter(contentType);
-        IMarkupWriter writer = _markupWriterSource.newMarkupWriter(printWriter, contentType);
-        String namespace = _response.getNamespace();
-        
-        IMarkupWriter nested = writer.getNestedWriter();
-
-        ResponseBuilder builder = new DefaultResponseBuilder(nested, _assetFactory, namespace, false);
-        
-        builder.renderResponse(cycle);
-        
-        String id = "Tapestry Portlet " + _applicationId + " " + namespace;
-        
-        writer.comment("BEGIN " + id);
-        writer.comment("Page: " + page.getPageName());
-        writer.comment("Generated: " + new Date());
-        writer.comment("Framework version: " + Tapestry.VERSION);
-        
-        builder.writeBodyScript(writer, cycle);
-        
-        nested.close();
-        
-        builder.writeInitializationScript(writer);
-
-        writer.comment("END " + id);
-        
-        writer.close();
-        
-        // TODO: Trap errors and do some error reporting here?
-    }
-
-    public void setMarkupWriterSource(MarkupWriterSource markupWriterSource)
-    {
-        _markupWriterSource = markupWriterSource;
-    }
-
-    public void setResponse(WebResponse response)
-    {
-        _response = response;
-    }
-
-    public void setAssetFactory(AssetFactory assetFactory)
-    {
-        _assetFactory = assetFactory;
-    }
-
-    public void setApplicationId(String applicationId)
-    {
-        _applicationId = applicationId;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRequestGlobals.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRequestGlobals.java
deleted file mode 100644
index 3c7ea37..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRequestGlobals.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletRequest;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-/**
- * Stores the current Portlet request and response, for access by other
- * services.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface PortletRequestGlobals
-{
-
-    void store(ActionRequest request, ActionResponse response);
-
-    void store(RenderRequest request, RenderResponse response);
-
-    ActionRequest getActionRequest();
-
-    ActionResponse getActionResponse();
-
-    RenderRequest getRenderRequest();
-
-    RenderResponse getRenderResponse();
-
-    /**
-     * Returns true if {@link #store(RenderRequest, RenderResponse)}has been
-     * invoked, false otherwise.
-     */
-    boolean isRenderRequest();
-
-    /**
-     * Returns whatever is available; the ActionRequest or the PortletRequest.
-     */
-    PortletRequest getPortletRequest();
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRequestGlobalsImpl.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRequestGlobalsImpl.java
deleted file mode 100644
index d7dce35..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRequestGlobalsImpl.java
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletRequest;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-/**
- * Implementation of the tapestry.portlet.PortletRequestGlobals service, which
- * uses the threaded service lifecycle model.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletRequestGlobalsImpl implements PortletRequestGlobals
-{
-
-    private ActionRequest _actionRequest;
-
-    private ActionResponse _actionResponse;
-
-    private RenderResponse _renderResponse;
-
-    private RenderRequest _renderRequest;
-
-    private PortletRequest _portletRequest;
-
-    public void store(ActionRequest request, ActionResponse response)
-    {
-        _actionRequest = request;
-        _portletRequest = request;
-
-        _actionResponse = response;
-    }
-
-    public void store(RenderRequest request, RenderResponse response)
-    {
-        _renderRequest = request;
-        _portletRequest = request;
-
-        _renderResponse = response;
-    }
-
-    public ActionRequest getActionRequest()
-    {
-        return _actionRequest;
-    }
-
-    public ActionResponse getActionResponse()
-    {
-        return _actionResponse;
-    }
-
-    public RenderRequest getRenderRequest()
-    {
-        return _renderRequest;
-    }
-
-    public RenderResponse getRenderResponse()
-    {
-        return _renderResponse;
-    }
-
-    public boolean isRenderRequest()
-    {
-        return _renderRequest != null;
-    }
-
-    public PortletRequest getPortletRequest()
-    {
-        return _portletRequest;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletResponseRenderer.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletResponseRenderer.java
deleted file mode 100644
index c3af2bb..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletResponseRenderer.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.apache.tapestry.services.ServiceConstants;
-
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletRequest;
-
-/**
- * Sets render parameters on the current {@link javax.portlet.ActionResponse}
- * that will invoke the {@link org.apache.tapestry.portlet.RenderService} to
- * render the (currently) active page. This reflects the Portlet API's very
- * clear division between processing an action and rendering a response; we need
- * to record into the implicit render URL the render service and the name of the
- * active page.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletResponseRenderer implements ResponseRenderer
-{
-    private PortletRequest _request;
-
-    private ActionResponse _response;
-
-    public void renderResponse(IRequestCycle cycle)
-    {
-        String pageName = cycle.getPage().getPageName();
-        
-        _response.setRenderParameter(ServiceConstants.SERVICE, PortletConstants.RENDER_SERVICE);
-        _response.setRenderParameter(ServiceConstants.PAGE, pageName);
-        _response.setRenderParameter(PortletConstants.PORTLET_MODE, _request.getPortletMode().toString());
-        _response.setRenderParameter(PortletConstants.WINDOW_STATE, _request.getWindowState().toString());
-    }
-
-    public void setResponse(ActionResponse response)
-    {
-        _response = response;
-    }
-
-    public void setRequest(PortletRequest request)
-    {
-        _request = request;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletSessionDescribableStrategy.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletSessionDescribableStrategy.java
deleted file mode 100644
index a7ebf0d..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletSessionDescribableStrategy.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.util.Date;
-import java.util.Iterator;
-
-import javax.portlet.PortletSession;
-
-import org.apache.tapestry.describe.DescribableStrategy;
-import org.apache.tapestry.describe.DescriptionReceiver;
-import org.apache.tapestry.web.WebUtils;
-
-/**
- * Describes {@link javax.portlet.PortletSession}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletSessionDescribableStrategy implements DescribableStrategy
-{
-
-    public void describeObject(Object object, DescriptionReceiver receiver)
-    {
-        PortletSession session = (PortletSession) object;
-
-        receiver.title("PortletSession");
-
-        receiver.property("creationTime", new Date(session.getCreationTime()));
-        receiver.property("id", session.getId());
-        receiver.property("lastAccessedTime", new Date(session
-                .getLastAccessedTime()));
-        receiver.property("maxInactiveInterval", session
-                .getMaxInactiveInterval());
-        receiver.property("new", session.isNew());
-
-        receiver.section("Attributes");
-        Iterator i = WebUtils.toSortedList(session.getAttributeNames())
-                .iterator();
-        while(i.hasNext())
-        {
-            String key = (String) i.next();
-            receiver.property(key, session.getAttribute(key));
-        }
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletStaleLinkExceptionPresenter.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletStaleLinkExceptionPresenter.java
deleted file mode 100644
index 0879b1e..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletStaleLinkExceptionPresenter.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleLinkException;
-import org.apache.tapestry.error.StaleLinkExceptionPresenter;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * Implementation of {@link org.apache.tapestry.error.StaleLinkExceptionPresenter} for Portlets.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletStaleLinkExceptionPresenter implements StaleLinkExceptionPresenter
-{
-    private PortletRequestGlobals _globals;
-
-    public void presentStaleLinkException(IRequestCycle cycle, StaleLinkException cause)
-            throws IOException
-    {
-        ActionRequest request = _globals.getActionRequest();
-
-        request.getPortletSession(true).setAttribute(
-                PortletConstants.PORTLET_EXCEPTION_MARKUP_ATTRIBUTE,
-                cause.getMessage());
-
-        ActionResponse response = _globals.getActionResponse();
-
-        response.setRenderParameter(ServiceConstants.SERVICE, PortletConstants.EXCEPTION_SERVICE);
-    }
-
-    public void setGlobals(PortletRequestGlobals globals)
-    {
-        _globals = globals;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletStaleSessionExceptionPresenter.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletStaleSessionExceptionPresenter.java
deleted file mode 100644
index b094453..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletStaleSessionExceptionPresenter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleSessionException;
-import org.apache.tapestry.error.StaleSessionExceptionPresenter;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletStaleSessionExceptionPresenter implements StaleSessionExceptionPresenter
-{
-    private PortletRequestGlobals _globals;
-
-    public void presentStaleSessionException(IRequestCycle cycle, StaleSessionException cause)
-    {
-        String markup = PortletMessages.staleSession();
-
-        ActionRequest request = _globals.getActionRequest();
-
-        request.getPortletSession(true).setAttribute(
-                PortletConstants.PORTLET_EXCEPTION_MARKUP_ATTRIBUTE,
-                markup);
-
-        ActionResponse response = _globals.getActionResponse();
-
-        response.setRenderParameter(ServiceConstants.SERVICE, PortletConstants.EXCEPTION_SERVICE);
-    }
-
-    public void setGlobals(PortletRequestGlobals globals)
-    {
-        _globals = globals;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletStrings.properties b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletStrings.properties
deleted file mode 100644
index e218706..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletStrings.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-unsupported-method=Method {0}() is not supported for portlet requests.
-error-getting-resource=Error getting portlet context resource ''{0}'': {1}
-error-processing-action=Error processing action request: {0}
-error-processing-render=Error processing render request: {0}
-error-reporting-exception=Error producing exception report: {0}
-stale-session=Your server session has expired.
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebActivator.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebActivator.java
deleted file mode 100644
index 1f47883..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebActivator.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.util.List;
-
-import javax.portlet.PortletConfig;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.describe.DescriptionReceiver;
-import org.apache.tapestry.web.WebActivator;
-import org.apache.tapestry.web.WebUtils;
-
-/**
- * Adapts a {@link javax.portlet.PortletConfig}&nbsp; as
- * {@link org.apache.tapestry.web.WebActivator}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletWebActivator implements WebActivator
-{
-
-    private final PortletConfig _config;
-
-    public PortletWebActivator(PortletConfig config)
-    {
-        Defense.notNull(config, "config");
-
-        _config = config;
-    }
-
-    public String getActivatorName()
-    {
-        return _config.getPortletName();
-    }
-
-    public List getInitParameterNames()
-    {
-        return WebUtils.toSortedList(_config.getInitParameterNames());
-    }
-
-    public String getInitParameterValue(String name)
-    {
-        return _config.getInitParameter(name);
-    }
-
-    public void describeTo(DescriptionReceiver receiver)
-    {
-        receiver.describeAlternate(_config);
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebContext.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebContext.java
deleted file mode 100644
index f267456..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebContext.java
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-import java.util.Set;
-
-import javax.portlet.PortletContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.describe.DescriptionReceiver;
-import org.apache.tapestry.web.WebContext;
-import org.apache.tapestry.web.WebUtils;
-
-/**
- * Adapts {@link javax.portlet.PortletContext}as
- * {@link org.apache.tapestry.web.WebContext}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletWebContext implements WebContext
-{
-
-    private static final Log LOG = LogFactory.getLog(PortletWebContext.class);
-
-    private final PortletContext _portletContext;
-
-    public PortletWebContext(PortletContext portletContext)
-    {
-        Defense.notNull(portletContext, "portletContext");
-
-        _portletContext = portletContext;
-    }
-
-    public URL getResource(String path)
-    {
-        try
-        {
-            return _portletContext.getResource(path);
-        }
-        catch (MalformedURLException ex)
-        {
-            LOG.error(PortletMessages.errorGettingResource(path, ex), ex);
-
-            return null;
-        }
-    }
-
-    public List getAttributeNames()
-    {
-        return WebUtils.toSortedList(_portletContext.getAttributeNames());
-    }
-
-    public Object getAttribute(String name)
-    {
-        return _portletContext.getAttribute(name);
-    }
-
-    public void setAttribute(String name, Object attribute)
-    {
-        if (attribute == null)
-            _portletContext.removeAttribute(name);
-        else _portletContext.setAttribute(name, attribute);
-    }
-
-    public List getInitParameterNames()
-    {
-        return WebUtils.toSortedList(_portletContext.getInitParameterNames());
-    }
-
-    public String getInitParameterValue(String name)
-    {
-        return _portletContext.getInitParameter(name);
-    }
-
-    public String getMimeType(String resourcePath)
-    {
-        return _portletContext.getMimeType(resourcePath);
-    }
-
-    public void describeTo(DescriptionReceiver receiver)
-    {
-        receiver.describeAlternate(_portletContext);
-    }
-
-    public String getRealPath(String path)
-    {
-        return _portletContext.getRealPath(path);
-    }
-
-    public InputStream getResourceAsStream(String path)
-    {
-        return _portletContext.getResourceAsStream(path);
-    }
-
-    public Set getResourcePaths(String path)
-    {
-        return _portletContext.getResourcePaths(path);
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebContextInitializer.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebContextInitializer.java
deleted file mode 100644
index f8add0f..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebContextInitializer.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import javax.portlet.PortletConfig;
-
-import org.apache.tapestry.services.ApplicationGlobals;
-import org.apache.tapestry.web.WebActivator;
-import org.apache.tapestry.web.WebContext;
-
-/**
- * Creates the Portlet {@link org.apache.tapestry.web.WebActivator}&nbsp;and
- * {@link org.apache.tapestry.web.WebContext}, and stores them into
- * {@link org.apache.tapestry.services.ApplicationGlobals}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletWebContextInitializer implements
-        PortletApplicationInitializer
-{
-
-    private ApplicationGlobals _applicationGlobals;
-
-    public void initialize(PortletConfig portletConfig)
-    {
-        WebActivator activator = new PortletWebActivator(portletConfig);
-        WebContext context = new PortletWebContext(portletConfig
-                .getPortletContext());
-
-        _applicationGlobals.storeActivator(activator);
-        _applicationGlobals.storeWebContext(context);
-    }
-
-    public void setApplicationGlobals(ApplicationGlobals applicationGlobals)
-    {
-        _applicationGlobals = applicationGlobals;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebRequest.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebRequest.java
deleted file mode 100644
index 75caa66..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebRequest.java
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.describe.DescriptionReceiver;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-import org.apache.tapestry.web.WebUtils;
-
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletSession;
-import java.security.Principal;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Implementation of {@link org.apache.tapestry.web.WebRequest} that adapts a
- * {@link PortletRequest} .
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletWebRequest implements WebRequest
-{
-
-    private final PortletRequest _portletRequest;
-
-    private WebSession _webSession;
-
-    public PortletWebRequest(PortletRequest portletRequest)
-    {
-        Defense.notNull(portletRequest, "portletRequest");
-
-        _portletRequest = portletRequest;
-    }
-
-    public List getParameterNames()
-    {
-        return WebUtils.toSortedList(_portletRequest.getParameterNames());
-    }
-
-    public String getParameterValue(String parameterName)
-    {
-        return _portletRequest.getParameter(parameterName);
-    }
-
-    public String[] getParameterValues(String parameterName)
-    {
-        return _portletRequest.getParameterValues(parameterName);
-    }
-
-    public String getContextPath()
-    {
-        return _portletRequest.getContextPath();
-    }
-
-    public WebSession getSession(boolean create)
-    {
-        if (_webSession != null) return _webSession;
-
-        PortletSession session = _portletRequest.getPortletSession(create);
-
-        if (session != null) _webSession = new PortletWebSession(session);
-
-        return _webSession;
-    }
-
-    public String getScheme()
-    {
-        return _portletRequest.getScheme();
-    }
-
-    public String getServerName()
-    {
-        return _portletRequest.getServerName();
-    }
-
-    public int getServerPort()
-    {
-        return _portletRequest.getServerPort();
-    }
-
-    /**
-     * Returns "&lt;PortletRequest&gt;", because portlets don't have a notion of
-     * request URI.
-     */
-
-    public String getRequestURI()
-    {
-        return "<PortletRequest>";
-    }
-
-    public void forward(String URL)
-    {
-        unsupported("forward");
-    }
-
-    public String getActivationPath()
-    {
-        return "";
-    }
-
-    /**
-     * Returns null, always.
-     */
-    public String getPathInfo()
-    {
-        return null;
-    }
-
-    public List getAttributeNames()
-    {
-        return WebUtils.toSortedList(_portletRequest.getAttributeNames());
-    }
-
-    public Object getAttribute(String name)
-    {
-        return _portletRequest.getAttribute(name);
-    }
-
-    public void setAttribute(String name, Object attribute)
-    {
-        if (attribute == null)
-            _portletRequest.removeAttribute(name);
-        else
-            _portletRequest.setAttribute(name, attribute);
-    }
-
-    protected final void unsupported(String methodName)
-    {
-        throw new UnsupportedOperationException(PortletMessages.unsupportedMethod(methodName));
-    }
-
-    public void describeTo(DescriptionReceiver receiver)
-    {
-        receiver.describeAlternate(_portletRequest);
-    }
-
-    public Locale getLocale()
-    {
-        return _portletRequest.getLocale();
-    }
-
-    public String getHeader(String name)
-    {
-        unsupported("getHeader");
-
-        return null;
-    }
-
-    public long getDateHeader(String name)
-    {
-        unsupported("getDateHeader");
-
-        return -1;
-    }
-
-    public int getIntHeader(String name)
-    {
-        unsupported("getIntHeader");
-
-        return -1;
-    }
-
-    public String getRemoteUser()
-    {
-        return _portletRequest.getRemoteUser();
-    }
-
-    public Principal getUserPrincipal()
-    {
-        return _portletRequest.getUserPrincipal();
-    }
-
-    public boolean isUserInRole(String role)
-    {
-        return _portletRequest.isUserInRole(role);
-    }
-    
-    public boolean isSecure()
-    {
-        return _portletRequest.isSecure();
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebResponse.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebResponse.java
deleted file mode 100644
index a9995f4..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebResponse.java
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-
-import javax.portlet.PortletResponse;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.web.WebResponse;
-
-/**
- * Adapts {@link javax.portlet.PortletResponse} as
- * {@link org.apache.tapestry.web.WebResponse}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletWebResponse implements WebResponse
-{
-
-    private final PortletResponse _portletResponse;
-
-    public PortletWebResponse(PortletResponse portletResponse)
-    {
-        Defense.notNull(portletResponse, "portletResponse");
-
-        _portletResponse = portletResponse;
-    }
-
-    public OutputStream getOutputStream(ContentType contentType)
-        throws IOException
-    {
-        unsupported("getOutputStream");
-
-        return null;
-    }
-
-    public PrintWriter getPrintWriter(ContentType contentType)
-        throws IOException
-    {
-        unsupported("getPrintWriter");
-
-        return null;
-    }
-
-    public String encodeURL(String url)
-    {
-        return _portletResponse.encodeURL(url);
-    }
-
-    /** Unsupported. */
-    public void reset()
-    {
-        unsupported("reset");
-    }
-
-    /** Unsupported. */
-    public void setContentLength(int contentLength)
-    {
-        unsupported("setContentLength");
-    }
-
-    /**
-     * Returns the empty string. The {@link RenderWebResponse}&nbsp;subclass
-     * actually provides a real value here.
-     */
-    public String getNamespace()
-    {
-        return "";
-    }
-
-    protected final void unsupported(String methodName)
-    {
-        throw new UnsupportedOperationException(PortletMessages
-                .unsupportedMethod(methodName));
-    }
-
-    /** Unsupported. */
-    public void setDateHeader(String string, long date)
-    {
-        unsupported("setDateHeader");
-    }
-
-    /** Unsupported. */
-    public void setStatus(int status)
-    {
-        unsupported("setStatus");
-    }
-
-    /** Unsupported. */
-    public void setHeader(String name, String value)
-    {
-        unsupported("setHeader");
-    }
-
-    /** Unsupported. */
-    public void setIntHeader(String name, int value)
-    {
-        unsupported("setIntHeader");
-    }
-
-    /** Unsupported. */
-    public void sendError(int statusCode, String message)
-        throws IOException
-    {
-        unsupported("sendError");
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebSession.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebSession.java
deleted file mode 100644
index e8104c0..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletWebSession.java
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.util.List;
-
-import javax.portlet.PortletSession;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.describe.DescriptionReceiver;
-import org.apache.tapestry.web.WebSession;
-import org.apache.tapestry.web.WebUtils;
-
-/**
- * Adapts a {@link javax.portlet.PortletSession}as a
- * {@link org.apache.tapestry.web.WebSession}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class PortletWebSession implements WebSession
-{
-
-    private final PortletSession _portletSession;
-
-    public PortletWebSession(final PortletSession portletSession)
-    {
-        Defense.notNull(portletSession, "portletSession");
-
-        _portletSession = portletSession;
-    }
-
-    public void describeTo(DescriptionReceiver receiver)
-    {
-        receiver.describeAlternate(_portletSession);
-    }
-
-    public String getId()
-    {
-        return _portletSession.getId();
-    }
-
-    public boolean isNew()
-    {
-        return _portletSession.isNew();
-    }
-
-    public List getAttributeNames()
-    {
-        return WebUtils.toSortedList(_portletSession.getAttributeNames());
-    }
-
-    public Object getAttribute(String name)
-    {
-        return _portletSession.getAttribute(name);
-    }
-
-    public void setAttribute(String name, Object attribute)
-    {
-        _portletSession.setAttribute(name, attribute);
-    }
-
-    public void invalidate()
-    {
-        _portletSession.invalidate();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public long getCreationTime()
-    {
-        return _portletSession.getCreationTime();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public long getLastAccessedTime()
-    {
-        return _portletSession.getLastAccessedTime();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public int getMaxInactiveInterval()
-    {
-        return _portletSession.getMaxInactiveInterval();
-    }
-
-    /** 
-     * {@inheritDoc}
-     */
-    public void setMaxInactiveInterval(int interval)
-    {
-        _portletSession.setMaxInactiveInterval(interval);
-    }
-    
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderRequestServicer.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderRequestServicer.java
deleted file mode 100644
index c52c0ad..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderRequestServicer.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-
-import javax.portlet.PortletException;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-/**
- * Used to define the commands in the
- * <code>tapestry.portlet.RenderRequestServicerPipeline</code> configuration.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public interface RenderRequestServicer
-{
-
-    void service(RenderRequest request, RenderResponse response)
-        throws IOException, PortletException;
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderRequestServicerFilter.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderRequestServicerFilter.java
deleted file mode 100644
index 7e32943..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderRequestServicerFilter.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-
-import javax.portlet.PortletException;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-/**
- * Filter interface used for the commands in the
- * <code>tapestry.portlet.RenderRequestServicerPipeline</code> configuration.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.portlet.RenderRequestServicer
- */
-public interface RenderRequestServicerFilter
-{
-
-    void service(RenderRequest request, RenderResponse response,
-            RenderRequestServicer servicer)
-        throws IOException, PortletException;
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderRequestServicerToWebRequestServicerBridge.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderRequestServicerToWebRequestServicerBridge.java
deleted file mode 100644
index 9560701..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderRequestServicerToWebRequestServicerBridge.java
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-
-import javax.portlet.PortletException;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-import org.apache.tapestry.services.WebRequestServicer;
-
-/**
- * Bridges from the <code>tapestry.portlet.RenderRequestServicerPipeline</code>
- * to the standard <code>tapestry.request.WebRequestServicerPipeline</code>.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class RenderRequestServicerToWebRequestServicerBridge implements
-        RenderRequestServicer
-{
-
-    private PortletRequestGlobals _portletRequestGlobals;
-
-    private WebRequestServicer _webRequestServicer;
-
-    public void service(RenderRequest request, RenderResponse response)
-        throws IOException, PortletException
-    {
-        _portletRequestGlobals.store(request, response);
-
-        PortletWebRequest webRequest = new PortletWebRequest(request);
-        PortletWebResponse webResponse = new RenderWebResponse(response);
-
-        try
-        {
-            _webRequestServicer.service(webRequest, webResponse);
-        }
-        catch (RuntimeException ex)
-        {
-            throw new PortletException(ex);
-        }
-    }
-
-    public void setPortletRequestGlobals(
-            PortletRequestGlobals portletRequestGlobals)
-    {
-        _portletRequestGlobals = portletRequestGlobals;
-    }
-
-    public void setWebRequestServicer(WebRequestServicer webRequestServicer)
-    {
-        _webRequestServicer = webRequestServicer;
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderService.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderService.java
deleted file mode 100644
index 3b5c3cc..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderService.java
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-
-import javax.portlet.PortletRequest;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.services.ServiceConstants;
-
-/**
- * Responsible for rendering out a page; a Portlet render URL is built during
- * action processing that stores the active page; this is the page that will be
- * rendered. The render service is (typically) the only service that operates
- * during a portlet RenderRequest. All other services will be an ActionRequest
- * that (via {@link org.apache.tapestry.portlet.PortletResponseRenderer},
- * writes query parameters to activate this service during the render request.
- * <p>
- * Problematic is is anything related to the portlet mode or window state. As
- * per the Portlet spec, when the user clicks the "help" or "edit" buttons (or
- * the minimize, maximize, etc.), this causes a new RenderRequest, but
- * explicitly keeps the render parameters set by the most recent ActionRequest.
- * But what Tapestry needs is to detect that the mode or state has changed and
- * select a different page to render the response. So we store the mode and
- * state in effect when the ActionRequest executed as two more query parameters,
- * and detect changes to mode and state that way. If there is a change, then we
- * ignore the page query parameter and use the {@link PortletPageResolver} to
- * figure out the correct page to display instead.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- * @see org.apache.tapestry.services.impl.ResponseRendererImpl
- */
-public class RenderService implements IEngineService
-{
-
-    private PortletRequest _request;
-
-    private PortletRenderer _portletRenderer;
-
-    private PortletPageResolver _pageResolver;
-
-    public ILink getLink(boolean post, Object parameter)
-    {
-        throw new UnsupportedOperationException(PortletMessages
-                .unsupportedMethod("getLink"));
-    }
-
-    public void service(IRequestCycle cycle)
-        throws IOException
-    {
-        String pageName = getPageNameToRender(cycle);
-
-        _portletRenderer.renderPage(cycle, pageName);
-    }
-
-    private String getPageNameToRender(IRequestCycle cycle)
-    {
-        if (isStateChange(cycle))
-            return _pageResolver.getPageNameForRequest(cycle);
-
-        return cycle.getParameter(ServiceConstants.PAGE);
-    }
-
-    /**
-     * Returns true if the portlet mode or the window state has changed since.
-     * The values stored previously (during an action request) are compared to
-     * the current values.
-     */
-
-    boolean isStateChange(IRequestCycle cycle)
-    {
-        String expectedPortletMode = cycle
-                .getParameter(PortletConstants.PORTLET_MODE);
-        String expectedWindowState = cycle
-                .getParameter(PortletConstants.WINDOW_STATE);
-
-        return !(_request.getPortletMode().toString().equals(
-                expectedPortletMode) && _request.getWindowState().toString()
-                .equals(expectedWindowState));
-
-    }
-
-    public String getName()
-    {
-        return PortletConstants.RENDER_SERVICE;
-    }
-
-    public void setPortletRenderer(PortletRenderer portletRenderer)
-    {
-        _portletRenderer = portletRenderer;
-    }
-
-    public void setRequest(PortletRequest request)
-    {
-        _request = request;
-    }
-
-    public void setPageResolver(PortletPageResolver pageResolver)
-    {
-        _pageResolver = pageResolver;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderWebResponse.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderWebResponse.java
deleted file mode 100644
index 893ce0d..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/RenderWebResponse.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.portlet.RenderResponse;
-
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.util.ContentType;
-
-/**
- * Wrapper around {@link javax.portlet.RenderResponse}&nbsp;to adapt it as
- * {@link org.apache.tapestry.portlet.PortletWebResponse}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class RenderWebResponse extends PortletWebResponse
-{
-
-    private final RenderResponse _renderResponse;
-
-    public RenderWebResponse(RenderResponse renderResponse)
-    {
-        super(renderResponse);
-
-        _renderResponse = renderResponse;
-    }
-
-    public void reset()
-    {
-        _renderResponse.reset();
-    }
-
-    public PrintWriter getPrintWriter(ContentType contentType)
-        throws IOException
-    {
-        Defense.notNull(contentType, "contentType");
-
-        _renderResponse.setContentType(contentType.toString());
-
-        return _renderResponse.getWriter();
-    }
-
-    public String getNamespace()
-    {
-        return _renderResponse.getNamespace();
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/SetupPortletApplicationGlobals.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/SetupPortletApplicationGlobals.java
deleted file mode 100644
index 9a6a1c0..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/SetupPortletApplicationGlobals.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import javax.portlet.PortletConfig;
-
-import org.apache.tapestry.services.impl.AbstractSetupApplicationGlobals;
-
-/**
- * Alternative to
- * {@link org.apache.tapestry.services.impl.SetupServletApplicationGlobals},
- * but for Portlets and the
- * <code>tapestry.portlet.services.FactoryServices</code> configuration point.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class SetupPortletApplicationGlobals extends
-        AbstractSetupApplicationGlobals implements
-        PortletApplicationInitializer
-{
-
-    public void initialize(PortletConfig portletConfig)
-    {
-        initialize("portlet");
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/BindingsMessages.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/BindingsMessages.java
deleted file mode 100644
index f07a34f..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/BindingsMessages.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet.bindings;
-
-import org.apache.hivemind.impl.MessageFormatter;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-final class BindingsMessages
-{
-    private static final MessageFormatter _formatter = new MessageFormatter(BindingsMessages.class);
-
-    /* defeat instantiation */
-    private BindingsMessages() { }
-    
-    static String noUserInfo()
-    {
-        return _formatter.getMessage("no-user-info");
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/BindingsStrings.properties b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/BindingsStrings.properties
deleted file mode 100644
index cf46769..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/BindingsStrings.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-no-user-info=No user attributes are available; this may indicate an attempt to access user attributes prior to the user logging in to the Portal.
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/UserAttributeBinding.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/UserAttributeBinding.java
deleted file mode 100644
index 3b4cf1b..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/UserAttributeBinding.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet.bindings;
-
-import java.util.Map;
-
-import javax.portlet.PortletRequest;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.binding.AbstractBinding;
-import org.apache.tapestry.coerce.ValueConverter;
-
-/**
- * Allows access to a Portlet user attrbute.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class UserAttributeBinding extends AbstractBinding
-{
-    private final PortletRequest _request;
-
-    private final String _attributeName;
-
-    public UserAttributeBinding(String description, ValueConverter valueConverter,
-            Location location, PortletRequest request, String attributeName)
-    {
-        super(description, valueConverter, location);
-
-        Defense.notNull(request, "request");
-        Defense.notNull(attributeName, "attributeName");
-
-        _request = request;
-        _attributeName = attributeName;
-    }
-
-    public boolean isInvariant()
-    {
-        // These can always be changed.
-        return false;
-    }
-
-    private Map getUserInfo()
-    {
-        Map result = (Map) _request.getAttribute(PortletRequest.USER_INFO);
-
-        if (result == null)
-            throw new ApplicationRuntimeException(BindingsMessages.noUserInfo(), getLocation(),
-                    null);
-
-        return result;
-    }
-
-    public Object getObject()
-    {
-        return getUserInfo().get(_attributeName);
-    }
-
-    public void setObject(Object value)
-    {
-        String asString = (String) getValueConverter().coerceValue(value, String.class);
-
-        getUserInfo().put(_attributeName, asString);
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/UserAttributeBindingFactory.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/UserAttributeBindingFactory.java
deleted file mode 100644
index 7fd6819..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/UserAttributeBindingFactory.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet.bindings;
-
-import javax.portlet.PortletRequest;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.binding.AbstractBindingFactory;
-
-/**
- * Factory used to create {@link org.apache.tapestry.portlet.bindings.UserAttributeBinding}s.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public class UserAttributeBindingFactory extends AbstractBindingFactory
-{
-    private PortletRequest _request;
-
-    /**
-     * Interprets the path as the Portlet user attribute name.
-     */
-
-    public IBinding createBinding(IComponent root, String bindingDescription, String expression,
-            Location location)
-    {
-        return new UserAttributeBinding(bindingDescription, getValueConverter(), location,
-                _request, expression);
-    }
-
-    public void setRequest(PortletRequest request)
-    {
-        _request = request;
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/package.html b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/package.html
deleted file mode 100644
index 69f6ae0..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/bindings/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Portlet related hivemind bindings.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/ActionRequestWrapper.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/ActionRequestWrapper.java
deleted file mode 100644
index a937bd1..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/ActionRequestWrapper.java
+++ /dev/null
@@ -1,253 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.portlet.multipart;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.security.Principal;
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.PortalContext;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletPreferences;
-import javax.portlet.PortletSession;
-import javax.portlet.WindowState;
-
-/**
- * @author Raphael Jean
- */
-public class ActionRequestWrapper extends Object implements ActionRequest
-{
-
-    private ActionRequest wrapped;
-
-    public ActionRequestWrapper(ActionRequest request)
-    {
-        wrapped = request;
-    }
-
-    public InputStream getPortletInputStream()
-        throws IOException
-    {
-        return wrapped.getPortletInputStream();
-    }
-
-    public void setCharacterEncoding(String arg0)
-        throws UnsupportedEncodingException
-    {
-        wrapped.setCharacterEncoding(arg0);
-    }
-
-    public BufferedReader getReader()
-        throws IOException
-    {
-        return wrapped.getReader();
-    }
-
-    public String getCharacterEncoding()
-    {
-        return wrapped.getCharacterEncoding();
-    }
-
-    public String getContentType()
-    {
-        return wrapped.getContentType();
-    }
-
-    public int getContentLength()
-    {
-        return wrapped.getContentLength();
-    }
-
-    public boolean isWindowStateAllowed(WindowState arg0)
-    {
-        return wrapped.isWindowStateAllowed(arg0);
-    }
-
-    public boolean isPortletModeAllowed(PortletMode arg0)
-    {
-        return wrapped.isPortletModeAllowed(arg0);
-    }
-
-    public PortletMode getPortletMode()
-    {
-        return wrapped.getPortletMode();
-    }
-
-    public WindowState getWindowState()
-    {
-        return wrapped.getWindowState();
-    }
-
-    public PortletPreferences getPreferences()
-    {
-        return wrapped.getPreferences();
-    }
-
-    public PortletSession getPortletSession()
-    {
-        return wrapped.getPortletSession();
-    }
-
-    public PortletSession getPortletSession(boolean arg0)
-    {
-        return wrapped.getPortletSession(arg0);
-    }
-
-    public String getProperty(String arg0)
-    {
-        return wrapped.getProperty(arg0);
-    }
-
-    public Enumeration getProperties(String arg0)
-    {
-        return wrapped.getProperties(arg0);
-    }
-
-    public Enumeration getPropertyNames()
-    {
-        return wrapped.getPropertyNames();
-    }
-
-    public PortalContext getPortalContext()
-    {
-        return wrapped.getPortalContext();
-    }
-
-    public String getAuthType()
-    {
-        return wrapped.getAuthType();
-    }
-
-    public String getContextPath()
-    {
-        return wrapped.getContextPath();
-    }
-
-    public String getRemoteUser()
-    {
-        return wrapped.getRemoteUser();
-    }
-
-    public Principal getUserPrincipal()
-    {
-        return wrapped.getUserPrincipal();
-    }
-
-    public boolean isUserInRole(String arg0)
-    {
-        return wrapped.isUserInRole(arg0);
-    }
-
-    public Object getAttribute(String arg0)
-    {
-        return wrapped.getAttribute(arg0);
-    }
-
-    public Enumeration getAttributeNames()
-    {
-        return wrapped.getAttributeNames();
-    }
-
-    public String getParameter(String arg0)
-    {
-        return wrapped.getParameter(arg0);
-    }
-
-    public Enumeration getParameterNames()
-    {
-        return wrapped.getParameterNames();
-    }
-
-    public String[] getParameterValues(String arg0)
-    {
-        return wrapped.getParameterValues(arg0);
-    }
-
-    public Map getParameterMap()
-    {
-        return wrapped.getParameterMap();
-    }
-
-    public boolean isSecure()
-    {
-        return wrapped.isSecure();
-    }
-
-    public void setAttribute(String arg0, Object arg1)
-    {
-        wrapped.setAttribute(arg0, arg1);
-    }
-
-    public void removeAttribute(String arg0)
-    {
-        wrapped.removeAttribute(arg0);
-    }
-
-    public String getRequestedSessionId()
-    {
-        return wrapped.getRequestedSessionId();
-    }
-
-    public boolean isRequestedSessionIdValid()
-    {
-        return wrapped.isRequestedSessionIdValid();
-    }
-
-    public String getResponseContentType()
-    {
-        return wrapped.getResponseContentType();
-    }
-
-    public Enumeration getResponseContentTypes()
-    {
-        return wrapped.getResponseContentTypes();
-    }
-
-    public Locale getLocale()
-    {
-        return wrapped.getLocale();
-    }
-
-    public Enumeration getLocales()
-    {
-        return wrapped.getLocales();
-    }
-
-    public String getScheme()
-    {
-        return wrapped.getScheme();
-    }
-
-    public String getServerName()
-    {
-        return wrapped.getServerName();
-    }
-
-    public int getServerPort()
-    {
-        return wrapped.getServerPort();
-    }
-
-    protected ActionRequest getRequest()
-    {
-        return wrapped;
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/PortletMultipartDecoder.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/PortletMultipartDecoder.java
deleted file mode 100644
index 50b4901..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/PortletMultipartDecoder.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.portlet.multipart;
-
-import javax.portlet.ActionRequest;
-
-import org.apache.tapestry.multipart.MultipartDecoder;
-
-/**
- * @author Raphael Jean
- *
- */
-public interface PortletMultipartDecoder extends MultipartDecoder {
-    /**
-     * Decodes the request, returning a new {@link javax.portlet.ActionRequest}
-     * implementation that will allow access to the form fields submitted in the request (but omits
-     * uploaded files).
-     */
-
-    ActionRequest decode(ActionRequest request);
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/PortletMultipartDecoderFilter.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/PortletMultipartDecoderFilter.java
deleted file mode 100644
index c1b4784..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/PortletMultipartDecoderFilter.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.portlet.multipart;
-
-import java.io.IOException;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletException;
-
-import org.apache.tapestry.portlet.ActionRequestServicer;
-import org.apache.tapestry.portlet.ActionRequestServicerFilter;
-
-/**
- * @author Raphael Jean
- */
-public class PortletMultipartDecoderFilter implements
-        ActionRequestServicerFilter
-{
-
-    private PortletMultipartDecoder _decoder;
-
-    public void service(ActionRequest request, ActionResponse response,
-            ActionRequestServicer servicer)
-        throws IOException, PortletException
-    {
-        String contentType = request.getContentType();
-
-        // contentType is occasionally null in testing. The browser tacks on
-        // additional
-        // information onto the contentType to indicate where the boundaries are
-        // in
-        // the stream.
-
-        boolean encoded = contentType != null
-                && contentType.startsWith("multipart/form-data");
-
-        try
-        {
-            ActionRequest newRequest = encoded ? _decoder.decode(request)
-                    : request;
-
-            servicer.service(newRequest, response);
-        }
-        finally
-        {
-            if (encoded) _decoder.cleanup();
-        }
-    }
-
-    public void setDecoder(PortletMultipartDecoder decoder)
-    {
-        this._decoder = decoder;
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/PortletMultipartDecoderImpl.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/PortletMultipartDecoderImpl.java
deleted file mode 100644
index 58b0726..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/PortletMultipartDecoderImpl.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.portlet.multipart;
-
-import java.io.File;
-import java.util.List;
-import java.util.Map;
-
-import javax.portlet.ActionRequest;
-
-import org.apache.commons.fileupload.FileItemFactory;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.portlet.PortletFileUpload;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.multipart.AbstractMultipartDecoder;
-import org.apache.tapestry.multipart.MultipartMessages;
-
-/**
- * @author Raphael Jean
- */
-public class PortletMultipartDecoderImpl extends AbstractMultipartDecoder
-        implements PortletMultipartDecoder
-{
-
-    public ActionRequest decode(ActionRequest request)
-    {
-        _encoding = request.getCharacterEncoding();
-
-        PortletFileUpload upload = createFileUpload();
-
-        try
-        {
-            List fileItems = upload.parseRequest(request);
-
-            processFileItems(fileItems);
-        }
-        catch (FileUploadException ex)
-        {
-            throw new ApplicationRuntimeException(MultipartMessages
-                    .unableToDecode(ex), ex);
-        }
-
-        Map parameterMap = buildParameterMap();
-
-        return new UploadFormPortletParametersWrapper(request, parameterMap);
-    }
-
-    private PortletFileUpload createFileUpload()
-    {
-        FileItemFactory factory = new DiskFileItemFactory(_thresholdSize,
-                new File(_repositoryPath));
-        PortletFileUpload upload = new PortletFileUpload(factory);
-
-        if (_encoding != null) upload.setHeaderEncoding(_encoding);
-
-        return upload;
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/UploadFormPortletParametersWrapper.java b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/UploadFormPortletParametersWrapper.java
deleted file mode 100644
index 96c85f6..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/UploadFormPortletParametersWrapper.java
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package org.apache.tapestry.portlet.multipart;
-
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Map;
-
-import javax.portlet.ActionRequest;
-
-import org.apache.hivemind.util.Defense;
-
-/**
- * @author Raphael Jean
- */
-public class UploadFormPortletParametersWrapper extends ActionRequestWrapper
-{
-
-    /**
-     * Map of {@link ValuePart}&nbsp;keyed on parameter name.
-     */
-    private Map _parameterMap;
-
-    public UploadFormPortletParametersWrapper(ActionRequest request,
-            Map parameterMap)
-    {
-        super(request);
-
-        Defense.notNull(parameterMap, "parameterMap");
-
-        _parameterMap = Collections.unmodifiableMap(parameterMap);
-    }
-
-    public String getParameter(String name)
-    {
-        String[] values = getParameterValues(name);
-
-        return (values == null || values.length == 0) ? null : values[0];
-    }
-
-    public Map getParameterMap()
-    {
-        return _parameterMap;
-    }
-
-    public Enumeration getParameterNames()
-    {
-        return Collections.enumeration(_parameterMap.keySet());
-    }
-
-    public String[] getParameterValues(String name)
-    {
-        return (String[]) _parameterMap.get(name);
-    }
-
-    public String toString()
-    {
-        return "<UploadFormPortletParametersWrapper for " + getRequest() + ">";
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/package.html b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/package.html
deleted file mode 100644
index 6fc4833..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/multipart/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Portlet uploads.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/package.html b/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/package.html
deleted file mode 100644
index 14d4960..0000000
--- a/tapestry/tapestry-portlet/src/java/org/apache/tapestry/portlet/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>
-Core portlet services.
-</p>
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/tapestry/tapestry-portlet/src/site/site.xml b/tapestry/tapestry-portlet/src/site/site.xml
deleted file mode 100644
index 3eb8b0f..0000000
--- a/tapestry/tapestry-portlet/src/site/site.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<project name="Tapestry">
-    <bannerLeft>
-        <name>Tapestry Web Application Framework</name>
-        <href>http://tapestry.apache.org/</href>
-        <src>images/tapestry_banner.gif</src>
-    </bannerLeft>
-    <bannerRight>
-        <name>Apache Software Foundation</name>
-        <href>http://www.apache.org</href>
-        <src>images/asf_logo_wide.gif</src>
-    </bannerRight>
-    
-    <skin>
-        <groupId>org.apache.tapestry</groupId>
-        <artifactId>maven-skin</artifactId>
-        <version>1.1</version>
-    </skin>
-    
-    <publishDate format="dd MMM yyyy" />
-    
-    <body>
-        <links>
-            <item name="Tapestry" href="http://tapestry.apache.org/" />
-            <item name="Hivemind" href="http://jakarta.apache.org/hivemind/" />
-            <item name="Apache" href="http://www.apache.org/" />
-        </links>
-        
-        <head>
-            <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
-            <script type="text/javascript">_uacct = "UA-400821-1"; urchinTracker();</script>
-            <link rel="shortcut icon" href="http://tapestry.apache.org/tapestry4.1/favicon.ico" />
-        </head>
-        
-        <menu ref="parent" />
-        
-        <menu name="Documentation" >
-            
-            <item name="Overview" href="/index.html" />
-            <item name="Configuration" href="/configuration.html" />
-            <item name="Coding Issues" href="/coding-issues.html" />
-            
-            <item name="Hivedoc" href="/hivedoc/index.html" />
-            
-        </menu>
-        
-        ${reports} 
-    </body>
-    
-</project>
diff --git a/tapestry/tapestry-portlet/src/site/xdoc/coding-issues.xml b/tapestry/tapestry-portlet/src/site/xdoc/coding-issues.xml
deleted file mode 100644
index 9213d38..0000000
--- a/tapestry/tapestry-portlet/src/site/xdoc/coding-issues.xml
+++ /dev/null
@@ -1,327 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Coding Issues</title>
-    </properties>
-    <body>
-
-        <section name="Coding Issues">
-
-            <subsection name="Loss of Transient State">
-
-
-                <p>
-                    For developers experienced at servlet Tapestry, this one issue takes quite some
-                    getting used to.
-                </p>
-
-                <p>
-                    In servlet Tapestry, a request comes in (such as a form submission). As part of
-                    processing the request, pages will be obtained from the page pool and will have
-                    persistent state rolled back. Other page and component properties will contain
-                    <em>transient</em>
-                    state; information that will be discarded at the end of the request ... but
-                    that's ok, because a response page will be rendered before that information is
-                    lost.
-                </p>
-
-                <p>
-                    In portlet Tapestry, much is the same,
-                    <em>except for transient state</em>
-                    . The Portlet API splits the scenario into two completely distrinct parts: the
-                    action request and the render request. These are two completely seperate
-                    requests, and all transient state will be lost between them. Further, the render
-                    request may occur many times. This is because a single portlet within a page
-                    <em>may</em>
-                    (depending on the Portlet container and configuration of the portlet) have to
-                    re-render itself due to an action request for some entirely different portlet.
-                </p>
-
-                <p>
-                    The solution is to define more properties as
-                    <em>persistent</em>
-                    . This is done using the &lt;property&gt; element of the page and component
-                    specifications, such as:
-                </p>
-
-                <source xml:space="preserve">
-  &lt;property name="itemId" persist="session"/&gt;
-</source>
-
-                <p>
-                    Commonly, the interface is used to obtain a database object, bootstrapping from
-                    an id stored as a persistent property:
-                </p>
-
-                <source xml:space="preserve">
-public abstract class MyPage
-  extends BasePage
-  implements PageBeginRenderListener
-{
-  /** Persistent */
-  public abstract long getItemId();
-  public abstract void setItemId(long itemId);
-  
-  /** Transient */
-  public abstract Item getItem();
-  public abstract void setItem(Item item);
-  
-  /** Injected */
-  public abstract ItemSource getItemSource();
-  
-  public void pageBeginRender(PageEvent event)
-  {
-    long itemId = getItemId();
-    
-    Item item = getItemSource().findItemById(itemId);
-    
-    setItem(item);
-  }
-}
-
-</source>
-
-                <p>
-                    One of the most common problems related to loss of transient state concerns
-                    <a href="../UsersGuide/validation.html">user input validation</a>
-                    . By
-                    <em>default</em>
-                    , validation data is stored transiently. The end result is that when a validated
-                    form is submitted with errors and re-rendered, the error messages and field
-                    decorations do not appear!
-                </p>
-
-                <p>
-                    A good technique for handling this properly is to make the validation delegate
-                    an
-                    <a href="../UsersGuide/state.html">application state object</a>
-                    that persists in the session, and then
-                    <em>inject</em>
-                    that ASO into each page that contains a form.
-                </p>
-
-                <p>
-                    Start by defining an ASO for the validation delegate. The goes into your
-                    application's hivemodule.xml module descriptor:
-                </p>
-
-                <source xml:space="preserve">
-&lt;contribution configuration-id="hivemind.state.ApplicationObjects"&gt;
-  &lt;state-object name="validation-delegate" scope="session"&gt;
-    &lt;create-instance class="org.apache.tapestry.valid.ValidationDelegate"/&gt;
-  &lt;/state-object&gt;  
-&lt;/contribution&gt;
-</source>
-
-                <p>
-                    Next, in each page that needs the validation delegate, inject it as a property.
-                    This is done in the page's specification:
-                </p>
-
-                <source xml:space="preserve">
-&lt;inject name="delegate" type="state" object="validation-delegate"/&gt;
-</source>
-
-                <p>When using a component, override the default validation delegate:</p>
-
-                <source xml:space="preserve">
-  &lt;component id="form" type="Form"&gt;
-    &lt;binding name="delegate" value="delegate"/&gt;
-    &lt;binding name="listener" value="doSubmit"/&gt;
-  &lt;/component&gt;
-</source>
-
-                <p>
-                    The delegate parameter's default binding prefix is "ognl", so
-                    <code>value="delegate"</code>
-                    refers to the delegate property of the page, a read-only property created by the
-                    &lt;inject&gt; element.
-                </p>
-
-                <p>
-                    And that's it ... the validation delegate will be created when first needed. A
-                    single instance will be shared by many pages. It will be necessary to invoke the
-                    clear() method on the validation delegate when switching pages (otherwise, you
-                    could see decorations one one page that are really caused by form input errors
-                    on some other page). This is an extra step to be done inside your listener
-                    methods.
-                </p>
-
-            </subsection>
-
-            <subsection name="Javascript Includes">
-                
-                <p>
-                    Beginning with Tapestry 4.1 > portlets must also now manage including the global Tapestry and Dojo 
-                    javascript packages that the framework depends on - something which is normally done for you by 
-                    using the <a href="../components/general/shell.html">Shell</a> component. 
-                </p>
-                
-                <p>Luckily this should be a fairly trivial task if you use the 
-                    <a href="../components/general/scriptincludes.html">ScriptIncludes</a> component which was created
-                    specifically for these scenerios. Simply dump it into your portlet pages somewhere and it will 
-                    properly include/configure the necessary javascript packages for you.</p>
-            </subsection>
-
-            <subsection name="Partial Pages">
-
-
-                <p>
-                    A fundamental part of developing Portlets (with our without Tapestry) is that
-                    each Portlet within a Portal Page produces just a portion of the HTML. This
-                    means you will not, and should not, use the or components.
-                </p>
-
-                <p>
-                    The latter seems problematic ... no component normally means no client-side
-                    JavaScript! Fortunately, your components can still create JavaScript, using
-                    Tapestry script templates, and the JavaScript will still be collected as if
-                    there was a component. You may also see the namespace, provided by the portlet
-                    container, integrated into the names of client-side variables and methods ...
-                    this prevents any name collisions when multiple Tapestry portlets exist on the
-                    same page.
-                </p>
-
-            </subsection>
-
-            <subsection name="Accessing the Portlet API">
-
-
-                <p>
-                    In very rare circumstances, you may need to directly access the PortletRequest
-                    object. For example, you may make part of your page conditional based on the
-                    current window mode.
-                </p>
-
-                <p>
-                    If you are just interseted in query parameters, you can access those via the
-                    object.
-                </p>
-
-                <p>
-                    Most other standard information can be injected as the infrastructure:request
-                    object. This object is API neutral (neither servlet nor portlet, but a kind of
-                    least-common-denominator abstraction). It can easily be injected into any page
-                    or component using the specification's &lt;inject&gt; element:
-                </p>
-
-                <source xml:space="preserve">
-  &lt;inject property="request" object="infrastructure:request"/&gt;
-</source>
-
-
-                <p>
-                    The type of object injected will be . There's also an infrastructure:response
-                    object that implements the interface.
-                </p>
-
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                        This may look odd; you are injecting something that looks like an
-                        application global. Don't worry ... what's actually injected is a proxy
-                        object that implements the interface, but ultimately delegates all of its
-                        behavior to a per-request (and therefore, per-thread) object. It just works.
-                    </p>
-                </span>
-
-                <p>
-                    Properties such as portletMode or windowState are
-                    <em>not</em>
-                    part of , you'll want to inject a portlet-specific object instead:
-                </p>
-
-                <table>
-                    <tr>
-                        <th>Object</th>
-                        <th>Interface</th>
-                    </tr>
-                    <tr>
-                        <td>service:tapestry.portlet.ActionResponse</td>
-                        <td>javax.portlet.ActionResponse</td>
-                    </tr>
-                    <tr>
-                        <td>service:tapestry.portlet.PortletRequest</td>
-                        <td>javax.portlet.PortletRequest</td>
-                    </tr>
-                    <tr>
-                        <td>service:tapestry.portlet.RenderResponse</td>
-                        <td>javax.portlet.RenderResponse</td>
-                    </tr>
-
-                </table>
-
-                <p>
-                    Care should be taken to only invoke methods on the ActionResponse and
-                    RenderResponse objects when in the correct phase.
-                </p>
-
-            </subsection>
-
-            <subsection name="User Attributes">
-
-
-                <p>
-                    Part of the &lt;portlet&gt; definition within the portlet.xml deployment
-                    descriptor is a definition of user attributes. User attributes are configuration
-                    data stored for each user (this is part of the infrastructure provided by the
-                    Portal: user authentication and attributes). User attribute names are strings,
-                    usually in the form of a dotted sequence of terms (such as "user.name.given").
-                    User attribute values are simple strings.
-                </p>
-
-                <p>
-                    User attributes are stored persistently in a database; values will be available
-                    in later sessions, not just later requests.
-                </p>
-
-                <p>A special binding prefix, "user:", is used to access user attributes.</p>
-
-                <p>So, a particular portlet may define an attribute:</p>
-
-                <source xml:space="preserve">
-  &lt;user-attribute&gt;
-    &lt;description&gt;User Given Name&lt;/description&gt;
-    &lt;name&gt;user.name.given&lt;/name&gt;
-  &lt;/user-attribute&gt;
-</source>
-
-                <p>Inside a page template, this value can be read and displayed:</p>
-
-                <source xml:space="preserve">
-  &lt;span jwcid="@Insert" value="user:user.name.given"&gt;User Name&lt;/span&gt;
-</source>
-
-                <p>
-                    These values can just as easily be used with form element components, such as ,
-                    to read
-                    <em>and update</em>
-                    attributes:
-                </p>
-
-                <source xml:space="preserve">
-  &lt;input jwcid="userName@ValidField" value="user:user.name.given" 
-    displayName="User Name" validator="string,required"/&gt;
-</source>
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-portlet/src/site/xdoc/configuration.xml b/tapestry/tapestry-portlet/src/site/xdoc/configuration.xml
deleted file mode 100644
index 20c7545..0000000
--- a/tapestry/tapestry-portlet/src/site/xdoc/configuration.xml
+++ /dev/null
@@ -1,304 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Configuration</title>
-    </properties>
-    <body>
-
-        <section name="Configuration">
-
-            <p>
-                Configuration for Tapestry portlet applications is quite similar to configuration of
-                Tapestry servlet applications. In both cases, the WEB-INF/lib folder of the web
-                application should include the Tapestry libraries and dependencies. For portlet
-                applications, WEB-INB/lib should also include the tapestry-portlet-
-                <em>x.y</em>
-                .jar library.
-            </p>
-
-            <subsection name="portlet.xml">
-
-
-                <p>
-                    The file WEB-INF/portlet.xml define the portlets packaged inside a web
-                    application. As with servlet Tapestry, we will use a framework-supplied Portlet
-                    class:
-                </p>
-
-                <source xml:space="preserve">
-&lt;portlet-app version="1.0"
-  xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-  xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"&gt;
-  &lt;portlet&gt;
-    &lt;description xml:lang="EN"&gt;&lt;/description&gt;
-    &lt;portlet-name&gt;myportlet&lt;/portlet-name&gt;
-    &lt;display-name xml:lang="EN"&gt;My Tapestry Portlet&lt;/display-name&gt;
-    &lt;portlet-class&gt;org.apache.tapestry.portlet.ApplicationPortlet&lt;/portlet-class&gt;
-    &lt;expiration-cache&gt;-1&lt;/expiration-cache&gt;
-    &lt;supports&gt;
-      &lt;mime-type&gt;text/html&lt;/mime-type&gt;
-      &lt;portlet-mode&gt;view&lt;/portlet-mode&gt;
-      &lt;portlet-mode&gt;help&lt;/portlet-mode&gt;
-      &lt;portlet-mode&gt;edit&lt;/portlet-mode&gt;
-    &lt;/supports&gt;
-    &lt;supported-locale&gt;en&lt;/supported-locale&gt;
-    &lt;portlet-info&gt;
-      &lt;title&gt;My Tapestry Portlet&lt;/title&gt;
-      &lt;short-title&gt;tapestry-portlet&lt;/short-title&gt;
-      &lt;keywords&gt;&lt;/keywords&gt;
-    &lt;/portlet-info&gt;
-  &lt;/portlet&gt;
-&lt;/portlet-app&gt;
-</source>
-
-
-
-                <p>
-                    The class
-                    <code>org.apache.tapestry.portlet.ApplicationPortlet</code>
-                    is always the class for Tapestry Portlets.
-                </p>
-
-                <p>
-                    Tapestry applications can support any reasonable &lt;mime-type&gt;, though the
-                    available components make HTML and WML the most likely candidates.
-                </p>
-
-                <p>
-                    Different portlet containers interpret the &lt;portlet-mode&gt; element
-                    differently. For example, assumes that every Portlet will support the "view"
-                    mode, and adding such an entry will result in a confusing duplication of the
-                    view icons on the Portlet's control tab. On the other hand, makes no
-                    assumptions, so you really should provide the "view" mode.
-                </p>
-
-                <p>
-                    Later, we'll see how the combination of mime-type and portlet mode is used to
-                    select a Tapestry page.
-                </p>
-
-                <p>
-                    Tapestry supports the other &lt;portlet&gt; elements, such as
-                    &lt;portlet-preferences&gt; and &lt;user-attribute&gt;.
-                </p>
-
-
-            </subsection>
-
-            <subsection name="hivemodule.xml">
-
-
-                <p>
-                    Each Tapestry portlet application within a web application will construct its
-                    <em>own</em>
-                    Registry on initialization. The Registry will reflect all the libraries on the
-                    portlet's classpath (that is, including the Tapestry and HiveMind JARs in
-                    WEB-INF/lib). In addition, two
-                    <em>optional</em>
-                    module descriptors will be parsed and used, if present:
-                </p>
-
-                <ul>
-                    <li>
-                        WEB-INF/
-                        <em>name</em>
-                        /hivemodule.xml
-                    </li>
-                    <li>WEB-INF/hivemodule.xml</li>
-                </ul>
-
-                <p>
-                    The
-                    <em>name</em>
-                    , in the above, is the portlet name, from the &lt;portlet-name&gt; element of
-                    the portlet.xml descriptor. This allows different Tapestry portlets, even within
-                    the same WAR, to precisely control their individual configuration.
-                </p>
-
-                <p>
-                    The two primary reasons for a Tapestry portlet application to have its own
-                    hivemodule.xml are:
-                </p>
-
-                <ul>
-                    <li>To control the mapping of requests to Tapestry pages</li>
-                    <li>To define portlet-specific services needed by the portlet application</li>
-                </ul>
-
-            </subsection>
-
-            <subsection name="web.xml">
-
-
-
-                <p>
-                    By specification, portlet applications are a specialized kind of web
-                    application; as such, they require a web.xml as well as a portlet.xml.
-                </p>
-
-                <p>
-                    For Tapestry, it is necessary to define a single Tapestry application servlet
-                    for each WAR.
-                </p>
-
-                <source xml:space="preserve">
-&lt;!DOCTYPE web-app
-  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-  "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;
-&lt;web-app&gt;
-  &lt;display-name&gt;app&lt;/display-name&gt;
-  &lt;servlet&gt;
-    &lt;servlet-name&gt;ApplicationServlet&lt;/servlet-name&gt;
-    &lt;servlet-class&gt;org.apache.tapestry.ApplicationServlet&lt;/servlet-class&gt;
-  &lt;/servlet&gt;
-  &lt;servlet-mapping&gt;
-    &lt;servlet-name&gt;ApplicationServlet&lt;/servlet-name&gt;
-    &lt;url-pattern&gt;/app&lt;/url-pattern&gt;
-  &lt;/servlet-mapping&gt;
-&lt;/web-app&gt;
-</source>
-
-                <span class="info">
-                    <strong>Note:</strong>
-                    <p>
-                    Some portals, such as , require additional configuration in the web.xml
-                    deployment descriptor.
-                    </p>
-                </span>
-
-                <p>
-                    Note that just
-                    <em>one</em>
-                    ApplicationServlet is needed, regardless of the number of Tapestry portlet
-                    applications within the WAR. This Tapestry servlet instance is primarily needed
-                    to support the use of the asset service, which is the mechanism by which private
-                    assets stored within the framework's JARs (such as images and stylesheets) can
-                    be provided to client web browsers.
-                </p>
-
-
-                <p>
-                    In the above example, the default servlet mapping, to the /app URL, was used.
-                    You may use alternate mappings, but additional
-                    <a href="site:friendly-urls">configuration</a>
-                    is needed.
-                </p>
-
-            </subsection>
-
-            <subsection name="Mapping Requests to Pages">
-
-
-                <p>
-                    Tapestry has to bridge between the operation-centric organization of Portlets,
-                    and the page/component-centric organization of Tapestry itself. This is most
-                    visible when the a Tapestry Portlet first starts up, or when a user changes the
-                    window state or portlet mode by using the portlet's toolbar (to be specific: the
-                    toolbar provided by the Portal page).
-                </p>
-
-                <p>
-                    In all these cases, a request is recieved by the Tapestry ApplicationPortlet
-                    that includes no real information in the request, just an indication of the
-                    desired window state and portlet mode.
-                </p>
-
-                <p>
-                    Tapestry uses a set of
-                    <em>rules</em>
-                    to determine what to do in these cases. Each rule identifies
-                    <em>up-to</em>
-                    three
-                    <em>factors</em>
-                    used to select a page. These factors are mime-type, portlet-mode, and
-                    window-state.
-                </p>
-
-                <p>
-                    The rules are sorted and consulted in order. The first match defines the page to
-                    activate and render. Omitting a factor means that the factor is not used when
-                    checking a rule against an incoming request.
-                </p>
-
-                <p>
-                    The rules are defined by the configuration point
-                    <code>tapestry.portlet.resolver.PageResolverRules</code>
-                    . Contributions to this configuration point consist of &lt;match&gt; elements:
-                </p>
-
-                <source xml:space="preserve">
-&lt;match [portlet-mode="..."] [mime-type="..."] [window-state="..."] page="..."/&gt;
-</source>
-
-                <p>The default rules are:</p>
-
-                <source xml:space="preserve">
-  &lt;match portlet-mode="edit" page="Edit"/&gt;
-  &lt;match portlet-mode="help" page="Help"/&gt;
-</source>
-
-                <p>Any rules you define will be mixed in with these two default rules.</p>
-
-                <p>
-                    So, by contributing additional &lt;match&gt; rules to this configuration point,
-                    it is possible to precisely control which page should be rendered for each
-                    request; for example, you could have different pages for the "edit"
-                    portlet-mode, depending on whether the window state was normal or maximized:
-                </p>
-
-                <source xml:space="preserve">
-
-&lt;contribution configuration-id="tapestry.portlet.resolver.PageResolverRules"&gt;
-  &lt;match portlet-mode="edit" window-state="maximized" page="EditLarge"/&gt;
-&lt;/contribution&gt;
-
-</source>
-
-                <p>
-                    Here, the Edit page would be used (as per the default rules) unless the window
-                    state was maximized, in which case the EditLarge page would be used.
-                </p>
-
-                <p>
-                    What happens when none of the rules match? In that case, the View page is
-                    activated and rendered. The View page, in portlet Tapestry, is the equivalent of
-                    the Home page, in servlet Tapestry.
-                </p>
-
-                <p>
-                    <strong>For advanced developers</strong>
-                    : the process for determing the page for a request is ultimately based on a
-                    extensible chain of command. The
-                    <code>tapestry.portlet.resolver.PageResolvers</code>
-                    configuration point defines the commands in the chain; by providing services
-                    that implement the
-                    <a href="apidocs/org/apache/tapestry/portlet/PortletPageResolver.html">
-                        PortletPageResolver
-                    </a>
-                    interfaces, you can add even more sophisticated and precise control over the
-                    mapping between requests and pages.
-                </p>
-
-
-            </subsection>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-portlet/src/site/xdoc/index.xml b/tapestry/tapestry-portlet/src/site/xdoc/index.xml
deleted file mode 100644
index 2d2c418..0000000
--- a/tapestry/tapestry-portlet/src/site/xdoc/index.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright 2005 The Apache Software Foundation
-    
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-    
-    http://www.apache.org/licenses/LICENSE-2.0
-    
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Tapestry Portlet Support</title>
-    </properties>
-    <body>
-
-        <section name="Tapestry Portlet Support">
-
-            <p>
-                An add-on module for Tapestry that enables the use of Tapestry to create
-                <a href="http://www.jcp.org/en/jsr/detail?id=168">JSR-168 Portlets</a>
-                . Portlet support is new in Tapestry 4.0. To a large degree, Tapestry has been
-                re-architected to support portlets.
-            </p>
-
-            <p>
-                Portlet support in Tapestry is
-                <em>native</em>
-                . This means that Tapestry is, under the covers, using the true Portlet API as it is
-                intended to be used. Some portal services support bridging ... allowing servlet
-                applications to operate as portlet applications unchanged; such an approach is
-                possible as well, but is not necessary.
-            </p>
-
-            <p>
-                The pattern of development for Tapestry portlet applications is to create a
-                (generally) small application, consisting of just a few pages. Each Tapestry portlet
-                within a portal page will be a completely separate instance of not just the portlet,
-                but all the Tapestry services behind it.
-            </p>
-
-        </section>
-
-    </body>
-</document>
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/BasePortletWebTestCase.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/BasePortletWebTestCase.java
deleted file mode 100644
index 9f641c2..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/BasePortletWebTestCase.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-
-/**
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-public abstract class BasePortletWebTestCase extends BaseComponentTestCase
-{
-    protected Enumeration newEnumeration()
-    {
-        List l = new ArrayList();
-        l.add("fred");
-        l.add("barney");
-
-        return Collections.enumeration(l);
-    }
-
-    protected void checkList(List l)
-    {
-        assertEquals("barney", l.get(0));
-        assertEquals("fred", l.get(1));
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/PortletWebSessionTest.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/PortletWebSessionTest.java
deleted file mode 100644
index cf960f0..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/PortletWebSessionTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.List;
-
-import org.apache.tapestry.web.WebSession;
-import org.testng.annotations.Test;
-
-import javax.portlet.PortletSession;
-
-/**
- * Tests for {@link org.apache.tapestry.portlet.PortletWebSession}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class PortletWebSessionTest extends BasePortletWebTestCase
-{
-
-    public void testGetAttributeNames()
-    {
-        PortletSession session = newSession();
-
-        expect(session.getAttributeNames()).andReturn(newEnumeration());
-
-        replay();
-
-        WebSession ws = new PortletWebSession(session);
-        
-        List l = ws.getAttributeNames();
-
-        checkList(l);
-
-        verify();
-    }
-
-    private PortletSession newSession()
-    {
-        return newMock(PortletSession.class);
-    }
-
-    public void testGetAttribute()
-    {
-        Object attribute = new Object();
-
-        PortletSession session = newSession();
-
-        expect(session.getAttribute("attr")).andReturn(attribute);
-        
-        replay();
-
-        WebSession ws = new PortletWebSession(session);
-
-        assertSame(attribute, ws.getAttribute("attr"));
-
-        verify();
-    }
-
-    public void testSetAttribute()
-    {
-        Object attribute = new Object();
-
-        PortletSession session = newSession();
-
-        session.setAttribute("name", attribute);
-
-        replay();
-
-        WebSession ws = new PortletWebSession(session);
-
-        ws.setAttribute("name", attribute);
-
-        verify();
-    }
-
-    public void testGetId()
-    {
-        PortletSession session = newSession();
-
-        expect(session.getId()).andReturn("abc");
-        
-        replay();
-
-        WebSession ws = new PortletWebSession(session);
-
-        assertEquals("abc", ws.getId());
-
-        verify();
-    }
-
-    public void testInvalidate()
-    {
-        PortletSession session = newSession();
-
-        session.invalidate();
-
-        replay();
-
-        WebSession ws = new PortletWebSession(session);
-
-        ws.invalidate();
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestApplicationPortlet.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestApplicationPortlet.java
deleted file mode 100644
index 492d711..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestApplicationPortlet.java
+++ /dev/null
@@ -1,255 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import org.apache.hivemind.Registry;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.testng.annotations.Test;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletConfig;
-import javax.portlet.PortletContext;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-/**
- * Tests for {@link org.apache.tapestry.portlet.ApplicationPortlet}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential = true)
-public class TestApplicationPortlet extends BaseComponentTestCase
-{
-    public static class ApplicationPortletFixture extends ApplicationPortlet
-    {
-        private final Registry _constructRegistry;
-
-        public ApplicationPortletFixture(Registry registry)
-        {
-            _constructRegistry = registry;
-        }
-
-        protected Registry constructRegistry(PortletConfig config)
-        {
-            return _constructRegistry;
-        }
-    }
-
-    private PortletApplicationInitializer newInitializer()
-    {
-        return newMock(PortletApplicationInitializer.class);
-    }
-
-    private ActionRequestServicer newActionRequestServicer()
-    {
-        return newMock(ActionRequestServicer.class);
-    }
-
-    private RenderRequestServicer newRenderRequestServicer()
-    {
-        return newMock(RenderRequestServicer.class);
-    }
-
-    private Registry newRegistry(PortletApplicationInitializer initializer,
-            ActionRequestServicer actionRequestServicer, RenderRequestServicer renderRequestServicer)
-    {
-        Registry registry = newMock(Registry.class);
-        checkOrder(registry, false);
-        
-        expect(registry.getService(
-                "tapestry.portlet.PortletApplicationInitializer",
-                PortletApplicationInitializer.class)).andReturn(initializer);
-        
-        expect(registry.getService("tapestry.portlet.ActionRequestServicer", ActionRequestServicer.class))
-        .andReturn(actionRequestServicer);
-        
-        expect(registry.getService("tapestry.portlet.RenderRequestServicer", RenderRequestServicer.class))
-        .andReturn(renderRequestServicer);
-        
-        return registry;
-    }
-
-    private PortletConfig newConfig()
-    {
-        return newMock(PortletConfig.class);
-    }
-
-    private ActionRequest newActionRequest()
-    {
-        return newMock(ActionRequest.class);
-    }
-
-    private ActionResponse newActionResponse()
-    {
-        return newMock(ActionResponse.class);
-    }
-
-    private RenderRequest newRenderRequest()
-    {
-        return newMock(RenderRequest.class);
-    }
-
-    private RenderResponse newRenderResponse()
-    {
-        return newMock(RenderResponse.class);
-    }
-
-    public void testParseOptionalDescriptors() throws Exception
-    {
-        PortletConfig config = newMock(PortletConfig.class);
-        PortletContext context = newMock(PortletContext.class);
-
-        checkOrder(config, false);
-        checkOrder(context, false);
-        
-        expect(config.getPortletName()).andReturn("myportlet").anyTimes();
-        
-        // Called once in ApplicationPortlet code,
-        // then inside PortletWebContextInitializer
-
-        expect(config.getPortletContext()).andReturn(context).anyTimes();
-        
-        expect(context.getResource("/WEB-INF/myportlet/hivemodule.xml"))
-        .andReturn(getClass().getResource("hivemodule-portlet.xml")).anyTimes();
-        
-        expect(context.getResource("/WEB-INF/hivemodule.xml"))
-        .andReturn(getClass().getResource("hivemodule.xml")).anyTimes();
-        
-        expect(context.getResource("/WEB-INF/myportlet/myportlet.application"))
-        .andReturn(null);
-
-        expect(context.getResource("/WEB-INF/myportlet.application")).andReturn(null);
-
-        replay();
-
-        ApplicationPortlet ap = new ApplicationPortlet();
-
-        ap.init(config);
-        
-        assertNotNull(ap._registry);
-        assertNotNull(ap._actionRequestServicer);
-        assertNotNull(ap._renderRequestServicer);
-
-        assertEquals("parsed", ap._registry.expandSymbols("${module-portlet}", null));
-        assertEquals("parsed", ap._registry.expandSymbols("${module-plain}", null));
-        
-        verify();
-    }
-
-    public void testInitAndDestroy() throws Exception
-    {
-        PortletApplicationInitializer initializer = newInitializer();
-        ActionRequestServicer actionRequestServicer = newActionRequestServicer();
-        RenderRequestServicer renderRequestServicer = newRenderRequestServicer();
-
-        Registry registry = newRegistry(initializer, actionRequestServicer, renderRequestServicer);
-        PortletConfig config = newConfig();
-
-        initializer.initialize(config);
-
-        replay();
-
-        ApplicationPortletFixture portlet = new ApplicationPortletFixture(registry);
-
-        portlet.init(config);
-
-        verify();
-
-        registry.shutdown();
-
-        replay();
-
-        portlet.destroy();
-
-        verify();
-    }
-
-    public void testProcessAction() throws Exception
-    {
-        PortletApplicationInitializer initializer = newInitializer();
-        ActionRequestServicer actionRequestServicer = newActionRequestServicer();
-        RenderRequestServicer renderRequestServicer = newRenderRequestServicer();
-        
-        Registry registry = newRegistry(initializer, actionRequestServicer, renderRequestServicer);
-        
-        PortletConfig config = newConfig();
-        
-        initializer.initialize(config);
-
-        replay();
-
-        ApplicationPortletFixture portlet = new ApplicationPortletFixture(registry);
-
-        portlet.init(config);
-
-        verify();
-
-        ActionRequest request = newActionRequest();
-        ActionResponse response = newActionResponse();
-
-        registry.setupThread();
-        
-        actionRequestServicer.service(request, response);
-
-        registry.cleanupThread();
-
-        replay();
-
-        portlet.processAction(request, response);
-
-        verify();
-    }
-
-    public void testProcessRender() throws Exception
-    {
-        PortletApplicationInitializer initializer = newInitializer();
-        ActionRequestServicer actionRequestServicer = newActionRequestServicer();
-        RenderRequestServicer renderRequestServicer = newRenderRequestServicer();
-
-        Registry registry = newRegistry(initializer, actionRequestServicer, renderRequestServicer);
-        
-        PortletConfig config = newConfig();
-
-        initializer.initialize(config);
-
-        replay();
-
-        ApplicationPortletFixture portlet = new ApplicationPortletFixture(registry);
-
-        portlet.init(config);
-
-        verify();
-
-        RenderRequest request = newRenderRequest();
-        RenderResponse response = newRenderResponse();
-
-        registry.setupThread();
-        
-        renderRequestServicer.service(request, response);
-
-        registry.cleanupThread();
-
-        replay();
-
-        portlet.render(request, response);
-
-        verify();
-    }
-}
\ No newline at end of file
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestMatchingPortletPageResolver.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestMatchingPortletPageResolver.java
deleted file mode 100644
index de1bfa3..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestMatchingPortletPageResolver.java
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageNotFoundException;
-import org.testng.annotations.Test;
-
-import javax.portlet.PortletMode;
-import javax.portlet.PortletRequest;
-import javax.portlet.WindowState;
-
-/**
- * Tests for {@link org.apache.tapestry.portlet.MatchingPortletPageResolver}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestMatchingPortletPageResolver extends BaseComponentTestCase
-{
-    
-    private IRequestCycle newCycle(String pageName)
-    {
-        IPage page = newPage();
-        
-        IRequestCycle cycle = newCycle();
-        checkOrder(cycle, false);
-        
-        expect(cycle.getPage(pageName)).andReturn(page);
-
-        return cycle;
-    }
-
-    private PageResolverContribution newContribution(String mimeType, String portletMode,
-            String windowState, String pageName)
-    {
-        PageResolverContribution result = new PageResolverContribution();
-        result.setMimeType(mimeType);
-        result.setPortletMode(portletMode);
-        result.setWindowState(windowState);
-        result.setPageName(pageName);
-
-        return result;
-    }
-
-    public void testNoMatchOnContentType()
-    {
-        IRequestCycle cycle = newCycle();
-        
-        PortletRequest request = newMock(PortletRequest.class);
-        
-        trainContentType(request, "text/xml");
-
-        List l = Collections.singletonList(newContribution("text/html", null, "wierd", "Wierd"));
-
-        replay();
-
-        MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
-        resolver.setContributions(l);
-        resolver.initializeService();
-        resolver.setRequest(request);
-
-        assertNull(resolver.getPageNameForRequest(cycle));
-
-        verify();
-    }
-
-    public void testNoMatchOnPortletMode()
-    {
-        IRequestCycle cycle = newCycle();
-        
-        PortletRequest request = newMock(PortletRequest.class);
-
-        trainPortletMode(request, "edit");
-        
-        List l = Collections.singletonList(newContribution(null, "view", null, "Wierd"));
-
-        replay();
-
-        MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
-        resolver.setContributions(l);
-        resolver.initializeService();
-        resolver.setRequest(request);
-
-        assertNull(resolver.getPageNameForRequest(cycle));
-
-        verify();
-    }
-
-    public void testNoMatchOnWindowState()
-    {
-        IRequestCycle cycle = newCycle();
-
-        PortletRequest request = newMock(PortletRequest.class);
-
-        trainWindowState(request, "huge");
-
-        List l = Collections.singletonList(newContribution(null, null, "tiny", "Wierd"));
-
-        replay();
-
-        MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
-        resolver.setContributions(l);
-        resolver.initializeService();
-        resolver.setRequest(request);
-
-        assertNull(resolver.getPageNameForRequest(cycle));
-
-        verify();
-    }
-
-    public void testSortingCounts()
-    {
-        IRequestCycle cycle = newCycle("EditHuge");
-
-        PortletRequest request = newMock(PortletRequest.class);
-        
-        List l = new ArrayList();
-        l.add(newContribution(null, "edit", null, "EditNormal"));
-        l.add(newContribution(null, "edit", "huge", "EditHuge"));
-        
-        trainPortletMode(request, "edit");
-        trainWindowState(request, "huge");
-
-        replay();
-
-        MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
-        resolver.setContributions(l);
-        resolver.initializeService();
-        resolver.setRequest(request);
-
-        assertEquals("EditHuge", resolver.getPageNameForRequest(cycle));
-
-        verify();
-    }
-
-    public void testPageMissing()
-    {
-        IPage page = newPage();
-        IRequestCycle cycle = newCycle();
-
-        PortletRequest request = newMock(PortletRequest.class);
-
-        List l = new ArrayList();
-        l.add(newContribution(null, "edit", null, "EditNormal"));
-        l.add(newContribution(null, "edit", "huge", "EditHuge"));
-
-        trainPortletMode(request, "edit");
-        trainWindowState(request, "huge");
-
-        expect(cycle.getPage("EditHuge")).andThrow(new PageNotFoundException("missing!"));
-        
-        trainPortletMode(request, "edit");
-
-        expect(cycle.getPage("EditNormal")).andReturn(page);
-        
-        replay();
-
-        MatchingPortletPageResolver resolver = new MatchingPortletPageResolver();
-        resolver.setContributions(l);
-        resolver.initializeService();
-        resolver.setRequest(request);
-
-        assertEquals("EditNormal", resolver.getPageNameForRequest(cycle));
-
-        verify();
-    }
-
-    private void trainContentType(PortletRequest request, String contentType)
-    {
-        expect(request.getResponseContentType()).andReturn(contentType);
-    }
-
-    private void trainPortletMode(PortletRequest request, String modeName)
-    {
-        PortletMode mode = new PortletMode(modeName);
-
-        expect(request.getPortletMode()).andReturn(mode);
-    }
-
-    private void trainWindowState(PortletRequest request, String stateName)
-    {
-        WindowState state = new WindowState(stateName);
-
-        expect(request.getWindowState()).andReturn(state);
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletApplicationSpecificationInitializer.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletApplicationSpecificationInitializer.java
deleted file mode 100644
index b5f9280..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletApplicationSpecificationInitializer.java
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.expect;
-
-import java.net.URL;
-
-import org.apache.hivemind.Resource;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.parse.ISpecificationParser;
-import org.apache.tapestry.services.ApplicationGlobals;
-import org.apache.tapestry.services.impl.ApplicationGlobalsImpl;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.web.WebContext;
-import org.apache.tapestry.web.WebContextResource;
-import org.testng.annotations.Test;
-
-import javax.portlet.PortletConfig;
-
-/**
- * Tests for {@link PortletApplicationSpecificationInitializer}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestPortletApplicationSpecificationInitializer extends BaseComponentTestCase
-{
-    private PortletConfig newConfig(String name)
-    {
-        PortletConfig config = newMock(PortletConfig.class);
-        
-        expect(config.getPortletName()).andReturn(name);
-        
-        return config;
-    }
-
-    private IApplicationSpecification newSpecification()
-    {
-        return newMock(IApplicationSpecification.class);
-    }
-
-    private ISpecificationParser newParser(Resource input, IApplicationSpecification specification)
-    {
-        ISpecificationParser parser = newMock(ISpecificationParser.class);
-
-        expect(parser.parseApplicationSpecification(input)).andReturn(specification);
-        
-        return parser;
-    }
-
-    private ApplicationGlobals newGlobals()
-    {
-        return newMock(ApplicationGlobals.class);
-    }
-
-    public void testFoundInSubdir() throws Exception
-    {
-        PortletConfig config = newConfig("myportlet");
-        
-        WebContext context = newMock(WebContext.class);
-
-        IApplicationSpecification specification = newSpecification();
-
-        // Any arbitrary file will work here.
-
-        URL fakeURL = getClass().getResource("hivemodule.xml");
-
-        expect(context.getResource("/WEB-INF/myportlet/myportlet.application")).andReturn(fakeURL);
-        
-        Resource expectedResource = new WebContextResource(context,
-                "/WEB-INF/myportlet/myportlet.application");
-
-        ISpecificationParser parser = newParser(expectedResource, specification);
-
-        ApplicationGlobals globals = newGlobals();
-
-        globals.storeSpecification(specification);
-
-        replay();
-
-        PortletApplicationSpecificationInitializer init = new PortletApplicationSpecificationInitializer();
-        init.setContext(context);
-        init.setGlobals(globals);
-        init.setParser(parser);
-
-        init.initialize(config);
-
-        verify();
-    }
-
-    public void testFoundInRootDir() throws Exception
-    {
-        PortletConfig config = newConfig("myportlet");
-
-        WebContext context = newMock(WebContext.class);
-
-        IApplicationSpecification specification = newSpecification();
-
-        // Any arbitrary file will work here.
-
-        URL fakeURL = getClass().getResource("hivemodule.xml");
-
-        expect(context.getResource("/WEB-INF/myportlet/myportlet.application")).andReturn(null);
-
-        expect(context.getResource("/WEB-INF/myportlet.application")).andReturn(fakeURL);
-
-        Resource expectedResource = new WebContextResource(context,
-                "/WEB-INF/myportlet.application");
-
-        ISpecificationParser parser = newParser(expectedResource, specification);
-
-        ApplicationGlobals globals = newGlobals();
-
-        globals.storeSpecification(specification);
-
-        replay();
-
-        PortletApplicationSpecificationInitializer init = new PortletApplicationSpecificationInitializer();
-        init.setContext(context);
-        init.setGlobals(globals);
-        init.setParser(parser);
-
-        init.initialize(config);
-
-        verify();
-    }
-
-    public void testNotFound() throws Exception
-    {
-        PortletConfig config = newConfig("myportlet");
-
-        WebContext context = newMock(WebContext.class);
-
-        expect(context.getResource("/WEB-INF/myportlet/myportlet.application")).andReturn(null);
-        
-        expect(context.getResource("/WEB-INF/myportlet.application")).andReturn(null);
-        
-        replay();
-
-        ApplicationGlobals globals = new ApplicationGlobalsImpl();
-
-        PortletApplicationSpecificationInitializer init = new PortletApplicationSpecificationInitializer();
-        init.setContext(context);
-        init.setGlobals(globals);
-
-        init.initialize(config);
-
-        verify();
-
-        IApplicationSpecification spec = globals.getSpecification();
-
-        assertEquals("myportlet", spec.getName());
-        assertEquals(new WebContextResource(context, "/WEB-INF/myportlet.application"), spec
-                .getSpecificationLocation());
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletHomeService.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletHomeService.java
deleted file mode 100644
index 69a91c7..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletHomeService.java
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.checkOrder;
-import static org.easymock.EasyMock.expect;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ResponseRenderer;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link org.apache.tapestry.portlet.PortletHomeService}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPortletHomeService extends BaseComponentTestCase
-{
-    private ResponseRenderer newResponseRenderer()
-    {
-        return newMock(ResponseRenderer.class);
-    }
-
-    private PortletRequestGlobals newRequestGlobals(boolean isRender)
-    {
-        PortletRequestGlobals globals = newMock(PortletRequestGlobals.class);
-        checkOrder(globals, false);
-        
-        expect(globals.isRenderRequest()).andReturn(isRender);
-        
-        return globals;
-    }
-
-    private PortletRenderer newPortletRenderer()
-    {
-        return newMock(PortletRenderer.class);
-    }
-
-    private PortletPageResolver newResolver(IRequestCycle cycle, String pageName)
-    {
-        PortletPageResolver resolver = newMock(PortletPageResolver.class);
-
-        expect(resolver.getPageNameForRequest(cycle)).andReturn(pageName);
-        
-        return resolver;
-    }
-
-    public void testIsRenderRequest() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        PortletRequestGlobals globals = newRequestGlobals(true);
-        PortletRenderer renderer = newPortletRenderer();
-        PortletPageResolver resolver = newResolver(cycle, "ZePage");
-
-        renderer.renderPage(cycle, "ZePage");
-
-        replay();
-
-        PortletHomeService phs = new PortletHomeService();
-        phs.setPageResolver(resolver);
-        phs.setPortletRenderer(renderer);
-        phs.setRequestGlobals(globals);
-
-        phs.service(cycle);
-
-        verify();
-    }
-
-    public void testIsActionRequest() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        PortletRequestGlobals globals = newRequestGlobals(false);
-        
-        ResponseRenderer renderer = newResponseRenderer();
-        
-        PortletPageResolver resolver = newResolver(cycle, "ZePage");
-        
-        cycle.activate("ZePage");
-        renderer.renderResponse(cycle);
-
-        replay();
-
-        PortletHomeService phs = new PortletHomeService();
-        phs.setResponseRenderer(renderer);
-        phs.setRequestGlobals(globals);
-        phs.setPageResolver(resolver);
-
-        phs.service(cycle);
-
-        verify();
-    }
-
-    public void testGetLink()
-    {
-        Map parameters = new HashMap();
-        
-        LinkFactory factory = newMock(LinkFactory.class);
-        ILink link = newMock(ILink.class);
-
-        PortletHomeService phs = new PortletHomeService();
-        phs.setLinkFactory(factory);
-        
-        expect(factory.constructLink(phs, false, parameters, true)).andReturn(link);
-
-        replay();
-
-        assertSame(link, phs.getLink(false, null));
-
-        verify();
-    }
-
-    public void testGetLinkWithParameter()
-    {
-        try
-        {
-            new PortletHomeService().getLink(false, "PARAMETER");
-            unreachable();
-        }
-        catch (IllegalArgumentException ex)
-        {
-            assertEquals("The home service does not require a parameter object.", ex.getMessage());
-        }
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletLink.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletLink.java
deleted file mode 100644
index 3d730eb..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletLink.java
+++ /dev/null
@@ -1,271 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.util.QueryParameterMap;
-import org.testng.annotations.Test;
-
-import javax.portlet.PortletMode;
-import javax.portlet.PortletModeException;
-import javax.portlet.PortletSecurityException;
-import javax.portlet.PortletURL;
-import javax.portlet.WindowState;
-import javax.portlet.WindowStateException;
-
-/**
- * Tests for {@link org.apache.tapestry.portlet.PortletLink}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPortletLink extends BaseComponentTestCase
-{
-    private static class PortletURLFixture implements PortletURL
-    {
-        private final String _toString;
-
-        public PortletURLFixture(String toString)
-        {
-            _toString = toString;
-        }
-
-        public String toString()
-        {
-            return _toString;
-        }
-
-        public void setWindowState(WindowState arg0) throws WindowStateException
-        {
-        }
-
-        public void setPortletMode(PortletMode arg0) throws PortletModeException
-        {
-        }
-
-        public void setParameter(String arg0, String arg1)
-        {
-        }
-
-        public void setParameter(String arg0, String[] arg1)
-        {
-        }
-
-        public void setParameters(Map arg0)
-        {
-        }
-
-        public void setSecure(boolean arg0) throws PortletSecurityException
-        {
-        }
-
-    }
-
-    private PortletURL newPortletURL()
-    {
-        return newMock(PortletURL.class);
-    }
-
-    public void testGetAbsoluteURL()
-    {
-        PortletURL url = newPortletURL();
-        QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
-
-        replay();
-        org.easymock.classextension.EasyMock.replay(parameters);
-        
-        ILink link = new PortletLink(url, parameters);
-
-        try
-        {
-            link.getAbsoluteURL();
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Accept.
-        }
-
-        try
-        {
-            link.getAbsoluteURL(null, null, -1, null, false);
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Accept.
-        }
-
-        verify();
-        org.easymock.classextension.EasyMock.verify(parameters);
-    }
-
-    public void testGetParameterNames()
-    {
-        PortletURL url = newPortletURL();
-        QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
-
-        String[] names = { "Fred", "Barney" };
-
-        expect(parameters.getParameterNames()).andReturn(names);
-        
-        replay();
-        org.easymock.classextension.EasyMock.replay(parameters);
-
-        ILink link = new PortletLink(url, parameters);
-        
-        assertSame(names, link.getParameterNames());
-        
-        verify();
-        org.easymock.classextension.EasyMock.verify(parameters);
-    }
-    
-    public void testGetParameterValues()
-    {
-        PortletURL url = newPortletURL();
-        
-        QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
-
-        String[] values = { "Fred", "Barney" };
-
-        expect(parameters.getParameterValues("bedrock")).andReturn(values);
-        
-        replay();
-        org.easymock.classextension.EasyMock.replay(parameters);
-
-        ILink link = new PortletLink(url, parameters);
-        
-        assertSame(values, link.getParameterValues("bedrock"));
-
-        verify();
-        org.easymock.classextension.EasyMock.verify(parameters);
-    }
-
-    public void testGetURL()
-    {
-        PortletURL url = newPortletURL();
-
-        QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
-
-        expect(parameters.getParameterNames()).andReturn(new String[0]);
-        
-        replay();
-        org.easymock.classextension.EasyMock.replay(parameters);
-
-        ILink link = new PortletLink(url, parameters);
-
-        assertEquals(url.toString(), link.getURL());
-
-        verify();
-        org.easymock.classextension.EasyMock.verify(parameters);
-    }
-
-    public void testGetURLLongForm()
-    {
-        PortletURL url = newPortletURL();
-
-        QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
-
-        expect(parameters.getParameterNames()).andReturn(new String[] {"page"});
-        
-        String[] values = new String[] { "View" };
-        
-        expect(parameters.getParameterValues("page")).andReturn(values);
-        
-        url.setParameter("page", values);
-        
-        replay();
-        org.easymock.classextension.EasyMock.replay(parameters);
-
-        ILink link = new PortletLink(url, parameters);
-
-        assertEquals("EasyMock for interface javax.portlet.PortletURL#anchor", link.getURL(
-                "scheme",
-                "server",
-                99,
-                "anchor",
-                true));
-
-        verify();
-        org.easymock.classextension.EasyMock.verify(parameters);
-    }
-
-    public void testGetURLUnencoding()
-    {
-        PortletURL url = new PortletURLFixture("this=foo&amp;that=bar");
-
-        QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
-
-        expect(parameters.getParameterNames()).andReturn(new String[0]);
-        
-        replay();
-        org.easymock.classextension.EasyMock.replay(parameters);
-
-        ILink link = new PortletLink(url, parameters);
-
-        assertEquals("this=foo&that=bar", link.getURL());
-
-        verify();
-        org.easymock.classextension.EasyMock.verify(parameters);
-    }
-
-    public void testGetURLIncludeParameters()
-    {
-        PortletURL url = newPortletURL();
-        
-        QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
-        
-        String[] values = { "Fred", "Barney" };
-        
-        expect(parameters.getParameterNames()).andReturn(new String[]{"bedrock"});
-        
-        expect(parameters.getParameterValues("bedrock")).andReturn(values);
-        
-        url.setParameter("bedrock", values);
-
-        replay();
-        org.easymock.classextension.EasyMock.replay(parameters);
-
-        ILink link = new PortletLink(url, parameters);
-
-        assertEquals(url.toString(), link.getURL());
-
-        verify();
-        org.easymock.classextension.EasyMock.verify(parameters);
-    }
-
-    public void testGetURLWithAnchor()
-    {
-        PortletURL url = newPortletURL();
-
-        QueryParameterMap parameters = org.easymock.classextension.EasyMock.createMock(QueryParameterMap.class);
-
-        replay();
-        org.easymock.classextension.EasyMock.replay(parameters);
-
-        ILink link = new PortletLink(url, parameters);
-
-        assertEquals("EasyMock for interface javax.portlet.PortletURL#anchor", link.getURL("anchor", false));
-        
-        verify();
-        org.easymock.classextension.EasyMock.verify(parameters);
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletRenderer.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletRenderer.java
deleted file mode 100644
index f57fb04..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletRenderer.java
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import org.apache.hivemind.Location;
-import org.apache.tapestry.*;
-import org.apache.tapestry.asset.AssetFactory;
-import org.apache.tapestry.markup.MarkupWriterSource;
-import org.apache.tapestry.services.ResponseBuilder;
-import org.apache.tapestry.util.ContentType;
-import org.apache.tapestry.web.WebResponse;
-import static org.easymock.EasyMock.*;
-import org.testng.annotations.Test;
-
-import java.io.CharArrayWriter;
-import java.io.PrintWriter;
-
-/**
- * Tests for {@link org.apache.tapestry.portlet.PortletRendererImpl}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPortletRenderer extends BaseComponentTestCase
-{
-    
-    private PrintWriter newPrintWriter()
-    {
-        return new PrintWriter(new CharArrayWriter());
-    }
-
-    private AssetFactory newAssetFactory()
-    {
-        return newMock(AssetFactory.class);
-    }
-
-    private WebResponse newWebResponse(ContentType contentType, PrintWriter writer)
-            throws Exception
-    {
-        WebResponse response = newMock(WebResponse.class);
-        checkOrder(response, false);
-        
-        expect(response.getPrintWriter(contentType)).andReturn(writer);
-
-        expect(response.getNamespace()).andReturn("NAMESPACE");
-        
-        return response;
-    }
-
-    private MarkupWriterSource newSource(PrintWriter printWriter, ContentType contentType,
-            IMarkupWriter writer)
-    {
-        MarkupWriterSource source = newMock(MarkupWriterSource.class);
-        
-        expect(source.newMarkupWriter(printWriter, contentType)).andReturn(writer);
-        
-        return source;
-    }
-
-    private IPage newPage(ContentType contentType)
-    {
-        IPage page = newMock(IPage.class);
-
-        expect(page.getResponseContentType()).andReturn(contentType);
-        
-        expect(page.getPageName()).andReturn("ZePage");
-
-        return page;
-    }
-
-    private IRequestCycle newCycle(String pageName, IPage page)
-    {
-        return newCycle(pageName, page, null);
-    }
-    
-    private IRequestCycle newCycle(String pageName, IPage page, IMarkupWriter writer)
-    {   
-        IRequestCycle cycle = newCycle();
-        
-        cycle.activate(pageName);
-
-        expect(cycle.getPage()).andReturn(page).anyTimes();
-        
-        Location l = newLocation();
-        
-        expect(page.getLocation()).andReturn(l);
-        
-        expect(cycle.getAttribute("org.apache.tapestry.PageRenderSupport")).andReturn(null);
-        
-        // We can check that an instance of PageRenderSupport is passed in, but
-        // we can't (easily) check thta it's configured the way we want.
-        
-        cycle.setAttribute(eq("org.apache.tapestry.PageRenderSupport"), 
-                isA(PageRenderSupport.class));
-        
-        cycle.renderPage(isA(ResponseBuilder.class));
-        
-        cycle.removeAttribute("org.apache.tapestry.PageRenderSupport");
-        
-        return cycle;
-    }
-
-    public void test_Success() throws Exception
-    {
-        ContentType ct = new ContentType("text/html");
-        PrintWriter pw = newPrintWriter();
-        
-        WebResponse response = newWebResponse(ct, pw);
-        IMarkupWriter nested = newNestedWriter();
-        checkOrder(nested, false);
-        
-        IMarkupWriter writer = newWriter();
-
-        expect(writer.getNestedWriter()).andReturn((NestedMarkupWriter)nested);
-
-        nested.flush();
-
-        MarkupWriterSource source = newSource(pw, ct, writer);
-        IPage page = newPage(ct);
-        AssetFactory assetFactory = newAssetFactory();
-        
-        IRequestCycle cycle = newCycle("ZePage", page);
-        
-        writer.comment("BEGIN Tapestry Portlet appId NAMESPACE");
-        writer.comment("Page: ZePage");
-        
-        writer.comment(matches("Generated:.*"));
-        
-        writer.comment(matches("Framework version:.*"));
-
-        nested.close();
-
-        writer.comment("END Tapestry Portlet appId NAMESPACE");
-
-        writer.close();
-
-        replay();
-        
-        PortletRendererImpl r = new PortletRendererImpl();
-        r.setMarkupWriterSource(source);
-        r.setResponse(response);
-        r.setAssetFactory(assetFactory);
-        r.setApplicationId("appId");
-        
-        r.renderPage(cycle, "ZePage");
-        
-        verify();
-    }
-
-    // TODO: Tests that prove the RenderPageSupport is working properly.
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletResponseRenderer.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletResponseRenderer.java
deleted file mode 100644
index 93c70cc..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletResponseRenderer.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.ServiceConstants;
-import org.testng.annotations.Test;
-
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletMode;
-import javax.portlet.PortletRequest;
-import javax.portlet.WindowState;
-
-/**
- * Tests for {@link org.apache.tapestry.portlet.PortletResponseRenderer}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPortletResponseRenderer extends BaseComponentTestCase
-{
-    private ActionResponse newResponse()
-    {
-        return newMock(ActionResponse.class);
-    }
-
-    private IRequestCycle newCycle(IPage page)
-    {
-        IRequestCycle cycle = newCycle();
-        
-        expect(cycle.getPage()).andReturn(page);
-        
-        return cycle;
-    }
-    
-    public void testSuccess() throws Exception
-    {
-        IPage page = newPage("Frodo");
-        IRequestCycle cycle = newCycle(page);
-        
-        PortletRequest request = newMock(PortletRequest.class);
-        
-        expect(request.getPortletMode()).andReturn(PortletMode.VIEW);
-
-        expect(request.getWindowState()).andReturn(WindowState.NORMAL);
-        
-        ActionResponse response = newResponse();
-
-        response.setRenderParameter(ServiceConstants.SERVICE, PortletConstants.RENDER_SERVICE);
-        response.setRenderParameter(ServiceConstants.PAGE, "Frodo");
-        response.setRenderParameter(PortletConstants.PORTLET_MODE, "view");
-        response.setRenderParameter(PortletConstants.WINDOW_STATE, "normal");
-
-        replay();
-
-        PortletResponseRenderer renderer = new PortletResponseRenderer();
-        renderer.setResponse(response);
-        renderer.setRequest(request);
-
-        renderer.renderResponse(cycle);
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletServicerBridges.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletServicerBridges.java
deleted file mode 100644
index 5b2dd5b..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletServicerBridges.java
+++ /dev/null
@@ -1,202 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.isA;
-
-import java.io.IOException;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.services.WebRequestServicer;
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebResponse;
-import org.testng.annotations.Test;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletException;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-/**
- * Tests for {@link ActionRequestServicerToWebRequestServicerBridge}&nbsp;and
- * {@link org.apache.tapestry.portlet.RenderRequestServicerToWebRequestServicerBridge}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestPortletServicerBridges extends BaseComponentTestCase
-{
-    private class WebRequestServicerFixture implements WebRequestServicer
-    {
-        WebRequest _request;
-
-        WebResponse _response;
-
-        public void service(WebRequest request, WebResponse response) throws IOException
-        {
-            _request = request;
-            _response = response;
-        }
-
-    }
-
-    public void testActionBridgeSuccess() throws Exception
-    {
-        ActionRequest request = newMock(ActionRequest.class);
-        ActionResponse response = newMock(ActionResponse.class);
-
-        PortletRequestGlobals prg = newMock(PortletRequestGlobals.class);
-        WebRequestServicerFixture wrs = new WebRequestServicerFixture();
-
-        prg.store(request, response);
-        
-        request.removeAttribute("FOO");
-        expect(response.encodeURL("FOO")).andReturn(null);
-
-        replay();
-
-        ActionRequestServicerToWebRequestServicerBridge bridge = 
-            new ActionRequestServicerToWebRequestServicerBridge();
-        bridge.setPortletRequestGlobals(prg);
-        bridge.setWebRequestServicer(wrs);
-
-        bridge.service(request, response);
-
-        // Test that the WebXXX wrappers createde by the bridge and passed to the WebRequestServicer
-        // encapsulate the ActionRequest and ActionResponse
-
-        wrs._request.setAttribute("FOO", null);
-        wrs._response.encodeURL("FOO");
-
-        verify();
-    }
-
-    public void testRenderBridgeSuccess() throws Exception
-    {
-        RenderRequest request = newMock(RenderRequest.class);
-        RenderResponse response = newMock(RenderResponse.class);
-
-        PortletRequestGlobals prg = newMock(PortletRequestGlobals.class);
-        WebRequestServicerFixture wrs = new WebRequestServicerFixture();
-        
-        prg.store(request, response);
-
-        request.removeAttribute("FOO");
-        response.reset();
-
-        replay();
-
-        RenderRequestServicerToWebRequestServicerBridge bridge = 
-            new RenderRequestServicerToWebRequestServicerBridge();
-        bridge.setPortletRequestGlobals(prg);
-        bridge.setWebRequestServicer(wrs);
-
-        bridge.service(request, response);
-
-        // Test that the WebXXX wrappers createde by the bridge and passed to the WebRequestServicer
-        // encapsulate the RenderRequest and RenderResponse
-
-        wrs._request.setAttribute("FOO", null);
-
-        // Prove that the *correct* wrapper type, RenderWebResponse, has been used.
-
-        wrs._response.reset();
-
-        verify();
-    }
-
-    public void testActionBridgeFailure() throws Exception
-    {
-        ActionRequest request = newMock(ActionRequest.class);
-        ActionResponse response = newMock(ActionResponse.class);
-        PortletRequestGlobals prg = newMock(PortletRequestGlobals.class);
-        
-        WebRequestServicer servicer = newMock(WebRequestServicer.class);
-        
-        Throwable t = new RuntimeException("Failure.");
-
-        prg.store(request, response);
-        servicer.service(isA(PortletWebRequest.class), isA(PortletWebResponse.class));
-        expectLastCall().andThrow(t);
-        
-        replay();
-
-        ActionRequestServicerToWebRequestServicerBridge bridge = new ActionRequestServicerToWebRequestServicerBridge();
-        bridge.setPortletRequestGlobals(prg);
-        bridge.setWebRequestServicer(servicer);
-
-        try
-        {
-
-            bridge.service(request, response);
-            unreachable();
-        }
-        catch (PortletException ex)
-        {
-            // PortletException doesn't seem to copy the
-            // message?
-            // assertEquals("Failure.", ex.getMessage());
-            // Note: implemented by PortletException, not tied
-            // to JDK 1.4
-            assertSame(t, ex.getCause());
-        }
-
-        verify();
-    }
-
-    public void testRenderBridgeFailure() throws Exception
-    {
-        RenderRequest request = newMock(RenderRequest.class);
-        RenderResponse response = newMock(RenderResponse.class);
-        PortletRequestGlobals prg = newMock(PortletRequestGlobals.class);
-        
-        WebRequestServicer servicer = newMock(WebRequestServicer.class);
-        
-        Throwable t = new RuntimeException("Failure.");
-
-        prg.store(request, response);
-        
-        servicer.service(isA(PortletWebRequest.class), isA(RenderWebResponse.class));
-        expectLastCall().andThrow(t);
-        
-        replay();
-        
-        RenderRequestServicerToWebRequestServicerBridge bridge = new RenderRequestServicerToWebRequestServicerBridge();
-        bridge.setPortletRequestGlobals(prg);
-        bridge.setWebRequestServicer(servicer);
-        
-        try
-        {
-
-            bridge.service(request, response);
-            unreachable();
-        }
-        catch (PortletException ex)
-        {
-            // PortletException doesn't seem to copy the
-            // message?
-            // assertEquals("Failure.", ex.getMessage());
-            // Note: implemented by PortletException, not tied
-            // to JDK 1.4
-            assertSame(t, ex.getCause());
-        }
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebActivator.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebActivator.java
deleted file mode 100644
index f811311..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebActivator.java
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.List;
-
-import org.testng.annotations.Test;
-
-import javax.portlet.PortletConfig;
-
-/**
- * Tests for {@link org.apache.tapestry.portlet.PortletWebActivator}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPortletWebActivator extends BasePortletWebTestCase
-{
-    public void testGetActivatorName()
-    {
-        PortletConfig config = newMock(PortletConfig.class);
-
-        expect(config.getPortletName()).andReturn("portlet");
-        
-        replay();
-        
-        PortletWebActivator pwa = new PortletWebActivator(config);
-        
-        assertEquals("portlet", pwa.getActivatorName());
-
-        verify();
-    }
-
-    public void testGetInitParameterNames()
-    {
-        PortletConfig config = newMock(PortletConfig.class);
-
-        expect(config.getInitParameterNames()).andReturn(newEnumeration());
-        
-        replay();
-
-        PortletWebActivator pwa = new PortletWebActivator(config);
-
-        List l = pwa.getInitParameterNames();
-
-        checkList(l);
-
-        verify();
-    }
-
-    public void testGetInitParameterValue()
-    {
-        String value = "William Orbit";
-        
-        PortletConfig config = newMock(PortletConfig.class);
-
-        expect(config.getInitParameter("artist")).andReturn(value);
-        
-        replay();
-
-        PortletWebActivator pwa = new PortletWebActivator(config);
-
-        assertSame(value, pwa.getInitParameterValue("artist"));
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebContext.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebContext.java
deleted file mode 100644
index 96ed3a9..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebContext.java
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.expect;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-
-import org.apache.tapestry.web.WebContext;
-import org.testng.annotations.Test;
-
-import javax.portlet.PortletContext;
-
-/**
- * @author Howard M. Lewis Ship
- */
-@Test(sequential=true)
-public class TestPortletWebContext extends BasePortletWebTestCase
-{
-
-    public void testGetInitParameterNames()
-    {
-        PortletContext context = newMock(PortletContext.class);
-
-        expect(context.getInitParameterNames()).andReturn(newEnumeration());
-
-        replay();
-
-        WebContext wc = new PortletWebContext(context);
-
-        List l = wc.getInitParameterNames();
-
-        checkList(l);
-
-        verify();
-    }
-
-    public void testGetInitParameterValue()
-    {
-        String value = "William Orbit";
-        
-        PortletContext context = newMock(PortletContext.class);
-        
-        expect(context.getInitParameter("artist")).andReturn(value);
-
-        replay();
-
-        WebContext wc = new PortletWebContext(context);
-
-        assertSame(value, wc.getInitParameterValue("artist"));
-
-        verify();
-    }
-
-    public void testGetAttributeNames()
-    {
-        PortletContext context = newMock(PortletContext.class);
-
-        expect(context.getAttributeNames()).andReturn(newEnumeration());
-        
-        replay();
-
-        WebContext wc = new PortletWebContext(context);
-        
-        List l = wc.getAttributeNames();
-
-        checkList(l);
-
-        verify();
-    }
-
-    public void testGetAttribute()
-    {
-        Object attribute = new Object();
-
-        PortletContext context = newMock(PortletContext.class);
-
-        expect(context.getAttribute("attr")).andReturn(attribute);
-
-        replay();
-
-        WebContext wc = new PortletWebContext(context);
-
-        assertSame(attribute, wc.getAttribute("attr"));
-
-        verify();
-    }
-
-    public void testSetAttribute()
-    {
-        Object attribute = new Object();
-
-        PortletContext context = newMock(PortletContext.class);
-        
-        context.setAttribute("name", attribute);
-
-        replay();
-
-        WebContext wc = new PortletWebContext(context);
-
-        wc.setAttribute("name", attribute);
-
-        verify();
-    }
-
-    public void testSetAttributeToNull()
-    {
-        PortletContext context = newMock(PortletContext.class);
-
-        context.removeAttribute("tonull");
-
-        replay();
-
-        WebContext wc = new PortletWebContext(context);
-
-        wc.setAttribute("tonull", null);
-
-        verify();
-    }
-
-    public void testGetResource() throws Exception
-    {
-        URL url = new URL("http://tapestry.apache.org/");
-
-        PortletContext context = newMock(PortletContext.class);
-        
-        expect(context.getResource("/tapestry")).andReturn(url);
-        
-        replay();
-
-        WebContext wc = new PortletWebContext(context);
-        
-        assertSame(url, wc.getResource("/tapestry"));
-        
-        verify();
-    }
-
-    public void testGetResourceFailure() throws Exception
-    {
-        Throwable t = new MalformedURLException("Like this ever happens.");
-
-        PortletContext context = newMock(PortletContext.class);
-
-        expect(context.getResource("/tapestry")).andThrow(t);
-        
-        replay();
-        
-        WebContext wc = new PortletWebContext(context);
-
-        assertNull(wc.getResource("/tapestry"));
-        
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebRequest.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebRequest.java
deleted file mode 100644
index 36c59ce..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebRequest.java
+++ /dev/null
@@ -1,302 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.expect;
-
-import java.util.List;
-
-import org.apache.tapestry.web.WebRequest;
-import org.apache.tapestry.web.WebSession;
-import org.testng.annotations.Test;
-
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletSession;
-
-/**
- * Tests for {@link PortletWebRequest}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPortletWebRequest extends BasePortletWebTestCase
-{
-    private PortletRequest newPortletRequest()
-    {
-        return newMock(PortletRequest.class);
-    }
-
-    public void testGetParameterNames()
-    {
-        PortletRequest request = newPortletRequest();
-
-        expect(request.getParameterNames()).andReturn(newEnumeration());
-        
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        List l = wr.getParameterNames();
-
-        checkList(l);
-
-        verify();
-    }
-
-    public void testGetParameterValue()
-    {
-        String value = "William Orbit";
-        
-        PortletRequest request = newPortletRequest();
-
-        expect(request.getParameter("artist")).andReturn(value);
-        
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        assertSame(value, wr.getParameterValue("artist"));
-
-        verify();
-    }
-
-    public void testGetParameterValues()
-    {
-        String[] values = { "William Orbit", "Steely Dan" };
-        
-        PortletRequest request = newPortletRequest();
-
-        expect(request.getParameterValues("artist")).andReturn(values);
-        
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-        
-        assertSame(values, wr.getParameterValues("artist"));
-
-        verify();
-    }
-
-    public void testGetContextPath()
-    {
-        PortletRequest request = newPortletRequest();
-
-        expect(request.getContextPath()).andReturn("/foo");
-
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        assertEquals("/foo", wr.getContextPath());
-
-        verify();
-    }
-
-    public void testGetAttributeNames()
-    {
-        PortletRequest request = newPortletRequest();
-
-        expect(request.getAttributeNames()).andReturn(newEnumeration());
-
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        List l = wr.getAttributeNames();
-
-        checkList(l);
-
-        verify();
-    }
-
-    public void testGetAttribute()
-    {
-        Object attribute = new Object();
-        PortletRequest request = newPortletRequest();
-
-        expect(request.getAttribute("attr")).andReturn(attribute);
-
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        assertSame(attribute, wr.getAttribute("attr"));
-
-        verify();
-    }
-
-    public void testSetAttribute()
-    {
-        Object attribute = new Object();
-
-        PortletRequest request = newPortletRequest();
-
-        request.setAttribute("name", attribute);
-
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        wr.setAttribute("name", attribute);
-
-        verify();
-    }
-
-    public void testSetAttributeToNull()
-    {
-        PortletRequest request = newPortletRequest();
-
-        request.removeAttribute("tonull");
-
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        wr.setAttribute("tonull", null);
-
-        verify();
-    }
-
-    public void testGetSession()
-    {
-        PortletRequest request = newPortletRequest();
-
-        PortletSession session = newMock(PortletSession.class);
-
-        expect(request.getPortletSession(false)).andReturn(null);
-
-        // Get it, doesn't exist, wreate false
-
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        assertNull(wr.getSession(false));
-
-        verify();
-
-        expect(request.getPortletSession(true)).andReturn(session);
-        
-        // #2: Get it, wreate is true, it is wreated.
-
-        replay();
-
-        WebSession cs = wr.getSession(true);
-
-        verify();
-
-        // #3: Cached in local variable, make sure same
-        // think returned.
-
-        replay();
-
-        assertSame(cs, wr.getSession(false));
-
-        verify();
-    }
-
-    public void testGetScheme()
-    {
-        PortletRequest request = newPortletRequest();
-
-        expect(request.getScheme()).andReturn("http");
-        
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        assertEquals("http", wr.getScheme());
-
-        verify();
-    }
-
-    public void testGetServerName()
-    {
-        PortletRequest request = newPortletRequest();
-
-        expect(request.getServerName()).andReturn("www.myhost.com");
-        
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        assertEquals("www.myhost.com", wr.getServerName());
-
-        verify();
-    }
-
-    public void testGetServerPort()
-    {
-        PortletRequest request = newPortletRequest();
-
-        expect(request.getServerPort()).andReturn(80);
-
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        assertEquals(80, wr.getServerPort());
-
-        verify();
-    }
-
-    public void testGetRequestURIUnsupported()
-    {
-        PortletRequest request = newPortletRequest();
-
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        assertEquals("<PortletRequest>", wr.getRequestURI());
-
-        verify();
-    }
-
-    public void testForwardUnsupported()
-    {
-        PortletRequest request = newPortletRequest();
-
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        try
-        {
-            wr.forward(null);
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void testGetPathInfo()
-    {
-        PortletRequest request = newPortletRequest();
-
-        replay();
-
-        WebRequest wr = new PortletWebRequest(request);
-
-        assertNull(wr.getPathInfo());
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebResponse.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebResponse.java
deleted file mode 100644
index 6836466..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestPortletWebResponse.java
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.util.ContentType;
-import org.testng.annotations.Test;
-
-import javax.portlet.PortletResponse;
-
-/**
- * Tests for {@link org.apache.tapestry.portlet.PortletWebResponse}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestPortletWebResponse extends BasePortletWebTestCase
-{
-    private PortletResponse newResponse()
-    {
-        return newMock(PortletResponse.class);
-    }
-
-    public void testGetOutputStreamUnsupported() throws Exception
-    {
-        PortletResponse response = newResponse();
-
-        replay();
-
-        PortletWebResponse pwr = new PortletWebResponse(response);
-
-        try
-        {
-            pwr.getOutputStream(new ContentType("foo/bar"));
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void testGetNamespace() throws Exception
-    {
-        PortletResponse response = newResponse();
-
-        replay();
-
-        PortletWebResponse pwr = new PortletWebResponse(response);
-
-        assertEquals("", pwr.getNamespace());
-
-        verify();
-    }
-
-    public void testResetUnsupported()
-    {
-        PortletResponse response = newResponse();
-
-        replay();
-
-        PortletWebResponse pwr = new PortletWebResponse(response);
-
-        try
-        {
-            pwr.reset();
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void testSetDateHeaderUnsupported()
-    {
-        PortletResponse response = newResponse();
-
-        replay();
-
-        PortletWebResponse pwr = new PortletWebResponse(response);
-
-        try
-        {
-            pwr.setDateHeader(null, 0);
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void testSetHeaderUnsupported()
-    {
-        PortletResponse response = newResponse();
-
-        replay();
-
-        PortletWebResponse pwr = new PortletWebResponse(response);
-
-        try
-        {
-            pwr.setHeader(null, null);
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void testSetIntHeaderUnsupported()
-    {
-        PortletResponse response = newResponse();
-
-        replay();
-
-        PortletWebResponse pwr = new PortletWebResponse(response);
-
-        try
-        {
-            pwr.setIntHeader(null, 0);
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void testSendErrorUnsupported() throws Exception
-    {
-        PortletResponse response = newResponse();
-
-        replay();
-
-        PortletWebResponse pwr = new PortletWebResponse(response);
-
-        try
-        {
-            pwr.sendError(99, "foo!");
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void testEncodeURL()
-    {
-        PortletResponse response = newMock(PortletResponse.class);
-        
-        expect(response.encodeURL("/foo")).andReturn("/foo;encoded");
-        
-        replay();
-        
-        PortletWebResponse pwr = new PortletWebResponse(response);
-        
-        assertEquals("/foo;encoded", pwr.encodeURL("/foo"));
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestRenderService.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestRenderService.java
deleted file mode 100644
index be570a8..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestRenderService.java
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2006 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.services.ServiceConstants;
-import org.testng.annotations.Test;
-
-import javax.portlet.PortletMode;
-import javax.portlet.PortletRequest;
-import javax.portlet.WindowState;
-
-/**
- * Test for {@link org.apache.tapestry.portlet.RenderService}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestRenderService extends BaseComponentTestCase
-{
-    public void testGetLinkUnsupported()
-    {
-        RenderService rs = new RenderService();
-
-        try
-        {
-            rs.getLink(false, null);
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Hm. Not actually the best message!
-            assertEquals("Method getLink() is not supported for portlet requests.", ex.getMessage());
-        }
-    }
-
-    public void testNormal() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        PortletRequest request = newMock(PortletRequest.class);
-
-        PortletRenderer renderer = newMock(PortletRenderer.class);
-        
-        trainGetParameter(cycle, PortletConstants.PORTLET_MODE, "view");
-        trainGetParameter(cycle, PortletConstants.WINDOW_STATE, "normal");
-
-        trainGetPortletMode(request, PortletMode.VIEW);
-        trainGetWindowState(request, WindowState.NORMAL);
-
-        trainGetParameter(cycle, ServiceConstants.PAGE, "Fred");
-
-        renderer.renderPage(cycle, "Fred");
-
-        replay();
-
-        RenderService rs = new RenderService();
-        rs.setPortletRenderer(renderer);
-        rs.setRequest(request);
-
-        rs.service(cycle);
-
-        verify();
-    }
-
-    public void testPortletModeChanged() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        PortletRequest request = newMock(PortletRequest.class);
-
-        PortletRenderer renderer = newMock(PortletRenderer.class);
-        
-        trainGetParameter(cycle, PortletConstants.PORTLET_MODE, "view");
-        trainGetParameter(cycle, PortletConstants.WINDOW_STATE, "normal");
-
-        trainGetPortletMode(request, PortletMode.EDIT);
-        
-        PortletPageResolver resolver = newResolver(cycle, "Barney");
-        
-        renderer.renderPage(cycle, "Barney");
-        
-        replay();
-
-        RenderService rs = new RenderService();
-        rs.setPortletRenderer(renderer);
-        rs.setRequest(request);
-        rs.setPageResolver(resolver);
-
-        rs.service(cycle);
-
-        verify();
-    }
-
-    public void testWindowStateChanged() throws Exception
-    {
-        IRequestCycle cycle = newCycle();
-        PortletRequest request = newMock(PortletRequest.class);
-
-        PortletRenderer renderer = newMock(PortletRenderer.class);
-        
-        trainGetParameter(cycle, PortletConstants.PORTLET_MODE, "view");
-        trainGetParameter(cycle, PortletConstants.WINDOW_STATE, "normal");
-
-        trainGetPortletMode(request, PortletMode.VIEW);
-        trainGetWindowState(request, WindowState.MAXIMIZED);
-        
-        PortletPageResolver resolver = newResolver(cycle, "Wilma");
-        
-        renderer.renderPage(cycle, "Wilma");
-        
-        replay();
-
-        RenderService rs = new RenderService();
-        rs.setPortletRenderer(renderer);
-        rs.setRequest(request);
-        rs.setPageResolver(resolver);
-
-        rs.service(cycle);
-
-        verify();
-    }
-
-    private PortletPageResolver newResolver(IRequestCycle cycle, String pageName)
-    {
-        PortletPageResolver resolver = newMock(PortletPageResolver.class);
-        
-        expect(resolver.getPageNameForRequest(cycle)).andReturn(pageName);
-        
-        return resolver;
-    }
-
-    private void trainGetWindowState(PortletRequest request, WindowState state)
-    {
-        expect(request.getWindowState()).andReturn(state);
-    }
-
-    private void trainGetPortletMode(PortletRequest request, PortletMode mode)
-    {
-        expect(request.getPortletMode()).andReturn(mode);
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestRenderWebResponse.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestRenderWebResponse.java
deleted file mode 100644
index 68322d0..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/TestRenderWebResponse.java
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet;
-
-import static org.easymock.EasyMock.expect;
-
-import org.apache.tapestry.util.ContentType;
-import org.testng.annotations.Test;
-
-import javax.portlet.RenderResponse;
-
-/**
- * Tests for {@link org.apache.tapestry.portlet.RenderWebResponse}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test
-public class TestRenderWebResponse extends BasePortletWebTestCase
-{
-    private RenderResponse newResponse()
-    {
-        return newMock(RenderResponse.class);
-    }
-
-    public void testReset()
-    {
-        RenderResponse response = newResponse();
-
-        response.reset();
-
-        replay();
-
-        RenderWebResponse rwr = new RenderWebResponse(response);
-
-        rwr.reset();
-
-        verify();
-    }
-
-    public void testGetOutputStream() throws Exception
-    {
-        RenderResponse response = newMock(RenderResponse.class);
-        
-        replay();
-
-        RenderWebResponse rwr = new RenderWebResponse(response);
-
-        try
-        {
-            rwr.getOutputStream(new ContentType("foo/bar"));
-            unreachable();
-        }
-        catch (UnsupportedOperationException ex)
-        {
-            // Expected.
-        }
-
-        verify();
-    }
-
-    public void testGetNamespace()
-    {
-        RenderResponse response = newMock(RenderResponse.class);
-        
-        expect(response.getNamespace()).andReturn("_NAMESPACE_");
-        
-        replay();
-
-        RenderWebResponse rwr = new RenderWebResponse(response);
-
-        assertEquals("_NAMESPACE_", rwr.getNamespace());
-
-        verify();
-    }
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/bindings/TestUserAttributeBinding.java b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/bindings/TestUserAttributeBinding.java
deleted file mode 100644
index 7a2e92c..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/bindings/TestUserAttributeBinding.java
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.portlet.bindings;
-
-import static org.easymock.EasyMock.*;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.Location;
-import org.apache.tapestry.BaseComponentTestCase;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.coerce.ValueConverter;
-import org.testng.annotations.Test;
-
-import javax.portlet.PortletRequest;
-
-/**
- * Tests for {@link org.apache.tapestry.portlet.bindings.UserAttributeBinding} and
- * {@link org.apache.tapestry.portlet.bindings.UserAttributeBindingFactory}.
- * 
- * @author Howard M. Lewis Ship
- * @since 4.0
- */
-@Test(sequential=true)
-public class TestUserAttributeBinding extends BaseComponentTestCase
-{
-    private IBinding newBinding(String bindingDescription, ValueConverter converter,
-            Location location, PortletRequest request, String attributeName)
-    {
-        UserAttributeBindingFactory factory = new UserAttributeBindingFactory();
-        factory.setValueConverter(converter);
-        factory.setRequest(request);
-
-        return factory.createBinding(null, bindingDescription, attributeName, location);
-    }
-
-    private Map newMap(String key, String value)
-    {
-        Map map = newMock(Map.class);
-        checkOrder(map, false);
-        
-        expect(map.get(key)).andReturn(value);
-        
-        return map;
-    }
-
-    private ValueConverter newConverter()
-    {
-        return newMock(ValueConverter.class);
-    }
-
-    private PortletRequest newRequest(Map userInfo)
-    {
-        PortletRequest request = newMock(PortletRequest.class);
-
-        expect(request.getAttribute(PortletRequest.USER_INFO)).andReturn(userInfo);
-
-        return request;
-    }
-
-    public void testGetObject()
-    {
-        Map map = newMap("foo.bar", "baz");
-        PortletRequest request = newRequest(map);
-        ValueConverter vc = newConverter();
-        Location l = newLocation();
-        
-        replay();
-
-        IBinding b = newBinding("description", vc, l, request, "foo.bar");
-
-        assertSame(l, b.getLocation());
-        assertEquals("description", b.getDescription());
-        assertEquals(false, b.isInvariant());
-        assertEquals("baz", b.getObject());
-
-        verify();
-    }
-
-    public void testGetObjectNoUserInfo()
-    {
-        ValueConverter vc = newConverter();
-        PortletRequest request = newRequest(null);
-        Location l = newLocation();
-
-        replay();
-
-        IBinding b = newBinding("description", vc, l, request, "foo.bar");
-
-        try
-        {
-            b.getObject();
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(BindingsMessages.noUserInfo(), ex.getMessage());
-            assertSame(l, ex.getLocation());
-        }
-
-        verify();
-    }
-
-    public void testSetObject()
-    {
-        Object newValue = new Object();
-        String valueConverted = "CONVERTED";
-
-        Map map = new HashMap();
-        
-        ValueConverter converter = newMock(ValueConverter.class);
-        Location l = newLocation();
-
-        expect(converter.coerceValue(newValue, String.class)).andReturn(valueConverted);
-        
-        PortletRequest request = newRequest(map);
-        
-        replay();
-
-        IBinding b = newBinding("description", converter, l, request, "foo.bar");
-
-        b.setObject(newValue);
-
-        assertSame(valueConverted, map.get("foo.bar"));
-
-        verify();
-    }
-
-}
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/hivemodule-portlet.xml b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/hivemodule-portlet.xml
deleted file mode 100644
index 7eedec1..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/hivemodule-portlet.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.portlet.test.portlet" version="4.0.0">
-  
-  <contribution configuration-id="hivemind.FactoryDefaults">
-    <default symbol="module-portlet" value="parsed"/>    
-  </contribution>
-  
-</module>
\ No newline at end of file
diff --git a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/hivemodule.xml b/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/hivemodule.xml
deleted file mode 100644
index ab47edb..0000000
--- a/tapestry/tapestry-portlet/src/test/org/apache/tapestry/portlet/hivemodule.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Copyright 2005 The Apache Software Foundation
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<module id="tapestry.portlet.test" version="4.0.0">
-  
-  <contribution configuration-id="hivemind.FactoryDefaults">
-    <default symbol="module-plain" value="parsed"/>    
-  </contribution>
-  
-</module>
\ No newline at end of file